ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjU5ZDM4MzIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTUsMTEgKzE1LDEzIEBACiBEb2MvdG9vbHMvcHlnbWVudHMvCiBEb2MvdG9vbHMvc3BoaW54LwogTGliL2xpYjJ0bzMvKi5waWNrbGUKK0xpYi90ZXN0L2RhdGEvKgogTGliL19zeXNjb25maWdkYXRhLnB5CiBMaWIvcGxhdC1tYWMvZXJyb3JzLnJzcmMuZGYucnNyYwogTWFrZWZpbGUKIE1ha2VmaWxlLnByZQogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaAogTW9kdWxlcy9TZXR1cAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKQEAgLTU3LDYgKzU5LDggQEAKIHB5YnVpbGRkaXIudHh0CiBweWNvbmZpZy5oCiBweXRob24KK3B5dGhvbi1jb25maWcKK3B5dGhvbi1jb25maWcucHkKIHB5dGhvbi5leGUKIHB5dGhvbi1nZGIucHkKIHB5dGhvbi5leGUtZ2RiLnB5CmRpZmYgLS1naXQgYS8uaGdlb2wgYi8uaGdlb2wKaW5kZXggNGUwMzY5MC4uYWFkNzljMiAxMDA2NDQKLS0tIGEvLmhnZW9sCisrKyBiLy5oZ2VvbApAQCAtMjYsNiArMjYsNyBAQAogKioucHNkICA9IEJJTgogKioudGFyICA9IEJJTgogKioud2F2ICA9IEJJTgorKioud2hsICA9IEJJTgogKioueGFyICA9IEJJTgogKiouemlwICA9IEJJTgogCmRpZmYgLS1naXQgYS8uaGdpZ25vcmUgYi8uaGdpZ25vcmUKaW5kZXggYzQyZGQwMy4uNjEyOGMyYiAxMDA2NDQKLS0tIGEvLmhnaWdub3JlCisrKyBiLy5oZ2lnbm9yZQpAQCAtMTksNiArMTksOCBAQAogcHljb25maWcuaCQKIHB5dGhvbiQKIHB5dGhvbi5leGUkCitweXRob24tY29uZmlnJAorcHl0aG9uLWNvbmZpZy5weSQKIHJlZmxvZy50eHQkCiB0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKQEAgLTI4LDEyICszMCwxNCBAQAogRG9jL3Rvb2xzL2ppbmphMi8KIERvYy90b29scy9weWdtZW50cy8KIE1pc2MvcHl0aG9uLnBjCitNaXNjL3B5dGhvbi1jb25maWcuc2gkCiBNb2R1bGVzL1NldHVwJAogTW9kdWxlcy9TZXR1cC5jb25maWcKIE1vZHVsZXMvU2V0dXAubG9jYWwKIE1vZHVsZXMvY29uZmlnLmMKIE1vZHVsZXMvbGRfc29fYWl4JAogUGFyc2VyL3BnZW4kCitebGNvdi1yZXBvcnQvCiBeY29yZQogXnB5dGhvbi1nZGIucHkKIF5weXRob24uZXhlLWdkYi5weQpAQCAtODIsNiArODYsOSBAQAogUENidWlsZC9XaW4zMi10ZW1wLSoKIFBDYnVpbGQveDY0LXRlbXAtKgogUENidWlsZC9hbWQ2NAorUENidWlsZC9pcGNoCitUb29scy91bmljb2RlL2J1aWxkLworVG9vbHMvdW5pY29kZS9NQVBQSU5HUy8KIEJ1aWxkTG9nLmh0bQogX19weWNhY2hlX18KIE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIKQEAgLTg5LDMgKzk2LDcgQEAKIC5jb3ZlcmFnZQogY292ZXJhZ2UvCiBodG1sY292LworKi5nY2RhCisqLmdjbm8KKyouZ2NvdgorY292ZXJhZ2UuaW5mbwpkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggNzgwMWFjZi4uMmJmZWU0OSAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC0xMTgsMyArMTE4LDggQEAKIGZkNTNjNTAwZjhiODBmNTRmM2VjZWRlYzlkYTJlOGM3ZTUyYTY4ODggdjMuMy4zcmMxCiBkMzI0NDJjMGU2MGRmYmQ3MTIzNGU4MDdkM2QxZGVkZDIyNzQ5NWE5IHYzLjMuM3JjMgogYzM4OTYyNzVjMGY2MWIyNTEwYTZjN2U2YzQ1OGE3NTAzNTlhOTFiOCB2My4zLjMKKzQ2NTM1ZjY1ZTdmM2JjZGNmMTc2ZjM2ZDM0YmMxZmVkNzE5ZmZkMmIgdjMuNC4wYTEKKzkyNjVhMjE2OGUyY2IyYTg0Nzg1ZDg3MTc3OTJhY2M2NjFlNmI2OTIgdjMuNC4wYTIKK2RkOWNkZjkwYTUwNzM1MTA4NzdlOWRkNTExMmY4ZTZjZjIwZDVlODkgdjMuNC4wYTMKK2UyNDViMGQ3MjA5YmI2ZDBlMTkzMTZlMWUyYWYxYWE5YzIxMzkxMDQgdjMuNC4wYTQKKzM0MDVkYzlhNmFmYWEwYTA2ZGQxZjZmMTgyZWM1Yzk5OGRjZTZmNWYgdjMuNC4wYjEKZGlmZiAtLWdpdCBhLy5oZ3RvdWNoIGIvLmhndG91Y2gKaW5kZXggMGFmOGMxOS4uN2UzYTVlNyAxMDA2NDQKLS0tIGEvLmhndG91Y2gKKysrIGIvLmhndG91Y2gKQEAgLTQsOCArNCw4IEBACiAKIFB5dGhvbi9pbXBvcnRsaWIuaDogTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwogCi1JbmNsdWRlL2FzdC5oOiBQYXJzZXIvUHl0aG9uLmFzZGwgUGFyc2VyL2FzZGwucHkgUGFyc2VyL2FzZGxfYy5weQotUHl0aG9uL1B5dGhvbi1hc3QuYzogSW5jbHVkZS9hc3QuaAorSW5jbHVkZS9QeXRob24tYXN0Lmg6IFBhcnNlci9QeXRob24uYXNkbCBQYXJzZXIvYXNkbC5weSBQYXJzZXIvYXNkbF9jLnB5CitQeXRob24vUHl0aG9uLWFzdC5jOiBJbmNsdWRlL1B5dGhvbi1hc3QuaAogCiBQeXRob24vb3Bjb2RlX3RhcmdldHMuaDogUHl0aG9uL21ha2VvcGNvZGV0YXJnZXRzLnB5IExpYi9vcGNvZGUucHkKIApkaWZmIC0tZ2l0IGEvRG9jL1JFQURNRS50eHQgYi9Eb2MvUkVBRE1FLnR4dAppbmRleCBjNjNmYzYwLi42NGUzMDdlIDEwMDY0NAotLS0gYS9Eb2MvUkVBRE1FLnR4dAorKysgYi9Eb2MvUkVBRE1FLnR4dApAQCAtNyw3ICs3LDggQEAKIAogRG9jdW1lbnRhdGlvbiBvbiB0aGUgYXV0aG9yaW5nIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWJvdXQKIGJvdGggc3R5bGUgYW5kIG1hcmt1cCwgaXMgYXZhaWxhYmxlIGluIHRoZSAiRG9jdW1lbnRpbmcgUHl0aG9uIiBjaGFwdGVyIG9mIHRoZQotZG9jdW1lbnRhdGlvbi4gIFRoZXJlJ3MgYWxzbyBhIGNoYXB0ZXIgaW50ZW5kZWQgdG8gcG9pbnQgb3V0IGRpZmZlcmVuY2VzIHRvCitkZXZlbG9wZXJzIGd1aWRlIChodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2RvY3VtZW50aW5nLmh0bWwpLgorVGhlcmUncyBhbHNvIGEgY2hhcHRlciBpbnRlbmRlZCB0byBwb2ludCBvdXQgZGlmZmVyZW5jZXMgdG8KIHRob3NlIGZhbWlsaWFyIHdpdGggdGhlIHByZXZpb3VzIGRvY3Mgd3JpdHRlbiBpbiBMYVRlWC4KIAogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0IGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAppbmRleCA2NTkwNGVlLi4yZDU2Mzg2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29uY3JldGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKQEAgLTc0LDI2ICs3NCwzNSBAQAogCiAuLiBfbWFwb2JqZWN0czoKIAotTWFwcGluZyBPYmplY3RzCi09PT09PT09PT09PT09PT0KK0NvbnRhaW5lciBPYmplY3RzCis9PT09PT09PT09PT09PT09PQogCiAuLiBpbmRleDo6IG9iamVjdDogbWFwcGluZwogCiAuLiB0b2N0cmVlOjoKIAogICAgZGljdC5yc3QKKyAgIHNldC5yc3QKIAogCiAuLiBfb3RoZXJvYmplY3RzOgogCitGdW5jdGlvbiBPYmplY3RzCis9PT09PT09PT09PT09PT09CisKKy4uIHRvY3RyZWU6OgorCisgICBmdW5jdGlvbi5yc3QKKyAgIG1ldGhvZC5yc3QKKyAgIGNlbGwucnN0CisgICBjb2RlLnJzdAorCisKIE90aGVyIE9iamVjdHMKID09PT09PT09PT09PT0KIAogLi4gdG9jdHJlZTo6CiAKLSAgIHNldC5yc3QKLSAgIGZ1bmN0aW9uLnJzdAotICAgbWV0aG9kLnJzdAogICAgZmlsZS5yc3QKICAgIG1vZHVsZS5yc3QKICAgIGl0ZXJhdG9yLnJzdApAQCAtMTAyLDcgKzExMSw2IEBACiAgICBtZW1vcnl2aWV3LnJzdAogICAgd2Vha3JlZi5yc3QKICAgIGNhcHN1bGUucnN0Ci0gICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0Ci0gICBjb2RlLnJzdAorCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGljdC5yc3QgYi9Eb2MvYy1hcGkvZGljdC5yc3QKaW5kZXggNmJhY2MzMi4uNWE5ZGNhMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RpY3QucnN0CisrKyBiL0RvYy9jLWFwaS9kaWN0LnJzdApAQCAtODQsNyArODQsNyBAQAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJlbW92ZSB0aGUgZW50cnkgaW4gZGljdGlvbmFyeSAqcCogd2hpY2ggaGFzIGEga2V5IHNwZWNpZmllZCBieSB0aGUgc3RyaW5nCiAgICAqa2V5Ki4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtMTEwLDYgKzExMCwxNSBAQAogICAgOmM6dHlwZTpgY2hhclwqYCwgcmF0aGVyIHRoYW4gYSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9TZXREZWZhdWx0KFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdCkKKworICAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgUHl0aG9uLWxldmVsIDptZXRoOmBkaWN0LnNldGRlZmF1bHRgLiAgSWYgcHJlc2VudCwgaXQKKyAgIHJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gKmtleSogZnJvbSB0aGUgZGljdGlvbmFyeSAqcCouICBJZiB0aGUga2V5CisgICBpcyBub3QgaW4gdGhlIGRpY3QsIGl0IGlzIGluc2VydGVkIHdpdGggdmFsdWUgKmRlZmF1bHRvYmoqIGFuZCAqZGVmYXVsdG9iaioKKyAgIGlzIHJldHVybmVkLiAgVGhpcyBmdW5jdGlvbiBldmFsdWF0ZXMgdGhlIGhhc2ggZnVuY3Rpb24gb2YgKmtleSogb25seSBvbmNlLAorICAgaW5zdGVhZCBvZiBldmFsdWF0aW5nIGl0IGluZGVwZW5kZW50bHkgZm9yIHRoZSBsb29rdXAgYW5kIHRoZSBpbnNlcnRpb24uCisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggYzNkOTc4Zi4uODY1OGE1OCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtMjM1LDcgKzIzNSw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZSBmaWxlbmFtZQogICAgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGhlCiAgICBmaWxlbmFtZSBpcyBnaXZlbiBhcyBhIEMgc3RyaW5nLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorICAgZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBQeU9iamVjdCAqZmlsZW5hbWUpCkBAIC0yOTMsMjAgKzI5MywyNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICBTZXQgZmlsZSwgbGluZSwgYW5kIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiAgSWYgdGhlCiAgICBjdXJyZW50IGV4Y2VwdGlvbiBpcyBub3QgYSA6ZXhjOmBTeW50YXhFcnJvcmAsIHRoZW4gaXQgc2V0cyBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGVzLCB3aGljaCBtYWtlIHRoZSBleGNlcHRpb24gcHJpbnRpbmcgc3Vic3lzdGVtIHRoaW5rIHRoZSBleGNlcHRpb24KLSAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKKworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdGAsIGJ1dCAqZmlsZW5hbWUqIGlzIGEgYnl0ZSBzdHJpbmcKKyAgIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uKGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogCi0gICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uRXhjYCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcworICAgTGlrZSA6YzpmdW5jOmBQeUVycl9TeW50YXhMb2NhdGlvbkV4YCwgYnV0IHRoZSBjb2xfb2Zmc2V0IHBhcmFtZXRlciBpcwogICAgb21pdHRlZC4KIAogCkBAIC0zNTUsMTUgKzM2MiwyMiBAQAogICAgZG9jdW1lbnRhdGlvbi4gIFRoZXJlIGlzIG5vIEMgQVBJIGZvciB3YXJuaW5nIGNvbnRyb2wuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCi0gICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBkZXNjcmliZWQgdGhlcmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqbWVzc2FnZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdGAgZXhjZXB0IHRoYXQgKm1lc3NhZ2UqIGFuZAorICAgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywgYW5kICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YG9zLmZzZGVjb2RlYCkuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlfc3NpemVfdCBzdGFja19sZXZlbCwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjZjZDJiOGIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgIGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGNvbXBpbGUKIApAQCAtMTQ1LDcgKzE0NSw3IEBACiAgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCiAgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCkBAIC0xNjIsNyArMTYyLDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsIGNoYXIgKmNwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY29uc3QgY2hhciAqcGF0aG5hbWUsIGNvbnN0IGNoYXIgKmNwYXRobmFtZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdGAsIGJ1dCAqbmFtZSosICpwYXRobmFtZSogYW5kCiAgICAqY3BhdGhuYW1lKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLiBBdHRlbXB0cyBhcmUgYWxzbyBtYWRlIHRvIGZpZ3VyZSBvdXQKQEAgLTI0Niw3ICsyNDYsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0YCwgYnV0IHRoZSBuYW1lIGlzIGEKICAgIFVURi04IGVuY29kZWQgc3RyaW5nIGluc3RlYWQgb2YgYSBVbmljb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCA3MDU1MDlmLi42NDM5ZDdmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC04Niw2ICs4NiwzNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT0KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycykKKworICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBQeV9Jbml0aWFsaXplKCkKKyAgICAgIHNpbmdsZTogbWFpbigpCisgICAgICB0cmlwbGU6IHN0ZGluOyBzdGRvdXQ7IHNkdGVycgorCisgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCBpZiBpdCBpcworICAgY2FsbGVkIGF0IGFsbC4gSXQgc3BlY2lmaWVzIHdoaWNoIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGluZyB0byB1c2UKKyAgIHdpdGggc3RhbmRhcmQgSU8sIHdpdGggdGhlIHNhbWUgbWVhbmluZ3MgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorCisgICBJdCBvdmVycmlkZXMgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgdmFsdWVzLCBhbmQgYWxsb3dzIGVtYmVkZGluZyBjb2RlCisgICB0byBjb250cm9sIElPIGVuY29kaW5nIHdoZW4gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGRvZXMgbm90IHdvcmsuCisKKyAgIGBgZW5jb2RpbmdgYCBhbmQvb3IgYGBlcnJvcnNgYCBtYXkgYmUgTlVMTCB0byB1c2UKKyAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGFuZC9vciBkZWZhdWx0IHZhbHVlcyAoZGVwZW5kaW5nIG9uIG90aGVyCisgICBzZXR0aW5ncykuCisKKyAgIE5vdGUgdGhhdCA6ZGF0YTpgc3lzLnN0ZGVycmAgYWx3YXlzIHVzZXMgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvcgorICAgaGFuZGxlciwgcmVnYXJkbGVzcyBvZiB0aGlzIChvciBhbnkgb3RoZXIpIHNldHRpbmcuCisKKyAgIElmIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBpcyBjYWxsZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZWVkIHRvIGJlIGNhbGxlZAorICAgYWdhaW4gaW4gb3JkZXIgdG8gYWZmZWN0IHN1YnNlcXVlbnQgY2FsbHMgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisKKyAgIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCBhIG5vbnplcm8gdmFsdWUgb24gZXJyb3IgKGUuZy4gY2FsbGluZyBhZnRlciB0aGUKKyAgIGludGVycHJldGVyIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQcm9ncmFtTmFtZSh3Y2hhcl90ICpuYW1lKQogCiAgICAuLiBpbmRleDo6CkBAIC0zMjksNyArMzU5LDExIEBACiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gMS4KKyAgIFRoaXMgZnVuY3Rpb24gd29ya3MgbGlrZSA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldAorICAgdG8gMSB1bmxlc3MgdGhlIDpwcm9ncmFtOmBweXRob25gIGludGVycHJldGVyIHdhcyBzdGFydGVkIHdpdGggdGhlCisgICA6b3B0aW9uOmAtSWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IFRoZSAqdXBkYXRlcGF0aCogdmFsdWUgZGVwZW5kcyBvbiA6b3B0aW9uOmAtSWAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtNjU3LDYgKzY5MSwyMCBAQAogICAgbWFkZSBvbiB0aGUgbWFpbiB0aHJlYWQuICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHSUxTdGF0ZV9DaGVjaygpCisKKyAgIFJldHVybiAxIGlmIHRoZSBjdXJyZW50IHRocmVhZCBpcyBob2xkaW5nIHRoZSBHSUwgYW5kIDAgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZCBhdCBhbnkgdGltZS4KKyAgIE9ubHkgaWYgaXQgaGFzIGhhZCBpdHMgUHl0aG9uIHRocmVhZCBzdGF0ZSBpbml0aWFsaXplZCBhbmQgY3VycmVudGx5IGlzCisgICBob2xkaW5nIHRoZSBHSUwgd2lsbCBpdCByZXR1cm4gMS4KKyAgIFRoaXMgaXMgbWFpbmx5IGEgaGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24uICBJdCBjYW4gYmUgdXNlZnVsCisgICBmb3IgZXhhbXBsZSBpbiBjYWxsYmFjayBjb250ZXh0cyBvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMgd2hlbgorICAga25vd2luZyB0aGF0IHRoZSBHSUwgaXMgbG9ja2VkIGNhbiBhbGxvdyB0aGUgY2FsbGVyIHRvIHBlcmZvcm0gc2Vuc2l0aXZlCisgICBhY3Rpb25zIG9yIG90aGVyd2lzZSBiZWhhdmUgZGlmZmVyZW50bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi4yODAzZmQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtNjcsMTMgKzY3LDEzIEBACiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9ba2V5XWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqIGluIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeS5yc3QgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdAppbmRleCA4YWZhNTZhLi5hODJlMWMyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWVtb3J5LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5LnJzdApAQCAtODQsNiArODQsNDggQEAKIGZvciB0aGUgSS9PIGJ1ZmZlciBlc2NhcGVzIGNvbXBsZXRlbHkgdGhlIFB5dGhvbiBtZW1vcnkgbWFuYWdlci4KIAogCitSYXcgTWVtb3J5IEludGVyZmFjZQorPT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBzZXRzIGFyZSB3cmFwcGVycyB0byB0aGUgc3lzdGVtIGFsbG9jYXRvci4gVGhlc2UKK2Z1bmN0aW9ucyBhcmUgdGhyZWFkLXNhZmUsIHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGRvZXMgbm90CituZWVkIHRvIGJlIGhlbGQuCisKK1RoZSBkZWZhdWx0IHJhdyBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3TWFsbG9jKHNpemVfdCBuKQorCisgICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjOnR5cGU6YHZvaWRcKmAgdG8gdGhlCisgICBhbGxvY2F0ZWQgbWVtb3J5LCBvciAqTlVMTCogaWYgdGhlIHJlcXVlc3QgZmFpbHMuIFJlcXVlc3RpbmcgemVybyBieXRlcworICAgcmV0dXJucyBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYKKyAgIGBgUHlNZW1fUmF3TWFsbG9jKDEpYGAgaGFkIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SYXdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQorCisgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbAorICAgYmUgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosCisgICB0aGUgY2FsbCBpcyBlcXVpdmFsZW50IHRvIGBgUHlNZW1fUmF3TWFsbG9jKG4pYGA7IGVsc2UgaWYgKm4qIGlzIGVxdWFsIHRvCisgICB6ZXJvLCB0aGUgbWVtb3J5IGJsb2NrIGlzIHJlc2l6ZWQgYnV0IGlzIG5vdCBmcmVlZCwgYW5kIHRoZSByZXR1cm5lZCBwb2ludGVyCisgICBpcyBub24tKk5VTEwqLiBVbmxlc3MgKnAqIGlzICpOVUxMKiwgaXQgbXVzdCBoYXZlIGJlZW4gcmV0dXJuZWQgYnkgYQorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLiBJZgorICAgdGhlIHJlcXVlc3QgZmFpbHMsIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgIHJldHVybnMgKk5VTEwqIGFuZCAqcCogcmVtYWlucworICAgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBtZW1vcnkgYXJlYS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnApCisKKyAgIEZyZWVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCosIHdoaWNoIG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4KKyAgIE90aGVyd2lzZSwgb3IgaWYgYGBQeU1lbV9GcmVlKHApYGAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkCisgICBiZWhhdmlvciBvY2N1cnMuIElmICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCisKKwogLi4gX21lbW9yeWludGVyZmFjZToKIAogTWVtb3J5IEludGVyZmFjZQpAQCAtOTEsOCArMTMzLDE2IEBACiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cywgbW9kZWxlZCBhZnRlciB0aGUgQU5TSSBDIHN0YW5kYXJkLCBidXQgc3BlY2lmeWluZwogYmVoYXZpb3Igd2hlbiByZXF1ZXN0aW5nIHplcm8gYnl0ZXMsIGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZwotbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwOgorbWVtb3J5IGZyb20gdGhlIFB5dGhvbiBoZWFwLgogCitUaGUgZGVmYXVsdCBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIHVzZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Cis6YzpmdW5jOmBtYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWA7IGNhbGwgYGBtYWxsb2MoMSlgYCB3aGVuCityZXF1ZXN0aW5nIHplcm8gYnl0ZXMuCisKKy4uIHdhcm5pbmc6OgorCisgICBUaGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBtdXN0IGJlIGhlbGQgd2hlbiB1c2luZyB0aGVzZQorICAgZnVuY3Rpb25zLgogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCkBAIC0xNTUsNiArMjA1LDEyNSBAQAogOmM6ZnVuYzpgUHlNZW1fTkVXYCwgOmM6ZnVuYzpgUHlNZW1fUkVTSVpFYCwgOmM6ZnVuYzpgUHlNZW1fREVMYC4KIAogCitDdXN0b21pemUgTWVtb3J5IEFsbG9jYXRvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3IKKworICAgU3RydWN0dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yLiBUaGUgc3RydWN0dXJlIGhhcworICAgZm91ciBmaWVsZHM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgYGB2b2lkICpjdHhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiBtYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICAgICAgICAgfCBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkKiByZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpYGAgfCBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpYGAgICAgICAgICAgICAgICAgICAgICAgfCBmcmVlIGEgbWVtb3J5IGJsb2NrICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gYzp0eXBlOjogUHlNZW1BbGxvY2F0b3JEb21haW4KKworICAgRW51bSB1c2VkIHRvIGlkZW50aWZ5IGFuIGFsbG9jYXRvciBkb21haW4uIERvbWFpbnM6CisKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX1JBV2A6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX01FTWA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgICogOmM6ZGF0YTpgUFlNRU1fRE9NQUlOX09CSmA6IGZ1bmN0aW9ucyA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisgICBUaGUgbmV3IGFsbG9jYXRvciBtdXN0IHJldHVybiBhIGRpc3RpbmN0IG5vbi1OVUxMIHBvaW50ZXIgd2hlbiByZXF1ZXN0aW5nCisgICB6ZXJvIGJ5dGVzLgorCisgICBGb3IgdGhlIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlCisgICB0aHJlYWQtc2FmZTogdGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgaXMgbm90IGhlbGQgd2hlbiB0aGUKKyAgIGFsbG9jYXRvciBpcyBjYWxsZWQuCisKKyAgIElmIHRoZSBuZXcgYWxsb2NhdG9yIGlzIG5vdCBhIGhvb2sgKGRvZXMgbm90IGNhbGwgdGhlIHByZXZpb3VzIGFsbG9jYXRvciksCisgICB0aGUgOmM6ZnVuYzpgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzYCBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlCisgICBkZWJ1ZyBob29rcyBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCisKKyAgIFNldHVwIGhvb2tzIHRvIGRldGVjdCBidWdzIGluIHRoZSBmb2xsb3dpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3IKKyAgIGZ1bmN0aW9uczoKKworICAgLSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3RnJlZWAKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLAorICAgICA6YzpmdW5jOmBQeU9iamVjdF9GcmVlYAorCisgICBOZXdseSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhDQmBgLCBmcmVlZCBtZW1vcnkgaXMKKyAgIGZpbGxlZCB3aXRoIHRoZSBieXRlIGBgMHhEQmBgLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBlODBlMGVhLi4yNmM0Mzg0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLmJlNmQ3OTggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0yNDAsNyArMjQwLDcgQEAKICAgIG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGNhbGxhYmxlX29iamVjdCgqYXJncylgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgKmNhbGxhYmxlKiwgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDIGFyZ3VtZW50cy4KICAgIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIHVzaW5nIGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgc3R5bGUgZm9ybWF0CkBAIC0yNTAsOCArMjUwLDExIEBACiAgICBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLCA6YzpmdW5jOmBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzYCBpcyBhCiAgICBmYXN0ZXIgYWx0ZXJuYXRpdmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgdHlwZSBvZiAqZm9ybWF0KiB3YXMgY2hhbmdlZCBmcm9tIGBgY2hhciAqYGAuCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLCBjaGFyICpmb3JtYXQsIC4uLikKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgKm1ldGhvZCogb2Ygb2JqZWN0ICpvKiB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIEMKICAgIGFyZ3VtZW50cy4gIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIGJ5IGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZm9ybWF0CkBAIC0yNjEsNiArMjY0LDkgQEAKICAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLAogICAgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3NgIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHR5cGVzIG9mICptZXRob2QqIGFuZCAqZm9ybWF0KiB3ZXJlIGNoYW5nZWQgZnJvbSBgYGNoYXIgKmBgLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsIC4uLiwgTlVMTCkKIApAQCAtMzQyLDYgKzM0OCwxNSBAQAogICAgcmV0dXJuZWQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxlbihvKWBgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgZGVmYXVsdCkKKworICAgUmV0dXJuIGFuIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKm8qLiBGaXJzdCB0cnlpbmcgdG8gcmV0dXJuIGl0cworICAgYWN0dWFsIGxlbmd0aCwgdGhlbiBhbiBlc3RpbWF0ZSB1c2luZyBgYF9fbGVuZ3RoX2hpbnRfX2BgLCBhbmQgZmluYWxseQorICAgcmV0dXJuaW5nIHRoZSBkZWZhdWx0IHZhbHVlLiBPbiBlcnJvciBgYC0xYGAgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdGhlCisgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KG8sIGRlZmF1bHQpYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCiAKICAgIFJldHVybiBlbGVtZW50IG9mICpvKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvYmplY3QgKmtleSogb3IgKk5VTEwqIG9uIGZhaWx1cmUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZW9iai5yc3QgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKaW5kZXggYjJiODAzOC4uNDhiMTNlNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlb2JqLnJzdApAQCAtNDY1LDYgKzQ2NSwxNCBAQAogICAgICAgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUdgLgogCiAKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUKKworICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9maW5hbGl6ZWAgc2xvdCBpcyBwcmVzZW50IGluIHRoZQorICAgICAgdHlwZSBzdHJ1Y3R1cmUuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGM6bWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX2RvYwogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcgZ2l2aW5nIHRoZSBkb2NzdHJpbmcgZm9yIHRoaXMKQEAgLTk2OCw2ICs5NzYsNDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZDsgaXQgaXMgY2FsY3VsYXRlZCBmcmVzaCBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAKKy4uIGM6bWVtYmVyOjogZGVzdHJ1Y3RvciBQeVR5cGVPYmplY3QudHBfZmluYWxpemUKKworICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBmaW5hbGl6YXRpb24gZnVuY3Rpb24uICBJdHMgc2lnbmF0dXJlIGlzCisgICA6Yzp0eXBlOmBkZXN0cnVjdG9yYDo6CisKKyAgICAgIHZvaWQgdHBfZmluYWxpemUoUHlPYmplY3QgKikKKworICAgSWYgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBpcyBzZXQsIHRoZSBpbnRlcnByZXRlciBjYWxscyBpdCBvbmNlIHdoZW4KKyAgIGZpbmFsaXppbmcgYW4gaW5zdGFuY2UuICBJdCBpcyBjYWxsZWQgZWl0aGVyIGZyb20gdGhlIGdhcmJhZ2UKKyAgIGNvbGxlY3RvciAoaWYgdGhlIGluc3RhbmNlIGlzIHBhcnQgb2YgYW4gaXNvbGF0ZWQgcmVmZXJlbmNlIGN5Y2xlKSBvcgorICAganVzdCBiZWZvcmUgdGhlIG9iamVjdCBpcyBkZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIGl0IGlzIGd1YXJhbnRlZWQKKyAgIHRvIGJlIGNhbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLCBlbnN1cmluZworICAgdGhhdCBpdCBmaW5kcyB0aGUgb2JqZWN0IGluIGEgc2FuZSBzdGF0ZS4KKworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzaG91bGQgbm90IG11dGF0ZSB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhdHVzOworICAgdGhlcmVmb3JlLCBhIHJlY29tbWVuZGVkIHdheSB0byB3cml0ZSBhIG5vbi10cml2aWFsIGZpbmFsaXplciBpczo6CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBsb2NhbF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKKyAgICAgIHsKKyAgICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgICAgICAgIC8qIC4uLiAqLworCisgICAgICAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgICB9CisKKyAgIEZvciB0aGlzIGZpZWxkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCAoZXZlbiB0aHJvdWdoIGluaGVyaXRhbmNlKSwKKyAgIHlvdSBtdXN0IGFsc28gc2V0IHRoZSA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRWAgZmxhZ3MgYml0LgorCisgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIHNlZWFsc286OiAiU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIiAoOnBlcDpgNDQyYCkKKworCiAuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfY2FjaGUKIAogICAgVW51c2VkLiAgTm90IGluaGVyaXRlZC4gIEludGVybmFsIHVzZSBvbmx5LgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IDM2NDljZmIuLmM3ZWQ1ZTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTUyNiwxMiArNTI2LDIzIEBACiAgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQogICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgogCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSB3aWR0aCBmb3JtYXR0ZXIgdW5pdCBpcyBudW1iZXIgb2YgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBieXRlcy4KKyAgICAgIFRoZSBwcmVjaXNpb24gZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGJ5dGVzIGZvciBgYCIlcyJgYCBhbmQKKyAgICAgIGBgIiVWImBgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBOVUxMKSwgYW5kIGEgbnVtYmVyIG9mCisgICAgICBjaGFyYWN0ZXJzIGZvciBgYCIlQSJgYCwgYGAiJVUiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhbmQgYGAiJVYiYGAKKyAgICAgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBub3QgTlVMTCkuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBTdXBwb3J0IGZvciBgYCIlbGxkImBgIGFuZCBgYCIlbGx1ImBgIGFkZGVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxpImBgLCBgYCIlbGxpImBgIGFuZCBgYCIlemkiYGAgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IHdpZHRoIGFuZCBwcmVjaXNpb24gZm9ybWF0dGVyIGZvciBgYCIlcyJgYCwgYGAiJUEiYGAsIGBgIiVVImBgLAorICAgICAgYGAiJVYiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhZGRlZC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IDE0ZWY4ZGYuLjlmMjFiODkgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMTQ0LDYgKzE0NCwzNyBAQAogICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBSZXR1cm5zIGBgMGBgIGF0IEVPRi4KIAogCisuLiBjOnZhcjo6IGludCAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKQorCisgICBDYW4gYmUgc2V0IHRvIHBvaW50IHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgcHJvdG90eXBlCisgICBgYGludCBmdW5jKHZvaWQpYGAuICBUaGUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBQeXRob24ncworICAgaW50ZXJwcmV0ZXIgcHJvbXB0IGlzIGFib3V0IHRvIGJlY29tZSBpZGxlIGFuZCB3YWl0IGZvciB1c2VyIGlucHV0CisgICBmcm9tIHRoZSB0ZXJtaW5hbC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgaWdub3JlZC4gIE92ZXJyaWRpbmcgdGhpcworICAgaG9vayBjYW4gYmUgdXNlZCB0byBpbnRlZ3JhdGUgdGhlIGludGVycHJldGVyJ3MgcHJvbXB0IHdpdGggb3RoZXIKKyAgIGV2ZW50IGxvb3BzLCBhcyBkb25lIGluIHRoZSA6ZmlsZTpgTW9kdWxlcy9fdGtpbnRlci5jYCBpbiB0aGUKKyAgIFB5dGhvbiBzb3VyY2UgY29kZS4KKworCisuLiBjOnZhcjo6IGNoYXIqICgqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKikKKworICAgQ2FuIGJlIHNldCB0byBwb2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHByb3RvdHlwZQorICAgYGBjaGFyICpmdW5jKEZJTEUgKnN0ZGluLCBGSUxFICpzdGRvdXQsIGNoYXIgKnByb21wdClgYCwKKyAgIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgZnVuY3Rpb24gdXNlZCB0byByZWFkIGEgc2luZ2xlIGxpbmUgb2YgaW5wdXQKKyAgIGF0IHRoZSBpbnRlcnByZXRlcidzIHByb21wdC4gIFRoZSBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBvdXRwdXQKKyAgIHRoZSBzdHJpbmcgKnByb21wdCogaWYgaXQncyBub3QgKk5VTEwqLCBhbmQgdGhlbiByZWFkIGEgbGluZSBvZgorICAgaW5wdXQgZnJvbSB0aGUgcHJvdmlkZWQgc3RhbmRhcmQgaW5wdXQgZmlsZSwgcmV0dXJuaW5nIHRoZQorICAgcmVzdWx0aW5nIHN0cmluZy4gIEZvciBleGFtcGxlLCBUaGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBzZXRzCisgICB0aGlzIGhvb2sgdG8gcHJvdmlkZSBsaW5lLWVkaXRpbmcgYW5kIHRhYi1jb21wbGV0aW9uIGZlYXR1cmVzLgorCisgICBUaGUgcmVzdWx0IG11c3QgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBvciAqTlVMTCogaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmVzdWx0IG11c3QgYmUgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd1JlYWxsb2NgLCBpbnN0ZWFkIG9mIGJlaW5nIGFsbG9jYXRlZCBieQorICAgICAgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworCiAuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzdGFydCkKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCkBAIC0yMzUsMTYgKzI2NiwxNSBAQAogICAgKm9wdGltaXplKiBzZXQgdG8gYGAtMWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogCiAgICBQYXJzZSBhbmQgY29tcGlsZSB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGluICpzdHIqLCByZXR1cm5pbmcgdGhlIHJlc3VsdGluZyBjb2RlCiAgICBvYmplY3QuICBUaGUgc3RhcnQgdG9rZW4gaXMgZ2l2ZW4gYnkgKnN0YXJ0KjsgdGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gdGhlCiAgICBjb2RlIHdoaWNoIGNhbiBiZSBjb21waWxlZCBhbmQgc2hvdWxkIGJlIDpjb25zdDpgUHlfZXZhbF9pbnB1dGAsCiAgICA6Y29uc3Q6YFB5X2ZpbGVfaW5wdXRgLCBvciA6Y29uc3Q6YFB5X3NpbmdsZV9pbnB1dGAuICBUaGUgZmlsZW5hbWUgc3BlY2lmaWVkIGJ5CiAgICAqZmlsZW5hbWUqIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjb2RlIG9iamVjdCBhbmQgbWF5IGFwcGVhciBpbiB0cmFjZWJhY2tzIG9yCi0gICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLCBpdCBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUKLSAgIGNvZGUgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KKyAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZSBjb2RlCisgICBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgogCiAgICBUaGUgaW50ZWdlciAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBjb21waWxlcjsgYQogICAgdmFsdWUgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIgYXMgZ2l2ZW4gYnkKQEAgLTI1Miw5ICsyODIsMTYgQEAKICAgIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZSksIGBgMWBgIChhc3NlcnRzIGFyZSByZW1vdmVkLCBgYF9fZGVidWdfX2BgIGlzIGZhbHNlKQogICAgb3IgYGAyYGAgKGRvY3N0cmluZ3MgYXJlIHJlbW92ZWQgdG9vKS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorCisgICBMaWtlIDpjOmZ1bmM6YFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzYCwgYnV0ICpmaWxlbmFtZSogaXMgYSBieXRlIHN0cmluZworICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxDb2RlKFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeUV2YWxfRXZhbENvZGVFeGAsIHdpdGgganVzdApAQCAtMzM4LDQgKzM3NSwzIEBACiAKICAgIFRoaXMgYml0IGNhbiBiZSBzZXQgaW4gKmZsYWdzKiB0byBjYXVzZSBkaXZpc2lvbiBvcGVyYXRvciBgYC9gYCB0byBiZQogICAgaW50ZXJwcmV0ZWQgYXMgInRydWUgZGl2aXNpb24iIGFjY29yZGluZyB0byA6cGVwOmAyMzhgLgotCmRpZmYgLS1naXQgYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0IGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdAppbmRleCBhNDI1ODRjLi44MTRjM2IwIDEwMDY0NAotLS0gYS9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CisrKyBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIFB5RGljdF9HZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpwOjA6CiBQeURpY3RfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6OjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6cDowOgorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmtleTowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmRlZmF1bHQ6MDpjb25kaXRpb25hbGx5ICsxIGlmIGluc2VydGVkIGludG8gdGhlIGRpY3QKKwogUHlEaWN0X0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOnA6MDoKIApAQCAtNTAzLDEzICs1MDgsMTMgQEAKIFB5SW1wb3J0X0NsZWFudXA6dm9pZDo6OgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpQeU9iamVjdCo6OisxOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0KjpjbzowOgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOmNvOjA6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOnBhdGhuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y29uc3QgY2hhcio6cGF0aG5hbWU6OgogCiBQeUltcG9ydF9HZXRNYWdpY051bWJlcjpsb25nOjo6CiAKQEAgLTUxOSw3ICs1MjQsNyBAQAogUHlJbXBvcnRfSW1wb3J0OlB5T2JqZWN0KjpuYW1lOjA6CiAKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTppbnQ6OjoKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTpjaGFyKjo6OgorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNvbnN0IGNoYXIqOjo6CiAKIFB5SW1wb3J0X0ltcG9ydE1vZHVsZTpQeU9iamVjdCo6OisxOgogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgpAQCAtNjY4LDcgKzY3Myw3IEBACiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc6dW5zaWduZWQgbG9uZyBsb25nOnY6OgogCiBQeUxvbmdfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlMb25nX0Zyb21TdHJpbmc6Y2hhcio6c3RyOjoKK1B5TG9uZ19Gcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cjo6CiBQeUxvbmdfRnJvbVN0cmluZzpjaGFyKio6cGVuZDo6CiBQeUxvbmdfRnJvbVN0cmluZzppbnQ6YmFzZTo6CiAKQEAgLTY5Niw3ICs3MDEsNyBAQAogCiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCiBQeU1hcHBpbmdfSGFzS2V5OmludDo6OgogUHlNYXBwaW5nX0hhc0tleTpQeU9iamVjdCo6bzowOgpAQCAtNzA0LDcgKzcwOSw3IEBACiAKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19JdGVtczpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0KjpvOjA6CkBAIC03MTcsNyArNzIyLDcgQEAKIAogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6djorMToKIAogUHlNYXBwaW5nX1ZhbHVlczpQeU9iamVjdCo6OisxOgpAQCAtNzMwLDcgKzczNSw3IEBACiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlOkZJTEUqOmZpbGU6OgogCiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6UHlPYmplY3QqOjorMToKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpjaGFyKjpzdHJpbmc6OgorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cmluZzo6CiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6aW50Omxlbjo6CiAKIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CkBAIC05MTIsNyArOTE3LDcgQEAKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOlB5T2JqZWN0Kjo6KzE6CiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOmNhbGxhYmxlX29iamVjdDowOgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsRnVuY3Rpb246Y29uc3QgY2hhcio6Zm9ybWF0OjoKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnczpQeU9iamVjdCo6OisxOgpAQCAtOTIxLDggKzkyNiw4IEBACiAKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOm86MDoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6bTo6Ci1QeU9iamVjdF9DYWxsTWV0aG9kOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOm06OgorUHlPYmplY3RfQ2FsbE1ldGhvZDpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbE1ldGhvZDo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M6UHlPYmplY3QqOjorMToKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCBkMWFiN2RiLi44M2M2OGFlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC0yMzksNyArMjM5LDggQEAKIGNvbmZpZ3VyYXRpb24gZmlsZSwgOmZpbGU6YHNldHVwLmNmZ2BcIC0tLXNlZSBzZWN0aW9uIDpyZWY6YHNldHVwLWNvbmZpZ2AuICBJZgogeW91IGRpc3RyaWJ1dGUgb3IgcGFja2FnZSBtYW55IFB5dGhvbiBtb2R1bGUgZGlzdHJpYnV0aW9ucywgeW91IG1pZ2h0IHdhbnQgdG8KIHB1dCBvcHRpb25zIHRoYXQgYXBwbHkgdG8gYWxsIG9mIHRoZW0gaW4geW91ciBwZXJzb25hbCBEaXN0dXRpbHMgY29uZmlndXJhdGlvbgotZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLgorZmlsZSAoOmZpbGU6YH4vLnB5ZGlzdHV0aWxzLmNmZ2ApLiAgSWYgeW91IHdhbnQgdG8gdGVtcG9yYXJpbHkgZGlzYWJsZQordGhpcyBmaWxlLCB5b3UgY2FuIHBhc3MgdGhlIDpvcHRpb246YC0tbm8tdXNlci1jZmdgIG9wdGlvbiB0byA6ZmlsZTpgc2V0dXAucHlgLgogCiBUaGVyZSBhcmUgdGhyZWUgc3RlcHMgdG8gYnVpbGRpbmcgYSBiaW5hcnkgUlBNIHBhY2thZ2UsIGFsbCBvZiB3aGljaCBhcmUKIGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgRGlzdHV0aWxzOgpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKaW5kZXggMTY2NjQzNi4uOWY3YTM4ZSAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CkBAIC0yNiwxNiArMjYsMTYgQEAKICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSsKIHwgYGB6aXBgYCAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgfCAoMSksKDMpIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCAoMiksKDQpIHwKK3wgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCBcKDIpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmd6YCkgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCBcKDQpICAgIHwKK3wgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCAgICAgICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmJ6MmApICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgYGB6dGFyYGAgIHwgY29tcHJlc3NlZCB0YXIgZmlsZSAgICAgfCBcKDQpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLlpgKSAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCBcKDQpICAgIHwKK3wgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIAogTm90ZXM6CkBAIC01MSw4ICs1MSwxNiBAQAogICAgb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IHNpbmNlIFB5dGhvbiAxLjYpCiAKICg0KQotICAgcmVxdWlyZXMgZXh0ZXJuYWwgdXRpbGl0aWVzOiA6cHJvZ3JhbTpgdGFyYCBhbmQgcG9zc2libHkgb25lIG9mIDpwcm9ncmFtOmBnemlwYCwKLSAgIDpwcm9ncmFtOmBiemlwMmAsIG9yIDpwcm9ncmFtOmBjb21wcmVzc2AKKyAgIHJlcXVpcmVzIHRoZSA6cHJvZ3JhbTpgY29tcHJlc3NgIHByb2dyYW0uIE5vdGljZSB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdworICAgcGVuZGluZyBmb3IgZGVwcmVjYXRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbi4KKworV2hlbiB1c2luZyBhbnkgYGB0YXJgYCBmb3JtYXQgKGBgZ3p0YXJgYCwgYGBienRhcmBgLCBgYHp0YXJgYCBvcgorYGB0YXJgYCksIHVuZGVyIFVuaXggeW91IGNhbiBzcGVjaWZ5IHRoZSBgYG93bmVyYGAgYW5kIGBgZ3JvdXBgYCBuYW1lcwordGhhdCB3aWxsIGJlIHNldCBmb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGFyY2hpdmUuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBhbGwgZmlsZXMgb2YgdGhlIGFyY2hpdmUgdG8gYmUgb3duZWQgYnkgcm9vdDo6CisKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdAogCiAKIC4uIF9tYW5pZmVzdDoKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAppbmRleCBiZDY2MDg2Li42Y2I2ODZhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CkBAIC0yODUsMTQgKzI4NSwxNCBAQAogKiBgYHB5dGhvblguWS1jb25maWcgLS1jZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGNvbXBpbGluZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWNmbGFncwotICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWNmbGFncworICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKIAogKiBgYHB5dGhvblguWS1jb25maWcgLS1sZGZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBsaW5raW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tbGRmbGFncwotICAgLUwvb3B0L2xpYi9weXRob24zLjMvY29uZmlnLTMuM20gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuM20gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1sZGZsYWdzCisgICAtTC9vcHQvbGliL3B5dGhvbjMuNC9jb25maWctMy40bSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy40bSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIAogLi4gbm90ZTo6CiAgICBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzZXZlcmFsIFB5dGhvbiBpbnN0YWxsYXRpb25zIChhbmQgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAppbmRleCBmNDg0YmE0Li40NWI1NzIxIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdApAQCAtMTU3LDcgKzE1Nyw4IEBACiAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAvKiB0cF9mbGFncyAqLwogCiBBbGwgdHlwZXMgc2hvdWxkIGluY2x1ZGUgdGhpcyBjb25zdGFudCBpbiB0aGVpciBmbGFncy4gIEl0IGVuYWJsZXMgYWxsIG9mIHRoZQotbWVtYmVycyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uLgorbWVtYmVycyBkZWZpbmVkIHVudGlsIGF0IGxlYXN0IFB5dGhvbiAzLjMuICBJZiB5b3UgbmVlZCBmdXJ0aGVyIG1lbWJlcnMsCit5b3Ugd2lsbCBuZWVkIHRvIE9SIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzLgogCiBXZSBwcm92aWRlIGEgZG9jIHN0cmluZyBmb3IgdGhlIHR5cGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RvY2AuIDo6CiAKQEAgLTkyOCw4ICs5MjksOSBAQAogCiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGluc3RhbmNlIG9mIHlvdXIgdHlwZSBpcwogcmVkdWNlZCB0byB6ZXJvIGFuZCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhbnRzIHRvIHJlY2xhaW0gaXQuICBJZiB5b3VyIHR5cGUKLWhhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCBwdXQgaXQgaGVyZS4gIFRoZSBvYmplY3QgaXRzZWxmCi1uZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcyBmdW5jdGlvbjo6CitoYXMgbWVtb3J5IHRvIGZyZWUgb3Igb3RoZXIgY2xlYW4tdXAgdG8gcGVyZm9ybSwgeW91IGNhbiBwdXQgaXQgaGVyZS4gIFRoZQorb2JqZWN0IGl0c2VsZiBuZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcworZnVuY3Rpb246OgogCiAgICBzdGF0aWMgdm9pZAogICAgbmV3ZGF0YXR5cGVfZGVhbGxvYyhuZXdkYXRhdHlwZW9iamVjdCAqIG9iaikKQEAgLTk4MCw2ICs5ODIsMjIgQEAKICAgICAgICBQeV9UWVBFKG9iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKICAgIH0KIAorLi4gbm90ZTo6CisgICBUaGVyZSBhcmUgbGltaXRhdGlvbnMgdG8gd2hhdCB5b3UgY2FuIHNhZmVseSBkbyBpbiBhIGRlYWxsb2NhdG9yIGZ1bmN0aW9uLgorICAgRmlyc3QsIGlmIHlvdXIgdHlwZSBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24gKHVzaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF90cmF2ZXJzZWAKKyAgIGFuZC9vciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfY2xlYXJgKSwgc29tZSBvZiB0aGUgb2JqZWN0J3MgbWVtYmVycyBjYW4gaGF2ZSBiZWVuCisgICBjbGVhcmVkIG9yIGZpbmFsaXplZCBieSB0aGUgdGltZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgaXMgY2FsbGVkLiAgU2Vjb25kLCBpbgorICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCB5b3VyIG9iamVjdCBpcyBpbiBhbiB1bnN0YWJsZSBzdGF0ZTogaXRzIHJlZmVyZW5jZQorICAgY291bnQgaXMgZXF1YWwgdG8gemVyby4gIEFueSBjYWxsIHRvIGEgbm9uLXRyaXZpYWwgb2JqZWN0IG9yIEFQSSAoYXMgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlKSBtaWdodCBlbmQgdXAgY2FsbGluZyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgYWdhaW4sIGNhdXNpbmcgYQorICAgZG91YmxlIGZyZWUgYW5kIGEgY3Jhc2guCisKKyAgIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIHB1dCBhbnkgY29tcGxleAorICAgZmluYWxpemF0aW9uIGNvZGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCBhbmQgaW5zdGVhZCB1c2UgdGhlIG5ldworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCB0eXBlIG1ldGhvZC4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6cGVwOmA0NDJgIGV4cGxhaW5zIHRoZSBuZXcgZmluYWxpemF0aW9uIHNjaGVtZS4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdHJpbmc7IG9iamVjdCByZXByZXNlbnRhdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9saWJyYXJ5LnJzdCBiL0RvYy9mYXEvbGlicmFyeS5yc3QKaW5kZXggYzhlZjllNy4uOGJkNzc0YiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9saWJyYXJ5LnJzdAorKysgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYyA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgICAgICAgICBwcmludCgiR290IGNoYXJhY3RlciIsIHJlcHIoYykpCi0gICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgIGZpbmFsbHk6CiAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGR0ZXJtKQpAQCAtMjI0LDcgKzIyNCwxMSBAQAogICAgOmZ1bmM6YHRlcm1pb3MudGNzZXRhdHRyYCB0dXJucyBvZmYgc3RkaW4ncyBlY2hvaW5nIGFuZCBkaXNhYmxlcyBjYW5vbmljYWwKICAgIG1vZGUuICA6ZnVuYzpgZmNudGwuZm5jdGxgIGlzIHVzZWQgdG8gb2J0YWluIHN0ZGluJ3MgZmlsZSBkZXNjcmlwdG9yIGZsYWdzCiAgICBhbmQgbW9kaWZ5IHRoZW0gZm9yIG5vbi1ibG9ja2luZyBtb2RlLiAgU2luY2UgcmVhZGluZyBzdGRpbiB3aGVuIGl0IGlzIGVtcHR5Ci0gICByZXN1bHRzIGluIGFuIDpleGM6YElPRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKyAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgT1NFcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnN5cy5zdGRpbi5yZWFkKiB1c2VkIHRvIHJhaXNlIDpleGM6YElPRXJyb3JgLiBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjMKKyAgICAgIDpleGM6YElPRXJyb3JgIGlzIGFsaWFzIGZvciA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaHJlYWRzCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IDg4N2YwYjQuLmFjMTJkYTMgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC0xNzQxLDEyICsxNzQxLDEyIEBACiBGb3IgcmVhc29ucyBvZiBlZmZpY2llbmN5IGFzIHdlbGwgYXMgY29uc2lzdGVuY3ksIFB5dGhvbiBvbmx5IHJlYWRzIHRoZSBtb2R1bGUKIGZpbGUgb24gdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMgaW1wb3J0ZWQuICBJZiBpdCBkaWRuJ3QsIGluIGEgcHJvZ3JhbQogY29uc2lzdGluZyBvZiBtYW55IG1vZHVsZXMgd2hlcmUgZWFjaCBvbmUgaW1wb3J0cyB0aGUgc2FtZSBiYXNpYyBtb2R1bGUsIHRoZQotYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZXJlYWRpbmcgb2YgYQorYmFzaWMgbW9kdWxlIHdvdWxkIGJlIHBhcnNlZCBhbmQgcmUtcGFyc2VkIG1hbnkgdGltZXMuICBUbyBmb3JjZSByZS1yZWFkaW5nIG9mIGEKIGNoYW5nZWQgbW9kdWxlLCBkbyB0aGlzOjoKIAotICAgaW1wb3J0IGltcAorICAgaW1wb3J0IGltcG9ydGxpYgogICAgaW1wb3J0IG1vZG5hbWUKLSAgIGltcC5yZWxvYWQobW9kbmFtZSkKKyAgIGltcG9ydGxpYi5yZWxvYWQobW9kbmFtZSkKIAogV2FybmluZzogdGhpcyB0ZWNobmlxdWUgaXMgbm90IDEwMCUgZm9vbC1wcm9vZi4gIEluIHBhcnRpY3VsYXIsIG1vZHVsZXMKIGNvbnRhaW5pbmcgc3RhdGVtZW50cyBsaWtlIDo6CkBAIC0xNzU4LDEwICsxNzU4LDEwIEBACiB1cGRhdGVkIHRvIHVzZSB0aGUgbmV3IGNsYXNzIGRlZmluaXRpb24uICBUaGlzIGNhbiByZXN1bHQgaW4gdGhlIGZvbGxvd2luZwogcGFyYWRveGljYWwgYmVoYXZpb3VyOgogCi0gICA+Pj4gaW1wb3J0IGltcAorICAgPj4+IGltcG9ydCBpbXBvcnRsaWIKICAgID4+PiBpbXBvcnQgY2xzCiAgICA+Pj4gYyA9IGNscy5DKCkgICAgICAgICAgICAgICAgIyBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQwotICAgPj4+IGltcC5yZWxvYWQoY2xzKQorICAgPj4+IGltcG9ydGxpYi5yZWxvYWQoY2xzKQogICAgPG1vZHVsZSAnY2xzJyBmcm9tICdjbHMucHknPgogICAgPj4+IGlzaW5zdGFuY2UoYywgY2xzLkMpICAgICAgICMgaXNpbnN0YW5jZSBpcyBmYWxzZT8hPwogICAgRmFsc2UKZGlmZiAtLWdpdCBhL0RvYy9nbG9zc2FyeS5yc3QgYi9Eb2MvZ2xvc3NhcnkucnN0CmluZGV4IDIzNDc4MjguLjhkZTM0N2IgMTAwNjQ0Ci0tLSBhL0RvYy9nbG9zc2FyeS5yc3QKKysrIGIvRG9jL2dsb3NzYXJ5LnJzdApAQCAtMzEwLDYgKzMxMCwxNSBAQAogICAgICAgICAgPj4+IHN1bShpKmkgZm9yIGkgaW4gcmFuZ2UoMTApKSAgICAgICAgICMgc3VtIG9mIHNxdWFyZXMgMCwgMSwgNCwgLi4uIDgxCiAgICAgICAgICAyODUKIAorICAgZ2VuZXJpYyBmdW5jdGlvbgorICAgICAgQSBmdW5jdGlvbiBjb21wb3NlZCBvZiBtdWx0aXBsZSBmdW5jdGlvbnMgaW1wbGVtZW50aW5nIHRoZSBzYW1lIG9wZXJhdGlvbgorICAgICAgZm9yIGRpZmZlcmVudCB0eXBlcy4gV2hpY2ggaW1wbGVtZW50YXRpb24gc2hvdWxkIGJlIHVzZWQgZHVyaW5nIGEgY2FsbCBpcworICAgICAgZGV0ZXJtaW5lZCBieSB0aGUgZGlzcGF0Y2ggYWxnb3JpdGhtLgorCisgICAgICBTZWUgYWxzbyB0aGUgOnRlcm06YHNpbmdsZSBkaXNwYXRjaGAgZ2xvc3NhcnkgZW50cnksIHRoZQorICAgICAgOmZ1bmM6YGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yLCBhbmQgOnBlcDpgNDQzYC4KKworCiAgICBHSUwKICAgICAgIFNlZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgLgogCkBAIC02NzEsMjAgKzY4MCwyNyBAQAogICAgcG9zaXRpb25hbCBhcmd1bWVudAogICAgICAgU2VlIDp0ZXJtOmBhcmd1bWVudGAuCiAKLSAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKLSAgICAgIEEgcHJvdmlzaW9uYWwgcGFja2FnZSBpcyBvbmUgd2hpY2ggaGFzIGJlZW4gZGVsaWJlcmF0ZWx5IGV4Y2x1ZGVkIGZyb20KKyAgIHByb3Zpc2lvbmFsIEFQSQorICAgICAgQSBwcm92aXNpb25hbCBBUEkgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCiAgICAgICB0aGUgc3RhbmRhcmQgbGlicmFyeSdzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGd1YXJhbnRlZXMuICBXaGlsZSBtYWpvcgotICAgICAgY2hhbmdlcyB0byBzdWNoIHBhY2thZ2VzIGFyZSBub3QgZXhwZWN0ZWQsIGFzIGxvbmcgYXMgdGhleSBhcmUgbWFya2VkCisgICAgICBjaGFuZ2VzIHRvIHN1Y2ggaW50ZXJmYWNlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAogICAgICAgcHJvdmlzaW9uYWwsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsCi0gICAgICBvZiB0aGUgcGFja2FnZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAorICAgICAgb2YgdGhlIGludGVyZmFjZSkgbWF5IG9jY3VyIGlmIGRlZW1lZCBuZWNlc3NhcnkgYnkgY29yZSBkZXZlbG9wZXJzLiAgU3VjaAogICAgICAgY2hhbmdlcyB3aWxsIG5vdCBiZSBtYWRlIGdyYXR1aXRvdXNseSAtLSB0aGV5IHdpbGwgb2NjdXIgb25seSBpZiBzZXJpb3VzCi0gICAgICBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbiBvZiB0aGUKLSAgICAgIHBhY2thZ2UuCisgICAgICBmdW5kYW1lbnRhbCBmbGF3cyBhcmUgdW5jb3ZlcmVkIHRoYXQgd2VyZSBtaXNzZWQgcHJpb3IgdG8gdGhlIGluY2x1c2lvbgorICAgICAgb2YgdGhlIEFQSS4KKworICAgICAgRXZlbiBmb3IgcHJvdmlzaW9uYWwgQVBJcywgYmFja3dhcmRzIGluY29tcGF0aWJsZSBjaGFuZ2VzIGFyZSBzZWVuIGFzCisgICAgICBhICJzb2x1dGlvbiBvZiBsYXN0IHJlc29ydCIgLSBldmVyeSBhdHRlbXB0IHdpbGwgc3RpbGwgYmUgbWFkZSB0byBmaW5kCisgICAgICBhIGJhY2t3YXJkcyBjb21wYXRpYmxlIHJlc29sdXRpb24gdG8gYW55IGlkZW50aWZpZWQgcHJvYmxlbXMuCiAKICAgICAgIFRoaXMgcHJvY2VzcyBhbGxvd3MgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdG8gY29udGludWUgdG8gZXZvbHZlIG92ZXIKICAgICAgIHRpbWUsIHdpdGhvdXQgbG9ja2luZyBpbiBwcm9ibGVtYXRpYyBkZXNpZ24gZXJyb3JzIGZvciBleHRlbmRlZCBwZXJpb2RzCiAgICAgICBvZiB0aW1lLiAgU2VlIDpwZXA6YDQxMWAgZm9yIG1vcmUgZGV0YWlscy4KIAorICAgcHJvdmlzaW9uYWwgcGFja2FnZQorICAgICAgU2VlIDp0ZXJtOmBwcm92aXNpb25hbCBBUElgLgorCiAgICBQeXRob24gMzAwMAogICAgICAgTmlja25hbWUgZm9yIHRoZSBQeXRob24gMy54IHJlbGVhc2UgbGluZSAoY29pbmVkIGxvbmcgYWdvIHdoZW4gdGhlCiAgICAgICByZWxlYXNlIG9mIHZlcnNpb24gMyB3YXMgc29tZXRoaW5nIGluIHRoZSBkaXN0YW50IGZ1dHVyZS4pICBUaGlzIGlzIGFsc28KQEAgLTc2Myw2ICs3NzksMTAgQEAKICAgICAgIG1hcHBpbmcgcmF0aGVyIHRoYW4gYSBzZXF1ZW5jZSBiZWNhdXNlIHRoZSBsb29rdXBzIHVzZSBhcmJpdHJhcnkKICAgICAgIDp0ZXJtOmBpbW11dGFibGVgIGtleXMgcmF0aGVyIHRoYW4gaW50ZWdlcnMuCiAKKyAgIHNpbmdsZSBkaXNwYXRjaAorICAgICAgQSBmb3JtIG9mIDp0ZXJtOmBnZW5lcmljIGZ1bmN0aW9uYCBkaXNwYXRjaCB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMKKyAgICAgIGNob3NlbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBhIHNpbmdsZSBhcmd1bWVudC4KKwogICAgc2xpY2UKICAgICAgIEFuIG9iamVjdCB1c3VhbGx5IGNvbnRhaW5pbmcgYSBwb3J0aW9uIG9mIGEgOnRlcm06YHNlcXVlbmNlYC4gIEEgc2xpY2UgaXMKICAgICAgIGNyZWF0ZWQgdXNpbmcgdGhlIHN1YnNjcmlwdCBub3RhdGlvbiwgYGBbXWBgIHdpdGggY29sb25zIGJldHdlZW4gbnVtYmVycwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0IGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CmluZGV4IDcxODljNjUuLjk3YzkwYzcgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAorKysgYi9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKQEAgLTMsNyArMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCiA6QXV0aG9yOiBBLiBNLiBLdWNobGluZwotOlJlbGVhc2U6IDAuMzEKKzpSZWxlYXNlOiAwLjMyCiAKIEluIHRoaXMgZG9jdW1lbnQsIHdlJ2xsIHRha2UgYSB0b3VyIG9mIFB5dGhvbidzIGZlYXR1cmVzIHN1aXRhYmxlIGZvcgogaW1wbGVtZW50aW5nIHByb2dyYW1zIGluIGEgZnVuY3Rpb25hbCBzdHlsZS4gIEFmdGVyIGFuIGludHJvZHVjdGlvbiB0byB0aGUKQEAgLTE1LDkgKzE1LDkgQEAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09CiAKLVRoaXMgc2VjdGlvbiBleHBsYWlucyB0aGUgYmFzaWMgY29uY2VwdCBvZiBmdW5jdGlvbmFsIHByb2dyYW1taW5nOyBpZiB5b3UncmUKLWp1c3QgaW50ZXJlc3RlZCBpbiBsZWFybmluZyBhYm91dCBQeXRob24gbGFuZ3VhZ2UgZmVhdHVyZXMsIHNraXAgdG8gdGhlIG5leHQKLXNlY3Rpb24uCitUaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYKK3lvdSdyZSBqdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLAorc2tpcCB0byB0aGUgbmV4dCBzZWN0aW9uIG9uIDpyZWY6YGZ1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzYC4KIAogUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIHN1cHBvcnQgZGVjb21wb3NpbmcgcHJvYmxlbXMgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgd2F5czoKIApAQCAtMTczLDYgKzE3Myw4IEBACiBhIGZldyBmdW5jdGlvbnMgc3BlY2lhbGl6ZWQgZm9yIHRoZSBjdXJyZW50IHRhc2suCiAKIAorLi4gX2Z1bmN0aW9uYWwtaG93dG8taXRlcmF0b3JzOgorCiBJdGVyYXRvcnMKID09PT09PT09PQogCkBAIC02NzAsNyArNjcyLDcgQEAKIAogOmZ1bmM6YHNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIDxzb3J0ZWQ+YCBjb2xsZWN0cyBhbGwgdGhlCiBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgaW50byBhIGxpc3QsIHNvcnRzIHRoZSBsaXN0LCBhbmQgcmV0dXJucyB0aGUgc29ydGVkCi1yZXN1bHQuICBUaGUgKmtleSosIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK3Jlc3VsdC4gIFRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiBjb25zdHJ1Y3RlZCBsaXN0J3MgOm1ldGg6YH5saXN0LnNvcnRgIG1ldGhvZC4gOjoKIAogICAgID4+PiBpbXBvcnQgcmFuZG9tCkBAIC04MzYsNyArODM4LDggQEAKIHByZWRpY2F0ZS4KIAogOmZ1bmM6YGl0ZXJ0b29scy5maWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXIpIDxpdGVydG9vbHMuZmlsdGVyZmFsc2U+YCBpcyB0aGUKLW9wcG9zaXRlLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgZmFsc2U6Ogorb3Bwb3NpdGUgb2YgOmZ1bmM6YGZpbHRlcmAsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKK3JldHVybnMgZmFsc2U6OgogCiAgICAgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgLi4uCkBAIC04NjQsNiArODY3LDc3IEBACiAgICAgaXRlcnRvb2xzLmRyb3B3aGlsZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAuLi4KIAorOmZ1bmM6YGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIDxpdGVydG9vbHMuY29tcHJlc3M+YCB0YWtlcyB0d28KK2l0ZXJhdG9ycyBhbmQgcmV0dXJucyBvbmx5IHRob3NlIGVsZW1lbnRzIG9mICpkYXRhKiBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKK2VsZW1lbnQgb2YgKnNlbGVjdG9ycyogaXMgdHJ1ZSwgc3RvcHBpbmcgd2hlbmV2ZXIgZWl0aGVyIG9uZSBpcyBleGhhdXN0ZWQ6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKFsxLDIsMyw0LDVdLCBbVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlLCBUcnVlXSkgPT4KKyAgICAgICAxLCAyLCA1CisKKworQ29tYmluYXRvcmljIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zPmAKK3JldHVybnMgYW4gaXRlcmF0b3IgZ2l2aW5nIGFsbCBwb3NzaWJsZSAqciotdHVwbGUgY29tYmluYXRpb25zIG9mIHRoZQorZWxlbWVudHMgY29udGFpbmVkIGluICppdGVyYWJsZSouICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNSkKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAzKSA9PgorICAgICAgKDEsIDIsIDMpLCAoMSwgMiwgNCksICgxLCAyLCA1KSwgKDEsIDMsIDQpLCAoMSwgMywgNSksICgxLCA0LCA1KSwKKyAgICAgICgyLCAzLCA0KSwgKDIsIDMsIDUpLCAoMiwgNCwgNSksCisgICAgICAoMywgNCwgNSkKKworVGhlIGVsZW1lbnRzIHdpdGhpbiBlYWNoIHR1cGxlIHJlbWFpbiBpbiB0aGUgc2FtZSBvcmRlciBhcworKml0ZXJhYmxlKiByZXR1cm5lZCB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgMSBpcyBhbHdheXMgYmVmb3JlCisyLCAzLCA0LCBvciA1IGluIHRoZSBleGFtcGxlcyBhYm92ZS4gIEEgc2ltaWxhciBmdW5jdGlvbiwKKzpmdW5jOmBpdGVydG9vbHMucGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpIDxpdGVydG9vbHMucGVybXV0YXRpb25zPmAsCityZW1vdmVzIHRoaXMgY29uc3RyYWludCBvbiB0aGUgb3JkZXIsIHJldHVybmluZyBhbGwgcG9zc2libGUKK2FycmFuZ2VtZW50cyBvZiBsZW5ndGggKnIqOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDEpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDEpLCAoMywgMiksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDEpLCAoNCwgMiksICg0LCAzKSwgKDQsIDUpLAorICAgICAgKDUsIDEpLCAoNSwgMiksICg1LCAzKSwgKDUsIDQpCisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSkgPT4KKyAgICAgICgxLCAyLCAzLCA0LCA1KSwgKDEsIDIsIDMsIDUsIDQpLCAoMSwgMiwgNCwgMywgNSksCisgICAgICAuLi4KKyAgICAgICg1LCA0LCAzLCAyLCAxKQorCitJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdmFsdWUgZm9yICpyKiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVyYWJsZSBpcyB1c2VkLAorbWVhbmluZyB0aGF0IGFsbCB0aGUgZWxlbWVudHMgYXJlIHBlcm11dGVkLgorCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHByb2R1Y2UgYWxsIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkKK3Bvc2l0aW9uIGFuZCBkb24ndCByZXF1aXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mICppdGVyYWJsZSogYXJlIHVuaXF1ZTo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKCdhYmEnLCAzKSA9PgorICAgICAgKCdhJywgJ2InLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYicsICdhJywgJ2EnKSwKKyAgICAgICgnYicsICdhJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2EnLCAnYicsICdhJykKKworVGhlIGlkZW50aWNhbCB0dXBsZSBgYCgnYScsICdhJywgJ2InKWBgIG9jY3VycyB0d2ljZSwgYnV0IHRoZSB0d28gJ2EnCitzdHJpbmdzIGNhbWUgZnJvbSBkaWZmZXJlbnQgcG9zaXRpb25zLgorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudD5gCitmdW5jdGlvbiByZWxheGVzIGEgZGlmZmVyZW50IGNvbnN0cmFpbnQ6IGVsZW1lbnRzIGNhbiBiZSByZXBlYXRlZAord2l0aGluIGEgc2luZ2xlIHR1cGxlLiAgQ29uY2VwdHVhbGx5IGFuIGVsZW1lbnQgaXMgc2VsZWN0ZWQgZm9yIHRoZQorZmlyc3QgcG9zaXRpb24gb2YgZWFjaCB0dXBsZSBhbmQgdGhlbiBpcyByZXBsYWNlZCBiZWZvcmUgdGhlIHNlY29uZAorZWxlbWVudCBpcyBzZWxlY3RlZC4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMiksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMyksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDQpLCAoNCwgNSksCisgICAgICAoNSwgNSkKKwogCiBHcm91cGluZyBlbGVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk4Niw2ICsxMDYwLDE3IEBACiAgICBmb3IgaSBpbiBbMSwyLDNdOgogICAgICAgIHByb2R1Y3QgKj0gaQogCitBIHJlbGF0ZWQgZnVuY3Rpb24gaXMgYGl0ZXJ0b29scy5hY2N1bXVsYXRlKGl0ZXJhYmxlLCBmdW5jPW9wZXJhdG9yLmFkZCkgPGl0ZXJ0b29scy5hY2N1bXVsYXRlYC4KK0l0IHBlcmZvcm1zIHRoZSBzYW1lIGNhbGN1bGF0aW9uLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgb25seSB0aGUKK2ZpbmFsIHJlc3VsdCwgOmZ1bmM6YGFjY3VtdWxhdGVgIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBhbHNvIHlpZWxkcworZWFjaCBwYXJ0aWFsIHJlc3VsdDo6CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgPT4KKyAgICAgIDEsIDMsIDYsIDEwLCAxNQorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0sIG9wZXJhdG9yLm11bCkgPT4KKyAgICAgIDEsIDIsIDYsIDI0LCAxMjAKKwogCiBUaGUgb3BlcmF0b3IgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU5LDUxICsxMjQ0LDYgQEAKIAogLi4gY29tbWVudAogCi0gICAgVG9waWNzIHRvIHBsYWNlCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFhYWCBvcy53YWxrKCkKLQotICAgIFhYWCBOZWVkIGEgbGFyZ2UgZXhhbXBsZS4KLQotICAgIEJ1dCB3aWxsIGFuIGV4YW1wbGUgYWRkIG11Y2g/ICBJJ2xsIHBvc3QgYSBmaXJzdCBkcmFmdCBhbmQgc2VlCi0gICAgd2hhdCB0aGUgY29tbWVudHMgc2F5LgotCi0uLiBjb21tZW50Ci0KLSAgICBPcmlnaW5hbCBvdXRsaW5lOgotICAgIEludHJvZHVjdGlvbgotICAgICAgICAgICAgSWRlYSBvZiBGUAotICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBvdXQgb2YgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBhcmUgc3RyaWN0bHkgaW5wdXQtb3V0cHV0LCBubyBpbnRlcm5hbCBzdGF0ZQotICAgICAgICAgICAgT3Bwb3NlZCB0byBPTyBwcm9ncmFtbWluZywgd2hlcmUgb2JqZWN0cyBoYXZlIHN0YXRlCi0KLSAgICAgICAgICAgIFdoeSBGUD8KLSAgICAgICAgICAgICAgICAgICAgRm9ybWFsIHByb3ZhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudCBpcyBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZlcnkgcmVsZXZhbnQgdG8gUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIE1vZHVsYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFsbCBmdW5jdGlvbnMgdGhhdCBkbyBvbmUgdGhpbmcKLSAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJpbGl0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHRlc3QgZHVlIHRvIGxhY2sgb2Ygc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHZlcmlmeSBvdXRwdXQgZnJvbSBpbnRlcm1lZGlhdGUgc3RlcHMKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zYWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhc3NlbWJsZSBhIHRvb2xib3ggb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG1peGVkCi0KLSAgICBUYWNrbGluZyBhIHByb2JsZW0KLSAgICAgICAgICAgIE5lZWQgYSBzaWduaWZpY2FudCBleGFtcGxlCi0KLSAgICBJdGVyYXRvcnMKLSAgICBHZW5lcmF0b3JzCi0gICAgVGhlIGl0ZXJ0b29scyBtb2R1bGUKLSAgICBMaXN0IGNvbXByZWhlbnNpb25zCi0gICAgU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAotICAgIEJ1aWx0LWluIGZ1bmN0aW9ucwotICAgICAgICAgICAgbWFwCi0gICAgICAgICAgICBmaWx0ZXIKLQotLi4gY29tbWVudAotCiAgICAgSGFuZHkgbGl0dGxlIGZ1bmN0aW9uIGZvciBwcmludGluZyBwYXJ0IG9mIGFuIGl0ZXJhdG9yIC0tIHVzZWQKICAgICB3aGlsZSB3cml0aW5nIHRoaXMgZG9jdW1lbnQuCiAKQEAgLTEyMTQsNSArMTI1NCwzIEBACiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZWxlbSkpCiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLCAnKQogICAgICAgICBwcmludChlbGVtWy0xXSkKLQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKaW5kZXggM2YyNTZlMS4uZmViOWI2YyAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApAQCAtNzA0LDkgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmVjb3JkLm5hbWUpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpICMgTm8gbGV2ZWwgb3IgZmlsdGVyIGxvZ2ljIGFwcGxpZWQgLSBqdXN0IGRvIGl0IQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdHJhY2ViYWNrCiAgICAgICAgICAgICAgICAgcHJpbnQoJ1dob29wcyEgUHJvYmxlbTonLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKaW5kZXggNmNkMDY3Ny4uYTVlMjRiMCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdApAQCAtOTAxLDEwICs5MDEsMTAgQEAKICAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuU29ja2V0SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gVENQL0lQCi0gICBzb2NrZXRzLgorICAgc29ja2V0cy4gU2luY2UgMy40LCBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBhbHNvIHN1cHBvcnRlZC4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBVRFAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5TTVRQSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBkZXNpZ25hdGVkCiAgICBlbWFpbCBhZGRyZXNzLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3JlZ2V4LnJzdCBiL0RvYy9ob3d0by9yZWdleC5yc3QKaW5kZXggNTIwM2U1My4uZmJlNzYzYiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3JlZ2V4LnJzdAorKysgYi9Eb2MvaG93dG8vcmVnZXgucnN0CkBAIC0yNzEsOCArMjcxLDggQEAKIAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdhYionKQotICAgPj4+IHAgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KKyAgID4+PiBwCisgICByZS5jb21waWxlKCdhYionKQogCiA6ZnVuYzpgcmUuY29tcGlsZWAgYWxzbyBhY2NlcHRzIGFuIG9wdGlvbmFsICpmbGFncyogYXJndW1lbnQsIHVzZWQgdG8gZW5hYmxlCiB2YXJpb3VzIHNwZWNpYWwgZmVhdHVyZXMgYW5kIHN5bnRheCB2YXJpYXRpb25zLiAgV2UnbGwgZ28gb3ZlciB0aGUgYXZhaWxhYmxlCkBAIC0zODMsOCArMzgzLDggQEAKIAogICAgPj4+IGltcG9ydCByZQogICAgPj4+IHAgPSByZS5jb21waWxlKCdbYS16XSsnKQotICAgPj4+IHAgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9QYXR0ZXJuIG9iamVjdCBhdCAweC4uLj4KKyAgID4+PiBwCisgICByZS5jb21waWxlKCdbYS16XSsnKQogCiBOb3csIHlvdSBjYW4gdHJ5IG1hdGNoaW5nIHZhcmlvdXMgc3RyaW5ncyBhZ2FpbnN0IHRoZSBSRSBgYFthLXpdK2BgLiAgQW4gZW1wdHkKIHN0cmluZyBzaG91bGRuJ3QgbWF0Y2ggYXQgYWxsLCBzaW5jZSBgYCtgYCBtZWFucyAnb25lIG9yIG1vcmUgcmVwZXRpdGlvbnMnLgpAQCAtNDAyLDcgKzQwMiw3IEBACiAKICAgID4+PiBtID0gcC5tYXRjaCgndGVtcG8nKQogICAgPj4+IG0gICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA1KSwgbWF0Y2g9J3RlbXBvJz4KIAogTm93IHlvdSBjYW4gcXVlcnkgdGhlIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gIGZvciBpbmZvcm1hdGlvbgogYWJvdXQgdGhlIG1hdGNoaW5nIHN0cmluZy4gIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gIGluc3RhbmNlcwpAQCAtNDQxLDcgKzQ0MSw3IEBACiAgICA+Pj4gcHJpbnQocC5tYXRjaCgnOjo6IG1lc3NhZ2UnKSkKICAgIE5vbmUKICAgID4+PiBtID0gcC5zZWFyY2goJzo6OiBtZXNzYWdlJyk7IHByaW50KG0pICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNCwgMTEpLCBtYXRjaD0nbWVzc2FnZSc+CiAgICA+Pj4gbS5ncm91cCgpCiAgICAnbWVzc2FnZScKICAgID4+PiBtLnNwYW4oKQpAQCAtNDkzLDcgKzQ5Myw3IEBACiAgICA+Pj4gcHJpbnQocmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb21hZ2UgYW1rJykpCiAgICBOb25lCiAgICA+Pj4gcmUubWF0Y2gocidGcm9tXHMrJywgJ0Zyb20gYW1rIFRodSBNYXkgMTQgMTk6MTI6MTAgMTk5OCcpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNSksIG1hdGNoPSdGcm9tICc+CiAKIFVuZGVyIHRoZSBob29kLCB0aGVzZSBmdW5jdGlvbnMgc2ltcGx5IGNyZWF0ZSBhIHBhdHRlcm4gb2JqZWN0IGZvciB5b3UKIGFuZCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBtZXRob2Qgb24gaXQuICBUaGV5IGFsc28gc3RvcmUgdGhlIGNvbXBpbGVkCkBAIC02ODUsNyArNjg1LDcgQEAKICAgIGxpbmUsIHRoZSBSRSB0byB1c2UgaXMgYGBeRnJvbWBgLiA6OgogCiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCdeRnJvbScsICdGcm9tIEhlcmUgdG8gRXRlcm5pdHknKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9J0Zyb20nPgogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnXkZyb20nLCAnUmVjaXRpbmcgRnJvbSBNZW1vcnknKSkKICAgICAgIE5vbmUKIApAQCAtNjk3LDExICs2OTcsMTEgQEAKICAgIG9yIGFueSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIG5ld2xpbmUgY2hhcmFjdGVyLiAgICAgOjoKIAogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfScpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDYsIDcpLCBtYXRjaD0nfSc+CiAgICAgICA+Pj4gcHJpbnQocmUuc2VhcmNoKCd9JCcsICd7YmxvY2t9ICcpKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfVxuJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oNiwgNyksIG1hdGNoPSd9Jz4KIAogICAgVG8gbWF0Y2ggYSBsaXRlcmFsIGBgJyQnYGAsIHVzZSBgYFwkYGAgb3IgZW5jbG9zZSBpdCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsCiAgICBhcyBpbiAgYGBbJF1gYC4KQEAgLTcyNiw3ICs3MjYsNyBAQAogCiAgICAgICA+Pj4gcCA9IHJlLmNvbXBpbGUocidcYmNsYXNzXGInKQogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdubyBjbGFzcyBhdCBhbGwnKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgzLCA4KSwgbWF0Y2g9J2NsYXNzJz4KICAgICAgID4+PiBwcmludChwLnNlYXJjaCgndGhlIGRlY2xhc3NpZmllZCBhbGdvcml0aG0nKSkKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnb25lIHN1YmNsYXNzIGlzJykpCkBAIC03NDQsNyArNzQ0LDcgQEAKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ1xiJyArICdjbGFzcycgKyAnXGInKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA3KSwgbWF0Y2g9J1x4MDhjbGFzc1x4MDgnPgogCiAgICBTZWNvbmQsIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgd2hlcmUgdGhlcmUncyBubyB1c2UgZm9yIHRoaXMgYXNzZXJ0aW9uLAogICAgYGBcYmBgIHJlcHJlc2VudHMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uJ3MKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91cmxsaWIyLnJzdCBiL0RvYy9ob3d0by91cmxsaWIyLnJzdAppbmRleCA3NGVlZWUwLi43YjIxN2VhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdXJsbGliMi5yc3QKKysrIGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAtLSBgYFByb3h5SGFuZGxlcmBgIChpZiBhIHByb3h5IHNldHRpbmcgc3VjaCBhcyBhbiA6ZW52dmFyOmBodHRwX3Byb3h5YAogICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIGBgVW5rbm93bkhhbmRsZXJgYCwgYGBIVFRQSGFuZGxlcmBgLAogICAgIGBgSFRUUERlZmF1bHRFcnJvckhhbmRsZXJgYCwgYGBIVFRQUmVkaXJlY3RIYW5kbGVyYGAsIGBgRlRQSGFuZGxlcmBgLAotICAgIGBgRmlsZUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KKyAgICBgYEZpbGVIYW5kbGVyYGAsIGBgRGF0YUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KIAogYGB0b3BfbGV2ZWxfdXJsYGAgaXMgaW4gZmFjdCAqZWl0aGVyKiBhIGZ1bGwgVVJMIChpbmNsdWRpbmcgdGhlICdodHRwOicgc2NoZW1lCiBjb21wb25lbnQgYW5kIHRoZSBob3N0bmFtZSBhbmQgb3B0aW9uYWxseSB0aGUgcG9ydCBudW1iZXIpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQppbmRleCBjYzU1MjllLi4zYzdjNzcwIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKQEAgLTgsNyArOCw3IEBACiAjIEZvciBndWVzc2luZyBNSU1FIHR5cGUgYmFzZWQgb24gZmlsZSBuYW1lIGV4dGVuc2lvbgogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIGZyb20gZW1haWwgaW1wb3J0IGVuY29kZXJzCiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIyLDQ0ICsyMiwzNiBAQAogCiAKIGRlZiBtYWluKCk6Ci0gICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPSIiIlwKKyAgICBwYXJzZXIgPSBBcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj0iIiJcCiBTZW5kIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhcyBhIE1JTUUgbWVzc2FnZS4KLQotVXNhZ2U6ICVwcm9nIFtvcHRpb25zXQotCiBVbmxlc3MgdGhlIC1vIG9wdGlvbiBpcyBnaXZlbiwgdGhlIGVtYWlsIGlzIHNlbnQgYnkgZm9yd2FyZGluZyB0byB5b3VyIGxvY2FsCiBTTVRQIHNlcnZlciwgd2hpY2ggdGhlbiBkb2VzIHRoZSBub3JtYWwgZGVsaXZlcnkgcHJvY2Vzcy4gIFlvdXIgbG9jYWwgbWFjaGluZQogbXVzdCBiZSBydW5uaW5nIGFuIFNNVFAgc2VydmVyLgogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKLSAgICAgICAgICAgICAgICAgICAgICBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGFyZSBzZW50LCBhbmQgd2UgZG9uJ3QgcmVjdXJzZSB0bwotICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLW8nLCAnLS1vdXRwdXQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdGSUxFJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgotICAgICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2UgdG8gdGhlIFNNVFAgc2VydmVyLiIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXMnLCAnLS1zZW5kZXInLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLCBtZXRhdmFyPSdTRU5ERVInLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcicsICctLXJlY2lwaWVudCcsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAotICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0EgVG86IGhlYWRlciB2YWx1ZSAoYXQgbGVhc3Qgb25lIHJlcXVpcmVkKScpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5zZW5kZXIgb3Igbm90IG9wdHMucmVjaXBpZW50czoKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGRpcmVjdG9yeSA9IG9wdHMuZGlyZWN0b3J5CisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWQnLCAnLS1kaXJlY3RvcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJNYWlsIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSB1c2UgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT25seSB0aGUgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcmVjdG9yaWVzLiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dHB1dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiUHJpbnQgdGhlIGNvbXBvc2VkIG1lc3NhZ2UgdG8gRklMRSBpbnN0ZWFkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZW5kZXInLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGhlIHZhbHVlIG9mIHRoZSBGcm9tOiBoZWFkZXIgKHJlcXVpcmVkKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXInLCAnLS1yZWNpcGllbnQnLCByZXF1aXJlZD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCBtZXRhdmFyPSdSRUNJUElFTlQnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1bXSwgZGVzdD0ncmVjaXBpZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgZGlyZWN0b3J5ID0gYXJncy5kaXJlY3RvcnkKICAgICBpZiBub3QgZGlyZWN0b3J5OgogICAgICAgICBkaXJlY3RvcnkgPSAnLicKICAgICAjIENyZWF0ZSB0aGUgZW5jbG9zaW5nIChvdXRlcikgbWVzc2FnZQogICAgIG91dGVyID0gTUlNRU11bHRpcGFydCgpCiAgICAgb3V0ZXJbJ1N1YmplY3QnXSA9ICdDb250ZW50cyBvZiBkaXJlY3RvcnkgJXMnICUgb3MucGF0aC5hYnNwYXRoKGRpcmVjdG9yeSkKLSAgICBvdXRlclsnVG8nXSA9IENPTU1BU1BBQ0Uuam9pbihvcHRzLnJlY2lwaWVudHMpCi0gICAgb3V0ZXJbJ0Zyb20nXSA9IG9wdHMuc2VuZGVyCisgICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4oYXJncy5yZWNpcGllbnRzKQorICAgIG91dGVyWydGcm9tJ10gPSBhcmdzLnNlbmRlcgogICAgIG91dGVyLnByZWFtYmxlID0gJ1lvdSB3aWxsIG5vdCBzZWUgdGhpcyBpbiBhIE1JTUUtYXdhcmUgbWFpbCByZWFkZXIuXG4nCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgpAQCAtNzYsMjMgKzY4LDE5IEBACiAgICAgICAgICAgICBjdHlwZSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nCiAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gY3R5cGUuc3BsaXQoJy8nLCAxKQogICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCkKLSAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAotICAgICAgICAgICAgbXNnID0gTUlNRVRleHQoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgpIGFzIGZwOgorICAgICAgICAgICAgICAgICMgTm90ZTogd2Ugc2hvdWxkIGhhbmRsZSBjYWxjdWxhdGluZyB0aGUgY2hhcnNldAorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxpZiBtYWludHlwZSA9PSAnaW1hZ2UnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVJbWFnZShmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2F1ZGlvJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FQXVkaW8oZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgICAgICBtc2cgPSBNSU1FQmFzZShtYWludHlwZSwgc3VidHlwZSkKLSAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCisgICAgICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKGZwLnJlYWQoKSkKICAgICAgICAgICAgICMgRW5jb2RlIHRoZSBwYXlsb2FkIHVzaW5nIEJhc2U2NAogICAgICAgICAgICAgZW5jb2RlcnMuZW5jb2RlX2Jhc2U2NChtc2cpCiAgICAgICAgICMgU2V0IHRoZSBmaWxlbmFtZSBwYXJhbWV0ZXIKQEAgLTEwMCwxNCArODgsMTIgQEAKICAgICAgICAgb3V0ZXIuYXR0YWNoKG1zZykKICAgICAjIE5vdyBzZW5kIG9yIHN0b3JlIHRoZSBtZXNzYWdlCiAgICAgY29tcG9zZWQgPSBvdXRlci5hc19zdHJpbmcoKQotICAgIGlmIG9wdHMub3V0cHV0OgotICAgICAgICBmcCA9IG9wZW4ob3B0cy5vdXRwdXQsICd3JykKLSAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICBpZiBhcmdzLm91dHB1dDoKKyAgICAgICAgd2l0aCBvcGVuKGFyZ3Mub3V0cHV0LCAndycpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoY29tcG9zZWQpCiAgICAgZWxzZToKLSAgICAgICAgcyA9IHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykKLSAgICAgICAgcy5zZW5kbWFpbChvcHRzLnNlbmRlciwgb3B0cy5yZWNpcGllbnRzLCBjb21wb3NlZCkKLSAgICAgICAgcy5xdWl0KCkKKyAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgICAgICAgICBzLnNlbmRtYWlsKGFyZ3Muc2VuZGVyLCBhcmdzLnJlY2lwaWVudHMsIGNvbXBvc2VkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQppbmRleCAzNjUzNTQzLi41NzRhMGI2IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKQEAgLTgsNDEgKzgsMjcgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IG1pbWV0eXBlcwogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKK2Zyb20gYXJncGFyc2UgaW1wb3J0IEFyZ3VtZW50UGFyc2VyCiAKIAogZGVmIG1haW4oKToKLSAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9IiIiXAorICAgIHBhcnNlciA9IEFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKIFVucGFjayBhIE1JTUUgbWVzc2FnZSBpbnRvIGEgZGlyZWN0b3J5IG9mIGZpbGVzLgotCi1Vc2FnZTogJXByb2cgW29wdGlvbnNdIG1zZ2ZpbGUKICIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kaXJlY3RvcnknLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiVW5wYWNrIHRoZSBNSU1FIG1lc3NhZ2UgaW50byB0aGUgbmFtZWQKLSAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgICBleGlzdC4iIiIpCi0gICAgb3B0cywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBub3Qgb3B0cy5kaXJlY3Rvcnk6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsICctLWRpcmVjdG9yeScsIHJlcXVpcmVkPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlVucGFjayB0aGUgTUlNRSBtZXNzYWdlIGludG8gdGhlIG5hbWVkCisgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnksIHdoaWNoIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LiIiIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdtc2dmaWxlJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgd2l0aCBvcGVuKGFyZ3MubXNnZmlsZSkgYXMgZnA6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQogCiAgICAgdHJ5OgotICAgICAgICBtc2dmaWxlID0gYXJnc1swXQotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICB0cnk6Ci0gICAgICAgIG9zLm1rZGlyKG9wdHMuZGlyZWN0b3J5KQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICMgSWdub3JlIGRpcmVjdG9yeSBleGlzdHMgZXJyb3IKLSAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6Ci0gICAgICAgICAgICByYWlzZQotCi0gICAgZnAgPSBvcGVuKG1zZ2ZpbGUpCi0gICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCi0gICAgZnAuY2xvc2UoKQorICAgICAgICBvcy5ta2RpcihhcmdzLmRpcmVjdG9yeSkKKyAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICBwYXNzCiAKICAgICBjb3VudGVyID0gMQogICAgIGZvciBwYXJ0IGluIG1zZy53YWxrKCk6CkBAIC01OSw5ICs0NSw4IEBACiAgICAgICAgICAgICAgICAgZXh0ID0gJy5iaW4nCiAgICAgICAgICAgICBmaWxlbmFtZSA9ICdwYXJ0LSUwM2QlcycgJSAoY291bnRlciwgZXh0KQogICAgICAgICBjb3VudGVyICs9IDEKLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihvcHRzLmRpcmVjdG9yeSwgZmlsZW5hbWUpLCAnd2InKQotICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKGFyZ3MuZGlyZWN0b3J5LCBmaWxlbmFtZSksICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUocGFydC5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5IGIvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NjNlYTkuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzkgKzAsMCBAQAotIwotIyBTaW1wbGUgYmVuY2htYXJrcyBmb3IgdGhlIG11bHRpcHJvY2Vzc2luZyBwYWNrYWdlCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQotaW1wb3J0IHRpbWUKLWltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCBxdWV1ZQotaW1wb3J0IGdjCi0KLV90aW1lciA9IHRpbWUucGVyZl9jb3VudGVyCi0KLWRlbHRhID0gMQotCi0KLSMjIyMgVEVTVF9RVUVVRVNQRUVECi0KLWRlZiBxdWV1ZXNwZWVkX2Z1bmMocSwgYywgaXRlcmF0aW9ucyk6Ci0gICAgYSA9ICcwJyAqIDI1NgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotICAgIGMucmVsZWFzZSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgcS5wdXQoYSkKLQotICAgIHEucHV0KCdTVE9QJykKLQotZGVmIHRlc3RfcXVldWVzcGVlZChQcm9jZXNzLCBxLCBjKToKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1xdWV1ZXNwZWVkX2Z1bmMsIGFyZ3M9KHEsIGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgYy53YWl0KCkKLSAgICAgICAgYy5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBxLmdldCgpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgICAgIHAuam9pbigpCi0KLSAgICBwcmludChpdGVyYXRpb25zLCAnb2JqZWN0cyBwYXNzZWQgdGhyb3VnaCB0aGUgcXVldWUgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX1BJUEVTUEVFRAotCi1kZWYgcGlwZV9mdW5jKGMsIGNvbmQsIGl0ZXJhdGlvbnMpOgotICAgIGEgPSAnMCcgKiAyNTYKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgIGMuc2VuZChhKQotCi0gICAgYy5zZW5kKCdTVE9QJykKLQotZGVmIHRlc3RfcGlwZXNwZWVkKCk6Ci0gICAgYywgZCA9IG11bHRpcHJvY2Vzc2luZy5QaXBlKCkKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXBpcGVfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGQsIGNvbmQsIGl0ZXJhdGlvbnMpKQotICAgICAgICBjb25kLmFjcXVpcmUoKQotICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgY29uZC53YWl0KCkKLSAgICAgICAgY29uZC5yZWxlYXNlKCkKLQotICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIHdoaWxlIHJlc3VsdCAhPSAnU1RPUCc6Ci0gICAgICAgICAgICByZXN1bHQgPSBjLnJlY3YoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdvYmplY3RzIHBhc3NlZCB0aHJvdWdoIGNvbm5lY3Rpb24gaW4nLGVsYXBzZWQsJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9TRVFTUEVFRAotCi1kZWYgdGVzdF9zZXFzcGVlZChzZXEpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBhID0gc2VxWzVdCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX0xPQ0sKLQotZGVmIHRlc3RfbG9ja3NwZWVkKGwpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBsLmFjcXVpcmUoKQotICAgICAgICAgICAgbC5yZWxlYXNlKCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfQ09ORElUSU9OCi0KLWRlZiBjb25kaXRpb25zcGVlZF9mdW5jKGMsIE4pOgotICAgIGMuYWNxdWlyZSgpCi0gICAgYy5ub3RpZnkoKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgIGMud2FpdCgpCi0gICAgICAgIGMubm90aWZ5KCkKLQotICAgIGMucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X2NvbmRpdGlvbnNwZWVkKFByb2Nlc3MsIGMpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgYy5hY3F1aXJlKCkKLSAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbnNwZWVkX2Z1bmMsIGFyZ3M9KGMsIGl0ZXJhdGlvbnMpKQotICAgICAgICBwLnN0YXJ0KCkKLQotICAgICAgICBjLndhaXQoKQotCi0gICAgICAgIHQgPSBfdGltZXIoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICAgICAgYy5ub3RpZnkoKQotICAgICAgICAgICAgYy53YWl0KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICAgICAgYy5yZWxlYXNlKCkKLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMgKiAyLCAnd2FpdHMgaW4nLCBlbGFwc2VkLCAnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zICogMiAvIGVsYXBzZWQpCi0KLSMjIyMKLQotZGVmIHRlc3QoKToKLSAgICBtYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgZ2MuZGlzYWJsZSgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUuUXVldWVcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKHRocmVhZGluZy5UaHJlYWQsIHF1ZXVlLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCksCi0gICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgUXVldWUgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG1hbmFnZXIuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlBpcGVcbicpCi0gICAgdGVzdF9waXBlc3BlZWQoKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3RcbicpCi0gICAgdGVzdF9zZXFzcGVlZChsaXN0KHJhbmdlKDEwKSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIGxpc3QgbWFuYWdlZCBieSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG1hbmFnZXIubGlzdChsaXN0KHJhbmdlKDEwKSkpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1GYWxzZSlcbicpCi0gICAgdGVzdF9zZXFzcGVlZChtdWx0aXByb2Nlc3NpbmcuQXJyYXkoJ2knLCBsaXN0KHJhbmdlKDEwKSksIGxvY2s9RmFsc2UpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBBcnJheSgiaSIsIC4uLiwgbG9jaz1UcnVlKVxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG11bHRpcHJvY2Vzc2luZy5BcnJheSgnaScsIGxpc3QocmFuZ2UoMTApKSwgbG9jaz1UcnVlKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuTG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZCh0aHJlYWRpbmcuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuUkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQodGhyZWFkaW5nLlJMb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5Mb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5STG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZChtdWx0aXByb2Nlc3NpbmcuUkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuTG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBybG9jayBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG1hbmFnZXIuUkxvY2soKSkKLQotICAgIHByaW50KCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyB0aHJlYWRpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQodGhyZWFkaW5nLlRocmVhZCwgdGhyZWFkaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24oKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgY29uZGl0aW9uIG1hbmFnZWQgYnkgYSBzZXJ2ZXIgcHJvY2Vzc1xuJykKLSAgICB0ZXN0X2NvbmRpdGlvbnNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtYW5hZ2VyLkNvbmRpdGlvbigpKQotCi0gICAgZ2MuZW5hYmxlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX25ld3R5cGUucHkgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQppbmRleCA3MjkxNzQzLi4xYzc5NmE1IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weQpAQCAtMSwxMSArMSwzIEBACi0jCi0jIFRoaXMgbW9kdWxlIHNob3dzIGhvdyB0byB1c2UgYXJiaXRyYXJ5IGNhbGxhYmxlcyB3aXRoIGEgc3ViY2xhc3Mgb2YKLSMgYEJhc2VNYW5hZ2VyYC4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgZnJlZXplX3N1cHBvcnQKIGZyb20gbXVsdGlwcm9jZXNzaW5nLm1hbmFnZXJzIGltcG9ydCBCYXNlTWFuYWdlciwgQmFzZVByb3h5CiBpbXBvcnQgb3BlcmF0b3IKQEAgLTI3LDEyICsxOSwxMCBAQAogCiAjIFByb3h5IHR5cGUgZm9yIGdlbmVyYXRvciBvYmplY3RzCiBjbGFzcyBHZW5lcmF0b3JQcm94eShCYXNlUHJveHkpOgotICAgIF9leHBvc2VkXyA9ICgnbmV4dCcsICdfX25leHRfXycpCisgICAgX2V4cG9zZWRfID0gWydfX25leHRfXyddCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ25leHQnKQotICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGxtZXRob2QoJ19fbmV4dF9fJykKIAogIyBGdW5jdGlvbiB0byByZXR1cm4gdGhlIG9wZXJhdG9yIG1vZHVsZQpAQCAtOTAsOCArODAsNiBAQAogICAgIG9wID0gbWFuYWdlci5vcGVyYXRvcigpCiAgICAgcHJpbnQoJ29wLmFkZCgyMywgNDUpID0nLCBvcC5hZGQoMjMsIDQ1KSkKICAgICBwcmludCgnb3AucG93KDIsIDk0KSA9Jywgb3AucG93KDIsIDk0KSkKLSAgICBwcmludCgnb3AuZ2V0c2xpY2UocmFuZ2UoMTApLCAyLCA2KSA9Jywgb3AuZ2V0c2xpY2UobGlzdChyYW5nZSgxMCkpLCAyLCA2KSkKLSAgICBwcmludCgnb3AucmVwZWF0KHJhbmdlKDUpLCAzKSA9Jywgb3AucmVwZWF0KGxpc3QocmFuZ2UoNSkpLCAzKSkKICAgICBwcmludCgnb3AuX2V4cG9zZWRfID0nLCBvcC5fZXhwb3NlZF8pCiAKICMjCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfcG9vbC5weSBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CmluZGV4IDE1Nzg0OTguLjExMTAxZTEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5CkBAIC0xLDEwICsxLDMgQEAKLSMKLSMgQSB0ZXN0IG9mIGBtdWx0aXByb2Nlc3NpbmcuUG9vbGAgY2xhc3MKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHJhbmRvbQpAQCAtNDYsMjY5ICszOSwxMTUgQEAKICMKIAogZGVmIHRlc3QoKToKLSAgICBwcmludCgnY3B1X2NvdW50KCkgPSAlZFxuJyAlIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKSkKLQotICAgICMKLSAgICAjIENyZWF0ZSBwb29sCi0gICAgIwotCiAgICAgUFJPQ0VTU0VTID0gNAogICAgIHByaW50KCdDcmVhdGluZyBwb29sIHdpdGggJWQgcHJvY2Vzc2VzXG4nICUgUFJPQ0VTU0VTKQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbChQUk9DRVNTRVMpCi0gICAgcHJpbnQoJ3Bvb2wgPSAlcycgJSBwb29sKQotICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFRlc3RzCi0gICAgIworICAgIHdpdGggbXVsdGlwcm9jZXNzaW5nLlBvb2woUFJPQ0VTU0VTKSBhcyBwb29sOgorICAgICAgICAjCisgICAgICAgICMgVGVzdHMKKyAgICAgICAgIwogCi0gICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAotICAgICAgICAgICAgWyhwbHVzLCAoaSwgOCkpIGZvciBpIGluIHJhbmdlKDEwKV0KKyAgICAgICAgVEFTS1MgPSBbKG11bCwgKGksIDcpKSBmb3IgaSBpbiByYW5nZSgxMCldICsgXAorICAgICAgICAgICAgICAgIFsocGx1cywgKGksIDgpKSBmb3IgaSBpbiByYW5nZSgxMCldCiAKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCB0KSBmb3IgdCBpbiBUQVNLU10KLSAgICBpbWFwX2l0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQotICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgdCkgZm9yIHQgaW4gVEFTS1NdCisgICAgICAgIGltYXBfaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIGltYXBfdW5vcmRlcmVkX2l0ID0gcG9vbC5pbWFwX3Vub3JkZXJlZChjYWxjdWxhdGVzdGFyLCBUQVNLUykKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCi0gICAgZm9yIHIgaW4gcmVzdWx0czoKLSAgICAgICAgcHJpbnQoJ1x0Jywgci5nZXQoKSkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5hcHBseV9hc3luYygpOicpCisgICAgICAgIGZvciByIGluIHJlc3VsdHM6CisgICAgICAgICAgICBwcmludCgnXHQnLCByLmdldCgpKQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcCgpOicpCi0gICAgZm9yIHggaW4gaW1hcF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF9pdDoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKLSAgICBmb3IgeCBpbiBpbWFwX3Vub3JkZXJlZF9pdDoKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdVbm9yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXBfdW5vcmRlcmVkKCk6JykKKyAgICAgICAgZm9yIHggaW4gaW1hcF91bm9yZGVyZWRfaXQ6CisgICAgICAgICAgICBwcmludCgnXHQnLCB4KQorICAgICAgICBwcmludCgpCiAKLSAgICBwcmludCgnT3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wubWFwKCkgLS0tIHdpbGwgYmxvY2sgdGlsbCBjb21wbGV0ZTonKQotICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKLSAgICAgICAgcHJpbnQoJ1x0JywgeCkKLSAgICBwcmludCgpCisgICAgICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5tYXAoKSAtLS0gd2lsbCBibG9jayB0aWxsIGNvbXBsZXRlOicpCisgICAgICAgIGZvciB4IGluIHBvb2wubWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKToKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgICMKLSAgICAjIFNpbXBsZSBiZW5jaG1hcmtzCi0gICAgIworICAgICAgICAjCisgICAgICAgICMgVGVzdCBlcnJvciBoYW5kbGluZworICAgICAgICAjCiAKLSAgICBOID0gMTAwMDAwCi0gICAgcHJpbnQoJ2RlZiBwb3czKHgpOiByZXR1cm4geCoqMycpCisgICAgICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCiAKLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBBID0gbGlzdChtYXAocG93MywgcmFuZ2UoTikpKQotICAgIHByaW50KCdcdG1hcChwb3czLCByYW5nZSglZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChOLCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQiA9IHBvb2wubWFwKHBvdzMsIHJhbmdlKE4pKQotICAgIHByaW50KCdcdHBvb2wubWFwKHBvdzMsIHJhbmdlKCVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKE4sIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBDID0gbGlzdChwb29sLmltYXAocG93MywgcmFuZ2UoTiksIGNodW5rc2l6ZT1OLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChwb3czLCByYW5nZSglZCksIGNodW5rc2l6ZT0lZCkpOlxuXHRcdCVzJyBcCi0gICAgICAgICAgJyBzZWNvbmRzJyAlIChOLCBOLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBMID0gW05vbmVdICogMTAwMDAwMAotICAgIHByaW50KCdkZWYgbm9vcCh4KTogcGFzcycpCi0gICAgcHJpbnQoJ0wgPSBbTm9uZV0gKiAxMDAwMDAwJykKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEEgPSBsaXN0KG1hcChub29wLCBMKSkKLSAgICBwcmludCgnXHRtYXAobm9vcCwgTCk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBCID0gcG9vbC5tYXAobm9vcCwgTCkKLSAgICBwcmludCgnXHRwb29sLm1hcChub29wLCBMKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAodGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEMgPSBsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9bGVuKEwpLy84KSkKLSAgICBwcmludCgnXHRsaXN0KHBvb2wuaW1hcChub29wLCBMLCBjaHVua3NpemU9JWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAobGVuKEwpLy84LCB0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgYXNzZXJ0IEEgPT0gQiA9PSBDLCAobGVuKEEpLCBsZW4oQiksIGxlbihDKSkKLSAgICBwcmludCgpCi0KLSAgICBkZWwgQSwgQiwgQywgTAotCi0gICAgIwotICAgICMgVGVzdCBlcnJvciBoYW5kbGluZwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGVycm9yIGhhbmRsaW5nOicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wuYXBwbHkoZiwgKDUsKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KHBvb2wubWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpCi0gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLm1hcCgpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgdHJ5OgotICAgICAgICBwcmludChsaXN0KHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQotCi0gICAgaXQgPSBwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKQotICAgIGZvciBpIGluIHJhbmdlKDEwKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgeCA9IG5leHQoaXQpCisgICAgICAgICAgICBwcmludChwb29sLmFwcGx5KGYsICg1LCkpKQogICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBpZiBpID09IDU6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLmFwcGx5KCknKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgaSA9PSA1OgotICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgYXNzZXJ0IGkgPT0gOQotICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIElNYXBJdGVyYXRvci5uZXh0KCknKQotICAgIHByaW50KCkKLQotICAgICMKLSAgICAjIFRlc3RpbmcgdGltZW91dHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgVEFTS1NbMF0pCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuXHQlcycgJSByZXMuZ2V0KDAuMDIpKQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gcG9vbC5tYXAoKScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgcHJpbnQoJ1Rlc3RpbmcgSU1hcEl0ZXJhdG9yLm5leHQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKLSAgICBpdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKLSAgICB3aGlsZSAxOgotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKLSAgICBwcmludCgpCi0gICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQobGlzdChwb29sLmltYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIGxpc3QocG9vbC5pbWFwKCkpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICAjCi0gICAgIyBUZXN0aW5nIGNhbGxiYWNrCi0gICAgIworICAgICAgICBpdCA9IHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB4ID0gbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBpID09IDU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgIHByaW50KCdUZXN0aW5nIGNhbGxiYWNrOicpCisgICAgICAgIGFzc2VydCBpID09IDkKKyAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gSU1hcEl0ZXJhdG9yLm5leHQoKScpCisgICAgICAgIHByaW50KCkKIAotICAgIEEgPSBbXQotICAgIEIgPSBbNTYsIDAsIDEsIDgsIDI3LCA2NCwgMTI1LCAyMTYsIDM0MywgNTEyLCA3MjldCisgICAgICAgICMKKyAgICAgICAgIyBUZXN0aW5nIHRpbWVvdXRzCisgICAgICAgICMKIAotICAgIHIgPSBwb29sLmFwcGx5X2FzeW5jKG11bCwgKDcsIDgpLCBjYWxsYmFjaz1BLmFwcGVuZCkKLSAgICByLndhaXQoKQorICAgICAgICBwcmludCgnVGVzdGluZyBBcHBseVJlc3VsdC5nZXQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKKyAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIFRBU0tTWzBdKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIHJlcy5nZXQoMC4wMikpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQorICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCkKIAotICAgIHIgPSBwb29sLm1hcF9hc3luYyhwb3czLCBsaXN0KHJhbmdlKDEwKSksIGNhbGxiYWNrPUEuZXh0ZW5kKQotICAgIHIud2FpdCgpCi0KLSAgICBpZiBBID09IEI6Ci0gICAgICAgIHByaW50KCdcdGNhbGxiYWNrcyBzdWNjZWVkZWRcbicpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1x0KioqIGNhbGxiYWNrcyBmYWlsZWRcblx0XHQlcyAhPSAlc1xuJyAlIChBLCBCKSkKLQotICAgICMKLSAgICAjIENoZWNrIHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyB0YXNrcwotICAgICMKLQotICAgIGFzc2VydCBub3QgcG9vbC5fY2FjaGUsICdjYWNoZSA9ICVyJyAlIHBvb2wuX2NhY2hlCi0KLSAgICAjCi0gICAgIyBDaGVjayBjbG9zZSgpIG1ldGhvZHMKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyBjbG9zZSgpOicpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcmVzdWx0ID0gcG9vbC5hcHBseV9hc3luYyh0aW1lLnNsZWVwLCBbMC41XSkKLSAgICBwb29sLmNsb3NlKCkKLSAgICBwb29sLmpvaW4oKQotCi0gICAgYXNzZXJ0IHJlc3VsdC5nZXQoKSBpcyBOb25lCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGNsb3NlKCkgc3VjY2VlZGVkXG4nKQotCi0gICAgIwotICAgICMgQ2hlY2sgdGVybWluYXRlKCkgbWV0aG9kCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgdGVybWluYXRlKCk6JykKLQotICAgIHBvb2wgPSBtdWx0aXByb2Nlc3NpbmcuUG9vbCgyKQotICAgIERFTFRBID0gMC4xCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0gICAgcG9vbC50ZXJtaW5hdGUoKQotICAgIHBvb2wuam9pbigpCi0KLSAgICBmb3Igd29ya2VyIGluIHBvb2wuX3Bvb2w6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdHRlcm1pbmF0ZSgpIHN1Y2NlZWRlZFxuJykKLQotICAgICMKLSAgICAjIENoZWNrIGdhcmJhZ2UgY29sbGVjdGlvbgotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGdhcmJhZ2UgY29sbGVjdGlvbjonKQotCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCi0gICAgREVMVEEgPSAwLjEKLSAgICBwcm9jZXNzZXMgPSBwb29sLl9wb29sCi0gICAgaWdub3JlID0gcG9vbC5hcHBseShwb3czLCBbMl0pCi0gICAgcmVzdWx0cyA9IFtwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFtERUxUQV0pIGZvciBpIGluIHJhbmdlKDEwMCldCi0KLSAgICByZXN1bHRzID0gcG9vbCA9IE5vbmUKLQotICAgIHRpbWUuc2xlZXAoREVMVEEgKiAyKQotCi0gICAgZm9yIHdvcmtlciBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIGFzc2VydCBub3Qgd29ya2VyLmlzX2FsaXZlKCkKLQotICAgIHByaW50KCdcdGdhcmJhZ2UgY29sbGVjdGlvbiBzdWNjZWVkZWRcbicpCisgICAgICAgIHByaW50KCdUZXN0aW5nIElNYXBJdGVyYXRvci5uZXh0KCkgd2l0aCB0aW1lb3V0OicsIGVuZD0nICcpCisgICAgICAgIGl0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIGl0Lm5leHQoMC4wMikpCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbXVsdGlwcm9jZXNzaW5nLmZyZWV6ZV9zdXBwb3J0KCkKLQotICAgIGFzc2VydCBsZW4oc3lzLmFyZ3YpIGluICgxLCAyKQotCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxIG9yIHN5cy5hcmd2WzFdID09ICdwcm9jZXNzZXMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICd0aHJlYWRzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyB0aHJlYWRzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15IGFzIG11bHRpcHJvY2Vzc2luZwotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdVc2FnZTpcblx0JXMgW3Byb2Nlc3NlcyB8IHRocmVhZHNdJyAlIHN5cy5hcmd2WzBdKQotICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDIpCi0KICAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weSBiL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODFkYmMzOC4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotIwotIyBBIHRlc3QgZmlsZSBmb3IgdGhlIGBtdWx0aXByb2Nlc3NpbmdgIHBhY2thZ2UKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5cwotaW1wb3J0IHJhbmRvbQotZnJvbSBxdWV1ZSBpbXBvcnQgRW1wdHkKLQotaW1wb3J0IG11bHRpcHJvY2Vzc2luZyAgICAgICAgICAgICAgICMgbWF5IGdldCBvdmVyd3JpdHRlbgotCi0KLSMjIyMgVEVTVF9WQUxVRQotCi1kZWYgdmFsdWVfZnVuYyhydW5uaW5nLCBtdXRleCk6Ci0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjQpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBwcmludCgnXG5cdFx0XHQnICsgc3RyKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkgKyAnIGhhcyBmaW5pc2hlZCcpCi0gICAgcnVubmluZy52YWx1ZSAtPSAxCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3ZhbHVlKCk6Ci0gICAgVEFTS1MgPSAxMAotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCBUQVNLUykKLSAgICBtdXRleCA9IG11bHRpcHJvY2Vzc2luZy5Mb2NrKCkKLQotICAgIGZvciBpIGluIHJhbmdlKFRBU0tTKToKLSAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD12YWx1ZV9mdW5jLCBhcmdzPShydW5uaW5nLCBtdXRleCkpCi0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgd2hpbGUgcnVubmluZy52YWx1ZSA+IDA6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC4wOCkKLSAgICAgICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHByaW50KHJ1bm5pbmcudmFsdWUsIGVuZD0nICcpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHByaW50KCkKLSAgICBwcmludCgnTm8gbW9yZSBydW5uaW5nIHByb2Nlc3NlcycpCi0KLQotIyMjIyBURVNUX1FVRVVFCi0KLWRlZiBxdWV1ZV9mdW5jKHF1ZXVlKToKLSAgICBmb3IgaSBpbiByYW5nZSgzMCk6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC41ICogcmFuZG9tLnJhbmRvbSgpKQotICAgICAgICBxdWV1ZS5wdXQoaSppKQotICAgIHF1ZXVlLnB1dCgnU1RPUCcpCi0KLWRlZiB0ZXN0X3F1ZXVlKCk6Ci0gICAgcSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXF1ZXVlX2Z1bmMsIGFyZ3M9KHEsKSkKLSAgICBwLnN0YXJ0KCkKLQotICAgIG8gPSBOb25lCi0gICAgd2hpbGUgbyAhPSAnU1RPUCc6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG8gPSBxLmdldCh0aW1lb3V0PTAuMykKLSAgICAgICAgICAgIHByaW50KG8sIGVuZD0nICcpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IEVtcHR5OgotICAgICAgICAgICAgcHJpbnQoJ1RJTUVPVVQnKQotCi0gICAgcHJpbnQoKQotCi0KLSMjIyMgVEVTVF9DT05ESVRJT04KLQotZGVmIGNvbmRpdGlvbl9mdW5jKGNvbmQpOgotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoJ1x0JyArIHN0cihjb25kKSkKLSAgICB0aW1lLnNsZWVwKDIpCi0gICAgcHJpbnQoJ1x0Y2hpbGQgaXMgbm90aWZ5aW5nJykKLSAgICBwcmludCgnXHQnICsgc3RyKGNvbmQpKQotICAgIGNvbmQubm90aWZ5KCkKLSAgICBjb25kLnJlbGVhc2UoKQotCi1kZWYgdGVzdF9jb25kaXRpb24oKToKLSAgICBjb25kID0gbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PWNvbmRpdGlvbl9mdW5jLCBhcmdzPShjb25kLCkpCi0gICAgcHJpbnQoY29uZCkKLQotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLmFjcXVpcmUoKQotICAgIHByaW50KGNvbmQpCi0KLSAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCdtYWluIGlzIHdhaXRpbmcnKQotICAgIGNvbmQud2FpdCgpCi0gICAgcHJpbnQoJ21haW4gaGFzIHdva2VuIHVwJykKLQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5yZWxlYXNlKCkKLSAgICBwcmludChjb25kKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICBwLmpvaW4oKQotICAgIHByaW50KGNvbmQpCi0KLQotIyMjIyBURVNUX1NFTUFQSE9SRQotCi1kZWYgc2VtYXBob3JlX2Z1bmMoc2VtYSwgbXV0ZXgsIHJ1bm5pbmcpOgotICAgIHNlbWEuYWNxdWlyZSgpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlICs9IDEKLSAgICBwcmludChydW5uaW5nLnZhbHVlLCAndGFza3MgYXJlIHJ1bm5pbmcnKQotICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgcmFuZG9tLnNlZWQoKQotICAgIHRpbWUuc2xlZXAocmFuZG9tLnJhbmRvbSgpKjIpCi0KLSAgICBtdXRleC5hY3F1aXJlKCkKLSAgICBydW5uaW5nLnZhbHVlIC09IDEKLSAgICBwcmludCgnJXMgaGFzIGZpbmlzaGVkJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotICAgIHNlbWEucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X3NlbWFwaG9yZSgpOgotICAgIHNlbWEgPSBtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKDMpCi0gICAgbXV0ZXggPSBtdWx0aXByb2Nlc3NpbmcuUkxvY2soKQotICAgIHJ1bm5pbmcgPSBtdWx0aXByb2Nlc3NpbmcuVmFsdWUoJ2knLCAwKQotCi0gICAgcHJvY2Vzc2VzID0gWwotICAgICAgICBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VtYXBob3JlX2Z1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbWEsIG11dGV4LCBydW5uaW5nKSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApCi0gICAgICAgIF0KLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX0pPSU5fVElNRU9VVAotCi1kZWYgam9pbl90aW1lb3V0X2Z1bmMoKToKLSAgICBwcmludCgnXHRjaGlsZCBzbGVlcGluZycpCi0gICAgdGltZS5zbGVlcCg1LjUpCi0gICAgcHJpbnQoJ1xuXHRjaGlsZCB0ZXJtaW5hdGluZycpCi0KLWRlZiB0ZXN0X2pvaW5fdGltZW91dCgpOgotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9am9pbl90aW1lb3V0X2Z1bmMpCi0gICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnd2FpdGluZyBmb3IgcHJvY2VzcyB0byBmaW5pc2gnKQotCi0gICAgd2hpbGUgMToKLSAgICAgICAgcC5qb2luKHRpbWVvdXQ9MSkKLSAgICAgICAgaWYgbm90IHAuaXNfYWxpdmUoKToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHByaW50KCcuJywgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLQotIyMjIyBURVNUX0VWRU5UCi0KLWRlZiBldmVudF9mdW5jKGV2ZW50KToKLSAgICBwcmludCgnXHQlciBpcyB3YWl0aW5nJyAlIG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKSkKLSAgICBldmVudC53YWl0KCkKLSAgICBwcmludCgnXHQlciBoYXMgd29rZW4gdXAnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotCi1kZWYgdGVzdF9ldmVudCgpOgotICAgIGV2ZW50ID0gbXVsdGlwcm9jZXNzaW5nLkV2ZW50KCkKLQotICAgIHByb2Nlc3NlcyA9IFttdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9ZXZlbnRfZnVuYywgYXJncz0oZXZlbnQsKSkKLSAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSldCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ21haW4gaXMgc2xlZXBpbmcnKQotICAgIHRpbWUuc2xlZXAoMikKLQotICAgIHByaW50KCdtYWluIGlzIHNldHRpbmcgZXZlbnQnKQotICAgIGV2ZW50LnNldCgpCi0KLSAgICBmb3IgcCBpbiBwcm9jZXNzZXM6Ci0gICAgICAgIHAuam9pbigpCi0KLQotIyMjIyBURVNUX1NIQVJFRFZBTFVFUwotCi1kZWYgc2hhcmVkdmFsdWVzX2Z1bmModmFsdWVzLCBhcnJheXMsIHNoYXJlZF92YWx1ZXMsIHNoYXJlZF9hcnJheXMpOgotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgdiA9IHZhbHVlc1tpXVsxXQotICAgICAgICBzdiA9IHNoYXJlZF92YWx1ZXNbaV0udmFsdWUKLSAgICAgICAgYXNzZXJ0IHYgPT0gc3YKLQotICAgIGZvciBpIGluIHJhbmdlKGxlbih2YWx1ZXMpKToKLSAgICAgICAgYSA9IGFycmF5c1tpXVsxXQotICAgICAgICBzYSA9IGxpc3Qoc2hhcmVkX2FycmF5c1tpXVs6XSkKLSAgICAgICAgYXNzZXJ0IGEgPT0gc2EKLQotICAgIHByaW50KCdUZXN0cyBwYXNzZWQnKQotCi1kZWYgdGVzdF9zaGFyZWR2YWx1ZXMoKToKLSAgICB2YWx1ZXMgPSBbCi0gICAgICAgICgnaScsIDEwKSwKLSAgICAgICAgKCdoJywgLTIpLAotICAgICAgICAoJ2QnLCAxLjI1KQotICAgICAgICBdCi0gICAgYXJyYXlzID0gWwotICAgICAgICAoJ2knLCBsaXN0KHJhbmdlKDEwMCkpKSwKLSAgICAgICAgKCdkJywgWzAuMjUgKiBpIGZvciBpIGluIHJhbmdlKDEwMCldKSwKLSAgICAgICAgKCdIJywgbGlzdChyYW5nZSgxMDAwKSkpCi0gICAgICAgIF0KLQotICAgIHNoYXJlZF92YWx1ZXMgPSBbbXVsdGlwcm9jZXNzaW5nLlZhbHVlKGlkLCB2KSBmb3IgaWQsIHYgaW4gdmFsdWVzXQotICAgIHNoYXJlZF9hcnJheXMgPSBbbXVsdGlwcm9jZXNzaW5nLkFycmF5KGlkLCBhKSBmb3IgaWQsIGEgaW4gYXJyYXlzXQotCi0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAotICAgICAgICB0YXJnZXQ9c2hhcmVkdmFsdWVzX2Z1bmMsCi0gICAgICAgIGFyZ3M9KHZhbHVlcywgYXJyYXlzLCBzaGFyZWRfdmFsdWVzLCBzaGFyZWRfYXJyYXlzKQotICAgICAgICApCi0gICAgcC5zdGFydCgpCi0gICAgcC5qb2luKCkKLQotICAgIGFzc2VydCBwLmV4aXRjb2RlID09IDAKLQotCi0jIyMjCi0KLWRlZiB0ZXN0KG5hbWVzcGFjZT1tdWx0aXByb2Nlc3NpbmcpOgotICAgIGdsb2JhbCBtdWx0aXByb2Nlc3NpbmcKLQotICAgIG11bHRpcHJvY2Vzc2luZyA9IG5hbWVzcGFjZQotCi0gICAgZm9yIGZ1bmMgaW4gW3Rlc3RfdmFsdWUsIHRlc3RfcXVldWUsIHRlc3RfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICB0ZXN0X3NlbWFwaG9yZSwgdGVzdF9qb2luX3RpbWVvdXQsIHRlc3RfZXZlbnQsCi0gICAgICAgICAgICAgICAgIHRlc3Rfc2hhcmVkdmFsdWVzXToKLQotICAgICAgICBwcmludCgnXG5cdCMjIyMjIyMjICVzXG4nICUgZnVuYy5fX25hbWVfXykKLSAgICAgICAgZnVuYygpCi0KLSAgICBpZ25vcmUgPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuKCkgICAgICAjIGNsZWFudXAgYW55IG9sZCBwcm9jZXNzZXMKLSAgICBpZiBoYXNhdHRyKG11bHRpcHJvY2Vzc2luZywgJ19kZWJ1Z19pbmZvJyk6Ci0gICAgICAgIGluZm8gPSBtdWx0aXByb2Nlc3NpbmcuX2RlYnVnX2luZm8oKQotICAgICAgICBpZiBpbmZvOgotICAgICAgICAgICAgcHJpbnQoaW5mbykKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RoZXJlIHNob3VsZCBiZSBubyBwb3NpdGl2ZSByZWZjb3VudHMgbGVmdCcpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotCi0gICAgYXNzZXJ0IGxlbihzeXMuYXJndikgaW4gKDEsIDIpCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDEgb3Igc3lzLmFyZ3ZbMV0gPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBuYW1lc3BhY2UgPSBtdWx0aXByb2Nlc3NpbmcKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICdtYW5hZ2VyJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgYW5kIGEgbWFuYWdlciAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgbmFtZXNwYWNlID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotICAgICAgICBuYW1lc3BhY2UuUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5jdXJyZW50X3Byb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzCi0gICAgICAgIG5hbWVzcGFjZS5hY3RpdmVfY2hpbGRyZW4gPSBtdWx0aXByb2Nlc3NpbmcuYWN0aXZlX2NoaWxkcmVuCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAndGhyZWFkcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgdGhyZWFkcyAnLmNlbnRlcig3OSwgJy0nKSkKLSAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5kdW1teSBhcyBuYW1lc3BhY2UKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnVXNhZ2U6XG5cdCVzIFtwcm9jZXNzZXMgfCBtYW5hZ2VyIHwgdGhyZWFkc10nICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMikKLQotICAgIHRlc3QobmFtZXNwYWNlKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weSBiL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MTAyNGQuLjAwMDAwMDAKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLSMKLSMgRXhhbXBsZSB3aGVyZSBhIHBvb2wgb2YgaHR0cCBzZXJ2ZXJzIHNoYXJlIGEgc2luZ2xlIGxpc3RlbmluZyBzb2NrZXQKLSMKLSMgT24gV2luZG93cyB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIHRoZSBhYmlsaXR5IHRvIHBpY2tsZSBhIHNvY2tldAotIyBvYmplY3Qgc28gdGhhdCB0aGUgd29ya2VyIHByb2Nlc3NlcyBjYW4gaW5oZXJpdCBhIGNvcHkgb2YgdGhlIHNlcnZlcgotIyBvYmplY3QuICAoV2UgaW1wb3J0IGBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uYCB0byBlbmFibGUgdGhpcyBwaWNrbGluZy4pCi0jCi0jIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci0jIHVzaW5nIGEgcHJvY2Vzcy1zaGFyZWQgbG9jayAtLSBkb2VzIG5vdCBzZWVtIHRvIGJlIG5lY2Vzc2FyeS4KLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLQotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgZnJlZXplX3N1cHBvcnQKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IEhUVFBTZXJ2ZXIKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgotCi1pZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiAgICAjIG1ha2Ugc29ja2V0cyBwaWNrYWJsZS9pbmhlcml0YWJsZQotCi0KLWRlZiBub3RlKGZvcm1hdCwgKmFyZ3MpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1slc11cdCVzXG4nICUgKGN1cnJlbnRfcHJvY2VzcygpLm5hbWUsIGZvcm1hdCAlIGFyZ3MpKQotCi0KLWNsYXNzIFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgIyB3ZSBvdmVycmlkZSBsb2dfbWVzc2FnZSgpIHRvIHNob3cgd2hpY2ggcHJvY2VzcyBpcyBoYW5kbGluZyB0aGUgcmVxdWVzdAotICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCBmb3JtYXQsICphcmdzKToKLSAgICAgICAgbm90ZShmb3JtYXQsICphcmdzKQotCi1kZWYgc2VydmVfZm9yZXZlcihzZXJ2ZXIpOgotICAgIG5vdGUoJ3N0YXJ0aW5nIHNlcnZlcicpCi0gICAgdHJ5OgotICAgICAgICBzZXJ2ZXIuc2VydmVfZm9yZXZlcigpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwYXNzCi0KLQotZGVmIHJ1bnBvb2woYWRkcmVzcywgbnVtYmVyX29mX3Byb2Nlc3Nlcyk6Ci0gICAgIyBjcmVhdGUgYSBzaW5nbGUgc2VydmVyIG9iamVjdCAtLSBjaGlsZHJlbiB3aWxsIGVhY2ggaW5oZXJpdCBhIGNvcHkKLSAgICBzZXJ2ZXIgPSBIVFRQU2VydmVyKGFkZHJlc3MsIFJlcXVlc3RIYW5kbGVyKQotCi0gICAgIyBjcmVhdGUgY2hpbGQgcHJvY2Vzc2VzIHRvIGFjdCBhcyB3b3JrZXJzCi0gICAgZm9yIGkgaW4gcmFuZ2UobnVtYmVyX29mX3Byb2Nlc3NlcyAtIDEpOgotICAgICAgICBQcm9jZXNzKHRhcmdldD1zZXJ2ZV9mb3JldmVyLCBhcmdzPShzZXJ2ZXIsKSkuc3RhcnQoKQotCi0gICAgIyBtYWluIHByb2Nlc3MgYWxzbyBhY3RzIGFzIGEgd29ya2VyCi0gICAgc2VydmVfZm9yZXZlcihzZXJ2ZXIpCi0KLQotZGVmIHRlc3QoKToKLSAgICBESVIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJykKLSAgICBBRERSRVNTID0gKCdsb2NhbGhvc3QnLCA4MDAwKQotICAgIE5VTUJFUl9PRl9QUk9DRVNTRVMgPSA0Ci0KLSAgICBwcmludCgnU2VydmluZyBhdCBodHRwOi8vJXM6JWQgdXNpbmcgJWQgd29ya2VyIHByb2Nlc3NlcycgJSBcCi0gICAgICAgICAgKEFERFJFU1NbMF0sIEFERFJFU1NbMV0sIE5VTUJFUl9PRl9QUk9DRVNTRVMpKQotICAgIHByaW50KCdUbyBleGl0IHByZXNzIEN0cmwtJyArIFsnQycsICdCcmVhayddW3N5cy5wbGF0Zm9ybT09J3dpbjMyJ10pCi0KLSAgICBvcy5jaGRpcihESVIpCi0gICAgcnVucG9vbChBRERSRVNTLCBOVU1CRVJfT0ZfUFJPQ0VTU0VTKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJlZXplX3N1cHBvcnQoKQotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3dvcmtlcnMucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQppbmRleCBlNjZkOTdiLi4zYjkyMjY5IDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weQpAQCAtMSwxNiArMSwzIEBACi0jCi0jIFNpbXBsZSBleGFtcGxlIHdoaWNoIHVzZXMgYSBwb29sIG9mIHdvcmtlcnMgdG8gY2Fycnkgb3V0IHNvbWUgdGFza3MuCi0jCi0jIE5vdGljZSB0aGF0IHRoZSByZXN1bHRzIHdpbGwgcHJvYmFibHkgbm90IGNvbWUgb3V0IG9mIHRoZSBvdXRwdXQKLSMgcXVldWUgaW4gdGhlIHNhbWUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNvcnJlc3BvbmRpbmcgdGFza3Mgd2VyZQotIyBwdXQgb24gdGhlIGlucHV0IHF1ZXVlLiAgSWYgaXQgaXMgaW1wb3J0YW50IHRvIGdldCB0aGUgcmVzdWx0cyBiYWNrCi0jIGluIHRoZSBvcmlnaW5hbCBvcmRlciB0aGVuIGNvbnNpZGVyIHVzaW5nIGBQb29sLm1hcCgpYCBvcgotIyBgUG9vbC5pbWFwKClgICh3aGljaCB3aWxsIHNhdmUgb24gdGhlIGFtb3VudCBvZiBjb2RlIG5lZWRlZCBhbnl3YXkpLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCiAKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmggYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCmluZGV4IDMyNjQ3YzAuLmZjYjg0NmEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKKysrIGIvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaApAQCAtNzAsNCArNzAsMTEgQEAKICAgICBQeU9iamVjdCAqdHBfc3ViY2xhc3NlczsKICAgICBQeU9iamVjdCAqdHBfd2Vha2xpc3Q7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2RlbDsKKworICAgIC8qIFR5cGUgYXR0cmlidXRlIGNhY2hlIHZlcnNpb24gdGFnLiBBZGRlZCBpbiB2ZXJzaW9uIDIuNiAqLworICAgIHVuc2lnbmVkIGludCB0cF92ZXJzaW9uX3RhZzsKKworICAgIGRlc3RydWN0b3IgdHBfZmluYWxpemU7CisKIH0gUHlUeXBlT2JqZWN0OwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdAppbmRleCAxZTVmNDJkLi4xMDkyZTZiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS8ydG8zLnJzdAorKysgYi9Eb2MvbGlicmFyeS8ydG8zLnJzdApAQCAtMTQyLDYgKzE0MiwzOSBAQAogICAgUmVtb3ZlcyB1c2FnZSBvZiA6ZnVuYzpgYXBwbHlgLiAgRm9yIGV4YW1wbGUgYGBhcHBseShmdW5jdGlvbiwgKmFyZ3MsCiAgICAqKmt3YXJncylgYCBpcyBjb252ZXJ0ZWQgdG8gYGBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpYGAuCiAKKy4uIDJ0bzNmaXhlcjo6IGFzc2VydHMKKworICAgUmVwbGFjZXMgZGVwcmVjYXRlZCA6bW9kOmB1bml0dGVzdGAgbWV0aG9kIG5hbWVzIHdpdGggdGhlIGNvcnJlY3Qgb25lcy4KKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRvCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBgYGZhaWxVbmxlc3NFcXVhbChhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsPmAKKyAgIGBgYXNzZXJ0RXF1YWxzKGEsIGIpYGAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWw+YAorICAgYGBmYWlsSWZFcXVhbChhLCBiKWBgICAgICAgICAgICAgIDptZXRoOmBhc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEVxdWFscyhhLCBiKWBgICAgICAgICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEVxdWFsPmAKKyAgIGBgZmFpbFVubGVzcyhhKWBgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgYXNzZXJ0XyhhKWBgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0VHJ1ZShhKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUcnVlPmAKKyAgIGBgZmFpbElmKGEpYGAgICAgICAgICAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RmFsc2U+YAorICAgYGBmYWlsVW5sZXNzUmFpc2VzKGV4YywgY2FsKWBgICAgIDptZXRoOmBhc3NlcnRSYWlzZXMoZXhjLCBjYWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFJhaXNlcz5gCisgICBgYGZhaWxVbmxlc3NBbG1vc3RFcXVhbChhLCBiKWBgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsPmAKKyAgIGBgYXNzZXJ0QWxtb3N0RXF1YWxzKGEsIGIpYGAgICAgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWw+YAorICAgYGBmYWlsSWZBbG1vc3RFcXVhbChhLCBiKWBgICAgICAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbD5gCisgICBgYGFzc2VydE5vdEFsbW9zdEVxdWFscyhhLCBiKWBgICAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsPmAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKwogLi4gMnRvM2ZpeGVyOjogYmFzZXN0cmluZwogCiAgICBDb252ZXJ0cyA6Y2xhc3M6YGJhc2VzdHJpbmdgIHRvIDpjbGFzczpgc3RyYC4KQEAgLTM0Miw2ICszNzUsMTAgQEAKIAogICAgSGFuZGxlcyB0aGUgbW92ZSBvZiA6ZnVuYzpgcmVkdWNlYCB0byA6ZnVuYzpgZnVuY3Rvb2xzLnJlZHVjZWAuCiAKKy4uIDJ0bzNmaXhlcjo6IHJlbG9hZAorCisgICBDb252ZXJ0cyA6ZnVuYzpgcmVsb2FkYCB0byA6ZnVuYzpgaW1wLnJlbG9hZGAuCisKIC4uIDJ0bzNmaXhlcjo6IHJlbmFtZXMKIAogICAgQ2hhbmdlcyA6ZGF0YTpgc3lzLm1heGludGAgdG8gOmRhdGE6YHN5cy5tYXhzaXplYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IDkyOTkxMjQuLjc4NTNkMzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtMTIsOSArMTIsOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyA6dGVybTpgYWJzdHJhY3QgYmFzZQotY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKLXdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQotcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCitjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgKEFCQ3MpIGluIFB5dGhvbiwgYXMgb3V0bGluZWQgaW4gOnBlcDpgMzExOWA7CitzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMgd2FzIGFkZGVkIHRvIFB5dGhvbi4gKFNlZSBhbHNvIDpwZXA6YDMxNDFgIGFuZCB0aGUKKzptb2Q6YG51bWJlcnNgIG1vZHVsZSByZWdhcmRpbmcgYSB0eXBlIGhpZXJhcmNoeSBmb3IgbnVtYmVycyBiYXNlZCBvbiBBQkNzLikKIAogVGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgaGFzIHNvbWUgY29uY3JldGUgY2xhc3NlcyB0aGF0IGRlcml2ZSBmcm9tCiBBQkNzOyB0aGVzZSBjYW4sIG9mIGNvdXJzZSwgYmUgZnVydGhlciBkZXJpdmVkLiBJbiBhZGRpdGlvbiB0aGUKQEAgLTIzLDcgKzIzLDcgQEAKIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzOgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IEFCQ01ldGEKIApAQCAtNTgsNiArNTgsMTAgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB0byBhbGxvdyB1c2FnZSBhcyBhIGNsYXNzIGRlY29yYXRvci4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFRvIGRldGVjdCBjYWxscyB0byA6bWV0aDpgcmVnaXN0ZXJgLCB5b3UgY2FuIHVzZSB0aGUKKyAgICAgICAgIDpmdW5jOmBnZXRfY2FjaGVfdG9rZW5gIGZ1bmN0aW9uLgorCiAgICBZb3UgY2FuIGFsc28gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gYW4gYWJzdHJhY3QgYmFzZSBjbGFzczoKIAogICAgLi4gbWV0aG9kOjogX19zdWJjbGFzc2hvb2tfXyhzdWJjbGFzcykKQEAgLTEyNyw2ICsxMzEsMTkgQEAKICAgIGF2YWlsYWJsZSBhcyBhIG1ldGhvZCBvZiBgYEZvb2BgLCBzbyBpdCBpcyBwcm92aWRlZCBzZXBhcmF0ZWx5LgogCiAKKy4uIGNsYXNzOjogQUJDCisKKyAgIEEgaGVscGVyIGNsYXNzIHRoYXQgaGFzIDpjbGFzczpgQUJDTWV0YWAgYXMgaXRzIG1ldGFjbGFzcy4gIFdpdGggdGhpcyBjbGFzcywKKyAgIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgc2ltcGx5IGRlcml2aW5nIGZyb20gOmNsYXNzOmBBQkNgLAorICAgYXZvaWRpbmcgc29tZXRpbWVzIGNvbmZ1c2luZyBtZXRhY2xhc3MgdXNhZ2UuCisKKyAgIE5vdGUgdGhhdCB0aGUgdHlwZSBvZiA6Y2xhc3M6YEFCQ2AgaXMgc3RpbGwgOmNsYXNzOmBBQkNNZXRhYCwgdGhlcmVmb3JlCisgICBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBBQkNgIHJlcXVpcmVzIHRoZSB1c3VhbCBwcmVjYXV0aW9ucyByZWdhcmRpbmcgbWV0YWNsYXNzCisgICB1c2FnZSwgYXMgbXVsdGlwbGUgaW5oZXJpdGFuY2UgbWF5IGxlYWQgdG8gbWV0YWNsYXNzIGNvbmZsaWN0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCiAuLiBkZWNvcmF0b3I6OiBhYnN0cmFjdG1ldGhvZApAQCAtMjk1LDYgKzMxMiwxOSBAQAogICAgICAgIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAsIG1ha2luZyB0aGlzIGRlY29yYXRvciByZWR1bmRhbnQuCiAKIAorVGhlIDptb2Q6YGFiY2AgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NhY2hlX3Rva2VuKCkKKworICAgUmV0dXJucyB0aGUgY3VycmVudCBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhY2hlIHRva2VuLgorCisgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIGludGVnZXIgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUKKyAgIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhpcyBudW1iZXIgY2hhbmdlcworICAgd2l0aCBldmVyeSBjYWxsIHRvIDptZXRoOmBBQkNNZXRhLnJlZ2lzdGVyYCBvbiBhbnkgQUJDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIEMrKyBwcm9ncmFtbWVycyBzaG91bGQgbm90ZSB0aGF0IFB5dGhvbidzIHZpcnR1YWwgYmFzZSBjbGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCA4YTM1NDFiLi45ZmZiNWEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMzAsOCArMzAsOCBAQAogc2FtcGxlZC4gIFRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaW5kaWNhdGUgaWYgdGhlIGF1ZGlvIGlzIG1vbm8sIHN0ZXJlbywgb3IKIHF1YWRyby4gIEVhY2ggZnJhbWUgY29uc2lzdHMgb2Ygb25lIHNhbXBsZSBwZXIgY2hhbm5lbC4gIFRoZSBzYW1wbGUgc2l6ZSBpcyB0aGUKIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBzYW1wbGUuICBUaHVzIGEgZnJhbWUgY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKiBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKLSpuY2hhbm5lbHMqXCpcICpzYW1wbGVzaXplKlwqXCAqZnJhbWVyYXRlKiBieXRlcy4KK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZWBgIGJ5dGVzLCBhbmQgYSBzZWNvbmQncyB3b3J0aCBvZiBhdWRpbyBjb25zaXN0cyBvZgorYGBuY2hhbm5lbHMgKiBzYW1wbGVzaXplICogZnJhbWVyYXRlYGAgYnl0ZXMuCiAKIEZvciBleGFtcGxlLCBDRCBxdWFsaXR5IGF1ZGlvIGhhcyBhIHNhbXBsZSBzaXplIG9mIHR3byBieXRlcyAoMTYgYml0cyksIHVzZXMgdHdvCiBjaGFubmVscyAoc3RlcmVvKSBhbmQgaGFzIGEgZnJhbWUgcmF0ZSBvZiA0NCwxMDAgZnJhbWVzL3NlY29uZC4gIFRoaXMgZ2l2ZXMgYQpAQCAtNTEsNiArNTEsMTEgQEAKICAgIHVzZWQgZm9yIHdyaXRpbmcsIHRoZSBmaWxlIG9iamVjdCBzaG91bGQgYmUgc2Vla2FibGUsIHVubGVzcyB5b3Uga25vdyBhaGVhZCBvZgogICAgdGltZSBob3cgbWFueSBzYW1wbGVzIHlvdSBhcmUgZ29pbmcgdG8gd3JpdGUgaW4gdG90YWwgYW5kIHVzZQogICAgOm1ldGg6YHdyaXRlZnJhbWVzcmF3YCBhbmQgOm1ldGg6YHNldG5mcmFtZXNgLgorICAgVGhlIDpmdW5jOmAub3BlbmAgZnVuY3Rpb24gbWF5IGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LiAgV2hlbgorICAgdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBjb21wbGV0ZXMsIHRoZSA6bWV0aDpgfmFpZmMuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIE9iamVjdHMgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYCB3aGVuIGEgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcgaGF2ZSB0aGUKIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtOTIsNyArOTcsOSBAQAogCiAuLiBtZXRob2Q6OiBhaWZjLmdldHBhcmFtcygpCiAKLSAgIFJldHVybiBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZSBhYm92ZSB2YWx1ZXMgaW4gdGhlIGFib3ZlIG9yZGVyLgorICAgUmV0dXJucyBhIDpmdW5jOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsCisgICBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLCBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlCisgICA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCiAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRtYXJrZXJzKCkKQEAgLTIxOCwxMiArMjI1LDE4IEBACiAgICBXcml0ZSBkYXRhIHRvIHRoZSBvdXRwdXQgZmlsZS4gIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBhZnRlciB0aGUgYXVkaW8KICAgIGZpbGUgcGFyYW1ldGVycyBoYXZlIGJlZW4gc2V0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLndyaXRlZnJhbWVzcmF3KGRhdGEpCiAKICAgIExpa2UgOm1ldGg6YHdyaXRlZnJhbWVzYCwgZXhjZXB0IHRoYXQgdGhlIGhlYWRlciBvZiB0aGUgYXVkaW8gZmlsZSBpcyBub3QKICAgIHVwZGF0ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IGFpZmMuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKaW5kZXggYjY4NmM0NC4uNTFhYmM3YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApAQCAtOTc3LDkgKzk3Nyw5IEBACiBgYHR5cGVgYCBhcmd1bWVudCBpcyBhcHBsaWVkIHRvIGRlZmF1bHQgYXJndW1lbnRzLgogCiBUbyBlYXNlIHRoZSB1c2Ugb2YgdmFyaW91cyB0eXBlcyBvZiBmaWxlcywgdGhlIGFyZ3BhcnNlIG1vZHVsZSBwcm92aWRlcyB0aGUKLWZhY3RvcnkgRmlsZVR5cGUgd2hpY2ggdGFrZXMgdGhlIGBgbW9kZT1gYCBhbmQgYGBidWZzaXplPWBgIGFyZ3VtZW50cyBvZiB0aGUKLTpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLCBgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYQotd3JpdGFibGUgZmlsZTo6CitmYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAsIGBgYnVmc2l6ZT1gYCwgYGBlbmNvZGluZz1gYCBhbmQKK2BgZXJyb3JzPWBgIGFyZ3VtZW50cyBvZiB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsCitgYEZpbGVUeXBlKCd3JylgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSB3cml0YWJsZSBmaWxlOjoKIAogICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCkBAIC0xNjQ4LDE3ICsxNjQ4LDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdAppbmRleCA1NWM2MWQ3Li43YjgxMDc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CkBAIC0xMCw2ICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIGJ1aWxkcyBvbiB0aGUgOm1vZDpgYXN5bmNvcmVgIGluZnJhc3RydWN0dXJlLCBzaW1wbGlmeWluZwogYXN5bmNocm9ub3VzIGNsaWVudHMgYW5kIHNlcnZlcnMgYW5kIG1ha2luZyBpdCBlYXNpZXIgdG8gaGFuZGxlIHByb3RvY29scwogd2hvc2UgZWxlbWVudHMgYXJlIHRlcm1pbmF0ZWQgYnkgYXJiaXRyYXJ5IHN0cmluZ3MsIG9yIGFyZSBvZiB2YXJpYWJsZSBsZW5ndGguCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkYmIzYgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdApAQCAtMCwwICsxLDM1NyBAQAorLi4gbW9kdWxlOjogYXN5bmNpbworCisuLiBfZXZlbnQtbG9vcDoKKworRXZlbnQgbG9vcHMKKz09PT09PT09PT09CisKK1RoZSBldmVudCBsb29wIGlzIHRoZSBjZW50cmFsIGV4ZWN1dGlvbiBkZXZpY2UgcHJvdmlkZWQgYnkgOm1vZDpgYXN5bmNpb2AuCitJdCBwcm92aWRlcyBtdWx0aXBsZSBmYWNpbGl0aWVzLCBhbW9uZ3N0IHdoaWNoOgorCisqIFJlZ2lzdGVyaW5nLCBleGVjdXRpbmcgYW5kIGNhbmNlbGxpbmcgZGVsYXllZCBjYWxscyAodGltZW91dHMpCisKKyogQ3JlYXRpbmcgY2xpZW50IGFuZCBzZXJ2ZXIgOnJlZjpgdHJhbnNwb3J0cyA8dHJhbnNwb3J0PmAgZm9yIHZhcmlvdXMKKyAga2luZHMgb2YgY29tbXVuaWNhdGlvbgorCisqIExhdW5jaGluZyBzdWJwcm9jZXNzZXMgYW5kIHRoZSBhc3NvY2lhdGVkIDpyZWY6YHRyYW5zcG9ydHMgPHRyYW5zcG9ydD5gCisgIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYW4gZXh0ZXJuYWwgcHJvZ3JhbQorCisqIERlbGVnYXRpbmcgY29zdGx5IGZ1bmN0aW9uIGNhbGxzIHRvIGEgcG9vbCBvZiB0aHJlYWRzCisKK0V2ZW50IGxvb3AgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZWFzaWVzdCB3YXkgdG8gZ2V0IGFuIGV2ZW50IGxvb3AgaXMgdG8gY2FsbCB0aGUgOmZ1bmM6YGdldF9ldmVudF9sb29wYAorZnVuY3Rpb24uCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2V2ZW50X2xvb3AoKQorCisgICBHZXQgdGhlIGV2ZW50IGxvb3AgZm9yIGN1cnJlbnQgY29udGV4dC4gUmV0dXJucyBhbiBldmVudCBsb29wIG9iamVjdAorICAgaW1wbGVtZW50aW5nIDpjbGFzczpgQmFzZUV2ZW50TG9vcGAgaW50ZXJmYWNlLCBvciByYWlzZXMgYW4gZXhjZXB0aW9uIGluIGNhc2Ugbm8KKyAgIGV2ZW50IGxvb3AgaGFzIGJlZW4gc2V0IGZvciB0aGUgY3VycmVudCBjb250ZXh0IGFuZCB0aGUgY3VycmVudCBwb2xpY3kgZG9lcworICAgbm90IHNwZWNpZnkgdG8gY3JlYXRlIG9uZS4gSXQgc2hvdWxkIG5ldmVyIHJldHVybiBgYE5vbmVgYC4KKworLi4gZnVuY3Rpb246OiBzZXRfZXZlbnRfbG9vcChsb29wKQorCisgICBYWFgKKworLi4gZnVuY3Rpb246OiBuZXdfZXZlbnRfbG9vcCgpCisKKyAgIFhYWAorCisKK0V2ZW50IGxvb3AgcG9saWN5CistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGdldF9ldmVudF9sb29wX3BvbGljeSgpCisKKyAgIFhYWAorCisuLiBmdW5jdGlvbjo6IHNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpCisKKyAgIFhYWAorCisKK1J1biBhbiBldmVudCBsb29wCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJ1bl9mb3JldmVyKCkKKworICAgUnVuIHVudGlsIDptZXRoOmBzdG9wYCBpcyBjYWxsZWQuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKKworICAgUnVuIHVudGlsIHRoZSA6Y2xhc3M6YEZ1dHVyZWAgaXMgZG9uZS4KKworICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgY29yb3V0aW5lLCBpdCBpcyB3cmFwcGVkIGluIGEgOmNsYXNzOmBUYXNrYC4KKworICAgUmV0dXJuIHRoZSBGdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlIGl0cyBleGNlcHRpb24uCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuaXNfcnVubmluZygpCisKKyAgIFJldHVybnMgcnVubmluZyBzdGF0dXMgb2YgZXZlbnQgbG9vcC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zdG9wKCkKKworICAgU3RvcCBydW5uaW5nIHRoZSBldmVudCBsb29wLgorCisgICBFdmVyeSBjYWxsYmFjayBzY2hlZHVsZWQgYmVmb3JlIDptZXRoOmBzdG9wYCBpcyBjYWxsZWQgd2lsbCBydW4uCisgICBDYWxsYmFjayBzY2hlZHVsZWQgYWZ0ZXIgOm1ldGg6YHN0b3BgIGlzIGNhbGxlZCB3b24ndC4gIEhvd2V2ZXIsIHRob3NlCisgICBjYWxsYmFja3Mgd2lsbCBydW4gaWYgOm1ldGg6YHJ1bl9mb3JldmVyYCBpcyBjYWxsZWQgYWdhaW4gbGF0ZXIuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2xvc2UoKQorCisgICBDbG9zZSB0aGUgZXZlbnQgbG9vcC4gVGhlIGxvb3Agc2hvdWxkIG5vdCBiZSBydW5uaW5nLgorCisgICBUaGlzIGNsZWFycyB0aGUgcXVldWVzIGFuZCBzaHV0cyBkb3duIHRoZSBleGVjdXRvciwgYnV0IGRvZXMgbm90IHdhaXQgZm9yCisgICB0aGUgZXhlY3V0b3IgdG8gZmluaXNoLgorCisgICBUaGlzIGlzIGlkZW1wb3RlbnQgYW5kIGlycmV2ZXJzaWJsZS4gTm8gb3RoZXIgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyCisgICB0aGlzIG9uZS4KKworCitDYWxscworLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssIFwqYXJncykKKworICAgQXJyYW5nZSBmb3IgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworICAgVGhpcyBvcGVyYXRlcyBhcyBhIEZJRk8gcXVldWUsIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGluIHRoZSBvcmRlciBpbgorICAgd2hpY2ggdGhleSBhcmUgcmVnaXN0ZXJlZC4gIEVhY2ggY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlLgorCisgICBBbnkgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQorICAgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssIFwqYXJncykKKworICAgTGlrZSA6bWV0aDpgY2FsbF9zb29uYCwgYnV0IHRocmVhZCBzYWZlLgorCisKK0RlbGF5ZWQgY2FsbHMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGV2ZW50IGxvb3AgaGFzIGl0cyBvd24gaW50ZXJuYWwgY2xvY2sgZm9yIGNvbXB1dGluZyB0aW1lb3V0cy4KK1doaWNoIGNsb2NrIGlzIHVzZWQgZGVwZW5kcyBvbiB0aGUgKHBsYXRmb3JtLXNwZWNpZmljKSBldmVudCBsb29wCitpbXBsZW1lbnRhdGlvbjsgaWRlYWxseSBpdCBpcyBhIG1vbm90b25pYyBjbG9jay4gIFRoaXMgd2lsbCBnZW5lcmFsbHkgYmUKK2EgZGlmZmVyZW50IGNsb2NrIHRoYW4gOmZ1bmM6YHRpbWUudGltZWAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9sYXRlcihkZWxheSwgY2FsbGJhY2ssICphcmdzKQorCisgICBBcnJhbmdlIGZvciB0aGUgKmNhbGxiYWNrKiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGdpdmVuICpkZWxheSoKKyAgIHNlY29uZHMgKGVpdGhlciBhbiBpbnQgb3IgZmxvYXQpLgorCisgICBBICJoYW5kbGUiIGlzIHJldHVybmVkOiBhbiBvcGFxdWUgb2JqZWN0IHdpdGggYSA6bWV0aDpgY2FuY2VsYCBtZXRob2QKKyAgIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsLgorCisgICAqY2FsbGJhY2sqIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBwZXIgY2FsbCB0byA6bWV0aDpgY2FsbF9sYXRlcmAuCisgICBJZiB0d28gY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgaXMKKyAgIHVuZGVmaW5lZCB3aGljaCB3aWxsIGJlIGNhbGxlZCBmaXJzdC4KKworICAgVGhlIG9wdGlvbmFsIHBvc2l0aW9uYWwgKmFyZ3MqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayB3aGVuIGl0CisgICBpcyBjYWxsZWQuIElmIHlvdSB3YW50IHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2l0aCBzb21lIG5hbWVkCisgICBhcmd1bWVudHMsIHVzZSBhIGNsb3N1cmUgb3IgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX2F0KHdoZW4sIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGF0IHRoZSBnaXZlbiBhYnNvbHV0ZSB0aW1lc3RhbXAKKyAgICp3aGVuKiAoYW4gaW50IG9yIGZsb2F0KSwgdXNpbmcgdGhlIHNhbWUgdGltZSByZWZlcmVuY2UgYXMgOm1ldGg6YHRpbWVgLgorCisgICBUaGlzIG1ldGhvZCdzIGJlaGF2aW9yIGlzIHRoZSBzYW1lIGFzIDptZXRoOmBjYWxsX2xhdGVyYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC50aW1lKCkKKworICAgUmV0dXJuIHRoZSBjdXJyZW50IHRpbWUsIGFzIGEgOmNsYXNzOmBmbG9hdGAgdmFsdWUsIGFjY29yZGluZyB0byB0aGUKKyAgIGV2ZW50IGxvb3AncyBpbnRlcm5hbCBjbG9jay4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6ZnVuYzpgYXN5bmNpby5zbGVlcGAgZnVuY3Rpb24uCisKKworQ3JlYXRpbmcgY29ubmVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24ocHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsIFwqLCBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSkKKworICAgQ3JlYXRlIGEgc3RyZWFtaW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gSW50ZXJuZXQgKmhvc3QqIGFuZAorICAgKnBvcnQqLiAgKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgYmUgYSBjYWxsYWJsZSByZXR1cm5pbmcgYQorICAgOnJlZjpgcHJvdG9jb2wgPHByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIFRoZSBjaHJvbm9sb2dpY2FsIHN5bm9wc2lzIG9mIHRoZSB1bmRlcmx5aW5nIG9wZXJhdGlvbiBpcyBhcyBmb2xsb3dzOgorCisgICAjLiBUaGUgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIGEgOnJlZjpgdHJhbnNwb3J0IDx0cmFuc3BvcnQ+YAorICAgICAgaXMgY3JlYXRlZCB0byByZXByZXNlbnQgaXQuCisKKyAgICMuICpwcm90b2NvbF9mYWN0b3J5KiBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgYW5kIG11c3QgcmV0dXJuIGEKKyAgICAgIDpyZWY6YHByb3RvY29sIDxwcm90b2NvbD5gIGluc3RhbmNlLgorCisgICAjLiBUaGUgcHJvdG9jb2wgaW5zdGFuY2UgaXMgdGllZCB0byB0aGUgdHJhbnNwb3J0LCBhbmQgaXRzCisgICAgICA6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAjLiBUaGUgY29yb3V0aW5lIHJldHVybnMgc3VjY2Vzc2Z1bGx5IHdpdGggdGhlIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAKKyAgICAgIHBhaXIuCisKKyAgIFRoZSBjcmVhdGVkIHRyYW5zcG9ydCBpcyBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYmlkaXJlY3Rpb25hbCBzdHJlYW0uCisKKyAgIC4uIG5vdGU6OgorICAgICAgKnByb3RvY29sX2ZhY3RvcnkqIGNhbiBiZSBhbnkga2luZCBvZiBjYWxsYWJsZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgICBhIGNsYXNzLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHVzZSBhIHByZS1jcmVhdGVkCisgICAgICBwcm90b2NvbCBpbnN0YW5jZSwgeW91IGNhbiBwYXNzIGBgbGFtYmRhOiBteV9wcm90b2NvbGBgLgorCisgICBPcHRpb25zIGFsbG93aW5nIHRvIGNoYW5nZSBob3cgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZDoKKworICAgKiAqc3NsKjogaWYgZ2l2ZW4gYW5kIG5vdCBmYWxzZSwgYSBTU0wvVExTIHRyYW5zcG9ydCBpcyBjcmVhdGVkCisgICAgIChieSBkZWZhdWx0IGEgcGxhaW4gVENQIHRyYW5zcG9ydCBpcyBjcmVhdGVkKS4gIElmICpzc2wqIGlzCisgICAgIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0LCB0aGlzIGNvbnRleHQgaXMgdXNlZCB0byBjcmVhdGUKKyAgICAgdGhlIHRyYW5zcG9ydDsgaWYgKnNzbCogaXMgOmNvbnN0OmBUcnVlYCwgYSBjb250ZXh0IHdpdGggc29tZQorICAgICB1bnNwZWNpZmllZCBkZWZhdWx0IHNldHRpbmdzIGlzIHVzZWQuCisKKyAgICogKnNlcnZlcl9ob3N0bmFtZSosIGlzIG9ubHkgZm9yIHVzZSB0b2dldGhlciB3aXRoICpzc2wqLAorICAgICBhbmQgc2V0cyBvciBvdmVycmlkZXMgdGhlIGhvc3RuYW1lIHRoYXQgdGhlIHRhcmdldCBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZQorICAgICB3aWxsIGJlIG1hdGNoZWQgYWdhaW5zdC4gIEJ5IGRlZmF1bHQgdGhlIHZhbHVlIG9mIHRoZSAqaG9zdCogYXJndW1lbnQKKyAgICAgaXMgdXNlZC4gIElmICpob3N0KiBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gZGVmYXVsdCBhbmQgeW91IG11c3QgcGFzcyBhCisgICAgIHZhbHVlIGZvciAqc2VydmVyX2hvc3RuYW1lKi4gIElmICpzZXJ2ZXJfaG9zdG5hbWUqIGlzIGFuIGVtcHR5CisgICAgIHN0cmluZywgaG9zdG5hbWUgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgKHdoaWNoIGlzIGEgc2VyaW91cyBzZWN1cml0eQorICAgICByaXNrLCBhbGxvd2luZyBmb3IgbWFuLWluLXRoZS1taWRkbGUtYXR0YWNrcykuCisKKyAgICogKmZhbWlseSosICpwcm90byosICpmbGFncyogYXJlIHRoZSBvcHRpb25hbCBhZGRyZXNzIGZhbWlseSwgcHJvdG9jb2wKKyAgICAgYW5kIGZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHRvIGdldGFkZHJpbmZvKCkgZm9yICpob3N0KiByZXNvbHV0aW9uLgorICAgICBJZiBnaXZlbiwgdGhlc2Ugc2hvdWxkIGFsbCBiZSBpbnRlZ2VycyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCisgICAgIDptb2Q6YHNvY2tldGAgbW9kdWxlIGNvbnN0YW50cy4KKworICAgKiAqc29jayosIGlmIGdpdmVuLCBzaG91bGQgYmUgYW4gZXhpc3RpbmcsIGFscmVhZHkgY29ubmVjdGVkCisgICAgIDpjbGFzczpgc29ja2V0LnNvY2tldGAgb2JqZWN0IHRvIGJlIHVzZWQgYnkgdGhlIHRyYW5zcG9ydC4KKyAgICAgSWYgKnNvY2sqIGlzIGdpdmVuLCBub25lIG9mICpob3N0KiwgKnBvcnQqLCAqZmFtaWx5KiwgKnByb3RvKiwgKmZsYWdzKgorICAgICBhbmQgKmxvY2FsX2FkZHIqIHNob3VsZCBiZSBzcGVjaWZpZWQuCisKKyAgICogKmxvY2FsX2FkZHIqLCBpZiBnaXZlbiwgaXMgYSBgYChsb2NhbF9ob3N0LCBsb2NhbF9wb3J0KWBgIHR1cGxlIHVzZWQKKyAgICAgdG8gYmluZCB0aGUgc29ja2V0IHRvIGxvY2FsbHkuICBUaGUgKmxvY2FsX2hvc3QqIGFuZCAqbG9jYWxfcG9ydCoKKyAgICAgYXJlIGxvb2tlZCB1cCB1c2luZyBnZXRhZGRyaW5mbygpLCBzaW1pbGFybHkgdG8gKmhvc3QqIGFuZCAqcG9ydCouCisKKworQ3JlYXRpbmcgbGlzdGVuaW5nIGNvbm5lY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCBcKiwgZmFtaWx5PXNvY2tldC5BRl9VTlNQRUMsIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLCBzb2NrPU5vbmUsIGJhY2tsb2c9MTAwLCBzc2w9Tm9uZSwgcmV1c2VfYWRkcmVzcz1Ob25lKQorCisgICBBIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgd2hpY2ggY3JlYXRlcyBhIFRDUCBzZXJ2ZXIgYm91bmQgdG8gaG9zdCBhbmQKKyAgIHBvcnQuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSA6Y2xhc3M6YEFic3RyYWN0U2VydmVyYCBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RvcAorICAgdGhlIHNlcnZpY2UuCisKKyAgIElmICpob3N0KiBpcyBhbiBlbXB0eSBzdHJpbmcgb3IgTm9uZSBhbGwgaW50ZXJmYWNlcyBhcmUgYXNzdW1lZAorICAgYW5kIGEgbGlzdCBvZiBtdWx0aXBsZSBzb2NrZXRzIHdpbGwgYmUgcmV0dXJuZWQgKG1vc3QgbGlrZWx5CisgICBvbmUgZm9yIElQdjQgYW5kIGFub3RoZXIgb25lIGZvciBJUHY2KS4KKworICAgKmZhbWlseSogY2FuIGJlIHNldCB0byBlaXRoZXIgOmRhdGE6YH5zb2NrZXQuQUZfSU5FVGAgb3IKKyAgIDpkYXRhOmB+c29ja2V0LkFGX0lORVQ2YCB0byBmb3JjZSB0aGUgc29ja2V0IHRvIHVzZSBJUHY0IG9yIElQdjYuIElmIG5vdCBzZXQKKyAgIGl0IHdpbGwgYmUgZGV0ZXJtaW5lZCBmcm9tIGhvc3QgKGRlZmF1bHRzIHRvIDpkYXRhOmB+c29ja2V0LkFGX1VOU1BFQ2ApLgorCisgICAqZmxhZ3MqIGlzIGEgYml0bWFzayBmb3IgOm1ldGg6YGdldGFkZHJpbmZvYC4KKworICAgKnNvY2sqIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byB1c2UgYSBwcmVleGlzdGluZworICAgc29ja2V0IG9iamVjdC4KKworICAgKmJhY2tsb2cqIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBxdWV1ZWQgY29ubmVjdGlvbnMgcGFzc2VkIHRvCisgICA6bWV0aDpgfnNvY2tldC5zb2NrZXQubGlzdGVuYCAoZGVmYXVsdHMgdG8gMTAwKS4KKworICAgc3NsIGNhbiBiZSBzZXQgdG8gYW4gOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIHRvIGVuYWJsZSBTU0wgb3ZlciB0aGUKKyAgIGFjY2VwdGVkIGNvbm5lY3Rpb25zLgorCisgICAqcmV1c2VfYWRkcmVzcyogdGVsbHMgdGhlIGtlcm5lbCB0byByZXVzZSBhIGxvY2FsIHNvY2tldCBpbgorICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgIGV4cGlyZS4gSWYgbm90IHNwZWNpZmllZCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIFRydWUgb24KKyAgIFVOSVguCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChwcm90b2NvbF9mYWN0b3J5LCBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsIFwqLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCkKKworICAgQ3JlYXRlIGRhdGFncmFtIGNvbm5lY3Rpb24uCisKKyAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisKKworUmVzb2x2ZSBuYW1lCistLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBcKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCkKKworICAgWFhYCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZ2V0bmFtZWluZm8oc29ja2FkZHIsIGZsYWdzPTApCisKKyAgIFhYWAorCisKK1J1bm5pbmcgc3VicHJvY2Vzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSdW4gc3VicHJvY2Vzc2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjKHByb3RvY29sX2ZhY3RvcnksIFwqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHNoZWxsPUZhbHNlLCBidWZzaXplPTAsIFwqXCprd2FyZ3MpCisKKyAgIFhYWAorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgU2VlIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcyBmb3IgcGFyYW1ldGVycy4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX3NoZWxsKHByb3RvY29sX2ZhY3RvcnksIGNtZCwgXCosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBzaGVsbD1UcnVlLCBidWZzaXplPTAsIFwqXCprd2FyZ3MpCisKKyAgIFhYWAorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgU2VlIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBjbGFzcyBmb3IgcGFyYW1ldGVycy4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZShwcm90b2NvbF9mYWN0b3J5LCBwaXBlKQorCisgICBSZWdpc3RlciByZWFkIHBpcGUgaW4gZXZlbnRsb29wLgorCisgICAqcHJvdG9jb2xfZmFjdG9yeSogc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIDpjbGFzczpgUHJvdG9jb2xgCisgICBpbnRlcmZhY2UuICBwaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgIDpjbGFzczpgUmVhZFRyYW5zcG9ydGAgaW50ZXJmYWNlLgorCisgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGUocHJvdG9jb2xfZmFjdG9yeSwgcGlwZSkKKworICAgUmVnaXN0ZXIgd3JpdGUgcGlwZSBpbiBldmVudGxvb3AuCisKKyAgICpwcm90b2NvbF9mYWN0b3J5KiBzaG91bGQgaW5zdGFudGlhdGUgb2JqZWN0IHdpdGggOmNsYXNzOmBCYXNlUHJvdG9jb2xgCisgICBpbnRlcmZhY2UuICBQaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgIDpjbGFzczpgV3JpdGVUcmFuc3BvcnRgIGludGVyZmFjZS4KKworICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKworRXhlY3V0b3IKKy0tLS0tLS0tCisKK0NhbGwgYSBmdW5jdGlvbiBpbiBhbiA6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3JgIChwb29sIG9mIHRocmVhZHMgb3IKK3Bvb2wgb2YgcHJvY2Vzc2VzKS4gQnkgZGVmYXVsdCwgYW4gZXZlbnQgbG9vcCB1c2VzIGEgdGhyZWFkIHBvb2wgZXhlY3V0b3IKKyg6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yYCkuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucnVuX2luX2V4ZWN1dG9yKGV4ZWN1dG9yLCBjYWxsYmFjaywgXCphcmdzKQorCisgICBBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBpbiB0aGUgc3BlY2lmaWVkIGV4ZWN1dG9yLgorCisgICAqZXhlY3V0b3IqIGlzIGEgOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLkV4ZWN1dG9yYCBpbnN0YW5jZSwKKyAgIHRoZSBkZWZhdWx0IGV4ZWN1dG9yIGlzIHVzZWQgaWYgKmV4ZWN1dG9yKiBpcyBgYE5vbmVgYC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zZXRfZGVmYXVsdF9leGVjdXRvcihleGVjdXRvcikKKworICAgU2V0IHRoZSBkZWZhdWx0IGV4ZWN1dG9yIHVzZWQgYnkgOm1ldGg6YHJ1bl9pbl9leGVjdXRvcmAuCisKKworLi4gX2FzeW5jaW8taGVsbG8td29ybGQtY2FsbGJhY2s6CisKK0V4YW1wbGU6IEhlbGxvIFdvcmxkIChjYWxsYmFjaykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHJpbnQgYGBIZWxsbyBXb3JsZGBgIGV2ZXJ5IHR3byBzZWNvbmRzLCB1c2luZyBhIGNhbGxiYWNrOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBkZWYgcHJpbnRfYW5kX3JlcGVhdChsb29wKToKKyAgICAgICAgcHJpbnQoJ0hlbGxvIFdvcmxkJykKKyAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDIsIHByaW50X2FuZF9yZXBlYXQsIGxvb3ApCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgcHJpbnRfYW5kX3JlcGVhdChsb29wKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgSGVsbG8gV29ybGQgZXhhbXBsZSB1c2luZyBhIGNvcm91dGluZSA8YXN5bmNpby1oZWxsby13b3JsZC1jb3JvdXRpbmU+YC4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTUxOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5yc3QKQEAgLTAsMCArMSw2NTAgQEAKKy4uIG1vZHVsZTo6IGFzeW5jaW8KKworKysrKysrKysrKysrKysrKysrKysrKysrCitUcmFuc3BvcnRzIGFuZCBwcm90b2NvbHMKKysrKysrKysrKysrKysrKysrKysrKysrKworCisuLiBfdHJhbnNwb3J0OgorCitUcmFuc3BvcnRzCis9PT09PT09PT09CisKK1RyYW5zcG9ydHMgYXJlIGNsYXNzZWQgcHJvdmlkZWQgYnkgOm1vZDpgYXN5bmNpb2AgaW4gb3JkZXIgdG8gYWJzdHJhY3QKK3ZhcmlvdXMga2luZHMgb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gIFlvdSBnZW5lcmFsbHkgd29uJ3QgaW5zdGFudGlhdGUKK2EgdHJhbnNwb3J0IHlvdXJzZWxmOyBpbnN0ZWFkLCB5b3Ugd2lsbCBjYWxsIGEgOmNsYXNzOmBCYXNlRXZlbnRMb29wYCBtZXRob2QKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSB0cmFuc3BvcnQgYW5kIHRyeSB0byBpbml0aWF0ZSB0aGUgdW5kZXJseWluZworY29tbXVuaWNhdGlvbiBjaGFubmVsLCBjYWxsaW5nIHlvdSBiYWNrIHdoZW4gaXQgc3VjY2VlZHMuCisKK09uY2UgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBlc3RhYmxpc2hlZCwgYSB0cmFuc3BvcnQgaXMgYWx3YXlzCitwYWlyZWQgd2l0aCBhIDpyZWY6YHByb3RvY29sIDxwcm90b2NvbD5gIGluc3RhbmNlLiAgVGhlIHByb3RvY29sIGNhbgordGhlbiBjYWxsIHRoZSB0cmFuc3BvcnQncyBtZXRob2RzIGZvciB2YXJpb3VzIHB1cnBvc2VzLgorCis6bW9kOmBhc3luY2lvYCBjdXJyZW50bHkgaW1wbGVtZW50cyB0cmFuc3BvcnRzIGZvciBUQ1AsIFVEUCwgU1NMLCBhbmQKK3N1YnByb2Nlc3MgcGlwZXMuICBUaGUgbWV0aG9kcyBhdmFpbGFibGUgb24gYSB0cmFuc3BvcnQgZGVwZW5kIG9uCit0aGUgdHJhbnNwb3J0J3Mga2luZC4KKworCitCYXNlVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogQmFzZVRyYW5zcG9ydAorCisgICBCYXNlIGNsYXNzIGZvciB0cmFuc3BvcnRzLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZShzZWxmKQorCisgICAgICBDbG9zZSB0aGUgdHJhbnNwb3J0LiAgSWYgdGhlIHRyYW5zcG9ydCBoYXMgYSBidWZmZXIgZm9yIG91dGdvaW5nCisgICAgICBkYXRhLCBidWZmZXJlZCBkYXRhIHdpbGwgYmUgZmx1c2hlZCBhc3luY2hyb25vdXNseS4gIE5vIG1vcmUgZGF0YQorICAgICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgICAgcHJvdG9jb2wncyA6bWV0aDpgY29ubmVjdGlvbl9sb3N0YCBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2l0aAorICAgICAgOmNvbnN0OmBOb25lYCBhcyBpdHMgYXJndW1lbnQuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiAgKm5hbWUqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZworICAgICAgdGhlIHBpZWNlIG9mIHRyYW5zcG9ydC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBnZXQsICpkZWZhdWx0KiBpcyB0aGUKKyAgICAgIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgaW5mb3JtYXRpb24gZG9lc24ndCBleGlzdC4KKworICAgICAgVGhpcyBtZXRob2QgYWxsb3dzIHRyYW5zcG9ydCBpbXBsZW1lbnRhdGlvbnMgdG8gZWFzaWx5IGV4cG9zZQorICAgICAgY2hhbm5lbC1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworICAgICAgKiBzb2NrZXQ6CisKKyAgICAgICAgLSBgYCdwZWVybmFtZSdgYDogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLAorICAgICAgICAgIHJlc3VsdCBvZiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRwZWVybmFtZWAgKGBgTm9uZWBgIG9uIGVycm9yKQorICAgICAgICAtIGBgJ3NvY2tldCdgYDogOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBpbnN0YW5jZQorICAgICAgICAtIGBgJ3NvY2tuYW1lJ2BgOiB0aGUgc29ja2V0J3Mgb3duIGFkZHJlc3MsCisgICAgICAgICAgcmVzdWx0IG9mIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldHNvY2tuYW1lYAorCisgICAgICAqIFNTTCBzb2NrZXQ6CisKKyAgICAgICAgLSBgYCdjb21wcmVzc2lvbidgYDogdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiZWluZyB1c2VkIGFzIGEgc3RyaW5nLAorICAgICAgICAgIG9yIGBgTm9uZWBgIGlmIHRoZSBjb25uZWN0aW9uIGlzbid0IGNvbXByZXNzZWQ7IHJlc3VsdCBvZgorICAgICAgICAgIDptZXRoOmBzc2wuU1NMU29ja2V0LmNvbXByZXNzaW9uYAorICAgICAgICAtIGBgJ2NpcGhlcidgYDogYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIKKyAgICAgICAgICBiZWluZyB1c2VkLCB0aGUgdmVyc2lvbiBvZiB0aGUgU1NMIHByb3RvY29sIHRoYXQgZGVmaW5lcyBpdHMgdXNlLCBhbmQKKyAgICAgICAgICB0aGUgbnVtYmVyIG9mIHNlY3JldCBiaXRzIGJlaW5nIHVzZWQ7IHJlc3VsdCBvZgorICAgICAgICAgIDptZXRoOmBzc2wuU1NMU29ja2V0LmNpcGhlcmAKKyAgICAgICAgLSBgYCdwZWVyY2VydCdgYDogcGVlciBjZXJ0aWZpY2F0ZTsgcmVzdWx0IG9mCisgICAgICAgICAgOm1ldGg6YHNzbC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRgCisgICAgICAgIC0gYGAnc3NsY29udGV4dCdgYDogOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UKKworICAgICAgKiBwaXBlOgorCisgICAgICAgIC0gYGAncGlwZSdgYDogcGlwZSBvYmplY3QKKworICAgICAgKiBzdWJwcm9jZXNzOgorCisgICAgICAgIC0gYGAnc3VicHJvY2VzcydgYDogOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYCBpbnN0YW5jZQorCisKK1JlYWRUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBSZWFkVHJhbnNwb3J0CisKKyAgIEludGVyZmFjZSBmb3IgcmVhZC1vbmx5IHRyYW5zcG9ydHMuCisKKyAgIC4uIG1ldGhvZDo6IHBhdXNlX3JlYWRpbmcoKQorCisgICAgICBQYXVzZSB0aGUgcmVjZWl2aW5nIGVuZCBvZiB0aGUgdHJhbnNwb3J0LiAgTm8gZGF0YSB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgdGhlIHByb3RvY29sJ3MgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIG1ldGhvZCB1bnRpbCBtZXRoOmByZXN1bWVfcmVhZGluZ2AKKyAgICAgIGlzIGNhbGxlZC4KKworICAgLi4gbWV0aG9kOjogcmVzdW1lX3JlYWRpbmcoKQorCisgICAgICBSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuICBUaGUgcHJvdG9jb2wncyA6bWV0aDpgZGF0YV9yZWNlaXZlZGAgbWV0aG9kCisgICAgICB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluIGlmIHNvbWUgZGF0YSBpcyBhdmFpbGFibGUgZm9yIHJlYWRpbmcuCisKKworV3JpdGVUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogV3JpdGVUcmFuc3BvcnQKKworICAgSW50ZXJmYWNlIGZvciB3cml0ZS1vbmx5IHRyYW5zcG9ydHMuCisKKyAgIC4uIG1ldGhvZDo6IGFib3J0KCkKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMKKyAgICAgIHRvIGNvbXBsZXRlLiAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgIFRoZSBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGV2ZW50dWFsbHkgYmUKKyAgICAgIGNhbGxlZCB3aXRoIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCisgICAuLiBtZXRob2Q6OiBjYW5fd3JpdGVfZW9mKCkKKworICAgICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgdGhlIHRyYW5zcG9ydCBzdXBwb3J0cyA6bWV0aDpgd3JpdGVfZW9mYCwKKyAgICAgIDpjb25zdDpgRmFsc2VgIGlmIG5vdC4KKworICAgLi4gbWV0aG9kOjogZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKworICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorCisgICAuLiBtZXRob2Q6OiBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPU5vbmUsIGxvdz1Ob25lKQorCisgICAgICBTZXQgdGhlICpoaWdoKi0gYW5kICpsb3cqLXdhdGVyIGxpbWl0cyBmb3Igd3JpdGUgZmxvdyBjb250cm9sLgorCisgICAgICBUaGVzZSB0d28gdmFsdWVzIGNvbnRyb2wgd2hlbiBjYWxsIHRoZSBwcm90b2NvbCdzCisgICAgICA6bWV0aDpgcGF1c2Vfd3JpdGluZ2AgYW5kIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgbWV0aG9kcyBhcmUgY2FsbGVkLgorICAgICAgSWYgc3BlY2lmaWVkLCB0aGUgbG93LXdhdGVyIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgaGlnaC13YXRlciBsaW1pdC4gIE5laXRoZXIgKmhpZ2gqIG5vciAqbG93KiBjYW4gYmUgbmVnYXRpdmUuCisKKyAgICAgIFRoZSBkZWZhdWx0cyBhcmUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBJZiBvbmx5IHRoZQorICAgICAgaGlnaC13YXRlciBsaW1pdCBpcyBnaXZlbiwgdGhlIGxvdy13YXRlciBsaW1pdCBkZWZhdWx0cyB0byBhCisgICAgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyAqaGlnaCogdG8gemVybyBmb3JjZXMgKmxvdyogdG8gemVybyBhcworICAgICAgd2VsbCwgYW5kIGNhdXNlcyA6bWV0aDpgcGF1c2Vfd3JpdGluZ2AgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZQorICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyAqbG93KiB0byB6ZXJvIGNhdXNlcworICAgICAgOm1ldGg6YHJlc3VtZV93cml0aW5nYCB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICBVc2Ugb2YgemVybyBmb3IgZWl0aGVyIGxpbWl0IGlzIGdlbmVyYWxseSBzdWItb3B0aW1hbCBhcyBpdAorICAgICAgcmVkdWNlcyBvcHBvcnR1bml0aWVzIGZvciBkb2luZyBJL08gYW5kIGNvbXB1dGF0aW9uCisgICAgICBjb25jdXJyZW50bHkuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlKGRhdGEpCisKKyAgICAgIFdyaXRlIHNvbWUgKmRhdGEqIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgICAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorCisgICAuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGxpc3Rfb2ZfZGF0YSkKKworICAgICAgV3JpdGUgYSBsaXN0IChvciBhbnkgaXRlcmFibGUpIG9mIGRhdGEgYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydC4KKyAgICAgIFRoaXMgaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gY2FsbGluZyA6bWV0aDpgd3JpdGVgIG9uIGVhY2gKKyAgICAgIGVsZW1lbnQgeWllbGRlZCBieSB0aGUgaXRlcmFibGUsIGJ1dCBtYXkgYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworICAgLi4gbWV0aG9kOjogd3JpdGVfZW9mKCkKKworICAgICAgQ2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgdHJhbnNwb3J0IGFmdGVyIGZsdXNoaW5nIGJ1ZmZlcmVkIGRhdGEuCisgICAgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKworICAgICAgVGhpcyBtZXRob2QgY2FuIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSB0cmFuc3BvcnQKKyAgICAgIChlLmcuIFNTTCkgZG9lc24ndCBzdXBwb3J0IGhhbGYtY2xvc2VzLgorCisKK0RhdGFncmFtVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgYWRkcj1Ob25lKQorCisgICBTZW5kIHRoZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHJlbW90ZSBwZWVyIGdpdmVuIGJ5ICphZGRyKiAoYQorICAgdHJhbnNwb3J0LWRlcGVuZGVudCB0YXJnZXQgYWRkcmVzcykuICBJZiAqYWRkciogaXMgOmNvbnN0OmBOb25lYCwgdGhlCisgICBkYXRhIGlzIHNlbnQgdG8gdGhlIHRhcmdldCBhZGRyZXNzIGdpdmVuIG9uIHRyYW5zcG9ydCBjcmVhdGlvbi4KKworICAgVGhpcyBtZXRob2QgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgdG8gYmUgc2VudCBvdXQgYXN5bmNocm9ub3VzbHkuCisKKy4uIG1ldGhvZDo6IERhdGFncmFtVHJhbnNwb3J0LmFib3J0KCkKKworICAgQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMKKyAgIHRvIGNvbXBsZXRlLiAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgIFRoZSBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGV2ZW50dWFsbHkgYmUKKyAgIGNhbGxlZCB3aXRoIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCisKK0Jhc2VTdWJwcm9jZXNzVHJhbnNwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0CisKKyAgIC4uIG1ldGhvZDo6IGdldF9waWQoKQorCisgICAgICBSZXR1cm4gdGhlIHN1YnByb2Nlc3MgcHJvY2VzcyBpZCBhcyBhbiBpbnRlZ2VyLgorCisgICAuLiBtZXRob2Q6OiBnZXRfcGlwZV90cmFuc3BvcnQoZmQpCisKKyAgICAgIFJldHVybiB0aGUgdHJhbnNwb3J0IGZvciB0aGUgY29tbXVuaWNhdGlvbiBwaXBlIGNvcnJlc3BvbmRvbmcgdG8gdGhlCisgICAgICBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciAqZmQqLiAgVGhlIHJldHVybiB2YWx1ZSBjYW4gYmUgYSByZWFkYWJsZSBvcgorICAgICAgd3JpdGFibGUgc3RyZWFtaW5nIHRyYW5zcG9ydCwgZGVwZW5kaW5nIG9uIHRoZSAqZmQqLiAgSWYgKmZkKiBkb2Vzbid0CisgICAgICBjb3JyZXNwb25kIHRvIGEgcGlwZSBiZWxvbmdpbmcgdG8gdGhpcyB0cmFuc3BvcnQsIDpjb25zdDpgTm9uZWAgaXMKKyAgICAgIHJldHVybmVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfcmV0dXJuY29kZSgpCisKKyAgICAgIFJldHVybiB0aGUgc3VicHJvY2VzcyByZXR1cm5jb2RlIGFzIGFuIGludGVnZXIgb3IgOmNvbnN0OmBOb25lYAorICAgICAgaWYgaXQgaGFzbid0IHJldHVybmVkLCBzaW1pbGFybHkgdG8gdGhlCisgICAgICA6YXR0cjpgc3VicHJvY2Vzcy5Qb3Blbi5yZXR1cm5jb2RlYCBhdHRyaWJ1dGUuCisKKyAgIC4uIG1ldGhvZDo6IGtpbGwoc2VsZikKKworICAgICAgS2lsbCB0aGUgc3VicHJvY2VzcywgYXMgaW4gOm1ldGg6YHN1YnByb2Nlc3MuUG9wZW4ua2lsbGAKKworICAgICAgT24gUE9TSVggc3lzdGVtcywgdGhlIGZ1bmN0aW9uIHNlbmRzIFNJR0tJTEwgdG8gdGhlIHN1YnByb2Nlc3MuCisgICAgICBPbiBXaW5kb3dzLCB0aGlzIG1ldGhvZCBpcyBhbiBhbGlhcyBmb3IgOm1ldGg6YHRlcm1pbmF0ZWAuCisKKyAgIC4uIG1ldGhvZDo6IHNlbmRfc2lnbmFsKHNpZ25hbCkKKworICAgICAgU2VuZCB0aGUgKnNpZ25hbCogbnVtYmVyIHRvIHRoZSBzdWJwcm9jZXNzLCBhcyBpbgorICAgICAgOm1ldGg6YHN1YnByb2Nlc3MuUG9wZW4uc2VuZF9zaWduYWxgLgorCisgICAuLiBtZXRob2Q6OiB0ZXJtaW5hdGUoKQorCisgICAgICBBc2sgdGhlIHN1YnByb2Nlc3MgdG8gc3RvcCwgYXMgaW4gOm1ldGg6YHN1YnByb2Nlc3MuUG9wZW4udGVybWluYXRlYC4KKyAgICAgIFRoaXMgbWV0aG9kIGlzIGFuIGFsaWFzIGZvciB0aGUgOm1ldGg6YGNsb3NlYCBtZXRob2QuCisKKyAgICAgIE9uIFBPU0lYIHN5c3RlbXMsIHRoaXMgbWV0aG9kIHNlbmRzIFNJR1RFUk0gdG8gdGhlIHN1YnByb2Nlc3MuCisgICAgICBPbiBXaW5kb3dzLCB0aGUgV2luZG93cyBBUEkgZnVuY3Rpb24gVGVybWluYXRlUHJvY2VzcygpIGlzIGNhbGxlZCB0bworICAgICAgc3RvcCB0aGUgc3VicHJvY2Vzcy4KKworCitTdHJlYW1Xcml0ZXIKKy0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApCisKKyAgIFdyYXBzIGEgVHJhbnNwb3J0LgorCisgICBUaGlzIGV4cG9zZXMgOm1ldGg6YHdyaXRlYCwgOm1ldGg6YHdyaXRlbGluZXNgLCA6bWV0aDpgY2FuX3dyaXRlX2VvZigpYCwKKyAgIDptZXRoOmB3cml0ZV9lb2ZgLCA6bWV0aDpgZ2V0X2V4dHJhX2luZm9gIGFuZCA6bWV0aDpgY2xvc2VgLiAgSXQgYWRkcworICAgOm1ldGg6YGRyYWluYCB3aGljaCByZXR1cm5zIGFuIG9wdGlvbmFsIDpjbGFzczpgRnV0dXJlYCBvbiB3aGljaCB5b3UgY2FuCisgICB3YWl0IGZvciBmbG93IGNvbnRyb2wuICBJdCBhbHNvIGFkZHMgYSB0cmFuc3BvcnQgYXR0cmlidXRlIHdoaWNoIHJlZmVyZW5jZXMKKyAgIHRoZSA6Y2xhc3M6YFRyYW5zcG9ydGAgZGlyZWN0bHkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYW5zcG9ydAorCisgICAgICBUcmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydDogc2VlIDptZXRoOmBCYXNlVHJhbnNwb3J0LmNsb3NlYC4KKworICAgLi4gbWV0aG9kOjogZHJhaW4oKQorCisgICAgICBUaGlzIG1ldGhvZCBoYXMgYW4gdW51c3VhbCByZXR1cm4gdmFsdWUuCisKKyAgICAgIFRoZSBpbnRlbmRlZCB1c2UgaXMgdG8gd3JpdGU6OgorCisgICAgICAgICAgdy53cml0ZShkYXRhKQorICAgICAgICAgIHlpZWxkIGZyb20gdy5kcmFpbigpCisKKyAgICAgIFdoZW4gdGhlcmUncyBub3RoaW5nIHRvIHdhaXQgZm9yLCA6bWV0aDpgZHJhaW4oKWAgcmV0dXJucyBgYCgpYGAsIGFuZCB0aGUKKyAgICAgIHlpZWxkLWZyb20gY29udGludWVzIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUgdHJhbnNwb3J0IGJ1ZmZlciBpcyBmdWxsICh0aGUKKyAgICAgIHByb3RvY29sIGlzIHBhdXNlZCksIDptZXRoOmBkcmFpbmAgY3JlYXRlcyBhbmQgcmV0dXJucyBhCisgICAgICA6Y2xhc3M6YEZ1dHVyZWAgYW5kIHRoZSB5aWVsZC1mcm9tIHdpbGwgYmxvY2sgdW50aWwKKyAgICAgIHRoYXQgRnV0dXJlIGlzIGNvbXBsZXRlZCwgd2hpY2ggd2lsbCBoYXBwZW4gd2hlbiB0aGUgYnVmZmVyIGlzCisgICAgICAocGFydGlhbGx5KSBkcmFpbmVkIGFuZCB0aGUgcHJvdG9jb2wgaXMgcmVzdW1lZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uOiBzZWUKKyAgICAgIDptZXRoOmBCYXNlVHJhbnNwb3J0LmdldF9leHRyYV9pbmZvYC4KKworICAgLi4gbWV0aG9kOjogd3JpdGUoZGF0YSkKKworICAgICAgV3JpdGUgc29tZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydDogc2VlCisgICAgICA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVgLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGRhdGEpCisKKyAgICAgIFdyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQ6CisgICAgICBzZWUgOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlbGluZXNgLgorCisgICAuLiBtZXRob2Q6OiBjYW5fd3JpdGVfZW9mKCkKKworICAgICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgdGhlIHRyYW5zcG9ydCBzdXBwb3J0cyA6bWV0aDpgd3JpdGVfZW9mYCwKKyAgICAgIDpjb25zdDpgRmFsc2VgIGlmIG5vdC4gU2VlIDptZXRoOmBXcml0ZVRyYW5zcG9ydC5jYW5fd3JpdGVfZW9mYC4KKworICAgLi4gbWV0aG9kOjogd3JpdGVfZW9mKCkKKworICAgICAgQ2xvc2UgdGhlIHdyaXRlIGVuZCBvZiB0aGUgdHJhbnNwb3J0IGFmdGVyIGZsdXNoaW5nIGJ1ZmZlcmVkIGRhdGE6CisgICAgICBzZWUgOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlX2VvZmAuCisKKworU3RyZWFtUmVhZGVyCistLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTdHJlYW1SZWFkZXIobGltaXQ9X0RFRkFVTFRfTElNSVQsIGxvb3A9Tm9uZSkKKworICAgLi4gbWV0aG9kOjogZXhjZXB0aW9uKCkKKworICAgICAgR2V0IHRoZSBleGNlcHRpb24uCisKKyAgIC4uIG1ldGhvZDo6IGZlZWRfZW9mKCkKKworICAgICAgWFhYCisKKyAgIC4uIG1ldGhvZDo6IGZlZWRfZGF0YShkYXRhKQorCisgICAgICBYWFgKKworICAgLi4gbWV0aG9kOjogc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgIFNldCB0aGUgZXhjZXB0aW9uLgorCisgICAuLiBtZXRob2Q6OiBzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCkKKworICAgICAgU2V0IHRoZSB0cmFuc3BvcnQuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKworICAgICAgWFhYCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiByZWFkbGluZSgpCisKKyAgICAgIFhYWAorCisgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogcmVhZGV4YWN0bHkobikKKworICAgICAgWFhYCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisKKworLi4gX3Byb3RvY29sOgorCitQcm90b2NvbHMKKz09PT09PT09PQorCis6bW9kOmBhc3luY2lvYCBwcm92aWRlcyBiYXNlIGNsYXNzZXMgdGhhdCB5b3UgY2FuIHN1YmNsYXNzIHRvIGltcGxlbWVudAoreW91ciBuZXR3b3JrIHByb3RvY29scy4gIFRob3NlIGNsYXNzZXMgYXJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aAorOnJlZjpgdHJhbnNwb3J0cyA8dHJhbnNwb3J0PmAgKHNlZSBiZWxvdyk6IHRoZSBwcm90b2NvbCBwYXJzZXMgaW5jb21pbmcKK2RhdGEgYW5kIGFza3MgZm9yIHRoZSB3cml0aW5nIG9mIG91dGdvaW5nIGRhdGEsIHdoaWxlIHRoZSB0cmFuc3BvcnQgaXMKK3Jlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIEkvTyBhbmQgYnVmZmVyaW5nLgorCitXaGVuIHN1YmNsYXNzaW5nIGEgcHJvdG9jb2wgY2xhc3MsIGl0IGlzIHJlY29tbWVuZGVkIHlvdSBvdmVycmlkZSBjZXJ0YWluCittZXRob2RzLiAgVGhvc2UgbWV0aG9kcyBhcmUgY2FsbGJhY2tzOiB0aGV5IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSB0cmFuc3BvcnQKK29uIGNlcnRhaW4gZXZlbnRzIChmb3IgZXhhbXBsZSB3aGVuIHNvbWUgZGF0YSBpcyByZWNlaXZlZCk7IHlvdSBzaG91bGRuJ3QKK2NhbGwgdGhlbSB5b3Vyc2VsZiwgdW5sZXNzIHlvdSBhcmUgaW1wbGVtZW50aW5nIGEgdHJhbnNwb3J0LgorCisuLiBub3RlOjoKKyAgIEFsbCBjYWxsYmFja3MgaGF2ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucywgd2hpY2ggYXJlIGVtcHR5LiAgVGhlcmVmb3JlLAorICAgeW91IG9ubHkgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrcyBmb3IgdGhlIGV2ZW50cyBpbiB3aGljaCB5b3UKKyAgIGFyZSBpbnRlcmVzdGVkLgorCisKK1Byb3RvY29sIGNsYXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBQcm90b2NvbAorCisgICBUaGUgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIHN0cmVhbWluZyBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBUQ1AgYW5kIFNTTCB0cmFuc3BvcnRzKS4KKworLi4gY2xhc3M6OiBEYXRhZ3JhbVByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgZGF0YWdyYW0gcHJvdG9jb2xzIChmb3IgdXNlIHdpdGgKKyAgIGUuZy4gVURQIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IFN1YnByb2Nlc3NQcm90b2NvbAorCisgICBUaGUgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIHByb3RvY29scyBjb21tdW5pY2F0aW5nIHdpdGggY2hpbGQKKyAgIHByb2Nlc3NlcyAodGhyb3VnaCBhIHNldCBvZiB1bmlkaXJlY3Rpb25hbCBwaXBlcykuCisKKworQ29ubmVjdGlvbiBjYWxsYmFja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGFuZAorOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisKKyAgIENhbGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBtYWRlLgorCisgICBUaGUgKnRyYW5zcG9ydCogYXJndW1lbnQgaXMgdGhlIHRyYW5zcG9ydCByZXByZXNlbnRpbmcgdGhlCisgICBjb25uZWN0aW9uLiAgWW91IGFyZSByZXNwb25zaWJsZSBmb3Igc3RvcmluZyBpdCBzb21ld2hlcmUKKyAgIChlLmcuIGFzIGFuIGF0dHJpYnV0ZSkgaWYgeW91IG5lZWQgdG8uCisKKy4uIG1ldGhvZDo6IEJhc2VQcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorCisgICBDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgVGhlIGFyZ3VtZW50IGlzIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIDpjb25zdDpgTm9uZWAuCisgICBUaGUgbGF0dGVyIG1lYW5zIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQsIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgYWJvcnRlZCBvciBjbG9zZWQgYnkgdGhpcyBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLgorCis6bWV0aDpgY29ubmVjdGlvbl9tYWRlYCBhbmQgOm1ldGg6YGNvbm5lY3Rpb25fbG9zdGAgYXJlIGNhbGxlZCBleGFjdGx5IG9uY2UKK3BlciBzdWNjZXNzZnVsIGNvbm5lY3Rpb24uICBBbGwgb3RoZXIgY2FsbGJhY2tzIHdpbGwgYmUgY2FsbGVkIGJldHdlZW4gdGhvc2UKK3R3byBtZXRob2RzLCB3aGljaCBhbGxvd3MgZm9yIGVhc2llciByZXNvdXJjZSBtYW5hZ2VtZW50IGluIHlvdXIgcHJvdG9jb2wKK2ltcGxlbWVudGF0aW9uLgorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9ubHkgb24gOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgCitpbnN0YW5jZXM6CisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQoZmQsIGRhdGEpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIHdyaXRlcyBkYXRhIGludG8gaXRzIHN0ZG91dCBvciBzdGRlcnIgcGlwZS4KKyAgICpmZCogaXMgdGhlIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwaXBlLiAgKmRhdGEqIGlzIGEgbm9uLWVtcHR5CisgICBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YS4KKworLi4gbWV0aG9kOjogU3VicHJvY2Vzc1Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0KGZkLCBleGMpCisKKyAgIENhbGxlZCB3aGVuIG9uZSBvZiB0aGUgcGlwZXMgY29tbXVuaWNhdGluZyB3aXRoIHRoZSBjaGlsZCBwcm9jZXNzCisgICBpcyBjbG9zZWQuICAqZmQqIGlzIHRoZSBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciB0aGF0IHdhcyBjbG9zZWQuCisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5wcm9jZXNzX2V4aXRlZCgpCisKKyAgIENhbGxlZCB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBleGl0ZWQuCisKKworU3RyZWFtaW5nIHByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogUHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorCisgICBDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuICAqZGF0YSogaXMgYSBub24tZW1wdHkgYnl0ZXMgb2JqZWN0CisgICBjb250YWluaW5nIHRoZSBpbmNvbWluZyBkYXRhLgorCisgICAuLiBub3RlOjoKKyAgICAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYnVmZmVyZWQsIGNodW5rZWQgb3IgcmVhc3NlbWJsZWQgZGVwZW5kcyBvbgorICAgICAgdGhlIHRyYW5zcG9ydC4gIEluIGdlbmVyYWwsIHlvdSBzaG91bGRuJ3QgcmVseSBvbiBzcGVjaWZpYyBzZW1hbnRpY3MKKyAgICAgIGFuZCBpbnN0ZWFkIG1ha2UgeW91ciBwYXJzaW5nIGdlbmVyaWMgYW5kIGZsZXhpYmxlIGVub3VnaC4gIEhvd2V2ZXIsCisgICAgICBkYXRhIGlzIGFsd2F5cyByZWNlaXZlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKworLi4gbWV0aG9kOjogUHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKworICAgQ2FsbHMgd2hlbiB0aGUgb3RoZXIgZW5kIHNpZ25hbHMgaXQgd29uJ3Qgc2VuZCBhbnkgbW9yZSBkYXRhCisgICAoZm9yIGV4YW1wbGUgYnkgY2FsbGluZyA6bWV0aDpgd3JpdGVfZW9mYCwgaWYgdGhlIG90aGVyIGVuZCBhbHNvIHVzZXMKKyAgIGFzeW5jaW8pLgorCisgICBUaGlzIG1ldGhvZCBtYXkgcmV0dXJuIGEgZmFsc2UgdmFsdWUgKGluY2x1ZGluZyBOb25lKSwgaW4gd2hpY2ggY2FzZQorICAgdGhlIHRyYW5zcG9ydCB3aWxsIGNsb3NlIGl0c2VsZi4gIENvbnZlcnNlbHksIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgYQorICAgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4gIFNpbmNlIHRoZQorICAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIE5vbmUsIGl0IGltcGxpY2l0bHkgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgorCisgICAuLiBub3RlOjoKKyAgICAgIFNvbWUgdHJhbnNwb3J0cyBzdWNoIGFzIFNTTCBkb24ndCBzdXBwb3J0IGhhbGYtY2xvc2VkIGNvbm5lY3Rpb25zLAorICAgICAgaW4gd2hpY2ggY2FzZSByZXR1cm5pbmcgdHJ1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgbm90IHByZXZlbnQgY2xvc2luZworICAgICAgdGhlIGNvbm5lY3Rpb24uCisKKzptZXRoOmBkYXRhX3JlY2VpdmVkYCBjYW4gYmUgY2FsbGVkIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgdGltZXMgZHVyaW5nCithIGNvbm5lY3Rpb24uICBIb3dldmVyLCA6bWV0aDpgZW9mX3JlY2VpdmVkYCBpcyBjYWxsZWQgYXQgbW9zdCBvbmNlCithbmQsIGlmIGNhbGxlZCwgOm1ldGg6YGRhdGFfcmVjZWl2ZWRgIHdvbid0IGJlIGNhbGxlZCBhZnRlciBpdC4KKworRGF0YWdyYW0gcHJvdG9jb2xzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBvbiA6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgIGluc3RhbmNlcy4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1Qcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorCisgICBDYWxsZWQgd2hlbiBhIGRhdGFncmFtIGlzIHJlY2VpdmVkLiAgKmRhdGEqIGlzIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcKKyAgIHRoZSBpbmNvbWluZyBkYXRhLiAgKmFkZHIqIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIHNlbmRpbmcgdGhlIGRhdGE7CisgICB0aGUgZXhhY3QgZm9ybWF0IGRlcGVuZHMgb24gdGhlIHRyYW5zcG9ydC4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1Qcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisKKyAgIENhbGxlZCB3aGVuIGEgcHJldmlvdXMgc2VuZCBvciByZWNlaXZlIG9wZXJhdGlvbiByYWlzZXMgYW4KKyAgIDpjbGFzczpgT1NFcnJvcmAuICAqZXhjKiBpcyB0aGUgOmNsYXNzOmBPU0Vycm9yYCBpbnN0YW5jZS4KKworICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIHJhcmUgY29uZGl0aW9ucywgd2hlbiB0aGUgdHJhbnNwb3J0IChlLmcuIFVEUCkKKyAgIGRldGVjdHMgdGhhdCBhIGRhdGFncmFtIGNvdWxkbid0IGJlIGRlbGl2ZXJlZCB0byBpdHMgcmVjaXBpZW50LgorICAgSW4gbWFueSBjb25kaXRpb25zIHRob3VnaCwgdW5kZWxpdmVyYWJsZSBkYXRhZ3JhbXMgd2lsbCBiZSBzaWxlbnRseQorICAgZHJvcHBlZC4KKworCitGbG93IGNvbnRyb2wgY2FsbGJhY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgIGFuZAorOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGdvZXMgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrLgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKworOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIGNhbGxzIGFyZSBwYWlyZWQgLS0KKzptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyCit0aGUgaGlnaC13YXRlciBtYXJrIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUKK2V2ZW4gbW9yZSksIGFuZCBldmVudHVhbGx5IDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKK2J1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisuLiBub3RlOjoKKyAgIElmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgIENvbnZlcnNlbHksIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgbWFyayBpcyB6ZXJvLgorCisKK1NlcnZlcgorLS0tLS0tCisKKy4uIGNsYXNzOjogQWJzdHJhY3RTZXJ2ZXIKKworICAgQWJzdHJhY3Qgc2VydmVyIHJldHVybmVkIGJ5IDpmdW5jOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIFN0b3Agc2VydmluZy4gIFRoaXMgbGVhdmVzIGV4aXN0aW5nIGNvbm5lY3Rpb25zIG9wZW4uCisKKyAgIC4uIG1ldGhvZDo6IHdhaXRfY2xvc2VkKCkKKworICAgICAgQ29yb3V0aW5lIHRvIHdhaXQgdW50aWwgc2VydmljZSBpcyBjbG9zZWQuCisKKworTmV0d29yayBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09CisKKy4uIGZ1bmN0aW9uOjogb3Blbl9jb25uZWN0aW9uKGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLCBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpCisKKyAgIEEgd3JhcHBlciBmb3IgY3JlYXRlX2Nvbm5lY3Rpb24oKSByZXR1cm5pbmcgYSAocmVhZGVyLCB3cml0ZXIpIHBhaXIuCisKKyAgIFRoZSByZWFkZXIgcmV0dXJuZWQgaXMgYSBTdHJlYW1SZWFkZXIgaW5zdGFuY2U7IHRoZSB3cml0ZXIgaXMgYQorICAgOmNsYXNzOmBUcmFuc3BvcnRgLgorCisgICBUaGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIGV4Y2VwdCAqcHJvdG9jb2xfZmFjdG9yeSo7IG1vc3QKKyAgIGNvbW1vbiBhcmUgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LCB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKKyAgIGZvbGxvd2luZy4KKworICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmxvb3AqICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgIGluc3RhbmNlIHRvIHVzZSkgYW5kICpsaW1pdCogKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgIFN0cmVhbVJlYWRlcikuCisKKyAgIChJZiB5b3Ugd2FudCB0byBjdXN0b21pemUgdGhlIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBhbmQvb3IKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyUHJvdG9jb2xgIGNsYXNzZXMsIGp1c3QgY29weSB0aGUgY29kZSAtLSB0aGVyZSdzIHJlYWxseQorICAgbm90aGluZyBzcGVjaWFsIGhlcmUgZXhjZXB0IHNvbWUgY29udmVuaWVuY2UuKQorCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IHN0YXJ0X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKQorCisgICBTdGFydCBhIHNvY2tldCBzZXJ2ZXIsIGNhbGwgYmFjayBmb3IgZWFjaCBjbGllbnQgY29ubmVjdGVkLgorCisgICBUaGUgZmlyc3QgcGFyYW1ldGVyLCAqY2xpZW50X2Nvbm5lY3RlZF9jYiosIHRha2VzIHR3byBwYXJhbWV0ZXJzOgorICAgKmNsaWVudF9yZWFkZXIqLCAqY2xpZW50X3dyaXRlciouICAqY2xpZW50X3JlYWRlciogaXMgYQorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIG9iamVjdCwgd2hpbGUgKmNsaWVudF93cml0ZXIqIGlzIGEKKyAgIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBvYmplY3QuICBUaGlzIHBhcmFtZXRlciBjYW4gZWl0aGVyIGJlIGEgcGxhaW4gY2FsbGJhY2sKKyAgIGZ1bmN0aW9uIG9yIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YDsgaWYgaXQgaXMgYSBjb3JvdXRpbmUsIGl0IHdpbGwgYmUKKyAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gYSA6Y2xhc3M6YFRhc2tgLgorCisgICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKWAgZXhjZXB0ICpwcm90b2NvbF9mYWN0b3J5KjsgbW9zdAorICAgY29tbW9uIGFyZSBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgZm9sbG93aW5nLiAgVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgc2FtZSBhcworICAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKWAuCisKKyAgIEFkZGl0aW9uYWwgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpsb29wKiAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICBpbnN0YW5jZSB0byB1c2UpIGFuZCAqbGltaXQqICh0byBzZXQgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmApLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKClgLCBpLmUuCisgICBhIDpjbGFzczpgQWJzdHJhY3RTZXJ2ZXJgIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisKK1Byb3RvY29sIGV4YW1wbGU6IFRDUCBlY2hvIHNlcnZlciBhbmQgY2xpZW50Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFY2hvIHNlcnZlcgorLS0tLS0tLS0tLS0KKworVENQIGVjaG8gc2VydmVyIGV4YW1wbGUsIHNlbmQgYmFjayByZWNlaXZlZCBkYXRhIGFuZCBjbG9zZSB0aGUgY29ubmVjdGlvbjo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgY2xhc3MgRWNob1NlcnZlcihhc3luY2lvLlByb3RvY29sKToKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgcGVlcm5hbWUgPSB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJykKKyAgICAgICAgICAgIHByaW50KCdjb25uZWN0aW9uIGZyb20ge30nLmZvcm1hdChwZWVybmFtZSkpCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorCisgICAgICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcHJpbnQoJ2RhdGEgcmVjZWl2ZWQ6IHt9Jy5mb3JtYXQoZGF0YS5kZWNvZGUoKSkpCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgICAgICAjIGNsb3NlIHRoZSBzb2NrZXQKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICB0YXNrID0gbG9vcC5jcmVhdGVfc2VydmVyKEVjaG9TZXJ2ZXIsICcxMjcuMC4wLjEnLCA4ODg4KQorICAgIHNlcnZlciA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgcHJpbnQoJ3NlcnZpbmcgb24ge30nLmZvcm1hdChzZXJ2ZXIuc29ja2V0c1swXS5nZXRzb2NrbmFtZSgpKSkKKworICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwcmludCgiZXhpdCIpCisgICAgZmluYWxseToKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKzptZXRoOmBUcmFuc3BvcnQuY2xvc2VgIGNhbiBiZSBjYWxsZWQgaW1tZWRpYXRseSBhZnRlcgorOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlYCBldmVuIGlmIGRhdGEgYXJlIG5vdCBzZW50IHlldCBvbiB0aGUgc29ja2V0OiBib3RoCittZXRob2RzIGFyZSBhc3luY2hyb25vdXMuIGBgeWllbGQgZnJvbWBgIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGVzZSB0cmFuc3BvcnQKK21ldGhvZHMgZG9uJ3QgcmV0dXJuIGNvcm91dGluZXMuCisKKworRWNobyBjbGllbnQKKy0tLS0tLS0tLS0tCisKK1RDUCBlY2hvIGNsaWVudCBleGFtcGxlLCBzZW5kIGRhdGEgYW5kIHdhaXQgdW50aWwgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvQ2xpZW50KGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICBtZXNzYWdlID0gJ1RoaXMgaXMgdGhlIG1lc3NhZ2UuIEl0IHdpbGwgYmUgZWNob2VkLicKKworICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICB0cmFuc3BvcnQud3JpdGUoc2VsZi5tZXNzYWdlLmVuY29kZSgpKQorICAgICAgICAgICAgcHJpbnQoJ2RhdGEgc2VudDoge30nLmZvcm1hdChzZWxmLm1lc3NhZ2UpKQorCisgICAgICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcHJpbnQoJ2RhdGEgcmVjZWl2ZWQ6IHt9Jy5mb3JtYXQoZGF0YS5kZWNvZGUoKSkpCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAgICAgcHJpbnQoJ3NlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24nKQorICAgICAgICAgICAgYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIHRhc2sgPSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKEVjaG9DbGllbnQsICcxMjcuMC4wLjEnLCA4ODg4KQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZDJkZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0CkBAIC0wLDAgKzEsMzQxIEBACisuLiBfc3luYzoKKworU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xvY2tzCistLS0tLQorCisuLiBjbGFzczo6IExvY2soXCosIGxvb3A9Tm9uZSkKKworICAgUHJpbWl0aXZlIGxvY2sgb2JqZWN0cy4KKworICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQgYnkgYQorICAgcGFydGljdWxhciBjb3JvdXRpbmUgd2hlbiBsb2NrZWQuICBBIHByaW1pdGl2ZSBsb2NrIGlzIGluIG9uZSBvZiB0d28gc3RhdGVzLAorICAgJ2xvY2tlZCcgb3IgJ3VubG9ja2VkJy4KKworICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsIDptZXRoOmBhY3F1aXJlYAorICAgYW5kIDptZXRoOmByZWxlYXNlYC4gIFdoZW4gdGhlIHN0YXRlIGlzIHVubG9ja2VkLCBhY3F1aXJlKCkgY2hhbmdlcyB0aGUgc3RhdGUgdG8KKyAgIGxvY2tlZCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIFdoZW4gdGhlIHN0YXRlIGlzIGxvY2tlZCwgYWNxdWlyZSgpIGJsb2NrcworICAgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbiBhbm90aGVyIGNvcm91dGluZSBjaGFuZ2VzIGl0IHRvIHVubG9ja2VkLCB0aGVuCisgICB0aGUgYWNxdWlyZSgpIGNhbGwgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kCisgICBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhlIGxvY2tlZCBzdGF0ZTsgaXQgY2hhbmdlcyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQKKyAgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYW4gdW5sb2NrZWQgbG9jaywKKyAgIGEgOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvciB0aGUgc3RhdGUKKyAgIHRvIHR1cm4gdG8gdW5sb2NrZWQsIG9ubHkgb25lIGNvcm91dGluZSBwcm9jZWVkcyB3aGVuIGEgcmVsZWFzZSgpIGNhbGwKKyAgIHJlc2V0cyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQ7IGZpcnN0IGNvcm91dGluZSB3aGljaCBpcyBibG9ja2VkIGluIGFjcXVpcmUoKQorICAgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICA6bWV0aDpgYWNxdWlyZWAgaXMgYSBjb3JvdXRpbmUgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBgYHlpZWxkIGZyb21gYC4KKworICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICBgYCh5aWVsZCBmcm9tIGxvY2spYGAKKyAgIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uLgorCisgICBVc2FnZTo6CisKKyAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgLi4uCisgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgdHJ5OgorICAgICAgICAgICAuLi4KKyAgICAgICBmaW5hbGx5OgorICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICBDb250ZXh0IG1hbmFnZXIgdXNhZ2U6OgorCisgICAgICAgbG9jayA9IExvY2soKQorICAgICAgIC4uLgorICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAuLi4KKworICAgTG9jayBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIGxvY2tpbmcgc3RhdGU6OgorCisgICAgICAgaWYgbm90IGxvY2subG9ja2VkKCk6CisgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgZWxzZToKKyAgICAgICAgICAjIGxvY2sgaXMgYWNxdWlyZWQKKyAgICAgICAgICAgLi4uCisKKyAgIC4uIG1ldGhvZDo6IGxvY2tlZCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiBsb2NrIGlzIGFjcXVpcmVkLgorCisgICAuLiBtZXRob2Q6OiBhY3F1aXJlKCkKKworICAgICAgQWNxdWlyZSBhIGxvY2suCisKKyAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvIGxvY2tlZCBhbmQKKyAgICAgIHJldHVybnMgYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2suCisKKyAgICAgIFdoZW4gdGhlIGxvY2sgaXMgbG9ja2VkLCByZXNldCBpdCB0byB1bmxvY2tlZCwgYW5kIHJldHVybi4gIElmIGFueSBvdGhlcgorICAgICAgY29yb3V0aW5lcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZWNvbWUgdW5sb2NrZWQsIGFsbG93CisgICAgICBleGFjdGx5IG9uZSBvZiB0aGVtIHRvIHByb2NlZWQuCisKKyAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisKKworLi4gY2xhc3M6OiBFdmVudChcKiwgbG9vcD1Ob25lKQorCisgICBBbiBFdmVudCBpbXBsZW1lbnRhdGlvbiwgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8gOmNsYXNzOmB0aHJlYWRpbmcuRXZlbnRgLgorCisgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0IHRvCisgICB0cnVlIHdpdGggdGhlIDptZXRoOmBzZXRgIG1ldGhvZCBhbmQgcmVzZXQgdG8gZmFsc2Ugd2l0aCB0aGUgOm1ldGg6YGNsZWFyYAorICAgbWV0aG9kLiAgVGhlIDptZXRoOmB3YWl0YCBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBmbGFnIGlzIHRydWUuIFRoZSBmbGFnIGlzCisgICBpbml0aWFsbHkgZmFsc2UuCisKKyAgIC4uIG1ldGhvZDo6IGNsZWFyKCkKKworICAgICAgUmVzZXQgdGhlIGludGVybmFsIGZsYWcgdG8gZmFsc2UuIFN1YnNlcXVlbnRseSwgY29yb3V0aW5lcyBjYWxsaW5nCisgICAgICA6bWV0aDpgd2FpdGAgd2lsbCBibG9jayB1bnRpbCA6bWV0aDpgc2V0YCBpcyBjYWxsZWQgdG8gc2V0IHRoZSBpbnRlcm5hbAorICAgICAgZmxhZyB0byB0cnVlIGFnYWluLgorCisgICAuLiBtZXRob2Q6OiBpc19zZXQoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgYW5kIG9ubHkgaWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgLi4gbWV0aG9kOjogc2V0KCkKKworICAgICAgU2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUuIEFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIGl0IHRvIGJlY29tZQorICAgICAgdHJ1ZSBhcmUgYXdha2VuZWQuIENvcm91dGluZSB0aGF0IGNhbGwgOm1ldGg6YHdhaXRgIG9uY2UgdGhlIGZsYWcgaXMgdHJ1ZQorICAgICAgd2lsbCBub3QgYmxvY2sgYXQgYWxsLgorCisgICAuLiBtZXRob2Q6OiB3YWl0KCkKKworICAgICAgQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgICAgSWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZSBvbiBlbnRyeSwgcmV0dXJuIGBgVHJ1ZWBgIGltbWVkaWF0ZWx5LgorICAgICAgT3RoZXJ3aXNlLCBibG9jayB1bnRpbCBhbm90aGVyIGNvcm91dGluZSBjYWxscyA6bWV0aDpgc2V0YCB0byBzZXQgdGhlCisgICAgICBmbGFnIHRvIHRydWUsIHRoZW4gcmV0dXJuIGBgVHJ1ZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworCisuLiBjbGFzczo6IENvbmRpdGlvbihcKiwgbG9vcD1Ob25lKQorCisgICBBIENvbmRpdGlvbiBpbXBsZW1lbnRhdGlvbiwgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8KKyAgIDpjbGFzczpgdGhyZWFkaW5nLkNvbmRpdGlvbmAuCisKKyAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb25kaXRpb24gdmFyaWFibGUgb2JqZWN0cy4gQSBjb25kaXRpb24gdmFyaWFibGUKKyAgIGFsbG93cyBvbmUgb3IgbW9yZSBjb3JvdXRpbmVzIHRvIHdhaXQgdW50aWwgdGhleSBhcmUgbm90aWZpZWQgYnkgYW5vdGhlcgorICAgY29yb3V0aW5lLgorCisgICBBIG5ldyA6Y2xhc3M6YExvY2tgIG9iamVjdCBpcyBjcmVhdGVkIGFuZCB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIGxvY2suCisKKyAgIC4uIG1ldGhvZDo6IG5vdGlmeShuPTEpCisKKyAgICAgIEJ5IGRlZmF1bHQsIHdha2UgdXAgb25lIGNvcm91dGluZSB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLCBpZiBhbnkuCisgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzCisgICAgICBjYWxsZWQsIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgICAgIFRoaXMgbWV0aG9kIHdha2VzIHVwIGF0IG1vc3QgKm4qIG9mIHRoZSBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIHRoZQorICAgICAgY29uZGl0aW9uIHZhcmlhYmxlOyBpdCBpcyBhIG5vLW9wIGlmIG5vIGNvcm91dGluZXMgYXJlIHdhaXRpbmcuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBBbiBhd2FrZW5lZCBjb3JvdXRpbmUgZG9lcyBub3QgYWN0dWFsbHkgcmV0dXJuIGZyb20gaXRzIDptZXRoOmB3YWl0YAorICAgICAgICAgY2FsbCB1bnRpbCBpdCBjYW4gcmVhY3F1aXJlIHRoZSBsb2NrLiBTaW5jZSA6bWV0aDpgbm90aWZ5YCBkb2VzIG5vdAorICAgICAgICAgcmVsZWFzZSB0aGUgbG9jaywgaXRzIGNhbGxlciBzaG91bGQuCisKKyAgIC4uIG1ldGhvZDo6IG5vdGlmeV9hbGwoKQorCisgICAgICBXYWtlIHVwIGFsbCB0aHJlYWRzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uIFRoaXMgbWV0aG9kIGFjdHMgbGlrZQorICAgICAgOm1ldGg6YG5vdGlmeWAsIGJ1dCB3YWtlcyB1cCBhbGwgd2FpdGluZyB0aHJlYWRzIGluc3RlYWQgb2Ygb25lLiBJZiB0aGUKKyAgICAgIGNhbGxpbmcgdGhyZWFkIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIGEKKyAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiBtZXRob2Q6OiB3YWl0KCkKKworICAgICAgV2FpdCB1bnRpbCBub3RpZmllZC4KKworICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcworICAgICAgY2FsbGVkLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGlzIG1ldGhvZCByZWxlYXNlcyB0aGUgdW5kZXJseWluZyBsb2NrLCBhbmQgdGhlbiBibG9ja3MgdW50aWwgaXQgaXMKKyAgICAgIGF3YWtlbmVkIGJ5IGEgOm1ldGg6YG5vdGlmeWAgb3IgOm1ldGg6YG5vdGlmeV9hbGxgIGNhbGwgZm9yIHRoZSBzYW1lCisgICAgICBjb25kaXRpb24gdmFyaWFibGUgaW4gYW5vdGhlciBjb3JvdXRpbmUuICBPbmNlIGF3YWtlbmVkLCBpdCByZS1hY3F1aXJlcworICAgICAgdGhlIGxvY2sgYW5kIHJldHVybnMgYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiB3YWl0X2ZvcihwcmVkaWNhdGUpCisKKyAgICAgIFdhaXQgdW50aWwgYSBwcmVkaWNhdGUgYmVjb21lcyB0cnVlLgorCisgICAgICBUaGUgcHJlZGljYXRlIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHJlc3VsdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGEKKyAgICAgIGJvb2xlYW4gdmFsdWUuIFRoZSBmaW5hbCBwcmVkaWNhdGUgdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZS4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKworU2VtYXBob3JlcworLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFNlbWFwaG9yZSh2YWx1ZT0xLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIFNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KKworICAgQSBzZW1hcGhvcmUgbWFuYWdlcyBhbiBpbnRlcm5hbCBjb3VudGVyIHdoaWNoIGlzIGRlY3JlbWVudGVkIGJ5IGVhY2gKKyAgIDptZXRoOmBhY3F1aXJlYCBjYWxsIGFuZCBpbmNyZW1lbnRlZCBieSBlYWNoIDptZXRoOmByZWxlYXNlYCBjYWxsLiBUaGUKKyAgIGNvdW50ZXIgY2FuIG5ldmVyIGdvIGJlbG93IHplcm87IHdoZW4gOm1ldGg6YGFjcXVpcmVgIGZpbmRzIHRoYXQgaXQgaXMgemVybywKKyAgIGl0IGJsb2Nrcywgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIHRocmVhZCBjYWxscyA6bWV0aDpgcmVsZWFzZWAuCisKKyAgIFNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKKyAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCBnaXZlcyB0aGUgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGludGVybmFsIGNvdW50ZXI7IGl0CisgICBkZWZhdWx0cyB0byBgYDFgYC4gSWYgdGhlIHZhbHVlIGdpdmVuIGlzIGxlc3MgdGhhbiBgYDBgYCwgOmV4YzpgVmFsdWVFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgLi4gbWV0aG9kOjogYWNxdWlyZSgpCisKKyAgICAgIEFjcXVpcmUgYSBzZW1hcGhvcmUuCisKKyAgICAgIElmIHRoZSBpbnRlcm5hbCBjb3VudGVyIGlzIGxhcmdlciB0aGFuIHplcm8gb24gZW50cnksIGRlY3JlbWVudCBpdCBieSBvbmUKKyAgICAgIGFuZCByZXR1cm4gYGBUcnVlYGAgaW1tZWRpYXRlbHkuICBJZiBpdCBpcyB6ZXJvIG9uIGVudHJ5LCBibG9jaywgd2FpdGluZworICAgICAgdW50aWwgc29tZSBvdGhlciBjb3JvdXRpbmUgaGFzIGNhbGxlZCA6bWV0aDpgcmVsZWFzZWAgdG8gbWFrZSBpdCBsYXJnZXIKKyAgICAgIHRoYW4gYGAwYGAsIGFuZCB0aGVuIHJldHVybiBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IGxvY2tlZCgpCisKKyAgICAgIFJldHVybnMgYGBUcnVlYGAgaWYgc2VtYXBob3JlIGNhbiBub3QgYmUgYWNxdWlyZWQgaW1tZWRpYXRlbHkuCisKKyAgIC4uIG1ldGhvZDo6IHJlbGVhc2UoKQorCisgICAgICBSZWxlYXNlIGEgc2VtYXBob3JlLCBpbmNyZW1lbnRpbmcgdGhlIGludGVybmFsIGNvdW50ZXIgYnkgb25lLiBXaGVuIGl0CisgICAgICB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8gYmVjb21lCisgICAgICBsYXJnZXIgdGhhbiB6ZXJvIGFnYWluLCB3YWtlIHVwIHRoYXQgY29yb3V0aW5lLgorCisKKy4uIGNsYXNzOjogQm91bmRlZFNlbWFwaG9yZSh2YWx1ZT0xLCBcKiwgbG9vcD1Ob25lKQorCisgICAgQSBib3VuZGVkIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4gSW5oZXJpdCBmcm9tIDpjbGFzczpgU2VtYXBob3JlYC4KKworICAgIFRoaXMgcmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIGluIDptZXRoOmB+U2VtYXBob3JlLnJlbGVhc2VgIGlmIGl0IHdvdWxkCisgICAgaW5jcmVhc2UgdGhlIHZhbHVlIGFib3ZlIHRoZSBpbml0aWFsIHZhbHVlLgorCisKK1F1ZXVlcworLS0tLS0tCisKKy4uIGNsYXNzOjogUXVldWUobWF4c2l6ZT0wLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgSWYgKm1heHNpemUqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgcXVldWUgc2l6ZSBpcyBpbmZpbml0ZS4gSWYKKyAgIGl0IGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIGBgMGBgLCB0aGVuIGBgeWllbGQgZnJvbSBwdXQoKWBgIHdpbGwgYmxvY2sKKyAgIHdoZW4gdGhlIHF1ZXVlIHJlYWNoZXMgKm1heHNpemUqLCB1bnRpbCBhbiBpdGVtIGlzIHJlbW92ZWQgYnkgOm1ldGg6YGdldGAuCisKKyAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSA6bW9kOmBxdWV1ZWAsIHlvdSBjYW4gcmVsaWFibHkga25vdyB0aGlzIFF1ZXVlJ3MKKyAgIHNpemUgd2l0aCA6bWV0aDpgcXNpemVgLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBUdWxpcCBhcHBsaWNhdGlvbiB3b24ndAorICAgYmUgaW50ZXJydXB0ZWQgYmV0d2VlbiBjYWxsaW5nIDptZXRoOmBxc2l6ZWAgYW5kIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUKKyAgIFF1ZXVlLgorCisgICAuLiBtZXRob2Q6OiBlbXB0eSgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcXVldWUgaXMgZW1wdHksIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIC4uIG1ldGhvZDo6IGZ1bGwoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIG1heHNpemUgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgSWYgdGhlIFF1ZXVlIHdhcyBpbml0aWFsaXplZCB3aXRoIGBgbWF4c2l6ZT0wYGAgKHRoZSBkZWZhdWx0KSwgdGhlbgorICAgICAgICAgOm1ldGg6YGZ1bGwoKWAgaXMgbmV2ZXIgYGBUcnVlYGAuCisKKyAgIC4uIG1ldGhvZDo6IGdldCgpCisKKyAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgIElmIHlvdSB5aWVsZCBmcm9tIDptZXRoOmBnZXQoKWAsIHdhaXQgdW50aWwgYSBpdGVtIGlzIGF2YWlsYWJsZS4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9ub3dhaXQoKQorCisgICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICBSZXR1cm4gYW4gaXRlbSBpZiBvbmUgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCBlbHNlIHJhaXNlCisgICAgICA6ZXhjOmB+cXVldWUuRW1wdHlgLgorCisgICAuLiBtZXRob2Q6OiBwdXQoaXRlbSkKKworICAgICAgUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUuCisKKyAgICAgIElmIHlvdSB5aWVsZCBmcm9tIGBgcHV0KClgYCwgd2FpdCB1bnRpbCBhIGZyZWUgc2xvdCBpcyBhdmFpbGFibGUgYmVmb3JlCisgICAgICBhZGRpbmcgaXRlbS4KKworICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IHB1dF9ub3dhaXQoaXRlbSkKKworICAgICAgUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUgd2l0aG91dCBibG9ja2luZy4KKworICAgICAgSWYgbm8gZnJlZSBzbG90IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgcmFpc2UgOmV4YzpgfnF1ZXVlLkZ1bGxgLgorCisgICAuLiBtZXRob2Q6OiBxc2l6ZSgpCisKKyAgICAgIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heHNpemUKKworICAgICAgTnVtYmVyIG9mIGl0ZW1zIGFsbG93ZWQgaW4gdGhlIHF1ZXVlLgorCisKKy4uIGNsYXNzOjogUHJpb3JpdHlRdWV1ZQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUXVldWVgOyByZXRyaWV2ZXMgZW50cmllcyBpbiBwcmlvcml0eSBvcmRlciAobG93ZXN0CisgICBmaXJzdCkuCisKKyAgIEVudHJpZXMgYXJlIHR5cGljYWxseSB0dXBsZXMgb2YgdGhlIGZvcm06IChwcmlvcml0eSBudW1iZXIsIGRhdGEpLgorCisKKy4uIGNsYXNzOjogTGlmb1F1ZXVlCisKKyAgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUXVldWVgIHRoYXQgcmV0cmlldmVzIG1vc3QgcmVjZW50bHkgYWRkZWQgZW50cmllcworICAgIGZpcnN0LgorCisKKy4uIGNsYXNzOjogSm9pbmFibGVRdWV1ZQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUXVldWVgIHdpdGggOm1ldGg6YHRhc2tfZG9uZWAgYW5kIDptZXRoOmBqb2luYAorICAgbWV0aG9kcy4KKworICAgLi4gbWV0aG9kOjogam9pbigpCisKKyAgICAgIEJsb2NrIHVudGlsIGFsbCBpdGVtcyBpbiB0aGUgcXVldWUgaGF2ZSBiZWVuIGdvdHRlbiBhbmQgcHJvY2Vzc2VkLgorCisgICAgICBUaGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBnb2VzIHVwIHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlCisgICAgICBxdWV1ZS4gVGhlIGNvdW50IGdvZXMgZG93biB3aGVuZXZlciBhIGNvbnN1bWVyIHRocmVhZCBjYWxscworICAgICAgOm1ldGg6YHRhc2tfZG9uZWAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSB3YXMgcmV0cmlldmVkIGFuZCBhbGwgd29yayBvbgorICAgICAgaXQgaXMgY29tcGxldGUuICBXaGVuIHRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGRyb3BzIHRvIHplcm8sCisgICAgICA6bWV0aDpgam9pbmAgdW5ibG9ja3MuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBtZXRob2Q6OiB0YXNrX2RvbmUoKQorCisgICAgICBJbmRpY2F0ZSB0aGF0IGEgZm9ybWVybHkgZW5xdWV1ZWQgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgVXNlZCBieSBxdWV1ZSBjb25zdW1lcnMuIEZvciBlYWNoIDptZXRoOmB+UXVldWUuZ2V0YCB1c2VkIHRvIGZldGNoIGEgdGFzaywgYQorICAgICAgc3Vic2VxdWVudCBjYWxsIHRvIDptZXRoOmB0YXNrX2RvbmVgIHRlbGxzIHRoZSBxdWV1ZSB0aGF0IHRoZSBwcm9jZXNzaW5nCisgICAgICBvbiB0aGUgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgSWYgYSA6bWV0aDpgam9pbmAgaXMgY3VycmVudGx5IGJsb2NraW5nLCBpdCB3aWxsIHJlc3VtZSB3aGVuIGFsbCBpdGVtcworICAgICAgaGF2ZSBiZWVuIHByb2Nlc3NlZCAobWVhbmluZyB0aGF0IGEgOm1ldGg6YHRhc2tfZG9uZWAgY2FsbCB3YXMgcmVjZWl2ZWQKKyAgICAgIGZvciBldmVyeSBpdGVtIHRoYXQgaGFkIGJlZW4gOm1ldGg6YH5RdWV1ZS5wdXRgIGludG8gdGhlIHF1ZXVlKS4KKworICAgICAgUmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIGlmIGNhbGxlZCBtb3JlIHRpbWVzIHRoYW4gdGhlcmUgd2VyZSBpdGVtcworICAgICAgcGxhY2VkIGluIHRoZSBxdWV1ZS4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby10YXNrLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwNTYyZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QKQEAgLTAsMCArMSw0MTAgQEAKKy4uIG1vZHVsZTo6IGFzeW5jaW8KKworVGFza3MgYW5kIGNvcm91dGluZXMKKz09PT09PT09PT09PT09PT09PT09CisKKy4uIF9jb3JvdXRpbmU6CisKK0Nvcm91dGluZXMKKy0tLS0tLS0tLS0KKworQSBjb3JvdXRpbmUgaXMgYSBnZW5lcmF0b3IgdGhhdCBmb2xsb3dzIGNlcnRhaW4gY29udmVudGlvbnMuICBGb3IKK2RvY3VtZW50YXRpb24gcHVycG9zZXMsIGFsbCBjb3JvdXRpbmVzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aAorYGBAYXN5bmNpby5jb3JvdXRpbmVgYCwgYnV0IHRoaXMgY2Fubm90IGJlIHN0cmljdGx5IGVuZm9yY2VkLgorCitDb3JvdXRpbmVzIHVzZSB0aGUgYGB5aWVsZCBmcm9tYGAgc3ludGF4IGludHJvZHVjZWQgaW4gOnBlcDpgMzgwYCwKK2luc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGBgeWllbGRgYCBzeW50YXguCisKK1RoZSB3b3JkICJjb3JvdXRpbmUiLCBsaWtlIHRoZSB3b3JkICJnZW5lcmF0b3IiLCBpcyB1c2VkIGZvciB0d28KK2RpZmZlcmVudCAodGhvdWdoIHJlbGF0ZWQpIGNvbmNlcHRzOgorCistIFRoZSBmdW5jdGlvbiB0aGF0IGRlZmluZXMgYSBjb3JvdXRpbmUgKGEgZnVuY3Rpb24gZGVmaW5pdGlvbgorICBkZWNvcmF0ZWQgd2l0aCBgYGFzeW5jaW8uY29yb3V0aW5lYGApLiAgSWYgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkCisgIHdlIHdpbGwgY2FsbCB0aGlzIGEgKmNvcm91dGluZSBmdW5jdGlvbiouCisKKy0gVGhlIG9iamVjdCBvYnRhaW5lZCBieSBjYWxsaW5nIGEgY29yb3V0aW5lIGZ1bmN0aW9uLiAgVGhpcyBvYmplY3QKKyAgcmVwcmVzZW50cyBhIGNvbXB1dGF0aW9uIG9yIGFuIEkvTyBvcGVyYXRpb24gKHVzdWFsbHkgYSBjb21iaW5hdGlvbikKKyAgdGhhdCB3aWxsIGNvbXBsZXRlIGV2ZW50dWFsbHkuICBJZiBkaXNhbWJpZ3VhdGlvbiBpcyBuZWVkZWQgd2Ugd2lsbAorICBjYWxsIGl0IGEgKmNvcm91dGluZSBvYmplY3QqLgorCitUaGluZ3MgYSBjb3JvdXRpbmUgY2FuIGRvOgorCistIGBgcmVzdWx0ID0geWllbGQgZnJvbSBmdXR1cmVgYCAtLSBzdXNwZW5kcyB0aGUgY29yb3V0aW5lIHVudGlsIHRoZQorICBmdXR1cmUgaXMgZG9uZSwgdGhlbiByZXR1cm5zIHRoZSBmdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlcyBhbgorICBleGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgcHJvcGFnYXRlZC4gIChJZiB0aGUgZnV0dXJlIGlzIGNhbmNlbGxlZCwKKyAgaXQgd2lsbCByYWlzZSBhIGBgQ2FuY2VsbGVkRXJyb3JgYCBleGNlcHRpb24uKSAgTm90ZSB0aGF0IHRhc2tzIGFyZQorICBmdXR1cmVzLCBhbmQgZXZlcnl0aGluZyBzYWlkIGFib3V0IGZ1dHVyZXMgYWxzbyBhcHBsaWVzIHRvIHRhc2tzLgorCistIGBgcmVzdWx0ID0geWllbGQgZnJvbSBjb3JvdXRpbmVgYCAtLSB3YWl0IGZvciBhbm90aGVyIGNvcm91dGluZSB0bworICBwcm9kdWNlIGEgcmVzdWx0IChvciByYWlzZSBhbiBleGNlcHRpb24sIHdoaWNoIHdpbGwgYmUgcHJvcGFnYXRlZCkuCisgIFRoZSBgYGNvcm91dGluZWBgIGV4cHJlc3Npb24gbXVzdCBiZSBhICpjYWxsKiB0byBhbm90aGVyIGNvcm91dGluZS4KKworLSBgYHJldHVybiBleHByZXNzaW9uYGAgLS0gcHJvZHVjZSBhIHJlc3VsdCB0byB0aGUgY29yb3V0aW5lIHRoYXQgaXMKKyAgd2FpdGluZyBmb3IgdGhpcyBvbmUgdXNpbmcgYGB5aWVsZCBmcm9tYGAuCisKKy0gYGByYWlzZSBleGNlcHRpb25gYCAtLSByYWlzZSBhbiBleGNlcHRpb24gaW4gdGhlIGNvcm91dGluZSB0aGF0IGlzCisgIHdhaXRpbmcgZm9yIHRoaXMgb25lIHVzaW5nIGBgeWllbGQgZnJvbWBgLgorCitDYWxsaW5nIGEgY29yb3V0aW5lIGRvZXMgbm90IHN0YXJ0IGl0cyBjb2RlIHJ1bm5pbmcgLS0gaXQgaXMganVzdCBhCitnZW5lcmF0b3IsIGFuZCB0aGUgY29yb3V0aW5lIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY2FsbCBpcyByZWFsbHkgYQorZ2VuZXJhdG9yIG9iamVjdCwgd2hpY2ggZG9lc24ndCBkbyBhbnl0aGluZyB1bnRpbCB5b3UgaXRlcmF0ZSBvdmVyIGl0LgorSW4gdGhlIGNhc2Ugb2YgYSBjb3JvdXRpbmUgb2JqZWN0LCB0aGVyZSBhcmUgdHdvIGJhc2ljIHdheXMgdG8gc3RhcnQKK2l0IHJ1bm5pbmc6IGNhbGwgYGB5aWVsZCBmcm9tIGNvcm91dGluZWBgIGZyb20gYW5vdGhlciBjb3JvdXRpbmUKKyhhc3N1bWluZyB0aGUgb3RoZXIgY29yb3V0aW5lIGlzIGFscmVhZHkgcnVubmluZyEpLCBvciBjb252ZXJ0IGl0IHRvIGEKKzpjbGFzczpgVGFza2AuCisKK0Nvcm91dGluZXMgKGFuZCB0YXNrcykgY2FuIG9ubHkgcnVuIHdoZW4gdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4KKworCitJbnZhbGlkU3RhdGVFcnJvcgorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gZXhjZXB0aW9uOjogSW52YWxpZFN0YXRlRXJyb3IKKworICAgVGhlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHN0YXRlLgorCisKK0Z1dHVyZQorLS0tLS0tCisKKy4uIGNsYXNzOjogRnV0dXJlKFwqLCBsb29wPU5vbmUpCisKKyAgIFRoaXMgY2xhc3MgaXMgKmFsbW9zdCogY29tcGF0aWJsZSB3aXRoIDpjbGFzczpgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZWAuCisKKyAgIERpZmZlcmVuY2VzOgorCisgICAtIDptZXRoOmByZXN1bHRgIGFuZCA6bWV0aDpgZXhjZXB0aW9uYCBkbyBub3QgdGFrZSBhIHRpbWVvdXQgYXJndW1lbnQgYW5kCisgICAgIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQuCisKKyAgIC0gQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCA6bWV0aDpgYWRkX2RvbmVfY2FsbGJhY2tgIGFyZSBhbHdheXMgY2FsbGVkCisgICAgIHZpYSB0aGUgZXZlbnQgbG9vcCdzIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZWAuCisKKyAgIC0gVGhpcyBjbGFzcyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSA6ZnVuYzpgfmNvbmN1cnJlbnQuZnV0dXJlcy53YWl0YCBhbmQKKyAgICAgOmZ1bmM6YH5jb25jdXJyZW50LmZ1dHVyZXMuYXNfY29tcGxldGVkYCBmdW5jdGlvbnMgaW4gdGhlCisgICAgIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AgcGFja2FnZS4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsKCkKKworICAgICAgQ2FuY2VsIHRoZSBmdXR1cmUgYW5kIHNjaGVkdWxlIGNhbGxiYWNrcy4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgb3IgY2FuY2VsbGVkLCByZXR1cm4gYGBGYWxzZWBgLiBPdGhlcndpc2UsCisgICAgICBjaGFuZ2UgdGhlIGZ1dHVyZSdzIHN0YXRlIHRvIGNhbmNlbGxlZCwgc2NoZWR1bGUgdGhlIGNhbGxiYWNrcyBhbmQgcmV0dXJuCisgICAgICBgYFRydWVgYC4KKworICAgLi4gbWV0aG9kOjogY2FuY2VsbGVkKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKworICAgLi4gbWV0aG9kOjogZG9uZSgpCisKKyAgICAgIFJldHVybiBUcnVlIGlmIHRoZSBmdXR1cmUgaXMgZG9uZS4KKworICAgICAgRG9uZSBtZWFucyBlaXRoZXIgdGhhdCBhIHJlc3VsdCAvIGV4Y2VwdGlvbiBhcmUgYXZhaWxhYmxlLCBvciB0aGF0IHRoZQorICAgICAgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisKKyAgIC4uIG1ldGhvZDo6IHJlc3VsdCgpCisKKyAgICAgIFJldHVybiB0aGUgcmVzdWx0IHRoaXMgZnV0dXJlIHJlcHJlc2VudHMuCisKKyAgICAgIElmIHRoZSBmdXR1cmUgaGFzIGJlZW4gY2FuY2VsbGVkLCByYWlzZXMgOmV4YzpgQ2FuY2VsbGVkRXJyb3JgLiBJZiB0aGUKKyAgICAgIGZ1dHVyZSdzIHJlc3VsdCBpc24ndCB5ZXQgYXZhaWxhYmxlLCByYWlzZXMgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLiBJZgorICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lIGFuZCBoYXMgYW4gZXhjZXB0aW9uIHNldCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICAuLiBtZXRob2Q6OiBleGNlcHRpb24oKQorCisgICAgICBSZXR1cm4gdGhlIGV4Y2VwdGlvbiB0aGF0IHdhcyBzZXQgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgIFRoZSBleGNlcHRpb24gKG9yIGBgTm9uZWBgIGlmIG5vIGV4Y2VwdGlvbiB3YXMgc2V0KSBpcyByZXR1cm5lZCBvbmx5IGlmCisgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUuIElmIHRoZSBmdXR1cmUgaGFzIGJlZW4gY2FuY2VsbGVkLCByYWlzZXMKKyAgICAgIDpleGM6YENhbmNlbGxlZEVycm9yYC4gSWYgdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldCwgcmFpc2VzCisgICAgICA6ZXhjOmBJbnZhbGlkU3RhdGVFcnJvcmAuCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9kb25lX2NhbGxiYWNrKGZuKQorCisgICAgICBBZGQgYSBjYWxsYmFjayB0byBiZSBydW4gd2hlbiB0aGUgZnV0dXJlIGJlY29tZXMgZG9uZS4KKworICAgICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGZ1dHVyZSBvYmplY3QuIElmIHRoZQorICAgICAgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgaXMgY2FsbGVkLCB0aGUgY2FsbGJhY2sgaXMgc2NoZWR1bGVkCisgICAgICB3aXRoIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gLgorCisgICAuLiBtZXRob2Q6OiByZW1vdmVfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSBjYWxsYmFjayBmcm9tIHRoZSAiY2FsbCB3aGVuIGRvbmUiIGxpc3QuCisKKyAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC4KKworICAgLi4gbWV0aG9kOjogc2V0X3Jlc3VsdChyZXN1bHQpCisKKyAgICAgIE1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgaXRzIHJlc3VsdC4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKworICAgICAgTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBhbiBleGNlcHRpb24uCisKKyAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgIDpleGM6YEludmFsaWRTdGF0ZUVycm9yYC4KKworCitUYXNrCistLS0tCisKKy4uIGNsYXNzOjogVGFzayhjb3JvLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIGNvcm91dGluZSB3cmFwcGVkIGluIGEgOmNsYXNzOmBGdXR1cmVgLiBTdWJjbGFzcyBvZiA6Y2xhc3M6YEZ1dHVyZWAuCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogYWxsX3Rhc2tzKGxvb3A9Tm9uZSkKKworICAgICAgUmV0dXJuIGEgc2V0IG9mIGFsbCB0YXNrcyBmb3IgYW4gZXZlbnQgbG9vcC4KKworICAgICAgQnkgZGVmYXVsdCBhbGwgdGFza3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgYXJlIHJldHVybmVkLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWwoKQorCisgICAgICBDYW5jZWwgdGhlIHRhc2suCisKKyAgIC4uIG1ldGhvZDo6IGdldF9zdGFjayhzZWxmLCBcKiwgbGltaXQ9Tm9uZSkKKworICAgICAgUmV0dXJuIHRoZSBsaXN0IG9mIHN0YWNrIGZyYW1lcyBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICBJZiB0aGUgY29yb3V0aW5lIGlzIGFjdGl2ZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcyBzdXNwZW5kZWQuCisgICAgICBJZiB0aGUgY29yb3V0aW5lIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcyBjYW5jZWxsZWQsIHRoaXMKKyAgICAgIHJldHVybnMgYW4gZW1wdHkgbGlzdC4gIElmIHRoZSBjb3JvdXRpbmUgd2FzIHRlcm1pbmF0ZWQgYnkgYW4gZXhjZXB0aW9uLAorICAgICAgdGhpcyByZXR1cm5zIHRoZSBsaXN0IG9mIHRyYWNlYmFjayBmcmFtZXMuCisKKyAgICAgIFRoZSBmcmFtZXMgYXJlIGFsd2F5cyBvcmRlcmVkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKworICAgICAgVGhlIG9wdGlvbmFsIGxpbWl0IGdpdmVzIHRoZSBtYXhpbXVtIG51bW1iZXIgb2YgZnJhbWVzIHRvIHJldHVybjsgYnkKKyAgICAgIGRlZmF1bHQgYWxsIGF2YWlsYWJsZSBmcmFtZXMgYXJlIHJldHVybmVkLiAgSXRzIG1lYW5pbmcgZGlmZmVycyBkZXBlbmRpbmcKKyAgICAgIG9uIHdoZXRoZXIgYSBzdGFjayBvciBhIHRyYWNlYmFjayBpcyByZXR1cm5lZDogdGhlIG5ld2VzdCBmcmFtZXMgb2YgYQorICAgICAgc3RhY2sgYXJlIHJldHVybmVkLCBidXQgdGhlIG9sZGVzdCBmcmFtZXMgb2YgYSB0cmFjZWJhY2sgYXJlIHJldHVybmVkLgorICAgICAgKFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUuKQorCisgICAgICBGb3IgcmVhc29ucyBiZXlvbmQgb3VyIGNvbnRyb2wsIG9ubHkgb25lIHN0YWNrIGZyYW1lIGlzIHJldHVybmVkIGZvciBhCisgICAgICBzdXNwZW5kZWQgY29yb3V0aW5lLgorCisgICAuLiBtZXRob2Q6OiBwcmludF9zdGFjayhcKiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKQorCisgICAgICBQcmludCB0aGUgc3RhY2sgb3IgdHJhY2ViYWNrIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgIFRoaXMgcHJvZHVjZXMgb3V0cHV0IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZSwgZm9yIHRoZQorICAgICAgZnJhbWVzIHJldHJpZXZlZCBieSBnZXRfc3RhY2soKS4gIFRoZSBsaW1pdCBhcmd1bWVudCBpcyBwYXNzZWQgdG8KKyAgICAgIGdldF9zdGFjaygpLiAgVGhlIGZpbGUgYXJndW1lbnQgaXMgYW4gSS9PIHN0cmVhbSB0byB3aGljaCB0aGUgb3V0cHV0CisgICAgICBnb2VzOyBieSBkZWZhdWx0IGl0IGdvZXMgdG8gc3lzLnN0ZGVyci4KKworCitUYXNrIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0KKworLi4gZnVuY3Rpb246OiBhc19jb21wbGV0ZWQoZnMsIFwqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSkKKworICAgUmV0dXJuIGFuIGl0ZXJhdG9yIHdob3NlIHZhbHVlcywgd2hlbiB3YWl0ZWQgZm9yLCBhcmUgOmNsYXNzOmBGdXR1cmVgCisgICBpbnN0YW5jZXMuCisKKyAgIFJhaXNlcyA6ZXhjOmBUaW1lb3V0RXJyb3JgIGlmIHRoZSB0aW1lb3V0IG9jY3VycyBiZWZvcmUgYWxsIEZ1dHVyZXMgYXJlIGRvbmUuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICAgZm9yIGYgaW4gYXNfY29tcGxldGVkKGZzKToKKyAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBmICAjIFRoZSAneWllbGQgZnJvbScgbWF5IHJhaXNlCisgICAgICAgICAgICMgVXNlIHJlc3VsdAorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGZ1dHVyZXMgYGBmYGAgYXJlIG5vdCBuZWNlc3NhcmlseSBtZW1iZXJzIG9mIGZzLgorCisuLiBmdW5jdGlvbjo6IGFzeW5jKGNvcm9fb3JfZnV0dXJlLCBcKiwgbG9vcD1Ob25lKQorCisgICBXcmFwIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YCBpbiBhIGZ1dHVyZS4KKworICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgOmNsYXNzOmBGdXR1cmVgLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4KKworLi4gZnVuY3Rpb246OiBnYXRoZXIoXCpjb3Jvc19vcl9mdXR1cmVzLCBsb29wPU5vbmUsIHJldHVybl9leGNlcHRpb25zPUZhbHNlKQorCisgICBSZXR1cm4gYSBmdXR1cmUgYWdncmVnYXRpbmcgcmVzdWx0cyBmcm9tIHRoZSBnaXZlbiBjb3JvdXRpbmVzIG9yIGZ1dHVyZXMuCisKKyAgIEFsbCBmdXR1cmVzIG11c3Qgc2hhcmUgdGhlIHNhbWUgZXZlbnQgbG9vcC4gIElmIGFsbCB0aGUgdGFza3MgYXJlIGRvbmUKKyAgIHN1Y2Nlc3NmdWxseSwgdGhlIHJldHVybmVkIGZ1dHVyZSdzIHJlc3VsdCBpcyB0aGUgbGlzdCBvZiByZXN1bHRzIChpbiB0aGUKKyAgIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgbm90IG5lY2Vzc2FyaWx5IHRoZSBvcmRlciBvZiByZXN1bHRzCisgICBhcnJpdmFsKS4gIElmICpyZXN1bHRfZXhjZXB0aW9uKiBpcyBUcnVlLCBleGNlcHRpb25zIGluIHRoZSB0YXNrcyBhcmUKKyAgIHRyZWF0ZWQgdGhlIHNhbWUgYXMgc3VjY2Vzc2Z1bCByZXN1bHRzLCBhbmQgZ2F0aGVyZWQgaW4gdGhlIHJlc3VsdCBsaXN0OworICAgb3RoZXJ3aXNlLCB0aGUgZmlyc3QgcmFpc2VkIGV4Y2VwdGlvbiB3aWxsIGJlIGltbWVkaWF0ZWx5IHByb3BhZ2F0ZWQgdG8gdGhlCisgICByZXR1cm5lZCBmdXR1cmUuCisKKyAgIENhbmNlbGxhdGlvbjogaWYgdGhlIG91dGVyIEZ1dHVyZSBpcyBjYW5jZWxsZWQsIGFsbCBjaGlsZHJlbiAodGhhdCBoYXZlIG5vdAorICAgY29tcGxldGVkIHlldCkgYXJlIGFsc28gY2FuY2VsbGVkLiAgSWYgYW55IGNoaWxkIGlzIGNhbmNlbGxlZCwgdGhpcyBpcworICAgdHJlYXRlZCBhcyBpZiBpdCByYWlzZWQgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgLS0gdGhlCisgICBvdXRlciBGdXR1cmUgaXMgKm5vdCogY2FuY2VsbGVkIGluIHRoaXMgY2FzZS4gIChUaGlzIGlzIHRvIHByZXZlbnQgdGhlCisgICBjYW5jZWxsYXRpb24gb2Ygb25lIGNoaWxkIHRvIGNhdXNlIG90aGVyIGNoaWxkcmVuIHRvIGJlIGNhbmNlbGxlZC4pCisKKy4uIGZ1bmN0aW9uOjogdGFza3MuaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgKmZ1bmMqIGlzIGEgZGVjb3JhdGVkIGNvcm91dGluZSBmdW5jdGlvbi4KKworLi4gZnVuY3Rpb246OiB0YXNrcy5pc2Nvcm91dGluZShvYmopCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiAqb2JqKiBpcyBhIGNvcm91dGluZSBvYmplY3QuCisKKy4uIGZ1bmN0aW9uOjogc2xlZXAoZGVsYXksIHJlc3VsdD1Ob25lLCBcKiwgbG9vcD1Ob25lKQorCisgICBDcmVhdGUgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHRoYXQgY29tcGxldGVzIGFmdGVyIGEgZ2l2ZW4gdGltZQorICAgKGluIHNlY29uZHMpLgorCisuLiBmdW5jdGlvbjo6IHNoaWVsZChhcmcsIFwqLCBsb29wPU5vbmUpCisKKyAgIFdhaXQgZm9yIGEgZnV0dXJlLCBzaGllbGRpbmcgaXQgZnJvbSBjYW5jZWxsYXRpb24uCisKKyAgIFRoZSBzdGF0ZW1lbnQ6OgorCisgICAgICAgcmVzID0geWllbGQgZnJvbSBzaGllbGQoc29tZXRoaW5nKCkpCisKKyAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50OjoKKworICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc29tZXRoaW5nKCkKKworICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUgdGFzayBydW5uaW5nCisgICBpbiBgYHNvbWV0aGluZygpYGAgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKyAgIGBgc29tZXRoaW5nKClgYCwgdGhlIGNhbmNlbGxhdGlvbiBkaWQgbm90IGhhcHBlbi4gIEJ1dCBpdHMgY2FsbGVyIGlzIHN0aWxsCisgICBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYC4gIE5vdGU6IElmIGBgc29tZXRoaW5nKClgYCBpcworICAgY2FuY2VsbGVkIGJ5IG90aGVyIG1lYW5zIHRoaXMgd2lsbCBzdGlsbCBjYW5jZWwgYGBzaGllbGQoKWBgLgorCisgICBJZiB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IGlnbm9yZSBjYW5jZWxsYXRpb24gKG5vdCByZWNvbW1lbmRlZCkgeW91IGNhbgorICAgY29tYmluZSBgYHNoaWVsZCgpYGAgd2l0aCBhIHRyeS9leGNlcHQgY2xhdXNlLCBhcyBmb2xsb3dzOjoKKworICAgICAgIHRyeToKKyAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBzaGllbGQoc29tZXRoaW5nKCkpCisgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICByZXMgPSBOb25lCisKKy4uIGZ1bmN0aW9uOjogd2FpdChmdXR1cmVzLCBcKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUsIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpCisKKyAgIFdhaXQgZm9yIHRoZSBGdXR1cmVzIGFuZCBjb3JvdXRpbmVzIGdpdmVuIGJ5IHRoZSBzZXF1ZW5jZSAqZnV0dXJlcyogdG8KKyAgIGNvbXBsZXRlLiAgQ29yb3V0aW5lcyB3aWxsIGJlIHdyYXBwZWQgaW4gVGFza3MuIFJldHVybnMgdHdvIHNldHMgb2YKKyAgIDpjbGFzczpgRnV0dXJlYDogKGRvbmUsIHBlbmRpbmcpLgorCisgICAqdGltZW91dCogY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZQorICAgcmV0dXJuaW5nLiAgKnRpbWVvdXQqIGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQuICBJZiAqdGltZW91dCogaXMgbm90IHNwZWNpZmllZAorICAgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuCisKKyAgICpyZXR1cm5fd2hlbiogaW5kaWNhdGVzIHdoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuLiAgSXQgbXVzdCBiZSBvbmUgb2YKKyAgIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIG9mIHRoZSA6bW9kOmBjb25jdXJyZW50LmZ1dHVyZXNgIG1vZHVsZToKKworICAgLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRklSU1RfQ09NUExFVEVEYCAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFueSAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlIGZpbmlzaGVzIG9yIGlzIGNhbmNlbGxlZC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRklSU1RfRVhDRVBUSU9OYCAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFueSAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlIGZpbmlzaGVzIGJ5IHJhaXNpbmcgYW4gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24uICBJZiBubyBmdXR1cmUgcmFpc2VzIGFuICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbiB0aGVuIGl0IGlzIGVxdWl2YWxlbnQgdG8gICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmNvbnN0OmBBTExfQ09NUExFVEVEYC4gICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgQUxMX0NPTVBMRVRFRGAgICAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFsbCAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlcyBmaW5pc2ggb3IgYXJlIGNhbmNlbGxlZC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIFVzYWdlOjoKKworICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoZnMpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGRvZXMgbm90IHJhaXNlIDpleGM6YFRpbWVvdXRFcnJvcmAhIEZ1dHVyZXMgdGhhdCBhcmVuJ3QgZG9uZSB3aGVuCisgICAgICB0aGUgdGltZW91dCBvY2N1cnMgYXJlIHJldHVybmVkIGluIHRoZSBzZWNvbmQgc2V0LgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorCisKKy4uIF9hc3luY2lvLWhlbGxvLXdvcmxkLWNvcm91dGluZToKKworRXhhbXBsZTogSGVsbG8gV29ybGQgKGNvcm91dGluZSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1ByaW50IGBgSGVsbG8gV29ybGRgYCBldmVyeSB0d28gc2Vjb25kcywgdXNpbmcgYSBjb3JvdXRpbmU6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBncmVldF9ldmVyeV90d29fc2Vjb25kcygpOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgcHJpbnQoJ0hlbGxvIFdvcmxkJykKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgyKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdyZWV0X2V2ZXJ5X3R3b19zZWNvbmRzKCkpCisKKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YEhlbGxvIFdvcmxkIGV4YW1wbGUgdXNpbmcgYSBjYWxsYmFjayA8YXN5bmNpby1oZWxsby13b3JsZC1jYWxsYmFjaz5gLgorCitFeGFtcGxlOiBDaGFpbnMgY29yb3V0aW5lcyBhbmQgcGFyYWxsZWwgZXhlY3V0aW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgY2hhaW5pbmcgY29yb3V0aW5lcyBhbmQgZXhlY3V0aW5nIG11bHRpcGxlIGNvcm91dGluZXMgaW4gcGFyYWxsZWw6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBjb21wdXRlKHgsIHkpOgorICAgICAgICBwcmludCgiU3RhcnQgY29tcHV0aW5nICVzICsgJXMiICUgKHgsIHkpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMy4wKQorICAgICAgICByZXR1cm4geCArIHkKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBwcmludF9zdW0oeCwgeSk6CisgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gY29tcHV0ZSh4LCB5KQorICAgICAgICBwcmludCgiJXMgKyAlcyA9ICVzIiAlICh4LCB5LCByZXN1bHQpKQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHdhaXRfdGFzayh0YXNrKToKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbdGFza10sIHRpbWVvdXQ9MS4wKQorICAgICAgICAgICAgaWYgZG9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcHJpbnQoIkNvbXB1dGUgaW4gcHJvZ3Jlc3MuLi4iKQorICAgICAgICBhc3luY2lvLmdldF9ldmVudF9sb29wKCkuc3RvcCgpCisKKyAgICBwcmludCgiU2NoZWR1bGUgdGFza3MiKQorICAgIHRhc2sgPSBhc3luY2lvLmFzeW5jKHByaW50X3N1bSgxLCAyKSkKKyAgICBhc3luY2lvLmFzeW5jKHdhaXRfdGFzayh0YXNrKSkKKworICAgIHByaW50KCJFeGVjdXRlIHRhc2tzIikKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKKworCitPdXRwdXQ6OgorCisgICAgU2NoZWR1bGUgdGFza3MKKyAgICBFeGVjdXRlIHRhc2tzCisgICAgU3RhcnQgY29tcHV0aW5nIDEgKyAyCisgICAgQ29tcHV0ZSBpbiBwcm9ncmVzcy4uLgorICAgIENvbXB1dGUgaW4gcHJvZ3Jlc3MuLi4KKyAgICAxICsgMiA9IDMKKworRGV0YWlsczoKKworKiBgYGNvbXB1dGUoKWBgIGlzIGNoYWluZWQgdG8gYGBwcmludF9zdW0oKWBgOiBgYHByaW50X3N1bSgpYGAgY29yb3V0aW5lIHdhaXRzCisgIHVudGlsIGBgY29tcHV0ZSgpYGAgaXMgY29tcGxldGUuIENvcm91dGluZXMgYXJlIGV4ZWN1dGVkIGluIHBhcmFsbGVsOgorICBgYHdhaXRfdGFzaygpYGAgaXMgZXhlY3V0ZWQgd2hpbGUgYGBjb21wdXRlKClgYCBpcyBibG9ja2VkIGluCisgIGBgYXN5bmNpby5zbGVlcCgzLjApYGAuCisKKyogQ29yb3V0aW5lcyBhcmUgbm90IGV4ZWN1dGVkIGJlZm9yZSB0aGUgbG9vcCBpcyBydW5uaW5nOiBgYCJFeGVjdXRlIHRhc2tzImBgCisgIGlzIHdyaXR0ZW4gYmVmb3JlIGBgIlN0YXJ0IGNvbXB1dGluZyAxICsgMiJgYC4KKworKiBgYHdhaXRfdGFzaygpYGAgc3RvcHMgdGhlIGV2ZW50IGxvb3Agd2hlbiBgYHByaW50X3N1bSgpYGAgaXMgZG9uZS4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDBmNmNlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKQEAgLTAsMCArMSw1NyBAQAorOm1vZDpgYXN5bmNpb2AgLS0gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGFzeW5jaW8KKyAgIDpzeW5vcHNpczogQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9hc3luY2lvL2AKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgc2luZ2xlLXRocmVhZGVkIGNvbmN1cnJlbnQKK2NvZGUgdXNpbmcgY29yb3V0aW5lcywgbXVsdGlwbGV4aW5nIEkvTyBhY2Nlc3Mgb3ZlciBzb2NrZXRzIGFuZCBvdGhlcgorcmVzb3VyY2VzLCBydW5uaW5nIG5ldHdvcmsgY2xpZW50cyBhbmQgc2VydmVycywgYW5kIG90aGVyIHJlbGF0ZWQgcHJpbWl0aXZlcy4KK0hlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHBhY2thZ2UgY29udGVudHM6CisKKyogYSBwbHVnZ2FibGUgOnJlZjpgZXZlbnQgbG9vcCA8ZXZlbnQtbG9vcD5gIHdpdGggdmFyaW91cyBzeXN0ZW0tc3BlY2lmaWMKKyAgaW1wbGVtZW50YXRpb25zOworCisqIDpyZWY6YHRyYW5zcG9ydCA8dHJhbnNwb3J0PmAgYW5kIDpyZWY6YHByb3RvY29sIDxwcm90b2NvbD5gIGFic3RyYWN0aW9ucworICAoc2ltaWxhciB0byB0aG9zZSBpbiBgVHdpc3RlZCA8aHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLz5gXyk7CisKKyogY29uY3JldGUgc3VwcG9ydCBmb3IgVENQLCBVRFAsIFNTTCwgc3VicHJvY2VzcyBwaXBlcywgZGVsYXllZCBjYWxscywgYW5kCisgIG90aGVycyAoc29tZSBtYXkgYmUgc3lzdGVtLWRlcGVuZGVudCk7CisKKyogYSA6Y2xhc3M6YEZ1dHVyZWAgY2xhc3MgdGhhdCBtaW1pY2tzIHRoZSBvbmUgaW4gdGhlIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AKKyAgbW9kdWxlLCBidXQgYWRhcHRlZCBmb3IgdXNlIHdpdGggdGhlIGV2ZW50IGxvb3A7CisKKyogY29yb3V0aW5lcyBhbmQgdGFza3MgYmFzZWQgb24gYGB5aWVsZCBmcm9tYGAgKDpQRVA6YDM4MGApLCB0byBoZWxwIHdyaXRlCisgIGNvbmN1cnJlbnQgY29kZSBpbiBhIHNlcXVlbnRpYWwgZmFzaGlvbjsKKworKiBjYW5jZWxsYXRpb24gc3VwcG9ydCBmb3IgRnV0dXJlcyBhbmQgY29yb3V0aW5lczsKKworKiA6cmVmOmBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyA8c3luYz5gIGZvciB1c2UgYmV0d2VlbiBjb3JvdXRpbmVzIGluCisgIGEgc2luZ2xlIHRocmVhZCwgbWltaWNraW5nIHRob3NlIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZTsKKworKiBhbiBpbnRlcmZhY2UgZm9yIHBhc3Npbmcgd29yayBvZmYgdG8gYSB0aHJlYWRwb29sLCBmb3IgdGltZXMgd2hlbgorICB5b3UgYWJzb2x1dGVseSwgcG9zaXRpdmVseSBoYXZlIHRvIHVzZSBhIGxpYnJhcnkgdGhhdCBtYWtlcyBibG9ja2luZworICBJL08gY2FsbHMuCisKK1RhYmxlIG9mIGNvbnRlbnQ6CisKKy4uIHRvY3RyZWU6OgorICAgOm1heGRlcHRoOiAzCisgICA6bnVtYmVyZWQ6CisKKyAgIGFzeW5jaW8tZXZlbnRsb29wLnJzdAorICAgYXN5bmNpby10YXNrLnJzdAorICAgYXN5bmNpby1wcm90b2NvbC5yc3QKKyAgIGFzeW5jaW8tc3luYy5yc3QKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bW9kOmBhc3luY2lvYCBtb2R1bGUgd2FzIGRlc2lnbmVkIGluIHRoZSA6UEVQOmAzMTU2YC4gRm9yIGEKKyAgIG1vdGl2YXRpb25hbCBwcmltZXIgb24gdHJhbnNwb3J0cyBhbmQgcHJvdG9jb2xzLCBzZWUgOlBFUDpgMzE1M2AuCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAppbmRleCA4ZjQ5NGQwLi42MTA3OWM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CkBAIC0xMyw2ICsxMywxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBvbmx5LiAgRm9yIG5ldyBjb2RlIHdlCisgICByZWNvbW1lbmQgdXNpbmcgOm1vZDpgYXN5bmNpb2AuCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBiYXNpYyBpbmZyYXN0cnVjdHVyZSBmb3Igd3JpdGluZyBhc3luY2hyb25vdXMgIHNvY2tldAogc2VydmljZSBjbGllbnRzIGFuZCBzZXJ2ZXJzLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdWRpb29wLnJzdCBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CmluZGV4IGVkYjM4NzAuLmZiYjdmYzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0CkBAIC02LDkgKzYsMTYgQEAKIAogCiBUaGUgOm1vZDpgYXVkaW9vcGAgbW9kdWxlIGNvbnRhaW5zIHNvbWUgdXNlZnVsIG9wZXJhdGlvbnMgb24gc291bmQgZnJhZ21lbnRzLgotSXQgb3BlcmF0ZXMgb24gc291bmQgZnJhZ21lbnRzIGNvbnNpc3Rpbmcgb2Ygc2lnbmVkIGludGVnZXIgc2FtcGxlcyA4LCAxNiBvciAzMgotYml0cyB3aWRlLCBzdG9yZWQgaW4gYnl0ZXMgb2JqZWN0cy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlIGludGVnZXJzLCB1bmxlc3MKLXNwZWNpZmllZCBvdGhlcndpc2UuCitJdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2LCAyNAorb3IgMzIgYml0cyB3aWRlLCBzdG9yZWQgaW4gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4gIEFsbCBzY2FsYXIgaXRlbXMgYXJlCitpbnRlZ2VycywgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBTdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcyB3YXMgYWRkZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkIGJ5IGFsbCBmdW5jdGlvbnMgaW4gdGhpcworICAgbW9kdWxlLiAgU3RyaW5ncyBubyBtb3JlIHN1cHBvcnRlZC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBJbnRlbC9EVkkgQURQQ00KQEAgLTM1LDcgKzQyLDcgQEAKIC4uIGZ1bmN0aW9uOjogYWRkKGZyYWdtZW50MSwgZnJhZ21lbnQyLCB3aWR0aCkKIAogICAgUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4KLSAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCBvciBgYDRgYC4gIEJvdGgKKyAgICp3aWR0aCogaXMgdGhlIHNhbXBsZSB3aWR0aCBpbiBieXRlcywgZWl0aGVyIGBgMWBgLCBgYDJgYCwgYGAzYGAgb3IgYGA0YGAuICBCb3RoCiAgICBmcmFnbWVudHMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiAgU2FtcGxlcyBhcmUgdHJ1bmNhdGVkIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCiAKIApAQCAtNzAsNiArNzcsMTQgQEAKICAgIHNhbXBsZS4gIFNhbXBsZXMgd3JhcCBhcm91bmQgaW4gY2FzZSBvZiBvdmVyZmxvdy4KIAogCisuLiBmdW5jdGlvbjo6IGJ5dGVzd2FwKGZyYWdtZW50LCB3aWR0aCkKKworICAgIkJ5dGVzd2FwIiBhbGwgc2FtcGxlcyBpbiBhIGZyYWdtZW50IGFuZCByZXR1cm5zIHRoZSBtb2RpZmllZCBmcmFnbWVudC4KKyAgIENvbnZlcnRzIGJpZy1lbmRpYW4gc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY3Jvc3MoZnJhZ21lbnQsIHdpZHRoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB6ZXJvIGNyb3NzaW5ncyBpbiB0aGUgZnJhZ21lbnQgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LgpAQCAtMTMzLDE5ICsxNDgsMTkgQEAKIAogLi4gZnVuY3Rpb246OiBsaW4ybGluKGZyYWdtZW50LCB3aWR0aCwgbmV3d2lkdGgpCiAKLSAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSBhbmQgNC1ieXRlIGZvcm1hdHMuCisgICBDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4KIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiBhbmQgMzIgYml0IHNhbXBsZXMgYXJlCisgICAgICBJbiBzb21lIGF1ZGlvIGZvcm1hdHMsIHN1Y2ggYXMgLldBViBmaWxlcywgMTYsIDI0IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKICAgICAgIHNpZ25lZCwgYnV0IDggYml0IHNhbXBsZXMgYXJlIHVuc2lnbmVkLiAgU28gd2hlbiBjb252ZXJ0aW5nIHRvIDggYml0IHdpZGUKICAgICAgIHNhbXBsZXMgZm9yIHRoZXNlIGZvcm1hdHMsIHlvdSBuZWVkIHRvIGFsc28gYWRkIDEyOCB0byB0aGUgcmVzdWx0OjoKIAogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AubGluMmxpbihmcmFtZXMsIG9sZF93aWR0aCwgMSkKICAgICAgICAgIG5ld19mcmFtZXMgPSBhdWRpb29wLmJpYXMobmV3X2ZyYW1lcywgMSwgMTI4KQogCi0gICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiBvciAzMgotICAgICAgYml0IHdpZHRoIHNhbXBsZXMuCisgICAgICBUaGUgc2FtZSwgaW4gcmV2ZXJzZSwgaGFzIHRvIGJlIGFwcGxpZWQgd2hlbiBjb252ZXJ0aW5nIGZyb20gOCB0byAxNiwgMjQKKyAgICAgIG9yIDMyIGJpdCB3aWR0aCBzYW1wbGVzLgogCiAKIC4uIGZ1bmN0aW9uOjogbGluMnVsYXcoZnJhZ21lbnQsIHdpZHRoKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdCBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKaW5kZXggM2IyM2U3OS4uYTdlZWQwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CkBAIC0yNyw2ICsyNywxMCBAQAogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLgorCiBUaGUgbW9kZXJuIGludGVyZmFjZSBwcm92aWRlczoKIAogLi4gZnVuY3Rpb246OiBiNjRlbmNvZGUocywgYWx0Y2hhcnM9Tm9uZSkKQEAgLTEyOCw2ICsxMzIsNzYgQEAKICAgIHN0cmluZy4KIAogCisuLiBmdW5jdGlvbjo6IGE4NWVuY29kZShzLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpCisKKyAgIEVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCisKKyAgICpzKiBpcyB0aGUgc3RyaW5nIHRvIGVuY29kZS4gVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgdXNlcyB0aGUgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZSAneScKKyAgIGluc3RlYWQgb2YgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApIGFzIHN1cHBvcnRlZCBieSAnYnRvYScuIFRoaXMKKyAgIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqd3JhcGNvbCogY29udHJvbHMgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBoYXZlIG5ld2xpbmUgKCdcbicpCisgICBjaGFyYWN0ZXJzIGFkZGVkIHRvIGl0LiBJZiB0aGlzIGlzIG5vbi16ZXJvLCBlYWNoIG91dHB1dCBsaW5lIHdpbGwgYmUKKyAgIGF0IG1vc3QgdGhpcyBtYW55IGNoYXJhY3RlcnMgbG9uZy4KKworICAgKnBhZCogY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc3RyaW5nIGlzIHBhZGRlZCB0byBhIG11bHRpcGxlIG9mIDQKKyAgIGJlZm9yZSBlbmNvZGluZy4gTm90ZSB0aGF0IHRoZSBgYGJ0b2FgYCBpbXBsZW1lbnRhdGlvbiBhbHdheXMgcGFkcy4KKworICAgKmFkb2JlKiBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggYGA8fmBgCisgICBhbmQgYGB+PmBgLCB3aGljaCBpcyB1c2VkIGJ5IHRoZSBBZG9iZSBpbXBsZW1lbnRhdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBhODVkZWNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWInIFx0XG5cclx2JykKKworICAgRGVjb2RlIGFuIEFzY2lpODUgZW5jb2RlZCBieXRlIHN0cmluZy4KKworICAgKnMqIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlCisgICBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuCisgICBUaGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqYWRvYmUqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGluIEFkb2JlIEFzY2lpODUgZm9ybWF0CisgICAoaS5lLiBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAqaWdub3JlY2hhcnMqIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBpZ25vcmUKKyAgIGZyb20gdGhlIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkKKyAgIGRlZmF1bHQgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVlbmNvZGUocywgcGFkPUZhbHNlKQorCisgICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBiYXNlODUsIGFzIHVzZWQgaW4gZS5nLiBnaXQtc3R5bGUgYmluYXJ5CisgICBkaWZmcy4KKworICAgSWYgKnBhZCogaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcXDAiIHNvIGl0cyBsZW5ndGggaXMgYQorICAgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVkZWNvZGUoYikKKworICAgRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgc3RyaW5nLiAgUGFkZGluZyBpcyBpbXBsaWNpdGx5IHJlbW92ZWQsIGlmCisgICBuZWNlc3NhcnkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG5vdGU6OgorICAgQm90aCBCYXNlODUgYW5kIEFzY2lpODUgaGF2ZSBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDUgdG8gNCAoNSBCYXNlODUgb3IKKyAgIEFzY2lpODUgY2hhcmFjdGVycyBjYW4gZW5jb2RlIDQgYmluYXJ5IGJ5dGVzKSwgd2hpbGUgdGhlIGJldHRlci1rbm93bgorICAgQmFzZTY0IGhhcyBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDYgdG8gNC4gIFRoZXkgYXJlIHRoZXJlZm9yZSBtb3JlCisgICBlZmZpY2llbnQgd2hlbiBzcGFjZSBleHBlbnNpdmUuICBUaGV5IGRpZmZlciBieSBkZXRhaWxzIHN1Y2ggYXMgdGhlCisgICBjaGFyYWN0ZXIgbWFwIHVzZWQgZm9yIGVuY29kaW5nLgorCisKIFRoZSBsZWdhY3kgaW50ZXJmYWNlOgogCiAuLiBmdW5jdGlvbjo6IGRlY29kZShpbnB1dCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYnoyLnJzdCBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKaW5kZXggOTVhNWFiYi4uOTAyN2EzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYnoyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iejIucnN0CkBAIC0zNyw4ICszNyw4IEBACiAgICBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAndydgYCwgYGAnd2InYGAsCi0gICBgYCdhJ2BgLCBvciBgYCdhYidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCd3dCdgYCwgb3IgYGAnYXQnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAneCdgYCwgYGAneGInYGAsIGBgJ2EnYGAgb3IgYGAnYWInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ3d0J2BgLCBgYCd4dCdgYCwgb3IgYGAnYXQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDEgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBCWjJGaWxlYCBjb25zdHJ1Y3Rvci4KQEAgLTU0LDYgKzU0LDkgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KKwogCiAuLiBjbGFzczo6IEJaMkZpbGUoZmlsZW5hbWUsIG1vZGU9J3InLCBidWZmZXJpbmc9Tm9uZSwgY29tcHJlc3NsZXZlbD05KQogCkBAIC02NCw4ICs2Nyw5IEBACiAgICBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIGBgJ3InYGAgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCBgYCd3J2BgIGZvcgotICAgb3ZlcndyaXRpbmcsIG9yIGBgJ2EnYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcwotICAgYGAncmInYGAsIGBgJ3diJ2BgLCBhbmQgYGAnYWInYGAgcmVzcGVjdGl2ZWx5LgorICAgb3ZlcndyaXRpbmcsIGBgJ3gnYGAgZm9yIGV4Y2x1c2l2ZSBjcmVhdGlvbiwgb3IgYGAnYSdgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZQorICAgY2FuIGVxdWl2YWxlbnRseSBiZSBnaXZlbiBhcyBgYCdyYidgYCwgYGAnd2InYGAsIGBgJ3hiJ2BgIGFuZCBgYCdhYidgYAorICAgcmVzcGVjdGl2ZWx5LgogCiAgICBJZiAqZmlsZW5hbWUqIGlzIGEgZmlsZSBvYmplY3QgKHJhdGhlciB0aGFuIGFuIGFjdHVhbCBmaWxlIG5hbWUpLCBhIG1vZGUgb2YKICAgIGBgJ3cnYGAgZG9lcyBub3QgdHJ1bmNhdGUgdGhlIGZpbGUsIGFuZCBpcyBpbnN0ZWFkIGVxdWl2YWxlbnQgdG8gYGAnYSdgYC4KQEAgLTEwOCw2ICsxMTIsOSBAQAogICAgICAgVGhlIGBgJ2EnYGAgKGFwcGVuZCkgbW9kZSB3YXMgYWRkZWQsIGFsb25nIHdpdGggc3VwcG9ydCBmb3IgcmVhZGluZwogICAgICAgbXVsdGktc3RyZWFtIGZpbGVzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgJ3gnYGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZSB3YXMgYWRkZWQuCisKIAogSW5jcmVtZW50YWwgKGRlKWNvbXByZXNzaW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvZGUucnN0IGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKaW5kZXggZTg2OTAwNC4uNWI1ZDdjYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29kZS5yc3QKQEAgLTEzMiwxMiArMTMyLDE1IEBACiAKIC4uIG1ldGhvZDo6IEludGVyYWN0aXZlQ29uc29sZS5pbnRlcmFjdChiYW5uZXI9Tm9uZSkKIAotICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsIGJhbm5lciBhcmd1bWVudAorICAgQ2xvc2VseSBlbXVsYXRlIHRoZSBpbnRlcmFjdGl2ZSBQeXRob24gY29uc29sZS4gVGhlIG9wdGlvbmFsICpiYW5uZXIqIGFyZ3VtZW50CiAgICBzcGVjaWZ5IHRoZSBiYW5uZXIgdG8gcHJpbnQgYmVmb3JlIHRoZSBmaXJzdCBpbnRlcmFjdGlvbjsgYnkgZGVmYXVsdCBpdCBwcmludHMgYQogICAgYmFubmVyIHNpbWlsYXIgdG8gdGhlIG9uZSBwcmludGVkIGJ5IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIsIGZvbGxvd2VkCiAgICBieSB0aGUgY2xhc3MgbmFtZSBvZiB0aGUgY29uc29sZSBvYmplY3QgaW4gcGFyZW50aGVzZXMgKHNvIGFzIG5vdCB0byBjb25mdXNlCiAgICB0aGlzIHdpdGggdGhlIHJlYWwgaW50ZXJwcmV0ZXIgLS0gc2luY2UgaXQncyBzbyBjbG9zZSEpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVG8gc3VwcHJlc3MgcHJpbnRpbmcgYW55IGJhbm5lciwgcGFzcyBhbiBlbXB0eSBzdHJpbmcuCisKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLnB1c2gobGluZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggMDA5YWUyNi4uODQzZGUyNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC0zNjUsMTggKzM2NSwyMyBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIDpwZXA6YDM4M2AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIGEgc2luZ2xlIGNvZGVjOgorSW4gYWRkaXRpb24sIHRoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIHNwZWNpZmljIHRvIFVuaWNvZGUgZW5jb2RpbmcKK3NjaGVtZXM6CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXxgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCAgIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAotfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlcyBpbiBVVEYtOC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3xgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCwgdXRmLTE2LCB1dGYtMzIsIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAorfCAgICAgICAgICAgICAgICAgICB8IHV0Zi0xNi1iZSwgdXRmLTE2LWxlLCAgfCBjb2RlcyBpbiBhbGwgdGhlIFVuaWNvZGUgZW5jb2Rpbmcgc2NoZW1lcy58Cit8ICAgICAgICAgICAgICAgICAgIHwgdXRmLTMyLWJlLCB1dGYtMzItbGUgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKICAgIFRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgYW5kIGBgJ3N1cnJvZ2F0ZXBhc3MnYGAgZXJyb3IgaGFuZGxlcnMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgYGAnc3Vycm9nYXRlcGFzcydgYCBlcnJvciBoYW5kbGVycyBub3cgd29ya3Mgd2l0aCB1dGYtMTZcKiBhbmQgdXRmLTMyXCogY29kZWNzLgorCiBUaGUgc2V0IG9mIGFsbG93ZWQgdmFsdWVzIGNhbiBiZSBleHRlbmRlZCB2aWEgOm1ldGg6YHJlZ2lzdGVyX2Vycm9yYC4KIAogCkBAIC0xMDIyLDYgKzEwMjcsMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMDI2ICAgICAgICAgIHwgaWJtMTAyNiAgICAgICAgICAgICAgICAgICAgICAgIHwgVHVya2lzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3AxMTI1ICAgICAgICAgIHwgMTEyNSwgaWJtMTEyNSwgY3A4NjZ1LCBydXNjaWkgIHwgVWtyYWluaWFuICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmFkZGVkOjogMy40ICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMTQwICAgICAgICAgIHwgaWJtMTE0MCAgICAgICAgICAgICAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3AxMjUwICAgICAgICAgIHwgd2luZG93cy0xMjUwICAgICAgICAgICAgICAgICAgIHwgQ2VudHJhbCBhbmQgRWFzdGVybiBFdXJvcGUgICAgIHwKQEAgLTExNjcsNiArMTE3NiwxMiBAQAogfCB1dGZfOF9zaWcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbGwgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBlbmNvZGVycyBubyBsb25nZXIgYWxsb3cgc3Vycm9nYXRlIGNvZGUgcG9pbnRzCisgICAoVStEODAwLS1VK0RGRkYpIHRvIGJlIGVuY29kZWQuICBUaGUgdXRmLTMyXCogZGVjb2RlcnMgbm8gbG9uZ2VyIGRlY29kZQorICAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4KKworCiBQeXRob24gU3BlY2lmaWMgRW5jb2RpbmdzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTExNzcsNiArMTE5Miw5IEBACiBhcmJpdHJhcnkgZGF0YSB0cmFuc2Zvcm1zIHJhdGhlciB0aGFuIGp1c3QgdGV4dCBlbmNvZGluZ3MpLiAgRm9yIGFzeW1tZXRyaWMKIGNvZGVjcywgdGhlIHN0YXRlZCBwdXJwb3NlIGRlc2NyaWJlcyB0aGUgZW5jb2RpbmcgZGlyZWN0aW9uLgogCitUZXh0IEVuY29kaW5ncworXl5eXl5eXl5eXl5eXl4KKwogVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBieXRlc2AgZW5jb2RpbmcgYW5kCiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIHRvIDpjbGFzczpgc3RyYCBkZWNvZGluZywgc2ltaWxhciB0byB0aGUgVW5pY29kZSB0ZXh0CiBlbmNvZGluZ3MuCkBAIC0xMjIzLDU3ICsxMjQxLDgzIEBACiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAuLiBkZXByZWNhdGVkOjogMy4zICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBieXRlc2AKLW1hcHBpbmdzLgorLi4gX2JpbmFyeS10cmFuc2Zvcm1zOgorCitCaW5hcnkgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSBiaW5hcnkgdHJhbnNmb3JtczogOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YAordG8gOmNsYXNzOmBieXRlc2AgbWFwcGluZ3MuCiAKIAotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfEx8CisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THxMfAogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyL2RlY29kZXIgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBiYXNlNjQuYjY0ZW5jb2RlYCwgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBpbmNsdWRlcyBhIHRyYWlsaW5nICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYGAnXG4nYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYnoyX2NvZGVjICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AsICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgYnoyICAgICAgICAgICAgICAgICB8IDptZXRoOmBiejIuZGVjb21wcmVzc2AgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgaGV4X2NvZGVjICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgaGV4YWRlY2ltYWwgICAgICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBxdW9wcmlfY29kZWMgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AsIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgIHwgOm1ldGg6YHF1b3ByaS5kZWNvZGVzdHJpbmdgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB1dV9jb2RlYyAgICAgICAgICAgICB8IENvbnZlcnQgdGhlIG9wZXJhbmQgdXNpbmcgfCA6bWV0aDpgdXUuZW5jb2RlYCwgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCB6bGliX2NvZGVjICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgemxpYi5jb21wcmVzc2AsICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICAgIHwgQWxpYXNlcyAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgICAgfCBFbmNvZGVyIC8gZGVjb2RlciAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBiYXNlNjRfY29kZWMgWyNiNjRdXyB8IGJhc2U2NCwgYmFzZV82NCAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgICAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGJhc2U2NCAodGhlIHJlc3VsdCBhbHdheXMgICAgfCA6bWV0aDpgYmFzZTY0LmI2NGRlY29kZWAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgaW5jbHVkZXMgYSB0cmFpbGluZyAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhY2NlcHRzIGFueSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgYXMgaW5wdXQgZm9yIGVuY29kaW5nIGFuZCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBkZWNvZGluZyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYnoyX2NvZGVjICAgICAgICAgICAgfCBiejIgICAgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmBiejIuY29tcHJlc3NgIC8gICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaGV4X2NvZGVjICAgICAgICAgICAgfCBoZXggICAgICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvICAgICAgICAgICB8IDptZXRoOmBiYXNlNjQuYjE2ZW5jb2RlYCAvICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHJlcHJlc2VudGF0aW9uLCB3aXRoIHR3byAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgZGlnaXRzIHBlciBieXRlICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgcXVvcHJpLCAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgICAgfCA6bWV0aDpgcXVvcHJpLmVuY29kZXN0cmluZ2AgL3wKK3wgICAgICAgICAgICAgICAgICAgICAgfCBxdW90ZWRwcmludGFibGUsIHwgcXVvdGVkIHByaW50YWJsZSAgICAgICAgICAgICB8IDptZXRoOmBxdW9wcmkuZGVjb2Rlc3RyaW5nYCAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZF9wcmludGFibGUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgdXVfY29kZWMgICAgICAgICAgICAgfCB1dSAgICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyAgICB8IDptZXRoOmB1dS5lbmNvZGVgIC8gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1dWVuY29kZSAgICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHV1LmRlY29kZWAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgemxpYl9jb2RlYyAgICAgICAgICAgfCB6aXAsIHpsaWIgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCAvICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCB1c2luZyBnemlwICAgICAgICAgICAgICAgICAgIHwgOm1ldGg6YHpsaWIuZGVjb21wcmVzc2AgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotLi4gWyNiNjRdIFJhdGhlciB0aGFuIGFjY2VwdGluZyBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCwKLSAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhY2NlcHRzIG9ubHkgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IKLSAgIGVuY29kaW5nIGFuZCBvbmx5IDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGFuZCBBU0NJSS1vbmx5Ci0gICBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvciBkZWNvZGluZwotCi0KLVRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgc3RyYCBtYXBwaW5ncy4KLQotLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBDb2RlYyAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKLSs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IHJvdF8xMyAgICAgICAgICAgICB8IFJldHVybnMgdGhlIENhZXNhci1jeXBoZXIgfAotfCAgICAgICAgICAgICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisuLiBbI2I2NF0gSW4gYWRkaXRpb24gdG8gOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCwKKyAgIGBgJ2Jhc2U2NF9jb2RlYydgYCBhbHNvIGFjY2VwdHMgQVNDSUktb25seSBpbnN0YW5jZXMgb2YgOmNsYXNzOmBzdHJgIGZvcgorICAgZGVjb2RpbmcKIAogLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICBieXRlcy10by1ieXRlcyBhbmQgc3RyLXRvLXN0ciBjb2RlY3MuCisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYWxpYXNlcyBmb3IgdGhlIGJpbmFyeSB0cmFuc2Zvcm1zLgorCisKKy4uIF90ZXh0LXRyYW5zZm9ybXM6CisKK1RleHQgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgY29kZWMgcHJvdmlkZXMgYSB0ZXh0IHRyYW5zZm9ybTogYSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgCittYXBwaW5nLgorCisuLiB0YWJ1bGFyY29sdW1uczo6IHxsfGx8THwKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICB8IEFsaWFzZXMgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCByb3RfMTMgICAgICAgICAgICAgfCByb3QxMyAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBgYHJvdF8xM2BgIHRleHQgdHJhbnNmb3JtLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgUmVzdG9yYXRpb24gb2YgdGhlIGBgcm90MTNgYCBhbGlhcy4KIAogCiA6bW9kOmBlbmNvZGluZ3MuaWRuYWAgLS0tIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbiBBcHBsaWNhdGlvbnMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CmluZGV4IDRiMjE5MzIuLjM1NmY0NzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdApAQCAtMTUsNyArMTUsNyBAQAogICAgaW1wb3J0IGl0ZXJ0b29scwogICAgX19uYW1lX18gPSAnPGRvY3Rlc3Q+JwogCi0qKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb2xsZWN0aW9ucy9hYmMucHlgCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9fY29sbGVjdGlvbnNfYWJjLnB5YAogCiAtLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggNzY0NWYyYS4uODBjNmM3NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtNzYsMTQgKzc2LDE5IEBACiAgICAgICAgIGJlIG1vZGlmaWVkIHRvIGNoYW5nZSB3aGljaCBtYXBwaW5ncyBhcmUgc2VhcmNoZWQuICBUaGUgbGlzdCBzaG91bGQKICAgICAgICAgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIG1hcHBpbmcuCiAKLSAgICAuLiBtZXRob2Q6OiBuZXdfY2hpbGQoKQorICAgIC4uIG1ldGhvZDo6IG5ld19jaGlsZChtPU5vbmUpCiAKLSAgICAgICAgUmV0dXJucyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGEgbmV3IDpjbGFzczpgZGljdGAgZm9sbG93ZWQgYnkKLSAgICAgICAgYWxsIG9mIHRoZSBtYXBzIGluIHRoZSBjdXJyZW50IGluc3RhbmNlLiAgQSBjYWxsIHRvIGBgZC5uZXdfY2hpbGQoKWBgIGlzCi0gICAgICAgIGVxdWl2YWxlbnQgdG86IGBgQ2hhaW5NYXAoe30sICpkLm1hcHMpYGAuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgorICAgICAgICBSZXR1cm5zIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYSBuZXcgbWFwIGZvbGxvd2VkIGJ5CisgICAgICAgIGFsbCBvZiB0aGUgbWFwcyBpbiB0aGUgY3VycmVudCBpbnN0YW5jZS4gIElmIGBgbWBgIGlzIHNwZWNpZmllZCwKKyAgICAgICAgaXQgYmVjb21lcyB0aGUgbmV3IG1hcCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpc3Qgb2YgbWFwcGluZ3M7IGlmIG5vdAorICAgICAgICBzcGVjaWZpZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZCwgc28gdGhhdCBhIGNhbGwgdG8gYGBkLm5ld19jaGlsZCgpYGAKKyAgICAgICAgaXMgZXF1aXZhbGVudCB0bzogYGBDaGFpbk1hcCh7fSwgKmQubWFwcylgYC4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgZm9yCiAgICAgICAgIGNyZWF0aW5nIHN1YmNvbnRleHRzIHRoYXQgY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBhbHRlcmluZyB2YWx1ZXMgaW4gYW55CiAgICAgICAgIG9mIHRoZSBwYXJlbnQgbWFwcGluZ3MuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgVGhlIG9wdGlvbmFsIGBgbWBgIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKICAgICAuLiBhdHRyaWJ1dGU6OiBwYXJlbnRzCiAKICAgICAgICAgUHJvcGVydHkgcmV0dXJuaW5nIGEgbmV3IDpjbGFzczpgQ2hhaW5NYXBgIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSBtYXBzIGluCkBAIC0zNjksMTAgKzM3NCw2IEBACiAKIC4uIHNlZWFsc286OgogCi0gICAgKiBgQ291bnRlciBjbGFzcyA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NjExLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNSBhbmQgYW4gZWFybHkgYEJhZyByZWNpcGUKLSAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvPmBfIGZvciBQeXRob24gMi40LgotCiAgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXwogICAgICAgaW4gU21hbGx0YWxrLgogCkBAIC05MTUsMTEgKzkxNiw2IEBACiAgICAgPj4+IGNsYXNzIFN0YXR1czoKICAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKIAotLi4gc2VlYWxzbzo6Ci0KLSAgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCi0KICAgICAqIGBSZWNpcGUgZm9yIG5hbWVkIHR1cGxlIGFic3RyYWN0IGJhc2UgY2xhc3Mgd2l0aCBhIG1ldGFjbGFzcyBtaXgtaW4KICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCiAgICAgICBieSBKYW4gS2FsaXN6ZXdza2kuICBCZXNpZGVzIHByb3ZpZGluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgZm9yCkBAIC05ODIsMTAgKzk3OCw2IEBACiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCiBzZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKLS4uIHNlZWFsc286OgotCi0gICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCi0gICAgdGhhdCBydW5zIG9uIFB5dGhvbiAyLjQgb3IgbGF0ZXIuCiAKIDpjbGFzczpgT3JkZXJlZERpY3RgIEV4YW1wbGVzIGFuZCBSZWNpcGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CmluZGV4IGYyYTUxMmYuLjBkZTI4MWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKQEAgLTIwLDcgKzIwLDYgQEAKICAgIHN1YnByb2Nlc3MucnN0CiAgICBzY2hlZC5yc3QKICAgIHF1ZXVlLnJzdAotICAgc2VsZWN0LnJzdAogCiAKIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnQgbW9kdWxlcyBmb3Igc29tZSBvZiB0aGUgYWJvdmUgc2VydmljZXM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAppbmRleCBjMmY5MmIzLi45MzUzOGU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTE2NCw2ICsxNjQsOSBAQAogYWxsb3dzIGl0IHRvIHNpZGUtc3RlcCB0aGUgOnRlcm06YEdsb2JhbCBJbnRlcnByZXRlciBMb2NrYCBidXQgYWxzbyBtZWFucyB0aGF0CiBvbmx5IHBpY2tsYWJsZSBvYmplY3RzIGNhbiBiZSBleGVjdXRlZCBhbmQgcmV0dXJuZWQuCiAKK1RoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIG11c3QgYmUgaW1wb3J0YWJsZSBieSB3b3JrZXIgc3VicHJvY2Vzc2VzLiBUaGlzIG1lYW5zCit0aGF0IDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCBub3Qgd29yayBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKIENhbGxpbmcgOmNsYXNzOmBFeGVjdXRvcmAgb3IgOmNsYXNzOmBGdXR1cmVgIG1ldGhvZHMgZnJvbSBhIGNhbGxhYmxlIHN1Ym1pdHRlZAogdG8gYSA6Y2xhc3M6YFByb2Nlc3NQb29sRXhlY3V0b3JgIHdpbGwgcmVzdWx0IGluIGRlYWRsb2NrLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CmluZGV4IGZiYTQ4ZjQuLjgyZWZkMGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0CkBAIC05NSw2ICs5NSw4MyBAQAogICAgYGBwYWdlLmNsb3NlKClgYCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgaXMgZXhpdGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogc3VwcHJlc3MoKmV4Y2VwdGlvbnMpCisKKyAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHN1cHByZXNzZXMgYW55IG9mIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9ucworICAgaWYgdGhleSBvY2N1ciBpbiB0aGUgYm9keSBvZiBhIHdpdGggc3RhdGVtZW50IGFuZCB0aGVuIHJlc3VtZXMgZXhlY3V0aW9uCisgICB3aXRoIHRoZSBmaXJzdCBzdGF0ZW1lbnQgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIHdpdGggc3RhdGVtZW50LgorCisgICBBcyB3aXRoIGFueSBvdGhlciBtZWNoYW5pc20gdGhhdCBjb21wbGV0ZWx5IHN1cHByZXNzZXMgZXhjZXB0aW9ucywgdGhpcworICAgY29udGV4dCBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkIG9ubHkgdG8gY292ZXIgdmVyeSBzcGVjaWZpYyBlcnJvcnMgd2hlcmUKKyAgIHNpbGVudGx5IGNvbnRpbnVpbmcgd2l0aCBwcm9ncmFtIGV4ZWN1dGlvbiBpcyBrbm93biB0byBiZSB0aGUgcmlnaHQKKyAgIHRoaW5nIHRvIGRvLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IHN1cHByZXNzCisKKyAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lZmlsZS50bXAnKQorCisgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZW90aGVyZmlsZS50bXAnKQorCisgICBUaGlzIGNvZGUgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZWZpbGUudG1wJykKKyAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgIHBhc3MKKworICAgICAgIHRyeToKKyAgICAgICAgICAgb3MucmVtb3ZlKCdzb21lb3RoZXJmaWxlLnRtcCcpCisgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICBwYXNzCisKKyAgIFRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIDpyZWY6YHJlZW50cmFudCA8cmVlbnRyYW50LWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHJlZGlyZWN0X3N0ZG91dChuZXdfdGFyZ2V0KQorCisgICBDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIDpkYXRhOmBzeXMuc3Rkb3V0YCB0bworICAgYW5vdGhlciBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3QuCisKKyAgIFRoaXMgdG9vbCBhZGRzIGZsZXhpYmlsaXR5IHRvIGV4aXN0aW5nIGZ1bmN0aW9ucyBvciBjbGFzc2VzIHdob3NlIG91dHB1dAorICAgaXMgaGFyZHdpcmVkIHRvIHN0ZG91dC4KKworICAgRm9yIGV4YW1wbGUsIHRoZSBvdXRwdXQgb2YgOmZ1bmM6YGhlbHBgIG5vcm1hbGx5IGlzIHNlbnQgdG8gKnN5cy5zdGRvdXQqLgorICAgWW91IGNhbiBjYXB0dXJlIHRoYXQgb3V0cHV0IGluIGEgc3RyaW5nIGJ5IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gYQorICAgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0OjoKKworICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgIGhlbHAocG93KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gYSBmaWxlIG9uIGRpc2ssIHJlZGlyZWN0IHRoZSBvdXRwdXQKKyAgIHRvIGEgcmVndWxhciBmaWxlOjoKKworICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIFRvIHNlbmQgdGhlIG91dHB1dCBvZiA6ZnVuYzpgaGVscGAgdG8gKnN5cy5zdGRlcnIqOjoKKworICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChzeXMuc3RkZXJyKToKKyAgICAgICAgICAgIGhlbHAocG93KQorCisgICBOb3RlIHRoYXQgdGhlIGdsb2JhbCBzaWRlIGVmZmVjdCBvbiA6ZGF0YTpgc3lzLnN0ZG91dGAgbWVhbnMgdGhhdCB0aGlzCisgICBjb250ZXh0IG1hbmFnZXIgaXMgbm90IHN1aXRhYmxlIGZvciB1c2UgaW4gbGlicmFyeSBjb2RlIGFuZCBtb3N0IHRocmVhZGVkCisgICBhcHBsaWNhdGlvbnMuIEl0IGFsc28gaGFzIG5vIGVmZmVjdCBvbiB0aGUgb3V0cHV0IG9mIHN1YnByb2Nlc3Nlcy4KKyAgIEhvd2V2ZXIsIGl0IGlzIHN0aWxsIGEgdXNlZnVsIGFwcHJvYWNoIGZvciBtYW55IHV0aWxpdHkgc2NyaXB0cy4KKworICAgVGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgOnJlZjpgcmV1c2FibGUgYnV0IG5vdCByZWVudHJhbnQgPHJldXNhYmxlLWNtcz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IENvbnRleHREZWNvcmF0b3IoKQogCiAgICBBIGJhc2UgY2xhc3MgdGhhdCBlbmFibGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvIGFsc28gYmUgdXNlZCBhcyBhIGRlY29yYXRvci4KQEAgLTUyMCwzICs1OTcsMTUzIEBACiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uIDprZXl3b3JkOmB3aXRoYAogICAgICAgc3RhdGVtZW50LgogCisuLiBfc2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtczoKKworU2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBjb250ZXh0IG1hbmFnZXJzIGFyZSB3cml0dGVuIGluIGEgd2F5IHRoYXQgbWVhbnMgdGhleSBjYW4gb25seSBiZQordXNlZCBlZmZlY3RpdmVseSBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgb25jZS4gVGhlc2Ugc2luZ2xlIHVzZQorY29udGV4dCBtYW5hZ2VycyBtdXN0IGJlIGNyZWF0ZWQgYWZyZXNoIGVhY2ggdGltZSB0aGV5J3JlIHVzZWQgLQorYXR0ZW1wdGluZyB0byB1c2UgdGhlbSBhIHNlY29uZCB0aW1lIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24gb3IKK290aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkuCisKK1RoaXMgY29tbW9uIGxpbWl0YXRpb24gbWVhbnMgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWR2aXNhYmxlIHRvIGNyZWF0ZQorY29udGV4dCBtYW5hZ2VycyBkaXJlY3RseSBpbiB0aGUgaGVhZGVyIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50Cit3aGVyZSB0aGV5IGFyZSB1c2VkIChhcyBzaG93biBpbiBhbGwgb2YgdGhlIHVzYWdlIGV4YW1wbGVzIGFib3ZlKS4KKworRmlsZXMgYXJlIGFuIGV4YW1wbGUgb2YgZWZmZWN0aXZlbHkgc2luZ2xlIHVzZSBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZQordGhlIGZpcnN0IDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2lsbCBjbG9zZSB0aGUgZmlsZSwgcHJldmVudGluZyBhbnkKK2Z1cnRoZXIgSU8gb3BlcmF0aW9ucyB1c2luZyB0aGF0IGZpbGUgb2JqZWN0LgorCitDb250ZXh0IG1hbmFnZXJzIGNyZWF0ZWQgdXNpbmcgOmZ1bmM6YGNvbnRleHRtYW5hZ2VyYCBhcmUgYWxzbyBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzLCBhbmQgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZmFpbGluZwordG8geWllbGQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWU6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKyAgICA+Pj4gQGNvbnRleHRtYW5hZ2VyCisgICAgLi4uIGRlZiBzaW5nbGV1c2UoKToKKyAgICAuLi4gICAgIHByaW50KCJCZWZvcmUiKQorICAgIC4uLiAgICAgeWllbGQKKyAgICAuLi4gICAgIHByaW50KCJBZnRlciIpCisgICAgLi4uCisgICAgPj4+IGNtID0gc2luZ2xldXNlKCkKKyAgICA+Pj4gd2l0aCBjbToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICBCZWZvcmUKKyAgICBBZnRlcgorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICBwYXNzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBkaWRuJ3QgeWllbGQKKworCisuLiBfcmVlbnRyYW50LWNtczoKKworUmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vcmUgc29waGlzdGljYXRlZCBjb250ZXh0IG1hbmFnZXJzIG1heSBiZSAicmVlbnRyYW50Ii4gVGhlc2UgY29udGV4dAorbWFuYWdlcnMgY2FuIG5vdCBvbmx5IGJlIHVzZWQgaW4gbXVsdGlwbGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudHMsCitidXQgbWF5IGFsc28gYmUgdXNlZCAqaW5zaWRlKiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdGhhdCBpcyBhbHJlYWR5Cit1c2luZyB0aGUgc2FtZSBjb250ZXh0IG1hbmFnZXIuCisKKzpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlciwgYXMgYXJlCis6ZnVuYzpgc3VwcHJlc3NgIGFuZCA6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YC4gSGVyZSdzIGEgdmVyeSBzaW1wbGUgZXhhbXBsZSBvZgorcmVlbnRyYW50IHVzZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQKKyAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gc3RyZWFtID0gU3RyaW5nSU8oKQorICAgID4+PiB3cml0ZV90b19zdHJlYW0gPSByZWRpcmVjdF9zdGRvdXQoc3RyZWFtKQorICAgID4+PiB3aXRoIHdyaXRlX3RvX3N0cmVhbToKKyAgICAuLi4gICAgIHByaW50KCJUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQiKQorICAgIC4uLiAgICAgd2l0aCB3cml0ZV90b19zdHJlYW06CisgICAgLi4uICAgICAgICAgcHJpbnQoIlRoaXMgaXMgYWxzbyB3cml0dGVuIHRvIHRoZSBzdHJlYW0iKQorICAgIC4uLgorICAgID4+PiBwcmludCgiVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dCIpCisgICAgVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dAorICAgID4+PiBwcmludChzdHJlYW0uZ2V0dmFsdWUoKSkKKyAgICBUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQKKyAgICBUaGlzIGlzIGFsc28gd3JpdHRlbiB0byB0aGUgc3RyZWFtCisKK1JlYWwgd29ybGQgZXhhbXBsZXMgb2YgcmVlbnRyYW5jeSBhcmUgbW9yZSBsaWtlbHkgdG8gaW52b2x2ZSBtdWx0aXBsZQorZnVuY3Rpb25zIGNhbGxpbmcgZWFjaCBvdGhlciBhbmQgaGVuY2UgYmUgZmFyIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzCitleGFtcGxlLgorCitOb3RlIGFsc28gdGhhdCBiZWluZyByZWVudHJhbnQgaXMgKm5vdCogdGhlIHNhbWUgdGhpbmcgYXMgYmVpbmcgdGhyZWFkIHNhZmUuCis6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YCwgZm9yIGV4YW1wbGUsIGlzIGRlZmluaXRlbHkgbm90IHRocmVhZCBzYWZlLCBhcyBpdAorbWFrZXMgYSBnbG9iYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBzeXN0ZW0gc3RhdGUgYnkgYmluZGluZyA6ZGF0YTpgc3lzLnN0ZG91dGAKK3RvIGEgZGlmZmVyZW50IHN0cmVhbS4KKworCisuLiBfcmV1c2FibGUtY21zOgorCitSZXVzYWJsZSBjb250ZXh0IG1hbmFnZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0Rpc3RpbmN0IGZyb20gYm90aCBzaW5nbGUgdXNlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgInJldXNhYmxlIgorY29udGV4dCBtYW5hZ2VycyAob3IsIHRvIGJlIGNvbXBsZXRlbHkgZXhwbGljaXQsICJyZXVzYWJsZSwgYnV0IG5vdAorcmVlbnRyYW50IiBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgYWxzbworcmV1c2FibGUpLiBUaGVzZSBjb250ZXh0IG1hbmFnZXJzIHN1cHBvcnQgYmVpbmcgdXNlZCBtdWx0aXBsZSB0aW1lcywgYnV0Cit3aWxsIGZhaWwgKG9yIG90aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkpIGlmIHRoZSBzcGVjaWZpYyBjb250ZXh0IG1hbmFnZXIKK2luc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGNvbnRhaW5pbmcgd2l0aCBzdGF0ZW1lbnQuCisKKzpjbGFzczpgdGhyZWFkaW5nLkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZXVzYWJsZSwgYnV0IG5vdCByZWVudHJhbnQsCitjb250ZXh0IG1hbmFnZXIgKGZvciBhIHJlZW50cmFudCBsb2NrLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlCis6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AgaW5zdGVhZCkuCisKK0Fub3RoZXIgZXhhbXBsZSBvZiBhIHJldXNhYmxlLCBidXQgbm90IHJlZW50cmFudCwgY29udGV4dCBtYW5hZ2VyIGlzCis6Y2xhc3M6YEV4aXRTdGFja2AsIGFzIGl0IGludm9rZXMgKmFsbCogY3VycmVudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzCit3aGVuIGxlYXZpbmcgYW55IHdpdGggc3RhdGVtZW50LCByZWdhcmRsZXNzIG9mIHdoZXJlIHRob3NlIGNhbGxiYWNrcword2VyZSBhZGRlZDo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKKyAgICA+Pj4gc3RhY2sgPSBFeGl0U3RhY2soKQorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBmaXJzdCBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIGZpcnN0IGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgZmlyc3QgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGZpcnN0IGNvbnRleHQKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgc2Vjb25kIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBzZWNvbmQgY29udGV4dAorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0IikKKyAgICAuLi4gICAgIHdpdGggc3RhY2s6CisgICAgLi4uICAgICAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgICAgICBwcmludCgiTGVhdmluZyBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIG91dGVyIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0CisgICAgTGVhdmluZyBvdXRlciBjb250ZXh0CisKK0FzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZXhhbXBsZSBzaG93cywgcmV1c2luZyBhIHNpbmdsZSBzdGFjayBvYmplY3QgYWNyb3NzCittdWx0aXBsZSB3aXRoIHN0YXRlbWVudHMgd29ya3MgY29ycmVjdGx5LCBidXQgYXR0ZW1wdGluZyB0byBuZXN0IHRoZW0KK3dpbGwgY2F1c2UgdGhlIHN0YWNrIHRvIGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5uZXJtb3N0IHdpdGgKK3N0YXRlbWVudCwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZGVzaXJhYmxlIGJlaGF2aW91ci4KKworVXNpbmcgc2VwYXJhdGUgOmNsYXNzOmBFeGl0U3RhY2tgIGluc3RhbmNlcyBpbnN0ZWFkIG9mIHJldXNpbmcgYSBzaW5nbGUKK2luc3RhbmNlIGF2b2lkcyB0aGF0IHByb2JsZW06OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCisgICAgPj4+IHdpdGggRXhpdFN0YWNrKCkgYXMgb3V0ZXJfc3RhY2s6CisgICAgLi4uICAgICBvdXRlcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBpbm5lcl9zdGFjazoKKyAgICAuLi4gICAgICAgICBpbm5lcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgICAgIHByaW50KCJMZWF2aW5nIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgb3V0ZXIgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dAorICAgIExlYXZpbmcgb3V0ZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CmluZGV4IGQwMzgyZTAuLjQ4YWYwODIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdApAQCAtMzAsMyArMzAsNCBAQAogICAgY29weS5yc3QKICAgIHBwcmludC5yc3QKICAgIHJlcHJsaWIucnN0CisgICBlbnVtLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0IGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CmluZGV4IDA2NWU4NTAuLmU0ZjFlYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKQEAgLTE3MCwxMCArMTcwLDEyIEBACiAgICAqIGBgMCA8PSBzZWNvbmRzIDwgMzYwMCoyNGBgICh0aGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gb25lIGRheSkKICAgICogYGAtOTk5OTk5OTk5IDw9IGRheXMgPD0gOTk5OTk5OTk5YGAKIAotICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywgdGhlIGZyYWN0aW9uYWwKLSAgIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZSBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQKLSAgIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlIGNvbnZlcnNpb24gYW5kCi0gICBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzIGxvc3QpLgorICAgSWYgYW55IGFyZ3VtZW50IGlzIGEgZmxvYXQgYW5kIHRoZXJlIGFyZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcywKKyAgIHRoZSBmcmFjdGlvbmFsIG1pY3Jvc2Vjb25kcyBsZWZ0IG92ZXIgZnJvbSBhbGwgYXJndW1lbnRzIGFyZQorICAgY29tYmluZWQgYW5kIHRoZWlyIHN1bSBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG1pY3Jvc2Vjb25kIHVzaW5nCisgICByb3VuZC1oYWxmLXRvLWV2ZW4gdGllYnJlYWtlci4gIElmIG5vIGFyZ3VtZW50IGlzIGEgZmxvYXQsIHRoZQorICAgY29udmVyc2lvbiBhbmQgbm9ybWFsaXphdGlvbiBwcm9jZXNzZXMgYXJlIGV4YWN0IChubyBpbmZvcm1hdGlvbiBpcworICAgbG9zdCkuCiAKICAgIElmIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIGRheXMgbGllcyBvdXRzaWRlIHRoZSBpbmRpY2F0ZWQgcmFuZ2UsCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYm0ucnN0IGIvRG9jL2xpYnJhcnkvZGJtLnJzdAppbmRleCA4MWEwNWM3Li5mNTQ5NmQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RibS5yc3QKQEAgLTczLDMzICs3MywzOSBAQAogc3RyaW5ncyBhcmUgdXNlZCB0aGV5IGFyZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyBiZWZvcmUKIGJlaW5nIHN0b3JlZC4KIAorVGhlc2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgYmVpbmcgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHdoaWNoCit3aWxsIGF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlbSB3aGVuIGRvbmUuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBBZGRlZCBuYXRpdmUgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUgb2JqZWN0cworICAgcmV0dXJuZWQgYnkgOmZ1bmM6YC5vcGVuYC4KKwogVGhlIGZvbGxvd2luZyBleGFtcGxlIHJlY29yZHMgc29tZSBob3N0bmFtZXMgYW5kIGEgY29ycmVzcG9uZGluZyB0aXRsZSwgIGFuZAogdGhlbiBwcmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgZGF0YWJhc2U6OgogCiAgICBpbXBvcnQgZGJtCiAKICAgICMgT3BlbiBkYXRhYmFzZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LgotICAgZGIgPSBkYm0ub3BlbignY2FjaGUnLCAnYycpCisgICB3aXRoIGRibS5vcGVuKCdjYWNoZScsICdjJykgYXMgZGI6CiAKLSAgICMgUmVjb3JkIHNvbWUgdmFsdWVzCi0gICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJwotICAgZGJbJ3d3dy5weXRob24ub3JnJ10gPSAnUHl0aG9uIFdlYnNpdGUnCi0gICBkYlsnd3d3LmNubi5jb20nXSA9ICdDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBSZWNvcmQgc29tZSB2YWx1ZXMKKyAgICAgICBkYltiJ2hlbGxvJ10gPSBiJ3RoZXJlJworICAgICAgIGRiWyd3d3cucHl0aG9uLm9yZyddID0gJ1B5dGhvbiBXZWJzaXRlJworICAgICAgIGRiWyd3d3cuY25uLmNvbSddID0gJ0NhYmxlIE5ld3MgTmV0d29yaycKIAotICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgotICAgYXNzZXJ0IGRiW2Ind3d3LnB5dGhvbi5vcmcnXSA9PSBiJ1B5dGhvbiBXZWJzaXRlJwotICAgIyBOb3RpY2UgaG93IHRoZSB2YWx1ZSBpcyBub3cgaW4gYnl0ZXMuCi0gICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCisgICAgICAgIyBOb3RlIHRoYXQgdGhlIGtleXMgYXJlIGNvbnNpZGVyZWQgYnl0ZXMgbm93LgorICAgICAgIGFzc2VydCBkYltiJ3d3dy5weXRob24ub3JnJ10gPT0gYidQeXRob24gV2Vic2l0ZScKKyAgICAgICAjIE5vdGljZSBob3cgdGhlIHZhbHVlIGlzIG5vdyBpbiBieXRlcy4KKyAgICAgICBhc3NlcnQgZGJbJ3d3dy5jbm4uY29tJ10gPT0gYidDYWJsZSBOZXdzIE5ldHdvcmsnCiAKLSAgICMgT2Z0ZW4tdXNlZCBtZXRob2RzIG9mIHRoZSBkaWN0IGludGVyZmFjZSB3b3JrIHRvby4KLSAgIHByaW50KGRiLmdldCgncHl0aG9uLm9yZycsIGInbm90IHByZXNlbnQnKSkKKyAgICAgICAjIE9mdGVuLXVzZWQgbWV0aG9kcyBvZiB0aGUgZGljdCBpbnRlcmZhY2Ugd29yayB0b28uCisgICAgICAgcHJpbnQoZGIuZ2V0KCdweXRob24ub3JnJywgYidub3QgcHJlc2VudCcpKQogCi0gICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAotICAgIyBsaWtlbHkgYSBUeXBlRXJyb3IpLgotICAgZGJbJ3d3dy55YWhvby5jb20nXSA9IDQKKyAgICAgICAjIFN0b3JpbmcgYSBub24tc3RyaW5nIGtleSBvciB2YWx1ZSB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiAobW9zdAorICAgICAgICMgbGlrZWx5IGEgVHlwZUVycm9yKS4KKyAgICAgICBkYlsnd3d3LnlhaG9vLmNvbSddID0gNAogCi0gICAjIENsb3NlIHdoZW4gZG9uZS4KLSAgIGRiLmNsb3NlKCkKKyAgICMgZGIgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgd2hlbiBsZWF2aW5nIHRoZSB3aXRoIHN0YXRlbWVudC4KIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RlYnVnLnJzdCBiL0RvYy9saWJyYXJ5L2RlYnVnLnJzdAppbmRleCBjNjlmYjFjLi44OGEyZmE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGVidWcucnN0CkBAIC0xNSwzICsxNSw0IEBACiAgICBwcm9maWxlLnJzdAogICAgdGltZWl0LnJzdAogICAgdHJhY2UucnN0CisgICB0cmFjZW1hbGxvYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdCBiL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAppbmRleCAyMzY4NzY5Li4wNmU3MDQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CkBAIC0yMyw0ICsyMywzIEBACiAgICB1bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAogICAgMnRvMy5yc3QKICAgIHRlc3QucnN0Ci0gICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKaW5kZXggZWM3MTEyZC4uODI5M2Q0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXMucnN0CkBAIC0yNiw3ICsyNiw4IEBACiAgICBkZWYgbXlmdW5jKGFsaXN0KToKICAgICAgICByZXR1cm4gbGVuKGFsaXN0KQogCi10aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0IHRoZSBkaXNhc3NlbWJseSBvZiA6ZnVuYzpgbXlmdW5jYDo6Cit0aGUgZm9sbG93aW5nIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGlzYXNzZW1ibHkgb2YKKzpmdW5jOmBteWZ1bmNgOjoKIAogICAgPj4+IGRpcy5kaXMobXlmdW5jKQogICAgICAyICAgICAgICAgICAwIExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChsZW4pCkBAIC0zNiw4ICszNyw3NSBAQAogCiAoVGhlICIyIiBpcyBhIGxpbmUgbnVtYmVyKS4KIAotVGhlIDptb2Q6YGRpc2AgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50czoKK0J5dGVjb2RlIGFuYWx5c2lzCistLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgYnl0ZWNvZGUgYW5hbHlzaXMgQVBJIGFsbG93cyBwaWVjZXMgb2YgUHl0aG9uIGNvZGUgdG8gYmUgd3JhcHBlZCBpbiBhCis6Y2xhc3M6YEJ5dGVjb2RlYCBvYmplY3QgdGhhdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZQorY29tcGlsZWQgY29kZS4KKworLi4gY2xhc3M6OiBCeXRlY29kZSh4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpCisKKyAgIEFuYWx5c2UgdGhlIGJ5dGVjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2YKKyAgIHNvdXJjZSBjb2RlLCBvciBhIGNvZGUgb2JqZWN0IChhcyByZXR1cm5lZCBieSA6ZnVuYzpgY29tcGlsZWApLgorCisgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgbWFueSBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdywKKyAgIG1vc3Qgbm90YWJseSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AsIGFzIGl0ZXJhdGluZyBvdmVyIGEKKyAgIDpjbGFzczpgQnl0ZWNvZGVgIGluc3RhbmNlIHlpZWxkcyB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhcworICAgOmNsYXNzOmBJbnN0cnVjdGlvbmAgaW5zdGFuY2VzLgorCisgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgIGJlIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLgorICAgT3RoZXJ3aXNlLCB0aGUgc291cmNlIGxpbmUgaW5mb3JtYXRpb24gKGlmIGFueSkgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbQorICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKworICAgSWYgKmN1cnJlbnRfb2Zmc2V0KiBpcyBub3QgTm9uZSwgaXQgcmVmZXJzIHRvIGFuIGluc3RydWN0aW9uIG9mZnNldAorICAgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLiBTZXR0aW5nIHRoaXMgbWVhbnMgOm1ldGg6YGRpc2Agd2lsbCBkaXNwbGF5CisgICBhICJjdXJyZW50IGluc3RydWN0aW9uIiBtYXJrZXIgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIG9wY29kZS4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBmcm9tX3RyYWNlYmFjayh0YikKKworICAgICAgQ29uc3RydWN0IGEgOmNsYXNzOmBCeXRlY29kZWAgaW5zdGFuY2UgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrLAorICAgICAgc2V0dGluZyAqY3VycmVudF9vZmZzZXQqIHRvIHRoZSBpbnN0cnVjdGlvbiByZXNwb25zaWJsZSBmb3IgdGhlCisgICAgICBleGNlcHRpb24uCisKKyAgIC4uIGRhdGE6OiBjb2Rlb2JqCisKKyAgICAgIFRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKworICAgLi4gZGF0YTo6IGZpcnN0X2xpbmUKKworICAgICAgVGhlIGZpcnN0IHNvdXJjZSBsaW5lIG9mIHRoZSBjb2RlIG9iamVjdCAoaWYgYXZhaWxhYmxlKQorCisgICAuLiBtZXRob2Q6OiBkaXMoKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgdmlldyBvZiB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyAodGhlIHNhbWUgYXMKKyAgICAgIHByaW50ZWQgYnkgOmZ1bmM6YGRpc2AsIGJ1dCByZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nKS4KKworICAgLi4gbWV0aG9kOjogaW5mbygpCisKKyAgICAgIFJldHVybiBhIGZvcm1hdHRlZCBtdWx0aS1saW5lIHN0cmluZyB3aXRoIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgICAgY29kZSBvYmplY3QsIGxpa2UgOmZ1bmM6YGNvZGVfaW5mb2AuCisKK0V4YW1wbGU6OgorCisgICAgPj4+IGJ5dGVjb2RlID0gZGlzLkJ5dGVjb2RlKG15ZnVuYykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIC4uLgorICAgIExPQURfR0xPQkFMCisgICAgTE9BRF9GQVNUCisgICAgQ0FMTF9GVU5DVElPTgorICAgIFJFVFVSTl9WQUxVRQorCisKK0FuYWx5c2lzIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBhbHNvIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhbmFseXNpcyBmdW5jdGlvbnMgdGhhdAorY29udmVydCB0aGUgaW5wdXQgZGlyZWN0bHkgdG8gdGhlIGRlc2lyZWQgb3V0cHV0LiBUaGV5IGNhbiBiZSB1c2VmdWwgaWYKK29ubHkgYSBzaW5nbGUgb3BlcmF0aW9uIGlzIGJlaW5nIHBlcmZvcm1lZCwgc28gdGhlIGludGVybWVkaWF0ZSBhbmFseXNpcworb2JqZWN0IGlzbid0IHVzZWZ1bDoKIAogLi4gZnVuY3Rpb246OiBjb2RlX2luZm8oeCkKIApAQCAtNTEsMTcgKzExOSwyMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCkKKy4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgsICosIGZpbGU9Tm9uZSkKIAogICAgUHJpbnQgZGV0YWlsZWQgY29kZSBvYmplY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAotICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvIHN0ZG91dC4KKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byAqZmlsZSogKG9yIGBgc3lzLnN0ZG91dGBgIGlmICpmaWxlKgorICAgaXMgbm90IHNwZWNpZmllZCkuCiAKLSAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCkpYGAsIGludGVuZGVkIGZvcgotICAgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KKyAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCksIGZpbGU9ZmlsZSlgYCwKKyAgIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIGBgZmlsZWBgIHBhcmFtZXRlcgorCisKKy4uIGZ1bmN0aW9uOjogZGlzKHg9Tm9uZSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgKngqIG9iamVjdC4gICp4KiBjYW4gZGVub3RlIGVpdGhlciBhIG1vZHVsZSwgYSBjbGFzcywgYQogICAgbWV0aG9kLCBhIGZ1bmN0aW9uLCBhIGNvZGUgb2JqZWN0LCBhIHN0cmluZyBvZiBzb3VyY2UgY29kZSBvciBhIGJ5dGUgc2VxdWVuY2UKQEAgLTcyLDE2ICsxNDUsMjggQEAKICAgIGRpc2Fzc2VtYmxlZC4gIElmIG5vIG9iamVjdCBpcyBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiBkaXNhc3NlbWJsZXMgdGhlIGxhc3QKICAgIHRyYWNlYmFjay4KIAorICAgVGhlIGRpc2Fzc2VtYmx5IGlzIHdyaXR0ZW4gYXMgdGV4dCB0byB0aGUgc3VwcGxpZWQgYGBmaWxlYGAgYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCiAKLS4uIGZ1bmN0aW9uOjogZGlzdGIodGI9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgdGhlIHRvcC1vZi1zdGFjayBmdW5jdGlvbiBvZiBhIHRyYWNlYmFjaywgdXNpbmcgdGhlIGxhc3QKICAgIHRyYWNlYmFjayBpZiBub25lIHdhcyBwYXNzZWQuICBUaGUgaW5zdHJ1Y3Rpb24gY2F1c2luZyB0aGUgZXhjZXB0aW9uIGlzCiAgICBpbmRpY2F0ZWQuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xKQotICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBgYGZpbGVgYCBwYXJhbWV0ZXIKKworCisuLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCisgICAgICAgICAgICAgIGRpc2NvKGNvZGUsIGxhc3RpPS0xLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIGEgY29kZSBvYmplY3QsIGluZGljYXRpbmcgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gaWYgKmxhc3RpKiB3YXMKICAgIHByb3ZpZGVkLiAgVGhlIG91dHB1dCBpcyBkaXZpZGVkIGluIHRoZSBmb2xsb3dpbmcgY29sdW1uczoKQEAgLTk3LDYgKzE4MiwyOCBAQAogICAgVGhlIHBhcmFtZXRlciBpbnRlcnByZXRhdGlvbiByZWNvZ25pemVzIGxvY2FsIGFuZCBnbG9iYWwgdmFyaWFibGUgbmFtZXMsCiAgICBjb25zdGFudCB2YWx1ZXMsIGJyYW5jaCB0YXJnZXRzLCBhbmQgY29tcGFyZSBvcGVyYXRvcnMuCiAKKyAgIFRoZSBkaXNhc3NlbWJseSBpcyB3cml0dGVuIGFzIHRleHQgdG8gdGhlIHN1cHBsaWVkIGBgZmlsZWBgIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgYGBmaWxlYGAgcGFyYW1ldGVyCisKKworLi4gZnVuY3Rpb246OiBnZXRfaW5zdHJ1Y3Rpb25zKHgsICosIGZpcnN0X2xpbmU9Tm9uZSkKKworICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwKKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdC4KKworICAgVGhlIGl0ZXJhdG9yIGdlbmVyYXRlcyBhIHNlcmllcyBvZiA6Y2xhc3M6YEluc3RydWN0aW9uYCBuYW1lZCB0dXBsZXMKKyAgIGdpdmluZyB0aGUgZGV0YWlscyBvZiBlYWNoIG9wZXJhdGlvbiBpbiB0aGUgc3VwcGxpZWQgY29kZS4KKworICAgSWYgKmZpcnN0X2xpbmUqIGlzIG5vdCBOb25lLCBpdCBpbmRpY2F0ZXMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgc2hvdWxkCisgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgIE90aGVyd2lzZSwgdGhlIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20KKyAgIHRoZSBkaXNhc3NlbWJsZWQgY29kZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKIApAQCAtMTExLDYxICsyMTgsNjcgQEAKICAgIHJldHVybiBhIGxpc3Qgb2YgdGhlc2Ugb2Zmc2V0cy4KIAogCi0uLiBkYXRhOjogb3BuYW1lCisuLiBmdW5jdGlvbjo6IHN0YWNrX2VmZmVjdChvcGNvZGUsIFtvcGFyZ10pCiAKLSAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKyAgIENvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiAqb3Bjb2RlKiB3aXRoIGFyZ3VtZW50ICpvcGFyZyouCiAKLQotLi4gZGF0YTo6IG9wbWFwCi0KLSAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgotCi0KLS4uIGRhdGE6OiBjbXBfb3AKLQotICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgotCi0KLS4uIGRhdGE6OiBoYXNjb25zdAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgotCi0KLS4uIGRhdGE6OiBoYXNmcmVlCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc25hbWUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgotCi0KLS4uIGRhdGE6OiBoYXNqcmVsCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzamFicwotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgotCi0KLS4uIGRhdGE6OiBoYXNsb2NhbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KLQotCi0uLiBkYXRhOjogaGFzY29tcGFyZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgotCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gX2J5dGVjb2RlczoKIAogUHl0aG9uIEJ5dGVjb2RlIEluc3RydWN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgOmZ1bmM6YGdldF9pbnN0cnVjdGlvbnNgIGZ1bmN0aW9uIGFuZCA6Y2xhc3M6YEJ5dGVjb2RlYCBjbGFzcyBwcm92aWRlCitkZXRhaWxzIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBhcyA6Y2xhc3M6YEluc3RydWN0aW9uYCBpbnN0YW5jZXM6CisKKy4uIGNsYXNzOjogSW5zdHJ1Y3Rpb24KKworICAgRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgLi4gZGF0YTo6IG9wY29kZQorCisgICAgICBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbiwgY29ycmVzcG9uZGluZyB0byB0aGUgb3Bjb2RlIHZhbHVlcyBsaXN0ZWQKKyAgICAgIGJlbG93IGFuZCB0aGUgYnl0ZWNvZGUgdmFsdWVzIGluIHRoZSA6cmVmOmBvcGNvZGVfY29sbGVjdGlvbnNgLgorCisKKyAgIC4uIGRhdGE6OiBvcG5hbWUKKworICAgICAgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisKKworICAgLi4gZGF0YTo6IGFyZworCisgICAgICBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKworCisgICAuLiBkYXRhOjogYXJndmFsCisKKyAgICAgIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKworCisgICAuLiBkYXRhOjogYXJncmVwcgorCisgICAgICBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKworCisgICAuLiBkYXRhOjogb2Zmc2V0CisKKyAgICAgIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKworCisgICAuLiBkYXRhOjogc3RhcnRzX2xpbmUKKworICAgICAgbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBpc19qdW1wX3RhcmdldAorCisgICAgICBgYFRydWVgYCBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBgYEZhbHNlYGAKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIFB5dGhvbiBjb21waWxlciBjdXJyZW50bHkgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogCiAKQEAgLTUwNiwxMiArNjE5LDYgQEAKICAgIC4uIFhYWCBleHBsYWluIHRoZSBXSFkgc3R1ZmYhCiAKIAotLi4gb3Bjb2RlOjogU1RPUkVfTE9DQUxTCi0KLSAgIFBvcHMgVE9TIGZyb20gdGhlIHN0YWNrIGFuZCBzdG9yZXMgaXQgYXMgdGhlIGN1cnJlbnQgZnJhbWUncyBgYGZfbG9jYWxzYGAuCi0gICBUaGlzIGlzIHVzZWQgaW4gY2xhc3MgY29uc3RydWN0aW9uLgotCi0KIEFsbCBvZiB0aGUgZm9sbG93aW5nIG9wY29kZXMgZXhwZWN0IGFyZ3VtZW50cy4gIEFuIGFyZ3VtZW50IGlzIHR3byBieXRlcywgd2l0aAogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBsYXN0LgogCkBAIC03MjIsNiArODI5LDEzIEBACiAgICBQdXNoZXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGUgY2VsbCBjb250YWlucyBvbiB0aGUgc3RhY2suCiAKIAorLi4gb3Bjb2RlOjogTE9BRF9DTEFTU0RFUkVGIChpKQorCisgICBNdWNoIGxpa2UgOm9wY29kZTpgTE9BRF9ERVJFRmAgYnV0IGZpcnN0IGNoZWNrcyB0aGUgbG9jYWxzIGRpY3Rpb25hcnkgYmVmb3JlCisgICBjb25zdWx0aW5nIHRoZSBjZWxsLiAgVGhpcyBpcyB1c2VkIGZvciBsb2FkaW5nIGZyZWUgdmFyaWFibGVzIGluIGNsYXNzCisgICBib2RpZXMuCisKKwogLi4gb3Bjb2RlOjogU1RPUkVfREVSRUYgKGkpCiAKICAgIFN0b3JlcyBUT1MgaW50byB0aGUgY2VsbCBjb250YWluZWQgaW4gc2xvdCAqaSogb2YgdGhlIGNlbGwgYW5kIGZyZWUgdmFyaWFibGUKQEAgLTgyMCwzICs5MzQsNjIgQEAKICAgIHdoaWNoIGRvbid0IHRha2UgYXJndW1lbnRzIGBgPCBIQVZFX0FSR1VNRU5UYGAgYW5kIHRob3NlIHdoaWNoIGRvIGBgPj0KICAgIEhBVkVfQVJHVU1FTlRgYC4KIAorLi4gX29wY29kZV9jb2xsZWN0aW9uczoKKworT3Bjb2RlIGNvbGxlY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgY29sbGVjdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBhdXRvbWF0aWMgaW50cm9zcGVjdGlvbiBvZiBieXRlY29kZQoraW5zdHJ1Y3Rpb25zOgorCisuLiBkYXRhOjogb3BuYW1lCisKKyAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKworCisuLiBkYXRhOjogb3BtYXAKKworICAgRGljdGlvbmFyeSBtYXBwaW5nIG9wZXJhdGlvbiBuYW1lcyB0byBieXRlY29kZXMuCisKKworLi4gZGF0YTo6IGNtcF9vcAorCisgICBTZXF1ZW5jZSBvZiBhbGwgY29tcGFyZSBvcGVyYXRpb24gbmFtZXMuCisKKworLi4gZGF0YTo6IGhhc2NvbnN0CisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSBjb25zdGFudCBwYXJhbWV0ZXIuCisKKworLi4gZGF0YTo6IGhhc2ZyZWUKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGEgZnJlZSB2YXJpYWJsZSAobm90ZSB0aGF0ICdmcmVlJyBpbgorICAgdGhpcyBjb250ZXh0IHJlZmVycyB0byBuYW1lcyBpbiB0aGUgY3VycmVudCBzY29wZSB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5CisgICBpbm5lciBzY29wZXMgb3IgbmFtZXMgaW4gb3V0ZXIgc2NvcGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgZnJvbSB0aGlzIHNjb3BlLgorICAgSXQgZG9lcyAqbm90KiBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIG9yIGJ1aWx0aW4gc2NvcGVzKS4KKworCisuLiBkYXRhOjogaGFzbmFtZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYW4gYXR0cmlidXRlIGJ5IG5hbWUuCisKKworLi4gZGF0YTo6IGhhc2pyZWwKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIHJlbGF0aXZlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNqYWJzCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYW4gYWJzb2x1dGUganVtcCB0YXJnZXQuCisKKworLi4gZGF0YTo6IGhhc2xvY2FsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGxvY2FsIHZhcmlhYmxlLgorCisKKy4uIGRhdGE6OiBoYXNjb21wYXJlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyBvZiBCb29sZWFuIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0IGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjNmNWRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApAQCAtMCwwICsxLDE0IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU29mdHdhcmUgUGFja2FnaW5nIGFuZCBEaXN0cmlidXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZXNlIGxpYnJhcmllcyBoZWxwIHlvdSB3aXRoIHB1Ymxpc2hpbmcgYW5kIGluc3RhbGxpbmcgUHl0aG9uIHNvZnR3YXJlLgorV2hpbGUgdGhlc2UgbW9kdWxlcyBhcmUgZGVzaWduZWQgdG8gd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZz5gX18sIHRoZXkgY2FuIGFsc28gYmUgdXNlZAord2l0aCBhIGxvY2FsIGluZGV4IHNlcnZlciwgb3Igd2l0aG91dCBhbnkgaW5kZXggc2VydmVyIGF0IGFsbC4KKworLi4gdG9jdHJlZTo6CisKKyAgIGRpc3R1dGlscy5yc3QKKyAgIGVuc3VyZXBpcC5yc3QKKyAgIHZlbnYucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kb2N0ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CmluZGV4IDIyMmM3MTkuLjI4ZGY0OWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0CkBAIC0yNzgsNiArMjc4LDEwIEBACiBBbnkgY2xhc3NlcyBmb3VuZCBhcmUgcmVjdXJzaXZlbHkgc2VhcmNoZWQgc2ltaWxhcmx5LCB0byB0ZXN0IGRvY3N0cmluZ3MgaW4KIHRoZWlyIGNvbnRhaW5lZCBtZXRob2RzIGFuZCBuZXN0ZWQgY2xhc3Nlcy4KIAorLi4gaW1wbC1kZXRhaWw6OgorICAgUHJpb3IgdG8gdmVyc2lvbiAzLjQsIGV4dGVuc2lvbiBtb2R1bGVzIHdyaXR0ZW4gaW4gQyB3ZXJlIG5vdCBmdWxseQorICAgc2VhcmNoZWQgYnkgZG9jdGVzdC4KKwogCiAuLiBfZG9jdGVzdC1maW5kaW5nLWV4YW1wbGVzOgogCkBAIC00OTUsNyArNDk5LDEwIEBACiBBIG51bWJlciBvZiBvcHRpb24gZmxhZ3MgY29udHJvbCB2YXJpb3VzIGFzcGVjdHMgb2YgZG9jdGVzdCdzIGJlaGF2aW9yLgogU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFncyBhcmUgc3VwcGxpZWQgYXMgbW9kdWxlIGNvbnN0YW50cywgd2hpY2ggY2FuIGJlCiBvcidlZCB0b2dldGhlciBhbmQgcGFzc2VkIHRvIHZhcmlvdXMgZnVuY3Rpb25zLiAgVGhlIG5hbWVzIGNhbiBhbHNvIGJlIHVzZWQgaW4KLTpyZWY6YGRvY3Rlc3QgZGlyZWN0aXZlcyA8ZG9jdGVzdC1kaXJlY3RpdmVzPmAuCis6cmVmOmBkb2N0ZXN0IGRpcmVjdGl2ZXMgPGRvY3Rlc3QtZGlyZWN0aXZlcz5gLCBhbmQgbWF5IGJlIHBhc3NlZCB0byB0aGUKK2RvY3Rlc3QgY29tbWFuZCBsaW5lIGludGVyZmFjZSB2aWEgdGhlIGBgLW9gYCBvcHRpb24uCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNCB0aGUgYGAtb2BgIGNvbW1hbmQgbGluZSBvcHRpb24KIAogVGhlIGZpcnN0IGdyb3VwIG9mIG9wdGlvbnMgZGVmaW5lIHRlc3Qgc2VtYW50aWNzLCBjb250cm9sbGluZyBhc3BlY3RzIG9mIGhvdwogZG9jdGVzdCBkZWNpZGVzIHdoZXRoZXIgYWN0dWFsIG91dHB1dCBtYXRjaGVzIGFuIGV4YW1wbGUncyBleHBlY3RlZCBvdXRwdXQ6CkBAIC02MzMsNiArNjQwLDE5IEBACiAgICB0aGUgb3V0cHV0IGlzIHN1cHByZXNzZWQuCiAKIAorLi4gZGF0YTo6IEZBSUxfRkFTVAorCisgICBXaGVuIHNwZWNpZmllZCwgZXhpdCBhZnRlciB0aGUgZmlyc3QgZmFpbGluZyBleGFtcGxlIGFuZCBkb24ndCBhdHRlbXB0IHRvIHJ1bgorICAgdGhlIHJlbWFpbmluZyBleGFtcGxlcy4gVGh1cywgdGhlIG51bWJlciBvZiBmYWlsdXJlcyByZXBvcnRlZCB3aWxsIGJlIGF0IG1vc3QKKyAgIDEuICBUaGlzIGZsYWcgbWF5IGJlIHVzZWZ1bCBkdXJpbmcgZGVidWdnaW5nLCBzaW5jZSBleGFtcGxlcyBhZnRlciB0aGUgZmlyc3QKKyAgIGZhaWx1cmUgd29uJ3QgZXZlbiBwcm9kdWNlIGRlYnVnZ2luZyBvdXRwdXQuCisKKyAgIFRoZSBkb2N0ZXN0IGNvbW1hbmQgbGluZSBhY2NlcHRzIHRoZSBvcHRpb24gYGAtZmBgIGFzIGEgc2hvcnRoYW5kIGZvciBgYC1vCisgICBGQUlMX0ZBU1RgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJFUE9SVElOR19GTEFHUwogCiAgICBBIGJpdG1hc2sgb3InaW5nIHRvZ2V0aGVyIGFsbCB0aGUgcmVwb3J0aW5nIGZsYWdzIGFib3ZlLgpAQCAtMTI2OSw5ICsxMjg5LDggQEAKIAogICAgQSBwcm9jZXNzaW5nIGNsYXNzIHVzZWQgdG8gZXh0cmFjdCB0aGUgOmNsYXNzOmBEb2NUZXN0YFwgcyB0aGF0IGFyZSByZWxldmFudCB0bwogICAgYSBnaXZlbiBvYmplY3QsIGZyb20gaXRzIGRvY3N0cmluZyBhbmQgdGhlIGRvY3N0cmluZ3Mgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzLgotICAgOmNsYXNzOmBEb2NUZXN0YFwgcyBjYW4gY3VycmVudGx5IGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBmb2xsb3dpbmcgb2JqZWN0IHR5cGVzOgotICAgbW9kdWxlcywgZnVuY3Rpb25zLCBjbGFzc2VzLCBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZAotICAgcHJvcGVydGllcy4KKyAgIDpjbGFzczpgRG9jVGVzdGBcIHMgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywKKyAgIG1ldGhvZHMsIHN0YXRpY21ldGhvZHMsIGNsYXNzbWV0aG9kcywgYW5kIHByb3BlcnRpZXMuCiAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqdmVyYm9zZSogY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgb2JqZWN0cyBzZWFyY2hlZCBieQogICAgdGhlIGZpbmRlci4gIEl0IGRlZmF1bHRzIHRvIGBgRmFsc2VgYCAobm8gb3V0cHV0KS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTYyZGExCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0CkBAIC0wLDAgKzEsNDI3IEBACis6bW9kOmBlbWFpbC5jb250ZW50bWFuYWdlcmA6IE1hbmFnaW5nIE1JTUUgQ29udGVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbW9kdWxlOjogZW1haWwuY29udGVudG1hbmFnZXIKKyAgIDpzeW5vcHNpczogU3RvcmluZyBhbmQgUmV0cmlldmluZyBDb250ZW50IGZyb20gTUlNRSBQYXJ0cworCisuLiBtb2R1bGVhdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKy4uIHNlY3Rpb25hdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKworCisuLiBub3RlOjoKKworICAgVGhlIGNvbnRlbnRtYW5hZ2VyIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIGFzIGEgOnRlcm06YHByb3Zpc2lvbmFsIG1vZHVsZSA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLgorCitUaGUgOm1vZDpgfmVtYWlsLm1lc3NhZ2VgIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIHRoYXQgY2FuIHJlcHJlc2VudCBhbgorYXJiaXRyYXJ5IGVtYWlsIG1lc3NhZ2UuICBUaGF0IGJhc2ljIG1lc3NhZ2UgbW9kZWwgaGFzIGEgdXNlZnVsIGFuZCBmbGV4aWJsZQorQVBJLCBidXQgaXQgcHJvdmlkZXMgb25seSBhIGxvd2VyLWxldmVsIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ2VuZXJpYworcGFydHMgb2YgYSBtZXNzYWdlICh0aGUgaGVhZGVycywgZ2VuZXJpYyBoZWFkZXIgcGFyYW1ldGVycywgYW5kIHRoZSBwYXlsb2FkLAord2hpY2ggbWF5IGJlIGEgbGlzdCBvZiBzdWItcGFydHMpLiAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBhbmQgdG9vbHMKK3RoYXQgcHJvdmlkZSBhbiBlbmhhbmNlZCBhbmQgZXh0ZW5zaWJsZSBBUEkgZm9yIGRlYWxpbmcgd2l0aCB2YXJpb3VzIHNwZWNpZmljCit0eXBlcyBvZiBjb250ZW50LCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UKK2FzIGEgc3BlY2lhbGl6ZWQgb2JqZWN0IHR5cGUgcmF0aGVyIHRoYW4gYXMgYSBzaW1wbGUgYnl0ZXMgb2JqZWN0LiAgVGhlIG1vZHVsZQorYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mIHRoZSBSRkMtc3BlY2lmaWVkIE1JTUUgZGV0YWlscyAocmVxdWlyZWQgaGVhZGVycworYW5kIHBhcmFtZXRlcnMsIGV0Yy4pIGZvciB0aGUgY2VydGFpbiBjb21tb24gY29udGVudCB0eXBlcyBjb250ZW50IHByb3BlcnRpZXMsCithbmQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0eXBlcyBjYW4gYmUgYWRkZWQgYnkgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlCitleHRlbnNpb24gbWVjaGFuaXNtcy4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZXBvbnltb3VzICJDb250ZW50IE1hbmFnZXIiIGNsYXNzZXMuICBUaGUgYmFzZQorOmNsYXNzOmAuQ29udGVudE1hbmFnZXJgIGNsYXNzIGRlZmluZXMgYW4gQVBJIGZvciByZWdpc3RlcmluZyBjb250ZW50CittYW5hZ2VtZW50IGZ1bmN0aW9ucyB3aGljaCBleHRyYWN0IGRhdGEgZnJvbSBgYE1lc3NhZ2VgYCBvYmplY3RzIG9yIGluc2VydCBkYXRhCithbmQgaGVhZGVycyBpbnRvIGBgTWVzc2FnZWBgIG9iamVjdHMsIHRodXMgcHJvdmlkaW5nIGEgd2F5IG9mIGNvbnZlcnRpbmcKK2JldHdlZW4gYGBNZXNzYWdlYGAgb2JqZWN0cyBjb250YWluaW5nIGRhdGEgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucyBvZiB0aGF0CitkYXRhIChQeXRob24gZGF0YSB0eXBlcywgc3BlY2lhbGl6ZWQgUHl0aG9uIG9iamVjdHMsIGV4dGVybmFsIGZpbGVzLCBldGMpLiAgVGhlCittb2R1bGUgYWxzbyBkZWZpbmVzIG9uZSBjb25jcmV0ZSBjb250ZW50IG1hbmFnZXI6IDpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYAorY29udmVydHMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgdHlwZXMgYW5kIGBgc3RyYGAgb3IgYGBieXRlc2BgIGRhdGEuICBJdCBhbHNvCitwcm92aWRlcyBhIGNvbnZlbmllbnQgQVBJIGZvciBtYW5hZ2luZyB0aGUgTUlNRSBwYXJhbWV0ZXJzIHdoZW4gaW5zZXJ0aW5nCitjb250ZW50IGludG8gYGBNZXNzYWdlYGBcIHMuICBJdCBhbHNvIGhhbmRsZXMgaW5zZXJ0aW5nIGFuZCBleHRyYWN0aW5nCitgYE1lc3NhZ2VgYCBvYmplY3RzIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgYG1lc3NhZ2UvcmZjODIyYGAgY29udGVudCB0eXBlLgorCitBbm90aGVyIHBhcnQgb2YgdGhlIGVuaGFuY2VkIGludGVyZmFjZSBpcyBzdWJjbGFzc2VzIG9mCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHRoYXQgcHJvdmlkZSBuZXcgY29udmVuaWVuY2UgQVBJIGZ1bmN0aW9ucywKK2luY2x1ZGluZyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBjYWxsaW5nIHRoZSBDb250ZW50IE1hbmFnZXJzIGRlcml2ZWQgZnJvbQordGhpcyBtb2R1bGUuCisKKy4uIG5vdGU6OgorCisgICBBbHRob3VnaCA6Y2xhc3M6YC5FbWFpbE1lc3NhZ2VgIGFuZCA6Y2xhc3M6YC5NSU1FUGFydGAgYXJlIGN1cnJlbnRseQorICAgZG9jdW1lbnRlZCBpbiB0aGlzIG1vZHVsZSBiZWNhdXNlIG9mIHRoZSBwcm92aXNpb25hbCBuYXR1cmUgb2YgdGhlIGNvZGUsIHRoZQorICAgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIDptb2Q6YGVtYWlsLm1lc3NhZ2VgIG1vZHVsZS4KKworCisuLiBjbGFzczo6IEVtYWlsTWVzc2FnZShwb2xpY3k9ZGVmYXVsdCkKKworICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1ZHBhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZQorICAgOmNsYXNzOmB+ZW1haWwucG9saWN5LmRlZmF1bHRgIHBvbGljeSwgd2hpY2ggZm9sbG93cyB0aGUgcnVsZXMgb2YgdGhlIGVtYWlsCisgICBSRkNzIGV4Y2VwdCBmb3IgbGluZSBlbmRpbmdzIChpbnN0ZWFkIG9mIHRoZSBSRkMgbWFuZGF0ZWQgYGBcclxuYGAsIGl0IHVzZXMKKyAgIHRoZSBQeXRob24gc3RhbmRhcmQgYGBcbmBgIGxpbmUgZW5kaW5ncykuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlCisgICA6bW9kOmB+ZW1haWwucG9saWN5YCBkb2N1bWVudGF0aW9uLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYC4gIEl0IGFkZHMKKyAgIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKworCisgICAuLiBhdHRyaWJ1dGU6OiBpc19hdHRhY2htZW50CisKKyAgICAgIFNldCB0byBgYFRydWVgYCBpZiB0aGVyZSBpcyBhIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIKKyAgICAgIGFuZCBpdHMgKGNhc2UgaW5zZW5zaXRpdmUpIHZhbHVlIGlzIGBgYXR0YWNobWVudGBgLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJykpCisKKyAgICAgIFJldHVybiB0aGUgTUlNRSBwYXJ0IHRoYXQgaXMgdGhlIGJlc3QgY2FuZGlkYXRlIHRvIGJlIHRoZSAiYm9keSIgb2YgdGhlCisgICAgICBtZXNzYWdlLgorCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIG11c3QgYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGZyb20gdGhlIHNldCBgYHJlbGF0ZWRgYCwKKyAgICAgIGBgaHRtbGBgLCBhbmQgYGBwbGFpbmBgLCBhbmQgaW5kaWNhdGVzIHRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGZvciB0aGUKKyAgICAgIGNvbnRlbnQgdHlwZSBvZiB0aGUgcGFydCByZXR1cm5lZC4KKworICAgICAgU3RhcnQgbG9va2luZyBmb3IgY2FuZGlkYXRlIG1hdGNoZXMgd2l0aCB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZQorICAgICAgYGBnZXRfYm9keWBgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgICAgIElmIGBgcmVsYXRlZGBgIGlzIG5vdCBpbmNsdWRlZCBpbiAqcHJlZmVyZW5jZWxpc3QqLCBjb25zaWRlciB0aGUgcm9vdAorICAgICAgcGFydCAob3Igc3VicGFydCBvZiB0aGUgcm9vdCBwYXJ0KSBvZiBhbnkgcmVsYXRlZCBlbmNvdW50ZXJlZCBhcyBhCisgICAgICBjYW5kaWRhdGUgaWYgdGhlIChzdWItKXBhcnQgbWF0Y2hlcyBhIHByZWZlcmVuY2UuCisKKyAgICAgIFdoZW4gZW5jb3VudGVyaW5nIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjaGVjayB0aGUgYGBzdGFydGBgIHBhcmFtZXRlcgorICAgICAgYW5kIGlmIGEgcGFydCB3aXRoIGEgbWF0Y2hpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIGlzIGZvdW5kLCBjb25zaWRlcgorICAgICAgb25seSBpdCB3aGVuIGxvb2tpbmcgZm9yIGNhbmRpZGF0ZSBtYXRjaGVzLiAgT3RoZXJ3aXNlIGNvbnNpZGVyIG9ubHkgdGhlCisgICAgICBmaXJzdCAoZGVmYXVsdCByb290KSBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydC9yZWxhdGVkYGAuCisKKyAgICAgIElmIGEgcGFydCBoYXMgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLCBvbmx5IGNvbnNpZGVyCisgICAgICB0aGUgcGFydCBhIGNhbmRpZGF0ZSBtYXRjaCBpZiB0aGUgdmFsdWUgb2YgdGhlIGhlYWRlciBpcyBgYGlubGluZWBgLgorCisgICAgICBJZiBub25lIG9mIHRoZSBjYW5kaWRhdGVzIG1hdGNoZXMgYW55IG9mIHRoZSBwcmVmZXJlbmNlcyBpbgorICAgICAgKnByZWZlcm5lY2xpc3QqLCByZXR1cm4gYGBOb25lYGAuCisKKyAgICAgIE5vdGVzOiAoMSkgRm9yIG1vc3QgYXBwbGljYXRpb25zIHRoZSBvbmx5ICpwcmVmZXJlbmNlbGlzdCogY29tYmluYXRpb25zCisgICAgICB0aGF0IHJlYWxseSBtYWtlIHNlbnNlIGFyZSBgYCgncGxhaW4nLClgYCwgYGAoJ2h0bWwnLCAncGxhaW4nKWBgLCBhbmQgdGhlCisgICAgICBkZWZhdWx0LCBgYCgncmVsYXRlZCcsICdodG1sJywgJ3BsYWluJylgYC4gICgyKSBCZWNhdXNlIG1hdGNoaW5nIHN0YXJ0cworICAgICAgd2l0aCB0aGUgb2JqZWN0IG9uIHdoaWNoIGBgZ2V0X2JvZHlgYCBpcyBjYWxsZWQsIGNhbGxpbmcgYGBnZXRfYm9keWBgIG9uCisgICAgICBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCB3aWxsIHJldHVybiB0aGUgb2JqZWN0IGl0c2VsZiB1bmxlc3MKKyAgICAgICpwcmVmZXJlbmNlbGlzdCogaGFzIGEgbm9uLWRlZmF1bHQgdmFsdWUuICgzKSBNZXNzYWdlcyAob3IgbWVzc2FnZSBwYXJ0cykKKyAgICAgIHRoYXQgZG8gbm90IHNwZWNpZnkgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBvciB3aG9zZQorICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyIGlzIGludmFsaWQgd2lsbCBiZSB0cmVhdGVkIGFzIGlmIHRoZXkKKyAgICAgIGFyZSBvZiB0eXBlIGBgdGV4dC9wbGFpbmBgLCB3aGljaCBtYXkgb2NjYXNpb25hbGx5IGNhdXNlIGBgZ2V0X2JvZHlgYCB0bworICAgICAgcmV0dXJuIHVuZXhwZWN0ZWQgcmVzdWx0cy4KKworCisgICAuLiBtZXRob2Q6OiBpdGVyX2F0dGFjaG1lbnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbWVzc2FnZSB0aGF0IGFyZSBub3QKKyAgICAgIGNhbmRpZGF0ZSAiYm9keSIgcGFydHMuICBUaGF0IGlzLCBza2lwIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGVhY2ggb2YKKyAgICAgIGBgdGV4dC9wbGFpbmBgLCBgYHRleHQvaHRtbGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgICh1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBtYXJrZWQgYXMKKyAgICAgIGF0dGFjaG1lbnRzIHZpYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGApLCBhbmQKKyAgICAgIHJldHVybiBhbGwgcmVtYWluaW5nIHBhcnRzLiAgV2hlbiBhcHBsaWVkIGRpcmVjdGx5IHRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgcmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGFsbCB0aGUgcmVsYXRlZCBwYXJ0cworICAgICAgZXhjZXB0IHRoZSByb290IHBhcnQgKGllOiB0aGUgcGFydCBwb2ludGVkIHRvIGJ5IHRoZSBgYHN0YXJ0YGAgcGFyYW1ldGVyLAorICAgICAgb3IgdGhlIGZpcnN0IHBhcnQgaWYgdGhlcmUgaXMgbm8gYGBzdGFydGBgIHBhcmFtZXRlciBvciB0aGUgYGBzdGFydGBgCisgICAgICBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtSURgIG9mIGFueSBvZiB0aGUKKyAgICAgIHBhcnRzKS4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAgb3IgYQorICAgICAgbm9uLWBgbXVsdGlwYXJ0YGAsIHJldHVybiBhbiBlbXB0eSBpdGVyYXRvci4KKworCisgICAuLiBtZXRob2Q6OiBpdGVyX3BhcnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgYWxsIG9mIHRoZSBpbW1lZGlhdGUgc3ViLXBhcnRzIG9mIHRoZSBtZXNzYWdlLAorICAgICAgd2hpY2ggd2lsbCBiZSBlbXB0eSBmb3IgYSBub24tYGBtdWx0aXBhcnRgYC4gIChTZWUgYWxzbworICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLndhbGtgLikKKworCisgICAuLiBtZXRob2Q6OiBnZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgZ2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIENhbGwgdGhlIGBgc2V0X2NvbnRlbnRgYCBtZXRob2Qgb2YgdGhlICpjb250ZW50X21hbmFnZXIqLCBwYXNzaW5nIHNlbGYKKyAgICAgIGFzIHRoZSBtZXNzYWdlIG9iamVjdCwgYW5kIHBhc3NpbmcgYWxvbmcgYW55IG90aGVyIGFyZ3VtZW50cyBvciBrZXl3b3JkcworICAgICAgYXMgYWRkaXRpb25hbCBhcmd1bWVudHMuICBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX3JlbGF0ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgIG1lc3NhZ2UgaW50byBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBtZXNzYWdlLAorICAgICAgbW92aW5nIGFueSBleGlzdGluZyA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhCisgICAgICAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZQorICAgICAgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZyBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5CisgICAgICB0byBiZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZQorICAgICAgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBtYWtlX2FsdGVybmF0aXZlKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBvciBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCBpbnRvIGEKKyAgICAgIGBgbXVsdGlwYXJ0L2FsdGVybmF0aXZlYGAsIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYAorICAgICAgaGVhZGVycyBhbmQgcGF5bG9hZCBpbnRvIGEgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmCisgICAgICAqYm91bmRhcnkqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwKKyAgICAgIG90aGVyd2lzZSBsZWF2ZSB0aGUgYm91bmRhcnkgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMKKyAgICAgIG5lZWRlZCAoZm9yIGV4YW1wbGUsIHdoZW4gdGhlIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9taXhlZChib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvciBhCisgICAgICBgYG11bHRpcGFydC1hbHRlcm5hdGl2ZWBgIGludG8gYSBgYG11bHRpcGFydC9taXhlZGBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nCisgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1gIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlCisgICAgICBgYG11bHRpcGFydGBgLiAgSWYgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nCisgICAgICBpbiB0aGUgbXVsdGlwYXJ0LCBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkKKyAgICAgIGNyZWF0ZWQgd2hlbiBpdCBpcyBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9yZWxhdGVkKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlCisgICAgICBvYmplY3QsIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLAorICAgICAgYW5kIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgdGhlIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgY2FsbCA6bWV0aDpgbWFrZV9yZWxhdGVkYCBhbmQgdGhlbgorICAgICAgcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzIGFueSBvdGhlciB0eXBlIG9mIGBgbXVsdGlwYXJ0YGAsCisgICAgICByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZQorICAgICAgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLgorICAgICAgSWYgdGhlIGFkZGVkIHBhcnQgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsCisgICAgICBhZGQgb25lIHdpdGggdGhlIHZhbHVlIGBgaW5saW5lYGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2FsdGVybmF0aXZlKCphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdykKKworICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwgYW5kCisgICAgICA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYgdGhlCisgICAgICBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjYWxsCisgICAgICA6bWV0aDpgbWFrZV9hbHRlcm5hdGl2ZWAgYW5kIHRoZW4gcHJvY2VlZCBhcyBhYm92ZS4gIElmIHRoZSBtZXNzYWdlIGlzCisgICAgICBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuIElmCisgICAgICAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UgdGhlIGBgY29udGVudF9tYW5hZ2VyYGAgc3BlY2lmaWVkCisgICAgICBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfYXR0YWNobWVudCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqZWN0LAorICAgICAgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgLCBgYG11bHRpcGFydC9yZWxhdGVkYGAsIG9yCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBjYWxsIDptZXRoOmBtYWtlX21peGVkYCBhbmQgdGhlbiBwcm9jZWVkIGFzCisgICAgICBhYm92ZS4gSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgCisgICAgICBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuICBJZiB0aGUgYWRkZWQgcGFydAorICAgICAgaGFzIG5vIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIsIGFkZCBvbmUgd2l0aCB0aGUgdmFsdWUKKyAgICAgIGBgYXR0YWNobWVudGBgLiAgVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgYm90aCBmb3IgZXhwbGljaXQgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudGAgYW5kIGBgaW5saW5lYGAgYXR0YWNobWVudHMKKyAgICAgICg6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lYCksIGJ5IHBhc3NpbmcgYXBwcm9wcmlhdGUKKyAgICAgIG9wdGlvbnMgdG8gdGhlIGBgY29udGVudF9tYW5hZ2VyYGAuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXIoKQorCisgICAgICBSZW1vdmUgdGhlIHBheWxvYWQgYW5kIGFsbCBvZiB0aGUgaGVhZGVycy4KKworCisgICAuLiBtZXRob2Q6OiBjbGVhcl9jb250ZW50KCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIDpleGM6YENvbnRlbnQtYCBoZWFkZXJzLCBsZWF2aW5nCisgICAgICBhbGwgb3RoZXIgaGVhZGVycyBpbnRhY3QgYW5kIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisKKy4uIGNsYXNzOjogQ29udGVudE1hbmFnZXIoKQorCisgICBCYXNlIGNsYXNzIGZvciBjb250ZW50IG1hbmFnZXJzLiAgUHJvdmlkZXMgdGhlIHN0YW5kYXJkIHJlZ2lzdHJ5IG1lY2hhbmlzbXMKKyAgIHRvIHJlZ2lzdGVyIGNvbnZlcnRlcnMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucywgYXMKKyAgIHdlbGwgYXMgdGhlIGBgZ2V0X2NvbnRlbnRgYCBhbmQgYGBzZXRfY29udGVudGBgIGRpc3BhdGNoIG1ldGhvZHMuCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCAqYXJncywgKiprdykKKworICAgICAgTG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGBgbWltZXR5cGVgYCBvZiAqbXNnKiAoc2VlIG5leHQKKyAgICAgIHBhcmFncmFwaCksIGNhbGwgaXQsIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQKKyAgICAgIG9mIHRoZSBjYWxsLiAgVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIGhhbmRsZXIgd2lsbCBleHRyYWN0IHRoZQorICAgICAgcGF5bG9hZCBmcm9tICptc2cqIGFuZCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgZW5jb2RlcyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgdGhlIGV4dHJhY3RlZCBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBsb29rIGZvciB0aGUgZm9sbG93aW5nIGtleXMgaW4gdGhlIHJlZ2lzdHJ5LAorICAgICAgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lIGZvdW5kOgorCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmdWxsIE1JTUUgdHlwZSAoYGBtYWludHlwZS9zdWJ0eXBlYGApCisgICAgICAgICAgICAqIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBgYG1haW50eXBlYGAKKyAgICAgICAgICAgICogdGhlIGVtcHR5IHN0cmluZworCisgICAgICBJZiBub25lIG9mIHRoZXNlIGtleXMgcHJvZHVjZSBhIGhhbmRsZXIsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUKKyAgICAgIGZ1bGwgTUlNRSB0eXBlLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldF9jb250ZW50KG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgICAgSWYgdGhlIGBgbWFpbnR5cGVgYCBpcyBgYG11bHRpcGFydGBgLCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmA7IG90aGVyd2lzZQorICAgICAgbG9vayB1cCBhIGhhbmRsZXIgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHR5cGUgb2YgKm9iaiogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIDptZXRoOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2UuY2xlYXJfY29udGVudGAgb24gdGhlCisgICAgICAqbXNnKiwgYW5kIGNhbGwgdGhlIGhhbmRsZXIgZnVuY3Rpb24sIHBhc3NpbmcgdGhyb3VnaCBhbGwgYXJndW1lbnRzLiAgVGhlCisgICAgICBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgdHJhbnNmb3JtIGFuZCBzdG9yZSAqb2JqKiBpbnRvCisgICAgICAqbXNnKiwgcG9zc2libHkgbWFraW5nIG90aGVyIGNoYW5nZXMgdG8gKm1zZyogYXMgd2VsbCwgc3VjaCBhcyBhZGRpbmcKKyAgICAgIHZhcmlvdXMgTUlNRSBoZWFkZXJzIHRvIGVuY29kZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW50ZXJwcmV0IHRoZSBzdG9yZWQKKyAgICAgIGRhdGEuCisKKyAgICAgIFRvIGZpbmQgdGhlIGhhbmRsZXIsIG9idGFpbiB0aGUgdHlwZSBvZiAqb2JqKiAoYGB0eXAgPSB0eXBlKG9iailgYCksIGFuZAorICAgICAgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwgc3RvcHBpbmcgd2l0aCB0aGUgZmlyc3Qgb25lCisgICAgICBmb3VuZDoKKworICAgICAgICAgICAqIHRoZSB0eXBlIGl0c2VsZiAoYGB0eXBgYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIGZ1bGx5IHF1YWxpZmllZCBuYW1lIChgYHR5cC5fX21vZHVsZV9fICsgJy4nICsKKyAgICAgICAgICAgICB0eXAuX19xdWFsbmFtZV9fYGApLgorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgcXVhbG5hbWUgKGBgdHlwLl9fcXVhbG5hbWVfX2BgKQorICAgICAgICAgICAqIHRoZSB0eXBlJ3MgbmFtZSAoYGB0eXAuX19uYW1lX19gYCkuCisKKyAgICAgIElmIG5vbmUgb2YgdGhlIGFib3ZlIG1hdGNoLCByZXBlYXQgYWxsIG9mIHRoZSBjaGVja3MgYWJvdmUgZm9yIGVhY2ggb2YKKyAgICAgIHRoZSB0eXBlcyBpbiB0aGUgOnRlcm06YE1ST2AgKGBgdHlwLl9fbXJvX19gYCkuICBGaW5hbGx5LCBpZiBubyBvdGhlciBrZXkKKyAgICAgIHlpZWxkcyBhIGhhbmRsZXIsIGNoZWNrIGZvciBhIGhhbmRsZXIgZm9yIHRoZSBrZXkgYGBOb25lYGAuICBJZiB0aGVyZSBpcworICAgICAgbm8gaGFuZGxlciBmb3IgYGBOb25lYGAsIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGZvciB0aGUgZnVsbHkKKyAgICAgIHF1YWxpZmllZCBuYW1lIG9mIHRoZSB0eXBlLgorCisgICAgICBBbHNvIGFkZCBhIDptYWlsaGVhZGVyOmBNSU1FLVZlcnNpb25gIGhlYWRlciBpZiBvbmUgaXMgbm90IHByZXNlbnQgKHNlZQorICAgICAgYWxzbyA6Y2xhc3M6YC5NSU1FUGFydGApLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9nZXRfaGFuZGxlcihrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCB0aGUgZnVuY3Rpb24gKmhhbmRsZXIqIGFzIHRoZSBoYW5kbGVyIGZvciAqa2V5Ki4gIEZvciB0aGUgcG9zc2libGUKKyAgICAgIHZhbHVlcyBvZiAqa2V5Kiwgc2VlIDptZXRoOmBnZXRfY29udGVudGAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX3NldF9oYW5kbGVyKHR5cGVrZXksIGhhbmRsZXIpCisKKyAgICAgIFJlY29yZCAqaGFuZGxlciogYXMgdGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBhbiBvYmplY3Qgb2YgYSB0eXBlCisgICAgICBtYXRjaGluZyAqdHlwZWtleSogaXMgcGFzc2VkIHRvIDptZXRoOmBzZXRfY29udGVudGAuICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKnR5cGVrZXkqLCBzZWUgOm1ldGg6YHNldF9jb250ZW50YC4KKworCisuLiBjbGFzczo6IE1JTUVQYXJ0KHBvbGljeT1kZWZhdWx0KQorCisgICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3VicGFydCBvZiBhIE1JTUUgbWVzc2FnZS4gIEl0IGlzIGlkZW50aWNhbCB0bworICAgIDpjbGFzczpgRW1haWxNZXNzYWdlYCwgZXhjZXB0IHRoYXQgbm8gOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycyBhcmUKKyAgICBhZGRlZCB3aGVuIDptZXRoOmB+RW1haWxNZXNzYWdlLnNldF9jb250ZW50YCBpcyBjYWxsZWQsIHNpbmNlIHN1Yi1wYXJ0cyBkbworICAgIG5vdCBuZWVkIHRoZWlyIG93biA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLgorCisKK0NvbnRlbnQgTWFuYWdlciBJbnN0YW5jZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQ3VycmVudGx5IHRoZSBlbWFpbCBwYWNrYWdlIHByb3ZpZGVzIG9ubHkgb25lIGNvbmNyZXRlIGNvbnRlbnQgbWFuYWdlciwKKzpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYCwgYWx0aG91Z2ggbW9yZSBtYXkgYmUgYWRkZWQgaW4gdGhlIGZ1dHVyZS4KKzpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYCBpcyB0aGUKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlcmAgcHJvdmlkZWQgYnkKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5YCBhbmQgaXRzIGRlcml2YXRpdmVzLgorCisKKy4uIGRhdGE6OiByYXdfZGF0YV9tYW5hZ2VyCisKKyAgIFRoaXMgY29udGVudCBtYW5hZ2VyIHByb3ZpZGVzIG9ubHkgYSBtaW5pbXVtIGludGVyZmFjZSBiZXlvbmQgdGhhdCBwcm92aWRlZAorICAgYnkgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpdHNlbGY6ICBpdCBkZWFscyBvbmx5IHdpdGggdGV4dCwgcmF3CisgICBieXRlIHN0cmluZ3MsIGFuZCA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMuICBOZXZlcnRoZWxlc3MsIGl0CisgICBwcm92aWRlcyBzaWduaWZpY2FudCBhZHZhbnRhZ2VzIGNvbXBhcmVkIHRvIHRoZSBiYXNlIEFQSTogYGBnZXRfY29udGVudGBgIG9uCisgICBhIHRleHQgcGFydCB3aWxsIHJldHVybiBhIHVuaWNvZGUgc3RyaW5nIHdpdGhvdXQgdGhlIGFwcGxpY2F0aW9uIG5lZWRpbmcgdG8KKyAgIG1hbnVhbGx5IGRlY29kZSBpdCwgYGBzZXRfY29udGVudGBgIHByb3ZpZGVzIGEgcmljaCBzZXQgb2Ygb3B0aW9ucyBmb3IKKyAgIGNvbnRyb2xsaW5nIHRoZSBoZWFkZXJzIGFkZGVkIHRvIGEgcGFydCBhbmQgY29udHJvbGxpbmcgdGhlIGNvbnRlbnQgdHJhbnNmZXIKKyAgIGVuY29kaW5nLCBhbmQgaXQgZW5hYmxlcyB0aGUgdXNlIG9mIHRoZSB2YXJpb3VzIGBgYWRkX2BgIG1ldGhvZHMsIHRoZXJlYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBjcmVhdGlvbiBvZiBtdWx0aXBhcnQgbWVzc2FnZXMuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KG1zZywgZXJyb3JzPSdyZXBsYWNlJykKKworICAgICAgUmV0dXJuIHRoZSBwYXlsb2FkIG9mIHRoZSBwYXJ0IGFzIGVpdGhlciBhIHN0cmluZyAoZm9yIGBgdGV4dGBgIHBhcnRzKSwgYQorICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5FbWFpbE1lc3NhZ2VgIG9iamVjdCAoZm9yIGBgbWVzc2FnZS9yZmM4MjJgYAorICAgICAgcGFydHMpLCBvciBhIGBgYnl0ZXNgYCBvYmplY3QgKGZvciBhbGwgb3RoZXIgbm9uLW11bHRpcGFydCB0eXBlcykuICBSYWlzZQorICAgICAgYSA6ZXhjOmBLZXlFcnJvcmAgaWYgY2FsbGVkIG9uIGEgYGBtdWx0aXBhcnRgYC4gIElmIHRoZSBwYXJ0IGlzIGEKKyAgICAgIGBgdGV4dGBgIHBhcnQgYW5kICplcnJvcnMqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSBlcnJvciBoYW5kbGVyIHdoZW4KKyAgICAgIGRlY29kaW5nIHRoZSBwYXlsb2FkIHRvIHVuaWNvZGUuICBUaGUgZGVmYXVsdCBlcnJvciBoYW5kbGVyIGlzCisgICAgICBgYHJlcGxhY2VgYC4KKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQobXNnLCA8J3N0cic+LCBzdWJ0eXBlPSJwbGFpbiIsIGNoYXJzZXQ9J3V0Zi04JyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnYnl0ZXMnPiwgbWFpbnR5cGUsIHN1YnR5cGUsIGN0ZT0iYmFzZTY0IiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnTWVzc2FnZSc+LCBjdGU9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisgICAgICAgICAgICAgICBzZXRfY29udGVudChtc2csIDwnbGlzdCc+LCBzdWJ0eXBlPSdtaXhlZCcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM9Tm9uZSwgaGVhZGVycz1Ob25lKQorCisgICAgICAgQWRkIGhlYWRlcnMgYW5kIHBheWxvYWQgdG8gKm1zZyo6CisKKyAgICAgICBBZGQgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIgd2l0aCBhIGBgbWFpbnR5cGUvc3VidHlwZWBgCisgICAgICAgdmFsdWUuCisKKyAgICAgICAgICAgKiBGb3IgYGBzdHJgYCwgc2V0IHRoZSBNSU1FIGBgbWFpbnR5cGVgYCB0byBgYHRleHRgYCwgYW5kIHNldCB0aGUKKyAgICAgICAgICAgICBzdWJ0eXBlIHRvICpzdWJ0eXBlKiBpZiBpdCBpcyBzcGVjaWZpZWQsIG9yIGBgcGxhaW5gYCBpZiBpdCBpcyBub3QuCisgICAgICAgICAgICogRm9yIGBgYnl0ZXNgYCwgdXNlIHRoZSBzcGVjaWZpZWQgKm1haW50eXBlKiBhbmQgKnN1YnR5cGUqLCBvcgorICAgICAgICAgICAgIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGV5IGFyZSBub3Qgc3BlY2lmaWVkLgorICAgICAgICAgICAqIEZvciA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdHMsIHNldCB0aGUgbWFpbnR5cGUgdG8KKyAgICAgICAgICAgICBgYG1lc3NhZ2VgYCwgYW5kIHNldCB0aGUgc3VidHlwZSB0byAqc3VidHlwZSogaWYgaXQgaXMgc3BlY2lmaWVkCisgICAgICAgICAgICAgb3IgYGByZmM4MjJgYCBpZiBpdCBpcyBub3QuICBJZiAqc3VidHlwZSogaXMgYGBwYXJ0aWFsYGAsIHJhaXNlIGFuCisgICAgICAgICAgICAgZXJyb3IgKGBgYnl0ZXNgYCBvYmplY3RzIG11c3QgYmUgdXNlZCB0byBjb25zdHJ1Y3QKKyAgICAgICAgICAgICBgYG1lc3NhZ2UvcGFydGlhbGBgIHBhcnRzKS4KKyAgICAgICAgICAgKiBGb3IgKjwnbGlzdCc+Kiwgd2hpY2ggc2hvdWxkIGJlIGEgbGlzdCBvZgorICAgICAgICAgICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cywgc2V0IHRoZSBgYG1haW50eXBlYGAgdG8KKyAgICAgICAgICAgICBgYG11bHRpcGFydGBgLCBhbmQgdGhlIGBgc3VidHlwZWBgIHRvICpzdWJ0eXBlKiBpZiBpdCBpcworICAgICAgICAgICAgIHNwZWNpZmllZCwgYW5kIGBgbWl4ZWRgYCBpZiBpdCBpcyBub3QuICBJZiB0aGUgbWVzc2FnZSBwYXJ0cyBpbgorICAgICAgICAgICAgIHRoZSAqPCdsaXN0Jz4qIGhhdmUgOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycywgcmVtb3ZlCisgICAgICAgICAgICAgdGhlbS4KKworICAgICAgIElmICpjaGFyc2V0KiBpcyBwcm92aWRlZCAod2hpY2ggaXMgdmFsaWQgb25seSBmb3IgYGBzdHJgYCksIGVuY29kZSB0aGUKKyAgICAgICBzdHJpbmcgdG8gYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIgc2V0LiAgVGhlIGRlZmF1bHQgaXMKKyAgICAgICBgYHV0Zi04YGAuICBJZiB0aGUgc3BlY2lmaWVkICpjaGFyc2V0KiBpcyBhIGtub3duIGFsaWFzIGZvciBhIHN0YW5kYXJkCisgICAgICAgTUlNRSBjaGFyc2V0IG5hbWUsIHVzZSB0aGUgc3RhbmRhcmQgY2hhcnNldCBpbnN0ZWFkLgorCisgICAgICAgSWYgKmN0ZSogaXMgc2V0LCBlbmNvZGUgdGhlIHBheWxvYWQgdXNpbmcgdGhlIHNwZWNpZmllZCBjb250ZW50IHRyYW5zZmVyCisgICAgICAgZW5jb2RpbmcsIGFuZCBzZXQgdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LVRyYW5zZmVyLUVuZGNvZGluZ2AgaGVhZGVyIHRvCisgICAgICAgdGhhdCB2YWx1ZS4gIEZvciBgYHN0cmBgIG9iamVjdHMsIGlmIGl0IGlzIG5vdCBzZXQgdXNlIGhldXJpc3RpY3MgdG8KKyAgICAgICBkZXRlcm1pbmUgdGhlIG1vc3QgY29tcGFjdCBlbmNvZGluZy4gIFBvc3NpYmxlIHZhbHVlcyBmb3IgKmN0ZSogYXJlCisgICAgICAgYGBxdW90ZWQtcHJpbnRhYmxlYGAsIGBgYmFzZTY0YGAsIGBgN2JpdGBgLCBgYDhiaXRgYCwgYW5kIGBgYmluYXJ5YGAuCisgICAgICAgSWYgdGhlIGlucHV0IGNhbm5vdCBiZSBlbmNvZGVkIGluIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgKGVnOiBgYDdiaXRgYCksCisgICAgICAgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYC4gIEZvciA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgLCBwZXIKKyAgICAgICA6cmZjOmAyMDQ2YCwgcmFpc2UgYW4gZXJyb3IgaWYgYSAqY3RlKiBvZiBgYHF1b3RlZC1wcmludGFibGVgYCBvcgorICAgICAgIGBgYmFzZTY0YGAgaXMgcmVxdWVzdGVkIGZvciAqc3VidHlwZSogYGByZmM4MjJgYCwgYW5kIGZvciBhbnkgKmN0ZSoKKyAgICAgICBvdGhlciB0aGFuIGBgN2JpdGBgIGZvciAqc3VidHlwZSogYGBleHRlcm5hbC1ib2R5YGAuICBGb3IKKyAgICAgICBgYG1lc3NhZ2UvcmZjODIyYGAsIHVzZSBgYDhiaXRgYCBpZiAqY3RlKiBpcyBub3Qgc3BlY2lmaWVkLiAgRm9yIGFsbAorICAgICAgIG90aGVyIHZhbHVlcyBvZiAqc3VidHlwZSosIHVzZSBgYDdiaXRgYC4KKworICAgICAgIC4uIG5vdGU6OiBBICpjdGUqIG9mIGBgYmluYXJ5YGAgZG9lcyBub3QgYWN0dWFsbHkgd29yayBjb3JyZWN0bHkgeWV0LgorICAgICAgICAgIFRoZSBgYE1lc3NhZ2VgYCBvYmplY3QgYXMgbW9kaWZpZWQgYnkgYGBzZXRfY29udGVudGBgIGlzIGNvcnJlY3QsIGJ1dAorICAgICAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgZG9lcyBub3Qgc2VyaWFsaXplIGl0CisgICAgICAgICAgY29ycmVjdGx5LgorCisgICAgICAgSWYgKmRpc3Bvc2l0aW9uKiBpcyBzZXQsIHVzZSBpdCBhcyB0aGUgdmFsdWUgb2YgdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlci4gIElmIG5vdCBzcGVjaWZpZWQsIGFuZAorICAgICAgICpmaWxlbmFtZSogaXMgc3BlY2lmaWVkLCBhZGQgdGhlIGhlYWRlciB3aXRoIHRoZSB2YWx1ZSBgYGF0dGFjaG1lbnRgYC4KKyAgICAgICBJZiBpdCBpcyBub3Qgc3BlY2lmaWVkIGFuZCAqZmlsZW5hbWUqIGlzIGFsc28gbm90IHNwZWNpZmllZCwgZG8gbm90IGFkZAorICAgICAgIHRoZSBoZWFkZXIuICBUaGUgb25seSB2YWxpZCB2YWx1ZXMgZm9yICpkaXNwb3NpdGlvbiogYXJlIGBgYXR0YWNobWVudGBgCisgICAgICAgYW5kIGBgaW5saW5lYGAuCisKKyAgICAgICBJZiAqZmlsZW5hbWUqIGlzIHNwZWNpZmllZCwgdXNlIGl0IGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGBmaWxlbmFtZWBgCisgICAgICAgcGFyYW1ldGVyIG9mIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLiAgVGhlcmUgaXMgbm8KKyAgICAgICBkZWZhdWx0LgorCisgICAgICAgSWYgKmNpZCogaXMgc3BlY2lmaWVkLCBhZGQgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1JRGAgaGVhZGVyIHdpdGgKKyAgICAgICAqY2lkKiBhcyBpdHMgdmFsdWUuCisKKyAgICAgICBJZiAqcGFyYW1zKiBpcyBzcGVjaWZpZWQsIGl0ZXJhdGUgaXRzIGBgaXRlbXNgYCBtZXRob2QgYW5kIHVzZSB0aGUKKyAgICAgICByZXN1bHRpbmcgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycyB0byBzZXQgYWRkaXRpb25hbCBwYXJhbXRlcnMgb24gdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLgorCisgICAgICAgSWYgKmhlYWRlcnMqIGlzIHNwZWNpZmllZCBhbmQgaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb2YgdGhlIGZvcm0KKyAgICAgICBgYGhlYWRlcm5hbWU6IGhlYWRlcnZhbHVlYGAgb3IgYSBsaXN0IG9mIGBgaGVhZGVyYGAgb2JqZWN0cworICAgICAgIChkaXN0aW5ndWlzZWQgZnJvbSBzdHJpbmdzIGJ5IGhhdmluZyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSksIGFkZCB0aGUKKyAgICAgICBoZWFkZXJzIHRvICptc2cqLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAppbmRleCAzMDc1ZTg2Li44NGE1ZjUxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdApAQCAtMzMsMjMgKzMzLDMxIEBACiAKIC4uIGNsYXNzOjogTWVzc2FnZShwb2xpY3k9Y29tcGF0MzIpCiAKLSAgIFRoZSAqcG9saWN5KiBhcmd1bWVudCBkZXRlcm1pZW5zIHRoZSA6bW9kOmB+ZW1haWwucG9saWN5YCB0aGF0IHdpbGwgYmUgdXNlZAotICAgdG8gdXBkYXRlIHRoZSBtZXNzYWdlIG1vZGVsLiAgVGhlIGRlZmF1bHQgdmFsdWUsIDpjbGFzczpgY29tcGF0MzIKLSAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQotICAgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1ZHBhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3M6YGNvbXBhdDMyCisgICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgcG9saWN5LCB3aGljaCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQogICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMgVGhlICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAKLSAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTApCisgICAuLiBtZXRob2Q6OiBhc19zdHJpbmcodW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wLCBwb2xpY3k9Tm9uZSkKIAogICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBzdHJpbmcuICBXaGVuIG9wdGlvbmFsICp1bml4ZnJvbSoKLSAgICAgIGlzIGBgVHJ1ZWBgLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCi0gICAgICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIKLSAgICAgIGNoYW5nZXMgdG8gdGhlIDpjbGFzczpgTWVzc2FnZWAgaWYgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8KLSAgICAgIGNvbXBsZXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiB0byBhIHN0cmluZyAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkKLSAgICAgIGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCkuCisgICAgICBpcyB0cnVlLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCisgICAgICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIEZvciBiYWNrd2FyZCBjb21wYWJpdGlsaXR5IHJlYXNvbnMsCisgICAgICAqbWF4aGVhZGVybGVuKiBkZWZhdWx0cyB0byBgYDBgYCwgc28gaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgdmFsdWUgeW91CisgICAgICBtdXN0IG92ZXJyaWRlIGl0IGV4cGxpY2l0bHkgKHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yICptYXhfbGluZV9sZW5ndGgqIGluCisgICAgICB0aGUgcG9saWN5IHdpbGwgYmUgaWdub3JlZCBieSB0aGlzIG1ldGhvZCkuICBUaGUgKnBvbGljeSogYXJndW1lbnQgbWF5IGJlCisgICAgICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvYnRhaW5lZCBmcm9tIHRoZSBtZXNzYWdlIGluc3RhbmNlLgorICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgcHJvZHVjZWQgYnkgdGhlCisgICAgICBtZXRob2QsIHNpbmNlIHRoZSBzcGVjaWZpZWQgKnBvbGljeSogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBgR2VuZXJhdG9yYGAuCisKKyAgICAgIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZgorICAgICAgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nCisgICAgICAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KIAogICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIG1heSBub3QgYWx3YXlzCiAgICAgICBmb3JtYXQgdGhlIG1lc3NhZ2UgdGhlIHdheSB5b3Ugd2FudC4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0IGl0IGRvZXMKQEAgLTY1LDEwICs3Myw1OCBAQAogICAgICAgICAgZy5mbGF0dGVuKG1zZykKICAgICAgICAgIHRleHQgPSBmcC5nZXR2YWx1ZSgpCiAKKyAgICAgIElmIHRoZSBtZXNzYWdlIG9iamVjdCBjb250YWlucyBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdCBlbmNvZGVkIGFjY29yZGluZworICAgICAgdG8gUkZDIHN0YW5kYXJkcywgdGhlIG5vbi1jb21wbGlhbnQgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHVuaWNvZGUKKyAgICAgICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuICAoU2VlIGFsc28gOm1ldGg6YC5hc19ieXRlc2AgYW5kCisgICAgICA6Y2xhc3M6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3JgLikKKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgdGhlICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IF9fc3RyX18oKQogCi0gICAgICBFcXVpdmFsZW50IHRvIGBgYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpYGAuCisgICAgICBFcXVpdmFsZW50IHRvIDptZXRoOmAuYXNfc3RyaW5nKClgLiAgQWxsb3dzIGBgc3RyKG1zZylgYCB0byBwcm9kdWNlIGEKKyAgICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworCisgICAuLiBtZXRob2Q6OiBhc19ieXRlcyh1bml4ZnJvbT1GYWxzZSwgcG9saWN5PU5vbmUpCisKKyAgICAgIFJldHVybiB0aGUgZW50aXJlIG1lc3NhZ2UgZmxhdHRlbmVkIGFzIGEgYnl0ZXMgb2JqZWN0LiAgV2hlbiBvcHRpb25hbAorICAgICAgKnVuaXhmcm9tKiBpcyB0cnVlLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZAorICAgICAgc3RyaW5nLiAgKnVuaXhmcm9tKiBkZWZhdWx0cyB0byBgYEZhbHNlYGAuICBUaGUgKnBvbGljeSogYXJndW1lbnQgbWF5IGJlCisgICAgICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvYnRhaW5lZCBmcm9tIHRoZSBtZXNzYWdlIGluc3RhbmNlLgorICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgcHJvZHVjZWQgYnkgdGhlCisgICAgICBtZXRob2QsIHNpbmNlIHRoZSBzcGVjaWZpZWQgKnBvbGljeSogd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICAgICBgYEJ5dGVzR2VuZXJhdG9yYGAuCisKKyAgICAgIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZgorICAgICAgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nCisgICAgICAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKworICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIG1heSBub3QgYWx3YXlzCisgICAgICBmb3JtYXQgdGhlIG1lc3NhZ2UgdGhlIHdheSB5b3Ugd2FudC4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0IGl0IGRvZXMKKyAgICAgIG5vdCBkbyB0aGUgbWFuZ2xpbmcgb2YgbGluZXMgdGhhdCBiZWdpbiB3aXRoIGBgRnJvbWBgIHRoYXQgaXMKKyAgICAgIHJlcXVpcmVkIGJ5IHRoZSB1bml4IG1ib3ggZm9ybWF0LiAgRm9yIG1vcmUgZmxleGliaWxpdHksIGluc3RhbnRpYXRlIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgaW5zdGFuY2UgYW5kIHVzZSBpdHMKKyAgICAgIDptZXRoOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLmZsYXR0ZW5gIG1ldGhvZCBkaXJlY3RseS4KKyAgICAgIEZvciBleGFtcGxlOjoKKworICAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworICAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEJ5dGVzR2VuZXJhdG9yCisgICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICAgZyA9IEJ5dGVzR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89VHJ1ZSwgbWF4aGVhZGVybGVuPTYwKQorICAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgIHRleHQgPSBmcC5nZXR2YWx1ZSgpCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIC4uIG1ldGhvZDo6IF9fYnl0ZXNfXygpCisKKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19ieXRlcygpYC4gIEFsbG93cyBgYGJ5dGVzKG1zZylgYCB0byBwcm9kdWNlIGEKKyAgICAgIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAogICAgLi4gbWV0aG9kOjogaXNfbXVsdGlwYXJ0KCkKQEAgLTQxMCw3ICs0NjYsOCBAQAogICAgICAgdG8gYGBGYWxzZWBgLgogCiAKLSAgIC4uIG1ldGhvZDo6IHNldF9wYXJhbShwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLCBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnKQorICAgLi4gbWV0aG9kOjogc2V0X3BhcmFtKHBhcmFtLCB2YWx1ZSwgaGVhZGVyPSdDb250ZW50LVR5cGUnLCByZXF1b3RlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSkKIAogICAgICAgU2V0IGEgcGFyYW1ldGVyIGluIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuICBJZiB0aGUKICAgICAgIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaGVhZGVyLCBpdHMgdmFsdWUgd2lsbCBiZSByZXBsYWNlZCB3aXRoCkBAIC00MjcsNiArNDg0LDEyIEBACiAgICAgICBsYW5ndWFnZSwgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgc3RyaW5nLiAgQm90aCAqY2hhcnNldCogYW5kICpsYW5ndWFnZSoKICAgICAgIHNob3VsZCBiZSBzdHJpbmdzLgogCisgICAgICBJZiAqcmVwbGFjZSogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCkgdGhlIGhlYWRlciBpcyBtb3ZlZCB0byB0aGUKKyAgICAgIGVuZCBvZiB0aGUgbGlzdCBvZiBoZWFkZXJzLiAgSWYgKnJlcGxhY2UqIGlzIGBgVHJ1ZWBgLCB0aGUgaGVhZGVyCisgICAgICB3aWxsIGJlIHVwZGF0ZWQgaW4gcGxhY2UuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOiAzLjQgYGByZXBsYWNlYGAga2V5d29yZCB3YXMgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogZGVsX3BhcmFtKHBhcmFtLCBoZWFkZXI9J2NvbnRlbnQtdHlwZScsIHJlcXVvdGU9VHJ1ZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKaW5kZXggY2IyMDIzYy4uYzJmOWU2YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CkBAIC05Nyw2ICs5NywxNyBAQAogYGBzZW5kbWFpbCdzYGAgYGBzdGRpbmBgLCB3aGVyZSB0aGUgZGVmYXVsdCBwb2xpY3kgd291bGQgdXNlIGBgXG5gYCBsaW5lCiBzZXBhcmF0b3JzLgogCitTb21lIGVtYWlsIHBhY2thZ2UgbWV0aG9kcyBhY2NlcHQgYSAqcG9saWN5KiBrZXl3b3JkIGFyZ3VtZW50LCBhbGxvd2luZyB0aGUKK3BvbGljeSB0byBiZSBvdmVycmlkZGVuIGZvciB0aGF0IG1ldGhvZC4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgdXNlcwordGhlIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ2AgbWV0aG9kIG9mIHRoZSAqbXNnKiBvYmplY3QgZnJvbQordGhlIHByZXZpb3VzIGV4YW1wbGUgYW5kIHdyaXRlcyB0aGUgbWVzc2FnZSB0byBhIGZpbGUgdXNpbmcgdGhlIG5hdGl2ZSBsaW5lCitzZXBhcmF0b3JzIGZvciB0aGUgcGxhdGZvcm0gb24gd2hpY2ggaXQgaXMgcnVubmluZzo6CisKKyAgID4+PiBpbXBvcnQgb3MKKyAgID4+PiB3aXRoIG9wZW4oJ2NvbnZlcnRlZC50eHQnLCAnd2InKSBhcyBmOgorICAgLi4uICAgICBmLndyaXRlKG1zZy5hc19ieXRlcyhwb2xpY3k9bXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPW9zLmxpbmVzZXApKSkKKyAgIDE3CisKIFBvbGljeSBvYmplY3RzIGNhbiBhbHNvIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBhZGRpdGlvbiBvcGVyYXRvciwgcHJvZHVjaW5nIGEKIHBvbGljeSBvYmplY3Qgd2hvc2Ugc2V0dGluZ3MgYXJlIGEgY29tYmluYXRpb24gb2YgdGhlIG5vbi1kZWZhdWx0IHZhbHVlcyBvZiB0aGUKIHN1bW1lZCBvYmplY3RzOjoKQEAgLTM2MCw3ICszNzEsNyBAQAogICAgdG8pIDpyZmM6YDUzMjJgLCA6cmZjOmAyMDQ3YCwgYW5kIHRoZSBjdXJyZW50IE1JTUUgUkZDcy4KIAogICAgVGhpcyBwb2xpY3kgYWRkcyBuZXcgaGVhZGVyIHBhcnNpbmcgYW5kIGZvbGRpbmcgYWxnb3JpdGhtcy4gIEluc3RlYWQgb2YKLSAgIHNpbXBsZSBzdHJpbmdzLCBoZWFkZXJzIGFyZSBjdXN0b20gb2JqZWN0cyB3aXRoIGN1c3RvbSBhdHRyaWJ1dGVzIGRlcGVuZGluZworICAgc2ltcGxlIHN0cmluZ3MsIGhlYWRlcnMgYXJlIGBgc3RyYGAgc3ViY2xhc3NlcyB3aXRoIGF0dHJpYnV0ZXMgdGhhdCBkZXBlbmQKICAgIG9uIHRoZSB0eXBlIG9mIHRoZSBmaWVsZC4gIFRoZSBwYXJzaW5nIGFuZCBmb2xkaW5nIGFsZ29yaXRobSBmdWxseSBpbXBsZW1lbnQKICAgIDpyZmM6YDIwNDdgIGFuZCA6cmZjOmA1MzIyYC4KIApAQCAtMzk3LDYgKzQwOCwyMCBAQAogICAgICAgZmllbGRzIGFyZSB0cmVhdGVkIGFzIHVuc3RydWN0dXJlZC4gIFRoaXMgbGlzdCB3aWxsIGJlIGNvbXBsZXRlZCBiZWZvcmUKICAgICAgIHRoZSBleHRlbnNpb24gaXMgbWFya2VkIHN0YWJsZS4pCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvbnRlbnRfbWFuYWdlcgorCisgICAgICBBbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCB0d28gbWV0aG9kczogZ2V0X2NvbnRlbnQgYW5kIHNldF9jb250ZW50LiAgV2hlbgorICAgICAgdGhlIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmdldF9jb250ZW50YCBvcgorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2Uuc2V0X2NvbnRlbnRgIG1ldGhvZCBvZiBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdCBpcyBjYWxsZWQsIGl0IGNhbGxzIHRoZQorICAgICAgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhpcyBvYmplY3QsIHBhc3NpbmcgaXQgdGhlIG1lc3NhZ2Ugb2JqZWN0IGFzIGl0cworICAgICAgZmlyc3QgYXJndW1lbnQsIGFuZCBhbnkgYXJndW1lbnRzIG9yIGtleXdvcmRzIHRoYXQgd2VyZSBwYXNzZWQgdG8gaXQgYXMKKyAgICAgIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgQnkgZGVmYXVsdCBgYGNvbnRlbnRfbWFuYWdlcmBgIGlzIHNldCB0bworICAgICAgOmRhdGE6YH5lbWFpbC5jb250ZW50bWFuYWdlci5yYXdfZGF0YV9tYW5hZ2VyYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkIDMuNAorCisKICAgIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWJzdHJhY3QKICAgIG1ldGhvZHMgb2YgOmNsYXNzOmBQb2xpY3lgOgogCkBAIC00MTYsNyArNDQxLDcgQEAKICAgICAgIFRoZSBuYW1lIGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIElmIHRoZSBpbnB1dCB2YWx1ZSBoYXMgYSBgYG5hbWVgYAogICAgICAgYXR0cmlidXRlIGFuZCBpdCBtYXRjaGVzICpuYW1lKiBpZ25vcmluZyBjYXNlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQKICAgICAgIHVuY2hhbmdlZC4gIE90aGVyd2lzZSB0aGUgKm5hbWUqIGFuZCAqdmFsdWUqIGFyZSBwYXNzZWQgdG8KLSAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQgYXMKKyAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcwogICAgICAgdGhlIHZhbHVlLiAgSW4gdGhpcyBjYXNlIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkIGlmIHRoZSBpbnB1dCB2YWx1ZQogICAgICAgY29udGFpbnMgQ1Igb3IgTEYgY2hhcmFjdGVycy4KIApAQCAtNDI0LDcgKzQ0OSw3IEBACiAKICAgICAgIElmIHRoZSB2YWx1ZSBoYXMgYSBgYG5hbWVgYCBhdHRyaWJ1dGUsIGl0IGlzIHJldHVybmVkIHRvIHVubW9kaWZpZWQuCiAgICAgICBPdGhlcndpc2UgdGhlICpuYW1lKiwgYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIG9yIExGIGNoYXJhY3RlcnMKLSAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tCisgICAgICByZW1vdmVkLCBhcmUgcGFzc2VkIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nCiAgICAgICBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkLiAgQW55IHN1cnJvZ2F0ZWVzY2FwZWQgYnl0ZXMgZ2V0IHR1cm5lZCBpbnRvCiAgICAgICB0aGUgdW5pY29kZSB1bmtub3duLWNoYXJhY3RlciBnbHlwaC4KIApAQCAtNDM0LDkgKzQ1OSw5IEBACiAgICAgICBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSAnc291cmNlIHZhbHVlJyBpZiBhbmQgb25seSBpZiBpdCBkb2VzIG5vdAogICAgICAgaGF2ZSBhIGBgbmFtZWBgIGF0dHJpYnV0ZSAoaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlIG1lYW5zIGl0IGlzIGEKICAgICAgIGhlYWRlciBvYmplY3Qgb2Ygc29tZSBzb3J0KS4gIElmIGEgc291cmNlIHZhbHVlIG5lZWRzIHRvIGJlIHJlZm9sZGVkCi0gICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBjdXN0b20gaGVhZGVyIG9iamVjdCBieQorICAgICAgYWNjb3JkaW5nIHRvIHRoZSBwb2xpY3ksIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGEgaGVhZGVyIG9iamVjdCBieQogICAgICAgcGFzc2luZyB0aGUgKm5hbWUqIGFuZCB0aGUgKnZhbHVlKiB3aXRoIGFueSBDUiBhbmQgTEYgY2hhcmFjdGVycyByZW1vdmVkCi0gICAgICB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLiAgRm9sZGluZyBvZiBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKKyAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgaGVhZGVyIG9iamVjdCBpcyBkb25lIGJ5CiAgICAgICBjYWxsaW5nIGl0cyBgYGZvbGRgYCBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kuCiAKICAgICAgIFNvdXJjZSB2YWx1ZXMgYXJlIHNwbGl0IGludG8gbGluZXMgdXNpbmcgOm1ldGg6YH5zdHIuc3BsaXRsaW5lc2AuICBJZgpAQCAtNDkxLDIzICs1MTYsMjMgQEAKIHRoZSBlbWFpbCBwYWNrYWdlIGlzIGNoYW5nZWQgZnJvbSB0aGUgUHl0aG9uIDMuMiBBUEkgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgogCiAgICAqIFNldHRpbmcgYSBoZWFkZXIgb24gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMgaW4gdGhhdAotICAgICBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCisgICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgaGVhZGVyIG9iamVjdCBjcmVhdGVkLgogCiAgICAqIEZldGNoaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMKLSAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCisgICAgIGluIHRoYXQgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCiAgICAgIHJldHVybmVkLgogCi0gICAqIEFueSBjdXN0b20gaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKKyAgICogQW55IGhlYWRlciBvYmplY3QsIG9yIGFueSBoZWFkZXIgdGhhdCBpcyByZWZvbGRlZCBkdWUgdG8gdGhlCiAgICAgIHBvbGljeSBzZXR0aW5ncywgaXMgZm9sZGVkIHVzaW5nIGFuIGFsZ29yaXRobSB0aGF0IGZ1bGx5IGltcGxlbWVudHMgdGhlCiAgICAgIFJGQyBmb2xkaW5nIGFsZ29yaXRobXMsIGluY2x1ZGluZyBrbm93aW5nIHdoZXJlIGVuY29kZWQgd29yZHMgYXJlIHJlcXVpcmVkCiAgICAgIGFuZCBhbGxvd2VkLgogCiBGcm9tIHRoZSBhcHBsaWNhdGlvbiB2aWV3LCB0aGlzIG1lYW5zIHRoYXQgYW55IGhlYWRlciBvYnRhaW5lZCB0aHJvdWdoIHRoZQotOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpcyBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IHdpdGggY3VzdG9tCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgaGVhZGVyIG9iamVjdCB3aXRoIGV4dHJhCiBhdHRyaWJ1dGVzLCB3aG9zZSBzdHJpbmcgdmFsdWUgaXMgdGhlIGZ1bGx5IGRlY29kZWQgdW5pY29kZSB2YWx1ZSBvZiB0aGUKIGhlYWRlci4gIExpa2V3aXNlLCBhIGhlYWRlciBtYXkgYmUgYXNzaWduZWQgYSBuZXcgdmFsdWUsIG9yIGEgbmV3IGhlYWRlcgogY3JlYXRlZCwgdXNpbmcgYSB1bmljb2RlIHN0cmluZywgYW5kIHRoZSBwb2xpY3kgd2lsbCB0YWtlIGNhcmUgb2YgY29udmVydGluZwogdGhlIHVuaWNvZGUgc3RyaW5nIGludG8gdGhlIGNvcnJlY3QgUkZDIGVuY29kZWQgZm9ybS4KIAotVGhlIGN1c3RvbSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCitUaGUgaGVhZGVyIG9iamVjdHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBpbgogOm1vZDpgfmVtYWlsLmhlYWRlcnJlZ2lzdHJ5YC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAppbmRleCBhNmNiYmNlLi4zMzFkMmVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CkBAIC01Myw2ICs1Myw3IEBACiAgICBlbWFpbC5nZW5lcmF0b3IucnN0CiAgICBlbWFpbC5wb2xpY3kucnN0CiAgICBlbWFpbC5oZWFkZXJyZWdpc3RyeS5yc3QKKyAgIGVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdAogICAgZW1haWwubWltZS5yc3QKICAgIGVtYWlsLmhlYWRlci5yc3QKICAgIGVtYWlsLmNoYXJzZXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnN1cmVwaXAucnN0IGIvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU2ZDRmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdApAQCAtMCwwICsxLDEyNSBAQAorOm1vZDpgZW5zdXJlcGlwYCAtLS0gQm9vdHN0cmFwcGluZyB0aGUgYGBwaXBgYCBpbnN0YWxsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGVuc3VyZXBpcAorICAgOnN5bm9wc2lzOiBCb290c3RyYXBwaW5nIHRoZSBgYHBpcGBgIGluc3RhbGxlciBpbnRvIGFuIGV4aXN0aW5nIFB5dGhvbgorICAgICAgICAgICAgICBpbnN0YWxsYXRpb24gb3IgdmlydHVhbCBlbnZpcm9ubWVudC4KKworVGhlIDptb2Q6YGVuc3VyZXBpcGAgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBib290c3RyYXBwaW5nIHRoZSBgYHBpcGBgCitpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoaXMKK2Jvb3RzdHJhcHBpbmcgYXBwcm9hY2ggcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBgYHBpcGBgIGlzIGFuIGluZGVwZW5kZW50Citwcm9qZWN0IHdpdGggaXRzIG93biByZWxlYXNlIGN5Y2xlLCBhbmQgdGhlIGxhdGVzdCBhdmFpbGFibGUgc3RhYmxlIHZlcnNpb24KK2lzIGJ1bmRsZWQgd2l0aCBtYWludGVuYW5jZSBhbmQgZmVhdHVyZSByZWxlYXNlcyBvZiB0aGUgQ1B5dGhvbiByZWZlcmVuY2UKK2ludGVycHJldGVyLgorCitJbiBtb3N0IGNhc2VzLCBlbmQgdXNlcnMgb2YgUHl0aG9uIHNob3VsZG4ndCBuZWVkIHRvIGludm9rZSB0aGlzIG1vZHVsZQorZGlyZWN0bHkgKGFzIGBgcGlwYGAgc2hvdWxkIGJlIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KSwgYnV0IGl0IG1heSBiZQorbmVlZGVkIGlmIGluc3RhbGxpbmcgYGBwaXBgYCB3YXMgc2tpcHBlZCB3aGVuIGluc3RhbGxpbmcgUHl0aG9uIChvcgord2hlbiBjcmVhdGluZyBhIHZpcnR1YWwgZW52aXJvbm1lbnQpIG9yIGFmdGVyIGV4cGxpY2l0bHkgdW5pbnN0YWxsaW5nCitgYHBpcGBgLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlICpkb2VzIG5vdCogYWNjZXNzIHRoZSBpbnRlcm5ldC4gQWxsIG9mIHRoZSBjb21wb25lbnRzCisgICBuZWVkZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgYXJlIGluY2x1ZGVkIGFzIGludGVybmFsIHBhcnRzIG9mIHRoZQorICAgcGFja2FnZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YGluc3RhbGwtaW5kZXhgCisgICAgICBUaGUgZW5kIHVzZXIgZ3VpZGUgZm9yIGluc3RhbGxpbmcgUHl0aG9uIHBhY2thZ2VzCisKKyAgIDpwZXA6YDQ1M2A6IEV4cGxpY2l0IGJvb3RzdHJhcHBpbmcgb2YgcGlwIGluIFB5dGhvbiBpbnN0YWxsYXRpb25zCisgICAgICBUaGUgb3JpZ2luYWwgcmF0aW9uYWxlIGFuZCBzcGVjaWZpY2F0aW9uIGZvciB0aGlzIG1vZHVsZS4KKworCitDb21tYW5kIGxpbmUgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGlzIGludm9rZWQgdXNpbmcgdGhlIGludGVycHJldGVyJ3MgYGAtbWBgIHN3aXRjaC4KKworVGhlIHNpbXBsZXN0IHBvc3NpYmxlIGludm9jYXRpb24gaXM6OgorCisgICAgcHl0aG9uIC1tIGVuc3VyZXBpcAorCitUaGlzIGludm9jYXRpb24gd2lsbCBpbnN0YWxsIGBgcGlwYGAgaWYgaXQgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLAorYnV0IG90aGVyd2lzZSBkb2VzIG5vdGhpbmcuIFRvIGVuc3VyZSB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgYGBwaXBgYAoraXMgYXQgbGVhc3QgYXMgcmVjZW50IGFzIHRoZSBvbmUgYnVuZGxlZCB3aXRoIGBgZW5zdXJlcGlwYGAsIHBhc3MgdGhlCitgYC0tdXBncmFkZWBgIG9wdGlvbjo6CisKKyAgICBweXRob24gLW0gZW5zdXJlcGlwIC0tdXBncmFkZQorCitCeSBkZWZhdWx0LCBgYHBpcGBgIGlzIGluc3RhbGxlZCBpbnRvIHRoZSBjdXJyZW50IHZpcnR1YWwgZW52aXJvbm1lbnQKKyhpZiBvbmUgaXMgYWN0aXZlKSBvciBpbnRvIHRoZSBzeXN0ZW0gc2l0ZSBwYWNrYWdlcyAoaWYgdGhlcmUgaXMgbm8KK2FjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50KS4gVGhlIGluc3RhbGxhdGlvbiBsb2NhdGlvbiBjYW4gYmUgY29udHJvbGxlZAordGhyb3VnaCB0d28gYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgb3B0aW9uczoKKworKiBgYC0tcm9vdCA8ZGlyPmBgOiBJbnN0YWxscyBgYHBpcGBgIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiByb290IGRpcmVjdG9yeQorICByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB2aXJ0dWFsIGVudmlyb25tZW50IChpZiBhbnkpCisgIG9yIHRoZSBkZWZhdWx0IHJvb3QgZm9yIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24uCisqIGBgLS11c2VyYGA6IEluc3RhbGxzIGBgcGlwYGAgaW50byB0aGUgdXNlciBzaXRlIHBhY2thZ2VzIGRpcmVjdG9yeSByYXRoZXIKKyAgdGhhbiBnbG9iYWxseSBmb3IgdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbiAodGhpcyBvcHRpb24gaXMgbm90CisgIHBlcm1pdHRlZCBpbnNpZGUgYW4gYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnQpLgorCitCeSBkZWZhdWx0LCB0aGUgc2NyaXB0cyBgYHBpcFhgYCBhbmQgYGBwaXBYLllgYCB3aWxsIGJlIGluc3RhbGxlZCAod2hlcmUKK1guWSBzdGFuZHMgZm9yIHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB1c2VkIHRvIGludm9rZSBgYGVuc3VyZXBpcGBgKS4gVGhlCitzY3JpcHRzIGluc3RhbGxlZCBjYW4gYmUgY29udHJvbGxlZCB0aHJvdWdoIHR3byBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZQorb3B0aW9uczoKKworKiBgYC0tYWx0aW5zdGFsbGBgOiBpZiBhbiBhbHRlcm5hdGUgaW5zdGFsbGF0aW9uIGlzIHJlcXVlc3RlZCwgdGhlIGBgcGlwWGBgCisgIHNjcmlwdCB3aWxsICpub3QqIGJlIGluc3RhbGxlZC4KKworKiBgYC0tZGVmYXVsdC1waXBgYDogaWYgYSAiZGVmYXVsdCBwaXAiIGluc3RhbGxhdGlvbiBpcyByZXF1ZXN0ZWQsIHRoZQorICAgYGBwaXBgYCBzY3JpcHQgd2lsbCBiZSBpbnN0YWxsZWQgaW4gYWRkaXRpb24gdG8gdGhlIHR3byByZWd1bGFyIHNjcmlwdHMuCisKK1Byb3ZpZGluZyBib3RoIG9mIHRoZSBzY3JpcHQgc2VsZWN0aW9uIG9wdGlvbnMgd2lsbCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKworCitNb2R1bGUgQVBJCistLS0tLS0tLS0tCisKKzptb2Q6YGVuc3VyZXBpcGAgZXhwb3NlcyB0d28gZnVuY3Rpb25zIGZvciBwcm9ncmFtbWF0aWMgdXNlOgorCisuLiBmdW5jdGlvbjo6IHZlcnNpb24oKQorCisgICBSZXR1cm5zIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIGJ1bmRsZWQgdmVyc2lvbiBvZiBwaXAgdGhhdCB3aWxsIGJlCisgICBpbnN0YWxsZWQgd2hlbiBib290c3RyYXBwaW5nIGFuIGVudmlyb25tZW50LgorCisuLiBmdW5jdGlvbjo6IGJvb3RzdHJhcChyb290PU5vbmUsIHVwZ3JhZGU9RmFsc2UsIHVzZXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdGluc3RhbGw9RmFsc2UsIGRlZmF1bHRfcGlwPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHk9MCkKKworICAgQm9vdHN0cmFwcyBgYHBpcGBgIGludG8gdGhlIGN1cnJlbnQgb3IgZGVzaWduYXRlZCBlbnZpcm9ubWVudC4KKworICAgKnJvb3QqIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSByb290IGRpcmVjdG9yeSB0byBpbnN0YWxsIHJlbGF0aXZlIHRvLgorICAgSWYgKnJvb3QqIGlzIE5vbmUsIHRoZW4gaW5zdGFsbGF0aW9uIHVzZXMgdGhlIGRlZmF1bHQgaW5zdGFsbCBsb2NhdGlvbgorICAgZm9yIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgorCisgICAqdXBncmFkZSogaW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIHVwZ3JhZGUgYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uCisgICBvZiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgYGBwaXBgYCB0byB0aGUgYnVuZGxlZCB2ZXJzaW9uLgorCisgICAqdXNlciogaW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIHRoZSB1c2VyIHNjaGVtZSByYXRoZXIgdGhhbiBpbnN0YWxsaW5nCisgICBnbG9iYWxseS4KKworICAgQnkgZGVmYXVsdCwgdGhlIHNjcmlwdHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgKHdoZXJlCisgICBYLlkgc3RhbmRzIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFB5dGhvbikuCisKKyAgIElmICphbHRpbnN0YWxsKiBpcyBzZXQsIHRoZW4gYGBwaXBYYGAgd2lsbCAqbm90KiBiZSBpbnN0YWxsZWQuCisKKyAgIElmICpkZWZhdWx0X3BpcCogaXMgc2V0LCB0aGVuIGBgcGlwYGAgd2lsbCBiZSBpbnN0YWxsZWQgaW4gYWRkaXRpb24gdG8KKyAgIHRoZSB0d28gcmVndWxhciBzY3JpcHRzLgorCisgICBTZXR0aW5nIGJvdGggKmFsdGluc3RhbGwqIGFuZCAqZGVmYXVsdF9waXAqIHdpbGwgdHJpZ2dlcgorICAgOmV4YzpgVmFsdWVFcnJvcmAuCisKKyAgICp2ZXJib3NpdHkqIGNvbnRyb2xzIHRoZSBsZXZlbCBvZiBvdXRwdXQgdG8gOmRhdGE6YHN5cy5zdGRvdXRgIGZyb20gdGhlCisgICBib290c3RyYXBwaW5nIG9wZXJhdGlvbi4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBib290c3RyYXBwaW5nIHByb2Nlc3MgbWF5IGluc3RhbGwgYWRkaXRpb25hbCBtb2R1bGVzIHJlcXVpcmVkIGJ5CisgICAgICBgYHBpcGBgLCBidXQgb3RoZXIgc29mdHdhcmUgc2hvdWxkIG5vdCBhc3N1bWUgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwKKyAgICAgIGFsd2F5cyBiZSBwcmVzZW50IGJ5IGRlZmF1bHQgKGFzIHRoZSBkZXBlbmRlbmNpZXMgbWF5IGJlIHJlbW92ZWQgaW4gYQorICAgICAgZnV0dXJlIHZlcnNpb24gb2YgYGBwaXBgYCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbnVtLnJzdCBiL0RvYy9saWJyYXJ5L2VudW0ucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyMDMwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApAQCAtMCwwICsxLDY4OCBAQAorOm1vZDpgZW51bWAgLS0tIFN1cHBvcnQgZm9yIGVudW1lcmF0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnVtCisgICA6c3lub3BzaXM6IEltcGxlbWVudGF0aW9uIG9mIGFuIGVudW1lcmF0aW9uIGNsYXNzLgorCisuLiA6bW9kdWxlYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisuLiA6c2VjdGlvbmF1dGhvcjo6IEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4sCisuLiA6c2VjdGlvbmF1dGhvcjo6IEVsaSBCZW5kZXJza3kgPGVsaWJlbkBnbWFpbC5jb20+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFdGhhbiBGdXJtYW4gPGV0aGFuQHN0b25lbGVhZi51cz4KKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZW51bS5weWAKKworLS0tLS0tLS0tLS0tLS0tLQorCitBbiBlbnVtZXJhdGlvbiBpcyBhIHNldCBvZiBzeW1ib2xpYyBuYW1lcyAobWVtYmVycykgYm91bmQgdG8gdW5pcXVlLCBjb25zdGFudAordmFsdWVzLiAgV2l0aGluIGFuIGVudW1lcmF0aW9uLCB0aGUgbWVtYmVycyBjYW4gYmUgY29tcGFyZWQgYnkgaWRlbnRpdHksIGFuZAordGhlIGVudW1lcmF0aW9uIGl0c2VsZiBjYW4gYmUgaXRlcmF0ZWQgb3Zlci4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0d28gZW51bWVyYXRpb24gY2xhc3NlcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGRlZmluZSB1bmlxdWUKK3NldHMgb2YgbmFtZXMgYW5kIHZhbHVlczogOmNsYXNzOmBFbnVtYCBhbmQgOmNsYXNzOmBJbnRFbnVtYC4gIEl0IGFsc28gZGVmaW5lcworb25lIGRlY29yYXRvciwgOmZ1bmM6YHVuaXF1ZWAsIHRoYXQgZW5zdXJlcyBvbmx5IHVuaXF1ZSBtZW1iZXIgdmFsdWVzIGFyZQorcHJlc2VudCBpbiBhbiBlbnVtZXJhdGlvbi4KKworCitDcmVhdGluZyBhbiBFbnVtCistLS0tLS0tLS0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXgsIHdoaWNoIG1ha2VzIHRoZW0KK2Vhc3kgdG8gcmVhZCBhbmQgd3JpdGUuICBBbiBhbHRlcm5hdGl2ZSBjcmVhdGlvbiBtZXRob2QgaXMgZGVzY3JpYmVkIGluCitgRnVuY3Rpb25hbCBBUElgXy4gIFRvIGRlZmluZSBhbiBlbnVtZXJhdGlvbiwgc3ViY2xhc3MgOmNsYXNzOmBFbnVtYCBhcworZm9sbG93czo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBFbnVtCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLgorCisuLiBub3RlOjogTm9tZW5jbGF0dXJlCisKKyAgLSBUaGUgY2xhc3MgOmNsYXNzOmBDb2xvcmAgaXMgYW4gKmVudW1lcmF0aW9uKiAob3IgKmVudW0qKQorICAtIFRoZSBhdHRyaWJ1dGVzIDphdHRyOmBDb2xvci5yZWRgLCA6YXR0cjpgQ29sb3IuZ3JlZW5gLCBldGMuLCBhcmUKKyAgICAqZW51bWVyYXRpb24gbWVtYmVycyogKG9yICplbnVtIG1lbWJlcnMqKS4KKyAgLSBUaGUgZW51bSBtZW1iZXJzIGhhdmUgKm5hbWVzKiBhbmQgKnZhbHVlcyogKHRoZSBuYW1lIG9mCisgICAgOmF0dHI6YENvbG9yLnJlZGAgaXMgYGByZWRgYCwgdGhlIHZhbHVlIG9mIDphdHRyOmBDb2xvci5ibHVlYCBpcworICAgIGBgM2BgLCBldGMuKQorCisuLiBub3RlOjoKKworICAgIEV2ZW4gdGhvdWdoIHdlIHVzZSB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXggdG8gY3JlYXRlIEVudW1zLCBFbnVtcworICAgIGFyZSBub3Qgbm9ybWFsIFB5dGhvbiBjbGFzc2VzLiAgU2VlIGBIb3cgYXJlIEVudW1zIGRpZmZlcmVudD9gXyBmb3IKKyAgICBtb3JlIGRldGFpbHMuCisKK0VudW1lcmF0aW9uIG1lbWJlcnMgaGF2ZSBodW1hbiByZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zOjoKKworICAgID4+PiBwcmludChDb2xvci5yZWQpCisgICAgQ29sb3IucmVkCisKKy4uLndoaWxlIHRoZWlyIGBgcmVwcmBgIGhhcyBtb3JlIGluZm9ybWF0aW9uOjoKKworICAgID4+PiBwcmludChyZXByKENvbG9yLnJlZCkpCisgICAgPENvbG9yLnJlZDogMT4KKworVGhlICp0eXBlKiBvZiBhbiBlbnVtZXJhdGlvbiBtZW1iZXIgaXMgdGhlIGVudW1lcmF0aW9uIGl0IGJlbG9uZ3MgdG86OgorCisgICAgPj4+IHR5cGUoQ29sb3IucmVkKQorICAgIDxlbnVtICdDb2xvcic+CisgICAgPj4+IGlzaW5zdGFuY2UoQ29sb3IuZ3JlZW4sIENvbG9yKQorICAgIFRydWUKKyAgICA+Pj4KKworRW51bSBtZW1iZXJzIGFsc28gaGF2ZSBhIHByb3BlcnR5IHRoYXQgY29udGFpbnMganVzdCB0aGVpciBpdGVtIG5hbWU6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZC5uYW1lKQorICAgIHJlZAorCitFbnVtZXJhdGlvbnMgc3VwcG9ydCBpdGVyYXRpb24sIGluIGRlZmluaXRpb24gb3JkZXI6OgorCisgICAgPj4+IGNsYXNzIFNoYWtlKEVudW0pOgorICAgIC4uLiAgICAgdmFuaWxsYSA9IDcKKyAgICAuLi4gICAgIGNob2NvbGF0ZSA9IDQKKyAgICAuLi4gICAgIGNvb2tpZXMgPSA5CisgICAgLi4uICAgICBtaW50ID0gMworICAgIC4uLgorICAgID4+PiBmb3Igc2hha2UgaW4gU2hha2U6CisgICAgLi4uICAgICBwcmludChzaGFrZSkKKyAgICAuLi4KKyAgICBTaGFrZS52YW5pbGxhCisgICAgU2hha2UuY2hvY29sYXRlCisgICAgU2hha2UuY29va2llcworICAgIFNoYWtlLm1pbnQKKworRW51bWVyYXRpb24gbWVtYmVycyBhcmUgaGFzaGFibGUsIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gZGljdGlvbmFyaWVzIGFuZCBzZXRzOjoKKworICAgID4+PiBhcHBsZXMgPSB7fQorICAgID4+PiBhcHBsZXNbQ29sb3IucmVkXSA9ICdyZWQgZGVsaWNpb3VzJworICAgID4+PiBhcHBsZXNbQ29sb3IuZ3JlZW5dID0gJ2dyYW5ueSBzbWl0aCcKKyAgICA+Pj4gYXBwbGVzID09IHtDb2xvci5yZWQ6ICdyZWQgZGVsaWNpb3VzJywgQ29sb3IuZ3JlZW46ICdncmFubnkgc21pdGgnfQorICAgIFRydWUKKworCitQcm9ncmFtbWF0aWMgYWNjZXNzIHRvIGVudW1lcmF0aW9uIG1lbWJlcnMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgaXQncyB1c2VmdWwgdG8gYWNjZXNzIG1lbWJlcnMgaW4gZW51bWVyYXRpb25zIHByb2dyYW1tYXRpY2FsbHkgKGkuZS4KK3NpdHVhdGlvbnMgd2hlcmUgYGBDb2xvci5yZWRgYCB3b24ndCBkbyBiZWNhdXNlIHRoZSBleGFjdCBjb2xvciBpcyBub3Qga25vd24KK2F0IHByb2dyYW0td3JpdGluZyB0aW1lKS4gIGBgRW51bWBgIGFsbG93cyBzdWNoIGFjY2Vzczo6CisKKyAgICA+Pj4gQ29sb3IoMSkKKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvcigzKQorICAgIDxDb2xvci5ibHVlOiAzPgorCitJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZW51bSBtZW1iZXJzIGJ5ICpuYW1lKiwgdXNlIGl0ZW0gYWNjZXNzOjoKKworICAgID4+PiBDb2xvclsncmVkJ10KKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvclsnZ3JlZW4nXQorICAgIDxDb2xvci5ncmVlbjogMj4KKworSWYgaGF2ZSBhbiBlbnVtIG1lbWJlciBhbmQgbmVlZCBpdHMgOmF0dHI6YG5hbWVgIG9yIDphdHRyOmB2YWx1ZWA6OgorCisgICAgPj4+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+IEZydWl0LnRvbWF0byBpcyBsb2FkcyhkdW1wcyhGcnVpdC50b21hdG8pKQorICAgIFRydWUKKworVGhlIHVzdWFsIHJlc3RyaWN0aW9ucyBmb3IgcGlja2xpbmcgYXBwbHk6IHBpY2tsYWJsZSBlbnVtcyBtdXN0IGJlIGRlZmluZWQgaW4KK3RoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUsIHNpbmNlIHVucGlja2xpbmcgcmVxdWlyZXMgdGhlbSB0byBiZSBpbXBvcnRhYmxlCitmcm9tIHRoYXQgbW9kdWxlLgorCisuLiB3YXJuaW5nOjoKKworICAgIEluIG9yZGVyIHRvIHN1cHBvcnQgdGhlIHNpbmdsZXRvbiBuYXR1cmUgb2YgZW51bWVyYXRpb24gbWVtYmVycywgcGlja2xlCisgICAgcHJvdG9jb2wgdmVyc2lvbiAyIG9yIGhpZ2hlciBtdXN0IGJlIHVzZWQuCisKKworRnVuY3Rpb25hbCBBUEkKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YEVudW1gIGNsYXNzIGlzIGNhbGxhYmxlLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIEFQSTo6CisKKyAgICA+Pj4gQW5pbWFsID0gRW51bSgnQW5pbWFsJywgJ2FudCBiZWUgY2F0IGRvZycpCisgICAgPj4+IEFuaW1hbAorICAgIDxlbnVtICdBbmltYWwnPgorICAgID4+PiBBbmltYWwuYW50CisgICAgPEFuaW1hbC5hbnQ6IDE+CisgICAgPj4+IEFuaW1hbC5hbnQudmFsdWUKKyAgICAxCisgICAgPj4+IGxpc3QoQW5pbWFsKQorICAgIFs8QW5pbWFsLmFudDogMT4sIDxBbmltYWwuYmVlOiAyPiwgPEFuaW1hbC5jYXQ6IDM+LCA8QW5pbWFsLmRvZzogND5dCisKK1RoZSBzZW1hbnRpY3Mgb2YgdGhpcyBBUEkgcmVzZW1ibGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAuIFRoZSBmaXJzdAorYXJndW1lbnQgb2YgdGhlIGNhbGwgdG8gOmNsYXNzOmBFbnVtYCBpcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRpb24uCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlICpzb3VyY2UqIG9mIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4gIEl0IGNhbiBiZSBhCit3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YKKzItdHVwbGVzIHdpdGgga2V5L3ZhbHVlIHBhaXJzLCBvciBhIG1hcHBpbmcgKGUuZy4gZGljdGlvbmFyeSkgb2YgbmFtZXMgdG8KK3ZhbHVlcy4gIFRoZSBsYXN0IHR3byBvcHRpb25zIGVuYWJsZSBhc3NpZ25pbmcgYXJiaXRyYXJ5IHZhbHVlcyB0bworZW51bWVyYXRpb25zOyB0aGUgb3RoZXJzIGF1dG8tYXNzaWduIGluY3JlYXNpbmcgaW50ZWdlcnMgc3RhcnRpbmcgd2l0aCAxLiAgQQorbmV3IGNsYXNzIGRlcml2ZWQgZnJvbSA6Y2xhc3M6YEVudW1gIGlzIHJldHVybmVkLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBhYm92ZQorYXNzaWdubWVudCB0byA6Y2xhc3M6YEFuaW1hbGAgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICA+Pj4gY2xhc3MgQW5pbWFscyhFbnVtKToKKyAgICAuLi4gICAgIGFudCA9IDEKKyAgICAuLi4gICAgIGJlZSA9IDIKKyAgICAuLi4gICAgIGNhdCA9IDMKKyAgICAuLi4gICAgIGRvZyA9IDQKKyAgICAuLi4KKworVGhlIHJlYXNvbiBmb3IgZGVmYXVsdGluZyB0byBgYDFgYCBhcyB0aGUgc3RhcnRpbmcgbnVtYmVyIGFuZCBub3QgYGAwYGAgaXMKK3RoYXQgYGAwYGAgaXMgYGBGYWxzZWBgIGluIGEgYm9vbGVhbiBzZW5zZSwgYnV0IGVudW0gbWVtYmVycyBhbGwgZXZhbHVhdGUKK3RvIGBgVHJ1ZWBgLgorCitQaWNrbGluZyBlbnVtcyBjcmVhdGVkIHdpdGggdGhlIGZ1bmN0aW9uYWwgQVBJIGNhbiBiZSB0cmlja3kgYXMgZnJhbWUgc3RhY2sKK2ltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIHVzZWQgdG8gdHJ5IGFuZCBmaWd1cmUgb3V0IHdoaWNoIG1vZHVsZSB0aGUKK2VudW1lcmF0aW9uIGlzIGJlaW5nIGNyZWF0ZWQgaW4gKGUuZy4gaXQgd2lsbCBmYWlsIGlmIHlvdSB1c2UgYSB1dGlsaXR5CitmdW5jdGlvbiBpbiBzZXBhcmF0ZSBtb2R1bGUsIGFuZCBhbHNvIG1heSBub3Qgd29yayBvbiBJcm9uUHl0aG9uIG9yIEp5dGhvbikuCitUaGUgc29sdXRpb24gaXMgdG8gc3BlY2lmeSB0aGUgbW9kdWxlIG5hbWUgZXhwbGljaXRseSBhcyBmb2xsb3dzOjoKKworICAgID4+PiBBbmltYWxzID0gRW51bSgnQW5pbWFscycsICdhbnQgYmVlIGNhdCBkb2cnLCBtb2R1bGU9X19uYW1lX18pCisKK0Rlcml2ZWQgRW51bWVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbnRFbnVtCiteXl5eXl5eCisKK0EgdmFyaWF0aW9uIG9mIDpjbGFzczpgRW51bWAgaXMgcHJvdmlkZWQgd2hpY2ggaXMgYWxzbyBhIHN1YmNsYXNzIG9mCis6Y2xhc3M6YGludGAuICBNZW1iZXJzIG9mIGFuIDpjbGFzczpgSW50RW51bWAgY2FuIGJlIGNvbXBhcmVkIHRvIGludGVnZXJzOworYnkgZXh0ZW5zaW9uLCBpbnRlZ2VyIGVudW1lcmF0aW9ucyBvZiBkaWZmZXJlbnQgdHlwZXMgY2FuIGFsc28gYmUgY29tcGFyZWQKK3RvIGVhY2ggb3RoZXI6OgorCisgICAgPj4+IGZyb20gZW51bSBpbXBvcnQgSW50RW51bQorICAgID4+PiBjbGFzcyBTaGFwZShJbnRFbnVtKToKKyAgICAuLi4gICAgIGNpcmNsZSA9IDEKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgUmVxdWVzdChJbnRFbnVtKToKKyAgICAuLi4gICAgIHBvc3QgPSAxCisgICAgLi4uICAgICBnZXQgPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlID09IDEKKyAgICBGYWxzZQorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gMQorICAgIFRydWUKKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IFJlcXVlc3QucG9zdAorICAgIFRydWUKKworSG93ZXZlciwgdGhleSBzdGlsbCBjYW4ndCBiZSBjb21wYXJlZCB0byBzdGFuZGFyZCA6Y2xhc3M6YEVudW1gIGVudW1lcmF0aW9uczo6CisKKyAgICA+Pj4gY2xhc3MgU2hhcGUoSW50RW51bSk6CisgICAgLi4uICAgICBjaXJjbGUgPSAxCisgICAgLi4uICAgICBzcXVhcmUgPSAyCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSBDb2xvci5yZWQKKyAgICBGYWxzZQorCis6Y2xhc3M6YEludEVudW1gIHZhbHVlcyBiZWhhdmUgbGlrZSBpbnRlZ2VycyBpbiBvdGhlciB3YXlzIHlvdSdkIGV4cGVjdDo6CisKKyAgICA+Pj4gaW50KFNoYXBlLmNpcmNsZSkKKyAgICAxCisgICAgPj4+IFsnYScsICdiJywgJ2MnXVtTaGFwZS5jaXJjbGVdCisgICAgJ2InCisgICAgPj4+IFtpIGZvciBpIGluIHJhbmdlKFNoYXBlLnNxdWFyZSldCisgICAgWzAsIDFdCisKK0ZvciB0aGUgdmFzdCBtYWpvcml0eSBvZiBjb2RlLCA6Y2xhc3M6YEVudW1gIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLAorc2luY2UgOmNsYXNzOmBJbnRFbnVtYCBicmVha3Mgc29tZSBzZW1hbnRpYyBwcm9taXNlcyBvZiBhbiBlbnVtZXJhdGlvbiAoYnkKK2JlaW5nIGNvbXBhcmFibGUgdG8gaW50ZWdlcnMsIGFuZCB0aHVzIGJ5IHRyYW5zaXRpdml0eSB0byBvdGhlcgordW5yZWxhdGVkIGVudW1lcmF0aW9ucykuICBJdCBzaG91bGQgYmUgdXNlZCBvbmx5IGluIHNwZWNpYWwgY2FzZXMgd2hlcmUKK3RoZXJlJ3Mgbm8gb3RoZXIgY2hvaWNlOyBmb3IgZXhhbXBsZSwgd2hlbiBpbnRlZ2VyIGNvbnN0YW50cyBhcmUKK3JlcGxhY2VkIHdpdGggZW51bWVyYXRpb25zIGFuZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBpcyByZXF1aXJlZCB3aXRoIGNvZGUKK3RoYXQgc3RpbGwgZXhwZWN0cyBpbnRlZ2Vycy4KKworCitPdGhlcnMKK15eXl5eXgorCitXaGlsZSA6Y2xhc3M6YEludEVudW1gIGlzIHBhcnQgb2YgdGhlIDptb2Q6YGVudW1gIG1vZHVsZSwgaXQgd291bGQgYmUgdmVyeQorc2ltcGxlIHRvIGltcGxlbWVudCBpbmRlcGVuZGVudGx5OjoKKworICAgIGNsYXNzIEludEVudW0oaW50LCBFbnVtKToKKyAgICAgICAgcGFzcworCitUaGlzIGRlbW9uc3RyYXRlcyBob3cgc2ltaWxhciBkZXJpdmVkIGVudW1lcmF0aW9ucyBjYW4gYmUgZGVmaW5lZDsgZm9yIGV4YW1wbGUKK2EgOmNsYXNzOmBTdHJFbnVtYCB0aGF0IG1peGVzIGluIDpjbGFzczpgc3RyYCBpbnN0ZWFkIG9mIDpjbGFzczpgaW50YC4KKworU29tZSBydWxlczoKKworMS4gV2hlbiBzdWJjbGFzc2luZyA6Y2xhc3M6YEVudW1gLCBtaXgtaW4gdHlwZXMgbXVzdCBhcHBlYXIgYmVmb3JlCisgICA6Y2xhc3M6YEVudW1gIGl0c2VsZiBpbiB0aGUgc2VxdWVuY2Ugb2YgYmFzZXMsIGFzIGluIHRoZSA6Y2xhc3M6YEludEVudW1gCisgICBleGFtcGxlIGFib3ZlLgorMi4gV2hpbGUgOmNsYXNzOmBFbnVtYCBjYW4gaGF2ZSBtZW1iZXJzIG9mIGFueSB0eXBlLCBvbmNlIHlvdSBtaXggaW4gYW4KKyAgIGFkZGl0aW9uYWwgdHlwZSwgYWxsIHRoZSBtZW1iZXJzIG11c3QgaGF2ZSB2YWx1ZXMgb2YgdGhhdCB0eXBlLCBlLmcuCisgICA6Y2xhc3M6YGludGAgYWJvdmUuICBUaGlzIHJlc3RyaWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIG1peC1pbnMgd2hpY2ggb25seQorICAgYWRkIG1ldGhvZHMgYW5kIGRvbid0IHNwZWNpZnkgYW5vdGhlciBkYXRhIHR5cGUgc3VjaCBhcyA6Y2xhc3M6YGludGAgb3IKKyAgIDpjbGFzczpgc3RyYC4KKzMuIFdoZW4gYW5vdGhlciBkYXRhIHR5cGUgaXMgbWl4ZWQgaW4sIHRoZSA6YXR0cjpgdmFsdWVgIGF0dHJpYnV0ZSBpcyAqbm90IHRoZQorICAgc2FtZSogYXMgdGhlIGVudW0gbWVtYmVyIGl0c2VsZiwgYWx0aG91Z2ggaXQgaXMgZXF1aXZhbGFudCBhbmQgd2lsbCBjb21wYXJlCisgICBlcXVhbC4KKzQuICUtc3R5bGUgZm9ybWF0dGluZzogIGAlc2AgYW5kIGAlcmAgY2FsbCA6Y2xhc3M6YEVudW1gJ3MgOm1ldGg6YF9fc3RyX19gIGFuZAorICAgOm1ldGg6YF9fcmVwcl9fYCByZXNwZWN0aXZlbHk7IG90aGVyIGNvZGVzIChzdWNoIGFzIGAlaWAgb3IgYCVoYCBmb3IKKyAgIEludEVudW0pIHRyZWF0IHRoZSBlbnVtIG1lbWJlciBhcyBpdHMgbWl4ZWQtaW4gdHlwZS4KKzUuIDptZXRoOmBzdHIuX19mb3JtYXRfX2AgKG9yIDpmdW5jOmBmb3JtYXRgKSB3aWxsIHVzZSB0aGUgbWl4ZWQtaW4KKyAgIHR5cGUncyA6bWV0aDpgX19mb3JtYXRfX2AuICBJZiB0aGUgOmNsYXNzOmBFbnVtYCdzIDpmdW5jOmBzdHJgIG9yCisgICA6ZnVuYzpgcmVwcmAgaXMgZGVzaXJlZCB1c2UgdGhlIGAhc2Agb3IgYCFyYCA6Y2xhc3M6YHN0cmAgZm9ybWF0IGNvZGVzLgorCisKK0ludGVyZXN0aW5nIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGlsZSA6Y2xhc3M6YEVudW1gIGFuZCA6Y2xhc3M6YEludEVudW1gIGFyZSBleHBlY3RlZCB0byBjb3ZlciB0aGUgbWFqb3JpdHkgb2YKK3VzZS1jYXNlcywgdGhleSBjYW5ub3QgY292ZXIgdGhlbSBhbGwuICBIZXJlIGFyZSByZWNpcGVzIGZvciBzb21lIGRpZmZlcmVudAordHlwZXMgb2YgZW51bWVyYXRpb25zIHRoYXQgY2FuIGJlIHVzZWQgZGlyZWN0bHksIG9yIGFzIGV4YW1wbGVzIGZvciBjcmVhdGluZworb25lJ3Mgb3duLgorCisKK0F1dG9OdW1iZXIKK15eXl5eXl5eXl4KKworQXZvaWRzIGhhdmluZyB0byBzcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgZWFjaCBlbnVtZXJhdGlvbiBtZW1iZXI6OgorCisgICAgPj4+IGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgLi4uICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgIC4uLiAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgLi4uICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgIC4uLiAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gb2JqCisgICAgLi4uCisgICAgPj4+IGNsYXNzIENvbG9yKEF1dG9OdW1iZXIpOgorICAgIC4uLiAgICAgcmVkID0gKCkKKyAgICAuLi4gICAgIGdyZWVuID0gKCkKKyAgICAuLi4gICAgIGJsdWUgPSAoKQorICAgIC4uLgorICAgID4+PiBDb2xvci5ncmVlbi52YWx1ZSA9PSAyCisgICAgVHJ1ZQorCisuLiBub3RlOjoKKworICAgIFRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kLCBpZiBkZWZpbmVkLCBpcyB1c2VkIGR1cmluZyBjcmVhdGlvbiBvZiB0aGUgRW51bQorICAgIG1lbWJlcnM7IGl0IGlzIHRoZW4gcmVwbGFjZWQgYnkgRW51bSdzIDptZXRoOmBfX25ld19fYCB3aGljaCBpcyB1c2VkIGFmdGVyCisgICAgY2xhc3MgY3JlYXRpb24gZm9yIGxvb2t1cCBvZiBleGlzdGluZyBtZW1iZXJzLiAgRHVlIHRvIHRoZSB3YXkgRW51bXMgYXJlCisgICAgc3VwcG9zZWQgdG8gYmVoYXZlLCB0aGVyZSBpcyBubyB3YXkgdG8gY3VzdG9taXplIEVudW0ncyA6bWV0aDpgX19uZXdfX2AuCisKKworT3JkZXJlZEVudW0KK15eXl5eXl5eXl5eCisKK0FuIG9yZGVyZWQgZW51bWVyYXRpb24gdGhhdCBpcyBub3QgYmFzZWQgb24gOmNsYXNzOmBJbnRFbnVtYCBhbmQgc28gbWFpbnRhaW5zCit0aGUgbm9ybWFsIDpjbGFzczpgRW51bWAgaW52YXJpYW50cyAoc3VjaCBhcyBub3QgYmVpbmcgY29tcGFyYWJsZSB0byBvdGhlcgorZW51bWVyYXRpb25zKTo6CisKKyAgICA+Pj4gY2xhc3MgT3JkZXJlZEVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLgorICAgID4+PiBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgLi4uICAgICBBID0gNQorICAgIC4uLiAgICAgQiA9IDQKKyAgICAuLi4gICAgIEMgPSAzCisgICAgLi4uICAgICBEID0gMgorICAgIC4uLiAgICAgRiA9IDEKKyAgICAuLi4KKyAgICA+Pj4gR3JhZGUuQyA8IEdyYWRlLkEKKyAgICBUcnVlCisKKworRHVwbGljYXRlRnJlZUVudW0KK15eXl5eXl5eXl5eXl5eXl5eCisKK1JhaXNlcyBhbiBlcnJvciBpZiBhIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZSBpcyBmb3VuZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGFuCithbGlhczo6CisKKyAgICA+Pj4gY2xhc3MgRHVwbGljYXRlRnJlZUVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgIC4uLiAgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgLi4uICAgICAgICAgaWYgYW55KHNlbGYudmFsdWUgPT0gZS52YWx1ZSBmb3IgZSBpbiBjbHMpOgorICAgIC4uLiAgICAgICAgICAgICBhID0gc2VsZi5uYW1lCisgICAgLi4uICAgICAgICAgICAgIGUgPSBjbHMoc2VsZi52YWx1ZSkubmFtZQorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgIC4uLiAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAlciAtLT4gJXIiCisgICAgLi4uICAgICAgICAgICAgICAgICAlIChhLCBlKSkKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRHVwbGljYXRlRnJlZUVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLiAgICAgZ3JlbmUgPSAyCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAnZ3JlbmUnIC0tPiAnZ3JlZW4nCisKKy4uIG5vdGU6OgorCisgICAgVGhpcyBpcyBhIHVzZWZ1bCBleGFtcGxlIGZvciBzdWJjbGFzc2luZyBFbnVtIHRvIGFkZCBvciBjaGFuZ2Ugb3RoZXIKKyAgICBiZWhhdmlvcnMgYXMgd2VsbCBhcyBkaXNhbGxvd2luZyBhbGlhc2VzLiAgSWYgdGhlIG9ubHkgZGVzaXJlZCBjaGFuZ2UgaXMKKyAgICBkaXNhbGxvd2luZyBhbGlhc2VzLCB0aGUgOmZ1bmM6YHVuaXF1ZWAgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKKworUGxhbmV0CiteXl5eXl4KKworSWYgOm1ldGg6YF9fbmV3X19gIG9yIDptZXRoOmBfX2luaXRfX2AgaXMgZGVmaW5lZCB0aGUgdmFsdWUgb2YgdGhlIGVudW0gbWVtYmVyCit3aWxsIGJlIHBhc3NlZCB0byB0aG9zZSBtZXRob2RzOjoKKworICAgID4+PiBjbGFzcyBQbGFuZXQoRW51bSk6CisgICAgLi4uICAgICBNRVJDVVJZID0gKDMuMzAzZSsyMywgMi40Mzk3ZTYpCisgICAgLi4uICAgICBWRU5VUyAgID0gKDQuODY5ZSsyNCwgNi4wNTE4ZTYpCisgICAgLi4uICAgICBFQVJUSCAgID0gKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KQorICAgIC4uLiAgICAgTUFSUyAgICA9ICg2LjQyMWUrMjMsIDMuMzk3MmU2KQorICAgIC4uLiAgICAgSlVQSVRFUiA9ICgxLjllKzI3LCAgIDcuMTQ5MmU3KQorICAgIC4uLiAgICAgU0FUVVJOICA9ICg1LjY4OGUrMjYsIDYuMDI2OGU3KQorICAgIC4uLiAgICAgVVJBTlVTICA9ICg4LjY4NmUrMjUsIDIuNTU1OWU3KQorICAgIC4uLiAgICAgTkVQVFVORSA9ICgxLjAyNGUrMjYsIDIuNDc0NmU3KQorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3MsIHJhZGl1cyk6CisgICAgLi4uICAgICAgICAgc2VsZi5tYXNzID0gbWFzcyAgICAgICAjIGluIGtpbG9ncmFtcworICAgIC4uLiAgICAgICAgIHNlbGYucmFkaXVzID0gcmFkaXVzICAgIyBpbiBtZXRlcnMKKyAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgIC4uLiAgICAgZGVmIHN1cmZhY2VfZ3Jhdml0eShzZWxmKToKKyAgICAuLi4gICAgICAgICAjIHVuaXZlcnNhbCBncmF2aXRhdGlvbmFsIGNvbnN0YW50ICAobTMga2ctMSBzLTIpCisgICAgLi4uICAgICAgICAgRyA9IDYuNjczMDBFLTExCisgICAgLi4uICAgICAgICAgcmV0dXJuIEcgKiBzZWxmLm1hc3MgLyAoc2VsZi5yYWRpdXMgKiBzZWxmLnJhZGl1cykKKyAgICAuLi4KKyAgICA+Pj4gUGxhbmV0LkVBUlRILnZhbHVlCisgICAgKDUuOTc2ZSsyNCwgNjM3ODE0MC4wKQorICAgID4+PiBQbGFuZXQuRUFSVEguc3VyZmFjZV9ncmF2aXR5CisgICAgOS44MDI2NTI3NDMzMzcxMjkKKworCitIb3cgYXJlIEVudW1zIGRpZmZlcmVudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbnVtcyBoYXZlIGEgY3VzdG9tIG1ldGFjbGFzcyB0aGF0IGFmZmVjdHMgbWFueSBhc3BlY3RzIG9mIGJvdGggZGVyaXZlZCBFbnVtCitjbGFzc2VzIGFuZCB0aGVpciBpbnN0YW5jZXMgKG1lbWJlcnMpLgorCisKK0VudW0gQ2xhc3NlcworXl5eXl5eXl5eXl5eCisKK1RoZSA6Y2xhc3M6YEVudW1NZXRhYCBtZXRhY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUKKzptZXRoOmBfX2NvbnRhaW5zX19gLCA6bWV0aDpgX19kaXJfX2AsIDptZXRoOmBfX2l0ZXJfX2AgYW5kIG90aGVyIG1ldGhvZHMgdGhhdAorYWxsb3cgb25lIHRvIGRvIHRoaW5ncyB3aXRoIGFuIDpjbGFzczpgRW51bWAgY2xhc3MgdGhhdCBmYWlsIG9uIGEgdHlwaWNhbAorY2xhc3MsIHN1Y2ggYXMgYGxpc3QoQ29sb3IpYCBvciBgc29tZV92YXIgaW4gQ29sb3JgLiAgOmNsYXNzOmBFbnVtTWV0YWAgaXMKK3Jlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHZhcmlvdXMgb3RoZXIgbWV0aG9kcyBvbiB0aGUgZmluYWwgOmNsYXNzOmBFbnVtYAorY2xhc3MgYXJlIGNvcnJlY3QgKHN1Y2ggYXMgOm1ldGg6YF9fbmV3X19gLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLAorOm1ldGg6YF9fc3RyX19gIGFuZCA6bWV0aDpgX19yZXByX19gKQorCisKK0VudW0gTWVtYmVycyAoYWthIGluc3RhbmNlcykKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIG1vc3QgaW50ZXJlc3RpbmcgdGhpbmcgYWJvdXQgRW51bSBtZW1iZXJzIGlzIHRoYXQgdGhleSBhcmUgc2luZ2xldG9ucy4KKzpjbGFzczpgRW51bU1ldGFgIGNyZWF0ZXMgdGhlbSBhbGwgd2hpbGUgaXQgaXMgY3JlYXRpbmcgdGhlIDpjbGFzczpgRW51bWAKK2NsYXNzIGl0c2VsZiwgYW5kIHRoZW4gcHV0cyBhIGN1c3RvbSA6bWV0aDpgX19uZXdfX2AgaW4gcGxhY2UgdG8gZW5zdXJlCit0aGF0IG5vIG5ldyBvbmVzIGFyZSBldmVyIGluc3RhbnRpYXRlZCBieSByZXR1cm5pbmcgb25seSB0aGUgZXhpc3RpbmcKK21lbWJlciBpbnN0YW5jZXMuCisKKworRmluZXIgUG9pbnRzCiteXl5eXl5eXl5eXl4KKworRW51bSBtZW1iZXJzIGFyZSBpbnN0YW5jZXMgb2YgYW4gRW51bSBjbGFzcywgYW5kIGV2ZW4gdGhvdWdoIHRoZXkgYXJlCithY2Nlc3NpYmxlIGFzIGBFbnVtQ2xhc3MubWVtYmVyYCwgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgZGlyZWN0bHkgZnJvbQordGhlIG1lbWJlcjo6CisKKyAgICA+Pj4gQ29sb3IucmVkCisgICAgPENvbG9yLnJlZDogMT4KKyAgICA+Pj4gQ29sb3IucmVkLmJsdWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgQXR0cmlidXRlRXJyb3I6ICdDb2xvcicgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2JsdWUnCisKK0xpa2V3aXNlLCB0aGUgOmF0dHI6YF9fbWVtYmVyc19fYCBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgY2xhc3MuCisKK0lmIHlvdSBnaXZlIHlvdXIgOmNsYXNzOmBFbnVtYCBzdWJjbGFzcyBleHRyYSBtZXRob2RzLCBsaWtlIHRoZSBgUGxhbmV0YF8KK2NsYXNzIGFib3ZlLCB0aG9zZSBtZXRob2RzIHdpbGwgc2hvdyB1cCBpbiBhIDpmdW5jOmBkaXJgIG9mIHRoZSBtZW1iZXIsCitidXQgbm90IG9mIHRoZSBjbGFzczo6CisKKyAgICA+Pj4gZGlyKFBsYW5ldCkKKyAgICBbJ0VBUlRIJywgJ0pVUElURVInLCAnTUFSUycsICdNRVJDVVJZJywgJ05FUFRVTkUnLCAnU0FUVVJOJywgJ1VSQU5VUycsICdWRU5VUycsICdfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJ10KKyAgICA+Pj4gZGlyKFBsYW5ldC5FQVJUSCkKKyAgICBbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLCAnbmFtZScsICdzdXJmYWNlX2dyYXZpdHknLCAndmFsdWUnXQorCitBIDptZXRoOmBfX25ld19fYCBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUKKzpjbGFzczpgRW51bWAgbWVtYmVycyAtLSBhZnRlciB0aGF0IGl0IGlzIHJlcGxhY2VkLiAgVGhpcyBtZWFucyBpZiB5b3Ugd2lzaCB0bworY2hhbmdlIGhvdyA6Y2xhc3M6YEVudW1gIG1lbWJlcnMgYXJlIGxvb2tlZCB1cCB5b3UgZWl0aGVyIGhhdmUgdG8gd3JpdGUgYQoraGVscGVyIGZ1bmN0aW9uIG9yIGEgOmZ1bmM6YGNsYXNzbWV0aG9kYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKaW5kZXggNmU0NTU5Yy4uNzA0YWJiYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QKQEAgLTI1OSw2ICsyNTksMTIgQEAKICAgICAgIDpleGM6YFZNU0Vycm9yYCwgOmV4Yzpgc29ja2V0LmVycm9yYCwgOmV4Yzpgc2VsZWN0LmVycm9yYCBhbmQKICAgICAgIDpleGM6YG1tYXAuZXJyb3JgIGhhdmUgYmVlbiBtZXJnZWQgaW50byA6ZXhjOmBPU0Vycm9yYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgICAgVGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIGlzIG5vdyB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lIHBhc3NlZCB0bworICAgICAgdGhlIGZ1bmN0aW9uLCBpbnN0ZWFkIG9mIHRoZSBuYW1lIGVuY29kZWQgdG8gb3IgZGVjb2RlZCBmcm9tIHRoZQorICAgICAgZmlsZXN5c3RlbSBlbmNvZGluZy4KKwogCiAuLiBleGNlcHRpb246OiBPdmVyZmxvd0Vycm9yCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CmluZGV4IDNjMzM2MjEuLjYxYmM1MDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdApAQCAtMjcsNiArMjcsNyBAQAogKiBPbmx5IHRoZSBmaWxlbmFtZSwgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBsaW5lIG51bWJlciBhcmUKICAgZGlzcGxheWVkLiAobm8gc291cmNlIGNvZGUpCiAqIEl0IGlzIGxpbWl0ZWQgdG8gMTAwIGZyYW1lcyBhbmQgMTAwIHRocmVhZHMuCisqIFRoZSBvcmRlciBpcyByZXZlcnNlZDogdGhlIG1vc3QgcmVjZW50IGNhbGwgaXMgc2hvd24gZmlyc3QuCiAKIEJ5IGRlZmF1bHQsIHRoZSBQeXRob24gdHJhY2ViYWNrIGlzIHdyaXR0ZW4gdG8gOmRhdGE6YHN5cy5zdGRlcnJgLiBUbyBzZWUKIHRyYWNlYmFja3MsIGFwcGxpY2F0aW9ucyBtdXN0IGJlIHJ1biBpbiB0aGUgdGVybWluYWwuIEEgbG9nIGZpbGUgY2FuCkBAIC0xMjksNyArMTMwLDcgQEAKICAgICA+Pj4gY3R5cGVzLnN0cmluZ19hdCgwKQogICAgIEZhdGFsIFB5dGhvbiBlcnJvcjogU2VnbWVudGF0aW9uIGZhdWx0CiAKLSAgICBDdXJyZW50IHRocmVhZCAweDAwMDA3ZmI4OTlmMzk3MDA6CisgICAgQ3VycmVudCB0aHJlYWQgMHgwMDAwN2ZiODk5ZjM5NzAwIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToKICAgICAgIEZpbGUgIi9ob21lL3B5dGhvbi9jcHl0aG9uL0xpYi9jdHlwZXMvX19pbml0X18ucHkiLCBsaW5lIDQ4NiBpbiBzdHJpbmdfYXQKICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEgaW4gPG1vZHVsZT4KICAgICBTZWdtZW50YXRpb24gZmF1bHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKaW5kZXggOGE4OGY4Yy4uODQ3MWE3MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKQEAgLTI3LDYgKzI3LDEwIEBACiAgICBOb3RlIHRoYXQgbm8gZXh0ZXJuYWwgcHJvZ3JhbXMgYXJlIGNhbGxlZCBmcm9tIHRoaXMgZnVuY3Rpb24sIGdpdmluZyBpdAogICAgcG9ydGFiaWxpdHkgYW5kIGVmZmljaWVuY3kuCiAKKyAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKKyAgIHdpdGggYSBjYWNoZSBpbnZhbGlkYXRpb24gbWVjaGFuaXNtIHJlbHlpbmcgb24gc3RhbGUgc2lnbmF0dXJlcworICAgb3IgYnkgZXhwbGljaXRseSBjYWxsaW5nIDpmdW5jOmBjbGVhcl9jYWNoZWAuCisKIAogLi4gZnVuY3Rpb246OiBjbXBmaWxlcyhkaXIxLCBkaXIyLCBjb21tb24sIHNoYWxsb3c9VHJ1ZSkKIApAQCAtNDgsNiArNTIsMTUgQEAKICAgIG9uZSBvZiB0aGUgdGhyZWUgcmV0dXJuZWQgbGlzdHMuCiAKIAorLi4gZnVuY3Rpb246OiBjbGVhcl9jYWNoZSgpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICBDbGVhciB0aGUgZmlsZWNtcCBjYWNoZS4gVGhpcyBtYXkgYmUgdXNlZnVsIGlmIGEgZmlsZSBpcyBjb21wYXJlZCBzbyBxdWlja2x5CisgICBhZnRlciBpdCBpcyBtb2RpZmllZCB0aGF0IGl0IGlzIHdpdGhpbiB0aGUgbXRpbWUgcmVzb2x1dGlvbiBvZgorICAgdGhlIHVuZGVybHlpbmcgZmlsZXN5c3RlbS4KKworCiAuLiBfZGlyY21wLW9iamVjdHM6CiAKIFRoZSA6Y2xhc3M6YGRpcmNtcGAgY2xhc3MKQEAgLTU1LDI4ICs2OCwyNSBAQAogCiAuLiBjbGFzczo6IGRpcmNtcChhLCBiLCBpZ25vcmU9Tm9uZSwgaGlkZT1Ob25lKQogCi0gICBDb25zdHJ1Y3QgYSBuZXcgZGlyZWN0b3J5IGNvbXBhcmlzb24gb2JqZWN0LCB0byBjb21wYXJlIHRoZSBkaXJlY3RvcmllcyAqYSogYW5kCi0gICAqYiouICppZ25vcmUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsIGFuZCBkZWZhdWx0cyB0byBgYFsnUkNTJywgJ0NWUycsCi0gICAndGFncyddYGAuICpoaWRlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwgYW5kIGRlZmF1bHRzIHRvIGBgW29zLmN1cmRpciwKLSAgIG9zLnBhcmRpcl1gYC4KKyAgIENvbnN0cnVjdCBhIG5ldyBkaXJlY3RvcnkgY29tcGFyaXNvbiBvYmplY3QsIHRvIGNvbXBhcmUgdGhlIGRpcmVjdG9yaWVzICphKgorICAgYW5kICpiKi4gICppZ25vcmUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsIGFuZCBkZWZhdWx0cyB0bworICAgOmF0dHI6YGZpbGVjbXAuREVGQVVMVF9JR05PUkVTYC4gICpoaWRlKiBpcyBhIGxpc3Qgb2YgbmFtZXMgdG8gaGlkZSwgYW5kCisgICBkZWZhdWx0cyB0byBgYFtvcy5jdXJkaXIsIG9zLnBhcmRpcl1gYC4KIAogICAgVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcyBjb21wYXJlcyBmaWxlcyBieSBkb2luZyAqc2hhbGxvdyogY29tcGFyaXNvbnMKICAgIGFzIGRlc2NyaWJlZCBmb3IgOmZ1bmM6YGZpbGVjbXAuY21wYC4KIAogICAgVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0KCkKIAogICAgICAgUHJpbnQgKHRvIDpkYXRhOmBzeXMuc3Rkb3V0YCkgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiouCiAKLQogICAgLi4gbWV0aG9kOjogcmVwb3J0X3BhcnRpYWxfY2xvc3VyZSgpCiAKICAgICAgIFByaW50IGEgY29tcGFyaXNvbiBiZXR3ZWVuICphKiBhbmQgKmIqIGFuZCBjb21tb24gaW1tZWRpYXRlCiAgICAgICBzdWJkaXJlY3Rvcmllcy4KIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnRfZnVsbF9jbG9zdXJlKCkKIAogICAgICAgUHJpbnQgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiogYW5kIGNvbW1vbiBzdWJkaXJlY3RvcmllcwpAQCAtMTMzLDcgKzE0Myw3IEBACiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNvbW1vbl9maWxlcwogCi0gICAgICBGaWxlcyBpbiBib3RoICphKiBhbmQgKmIqCisgICAgICBGaWxlcyBpbiBib3RoICphKiBhbmQgKmIqLgogCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGNvbW1vbl9mdW5ueQpAQCAtMTY0LDYgKzE3NCwxMiBAQAogICAgICAgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgbmFtZXMgaW4gOmF0dHI6YGNvbW1vbl9kaXJzYCB0byA6Y2xhc3M6YGRpcmNtcGAKICAgICAgIG9iamVjdHMuCiAKKy4uIGF0dHJpYnV0ZTo6IERFRkFVTFRfSUdOT1JFUworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgTGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5IDpjbGFzczpgZGlyY21wYCBieSBkZWZhdWx0LgorCiAKIEhlcmUgaXMgYSBzaW1wbGlmaWVkIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBgc3ViZGlyc2BgIGF0dHJpYnV0ZSB0byBzZWFyY2gKIHJlY3Vyc2l2ZWx5IHRocm91Z2ggdHdvIGRpcmVjdG9yaWVzIHRvIHNob3cgY29tbW9uIGRpZmZlcmVudCBmaWxlczo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAppbmRleCBkNWE0ODc1Li5lZTA2ODMwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKQEAgLTE2MCw2ICsxNjAsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIENhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgIFRoZSBgYCdyVSdgYCBhbmQgYGAnVSdgYCBtb2Rlcy4KKwogCiAqKk9wdGlvbmFsIGluLXBsYWNlIGZpbHRlcmluZzoqKiBpZiB0aGUga2V5d29yZCBhcmd1bWVudCBgYGlucGxhY2U9VHJ1ZWBgIGlzCiBwYXNzZWQgdG8gOmZ1bmM6YGZpbGVpbnB1dC5pbnB1dGAgb3IgdG8gdGhlIDpjbGFzczpgRmlsZUlucHV0YCBjb25zdHJ1Y3RvciwgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9maWxlc3lzLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CmluZGV4IDU4OTk4YTguLjAzZTA4NWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0CkBAIC0xMiw2ICsxMiw3IEBACiAKIC4uIHRvY3RyZWU6OgogCisgICBwYXRobGliLnJzdAogICAgb3MucGF0aC5yc3QKICAgIGZpbGVpbnB1dC5yc3QKICAgIHN0YXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdCBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CmluZGV4IGUwNDM0YjAuLmVmOTNmMDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CkBAIC04Niw3ICs4Niw3IEBACiAgICAgICAnLipcXC50eHQkJwogICAgICAgPj4+IHJlb2JqID0gcmUuY29tcGlsZShyZWdleCkKICAgICAgID4+PiByZW9iai5tYXRjaCgnZm9vYmFyLnR4dCcpCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMTApLCBtYXRjaD0nZm9vYmFyLnR4dCc+CiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0IGIvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdAppbmRleCA4OGJlMTFjLi5iZGM5ZTdiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKQEAgLTQsNiArNCwxMCBAQAogLi4gbW9kdWxlOjogZm9ybWF0dGVyCiAgICA6c3lub3BzaXM6IEdlbmVyaWMgb3V0cHV0IGZvcm1hdHRlciBhbmQgZGV2aWNlIGludGVyZmFjZS4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgRHVlIHRvIGxhY2sgb2YgdXNhZ2UsIHRoZSBmb3JtYXR0ZXIgbW9kdWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGlzIHNsYXRlZAorICAgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNi4KKwogCiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0d28gaW50ZXJmYWNlIGRlZmluaXRpb25zLCBlYWNoIHdpdGggbXVsdGlwbGUKIGltcGxlbWVudGF0aW9uczogVGhlICpmb3JtYXR0ZXIqIGludGVyZmFjZSwgYW5kIHRoZSAqd3JpdGVyKiBpbnRlcmZhY2Ugd2hpY2ggaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CmluZGV4IGRjYjJhYzQuLjdmOThkMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdApAQCAtOTQsNiArOTQsMTEgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqc291cmNlX2FkZHJlc3MqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgorCiAgICBIZXJlJ3MgYSBzYW1wbGUgc2Vzc2lvbiB1c2luZyB0aGUgOmNsYXNzOmBGVFBfVExTYCBjbGFzczoKIAogICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFBfVExTCkBAIC00MjcsNiArNDMyLDExIEBACiAgICBTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY29ubmVjdGlvbiBieSB1c2luZyBUTFMgb3IgU1NMLCBkZXBlbmRpbmcgb24gd2hhdAogICAgc3BlY2lmaWVkIGluIDptZXRoOmBzc2xfdmVyc2lvbmAgYXR0cmlidXRlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCisKIC4uIG1ldGhvZDo6IEZUUF9UTFMuY2NjKCkKIAogICAgUmV2ZXJ0IGNvbnRyb2wgY2hhbm5lbCBiYWNrIHRvIHBsYWludGV4dC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0YWtlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAppbmRleCBhZTI5Y2Q4Li40MzcxOTY5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKQEAgLTU0Myw2ICs1NDMsMTAgQEAKICAgIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgbWV0aG9kIGlzIG5vdCBmb3VuZCBvciBpZiBlaXRoZXIKICAgIHRoZSAqZm9ybWF0X3NwZWMqIG9yIHRoZSByZXR1cm4gdmFsdWUgYXJlIG5vdCBzdHJpbmdzLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIGBgb2JqZWN0KCkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYylgYCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYAorICAgICAgaWYgKmZvcm1hdF9zcGVjKiBpcyBub3QgZW1wdHkgc3RyaW5nLgorCiAKIC4uIF9mdW5jLWZyb3plbnNldDoKIC4uIGZ1bmN0aW9uOjogZnJvemVuc2V0KFtpdGVyYWJsZV0pCkBAIC02NjYsNiArNjcwLDEyIEBACiAKICAgIFRoZSBpbnRlZ2VyIHR5cGUgaXMgZGVzY3JpYmVkIGluIDpyZWY6YHR5cGVzbnVtZXJpY2AuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiAqYmFzZSogaXMgbm90IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgaW50YCBhbmQgdGhlICpiYXNlKiBvYmplY3QgaGFzIGEKKyAgICAgIDptZXRoOmBiYXNlLl9faW5kZXhfXyA8b2JqZWN0Ll9faW5kZXhfXz5gIG1ldGhvZCwgdGhhdCBtZXRob2QgaXMgY2FsbGVkCisgICAgICB0byBvYnRhaW4gYW4gaW50ZWdlciBmb3IgdGhlIGJhc2UuICBQcmV2aW91cyB2ZXJzaW9ucyB1c2VkCisgICAgICA6bWV0aDpgYmFzZS5fX2ludF9fIDxvYmplY3QuX19pbnRfXz5gIGluc3RlYWQgb2YgOm1ldGg6YGJhc2UuX19pbmRleF9fCisgICAgICA8b2JqZWN0Ll9faW5kZXhfXz5gLgogCiAuLiBmdW5jdGlvbjo6IGlzaW5zdGFuY2Uob2JqZWN0LCBjbGFzc2luZm8pCiAKQEAgLTc0OCwxOSArNzU4LDIyIEBACiAgICBhbHJlYWR5IGFycmFuZ2VkIGludG8gYXJndW1lbnQgdHVwbGVzLCBzZWUgOmZ1bmM6YGl0ZXJ0b29scy5zdGFybWFwYFwuCiAKIAotLi4gZnVuY3Rpb246OiBtYXgoaXRlcmFibGUsICpbLCBrZXldKQorLi4gZnVuY3Rpb246OiBtYXgoaXRlcmFibGUsICpbLCBkZWZhdWx0LCBrZXldKQogICAgICAgICAgICAgICBtYXgoYXJnMSwgYXJnMiwgKmFyZ3NbLCBrZXldKQogCiAgICBSZXR1cm4gdGhlIGxhcmdlc3QgaXRlbSBpbiBhbiBpdGVyYWJsZSBvciB0aGUgbGFyZ2VzdCBvZiB0d28gb3IgbW9yZQogICAgYXJndW1lbnRzLgogCi0gICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgKml0ZXJhYmxlKiBtdXN0IGJlIGEgbm9uLWVtcHR5Ci0gICBpdGVyYWJsZSAoc3VjaCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgVGhlIGxhcmdlc3QgaXRlbQotICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlCi0gICBwcm92aWRlZCwgdGhlIGxhcmdlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIHJldHVybmVkLgorICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhbiA6dGVybTpgaXRlcmFibGVgLgorICAgVGhlIGxhcmdlc3QgaXRlbSBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsCisgICBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzCisgICByZXR1cm5lZC4KIAotICAgVGhlIG9wdGlvbmFsIGtleXdvcmQtb25seSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcKLSAgIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4KKyAgIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gVGhlICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcworICAgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLiBUaGUKKyAgICpkZWZhdWx0KiBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgaXRlcmFibGUgaXMKKyAgIGVtcHR5LiBJZiB0aGUgaXRlcmFibGUgaXMgZW1wdHkgYW5kICpkZWZhdWx0KiBpcyBub3QgcHJvdmlkZWQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgSWYgbXVsdGlwbGUgaXRlbXMgYXJlIG1heGltYWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBvbmUKICAgIGVuY291bnRlcmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgc29ydC1zdGFiaWxpdHkgcHJlc2VydmluZyB0b29scwpAQCAtNzc2LDE5ICs3ODksMjIgQEAKICAgIDpyZWY6YHR5cGVtZW1vcnl2aWV3YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCi0uLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZSwgKlssIGtleV0pCisuLiBmdW5jdGlvbjo6IG1pbihpdGVyYWJsZSwgKlssIGRlZmF1bHQsIGtleV0pCiAgICAgICAgICAgICAgIG1pbihhcmcxLCBhcmcyLCAqYXJnc1ssIGtleV0pCiAKICAgIFJldHVybiB0aGUgc21hbGxlc3QgaXRlbSBpbiBhbiBpdGVyYWJsZSBvciB0aGUgc21hbGxlc3Qgb2YgdHdvIG9yIG1vcmUKICAgIGFyZ3VtZW50cy4KIAotICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsICppdGVyYWJsZSogbXVzdCBiZSBhIG5vbi1lbXB0eQotICAgaXRlcmFibGUgKHN1Y2ggYXMgYSBub24tZW1wdHkgc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFRoZSBzbWFsbGVzdCBpdGVtCi0gICBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUKLSAgIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIHJldHVybmVkLgorICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhbiA6dGVybTpgaXRlcmFibGVgLgorICAgVGhlIHNtYWxsZXN0IGl0ZW0gaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbAorICAgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIHNtYWxsZXN0IG9mIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpcworICAgcmV0dXJuZWQuCiAKLSAgIFRoZSBvcHRpb25hbCBrZXl3b3JkLW9ubHkgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nCi0gICBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuCisgICBUaGVyZSBhcmUgdHdvIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFRoZSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMKKyAgIGEgb25lLWFyZ3VtZW50IG9yZGVyaW5nIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4gVGhlCisgICAqZGVmYXVsdCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWYgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzCisgICBlbXB0eS4gSWYgdGhlIGl0ZXJhYmxlIGlzIGVtcHR5IGFuZCAqZGVmYXVsdCogaXMgbm90IHByb3ZpZGVkLCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIElmIG11bHRpcGxlIGl0ZW1zIGFyZSBtaW5pbWFsLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZmlyc3Qgb25lCiAgICBlbmNvdW50ZXJlZC4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIG90aGVyIHNvcnQtc3RhYmlsaXR5IHByZXNlcnZpbmcgdG9vbHMKQEAgLTg1Niw4ICs4NzIsNyBAQAogICAgYGAnYidgYCAgIGJpbmFyeSBtb2RlCiAgICBgYCd0J2BgICAgdGV4dCBtb2RlIChkZWZhdWx0KQogICAgYGAnKydgYCAgIG9wZW4gYSBkaXNrIGZpbGUgZm9yIHVwZGF0aW5nIChyZWFkaW5nIGFuZCB3cml0aW5nKQotICAgYGAnVSdgYCAgIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIChmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk7IHNob3VsZAotICAgICAgICAgICAgIG5vdCBiZSB1c2VkIGluIG5ldyBjb2RlKQorICAgYGAnVSdgYCAgIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgIG1vZGUgKGRlcHJlY2F0ZWQpCiAgICA9PT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgYGAncidgYCAob3BlbiBmb3IgcmVhZGluZyB0ZXh0LCBzeW5vbnltIG9mIGBgJ3J0J2BgKS4KQEAgLTk2Myw2ICs5NzgsOCBAQAogICAgOm1vZDpgb3Mub3BlbmAgYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gcGFzc2luZwogICAgYGBOb25lYGApLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgdGhlIDpyZWY6YGRpcl9mZCA8ZGlyX2ZkPmAgcGFyYW1ldGVyIG9mIHRoZQogICAgOmZ1bmM6YG9zLm9wZW5gIGZ1bmN0aW9uIHRvIG9wZW4gYSBmaWxlIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZGlyZWN0b3J5OjoKIApAQCAtOTc2LDEwICs5OTMsNiBAQAogICAgICAgLi4uCiAgICAgICA+Pj4gb3MuY2xvc2UoZGlyX2ZkKSAgIyBkb24ndCBsZWFrIGEgZmlsZSBkZXNjcmlwdG9yCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KLSAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgotCiAgICBUaGUgdHlwZSBvZiA6dGVybTpgZmlsZSBvYmplY3RgIHJldHVybmVkIGJ5IHRoZSA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24KICAgIGRlcGVuZHMgb24gdGhlIG1vZGUuICBXaGVuIDpmdW5jOmBvcGVuYCBpcyB1c2VkIHRvIG9wZW4gYSBmaWxlIGluIGEgdGV4dAogICAgbW9kZSAoYGAndydgYCwgYGAncidgYCwgYGAnd3QnYGAsIGBgJ3J0J2BgLCBldGMuKSwgaXQgcmV0dXJucyBhIHN1YmNsYXNzIG9mCkBAIC0xMDA2LDEwICsxMDE5LDE4IEBACiAgICBhbmQgOm1vZDpgc2h1dGlsYC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCiAgICAgICA6ZXhjOmBJT0Vycm9yYCB1c2VkIHRvIGJlIHJhaXNlZCwgaXQgaXMgbm93IGFuIGFsaWFzIG9mIDpleGM6YE9TRXJyb3JgLgogICAgICAgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpcyBub3cgcmFpc2VkIGlmIHRoZSBmaWxlIG9wZW5lZCBpbiBleGNsdXNpdmUKICAgICAgIGNyZWF0aW9uIG1vZGUgKGBgJ3gnYGApIGFscmVhZHkgZXhpc3RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGZpbGUgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKworICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy40IDQuMAorICAgICAgVGhlIGBgJ1UnYGAgbW9kZS4KKwogCiAuLiBYWFggd29ya3MgZm9yIGJ5dGVzIHRvbywgYnV0IHNob3VsZCBpdD8KIC4uIGZ1bmN0aW9uOjogb3JkKGMpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAppbmRleCAzYzk0NmUzLi43N2NkODM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKQEAgLTYsNiArNiw3IEBACiAuLiBtb2R1bGVhdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIC4uIG1vZHVsZWF1dGhvcjo6IFJheW1vbmQgSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KIC4uIG1vZHVsZWF1dGhvcjo6IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW5AZ21haWwuY29tPgorLi4gbW9kdWxlYXV0aG9yOjogxYF1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgogLi4gc2VjdGlvbmF1dGhvcjo6IFBldGVyIEhhcnJpcyA8c2NhdkBibHVleW9uZGVyLmNvLnVrPgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9mdW5jdG9vbHMucHlgCkBAIC0xMzMsMTUgKzEzNCwzNCBAQAogCiAgICAgICAgQHRvdGFsX29yZGVyaW5nCiAgICAgICAgY2xhc3MgU3R1ZGVudDoKKyAgICAgICAgICAgZGVmIF9pc192YWxpZF9vcGVyYW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoaGFzYXR0cihvdGhlciwgImxhc3RuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob3RoZXIsICJmaXJzdG5hbWUiKSkKICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfdmFsaWRfb3BlcmFuZChvdGhlcik6CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpID09CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGlsZSB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSB3ZWxsIGJlaGF2ZWQgdG90YWxseQorICAgICAgb3JkZXJlZCB0eXBlcywgaXQgKmRvZXMqIGNvbWUgYXQgdGhlIGNvc3Qgb2Ygc2xvd2VyIGV4ZWN1dGlvbiBhbmQKKyAgICAgIG1vcmUgY29tcGxleCBzdGFjayB0cmFjZXMgZm9yIHRoZSBkZXJpdmVkIGNvbXBhcmlzb24gbWV0aG9kcy4gSWYKKyAgICAgIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyBpbmRpY2F0ZXMgdGhpcyBpcyBhIGJvdHRsZW5lY2sgZm9yIGEgZ2l2ZW4KKyAgICAgIGFwcGxpY2F0aW9uLCBpbXBsZW1lbnRpbmcgYWxsIHNpeCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBpbnN0ZWFkIGlzCisgICAgICBsaWtlbHkgdG8gcHJvdmlkZSBhbiBlYXN5IHNwZWVkIGJvb3N0LgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJldHVybmluZyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yCisgICAgICB1bnJlY29nbmlzZWQgdHlwZXMgaXMgbm93IHN1cHBvcnRlZC4KIAogLi4gZnVuY3Rpb246OiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQogCkBAIC0xNzQsNiArMTk0LDQ4IEBACiAgICAgICAxOAogCiAKKy4uIGNsYXNzOjogcGFydGlhbG1ldGhvZChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgcGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciB3aGljaCBiZWhhdmVzCisgICBsaWtlIDpjbGFzczpgcGFydGlhbGAgZXhjZXB0IHRoYXQgaXQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIG1ldGhvZAorICAgZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBiZWluZyBkaXJlY3RseSBjYWxsYWJsZS4KKworICAgKmZ1bmMqIG11c3QgYmUgYSA6dGVybTpgZGVzY3JpcHRvcmAgb3IgYSBjYWxsYWJsZSAob2JqZWN0cyB3aGljaCBhcmUgYm90aCwKKyAgIGxpa2Ugbm9ybWFsIGZ1bmN0aW9ucywgYXJlIGhhbmRsZWQgYXMgZGVzY3JpcHRvcnMpLgorCisgICBXaGVuICpmdW5jKiBpcyBhIGRlc2NyaXB0b3IgKHN1Y2ggYXMgYSBub3JtYWwgUHl0aG9uIGZ1bmN0aW9uLAorICAgOmZ1bmM6YGNsYXNzbWV0aG9kYCwgOmZ1bmM6YHN0YXRpY21ldGhvZGAsIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAgb3IKKyAgIGFub3RoZXIgaW5zdGFuY2Ugb2YgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCksIGNhbGxzIHRvIGBgX19nZXRfX2BgIGFyZQorICAgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IsIGFuZCBhbiBhcHByb3ByaWF0ZQorICAgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3QgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4KKworICAgV2hlbiAqZnVuYyogaXMgYSBub24tZGVzY3JpcHRvciBjYWxsYWJsZSwgYW4gYXBwcm9wcmlhdGUgYm91bmQgbWV0aG9kIGlzCisgICBjcmVhdGVkIGR5bmFtaWNhbGx5LiBUaGlzIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBQeXRob24gZnVuY3Rpb24gd2hlbgorICAgdXNlZCBhcyBhIG1ldGhvZDogdGhlICpzZWxmKiBhcmd1bWVudCB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSBmaXJzdAorICAgcG9zaXRpb25hbCBhcmd1bWVudCwgZXZlbiBiZWZvcmUgdGhlICphcmdzKiBhbmQgKmtleXdvcmRzKiBzdXBwbGllZCB0bworICAgdGhlIDpjbGFzczpgcGFydGlhbG1ldGhvZGAgY29uc3RydWN0b3IuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gY2xhc3MgQ2VsbChvYmplY3QpOgorICAgICAgLi4uICAgICBAcHJvcGVydHkKKyAgICAgIC4uLiAgICAgZGVmIGFsaXZlKHNlbGYpOgorICAgICAgLi4uICAgICAgICAgcmV0dXJuIHNlbGYuX2FsaXZlCisgICAgICAuLi4gICAgIGRlZiBzZXRfc3RhdGUoc2VsZiwgc3RhdGUpOgorICAgICAgLi4uICAgICAgICAgc2VsZi5fYWxpdmUgPSBib29sKHN0YXRlKQorICAgICAgLi4uICAgICBzZXRfYWxpdmUgPSBwYXJ0aWFsbWV0aG9kKHNldF9zdGF0ZSwgVHJ1ZSkKKyAgICAgIC4uLiAgICAgc2V0X2RlYWQgPSBwYXJ0aWFsbWV0aG9kKHNldF9zdGF0ZSwgRmFsc2UpCisgICAgICAuLi4KKyAgICAgID4+PiBjID0gQ2VsbCgpCisgICAgICA+Pj4gYy5hbGl2ZQorICAgICAgRmFsc2UKKyAgICAgID4+PiBjLnNldF9hbGl2ZSgpCisgICAgICA+Pj4gYy5hbGl2ZQorICAgICAgVHJ1ZQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHJlZHVjZShmdW5jdGlvbiwgaXRlcmFibGVbLCBpbml0aWFsaXplcl0pCiAKICAgIEFwcGx5ICpmdW5jdGlvbiogb2YgdHdvIGFyZ3VtZW50cyBjdW11bGF0aXZlbHkgdG8gdGhlIGl0ZW1zIG9mICpzZXF1ZW5jZSosIGZyb20KQEAgLTE5OCw2ICsyNjAsMTExIEBACiAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKIAorLi4gZGVjb3JhdG9yOjogc2luZ2xlZGlzcGF0Y2goZGVmYXVsdCkKKworICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSA6dGVybTpgc2luZ2xlLWRpc3BhdGNoIDxzaW5nbGUKKyAgIGRpc3BhdGNoPmAgOnRlcm06YGdlbmVyaWMgZnVuY3Rpb25gLgorCisgICBUbyBkZWZpbmUgYSBnZW5lcmljIGZ1bmN0aW9uLCBkZWNvcmF0ZSBpdCB3aXRoIHRoZSBgYEBzaW5nbGVkaXNwYXRjaGBgCisgICBkZWNvcmF0b3IuIE5vdGUgdGhhdCB0aGUgZGlzcGF0Y2ggaGFwcGVucyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsCisgICBjcmVhdGUgeW91ciBmdW5jdGlvbiBhY2NvcmRpbmdseTo6CisKKyAgICAgPj4+IGZyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaAorICAgICA+Pj4gQHNpbmdsZWRpc3BhdGNoCisgICAgIC4uLiBkZWYgZnVuKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkxldCBtZSBqdXN0IHNheSwiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZykKKworICAgVG8gYWRkIG92ZXJsb2FkZWQgaW1wbGVtZW50YXRpb25zIHRvIHRoZSBmdW5jdGlvbiwgdXNlIHRoZSA6ZnVuYzpgcmVnaXN0ZXJgCisgICBhdHRyaWJ1dGUgb2YgdGhlIGdlbmVyaWMgZnVuY3Rpb24uICBJdCBpcyBhIGRlY29yYXRvciwgdGFraW5nIGEgdHlwZQorICAgcGFyYW1ldGVyIGFuZCBkZWNvcmF0aW5nIGEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBvcGVyYXRpb24gZm9yIHRoYXQKKyAgIHR5cGU6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGludCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIlN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorICAgICAuLi4KKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIobGlzdCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkVudW1lcmF0ZSB0aGlzOiIpCisgICAgIC4uLiAgICAgZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFyZyk6CisgICAgIC4uLiAgICAgICAgIHByaW50KGksIGVsZW0pCisKKyAgIFRvIGVuYWJsZSByZWdpc3RlcmluZyBsYW1iZGFzIGFuZCBwcmUtZXhpc3RpbmcgZnVuY3Rpb25zLCB0aGUKKyAgIDpmdW5jOmByZWdpc3RlcmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGluIGEgZnVuY3Rpb25hbCBmb3JtOjoKKworICAgICA+Pj4gZGVmIG5vdGhpbmcoYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBwcmludCgiTm90aGluZy4iKQorICAgICAuLi4KKyAgICAgPj4+IGZ1bi5yZWdpc3Rlcih0eXBlKE5vbmUpLCBub3RoaW5nKQorCisgICBUaGUgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgdW5kZWNvcmF0ZWQgZnVuY3Rpb24gd2hpY2gKKyAgIGVuYWJsZXMgZGVjb3JhdG9yIHN0YWNraW5nLCBwaWNrbGluZywgYXMgd2VsbCBhcyBjcmVhdGluZyB1bml0IHRlc3RzIGZvcgorICAgZWFjaCB2YXJpYW50IGluZGVwZW5kZW50bHk6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGZsb2F0KQorICAgICAuLi4gQGZ1bi5yZWdpc3RlcihEZWNpbWFsKQorICAgICAuLi4gZGVmIGZ1bl9udW0oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiSGFsZiBvZiB5b3VyIG51bWJlcjoiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZyAvIDIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuX251bSBpcyBmdW4KKyAgICAgRmFsc2UKKworICAgV2hlbiBjYWxsZWQsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGRpc3BhdGNoZXMgb24gdGhlIHR5cGUgb2YgdGhlIGZpcnN0CisgICBhcmd1bWVudDo6CisKKyAgICAgPj4+IGZ1bigiSGVsbG8sIHdvcmxkLiIpCisgICAgIEhlbGxvLCB3b3JsZC4KKyAgICAgPj4+IGZ1bigidGVzdC4iLCB2ZXJib3NlPVRydWUpCisgICAgIExldCBtZSBqdXN0IHNheSwgdGVzdC4KKyAgICAgPj4+IGZ1big0MiwgdmVyYm9zZT1UcnVlKQorICAgICBTdHJlbmd0aCBpbiBudW1iZXJzLCBlaD8gNDIKKyAgICAgPj4+IGZ1bihbJ3NwYW0nLCAnc3BhbScsICdlZ2dzJywgJ3NwYW0nXSwgdmVyYm9zZT1UcnVlKQorICAgICBFbnVtZXJhdGUgdGhpczoKKyAgICAgMCBzcGFtCisgICAgIDEgc3BhbQorICAgICAyIGVnZ3MKKyAgICAgMyBzcGFtCisgICAgID4+PiBmdW4oTm9uZSkKKyAgICAgTm90aGluZy4KKyAgICAgPj4+IGZ1bigxLjIzKQorICAgICAwLjYxNQorCisgICBXaGVyZSB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHR5cGUsIGl0cworICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlY29yYXRlZCB3aXRoIGBgQHNpbmdsZWRpc3BhdGNoYGAgaXMgcmVnaXN0ZXJlZAorICAgZm9yIHRoZSBiYXNlIGBgb2JqZWN0YGAgdHlwZSwgd2hpY2ggbWVhbnMgaXQgaXMgdXNlZCBpZiBubyBiZXR0ZXIKKyAgIGltcGxlbWVudGF0aW9uIGlzIGZvdW5kLgorCisgICBUbyBjaGVjayB3aGljaCBpbXBsZW1lbnRhdGlvbiB3aWxsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGNob29zZSBmb3IKKyAgIGEgZ2l2ZW4gdHlwZSwgdXNlIHRoZSBgYGRpc3BhdGNoKClgYCBhdHRyaWJ1dGU6OgorCisgICAgID4+PiBmdW4uZGlzcGF0Y2goZmxvYXQpCisgICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgICA+Pj4gZnVuLmRpc3BhdGNoKGRpY3QpICAgICMgbm90ZTogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICA8ZnVuY3Rpb24gZnVuIGF0IDB4MTAzZmUwMDAwPgorCisgICBUbyBhY2Nlc3MgYWxsIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb25zLCB1c2UgdGhlIHJlYWQtb25seSBgYHJlZ2lzdHJ5YGAKKyAgIGF0dHJpYnV0ZTo6CisKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5LmtleXMoKQorICAgIGRpY3Rfa2V5cyhbPGNsYXNzICdOb25lVHlwZSc+LCA8Y2xhc3MgJ2ludCc+LCA8Y2xhc3MgJ29iamVjdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2RlY2ltYWwuRGVjaW1hbCc+LCA8Y2xhc3MgJ2xpc3QnPiwKKyAgICAgICAgICAgICAgPGNsYXNzICdmbG9hdCc+XSkKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5W2Zsb2F0XQorICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgID4+PiBmdW4ucmVnaXN0cnlbb2JqZWN0XQorICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgd3JhcHBlZCwgYXNzaWduZWQ9V1JBUFBFUl9BU1NJR05NRU5UUywgdXBkYXRlZD1XUkFQUEVSX1VQREFURVMpCiAKICAgIFVwZGF0ZSBhICp3cmFwcGVyKiBmdW5jdGlvbiB0byBsb29rIGxpa2UgdGhlICp3cmFwcGVkKiBmdW5jdGlvbi4gVGhlIG9wdGlvbmFsCkBAIC0yMTIsOCArMzc5LDggQEAKIAogICAgVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBmb3IgaW50cm9zcGVjdGlvbiBhbmQgb3RoZXIgcHVycG9zZXMKICAgIChlLmcuIGJ5cGFzc2luZyBhIGNhY2hpbmcgZGVjb3JhdG9yIHN1Y2ggYXMgOmZ1bmM6YGxydV9jYWNoZWApLCB0aGlzIGZ1bmN0aW9uCi0gICBhdXRvbWF0aWNhbGx5IGFkZHMgYSBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KLSAgIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KKyAgIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLgogCiAgICBUaGUgbWFpbiBpbnRlbmRlZCB1c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgaW4gOnRlcm06YGRlY29yYXRvcmAgZnVuY3Rpb25zIHdoaWNoCiAgICB3cmFwIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gYW5kIHJldHVybiB0aGUgd3JhcHBlci4gSWYgdGhlIHdyYXBwZXIgZnVuY3Rpb24gaXMKQEAgLTIzNiw2ICs0MDMsMTEgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBNaXNzaW5nIGF0dHJpYnV0ZXMgbm8gbG9uZ2VyIHRyaWdnZXIgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgbm93IGFsd2F5cyByZWZlcnMgdG8gdGhlIHdyYXBwZWQKKyAgICAgIGZ1bmN0aW9uLCBldmVuIGlmIHRoYXQgZnVuY3Rpb24gZGVmaW5lZCBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUuCisgICAgICAoc2VlIDppc3N1ZTpgMTc0ODJgKQorCiAKIC4uIGRlY29yYXRvcjo6IHdyYXBzKHdyYXBwZWQsIGFzc2lnbmVkPVdSQVBQRVJfQVNTSUdOTUVOVFMsIHVwZGF0ZWQ9V1JBUFBFUl9VUERBVEVTKQogCkBAIC0zMDEsNCArNDczLDMgQEAKIGFyZSBub3QgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAgQWxzbywgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3RzIGRlZmluZWQgaW4KIGNsYXNzZXMgYmVoYXZlIGxpa2Ugc3RhdGljIG1ldGhvZHMgYW5kIGRvIG5vdCB0cmFuc2Zvcm0gaW50byBib3VuZCBtZXRob2RzCiBkdXJpbmcgaW5zdGFuY2UgYXR0cmlidXRlIGxvb2stdXAuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2djLnJzdCBiL0RvYy9saWJyYXJ5L2djLnJzdAppbmRleCA3MTQ0OWEzLi42Yjk1ZGM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2MucnN0CkBAIC02Nyw2ICs2NywyNCBAQAogICAgcmV0dXJuZWQuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRfc3RhdHMoKQorCisgICBSZXR1cm4gYSBsaXN0IG9mIDMgcGVyLWdlbmVyYXRpb24gZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgY29sbGVjdGlvbgorICAgc3RhdGlzdGljcyBzaW5jZSBpbnRlcnByZXRlciBzdGFydC4gIEF0IHRoaXMgbW9tZW50LCBlYWNoIGRpY3Rpb25hcnkgd2lsbAorICAgY29udGFpbiB0aGUgZm9sbG93aW5nIGl0ZW1zOgorCisgICAqIGBgY29sbGVjdGlvbnNgYCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZ2VuZXJhdGlvbiB3YXMgY29sbGVjdGVkOworCisgICAqIGBgY29sbGVjdGVkYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGNvbGxlY3RlZCBpbnNpZGUgdGhpcworICAgICBnZW5lcmF0aW9uOworCisgICAqIGBgdW5jb2xsZWN0YWJsZWBgIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCB3ZXJlIGZvdW5kCisgICAgIHRvIGJlIHVuY29sbGVjdGFibGUgKGFuZCB3ZXJlIHRoZXJlZm9yZSBtb3ZlZCB0byB0aGUgOmRhdGE6YGdhcmJhZ2VgCisgICAgIGxpc3QpIGluc2lkZSB0aGlzIGdlbmVyYXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0X3RocmVzaG9sZCh0aHJlc2hvbGQwWywgdGhyZXNob2xkMVssIHRocmVzaG9sZDJdXSkKIAogICAgU2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGhyZXNob2xkcyAodGhlIGNvbGxlY3Rpb24gZnJlcXVlbmN5KS4gU2V0dGluZwpAQCAtMTU4LDI0ICsxNzYsMTMgQEAKIAogLi4gZGF0YTo6IGdhcmJhZ2UKIAotICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQgbm90IGJlCi0gICBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IG9iamVjdHMgd2l0aAotICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMuIE9iamVjdHMgdGhhdCBoYXZlIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFuZCBhcmUKLSAgIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUgY2F1c2UgdGhlIGVudGlyZSByZWZlcmVuY2UgY3ljbGUgdG8gYmUgdW5jb2xsZWN0YWJsZSwKLSAgIGluY2x1ZGluZyBvYmplY3RzIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgY3ljbGUgYnV0IHJlYWNoYWJsZSBvbmx5IGZyb20gaXQuCi0gICBQeXRob24gZG9lc24ndCBjb2xsZWN0IHN1Y2ggY3ljbGVzIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSwgaW4gZ2VuZXJhbCwgaXQgaXNuJ3QKLSAgIHBvc3NpYmxlIGZvciBQeXRob24gdG8gZ3Vlc3MgYSBzYWZlIG9yZGVyIGluIHdoaWNoIHRvIHJ1biB0aGUgOm1ldGg6YF9fZGVsX19gCi0gICBtZXRob2RzLiAgSWYgeW91IGtub3cgYSBzYWZlIG9yZGVyLCB5b3UgY2FuIGZvcmNlIHRoZSBpc3N1ZSBieSBleGFtaW5pbmcgdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgYW5kIGV4cGxpY2l0bHkgYnJlYWtpbmcgY3ljbGVzIGR1ZSB0byB5b3VyIG9iamVjdHMgd2l0aGluIHRoZQotICAgbGlzdC4gIE5vdGUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGV2ZW4gc28gYnkgdmlydHVlIG9mIGJlaW5nIGluIHRoZQotICAgKmdhcmJhZ2UqIGxpc3QsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSAqZ2FyYmFnZSogdG9vLiAgRm9yIGV4YW1wbGUsCi0gICBhZnRlciBicmVha2luZyBjeWNsZXMsIGRvIGBgZGVsIGdjLmdhcmJhZ2VbOl1gYCB0byBlbXB0eSB0aGUgbGlzdC4gIEl0J3MKLSAgIGdlbmVyYWxseSBiZXR0ZXIgdG8gYXZvaWQgdGhlIGlzc3VlIGJ5IG5vdCBjcmVhdGluZyBjeWNsZXMgY29udGFpbmluZyBvYmplY3RzCi0gICB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhbmQgKmdhcmJhZ2UqIGNhbiBiZSBleGFtaW5lZCBpbiB0aGF0IGNhc2UgdG8KLSAgIHZlcmlmeSB0aGF0IG5vIHN1Y2ggY3ljbGVzIGFyZSBiZWluZyBjcmVhdGVkLgorICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQKKyAgIG5vdCBiZSBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgdGhpcworICAgbGlzdCBzaG91bGQgYmUgZW1wdHkgbW9zdCBvZiB0aGUgdGltZSwgZXhjZXB0IHdoZW4gdXNpbmcgaW5zdGFuY2VzIG9mCisgICBDIGV4dGVuc2lvbiB0eXBlcyB3aXRoIGEgbm9uLU5VTEwgYGB0cF9kZWxgYCBzbG90LgogCi0gICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlIGFkZGVkCi0gICB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCisgICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlCisgICBhZGRlZCB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IGludGVycHJldGVyIHNodXRkb3duLCBhCkBAIC0xODMsNiArMTkwLDEwIEBACiAgICAgICA6Y29uc3Q6YERFQlVHX1VOQ09MTEVDVEFCTEVgIGlzIHNldCwgaW4gYWRkaXRpb24gYWxsIHVuY29sbGVjdGFibGUgb2JqZWN0cwogICAgICAgYXJlIHByaW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBGb2xsb3dpbmcgOnBlcDpgNDQyYCwgb2JqZWN0cyB3aXRoIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBkb24ndCBlbmQKKyAgICAgIHVwIGluIDphdHRyOmBnYy5nYXJiYWdlYCBhbnltb3JlLgorCiAuLiBkYXRhOjogY2FsbGJhY2tzCiAKICAgIEEgbGlzdCBvZiBjYWxsYmFja3MgdGhhdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGJlZm9yZSBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dsb2IucnN0IGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKaW5kZXggZWZmMTM4Yi4uYWJjYmYzOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKQEAgLTI1LDYgKzI1LDEwIEBACiBGb3IgZXhhbXBsZSwgYGAnWz9dJ2BgIG1hdGNoZXMgdGhlIGNoYXJhY3RlciBgYCc/J2BgLgogCiAKKy4uIHNlZWFsc286OgorICAgVGhlIDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgaGlnaC1sZXZlbCBwYXRoIG9iamVjdHMuCisKKwogLi4gZnVuY3Rpb246OiBnbG9iKHBhdGhuYW1lKQogCiAgICBSZXR1cm4gYSBwb3NzaWJseS1lbXB0eSBsaXN0IG9mIHBhdGggbmFtZXMgdGhhdCBtYXRjaCAqcGF0aG5hbWUqLCB3aGljaCBtdXN0IGJlCkBAIC00MCw2ICs0NCwxNyBAQAogICAgd2l0aG91dCBhY3R1YWxseSBzdG9yaW5nIHRoZW0gYWxsIHNpbXVsdGFuZW91c2x5LgogCiAKKy4uIGZ1bmN0aW9uOjogZXNjYXBlKHBhdGhuYW1lKQorCisgICBFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycyAoYGAnPydgYCwgYGAnKidgYCBhbmQgYGAnWydgYCkuCisgICBUaGlzIGlzIHVzZWZ1bCBpZiB5b3Ugd2FudCB0byBtYXRjaCBhbiBhcmJpdHJhcnkgbGl0ZXJhbCBzdHJpbmcgdGhhdCBtYXkKKyAgIGhhdmUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGl0LiAgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIGRyaXZlL1VOQworICAgc2hhcmVwb2ludHMgYXJlIG5vdCBlc2NhcGVkLCBlLmcuIG9uIFdpbmRvd3MKKyAgIGBgZXNjYXBlKCcvLz8vYzovUXVvIHZhZGlzPy50eHQnKWBgIHJldHVybnMgYGAnLy8/L2M6L1F1byB2YWRpc1s/XS50eHQnYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGRpcmVjdG9yeSBjb250YWluaW5nIG9ubHkgdGhlIGZvbGxvd2luZyBmaWxlczoKIDpmaWxlOmAxLmdpZmAsIDpmaWxlOmAyLnR4dGAsIGFuZCA6ZmlsZTpgY2FyZC5naWZgLiAgOmZ1bmM6YGdsb2JgIHdpbGwgcHJvZHVjZQogdGhlIGZvbGxvd2luZyByZXN1bHRzLiAgTm90aWNlIGhvdyBhbnkgbGVhZGluZyBjb21wb25lbnRzIG9mIHRoZSBwYXRoIGFyZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QgYi9Eb2MvbGlicmFyeS9nemlwLnJzdAppbmRleCBlYzE2ZjZhLi5kZTUwNjNhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nemlwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nemlwLnJzdApAQCAtMzUsOCArMzUsOCBAQAogICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAncidgYCwgYGAncmInYGAsIGBgJ2EnYGAsIGBgJ2FiJ2BgLAotICAgYGAndydgYCwgb3IgYGAnd2InYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwgYGAnYXQnYGAsIG9yIGBgJ3d0J2BgIGZvcgotICAgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KKyAgIGBgJ3cnYGAsIGBgJ3diJ2BgLCBgYCd4J2BgIG9yIGBgJ3hiJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsCisgICBgYCdhdCdgYCwgYGAnd3QnYGAsIG9yIGBgJ3h0J2BgIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBUaGUgKmNvbXByZXNzbGV2ZWwqIGFyZ3VtZW50IGlzIGFuIGludGVnZXIgZnJvbSAwIHRvIDksIGFzIGZvciB0aGUKICAgIDpjbGFzczpgR3ppcEZpbGVgIGNvbnN0cnVjdG9yLgpAQCAtNTMsNiArNTMsOSBAQAogICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgKmZpbGVuYW1lKiBiZWluZyBhIGZpbGUgb2JqZWN0LCBzdXBwb3J0IGZvciB0ZXh0IG1vZGUsCiAgICAgICBhbmQgdGhlICplbmNvZGluZyosICplcnJvcnMqIGFuZCAqbmV3bGluZSogYXJndW1lbnRzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgJ3gnYGAsIGBgJ3hiJ2BgIGFuZCBgYCd4dCdgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IEd6aXBGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9Tm9uZSwgY29tcHJlc3NsZXZlbD05LCBmaWxlb2JqPU5vbmUsIG10aW1lPU5vbmUpCiAKQEAgLTczLDggKzc2LDkgQEAKICAgIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAncidgYCwgYGAncmInYGAsIGBgJ2EnYGAsIGBgJ2FiJ2BgLCBgYCd3J2BgLAotICAgb3IgYGAnd2InYGAsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBvciB3cml0dGVuLiAgVGhlIGRlZmF1bHQKLSAgIGlzIHRoZSBtb2RlIG9mICpmaWxlb2JqKiBpZiBkaXNjZXJuaWJsZTsgb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KKyAgIGBgJ3diJ2BgLCBgYCd4J2BgLCBvciBgYCd4YidgYCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yCisgICB3cml0dGVuLiAgVGhlIGRlZmF1bHQgaXMgdGhlIG1vZGUgb2YgKmZpbGVvYmoqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZQorICAgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgTm90ZSB0aGF0IHRoZSBmaWxlIGlzIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuIFRvIG9wZW4gYSBjb21wcmVzc2VkIGZpbGUKICAgIGluIHRleHQgbW9kZSwgdXNlIDpmdW5jOmAub3BlbmAgKG9yIHdyYXAgeW91ciA6Y2xhc3M6YEd6aXBGaWxlYCB3aXRoIGFuCkBAIC0xMjUsNiArMTI5LDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGUgOm1ldGg6YGlvLkJ1ZmZlcmVkSU9CYXNlLnJlYWQxYCBtZXRob2QgaXMgbm93IGltcGxlbWVudGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgJ3gnYGAgYW5kIGBgJ3hiJ2BgIG1vZGVzLgorCiAKIC4uIGZ1bmN0aW9uOjogY29tcHJlc3MoZGF0YSwgY29tcHJlc3NsZXZlbD05KQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdCBiL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CmluZGV4IDQ5ZmVkZWMuLmIxZGFiYTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0CkBAIC0zMiw2ICszMiwxMCBAQAogICAgU29tZSBhbGdvcml0aG1zIGhhdmUga25vd24gaGFzaCBjb2xsaXNpb24gd2Vha25lc3NlcywgcmVmZXIgdG8gdGhlICJTZWUKICAgIGFsc28iIHNlY3Rpb24gYXQgdGhlIGVuZC4KIAorCitIYXNoIGFsZ29yaXRobXMKKy0tLS0tLS0tLS0tLS0tLQorCiBUaGVyZSBpcyBvbmUgY29uc3RydWN0b3IgbWV0aG9kIG5hbWVkIGZvciBlYWNoIHR5cGUgb2YgOmRmbjpgaGFzaGAuICBBbGwgcmV0dXJuCiBhIGhhc2ggb2JqZWN0IHdpdGggdGhlIHNhbWUgc2ltcGxlIGludGVyZmFjZS4gRm9yIGV4YW1wbGU6IHVzZSA6ZnVuYzpgc2hhMWAgdG8KIGNyZWF0ZSBhIFNIQTEgaGFzaCBvYmplY3QuIFlvdSBjYW4gbm93IGZlZWQgdGhpcyBvYmplY3Qgd2l0aCA6dGVybTpgYnl0ZXMtbGlrZQpAQCAtNTMsOSArNTcsMTMgQEAKIC4uIGluZGV4Ojogc2luZ2xlOiBPcGVuU1NMOyAodXNlIGluIG1vZHVsZSBoYXNobGliKQogCiBDb25zdHJ1Y3RvcnMgZm9yIGhhc2ggYWxnb3JpdGhtcyB0aGF0IGFyZSBhbHdheXMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBhcmUKLTpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsIGFuZAotOmZ1bmM6YHNoYTUxMmAuICBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uIHRoZQotT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KKzpmdW5jOmBtZDVgLCA6ZnVuYzpgc2hhMWAsIDpmdW5jOmBzaGEyMjRgLCA6ZnVuYzpgc2hhMjU2YCwgOmZ1bmM6YHNoYTM4NGAsCis6ZnVuYzpgc2hhNTEyYCwgOmZ1bmM6YHNoYTNfMjI0YCwgOmZ1bmM6YHNoYTNfMjU2YCwgOmZ1bmM6YHNoYTNfMzg0YCwgYW5kCis6ZnVuYzpgc2hhM181MTJgLiBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uCit0aGUgT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCBzaGEzIGZhbWlseSBvZiBoYXNoIGFsZ29yaXRobXMuCiAKIEZvciBleGFtcGxlLCB0byBvYnRhaW4gdGhlIGRpZ2VzdCBvZiB0aGUgYnl0ZSBzdHJpbmcgYGBiJ05vYm9keSBpbnNwZWN0cyB0aGUKIHNwYW1taXNoIHJlcGV0aXRpb24nYGA6OgpAQCAtMTIyLDYgKzEzMCwxOCBAQAogCiAgICBUaGUgaW50ZXJuYWwgYmxvY2sgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gaW4gYnl0ZXMuCiAKK0EgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gYXR0cmlidXRlOjogaGFzaC5uYW1lCisKKyAgIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGlzIGhhc2gsIGFsd2F5cyBsb3dlcmNhc2UgYW5kIGFsd2F5cyBzdWl0YWJsZSBhcyBhCisgICBwYXJhbWV0ZXIgdG8gOmZ1bmM6YG5ld2AgdG8gY3JlYXRlIGFub3RoZXIgaGFzaCBvZiB0aGlzIHR5cGUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmFtZSBhdHRyaWJ1dGUgaGFzIGJlZW4gcHJlc2VudCBpbiBDUHl0aG9uIHNpbmNlIGl0cyBpbmNlcHRpb24sIGJ1dAorICAgICAgdW50aWwgUHl0aG9uIDMuNCB3YXMgbm90IGZvcm1hbGx5IHNwZWNpZmllZCwgc28gbWF5IG5vdCBleGlzdCBvbiBzb21lCisgICAgICBwbGF0Zm9ybXMuCisKIEEgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogCkBAIC0xNTgsNiArMTc4LDQ1IEBACiAgICBjb21wdXRlIHRoZSBkaWdlc3RzIG9mIGRhdGEgc2hhcmluZyBhIGNvbW1vbiBpbml0aWFsIHN1YnN0cmluZy4KIAogCitLZXkgRGVyaXZhdGlvbiBGdW5jdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworS2V5IGRlcml2YXRpb24gYW5kIGtleSBzdHJldGNoaW5nIGFsZ29yaXRobXMgYXJlIGRlc2lnbmVkIGZvciBzZWN1cmUgcGFzc3dvcmQKK2hhc2hpbmcuIE5haXZlIGFsZ29yaXRobXMgc3VjaCBhcyBgYHNoYTEocGFzc3dvcmQpYGAgYXJlIG5vdCByZXNpc3RhbnQKK2FnYWluc3QgYnJ1dGUtZm9yY2UgYXR0YWNrcy4gQSBnb29kIHBhc3N3b3JkIGhhc2hpbmcgZnVuY3Rpb24gbXVzdCBiZSB0dW5hYmxlLAorc2xvdyBhbmQgaW5jbHVkZSBhIHNhbHQuCisKKworLi4gZnVuY3Rpb246OiBwYmtkZjJfaG1hYyhuYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbj1Ob25lKQorCisgICBUaGUgZnVuY3Rpb24gcHJvdmlkZXMgUEtDUyM1IHBhc3N3b3JkLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIuIEl0CisgICB1c2VzIEhNQUMgYXMgcHNldWRvcmFuZG9tIGZ1bmN0aW9uLgorCisgICBUaGUgc3RyaW5nICpuYW1lKiBpcyB0aGUgZGVzaXJlZCBuYW1lIG9mIHRoZSBoYXNoIGRpZ2VzdCBhbGdvcml0aG0gZm9yCisgICBITUFDLCBlLmcuICdzaGExJyBvciAnc2hhMjU2Jy4gKnBhc3N3b3JkKiBhbmQgKnNhbHQqIGFyZSBpbnRlcnByZXRlZCBhcworICAgYnVmZmVycyBvZiBieXRlcy4gQXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMgc2hvdWxkIGxpbWl0ICpwYXNzd29yZCogdG8KKyAgIGEgc2Vuc2libGUgdmFsdWUgKGUuZy4gMTAyNCkuICpzYWx0KiBzaG91bGQgYmUgYWJvdXQgMTYgb3IgbW9yZSBieXRlcyBmcm9tCisgICBhIHByb3BlciBzb3VyY2UsIGUuZy4gOmZ1bmM6YG9zLnVyYW5kb21gLgorCisgICBUaGUgbnVtYmVyIG9mICpyb3VuZHMqIHNob3VsZCBiZSBjaG9zZW4gYmFzZWQgb24gdGhlIGhhc2ggYWxnb3JpdGhtIGFuZAorICAgY29tcHV0aW5nIHBvd2VyLiBBcyBvZiAyMDEzIGEgdmFsdWUgb2YgYXQgbGVhc3QgMTAwLDAwMCByb3VuZHMgb2YgU0hBLTI1NgorICAgaGF2ZSBiZWVuIHN1Z2dlc3RlZC4KKworICAgKmRrbGVuKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBkZXJpdmVkIGtleS4gSWYgKmRrbGVuKiBpcyBgYE5vbmVgYCB0aGVuIHRoZQorICAgZGlnZXN0IHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtICpuYW1lKiBpcyB1c2VkLCBlLmcuIDY0IGZvciBTSEEtNTEyLgorCisgICA+Pj4gaW1wb3J0IGhhc2hsaWIsIGJpbmFzY2lpCisgICA+Pj4gZGsgPSBoYXNobGliLnBia2RmMl9obWFjKCdzaGEyNTYnLCBiJ3Bhc3N3b3JkJywgYidzYWx0JywgMTAwMDAwKQorICAgPj4+IGJpbmFzY2lpLmhleGxpZnkoZGspCisgICBiJzAzOTRhMmVkZTMzMmM5YTEzZWI4MmU5YjI0NjMxNjA0YzMxZGY5NzhiNGUyZjBmYmQyYzU0OTk0NGY5ZDc5YTUnCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBub3RlOjogQSBmYXN0IGltcGxlbWVudGF0aW9uIG9mICpwYmtkZjJfaG1hYyogaXMgYXZhaWxhYmxlIHdpdGggT3BlblNTTC4KKyAgICAgIFRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpbmxpbmUgdmVyc2lvbiBvZiA6bW9kOmBobWFjYC4gSXQgaXMKKyAgICAgIGFib3V0IHRocmVlIHRpbWVzIHNsb3dlciBhbmQgZG9lc24ndCByZWxlYXNlIHRoZSBHSUwuCisKKwogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBobWFjYApAQCAtMTczLDMgKzIzMiw1IEBACiAgICAgICBXaWtpcGVkaWEgYXJ0aWNsZSB3aXRoIGluZm9ybWF0aW9uIG9uIHdoaWNoIGFsZ29yaXRobXMgaGF2ZSBrbm93biBpc3N1ZXMgYW5kCiAgICAgICB3aGF0IHRoYXQgbWVhbnMgcmVnYXJkaW5nIHRoZWlyIHVzZS4KIAorICAgaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjg5OC50eHQKKyAgICAgIFBLQ1MgIzU6IFBhc3N3b3JkLUJhc2VkIENyeXB0b2dyYXBoeSBTcGVjaWZpY2F0aW9uIFZlcnNpb24gMi4wCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9obWFjLnJzdCBiL0RvYy9saWJyYXJ5L2htYWMucnN0CmluZGV4IDk1NzU2OTMuLjJlOWIwYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2htYWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2htYWMucnN0CkBAIC0xNiwyMCArMTYsMzMgQEAKIAogLi4gZnVuY3Rpb246OiBuZXcoa2V5LCBtc2c9Tm9uZSwgZGlnZXN0bW9kPU5vbmUpCiAKLSAgIFJldHVybiBhIG5ldyBobWFjIG9iamVjdC4gICprZXkqIGlzIGEgYnl0ZXMgb2JqZWN0IGdpdmluZyB0aGUgc2VjcmV0IGtleS4gIElmCi0gICAqbXNnKiBpcyBwcmVzZW50LCB0aGUgbWV0aG9kIGNhbGwgYGB1cGRhdGUobXNnKWBgIGlzIG1hZGUuICAqZGlnZXN0bW9kKiBpcwotICAgdGhlIGRpZ2VzdCBjb25zdHJ1Y3RvciBvciBtb2R1bGUgZm9yIHRoZSBITUFDIG9iamVjdCB0byB1c2UuIEl0IGRlZmF1bHRzIHRvCi0gICB0aGUgOmRhdGE6YGhhc2hsaWIubWQ1YCBjb25zdHJ1Y3Rvci4KKyAgIFJldHVybiBhIG5ldyBobWFjIG9iamVjdC4gICprZXkqIGlzIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCBnaXZpbmcgdGhlCisgICBzZWNyZXQga2V5LiAgSWYgKm1zZyogaXMgcHJlc2VudCwgdGhlIG1ldGhvZCBjYWxsIGBgdXBkYXRlKG1zZylgYCBpcyBtYWRlLgorICAgKmRpZ2VzdG1vZCogaXMgdGhlIGRpZ2VzdCBuYW1lLCBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQworICAgb2JqZWN0IHRvIHVzZS4gSXQgc3VwcG9ydHMgYW55IG5hbWUgc3VpdGFibGUgdG8gOmZ1bmM6YGhhc2hsaWIubmV3YCBhbmQKKyAgIGRlZmF1bHRzIHRvIHRoZSA6ZGF0YTpgaGFzaGxpYi5tZDVgIGNvbnN0cnVjdG9yLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUGFyYW1ldGVyICprZXkqIGNhbiBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QuIFBhcmFtZXRlciAqbXNnKiBjYW4KKyAgICAgIGJlIG9mIGFueSB0eXBlIHN1cHBvcnRlZCBieSA6bW9kOmBoYXNobGliYC4KKworICAgICAgUGFyYW10ZXIgKmRpZ2VzdG1vZCogY2FuIGJlIHRoZSBuYW1lIG9mIGEgaGFzaCBhbGdvcml0aG0uCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIE1ENSBhcyBpbXBsaWNpdCBkZWZhdWx0IGRpZ2VzdCBmb3IgKmRpZ2VzdG1vZCogaXMgZGVwcmVjYXRlZC4KIAogCiBBbiBITUFDIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAuLiBtZXRob2Q6OiBITUFDLnVwZGF0ZShtc2cpCiAKLSAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCB0aGUgYnl0ZXMgb2JqZWN0ICptc2cqLiAgUmVwZWF0ZWQgY2FsbHMgYXJlCi0gICBlcXVpdmFsZW50IHRvIGEgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czoKKyAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZSBlcXVpdmFsZW50IHRvIGEKKyAgIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CiAgICBgYG0udXBkYXRlKGEpOyBtLnVwZGF0ZShiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLnVwZGF0ZShhICsgYilgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqbXNnKiBjYW4gYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorCiAKIC4uIG1ldGhvZDo6IEhNQUMuZGlnZXN0KCkKIApAQCAtNjYsNiArNzksMjUgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2Ygc3RyaW5ncyB0aGF0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0EgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gYXR0cmlidXRlOjogSE1BQy5kaWdlc3Rfc2l6ZQorCisgICBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIEhNQUMgZGlnZXN0IGluIGJ5dGVzLgorCisuLiBhdHRyaWJ1dGU6OiBITUFDLmJsb2NrX3NpemUKKworICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYXR0cmlidXRlOjogSE1BQy5uYW1lCisKKyAgIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGlzIEhNQUMsIGFsd2F5cyBsb3dlcmNhc2UsIGUuZy4gYGBobWFjLW1kNWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGlzIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uOgogCiAuLiBmdW5jdGlvbjo6IGNvbXBhcmVfZGlnZXN0KGEsIGIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CmluZGV4IDBhYWJiYWQuLjA5YjBhYmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CkBAIC0yMCw2ICsyMCw3IEBACiAgICBOb3RlIHRoYXQgdGhlIHRyYWlsaW5nIHNlbWljb2xvbiBpcyBpbmNsdWRlZCBpbiB0aGUgbmFtZSAoZS5nLiBgYCdndDsnYGApLAogICAgaG93ZXZlciBzb21lIG9mIHRoZSBuYW1lcyBhcmUgYWNjZXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGV2ZW4gd2l0aG91dCB0aGUKICAgIHNlbWljb2xvbjogaW4gdGhpcyBjYXNlIHRoZSBuYW1lIGlzIHByZXNlbnQgd2l0aCBhbmQgd2l0aG91dCB0aGUgYGAnOydgYC4KKyAgIFNlZSBhbHNvIDpmdW5jOmBodG1sLnVuZXNjYXBlYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdAppbmRleCBlNDE1NGVmLi40NGI3ZDZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CkBAIC0xNiwxNCArMTYsMjEgQEAKIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjbGFzcyA6Y2xhc3M6YEhUTUxQYXJzZXJgIHdoaWNoIHNlcnZlcyBhcyB0aGUgYmFzaXMgZm9yCiBwYXJzaW5nIHRleHQgZmlsZXMgZm9ybWF0dGVkIGluIEhUTUwgKEh5cGVyVGV4dCBNYXJrLXVwIExhbmd1YWdlKSBhbmQgWEhUTUwuCiAKLS4uIGNsYXNzOjogSFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UpCisuLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlLCAqLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCi0gICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuICBJZiAqc3RyaWN0KiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIHBhcnNlcgotICAgd2lsbCBhY2NlcHQgYW5kIHBhcnNlIGludmFsaWQgbWFya3VwLiAgSWYgKnN0cmljdCogaXMgYGBUcnVlYGAgdGhlIHBhcnNlcgotICAgd2lsbCByYWlzZSBhbiA6ZXhjOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3JgIGV4Y2VwdGlvbiBpbnN0ZWFkIFsjXV8gd2hlbgotICAgaXQncyBub3QgYWJsZSB0byBwYXJzZSB0aGUgbWFya3VwLgotICAgVGhlIHVzZSBvZiBgYHN0cmljdD1UcnVlYGAgaXMgZGlzY291cmFnZWQgYW5kIHRoZSAqc3RyaWN0KiBhcmd1bWVudCBpcwotICAgZGVwcmVjYXRlZC4KKyAgIENyZWF0ZSBhIHBhcnNlciBpbnN0YW5jZS4KKworICAgSWYgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIGBgVHJ1ZWBgIChkZWZhdWx0OiBgYEZhbHNlYGApLCBhbGwgY2hhcmFjdGVyCisgICByZWZlcmVuY2VzIChleGNlcHQgdGhlIG9uZXMgaW4gYGBzY3JpcHRgYC9gYHN0eWxlYGAgZWxlbWVudHMpIGFyZQorICAgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXJzLgorICAgVGhlIHVzZSBvZiBgYGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZWBgIGlzIGVuY291cmFnZWQgYW5kIHdpbGwgYmVjb21lCisgICB0aGUgZGVmYXVsdCBpbiBQeXRob24gMy41LgorCisgICBJZiAqc3RyaWN0KiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIHBhcnNlciB3aWxsIGFjY2VwdCBhbmQgcGFyc2UKKyAgIGludmFsaWQgbWFya3VwLiAgSWYgKnN0cmljdCogaXMgYGBUcnVlYGAgdGhlIHBhcnNlciB3aWxsIHJhaXNlIGFuCisgICA6ZXhjOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3JgIGV4Y2VwdGlvbiBpbnN0ZWFkIFsjXV8gd2hlbiBpdCdzIG5vdAorICAgYWJsZSB0byBwYXJzZSB0aGUgbWFya3VwLiAgVGhlIHVzZSBvZiBgYHN0cmljdD1UcnVlYGAgaXMgZGlzY291cmFnZWQgYW5kCisgICB0aGUgKnN0cmljdCogYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4KIAogICAgQW4gOmNsYXNzOmAuSFRNTFBhcnNlcmAgaW5zdGFuY2UgaXMgZmVkIEhUTUwgZGF0YSBhbmQgY2FsbHMgaGFuZGxlciBtZXRob2RzCiAgICB3aGVuIHN0YXJ0IHRhZ3MsIGVuZCB0YWdzLCB0ZXh0LCBjb21tZW50cywgYW5kIG90aGVyIG1hcmt1cCBlbGVtZW50cyBhcmUKQEAgLTM0LDEyICs0MSwxNSBAQAogICAgaGFuZGxlciBmb3IgZWxlbWVudHMgd2hpY2ggYXJlIGNsb3NlZCBpbXBsaWNpdGx5IGJ5IGNsb3NpbmcgYW4gb3V0ZXIgZWxlbWVudC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgICpzdHJpY3QqIGtleXdvcmQgYWRkZWQuCisgICAgICAqc3RyaWN0KiBhcmd1bWVudCBhZGRlZC4KIAogICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNQogICAgICAgVGhlICpzdHJpY3QqIGFyZ3VtZW50IGFuZCB0aGUgc3RyaWN0IG1vZGUgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuCiAgICAgICBUaGUgcGFyc2VyIGlzIG5vdyBhYmxlIHRvIGFjY2VwdCBhbmQgcGFyc2UgaW52YWxpZCBtYXJrdXAgdG9vLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmNvbnZlcnRfY2hhcnJlZnMqIGtleXdvcmQgYXJndW1lbnQgYWRkZWQuCisKIEFuIGV4Y2VwdGlvbiBpcyBkZWZpbmVkIGFzIHdlbGw6CiAKIApAQCAtNzQsNyArODQsNyBAQAogICAgICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgICAgcHJpbnQoIkVuY291bnRlcmVkIHNvbWUgZGF0YSAgOiIsIGRhdGEpCiAKLSAgIHBhcnNlciA9IE15SFRNTFBhcnNlcihzdHJpY3Q9RmFsc2UpCisgICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoKQogICAgcGFyc2VyLmZlZWQoJzxodG1sPjxoZWFkPjx0aXRsZT5UZXN0PC90aXRsZT48L2hlYWQ+JwogICAgICAgICAgICAgICAgJzxib2R5PjxoMT5QYXJzZSBtZSE8L2gxPjwvYm9keT48L2h0bWw+JykKIApAQCAtMTgxLDcgKzE5MSw4IEBACiAKICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBwcm9jZXNzIGEgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZSBvZiB0aGUgZm9ybQogICAgYGAmbmFtZTtgYCAoZS5nLiBgYCZndDtgYCksIHdoZXJlICpuYW1lKiBpcyBhIGdlbmVyYWwgZW50aXR5IHJlZmVyZW5jZQotICAgKGUuZy4gYGAnZ3QnYGApLgorICAgKGUuZy4gYGAnZ3QnYGApLiAgVGhpcyBtZXRob2QgaXMgbmV2ZXIgY2FsbGVkIGlmICpjb252ZXJ0X2NoYXJyZWZzKiBpcworICAgYGBUcnVlYGAuCiAKIAogLi4gbWV0aG9kOjogSFRNTFBhcnNlci5oYW5kbGVfY2hhcnJlZihuYW1lKQpAQCAtMTg5LDcgKzIwMCw4IEBACiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHJvY2VzcyBkZWNpbWFsIGFuZCBoZXhhZGVjaW1hbCBudW1lcmljIGNoYXJhY3RlcgogICAgcmVmZXJlbmNlcyBvZiB0aGUgZm9ybSBgYCYjTk5OO2BgIGFuZCBgYCYjeE5OTjtgYC4gIEZvciBleGFtcGxlLCB0aGUgZGVjaW1hbAogICAgZXF1aXZhbGVudCBmb3IgYGAmZ3Q7YGAgaXMgYGAmIzYyO2BgLCB3aGVyZWFzIHRoZSBoZXhhZGVjaW1hbCBpcyBgYCYjeDNFO2BgOwotICAgaW4gdGhpcyBjYXNlIHRoZSBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJzYyJ2BgIG9yIGBgJ3gzRSdgYC4KKyAgIGluIHRoaXMgY2FzZSB0aGUgbWV0aG9kIHdpbGwgcmVjZWl2ZSBgYCc2MidgYCBvciBgYCd4M0UnYGAuICBUaGlzIG1ldGhvZAorICAgaXMgbmV2ZXIgY2FsbGVkIGlmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYC4KIAogCiAuLiBtZXRob2Q6OiBIVE1MUGFyc2VyLmhhbmRsZV9jb21tZW50KGRhdGEpCkBAIC0yNzIsNyArMjg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJEZWNsICAgICA6IiwgZGF0YSkKIAotICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSkKKyAgIHBhcnNlciA9IE15SFRNTFBhcnNlcigpCiAKIFBhcnNpbmcgYSBkb2N0eXBlOjoKIApAQCAtMzI0LDcgKzMzNiw4IEBACiAgICBOdW0gZW50ICA6ID4KIAogRmVlZGluZyBpbmNvbXBsZXRlIGNodW5rcyB0byA6bWV0aDpgfkhUTUxQYXJzZXIuZmVlZGAgd29ya3MsIGJ1dAotOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2U6OgorOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyh1bmxlc3MgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIHNldCB0byBgYFRydWVgYCk6OgogCiAgICA+Pj4gZm9yIGNodW5rIGluIFsnPHNwJywgJ2FuPmJ1ZmYnLCAnZXJlZCAnLCAndGV4dDwvcycsICdwYW4+J106CiAgICAuLi4gICAgIHBhcnNlci5mZWVkKGNodW5rKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnJzdAppbmRleCAxMTA3Y2E5Li5kMDcwNmJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLnJzdApAQCAtMjAsNiArMjAsMTcgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKworLi4gZnVuY3Rpb246OiB1bmVzY2FwZShzKQorCisgICBDb252ZXJ0IGFsbCBuYW1lZCBhbmQgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyAoZS5nLiBgYCZndDtgYCwKKyAgIGBgJiM2MjtgYCwgYGAmeDNlO2BgKSBpbiB0aGUgc3RyaW5nICpzKiB0byB0aGUgY29ycmVzcG9uZGluZyB1bmljb2RlCisgICBjaGFyYWN0ZXJzLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIDUgc3RhbmRhcmQKKyAgIGZvciBib3RoIHZhbGlkIGFuZCBpbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2VzLCBhbmQgdGhlIDpkYXRhOmBsaXN0IG9mCisgICBIVE1MIDUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgPGh0bWwuZW50aXRpZXMuaHRtbDU+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC0tLS0tLS0tLS0tLS0tCiAKIFN1Ym1vZHVsZXMgaW4gdGhlIGBgaHRtbGBgIHBhY2thZ2UgYXJlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CmluZGV4IDc4M2E1OTYuLjJkYmZhMjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKQEAgLTI3LDcgKzI3LDcgQEAKIFRoZSBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAKLS4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgc3RyaWN0XVssIHRpbWVvdXRdLCBcCisuLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZVssIHRpbWVvdXRdLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKICAgIEFuIDpjbGFzczpgSFRUUENvbm5lY3Rpb25gIGluc3RhbmNlIHJlcHJlc2VudHMgb25lIHRyYW5zYWN0aW9uIHdpdGggYW4gSFRUUApAQCAtNTEsMTMgKzUxLDEzIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCiAKLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMiAzLjQKLSAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgotICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgICpzdHJpY3QqIHBhcmFtZXRlciBpcyByZW1vdmVkLiBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3Qgc3VwcG9ydGVkLgogCiAKIC4uIGNsYXNzOjogSFRUUFNDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9maWxlPU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUsICosIGNvbnRleHQ9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9Tm9uZSkKIApAQCAtODksMTkgKzg5LDE5IEBACiAgICAgICBUaGlzIGNsYXNzIG5vdyBzdXBwb3J0cyBIVFRQUyB2aXJ0dWFsIGhvc3RzIGlmIHBvc3NpYmxlICh0aGF0IGlzLAogICAgICAgaWYgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgcmVtb3ZlZC4gSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKLS4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MFssIHN0cmljdF0sIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKKy4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MCwgbWV0aG9kPU5vbmUsIHVybD1Ob25lKQogCiAgICBDbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHJldHVybmVkIHVwb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAgTm90CiAgICBpbnN0YW50aWF0ZWQgZGlyZWN0bHkgYnkgdXNlci4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgcmVtb3ZlZC4gSFRUUCAwLjkgc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiIGFyZQorICAgICAgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFzIGFwcHJvcHJpYXRlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CmluZGV4IDVhZWI3MTkuLjExM2FjNDQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKQEAgLTE3MCwxMiArMTcwLDE5IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCi0gICAuLiBtZXRob2Q6OiBzZW5kX2Vycm9yKGNvZGUsIG1lc3NhZ2U9Tm9uZSkKKyAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lLCBleHBsYWluPU5vbmUpCiAKICAgICAgIFNlbmRzIGFuZCBsb2dzIGEgY29tcGxldGUgZXJyb3IgcmVwbHkgdG8gdGhlIGNsaWVudC4gVGhlIG51bWVyaWMgKmNvZGUqCi0gICAgICBzcGVjaWZpZXMgdGhlIEhUVFAgZXJyb3IgY29kZSwgd2l0aCAqbWVzc2FnZSogYXMgb3B0aW9uYWwsIG1vcmUgc3BlY2lmaWMgdGV4dC4gQQotICAgICAgY29tcGxldGUgc2V0IG9mIGhlYWRlcnMgaXMgc2VudCwgZm9sbG93ZWQgYnkgdGV4dCBjb21wb3NlZCB1c2luZyB0aGUKLSAgICAgIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUuCisgICAgICBzcGVjaWZpZXMgdGhlIEhUVFAgZXJyb3IgY29kZSwgd2l0aCAqbWVzc2FnZSogYXMgb3B0aW9uYWwsIG1vcmUgc3BlY2lmaWMKKyAgICAgIHRleHQsIHVzdWFsbHkgcmVmZXJyaW5nIHRvIHNob3J0IG1lc3NhZ2UgcmVzcG9uc2UuICBUaGUgKmV4cGxhaW4qCisgICAgICBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBzZW5kIGEgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIGluCisgICAgICByZXNwb25zZSBjb250ZW50IGJvZHkuICBBIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzIGlzIHNlbnQsIGZvbGxvd2VkIGJ5CisgICAgICB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZSA6YXR0cjpgZXJyb3JfbWVzc2FnZV9mb3JtYXRgIGNsYXNzIHZhcmlhYmxlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgVGhlIGVycm9yIHJlc3BvbnNlIGluY2x1ZGVzIGEgQ29udGVudC1MZW5ndGggaGVhZGVyLgorICAgICAgICAgQWRkZWQgdGhlICpleHBsYWluKiBhcmd1bWVudC4KKwogCiAgICAuLiBtZXRob2Q6OiBzZW5kX3Jlc3BvbnNlKGNvZGUsIG1lc3NhZ2U9Tm9uZSkKIApAQCAtMzYxLDYgKzM2OCwxNSBAQAogCiAgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwCiAKK0J5IGRlZmF1bHQsIHNlcnZlciBiaW5kcyBpdHNlbGYgdG8gYWxsIGludGVyZmFjZXMuIFRvIHJlc3RyaWN0IGl0IHRvIGJpbmQgdG8gYQorcGFydGljdWxhciBpbnRlcmZhY2Ugb25seSwgYGAtLWJpbmQgQUREUkVTU2BgIGFyZ3VtZW50IGNhbiBiZSB1c2VkLiBGb3IgZS5nLCB0bworcmVzdHJpY3QgdGhlIHNlcnZlciB0byBiaW5kIG9ubHkgdG8gbG9jYWxob3N0LiA6OgorCisgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwIC0tYmluZCAxMjcuMC4wLjEKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgYGAtLWJpbmRgYCBhcmd1bWVudCB3YXMgaW50cm9kdWNlZC4KKwogCiAuLiBjbGFzczo6IENHSUhUVFBSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pZGxlLnJzdCBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CmluZGV4IDM2ZDc4YjAuLjI3MThjZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lkbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lkbGUucnN0CkBAIC0xNiw3MCArMTYsODIgQEAKIAogKiBjb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgOm1vZDpgdGtpbnRlcmAgR1VJIHRvb2xraXQKIAotKiBjcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cyBhbmQgVW5peAorKiBjcm9zcy1wbGF0Zm9ybTogd29ya3Mgb24gV2luZG93cywgVW5peCwgYW5kIE1hYyBPUyBYCiAKLSogbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcgYW5kIG1hbnkgb3RoZXIKLSAgZmVhdHVyZXMsIGUuZy4gc21hcnQgaW5kZW50IGFuZCBjYWxsIHRpcHMKKyogbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCisgIHNtYXJ0IGluZGVudCwgY2FsbCB0aXBzLCBhbmQgbWFueSBvdGhlciBmZWF0dXJlcwogCiAqIFB5dGhvbiBzaGVsbCB3aW5kb3cgKGEuay5hLiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKIAotKiBkZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgIGFuZCBzdGVwKQorKiBkZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKIAogTWVudXMKIC0tLS0tCiAKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMsIHRoZSBTaGVsbCB3aW5kb3cgYW5kIHRoZSBFZGl0b3Igd2luZG93LiBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gSURMRSdzCittZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4gRWFjaCBtZW51Citkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguIENsaWNrIG9uCit0aGUgZG90dGVkIGxpbmUgYXQgdGhlIHRvcCBvZiBhIG1lbnUgdG8gInRlYXIgaXQgb2ZmIjogYSBzZXBhcmF0ZSB3aW5kb3cKK2NvbnRhaW5pbmcgdGhlIG1lbnUgaXMgY3JlYXRlZCAoZm9yIFVuaXggYW5kIFdpbmRvd3Mgb25seSkuCiAKLUZpbGUgbWVudQotXl5eXl5eXl5eCitGaWxlIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIE5ldyBmaWxlCi0gICBjcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgQ3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKIAogT3Blbi4uLgotICAgb3BlbiBhbiBleGlzdGluZyBmaWxlCisgICBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKIAogT3BlbiBtb2R1bGUuLi4KLSAgIG9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKworUmVjZW50IEZpbGVzCisgICBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKIAogQ2xhc3MgYnJvd3NlcgotICAgc2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQorICAgU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQogCiBQYXRoIGJyb3dzZXIKLSAgIHNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKKyAgIFNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBDbGFzcyBicm93c2VyCiAgICBzaW5nbGU6IFBhdGggYnJvd3NlcgogCiBTYXZlCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQgd2luZG93cyBoYXZlIGEgXCogYmVmb3JlIGFuZAotICAgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYQorICAgXCogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQogCiBTYXZlIEFzLi4uCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gbmV3IGZpbGUsIHdoaWNoIGJlY29tZXMgdGhlIGFzc29jaWF0ZWQgZmlsZQogCiBTYXZlIENvcHkgQXMuLi4KLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorCitQcmludCBXaW5kb3cKKyAgIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdwogCiBDbG9zZQotICAgY2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgY3VycmVudCB3aW5kb3cgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCiBFeGl0Ci0gICBjbG9zZSBhbGwgd2luZG93cyBhbmQgcXVpdCBJRExFIChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgIENsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCiAKLUVkaXQgbWVudQotXl5eXl5eXl5eCitFZGl0IG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFVuZG8KLSAgIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cgKG1heCAxMDAwIGNoYW5nZXMpCisgICBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93IChhIG1heGltdW0gb2YgMTAwMCBjaGFuZ2VzIG1heSBiZSB1bmRvbmUpCiAKIFJlZG8KICAgIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHRoZSBzZWxlY3Rpb24KIAogQ29weQogICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKQEAgLTEwOCwxMSArMTIwLDMwIEBACiBHbyB0byBsaW5lCiAgICBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCiAKK0V4cGFuZCB3b3JkCisgICBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlciB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsKKyAgIHJlcGVhdCB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uCisKK1Nob3cgY2FsbCB0aXAKKyAgIEFmdGVyIGFuIHVuY2xvc2VkIHBhcmVudGhlc2lzIGZvciBhIGZ1bmN0aW9uLCBvcGVuIGEgc21hbGwgd2luZG93IHdpdGgKKyAgIGZ1bmN0aW9uIHBhcmFtZXRlciBoaW50cworCitTaG93IHN1cnJvdW5kaW5nIHBhcmVucworICAgSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworCitTaG93IENvbXBsZXRpb25zCisgICBPcGVuIGEgc2Nyb2xsIHdpbmRvdyBhbGxvd2luZyBzZWxlY3Rpb24ga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorICAgQ29tcGxldGlvbnMgYmVsb3cuCisKKworRm9ybWF0IG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKIEluZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCisgICBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKQogCiBEZWRlbnQgcmVnaW9uCi0gICBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCisgICBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpCiAKIENvbW1lbnQgb3V0IHJlZ2lvbgogICAgSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCkBAIC0xMjEsNjcgKzE1MiwxMjEgQEAKICAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwogCiBUYWJpZnkgcmVnaW9uCi0gICBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMKKyAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4gKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZworICAgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKIAogVW50YWJpZnkgcmVnaW9uCi0gICBUdXJuICphbGwqIHRhYnMgaW50byB0aGUgcmlnaHQgbnVtYmVyIG9mIHNwYWNlcworICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNwYWNlcwogCi1FeHBhbmQgd29yZAotICAgRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdAotICAgdG8gZ2V0IGEgZGlmZmVyZW50IGV4cGFuc2lvbgorVG9nZ2xlIHRhYnMKKyAgIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGggc3BhY2VzIGFuZCB0YWJzLgorCitOZXcgSW5kZW50IFdpZHRoCisgICBPcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KKyAgIGNvbW11bml0eSBpcyA0IHNwYWNlcy4KIAogRm9ybWF0IFBhcmFncmFwaAotICAgUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQgcGFyYWdyYXBoCisgICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZCBwYXJhZ3JhcGguIEFsbCBsaW5lcyBpbiB0aGUKKyAgIHBhcmFncmFwaCB3aWxsIGJlIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KIAotSW1wb3J0IG1vZHVsZQotICAgSW1wb3J0IG9yIHJlbG9hZCB0aGUgY3VycmVudCBtb2R1bGUKLQotUnVuIHNjcmlwdAotICAgRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKK1N0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyAgIFJlbW92ZXMgYW55IHNwYWNlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSW1wb3J0IG1vZHVsZQogICAgc2luZ2xlOiBSdW4gc2NyaXB0CiAKIAotV2luZG93cyBtZW51Ci1eXl5eXl5eXl5eXl4KK1J1biBtZW51IChFZGl0b3Igd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1ab29tIEhlaWdodAotICAgdG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDI0eDgwKSBhbmQgbWF4aW11bSBoZWlnaHQuCitQeXRob24gU2hlbGwKKyAgIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdwogCi1UaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7IHNlbGVjdCBvbmUgdG8gYnJpbmcKLWl0IHRvIHRoZSBmb3JlZ3JvdW5kIChkZWljb25pZnlpbmcgaXQgaWYgbmVjZXNzYXJ5KS4KK0NoZWNrIG1vZHVsZQorICAgQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZSBFZGl0b3Igd2luZG93LiBJZiB0aGUKKyAgIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgogCitSdW4gbW9kdWxlCisgICBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQsIHRoZW4gZXhlY3V0ZSB0aGUgY3VycmVudGx5CisgICBvcGVuIG1vZHVsZS4gIElmIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBwcm9tcHQgdGhlIHVzZXIKKyAgIHRvIHNhdmUgdGhlIGNvZGUuCiAKLURlYnVnIG1lbnUKLV5eXl5eXl5eXl4KK1NoZWxsIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSogaW4gdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cgb25seQorVmlldyBMYXN0IFJlc3RhcnQKKyAgU2Nyb2xsIHRoZSBzaGVsbCB3aW5kb3cgdG8gdGhlIGxhc3QgU2hlbGwgcmVzdGFydAorCitSZXN0YXJ0IFNoZWxsCisgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudAorCitEZWJ1ZyBtZW51IChTaGVsbCB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBHbyB0byBmaWxlL2xpbmUKICAgIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLAogICAgYW5kIHNob3cgdGhlIGxpbmUuICBVc2VmdWwgdG8gdmlldyB0aGUgc291cmNlIGxpbmVzIHJlZmVyZW5jZWQgaW4gYW4KLSAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suCisgICBleGNlcHRpb24gdHJhY2ViYWNrLiBBdmFpbGFibGUgaW4gdGhlIGNvbnRleHQgbWVudSBvZiB0aGUgU2hlbGwgd2luZG93LgogCi1EZWJ1Z2dlcgotICAgUnVuIGNvbW1hbmRzIGluIHRoZSBzaGVsbCB1bmRlciB0aGUgZGVidWdnZXIuCitEZWJ1Z2dlciAodG9nZ2xlKQorICAgVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZCBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbgorICAgdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgogCiBTdGFjayB2aWV3ZXIKLSAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24uCisgICBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCiAKIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIKLSAgIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjay4KKyAgIFRvZ2dsZSBhdXRvbWF0aWNhbGx5IG9wZW5pbmcgdGhlIHN0YWNrIHZpZXdlciBvbiB1bmhhbmRsZWQgZXhjZXB0aW9uCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogc3RhY2sgdmlld2VyCiAgICBzaW5nbGU6IGRlYnVnZ2VyCiAKK09wdGlvbnMgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotRWRpdCBjb250ZXh0IG1lbnUKLV5eXl5eXl5eXl5eXl5eXl5eCitDb25maWd1cmUgSURMRQorICAgT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nLiAgRm9udHMsIGluZGVudGF0aW9uLCBrZXliaW5kaW5ncywgYW5kIGNvbG9yCisgICB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuICBTdGFydHVwIFByZWZlcmVuY2VzIG1heSBiZSBzZXQsIGFuZCBhZGRpdGlvbmFsCisgICBoZWxwIHNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KIAotKiBSaWdodC1jbGljayBpbiBFZGl0IHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQorQ29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSkKKyAgIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CisgICBvZiB0aGUgc2VjdGlvbiBvZiBjb2RlIHdoaWNoIGlzIHNjcm9sbGluZyBvZmYgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitXaW5kb3dzIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1pvb20gSGVpZ2h0CisgICBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSAoNDB4ODAgaW5pdGlhbCBzZXR0aW5nKSBhbmQgbWF4aW11bQorICAgaGVpZ2h0LiBUaGUgaW5pdGlhbCBzaXplIGlzIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cgdW5kZXIgdGhlIGdlbmVyYWwKKyAgIHRhYi4KKworVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCitpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuCisKK0hlbHAgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworQWJvdXQgSURMRQorICAgVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisKK0lETEUgSGVscAorICAgRGlzcGxheSBhIGhlbHAgZmlsZSBmb3IgSURMRSBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQKKyAgIG5hdmlnYXRpb24sIGFuZCBvdGhlciB0aXBzLgorCitQeXRob24gRG9jcworICAgQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQuIE9yIHdpbGwgc3RhcnQgYSB3ZWIgYnJvd3NlcgorICAgYW5kIG9wZW4gZG9jcy5weXRob24ub3JnIHNob3dpbmcgdGhlIGxhdGVzdCBQeXRob24gZG9jdW1lbnRhdGlvbi4KKworQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyCit0aGUgR2VuZXJhbCB0YWIuCisKK0VkaXRvciBXaW5kb3cgY29udGV4dCBtZW51CiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisqIFJpZ2h0LWNsaWNrIGluIEVkaXRvciB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKIAogQ3V0CiAgICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgc2VsZWN0aW9uCkBAIC0yMDcsOCArMjkyLDggQEAKICAgIHNpbmdsZTogYnJlYWtwb2ludHMKIAogCi1TaGVsbCBjb250ZXh0IG1lbnUKLV5eXl5eXl5eXl5eXl5eXl5eXgorU2hlbGwgV2luZG93IGNvbnRleHQgbWVudQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiAqIFJpZ2h0LWNsaWNrIGluIFB5dGhvbiBTaGVsbCB3aW5kb3cgKENvbnRyb2wtY2xpY2sgb24gT1MgWCkKIApAQCAtMjI1LDE5ICszMTAsNDQgQEAKICAgIFNhbWUgYXMgaW4gRGVidWcgbWVudS4KIAogCi1CYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICogOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHRvIHRoZSBsZWZ0OyA6a2JkOmBEZWxgIGRlbGV0ZXMgdG8gdGhlIHJpZ2h0CiAKKyogOmtiZDpgQy1CYWNrc3BhY2VgIGRlbGV0ZSB3b3JkIGxlZnQ7IDprYmQ6YEMtRGVsYCBkZWxldGUgd29yZCB0byB0aGUgcmlnaHQKKwogKiBBcnJvdyBrZXlzIGFuZCA6a2JkOmBQYWdlIFVwYC86a2JkOmBQYWdlIERvd25gIHRvIG1vdmUgYXJvdW5kCiAKKyogOmtiZDpgQy1MZWZ0QXJyb3dgIGFuZCA6a2JkOmBDLVJpZ2h0QXJyb3dgIG1vdmVzIGJ5IHdvcmRzCisKICogOmtiZDpgSG9tZWAvOmtiZDpgRW5kYCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZQogCiAqIDprYmQ6YEMtSG9tZWAvOmtiZDpgQy1FbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlCiAKLSogU29tZSA6cHJvZ3JhbTpgRW1hY3NgIGJpbmRpbmdzIG1heSBhbHNvIHdvcmssIGluY2x1ZGluZyA6a2JkOmBDLUJgLAotICA6a2JkOmBDLVBgLCA6a2JkOmBDLUFgLCA6a2JkOmBDLUVgLCA6a2JkOmBDLURgLCA6a2JkOmBDLUxgCisqIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisKKyAgICogOmtiZDpgQy1hYCBiZWdpbm5pbmcgb2YgbGluZQorCisgICAqIDprYmQ6YEMtZWAgZW5kIG9mIGxpbmUKKworICAgKiA6a2JkOmBDLWtgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKworICAgKiA6a2JkOmBDLWxgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKworICAgKiA6a2JkOmBDLWJgIGdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLWZgIGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKyAgICAgYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yIHRoaXMpCisKKyAgICogOmtiZDpgQy1wYCBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgorICAgICB0aGlzKQorCisgICAqIDprYmQ6YEMtZGAgZGVsZXRlIG5leHQgY2hhcmFjdGVyCisKK1N0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIDprYmQ6YEMtY2AgdG8gY29weSBhbmQgOmtiZDpgQy12YCB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuCiAKIAogQXV0b21hdGljIGluZGVudGF0aW9uCkBAIC0yNDYsMjcgKzM1Niw3NiBAQAogQWZ0ZXIgYSBibG9jay1vcGVuaW5nIHN0YXRlbWVudCwgdGhlIG5leHQgbGluZSBpcyBpbmRlbnRlZCBieSA0IHNwYWNlcyAoaW4gdGhlCiBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcyAoYnJlYWssIHJldHVybiBldGMuKQogdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcgaW5kZW50YXRpb24sIDprYmQ6YEJhY2tzcGFjZWAgZGVsZXRlcyB1cAotdG8gNCBzcGFjZXMgaWYgdGhleSBhcmUgdGhlcmUuIDprYmQ6YFRhYmAgaW5zZXJ0cyAxLTQgc3BhY2VzIChpbiB0aGUgUHl0aG9uCi1TaGVsbCB3aW5kb3cgb25lIHRhYikuIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdAotbWVudS4KK3RvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA6a2JkOmBUYWJgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uCitTaGVsbCB3aW5kb3cgb25lIHRhYiksIG51bWJlciBkZXBlbmRzIG9uIEluZGVudCB3aWR0aC4gQ3VycmVudGx5IHRhYnMKK2FyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZSB0byBUY2wvVGsgbGltaXRhdGlvbnMuCiAKK1NlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgorCitDb21wbGV0aW9ucworXl5eXl5eXl5eXl4KKworQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mIGNsYXNzZXMsCitib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkIGZvcgorZmlsZW5hbWVzLgorCitUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkgKGRlZmF1bHQgaXMKK3R3byBzZWNvbmRzKSBhZnRlciBhICcuJyBvciAoaW4gYSBzdHJpbmcpIGFuIG9zLnNlcCBpcyB0eXBlZC4gSWYgYWZ0ZXIgb25lCitvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlciBjaGFyYWN0ZXJzKSBhIHRhYiBpcyB0eXBlZAordGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZSBjb250aW51YXRpb24gaXMgZm91bmQuCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIGNvbXBsZXRpb24gZm9yIHRoZSBjaGFyYWN0ZXJzIGVudGVyZWQsIGEKKzprYmQ6YFRhYmAgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgorCisnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorOmtiZDpgQy1zcGFjZWAgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiBJbiBhbiBlbXB0eQorc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiBPbiBhCitibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gSWYgc29tZQorY2hhcmFjdGVycyBoYXZlIGJlZW4gZW50ZXJlZCwgdGhlIEFDVyB3aWxsIGF0dGVtcHQgdG8gYmUgbW9yZSBzcGVjaWZpYy4KKworSWYgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuICBFbnRlcmluZyBhIDprYmQ6YHRhYmAgd2lsbAorY2F1c2UgdGhlIGxvbmdlc3Qgbm9uLWFtYmlndW91cyBtYXRjaCB0byBiZSBlbnRlcmVkIGluIHRoZSBFZGl0b3Igd2luZG93IG9yCitTaGVsbC4gIFR3byA6a2JkOmB0YWJgIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCit3aWxsIHJldHVybiBvciBhIGRvdWJsZSBjbGljay4gIEN1cnNvciBrZXlzLCBQYWdlIFVwL0Rvd24sIG1vdXNlIHNlbGVjdGlvbiwKK2FuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCisKKyJIaWRkZW4iIGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgorbmFtZSBhZnRlciBhICcuJywgZS5nLiAnXycuIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKK2BgX19hbGxfX2BgIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorCitDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorCitDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuIE5hbWVzIGluCithbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIGBgX19tYWluX19gYCBhbmQgOmRhdGE6YHN5cy5tb2R1bGVzYCB3aWxsCitub3QgYmUgZm91bmQuICBSdW4gdGhlIG1vZHVsZSBvbmNlIHdpdGggeW91ciBpbXBvcnRzIHRvIGNvcnJlY3QgdGhpcyBzaXR1YXRpb24uCitOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4gc3lzLm1vZHVsZXMsIHNvCittdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCisKK0lmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5Citsb25nZXIgb3IgZGlzYWJsZSB0aGUgZXh0ZW5zaW9uLiAgT3IgYW5vdGhlciBvcHRpb24gaXMgdGhlIGRlbGF5IGNvdWxkCitiZSBzZXQgdG8gemVyby4gQW5vdGhlciBhbHRlcm5hdGl2ZSB0byBwcmV2ZW50aW5nIEFDVyBwb3B1cHMgaXMgdG8KK2Rpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3cKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotKiA6a2JkOmBDLUNgIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQKKyogOmtiZDpgQy1jYCBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kCiAKLSogOmtiZDpgQy1EYCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCBhIGBgPj4+YGAgcHJvbXB0CisqIDprYmQ6YEMtZGAgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSBgYD4+PmBgIHByb21wdAorICAodGhpcyBpcyA6a2JkOmBDLXpgIG9uIFdpbmRvd3MpLgogCi0qIDprYmQ6YEFsdC1wYCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkCisqIDprYmQ6YEFsdC0vYCAoRXhwYW5kIHdvcmQpIGlzIGFsc28gdXNlZnVsIHRvIHJlZHVjZSB0eXBpbmcKIAotKiA6a2JkOmBBbHQtbmAgcmV0cmlldmVzIG5leHQKKyAgQ29tbWFuZCBoaXN0b3J5CiAKLSogOmtiZDpgUmV0dXJuYCB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kCisgICogOmtiZDpgQWx0LXBgIHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uCisgICAgT1MgWCB1c2UgOmtiZDpgQy1wYC4KIAotKiA6a2JkOmBBbHQtL2AgKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCBoZXJlCisgICogOmtiZDpgQWx0LW5gIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSA6a2JkOmBDLW5gLgogCi0uLiBpbmRleDo6IHNpbmdsZTogaW5kZW50YXRpb24KKyAgKiA6a2JkOmBSZXR1cm5gIHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQKIAogCiBTeW50YXggY29sb3JzCkBAIC0zMDgsMTcgKzQ2NywxNyBAQAogCiBVcG9uIHN0YXJ0dXAgd2l0aCB0aGUgYGAtc2BgIG9wdGlvbiwgSURMRSB3aWxsIGV4ZWN1dGUgdGhlIGZpbGUgcmVmZXJlbmNlZCBieQogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA6ZW52dmFyOmBJRExFU1RBUlRVUGAgb3IgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAuCi1JZGxlIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQotcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElkbGUgY2hlY2tzIGZvcgorSURMRSBmaXJzdCBjaGVja3MgZm9yIGBgSURMRVNUQVJUVVBgYDsgaWYgYGBJRExFU1RBUlRVUGBgIGlzIHByZXNlbnQgdGhlIGZpbGUKK3JlZmVyZW5jZWQgaXMgcnVuLiAgSWYgYGBJRExFU1RBUlRVUGBgIGlzIG5vdCBwcmVzZW50LCBJRExFIGNoZWNrcyBmb3IKIGBgUFlUSE9OU1RBUlRVUGBgLiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCi1jb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElkbGUKK2NvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSURMRQogc2hlbGwsIG9yIGZvciBleGVjdXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgdG8gaW1wb3J0IGNvbW1vbiBtb2R1bGVzLgogCiBJbiBhZGRpdGlvbiwgYGBUa2BgIGFsc28gbG9hZHMgYSBzdGFydHVwIGZpbGUgaWYgaXQgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB0aGUKIFRrIGZpbGUgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgYWRkaXRpb25hbCBmaWxlIGlzIGBgLklkbGUucHlgYCBhbmQgaXMKIGxvb2tlZCBmb3IgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFN0YXRlbWVudHMgaW4gdGhpcyBmaWxlIHdpbGwgYmUKIGV4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcgZnVuY3Rpb25zCi10byBiZSB1c2VkIGZyb20gSWRsZSdzIFB5dGhvbiBzaGVsbC4KK3RvIGJlIHVzZWQgZnJvbSBJRExFJ3MgUHl0aG9uIHNoZWxsLgogCiAKIENvbW1hbmQgbGluZSB1c2FnZQpAQCAtMzQ5LDMgKzUwOCw0NSBAQAogICAgdGhlIGFyZ3VtZW50cyBhcmUgc3RpbGwgYXZhaWxhYmxlIGluIGBgc3lzLmFyZ3ZgYC4KIAogCitBZGRpdGlvbmFsIGhlbHAgc291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSURMRSBpbmNsdWRlcyBhIGhlbHAgbWVudSBlbnRyeSBjYWxsZWQgIlB5dGhvbiBEb2NzIiB0aGF0IHdpbGwgb3BlbiB0aGUKK2V4dGVuc2l2ZSBzb3VyY2VzIG9mIGhlbHAsIGluY2x1ZGluZyB0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCBkb2NzLnB5dGhvbi5vcmcuCitTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZCBvciByZW1vdmVkIGZyb20gdGhlIGhlbHAgbWVudSBhdCBhbnkgdGltZSB1c2luZyB0aGUKK0NvbmZpZ3VyZSBJRExFIGRpYWxvZy4gU2VlIHRoZSBJRExFIGhlbHAgb3B0aW9uIGluIHRoZSBoZWxwIG1lbnUgb2YgSURMRSBmb3IKK21vcmUgaW5mb3JtYXRpb24uCisKKworT3RoZXIgcHJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbiBiZQorY2hhbmdlZCB2aWEgdGhlIENvbmZpZ3VyZSBJRExFIG1lbnUgb3B0aW9uLiAgQmUgc3VyZSB0byBub3RlIHRoYXQKK2tleXMgY2FuIGJlIHVzZXIgZGVmaW5lZCwgSURMRSBzaGlwcyB3aXRoIGZvdXIgYnVpbHQgaW4ga2V5IHNldHMuIEluCithZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cKK3VuZGVyIHRoZSBrZXlzIHRhYi4KKworRXh0ZW5zaW9ucworLS0tLS0tLS0tLQorCitJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCitjb25maWctZXh0ZW5zaW9ucy5kZWYgaW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAgVGhlCitkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKKworKiBGb3JtYXRQYXJhZ3JhcGgKKworKiBBdXRvRXhwYW5kCisKKyogWm9vbUhlaWdodAorCisqIFNjcmlwdEJpbmRpbmcKKworKiBDYWxsVGlwcworCisqIFBhcmVuTWF0Y2gKKworKiBBdXRvQ29tcGxldGUKKworKiBDb2RlQ29udGV4dAorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdCBiL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0CmluZGV4IDAxMjM2ZmIuLmJlMmY1OTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltYXBsaWIucnN0CkBAIC04MCw2ICs4MCwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpzc2xfY29udGV4dCogcGFyYW1ldGVyIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGNsYXNzIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KIAogVGhlIHNlY29uZCBzdWJjbGFzcyBhbGxvd3MgZm9yIGNvbm5lY3Rpb25zIGNyZWF0ZWQgYnkgYSBjaGlsZCBwcm9jZXNzOgogCkBAIC00MzcsNiArNDQxLDEwIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCiAKIC4uIG1ldGhvZDo6IElNQVA0LnN0YXR1cyhtYWlsYm94LCBuYW1lcykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wLnJzdCBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKaW5kZXggMzY0ZDgxZS4uZWUwMmMzZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXAucnN0CkBAIC0xLDYgKzEsOSBAQAogOm1vZDpgaW1wYCAtLS0gQWNjZXNzIHRoZSA6cmVmOmBpbXBvcnQgPGltcG9ydHN5c3RlbT5gIGludGVybmFscwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisuLiBkZXByZWNhdGVkOjogMy40CisgICBUaGUgOm1vZDpgaW1wYCBwYWNrYWdlIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24gaW4gZmF2b3Igb2YgOm1vZDpgaW1wb3J0bGliYC4KKwogLi4gbW9kdWxlOjogaW1wCiAgICA6c3lub3BzaXM6IEFjY2VzcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGltcG9ydCBzdGF0ZW1lbnQuCiAKQEAgLTExLDEwICsxNCw2IEBACiA6a2V5d29yZDpgaW1wb3J0YCBzdGF0ZW1lbnQuICBJdCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFuZCBmdW5jdGlvbnM6CiAKIAotLi4gbm90ZTo6Ci0gICBOZXcgcHJvZ3JhbXMgc2hvdWxkIHVzZSA6bW9kOmBpbXBvcnRsaWJgIHJhdGhlciB0aGFuIHRoaXMgbW9kdWxlLgotCi0KIC4uIGZ1bmN0aW9uOjogZ2V0X21hZ2ljKCkKIAogICAgLi4gaW5kZXg6OiBwYWlyOiBmaWxlOyBieXRlLWNvZGUKQEAgLTIyLDYgKzIxLDkgQEAKICAgIFJldHVybiB0aGUgbWFnaWMgc3RyaW5nIHZhbHVlIHVzZWQgdG8gcmVjb2duaXplIGJ5dGUtY29tcGlsZWQgY29kZSBmaWxlcwogICAgKDpmaWxlOmAucHljYCBmaWxlcykuICAoVGhpcyB2YWx1ZSBtYXkgYmUgZGlmZmVyZW50IGZvciBlYWNoIFB5dGhvbiB2ZXJzaW9uLikKIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgIFVzZSA6YXR0cjpgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3N1ZmZpeGVzKCkKIApAQCAtMTAxLDggKzEwMywxMCBAQAogICAgdXNpbmcgYSA6a2V5d29yZDpgdHJ5YCAuLi4gOmtleXdvcmQ6YGZpbmFsbHlgIHN0YXRlbWVudC4KIAogICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotICAgICAgVW5uZWVkZWQgYXMgbG9hZGVycyBzaG91bGQgYmUgdXNlZCB0byBsb2FkIG1vZHVsZXMgYW5kCi0gICAgICA6ZnVuYzpgZmluZF9tb2R1bGVgIGlzIGRlcHJlY2F0ZWQuCisgICAgICBJZiBwcmV2aW91c2x5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCA6ZnVuYzpgaW1wLmZpbmRfbW9kdWxlYCB0aGVuCisgICAgICBjYWxsIGBgbG9hZF9tb2R1bGUoKWBgIG9uIHRoZSByZXR1cm5lZCBsb2FkZXIuIElmIHlvdSB3aXNoIHRvIGxvYWQgYQorICAgICAgbW9kdWxlIGZyb20gYSBzcGVjaWZpYyBmaWxlLCB0aGVuIHVzZSBvbmUgb2YgdGhlIGZpbGUtYmFzZWQgbG9hZGVycyBmb3VuZAorICAgICAgaW4gOm1vZDpgaW1wb3J0bGliLm1hY2hpbmVyeWAuCiAKIAogLi4gZnVuY3Rpb246OiBuZXdfbW9kdWxlKG5hbWUpCkBAIC0xMTAsNiArMTE0LDkgQEAKICAgIFJldHVybiBhIG5ldyBlbXB0eSBtb2R1bGUgb2JqZWN0IGNhbGxlZCAqbmFtZSouICBUaGlzIG9iamVjdCBpcyAqbm90KiBpbnNlcnRlZAogICAgaW4gYGBzeXMubW9kdWxlc2BgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmNsYXNzOmB0eXBlcy5Nb2R1bGVUeXBlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogcmVsb2FkKG1vZHVsZSkKIApAQCAtMTc2LDYgKzE4Myw5IEBACiAgICAgICBSZWxpZXMgb24gYm90aCBgYF9fbmFtZV9fYGAgYW5kIGBgX19sb2FkZXJfX2BgIGJlaW5nIGRlZmluZWQgb24gdGhlIG1vZHVsZQogICAgICAgYmVpbmcgcmVsb2FkZWQgaW5zdGVhZCBvZiBqdXN0IGBgX19uYW1lX19gYC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpmdW5jOmBpbXBvcnRsaWIucmVsb2FkYCBpbnN0ZWFkLgorCiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBjb252ZW5pZW5jZXMgZm9yIGhhbmRsaW5nIDpwZXA6YDMxNDdgIGJ5dGUtY29tcGlsZWQKIGZpbGUgcGF0aHMuCkBAIC0yMDEsNiArMjExLDkgQEAKICAgICAgIElmIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBgYE5vbmVgYCwgdGhlbgogICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogc291cmNlX2Zyb21fY2FjaGUocGF0aCkKIApAQCAtMjE2LDE0ICsyMjksMTcgQEAKICAgICAgIFJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHdoZW4KICAgICAgIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBub3QgZGVmaW5lZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5zb3VyY2VfZnJvbV9jYWNoZWAgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IGdldF90YWcoKQogCiAgICBSZXR1cm4gdGhlIDpwZXA6YDMxNDdgIG1hZ2ljIHRhZyBzdHJpbmcgbWF0Y2hpbmcgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbidzCiAgICBtYWdpYyBudW1iZXIsIGFzIHJldHVybmVkIGJ5IDpmdW5jOmBnZXRfbWFnaWNgLgogCi0gICAuLiBub3RlOjoKLSAgICAgIFlvdSBtYXkgdXNlIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBkaXJlY3RseSBzdGFydGluZworICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgVXNlIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBkaXJlY3RseSBzdGFydGluZwogICAgICAgaW4gUHl0aG9uIDMuMy4KIAogCkBAIC0yNTEsNiArMjY3LDggQEAKICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAogICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCiAKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IGFjcXVpcmVfbG9jaygpCiAKQEAgLTI2OSw2ICsyODcsOCBAQAogICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCiAgICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogcmVsZWFzZV9sb2NrKCkKIApAQCAtMjgwLDYgKzMwMCw4IEBACiAgICB0aGUgbW9zdCBwYXJ0LiAgQSBnbG9iYWwgaW1wb3J0IGxvY2sgaXMga2VwdCBmb3Igc29tZSBjcml0aWNhbCB0YXNrcywKICAgIHN1Y2ggYXMgaW5pdGlhbGl6aW5nIHRoZSBwZXItbW9kdWxlIGxvY2tzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisKIAogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgd2l0aCBpbnRlZ2VyIHZhbHVlcywgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSwgYXJlIHVzZWQKIHRvIGluZGljYXRlIHRoZSBzZWFyY2ggcmVzdWx0IG9mIDpmdW5jOmBmaW5kX21vZHVsZWAuCkBAIC0zNDUsNiArMzY3LDkgQEAKICAgICAgIGBgTm9uZWBgIGlzIGluc2VydGVkIGludG8gYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIGluc3RlYWQgb2YgYW4KICAgICAgIGluc3RhbmNlIG9mIDpjbGFzczpgTnVsbEltcG9ydGVyYC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgSW5zZXJ0IGBgTm9uZWBgIGludG8gYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIGluc3RlYWQuCisKIAogLi4gX2V4YW1wbGVzLWltcDoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKaW5kZXggZWZkMDI3Yi4uMTc3ZjE1YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CkBAIC05MCw3ICs5MCw3IEBACiAKICAgIEZpbmQgdGhlIGxvYWRlciBmb3IgYSBtb2R1bGUsIG9wdGlvbmFsbHkgd2l0aGluIHRoZSBzcGVjaWZpZWQgKnBhdGgqLiBJZiB0aGUKICAgIG1vZHVsZSBpcyBpbiA6YXR0cjpgc3lzLm1vZHVsZXNgLCB0aGVuIGBgc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfX2BgIGlzCi0gICByZXR1cm5lZCAodW5sZXNzIHRoZSBsb2FkZXIgd291bGQgYmUgYGBOb25lYGAsIGluIHdoaWNoIGNhc2UKKyAgIHJldHVybmVkICh1bmxlc3MgdGhlIGxvYWRlciB3b3VsZCBiZSBgYE5vbmVgYCBvciBpcyBub3Qgc2V0LCBpbiB3aGljaCBjYXNlCiAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQpLiBPdGhlcndpc2UgYSBzZWFyY2ggdXNpbmcgOmF0dHI6YHN5cy5tZXRhX3BhdGhgCiAgICBpcyBkb25lLiBgYE5vbmVgYCBpcyByZXR1cm5lZCBpZiBubyBsb2FkZXIgaXMgZm91bmQuCiAKQEAgLTk5LDYgKzk5LDEyIEBACiAgICB3aWxsIG5lZWQgdG8gaW1wb3J0IGFsbCBwYXJlbnQgcGFja2FnZXMgb2YgdGhlIHN1Ym1vZHVsZSBhbmQgdXNlIHRoZSBjb3JyZWN0CiAgICBhcmd1bWVudCB0byAqcGF0aCouCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBfX2xvYWRlcl9fYGAgaXMgbm90IHNldCwgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAsIGp1c3QgbGlrZSB3aGVuIHRoZQorICAgICAgYXR0cmlidXRlIGlzIHNldCB0byBgYE5vbmVgYC4KKwogLi4gZnVuY3Rpb246OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKICAgIEludmFsaWRhdGUgdGhlIGludGVybmFsIGNhY2hlcyBvZiBmaW5kZXJzIHN0b3JlZCBhdApAQCAtMTA5LDYgKzExNSw3NCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gZnVuY3Rpb246OiByZWxvYWQobW9kdWxlKQorCisgICBSZWxvYWQgYSBwcmV2aW91c2x5IGltcG9ydGVkICptb2R1bGUqLiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBtb2R1bGUgb2JqZWN0LAorICAgc28gaXQgbXVzdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGltcG9ydGVkIGJlZm9yZS4gIFRoaXMgaXMgdXNlZnVsIGlmIHlvdQorICAgaGF2ZSBlZGl0ZWQgdGhlIG1vZHVsZSBzb3VyY2UgZmlsZSB1c2luZyBhbiBleHRlcm5hbCBlZGl0b3IgYW5kIHdhbnQgdG8gdHJ5CisgICBvdXQgdGhlIG5ldyB2ZXJzaW9uIHdpdGhvdXQgbGVhdmluZyB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgVGhlIHJldHVybiB2YWx1ZQorICAgaXMgdGhlIG1vZHVsZSBvYmplY3QgKHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQgaWYgcmUtaW1wb3J0aW5nIGNhdXNlcyBhCisgICBkaWZmZXJlbnQgb2JqZWN0IHRvIGJlIHBsYWNlZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgKS4KKworICAgV2hlbiA6ZnVuYzpgcmVsb2FkYCBpcyBleGVjdXRlZDoKKworICAgKiBQeXRob24gbW9kdWxlcycgY29kZSBpcyByZWNvbXBpbGVkIGFuZCB0aGUgbW9kdWxlLWxldmVsIGNvZGUgcmUtZXhlY3V0ZWQsCisgICAgIGRlZmluaW5nIGEgbmV3IHNldCBvZiBvYmplY3RzIHdoaWNoIGFyZSBib3VuZCB0byBuYW1lcyBpbiB0aGUgbW9kdWxlJ3MKKyAgICAgZGljdGlvbmFyeSBieSByZXVzaW5nIHRoZSA6dGVybTpgbG9hZGVyYCB3aGljaCBvcmlnaW5hbGx5IGxvYWRlZCB0aGUKKyAgICAgbW9kdWxlLiAgVGhlIGBgaW5pdGBgIGZ1bmN0aW9uIG9mIGV4dGVuc2lvbiBtb2R1bGVzIGlzIG5vdCBjYWxsZWQgYSBzZWNvbmQKKyAgICAgdGltZS4KKworICAgKiBBcyB3aXRoIGFsbCBvdGhlciBvYmplY3RzIGluIFB5dGhvbiB0aGUgb2xkIG9iamVjdHMgYXJlIG9ubHkgcmVjbGFpbWVkCisgICAgIGFmdGVyIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcCB0byB6ZXJvLgorCisgICAqIFRoZSBuYW1lcyBpbiB0aGUgbW9kdWxlIG5hbWVzcGFjZSBhcmUgdXBkYXRlZCB0byBwb2ludCB0byBhbnkgbmV3IG9yCisgICAgIGNoYW5nZWQgb2JqZWN0cy4KKworICAgKiBPdGhlciByZWZlcmVuY2VzIHRvIHRoZSBvbGQgb2JqZWN0cyAoc3VjaCBhcyBuYW1lcyBleHRlcm5hbCB0byB0aGUgbW9kdWxlKSBhcmUKKyAgICAgbm90IHJlYm91bmQgdG8gcmVmZXIgdG8gdGhlIG5ldyBvYmplY3RzIGFuZCBtdXN0IGJlIHVwZGF0ZWQgaW4gZWFjaCBuYW1lc3BhY2UKKyAgICAgd2hlcmUgdGhleSBvY2N1ciBpZiB0aGF0IGlzIGRlc2lyZWQuCisKKyAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBvdGhlciBjYXZlYXRzOgorCisgICBJZiBhIG1vZHVsZSBpcyBzeW50YWN0aWNhbGx5IGNvcnJlY3QgYnV0IGl0cyBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGZpcnN0CisgICA6a2V5d29yZDpgaW1wb3J0YCBzdGF0ZW1lbnQgZm9yIGl0IGRvZXMgbm90IGJpbmQgaXRzIG5hbWUgbG9jYWxseSwgYnV0IGRvZXMKKyAgIHN0b3JlIGEgKHBhcnRpYWxseSBpbml0aWFsaXplZCkgbW9kdWxlIG9iamVjdCBpbiBgYHN5cy5tb2R1bGVzYGAuICBUbyByZWxvYWQKKyAgIHRoZSBtb2R1bGUgeW91IG11c3QgZmlyc3QgOmtleXdvcmQ6YGltcG9ydGAgaXQgYWdhaW4gKHRoaXMgd2lsbCBiaW5kIHRoZSBuYW1lCisgICB0byB0aGUgcGFydGlhbGx5IGluaXRpYWxpemVkIG1vZHVsZSBvYmplY3QpIGJlZm9yZSB5b3UgY2FuIDpmdW5jOmByZWxvYWRgIGl0LgorCisgICBXaGVuIGEgbW9kdWxlIGlzIHJlbG9hZGVkLCBpdHMgZGljdGlvbmFyeSAoY29udGFpbmluZyB0aGUgbW9kdWxlJ3MgZ2xvYmFsCisgICB2YXJpYWJsZXMpIGlzIHJldGFpbmVkLiAgUmVkZWZpbml0aW9ucyBvZiBuYW1lcyB3aWxsIG92ZXJyaWRlIHRoZSBvbGQKKyAgIGRlZmluaXRpb25zLCBzbyB0aGlzIGlzIGdlbmVyYWxseSBub3QgYSBwcm9ibGVtLiAgSWYgdGhlIG5ldyB2ZXJzaW9uIG9mIGEKKyAgIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgYSBuYW1lIHRoYXQgd2FzIGRlZmluZWQgYnkgdGhlIG9sZCB2ZXJzaW9uLCB0aGUgb2xkCisgICBkZWZpbml0aW9uIHJlbWFpbnMuICBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgdG8gdGhlIG1vZHVsZSdzIGFkdmFudGFnZSBpZiBpdAorICAgbWFpbnRhaW5zIGEgZ2xvYmFsIHRhYmxlIG9yIGNhY2hlIG9mIG9iamVjdHMgLS0tIHdpdGggYSA6a2V5d29yZDpgdHJ5YAorICAgc3RhdGVtZW50IGl0IGNhbiB0ZXN0IGZvciB0aGUgdGFibGUncyBwcmVzZW5jZSBhbmQgc2tpcCBpdHMgaW5pdGlhbGl6YXRpb24gaWYKKyAgIGRlc2lyZWQ6OgorCisgICAgICB0cnk6CisgICAgICAgICAgY2FjaGUKKyAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgY2FjaGUgPSB7fQorCisgICBJdCBpcyBsZWdhbCB0aG91Z2ggZ2VuZXJhbGx5IG5vdCB2ZXJ5IHVzZWZ1bCB0byByZWxvYWQgYnVpbHQtaW4gb3IKKyAgIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzICh0aGlzIGlzIG5vdCB0cnVlIGZvciBlLmcuIDptb2Q6YHN5c2AsCisgICA6bW9kOmBfX21haW5fX2AsIDptb2Q6YGJ1aWx0aW5zYCBhbmQgb3RoZXIga2V5IG1vZHVsZXMgd2hlcmUgcmVsb2FkaW5nIGlzCisgICBmcm93bmVkIHVwb24pLiBJbiBtYW55IGNhc2VzLCBob3dldmVyLCBleHRlbnNpb24gbW9kdWxlcyBhcmUgbm90IGRlc2lnbmVkIHRvCisgICBiZSBpbml0aWFsaXplZCBtb3JlIHRoYW4gb25jZSwgYW5kIG1heSBmYWlsIGluIGFyYml0cmFyeSB3YXlzIHdoZW4gcmVsb2FkZWQuCisKKyAgIElmIGEgbW9kdWxlIGltcG9ydHMgb2JqZWN0cyBmcm9tIGFub3RoZXIgbW9kdWxlIHVzaW5nIDprZXl3b3JkOmBmcm9tYCAuLi4KKyAgIDprZXl3b3JkOmBpbXBvcnRgIC4uLiwgY2FsbGluZyA6ZnVuYzpgcmVsb2FkYCBmb3IgdGhlIG90aGVyIG1vZHVsZSBkb2VzIG5vdAorICAgcmVkZWZpbmUgdGhlIG9iamVjdHMgaW1wb3J0ZWQgZnJvbSBpdCAtLS0gb25lIHdheSBhcm91bmQgdGhpcyBpcyB0bworICAgcmUtZXhlY3V0ZSB0aGUgOmtleXdvcmQ6YGZyb21gIHN0YXRlbWVudCwgYW5vdGhlciBpcyB0byB1c2UgOmtleXdvcmQ6YGltcG9ydGAKKyAgIGFuZCBxdWFsaWZpZWQgbmFtZXMgKCptb2R1bGUubmFtZSopIGluc3RlYWQuCisKKyAgIElmIGEgbW9kdWxlIGluc3RhbnRpYXRlcyBpbnN0YW5jZXMgb2YgYSBjbGFzcywgcmVsb2FkaW5nIHRoZSBtb2R1bGUgdGhhdAorICAgZGVmaW5lcyB0aGUgY2xhc3MgZG9lcyBub3QgYWZmZWN0IHRoZSBtZXRob2QgZGVmaW5pdGlvbnMgb2YgdGhlIGluc3RhbmNlcyAtLS0KKyAgIHRoZXkgY29udGludWUgdG8gdXNlIHRoZSBvbGQgY2xhc3MgZGVmaW5pdGlvbi4gIFRoZSBzYW1lIGlzIHRydWUgZm9yIGRlcml2ZWQKKyAgIGNsYXNzZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIDptb2Q6YGltcG9ydGxpYi5hYmNgIC0tIEFic3RyYWN0IGJhc2UgY2xhc3NlcyByZWxhdGVkIHRvIGltcG9ydAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzIsOCArMjA2LDYgQEAKICAgICAgICAgICAgICAgICstLSBFeGVjdXRpb25Mb2FkZXIgLS0rCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tIEZpbGVMb2FkZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gU291cmNlTG9hZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gUHlMb2FkZXIgKGRlcHJlY2F0ZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gUHlQeWNMb2FkZXIgKGRlcHJlY2F0ZWQpCiAKIAogLi4gY2xhc3M6OiBGaW5kZXIKQEAgLTE0OSw2ICsyMjEsMTAgQEAKICAgICAgIG1vZHVsZS4gIE9yaWdpbmFsbHkgc3BlY2lmaWVkIGluIDpwZXA6YDMwMmAsIHRoaXMgbWV0aG9kIHdhcyBtZWFudAogICAgICAgZm9yIHVzZSBpbiA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAgYW5kIGluIHRoZSBwYXRoLWJhc2VkIGltcG9ydCBzdWJzeXN0ZW0uCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgTm9uZWBgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKIAogLi4gY2xhc3M6OiBNZXRhUGF0aEZpbmRlcgogCkBAIC0xNjUsMTIgKzI0MSwxOSBAQAogICAgICAgd2lsbCBiZSB0aGUgdmFsdWUgb2YgOmF0dHI6YF9fcGF0aF9fYCBmcm9tIHRoZSBwYXJlbnQKICAgICAgIHBhY2thZ2UuIElmIGEgbG9hZGVyIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgTm9uZWBgIHdoZW4gY2FsbGVkIGluc3RlYWQgb2YgcmFpc2luZworICAgICAgICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgIC4uIG1ldGhvZDo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgICAgQW4gb3B0aW9uYWwgbWV0aG9kIHdoaWNoLCB3aGVuIGNhbGxlZCwgc2hvdWxkIGludmFsaWRhdGUgYW55IGludGVybmFsCiAgICAgICBjYWNoZSB1c2VkIGJ5IHRoZSBmaW5kZXIuIFVzZWQgYnkgOmZ1bmM6YGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlc2AKICAgICAgIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjYWNoZXMgb2YgYWxsIGZpbmRlcnMgb24gOmRhdGE6YHN5cy5tZXRhX3BhdGhgLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIGBgTm90SW1wbGVtZW50ZWRgYC4KKwogCiAuLiBjbGFzczo6IFBhdGhFbnRyeUZpbmRlcgogCkBAIC0xNzgsNyArMjYxLDcgQEAKICAgIGl0IGJlYXJzIHNvbWUgc2ltaWxhcml0aWVzIHRvIDpjbGFzczpgTWV0YVBhdGhGaW5kZXJgLCBgYFBhdGhFbnRyeUZpbmRlcmBgCiAgICBpcyBtZWFudCBmb3IgdXNlIG9ubHkgd2l0aGluIHRoZSBwYXRoLWJhc2VkIGltcG9ydCBzdWJzeXN0ZW0gcHJvdmlkZWQKICAgIGJ5IDpjbGFzczpgUGF0aEZpbmRlcmAuIFRoaXMgQUJDIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBGaW5kZXJgIGZvcgotICAgY29tcGF0aWJpbGl0eS4KKyAgIGNvbXBhdGliaWxpdHkgcmVhc29ucyBvbmx5LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtMTkwLDkgKzI3MywxMiBAQAogICAgICAgcGFja2FnZS4gVGhlIGxvYWRlciBtYXkgYmUgYGBOb25lYGAgd2hpbGUgc3BlY2lmeWluZyBgYHBvcnRpb25gYCB0bwogICAgICAgc2lnbmlmeSB0aGUgY29udHJpYnV0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgdG8gYSBuYW1lc3BhY2UKICAgICAgIHBhY2thZ2UuIEFuIGVtcHR5IGxpc3QgY2FuIGJlIHVzZWQgZm9yIGBgcG9ydGlvbmBgIHRvIHNpZ25pZnkgdGhlIGxvYWRlcgotICAgICAgaXMgbm90IHBhcnQgb2YgYSBwYWNrYWdlLiBJZiBgYGxvYWRlcmBgIGlzIGBgTm9uZWBgIGFuZCBgYHBvcnRpb25gYCBpcwotICAgICAgdGhlIGVtcHR5IGxpc3QgdGhlbiBubyBsb2FkZXIgb3IgbG9jYXRpb24gZm9yIGEgbmFtZXNwYWNlIHBhY2thZ2Ugd2VyZQotICAgICAgZm91bmQgKGkuZS4gZmFpbHVyZSB0byBmaW5kIGFueXRoaW5nIGZvciB0aGUgbW9kdWxlKS4KKyAgICAgIGlzIG5vdCBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kCisgICAgICBgYHBvcnRpb25gYCBpcyB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UKKyAgICAgIHBhY2thZ2Ugd2VyZSBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYChOb25lLCBbXSlgYCBpbnN0ZWFkIG9mIHJhaXNpbmcgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKICAgIC4uIG1ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCkBAIC0yMjQsMTIgKzMxMCwxMSBAQAogICAgICAgICBmcm9tIHRoZSBpbXBvcnQuIElmIHRoZSBsb2FkZXIgaW5zZXJ0ZWQgYSBtb2R1bGUgYW5kIHRoZSBsb2FkIGZhaWxzLCBpdAogICAgICAgICBtdXN0IGJlIHJlbW92ZWQgYnkgdGhlIGxvYWRlciBmcm9tIDpkYXRhOmBzeXMubW9kdWxlc2A7IG1vZHVsZXMgYWxyZWFkeQogICAgICAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyIGJlZ2FuIGV4ZWN1dGlvbiBzaG91bGQgYmUgbGVmdAotICAgICAgICBhbG9uZS4gVGhlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGhhbmRsZXMKLSAgICAgICAgYWxsIG9mIHRoZXNlIGRldGFpbHMuCisgICAgICAgIGFsb25lIChzZWUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCkuCiAKICAgICAgICAgVGhlIGxvYWRlciBzaG91bGQgc2V0IHNldmVyYWwgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlLgogICAgICAgICAoTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gY2hhbmdlIHdoZW4gYSBtb2R1bGUgaXMKLSAgICAgICAgcmVsb2FkZWQuKQorICAgICAgICByZWxvYWRlZCk6CiAKICAgICAgICAgLSA6YXR0cjpgX19uYW1lX19gCiAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLgpAQCAtMjQ5LDIwICszMzQsMjggQEAKICAgICAgICAgLSA6YXR0cjpgX19wYWNrYWdlX19gCiAgICAgICAgICAgICBUaGUgcGFyZW50IHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUvcGFja2FnZS4gSWYgdGhlIG1vZHVsZSBpcwogICAgICAgICAgICAgdG9wLWxldmVsIHRoZW4gaXQgaGFzIGEgdmFsdWUgb2YgdGhlIGVtcHR5IHN0cmluZy4gVGhlCi0gICAgICAgICAgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2VgIGRlY29yYXRvciBjYW4gaGFuZGxlIHRoZSBkZXRhaWxzCi0gICAgICAgICAgICBmb3IgOmF0dHI6YF9fcGFja2FnZV9fYC4KKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgogCiAgICAgICAgIC0gOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgotICAgICAgICAgICAgKFRoaXMgaXMgbm90IHNldCBieSB0aGUgYnVpbHQtaW4gaW1wb3J0IG1hY2hpbmVyeSwKLSAgICAgICAgICAgIGJ1dCBpdCBzaG91bGQgYmUgc2V0IHdoZW5ldmVyIGEgOnRlcm06YGxvYWRlcmAgaXMgdXNlZC4pCisgICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLiBUaGUKKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YEltcG9ydEVycm9yYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAgLi4gbWV0aG9kOjogbW9kdWxlX3JlcHIobW9kdWxlKQogCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlCi0gICAgICAgIGdpdmVuIG1vZHVsZSdzIHJlcHIsIGFzIGEgc3RyaW5nLgorICAgICAgICBBbiBvcHRpb25hbCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBjYWxjdWxhdGVzIGFuZCByZXR1cm5zIHRoZQorICAgICAgICBnaXZlbiBtb2R1bGUncyByZXByLCBhcyBhIHN0cmluZy4gVGhlIG1vZHVsZSB0eXBlJ3MgZGVmYXVsdCByZXByKCkgd2lsbAorICAgICAgICB1c2UgdGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCBhcyBhcHByb3ByaWF0ZS4KIAotICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6IDMuMworICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBNYWRlIG9wdGlvbmFsIGluc3RlYWQgb2YgYW4gYWJzdHJhY3RtZXRob2QuCiAKIAogLi4gY2xhc3M6OiBSZXNvdXJjZUxvYWRlcgpAQCAtMjgxLDYgKzM3NCw5IEBACiAgICAgICAgIGJlIGZvdW5kLiBUaGUgKnBhdGgqIGlzIGV4cGVjdGVkIHRvIGJlIGNvbnN0cnVjdGVkIHVzaW5nIGEgbW9kdWxlJ3MKICAgICAgICAgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUgb3IgYW4gaXRlbSBmcm9tIGEgcGFja2FnZSdzIDphdHRyOmBfX3BhdGhfX2AuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YElPRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKIAogLi4gY2xhc3M6OiBJbnNwZWN0TG9hZGVyCiAKQEAgLTI4OSwxNCArMzg1LDIxIEBACiAKICAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKIAotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIHRoZSA6Y2xhc3M6YGNvZGVgIG9iamVjdCBmb3IgYSBtb2R1bGUuCi0gICAgICAgIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgaGF2ZSBhIGNvZGUgb2JqZWN0CisgICAgICAgIFJldHVybiB0aGUgY29kZSBvYmplY3QgZm9yIGEgbW9kdWxlLgorICAgICAgICBgYE5vbmVgYCBzaG91bGQgYmUgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgY29kZSBvYmplY3QKICAgICAgICAgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4gIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgbG9hZGVyIGNhbm5vdAogICAgICAgICBmaW5kIHRoZSByZXF1ZXN0ZWQgbW9kdWxlLgogCisgICAgICAgIC4uIG5vdGU6OgorICAgICAgICAgICBXaGlsZSB0aGUgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGl0IGlzIHN1Z2dlc3RlZCB0aGF0CisgICAgICAgICAgIGl0IGJlIG92ZXJyaWRkZW4gaWYgcG9zc2libGUgZm9yIHBlcmZvcm1hbmNlLgorCiAgICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgICAgc2luZ2xlOiB1bml2ZXJzYWwgbmV3bGluZXM7IGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlIG1ldGhvZAogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIE5vIGxvbmdlciBhYnN0cmFjdCBhbmQgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4KKwogICAgIC4uIG1ldGhvZDo6IGdldF9zb3VyY2UoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiB0aGUgc291cmNlIG9mIGEgbW9kdWxlLiBJdCBpcyByZXR1cm5lZCBhcwpAQCAtMzA1LDEyICs0MDgsMzMgQEAKICAgICAgICAgaWYgbm8gc291cmNlIGlzIGF2YWlsYWJsZSAoZS5nLiBhIGJ1aWx0LWluIG1vZHVsZSkuIFJhaXNlcwogICAgICAgICA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBjYW5ub3QgZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZC4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgICAuLiBtZXRob2Q6OiBpc19wYWNrYWdlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gYSB0cnVlIHZhbHVlIGlmIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBhCiAgICAgICAgIGZhbHNlIHZhbHVlIG90aGVyd2lzZS4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUKICAgICAgICAgOnRlcm06YGxvYWRlcmAgY2Fubm90IGZpbmQgdGhlIG1vZHVsZS4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKKyAgICAuLiBtZXRob2Q6OiBzb3VyY2VfdG9fY29kZShkYXRhLCBwYXRoPSc8c3RyaW5nPicpCisKKyAgICAgICAgQ3JlYXRlIGEgY29kZSBvYmplY3QgZnJvbSBQeXRob24gc291cmNlLgorCisgICAgICAgIFRoZSAqZGF0YSogYXJndW1lbnQgY2FuIGJlIHdoYXRldmVyIHRoZSA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24KKyAgICAgICAgc3VwcG9ydHMgKGkuZS4gc3RyaW5nIG9yIGJ5dGVzKS4gVGhlICpwYXRoKiBhcmd1bWVudCBzaG91bGQgYmUKKyAgICAgICAgdGhlICJwYXRoIiB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgb3JpZ2luYXRlZCBmcm9tLCB3aGljaCBjYW4gYmUgYW4KKyAgICAgICAgYWJzdHJhY3QgY29uY2VwdCAoZS5nLiBsb2NhdGlvbiBpbiBhIHppcCBmaWxlKS4KKworICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorCiAKIC4uIGNsYXNzOjogRXhlY3V0aW9uTG9hZGVyCiAKQEAgLTMyOCw2ICs0NTIsOSBAQAogICAgICAgICB0aGUgc291cmNlIGZpbGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGJ5dGVjb2RlIHdhcyB1c2VkIHRvIGxvYWQgdGhlCiAgICAgICAgIG1vZHVsZS4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgSW1wb3J0RXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKIAogLi4gY2xhc3M6OiBGaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCkBAIC0zNTgsNyArNDg1LDcgQEAKIAogICAgLi4gbWV0aG9kOjogZ2V0X2RhdGEocGF0aCkKIAotICAgICAgUmV0dXJucyB0aGUgb3BlbiwgYmluYXJ5IGZpbGUgZm9yICpwYXRoKi4KKyAgICAgIFJlYWRzICpwYXRoKiBhcyBhIGJpbmFyeSBmaWxlIGFuZCByZXR1cm5zIHRoZSBieXRlcyBmcm9tIGl0LgogCiAKIC4uIGNsYXNzOjogU291cmNlTG9hZGVyCkBAIC0zNzMsNyArNTAwLDggQEAKICAgICAgICAgICBsb2FkaW5nIGlzIG5vdCBzdXBwb3J0ZWQuCiAKICAgICBUaGUgYWJzdHJhY3QgbWV0aG9kcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgYXJlIHRvIGFkZCBvcHRpb25hbCBieXRlY29kZQotICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIGNhdXNlcyB0aGUgbG9hZGVyIHRvCisgICAgZmlsZSBzdXBwb3J0LiBOb3QgaW1wbGVtZW50aW5nIHRoZXNlIG9wdGlvbmFsIG1ldGhvZHMgKG9yIGNhdXNpbmcgdGhlbSB0bworICAgIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgKSBjYXVzZXMgdGhlIGxvYWRlciB0bwogICAgIG9ubHkgd29yayB3aXRoIHNvdXJjZSBjb2RlLiBJbXBsZW1lbnRpbmcgdGhlIG1ldGhvZHMgYWxsb3dzIHRoZSBsb2FkZXIgdG8KICAgICB3b3JrIHdpdGggc291cmNlICphbmQqIGJ5dGVjb2RlIGZpbGVzOyBpdCBkb2VzIG5vdCBhbGxvdyBmb3IgKnNvdXJjZWxlc3MqCiAgICAgbG9hZGluZyB3aGVyZSBvbmx5IGJ5dGVjb2RlIGlzIHByb3ZpZGVkLiAgQnl0ZWNvZGUgZmlsZXMgYXJlIGFuCkBAIC0zOTAsMTAgKzUxOCwxMyBAQAogICAgICAgICAtIGBgJ3NpemUnYGAgKG9wdGlvbmFsKTogdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEFueSBvdGhlciBrZXlzIGluIHRoZSBkaWN0aW9uYXJ5IGFyZSBpZ25vcmVkLCB0byBhbGxvdyBmb3IgZnV0dXJlCi0gICAgICAgIGV4dGVuc2lvbnMuCisgICAgICAgIGV4dGVuc2lvbnMuIElmIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLCA6ZXhjOmBJT0Vycm9yYCBpcyByYWlzZWQuCiAKICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2UgOmV4YzpgSU9FcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgIC4uIG1ldGhvZDo6IHBhdGhfbXRpbWUocGF0aCkKIAogICAgICAgICBPcHRpb25hbCBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZQpAQCAtNDAyLDcgKzUzMywxMCBAQAogICAgICAgICAuLiBkZXByZWNhdGVkOjogMy4zCiAgICAgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIDptZXRoOmBwYXRoX3N0YXRzYC4gIFlvdSBkb24ndAogICAgICAgICAgICBoYXZlIHRvIGltcGxlbWVudCBpdCwgYnV0IGl0IGlzIHN0aWxsIGF2YWlsYWJsZSBmb3IgY29tcGF0aWJpbGl0eQotICAgICAgICAgICBwdXJwb3Nlcy4KKyAgICAgICAgICAgcHVycG9zZXMuIFJhaXNlIDpleGM6YElPRXJyb3JgIGlmIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgorCisgICAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgICBSYWlzZSA6ZXhjOmBJT0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAgLi4gbWV0aG9kOjogc2V0X2RhdGEocGF0aCwgZGF0YSkKIApAQCAtNDE0LDYgKzU0OCw5IEBACiAgICAgICAgICg6YXR0cjpgZXJybm8uRUFDQ0VTYC86ZXhjOmBQZXJtaXNzaW9uRXJyb3JgKSwgZG8gbm90IHByb3BhZ2F0ZSB0aGUKICAgICAgICAgZXhjZXB0aW9uLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIE5vIGxvbmdlciByYWlzZXMgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2hlbiBjYWxsZWQuCisKICAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKIAogICAgICAgICBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgSW5zcGVjdExvYWRlci5nZXRfY29kZWAuCkBAIC00MzUsMTQyICs1NzIsNiBAQAogICAgICAgICBpdHNlbGYgZG9lcyBub3QgZW5kIGluIGBgX19pbml0X19gYC4KIAogCi0uLiBjbGFzczo6IFB5TG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbQotICAgIDpjbGFzczpgRXhlY3V0aW9uTG9hZGVyYCBhbmQKLSAgICA6Y2xhc3M6YFJlc291cmNlTG9hZGVyYCBkZXNpZ25lZCB0byBlYXNlIHRoZSBsb2FkaW5nIG9mCi0gICAgUHl0aG9uIHNvdXJjZSBtb2R1bGVzIChieXRlY29kZSBpcyBub3QgaGFuZGxlZDsgc2VlCi0gICAgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGZvciBhIHNvdXJjZS9ieXRlY29kZSBBQkMpLiBBIHN1YmNsYXNzCi0gICAgaW1wbGVtZW50aW5nIHRoaXMgQUJDIHdpbGwgb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9zaW5nIGhvdyB0aGUgc291cmNlCi0gICAgY29kZSBpcyBzdG9yZWQ7IGFsbCBvdGhlciBkZXRhaWxzIGZvciBsb2FkaW5nIFB5dGhvbiBzb3VyY2UgY29kZSB3aWxsIGJlCi0gICAgaGFuZGxlZCBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIGtleSBtZXRob2RzLgotCi0gICAgLi4gZGVwcmVjYXRlZDo6IDMuMgotICAgICAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCBpcwotICAgICAgICBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4gU2VlIGJlbG93IGZvciBob3cgdG8gY3JlYXRlIGEKLSAgICAgICAgc3ViY2xhc3MgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzLgotCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgcmVxdWlyZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20KLSAgICB0byBpbXBsZW1lbnQgYSBzdWJjbGFzcyB0aGF0IHdpbGwgd29yayB3aXRoIFB5dGhvbiAzLjEgb253YXJkcyAobWFrZSBzdXJlCi0gICAgdG8gaW1wbGVtZW50IDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCk6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuIiIiCi0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgaXNfcGFja2FnZSBieSBsb29raW5nIGZvciBhbiBfX2luaXRfXyBmaWxlCi0gICAgICAgICAgICAgICAgbmFtZSBhcyByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUuIiIiCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0KLSAgICAuLiBtZXRob2Q6OiBzb3VyY2VfcGF0aChmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYQotICAgICAgICBtb2R1bGUuIFNob3VsZCByZXR1cm4gYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0Ci0gICAgICAgIHJlbGllcyBvbiA6bWV0aDpgc291cmNlX3BhdGhgLiBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMKLSAgICAgICAgYGBOb25lYGAsIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAotICAgICAgICB0aGF0IGxvYWRzIFB5dGhvbiBzb3VyY2UgY29kZS4gQWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHRoZQotICAgICAgICBhYnN0cmFjdCBtZXRob2RzIHJlcXVpcmVkIGJ5IHRoaXMgQUJDLiBUaGUgb25seSBwZXJ0aW5lbnQgYXNzdW1wdGlvbgotICAgICAgICBtYWRlIGJ5IHRoaXMgbWV0aG9kIGlzIHRoYXQgd2hlbiBsb2FkaW5nIGEgcGFja2FnZQotICAgICAgICA6YXR0cjpgX19wYXRoX19gIGlzIHNldCB0byBgYFtvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pXWBgLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9jb2RlYCB0aGF0IGNyZWF0ZXMgY29kZSBvYmplY3RzCi0gICAgICAgIGZyb20gUHl0aG9uIHNvdXJjZSBjb2RlLCBieSByZXF1ZXN0aW5nIHRoZSBzb3VyY2UgY29kZSAodXNpbmcKLSAgICAgICAgOm1ldGg6YHNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGdldF9kYXRhYCkgYW5kIGNvbXBpbGluZyBpdCB3aXRoIHRoZQotICAgICAgICBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYC4gVXNlcwotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlci5nZXRfZGF0YWAgYW5kIDptZXRoOmBzb3VyY2VfcGF0aGAKLSAgICAgICAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEl0IHRyaWVzIHRvIGd1ZXNzIHRoZSBzb3VyY2UgZW5jb2RpbmcgdXNpbmcKLSAgICAgICAgOmZ1bmM6YHRva2VuaXplLmRldGVjdF9lbmNvZGluZ2AuCi0KLQotLi4gY2xhc3M6OiBQeVB5Y0xvYWRlcgotCi0gICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBQeUxvYWRlcmAuCi0gICAgVGhpcyBBQkMgaXMgbWVhbnQgdG8gaGVscCBpbiBjcmVhdGluZyBsb2FkZXJzIHRoYXQgc3VwcG9ydCBib3RoIFB5dGhvbgotICAgIHNvdXJjZSBhbmQgYnl0ZWNvZGUuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIHRvCi0gICAgICAgIHByb3Blcmx5IHN1cHBvcnQgOnBlcDpgMzE0N2AuIElmIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aAotICAgICAgICBQeXRob24gMy4xLCBpbXBsZW1lbnQgYm90aCA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIDpjbGFzczpgUHlMb2FkZXJgOwotICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGRvIHNvIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgICAgICAgOmNsYXNzOmBQeUxvYWRlcmAuIERvIG5vdGUgdGhhdCB0aGlzIHNvbHV0aW9uIHdpbGwgbm90IHN1cHBvcnQKLSAgICAgICAgc291cmNlbGVzcy9ieXRlY29kZS1vbmx5IGxvYWRpbmc7IG9ubHkgc291cmNlICphbmQqIGJ5dGVjb2RlIGxvYWRpbmcuCi0KLSAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgIFVwZGF0ZWQgdG8gcGFyc2UgKGJ1dCBub3QgdXNlKSB0aGUgbmV3IHNvdXJjZSBzaXplIGZpZWxkIGluIGJ5dGVjb2RlCi0gICAgICAgZmlsZXMgd2hlbiByZWFkaW5nIGFuZCB0byB3cml0ZSBvdXQgdGhlIGZpZWxkIHByb3Blcmx5IHdoZW4gd3JpdGluZy4KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9tdGltZShmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2UKLSAgICAgICAgY29kZSBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHNob3VsZCBiZSBhbgotICAgICAgICBpbnRlZ2VyLiBJZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZSwgcmV0dXJuIGBgTm9uZWBgLiBJZiB0aGUKLSAgICAgICAgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCB0aGVuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiBieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBieXRlY29kZSBmb3IgdGhlCi0gICAgICAgIHNwZWNpZmllZCBtb2R1bGUsIGlmIGl0IGV4aXN0cy4gSXQgcmV0dXJucyBgYE5vbmVgYAotICAgICAgICBpZiBubyBieXRlY29kZSBleGlzdHMgKHlldCkuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWAgdGhhdCByZWxpZXMgb24KLSAgICAgICAgOm1ldGg6YFB5TG9hZGVyLnNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgLgotICAgICAgICBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGVuIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuCi0gICAgICAgIEVsc2UgaWYgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGF0IHBhdGggd2lsbCBiZQotICAgICAgICByZXR1cm5lZC4gSWYgYSBwYXRoIGlzIG5vdCBhdmFpbGFibGUgZnJvbSBib3RoIG1ldGhvZHMsCi0gICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiB3cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgYnl0ZWNvZGUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIGhhcyB0aGUgbG9hZGVyIHdyaXRlICpieXRlY29kZSogZm9yIGZ1dHVyZQotICAgICAgICB1c2UuIElmIHRoZSBieXRlY29kZSBpcyB3cml0dGVuLCByZXR1cm4gYGBUcnVlYGAuIFJldHVybgotICAgICAgICBgYEZhbHNlYGAgaWYgdGhlIGJ5dGVjb2RlIGNvdWxkIG5vdCBiZSB3cml0dGVuLiBUaGlzIG1ldGhvZAotICAgICAgICBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiA6ZGF0YTpgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGVgIGlzIHRydWUuCi0gICAgICAgIFRoZSAqYnl0ZWNvZGUqIGFyZ3VtZW50IHNob3VsZCBiZSBhIGJ5dGVzIHN0cmluZyBvciBieXRlcyBhcnJheS4KLQotCiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YCAtLSBJbXBvcnRlcnMgYW5kIHBhdGggaG9va3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02ODYsNiArNjg3LDEwIEBACiAgICAgIENhbGxzIDptZXRoOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5pbnZhbGlkYXRlX2NhY2hlc2Agb24gYWxsCiAgICAgIGZpbmRlcnMgc3RvcmVkIGluIDphdHRyOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAuCiAKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgQ2FsbHMgb2JqZWN0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgZm9yIGBgJydgYCAoaS5lLiB0aGUgZW1wdHkgc3RyaW5nKS4KKwogCiAuLiBjbGFzczo6IEZpbGVGaW5kZXIocGF0aCwgXCpsb2FkZXJfZGV0YWlscykKIApAQCAtODAwLDcgKzgwNSw3IEBACiAKIC4uIGNsYXNzOjogRXh0ZW5zaW9uRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIAotICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgZm9yCisgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXJgIGZvcgogICAgZXh0ZW5zaW9uIG1vZHVsZXMuCiAKICAgIFRoZSAqZnVsbG5hbWUqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBsb2FkZXIgaXMgdG8KQEAgLTgzNCw2ICs4MzksNzAgQEAKIAogICAgICAgUmV0dXJucyBgYE5vbmVgYCBhcyBleHRlbnNpb24gbW9kdWxlcyBkbyBub3QgaGF2ZSBzb3VyY2UgY29kZS4KIAorICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorCisgICAgICBSZXR1cm5zIDphdHRyOmBwYXRoYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gY2xhc3M6OiBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGxvYWRlcl9zdGF0ZT1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCisKKyAgIEEgc3BlY2lmaWNhdGlvbiBmb3IgYSBtb2R1bGUncyBpbXBvcnQtc3lzdGVtLXJlbGF0ZWQgc3RhdGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBhdHRyaWJ1dGU6OiBuYW1lCisKKyAgIChgYF9fbmFtZV9fYGApCisKKyAgIEEgc3RyaW5nIGZvciB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZS4KKworICAgLi4gYXR0cmlidXRlOjogbG9hZGVyCisKKyAgIChgYF9fbG9hZGVyX19gYCkKKworICAgVGhlIGxvYWRlciB0byB1c2UgZm9yIGxvYWRpbmcuICBGb3IgbmFtZXNwYWNlIHBhY2thZ2VzIHRoaXMgc2hvdWxkIGJlCisgICBzZXQgdG8gTm9uZS4KKworICAgLi4gYXR0cmlidXRlOjogb3JpZ2luCisKKyAgIChgYF9fZmlsZV9fYGApCisKKyAgIE5hbWUgb2YgdGhlIHBsYWNlIGZyb20gd2hpY2ggdGhlIG1vZHVsZSBpcyBsb2FkZWQsIGUuZy4gImJ1aWx0aW4iIGZvcgorICAgYnVpbHQtaW4gbW9kdWxlcyBhbmQgdGhlIGZpbGVuYW1lIGZvciBtb2R1bGVzIGxvYWRlZCBmcm9tIHNvdXJjZS4KKyAgIE5vcm1hbGx5ICJvcmlnaW4iIHNob3VsZCBiZSBzZXQsIGJ1dCBpdCBtYXkgYmUgTm9uZSAodGhlIGRlZmF1bHQpCisgICB3aGljaCBpbmRpY2F0ZXMgaXQgaXMgdW5zcGVjaWZpZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisKKyAgIChgYF9fcGF0aF9fYGApCisKKyAgIExpc3Qgb2Ygc3RyaW5ncyBmb3Igd2hlcmUgdG8gZmluZCBzdWJtb2R1bGVzLCBpZiBhIHBhY2thZ2UgKE5vbmUKKyAgIG90aGVyd2lzZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxvYWRlcl9zdGF0ZQorCisgICBDb250YWluZXIgb2YgZXh0cmEgbW9kdWxlLXNwZWNpZmljIGRhdGEgZm9yIHVzZSBkdXJpbmcgbG9hZGluZyAob3IKKyAgIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjYWNoZWQKKworICAgKGBgX19jYWNoZWRfX2BgKQorCisgICBTdHJpbmcgZm9yIHdoZXJlIHRoZSBjb21waWxlZCBtb2R1bGUgc2hvdWxkIGJlIHN0b3JlZCAob3IgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBhcmVudAorCisgICAoYGBfX3BhY2thZ2VfX2BgKQorCisgICAoUmVhZC1vbmx5KSBGdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3aGljaCB0aGUgbW9kdWxlCisgICBiZWxvbmdzIGFzIGEgc3VibW9kdWxlIChvciBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogaGFzX2xvY2F0aW9uCisKKyAgIChSZWFkLW9ubHkpIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgbW9kdWxlJ3MgIm9yaWdpbiIKKyAgIGF0dHJpYnV0ZSByZWZlcnMgdG8gYSBsb2FkYWJsZSBsb2NhdGlvbi4KIAogOm1vZDpgaW1wb3J0bGliLnV0aWxgIC0tIFV0aWxpdHkgY29kZSBmb3IgaW1wb3J0ZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg0NCw2ICs5MTMsNTEgQEAKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSB2YXJpb3VzIG9iamVjdHMgdGhhdCBoZWxwIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YKIGFuIDp0ZXJtOmBpbXBvcnRlcmAuCiAKKy4uIGF0dHJpYnV0ZTo6IE1BR0lDX05VTUJFUgorCisgICBUaGUgYnl0ZXMgd2hpY2ggcmVwcmVzZW50IHRoZSBieXRlY29kZSB2ZXJzaW9uIG51bWJlci4gSWYgeW91IG5lZWQgaGVscCB3aXRoCisgICBsb2FkaW5nL3dyaXRpbmcgYnl0ZWNvZGUgdGhlbiBjb25zaWRlciA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSA6cGVwOmAzMTQ3YCBwYXRoIHRvIHRoZSBieXRlLWNvbXBpbGVkIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgc291cmNlICpwYXRoKi4gIEZvciBleGFtcGxlLCBpZiAqcGF0aCogaXMgYGAvZm9vL2Jhci9iYXoucHlgYCB0aGUgcmV0dXJuCisgICB2YWx1ZSB3b3VsZCBiZSBgYC9mb28vYmFyL19fcHljYWNoZV9fL2Jhei5jcHl0aG9uLTMyLnB5Y2BgIGZvciBQeXRob24gMy4yLgorICAgVGhlIGBgY3B5dGhvbi0zMmBgIHN0cmluZyBjb21lcyBmcm9tIHRoZSBjdXJyZW50IG1hZ2ljIHRhZyAoc2VlCisgICA6ZnVuYzpgZ2V0X3RhZ2A7IGlmIDphdHRyOmBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnYCBpcyBub3QgZGVmaW5lZCB0aGVuCisgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aWxsIGJlIHJhaXNlZCkuICBUaGUgcmV0dXJuZWQgcGF0aCB3aWxsIGVuZCBpbgorICAgYGAucHljYGAgd2hlbiBgYF9fZGVidWdfX2BgIGlzIGBgVHJ1ZWBgIG9yIGBgLnB5b2BgIGZvciBhbiBvcHRpbWl6ZWQgUHl0aG9uCisgICAoaS5lLiBgYF9fZGVidWdfX2BgIGlzIGBgRmFsc2VgYCkuICBCeSBwYXNzaW5nIGluIGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYCBmb3IKKyAgICpkZWJ1Z19vdmVycmlkZSogeW91IGNhbiBvdmVycmlkZSB0aGUgc3lzdGVtJ3MgdmFsdWUgZm9yIGBgX19kZWJ1Z19fYGAgZm9yCisgICBleHRlbnNpb24gc2VsZWN0aW9uLgorCisgICAqcGF0aCogbmVlZCBub3QgZXhpc3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGZ1bmN0aW9uOjogc291cmNlX2Zyb21fY2FjaGUocGF0aCkKKworICAgR2l2ZW4gdGhlICpwYXRoKiB0byBhIDpwZXA6YDMxNDdgIGZpbGUgbmFtZSwgcmV0dXJuIHRoZSBhc3NvY2lhdGVkIHNvdXJjZSBjb2RlCisgICBmaWxlIHBhdGguICBGb3IgZXhhbXBsZSwgaWYgKnBhdGgqIGlzCisgICBgYC9mb28vYmFyL19fcHljYWNoZV9fL2Jhei5jcHl0aG9uLTMyLnB5Y2BgIHRoZSByZXR1cm5lZCBwYXRoIHdvdWxkIGJlCisgICBgYC9mb28vYmFyL2Jhei5weWBgLiAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LCBob3dldmVyIGlmIGl0IGRvZXMgbm90IGNvbmZvcm0KKyAgIHRvIDpwZXA6YDMxNDdgIGZvcm1hdCwgYSBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQuIElmCisgICA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQsCisgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKQorCisgICBEZWNvZGUgdGhlIGdpdmVuIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIGl0IGFzIGEgc3RyaW5nCisgICB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lcyAoYXMgcmVxdWlyZWQgYnkKKyAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZnVuY3Rpb246OiByZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSkKIAogICAgUmVzb2x2ZSBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lIHRvIGFuIGFic29sdXRlIG9uZS4KQEAgLTg2Miw3ICs5NzYsNyBAQAogCiAuLiBkZWNvcmF0b3I6OiBtb2R1bGVfZm9yX2xvYWRlcgogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCBtZXRob2QsCisgICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAogICAgIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlcgogICAgIG1vZHVsZSBvYmplY3QgdG8gbG9hZCB3aXRoLiBUaGUgZGVjb3JhdGVkIG1ldGhvZCBpcyBleHBlY3RlZCB0byBoYXZlIGEgY2FsbAogICAgIHNpZ25hdHVyZSB0YWtpbmcgdHdvIHBvc2l0aW9uYWwgYXJndW1lbnRzCkBAIC04NzMsNTUgKzk4Nyw2MiBAQAogCiAgICAgVGhlIGRlY29yYXRlZCBtZXRob2Qgd2lsbCB0YWtlIGluIHRoZSAqKm5hbWUqKiBvZiB0aGUgbW9kdWxlIHRvIGJlIGxvYWRlZAogICAgIGFzIGV4cGVjdGVkIGZvciBhIDp0ZXJtOmBsb2FkZXJgLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbgotICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBhIG5ldyBvbmUgaXMgY29uc3RydWN0ZWQgd2l0aCBpdHMKLSAgICA6YXR0cjpgX19uYW1lX19gIGF0dHJpYnV0ZSBzZXQgdG8gKipuYW1lKiosIDphdHRyOmBfX2xvYWRlcl9fYCBzZXQgdG8KLSAgICAqKnNlbGYqKiwgYW5kIDphdHRyOmBfX3BhY2thZ2VfX2Agc2V0IGlmCi0gICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCBpcyBkZWZpbmVkIGZvciAqKnNlbGYqKiBhbmQKLSAgICBkb2VzIG5vdCByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAgZm9yICoqbmFtZSoqLiBJZiBhIG5ldyBtb2R1bGUgaXMgbm90Ci0gICAgbmVlZGVkIHRoZW4gdGhlIG1vZHVsZSBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHdpbGwgYmUgcGFzc2VkIGludG8gdGhlCi0gICAgbWV0aG9kLgorICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgdGhlbiBhIG5ldyBvbmUgaXMgY29uc3RydWN0ZWQuIFJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlCisgICAgbW9kdWxlIGNhbWUgZnJvbSwgOmF0dHI6YF9fbG9hZGVyX19gIHNldCB0byAqKnNlbGYqKiBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgIGlzIHNldCBiYXNlZCBvbiB3aGF0IDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAgcmV0dXJucworICAgIChpZiBhdmFpbGFibGUpLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBzZXQgdW5jb25kaXRpb25hbGx5IHRvIHN1cHBvcnQKKyAgICByZWxvYWRpbmcuCiAKICAgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGJ5IHRoZSBkZWNvcmF0ZWQgbWV0aG9kIGFuZCBhIG1vZHVsZSB3YXMgYWRkZWQgdG8KLSAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIGl0IHdpbGwgYmUgcmVtb3ZlZCB0byBwcmV2ZW50IGEgcGFydGlhbGx5IGluaXRpYWxpemVkCi0gICAgbW9kdWxlIGZyb20gYmVpbmcgaW4gbGVmdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLiBJZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5Ci0gICAgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGl0IGlzIGxlZnQgYWxvbmUuCi0KLSAgICBVc2Ugb2YgdGhpcyBkZWNvcmF0b3IgaGFuZGxlcyBhbGwgdGhlIGRldGFpbHMgb2Ygd2hpY2ggbW9kdWxlIG9iamVjdCBhCi0gICAgbG9hZGVyIHNob3VsZCBpbml0aWFsaXplIGFzIHNwZWNpZmllZCBieSA6cGVwOmAzMDJgIGFzIGJlc3QgYXMgcG9zc2libGUuCisgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlbiB0aGUgbW9kdWxlIHdpbGwgYmUgcmVtb3ZlZCB0byBwcmV2ZW50IGEgcGFydGlhbGx5CisgICAgaW5pdGlhbGl6ZWQgbW9kdWxlIGZyb20gYmVpbmcgaW4gbGVmdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLiBJZiB0aGUgbW9kdWxlCisgICAgd2FzIGFscmVhZHkgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGl0IGlzIGxlZnQgYWxvbmUuCiAKICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgIDphdHRyOmBfX2xvYWRlcl9fYCBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYCBhcmUgYXV0b21hdGljYWxseSBzZXQKICAgICAgICAod2hlbiBwb3NzaWJsZSkuCiAKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgIFNldCA6YXR0cjpgX19uYW1lX19gLCA6YXR0cjpgX19sb2FkZXJfX2AgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgICAgIHVuY29uZGl0aW9uYWxseSB0byBzdXBwb3J0IHJlbG9hZGluZy4KKworICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBub3cgZGlyZWN0bHkgcGVyZm9ybXMgYWxsIHRoZSBmdW5jdGlvbmFsaXR5CisgICAgICAgcHJvdmlkZWQgYnkgdGhpcyBmdW5jdGlvbi4KKwogLi4gZGVjb3JhdG9yOjogc2V0X2xvYWRlcgogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCBtZXRob2QsCi0gICAgdG8gc2V0IHRoZSA6YXR0cjpgX19sb2FkZXJfX2AKLSAgICBhdHRyaWJ1dGUgb24gbG9hZGVkIG1vZHVsZXMuIElmIHRoZSBhdHRyaWJ1dGUgaXMgYWxyZWFkeSBzZXQgdGhlIGRlY29yYXRvcgotICAgIGRvZXMgbm90aGluZy4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IHRvIHRoZQotICAgIHdyYXBwZWQgbWV0aG9kIChpLmUuIGBgc2VsZmBgKSBpcyB3aGF0IDphdHRyOmBfX2xvYWRlcl9fYCBzaG91bGQgYmUgc2V0IHRvLgorICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAorICAgdG8gc2V0IHRoZSA6YXR0cjpgX19sb2FkZXJfX2AKKyAgIGF0dHJpYnV0ZSBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiBJZiB0aGUgYXR0cmlidXRlIGlzIGFscmVhZHkgc2V0IHRoZQorICAgZGVjb3JhdG9yIGRvZXMgbm90aGluZy4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IHRvCisgICB0aGUgd3JhcHBlZCBtZXRob2QgKGkuZS4gYGBzZWxmYGApIGlzIHdoYXQgOmF0dHI6YF9fbG9hZGVyX19gIHNob3VsZCBiZSBzZXQKKyAgIHRvLgogCi0gICAuLiBub3RlOjoKLQotICAgICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCA6ZnVuYzpgbW9kdWxlX2Zvcl9sb2FkZXJgIGJlIHVzZWQgb3ZlciB0aGlzCi0gICAgICBkZWNvcmF0b3IgYXMgaXQgc3Vic3VtZXMgdGhpcyBmdW5jdGlvbmFsaXR5LgotCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU2V0IGBgX19sb2FkZXJfX2BgIGlmIHNldCB0byBgYE5vbmVgYCwgYXMgaWYgdGhlIGF0dHJpYnV0ZSBkb2VzIG5vdAorICAgICAgZXhpc3QuCiAKIC4uIGRlY29yYXRvcjo6IHNldF9wYWNrYWdlCiAKLSAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciBhIDp0ZXJtOmBsb2FkZXJgIHRvIHNldCB0aGUgOmF0dHI6YF9fcGFja2FnZV9fYAotICAgIGF0dHJpYnV0ZSBvbiB0aGUgbW9kdWxlIHJldHVybmVkIGJ5IHRoZSBsb2FkZXIuIElmIDphdHRyOmBfX3BhY2thZ2VfX2AgaXMKLSAgICBzZXQgYW5kIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4gYGBOb25lYGAgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4KLSAgICBOb3RlIHRoYXQgdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyIGlzIHdoYXQgaGFzIHRoZSBhdHRyaWJ1dGUKLSAgICBzZXQgb24gYW5kIG5vdCB0aGUgbW9kdWxlIGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCisgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIHRvIHNldCB0aGUgOmF0dHI6YF9fcGFja2FnZV9fYCBhdHRyaWJ1dGUgb24gdGhlIHJldHVybmVkIG1vZHVsZS4gSWYgOmF0dHI6YF9fcGFja2FnZV9fYAorICAgaXMgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCiAKLSAgICBSZWxpYW5jZSBvbiB0aGlzIGRlY29yYXRvciBpcyBkaXNjb3VyYWdlZCB3aGVuIGl0IGlzIHBvc3NpYmxlIHRvIHNldAotICAgIDphdHRyOmBfX3BhY2thZ2VfX2AgYmVmb3JlIGltcG9ydGluZy4gQnkKLSAgICBzZXR0aW5nIGl0IGJlZm9yZWhhbmQgdGhlIGNvZGUgZm9yIHRoZSBtb2R1bGUgaXMgZXhlY3V0ZWQgd2l0aCB0aGUKLSAgICBhdHRyaWJ1dGUgc2V0IGFuZCB0aHVzIGNhbiBiZSB1c2VkIGJ5IGdsb2JhbCBsZXZlbCBjb2RlIGR1cmluZwotICAgIGluaXRpYWxpemF0aW9uLgorLi4gZnVuY3Rpb246OiBzcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSkKIAotICAgLi4gbm90ZTo6CisgICBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgOmNsYXNzOmBNb2R1bGVTcGVjYCBpbnN0YW5jZSBiYXNlZAorICAgb24gYSBsb2FkZXIuICBUaGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhleSBkbyBmb3IKKyAgIE1vZHVsZVNwZWMuICBUaGUgZnVuY3Rpb24gdXNlcyBhdmFpbGFibGUgOnRlcm06YGxvYWRlcmAgQVBJcywgc3VjaCBhcworICAgOm1ldGg6YEluc3BlY3RMb2FkZXIuaXNfcGFja2FnZWAsIHRvIGZpbGwgaW4gYW55IG1pc3NpbmcKKyAgIGluZm9ybWF0aW9uIG9uIHRoZSBzcGVjLgogCi0gICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IDpmdW5jOmBtb2R1bGVfZm9yX2xvYWRlcmAgYmUgdXNlZCBvdmVyIHRoaXMKLSAgICAgIGRlY29yYXRvciBhcyBpdCBzdWJzdW1lcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2NhdGlvbiwgKiwgbG9hZGVyPU5vbmUsIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUpCisKKyAgIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSA6Y2xhc3M6YE1vZHVsZVNwZWNgIGluc3RhbmNlIGJhc2VkCisgICBvbiB0aGUgcGF0aCB0byBhIGZpbGUuICBNaXNzaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgZmlsbGVkIGluIG9uIHRoZQorICAgc3BlYyBieSBtYWtpbmcgdXNlIG9mIGxvYWRlciBBUElzIGFuZCBieSB0aGUgaW1wbGljYXRpb24gdGhhdCB0aGUKKyAgIG1vZHVsZSB3aWxsIGJlIGZpbGUtYmFzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5kZXgucnN0IGIvRG9jL2xpYnJhcnkvaW5kZXgucnN0CmluZGV4IDFiMjVjNmUuLjgxMjg5YTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2luZGV4LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbmRleC5yc3QKQEAgLTY1LDYgKzY1LDcgQEAKICAgIHRrLnJzdAogICAgZGV2ZWxvcG1lbnQucnN0CiAgICBkZWJ1Zy5yc3QKKyAgIGRpc3RyaWJ1dGlvbi5yc3QKICAgIHB5dGhvbi5yc3QKICAgIGN1c3RvbWludGVycC5yc3QKICAgIG1vZHVsZXMucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdCBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CmluZGV4IDYyNWVhNmUuLjQxYzYxYjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0CkBAIC0xNzMsOCArMTczLDkgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCBkb2VzIG5vdCByZXR1cm4gbWV0YWNsYXNzIGF0dHJpYnV0ZXMgd2hlbiB0aGUgYXJndW1lbnQKLSAgICAgIGlzIGEgY2xhc3MgKHRoaXMgYmVoYXZpb3IgaXMgaW5oZXJpdGVkIGZyb20gdGhlIDpmdW5jOmBkaXJgIGZ1bmN0aW9uKS4KKyAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCB3aWxsIG9ubHkgcmV0dXJuIGNsYXNzIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIG1ldGFjbGFzcyB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGNsYXNzIGFuZCB0aG9zZSBhdHRyaWJ1dGVzIGhhdmUgYmVlbgorICAgICAgbGlzdGVkIGluIHRoZSBtZXRhY2xhc3MnIGN1c3RvbSA6bWV0aDpgX19kaXJfX2AuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRtb2R1bGVpbmZvKHBhdGgpCkBAIC03OTcsNiArNzk4LDIzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBmdW5jdGlvbjo6IHVud3JhcChmdW5jLCAqLCBzdG9wPU5vbmUpCisKKyAgIEdldCB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgKmZ1bmMqLiBJdCBmb2xsb3dzIHRoZSBjaGFpbiBvZiA6YXR0cjpgX193cmFwcGVkX19gCisgICBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluLgorCisgICAqc3RvcCogaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgYWNjZXB0aW5nIGFuIG9iamVjdCBpbiB0aGUgd3JhcHBlciBjaGFpbgorICAgYXMgaXRzIHNvbGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdGhlIHVud3JhcHBpbmcgdG8gYmUgdGVybWluYXRlZCBlYXJseSBpZgorICAgdGhlIGNhbGxiYWNrIHJldHVybnMgYSB0cnVlIHZhbHVlLiBJZiB0aGUgY2FsbGJhY2sgbmV2ZXIgcmV0dXJucyBhIHRydWUKKyAgIHZhbHVlLCB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluIGlzIHJldHVybmVkIGFzIHVzdWFsLiBGb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBzaWduYXR1cmVgIHVzZXMgdGhpcyB0byBzdG9wIHVud3JhcHBpbmcgaWYgYW55IG9iamVjdCBpbiB0aGUKKyAgIGNoYWluIGhhcyBhIGBgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZSBkZWZpbmVkLgorCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gX2luc3BlY3Qtc3RhY2s6CiAKIFRoZSBpbnRlcnByZXRlciBzdGFjawpAQCAtODI5LDYgKzg0NywxMCBAQAogICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgIGRlbCBmcmFtZQogCisgICBJZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBmcmFtZSBhcm91bmQgKGZvciBleGFtcGxlIHRvIHByaW50IGEgdHJhY2ViYWNrCisgICBsYXRlciksIHlvdSBjYW4gYWxzbyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGJ5IHVzaW5nIHRoZQorICAgOm1ldGg6YGZyYW1lLmNsZWFyYCBtZXRob2QuCisKIFRoZSBvcHRpb25hbCAqY29udGV4dCogYXJndW1lbnQgc3VwcG9ydGVkIGJ5IG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmllcwogdGhlIG51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0IHRvIHJldHVybiwgd2hpY2ggYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgY3VycmVudAogbGluZS4KQEAgLTk4NSwzICsxMDA3LDIyIEBACiAgICAgICByZXR1cm4gYW4gZW1wdHkgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworLi4gX2luc3BlY3QtbW9kdWxlLWNsaToKKworQ29tbWFuZCBMaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBiYXNpYyBpbnRyb3NwZWN0aW9uIGNhcGFiaWxpdHkKK2Zyb20gdGhlIGNvbW1hbmQgbGluZS4KKworLi4gcHJvZ3JhbTo6IGluc3BlY3QKKworQnkgZGVmYXVsdCwgYWNjZXB0cyB0aGUgbmFtZSBvZiBhIG1vZHVsZSBhbmQgcHJpbnRzIHRoZSBzb3VyY2Ugb2YgdGhhdAorbW9kdWxlLiBBIGNsYXNzIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbW9kdWxlIGNhbiBiZSBwcmludGVkIGluc3RlYWQgYnkKK2FwcGVuZGVkIGEgY29sb24gYW5kIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdC4KKworLi4gY21kb3B0aW9uOjogLS1kZXRhaWxzCisKKyAgIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgb2JqZWN0IHJhdGhlciB0aGFuIHRoZSBzb3VyY2UgY29kZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW8ucnN0IGIvRG9jL2xpYnJhcnkvaW8ucnN0CmluZGV4IGJkMGNlNjcuLjJiNTUwMTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2lvLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pby5yc3QKQEAgLTI4MywxMCArMjgzLDEwIEBACiAgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmVhbSBjYW4gYmUgcmVhZCBmcm9tLiAgSWYgYGBGYWxzZWBgLCA6bWV0aDpgcmVhZGAKICAgICAgIHdpbGwgcmFpc2UgOmV4YzpgT1NFcnJvcmAuCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKGxpbWl0PS0xKQorICAgLi4gbWV0aG9kOjogcmVhZGxpbmUoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIG9uZSBsaW5lIGZyb20gdGhlIHN0cmVhbS4gIElmICpsaW1pdCogaXMgc3BlY2lmaWVkLCBhdAotICAgICAgbW9zdCAqbGltaXQqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KKyAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqc2l6ZSogaXMgc3BlY2lmaWVkLCBhdAorICAgICAgbW9zdCAqc2l6ZSogYnl0ZXMgd2lsbCBiZSByZWFkLgogCiAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBgYGInXG4nYGAgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQgZmlsZXMsCiAgICAgICB0aGUgKm5ld2xpbmVzKiBhcmd1bWVudCB0byA6ZnVuYzpgb3BlbmAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCkBAIC0zNjYsMTQgKzM2NiwxNCBAQAogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAsCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0gICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgdXAgdG8gKm4qIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uICBBcyBhIGNvbnZlbmllbmNlLAotICAgICAgaWYgKm4qIGlzIHVuc3BlY2lmaWVkIG9yIC0xLCA6bWV0aDpgcmVhZGFsbGAgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlLAotICAgICAgb25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgRmV3ZXIgdGhhbiAqbiogYnl0ZXMgbWF5IGJlCi0gICAgICByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYWxsIHJldHVybnMgZmV3ZXIgdGhhbiAqbiogYnl0ZXMuCisgICAgICBSZWFkIHVwIHRvICpzaXplKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKKyAgICAgIGlmICpzaXplKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKKyAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKnNpemUqIGJ5dGVzIG1heSBiZQorICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKnNpemUqIGJ5dGVzLgogCi0gICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpuKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgorICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqc2l6ZSogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KICAgICAgIElmIHRoZSBvYmplY3QgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUsCiAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIApAQCAtNDQyLDEwICs0NDIsMTAgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwgb3IKLSAgICAgIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsCisgICAgICBvciBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5CiAgICAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGF0IEVPRi4KIAogICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBub3QKQEAgLTQ1Nyw5ICs0NTcsOSBAQAogICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluCiAgICAgICBub24gYmxvY2tpbmctbW9kZSwgYW5kIGhhcyBubyBkYXRhIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKICAgICAgIHJhdyBzdHJlYW0ncyA6bWV0aDpgflJhd0lPQmFzZS5yZWFkYCBtZXRob2QuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91CiAgICAgICBhcmUgaW1wbGVtZW50aW5nIHlvdXIgb3duIGJ1ZmZlcmluZyBvbiB0b3Agb2YgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYAogICAgICAgb2JqZWN0LgpAQCAtNTIyLDYgKzUyMiw4IEBACiAgICA6bW9kOmBvcy5vcGVuYCBhcyAqb3BlbmVyKiByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nCiAgICBgYE5vbmVgYCkuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICBTZWUgdGhlIDpmdW5jOmBvcGVuYCBidWlsdC1pbiBmdW5jdGlvbiBmb3IgZXhhbXBsZXMgb24gdXNpbmcgdGhlICpvcGVuZXIqCiAgICBwYXJhbWV0ZXIuCiAKQEAgLTUyOSw2ICs1MzEsOSBAQAogICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAgICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGZyb20gOmNsYXNzOmBJT0Jhc2VgIGFuZAogICAgOmNsYXNzOmBSYXdJT0Jhc2VgLCA6Y2xhc3M6YEZpbGVJT2AgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkYXRhCiAgICBhdHRyaWJ1dGVzOgpAQCAtNjAxLDIxICs2MDYsMjEgQEAKICAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvCiAgICB0aG9zZSBmcm9tIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGFuZCA6Y2xhc3M6YElPQmFzZWA6CiAKLSAgIC4uIG1ldGhvZDo6IHBlZWsoW25dKQorICAgLi4gbWV0aG9kOjogcGVlayhbc2l6ZV0pCiAKICAgICAgIFJldHVybiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiAgQXQgbW9zdCBvbmUKICAgICAgIHNpbmdsZSByZWFkIG9uIHRoZSByYXcgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeSB0aGUgY2FsbC4gVGhlIG51bWJlciBvZgogICAgICAgYnl0ZXMgcmV0dXJuZWQgbWF5IGJlIGxlc3Mgb3IgbW9yZSB0aGFuIHJlcXVlc3RlZC4KIAotICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCisgICAuLiBtZXRob2Q6OiByZWFkKFtzaXplXSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuICpuKiBieXRlcywgb3IgaWYgKm4qIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwgRU9GCi0gICAgICBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgorICAgICAgUmVhZCBhbmQgcmV0dXJuICpzaXplKiBieXRlcywgb3IgaWYgKnNpemUqIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwKKyAgICAgIEVPRiBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uICBJZgotICAgICAgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIG9ubHkgYnVmZmVyZWQgYnl0ZXMgYXJlIHJldHVybmVkLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uCisgICAgICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgb25seSBidWZmZXJlZCBieXRlcyBhcmUgcmV0dXJuZWQuCiAgICAgICBPdGhlcndpc2UsIG9uZSByYXcgc3RyZWFtIHJlYWQgY2FsbCBpcyBtYWRlLgogCiAKQEAgLTczNCwxNyArNzM5LDE3IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0gICAuLiBtZXRob2Q6OiByZWFkKG4pCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemUpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpuKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQotICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKm4qIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCisgICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqc2l6ZSogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKKyAgICAgIDpjbGFzczpgc3RyYC4gIElmICpzaXplKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKICAgICAgIFJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YgYW5kIHJldHVybiBhIHNpbmdsZSBgYHN0cmBgLiAgSWYgdGhlIHN0cmVhbSBpcwogICAgICAgYWxyZWFkeSBhdCBFT0YsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAotICAgICAgSWYgKmxpbWl0KiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKmxpbWl0KiBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVhZC4KKyAgICAgIElmICpzaXplKiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKnNpemUqIGNoYXJhY3RlcnMgd2lsbCBiZSByZWFkLgogCiAgICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0IGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAppbmRleCA3NjlhZjcyLi44MjZlNGFhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKQEAgLTE2MSw3ICsxNjEsMTYgQEAKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3ByaXZhdGUKIAogICAgICAgYGBUcnVlYGAgaWYgdGhlIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwcml2YXRlIG5ldHdvcmtzLiAgU2VlCi0gICAgICA6UkZDOmAxOTE4YCAoZm9yIElQdjQpIG9yIDpSRkM6YDQxOTNgIChmb3IgSVB2NikuCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5CisgICAgICAoZm9yIElQdjYpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBpc19nbG9iYWwKKworICAgICAgYGBUcnVlYGAgaWYgdGhlIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuICBTZWUKKyAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IChmb3IgSVB2NCkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkKKyAgICAgIChmb3IgSVB2NikuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAgICAuLiBhdHRyaWJ1dGU6OiBpc191bnNwZWNpZmllZAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGMucnN0IGIvRG9jL2xpYnJhcnkvaXBjLnJzdAppbmRleCA5MWVjNjkzLi4yNDQwYmQ0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYy5yc3QKQEAgLTE4LDYgKzE4LDkgQEAKIAogICAgc29ja2V0LnJzdAogICAgc3NsLnJzdAorICAgc2VsZWN0LnJzdAorICAgc2VsZWN0b3JzLnJzdAorICAgYXN5bmNpby5yc3QKICAgIGFzeW5jb3JlLnJzdAogICAgYXN5bmNoYXQucnN0CiAgICBzaWduYWwucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9qc29uLnJzdCBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CmluZGV4IGY2NTIwMzkuLjVkOTdlZTggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2pzb24ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2pzb24ucnN0CkBAIC00Miw4ICs0Miw3IEBACiBQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsCi0gICAgLi4uICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpKQorICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCiAgICAgewogICAgICAgICAiNCI6IDUsCiAgICAgICAgICI2IjogNwpAQCAtMTU4LDE1ICsxNTcsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6CisgICBJZiBzcGVjaWZpZWQsICpzZXBhcmF0b3JzKiBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCi0gICAgICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZQotICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuICppbmRlbnQqIGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgotCi0gICBJZiAqc2VwYXJhdG9ycyogaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlLCB0aGVuIGl0Ci0gICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuICBgYCgnLCcsCi0gICAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKICAgICpkZWZhdWx0KG9iaikqIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24gb2YKICAgICpvYmoqIG9yIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuICBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCkBAIC0yNDgsNiArMjQ1LDggQEAKICAgIGt3YXJnOyBvdGhlcndpc2UgOmNsYXNzOmBKU09ORGVjb2RlcmAgaXMgdXNlZC4gIEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuCiAKKyAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogLi4gZnVuY3Rpb246OiBsb2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWlyc19ob29rPU5vbmUsICoqa3cpCiAKQEAgLTI1Nyw2ICsyNTYsOCBAQAogICAgVGhlIG90aGVyIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YGxvYWRgLCBleGNlcHQKICAgICplbmNvZGluZyogd2hpY2ggaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAorICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCiBFbmNvZGVycyBhbmQgRGVjb2RlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzU0LDIzICszNTUsMjYgQEAKIAogICAgLi4gX3B5LXRvLWpzb24tdGFibGU6CiAKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKLSAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKLSAgIHwgZGljdCAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgc3RyICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgaW50LCBmbG9hdCAgICAgICAgfCBudW1iZXIgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgVHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgRmFsc2UgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgTm9uZSAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgUHl0aG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKKyAgIHwgZGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgbGlzdCwgdHVwbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcnJheSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc3RyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaW50LCBmbG9hdCwgaW50LSAmIGZsb2F0LWRlcml2ZWQgRW51bXMgfCBudW1iZXIgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGludC0gYW5kIGZsb2F0LWRlcml2ZWQgRW51bSBjbGFzc2VzLgogCiAgICBUbyBleHRlbmQgdGhpcyB0byByZWNvZ25pemUgb3RoZXIgb2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxlbWVudCBhCiAgICA6bWV0aDpgZGVmYXVsdGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlIG9iamVjdApAQCAtNDEwLDE1ICs0MTQsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlCi0gICAgICB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gKmluZGVudCogaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCi0KICAgIElmIHNwZWNpZmllZCwgKnNlcGFyYXRvcnMqIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAotICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgcmVwcmVzZW50YXRpb24sIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAogICAgSWYgc3BlY2lmaWVkLCAqZGVmYXVsdCogaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgY2FuJ3QKICAgIG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlIHZlcnNpb24gb2YgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKaW5kZXggYzAwYjUzMi4uOGMxNWVlMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdApAQCAtODAsMTEgKzgwLDIzIEBACiAKIC4uIGZ1bmN0aW9uOjogZmlsZUNvbmZpZyhmbmFtZSwgZGVmYXVsdHM9Tm9uZSwgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzPVRydWUpCiAKLSAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YGNvbmZpZ3BhcnNlcmBcLWZvcm1hdCBmaWxlCi0gICBuYW1lZCAqZm5hbWUqLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuCi0gICBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4gZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkCi0gICBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzCi0gICBhbmQgbG9hZCB0aGUgY2hvc2VuIGNvbmZpZ3VyYXRpb24pLgorICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUuCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGFuIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbgorICAgZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyCisgICBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzIGFuZCBsb2FkIHRoZSBjaG9zZW4KKyAgIGNvbmZpZ3VyYXRpb24pLgorCisgICA6cGFyYW0gZm5hbWU6IEEgZmlsZW5hbWUsIG9yIGEgZmlsZS1saWtlIG9iamVjdCwgb3IgYW4gaW5zdGFuY2UgZGVyaXZlZAorICAgICAgICAgICAgICAgICBmcm9tIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgLiBJZiBhCisgICAgICAgICAgICAgICAgIGBgUmF3Q29uZmlnUGFyc2VyYGAtZGVyaXZlZCBpbnN0YW5jZSBpcyBwYXNzZWQsIGl0IGlzIHVzZWQgYXMKKyAgICAgICAgICAgICAgICAgaXMuIE90aGVyd2lzZSwgYSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuQ29uZmlncGFyc2VyYCBpcworICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZWQsIGFuZCB0aGUgY29uZmlndXJhdGlvbiByZWFkIGJ5IGl0IGZyb20gdGhlCisgICAgICAgICAgICAgICAgIG9iamVjdCBwYXNzZWQgaW4gYGBmbmFtZWBgLiBJZiB0aGF0IGhhcyBhIDptZXRoOmByZWFkbGluZWAKKyAgICAgICAgICAgICAgICAgbWV0aG9kLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZS1saWtlIG9iamVjdCBhbmQgcmVhZCB1c2luZworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZF9maWxlYDsgb3RoZXJ3aXNlLAorICAgICAgICAgICAgICAgICBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgZmlsZW5hbWUgYW5kIHBhc3NlZCB0bworICAgICAgICAgICAgICAgICA6bWV0aDpgfmNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIucmVhZGAuCisKIAogICAgOnBhcmFtIGRlZmF1bHRzOiBEZWZhdWx0cyB0byBiZSBwYXNzZWQgdG8gdGhlIENvbmZpZ1BhcnNlciBjYW4gYmUgc3BlY2lmaWVkCiAgICAgICAgICAgICAgICAgICAgIGluIHRoaXMgYXJndW1lbnQuCkBAIC05OCw4ICsxMTAsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyIGFuY2VzdG9ycyBhcmUgZXhwbGljaXRseSBuYW1lZCBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmB+Y29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcmAgaXMKKyAgICAgIG5vdyBhY2NlcHRlZCBhcyBhIHZhbHVlIGZvciBgYGZuYW1lYGAuIFRoaXMgZmFjaWxpdGF0ZXM6CiAKLS4uIGZ1bmN0aW9uOjogbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JUKQorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIGZpbGUgd2hlcmUgbG9nZ2luZyBjb25maWd1cmF0aW9uIGlzIGp1c3QgcGFydAorICAgICAgICBvZiB0aGUgb3ZlcmFsbCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLgorICAgICAgKiBVc2Ugb2YgYSBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSBhIGZpbGUsIGFuZCB0aGVuIG1vZGlmaWVkIGJ5IHRoZSB1c2luZworICAgICAgICBhcHBsaWNhdGlvbiAoZS5nLiBiYXNlZCBvbiBjb21tYW5kLWxpbmUgcGFyYW1ldGVycyBvciBvdGhlciBhc3BlY3RzCisgICAgICAgIG9mIHRoZSBydW50aW1lIGVudmlyb25tZW50KSBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGBgZmlsZUNvbmZpZ2BgLgorCisuLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpCiAKICAgIFN0YXJ0cyB1cCBhIHNvY2tldCBzZXJ2ZXIgb24gdGhlIHNwZWNpZmllZCBwb3J0LCBhbmQgbGlzdGVucyBmb3IgbmV3CiAgICBjb25maWd1cmF0aW9ucy4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIHRoZSBtb2R1bGUncyBkZWZhdWx0CkBAIC0xMTAsNiArMTMxLDE3IEBACiAgICA6bWV0aDpgfnRocmVhZGluZy5UaHJlYWQuam9pbmAgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLAogICAgY2FsbCA6ZnVuYzpgc3RvcExpc3RlbmluZ2AuCiAKKyAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50LCBpZiBzcGVjaWZpZWQsIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHNob3VsZAorICAgdmVyaWZ5IHdoZXRoZXIgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgYXJlIHZhbGlkIGFuZCBzaG91bGQgYmUKKyAgIHByb2Nlc3NlZC4gVGhpcyBjb3VsZCBiZSBkb25lIGJ5IGVuY3J5cHRpbmcgYW5kL29yIHNpZ25pbmcgd2hhdCBpcyBzZW50CisgICBhY3Jvc3MgdGhlIHNvY2tldCwgc3VjaCB0aGF0IHRoZSBgYHZlcmlmeWBgIGNhbGxhYmxlIGNhbiBwZXJmb3JtCisgICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGFuZC9vciBkZWNyeXB0aW9uLiBUaGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBpcyBjYWxsZWQKKyAgIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgYnl0ZXMgcmVjZWl2ZWQgYWNyb3NzIHRoZSBzb2NrZXQgLSBhbmQgc2hvdWxkCisgICByZXR1cm4gdGhlIGJ5dGVzIHRvIGJlIHByb2Nlc3NlZCwgb3IgTm9uZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBieXRlcyBzaG91bGQKKyAgIGJlIGRpc2NhcmRlZC4gVGhlIHJldHVybmVkIGJ5dGVzIGNvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwYXNzZWQgaW4gYnl0ZXMKKyAgIChlLmcuIHdoZW4gb25seSB2ZXJpZmljYXRpb24gaXMgZG9uZSksIG9yIHRoZXkgY291bGQgYmUgY29tcGxldGVseSBkaWZmZXJlbnQKKyAgIChwZXJoYXBzIGlmIGRlY3J5cHRpb24gd2VyZSBwZXJmb3JtZWQpLgorCiAgICBUbyBzZW5kIGEgY29uZmlndXJhdGlvbiB0byB0aGUgc29ja2V0LCByZWFkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCiAgICBzZW5kIGl0IHRvIHRoZSBzb2NrZXQgYXMgYSBzdHJpbmcgb2YgYnl0ZXMgcHJlY2VkZWQgYnkgYSBmb3VyLWJ5dGUgbGVuZ3RoCiAgICBzdHJpbmcgcGFja2VkIGluIGJpbmFyeSB1c2luZyBgYHN0cnVjdC5wYWNrKCc+TCcsIG4pYGAuCkBAIC0xMjYsNyArMTU4LDEyIEBACiAgICAgICA6ZnVuYzpgbGlzdGVuYCBzb2NrZXQgYW5kIHNlbmRpbmcgYSBjb25maWd1cmF0aW9uIHdoaWNoIHJ1bnMgd2hhdGV2ZXIKICAgICAgIGNvZGUgdGhlIGF0dGFja2VyIHdhbnRzIHRvIGhhdmUgZXhlY3V0ZWQgaW4gdGhlIHZpY3RpbSdzIHByb2Nlc3MuIFRoaXMgaXMKICAgICAgIGVzcGVjaWFsbHkgZWFzeSB0byBkbyBpZiB0aGUgZGVmYXVsdCBwb3J0IGlzIHVzZWQsIGJ1dCBub3QgaGFyZCBldmVuIGlmIGEKLSAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLgorICAgICAgZGlmZmVyZW50IHBvcnQgaXMgdXNlZCkuIFRvIGF2b2lkIHRoZSByaXNrIG9mIHRoaXMgaGFwcGVuaW5nLCB1c2UgdGhlCisgICAgICBgYHZlcmlmeWBgIGFyZ3VtZW50IHRvIDpmdW5jOmBsaXN0ZW5gIHRvIHByZXZlbnQgdW5yZWNvZ25pc2VkCisgICAgICBjb25maWd1cmF0aW9ucyBmcm9tIGJlaW5nIGFwcGxpZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LgorICAgICAgVGhlIGBgdmVyaWZ5YGAgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAuLiBmdW5jdGlvbjo6IHN0b3BMaXN0ZW5pbmcoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IDQxNWUzOTcuLjMxNWMxNjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC0zMDAsNyArMzAwLDcgQEAKIHRpbWVkIGludGVydmFscy4KIAogCi0uLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpCisuLiBjbGFzczo6IFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcihmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgY2xhc3MuIFRoZQogICAgc3BlY2lmaWVkIGZpbGUgaXMgb3BlbmVkIGFuZCB1c2VkIGFzIHRoZSBzdHJlYW0gZm9yIGxvZ2dpbmcuIE9uIHJvdGF0aW5nIGl0IGFsc28KQEAgLTM1MCw2ICszNTAsMTIgQEAKICAgIElmICpkZWxheSogaXMgdHJ1ZSwgdGhlbiBmaWxlIG9wZW5pbmcgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwgdG8KICAgIDptZXRoOmBlbWl0YC4KIAorICAgSWYgKmF0VGltZSogaXMgbm90IGBgTm9uZWBgLCBpdCBtdXN0IGJlIGEgYGBkYXRldGltZS50aW1lYGAgaW5zdGFuY2Ugd2hpY2gKKyAgIHNwZWNpZmllcyB0aGUgdGltZSBvZiBkYXkgd2hlbiByb2xsb3ZlciBvY2N1cnMsIGZvciB0aGUgY2FzZXMgd2hlcmUgcm9sbG92ZXIKKyAgIGlzIHNldCB0byBoYXBwZW4gImF0IG1pZG5pZ2h0IiBvciAib24gYSBwYXJ0aWN1bGFyIHdlZWtkYXkiLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmF0VGltZSogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogICAgLi4gbWV0aG9kOjogZG9Sb2xsb3ZlcigpCiAKQEAgLTM3NSw2ICszODEsOSBAQAogICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYHBvcnRgYCBpcyBzcGVjaWZpZWQgYXMgYGBOb25lYGAsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIGNyZWF0ZWQKKyAgICAgIHVzaW5nIHRoZSB2YWx1ZSBpbiBgYGhvc3RgYCAtIG90aGVyd2lzZSwgYSBUQ1Agc29ja2V0IGlzIGNyZWF0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApAQCAtNDYwLDYgKzQ2OSw5IEBACiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YERhdGFncmFtSGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgSWYgYGBwb3J0YGAgaXMgc3BlY2lmaWVkIGFzIGBgTm9uZWBgLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyBjcmVhdGVkCisgICAgICB1c2luZyB0aGUgdmFsdWUgaW4gYGBob3N0YGAgLSBvdGhlcndpc2UsIGEgVENQIHNvY2tldCBpcyBjcmVhdGVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbHptYS5yc3QgYi9Eb2MvbGlicmFyeS9sem1hLnJzdAppbmRleCBkYTQ2NTc1Li41M2ZiYTg5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sem1hLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sem1hLnJzdApAQCAtMzksOCArMzksOCBAQAogICAgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAiciJgYCwgYGAicmIiYGAsIGBgInciYGAsIGBgIndiImBgLAotICAgYGAiYSJgYCBvciBgYCJhYiJgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgInJ0ImBgLCBgYCJ3dCJgYCwgb3IgYGAiYXQiYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgorICAgYGAieCJgYCwgYGAieGIiYGAsIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwKKyAgIGBgInd0ImBgLCBgYCJ4dCJgYCwgb3IgYGAiYXQiYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAicmIiYGAuCiAKICAgIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcsIHRoZSAqZm9ybWF0KiBhbmQgKmZpbHRlcnMqIGFyZ3VtZW50cyBoYXZlCiAgICB0aGUgc2FtZSBtZWFuaW5ncyBhcyBmb3IgOmNsYXNzOmBMWk1BRGVjb21wcmVzc29yYC4gSW4gdGhpcyBjYXNlLCB0aGUgKmNoZWNrKgpAQCAtNTcsNiArNTcsOSBAQAogICAgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCiAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAsIGBgInhiImBgIGFuZCBgYCJ4dCJgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IExaTUFGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9InIiLCBcKiwgZm9ybWF0PU5vbmUsIGNoZWNrPS0xLCBwcmVzZXQ9Tm9uZSwgZmlsdGVycz1Ob25lKQogCkBAIC02OSw4ICs3Miw5IEBACiAgICBmaWxlIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCBpcyBjbG9zZWQuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCJyImBgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAidyJgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgInJiImBgLCBgYCJ3YiJgYCwgYW5kIGBgImFiImBgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCJ4ImBgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgImEiYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAicmIiYGAsIGBgIndiImBgLCBgYCJ4YiJgYCBhbmQgYGAiYWIiYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCJ3ImBgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgImEiYGAuCkBAIC05OCw2ICsxMDIsOSBAQAogICAgICAgYnl0ZSBvZiBkYXRhIHdpbGwgYmUgcmV0dXJuZWQsIHVubGVzcyBFT0YgaGFzIGJlZW4gcmVhY2hlZC4gVGhlIGV4YWN0CiAgICAgICBudW1iZXIgb2YgYnl0ZXMgcmV0dXJuZWQgaXMgdW5zcGVjaWZpZWQgKHRoZSAqc2l6ZSogYXJndW1lbnQgaXMgaWdub3JlZCkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAieCJgYCBhbmQgYGAieGIiYGAgbW9kZXMuCisKIAogQ29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdCBiL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CmluZGV4IDNiOWUzZDIuLjEyNGViNjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hcnNoYWwucnN0CkBAIC00MCwxMCArNDAsMTEgQEAKIHBvaW50IG51bWJlcnMsIGNvbXBsZXggbnVtYmVycywgc3RyaW5ncywgYnl0ZXMsIGJ5dGVhcnJheXMsIHR1cGxlcywgbGlzdHMsIHNldHMsCiBmcm96ZW5zZXRzLCBkaWN0aW9uYXJpZXMsIGFuZCBjb2RlIG9iamVjdHMsIHdoZXJlIGl0IHNob3VsZCBiZSB1bmRlcnN0b29kIHRoYXQKIHR1cGxlcywgbGlzdHMsIHNldHMsIGZyb3plbnNldHMgYW5kIGRpY3Rpb25hcmllcyBhcmUgb25seSBzdXBwb3J0ZWQgYXMgbG9uZyBhcwotdGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQ7IGFuZCByZWN1cnNpdmUgbGlzdHMsIHNldHMKLWFuZCBkaWN0aW9uYXJpZXMgc2hvdWxkIG5vdCBiZSB3cml0dGVuICh0aGV5IHdpbGwgY2F1c2UgaW5maW5pdGUgbG9vcHMpLiAgVGhlCit0aGUgdmFsdWVzIGNvbnRhaW5lZCB0aGVyZWluIGFyZSB0aGVtc2VsdmVzIHN1cHBvcnRlZC4KIHNpbmdsZXRvbnMgOmNvbnN0OmBOb25lYCwgOmNvbnN0OmBFbGxpcHNpc2AgYW5kIDpleGM6YFN0b3BJdGVyYXRpb25gIGNhbiBhbHNvIGJlCiBtYXJzaGFsbGVkIGFuZCB1bm1hcnNoYWxsZWQuCitGb3IgZm9ybWF0ICp2ZXJzaW9uKiBsb3dlciB0aGFuIDMsIHJlY3Vyc2l2ZSBsaXN0cywgc2V0cyBhbmQgZGljdGlvbmFyaWVzIGNhbm5vdAorYmUgd3JpdHRlbiAoc2VlIGJlbG93KS4KIAogVGhlcmUgYXJlIGZ1bmN0aW9ucyB0aGF0IHJlYWQvd3JpdGUgZmlsZXMgYXMgd2VsbCBhcyBmdW5jdGlvbnMgb3BlcmF0aW5nIG9uCiBzdHJpbmdzLgpAQCAtMTAzLDcgKzEwNCw5IEBACiAKICAgIEluZGljYXRlcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZHVsZSB1c2VzLiBWZXJzaW9uIDAgaXMgdGhlIGhpc3RvcmljYWwKICAgIGZvcm1hdCwgdmVyc2lvbiAxIHNoYXJlcyBpbnRlcm5lZCBzdHJpbmdzIGFuZCB2ZXJzaW9uIDIgdXNlcyBhIGJpbmFyeSBmb3JtYXQKLSAgIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDIuCisgICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4KKyAgIFZlcnNpb24gMyBhZGRzIHN1cHBvcnQgZm9yIG9iamVjdCBpbnN0YW5jaW5nIGFuZCByZWN1cnNpb24uCisgICBUaGUgY3VycmVudCB2ZXJzaW9uIGlzIDMuCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCAzZDFjMjA5Li4yYzQ0ZGM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTkzLDExICs5MywxMDggQEAKICAgICAgICAgcC5zdGFydCgpCiAgICAgICAgIHAuam9pbigpCiAKLUZvciBhbiBleHBsYW5hdGlvbiBvZiB3aHkgKG9uIFdpbmRvd3MpIHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBwYXJ0IGlzCitGb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBwYXJ0IGlzCiBuZWNlc3NhcnksIHNlZSA6cmVmOmBtdWx0aXByb2Nlc3NpbmctcHJvZ3JhbW1pbmdgLgogCiAKIAorQ29udGV4dHMgYW5kIHN0YXJ0IG1ldGhvZHMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKK0RlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agc3VwcG9ydHMgdGhyZWUgd2F5cwordG8gc3RhcnQgYSBwcm9jZXNzLiAgVGhlc2UgKnN0YXJ0IG1ldGhvZHMqIGFyZQorCisgICpzcGF3bioKKyAgICBUaGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgZnJlc2ggcHl0aG9uIGludGVycHJldGVyIHByb2Nlc3MuICBUaGUKKyAgICBjaGlsZCBwcm9jZXNzIHdpbGwgb25seSBpbmhlcml0IHRob3NlIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gcnVuCisgICAgdGhlIHByb2Nlc3Mgb2JqZWN0cyA6bWV0aDpgflByb2Nlc3MucnVuYCBtZXRob2QuICBJbiBwYXJ0aWN1bGFyLAorICAgIHVubmVjZXNzYXJ5IGZpbGUgZGVzY3JpcHRvcnMgYW5kIGhhbmRsZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICB3aWxsIG5vdCBiZSBpbmhlcml0ZWQuICBTdGFydGluZyBhIHByb2Nlc3MgdXNpbmcgdGhpcyBtZXRob2QgaXMKKyAgICByYXRoZXIgc2xvdyBjb21wYXJlZCB0byB1c2luZyAqZm9yayogb3IgKmZvcmtzZXJ2ZXIqLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuICBUaGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICpmb3JrKgorICAgIFRoZSBwYXJlbnQgcHJvY2VzcyB1c2VzIDpmdW5jOmBvcy5mb3JrYCB0byBmb3JrIHRoZSBQeXRob24KKyAgICBpbnRlcnByZXRlci4gIFRoZSBjaGlsZCBwcm9jZXNzLCB3aGVuIGl0IGJlZ2lucywgaXMgZWZmZWN0aXZlbHkKKyAgICBpZGVudGljYWwgdG8gdGhlIHBhcmVudCBwcm9jZXNzLiAgQWxsIHJlc291cmNlcyBvZiB0aGUgcGFyZW50IGFyZQorICAgIGluaGVyaXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4gIE5vdGUgdGhhdCBzYWZlbHkgZm9ya2luZyBhCisgICAgbXVsdGl0aHJlYWRlZCBwcm9jZXNzIGlzIHByb2JsZW1hdGljLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggb25seS4gIFRoZSBkZWZhdWx0IG9uIFVuaXguCisKKyAgKmZvcmtzZXJ2ZXIqCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgYW5kIHNlbGVjdHMgdGhlICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QsCisgICAgYSBzZXJ2ZXIgcHJvY2VzcyBpcyBzdGFydGVkLiAgRnJvbSB0aGVuIG9uLCB3aGVuZXZlciBhIG5ldyBwcm9jZXNzCisgICAgaXMgbmVlZGVkLCB0aGUgcGFyZW50IHByb2Nlc3MgY29ubmVjdHMgdG8gdGhlIHNlcnZlciBhbmQgcmVxdWVzdHMKKyAgICB0aGF0IGl0IGZvcmsgYSBuZXcgcHJvY2Vzcy4gIFRoZSBmb3JrIHNlcnZlciBwcm9jZXNzIGlzIHNpbmdsZQorICAgIHRocmVhZGVkIHNvIGl0IGlzIHNhZmUgZm9yIGl0IHRvIHVzZSA6ZnVuYzpgb3MuZm9ya2AuICBObworICAgIHVubmVjZXNzYXJ5IHJlc291cmNlcyBhcmUgaW5oZXJpdGVkLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzCisgICAgb3ZlciBVbml4IHBpcGVzLgorCitCZWZvcmUgUHl0aG9uIDMuNCAqZm9yayogd2FzIHRoZSBvbmx5IG9wdGlvbiBhdmFpbGFibGUgb24gVW5peC4gIEFsc28sCitwcmlvciB0byBQeXRob24gMy40LCBjaGlsZCBwcm9jZXNzZXMgd291bGQgaW5oZXJpdCBhbGwgdGhlIHBhcmVudHMKK2luaGVyaXRhYmxlIGhhbmRsZXMgb24gV2luZG93cy4KKworT24gVW5peCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcyB3aWxsIGFsc28KK3N0YXJ0IGEgKnNlbWFwaG9yZSB0cmFja2VyKiBwcm9jZXNzIHdoaWNoIHRyYWNrcyB0aGUgdW5saW5rZWQgbmFtZWQKK3NlbWFwaG9yZXMgY3JlYXRlZCBieSBwcm9jZXNzZXMgb2YgdGhlIHByb2dyYW0uICBXaGVuIGFsbCBwcm9jZXNzZXMKK2hhdmUgZXhpdGVkIHRoZSBzZW1hcGhvcmUgdHJhY2tlciB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3Jlcy4KK1VzdWFsbHkgdGhlcmUgc2hvdWxkIGJlIG5vbmUsIGJ1dCBpZiBhIHByb2Nlc3Mgd2FzIGtpbGxlZCBieSBhIHNpZ25hbAordGhlcmUgbWF5IHNvbWUgImxlYWtlZCIgc2VtYXBob3Jlcy4gIChVbmxpbmtpbmcgdGhlIG5hbWVkIHNlbWFwaG9yZXMKK2lzIGEgc2VyaW91cyBtYXR0ZXIgc2luY2UgdGhlIHN5c3RlbSBhbGxvd3Mgb25seSBhIGxpbWl0ZWQgbnVtYmVyLCBhbmQKK3RoZXkgd2lsbCBub3QgYmUgYXV0b21hdGljYWxseSB1bmxpbmtlZCB1bnRpbCB0aGUgbmV4dCByZWJvb3QuKQorCitUbyBzZWxlY3QgdGhlIGEgc3RhcnQgbWV0aG9kIHlvdSB1c2UgdGhlIDpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBpbgordGhlIGBgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJ2BgIGNsYXVzZSBvZiB0aGUgbWFpbiBtb2R1bGUuICBGb3IKK2V4YW1wbGU6OgorCisgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZyBhcyBtcAorCisgICAgICAgZGVmIGZvbyhxKToKKyAgICAgICAgICAgcS5wdXQoJ2hlbGxvJykKKworICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgIG1wLnNldF9zdGFydF9tZXRob2QoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IG1wLlF1ZXVlKCkKKyAgICAgICAgICAgcCA9IG1wLlByb2Nlc3ModGFyZ2V0PWZvbywgYXJncz0ocSwpKQorICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgcHJpbnQocS5nZXQoKSkKKyAgICAgICAgICAgcC5qb2luKCkKKworOmZ1bmM6YHNldF9zdGFydF9tZXRob2RgIHNob3VsZCBub3QgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSBpbiB0aGUKK3Byb2dyYW0uCisKK0FsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gb2J0YWluIGEgY29udGV4dAorb2JqZWN0LiAgQ29udGV4dCBvYmplY3RzIGhhdmUgdGhlIHNhbWUgQVBJIGFzIHRoZSBtdWx0aXByb2Nlc3NpbmcKK21vZHVsZSwgYW5kIGFsbG93IG9uZSB0byB1c2UgbXVsdGlwbGUgc3RhcnQgbWV0aG9kcyBpbiB0aGUgc2FtZQorcHJvZ3JhbS4gOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBjdHggPSBtcC5nZXRfY29udGV4dCgnc3Bhd24nKQorICAgICAgICAgICBxID0gY3R4LlF1ZXVlKCkKKyAgICAgICAgICAgcCA9IGN0eC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKK05vdGUgdGhhdCBvYmplY3RzIHJlbGF0ZWQgdG8gb25lIGNvbnRleHQgbWF5IG5vdCBiZSBjb21wYXRpYmxlIHdpdGgKK3Byb2Nlc3NlcyBmb3IgYSBkaWZmZXJlbnQgY29udGV4dC4gIEluIHBhcnRpY3VsYXIsIGxvY2tzIGNyZWF0ZWQgdXNpbmcKK3RoZSAqZm9yayogY29udGV4dCBjYW5ub3QgYmUgcGFzc2VkIHRvIGEgcHJvY2Vzc2VzIHN0YXJ0ZWQgdXNpbmcgdGhlCisqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzLgorCitBIGxpYnJhcnkgd2hpY2ggd2FudHMgdG8gdXNlIGEgcGFydGljdWxhciBzdGFydCBtZXRob2Qgc2hvdWxkIHByb2JhYmx5Cit1c2UgOmZ1bmM6YGdldF9jb250ZXh0YCB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIHRoZSBjaG9pY2Ugb2YgdGhlCitsaWJyYXJ5IHVzZXIuCisKKwogRXhjaGFuZ2luZyBvYmplY3RzIGJldHdlZW4gcHJvY2Vzc2VzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjc0LDE1ICszNzEsMzEgQEAKIEZvciBleGFtcGxlOjoKIAogICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wKKyAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKIAogICAgZGVmIGYoeCk6CiAgICAgICAgcmV0dXJuIHgqeAogCiAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIHdpdGggUG9vbChwcm9jZXNzZXM9NCkgYXMgcG9vbDogICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCi0gICAgICAgICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5Ci0gICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQodGltZW91dD0xKSkgICAgICAgIyBwcmludHMgIjEwMCIgdW5sZXNzIHlvdXIgY29tcHV0ZXIgaXMgKnZlcnkqIHNsb3cKLSAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgcmFuZ2UoMTApKSkgICAgICAjIHByaW50cyAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgIyBzdGFydCA0IHdvcmtlciBwcm9jZXNzZXMKKyAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6CisKKyAgICAgICAgICAgIyBwcmludCAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpCisKKyAgICAgICAgICAgIyBwcmludCBzYW1lIG51bWJlcnMgaW4gYXJiaXRyYXJ5IG9yZGVyCisgICAgICAgICAgIGZvciBpIGluIHBvb2wuaW1hcF91bm9yZGVyZWQoZiwgcmFuZ2UoMTApKToKKyAgICAgICAgICAgICAgIHByaW50KGkpCisKKyAgICAgICAgICAgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkKKyAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHByaW50cyAiMTAwIgorCisgICAgICAgICAgICMgbWFrZSB3b3JrZXIgc2xlZXAgZm9yIDEwIHNlY3MKKyAgICAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhzbGVlcCwgMTApCisgICAgICAgICAgIHByaW50KHJlcy5nZXQodGltZW91dD0xKSkgICAgICAgICAgICAgIyByYWlzZXMgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcgorCisgICAgICAgIyBleGl0aW5nIHRoZSAnd2l0aCctYmxvY2sgaGFzIHN0b3BwZWQgdGhlIHBvb2wKIAogTm90ZSB0aGF0IHRoZSBtZXRob2RzIG9mIGEgcG9vbCBzaG91bGQgb25seSBldmVyIGJlIHVzZWQgYnkgdGhlCiBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgaXQuCkBAIC03MzEsNiArODQ0LDkgQEAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbS4gIE1heSByYWlzZQogICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKKyAgIC4uIHNlZWFsc286OgorICAgICAgOmZ1bmM6YG9zLmNwdV9jb3VudGAKKwogLi4gZnVuY3Rpb246OiBjdXJyZW50X3Byb2Nlc3MoKQogCiAgICBSZXR1cm4gdGhlIDpjbGFzczpgUHJvY2Vzc2Agb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KQEAgLTc2MSw2ICs4NzcsNDMgQEAKICAgIElmIHRoZSBtb2R1bGUgaXMgYmVpbmcgcnVuIG5vcm1hbGx5IGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdGhlbgogICAgOmZ1bmM6YGZyZWV6ZV9zdXBwb3J0YCBoYXMgbm8gZWZmZWN0LgogCisuLiBmdW5jdGlvbjo6IGdldF9hbGxfc3RhcnRfbWV0aG9kcygpCisKKyAgIFJldHVybnMgYSBsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgc3RhcnQgbWV0aG9kcywgdGhlIGZpcnN0IG9mIHdoaWNoCisgICBpcyB0aGUgZGVmYXVsdC4gIFRoZSBwb3NzaWJsZSBzdGFydCBtZXRob2RzIGFyZSBgYCdmb3JrJ2BgLAorICAgYGAnc3Bhd24nYGAgYW5kIGBgJ2ZvcmtzZXJ2ZXInYGAuICBPbiBXaW5kb3dzIG9ubHkgYGAnc3Bhd24nYGAgaXMKKyAgIGF2YWlsYWJsZS4gIE9uIFVuaXggYGAnZm9yaydgYCBhbmQgYGAnc3Bhd24nYGAgYXJlIGFsd2F5cworICAgc3VwcG9ydGVkLCB3aXRoIGBgJ2ZvcmsnYGAgYmVpbmcgdGhlIGRlZmF1bHQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGdldF9jb250ZXh0KG1ldGhvZD1Ob25lKQorCisgICBSZXR1cm4gYSBjb250ZXh0IG9iamVjdCB3aGljaCBoYXMgdGhlIHNhbWUgYXR0cmlidXRlcyBhcyB0aGUKKyAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlLgorCisgICBJZiAqbWV0aG9kKiBpcyAqTm9uZSogdGhlbiB0aGUgZGVmYXVsdCBjb250ZXh0IGlzIHJldHVybmVkLgorICAgT3RoZXJ3aXNlICptZXRob2QqIHNob3VsZCBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwKKyAgIGBgJ2ZvcmtzZXJ2ZXInYGAuICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIHNwZWNpZmllZAorICAgc3RhcnQgbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGdldF9zdGFydF9tZXRob2QoYWxsb3dfbm9uZT1GYWxzZSkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHN0YXJ0IG1ldGhvZCB1c2VkIGZvciBzdGFydGluZyBwcm9jZXNzZXMuCisKKyAgIElmIHRoZSBzdGFydCBtZXRob2QgaGFzIG5vdCBiZWVuIGZpeGVkIGFuZCAqYWxsb3dfbm9uZSogaXMgZmFsc2UsCisgICB0aGVuIHRoZSBzdGFydCBtZXRob2QgaXMgZml4ZWQgdG8gdGhlIGRlZmF1bHQgYW5kIHRoZSBuYW1lIGlzCisgICByZXR1cm5lZC4gIElmIHRoZSBzdGFydCBtZXRob2QgaGFzIG5vdCBiZWVuIGZpeGVkIGFuZCAqYWxsb3dfbm9uZSoKKyAgIGlzIHRydWUgdGhlbiAqTm9uZSogaXMgcmV0dXJuZWQuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgY2FuIGJlIGBgJ2ZvcmsnYGAsIGBgJ3NwYXduJ2BgLCBgYCdmb3Jrc2VydmVyJ2BgCisgICBvciAqTm9uZSouICBgYCdmb3JrJ2BgIGlzIHRoZSBkZWZhdWx0IG9uIFVuaXgsIHdoaWxlIGBgJ3NwYXduJ2BgIGlzCisgICB0aGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZnVuY3Rpb246OiBzZXRfZXhlY3V0YWJsZSgpCiAKICAgIFNldHMgdGhlIHBhdGggb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB0byB1c2Ugd2hlbiBzdGFydGluZyBhIGNoaWxkIHByb2Nlc3MuCkBAIC03NjksOCArOTIyLDIxIEBACiAKICAgICAgIHNldF9leGVjdXRhYmxlKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob253LmV4ZScpKQogCi0gICBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGNoaWxkIHByb2Nlc3Nlcy4gIChXaW5kb3dzIG9ubHkpCisgICBiZWZvcmUgdGhleSBjYW4gY3JlYXRlIGNoaWxkIHByb2Nlc3Nlcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIE5vdyBzdXBwb3J0ZWQgb24gVW5peCB3aGVuIHRoZSBgYCdzcGF3bidgYCBzdGFydCBtZXRob2QgaXMgdXNlZC4KKworLi4gZnVuY3Rpb246OiBzZXRfc3RhcnRfbWV0aG9kKG1ldGhvZCkKKworICAgU2V0IHRoZSBtZXRob2Qgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gc3RhcnQgY2hpbGQgcHJvY2Vzc2VzLgorICAgKm1ldGhvZCogY2FuIGJlIGBgJ2ZvcmsnYGAsIGBgJ3NwYXduJ2BgIG9yIGBgJ2ZvcmtzZXJ2ZXInYGAuCisKKyAgIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgbW9zdCBvbmNlLCBhbmQgaXQgc2hvdWxkIGJlCisgICBwcm90ZWN0ZWQgaW5zaWRlIHRoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlCisgICBtYWluIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIG5vdGU6OgogCkBAIC0xNjc4LDE0ICsxODQ0LDE0IEBACiBPbmUgY2FuIGNyZWF0ZSBhIHBvb2wgb2YgcHJvY2Vzc2VzIHdoaWNoIHdpbGwgY2Fycnkgb3V0IHRhc2tzIHN1Ym1pdHRlZCB0byBpdAogd2l0aCB0aGUgOmNsYXNzOmBQb29sYCBjbGFzcy4KIAotLi4gY2xhc3M6OiBQb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZF1dXV0pCisuLiBjbGFzczo6IFBvb2woW3Byb2Nlc3Nlc1ssIGluaXRpYWxpemVyWywgaW5pdGFyZ3NbLCBtYXh0YXNrc3BlcmNoaWxkIFssIGNvbnRleHRdXV1dXSkKIAogICAgQSBwcm9jZXNzIHBvb2wgb2JqZWN0IHdoaWNoIGNvbnRyb2xzIGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIHRvIHdoaWNoIGpvYnMKICAgIGNhbiBiZSBzdWJtaXR0ZWQuICBJdCBzdXBwb3J0cyBhc3luY2hyb25vdXMgcmVzdWx0cyB3aXRoIHRpbWVvdXRzIGFuZAogICAgY2FsbGJhY2tzIGFuZCBoYXMgYSBwYXJhbGxlbCBtYXAgaW1wbGVtZW50YXRpb24uCiAKICAgICpwcm9jZXNzZXMqIGlzIHRoZSBudW1iZXIgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB1c2UuICBJZiAqcHJvY2Vzc2VzKiBpcwotICAgYGBOb25lYGAgdGhlbiB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IDpmdW5jOmBjcHVfY291bnRgIGlzIHVzZWQuICBJZgorICAgYGBOb25lYGAgdGhlbiB0aGUgbnVtYmVyIHJldHVybmVkIGJ5IDpmdW5jOmBvcy5jcHVfY291bnRgIGlzIHVzZWQuICBJZgogICAgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAgdGhlbiBlYWNoIHdvcmtlciBwcm9jZXNzIHdpbGwgY2FsbAogICAgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKQEAgLTE2OTgsNiArMTg2NCwxMyBAQAogICAgICAgdW51c2VkIHJlc291cmNlcyB0byBiZSBmcmVlZC4gVGhlIGRlZmF1bHQgKm1heHRhc2tzcGVyY2hpbGQqIGlzIE5vbmUsIHdoaWNoCiAgICAgICBtZWFucyB3b3JrZXIgcHJvY2Vzc2VzIHdpbGwgbGl2ZSBhcyBsb25nIGFzIHRoZSBwb29sLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgICpjb250ZXh0KiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb250ZXh0IHVzZWQgZm9yIHN0YXJ0aW5nCisgICAgICB0aGUgd29ya2VyIHByb2Nlc3Nlcy4gIFVzdWFsbHkgYSBwb29sIGlzIGNyZWF0ZWQgdXNpbmcgdGhlCisgICAgICBmdW5jdGlvbiA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLlBvb2xgIG9yIHRoZSA6bWV0aDpgUG9vbGAgbWV0aG9kCisgICAgICBvZiBhIGNvbnRleHQgb2JqZWN0LiAgSW4gYm90aCBjYXNlcyAqY29udGV4dCogaXMgc2V0CisgICAgICBhcHByb3ByaWF0ZWx5LgorCiAgICAuLiBub3RlOjoKIAogICAgICAgV29ya2VyIHByb2Nlc3NlcyB3aXRoaW4gYSA6Y2xhc3M6YFBvb2xgIHR5cGljYWxseSBsaXZlIGZvciB0aGUgY29tcGxldGUKQEAgLTIxODksNDMgKzIzNjIsOCBAQAogICAgIFtJTkZPL01haW5Qcm9jZXNzXSBzZW5kaW5nIHNodXRkb3duIG1lc3NhZ2UgdG8gbWFuYWdlcgogICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBleGl0aW5nIHdpdGggZXhpdGNvZGUgMAogCi1JbiBhZGRpdGlvbiB0byBoYXZpbmcgdGhlc2UgdHdvIGxvZ2dpbmcgZnVuY3Rpb25zLCB0aGUgbXVsdGlwcm9jZXNzaW5nIGFsc28KLWV4cG9zZXMgdHdvIGFkZGl0aW9uYWwgbG9nZ2luZyBsZXZlbCBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgIDpjb25zdDpgU1VCV0FSTklOR2AKLWFuZCA6Y29uc3Q6YFNVQkRFQlVHYC4gVGhlIHRhYmxlIGJlbG93IGlsbHVzdHJhdGVzIHdoZXJlIHRoZXNlcyBmaXQgaW4gdGhlCi1ub3JtYWwgbGV2ZWwgaGllcmFyY2h5LgotCi0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotfCBMZXZlbCAgICAgICAgICB8IE51bWVyaWMgdmFsdWUgIHwKLSs9PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT0rCi18IGBgU1VCV0FSTklOR2BgIHwgMjUgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGBTVUJERUJVR2BgICAgfCA1ICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotCiBGb3IgYSBmdWxsIHRhYmxlIG9mIGxvZ2dpbmcgbGV2ZWxzLCBzZWUgdGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZS4KIAotVGhlc2UgYWRkaXRpb25hbCBsb2dnaW5nIGxldmVscyBhcmUgdXNlZCBwcmltYXJpbHkgZm9yIGNlcnRhaW4gZGVidWcgbWVzc2FnZXMKLXdpdGhpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4gQmVsb3cgaXMgdGhlIHNhbWUgZXhhbXBsZSBhcyBhYm92ZSwgZXhjZXB0Ci13aXRoIDpjb25zdDpgU1VCREVCVUdgIGVuYWJsZWQ6OgotCi0gICAgPj4+IGltcG9ydCBtdWx0aXByb2Nlc3NpbmcsIGxvZ2dpbmcKLSAgICA+Pj4gbG9nZ2VyID0gbXVsdGlwcm9jZXNzaW5nLmxvZ190b19zdGRlcnIoKQotICAgID4+PiBsb2dnZXIuc2V0TGV2ZWwobXVsdGlwcm9jZXNzaW5nLlNVQkRFQlVHKQotICAgID4+PiBsb2dnZXIud2FybmluZygnZG9vbWVkJykKLSAgICBbV0FSTklORy9NYWluUHJvY2Vzc10gZG9vbWVkCi0gICAgPj4+IG0gPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBjaGlsZCBwcm9jZXNzIGNhbGxpbmcgc2VsZi5ydW4oKQotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gY3JlYXRlZCB0ZW1wIGRpcmVjdG9yeSAvLi4uL3B5bXAtLi4uCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIHNlcnZpbmcgYXQgJy8uLi4vcHltcC1kakdCWE4vbGlzdGVuZXItLi4uJwotICAgID4+PiBkZWwgbQotICAgIFtTVUJERUJVRy9NYWluUHJvY2Vzc10gZmluYWxpemVyIGNhbGxpbmcgLi4uCi0gICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCi0gICAgW0RFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciByZWNlaXZlZCBzaHV0ZG93biBtZXNzYWdlCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gY2FsbGluZyA8RmluYWxpemUgb2JqZWN0LCBjYWxsYmFjaz11bmxpbmssIC4uLgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGZpbmFsaXplciBjYWxsaW5nIDxidWlsdC1pbiBmdW5jdGlvbiB1bmxpbms+IC4uLgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGNhbGxpbmcgPEZpbmFsaXplIG9iamVjdCwgZGVhZD4KLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBmaW5hbGl6ZXIgY2FsbGluZyA8ZnVuY3Rpb24gcm10cmVlIGF0IDB4NWFhNzMwPiAuLi4KLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgZXhpdGluZyB3aXRoIGV4aXRjb2RlIDAKIAogVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZy5kdW1teWAgbW9kdWxlCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTIyNDYsOCArMjM4NCwxMCBAQAogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4KIAogCi1BbGwgcGxhdGZvcm1zCi1+fn5+fn5+fn5+fn5+CitBbGwgc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIGZvbGxvd2luZyBhcHBsaWVzIHRvIGFsbCBzdGFydCBtZXRob2RzLgogCiBBdm9pZCBzaGFyZWQgc3RhdGUKIApAQCAtMjI4MSwxMSArMjQyMSwxMyBAQAogCiBCZXR0ZXIgdG8gaW5oZXJpdCB0aGFuIHBpY2tsZS91bnBpY2tsZQogCi0gICAgT24gV2luZG93cyBtYW55IHR5cGVzIGZyb20gOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBuZWVkIHRvIGJlIHBpY2tsYWJsZSBzbwotICAgIHRoYXQgY2hpbGQgcHJvY2Vzc2VzIGNhbiB1c2UgdGhlbS4gIEhvd2V2ZXIsIG9uZSBzaG91bGQgZ2VuZXJhbGx5IGF2b2lkCi0gICAgc2VuZGluZyBzaGFyZWQgb2JqZWN0cyB0byBvdGhlciBwcm9jZXNzZXMgdXNpbmcgcGlwZXMgb3IgcXVldWVzLiAgSW5zdGVhZAotICAgIHlvdSBzaG91bGQgYXJyYW5nZSB0aGUgcHJvZ3JhbSBzbyB0aGF0IGEgcHJvY2VzcyB3aGljaCBuZWVkcyBhY2Nlc3MgdG8gYQotICAgIHNoYXJlZCByZXNvdXJjZSBjcmVhdGVkIGVsc2V3aGVyZSBjYW4gaW5oZXJpdCBpdCBmcm9tIGFuIGFuY2VzdG9yIHByb2Nlc3MuCisgICAgV2hlbiB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcyBtYW55IHR5cGVzCisgICAgZnJvbSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5lZWQgdG8gYmUgcGlja2xhYmxlIHNvIHRoYXQgY2hpbGQKKyAgICBwcm9jZXNzZXMgY2FuIHVzZSB0aGVtLiAgSG93ZXZlciwgb25lIHNob3VsZCBnZW5lcmFsbHkgYXZvaWQKKyAgICBzZW5kaW5nIHNoYXJlZCBvYmplY3RzIHRvIG90aGVyIHByb2Nlc3NlcyB1c2luZyBwaXBlcyBvciBxdWV1ZXMuCisgICAgSW5zdGVhZCB5b3Ugc2hvdWxkIGFycmFuZ2UgdGhlIHByb2dyYW0gc28gdGhhdCBhIHByb2Nlc3Mgd2hpY2gKKyAgICBuZWVkcyBhY2Nlc3MgdG8gYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBlbHNld2hlcmUgY2FuIGluaGVyaXQgaXQKKyAgICBmcm9tIGFuIGFuY2VzdG9yIHByb2Nlc3MuCiAKIEF2b2lkIHRlcm1pbmF0aW5nIHByb2Nlc3NlcwogCkBAIC0yMzMyLDE1ICsyNDc0LDE3IEBACiAKIEV4cGxpY2l0bHkgcGFzcyByZXNvdXJjZXMgdG8gY2hpbGQgcHJvY2Vzc2VzCiAKLSAgICBPbiBVbml4IGEgY2hpbGQgcHJvY2VzcyBjYW4gbWFrZSB1c2Ugb2YgYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBpbiBhCi0gICAgcGFyZW50IHByb2Nlc3MgdXNpbmcgYSBnbG9iYWwgcmVzb3VyY2UuICBIb3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gcGFzcyB0aGUKLSAgICBvYmplY3QgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4KKyAgICBPbiBVbml4IHVzaW5nIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kLCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UKKyAgICB1c2Ugb2YgYSBzaGFyZWQgcmVzb3VyY2UgY3JlYXRlZCBpbiBhIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEKKyAgICBnbG9iYWwgcmVzb3VyY2UuICBIb3dldmVyLCBpdCBpcyBiZXR0ZXIgdG8gcGFzcyB0aGUgb2JqZWN0IGFzIGFuCisgICAgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4KIAotICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MgdGhpcyBhbHNvCi0gICAgZW5zdXJlcyB0aGF0IGFzIGxvbmcgYXMgdGhlIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdAotICAgIGJlIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKLSAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlIHBhcmVudAotICAgIHByb2Nlc3MuCisgICAgQXBhcnQgZnJvbSBtYWtpbmcgdGhlIGNvZGUgKHBvdGVudGlhbGx5KSBjb21wYXRpYmxlIHdpdGggV2luZG93cworICAgIGFuZCB0aGUgb3RoZXIgc3RhcnQgbWV0aG9kcyB0aGlzIGFsc28gZW5zdXJlcyB0aGF0IGFzIGxvbmcgYXMgdGhlCisgICAgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZSB0aGUgb2JqZWN0IHdpbGwgbm90IGJlIGdhcmJhZ2UKKyAgICBjb2xsZWN0ZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgVGhpcyBtaWdodCBiZSBpbXBvcnRhbnQgaWYgc29tZQorICAgIHJlc291cmNlIGlzIGZyZWVkIHdoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUKKyAgICBwYXJlbnQgcHJvY2Vzcy4KIAogICAgIFNvIGZvciBpbnN0YW5jZSA6OgogCkBAIC0yMzk5LDE3ICsyNTQzLDE5IEBACiAKICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIDppc3N1ZTpgNTE1NWAsIDppc3N1ZTpgNTMxM2AgYW5kIDppc3N1ZTpgNTMzMWAKIAotV2luZG93cwotfn5+fn5+fgorVGhlICpzcGF3biogYW5kICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotU2luY2UgV2luZG93cyBsYWNrcyA6ZnVuYzpgb3MuZm9ya2AgaXQgaGFzIGEgZmV3IGV4dHJhIHJlc3RyaWN0aW9uczoKK1RoZXJlIGFyZSBhIGZldyBleHRyYSByZXN0cmljdGlvbiB3aGljaCBkb24ndCBhcHBseSB0byB0aGUgKmZvcmsqCitzdGFydCBtZXRob2QuCiAKIE1vcmUgcGlja2xhYmlsaXR5CiAKLSAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUgcGlja2xhYmxlLiAgVGhpcwotICAgIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseQotICAgIGFzIHRoZSBgYHRhcmdldGBgIGFyZ3VtZW50IG9uIFdpbmRvd3MgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZQotICAgIHRoYXQgaW5zdGVhZC4KKyAgICBFbnN1cmUgdGhhdCBhbGwgYXJndW1lbnRzIHRvIDptZXRoOmBQcm9jZXNzLl9faW5pdF9fYCBhcmUKKyAgICBwaWNrbGFibGUuICBUaGlzIG1lYW5zLCBpbiBwYXJ0aWN1bGFyLCB0aGF0IGJvdW5kIG9yIHVuYm91bmQKKyAgICBtZXRob2RzIGNhbm5vdCBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSBgYHRhcmdldGBgICh1bmxlc3MgeW91IHVzZQorICAgIHRoZSAqZm9yayogc3RhcnQgbWV0aG9kKSAtLS0ganVzdCBkZWZpbmUgYSBmdW5jdGlvbiBhbmQgdXNlIHRoYXQKKyAgICBpbnN0ZWFkLgogCiAgICAgQWxzbywgaWYgeW91IHN1YmNsYXNzIDpjbGFzczpgfm11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzYCB0aGVuIG1ha2Ugc3VyZSB0aGF0CiAgICAgaW5zdGFuY2VzIHdpbGwgYmUgcGlja2xhYmxlIHdoZW4gdGhlIDptZXRoOmBQcm9jZXNzLnN0YXJ0CkBAIC0yNDMxLDcgKzI1NzcsOCBAQAogICAgIGludGVycHJldGVyIHdpdGhvdXQgY2F1c2luZyB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyAoc3VjaCBhIHN0YXJ0aW5nIGEgbmV3CiAgICAgcHJvY2VzcykuCiAKLSAgICBGb3IgZXhhbXBsZSwgdW5kZXIgV2luZG93cyBydW5uaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHdvdWxkIGZhaWwgd2l0aCBhCisgICAgRm9yIGV4YW1wbGUsIHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QKKyAgICBydW5uaW5nIHRoZSBmb2xsb3dpbmcgbW9kdWxlIHdvdWxkIGZhaWwgd2l0aCBhCiAgICAgOmV4YzpgUnVudGltZUVycm9yYDo6CiAKICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MKQEAgLTI0NDUsMTMgKzI1OTIsMTQgQEAKICAgICBJbnN0ZWFkIG9uZSBzaG91bGQgcHJvdGVjdCB0aGUgImVudHJ5IHBvaW50IiBvZiB0aGUgcHJvZ3JhbSBieSB1c2luZyBgYGlmCiAgICAgX19uYW1lX18gPT0gJ19fbWFpbl9fJzpgYCBhcyBmb2xsb3dzOjoKIAotICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBmcmVlemVfc3VwcG9ydAorICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBmcmVlemVfc3VwcG9ydCwgc2V0X3N0YXJ0X21ldGhvZAogCiAgICAgICAgZGVmIGZvbygpOgogICAgICAgICAgICBwcmludCgnaGVsbG8nKQogCiAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorICAgICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCiAgICAgICAgICAgIHAgPSBQcm9jZXNzKHRhcmdldD1mb28pCiAgICAgICAgICAgIHAuc3RhcnQoKQogCkBAIC0yNDgyLDI2ICsyNjMwLDcgQEAKICAgIDpsYW5ndWFnZTogcHl0aG9uMwogCiAKLVN5bmNocm9uaXphdGlvbiB0eXBlcyBsaWtlIGxvY2tzLCBjb25kaXRpb25zIGFuZCBxdWV1ZXM6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKLSAgIDpsYW5ndWFnZTogcHl0aG9uMwotCi0KIEFuIGV4YW1wbGUgc2hvd2luZyBob3cgdG8gdXNlIHF1ZXVlcyB0byBmZWVkIHRhc2tzIHRvIGEgY29sbGVjdGlvbiBvZiB3b3JrZXIKIHByb2Nlc3NlcyBhbmQgY29sbGVjdCB0aGUgcmVzdWx0czoKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF93b3JrZXJzLnB5Ci0KLQotQW4gZXhhbXBsZSBvZiBob3cgYSBwb29sIG9mIHdvcmtlciBwcm9jZXNzZXMgY2FuIGVhY2ggcnVuIGEKLTpjbGFzczpgfmh0dHAuc2VydmVyLlNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcmAgaW5zdGFuY2Ugd2hpbGUgc2hhcmluZyBhIHNpbmdsZQotbGlzdGVuaW5nIHNvY2tldC4KLQotLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKLQotCi1Tb21lIHNpbXBsZSBiZW5jaG1hcmtzIGNvbXBhcmluZyA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIHdpdGggOm1vZDpgdGhyZWFkaW5nYDoKLQotLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5Ci0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L25ldHJjLnJzdCBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdAppbmRleCA1NjRmMTAxLi4yM2ZmZWQ2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbmV0cmMucnN0CkBAIC0yOSw3ICsyOSw3IEBACiAgICBUaGlzIGltcGxlbWVudHMgc2VjdXJpdHkgYmVoYXZpb3IgZXF1aXZhbGVudCB0byB0aGF0IG9mIGZ0cCBhbmQgb3RoZXIKICAgIHByb2dyYW1zIHRoYXQgdXNlIDpmaWxlOmAubmV0cmNgLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4zIEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgdGhlIFBPU0lYIHBlcm1pc3Npb24gY2hlY2suCiAKIAogLi4gZXhjZXB0aW9uOjogTmV0cmNQYXJzZUVycm9yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdCBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CmluZGV4IGExNWQ3ZjcuLmE4MTQ1ZmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L25udHBsaWIucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBubnRwbGliYCAtLS0gTk5UUCBwcm90b2NvbCBjbGllbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC03MSw3ICs3MCw3IEBACiAgICByZWFkZXItc3BlY2lmaWMgY29tbWFuZHMsIHN1Y2ggYXMgYGBncm91cGBgLiAgSWYgeW91IGdldCB1bmV4cGVjdGVkCiAgICA6ZXhjOmBOTlRQUGVybWFuZW50RXJyb3JgXCBzLCB5b3UgbWlnaHQgbmVlZCB0byBzZXQgKnJlYWRlcm1vZGUqLgogICAgOmNsYXNzOmBOTlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bwotICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4Yzpgc29ja2V0LmVycm9yYCBleGNlcHRpb25zIGFuZCB0byBjbG9zZSB0aGUgTk5UUAorICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKICAgIGNvbm5lY3Rpb24gd2hlbiBkb25lLiBIZXJlIGlzIGEgc2FtcGxlIG9uIGhvdyB1c2luZyBpdDoKIAogICAgID4+PiBmcm9tIG5udHBsaWIgaW1wb3J0IE5OVFAKQEAgLTEwMyw2ICsxMDIsMTAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgogCiAuLiBleGNlcHRpb246OiBOTlRQRXJyb3IKIApAQCAtMjQyLDYgKzI0NSwxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgogCiAuLiBtZXRob2Q6OiBOTlRQLm5ld2dyb3VwcyhkYXRlLCAqLCBmaWxlPU5vbmUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L251bWVyaWMucnN0IGIvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QKaW5kZXggMjczMmE4NC4uN2M3NmE0NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QKQEAgLTIzLDMgKzIzLDQgQEAKICAgIGRlY2ltYWwucnN0CiAgICBmcmFjdGlvbnMucnN0CiAgICByYW5kb20ucnN0CisgICBzdGF0aXN0aWNzLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0IGIvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CmluZGV4IDAzNTQ3Y2EuLjgwYmFkNzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKQEAgLTExLDYgKzExLDkgQEAKICAgIGltcG9ydCBvcGVyYXRvcgogICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlciwgaWFkZAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9vcGVyYXRvci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YG9wZXJhdG9yYCBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBlZmZpY2llbnQgZnVuY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8KIHRoZSBpbnRyaW5zaWMgb3BlcmF0b3JzIG9mIFB5dGhvbi4gIEZvciBleGFtcGxlLCBgYG9wZXJhdG9yLmFkZCh4LCB5KWBgIGlzCkBAIC0yMzUsNiArMjM4LDE0IEBACiAKIC4uIFhYWDogZmluZCBhIGJldHRlciwgcmVhZGFibGUsIGV4YW1wbGUKIAorLi4gZnVuY3Rpb246OiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCkKKworICAgUmV0dXJuIGFuIGVzdGltYXRlZCBsZW5ndGggZm9yIHRoZSBvYmplY3QgKm8qLiBGaXJzdCB0cnlpbmcgdG8gcmV0dXJuIGl0cworICAgYWN0dWFsIGxlbmd0aCwgdGhlbiBhbiBlc3RpbWF0ZSB1c2luZyA6bWV0aDpgb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfX2AsIGFuZAorICAgZmluYWxseSByZXR1cm5pbmcgdGhlIGRlZmF1bHQgdmFsdWUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUaGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBhbHNvIGRlZmluZXMgdG9vbHMgZm9yIGdlbmVyYWxpemVkIGF0dHJpYnV0ZSBhbmQgaXRlbQogbG9va3Vwcy4gIFRoZXNlIGFyZSB1c2VmdWwgZm9yIG1ha2luZyBmYXN0IGZpZWxkIGV4dHJhY3RvcnMgYXMgYXJndW1lbnRzIGZvcgogOmZ1bmM6YG1hcGAsIDpmdW5jOmBzb3J0ZWRgLCA6bWV0aDpgaXRlcnRvb2xzLmdyb3VwYnlgLCBvciBvdGhlciBmdW5jdGlvbnMgdGhhdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAppbmRleCA1N2E2YmNhLi4yNjk4NTZjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdApAQCAtMjIsNiArMjIsMTEgQEAKIGV4cGxpY2l0bHkgd2hlbiBhbiBhcHBsaWNhdGlvbiBkZXNpcmVzIHNoZWxsLWxpa2UgcGF0aCBleHBhbnNpb24uICAoU2VlIGFsc28KIHRoZSA6bW9kOmBnbG9iYCBtb2R1bGUuKQogCisKKy4uIHNlZWFsc286OgorICAgVGhlIDptb2Q6YHBhdGhsaWJgIG1vZHVsZSBvZmZlcnMgaGlnaC1sZXZlbCBwYXRoIG9iamVjdHMuCisKKwogLi4gbm90ZTo6CiAKICAgIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYWNjZXB0IGVpdGhlciBvbmx5IGJ5dGVzIG9yIG9ubHkgc3RyaW5nIG9iamVjdHMgYXMKQEAgLTQyLDcgKzQ3LDYgQEAKICAgICogOm1vZDpgcG9zaXhwYXRoYCBmb3IgVU5JWC1zdHlsZSBwYXRocwogICAgKiA6bW9kOmBudHBhdGhgIGZvciBXaW5kb3dzIHBhdGhzCiAgICAqIDptb2Q6YG1hY3BhdGhgIGZvciBvbGQtc3R5bGUgTWFjT1MgcGF0aHMKLSAgICogOm1vZDpgb3MyZW14cGF0aGAgZm9yIE9TLzIgRU1YIHBhdGhzCiAKIAogLi4gZnVuY3Rpb246OiBhYnNwYXRoKHBhdGgpCkBAIC0yNTAsMTUgKzI1NCwxNCBAQAogICAgT24gVW5peCwgdGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KICAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCi0KICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgbm93IHVzZXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgYWxsIG90aGVyIHBsYXRmb3Jtcy4KKwogCiAuLiBmdW5jdGlvbjo6IHNhbWVvcGVuZmlsZShmcDEsIGZwMikKIApAQCAtMjc3LDcgKzI4MCwxMCBAQAogICAgOmZ1bmM6YG9zLmxzdGF0YCwgb3IgOmZ1bmM6YG9zLnN0YXRgLiAgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZQogICAgdW5kZXJseWluZyBjb21wYXJpc29uIHVzZWQgYnkgOmZ1bmM6YHNhbWVmaWxlYCBhbmQgOmZ1bmM6YHNhbWVvcGVuZmlsZWAuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIFdpbmRvd3Mgc3VwcG9ydC4KIAogCiAuLiBmdW5jdGlvbjo6IHNwbGl0KHBhdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggMjBmM2U4Ny4uZjVmMmUxNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtNTQsNyArNTQsNyBAQAogCiAgICBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIGltcG9ydGVkLiAgVGhlIGZvbGxvd2luZwogICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsIGBgJ21hYydgYCwKLSAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCisgICBgYCdjZSdgYCwgYGAnamF2YSdgYC4KIAogICAgLi4gc2VlYWxzbzo6CiAgICAgICA6YXR0cjpgc3lzLnBsYXRmb3JtYCBoYXMgYSBmaW5lciBncmFudWxhcml0eS4gIDpmdW5jOmBvcy51bmFtZWAgZ2l2ZXMKQEAgLTY4NSwxNyArNjg1LDMwIEBACiAKIC4uIGZ1bmN0aW9uOjogZHVwKGZkKQogCi0gICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouCisgICBSZXR1cm4gYSBkdXBsaWNhdGUgb2YgZmlsZSBkZXNjcmlwdG9yICpmZCouIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIE9uIFdpbmRvd3MsIHdoZW4gZHVwbGljYXRpbmcgYSBzdGFuZGFyZCBzdHJlYW0gKDA6IHN0ZGluLCAxOiBzdGRvdXQsCisgICAyOiBzdGRlcnIpLCB0aGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBpbmhlcml0YWJsZQorICAgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCiAKLS4uIGZ1bmN0aW9uOjogZHVwMihmZCwgZmQyKQorCisuLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMiwgaW5oZXJpdGFibGU9VHJ1ZSkKIAogICAgRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvciAqZmQqIHRvICpmZDIqLCBjbG9zaW5nIHRoZSBsYXR0ZXIgZmlyc3QgaWYgbmVjZXNzYXJ5LgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciAqZmQyKiBpcyA6cmVmOmBpbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YCBieSBkZWZhdWx0LAorICAgb3Igbm9uLWluaGVyaXRhYmxlIGlmICppbmhlcml0YWJsZSogaXMgYGBGYWxzZWBgLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgdGhlIG9wdGlvbmFsICppbmhlcml0YWJsZSogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogZmNobW9kKGZkLCBtb2RlKQogCkBAIC04NDYsMTcgKzg1OSwyMSBAQAogICAgT3BlbiB0aGUgZmlsZSAqZmlsZSogYW5kIHNldCB2YXJpb3VzIGZsYWdzIGFjY29yZGluZyB0byAqZmxhZ3MqIGFuZCBwb3NzaWJseQogICAgaXRzIG1vZGUgYWNjb3JkaW5nIHRvICptb2RlKi4gIFdoZW4gY29tcHV0aW5nICptb2RlKiwgdGhlIGN1cnJlbnQgdW1hc2sgdmFsdWUKICAgIGlzIGZpcnN0IG1hc2tlZCBvdXQuICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIG5ld2x5IG9wZW5lZCBmaWxlLgorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmxhZyBhbmQgbW9kZSB2YWx1ZXMsIHNlZSB0aGUgQyBydW4tdGltZSBkb2N1bWVudGF0aW9uOwogICAgZmxhZyBjb25zdGFudHMgKGxpa2UgOmNvbnN0OmBPX1JET05MWWAgYW5kIDpjb25zdDpgT19XUk9OTFlgKSBhcmUgZGVmaW5lZCBpbgotICAgdGhpcyBtb2R1bGUgdG9vIChzZWUgOnJlZjpgb3Blbi1jb25zdGFudHNgKS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCisgICB0aGUgOm1vZDpgb3NgIG1vZHVsZS4gIEluIHBhcnRpY3VsYXIsIG9uIFdpbmRvd3MgYWRkaW5nCiAgICA6Y29uc3Q6YE9fQklOQVJZYCBpcyBuZWVkZWQgdG8gb3BlbiBmaWxlcyBpbiBiaW5hcnkgbW9kZS4KIAogICAgVGhpcyBmdW5jdGlvbiBjYW4gc3VwcG9ydCA6cmVmOmBwYXRocyByZWxhdGl2ZSB0byBkaXJlY3RvcnkgZGVzY3JpcHRvcnMKLSAgIDxkaXJfZmQ+YC4KKyAgIDxkaXJfZmQ+YCB3aXRoIHRoZSAqZGlyX2ZkKiBwYXJhbWV0ZXIuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIGZvciBsb3ctbGV2ZWwgSS9PLiAgRm9yIG5vcm1hbCB1c2FnZSwgdXNlIHRoZQpAQCAtODY3LDI1ICs4ODQsOTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQorOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCitgYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgordGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4CitvciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fUkRPTkxZCisgICAgICAgICAgT19XUk9OTFkKKyAgICAgICAgICBPX1JEV1IKKyAgICAgICAgICBPX0FQUEVORAorICAgICAgICAgIE9fQ1JFQVQKKyAgICAgICAgICBPX0VYQ0wKKyAgICAgICAgICBPX1RSVU5DCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fRFNZTkMKKyAgICAgICAgICBPX1JTWU5DCisgICAgICAgICAgT19TWU5DCisgICAgICAgICAgT19OREVMQVkKKyAgICAgICAgICBPX05PTkJMT0NLCisgICAgICAgICAgT19OT0NUVFkKKyAgICAgICAgICBPX1NITE9DSworICAgICAgICAgIE9fRVhMT0NLCisgICAgICAgICAgT19DTE9FWEVDCisKKyAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KKworLi4gZGF0YTo6IE9fQklOQVJZCisgICAgICAgICAgT19OT0lOSEVSSVQKKyAgICAgICAgICBPX1NIT1JUX0xJVkVECisgICAgICAgICAgT19URU1QT1JBUlkKKyAgICAgICAgICBPX1JBTkRPTQorICAgICAgICAgIE9fU0VRVUVOVElBTAorICAgICAgICAgIE9fVEVYVAorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKworLi4gZGF0YTo6IE9fQVNZTkMKKyAgICAgICAgICBPX0RJUkVDVAorICAgICAgICAgIE9fRElSRUNUT1JZCisgICAgICAgICAgT19OT0ZPTExPVworICAgICAgICAgIE9fTk9BVElNRQorICAgICAgICAgIE9fUEFUSAorICAgICAgICAgIE9fVE1QRklMRQorCisgICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQorICAgdGhlIEMgbGlicmFyeS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZCA6ZGF0YTpgT19UTVBGSUxFYCBjb25zdGFudC4gSXQncyBvbmx5IGF2YWlsYWJsZSBvbiBMaW51eCBLZXJuZWwgMy4xMQorICAgICAgb3IgbmV3ZXIuCisKIAogLi4gZnVuY3Rpb246OiBvcGVucHR5KCkKIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IHB0eQogCi0gICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAobWFzdGVyLAotICAgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gRm9yIGEgKHNsaWdodGx5KSBtb3JlIHBvcnRhYmxlCi0gICBhcHByb2FjaCwgdXNlIHRoZSA6bW9kOmBwdHlgIG1vZHVsZS4KKyAgIE9wZW4gYSBuZXcgcHNldWRvLXRlcm1pbmFsIHBhaXIuIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycworICAgYGAobWFzdGVyLCBzbGF2ZSlgYCBmb3IgdGhlIHB0eSBhbmQgdGhlIHR0eSwgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUKKyAgIGRlc2NyaXB0b3JzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuIEZvciBhIChzbGlnaHRseSkgbW9yZQorICAgcG9ydGFibGUgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCiAKICAgIEF2YWlsYWJpbGl0eTogc29tZSBmbGF2b3JzIG9mIFVuaXguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlKCkKIAotICAgQ3JlYXRlIGEgcGlwZS4gIFJldHVybiBhIHBhaXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBgYChyLCB3KWBgIHVzYWJsZSBmb3IgcmVhZGluZwotICAgYW5kIHdyaXRpbmcsIHJlc3BlY3RpdmVseS4KKyAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yCisgICByZWFkaW5nIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzCisgICA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBpcGUyKGZsYWdzKQogCkBAIC0xMDgwLDc4ICsxMTY0LDYgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIF9vcGVuLWNvbnN0YW50czoKLQotYGBvcGVuKClgYCBmbGFnIGNvbnN0YW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQotOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCi1gYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgotdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4Ci1vciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fUkRPTkxZCi0gICAgICAgICAgT19XUk9OTFkKLSAgICAgICAgICBPX1JEV1IKLSAgICAgICAgICBPX0FQUEVORAotICAgICAgICAgIE9fQ1JFQVQKLSAgICAgICAgICBPX0VYQ0wKLSAgICAgICAgICBPX1RSVU5DCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fRFNZTkMKLSAgICAgICAgICBPX1JTWU5DCi0gICAgICAgICAgT19TWU5DCi0gICAgICAgICAgT19OREVMQVkKLSAgICAgICAgICBPX05PTkJMT0NLCi0gICAgICAgICAgT19OT0NUVFkKLSAgICAgICAgICBPX1NITE9DSwotICAgICAgICAgIE9fRVhMT0NLCi0gICAgICAgICAgT19DTE9FWEVDCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KLQotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KLQotLi4gZGF0YTo6IE9fQklOQVJZCi0gICAgICAgICAgT19OT0lOSEVSSVQKLSAgICAgICAgICBPX1NIT1JUX0xJVkVECi0gICAgICAgICAgT19URU1QT1JBUlkKLSAgICAgICAgICBPX1JBTkRPTQotICAgICAgICAgIE9fU0VRVUVOVElBTAotICAgICAgICAgIE9fVEVYVAotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fQVNZTkMKLSAgICAgICAgICBPX0RJUkVDVAotICAgICAgICAgIE9fRElSRUNUT1JZCi0gICAgICAgICAgT19OT0ZPTExPVwotICAgICAgICAgIE9fTk9BVElNRQotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQotICAgdGhlIEMgbGlicmFyeS4KLQotCi0uLiBkYXRhOjogUlRMRF9MQVpZCi0gICAgICAgICAgUlRMRF9OT1cKLSAgICAgICAgICBSVExEX0dMT0JBTAotICAgICAgICAgIFJUTERfTE9DQUwKLSAgICAgICAgICBSVExEX05PREVMRVRFCi0gICAgICAgICAgUlRMRF9OT0xPQUQKLSAgICAgICAgICBSVExEX0RFRVBCSU5ECi0KLSAgIFNlZSB0aGUgVW5peCBtYW51YWwgcGFnZSA6bWFucGFnZTpgZGxvcGVuKDMpYC4KLQotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0KLQogLi4gX3Rlcm1pbmFsLXNpemU6CiAKIFF1ZXJ5aW5nIHRoZSBzaXplIG9mIGEgdGVybWluYWwKQEAgLTExODksNiArMTIwMSw0OSBAQAogICAgICAgSGVpZ2h0IG9mIHRoZSB0ZXJtaW5hbCB3aW5kb3cgaW4gY2hhcmFjdGVycy4KIAogCisuLiBfZmRfaW5oZXJpdGFuY2U6CisKK0luaGVyaXRhbmNlIG9mIEZpbGUgRGVzY3JpcHRvcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK0EgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbiAiaW5oZXJpdGFibGUiIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IKK2NhbiBiZSBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLiAgU2luY2UgUHl0aG9uIDMuNCwgZmlsZSBkZXNjcmlwdG9ycworY3JlYXRlZCBieSBQeXRob24gYXJlIG5vbi1pbmhlcml0YWJsZSBieSBkZWZhdWx0LgorCitPbiBVTklYLCBub24taW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkIHByb2Nlc3NlcyBhdCB0aGUKK2V4ZWN1dGlvbiBvZiBhIG5ldyBwcm9ncmFtLCBvdGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCisKK09uIFdpbmRvd3MsIG5vbi1pbmhlcml0YWJsZSBoYW5kbGVzIGFuZCBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaW4gY2hpbGQKK3Byb2Nlc3NlcywgZXhjZXB0IGZvciBzdGFuZGFyZCBzdHJlYW1zIChmaWxlIGRlc2NyaXB0b3JzIDAsIDEgYW5kIDI6IHN0ZGluLCBzdGRvdXQKK2FuZCBzdGRlcnIpLCB3aGljaCBhcmUgYWx3YXlzIGluaGVyaXRlZC4gIFVzaW5nIDpmdW5jOmBzcGF3blwqIDxzcGF3bmw+YCBmdW5jdGlvbnMsCithbGwgaW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgYWxsIGluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGluaGVyaXRlZC4KK1VzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUsIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGV4Y2VwdCBzdGFuZGFyZAorc3RyZWFtcyBhcmUgY2xvc2VkLCBhbmQgaW5oZXJpdGFibGUgaGFuZGxlcyBhcmUgb25seSBpbmhlcml0ZWQgaWYgdGhlCisqY2xvc2VfZmRzKiBwYXJhbWV0ZXIgaXMgYGBGYWxzZWBgLgorCisuLiBmdW5jdGlvbjo6IGdldF9pbmhlcml0YWJsZShmZCkKKworICAgR2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IgKGEgYm9vbGVhbikuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlIChhIGJvb2xlYW4pLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUsIGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisKIC4uIF9vcy1maWxlLWRpcjoKIAogRmlsZXMgYW5kIERpcmVjdG9yaWVzCkBAIC0zMDQ3LDcgKzMxMDIsNyBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIGEgc3VwcG9ydGVkIGJ5IHRoZQorVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUKIG9wZXJhdGluZyBzeXN0ZW0uCiAKIC4uIGRhdGE6OiBTQ0hFRF9PVEhFUgpAQCAtMzE1NiwxMCArMzIxMSw2IEBACiAgICBSZXR1cm4gdGhlIHNldCBvZiBDUFVzIHRoZSBwcm9jZXNzIHdpdGggUElEICpwaWQqIChvciB0aGUgY3VycmVudCBwcm9jZXNzCiAgICBpZiB6ZXJvKSBpcyByZXN0cmljdGVkIHRvLgogCi0gICAuLiBzZWVhbHNvOjoKLSAgICAgIDpmdW5jOmBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50YCByZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUKLSAgICAgIHN5c3RlbS4KLQogCiAuLiBfb3MtcGF0aDoKIApAQCAtMzE5Nyw2ICszMjQ4LDEzIEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uIFJldHVybnMgTm9uZSBpZiB1bmRldGVybWluZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0bG9hZGF2ZygpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgc3lzdGVtIHJ1biBxdWV1ZSBhdmVyYWdlZCBvdmVyIHRoZSBsYXN0CkBAIC0zMjk1LDYgKzMzNTMsMTkgQEAKICAgIFRoZSBmaWxlIHBhdGggb2YgdGhlIG51bGwgZGV2aWNlLiBGb3IgZXhhbXBsZTogYGAnL2Rldi9udWxsJ2BgIGZvcgogICAgUE9TSVgsIGBgJ251bCdgYCBmb3IgV2luZG93cy4gIEFsc28gYXZhaWxhYmxlIHZpYSA6bW9kOmBvcy5wYXRoYC4KIAorLi4gZGF0YTo6IFJUTERfTEFaWQorICAgICAgICAgIFJUTERfTk9XCisgICAgICAgICAgUlRMRF9HTE9CQUwKKyAgICAgICAgICBSVExEX0xPQ0FMCisgICAgICAgICAgUlRMRF9OT0RFTEVURQorICAgICAgICAgIFJUTERfTk9MT0FECisgICAgICAgICAgUlRMRF9ERUVQQklORAorCisgICBGbGFncyBmb3IgdXNlIHdpdGggdGhlIDpmdW5jOmB+c3lzLnNldGRsb3BlbmZsYWdzYCBhbmQKKyAgIDpmdW5jOmB+c3lzLmdldGRsb3BlbmZsYWdzYCBmdW5jdGlvbnMuICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UKKyAgIDptYW5wYWdlOmBkbG9wZW4oMylgIGZvciB3aGF0IHRoZSBkaWZmZXJlbnQgZmxhZ3MgbWVhbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIF9vcy1taXNjZnVuYzoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcgYi9Eb2MvbGlicmFyeS9wYXRobGliLWluaGVyaXRhbmNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODFjM2RlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wYXRobGliLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGMxZGM5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi5yc3QKQEAgLTAsMCArMSw4ODUgQEAKKworOm1vZDpgcGF0aGxpYmAgLS0tIE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogcGF0aGxpYgorICAgOnN5bm9wc2lzOiBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworCisuLiBpbmRleDo6IHNpbmdsZTogcGF0aDsgb3BlcmF0aW9ucworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhpcyBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMgd2l0aCBzZW1hbnRpY3MKK2FwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlIGRpdmlkZWQKK2JldHdlZW4gOnJlZjpgcHVyZSBwYXRocyA8cHVyZS1wYXRocz5gLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsCitvcGVyYXRpb25zIHdpdGhvdXQgSS9PLCBhbmQgOnJlZjpgY29uY3JldGUgcGF0aHMgPGNvbmNyZXRlLXBhdGhzPmAsIHdoaWNoCitpbmhlcml0IGZyb20gcHVyZSBwYXRocyBidXQgYWxzbyBwcm92aWRlIEkvTyBvcGVyYXRpb25zLgorCisuLiBpbWFnZTo6IHBhdGhsaWItaW5oZXJpdGFuY2UucG5nCisgICA6YWxpZ246IGNlbnRlcgorCitJZiB5b3UndmUgbmV2ZXIgdXNlZCB0aGlzIG1vZHVsZSBiZWZvcmUgb3IganVzdCBhcmVuJ3Qgc3VyZSB3aGljaCBjbGFzcyBpcworcmlnaHQgZm9yIHlvdXIgdGFzaywgOmNsYXNzOmBQYXRoYCBpcyBtb3N0IGxpa2VseSB3aGF0IHlvdSBuZWVkLiBJdCBpbnN0YW50aWF0ZXMKK2EgOnJlZjpgY29uY3JldGUgcGF0aCA8Y29uY3JldGUtcGF0aHM+YCBmb3IgdGhlIHBsYXRmb3JtIHRoZSBjb2RlIGlzIHJ1bm5pbmcgb24uCisKK1B1cmUgcGF0aHMgYXJlIHVzZWZ1bCBpbiBzb21lIHNwZWNpYWwgY2FzZXM7IGZvciBleGFtcGxlOgorCisjLiBJZiB5b3Ugd2FudCB0byBtYW5pcHVsYXRlIFdpbmRvd3MgcGF0aHMgb24gYSBVbml4IG1hY2hpbmUgKG9yIHZpY2UgdmVyc2EpLgorICAgWW91IGNhbm5vdCBpbnN0YW50aWF0ZSBhIDpjbGFzczpgV2luZG93c1BhdGhgIHdoZW4gcnVubmluZyBvbiBVbml4LCBidXQgeW91CisgICBjYW4gaW5zdGFudGlhdGUgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLgorIy4gWW91IHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgeW91ciBjb2RlIG9ubHkgbWFuaXB1bGF0ZXMgcGF0aHMgd2l0aG91dCBhY3R1YWxseQorICAgYWNjZXNzaW5nIHRoZSBPUy4gSW4gdGhpcyBjYXNlLCBpbnN0YW50aWF0aW5nIG9uZSBvZiB0aGUgcHVyZSBjbGFzc2VzIG1heSBiZQorICAgdXNlZnVsIHNpbmNlIHRob3NlIHNpbXBseSBkb24ndCBoYXZlIGFueSBPUy1hY2Nlc3Npbmcgb3BlcmF0aW9ucy4KKworLi4gbm90ZTo6CisgICBUaGlzIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBwYWNrYWdlKSBtYXkgb2NjdXIgaWYgZGVlbWVkCisgICBuZWNlc3NhcnkgYnkgdGhlIGNvcmUgZGV2ZWxvcGVycy4KKworLi4gc2VlYWxzbzo6CisgICA6cGVwOmA0MjhgOiBUaGUgcGF0aGxpYiBtb2R1bGUgLS0gb2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMuCisKKy4uIHNlZWFsc286OgorICAgRm9yIGxvdy1sZXZlbCBwYXRoIG1hbmlwdWxhdGlvbiBvbiBzdHJpbmdzLCB5b3UgY2FuIGFsc28gdXNlIHRoZQorICAgOm1vZDpgb3MucGF0aGAgbW9kdWxlLgorCisKK0Jhc2ljIHVzZQorLS0tLS0tLS0tCisKK0ltcG9ydGluZyB0aGUgbWFpbiBjbGFzczo6CisKKyAgID4+PiBmcm9tIHBhdGhsaWIgaW1wb3J0IFBhdGgKKworTGlzdGluZyBzdWJkaXJlY3Rvcmllczo6CisKKyAgID4+PiBwID0gUGF0aCgnLicpCisgICA+Pj4gW3ggZm9yIHggaW4gcC5pdGVyZGlyKCkgaWYgeC5pc19kaXIoKV0KKyAgIFtQb3NpeFBhdGgoJy5oZycpLCBQb3NpeFBhdGgoJ2RvY3MnKSwgUG9zaXhQYXRoKCdkaXN0JyksCisgICAgUG9zaXhQYXRoKCdfX3B5Y2FjaGVfXycpLCBQb3NpeFBhdGgoJ2J1aWxkJyldCisKK0xpc3RpbmcgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSB0cmVlOjoKKworICAgPj4+IGxpc3QocC5nbG9iKCcqKi8qLnB5JykpCisgICBbUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLCBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgIFBvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKV0KKworTmF2aWdhdGluZyBpbnNpZGUgYSBkaXJlY3RvcnkgdHJlZTo6CisKKyAgID4+PiBwID0gUGF0aCgnL2V0YycpCisgICA+Pj4gcSA9IHAgLyAnaW5pdC5kJyAvICdyZWJvb3QnCisgICA+Pj4gcQorICAgUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9yZWJvb3QnKQorICAgPj4+IHEucmVzb2x2ZSgpCisgICBQb3NpeFBhdGgoJy9ldGMvcmMuZC9pbml0LmQvaGFsdCcpCisKK1F1ZXJ5aW5nIHBhdGggcHJvcGVydGllczo6CisKKyAgID4+PiBxLmV4aXN0cygpCisgICBUcnVlCisgICA+Pj4gcS5pc19kaXIoKQorICAgRmFsc2UKKworT3BlbmluZyBhIGZpbGU6OgorCisgICA+Pj4gd2l0aCBxLm9wZW4oKSBhcyBmOiBmLnJlYWRsaW5lKCkKKyAgIC4uLgorICAgJyMhL2Jpbi9iYXNoXG4nCisKKworLi4gX3B1cmUtcGF0aHM6CisKK1B1cmUgcGF0aHMKKy0tLS0tLS0tLS0KKworUHVyZSBwYXRoIG9iamVjdHMgcHJvdmlkZSBwYXRoLWhhbmRsaW5nIG9wZXJhdGlvbnMgd2hpY2ggZG9uJ3QgYWN0dWFsbHkKK2FjY2VzcyBhIGZpbGVzeXN0ZW0uICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBhY2Nlc3MgdGhlc2UgY2xhc3Nlcywgd2hpY2gKK3dlIGFsc28gY2FsbCAqZmxhdm91cnMqOgorCisuLiBjbGFzczo6IFB1cmVQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgZ2VuZXJpYyBjbGFzcyB0aGF0IHJlcHJlc2VudHMgdGhlIHN5c3RlbSdzIHBhdGggZmxhdm91ciAoaW5zdGFudGlhdGluZworICAgaXQgY3JlYXRlcyBlaXRoZXIgYSA6Y2xhc3M6YFB1cmVQb3NpeFBhdGhgIG9yIGEgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgKTo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnc2V0dXAucHknKSAgICAgICMgUnVubmluZyBvbiBhIFVuaXggbWFjaGluZQorICAgICAgUHVyZVBvc2l4UGF0aCgnc2V0dXAucHknKQorCisgICBFYWNoIGVsZW1lbnQgb2YgKnBhdGhzZWdtZW50cyogY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBieXRlcyBvYmplY3QKKyAgIHJlcHJlc2VudGluZyBhIHBhdGggc2VnbWVudDsgaXQgY2FuIGFsc28gYmUgYW5vdGhlciBwYXRoIG9iamVjdDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vJywgJ3NvbWUvcGF0aCcsICdiYXInKQorICAgICAgUHVyZVBvc2l4UGF0aCgnZm9vL3NvbWUvcGF0aC9iYXInKQorICAgICAgPj4+IFB1cmVQYXRoKFBhdGgoJ2ZvbycpLCBQYXRoKCdiYXInKSkKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9iYXInKQorCisgICBXaGVuICpwYXRoc2VnbWVudHMqIGlzIGVtcHR5LCB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgYXNzdW1lZDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgpCisgICAgICBQdXJlUG9zaXhQYXRoKCcuJykKKworICAgV2hlbiBzZXZlcmFsIGFic29sdXRlIHBhdGhzIGFyZSBnaXZlbiwgdGhlIGxhc3QgaXMgdGFrZW4gYXMgYW4gYW5jaG9yCisgICAobWltaWNraW5nIDpmdW5jOmBvcy5wYXRoLmpvaW5gJ3MgYmVoYXZpb3VyKTo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnL2V0YycsICcvdXNyJywgJ2xpYjY0JykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy91c3IvbGliNjQnKQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICdkOmJhcicpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2Q6YmFyJykKKworICAgSG93ZXZlciwgaW4gYSBXaW5kb3dzIHBhdGgsIGNoYW5naW5nIHRoZSBsb2NhbCByb290IGRvZXNuJ3QgZGlzY2FyZCB0aGUKKyAgIHByZXZpb3VzIGRyaXZlIHNldHRpbmc6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9XaW5kb3dzJywgJy9Qcm9ncmFtIEZpbGVzJykKKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisKKyAgIFNwdXJpb3VzIHNsYXNoZXMgYW5kIHNpbmdsZSBkb3RzIGFyZSBjb2xsYXBzZWQsIGJ1dCBkb3VibGUgZG90cyAoYGAnLi4nYGApCisgICBhcmUgbm90LCBzaW5jZSB0aGlzIHdvdWxkIGNoYW5nZSB0aGUgbWVhbmluZyBvZiBhIHBhdGggaW4gdGhlIGZhY2Ugb2YKKyAgIHN5bWJvbGljIGxpbmtzOjoKKworICAgICAgPj4+IFB1cmVQYXRoKCdmb28vL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy4vYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9iYXInKQorICAgICAgPj4+IFB1cmVQYXRoKCdmb28vLi4vYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby8uLi9iYXInKQorCisgICAoYSBuYcOvdmUgYXBwcm9hY2ggd291bGQgbWFrZSBgYFB1cmVQb3NpeFBhdGgoJ2Zvby8uLi9iYXInKWBgIGVxdWl2YWxlbnQKKyAgIHRvIGBgUHVyZVBvc2l4UGF0aCgnYmFyJylgYCwgd2hpY2ggaXMgd3JvbmcgaWYgYGBmb29gYCBpcyBhIHN5bWJvbGljIGxpbmsKKyAgIHRvIGFub3RoZXIgZGlyZWN0b3J5KQorCisuLiBjbGFzczo6IFB1cmVQb3NpeFBhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBwYXRoIGZsYXZvdXIgcmVwcmVzZW50cyBub24tV2luZG93cworICAgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFB1cmVXaW5kb3dzUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUHVyZVBhdGhgLCB0aGlzIHBhdGggZmxhdm91ciByZXByZXNlbnRzIFdpbmRvd3MKKyAgIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCitSZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0geW91J3JlIHJ1bm5pbmcgb24sIHlvdSBjYW4gaW5zdGFudGlhdGUgYWxsIG9mCit0aGVzZSBjbGFzc2VzLCBzaW5jZSB0aGV5IGRvbid0IHByb3ZpZGUgYW55IG9wZXJhdGlvbiB0aGF0IGRvZXMgc3lzdGVtIGNhbGxzLgorCisKK0dlbmVyYWwgcHJvcGVydGllcworXl5eXl5eXl5eXl5eXl5eXl5eCisKK1BhdGhzIGFyZSBpbW11dGFibGUgYW5kIGhhc2hhYmxlLiAgUGF0aHMgb2YgYSBzYW1lIGZsYXZvdXIgYXJlIGNvbXBhcmFibGUKK2FuZCBvcmRlcmFibGUuICBUaGVzZSBwcm9wZXJ0aWVzIHJlc3BlY3QgdGhlIGZsYXZvdXIncyBjYXNlLWZvbGRpbmcKK3NlbWFudGljczo6CisKKyAgID4+PiBQdXJlUG9zaXhQYXRoKCdmb28nKSA9PSBQdXJlUG9zaXhQYXRoKCdGT08nKQorICAgRmFsc2UKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpID09IFB1cmVXaW5kb3dzUGF0aCgnRk9PJykKKyAgIFRydWUKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ0ZPTycpIGluIHsgUHVyZVdpbmRvd3NQYXRoKCdmb28nKSB9CisgICBUcnVlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdDOicpIDwgUHVyZVdpbmRvd3NQYXRoKCdkOicpCisgICBUcnVlCisKK1BhdGhzIG9mIGEgZGlmZmVyZW50IGZsYXZvdXIgY29tcGFyZSB1bmVxdWFsIGFuZCBjYW5ub3QgYmUgb3JkZXJlZDo6CisKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpID09IFB1cmVQb3NpeFBhdGgoJ2ZvbycpCisgICBGYWxzZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgPCBQdXJlUG9zaXhQYXRoKCdmb28nKQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgVHlwZUVycm9yOiB1bm9yZGVyYWJsZSB0eXBlczogUHVyZVdpbmRvd3NQYXRoKCkgPCBQdXJlUG9zaXhQYXRoKCkKKworCitPcGVyYXRvcnMKK15eXl5eXl5eXgorCitUaGUgc2xhc2ggb3BlcmF0b3IgaGVscHMgY3JlYXRlIGNoaWxkIHBhdGhzLCBzaW1pbGFybHkgdG8gOmZ1bmM6YG9zLnBhdGguam9pbmA6OgorCisgICA+Pj4gcCA9IFB1cmVQYXRoKCcvZXRjJykKKyAgID4+PiBwCisgICBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKyAgID4+PiBwIC8gJ2luaXQuZCcgLyAnYXBhY2hlMicKKyAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL2FwYWNoZTInKQorICAgPj4+IHEgPSBQdXJlUGF0aCgnYmluJykKKyAgID4+PiAnL3VzcicgLyBxCisgICBQdXJlUG9zaXhQYXRoKCcvdXNyL2JpbicpCisKK1RoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBwYXRoIGlzIHRoZSByYXcgZmlsZXN5c3RlbSBwYXRoIGl0c2VsZgorKGluIG5hdGl2ZSBmb3JtLCBlLmcuIHdpdGggYmFja3NsYXNoZXMgdW5kZXIgV2luZG93cyksIHdoaWNoIHlvdSBjYW4KK3Bhc3MgdG8gYW55IGZ1bmN0aW9uIHRha2luZyBhIGZpbGUgcGF0aCBhcyBhIHN0cmluZzo6CisKKyAgID4+PiBwID0gUHVyZVBhdGgoJy9ldGMnKQorICAgPj4+IHN0cihwKQorICAgJy9ldGMnCisgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisgICA+Pj4gc3RyKHApCisgICAnYzpcXFByb2dyYW0gRmlsZXMnCisKK1NpbWlsYXJseSwgY2FsbGluZyA6Y2xhc3M6YGJ5dGVzYCBvbiBhIHBhdGggZ2l2ZXMgdGhlIHJhdyBmaWxlc3lzdGVtIHBhdGggYXMgYQorYnl0ZXMgb2JqZWN0LCBhcyBlbmNvZGVkIGJ5IDpmdW5jOmBvcy5mc2VuY29kZWA6OgorCisgICA+Pj4gYnl0ZXMocCkKKyAgIGInL2V0YycKKworLi4gbm90ZTo6CisgICBDYWxsaW5nIDpjbGFzczpgYnl0ZXNgIGlzIG9ubHkgcmVjb21tZW5kZWQgdW5kZXIgVW5peC4gIFVuZGVyIFdpbmRvd3MsCisgICB0aGUgdW5pY29kZSBmb3JtIGlzIHRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gb2YgZmlsZXN5c3RlbSBwYXRocy4KKworCitBY2Nlc3NpbmcgaW5kaXZpZHVhbCBwYXJ0cworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVG8gYWNjZXNzIHRoZSBpbmRpdmlkdWFsICJwYXJ0cyIgKGNvbXBvbmVudHMpIG9mIGEgcGF0aCwgdXNlIHRoZSBmb2xsb3dpbmcKK3Byb3BlcnR5OgorCisuLiBkYXRhOjogUHVyZVBhdGgucGFydHMKKworICAgQSB0dXBsZSBnaXZpbmcgYWNjZXNzIHRvIHRoZSBwYXRoJ3MgdmFyaW91cyBjb21wb25lbnRzOjoKKworICAgICAgPj4+IHAgPSBQdXJlUGF0aCgnL3Vzci9iaW4vcHl0aG9uMycpCisgICAgICA+Pj4gcC5wYXJ0cworICAgICAgKCcvJywgJ3VzcicsICdiaW4nLCAncHl0aG9uMycpCisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzL1BTRicpCisgICAgICA+Pj4gcC5wYXJ0cworICAgICAgKCdjOlxcJywgJ1Byb2dyYW0gRmlsZXMnLCAnUFNGJykKKworICAgKG5vdGUgaG93IHRoZSBkcml2ZSBhbmQgbG9jYWwgcm9vdCBhcmUgcmVncm91cGVkIGluIGEgc2luZ2xlIHBhcnQpCisKKworTWV0aG9kcyBhbmQgcHJvcGVydGllcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitQdXJlIHBhdGhzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzOgorCisuLiBkYXRhOjogUHVyZVBhdGguZHJpdmUKKworICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkcml2ZSBsZXR0ZXIgb3IgbmFtZSwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5kcml2ZQorICAgICAgJ2M6JworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnL1Byb2dyYW0gRmlsZXMvJykuZHJpdmUKKyAgICAgICcnCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmRyaXZlCisgICAgICAnJworCisgICBVTkMgc2hhcmVzIGFyZSBhbHNvIGNvbnNpZGVyZWQgZHJpdmVzOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlL2Zvby50eHQnKS5kcml2ZQorICAgICAgJ1xcXFxob3N0XFxzaGFyZScKKworLi4gZGF0YTo6IFB1cmVQYXRoLnJvb3QKKworICAgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSAobG9jYWwgb3IgZ2xvYmFsKSByb290LCBpZiBhbnk6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzLycpLnJvb3QKKyAgICAgICdcXCcKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5yb290CisgICAgICAnJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5yb290CisgICAgICAnLycKKworICAgVU5DIHNoYXJlcyBhbHdheXMgaGF2ZSBhIHJvb3Q6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL2hvc3Qvc2hhcmUnKS5yb290CisgICAgICAnXFwnCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5hbmNob3IKKworICAgVGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGRyaXZlIGFuZCByb290OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5hbmNob3IKKyAgICAgICdjOlxcJworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLmFuY2hvcgorICAgICAgJ2M6JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5hbmNob3IKKyAgICAgICcvJworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlJykuYW5jaG9yCisgICAgICAnXFxcXGhvc3RcXHNoYXJlXFwnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcmVudHMKKworICAgQW4gaW1tdXRhYmxlIHNlcXVlbmNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGxvZ2ljYWwgYW5jZXN0b3JzIG9mCisgICB0aGUgcGF0aDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9mb28vYmFyL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnBhcmVudHNbMF0KKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovZm9vL2JhcicpCisgICAgICA+Pj4gcC5wYXJlbnRzWzFdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L2ZvbycpCisgICAgICA+Pj4gcC5wYXJlbnRzWzJdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6LycpCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcmVudAorCisgICBUaGUgbG9naWNhbCBwYXJlbnQgb2YgdGhlIHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy9hL2IvYy9kJykKKyAgICAgID4+PiBwLnBhcmVudAorICAgICAgUHVyZVBvc2l4UGF0aCgnL2EvYi9jJykKKworICAgWW91IGNhbm5vdCBnbyBwYXN0IGFuIGFuY2hvciwgb3IgZW1wdHkgcGF0aDo6CisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnLycpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy8nKQorICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcuJykKKyAgICAgID4+PiBwLnBhcmVudAorICAgICAgUHVyZVBvc2l4UGF0aCgnLicpCisKKyAgIC4uIG5vdGU6OgorICAgICAgVGhpcyBpcyBhIHB1cmVseSBsZXhpY2FsIG9wZXJhdGlvbiwgaGVuY2UgdGhlIGZvbGxvd2luZyBiZWhhdmlvdXI6OgorCisgICAgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJ2Zvby8uLicpCisgICAgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgICAgIFB1cmVQb3NpeFBhdGgoJ2ZvbycpCisKKyAgICAgIElmIHlvdSB3YW50IHRvIHdhbGsgYW4gYXJiaXRyYXJ5IGZpbGVzeXN0ZW0gcGF0aCB1cHdhcmRzLCBpdCBpcworICAgICAgcmVjb21tZW5kZWQgdG8gZmlyc3QgY2FsbCA6bWV0aDpgUGF0aC5yZXNvbHZlYCBzbyBhcyB0byByZXNvbHZlCisgICAgICBzeW1saW5rcyBhbmQgZWxpbWluYXRlIGAiLi4iYCBjb21wb25lbnRzLgorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5uYW1lCisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZmluYWwgcGF0aCBjb21wb25lbnQsIGV4Y2x1ZGluZyB0aGUgZHJpdmUgYW5kCisgICByb290LCBpZiBhbnk6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS9zZXR1cC5weScpLm5hbWUKKyAgICAgICdzZXR1cC5weScKKworICAgVU5DIGRyaXZlIG5hbWVzIGFyZSBub3QgY29uc2lkZXJlZDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZS9zZXR1cC5weScpLm5hbWUKKyAgICAgICdzZXR1cC5weScKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZScpLm5hbWUKKyAgICAgICcnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnN1ZmZpeAorCisgICBUaGUgZmlsZSBleHRlbnNpb24gb2YgdGhlIGZpbmFsIGNvbXBvbmVudCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkvc2V0dXAucHknKS5zdWZmaXgKKyAgICAgICcucHknCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXIuZ3onKS5zdWZmaXgKKyAgICAgICcuZ3onCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeScpLnN1ZmZpeAorICAgICAgJycKKworCisuLiBkYXRhOjogUHVyZVBhdGguc3VmZml4ZXMKKworICAgQSBsaXN0IG9mIHRoZSBwYXRoJ3MgZmlsZSBleHRlbnNpb25zOjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmdhcicpLnN1ZmZpeGVzCisgICAgICBbJy50YXInLCAnLmdhciddCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeS50YXIuZ3onKS5zdWZmaXhlcworICAgICAgWycudGFyJywgJy5neiddCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeScpLnN1ZmZpeGVzCisgICAgICBbXQorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5zdGVtCisKKyAgIFRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgd2l0aG91dCBpdHMgc3VmZml4OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3RlbQorICAgICAgJ2xpYnJhcnkudGFyJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyJykuc3RlbQorICAgICAgJ2xpYnJhcnknCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnbXkvbGlicmFyeScpLnN0ZW0KKyAgICAgICdsaWJyYXJ5JworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmFzX3Bvc2l4KCkKKworICAgUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoIHdpdGggZm9yd2FyZCBzbGFzaGVzIChgYC9gYCk6OgorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzpcXHdpbmRvd3MnKQorICAgICAgPj4+IHN0cihwKQorICAgICAgJ2M6XFx3aW5kb3dzJworICAgICAgPj4+IHAuYXNfcG9zaXgoKQorICAgICAgJ2M6L3dpbmRvd3MnCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguYXNfdXJpKCkKKworICAgUmVwcmVzZW50IHRoZSBwYXRoIGFzIGEgYGBmaWxlYGAgVVJJLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmCisgICB0aGUgcGF0aCBpc24ndCBhYnNvbHV0ZS4KKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5hc191cmkoKQorICAgICAgJ2ZpbGU6Ly8vZXRjL3Bhc3N3ZCcKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9XaW5kb3dzJykKKyAgICAgID4+PiBwLmFzX3VyaSgpCisgICAgICAnZmlsZTovLy9jOi9XaW5kb3dzJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmlzX2Fic29sdXRlKCkKKworICAgUmV0dXJuIHdoZXRoZXIgdGhlIHBhdGggaXMgYWJzb2x1dGUgb3Igbm90LiAgQSBwYXRoIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUKKyAgIGlmIGl0IGhhcyBib3RoIGEgcm9vdCBhbmQgKGlmIHRoZSBmbGF2b3VyIGFsbG93cykgYSBkcml2ZTo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIEZhbHNlCisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy9hL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzonKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9zb21lL3NoYXJlJykuaXNfYWJzb2x1dGUoKQorICAgICAgVHJ1ZQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmlzX3Jlc2VydmVkKCkKKworICAgV2l0aCA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGAsIHJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBpcyBjb25zaWRlcmVkCisgICByZXNlcnZlZCB1bmRlciBXaW5kb3dzLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLiAgV2l0aCA6Y2xhc3M6YFB1cmVQb3NpeFBhdGhgLAorICAgYGBGYWxzZWBgIGlzIGFsd2F5cyByZXR1cm5lZC4KKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnbnVsJykuaXNfcmVzZXJ2ZWQoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ251bCcpLmlzX3Jlc2VydmVkKCkKKyAgICAgIEZhbHNlCisKKyAgIEZpbGUgc3lzdGVtIGNhbGxzIG9uIHJlc2VydmVkIHBhdGhzIGNhbiBmYWlsIG15c3RlcmlvdXNseSBvciBoYXZlCisgICB1bmludGVuZGVkIGVmZmVjdHMuCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGguam9pbnBhdGgoKm90aGVyKQorCisgICBDYWxsaW5nIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG8gY29tYmluaW5nIHRoZSBwYXRoIHdpdGggZWFjaCBvZgorICAgdGhlICpvdGhlciogYXJndW1lbnRzIGluIHR1cm46OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmpvaW5wYXRoKCdwYXNzd2QnKQorICAgICAgUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5qb2lucGF0aChQdXJlUG9zaXhQYXRoKCdwYXNzd2QnKSkKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuam9pbnBhdGgoJ2luaXQuZCcsICdhcGFjaGUyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL2FwYWNoZTInKQorICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzonKS5qb2lucGF0aCgnL1Byb2dyYW0gRmlsZXMnKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5tYXRjaChwYXR0ZXJuKQorCisgICBNYXRjaCB0aGlzIHBhdGggYWdhaW5zdCB0aGUgcHJvdmlkZWQgZ2xvYi1zdHlsZSBwYXR0ZXJuLiAgUmV0dXJuIGBgVHJ1ZWBgCisgICBpZiBtYXRjaGluZyBpcyBzdWNjZXNzZnVsLCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgorCisgICBJZiAqcGF0dGVybiogaXMgcmVsYXRpdmUsIHRoZSBwYXRoIGNhbiBiZSBlaXRoZXIgcmVsYXRpdmUgb3IgYWJzb2x1dGUsCisgICBhbmQgbWF0Y2hpbmcgaXMgZG9uZSBmcm9tIHRoZSByaWdodDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnYS9iLnB5JykubWF0Y2goJyoucHknKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQYXRoKCcvYS9iL2MucHknKS5tYXRjaCgnYi8qLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EvYi9jLnB5JykubWF0Y2goJ2EvKi5weScpCisgICAgICBGYWxzZQorCisgICBJZiAqcGF0dGVybiogaXMgYWJzb2x1dGUsIHRoZSBwYXRoIG11c3QgYmUgYWJzb2x1dGUsIGFuZCB0aGUgd2hvbGUgcGF0aAorICAgbXVzdCBtYXRjaDo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EucHknKS5tYXRjaCgnLyoucHknKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFB1cmVQYXRoKCdhL2IucHknKS5tYXRjaCgnLyoucHknKQorICAgICAgRmFsc2UKKworICAgQXMgd2l0aCBvdGhlciBtZXRob2RzLCBjYXNlLXNlbnNpdGl2aXR5IGlzIG9ic2VydmVkOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYi5weScpLm1hdGNoKCcqLlBZJykKKyAgICAgIFRydWUKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5yZWxhdGl2ZV90bygqb3RoZXIpCisKKyAgIENvbXB1dGUgYSB2ZXJzaW9uIG9mIHRoaXMgcGF0aCByZWxhdGl2ZSB0byB0aGUgcGF0aCByZXByZXNlbnRlZCBieQorICAgKm90aGVyKi4gIElmIGl0J3MgaW1wb3NzaWJsZSwgVmFsdWVFcnJvciBpcyByYWlzZWQ6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IHAucmVsYXRpdmVfdG8oJy9ldGMnKQorICAgICAgUHVyZVBvc2l4UGF0aCgncGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvdXNyJykKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgICAgRmlsZSAicGF0aGxpYi5weSIsIGxpbmUgNjk0LCBpbiByZWxhdGl2ZV90bworICAgICAgICAgIC5mb3JtYXQoc3RyKHNlbGYpLCBzdHIoZm9ybWF0dGVkKSkpCisgICAgICBWYWx1ZUVycm9yOiAnL2V0Yy9wYXNzd2QnIGRvZXMgbm90IHN0YXJ0IHdpdGggJy91c3InCisKKworLi4gX2NvbmNyZXRlLXBhdGhzOgorCisKK0NvbmNyZXRlIHBhdGhzCistLS0tLS0tLS0tLS0tLQorCitDb25jcmV0ZSBwYXRocyBhcmUgc3ViY2xhc3NlcyBvZiB0aGUgcHVyZSBwYXRoIGNsYXNzZXMuICBJbiBhZGRpdGlvbiB0bworb3BlcmF0aW9ucyBwcm92aWRlZCBieSB0aGUgbGF0dGVyLCB0aGV5IGFsc28gcHJvdmlkZSBtZXRob2RzIHRvIGRvIHN5c3RlbQorY2FsbHMgb24gcGF0aCBvYmplY3RzLiAgVGhlcmUgYXJlIHRocmVlIHdheXMgdG8gaW5zdGFudGlhdGUgY29uY3JldGUgcGF0aHM6CisKKy4uIGNsYXNzOjogUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUHVyZVBhdGhgLCB0aGlzIGNsYXNzIHJlcHJlc2VudHMgY29uY3JldGUgcGF0aHMgb2YKKyAgIHRoZSBzeXN0ZW0ncyBwYXRoIGZsYXZvdXIgKGluc3RhbnRpYXRpbmcgaXQgY3JlYXRlcyBlaXRoZXIgYQorICAgOmNsYXNzOmBQb3NpeFBhdGhgIG9yIGEgOmNsYXNzOmBXaW5kb3dzUGF0aGApOjoKKworICAgICAgPj4+IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFBvc2l4UGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUGF0aGAgYW5kIDpjbGFzczpgUHVyZVBvc2l4UGF0aGAsIHRoaXMgY2xhc3MKKyAgIHJlcHJlc2VudHMgY29uY3JldGUgbm9uLVdpbmRvd3MgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBQb3NpeFBhdGgoJy9ldGMnKQorICAgICAgUG9zaXhQYXRoKCcvZXRjJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworLi4gY2xhc3M6OiBXaW5kb3dzUGF0aCgqcGF0aHNlZ21lbnRzKQorCisgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgUGF0aGAgYW5kIDpjbGFzczpgUHVyZVdpbmRvd3NQYXRoYCwgdGhpcyBjbGFzcworICAgcmVwcmVzZW50cyBjb25jcmV0ZSBXaW5kb3dzIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykKKyAgICAgIFdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworWW91IGNhbiBvbmx5IGluc3RhbnRpYXRlIHRoZSBjbGFzcyBmbGF2b3VyIHRoYXQgY29ycmVzcG9uZHMgdG8geW91ciBzeXN0ZW0KKyhhbGxvd2luZyBzeXN0ZW0gY2FsbHMgb24gbm9uLWNvbXBhdGlibGUgcGF0aCBmbGF2b3VycyBjb3VsZCBsZWFkIHRvCitidWdzIG9yIGZhaWx1cmVzIGluIHlvdXIgYXBwbGljYXRpb24pOjoKKworICAgPj4+IGltcG9ydCBvcworICAgPj4+IG9zLm5hbWUKKyAgICdwb3NpeCcKKyAgID4+PiBQYXRoKCdzZXR1cC5weScpCisgICBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgID4+PiBQb3NpeFBhdGgoJ3NldHVwLnB5JykKKyAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgPj4+IFdpbmRvd3NQYXRoKCdzZXR1cC5weScpCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDc5OCwgaW4gX19uZXdfXworICAgICAgICUgKGNscy5fX25hbWVfXywpKQorICAgTm90SW1wbGVtZW50ZWRFcnJvcjogY2Fubm90IGluc3RhbnRpYXRlICdXaW5kb3dzUGF0aCcgb24geW91ciBzeXN0ZW0KKworCitNZXRob2RzCiteXl5eXl5eCisKK0NvbmNyZXRlIHBhdGhzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGluIGFkZGl0aW9uIHRvIHB1cmUgcGF0aHMKK21ldGhvZHMuICBNYW55IG9mIHRoZXNlIG1ldGhvZHMgY2FuIHJhaXNlIGFuIDpleGM6YE9TRXJyb3JgIGlmIGEgc3lzdGVtCitjYWxsIGZhaWxzIChmb3IgZXhhbXBsZSBiZWNhdXNlIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3QpOgorCisuLiBjbGFzc21ldGhvZDo6IFBhdGguY3dkKCkKKworICAgUmV0dXJuIGEgbmV3IHBhdGggb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKGFzIHJldHVybmVkCisgICBieSA6ZnVuYzpgb3MuZ2V0Y3dkYCk6OgorCisgICAgICA+Pj4gUGF0aC5jd2QoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWInKQorCisKKy4uIG1ldGhvZDo6IFBhdGguc3RhdCgpCisKKyAgIFJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIHBhdGggKHNpbWlsYXJseSB0byA6ZnVuYzpgb3Muc3RhdGApLgorICAgVGhlIHJlc3VsdCBpcyBsb29rZWQgdXAgYXQgZWFjaCBjYWxsIHRvIHRoaXMgbWV0aG9kLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9zaXplCisgICAgICA5NTYKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tdGltZQorICAgICAgMTMyNzg4MzU0Ny44NTI1NTQKKworCisuLiBtZXRob2Q6OiBQYXRoLmNobW9kKG1vZGUpCisKKyAgIENoYW5nZSB0aGUgZmlsZSBtb2RlIGFuZCBwZXJtaXNzaW9ucywgbGlrZSA6ZnVuYzpgb3MuY2htb2RgOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgMzMyNzcKKyAgICAgID4+PiBwLmNobW9kKDBvNDQ0KQorICAgICAgPj4+IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgIDMzMDYwCisKKworLi4gbWV0aG9kOjogUGF0aC5leGlzdHMoKQorCisgICBXaGV0aGVyIHRoZSBwYXRoIHBvaW50cyB0byBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeTo6CisKKyAgICAgID4+PiBQYXRoKCcuJykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCdzZXR1cC5weScpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnL2V0YycpLmV4aXN0cygpCisgICAgICBUcnVlCisgICAgICA+Pj4gUGF0aCgnbm9uZXhpc3RlbnRmaWxlJykuZXhpc3RzKCkKKyAgICAgIEZhbHNlCisKKyAgIC4uIG5vdGU6OgorICAgICAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltbGluaywgOm1ldGg6YGV4aXN0c2AgcmV0dXJucyB3aGV0aGVyIHRoZQorICAgICAgc3ltbGluayAqcG9pbnRzIHRvKiBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmdsb2IocGF0dGVybikKKworICAgR2xvYiB0aGUgZ2l2ZW4gKnBhdHRlcm4qIGluIHRoZSBkaXJlY3RvcnkgcmVwcmVzZW50ZWQgYnkgdGhpcyBwYXRoLAorICAgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGZpbGVzIChvZiBhbnkga2luZCk6OgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdwYXRobGliLnB5JyksIFBvc2l4UGF0aCgnc2V0dXAucHknKSwgUG9zaXhQYXRoKCd0ZXN0X3BhdGhsaWIucHknKV0KKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyovKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyldCisKKyAgIFRoZSAiYGAqKmBgIiBwYXR0ZXJuIG1lYW5zICJ0aGlzIGRpcmVjdG9yeSBhbmQgYWxsIHN1YmRpcmVjdG9yaWVzLAorICAgcmVjdXJzaXZlbHkiLiAgSW4gb3RoZXIgd29yZHMsIGl0IGVuYWJsZXMgcmVjdXJzaXZlIGdsb2JiaW5nOjoKKworICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKiovKi5weScpKQorICAgICAgW1Bvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorCisgICAuLiBub3RlOjoKKyAgICAgIFVzaW5nIHRoZSAiYGAqKmBgIiBwYXR0ZXJuIGluIGxhcmdlIGRpcmVjdG9yeSB0cmVlcyBtYXkgY29uc3VtZQorICAgICAgYW4gaW5vcmRpbmF0ZSBhbW91bnQgb2YgdGltZS4KKworCisuLiBtZXRob2Q6OiBQYXRoLmdyb3VwKCkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBncm91cCBvd25pbmcgdGhlIGZpbGUuICA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkCisgICBpZiB0aGUgZmlsZSdzIGdpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZGlyKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGRpcmVjdG9yeSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19maWxlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHJlZ3VsYXIgZmlsZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIHJlZ3VsYXIgZmlsZSksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19zeW1saW5rKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Q7IG90aGVyIGVycm9ycyAoc3VjaAorICAgYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfc29ja2V0KCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIFVuaXggc29ja2V0IChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgVW5peCBzb2NrZXQpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfZmlmbygpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBGSUZPIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgRklGTyksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19ibG9ja19kZXZpY2UoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgYmxvY2sgZGV2aWNlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgYmxvY2sgZGV2aWNlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2NoYXJfZGV2aWNlKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIGNoYXJhY3RlciBkZXZpY2UgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBjaGFyYWN0ZXIgZGV2aWNlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLml0ZXJkaXIoKQorCisgICBXaGVuIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwgeWllbGQgcGF0aCBvYmplY3RzIG9mIHRoZSBkaXJlY3RvcnkKKyAgIGNvbnRlbnRzOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdkb2NzJykKKyAgICAgID4+PiBmb3IgY2hpbGQgaW4gcC5pdGVyZGlyKCk6IGNoaWxkCisgICAgICAuLi4KKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fdGVtcGxhdGVzJykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9tYWtlLmJhdCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvaW5kZXgucnN0JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9fYnVpbGQnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL19zdGF0aWMnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL01ha2VmaWxlJykKKworLi4gbWV0aG9kOjogUGF0aC5sY2htb2QobW9kZSkKKworICAgTGlrZSA6bWV0aDpgUGF0aC5jaG1vZGAgYnV0LCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCB0aGUKKyAgIHN5bWJvbGljIGxpbmsncyBtb2RlIGlzIGNoYW5nZWQgcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgubHN0YXQoKQorCisgICBMaWtlIDptZXRoOmBQYXRoLnN0YXRgIGJ1dCwgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgcmV0dXJuCisgICB0aGUgc3ltYm9saWMgbGluaydzIGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKworCisuLiBtZXRob2Q6OiBQYXRoLm1rZGlyKG1vZGU9MG83NzcsIHBhcmVudHM9RmFsc2UpCisKKyAgIENyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgYXQgdGhpcyBnaXZlbiBwYXRoLiAgSWYgKm1vZGUqIGlzIGdpdmVuLCBpdCBpcworICAgY29tYmluZWQgd2l0aCB0aGUgcHJvY2VzcycgYGB1bWFza2BgIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmlsZSBtb2RlCisgICBhbmQgYWNjZXNzIGZsYWdzLiAgSWYgdGhlIHBhdGggYWxyZWFkeSBleGlzdHMsIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZC4KKworICAgSWYgKnBhcmVudHMqIGlzIHRydWUsIGFueSBtaXNzaW5nIHBhcmVudHMgb2YgdGhpcyBwYXRoIGFyZSBjcmVhdGVkCisgICBhcyBuZWVkZWQuICBJZiAqcGFyZW50cyogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSwgYSBtaXNzaW5nIHBhcmVudCByYWlzZXMKKyAgIDpleGM6YE9TRXJyb3JgLgorCisKKy4uIG1ldGhvZDo6IFBhdGgub3Blbihtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKQorCisgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGgsIGxpa2UgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYAorICAgZnVuY3Rpb24gZG9lczo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHdpdGggcC5vcGVuKCkgYXMgZjoKKyAgICAgIC4uLiAgICAgZi5yZWFkbGluZSgpCisgICAgICAuLi4KKyAgICAgICcjIS91c3IvYmluL2VudiBweXRob24zXG4nCisKKworLi4gbWV0aG9kOjogUGF0aC5vd25lcigpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgdXNlciBvd25pbmcgdGhlIGZpbGUuICA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkCisgICBpZiB0aGUgZmlsZSdzIHVpZCBpc24ndCBmb3VuZCBpbiB0aGUgc3lzdGVtIGRhdGFiYXNlLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmVuYW1lKHRhcmdldCkKKworICAgUmVuYW1lIHRoaXMgZmlsZSBvciBkaXJlY3RvcnkgdG8gdGhlIGdpdmVuICp0YXJnZXQqLiAgKnRhcmdldCogY2FuIGJlCisgICBlaXRoZXIgYSBzdHJpbmcgb3IgYW5vdGhlciBwYXRoIG9iamVjdDo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZm9vJykKKyAgICAgID4+PiBwLm9wZW4oJ3cnKS53cml0ZSgnc29tZSB0ZXh0JykKKyAgICAgIDkKKyAgICAgID4+PiB0YXJnZXQgPSBQYXRoKCdiYXInKQorICAgICAgPj4+IHAucmVuYW1lKHRhcmdldCkKKyAgICAgID4+PiB0YXJnZXQub3BlbigpLnJlYWQoKQorICAgICAgJ3NvbWUgdGV4dCcKKworCisuLiBtZXRob2Q6OiBQYXRoLnJlcGxhY2UodGFyZ2V0KQorCisgICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICBJZiAqdGFyZ2V0KiBwb2ludHMKKyAgIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LCBpdCB3aWxsIGJlIHVuY29uZGl0aW9uYWxseSByZXBsYWNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJlc29sdmUoKQorCisgICBNYWtlIHRoZSBwYXRoIGFic29sdXRlLCByZXNvbHZpbmcgYW55IHN5bWxpbmtzLiAgQSBuZXcgcGF0aCBvYmplY3QgaXMKKyAgIHJldHVybmVkOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCkKKyAgICAgID4+PiBwCisgICAgICBQb3NpeFBhdGgoJy4nKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYicpCisKKyAgIGAiLi4iYCBjb21wb25lbnRzIGFyZSBhbHNvIGVsaW1pbmF0ZWQgKHRoaXMgaXMgdGhlIG9ubHkgbWV0aG9kIHRvIGRvIHNvKTo6CisKKyAgICAgID4+PiBwID0gUGF0aCgnZG9jcy8uLi9zZXR1cC5weScpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliL3NldHVwLnB5JykKKworICAgSWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgOmV4YzpgRmlsZU5vdEZvdW5kRXJyb3JgIGlzIHJhaXNlZC4gIElmIGFuCisgICBpbmZpbml0ZSBsb29wIGlzIGVuY291bnRlcmVkIGFsb25nIHRoZSByZXNvbHV0aW9uIHBhdGgsCisgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnJnbG9iKHBhdHRlcm4pCisKKyAgIFRoaXMgaXMgbGlrZSBjYWxsaW5nIDptZXRoOmBnbG9iYCB3aXRoICJgYCoqYGAiIGFkZGVkIGluIGZyb250IG9mIHRoZQorICAgZ2l2ZW4gKnBhdHRlcm4qOgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoKS5yZ2xvYigiKi5weSIpKQorICAgICAgW1Bvc2l4UGF0aCgnYnVpbGQvbGliL3BhdGhsaWIucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ2RvY3MvY29uZi5weScpLAorICAgICAgIFBvc2l4UGF0aCgncGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnc2V0dXAucHknKSwKKyAgICAgICBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorCisKKy4uIG1ldGhvZDo6IFBhdGgucm1kaXIoKQorCisgICBSZW1vdmUgdGhpcyBkaXJlY3RvcnkuICBUaGUgZGlyZWN0b3J5IG11c3QgYmUgZW1wdHkuCisKKworLi4gbWV0aG9kOjogUGF0aC5zeW1saW5rX3RvKHRhcmdldCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSkKKworICAgTWFrZSB0aGlzIHBhdGggYSBzeW1ib2xpYyBsaW5rIHRvICp0YXJnZXQqLiAgVW5kZXIgV2luZG93cywKKyAgICp0YXJnZXRfaXNfZGlyZWN0b3J5KiBtdXN0IGJlIHRydWUgKGRlZmF1bHQgYGBGYWxzZWBgKSBpZiB0aGUgbGluaydzIHRhcmdldAorICAgaXMgYSBkaXJlY3RvcnkuICBVbmRlciBQT1NJWCwgKnRhcmdldF9pc19kaXJlY3RvcnkqJ3MgdmFsdWUgaXMgaWdub3JlZC4KKworICAgICAgPj4+IHAgPSBQYXRoKCdteWxpbmsnKQorICAgICAgPj4+IHAuc3ltbGlua190bygnc2V0dXAucHknKQorICAgICAgPj4+IHAucmVzb2x2ZSgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYi9zZXR1cC5weScpCisgICAgICA+Pj4gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgOTU2CisgICAgICA+Pj4gcC5sc3RhdCgpLnN0X3NpemUKKyAgICAgIDgKKworICAgLi4gbm90ZTo6CisgICAgICBUaGUgb3JkZXIgb2YgYXJndW1lbnRzIChsaW5rLCB0YXJnZXQpIGlzIHRoZSByZXZlcnNlCisgICAgICBvZiA6ZnVuYzpgb3Muc3ltbGlua2Ancy4KKworCisuLiBtZXRob2Q6OiBQYXRoLnRvdWNoKG1vZGU9MG83NzcsIGV4aXN0X29rPVRydWUpCisKKyAgIENyZWF0ZSBhIGZpbGUgYXQgdGhpcyBnaXZlbiBwYXRoLiAgSWYgKm1vZGUqIGlzIGdpdmVuLCBpdCBpcyBjb21iaW5lZAorICAgd2l0aCB0aGUgcHJvY2VzcycgYGB1bWFza2BgIHZhbHVlIHRvIGRldGVybWluZSB0aGUgZmlsZSBtb2RlIGFuZCBhY2Nlc3MKKyAgIGZsYWdzLiAgSWYgdGhlIGZpbGUgYWxyZWFkeSBleGlzdHMsIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyBpZiAqZXhpc3Rfb2sqCisgICBpcyB0cnVlIChhbmQgaXRzIG1vZGlmaWNhdGlvbiB0aW1lIGlzIHVwZGF0ZWQgdG8gdGhlIGN1cnJlbnQgdGltZSksCisgICBvdGhlcndpc2UgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgudW5saW5rKCkKKworICAgUmVtb3ZlIHRoaXMgZmlsZSBvciBzeW1ib2xpYyBsaW5rLiAgSWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LAorICAgdXNlIDpmdW5jOmBQYXRoLnJtZGlyYCBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGRiLnJzdCBiL0RvYy9saWJyYXJ5L3BkYi5yc3QKaW5kZXggZjRlMzdhYy4uNDhhOGE2YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wZGIucnN0CkBAIC00MSw3ICs0MSw3IEBACiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgVGFiLWNvbXBsZXRpb24gdmlhIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGlzIGF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kCiAgICBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzCi0gICBhcmd1bWVudHMgb2YgdGhlIGBgcHJpbnRgYCBjb21tYW5kLgorICAgYXJndW1lbnRzIG9mIHRoZSBgYHBgYCBjb21tYW5kLgogCiA6ZmlsZTpgcGRiLnB5YCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuICBGb3IKIGV4YW1wbGU6OgpAQCAtMzA5LDcgKzMwOSw3IEBACiAgICBgYGVuZGBgIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6OgogCiAgICAgICAoUGRiKSBjb21tYW5kcyAxCi0gICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlCisgICAgICAoY29tKSBwIHNvbWVfdmFyaWFibGUKICAgICAgIChjb20pIGVuZAogICAgICAgKFBkYikKIApAQCAtNDAzLDEzICs0MDMsMTkgQEAKIAogICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCiAKLS4uIHBkYmNvbW1hbmQ6OiBwKHJpbnQpIGV4cHJlc3Npb24KKy4uIHBkYmNvbW1hbmQ6OiBwIGV4cHJlc3Npb24KIAogICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHMgdmFsdWUuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBgYHByaW50KClgYCBjYW4gYWxzbyBiZSB1c2VkLCBidXQgaXMgbm90IGEgZGVidWdnZXIgY29tbWFuZCAtLS0gdGhpcyBleGVjdXRlcyB0aGUKKyAgICAgIFB5dGhvbiA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uLgorCisKIC4uIHBkYmNvbW1hbmQ6OiBwcCBleHByZXNzaW9uCiAKLSAgIExpa2UgdGhlIDpwZGJjbWQ6YHByaW50YCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzCisgICBMaWtlIHRoZSA6cGRiY21kOmBwYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzCiAgICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgOm1vZDpgcHByaW50YCBtb2R1bGUuCiAKIC4uIHBkYmNvbW1hbmQ6OiB3aGF0aXMgZXhwcmVzc2lvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGlja2xlLnJzdCBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKaW5kZXggMjczZmIzNC4uMWYzNWI2MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9waWNrbGUucnN0CkBAIC05NCw2ICs5NCw5IEBACiAgICBUaGUgOm1vZDpganNvbmAgbW9kdWxlOiBhIHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlIGFsbG93aW5nIEpTT04KICAgIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KIAorCisuLiBfcGlja2xlLXByb3RvY29sczoKKwogRGF0YSBzdHJlYW0gZm9ybWF0CiAtLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMTI1LDEwICsxMjgsMTUgQEAKICAgZWZmaWNpZW50IHBpY2tsaW5nIG9mIDp0ZXJtOmBuZXctc3R5bGUgY2xhc3NgXGVzLiAgUmVmZXIgdG8gOnBlcDpgMzA3YCBmb3IKICAgaW5mb3JtYXRpb24gYWJvdXQgaW1wcm92ZW1lbnRzIGJyb3VnaHQgYnkgcHJvdG9jb2wgMi4KIAotKiBQcm90b2NvbCB2ZXJzaW9uIDMgd2FzIGFkZGVkIGluIFB5dGhvbiAzLiAgSXQgaGFzIGV4cGxpY2l0IHN1cHBvcnQgZm9yCisqIFByb3RvY29sIHZlcnNpb24gMyB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuMC4gIEl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvcgogICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzIGFuZCBjYW5ub3QgYmUgdW5waWNrbGVkIGJ5IFB5dGhvbiAyLnguICBUaGlzIGlzCi0gIHRoZSBkZWZhdWx0IGFzIHdlbGwgYXMgdGhlIGN1cnJlbnQgcmVjb21tZW5kZWQgcHJvdG9jb2w7IHVzZSBpdCB3aGVuZXZlcgotICBwb3NzaWJsZS4KKyAgdGhlIGRlZmF1bHQgcHJvdG9jb2wsIGFuZCB0aGUgcmVjb21tZW5kZWQgcHJvdG9jb2wgd2hlbiBjb21wYXRpYmlsaXR5IHdpdGgKKyAgb3RoZXIgUHl0aG9uIDMgdmVyc2lvbnMgaXMgcmVxdWlyZWQuCisKKyogUHJvdG9jb2wgdmVyc2lvbiA0IHdhcyBhZGRlZCBpbiBQeXRob24gMy40LiAgSXQgYWRkcyBzdXBwb3J0IGZvciB2ZXJ5IGxhcmdlCisgIG9iamVjdHMsIHBpY2tsaW5nIG1vcmUga2luZHMgb2Ygb2JqZWN0cywgYW5kIHNvbWUgZGF0YSBmb3JtYXQKKyAgb3B0aW1pemF0aW9ucy4gIFJlZmVyIHRvIDpwZXA6YDMxNTRgIGZvciBpbmZvcm1hdGlvbiBhYm91dCBpbXByb3ZlbWVudHMKKyAgYnJvdWdodCBieSBwcm90b2NvbCA0LgogCiAuLiBub3RlOjoKICAgIFNlcmlhbGl6YXRpb24gaXMgYSBtb3JlIHByaW1pdGl2ZSBub3Rpb24gdGhhbiBwZXJzaXN0ZW5jZTsgYWx0aG91Z2gKQEAgLTE1NiwxMyArMTY0LDE2IEBACiAKIC4uIGRhdGE6OiBISUdIRVNUX1BST1RPQ09MCiAKLSAgIFRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24gYXZhaWxhYmxlLiAgVGhpcyB2YWx1ZSBjYW4gYmUgcGFzc2VkIGFzIGEKLSAgICpwcm90b2NvbCogdmFsdWUuCisgICBBbiBpbnRlZ2VyLCB0aGUgaGlnaGVzdCA6cmVmOmBwcm90b2NvbCB2ZXJzaW9uIDxwaWNrbGUtcHJvdG9jb2xzPmAKKyAgIGF2YWlsYWJsZS4gIFRoaXMgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBhICpwcm90b2NvbCogdmFsdWUgdG8gZnVuY3Rpb25zCisgICA6ZnVuYzpgZHVtcGAgYW5kIDpmdW5jOmBkdW1wc2AgYXMgd2VsbCBhcyB0aGUgOmNsYXNzOmBQaWNrbGVyYAorICAgY29uc3RydWN0b3IuCiAKIC4uIGRhdGE6OiBERUZBVUxUX1BST1RPQ09MCiAKLSAgIFRoZSBkZWZhdWx0IHByb3RvY29sIHVzZWQgZm9yIHBpY2tsaW5nLiAgTWF5IGJlIGxlc3MgdGhhbiBISUdIRVNUX1BST1RPQ09MLgotICAgQ3VycmVudGx5IHRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDMsIGEgbmV3IHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgorICAgQW4gaW50ZWdlciwgdGhlIGRlZmF1bHQgOnJlZjpgcHJvdG9jb2wgdmVyc2lvbiA8cGlja2xlLXByb3RvY29scz5gIHVzZWQKKyAgIGZvciBwaWNrbGluZy4gIE1heSBiZSBsZXNzIHRoYW4gOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgLiAgQ3VycmVudGx5IHRoZQorICAgZGVmYXVsdCBwcm90b2NvbCBpcyAzLCBhIG5ldyBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KIAogCiBUaGUgOm1vZDpgcGlja2xlYCBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgdG8gbWFrZSB0aGUgcGlja2xpbmcKQEAgLTQwOSw3ICs0MjAsOCBAQAogCiAqIHR1cGxlcywgbGlzdHMsIHNldHMsIGFuZCBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBvbmx5IHBpY2tsYWJsZSBvYmplY3RzCiAKLSogZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZQorKiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlICh1c2luZyA6a2V5d29yZDpgZGVmYCwgbm90CisgIDprZXl3b3JkOmBsYW1iZGFgKQogCiAqIGJ1aWx0LWluIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUKIApAQCAtNDI3LDcgKzQzOSw3IEBACiA6ZnVuYzpgc3lzLnNldHJlY3Vyc2lvbmxpbWl0YC4KIAogTm90ZSB0aGF0IGZ1bmN0aW9ucyAoYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCkgYXJlIHBpY2tsZWQgYnkgImZ1bGx5IHF1YWxpZmllZCIKLW5hbWUgcmVmZXJlbmNlLCBub3QgYnkgdmFsdWUuICBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpcworbmFtZSByZWZlcmVuY2UsIG5vdCBieSB2YWx1ZS4gWyNdXyAgVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZ1bmN0aW9uIG5hbWUgaXMKIHBpY2tsZWQsIGFsb25nIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbi4gIE5laXRoZXIKIHRoZSBmdW5jdGlvbidzIGNvZGUsIG5vciBhbnkgb2YgaXRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgYXJlIHBpY2tsZWQuICBUaHVzIHRoZQogZGVmaW5pbmcgbW9kdWxlIG11c3QgYmUgaW1wb3J0YWJsZSBpbiB0aGUgdW5waWNrbGluZyBlbnZpcm9ubWVudCwgYW5kIHRoZSBtb2R1bGUKQEAgLTQ4MywxMiArNDk1LDI5IEBACiBDbGFzc2VzIGNhbiBhbHRlciB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgYnkgcHJvdmlkaW5nIG9uZSBvciBzZXZlcmFsIHNwZWNpYWwKIG1ldGhvZHM6CiAKKy4uIG1ldGhvZDo6IG9iamVjdC5fX2dldG5ld2FyZ3NfZXhfXygpCisKKyAgIEluIHByb3RvY29scyA0IGFuZCBuZXdlciwgY2xhc3NlcyB0aGF0IGltcGxlbWVudHMgdGhlCisgICA6bWV0aDpgX19nZXRuZXdhcmdzX2V4X19gIG1ldGhvZCBjYW4gZGljdGF0ZSB0aGUgdmFsdWVzIHBhc3NlZCB0byB0aGUKKyAgIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbiB1bnBpY2tsaW5nLiAgVGhlIG1ldGhvZCBtdXN0IHJldHVybiBhIHBhaXIKKyAgIGBgKGFyZ3MsIGt3YXJncylgYCB3aGVyZSAqYXJncyogaXMgYSB0dXBsZSBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cworICAgYW5kICprd2FyZ3MqIGEgZGljdGlvbmFyeSBvZiBuYW1lZCBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdGluZyB0aGUKKyAgIG9iamVjdC4gIFRob3NlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24KKyAgIHVucGlja2xpbmcuCisKKyAgIFlvdSBzaG91bGQgaW1wbGVtZW50IHRoaXMgbWV0aG9kIGlmIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIG9mIHlvdXIKKyAgIGNsYXNzIHJlcXVpcmVzIGtleXdvcmQtb25seSBhcmd1bWVudHMuICBPdGhlcndpc2UsIGl0IGlzIHJlY29tbWVuZGVkIGZvcgorICAgY29tcGF0aWJpbGl0eSB0byBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYC4KKworCiAuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRuZXdhcmdzX18oKQogCi0gICBJbiBwcm90b2NvbCAyIGFuZCBuZXdlciwgY2xhc3NlcyB0aGF0IGltcGxlbWVudHMgdGhlIDptZXRoOmBfX2dldG5ld2FyZ3NfX2AKLSAgIG1ldGhvZCBjYW4gZGljdGF0ZSB0aGUgdmFsdWVzIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uCi0gICB1bnBpY2tsaW5nLiAgVGhpcyBpcyBvZnRlbiBuZWVkZWQgZm9yIGNsYXNzZXMgd2hvc2UgOm1ldGg6YF9fbmV3X19gIG1ldGhvZAotICAgcmVxdWlyZXMgYXJndW1lbnRzLgorICAgVGhpcyBtZXRob2Qgc2VydmUgYSBzaW1pbGFyIHB1cnBvc2UgYXMgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBidXQKKyAgIGZvciBwcm90b2NvbHMgMiBhbmQgbmV3ZXIuICBJdCBtdXN0IHJldHVybiBhIHR1cGxlIG9mIGFyZ3VtZW50cyBgYXJnc2AKKyAgIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4KKworICAgSW4gcHJvdG9jb2xzIDQgYW5kIG5ld2VyLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIHdpbGwgbm90IGJlIGNhbGxlZCBpZgorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBpcyBkZWZpbmVkLgogCiAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2dldHN0YXRlX18oKQpAQCAtNTIwLDEwICs1NDksMTAgQEAKIAogICAgQXQgdW5waWNrbGluZyB0aW1lLCBzb21lIG1ldGhvZHMgbGlrZSA6bWV0aDpgX19nZXRhdHRyX19gLAogICAgOm1ldGg6YF9fZ2V0YXR0cmlidXRlX19gLCBvciA6bWV0aDpgX19zZXRhdHRyX19gIG1heSBiZSBjYWxsZWQgdXBvbiB0aGUKLSAgIGluc3RhbmNlLiAgSW4gY2FzZSB0aG9zZSBtZXRob2RzIHJlbHkgb24gc29tZSBpbnRlcm5hbCBpbnZhcmlhbnQgYmVpbmcgdHJ1ZSwKLSAgIHRoZSB0eXBlIHNob3VsZCBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCB0byBlc3RhYmxpc2ggc3VjaCBhbgotICAgaW52YXJpYW50OyBvdGhlcndpc2UsIG5laXRoZXIgOm1ldGg6YF9fbmV3X19gIG5vciA6bWV0aDpgX19pbml0X19gIHdpbGwgYmUKLSAgIGNhbGxlZC4KKyAgIGluc3RhbmNlLiAgSW4gY2FzZSB0aG9zZSBtZXRob2RzIHJlbHkgb24gc29tZSBpbnRlcm5hbCBpbnZhcmlhbnQgYmVpbmcKKyAgIHRydWUsIHRoZSB0eXBlIHNob3VsZCBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCBvcgorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCB0byBlc3RhYmxpc2ggc3VjaCBhbiBpbnZhcmlhbnQ7IG90aGVyd2lzZSwKKyAgIG5laXRoZXIgOm1ldGg6YF9fbmV3X19gIG5vciA6bWV0aDpgX19pbml0X19gIHdpbGwgYmUgY2FsbGVkLgogCiAuLiBpbmRleDo6IHBhaXI6IGNvcHk7IHByb3RvY29sCiAKQEAgLTUzNSw3ICs1NjQsNyBAQAogCiBBbHRob3VnaCBwb3dlcmZ1bCwgaW1wbGVtZW50aW5nIDptZXRoOmBfX3JlZHVjZV9fYCBkaXJlY3RseSBpbiB5b3VyIGNsYXNzZXMgaXMKIGVycm9yIHByb25lLiAgRm9yIHRoaXMgcmVhc29uLCBjbGFzcyBkZXNpZ25lcnMgc2hvdWxkIHVzZSB0aGUgaGlnaC1sZXZlbAotaW50ZXJmYWNlIChpLmUuLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLCA6bWV0aDpgX19nZXRzdGF0ZV9fYCBhbmQKK2ludGVyZmFjZSAoaS5lLiwgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCwgOm1ldGg6YF9fZ2V0c3RhdGVfX2AgYW5kCiA6bWV0aDpgX19zZXRzdGF0ZV9fYCkgd2hlbmV2ZXIgcG9zc2libGUuICBXZSB3aWxsIHNob3csIGhvd2V2ZXIsIGNhc2VzIHdoZXJlCiB1c2luZyA6bWV0aDpgX19yZWR1Y2VfX2AgaXMgdGhlIG9ubHkgb3B0aW9uIG9yIGxlYWRzIHRvIG1vcmUgZWZmaWNpZW50IHBpY2tsaW5nCiBvciBib3RoLgpAQCAtODgzLDYgKzkxMiw5IEBACiAKIC4uIFsjXSBEb24ndCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgOm1vZDpgbWFyc2hhbGAgbW9kdWxlCiAKKy4uIFsjXSBUaGlzIGlzIHdoeSA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgY2Fubm90IGJlIHBpY2tsZWQ6ICBhbGwKKyAgICA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgc2hhcmUgdGhlIHNhbWUgbmFtZTogIGBgPGxhbWJkYT5gYC4KKwogLi4gWyNdIFRoZSBleGNlcHRpb24gcmFpc2VkIHdpbGwgbGlrZWx5IGJlIGFuIDpleGM6YEltcG9ydEVycm9yYCBvciBhbgogICAgOmV4YzpgQXR0cmlidXRlRXJyb3JgIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0IGIvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CmluZGV4IGEyNjczNjguLjNjZjgwODYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKQEAgLTE2LDI2ICsxNiwyMSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSAicHJvcGVydHkgbGlzdCIKLVhNTCBmaWxlcyB1c2VkIG1haW5seSBieSBNYWMgT1MgWC4KK2ZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYIGFuZCBzdXBwb3J0cyBib3RoIGJpbmFyeSBhbmQgWE1MIHBsaXN0IGZpbGVzLgogCi1UaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgWE1MIHBpY2tsZSBzdXBwb3J0aW5nCitUaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgc2VyaWFsaXphdGlvbiBzdXBwb3J0aW5nCiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4gIFVzdWFsbHkgdGhlCiB0b3AgbGV2ZWwgb2JqZWN0IGlzIGEgZGljdGlvbmFyeS4KIAotVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YHdyaXRlUGxpc3RgIGFuZAotOmZ1bmM6YHJlYWRQbGlzdGAgZnVuY3Rpb25zLgorVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YGR1bXBgIGFuZAorOmZ1bmM6YGxvYWRgIGZ1bmN0aW9ucy4KIAotVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgdXNlIDpmdW5jOmB3cml0ZVBsaXN0VG9CeXRlc2AKLWFuZCA6ZnVuYzpgcmVhZFBsaXN0RnJvbUJ5dGVzYC4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHVzZSA6ZnVuYzpgZHVtcHNgCithbmQgOmZ1bmM6YGxvYWRzYC4KIAogVmFsdWVzIGNhbiBiZSBzdHJpbmdzLCBpbnRlZ2VycywgZmxvYXRzLCBib29sZWFucywgdHVwbGVzLCBsaXN0cywgZGljdGlvbmFyaWVzCi0oYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIDpjbGFzczpgRGF0YWAgb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAKLW9iamVjdHMuICBTdHJpbmcgdmFsdWVzIChpbmNsdWRpbmcgZGljdGlvbmFyeSBrZXlzKSBoYXZlIHRvIGJlIHVuaWNvZGUgc3RyaW5ncyAtLQotdGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IGFzIFVURi04LgotCi1UaGUgYGA8ZGF0YT5gYCBwbGlzdCB0eXBlIGlzIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSA6Y2xhc3M6YERhdGFgIGNsYXNzLiAgVGhpcyBpcwotYSB0aGluIHdyYXBwZXIgYXJvdW5kIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4gIFVzZSA6Y2xhc3M6YERhdGFgIGlmIHlvdXIgc3RyaW5ncwotY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMuCisoYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIDpjbGFzczpgRGF0YWAsIDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVzYXJyYXlgCitvciA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYCBvYmplY3RzLgogCiAuLiBzZWVhbHNvOjoKIApAQCAtNDUsMzcgKzQwLDE0NSBAQAogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCi0uLiBmdW5jdGlvbjo6IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorLi4gZnVuY3Rpb246OiBsb2FkKGZwLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQogCi0gICBSZWFkIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUgYW5kCi0gICBiaW5hcnkpIGZpbGUgb2JqZWN0LiAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCisgICBSZWFkIGEgcGxpc3QgZmlsZS4gKmZwKiBzaG91bGQgYmUgYSByZWFkYWJsZSBhbmQgYmluYXJ5IGZpbGUgb2JqZWN0LgorICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCiAgICBkaWN0aW9uYXJ5KS4KIAotICAgVGhlIFhNTCBkYXRhIGlzIHBhcnNlZCB1c2luZyB0aGUgRXhwYXQgcGFyc2VyIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgCi0gICAtLSBzZWUgaXRzIGRvY3VtZW50YXRpb24gZm9yIHBvc3NpYmxlIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuCi0gICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQgYnkgdGhlIHBsaXN0IHBhcnNlci4KKyAgIFRoZSAqZm10KiBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlIGFuZCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdmFsaWQ6CisKKyAgICogOmRhdGE6YE5vbmVgOiBBdXRvZGV0ZWN0IHRoZSBmaWxlIGZvcm1hdAorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZpbGUgZm9ybWF0CisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgcGxpc3QgZm9ybWF0CisKKyAgIElmICp1c2VfYnVpbHRpbl90eXBlcyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpIGJpbmFyeSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKKyAgIGFzIGluc3RhbmNlcyBvZiA6Y2xhc3M6YGJ5dGVzYCwgb3RoZXJ3aXNlIGl0IGlzIHJldHVybmVkIGFzIGluc3RhbmNlcyBvZgorICAgOmNsYXNzOmBEYXRhYC4KKworICAgVGhlICpkaWN0X3R5cGUqIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGRpY3Rpb25hcmllcyB0aGF0IGFyZSByZWFkIGZyb20gdGhlCisgICBwbGlzdCBmaWxlLiBUaGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBwbGlzdCBjYW4gYmUgcmVjb3ZlcmVkIGJ5IHVzaW5nCisgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCAoYWx0aG91Z2ggdGhlIG9yZGVyIG9mIGtleXMgc2hvdWxkbid0IGJlCisgICBpbXBvcnRhbnQgaW4gcGxpc3QgZmlsZXMpLgorCisgICBYTUwgZGF0YSBmb3IgdGhlIDpkYXRhOmBGTVRfWE1MYCBmb3JtYXQgaXMgcGFyc2VkIHVzaW5nIHRoZSBFeHBhdCBwYXJzZXIKKyAgIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIC0tIHNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgcG9zc2libGUKKyAgIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQKKyAgIGJ5IHRoZSBwbGlzdCBwYXJzZXIuCisKKyAgIFRoZSBwYXJzZXIgZm9yIHRoZSBiaW5hcnkgZm9ybWF0IHJhaXNlcyA6ZXhjOmBJbnZhbGlkRmlsZUV4Y2VwdGlvbmAKKyAgIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHBhcnNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBsb2FkcyhkYXRhLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQorCisgICBMb2FkIGEgcGxpc3QgZnJvbSBhIGJ5dGVzIG9iamVjdC4gU2VlIDpmdW5jOmBsb2FkYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YKKyAgIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworCisuLiBmdW5jdGlvbjo6IGR1bXAodmFsdWUsIGZwLCBcKiwgZm10PUZNVF9YTUwsIHNvcnRfa2V5cz1UcnVlLCBza2lwa2V5cz1GYWxzZSkKKworICAgV3JpdGUgKnZhbHVlKiB0byBhIHBsaXN0IGZpbGUuICpGcCogc2hvdWxkIGJlIGEgd3JpdGFibGUsIGJpbmFyeQorICAgZmlsZSBvYmplY3QuCisKKyAgIFRoZSAqZm10KiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGZvcm1hdCBvZiB0aGUgcGxpc3QgZmlsZSBhbmQgY2FuIGJlCisgICBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CisKKyAgICogOmRhdGE6YEZNVF9YTUxgOiBYTUwgZm9ybWF0dGVkIHBsaXN0IGZpbGUKKworICAgKiA6ZGF0YTpgRk1UX0JJTkFSWWA6IEJpbmFyeSBmb3JtYXR0ZWQgcGxpc3QgZmlsZQorCisgICBXaGVuICpzb3J0X2tleXMqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSB0aGUga2V5cyBmb3IgZGljdGlvbmFyaWVzIHdpbGwgYmUKKyAgIHdyaXR0ZW4gdG8gdGhlIHBsaXN0IGluIHNvcnRlZCBvcmRlciwgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSB3cml0dGVuIGluCisgICB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZSBkaWN0aW9uYXJ5LgorCisgICBXaGVuICpza2lwa2V5cyogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSB0aGUgZnVuY3Rpb24gcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAKKyAgIHdoZW4gYSBrZXkgb2YgYSBkaWN0aW9uYXJ5IGlzIG5vdCBhIHN0cmluZywgb3RoZXJ3aXNlIHN1Y2gga2V5cyBhcmUgc2tpcHBlZC4KKworICAgQSA6ZXhjOmBUeXBlRXJyb3JgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBvYmplY3QgaXMgb2YgYW4gdW5zdXBwb3J0ZWQgdHlwZSBvcgorICAgYSBjb250YWluZXIgdGhhdCBjb250YWlucyBvYmplY3RzIG9mIHVuc3VwcG9ydGVkIHR5cGVzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpmbXQqLCAqc29ydF9rZXlzKiBhbmQgKnNraXBrZXlzKiBhcmd1bWVudHMuCisKKworLi4gZnVuY3Rpb246OiBkdW1wcyh2YWx1ZSwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFJldHVybiAqdmFsdWUqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4gU2VlCisgICB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmZ1bmM6YGR1bXBgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZAorICAgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24uCisKKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQ6CisKKy4uIGZ1bmN0aW9uOjogcmVhZFBsaXN0KHBhdGhPckZpbGUpCisKKyAgIFJlYWQgYSBwbGlzdCBmaWxlLiAqcGF0aE9yRmlsZSogbWF5IGJlIGVpdGhlciBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZQorICAgYW5kIGJpbmFyeSkgZmlsZSBvYmplY3QuIFJldHVybnMgdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5CisgICBpcyBhIGRpY3Rpb25hcnkpLgorCisgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIDpmdW5jOmBsb2FkYCB0byBkbyB0aGUgYWN0dWFsIHdvcmssIHRoZSB0aGUgZG9jdW1lbnRhdGlvbgorICAgb2YgOmZ1bmM6YHRoYXQgZnVuY3Rpb24gPGxvYWQ+YCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgRGljdCB2YWx1ZXMgaW4gdGhlIHJlc3VsdCBoYXZlIGEgYGBfX2dldGF0dHJfX2BgIG1ldGhvZCB0aGF0IGRlZmVycworICAgICAgdG8gYGBfX2dldGl0ZW1fYGAuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBhdHRyaWJ1dGUgYWNjZXNzIHRvCisgICAgICBhY2Nlc3MgaXRlbXMgb2YgdGhlc2UgZGljdGlvbmFyaWVzLgorCisgICAuLiBkZXByZWNhdGVkOiAzLjQgVXNlIDpmdW5jOmBsb2FkYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKQogCi0gICAgV3JpdGUgKnJvb3RPYmplY3QqIHRvIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUKLSAgICBvciBhICh3cml0YWJsZSBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4KKyAgIFdyaXRlICpyb290T2JqZWN0KiB0byBhbiBYTUwgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBiZSBlaXRoZXIgYSBmaWxlIG5hbWUKKyAgIG9yIGEgKHdyaXRhYmxlIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0CiAKLSAgICBBIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9iamVjdCBpcyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlIG9yCi0gICAgYSBjb250YWluZXIgdGhhdCBjb250YWlucyBvYmplY3RzIG9mIHVuc3VwcG9ydGVkIHR5cGVzLgorICAgLi4gZGVwcmVjYXRlZDogMy40IFVzZSA6ZnVuYzpgZHVtcGAgaW5zdGVhZC4KIAogCiAuLiBmdW5jdGlvbjo6IHJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQogCiAgICBSZWFkIGEgcGxpc3QgZGF0YSBmcm9tIGEgYnl0ZXMgb2JqZWN0LiAgUmV0dXJuIHRoZSByb290IG9iamVjdC4KIAorICAgU2VlIDpmdW5jOmBsb2FkYCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEaWN0IHZhbHVlcyBpbiB0aGUgcmVzdWx0IGhhdmUgYSBgYF9fZ2V0YXR0cl9fYGAgbWV0aG9kIHRoYXQgZGVmZXJzCisgICAgICB0byBgYF9fZ2V0aXRlbV9gYC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGF0dHJpYnV0ZSBhY2Nlc3MgdG8KKyAgICAgIGFjY2VzcyBpdGVtcyBvZiB0aGVzZSBkaWN0aW9uYXJpZXMuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBsb2Fkc2AgaW5zdGVhZC4KKwogCiAuLiBmdW5jdGlvbjo6IHdyaXRlUGxpc3RUb0J5dGVzKHJvb3RPYmplY3QpCiAKLSAgIFJldHVybiAqcm9vdE9iamVjdCogYXMgYSBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LgorICAgUmV0dXJuICpyb290T2JqZWN0KiBhcyBhbiBYTUwgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgOmZ1bmM6YGR1bXBzYCBpbnN0ZWFkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpmbXQqLCAqc29ydF9rZXlzKiBhbmQgKnNraXBrZXlzKiBhcmd1bWVudHMuCiAKIAotVGhlIGZvbGxvd2luZyBjbGFzcyBpcyBhdmFpbGFibGU6CitUaGUgZm9sbG93aW5nIGNsYXNzZXMgYXJlIGF2YWlsYWJsZToKKworLi4gY2xhc3M6OiBEaWN0KFtkaWN0XSk6CisKKyAgIFJldHVybiBhbiBleHRlbmRlZCBtYXBwaW5nIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIGRpY3Rpb25hcnkKKyAgICpkaWN0Ki4KKworICAgVGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgZGljdGAgd2hlcmUgYXR0cmlidXRlIGFjY2VzcyBjYW4KKyAgIGJlIHVzZWQgdG8gYWNjZXNzIGl0ZW1zLiBUaGF0IGlzLCBgYGFEaWN0LmtleWBgIGlzIHRoZSBzYW1lIGFzCisgICBgYGFEaWN0WydrZXknXWBgIGZvciBnZXR0aW5nLCBzZXR0aW5nIGFuZCBkZWxldGluZyBpdGVtcyBpbiB0aGUgbWFwcGluZy4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuMAorCiAKIC4uIGNsYXNzOjogRGF0YShkYXRhKQogCkBAIC04Niw2ICsxODksMjQgQEAKICAgIEl0IGhhcyBvbmUgYXR0cmlidXRlLCA6YXR0cjpgZGF0YWAsIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmV0cmlldmUgdGhlIFB5dGhvbgogICAgYnl0ZXMgb2JqZWN0IHN0b3JlZCBpbiBpdC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgaW5zdGVhZAorCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBhdmFpYWJsZToKKworLi4gZGF0YTo6IEZNVF9YTUwKKworICAgVGhlIFhNTCBmb3JtYXQgZm9yIHBsaXN0IGZpbGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogRk1UX0JJTkFSWQorCisgICBUaGUgYmluYXJ5IGZvcm1hdCBmb3IgcGxpc3QgZmlsZXMKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogRXhhbXBsZXMKIC0tLS0tLS0tCkBAIC0xMDMsMTMgKzIyNCwxNSBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2luZyBhIHBsaXN0OjoKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgcGwgPSBsb2FkKGZwKQogICAgIHByaW50KHBsWyJhS2V5Il0pCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0IGIvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAppbmRleCBiNDA4MGQ2Li5kZWI0OWZjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKQEAgLTEzLDggKzEzLDExIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MsIDpjbGFzczpgUE9QM2AsIHdoaWNoIGVuY2Fwc3VsYXRlcyBhIGNvbm5lY3Rpb24gdG8gYQotUE9QMyBzZXJ2ZXIgYW5kIGltcGxlbWVudHMgdGhlIHByb3RvY29sIGFzIGRlZmluZWQgaW4gOnJmYzpgMTcyNWAuICBUaGUKLTpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzLgorUE9QMyBzZXJ2ZXIgYW5kIGltcGxlbWVudHMgdGhlIHByb3RvY29sIGFzIGRlZmluZWQgaW4gOnJmYzpgMTkzOWAuIFRoZQorOmNsYXNzOmBQT1AzYCBjbGFzcyBzdXBwb3J0cyBib3RoIHRoZSBtaW5pbWFsIGFuZCBvcHRpb25hbCBjb21tYW5kIHNldHMgZnJvbQorOnJmYzpgMTkzOWAuIFRoZSA6Y2xhc3M6YFBPUDNgIGNsYXNzIGFsc28gc3VwcG9ydHMgdGhlIGBTVExTYCBjb21tYW5kIGludHJvZHVjZWQKK2luIDpyZmM6YDI1OTVgIHRvIGVuYWJsZSBlbmNyeXB0ZWQgY29tbXVuaWNhdGlvbiBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uCisKIEFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyA6Y2xhc3M6YFBPUDNfU1NMYCwgd2hpY2ggcHJvdmlkZXMKIHN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdG8gUE9QMyBzZXJ2ZXJzIHRoYXQgdXNlIFNTTCBhcyBhbiB1bmRlcmx5aW5nIHByb3RvY29sCiBsYXllci4KQEAgLTUwLDYgKzUzLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKmNvbnRleHQqIHBhcmFtZXRlciBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdG9yKiAoc2VlCisgICAgICA6ZGF0YTpgfnNzbC5IQVNfU05JYCkuCiAKIE9uZSBleGNlcHRpb24gaXMgZGVmaW5lZCBhcyBhbiBhdHRyaWJ1dGUgb2YgdGhlIDptb2Q6YHBvcGxpYmAgbW9kdWxlOgogCkBAIC05Nyw2ICsxMDQsMTQgQEAKICAgIFJldHVybnMgdGhlIGdyZWV0aW5nIHN0cmluZyBzZW50IGJ5IHRoZSBQT1AzIHNlcnZlci4KIAogCisuLiBtZXRob2Q6OiBQT1AzLmNhcGEoKQorCisgICBRdWVyeSB0aGUgc2VydmVyJ3MgY2FwYWJpbGl0aWVzIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNDQ5YC4KKyAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IGluIHRoZSBmb3JtIGBgeyduYW1lJzogWydwYXJhbScuLi5dfWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBQT1AzLnVzZXIodXNlcm5hbWUpCiAKICAgIFNlbmQgdXNlciBjb21tYW5kLCByZXNwb25zZSBzaG91bGQgaW5kaWNhdGUgdGhhdCBhIHBhc3N3b3JkIGlzIHJlcXVpcmVkLgpAQCAtMTc2LDYgKzE5MSwyMyBAQAogICAgdGhlIHVuaXF1ZSBpZCBmb3IgdGhhdCBtZXNzYWdlIGluIHRoZSBmb3JtIGBgJ3Jlc3BvbnNlIG1lc2dudW0gdWlkYGAsIG90aGVyd2lzZQogICAgcmVzdWx0IGlzIGxpc3QgYGAocmVzcG9uc2UsIFsnbWVzZ251bSB1aWQnLCAuLi5dLCBvY3RldHMpYGAuCiAKKy4uIG1ldGhvZDo6IFBPUDMuc3Rscyhjb250ZXh0PU5vbmUpCisKKyAgIFN0YXJ0IGEgVExTIHNlc3Npb24gb24gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGFzIHNwZWNpZmllZCBpbiA6cmZjOmAyNTk1YC4KKyAgIFRoaXMgaXMgb25seSBhbGxvd2VkIGJlZm9yZSB1c2VyIGF1dGhlbnRpY2F0aW9uCisKKyAgICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvCisgICBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgorCisKIEluc3RhbmNlcyBvZiA6Y2xhc3M6YFBPUDNfU1NMYCBoYXZlIG5vIGFkZGl0aW9uYWwgbWV0aG9kcy4gVGhlIGludGVyZmFjZSBvZiB0aGlzCiBzdWJjbGFzcyBpcyBpZGVudGljYWwgdG8gaXRzIHBhcmVudC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHByaW50LnJzdCBiL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKaW5kZXggM2E4NjMzMS4uNDQ3ZjhmNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHByaW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CkBAIC0xNCw4ICsxNCw4IEBACiBQeXRob24gZGF0YSBzdHJ1Y3R1cmVzIGluIGEgZm9ybSB3aGljaCBjYW4gYmUgdXNlZCBhcyBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIuCiBJZiB0aGUgZm9ybWF0dGVkIHN0cnVjdHVyZXMgaW5jbHVkZSBvYmplY3RzIHdoaWNoIGFyZSBub3QgZnVuZGFtZW50YWwgUHl0aG9uCiB0eXBlcywgdGhlIHJlcHJlc2VudGF0aW9uIG1heSBub3QgYmUgbG9hZGFibGUuICBUaGlzIG1heSBiZSB0aGUgY2FzZSBpZiBvYmplY3RzCi1zdWNoIGFzIGZpbGVzLCBzb2NrZXRzLCBjbGFzc2VzLCBvciBpbnN0YW5jZXMgYXJlIGluY2x1ZGVkLCBhcyB3ZWxsIGFzIG1hbnkKLW90aGVyIGJ1aWx0LWluIG9iamVjdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRhYmxlIGFzIFB5dGhvbiBjb25zdGFudHMuCitzdWNoIGFzIGZpbGVzLCBzb2NrZXRzIG9yIGNsYXNzZXMgYXJlIGluY2x1ZGVkLCBhcyB3ZWxsIGFzIG1hbnkgb3RoZXIKK29iamVjdHMgd2hpY2ggYXJlIG5vdCByZXByZXNlbnRhYmxlIGFzIFB5dGhvbiBsaXRlcmFscy4KIAogVGhlIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBrZWVwcyBvYmplY3RzIG9uIGEgc2luZ2xlIGxpbmUgaWYgaXQgY2FuLCBhbmQKIGJyZWFrcyB0aGVtIG9udG8gbXVsdGlwbGUgbGluZXMgaWYgdGhleSBkb24ndCBmaXQgd2l0aGluIHRoZSBhbGxvd2VkIHdpZHRoLgpAQCAtMjksMTQgKzI5LDE0IEBACiAuLiBGaXJzdCB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3M6CiAKIAotLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUpCisuLiBjbGFzczo6IFByZXR0eVByaW50ZXIoaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCBzdHJlYW09Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpCiAKICAgIENvbnN0cnVjdCBhIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgaW5zdGFuY2UuICBUaGlzIGNvbnN0cnVjdG9yIHVuZGVyc3RhbmRzCiAgICBzZXZlcmFsIGtleXdvcmQgcGFyYW1ldGVycy4gIEFuIG91dHB1dCBzdHJlYW0gbWF5IGJlIHNldCB1c2luZyB0aGUgKnN0cmVhbSoKICAgIGtleXdvcmQ7IHRoZSBvbmx5IG1ldGhvZCB1c2VkIG9uIHRoZSBzdHJlYW0gb2JqZWN0IGlzIHRoZSBmaWxlIHByb3RvY29sJ3MKICAgIDptZXRoOmB3cml0ZWAgbWV0aG9kLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgYWRvcHRzCi0gICBgYHN5cy5zdGRvdXRgYC4gIFRocmVlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBtYXkgYmUgdXNlZCB0byBjb250cm9sIHRoZQotICAgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uLiAgVGhlIGtleXdvcmRzIGFyZSAqaW5kZW50KiwgKmRlcHRoKiwgYW5kICp3aWR0aCouICBUaGUKKyAgIGBgc3lzLnN0ZG91dGBgLiAgVGhlCiAgICBhbW91bnQgb2YgaW5kZW50YXRpb24gYWRkZWQgZm9yIGVhY2ggcmVjdXJzaXZlIGxldmVsIGlzIHNwZWNpZmllZCBieSAqaW5kZW50KjsKICAgIHRoZSBkZWZhdWx0IGlzIG9uZS4gIE90aGVyIHZhbHVlcyBjYW4gY2F1c2Ugb3V0cHV0IHRvIGxvb2sgYSBsaXR0bGUgb2RkLCBidXQgY2FuCiAgICBtYWtlIG5lc3RpbmcgZWFzaWVyIHRvIHNwb3QuICBUaGUgbnVtYmVyIG9mIGxldmVscyB3aGljaCBtYXkgYmUgcHJpbnRlZCBpcwpAQCAtNDUsNyArNDUsMTIgQEAKICAgIHRoZSBkZXB0aCBvZiB0aGUgb2JqZWN0cyBiZWluZyBmb3JtYXR0ZWQuICBUaGUgZGVzaXJlZCBvdXRwdXQgd2lkdGggaXMKICAgIGNvbnN0cmFpbmVkIHVzaW5nIHRoZSAqd2lkdGgqIHBhcmFtZXRlcjsgdGhlIGRlZmF1bHQgaXMgODAgY2hhcmFjdGVycy4gIElmIGEKICAgIHN0cnVjdHVyZSBjYW5ub3QgYmUgZm9ybWF0dGVkIHdpdGhpbiB0aGUgY29uc3RyYWluZWQgd2lkdGgsIGEgYmVzdCBlZmZvcnQgd2lsbAotICAgYmUgbWFkZS4KKyAgIGJlIG1hZGUuICBJZiAqY29tcGFjdCogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSBlYWNoIGl0ZW0gb2YgYSBsb25nIHNlcXVlbmNlCisgICB3aWxsIGJlIGZvcm1hdHRlZCBvbiBhIHNlcGFyYXRlIGxpbmUuICBJZiAqY29tcGFjdCogaXMgdHJ1ZSwgYXMgbWFueSBpdGVtcworICAgYXMgd2lsbCBmaXQgd2l0aGluIHRoZSAqd2lkdGgqIHdpbGwgYmUgZm9ybWF0dGVkIG9uIGVhY2ggb3V0cHV0IGxpbmUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC01OCw2ICs2MywxMiBAQAogICAgICAgICAgICdsdW1iZXJqYWNrJywKICAgICAgICAgICAna25pZ2h0cycsCiAgICAgICAgICAgJ25pJ10KKyAgICAgID4+PiBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKHdpZHRoPTQxLCBjb21wYWN0PVRydWUpCisgICAgICA+Pj4gcHAucHByaW50KHN0dWZmKQorICAgICAgW1snc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLAorICAgICAgICAna25pZ2h0cycsICduaSddLAorICAgICAgICdzcGFtJywgJ2VnZ3MnLCAnbHVtYmVyamFjaycsICdrbmlnaHRzJywKKyAgICAgICAnbmknXQogICAgICAgPj4+IHR1cCA9ICgnc3BhbScsICgnZWdncycsICgnbHVtYmVyamFjaycsICgna25pZ2h0cycsICgnbmknLCAoJ2RlYWQnLAogICAgICAgLi4uICgncGFycm90JywgKCdmcmVzaCBmcnVpdCcsKSkpKSkpKSkKICAgICAgID4+PiBwcCA9IHBwcmludC5QcmV0dHlQcmludGVyKGRlcHRoPTYpCkBAIC02NSwyMyArNzYsMzAgQEAKICAgICAgICgnc3BhbScsICgnZWdncycsICgnbHVtYmVyamFjaycsICgna25pZ2h0cycsICgnbmknLCAoJ2RlYWQnLCAoLi4uKSkpKSkpKQogCiAKLVRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGNsYXNzIHN1cHBvcnRzIHNldmVyYWwgZGVyaXZhdGl2ZSBmdW5jdGlvbnM6CitUaGUgOm1vZDpgcHByaW50YCBtb2R1bGUgYWxzbyBwcm92aWRlcyBzZXZlcmFsIHNob3J0Y3V0IGZ1bmN0aW9uczoKIAotLi4gZnVuY3Rpb246OiBwZm9ybWF0KG9iamVjdCwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKQorLi4gZnVuY3Rpb246OiBwZm9ybWF0KG9iamVjdCwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLCBjb21wYWN0PUZhbHNlKQogCi0gICBSZXR1cm4gdGhlIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqZWN0KiBhcyBhIHN0cmluZy4gICppbmRlbnQqLCAqd2lkdGgqCi0gICBhbmQgKmRlcHRoKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcwotICAgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwKKyAgICp3aWR0aCosICpkZXB0aCogYW5kICpjb21wYWN0KiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYAorICAgY29uc3RydWN0b3IgYXMgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKIAotLi4gZnVuY3Rpb246OiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKQorLi4gZnVuY3Rpb246OiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBQcmludHMgdGhlIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqZWN0KiBvbiAqc3RyZWFtKiwgZm9sbG93ZWQgYnkgYQogICAgbmV3bGluZS4gIElmICpzdHJlYW0qIGlzIGBgTm9uZWBgLCBgYHN5cy5zdGRvdXRgYCBpcyB1c2VkLiAgVGhpcyBtYXkgYmUgdXNlZAogICAgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIGluc3RlYWQgb2YgdGhlIDpmdW5jOmBwcmludGAgZnVuY3Rpb24gZm9yCiAgICBpbnNwZWN0aW5nIHZhbHVlcyAoeW91IGNhbiBldmVuIHJlYXNzaWduIGBgcHJpbnQgPSBwcHJpbnQucHByaW50YGAgZm9yIHVzZQotICAgd2l0aGluIGEgc2NvcGUpLiAgKmluZGVudCosICp3aWR0aCogYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQKKyAgIHRvIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAgICAgICA+Pj4gaW1wb3J0IHBwcmludAogICAgICAgPj4+IHN0dWZmID0gWydzcGFtJywgJ2VnZ3MnLCAnbHVtYmVyamFjaycsICdrbmlnaHRzJywgJ25pJ10KQEAgLTE5MywxMDEgKzIxMSwxNDEgQEAKIC0tLS0tLS0KIAogVG8gZGVtb25zdHJhdGUgc2V2ZXJhbCB1c2VzIG9mIHRoZSA6ZnVuYzpgcHByaW50YCBmdW5jdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnMsCi1sZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBQeVBJOjoKK2xldCdzIGZldGNoIGluZm9ybWF0aW9uIGFib3V0IGEgcHJvamVjdCBmcm9tIGBQeVBJIDxodHRwczovL3B5cGkucHl0aG9uLm9yZz5gXzo6CiAKICAgID4+PiBpbXBvcnQganNvbgogICAgPj4+IGltcG9ydCBwcHJpbnQKICAgID4+PiBmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCi0gICA+Pj4gd2l0aCB1cmxvcGVuKCdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyL2pzb24nKSBhcyB1cmw6CisgICA+Pj4gd2l0aCB1cmxvcGVuKCdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC9qc29uJykgYXMgdXJsOgogICAgLi4uICAgICBodHRwX2luZm8gPSB1cmwuaW5mbygpCiAgICAuLi4gICAgIHJhd19kYXRhID0gdXJsLnJlYWQoKS5kZWNvZGUoaHR0cF9pbmZvLmdldF9jb250ZW50X2NoYXJzZXQoKSkKICAgID4+PiBwcm9qZWN0X2luZm8gPSBqc29uLmxvYWRzKHJhd19kYXRhKQotICAgPj4+IHJlc3VsdCA9IHsnaGVhZGVycyc6IGh0dHBfaW5mby5pdGVtcygpLCAnYm9keSc6IHByb2plY3RfaW5mb30KIAogSW4gaXRzIGJhc2ljIGZvcm0sIDpmdW5jOmBwcHJpbnRgIHNob3dzIHRoZSB3aG9sZSBvYmplY3Q6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKLSAgICAgICAgICAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAna2V5d29yZHMnOiAnY29uZmlncGFyc2VyIGluaSBwYXJzaW5nIGNvbmYgY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdjb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnYW55JywKLSAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci8zLjIuMHIzJywKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdW1tYXJ5JzogJ1RoaXMgbGlicmFyeSBicmluZ3MgdGhlIHVwZGF0ZWQgY29uZmlncGFyc2VyIGZyb20gUHl0aG9uIDMuMisgdG8gUHl0aG9uIDIuNi0yLjcuJywKLSAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICczLjIuMHIzJ30sCi0gICAgICAgICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCi0gICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNDcsCi0gICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6JywKLSAgICAgICAgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc4NTAwZmQ4N2M2MWFjMGRlMzI4ZmM5OTZmY2U2OWI5NicsCi0gICAgICAgICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnc2Rpc3QnLAotICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJ3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IDMyMjgxLAotICAgICAgICAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTEtMDUtMTBUMTY6Mjg6NTAnLAotICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9jL2NvbmZpZ3BhcnNlci9jb25maWdwYXJzZXItMy4yLjByMy50YXIuZ3onfV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWydQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIgOjogT25seSddLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCBmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCBpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAorICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKKyAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKKyAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAorICAgICAgICAgICAgICdtYWludGFpbmVyJzogJycsCisgICAgICAgICAgICAgJ21haW50YWluZXJfZW1haWwnOiAnJywKKyAgICAgICAgICAgICAnbmFtZSc6ICdUd2lzdGVkJywKKyAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvMTIuMy4wJywKKyAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAorICAgICAgICAgICAgICdzdW1tYXJ5JzogJ0FuIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nIGZyYW1ld29yayB3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbeydjb21tZW50X3RleHQnOiAnJywKKyAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDcxODQ0LAorICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnVHdpc3RlZC0xMi4zLjAudGFyLmJ6MicsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZlMjg5ODI1ZjNiZjU1OTFjZmQ2NzA4NzRjYzA4NjJkJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKKyAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJ3NvdXJjZScsCisgICAgICAgICAgICAgICdzaXplJzogMjYxNTczMywKKyAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTItMTItMjZUMTI6NDc6MDMnLAorICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9UL1R3aXN0ZWQvVHdpc3RlZC0xMi4zLjAudGFyLmJ6Mid9LAorICAgICAgICAgICAgIHsnY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA1MjI0LAorICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnVHdpc3RlZC0xMi4zLjAud2luMzItcHkyLjcubXNpJywKKyAgICAgICAgICAgICAgJ2hhc19zaWcnOiBGYWxzZSwKKyAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnNmI3NzhmNTIwMWI2MjJhNTUxOWEyYWNhMWEyZmU1MTInLAorICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnYmRpc3RfbXNpJywKKyAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJzIuNycsCisgICAgICAgICAgICAgICdzaXplJzogMjkxNjM1MiwKKyAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTItMTItMjZUMTI6NDg6MTUnLAorICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzLzIuNy9UL1R3aXN0ZWQvVHdpc3RlZC0xMi4zLjAud2luMzItcHkyLjcubXNpJ31dfQogCiBUaGUgcmVzdWx0IGNhbiBiZSBsaW1pdGVkIHRvIGEgY2VydGFpbiAqZGVwdGgqIChlbGxpcHNpcyBpcyB1c2VkIGZvciBkZWVwZXIKIGNvbnRlbnRzKTo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdCwgZGVwdGg9MykKLSAgIHsnYm9keSc6IHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKLSAgICAgICAgICAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAna2V5d29yZHMnOiAnY29uZmlncGFyc2VyIGluaSBwYXJzaW5nIGNvbmYgY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdjb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnYW55JywKLSAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci8zLjIuMHIzJywKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdW1tYXJ5JzogJ1RoaXMgbGlicmFyeSBicmluZ3MgdGhlIHVwZGF0ZWQgY29uZmlncGFyc2VyIGZyb20gUHl0aG9uIDMuMisgdG8gUHl0aG9uIDIuNi0yLjcuJywKLSAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICczLjIuMHIzJ30sCi0gICAgICAgICAgICd1cmxzJzogW3suLi59XX0sCi0gICAnaGVhZGVycyc6IFsoJ0RhdGUnLCAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAgICAgICAgICAgICgnU2VydmVyJywgJ0FwYWNoZS8yLjIuMTYgKERlYmlhbiknKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsICdpbmxpbmUnKSwKLSAgICAgICAgICAgICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICAgICAgICAgICAgKCdUcmFuc2Zlci1FbmNvZGluZycsICdjaHVua2VkJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV19CisgICA+Pj4gcHByaW50LnBwcmludChwcm9qZWN0X2luZm8sIGRlcHRoPTIpCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CiAKLUFkZGl0aW9uYWxseSwgbWF4aW11bSAqd2lkdGgqIGNhbiBiZSBzdWdnZXN0ZWQuIElmIGEgbG9uZyBvYmplY3QgY2Fubm90IGJlCi1zcGxpdCwgdGhlIHNwZWNpZmllZCB3aWR0aCB3aWxsIGJlIGV4Y2VlZGVkOjoKK0FkZGl0aW9uYWxseSwgbWF4aW11bSBjaGFyYWN0ZXIgKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0CitjYW5ub3QgYmUgc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdFsnaGVhZGVycyddLCB3aWR0aD0zMCkKLSAgIFsoJ0RhdGUnLAotICAgICAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAoJ1NlcnZlcicsCi0gICAgICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywKLSAgICAgJ2lubGluZScpLAotICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLAotICAgICAnY2h1bmtlZCcpLAotICAgICgnQ29udGVudC1UeXBlJywKLSAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yLCB3aWR0aD01MCkKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBwcm9ncmFtbWluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBtdWx0aXByb3RvY29sICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgJworICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmtpbmcgZnJhbWV3b3JrICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbey4uLn0sIHsuLi59XX0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B0eS5yc3QgYi9Eb2MvbGlicmFyeS9wdHkucnN0CmluZGV4IDJiOTM4NWIuLjkwYmFlYzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B0eS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHR5LnJzdApAQCAtNDUsNiArNDUsOSBAQAogICAgYSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBkZWZhdWx0cyB0cnkgdG8gcmVhZCAxMDI0IGJ5dGVzIGVhY2ggdGltZSB0aGV5IGFyZQogICAgY2FsbGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgOmZ1bmM6YHNwYXduYCBub3cgcmV0dXJucyB0aGUgc3RhdHVzIHZhbHVlIGZyb20gOmZ1bmM6YG9zLndhaXRwaWRgCisgICAgICBvbiB0aGUgY2hpbGQgcHJvY2Vzcy4KIAogRXhhbXBsZQogLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAppbmRleCAwN2RkYzI1Li5iYWU4NDUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdApAQCAtMjgsNyArMjgsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGNvbXBpbGUoZmlsZSwgY2ZpbGU9Tm9uZSwgZGZpbGU9Tm9uZSwgZG9yYWlzZT1GYWxzZSwgb3B0aW1pemU9LTEpCiAKLSAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlICBmaWxlLgorICAgQ29tcGlsZSBhIHNvdXJjZSBmaWxlIHRvIGJ5dGUtY29kZSBhbmQgd3JpdGUgb3V0IHRoZSBieXRlLWNvZGUgY2FjaGUgZmlsZS4KICAgIFRoZSBzb3VyY2UgY29kZSBpcyBsb2FkZWQgZnJvbSB0aGUgZmlsZSBuYW1lICpmaWxlKi4gIFRoZSAgYnl0ZS1jb2RlIGlzCiAgICB3cml0dGVuIHRvICpjZmlsZSosIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSA6UEVQOmAzMTQ3YCBwYXRoLCBlbmRpbmcgaW4KICAgIGBgLnB5Y2BgIChgYC5weW9gYCBpZiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBpbnRlcnByZXRlcikuCkBAIC00MSw2ICs0MSwxMyBAQAogICAgaXMgcmFpc2VkLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwYXRoIHRvIGJ5dGUtY29tcGlsZWQgZmlsZSwgaS5lLgogICAgd2hhdGV2ZXIgKmNmaWxlKiB2YWx1ZSB3YXMgdXNlZC4KIAorICAgSWYgdGhlIHBhdGggdGhhdCAqY2ZpbGUqIGJlY29tZXMgKGVpdGhlciBleHBsaWNpdGx5IHNwZWNpZmllZCBvciBjb21wdXRlZCkKKyAgIGlzIGEgc3ltbGluayBvciBub24tcmVndWxhciBmaWxlLCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgVGhpcyBpcyB0byBhY3QgYXMgYSB3YXJuaW5nIHRoYXQgaW1wb3J0IHdpbGwgdHVybiB0aG9zZSBwYXRocyBpbnRvIHJlZ3VsYXIKKyAgIGZpbGVzIGlmIGl0IGlzIGFsbG93ZWQgdG8gd3JpdGUgYnl0ZS1jb21waWxlZCBmaWxlcyB0byB0aG9zZSBwYXRocy4gVGhpcyBpcworICAgYSBzaWRlLWVmZmVjdCBvZiBpbXBvcnQgdXNpbmcgZmlsZSByZW5hbWluZyB0byBwbGFjZSB0aGUgZmluYWwgYnl0ZS1jb21waWxlZAorICAgZmlsZSBpbnRvIHBsYWNlIHRvIHByZXZlbnQgY29uY3VycmVudCBmaWxlIHdyaXRpbmcgaXNzdWVzLgorCiAgICAqb3B0aW1pemUqIGNvbnRyb2xzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgYW5kIGlzIHBhc3NlZCB0byB0aGUgYnVpbHQtaW4KICAgIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4gIFRoZSBkZWZhdWx0IG9mIGBgLTFgYCBzZWxlY3RzIHRoZSBvcHRpbWl6YXRpb24KICAgIGxldmVsIG9mIHRoZSBjdXJyZW50IGludGVycHJldGVyLgpAQCAtNTAsNiArNTcsMTMgQEAKICAgICAgIGRlZmF1bHQgd2FzICpmaWxlKiArIGBgJ2MnYGAgKGBgJ28nYGAgaWYgb3B0aW1pemF0aW9uIHdhcyBlbmFibGVkKS4KICAgICAgIEFsc28gYWRkZWQgdGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdlZCBjb2RlIHRvIHVzZSA6bW9kOmBpbXBvcnRsaWJgIGZvciB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUgd3JpdGluZy4KKyAgICAgIFRoaXMgbWVhbnMgZmlsZSBjcmVhdGlvbi93cml0aW5nIHNlbWFudGljcyBub3cgbWF0Y2ggd2hhdCA6bW9kOmBpbXBvcnRsaWJgCisgICAgICBkb2VzLCBlLmcuIHBlcm1pc3Npb25zLCB3cml0ZS1hbmQtbW92ZSBzZW1hbnRpY3MsIGV0Yy4gQWxzbyBhZGRlZCB0aGUKKyAgICAgIGNhdmVhdCB0aGF0IDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgcmFpc2VkIGlmICpjZmlsZSogaXMgYSBzeW1saW5rIG9yCisgICAgICBub24tcmVndWxhciBmaWxlLgorCiAKIC4uIGZ1bmN0aW9uOjogbWFpbihhcmdzPU5vbmUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CmluZGV4IGI2N2ZiZmMuLmYzMDdkN2QgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdApAQCAtMjUsNCArMjUsMyBAQAogICAgaW5zcGVjdC5yc3QKICAgIHNpdGUucnN0CiAgICBmcGVjdGwucnN0Ci0gICBkaXN0dXRpbHMucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZS5yc3QgYi9Eb2MvbGlicmFyeS9yZS5yc3QKaW5kZXggNzYyY2E0OS4uOWRjODg1MjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZS5yc3QKQEAgLTQ4MSw3ICs0ODEsNyBAQAogICAgLi4gbm90ZTo6CiAKICAgICAgIFRoZSBjb21waWxlZCB2ZXJzaW9ucyBvZiB0aGUgbW9zdCByZWNlbnQgcGF0dGVybnMgcGFzc2VkIHRvCi0gICAgICA6ZnVuYzpgcmUubWF0Y2hgLCA6ZnVuYzpgcmUuc2VhcmNoYCBvciA6ZnVuYzpgcmUuY29tcGlsZWAgYXJlIGNhY2hlZCwgc28KKyAgICAgIDpmdW5jOmByZS5jb21waWxlYCBhbmQgdGhlIG1vZHVsZS1sZXZlbCBtYXRjaGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCwgc28KICAgICAgIHByb2dyYW1zIHRoYXQgdXNlIG9ubHkgYSBmZXcgcmVndWxhciBleHByZXNzaW9ucyBhdCBhIHRpbWUgbmVlZG4ndCB3b3JyeQogICAgICAgYWJvdXQgY29tcGlsaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAKQEAgLTU4NCw2ICs1ODQsMTYgQEAKICAgIGluc3RlYWQgKHNlZSBhbHNvIDpyZWY6YHNlYXJjaC12cy1tYXRjaGApLgogCiAKKy4uIGZ1bmN0aW9uOjogZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKKworICAgSWYgdGhlIHdob2xlICpzdHJpbmcqIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqcGF0dGVybiosIHJldHVybiBhCisgICBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgUmV0dXJuIGBgTm9uZWBgIGlmIHRoZQorICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhCisgICB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApCiAKICAgIFNwbGl0ICpzdHJpbmcqIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiAqcGF0dGVybiouICBJZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlCkBAIC03NTUsNyArNzY1LDcgQEAKIAogICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJkIikKICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIikgICAgICMgTWF0Y2ggYXQgaW5kZXggMAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2QnPgogICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciLCAxKSAgIyBObyBtYXRjaDsgc2VhcmNoIGRvZXNuJ3QgaW5jbHVkZSB0aGUgImQiCiAKIApAQCAtNzcyLDEyICs3ODIsMzAgQEAKICAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgibyIpCiAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgogICAgPj4+IHBhdHRlcm4ubWF0Y2goImRvZyIsIDEpICAgIyBNYXRjaCBhcyAibyIgaXMgdGhlIDJuZCBjaGFyYWN0ZXIgb2YgImRvZyIuCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDEsIDIpLCBtYXRjaD0nbyc+CiAKICAgIElmIHlvdSB3YW50IHRvIGxvY2F0ZSBhIG1hdGNoIGFueXdoZXJlIGluICpzdHJpbmcqLCB1c2UKICAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBpbnN0ZWFkIChzZWUgYWxzbyA6cmVmOmBzZWFyY2gtdnMtbWF0Y2hgKS4KIAogCisuLiBtZXRob2Q6OiByZWdleC5mdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pCisKKyAgIElmIHRoZSB3aG9sZSAqc3RyaW5nKiBtYXRjaGVzIHRoaXMgcmVndWxhciBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nCisgICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90CisgICBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgVGhlIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgdGhlCisgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgbWV0aG9kLgorCisgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoIm9bZ2hdIikKKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJvZ3JlIikgICAgICMgTm8gbWF0Y2ggYXMgbm90IHRoZSBmdWxsIHN0cmluZyBtYXRjaGVzLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJkb2dnaWUiLCAxLCAzKSAgICMgTWF0Y2hlcyB3aXRoaW4gZ2l2ZW4gbGltaXRzLgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMSwgMyksIG1hdGNoPSdvZyc+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHJlZ2V4LnNwbGl0KHN0cmluZywgbWF4c3BsaXQ9MCkKIAogICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KQEAgLTExMzksNyArMTE2Nyw3IEBACiAKICAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDIsIDMpLCBtYXRjaD0nYyc+CiAKIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYmVnaW5uaW5nIHdpdGggYGAnXidgYCBjYW4gYmUgdXNlZCB3aXRoIDpmdW5jOmBzZWFyY2hgIHRvCiByZXN0cmljdCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOjoKQEAgLTExNDcsNyArMTE3NSw3IEBACiAgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5jIiwgImFiY2RlZiIpICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5hIiwgImFiY2RlZiIpICAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nYSc+CiAKIE5vdGUgaG93ZXZlciB0aGF0IGluIDpjb25zdDpgTVVMVElMSU5FYCBtb2RlIDpmdW5jOmBtYXRjaGAgb25seSBtYXRjaGVzIGF0IHRoZQogYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHdoZXJlYXMgdXNpbmcgOmZ1bmM6YHNlYXJjaGAgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgpAQCAtMTE1NSw3ICsxMTgzLDcgQEAKIAogICAgPj4+IHJlLm1hdGNoKCdYJywgJ0FcbkJcblgnLCByZS5NVUxUSUxJTkUpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCdeWCcsICdBXG5CXG5YJywgcmUuTVVMVElMSU5FKSAgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg0LCA1KSwgbWF0Y2g9J1gnPgogCiAKIE1ha2luZyBhIFBob25lYm9vawpAQCAtMTI3NCw5ICsxMzAyLDkgQEAKIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6CiAKICAgID4+PiByZS5tYXRjaChyIlxXKC4pXDFcVyIsICIgZmYgIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPScgZmYgJz4KICAgID4+PiByZS5tYXRjaCgiXFxXKC4pXFwxXFxXIiwgIiBmZiAiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9JyBmZiAnPgogCiBXaGVuIG9uZSB3YW50cyB0byBtYXRjaCBhIGxpdGVyYWwgYmFja3NsYXNoLCBpdCBtdXN0IGJlIGVzY2FwZWQgaW4gdGhlIHJlZ3VsYXIKIGV4cHJlc3Npb24uICBXaXRoIHJhdyBzdHJpbmcgbm90YXRpb24sIHRoaXMgbWVhbnMgYGByIlxcImBgLiAgV2l0aG91dCByYXcgc3RyaW5nCkBAIC0xMjg0LDkgKzEzMTIsOSBAQAogZnVuY3Rpb25hbGx5IGlkZW50aWNhbDoKIAogICAgPj4+IHJlLm1hdGNoKHIiXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAgICA+Pj4gcmUubWF0Y2goIlxcXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAKIAogV3JpdGluZyBhIFRva2VuaXplcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0IGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CmluZGV4IDExMzQ2MTkuLjY5MjMxMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKQEAgLTE5MCwyOCArMTkwLDMyIEBACiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSdzCiBoaXN0b3J5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnVuY3Rpb25zIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBhbmQgc2F2ZSBhIGhpc3RvcnkKLWZpbGUgbmFtZWQgOmZpbGU6YC5weWhpc3RgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlIGJlbG93IHdvdWxkCi1ub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBmcm9tIHRoZSB1c2VyJ3MKLTplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CitmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlCitiZWxvdyB3b3VsZCBub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucworZnJvbSB0aGUgdXNlcidzIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CiAKKyAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IHJlYWRsaW5lCi0gICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weWhpc3QiKQorCisgICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weXRob25faGlzdG9yeSIpCiAgICB0cnk6CiAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcGFzcwotICAgaW1wb3J0IGF0ZXhpdAorCiAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0ZmlsZSkKLSAgIGRlbCBvcywgaGlzdGZpbGUKKworVGhpcyBjb2RlIGlzIGFjdHVhbGx5IGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gUHl0aG9uIGlzIHJ1biBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGV4dGVuZHMgdGhlIDpjbGFzczpgY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGVgIGNsYXNzIHRvCiBzdXBwb3J0IGhpc3Rvcnkgc2F2ZS9yZXN0b3JlLiA6OgogCi0gICBpbXBvcnQgY29kZQotICAgaW1wb3J0IHJlYWRsaW5lCiAgICBpbXBvcnQgYXRleGl0CisgICBpbXBvcnQgY29kZQogICAgaW1wb3J0IG9zCisgICBpbXBvcnQgcmVhZGxpbmUKIAogICAgY2xhc3MgSGlzdG9yeUNvbnNvbGUoY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbHM9Tm9uZSwgZmlsZW5hbWU9Ijxjb25zb2xlPiIsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKaW5kZXggZWQ4NTg1MC4uOWJiNTg0OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdApAQCAtNzQsNiArNzQsMjcgQEAKICAgIGBgc2V0cmxpbWl0YGAgbWF5IGFsc28gcmFpc2UgOmV4YzpgZXJyb3JgIGlmIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxsCiAgICBmYWlscy4KIAorLi4gZnVuY3Rpb246OiBwcmxpbWl0KHBpZCwgcmVzb3VyY2VbLCBsaW1pdHNdKQorCisgICBDb21iaW5lcyA6ZnVuYzpgc2V0cmxpbWl0YCBhbmQgOmZ1bmM6YGdldHJsaW1pdGAgaW4gb25lIGZ1bmN0aW9uIGFuZAorICAgc3VwcG9ydHMgdG8gZ2V0IGFuZCBzZXQgdGhlIHJlc291cmNlcyBsaW1pdHMgb2YgYW4gYXJiaXRyYXJ5IHByb2Nlc3MuIElmCisgICAqcGlkKiBpcyAwLCB0aGVuIHRoZSBjYWxsIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgcHJvY2Vzcy4gKnJlc291cmNlKiBhbmQKKyAgICpsaW1pdHMqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBpbiA6ZnVuYzpgc2V0cmxpbWl0YCwgZXhjZXB0IHRoYXQKKyAgICpsaW1pdHMqIGlzIG9wdGlvbmFsLgorCisgICBXaGVuICpsaW1pdHMqIGlzIG5vdCBnaXZlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgKnJlc291cmNlKiBsaW1pdCBvZiB0aGUKKyAgIHByb2Nlc3MgKnBpZCouIFdoZW4gKmxpbWl0cyogaXMgZ2l2ZW4gdGhlICpyZXNvdXJjZSogbGltaXQgb2YgdGhlIHByb2Nlc3MgaXMKKyAgIHNldCBhbmQgdGhlIGZvcm1lciByZXNvdXJjZSBsaW1pdCBpcyByZXR1cm5lZC4KKworICAgUmFpc2VzIDpleGM6YFByb2Nlc3NMb29rdXBFcnJvcmAgd2hlbiAqcGlkKiBjYW4ndCBiZSBmb3VuZCBhbmQKKyAgIDpleGM6YFBlcm1pc3Npb25FcnJvcmAgd2hlbiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYGBDQVBfU1lTX1JFU09VUkNFYGAgZm9yCisgICB0aGUgcHJvY2Vzcy4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMzYgb3IgbGF0ZXIgd2l0aCBnbGliYyAyLjEzIG9yIGxhdGVyCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZXNlIHN5bWJvbHMgZGVmaW5lIHJlc291cmNlcyB3aG9zZSBjb25zdW1wdGlvbiBjYW4gYmUgY29udHJvbGxlZCB1c2luZyB0aGUKIDpmdW5jOmBzZXRybGltaXRgIGFuZCA6ZnVuYzpgZ2V0cmxpbWl0YCBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93LiBUaGUgdmFsdWVzIG9mCiB0aGVzZSBzeW1ib2xzIGFyZSBleGFjdGx5IHRoZSBjb25zdGFudHMgdXNlZCBieSBDIHByb2dyYW1zLgpAQCAtMTUxLDYgKzE3Miw1MiBAQAogICAgVGhlIG1heGltdW0gYXJlYSAoaW4gYnl0ZXMpIG9mIGFkZHJlc3Mgc3BhY2Ugd2hpY2ggbWF5IGJlIHRha2VuIGJ5IHRoZSBwcm9jZXNzLgogCiAKKy4uIGRhdGE6OiBSTElNSVRfTVNHUVVFVUUKKworICAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgZm9yIFBPU0lYIG1lc3NhZ2UgcXVldWVzLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi44IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX05JQ0UKKworICAgVGhlIGNlaWxpbmcgZm9yIHRoZSBwcm9jZXNzJ3MgbmljZSBsZXZlbCAoY2FsY3VsYXRlZCBhcyAyMCAtIHJsaW1fY3VyKS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMTIgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfUlRQUklPCisKKyAgIFRoZSBjZWlsaW5nIG9mIHRoZSByZWFsLXRpbWUgcHJpb3JpdHkuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42LjEyIG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBkYXRhOjogUkxJTUlUX1JUVElNRQorCisgICBUaGUgdGltZSBsaW1pdCAoaW4gbWljcm9zZWNvbmRzKSBvbiBDUFUgdGltZSB0aGF0IGEgcHJvY2VzcyBjYW4gc3BlbmQKKyAgIHVuZGVyIHJlYWwtdGltZSBzY2hlZHVsaW5nIHdpdGhvdXQgbWFraW5nIGEgYmxvY2tpbmcgc3lzY2FsbC4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMjUgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfU0lHUEVORElORworCisgICBUaGUgbnVtYmVyIG9mIHNpZ25hbHMgd2hpY2ggdGhlIHByb2Nlc3MgbWF5IHF1ZXVlLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi44IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBSZXNvdXJjZSBVc2FnZQogLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0IGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CmluZGV4IDYzMzA4OGQuLjllZDAxYzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKQEAgLTI3LDE4ICsyNywxMCBAQAogICAgcmVhZGxpbmUuX19uYW1lX18gICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgKICAgID4+PiByZWFkbGluZS4KIAotVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzIGludGVyYWN0aXZlCi1tb2RlLiAgQSB1c2VyIGNhbiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBoaXMgb3IgaGVyIGluaXRpYWxpemF0aW9uIGZpbGUKLShpZGVudGlmaWVkIGJ5IHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSkgdG8gZ2V0Ci1hdXRvbWF0aWMgOmtiZDpgVGFiYCBjb21wbGV0aW9uOjoKLQotICAgdHJ5OgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgIHByaW50KCJNb2R1bGUgcmVhZGxpbmUgbm90IGF2YWlsYWJsZS4iKQotICAgZWxzZToKLSAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKLSAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCitUaGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggUHl0aG9uJ3MKKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLiAgVW5sZXNzIFB5dGhvbiBpcyBydW4gd2l0aCB0aGUKKzpvcHRpb246YC1TYCBvcHRpb24sIHRoZSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBhbmQgY29uZmlndXJlZAorKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogT24gcGxhdGZvcm1zIHdpdGhvdXQgOm1vZDpgcmVhZGxpbmVgLCB0aGUgOmNsYXNzOmBDb21wbGV0ZXJgIGNsYXNzIGRlZmluZWQgYnkKIHRoaXMgbW9kdWxlIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdAppbmRleCBiMWZkM2E4Li41MjRlNDExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKQEAgLTE0LDYgKzE0LDE0IEBACiBJdCBjYW5ub3QgYmUgdXNlZCBvbiByZWd1bGFyIGZpbGVzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmlsZSBoYXMgZ3Jvd24gc2luY2UKIGl0IHdhcyBsYXN0IHJlYWQuCiAKKy4uIG5vdGU6OgorCisgICBUaGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgYWxsb3dzIGhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08KKyAgIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4gVXNlcnMgYXJlCisgICBlbmNvdXJhZ2VkIHRvIHVzZSB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgaW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudAorICAgcHJlY2lzZSBjb250cm9sIG92ZXIgdGhlIE9TLWxldmVsIHByaW1pdGl2ZXMgdXNlZC4KKworCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZzoKIAogCkBAIC0zNyw4ICs0NSwxMyBAQAogICAgaW5jcmVhc2VzIHRoaXMgdmFsdWUsIDpjOmZ1bmM6YGRldnBvbGxgIG1heSByZXR1cm4gYW4KICAgIGluY29tcGxldGUgbGlzdCBvZiBhY3RpdmUgZmlsZSBkZXNjcmlwdG9ycy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIC4uIGZ1bmN0aW9uOjogZXBvbGwoc2l6ZWhpbnQ9LTEsIGZsYWdzPTApCiAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBMaW51eCAyLjUuNDQgYW5kIG5ld2VyLikgUmV0dXJuIGFuIGVkZ2UgcG9sbGluZyBvYmplY3QsCkBAIC00NywxMSArNjAsMTcgQEAKICAgIHRvIDpjb25zdDpgRVBPTExfQ0xPRVhFQ2AsIHdoaWNoIGNhdXNlcyB0aGUgZXBvbGwgZGVzY3JpcHRvciB0byBiZSBjbG9zZWQKICAgIGF1dG9tYXRpY2FsbHkgd2hlbiA6ZnVuYzpgb3MuZXhlY3ZlYCBpcyBjYWxsZWQuIFNlZSBzZWN0aW9uCiAgICA6cmVmOmBlcG9sbC1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGVwb2xsaW5nIG9iamVjdHMuCisgICBUaGV5IGFsc28gc3VwcG9ydCB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlICpmbGFncyogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBvbGwoKQogCkBAIC02Niw2ICs4NSwxMSBAQAogICAgKE9ubHkgc3VwcG9ydGVkIG9uIEJTRC4pICBSZXR1cm5zIGEga2VybmVsIHF1ZXVlIG9iamVjdDsgc2VlIHNlY3Rpb24KICAgIDpyZWY6YGtxdWV1ZS1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGtxdWV1ZSBvYmplY3RzLgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjoga2V2ZW50KGlkZW50LCBmaWx0ZXI9S1FfRklMVEVSX1JFQUQsIGZsYWdzPUtRX0VWX0FERCwgZmZsYWdzPTAsIGRhdGE9MCwgdWRhdGE9MCkKIApAQCAtMTQ0LDYgKzE2OCwyNyBAQAogb2JqZWN0LgogCiAKKy4uIG1ldGhvZDo6IGRldnBvbGwuY2xvc2UoKQorCisgICBDbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gYXR0cmlidXRlOjogZGV2cG9sbC5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIHBvbGxpbmcgb2JqZWN0IGlzIGNsb3NlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gbWV0aG9kOjogZGV2cG9sbC5maWxlbm8oKQorCisgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIHBvbGxpbmcgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBkZXZwb2xsLnJlZ2lzdGVyKGZkWywgZXZlbnRtYXNrXSkKIAogICAgUmVnaXN0ZXIgYSBmaWxlIGRlc2NyaXB0b3Igd2l0aCB0aGUgcG9sbGluZyBvYmplY3QuICBGdXR1cmUgY2FsbHMgdG8gdGhlCkBAIC0yNDEsNiArMjg2LDExIEBACiAgICBDbG9zZSB0aGUgY29udHJvbCBmaWxlIGRlc2NyaXB0b3Igb2YgdGhlIGVwb2xsIG9iamVjdC4KIAogCisuLiBhdHRyaWJ1dGU6OiBlcG9sbC5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGVwb2xsIG9iamVjdCBpcyBjbG9zZWQuCisKKwogLi4gbWV0aG9kOjogZXBvbGwuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBjb250cm9sIGZkLgpAQCAtMzYwLDYgKzQxMCwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBrcXVldWUgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGtxdWV1ZS5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGtxdWV1ZSBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGtxdWV1ZS5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGIwMDJmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApAQCAtMCwwICsxLDI1NCBAQAorOm1vZDpgc2VsZWN0b3JzYCAtLSBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHNlbGVjdG9ycworICAgOnN5bm9wc2lzOiBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIG1vZHVsZQoraW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCitJdCBkZWZpbmVzIGEgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFic3RyYWN0IGJhc2UgY2xhc3MsIGFsb25nIHdpdGggc2V2ZXJhbAorY29uY3JldGUgaW1wbGVtZW50YXRpb25zICg6Y2xhc3M6YEtxdWV1ZVNlbGVjdG9yYCwgOmNsYXNzOmBFcG9sbFNlbGVjdG9yYC4uLiksCit0aGF0IGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIEkvTyByZWFkaW5lc3Mgbm90aWZpY2F0aW9uIG9uIG11bHRpcGxlIGZpbGUKK29iamVjdHMuIEluIHRoZSBmb2xsb3dpbmcsICJmaWxlIG9iamVjdCIgcmVmZXJzIHRvIGFueSBvYmplY3Qgd2l0aCBhCis6bWV0aDpgZmlsZW5vKClgIG1ldGhvZCwgb3IgYSByYXcgZmlsZSBkZXNjcmlwdG9yLiBTZWUgOnRlcm06YGZpbGUgb2JqZWN0YC4KKworOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGlzIGFuIGFsaWFzIHRvIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtOiB0aGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIG1vc3QKK3VzZXJzLgorCisuLiBub3RlOjoKKyAgIFRoZSB0eXBlIG9mIGZpbGUgb2JqZWN0cyBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm06IG9uIFdpbmRvd3MsCisgICBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGlwZXMsIHdoZXJlYXMgb24gVW5peCwgYm90aCBhcmUgc3VwcG9ydGVkCisgICAoc29tZSBvdGhlciB0eXBlcyBtYXkgYmUgc3VwcG9ydGVkIGFzIHdlbGwsIHN1Y2ggYXMgZmlmb3Mgb3Igc3BlY2lhbCBmaWxlCisgICBkZXZpY2VzKS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDptb2Q6YHNlbGVjdGAKKyAgICAgIExvdy1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIG1vZHVsZS4KKworCitDbGFzc2VzCistLS0tLS0tCisKK0NsYXNzZXMgaGllcmFyY2h5OjoKKworICAgQmFzZVNlbGVjdG9yCisgICArLS0gU2VsZWN0U2VsZWN0b3IKKyAgICstLSBQb2xsU2VsZWN0b3IKKyAgICstLSBFcG9sbFNlbGVjdG9yCisgICArLS0gS3F1ZXVlU2VsZWN0b3IKKworCitJbiB0aGUgZm9sbG93aW5nLCAqZXZlbnRzKiBpcyBhIGJpdHdpc2UgbWFzayBpbmRpY2F0aW5nIHdoaWNoIEkvTyBldmVudHMgc2hvdWxkCitiZSB3YWl0ZWQgZm9yIG9uIGEgZ2l2ZW4gZmlsZSBvYmplY3QuIEl0IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKK2JlbG93OgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRVZFTlRfUkVBRGAgICB8IEF2YWlsYWJsZSBmb3IgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRVZFTlRfV1JJVEVgICB8IEF2YWlsYWJsZSBmb3Igd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworLi4gY2xhc3M6OiBTZWxlY3RvcktleQorCisgICBBIDpjbGFzczpgU2VsZWN0b3JLZXlgIGlzIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdXNlZCB0bworICAgYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIHVuZGVybHlpbmcgZmlsZSBkZWNyaXB0b3IsIHNlbGVjdGVkIGV2ZW50CisgICBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiBJdCBpcyByZXR1cm5lZCBieSBzZXZlcmFsIDpjbGFzczpgQmFzZVNlbGVjdG9yYAorICAgbWV0aG9kcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW9iagorCisgICAgICBGaWxlIG9iamVjdCByZWdpc3RlcmVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmZAorCisgICAgICBVbmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKworICAgLi4gYXR0cmlidXRlOjogZXZlbnRzCisKKyAgICAgIEV2ZW50cyB0aGF0IG11c3QgYmUgd2FpdGVkIGZvciBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAuLiBhdHRyaWJ1dGU6OiBkYXRhCisKKyAgICAgIE9wdGlvbmFsIG9wYXF1ZSBkYXRhIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlIG9iamVjdDogZm9yIGV4YW1wbGUsIHRoaXMKKyAgICAgIGNvdWxkIGJlIHVzZWQgdG8gc3RvcmUgYSBwZXItY2xpZW50IHNlc3Npb24gSUQuCisKKworLi4gY2xhc3M6OiBCYXNlU2VsZWN0b3IKKworICAgQSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgaXMgdXNlZCB0byB3YWl0IGZvciBJL08gZXZlbnQgcmVhZGluZXNzIG9uIG11bHRpcGxlCisgICBmaWxlIG9iamVjdHMuIEl0IHN1cHBvcnRzIGZpbGUgc3RyZWFtIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBhCisgICBtZXRob2QgdG8gd2FpdCBmb3IgSS9PIGV2ZW50cyBvbiB0aG9zZSBzdHJlYW1zLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQuCisgICBJdCdzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIHNvIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuIFVzZQorICAgOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGluc3RlYWQsIG9yIG9uZSBvZiA6Y2xhc3M6YFNlbGVjdFNlbGVjdG9yYCwKKyAgIDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgIGV0Yy4gaWYgeW91IHdhbnQgdG8gc3BlY2lmaWNhbGx5IHVzZSBhbgorICAgaW1wbGVtZW50YXRpb24sIGFuZCB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LgorICAgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFuZCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlCisgICA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKworICAgLi4gbWV0aG9kOjogcmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIFJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZm9yIHNlbGVjdGlvbiwgbW9uaXRvcmluZyBpdCBmb3IgSS9PIGV2ZW50cy4KKworICAgICAgKmZpbGVvYmoqIGlzIHRoZSBmaWxlIG9iamVjdCB0byBtb25pdG9yLgorICAgICAgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgb2YgZXZlbnRzIHRvIG1vbml0b3IuCisgICAgICAqZGF0YSogaXMgYW4gb3BhcXVlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKKworICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKKyAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCisKKyAgICAgICpmaWxlb2JqKiBtdXN0IGJlIGEgZmlsZSBvYmplY3QgcHJldmlvdXNseSByZWdpc3RlcmVkLgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBtb2RpZnkoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIENoYW5nZSBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QncyBtb25pdG9yZWQgZXZlbnRzIG9yIGF0dGFjaGVkIGRhdGEuCisKKyAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byA6bWV0aDpgQmFzZVNlbGVjdG9yLnVucmVnaXN0ZXIoZmlsZW9iailgIGZvbGxvd2VkCisgICAgICBieSA6bWV0aDpgQmFzZVNlbGVjdG9yLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSlgLCBleGNlcHQgdGhhdCBpdAorICAgICAgY2FuIGJlIGltcGxlbWVudGVkIG1vcmUgZWZmaWNpZW50bHkuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIG5ldyA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSwgb3IgcmFpc2VzIGEKKyAgICAgIDpleGM6YFZhbHVlRXJyb3JgIGluIGNhc2Ugb2YgaW52YWxpZCBldmVudCBtYXNrIG9yIGZpbGUgZGVzY3JpcHRvciwgb3IKKyAgICAgIDpleGM6YEtleUVycm9yYCBpZiB0aGUgZmlsZSBvYmplY3QgaXMgbm90IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHNlbGVjdCh0aW1lb3V0PU5vbmUpCisKKyAgICAgIFdhaXQgdW50aWwgc29tZSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0cyBiZWNvbWUgcmVhZHksIG9yIHRoZSB0aW1lb3V0CisgICAgICBleHBpcmVzLgorCisgICAgICBJZiBgYHRpbWVvdXQgPiAwYGAsIHRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSwgaW4gc2Vjb25kcy4KKyAgICAgIElmIGBgdGltZW91dCA8PSAwYGAsIHRoZSBjYWxsIHdvbid0IGJsb2NrLCBhbmQgd2lsbCByZXBvcnQgdGhlIGN1cnJlbnRseQorICAgICAgcmVhZHkgZmlsZSBvYmplY3RzLgorICAgICAgSWYgKnRpbWVvdXQqIGlzIGBgTm9uZWBgLCB0aGUgY2FsbCB3aWxsIGJsb2NrIHVudGlsIGEgbW9uaXRvcmVkIGZpbGUgb2JqZWN0CisgICAgICBiZWNvbWVzIHJlYWR5LgorCisgICAgICBUaGlzIHJldHVybnMgYSBsaXN0IG9mIGBgKGtleSwgZXZlbnRzKWBgIHR1cGxlcywgb25lIGZvciBlYWNoIHJlYWR5IGZpbGUKKyAgICAgIG9iamVjdC4KKworICAgICAgKmtleSogaXMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gYSByZWFkeSBmaWxlCisgICAgICBvYmplY3QuCisgICAgICAqZXZlbnRzKiBpcyBhIGJpdG1hc2sgb2YgZXZlbnRzIHJlYWR5IG9uIHRoaXMgZmlsZSBvYmplY3QuCisKKyAgICAgIC4uIG5vdGU6OgorICAgICAgICAgIFRoaXMgbWV0aG9kIGNhbiByZXR1cm4gYmVmb3JlIGFueSBmaWxlIG9iamVjdCBiZWNvbWVzIHJlYWR5IG9yIHRoZQorICAgICAgICAgIHRpbWVvdXQgaGFzIGVsYXBzZWQgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyByZWNlaXZlcyBhIHNpZ25hbDogaW4gdGhpcworICAgICAgICAgIGNhc2UsIGFuIGVtcHR5IGxpc3Qgd2lsbCBiZSByZXR1cm5lZC4KKworICAgLi4gbWV0aG9kOjogY2xvc2UoKQorCisgICAgICBDbG9zZSB0aGUgc2VsZWN0b3IuCisKKyAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICBUaGUgc2VsZWN0b3Igc2hhbGwgbm90IGJlIHVzZWQgb25jZSBpdCBoYXMgYmVlbiBjbG9zZWQuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9rZXkoZmlsZW9iaikKKworICAgICAgUmV0dXJuIHRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIHRoZSA6Y2xhc3M6YFNlbGVjdG9yS2V5YCBpbnN0YW5jZSBhc3NvY2lhdGVkIHRvIHRoaXMgZmlsZQorICAgICAgb2JqZWN0LCBvciByYWlzZXMgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X21hcCgpCisKKyAgICAgIFJldHVybiBhIG1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIDpjbGFzczpgfmNvbGxlY3Rpb25zLmFiYy5NYXBwaW5nYCBpbnN0YW5jZSBtYXBwaW5nCisgICAgICByZWdpc3RlcmVkIGZpbGUgb2JqZWN0cyB0byB0aGVpciBhc3NvY2lhdGVkIDpjbGFzczpgU2VsZWN0b3JLZXlgCisgICAgICBpbnN0YW5jZS4KKworCisuLiBjbGFzczo6IERlZmF1bHRTZWxlY3RvcigpCisKKyAgIFRoZSBkZWZhdWx0IHNlbGVjdG9yIGNsYXNzLCB1c2luZyB0aGUgbW9zdCBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24KKyAgIGF2YWlsYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9ybS4gVGhpcyBzaG91bGQgYmUgdGhlIGRlZmF1bHQgY2hvaWNlIGZvcgorICAgbW9zdCB1c2Vycy4KKworCisuLiBjbGFzczo6IFNlbGVjdFNlbGVjdG9yKCkKKworICAgOmZ1bmM6YHNlbGVjdC5zZWxlY3RgLWJhc2VkIHNlbGVjdG9yLgorCisKKy4uIGNsYXNzOjogUG9sbFNlbGVjdG9yKCkKKworICAgOmZ1bmM6YHNlbGVjdC5wb2xsYC1iYXNlZCBzZWxlY3Rvci4KKworCisuLiBjbGFzczo6IEVwb2xsU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LmVwb2xsYC1iYXNlZCBzZWxlY3Rvci4KKworICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZworICAgICAgOmZ1bmM6YHNlbGVjdC5lcG9sbGAgb2JqZWN0LgorCisKKy4uIGNsYXNzOjogS3F1ZXVlU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LmtxdWV1ZWAtYmFzZWQgc2VsZWN0b3IuCisKKyAgIC4uIG1ldGhvZDo6IGZpbGVubygpCisKKyAgICAgIFRoaXMgcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIHVzZWQgYnkgdGhlIHVuZGVybHlpbmcKKyAgICAgIDpmdW5jOmBzZWxlY3Qua3F1ZXVlYCBvYmplY3QuCisKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK0hlcmUgaXMgYSBzaW1wbGUgZWNobyBzZXJ2ZXIgaW1wbGVtZW50YXRpb246OgorCisgICBpbXBvcnQgc2VsZWN0b3JzCisgICBpbXBvcnQgc29ja2V0CisKKyAgIHNlbCA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQorCisgICBkZWYgYWNjZXB0KHNvY2ssIG1hc2spOgorICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpICAjIFNob3VsZCBiZSByZWFkeQorICAgICAgIHByaW50KCdhY2NlcHRlZCcsIGNvbm4sICdmcm9tJywgYWRkcikKKyAgICAgICBjb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgIHNlbC5yZWdpc3Rlcihjb25uLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgcmVhZCkKKworICAgZGVmIHJlYWQoY29ubiwgbWFzayk6CisgICAgICAgZGF0YSA9IGNvbm4ucmVjdigxMDAwKSAgIyBTaG91bGQgYmUgcmVhZHkKKyAgICAgICBpZiBkYXRhOgorICAgICAgICAgICBwcmludCgnZWNob2luZycsIHJlcHIoZGF0YSksICd0bycsIGNvbm4pCisgICAgICAgICAgIGNvbm4uc2VuZChkYXRhKSAgIyBIb3BlIGl0IHdvbid0IGJsb2NrCisgICAgICAgZWxzZToKKyAgICAgICAgICAgcHJpbnQoJ2Nsb3NpbmcnLCBjb25uKQorICAgICAgICAgICBzZWwudW5yZWdpc3Rlcihjb25uKQorICAgICAgICAgICBjb25uLmNsb3NlKCkKKworICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgc29jay5iaW5kKCgnbG9jYWxob3N0JywgMTIzNCkpCisgICBzb2NrLmxpc3RlbigxMDApCisgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgc2VsLnJlZ2lzdGVyKHNvY2ssIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBhY2NlcHQpCisKKyAgIHdoaWxlIFRydWU6CisgICAgICAgZXZlbnRzID0gc2VsLnNlbGVjdCgpCisgICAgICAgZm9yIGtleSwgbWFzayBpbiBldmVudHM6CisgICAgICAgICAgIGNhbGxiYWNrID0ga2V5LmRhdGEKKyAgICAgICAgICAgY2FsbGJhY2soa2V5LmZpbGVvYmosIG1hc2spCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0IGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAppbmRleCAwNDhmODBhLi40YmE5ZGRjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKQEAgLTQ0LDggKzQ0LDExIEBACiAgICAuLiBub3RlOjoKIAogICAgICAgRG8gbm90IHJlbHkgb24gdGhlIHNoZWxmIGJlaW5nIGNsb3NlZCBhdXRvbWF0aWNhbGx5OyBhbHdheXMgY2FsbAotICAgICAgOm1ldGg6YGNsb3NlYCBleHBsaWNpdGx5IHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55IG1vcmUsIG9yIHVzZSBhCi0gICAgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdpdGggOmZ1bmM6YGNvbnRleHRsaWIuY2xvc2luZ2AuCisgICAgICA6bWV0aDpgflNoZWxmLmNsb3NlYCBleHBsaWNpdGx5IHdoZW4geW91IGRvbid0IG5lZWQgaXQgYW55IG1vcmUsIG9yCisgICAgICB1c2UgOmZ1bmM6YHNoZWx2ZS5vcGVuYCBhcyBhIGNvbnRleHQgbWFuYWdlcjo6CisKKyAgICAgICAgICB3aXRoIHNoZWx2ZS5vcGVuKCdzcGFtJykgYXMgZGI6CisgICAgICAgICAgICAgIGRiWydlZ2dzJ10gPSAnZWdncycKIAogLi4gd2FybmluZzo6CiAKQEAgLTExOCwxMCArMTIxLDE1IEBACiAgICBUaGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXIgaXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gZW5jb2RlIGtleXMgYmVmb3JlIHRoZXkKICAgIGFyZSB1c2VkIHdpdGggdGhlIHVuZGVybHlpbmcgZGljdC4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCi0gICAgICBUaGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXI7IHByZXZpb3VzbHksIGtleXMgd2VyZSBhbHdheXMgZW5jb2RlZCBpbgorICAgOmNsYXNzOmBTaGVsZmAgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCB0aGUgKmtleWVuY29kaW5nKiBwYXJhbWV0ZXI7IHByZXZpb3VzbHksIGtleXMgd2VyZSBhbHdheXMgZW5jb2RlZCBpbgogICAgICAgVVRGLTguCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBjb250ZXh0IG1hbmFnZXIgc3VwcG9ydC4KKwogCiAuLiBjbGFzczo6IEJzZERiU2hlbGYoZGljdCwgcHJvdG9jb2w9Tm9uZSwgd3JpdGViYWNrPUZhbHNlLCBrZXllbmNvZGluZz0ndXRmLTgnKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0IGIvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAppbmRleCBhMTQ1N2QwLi5lNGYzNDhjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKQEAgLTUzLDcgKzUzLDcgQEAKICAgICpkc3QqIGFuZCByZXR1cm4gKmRzdCouICAqc3JjKiBhbmQgKmRzdCogYXJlIHBhdGggbmFtZXMgZ2l2ZW4gYXMgc3RyaW5ncy4KICAgICpkc3QqIG11c3QgYmUgdGhlIGNvbXBsZXRlIHRhcmdldCBmaWxlIG5hbWU7IGxvb2sgYXQgOmZ1bmM6YHNodXRpbC5jb3B5YAogICAgZm9yIGEgY29weSB0aGF0IGFjY2VwdHMgYSB0YXJnZXQgZGlyZWN0b3J5IHBhdGguICBJZiAqc3JjKiBhbmQgKmRzdCoKLSAgIHNwZWNpZnkgdGhlIHNhbWUgZmlsZSwgOmV4YzpgRXJyb3JgIGlzIHJhaXNlZC4KKyAgIHNwZWNpZnkgdGhlIHNhbWUgZmlsZSwgOmV4YzpgU2FtZUZpbGVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBUaGUgZGVzdGluYXRpb24gbG9jYXRpb24gbXVzdCBiZSB3cml0YWJsZTsgb3RoZXJ3aXNlLCBhbiA6ZXhjOmBPU0Vycm9yYAogICAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLiBJZiAqZHN0KiBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZSByZXBsYWNlZC4KQEAgLTY5LDYgKzY5LDE5IEBACiAgICAgICBBZGRlZCAqZm9sbG93X3N5bWxpbmtzKiBhcmd1bWVudC4KICAgICAgIE5vdyByZXR1cm5zICpkc3QqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgUmFpc2UgOmV4YzpgU2FtZUZpbGVFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBFcnJvcmAuICBTaW5jZSB0aGUgZm9ybWVyIGlzCisgICAgICBhIHN1YmNsYXNzIG9mIHRoZSBsYXR0ZXIsIHRoaXMgY2hhbmdlIGlzIGJhY2t3YXJkIGNvbXBhdGlibGUuCisKKworLi4gZXhjZXB0aW9uOjogU2FtZUZpbGVFcnJvcgorCisgICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBpbiA6ZnVuYzpgY29weWZpbGVgCisgICBhcmUgdGhlIHNhbWUgZmlsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjb3B5bW9kZShzcmMsIGRzdCwgKiwgZm9sbG93X3N5bWxpbmtzPVRydWUpCiAKICAgIENvcHkgdGhlIHBlcm1pc3Npb24gYml0cyBmcm9tICpzcmMqIHRvICpkc3QqLiAgVGhlIGZpbGUgY29udGVudHMsIG93bmVyLCBhbmQKQEAgLTM4MCwxMSArMzkzLDEwIEBACiAgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCi0gICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKLSAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgcGFzcwogICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKKyAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKKyAgICAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgICAgIGlmIGVycm9yczoKICAgICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaXRlLnJzdCBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CmluZGV4IDM2YjgwYzMuLmQ5M2U5MzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NpdGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NpdGUucnN0CkBAIC0zOCw2ICszOCw5IEBACiBpZiBpdCByZWZlcnMgdG8gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBhbmQgaWYgc28sIGFkZHMgaXQgdG8gYGBzeXMucGF0aGBgIGFuZAogYWxzbyBpbnNwZWN0cyB0aGUgbmV3bHkgYWRkZWQgcGF0aCBmb3IgY29uZmlndXJhdGlvbiBmaWxlcy4KIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgU3VwcG9ydCBmb3IgdGhlICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjUuCisKIElmIGEgZmlsZSBuYW1lZCAicHl2ZW52LmNmZyIgZXhpc3RzIG9uZSBkaXJlY3RvcnkgYWJvdmUgc3lzLmV4ZWN1dGFibGUsCiBzeXMucHJlZml4IGFuZCBzeXMuZXhlY19wcmVmaXggYXJlIHNldCB0byB0aGF0IGRpcmVjdG9yeSBhbmQKIGl0IGlzIGFsc28gY2hlY2tlZCBmb3Igc2l0ZS1wYWNrYWdlcyBhbmQgc2l0ZS1weXRob24gKHN5cy5iYXNlX3ByZWZpeCBhbmQKQEAgLTExMSw2ICsxMTQsMjMgQEAKIDptb2Q6YHNpdGVjdXN0b21pemVgIGFuZCA6bW9kOmB1c2VyY3VzdG9taXplYCBpcyBzdGlsbCBhdHRlbXB0ZWQuCiAKIAorLi4gX3JsY29tcGxldGVyLWNvbmZpZzoKKworUmVhZGxpbmUgY29uZmlndXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCA6bW9kOmByZWFkbGluZWAsIHRoaXMgbW9kdWxlIHdpbGwgYWxzbyBpbXBvcnQgYW5kCitjb25maWd1cmUgdGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUsIGlmIFB5dGhvbiBpcyBzdGFydGVkIGluCis6cmVmOmBpbnRlcmFjdGl2ZSBtb2RlIDx0dXQtaW50ZXJhY3RpdmU+YCBhbmQgd2l0aG91dCB0aGUgOm9wdGlvbjpgLVNgIG9wdGlvbi4KK1RoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGVuYWJsZSB0YWItY29tcGxldGlvbiBhbmQgdG8gdXNlCis6ZmlsZTpgfi8ucHl0aG9uX2hpc3RvcnlgIGFzIHRoZSBoaXN0b3J5IHNhdmUgZmlsZS4gIFRvIGRpc2FibGUgaXQsIG92ZXJyaWRlCit0aGUgOmRhdGE6YHN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBhdHRyaWJ1dGUgaW4geW91ciA6bW9kOmBzaXRlY3VzdG9taXplYAorb3IgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgbW9kdWxlIG9yIHlvdXIgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZS4KKworCitNb2R1bGUgY29udGVudHMKKy0tLS0tLS0tLS0tLS0tLQorCiAuLiBkYXRhOjogUFJFRklYRVMKIAogICAgQSBsaXN0IG9mIHByZWZpeGVzIGZvciBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzLgpAQCAtMTUzLDggKzE3Myw3IEBACiAKICAgIEFkZHMgYWxsIHRoZSBzdGFuZGFyZCBzaXRlLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBtb2R1bGUgc2VhcmNoCiAgICBwYXRoLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoaXMgbW9kdWxlIGlzIGltcG9ydGVkLAotICAgdW5sZXNzIHRoZSA6cHJvZ3JhbTpgcHl0aG9uYCBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AKLSAgIGZsYWcuCisgICB1bmxlc3MgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AgZmxhZy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgdW5jb25kaXRpb25uYWxseS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NtdHBkLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdAppbmRleCBmMzA1ODE4Li4zZWJlZDA2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc210cGQucnN0CkBAIC0yNyw3ICsyNyw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0KIAogCi0uLiBjbGFzczo6IFNNVFBTZXJ2ZXIobG9jYWxhZGRyLCByZW1vdGVhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIpCisuLiBjbGFzczo6IFNNVFBTZXJ2ZXIobG9jYWxhZGRyLCByZW1vdGVhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIsXAorICAgICAgICAgICAgICAgICAgICAgIG1hcD1Ob25lKQogCiAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBTTVRQU2VydmVyYCBvYmplY3QsIHdoaWNoIGJpbmRzIHRvIGxvY2FsIGFkZHJlc3MKICAgICpsb2NhbGFkZHIqLiAgSXQgd2lsbCB0cmVhdCAqcmVtb3RlYWRkciogYXMgYW4gdXBzdHJlYW0gU01UUCByZWxheWVyLiAgSXQKQEAgLTM4LDYgKzM5LDggQEAKICAgIGFjY2VwdGVkIGluIGEgYGBEQVRBYGAgY29tbWFuZC4gIEEgdmFsdWUgb2YgYGBOb25lYGAgb3IgYGAwYGAgbWVhbnMgbm8KICAgIGxpbWl0LgogCisgICBBIGRpY3Rpb25hcnkgY2FuIGJlIHNwZWNpZmllZCBpbiAqbWFwKiB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBzb2NrZXQgbWFwLgorCiAgICAuLiBtZXRob2Q6OiBwcm9jZXNzX21lc3NhZ2UocGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpCiAKICAgICAgIFJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGV4Y2VwdGlvbi4gT3ZlcnJpZGUgdGhpcyBpbiBzdWJjbGFzc2VzIHRvCkBAIC01Myw2ICs1Niw5IEBACiAgICAgICBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gdXNlIGEgY3VzdG9tIDpjbGFzczpgU01UUENoYW5uZWxgIGZvcgogICAgICAgbWFuYWdpbmcgU01UUCBjbGllbnRzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlICptYXAqIGFyZ3VtZW50IHdhcyBhZGRlZC4KKwogCiBEZWJ1Z2dpbmdTZXJ2ZXIgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkwLDExICs5NiwyMCBAQAogU01UUENoYW5uZWwgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBjbGFzczo6IFNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkcikKKy4uIGNsYXNzOjogU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9MzM1NTQ0MzIsXAorICAgICAgICAgICAgICAgICAgICAgICBtYXA9Tm9uZSkpCiAKICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNNVFBDaGFubmVsYCBvYmplY3Qgd2hpY2ggbWFuYWdlcyB0aGUgY29tbXVuaWNhdGlvbgogICAgYmV0d2VlbiB0aGUgc2VydmVyIGFuZCBhIHNpbmdsZSBTTVRQIGNsaWVudC4KIAorICAgKmNvbm4qIGFuZCAqYWRkciogYXJlIGFzIHBlciB0aGUgaW5zdGFuY2UgdmFyaWFibGVzIGRlc2NyaWJlZCBiZWxvdy4KKworICAgKmRhdGFfc2l6ZV9saW1pdCogc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHdpbGwgYmUKKyAgIGFjY2VwdGVkIGluIGEgYGBEQVRBYGAgY29tbWFuZC4gIEEgdmFsdWUgb2YgYGBOb25lYGAgb3IgYGAwYGAgbWVhbnMgbm8KKyAgIGxpbWl0LgorCisgICBBIGRpY3Rpb25hcnkgY2FuIGJlIHNwZWNpZmllZCBpbiAqbWFwKiB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBzb2NrZXQgbWFwLgorCiAgICBUbyB1c2UgYSBjdXN0b20gU01UUENoYW5uZWwgaW1wbGVtZW50YXRpb24geW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlCiAgICA6YXR0cjpgU01UUFNlcnZlci5jaGFubmVsX2NsYXNzYCBvZiB5b3VyIDpjbGFzczpgU01UUFNlcnZlcmAuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKaW5kZXggYWRkYzZiZS4uZWJhOGFlOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKQEAgLTkwLDYgKzkwLDEwIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgc291cmNlX2FkZHJlc3MgYXJndW1lbnQgd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGNsYXNzIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KIAogLi4gY2xhc3M6OiBMTVRQKGhvc3Q9JycsIHBvcnQ9TE1UUF9QT1JULCBsb2NhbF9ob3N0bmFtZT1Ob25lLCBzb3VyY2VfYWRkcmVzcz1Ob25lKQogCkBAIC0xMTAsOCArMTE0LDggQEAKIAogLi4gZXhjZXB0aW9uOjogU01UUEV4Y2VwdGlvbgogCi0gICBUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbCB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzCi0gICBtb2R1bGUuCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCB0aGF0IGlzIHRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsCisgICB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4KIAogCiAuLiBleGNlcHRpb246OiBTTVRQU2VydmVyRGlzY29ubmVjdGVkCkBAIC0zMTYsNiArMzIwLDExIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKmNvbnRleHQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRvciogKHNlZQorICAgICAgOmRhdGE6YH5zc2wuSEFTX1NOSWApLgorCiAKIC4uIG1ldGhvZDo6IFNNVFAuc2VuZG1haWwoZnJvbV9hZGRyLCB0b19hZGRycywgbXNnLCBtYWlsX29wdGlvbnM9W10sIHJjcHRfb3B0aW9ucz1bXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc29ja2V0LnJzdCBiL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKaW5kZXggM2JkMWMzMS4uYzJlOWYwMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc29ja2V0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CkBAIC0xMDcsOCArMTA3LDggQEAKIAogICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotLSBDZXJ0YWluIG90aGVyIGFkZHJlc3MgZmFtaWxpZXMgKDpjb25zdDpgQUZfQkxVRVRPT1RIYCwgOmNvbnN0OmBBRl9QQUNLRVRgKQotICBzdXBwb3J0IHNwZWNpZmljIHJlcHJlc2VudGF0aW9ucy4KKy0gQ2VydGFpbiBvdGhlciBhZGRyZXNzIGZhbWlsaWVzICg6Y29uc3Q6YEFGX0JMVUVUT09USGAsIDpjb25zdDpgQUZfUEFDS0VUYCwKKyAgOmNvbnN0OmBBRl9DQU5gKSBzdXBwb3J0IHNwZWNpZmljIHJlcHJlc2VudGF0aW9ucy4KIAogICAuLiBYWFggZG9jdW1lbnQgdGhlbSEKIApAQCAtMjY0LDYgKzI2NCwxNiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gZGF0YTo6IENBTl9CQ00KKyAgICAgICAgICBDQU5fQkNNXyoKKworICAgQ0FOX0JDTSwgaW4gdGhlIENBTiBwcm90b2NvbCBmYW1pbHksIGlzIHRoZSBicm9hZGNhc3QgbWFuYWdlciAoQkNNKSBwcm90b2NvbC4KKyAgIEJyb2FkY2FzdCBtYW5hZ2VyIGNvbnN0YW50cywgZG9jdW1lbnRlZCBpbiB0aGUgTGludXggZG9jdW1lbnRhdGlvbiwgYXJlIGFsc28KKyAgIGRlZmluZWQgaW4gdGhlIHNvY2tldCBtb2R1bGUuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggPj0gMi42LjI1LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IEFGX1JEUwogICAgICAgICAgIFBGX1JEUwpAQCAtMjkwLDYgKzMwMCwxMSBAQAogICAgVElQQyByZWxhdGVkIGNvbnN0YW50cywgbWF0Y2hpbmcgdGhlIG9uZXMgZXhwb3J0ZWQgYnkgdGhlIEMgc29ja2V0IEFQSS4gU2VlCiAgICB0aGUgVElQQyBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCisuLiBkYXRhOjogQUZfTElOSworCisgIEF2YWlsYWJpbGl0eTogQlNELCBPU1guCisKKyAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGRhdGE6OiBoYXNfaXB2NgogCkBAIC0zMDYsMjAgKzMyMSwyOSBAQAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYWxsIGNyZWF0ZSA6cmVmOmBzb2NrZXQgb2JqZWN0cyA8c29ja2V0LW9iamVjdHM+YC4KIAogCi0uLiBmdW5jdGlvbjo6IHNvY2tldChbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKQorLi4gZnVuY3Rpb246OiBzb2NrZXQoZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKQogCiAgICBDcmVhdGUgYSBuZXcgc29ja2V0IHVzaW5nIHRoZSBnaXZlbiBhZGRyZXNzIGZhbWlseSwgc29ja2V0IHR5cGUgYW5kIHByb3RvY29sCiAgICBudW1iZXIuICBUaGUgYWRkcmVzcyBmYW1pbHkgc2hvdWxkIGJlIDpjb25zdDpgQUZfSU5FVGAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgQUZfSU5FVDZgLCA6Y29uc3Q6YEFGX1VOSVhgLCA6Y29uc3Q6YEFGX0NBTmAgb3IgOmNvbnN0OmBBRl9SRFNgLiBUaGUKICAgIHNvY2tldCB0eXBlIHNob3VsZCBiZSA6Y29uc3Q6YFNPQ0tfU1RSRUFNYCAodGhlIGRlZmF1bHQpLAogICAgOmNvbnN0OmBTT0NLX0RHUkFNYCwgOmNvbnN0OmBTT0NLX1JBV2Agb3IgcGVyaGFwcyBvbmUgb2YgdGhlIG90aGVyIGBgU09DS19gYAotICAgY29uc3RhbnRzLiBUaGUgcHJvdG9jb2wgbnVtYmVyIGlzIHVzdWFsbHkgemVybyBhbmQgbWF5IGJlIG9taXR0ZWQgaW4gdGhhdAotICAgY2FzZSBvciA6Y29uc3Q6YENBTl9SQVdgIGluIGNhc2UgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYC4KKyAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIG9yIGluIHRoZQorICAgY2FzZSB3aGVyZSB0aGUgYWRkcmVzcyBmYW1pbHkgaXMgOmNvbnN0OmBBRl9DQU5gIHRoZSBwcm90b2NvbCBzaG91bGQgYmUgb25lCisgICBvZiA6Y29uc3Q6YENBTl9SQVdgIG9yIDpjb25zdDpgQ0FOX0JDTWAuCisKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGUgQUZfQ0FOIGZhbWlseSB3YXMgYWRkZWQuCiAgICAgICBUaGUgQUZfUkRTIGZhbWlseSB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgVGhlIENBTl9CQ00gcHJvdG9jb2wgd2FzIGFkZGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHJldHVybmVkIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogc29ja2V0cGFpcihbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKQogCkBAIC0zMjksMTAgKzM1MywxNSBAQAogICAgaWYgZGVmaW5lZCBvbiB0aGUgcGxhdGZvcm07IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBBRl9JTkVUYC4KICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0cyBhcmUgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlIHJldHVybmVkIHNvY2tldCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSB3aG9sZSBzb2NrZXQgQVBJLCByYXRoZXIKICAgICAgIHRoYW4gYSBzdWJzZXQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0cyBhcmUgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3NbLCB0aW1lb3V0Wywgc291cmNlX2FkZHJlc3NdXSkKIApAQCAtMzYwLDcgKzM4OSw3IEBACiAgICAgICBzdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCiAKIAotLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkKKy4uIGZ1bmN0aW9uOjogZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApCiAKICAgIER1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yICpmZCogKGFuIGludGVnZXIgYXMgcmV0dXJuZWQgYnkgYSBmaWxlIG9iamVjdCdzCiAgICA6bWV0aDpgZmlsZW5vYCBtZXRob2QpIGFuZCBidWlsZCBhIHNvY2tldCBvYmplY3QgZnJvbSB0aGUgcmVzdWx0LiAgQWRkcmVzcwpAQCAtMzcxLDYgKzQwMCwxMSBAQAogICAgYSBzb2NrZXQgcGFzc2VkIHRvIGEgcHJvZ3JhbSBhcyBzdGFuZGFyZCBpbnB1dCBvciBvdXRwdXQgKHN1Y2ggYXMgYSBzZXJ2ZXIKICAgIHN0YXJ0ZWQgYnkgdGhlIFVuaXggaW5ldCBkYWVtb24pLiAgVGhlIHNvY2tldCBpcyBhc3N1bWVkIHRvIGJlIGluIGJsb2NraW5nIG1vZGUuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBmcm9tc2hhcmUoZGF0YSkKIApAQCAtNTk4LDcgKzYzMiw3IEBACiAgICBib3RoIHRoZSB2YWx1ZSBvZiAqYWRkcmVzc19mYW1pbHkqIGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBvZgogICAgOmM6ZnVuYzpgaW5ldF9wdG9uYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcykuCisgICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKSwgV2luZG93cy4KIAogCiAuLiBmdW5jdGlvbjo6IGluZXRfbnRvcChhZGRyZXNzX2ZhbWlseSwgcGFja2VkX2lwKQpAQCAtNjE0LDcgKzY0OCw3IEBACiAgICBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHksIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLiAgQQogICAgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkIGZvciBlcnJvcnMgZnJvbSB0aGUgY2FsbCB0byA6ZnVuYzpgaW5ldF9udG9wYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcykuCisgICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKSwgV2luZG93cy4KIAogCiAuLgpAQCAtNzM1LDYgKzc2OSwxMSBAQAogICAgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLCBhbmQKICAgICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0byB0aGUgc29ja2V0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LmJpbmQoYWRkcmVzcykKIApAQCAtNzg2LDYgKzgyNSwxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmR1cCgpCisKKyAgIER1cGxpY2F0ZSB0aGUgc29ja2V0LgorCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIHNvY2tldCdzIGZpbGUgZGVzY3JpcHRvciAoYSBzbWFsbCBpbnRlZ2VyKS4gIFRoaXMgaXMgdXNlZnVsIHdpdGgKQEAgLTc5Niw2ICs4NDUsMTUgQEAKICAgIHRoaXMgbGltaXRhdGlvbi4KIAogCisuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0X2luaGVyaXRhYmxlKCkKKworICAgR2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZTogYGBUcnVlYGAgaWYgdGhlIHNvY2tldCBjYW4gYmUgaW5oZXJpdGVkIGluCisgICBjaGlsZCBwcm9jZXNzZXMsIGBgRmFsc2VgYCBpZiBpdCBjYW5ub3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5nZXRwZWVybmFtZSgpCiAKICAgIFJldHVybiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQuICBUaGlzIGlzIHVzZWZ1bCB0bwpAQCAtMTA4Miw2ICsxMTQwLDE0IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBtZXRob2Q6OiBzb2NrZXQuc2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlIDpyZWY6YGluaGVyaXRhYmxlIGZsYWcgPGZkX2luaGVyaXRhbmNlPmAgb2YgdGhlIHNvY2tldCdzIGZpbGUKKyAgIGRlc2NyaXB0b3Igb3Igc29ja2V0J3MgaGFuZGxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuc2V0YmxvY2tpbmcoZmxhZykKIAogICAgU2V0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZyBtb2RlIG9mIHRoZSBzb2NrZXQ6IGlmICpmbGFnKiBpcyBmYWxzZSwgdGhlCkBAIC0xMzYzLDcgKzE0MjksMTYgQEAKICAgIHMuaW9jdGwoc29ja2V0LlNJT19SQ1ZBTEwsIHNvY2tldC5SQ1ZBTExfT0ZGKQogCiBUaGUgbGFzdCBleGFtcGxlIHNob3dzIGhvdyB0byB1c2UgdGhlIHNvY2tldCBpbnRlcmZhY2UgdG8gY29tbXVuaWNhdGUgdG8gYSBDQU4KLW5ldHdvcmsuIFRoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWRnZTo6CituZXR3b3JrIHVzaW5nIHRoZSByYXcgc29ja2V0IHByb3RvY29sLiBUbyB1c2UgQ0FOIHdpdGggdGhlIGJyb2FkY2FzdAorbWFuYWdlciBwcm90b2NvbCBpbnN0ZWFkLCBvcGVuIGEgc29ja2V0IHdpdGg6OgorCisgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pCisKK0FmdGVyIGJpbmRpbmcgKDpjb25zdDpgQ0FOX1JBV2ApIG9yIGNvbm5lY3RpbmcgKDpjb25zdDpgQ0FOX0JDTWApIHRoZSBzb2NrZXQsIHlvdQorY2FuIHVzZSB0aGUgOm1ldGg6YHNvY2tldC5zZW5kYCwgYW5kIHRoZSA6bWV0aDpgc29ja2V0LnJlY3ZgIG9wZXJhdGlvbnMgKGFuZAordGhlaXIgY291bnRlcnBhcnRzKSBvbiB0aGUgc29ja2V0IG9iamVjdCBhcyB1c3VhbC4KKworVGhpcyBleGFtcGxlIG1pZ2h0IHJlcXVpcmUgc3BlY2lhbCBwcml2aWxlZGdlOjoKIAogICAgaW1wb3J0IHNvY2tldAogICAgaW1wb3J0IHN0cnVjdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdAppbmRleCBhZGQ2MTFmLi41OGJlNzhmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcHdkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdApAQCAtMTksOSArMTksOSBAQAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgSW5kZXggfCBBdHRyaWJ1dGUgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PSs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCAwICAgICB8IGBgc3BfbmFtYGAgICAgfCBMb2dpbiBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMCAgICAgfCBgYHNwX25hbXBgYCAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAxICAgICB8IGBgc3BfcHdkYGAgICAgfCBFbmNyeXB0ZWQgcGFzc3dvcmQgICAgICAgICAgICAgIHwKK3wgMSAgICAgfCBgYHNwX3B3ZHBgYCAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAyICAgICB8IGBgc3BfbHN0Y2hnYGAgfCBEYXRlIG9mIGxhc3QgY2hhbmdlICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0zNiwxNSArMzYsMTUgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDYgICAgIHwgYGBzcF9pbmFjdGBgICB8IE51bWJlciBvZiBkYXlzIGFmdGVyIHBhc3N3b3JkICAgfAogfCAgICAgICB8ICAgICAgICAgICAgICAgfCBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgICAgICAgIHwKLXwgICAgICAgfCAgICAgICAgICAgICAgIHwgYmxvY2tlZCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIHwgICAgICAgICAgICAgICB8IGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgNyAgICAgfCBgYHNwX2V4cGlyZWBgIHwgTnVtYmVyIG9mIGRheXMgc2luY2UgMTk3MC0wMS0wMSB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCB3aGVuIGFjY291bnQgZXhwaXJlcyAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDggICAgIHwgYGBzcF9mbGFnYGAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotVGhlIHNwX25hbSBhbmQgc3BfcHdkIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KK1RoZSBzcF9uYW1wIGFuZCBzcF9wd2RwIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIGVudHJ5IGFza2VkIGZvciBjYW5ub3QgYmUgZm91bmQuCiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAppbmRleCAwZGM4Yjg5Li5iYjRhYWI3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdApAQCAtMTU5LDcgKzE1OSw3IEBACiAgICBmaXJzdCBibGFuayBmb3IgdGhlIGNvbHVtbiBuYW1lOiB0aGUgY29sdW1uIG5hbWUgd291bGQgc2ltcGx5IGJlICJ4Ii4KIAogCi0uLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzXSkKKy4uIGZ1bmN0aW9uOjogY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGRldGVjdF90eXBlcywgaXNvbGF0aW9uX2xldmVsLCBjaGVja19zYW1lX3RocmVhZCwgZmFjdG9yeSwgY2FjaGVkX3N0YXRlbWVudHMsIHVyaV0pCiAKICAgIE9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUgKmRhdGFiYXNlKi4gWW91IGNhbiB1c2UKICAgIGBgIjptZW1vcnk6ImBgIHRvIG9wZW4gYSBkYXRhYmFzZSBjb25uZWN0aW9uIHRvIGEgZGF0YWJhc2UgdGhhdCByZXNpZGVzIGluIFJBTQpAQCAtMTk1LDYgKzE5NSwxOCBAQAogICAgZm9yIHRoZSBjb25uZWN0aW9uLCB5b3UgY2FuIHNldCB0aGUgKmNhY2hlZF9zdGF0ZW1lbnRzKiBwYXJhbWV0ZXIuIFRoZSBjdXJyZW50bHkKICAgIGltcGxlbWVudGVkIGRlZmF1bHQgaXMgdG8gY2FjaGUgMTAwIHN0YXRlbWVudHMuCiAKKyAgIElmICp1cmkqIGlzIHRydWUsICpkYXRhYmFzZSogaXMgaW50ZXJwcmV0ZWQgYXMgYSBVUkkuIFRoaXMgYWxsb3dzIHlvdQorICAgdG8gc3BlY2lmeSBvcHRpb25zLiBGb3IgZXhhbXBsZSwgdG8gb3BlbiBhIGRhdGFiYXNlIGluIHJlYWQtb25seSBtb2RlCisgICB5b3UgY2FuIHVzZTo6CisKKyAgICAgICBkYiA9IHNxbGl0ZTMuY29ubmVjdCgnZmlsZTpwYXRoL3RvL2RhdGFiYXNlP21vZGU9cm8nLCB1cmk9VHJ1ZSkKKworICAgTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZlYXR1cmUsIGluY2x1ZGluZyBhIGxpc3Qgb2YgcmVjb2duaXplZCBvcHRpb25zLCBjYW4KKyAgIGJlIGZvdW5kIGluIHRoZSBgU1FMaXRlIFVSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKnVyaSogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfY29udmVydGVyKHR5cGVuYW1lLCBjYWxsYWJsZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3NsLnJzdCBiL0RvYy9saWJyYXJ5L3NzbC5yc3QKaW5kZXggYjEzODYxZC4uMzBjYjczMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3NsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zc2wucnN0CkBAIC0yNiw3ICsyNiw4IEBACiAKICAgIFNvbWUgYmVoYXZpb3IgbWF5IGJlIHBsYXRmb3JtIGRlcGVuZGVudCwgc2luY2UgY2FsbHMgYXJlIG1hZGUgdG8gdGhlCiAgICBvcGVyYXRpbmcgc3lzdGVtIHNvY2tldCBBUElzLiAgVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIE9wZW5TU0wgbWF5IGFsc28KLSAgIGNhdXNlIHZhcmlhdGlvbnMgaW4gYmVoYXZpb3IuCisgICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLiBGb3IgZXhhbXBsZSwgVExTdjEuMSBhbmQgVExTdjEuMiBjb21lIHdpdGgKKyAgIG9wZW5zc2wgdmVyc2lvbiAxLjAuMS4KIAogLi4gd2FybmluZzo6CiAgICBEb24ndCB1c2UgdGhpcyBtb2R1bGUgd2l0aG91dCByZWFkaW5nIHRoZSA6cmVmOmBzc2wtc2VjdXJpdHlgLiAgRG9pbmcgc28KQEAgLTE4MywxNCArMTg0LDE2IEBACiAKICAgICAgLi4gdGFibGU6OgogCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09Ci0gICAgICAgICpjbGllbnQqIC8gKipzZXJ2ZXIqKiAgICAqKlNTTHYyKiogICoqU1NMdjMqKiAgKipTU0x2MjMqKiAgKipUTFN2MSoqCi0gICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tCi0gICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqU1NMdjMqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYyMyogICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpUTFN2MSogICAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICB5ZXMKLSAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0KKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT09ICA9PT09PT09PT09PQorICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKiAgKipUTFN2MS4xKiogICoqVExTdjEuMioqCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KKyAgICAgICAgKlNTTHYyKiAgICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjMqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqVExTdjEuMSogICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIG5vCisgICAgICAgICpUTFN2MS4yKiAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzCisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KIAogICAgLi4gbm90ZTo6CiAKQEAgLTIyNCw2ICsyMjcsNDUgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnQgKmNpcGhlcnMqLgogCisKK0NvbnRleHQgY3JlYXRpb24KK15eXl5eXl5eXl5eXl5eXl4KKworQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBoZWxwcyBjcmVhdGUgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3RzIGZvciBjb21tb24KK3B1cnBvc2VzLgorCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKQorCisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvcgorICAgdGhlIGdpdmVuICpwdXJwb3NlKi4gIFRoZSBzZXR0aW5ncyBhcmUgY2hvc2VuIGJ5IHRoZSA6bW9kOmBzc2xgIG1vZHVsZSwKKyAgIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhIGhpZ2hlciBzZWN1cml0eSBsZXZlbCB0aGFuIHdoZW4gY2FsbGluZyB0aGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgY29uc3RydWN0b3IgZGlyZWN0bHkuCisKKyAgICpjYWZpbGUqLCAqY2FwYXRoKiwgKmNhZGF0YSogcmVwcmVzZW50IG9wdGlvbmFsIENBIGNlcnRpZmljYXRlcyB0bworICAgdHJ1c3QgZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgYXMgaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2AuICBJZiBhbGwgdGhyZWUgYXJlCisgICA6Y29uc3Q6YE5vbmVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBjaG9vc2UgdG8gdHJ1c3QgdGhlIHN5c3RlbSdzIGRlZmF1bHQKKyAgIENBIGNlcnRpZmljYXRlcyBpbnN0ZWFkLgorCisgICBUaGUgc2V0dGluZ3MgaW4gUHl0aG9uIDMuNCBhcmU6IDpkYXRhOmBQUk9UT0NPTF9UTFN2MWAgd2l0aCBoaWdoIGVuY3J5cHRpb24KKyAgIGNpcGhlciBzdWl0ZXMgd2l0aG91dCBSQzQgYW5kIHdpdGhvdXQgdW5hdXRoZW50aWNhdGVkIGNpcGhlciBzdWl0ZXMuCisgICBQYXNzaW5nIDpkYXRhOmB+UHVycG9zZS5TRVJWRVJfQVVUSGAgYXMgKnB1cnBvc2UqIHNldHMKKyAgIDpkYXRhOmB+U1NMQ29udGV4dC52ZXJpZnlfbW9kZWAgdG8gOmRhdGE6YENFUlRfUkVRVUlSRURgIGFuZCBlaXRoZXIKKyAgIGxvYWRzIENBIGNlcnRpZmljYXRlcyAod2hlbiBhdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSosICpjYXBhdGgqIG9yICpjYWRhdGEqCisgICBpcyBnaXZlbikgb3IgdXNlcyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgIHRvIGxvYWQgZGVmYXVsdAorICAgQ0EgY2VydGlmaWNhdGVzLgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBwcm90b2NvbCwgb3B0aW9ucywgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBtYXkgY2hhbmdlIHRvIG1vcmUKKyAgICAgIHJlc3RyaWN0aXZlIHZhbHVlcyBhbnl0aW1lIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24uICBUaGUgdmFsdWVzCisgICAgICByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKworICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyBzcGVjaWZpYyBzZXR0aW5ncywgeW91IHNob3VsZCBjcmVhdGUgYQorICAgICAgOmNsYXNzOmBTU0xDb250ZXh0YCBhbmQgYXBwbHkgdGhlIHNldHRpbmdzIHlvdXJzZWxmLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBSYW5kb20gZ2VuZXJhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMzUzLDYgKzM5NSw2MSBAQAogICAgR2l2ZW4gYSBjZXJ0aWZpY2F0ZSBhcyBhbiBBU0NJSSBQRU0gc3RyaW5nLCByZXR1cm5zIGEgREVSLWVuY29kZWQgc2VxdWVuY2Ugb2YKICAgIGJ5dGVzIGZvciB0aGF0IHNhbWUgY2VydGlmaWNhdGUuCiAKKy4uIGZ1bmN0aW9uOjogZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworICAgUmV0dXJucyBhIG5hbWVkIHR1cGxlIHdpdGggcGF0aHMgdG8gT3BlblNTTCdzIGRlZmF1bHQgY2FmaWxlIGFuZCBjYXBhdGguCisgICBUaGUgcGF0aHMgYXJlIHRoZSBzYW1lIGFzIHVzZWQgYnkKKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc2AuIFRoZSByZXR1cm4gdmFsdWUgaXMgYQorICAgOnRlcm06YG5hbWVkIHR1cGxlYCBgYERlZmF1bHRWZXJpZnlQYXRoc2BgOgorCisgICAqIDphdHRyOmBjYWZpbGVgIC0gcmVzb2x2ZWQgcGF0aCB0byBjYWZpbGUgb3IgTm9uZSBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0LAorICAgKiA6YXR0cjpgY2FwYXRoYCAtIHJlc29sdmVkIHBhdGggdG8gY2FwYXRoIG9yIE5vbmUgaWYgdGhlIGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYWZpbGVfZW52YCAtIE9wZW5TU0wncyBlbnZpcm9ubWVudCBrZXkgdGhhdCBwb2ludHMgdG8gYSBjYWZpbGUsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhZmlsZWAgLSBoYXJkIGNvZGVkIHBhdGggdG8gYSBjYWZpbGUsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhcGF0aF9lbnZgIC0gT3BlblNTTCdzIGVudmlyb25tZW50IGtleSB0aGF0IHBvaW50cyB0byBhIGNhcGF0aCwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FwYXRoYCAtIGhhcmQgY29kZWQgcGF0aCB0byBhIGNhcGF0aCBkaXJlY3RvcnkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGZ1bmN0aW9uOjogZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVfbmFtZSkKKworICAgUmV0cmlldmUgY2VydGlmaWNhdGVzIGZyb20gV2luZG93cycgc3lzdGVtIGNlcnQgc3RvcmUuICpzdG9yZV9uYW1lKiBtYXkgYmUKKyAgIG9uZSBvZiBgYENBYGAsIGBgUk9PVGBgIG9yIGBgTVlgYC4gV2luZG93cyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGNlcnQKKyAgIHN0b3JlcywgdG9vLgorCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGNlcnRfYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuCisgICBUaGUgZW5jb2RpbmdfdHlwZSBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIGNlcnRfYnl0ZXMuIEl0IGlzIGVpdGhlcgorICAgOmNvbnN0OmB4NTA5X2FzbmAgZm9yIFguNTA5IEFTTi4xIGRhdGEgb3IgOmNvbnN0OmBwa2NzXzdfYXNuYCBmb3IKKyAgIFBLQ1MjNyBBU04uMSBkYXRhLiBUcnVzdCBzcGVjaWZpZXMgdGhlIHB1cnBvc2Ugb2YgdGhlIGNlcnRpZmljYXRlIGFzIGEgc2V0CisgICBvZiBPSURTIG9yIGV4YWN0bHkgYGBUcnVlYGAgaWYgdGhlIGNlcnRpZmljYXRlIGlzIHRydXN0d29ydGh5IGZvciBhbGwKKyAgIHB1cnBvc2VzLgorCisgICBFeGFtcGxlOjoKKworICAgICAgPj4+IHNzbC5lbnVtX2NlcnRpZmljYXRlcygiQ0EiKQorICAgICAgWyhiJ2RhdGEuLi4nLCAneDUwOV9hc24nLCB7JzEuMy42LjEuNS41LjcuMy4xJywgJzEuMy42LjEuNS41LjcuMy4yJ30pLAorICAgICAgIChiJ2RhdGEuLi4nLCAneDUwOV9hc24nLCBUcnVlKV0KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBlbnVtX2NybHMoc3RvcmVfbmFtZSkKKworICAgUmV0cmlldmUgQ1JMcyBmcm9tIFdpbmRvd3MnIHN5c3RlbSBjZXJ0IHN0b3JlLiAqc3RvcmVfbmFtZSogbWF5IGJlCisgICBvbmUgb2YgYGBDQWBgLCBgYFJPT1RgYCBvciBgYE1ZYGAuIFdpbmRvd3MgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBjZXJ0CisgICBzdG9yZXMsIHRvby4KKworICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChjZXJ0X2J5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLgorICAgVGhlIGVuY29kaW5nX3R5cGUgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyBvZiBjZXJ0X2J5dGVzLiBJdCBpcyBlaXRoZXIKKyAgIDpjb25zdDpgeDUwOV9hc25gIGZvciBYLjUwOSBBU04uMSBkYXRhIG9yIDpjb25zdDpgcGtjc183X2FzbmAgZm9yCisgICBQS0NTIzcgQVNOLjEgZGF0YS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBDb25zdGFudHMKIF5eXl5eXl5eXgogCkBAIC0zODksNiArNDg2LDM4IEBACiAgICBiZSBwYXNzZWQsIGVpdGhlciB0byA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgIG9yIGFzIGEKICAgIHZhbHVlIG9mIHRoZSBgYGNhX2NlcnRzYGAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuCiAKKy4uIGRhdGE6OiBWRVJJRllfREVGQVVMVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLAorICAgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgYXJlIG5vdCBjaGVja2VkLiBCeSBkZWZhdWx0IE9wZW5TU0wKKyAgIGRvZXMgbmVpdGhlciByZXF1aXJlIG5vciB2ZXJpZnkgQ1JMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0xFQUYKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwgb25seSB0aGUKKyAgIHBlZXIgY2VydCBpcyBjaGVjayBidXQgbm9uIG9mIHRoZSBpbnRlcm1lZGlhdGUgQ0EgY2VydGlmaWNhdGVzLiBUaGUgbW9kZQorICAgcmVxdWlyZXMgYSB2YWxpZCBDUkwgdGhhdCBpcyBzaWduZWQgYnkgdGhlIHBlZXIgY2VydCdzIGlzc3VlciAoaXRzIGRpcmVjdAorICAgYW5jZXN0b3IgQ0EpLiBJZiBubyBwcm9wZXIgaGFzIGJlZW4gbG9hZGVkCisgICA6YXR0cjpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLCB2YWxpZGF0aW9uIHdpbGwgZmFpbC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0NIQUlOCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsIENSTHMgb2YKKyAgIGFsbCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHBlZXIgY2VydCBjaGFpbiBhcmUgY2hlY2tlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfWDUwOV9TVFJJQ1QKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdG8gZGlzYWJsZSB3b3JrYXJvdW5kcworICAgZm9yIGJyb2tlbiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkYXRhOjogUFJPVE9DT0xfU1NMdjIKIAogICAgU2VsZWN0cyBTU0wgdmVyc2lvbiAyIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCkBAIC00MTQsOSArNTQzLDI1IEBACiAKIC4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MQogCi0gICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgdGhlIG1vc3QKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4wIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8xCisKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKyAgIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8yCisKKworICAgU2VsZWN0cyBUTFMgdmVyc2lvbiAxLjIgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gVGhpcyBpcyB0aGUgbW9zdAogICAgbW9kZXJuIHZlcnNpb24sIGFuZCBwcm9iYWJseSB0aGUgYmVzdCBjaG9pY2UgZm9yIG1heGltdW0gcHJvdGVjdGlvbiwgaWYgYm90aAogICAgc2lkZXMgY2FuIHNwZWFrIGl0LgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IE9QX0FMTAogCkBAIC00NTAsNiArNTk1LDIyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogT1BfTk9fVExTdjFfMQorCisgICBQcmV2ZW50cyBhIFRMU3YxLjEgY29ubmVjdGlvbi4gVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluIGNvbmp1bmN0aW9uCisgICB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20gY2hvb3NpbmcgVExTdjEuMSBhcworICAgdGhlIHByb3RvY29sIHZlcnNpb24uIEF2YWlsYWJsZSBvbmx5IHdpdGggb3BlbnNzbCB2ZXJzaW9uIDEuMC4xKy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBPUF9OT19UTFN2MV8yCisKKyAgIFByZXZlbnRzIGEgVExTdjEuMiBjb25uZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbSBjaG9vc2luZyBUTFN2MS4yIGFzCisgICB0aGUgcHJvdG9jb2wgdmVyc2lvbi4gQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGF0YTo6IE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRQogCiAgICBVc2UgdGhlIHNlcnZlcidzIGNpcGhlciBvcmRlcmluZyBwcmVmZXJlbmNlLCByYXRoZXIgdGhhbiB0aGUgY2xpZW50J3MuCkBAIC01NDYsNiArNzA3LDM3IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorICAgICAgICAgIEFMRVJUX0RFU0NSSVBUSU9OXyoKKworICAgQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gOnJmYzpgNTI0NmAgYW5kIG90aGVycy4gVGhlIGBJQU5BIFRMUyBBbGVydCBSZWdpc3RyeQorICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KKyAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCisKKyAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLlNFUlZFUl9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgc2VydmVycyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBjbGllbnQtc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLkNMSUVOVF9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgY2xpZW50cyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBzZXJ2ZXItc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogU1NMIFNvY2tldHMKIC0tLS0tLS0tLS0tCkBAIC01ODEsMTAgKzc3MywxNiBAQAogCiAgICBQZXJmb3JtIHRoZSBTU0wgc2V0dXAgaGFuZHNoYWtlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGhhbmRzaGFrZSBtZXRob2QgYWxzbyBwZXJmb3JtY2UgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCB3aGVuIHRoZQorICAgICAgOmF0dHI6YH5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhdHRyaWJ1dGUgb2YgdGhlIHNvY2tldCdzCisgICAgICA6YXR0cjpgflNTTFNvY2tldC5jb250ZXh0YCBpcyB0cnVlLgorCiAuLiBtZXRob2Q6OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoYmluYXJ5X2Zvcm09RmFsc2UpCiAKICAgIElmIHRoZXJlIGlzIG5vIGNlcnRpZmljYXRlIGZvciB0aGUgcGVlciBvbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBjb25uZWN0aW9uLAotICAgcmV0dXJucyBgYE5vbmVgYC4KKyAgIHJldHVybiBgYE5vbmVgYC4gIElmIHRoZSBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUgeWV0LCByYWlzZQorICAgOmV4YzpgVmFsdWVFcnJvcmAuCiAKICAgIElmIHRoZSBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgLCBhbmQgYSBjZXJ0aWZpY2F0ZSB3YXMKICAgIHJlY2VpdmVkIGZyb20gdGhlIHBlZXIsIHRoaXMgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YGRpY3RgIGluc3RhbmNlLiAgSWYgdGhlCkBAIC02NDEsNiArODM5LDEzIEBACiAgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIGl0ZW1zIHN1Y2ggYXMgYGBpc3N1ZXJgYAogICAgICAgYW5kIGBgbm90QmVmb3JlYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgd2hlbiB0aGUgaGFuZHNoYWtlIGlzbid0IGRvbmUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgZGljdGlvbmFyeSBpbmNsdWRlcyBhZGRpdGlvbmFsIFg1MDl2MyBleHRlbnNpb24gaXRlbXMKKyAgICAgIHN1Y2ggYXMgYGBjcmxEaXN0cmlidXRpb25Qb2ludHNgYCwgYGBjYUlzc3VlcnNgYCBhbmQgYGBPQ1NQYGAgVVJJcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC03MTEsMTEgKzkxNiwzMCBAQAogCiAgICBDcmVhdGUgYSBuZXcgU1NMIGNvbnRleHQuICBZb3UgbXVzdCBwYXNzICpwcm90b2NvbCogd2hpY2ggbXVzdCBiZSBvbmUKICAgIG9mIHRoZSBgYFBST1RPQ09MXypgYCBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KLSAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIHJlY29tbWVuZGVkIGZvciBtYXhpbXVtIGludGVyb3BlcmFiaWxpdHkuCisgICA6ZGF0YTpgUFJPVE9DT0xfU1NMdjIzYCBpcyBjdXJyZW50bHkgcmVjb21tZW5kZWQgZm9yIG1heGltdW0KKyAgIGludGVyb3BlcmFiaWxpdHkuCisKKyAgIC4uIHNlZWFsc286OgorICAgICAgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGxldHMgdGhlIDptb2Q6YHNzbGAgbW9kdWxlIGNob29zZQorICAgICAgc2VjdXJpdHkgc2V0dGluZ3MgZm9yIGEgZ2l2ZW4gcHVycG9zZS4KIAogCiA6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuY2VydF9zdG9yZV9zdGF0cygpCisKKyAgIEdldCBzdGF0aXN0aWNzIGFib3V0IHF1YW50aXRpZXMgb2YgbG9hZGVkIFguNTA5IGNlcnRpZmljYXRlcywgY291bnQgb2YKKyAgIFguNTA5IGNlcnRpZmljYXRlcyBmbGFnZ2VkIGFzIENBIGNlcnRpZmljYXRlcyBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbgorICAgbGlzdHMgYXMgZGljdGlvbmFyeS4KKworICAgRXhhbXBsZSBmb3IgYSBjb250ZXh0IHdpdGggb25lIENBIGNlcnQgYW5kIG9uZSBvdGhlciBjZXJ0OjoKKworICAgICAgPj4+IGNvbnRleHQuY2VydF9zdG9yZV9zdGF0cygpCisgICAgICB7J2NybCc6IDAsICd4NTA5X2NhJzogMSwgJ3g1MDknOiAyfQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lLCBwYXNzd29yZD1Ob25lKQogCiAgICBMb2FkIGEgcHJpdmF0ZSBrZXkgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGNlcnRpZmljYXRlLiAgVGhlICpjZXJ0ZmlsZSoKQEAgLTc0NiwxMiArOTcwLDMyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpwYXNzd29yZCouCiAKLS4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSkKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCkKKworICAgTG9hZCBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgZnJvbQorICAgZGVmYXVsdCBsb2NhdGlvbnMuIE9uIFdpbmRvd3MgaXQgbG9hZHMgQ0EgY2VydHMgZnJvbSB0aGUgYGBDQWBgIGFuZAorICAgYGBST09UYGAgc3lzdGVtIHN0b3Jlcy4gT24gb3RoZXIgc3lzdGVtcyBpdCBjYWxscworICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gSW4gdGhlIGZ1dHVyZSB0aGUgbWV0aG9kIG1heQorICAgbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMsIHRvby4KKworICAgVGhlICpwdXJwb3NlKiBmbGFnIHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgQ0EgY2VydGlmaWNhdGVzIGFyZSBsb2FkZWQuIFRoZQorICAgZGVmYXVsdCBzZXR0aW5ncyA6ZGF0YTpgUHVycG9zZS5TRVJWRVJfQVVUSGAgbG9hZHMgY2VydGlmaWNhdGVzLCB0aGF0IGFyZQorICAgZmxhZ2dlZCBhbmQgdHJ1c3RlZCBmb3IgVExTIHdlYiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKGNsaWVudCBzaWRlCisgICBzb2NrZXRzKS4gOmRhdGE6YFB1cnBvc2UuQ0xJRU5UX0FVVEhgIGxvYWRzIENBIGNlcnRpZmljYXRlcyBmb3IgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb24gdGhlIHNlcnZlciBzaWRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKIAogICAgTG9hZCBhIHNldCBvZiAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIHVzZWQgdG8gdmFsaWRhdGUKICAgIG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgd2hlbiA6ZGF0YTpgdmVyaWZ5X21vZGVgIGlzIG90aGVyIHRoYW4KICAgIDpkYXRhOmBDRVJUX05PTkVgLiAgQXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqIG9yICpjYXBhdGgqIG11c3QgYmUgc3BlY2lmaWVkLgogCisgICBUaGlzIG1ldGhvZCBjYW4gYWxzbyBsb2FkIGNlcnRpZmljYXRpb24gcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgaW4gUEVNIG9yCisgICBvciBERVIgZm9ybWF0LiBJbiBvcmRlciB0byBtYWtlIHVzZSBvZiBDUkxzLCA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgCisgICBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkuCisKICAgIFRoZSAqY2FmaWxlKiBzdHJpbmcsIGlmIHByZXNlbnQsIGlzIHRoZSBwYXRoIHRvIGEgZmlsZSBvZiBjb25jYXRlbmF0ZWQKICAgIENBIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YKICAgIDpyZWY6YHNzbC1jZXJ0aWZpY2F0ZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBhcnJhbmdlIHRoZQpAQCAtNzYyLDYgKzEwMDYsMjUgQEAKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKICAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCiAKKyAgIFRoZSAqY2FkYXRhKiBvYmplY3QsIGlmIHByZXNlbnQsIGlzIGVpdGhlciBhbiBBU0NJSSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKKyAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBvciBhIGJ5dGVzLWxpa2Ugb2JqZWN0IG9mIERFUi1lbmNvZGVkCisgICBjZXJ0aWZpY2F0ZXMuIExpa2Ugd2l0aCAqY2FwYXRoKiBleHRyYSBsaW5lcyBhcm91bmQgUEVNLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcyBhcmUgaWdub3JlZCBidXQgYXQgbGVhc3Qgb25lIGNlcnRpZmljYXRlIG11c3QgYmUgcHJlc2VudC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIE5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2FkYXRhKgorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LmdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkKKworICAgR2V0IGEgbGlzdCBvZiBsb2FkZWQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcy4gSWYgdGhlCisgICBgYGJpbmFyeV9mb3JtYGAgcGFyYW1ldGVyIGlzIDpjb25zdDpgRmFsc2VgIGVhY2ggbGlzdAorICAgZW50cnkgaXMgYSBkaWN0IGxpa2UgdGhlIG91dHB1dCBvZiA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YC4gT3RoZXJ3aXNlCisgICB0aGUgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIERFUi1lbmNvZGVkIGNlcnRpZmljYXRlcy4gVGhlIHJldHVybmVkIGxpc3QKKyAgIGRvZXMgbm90IGNvbnRhaW4gY2VydGlmaWNhdGVzIGZyb20gKmNhcGF0aCogdW5sZXNzIGEgY2VydGlmaWNhdGUgd2FzCisgICByZXF1ZXN0ZWQgYW5kIGxvYWRlZCBieSBhIFNTTCBjb25uZWN0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQogCiAgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCkBAIC03OTksNiArMTA2Miw1NiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJfbmFtZV9jYWxsYmFjaykKKworICAgUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBUTFMgQ2xpZW50IEhlbGxvCisgICBoYW5kc2hha2UgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgU1NML1RMUyBzZXJ2ZXIgd2hlbiB0aGUgVExTIGNsaWVudAorICAgc3BlY2lmaWVzIGEgc2VydmVyIG5hbWUgaW5kaWNhdGlvbi4gVGhlIHNlcnZlciBuYW1lIGluZGljYXRpb24gbWVjaGFuaXNtCisgICBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgNjA2NmAgc2VjdGlvbiAzIC0gU2VydmVyIE5hbWUgSW5kaWNhdGlvbi4KKworICAgT25seSBvbmUgY2FsbGJhY2sgY2FuIGJlIHNldCBwZXIgYGBTU0xDb250ZXh0YGAuICBJZiAqc2VydmVyX25hbWVfY2FsbGJhY2sqCisgICBpcyBgYE5vbmVgYCB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGEKKyAgIHN1YnNlcXVlbnQgdGltZSB3aWxsIGRpc2FibGUgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4KKworICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCAqc2VydmVyX25hbWVfY2FsbGJhY2sqLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRocmVlCisgICBhcmd1bWVudHM7IHRoZSBmaXJzdCBiZWluZyB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCwgdGhlIHNlY29uZCBpcyBhIHN0cmluZworICAgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJ2ZXIgbmFtZSB0aGF0IHRoZSBjbGllbnQgaXMgaW50ZW5kaW5nIHRvIGNvbW11bmljYXRlCisgICAob3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgVExTIENsaWVudCBIZWxsbyBkb2VzIG5vdCBjb250YWluIGEgc2VydmVyIG5hbWUpCisgICBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBvcmlnaW5hbCA6Y2xhc3M6YFNTTENvbnRleHRgLiBUaGUgc2VydmVyIG5hbWUKKyAgIGFyZ3VtZW50IGlzIHRoZSBJRE5BIGRlY29kZWQgc2VydmVyIG5hbWUuCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBjYWxsYmFjayBpcyB0byBjaGFuZ2UgdGhlIDpjbGFzczpgc3NsLlNTTFNvY2tldGAncworICAgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YCBhdHRyaWJ1dGUgdG8gYSBuZXcgb2JqZWN0IG9mIHR5cGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgcmVwcmVzZW50aW5nIGEgY2VydGlmaWNhdGUgY2hhaW4gdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIKKyAgIG5hbWUuCisKKyAgIER1ZSB0byB0aGUgZWFybHkgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIFRMUyBjb25uZWN0aW9uLCBvbmx5IGxpbWl0ZWQKKyAgIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgYXJlIHVzYWJsZSBsaWtlCisgICA6bWV0aDpgU1NMU29ja2V0LnNlbGVjdGVkX25wbl9wcm90b2NvbGAgYW5kIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAuCisgICA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsCisgICA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgYW5kIDptZXRoOmBTU0xTb2NrZXQuY29tcHJlc3NgIG1ldGhvZHMgcmVxdWlyZSB0aGF0CisgICB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIHByb2dyZXNzZWQgYmV5b25kIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGFuZCB0aGVyZWZvcmUKKyAgIHdpbGwgbm90IGNvbnRhaW4gcmV0dXJuIG1lYW5pbmdmdWwgdmFsdWVzIG5vciBjYW4gdGhleSBiZSBjYWxsZWQgc2FmZWx5LgorCisgICBUaGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBmdW5jdGlvbiBtdXN0IHJldHVybiBgYE5vbmVgYCB0byBhbGxvdyB0aGUKKyAgIFRMUyBuZWdvdGlhdGlvbiB0byBjb250aW51ZS4gIElmIGEgVExTIGZhaWx1cmUgaXMgcmVxdWlyZWQsIGEgY29uc3RhbnQKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fKiA8QUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1I+YCBjYW4gYmUKKyAgIHJldHVybmVkLiAgT3RoZXIgcmV0dXJuIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBhIFRMUyBmYXRhbCBlcnJvciB3aXRoCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYC4KKworICAgSWYgdGhlcmUgaXMgYSBJRE5BIGRlY29kaW5nIGVycm9yIG9uIHRoZSBzZXJ2ZXIgbmFtZSwgdGhlIFRMUyBjb25uZWN0aW9uCisgICB3aWxsIHRlcm1pbmF0ZSB3aXRoIGFuIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1JgIGZhdGFsIFRMUworICAgYWxlcnQgbWVzc2FnZSB0byB0aGUgY2xpZW50LgorCisgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGZyb20gdGhlICpzZXJ2ZXJfbmFtZV9jYWxsYmFjayogZnVuY3Rpb24gdGhlIFRMUworICAgY29ubmVjdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aXRoIGEgZmF0YWwgVExTIGFsZXJ0IG1lc3NhZ2UKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkVgLgorCisgICBUaGlzIG1ldGhvZCB3aWxsIHJhaXNlIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlmIHRoZSBPcGVuU1NMIGxpYnJhcnkKKyAgIGhhZCBPUEVOU1NMX05PX1RMU0VYVCBkZWZpbmVkIHdoZW4gaXQgd2FzIGJ1aWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcyhkaGZpbGUpCiAKICAgIExvYWQgdGhlIGtleSBnZW5lcmF0aW9uIHBhcmFtZXRlcnMgZm9yIERpZmZpZS1IZWxtYW4gKERIKSBrZXkgZXhjaGFuZ2UuCkBAIC04NjIsNiArMTE3NSw0NSBAQAogICAgICAgPj4+IHN0YXRzWydoaXRzJ10sIHN0YXRzWydtaXNzZXMnXQogICAgICAgKDAsIDApCiAKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiBkaWN0cyB3aXRoIGluZm9ybWF0aW9uIG9mIGxvYWRlZCBDQSBjZXJ0cy4gSWYgdGhlCisgICBvcHRpb25hbCBhcmd1bWVudCBpcyB0cnVlLCByZXR1cm5zIGEgREVSLWVuY29kZWQgY29weSBvZiB0aGUgQ0EKKyAgIGNlcnRpZmljYXRlLgorCisgICAuLiBub3RlOjoKKyAgICAgIENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlCisgICAgICBiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGF0dHJpYnV0ZTo6IFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUKKworICAgV2V0aGVyIHRvIG1hdGNoIHRoZSBwZWVyIGNlcnQncyBob3N0bmFtZSB3aXRoIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgaW4KKyAgIDptZXRoOmBTU0xTb2NrZXQuZG9faGFuZHNoYWtlYC4gVGhlIGNvbnRleHQncworICAgOmF0dHI6YH5TU0xDb250ZXh0LnZlcmlmeV9tb2RlYCBtdXN0IGJlIHNldCB0byA6ZGF0YTpgQ0VSVF9PUFRJT05BTGAgb3IKKyAgIDpkYXRhOmBDRVJUX1JFUVVJUkVEYCwgYW5kIHlvdSBtdXN0IHBhc3MgKnNlcnZlcl9ob3N0bmFtZSogdG8KKyAgIDptZXRoOmB+U1NMQ29udGV4dC53cmFwX3NvY2tldGAgaW4gb3JkZXIgdG8gbWF0Y2ggdGhlIGhvc3RuYW1lLgorCisgICBFeGFtcGxlOjoKKworICAgICAgaW1wb3J0IHNvY2tldCwgc3NsCisKKyAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICBzc2xfc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQocywgc2VydmVyX2hvc3RuYW1lPSd3d3cudmVyaXNpZ24uY29tJyk6CisgICAgICAgICBzc2xfc29jay5jb25uZWN0KCgnd3d3LnZlcmlzaWduLmNvbScsIDQ0MykpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBub3RlOjoKKworICAgICBUaGlzIGZlYXR1cmVzIHJlcXVpcmVzIE9wZW5TU0wgMC45LjhmIG9yIG5ld2VyLgorCiAuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0Lm9wdGlvbnMKIAogICAgQW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHNldCBvZiBTU0wgb3B0aW9ucyBlbmFibGVkIG9uIHRoaXMgY29udGV4dC4KQEAgLTg3OCw2ICsxMjMwLDE1IEBACiAgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBjaG9zZW4gd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGNvbnRleHQuICBUaGlzIGF0dHJpYnV0ZQogICAgaXMgcmVhZC1vbmx5LgogCisuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LnZlcmlmeV9mbGFncworCisgICBUaGUgZmxhZ3MgZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBvcGVyYXRpb25zLiBZb3UgY2FuIHNldCBmbGFncyBsaWtlCisgICA6ZGF0YTpgVkVSSUZZX0NSTF9DSEVDS19MRUFGYCBieSBPUmluZyB0aGVtIHRvZ2V0aGVyLiBCeSBkZWZhdWx0IE9wZW5TU0wKKyAgIGRvZXMgbmVpdGhlciByZXF1aXJlIG5vciB2ZXJpZnkgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykuCisgICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAwLjkuOCsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LnZlcmlmeV9tb2RlCiAKICAgIFdoZXRoZXIgdG8gdHJ5IHRvIHZlcmlmeSBvdGhlciBwZWVycycgY2VydGlmaWNhdGVzIGFuZCBob3cgdG8gYmVoYXZlCkBAIC0xMjY3LDcgKzE2MjgsOSBAQAogaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCiA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgbWF0Y2hlcyB0aGUgZGVzaXJlZCBzZXJ2aWNlLiAgRm9yIG1hbnkKIHByb3RvY29scyBhbmQgYXBwbGljYXRpb25zLCB0aGUgc2VydmljZSBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgaG9zdG5hbWU7Ci1pbiB0aGlzIGNhc2UsIHRoZSA6ZnVuYzpgbWF0Y2hfaG9zdG5hbWVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLgoraW4gdGhpcyBjYXNlLCB0aGUgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCBmdW5jdGlvbiBjYW4gYmUgdXNlZC4gIFRoaXMgY29tbW9uCitjaGVjayBpcyBhdXRvbWF0aWNhbGx5IHBlcmZvcm1lZCB3aGVuIDphdHRyOmBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBpcworZW5hYmxlZC4KIAogSW4gc2VydmVyIG1vZGUsIGlmIHlvdSB3YW50IHRvIGF1dGhlbnRpY2F0ZSB5b3VyIGNsaWVudHMgdXNpbmcgdGhlIFNTTCBsYXllcgogKHJhdGhlciB0aGFuIHVzaW5nIGEgaGlnaGVyLWxldmVsIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSksIHlvdSdsbCBhbHNvIGhhdmUKQEAgLTEzNDMsMyArMTcwNiwxMiBAQAogCiAgICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzY2PmBfCiAgICAgICAgQmxha2UtV2lsc29uIGV0LiBhbC4KKworICAgYFJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM1MjQ2PmBfCisgICAgICAgVC4gRGllcmtzIGV0LiBhbC4KKworICAgYFJGQyA2MDY2OiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucyA8aHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjNjA2Nj5gXworICAgICAgIEQuIEVhc3RsYWtlCisKKyAgIGBJQU5BIFRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFBhcmFtZXRlcnMgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sPmBfCisgICAgICAgSUFOQQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdAppbmRleCA2YzIwYWEyLi4yNDc2OWY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdApAQCAtNiw3ICs2LDggQEAKICAgICAgICAgICAgICAgb3MubHN0YXQoKSBhbmQgb3MuZnN0YXQoKS4KIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBhdXRvbWF0cml4LmNvbT4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdC5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTW9kdWxlcy9fc3RhdC5jYAorICAgICAgICAgICAgICAgICA6c291cmNlOmBMaWIvc3RhdC5weWAKIAogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTUsNiArMTYsOSBAQAogZXhpc3QpLiAgRm9yIGNvbXBsZXRlIGRldGFpbHMgYWJvdXQgdGhlIDpjOmZ1bmM6YHN0YXRgLCA6YzpmdW5jOmBmc3RhdGAgYW5kCiA6YzpmdW5jOmBsc3RhdGAgY2FsbHMsIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgc3lzdGVtLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHN0YXQgbW9kdWxlIGlzIGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24uCisKIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGZvciBzcGVjaWZpYyBmaWxlCiB0eXBlczoKIApAQCAtNTMsNiArNTcsMjQgQEAKIAogICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBzb2NrZXQuCiAKKy4uIGZ1bmN0aW9uOjogU19JU0RPT1IobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBkb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTUE9SVChtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTV0hUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUd28gYWRkaXRpb25hbCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIG1vcmUgZ2VuZXJhbCBtYW5pcHVsYXRpb24gb2YgdGhlIGZpbGUncwogbW9kZToKIApAQCAtMTEzLDYgKzEzNSwxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIGFuZAorICAgICAgOmRhdGE6YFNfSUZXSFRgLgorCiAKIEFsbCB0aGUgdmFyaWFibGVzIGJlbG93IGFyZSBzaW1wbHkgc3ltYm9saWMgaW5kZXhlcyBpbnRvIHRoZSAxMC10dXBsZSByZXR1cm5lZAogYnkgOmZ1bmM6YG9zLnN0YXRgLCA6ZnVuYzpgb3MuZnN0YXRgIG9yIDpmdW5jOmBvcy5sc3RhdGAuCkBAIC0yMTAsNiArMjM2LDI5IEBACiAKICAgIEZJRk8uCiAKKy4uIGRhdGE6OiBTX0lGRE9PUgorCisgICBEb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFNfSUZQT1JUCisKKyAgIEV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRldIVAorCisgICBXaGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIG5vdGU6OgorCisgICA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIG9yIDpkYXRhOmBTX0lGV0hUYCBhcmUgZGVmaW5lZCBhcworICAgMCB3aGVuIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIHRoZSBmaWxlIHR5cGVzLgorCiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlICptb2RlKiBhcmd1bWVudCBvZiA6ZnVuYzpgb3MuY2htb2RgOgogCiAuLiBkYXRhOjogU19JU1VJRApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmM1OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QKQEAgLTAsMCArMSw0MDggQEAKKzptb2Q6YHN0YXRpc3RpY3NgIC0tLSBNYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc3RhdGlzdGljcworICAgOnN5bm9wc2lzOiBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKy4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CisuLiBzZWN0aW9uYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIHRlc3RzZXR1cDo6ICoKKworICAgZnJvbSBzdGF0aXN0aWNzIGltcG9ydCAqCisgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXRpc3RpY3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgbWF0aGVtYXRpY2FsIHN0YXRpc3RpY3Mgb2YKK251bWVyaWMgKDpjbGFzczpgUmVhbGAtdmFsdWVkKSBkYXRhLgorCitBdmVyYWdlcyBhbmQgbWVhc3VyZXMgb2YgY2VudHJhbCBsb2NhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgZnVuY3Rpb25zIGNhbGN1bGF0ZSBhbiBhdmVyYWdlIG9yIHR5cGljYWwgdmFsdWUgZnJvbSBhIHBvcHVsYXRpb24KK29yIHNhbXBsZS4KKworPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmZ1bmM6YG1lYW5gICAgICAgICAgICAgIEFyaXRobWV0aWMgbWVhbiAoImF2ZXJhZ2UiKSBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbmAgICAgICAgICAgIE1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9sb3dgICAgICAgIExvdyBtZWRpYW4gb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5faGlnaGAgICAgICBIaWdoIG1lZGlhbiBvZiBkYXRhLgorOmZ1bmM6YG1lZGlhbl9ncm91cGVkYCAgIE1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBncm91cGVkIGRhdGEuCis6ZnVuYzpgbW9kZWAgICAgICAgICAgICAgTW9kZSAobW9zdCBjb21tb24gdmFsdWUpIG9mIGRpc2NyZXRlIGRhdGEuCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01lYXN1cmVzIG9mIHNwcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZ1bmN0aW9ucyBjYWxjdWxhdGUgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHRoZSBwb3B1bGF0aW9uIG9yIHNhbXBsZQordGVuZHMgdG8gZGV2aWF0ZSBmcm9tIHRoZSB0eXBpY2FsIG9yIGF2ZXJhZ2UgdmFsdWVzLgorCis9PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6ZnVuYzpgcHN0ZGV2YCAgICAgICAgICAgUG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKzpmdW5jOmBwdmFyaWFuY2VgICAgICAgICBQb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGRhdGEuCis6ZnVuYzpgc3RkZXZgICAgICAgICAgICAgU2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorOmZ1bmM6YHZhcmlhbmNlYCAgICAgICAgIFNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKK0Z1bmN0aW9uIGRldGFpbHMKKy0tLS0tLS0tLS0tLS0tLS0KKworTm90ZTogVGhlIGZ1bmN0aW9ucyBkbyBub3QgcmVxdWlyZSB0aGUgZGF0YSBnaXZlbiB0byB0aGVtIHRvIGJlIHNvcnRlZC4KK0hvd2V2ZXIsIGZvciByZWFkaW5nIGNvbnZlbmllbmNlLCBtb3N0IG9mIHRoZSBleGFtcGxlcyBzaG93IHNvcnRlZCBzZXF1ZW5jZXMuCisKKy4uIGZ1bmN0aW9uOjogbWVhbihkYXRhKQorCisgICBSZXR1cm4gdGhlIHNhbXBsZSBhcml0aG1ldGljIG1lYW4gb2YgKmRhdGEqLCBhIHNlcXVlbmNlIG9yIGl0ZXJhdG9yIG9mCisgICByZWFsLXZhbHVlZCBudW1iZXJzLgorCisgICBUaGUgYXJpdGhtZXRpYyBtZWFuIGlzIHRoZSBzdW0gb2YgdGhlIGRhdGEgZGl2aWRlZCBieSB0aGUgbnVtYmVyIG9mIGRhdGEKKyAgIHBvaW50cy4gIEl0IGlzIGNvbW1vbmx5IGNhbGxlZCAidGhlIGF2ZXJhZ2UiLCBhbHRob3VnaCBpdCBpcyBvbmx5IG9uZSBvZiBtYW55CisgICBkaWZmZXJlbnQgbWF0aGVtYXRpY2FsIGF2ZXJhZ2VzLiAgSXQgaXMgYSBtZWFzdXJlIG9mIHRoZSBjZW50cmFsIGxvY2F0aW9uIG9mCisgICB0aGUgZGF0YS4KKworICAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCisgICBTb21lIGV4YW1wbGVzIG9mIHVzZToKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWFuKFsxLCAyLCAzLCA0LCA0XSkKKyAgICAgIDIuOAorICAgICAgPj4+IG1lYW4oWy0xLjAsIDIuNSwgMy4yNSwgNS43NV0pCisgICAgICAyLjYyNQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiBtZWFuKFtGKDMsIDcpLCBGKDEsIDIxKSwgRig1LCAzKSwgRigxLCAzKV0pCisgICAgICBGcmFjdGlvbigxMywgMjEpCisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IG1lYW4oW0QoIjAuNSIpLCBEKCIwLjc1IiksIEQoIjAuNjI1IiksIEQoIjAuMzc1IildKQorICAgICAgRGVjaW1hbCgnMC41NjI1JykKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBtZWFuIGlzIHN0cm9uZ2x5IGFmZmVjdGVkIGJ5IG91dGxpZXJzIGFuZCBpcyBub3QgYSByb2J1c3QgZXN0aW1hdG9yCisgICAgICBmb3IgY2VudHJhbCBsb2NhdGlvbjogdGhlIG1lYW4gaXMgbm90IG5lY2Vzc2FyaWx5IGEgdHlwaWNhbCBleGFtcGxlIG9mIHRoZQorICAgICAgZGF0YSBwb2ludHMuICBGb3IgbW9yZSByb2J1c3QsIGFsdGhvdWdoIGxlc3MgZWZmaWNpZW50LCBtZWFzdXJlcyBvZgorICAgICAgY2VudHJhbCBsb2NhdGlvbiwgc2VlIDpmdW5jOmBtZWRpYW5gIGFuZCA6ZnVuYzpgbW9kZWAuICAoSW4gdGhpcyBjYXNlLAorICAgICAgImVmZmljaWVudCIgcmVmZXJzIHRvIHN0YXRpc3RpY2FsIGVmZmljaWVuY3kgcmF0aGVyIHRoYW4gY29tcHV0YXRpb25hbAorICAgICAgZWZmaWNpZW5jeS4pCisKKyAgICAgIFRoZSBzYW1wbGUgbWVhbiBnaXZlcyBhbiB1bmJpYXNlZCBlc3RpbWF0ZSBvZiB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4sCisgICAgICB3aGljaCBtZWFucyB0aGF0LCB0YWtlbiBvbiBhdmVyYWdlIG92ZXIgYWxsIHRoZSBwb3NzaWJsZSBzYW1wbGVzLAorICAgICAgYGBtZWFuKHNhbXBsZSlgYCBjb252ZXJnZXMgb24gdGhlIHRydWUgbWVhbiBvZiB0aGUgZW50aXJlIHBvcHVsYXRpb24uICBJZgorICAgICAgKmRhdGEqIHJlcHJlc2VudHMgdGhlIGVudGlyZSBwb3B1bGF0aW9uIHJhdGhlciB0aGFuIGEgc2FtcGxlLCB0aGVuCisgICAgICBgYG1lYW4oZGF0YSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGN1bGF0aW5nIHRoZSB0cnVlIHBvcHVsYXRpb24gbWVhbiDOvC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbihkYXRhKQorCisgICBSZXR1cm4gdGhlIG1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBudW1lcmljIGRhdGEsIHVzaW5nIHRoZSBjb21tb24gIm1lYW4gb2YKKyAgIG1pZGRsZSB0d28iIG1ldGhvZC4gIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIFRoZSBtZWRpYW4gaXMgYSByb2J1c3QgbWVhc3VyZSBvZiBjZW50cmFsIGxvY2F0aW9uLCBhbmQgaXMgbGVzcyBhZmZlY3RlZCBieQorICAgdGhlIHByZXNlbmNlIG9mIG91dGxpZXJzIGluIHlvdXIgZGF0YS4gIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcworICAgb2RkLCB0aGUgbWlkZGxlIGRhdGEgcG9pbnQgaXMgcmV0dXJuZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1XSkKKyAgICAgIDMKKworICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIGV2ZW4sIHRoZSBtZWRpYW4gaXMgaW50ZXJwb2xhdGVkIGJ5IHRha2luZworICAgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbihbMSwgMywgNSwgN10pCisgICAgICA0LjAKKworICAgVGhpcyBpcyBzdWl0ZWQgZm9yIHdoZW4geW91ciBkYXRhIGlzIGRpc2NyZXRlLCBhbmQgeW91IGRvbid0IG1pbmQgdGhhdCB0aGUKKyAgIG1lZGlhbiBtYXkgbm90IGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50LgorCisgICAuLiBzZWVhbHNvOjogOmZ1bmM6YG1lZGlhbl9sb3dgLCA6ZnVuYzpgbWVkaWFuX2hpZ2hgLCA6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5fbG93KGRhdGEpCisKKyAgIFJldHVybiB0aGUgbG93IG1lZGlhbiBvZiBudW1lcmljIGRhdGEuICBJZiAqZGF0YSogaXMgZW1wdHksCisgICA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgVGhlIGxvdyBtZWRpYW4gaXMgYWx3YXlzIGEgbWVtYmVyIG9mIHRoZSBkYXRhIHNldC4gIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiAgV2hlbiBpdCBpcyBldmVuLCB0aGUgc21hbGxlciBvZgorICAgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDVdKQorICAgICAgMworICAgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDUsIDddKQorICAgICAgMworCisgICBVc2UgdGhlIGxvdyBtZWRpYW4gd2hlbiB5b3VyIGRhdGEgYXJlIGRpc2NyZXRlIGFuZCB5b3UgcHJlZmVyIHRoZSBtZWRpYW4gdG8KKyAgIGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50IHJhdGhlciB0aGFuIGludGVycG9sYXRlZC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9oaWdoKGRhdGEpCisKKyAgIFJldHVybiB0aGUgaGlnaCBtZWRpYW4gb2YgZGF0YS4gIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICBUaGUgaGlnaCBtZWRpYW4gaXMgYWx3YXlzIGEgbWVtYmVyIG9mIHRoZSBkYXRhIHNldC4gIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMgaXMgb2RkLCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiAgV2hlbiBpdCBpcyBldmVuLCB0aGUgbGFyZ2VyIG9mCisgICB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2hpZ2goWzEsIDMsIDVdKQorICAgICAgMworICAgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1LCA3XSkKKyAgICAgIDUKKworICAgVXNlIHRoZSBoaWdoIG1lZGlhbiB3aGVuIHlvdXIgZGF0YSBhcmUgZGlzY3JldGUgYW5kIHlvdSBwcmVmZXIgdGhlIG1lZGlhbiB0bworICAgYmUgYW4gYWN0dWFsIGRhdGEgcG9pbnQgcmF0aGVyIHRoYW4gaW50ZXJwb2xhdGVkLgorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2dyb3VwZWQoZGF0YSwgaW50ZXJ2YWw9MSkKKworICAgUmV0dXJuIHRoZSBtZWRpYW4gb2YgZ3JvdXBlZCBjb250aW51b3VzIGRhdGEsIGNhbGN1bGF0ZWQgYXMgdGhlIDUwdGgKKyAgIHBlcmNlbnRpbGUsIHVzaW5nIGludGVycG9sYXRpb24uICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbNTIsIDUyLCA1MywgNTRdKQorICAgICAgNTIuNQorCisgICBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZSBkYXRhIGFyZSByb3VuZGVkLCBzbyB0aGF0IGVhY2ggdmFsdWUgcmVwcmVzZW50cworICAgdGhlIG1pZHBvaW50IG9mIGRhdGEgY2xhc3NlcywgZS5nLiAxIGlzIHRoZSBtaWRwb2ludCBvZiB0aGUgY2xhc3MgMC41LTEuNSwgMgorICAgaXMgdGhlIG1pZHBvaW50IG9mIDEuNS0yLjUsIDMgaXMgdGhlIG1pZHBvaW50IG9mIDIuNS0zLjUsIGV0Yy4gIFdpdGggdGhlIGRhdGEKKyAgIGdpdmVuLCB0aGUgbWlkZGxlIHZhbHVlIGZhbGxzIHNvbWV3aGVyZSBpbiB0aGUgY2xhc3MgMy41LTQuNSwgYW5kCisgICBpbnRlcnBvbGF0aW9uIGlzIHVzZWQgdG8gZXN0aW1hdGUgaXQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIDQsIDVdKQorICAgICAgMy43CisKKyAgIE9wdGlvbmFsIGFyZ3VtZW50ICppbnRlcnZhbCogcmVwcmVzZW50cyB0aGUgY2xhc3MgaW50ZXJ2YWwsIGFuZCBkZWZhdWx0cworICAgdG8gMS4gIENoYW5naW5nIHRoZSBjbGFzcyBpbnRlcnZhbCBuYXR1cmFsbHkgd2lsbCBjaGFuZ2UgdGhlIGludGVycG9sYXRpb246CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0xKQorICAgICAgMy4yNQorICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MikKKyAgICAgIDMuNQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIGRhdGEgcG9pbnRzIGFyZSBhdCBsZWFzdAorICAgKmludGVydmFsKiBhcGFydC4KKworICAgLi4gaW1wbC1kZXRhaWw6OgorCisgICAgICBVbmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIDpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAgbWF5IGNvZXJjZSBkYXRhIHBvaW50cyB0bworICAgICAgZmxvYXRzLiAgVGhpcyBiZWhhdmlvdXIgaXMgbGlrZWx5IHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgKiAiU3RhdGlzdGljcyBmb3IgdGhlIEJlaGF2aW9yYWwgU2NpZW5jZXMiLCBGcmVkZXJpY2sgSiBHcmF2ZXR0ZXIgYW5kCisgICAgICAgIExhcnJ5IEIgV2FsbG5hdSAoOHRoIEVkaXRpb24pLgorCisgICAgICAqIENhbGN1bGF0aW5nIHRoZSBgbWVkaWFuIDxodHRwOi8vd3d3LnVhbGJlcnRhLmNhL35vcHNjYW4vbWVkaWFuLmh0bWw+YF8uCisKKyAgICAgICogVGhlIGBTU01FRElBTgorICAgICAgICA8aHR0cHM6Ly9wcm9qZWN0cy5nbm9tZS5vcmcvZ251bWVyaWMvZG9jL2dudW1lcmljLWZ1bmN0aW9uLVNTTUVESUFOLnNodG1sPmBfCisgICAgICAgIGZ1bmN0aW9uIGluIHRoZSBHbm9tZSBHbnVtZXJpYyBzcHJlYWRzaGVldCwgaW5jbHVkaW5nIGB0aGlzIGRpc2N1c3Npb24KKyAgICAgICAgPGh0dHBzOi8vbWFpbC5nbm9tZS5vcmcvYXJjaGl2ZXMvZ251bWVyaWMtbGlzdC8yMDExLUFwcmlsL21zZzAwMDE4Lmh0bWw+YF8uCisKKworLi4gZnVuY3Rpb246OiBtb2RlKGRhdGEpCisKKyAgIFJldHVybiB0aGUgbW9zdCBjb21tb24gZGF0YSBwb2ludCBmcm9tIGRpc2NyZXRlIG9yIG5vbWluYWwgKmRhdGEqLiAgVGhlIG1vZGUKKyAgICh3aGVuIGl0IGV4aXN0cykgaXMgdGhlIG1vc3QgdHlwaWNhbCB2YWx1ZSwgYW5kIGlzIGEgcm9idXN0IG1lYXN1cmUgb2YKKyAgIGNlbnRyYWwgbG9jYXRpb24uCisKKyAgIElmICpkYXRhKiBpcyBlbXB0eSwgb3IgaWYgdGhlcmUgaXMgbm90IGV4YWN0bHkgb25lIG1vc3QgY29tbW9uIHZhbHVlLAorICAgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIGBgbW9kZWBgIGFzc3VtZXMgZGlzY3JldGUgZGF0YSwgYW5kIHJldHVybnMgYSBzaW5nbGUgdmFsdWUuIFRoaXMgaXMgdGhlCisgICBzdGFuZGFyZCB0cmVhdG1lbnQgb2YgdGhlIG1vZGUgYXMgY29tbW9ubHkgdGF1Z2h0IGluIHNjaG9vbHM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbW9kZShbMSwgMSwgMiwgMywgMywgMywgMywgNF0pCisgICAgICAzCisKKyAgIFRoZSBtb2RlIGlzIHVuaXF1ZSBpbiB0aGF0IGl0IGlzIHRoZSBvbmx5IHN0YXRpc3RpYyB3aGljaCBhbHNvIGFwcGxpZXMKKyAgIHRvIG5vbWluYWwgKG5vbi1udW1lcmljKSBkYXRhOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1vZGUoWyJyZWQiLCAiYmx1ZSIsICJibHVlIiwgInJlZCIsICJncmVlbiIsICJyZWQiLCAicmVkIl0pCisgICAgICAncmVkJworCisKKy4uIGZ1bmN0aW9uOjogcHN0ZGV2KGRhdGEsIG11PU5vbmUpCisKKyAgIFJldHVybiB0aGUgcG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24gKHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgcG9wdWxhdGlvbgorICAgdmFyaWFuY2UpLiAgU2VlIDpmdW5jOmBwdmFyaWFuY2VgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gcHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAgIDAuOTg2ODkzMjczNTI3MjUxCisKKworLi4gZnVuY3Rpb246OiBwdmFyaWFuY2UoZGF0YSwgbXU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlIG9mICpkYXRhKiwgYSBub24tZW1wdHkgaXRlcmFibGUgb2YgcmVhbC12YWx1ZWQKKyAgIG51bWJlcnMuICBWYXJpYW5jZSwgb3Igc2Vjb25kIG1vbWVudCBhYm91dCB0aGUgbWVhbiwgaXMgYSBtZWFzdXJlIG9mIHRoZQorICAgdmFyaWFiaWxpdHkgKHNwcmVhZCBvciBkaXNwZXJzaW9uKSBvZiBkYXRhLiAgQSBsYXJnZSB2YXJpYW5jZSBpbmRpY2F0ZXMgdGhhdAorICAgdGhlIGRhdGEgaXMgc3ByZWFkIG91dDsgYSBzbWFsbCB2YXJpYW5jZSBpbmRpY2F0ZXMgaXQgaXMgY2x1c3RlcmVkIGNsb3NlbHkKKyAgIGFyb3VuZCB0aGUgbWVhbi4KKworICAgSWYgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqbXUqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICpkYXRhKi4gIElmIGl0IGlzIG1pc3Npbmcgb3IgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1lYW4gaXMKKyAgIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgVXNlIHRoaXMgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbi4gIFRvCisgICBlc3RpbWF0ZSB0aGUgdmFyaWFuY2UgZnJvbSBhIHNhbXBsZSwgdGhlIDpmdW5jOmB2YXJpYW5jZWAgZnVuY3Rpb24gaXMgdXN1YWxseQorICAgYSBiZXR0ZXIgY2hvaWNlLgorCisgICBSYWlzZXMgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpZiAqZGF0YSogaXMgZW1wdHkuCisKKyAgIEV4YW1wbGVzOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IGRhdGEgPSBbMC4wLCAwLjI1LCAwLjI1LCAxLjI1LCAxLjUsIDEuNzUsIDIuNzUsIDMuMjVdCisgICAgICA+Pj4gcHZhcmlhbmNlKGRhdGEpCisgICAgICAxLjI1CisKKyAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcyB0aGUKKyAgIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqbXUqIHRvIGF2b2lkIHJlY2FsY3VsYXRpb246CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbXUgPSBtZWFuKGRhdGEpCisgICAgICA+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgICAgMS4yNQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgcGFzc2VkIHRoZSBhY3R1YWwgbWVhbgorICAgYXMgKm11Ki4gIFVzaW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yICptdSogbWF5IGxlYWQgdG8gaW52YWxpZCBvciBpbXBvc3NpYmxlCisgICByZXN1bHRzLgorCisgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiBwdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICAgIERlY2ltYWwoJzI0LjgxNScpCisKKyAgICAgID4+PiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24gYXMgRgorICAgICAgPj4+IHB2YXJpYW5jZShbRigxLCA0KSwgRig1LCA0KSwgRigxLCAyKV0pCisgICAgICBGcmFjdGlvbigxMywgNzIpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGVuIGNhbGxlZCB3aXRoIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgdGhpcyBnaXZlcyB0aGUgcG9wdWxhdGlvbiB2YXJpYW5jZQorICAgICAgz4PCsi4gIFdoZW4gY2FsbGVkIG9uIGEgc2FtcGxlIGluc3RlYWQsIHRoaXMgaXMgdGhlIGJpYXNlZCBzYW1wbGUgdmFyaWFuY2UKKyAgICAgIHPCsiwgYWxzbyBrbm93biBhcyB2YXJpYW5jZSB3aXRoIE4gZGVncmVlcyBvZiBmcmVlZG9tLgorCisgICAgICBJZiB5b3Ugc29tZWhvdyBrbm93IHRoZSB0cnVlIHBvcHVsYXRpb24gbWVhbiDOvCwgeW91IG1heSB1c2UgdGhpcyBmdW5jdGlvbgorICAgICAgdG8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBvZiBhIHNhbXBsZSwgZ2l2aW5nIHRoZSBrbm93biBwb3B1bGF0aW9uIG1lYW4gYXMKKyAgICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuICBQcm92aWRlZCB0aGUgZGF0YSBwb2ludHMgYXJlIHJlcHJlc2VudGF0aXZlCisgICAgICAoZS5nLiBpbmRlcGVuZGVudCBhbmQgaWRlbnRpY2FsbHkgZGlzdHJpYnV0ZWQpLCB0aGUgcmVzdWx0IHdpbGwgYmUgYW4KKyAgICAgIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisKKy4uIGZ1bmN0aW9uOjogc3RkZXYoZGF0YSwgeGJhcj1Ob25lKQorCisgICBSZXR1cm4gdGhlIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gKHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2FtcGxlCisgICB2YXJpYW5jZSkuICBTZWUgOmZ1bmM6YHZhcmlhbmNlYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAgIDEuMDgxMDg3NDE1NTIxOTgyNworCisKKy4uIGZ1bmN0aW9uOjogdmFyaWFuY2UoZGF0YSwgeGJhcj1Ob25lKQorCisgICBSZXR1cm4gdGhlIHNhbXBsZSB2YXJpYW5jZSBvZiAqZGF0YSosIGFuIGl0ZXJhYmxlIG9mIGF0IGxlYXN0IHR3byByZWFsLXZhbHVlZAorICAgbnVtYmVycy4gIFZhcmlhbmNlLCBvciBzZWNvbmQgbW9tZW50IGFib3V0IHRoZSBtZWFuLCBpcyBhIG1lYXN1cmUgb2YgdGhlCisgICB2YXJpYWJpbGl0eSAoc3ByZWFkIG9yIGRpc3BlcnNpb24pIG9mIGRhdGEuICBBIGxhcmdlIHZhcmlhbmNlIGluZGljYXRlcyB0aGF0CisgICB0aGUgZGF0YSBpcyBzcHJlYWQgb3V0OyBhIHNtYWxsIHZhcmlhbmNlIGluZGljYXRlcyBpdCBpcyBjbHVzdGVyZWQgY2xvc2VseQorICAgYXJvdW5kIHRoZSBtZWFuLgorCisgICBJZiB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICp4YmFyKiBpcyBnaXZlbiwgaXQgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAqZGF0YSouICBJZiBpdCBpcyBtaXNzaW5nIG9yIGBgTm9uZWBgICh0aGUgZGVmYXVsdCksIHRoZSBtZWFuIGlzCisgICBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91ciBkYXRhIGlzIGEgc2FtcGxlIGZyb20gYSBwb3B1bGF0aW9uLiBUbyBjYWxjdWxhdGUKKyAgIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgc2VlIDpmdW5jOmBwdmFyaWFuY2VgLgorCisgICBSYWlzZXMgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpZiAqZGF0YSogaGFzIGZld2VyIHRoYW4gdHdvIHZhbHVlcy4KKworICAgRXhhbXBsZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZGF0YSA9IFsyLjc1LCAxLjc1LCAxLjI1LCAwLjI1LCAwLjUsIDEuMjUsIDMuNV0KKyAgICAgID4+PiB2YXJpYW5jZShkYXRhKQorICAgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcyB0aGUKKyAgIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCAqeGJhciogdG8gYXZvaWQgcmVjYWxjdWxhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtID0gbWVhbihkYXRhKQorICAgICAgPj4+IHZhcmlhbmNlKGRhdGEsIG0pCisgICAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIHBhc3NlZCB0aGUgYWN0dWFsIG1lYW4KKyAgIGFzICp4YmFyKi4gIFVzaW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yICp4YmFyKiBjYW4gbGVhZCB0byBpbnZhbGlkIG9yCisgICBpbXBvc3NpYmxlIHJlc3VsdHMuCisKKyAgIERlY2ltYWwgYW5kIEZyYWN0aW9uIHZhbHVlcyBhcmUgc3VwcG9ydGVkOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgICA+Pj4gdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICAgIERlY2ltYWwoJzMxLjAxODc1JykKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gdmFyaWFuY2UoW0YoMSwgNiksIEYoMSwgMiksIEYoNSwgMyldKQorICAgICAgRnJhY3Rpb24oNjcsIDEwOCkKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoaXMgaXMgdGhlIHNhbXBsZSB2YXJpYW5jZSBzwrIgd2l0aCBCZXNzZWwncyBjb3JyZWN0aW9uLCBhbHNvIGtub3duIGFzCisgICAgICB2YXJpYW5jZSB3aXRoIE4tMSBkZWdyZWVzIG9mIGZyZWVkb20uICBQcm92aWRlZCB0aGF0IHRoZSBkYXRhIHBvaW50cyBhcmUKKyAgICAgIHJlcHJlc2VudGF0aXZlIChlLmcuIGluZGVwZW5kZW50IGFuZCBpZGVudGljYWxseSBkaXN0cmlidXRlZCksIHRoZSByZXN1bHQKKyAgICAgIHNob3VsZCBiZSBhbiB1bmJpYXNlZCBlc3RpbWF0ZSBvZiB0aGUgdHJ1ZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisgICAgICBJZiB5b3Ugc29tZWhvdyBrbm93IHRoZSBhY3R1YWwgcG9wdWxhdGlvbiBtZWFuIM68IHlvdSBzaG91bGQgcGFzcyBpdCB0byB0aGUKKyAgICAgIDpmdW5jOmBwdmFyaWFuY2VgIGZ1bmN0aW9uIGFzIHRoZSAqbXUqIHBhcmFtZXRlciB0byBnZXQgdGhlIHZhcmlhbmNlIG9mIGEKKyAgICAgIHNhbXBsZS4KKworRXhjZXB0aW9ucworLS0tLS0tLS0tLQorCitBIHNpbmdsZSBleGNlcHRpb24gaXMgZGVmaW5lZDoKKworLi4gZXhjZXB0aW9uOjogU3RhdGlzdGljc0Vycm9yCisKKyAgIFN1YmNsYXNzIG9mIDpleGM6YFZhbHVlRXJyb3JgIGZvciBzdGF0aXN0aWNzLXJlbGF0ZWQgZXhjZXB0aW9ucy4KKworLi4KKyAgICMgVGhpcyBtb2RlbGluZXMgbXVzdCBhcHBlYXIgd2l0aGluIHRoZSBsYXN0IHRlbiBsaW5lcyBvZiB0aGUgZmlsZS4KKyAgIGthdGU6IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdGFicyBvbjsgZW5jb2RpbmcgdXRmLTg7CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKaW5kZXggZjBkMmY4MC4uMjRjOTE1NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdApAQCAtMTUyNiw3ICsxNTI2LDcgQEAKICAgIGF0IHRoYXQgcG9zaXRpb24uCiAKIAotLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKQorLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnModGFic2l6ZT04KQogCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBvbmUgb3IKICAgIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZ2l2ZW4gdGFiIHNpemUuICBUYWIKQEAgLTI0NjIsNiArMjQ2MiwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyB3aXRoIGZvcm1hdHMgJ0InLCAnYicgb3IgJ2MnIGFyZSBub3cgaGFzaGFibGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBtZW1vcnl2aWV3IGlzIG5vdyByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkgd2l0aAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgCisKICAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHNldmVyYWwgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogX19lcV9fKGV4cG9ydGVyKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RydWN0LnJzdCBiL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKaW5kZXggZGRlMzJiOS4uZWMyZTFiZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3RydWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CkBAIC02Niw2ICs2NiwxOSBAQAogICAgZm9ybWF0IChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCBgYGNhbGNzaXplKGZtdClgYCkuCiAKIAorLi4gZnVuY3Rpb246OiBpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikKKworICAgSXRlcmF0aXZlbHkgdW5wYWNrIGZyb20gdGhlIGJ1ZmZlciAqYnVmZmVyKiBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdAorICAgc3RyaW5nICpmbXQqLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yIHdoaWNoIHdpbGwgcmVhZAorICAgZXF1YWxseS1zaXplZCBjaHVua3MgZnJvbSB0aGUgYnVmZmVyIHVudGlsIGFsbCBpdHMgY29udGVudHMgaGF2ZSBiZWVuCisgICBjb25zdW1lZC4gIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYW1vdW50CisgICBvZiBkYXRhIHJlcXVpcmVkIGJ5IHRoZSBmb3JtYXQsIGFzIHJlZmxlY3RlZCBieSA6ZnVuYzpgY2FsY3NpemVgLgorCisgICBFYWNoIGl0ZXJhdGlvbiB5aWVsZHMgYSB0dXBsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY2FsY3NpemUoZm10KQogCiAgICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHN0cnVjdCAoYW5kIGhlbmNlIG9mIHRoZSBieXRlcyBvYmplY3QgcHJvZHVjZWQgYnkKQEAgLTM4OCw2ICs0MDEsMTMgQEAKICAgICAgIChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCA6YXR0cjpgc2VsZi5zaXplYCkuCiAKIAorICAgLi4gbWV0aG9kOjogaXRlcl91bnBhY2soYnVmZmVyKQorCisgICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBpdGVyX3VucGFja2AgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBmb3JtYXQuCisgICAgICAoYGBsZW4oYnVmZmVyKWBgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA6YXR0cjpgc2VsZi5zaXplYCkuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBhdHRyaWJ1dGU6OiBmb3JtYXQKIAogICAgICAgVGhlIGZvcm1hdCBzdHJpbmcgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBTdHJ1Y3Qgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAppbmRleCA5ZjJmODJkLi43ZmJlMzk4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdApAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogY2hlY2tfb3V0cHV0KGFyZ3MsICosIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0aW1lb3V0PU5vbmUpCisuLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBpbnB1dD1Ob25lLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQogCiAgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuCiAKQEAgLTEyOSwxNSArMTI5LDIxIEBACiAgICBpbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCAoaGVuY2UgdGhlIHVzZSBvZiBrZXl3b3JkLW9ubHkgbm90YXRpb24KICAgIGluIHRoZSBhYmJyZXZpYXRlZCBzaWduYXR1cmUpLiBUaGUgZnVsbCBmdW5jdGlvbiBzaWduYXR1cmUgaXMgbGFyZ2VseSB0aGUKICAgIHNhbWUgYXMgdGhhdCBvZiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgLSB0aGlzIGZ1bmN0aW9ucyBwYXNzZXMgYWxsCi0gICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0byB0aGF0IGludGVyZmFjZS4KLSAgIEluIGFkZGl0aW9uLCAqc3Rkb3V0KiBpcyBub3QgcGVybWl0dGVkIGFzIGFuIGFyZ3VtZW50LCBhcyBpdCBpcyB1c2VkCi0gICBpbnRlcm5hbGx5IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBzdWJwcm9jZXNzLgorICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKmlucHV0KiBhbmQgKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8KKyAgIHRoYXQgaW50ZXJmYWNlLiAgSW4gYWRkaXRpb24sICpzdGRvdXQqIGlzIG5vdCBwZXJtaXR0ZWQgYXMgYW4gYXJndW1lbnQsIGFzCisgICBpdCBpcyB1c2VkIGludGVybmFsbHkgdG8gY29sbGVjdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3MuCiAKICAgIFRoZSAqdGltZW91dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi53YWl0YC4gSWYgdGhlIHRpbWVvdXQKICAgIGV4cGlyZXMsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFuZCB0aGVuIHdhaXRlZCBmb3IgYWdhaW4uICBUaGUKICAgIDpleGM6YFRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24gd2lsbCBiZSByZS1yYWlzZWQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MKICAgIGhhcyB0ZXJtaW5hdGVkLgogCisgICBUaGUgKmlucHV0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYCBhbmQgdGh1cyB0byB0aGUKKyAgIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHVzZWQgaXQgbXVzdCBiZSBhIGJ5dGUgc2VxdWVuY2UsIG9yIGEgc3RyaW5nIGlmCisgICBgYHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlYGAuICBXaGVuIHVzZWQsIHRoZSBpbnRlcm5hbCA6Y2xhc3M6YFBvcGVuYCBvYmplY3QKKyAgIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoIGBgc3RkaW49UElQRWBgLCBhbmQgdGhlICpzdGRpbiogYXJndW1lbnQgbWF5CisgICBub3QgYmUgdXNlZCBhcyB3ZWxsLgorCiAgICBFeGFtcGxlczo6CiAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0pCkBAIC0xNDYsNiArMTUyLDEwIEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKICAgICAgICdIZWxsbyBXb3JsZCFcbicKIAorICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImV4aXQgMSIsIHNoZWxsPVRydWUpCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAuLi4KQEAgLTE2NywxMCArMTc3LDYgQEAKICAgICAgIC4uLiAgICAgc2hlbGw9VHJ1ZSkKICAgICAgICdsczogbm9uX2V4aXN0ZW50X2ZpbGU6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcbicKIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCi0KLSAgIC4uCi0KICAgIC4uIHdhcm5pbmc6OgogCiAgICAgICBJbnZva2luZyB0aGUgc3lzdGVtIHNoZWxsIHdpdGggYGBzaGVsbD1UcnVlYGAgY2FuIGJlIGEgc2VjdXJpdHkgaGF6YXJkCkBAIC0xODMsOSArMTg5LDEzIEBACiAgICAgICByZWFkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHRoZSBjaGlsZCBwcm9jZXNzIG1heSBibG9jayBpZiBpdAogICAgICAgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gdGhlIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICppbnB1dCogd2FzIGFkZGVkLgogCiAuLiBkYXRhOjogREVWTlVMTAogCkBAIC04MzMsOCArODQzLDYgQEAKICAgIFRoZSBuZXcgcHJvY2VzcyBoYXMgYSBuZXcgY29uc29sZSwgaW5zdGVhZCBvZiBpbmhlcml0aW5nIGl0cyBwYXJlbnQncwogICAgY29uc29sZSAodGhlIGRlZmF1bHQpLgogCi0gICBUaGlzIGZsYWcgaXMgYWx3YXlzIHNldCB3aGVuIDpjbGFzczpgUG9wZW5gIGlzIGNyZWF0ZWQgd2l0aCBgYHNoZWxsPVRydWVgYC4KLQogLi4gZGF0YTo6IENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUAogCiAgICBBIDpjbGFzczpgUG9wZW5gIGBgY3JlYXRpb25mbGFnc2BgIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoYXQgYSBuZXcgcHJvY2VzcwpAQCAtMTA0OSw5ICsxMDU3LDkgQEAKIAogICAgUmV0dXJuIGBgKHN0YXR1cywgb3V0cHV0KWBgIG9mIGV4ZWN1dGluZyAqY21kKiBpbiBhIHNoZWxsLgogCi0gICBFeGVjdXRlIHRoZSBzdHJpbmcgKmNtZCogaW4gYSBzaGVsbCB3aXRoIDpjbGFzczpgUG9wZW5gIGFuZCByZXR1cm4gYSAyLXR1cGxlCi0gICBgYChzdGF0dXMsIG91dHB1dClgYCB2aWEgOmZ1bmM6YFBvcGVuLmNvbW11bmljYXRlYC4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUKLSAgIGlzIHVzZWQ7IHNlZSB0aGUgbm90ZXMgb24gOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIG1vcmUgZGV0YWlscy4KKyAgIEV4ZWN1dGUgdGhlIHN0cmluZyAqY21kKiBpbiBhIHNoZWxsIHdpdGggOm1ldGg6YFBvcGVuLmNoZWNrX291dHB1dGAgYW5kCisgICByZXR1cm4gYSAyLXR1cGxlIGBgKHN0YXR1cywgb3V0cHV0KWBgLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkOworICAgc2VlIHRoZSBub3RlcyBvbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICBBIHRyYWlsaW5nIG5ld2xpbmUgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LgogICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdCBiL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAppbmRleCA0YmRiOTliLi4xNWMwNmI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CkBAIC0xNTAsOCArMTUwLDkgQEAKIAogLi4gbWV0aG9kOjogQVVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IEFVX3JlYWQucmVhZGZyYW1lcyhuKQpAQCAtMjExLDYgKzIxMiw5IEBACiAKICAgIFNldCB0aGUgc2FtcGxlIHdpZHRoIChpbiBieXRlcy4pCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciAyNC1iaXQgc2FtcGxlcy4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS5zZXRmcmFtZXJhdGUobikKIApAQCAtMjQ2LDExICsyNTAsMTcgQEAKIAogICAgV3JpdGUgYXVkaW8gZnJhbWVzLCB3aXRob3V0IGNvcnJlY3RpbmcgKm5mcmFtZXMqLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGBcIHMgYXJlIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS53cml0ZWZyYW1lcyhkYXRhKQogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXMucnN0IGIvRG9jL2xpYnJhcnkvc3lzLnJzdAppbmRleCAxOGQwNTI3Li5hZDQ0N2EyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKQEAgLTM4MCw2ICszODAsMjEgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKy4uIGZ1bmN0aW9uOjogZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkIGJ5IHRoZSBpbnRlcnByZXRlciwKKyAgIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgc2l6ZS4gIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IHVzZWZ1bCBmb3IgdHJhY2tpbmcKKyAgIGFuZCBkZWJ1Z2dpbmcgbWVtb3J5IGxlYWtzLiAgQmVjYXVzZSBvZiB0aGUgaW50ZXJwcmV0ZXIncyBpbnRlcm5hbAorICAgY2FjaGVzLCB0aGUgcmVzdWx0IGNhbiB2YXJ5IGZyb20gY2FsbCB0byBjYWxsOyB5b3UgbWF5IGhhdmUgdG8gY2FsbAorICAgOmZ1bmM6YF9jbGVhcl90eXBlX2NhY2hlKClgIGFuZCA6ZnVuYzpgZ2MuY29sbGVjdCgpYCB0byBnZXQgbW9yZQorICAgcHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgSWYgYSBQeXRob24gYnVpbGQgb3IgaW1wbGVtZW50YXRpb24gY2Fubm90IHJlYXNvbmFibHkgY29tcHV0ZSB0aGlzCisgICBpbmZvcm1hdGlvbiwgOmZ1bmM6YGdldGFsbG9jYXRlZGJsb2NrcygpYCBpcyBhbGxvd2VkIHRvIHJldHVybiAwIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0Y2hlY2tpbnRlcnZhbCgpCiAKICAgIFJldHVybiB0aGUgaW50ZXJwcmV0ZXIncyAiY2hlY2sgaW50ZXJ2YWwiOyBzZWUgOmZ1bmM6YHNldGNoZWNraW50ZXJ2YWxgLgpAQCAtMzk2LDkgKzQxMSwxMCBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGRsb3BlbmZsYWdzKCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciA6YzpmdW5jOmBkbG9wZW5gIGNhbGxzLgotICAgVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSA6bW9kOmBjdHlwZXNgIGFuZCA6bW9kOmBETEZDTmAgbW9kdWxlcy4KLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IKKyAgIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgdmFsdWVzIGNhbiBiZQorICAgZm91bmQgaW4gdGhlIDptb2Q6YG9zYCBtb2R1bGUgKGBgUlRMRF94eHhgYCBjb25zdGFudHMsIGUuZy4KKyAgIDpkYXRhOmBvcy5SVExEX0xBWllgKS4gIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCiAuLiBmdW5jdGlvbjo6IGdldGZpbGVzeXN0ZW1lbmNvZGluZygpCkBAIC01NzcsOSArNTkzLDIwIEBACiAgICB8IDpjb25zdDpgaW1hZ2AgICAgICAgfCBtdWx0aXBsaWVyIHVzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICAgIHwgY29tcGxleCBudW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgYWxnb3JpdGhtYCAgfCBuYW1lIG9mIHRoZSBhbGdvcml0aG0gZm9yIGhhc2hpbmcgb2Ygc3RyLCBieXRlcywgfAorICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYW5kIG1lbW9yeXZpZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgaGFzaF9iaXRzYCAgfCBpbnRlcm5hbCBvdXRwdXQgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBzZWVkX2JpdHNgICB8IHNpemUgb2YgdGhlIHNlZWQga2V5IG9mIHRoZSBoYXNoIGFsZ29yaXRobSAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDogMy40CisgICAgICBBZGRlZCAqYWxnb3JpdGhtKiwgKmhhc2hfYml0cyogYW5kICpzZWVkX2JpdHMqCisKIAogLi4gZGF0YTo6IGhleHZlcnNpb24KIApAQCAtNjYzLDYgKzY5MCwxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZGF0YTo6IF9faW50ZXJhY3RpdmVob29rX18KKworICAgV2hlbiBwcmVzZW50LCB0aGlzIGZ1bmN0aW9uIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkICh3aXRoIG5vIGFyZ3VtZW50cykKKyAgIHdoZW4gdGhlIGludGVycHJldGVyIGlzIGxhdW5jaGVkIGluIDpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLgorICAgVGhpcyBpcyBkb25lIGFmdGVyIHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlIGlzIHJlYWQsIHNvIHRoYXQgeW91CisgICBjYW4gc2V0IHRoaXMgaG9vayB0aGVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBpbnRlcm4oc3RyaW5nKQogCiAgICBFbnRlciAqc3RyaW5nKiBpbiB0aGUgdGFibGUgb2YgImludGVybmVkIiBzdHJpbmdzIGFuZCByZXR1cm4gdGhlIGludGVybmVkIHN0cmluZwpAQCAtODEwLDggKzg0Nyw2IEBACiAgICBXaW5kb3dzICAgICAgICAgIGBgJ3dpbjMyJ2BgCiAgICBXaW5kb3dzL0N5Z3dpbiAgIGBgJ2N5Z3dpbidgYAogICAgTWFjIE9TIFggICAgICAgICBgYCdkYXJ3aW4nYGAKLSAgIE9TLzIgICAgICAgICAgICAgYGAnb3MyJ2BgCi0gICBPUy8yIEVNWCAgICAgICAgIGBgJ29zMmVteCdgYAogICAgPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKQEAgLTg4Miw3ICs5MTcsNyBAQAogICAgdGhlIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlIGEKICAgIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhcwogICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3MoMClgYC4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzCi0gICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzCisgICBgYHN5cy5zZXRkbG9wZW5mbGFncyhvcy5SVExEX0dMT0JBTClgYC4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMKICAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgogICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLgogCkBAIC0xMDkyLDcgKzExMjcsNiBAQAogICAgfCA6Y29uc3Q6YG5hbWVgICAgIHwgTmFtZSBvZiB0aGUgdGhyZWFkIGltcGxlbWVudGF0aW9uOiAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ250J2BgOiBXaW5kb3dzIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnb3MyJ2BgOiBPUy8yIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdwdGhyZWFkJ2BgOiBQT1NJWCB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ3NvbGFyaXMnYGA6IFNvbGFyaXMgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0IGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdAppbmRleCBjNDdkY2NlLi41MzVhYzU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKQEAgLTgzLDggKzgzLDYgQEAKICAgbG9jYXRlZCB1bmRlciB0aGUgdXNlciBob21lIGRpcmVjdG9yeS4KIC0gKm50Kjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMgbGlrZSBXaW5kb3dzLgogLSAqbnRfdXNlcio6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCi0tICpvczIqOiBzY2hlbWUgZm9yIE9TLzIgcGxhdGZvcm1zLgotLSAqb3MyX2hvbWUqOiBzY2hlbWUgZm9yIE9TLzIgcGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KIAogRWFjaCBzY2hlbWUgaXMgaXRzZWxmIGNvbXBvc2VkIG9mIGEgc2VyaWVzIG9mIHBhdGhzIGFuZCBlYWNoIHBhdGggaGFzIGEgdW5pcXVlCiBpZGVudGlmaWVyLiAgUHl0aG9uIGN1cnJlbnRseSB1c2VzIGVpZ2h0IHBhdGhzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAppbmRleCAxZWFkNzFjLi41OTMzNmM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdApAQCAtNTkxLDYgKzU5MSw2NyBAQAogICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgaXQgaXMgb25lIG9mIGNoYXJhY3RlciBkZXZpY2UsIGJsb2NrIGRldmljZSBvciBGSUZPLgogCiAKKy4uIF90YXJmaWxlLWNvbW1hbmRsaW5lOgorCitDb21tYW5kIExpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gaW50ZXJhY3QKK3dpdGggdGFyIGFyY2hpdmVzLgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgdGFyIGFyY2hpdmUsIHNwZWNpZnkgaXRzIG5hbWUgYWZ0ZXIgdGhlIDpvcHRpb246YC1jYAorb3B0aW9uIGFuZCB0aGVuIGxpc3QgdGhlIGZpbGVuYW1lKHMpIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWMgbW9udHkudGFyICBzcGFtLnR4dCBlZ2dzLnR4dAorCitQYXNzaW5nIGEgZGlyZWN0b3J5IGlzIGFsc28gYWNjZXB0YWJsZTo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1jIG1vbnR5LnRhciBsaWZlLW9mLWJyaWFuXzE5NzkvCisKK0lmIHlvdSB3YW50IHRvIGV4dHJhY3QgYSB0YXIgYXJjaGl2ZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdXNlCit0aGUgOm9wdGlvbjpgLWVgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhcgorCitZb3UgY2FuIGFsc28gZXh0cmFjdCBhIHRhciBhcmNoaXZlIGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGJ5IHBhc3NpbmcgdGhlCitkaXJlY3RvcnkncyBuYW1lOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWUgbW9udHkudGFyICBvdGhlci1kaXIvCisKK0ZvciBhIGxpc3Qgb2YgdGhlIGZpbGVzIGluIGEgdGFyIGFyY2hpdmUsIHVzZSB0aGUgOm9wdGlvbjpgLWxgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1sIG1vbnR5LnRhcgorCisKK0NvbW1hbmQgbGluZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBjbWRvcHRpb246OiAtbCA8dGFyZmlsZT4KKyAgICAgICAgICAgICAgIC0tbGlzdCA8dGFyZmlsZT4KKworICAgTGlzdCBmaWxlcyBpbiBhIHRhcmZpbGUuCisKKy4uIGNtZG9wdGlvbjo6IC1jIDx0YXJmaWxlPiA8c291cmNlMT4gPHNvdXJjZU4+CisgICAgICAgICAgICAgICAtLWNyZWF0ZSA8dGFyZmlsZT4gPHNvdXJjZTE+IDxzb3VyY2VOPgorCisgICBDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZSBmaWxlcy4KKworLi4gY21kb3B0aW9uOjogLWUgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisgICAgICAgICAgICAgICAtLWV4dHJhY3QgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisKKyAgIEV4dHJhY3QgdGFyZmlsZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiAqb3V0cHV0X2RpciogaXMgbm90IHNwZWNpZmllZC4KKworLi4gY21kb3B0aW9uOjogLXQgPHRhcmZpbGU+CisgICAgICAgICAgICAgICAtLXRlc3QgPHRhcmZpbGU+CisKKyAgIFRlc3Qgd2hldGhlciB0aGUgdGFyZmlsZSBpcyB2YWxpZCBvciBub3QuCisKKy4uIGNtZG9wdGlvbjo6IC12LCAtLXZlcmJvc2UKKworICAgVmVyYm9zZSBvdXRwdXQKKwogLi4gX3Rhci1leGFtcGxlczoKIAogRXhhbXBsZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKaW5kZXggYzEyNzBmNC4uMmM1MTU0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKQEAgLTQ0MiwxMyArNDQyLDYgQEAKICAgIEEgZGVjb3JhdG9yIGZvciBydW5uaW5nIHRlc3RzIHRoYXQgcmVxdWlyZSBzdXBwb3J0IGZvciBzeW1ib2xpYyBsaW5rcy4KIAogCi0uLiBmdW5jdGlvbjo6IHN1cHByZXNzX2NyYXNoX3BvcHVwKCkKLQotICAgQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBkaXNhYmxlcyBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCi0gICBgU2V0RXJyb3JNb2RlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxJTI4dj12cy44NSUyOS5hc3B4PmBfLgotICAgT24gb3RoZXIgcGxhdGZvcm1zIGl0J3MgYSBuby1vcC4KLQotCiAuLiBkZWNvcmF0b3I6OiBhbnRpY2lwYXRlX2ZhaWx1cmUoY29uZGl0aW9uKQogCiAgICBBIGRlY29yYXRvciB0byBjb25kaXRpb25hbGx5IG1hcmsgdGVzdHMgd2l0aApAQCAtNTkzLDYgKzU4NiwyMSBAQAogICAgVGVtcG9yYXJpbHkgdW5zZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBgZW52dmFyYGAuCiAKIAorLi4gY2xhc3M6OiBTdXBwcmVzc0NyYXNoUmVwb3J0KCkKKworICAgQSBjb250ZXh0IG1hbmFnZXIgdXNlZCB0byB0cnkgdG8gcHJldmVudCBjcmFzaCBkaWFsb2cgcG9wdXBzIG9uIHRlc3RzIHRoYXQKKyAgIGFyZSBleHBlY3RlZCB0byBjcmFzaCBhIHN1YnByb2Nlc3MuCisKKyAgIE9uIFdpbmRvd3MsIGl0IGRpc2FibGVzIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKKyAgIGBTZXRFcnJvck1vZGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjEuYXNweD5gXy4KKworICAgT24gVU5JWCwgOmZ1bmM6YHJlc291cmNlLnNldHJsaW1pdGAgaXMgdXNlZCB0byBzZXQKKyAgIDphdHRyOmByZXNvdXJjZS5STElNSVRfQ09SRWAncyBzb2Z0IGxpbWl0IHRvIDAgdG8gcHJldmVudCBjb3JlZHVtcCBmaWxlCisgICBjcmVhdGlvbi4KKworICAgT24gYm90aCBwbGF0Zm9ybXMsIHRoZSBvbGQgdmFsdWUgaXMgcmVzdG9yZWQgYnkgOm1ldGg6YF9fZXhpdF9fYC4KKworCiAuLiBjbGFzczo6IFdhcm5pbmdzUmVjb3JkZXIoKQogCiAgICBDbGFzcyB1c2VkIHRvIHJlY29yZCB3YXJuaW5ncyBmb3IgdW5pdCB0ZXN0cy4gU2VlIGRvY3VtZW50YXRpb24gb2YKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdCBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAppbmRleCBjNjI1MjU0Li4xYmE0MmEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CkBAIC0xMCwxMSArMTAsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAotVGhlIDptb2Q6YHRleHR3cmFwYCBtb2R1bGUgcHJvdmlkZXMgdHdvIGNvbnZlbmllbmNlIGZ1bmN0aW9ucywgOmZ1bmM6YHdyYXBgIGFuZAotOmZ1bmM6YGZpbGxgLCBhcyB3ZWxsIGFzIDpjbGFzczpgVGV4dFdyYXBwZXJgLCB0aGUgY2xhc3MgdGhhdCBkb2VzIGFsbCB0aGUgd29yaywKLWFuZCB0d28gdXRpbGl0eSBmdW5jdGlvbnMsIDpmdW5jOmBkZWRlbnRgIGFuZCA6ZnVuYzpgaW5kZW50YC4gIElmIHlvdSdyZSBqdXN0IHdyYXBwaW5nIG9yIGZpbGxpbmcgb25lCi1vciB0d28gIHRleHQgc3RyaW5ncywgdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7Ci1vdGhlcndpc2UsICB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRleHRXcmFwcGVyYCBmb3IgZWZmaWNpZW5jeS4KK1RoZSA6bW9kOmB0ZXh0d3JhcGAgbW9kdWxlIHByb3ZpZGVzIHNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zLAorYXMgd2VsbCBhcyA6Y2xhc3M6YFRleHRXcmFwcGVyYCwgdGhlIGNsYXNzIHRoYXQgZG9lcyBhbGwgdGhlIHdvcmsuCitJZiB5b3UncmUganVzdCB3cmFwcGluZyBvciBmaWxsaW5nIG9uZSBvciB0d28gdGV4dCBzdHJpbmdzLCB0aGUgY29udmVuaWVuY2UKK2Z1bmN0aW9ucyBzaG91bGQgYmUgZ29vZCBlbm91Z2g7IG90aGVyd2lzZSwgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YKKzpjbGFzczpgVGV4dFdyYXBwZXJgIGZvciBlZmZpY2llbmN5LgogCiAuLiBmdW5jdGlvbjo6IHdyYXAodGV4dCwgd2lkdGg9NzAsICoqa3dhcmdzKQogCkBAIC0zOSwxOSArMzksMjQgQEAKICAgIEluIHBhcnRpY3VsYXIsIDpmdW5jOmBmaWxsYCBhY2NlcHRzIGV4YWN0bHkgdGhlIHNhbWUga2V5d29yZCBhcmd1bWVudHMgYXMKICAgIDpmdW5jOmB3cmFwYC4KIAotQm90aCA6ZnVuYzpgd3JhcGAgYW5kIDpmdW5jOmBmaWxsYCB3b3JrIGJ5IGNyZWF0aW5nIGEgOmNsYXNzOmBUZXh0V3JhcHBlcmAKLWluc3RhbmNlIGFuZCBjYWxsaW5nIGEgc2luZ2xlIG1ldGhvZCBvbiBpdC4gIFRoYXQgaW5zdGFuY2UgaXMgbm90IHJldXNlZCwgc28gZm9yCi1hcHBsaWNhdGlvbnMgdGhhdCB3cmFwL2ZpbGwgbWFueSB0ZXh0IHN0cmluZ3MsIGl0IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgZm9yIHlvdQotdG8gY3JlYXRlIHlvdXIgb3duIDpjbGFzczpgVGV4dFdyYXBwZXJgIG9iamVjdC4KIAotVGV4dCBpcyBwcmVmZXJhYmx5IHdyYXBwZWQgb24gd2hpdGVzcGFjZXMgYW5kIHJpZ2h0IGFmdGVyIHRoZSBoeXBoZW5zIGluCi1oeXBoZW5hdGVkIHdvcmRzOyBvbmx5IHRoZW4gd2lsbCBsb25nIHdvcmRzIGJlIGJyb2tlbiBpZiBuZWNlc3NhcnksIHVubGVzcwotOmF0dHI6YFRleHRXcmFwcGVyLmJyZWFrX2xvbmdfd29yZHNgIGlzIHNldCB0byBmYWxzZS4KKy4uIGZ1bmN0aW9uOjogc2hvcnRlbih0ZXh0LCB3aWR0aD03MCwgKiwgcGxhY2Vob2xkZXI9IiBbLi4uXSIpCiAKLVR3byBhZGRpdGlvbmFsIHV0aWxpdHkgZnVuY3Rpb24sIDpmdW5jOmBkZWRlbnRgIGFuZCA6ZnVuYzpgaW5kZW50YCwgYXJlCi1wcm92aWRlZCB0byByZW1vdmUgaW5kZW50YXRpb24gZnJvbSBzdHJpbmdzIHRoYXQgaGF2ZSB1bndhbnRlZCB3aGl0ZXNwYWNlCi10byB0aGUgbGVmdCBvZiB0aGUgdGV4dCBhbmQgdG8gYWRkIGFuIGFyYml0cmFyeSBwcmVmaXggdG8gc2VsZWN0ZWQgbGluZXMKLWluIGEgYmxvY2sgb2YgdGV4dC4KKyAgIENvbGxhcHNlIGFuZCB0cnVuY2F0ZSB0aGUgZ2l2ZW4gdGV4dCB0byBmaXQgaW4gdGhlIGdpdmVuIHdpZHRoLgorCisgICBUaGUgdGV4dCBmaXJzdCBoYXMgaXRzIHdoaXRlc3BhY2UgY29sbGFwc2VkLiAgSWYgaXQgdGhlbiBmaXRzIGluCisgICB0aGUgKndpZHRoKiwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLiAgT3RoZXJ3aXNlLCBhcyBtYW55IHdvcmRzCisgICBhcyBwb3NzaWJsZSBhcmUgam9pbmVkIGFuZCB0aGVuIHRoZSAqcGxhY2Vob2xkZXIqIGlzIGFwcGVuZGVkOjoKKworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICdIZWxsbyB3b3JsZCEnCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTExKQorICAgICAgJ0hlbGxvIFsuLi5dJworICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvIHdvcmxkIiwgd2lkdGg9MTAsIHBsYWNlaG9sZGVyPSIuLi4iKQorICAgICAgJ0hlbGxvLi4uJworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBmdW5jdGlvbjo6IGRlZGVudCh0ZXh0KQogCkBAIC0xMDIsNiArMTA3LDE2IEBACiAgICAgICArIHdvcmxkCiAKIAorOmZ1bmM6YHdyYXBgLCA6ZnVuYzpgZmlsbGAgYW5kIDpmdW5jOmBzaG9ydGVuYCB3b3JrIGJ5IGNyZWF0aW5nIGEKKzpjbGFzczpgVGV4dFdyYXBwZXJgIGluc3RhbmNlIGFuZCBjYWxsaW5nIGEgc2luZ2xlIG1ldGhvZCBvbiBpdC4gIFRoYXQKK2luc3RhbmNlIGlzIG5vdCByZXVzZWQsIHNvIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBwcm9jZXNzIG1hbnkgdGV4dAorc3RyaW5ncywgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvIGNyZWF0ZSB5b3VyIG93bgorOmNsYXNzOmBUZXh0V3JhcHBlcmAgb2JqZWN0LgorCitUZXh0IGlzIHByZWZlcmFibHkgd3JhcHBlZCBvbiB3aGl0ZXNwYWNlcyBhbmQgcmlnaHQgYWZ0ZXIgdGhlIGh5cGhlbnMgaW4KK2h5cGhlbmF0ZWQgd29yZHM7IG9ubHkgdGhlbiB3aWxsIGxvbmcgd29yZHMgYmUgYnJva2VuIGlmIG5lY2Vzc2FyeSwgdW5sZXNzCis6YXR0cjpgVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc2AgaXMgc2V0IHRvIGZhbHNlLgorCiAuLiBjbGFzczo6IFRleHRXcmFwcGVyKCoqa3dhcmdzKQogCiAgICBUaGUgOmNsYXNzOmBUZXh0V3JhcHBlcmAgY29uc3RydWN0b3IgYWNjZXB0cyBhIG51bWJlciBvZiBvcHRpb25hbCBrZXl3b3JkCkBAIC0yMzUsNyArMjUwLDIzIEBACiAgICAgICB3YXMgdG8gYWx3YXlzIGFsbG93IGJyZWFraW5nIGh5cGhlbmF0ZWQgd29yZHMuCiAKIAotICAgOmNsYXNzOmBUZXh0V3JhcHBlcmAgYWxzbyBwcm92aWRlcyB0d28gcHVibGljIG1ldGhvZHMsIGFuYWxvZ291cyB0byB0aGUKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heF9saW5lcworCisgICAgICAoZGVmYXVsdDogYGBOb25lYGApIElmIG5vdCBgYE5vbmVgYCwgdGhlbiB0aGUgdGV4dCBiZSB3aWxsIHRydW5jYXRlZCB0bworICAgICAgKm1heF9saW5lcyogbGluZXMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBsYWNlaG9sZGVyCisKKyAgICAgIChkZWZhdWx0OiBgYCcgWy4uLl0nYGApIFN0cmluZyB0aGF0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGxhc3QgbGluZSBvZgorICAgICAgdGV4dCBpZiBpdCB3aWxsIGJlIHRydW5jYXRlZC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworICAgOmNsYXNzOmBUZXh0V3JhcHBlcmAgYWxzbyBwcm92aWRlcyBzb21lIHB1YmxpYyBtZXRob2RzLCBhbmFsb2dvdXMgdG8gdGhlCiAgICBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb25zOgogCiAgICAuLiBtZXRob2Q6OiB3cmFwKHRleHQpCkBAIC0yNTEsNCArMjgyLDMgQEAKIAogICAgICAgV3JhcHMgdGhlIHNpbmdsZSBwYXJhZ3JhcGggaW4gKnRleHQqLCBhbmQgcmV0dXJucyBhIHNpbmdsZSBzdHJpbmcKICAgICAgIGNvbnRhaW5pbmcgdGhlIHdyYXBwZWQgcGFyYWdyYXBoLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0IGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAppbmRleCA3YzMyNmQxLi40YTNiM2VhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKQEAgLTU3LDYgKzU3LDE1IEBACiAgICBhbmQgdGhyZWFkcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHN0YXJ0ZWQuCiAKIAorLi4gZnVuY3Rpb246OiBtYWluX3RocmVhZCgpCisKKyAgIFJldHVybiB0aGUgbWFpbiA6Y2xhc3M6YFRocmVhZGAgb2JqZWN0LiAgSW4gbm9ybWFsIGNvbmRpdGlvbnMsIHRoZQorICAgbWFpbiB0aHJlYWQgaXMgdGhlIHRocmVhZCBmcm9tIHdoaWNoIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2FzCisgICBzdGFydGVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IHNldHRyYWNlKGZ1bmMpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiB0cmFjZSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdCBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKaW5kZXggYTQ4NzkxNy4uMGNjMTU4NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CkBAIC0xNTEsNyArMTUxLDcgQEAKICAgICAgICAgIHQgPSBUaW1lciguLi4pICAgICAgICMgb3V0c2lkZSB0aGUgdHJ5L2V4Y2VwdAogICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIHQudGltZWl0KC4uLikgICAgIyBvciB0LnJlcGVhdCguLi4pCi0gICAgICAgICBleGNlcHQ6CisgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgIHQucHJpbnRfZXhjKCkKIAogICAgICAgVGhlIGFkdmFudGFnZSBvdmVyIHRoZSBzdGFuZGFyZCB0cmFjZWJhY2sgaXMgdGhhdCBzb3VyY2UgbGluZXMgaW4gdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90a2ludGVyLnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CmluZGV4IGFkMzdhN2IuLjgzZjBlZDUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0CkBAIC03NDcsMzIgKzc0Nyw2IEBACiAgICBkaXNwbGF5ZWQuICBZb3UgY2FuIHVzZSB0aGVzZSA6bW9kOmB0a2ludGVyYCBmdW5jdGlvbnMgdG8gYWNjZXNzIHRoZXNlIHNwZWNpYWwKICAgIHBvaW50cyBpbiB0ZXh0IHdpZGdldHM6CiAKLS4uIGZ1bmN0aW9uOjogQXRFbmQoKQotICAgICAgcmVmZXJzIHRvIHRoZSBsYXN0IHBvc2l0aW9uIGluIHRoZSB0ZXh0Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdEluc2VydCgpCi0gICAgICByZWZlcnMgdG8gdGhlIHBvaW50IHdoZXJlIHRoZSB0ZXh0IGN1cnNvciBpcwotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRTZWxGaXJzdCgpCi0gICAgICBpbmRpY2F0ZXMgdGhlIGJlZ2lubmluZyBwb2ludCBvZiB0aGUgc2VsZWN0ZWQgdGV4dAotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXRTZWxMYXN0KCkKLSAgICAgIGRlbm90ZXMgdGhlIGxhc3QgcG9pbnQgb2YgdGhlIHNlbGVjdGVkIHRleHQgYW5kIGZpbmFsbHkKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0KHhbLCB5XSkKLSAgICAgIHJlZmVycyB0byB0aGUgY2hhcmFjdGVyIGF0IHBpeGVsIGxvY2F0aW9uICp4KiwgKnkqICh3aXRoICp5KiBub3QgdXNlZCBpbiB0aGUKLSAgICAgIGNhc2Ugb2YgYSB0ZXh0IGVudHJ5IHdpZGdldCwgd2hpY2ggY29udGFpbnMgYSBzaW5nbGUgbGluZSBvZiB0ZXh0KS4KLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCiBUZXh0IHdpZGdldCBpbmRleGVzCiAgICBUaGUgaW5kZXggbm90YXRpb24gZm9yIFRleHQgd2lkZ2V0cyBpcyB2ZXJ5IHJpY2ggYW5kIGlzIGJlc3QgZGVzY3JpYmVkIGluIHRoZSBUawogICAgbWFuIHBhZ2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKaW5kZXggMzJlNTczMy4uYjY4YThmMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdAorKysgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CkBAIC0xMjksNiArMTI5LDEzIEBACiAKICAgIEEgc2hvcnRoYW5kIGZvciBgYGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soZiwgbGltaXQpKWBgLgogCisuLiBmdW5jdGlvbjo6IGNsZWFyX2ZyYW1lcyh0YikKKworICAgQ2xlYXJzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYWxsIHRoZSBzdGFjayBmcmFtZXMgaW4gYSB0cmFjZWJhY2sgKnRiKgorICAgYnkgY2FsbGluZyB0aGUgOm1ldGg6YGNsZWFyYCBtZXRob2Qgb2YgZWFjaCBmcmFtZSBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIF90cmFjZWJhY2stZXhhbXBsZToKIApAQCAtMTQ2LDcgKzE1Myw3IEBACiAgICAgICAgc291cmNlID0gaW5wdXQoIj4+PiAiKQogICAgICAgIHRyeToKICAgICAgICAgICAgZXhlYyhzb3VyY2UsIGVudmRpcikKLSAgICAgICBleGNlcHQ6CisgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcHJpbnQoIkV4Y2VwdGlvbiBpbiB1c2VyIGNvZGU6IikKICAgICAgICAgICAgcHJpbnQoIi0iKjYwKQogICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZG91dCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDA2NzgyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvdHJhY2VtYWxsb2MucnN0CkBAIC0wLDAgKzEsNjA1IEBACis6bW9kOmB0cmFjZW1hbGxvY2AgLS0tIFRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogdHJhY2VtYWxsb2MKKyAgIDpzeW5vcHNpczogVHJhY2UgbWVtb3J5IGFsbG9jYXRpb25zLgorCitUaGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGEgZGVidWcgdG9vbCB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieQorUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlYmFjayB3aGVyZSBhbiBvYmplY3Qgd2FzIGFsbG9jYXRlZAorKiBTdGF0aXN0aWNzIG9uIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzIHBlciBmaWxlbmFtZSBhbmQgcGVyIGxpbmUgbnVtYmVyOgorICB0b3RhbCBzaXplLCBudW1iZXIgYW5kIGF2ZXJhZ2Ugc2l6ZSBvZiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcworKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBzbmFwc2hvdHMgdG8gZGV0ZWN0IG1lbW9yeSBsZWFrcworCitUbyB0cmFjZSBtb3N0IG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbiwgdGhlIG1vZHVsZSBzaG91bGQgYmUgc3RhcnRlZAorYXMgZWFybHkgYXMgcG9zc2libGUgYnkgc2V0dGluZyB0aGUgOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50Cit2YXJpYWJsZSB0byBgYDFgYCwgb3IgYnkgdXNpbmcgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2NgYCBjb21tYW5kIGxpbmUKK29wdGlvbi4gVGhlIDpmdW5jOmB0cmFjZW1hbGxvYy5zdGFydGAgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhdCBydW50aW1lIHRvCitzdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMuCisKK0J5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3JlcyB0aGUgbW9zdCByZWNlbnQKK2ZyYW1lICgxIGZyYW1lKS4gVG8gc3RvcmUgMjUgZnJhbWVzIGF0IHN0YXJ0dXA6IHNldCB0aGUKKzplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYDI1YGAsIG9yIHVzZSB0aGUKKzpvcHRpb246YC1YYCBgYHRyYWNlbWFsbG9jPTI1YGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworRXhhbXBsZXMKKz09PT09PT09CisKK0Rpc3BsYXkgdGhlIHRvcCAxMAorLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Rpc3BsYXkgdGhlIDEwIGZpbGVzIGFsbG9jYXRpbmcgdGhlIG1vc3QgbWVtb3J5OjoKKworICAgIGltcG9ydCB0cmFjZW1hbGxvYworCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorCisgICAgIyAuLi4gcnVuIHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisKKyAgICBwcmludCgiWyBUb3AgMTAgXSIpCisgICAgZm9yIHN0YXQgaW4gdG9wX3N0YXRzWzoxMF06CisgICAgICAgIHByaW50KHN0YXQpCisKKworRXhhbXBsZSBvZiBvdXRwdXQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlOjoKKworICAgIFsgVG9wIDEwIF0KKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjo3MTY6IHNpemU9NDg1NSBLaUIsIGNvdW50PTM5MzI4LCBhdmVyYWdlPTEyNiBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46Mjg0OiBzaXplPTUyMSBLaUIsIGNvdW50PTMxOTksIGF2ZXJhZ2U9MTY3IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvY29sbGVjdGlvbnMvX19pbml0X18ucHk6MzY4OiBzaXplPTI0NCBLaUIsIGNvdW50PTIzMTUsIGF2ZXJhZ2U9MTA4IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTozODE6IHNpemU9MTg1IEtpQiwgY291bnQ9Nzc5LCBhdmVyYWdlPTI0MyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6NDAyOiBzaXplPTE1NCBLaUIsIGNvdW50PTM3OCwgYXZlcmFnZT00MTYgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9hYmMucHk6MTMzOiBzaXplPTg4LjcgS2lCLCBjb3VudD0zNDcsIGF2ZXJhZ2U9MjYyIEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoxNDQ2OiBzaXplPTcwLjQgS2lCLCBjb3VudD05MTEsIGF2ZXJhZ2U9NzkgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjE0NTQ6IHNpemU9NTIuMCBLaUIsIGNvdW50PTI1LCBhdmVyYWdlPTIxMzEgQgorICAgIDxzdHJpbmc+OjU6IHNpemU9NDkuNyBLaUIsIGNvdW50PTE0OCwgYXZlcmFnZT0zNDQgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9zeXNjb25maWcucHk6NDExOiBzaXplPTQ4LjAgS2lCLCBjb3VudD0xLCBhdmVyYWdlPTQ4LjAgS2lCCisKK1dlIGNhbiBzZWUgdGhhdCBQeXRob24gbG9hZGVkIGBgNC44IE1pQmBgIGRhdGEgKGJ5dGVjb2RlIGFuZCBjb25zdGFudHMpIGZyb20KK21vZHVsZXMgYW5kIHRoYXQgdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUgYWxsb2NhdGVkIGBgMjQ0IEtpQmBgIHRvIGJ1aWxkCis6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCB0eXBlcy4KKworU2VlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBmb3IgbW9yZSBvcHRpb25zLgorCisKK0NvbXB1dGUgZGlmZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGFrZSB0d28gc25hcHNob3RzIGFuZCBkaXNwbGF5IHRoZSBkaWZmZXJlbmNlczo6CisKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisgICAgIyAuLi4gc3RhcnQgeW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90MSA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICMgLi4uIGNhbGwgdGhlIGZ1bmN0aW9uIGxlYWtpbmcgbWVtb3J5IC4uLgorICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorCisgICAgdG9wX3N0YXRzID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QxLCAnbGluZW5vJykKKworICAgIHByaW50KCJbIFRvcCAxMCBkaWZmZXJlbmNlcyBdIikKKyAgICBmb3Igc3RhdCBpbiB0b3Bfc3RhdHNbOjEwXToKKyAgICAgICAgcHJpbnQoc3RhdCkKKworRXhhbXBsZSBvZiBvdXRwdXQgYmVmb3JlL2FmdGVyIHJ1bm5pbmcgc29tZSB0ZXN0cyBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGU6OgorCisgICAgWyBUb3AgMTAgZGlmZmVyZW5jZXMgXQorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjcxNjogc2l6ZT04MTczIEtpQiAoKzQ0MjggS2lCKSwgY291bnQ9NzEzMzIgKCszOTM2OSksIGF2ZXJhZ2U9MTE3IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvbGluZWNhY2hlLnB5OjEyNzogc2l6ZT05NDAgS2lCICgrOTQwIEtpQiksIGNvdW50PTgxMDYgKCs4MTA2KSwgYXZlcmFnZT0xMTkgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjU3MTogc2l6ZT0yOTggS2lCICgrMjk4IEtpQiksIGNvdW50PTU4OSAoKzU4OSksIGF2ZXJhZ2U9NTE5IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoyODQ6IHNpemU9MTAwNSBLaUIgKCsxNjYgS2lCKSwgY291bnQ9NzQyMyAoKzE1MjYpLCBhdmVyYWdlPTEzOSBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L21pbWV0eXBlcy5weToyMTc6IHNpemU9MTEyIEtpQiAoKzExMiBLaUIpLCBjb3VudD0xMzM0ICgrMTMzNCksIGF2ZXJhZ2U9ODYgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9odHRwL3NlcnZlci5weTo4NDg6IHNpemU9OTYuMCBLaUIgKCs5Ni4wIEtpQiksIGNvdW50PTEgKCsxKSwgYXZlcmFnZT05Ni4wIEtpQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9pbnNwZWN0LnB5OjE0NjU6IHNpemU9ODMuNSBLaUIgKCs4My41IEtpQiksIGNvdW50PTEwOSAoKzEwOSksIGF2ZXJhZ2U9Nzg0IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvbW9jay5weTo0OTE6IHNpemU9NzcuNyBLaUIgKCs3Ny43IEtpQiksIGNvdW50PTE0MyAoKzE0MyksIGF2ZXJhZ2U9NTU3IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdXJsbGliL3BhcnNlLnB5OjQ3Njogc2l6ZT03MS44IEtpQiAoKzcxLjggS2lCKSwgY291bnQ9OTY5ICgrOTY5KSwgYXZlcmFnZT03NiBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2NvbnRleHRsaWIucHk6Mzg6IHNpemU9NjcuMiBLaUIgKCs2Ny4yIEtpQiksIGNvdW50PTEyNiAoKzEyNiksIGF2ZXJhZ2U9NTQ2IEIKKworV2UgY2FuIHNlZSB0aGF0IFB5dGhvbiBoYXMgbG9hZGVkIGBgOC4yIE1pQmBgIG9mIG1vZHVsZSBkYXRhIChieXRlY29kZSBhbmQKK2NvbnN0YW50cyksIGFuZCB0aGF0IHRoaXMgaXMgYGA0LjQgTWlCYGAgbW9yZSB0aGFuIGhhZCBiZWVuIGxvYWRlZCBiZWZvcmUgdGhlCit0ZXN0cywgd2hlbiB0aGUgcHJldmlvdXMgc25hcHNob3Qgd2FzIHRha2VuLiBTaW1pbGFybHksIHRoZSA6bW9kOmBsaW5lY2FjaGVgCittb2R1bGUgaGFzIGNhY2hlZCBgYDk0MCBLaUJgYCBvZiBQeXRob24gc291cmNlIGNvZGUgdG8gZm9ybWF0IHRyYWNlYmFja3MsIGFsbAorb2YgaXQgc2luY2UgdGhlIHByZXZpb3VzIHNuYXBzaG90LgorCitJZiB0aGUgc3lzdGVtIGhhcyBsaXR0bGUgZnJlZSBtZW1vcnksIHNuYXBzaG90cyBjYW4gYmUgd3JpdHRlbiBvbiBkaXNrIHVzaW5nCit0aGUgOm1ldGg6YFNuYXBzaG90LmR1bXBgIG1ldGhvZCB0byBhbmFseXplIHRoZSBzbmFwc2hvdCBvZmZsaW5lLiBUaGVuIHVzZSB0aGUKKzptZXRoOmBTbmFwc2hvdC5sb2FkYCBtZXRob2QgcmVsb2FkIHRoZSBzbmFwc2hvdC4KKworCitHZXQgdGhlIHRyYWNlYmFjayBvZiBhIG1lbW9yeSBibG9jaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29kZSB0byBkaXNwbGF5IHRoZSB0cmFjZWJhY2sgb2YgdGhlIGJpZ2dlc3QgbWVtb3J5IGJsb2NrOjoKKworICAgIGltcG9ydCBsaW5lY2FjaGUKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgICMgU3RvcmUgMjUgZnJhbWVzCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoMjUpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygndHJhY2ViYWNrJykKKworICAgICMgcGljayB0aGUgYmlnZ2VzdCBtZW1vcnkgYmxvY2sKKyAgICBzdGF0ID0gdG9wX3N0YXRzWzBdCisgICAgcHJpbnQoIiVzIG1lbW9yeSBibG9ja3M6ICUuMWYgS2lCIiAlIChzdGF0LmNvdW50LCBzdGF0LnNpemUgLyAxMDI0KSkKKyAgICBmb3IgZnJhbWUgaW4gc3RhdC50cmFjZWJhY2s6CisgICAgICAgIHByaW50KCcgIEZpbGUgIiVzIiwgbGluZSAlcycgJSAoZnJhbWUuZmlsZW5hbWUsIGZyYW1lLmxpbmVubykpCisgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKQorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBwcmludCgnICAgICcgKyBsaW5lKQorCitFeGFtcGxlIG9mIG91dHB1dCBvZiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUgKHRyYWNlYmFjayBsaW1pdGVkIHRvIDI1IGZyYW1lcyk6OgorCisgICAgOTAzIG1lbW9yeSBibG9ja3M6IDg3MC4xIEtpQgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDcxNgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwMzYKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA5MzQKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxMDY4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNjE5CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTU4MQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE2MTQKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9kb2N0ZXN0LnB5IiwgbGluZSAxMDEKKyAgICAgICAgaW1wb3J0IHBkYgorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDI4NAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDkzOAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDEwNjgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA2MTkKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNTgxCisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTYxNAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSIsIGxpbmUgMTcyOAorICAgICAgICBpbXBvcnQgZG9jdGVzdAorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvdGVzdF9waWNrbGV0b29scy5weSIsIGxpbmUgMjEKKyAgICAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGV0b29scykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSAxMjc2CisgICAgICAgIHRlc3RfcnVubmVyKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSA5NzYKKyAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvcmVncnRlc3QucHkiLCBsaW5lIDc2MQorICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSAxNTYzCisgICAgICAgIG1haW4oKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3Rlc3QvX19tYWluX18ucHkiLCBsaW5lIDMKKyAgICAgICAgcmVncnRlc3QubWFpbl9pbl90ZW1wX2N3ZCgpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvcnVucHkucHkiLCBsaW5lIDczCisgICAgICAgIGV4ZWMoY29kZSwgcnVuX2dsb2JhbHMpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvcnVucHkucHkiLCBsaW5lIDE2MAorICAgICAgICAiX19tYWluX18iLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKKworV2UgY2FuIHNlZSB0aGF0IHRoZSBtb3N0IG1lbW9yeSB3YXMgYWxsb2NhdGVkIGluIHRoZSA6bW9kOmBpbXBvcnRsaWJgIG1vZHVsZSB0bworbG9hZCBkYXRhIChieXRlY29kZSBhbmQgY29uc3RhbnRzKSBmcm9tIG1vZHVsZXM6IGBgODcwIEtpQmBgLiBUaGUgdHJhY2ViYWNrIGlzCit3aGVyZSB0aGUgOm1vZDpgaW1wb3J0bGliYCBsb2FkZWQgZGF0YSBtb3N0IHJlY2VudGx5OiBvbiB0aGUgYGBpbXBvcnQgcGRiYGAKK2xpbmUgb2YgdGhlIDptb2Q6YGRvY3Rlc3RgIG1vZHVsZS4gVGhlIHRyYWNlYmFjayBtYXkgY2hhbmdlIGlmIGEgbmV3IG1vZHVsZSBpcworbG9hZGVkLgorCisKK1ByZXR0eSB0b3AKKy0tLS0tLS0tLS0KKworQ29kZSB0byBkaXNwbGF5IHRoZSAxMCBsaW5lcyBhbGxvY2F0aW5nIHRoZSBtb3N0IG1lbW9yeSB3aXRoIGEgcHJldHR5IG91dHB1dCwKK2lnbm9yaW5nIGBgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD5gYCBhbmQgYGA8dW5rbm93bj5gYCBmaWxlczo6CisKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgIGRlZiBkaXNwbGF5X3RvcChzbmFwc2hvdCwgZ3JvdXBfYnk9J2xpbmVubycsIGxpbWl0PTEwKToKKyAgICAgICAgc25hcHNob3QgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKCgKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICI8dW5rbm93bj4iKSwKKyAgICAgICAgKSkKKyAgICAgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcyhncm91cF9ieSkKKworICAgICAgICBwcmludCgiVG9wICVzIGxpbmVzIiAlIGxpbWl0KQorICAgICAgICBmb3IgaW5kZXgsIHN0YXQgaW4gZW51bWVyYXRlKHRvcF9zdGF0c1s6bGltaXRdLCAxKToKKyAgICAgICAgICAgIGZyYW1lID0gc3RhdC50cmFjZWJhY2tbMF0KKyAgICAgICAgICAgICMgcmVwbGFjZSAiL3BhdGgvdG8vbW9kdWxlL2ZpbGUucHkiIHdpdGggIm1vZHVsZS9maWxlLnB5IgorICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5zZXAuam9pbihmcmFtZS5maWxlbmFtZS5zcGxpdChvcy5zZXApWy0yOl0pCisgICAgICAgICAgICBwcmludCgiIyVzOiAlczolczogJS4xZiBLaUIiCisgICAgICAgICAgICAgICAgICAlIChpbmRleCwgZmlsZW5hbWUsIGZyYW1lLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSAvIDEwMjQpKQorCisgICAgICAgIG90aGVyID0gdG9wX3N0YXRzW2xpbWl0Ol0KKyAgICAgICAgaWYgb3RoZXI6CisgICAgICAgICAgICBzaXplID0gc3VtKHN0YXQuc2l6ZSBmb3Igc3RhdCBpbiBvdGhlcikKKyAgICAgICAgICAgIHByaW50KCIlcyBvdGhlcjogJS4xZiBLaUIiICUgKGxlbihvdGhlciksIHNpemUgLyAxMDI0KSkKKyAgICAgICAgdG90YWwgPSBzdW0oc3RhdC5zaXplIGZvciBzdGF0IGluIHRvcF9zdGF0cykKKyAgICAgICAgcHJpbnQoIlRvdGFsIGFsbG9jYXRlZCBzaXplOiAlLjFmIEtpQiIgJSAodG90YWwgLyAxMDI0KSkKKworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKworICAgICMgLi4uIHJ1biB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICBkaXNwbGF5X3RvcChzbmFwc2hvdCwgMTApCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICAyMDEzLTExLTA4IDE0OjE2OjU4LjE0OTMyMDogVG9wIDEwIGxpbmVzCisgICAgIzE6IGNvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2ODogMjkxLjkgS2lCCisgICAgIzI6IExpYi9kb2N0ZXN0LnB5OjEyOTE6IDIwMC4yIEtpQgorICAgICMzOiB1bml0dGVzdC9jYXNlLnB5OjU3MTogMTYwLjMgS2lCCisgICAgIzQ6IExpYi9hYmMucHk6MTMzOiA5OS44IEtpQgorICAgICM1OiB1cmxsaWIvcGFyc2UucHk6NDc2OiA3MS44IEtpQgorICAgICM2OiA8c3RyaW5nPjo1OiA2Mi43IEtpQgorICAgICM3OiBMaWIvYmFzZTY0LnB5OjE0MDogNTkuOCBLaUIKKyAgICAjODogTGliL193ZWFrcmVmc2V0LnB5OjM3OiA1MS44IEtpQgorICAgICM5OiBjb2xsZWN0aW9ucy9fX2luaXRfXy5weTozNjI6IDUwLjYgS2lCCisgICAgIzEwOiB0ZXN0L3Rlc3Rfc2l0ZS5weTo1NjogNDguMCBLaUIKKyAgICA3NDk2IG90aGVyOiA0MTYxLjkgS2lCCisgICAgVG90YWwgYWxsb2NhdGVkIHNpemU6IDUyNTguOCBLaUIKKworU2VlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBmb3IgbW9yZSBvcHRpb25zLgorCisKK0FQSQorPT09CisKK0Z1bmN0aW9ucworLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogY2xlYXJfdHJhY2VzKCkKKworICAgQ2xlYXIgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0b3BgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorCisgICBHZXQgdGhlIHRyYWNlYmFjayB3aGVyZSB0aGUgUHl0aG9uIG9iamVjdCAqb2JqKiB3YXMgYWxsb2NhdGVkLgorICAgUmV0dXJuIGEgOmNsYXNzOmBUcmFjZWJhY2tgIGluc3RhbmNlLCBvciBgYE5vbmVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgCisgICBtb2R1bGUgaXMgbm90IHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGRpZCBub3QgdHJhY2UgdGhlIGFsbG9jYXRpb24gb2YKKyAgIHRoZSBvYmplY3QuCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBnYy5nZXRfcmVmZXJyZXJzYCBhbmQgOmZ1bmM6YHN5cy5nZXRzaXplb2ZgIGZ1bmN0aW9ucy4KKworCisuLiBmdW5jdGlvbjo6IGdldF90cmFjZWJhY2tfbGltaXQoKQorCisgICBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiBhIHRyYWNlLgorCisgICBUaGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIHRvCisgICBnZXQgdGhlIGxpbWl0LCBvdGhlcndpc2UgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgVGhlIGxpbWl0IGlzIHNldCBieSB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbi4KKworCisuLiBmdW5jdGlvbjo6IGdldF90cmFjZWRfbWVtb3J5KCkKKworICAgR2V0IHRoZSBjdXJyZW50IHNpemUgYW5kIHBlYWsgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIHRyYWNlZCBieSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgYXMgYSB0dXBsZTogYGAoY3VycmVudDogaW50LCBwZWFrOiBpbnQpYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKworICAgR2V0IHRoZSBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgb2YgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgdXNlZCB0byBzdG9yZQorICAgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MuCisgICBSZXR1cm4gYW4gOmNsYXNzOmBpbnRgLgorCisKKy4uIGZ1bmN0aW9uOjogaXNfdHJhY2luZygpCisKKyAgICBgYFRydWVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBpcyB0cmFjaW5nIFB5dGhvbiBtZW1vcnkKKyAgICBhbGxvY2F0aW9ucywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgIFNlZSBhbHNvIDpmdW5jOmBzdGFydGAgYW5kIDpmdW5jOmBzdG9wYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdGFydChuZnJhbWU6IGludD0xKQorCisgICBTdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IGluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQ29sbGVjdGVkIHRyYWNlYmFja3Mgb2YgdHJhY2VzIHdpbGwgYmUgbGltaXRlZCB0byAqbmZyYW1lKgorICAgZnJhbWVzLiBCeSBkZWZhdWx0LCBhIHRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWU6IHRoZSBsaW1pdCBpcyBgYDFgYC4gKm5mcmFtZSogbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGBgMWBgLgorCisgICBTdG9yaW5nIG1vcmUgdGhhbiBgYDFgYCBmcmFtZSBpcyBvbmx5IHVzZWZ1bCB0byBjb21wdXRlIHN0YXRpc3RpY3MgZ3JvdXBlZAorICAgYnkgYGAndHJhY2ViYWNrJ2BgIG9yIHRvIGNvbXB1dGUgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzOiBzZWUgdGhlCisgICA6bWV0aDpgU25hcHNob3QuY29tcGFyZV90b2AgYW5kIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBtZXRob2RzLgorCisgICBTdG9yaW5nIG1vcmUgZnJhbWVzIGluY3JlYXNlcyB0aGUgbWVtb3J5IGFuZCBDUFUgb3ZlcmhlYWQgb2YgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBVc2UgdGhlIDpmdW5jOmBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5YCBmdW5jdGlvbgorICAgdG8gbWVhc3VyZSBob3cgbXVjaCBtZW1vcnkgaXMgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4KKworICAgVGhlIDplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgKGBgUFlUSE9OVFJBQ0VNQUxMT0M9TkZSQU1FYGApIGFuZCB0aGUgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9TkZSQU1FYGAKKyAgIGNvbW1hbmQgbGluZSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3RhcnQgdHJhY2luZyBhdCBzdGFydHVwLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RvcGAsIDpmdW5jOmBpc190cmFjaW5nYCBhbmQgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdG9wKCkKKworICAgU3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IHVuaW5zdGFsbCBob29rcyBvbiBQeXRob24gbWVtb3J5CisgICBhbGxvY2F0b3JzLiBBbHNvIGNsZWFycyBhbGwgcHJldmlvdXNseSBjb2xsZWN0ZWQgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MKKyAgIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIENhbGwgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgYmVmb3JlCisgICBjbGVhcmluZyB0aGVtLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBjbGVhcl90cmFjZXNgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiB0YWtlX3NuYXBzaG90KCkKKworICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIFJldHVybiBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIFRoZSBzbmFwc2hvdCBkb2VzIG5vdCBpbmNsdWRlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJlZm9yZSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgc3RhcnRlZCB0byB0cmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIFRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmcmFtZXMuIFVzZQorICAgdGhlICpuZnJhbWUqIHBhcmFtZXRlciBvZiB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbiB0byBzdG9yZSBtb3JlIGZyYW1lcy4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEKKyAgIHNuYXBzaG90LCBzZWUgdGhlIHRoZSA6ZnVuYzpgc3RhcnRgIGZ1bmN0aW9uLgorCisgICBTZWUgYWxzbyB0aGUgOmZ1bmM6YGdldF9vYmplY3RfdHJhY2ViYWNrYCBmdW5jdGlvbi4KKworCitGaWx0ZXIKKy0tLS0tLQorCisuLiBjbGFzczo6IEZpbHRlcihpbmNsdXNpdmU6IGJvb2wsIGZpbGVuYW1lX3BhdHRlcm46IHN0ciwgbGluZW5vOiBpbnQ9Tm9uZSwgYWxsX2ZyYW1lczogYm9vbD1GYWxzZSkKKworICAgRmlsdGVyIG9uIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzLgorCisgICBTZWUgdGhlIDpmdW5jOmBmbm1hdGNoLmZubWF0Y2hgIGZ1bmN0aW9uIGZvciB0aGUgc3ludGF4IG9mCisgICAqZmlsZW5hbWVfcGF0dGVybiouIFRoZSBgYCcucHljJ2BgIGFuZCBgYCcucHlvJ2BgIGZpbGUgZXh0ZW5zaW9ucyBhcmUKKyAgIHJlcGxhY2VkIHdpdGggYGAnLnB5J2BgLgorCisgICBFeGFtcGxlczoKKworICAgKiBgYEZpbHRlcihUcnVlLCBzdWJwcm9jZXNzLl9fZmlsZV9fKWBgIG9ubHkgaW5jbHVkZXMgdHJhY2VzIG9mIHRoZQorICAgICA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUKKyAgICogYGBGaWx0ZXIoRmFsc2UsIHRyYWNlbWFsbG9jLl9fZmlsZV9fKWBgIGV4Y2x1ZGVzIHRyYWNlcyBvZiB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZQorICAgKiBgYEZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIpYGAgZXhjbHVkZXMgZW1wdHkgdHJhY2ViYWNrcworCisgICAuLiBhdHRyaWJ1dGU6OiBpbmNsdXNpdmUKKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBUcnVlYGAgKGluY2x1ZGUpLCBvbmx5IHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkCisgICAgICBpbiBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgICAgSWYgKmluY2x1c2l2ZSogaXMgYGBGYWxzZWBgIChleGNsdWRlKSwgaWdub3JlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGluCisgICAgICBhIGZpbGUgd2l0aCBhIG5hbWUgbWF0Y2hpbmcgOmF0dHI6YGZpbGVuYW1lX3BhdHRlcm5gIGF0IGxpbmUgbnVtYmVyCisgICAgICA6YXR0cjpgbGluZW5vYC4KKworICAgLi4gYXR0cmlidXRlOjogbGluZW5vCisKKyAgICAgIExpbmUgbnVtYmVyIChgYGludGBgKSBvZiB0aGUgZmlsdGVyLiBJZiAqbGluZW5vKiBpcyBgYE5vbmVgYCwgdGhlIGZpbHRlcgorICAgICAgbWF0Y2hlcyBhbnkgbGluZSBudW1iZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGZpbGVuYW1lX3BhdHRlcm4KKworICAgICAgRmlsZW5hbWUgcGF0dGVybiBvZiB0aGUgZmlsdGVyIChgYHN0cmBgKS4KKworICAgLi4gYXR0cmlidXRlOjogYWxsX2ZyYW1lcworCisgICAgICBJZiAqYWxsX2ZyYW1lcyogaXMgYGBUcnVlYGAsIGFsbCBmcmFtZXMgb2YgdGhlIHRyYWNlYmFjayBhcmUgY2hlY2tlZC4gSWYKKyAgICAgICphbGxfZnJhbWVzKiBpcyBgYEZhbHNlYGAsIG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lIGlzIGNoZWNrZWQuCisKKyAgICAgIFRoaXMgYXR0cmlidXRlIGhhcyBubyBlZmZlY3QgaWYgdGhlIHRyYWNlYmFjayBsaW1pdCBpcyBgYDFgYC4gIFNlZSB0aGUKKyAgICAgIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmdW5jdGlvbiBhbmQgOmF0dHI6YFNuYXBzaG90LnRyYWNlYmFja19saW1pdGAKKyAgICAgIGF0dHJpYnV0ZS4KKworCitGcmFtZQorLS0tLS0KKworLi4gY2xhc3M6OiBGcmFtZQorCisgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKworICAgVGhlIDpjbGFzczpgVHJhY2ViYWNrYCBjbGFzcyBpcyBhIHNlcXVlbmNlIG9mIDpjbGFzczpgRnJhbWVgIGluc3RhbmNlcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW5hbWUKKworICAgICAgRmlsZW5hbWUgKGBgc3RyYGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsaW5lbm8KKworICAgICAgTGluZSBudW1iZXIgKGBgaW50YGApLgorCisKK1NuYXBzaG90CistLS0tLS0tLQorCisuLiBjbGFzczo6IFNuYXBzaG90CisKKyAgIFNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIFRoZSA6ZnVuYzpgdGFrZV9zbmFwc2hvdGAgZnVuY3Rpb24gY3JlYXRlcyBhIHNuYXBzaG90IGluc3RhbmNlLgorCisgICAuLiBtZXRob2Q6OiBjb21wYXJlX3RvKG9sZF9zbmFwc2hvdDogU25hcHNob3QsIGdyb3VwX2J5OiBzdHIsIGN1bXVsYXRpdmU6IGJvb2w9RmFsc2UpCisKKyAgICAgIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIHdpdGggYW4gb2xkIHNuYXBzaG90LiBHZXQgc3RhdGlzdGljcyBhcyBhIHNvcnRlZAorICAgICAgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgIGluc3RhbmNlcyBncm91cGVkIGJ5ICpncm91cF9ieSouCisKKyAgICAgIFNlZSB0aGUgOm1ldGg6YHN0YXRpc3RpY3NgIG1ldGhvZCBmb3IgKmdyb3VwX2J5KiBhbmQgKmN1bXVsYXRpdmUqCisgICAgICBwYXJhbWV0ZXJzLgorCisgICAgICBUaGUgcmVzdWx0IGlzIHNvcnRlZCBmcm9tIHRoZSBiaWdnZXN0IHRvIHRoZSBzbWFsbGVzdCBieTogYWJzb2x1dGUgdmFsdWUKKyAgICAgIG9mIDphdHRyOmBTdGF0aXN0aWNEaWZmLnNpemVfZGlmZmAsIDphdHRyOmBTdGF0aXN0aWNEaWZmLnNpemVgLCBhYnNvbHV0ZQorICAgICAgdmFsdWUgb2YgOmF0dHI6YFN0YXRpc3RpY0RpZmYuY291bnRfZGlmZmAsIDphdHRyOmBTdGF0aXN0aWMuY291bnRgIGFuZAorICAgICAgdGhlbiBieSA6YXR0cjpgU3RhdGlzdGljRGlmZi50cmFjZWJhY2tgLgorCisKKyAgIC4uIG1ldGhvZDo6IGR1bXAoZmlsZW5hbWUpCisKKyAgICAgIFdyaXRlIHRoZSBzbmFwc2hvdCBpbnRvIGEgZmlsZS4KKworICAgICAgVXNlIDptZXRoOmBsb2FkYCB0byByZWxvYWQgdGhlIHNuYXBzaG90LgorCisKKyAgIC4uIG1ldGhvZDo6IGZpbHRlcl90cmFjZXMoZmlsdGVycykKKworICAgICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlIHdpdGggYSBmaWx0ZXJlZCA6YXR0cjpgdHJhY2VzYAorICAgICAgc2VxdWVuY2UsICpmaWx0ZXJzKiBpcyBhIGxpc3Qgb2YgOmNsYXNzOmBGaWx0ZXJgIGluc3RhbmNlcy4gIElmICpmaWx0ZXJzKgorICAgICAgaXMgYW4gZW1wdHkgbGlzdCwgcmV0dXJuIGEgbmV3IDpjbGFzczpgU25hcHNob3RgIGluc3RhbmNlIHdpdGggYSBjb3B5IG9mCisgICAgICB0aGUgdHJhY2VzLgorCisgICAgICBBbGwgaW5jbHVzaXZlIGZpbHRlcnMgYXJlIGFwcGxpZWQgYXQgb25jZSwgYSB0cmFjZSBpcyBpZ25vcmVkIGlmIG5vCisgICAgICBpbmNsdXNpdmUgZmlsdGVycyBtYXRjaCBpdC4gQSB0cmFjZSBpcyBpZ25vcmVkIGlmIGF0IGxlYXN0IG9uZSBleGNsdXNpdmUKKyAgICAgIGZpbHRlciBtYXRjaHMgaXQuCisKKworICAgLi4gY2xhc3NtZXRob2Q6OiBsb2FkKGZpbGVuYW1lKQorCisgICAgICBMb2FkIGEgc25hcHNob3QgZnJvbSBhIGZpbGUuCisKKyAgICAgIFNlZSBhbHNvIDptZXRoOmBkdW1wYC4KKworCisgICAuLiBtZXRob2Q6OiBzdGF0aXN0aWNzKGdyb3VwX2J5OiBzdHIsIGN1bXVsYXRpdmU6IGJvb2w9RmFsc2UpCisKKyAgICAgIEdldCBzdGF0aXN0aWNzIGFzIGEgc29ydGVkIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNgIGluc3RhbmNlcyBncm91cGVkCisgICAgICBieSAqZ3JvdXBfYnkqOgorCisgICAgICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgZ3JvdXBfYnkgICAgICAgICAgICAgICBkZXNjcmlwdGlvbgorICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGBgJ2ZpbGVuYW1lJ2BgICAgICAgICAgZmlsZW5hbWUKKyAgICAgIGBgJ2xpbmVubydgYCAgICAgICAgICAgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyCisgICAgICBgYCd0cmFjZWJhY2snYGAgICAgICAgIHRyYWNlYmFjaworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgSWYgKmN1bXVsYXRpdmUqIGlzIGBgVHJ1ZWBgLCBjdW11bGF0ZSBzaXplIGFuZCBjb3VudCBvZiBtZW1vcnkgYmxvY2tzIG9mCisgICAgICBhbGwgZnJhbWVzIG9mIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSwgbm90IG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lLgorICAgICAgVGhlIGN1bXVsYXRpdmUgbW9kZSBjYW4gb25seSBiZSB1c2VkIHdpdGggKmdyb3VwX2J5KiBlcXVhbHMgdG8KKyAgICAgIGBgJ2ZpbGVuYW1lJ2BgIGFuZCBgYCdsaW5lbm8nYGAuCisKKyAgICAgIFRoZSByZXN1bHQgaXMgc29ydGVkIGZyb20gdGhlIGJpZ2dlc3QgdG8gdGhlIHNtYWxsZXN0IGJ5OgorICAgICAgOmF0dHI6YFN0YXRpc3RpYy5zaXplYCwgOmF0dHI6YFN0YXRpc3RpYy5jb3VudGAgYW5kIHRoZW4gYnkKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMudHJhY2ViYWNrYC4KKworCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2tfbGltaXQKKworICAgICAgTWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrIG9mIDphdHRyOmB0cmFjZXNgOgorICAgICAgcmVzdWx0IG9mIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgd2hlbiB0aGUgc25hcHNob3Qgd2FzIHRha2VuLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZXMKKworICAgICAgVHJhY2VzIG9mIGFsbCBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob246IHNlcXVlbmNlIG9mCisgICAgICA6Y2xhc3M6YFRyYWNlYCBpbnN0YW5jZXMuCisKKyAgICAgIFRoZSBzZXF1ZW5jZSBoYXMgYW4gdW5kZWZpbmVkIG9yZGVyLiBVc2UgdGhlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYAorICAgICAgbWV0aG9kIHRvIGdldCBhIHNvcnRlZCBsaXN0IG9mIHN0YXRpc3RpY3MuCisKKworU3RhdGlzdGljCistLS0tLS0tLS0KKworLi4gY2xhc3M6OiBTdGF0aXN0aWMKKworICAgU3RhdGlzdGljIG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgOmZ1bmM6YFNuYXBzaG90LnN0YXRpc3RpY3NgIHJldHVybnMgYSBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMuCisKKyAgIFNlZSBhbHNvIHRoZSA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemUKKworICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIGluIGJ5dGVzIChgYGludGBgKS4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrCisKKyAgICAgIFRyYWNlYmFjayB3aGVyZSB0aGUgbWVtb3J5IGJsb2NrIHdhcyBhbGxvY2F0ZWQsIDpjbGFzczpgVHJhY2ViYWNrYAorICAgICAgaW5zdGFuY2UuCisKKworU3RhdGlzdGljRGlmZgorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFN0YXRpc3RpY0RpZmYKKworICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gYW4gb2xkIGFuZCBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5jb21wYXJlX3RvYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgCisgICBpbnN0YW5jZXMuIFNlZSBhbHNvIHRoZSA6Y2xhc3M6YFN0YXRpc3RpY2AgY2xhc3MuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvdW50CisKKyAgICAgIE51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGluIHRoZSBuZXcgc25hcHNob3QgKGBgaW50YGApOiBgYDBgYCBpZgorICAgICAgdGhlIG1lbW9yeSBibG9ja3MgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvdW50X2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBiZXR3ZWVuIHRoZSBvbGQgYW5kIHRoZSBuZXcKKyAgICAgIHNuYXBzaG90cyAoYGBpbnRgYCk6IGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4KKyAgICAgIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemUKKworICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIGluIGJ5dGVzIGluIHRoZSBuZXcgc25hcHNob3QgKGBgaW50YGApOgorICAgICAgYGAwYGAgaWYgdGhlIG1lbW9yeSBibG9ja3MgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemVfZGlmZgorCisgICAgICBEaWZmZXJlbmNlIG9mIHRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBiZXR3ZWVuIHRoZSBvbGQgYW5kCisgICAgICB0aGUgbmV3IHNuYXBzaG90cyAoYGBpbnRgYCk6IGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbgorICAgICAgYWxsb2NhdGVkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9ja3Mgd2VyZSBhbGxvY2F0ZWQsIDpjbGFzczpgVHJhY2ViYWNrYAorICAgICAgaW5zdGFuY2UuCisKKworVHJhY2UKKy0tLS0tCisKKy4uIGNsYXNzOjogVHJhY2UKKworICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisKKyAgIFRoZSA6YXR0cjpgU25hcHNob3QudHJhY2VzYCBhdHRyaWJ1dGUgaXMgYSBzZXF1ZW5jZSBvZiA6Y2xhc3M6YFRyYWNlYAorICAgaW5zdGFuY2VzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFNpemUgb2YgdGhlIG1lbW9yeSBibG9jayBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlYmFjaworLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogVHJhY2ViYWNrCisKKyAgIFNlcXVlbmNlIG9mIDpjbGFzczpgRnJhbWVgIGluc3RhbmNlcyBzb3J0ZWQgZnJvbSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgdG8KKyAgIHRoZSBvbGRlc3QgZnJhbWUuCisKKyAgIEEgdHJhY2ViYWNrIGNvbnRhaW5zIGF0IGxlYXN0IGBgMWBgIGZyYW1lLiBJZiB0aGUgYGB0cmFjZW1hbGxvY2BgIG1vZHVsZQorICAgZmFpbGVkIHRvIGdldCBhIGZyYW1lLCB0aGUgZmlsZW5hbWUgYGAiPHVua25vd24+ImBgIGF0IGxpbmUgbnVtYmVyIGBgMGBgIGlzCisgICB1c2VkLgorCisgICBXaGVuIGEgc25hcHNob3QgaXMgdGFrZW4sIHRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvCisgICA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnJhbWVzLiBTZWUgdGhlIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbi4KKworICAgVGhlIDphdHRyOmBUcmFjZS50cmFjZWJhY2tgIGF0dHJpYnV0ZSBpcyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgIGluc3RhbmNlLgorCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdAppbmRleCA2OTU0ODBmLi5jNGY1N2U0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHlwZXMucnN0CkBAIC0xMDcsOSArMTA3LDM1IEBACiAgICBDIi4pCiAKIAotLi4gZGF0YTo6IE1vZHVsZVR5cGUKKy4uIGNsYXNzOjogTW9kdWxlVHlwZShuYW1lLCBkb2M9Tm9uZSkKIAotICAgVGhlIHR5cGUgb2YgbW9kdWxlcy4KKyAgIFRoZSB0eXBlIG9mIDp0ZXJtOmBtb2R1bGVzIDxtb2R1bGU+YC4gQ29uc3RydWN0b3IgdGFrZXMgdGhlIG5hbWUgb2YgdGhlCisgICBtb2R1bGUgdG8gYmUgY3JlYXRlZCBhbmQgb3B0aW9uYWxseSBpdHMgOnRlcm06YGRvY3N0cmluZ2AuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fZG9jX18KKworICAgICAgVGhlIDp0ZXJtOmBkb2NzdHJpbmdgIG9mIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2xvYWRlcl9fCisKKyAgICAgIFRoZSA6dGVybTpgbG9hZGVyYCB3aGljaCBsb2FkZWQgdGhlIG1vZHVsZS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KKworICAgLi4gYXR0cmlidXRlOjogX19uYW1lX18KKworICAgICAgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4KKworICAgLi4gYXR0cmlidXRlOjogX19wYWNrYWdlX18KKworICAgICAgV2hpY2ggOnRlcm06YHBhY2thZ2VgIGEgbW9kdWxlIGJlbG9uZ3MgdG8uIElmIHRoZSBtb2R1bGUgaXMgdG9wLWxldmVsCisgICAgICAoaS5lLiBub3QgYSBwYXJ0IG9mIGFueSBzcGVjaWZpYyBwYWNrYWdlKSB0aGVuIHRoZSBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldAorICAgICAgdG8gYGAnJ2BgLCBlbHNlIGl0IHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgKHdoaWNoIGNhbiBiZQorICAgICAgOmF0dHI6YF9fbmFtZV9fYCBpZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSBpdHNlbGYpLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIERlZmF1bHRzIHRvIGBgTm9uZWBgLiBQcmV2aW91c2x5IHRoZSBhdHRyaWJ1dGUgd2FzIG9wdGlvbmFsLgogCiAKIC4uIGRhdGE6OiBUcmFjZWJhY2tUeXBlCkBAIC0yMTIsNiArMjM4LDggQEAKICAgICAgICAgICAgICAgIGtleXMgPSBzb3J0ZWQoc2VsZi5fX2RpY3RfXykKICAgICAgICAgICAgICAgIGl0ZW1zID0gKCJ7fT17IXJ9Ii5mb3JtYXQoaywgc2VsZi5fX2RpY3RfX1trXSkgZm9yIGsgaW4ga2V5cykKICAgICAgICAgICAgICAgIHJldHVybiAie30oe30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywgIiwgIi5qb2luKGl0ZW1zKSkKKyAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwogCiAgICBgYFNpbXBsZU5hbWVzcGFjZWBgIG1heSBiZSB1c2VmdWwgYXMgYSByZXBsYWNlbWVudCBmb3IgYGBjbGFzcyBOUzogcGFzc2BgLgogICAgSG93ZXZlciwgZm9yIGEgc3RydWN0dXJlZCByZWNvcmQgdHlwZSB1c2UgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0IGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CmluZGV4IGFkNzBkZDkuLjNiM2QzYTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKQEAgLTE1LDggKzE1LDggQEAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSB3aGljaAogZGVmaW5lcyBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycy4gVGhlIGRhdGEgY29udGFpbmVkIGluCi10aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjEuMAotPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZD5gXy4KK3RoaXMgZGF0YWJhc2UgaXMgY29tcGlsZWQgZnJvbSB0aGUgYFVDRCB2ZXJzaW9uIDYuMy4wCis8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkPmBfLgogCiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSBVbmljb2RlCiBTdGFuZGFyZCBBbm5leCAjNDQsIGAiVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UiCkBAIC0xNjYsNiArMTY2LDYgQEAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKLS4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2QvTmFtZUFsaWFzZXMudHh0CisuLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL05hbWVBbGlhc2VzLnR4dAogCi0uLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkL05hbWVkU2VxdWVuY2VzLnR4dAorLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2stZXhhbXBsZXMucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKaW5kZXggZDdkNjk3ZC4uNDQ0YzIwOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QKQEAgLTI3Nyw2ICsyNzcsMjAgQEAKICAgICAgICAuLi4KICAgICBBdHRyaWJ1dGVFcnJvcjogb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ29sZF9tZXRob2QnCiAKK1VzaW5nIGEgc3BlY2lmaWNhdGlvbiBhbHNvIGVuYWJsZXMgYSBzbWFydGVyIG1hdGNoaW5nIG9mIGNhbGxzIG1hZGUgdG8gdGhlCittb2NrLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgc29tZSBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIGFzIHBvc2l0aW9uYWwgb3IKK25hbWVkIGFyZ3VtZW50czo6CisKKyAgID4+PiBkZWYgZihhLCBiLCBjKTogcGFzcworICAgLi4uCisgICA+Pj4gbW9jayA9IE1vY2soc3BlYz1mKQorICAgPj4+IG1vY2soMSwgMiwgMykKKyAgIDxNb2NrIG5hbWU9J21vY2soKScgaWQ9JzE0MDE2MTU4MDQ1NjU3Nic+CisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKworSWYgeW91IHdhbnQgdGhpcyBzbWFydGVyIG1hdGNoaW5nIHRvIGFsc28gd29yayB3aXRoIG1ldGhvZCBjYWxscyBvbiB0aGUgbW9jaywKK3lvdSBjYW4gdXNlIDpyZWY6YGF1dG8tc3BlY2NpbmcgPGF1dG8tc3BlY2Npbmc+YC4KKwogSWYgeW91IHdhbnQgYSBzdHJvbmdlciBmb3JtIG9mIHNwZWNpZmljYXRpb24gdGhhdCBwcmV2ZW50cyB0aGUgc2V0dGluZwogb2YgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyB0aGUgZ2V0dGluZyBvZiB0aGVtIHRoZW4geW91IGNhbiB1c2UKIGBzcGVjX3NldGAgaW5zdGVhZCBvZiBgc3BlY2AuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CmluZGV4IDAyNDNkN2YuLjEzNWFiZWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CkBAIC0yNjQsNyArMjY0LDYgQEAKICAgICAgICAgICAgIDxNb2NrIG5hbWU9J21vY2subWV0aG9kKCknIGlkPScuLi4nPgogICAgICAgICAgICAgPj4+IG1vY2subWV0aG9kLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzLCB0ZXN0PSd3b3cnKQogCi0KICAgICAuLiBtZXRob2Q6OiBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgqYXJncywgKiprd2FyZ3MpCiAKICAgICAgICBBc3NlcnQgdGhhdCB0aGUgbW9jayB3YXMgY2FsbGVkIGV4YWN0bHkgb25jZSBhbmQgd2l0aCB0aGUgc3BlY2lmaWVkCkBAIC02ODUsNiArNjg0LDI3IEBACiAgICAgICAuLi4KICAgICBLZXlFcnJvcgogCitBIGNhbGxhYmxlIG1vY2sgd2hpY2ggd2FzIGNyZWF0ZWQgd2l0aCBhICpzcGVjKiAob3IgYSAqc3BlY19zZXQqKSB3aWxsCitpbnRyb3NwZWN0IHRoZSBzcGVjaWZpY2F0aW9uIG9iamVjdCdzIHNpZ25hdHVyZSB3aGVuIG1hdGNoaW5nIGNhbGxzIHRvCit0aGUgbW9jay4gIFRoZXJlZm9yZSwgaXQgY2FuIG1hdGNoIHRoZSBhY3R1YWwgY2FsbCdzIGFyZ3VtZW50cyByZWdhcmRsZXNzCitvZiB3aGV0aGVyIHRoZXkgd2VyZSBwYXNzZWQgcG9zaXRpb25hbGx5IG9yIGJ5IG5hbWU6OgorCisgICA+Pj4gZGVmIGYoYSwgYiwgYyk6IHBhc3MKKyAgIC4uLgorICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9ZikKKyAgID4+PiBtb2NrKDEsIDIsIGM9MykKKyAgIDxNb2NrIG5hbWU9J21vY2soKScgaWQ9JzE0MDE2MTU4MDQ1NjU3Nic+CisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgID4+PiBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorCitUaGlzIGFwcGxpZXMgdG8gOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfd2l0aGAsCis6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgLCA6bWV0aDpgfk1vY2suYXNzZXJ0X2hhc19jYWxsc2AgYW5kCis6bWV0aDpgfk1vY2suYXNzZXJ0X2FueV9jYWxsYC4gIFdoZW4gOnJlZjpgYXV0by1zcGVjY2luZ2AsIGl0IHdpbGwgYWxzbworYXBwbHkgdG8gbWV0aG9kIGNhbGxzIG9uIHRoZSBtb2NrIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHNpZ25hdHVyZSBpbnRyb3NwZWN0aW9uIG9uIHNwZWNjZWQgYW5kIGF1dG9zcGVjY2VkIG1vY2sgb2JqZWN0cy4KKwogCiAuLiBjbGFzczo6IFByb3BlcnR5TW9jaygqYXJncywgKiprd2FyZ3MpCiAKQEAgLTE5NjksOCArMTk4OSwxMyBAQAogICAgIGRlZmF1bHQpIHRoZW4gYSBgTWFnaWNNb2NrYCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSwgd2l0aCB0aGUgQVBJIGxpbWl0ZWQKICAgICB0byBtZXRob2RzIG9yIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIG9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcy4KIAotICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYH5pby5JT0Jhc2UucmVhZGAgbWV0aG9kIG9mIHRoZSBmaWxlIGhhbmRsZQotICAgIHRvIHJldHVybi4gIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCisgICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSA6bWV0aDpgfmlvLklPQmFzZS5yZWFkYCwKKyAgICA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZWAsIGFuZCA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZXNgIG1ldGhvZHMKKyAgICBvZiB0aGUgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLiAgQ2FsbHMgdG8gdGhvc2UgbWV0aG9kcyB3aWxsIHRha2UgZGF0YSBmcm9tCisgICAgYHJlYWRfZGF0YWAgdW50aWwgaXQgaXMgZGVwbGV0ZWQuICBUaGUgbW9jayBvZiB0aGVzZSBtZXRob2RzIGlzIHByZXR0eQorICAgIHNpbXBsaXN0aWMuICBJZiB5b3UgbmVlZCBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgZGF0YSB0aGF0IHlvdSBhcmUgZmVlZGluZyB0bworICAgIHRoZSB0ZXN0ZWQgY29kZSB5b3Ugd2lsbCBuZWVkIHRvIGN1c3RvbWl6ZSB0aGlzIG1vY2sgZm9yIHlvdXJzZWxmLgorICAgIGByZWFkX2RhdGFgIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgogCiBVc2luZyBgb3BlbmAgYXMgYSBjb250ZXh0IG1hbmFnZXIgaXMgYSBncmVhdCB3YXkgdG8gZW5zdXJlIHlvdXIgZmlsZSBoYW5kbGVzCiBhcmUgY2xvc2VkIHByb3Blcmx5IGFuZCBpcyBiZWNvbWluZyBjb21tb246OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0IGIvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CmluZGV4IDUxNTdiMjYuLjYzMTA2MjQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKQEAgLTU2Myw2ICs1NjMsNjggQEAKIFNraXBwZWQgY2xhc3NlcyB3aWxsIG5vdCBoYXZlIDptZXRoOmBzZXRVcENsYXNzYCBvciA6bWV0aDpgdGVhckRvd25DbGFzc2AgcnVuLgogCiAKKy4uIF9zdWJ0ZXN0czoKKworRGlzdGluZ3Vpc2hpbmcgdGVzdCBpdGVyYXRpb25zIHVzaW5nIHN1YnRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1doZW4gc29tZSBvZiB5b3VyIHRlc3RzIGRpZmZlciBvbmx5IGJ5IGEgc29tZSB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzLCBmb3IKK2luc3RhbmNlIHNvbWUgcGFyYW1ldGVycywgdW5pdHRlc3QgYWxsb3dzIHlvdSB0byBkaXN0aW5ndWlzaCB0aGVtIGluc2lkZQordGhlIGJvZHkgb2YgYSB0ZXN0IG1ldGhvZCB1c2luZyB0aGUgOm1ldGg6YH5UZXN0Q2FzZS5zdWJUZXN0YCBjb250ZXh0IG1hbmFnZXIuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRlc3Q6OgorCisgICBjbGFzcyBOdW1iZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICBkZWYgdGVzdF9ldmVuKHNlbGYpOgorICAgICAgICAgICAiIiIKKyAgICAgICAgICAgVGVzdCB0aGF0IG51bWJlcnMgYmV0d2VlbiAwIGFuZCA1IGFyZSBhbGwgZXZlbi4KKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDYpOgorICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorCit3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBvdXRwdXQ6OgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT0xKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTMpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9NSkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCitXaXRob3V0IHVzaW5nIGEgc3VidGVzdCwgZXhlY3V0aW9uIHdvdWxkIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUsCithbmQgdGhlIGVycm9yIHdvdWxkIGJlIGxlc3MgZWFzeSB0byBkaWFnbm9zZSBiZWNhdXNlIHRoZSB2YWx1ZSBvZiBgYGlgYAord291bGRuJ3QgYmUgZGlzcGxheWVkOjoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCisKIC4uIF91bml0dGVzdC1jb250ZW50czoKIAogQ2xhc3NlcyBhbmQgZnVuY3Rpb25zCkBAIC02NzYsNiArNzM4LDIxIEBACiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisgICAuLiBtZXRob2Q6OiBzdWJUZXN0KG1zZz1Ob25lLCAqKnBhcmFtcykKKworICAgICAgUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHdoaWNoIGV4ZWN1dGVzIHRoZSBlbmNsb3NlZCBjb2RlIGJsb2NrIGFzIGEKKyAgICAgIHN1YnRlc3QuICAqbXNnKiBhbmQgKnBhcmFtcyogYXJlIG9wdGlvbmFsLCBhcmJpdHJhcnkgdmFsdWVzIHdoaWNoIGFyZQorICAgICAgZGlzcGxheWVkIHdoZW5ldmVyIGEgc3VidGVzdCBmYWlscywgYWxsb3dpbmcgeW91IHRvIGlkZW50aWZ5IHRoZW0KKyAgICAgIGNsZWFybHkuCisKKyAgICAgIEEgdGVzdCBjYXNlIGNhbiBjb250YWluIGFueSBudW1iZXIgb2Ygc3VidGVzdCBkZWNsYXJhdGlvbnMsIGFuZAorICAgICAgdGhleSBjYW4gYmUgYXJiaXRyYXJpbHkgbmVzdGVkLgorCisgICAgICBTZWUgOnJlZjpgc3VidGVzdHNgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAgICAuLiBtZXRob2Q6OiBkZWJ1ZygpCiAKICAgICAgIFJ1biB0aGUgdGVzdCB3aXRob3V0IGNvbGxlY3RpbmcgdGhlIHJlc3VsdC4gIFRoaXMgYWxsb3dzIGV4Y2VwdGlvbnMgcmFpc2VkCkBAIC04MDYsOCArODgzLDggQEAKIAogCiAKLSAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2hlY2sgdGhhdCBleGNlcHRpb25zIGFuZCB3YXJuaW5ncyBhcmUgcmFpc2VkIHVzaW5nCi0gICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoZSBwcm9kdWN0aW9uIG9mIGV4Y2VwdGlvbnMsIHdhcm5pbmdzIGFuZAorICAgbG9nIG1lc3NhZ2VzIHVzaW5nIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAgICB8IE1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDaGVja3MgdGhhdCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gICAgIHwKQEAgLTgyNCw2ICs5MDEsOSBAQAogICAgfCA6bWV0aDpgYXNzZXJ0V2FybnNSZWdleCh3YXJuLCByLCBmdW4sICphcmdzLCAqKmt3ZHMpICAgIHwgYGBmdW4oKmFyZ3MsICoqa3dkcylgYCByYWlzZXMgKndhcm4qIHwgMy4yICAgICAgICB8CiAgICB8IDxUZXN0Q2FzZS5hc3NlcnRXYXJuc1JlZ2V4PmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgdGhlIG1lc3NhZ2UgbWF0Y2hlcyByZWdleCAqciogICAgfCAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0TG9ncyhsb2dnZXIsIGxldmVsKSAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhlIGBgd2l0aGBgIGJsb2NrIGxvZ3Mgb24gKmxvZ2dlciogIHwgMy40ICAgICAgICB8CisgICB8IDxUZXN0Q2FzZS5hc3NlcnRMb2dzPmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIG1pbmltdW0gKmxldmVsKiAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAgICAuLiBtZXRob2Q6OiBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBjYWxsYWJsZSwgKmFyZ3MsICoqa3dkcykKICAgICAgICAgICAgICAgIGFzc2VydFJhaXNlcyhleGNlcHRpb24sIG1zZz1Ob25lKQpAQCAtOTU0LDYgKzEwMzQsNDcgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgICBBZGRlZCB0aGUgKm1zZyoga2V5d29yZCBhcmd1bWVudCB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGFzc2VydExvZ3MobG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpCisKKyAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHRlc3QgdGhhdCBhdCBsZWFzdCBvbmUgbWVzc2FnZSBpcyBsb2dnZWQgb24KKyAgICAgIHRoZSAqbG9nZ2VyKiBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLCB3aXRoIGF0IGxlYXN0IHRoZSBnaXZlbgorICAgICAgKmxldmVsKi4KKworICAgICAgSWYgZ2l2ZW4sICpsb2dnZXIqIHNob3VsZCBiZSBhIDpjbGFzczpgbG9nZ2luZy5Mb2dnZXJgIG9iamVjdCBvciBhCisgICAgICA6Y2xhc3M6YHN0cmAgZ2l2aW5nIHRoZSBuYW1lIG9mIGEgbG9nZ2VyLiAgVGhlIGRlZmF1bHQgaXMgdGhlIHJvb3QKKyAgICAgIGxvZ2dlciwgd2hpY2ggd2lsbCBjYXRjaCBhbGwgbWVzc2FnZXMuCisKKyAgICAgIElmIGdpdmVuLCAqbGV2ZWwqIHNob3VsZCBiZSBlaXRoZXIgYSBudW1lcmljIGxvZ2dpbmcgbGV2ZWwgb3IKKyAgICAgIGl0cyBzdHJpbmcgZXF1aXZhbGVudCAoZm9yIGV4YW1wbGUgZWl0aGVyIGBgIkVSUk9SImBgIG9yCisgICAgICA6YXR0cjpgbG9nZ2luZy5FUlJPUmApLiAgVGhlIGRlZmF1bHQgaXMgOmF0dHI6YGxvZ2dpbmcuSU5GT2AuCisKKyAgICAgIFRoZSB0ZXN0IHBhc3NlcyBpZiBhdCBsZWFzdCBvbmUgbWVzc2FnZSBlbWl0dGVkIGluc2lkZSB0aGUgYGB3aXRoYGAKKyAgICAgIGJsb2NrIG1hdGNoZXMgdGhlICpsb2dnZXIqIGFuZCAqbGV2ZWwqIGNvbmRpdGlvbnMsIG90aGVyd2lzZSBpdCBmYWlscy4KKworICAgICAgVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY29udGV4dCBtYW5hZ2VyIGlzIGEgcmVjb3JkaW5nIGhlbHBlcgorICAgICAgd2hpY2gga2VlcHMgdHJhY2tzIG9mIHRoZSBtYXRjaGluZyBsb2cgbWVzc2FnZXMuICBJdCBoYXMgdHdvCisgICAgICBhdHRyaWJ1dGVzOgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiByZWNvcmRzCisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YGxvZ2dpbmcuTG9nUmVjb3JkYCBvYmplY3RzIG9mIHRoZSBtYXRjaGluZworICAgICAgICAgbG9nIG1lc3NhZ2VzLgorCisgICAgICAuLiBhdHRyaWJ1dGU6OiBvdXRwdXQKKworICAgICAgICAgQSBsaXN0IG9mIDpjbGFzczpgc3RyYCBvYmplY3RzIHdpdGggdGhlIGZvcm1hdHRlZCBvdXRwdXQgb2YKKyAgICAgICAgIG1hdGNoaW5nIG1lc3NhZ2VzLgorCisgICAgICBFeGFtcGxlOjoKKworICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycsIGxldmVsPSdJTkZPJykgYXMgY206CisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpLmVycm9yKCdzZWNvbmQgbWVzc2FnZScpCisgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWydJTkZPOmZvbzpmaXJzdCBtZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0VSUk9SOmZvby5iYXI6c2Vjb25kIG1lc3NhZ2UnXSkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogICAgVGhlcmUgYXJlIGFsc28gb3RoZXIgbWV0aG9kcyB1c2VkIHRvIHBlcmZvcm0gbW9yZSBzcGVjaWZpYyBjaGVja3MsIHN1Y2ggYXM6CiAKQEAgLTEzOTMsMTUgKzE1MTQsMjQgQEAKIAogICAgICAgVGVzdHMgZ3JvdXBlZCBieSBhIDpjbGFzczpgVGVzdFN1aXRlYCBhcmUgYWx3YXlzIGFjY2Vzc2VkIGJ5IGl0ZXJhdGlvbi4KICAgICAgIFN1YmNsYXNzZXMgY2FuIGxhemlseSBwcm92aWRlIHRlc3RzIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYC4gTm90ZQotICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXliZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBvbiBhIHNpbmdsZSBzdWl0ZQotICAgICAgKGZvciBleGFtcGxlIHdoZW4gY291bnRpbmcgdGVzdHMgb3IgY29tcGFyaW5nIGZvciBlcXVhbGl0eSkKLSAgICAgIHNvIHRoZSB0ZXN0cyByZXR1cm5lZCBtdXN0IGJlIHRoZSBzYW1lIGZvciByZXBlYXRlZCBpdGVyYXRpb25zLgorICAgICAgdGhhdCB0aGlzIG1ldGhvZCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUgKGZvcgorICAgICAgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpIHNvIHRoZSB0ZXN0cworICAgICAgcmV0dXJuZWQgYnkgcmVwZWF0ZWQgaXRlcmF0aW9ucyBiZWZvcmUgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gIG11c3QgYmUgdGhlCisgICAgICBzYW1lIGZvciBlYWNoIGNhbGwgaXRlcmF0aW9uLiBBZnRlciA6bWV0aDpgVGVzdFN1aXRlLnJ1bmAsIGNhbGxlcnMgc2hvdWxkCisgICAgICBub3QgcmVseSBvbiB0aGUgdGVzdHMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QgdW5sZXNzIHRoZSBjYWxsZXIgdXNlcyBhCisgICAgICBzdWJjbGFzcyB0aGF0IG92ZXJyaWRlcyA6bWV0aDpgVGVzdFN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleGAgdG8gcHJlc2VydmUKKyAgICAgIHRlc3QgcmVmZXJlbmNlcy4KIAogICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBhY2Nlc3NlZCB0ZXN0cyBkaXJlY3RseSByYXRoZXIKICAgICAgICAgIHRoYW4gdGhyb3VnaCBpdGVyYXRpb24sIHNvIG92ZXJyaWRpbmcgOm1ldGg6YF9faXRlcl9fYCB3YXNuJ3Qgc3VmZmljaWVudAogICAgICAgICAgZm9yIHByb3ZpZGluZyB0ZXN0cy4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIEluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIDpjbGFzczpgVGVzdFN1aXRlYCBoZWxkIHJlZmVyZW5jZXMgdG8gZWFjaAorICAgICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgYWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLiBTdWJjbGFzc2VzIGNhbiByZXN0b3JlCisgICAgICAgICB0aGF0IGJlaGF2aW9yIGJ5IG92ZXJyaWRpbmcgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgLgorCiAgICBJbiB0aGUgdHlwaWNhbCB1c2FnZSBvZiBhIDpjbGFzczpgVGVzdFN1aXRlYCBvYmplY3QsIHRoZSA6bWV0aDpgcnVuYCBtZXRob2QKICAgIGlzIGludm9rZWQgYnkgYSA6Y2xhc3M6YFRlc3RSdW5uZXJgIHJhdGhlciB0aGFuIGJ5IHRoZSBlbmQtdXNlciB0ZXN0IGhhcm5lc3MuCiAKQEAgLTE1MDAsNyArMTYzMCw5IEBACiAgICAgICBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KIAogICAgICAgSWYgaW1wb3J0aW5nIGEgbW9kdWxlIGZhaWxzLCBmb3IgZXhhbXBsZSBkdWUgdG8gYSBzeW50YXggZXJyb3IsIHRoZW4gdGhpcwotICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuCisgICAgICB3aWxsIGJlIHJlY29yZGVkIGFzIGEgc2luZ2xlIGVycm9yIGFuZCBkaXNjb3Zlcnkgd2lsbCBjb250aW51ZS4gIElmIHRoZQorICAgICAgaW1wb3J0IGZhaWx1cmUgaXMgZHVlIHRvIDpleGM6YFNraXBUZXN0YCBiZWluZyByYWlzZWQsIGl0IHdpbGwgYmUgcmVjb3JkZWQKKyAgICAgIGFzIGEgc2tpcCBpbnN0ZWFkIG9mIGFuIGVycm9yLgogCiAgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCA6ZmlsZTpgX19pbml0X18ucHlgKSBtYXRjaGVzIHRoZQogICAgICAgcGF0dGVybiB0aGVuIHRoZSBwYWNrYWdlIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBgYGxvYWRfdGVzdHNgYApAQCAtMTUxOSw2ICsxNjUxLDE1IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgTW9kdWxlcyB0aGF0IHJhaXNlIDpleGM6YFNraXBUZXN0YCBvbiBpbXBvcnQgYXJlIHJlY29yZGVkIGFzIHNraXBzLAorICAgICAgICAgbm90IGVycm9ycy4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFBhdGhzIGFyZSBzb3J0ZWQgYmVmb3JlIGJlaW5nIGltcG9ydGVkIHRvIGVuc3VyZSBleGVjdXRpb24gb3JkZXIgZm9yIGEKKyAgICAgICAgIGdpdmVuIHRlc3Qgc3VpdGUgaXMgdGhlIHNhbWUgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSdzIG9yZGVyaW5nCisgICAgICAgICBpcyBub3QgZGVwZW5kZW50IG9uIGZpbGUgbmFtZSBsaWtlIGluIGV4dDMvNC4KKwogCiAgICBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgb2YgYSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlciBieQogICAgc3ViY2xhc3Npbmcgb3IgYXNzaWdubWVudCBvbiBhbiBpbnN0YW5jZToKQEAgLTE3MjgsNiArMTg2OSwyMiBAQAogICAgICAgOmF0dHI6YHVuZXhwZWN0ZWRTdWNjZXNzZXNgIGF0dHJpYnV0ZS4KIAogCisgICAuLiBtZXRob2Q6OiBhZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIG91dGNvbWUpCisKKyAgICAgIENhbGxlZCB3aGVuIGEgc3VidGVzdCBmaW5pc2hlcy4gICp0ZXN0KiBpcyB0aGUgdGVzdCBjYXNlCisgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSB0ZXN0IG1ldGhvZC4gICpzdWJ0ZXN0KiBpcyBhIGN1c3RvbQorICAgICAgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgc3VidGVzdC4KKworICAgICAgSWYgKm91dGNvbWUqIGlzIDpjb25zdDpgTm9uZWAsIHRoZSBzdWJ0ZXN0IHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwKKyAgICAgIGl0IGZhaWxlZCB3aXRoIGFuIGV4Y2VwdGlvbiB3aGVyZSAqb3V0Y29tZSogaXMgYSB0dXBsZSBvZiB0aGUgZm9ybQorICAgICAgcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2A6IGBgKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spYGAuCisKKyAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZyB3aGVuIHRoZSBvdXRjb21lIGlzIGEKKyAgICAgIHN1Y2Nlc3MsIGFuZCByZWNvcmRzIHN1YnRlc3QgZmFpbHVyZXMgYXMgbm9ybWFsIGZhaWx1cmVzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbGFzczo6IFRleHRUZXN0UmVzdWx0KHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpCiAKICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOmNsYXNzOmBUZXN0UmVzdWx0YCB1c2VkIGJ5IHRoZQpAQCAtMTgzNyw2ICsxOTk0LDEwIEBACiAgICAgICBUaGUgKnZlcmJvc2l0eSosICpmYWlsZmFzdCosICpjYXRjaGJyZWFrKiwgKmJ1ZmZlcioKICAgICAgIGFuZCAqd2FybmluZ3MqIHBhcmFtZXRlcnMgd2VyZSBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqZGVmYXVsdFRlc3QqIHBhcmFtZXRlciB3YXMgY2hhbmdlZCB0byBhbHNvIGFjY2VwdCBhbiBpdGVyYWJsZSBvZgorICAgICAgdGVzdCBuYW1lcy4KKwogCiBsb2FkX3Rlc3RzIFByb3RvY29sCiAjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAppbmRleCAyNWMxM2JkLi45ZmI1OGY1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKQEAgLTQ2LDYgKzQ2LDEzIEBACiAKICAgICAgIFRoaXMgaXMgdXN1YWxseSBhIHN0cmluZyBleHBsYWluaW5nIHRoZSByZWFzb24gZm9yIHRoaXMgZXJyb3IuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGhlYWRlcnMKKworICAgICAgVGhlIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBmb3IgdGhlIEhUVFAgcmVxdWVzdCB0aGF0IGNhdXNlIHRoZQorICAgICAgOmV4YzpgSFRUUEVycm9yYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGV4Y2VwdGlvbjo6IENvbnRlbnRUb29TaG9ydEVycm9yKG1zZywgY29udGVudCkKIAogICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gdGhlIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QudXJscmV0cmlldmVgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKaW5kZXggMTBhYTI2MC4uYzRkZDdlMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdApAQCAtMjIwLDEwICsyMjAsMTUgQEAKICAgICptZXRob2QqIHNob3VsZCBiZSBhIHN0cmluZyB0aGF0IGluZGljYXRlcyB0aGUgSFRUUCByZXF1ZXN0IG1ldGhvZCB0aGF0CiAgICB3aWxsIGJlIHVzZWQgKGUuZy4gYGAnSEVBRCdgYCkuICBJdHMgdmFsdWUgaXMgc3RvcmVkIGluIHRoZQogICAgOmF0dHI6YH5SZXF1ZXN0Lm1ldGhvZGAgYXR0cmlidXRlIGFuZCBpcyB1c2VkIGJ5IDptZXRoOmBnZXRfbWV0aG9kKClgLgorICAgU3ViY2xhc3NlcyBtYXkgaW5kaWNhdGUgYSBkZWZhdWx0IG1ldGhvZCBieSBzZXR0aW5nIHRoZQorICAgOmF0dHI6YH5SZXF1ZXN0Lm1ldGhvZGAgYXR0cmlidXRlIGluIHRoZSBjbGFzcyBpdHNlbGYuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICA6YXR0cjpgUmVxdWVzdC5tZXRob2RgIGFyZ3VtZW50IGlzIGFkZGVkIHRvIHRoZSBSZXF1ZXN0IGNsYXNzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgRGVmYXVsdCA6YXR0cjpgUmVxdWVzdC5tZXRob2RgIG1heSBiZSBpbmRpY2F0ZWQgYXQgdGhlIGNsYXNzIGxldmVsLgorCiAKIC4uIGNsYXNzOjogT3BlbmVyRGlyZWN0b3IoKQogCkBAIC0zNTYsNiArMzYxLDExIEBACiAKICAgIE9wZW4gbG9jYWwgZmlsZXMuCiAKKy4uIGNsYXNzOjogRGF0YUhhbmRsZXIoKQorCisgICBPcGVuIGRhdGEgVVJMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIC4uIGNsYXNzOjogRlRQSGFuZGxlcigpCiAKQEAgLTM5MSw2ICs0MDEsMTIgQEAKIAogICAgVGhlIG9yaWdpbmFsIFVSTCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorCisgICBSZXF1ZXN0LmZ1bGxfdXJsIGlzIGEgcHJvcGVydHkgd2l0aCBzZXR0ZXIsIGdldHRlciBhbmQgYSBkZWxldGVyLiBHZXR0aW5nCisgICA6YXR0cjpgflJlcXVlc3QuZnVsbF91cmxgIHJldHVybnMgdGhlIG9yaWdpbmFsIHJlcXVlc3QgVVJMIHdpdGggdGhlCisgICBmcmFnbWVudCwgaWYgaXQgd2FzIHByZXNlbnQuCisKIC4uIGF0dHJpYnV0ZTo6IFJlcXVlc3QudHlwZQogCiAgICBUaGUgVVJJIHNjaGVtZS4KQEAgLTQxMyw2ICs0MjksMTAgQEAKIAogICAgVGhlIGVudGl0eSBib2R5IGZvciB0aGUgcmVxdWVzdCwgb3IgTm9uZSBpZiBub3Qgc3BlY2lmaWVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdpbmcgdmFsdWUgb2YgOmF0dHI6YFJlcXVlc3QuZGF0YWAgbm93IGRlbGV0ZXMgIkNvbnRlbnQtTGVuZ3RoIgorICAgICAgaGVhZGVyIGlmIGl0IHdhcyBwcmV2aW91c2x5IHNldCBvciBjYWxjdWxhdGVkLgorCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnVudmVyaWZpYWJsZQogCiAgICBib29sZWFuLCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVxdWVzdCBpcyB1bnZlcmlmaWFibGUgYXMgZGVmaW5lZApAQCAtNDYxLDEwICs0ODEsMjIgQEAKICAgIHVucmVkaXJlY3RlZCkuCiAKIAorLi4gbWV0aG9kOjogUmVxdWVzdC5yZW1vdmVfaGVhZGVyKGhlYWRlcikKKworICAgUmVtb3ZlIG5hbWVkIGhlYWRlciBmcm9tIHRoZSByZXF1ZXN0IGluc3RhbmNlIChib3RoIGZyb20gcmVndWxhciBhbmQKKyAgIHVucmVkaXJlY3RlZCBoZWFkZXJzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfZnVsbF91cmwoKQogCiAgICBSZXR1cm4gdGhlIFVSTCBnaXZlbiBpbiB0aGUgY29uc3RydWN0b3IuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisKKyAgIFJldHVybnMgOmF0dHI6YFJlcXVlc3QuZnVsbF91cmxgCisKIAogLi4gbWV0aG9kOjogUmVxdWVzdC5zZXRfcHJveHkoaG9zdCwgdHlwZSkKIApAQCAtNDczLDU0ICs1MDUsNiBAQAogICAgVVJMIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAogCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmFkZF9kYXRhKGRhdGEpCi0KLSAgIFNldCB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBkYXRhIHRvICpkYXRhKi4gIFRoaXMgaXMgaWdub3JlZCBieSBhbGwgaGFuZGxlcnMgZXhjZXB0Ci0gICBIVFRQIGhhbmRsZXJzIC0tLSBhbmQgdGhlcmUgaXQgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcsIGFuZCB3aWxsIGNoYW5nZSB0aGUKLSAgIHJlcXVlc3QgdG8gYmUgYGBQT1NUYGAgcmF0aGVyIHRoYW4gYGBHRVRgYC4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5oYXNfZGF0YSgpCi0KLSAgIFJldHVybiB3aGV0aGVyIHRoZSBpbnN0YW5jZSBoYXMgYSBub24tXCBgYE5vbmVgYCBkYXRhLiBEZXByZWNhdGVkIGluIDMuMywKLSAgIHVzZSA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2RhdGEoKQotCi0gICBSZXR1cm4gdGhlIGluc3RhbmNlJ3MgZGF0YS4gIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF90eXBlKCkKLQotICAgUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBVUkwgLS0tIGFsc28ga25vd24gYXMgdGhlIHNjaGVtZS4gIERlcHJlY2F0ZWQgaW4gMy4zLAotICAgdXNlIDphdHRyOmBSZXF1ZXN0LnR5cGVgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfaG9zdCgpCi0KLSAgIFJldHVybiB0aGUgaG9zdCB0byB3aGljaCBhIGNvbm5lY3Rpb24gd2lsbCBiZSBtYWRlLiBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC5ob3N0YC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X3NlbGVjdG9yKCkKLQotICAgUmV0dXJuIHRoZSBzZWxlY3RvciAtLS0gdGhlIHBhcnQgb2YgdGhlIFVSTCB0aGF0IGlzIHNlbnQgdG8gdGhlIHNlcnZlci4KLSAgIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UgOmF0dHI6YFJlcXVlc3Quc2VsZWN0b3JgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KIC4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X2hlYWRlcihoZWFkZXJfbmFtZSwgZGVmYXVsdD1Ob25lKQogCiAgICBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBnaXZlbiBoZWFkZXIuIElmIHRoZSBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHJldHVybgpAQCAtNTMxLDI2ICs1MTUsMTAgQEAKIAogICAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgKGhlYWRlcl9uYW1lLCBoZWFkZXJfdmFsdWUpIG9mIHRoZSBSZXF1ZXN0IGhlYWRlcnMuCiAKLQotLi4gbWV0aG9kOjogUmVxdWVzdC5zZXRfcHJveHkoaG9zdCwgdHlwZSkKLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0KCkKLQotICAgUmV0dXJuIHRoZSByZXF1ZXN0LWhvc3Qgb2YgdGhlIG9yaWdpbiB0cmFuc2FjdGlvbiwgYXMgZGVmaW5lZCBieQotICAgOnJmYzpgMjk2NWAuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yLgotICAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5vcmlnaW5fcmVxX2hvc3RgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5pc191bnZlcmlmaWFibGUoKQotCi0gICBSZXR1cm4gd2hldGhlciB0aGUgcmVxdWVzdCBpcyB1bnZlcmlmaWFibGUsIGFzIGRlZmluZWQgYnkgUkZDIDI5NjUuIFNlZSB0aGUKLSAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGNvbnN0cnVjdG9yLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QudW52ZXJpZmlhYmxlYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICBSZXF1ZXN0IG1ldGhvZHMgYWRkX2RhdGEsIGhhc19kYXRhLCBnZXRfZGF0YSwgZ2V0X3R5cGUsIGdldF9ob3N0LAorICBnZXRfc2VsZWN0b3IsIGdldF9vcmlnaW5fcmVxX2hvc3QgYW5kIGlzX3VudmVyaWZpYWJsZSBkZXByZWNhdGVkIHNpbmNlIDMuMworICBoYXZlIGJlZW4gcmVtb3ZlZC4KIAogLi4gX29wZW5lci1kaXJlY3Rvci1vYmplY3RzOgogCkBAIC05ODMsNiArOTUxLDIxIEBACiAgICAgICBob3N0bmFtZSBpcyBnaXZlbiwgYW4gOmV4YzpgfnVybGxpYi5lcnJvci5VUkxFcnJvcmAgaXMgcmFpc2VkLgogCiAKKy4uIF9kYXRhLWhhbmRsZXItb2JqZWN0czoKKworRGF0YUhhbmRsZXIgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBEYXRhSGFuZGxlci5kYXRhX29wZW4ocmVxKQorCisgICBSZWFkIGEgZGF0YSBVUkwuIFRoaXMga2luZCBvZiBVUkwgY29udGFpbnMgdGhlIGNvbnRlbnQgZW5jb2RlZCBpbiB0aGUgVVJMCisgICBpdHNlbGYuIFRoZSBkYXRhIFVSTCBzeW50YXggaXMgc3BlY2lmaWVkIGluIDpyZmM6YDIzOTdgLiBUaGlzIGltcGxlbWVudGF0aW9uCisgICBpZ25vcmVzIHdoaXRlIHNwYWNlcyBpbiBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTHMgc28gdGhlIFVSTCBtYXkgYmUgd3JhcHBlZAorICAgaW4gd2hhdGV2ZXIgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4gQnV0IGV2ZW4gdGhvdWdoIHNvbWUgYnJvd3NlcnMgZG9uJ3QKKyAgIG1pbmQgYWJvdXQgYSBtaXNzaW5nIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiBhIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMLCB0aGlzCisgICBpbXBsZW1lbnRhdGlvbiB3aWxsIHJhaXNlIGFuIDpleGM6YFZhbHVlRXJyb3JgIGluIHRoYXQgY2FzZS4KKworCiAuLiBfZnRwLWhhbmRsZXItb2JqZWN0czoKIAogRlRQSGFuZGxlciBPYmplY3RzCkBAIC0xMzk4LDcgKzEzODEsOSBAQAogICAgICBwYWlyOiBGVFA7IHByb3RvY29sCiAKICogQ3VycmVudGx5LCBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IEhUVFAgKHZlcnNpb25zIDAuOSBhbmQKLSAgMS4wKSwgRlRQLCBhbmQgbG9jYWwgZmlsZXMuCisgIDEuMCksIEZUUCwgbG9jYWwgZmlsZXMsIGFuZCBkYXRhIFVSTHMuCisKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBVUkxzLgogCiAqIFRoZSBjYWNoaW5nIGZlYXR1cmUgb2YgOmZ1bmM6YHVybHJldHJpZXZlYCBoYXMgYmVlbiBkaXNhYmxlZCB1bnRpbCBzb21lb25lCiAgIGZpbmRzIHRoZSB0aW1lIHRvIGhhY2sgcHJvcGVyIHByb2Nlc3Npbmcgb2YgRXhwaXJhdGlvbiB0aW1lIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS92ZW52LnJzdCBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CmluZGV4IDk2Y2EyZjUuLjQ2MWM5ZTEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CkBAIC04NSw3ICs4NSw4IEBACiBtZWNoYW5pc21zIGZvciB0aGlyZC1wYXJ0eSB2aXJ0dWFsIGVudmlyb25tZW50IGNyZWF0b3JzIHRvIGN1c3RvbWl6ZSBlbnZpcm9ubWVudAogY3JlYXRpb24gYWNjb3JkaW5nIHRvIHRoZWlyIG5lZWRzLCB0aGUgOmNsYXNzOmBFbnZCdWlsZGVyYCBjbGFzcy4KIAotLi4gY2xhc3M6OiBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UpCisuLiBjbGFzczo6IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBcCisgICAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKQogCiAgICAgVGhlIDpjbGFzczpgRW52QnVpbGRlcmAgY2xhc3MgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGtleXdvcmQgYXJndW1lbnRzIG9uCiAgICAgaW5zdGFudGlhdGlvbjoKQEAgLTkzLDggKzk0LDggQEAKICAgICAqIGBgc3lzdGVtX3NpdGVfcGFja2FnZXNgYCAtLSBhIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB0aGF0IHRoZSBzeXN0ZW0gUHl0aG9uCiAgICAgICBzaXRlLXBhY2thZ2VzIHNob3VsZCBiZSBhdmFpbGFibGUgdG8gdGhlIGVudmlyb25tZW50IChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgogCi0gICAgKiBgYGNsZWFyYGAgLS0gYSBCb29sZWFuIHZhbHVlIHdoaWNoLCBpZiB0cnVlLCB3aWxsIGRlbGV0ZSBhbnkgZXhpc3RpbmcgdGFyZ2V0Ci0gICAgICBkaXJlY3RvcnkgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbiAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KKyAgICAqIGBgY2xlYXJgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIHdpbGwgZGVsZXRlIHRoZSBjb250ZW50cyBvZgorICAgICAgYW55IGV4aXN0aW5nIHRhcmdldCBkaXJlY3RvcnksIGJlZm9yZSBjcmVhdGluZyB0aGUgZW52aXJvbm1lbnQuCiAKICAgICAqIGBgc3ltbGlua3NgYCAtLSBhIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGF0dGVtcHQgdG8gc3ltbGluayB0aGUKICAgICAgIFB5dGhvbiBiaW5hcnkgKGFuZCBhbnkgbmVjZXNzYXJ5IERMTHMgb3Igb3RoZXIgYmluYXJpZXMsCkBAIC0xMDUsNiArMTA2LDExIEBACiAgICAgICBlbnZpcm9ubWVudCB3aXRoIHRoZSBydW5uaW5nIFB5dGhvbiAtIGZvciB1c2Ugd2hlbiB0aGF0IFB5dGhvbiBoYXMgYmVlbgogICAgICAgdXBncmFkZWQgaW4tcGxhY2UgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKKyAgICAqIGBgd2l0aF9waXBgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIGVuc3VyZXMgcGlwIGlzCisgICAgICBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQKKworICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgQWRkZWQgdGhlIGBgd2l0aF9waXBgYCBwYXJhbWV0ZXIKIAogCiAgICAgQ3JlYXRvcnMgb2YgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCB0b29scyB3aWxsIGJlIGZyZWUgdG8gdXNlIHRoZQpAQCAtMTg4LDYgKzE5NCw5IEBACiAgICAgICAgICogYGBfX1ZFTlZfTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSAoZmluYWwgcGF0aAogICAgICAgICAgIHNlZ21lbnQgb2YgZW52aXJvbm1lbnQgZGlyZWN0b3J5KS4KIAorICAgICAgICAqIGBgX19WRU5WX1BST01QVF9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJvbXB0ICh0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICBuYW1lIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgYW5kIHdpdGggYSBmb2xsb3dpbmcgc3BhY2UpCisKICAgICAgICAgKiBgYF9fVkVOVl9CSU5fTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYmluIGRpcmVjdG9yeQogICAgICAgICAgIChlaXRoZXIgYGBiaW5gYCBvciBgYFNjcmlwdHNgYCkuCiAKQEAgLTE5OSwxMSArMjA4LDE1IEBACiAKIFRoZXJlIGlzIGFsc28gYSBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb246CiAKLS4uIGZ1bmN0aW9uOjogY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIENyZWF0ZSBhbiA6Y2xhc3M6YEVudkJ1aWxkZXJgIHdpdGggdGhlIGdpdmVuIGtleXdvcmQgYXJndW1lbnRzLCBhbmQgY2FsbCBpdHMKICAgICA6bWV0aDpgfkVudkJ1aWxkZXIuY3JlYXRlYCBtZXRob2Qgd2l0aCB0aGUgKmVudl9kaXIqIGFyZ3VtZW50LgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBBZGRlZCB0aGUgYGB3aXRoX3BpcGBgIHBhcmFtZXRlcgorCiBBbiBleGFtcGxlIG9mIGV4dGVuZGluZyBgYEVudkJ1aWxkZXJgYAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCBhZmFmYjQ1Li5jMzJlMWZjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtMTksMjYgKzE5LDMyIEBACiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZSwgbW9kZT1Ob25lKQogCiAgICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsIG9wZW4gdGhlIGZpbGUgYnkgdGhhdCBuYW1lLCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgYQotICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmUgYW55IG9mCisgICBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZToKIAotICAgYGAncidgYCwgYGAncmInYGAKKyAgIGBgJ3JiJ2BgCiAgICAgICBSZWFkIG9ubHkgbW9kZS4KIAotICAgYGAndydgYCwgYGAnd2InYGAKKyAgIGBgJ3diJ2BgCiAgICAgICBXcml0ZSBvbmx5IG1vZGUuCiAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIFdBViBmaWxlcy4KIAotICAgQSAqbW9kZSogb2YgYGAncidgYCBvciBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYQotICAgKm1vZGUqIG9mIGBgJ3cnYGAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYKLSAgICptb2RlKiBpcyBvbWl0dGVkIGFuZCBhIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYAotICAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1vZGUqICh0aGUgYGAnYidgYCBmbGFnIGlzIHN0aWxsIGFkZGVkIGlmCi0gICBuZWNlc3NhcnkpLgorICAgQSAqbW9kZSogb2YgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEgKm1vZGUqIG9mCisgICBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZiAqbW9kZSogaXMgb21pdHRlZCBhbmQgYQorICAgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQKKyAgIHZhbHVlIGZvciAqbW9kZSouCiAKICAgIElmIHlvdSBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdCwgdGhlIHdhdmUgb2JqZWN0IHdpbGwgbm90IGNsb3NlIGl0IHdoZW4gaXRzCiAgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbG9zZQogICAgdGhlIGZpbGUgb2JqZWN0LgogCisgICBUaGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBtYXkgYmUgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBXaGVuCisgICB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGNvbXBsZXRlcywgdGhlIDptZXRoOmBXYXZlX3JlYWQuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV9yZWFkLmNsb3NlPmAgb3IgOm1ldGg6YFdhdmVfd3JpdGUuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV93cml0ZS5jbG9zZSgpPmAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCiAKIC4uIGZ1bmN0aW9uOjogb3BlbmZwKGZpbGUsIG1vZGUpCiAKQEAgLTk4LDggKzEwNCw5IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0xNDksNyArMTU2LDggQEAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuY2xvc2UoKQogCiAgICBNYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QsIGFuZCBjbG9zZSB0aGUgZmlsZSBpZiBpdCB3YXMgb3BlbmVkIGJ5Ci0gICA6bW9kOmB3YXZlYC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIG9iamVjdCBjb2xsZWN0aW9uLgorICAgOm1vZDpgd2F2ZWAuICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBvYmplY3QgY29sbGVjdGlvbi4gQ2FuIHJhaXNlIGFuCisgICBleGNlcHRpb24gaWYgKm5mcmFtZXMqIGlzIG5vdCBjb3JyZWN0IGFuZCBhIGZpbGUgaXMgbm90IHNlZWthYmxlLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmNoYW5uZWxzKG4pCkBAIC0yMDAsMTAgKzIwOCwxNyBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcyBhcmUgbm93IGFjY2VwdGVkLgorCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUud3JpdGVmcmFtZXMoZGF0YSkKIAotICAgV3JpdGUgYXVkaW8gZnJhbWVzIGFuZCBtYWtlIHN1cmUgKm5mcmFtZXMqIGlzIGNvcnJlY3QuCisgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4gQ2FuIHJhaXNlIGFuCisgICBleGNlcHRpb24gaWYgYSBmaWxlIGlzIG5vdCBzZWVrYWJsZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQuCiAKIAogTm90ZSB0aGF0IGl0IGlzIGludmFsaWQgdG8gc2V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyIGNhbGxpbmcgOm1ldGg6YHdyaXRlZnJhbWVzYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAppbmRleCAyMjRmNDQyLi5lODRhYzJiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdApAQCAtNTEsMTAgKzUxLDE2IEBACiBidXQga2VlcHMgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBlbGVtZW50cywganVzdCBsaWtlIGEKIDpjbGFzczpgV2Vha0tleURpY3Rpb25hcnlgIGRvZXMuCiAKLU1vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMgaXMgYWxsCi10aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8gY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcwotZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSB1c2VkIGJ5IHRoZSB3ZWFrIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb25zCi1pcyBleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCis6Y2xhc3M6YGZpbmFsaXplYCBwcm92aWRlcyBhIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvIHJlZ2lzdGVyIGEKK2NsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorVGhpcyBpcyBzaW1wbGVyIHRvIHVzZSB0aGFuIHNldHRpbmcgdXAgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBhIHJhdword2VhayByZWZlcmVuY2UsIHNpbmNlIHRoZSBtb2R1bGUgYXV0b21hdGljYWxseSBlbnN1cmVzIHRoYXQgdGhlIGZpbmFsaXplcgorcmVtYWlucyBhbGl2ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGNvbGxlY3RlZC4KKworTW9zdCBwcm9ncmFtcyBzaG91bGQgZmluZCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSB3ZWFrIGNvbnRhaW5lciB0eXBlcworb3IgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgYWxsIHRoZXkgbmVlZCAtLSBpdCdzIG5vdCB1c3VhbGx5IG5lY2Vzc2FyeSB0bworY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcyBkaXJlY3RseS4gIFRoZSBsb3ctbGV2ZWwgbWFjaGluZXJ5IGlzCitleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCiAKIE5vdCBhbGwgb2JqZWN0cyBjYW4gYmUgd2Vha2x5IHJlZmVyZW5jZWQ7IHRob3NlIG9iamVjdHMgd2hpY2ggY2FuIGluY2x1ZGUgY2xhc3MKIGluc3RhbmNlcywgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIChidXQgbm90IGluIEMpLCBpbnN0YW5jZSBtZXRob2RzLCBzZXRzLApAQCAtMTExLDYgKzExNywyNCBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3NhYmxlIHR5cGUgcmF0aGVyIHRoYW4gYSBmYWN0b3J5IGZ1bmN0aW9uLgogCisgICAuLiBhdHRyaWJ1dGU6OiBfX2NhbGxiYWNrX18KKworICAgICAgVGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIHJldHVybnMgdGhlIGNhbGxiYWNrIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICAgICAgd2Vha3JlZi4gIElmIHRoZXJlIGlzIG5vIGNhbGxiYWNrIG9yIGlmIHRoZSByZWZlcmVudCBvZiB0aGUgd2Vha3JlZiBpcworICAgICAgbm8gbG9uZ2VyIGFsaXZlIHRoZW4gdGhpcyBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGBgTm9uZWBgLgorCisgICAuLiBub3RlOjoKKworICAgICAgTGlrZSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcywgd2VhayByZWZlcmVuY2UgY2FsbGJhY2tzIGNhbiBiZQorICAgICAgY2FsbGVkIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93biB3aGVuIG1vZHVsZSBnbG9iYWxzIGhhdmUgYmVlbgorICAgICAgb3ZlcndyaXR0ZW4gd2l0aCA6Y29uc3Q6YE5vbmVgLiAgVGhpcyBjYW4gbWFrZSB3cml0aW5nIHJvYnVzdAorICAgICAgd2VhayByZWZlcmVuY2UgY2FsbGJhY2tzIGEgY2hhbGxlbmdlLiAgQ2FsbGJhY2tzIHJlZ2lzdGVyZWQKKyAgICAgIHVzaW5nIDpjbGFzczpgZmluYWxpemVgIGRvIG5vdCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgaXNzdWUKKyAgICAgIGJlY2F1c2UgdGhleSB3aWxsIG5vdCBiZSBydW4gYWZ0ZXIgbW9kdWxlIHRlYXJkb3duIGhhcyBiZWd1bi4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSA6YXR0cjpgX19jYWxsYmFja19fYCBhdHRyaWJ1dGUuCisKIAogLi4gZnVuY3Rpb246OiBwcm94eShvYmplY3RbLCBjYWxsYmFja10pCiAKQEAgLTE5Miw2ICsyMTYsOTggQEAKICAgIGRpc2NhcmRlZCB3aGVuIG5vIHN0cm9uZyByZWZlcmVuY2UgdG8gaXQgZXhpc3RzIGFueSBtb3JlLgogCiAKKy4uIGNsYXNzOjogV2Vha01ldGhvZChtZXRob2QpCisKKyAgIEEgY3VzdG9tIDpjbGFzczpgcmVmYCBzdWJjbGFzcyB3aGljaCBzaW11bGF0ZXMgYSB3ZWFrIHJlZmVyZW5jZSB0byBhIGJvdW5kCisgICBtZXRob2QgKGkuZS4sIGEgbWV0aG9kIGRlZmluZWQgb24gYSBjbGFzcyBhbmQgbG9va2VkIHVwIG9uIGFuIGluc3RhbmNlKS4KKyAgIFNpbmNlIGEgYm91bmQgbWV0aG9kIGlzIGVwaGVtZXJhbCwgYSBzdGFuZGFyZCB3ZWFrIHJlZmVyZW5jZSBjYW5ub3Qga2VlcAorICAgaG9sZCBvZiBpdC4gIDpjbGFzczpgV2Vha01ldGhvZGAgaGFzIHNwZWNpYWwgY29kZSB0byByZWNyZWF0ZSB0aGUgYm91bmQKKyAgIG1ldGhvZCB1bnRpbCBlaXRoZXIgdGhlIG9iamVjdCBvciB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZGllczo6CisKKyAgICAgID4+PiBjbGFzcyBDOgorICAgICAgLi4uICAgICBkZWYgbWV0aG9kKHNlbGYpOgorICAgICAgLi4uICAgICAgICAgcHJpbnQoIm1ldGhvZCBjYWxsZWQhIikKKyAgICAgIC4uLgorICAgICAgPj4+IGMgPSBDKCkKKyAgICAgID4+PiByID0gd2Vha3JlZi5yZWYoYy5tZXRob2QpCisgICAgICA+Pj4gcigpCisgICAgICA+Pj4gciA9IHdlYWtyZWYuV2Vha01ldGhvZChjLm1ldGhvZCkKKyAgICAgID4+PiByKCkKKyAgICAgIDxib3VuZCBtZXRob2QgQy5tZXRob2Qgb2YgPF9fbWFpbl9fLkMgb2JqZWN0IGF0IDB4N2ZjODU5ODMwMjIwPj4KKyAgICAgID4+PiByKCkoKQorICAgICAgbWV0aG9kIGNhbGxlZCEKKyAgICAgID4+PiBkZWwgYworICAgICAgPj4+IGdjLmNvbGxlY3QoKQorICAgICAgMAorICAgICAgPj4+IHIoKQorICAgICAgPj4+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjbGFzczo6IGZpbmFsaXplKG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKQorCisgICBSZXR1cm4gYSBjYWxsYWJsZSBmaW5hbGl6ZXIgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gKm9iaioKKyAgIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBVbmxpa2UgYW4gb3JkaW5hcnkgd2VhayByZWZlcmVuY2UsIGEgZmluYWxpemVyIGlzCisgICB3aWxsIGFsd2F5cyBzdXJ2aXZlIHVudGlsIHRoZSByZWZlcmVuY2Ugb2JqZWN0IGlzIGNvbGxlY3RlZCwgZ3JlYXRseQorICAgc2ltcGxpZnlpbmcgbGlmZWN5Y2xlIG1hbmFnZW1lbnQuCisKKyAgIEEgZmluYWxpemVyIGlzIGNvbnNpZGVyZWQgKmFsaXZlKiB1bnRpbCBpdCBpcyBjYWxsZWQgKGVpdGhlciBleHBsaWNpdGx5CisgICBvciBhdCBnYXJiYWdlIGNvbGxlY3Rpb24pLCBhbmQgYWZ0ZXIgdGhhdCBpdCBpcyAqZGVhZCouICBDYWxsaW5nIGEgbGl2ZQorICAgZmluYWxpemVyIHJldHVybnMgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGBgZnVuYygqYXJnLCAqKmt3YXJncylgYCwKKyAgIHdoZXJlYXMgY2FsbGluZyBhIGRlYWQgZmluYWxpemVyIHJldHVybnMgOmNvbnN0OmBOb25lYC4KKworICAgRXhjZXB0aW9ucyByYWlzZWQgYnkgZmluYWxpemVyIGNhbGxiYWNrcyBkdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICB3aWxsIGJlIHNob3duIG9uIHRoZSBzdGFuZGFyZCBlcnJvciBvdXRwdXQsIGJ1dCBjYW5ub3QgYmUKKyAgIHByb3BhZ2F0ZWQuICBUaGV5IGFyZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBleGNlcHRpb25zIHJhaXNlZAorICAgZnJvbSBhbiBvYmplY3QncyA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIG9yIGEgd2VhayByZWZlcmVuY2UncworICAgY2FsbGJhY2suCisKKyAgIFdoZW4gdGhlIHByb2dyYW0gZXhpdHMsIGVhY2ggcmVtYWluaW5nIGxpdmUgZmluYWxpemVyIGlzIGNhbGxlZAorICAgdW5sZXNzIGl0cyA6YXR0cjpgYXRleGl0YCBhdHRyaWJ1dGUgaGFzIGJlZW4gc2V0IHRvIGZhbHNlLiAgVGhleQorICAgYXJlIGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyIG9mIGNyZWF0aW9uLgorCisgICBBIGZpbmFsaXplciB3aWxsIG5ldmVyIGludm9rZSBpdHMgY2FsbGJhY2sgZHVyaW5nIHRoZSBsYXRlciBwYXJ0IG9mCisgICB0aGUgaW50ZXJwcmV0ZXIgc2h1dGRvd24gd2hlbiBtb2R1bGUgZ2xvYmFscyBhcmUgbGlhYmxlIHRvIGhhdmUKKyAgIGJlZW4gcmVwbGFjZWQgYnkgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogX19jYWxsX18oKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiBtYXJrIGl0IGFzIGRlYWQgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mCisgICAgICBjYWxsaW5nIGBgZnVuYygqYXJncywgKiprd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybgorICAgICAgOmNvbnN0OmBOb25lYC4KKworICAgLi4gbWV0aG9kOjogZGV0YWNoKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gbWFyayBpdCBhcyBkZWFkIGFuZCByZXR1cm4gdGhlIHR1cGxlCisgICAgICBgYChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBwZWVrKCkKKworICAgICAgSWYgKnNlbGYqIGlzIGFsaXZlIHRoZW4gcmV0dXJuIHRoZSB0dXBsZSBgYChvYmosIGZ1bmMsIGFyZ3MsCisgICAgICBrd2FyZ3MpYGAuICBJZiAqc2VsZiogaXMgZGVhZCB0aGVuIHJldHVybiA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBhbGl2ZQorCisgICAgICBQcm9wZXJ0eSB3aGljaCBpcyB0cnVlIGlmIHRoZSBmaW5hbGl6ZXIgaXMgYWxpdmUsIGZhbHNlIG90aGVyd2lzZS4KKworICAgLi4gYXR0cmlidXRlOjogYXRleGl0CisKKyAgICAgIEEgd3JpdGFibGUgYm9vbGVhbiBwcm9wZXJ0eSB3aGljaCBieSBkZWZhdWx0IGlzIHRydWUuICBXaGVuIHRoZQorICAgICAgcHJvZ3JhbSBleGl0cywgaXQgY2FsbHMgYWxsIHJlbWFpbmluZyBsaXZlIGZpbmFsaXplcnMgZm9yIHdoaWNoCisgICAgICA6YXR0cjpgLmF0ZXhpdGAgaXMgdHJ1ZS4gIFRoZXkgYXJlIGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyIG9mCisgICAgICBjcmVhdGlvbi4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIEl0IGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCAqZnVuYyosICphcmdzKiBhbmQgKmt3YXJncyogZG8KKyAgICAgIG5vdCBvd24gYW55IHJlZmVyZW5jZXMgdG8gKm9iaiosIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LAorICAgICAgc2luY2Ugb3RoZXJ3aXNlICpvYmoqIHdpbGwgbmV2ZXIgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuICBJbgorICAgICAgcGFydGljdWxhciwgKmZ1bmMqIHNob3VsZCBub3QgYmUgYSBib3VuZCBtZXRob2Qgb2YgKm9iaiouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGRhdGE6OiBSZWZlcmVuY2VUeXBlCiAKICAgIFRoZSB0eXBlIG9iamVjdCBmb3Igd2VhayByZWZlcmVuY2VzIG9iamVjdHMuCkBAIC0yMzIsOCArMzQ4LDkgQEAKIFdlYWsgUmVmZXJlbmNlIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2VhayByZWZlcmVuY2Ugb2JqZWN0cyBoYXZlIG5vIGF0dHJpYnV0ZXMgb3IgbWV0aG9kcywgYnV0IGRvIGFsbG93IHRoZSByZWZlcmVudAotdG8gYmUgb2J0YWluZWQsIGlmIGl0IHN0aWxsIGV4aXN0cywgYnkgY2FsbGluZyBpdDoKK1dlYWsgcmVmZXJlbmNlIG9iamVjdHMgaGF2ZSBubyBtZXRob2RzIGFuZCBubyBhdHRyaWJ1dGVzIGJlc2lkZXMKKzphdHRyOmByZWYuX19jYWxsYmFja19fYC4gQSB3ZWFrIHJlZmVyZW5jZSBvYmplY3QgYWxsb3dzIHRoZSByZWZlcmVudCB0byBiZQorb2J0YWluZWQsIGlmIGl0IHN0aWxsIGV4aXN0cywgYnkgY2FsbGluZyBpdDoKIAogICAgPj4+IGltcG9ydCB3ZWFrcmVmCiAgICA+Pj4gY2xhc3MgT2JqZWN0OgpAQCAtMzI2LDMgKzQ0MywxNDAgQEAKICAgIGRlZiBpZDJvYmoob2lkKToKICAgICAgICByZXR1cm4gX2lkMm9ial9kaWN0W29pZF0KIAorCisuLiBfZmluYWxpemUtZXhhbXBsZXM6CisKK0ZpbmFsaXplciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbWFpbiBiZW5lZml0IG9mIHVzaW5nIDpjbGFzczpgZmluYWxpemVgIGlzIHRoYXQgaXQgbWFrZXMgaXQgc2ltcGxlCit0byByZWdpc3RlciBhIGNhbGxiYWNrIHdpdGhvdXQgbmVlZGluZyB0byBwcmVzZXJ2ZSB0aGUgcmV0dXJuZWQgZmluYWxpemVyCitvYmplY3QuICBGb3IgaW5zdGFuY2UKKworICAgID4+PiBpbXBvcnQgd2Vha3JlZgorICAgID4+PiBjbGFzcyBPYmplY3Q6CisgICAgLi4uICAgICBwYXNzCisgICAgLi4uCisgICAgPj4+IGtlbm55ID0gT2JqZWN0KCkKKyAgICA+Pj4gd2Vha3JlZi5maW5hbGl6ZShrZW5ueSwgcHJpbnQsICJZb3Uga2lsbGVkIEtlbm55ISIpICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICA8ZmluYWxpemUgb2JqZWN0IGF0IC4uLjsgZm9yICdPYmplY3QnIGF0IC4uLj4KKyAgICA+Pj4gZGVsIGtlbm55CisgICAgWW91IGtpbGxlZCBLZW5ueSEKKworVGhlIGZpbmFsaXplciBjYW4gYmUgY2FsbGVkIGRpcmVjdGx5IGFzIHdlbGwuICBIb3dldmVyIHRoZSBmaW5hbGl6ZXIKK3dpbGwgaW52b2tlIHRoZSBjYWxsYmFjayBhdCBtb3N0IG9uY2UuCisKKyAgICA+Pj4gZGVmIGNhbGxiYWNrKHgsIHksIHopOgorICAgIC4uLiAgICAgcHJpbnQoIkNBTExCQUNLIikKKyAgICAuLi4gICAgIHJldHVybiB4ICsgeSArIHoKKyAgICAuLi4KKyAgICA+Pj4gb2JqID0gT2JqZWN0KCkKKyAgICA+Pj4gZiA9IHdlYWtyZWYuZmluYWxpemUob2JqLCBjYWxsYmFjaywgMSwgMiwgej0zKQorICAgID4+PiBhc3NlcnQgZi5hbGl2ZQorICAgID4+PiBhc3NlcnQgZigpID09IDYKKyAgICBDQUxMQkFDSworICAgID4+PiBhc3NlcnQgbm90IGYuYWxpdmUKKyAgICA+Pj4gZigpICAgICAgICAgICAgICAgICAgICAgIyBjYWxsYmFjayBub3QgY2FsbGVkIGJlY2F1c2UgZmluYWxpemVyIGRlYWQKKyAgICA+Pj4gZGVsIG9iaiAgICAgICAgICAgICAgICAgIyBjYWxsYmFjayBub3QgY2FsbGVkIGJlY2F1c2UgZmluYWxpemVyIGRlYWQKKworWW91IGNhbiB1bnJlZ2lzdGVyIGEgZmluYWxpemVyIHVzaW5nIGl0cyA6bWV0aDpgfmZpbmFsaXplLmRldGFjaGAKK21ldGhvZC4gIFRoaXMga2lsbHMgdGhlIGZpbmFsaXplciBhbmQgcmV0dXJucyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0bwordGhlIGNvbnN0cnVjdG9yIHdoZW4gaXQgd2FzIGNyZWF0ZWQuCisKKyAgICA+Pj4gb2JqID0gT2JqZWN0KCkKKyAgICA+Pj4gZiA9IHdlYWtyZWYuZmluYWxpemUob2JqLCBjYWxsYmFjaywgMSwgMiwgej0zKQorICAgID4+PiBmLmRldGFjaCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkb2N0ZXN0OitFTExJUFNJUworICAgICg8X19tYWluX18uT2JqZWN0IG9iamVjdCAuLi4+LCA8ZnVuY3Rpb24gY2FsbGJhY2sgLi4uPiwgKDEsIDIpLCB7J3onOiAzfSkKKyAgICA+Pj4gbmV3b2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MgPSBfCisgICAgPj4+IGFzc2VydCBub3QgZi5hbGl2ZQorICAgID4+PiBhc3NlcnQgbmV3b2JqIGlzIG9iagorICAgID4+PiBhc3NlcnQgZnVuYygqYXJncywgKiprd2FyZ3MpID09IDYKKyAgICBDQUxMQkFDSworCitVbmxlc3MgeW91IHNldCB0aGUgOmF0dHI6YH5maW5hbGl6ZS5hdGV4aXRgIGF0dHJpYnV0ZSB0bworOmNvbnN0OmBGYWxzZWAsIGEgZmluYWxpemVyIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHByb2dyYW0gZXhpdHMgaWYgaXQKK2lzIHN0aWxsIGFsaXZlLiAgRm9yIGluc3RhbmNlCisKKyAgICA+Pj4gb2JqID0gT2JqZWN0KCkKKyAgICA+Pj4gd2Vha3JlZi5maW5hbGl6ZShvYmosIHByaW50LCAib2JqIGRlYWQgb3IgZXhpdGluZyIpICAjZG9jdGVzdDorRUxMSVBTSVMKKyAgICA8ZmluYWxpemUgb2JqZWN0IGF0IC4uLjsgZm9yICdPYmplY3QnIGF0IC4uLj4KKyAgICA+Pj4gZXhpdCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZG9jdGVzdDorU0tJUAorICAgIG9iaiBkZWFkIG9yIGV4aXRpbmcKKworCitDb21wYXJpbmcgZmluYWxpemVycyB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvc2Ugd2Ugd2FudCB0byBjcmVhdGUgYSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgcmVwcmVzZW50IHRlbXBvcmFyeQorZGlyZWN0b3JpZXMuICBUaGUgZGlyZWN0b3JpZXMgc2hvdWxkIGJlIGRlbGV0ZWQgd2l0aCB0aGVpciBjb250ZW50cword2hlbiB0aGUgZmlyc3Qgb2YgdGhlIGZvbGxvd2luZyBldmVudHMgb2NjdXJzOgorCisqIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQsCisqIHRoZSBvYmplY3QncyA6bWV0aDpgcmVtb3ZlYCBtZXRob2QgaXMgY2FsbGVkLCBvcgorKiB0aGUgcHJvZ3JhbSBleGl0cy4KKworV2UgbWlnaHQgdHJ5IHRvIGltcGxlbWVudCB0aGUgY2xhc3MgdXNpbmcgYSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIGFzCitmb2xsb3dzOjoKKworICAgIGNsYXNzIFRlbXBEaXI6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgIGRlZiByZW1vdmUoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLm5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5uYW1lID0gTm9uZQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgcmVtb3ZlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUgaXMgTm9uZQorCisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5yZW1vdmUoKQorCitTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIG5vIGxvbmdlciBwcmV2ZW50CityZWZlcmVuY2UgY3ljbGVzIGZyb20gYmVpbmcgZ2FyYmFnZSBjb2xsZWN0ZWQsIGFuZCBtb2R1bGUgZ2xvYmFscyBhcmUKK25vIGxvbmdlciBmb3JjZWQgdG8gOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uIFNvIHRoaXMKK2NvZGUgc2hvdWxkIHdvcmsgd2l0aG91dCBhbnkgaXNzdWVzIG9uIENQeXRob24uCisKK0hvd2V2ZXIsIGhhbmRsaW5nIG9mIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGlzIG5vdG9yaW91c2x5IGltcGxlbWVudGF0aW9uCitzcGVjaWZpYywgc2luY2UgaXQgZGVwZW5kcyBvbiBpbnRlcm5hbCBkZXRhaWxzIG9mIHRoZSBpbnRlcnByZXRlcidzIGdhcmJhZ2UKK2NvbGxlY3RvciBpbXBsZW1lbnRhdGlvbi4KKworQSBtb3JlIHJvYnVzdCBhbHRlcm5hdGl2ZSBjYW4gYmUgdG8gZGVmaW5lIGEgZmluYWxpemVyIHdoaWNoIG9ubHkgcmVmZXJlbmNlcwordGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgb2JqZWN0cyB0aGF0IGl0IG5lZWRzLCByYXRoZXIgdGhhbiBoYXZpbmcgYWNjZXNzCit0byB0aGUgZnVsbCBzdGF0ZSBvZiB0aGUgb2JqZWN0OjoKKworICAgIGNsYXNzIFRlbXBEaXI6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyID0gd2Vha3JlZi5maW5hbGl6ZShzZWxmLCBzaHV0aWwucm10cmVlLCBzZWxmLm5hbWUpCisKKyAgICAgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplcigpCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiByZW1vdmVkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9maW5hbGl6ZXIuYWxpdmUKKworRGVmaW5lZCBsaWtlIHRoaXMsIG91ciBmaW5hbGl6ZXIgb25seSByZWNlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZGV0YWlscworaXQgbmVlZHMgdG8gY2xlYW4gdXAgdGhlIGRpcmVjdG9yeSBhcHByb3ByaWF0ZWx5LiBJZiB0aGUgb2JqZWN0IG5ldmVyIGdldHMKK2dhcmJhZ2UgY29sbGVjdGVkIHRoZSBmaW5hbGl6ZXIgd2lsbCBzdGlsbCBiZSBjYWxsZWQgYXQgZXhpdC4KKworVGhlIG90aGVyIGFkdmFudGFnZSBvZiB3ZWFrcmVmIGJhc2VkIGZpbmFsaXplcnMgaXMgdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHRvCityZWdpc3RlciBmaW5hbGl6ZXJzIGZvciBjbGFzc2VzIHdoZXJlIHRoZSBkZWZpbml0aW9uIGlzIGNvbnRyb2xsZWQgYnkgYQordGhpcmQgcGFydHksIHN1Y2ggYXMgcnVubmluZyBjb2RlIHdoZW4gYSBtb2R1bGUgaXMgdW5sb2FkZWQ6OgorCisgICAgaW1wb3J0IHdlYWtyZWYsIHN5cworICAgIGRlZiB1bmxvYWRpbmdfbW9kdWxlKCk6CisgICAgICAgICMgaW1wbGljaXQgcmVmZXJlbmNlIHRvIHRoZSBtb2R1bGUgZ2xvYmFscyBmcm9tIHRoZSBmdW5jdGlvbiBib2R5CisgICAgd2Vha3JlZi5maW5hbGl6ZShzeXMubW9kdWxlc1tfX25hbWVfX10sIHVubG9hZGluZ19tb2R1bGUpCisKKworLi4gbm90ZTo6CisKKyAgIElmIHlvdSBjcmVhdGUgYSBmaW5hbGl6ZXIgb2JqZWN0IGluIGEgZGFlbW9uaWMgdGhyZWFkIGp1c3QgYXMgdGhlCisgICB0aGUgcHJvZ3JhbSBleGl0cyB0aGVuIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBmaW5hbGl6ZXIKKyAgIGRvZXMgbm90IGdldCBjYWxsZWQgYXQgZXhpdC4gIEhvd2V2ZXIsIGluIGEgZGFlbW9uaWMgdGhyZWFkCisgICA6ZnVuYzpgYXRleGl0LnJlZ2lzdGVyYCwgYGB0cnk6IC4uLiBmaW5hbGx5OiAuLi5gYCBhbmQgYGB3aXRoOiAuLi5gYAorICAgZG8gbm90IGd1YXJhbnRlZSB0aGF0IGNsZWFudXAgb2NjdXJzIGVpdGhlci4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CmluZGV4IGNmNjUyMTkuLjRjODlkYzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdApAQCAtMTA1LDYgKzEwNSw0MyBAQAogICAgPj4+IHJvb3RbMF1bMV0udGV4dAogICAgJzIwMDgnCiAKK1B1bGwgQVBJIGZvciBub24tYmxvY2tpbmcgcGFyc2luZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vc3QgcGFyc2luZyBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUgcmVxdWlyZSB0byByZWFkIHRoZSB3aG9sZQorZG9jdW1lbnQgYXQgb25jZSBiZWZvcmUgcmV0dXJuaW5nIGFueSByZXN1bHQuICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYQorOmNsYXNzOmBYTUxQYXJzZXJgIGFuZCBmZWVkIGRhdGEgaW50byBpdCBpbmNyZW1lbnRhbGx5LCBidXQgaXQncyBhIHB1c2ggQVBJIHRoYXQKK2NhbGxzIG1ldGhvZHMgb24gYSBjYWxsYmFjayB0YXJnZXQsIHdoaWNoIGlzIHRvbyBsb3ctbGV2ZWwgYW5kIGluY29udmVuaWVudCBmb3IKK21vc3QgbmVlZHMuICBTb21ldGltZXMgd2hhdCB0aGUgdXNlciByZWFsbHkgd2FudHMgaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBYTUwKK2luY3JlbWVudGFsbHksIHdpdGhvdXQgYmxvY2tpbmcgb3BlcmF0aW9ucywgd2hpbGUgZW5qb3lpbmcgdGhlIGNvbnZlbmllbmNlIG9mCitmdWxseSBjb25zdHJ1Y3RlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdHMuCisKK1RoZSBtb3N0IHBvd2VyZnVsIHRvb2wgZm9yIGRvaW5nIHRoaXMgaXMgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4gIEl0IGRvZXMgbm90CityZXF1aXJlIGEgYmxvY2tpbmcgcmVhZCB0byBvYnRhaW4gdGhlIFhNTCBkYXRhLCBhbmQgaXMgaW5zdGVhZCBmZWQgd2l0aCBkYXRhCitpbmNyZW1lbnRhbGx5IHdpdGggOm1ldGg6YFhNTFB1bGxQYXJzZXIuZmVlZGAgY2FsbHMuICBUbyBnZXQgdGhlIHBhcnNlZCBYTUwKK2VsZW1lbnRzLCBjYWxsIDptZXRoOmBYTUxQdWxsUGFyc2VyLnJlYWRfZXZlbnRzYC4gIEhlcmUncyBhbiBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoWydzdGFydCcsICdlbmQnXSkKKyAgID4+PiBwYXJzZXIuZmVlZCgnPG15dGFnPnNvbWV0ZXh0JykKKyAgID4+PiBsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKQorICAgWygnc3RhcnQnLCA8RWxlbWVudCAnbXl0YWcnIGF0IDB4N2ZhNjZkYjJiZTU4PildCisgICA+Pj4gcGFyc2VyLmZlZWQoJyBtb3JlIHRleHQ8L215dGFnPicpCisgICA+Pj4gZm9yIGV2ZW50LCBlbGVtIGluIHBhcnNlci5yZWFkX2V2ZW50cygpOgorICAgLi4uICAgcHJpbnQoZXZlbnQpCisgICAuLi4gICBwcmludChlbGVtLnRhZywgJ3RleHQ9JywgZWxlbS50ZXh0KQorICAgLi4uCisgICBlbmQKKworVGhlIG9idmlvdXMgdXNlIGNhc2UgaXMgYXBwbGljYXRpb25zIHRoYXQgb3BlcmF0ZSBpbiBhIG5vbi1ibG9ja2luZyBmYXNoaW9uCit3aGVyZSB0aGUgWE1MIGRhdGEgaXMgYmVpbmcgcmVjZWl2ZWQgZnJvbSBhIHNvY2tldCBvciByZWFkIGluY3JlbWVudGFsbHkgZnJvbQorc29tZSBzdG9yYWdlIGRldmljZS4gIEluIHN1Y2ggY2FzZXMsIGJsb2NraW5nIHJlYWRzIGFyZSB1bmFjY2VwdGFibGUuCisKK0JlY2F1c2UgaXQncyBzbyBmbGV4aWJsZSwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjYW4gYmUgaW5jb252ZW5pZW50IHRvIHVzZSBmb3IKK3NpbXBsZXIgdXNlLWNhc2VzLiAgSWYgeW91IGRvbid0IG1pbmQgeW91ciBhcHBsaWNhdGlvbiBibG9ja2luZyBvbiByZWFkaW5nIFhNTAorZGF0YSBidXQgd291bGQgc3RpbGwgbGlrZSB0byBoYXZlIGluY3JlbWVudGFsIHBhcnNpbmcgY2FwYWJpbGl0aWVzLCB0YWtlIGEgbG9vaworYXQgOmZ1bmM6YGl0ZXJwYXJzZWAuICBJdCBjYW4gYmUgdXNlZnVsIHdoZW4geW91J3JlIHJlYWRpbmcgYSBsYXJnZSBYTUwgZG9jdW1lbnQKK2FuZCBkb24ndCB3YW50IHRvIGhvbGQgaXQgd2hvbGx5IGluIG1lbW9yeS4KKwogRmluZGluZyBpbnRlcmVzdGluZyBlbGVtZW50cwogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCkBAIC0zNzksMjUgKzQxNiwzMiBAQAogCiAgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gaW50byBhbiBlbGVtZW50IHRyZWUgaW5jcmVtZW50YWxseSwgYW5kIHJlcG9ydHMgd2hhdCdzCiAgICBnb2luZyBvbiB0byB0aGUgdXNlci4gICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgOnRlcm06YGZpbGUgb2JqZWN0YAotICAgY29udGFpbmluZyBYTUwgZGF0YS4gICpldmVudHMqIGlzIGEgdHVwbGUgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgVGhlCi0gICBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLCBgYCJzdGFydC1ucyJgYAotICAgYW5kIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKKyAgIGNvbnRhaW5pbmcgWE1MIGRhdGEuICAqZXZlbnRzKiBpcyBhIHNlcXVlbmNlIG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIFRoZQorICAgc3VwcG9ydGVkIGV2ZW50cyBhcmUgdGhlIHN0cmluZ3MgYGAic3RhcnQiYGAsIGBgImVuZCJgYCwgYGAic3RhcnQtbnMiYGAgYW5kCisgICBgYCJlbmQtbnMiYGAgKHRoZSAibnMiIGV2ZW50cyBhcmUgdXNlZCB0byBnZXQgZGV0YWlsZWQgbmFtZXNwYWNlCiAgICBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5IGBgImVuZCJgYCBldmVudHMgYXJlIHJlcG9ydGVkLgogICAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKLSAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gICpwYXJzZXIqIGNhbiBvbmx5IHVzZSB0aGUgZGVmYXVsdAotICAgOmNsYXNzOmBUcmVlQnVpbGRlcmAgYXMgYSB0YXJnZXQuICBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAgcHJvdmlkaW5nCi0gICBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KKyAgIDpjbGFzczpgWE1MUGFyc2VyYCBwYXJzZXIgaXMgdXNlZC4gICpwYXJzZXIqIG11c3QgYmUgYSBzdWJjbGFzcyBvZgorICAgOmNsYXNzOmBYTUxQYXJzZXJgIGFuZCBjYW4gb25seSB1c2UgdGhlIGRlZmF1bHQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgYXMgYQorICAgdGFyZ2V0LiAgUmV0dXJucyBhbiA6dGVybTpgaXRlcmF0b3JgIHByb3ZpZGluZyBgYChldmVudCwgZWxlbSlgYCBwYWlycy4KKworICAgTm90ZSB0aGF0IHdoaWxlIDpmdW5jOmBpdGVycGFyc2VgIGJ1aWxkcyB0aGUgdHJlZSBpbmNyZW1lbnRhbGx5LCBpdCBpc3N1ZXMKKyAgIGJsb2NraW5nIHJlYWRzIG9uICpzb3VyY2UqIChvciB0aGUgZmlsZSBpdCBuYW1lcykuICBBcyBzdWNoLCBpdCdzIHVuc3VpdGFibGUKKyAgIGZvciBhcHBsaWNhdGlvbnMgd2hlcmUgYmxvY2tpbmcgcmVhZHMgY2FuJ3QgYmUgbWFkZS4gIEZvciBmdWxseSBub24tYmxvY2tpbmcKKyAgIHBhcnNpbmcsIHNlZSA6Y2xhc3M6YFhNTFB1bGxQYXJzZXJgLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgOmZ1bmM6YGl0ZXJwYXJzZWAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IgotICAgICAgY2hhcmFjdGVyIG9mIGEgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUKLSAgICAgIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcwotICAgICAgYXJlIHVuZGVmaW5lZCBhdCB0aGF0IHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsKLSAgICAgIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudC4KKyAgICAgIDpmdW5jOmBpdGVycGFyc2VgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IGl0IGhhcyBzZWVuIHRoZSAiPiIgY2hhcmFjdGVyIG9mIGEKKyAgICAgIHN0YXJ0aW5nIHRhZyB3aGVuIGl0IGVtaXRzIGEgInN0YXJ0IiBldmVudCwgc28gdGhlIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsCisgICAgICBidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgYXJlIHVuZGVmaW5lZCBhdCB0aGF0CisgICAgICBwb2ludC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlIGVsZW1lbnQgY2hpbGRyZW47IHRoZXkgbWF5IG9yIG1heSBub3QgYmUKKyAgICAgIHByZXNlbnQuCiAKICAgICAgIElmIHlvdSBuZWVkIGEgZnVsbHkgcG9wdWxhdGVkIGVsZW1lbnQsIGxvb2sgZm9yICJlbmQiIGV2ZW50cyBpbnN0ZWFkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBUaGUgKnBhcnNlciogYXJndW1lbnQuCiAKIC4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSkKIApAQCAtNDM4LDI5ICs0ODIsMzkgQEAKICAgIGFyZ3VtZW50cy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKy4uIGZ1bmN0aW9uOjogdG9zdHJpbmcoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAogICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcwogICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bwogICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZyAob3RoZXJ3aXNlLCBhIGJ5dGVzdHJpbmcgaXMgZ2VuZXJhdGVkKS4gICptZXRob2QqCiAgICBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOm1ldGg6YEVsZW1lbnRUcmVlLndyaXRlYC4KICAgIFJldHVybnMgYW4gKG9wdGlvbmFsbHkpIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiKQorCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAogICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcwogICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bwogICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZyAob3RoZXJ3aXNlLCBhIGJ5dGVzdHJpbmcgaXMgZ2VuZXJhdGVkKS4gICptZXRob2QqCiAgICBpcyBlaXRoZXIgYGAieG1sImBgLCBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOm1ldGg6YEVsZW1lbnRUcmVlLndyaXRlYC4KICAgIFJldHVybnMgYSBsaXN0IG9mIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZ3MgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCiAgICBJdCBkb2VzIG5vdCBndWFyYW50ZWUgYW55IHNwZWNpZmljIHNlcXVlbmNlLCBleGNlcHQgdGhhdAogICAgYGAiIi5qb2luKHRvc3RyaW5nbGlzdChlbGVtZW50KSkgPT0gdG9zdHJpbmcoZWxlbWVudClgYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyLgorCiAKIC4uIGZ1bmN0aW9uOjogWE1MKHRleHQsIHBhcnNlcj1Ob25lKQogCkBAIC03NTMsNyArODA3LDggQEAKIAogCiAgICAuLiBtZXRob2Q6OiB3cml0ZShmaWxlLCBlbmNvZGluZz0idXMtYXNjaWkiLCB4bWxfZGVjbGFyYXRpb249Tm9uZSwgXAotICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwgbWV0aG9kPSJ4bWwiKQorICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9uYW1lc3BhY2U9Tm9uZSwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICAgICBXcml0ZXMgdGhlIGVsZW1lbnQgdHJlZSB0byBhIGZpbGUsIGFzIFhNTC4gICpmaWxlKiBpcyBhIGZpbGUgbmFtZSwgb3IgYQogICAgICAgOnRlcm06YGZpbGUgb2JqZWN0YCBvcGVuZWQgZm9yIHdyaXRpbmcuICAqZW5jb2RpbmcqIFsxXV8gaXMgdGhlIG91dHB1dApAQCAtNzY0LDYgKzgxOSwxMCBAQAogICAgICAgKmRlZmF1bHRfbmFtZXNwYWNlKiBzZXRzIHRoZSBkZWZhdWx0IFhNTCBuYW1lc3BhY2UgKGZvciAieG1sbnMiKS4KICAgICAgICptZXRob2QqIGlzIGVpdGhlciBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcwogICAgICAgYGAieG1sImBgKS4KKyAgICAgIFRoZSBrZXl3b3JkLW9ubHkgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGZvcm1hdHRpbmcKKyAgICAgIG9mIGVsZW1lbnRzIHRoYXQgY29udGFpbiBubyBjb250ZW50LiAgSWYgKlRydWUqICh0aGUgZGVmYXVsdCksIHRoZXkgYXJlCisgICAgICBlbWl0dGVkIGFzIGEgc2luZ2xlIHNlbGYtY2xvc2VkIHRhZywgb3RoZXJ3aXNlIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBwYWlyCisgICAgICBvZiBzdGFydC9lbmQgdGFncy4KIAogICAgICAgVGhlIG91dHB1dCBpcyBlaXRoZXIgYSBzdHJpbmcgKDpjbGFzczpgc3RyYCkgb3IgYmluYXJ5ICg6Y2xhc3M6YGJ5dGVzYCkuCiAgICAgICBUaGlzIGlzIGNvbnRyb2xsZWQgYnkgdGhlICplbmNvZGluZyogYXJndW1lbnQuICBJZiAqZW5jb2RpbmcqIGlzCkBAIC03NzIsNiArODMxLDkgQEAKICAgICAgIDp0ZXJtOmBmaWxlIG9iamVjdGA7IG1ha2Ugc3VyZSB5b3UgZG8gbm90IHRyeSB0byB3cml0ZSBhIHN0cmluZyB0byBhCiAgICAgICBiaW5hcnkgc3RyZWFtIGFuZCB2aWNlIHZlcnNhLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgICAgIFRoZSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlci4KKwogCiBUaGlzIGlzIHRoZSBYTUwgZmlsZSB0aGF0IGlzIGdvaW5nIHRvIGJlIG1hbmlwdWxhdGVkOjoKIApAQCAtODE3LDYgKzg3OSw3IEBACiAgICA6Y2xhc3M6YFFOYW1lYCBpbnN0YW5jZXMgYXJlIG9wYXF1ZS4KIAogCisKIC4uIF9lbGVtZW50dHJlZS10cmVlYnVpbGRlci1vYmplY3RzOgogCiBUcmVlQnVpbGRlciBPYmplY3RzCkBAIC04NzYsMTMgKzkzOSwxNyBAQAogCiAuLiBjbGFzczo6IFhNTFBhcnNlcihodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKQogCi0gICA6Y2xhc3M6YEVsZW1lbnRgIHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZSBleHBhdAotICAgcGFyc2VyLiAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieQotICAgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICAqdGFyZ2V0KiBpcyB0aGUgdGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZQotICAgYnVpbGRlciB1c2VzIGFuIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBjbGFzcy4KLSAgICplbmNvZGluZyogWzFdXyBpcyBvcHRpb25hbC4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZworICAgVGhpcyBjbGFzcyBpcyB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBtb2R1bGUuICBJdCB1c2VzCisgICA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgZm9yIGVmZmljaWVudCwgZXZlbnQtYmFzZWQgcGFyc2luZyBvZiBYTUwuICBJdCBjYW4KKyAgIGJlIGZlZCBYTUwgZGF0YSBpbmNyZW1lbnRhbGwgd2l0aCB0aGUgOm1ldGg6YGZlZWRgIG1ldGhvZCwgYW5kIHBhcnNpbmcgZXZlbnRzCisgICBhcmUgdHJhbnNsYXRlZCB0byBhIHB1c2ggQVBJIC0gYnkgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSAqdGFyZ2V0KiBvYmplY3QuCisgICBJZiAqdGFyZ2V0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgaXMgdXNlZC4gIFRoZQorICAgKmh0bWwqIGFyZ3VtZW50IHdhcyBoaXN0b3JpY2FsbHkgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGlzIG5vdworICAgZGVwcmVjYXRlZC4gIElmICplbmNvZGluZyogWzFdXyBpcyBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKICAgIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSAqaHRtbCogYXJndW1lbnQuCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIApAQCAtOTAyLDEyICs5NjksMTIgQEAKIAogICAgICAgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLiAgKmRhdGEqIGlzIGVuY29kZWQgZGF0YS4KIAotICAgOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyBgYHN0YXJ0KClgYCBtZXRob2QKLSAgIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgYGBlbmQoKWBgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywKLSAgIGFuZCBkYXRhIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgYGBkYXRhKClgYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgCi0gICBjYWxscyAqdGFyZ2V0KlwncyBtZXRob2QgYGBjbG9zZSgpYGAuCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuCi0gICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGggb2YgYW4gWE1MIGZpbGU6OgorICAgOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyBgYHN0YXJ0KHRhZywgYXR0cnNfZGljdClgYCBtZXRob2QKKyAgIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgYGBlbmQodGFnKWBgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywgYW5kIGRhdGEKKyAgIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgYGBkYXRhKGRhdGEpYGAuICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYCBjYWxscworICAgKnRhcmdldCpcJ3MgbWV0aG9kIGBgY2xvc2UoKWBgLiA6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yCisgICBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGgKKyAgIG9mIGFuIFhNTCBmaWxlOjoKIAogICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgWE1MUGFyc2VyCiAgICAgPj4+IGNsYXNzIE1heERlcHRoOiAgICAgICAgICAgICAgICAgICAgICMgVGhlIHRhcmdldCBvYmplY3Qgb2YgdGhlIHBhcnNlcgpAQCAtOTQxLDYgKzEwMDgsNTggQEAKICAgICA+Pj4gcGFyc2VyLmNsb3NlKCkKICAgICA0CiAKKworLi4gX2VsZW1lbnR0cmVlLXhtbHB1bGxwYXJzZXItb2JqZWN0czoKKworWE1MUHVsbFBhcnNlciBPYmplY3RzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBYTUxQdWxsUGFyc2VyKGV2ZW50cz1Ob25lKQorCisgICBBIHB1bGwgcGFyc2VyIHN1aXRhYmxlIGZvciBub24tYmxvY2tpbmcgYXBwbGljYXRpb25zLiAgSXRzIGlucHV0LXNpZGUgQVBJIGlzCisgICBzaW1pbGFyIHRvIHRoYXQgb2YgOmNsYXNzOmBYTUxQYXJzZXJgLCBidXQgaW5zdGVhZCBvZiBwdXNoaW5nIGNhbGxzIHRvIGEKKyAgIGNhbGxiYWNrIHRhcmdldCwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjb2xsZWN0cyBhbiBpbnRlcm5hbCBsaXN0IG9mIHBhcnNpbmcKKyAgIGV2ZW50cyBhbmQgbGV0cyB0aGUgdXNlciByZWFkIGZyb20gaXQuICpldmVudHMqIGlzIGEgc2VxdWVuY2Ugb2YgZXZlbnRzIHRvCisgICByZXBvcnQgYmFjay4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLAorICAgYGAic3RhcnQtbnMiYGAgYW5kIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZAorICAgbmFtZXNwYWNlIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkgYGAiZW5kImBgIGV2ZW50cyBhcmUKKyAgIHJlcG9ydGVkLgorCisgICAuLiBtZXRob2Q6OiBmZWVkKGRhdGEpCisKKyAgICAgIEZlZWQgdGhlIGdpdmVuIGJ5dGVzIGRhdGEgdG8gdGhlIHBhcnNlci4KKworICAgLi4gbWV0aG9kOjogY2xvc2UoKQorCisgICAgICBTaWduYWwgdGhlIHBhcnNlciB0aGF0IHRoZSBkYXRhIHN0cmVhbSBpcyB0ZXJtaW5hdGVkLiBVbmxpa2UKKyAgICAgIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgLCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyA6Y29uc3Q6YE5vbmVgLgorICAgICAgQW55IGV2ZW50cyBub3QgeWV0IHJldHJpZXZlZCB3aGVuIHRoZSBwYXJzZXIgaXMgY2xvc2VkIGNhbiBzdGlsbCBiZQorICAgICAgcmVhZCB3aXRoIDptZXRoOmByZWFkX2V2ZW50c2AuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWRfZXZlbnRzKCkKKworICAgICAgSXRlcmF0ZSBvdmVyIHRoZSBldmVudHMgd2hpY2ggaGF2ZSBiZWVuIGVuY291bnRlcmVkIGluIHRoZSBkYXRhIGZlZCB0byB0aGUKKyAgICAgIHBhcnNlci4gIFRoaXMgbWV0aG9kIHlpZWxkcyBgYChldmVudCwgZWxlbSlgYCBwYWlycywgd2hlcmUgKmV2ZW50KiBpcyBhCisgICAgICBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIGV2ZW50IChlLmcuIGBgImVuZCJgYCkgYW5kICplbGVtKiBpcyB0aGUKKyAgICAgIGVuY291bnRlcmVkIDpjbGFzczpgRWxlbWVudGAgb2JqZWN0LgorCisgICAgICBFdmVudHMgcHJvdmlkZWQgaW4gYSBwcmV2aW91cyBjYWxsIHRvIDptZXRoOmByZWFkX2V2ZW50c2Agd2lsbCBub3QgYmUKKyAgICAgIHlpZWxkZWQgYWdhaW4uIEFzIGV2ZW50cyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgaW50ZXJuYWwgcXVldWUgb25seSBhcworICAgICAgdGhleSBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLCBtdWx0aXBsZSByZWFkZXJzIGNhbGxpbmcKKyAgICAgIDptZXRoOmByZWFkX2V2ZW50c2AgaW4gcGFyYWxsZWwgd2lsbCBoYXZlIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IgorICAgICAgY2hhcmFjdGVyIG9mIGEgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUKKyAgICAgIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcworICAgICAgYXJlIHVuZGVmaW5lZCBhdCB0aGF0IHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsKKyAgICAgIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudC4KKworICAgICAgSWYgeW91IG5lZWQgYSBmdWxseSBwb3B1bGF0ZWQgZWxlbWVudCwgbG9vayBmb3IgImVuZCIgZXZlbnRzIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBFeGNlcHRpb25zCiBeXl5eXl5eXl5eCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0IGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKaW5kZXggN2E2NDgyYi4uOTY5YTUzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKQEAgLTEzMCw3ICsxMzAsNyBAQAogLS0tLS0tLS0tLS0tLS0tCiAKIAotLi4gY2xhc3M6OiBaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKQorLi4gY2xhc3M6OiBaaXBGaWxlKGZpbGUsIG1vZGU9J3InLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCiAKICAgIE9wZW4gYSBaSVAgZmlsZSwgd2hlcmUgKmZpbGUqIGNhbiBiZSBlaXRoZXIgYSBwYXRoIHRvIGEgZmlsZSAoYSBzdHJpbmcpIG9yIGEKICAgIGZpbGUtbGlrZSBvYmplY3QuICBUaGUgKm1vZGUqIHBhcmFtZXRlciBzaG91bGQgYmUgYGAncidgYCB0byByZWFkIGFuIGV4aXN0aW5nCkBAIC0xNDQsMTUgKzE0NCwxMiBAQAogICAgYW5kIHNob3VsZCBiZSA6Y29uc3Q6YFpJUF9TVE9SRURgLCA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCiAgICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWA7IHVucmVjb2duaXplZAogICAgdmFsdWVzIHdpbGwgY2F1c2UgOmV4YzpgUnVudGltZUVycm9yYCB0byBiZSByYWlzZWQuICBJZiA6Y29uc3Q6YFpJUF9ERUZMQVRFRGAsCi0gICA6Y29uc3Q6YFpJUF9CWklQMmAgb3IgOmNvbnN0OmBaSVBfTFpNQWAgaXMgc3BlY2lmaWVkIGJ1dCB0aGUgY29ycmVzcG9uZGVkIG1vZHVsZQorICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlCiAgICAoOm1vZDpgemxpYmAsIDptb2Q6YGJ6MmAgb3IgOm1vZDpgbHptYWApIGlzIG5vdCBhdmFpbGFibGUsIDpleGM6YFJ1bnRpbWVFcnJvcmAKICAgIGlzIGFsc28gcmFpc2VkLiBUaGUgZGVmYXVsdCBpcyA6Y29uc3Q6YFpJUF9TVE9SRURgLiAgSWYgKmFsbG93WmlwNjQqIGlzCi0gICBgYFRydWVgYCB6aXBmaWxlIHdpbGwgY3JlYXRlIFpJUCBmaWxlcyB0aGF0IHVzZSB0aGUgWklQNjQgZXh0ZW5zaW9ucyB3aGVuCi0gICB0aGUgemlwZmlsZSBpcyBsYXJnZXIgdGhhbiAyIEdpQi4gSWYgaXQgaXMgIGZhbHNlICh0aGUgZGVmYXVsdCkgOm1vZDpgemlwZmlsZWAKKyAgIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCkgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0CisgICBleHRlbnNpb25zIHdoZW4gdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHaUIuIElmIGl0IGlzICBmYWxzZSA6bW9kOmB6aXBmaWxlYAogICAgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgWklQIGZpbGUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zLgotICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdCBiZWNhdXNlIHRoZSBkZWZhdWx0IDpwcm9ncmFtOmB6aXBgCi0gICBhbmQgOnByb2dyYW06YHVuemlwYCBjb21tYW5kcyBvbiBVbml4ICh0aGUgSW5mb1pJUCB1dGlsaXRpZXMpIGRvbid0IHN1cHBvcnQKLSAgIHRoZXNlIGV4dGVuc2lvbnMuCiAKICAgIElmIHRoZSBmaWxlIGlzIGNyZWF0ZWQgd2l0aCBtb2RlIGBgJ2EnYGAgb3IgYGAndydgYCBhbmQgdGhlbgogICAgOm1ldGg6YGNsb3NlZCA8Y2xvc2U+YCB3aXRob3V0IGFkZGluZyBhbnkgZmlsZXMgdG8gdGhlIGFyY2hpdmUsIHRoZSBhcHByb3ByaWF0ZQpAQCAtMTcxLDYgKzE2OCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgOm1vZDpgYnppcDIgPGJ6Mj5gIGFuZCA6bW9kOmBsem1hYCBjb21wcmVzc2lvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KKwogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmNsb3NlKCkKIApAQCAtMjM0LDYgKzIzNCw5IEBACiAgICAgICBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0LiAgWW91IHdpbGwgYXBwcmVjaWF0ZSB0aGlzIHdoZW4gdHJ5aW5nIHRvIHJlYWQgYQogICAgICAgWklQIGZpbGUgdGhhdCBjb250YWlucyBtZW1iZXJzIHdpdGggZHVwbGljYXRlIG5hbWVzLgogCisgICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjQgMy42CisgICAgICBUaGUgYGAnVSdgYCBvciAgYGAnclUnYGAgbW9kZS4gIFVzZSA6Y2xhc3M6YGlvLlRleHRJT1dyYXBwZXJgIGZvciByZWFkaW5nCisgICAgICBjb21wcmVzc2VkIHRleHQgZmlsZXMgaW4gOnRlcm06YHVuaXZlcnNhbCBuZXdsaW5lc2AgbW9kZS4KIAogLi4gbWV0aG9kOjogWmlwRmlsZS5leHRyYWN0KG1lbWJlciwgcGF0aD1Ob25lLCBwd2Q9Tm9uZSkKIApAQCAtMjY2LDEwICsyNjksOCBAQAogICAgICAgTmV2ZXIgZXh0cmFjdCBhcmNoaXZlcyBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzIHdpdGhvdXQgcHJpb3IgaW5zcGVjdGlvbi4KICAgICAgIEl0IGlzIHBvc3NpYmxlIHRoYXQgZmlsZXMgYXJlIGNyZWF0ZWQgb3V0c2lkZSBvZiAqcGF0aCosIGUuZy4gbWVtYmVycwogICAgICAgdGhhdCBoYXZlIGFic29sdXRlIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGBgIi8iYGAgb3IgZmlsZW5hbWVzIHdpdGggdHdvCi0gICAgICBkb3RzIGBgIi4uImBgLgotCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy4xCi0gICAgICBUaGUgemlwZmlsZSBtb2R1bGUgYXR0ZW1wdHMgdG8gcHJldmVudCB0aGF0LiAgU2VlIDptZXRoOmBleHRyYWN0YCBub3RlLgorICAgICAgZG90cyBgYCIuLiJgYC4gIFRoaXMgbW9kdWxlIGF0dGVtcHRzIHRvIHByZXZlbnQgdGhhdC4KKyAgICAgIFNlZSA6bWV0aDpgZXh0cmFjdGAgbm90ZS4KIAogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLnByaW50ZGlyKCkKQEAgLTM3NiwxNSArMzc3LDE4IEBACiBUaGUgOmNsYXNzOmBQeVppcEZpbGVgIGNvbnN0cnVjdG9yIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlCiA6Y2xhc3M6YFppcEZpbGVgIGNvbnN0cnVjdG9yLCBhbmQgb25lIGFkZGl0aW9uYWwgcGFyYW1ldGVyLCAqb3B0aW1pemUqLgogCi0uLiBjbGFzczo6IFB5WmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSwgXAorLi4gY2xhc3M6OiBQeVppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSwgXAogICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9LTEpCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgICAgVGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorCiAgICBJbnN0YW5jZXMgaGF2ZSBvbmUgbWV0aG9kIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIDpjbGFzczpgWmlwRmlsZWAgb2JqZWN0czoKIAotICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnKQorICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnLCBmaWx0ZXJmdW5jPU5vbmUpCiAKICAgICAgIFNlYXJjaCBmb3IgZmlsZXMgOmZpbGU6YFwqLnB5YCBhbmQgYWRkIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgdG8gdGhlCiAgICAgICBhcmNoaXZlLgpAQCAtNDA2LDcgKzQxMCwxMCBAQAogICAgICAgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIDpmaWxlOmBcKi5weVtjb11gIGFyZSBhZGRlZCB1bmRlciB0aGUgcGFja2FnZQogICAgICAgbmFtZSBhcyBhIGZpbGUgcGF0aCwgYW5kIGlmIGFueSBzdWJkaXJlY3RvcmllcyBhcmUgcGFja2FnZSBkaXJlY3RvcmllcywKICAgICAgIGFsbCBvZiB0aGVzZSBhcmUgYWRkZWQgcmVjdXJzaXZlbHkuICAqYmFzZW5hbWUqIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbAotICAgICAgdXNlIG9ubHkuICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQorICAgICAgdXNlIG9ubHkuICBXaGVuICpmaWx0ZXJmdW5jKHBhdGhuYW1lKSogaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgY2FsbGVkIGZvciBldmVyeQorICAgICAgaW52b2NhdGlvbi4gV2hlbiBpdCByZXR1cm5zIGEgZmFsc2UgdmFsdWUsIHRoYXQgcGF0aCBhbmQgaXRzIHN1YnBhdGhzIHdpbGwKKyAgICAgIGJlIGlnbm9yZWQuCisgICAgICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQogICAgICAgdGhpczo6CiAKICAgICAgICAgIHN0cmluZy5weWMgICAgICAgICAgICAgICAgICAgIyBUb3AgbGV2ZWwgbmFtZQpAQCAtNDE1LDYgKzQyMiw5IEBACiAgICAgICAgICB0ZXN0L2JvZ3VzL19faW5pdF9fLnB5YyAgICAgICMgU3VicGFja2FnZSBkaXJlY3RvcnkKICAgICAgICAgIHRlc3QvYm9ndXMvbXlmaWxlLnB5YyAgICAgICAgIyBTdWJtb2R1bGUgdGVzdC5ib2d1cy5teWZpbGUKIAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAgICBUaGUgKmZpbHRlcmZ1bmMqIHBhcmFtZXRlci4KKwogCiAuLiBfemlwaW5mby1vYmplY3RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGljZW5zZS5yc3QgYi9Eb2MvbGljZW5zZS5yc3QKaW5kZXggM2U5M2EyNi4uZGRjNjliOCAxMDA2NDQKLS0tIGEvRG9jL2xpY2Vuc2UucnN0CisrKyBiL0RvYy9saWNlbnNlLnJzdApAQCAtNTkwLDYgKzU5MCw1NCBAQAogICBTVUNIIERBTUFHRS4KIAogCitTSEEtMworLS0tLS0KKworVGhlIG1vZHVsZSA6bW9kOmBfc2hhM2AgYW5kIDptb2Q6YGhhc2hsaWJgIGFyZSB1c2luZyB0aGUgcmVmZXJlbmNlCitpbXBsZW1lbnRhdGlvbiBvZiBLZWNjYWsuIFRoZSBmaWxlcyBhdCA6ZmlsZTpgTW9kdWxlcy9fc2hhMy9rZWNjYWsvYCBjb250YWluCit0aGUgZm9sbG93aW5nIG5vdGU6OgorCisgIFRoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKKyAgTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorICBxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworICBJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAorICBoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworICBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorICBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworCisKK1NpcEhhc2gyNAorLS0tLS0tLS0tCisKK1RoZSBmaWxlIDpmaWxlOmBQeXRob24vcHloYXNoLmNgIGNvbnRhaW5zIE1hcmVrIE1hamtvd3NraScgaW1wbGVtZW50YXRpb24gb2YKK0RhbiBCZXJuc3RlaW4ncyBTaXBIYXNoMjQgYWxnb3JpdGhtLiBUaGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBub3RlOjoKKworICA8TUlUIExpY2Vuc2U+CisgIENvcHlyaWdodCAoYykgMjAxMyAgTWFyZWsgTWFqa293c2tpIDxtYXJla0Bwb3Bjb3VudC5vcmc+CisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgIDwvTUlUIExpY2Vuc2U+CisKKyAgT3JpZ2luYWwgbG9jYXRpb246CisgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworICBTb2x1dGlvbiBpbnNwaXJlZCBieSBjb2RlIGZyb206CisgICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICAgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbiAoaHR0cHM6Ly8xMzEwMDIubmV0L3NpcGhhc2gvc2lwaGFzaDI0LmMpCisKKwogc3RydG9kIGFuZCBkdG9hCiAtLS0tLS0tLS0tLS0tLS0KIApAQCAtODQ1LDMgKzg5Myw0NCBAQAogICBKZWFuLWxvdXAgR2FpbGx5ICAgICAgICBNYXJrIEFkbGVyCiAgIGpsb3VwQGd6aXAub3JnICAgICAgICAgIG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHUKIAorCitjZnVoYXNoCistLS0tLS0tCisKK1RoZSBpbXBsZW1lbnR0YXRpb24gb2YgdGhlIGhhc2ggdGFibGUgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIGlzIGJhc2VkCitvbiB0aGUgY2Z1aGFzaCBwcm9qZWN0OjoKKworICAgQ29weXJpZ2h0IChjKSAyMDA1IERvbiBPd2VucworICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBCU0QgbGljZW5zZToKKworICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAgIGFyZSBtZXQ6CisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgICBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgICBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggOGFmYzY5ZS4uZTM1YWE5ZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTQ5MywxNCArNDkzLDE1IEBACiB2YWx1ZSwgYWxsIGZvbGxvd2luZyBwYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdAogdmFsdWUgLS0tIHRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLgogCi0qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMKLWV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24KLWlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMKLWlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZQotb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0Ci0oZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuCi1UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAKLWFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46OgorKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGUgZnVuY3Rpb24KK2RlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuCit0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXMgdXNlZCBmb3IgZWFjaAorY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGEgZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYQorbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTogaWYgdGhlIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZQorb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGEgbGlzdCksIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGluIGVmZmVjdAorbW9kaWZpZWQuICBUaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UKK2BgTm9uZWBgIGFzIHRoZSBkZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sCitlLmcuOjoKIAogICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOgogICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZToKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdAppbmRleCA0OGE0MmNjLi4wZTkzNmM2IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CkBAIC05MzQsNiArOTM0LDIwIEBACiAgICAgICBmcmFtZSkuICBBIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpCiAgICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLgogCisgICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDoKKworICAgICAgLi4gbWV0aG9kOjogZnJhbWUuY2xlYXIoKQorCisgICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnkgdGhlCisgICAgICAgICBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlIGdlbmVyYXRvcgorICAgICAgICAgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGludm9sdmluZyBmcmFtZQorICAgICAgICAgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhbiBleGNlcHRpb24gYW5kIHN0b3JpbmcgaXRzCisgICAgICAgICB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuCisKKyAgICAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisgICAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgVHJhY2ViYWNrIG9iamVjdHMKICAgICAgIC4uIGluZGV4OjoKICAgICAgICAgIG9iamVjdDogdHJhY2ViYWNrCkBAIC0xMTIxLDEyICsxMTM1LDEwIEBACiAgICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3Qgc2l0dWF0aW9uCiAgICAgICBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7IHRoZSBsYXR0ZXIgdHdvCiAgICAgICBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuCi0gICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUKLSAgICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmCi0gICAgICB0aGVyZSBhcmUgbm8gUHl0aG9uLSBsZXZlbCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cKLSAgICAgIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5Ci0gICAgICB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLgorICAgICAgQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmUgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbgorICAgICAgdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpcyBlbmFibGVkIChpdCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmBnY2AgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMKKyAgICAgIHRvcGljLgogCiAgICAuLiB3YXJuaW5nOjoKIApAQCAtMTgzMCw2ICsxODQyLDE1IEBACiAgICBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LgogCiAKKy4uIG1ldGhvZDo6IG9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZikKKworICAgQ2FsbGVkIHRvIGltcGxlbWVudCA6ZnVuYzpgb3BlcmF0b3IubGVuZ3RoX2hpbnRgLiBTaG91bGQgcmV0dXJuIGFuIGVzdGltYXRlZAorICAgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW4gdGhlIGFjdHVhbCBsZW5ndGgpLgorICAgVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgYGA+PWBgIDAuIFRoaXMgbWV0aG9kIGlzIHB1cmVseSBhbgorICAgb3B0aW1pemF0aW9uIGFuZCBpcyBuZXZlciByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBub3RlOjoKIAogICAgU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQSBjYWxsIGxpa2UgOjoKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdCBiL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAppbmRleCBlYjQ5N2ExLi5iZTc5Yjk5IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CkBAIC0yMTAsNiArMjEwLDcgQEAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IGZpbmRlcgogICAgIHNpbmdsZTogbG9hZGVyCisgICAgc2luZ2xlOiBtb2R1bGUgc3BlYwogCiBJZiB0aGUgbmFtZWQgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGVuIFB5dGhvbidzIGltcG9ydAogcHJvdG9jb2wgaXMgaW52b2tlZCB0byBmaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUuICBUaGlzIHByb3RvY29sIGNvbnNpc3RzIG9mCkBAIC0yMzAsMTMgKzIzMSwxNyBAQAogcmFuZ2UgYW5kIHNjb3BlIG9mIG1vZHVsZSBzZWFyY2hpbmcuCiAKIEZpbmRlcnMgZG8gbm90IGFjdHVhbGx5IGxvYWQgbW9kdWxlcy4gIElmIHRoZXkgY2FuIGZpbmQgdGhlIG5hbWVkIG1vZHVsZSwgdGhleQotcmV0dXJuIGEgOnRlcm06YGxvYWRlcmAsIHdoaWNoIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoZW4gaW52b2tlcyB0byBsb2FkIHRoZQotbW9kdWxlIGFuZCBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIG9iamVjdC4KK3JldHVybiBhIDpkZm46YG1vZHVsZSBzcGVjYCwgYW4gZW5jYXBzdWxhdGlvbiBvZiB0aGUgbW9kdWxlJ3MgaW1wb3J0LXJlbGF0ZWQKK2luZm9ybWF0aW9uLCB3aGljaCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGVuIHVzZXMgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuCiAKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIHByb3RvY29sIGZvciBmaW5kZXJzIGFuZCBsb2FkZXJzIGluIG1vcmUKIGRldGFpbCwgaW5jbHVkaW5nIGhvdyB5b3UgY2FuIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgbmV3IG9uZXMgdG8gZXh0ZW5kIHRoZQogaW1wb3J0IG1hY2hpbmVyeS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbiwgZmluZGVycyByZXR1cm5lZCA6dGVybTpgbG9hZGVycyA8bG9hZGVyPmAKKyAgIGRpcmVjdGx5LCB3aGVyZWFzIG5vdyB0aGV5IHJldHVybiBtb2R1bGUgc3BlY3Mgd2hpY2ggKmNvbnRhaW4qIGxvYWRlcnMuCisgICBMb2FkZXJzIGFyZSBzdGlsbCB1c2VkIGR1cmluZyBpbXBvcnQgYnV0IGhhdmUgZmV3ZXIgcmVzcG9uc2liaWxpdGllcy4KIAogSW1wb3J0IGhvb2tzCiAtLS0tLS0tLS0tLS0KQEAgLTI3MCwyNCArMjc1LDIzIEBACiAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IHN5cy5tZXRhX3BhdGgKLSAgICBwYWlyOiBmaW5kZXI7IGZpbmRfbW9kdWxlCi0gICAgcGFpcjogZmluZGVyOyBmaW5kX2xvYWRlcgorICAgIHBhaXI6IGZpbmRlcjsgZmluZF9zcGVjCiAKIFdoZW4gdGhlIG5hbWVkIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgUHl0aG9uIG5leHQKIHNlYXJjaGVzIDpkYXRhOmBzeXMubWV0YV9wYXRoYCwgd2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIG1ldGEgcGF0aCBmaW5kZXIKIG9iamVjdHMuICBUaGVzZSBmaW5kZXJzIGFyZSBxdWVyaWVkIGluIG9yZGVyIHRvIHNlZSBpZiB0aGV5IGtub3cgaG93IHRvIGhhbmRsZQogdGhlIG5hbWVkIG1vZHVsZS4gIE1ldGEgcGF0aCBmaW5kZXJzIG11c3QgaW1wbGVtZW50IGEgbWV0aG9kIGNhbGxlZAotOm1ldGg6YGZpbmRfbW9kdWxlKClgIHdoaWNoIHRha2VzIHR3byBhcmd1bWVudHMsIGEgbmFtZSBhbmQgYW4gaW1wb3J0IHBhdGguCis6bWV0aDpgZmluZF9zcGVjKClgIHdoaWNoIHRha2VzIHR3byBhcmd1bWVudHMsIGEgbmFtZSBhbmQgYW4gaW1wb3J0IHBhdGguCiBUaGUgbWV0YSBwYXRoIGZpbmRlciBjYW4gdXNlIGFueSBzdHJhdGVneSBpdCB3YW50cyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBjYW4KIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlIG9yIG5vdC4KIAogSWYgdGhlIG1ldGEgcGF0aCBmaW5kZXIga25vd3MgaG93IHRvIGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGEKLWxvYWRlciBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgorc3BlYyBvYmplY3QuICBJZiBpdCBjYW5ub3QgaGFuZGxlIHRoZSBuYW1lZCBtb2R1bGUsIGl0IHJldHVybnMgYGBOb25lYGAuICBJZgogOmRhdGE6YHN5cy5tZXRhX3BhdGhgIHByb2Nlc3NpbmcgcmVhY2hlcyB0aGUgZW5kIG9mIGl0cyBsaXN0IHdpdGhvdXQgcmV0dXJuaW5nCi1hIGxvYWRlciwgdGhlbiBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLiAgQW55IG90aGVyIGV4Y2VwdGlvbnMgcmFpc2VkCithIHNwZWMsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAogYXJlIHNpbXBseSBwcm9wYWdhdGVkIHVwLCBhYm9ydGluZyB0aGUgaW1wb3J0IHByb2Nlc3MuCiAKLVRoZSA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bworVGhlIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aCBmaW5kZXJzIGlzIGNhbGxlZCB3aXRoIHR3bwogYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nCiBpbXBvcnRlZCwgZm9yIGV4YW1wbGUgYGBmb28uYmFyLmJhemBgLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGF0aAogZW50cmllcyB0byB1c2UgZm9yIHRoZSBtb2R1bGUgc2VhcmNoLiAgRm9yIHRvcC1sZXZlbCBtb2R1bGVzLCB0aGUgc2Vjb25kCkBAIC0yOTksMTIgKzMwMywxMiBAQAogVGhlIG1ldGEgcGF0aCBtYXkgYmUgdHJhdmVyc2VkIG11bHRpcGxlIHRpbWVzIGZvciBhIHNpbmdsZSBpbXBvcnQgcmVxdWVzdC4KIEZvciBleGFtcGxlLCBhc3N1bWluZyBub25lIG9mIHRoZSBtb2R1bGVzIGludm9sdmVkIGhhcyBhbHJlYWR5IGJlZW4gY2FjaGVkLAogaW1wb3J0aW5nIGBgZm9vLmJhci5iYXpgYCB3aWxsIGZpcnN0IHBlcmZvcm0gYSB0b3AgbGV2ZWwgaW1wb3J0LCBjYWxsaW5nCi1gYG1wZi5maW5kX21vZHVsZSgiZm9vIiwgTm9uZSlgYCBvbiBlYWNoIG1ldGEgcGF0aCBmaW5kZXIgKGBgbXBmYGApLiBBZnRlcgorYGBtcGYuZmluZF9zcGVjKCJmb28iLCBOb25lKWBgIG9uIGVhY2ggbWV0YSBwYXRoIGZpbmRlciAoYGBtcGZgYCkuIEFmdGVyCiBgYGZvb2BgIGhhcyBiZWVuIGltcG9ydGVkLCBgYGZvby5iYXJgYCB3aWxsIGJlIGltcG9ydGVkIGJ5IHRyYXZlcnNpbmcgdGhlCiBtZXRhIHBhdGggYSBzZWNvbmQgdGltZSwgY2FsbGluZwotYGBtcGYuZmluZF9tb2R1bGUoImZvby5iYXIiLCBmb28uX19wYXRoX18pYGAuIE9uY2UgYGBmb28uYmFyYGAgaGFzIGJlZW4KK2BgbXBmLmZpbmRfc3BlYygiZm9vLmJhciIsIGZvby5fX3BhdGhfXylgYC4gT25jZSBgYGZvby5iYXJgYCBoYXMgYmVlbgogaW1wb3J0ZWQsIHRoZSBmaW5hbCB0cmF2ZXJzYWwgd2lsbCBjYWxsCi1gYG1wZi5maW5kX21vZHVsZSgiZm9vLmJhci5iYXoiLCBmb28uYmFyLl9fcGF0aF9fKWBgLgorYGBtcGYuZmluZF9zcGVjKCJmb28uYmFyLmJheiIsIGZvby5iYXIuX19wYXRoX18pYGAuCiAKIFNvbWUgbWV0YSBwYXRoIGZpbmRlcnMgb25seSBzdXBwb3J0IHRvcCBsZXZlbCBpbXBvcnRzLiBUaGVzZSBpbXBvcnRlcnMgd2lsbAogYWx3YXlzIHJldHVybiBgYE5vbmVgYCB3aGVuIGFueXRoaW5nIG90aGVyIHRoYW4gYGBOb25lYGAgaXMgcGFzc2VkIGFzIHRoZQpAQCAtMzE1LDEyOSArMzE5LDIzMSBAQAogbW9kdWxlcywgYW5kIG9uZSB0aGF0IGtub3dzIGhvdyB0byBpbXBvcnQgbW9kdWxlcyBmcm9tIGFuIDp0ZXJtOmBpbXBvcnQgcGF0aGAKIChpLmUuIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgKS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBmaW5kX3NwZWMoKSBtZXRob2Qgb2YgbWV0YSBwYXRoIGZpbmRlcnMgcmVwbGFjZWQgOm1ldGg6YGZpbmRfbW9kdWxlKClgLgorICAgd2hpY2ggaXMgbm93IGRlcHJlY2F0ZWQuICBXaGlsZSBpdCB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgd2l0aG91dCBjaGFuZ2UsCisgICB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHRyeSBpdCBvbmx5IGlmIHRoZSBmaW5kZXIgZG9lcyBub3QgaW1wbGVtZW50CisgICBmaW5kX3NwZWMoKS4KIAotTG9hZGVycworCitMb2FkaW5nCiA9PT09PT09CiAKLUlmIGFuZCB3aGVuIGEgbW9kdWxlIGxvYWRlciBpcyBmb3VuZCBpdHMKLTptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIG1ldGhvZCBpcyBjYWxsZWQsIHdpdGggYSBzaW5nbGUKLWFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZC4gIFRoaXMgbWV0aG9kCi1oYXMgc2V2ZXJhbCByZXNwb25zaWJpbGl0aWVzLCBhbmQgc2hvdWxkIHJldHVybiB0aGUgbW9kdWxlIG9iamVjdCBpdCBoYXMKLWxvYWRlZCBbI2ZubG9dXy4gIElmIGl0IGNhbm5vdCBsb2FkIHRoZSBtb2R1bGUsIGl0IHNob3VsZCByYWlzZSBhbgotOmV4YzpgSW1wb3J0RXJyb3JgLCBhbHRob3VnaCBhbnkgb3RoZXIgZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcKLTptZXRoOmBsb2FkX21vZHVsZSgpYCB3aWxsIGJlIHByb3BhZ2F0ZWQuCitJZiBhbmQgd2hlbiBhIG1vZHVsZSBzcGVjIGlzIGZvdW5kLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZSBpdCAoYW5kCit0aGUgbG9hZGVyIGl0IGNvbnRhaW5zKSB3aGVuIGxvYWRpbmcgdGhlIG1vZHVsZS4gIEhlcmUgaXMgYW4gYXBwcm94aW1hdGlvbgorb2Ygd2hhdCBoYXBwZW5zIGR1cmluZyB0aGUgbG9hZGluZyBwb3J0aW9uIG9mIGltcG9ydDo6CiAKLUluIG1hbnkgY2FzZXMsIHRoZSBmaW5kZXIgYW5kIGxvYWRlciBjYW4gYmUgdGhlIHNhbWUgb2JqZWN0OyBpbiBzdWNoIGNhc2VzIHRoZQotOm1ldGg6YGZpbmRlci5maW5kX21vZHVsZSgpYCB3b3VsZCBqdXN0IHJldHVybiBgYHNlbGZgYC4KKyAgICBtb2R1bGUgPSBOb25lCisgICAgaWYgc3BlYy5sb2FkZXIgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoc3BlYy5sb2FkZXIsICdjcmVhdGVfbW9kdWxlJyk6CisgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmNyZWF0ZV9tb2R1bGUoc3BlYykKKyAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgbW9kdWxlID0gTW9kdWxlVHlwZShzcGVjLm5hbWUpCisgICAgIyBUaGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgZ2V0IHNldCBoZXJlOgorICAgIF9pbml0X21vZHVsZV9hdHRycyhzcGVjLCBtb2R1bGUpCiAKLUxvYWRlcnMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgorICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICBzeXMubW9kdWxlc1tzcGVjLm5hbWVdID0gbW9kdWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHVuc3VwcG9ydGVkCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgIGVsaWYgbm90IGhhc2F0dHIoc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICBtb2R1bGUgPSBzcGVjLmxvYWRlci5sb2FkX21vZHVsZShzcGVjLm5hbWUpCisgICAgZWxzZToKKyAgICAgICAgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXSA9IG1vZHVsZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzcGVjLmxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmFpc2UKKyAgICBtb2R1bGVfdG9fcmV0dXJuID0gc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorCitOb3RlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczoKIAogICogSWYgdGhlcmUgaXMgYW4gZXhpc3RpbmcgbW9kdWxlIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBuYW1lIGluCi0gICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyIG11c3QgdXNlIHRoYXQgZXhpc3RpbmcgbW9kdWxlLiAgKE90aGVyd2lzZSwKLSAgIDpmdW5jOmBpbXAucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUgbmFtZWQgbW9kdWxlIGRvZXMKLSAgIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyIG11c3QgY3JlYXRlIGEgbmV3IG1vZHVsZQotICAgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KKyAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIGltcG9ydCB3aWxsIGhhdmUgYWxyZWFkeSByZXR1cm5lZCBpdC4KIAotICAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgKm11c3QqIGV4aXN0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIKKyAqIFRoZSBtb2R1bGUgd2lsbCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCiAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUuICBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSB0aGUgbW9kdWxlIGNvZGUgbWF5CiAgICAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgaW1wb3J0IGl0c2VsZjsgYWRkaW5nIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AKICAgIGJlZm9yZWhhbmQgcHJldmVudHMgdW5ib3VuZGVkIHJlY3Vyc2lvbiBpbiB0aGUgd29yc3QgY2FzZSBhbmQgbXVsdGlwbGUKICAgIGxvYWRpbmcgaW4gdGhlIGJlc3QuCiAKLSAgIElmIGxvYWRpbmcgZmFpbHMsIHRoZSBsb2FkZXIgbXVzdCByZW1vdmUgYW55IG1vZHVsZXMgaXQgaGFzIGluc2VydGVkIGludG8KLSAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIGJ1dCBpdCBtdXN0IHJlbW92ZSAqKm9ubHkqKiB0aGUgZmFpbGluZyBtb2R1bGUsIGFuZAotICAgb25seSBpZiB0aGUgbG9hZGVyIGl0c2VsZiBoYXMgbG9hZGVkIGl0IGV4cGxpY2l0bHkuICBBbnkgbW9kdWxlIGFscmVhZHkgaW4KLSAgIHRoZSA6ZGF0YTpgc3lzLm1vZHVsZXNgIGNhY2hlLCBhbmQgYW55IG1vZHVsZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkCi0gICBhcyBhIHNpZGUtZWZmZWN0LCBtdXN0IHJlbWFpbiBpbiB0aGUgY2FjaGUuCisgKiBJZiBsb2FkaW5nIGZhaWxzLCB0aGUgZmFpbGluZyBtb2R1bGUgLS0gYW5kIG9ubHkgdGhlIGZhaWxpbmcgbW9kdWxlIC0tCisgICBnZXRzIHJlbW92ZWQgZnJvbSA6ZGF0YTpgc3lzLm1vZHVsZXNgLiAgQW55IG1vZHVsZSBhbHJlYWR5IGluIHRoZQorICAgOmRhdGE6YHN5cy5tb2R1bGVzYCBjYWNoZSwgYW5kIGFueSBtb2R1bGUgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZAorICAgYXMgYSBzaWRlLWVmZmVjdCwgbXVzdCByZW1haW4gaW4gdGhlIGNhY2hlLiAgVGhpcyBjb250cmFzdHMgd2l0aAorICAgcmVsb2FkaW5nIHdoZXJlIGV2ZW4gdGhlIGZhaWxpbmcgbW9kdWxlIGlzIGxlZnQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBJZiBzZXQsIHRoaXMKLSAgIGF0dHJpYnV0ZSdzIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcuICBUaGUgbG9hZGVyIG1heSBvcHQgdG8gbGVhdmUKLSAgIGBgX19maWxlX19gYCB1bnNldCBpZiBpdCBoYXMgbm8gc2VtYW50aWMgbWVhbmluZyAoZS5nLiBhIG1vZHVsZSBsb2FkZWQgZnJvbQotICAgYSBkYXRhYmFzZSkuIElmIGBgX19maWxlX19gYCBpcyBzZXQsIGl0IG1heSBhbHNvIGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUKLSAgIGBgX19jYWNoZWRfX2BgIGF0dHJpYnV0ZSB3aGljaCBpcyB0aGUgcGF0aCB0byBhbnkgY29tcGlsZWQgdmVyc2lvbiBvZiB0aGUKLSAgIGNvZGUgKGUuZy4gYnl0ZS1jb21waWxlZCBmaWxlKS4gVGhlIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdCB0byBzZXQgdGhpcwotICAgYXR0cmlidXRlOyB0aGUgcGF0aCBjYW4gc2ltcGx5IHBvaW50IHRvIHdoZXRoZXIgdGhlIGNvbXBpbGVkIGZpbGUgd291bGQKLSAgIGV4aXN0IChzZWUgOnBlcDpgMzE0N2ApLgorICogQWZ0ZXIgdGhlIG1vZHVsZSBpcyBjcmVhdGVkIGJ1dCBiZWZvcmUgZXhlY3V0aW9uLCB0aGUgaW1wb3J0IG1hY2hpbmVyeQorICAgc2V0cyB0aGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgKCJpbml0X21vZHVsZV9hdHRycyIpLCBhcworICAgc3VtbWFyaXplZCBpbiBhIDpyZWY6YGxhdGVyIHNlY3Rpb24gPGltcG9ydC1tb2QtYXR0cnM+YC4KIAotICogVGhlIGxvYWRlciBtYXkgc2V0IHRoZSBgYF9fbmFtZV9fYGAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUuICBXaGlsZSBub3QKLSAgIHJlcXVpcmVkLCBzZXR0aW5nIHRoaXMgYXR0cmlidXRlIGlzIGhpZ2hseSByZWNvbW1lbmRlZCBzbyB0aGF0IHRoZQotICAgOm1ldGg6YHJlcHIoKWAgb2YgdGhlIG1vZHVsZSBpcyBtb3JlIGluZm9ybWF0aXZlLgorICogTW9kdWxlIGV4ZWN1dGlvbiBpcyB0aGUga2V5IG1vbWVudCBvZiBsb2FkaW5nIGluIHdoaWNoIHRoZSBtb2R1bGUncworICAgbmFtZXNwYWNlIGdldHMgcG9wdWxhdGVkLiAgRXhlY3V0aW9uIGlzIGVudGlyZWx5IGRlbGVnYXRlZCB0byB0aGUKKyAgIGxvYWRlciwgd2hpY2ggZ2V0cyB0byBkZWNpZGUgd2hhdCBnZXRzIHBvcHVsYXRlZCBhbmQgaG93LgogCi0gKiBJZiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSAoZWl0aGVyIHJlZ3VsYXIgb3IgbmFtZXNwYWNlKSwgdGhlIGxvYWRlciBtdXN0Ci0gICBzZXQgdGhlIG1vZHVsZSBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlLiAgVGhlIHZhbHVlIG11c3QgYmUKLSAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UKLSAgIHRvIHRoZSBsb2FkZXIuIElmIGBgX19wYXRoX19gYCBpcyBub3QgZW1wdHksIGl0IG11c3QgcHJvZHVjZSBzdHJpbmdzCi0gICB3aGVuIGl0ZXJhdGVkIG92ZXIuIE1vcmUgZGV0YWlscyBvbiB0aGUgc2VtYW50aWNzIG9mIGBgX19wYXRoX19gYCBhcmUKLSAgIGdpdmVuIDpyZWY6YGJlbG93IDxwYWNrYWdlLXBhdGgtcnVsZXM+YC4KKyAqIFRoZSBtb2R1bGUgY3JlYXRlZCBkdXJpbmcgbG9hZGluZyBhbmQgcGFzc2VkIHRvIGV4ZWNfbW9kdWxlKCkgbWF5CisgICBub3QgYmUgdGhlIG9uZSByZXR1cm5lZCBhdCB0aGUgZW5kIG9mIGltcG9ydCBbI2ZubG9dXy4KIAotICogVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0IGxvYWRlZAotICAgdGhlIG1vZHVsZS4gIFRoaXMgaXMgbW9zdGx5IGZvciBpbnRyb3NwZWN0aW9uIGFuZCByZWxvYWRpbmcsIGJ1dCBjYW4gYmUKLSAgIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcKLSAgIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBpbXBvcnQgc3lzdGVtIGhhcyB0YWtlbiBvdmVyIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCisgICBsb2FkZXJzLiAgVGhlc2Ugd2VyZSBwcmV2aW91c2x5IHBlcmZvcm1lZCBieSB0aGUgOm1ldGg6YGxvYWRfbW9kdWxlKClgCisgICBtZXRob2QuCiAKLSAqIFRoZSBtb2R1bGUncyBgYF9fcGFja2FnZV9fYGAgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQuICBJdHMgdmFsdWUgbXVzdCBiZSBhCi0gICBzdHJpbmcsIGJ1dCBpdCBjYW4gYmUgdGhlIHNhbWUgdmFsdWUgYXMgaXRzIGBgX19uYW1lX19gYC4gIElmIHRoZSBhdHRyaWJ1dGUKLSAgIGlzIHNldCB0byBgYE5vbmVgYCBvciBpcyBtaXNzaW5nLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGZpbGwgaXQgaW4gd2l0aCBhCi0gICBtb3JlIGFwcHJvcHJpYXRlIHZhbHVlLiAgV2hlbiB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgaXRzIGBgX19wYWNrYWdlX19gYAotICAgdmFsdWUgc2hvdWxkIGJlIHNldCB0byBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbiB0aGUgbW9kdWxlIGlzIG5vdCBhIHBhY2thZ2UsCi0gICBgYF9fcGFja2FnZV9fYGAgc2hvdWxkIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGZvciB0b3AtbGV2ZWwgbW9kdWxlcywgb3IKLSAgIGZvciBzdWJtb2R1bGVzLCB0byB0aGUgcGFyZW50IHBhY2thZ2UncyBuYW1lLiAgU2VlIDpwZXA6YDM2NmAgZm9yIGZ1cnRoZXIKLSAgIGRldGFpbHMuCitMb2FkZXJzCistLS0tLS0tCiAKLSAgIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgaW5zdGVhZCBvZiBgYF9fbmFtZV9fYGAgdG8gY2FsY3VsYXRlIGV4cGxpY2l0Ci0gICByZWxhdGl2ZSBpbXBvcnRzIGZvciBtYWluIG1vZHVsZXMsIGFzIGRlZmluZWQgaW4gOnBlcDpgMzY2YC4KK01vZHVsZSBsb2FkZXJzIHByb3ZpZGUgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIG9mIGxvYWRpbmc6IG1vZHVsZSBleGVjdXRpb24uCitUaGUgaW1wb3J0IG1hY2hpbmVyeSBjYWxscyB0aGUgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZSgpYAorbWV0aG9kIHdpdGggYSBzaW5nbGUgYXJndW1lbnQsIHRoZSBtb2R1bGUgb2JqZWN0IHRvIGV4ZWN1dGUuICBBbnkgdmFsdWUKK3JldHVybmVkIGZyb20gZXhlY19tb2R1bGUoKSBpcyBpZ25vcmVkLgorCitMb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKIAogICogSWYgdGhlIG1vZHVsZSBpcyBhIFB5dGhvbiBtb2R1bGUgKGFzIG9wcG9zZWQgdG8gYSBidWlsdC1pbiBtb2R1bGUgb3IgYQogICAgZHluYW1pY2FsbHkgbG9hZGVkIGV4dGVuc2lvbiksIHRoZSBsb2FkZXIgc2hvdWxkIGV4ZWN1dGUgdGhlIG1vZHVsZSdzIGNvZGUKICAgIGluIHRoZSBtb2R1bGUncyBnbG9iYWwgbmFtZSBzcGFjZSAoYGBtb2R1bGUuX19kaWN0X19gYCkuCiAKKyAqIElmIGxvYWRlciBjYW5ub3QgZXhlY3V0ZSB0aGUgbW9kdWxlLCBpdCBzaG91bGQgcmFpc2UgYW4KKyAgIDpleGM6YEltcG9ydEVycm9yYCwgYWx0aG91Z2ggYW55IG90aGVyIGV4Y2VwdGlvbiByYWlzZWQgZHVyaW5nCisgICA6bWV0aDpgZXhlY19tb2R1bGUoKWAgd2lsbCBiZSBwcm9wYWdhdGVkLgogCi1Nb2R1bGUgcmVwcnMKLS0tLS0tLS0tLS0tLQorSW4gbWFueSBjYXNlcywgdGhlIGZpbmRlciBhbmQgbG9hZGVyIGNhbiBiZSB0aGUgc2FtZSBvYmplY3Q7IGluIHN1Y2ggY2FzZXMgdGhlCis6bWV0aDpgZmluZGVyLmZpbmRfc3BlYygpYCB3b3VsZCBqdXN0IHJldHVybiBhIHNwZWMgd2l0aCB0aGUgbG9hZGVyIHNldAordG8gYGBzZWxmYGAuCiAKLUJ5IGRlZmF1bHQsIGFsbCBtb2R1bGVzIGhhdmUgYSB1c2FibGUgcmVwciwgaG93ZXZlciBkZXBlbmRpbmcgb24gdGhlCi1hdHRyaWJ1dGVzIHNldCBhYm92ZSwgYW5kIGhvb2tzIGluIHRoZSBsb2FkZXIsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5IGNvbnRyb2wKLXRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorTW9kdWxlIGxvYWRlcnMgbWF5IG9wdCBpbiB0byBjcmVhdGluZyB0aGUgbW9kdWxlIG9iamVjdCBkdXJpbmcgbG9hZGluZworYnkgaW1wbGVtZW50aW5nIGEgOm1ldGg6YGNyZWF0ZV9tb2R1bGUoKWAgbWV0aG9kLiAgSXQgdGFrZXMgb25lIGFyZ3VtZW50LAordGhlIG1vZHVsZSBzcGVjLCBhbmQgcmV0dXJucyB0aGUgbmV3IG1vZHVsZSBvYmplY3QgdG8gdXNlIGR1cmluZyBsb2FkaW5nLgorY3JlYXRlX21vZHVsZSgpIGRvZXMgbm90IG5lZWQgdG8gc2V0IGFueSBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUgb2JqZWN0LgorSWYgdGhlIGxvYWRlciBkb2VzIG5vdCBkZWZpbmUgY3JlYXRlX21vZHVsZSgpLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsCitjcmVhdGUgdGhlIG5ldyBtb2R1bGUgaXRzZWxmLgogCi1Mb2FkZXJzIG1heSBpbXBsZW1lbnQgYSA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kIHdoaWNoIHRha2VzIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIG1vZHVsZSBvYmplY3QuICBXaGVuIGBgcmVwcihtb2R1bGUpYGAgaXMgY2FsbGVkIGZvciBhIG1vZHVsZQotd2l0aCBhIGxvYWRlciBzdXBwb3J0aW5nIHRoaXMgcHJvdG9jb2wsIHdoYXRldmVyIGlzIHJldHVybmVkIGZyb20KLWBgbW9kdWxlLl9fbG9hZGVyX18ubW9kdWxlX3JlcHIobW9kdWxlKWBgIGlzIHJldHVybmVkIGFzIHRoZSBtb2R1bGUncyByZXByCi13aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gIFRoaXMgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIFRoZSBjcmVhdGVfbW9kdWxlKCkgbWV0aG9kIG9mIGxvYWRlcnMuCiAKLUlmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSwgb3IgdGhlIGxvYWRlciBoYXMgbm8KLTptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIHRoZW4gdGhlIG1vZHVsZSBvYmplY3QgaW1wbGVtZW50YXRpb24gaXRzZWxmCi13aWxsIGNyYWZ0IGEgZGVmYXVsdCByZXByIHVzaW5nIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gIEl0IHdpbGwKLXRyeSB0byB1c2UgdGhlIGBgbW9kdWxlLl9fbmFtZV9fYGAsIGBgbW9kdWxlLl9fZmlsZV9fYGAsIGFuZAotYGBtb2R1bGUuX19sb2FkZXJfX2BgIGFzIGlucHV0IGludG8gdGhlIHJlcHIsIHdpdGggZGVmYXVsdHMgZm9yIHdoYXRldmVyCi1pbmZvcm1hdGlvbiBpcyBtaXNzaW5nLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBsb2FkX21vZHVsZSgpIG1ldGhvZCB3YXMgcmVwbGFjZWQgYnkgZXhlY19tb2R1bGUoKSBhbmQgdGhlIGltcG9ydAorICAgbWFjaGluZXJ5IGFzc3VtZWQgYWxsIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mIGxvYWRpbmcuCiAKLUhlcmUgYXJlIHRoZSBleGFjdCBydWxlcyB1c2VkOgorICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBsb2FkZXJzLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZQorICAgdGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGUoKWAgbWV0aG9kIG9mIGxvYWRlcnMgaWYgaXQKKyAgIGV4aXN0cyBhbmQgdGhlIGxvYWRlciBkb2VzIG5vdCBhbHNvIGltcGxlbWVudCBleGVjX21vZHVsZSgpLiAgSG93ZXZlciwKKyAgIGxvYWRfbW9kdWxlKCkgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgbG9hZGVycyBzaG91bGQgaW1wbGVtZW50CisgICBleGVjX21vZHVsZSgpIGluc3RlYWQuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2xvYWRlcl9fYGAgYW5kIHRoYXQgbG9hZGVyIGhhcyBhCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kLCBjYWxsIGl0IHdpdGggYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZQotICAgbW9kdWxlIG9iamVjdC4gIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB1c2VkIGFzIHRoZSBtb2R1bGUncyByZXByLgorICAgVGhlIGxvYWRfbW9kdWxlKCkgbWV0aG9kIG11c3QgaW1wbGVtZW50IGFsbCB0aGUgYm9pbGVycGxhdGUgbG9hZGluZworICAgZnVuY3Rpb25hbGl0eSBkZXNjcmliZWQgYWJvdmUgaW4gYWRkaXRpb24gdG8gZXhlY3V0aW5nIHRoZSBtb2R1bGUuICBBbGwKKyAgIHRoZSBzYW1lIGNvbnN0cmFpbnRzIGFwcGx5LCB3aXRoIHNvbWUgYWRkaXRpb25hbCBjbGFyaWZpY2F0aW9uOgogCi0gKiBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIDptZXRoOmBtb2R1bGVfcmVwcigpYCwgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQKLSAgIGFuZCBkaXNjYXJkZWQsIGFuZCB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIG1vZHVsZSdzIHJlcHIgY29udGludWVzIGFzIGlmCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgZGlkIG5vdCBleGlzdC4KKyAgICAqIElmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG1vZHVsZSBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbgorICAgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlciBtdXN0IHVzZSB0aGF0IGV4aXN0aW5nIG1vZHVsZS4KKyAgICAgIChPdGhlcndpc2UsIDpmdW5jOmBpbXAucmVsb2FkYCB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4pICBJZiB0aGUKKyAgICAgIG5hbWVkIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGUgbG9hZGVyCisgICAgICBtdXN0IGNyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0IGFuZCBhZGQgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYC4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKLSAgIG1vZHVsZSdzIHJlcHIuCisgICAgKiBUaGUgbW9kdWxlICptdXN0KiBleGlzdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyCisgICAgICBleGVjdXRlcyB0aGUgbW9kdWxlIGNvZGUsIHRvIHByZXZlbnQgdW5ib3VuZGVkIHJlY3Vyc2lvbiBvciBtdWx0aXBsZQorICAgICAgbG9hZGluZy4KIAotICogSWYgdGhlIG1vZHVsZSBoYXMgbm8gYGBfX2ZpbGVfX2BgIGJ1dCBkb2VzIGhhdmUgYSBgYF9fbG9hZGVyX19gYCwgdGhlbiB0aGUKLSAgIGxvYWRlcidzIHJlcHIgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBtb2R1bGUncyByZXByLgorICAgICogSWYgbG9hZGluZyBmYWlscywgdGhlIGxvYWRlciBtdXN0IHJlbW92ZSBhbnkgbW9kdWxlcyBpdCBoYXMgaW5zZXJ0ZWQKKyAgICAgIGludG8gOmRhdGE6YHN5cy5tb2R1bGVzYCwgYnV0IGl0IG11c3QgcmVtb3ZlICoqb25seSoqIHRoZSBmYWlsaW5nCisgICAgICBtb2R1bGUsIGFuZCBvbmx5IGlmIHRoZSBsb2FkZXIgaXRzZWxmIGhhcyBsb2FkZWQgaXQgZXhwbGljaXRseS4KIAotICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorTW9kdWxlIHNwZWMKKy0tLS0tLS0tLS0tCiAKLVRoaXMgZXhhbXBsZSwgZnJvbSA6cGVwOmA0MjBgIHNob3dzIGhvdyBhIGxvYWRlciBjYW4gY3JhZnQgaXRzIG93biBtb2R1bGUKLXJlcHI6OgorVGhlIGltcG9ydCBtYWNoaW5lcnkgdXNlcyBhIHZhcmlldHkgb2YgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBtb2R1bGUKK2R1cmluZyBpbXBvcnQsIGVzcGVjaWFsbHkgYmVmb3JlIGxvYWRpbmcuICBNb3N0IG9mIHRoZSBpbmZvcm1hdGlvbiBpcworY29tbW9uIHRvIGFsbCBtb2R1bGVzLiAgVGhlIHB1cnBvc2Ugb2YgYSBtb2R1bGUncyBzcGVjIGlzIHRvIGVuY2Fwc3VsYXRlCit0aGlzIGltcG9ydC1yZWxhdGVkIGluZm9ybWF0aW9uIG9uIGEgcGVyLW1vZHVsZSBiYXNpcy4KIAotICAgIGNsYXNzIE5hbWVzcGFjZUxvYWRlcjoKLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAobmFtZXNwYWNlKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCitVc2luZyBhIHNwZWMgZHVyaW5nIGltcG9ydCBhbGxvd3Mgc3RhdGUgdG8gYmUgdHJhbnNmZXJyZWQgYmV0d2VlbiBpbXBvcnQKK3N5c3RlbSBjb21wb25lbnRzLCBlLmcuIGJldHdlZW4gdGhlIGZpbmRlciB0aGF0IGNyZWF0ZXMgdGhlIG1vZHVsZSBzcGVjCithbmQgdGhlIGxvYWRlciB0aGF0IGV4ZWN1dGVzIGl0LiAgTW9zdCBpbXBvcnRhbnRseSwgaXQgYWxsb3dzIHRoZQoraW1wb3J0IG1hY2hpbmVyeSB0byBwZXJmb3JtIHRoZSBib2lsZXJwbGF0ZSBvcGVyYXRpb25zIG9mIGxvYWRpbmcsCit3aGVyZWFzIHdpdGhvdXQgYSBtb2R1bGUgc3BlYyB0aGUgbG9hZGVyIGhhZCB0aGF0IHJlc3BvbnNpYmlsaXR5LgogCitTZWUgOmNsYXNzOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5Nb2R1bGVTcGVjYCBmb3IgbW9yZSBzcGVjaWZpY3Mgb24gd2hhdAoraW5mb3JtYXRpb24gYSBtb2R1bGUncyBzcGVjIG1heSBob2xkLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gX2ltcG9ydC1tb2QtYXR0cnM6CisKK0ltcG9ydC1yZWxhdGVkIG1vZHVsZSBhdHRyaWJ1dGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgaW1wb3J0IG1hY2hpbmVyeSBmaWxscyBpbiB0aGVzZSBhdHRyaWJ1dGVzIG9uIGVhY2ggbW9kdWxlIG9iamVjdAorZHVyaW5nIGxvYWRpbmcsIGJhc2VkIG9uIHRoZSBtb2R1bGUncyBzcGVjLCBiZWZvcmUgdGhlIGxvYWRlciBleGVjdXRlcwordGhlIG1vZHVsZS4KKworLi4gYXR0cmlidXRlOjogX19uYW1lX18KKworICAgVGhlIGBgX19uYW1lX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGZ1bGx5LXF1YWxpZmllZCBuYW1lIG9mCisgICB0aGUgbW9kdWxlLiAgVGhpcyBuYW1lIGlzIHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIG1vZHVsZSBpbgorICAgdGhlIGltcG9ydCBzeXN0ZW0uCisKKy4uIGF0dHJpYnV0ZTo6IF9fbG9hZGVyX18KKworICAgVGhlIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgbG9hZGVyIG9iamVjdCB0aGF0CisgICB0aGUgaW1wb3J0IG1hY2hpbmVyeSB1c2VkIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyBtb3N0bHkKKyAgIGZvciBpbnRyb3NwZWN0aW9uLCBidXQgY2FuIGJlIHVzZWQgZm9yIGFkZGl0aW9uYWwgbG9hZGVyLXNwZWNpZmljCisgICBmdW5jdGlvbmFsaXR5LCBmb3IgZXhhbXBsZSBnZXR0aW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgbG9hZGVyLgorCisuLiBhdHRyaWJ1dGU6OiBfX3BhY2thZ2VfXworCisgICBUaGUgbW9kdWxlJ3MgYGBfX3BhY2thZ2VfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldC4gIEl0cyB2YWx1ZSBtdXN0CisgICBiZSBhIHN0cmluZywgYnV0IGl0IGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbgorICAgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGl0cyBgYF9fcGFja2FnZV9fYGAgdmFsdWUgc2hvdWxkIGJlIHNldCB0bworICAgaXRzIGBgX19uYW1lX19gYC4gIFdoZW4gdGhlIG1vZHVsZSBpcyBub3QgYSBwYWNrYWdlLCBgYF9fcGFja2FnZV9fYGAKKyAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZyBmb3IgdG9wLWxldmVsIG1vZHVsZXMsIG9yIGZvcgorICAgc3VibW9kdWxlcywgdG8gdGhlIHBhcmVudCBwYWNrYWdlJ3MgbmFtZS4gIFNlZSA6cGVwOmAzNjZgIGZvciBmdXJ0aGVyCisgICBkZXRhaWxzLgorCisgICBUaGlzIGF0dHJpYnV0ZSBpcyB1c2VkIGluc3RlYWQgb2YgYGBfX25hbWVfX2BgIHRvIGNhbGN1bGF0ZSBleHBsaWNpdAorICAgcmVsYXRpdmUgaW1wb3J0cyBmb3IgbWFpbiBtb2R1bGVzLCBhcyBkZWZpbmVkIGluIDpwZXA6YDM2NmAuCisKKy4uIGF0dHJpYnV0ZTo6IF9fc3BlY19fCisKKyAgIFRoZSBgYF9fc3BlY19fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBtb2R1bGUgc3BlYyB0aGF0IHdhcworICAgdXNlZCB3aGVuIGltcG9ydGluZyB0aGUgbW9kdWxlLiAgVGhpcyBpcyB1c2VkIHByaW1hcmlseSBmb3IKKyAgIGludHJvc3BlY3Rpb24gYW5kIGR1cmluZyByZWxvYWRpbmcuCisKKy4uIGF0dHJpYnV0ZTo6IF9fcGF0aF9fCisKKyAgIElmIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlIChlaXRoZXIgcmVndWxhciBvciBuYW1lc3BhY2UpLCB0aGUgbW9kdWxlCisgICBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0LiAgVGhlIHZhbHVlIG11c3QgYmUKKyAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UuCisgICBJZiBgYF9fcGF0aF9fYGAgaXMgbm90IGVtcHR5LCBpdCBtdXN0IHByb2R1Y2Ugc3RyaW5ncyB3aGVuIGl0ZXJhdGVkCisgICBvdmVyLiBNb3JlIGRldGFpbHMgb24gdGhlIHNlbWFudGljcyBvZiBgYF9fcGF0aF9fYGAgYXJlIGdpdmVuCisgICA6cmVmOmBiZWxvdyA8cGFja2FnZS1wYXRoLXJ1bGVzPmAuCisKKyAgIE5vbi1wYWNrYWdlIG1vZHVsZXMgc2hvdWxkIG5vdCBoYXZlIGEgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4KKworLi4gYXR0cmlidXRlOjogX19maWxlX18KKy4uIGF0dHJpYnV0ZTo6IF9fY2FjaGVkX18KKworICAgYGBfX2ZpbGVfX2BgIGlzIG9wdGlvbmFsLiBJZiBzZXQsIHRoaXMgYXR0cmlidXRlJ3MgdmFsdWUgbXVzdCBiZSBhCisgICBzdHJpbmcuICBUaGUgaW1wb3J0IHN5c3RlbSBtYXkgb3B0IHRvIGxlYXZlIGBgX19maWxlX19gYCB1bnNldCBpZiBpdAorICAgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20gYSBkYXRhYmFzZSkuCisKKyAgIElmIGBgX19maWxlX19gYCBpcyBzZXQsIGl0IG1heSBhbHNvIGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUKKyAgIGBgX19jYWNoZWRfX2BgIGF0dHJpYnV0ZSB3aGljaCBpcyB0aGUgcGF0aCB0byBhbnkgY29tcGlsZWQgdmVyc2lvbiBvZgorICAgdGhlIGNvZGUgKGUuZy4gYnl0ZS1jb21waWxlZCBmaWxlKS4gVGhlIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdAorICAgdG8gc2V0IHRoaXMgYXR0cmlidXRlOyB0aGUgcGF0aCBjYW4gc2ltcGx5IHBvaW50IHRvIHdoZXJlIHRoZQorICAgY29tcGlsZWQgZmlsZSB3b3VsZCBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKworICAgSXQgaXMgYWxzbyBhcHByb3ByaWF0ZSB0byBzZXQgYGBfX2NhY2hlZF9fYGAgd2hlbiBgYF9fZmlsZV9fYGAgaXMgbm90CisgICBzZXQuICBIb3dldmVyLCB0aGF0IHNjZW5hcmlvIGlzIHF1aXRlIGF0eXBpY2FsLiAgVWx0aW1hdGVseSwgdGhlCisgICBsb2FkZXIgaXMgd2hhdCBtYWtlcyB1c2Ugb2YgYGBfX2ZpbGVfX2BgIGFuZC9vciBgYF9fY2FjaGVkX19gYC4gIFNvCisgICBpZiBhIGxvYWRlciBjYW4gbG9hZCBmcm9tIGEgY2FjaGVkIG1vZHVsZSBidXQgb3RoZXJ3aXNlIGRvZXMgbm90IGxvYWQKKyAgIGZyb20gYSBmaWxlLCB0aGF0IGF0eXBpY2FsIHNjZW5hcmlvIG1heSBiZSBhcHByb3ByaWF0ZS4KIAogLi4gX3BhY2thZ2UtcGF0aC1ydWxlczoKIApAQCAtNDYyLDkgKzU2OCw0NiBAQAogYXR0cmlidXRlLCBhbmQgdGhpcyB3YXMgdHlwaWNhbGx5IHRoZSB3YXkgbmFtZXNwYWNlIHBhY2thZ2VzIHdlcmUgaW1wbGVtZW50ZWQKIHByaW9yIHRvIDpwZXA6YDQyMGAuICBXaXRoIHRoZSBhZG9wdGlvbiBvZiA6cGVwOmA0MjBgLCBuYW1lc3BhY2UgcGFja2FnZXMgbm8KIGxvbmdlciBuZWVkIHRvIHN1cHBseSBgYF9faW5pdF9fLnB5YGAgZmlsZXMgY29udGFpbmluZyBvbmx5IGBgX19wYXRoX19gYAotbWFuaXB1bGF0aW9uIGNvZGU7IHRoZSBuYW1lc3BhY2UgbG9hZGVyIGF1dG9tYXRpY2FsbHkgc2V0cyBgYF9fcGF0aF9fYGAKK21hbmlwdWxhdGlvbiBjb2RlOyB0aGUgaW1wb3J0IG1hY2hpbmVyeSBhdXRvbWF0aWNhbGx5IHNldHMgYGBfX3BhdGhfX2BgCiBjb3JyZWN0bHkgZm9yIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KIAorTW9kdWxlIHJlcHJzCistLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgYWxsIG1vZHVsZXMgaGF2ZSBhIHVzYWJsZSByZXByLCBob3dldmVyIGRlcGVuZGluZyBvbiB0aGUKK2F0dHJpYnV0ZXMgc2V0IGFib3ZlLCBhbmQgaW4gdGhlIG1vZHVsZSdzIHNwZWMsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5Citjb250cm9sIHRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorCitJZiB0aGUgbW9kdWxlIGhhcyBhIHNwZWMgKGBgX19zcGVjX19gYCksIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdHJ5Cit0byBnZW5lcmF0ZSBhIHJlcHIgZnJvbSBpdC4gIElmIHRoYXQgZmFpbHMgb3IgdGhlcmUgaXMgbm8gc3BlYywgdGhlIGltcG9ydAorc3lzdGVtIHdpbGwgY3JhZnQgYSBkZWZhdWx0IHJlcHIgdXNpbmcgd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlCitvbiB0aGUgbW9kdWxlLiAgSXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBgYG1vZHVsZS5fX25hbWVfX2BgLAorYGBtb2R1bGUuX19maWxlX19gYCwgYW5kIGBgbW9kdWxlLl9fbG9hZGVyX19gYCBhcyBpbnB1dCBpbnRvIHRoZSByZXByLAord2l0aCBkZWZhdWx0cyBmb3Igd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgbWlzc2luZy4KKworSGVyZSBhcmUgdGhlIGV4YWN0IHJ1bGVzIHVzZWQ6CisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX3NwZWNfX2BgIGF0dHJpYnV0ZSwgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzcGVjCisgICBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXByLiAgVGhlICJuYW1lIiwgImxvYWRlciIsICJvcmlnaW4iLCBhbmQKKyAgICJoYXNfbG9jYXRpb24iIGF0dHJpYnV0ZXMgYXJlIGNvbnN1bHRlZC4KKworICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKKyAgIG1vZHVsZSdzIHJlcHIuCisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19maWxlX19gYCBidXQgZG9lcyBoYXZlIGEgYGBfX2xvYWRlcl9fYGAgdGhhdCBpcyBub3QKKyAgIGBgTm9uZWBgLCB0aGVuIHRoZSBsb2FkZXIncyByZXByIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcmVwci4KKworICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVXNlIG9mIGxvYWRlci5tb2R1bGVfcmVwcigpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHRoZSBtb2R1bGUgc3BlYworICAgaXMgbm93IHVzZWQgYnkgdGhlIGltcG9ydCBtYWNoaW5lcnkgdG8gZ2VuZXJhdGUgYSBtb2R1bGUgcmVwci4KKworICAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4zLCB0aGUgbW9kdWxlIHJlcHIgd2lsbCBiZQorICAgZ2VuZXJhdGVkIGJ5IGNhbGxpbmcgdGhlIGxvYWRlcidzIDptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIGlmCisgICBkZWZpbmVkLCBiZWZvcmUgdHJ5aW5nIGVpdGhlciBhcHByb2FjaCBkZXNjcmliZWQgYWJvdmUuICBIb3dldmVyLCB0aGUKKyAgIG1ldGhvZCBpcyBkZXByZWNhdGVkLgorCiAKIFRoZSBQYXRoIEJhc2VkIEZpbmRlcgogPT09PT09PT09PT09PT09PT09PT09CkBAIC01MjksNyArNjcyLDcgQEAKIG5vdCBiZSBsaW1pdGVkIHRvIHRoaXMuCiAKIEFzIGEgbWV0YSBwYXRoIGZpbmRlciwgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaW1wbGVtZW50cyB0aGUKLTptZXRoOmBmaW5kX21vZHVsZSgpYCBwcm90b2NvbCBwcmV2aW91c2x5IGRlc2NyaWJlZCwgaG93ZXZlciBpdCBleHBvc2VzCis6bWV0aDpgZmluZF9zcGVjKClgIHByb3RvY29sIHByZXZpb3VzbHkgZGVzY3JpYmVkLCBob3dldmVyIGl0IGV4cG9zZXMKIGFkZGl0aW9uYWwgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0byBjdXN0b21pemUgaG93IG1vZHVsZXMgYXJlIGZvdW5kIGFuZAogbG9hZGVkIGZyb20gdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAuCiAKQEAgLTU1MSw4ICs2OTQsOCBAQAogCiBUaGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpcyBhIDp0ZXJtOmBtZXRhIHBhdGggZmluZGVyYCwgc28gdGhlIGltcG9ydAogbWFjaGluZXJ5IGJlZ2lucyB0aGUgOnRlcm06YGltcG9ydCBwYXRoYCBzZWFyY2ggYnkgY2FsbGluZyB0aGUgcGF0aAotYmFzZWQgZmluZGVyJ3MgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgcHJldmlvdXNseS4gIFdoZW4KLXRoZSBgYHBhdGhgYCBhcmd1bWVudCB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgYQorYmFzZWQgZmluZGVyJ3MgOm1ldGg6YGZpbmRfc3BlYygpYCBtZXRob2QgYXMgZGVzY3JpYmVkIHByZXZpb3VzbHkuICBXaGVuCit0aGUgYGBwYXRoYGAgYXJndW1lbnQgdG8gOm1ldGg6YGZpbmRfc3BlYygpYCBpcyBnaXZlbiwgaXQgd2lsbCBiZSBhCiBsaXN0IG9mIHN0cmluZyBwYXRocyB0byB0cmF2ZXJzZSAtIHR5cGljYWxseSBhIHBhY2thZ2UncyBgYF9fcGF0aF9fYGAKIGF0dHJpYnV0ZSBmb3IgYW4gaW1wb3J0IHdpdGhpbiB0aGF0IHBhY2thZ2UuICBJZiB0aGUgYGBwYXRoYGAgYXJndW1lbnQKIGlzIGBgTm9uZWBgLCB0aGlzIGluZGljYXRlcyBhIHRvcCBsZXZlbCBpbXBvcnQgYW5kIDpkYXRhOmBzeXMucGF0aGAgaXMgdXNlZC4KQEAgLTU4Myw1MSArNzI2LDcwIEBACiBhcmd1bWVudCwgaXQgc2hvdWxkIHJhaXNlIDpleGM6YEltcG9ydEVycm9yYC4KIAogSWYgOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpdGVyYXRpb24gZW5kcyB3aXRoIG5vIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAKLWJlaW5nIHJldHVybmVkLCB0aGVuIHRoZSBwYXRoIGJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QKK2JlaW5nIHJldHVybmVkLCB0aGVuIHRoZSBwYXRoIGJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kCiB3aWxsIHN0b3JlIGBgTm9uZWBgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgKHRvIGluZGljYXRlIHRoYXQKIHRoZXJlIGlzIG5vIGZpbmRlciBmb3IgdGhpcyBwYXRoIGVudHJ5KSBhbmQgcmV0dXJuIGBgTm9uZWBgLCBpbmRpY2F0aW5nIHRoYXQKIHRoaXMgOnRlcm06YG1ldGEgcGF0aCBmaW5kZXJgIGNvdWxkIG5vdCBmaW5kIHRoZSBtb2R1bGUuCiAKIElmIGEgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCAqaXMqIHJldHVybmVkIGJ5IG9uZSBvZiB0aGUgOnRlcm06YHBhdGggZW50cnkKIGhvb2tgIGNhbGxhYmxlcyBvbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgLCB0aGVuIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2wgaXMgdXNlZAotdG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIGxvYWRlciwgd2hpY2ggaXMgdGhlbiB1c2VkIHRvIGxvYWQgdGhlIG1vZHVsZS4KLQordG8gYXNrIHRoZSBmaW5kZXIgZm9yIGEgbW9kdWxlIHNwZWMsIHdoaWNoIGlzIHRoZW4gdXNlZCB3aGVuIGxvYWRpbmcgdGhlCittb2R1bGUuCiAKIFBhdGggZW50cnkgZmluZGVyIHByb3RvY29sCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbiBvcmRlciB0byBzdXBwb3J0IGltcG9ydHMgb2YgbW9kdWxlcyBhbmQgaW5pdGlhbGl6ZWQgcGFja2FnZXMgYW5kIGFsc28gdG8KIGNvbnRyaWJ1dGUgcG9ydGlvbnMgdG8gbmFtZXNwYWNlIHBhY2thZ2VzLCBwYXRoIGVudHJ5IGZpbmRlcnMgbXVzdCBpbXBsZW1lbnQKLXRoZSA6bWV0aDpgZmluZF9sb2FkZXIoKWAgbWV0aG9kLgordGhlIDptZXRoOmBmaW5kX3NwZWMoKWAgbWV0aG9kLgogCi06bWV0aDpgZmluZF9sb2FkZXIoKWAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCi1tb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICA6bWV0aDpgZmluZF9sb2FkZXIoKWAgcmV0dXJucyBhIDItdHVwbGUgd2hlcmUgdGhlCi1maXJzdCBpdGVtIGlzIHRoZSBsb2FkZXIgYW5kIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG5hbWVzcGFjZSA6dGVybTpgcG9ydGlvbmAuCi1XaGVuIHRoZSBmaXJzdCBpdGVtIChpLmUuIHRoZSBsb2FkZXIpIGlzIGBgTm9uZWBgLCB0aGlzIG1lYW5zIHRoYXQgd2hpbGUgdGhlCi1wYXRoIGVudHJ5IGZpbmRlciBkb2VzIG5vdCBoYXZlIGEgbG9hZGVyIGZvciB0aGUgbmFtZWQgbW9kdWxlLCBpdCBrbm93cyB0aGF0IHRoZQotcGF0aCBlbnRyeSBjb250cmlidXRlcyB0byBhIG5hbWVzcGFjZSBwb3J0aW9uIGZvciB0aGUgbmFtZWQgbW9kdWxlLiAgVGhpcyB3aWxsCi1hbG1vc3QgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZXJlIFB5dGhvbiBpcyBhc2tlZCB0byBpbXBvcnQgYSBuYW1lc3BhY2UgcGFja2FnZQotdGhhdCBoYXMgbm8gcGh5c2ljYWwgcHJlc2VuY2Ugb24gdGhlIGZpbGUgc3lzdGVtLiAgV2hlbiBhIHBhdGggZW50cnkgZmluZGVyCi1yZXR1cm5zIGBgTm9uZWBgIGZvciB0aGUgbG9hZGVyLCB0aGUgc2Vjb25kIGl0ZW0gb2YgdGhlIDItdHVwbGUgcmV0dXJuIHZhbHVlCi1tdXN0IGJlIGEgc2VxdWVuY2UsIGFsdGhvdWdoIGl0IGNhbiBiZSBlbXB0eS4KKzptZXRoOmBmaW5kX3NwZWMoKWAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCittb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICA6bWV0aDpgZmluZF9zcGVjKClgIHJldHVybnMgYSBmdWxseSBwb3B1bGF0ZWQKK3NwZWMgZm9yIHRoZSBtb2R1bGUuICBUaGlzIHNwZWMgd2lsbCBhbHdheXMgaGF2ZSAibG9hZGVyIiBzZXQgKHdpdGggb25lCitleGNlcHRpb24pLgogCi1JZiA6bWV0aDpgZmluZF9sb2FkZXIoKWAgcmV0dXJucyBhIG5vbi1gYE5vbmVgYCBsb2FkZXIgdmFsdWUsIHRoZSBwb3J0aW9uIGlzCi1pZ25vcmVkIGFuZCB0aGUgbG9hZGVyIGlzIHJldHVybmVkIGZyb20gdGhlIHBhdGggYmFzZWQgZmluZGVyLCB0ZXJtaW5hdGluZwotdGhlIHNlYXJjaCB0aHJvdWdoIHRoZSBwYXRoIGVudHJpZXMuCitUbyBpbmRpY2F0ZSB0byB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGF0IHRoZSBzcGVjIHJlcHJlc2VudHMgYSBuYW1lc3BhY2UKKzp0ZXJtOmBwb3J0aW9uYC4gdGhlIHBhdGggZW50cnkgZmluZGVyIHNldHMgImxvYWRlciIgb24gdGhlIHNwZWMgdG8KK2BgTm9uZWBgIGFuZCAic3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMiIHRvIGEgbGlzdCBjb250YWluaW5nIHRoZQorcG9ydGlvbi4KIAotRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBpbXBvcnQKLXByb3RvY29sLCBtYW55IHBhdGggZW50cnkgZmluZGVycyBhbHNvIHN1cHBvcnQgdGhlIHNhbWUsCi10cmFkaXRpb25hbCA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kIHRoYXQgbWV0YSBwYXRoIGZpbmRlcnMgc3VwcG9ydC4KLUhvd2V2ZXIgcGF0aCBlbnRyeSBmaW5kZXIgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZHMgYXJlIG5ldmVyIGNhbGxlZAotd2l0aCBhIGBgcGF0aGBgIGFyZ3VtZW50ICh0aGV5IGFyZSBleHBlY3RlZCB0byByZWNvcmQgdGhlIGFwcHJvcHJpYXRlCi1wYXRoIGluZm9ybWF0aW9uIGZyb20gdGhlIGluaXRpYWwgY2FsbCB0byB0aGUgcGF0aCBob29rKS4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBmaW5kX3NwZWMoKSByZXBsYWNlZCBmaW5kX2xvYWRlcigpIGFuZCBmaW5kX21vZHVsZSgpLCBidXQgb2Ygd2hpY2gKKyAgIGFyZSBub3cgZGVwcmVjYXRlZCwgYnV0IHdpbGwgYmUgdXNlZCBpZiBmaW5kX3NwZWMoKSBpcyBub3QgZGVmaW5lZC4KIAotVGhlIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2Qgb24gcGF0aCBlbnRyeSBmaW5kZXJzIGlzIGRlcHJlY2F0ZWQsCi1hcyBpdCBkb2VzIG5vdCBhbGxvdyB0aGUgcGF0aCBlbnRyeSBmaW5kZXIgdG8gY29udHJpYnV0ZSBwb3J0aW9ucyB0bwotbmFtZXNwYWNlIHBhY2thZ2VzLiBJbnN0ZWFkIHBhdGggZW50cnkgZmluZGVycyBzaG91bGQgaW1wbGVtZW50IHRoZQotOm1ldGg6YGZpbmRfbG9hZGVyKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgYWJvdmUuIElmIGl0IGV4aXN0cyBvbiB0aGUgcGF0aAotZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsIDptZXRoOmBmaW5kX2xvYWRlcigpYAotaW4gcHJlZmVyZW5jZSB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAuCisgICBPbGRlciBwYXRoIGVudHJ5IGZpbmRlcnMgbWF5IGltcGxlbWVudCBvbmUgb2YgdGhlc2UgdHdvIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgaW5zdGVhZCBvZiA6bWV0aDpgZmluZF9zcGVjKClgLiAgVGhlIG1ldGhvZHMgYXJlIHN0aWxsIHJlc3BlY3RlZCBmb3IgdGhlCisgICBzYWtlIG9mIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBIb3dldmV2ZXIsIGlmIGZpbmRfc3BlYygpIGlzIGltcGxlbWVudGVkCisgICBvbiB0aGUgcGF0aCBlbnRyeSBmaW5kZXIsIHRoZSBsZWdhY3kgbWV0aG9kcyBhcmUgaWdub3JlZC4KKworICAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHRha2VzIG9uZSBhcmd1bWVudCwgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQorICAgbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSAyLXR1cGxlIHdoZXJlIHRoZQorICAgZmlyc3QgaXRlbSBpcyB0aGUgbG9hZGVyIGFuZCB0aGUgc2Vjb25kIGl0ZW0gaXMgYSBuYW1lc3BhY2UgOnRlcm06YHBvcnRpb25gLgorICAgV2hlbiB0aGUgZmlyc3QgaXRlbSAoaS5lLiB0aGUgbG9hZGVyKSBpcyBgYE5vbmVgYCwgdGhpcyBtZWFucyB0aGF0IHdoaWxlIHRoZQorICAgcGF0aCBlbnRyeSBmaW5kZXIgZG9lcyBub3QgaGF2ZSBhIGxvYWRlciBmb3IgdGhlIG5hbWVkIG1vZHVsZSwgaXQga25vd3MgdGhhdAorICAgdGhlIHBhdGggZW50cnkgY29udHJpYnV0ZXMgdG8gYSBuYW1lc3BhY2UgcG9ydGlvbiBmb3IgdGhlIG5hbWVkIG1vZHVsZS4KKyAgIFRoaXMgd2lsbCBhbG1vc3QgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZXJlIFB5dGhvbiBpcyBhc2tlZCB0byBpbXBvcnQgYQorICAgbmFtZXNwYWNlIHBhY2thZ2UgdGhhdCBoYXMgbm8gcGh5c2ljYWwgcHJlc2VuY2Ugb24gdGhlIGZpbGUgc3lzdGVtLgorICAgV2hlbiBhIHBhdGggZW50cnkgZmluZGVyIHJldHVybnMgYGBOb25lYGAgZm9yIHRoZSBsb2FkZXIsIHRoZSBzZWNvbmQKKyAgIGl0ZW0gb2YgdGhlIDItdHVwbGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzZXF1ZW5jZSwgYWx0aG91Z2ggaXQgY2FuIGJlCisgICBlbXB0eS4KKworICAgSWYgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSBub24tYGBOb25lYGAgbG9hZGVyIHZhbHVlLCB0aGUgcG9ydGlvbiBpcworICAgaWdub3JlZCBhbmQgdGhlIGxvYWRlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwYXRoIGJhc2VkIGZpbmRlciwgdGVybWluYXRpbmcKKyAgIHRoZSBzZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBlbnRyaWVzLgorCisgICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGltcG9ydAorICAgcHJvdG9jb2wsIG1hbnkgcGF0aCBlbnRyeSBmaW5kZXJzIGFsc28gc3VwcG9ydCB0aGUgc2FtZSwKKyAgIHRyYWRpdGlvbmFsIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QgdGhhdCBtZXRhIHBhdGggZmluZGVycyBzdXBwb3J0LgorICAgSG93ZXZlciBwYXRoIGVudHJ5IGZpbmRlciA6bWV0aDpgZmluZF9tb2R1bGUoKWAgbWV0aG9kcyBhcmUgbmV2ZXIgY2FsbGVkCisgICB3aXRoIGEgYGBwYXRoYGAgYXJndW1lbnQgKHRoZXkgYXJlIGV4cGVjdGVkIHRvIHJlY29yZCB0aGUgYXBwcm9wcmlhdGUKKyAgIHBhdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbCBjYWxsIHRvIHRoZSBwYXRoIGhvb2spLgorCisgICBUaGUgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBvbiBwYXRoIGVudHJ5IGZpbmRlcnMgaXMgZGVwcmVjYXRlZCwKKyAgIGFzIGl0IGRvZXMgbm90IGFsbG93IHRoZSBwYXRoIGVudHJ5IGZpbmRlciB0byBjb250cmlidXRlIHBvcnRpb25zIHRvCisgICBuYW1lc3BhY2UgcGFja2FnZXMuICBJZiBib3RoIDptZXRoOmBmaW5kX2xvYWRlcigpYCBhbmQgOm1ldGg6YGZpbmRfbW9kdWxlKClgCisgICBleGlzdCBvbiBhIHBhdGggZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsCisgICA6bWV0aDpgZmluZF9sb2FkZXIoKWAgaW4gcHJlZmVyZW5jZSB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAuCiAKIAogUmVwbGFjaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtCkBAIC02NDYsNyArODA4LDcgQEAKIFRvIHNlbGVjdGl2ZWx5IHByZXZlbnQgaW1wb3J0IG9mIHNvbWUgbW9kdWxlcyBmcm9tIGEgaG9vayBlYXJseSBvbiB0aGUKIG1ldGEgcGF0aCAocmF0aGVyIHRoYW4gZGlzYWJsaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQgc3lzdGVtIGVudGlyZWx5KSwKIGl0IGlzIHN1ZmZpY2llbnQgdG8gcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgIGRpcmVjdGx5IGZyb20KLTptZXRoOmBmaW5kX21vZHVsZWAgaW5zdGVhZCBvZiByZXR1cm5pbmcgYGBOb25lYGAuIFRoZSBsYXR0ZXIgaW5kaWNhdGVzCis6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkIG9mIHJldHVybmluZyBgYE5vbmVgYC4gVGhlIGxhdHRlciBpbmRpY2F0ZXMKIHRoYXQgdGhlIG1ldGEgcGF0aCBzZWFyY2ggc2hvdWxkIGNvbnRpbnVlLiB3aGlsZSByYWlzaW5nIGFuIGV4Y2VwdGlvbgogdGVybWluYXRlcyBpdCBpbW1lZGlhdGVseS4KIApAQCAtNjg4LDYgKzg1MCwxMSBAQAogCiA6cGVwOmAzMzhgIGRlZmluZXMgZXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cy4KIAorOnBlcDpgNDUxYCBhZGRzIHRoZSBlbmNhcHN1bGF0aW9uIG9mIHBlci1tb2R1bGUgaW1wb3J0IHN0YXRlIGluIHNwZWMKK29iamVjdHMuICBJdCBhbHNvIG9mZi1sb2FkcyBtb3N0IG9mIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mCitsb2FkZXJzIGJhY2sgb250byB0aGUgaW1wb3J0IG1hY2hpbmVyeS4gIFRoZXNlIGNoYW5nZXMgYWxsb3cgdGhlCitkZXByZWNhdGlvbiBvZiBzZXZlcmFsIEFQSXMgaW4gdGhlIGltcG9ydCBzeXN0ZW0gYW5kIGFsc28gYWRkaXRpb24gb2YgbmV3CittZXRob2RzIHRvIGZpbmRlcnMgYW5kIGxvYWRlcnMuCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAppbmRleCBhMGVjMzJmLi5lZDVkYTBjIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKQEAgLTMsNyArMyw3IEBACiAJICAgIDxoMz5Eb2NzIGZvciBvdGhlciB2ZXJzaW9uczwvaDM+CiAJICAgIDx1bD4KIAkgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yLjcvIj5QeXRob24gMi43IChzdGFibGUpPC9hPjwvbGk+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LyI+UHl0aG9uIDMuNCAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CisJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLyI+UHl0aG9uIDMuMyAoc3RhYmxlKTwvYT48L2xpPgogICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy92ZXJzaW9ucy8iPk9sZCB2ZXJzaW9uczwvYT48L2xpPgogICAgICAgICAgICAgPC91bD4KIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CmluZGV4IDM4OGZlM2EuLjJiNWRlMTQgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKQEAgLTEwLDcgKzEwLDcgQEAKICIiIgogCiBJU1NVRV9VUkkgPSAnaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZSVzJwotU09VUkNFX1VSSSA9ICdodHRwOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvMy4zLyVzJworU09VUkNFX1VSSSA9ICdodHRwOi8vaGcucHl0aG9uLm9yZy9jcHl0aG9uL2ZpbGUvZGVmYXVsdC8lcycKIAogZnJvbSBkb2N1dGlscyBpbXBvcnQgbm9kZXMsIHV0aWxzCiAKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdiBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgppbmRleCBmMTI0ZmYyLi42N2FkMDFmIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CkBAIC0xNDEsMTUgKzE0MSw4IEBACiBsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMsLDpwb3J0LGhvc3Q6cG9ydAogbGlicmFyeS9tbWFwLCw6aTIsb2JqW2kxOmkyXQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBZGQgbW9yZSB0YXNrcyB1c2luZyBgcHV0KClgCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBgQmFzZU1hbmFnZXJgLgotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICMgZXF1aXYgdG8gYGxbMjBdYCIKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRzbGljZV9fJywgKDIsIDcpKSAgICMgZXF1aXYgdG8gYGxbMjo3XWAiCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCw6cXVldWUsIj4+PiBRdWV1ZU1hbmFnZXIucmVnaXN0ZXIoJ2dldF9xdWV1ZScsIGNhbGxhYmxlPWxhbWJkYTpxdWV1ZSkiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIHJlZ2lzdGVyIHRoZSBGb28gY2xhc3M7IG1ha2UgYGYoKWAgYW5kIGBnKClgIGFjY2Vzc2libGUgdmlhIHByb3h5CiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIHJlZ2lzdGVyIHRoZSBGb28gY2xhc3M7IG1ha2UgYGcoKWAgYW5kIGBfaCgpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQpAQCAtMTU4LDIwICsxNTEsMTYgQEAKIGxpYnJhcnkvbm50cGxpYiwsOmxpbmVzLDpsaW5lcwogbGlicmFyeS9vcHRwYXJzZSwsOmxlbiwiZGVsIHBhcnNlci5yYXJnc1s6bGVuKHZhbHVlKV0iCiBsaWJyYXJ5L29zLnBhdGgsLDpmb28sYzpmb28KK2xpYnJhcnkvcGF0aGxpYiwsOmJhciwiPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICdkOmJhcicpIgorbGlicmFyeS9wYXRobGliLCw6YmFyLFB1cmVXaW5kb3dzUGF0aCgnZDpiYXInKQorbGlicmFyeS9wYXRobGliLCw6UHJvZ3JhbSw+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykucm9vdAorbGlicmFyeS9wYXRobGliLCw6UHJvZ3JhbSw+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykuYW5jaG9yCiBsaWJyYXJ5L3BkYiwsOmxpbmVubyxmaWxlbmFtZTpsaW5lbm8KIGxpYnJhcnkvcGlja2xlLCw6bWVtb3J5LCJjb25uID0gc3FsaXRlMy5jb25uZWN0KCIiOm1lbW9yeToiIikiCiBsaWJyYXJ5L3Bvc2l4LCxgLCJDRkxBR1M9IiJgZ2V0Y29uZiBMRlNfQ0ZMQUdTYCIiIE9QVD0iIi1nIC1PMiAkQ0ZMQUdTIiIiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidjbGFzc2lmaWVycyc6IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidJbnRlbmRlZCBBdWRpZW5jZSA6OiBEZXZlbG9wZXJzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidMaWNlbnNlIDo6IE9TSSBBcHByb3ZlZCA6OiBNSVQgTGljZW5zZScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidPcGVyYXRpbmcgU3lzdGVtIDo6IE9TIEluZGVwZW5kZW50JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ1RvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IExpYnJhcmllcyA6OiBQeXRob24gTW9kdWxlcyddLCIKK2xpYnJhcnkvcHByaW50LCw6OiwiJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyIDo6IE9ubHknXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43JywiCiBsaWJyYXJ5L3Byb2ZpbGUsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vKGZ1bmN0aW9uKQogbGlicmFyeS9weWV4cGF0LCw6ZWxlbTEsPHB5OmVsZW0xIC8+CiBsaWJyYXJ5L3B5ZXhwYXQsLDpweSwieG1sbnM6cHkgPSAiImh0dHA6Ly93d3cucHl0aG9uLm9yZy9ucy8iIj4iCkBAIC0xODMsNiArMTcyLDcgQEAKIGxpYnJhcnkvc3FsaXRlMywsOmFnZSwiY3VyLmV4ZWN1dGUoIiJzZWxlY3QgKiBmcm9tIHBlb3BsZSB3aGVyZSBuYW1lX2xhc3Q9OndobyBhbmQgYWdlPTphZ2UiIiwgeyIid2hvIiI6IHdobywgIiJhZ2UiIjogYWdlfSkiCiBsaWJyYXJ5L3NxbGl0ZTMsLDptZW1vcnksCiBsaWJyYXJ5L3NxbGl0ZTMsLDp3aG8sImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgorbGlicmFyeS9zcWxpdGUzLCw6cGF0aCwiZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uYWwgVW5pdCBOYW1lIChlZywgc2VjdGlvbikgW106TXkgR3JvdXAiCiBsaWJyYXJ5L3NzbCwsOk15LCJPcmdhbml6YXRpb24gTmFtZSAoZWcsIGNvbXBhbnkpIFtJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGRdOk15IE9yZ2FuaXphdGlvbiwgSW5jLiIKIGxpYnJhcnkvc3NsLCw6bXlzZXJ2ZXIsIkNvbW1vbiBOYW1lIChlZywgWU9VUiBuYW1lKSBbXTpteXNlcnZlci5teWdyb3VwLm15b3JnYW5pemF0aW9uLmNvbSIKQEAgLTIwNyw3ICsxOTcsMTIgQEAKIGxpYnJhcnkvdGFyZmlsZSwsOnh6LCd3Onh6JwogbGlicmFyeS90aW1lLCw6bW0sCiBsaWJyYXJ5L3RpbWUsLDpzcywKK2xpYnJhcnkvdHJhY2VtYWxsb2MsLDpsaW1pdCwiZm9yIGluZGV4LCBzdGF0IGluIGVudW1lcmF0ZSh0b3Bfc3RhdHNbOmxpbWl0XSwgMSk6IgogbGlicmFyeS90dXJ0bGUsLDo6LEV4YW1wbGU6OgorbGlicmFyeS91bml0dGVzdCwxNDEyLDpmb28sInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zmlyc3QsInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsMTQxMiw6Zm9vLCdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCitsaWJyYXJ5L3VuaXR0ZXN0LDE0MTIsOnNlY29uZCwnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpsYW5nLCJ4bWxucz0iImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIiB4bWw6bGFuZz0iImVuIiIgbGFuZz0iImVuIiI+XG5cbjxoZWFkPlxuIgogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOnBhc3N3b3JkLCIiImpvZTpwYXNzd29yZEBweXRob24ub3JnIiIiCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdAppbmRleCAzNmFjYjA2Li5hYmYzMGYwIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKQEAgLTcsMTQwICs3LDI3IEBACiBTb21lIHZlcnNpb25zIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3VwcG9ydCBlZGl0aW5nIG9mIHRoZSBjdXJyZW50IGlucHV0CiBsaW5lIGFuZCBoaXN0b3J5IHN1YnN0aXR1dGlvbiwgc2ltaWxhciB0byBmYWNpbGl0aWVzIGZvdW5kIGluIHRoZSBLb3JuIHNoZWxsIGFuZAogdGhlIEdOVSBCYXNoIHNoZWxsLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgYEdOVSBSZWFkbGluZWBfIGxpYnJhcnksCi13aGljaCBzdXBwb3J0cyBFbWFjcy1zdHlsZSBhbmQgdmktc3R5bGUgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgotZG9jdW1lbnRhdGlvbiB3aGljaCBJIHdvbid0IGR1cGxpY2F0ZSBoZXJlOyBob3dldmVyLCB0aGUgYmFzaWNzIGFyZSBlYXNpbHkKLWV4cGxhaW5lZC4gIFRoZSBpbnRlcmFjdGl2ZSBlZGl0aW5nIGFuZCBoaXN0b3J5IGRlc2NyaWJlZCBoZXJlIGFyZSBvcHRpb25hbGx5Ci1hdmFpbGFibGUgaW4gdGhlIFVuaXggYW5kIEN5Z3dpbiB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuCi0KLVRoaXMgY2hhcHRlciBkb2VzICpub3QqIGRvY3VtZW50IHRoZSBlZGl0aW5nIGZhY2lsaXRpZXMgb2YgTWFyayBIYW1tb25kJ3MKLVB5dGhvbldpbiBwYWNrYWdlIG9yIHRoZSBUay1iYXNlZCBlbnZpcm9ubWVudCwgSURMRSwgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24uCi1UaGUgY29tbWFuZCBsaW5lIGhpc3RvcnkgcmVjYWxsIHdoaWNoIG9wZXJhdGVzIHdpdGhpbiBET1MgYm94ZXMgb24gTlQgYW5kIHNvbWUKLW90aGVyIERPUyBhbmQgV2luZG93cyBmbGF2b3JzICBpcyB5ZXQgYW5vdGhlciBiZWFzdC4KLQotCi0uLiBfdHV0LWxpbmVlZGl0aW5nOgotCi1MaW5lIEVkaXRpbmcKLT09PT09PT09PT09PQotCi1JZiBzdXBwb3J0ZWQsIGlucHV0IGxpbmUgZWRpdGluZyBpcyBhY3RpdmUgd2hlbmV2ZXIgdGhlIGludGVycHJldGVyIHByaW50cyBhCi1wcmltYXJ5IG9yIHNlY29uZGFyeSBwcm9tcHQuICBUaGUgY3VycmVudCBsaW5lIGNhbiBiZSBlZGl0ZWQgdXNpbmcgdGhlCi1jb252ZW50aW9uYWwgRW1hY3MgY29udHJvbCBjaGFyYWN0ZXJzLiAgVGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZXNlIGFyZToKLTprYmQ6YEMtQWAgKENvbnRyb2wtQSkgbW92ZXMgdGhlIGN1cnNvciB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCA6a2JkOmBDLUVgCi10byB0aGUgZW5kLCA6a2JkOmBDLUJgIG1vdmVzIGl0IG9uZSBwb3NpdGlvbiB0byB0aGUgbGVmdCwgOmtiZDpgQy1GYCB0byB0aGUKLXJpZ2h0LiAgQmFja3NwYWNlIGVyYXNlcyB0aGUgY2hhcmFjdGVyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IsIDprYmQ6YEMtRGAgdGhlCi1jaGFyYWN0ZXIgdG8gaXRzIHJpZ2h0LiA6a2JkOmBDLUtgIGtpbGxzIChlcmFzZXMpIHRoZSByZXN0IG9mIHRoZSBsaW5lIHRvIHRoZQotcmlnaHQgb2YgdGhlIGN1cnNvciwgOmtiZDpgQy1ZYCB5YW5rcyBiYWNrIHRoZSBsYXN0IGtpbGxlZCBzdHJpbmcuCi06a2JkOmBDLXVuZGVyc2NvcmVgIHVuZG9lcyB0aGUgbGFzdCBjaGFuZ2UgeW91IG1hZGU7IGl0IGNhbiBiZSByZXBlYXRlZCBmb3IKLWN1bXVsYXRpdmUgZWZmZWN0LgotCi0KLS4uIF90dXQtaGlzdG9yeToKLQotSGlzdG9yeSBTdWJzdGl0dXRpb24KLT09PT09PT09PT09PT09PT09PT09Ci0KLUhpc3Rvcnkgc3Vic3RpdHV0aW9uIHdvcmtzIGFzIGZvbGxvd3MuICBBbGwgbm9uLWVtcHR5IGlucHV0IGxpbmVzIGlzc3VlZCBhcmUKLXNhdmVkIGluIGEgaGlzdG9yeSBidWZmZXIsIGFuZCB3aGVuIGEgbmV3IHByb21wdCBpcyBnaXZlbiB5b3UgYXJlIHBvc2l0aW9uZWQgb24KLWEgbmV3IGxpbmUgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGJ1ZmZlci4gOmtiZDpgQy1QYCBtb3ZlcyBvbmUgbGluZSB1cCAoYmFjaykgaW4KLXRoZSBoaXN0b3J5IGJ1ZmZlciwgOmtiZDpgQy1OYCBtb3ZlcyBvbmUgZG93bi4gIEFueSBsaW5lIGluIHRoZSBoaXN0b3J5IGJ1ZmZlcgotY2FuIGJlIGVkaXRlZDsgYW4gYXN0ZXJpc2sgYXBwZWFycyBpbiBmcm9udCBvZiB0aGUgcHJvbXB0IHRvIG1hcmsgYSBsaW5lIGFzCi1tb2RpZmllZC4gIFByZXNzaW5nIHRoZSA6a2JkOmBSZXR1cm5gIGtleSBwYXNzZXMgdGhlIGN1cnJlbnQgbGluZSB0byB0aGUKLWludGVycHJldGVyLiAgOmtiZDpgQy1SYCBzdGFydHMgYW4gaW5jcmVtZW50YWwgcmV2ZXJzZSBzZWFyY2g7IDprYmQ6YEMtU2Agc3RhcnRzCi1hIGZvcndhcmQgc2VhcmNoLgord2hpY2ggc3VwcG9ydHMgdmFyaW91cyBzdHlsZXMgb2YgZWRpdGluZy4gIFRoaXMgbGlicmFyeSBoYXMgaXRzIG93bgorZG9jdW1lbnRhdGlvbiB3aGljaCB3ZSB3b24ndCBkdXBsaWNhdGUgaGVyZS4KIAogCiAuLiBfdHV0LWtleWJpbmRpbmdzOgogCi1LZXkgQmluZGluZ3MKLT09PT09PT09PT09PQorVGFiIENvbXBsZXRpb24gYW5kIEhpc3RvcnkgRWRpdGluZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUga2V5IGJpbmRpbmdzIGFuZCBzb21lIG90aGVyIHBhcmFtZXRlcnMgb2YgdGhlIFJlYWRsaW5lIGxpYnJhcnkgY2FuIGJlCi1jdXN0b21pemVkIGJ5IHBsYWNpbmcgY29tbWFuZHMgaW4gYW4gaW5pdGlhbGl6YXRpb24gZmlsZSBjYWxsZWQKLTpmaWxlOmB+Ly5pbnB1dHJjYC4gIEtleSBiaW5kaW5ncyBoYXZlIHRoZSBmb3JtIDo6Ci0KLSAgIGtleS1uYW1lOiBmdW5jdGlvbi1uYW1lCi0KLW9yIDo6Ci0KLSAgICJzdHJpbmciOiBmdW5jdGlvbi1uYW1lCi0KLWFuZCBvcHRpb25zIGNhbiBiZSBzZXQgd2l0aCA6OgotCi0gICBzZXQgb3B0aW9uLW5hbWUgdmFsdWUKLQotRm9yIGV4YW1wbGU6OgotCi0gICAjIEkgcHJlZmVyIHZpLXN0eWxlIGVkaXRpbmc6Ci0gICBzZXQgZWRpdGluZy1tb2RlIHZpCi0KLSAgICMgRWRpdCB1c2luZyBhIHNpbmdsZSBsaW5lOgotICAgc2V0IGhvcml6b250YWwtc2Nyb2xsLW1vZGUgT24KLQotICAgIyBSZWJpbmQgc29tZSBrZXlzOgotICAgTWV0YS1oOiBiYWNrd2FyZC1raWxsLXdvcmQKLSAgICJcQy11IjogdW5pdmVyc2FsLWFyZ3VtZW50Ci0gICAiXEMteFxDLXIiOiByZS1yZWFkLWluaXQtZmlsZQotCi1Ob3RlIHRoYXQgdGhlIGRlZmF1bHQgYmluZGluZyBmb3IgOmtiZDpgVGFiYCBpbiBQeXRob24gaXMgdG8gaW5zZXJ0IGEgOmtiZDpgVGFiYAotY2hhcmFjdGVyIGluc3RlYWQgb2YgUmVhZGxpbmUncyBkZWZhdWx0IGZpbGVuYW1lIGNvbXBsZXRpb24gZnVuY3Rpb24uICBJZiB5b3UKLWluc2lzdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5IHB1dHRpbmcgOjoKLQotICAgVGFiOiBjb21wbGV0ZQotCi1pbiB5b3VyIDpmaWxlOmB+Ly5pbnB1dHJjYC4gIChPZiBjb3Vyc2UsIHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHR5cGUgaW5kZW50ZWQKLWNvbnRpbnVhdGlvbiBsaW5lcyBpZiB5b3UncmUgYWNjdXN0b21lZCB0byB1c2luZyA6a2JkOmBUYWJgIGZvciB0aGF0IHB1cnBvc2UuKQotCi0uLiBpbmRleDo6Ci0gICBtb2R1bGU6IHJsY29tcGxldGVyCi0gICBtb2R1bGU6IHJlYWRsaW5lCi0KLUF1dG9tYXRpYyBjb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMgb3B0aW9uYWxseSBhdmFpbGFibGUuICBUbwotZW5hYmxlIGl0IGluIHRoZSBpbnRlcnByZXRlcidzIGludGVyYWN0aXZlIG1vZGUsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIKLXN0YXJ0dXAgZmlsZTogWyNdXyAgOjoKLQotICAgaW1wb3J0IHJsY29tcGxldGVyLCByZWFkbGluZQotICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQotCi1UaGlzIGJpbmRzIHRoZSA6a2JkOmBUYWJgIGtleSB0byB0aGUgY29tcGxldGlvbiBmdW5jdGlvbiwgc28gaGl0dGluZyB0aGUKLTprYmQ6YFRhYmAga2V5IHR3aWNlIHN1Z2dlc3RzIGNvbXBsZXRpb25zOyBpdCBsb29rcyBhdCBQeXRob24gc3RhdGVtZW50IG5hbWVzLAotdGhlIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLCBhbmQgdGhlIGF2YWlsYWJsZSBtb2R1bGUgbmFtZXMuICBGb3IgZG90dGVkCi1leHByZXNzaW9ucyBzdWNoIGFzIGBgc3RyaW5nLmFgYCwgaXQgd2lsbCBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiB1cCB0byB0aGUKLWZpbmFsIGBgJy4nYGAgYW5kIHRoZW4gc3VnZ2VzdCBjb21wbGV0aW9ucyBmcm9tIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZXN1bHRpbmcKLW9iamVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSBleGVjdXRlIGFwcGxpY2F0aW9uLWRlZmluZWQgY29kZSBpZiBhbiBvYmplY3Qgd2l0aCBhCi06bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZCBpcyBwYXJ0IG9mIHRoZSBleHByZXNzaW9uLgotCi1BIG1vcmUgY2FwYWJsZSBzdGFydHVwIGZpbGUgbWlnaHQgbG9vayBsaWtlIHRoaXMgZXhhbXBsZS4gIE5vdGUgdGhhdCB0aGlzCi1kZWxldGVzIHRoZSBuYW1lcyBpdCBjcmVhdGVzIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZDsgdGhpcyBpcyBkb25lIHNpbmNlCi10aGUgc3RhcnR1cCBmaWxlIGlzIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG5hbWVzcGFjZSBhcyB0aGUgaW50ZXJhY3RpdmUgY29tbWFuZHMsCi1hbmQgcmVtb3ZpbmcgdGhlIG5hbWVzIGF2b2lkcyBjcmVhdGluZyBzaWRlIGVmZmVjdHMgaW4gdGhlIGludGVyYWN0aXZlCi1lbnZpcm9ubWVudC4gIFlvdSBtYXkgZmluZCBpdCBjb252ZW5pZW50IHRvIGtlZXAgc29tZSBvZiB0aGUgaW1wb3J0ZWQgbW9kdWxlcywKLXN1Y2ggYXMgOm1vZDpgb3NgLCB3aGljaCB0dXJuIG91dCB0byBiZSBuZWVkZWQgaW4gbW9zdCBzZXNzaW9ucyB3aXRoIHRoZQotaW50ZXJwcmV0ZXIuIDo6Ci0KLSAgICMgQWRkIGF1dG8tY29tcGxldGlvbiBhbmQgYSBzdG9yZWQgaGlzdG9yeSBmaWxlIG9mIGNvbW1hbmRzIHRvIHlvdXIgUHl0aG9uCi0gICAjIGludGVyYWN0aXZlIGludGVycHJldGVyLiBSZXF1aXJlcyBQeXRob24gMi4wKywgcmVhZGxpbmUuIEF1dG9jb21wbGV0ZSBpcwotICAgIyBib3VuZCB0byB0aGUgRXNjIGtleSBieSBkZWZhdWx0ICh5b3UgY2FuIGNoYW5nZSBpdCAtIHNlZSByZWFkbGluZSBkb2NzKS4KLSAgICMKLSAgICMgU3RvcmUgdGhlIGZpbGUgaW4gfi8ucHlzdGFydHVwLCBhbmQgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHBvaW50Ci0gICAjIHRvIGl0OiAgImV4cG9ydCBQWVRIT05TVEFSVFVQPX4vLnB5c3RhcnR1cCIgaW4gYmFzaC4KLQotICAgaW1wb3J0IGF0ZXhpdAotICAgaW1wb3J0IG9zCi0gICBpbXBvcnQgcmVhZGxpbmUKLSAgIGltcG9ydCBybGNvbXBsZXRlcgotCi0gICBoaXN0b3J5UGF0aCA9IG9zLnBhdGguZXhwYW5kdXNlcigifi8ucHloaXN0b3J5IikKLQotICAgZGVmIHNhdmVfaGlzdG9yeShoaXN0b3J5UGF0aD1oaXN0b3J5UGF0aCk6Ci0gICAgICAgaW1wb3J0IHJlYWRsaW5lCi0gICAgICAgcmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlKGhpc3RvcnlQYXRoKQotCi0gICBpZiBvcy5wYXRoLmV4aXN0cyhoaXN0b3J5UGF0aCk6Ci0gICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeVBhdGgpCi0KLSAgIGF0ZXhpdC5yZWdpc3RlcihzYXZlX2hpc3RvcnkpCi0gICBkZWwgb3MsIGF0ZXhpdCwgcmVhZGxpbmUsIHJsY29tcGxldGVyLCBzYXZlX2hpc3RvcnksIGhpc3RvcnlQYXRoCitDb21wbGV0aW9uIG9mIHZhcmlhYmxlIGFuZCBtb2R1bGUgbmFtZXMgaXMKKzpyZWY6YGF1dG9tYXRpY2FsbHkgZW5hYmxlZCA8cmxjb21wbGV0ZXItY29uZmlnPmAgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cCBzbwordGhhdCB0aGUgOmtiZDpgVGFiYCBrZXkgaW52b2tlcyB0aGUgY29tcGxldGlvbiBmdW5jdGlvbjsgaXQgbG9va3MgYXQKK1B5dGhvbiBzdGF0ZW1lbnQgbmFtZXMsIHRoZSBjdXJyZW50IGxvY2FsIHZhcmlhYmxlcywgYW5kIHRoZSBhdmFpbGFibGUKK21vZHVsZSBuYW1lcy4gIEZvciBkb3R0ZWQgZXhwcmVzc2lvbnMgc3VjaCBhcyBgYHN0cmluZy5hYGAsIGl0IHdpbGwgZXZhbHVhdGUKK3RoZSBleHByZXNzaW9uIHVwIHRvIHRoZSBmaW5hbCBgYCcuJ2BgIGFuZCB0aGVuIHN1Z2dlc3QgY29tcGxldGlvbnMgZnJvbQordGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBvYmplY3QuICBOb3RlIHRoYXQgdGhpcyBtYXkgZXhlY3V0ZQorYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGlmIGFuIG9iamVjdCB3aXRoIGEgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QKK2lzIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24uICBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGFsc28gc2F2ZXMgeW91cgoraGlzdG9yeSBpbnRvIGEgZmlsZSBuYW1lZCA6ZmlsZTpgLnB5dGhvbl9oaXN0b3J5YCBpbiB5b3VyIHVzZXIgZGlyZWN0b3J5LgorVGhlIGhpc3Rvcnkgd2lsbCBiZSBhdmFpbGFibGUgYWdhaW4gZHVyaW5nIHRoZSBuZXh0IGludGVyYWN0aXZlIGludGVycHJldGVyCitzZXNzaW9uLgogCiAKIC4uIF90dXQtY29tbWVudGFyeToKQEAgLTE2MiwxNCArNDksNiBAQAogYnB5dGhvbl8uCiAKIAotLi4gcnVicmljOjogRm9vdG5vdGVzCi0KLS4uIFsjXSBQeXRob24gd2lsbCBleGVjdXRlIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgaWRlbnRpZmllZCBieSB0aGUKLSAgIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGVudmlyb25tZW50IHZhcmlhYmxlIHdoZW4geW91IHN0YXJ0IGFuIGludGVyYWN0aXZlCi0gICBpbnRlcnByZXRlci4gIFRvIGN1c3RvbWl6ZSBQeXRob24gZXZlbiBmb3Igbm9uLWludGVyYWN0aXZlIG1vZGUsIHNlZQotICAgOnJlZjpgdHV0LWN1c3RvbWl6ZWAuCi0KLQogLi4gX0dOVSBSZWFkbGluZTogaHR0cDovL3Rpc3d3dy5jYXNlLmVkdS9waHAvY2hldC9yZWFkbGluZS9ybHRvcC5odG1sCiAuLiBfSVB5dGhvbjogaHR0cDovL2lweXRob24uc2NpcHkub3JnLwogLi4gX2JweXRob246IGh0dHA6Ly93d3cuYnB5dGhvbi1pbnRlcnByZXRlci5vcmcvCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAppbmRleCBjZGMyYmYyLi5jMTgyNTExIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKQEAgLTEwLDEzICsxMCwxMyBAQAogSW52b2tpbmcgdGhlIEludGVycHJldGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy4zYAorVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy40YAogb24gdGhvc2UgbWFjaGluZXMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlOyBwdXR0aW5nIDpmaWxlOmAvdXNyL2xvY2FsL2JpbmAgaW4geW91cgogVW5peCBzaGVsbCdzIHNlYXJjaCBwYXRoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IGl0IGJ5IHR5cGluZyB0aGUgY29tbWFuZDoKIAogLi4gY29kZS1ibG9jazo6IHRleHQKIAotICAgcHl0aG9uMy4zCisgICBweXRob24zLjQKIAogdG8gdGhlIHNoZWxsLiBbI11fIFNpbmNlIHRoZSBjaG9pY2Ugb2YgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgaW50ZXJwcmV0ZXIgbGl2ZXMKIGlzIGFuIGluc3RhbGxhdGlvbiBvcHRpb24sIG90aGVyIHBsYWNlcyBhcmUgcG9zc2libGU7IGNoZWNrIHdpdGggeW91ciBsb2NhbApAQCAtMjQsMTEgKzI0LDExIEBACiBwb3B1bGFyIGFsdGVybmF0aXZlIGxvY2F0aW9uLikKIAogT24gV2luZG93cyBtYWNoaW5lcywgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaXMgdXN1YWxseSBwbGFjZWQgaW4KLTpmaWxlOmBDOlxcUHl0aG9uMzNgLCB0aG91Z2ggeW91IGNhbiBjaGFuZ2UgdGhpcyB3aGVuIHlvdSdyZSBydW5uaW5nIHRoZQorOmZpbGU6YEM6XFxQeXRob24zNGAsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCiBpbnN0YWxsZXIuICBUbyBhZGQgdGhpcyBkaXJlY3RvcnkgdG8geW91ciBwYXRoLCAgeW91IGNhbiB0eXBlIHRoZSBmb2xsb3dpbmcKIGNvbW1hbmQgaW50byB0aGUgY29tbWFuZCBwcm9tcHQgaW4gYSBET1MgYm94OjoKIAotICAgc2V0IHBhdGg9JXBhdGglO0M6XHB5dGhvbjMzCisgICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzQKIAogVHlwaW5nIGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciAoOmtiZDpgQ29udHJvbC1EYCBvbiBVbml4LCA6a2JkOmBDb250cm9sLVpgIG9uCiBXaW5kb3dzKSBhdCB0aGUgcHJpbWFyeSBwcm9tcHQgY2F1c2VzIHRoZSBpbnRlcnByZXRlciB0byBleGl0IHdpdGggYSB6ZXJvIGV4aXQKQEAgLTk1LDggKzk1LDggQEAKIHByaW50cyBhIHdlbGNvbWUgbWVzc2FnZSBzdGF0aW5nIGl0cyB2ZXJzaW9uIG51bWJlciBhbmQgYSBjb3B5cmlnaHQgbm90aWNlCiBiZWZvcmUgcHJpbnRpbmcgdGhlIGZpcnN0IHByb21wdDo6CiAKLSAgICQgcHl0aG9uMy4zCi0gICBQeXRob24gMy4zIChkZWZhdWx0LCBTZXAgMjQgMjAxMiwgMDk6MjU6MDQpCisgICAkIHB5dGhvbjMuNAorICAgUHl0aG9uIDMuNCAoZGVmYXVsdCwgU2VwIDI0IDIwMTIsIDA5OjI1OjA0KQogICAgW0dDQyA0LjYuM10gb24gbGludXgyCiAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICA+Pj4KQEAgLTE0OSw3ICsxNDksNyBAQAogT24gQlNEJ2lzaCBVbml4IHN5c3RlbXMsIFB5dGhvbiBzY3JpcHRzIGNhbiBiZSBtYWRlIGRpcmVjdGx5IGV4ZWN1dGFibGUsIGxpa2UKIHNoZWxsIHNjcmlwdHMsIGJ5IHB1dHRpbmcgdGhlIGxpbmUgOjoKIAotICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuMworICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuNAogCiAoYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZwogb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdCBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAppbmRleCAxOTAyOTY0Li45NGE2NmFjIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CkBAIC0yNzgsMjQgKzI3OCwyMyBAQAogICAgPj4+IGRpcihmaWJvKQogICAgWydfX25hbWVfXycsICdmaWInLCAnZmliMiddCiAgICA+Pj4gZGlyKHN5cykgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCi0gICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZWdnaW5zZXJ0JywgJ19fZXhjZXB0aG9va19fJywKLSAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BsZW4nLCAnX19zdGRlcnJfXycsCi0gICAgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsCi0gICAgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsCi0gICAgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLCAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsCi0gICAgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywKLSAgICAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLAotICAgICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywKLSAgICAnZmxvYXRfcmVwcl9zdHlsZScsICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsCi0gICAgJ2dldGRsb3BlbmZsYWdzJywgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLAotICAgICdnZXRyZWN1cnNpb25saW1pdCcsICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLAotICAgICdnZXR0b3RhbHJlZmNvdW50JywgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywKLSAgICAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLCAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsCi0gICAgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLCAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywKLSAgICAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywKLSAgICAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsCi0gICAgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLCAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLAotICAgICd3YXJub3B0aW9ucyddCisgICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZXhjZXB0aG9va19fJywgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAorICAgICdfX3BhY2thZ2VfXycsICdfX3N0ZGVycl9fJywgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywKKyAgICAnX2NsZWFyX3R5cGVfY2FjaGUnLCAnX2N1cnJlbnRfZnJhbWVzJywgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsCisgICAgJ19ob21lJywgJ19tZXJjdXJpYWwnLCAnX3hvcHRpb25zJywgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLAorICAgICdiYXNlX2V4ZWNfcHJlZml4JywgJ2Jhc2VfcHJlZml4JywgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsCisgICAgJ2NhbGxfdHJhY2luZycsICdjYWxsc3RhdHMnLCAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywKKyAgICAnZG9udF93cml0ZV9ieXRlY29kZScsICdleGNfaW5mbycsICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywKKyAgICAnZXhlY3V0YWJsZScsICdleGl0JywgJ2ZsYWdzJywgJ2Zsb2F0X2luZm8nLCAnZmxvYXRfcmVwcl9zdHlsZScsCisgICAgJ2dldGNoZWNraW50ZXJ2YWwnLCAnZ2V0ZGVmYXVsdGVuY29kaW5nJywgJ2dldGRsb3BlbmZsYWdzJywKKyAgICAnZ2V0ZmlsZXN5c3RlbWVuY29kaW5nJywgJ2dldG9iamVjdHMnLCAnZ2V0cHJvZmlsZScsICdnZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ2dldHJlZmNvdW50JywgJ2dldHNpemVvZicsICdnZXRzd2l0Y2hpbnRlcnZhbCcsICdnZXR0b3RhbHJlZmNvdW50JywKKyAgICAnZ2V0dHJhY2UnLCAnaGFzaF9pbmZvJywgJ2hleHZlcnNpb24nLCAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLAorICAgICdpbnRlcm4nLCAnbWF4c2l6ZScsICdtYXh1bmljb2RlJywgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLAorICAgICdwYXRoX2hvb2tzJywgJ3BhdGhfaW1wb3J0ZXJfY2FjaGUnLCAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsCisgICAgJ3NldGNoZWNraW50ZXJ2YWwnLCAnc2V0ZGxvcGVuZmxhZ3MnLCAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ3NldHN3aXRjaGludGVydmFsJywgJ3NldHRyYWNlJywgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLAorICAgICd0aHJlYWRfaW5mbycsICd2ZXJzaW9uJywgJ3ZlcnNpb25faW5mbycsICd3YXJub3B0aW9ucyddCiAKIFdpdGhvdXQgYXJndW1lbnRzLCA6ZnVuYzpgZGlyYCBsaXN0cyB0aGUgbmFtZXMgeW91IGhhdmUgZGVmaW5lZCBjdXJyZW50bHk6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CmluZGV4IDdlN2ExNTQuLjJlM2VkMTggMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAKICAgID4+PiBpbXBvcnQgb3MKICAgID4+PiBvcy5nZXRjd2QoKSAgICAgICMgUmV0dXJuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAnQzpcXFB5dGhvbjMzJworICAgJ0M6XFxQeXRob24zNCcKICAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykgICAjIENoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICA+Pj4gb3Muc3lzdGVtKCdta2RpciB0b2RheScpICAgIyBSdW4gdGhlIGNvbW1hbmQgbWtkaXIgaW4gdGhlIHN5c3RlbSBzaGVsbAogICAgMApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CmluZGV4IGMxZGQ2OWEuLmMwMTk3ZWEgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgICAgIGRbJ3ByaW1hcnknXSAgICAgICAgICAgICAgICAjIGVudHJ5IHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQKLSAgICAgRmlsZSAiQzovcHl0aG9uMzMvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXworICAgICBGaWxlICJDOi9weXRob24zNC9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCiAgICAgICAgbyA9IHNlbGYuZGF0YVtrZXldKCkKICAgIEtleUVycm9yOiAncHJpbWFyeScKIApkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL2NtZGxpbmUucnN0IGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CmluZGV4IDRlNzE2OGYuLmQxODIyZmIgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9jbWRsaW5lLnJzdAorKysgYi9Eb2MvdXNpbmcvY21kbGluZS5yc3QKQEAgLTI0LDcgKzI0LDcgQEAKIAogV2hlbiBpbnZva2luZyBQeXRob24sIHlvdSBtYXkgc3BlY2lmeSBhbnkgb2YgdGhlc2Ugb3B0aW9uczo6CiAKLSAgICBweXRob24gWy1iQmRFaGlPcXNTdXZWV3g/XSBbLWMgY29tbWFuZCB8IC1tIG1vZHVsZS1uYW1lIHwgc2NyaXB0IHwgLSBdIFthcmdzXQorICAgIHB5dGhvbiBbLWJCZEVoaUlPcXNTdXZWV3g/XSBbLWMgY29tbWFuZCB8IC1tIG1vZHVsZS1uYW1lIHwgc2NyaXB0IHwgLSBdIFthcmdzXQogCiBUaGUgbW9zdCBjb21tb24gdXNlIGNhc2UgaXMsIG9mIGNvdXJzZSwgYSBzaW1wbGUgaW52b2NhdGlvbiBvZiBhIHNjcmlwdDo6CiAKQEAgLTE0Nyw3ICsxNDcsMTIgQEAKIAogSWYgbm8gaW50ZXJmYWNlIG9wdGlvbiBpcyBnaXZlbiwgOm9wdGlvbjpgLWlgIGlzIGltcGxpZWQsIGBgc3lzLmFyZ3ZbMF1gYCBpcwogYW4gZW1wdHkgc3RyaW5nIChgYCIiYGApIGFuZCB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBhZGRlZCB0byB0aGUKLXN0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuCitzdGFydCBvZiA6ZGF0YTpgc3lzLnBhdGhgLiAgQWxzbywgdGFiLWNvbXBsZXRpb24gYW5kIGhpc3RvcnkgZWRpdGluZyBpcworYXV0b21hdGljYWxseSBlbmFibGVkLCBpZiBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybSAoc2VlCis6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEF1dG9tYXRpYyBlbmFibGluZyBvZiB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nLgogCiAuLiBzZWVhbHNvOjogIDpyZWY6YHR1dC1pbnZva2luZ2AKIApAQCAtMTcwLDYgKzE3NSw4IEBACiAgICAgICAgUHl0aG9uIDMuMAogCiAKKy4uIF91c2luZy1vbi1taXNjLW9wdGlvbnM6CisKIE1pc2NlbGxhbmVvdXMgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTIwOCw2ICsyMTUsMTcgQEAKICAgIHJhaXNlcyBhbiBleGNlcHRpb24uICBTZWUgYWxzbyA6ZW52dmFyOmBQWVRIT05JTlNQRUNUYC4KIAogCisuLiBjbWRvcHRpb246OiAtSQorCisgICBSdW4gUHl0aG9uIGluIGlzb2xhdGVkIG1vZGUuIFRoaXMgYWxzbyBpbXBsaWVzIC1FIGFuZCAtcy4KKyAgIEluIGlzb2xhdGVkIG1vZGUgOmRhdGE6YHN5cy5wYXRoYCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yCisgICB0aGUgdXNlcidzIHNpdGUtcGFja2FnZXMgZGlyZWN0b3J5LiBBbGwgOmVudnZhcjpgUFlUSE9OKmAgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLiBGdXJ0aGVyIHJlc3RyaWN0aW9ucyBtYXkgYmUgaW1wb3NlZCB0byBwcmV2ZW50CisgICB0aGUgdXNlciBmcm9tIGluamVjdGluZyBtYWxpY2lvdXMgY29kZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY21kb3B0aW9uOjogLU8KIAogICAgVHVybiBvbiBiYXNpYyBvcHRpbWl6YXRpb25zLiAgVGhpcyBjaGFuZ2VzIHRoZSBmaWxlbmFtZSBleHRlbnNpb24gZm9yCkBAIC0zNTgsOSArMzc2LDE5IEBACiAuLiBjbWRvcHRpb246OiAtWAogCiAgICBSZXNlcnZlZCBmb3IgdmFyaW91cyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvcHRpb25zLiAgQ1B5dGhvbiBjdXJyZW50bHkKLSAgIGRlZmluZXMganVzdCBvbmUsIHlvdSBjYW4gdXNlIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlCi0gICA6bW9kOmBmYXVsdGhhbmRsZXJgLiBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlCi0gICB0aGVtIHRocm91Z2ggdGhlIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgorICAgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHBvc3NpYmxlIHZhbHVlczoKKworICAgKiBgYC1YIGZhdWx0aGFuZGxlcmBgIHRvIGVuYWJsZSA6bW9kOmBmYXVsdGhhbmRsZXJgOworICAgKiBgYC1YIHNob3dyZWZjb3VudGBgIHRvIGVuYWJsZSB0aGUgb3V0cHV0IG9mIHRoZSB0b3RhbCByZWZlcmVuY2UgY291bnQKKyAgICAgYW5kIG1lbW9yeSBibG9ja3MgKG9ubHkgd29ya3Mgb24gZGVidWcgYnVpbGRzKTsKKyAgICogYGAtWCB0cmFjZW1hbGxvY2BgIHRvIHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyB1c2luZyB0aGUKKyAgICAgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4gQnkgZGVmYXVsdCwgb25seSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgaXMKKyAgICAgc3RvcmVkIGluIGEgdHJhY2ViYWNrIG9mIGEgdHJhY2UuIFVzZSBgYC1YIHRyYWNlbWFsbG9jPU5GUkFNRWBgIHRvIHN0YXJ0CisgICAgIHRyYWNpbmcgd2l0aCBhIHRyYWNlYmFjayBsaW1pdCBvZiAqTkZSQU1FKiBmcmFtZXMuIFNlZSB0aGUKKyAgICAgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgSXQgYWxzbyBhbGxvd3MgdG8gcGFzcyBhcmJpdHJhcnkgdmFsdWVzIGFuZCByZXRyaWV2ZSB0aGVtIHRocm91Z2ggdGhlCisgICA6ZGF0YTpgc3lzLl94b3B0aW9uc2AgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEl0IGlzIG5vdyBhbGxvd2VkIHRvIHBhc3MgOm9wdGlvbjpgLVhgIHdpdGggQ1B5dGhvbi4KQEAgLTM2OCw2ICszOTYsOSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAgICAgICBUaGUgYGAtWCBmYXVsdGhhbmRsZXJgYCBvcHRpb24uCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlIGBgLVggc2hvd3JlZmNvdW50YGAgYW5kIGBgLVggdHJhY2VtYWxsb2NgYCBvcHRpb25zLgorCiAKIE9wdGlvbnMgeW91IHNob3VsZG4ndCB1c2UKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KQEAgLTM4NSw3ICs0MTYsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbmZsdWVuY2UgUHl0aG9uJ3MgYmVoYXZpb3IsIHRoZXkgYXJlIHByb2Nlc3NlZAotYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3RoZXIgdGhhbiAtRS4gIEl0IGlzIGN1c3RvbWFyeSB0aGF0CitiZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FIG9yIC1JLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdmVycmlkZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyB3aGVyZSB0aGVyZSBpcyBhCiBjb25mbGljdC4KIApAQCAtNDMwLDcgKzQ2MSw3IEBACiAgICBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2Ugd2hlcmUgaW50ZXJhY3RpdmUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHNvCiAgICB0aGF0IG9iamVjdHMgZGVmaW5lZCBvciBpbXBvcnRlZCBpbiBpdCBjYW4gYmUgdXNlZCB3aXRob3V0IHF1YWxpZmljYXRpb24gaW4KICAgIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uLiAgWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyA6ZGF0YTpgc3lzLnBzMWAgYW5kCi0gICA6ZGF0YTpgc3lzLnBzMmAgaW4gdGhpcyBmaWxlLgorICAgOmRhdGE6YHN5cy5wczJgIGFuZCB0aGUgaG9vayA6ZGF0YTpgc3lzLl9faW50ZXJhY3RpdmVob29rX19gIGluIHRoaXMgZmlsZS4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ZMksKQEAgLTQ4NSw5ICs1MTYsOSBAQAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQogCi0gICBJZiB0aGlzIGlzIHNldCwgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvciBgYC5weW9gYCBmaWxlcyBvbiB0aGUKLSAgIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvcgorICAgYGAucHlvYGAgZmlsZXMgb24gdGhlIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgc3BlY2lmeWluZyB0aGUgOm9wdGlvbjpgLUJgIG9wdGlvbi4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05IQVNIU0VFRApAQCAtNTEyLDEzICs1NDMsMTYgQEAKIC4uIGVudnZhcjo6IFBZVEhPTklPRU5DT0RJTkcKIAogICAgSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKLSAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiBUaGUKLSAgIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCi0gICA6ZnVuYzpgc3RyLmVuY29kZWAuCisgICBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheCBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gIEJvdGgKKyAgIHRoZSBgYGVuY29kaW5nbmFtZWBgIGFuZCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydHMgYXJlIG9wdGlvbmFsIGFuZCBoYXZlCisgICB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzdHIuZW5jb2RlYC4KIAogICAgRm9yIHN0ZGVyciwgdGhlIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUKICAgIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBlbmNvZGluZ25hbWVgYCBwYXJ0IGlzIG5vdyBvcHRpb25hbC4KKwogCiAuLiBlbnZ2YXI6OiBQWVRIT05OT1VTRVJTSVRFCiAKQEAgLTU1NiwxNSArNTkwLDI2IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkZBVUxUSEFORExFUgogCi0gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZAotICAgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKLSAgIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUKLSAgIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywKKyAgIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCBpcyBjYWxsZWQgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yCisgICA6Y29uc3Q6YFNJR1NFR1ZgLCA6Y29uc3Q6YFNJR0ZQRWAsIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQKKyAgIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzIHRvIGR1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZW52dmFyOjogUFlUSE9OVFJBQ0VNQUxMT0MKKworICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBzdGFydCB0cmFjaW5nCisgICBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBUaGUgdmFsdWUgb2YKKyAgIHRoZSB2YXJpYWJsZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiBhIHRyYWNlYmFjayBvZiBhCisgICB0cmFjZS4gRm9yIGV4YW1wbGUsIGBgUFlUSE9OVFJBQ0VNQUxMT0M9MWBgIHN0b3JlcyBvbmx5IHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWUuIFNlZSB0aGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRGVidWctbW9kZSB2YXJpYWJsZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9tYWMucnN0IGIvRG9jL3VzaW5nL21hYy5yc3QKaW5kZXggM2UxYjc0ZC4uNWJlNDM5ZiAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL21hYy5yc3QKKysrIGIvRG9jL3VzaW5nL21hYy5yc3QKQEAgLTI1LDcgKzI1LDcgQEAKIAogV2hhdCB5b3UgZ2V0IGFmdGVyIGluc3RhbGxpbmcgaXMgYSBudW1iZXIgb2YgdGhpbmdzOgogCi0qIEEgOmZpbGU6YE1hY1B5dGhvbiAzLjNgIGZvbGRlciBpbiB5b3VyIDpmaWxlOmBBcHBsaWNhdGlvbnNgIGZvbGRlci4gSW4gaGVyZQorKiBBIDpmaWxlOmBNYWNQeXRob24gMy40YCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKICAgeW91IGZpbmQgSURMRSwgdGhlIGRldmVsb3BtZW50IGVudmlyb25tZW50IHRoYXQgaXMgYSBzdGFuZGFyZCBwYXJ0IG9mIG9mZmljaWFsCiAgIFB5dGhvbiBkaXN0cmlidXRpb25zOyBQeXRob25MYXVuY2hlciwgd2hpY2ggaGFuZGxlcyBkb3VibGUtY2xpY2tpbmcgUHl0aG9uCiAgIHNjcmlwdHMgZnJvbSB0aGUgRmluZGVyOyBhbmQgdGhlICJCdWlsZCBBcHBsZXQiIHRvb2wsIHdoaWNoIGFsbG93cyB5b3UgdG8KQEAgLTkzLDcgKzkzLDcgQEAKIGFueXRoaW5nIHRoYXQgaGFzIGEgR1VJKSBuZWVkIHRvIGJlIHJ1biBpbiBhIHNwZWNpYWwgd2F5LiBVc2UgOnByb2dyYW06YHB5dGhvbndgCiBpbnN0ZWFkIG9mIDpwcm9ncmFtOmBweXRob25gIHRvIHN0YXJ0IHN1Y2ggc2NyaXB0cy4KIAotV2l0aCBQeXRob24gMy4zLCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgorV2l0aCBQeXRob24gMy40LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgogCiAKIENvbmZpZ3VyYXRpb24KQEAgLTE1OCw3ICsxNTgsNyBAQAogRGlzdHJpYnV0aW5nIFB5dGhvbiBBcHBsaWNhdGlvbnMgb24gdGhlIE1hYwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgIkJ1aWxkIEFwcGxldCIgdG9vbCB0aGF0IGlzIHBsYWNlZCBpbiB0aGUgTWFjUHl0aG9uIDMuMyBmb2xkZXIgaXMgZmluZSBmb3IKK1RoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy40IGZvbGRlciBpcyBmaW5lIGZvcgogcGFja2FnaW5nIHNtYWxsIFB5dGhvbiBzY3JpcHRzIG9uIHlvdXIgb3duIG1hY2hpbmUgdG8gcnVuIGFzIGEgc3RhbmRhcmQgTWFjCiBhcHBsaWNhdGlvbi4gVGhpcyB0b29sLCBob3dldmVyLCBpcyBub3Qgcm9idXN0IGVub3VnaCB0byBkaXN0cmlidXRlIFB5dGhvbgogYXBwbGljYXRpb25zIHRvIG90aGVyIHVzZXJzLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKaW5kZXggNWZkYmM5Yi4uODY4YmJjOCAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYworKysgYi9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCkBAIC0yNSw3ICsyNSw3IEBACiBUaGUgY29tbWFuZCwgaWYgcnVuIHdpdGggYGAtaGBgLCB3aWxsIHNob3cgdGhlIGF2YWlsYWJsZSBvcHRpb25zOjoKIAogICAgIHVzYWdlOiBweXZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQotICAgICAgICAgICAgICAgICAgWy0tdXBncmFkZV0gRU5WX0RJUiBbRU5WX0RJUiAuLi5dCisgICAgICAgICAgICAgICAgICBbLS11cGdyYWRlXSBbLS13aXRob3V0LXBpcF0gRU5WX0RJUiBbRU5WX0RJUiAuLi5dCiAKICAgICBDcmVhdGVzIHZpcnR1YWwgUHl0aG9uIGVudmlyb25tZW50cyBpbiBvbmUgb3IgbW9yZSB0YXJnZXQgZGlyZWN0b3JpZXMuCiAKQEAgLTQzLDYgKzQzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlZC4KICAgICAgIC0tdXBncmFkZSAgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuCisgICAgICAtLXdpdGhvdXQtcGlwICAgICAgICAgIFNraXBzIGluc3RhbGxpbmcgb3IgdXBncmFkaW5nIHBpcCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KQorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgSW5zdGFsbHMgcGlwIGJ5IGRlZmF1bHQsIGFkZGVkIHRoZSBgYC0td2l0aG91dC1waXBgYCBvcHRpb24KIAogSWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQsIHVubGVzcwogdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4KQEAgLTUxLDI1ICs1NiwyOSBAQAogYGBpbmNsdWRlLXN5c3RlbS1zaXRlLXBhY2thZ2VzYGAga2V5LCBzZXQgdG8gYGB0cnVlYGAgaWYgYGB2ZW52YGAgaXMKIHJ1biB3aXRoIHRoZSBgYC0tc3lzdGVtLXNpdGUtcGFja2FnZXNgYCBvcHRpb24sIGBgZmFsc2VgYCBvdGhlcndpc2UuCiAKK1VubGVzcyB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgb3B0aW9uIGlzIGdpdmVuLCA6bW9kOmBlbnN1cmVwaXBgIHdpbGwgYmUKK2ludm9rZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKwogTXVsdGlwbGUgcGF0aHMgY2FuIGJlIGdpdmVuIHRvIGBgcHl2ZW52YGAsIGluIHdoaWNoIGNhc2UgYW4gaWRlbnRpY2FsCiB2aXJ0dWFsZW52IHdpbGwgYmUgY3JlYXRlZCwgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvcHRpb25zLCBhdCBlYWNoCiBwcm92aWRlZCBwYXRoLgogCiBPbmNlIGEgdmVudiBoYXMgYmVlbiBjcmVhdGVkLCBpdCBjYW4gYmUgImFjdGl2YXRlZCIgdXNpbmcgYSBzY3JpcHQgaW4gdGhlCi12ZW52J3MgYmluYXJ5IGRpcmVjdG9yeS4gVGhlIGludm9jYXRpb24gb2YgdGhlIHNjcmlwdCBpcyBwbGF0Zm9ybS1zcGVjaWZpYzogb24KLWEgUG9zaXggcGxhdGZvcm0sIHlvdSB3b3VsZCB0eXBpY2FsbHkgZG86OgordmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6CiAKLSAgICAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlCi0KLXdoZXJlYXMgb24gV2luZG93cywgeW91IG1pZ2h0IGRvOjoKLQotICAgIEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUKLQotaWYgeW91IGFyZSB1c2luZyB0aGUgYGBjbWQuZXhlYGAgc2hlbGwsIG9yIHBlcmhhcHM6OgotCi0gICAgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEKLQotaWYgeW91IHVzZSBQb3dlclNoZWxsLgorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBsYXRmb3JtICAgIHwgU2hlbGwgICAgICAgICAgIHwgQ29tbWFuZCB0byBhY3RpdmF0ZSB2aXJ0dWFsIGVudmlyb25tZW50IHwKKys9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBQb3NpeCAgICAgICB8IGJhc2gvenNoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBmaXNoICAgICAgICAgICAgfCAkIC4gPHZlbnY+L2Jpbi9hY3RpdmF0ZS5maXNoICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgY3NoL3Rjc2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZS5jc2ggICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBXaW5kb3dzICAgICB8IGNtZC5leGUgICAgICAgICB8IEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUuYmF0ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBQb3dlclNoZWxsICAgICAgfCBQUyBDOlw+IDx2ZW52Pi9TY3JpcHRzL0FjdGl2YXRlLnBzMSAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFlvdSBkb24ndCBzcGVjaWZpY2FsbHkgKm5lZWQqIHRvIGFjdGl2YXRlIGFuIGVudmlyb25tZW50OyBhY3RpdmF0aW9uIGp1c3QKIHByZXBlbmRzIHRoZSB2ZW52J3MgYmluYXJ5IGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsIHNvIHRoYXQgInB5dGhvbiIgaW52b2tlcyB0aGUKZGlmZiAtLWdpdCBhL0RvYy91c2luZy93aW5kb3dzLnJzdCBiL0RvYy91c2luZy93aW5kb3dzLnJzdAppbmRleCAzZThiMDY0Li40ZGZlNDdiIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvd2luZG93cy5yc3QKKysrIGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CkBAIC01NjMsMTIgKzU2Myw2IEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IERpcmVjdG9yeSAgICAgICAgICB8IE1TVkMgdmVyc2lvbiB8IFZpc3VhbCBTdHVkaW8gdmVyc2lvbiB8CiArPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rCi18IDpmaWxlOmBQQy9WQzYvYCAgICB8IDYuMCAgICAgICAgICB8IDk3ICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpmaWxlOmBQQy9WUzcuMS9gICB8IDcuMSAgICAgICAgICB8IDIwMDMgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpmaWxlOmBQQy9WUzguMC9gICB8IDguMCAgICAgICAgICB8IDIwMDUgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpmaWxlOmBQQy9WUzkuMC9gICB8IDkuMCAgICAgICAgICB8IDIwMDggICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpmaWxlOmBQQ2J1aWxkL2AgICB8IDEwLjAgICAgICAgICB8IDIwMTAgICAgICAgICAgICAgICAgICB8CmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy40LnJzdCBiL0RvYy93aGF0c25ldy8zLjQucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkMzYwYzQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApAQCAtMCwwICsxLDEwNzAgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBJbiBQeXRob24gMy40CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKy4uIDpBdXRob3I6IFNvbWVvbmUgPGVtYWlsPgorICAgKHVuY29tbWVudCBpZiB0aGVyZSBpcyBhIHByaW5jaXBhbCBhdXRob3IpCisKKy4uIFJ1bGVzIGZvciBtYWludGVuYW5jZToKKworICAgKiBBbnlvbmUgY2FuIGFkZCB0ZXh0IHRvIHRoaXMgZG9jdW1lbnQsIGJ1dCB0aGUgbWFpbnRhaW5lciByZXNlcnZlcyB0aGUKKyAgIHJpZ2h0IHRvIHJld3JpdGUgYW55IGFkZGl0aW9ucy4gSW4gcGFydGljdWxhciwgZm9yIG9ic2N1cmUgb3IgZXNvdGVyaWMKKyAgIGZlYXR1cmVzLCB0aGUgbWFpbnRhaW5lciBtYXkgcmVkdWNlIGFueSBhZGRpdGlvbiB0byBhIHNpbXBsZSByZWZlcmVuY2UgdG8KKyAgIHRoZSBuZXcgZG9jdW1lbnRhdGlvbiByYXRoZXIgdGhhbiBleHBsYWluaW5nIHRoZSBmZWF0dXJlIGlubGluZS4KKworICAgKiBXaGlsZSB0aGUgbWFpbnRhaW5lciB3aWxsIHBlcmlvZGljYWxseSBnbyB0aHJvdWdoIE1pc2MvTkVXUworICAgYW5kIGFkZCBjaGFuZ2VzLCBpdCdzIGJlc3Qgbm90IHRvIHJlbHkgb24gdGhpcy4gV2Uga25vdyBmcm9tIGV4cGVyaWVuY2UKKyAgIHRoYXQgYW55IGNoYW5nZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIFdoYXQncyBOZXcgZG9jdW1lbnRhdGlvbiBhcm91bmQgdGhlCisgICB0aW1lIG9mIHRoZSBvcmlnaW5hbCByZWxlYXNlIHdpbGwgcmVtYWluIGxhcmdlbHkgdW5rbm93biB0byB0aGUgY29tbXVuaXR5CisgICBmb3IgeWVhcnMsIGV2ZW4gaWYgdGhleSdyZSBhZGRlZCBsYXRlci4gV2UgYWxzbyBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0CisgICBvdGhlciBwcmlvcml0aWVzIGNhbiBhcmlzZSwgYW5kIHRoZSBtYWludGFpbmVyIHdpbGwgcnVuIG91dCBvZiB0aW1lIHRvIGRvCisgICB1cGRhdGVzIC0gaW4gc3VjaCBjYXNlcywgZW5kIHVzZXJzIHdpbGwgYmUgbXVjaCBiZXR0ZXIgc2VydmVkIGJ5IHBhcnRpYWwKKyAgIG5vdGlmaWNhdGlvbnMgdGhhdCBhdCBsZWFzdCBnaXZlIGEgaGludCBhYm91dCBuZXcgZmVhdHVyZXMgdG8KKyAgIGludmVzdGlnYXRlLgorCisgICAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBldmVyeSBzaW5nbGUgY2hhbmdlOyBjb21wbGV0ZW5lc3MKKyAgIGlzIHRoZSBwdXJwb3NlIG9mIE1pc2MvTkVXUy4gVGhlIFdoYXQncyBOZXcgc2hvdWxkIGZvY3VzIG9uIGNoYW5nZXMgdGhhdAorICAgYXJlIHZpc2libGUgdG8gUHl0aG9uICp1c2VycyogYW5kIHRoYXQgKnJlcXVpcmUqIGEgZmVhdHVyZSByZWxlYXNlIChpLmUuCisgICBtb3N0IGJ1ZyBmaXhlcyBzaG91bGQgb25seSBiZSByZWNvcmRlZCBpbiBNaXNjL05FV1MpCisKKyAgICogUEVQcyBzaG91bGQgbm90IGJlIG1hcmtlZCBGaW5hbCB1bnRpbCB0aGV5IGhhdmUgYW4gZW50cnkgaW4gV2hhdCdzIE5ldy4KKyAgIEEgcGxhY2Vob2xkZXIgZW50cnkgdGhhdCBpcyBqdXN0IGEgc2VjdGlvbiBoZWFkZXIgYW5kIGEgbGluayB0byB0aGUgUEVQCisgICAoZS5nICI6cGVwOmAzOTdgIGhhcyBiZWVuIGltcGxlbWVudGVkIikgaXMgYWNjZXB0YWJsZS4gSWYgYSBQRVAgaGFzIGJlZW4KKyAgIGltcGxlbWVudGVkIGFuZCBub3RlZCBpbiBXaGF0J3MgTmV3LCBkb24ndCBmb3JnZXQgdG8gbWFyayBpdCBhcyBGaW5hbCEKKworICAgKiBJZiB5b3Ugd2FudCB0byBkcmF3IHlvdXIgbmV3IHRleHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUKKyAgIG1haW50YWluZXIsIGFkZCAnWFhYJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGggb3IKKyAgIHNlY3Rpb24uCisKKyAgICogSXQncyBPSyB0byBhZGQganVzdCBhIHZlcnkgYnJpZWYgbm90ZSBhYm91dCBhIGNoYW5nZS4gIEZvcgorICAgZXhhbXBsZTogIlRoZSA6cmVmOmB+c29ja2V0LnRyYW5zbW9ncmlmeSgpYCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gdGhlCisgICA6bW9kOmBzb2NrZXRgIG1vZHVsZS4iICBUaGUgbWFpbnRhaW5lciB3aWxsIHJlc2VhcmNoIHRoZSBjaGFuZ2UgYW5kCisgICB3cml0ZSB0aGUgbmVjZXNzYXJ5IHRleHQgKGlmIGFwcHJvcHJpYXRlKS4gVGhlIGFkdmFudGFnZSBvZiBkb2luZyB0aGlzCisgICBpcyB0aGF0IGV2ZW4gaWYgbm8gbW9yZSBkZXNjcmlwdGl2ZSB0ZXh0IGlzIGV2ZXIgYWRkZWQsIHJlYWRlcnMgd2lsbCBhdAorICAgbGVhc3QgaGF2ZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBuZXcgZmVhdHVyZSBleGlzdHMgYW5kIGEgbGluayB0byB0aGUKKyAgIHJlbGV2YW50IGRvY3VtZW50YXRpb24uCisKKyAgICogWW91IGNhbiBjb21tZW50IG91dCB5b3VyIGFkZGl0aW9ucyBpZiB5b3UgbGlrZSwgYnV0IGl0J3Mgbm90CisgICBuZWNlc3NhcnkgKGVzcGVjaWFsbHkgd2hlbiBhIGZpbmFsIHJlbGVhc2UgaXMgc29tZSBtb250aHMgYXdheSkuCisKKyAgICogQ3JlZGl0IHRoZSBhdXRob3Igb2YgYSBwYXRjaCBvciBidWdmaXguICAgSnVzdCB0aGUgbmFtZSBpcworICAgc3VmZmljaWVudDsgdGhlIGUtbWFpbCBhZGRyZXNzIGlzbid0IG5lY2Vzc2FyeS4KKworICAgKiBJdCdzIGhlbHBmdWwgdG8gYWRkIHRoZSBidWcvcGF0Y2ggbnVtYmVyIGFzIGEgY29tbWVudDoKKworICAgVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiAoQ29udHJpYnV0ZWQgYnkgUC5ZLiBEZXZlbG9wZXIgaW4gOmlzc3VlOmAxMjM0NWAuKQorCisgICBUaGlzIHNhdmVzIHRoZSBtYWludGFpbmVyIHRoZSBlZmZvcnQgb2YgZ29pbmcgdGhyb3VnaCB0aGUgTWVyY3VyaWFsIGxvZworICAgd2hlbiByZXNlYXJjaGluZyBhIGNoYW5nZS4KKworICAgKiBDcm9zcyByZWZlcmVuY2luZyB0aXA6IDpyZWY6YG1vZC5hdHRyYCB3aWxsIGRpc3BsYXkgYXMgYGBtb2QuYXR0cmBgLAorICAgd2hpbGUgOnJlZjpgfm1vZC5hdHRyYCB3aWxsIGRpc3BsYXkgYXMgYGBhdHRyYGAuCisKK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAzLjQsIGNvbXBhcmVkIHRvIDMuMy4KKworLi4gUHl0aG9uIDMuNCB3YXMgcmVsZWFzZWQgb24gVEJELgorCitGb3IgZnVsbCBkZXRhaWxzLCBzZWUgdGhlCitgY2hhbmdlbG9nIDxodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KKworLi4gbm90ZTo6IFByZXJlbGVhc2UgdXNlcnMgc2hvdWxkIGJlIGF3YXJlIHRoYXQgdGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgaW4KKyAgIGRyYWZ0IGZvcm0uIEl0IHdpbGwgYmUgdXBkYXRlZCBzdWJzdGFudGlhbGx5IGFzIFB5dGhvbiAzLjQgbW92ZXMgdG93YXJkcworICAgcmVsZWFzZSwgc28gaXQncyB3b3J0aCBjaGVja2luZyBiYWNrIGV2ZW4gYWZ0ZXIgcmVhZGluZyBlYXJsaWVyIHZlcnNpb25zLgorCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjlgIC0gUHl0aG9uIDMuNCBSZWxlYXNlIFNjaGVkdWxlCisKKworU3VtbWFyeSAtLSBSZWxlYXNlIGhpZ2hsaWdodHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIFRoaXMgc2VjdGlvbiBzaW5nbGVzIG91dCB0aGUgbW9zdCBpbXBvcnRhbnQgY2hhbmdlcyBpbiBQeXRob24gMy40LgorICAgQnJldml0eSBpcyBrZXkuCisKK05ldyBzeW50YXggZmVhdHVyZXM6CisKKyogTm8gbmV3IHN5bnRheCBmZWF0dXJlcyBhcmUgcGxhbm5lZCBmb3IgUHl0aG9uIDMuNC4KKworTmV3IGxpYnJhcnkgbW9kdWxlczoKKworKiA6bW9kOmBhc3luY2lvYDogTmV3IHByb3Zpc29uYWwgQVBJIGZvciBhc3luY2hyb25vdXMgSU8gKDpwZXA6YDMxNTZgKS4KKyogOm1vZDpgZW51bWA6IFN1cHBvcnQgZm9yIGVudW1lcmF0aW9uIHR5cGVzICg6cGVwOmA0MzVgKS4KKyogOm1vZDpgZW5zdXJlcGlwYDogQm9vdHN0cmFwcGluZyB0aGUgcGlwIGluc3RhbGxlciAoOnBlcDpgNDUzYCkuCisqIDptb2Q6YHBhdGhsaWJgOiBPYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocyAoOnBlcDpgNDI4YCkuCisqIDptb2Q6YHNlbGVjdG9yc2A6IEhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZQorICA6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorKiA6bW9kOmBzdGF0aXN0aWNzYDogQSBiYXNpYyBudW1lcmljYWxseSBzdGFibGUgc3RhdGlzdGljcyBsaWJyYXJ5ICg6cGVwOmA0NTBgKS4KKyogOm1vZDpgdHJhY2VtYWxsb2NgOiBUcmFjZSBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zICg6cGVwOmA0NTRgKS4KKworTmV3IGV4cGVjdGVkIGZlYXR1cmVzIGZvciBQeXRob24gaW1wbGVtZW50YXRpb25zOgorCisqIDpyZWY6YFBFUCA0NDY6IE1ha2UgbmV3bHkgY3JlYXRlZCBmaWxlIGRlc2NyaXB0b3JzIG5vbi1pbmhlcml0YWJsZSA8cGVwLTQ0Nj5gLgorKiBjb21tYW5kIGxpbmUgb3B0aW9uIGZvciA6cmVmOmBpc29sYXRlZCBtb2RlIDx1c2luZy1vbi1taXNjLW9wdGlvbnM+YCwKKyAgKDppc3N1ZTpgMTY0OTlgKS4KKyogOnJlZjpgaW1wcm92ZW1lbnRzIDxjb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM+YCBpbiB0aGUgaGFuZGxpbmcgb2YKKyAgY29kZWNzIHRoYXQgYXJlIG5vdCB0ZXh0IGVuY29kaW5ncworCitTaWduaWZpY2FudGx5IEltcHJvdmVkIExpYnJhcnkgTW9kdWxlczoKKworKiBTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMgaW4gOm1vZDpgZnVuY3Rvb29sc2AgKDpwZXA6YDQ0M2ApCisqIE5ldyA6bW9kOmBwaWNrbGVgIHByb3RvY29sIDQgKDpwZXA6YDMxNTRgKQorKiBTSEEtMyAoS2VjY2FrKSBzdXBwb3J0IGZvciA6bW9kOmBoYXNobGliYC4KKyogVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0IGZvciA6bW9kOmBzc2xgLgorKiA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5vdyBoYXMgb3B0aW9uIHRvIGF2b2lkIHVzaW5nIDpmdW5jOmBvcy5mb3JrYAorICBvbiBVbml4ICg6aXNzdWU6YDg3MTNgKS4KKworQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBpbXByb3ZlbWVudHM6CisKKyogOnJlZjpgUEVQIDQ0MjogU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIDxwZXAtNDQyPmAKKyogOnJlZjpgUEVQIDQ0NTogQ29uZmlndXJhYmxlIG1lbW9yeSBhbGxvY2F0b3JzIDxwZXAtNDQ1PmAKKyogOnBlcDpgNDU2YCBTZWN1cmUgYW5kIGludGVyY2hhbmdlYWJsZSBoYXNoIGFsZ29yaXRobQorKiBJbXByb3ZlIGZpbmFsaXphdGlvbiBvZiBQeXRob24gbW9kdWxlcyB0byBhdm9pZCBzZXR0aW5nIHRoZWlyIGdsb2JhbHMKKyAgdG8gTm9uZSwgaW4gbW9zdCBjYXNlcyAoOmlzc3VlOmAxODIxNGApLgorKiBBIG1vcmUgZWZmaWNpZW50IDptb2Q6YG1hcnNoYWxgIGZvcm1hdCAoOmlzc3VlOmAxNjQ3NWApLgorKiAiQXJndW1lbnQgQ2xpbmljIiwgYW4gaW5pdGlhbCBzdGVwIHRvd2FyZHMgcHJvdmlkaW5nIGltcHJvdmVkIGludHJvc3BlY3Rpb24KKyAgc3VwcG9ydCBmb3IgYnVpbHRpbiBhbmQgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gdHlwZXMgaW1wbGVtZW50ZWQgaW4gQworICAoOnBlcDpgNDM2YCkKKworUGxlYXNlIHJlYWQgb24gZm9yIGEgY29tcHJlaGVuc2l2ZSBsaXN0IG9mIHVzZXItZmFjaW5nIGNoYW5nZXMuCisKKworUEVQIDQ1MzogRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBuZXcgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgNDUzYCkgcHJvdmlkZXMgYSBzdGFuZGFyZAorY3Jvc3MtcGxhdGZvcm0gbWVjaGFuaXNtIHRvIGJvb3N0cmFwIHRoZSBwaXAgaW5zdGFsbGVyIGludG8gUHl0aG9uCitpbnN0YWxsYXRpb25zIGFuZCB2aXJ0dWFsIGVudmlyb25tZW50cy4KKworVGhlIDptb2Q6YHZlbnZgIG1vZHVsZSBhbmQgdGhlIDpjb21tYW5kOmBweXZlbnZgIHV0aWxpdHkgbWFrZSB1c2Ugb2YgdGhpcworbW9kdWxlIHRvIG1ha2UgYGBwaXBgYCByZWFkaWx5IGF2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gV2hlbgordXNpbmcgdGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UsIGBgcGlwYGAgaXMgaW5zdGFsbGVkIGJ5IGRlZmF1bHQsIHdoaWxlCitmb3IgdGhlIG1vZHVsZSBBUEkgaW5zdGFsbGF0aW9uIG9mIGBgcGlwYGAgbXVzdCBiZSByZXF1ZXN0ZWQgZXhwbGljaXRseS4KKworRm9yIENQeXRob24gc291cmNlIGJ1aWxkcyBvbiBQT1NJWCBzeXN0ZW1zLCB0aGUgYGBtYWtlIGluc3RhbGxgYCBhbmQKK2BgbWFrZSBhbHRpbnN0YWxsYGAgY29tbWFuZHMgYm9vdHN0cmFwIGBgcGlwYGAgYnkgZGVmYXVsdC4gVGhpcyBiZWhhdmlvdXIKK2NhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY29uZmlndXJlIG9wdGlvbnMsIGFuZCBvdmVycmlkZGVuIHRocm91Z2gKK01ha2VmaWxlIG9wdGlvbnMuCisKK09uIFdpbmRvd3MgYW5kIE1hYyBPUyBYLCB0aGUgQ1B5dGhvbiBpbnN0YWxsZXJzIG5vdyBvZmZlciB0aGUgb3B0aW9uIHRvCitpbnN0YWxsIGBgcGlwYGAgYWxvbmcgd2l0aCBDUHl0aG9uIGl0c2VsZi4KKworLi4gbm90ZTo6CisKKyAgIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBQRVAgNDUzIGlzIHN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4gUmVmZXIgdG8KKyAgIDppc3N1ZTpgMTkzNDdgIGZvciB0aGUgcHJvZ3Jlc3Mgb24gYWRkaXRpb25hbCBzdGVwczoKKworICAgKiBIYXZpbmcgdGhlIGJpbmFyeSBpbnN0YWxsZXJzIGluc3RhbGwgYGBwaXBgYCBieSBkZWZhdWx0CisgICAqIFJlY29tbWVuZGluZyB0aGUgdXNlIG9mIGBgcGlwYGAgaW4gdGhlICJJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGUiCisgICAgIGRvY3VtZW50YXRpb24uCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTNgIC0gRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGJ5IERvbmFsZCBTdHVmZnQgYW5kIE5pY2sgQ29naGxhbiwgaW1wbGVtZW50ZWQgYnkKKyAgICAgIERvbmFsZCBTdHVmZnQsIE5pY2sgQ29naGxhbiwgTWFydGluIHZvbiBMw7Z3aXMgYW5kIE5lZCBEZWlseS4KKworCisuLiBfcGVwLTQ0NjoKKworUEVQIDQ0NjogTWFrZSBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgbm9uLWluaGVyaXRhYmxlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOnBlcDpgNDQ2YCBtYWtlcyBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgOnJlZjpgbm9uLWluaGVyaXRhYmxlCis8ZmRfaW5oZXJpdGFuY2U+YC4gIE5ldyBmdW5jdGlvbnMgYW5kIG1ldGhvZHM6CisKKyogOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaW5oZXJpdGFibGVgCisqIDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgCisqIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldF9pbmhlcml0YWJsZWAsIDptZXRoOmBzb2NrZXQuc29ja2V0LnNldF9pbmhlcml0YWJsZWAKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0NmAgLSBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworCisuLiBfY29kZWMtaGFuZGxpbmctaW1wcm92ZW1lbnRzOgorCitJbXByb3ZlbWVudHMgdG8gY29kZWMgaGFuZGxpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTaW5jZSBpdCB3YXMgZmlyc3QgaW50cm9kdWNlZCwgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGhhcyBhbHdheXMgYmVlbgoraW50ZW5kZWQgdG8gb3BlcmF0ZSBhcyBhIHR5cGUtbmV1dHJhbCBkeW5hbWljIGVuY29kaW5nIGFuZCBkZWNvZGluZworc3lzdGVtLiBIb3dldmVyLCBpdHMgY2xvc2UgY291cGxpbmcgd2l0aCB0aGUgUHl0aG9uIHRleHQgbW9kZWwsIGVzcGVjaWFsbHkKK3RoZSB0eXBlIHJlc3RyaWN0ZWQgY29udmVuaWVuY2UgbWV0aG9kcyBvbiB0aGUgYnVpbHRpbiA6Y2xhc3M6YHN0cmAsCis6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIHR5cGVzLCBoYXMgaGlzdG9yaWNhbGx5IG9ic2N1cmVkIHRoYXQKK2ZhY3QuCisKK0FzIGEga2V5IHN0ZXAgaW4gY2xhcmlmeWluZyB0aGUgc2l0dWF0aW9uLCB0aGUgOm1ldGg6YGNvZGVjcy5lbmNvZGVgIGFuZAorOm1ldGg6YGNvZGVjcy5kZWNvZGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhcmUgbm93IHByb3Blcmx5IGRvY3VtZW50ZWQgaW4KK1B5dGhvbiAyLjcsIDMuMyBhbmQgMy40LiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBleGlzdGVkIGluIHRoZSA6bW9kOmBjb2RlY3NgCittb2R1bGUgKGFuZCBoYXZlIGJlZW4gY292ZXJlZCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlKSBzaW5jZSBQeXRob24gMi40LAorYnV0IHdlcmUgcHJldmlvdXNseSBvbmx5IGRpc2NvdmVyYWJsZSB0aHJvdWdoIHJ1bnRpbWUgaW50cm9zcGVjdGlvbi4KKworVW5saWtlIHRoZSBjb252ZW5pZW5jZSBtZXRob2RzIG9uIDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AgYW5kCis6Y2xhc3M6YGJ5dGVhcnJheWAsIHRoZXNlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzdXBwb3J0IGFyYml0cmFyeSBjb2RlY3MKK2luIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzLCByYXRoZXIgdGhhbiBiZWluZyBsaW1pdGVkIHRvIFVuaWNvZGUgdGV4dAorZW5jb2RpbmdzIChpbiBQeXRob24gMykgb3IgYGBiYXNlc3RyaW5nYGAgPC0+IGBgYmFzZXN0cmluZ2BgIGNvbnZlcnNpb25zCisoaW4gUHl0aG9uIDIpLgorCitJbiBQeXRob24gMy40LCB0aGUgaW50ZXJwcmV0ZXIgaXMgYWJsZSB0byBpZGVudGlmeSB0aGUga25vd24gbm9uLXRleHQKK2VuY29kaW5ncyBwcm92aWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgZGlyZWN0IHVzZXJzIHRvd2FyZHMgdGhlc2UKK2dlbmVyYWwgcHVycG9zZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgd2hlbiBhcHByb3ByaWF0ZTo6CisKKyAgICA+Pj4gYiJhYmNkZWYiLmRlY29kZSgiaGV4IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAnaGV4JyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyB1c2UgY29kZWNzLmRlY29kZSgpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzCisKKyAgICA+Pj4gImhlbGxvIi5lbmNvZGUoInJvdDEzIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAncm90MTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworSW4gYSByZWxhdGVkIGNoYW5nZSwgd2hlbmV2ZXIgaXQgaXMgZmVhc2libGUgd2l0aG91dCBicmVha2luZyBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHksIGV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb3BlcmF0aW9ucword2lsbCBiZSB3cmFwcGVkIGluIGEgY2hhaW5lZCBleGNlcHRpb24gb2YgdGhlIHNhbWUgdHlwZSB0aGF0IG1lbnRpb25zIHRoZQorbmFtZSBvZiB0aGUgY29kZWMgcmVzcG9uc2libGUgZm9yIHByb2R1Y2luZyB0aGUgZXJyb3I6OgorCisgICAgPj4+IGltcG9ydCBjb2RlY3MKKworICAgID4+PiBjb2RlY3MuZGVjb2RlKGIiYWJjZGVmZ2giLCAiaGV4IikKKyAgICBiaW5hc2NpaS5FcnJvcjogTm9uLWhleGFkZWNpbWFsIGRpZ2l0IGZvdW5kCisKKyAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBiaW5hc2NpaS5FcnJvcjogZGVjb2Rpbmcgd2l0aCAnaGV4JyBjb2RlYyBmYWlsZWQgKEVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQpCisKKyAgICA+Pj4gY29kZWNzLmVuY29kZSgiaGVsbG8iLCAiYnoyIikKKyAgICBUeXBlRXJyb3I6ICdzdHInIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UKKworICAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFR5cGVFcnJvcjogZW5jb2Rpbmcgd2l0aCAnYnoyJyBjb2RlYyBmYWlsZWQgKFR5cGVFcnJvcjogJ3N0cicgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSkKKworRmluYWxseSwgYXMgdGhlIGV4YW1wbGVzIGFib3ZlIHNob3csIHRoZXNlIGltcHJvdmVtZW50cyBoYXZlIHBlcm1pdHRlZAordGhlIHJlc3RvcmF0aW9uIG9mIHRoZSBjb252ZW5pZW5jZSBhbGlhc2VzIGZvciB0aGUgbm9uLVVuaWNvZGUgY29kZWNzIHRoYXQKK3dlcmUgdGhlbXNlbHZlcyByZXN0b3JlZCBpbiBQeXRob24gMy4yLiBUaGlzIG1lYW5zIHRoYXQgZW5jb2RpbmcgYmluYXJ5IGRhdGEKK3RvIGFuZCBmcm9tIGl0cyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiAoZm9yIGV4YW1wbGUpIGNhbiBub3cgYmUgd3JpdHRlbgorYXM6OgorCisgICAgPj4+IGZyb20gY29kZWNzIGltcG9ydCBlbmNvZGUsIGRlY29kZQorICAgID4+PiBlbmNvZGUoYiJoZWxsbyIsICJoZXgiKQorICAgIGInNjg2NTZjNmM2ZicKKyAgICA+Pj4gZGVjb2RlKGIiNjg2NTZjNmM2ZiIsICJoZXgiKQorICAgIGInaGVsbG8nCisKK1RoZSBiaW5hcnkgYW5kIHRleHQgdHJhbnNmb3JtcyBwcm92aWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhcmUgZGV0YWlsZWQKK2luIDpyZWY6YGJpbmFyeS10cmFuc2Zvcm1zYCBhbmQgOnJlZjpgdGV4dC10cmFuc2Zvcm1zYC4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDc0NzVgLCAsIDppc3N1ZTpgMTc4MjdgLAorOmlzc3VlOmAxNzgyOGAgYW5kIDppc3N1ZTpgMTk2MTlgKQorCisuLiBfcGVwLTQ1MToKKworUEVQIDQ1MTogQSBNb2R1bGVTcGVjIFR5cGUgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworOnBlcDpgNDUxYCBwcm92aWRlcyBhbiBlbmNhcHN1bGF0aW9uIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIG1vZHVsZQordGhhdCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZSB0byBsb2FkIGl0LCAoaS5lLiBhIG1vZHVsZSBzcGVjKS4KK1RoaXMgaGVscHMgc2ltcGxpZnkgYm90aCB0aGUgaW1wb3J0IGltcGxlbWVudGF0aW9uIGFuZCBzZXZlcmFsCitpbXBvcnQtcmVsYXRlZCBBUElzLiAgVGhlIGNoYW5nZSBpcyBhbHNvIGEgc3RlcHBpbmcgc3RvbmUgZm9yIHNldmVyYWwKK2Z1dHVyZSBpbXBvcnQtcmVsYXRlZCBpbXByb3ZlbWVudHMuCisKK2h0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMTMtTm92ZW1iZXIvMTMwMTExLmh0bWwKKworVGhlIHB1YmxpYy1mYWNpbmcgY2hhbmdlcyBmcm9tIHRoZSBQRVAgYXJlIGVudGlyZWx5IGJhY2t3YXJkLWNvbXBhdGlibGUuCitGdXJ0aGVybW9yZSwgdGhleSBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gZXZlcnlvbmUgYnV0IGltcG9ydGVyCithdXRob3JzLiAgS2V5IGZpbmRlciBhbmQgbG9hZGVyIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5Cit3aWxsIGNvbnRpbnVlIHdvcmtpbmcuICBOZXcgaW1wb3J0ZXJzIHNob3VsZCB1c2UgdGhlIG5ldyBtZXRob2RzCitkZXNjcmliZWQgaW4gdGhlIFBFUC4gIEV4aXN0aW5nIGltcG9ydGVycyBzaG91bGQgYmUgdXBkYXRlZCB0byBpbXBsZW1lbnQKK3RoZSBuZXcgbWV0aG9kcy4KKworCitQaWNrbGUgcHJvdG9jb2wgNAorPT09PT09PT09PT09PT09PT0KKworVGhlIG5ldyA6bW9kOmBwaWNrbGVgIHByb3RvY29sIGFkZHJlc3NlcyBhIG51bWJlciBvZiBpc3N1ZXMgdGhhdCB3ZXJlIHByZXNlbnQKK2luIHByZXZpb3VzIHByb3RvY29scywgc3VjaCBhcyB0aGUgc2VyaWFsaXphdGlvbiBvZiBuZXN0ZWQgY2xhc3NlcywgdmVyeQorbGFyZ2Ugc3RyaW5ncyBhbmQgY29udGFpbmVycywgb3IgY2xhc3NlcyB3aG9zZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHRha2VzCitrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiAgSXQgYWxzbyBicmluZ3MgYSBjb3VwbGUgZWZmaWNpZW5jeSBpbXByb3ZlbWVudHMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU0YCAtIFBpY2tsZSBwcm90b2NvbCA0CisgICAgICBQRVAgd3JpdHRlbiBieSBBbnRvaW5lIFBpdHJvdSBhbmQgaW1wbGVtZW50ZWQgYnkgQWxleGFuZHJlIFZhc3NhbG90dGkuCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVW5pY29kZSBkYXRhYmFzZSB1cGRhdGVkIHRvIFVDRCB2ZXJzaW9uIDYuMy4KKworKiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgbm93IGFjY2VwdCBhICpkZWZhdWx0KiBhcmd1bWVudCB0aGF0IGNhbiBiZSB1c2VkCisgIHRvIHNwZWNpZnkgdGhlIHZhbHVlIHRoZXkgcmV0dXJuIGlmIHRoZSBpdGVyYWJsZSB0aGV5IGFyZSBldmFsdWF0aW5nIGhhcyBubworICBlbGVtZW50cy4gIENvbnRyaWJ1dGVkIGJ5IEp1bGlhbiBCZXJtYW4gaW4gOmlzc3VlOmAxODExMWAuCisKKyogTW9kdWxlIG9iamVjdHMgYXJlIG5vdyA6bW9kOmB3ZWFrcmVmYCdhYmxlLgorCisqIE1vZHVsZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlcyAoYW5kIHJlbGF0ZWQgdmFsdWVzKSBzaG91bGQgbm93IGFsd2F5cworICBjb250YWluIGFic29sdXRlIHBhdGhzIGJ5IGRlZmF1bHQsIHdpdGggdGhlIHNvbGUgZXhjZXB0aW9uIG9mCisgIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0IGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nCisgIGEgcmVsYXRpdmUgcGF0aCAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTg0MTZgKS4KKworKiBOb3cgYWxsIHRoZSBVVEYtXCogY29kZWNzIChleGNlcHQgVVRGLTcpIHJlamVjdCBzdXJyb2dhdGVzIGR1cmluZyBib3RoCisgIGVuY29kaW5nIGFuZCBkZWNvZGluZyB1bmxlc3MgdGhlIGBgc3Vycm9nYXRlcGFzc2BgIGVycm9yIGhhbmRsZXIgaXMgdXNlZCwKKyAgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBVVEYtMTYgZGVjb2RlciB0aGF0IGFjY2VwdHMgdmFsaWQgc3Vycm9nYXRlIHBhaXJzLAorICBhbmQgdGhlIFVURi0xNiBlbmNvZGVyIHRoYXQgcHJvZHVjZXMgdGhlbSB3aGlsZSBlbmNvZGluZyBub24tQk1QIGNoYXJhY3RlcnMuCisgIENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyLCBLYW5nLUhhbyAoS2VubnkpIEx1IGFuZCBTZXJoaXkgU3RvcmNoYWthIGluCisgIDppc3N1ZTpgMTI4OTJgLgorCisKK05ldyBNb2R1bGVzCis9PT09PT09PT09PQorCisKK2FzeW5jaW8KKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBhc3luY2lvYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgMzE1NmApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK3BsdWdnYWJsZSBldmVudCBsb29wIG1vZGVsIGZvciBQeXRob24sIHByb3ZpZGluZyBzb2xpZCBhc3luY2hyb25vdXMgSU8KK3N1cHBvcnQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIGFuZCBtYWtpbmcgaXQgZWFzaWVyIGZvciBvdGhlciBldmVudCBsb29wCitpbXBsZW1lbnRhdGlvbnMgdG8gaW50ZXJvcGVyYXRlIHdpdGggdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGVhY2ggb3RoZXIuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU2YCAtIEFzeW5jaHJvbm91cyBJTyBTdXBwb3J0IFJlYm9vdGVkOiB0aGUgImFzeW5jaW8iIE1vZHVsZQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGF0aW9uIGxlZCBieSBHdWlkbyB2YW4gUm9zc3VtLgorCitlbnVtCistLS0tCisKK1RoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQzNWApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK2ltcGxlbWVudGF0aW9uIG9mIGVudW1lcmF0aW9uIHR5cGVzLCBhbGxvd2luZyBvdGhlciBtb2R1bGVzIChzdWNoIGFzCis6bW9kOmBzb2NrZXRgKSB0byBwcm92aWRlIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgYW5kIGJldHRlcgorZGVidWdnaW5nIHN1cHBvcnQgYnkgcmVwbGFjaW5nIG9wYXF1ZSBpbnRlZ2VyIGNvbnN0YW50cyB3aXRoIGJhY2t3YXJkcworY29tcGF0aWJsZSBlbnVtZXJhdGlvbiB2YWx1ZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MzVgIC0gQWRkaW5nIGFuIEVudW0gdHlwZSB0byB0aGUgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkKKyAgICAgIFBFUCB3cml0dGVuIGJ5IEJhcnJ5IFdhcnNhdywgRWxpIEJlbmRlcnNreSBhbmQgRXRoYW4gRnVybWFuLAorICAgICAgaW1wbGVtZW50ZWQgYnkgRXRoYW4gRnVybWFuLgorCisKK3BhdGhsaWIKKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMKK3dpdGggc2VtYW50aWNzIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlCitkaXZpZGVkIGJldHdlZW4gKnB1cmUgcGF0aHMqLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsIG9wZXJhdGlvbnMKK3dpdGhvdXQgSS9PLCBhbmQgKmNvbmNyZXRlIHBhdGhzKiwgd2hpY2ggaW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28KK3Byb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjhgIC0gVGhlIHBhdGhsaWIgbW9kdWxlIC0tIG9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3UuCisKKworc2VsZWN0b3JzCistLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSAoY3JlYXRlZCBhcyBwYXJ0IG9mIGltcGxlbWVudGluZyA6cGVwOmAzMTU2YCkKK2FsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuCisKKworc3RhdGlzdGljcworLS0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YHN0YXRpc3RpY3NgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTBgKSBvZmZlcnMgc29tZSBjb3JlCitzdGF0aXN0aWNzIGZ1bmN0aW9uYWxpdHkgZGlyZWN0bHkgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIFRoaXMgbW9kdWxlCitzdXBwb3J0cyBjYWxjdWxhdGlvbiBvZiB0aGUgbWVhbiwgbWVkaWFuLCBtb2RlLCB2YXJpYW5jZSBhbmQgc3RhbmRhcmQKK2RldmlhdGlvbiBvZiBhIGRhdGEgc2VyaWVzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDUwYCAtIEFkZGluZyBBIFN0YXRpc3RpY3MgTW9kdWxlIFRvIFRoZSBTdGFuZGFyZCBMaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEQnQXByYW5vCisKKwordHJhY2VtYWxsb2MKKy0tLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTRgKSBpcyBhIGRlYnVnIHRvb2wgdG8KK3RyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4gSXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKworKiBUcmFjZWJhY2sgd2hlcmUgYW4gb2JqZWN0IHdhcyBhbGxvY2F0ZWQKKyogU3RhdGlzdGljcyBvbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrcyBwZXIgZmlsZW5hbWUgYW5kIHBlciBsaW5lIG51bWJlcjoKKyAgdG90YWwgc2l6ZSwgbnVtYmVyIGFuZCBhdmVyYWdlIHNpemUgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MKKyogQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gc25hcHNob3RzIHRvIGRldGVjdCBtZW1vcnkgbGVha3MKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ1NGAgLSBBZGQgYSBuZXcgdHJhY2VtYWxsb2MgbW9kdWxlIHRvIHRyYWNlIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lcgorCisKK0ltcHJvdmVkIE1vZHVsZXMKKz09PT09PT09PT09PT09PT0KKworYWlmYworLS0tLQorCitUaGUgOm1ldGg6YH5haWZjLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzgxOGAuKQorCisKK2F1ZGlvb3AKKy0tLS0tLS0KKworQWRkZWQgc3VwcG9ydCBmb3IgMjQtYml0IHNhbXBsZXMgKDppc3N1ZTpgMTI4NjZgKS4KKworQWRkZWQgdGhlIDpmdW5jOmB+YXVkaW9vcC5ieXRlc3dhcGAgZnVuY3Rpb24gdG8gY29udmVydCBiaWctZW5kaWFuIHNhbXBsZXMKK3RvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EgKDppc3N1ZTpgMTk2NDFgKS4KKworCitiYXNlNjQKKy0tLS0tLQorCitUaGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBpbiA6bW9kOmBiYXNlNjRgIG5vdyBhY2NlcHQgYW55Cis6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGluIGNhc2VzIHdoZXJlIGl0IHByZXZpb3VzbHkgcmVxdWlyZWQgYQorOmNsYXNzOmBieXRlc2Agb3IgOmNsYXNzOmBieXRlYXJyYXlgIGluc3RhbmNlICg6aXNzdWU6YDE3ODM5YCkuCisKKworY29sb3JzeXMKKy0tLS0tLS0tCisKK1RoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZSBSR0IgLS0tIFlJUSBjb252ZXJzaW9ucyBoYXZlCitiZWVuIGV4cGFuZGVkIHNvIHRoYXQgdGhleSBtYXRjaCB0aGUgRkNDIE5UU0MgdmVyc2lvbnMuICBUaGUgY2hhbmdlIGluCityZXN1bHRzIHNob3VsZCBiZSBsZXNzIHRoYW4gMSUgYW5kIG1heSBiZXR0ZXIgbWF0Y2ggcmVzdWx0cyBmb3VuZCBlbHNld2hlcmUuCisKKworY29udGV4dGxpYgorLS0tLS0tLS0tLQorCitUaGUgbmV3IDpjbGFzczpgY29udGV4dGxpYi5zdXBwcmVzc2AgY29udGV4dCBtYW5hZ2VyIGhlbHBzIHRvIGNsYXJpZnkgdGhlCitpbnRlbnQgb2YgY29kZSB0aGF0IGRlbGliZXJhdGVseSBzdXBwcmVzc2VzIGV4Y2VwdGlvbnMgZnJvbSBhIHNpbmdsZQorc3RhdGVtZW50LiAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxNTgwNmAgYW5kCitaZXJvIFBpcmFldXMgaW4gOmlzc3VlOmAxOTI2NmApCisKK1RoZSBuZXcgOmZ1bmM6YGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0YCBjb250ZXh0IG1hbmFnZXIgbWFrZXMgaXQgZWFzaWVyCitmb3IgdXRpbGl0eSBzY3JpcHRzIHRvIGhhbmRsZSBpbmZsZXhpYmxlIEFQSXMgdGhhdCBkb24ndCBwcm92aWRlIGFueQorb3B0aW9ucyB0byByZXRyaWV2ZSB0aGVpciBvdXRwdXQgYXMgYSBzdHJpbmcgb3IgZGlyZWN0IGl0IHRvIHNvbWV3aGVyZQorb3RoZXIgdGhhbiA6ZGF0YTpgc3lzLnN0ZG91dGAuIEluIGNvbmp1bmN0aW9uIHdpdGggOmNsYXNzOmBpby5TdHJpbmdJT2AsCit0aGlzIGNvbnRleHQgbWFuYWdlciBpcyBhbHNvIHVzZWZ1bCBmb3IgY2hlY2tpbmcgZXhwZWN0ZWQgb3V0cHV0IGZyb20KK2NvbW1hbmQgbGluZSB1dGlsaXRpZXMuIChDb250cmlidXRlIGJ5IFJheW1vbmQgSGV0dGluZ2VyIGluIDppc3N1ZTpgMTU4MDVgKQorCitUaGUgOm1vZDpgY29udGV4dGxpYmAgZG9jdW1lbnRhdGlvbiBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gaW5jbHVkZSBhCis6cmVmOmBkaXNjdXNzaW9uIDxzaW5nbGUtdXNlLXJldXNhYmxlLWFuZC1yZWVudHJhbnQtY21zPmAgb2YgdGhlCitkaWZmZXJlbmNlcyBiZXR3ZWVuIHNpbmdsZSB1c2UsIHJldXNhYmxlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2Vycy4KKworCitkaXMKKy0tLQorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgaXMgbm93IGJ1aWx0IGFyb3VuZCBhbiA6Y2xhc3M6YH5kaXMuSW5zdHJ1Y3Rpb25gIGNsYXNzCit0aGF0IHByb3ZpZGVzIGRldGFpbHMgb2YgaW5kaXZpZHVhbCBieXRlY29kZSBvcGVyYXRpb25zIGFuZCBhCis6ZnVuYzpgfmRpcy5nZXRfaW5zdHJ1Y3Rpb25zYCBpdGVyYXRvciB0aGF0IGVtaXRzIHRoZSBJbnN0cnVjdGlvbiBzdHJlYW0gZm9yIGEKK2dpdmVuIHBpZWNlIG9mIFB5dGhvbiBjb2RlLiBUaGUgdmFyaW91cyBkaXNwbGF5IHRvb2xzIGluIHRoZSA6bW9kOmBkaXNgCittb2R1bGUgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYmUgYmFzZWQgb24gdGhlc2UgbmV3IGNvbXBvbmVudHMuCisKK1RoZSBuZXcgOmNsYXNzOmBkaXMuQnl0ZWNvZGVgIGNsYXNzIHByb3ZpZGVzIGFuIG9iamVjdC1vcmllbnRlZCBBUEkgZm9yCitpbnNwZWN0aW5nIGJ5dGVjb2RlLCBib3RoIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0gYW5kIGZvciBpdGVyYXRpbmcgb3ZlcgoraW5zdHJ1Y3Rpb25zLgorCisoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuLCBSeWFuIEtlbGx5IGFuZCBUaG9tYXMgS2x1eXZlciBpbiA6aXNzdWU6YDExODE2YAorYW5kIENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3OTE2YCkKKworCitkb2N0ZXN0CistLS0tLS0tCisKK0FkZGVkIDpkYXRhOmB+ZG9jdGVzdC5GQUlMX0ZBU1RgIGZsYWcgdG8gaGFsdCB0ZXN0IHJ1bm5pbmcgYXMgc29vbiBhcyB0aGUgZmlyc3QKK2ZhaWx1cmUgaXMgZGV0ZWN0ZWQuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5IGFuZCBEYW5pZWwgVXJiYW4gaW4KKzppc3N1ZTpgMTY1MjJgLikKKworVXBkYXRlZCB0aGUgZG9jdGVzdCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHRvIHVzZSA6bW9kOmBhcmdwYXJzZWAsIGFuZCBhZGRlZAorYGAtb2BgIGFuZCBgYC1mYGAgb3B0aW9ucyB0byB0aGUgaW50ZXJmYWNlLiAgYGAtb2BgIGFsbG93cyBkb2N0ZXN0IG9wdGlvbnMgdG8KK2JlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBhbmQgYGAtZmBgIGlzIGEgc2hvcnRoYW5kIGZvciBgYC1vCitGQUlMX0ZBU1RgYCAodG8gcGFyYWxsZWwgdGhlIHNpbWlsYXIgb3B0aW9uIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgdW5pdHRlc3RgCitDTEkpLiAgKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDExMzkwYC4pCisKKworZW1haWwKKy0tLS0tCisKKzptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ2Agbm93IGFjY2VwdHMgYSAqcG9saWN5KiBhcmd1bWVudCB0bworb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9mIHRoZSBtZXNzYWdlIHdoZW4gZ2VuZXJhdGluZyBhIHN0cmluZworcmVwcmVzZW50YXRpb24gb2YgaXQuICBUaGlzIG1lYW5zIHRoYXQgYGBhc19zdHJpbmdgYCBjYW4gbm93IGJlIHVzZWQgaW4gbW9yZQorY2lyY3Vtc3RhbmNlcywgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY3JlYXRlIGFuZCB1c2UgYSA6bW9kOmB+ZW1haWwuZ2VuZXJhdG9yYCBpbgorb3JkZXIgdG8gcGFzcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMgdG8gaXRzIGBgZmxhdHRlbmBgIG1ldGhvZC4KKworTmV3IG1ldGhvZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19ieXRlc2AgYWRkZWQgdG8gcHJvZHVjZSBhIGJ5dGVzCityZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBpbiBhIGZhc2hpb24gc2ltaWxhciB0byBob3cgYGBhc19zdHJpbmdgYAorcHJvZHVjZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBJdCBkb2VzIG5vdCBhY2NlcHQgdGhlICptYXhoZWFkZXJsZW4qCithcmd1bWVudCwgYnV0IGRvZXMgYWNjZXB0IHRoZSAqdW5peGZyb20qIGFuZCAqcG9saWN5KiBhcmd1bWVudHMuIFRoZQorOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2J5dGVzX19gIG1ldGhvZAorY2FsbHMgaXQsIG1lYW5pbmcgdGhhdCBgYGJ5dGVzKG15bXNnKWBgIHdpbGwgbm93IHByb2R1Y2UgdGhlIGludHVpdGl2ZQorcmVzdWx0OiAgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZnVsbHkgZm9ybWF0dGVkIG1lc3NhZ2UuCisKKyhDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxODYwMGAuKQorCitBIHBhaXIgb2YgbmV3IHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBoYXZlIGJlZW4gYWRkZWQsCithbG9uZyB3aXRoIGEgbmV3IHN1Yi1tb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAuICBBbGwgZG9jdW1lbnRhdGlvbgoraXMgY3VycmVudGx5IGluIHRoZSBuZXcgbW9kdWxlLCB3aGljaCBpcyBiZWluZyBhZGRlZCBhcyBwYXJ0IG9mIHRoZSBuZXcKKzp0ZXJtOmBwcm92aXNpb25hbCA8cHJvdmlzaW9uYWwgcGFja2FnZT5gIGVtYWlsIEFQSS4gIFRoZXNlIGNsYXNzZXMgcHJvdmlkZSBhCitudW1iZXIgb2YgbmV3IG1ldGhvZHMgdGhhdCBtYWtlIGV4dHJhY3RpbmcgY29udGVudCBmcm9tIGFuZCBpbnNlcnRpbmcgY29udGVudAoraW50byBlbWFpbCBtZXNzYWdlcyBtdWNoIGVhc2llci4gIFNlZSB0aGUgOm1vZDpgfmVtYWlsLmNvbnRlbnRtYW5hZ2VyYAorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVGhlc2UgQVBJIGFkZGl0aW9ucyBjb21wbGV0ZSB0aGUgYnVsayBvZiB0aGUgd29yayB0aGF0IHdhcyBwbGFubmVkIGFzIHBhcnQgb2YKK3RoZSBlbWFpbDYgcHJvamVjdC4gIFRoZSBjdXJyZW50bHkgcHJvdmlzaW9uYWwgQVBJIGlzIHNjaGVkdWxlZCB0byBiZWNvbWUgZmluYWwKK2luIFB5dGhvbiAzLjUgKHBvc3NpYmx5IHdpdGggYSBmZXcgbWlub3IgYWRkaXRpb25zIGluIHRoZSBhcmVhIG9mIGVycm9yCitoYW5kbGluZykuCisKKyhDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxODg5MWAuKQorCisKK2Z1bmN0b29scworLS0tLS0tLS0tCisKK1RoZSBuZXcgOmZ1bmM6YH5mdW5jdG9vbHMucGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciBicmluZyBwYXJ0aWFsIGFyZ3VtZW50CithcHBsaWNhdGlvbiB0byBkZXNjcmlwdG9ycywganVzdCBhcyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBwcm92aWRlcworZm9yIG5vcm1hbCBjYWxsYWJsZXMuIFRoZSBuZXcgZGVzY3JpcHRvciBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBnZXQKK2FyYml0cmFyeSBjYWxsYWJsZXMgKGluY2x1ZGluZyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBpbnN0YW5jZXMpCit0byBiZWhhdmUgbGlrZSBub3JtYWwgaW5zdGFuY2UgbWV0aG9kcyB3aGVuIGluY2x1ZGVkIGluIGEgY2xhc3MgZGVmaW5pdGlvbi4KKworKENvbnRyaWJ1dGVkIGJ5IEFsb24gSG9yZXYgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDQzMzFgKQorCitUaGUgbmV3IDpmdW5jOmB+ZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoYCBkZWNvcmF0b3IgYnJpbmdzIHN1cHBvcnQgZm9yCitzaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5LiBXaGVyZQorb2JqZWN0IG9yaWVudGVkIHByb2dyYW1taW5nIGZvY3VzZXMgb24gZ3JvdXBpbmcgbXVsdGlwbGUgb3BlcmF0aW9ucyBvbiBhCitjb21tb24gc2V0IG9mIGRhdGEgaW50byBhIGNsYXNzLCBhIGdlbmVyaWMgZnVuY3Rpb24gZm9jdXNlcyBvbiBncm91cGluZworbXVsdGlwbGUgaW1wbGVtZW50YXRpb25zIG9mIGFuIG9wZXJhdGlvbiB0aGF0IGFsbG93cyBpdCB0byB3b3JrIHdpdGgKKypkaWZmZXJlbnQqIGtpbmRzIG9mIGRhdGEuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDNgIC0gU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb25zCisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgxYF1a2FzeiBMYW5nYS4KKworCitoYXNobGliCistLS0tLS0tCisKK05ldyA6ZnVuYzpgaGFzaGxpYi5wYmtkZjJfaG1hY2AgZnVuY3Rpb24uCisKKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTg1ODJgKQorCisKK2h0bWwKKy0tLS0KKworQWRkZWQgYSBuZXcgOmZ1bmM6YGh0bWwudW5lc2NhcGVgIGZ1bmN0aW9uIHRoYXQgY29udmVydHMgSFRNTDUgY2hhcmFjdGVyCityZWZlcmVuY2VzIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KKworKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDI5MjdgKQorCitBZGRlZCBhIG5ldyAqY29udmVydF9jaGFycmVmcyoga2V5d29yZCBhcmd1bWVudCB0bworOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgdGhhdCwgd2hlbiBgYFRydWVgYCwgYXV0b21hdGljYWxseSBjb252ZXJ0cworYWxsIGNoYXJhY3RlciByZWZlcmVuY2VzLiAgRm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHksIGl0cyB2YWx1ZSBkZWZhdWx0cwordG8gYGBGYWxzZWBgLCBidXQgaXQgd2lsbCBjaGFuZ2UgdG8gYGBUcnVlYGAgaW4gZnV0dXJlIHZlcnNpb25zLCBzbyB5b3UKK2FyZSBpbnZpdGVkIHRvIHNldCBpdCBleHBsaWNpdGx5IGFuZCB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSB0aGlzIG5ldyBmZWF0dXJlLgorCisoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTM2MzNgKQorCitUaGUgKnN0cmljdCogYXJndW1lbnQgb2YgOmNsYXNzOmB+aHRtbC5wYXJzZXIuSFRNTFBhcnNlcmAgaXMgbm93IGRlcHJlY2F0ZWQuCisKKyhDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNTExNGApCisKKworaW5zcGVjdAorLS0tLS0tLQorCisKK1RoZSBpbnNwZWN0IG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEKK2FuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxODYyNmApCisKKzpmdW5jOmB+aW5zcGVjdC51bndyYXBgIG1ha2VzIGl0IGVhc3kgdG8gdW5yYXZlbCB3cmFwcGVyIGZ1bmN0aW9uIGNoYWlucworY3JlYXRlZCBieSA6ZnVuYzpgZnVuY3Rvb2xzLndyYXBzYCAoYW5kIGFueSBvdGhlciBBUEkgdGhhdCBzZXRzIHRoZQorYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBvbiBhIHdyYXBwZXIgZnVuY3Rpb24pLiAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgKQorCitBcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSwgdGhlCis6bW9kOmBpbnNwZWN0YCBtb2R1bGUgbm93IGhhcyBzdWJzdGFudGlhbGx5IGJldHRlciBzdXBwb3J0IGZvciBjdXN0b20KK2BgX19kaXJfX2BgIG1ldGhvZHMgYW5kIGR5bmFtaWMgY2xhc3MgYXR0cmlidXRlcyBwcm92aWRlZCB0aHJvdWdoCittZXRhY2xhc3NlcyAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGApCisKKworbW1hcAorLS0tLQorCittbWFwIG9iamVjdHMgY2FuIG5vdyBiZSB3ZWFrcmVmJ2VkLgorCisoQ29udHJpYnV0ZWQgYnkgVmFsZXJpZSBMYW1iZXJ0IGluIDppc3N1ZTpgNDg4NWAuKQorCisKK211bHRpcHJvY2Vzc2luZworLS0tLS0tLS0tLS0tLS0tCisKK09uIFVuaXggdHdvIG5ldyAqc3RhcnQgbWV0aG9kcyogaGF2ZSBiZWVuIGFkZGVkIGZvciBzdGFydGluZyBwcm9jZXNzZXMKK3VzaW5nIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuICBUaGVzZSBtYWtlIHRoZSBtaXhpbmcgb2YgcHJvY2Vzc2VzIHdpdGgKK3RocmVhZHMgbW9yZSByb2J1c3QuICBTZWUgOmlzc3VlOmA4NzEzYC4KKworQWxzbywgZXhjZXB0IHdoZW4gdXNpbmcgdGhlIG9sZCAqZm9yayogc3RhcnQgbWV0aG9kLCBjaGlsZCBwcm9jZXNzZXMKK3dpbGwgbm8gbG9uZ2VyIGluaGVyaXQgdW5uZWVkZWQgaGFuZGxlcy9maWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlaXIgcGFyZW50cy4KKworCitvcworLS0KKworTmV3IGZ1bmN0aW9ucyB0byBnZXQgYW5kIHNldCB0aGUgOnJlZjpgaW5oZXJpdGFibGUgZmxhZyA8ZmRfaW5oZXJpdGFuY2U+YCBvZiBhIGZpbGUKK2Rlc2NyaXB0b3JzIG9yIGEgV2luZG93cyBoYW5kbGU6CisKKyogOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsIDpmdW5jOmBvcy5zZXRfaW5oZXJpdGFibGVgCisqIDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgCisKKworcGRiCistLS0KKworVGhlIGBgcHJpbnRgYCBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBwZGJgLCByZXN0b3JpbmcgYWNjZXNzIHRvIHRoZQorYGBwcmludGBgIGZ1bmN0aW9uLgorCitSYXRpb25hbGU6IFB5dGhvbjIncyBgYHBkYmBgIGRpZCBub3QgaGF2ZSBhIGBgcHJpbnRgYCBjb21tYW5kOyBpbnN0ZWFkLAorZW50ZXJpbmcgYGBwcmludGBgIGV4ZWN1dGVkIHRoZSBgYHByaW50YGAgc3RhdGVtZW50LiAgSW4gUHl0aG9uMyBgYHByaW50YGAgd2FzCittaXN0YWtlbmx5IG1hZGUgYW4gYWxpYXMgZm9yIHRoZSBwZGIgOnBkYmNtZDpgcGAgY29tbWFuZC4gIGBgcGBgLCBob3dldmVyLAorcHJpbnRzIHRoZSBgYHJlcHJgYCBvZiBpdHMgYXJndW1lbnQsIG5vdCB0aGUgYGBzdHJgYCBsaWtlIHRoZSBQeXRob24yIGBgcHJpbnRgYAorY29tbWFuZCBkaWQuICBXb3JzZSwgdGhlIFB5dGhvbjMgYGBwZGIgcHJpbnRgYCBjb21tYW5kIHNoYWRvd2VkIHRoZSBQeXRob24zCitgYHByaW50YGAgZnVuY3Rpb24sIG1ha2luZyBpdCBpbmFjY2Vzc2libGUgYXQgdGhlIGBgcGRiYGAgcHJvbXB0LgorCisoQ29udHJpYnV0ZWQgYnkgQ29ubm9yIE9zYm9ybiBpbiA6aXNzdWU6YDE4NzY0YC4pCisKKworcG9wbGliCistLS0tLS0KKworTmV3IDptZXRoOmB+cG9wbGliLlBPUDMuc3Rsc2AgbWV0aG9kIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KK2FuIGVuY3J5cHRlZCBQT1AzIHNlc3Npb24uCisKK05ldyA6bWV0aDpgfnBvcGxpYi5QT1AzLmNhcGFgIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlCitQT1AzIHNlcnZlci4KKworKENvbnRyaWJ1dGVkIGJ5IExvcmVuem8gQ2F0dWNjaSBpbiA6aXNzdWU6YDQ0NzNgLikKKworCitwcHJpbnQKKy0tLS0tLQorCitUaGUgOm1vZDpgcHByaW50YCBtb2R1bGUgbm93IHN1cHBvcnRzICpjb21wYWN0KiBtb2RlIGZvciBmb3JtYXR0aW5nIGxvbmcKK3NlcXVlbmNlcyAoOmlzc3VlOmAxOTEzMmApLgorCisKK3B5ZG9jCistLS0tLQorCitXaGlsZSBzaWduaWZpY2FudCBjaGFuZ2VzIGhhdmUgbm90IGJlZW4gbWFkZSB0byA6bW9kOmBweWRvY2AgZGlyZWN0bHksCitpdHMgaGFuZGxpbmcgb2YgY3VzdG9tIGBgX19kaXJfX2BgIG1ldGhvZHMgYW5kIHZhcmlvdXMgZGVzY3JpcHRvcgorYmVoYXZpb3VycyBoYXMgYmVlbiBpbXByb3ZlZCBzdWJzdGFudGlhbGx5IGJ5IHRoZSB1bmRlcmx5aW5nIGNoYW5nZXMgaW4KK3RoZSA6bW9kOmBpbnNwZWN0YCBtb2R1bGUuCisKKworcmUKKy0tCisKK0FkZGVkIDpmdW5jOmByZS5mdWxsbWF0Y2hgIGZ1bmN0aW9uIGFuZCA6bWV0aDpgcmVnZXguZnVsbG1hdGNoYCBtZXRob2QsCit3aGljaCBhbmNob3IgdGhlIHBhdHRlcm4gYXQgYm90aCBlbmRzIG9mIHRoZSBzdHJpbmcgdG8gbWF0Y2guCisoQ29udHJpYnV0ZWQgYnkgTWF0dGhldyBCYXJuZXR0IGluIDppc3N1ZTpgMTYyMDNgLikKKworVGhlIHJlcHIgb2YgOnJlZjpgcmVnZXggb2JqZWN0cyA8cmUtb2JqZWN0cz5gIG5vdyBpbmNsdWRlcyB0aGUgcGF0dGVybgorYW5kIHRoZSBmbGFnczsgdGhlIHJlcHIgb2YgOnJlZjpgbWF0Y2ggb2JqZWN0cyA8bWF0Y2gtb2JqZWN0cz5gIG5vdworaW5jbHVkZXMgdGhlIHN0YXJ0LCBlbmQsIGFuZCB0aGUgcGFydCBvZiB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZC4KKworKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxMzU5MmAgYW5kIDppc3N1ZTpgMTcwODdgLikKKworCityZXNvdXJjZQorLS0tLS0tLS0KKworTmV3IDpmdW5jOmByZXNvdXJjZS5wcmxpbWl0YCBmdW5jdGlvbiBhbmQgTGludXggc3BlY2lmaWMgY29uc3RhbnRzLgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjU5NWAgYW5kIDppc3N1ZTpgMTkzMjRgLikKKworc210cGxpYgorLS0tLS0tLQorCis6ZXhjOmB+c210cGxpYi5TTVRQRXhjZXB0aW9uYCBpcyBub3cgYSBzdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCwgd2hpY2ggYWxsb3dzCitib3RoIHNvY2tldCBsZXZlbCBlcnJvcnMgYW5kIFNNVFAgcHJvdG9jb2wgbGV2ZWwgZXJyb3JzIHRvIGJlIGNhdWdodCBpbiBvbmUKK3RyeS9leGNlcHQgc3RhdGVtZW50IGJ5IGNvZGUgdGhhdCBvbmx5IGNhcmVzIHdoZXRoZXIgb3Igbm90IGFuIGVycm9yIG9jY3VycmVkLgorKDppc3N1ZTpgMjExOGApLgorCisKK3NvY2tldAorLS0tLS0tCisKK1NvY2tldCBvYmplY3RzIGhhdmUgbmV3IG1ldGhvZHMgdG8gZ2V0IG9yIHNldCB0aGVpciA6cmVmOmBpbmhlcml0YWJsZSBmbGFnCis8ZmRfaW5oZXJpdGFuY2U+YDoKKworKiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRfaW5oZXJpdGFibGVgLCA6bWV0aDpgc29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgCisKK1RoZSBgYHNvY2tldC5BRl8qYGAgYW5kIGBgc29ja2V0LlNPQ0tfKmBgIGNvbnN0YW50cyBhcmUgZW51bWVyYXRpb24gdmFsdWVzLAordXNpbmcgdGhlIG5ldyA6bW9kOmBlbnVtYCBtb2R1bGUuIFRoaXMgYWxsb3dzIGRlc2NyaXB0aXZlIHJlcG9ydGluZyBkdXJpbmcKK2RlYnVnZ2luZywgaW5zdGVhZCBvZiBzZWVpbmcgaW50ZWdlciAibWFnaWMgbnVtYmVycyIuCisKK3NzbAorLS0tCisKK1RMU3YxLjEgYW5kIFRMU3YxLjIgc3VwcG9ydC4KKworKENvbnRyaWJ1dGVkIGJ5IE1pY2hlbGUgT3Jyw7kgYW5kIEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY2OTJgKQorCisqIE5ldyBkaWFnbm9zdGljIGZ1bmN0aW9ucyA6ZnVuYzpgfnNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNgLAorICA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHNgIGFuZAorICA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmdldF9jYV9jZXJ0c2AKKworKiBBZGQgOmZ1bmM6YHNzbC5lbnVtX2NlcnRfc3RvcmVgIHRvIHJldHJpZXZlIGNlcnRpZmljYXRlcyBhbmQgQ1JMIGZyb20gV2luZG93cycKKyAgY2VydCBzdG9yZS4KKworKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODE0M2AsIDppc3N1ZTpgMTgxNDdgIGFuZAorOmlzc3VlOmAxNzEzNGAuKQorCitTdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkkgdXNpbmcgdGhlIG5ldworOm1ldGg6YHNzbC5TU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuCisKKyhDb250cmlidXRlZCBieSBEYW5pZWwgQmxhY2sgaW4gOmlzc3VlOmA4MTA5YC4pCisKKworc3RhdAorLS0tLQorCitUaGUgOm1vZDpgc3RhdGAgbW9kdWxlIGlzIG5vdyBiYWNrZWQgYnkgYSBDIGltcGxlbWVudGF0aW9uIGluIDptb2Q6YF9zdGF0YC4gQSBDCitpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZCBhcyBtb3N0IG9mIHRoZSB2YWx1ZXMgYXJlbid0IHN0YW5kYXJkaXplZCBhbmQKK3BsYXRmb3JtLWRlcGVuZGVudC4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTEwMTZgLikKKworVGhlIG1vZHVsZSBzdXBwb3J0cyBuZXcgZmlsZSB0eXBlczogZG9vciwgZXZlbnQgcG9ydCBhbmQgd2hpdGVvdXQuCisKKworc3RydWN0CistLS0tLS0KKworU3RyZWFtaW5nIHN0cnVjdCB1bnBhY2tpbmcgdXNpbmcgOmZ1bmM6YHN0cnVjdC5pdGVyX3VucGFja2AuCisKKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3ODA0YC4pCisKKworc3VuYXUKKy0tLS0tCisKK1RoZSA6bWV0aDpgfnN1bmF1LmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxODkwMWAuKQorCis6bWV0aDpgc3VuYXUub3BlbmAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgKDppc3N1ZTpgMTg4NzhgKS4KKworCit0cmFjZWJhY2sKKy0tLS0tLS0tLQorCitBIG5ldyA6ZnVuYzpgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lc2AgZnVuY3Rpb24gdGFrZXMgYSB0cmFjZWJhY2sgb2JqZWN0CithbmQgY2xlYXJzIHRoZSBsb2NhbCB2YXJpYWJsZXMgaW4gYWxsIG9mIHRoZSBmcmFtZXMgaXQgcmVmZXJlbmNlcywKK3JlZHVjaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGNvbnN1bWVkICg6aXNzdWU6YDE1NjU1MjVgKS4KKworCit1cmxsaWIKKy0tLS0tLQorCitBZGQgc3VwcG9ydC5mb3IgYGBkYXRhOmBgIFVSTHMgaW4gOm1vZDpgdXJsbGliLnJlcXVlc3RgLgorCisoQ29udHJpYnV0ZWQgYnkgTWF0aGlhcyBQYW56ZW5iw7ZjayBpbiA6aXNzdWU6YDE2NDIzYC4pCisKKwordW5pdHRlc3QKKy0tLS0tLS0tCisKK1N1cHBvcnQgZm9yIGVhc3kgZHluYW1pY2FsbHktZ2VuZXJhdGVkIHN1YnRlc3RzIHVzaW5nIHRoZQorOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5zdWJUZXN0YCBjb250ZXh0IG1hbmFnZXIuCisKKyhDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2OTk3YC4pCisKKword2F2ZQorLS0tLQorCitUaGUgOm1ldGg6YH53YXZlLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzQ4N2AuKQorCis6bWV0aDpgd2F2ZS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIChDb250cmlidXRlZAorYnkgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTc2MTZgLikKKworCit3ZWFrcmVmCistLS0tLS0tCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLldlYWtNZXRob2RgIGNsYXNzIHNpbXVsYXRlcyB3ZWFrIHJlZmVyZW5jZXMgdG8gYm91bmQKK21ldGhvZHMuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0NjMxYC4pCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLmZpbmFsaXplYCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZWdpc3RlciBhIGNhbGxiYWNrCit0byBiZSBpbnZva2VkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLCB3aXRob3V0IG5lZWRpbmcgdG8KK2NhcmVmdWxseSBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGUgd2VhayByZWZlcmVuY2UgaXRzZWxmLiAoQ29udHJpYnV0ZWQgYnkKK1JpY2hhcmQgT3Vka2VyayBpbiA6aXNzdWU6YDE1NTI4YCkKKworCit4bWwuZXRyZWUKKy0tLS0tLS0tLQorCitBZGQgYW4gZXZlbnQtZHJpdmVuIHBhcnNlciBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucywKKzpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyYC4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTc3NDFgLikKKworCit6aXBmaWxlLlB5WmlwZmlsZQorLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkIGEgZmlsdGVyIGZ1bmN0aW9uIHRvIGlnbm9yZSBzb21lIHBhY2thZ2VzICh0ZXN0cyBmb3IgaW5zdGFuY2UpLAorOm1ldGg6YH56aXBmaWxlLlB5WmlwRmlsZS53cml0ZXB5YC4KKworKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBUaXNtZXIgaW4gOmlzc3VlOmAxOTI3NGAuKQorCisKK090aGVyIGltcHJvdmVtZW50cworPT09PT09PT09PT09PT09PT09CisKK1RhYi1jb21wbGV0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgorCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgYW5kIMOJcmljIEFyYXVqbyBpbiA6aXNzdWU6YDU4NDVgLikKKworUHl0aG9uIGludm9jYXRpb24gY2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnZva2luZyB0aGUgUHl0aG9uIGludGVycHJldGVyIHdpdGggYGAtLXZlcnNpb25gYCBub3cgb3V0cHV0cyB0aGUgdmVyc2lvbiB0bworc3RhbmRhcmQgb3V0cHV0IGluc3RlYWQgb2Ygc3RhbmRhcmQgZXJyb3IgKDppc3N1ZTpgMTgzMzhgKS4gU2ltaWxhciBjaGFuZ2VzCit3ZXJlIG1hZGUgdG8gOm1vZDpgYXJncGFyc2VgICg6aXNzdWU6YDE4OTIwYCkgYW5kIG90aGVyIG1vZHVsZXMgdGhhdCBoYXZlCitzY3JpcHQtbGlrZSBpbnZvY2F0aW9uIGNhcGFiaWxpdGllcyAoOmlzc3VlOmAxODkyMmApLgorCitPcHRpbWl6YXRpb25zCis9PT09PT09PT09PT09CisKK01ham9yIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQ6CisKKyogVGhlIFVURi0zMiBkZWNvZGVyIGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIuCisKKyogVGhlIGNvc3Qgb2YgaGFzaCBjb2xsaXNpb25zIGZvciBzZXRzIGlzIG5vdyByZWR1Y2VkLiAgRWFjaCBoYXNoIHRhYmxlCisgIHByb2JlIG5vdyBjaGVja3MgYSBzZXJpZXMgb2YgY29uc2VjdXRpdmUsIGFkamFjZW50IGtleS9oYXNoIHBhaXJzIGJlZm9yZQorICBjb250aW51aW5nIHRvIG1ha2UgcmFuZG9tIHByb2JlcyB0aHJvdWdoIHRoZSBoYXNoIHRhYmxlLiAgVGhpcyBleHBsb2l0cworICBjYWNoZSBsb2NhbGl0eSB0byBtYWtlIGNvbGxpc2lvbiByZXNvbHV0aW9uIGxlc3MgZXhwZW5zaXZlLgorCisgIFRoZSBjb2xsaXNpb24gcmVzb2x1dGlvbiBzY2hlbWUgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGh5YnJpZCBvZiBsaW5lYXIKKyAgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxpbmVhciBwcm9iZXMKKyAgZGVmYXVsdHMgdG8gbmluZS4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZS10aW1lIGJ5IGRlZmluaW5nCisgIExJTkVBUl9QUk9CRVMgdG8gYmUgYW55IHZhbHVlLiAgU2V0IExJTkVBUl9QUk9CRVM9MCB0byB0dXJuLW9mZgorICBsaW5lYXIgcHJvYmluZyBlbnRpcmVseS4KKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgaW4gOmlzc3VlOmAxODc3MWAuKQorCisqIFRoZSBpbnRlcnByZXRlciBzdGFydHMgYWJvdXQgMzAlIGZhc3Rlci4gQSBjb3VwbGUgb2YgbWVhc3VyZXMgbGVhZCB0byB0aGUKKyAgc3BlZWR1cC4gVGhlIGludGVycHJldGVyIGxvYWRzIGZld2VyIG1vZHVsZXMgb24gc3RhcnR1cCwgZS5nLiB0aGUgOm1vZDpgcmVgLAorICA6bW9kOmBjb2xsZWN0aW9uc2AgYW5kIDptb2Q6YGxvY2FsZWAgbW9kdWxlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGFyZSBubworICBsb25nZXIgaW1wb3J0ZWQgYnkgZGVmYXVsdC4gVGhlIG1hcnNoYWwgbW9kdWxlIGhhcyBiZWVuIGltcHJvdmVkIHRvIGxvYWQKKyAgY29tcGlsZWQgUHl0aG9uIGNvZGUgZmFzdGVyLgorCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSwgQ2hyaXN0aWFuIEhlaW1lcyBhbmQgVmljdG9yIFN0aW5uZXIgaW4KKyAgOmlzc3VlOmAxOTIxOWAsIDppc3N1ZTpgMTkyMThgLCA6aXNzdWU6YDE5MjA5YCwgOmlzc3VlOmAxOTIwNWAgYW5kCisgIDppc3N1ZTpgOTU0OGApCisKKworQ1B5dGhvbiBJbXBsZW1lbnRhdGlvbiBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisuLiBfcGVwLTQ0NToKKworUEVQIDQ0NTogQ3VzdG9taXphdGlvbiBvZiBDUHl0aG9uIG1lbW9yeSBhbGxvY2F0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQ1YCBhZGRzIG5ldyBDIGxldmVsIGludGVyZmFjZXMgdG8gY3VzdG9taXplIG1lbW9yeSBhbGxvY2F0aW9uIGluCit0aGUgQ1B5dGhvbiBpbnRlcnByZXRlci4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDQ0NWAgLSBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9ycworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF9wZXAtNDQyOgorCitQRVAgNDQyOiBTYWZlIG9iamVjdCBmaW5hbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDJgIHJlbW92ZXMgdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMgYW5kIHF1aXJrcyBvZiBvYmplY3QgZmluYWxpemF0aW9uCitpbiBDUHl0aG9uLiBXaXRoIGl0LCBvYmplY3RzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFzIHdlbGwgYXMKK2dlbmVyYXRvcnMgd2l0aCA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcywgY2FuIGJlIGZpbmFsaXplZCB3aGVuIHRoZXkgYXJlCitwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgorCitBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBtb2R1bGUgZ2xvYmFscyBhcmUgbm8gbG9uZ2VyIGZvcmNpYmx5IHNldCB0bworOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gaW4gbW9zdCBjYXNlcywgaW5zdGVhZCByZWx5aW5nCitvbiB0aGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQyYCAtIFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbgorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKK090aGVyIGJ1aWxkIGFuZCBDIEFQSSBjaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzIHRvIFB5dGhvbidzIGJ1aWxkIHByb2Nlc3MgYW5kIHRvIHRoZSBDIEFQSSBpbmNsdWRlOgorCisqIFRoZSBuZXcgOmM6ZnVuYzpgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZ2AgcHJlLWluaXRpYWxpemF0aW9uIEFQSQorICBhbGxvd3MgYXBwbGljYXRpb25zIGVtYmVkZGluZyB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlciB0byByZWxpYWJseSBmb3JjZQorICBhIHBhcnRpY3VsYXIgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsZXIgZm9yIHRoZSBzdGFuZGFyZCBzdHJlYW1zCisgIChDb250cmlidXRlZCBieSBCYXN0aWVuIE1vbnRhZ25lIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxNjEyOWApCisKKyogTW9zdCBQeXRob24gQyBBUElzIHRoYXQgZG9uJ3QgbXV0YXRlIHN0cmluZyBhcmd1bWVudHMgYXJlIG5vdyBjb3JyZWN0bHkKKyAgbWFya2VkIGFzIGFjY2VwdGluZyBgYGNvbnN0IGNoYXIgKmBgIHJhdGhlciB0aGFuIGBgY2hhciAqYGAgKENvbnRyaWJ1dGVkCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNzcyNjczYCkuCisKKyogIkFyZ3VtZW50IENsaW5pYyIgKDpwZXA6YDQzNmApIGlzIG5vdyBwYXJ0IG9mIHRoZSBDUHl0aG9uIGJ1aWxkIHByb2Nlc3MKKyAgYW5kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGRlZmluaW5nIGFuZCBtYWludGFpbmluZworICBhY2N1cmF0ZSBzaWduYXR1cmVzIGZvciBidWlsdGlucyBhbmQgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlcworICBpbXBsZW1lbnRlZCBpbiBDLgorCisgIC4uIG5vdGU6OgorICAgICBUaGUgQXJndW1lbnQgQ2xpbmljIFBFUCBpcyBub3QgZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUKKyAgICAgaW1wbGVtZW50YXRpb24uIFRoaXMgaGFzIGJlZW4gZGVlbWVkIGFjY2VwdGFibGUgYnkgdGhlIHJlbGVhc2UgbWFuYWdlcgorICAgICBhbmQgY29yZSBkZXZlbG9wbWVudCB0ZWFtIGluIHRoaXMgY2FzZSwgYXMgQXJndW1lbnQgQ2xpbmljIHdpbGwgbm90CisgICAgIGJlIG1hZGUgYXZhaWxhYmxlIGFzIGEgcHVibGljIEFQSSBmb3IgdGhpcmQgcGFydHkgdXNlIGluIFB5dGhvbiAzLjQuCisKKworRGVwcmVjYXRlZAorPT09PT09PT09PQorCitVbnN1cHBvcnRlZCBPcGVyYXRpbmcgU3lzdGVtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBPUy8yCisqIFdpbmRvd3MgMjAwMAorCisKK0RlcHJlY2F0ZWQgUHl0aG9uIG1vZHVsZXMsIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYmp1bmtgIGFuZAorICA6bWV0aDpgZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIuaXNicG9wdWxhcmAgd2VyZSByZW1vdmVkOiB1c2UgYGB4IGluIHNtLmJqdW5rYGAgYW5kCisgIGBgeCBpbiBzbS5icG9wdWxhcmBgLCB3aGVyZSAqc20qIGlzIGEgOmNsYXNzOmB+ZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXJgIG9iamVjdC4KKworKiA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIGlzIHBlbmRpbmcgZGVwcmVjYXRpb24uIFVzaW5nCisgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZGAgYW5kCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5pbml0X21vZHVsZV9hdHRyc2AgYWxsb3dzIHN1YmNsYXNzZXMgb2YgYSBsb2FkZXIKKyAgdG8gbW9yZSBlYXNpbHkgY3VzdG9taXplIG1vZHVsZSBsb2FkaW5nLgorCisqIFRoZSA6bW9kOmBpbXBgIG1vZHVsZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uLiBUbyBrZWVwIGNvbXBhdGliaWxpdHkgd2l0aAorICBQeXRob24gMi8zIGNvZGUgYmFzZXMsIHRoZSBtb2R1bGUncyByZW1vdmFsIGlzIGN1cnJlbnRseSBub3Qgc2NoZWR1bGVkLgorCisqIFRoZSA6bW9kOmBmb3JtYXR0ZXJgIG1vZHVsZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGFuZCBpcyBzbGF0ZWQgZm9yIHJlbW92YWwKKyAgaW4gUHl0aG9uIDMuNi4KKworKiBNRDUgYXMgZGVmYXVsdCBkaWdlc3Rtb2QgZm9yIDptb2Q6YGhtYWNgIGlzIGRlcHJlY2F0ZWQuIFB5dGhvbiAzLjYgd2lsbAorICByZXF1aXJlIGFuIGV4cGxpY2l0IGRpZ2VzdCBuYW1lIG9yIGNvbnN0cnVjdG9yIGFzICpkaWdlc3Rtb2QqIGFyZ3VtZW50LgorCisKK0RlcHJlY2F0ZWQgZnVuY3Rpb25zIGFuZCB0eXBlcyBvZiB0aGUgQyBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgYGBQeVRocmVhZFN0YXRlLnRpY2tfY291bnRlcmBgIGZpZWxkIGhhcyBiZWVuIHJlbW92ZWQ6IGl0cyB2YWx1ZSB3YXMKKyAgbWVhbmluZ2xlc3Mgc2luY2UgUHl0aG9uIDMuMiAoIm5ldyBHSUwiKS4KKworCitEZXByZWNhdGVkIGZlYXR1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIHNpdGUgbW9kdWxlIGFkZGluZyBhICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLCBpZiBpdAorICBleGlzdHMsIGlzIGRlcHJlY2F0ZWQgKDppc3N1ZTpgMTkzNzVgKS4KKworCitQb3J0aW5nIHRvIFB5dGhvbiAzLjQKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gbGlzdHMgcHJldmlvdXNseSBkZXNjcmliZWQgY2hhbmdlcyBhbmQgb3RoZXIgYnVnZml4ZXMKK3RoYXQgbWF5IHJlcXVpcmUgY2hhbmdlcyB0byB5b3VyIGNvZGUuCisKKyogVGhlIEFCQ3MgZGVmaW5lZCBpbiA6bW9kOmBpbXBvcnRsaWIuYWJjYCBub3cgZWl0aGVyIHJhaXNlIHRoZSBhcHByb3ByaWF0ZQorICBleGNlcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgYmxpbmRseS4gVGhpcyB3aWxsIG9ubHkgYWZmZWN0IGNvZGUgY2FsbGluZworICA6ZnVuYzpgc3VwZXJgIGFuZCBmYWxsaW5nIHRocm91Z2ggYWxsIHRoZSB3YXkgdG8gdGhlIEFCQ3MuIEZvciBjb21wYXRpYmlsaXR5LAorICBjYXRjaCBib3RoIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIG9yIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gYXMgbmVlZGVkLgorCisqIFRoZSBtb2R1bGUgdHlwZSBub3cgaW5pdGlhbGl6ZXMgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYAorICBhdHRyaWJ1dGVzIHRvIGBgTm9uZWBgIGJ5IGRlZmF1bHQuIFRvIGRldGVybWluZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgc2V0CisgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgZmFzaGlvbiwgdXNlIGUuZy4KKyAgYGBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZWBgLgorCisqIDptZXRoOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgbm93IHNldHMgYGBfX2xvYWRlcl9fYGAgYW5kCisgIGBgX19wYWNrYWdlX19gYCB1bmNvbmRpdGlvbmFsbHkgdG8gcHJvcGVybHkgc3VwcG9ydCByZWxvYWRpbmcuIElmIHRoaXMgaXMgbm90CisgIGRlc2lyZWQgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIHNldCB0aGVzZSBhdHRyaWJ1dGVzIG1hbnVhbGx5LiBZb3UgY2FuIHVzZQorICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwubW9kdWxlX3RvX2xvYWRgIGZvciBtb2R1bGUgbWFuYWdlbWVudC4KKworKiBJbXBvcnQgbm93IHJlc2V0cyByZWxldmFudCBhdHRyaWJ1dGVzIChlLmcuIGBgX19uYW1lX19gYCwgYGBfX2xvYWRlcl9fYGAsCisgIGBgX19wYWNrYWdlX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCkgdW5jb25kaXRpb25hbGx5IHdoZW4gcmVsb2FkaW5nLgorCisqIEZyb3plbiBwYWNrYWdlcyBubyBsb25nZXIgc2V0IGBgX19wYXRoX19gYCB0byBhIGxpc3QgY29udGFpbmluZyB0aGUgcGFja2FnZQorICBuYW1lIGJ1dCBhbiBlbXB0eSBsaXN0IGluc3RlYWQuIERldGVybWluZyBpZiBhIG1vZHVsZSBpcyBhIHBhY2thZ2Ugc2hvdWxkIGJlCisgIGRvbmUgdXNpbmcgYGBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJylgYC4KKworKiA6YzpmdW5jOmBQeUVycl9TZXRJbXBvcnRFcnJvcmAgbm93IHNldHMgOmV4YzpgVHlwZUVycm9yYCB3aGVuIGl0cyAqKm1zZyoqCisgIGFyZ3VtZW50IGlzIG5vdCBzZXQuIFByZXZpb3VzbHkgb25seSBgYE5VTExgYCB3YXMgcmV0dXJuZWQgd2l0aCBubyBleGNlcHRpb24KKyAgc2V0LgorCisqIDpmdW5jOmBweV9jb21waWxlLmNvbXBpbGVgIG5vdyByYWlzZXMgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZSBwYXRoCisgIGl0IHdvdWxkIHdyaXRlIHRvIGlzIGEgc3ltbGluayBvciBhIG5vbi1yZWd1bGFyIGZpbGUuIFRoaXMgaXMgdG8gYWN0IGFzIGEKKyAgd2FybmluZyB0aGF0IGltcG9ydCB3aWxsIG92ZXJ3cml0ZSB0aG9zZSBmaWxlcyB3aXRoIGEgcmVndWxhciBmaWxlIHJlZ2FyZGxlc3MKKyAgb2Ygd2hhdCB0eXBlIG9mIGZpbGUgcGF0aCB0aGV5IHdlcmUgb3JpZ2luYWxseS4KKworKiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZWAgbm8gbG9uZ2VyIHJhaXNlcworICA6ZXhjOmBJbXBvcnRFcnJvcmAgd2hlbiB0aGUgc291cmNlIGNvZGUgYmVpbmcgbG9hZGVkIHRyaWdnZXJzIGEKKyAgOmV4YzpgU3ludGF4RXJyb3JgIG9yIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAuIEFzIDpleGM6YEltcG9ydEVycm9yYCBpcworICBtZWFudCB0byBiZSByYWlzZWQgb25seSB3aGVuIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSBmb3VuZCBidXQgaXQgc2hvdWxkLCBpdCB3YXMKKyAgZmVsdCB0byBiZSBvdmVyLXJlYWNoaW5nL292ZXJsb2FkaW5nIG9mIHRoYXQgbWVhbmluZyB3aGVuIHRoZSBzb3VyY2UgY29kZSBpcworICBmb3VuZCBidXQgaW1wcm9wZXJseSBzdHJ1Y3R1cmVkLiBJZiB5b3Ugd2VyZSBjYXRjaGluZyBJbXBvcnRFcnJvciBiZWZvcmUgYW5kCisgIHdpc2ggdG8gY29udGludWUgdG8gaWdub3JlIHN5bnRheCBvciBkZWNvZGluZyBpc3N1ZXMsIGNhdGNoIGFsbCB0aHJlZQorICBleGNlcHRpb25zIG5vdy4KKworKiA6ZnVuYzpgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyYCBhbmQgOmZ1bmM6YGZ1bmN0b29scy53cmFwc2Agbm93IGNvcnJlY3RseQorICBzZXQgdGhlIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZXIsIGV2ZW4gaWYKKyAgdGhhdCBmdW5jdGlvbiBhbHNvIGhhZCBpdHMgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBzZXQuIFRoaXMgbWVhbnMKKyAgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZXMgbm93IGNvcnJlY3RseSBsaW5rIGEgc3RhY2sgb2YgZGVjb3JhdGVkCisgIGZ1bmN0aW9ucyByYXRoZXIgdGhhbiBldmVyeSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIGluIHRoZSBjaGFpbgorICByZWZlcnJpbmcgdG8gdGhlIGlubmVybW9zdCBmdW5jdGlvbi4gSW50cm9zcGVjdGlvbiBsaWJyYXJpZXMgdGhhdAorICBhc3N1bWVkIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgd2FzIGludGVudGlvbmFsIGNhbiB1c2UKKyAgOmZ1bmM6YGluc3BlY3QudW53cmFwYCB0byBhY2Nlc3MgdGhlIGZpcnN0IGZ1bmN0aW9uIGluIHRoZSBjaGFpbiB0aGF0IGhhcworICBubyBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorCisqIChDIEFQSSkgVGhlIHJlc3VsdCBvZiB0aGUgOmM6ZGF0YTpgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcmAgY2FsbGJhY2sgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IKKyAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsIG9yICpOVUxMKiBpZiBhbiBlcnJvciBvY2N1cnJlZCwgaW5zdGVhZCBvZiBhCisgIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SZWFsbG9jYC4KKworKiA6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlcmAgbm93IHBhc3NlcyBvbiB0aGUgY3VycmVudCB3b3JraW5nCisgIGRpcmVjdG9yeSB0byBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgZm9yIHRoZSBlbXB0eSBzdHJpbmcuIFRoaXMKKyAgcmVzdWx0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIG5ldmVyIGNvbnRhaW5pbmcgYGAnJ2BgLCB0aHVzCisgIGl0ZXJhdGluZyB0aHJvdWdoIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYmFzZWQgb24gOmRhdGE6YHN5cy5wYXRoYAorICB3aWxsIG5vdCBmaW5kIGFsbCBrZXlzLiBBIG1vZHVsZSdzIGBgX19maWxlX19gYCB3aGVuIGltcG9ydGVkIGluIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IHdpbGwgYWxzbyBub3cgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoLCBpbmNsdWRpbmcgd2hlbiB1c2luZworICBgYC1tYGAgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgKHRoaXMgZG9lcyBub3QgaW5mbHVlbmNlIHdoZW4gdGhlIHBhdGggdG8gYSBmaWxlCisgIGlzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZC1saW5lKS4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QgYi9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CmluZGV4IGJjMTIwNmIuLjI5OTAyZTQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy9pbmRleC5yc3QKKysrIGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdApAQCAtMTEsNiArMTEsNyBAQAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKIAorICAgMy40LnJzdAogICAgMy4zLnJzdAogICAgMy4yLnJzdAogICAgMy4xLnJzdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24tYXN0LmggYi9JbmNsdWRlL1B5dGhvbi1hc3QuaAppbmRleCAwMGU5MmQwLi42N2Q2NzdiIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi1hc3QuaAorKysgYi9JbmNsdWRlL1B5dGhvbi1hc3QuaApAQCAtMTgyLDggKzE4Miw5IEBACiAgICAgICAgICAgICAgICAgICBTZXRDb21wX2tpbmQ9OSwgRGljdENvbXBfa2luZD0xMCwgR2VuZXJhdG9yRXhwX2tpbmQ9MTEsCiAgICAgICAgICAgICAgICAgICBZaWVsZF9raW5kPTEyLCBZaWVsZEZyb21fa2luZD0xMywgQ29tcGFyZV9raW5kPTE0LAogICAgICAgICAgICAgICAgICAgQ2FsbF9raW5kPTE1LCBOdW1fa2luZD0xNiwgU3RyX2tpbmQ9MTcsIEJ5dGVzX2tpbmQ9MTgsCi0gICAgICAgICAgICAgICAgICBFbGxpcHNpc19raW5kPTE5LCBBdHRyaWJ1dGVfa2luZD0yMCwgU3Vic2NyaXB0X2tpbmQ9MjEsCi0gICAgICAgICAgICAgICAgICBTdGFycmVkX2tpbmQ9MjIsIE5hbWVfa2luZD0yMywgTGlzdF9raW5kPTI0LCBUdXBsZV9raW5kPTI1fTsKKyAgICAgICAgICAgICAgICAgIE5hbWVDb25zdGFudF9raW5kPTE5LCBFbGxpcHNpc19raW5kPTIwLCBBdHRyaWJ1dGVfa2luZD0yMSwKKyAgICAgICAgICAgICAgICAgIFN1YnNjcmlwdF9raW5kPTIyLCBTdGFycmVkX2tpbmQ9MjMsIE5hbWVfa2luZD0yNCwKKyAgICAgICAgICAgICAgICAgIExpc3Rfa2luZD0yNSwgVHVwbGVfa2luZD0yNn07CiBzdHJ1Y3QgX2V4cHIgewogICAgIGVudW0gX2V4cHJfa2luZCBraW5kOwogICAgIHVuaW9uIHsKQEAgLTI3OSw2ICsyODAsMTAgQEAKICAgICAgICAgfSBCeXRlczsKICAgICAgICAgCiAgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzaW5nbGV0b24gdmFsdWU7CisgICAgICAgIH0gTmFtZUNvbnN0YW50OworICAgICAgICAKKyAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAgICAgICAgICAgICBpZGVudGlmaWVyIGF0dHI7CiAgICAgICAgICAgICBleHByX2NvbnRleHRfdHkgY3R4OwpAQCAtMzU5LDE4ICszNjQsMTggQEAKIAogc3RydWN0IF9hcmd1bWVudHMgewogICAgIGFzZGxfc2VxICphcmdzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbjsKKyAgICBhcmdfdHkgdmFyYXJnOwogICAgIGFzZGxfc2VxICprd29ubHlhcmdzOwotICAgIGlkZW50aWZpZXIga3dhcmc7Ci0gICAgZXhwcl90eSBrd2FyZ2Fubm90YXRpb247Ci0gICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogICAgIGFzZGxfc2VxICprd19kZWZhdWx0czsKKyAgICBhcmdfdHkga3dhcmc7CisgICAgYXNkbF9zZXEgKmRlZmF1bHRzOwogfTsKIAogc3RydWN0IF9hcmcgewogICAgIGlkZW50aWZpZXIgYXJnOwogICAgIGV4cHJfdHkgYW5ub3RhdGlvbjsKKyAgICBpbnQgbGluZW5vOworICAgIGludCBjb2xfb2Zmc2V0OwogfTsKIAogc3RydWN0IF9rZXl3b3JkIHsKQEAgLTUwOSw2ICs1MTQsOSBAQAogZXhwcl90eSBfUHlfU3RyKHN0cmluZyBzLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBCeXRlcyhhMCwgYTEsIGEyLCBhMykgX1B5X0J5dGVzKGEwLCBhMSwgYTIsIGEzKQogZXhwcl90eSBfUHlfQnl0ZXMoYnl0ZXMgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKKyNkZWZpbmUgTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKSBfUHlfTmFtZUNvbnN0YW50KGEwLCBhMSwgYTIsIGEzKQorZXhwcl90eSBfUHlfTmFtZUNvbnN0YW50KHNpbmdsZXRvbiB2YWx1ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKKyAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwogI2RlZmluZSBFbGxpcHNpcyhhMCwgYTEsIGEyKSBfUHlfRWxsaXBzaXMoYTAsIGExLCBhMikKIGV4cHJfdHkgX1B5X0VsbGlwc2lzKGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CiAjZGVmaW5lIEF0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSBfUHlfQXR0cmlidXRlKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUpCkBAIC01NDIsMTEgKzU1MCwxMCBAQAogZXhjZXB0aGFuZGxlcl90eSBfUHlfRXhjZXB0SGFuZGxlcihleHByX3R5IHR5cGUsIGlkZW50aWZpZXIgbmFtZSwgYXNkbF9zZXEgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJlbmEpOwotI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KQotYXJndW1lbnRzX3R5IF9QeV9hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiwgYXNkbF9zZXEgKiBrd29ubHlhcmdzLCBpZGVudGlmaWVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sIGFzZGxfc2VxICogZGVmYXVsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqIGt3X2RlZmF1bHRzLCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIGFyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgX1B5X2FyZ3VtZW50cyhhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikKK2FyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgYXJnX3R5IHZhcmFyZywgYXNkbF9zZXEgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBhcmcoYTAsIGExLCBhMikgX1B5X2FyZyhhMCwgYTEsIGEyKQogYXJnX3R5IF9QeV9hcmcoaWRlbnRpZmllciBhcmcsIGV4cHJfdHkgYW5ub3RhdGlvbiwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBrZXl3b3JkKGEwLCBhMSwgYTIpIF9QeV9rZXl3b3JkKGEwLCBhMSwgYTIpCmRpZmYgLS1naXQgYS9JbmNsdWRlL1B5dGhvbi5oIGIvSW5jbHVkZS9QeXRob24uaAppbmRleCBhNzhhNzIxLi4yZGQ4MjkwIDEwMDY0NAotLS0gYS9JbmNsdWRlL1B5dGhvbi5oCisrKyBiL0luY2x1ZGUvUHl0aG9uLmgKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJvYmplY3QuaCIKICNpbmNsdWRlICJvYmppbXBsLmgiCiAjaW5jbHVkZSAidHlwZXNsb3RzLmgiCisjaW5jbHVkZSAicHloYXNoLmgiCiAKICNpbmNsdWRlICJweWRlYnVnLmgiCiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCBjOTYyNGYzLi5kMjU4YWQ1IDEwMDY0NAotLS0gYS9JbmNsdWRlL2Fic3RyYWN0LmgKKysrIGIvSW5jbHVkZS9hYnN0cmFjdC5oCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgaW50IFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIGludCBQeU9iamVjdF9IYXNBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIFJldHVybnMgMSBpZiBvIGhhcyB0aGUgYXR0cmlidXRlIGF0dHJfbmFtZSwgYW5kIDAgb3RoZXJ3aXNlLgogICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uOgpAQCAtMTU2LDcgKzE1Niw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIFB5T2JqZWN0KiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBQeU9iamVjdCogUHlPYmplY3RfR2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBSZXRyaWV2ZSBhbiBhdHRyaWJ1dGVkIG5hbWVkIGF0dHJfbmFtZSBmb3JtIG9iamVjdCBvLgogICAgICBSZXR1cm5zIHRoZSBhdHRyaWJ1dGUgdmFsdWUgb24gc3VjY2Vzcywgb3IgTlVMTCBvbiBmYWlsdXJlLgpAQCAtMTg5LDcgKzE4OSw3IEBACiAKICAgICAgLyogSW1wbGVtZW50ZWQgZWxzZXdoZXJlOgogCi0gICAgIGludCBQeU9iamVjdF9TZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUsIFB5T2JqZWN0ICp2KTsKKyAgICAgaW50IFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSwgUHlPYmplY3QgKnYpOwogCiAgICAgIFNldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCBhdHRyX25hbWUsIGZvciBvYmplY3QgbywKICAgICAgdG8gdGhlIHZhbHVlLCB2LiBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzCkBAIC0yMDksNyArMjA5LDcgQEAKIAogICAgICAvKiBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvOgogCi0gICAgIGludCBQeU9iamVjdF9EZWxBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICphdHRyX25hbWUpOworICAgICBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKTsKIAogICAgICBEZWxldGUgYXR0cmlidXRlIG5hbWVkIGF0dHJfbmFtZSwgZm9yIG9iamVjdCBvLiBSZXR1cm5zCiAgICAgIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24KQEAgLTI4NCw3ICsyODQsNyBAQAogICAgICAgICovCiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlX29iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCwgY2FsbGFibGVfb2JqZWN0LCB3aXRoIGEKQEAgLTI5Niw4ICsyOTYsOSBAQAogICAgICAgICovCiAKIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNoYXIgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkIG0gb2Ygb2JqZWN0IG8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgpAQCAtMzA4LDggKzMwOSw5IEBACiAgICAgIFB5dGhvbiBleHByZXNzaW9uOiBvLm1ldGhvZChhcmdzKS4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiAgICAgICAgLyoKICAgICAgICAgIExpa2UgUHlPYmplY3RfQ2FsbE1ldGhvZCwgYnV0IGV4cGVjdCBhIF9QeV9JZGVudGlmaWVyKiBhcyB0aGUKQEAgLTMxNywxMyArMzE5LDE2IEBACiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVChQeU9iamVjdCAqbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kSWRfU2l6ZVQoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0lkZW50aWZpZXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwpAQCAtMzM5LDExICszNDQsMTAgQEAKIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKFB5T2JqZWN0ICpvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptZXRob2QsIC4uLik7Ci0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoUHlPYmplY3QgKm8sCisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogCi0KICAgICAgICAvKgogICAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgbSBvZiBvYmplY3QgbyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCiAgICAgIEMgYXJndW1lbnRzLiAgVGhlIEMgYXJndW1lbnRzIGFyZSBwcm92aWRlZCBhcyBQeU9iamVjdCAqCkBAIC00MDQsOCArNDA4LDkgQEAKICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotICAgICBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIF9QeU9iamVjdF9IYXNMZW4oUHlPYmplY3QgKm8pOwogI2VuZGlmCitQeUFQSV9GVU5DKFB5X3NzaXplX3QpIFB5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QpOwogCiAgICAgICAgLyoKICAgICAgR3Vlc3MgdGhlIHNpemUgb2Ygb2JqZWN0IG8gdXNpbmcgbGVuKG8pIG9yIG8uX19sZW5ndGhfaGludF9fKCkuCkBAIC00MjksNyArNDM0LDcgQEAKICAgICAgc3RhdGVtZW50OiBvW2tleV09di4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIFJlbW92ZSB0aGUgbWFwcGluZyBmb3Igb2JqZWN0LCBrZXksIGZyb20gdGhlIG9iamVjdCAqby4KQEAgLTExNTEsNyArMTE1Niw3IEBACiAKICAgICAgLyogaW1wbGVtZW50ZWQgYXMgYSBtYWNybzoKIAotICAgICBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCwga2V5LCBmcm9tIHRoZSBvYmplY3QgKm8uCiAgICAgIFJldHVybnMgLTEgb24gZmFpbHVyZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bwpAQCAtMTE2OSw3ICsxMTc0LDcgQEAKICAgICAgICAqLwogI2RlZmluZSBQeU1hcHBpbmdfRGVsSXRlbShPLEspIFB5T2JqZWN0X0RlbEl0ZW0oKE8pLChLKSkKIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KTsKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBPbiBzdWNjZXNzLCByZXR1cm4gMSBpZiB0aGUgbWFwcGluZyBvYmplY3QgaGFzIHRoZSBrZXksIGtleSwKQEAgLTEyMTMsNyArMTIxOCw4IEBACiAKICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIFJldHVybiBlbGVtZW50IG9mIG8gY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0LCBrZXksIG9yIE5VTEwKQEAgLTEyMjEsNyArMTIyNyw3IEBACiAgICAgIG9ba2V5XS4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5LAorICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlKTsKIAogICAgICAgIC8qCmRpZmYgLS1naXQgYS9JbmNsdWRlL2FzZGwuaCBiL0luY2x1ZGUvYXNkbC5oCmluZGV4IDZiZjYxOGYuLjQ5NTE1M2MgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYXNkbC5oCisrKyBiL0luY2x1ZGUvYXNkbC5oCkBAIC01LDYgKzUsNyBAQAogdHlwZWRlZiBQeU9iamVjdCAqIHN0cmluZzsKIHR5cGVkZWYgUHlPYmplY3QgKiBieXRlczsKIHR5cGVkZWYgUHlPYmplY3QgKiBvYmplY3Q7Cit0eXBlZGVmIFB5T2JqZWN0ICogc2luZ2xldG9uOwogCiAvKiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBhc2RsX2MucHkgd2FzIGNvbXBsZXRlbHkKICAgIGluZGVwZW5kZW50IG9mIFB5dGhvbiwgYnV0IGl0IGlzIGEgZ29hbCB0aGUgcmVxdWlyZXMgdG9vIG11Y2ggd29yawpAQCAtMjQsMTcgKzI1LDE5IEBACiAgICAgaW50IGVsZW1lbnRzWzFdOwogfSBhc2RsX2ludF9zZXE7CiAKLWFzZGxfc2VxICphc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Ci1hc2RsX2ludF9zZXEgKmFzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Cithc2RsX3NlcSAqX1B5X2FzZGxfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKTsKK2FzZGxfaW50X3NlcSAqX1B5X2FzZGxfaW50X3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7CiAKICNkZWZpbmUgYXNkbF9zZXFfR0VUKFMsIEkpIChTKS0+ZWxlbWVudHNbKEkpXQogI2RlZmluZSBhc2RsX3NlcV9MRU4oUykgKChTKSA9PSBOVUxMID8gMCA6IChTKS0+c2l6ZSkKICNpZmRlZiBQeV9ERUJVRwotI2RlZmluZSBhc2RsX3NlcV9TRVQoUywgSSwgVikgeyBcCi0gICAgICAgIGludCBfYXNkbF9pID0gKEkpOyBcCi0gICAgICAgIGFzc2VydCgoUykgJiYgX2FzZGxfaSA8IChTKS0+c2l6ZSk7IFwKKyNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgUHlfc3NpemVfdCBfYXNkbF9pID0gKEkpOyBcCisgICAgICAgIGFzc2VydCgoUykgIT0gTlVMTCk7IFwKKyAgICAgICAgYXNzZXJ0KF9hc2RsX2kgPCAoUyktPnNpemUpOyBcCiAgICAgICAgIChTKS0+ZWxlbWVudHNbX2FzZGxfaV0gPSAoVik7IFwKLX0KKyAgICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIChTKS0+ZWxlbWVudHNbSV0gPSAoVikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc3QuaCBiL0luY2x1ZGUvYXN0LmgKaW5kZXggMDU1ZThkYy4uNmE4YzgxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hc3QuaAorKysgYi9JbmNsdWRlL2FzdC5oCkBAIC0xMCw2ICsxMCwxMSBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMobW9kX3R5KSBQeUFTVF9Gcm9tTm9kZU9iamVjdCgKKyAgICBjb25zdCBub2RlICpuLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oIGIvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAppbmRleCBlY2NkNDRjLi5hNzU3Yjg4IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKQEAgLTIyLDEwICsyMiwxMSBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X1ZBUl9IRUFECisgICAgUHlfc3NpemVfdCBvYl9hbGxvYzsgLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkIGluIG9iX2J5dGVzICovCisgICAgY2hhciAqb2JfYnl0ZXM7ICAgICAgLyogUGh5c2ljYWwgYmFja2luZyBidWZmZXIgKi8KKyAgICBjaGFyICpvYl9zdGFydDsgICAgICAvKiBMb2dpY2FsIHN0YXJ0IGluc2lkZSBvYl9ieXRlcyAqLwogICAgIC8qIFhYWChubm9yd2l0eik6IHNob3VsZCBvYl9leHBvcnRzIGJlIFB5X3NzaXplX3Q/ICovCi0gICAgaW50IG9iX2V4cG9ydHM7IC8qIGhvdyBtYW55IGJ1ZmZlciBleHBvcnRzICovCi0gICAgUHlfc3NpemVfdCBvYl9hbGxvYzsgLyogSG93IG1hbnkgYnl0ZXMgYWxsb2NhdGVkICovCi0gICAgY2hhciAqb2JfYnl0ZXM7CisgICAgaW50IG9iX2V4cG9ydHM7ICAgICAgLyogSG93IG1hbnkgYnVmZmVyIGV4cG9ydHMgKi8KIH0gUHlCeXRlQXJyYXlPYmplY3Q7CiAjZW5kaWYKIApAQCAtNDksOCArNTAsOCBAQAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgXAogICAgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBcCi0gICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2JfYnl0ZXMgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQotI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksUHlfU0laRShzZWxmKSkKKyAgICAgUHlfU0laRShzZWxmKSA/ICgoUHlCeXRlQXJyYXlPYmplY3QgKikoc2VsZikpLT5vYl9zdGFydCA6IF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmcpCisjZGVmaW5lIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBQeV9TSVpFKHNlbGYpKQogCiBQeUFQSV9EQVRBKGNoYXIpIF9QeUJ5dGVBcnJheV9lbXB0eV9zdHJpbmdbXTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlc29iamVjdC5oIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCmluZGV4IGQ3YzdmZmQuLjBlZThkMzYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKQEAgLTg2LDExICs4NiwxMSBAQAogICAgMC10ZXJtaW5hdGVkIChwYXNzaW5nIGEgc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMTCBjaGFyYWN0ZXJzIHdpbGwKICAgIGNhdXNlIGFuIGV4Y2VwdGlvbikuICAqLwogUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCS8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLwotICAgIHJlZ2lzdGVyIGNoYXIgKipzLAkJLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KLSAgICByZWdpc3RlciBQeV9zc2l6ZV90ICpsZW4JLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAotCQkJCSAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKLQkJCQkgICBzdHJpbmdzKSAqLworICAgIFB5T2JqZWN0ICpvYmosICAgICAgLyogc3RyaW5nIG9yIFVuaWNvZGUgb2JqZWN0ICovCisgICAgY2hhciAqKnMsICAgICAgICAgICAvKiBwb2ludGVyIHRvIGJ1ZmZlciB2YXJpYWJsZSAqLworICAgIFB5X3NzaXplX3QgKmxlbiAgICAgLyogcG9pbnRlciB0byBsZW5ndGggdmFyaWFibGUgb3IgTlVMTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgcG9zc2libGUgZm9yIDAtdGVybWluYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncykgKi8KICAgICApOwogCiAvKiBVc2luZyB0aGUgY3VycmVudCBsb2NhbGUsIGluc2VydCB0aGUgdGhvdXNhbmRzIGdyb3VwaW5nCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvZGVjcy5oIGIvSW5jbHVkZS9jb2RlY3MuaAppbmRleCAwZDllOWI0Li41Y2E1MDVmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvZGVjcy5oCisrKyBiL0luY2x1ZGUvY29kZWNzLmgKQEAgLTk0LDYgKzk0LDMzIEBACiAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCiAgICAgICAgKTsKIAorI2lmbmRlZiBQWV9MSU1JVEVEX0FQSQorLyogVGV4dCBjb2RlYyBzcGVjaWZpYyBlbmNvZGluZyBhbmQgZGVjb2RpbmcgQVBJLgorCisgICBDaGVja3MgdGhlIGVuY29kaW5nIGFnYWluc3QgYSBsaXN0IG9mIGNvZGVjcyB3aGljaCBkbyBub3QKKyAgIGltcGxlbWVudCBhIHN0cjwtPmJ5dGVzIGVuY29kaW5nIGJlZm9yZSBhdHRlbXB0aW5nIHRoZQorICAgb3BlcmF0aW9uLgorCisgICBQbGVhc2Ugbm90ZSB0aGF0IHRoZXNlIEFQSXMgYXJlIGludGVybmFsIGFuZCBzaG91bGQgbm90CisgICBiZSB1c2VkIGluIFB5dGhvbiBDIGV4dGVuc2lvbnMuCisKKyAqLworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvZGVjX0VuY29kZVRleHQoCisgICAgICAgUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICBjb25zdCBjaGFyICplcnJvcnMKKyAgICAgICApOworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvZGVjX0RlY29kZVRleHQoCisgICAgICAgUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICBjb25zdCBjaGFyICplcnJvcnMKKyAgICAgICApOworI2VuZGlmCisKKworCiAvKiAtLS0gQ29kZWMgTG9va3VwIEFQSXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAKICAgIEFsbCBBUElzIHJldHVybiBhIGNvZGVjIG9iamVjdCB3aXRoIGluY3JlbWVudGVkIHJlZmNvdW50IGFuZCBhcmUKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGlsZS5oIGIvSW5jbHVkZS9jb21waWxlLmgKaW5kZXggYWMyNjM2ZC4uYzY2NTBkNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21waWxlLmgKKysrIGIvSW5jbHVkZS9jb21waWxlLmgKQEAgLTM2LDExICszNiwyNyBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKLVB5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKHN0cnVjdCBfbW9kICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKSBQeUFTVF9Db21waWxlT2JqZWN0KAorICAgIHN0cnVjdCBfbW9kICptb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKAorICAgIHN0cnVjdCBfbW9kICogbW9kLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1RPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lCisgICAgKTsKIAogLyogX1B5X01hbmdsZSBpcyBkZWZpbmVkIGluIGNvbXBpbGUuYyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9NYW5nbGUoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICpuYW1lKTsKIAorI2RlZmluZSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCBJTlRfTUFYCitQeUFQSV9GVU5DKGludCkgUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZyk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2RpY3RvYmplY3QuaCBiL0luY2x1ZGUvZGljdG9iamVjdC5oCmluZGV4IGQ4OWFhYzguLjI4NTk2NjkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZGljdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvZGljdG9iamVjdC5oCkBAIC01Myw2ICs1Myw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKFB5T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfR2V0SXRlbUlkV2l0aEVycm9yKFB5T2JqZWN0ICpkcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICprZXkpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfU2V0RGVmYXVsdCgKKyAgICBQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0b2JqKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfU2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICppdGVtKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyh2b2lkKSBQeURpY3RfQ2xlYXIoUHlPYmplY3QgKm1wKTsKQEAgLTEwOSw5ICsxMTEsMTEgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X0RlbEl0ZW1JZChQeU9iamVjdCAqbXAsIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CisKIGludCBfUHlPYmplY3REaWN0X1NldEl0ZW0oUHlUeXBlT2JqZWN0ICp0cCwgUHlPYmplY3QgKipkaWN0cHRyLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKTsKIFB5T2JqZWN0ICpfUHlEaWN0X0xvYWRHbG9iYWwoUHlEaWN0T2JqZWN0ICosIFB5RGljdE9iamVjdCAqLCBQeU9iamVjdCAqKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGVvYmplY3QuaCBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCmluZGV4IGE5OWM5NGQuLjA5Mzk3NDQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZmlsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZmlsZW9iamVjdC5oCkBAIC04LDggKzgsOSBAQAogCiAjZGVmaW5lIFBZX1NURElPVEVYVE1PREUgImIiCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0Zyb21GZChpbnQsIGNoYXIgKiwgY2hhciAqLCBpbnQsIGNoYXIgKiwgY2hhciAqLAotCQkJCSAgICAgY2hhciAqLCBpbnQpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfRnJvbUZkKGludCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9HZXRMaW5lKFB5T2JqZWN0ICosIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlGaWxlX1dyaXRlT2JqZWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlGaWxlX1dyaXRlU3RyaW5nKGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGV1dGlscy5oIGIvSW5jbHVkZS9maWxldXRpbHMuaAppbmRleCA3YzE4Y2YyLi41NDY2ZTNjIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGV1dGlscy5oCisrKyBiL0luY2x1ZGUvZmlsZXV0aWxzLmgKQEAgLTI3LDExICsyNywxOSBAQAogICAgIHN0cnVjdCBzdGF0ICpzdGF0YnVmKTsKICNlbmRpZgogCitQeUFQSV9GVU5DKGludCkgX1B5X29wZW4oCisgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsCisgICAgaW50IGZsYWdzKTsKKwogUHlBUElfRlVOQyhGSUxFICopIF9QeV93Zm9wZW4oCiAgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKICAgICBjb25zdCB3Y2hhcl90ICptb2RlKTsKIAogUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGNvbnN0IGNoYXIgKm1vZGUpOworCitQeUFQSV9GVU5DKEZJTEUqKSBfUHlfZm9wZW5fb2JqKAogICAgIFB5T2JqZWN0ICpwYXRoLAogICAgIGNvbnN0IGNoYXIgKm1vZGUpOwogCkBAIC01Myw2ICs2MSwxMyBAQAogICAgIHdjaGFyX3QgKmJ1ZiwKICAgICBzaXplX3Qgc2l6ZSk7CiAKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZ2V0X2luaGVyaXRhYmxlKGludCBmZCk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphdG9taWNfZmxhZ193b3Jrcyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZHVwKGludCBmZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggMzNmNzNhZi4uYjQxYmVhNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMzYsNiArMzYsOCBAQAogICAgICAgICAgICBub24tZ2VuZXJhdG9yIGZyYW1lcy4gU2VlIHRoZSBzYXZlX2V4Y19zdGF0ZSBhbmQgc3dhcF9leGNfc3RhdGUKICAgICAgICAgICAgZnVuY3Rpb25zIGluIGNldmFsLmMgZm9yIGRldGFpbHMgb2YgdGhlaXIgdXNlLiAqLwogICAgIFB5T2JqZWN0ICpmX2V4Y190eXBlLCAqZl9leGNfdmFsdWUsICpmX2V4Y190cmFjZWJhY2s7CisgICAgLyogQm9ycm93ZWQgcmVmZXJlbmNlIHRvIGEgZ2VuZXJhdG9yLCBvciBOVUxMICovCisgICAgUHlPYmplY3QgKmZfZ2VuOwogCiAgICAgUHlUaHJlYWRTdGF0ZSAqZl90c3RhdGU7CiAgICAgaW50IGZfbGFzdGk7ICAgICAgICAgICAgICAgIC8qIExhc3QgaW5zdHJ1Y3Rpb24gaWYgY2FsbGVkICovCkBAIC00Niw2ICs0OCw3IEBACiAgICAgICAgYnl0ZWNvZGUgaW5kZXguICovCiAgICAgaW50IGZfbGluZW5vOyAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgbGluZSBudW1iZXIgKi8KICAgICBpbnQgZl9pYmxvY2s7ICAgICAgICAgICAgICAgLyogaW5kZXggaW4gZl9ibG9ja3N0YWNrICovCisgICAgY2hhciBmX2V4ZWN1dGluZzsgICAgICAgICAgIC8qIHdoZXRoZXIgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZyAqLwogICAgIFB5VHJ5QmxvY2sgZl9ibG9ja3N0YWNrW0NPX01BWEJMT0NLU107IC8qIGZvciB0cnkgYW5kIGxvb3AgYmxvY2tzICovCiAgICAgUHlPYmplY3QgKmZfbG9jYWxzcGx1c1sxXTsgIC8qIGxvY2FscytzdGFjaywgZHluYW1pY2FsbHkgc2l6ZWQgKi8KIH0gUHlGcmFtZU9iamVjdDsKQEAgLTc1LDYgKzc4LDggQEAKIC8qIENvbnZlcnNpb25zIGJldHdlZW4gImZhc3QgbG9jYWxzIiBhbmQgbG9jYWxzIGluIGRpY3Rpb25hcnkgKi8KIAogUHlBUElfRlVOQyh2b2lkKSBQeUZyYW1lX0xvY2Fsc1RvRmFzdChQeUZyYW1lT2JqZWN0ICosIGludCk7CisKK1B5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoUHlGcmFtZU9iamVjdCAqKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZ2Vub2JqZWN0LmggYi9JbmNsdWRlL2dlbm9iamVjdC5oCmluZGV4IGVkNDUxYmEuLjY1ZjFlY2YgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ2Vub2JqZWN0LmgKKysrIGIvSW5jbHVkZS9nZW5vYmplY3QuaApAQCAtMzYsNiArMzYsOCBAQAogUHlBUElfRlVOQyhpbnQpIFB5R2VuX05lZWRzRmluYWxpemluZyhQeUdlbk9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlHZW5fRmV0Y2hTdG9wSXRlcmF0aW9uVmFsdWUoUHlPYmplY3QgKiopOwogUHlPYmplY3QgKl9QeUdlbl9TZW5kKFB5R2VuT2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlHZW5fRmluYWxpemUoUHlPYmplY3QgKnNlbGYpOworCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ncmFtbWFyLmggYi9JbmNsdWRlL2dyYW1tYXIuaAppbmRleCA4NDI2ZGEzLi5iYTdkMTlkIDEwMDY0NAotLS0gYS9JbmNsdWRlL2dyYW1tYXIuaAorKysgYi9JbmNsdWRlL2dyYW1tYXIuaApAQCAtNjksMTQgKzY5LDE0IEBACiAvKiBGVU5DVElPTlMgKi8KIAogZ3JhbW1hciAqbmV3Z3JhbW1hcihpbnQgc3RhcnQpOwotZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNoYXIgKm5hbWUpOworZGZhICphZGRkZmEoZ3JhbW1hciAqZywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IGFkZHN0YXRlKGRmYSAqZCk7CiB2b2lkIGFkZGFyYyhkZmEgKmQsIGludCBmcm9tLCBpbnQgdG8sIGludCBsYmwpOwogZGZhICpQeUdyYW1tYXJfRmluZERGQShncmFtbWFyICpnLCBpbnQgdHlwZSk7CiAKLWludCBhZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKTsKLWludCBmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNoYXIgKnN0cik7Ci1jaGFyICpQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYik7CitpbnQgYWRkbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cik7CitpbnQgZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpOworY29uc3QgY2hhciAqUHlHcmFtbWFyX0xhYmVsUmVwcihsYWJlbCAqbGIpOwogdm9pZCB0cmFuc2xhdGVsYWJlbHMoZ3JhbW1hciAqZyk7CiAKIHZvaWQgYWRkZmlyc3RzZXRzKGdyYW1tYXIgKmcpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9pbXBvcnQuaCBiL0luY2x1ZGUvaW1wb3J0LmgKaW5kZXggZmRjMjczMy4uNGE1MTVkNSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9pbXBvcnQuaAorKysgYi9JbmNsdWRlL2ltcG9ydC5oCkBAIC0xMywxOSArMTMsMTkgQEAKIFB5QVBJX0ZVTkMobG9uZykgUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIodm9pZCk7CiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlJbXBvcnRfR2V0TWFnaWNUYWcodm9pZCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbwogICAgICk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvLAotICAgIGNoYXIgKnBhdGhuYW1lICAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpwYXRobmFtZSAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAotICAgIGNoYXIgKm5hbWUsICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgIFB5T2JqZWN0ICpjbywKLSAgICBjaGFyICpwYXRobmFtZSwgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCi0gICAgY2hhciAqY3BhdGhuYW1lICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoCiAgICAgUHlPYmplY3QgKm5hbWUsCkBAIC03Miw3ICs3Miw3IEBACiAgICAgUHlPYmplY3QgKm5hbWUKICAgICApOwogUHlBUElfRlVOQyhpbnQpIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSgKLSAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCkBAIC05MiwxMiArOTIsMTIgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKilfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KV9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oCiAgICAgUHlPYmplY3QgKm1vZCwKLSAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogUHlBUElfRlVOQyhpbnQpX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0KiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAKIHN0cnVjdCBfaW5pdHRhYiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZTsgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QqICgqaW5pdGZ1bmMpKHZvaWQpOwogfTsKIFB5QVBJX0RBVEEoc3RydWN0IF9pbml0dGFiICopIFB5SW1wb3J0X0luaXR0YWI7CkBAIC0xMTMsMTUgKzExMywxNSBAQAogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBzdHJ1Y3QgX2Zyb3plbiB7Ci0gICAgY2hhciAqbmFtZTsgICAgICAgICAgICAgICAgIC8qIEFTQ0lJIGVuY29kZWQgc3RyaW5nICovCi0gICAgdW5zaWduZWQgY2hhciAqY29kZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb2RlOwogICAgIGludCBzaXplOwogfTsKIAogLyogRW1iZWRkaW5nIGFwcHMgbWF5IGNoYW5nZSB0aGlzIHBvaW50ZXIgdG8gcG9pbnQgdG8gdGhlaXIgZmF2b3JpdGUKICAgIGNvbGxlY3Rpb24gb2YgZnJvemVuIG1vZHVsZXM6ICovCiAKLVB5QVBJX0RBVEEoc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK1B5QVBJX0RBVEEoY29uc3Qgc3RydWN0IF9mcm96ZW4gKikgUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbG9uZ29iamVjdC5oIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKaW5kZXggZmJlNzM4Yy4uN2MzZjZkMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9sb25nb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKQEAgLTUyLDYgKzUyLDE5IEBACiAjZXJyb3IgInNpemVvZihwaWRfdCkgaXMgbmVpdGhlciBzaXplb2YoaW50KSwgc2l6ZW9mKGxvbmcpIG9yIHNpemVvZihsb25nIGxvbmcpIgogI2VuZGlmIC8qIFNJWkVPRl9QSURfVCAqLwogCisjaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfSU5UCisjICBkZWZpbmUgX1B5X1BBUlNFX0lOVFBUUiAiaSIKKyMgIGRlZmluZSBfUHlfUEFSU0VfVUlOVFBUUiAiSSIKKyNlbGlmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJsIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJrIgorI2VsaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HX0xPTkcKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJMIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJLIgorI2Vsc2UKKyMgIGVycm9yICJ2b2lkKiBkaWZmZXJlbnQgaW4gc2l6ZSBmcm9tIGludCwgbG9uZyBhbmQgbG9uZyBsb25nIgorI2VuZGlmIC8qIFNJWkVPRl9WT0lEX1AgKi8KKwogLyogVXNlZCBieSBQeXRob24vbXlzdHJ0b3VsLmMuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKHVuc2lnbmVkIGNoYXIpIF9QeUxvbmdfRGlnaXRWYWx1ZVsyNTZdOwpAQCAtODAsNyArOTMsNyBAQAogUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKiwgaW50ICopOwogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZShQeV9VTklDT0RFKiwgUHlfc3NpemVfdCwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSk7CkBAIC0xNzYsOCArMTg5LDggQEAKIC8qIFRoZXNlIGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgaW50IG9iamVjdCwgYnV0IHRoZXkncmUgaGFuZHkuIFRoZQogICAgZnVuY3Rpb25zIGFyZSBpbiBQeXRob24vbXlzdHJ0b3VsLmMuCiAgKi8KLVB5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlPU19zdHJ0b3VsKGNoYXIgKiwgY2hhciAqKiwgaW50KTsKLVB5QVBJX0ZVTkMobG9uZykgUHlPU19zdHJ0b2woY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tYXJzaGFsLmggYi9JbmNsdWRlL21hcnNoYWwuaAppbmRleCBlOTZkMDYyLi4wOWQ5MzM3IDEwMDY0NAotLS0gYS9JbmNsdWRlL21hcnNoYWwuaAorKysgYi9JbmNsdWRlL21hcnNoYWwuaApAQCAtNyw3ICs3LDcgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDIKKyNkZWZpbmUgUHlfTUFSU0hBTF9WRVJTSU9OIDQKIAogUHlBUElfRlVOQyh2b2lkKSBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlKGxvbmcsIEZJTEUgKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICosIEZJTEUgKiwgaW50KTsKQEAgLTE5LDcgKzE5LDggQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShGSUxFICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShGSUxFICopOwogI2VuZGlmCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICosIFB5X3NzaXplX3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2RzdXBwb3J0LmggYi9JbmNsdWRlL21vZHN1cHBvcnQuaAppbmRleCBlY2YxZGNjLi5hYjcyNWY2IDEwMDY0NAotLS0gYS9JbmNsdWRlL21vZHN1cHBvcnQuaAorKysgYi9JbmNsdWRlL21vZHN1cHBvcnQuaApAQCAtMjYsNyArMjYsNyBAQAogLyogRHVlIHRvIGEgZ2xpdGNoIGluIDMuMiwgdGhlIF9TaXplVCB2ZXJzaW9ucyB3ZXJlbid0IGV4cG9ydGVkIGZyb20gdGhlIERMTC4gKi8KICNpZiAhZGVmaW5lZChQWV9TU0laRV9UX0NMRUFOKSB8fCAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDMwMDAwCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pIFB5X0ZPUk1BVF9QQVJTRVRVUExFKFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpOworUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIC4uLik7CiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKFB5T2JqZWN0ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmplY3QuaCBiL0luY2x1ZGUvb2JqZWN0LmgKaW5kZXggY2RlYjA2Yy4uZjUzOTY1MiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vYmplY3QuaAorKysgYi9JbmNsdWRlL29iamVjdC5oCkBAIC0xNDMsNyArMTQzLDggQEAKICAgICBQeU9iamVjdCAqb2JqZWN0OwogfSBfUHlfSWRlbnRpZmllcjsKIAotI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZyh2YXJuYW1lLCB2YWx1ZSkgIHN0YXRpYyBfUHlfSWRlbnRpZmllciB2YXJuYW1lID0geyAwLCB2YWx1ZSwgMCB9CisjZGVmaW5lIF9QeV9zdGF0aWNfc3RyaW5nX2luaXQodmFsdWUpIHsgMCwgdmFsdWUsIDAgfQorI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZyh2YXJuYW1lLCB2YWx1ZSkgIHN0YXRpYyBfUHlfSWRlbnRpZmllciB2YXJuYW1lID0gX1B5X3N0YXRpY19zdHJpbmdfaW5pdCh2YWx1ZSkKICNkZWZpbmUgX1B5X0lERU5USUZJRVIodmFybmFtZSkgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF8jI3Zhcm5hbWUsICN2YXJuYW1lKQogCiAvKgpAQCAtMzYyLDcgKzM2Myw3IEBACiAgICAgUHlCdWZmZXJQcm9jcyAqdHBfYXNfYnVmZmVyOwogCiAgICAgLyogRmxhZ3MgdG8gZGVmaW5lIHByZXNlbmNlIG9mIG9wdGlvbmFsL2V4cGFuZGVkIGZlYXR1cmVzICovCi0gICAgbG9uZyB0cF9mbGFnczsKKyAgICB1bnNpZ25lZCBsb25nIHRwX2ZsYWdzOwogCiAgICAgY29uc3QgY2hhciAqdHBfZG9jOyAvKiBEb2N1bWVudGF0aW9uIHN0cmluZyAqLwogCkBAIC00MDgsNiArNDA5LDggQEAKICAgICAvKiBUeXBlIGF0dHJpYnV0ZSBjYWNoZSB2ZXJzaW9uIHRhZy4gQWRkZWQgaW4gdmVyc2lvbiAyLjYgKi8KICAgICB1bnNpZ25lZCBpbnQgdHBfdmVyc2lvbl90YWc7CiAKKyAgICBkZXN0cnVjdG9yIHRwX2ZpbmFsaXplOworCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgLyogdGhlc2UgbXVzdCBiZSBsYXN0IGFuZCBuZXZlciBleHBsaWNpdGx5IGluaXRpYWxpemVkICovCiAgICAgUHlfc3NpemVfdCB0cF9hbGxvY3M7CkBAIC00MjgsNyArNDMxLDcgQEAKICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgIGludCBiYXNpY3NpemU7CiAgICAgaW50IGl0ZW1zaXplOwotICAgIGludCBmbGFnczsKKyAgICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3RzOyAvKiB0ZXJtaW5hdGVkIGJ5IHNsb3Q9PTAuICovCiB9IFB5VHlwZV9TcGVjOwogCkBAIC00NzAsNyArNDczLDcgQEAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJhc2VPYmplY3RfVHlwZTsgLyogYnVpbHQtaW4gJ29iamVjdCcgKi8KIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVN1cGVyX1R5cGU7IC8qIGJ1aWx0LWluICdzdXBlcicgKi8KIAotUHlBUElfRlVOQyhsb25nKSBQeVR5cGVfR2V0RmxhZ3MoUHlUeXBlT2JqZWN0Kik7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKIAogI2RlZmluZSBQeVR5cGVfQ2hlY2sob3ApIFwKICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MpCkBAIC01MzAsNiArNTMzLDggQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICopOwogCiAvKiBTYW1lIGFzIFB5T2JqZWN0X0dlbmVyaWN7R2V0LFNldH1BdHRyLCBidXQgcGFzc2luZyB0aGUgYXR0cmlidXRlcwogICAgZGljdCBhcyB0aGUgbGFzdCBwYXJhbWV0ZXIuICovCkBAIC01NTcsMjMgKzU2Miw2IEBACiBQeUFQSV9GVU5DKGludCkgUHlfUmVwckVudGVyKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeV9SZXByTGVhdmUoUHlPYmplY3QgKik7CiAKLS8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCi0jaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOwotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciosIFB5X3NzaXplX3QpOwotI2VuZGlmCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9oYXNoX3QgcHJlZml4OwotICAgIFB5X2hhc2hfdCBzdWZmaXg7Ci19IF9QeV9IYXNoU2VjcmV0X3Q7Ci1QeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OwotCi0jaWZkZWYgUHlfREVCVUcKLVB5QVBJX0RBVEEoaW50KSBfUHlfSGFzaFNlY3JldF9Jbml0aWFsaXplZDsKLSNlbmRpZgotCiAvKiBIZWxwZXIgZm9yIHBhc3Npbmcgb2JqZWN0cyB0byBwcmludGYgYW5kIHRoZSBsaWtlICovCiAjZGVmaW5lIFB5T2JqZWN0X1JFUFIob2JqKSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5T2JqZWN0X1JlcHIob2JqKSkKIApAQCAtNjA0LDUwICs1OTIsNTUgQEAKICovCiAKIC8qIFNldCBpZiB0aGUgdHlwZSBvYmplY3QgaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFMPDw5KQorI2RlZmluZSBQeV9UUEZMQUdTX0hFQVBUWVBFICgxVUwgPDwgOSkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGFsbG93cyBzdWJjbGFzc2luZyAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VUWVBFICgxTDw8MTApCisjZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFVTCA8PCAxMCkKIAogLyogU2V0IGlmIHRoZSB0eXBlIGlzICdyZWFkeScgLS0gZnVsbHkgaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWSAoMUw8PDEyKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxVUwgPDwgMTIpCiAKIC8qIFNldCB3aGlsZSB0aGUgdHlwZSBpcyBiZWluZyAncmVhZGllZCcsIHRvIHByZXZlbnQgcmVjdXJzaXZlIHJlYWR5IGNhbGxzICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFlJTkcgKDFMPDwxMykKKyNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMVVMIDw8IDEzKQogCiAvKiBPYmplY3RzIHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uIChzZWUgb2JqaW1wLmgpICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMUw8PDE0KQorI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfR0MgKDFVTCA8PCAxNCkKIAogLyogVGhlc2UgdHdvIGJpdHMgYXJlIHByZXNlcnZlZCBmb3IgU3RhY2tsZXNzIFB5dGhvbiwgbmV4dCBhZnRlciB0aGlzIGlzIDE3ICovCiAjaWZkZWYgU1RBQ0tMRVNTCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzTDw8MTUpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OICgzVUwgPDwgMTUpCiAjZWxzZQogI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiAwCiAjZW5kaWYKIAogLyogT2JqZWN0cyBzdXBwb3J0IHR5cGUgYXR0cmlidXRlIGNhY2hlICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxTDw8MTgpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxTDw8MTkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyAgICgxVUwgPDwgMTgpCisjZGVmaW5lIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcgICgxVUwgPDwgMTkpCiAKIC8qIFR5cGUgaXMgYWJzdHJhY3QgYW5kIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JU19BQlNUUkFDVCAoMUw8PDIwKQorI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxVUwgPDwgMjApCiAKIC8qIFRoZXNlIGZsYWdzIGFyZSB1c2VkIHRvIGRldGVybWluZSBpZiBhIHR5cGUgaXMgYSBzdWJjbGFzcy4gKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19JTlRfU1VCQ0xBU1MgICAgICAgICAoMUw8PDIzKQotI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxTDw8MjQpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFMPDwyNSkKLSNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMUw8PDI2KQotI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxTDw8MjcpCi0jZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFMPDwyOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI5KQotI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxTDw8MzApCi0jZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFMPDwzMSkKKyNkZWZpbmUgUHlfVFBGTEFHU19MT05HX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI0KQorI2RlZmluZSBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjUpCisjZGVmaW5lIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1MgICAgICAgKDFVTCA8PCAyNikKKyNkZWZpbmUgUHlfVFBGTEFHU19CWVRFU19TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI3KQorI2RlZmluZSBQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MgICAgICgxVUwgPDwgMjgpCisjZGVmaW5lIFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUyAgICAoMVVMIDw8IDMwKQorI2RlZmluZSBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMzEpCiAKICNkZWZpbmUgUHlfVFBGTEFHU19ERUZBVUxUICAoIFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gfCBcCiAgICAgICAgICAgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyB8IFwKICAgICAgICAgICAgICAgICAwKQogCisvKiBOT1RFOiBUaGUgZm9sbG93aW5nIGZsYWdzIHJldXNlIGxvd2VyIGJpdHMgKHJlbW92ZWQgYXMgcGFydCBvZiB0aGUKKyAqIFB5dGhvbiAzLjAgdHJhbnNpdGlvbikuICovCisKKy8qIFR5cGUgc3RydWN0dXJlIGhhcyB0cF9maW5hbGl6ZSBtZW1iZXIgKDMuNCkgKi8KKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFICgxVUwgPDwgMCkKKwogI2lmZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5VHlwZV9IYXNGZWF0dXJlKHQsZikgICgoUHlUeXBlX0dldEZsYWdzKHQpICYgKGYpKSAhPSAwKQogI2Vsc2UKQEAgLTY4MiwxMiArNjc1LDYgQEAKIGNvbXBsaWNhdGlvbnMgaW4gdGhlIGRlYWxsb2NhdGlvbiBmdW5jdGlvbi4gIChUaGlzIGlzIGFjdHVhbGx5IGEKIGRlY2lzaW9uIHRoYXQncyB1cCB0byB0aGUgaW1wbGVtZW50ZXIgb2YgZWFjaCBuZXcgdHlwZSBzbyBpZiB5b3Ugd2FudCwKIHlvdSBjYW4gY291bnQgc3VjaCByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIG9iamVjdC4pCi0KLSoqKiBXQVJOSU5HKioqIFRoZSBQeV9ERUNSRUYgbWFjcm8gbXVzdCBoYXZlIGEgc2lkZS1lZmZlY3QtZnJlZSBhcmd1bWVudAotc2luY2UgaXQgbWF5IGV2YWx1YXRlIGl0cyBhcmd1bWVudCBtdWx0aXBsZSB0aW1lcy4gIChUaGUgYWx0ZXJuYXRpdmUKLXdvdWxkIGJlIHRvIG1hY2UgaXQgYSBwcm9wZXIgZnVuY3Rpb24gb3IgYXNzaWduIGl0IHRvIGEgZ2xvYmFsIHRlbXBvcmFyeQotdmFyaWFibGUgZmlyc3QsIGJvdGggb2Ygd2hpY2ggYXJlIHNsb3dlcjsgYW5kIGluIGEgbXVsdGktdGhyZWFkZWQKLWVudmlyb25tZW50IHRoZSBnbG9iYWwgdmFyaWFibGUgdHJpY2sgaXMgbm90IHNhZmUuKQogKi8KIAogLyogRmlyc3QgZGVmaW5lIGEgcGlsZSBvZiBzaW1wbGUgaGVscGVyIG1hY3Jvcywgb25lIHNldCBwZXIgc3BlY2lhbApAQCAtNzA0LDcgKzY5MSw2IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeV9OZWdhdGl2ZVJlZmNvdW50KGNvbnN0IGNoYXIgKmZuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBQeU9iamVjdCAqb3ApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0R1bW15KHZvaWQpOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXkodm9pZCk7CiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeV9HZXRSZWZUb3RhbCh2b2lkKTsKICNkZWZpbmUgX1B5X0lOQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsKysKICNkZWZpbmUgX1B5X0RFQ19SRUZUT1RBTCAgICAgICAgX1B5X1JlZlRvdGFsLS0KQEAgLTc2NiwxNSArNzUyLDE2IEBACiAKICNkZWZpbmUgUHlfSU5DUkVGKG9wKSAoICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBfUHlfSU5DX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAoKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250KyspCisgICAgKChQeU9iamVjdCAqKShvcCkpLT5vYl9yZWZjbnQrKykKIAogI2RlZmluZSBQeV9ERUNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKl9weV9kZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgICAgXAogICAgICAgICBpZiAoX1B5X0RFQ19SRUZUT1RBTCAgX1B5X1JFRl9ERUJVR19DT01NQSAgICAgICBcCi0gICAgICAgIC0tKChQeU9iamVjdCopKG9wKSktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgIFwKLSAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQob3ApICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAtLShfcHlfZGVjcmVmX3RtcCktPm9iX3JlZmNudCAhPSAwKSAgICAgICAgICAgICBcCisgICAgICAgICAgICBfUHlfQ0hFQ0tfUkVGQ05UKF9weV9kZWNyZWZfdG1wKSAgICAgICAgICAgIFwKICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfUHlfRGVhbGxvYygoUHlPYmplY3QgKikob3ApKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9QeV9EZWFsbG9jKF9weV9kZWNyZWZfdG1wKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAvKiBTYWZlbHkgZGVjcmVmIGBvcGAgYW5kIHNldCBgb3BgIHRvIE5VTEwsIGVzcGVjaWFsbHkgdXNlZnVsIGluIHRwX2NsZWFyCkBAIC04MTMsMTYgKzgwMCwyNyBAQAogICovCiAjZGVmaW5lIFB5X0NMRUFSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChvcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgXAorICAgICAgICBpZiAoX3B5X3RtcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKG9wKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGluY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGluY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoX3B5X3hpbmNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQeV9YREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hkZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hkZWNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKF9weV94ZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCBjNmI3ZGY0Li45YTI3ZWMzIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtOTQsNTEgKzk0LDI3IEBACiAgICB0aGUgb2JqZWN0IGdldHMgaW5pdGlhbGl6ZWQgdmlhIFB5T2JqZWN0X3tJbml0LCBJbml0VmFyfSBhZnRlciBvYnRhaW5pbmcKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKTsKIAorLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpOwogCiAvKiBNYWNyb3MgKi8KICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYgLyogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLwotI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKKyNlbmRpZgogCi0jZWxzZSAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgISBQWU1BTExPQ19ERUJVRyAqLworLyogTWFjcm9zICovCiAjZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5T2JqZWN0X01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU9iamVjdF9SZWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNlbmRpZgotCi0jZWxzZSAgIC8qICEgV0lUSF9QWU1BTExPQyAqLwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU1lbV9NQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlNZW1fUkVBTExPQwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU1lbV9GUkVFCi0KLSNlbmRpZiAgLyogV0lUSF9QWU1BTExPQyAqLwotCiAjZGVmaW5lIFB5T2JqZWN0X0RlbCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCisKIAogLyoKICAqIEdlbmVyaWMgb2JqZWN0IGFsbG9jYXRvciBpbnRlcmZhY2UKQEAgLTIyMiw2ICsxOTgsMjYgQEAKICAgIGNvbnN0cnVjdG9yIHlvdSB3b3VsZCBzdGFydCBkaXJlY3RseSB3aXRoIFB5T2JqZWN0X0luaXQvSW5pdFZhcgogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAyIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgKi8KKyAgICB2b2lkKiAoKmFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBmcmVlIGFuIGFyZW5hICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworfSBQeU9iamVjdEFyZW5hQWxsb2NhdG9yOworCisvKiBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisjZW5kaWYKKworCiAvKgogICogR2FyYmFnZSBDb2xsZWN0aW9uIFN1cHBvcnQKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsNiArMjI2LDEwIEBACiAvKiBDIGVxdWl2YWxlbnQgb2YgZ2MuY29sbGVjdCgpLiAqLwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeUdDX0NvbGxlY3Qodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUZXN0IGlmIGEgdHlwZSBoYXMgYSBHQyBoZWFkICovCiAjZGVmaW5lIFB5VHlwZV9JU19HQyh0KSBQeVR5cGVfSGFzRmVhdHVyZSgodCksIFB5X1RQRkxBR1NfSEFWRV9HQykKIApAQCAtMjQ5LDEzICsyNDksMzcgQEAKICAgICAgICAgdW5pb24gX2djX2hlYWQgKmdjX3ByZXY7CiAgICAgICAgIFB5X3NzaXplX3QgZ2NfcmVmczsKICAgICB9IGdjOwotICAgIGxvbmcgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KKyAgICBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLwogfSBQeUdDX0hlYWQ7CiAKIGV4dGVybiBQeUdDX0hlYWQgKl9QeUdDX2dlbmVyYXRpb24wOwogCiAjZGVmaW5lIF9QeV9BU19HQyhvKSAoKFB5R0NfSGVhZCAqKShvKS0xKQogCisvKiBCaXQgMCBpcyBzZXQgd2hlbiB0cF9maW5hbGl6ZSBpcyBjYWxsZWQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCAgKDEgPDwgMCkKKy8qIFRoZSAoTi0xKSBtb3N0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUgZ2Mgc3RhdGUgLyByZWZjb3VudCAqLworI2RlZmluZSBfUHlHQ19SRUZTX1NISUZUICAgICAgICAgICAoMSkKKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLICAgICAgICAgICAgKCgoc2l6ZV90KSAtMSkgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfUkVGUyhnKSAoKGcpLT5nYy5nY19yZWZzID4+IF9QeUdDX1JFRlNfU0hJRlQpCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCB2KSBkbyB7IFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTSykgXAorICAgICAgICB8ICh2IDw8IF9QeUdDX1JFRlNfU0hJRlQpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5R0NIZWFkX0RFQ1JFRihnKSAoKGcpLT5nYy5nY19yZWZzIC09IDEgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfRklOQUxJWkVEKGcpICgoKGcpLT5nYy5nY19yZWZzICYgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgIT0gMCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZywgdikgZG8geyAgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgXAorICAgICAgICB8ICh2ICE9IDApOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfUHlHQ19GSU5BTElaRUQobykgX1B5R0NIZWFkX0ZJTkFMSVpFRChfUHlfQVNfR0MobykpCisjZGVmaW5lIF9QeUdDX1NFVF9GSU5BTElaRUQobywgdikgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pLCB2KQorCisjZGVmaW5lIF9QeUdDX1JFRlMobykgX1B5R0NIZWFkX1JFRlMoX1B5X0FTX0dDKG8pKQorCiAjZGVmaW5lIF9QeUdDX1JFRlNfVU5UUkFDS0VEICAgICAgICAgICAgICAgICAgICAoLTIpCiAjZGVmaW5lIF9QeUdDX1JFRlNfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICAoLTMpCiAjZGVmaW5lIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICAoLTQpCkBAIC0yNjQsOSArMjg4LDkgQEAKICAqIGNvbGxlY3RvciBpdCBtdXN0IGJlIHNhZmUgdG8gY2FsbCB0aGUgb2JfdHJhdmVyc2UgbWV0aG9kLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgaWYgKGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKKyAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiR0Mgb2JqZWN0IGFscmVhZHkgdHJhY2tlZCIpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfUkVBQ0hBQkxFOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfUkVBQ0hBQkxFKTsgXAogICAgIGctPmdjLmdjX25leHQgPSBfUHlHQ19nZW5lcmF0aW9uMDsgXAogICAgIGctPmdjLmdjX3ByZXYgPSBfUHlHQ19nZW5lcmF0aW9uMC0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnOyBcCkBAIC0yNzksOCArMzAzLDggQEAKICAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVU5UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBhc3NlcnQoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19VTlRSQUNLRUQ7IFwKKyAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnLT5nYy5nY19uZXh0OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dC0+Z2MuZ2NfcHJldiA9IGctPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXApAQCAtMjg4LDcgKzMxMiw3IEBACiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgdHJhY2tlZCBieSB0aGUgR0MuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG8pIFwKLSAgICAoKF9QeV9BU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCisgICAgKF9QeUdDX1JFRlMobykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBtYXkgYmUgdHJhY2tlZCBieSB0aGUgR0MgaW4gdGhlIGZ1dHVyZSwgb3IgYWxyZWFkeSBpcy4KICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc29tZSBvcHRpbWl6YXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggYTkwMTg0ZC4uMDkzNmYyZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIEJJTkFSWV9PUiAgICAgICA2NgogI2RlZmluZSBJTlBMQUNFX1BPV0VSICAgNjcKICNkZWZpbmUgR0VUX0lURVIgICAgICAgIDY4Ci0jZGVmaW5lIFNUT1JFX0xPQ0FMUyAgICA2OQogI2RlZmluZSBQUklOVF9FWFBSICAgICAgNzAKICNkZWZpbmUgTE9BRF9CVUlMRF9DTEFTUyA3MQogI2RlZmluZSBZSUVMRF9GUk9NICAgICAgNzIKQEAgLTE0MCw2ICsxMzksNyBAQAogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CiAjZGVmaW5lIE1BUF9BREQgICAgICAgICAxNDcKIAorI2RlZmluZSBMT0FEX0NMQVNTREVSRUYgICAxNDgKIAogLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgogICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL29zZGVmcy5oIGIvSW5jbHVkZS9vc2RlZnMuaAppbmRleCAwNWMwYzhlLi4wYzJlMzRiIDEwMDY0NAotLS0gYS9JbmNsdWRlL29zZGVmcy5oCisrKyBiL0luY2x1ZGUvb3NkZWZzLmgKQEAgLTksMTYgKzksMTAgQEAKIAogLyogTW9kIGJ5IGNocmlzaDogUU5YIGhhcyBXQVRDT00sIGJ1dCBpc24ndCBET1MgKi8KICNpZiAhZGVmaW5lZChfX1FOWF9fKQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFBZT1NfT1MyKQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE1BWFBBVEhMRU4gMjYwCi0jZGVmaW5lIFNFUCBMJy8nCi0jZGVmaW5lIEFMVFNFUCBMJ1xcJwotI2Vsc2UKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKICNkZWZpbmUgU0VQIEwnXFwnCiAjZGVmaW5lIEFMVFNFUCBMJy8nCiAjZGVmaW5lIE1BWFBBVEhMRU4gMjU2Ci0jZW5kaWYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGFyc2V0b2suaCBiL0luY2x1ZGUvcGFyc2V0b2suaAppbmRleCA5MTFkZmMxLi4yYWNiODU0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhcnNldG9rLmgKKysrIGIvSW5jbHVkZS9wYXJzZXRvay5oCkBAIC0zOCwyOSArMzgsNDkgQEAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgcGVycmRldGFpbCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBjb25zdCBjaGFyICplbmMsCiAgICAgZ3JhbW1hciAqZywKICAgICBpbnQgc3RhcnQsCi0gICAgY2hhciAqcHMxLAotICAgIGNoYXIgKnBzMiwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOwogCi1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeCgKICAgICBjb25zdCBjaGFyICpzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY4LDYgKzg4LDEzIEBACiAgICAgaW50IHN0YXJ0LAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKIAogLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHB5dGhvbnJ1bi5jLAogICAgbm90IGluIHBhcnNldG9rLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKaW5kZXggMDU0YjllYi4uZTZjOThlNCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXRjaGxldmVsLmgKKysrIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKQEAgLTE3LDEzICsxNywxMyBAQAogLyogVmVyc2lvbiBwYXJzZWQgb3V0IGludG8gbnVtZXJpYyB2YWx1ZXMgKi8KIC8qLS1zdGFydCBjb25zdGFudHMtLSovCiAjZGVmaW5lIFBZX01BSk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgkzCi0jZGVmaW5lIFBZX1JFTEVBU0VfTEVWRUwJUFlfUkVMRUFTRV9MRVZFTF9GSU5BTAotI2RlZmluZSBQWV9SRUxFQVNFX1NFUklBTAkwCisjZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAorI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTAKKyNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0JFVEEKKyNkZWZpbmUgUFlfUkVMRUFTRV9TRVJJQUwJMQogCiAvKiBWZXJzaW9uIGFzIGEgc3RyaW5nICovCi0jZGVmaW5lIFBZX1ZFUlNJT04gICAgICAJIjMuMy4zKyIKKyNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMy40LjBiMSIKIC8qLS1lbmQgY29uc3RhbnRzLS0qLwogCiAvKiBWZXJzaW9uIGFzIGEgc2luZ2xlIDQtYnl0ZSBoZXggbnVtYmVyLCBlLmcuIDB4MDEwNTAyQjIgPT0gMS41LjJiMi4KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlkZWJ1Zy5oIGIvSW5jbHVkZS9weWRlYnVnLmgKaW5kZXggOTdjMmY4Yy4uOGZlOTgxOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWRlYnVnLmgKKysrIGIvSW5jbHVkZS9weWRlYnVnLmgKQEAgLTIwLDYgKzIwLDcgQEAKIFB5QVBJX0RBVEEoaW50KSBQeV9Ob1VzZXJTaXRlRGlyZWN0b3J5OwogUHlBUElfREFUQShpbnQpIFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnOworUHlBUElfREFUQShpbnQpIFB5X0lzb2xhdGVkRmxhZzsKIAogLyogdGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIGdldGVudigpIHRoYXQgcGF5cyBhdHRlbnRpb24gdG8KICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZy4gIEl0IHNob3VsZCBiZSB1c2VkIGZvciBnZXR0aW5nIHZhcmlhYmxlcyBsaWtlCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5ZXJyb3JzLmggYi9JbmNsdWRlL3B5ZXJyb3JzLmgKaW5kZXggZTM4NTEyMy4uNmE4ZTBlOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWVycm9ycy5oCisrKyBiL0luY2x1ZGUvcHllcnJvcnMuaApAQCAtNzUsNiArNzUsNyBAQAogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldE9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RXJyX1NldEtleUVycm9yKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRTdHJpbmcoCiAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKICAgICBjb25zdCBjaGFyICpzdHJpbmcgICAvKiBkZWNvZGVkIGZyb20gdXRmLTggKi8KQEAgLTI4NCw2ICsyODUsMjggQEAKICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShQeU9iamVjdCAqKTsKIAorLyogSW4gZXhjZXB0aW9ucy5jICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisvKiBIZWxwZXIgdGhhdCBhdHRlbXB0cyB0byByZXBsYWNlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiB3aXRoIG9uZSBvZiB0aGUKKyAqIHNhbWUgdHlwZSBidXQgd2l0aCBhIHByZWZpeCBhZGRlZCB0byB0aGUgZXhjZXB0aW9uIHRleHQuIFRoZSByZXN1bHRpbmcKKyAqIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbiBsb29rcyBsaWtlOgorICoKKyAqICAgICBwcmVmaXggKGV4Y190eXBlOiBvcmlnaW5hbF9leGNfc3RyKQorICoKKyAqIE9ubHkgc29tZSBleGNlcHRpb25zIGNhbiBiZSBzYWZlbHkgcmVwbGFjZWQuIElmIHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzCisgKiBpdCBpc24ndCBzYWZlIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50LCBpdCB3aWxsIGxlYXZlIHRoZSBvcmlnaW5hbAorICogdW5tb2RpZmllZCBleGNlcHRpb24gaW4gcGxhY2UuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKAorICAgIGNvbnN0IGNoYXIgKnByZWZpeF9mb3JtYXQsICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgICovCisgICAgLi4uCisgICAgKTsKKyNlbmRpZgorCisKIC8qIEluIHNpZ2NoZWNrLmMgb3Igc2lnbmFsbW9kdWxlLmMgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9DaGVja1NpZ25hbHModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldEludGVycnVwdCh2b2lkKTsKQEAgLTMwMSw5ICszMjQsMTYgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubywKICAgICBpbnQgY29sX29mZnNldCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vLAorICAgIGludCBjb2xfb2Zmc2V0KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfUHJvZ3JhbVRleHQoCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBsaW5lbm8pOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdCgKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubyk7CiAKIC8qIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbW9kaWZ5IHVuaWNvZGUKICAgIGV4Y2VwdGlvbnMgZnJvbSBDICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5aGFzaC5oIGIvSW5jbHVkZS9weWhhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M5MjgxCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWhhc2guaApAQCAtMCwwICsxLDE0NyBAQAorI2lmbmRlZiBQeV9IQVNIX0gKKworI2RlZmluZSBQeV9IQVNIX0gKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogSGVscGVycyBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaERvdWJsZShkb3VibGUpOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoUG9pbnRlcih2b2lkKik7CitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkKiwgUHlfc3NpemVfdCk7CisjZW5kaWYKKworLyogUHJpbWUgbXVsdGlwbGllciB1c2VkIGluIHN0cmluZyBhbmQgdmFyaW91cyBvdGhlciBoYXNoZXMuICovCisjZGVmaW5lIF9QeUhBU0hfTVVMVElQTElFUiAxMDAwMDAzVUwgIC8qIDB4ZjQyNDMgKi8KKworLyogUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgbnVtZXJpYyBoYXNoIGltcGxlbWVudGF0aW9uLiAgU2VlIG5vdGVzIGZvcgorICAgX1B5X0hhc2hEb3VibGUgaW4gT2JqZWN0cy9vYmplY3QuYy4gIE51bWVyaWMgaGFzaGVzIGFyZSBiYXNlZCBvbgorICAgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWUgMioqX1B5SEFTSF9CSVRTIC0gMS4gKi8KKworI2lmIFNJWkVPRl9WT0lEX1AgPj0gOAorIyAgZGVmaW5lIF9QeUhBU0hfQklUUyA2MQorI2Vsc2UKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgMzEKKyNlbmRpZgorCisjZGVmaW5lIF9QeUhBU0hfTU9EVUxVUyAoKChzaXplX3QpMSA8PCBfUHlIQVNIX0JJVFMpIC0gMSkKKyNkZWZpbmUgX1B5SEFTSF9JTkYgMzE0MTU5CisjZGVmaW5lIF9QeUhBU0hfTkFOIDAKKyNkZWZpbmUgX1B5SEFTSF9JTUFHIF9QeUhBU0hfTVVMVElQTElFUgorCisKKy8qIGhhc2ggc2VjcmV0CisgKgorICogbWVtb3J5IGxheW91dCBvbiA2NCBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMgLS0gdW5zaWduZWQgY2hhclsyNF0KKyAqICAgcHBwcHBwcHAgc3Nzc3Nzc3MgLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBzc3Nzc3NzcyAgZGpieDMzYSAtLSAxNiBieXRlcyBwYWRkaW5nICsgb25lIFB5X2hhc2hfdAorICogICAuLi4uLi4uLiAuLi4uLi4uLiBlZWVlZWVlZSAgcHlleHBhdCBYTUwgaGFzaCBzYWx0CisgKgorICogbWVtb3J5IGxheW91dCBvbiAzMiBiaXQgc3lzdGVtcworICogICBjY2NjY2NjYyBjY2NjY2NjYyBjY2NjY2NjYyAgdWMKKyAqICAgcHBwcHNzc3MgLi4uLi4uLi4gLi4uLi4uLi4gIGZudiAtLSB0d28gUHlfaGFzaF90CisgKiAgIGswazBrMGswIGsxazFrMWsxIC4uLi4uLi4uICBzaXBoYXNoIC0tIHR3byBQWV9VSU5UNjRfVCAoKikKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzcy4uLi4gIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZS4uLi4gIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqICgqKSBUaGUgc2lwaGFzaCBtZW1iZXIgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gMzIgYml0IHBsYXRmb3JtcyB3aXRob3V0CisgKiAgICAgYW4gdW5zaWduZWQgaW50NjQgZGF0YSB0eXBlLgorICovCit0eXBlZGVmIHVuaW9uIHsKKyAgICAvKiBlbnN1cmUgMjQgYnl0ZXMgKi8KKyAgICB1bnNpZ25lZCBjaGFyIHVjWzI0XTsKKyAgICAvKiB0d28gUHlfaGFzaF90IGZvciBGTlYgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBQeV9oYXNoX3QgcHJlZml4OworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZm52OworI2lmZGVmIFBZX1VJTlQ2NF9UCisgICAgLyogdHdvIHVpbnQ2NCBmb3IgU2lwSGFzaDI0ICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUFlfVUlOVDY0X1QgazA7CisgICAgICAgIFBZX1VJTlQ2NF9UIGsxOworICAgIH0gc2lwaGFzaDsKKyNlbmRpZgorICAgIC8qIGEgZGlmZmVyZW50ICghKSBQeV9oYXNoX3QgZm9yIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24gKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3Qgc3VmZml4OworICAgIH0gZGpieDMzYTsKKyAgICBzdHJ1Y3QgeworICAgICAgICB1bnNpZ25lZCBjaGFyIHBhZGRpbmdbMTZdOworICAgICAgICBQeV9oYXNoX3QgaGFzaHNhbHQ7CisgICAgfSBleHBhdDsKK30gX1B5X0hhc2hTZWNyZXRfdDsKK1B5QVBJX0RBVEEoX1B5X0hhc2hTZWNyZXRfdCkgX1B5X0hhc2hTZWNyZXQ7CisKKyNpZmRlZiBQeV9ERUJVRworUHlBUElfREFUQShpbnQpIF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkOworI2VuZGlmCisKKworLyogaGFzaCBmdW5jdGlvbiBkZWZpbml0aW9uICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfaGFzaF90ICgqY29uc3QgaGFzaCkoY29uc3Qgdm9pZCAqLCBQeV9zc2l6ZV90KTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGludCBoYXNoX2JpdHM7CisgICAgY29uc3QgaW50IHNlZWRfYml0czsKK30gUHlIYXNoX0Z1bmNEZWY7CisKK1B5QVBJX0ZVTkMoUHlIYXNoX0Z1bmNEZWYqKSBQeUhhc2hfR2V0RnVuY0RlZih2b2lkKTsKKyNlbmRpZgorCisKKy8qIGN1dG9mZiBmb3Igc21hbGwgc3RyaW5nIERKQlgzM0Egb3B0aW1pemF0aW9uIGluIHJhbmdlIFsxLCBjdXRvZmYpLgorICoKKyAqIEFib3V0IDUwJSBvZiB0aGUgc3RyaW5ncyBpbiBhIHR5cGljYWwgUHl0aG9uIGFwcGxpY2F0aW9uIGFyZSBzbWFsbGVyIHRoYW4KKyAqIDYgdG8gNyBjaGFycy4gSG93ZXZlciBESkJYMzNBIGlzIHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb24gYXR0YWNrcy4KKyAqIE5FVkVSIHVzZSBESkJYMzNBIGZvciBsb25nIHN0cmluZ3MhCisgKgorICogQSBQeV9IQVNIX0NVVE9GRiBvZiAwIGRpc2FibGVzIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24uIDMyIGJpdCBwbGF0Zm9ybXMKKyAqIHNob3VsZCB1c2UgYSBzbWFsbGVyIGN1dG9mZiBiZWNhdXNlIGl0IGlzIGVhc2llciB0byBjcmVhdGUgY29sbGlkaW5nCisgKiBzdHJpbmdzLiBBIGN1dG9mZiBvZiA3IG9uIDY0Yml0IHBsYXRmb3JtcyBhbmQgNSBvbiAzMmJpdCBwbGF0Zm9ybXMgc2hvdWxkCisgKiBwcm92aWRlIGEgZGVjZW50IHNhZmV0eSBtYXJnaW4uCisgKi8KKyNpZm5kZWYgUHlfSEFTSF9DVVRPRkYKKyMgIGRlZmluZSBQeV9IQVNIX0NVVE9GRiAwCisjZWxpZiAoUHlfSEFTSF9DVVRPRkYgPiA3IHx8IFB5X0hBU0hfQ1VUT0ZGIDwgMCkKKyMgIGVycm9yIFB5X0hBU0hfQ1VUT0ZGIG11c3QgaW4gcmFuZ2UgMC4uLjcuCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKworCisvKiBoYXNoIGFsZ29yaXRobSBzZWxlY3Rpb24KKyAqCisgKiBUaGUgdmFsdWVzIGZvciBQeV9IQVNIX1NJUEhBU0gyNCBhbmQgUHlfSEFTSF9GTlYgYXJlIGhhcmQtY29kZWQgaW4gdGhlCisgKiBjb25maWd1cmUgc2NyaXB0LgorICoKKyAqIC0gRk5WIGlzIGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zIGFuZCBhcmNoaXRlY3R1cmVzLgorICogLSBTSVBIQVNIMjQgb25seSB3b3JrcyBvbiBwbGFmb3JtcyB0aGF0IHByb3ZpZGUgUFlfVUlOVDY0X1QgYW5kIGRvZXNuJ3QKKyAqICAgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBmb3IgaW50ZWdlcnMuCisgKiAtIFdpdGggRVhURVJOQUwgZW1iZWRkZXJzIGNhbiBwcm92aWRlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHdpdGg6OgorICoKKyAqICAgICBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHsuLi59OworICoKKyAqIFhYWDogRmlndXJlIG91dCBfX2RlY2xzcGVjKCkgZm9yIGV4dGVybiBQeUhhc2hfRnVuY0RlZi4KKyAqLworI2RlZmluZSBQeV9IQVNIX0VYVEVSTkFMIDAKKyNkZWZpbmUgUHlfSEFTSF9TSVBIQVNIMjQgMQorI2RlZmluZSBQeV9IQVNIX0ZOViAyCisKKyNpZm5kZWYgUHlfSEFTSF9BTEdPUklUSE0KKyMgIGlmIChkZWZpbmVkKFBZX1VJTlQ2NF9UKSAmJiBkZWZpbmVkKFBZX1VJTlQzMl9UKSBcCisgICAgICAgJiYgIWRlZmluZWQoSEFWRV9BTElHTkVEX1JFUVVJUkVEKSkKKyMgICAgZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIFB5X0hBU0hfU0lQSEFTSDI0CisjICBlbHNlCisjICAgIGRlZmluZSBQeV9IQVNIX0FMR09SSVRITSBQeV9IQVNIX0ZOVgorIyAgZW5kaWYgLyogdWludDY0X3QgJiYgdWludDMyX3QgJiYgYWxpZ25lZCAqLworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhUHlfSEFTSF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uODNmMTUzNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisKKwogLyogQkVXQVJFOgogCiAgICBFYWNoIGludGVyZmFjZSBleHBvcnRzIGJvdGggZnVuY3Rpb25zIGFuZCBtYWNyb3MuICBFeHRlbnNpb24gbW9kdWxlcyBzaG91bGQKQEAgLTQ5LDIxICs1NCwxNCBAQAogICAgcGVyZm9ybWVkIG9uIGZhaWx1cmUgKG5vIGV4Y2VwdGlvbiBpcyBzZXQsIG5vIHdhcm5pbmcgaXMgcHJpbnRlZCwgZXRjKS4KICovCiAKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX0ZyZWUodm9pZCAqcHRyKTsKIAotLyogU3RhcnRpbmcgZnJvbSBQeXRob24gMS42LCB0aGUgd3JhcHBlcnMgUHlfe01hbGxvYyxSZWFsbG9jLEZyZWV9IGFyZQotICAgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gVGhleSB1c2VkIHRvIGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBmYWlsdXJlLiAqLworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9SYXdTdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKK1B5QVBJX0ZVTkMoY2hhciAqKSBfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cik7CiAKIC8qIE1hY3Jvcy4gKi8KLSNpZmRlZiBQWU1BTExPQ19ERUJVRwotLyogUmVkaXJlY3QgYWxsIG1lbW9yeSBvcGVyYXRpb25zIHRvIFB5dGhvbidzIGRlYnVnZ2luZyBhbGxvY2F0b3IuICovCi0jZGVmaW5lIFB5TWVtX01BTExPQwkJX1B5TWVtX0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MJCV9QeU1lbV9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlNZW1fRlJFRQkJX1B5TWVtX0RlYnVnRnJlZQotCi0jZWxzZQkvKiAhIFBZTUFMTE9DX0RFQlVHICovCiAKIC8qIFB5TWVtX01BTExPQygwKSBtZWFucyBtYWxsb2MoMSkuIFNvbWUgc3lzdGVtcyB3b3VsZCByZXR1cm4gTlVMTAogICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMKQEAgLTcxLDEzICs2OSw5IEBACiAgICBweW1hbGxvYy4gVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCiAvKiBSZXR1cm5zIE5VTEwgdG8gaW5kaWNhdGUgZXJyb3IgaWYgYSBuZWdhdGl2ZSBzaXplIG9yIHNpemUgbGFyZ2VyIHRoYW4KICAgIFB5X3NzaXplX3QgY2FuIHJlcHJlc2VudCBpcyBzdXBwbGllZC4gIEhlbHBzIHByZXZlbnRzIHNlY3VyaXR5IGhvbGVzLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MobikJCSgoc2l6ZV90KShuKSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggPyBOVUxMIFwKLQkJCQk6IG1hbGxvYygobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYICA/IE5VTEwgXAotCQkJCTogcmVhbGxvYygocCksIChuKSA/IChuKSA6IDEpKQotI2RlZmluZSBQeU1lbV9GUkVFCQlmcmVlCi0KLSNlbmRpZgkvKiBQWU1BTExPQ19ERUJVRyAqLworI2RlZmluZSBQeU1lbV9NQUxMT0MobikgICAgICAgICBQeU1lbV9NYWxsb2MobikKKyNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKSAgICAgUHlNZW1fUmVhbGxvYyhwLCBuKQorI2RlZmluZSBQeU1lbV9GUkVFKHApICAgICAgICAgICBQeU1lbV9GcmVlKHApCiAKIC8qCiAgKiBUeXBlLW9yaWVudGVkIG1lbW9yeSBpbnRlcmZhY2UKQEAgLTExNSw2ICsxMDksNjkgQEAKICNkZWZpbmUgUHlNZW1fRGVsCQlQeU1lbV9GcmVlCiAjZGVmaW5lIFB5TWVtX0RFTAkJUHlNZW1fRlJFRQogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIGVudW0geworICAgIC8qIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9SQVcsCisKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpIGFuZCBQeU1lbV9GcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fTUVNLAorCisgICAgLyogUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX09CSgorfSBQeU1lbUFsbG9jYXRvckRvbWFpbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAzIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCogKCptYWxsb2MpICh2b2lkICpjdHgsIHNpemVfdCBzaXplKTsKKworICAgIC8qIGFsbG9jYXRlIG9yIHJlc2l6ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqcmVhbGxvYykgKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworCisgICAgLyogcmVsZWFzZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQgKCpmcmVlKSAodm9pZCAqY3R4LCB2b2lkICpwdHIpOworfSBQeU1lbUFsbG9jYXRvcjsKKworLyogR2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9HZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcik7CisKKy8qIFNldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4KKworICAgVGhlIG5ldyBhbGxvY2F0b3IgbXVzdCByZXR1cm4gYSBkaXN0aW5jdCBub24tTlVMTCBwb2ludGVyIHdoZW4gcmVxdWVzdGluZworICAgemVybyBieXRlcy4KKworICAgRm9yIHRoZSBQWU1FTV9ET01BSU5fUkFXIGRvbWFpbiwgdGhlIGFsbG9jYXRvciBtdXN0IGJlIHRocmVhZC1zYWZlOiB0aGUgR0lMCisgICBpcyBub3QgaGVsZCB3aGVuIHRoZSBhbGxvY2F0b3IgaXMgY2FsbGVkLgorCisgICBJZiB0aGUgbmV3IGFsbG9jYXRvciBpcyBub3QgYSBob29rIChkb24ndCBjYWxsIHRoZSBwcmV2aW91cyBhbGxvY2F0b3IpLCB0aGUKKyAgIFB5TWVtX1NldHVwRGVidWdIb29rcygpIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHRvIHJlaW5zdGFsbCB0aGUgZGVidWcgaG9va3MKKyAgIG9uIHRvcCBvbiB0aGUgbmV3IGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXR1cCBob29rcyB0byBkZXRlY3QgYnVncyBpbiB0aGUgZm9sbG93aW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9yCisgICBmdW5jdGlvbnM6CisKKyAgIC0gUHlNZW1fUmF3TWFsbG9jKCksIFB5TWVtX1Jhd1JlYWxsb2MoKSwgUHlNZW1fUmF3RnJlZSgpCisgICAtIFB5TWVtX01hbGxvYygpLCBQeU1lbV9SZWFsbG9jKCksIFB5TWVtX0ZyZWUoKQorICAgLSBQeU9iamVjdF9NYWxsb2MoKSwgUHlPYmplY3RfUmVhbGxvYygpIGFuZCBQeU9iamVjdF9GcmVlKCkKKworICAgTmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB0aGUgYnl0ZSAweENCLCBmcmVlZCBtZW1vcnkgaXMgZmlsbGVkCisgICB3aXRoIHRoZSBieXRlIDB4REIuIEFkZGl0aW9ubmFsIGNoZWNrczoKKworICAgLSBkZXRlY3QgQVBJIHZpb2xhdGlvbnMsIGV4OiBQeU9iamVjdF9GcmVlKCkgY2FsbGVkIG9uIGEgYnVmZmVyIGFsbG9jYXRlZAorICAgICBieSBQeU1lbV9NYWxsb2MoKQorICAgLSBkZXRlY3Qgd3JpdGUgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIChidWZmZXIgdW5kZXJmbG93KQorICAgLSBkZXRlY3Qgd3JpdGUgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgYnVmZmVyIChidWZmZXIgb3ZlcmZsb3cpCisKKyAgIFRoZSBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgUHl0aG9uIGlzIG5vdCBjb21waWxlZCBpcyBkZWJ1ZyBtb2RlLiAqLworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9TZXR1cERlYnVnSG9va3Modm9pZCk7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlwb3J0LmggYi9JbmNsdWRlL3B5cG9ydC5oCmluZGV4IGE1ZWRlYTkuLmM3MDYyMTMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlwb3J0LmgKKysrIGIvSW5jbHVkZS9weXBvcnQuaApAQCAtMTQ0LDIzICsxNDQsNiBAQAogI2VuZGlmCiAjZW5kaWYKIAotLyogUHJpbWUgbXVsdGlwbGllciB1c2VkIGluIHN0cmluZyBhbmQgdmFyaW91cyBvdGhlciBoYXNoZXMuICovCi0jZGVmaW5lIF9QeUhBU0hfTVVMVElQTElFUiAxMDAwMDAzVUwgIC8qIDB4ZjQyNDMgKi8KLQotLyogUGFyYW1ldGVycyB1c2VkIGZvciB0aGUgbnVtZXJpYyBoYXNoIGltcGxlbWVudGF0aW9uLiAgU2VlIG5vdGVzIGZvcgotICAgX1B5X0hhc2hEb3VibGUgaW4gT2JqZWN0cy9vYmplY3QuYy4gIE51bWVyaWMgaGFzaGVzIGFyZSBiYXNlZCBvbgotICAgcmVkdWN0aW9uIG1vZHVsbyB0aGUgcHJpbWUgMioqX1B5SEFTSF9CSVRTIC0gMS4gKi8KLQotI2lmIFNJWkVPRl9WT0lEX1AgPj0gOAotI2RlZmluZSBfUHlIQVNIX0JJVFMgNjEKLSNlbHNlCi0jZGVmaW5lIF9QeUhBU0hfQklUUyAzMQotI2VuZGlmCi0jZGVmaW5lIF9QeUhBU0hfTU9EVUxVUyAoKChzaXplX3QpMSA8PCBfUHlIQVNIX0JJVFMpIC0gMSkKLSNkZWZpbmUgX1B5SEFTSF9JTkYgMzE0MTU5Ci0jZGVmaW5lIF9QeUhBU0hfTkFOIDAKLSNkZWZpbmUgX1B5SEFTSF9JTUFHIF9QeUhBU0hfTVVMVElQTElFUgotCiAvKiB1aW50cHRyX3QgaXMgdGhlIEM5WCBuYW1lIGZvciBhbiB1bnNpZ25lZCBpbnRlZ3JhbCB0eXBlIHN1Y2ggdGhhdCBhCiAgKiBsZWdpdGltYXRlIHZvaWQqIGNhbiBiZSBjYXN0IHRvIHVpbnRwdHJfdCBhbmQgdGhlbiBiYWNrIHRvIHZvaWQqIGFnYWluCiAgKiB3aXRob3V0IGxvc3Mgb2YgaW5mb3JtYXRpb24uICBTaW1pbGFybHkgZm9yIGludHB0cl90LCB3cnQgYSBzaWduZWQKQEAgLTE5OSwxMCArMTgyLDE5IEBACiAjZW5kaWYKIAogLyogUHlfaGFzaF90IGlzIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyLiAqLworI2RlZmluZSBTSVpFT0ZfUFlfSEFTSF9UIFNJWkVPRl9TSVpFX1QKIHR5cGVkZWYgUHlfc3NpemVfdCBQeV9oYXNoX3Q7CiAvKiBQeV91aGFzaF90IGlzIHRoZSB1bnNpZ25lZCBlcXVpdmFsZW50IG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtZXJpYyBoYXNoLiAqLworI2RlZmluZSBTSVpFT0ZfUFlfVUhBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIHNpemVfdCBQeV91aGFzaF90OwogCisvKiBPbmx5IHVzZWQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBjb2RlIHRoYXQgbWF5IG5vdCBiZSBQWV9TU0laRV9UX0NMRUFOLiAqLworI2lmZGVmIFBZX1NTSVpFX1RfQ0xFQU4KK3R5cGVkZWYgUHlfc3NpemVfdCBQeV9zc2l6ZV9jbGVhbl90OworI2Vsc2UKK3R5cGVkZWYgaW50IFB5X3NzaXplX2NsZWFuX3Q7CisjZW5kaWYKKwogLyogTGFyZ2VzdCBwb3NzaWJsZSB2YWx1ZSBvZiBzaXplX3QuCiAgICBTSVpFX01BWCBpcyBwYXJ0IG9mIEM5OSwgc28gaXQgbWlnaHQgYmUgZGVmaW5lZCBvbiBzb21lCiAgICBwbGF0Zm9ybXMuIElmIGl0IGlzIG5vdCBkZWZpbmVkLCAoc2l6ZV90KS0xIGlzIGEgcG9ydGFibGUKQEAgLTIxOSwxMCArMjExLDYgQEAKIC8qIFNtYWxsZXN0IG5lZ2F0aXZlIHZhbHVlIG9mIHR5cGUgUHlfc3NpemVfdC4gKi8KICNkZWZpbmUgUFlfU1NJWkVfVF9NSU4gKC1QWV9TU0laRV9UX01BWC0xKQogCi0jaWYgU0laRU9GX1BJRF9UID4gU0laRU9GX0xPTkcKLSMgICBlcnJvciAiUHl0aG9uIGRvZXNuJ3Qgc3VwcG9ydCBzaXplb2YocGlkX3QpID4gc2l6ZW9mKGxvbmcpIgotI2VuZGlmCi0KIC8qIFBZX0ZPUk1BVF9TSVpFX1QgaXMgYSBwbGF0Zm9ybS1zcGVjaWZpYyBtb2RpZmllciBmb3IgdXNlIGluIGEgcHJpbnRmCiAgKiBmb3JtYXQgdG8gY29udmVydCBhbiBhcmd1bWVudCB3aXRoIHRoZSB3aWR0aCBvZiBhIHNpemVfdCBvciBQeV9zc2l6ZV90LgogICogQzk5IGludHJvZHVjZWQgInoiIGZvciB0aGlzIHB1cnBvc2UsIGJ1dCBub3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IHRoYXQ7CkBAIC0yNjcsNyArMjU1LDcgQEAKICAqLwogI2lmZGVmIEhBVkVfTE9OR19MT05HCiAjICAgaWZuZGVmIFBZX0ZPUk1BVF9MT05HX0xPTkcKLSMgICAgICAgaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorIyAgICAgICBpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgICAgICBkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyAiSTY0IgogIyAgICAgICBlbHNlCiAjICAgICAgICAgICBlcnJvciAiVGhpcyBwbGF0Zm9ybSdzIHB5Y29uZmlnLmggbmVlZHMgdG8gZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkciCkBAIC0zOTIsMTcgKzM4MCwyMCBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX0gpCiAjaW5jbHVkZSA8c3RhdC5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCisjaWZuZGVmIFNfSUZNVAogLyogVmlzdWFsQWdlIEMvQysrIEZhaWxlZCB0byBEZWZpbmUgTW91bnRUeXBlIEZpZWxkIGluIHN5cy9zdGF0LmggKi8KLSNkZWZpbmUgU19JRk1UIChTX0lGRElSfFNfSUZDSFJ8U19JRlJFRykKKyNkZWZpbmUgU19JRk1UIDAxNzAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZMTksKKy8qIFdpbmRvd3MgZG9lc24ndCBkZWZpbmUgU19JRkxOSyBidXQgcG9zaXhtb2R1bGUuYyBtYXBzCisgKiBJT19SRVBBUlNFX1RBR19TWU1MSU5LIHRvIFNfSUZMTksgKi8KKyMgIGRlZmluZSBTX0lGTE5LIDAxMjAwMDAKICNlbmRpZgogCiAjaWZuZGVmIFNfSVNSRUcKQEAgLTQxMyw2ICs0MDQsOSBAQAogI2RlZmluZSBTX0lTRElSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGRElSKQogI2VuZGlmCiAKKyNpZm5kZWYgU19JU0NIUgorI2RlZmluZSBTX0lTQ0hSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogLyogTW92ZSB0aGlzIGRvd24gaGVyZSBzaW5jZSBzb21lIEMrKyAjaW5jbHVkZSdzIGRvbid0IGxpa2UgdG8gYmUgaW5jbHVkZWQKQEAgLTgzNSwxNSArODI5LDYgQEAKICNlbmRpZgogCiAvKgotICogQWRkIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0IHdoZXJlIGF2YWlsYWJsZS4KLSAqLwotI2lmZGVmIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFCi0jZGVmaW5lIFB5X0ZPUk1BVF9QQVJTRVRVUExFKGZ1bmMscDEscDIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChmdW5jLHAxLHAyKSkpCi0jZWxzZQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKQotI2VuZGlmCi0KLS8qCiAgKiBTcGVjaWZ5IGFsaWdubWVudCBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IGl0LgogICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwpAQCAtODgxLDQgKzg2NiwxOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorLyoKKyAqIENvbnZlbmllbnQgbWFjcm9zIHRvIGRlYWwgd2l0aCBlbmRpYW5uZXNzIG9mIHRoZSBwbGF0Zm9ybS4gV09SRFNfQklHRU5ESUFOIGlzCisgKiBkZXRlY3RlZCBieSBjb25maWd1cmUgYW5kIGRlZmluZWQgaW4gcHljb25maWcuaC4gVGhlIGNvZGUgaW4gcHljb25maWcuaAorICogYWxzbyB0YWtlcyBjYXJlIG9mIEFwcGxlJ3MgdW5pdmVyc2FsIGJ1aWxkcy4KKyAqLworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMQorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDAKKyNlbHNlCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMAorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDEKKyNlbmRpZgorCiAjZW5kaWYgLyogUHlfUFlQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlzdGF0ZS5oIGIvSW5jbHVkZS9weXN0YXRlLmgKaW5kZXggMjAxN2IwMi4uMDZhZjgwOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXN0YXRlLmgKKysrIGIvSW5jbHVkZS9weXN0YXRlLmgKQEAgLTY5LDYgKzY5LDcgQEAKIHR5cGVkZWYgc3RydWN0IF90cyB7CiAgICAgLyogU2VlIFB5dGhvbi9jZXZhbC5jIGZvciBjb21tZW50cyBleHBsYWluaW5nIG1vc3QgZmllbGRzICovCiAKKyAgICBzdHJ1Y3QgX3RzICpwcmV2OwogICAgIHN0cnVjdCBfdHMgKm5leHQ7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAKQEAgLTk5LDE2ICsxMDAsNiBAQAogCiAgICAgUHlPYmplY3QgKmRpY3Q7ICAvKiBTdG9yZXMgcGVyLXRocmVhZCBzdGF0ZSAqLwogCi0gICAgLyogWFhYIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBhbnltb3JlICh0aGUgY29tbWVudCBiZWxvdyBpcyBvYnNvbGV0ZSkKLSAgICAgICA9PiBkZXByZWNhdGUgb3IgcmVtb3ZlPyAqLwotICAgIC8qIHRpY2tfY291bnRlciBpcyBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgY2hlY2tfaW50ZXJ2YWwgdGlja2VyCi0gICAgICogcmVhY2hlcyB6ZXJvLiBUaGUgcHVycG9zZSBpcyB0byBnaXZlIGEgdXNlZnVsIG1lYXN1cmUgb2YgdGhlIG51bWJlcgotICAgICAqIG9mIGludGVycHJldGVkIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBpbiBhIGdpdmVuIHRocmVhZC4gIFRoaXMKLSAgICAgKiBleHRyZW1lbHkgbGlnaHR3ZWlnaHQgc3RhdGlzdGljIGNvbGxlY3RvciBtYXkgYmUgb2YgaW50ZXJlc3QgdG8KLSAgICAgKiBwcm9maWxlcnMgKGxpa2UgcHN5Y28uaml0KCkpLCBhbHRob3VnaCBub3RoaW5nIGluIHRoZSBjb3JlIHVzZXMgaXQuCi0gICAgICovCi0gICAgaW50IHRpY2tfY291bnRlcjsKLQogICAgIGludCBnaWxzdGF0ZV9jb3VudGVyOwogCiAgICAgUHlPYmplY3QgKmFzeW5jX2V4YzsgLyogQXN5bmNocm9ub3VzIGV4Y2VwdGlvbiB0byByYWlzZSAqLwpAQCAtMTE3LDYgKzEwOCwzMiBAQAogICAgIGludCB0cmFzaF9kZWxldGVfbmVzdGluZzsKICAgICBQeU9iamVjdCAqdHJhc2hfZGVsZXRlX2xhdGVyOwogCisgICAgLyogQ2FsbGVkIHdoZW4gYSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZCBub3JtYWxseSwgYnV0IG5vdCB3aGVuIGl0CisgICAgICogaXMgZGVzdHJveWVkIGFmdGVyIGZvcmsoKS4KKyAgICAgKiBQYWluOiAgdG8gcHJldmVudCByYXJlIGJ1dCBmYXRhbCBzaHV0ZG93biBlcnJvcnMgKGlzc3VlIDE4ODA4KSwKKyAgICAgKiBUaHJlYWQuam9pbigpIG11c3Qgd2FpdCBmb3IgdGhlIGpvaW4nZWQgdGhyZWFkJ3MgdHN0YXRlIHRvIGJlIHVubGlua2VkCisgICAgICogZnJvbSB0aGUgdHN0YXRlIGNoYWluLiAgVGhhdCBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYSB0aHJlYWQncyBsaWZlLAorICAgICAqIGluIHB5c3RhdGUuYy4KKyAgICAgKiBUaGUgb2J2aW91cyB3YXkgZG9lc24ndCBxdWl0ZSB3b3JrOiAgY3JlYXRlIGEgbG9jayB3aGljaCB0aGUgdHN0YXRlCisgICAgICogdW5saW5raW5nIGNvZGUgcmVsZWFzZXMsIGFuZCBoYXZlIFRocmVhZC5qb2luKCkgd2FpdCB0byBhY3F1aXJlIHRoYXQKKyAgICAgKiBsb2NrLiAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBfYXJlXyBhdCB0aGUgZW5kIG9mIHRoZSB0aHJlYWQncyBsaWZlOgorICAgICAqIGlmIHRoZSB0aHJlYWQgaG9sZHMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBsb2NrLCBkZWNyZWYnaW5nIHRoZQorICAgICAqIGxvY2sgd2lsbCBkZWxldGUgdGhlIGxvY2ssIGFuZCB0aGF0IG1heSB0cmlnZ2VyIGFyYml0cmFyeSBQeXRob24gY29kZQorICAgICAqIGlmIHRoZXJlJ3MgYSB3ZWFrcmVmLCB3aXRoIGEgY2FsbGJhY2ssIHRvIHRoZSBsb2NrLiAgQnV0IGJ5IHRoaXMgdGltZQorICAgICAqIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgaXMgYWxyZWFkeSBOVUxMLCBzbyBvbmx5IHRoZSBzaW1wbGVzdCBvZiBDIGNvZGUKKyAgICAgKiBjYW4gYmUgYWxsb3dlZCB0byBydW4gKGluIHBhcnRpY3VsYXIgaXQgbXVzdCBub3QgYmUgcG9zc2libGUgdG8KKyAgICAgKiByZWxlYXNlIHRoZSBHSUwpLgorICAgICAqIFNvIGluc3RlYWQgb2YgaG9sZGluZyB0aGUgbG9jayBkaXJlY3RseSwgdGhlIHRzdGF0ZSBob2xkcyBhIHdlYWtyZWYgdG8KKyAgICAgKiB0aGUgbG9jazogIHRoYXQncyB0aGUgdmFsdWUgb2Ygb25fZGVsZXRlX2RhdGEgYmVsb3cuICBEZWNyZWYnaW5nIGEKKyAgICAgKiB3ZWFrcmVmIGlzIGhhcm1sZXNzLgorICAgICAqIG9uX2RlbGV0ZSBwb2ludHMgdG8gX3RocmVhZG1vZHVsZS5jJ3Mgc3RhdGljIHJlbGVhc2Vfc2VudGluZWwoKSBmdW5jdGlvbi4KKyAgICAgKiBBZnRlciB0aGUgdHN0YXRlIGlzIHVubGlua2VkLCByZWxlYXNlX3NlbnRpbmVsIGlzIGNhbGxlZCB3aXRoIHRoZQorICAgICAqIHdlYWtyZWYtdG8tbG9jayAob25fZGVsZXRlX2RhdGEpIGFyZ3VtZW50LCBhbmQgcmVsZWFzZV9zZW50aW5lbCByZWxlYXNlcworICAgICAqIHRoZSBpbmRpcmVjdGx5IGhlbGQgbG9jay4KKyAgICAgKi8KKyAgICB2b2lkICgqb25fZGVsZXRlKSh2b2lkICopOworICAgIHZvaWQgKm9uX2RlbGV0ZV9kYXRhOworCiAgICAgLyogWFhYIHNpZ25hbCBoYW5kbGVycyBzaG91bGQgYWxzbyBiZSBoZXJlICovCiAKIH0gUHlUaHJlYWRTdGF0ZTsKQEAgLTEzMywxMiArMTUwLDE2IEBACiBQeUFQSV9GVU5DKGludCkgUHlTdGF0ZV9SZW1vdmVNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0YXRlX0ZpbmRNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKTsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlUaHJlYWRTdGF0ZV9OZXcoUHlJbnRlcnByZXRlclN0YXRlICopOwogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5VGhyZWFkU3RhdGVfSW5pdChQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlKFB5VGhyZWFkU3RhdGUgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpOwogI2lmZGVmIFdJVEhfVEhSRUFECiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0lMU3RhdGVfUmVpbml0KHZvaWQpOwpAQCAtMjEyLDYgKzIzMywxMSBAQAogKi8KIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSh2b2lkKTsKIAorLyogSGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24gLSByZXR1cm4gMSBpZiB0aGUgY3VycmVudCB0aHJlYWQKKyAqIGN1cnJlbnRseSBob2xkcyB0aGUgR0lMLCAwIG90aGVyd2lzZQorICovCitQeUFQSV9GVU5DKGludCkgUHlHSUxTdGF0ZV9DaGVjayh2b2lkKTsKKwogI2VuZGlmICAgLyogI2lmZGVmIFdJVEhfVEhSRUFEICovCiAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkgIFJldHVybnMgYSBkaWN0IG1hcHBpbmcKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHl0aG9ucnVuLmggYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCmluZGV4IGU4YTU4MmQuLmMzNjQ5NDcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aG9ucnVuLmgKKysrIGIvSW5jbHVkZS9weXRob25ydW4uaApAQCAtMjgsNiArMjgsMTQgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICopOwogUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFB5dGhvbkhvbWUodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIE9ubHkgdXNlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBlbWJlZCB0aGUgaW50ZXJwcmV0ZXIgYW5kIG5lZWQgdG8KKyAqIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBlbmNvZGluZyBkZXRlcm1pbmF0aW9uIG1lY2hhbmlzbQorICovCitQeUFQSV9GVU5DKGludCkgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycyk7CisjZW5kaWYKKwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeV9Jbml0aWFsaXplRXgoaW50KTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTU1LDYgKzYzLDEwIEBACiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKTsKIFB5QVBJX0ZVTkMoaW50KSBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncygKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCkBAIC02Niw2ICs3OCwxMiBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeUFyZW5hICphcmVuYSk7CiBQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlKAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTc2LDYgKzk0LDE2IEBACiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKICAgICBpbnQgKmVycmNvZGUsCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdCgKKyAgICBGSUxFICpmcCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgY29uc3QgY2hhciogZW5jLAorICAgIGludCBzdGFydCwKKyAgICBjaGFyICpwczEsCisgICAgY2hhciAqcHMyLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50ICplcnJjb2RlLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKICNlbmRpZgogCiAjaWZuZGVmIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nCkBAIC0xMTcsMTEgKzE0NSwyMCBAQAogICAgIGludCBzdGFydCwKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCBvcHRpbWl6ZSk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplKTsKICNlbmRpZgogUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmcoCiAgICAgY29uc3QgY2hhciAqc3RyLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBpbnQgc3RhcnQpOworUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqc3RyLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgc3RhcnQpOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1ByaW50KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludEV4KGludCk7CkBAIC0xOTcsNyArMjM0LDcgQEAKIFB5QVBJX0ZVTkModm9pZCkgX1B5RXhjX0luaXQoUHlPYmplY3QgKiBibHRpbm1vZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeUltcG9ydEhvb2tzX0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgX1B5RnJhbWVfSW5pdCh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlGbG9hdF9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIFB5Qnl0ZUFycmF5X0luaXQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9Jbml0KHZvaWQpOwogI2VuZGlmCkBAIC0yMTcsMTkgKzI1NCwyMSBAQAogUHlBUElfRlVOQyh2b2lkKSBQeUJ5dGVBcnJheV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUZsb2F0X0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5T1NfRmluaUludGVycnVwdHModm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUdDX0R1bXBTaHV0ZG93blN0YXRzKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVNsaWNlX0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeVR5cGVfRmluaSh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5UmFuZG9tX0Zpbmkodm9pZCk7CiAKIFB5QVBJX0RBVEEoUHlUaHJlYWRTdGF0ZSAqKSBfUHlfRmluYWxpemluZzsKICNlbmRpZgogCiAvKiBTdHVmZiB3aXRoIG5vIHByb3BlciBob21lICh5ZXQpICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKGNoYXIgKikgUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK1B5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogI2VuZGlmCiBQeUFQSV9EQVRBKGludCkgKCpQeU9TX0lucHV0SG9vaykodm9pZCk7Ci1QeUFQSV9EQVRBKGNoYXIpICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworUHlBUElfREFUQShjaGFyKSAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0RBVEEoUHlUaHJlYWRTdGF0ZSopIF9QeU9TX1JlYWRsaW5lVFN0YXRlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NldG9iamVjdC5oIGIvSW5jbHVkZS9zZXRvYmplY3QuaAppbmRleCBhMTQ4NzRiLi5hZTNmNTU2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3NldG9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2V0b2JqZWN0LmgKQEAgLTIzLDggKzIzLDggQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgdGhlIGtleS4gKi8KLSAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeU9iamVjdCAqa2V5OworICAgIFB5X2hhc2hfdCBoYXNoOwogfSBzZXRlbnRyeTsKIAogCkBAIC01MSw5ICs1MSw5IEBACiAgICAgICovCiAgICAgc2V0ZW50cnkgKnRhYmxlOwogICAgIHNldGVudHJ5ICooKmxvb2t1cCkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCk7CisgICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgIC8qIG9ubHkgdXNlZCBieSBmcm96ZW5zZXQgb2JqZWN0cyAqLwogICAgIHNldGVudHJ5IHNtYWxsdGFibGVbUHlTZXRfTUlOU0laRV07CiAKLSAgICBQeV9oYXNoX3QgaGFzaDsgICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7ICAgICAgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH07CiAjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KQEAgLTYxLDYgKzYxLDEwIEBACiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlTZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUZyb3plblNldF9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0SXRlcl9UeXBlOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfREFUQShQeU9iamVjdCAqKSBfUHlTZXRfRHVtbXk7CisjZW5kaWYKKwogCiAvKiBJbnZhcmlhbnRzIGZvciBmcm96ZW5zZXRzOgogICogICAgIGRhdGEgaXMgaW1tdXRhYmxlLgpAQCAtMTAxLDcgKzEwNSw2IEBACiBQeUFQSV9GVU5DKGludCkgX1B5U2V0X1VwZGF0ZShQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqaXRlcmFibGUpOwogCiBQeUFQSV9GVU5DKGludCkgUHlTZXRfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KTsKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc2xpY2VvYmplY3QuaCBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaAppbmRleCA4YmVjMTc5Li5mN2VlOTBjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9zbGljZW9iamVjdC5oCkBAIC0zNCw2ICszNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIHN0ZXApOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTbGljZV9Gcm9tSW5kaWNlcyhQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IHN0b3ApOworUHlBUElfRlVOQyhpbnQpIF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKFB5U2xpY2VPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0X3B0ciwgUHlPYmplY3QgKipzdG9wX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RlcF9wdHIpOwogI2VuZGlmCiBQeUFQSV9GVU5DKGludCkgUHlTbGljZV9HZXRJbmRpY2VzKFB5T2JqZWN0ICpyLCBQeV9zc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqc3RvcCwgUHlfc3NpemVfdCAqc3RlcCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3N0cnVjdHNlcS5oIGIvSW5jbHVkZS9zdHJ1Y3RzZXEuaAppbmRleCAzMGM1MmFjLi5hZjIyNzE2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N0cnVjdHNlcS5oCisrKyBiL0luY2x1ZGUvc3RydWN0c2VxLmgKQEAgLTI0LDYgKzI0LDggQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShQeVR5cGVPYmplY3QgKnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKTsKK1B5QVBJX0ZVTkMoaW50KSBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKTsKICNlbmRpZgogUHlBUElfRlVOQyhQeVR5cGVPYmplY3QqKSBQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUoUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKTsKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zeW10YWJsZS5oIGIvSW5jbHVkZS9zeW10YWJsZS5oCmluZGV4IDZlZDNhMmIuLjFjZmQ4ODQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc3ltdGFibGUuaAorKysgYi9JbmNsdWRlL3N5bXRhYmxlLmgKQEAgLTE2LDcgKzE2LDcgQEAKIHN0cnVjdCBfc3ltdGFibGVfZW50cnk7CiAKIHN0cnVjdCBzeW10YWJsZSB7Ci0gICAgY29uc3QgY2hhciAqc3RfZmlsZW5hbWU7ICAgICAgICAvKiBuYW1lIG9mIGZpbGUgYmVpbmcgY29tcGlsZWQsCisgICAgUHlPYmplY3QgKnN0X2ZpbGVuYW1lOyAgICAgICAgICAvKiBuYW1lIG9mIGZpbGUgYmVpbmcgY29tcGlsZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5ICpzdF9jdXI7IC8qIGN1cnJlbnQgc3ltYm9sIHRhYmxlIGVudHJ5ICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfdG9wOyAvKiBzeW1ib2wgdGFibGUgZW50cnkgZm9yIG1vZHVsZSAqLwpAQCAtNDEsNiArNDEsNyBAQAogICAgIFB5T2JqZWN0ICpzdGVfbmFtZTsgICAgICAvKiBzdHJpbmc6IG5hbWUgb2YgY3VycmVudCBibG9jayAqLwogICAgIFB5T2JqZWN0ICpzdGVfdmFybmFtZXM7ICAvKiBsaXN0IG9mIGZ1bmN0aW9uIHBhcmFtZXRlcnMgKi8KICAgICBQeU9iamVjdCAqc3RlX2NoaWxkcmVuOyAgLyogbGlzdCBvZiBjaGlsZCBibG9ja3MgKi8KKyAgICBQeU9iamVjdCAqc3RlX2RpcmVjdGl2ZXM7LyogbG9jYXRpb25zIG9mIGdsb2JhbCBhbmQgbm9ubG9jYWwgc3RhdGVtZW50cyAqLwogICAgIF9QeV9ibG9ja190eSBzdGVfdHlwZTsgICAvKiBtb2R1bGUsIGNsYXNzLCBvciBmdW5jdGlvbiAqLwogICAgIGludCBzdGVfdW5vcHRpbWl6ZWQ7ICAgICAvKiBmYWxzZSBpZiBuYW1lc3BhY2UgaXMgb3B0aW1pemVkICovCiAgICAgaW50IHN0ZV9uZXN0ZWQ7ICAgICAgLyogdHJ1ZSBpZiBibG9jayBpcyBuZXN0ZWQgKi8KQEAgLTUyLDYgKzUzLDkgQEAKICAgICB1bnNpZ25lZCBzdGVfdmFya2V5d29yZHMgOiAxOyAvKiB0cnVlIGlmIGJsb2NrIGhhcyB2YXJrZXl3b3JkcyAqLwogICAgIHVuc2lnbmVkIHN0ZV9yZXR1cm5zX3ZhbHVlIDogMTsgIC8qIHRydWUgaWYgbmFtZXNwYWNlIHVzZXMgcmV0dXJuIHdpdGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcmd1bWVudCAqLworICAgIHVuc2lnbmVkIHN0ZV9uZWVkc19jbGFzc19jbG9zdXJlIDogMTsgLyogZm9yIGNsYXNzIHNjb3BlcywgdHJ1ZSBpZiBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zdXJlIG92ZXIgX19jbGFzc19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgY3JlYXRlZCAqLwogICAgIGludCBzdGVfbGluZW5vOyAgICAgICAgICAvKiBmaXJzdCBsaW5lIG9mIGJsb2NrICovCiAgICAgaW50IHN0ZV9jb2xfb2Zmc2V0OyAgICAgIC8qIG9mZnNldCBvZiBmaXJzdCBsaW5lIG9mIGJsb2NrICovCiAgICAgaW50IHN0ZV9vcHRfbGluZW5vOyAgICAgIC8qIGxpbmVubyBvZiBsYXN0IGV4ZWMgb3IgaW1wb3J0ICogKi8KQEAgLTcwLDYgKzc0LDEwIEBACiAgICAgbW9kX3R5IG1vZCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKTsKK1B5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5U3ltdGFibGVfQnVpbGRPYmplY3QoCisgICAgbW9kX3R5IG1vZCwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKTsKIFB5QVBJX0ZVTkMoUHlTVEVudHJ5T2JqZWN0ICopIFB5U3ltdGFibGVfTG9va3VwKHN0cnVjdCBzeW10YWJsZSAqLCB2b2lkICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3ltdGFibGVfRnJlZShzdHJ1Y3Qgc3ltdGFibGUgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3N5c21vZHVsZS5oIGIvSW5jbHVkZS9zeXNtb2R1bGUuaAppbmRleCAwY2FiZjZmLi45MjVjMmEzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5c21vZHVsZS5oCisrKyBiL0luY2x1ZGUvc3lzbW9kdWxlLmgKQEAgLTgsNyArOCwxMCBAQAogI2VuZGlmCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlTeXNfR2V0T2JqZWN0KGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVN5c19HZXRPYmplY3RJZChfUHlfSWRlbnRpZmllciAqa2V5KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTeXNfU2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSwgUHlPYmplY3QgKik7CisKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndihpbnQsIHdjaGFyX3QgKiopOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRBcmd2RXgoaW50LCB3Y2hhcl90ICoqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3Rva2VuLmggYi9JbmNsdWRlL3Rva2VuLmgKaW5kZXggZjdmNjUwNC4uOTA1MDIyYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS90b2tlbi5oCisrKyBiL0luY2x1ZGUvdG9rZW4uaApAQCAtNzUsNyArNzUsNyBAQAogI2RlZmluZSBJU0VPRih4KQkJKCh4KSA9PSBFTkRNQVJLRVIpCiAKIAotUHlBUElfREFUQShjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCitQeUFQSV9EQVRBKGNvbnN0IGNoYXIgKikgX1B5UGFyc2VyX1Rva2VuTmFtZXNbXTsgLyogVG9rZW4gbmFtZXMgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeVRva2VuX09uZUNoYXIoaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVRva2VuX1R3b0NoYXJzKGludCwgaW50KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVRva2VuX1RocmVlQ2hhcnMoaW50LCBpbnQsIGludCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaCBiL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oCmluZGV4IGE4ZjViNWQuLmI2ZDMzMWIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oCkBAIC0xODAsOSArMTgwLDkgQEAKICAgICB9IHdoaWxlICgwKQogCiAvKiBtYWNyb3MgdG8gd29yayB3aXRoIHN1cnJvZ2F0ZXMgKi8KLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gY2ggJiYgY2ggPD0gMHhERkZGKQotI2RlZmluZSBQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REJGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REZGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSAoY2gpICYmIChjaCkgPD0gMHhEQkZGKQorI2RlZmluZSBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUoY2gpICgweERDMDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REZGRikKIC8qIEpvaW4gdHdvIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCByZXR1cm4gYSBzaW5nbGUgUHlfVUNTNCB2YWx1ZS4gKi8KICNkZWZpbmUgUHlfVU5JQ09ERV9KT0lOX1NVUlJPR0FURVMoaGlnaCwgbG93KSAgXAogICAgICgoKCgoUHlfVUNTNCkoaGlnaCkgJiAweDAzRkYpIDw8IDEwKSB8ICAgICAgXApAQCAtODU5LDcgKzg1OSw3IEBACiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgICAgICAgICAgLyogT2JqZWN0ICovCiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKQEAgLTg3OCw3ICs4NzgsNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoCkBAIC04OTgsMjIgKzg5OCwyOCBAQAogICAgIFB5X1VDUzQgbWF4Y2hhcjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfc3NpemVfdCBwb3M7Ci0gICAgLyogbWluaW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB3aGVuIG92ZXJhbGxvY2F0aW9uIGlzIGVuYWJsZWQsCi0gICAgICAgc2VlIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgpICovCisKKyAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBhbGxvY2F0ZWQgY2hhcmFjdGVycyAoZGVmYXVsdDogMCkgKi8KICAgICBQeV9zc2l6ZV90IG1pbl9sZW5ndGg7CisKKyAgICAvKiBtaW5pbXVtIGNoYXJhY3RlciAoZGVmYXVsdDogMTI3LCBBU0NJSSkgKi8KKyAgICBQeV9VQ1M0IG1pbl9jaGFyOworCisgICAgLyogSWYgbm9uLXplcm8sIG92ZXJhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5IDI1JSAoZGVmYXVsdDogMCkuICovCiAgICAgdW5zaWduZWQgY2hhciBvdmVyYWxsb2NhdGU7CisKICAgICAvKiBJZiByZWFkb25seSBpcyAxLCBidWZmZXIgaXMgYSBzaGFyZWQgc3RyaW5nIChjYW5ub3QgYmUgbW9kaWZpZWQpCiAgICAgICAgYW5kIHNpemUgaXMgc2V0IHRvIDAuICovCiAgICAgdW5zaWduZWQgY2hhciByZWFkb25seTsKIH0gX1B5VW5pY29kZVdyaXRlciA7CiAKIC8qIEluaXRpYWxpemUgYSBVbmljb2RlIHdyaXRlci4KLQotICAgSWYgbWluX2xlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkKLSAgIG92ZXJhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhbmQgbWluX2xlbmd0aCBpcyB0aGUgbWluaW11bSBsZW5ndGggaW4gY2hhcmFjdGVycwotICAgb2YgdGhlIGJ1ZmZlci4gKi8KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBpcyAwIGNoYXJhY3RlciBhbmQgb3ZlcmFsbG9jYXRpb24gaXMKKyAqIGRpc2FibGVkLiBTZXQgbWluX2xlbmd0aCwgbWluX2NoYXIgYW5kIG92ZXJhbGxvY2F0ZSBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wKKyAqIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuICovCiBQeUFQSV9GVU5DKHZvaWQpCi1fUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9zc2l6ZV90IG1pbl9sZW5ndGgpOworX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKIC8qIFByZXBhcmUgdGhlIGJ1ZmZlciB0byB3cml0ZSAnbGVuZ3RoJyBjaGFyYWN0ZXJzCiAgICB3aXRoIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjaGFyYWN0ZXIuCkBAIC05MzMsMTIgKzkzOSw1MiBAQAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcik7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiBQeUFQSV9GVU5DKGludCkKLV9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyKTsKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBQeV9VQ1M0IGNoCisgICAgKTsKIAorLyogQXBwZW5kIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgKTsKKworLyogQXBwZW5kIGEgc3Vic3RyaW5nIG9mIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBzdGFydCwKKyAgICBQeV9zc2l6ZV90IGVuZAorICAgICk7CisKKy8qIEFwcGVuZCBhIEFTQ0lJLWVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBjb25zdCBjaGFyICpzdHIsICAgICAgICAgICAvKiBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzLCBvciAtMSBpZiB1bmtub3duICovCisgICAgKTsKKworLyogQXBwZW5kIGEgbGF0aW4xLWVuY29kZWQgYnl0ZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogbGF0aW4xLWVuY29kZWQgYnl0ZSBzdHJpbmcgKi8KKyAgICBQeV9zc2l6ZV90IGxlbiAgICAgICAgICAgICAvKiBsZW5ndGggaW4gYnl0ZXMgKi8KKyAgICApOworCisvKiBHZXQgdGhlIHZhbHVlIG9mIHRoZSB3cml0ZXIgYXMgYW4gVW5pY29kZSBzdHJpbmcuIENsZWFyIHRoZQorICAgYnVmZmVyIG9mIHRoZSB3cml0ZXIuIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwKKyAgIG9uIGVycm9yLiAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKQogX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKTsKIAorLyogRGVhbGxvY2F0ZSBtZW1vcnkgb2YgYSB3cml0ZXIgKGNsZWFyIGl0cyBpbnRlcm5hbCBidWZmZXIpLiAqLwogUHlBUElfRlVOQyh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAjZW5kaWYKQEAgLTk3Nyw3ICsxMDIzLDcgQEAKICAgIFRoZSBidWZmZXIgaXMgY29waWVkIGludG8gdGhlIG5ldyBvYmplY3QuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKAotICAgIHJlZ2lzdGVyIGNvbnN0IHdjaGFyX3QgKncsICAvKiB3Y2hhcl90IGJ1ZmZlciAqLworICAgIGNvbnN0IHdjaGFyX3QgKncsICAgICAgICAgICAvKiB3Y2hhcl90IGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3Qgc2l6ZSAgICAgICAgICAgICAvKiBzaXplIG9mIGJ1ZmZlciAqLwogICAgICk7CiAKQEAgLTk5NSw3ICsxMDQxLDcgQEAKIAogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeVVuaWNvZGVfQXNXaWRlQ2hhcigKICAgICBQeU9iamVjdCAqdW5pY29kZSwgICAgICAgICAgLyogVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciB3Y2hhcl90ICp3LCAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICB3Y2hhcl90ICp3LCAgICAgICAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC0xNzI2LDcgKzE3NzIsNyBAQAogLyogRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgdG8gdGhlIGN1cnJlbnQgbG9jYWxlIGVuY29kaW5nLiBUaGUgZW5jb2RlciBpcwogICAgc3RyaWN0IGlzICpzdXJyb2dhdGVlc2NhcGUqIGlzIGVxdWFsIHRvIHplcm8sIG90aGVyd2lzZSB0aGUKICAgICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgaXMgdXNlZC4gUmV0dXJuIGEgYnl0ZXMgb2JqZWN0LiBUaGUgc3RyaW5nCi0gICBjYW5ub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMuLiAqLworICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgKICAgICBQeU9iamVjdCAqdW5pY29kZSwKQEAgLTE5NTAsMTMgKzE5OTYsMTkgQEAKICAgICApOwogCiAvKiBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MgdGhhbiwgZXF1YWwsCi0gICBncmVhdGVyIHRoYW4gcmVzcC4gKi8KKyAgIGdyZWF0ZXIgdGhhbiByZXNwLgorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZSgKICAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqcmlnaHQgICAgICAgICAgICAgLyogUmlnaHQgc3RyaW5nICovCiAgICAgKTsKIAorUHlBUElfRlVOQyhpbnQpIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZCgKKyAgICBQeU9iamVjdCAqbGVmdCwgICAgICAgICAgICAgLyogTGVmdCBzdHJpbmcgKi8KKyAgICBfUHlfSWRlbnRpZmllciAqcmlnaHQgICAgICAgLyogUmlnaHQgaWRlbnRpZmllciAqLworICAgICk7CisKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKICAgICBQeU9iamVjdCAqbGVmdCwKICAgICBjb25zdCBjaGFyICpyaWdodCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvd2FybmluZ3MuaCBiL0luY2x1ZGUvd2FybmluZ3MuaAppbmRleCBiN2RiNjgxLi4yMTdjMDZhIDEwMDY0NAotLS0gYS9JbmNsdWRlL3dhcm5pbmdzLmgKKysrIGIvSW5jbHVkZS93YXJuaW5ncy5oCkBAIC0xNyw2ICsxNywxMyBAQAogICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCiAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLwogICAgIC4uLik7CitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBQeU9iamVjdCAqbW9kdWxlLAorICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CiBQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0KAogICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKICAgICBjb25zdCBjaGFyICptZXNzYWdlLCAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KQEAgLTI1LDYgKzMyLDEyIEBACiAgICAgY29uc3QgY2hhciAqbW9kdWxlLCAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJlZ2lzdHJ5KTsKIAorUHlBUElfRlVOQyhpbnQpCitQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKKwogLyogREVQUkVDQVRFRDogVXNlIFB5RXJyX1dhcm5FeCgpIGluc3RlYWQuICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5RXJyX1dhcm4oY2F0ZWdvcnksIG1zZykgUHlFcnJfV2FybkV4KGNhdGVnb3J5LCBtc2csIDEpCmRpZmYgLS1naXQgYS9MaWIvX2Jvb3Rsb2NhbGUucHkgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJjY2FjMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9fYm9vdGxvY2FsZS5weQpAQCAtMCwwICsxLDM0IEBACisiIiJBIG1pbmltYWwgc3Vic2V0IG9mIHRoZSBsb2NhbGUgbW9kdWxlIHVzZWQgYXQgaW50ZXJwcmV0ZXIgc3RhcnR1cAorKGltcG9ydGVkIGJ5IHRoZSBfaW8gbW9kdWxlKSwgaW4gb3JkZXIgdG8gcmVkdWNlIHN0YXJ0dXAgdGltZS4KKworRG9uJ3QgaW1wb3J0IGRpcmVjdGx5IGZyb20gdGhpcmQtcGFydHkgY29kZTsgdXNlIHRoZSBgbG9jYWxlYCBtb2R1bGUgaW5zdGVhZCEKKyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgX2xvY2FsZQorCitpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgid2luIik6CisgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgcmV0dXJuIF9sb2NhbGUuX2dldGRlZmF1bHRsb2NhbGUoKVsxXQorZWxzZToKKyAgICB0cnk6CisgICAgICAgIF9sb2NhbGUuQ09ERVNFVAorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgICMgVGhpcyBwYXRoIGZvciBsZWdhY3kgc3lzdGVtcyBuZWVkcyB0aGUgbW9yZSBjb21wbGV4CisgICAgICAgICAgICAjIGdldGRlZmF1bHRsb2NhbGUoKSBmdW5jdGlvbiwgaW1wb3J0IHRoZSBmdWxsIGxvY2FsZSBtb2R1bGUuCisgICAgICAgICAgICBpbXBvcnQgbG9jYWxlCisgICAgICAgICAgICByZXR1cm4gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZSkKKyAgICBlbHNlOgorICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlPVRydWUpOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBkb19zZXRsb2NhbGUKKyAgICAgICAgICAgIHJlc3VsdCA9IF9sb2NhbGUubmxfbGFuZ2luZm8oX2xvY2FsZS5DT0RFU0VUKQorICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgbmxfbGFuZ2luZm8gY2FuIHJldHVybiBhbiBlbXB0eSBzdHJpbmcKKyAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHNldHRpbmcgaGFzIGFuIGludmFsaWQgdmFsdWUuCisgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCisgICAgICAgICAgICAgICAgIyBVVEYtOCBpcyB0aGUgZGVmYXVsdCBjaGFyc2V0IG9uIE9TWCBhbmQKKyAgICAgICAgICAgICAgICAjIHJldHVybmluZyBub3RoaW5nIHdpbGwgY3Jhc2ggdGhlCisgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSAnVVRGLTgnCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CmRpZmYgLS1naXQgYS9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weSBiL0xpYi9fY29sbGVjdGlvbnNfYWJjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTFmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpAQCAtMCwwICsxLDczNCBAQAorIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorCisiIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgorCitVbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgorIiIiCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAoraW1wb3J0IHN5cworCitfX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCisgICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAorICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAorICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCisgICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCisgICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAorICAgICAgICAgICAiQnl0ZVN0cmluZyIsCisgICAgICAgICAgIF0KKworIyBUaGlzIG1vZHVsZSBoYXMgYmVlbiByZW5hbWVkIGZyb20gY29sbGVjdGlvbnMuYWJjIHRvIF9jb2xsZWN0aW9uc19hYmMgdG8KKyMgc3BlZWQgdXAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gU29tZSBvZiB0aGUgdHlwZXMgc3VjaCBhcyBNdXRhYmxlTWFwcGluZyBhcmUKKyMgcmVxdWlyZWQgZWFybHkgYnV0IGNvbGxlY3Rpb25zIG1vZHVsZSBpbXBvcnRzIGEgbG90IG9mIG90aGVyIG1vZHVsZXMuCisjIFNlZSBpc3N1ZSAjMTkyMTgKK19fbmFtZV9fID0gImNvbGxlY3Rpb25zLmFiYyIKKworIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcworIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6CisjICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQorIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCisjIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0CisjIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAorIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KK2J5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCitieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQorI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/CitkaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCitkaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQorZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCitsaXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKK2xpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCityYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCitzZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQorc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKK3R1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKK3ppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCisjIyB2aWV3cyAjIworZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCitkaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCitkaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQorIyMgbWlzYyAjIworbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQorCisKKyMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIworCitjbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgorICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgorICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHdoaWxlIEZhbHNlOgorICAgICAgICAgICAgeWllbGQgTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCisgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKKyAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCisgICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCisjSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQorCitjbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiAwCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6CisgICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKKyAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6CisgICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworIyMjIFNFVFMgIyMjCisKKworY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgorCisgICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCisgICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKKyAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KKworICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKKyAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBjbHMoaXQpCisKKyAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCisKKyAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6CisgICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJworICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQorCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKKworICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQorCisgICAgZGVmIF9oYXNoKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCisgICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKKyAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KKworICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQorICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAorICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKKyAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCisgICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCisgICAgICAgIE1BU0sgPSAyICogTUFYICsgMQorICAgICAgICBuID0gbGVuKHNlbGYpCisgICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQorICAgICAgICBoICY9IE1BU0sKKyAgICAgICAgZm9yIHggaW4gc2VsZjoKKyAgICAgICAgICAgIGh4ID0gaGFzaCh4KQorICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKKyAgICAgICAgICAgIGggJj0gTUFTSworICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCisgICAgICAgIGggJj0gTUFTSworICAgICAgICBpZiBoID4gTUFYOgorICAgICAgICAgICAgaCAtPSBNQVNLICsgMQorICAgICAgICBpZiBoID09IC0xOgorICAgICAgICAgICAgaCA9IDU5MDkyMzcxMworICAgICAgICByZXR1cm4gaAorCitTZXQucmVnaXN0ZXIoZnJvemVuc2V0KQorCisKK2NsYXNzIE11dGFibGVTZXQoU2V0KToKKyAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAorICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgorCisgICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCisgICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCisgICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgorICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQorICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisKKyAgICBkZWYgcG9wKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgorICAgICAgICBpdCA9IGl0ZXIoc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgorICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKKyAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6CisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgorICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgorICAgICAgICBpZiBpdCBpcyBzZWxmOgorICAgICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCitNdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKKworCisjIyMgTUFQUElOR1MgIyMjCisKKworY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQorICAgIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHJhaXNlIEtleUVycm9yCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGtleXMoc2VsZik6CisgICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgorICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKKworICAgIGRlZiBpdGVtcyhzZWxmKToKKyAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKKyAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQorCisgICAgZGVmIHZhbHVlcyhzZWxmKToKKyAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKKyAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKKworTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCisKKworY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgorICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCisKKworY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9tYXBwaW5nCisKK0tleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKKworCitjbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKKworSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCisKKworY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KKworVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKKworCitjbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCisgICAga2V5L3ZhbHVlIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKKyAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgX19tYXJrZXIgPSBvYmplY3QoKQorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgorICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KKyAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCisgICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKKyAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KKyAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2CisgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgorICAgICAgICAnJycKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCisgICAgICAgIGVsaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQorICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6CisgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQorCisgICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKK011dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCisKKworIyMjIFNFUVVFTkNFUyAjIyMKKworCitjbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCisKKyAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKKyAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBpID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCisgICAgICAgICAgICAgICAgeWllbGQgdgorICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIGZvciB2IGluIHNlbGY6CisgICAgICAgICAgICBpZiB2ID09IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6CisgICAgICAgICAgICB5aWVsZCBzZWxmW2ldCisKKyAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgorICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KKyAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgorICAgICAgICAnJycKKyAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgorICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisKKyAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgorICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJworICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQorCitTZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKK1NlcXVlbmNlLnJlZ2lzdGVyKHN0cikKK1NlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQorU2VxdWVuY2UucmVnaXN0ZXIobWVtb3J5dmlldykKKworCitjbGFzcyBCeXRlU3RyaW5nKFNlcXVlbmNlKToKKworICAgICIiIlRoaXMgdW5pZmllcyBieXRlcyBhbmQgYnl0ZWFycmF5LgorCisgICAgWFhYIFNob3VsZCBhZGQgYWxsIHRoZWlyIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoKQorCitCeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVzKQorQnl0ZVN0cmluZy5yZWdpc3RlcihieXRlYXJyYXkpCisKKworY2xhc3MgTXV0YWJsZVNlcXVlbmNlKFNlcXVlbmNlKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLXdyaXRlIHNlcXVlbmNlLgorCisgICAgQ29uY3JldGUgc3ViY2xhc3NlcyBtdXN0IHByb3ZpZGUgX19uZXdfXyBvciBfX2luaXRfXywKKyAgICBfX2dldGl0ZW1fXywgX19zZXRpdGVtX18sIF9fZGVsaXRlbV9fLCBfX2xlbl9fLCBhbmQgaW5zZXJ0KCkuCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBpbmRleCwgdmFsdWUpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgICdTLmluc2VydChpbmRleCwgdmFsdWUpIC0tIGluc2VydCB2YWx1ZSBiZWZvcmUgaW5kZXgnCisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIGRlZiBhcHBlbmQoc2VsZiwgdmFsdWUpOgorICAgICAgICAnUy5hcHBlbmQodmFsdWUpIC0tIGFwcGVuZCB2YWx1ZSB0byB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZScKKyAgICAgICAgc2VsZi5pbnNlcnQobGVuKHNlbGYpLCB2YWx1ZSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ1MuY2xlYXIoKSAtPiBOb25lIC0tIHJlbW92ZSBhbGwgaXRlbXMgZnJvbSBTJworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgcmV2ZXJzZShzZWxmKToKKyAgICAgICAgJ1MucmV2ZXJzZSgpIC0tIHJldmVyc2UgKklOIFBMQUNFKicKKyAgICAgICAgbiA9IGxlbihzZWxmKQorICAgICAgICBmb3IgaSBpbiByYW5nZShuLy8yKToKKyAgICAgICAgICAgIHNlbGZbaV0sIHNlbGZbbi1pLTFdID0gc2VsZltuLWktMV0sIHNlbGZbaV0KKworICAgIGRlZiBleHRlbmQoc2VsZiwgdmFsdWVzKToKKyAgICAgICAgJ1MuZXh0ZW5kKGl0ZXJhYmxlKSAtLSBleHRlbmQgc2VxdWVuY2UgYnkgYXBwZW5kaW5nIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlJworICAgICAgICBmb3IgdiBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFwcGVuZCh2KQorCisgICAgZGVmIHBvcChzZWxmLCBpbmRleD0tMSk6CisgICAgICAgICcnJ1MucG9wKFtpbmRleF0pIC0+IGl0ZW0gLS0gcmVtb3ZlIGFuZCByZXR1cm4gaXRlbSBhdCBpbmRleCAoZGVmYXVsdCBsYXN0KS4KKyAgICAgICAgICAgUmFpc2UgSW5kZXhFcnJvciBpZiBsaXN0IGlzIGVtcHR5IG9yIGluZGV4IGlzIG91dCBvZiByYW5nZS4KKyAgICAgICAgJycnCisgICAgICAgIHYgPSBzZWxmW2luZGV4XQorICAgICAgICBkZWwgc2VsZltpbmRleF0KKyAgICAgICAgcmV0dXJuIHYKKworICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgorICAgICAgICAnJydTLnJlbW92ZSh2YWx1ZSkgLS0gcmVtb3ZlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdmFsdWUuCisgICAgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgorICAgICAgICAnJycKKyAgICAgICAgZGVsIHNlbGZbc2VsZi5pbmRleCh2YWx1ZSldCisKKyAgICBkZWYgX19pYWRkX18oc2VsZiwgdmFsdWVzKToKKyAgICAgICAgc2VsZi5leHRlbmQodmFsdWVzKQorICAgICAgICByZXR1cm4gc2VsZgorCitNdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIobGlzdCkKK011dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihieXRlYXJyYXkpICAjIE11bHRpcGx5IGluaGVyaXRpbmcsIHNlZSBCeXRlU3RyaW5nCmRpZmYgLS1naXQgYS9MaWIvX2R1bW15X3RocmVhZC5weSBiL0xpYi9fZHVtbXlfdGhyZWFkLnB5CmluZGV4IDEzYjFmMjYuLmI2N2NmYjkgMTAwNjQ0Ci0tLSBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5CisrKyBiL0xpYi9fZHVtbXlfdGhyZWFkLnB5CkBAIC04MSw2ICs4MSwxMCBAQAogICAgICAgICByYWlzZSBlcnJvcigic2V0dGluZyB0aHJlYWQgc3RhY2sgc2l6ZSBub3Qgc3VwcG9ydGVkIikKICAgICByZXR1cm4gMAogCitkZWYgX3NldF9zZW50aW5lbCgpOgorICAgICIiIkR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuX3NldF9zZW50aW5lbCgpLiIiIgorICAgIHJldHVybiBMb2NrVHlwZSgpCisKIGNsYXNzIExvY2tUeXBlKG9iamVjdCk6CiAgICAgIiIiQ2xhc3MgaW1wbGVtZW50aW5nIGR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuTG9ja1R5cGUuCiAKZGlmZiAtLWdpdCBhL0xpYi9fb3N4X3N1cHBvcnQucHkgYi9MaWIvX29zeF9zdXBwb3J0LnB5CmluZGV4IDUwYjJkMTcuLjQwZmM3OGIgMTAwNjQ0Ci0tLSBhL0xpYi9fb3N4X3N1cHBvcnQucHkKKysrIGIvTGliL19vc3hfc3VwcG9ydC5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgIHBhdGhzID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQogICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZXhlY3V0YWJsZSkKIAotICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBvcy5uYW1lID09ICdvczInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgorICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykgYW5kIChleHQgIT0gJy5leGUnKToKICAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKIAogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlKToKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgX1NZU1RFTV9WRVJTSU9OID0gJycKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4oJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgV2UncmUgb24gYSBwbGFpbiBkYXJ3aW4gYm94LCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKICAgICAgICAgICAgICMgYmVoYXZpb3VyLgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL19weWlvLnB5IGIvTGliL19weWlvLnB5CmluZGV4IGFhYjYwZGIuLmQ2ZWVlNzkgMTAwNjQ0Ci0tLSBhL0xpYi9fcHlpby5weQorKysgYi9MaWIvX3B5aW8ucHkKQEAgLTM0LDcgKzM0LDcgQEAKIGRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAogICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKToKIAotICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIE9TRXJyb3IgdXBvbiBmYWlsdXJlLgogCiAgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCiAgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCkBAIC02Miw4ICs2Miw3IEBACiAgICAgJ2InICAgICAgIGJpbmFyeSBtb2RlCiAgICAgJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgICAnKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWQKLSAgICAgICAgICAgICAgZm9yIG5ldyBjb2RlKQorICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKQogICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KQEAgLTc5LDYgKzc4LDEwIEBACiAgICAgcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQogICAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLgogCisgICAgJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zCisgICAgb2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2wKKyAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4KKwogICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgogICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKICAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCkBAIC0xMjksNiArMTMyLDggQEAKICAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCiAgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKKyAgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG5vbi1pbmhlcml0YWJsZS4KKwogICAgIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZQogICAgIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nCiAgICAgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlCkBAIC0xNzIsNiArMTc3LDkgQEAKICAgICBpZiAiVSIgaW4gbW9kZXM6CiAgICAgICAgIGlmIGNyZWF0aW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmVhZGluZyA9IFRydWUKICAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCkBAIC0yMDAsNyArMjA4LDcgQEAKICAgICAgICAgYnVmZmVyaW5nID0gREVGQVVMVF9CVUZGRVJfU0laRQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBicyA9IG9zLmZzdGF0KHJhdy5maWxlbm8oKSkuc3RfYmxrc2l6ZQotICAgICAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgYnMgPiAxOgpAQCAtMjU0LDcgKzI2Miw3IEBACiB0cnk6CiAgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIElPRXJyb3IpOgorICAgIGNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICBwYXNzCiAKIApAQCAtMjc4LDcgKzI4Niw3IEBACiAgICAgcmVhZGludG8pIG5lZWRlZC4gVGV4dCBJL08gY2xhc3NlcyB3b3JrIHdpdGggc3RyIGRhdGEuCiAKICAgICBOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChldmVuIGlucXVpcmllcykgb24gYSBjbG9zZWQgc3RyZWFtIGlzCi0gICAgdW5kZWZpbmVkLiBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIElPRXJyb3IgaW4gdGhpcyBjYXNlLgorICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBPU0Vycm9yIGluIHRoaXMgY2FzZS4KIAogICAgIElPQmFzZSAoYW5kIGl0cyBzdWJjbGFzc2VzKSBzdXBwb3J0IHRoZSBpdGVyYXRvciBwcm90b2NvbCwgbWVhbmluZwogICAgIHRoYXQgYW4gSU9CYXNlIG9iamVjdCBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB5aWVsZGluZyB0aGUgbGluZXMgaW4gYQpAQCAtMjk0LDcgKzMwMiw3IEBACiAgICAgIyMjIEludGVybmFsICMjIwogCiAgICAgZGVmIF91bnN1cHBvcnRlZChzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIElPRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gT1NFcnJvciBleGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuIiIiCiAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCIlcy4lcygpIG5vdCBzdXBwb3J0ZWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBuYW1lKSkKIApAQCAtNDQxLDcgKzQ0OSw3IEBACiAgICAgZGVmIGZpbGVubyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAoYW4gaW50KSBpZiBvbmUgZXhpc3RzLgogCi0gICAgICAgIEFuIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBJTyBvYmplY3QgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICBBbiBPU0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJmaWxlbm8iKQogCkBAIC00NTUsMTEgKzQ2MywxMSBAQAogCiAgICAgIyMjIFJlYWRsaW5lW3NdIGFuZCB3cml0ZWxpbmVzICMjIwogCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PS0xKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgIHIiIiJSZWFkIGFuZCByZXR1cm4gYSBsaW5lIG9mIGJ5dGVzIGZyb20gdGhlIHN0cmVhbS4KIAotICAgICAgICBJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLgotICAgICAgICBMaW1pdCBzaG91bGQgYmUgYW4gaW50LgorICAgICAgICBJZiBzaXplIGlzIHNwZWNpZmllZCwgYXQgbW9zdCBzaXplIGJ5dGVzIHdpbGwgYmUgcmVhZC4KKyAgICAgICAgU2l6ZSBzaG91bGQgYmUgYW4gaW50LgogCiAgICAgICAgIFRoZSBsaW5lIHRlcm1pbmF0b3IgaXMgYWx3YXlzIGInXG4nIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0CiAgICAgICAgIGZpbGVzLCB0aGUgbmV3bGluZXMgYXJndW1lbnQgdG8gb3BlbiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgdGhlIGxpbmUKQEAgLTQ3MiwxOCArNDgwLDE4IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRhaGVhZDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgICAgICAgICBuID0gKHJlYWRhaGVhZC5maW5kKGIiXG4iKSArIDEpIG9yIGxlbihyZWFkYWhlYWQpCi0gICAgICAgICAgICAgICAgaWYgbGltaXQgPj0gMDoKLSAgICAgICAgICAgICAgICAgICAgbiA9IG1pbihuLCBsaW1pdCkKKyAgICAgICAgICAgICAgICBpZiBzaXplID49IDA6CisgICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGVmIG5yZWFkYWhlYWQoKToKICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAgICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCi0gICAgICAgIHdoaWxlIGxpbWl0IDwgMCBvciBsZW4ocmVzKSA8IGxpbWl0OgorICAgICAgICB3aGlsZSBzaXplIDwgMCBvciBsZW4ocmVzKSA8IHNpemU6CiAgICAgICAgICAgICBiID0gc2VsZi5yZWFkKG5yZWFkYWhlYWQoKSkKICAgICAgICAgICAgIGlmIG5vdCBiOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC01NDIsMTcgKzU1MCwxNyBAQAogICAgICMgcHJpbWl0aXZlIG9wZXJhdGlvbiwgYnV0IHRoYXQgd291bGQgbGVhZCB0byBuYXN0eSByZWN1cnNpb24gaW4gY2FzZQogICAgICMgYSBzdWJjbGFzcyBkb2Vzbid0IGltcGxlbWVudCBlaXRoZXIuKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6Ci0gICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBuIGJ5dGVzLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIHNpemUgYnl0ZXMsIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCiAgICAgICAgIFJldHVybnMgYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IG9uIEVPRiwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0IGlzCiAgICAgICAgIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJlYWRhbGwoKQotICAgICAgICBiID0gYnl0ZWFycmF5KG4uX19pbmRleF9fKCkpCisgICAgICAgIGIgPSBieXRlYXJyYXkoc2l6ZS5fX2luZGV4X18oKSkKICAgICAgICAgbiA9IHNlbGYucmVhZGludG8oYikKICAgICAgICAgaWYgbiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTYxMCw4ICs2MTgsOCBAQAogICAgIGltcGxlbWVudGF0aW9uLCBidXQgd3JhcCBvbmUuCiAgICAgIiIiCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIHNpemUgYnl0ZXMsIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCiAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgcmVhZHMgYW5kCiAgICAgICAgIHJldHVybnMgYWxsIGRhdGEgdW50aWwgRU9GLgpAQCAtNjMwLDkgKzYzOCw5IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZCIpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAotICAgICAgICB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBzaXplIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAorICAgICAgICB3aGVyZSBzaXplIGlzIGFuIGludC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkMSIpCiAKQEAgLTY5OSwxMyArNzA3LDEzIEBACiAgICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2U9MCk6CiAgICAgICAgIG5ld19wb3NpdGlvbiA9IHNlbGYucmF3LnNlZWsocG9zLCB3aGVuY2UpCiAgICAgICAgIGlmIG5ld19wb3NpdGlvbiA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBuZXdfcG9zaXRpb24KIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICBwb3MgPSBzZWxmLnJhdy50ZWxsKCkKICAgICAgICAgaWYgcG9zIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGwoKSByZXR1cm5lZCBhbiBpbnZhbGlkIHBvc2l0aW9uIikKICAgICAgICAgcmV0dXJuIHBvcwogCiAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcz1Ob25lKToKQEAgLTgyMCwyNCArODI4LDI0IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhzZWxmLl9idWZmZXIpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicmVhZCBmcm9tIGNsb3NlZCBmaWxlIikKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgbiA9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQorICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgIHNpemUgPSBsZW4oc2VsZi5fYnVmZmVyKQogICAgICAgICBpZiBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9wb3M6CiAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgbikKKyAgICAgICAgbmV3cG9zID0gbWluKGxlbihzZWxmLl9idWZmZXIpLCBzZWxmLl9wb3MgKyBzaXplKQogICAgICAgICBiID0gc2VsZi5fYnVmZmVyW3NlbGYuX3BvcyA6IG5ld3Bvc10KICAgICAgICAgc2VsZi5fcG9zID0gbmV3cG9zCiAgICAgICAgIHJldHVybiBieXRlcyhiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKICAgICAgICAgIiIiVGhpcyBpcyB0aGUgc2FtZSBhcyByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZChuKQorICAgICAgICByZXR1cm4gc2VsZi5yZWFkKHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgpAQCAtOTI3LDcgKzkzNSw3IEBACiAgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBidWZmZXJlZCByZWFkZXIgdXNpbmcgdGhlIGdpdmVuIHJlYWRhYmxlIHJhdyBJTyBvYmplY3QuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmF3LnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmF3IiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgX0J1ZmZlcmVkSU9NaXhpbi5fX2luaXRfXyhzZWxmLCByYXcpCiAgICAgICAgIGlmIGJ1ZmZlcl9zaXplIDw9IDA6CkBAIC05NDAsMTggKzk0OCwxOCBAQAogICAgICAgICBzZWxmLl9yZWFkX2J1ZiA9IGIiIgogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgbiBieXRlcy4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIHNpemUgYnl0ZXMuCiAKLSAgICAgICAgUmV0dXJucyBleGFjdGx5IG4gYnl0ZXMgb2YgZGF0YSB1bmxlc3MgdGhlIHVuZGVybHlpbmcgcmF3IElPCisgICAgICAgIFJldHVybnMgZXhhY3RseSBzaXplIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTwogICAgICAgICBzdHJlYW0gcmVhY2hlcyBFT0Ygb3IgaWYgdGhlIGNhbGwgd291bGQgYmxvY2sgaW4gbm9uLWJsb2NraW5nCi0gICAgICAgIG1vZGUuIElmIG4gaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIG9yIHVudGlsIHJlYWQoKSB3b3VsZAorICAgICAgICBtb2RlLiBJZiBzaXplIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKICAgICAgICAgYmxvY2suCiAgICAgICAgICIiIgotICAgICAgICBpZiBuIGlzIG5vdCBOb25lIGFuZCBuIDwgLTE6CisgICAgICAgIGlmIHNpemUgaXMgbm90IE5vbmUgYW5kIHNpemUgPCAtMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQiKQogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKG4pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChzaXplKQogCiAgICAgZGVmIF9yZWFkX3VubG9ja2VkKHNlbGYsIG49Tm9uZSk6CiAgICAgICAgIG5vZGF0YV92YWwgPSBiIiIKQEAgLTEwMTEsNyArMTAxOSw3IEBACiAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gb3V0WzpuXSBpZiBvdXQgZWxzZSBub2RhdGFfdmFsCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CiAgICAgICAgICIiIlJldHVybnMgYnVmZmVyZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLgogCiAgICAgICAgIFRoZSBhcmd1bWVudCBpbmRpY2F0ZXMgYSBkZXNpcmVkIG1pbmltYWwgbnVtYmVyIG9mIGJ5dGVzOyB3ZQpAQCAtMTAxOSw3ICsxMDI3LDcgQEAKICAgICAgICAgdGhhbiBzZWxmLmJ1ZmZlcl9zaXplLgogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcGVla191bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcGVla191bmxvY2tlZChzZWxmLCBuPTApOgogICAgICAgICB3YW50ID0gbWluKG4sIHNlbGYuYnVmZmVyX3NpemUpCkBAIC0xMDM3LDE4ICsxMDQ1LDE4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2J1ZltzZWxmLl9yZWFkX3BvczpdCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgICIiIlJlYWRzIHVwIHRvIG4gYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgotICAgICAgICAjIFJldHVybnMgdXAgdG8gbiBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgIiIiUmVhZHMgdXAgdG8gc2l6ZSBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSByZWFkKCkgc3lzdGVtIGNhbGwuIiIiCisgICAgICAgICMgUmV0dXJucyB1cCB0byBzaXplIGJ5dGVzLiAgSWYgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIHdlCiAgICAgICAgICMgb25seSByZXR1cm4gYnVmZmVyZWQgYnl0ZXMuICBPdGhlcndpc2UsIHdlIGRvIG9uZSByYXcgcmVhZC4KLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgbXVzdCBiZSBwb3NpdGl2ZSIpCi0gICAgICAgIGlmIG4gPT0gMDoKKyAgICAgICAgaWYgc2l6ZSA9PSAwOgogICAgICAgICAgICAgcmV0dXJuIGIiIgogICAgICAgICB3aXRoIHNlbGYuX3JlYWRfbG9jazoKICAgICAgICAgICAgIHNlbGYuX3BlZWtfdW5sb2NrZWQoMSkKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX3VubG9ja2VkKAotICAgICAgICAgICAgICAgIG1pbihuLCBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MpKQorICAgICAgICAgICAgICAgIG1pbihzaXplLCBsZW4oc2VsZi5fcmVhZF9idWYpIC0gc2VsZi5fcmVhZF9wb3MpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBfQnVmZmVyZWRJT01peGluLnRlbGwoc2VsZikgLSBsZW4oc2VsZi5fcmVhZF9idWYpICsgc2VsZi5fcmVhZF9wb3MKQEAgLTEwNzQsNyArMTA4Miw3IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3LCBidWZmZXJfc2l6ZT1ERUZBVUxUX0JVRkZFUl9TSVpFKToKICAgICAgICAgaWYgbm90IHJhdy53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtMTEzOCw3ICsxMTQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXJybm8uRUFHQUlOLAogICAgICAgICAgICAgICAgICAgICAid3JpdGUgY291bGQgbm90IGNvbXBsZXRlIHdpdGhvdXQgYmxvY2tpbmciLCAwKQogICAgICAgICAgICAgaWYgbiA+IGxlbihzZWxmLl93cml0ZV9idWYpIG9yIG4gPCAwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigid3JpdGUoKSByZXR1cm5lZCBpbmNvcnJlY3QgbnVtYmVyIG9mIGJ5dGVzIikKICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9idWZbOm5dCiAKICAgICBkZWYgdGVsbChzZWxmKToKQEAgLTExNzQsMTggKzExODIsMTggQEAKICAgICAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdHdvIFJhd0lPIGluc3RhbmNlcy4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCByZWFkZXIucmVhZGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyZWFkZXIiIGFyZ3VtZW50IG11c3QgYmUgcmVhZGFibGUuJykKIAogICAgICAgICBpZiBub3Qgd3JpdGVyLndyaXRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcid3JpdGVyIiBhcmd1bWVudCBtdXN0IGJlIHdyaXRhYmxlLicpCiAKICAgICAgICAgc2VsZi5yZWFkZXIgPSBCdWZmZXJlZFJlYWRlcihyZWFkZXIsIGJ1ZmZlcl9zaXplKQogICAgICAgICBzZWxmLndyaXRlciA9IEJ1ZmZlcmVkV3JpdGVyKHdyaXRlciwgYnVmZmVyX3NpemUpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQobikKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQoc2l6ZSkKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRpbnRvKGIpCkBAIC0xMTkzLDExICsxMjAxLDExIEBACiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICByZXR1cm4gc2VsZi53cml0ZXIud3JpdGUoYikKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKG4pCisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnBlZWsoc2l6ZSkKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKG4pCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgorICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucmVhZDEoc2l6ZSkKIAogICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWRhYmxlKCkKQEAgLTEyNDgsNyArMTI1Niw3IEBACiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgogICAgICAgICAgICAgc2VsZi5fcmVzZXRfcmVhZF9idWYoKQogICAgICAgICBpZiBwb3MgPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gcG9zCiAKICAgICBkZWYgdGVsbChzZWxmKToKQEAgLTEyNjMsMjMgKzEyNzEsMjMgQEAKICAgICAgICAgIyBVc2Ugc2VlayB0byBmbHVzaCB0aGUgcmVhZCBidWZmZXIuCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFdyaXRlci50cnVuY2F0ZShzZWxmLCBwb3MpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICBpZiBuIGlzIE5vbmU6Ci0gICAgICAgICAgICBuID0gLTEKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkKHNlbGYsIHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZGludG8oc2VsZiwgYikKIAotICAgIGRlZiBwZWVrKHNlbGYsIG49MCk6CisgICAgZGVmIHBlZWsoc2VsZiwgc2l6ZT0wKToKICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5wZWVrKHNlbGYsIHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6CisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemUpOgogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIG4pCisgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkMShzZWxmLCBzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLl9yZWFkX2J1ZjoKQEAgLTEyOTksMTEgKzEzMDcsMTEgQEAKICAgICBhcmUgaW1tdXRhYmxlLiBUaGVyZSBpcyBubyBwdWJsaWMgY29uc3RydWN0b3IuCiAgICAgIiIiCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgIiIiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYXQgbW9zdCBzaXplIGNoYXJhY3RlcnMgZnJvbSBzdHJlYW0sIHdoZXJlIHNpemUgaXMgYW4gaW50LgogCi0gICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIG4gY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgotICAgICAgICBJZiBuIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgorICAgICAgICBSZWFkIGZyb20gdW5kZXJseWluZyBidWZmZXIgdW50aWwgd2UgaGF2ZSBzaXplIGNoYXJhY3RlcnMgb3Igd2UgaGl0IEVPRi4KKyAgICAgICAgSWYgc2l6ZSBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRi4KIAogICAgICAgICBSZXR1cm5zIGEgc3RyaW5nLgogICAgICAgICAiIiIKQEAgLTE3MjcsNyArMTczNSw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKICAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigidGVsbGluZyBwb3NpdGlvbiBkaXNhYmxlZCBieSBuZXh0KCkgY2FsbCIpCiAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICBwb3NpdGlvbiA9IHNlbGYuYnVmZmVyLnRlbGwoKQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlcgpAQCAtMTgxNCw3ICsxODIyLDcgQEAKICAgICAgICAgICAgICAgICBjaGFyc19kZWNvZGVkICs9IGxlbihkZWNvZGVyLmRlY29kZShiJycsIGZpbmFsPVRydWUpKQogICAgICAgICAgICAgICAgIG5lZWRfZW9mID0gMQogICAgICAgICAgICAgICAgIGlmIGNoYXJzX2RlY29kZWQgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZWNvbnN0cnVjdCBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQogCiAgICAgICAgICAgICAjIFRoZSByZXR1cm5lZCBjb29raWUgY29ycmVzcG9uZHMgdG8gdGhlIGxhc3Qgc2FmZSBzdGFydCBwb2ludC4KICAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYWNrX2Nvb2tpZSgKQEAgLTE4OTEsNyArMTg5OSw3IEBACiAKICAgICAgICAgICAgICMgU2tpcCBjaGFyc190b19za2lwIG9mIHRoZSBkZWNvZGVkIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fZGVjb2RlZF9jaGFycykgPCBjaGFyc190b19za2lwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW4ndCByZXN0b3JlIGxvZ2ljYWwgZmlsZSBwb3NpdGlvbiIpCiAgICAgICAgICAgICBzZWxmLl9kZWNvZGVkX2NoYXJzX3VzZWQgPSBjaGFyc190b19za2lwCiAKICAgICAgICAgIyBGaW5hbGx5LCByZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykKQEAgLTE5MDcsMTYgKzE5MTUsMTYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGVyLnJlc2V0KCkKICAgICAgICAgcmV0dXJuIGNvb2tpZQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgICAgICBzaXplLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCiAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKQEAgLTE5MjQsMTIgKzE5MzIsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyB0byByZXR1cm4uCiAgICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUpCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IHNpemUgYW5kIG5vdCBlb2Y6CiAgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUgLSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKQEAgLTE5NDEsMTMgKzE5NDksMTMgQEAKICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKICAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCiAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCkBAIC0yMDA2LDggKzIwMTQsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGxpbmUpID49IHNpemU6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyByZWFjaGVkIGxlbmd0aCBzaXplCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgIyBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIGdldCBtb3JlIGRhdGEnCkBAIC0yMDIyLDggKzIwMzAsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKyAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCBlbmRwb3MgPiBzaXplOgorICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyBkb24ndCBleGNlZWQgc2l6ZQogCiAgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgogICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCkBAIC0yMDU0LDcgKzIwNjIsNiBAQAogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluaXRpYWxfdmFsdWUgbXVzdCBiZSBzdHIgb3IgTm9uZSwgbm90IHswfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKGluaXRpYWxfdmFsdWUpLl9fbmFtZV9fKSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc3RyKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLnNlZWsoMCkKIApkaWZmIC0tZ2l0IGEvTGliL19zaXRlYnVpbHRpbnMucHkgYi9MaWIvX3NpdGVidWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjIxMzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL19zaXRlYnVpbHRpbnMucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiCitUaGUgb2JqZWN0cyB1c2VkIGJ5IHRoZSBzaXRlIG1vZHVsZSB0byBhZGQgY3VzdG9tIGJ1aWx0aW5zLgorIiIiCisKKyMgVGhvc2Ugb2JqZWN0cyBhcmUgYWxtb3N0IGltbW9ydGFsIGFuZCB0aGV5IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlaXIgbW9kdWxlCisjIGdsb2JhbHMuICBEZWZpbmluZyB0aGVtIGluIHRoZSBzaXRlIG1vZHVsZSB3b3VsZCBrZWVwIHRvbyBtYW55IHJlZmVyZW5jZXMKKyMgYWxpdmUuCisjIE5vdGUgdGhpcyBtZWFucyB0aGlzIG1vZHVsZSBzaG91bGQgYWxzbyBhdm9pZCBrZWVwIHRoaW5ncyBhbGl2ZSBpbiBpdHMKKyMgZ2xvYmFscy4KKworaW1wb3J0IHN5cworCitjbGFzcyBRdWl0dGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGVvZik6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5lb2YgPSBlb2YKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBzZWxmLmVvZikKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKKyAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKKyAgICAgICAgIyBzdGRpbiB3cmFwcGVyIGlzIGNsb3NlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCisKKworY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKKyAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCisgICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKKworICAgIE1BWExJTkVTID0gMjMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKKyAgICAgICAgc2VsZi5fX2ZpbGVuYW1lcyA9IFtvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyIGluIGRpcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXNdCisKKyAgICBkZWYgX19zZXR1cChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGRhdGEgPSBOb25lCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZW5hbWVzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19kYXRhCisgICAgICAgIHNlbGYuX19saW5lcyA9IGRhdGEuc3BsaXQoJ1xuJykKKyAgICAgICAgc2VsZi5fX2xpbmVjbnQgPSBsZW4oc2VsZi5fX2xpbmVzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9fc2V0dXAoKQorICAgICAgICBpZiBsZW4oc2VsZi5fX2xpbmVzKSA8PSBzZWxmLk1BWExJTkVTOgorICAgICAgICAgICAgcmV0dXJuICJcbiIuam9pbihzZWxmLl9fbGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlR5cGUgJXMoKSB0byBzZWUgdGhlIGZ1bGwgJXMgdGV4dCIgJSAoKHNlbGYuX19uYW1lLCkqMikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgcHJvbXB0ID0gJ0hpdCBSZXR1cm4gZm9yIG1vcmUsIG9yIHEgKGFuZCBSZXR1cm4pIHRvIHF1aXQ6ICcKKyAgICAgICAgbGluZW5vID0gMAorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxpbmVubywgbGluZW5vICsgc2VsZi5NQVhMSU5FUyk6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHNlbGYuX19saW5lc1tpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGxpbmVubyArPSBzZWxmLk1BWExJTkVTCisgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIGtleSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBpbnB1dChwcm9tcHQpCisgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKCcnLCAncScpOgorICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gTm9uZQorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAncSc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKworY2xhc3MgX0hlbHBlcihvYmplY3QpOgorICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCisgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCisKKyAgICAiIiIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJUeXBlIGhlbHAoKSBmb3IgaW50ZXJhY3RpdmUgaGVscCwgIiBcCisgICAgICAgICAgICAgICAib3IgaGVscChvYmplY3QpIGZvciBoZWxwIGFib3V0IG9iamVjdC4iCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICBpbXBvcnQgcHlkb2MKKyAgICAgICAgcmV0dXJuIHB5ZG9jLmhlbHAoKmFyZ3MsICoqa3dkcykKZGlmZiAtLWdpdCBhL0xpYi9fc3RycHRpbWUucHkgYi9MaWIvX3N0cnB0aW1lLnB5CmluZGV4IDkwNThhNjkuLmQxMDFjNmQgMTAwNjQ0Ci0tLSBhL0xpYi9fc3RycHRpbWUucHkKKysrIGIvTGliL19zdHJwdGltZS5weQpAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGFzIGRhdGV0aW1lX3RpbWV6b25lKQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBfdGhyZWFkX2FsbG9jYXRlX2xvY2sKLWV4Y2VwdDoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCiAKIF9fYWxsX18gPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2FiYy5weSBiL0xpYi9hYmMucHkKaW5kZXggMDk3NzhlOC4uMjY0YzYwYyAxMDA2NDQKLS0tIGEvTGliL2FiYy5weQorKysgYi9MaWIvYWJjLnB5CkBAIC01LDYgKzUsNyBAQAogCiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0CiAKKwogZGVmIGFic3RyYWN0bWV0aG9kKGZ1bmNvYmopOgogICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgbWV0aG9kcy4KIApAQCAtMTI0LDYgKzEyNSw4IEBACiAgICAgIyBBIGdsb2JhbCBjb3VudGVyIHRoYXQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGEgY2xhc3MgaXMKICAgICAjIHJlZ2lzdGVyZWQgYXMgYSB2aXJ0dWFsIHN1YmNsYXNzIG9mIGFueXRoaW5nLiAgSXQgZm9yY2VzIHRoZQogICAgICMgbmVnYXRpdmUgY2FjaGUgdG8gYmUgY2xlYXJlZCBiZWZvcmUgaXRzIG5leHQgdXNlLgorICAgICMgTm90ZTogdGhpcyBjb3VudGVyIGlzIHByaXZhdGUuIFVzZSBgYWJjLmdldF9jYWNoZV90b2tlbigpYCBmb3IKKyAgICAjICAgICAgIGV4dGVybmFsIGNvZGUuCiAgICAgX2FiY19pbnZhbGlkYXRpb25fY291bnRlciA9IDAKIAogICAgIGRlZiBfX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpOgpAQCAtMjI2LDMgKzIyOSwyMCBAQAogICAgICAgICAjIE5vIGRpY2U7IHVwZGF0ZSBuZWdhdGl2ZSBjYWNoZQogICAgICAgICBjbHMuX2FiY19uZWdhdGl2ZV9jYWNoZS5hZGQoc3ViY2xhc3MpCiAgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIEFCQyhtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgIiIiSGVscGVyIGNsYXNzIHRoYXQgcHJvdmlkZXMgYSBzdGFuZGFyZCB3YXkgdG8gY3JlYXRlIGFuIEFCQyB1c2luZworICAgIGluaGVyaXRhbmNlLgorICAgICIiIgorICAgIHBhc3MKKworCitkZWYgZ2V0X2NhY2hlX3Rva2VuKCk6CisgICAgIiIiUmV0dXJucyB0aGUgY3VycmVudCBBQkMgY2FjaGUgdG9rZW4uCisKKyAgICBUaGUgdG9rZW4gaXMgYW4gb3BhcXVlIGludGVnZXIgaWRlbnRpZnlpbmcgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZgorICAgIHRoZSBBQkMgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4gVGhpcyBudW1iZXIgY2hhbmdlcyB3aXRoCisgICAgZXZlcnkgY2FsbCB0byBgYHJlZ2lzdGVyKClgYCBvbiBhbnkgQUJDLgorICAgICIiIgorICAgIHJldHVybiBBQkNNZXRhLl9hYmNfaW52YWxpZGF0aW9uX2NvdW50ZXIKZGlmZiAtLWdpdCBhL0xpYi9haWZjLnB5IGIvTGliL2FpZmMucHkKaW5kZXggODZhNWVkYy4uYzFjOGVhNyAxMDA2NDQKLS0tIGEvTGliL2FpZmMucHkKKysrIGIvTGliL2FpZmMucHkKQEAgLTY5LDcgKzY5LDcgQEAKICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBBSUZGIGZpbGVzKQogICBnZXRjb21wbmFtZSgpICAgLS0gcmV0dXJucyBodW1hbi1yZWFkYWJsZSB2ZXJzaW9uIG9mCiAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBmb3IgQUlGRiBmaWxlcykKLSAgZ2V0cGFyYW1zKCkgLS0gcmV0dXJucyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQorICBnZXRwYXJhbXMoKSAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgZ2V0bWFya2VycygpICAgIC0tIGdldCB0aGUgbGlzdCBvZiBtYXJrcyBpbiB0aGUgYXVkaW8gZmlsZSBvciBOb25lCiAgICAgICAgICAgICAgaWYgdGhlcmUgYXJlIG5vIG1hcmtzCkBAIC0yNTIsNiArMjUyLDExIEBACiAgICAgX3dyaXRlX3Vsb25nKGYsIGxvbWFudCkKIAogZnJvbSBjaHVuayBpbXBvcnQgQ2h1bmsKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX2FpZmNfcGFyYW1zID0gbmFtZWR0dXBsZSgnX2FpZmNfcGFyYW1zJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAKIGNsYXNzIEFpZmNfcmVhZDoKICAgICAjIFZhcmlhYmxlcyB1c2VkIGluIHRoaXMgY2xhc3M6CkBAIC0zMzQsNiArMzM5LDEyIEBACiAgICAgICAgICMgZWxzZSwgYXNzdW1lIGl0IGlzIGFuIG9wZW4gZmlsZSBvYmplY3QgYWxyZWFkeQogICAgICAgICBzZWxmLmluaXRmcChmKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtMzcyLDkgKzM4Myw5IEBACiAjIyAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgaWYgbGVuKHNlbGYuX21hcmtlcnMpID09IDA6CkBAIC01NTEsNiArNTYyLDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNjQ0LDggKzY2MSw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIGlmIGlkIDw9IDA6CkBAIC02NzUsNiArNjkyLDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKGxlbihkYXRhKSkKICAgICAgICAgbmZyYW1lcyA9IGxlbihkYXRhKSAvLyAoc2VsZi5fc2FtcHdpZHRoICogc2VsZi5fbmNoYW5uZWxzKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0OgpAQCAtODczLDggKzg5Miw3IEBACiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKICAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCcvdXNyL2RlbW9zL2RhdGEvYXVkaW8vYmFjaC5haWZmJykKICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgZiA9IG9wZW4oZm4sICdyJykKLSAgICB0cnk6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CiAgICAgICAgIHByaW50KCJSZWFkaW5nIiwgZm4pCiAgICAgICAgIHByaW50KCJuY2hhbm5lbHMgPSIsIGYuZ2V0bmNoYW5uZWxzKCkpCiAgICAgICAgIHByaW50KCJuZnJhbWVzICAgPSIsIGYuZ2V0bmZyYW1lcygpKQpAQCAtODg1LDE2ICs5MDMsMTEgQEAKICAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgogICAgICAgICAgICAgZ24gPSBzeXMuYXJndlsyXQogICAgICAgICAgICAgcHJpbnQoIldyaXRpbmciLCBnbikKLSAgICAgICAgICAgIGcgPSBvcGVuKGduLCAndycpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZ24sICd3JykgYXMgZzoKICAgICAgICAgICAgICAgICBnLnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQogICAgICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWRmcmFtZXMoMTAyNCkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBnLndyaXRlZnJhbWVzKGRhdGEpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGcuY2xvc2UoKQogICAgICAgICAgICAgcHJpbnQoIkRvbmUuIikKLSAgICBmaW5hbGx5OgotICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hcmdwYXJzZS5weSBiL0xpYi9hcmdwYXJzZS5weQppbmRleCBmMjViMWI2Li45NTIwZTBlIDEwMDY0NAotLS0gYS9MaWIvYXJncGFyc2UucHkKKysrIGIvTGliL2FyZ3BhcnNlLnB5CkBAIC02MDYsOCArNjA2LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2luZGVudCgpCi0gICAgICAgICAgICBmb3Igc3ViYWN0aW9uIGluIGdldF9zdWJhY3Rpb25zKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3ViYWN0aW9uCisgICAgICAgICAgICB5aWVsZCBmcm9tIGdldF9zdWJhY3Rpb25zKCkKICAgICAgICAgICAgIHNlbGYuX2RlZGVudCgpCiAKICAgICBkZWYgX3NwbGl0X2xpbmVzKHNlbGYsIHRleHQsIHdpZHRoKToKQEAgLTEwMzgsNyArMTAzNyw4IEBACiAgICAgICAgICAgICB2ZXJzaW9uID0gcGFyc2VyLnZlcnNpb24KICAgICAgICAgZm9ybWF0dGVyID0gcGFyc2VyLl9nZXRfZm9ybWF0dGVyKCkKICAgICAgICAgZm9ybWF0dGVyLmFkZF90ZXh0KHZlcnNpb24pCi0gICAgICAgIHBhcnNlci5leGl0KG1lc3NhZ2U9Zm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkpCisgICAgICAgIHBhcnNlci5fcHJpbnRfbWVzc2FnZShmb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSwgX3N5cy5zdGRvdXQpCisgICAgICAgIHBhcnNlci5leGl0KCkKIAogCiBjbGFzcyBfU3ViUGFyc2Vyc0FjdGlvbihBY3Rpb24pOgpAQCAtMTE0MSwxMSArMTE0MSwxNyBAQAogICAgICAgICAgICAgc2FtZSB2YWx1ZXMgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgogICAgICAgICAtIGJ1ZnNpemUgLS0gVGhlIGZpbGUncyBkZXNpcmVkIGJ1ZmZlciBzaXplLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcwogICAgICAgICAgICAgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGVuY29kaW5nIC0tIFRoZSBmaWxlJ3MgZW5jb2RpbmcuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZQorICAgICAgICAgICAgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gZXJyb3JzIC0tIEEgc3RyaW5nIGluZGljYXRpbmcgaG93IGVuY29kaW5nIGFuZCBkZWNvZGluZyBlcnJvcnMgYXJlIHRvCisgICAgICAgICAgICBiZSBoYW5kbGVkLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIHNlbGYuX2J1ZnNpemUgPSBidWZzaXplCisgICAgICAgIHNlbGYuX2VuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5fZXJyb3JzID0gZXJyb3JzCiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgc3RyaW5nKToKICAgICAgICAgIyB0aGUgc3BlY2lhbCBhcmd1bWVudCAiLSIgbWVhbnMgc3lzLnN0ZHtpbixvdXR9CkBAIC0xMTYwLDE0ICsxMTY2LDE4IEBACiAKICAgICAgICAgIyBhbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIGFzIGZpbGUgbmFtZXMKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplLCBzZWxmLl9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9ycykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBfKCJjYW4ndCBvcGVuICclcyc6ICVzIikKICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50VHlwZUVycm9yKG1lc3NhZ2UgJSAoc3RyaW5nLCBlKSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgYXJncyA9IHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUKLSAgICAgICAgYXJnc19zdHIgPSAnLCAnLmpvaW4ocmVwcihhcmcpIGZvciBhcmcgaW4gYXJncyBpZiBhcmcgIT0gLTEpCisgICAgICAgIGt3YXJncyA9IFsoJ2VuY29kaW5nJywgc2VsZi5fZW5jb2RpbmcpLCAoJ2Vycm9ycycsIHNlbGYuX2Vycm9ycyldCisgICAgICAgIGFyZ3Nfc3RyID0gJywgJy5qb2luKFtyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMV0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJyVzPSVyJyAlIChrdywgYXJnKSBmb3Iga3csIGFyZyBpbiBrd2FyZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFyZyBpcyBub3QgTm9uZV0pCiAgICAgICAgIHJldHVybiAnJXMoJXMpJyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBhcmdzX3N0cikKIAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwMDEsMTcgKzIwMTEsMTQgQEAKICAgICAgICAgICAgICMgcmVwbGFjZSBhcmd1bWVudHMgcmVmZXJlbmNpbmcgZmlsZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlID0gb3Blbihhcmdfc3RyaW5nWzE6XSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oYXJnX3N0cmluZ1sxOl0pIGFzIGFyZ3NfZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW10KICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmdfbGluZSBpbiBhcmdzX2ZpbGUucmVhZCgpLnNwbGl0bGluZXMoKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKGFyZykKICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gc2VsZi5fcmVhZF9hcmdzX2Zyb21fZmlsZXMoYXJnX3N0cmluZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJnX3N0cmluZ3MuZXh0ZW5kKGFyZ19zdHJpbmdzKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCiAKZGlmZiAtLWdpdCBhL0xpYi9hc3QucHkgYi9MaWIvYXN0LnB5CmluZGV4IDEzZjU5ZjkuLjAyYzNiMjggMTAwNjQ0Ci0tLSBhL0xpYi9hc3QucHkKKysrIGIvTGliL2FzdC5weQpAQCAtNDIsNyArNDIsNiBAQAogICAgIFB5dGhvbiBsaXRlcmFsIHN0cnVjdHVyZXM6IHN0cmluZ3MsIGJ5dGVzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywKICAgICBzZXRzLCBib29sZWFucywgYW5kIE5vbmUuCiAgICAgIiIiCi0gICAgX3NhZmVfbmFtZXMgPSB7J05vbmUnOiBOb25lLCAnVHJ1ZSc6IFRydWUsICdGYWxzZSc6IEZhbHNlfQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIHN0cik6CiAgICAgICAgIG5vZGVfb3Jfc3RyaW5nID0gcGFyc2Uobm9kZV9vcl9zdHJpbmcsIG1vZGU9J2V2YWwnKQogICAgIGlmIGlzaW5zdGFuY2Uobm9kZV9vcl9zdHJpbmcsIEV4cHJlc3Npb24pOgpAQCAtNjEsOSArNjAsOCBAQAogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgRGljdCk6CiAgICAgICAgICAgICByZXR1cm4gZGljdCgoX2NvbnZlcnQoayksIF9jb252ZXJ0KHYpKSBmb3IgaywgdgogICAgICAgICAgICAgICAgICAgICAgICAgaW4gemlwKG5vZGUua2V5cywgbm9kZS52YWx1ZXMpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZSk6Ci0gICAgICAgICAgICBpZiBub2RlLmlkIGluIF9zYWZlX25hbWVzOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2FmZV9uYW1lc1tub2RlLmlkXQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgTmFtZUNvbnN0YW50KToKKyAgICAgICAgICAgIHJldHVybiBub2RlLnZhbHVlCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBVbmFyeU9wKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcCwgKFVBZGQsIFVTdWIpKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcGVyYW5kLCAoTnVtLCBVbmFyeU9wLCBCaW5PcCkpOgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaGF0LnB5IGIvTGliL2FzeW5jaGF0LnB5CmluZGV4IGVlYTM0MTguLjAzNzhmYTcgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY2hhdC5weQorKysgYi9MaWIvYXN5bmNoYXQucHkKQEAgLTU2LDggKzU2LDggQEAKIAogICAgICMgdGhlc2UgYXJlIG92ZXJyaWRhYmxlIGRlZmF1bHRzCiAKLSAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDQwOTYKLSAgICBhY19vdXRfYnVmZmVyX3NpemUgICAgICA9IDQwOTYKKyAgICBhY19pbl9idWZmZXJfc2l6ZSAgICAgICA9IDY1NTM2CisgICAgYWNfb3V0X2J1ZmZlcl9zaXplICAgICAgPSA2NTUzNgogCiAgICAgIyB3ZSBkb24ndCB3YW50IHRvIGVuYWJsZSB0aGUgdXNlIG9mIGVuY29kaW5nIGJ5IGRlZmF1bHQsIGJlY2F1c2UgdGhhdCBpcyBhCiAgICAgIyBzaWduIG9mIGFuIGFwcGxpY2F0aW9uIGJ1ZyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gcGFzcyBzaWxlbnRseQpAQCAtMTExLDcgKzExMSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVjdiAoc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybgogCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgICAgICMgc2VuZCB0aGUgZGF0YQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG51bV9zZW50ID0gc2VsZi5zZW5kKGRhdGEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IoKQogICAgICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9fX2luaXRfXy5weSBiL0xpYi9hc3luY2lvL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkMjg4ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQxIEBACisiIiJUaGUgYXN5bmNpbyBwYWNrYWdlLCB0cmFja2luZyBQRVAgMzE1Ni4iIiIKKworaW1wb3J0IHN5cworCisjIFRoZSBzZWxlY3RvcnMgbW9kdWxlIGlzIGluIHRoZSBzdGRsaWIgaW4gUHl0aG9uIDMuNCBidXQgbm90IGluIDMuMy4KKyMgRG8gdGhpcyBmaXJzdCwgc28gdGhlIG90aGVyIHN1Ym1vZHVsZXMgY2FuIHVzZSAiZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMiLgorIyBQcmVmZXIgYXN5bmNpby9zZWxlY3RvcnMucHkgb3ZlciB0aGUgc3RkbGliIG9uZSwgYXMgb3VycyBtYXkgYmUgbmV3ZXIuCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgc2VsZWN0b3JzICAjIFdpbGwgYWxzbyBiZSBleHBvcnRlZC4KKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgIyBTaW1pbGFyIHRoaW5nIGZvciBfb3ZlcmxhcHBlZC4KKyAgICB0cnk6CisgICAgICAgIGZyb20gLiBpbXBvcnQgX292ZXJsYXBwZWQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGltcG9ydCBfb3ZlcmxhcHBlZCAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKKyMgVGhpcyByZWxpZXMgb24gZWFjaCBvZiB0aGUgc3VibW9kdWxlcyBoYXZpbmcgYW4gX19hbGxfXyB2YXJpYWJsZS4KK2Zyb20gLmZ1dHVyZXMgaW1wb3J0ICoKK2Zyb20gLmV2ZW50cyBpbXBvcnQgKgorZnJvbSAubG9ja3MgaW1wb3J0ICoKK2Zyb20gLnRyYW5zcG9ydHMgaW1wb3J0ICoKK2Zyb20gLnByb3RvY29scyBpbXBvcnQgKgorZnJvbSAuc3RyZWFtcyBpbXBvcnQgKgorZnJvbSAudGFza3MgaW1wb3J0ICoKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBmcm9tIC53aW5kb3dzX2V2ZW50cyBpbXBvcnQgKgorZWxzZToKKyAgICBmcm9tIC51bml4X2V2ZW50cyBpbXBvcnQgKiAgIyBwcmFnbWE6IG5vIGNvdmVyCisKKworX19hbGxfXyA9IChmdXR1cmVzLl9fYWxsX18gKworICAgICAgICAgICBldmVudHMuX19hbGxfXyArCisgICAgICAgICAgIGxvY2tzLl9fYWxsX18gKworICAgICAgICAgICB0cmFuc3BvcnRzLl9fYWxsX18gKworICAgICAgICAgICBwcm90b2NvbHMuX19hbGxfXyArCisgICAgICAgICAgIHN0cmVhbXMuX19hbGxfXyArCisgICAgICAgICAgIHRhc2tzLl9fYWxsX18pCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9iYXNlX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDExN2IKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX2V2ZW50cy5weQpAQCAtMCwwICsxLDY0NCBAQAorIiIiQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBldmVudCBsb29wLgorCitUaGUgZXZlbnQgbG9vcCBjYW4gYmUgYnJva2VuIHVwIGludG8gYSBtdWx0aXBsZXhlciAodGhlIHBhcnQKK3Jlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdXMgb2YgSU8gZXZlbnRzKSBhbmQgdGhlIGV2ZW50IGxvb3AgcHJvcGVyLAord2hpY2ggd3JhcHMgYSBtdWx0aXBsZXhlciB3aXRoIGZ1bmN0aW9uYWxpdHkgZm9yIHNjaGVkdWxpbmcgY2FsbGJhY2tzLAoraW1tZWRpYXRlbHkgb3IgYXQgYSBnaXZlbiB0aW1lIGluIHRoZSBmdXR1cmUuCisKK1doZW5ldmVyIGEgcHVibGljIEFQSSB0YWtlcyBhIGNhbGxiYWNrLCBzdWJzZXF1ZW50IHBvc2l0aW9uYWwKK2FyZ3VtZW50cyB3aWxsIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgaWYvd2hlbiBpdCBpcyBjYWxsZWQuICBUaGlzCithdm9pZHMgdGhlIHByb2xpZmVyYXRpb24gb2YgdHJpdmlhbCBsYW1iZGFzIGltcGxlbWVudGluZyBjbG9zdXJlcy4KK0tleXdvcmQgYXJndW1lbnRzIGZvciB0aGUgY2FsbGJhY2sgYXJlIG5vdCBzdXBwb3J0ZWQ7IHRoaXMgaXMgYQorY29uc2Npb3VzIGRlc2lnbiBkZWNpc2lvbiwgbGVhdmluZyB0aGUgZG9vciBvcGVuIGZvciBrZXl3b3JkIGFyZ3VtZW50cwordG8gbW9kaWZ5IHRoZSBtZWFuaW5nIG9mIHRoZSBBUEkgY2FsbCBpdHNlbGYuCisiIiIKKworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKK2ltcG9ydCBoZWFwcQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgc3lzCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnQmFzZUV2ZW50TG9vcCcsICdTZXJ2ZXInXQorCisKKyMgQXJndW1lbnQgZm9yIGRlZmF1bHQgdGhyZWFkIHBvb2wgZXhlY3V0b3IgY3JlYXRpb24uCitfTUFYX1dPUktFUlMgPSA1CisKKworY2xhc3MgX1N0b3BFcnJvcihCYXNlRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgdG8gc3RvcCB0aGUgZXZlbnQgbG9vcC4iIiIKKworCitkZWYgX3JhaXNlX3N0b3BfZXJyb3IoKmFyZ3MpOgorICAgIHJhaXNlIF9TdG9wRXJyb3IKKworCitjbGFzcyBTZXJ2ZXIoZXZlbnRzLkFic3RyYWN0U2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrZXRzKToKKyAgICAgICAgc2VsZi5sb29wID0gbG9vcAorICAgICAgICBzZWxmLnNvY2tldHMgPSBzb2NrZXRzCisgICAgICAgIHNlbGYuYWN0aXZlX2NvdW50ID0gMAorICAgICAgICBzZWxmLndhaXRlcnMgPSBbXQorCisgICAgZGVmIGF0dGFjaChzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBhc3NlcnQgc2VsZi5zb2NrZXRzIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuYWN0aXZlX2NvdW50ICs9IDEKKworICAgIGRlZiBkZXRhY2goc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuYWN0aXZlX2NvdW50ID4gMAorICAgICAgICBzZWxmLmFjdGl2ZV9jb3VudCAtPSAxCisgICAgICAgIGlmIHNlbGYuYWN0aXZlX2NvdW50ID09IDAgYW5kIHNlbGYuc29ja2V0cyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc29ja2V0cyA9IHNlbGYuc29ja2V0cworICAgICAgICBpZiBzb2NrZXRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zb2NrZXRzID0gTm9uZQorICAgICAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICAgICAgaWYgc2VsZi5hY3RpdmVfY291bnQgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLl93YWtldXAoKQorCisgICAgZGVmIF93YWtldXAoc2VsZik6CisgICAgICAgIHdhaXRlcnMgPSBzZWxmLndhaXRlcnMKKyAgICAgICAgc2VsZi53YWl0ZXJzID0gTm9uZQorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh3YWl0ZXIpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNvY2tldHMgaXMgTm9uZSBvciBzZWxmLndhaXRlcnMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi53YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcChldmVudHMuQWJzdHJhY3RFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9yZWFkeSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVkID0gW10KKyAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzID0gMAorICAgICAgICBzZWxmLl9ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBzb2NrZXQgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBTU0wgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgcmVhZCBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSB3cml0ZSBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgc3VicHJvY2VzcyB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcmVhZF9mcm9tX3NlbGYoc2VsZik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgICIiIlhYWCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICAiIiJQcm9jZXNzIHNlbGVjdG9yIGV2ZW50cy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiJSdW4gdW50aWwgc3RvcCgpIGlzIGNhbGxlZC4iIiIKKyAgICAgICAgaWYgc2VsZi5fcnVubmluZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBpcyBydW5uaW5nLicpCisgICAgICAgIHNlbGYuX3J1bm5pbmcgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9ydW5fb25jZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IF9TdG9wRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9ydW5uaW5nID0gRmFsc2UKKworICAgIGRlZiBydW5fdW50aWxfY29tcGxldGUoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgIiIiUnVuIHVudGlsIHRoZSBGdXR1cmUgaXMgZG9uZS4KKworICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBjb3JvdXRpbmUsIGl0IGlzIHdyYXBwZWQgaW4gYSBUYXNrLgorCisgICAgICAgIFhYWCBUQkQ6IEl0IHdvdWxkIGJlIGRpc2FzdHJvdXMgdG8gY2FsbCBydW5fdW50aWxfY29tcGxldGUoKQorICAgICAgICB3aXRoIHRoZSBzYW1lIGNvcm91dGluZSB0d2ljZSAtLSBpdCB3b3VsZCB3cmFwIGl0IGluIHR3bworICAgICAgICBkaWZmZXJlbnQgVGFza3MgYW5kIHRoYXQgY2FuJ3QgYmUgZ29vZC4KKworICAgICAgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIGZ1dHVyZSA9IHRhc2tzLmFzeW5jKGZ1dHVyZSwgbG9vcD1zZWxmKQorICAgICAgICBmdXR1cmUuYWRkX2RvbmVfY2FsbGJhY2soX3JhaXNlX3N0b3BfZXJyb3IpCisgICAgICAgIHNlbGYucnVuX2ZvcmV2ZXIoKQorICAgICAgICBmdXR1cmUucmVtb3ZlX2RvbmVfY2FsbGJhY2soX3JhaXNlX3N0b3BfZXJyb3IpCisgICAgICAgIGlmIG5vdCBmdXR1cmUuZG9uZSgpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFdmVudCBsb29wIHN0b3BwZWQgYmVmb3JlIEZ1dHVyZSBjb21wbGV0ZWQuJykKKworICAgICAgICByZXR1cm4gZnV0dXJlLnJlc3VsdCgpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiU3RvcCBydW5uaW5nIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIEV2ZXJ5IGNhbGxiYWNrIHNjaGVkdWxlZCBiZWZvcmUgc3RvcCgpIGlzIGNhbGxlZCB3aWxsIHJ1bi4KKyAgICAgICAgQ2FsbGJhY2sgc2NoZWR1bGVkIGFmdGVyIHN0b3AoKSBpcyBjYWxsZWQgd29uJ3QuICBIb3dldmVyLAorICAgICAgICB0aG9zZSBjYWxsYmFja3Mgd2lsbCBydW4gaWYgcnVuKCkgaXMgY2FsbGVkIGFnYWluIGxhdGVyLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24oX3JhaXNlX3N0b3BfZXJyb3IpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2xlYXJzIHRoZSBxdWV1ZXMgYW5kIHNodXRzIGRvd24gdGhlIGV4ZWN1dG9yLAorICAgICAgICBidXQgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGV4ZWN1dG9yIHRvIGZpbmlzaC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3JlYWR5LmNsZWFyKCkKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVkLmNsZWFyKCkKKyAgICAgICAgZXhlY3V0b3IgPSBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yCisgICAgICAgIGlmIGV4ZWN1dG9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IE5vbmUKKyAgICAgICAgICAgIGV4ZWN1dG9yLnNodXRkb3duKHdhaXQ9RmFsc2UpCisKKyAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBydW5uaW5nIHN0YXR1cyBvZiBldmVudCBsb29wLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVubmluZworCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZSBhY2NvcmRpbmcgdG8gdGhlIGV2ZW50IGxvb3AncyBjbG9jay4iIiIKKyAgICAgICAgcmV0dXJuIHRpbWUubW9ub3RvbmljKCkKKworICAgIGRlZiBjYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhdCBhIGdpdmVuIHRpbWUuCisKKyAgICAgICAgUmV0dXJuIGEgSGFuZGxlOiBhbiBvcGFxdWUgb2JqZWN0IHdpdGggYSBjYW5jZWwoKSBtZXRob2QgdGhhdAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGwuCisKKyAgICAgICAgVGhlIGRlbGF5IGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQsIGV4cHJlc3NlZCBpbiBzZWNvbmRzLiAgSXQgaXMKKyAgICAgICAgYWx3YXlzIGEgcmVsYXRpdmUgdGltZS4KKworICAgICAgICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZS4gIElmIHR3byBjYWxsYmFja3MKKyAgICAgICAgYXJlIHNjaGVkdWxlZCBmb3IgZXhhY3RseSB0aGUgc2FtZSB0aW1lLCBpdCB1bmRlZmluZWQgd2hpY2gKKyAgICAgICAgd2lsbCBiZSBjYWxsZWQgZmlyc3QuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5jYWxsX2F0KHNlbGYudGltZSgpICsgZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkxpa2UgY2FsbF9sYXRlcigpLCBidXQgdXNlcyBhbiBhYnNvbHV0ZSB0aW1lLiIiIgorICAgICAgICB0aW1lciA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncykKKyAgICAgICAgaGVhcHEuaGVhcHB1c2goc2VsZi5fc2NoZWR1bGVkLCB0aW1lcikKKyAgICAgICAgcmV0dXJuIHRpbWVyCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFycmFuZ2UgZm9yIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUuCisKKyAgICAgICAgVGhpcyBvcGVyYXRlcyBhcyBhIEZJRk8gcXVldWUsIGNhbGxiYWNrcyBhcmUgY2FsbGVkIGluIHRoZQorICAgICAgICBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlCisgICAgICAgIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgICAgICAgQW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIGFmdGVyIHRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0bworICAgICAgICB0aGUgY2FsbGJhY2sgd2hlbiBpdCBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBoYW5kbGUgPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgaGFuZGxlID0gc2VsZi5jYWxsX3Nvb24oY2FsbGJhY2ssICphcmdzKQorICAgICAgICBzZWxmLl93cml0ZV90b19zZWxmKCkKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIHJ1bl9pbl9leGVjdXRvcihzZWxmLCBleGVjdXRvciwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjYWxsYmFjaywgZXZlbnRzLkhhbmRsZSk6CisgICAgICAgICAgICBhc3NlcnQgbm90IGFyZ3MKKyAgICAgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgZXZlbnRzLlRpbWVySGFuZGxlKQorICAgICAgICAgICAgaWYgY2FsbGJhY2suX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IGNhbGxiYWNrLl9jYWxsYmFjaywgY2FsbGJhY2suX2FyZ3MKKyAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleGVjdXRvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoX01BWF9XT1JLRVJTKQorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBleGVjdXRvcgorICAgICAgICByZXR1cm4gZnV0dXJlcy53cmFwX2Z1dHVyZShleGVjdXRvci5zdWJtaXQoY2FsbGJhY2ssICphcmdzKSwgbG9vcD1zZWxmKQorCisgICAgZGVmIHNldF9kZWZhdWx0X2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yKToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9leGVjdXRvciA9IGV4ZWN1dG9yCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0YWRkcmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncykKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0bmFtZWluZm8sIHNvY2thZGRyLCBmbGFncykKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1Ob25lLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lIGFuZCBzc2w6CisgICAgICAgICAgICAjIFVzZSBob3N0IGFzIGRlZmF1bHQgZm9yIHNlcnZlcl9ob3N0bmFtZS4gIEl0IGlzIGFuIGVycm9yCisgICAgICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgb3Igbm90IHNldCwgZS5nLiB3aGVuIGFuCisgICAgICAgICAgICAjIGFscmVhZHktY29ubmVjdGVkIHNvY2tldCB3YXMgcGFzc2VkIG9yIHdoZW4gb25seSBhIHBvcnQKKyAgICAgICAgICAgICMgaXMgZ2l2ZW4uICBUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgY2FuIHBhc3MKKyAgICAgICAgICAgICMgc2VydmVyX2hvc3RuYW1lPScnIC0tIHRoaXMgd2lsbCBieXBhc3MgdGhlIGhvc3RuYW1lCisgICAgICAgICAgICAjIGNoZWNrLiAgKFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIGhvc3QgaXMgYSBudW1lcmljCisgICAgICAgICAgICAjIElQL0lQdjYgYWRkcmVzcywgd2Ugd2lsbCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IGV4YWN0CisgICAgICAgICAgICAjIGFkZHJlc3M7IHRoaXMgd2lsbCBwcm9iYWJseSBmYWlsLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgICAgICAgICAgICMgY3JlYXRlIGEgY2VydGlmaWNhdGUgZm9yIGEgc3BlY2lmaWMgSVAgYWRkcmVzcywgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QganVkZ2UgaXQgaGVyZS4pCisgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdZb3UgbXVzdCBzZXQgc2VydmVyX2hvc3RuYW1lICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHVzaW5nIHNzbCB3aXRob3V0IGEgaG9zdCcpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBob3N0CisKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZSBvciBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBmMSA9IHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgZnMgPSBbZjFdCisgICAgICAgICAgICBpZiBsb2NhbF9hZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2FkZHIsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgZnMuYXBwZW5kKGYyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmMiA9IE5vbmUKKworICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy53YWl0KGZzLCBsb29wPXNlbGYpCisKKyAgICAgICAgICAgIGluZm9zID0gZjEucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorICAgICAgICAgICAgaWYgZjIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGFkZHJfaW5mb3MgPSBmMi5yZXN1bHQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfLCBfLCBfLCBfLCBsYWRkciBpbiBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YyA9IE9TRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuZXJybm8sICdlcnJvciB3aGlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0ZW1wdGluZyB0byBiaW5kIG9uIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn06IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFkZHIsIGV4Yy5zdHJlcnJvci5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGxlbihleGNlcHRpb25zKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0aGV5IGFsbCBoYXZlIHRoZSBzYW1lIHN0cigpLCByYWlzZSBvbmUuCisgICAgICAgICAgICAgICAgICAgIG1vZGVsID0gc3RyKGV4Y2VwdGlvbnNbMF0pCisgICAgICAgICAgICAgICAgICAgIGlmIGFsbChzdHIoZXhjKSA9PSBtb2RlbCBmb3IgZXhjIGluIGV4Y2VwdGlvbnMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorICAgICAgICAgICAgICAgICAgICAjIFJhaXNlIGEgY29tYmluZWQgZXhjZXB0aW9uIHNvIHRoZSB1c2VyIGNhbiBzZWUgYWxsCisgICAgICAgICAgICAgICAgICAgICMgdGhlIHZhcmlvdXMgZXJyb3IgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ011bHRpcGxlIGV4Y2VwdGlvbnM6IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAnLCAnLmpvaW4oc3RyKGV4YykgZm9yIGV4YyBpbiBleGNlcHRpb25zKSkpCisKKyAgICAgICAgZWxpZiBzb2NrIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICdob3N0IGFuZCBwb3J0IHdhcyBub3Qgc3BlY2lmaWVkIGFuZCBubyBzb2NrIHNwZWNpZmllZCcpCisKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKworICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIGlmIHNzbDoKKyAgICAgICAgICAgIHNzbGNvbnRleHQgPSBOb25lIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKSBlbHNlIHNzbAorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHdhaXRlcikKKworICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIGNvbm5lY3Rpb24uIiIiCisgICAgICAgIGlmIG5vdCAobG9jYWxfYWRkciBvciByZW1vdGVfYWRkcik6CisgICAgICAgICAgICBpZiBmYW1pbHkgPT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmV4cGVjdGVkIGFkZHJlc3MgZmFtaWx5JykKKyAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9ICgoKGZhbWlseSwgcHJvdG8pLCAoTm9uZSwgTm9uZSkpLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgam9pbiBhZGRyZXNzcyBieSAoZmFtaWx5LCBwcm90b2NvbCkKKyAgICAgICAgICAgIGFkZHJfaW5mb3MgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgICAgICBmb3IgaWR4LCBhZGRyIGluICgoMCwgbG9jYWxfYWRkciksICgxLCByZW1vdGVfYWRkcikpOgorICAgICAgICAgICAgICAgIGlmIGFkZHIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGFkZHIsIHR1cGxlKSBhbmQgbGVuKGFkZHIpID09IDIsICgKKyAgICAgICAgICAgICAgICAgICAgICAgICcyLXR1cGxlIGlzIGV4cGVjdGVkJykKKworICAgICAgICAgICAgICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgICphZGRyLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorCisgICAgICAgICAgICAgICAgICAgIGZvciBmYW0sIF8sIHBybywgXywgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IChmYW0sIHBybykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV0gPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfaW5mb3Nba2V5XVtpZHhdID0gYWRkcmVzcworCisgICAgICAgICAgICAjIGVhY2ggYWRkciBoYXMgdG8gaGF2ZSBpbmZvIGZvciBlYWNoIChmYW1pbHksIHByb3RvKSBwYWlyCisgICAgICAgICAgICBhZGRyX3BhaXJzX2luZm8gPSBbCisgICAgICAgICAgICAgICAgKGtleSwgYWRkcl9wYWlyKSBmb3Iga2V5LCBhZGRyX3BhaXIgaW4gYWRkcl9pbmZvcy5pdGVtcygpCisgICAgICAgICAgICAgICAgaWYgbm90ICgobG9jYWxfYWRkciBhbmQgYWRkcl9wYWlyWzBdIGlzIE5vbmUpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3RlX2FkZHIgYW5kIGFkZHJfcGFpclsxXSBpcyBOb25lKSldCisKKyAgICAgICAgICAgIGlmIG5vdCBhZGRyX3BhaXJzX2luZm86CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FuIG5vdCBnZXQgYWRkcmVzcyBpbmZvcm1hdGlvbicpCisKKyAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yICgoZmFtaWx5LCBwcm90byksCisgICAgICAgICAgICAgKGxvY2FsX2FkZHJlc3MsIHJlbW90ZV9hZGRyZXNzKSkgaW4gYWRkcl9wYWlyc19pbmZvOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWZhbWlseSwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgICAgICAgICBpZiBsb2NhbF9hZGRyOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQobG9jYWxfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBpZiByZW1vdGVfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCByZW1vdGVfYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgcl9hZGRyID0gcmVtb3RlX2FkZHJlc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc29jaywgcHJvdG9jb2wsIHJfYWRkcikKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAqLAorICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLAorICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBiYWNrbG9nPTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIEFGX0lORVQ2ID0gZ2V0YXR0cihzb2NrZXQsICdBRl9JTkVUNicsIDApCisgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcyA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nCisgICAgICAgICAgICBzb2NrZXRzID0gW10KKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJyc6CisgICAgICAgICAgICAgICAgaG9zdCA9IE5vbmUKKworICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBpZiBub3QgaW5mb3M6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgY29tcGxldGVkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgcmVzIGluIGluZm9zOgorICAgICAgICAgICAgICAgICAgICBhZiwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNhID0gcmVzCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGFmLCBzb2NrdHlwZSwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEFzc3VtZSBpdCdzIGEgYmFkIGZhbWlseS90eXBlL3Byb3RvY29sIGNvbWJpbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0cy5hcHBlbmQoc29jaykKKyAgICAgICAgICAgICAgICAgICAgaWYgcmV1c2VfYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICAjIERpc2FibGUgSVB2NC9JUHY2IGR1YWwgc3RhY2sgc3VwcG9ydCAoZW5hYmxlZCBieQorICAgICAgICAgICAgICAgICAgICAjIGRlZmF1bHQgb24gTGludXgpIHdoaWNoIG1ha2VzIGEgc2luZ2xlIHNvY2tldAorICAgICAgICAgICAgICAgICAgICAjIGxpc3RlbiBvbiBib3RoIGFkZHJlc3MgZmFtaWxpZXMuCisgICAgICAgICAgICAgICAgICAgIGlmIGFmID09IEFGX0lORVQ2IGFuZCBoYXNhdHRyKHNvY2tldCwgJ0lQUFJPVE9fSVBWNicpOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LklQVjZfVjZPTkxZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIuZXJybm8sICdlcnJvciB3aGlsZSBhdHRlbXB0aW5nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJpbmQgb24gYWRkcmVzcyAlcjogJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNhLCBlcnIuc3RyZXJyb3IubG93ZXIoKSkpCisgICAgICAgICAgICAgICAgY29tcGxldGVkID0gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBpZiBub3QgY29tcGxldGVkOgorICAgICAgICAgICAgICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzb2NrIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ2hvc3QgYW5kIHBvcnQgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2tldHMgPSBbc29ja10KKworICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXIoc2VsZiwgc29ja2V0cykKKyAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZyhwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2wsIHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgY29ubmVjdF93cml0ZV9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKyAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgYXNzZXJ0IG5vdCB1bml2ZXJzYWxfbmV3bGluZXMsICJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIKKyAgICAgICAgYXNzZXJ0IHNoZWxsLCAic2hlbGwgbXVzdCBiZSBUcnVlIgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjbWQsIHN0ciksIGNtZAorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFuc3BvcnQgPSB5aWVsZCBmcm9tIHNlbGYuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoCisgICAgICAgICAgICBwcm90b2NvbCwgY21kLCBUcnVlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBzdWJwcm9jZXNzX2V4ZWMoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgKmFyZ3MsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9RmFsc2UsIHNoZWxsPUZhbHNlLCBidWZzaXplPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncyk6CisgICAgICAgIGFzc2VydCBub3QgdW5pdmVyc2FsX25ld2xpbmVzLCAidW5pdmVyc2FsX25ld2xpbmVzIG11c3QgYmUgRmFsc2UiCisgICAgICAgIGFzc2VydCBub3Qgc2hlbGwsICJzaGVsbCBtdXN0IGJlIEZhbHNlIgorICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICB0cmFuc3BvcnQgPSB5aWVsZCBmcm9tIHNlbGYuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoCisgICAgICAgICAgICBwcm90b2NvbCwgYXJncywgRmFsc2UsIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBkZWYgX2FkZF9jYWxsYmFjayhzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJBZGQgYSBIYW5kbGUgdG8gcmVhZHkgb3Igc2NoZWR1bGVkLiIiIgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShoYW5kbGUsIGV2ZW50cy5IYW5kbGUpLCAnQSBIYW5kbGUgaXMgcmVxdWlyZWQgaGVyZScKKyAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShoYW5kbGUsIGV2ZW50cy5UaW1lckhhbmRsZSk6CisgICAgICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9zY2hlZHVsZWQsIGhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisKKyAgICBkZWYgX2FkZF9jYWxsYmFja19zaWduYWxzYWZlKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICIiIkxpa2UgX2FkZF9jYWxsYmFjaygpIGJ1dCBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiIiIgorICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2soaGFuZGxlKQorICAgICAgICBzZWxmLl93cml0ZV90b19zZWxmKCkKKworICAgIGRlZiBfcnVuX29uY2Uoc2VsZik6CisgICAgICAgICIiIlJ1biBvbmUgZnVsbCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgVGhpcyBjYWxscyBhbGwgY3VycmVudGx5IHJlYWR5IGNhbGxiYWNrcywgcG9sbHMgZm9yIEkvTywKKyAgICAgICAgc2NoZWR1bGVzIHRoZSByZXN1bHRpbmcgY2FsbGJhY2tzLCBhbmQgZmluYWxseSBzY2hlZHVsZXMKKyAgICAgICAgJ2NhbGxfbGF0ZXInIGNhbGxiYWNrcy4KKyAgICAgICAgIiIiCisgICAgICAgICMgUmVtb3ZlIGRlbGF5ZWQgY2FsbHMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBmcm9tIGhlYWQgb2YgcXVldWUuCisgICAgICAgIHdoaWxlIHNlbGYuX3NjaGVkdWxlZCBhbmQgc2VsZi5fc2NoZWR1bGVkWzBdLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBoZWFwcS5oZWFwcG9wKHNlbGYuX3NjaGVkdWxlZCkKKworICAgICAgICB0aW1lb3V0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9yZWFkeToKKyAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgIGVsaWYgc2VsZi5fc2NoZWR1bGVkOgorICAgICAgICAgICAgIyBDb21wdXRlIHRoZSBkZXNpcmVkIHRpbWVvdXQuCisgICAgICAgICAgICB3aGVuID0gc2VsZi5fc2NoZWR1bGVkWzBdLl93aGVuCisgICAgICAgICAgICBkZWFkbGluZSA9IG1heCgwLCB3aGVuIC0gc2VsZi50aW1lKCkpCisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBtaW4odGltZW91dCwgZGVhZGxpbmUpCisKKyAgICAgICAgIyBUT0RPOiBJbnN0cnVtZW50YXRpb24gb25seSBpbiBkZWJ1ZyBtb2RlPworICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgIGV2ZW50X2xpc3QgPSBzZWxmLl9zZWxlY3Rvci5zZWxlY3QodGltZW91dCkKKyAgICAgICAgdDEgPSBzZWxmLnRpbWUoKQorICAgICAgICBhcmdzdHIgPSAnJyBpZiB0aW1lb3V0IGlzIE5vbmUgZWxzZSAnezouM2Z9Jy5mb3JtYXQodGltZW91dCkKKyAgICAgICAgaWYgdDEtdDAgPj0gMToKKyAgICAgICAgICAgIGxldmVsID0gbG9nZ2luZy5JTkZPCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwgJ3BvbGwlcyB0b29rICUuM2Ygc2Vjb25kcycsIGFyZ3N0ciwgdDEtdDApCisgICAgICAgIHNlbGYuX3Byb2Nlc3NfZXZlbnRzKGV2ZW50X2xpc3QpCisKKyAgICAgICAgIyBIYW5kbGUgJ2xhdGVyJyBjYWxsYmFja3MgdGhhdCBhcmUgcmVhZHkuCisgICAgICAgIG5vdyA9IHNlbGYudGltZSgpCisgICAgICAgIHdoaWxlIHNlbGYuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYuX3NjaGVkdWxlZFswXQorICAgICAgICAgICAgaWYgaGFuZGxlLl93aGVuID4gbm93OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBoYW5kbGUgPSBoZWFwcS5oZWFwcG9wKHNlbGYuX3NjaGVkdWxlZCkKKyAgICAgICAgICAgIHNlbGYuX3JlYWR5LmFwcGVuZChoYW5kbGUpCisKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGNhbGxiYWNrcyBhcmUgYWN0dWFsbHkgKmNhbGxlZCouCisgICAgICAgICMgQWxsIG90aGVyIHBsYWNlcyBqdXN0IGFkZCB0aGVtIHRvIHJlYWR5LgorICAgICAgICAjIE5vdGU6IFdlIHJ1biBhbGwgY3VycmVudGx5IHNjaGVkdWxlZCBjYWxsYmFja3MsIGJ1dCBub3QgYW55CisgICAgICAgICMgY2FsbGJhY2tzIHNjaGVkdWxlZCBieSBjYWxsYmFja3MgcnVuIHRoaXMgdGltZSBhcm91bmQgLS0KKyAgICAgICAgIyB0aGV5IHdpbGwgYmUgcnVuIHRoZSBuZXh0IHRpbWUgKGFmdGVyIGFub3RoZXIgSS9PIHBvbGwpLgorICAgICAgICAjIFVzZSBhbiBpZGlvbSB0aGF0IGlzIHRocmVhZHNhZmUgd2l0aG91dCB1c2luZyBsb2Nrcy4KKyAgICAgICAgbnRvZG8gPSBsZW4oc2VsZi5fcmVhZHkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG50b2RvKToKKyAgICAgICAgICAgIGhhbmRsZSA9IHNlbGYuX3JlYWR5LnBvcGxlZnQoKQorICAgICAgICAgICAgaWYgbm90IGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIGhhbmRsZS5fcnVuKCkKKyAgICAgICAgaGFuZGxlID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2Vfc3VicHJvY2Vzcy5weSBiL0xpYi9hc3luY2lvL2Jhc2Vfc3VicHJvY2Vzcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTVmYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5CkBAIC0wLDAgKzEsMTY2IEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKKworCitTVERJTiA9IDAKK1NURE9VVCA9IDEKK1NUREVSUiA9IDIKKworCitjbGFzcyBCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCh0cmFuc3BvcnRzLlN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgICAgICBzZWxmLl9waXBlcyA9IHt9CisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzW1NURElOXSA9IE5vbmUKKyAgICAgICAgaWYgc3Rkb3V0ID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzW1NURE9VVF0gPSBOb25lCisgICAgICAgIGlmIHN0ZGVyciA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1tTVERFUlJdID0gTm9uZQorICAgICAgICBzZWxmLl9wZW5kaW5nX2NhbGxzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9maW5pc2hlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX3N0YXJ0KGFyZ3M9YXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9leHRyYVsnc3VicHJvY2VzcyddID0gc2VsZi5fcHJvYworCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV93cml0ZV9zdWJwcm9jZXNzX3BpcGVfcHJvdG8oc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2VfcmVhZF9zdWJwcm9jZXNzX3BpcGVfcHJvdG8oc2VsZiwgZmQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKToKKyAgICAgICAgICAgIHByb3RvLnBpcGUuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2MucGlkCisKKyAgICBkZWYgZ2V0X3JldHVybmNvZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5jb2RlCisKKyAgICBkZWYgZ2V0X3BpcGVfdHJhbnNwb3J0KHNlbGYsIGZkKToKKyAgICAgICAgaWYgZmQgaW4gc2VsZi5fcGlwZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGlwZXNbZmRdLnBpcGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fcHJvYy5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9wcm9jLnRlcm1pbmF0ZSgpCisKKyAgICBkZWYga2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fcHJvYy5raWxsKCkKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgX3Bvc3RfaW5pdChzZWxmKToKKyAgICAgICAgcHJvYyA9IHNlbGYuX3Byb2MKKyAgICAgICAgbG9vcCA9IHNlbGYuX2xvb3AKKyAgICAgICAgaWYgcHJvYy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF93cml0ZV9waXBlKAorICAgICAgICAgICAgICAgIGxhbWJkYTogV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIFNURElOKSwKKyAgICAgICAgICAgICAgICBwcm9jLnN0ZGluKQorICAgICAgICBpZiBwcm9jLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBSZWFkU3VicHJvY2Vzc1BpcGVQcm90byhzZWxmLCBTVERPVVQpLAorICAgICAgICAgICAgICAgIHByb2Muc3Rkb3V0KQorICAgICAgICBpZiBwcm9jLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBSZWFkU3VicHJvY2Vzc1BpcGVQcm90byhzZWxmLCBTVERFUlIpLAorICAgICAgICAgICAgICAgIHByb2Muc3RkZXJyKQorICAgICAgICBpZiBub3Qgc2VsZi5fcGlwZXM6CisgICAgICAgICAgICBzZWxmLl90cnlfY29ubmVjdGVkKCkKKworICAgIGRlZiBfY2FsbChzZWxmLCBjYiwgKmRhdGEpOgorICAgICAgICBpZiBzZWxmLl9wZW5kaW5nX2NhbGxzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ19jYWxscy5hcHBlbmQoKGNiLCBkYXRhKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNiLCAqZGF0YSkKKworICAgIGRlZiBfdHJ5X2Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BlbmRpbmdfY2FsbHMgaXMgbm90IE5vbmUKKyAgICAgICAgaWYgYWxsKHAgaXMgbm90IE5vbmUgYW5kIHAuY29ubmVjdGVkIGZvciBwIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpKToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgICAgIGZvciBjYWxsYmFjaywgZGF0YSBpbiBzZWxmLl9wZW5kaW5nX2NhbGxzOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAqZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBOb25lCisKKyAgICBkZWYgX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0LCBmZCwgZXhjKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQsIGZkLCBkYXRhKQorCisgICAgZGVmIF9wcm9jZXNzX2V4aXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgYXNzZXJ0IHJldHVybmNvZGUgaXMgbm90IE5vbmUsIHJldHVybmNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZSwgc2VsZi5fcmV0dXJuY29kZQorICAgICAgICBzZWxmLl9yZXR1cm5jb2RlID0gcmV0dXJuY29kZQorICAgICAgICBzZWxmLl9sb29wLl9zdWJwcm9jZXNzX2Nsb3NlZChzZWxmKQorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnByb2Nlc3NfZXhpdGVkKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfdHJ5X2ZpbmlzaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9maW5pc2hlZAorICAgICAgICBpZiBzZWxmLl9yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgYWxsKHAgaXMgbm90IE5vbmUgYW5kIHAuZGlzY29ubmVjdGVkCisgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9waXBlcy52YWx1ZXMoKSk6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcHJvYyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8ocHJvdG9jb2xzLkJhc2VQcm90b2NvbCk6CisgICAgcGlwZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jLCBmZCk6CisgICAgICAgIHNlbGYucHJvYyA9IHByb2MKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBwcm9jLl9waXBlc1tmZF0gPSBzZWxmCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gVHJ1ZQorICAgICAgICBzZWxmLnBpcGUgPSB0cmFuc3BvcnQKKyAgICAgICAgc2VsZi5wcm9jLl90cnlfY29ubmVjdGVkKCkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYucHJvYy5fcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZi5mZCwgZXhjKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFJlYWRTdWJwcm9jZXNzUGlwZVByb3RvKFdyaXRlU3VicHJvY2Vzc1BpcGVQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29scy5Qcm90b2NvbCk6CisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5wcm9jLl9waXBlX2RhdGFfcmVjZWl2ZWQoc2VsZi5mZCwgZGF0YSkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2NvbnN0YW50cy5weSBiL0xpYi9hc3luY2lvL2NvbnN0YW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWUxMjMyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5CkBAIC0wLDAgKzEsNyBAQAorIiIiQ29uc3RhbnRzLiIiIgorCisjIEFmdGVyIHRoZSBjb25uZWN0aW9uIGlzIGxvc3QsIGxvZyB3YXJuaW5ncyBhZnRlciB0aGlzIG1hbnkgd3JpdGUoKXMuCitMT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVMgPSA1CisKKyMgU2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXRyeWluZyBhY2NlcHQoKS4KK0FDQ0VQVF9SRVRSWV9ERUxBWSA9IDEKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQwMDE5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZXZlbnRzLnB5CkBAIC0wLDAgKzEsNDM4IEBACisiIiJFdmVudCBsb29wIGFuZCBldmVudCBsb29wIHBvbGljeS4iIiIKKworX19hbGxfXyA9IFsnQWJzdHJhY3RFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICAnQWJzdHJhY3RFdmVudExvb3AnLCAnQWJzdHJhY3RTZXJ2ZXInLAorICAgICAgICAgICAnSGFuZGxlJywgJ1RpbWVySGFuZGxlJywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wX3BvbGljeScsICdzZXRfZXZlbnRfbG9vcF9wb2xpY3knLAorICAgICAgICAgICAnZ2V0X2V2ZW50X2xvb3AnLCAnc2V0X2V2ZW50X2xvb3AnLCAnbmV3X2V2ZW50X2xvb3AnLAorICAgICAgICAgICAnZ2V0X2NoaWxkX3dhdGNoZXInLCAnc2V0X2NoaWxkX3dhdGNoZXInLAorICAgICAgICAgICBdCisKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgc29ja2V0CisKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgSGFuZGxlOgorICAgICIiIk9iamVjdCByZXR1cm5lZCBieSBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYmFjaywgYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gJ0hhbmRsZSh7fSwge30pJy5mb3JtYXQoc2VsZi5fY2FsbGJhY2ssIHNlbGYuX2FyZ3MpCisgICAgICAgIGlmIHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHJlcyArPSAnPGNhbmNlbGxlZD4nCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKworICAgIGRlZiBfcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaygqc2VsZi5fYXJncykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0V4Y2VwdGlvbiBpbiBjYWxsYmFjayAlcyAlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCitkZWYgbWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpOgorICAgICMgVE9ETzogSW5saW5lIHRoaXM/ICBPciBtYWtlIGl0IGEgcHJpdmF0ZSBFdmVudExvb3AgbWV0aG9kPworICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShjYWxsYmFjaywgSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIG5vdCBhIGNhbGxiYWNrJworICAgIHJldHVybiBIYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisKKworY2xhc3MgVGltZXJIYW5kbGUoSGFuZGxlKToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgdGltZWQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2hlbiwgY2FsbGJhY2ssIGFyZ3MpOgorICAgICAgICBhc3NlcnQgd2hlbiBpcyBub3QgTm9uZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxiYWNrLCBhcmdzKQorCisgICAgICAgIHNlbGYuX3doZW4gPSB3aGVuCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9ICdUaW1lckhhbmRsZSh7fSwge30sIHt9KScuZm9ybWF0KHNlbGYuX3doZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hcmdzKQorICAgICAgICBpZiBzZWxmLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICByZXMgKz0gJzxjYW5jZWxsZWQ+JworCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fd2hlbikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fd2hlbiA8IG90aGVyLl93aGVuCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgc2VsZi5fd2hlbiA8IG90aGVyLl93aGVuOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX19lcV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl93aGVuID4gb3RoZXIuX3doZW4KKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl93aGVuID4gb3RoZXIuX3doZW46CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGltZXJIYW5kbGUpOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl93aGVuID09IG90aGVyLl93aGVuIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsYmFjayA9PSBvdGhlci5fY2FsbGJhY2sgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPT0gb3RoZXIuX2FyZ3MgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9PSBvdGhlci5fY2FuY2VsbGVkKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBlcXVhbCA9IHNlbGYuX19lcV9fKG90aGVyKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQgaWYgZXF1YWwgaXMgTm90SW1wbGVtZW50ZWQgZWxzZSBub3QgZXF1YWwKKworCitjbGFzcyBBYnN0cmFjdFNlcnZlcjoKKyAgICAiIiJBYnN0cmFjdCBzZXJ2ZXIgcmV0dXJuZWQgYnkgY3JlYXRlX3NlcnZlcigpLiIiIgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHNlcnZpbmcuICBUaGlzIGxlYXZlcyBleGlzdGluZyBjb25uZWN0aW9ucyBvcGVuLiIiIgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiB3YWl0X2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiQ29yb3V0aW5lIHRvIHdhaXQgdW50aWwgc2VydmljZSBpcyBjbG9zZWQuIiIiCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wOgorICAgICIiIkFic3RyYWN0IGV2ZW50IGxvb3AuIiIiCisKKyAgICAjIFJ1bm5pbmcgYW5kIHN0b3BwaW5nIHRoZSBldmVudCBsb29wLgorCisgICAgZGVmIHJ1bl9mb3JldmVyKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIGV2ZW50IGxvb3AgdW50aWwgc3RvcCgpIGlzIGNhbGxlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLCBmdXR1cmUpOgorICAgICAgICAiIiJSdW4gdGhlIGV2ZW50IGxvb3AgdW50aWwgYSBGdXR1cmUgaXMgZG9uZS4KKworICAgICAgICBSZXR1cm4gdGhlIEZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2UgaXRzIGV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHRoZSBldmVudCBsb29wIGFzIHNvb24gYXMgcmVhc29uYWJsZS4KKworICAgICAgICBFeGFjdGx5IGhvdyBzb29uIHRoYXQgaXMgbWF5IGRlcGVuZCBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dAorICAgICAgICBubyBtb3JlIEkvTyBjYWxsYmFja3Mgc2hvdWxkIGJlIHNjaGVkdWxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gd2hldGhlciB0aGUgZXZlbnQgbG9vcCBpcyBjdXJyZW50bHkgcnVubmluZy4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgbG9vcC4KKworICAgICAgICBUaGUgbG9vcCBzaG91bGQgbm90IGJlIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBpcyBpZGVtcG90ZW50IGFuZCBpcnJldmVyc2libGUuCisKKyAgICAgICAgTm8gb3RoZXIgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoaXMgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBNZXRob2RzIHNjaGVkdWxpbmcgY2FsbGJhY2tzLiAgQWxsIHRoZXNlIHJldHVybiBIYW5kbGVzLgorCisgICAgZGVmIGNhbGxfc29vbihzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5jYWxsX2xhdGVyKDAsIGNhbGxiYWNrLCAqYXJncykKKworICAgIGRlZiBjYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBNZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRocmVhZHMuCisKKyAgICBkZWYgY2FsbF9zb29uX3RocmVhZHNhZmUoc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl9pbl9leGVjdXRvcihzZWxmLCBleGVjdXRvciwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9kZWZhdWx0X2V4ZWN1dG9yKHNlbGYsIGV4ZWN1dG9yKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBOZXR3b3JrIEkvTyBtZXRob2RzIHJldHVybmluZyBGdXR1cmVzLgorCisgICAgZGVmIGdldGFkZHJpbmZvKHNlbGYsIGhvc3QsIHBvcnQsICosIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0bmFtZWluZm8oc2VsZiwgc29ja2FkZHIsIGZsYWdzPTApOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD1Ob25lLCBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwgc29jaz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9zZXJ2ZXIoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2tldC5BRl9VTlNQRUMsIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFLAorICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwgYmFja2xvZz0xMDAsIHNzbD1Ob25lLCByZXVzZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICAiIiJBIGNvcm91dGluZSB3aGljaCBjcmVhdGVzIGEgVENQIHNlcnZlciBib3VuZCB0byBob3N0IGFuZCBwb3J0LgorCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBTZXJ2ZXIgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AKKyAgICAgICAgdGhlIHNlcnZpY2UuCisKKyAgICAgICAgSWYgaG9zdCBpcyBhbiBlbXB0eSBzdHJpbmcgb3IgTm9uZSBhbGwgaW50ZXJmYWNlcyBhcmUgYXNzdW1lZAorICAgICAgICBhbmQgYSBsaXN0IG9mIG11bHRpcGxlIHNvY2tldHMgd2lsbCBiZSByZXR1cm5lZCAobW9zdCBsaWtlbHkKKyAgICAgICAgb25lIGZvciBJUHY0IGFuZCBhbm90aGVyIG9uZSBmb3IgSVB2NikuCisKKyAgICAgICAgZmFtaWx5IGNhbiBiZSBzZXQgdG8gZWl0aGVyIEFGX0lORVQgb3IgQUZfSU5FVDYgdG8gZm9yY2UgdGhlCisgICAgICAgIHNvY2tldCB0byB1c2UgSVB2NCBvciBJUHY2LiBJZiBub3Qgc2V0IGl0IHdpbGwgYmUgZGV0ZXJtaW5lZAorICAgICAgICBmcm9tIGhvc3QgKGRlZmF1bHRzIHRvIEFGX1VOU1BFQykuCisKKyAgICAgICAgZmxhZ3MgaXMgYSBiaXRtYXNrIGZvciBnZXRhZGRyaW5mbygpLgorCisgICAgICAgIHNvY2sgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nCisgICAgICAgIHNvY2tldCBvYmplY3QuCisKKyAgICAgICAgYmFja2xvZyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIHBhc3NlZCB0bworICAgICAgICBsaXN0ZW4oKSAoZGVmYXVsdHMgdG8gMTAwKS4KKworICAgICAgICBzc2wgY2FuIGJlIHNldCB0byBhbiBTU0xDb250ZXh0IHRvIGVuYWJsZSBTU0wgb3ZlciB0aGUKKyAgICAgICAgYWNjZXB0ZWQgY29ubmVjdGlvbnMuCisKKyAgICAgICAgcmV1c2VfYWRkcmVzcyB0ZWxscyB0aGUga2VybmVsIHRvIHJldXNlIGEgbG9jYWwgc29ja2V0IGluCisgICAgICAgIFRJTUVfV0FJVCBzdGF0ZSwgd2l0aG91dCB3YWl0aW5nIGZvciBpdHMgbmF0dXJhbCB0aW1lb3V0IHRvCisgICAgICAgIGV4cGlyZS4gSWYgbm90IHNwZWNpZmllZCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIFRydWUgb24KKyAgICAgICAgVU5JWC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgcmVtb3RlX2FkZHI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBQaXBlcyBhbmQgc3VicHJvY2Vzc2VzLgorCisgICAgZGVmIGNvbm5lY3RfcmVhZF9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICAiIiJSZWdpc3RlciByZWFkIHBpcGUgaW4gZXZlbnRsb29wLgorCisgICAgICAgIHByb3RvY29sX2ZhY3Rvcnkgc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIFByb3RvY29sIGludGVyZmFjZS4KKyAgICAgICAgcGlwZSBpcyBmaWxlLWxpa2Ugb2JqZWN0IGFscmVhZHkgc3dpdGNoZWQgdG8gbm9uYmxvY2tpbmcuCisgICAgICAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnQKKyAgICAgICAgUmVhZFRyYW5zcG9ydCBpbnRlcmZhY2UuIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY29ubmVjdF93cml0ZV9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICAiIiJSZWdpc3RlciB3cml0ZSBwaXBlIGluIGV2ZW50bG9vcC4KKworICAgICAgICBwcm90b2NvbF9mYWN0b3J5IHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCBCYXNlUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBQaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgICAgICBXcml0ZVRyYW5zcG9ydCBpbnRlcmZhY2UuIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN1YnByb2Nlc3NfZXhlYyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCAqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBSZWFkeS1iYXNlZCBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4KKyAgICAjIFRoZSBhZGRfKigpIG1ldGhvZHMgcmV0dXJuIE5vbmUuCisgICAgIyBUaGUgcmVtb3ZlXyooKSBtZXRob2RzIHJldHVybiBUcnVlIGlmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCwKKyAgICAjIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRlbGV0ZS4KKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ29tcGxldGlvbiBiYXNlZCBJL08gbWV0aG9kcyByZXR1cm5pbmcgRnV0dXJlcy4KKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbmJ5dGVzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFNpZ25hbCBoYW5kbGluZy4KKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeToKKyAgICAiIiJBYnN0cmFjdCBwb2xpY3kgZm9yIGFjY2Vzc2luZyB0aGUgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBuZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ2hpbGQgcHJvY2Vzc2VzIGhhbmRsaW5nIChVbml4IG9ubHkpLgorCisgICAgZGVmIGdldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9jaGlsZF93YXRjaGVyKHNlbGYsIHdhdGNoZXIpOgorICAgICAgICAiIiJYWFgiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIEJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KEFic3RyYWN0RXZlbnRMb29wUG9saWN5KToKKyAgICAiIiJEZWZhdWx0IHBvbGljeSBpbXBsZW1lbnRhdGlvbiBmb3IgYWNjZXNzaW5nIHRoZSBldmVudCBsb29wLgorCisgICAgSW4gdGhpcyBwb2xpY3ksIGVhY2ggdGhyZWFkIGhhcyBpdHMgb3duIGV2ZW50IGxvb3AuICBIb3dldmVyLCB3ZQorICAgIG9ubHkgYXV0b21hdGljYWxseSBjcmVhdGUgYW4gZXZlbnQgbG9vcCBieSBkZWZhdWx0IGZvciB0aGUgbWFpbgorICAgIHRocmVhZDsgb3RoZXIgdGhyZWFkcyBieSBkZWZhdWx0IGhhdmUgbm8gZXZlbnQgbG9vcC4KKworICAgIE90aGVyIHBvbGljaWVzIG1heSBoYXZlIGRpZmZlcmVudCBydWxlcyAoZS5nLiBhIHNpbmdsZSBnbG9iYWwKKyAgICBldmVudCBsb29wLCBvciBhdXRvbWF0aWNhbGx5IGNyZWF0aW5nIGFuIGV2ZW50IGxvb3AgcGVyIHRocmVhZCwgb3IKKyAgICB1c2luZyBzb21lIG90aGVyIG5vdGlvbiBvZiBjb250ZXh0IHRvIHdoaWNoIGFuIGV2ZW50IGxvb3AgaXMKKyAgICBhc3NvY2lhdGVkKS4KKyAgICAiIiIKKworICAgIF9sb29wX2ZhY3RvcnkgPSBOb25lCisKKyAgICBjbGFzcyBfTG9jYWwodGhyZWFkaW5nLmxvY2FsKToKKyAgICAgICAgX2xvb3AgPSBOb25lCisgICAgICAgIF9zZXRfY2FsbGVkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9jYWwgPSBzZWxmLl9Mb2NhbCgpCisKKyAgICBkZWYgZ2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIG1heSBiZSBOb25lIG9yIGFuIGluc3RhbmNlIG9mIEV2ZW50TG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChzZWxmLl9sb2NhbC5fbG9vcCBpcyBOb25lIGFuZAorICAgICAgICAgICAgbm90IHNlbGYuX2xvY2FsLl9zZXRfY2FsbGVkIGFuZAorICAgICAgICAgICAgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgdGhyZWFkaW5nLl9NYWluVGhyZWFkKSk6CisgICAgICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubmV3X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2xvY2FsLl9sb29wIGlzIG5vdCBOb25lLCBcCisgICAgICAgICAgICAgICAoJ1RoZXJlIGlzIG5vIGN1cnJlbnQgZXZlbnQgbG9vcCBpbiB0aHJlYWQgJXIuJyAlCisgICAgICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2FsLl9sb29wCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcC4iIiIKKyAgICAgICAgc2VsZi5fbG9jYWwuX3NldF9jYWxsZWQgPSBUcnVlCisgICAgICAgIGFzc2VydCBsb29wIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShsb29wLCBBYnN0cmFjdEV2ZW50TG9vcCkKKyAgICAgICAgc2VsZi5fbG9jYWwuX2xvb3AgPSBsb29wCisKKyAgICBkZWYgbmV3X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBldmVudCBsb29wLgorCisgICAgICAgIFlvdSBtdXN0IGNhbGwgc2V0X2V2ZW50X2xvb3AoKSB0byBtYWtlIHRoaXMgdGhlIGN1cnJlbnQgZXZlbnQKKyAgICAgICAgbG9vcC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb29wX2ZhY3RvcnkoKQorCisKKyMgRXZlbnQgbG9vcCBwb2xpY3kuICBUaGUgcG9saWN5IGl0c2VsZiBpcyBhbHdheXMgZ2xvYmFsLCBldmVuIGlmIHRoZQorIyBwb2xpY3kncyBydWxlcyBzYXkgdGhhdCB0aGVyZSBpcyBhbiBldmVudCBsb29wIHBlciB0aHJlYWQgKG9yIG90aGVyCisjIG5vdGlvbiBvZiBjb250ZXh0KS4gIFRoZSBkZWZhdWx0IHBvbGljeSBpcyBpbnN0YWxsZWQgYnkgdGhlIGZpcnN0CisjIGNhbGwgdG8gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuCitfZXZlbnRfbG9vcF9wb2xpY3kgPSBOb25lCisKKyMgTG9jayBmb3IgcHJvdGVjdGluZyB0aGUgb24tdGhlLWZseSBjcmVhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcCBwb2xpY3kuCitfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKworCitkZWYgX2luaXRfZXZlbnRfbG9vcF9wb2xpY3koKToKKyAgICBnbG9iYWwgX2V2ZW50X2xvb3BfcG9saWN5CisgICAgd2l0aCBfbG9jazoKKyAgICAgICAgaWYgX2V2ZW50X2xvb3BfcG9saWN5IGlzIE5vbmU6ICAjIHByYWdtYTogbm8gYnJhbmNoCisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IERlZmF1bHRFdmVudExvb3BQb2xpY3kKKyAgICAgICAgICAgIF9ldmVudF9sb29wX3BvbGljeSA9IERlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisKK2RlZiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKToKKyAgICAiIiJYWFgiIiIKKyAgICBpZiBfZXZlbnRfbG9vcF9wb2xpY3kgaXMgTm9uZToKKyAgICAgICAgX2luaXRfZXZlbnRfbG9vcF9wb2xpY3koKQorICAgIHJldHVybiBfZXZlbnRfbG9vcF9wb2xpY3kKKworCitkZWYgc2V0X2V2ZW50X2xvb3BfcG9saWN5KHBvbGljeSk6CisgICAgIiIiWFhYIiIiCisgICAgZ2xvYmFsIF9ldmVudF9sb29wX3BvbGljeQorICAgIGFzc2VydCBwb2xpY3kgaXMgTm9uZSBvciBpc2luc3RhbmNlKHBvbGljeSwgQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgX2V2ZW50X2xvb3BfcG9saWN5ID0gcG9saWN5CisKKworZGVmIGdldF9ldmVudF9sb29wKCk6CisgICAgIiIiWFhYIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9ldmVudF9sb29wKCkKKworCitkZWYgc2V0X2V2ZW50X2xvb3AobG9vcCk6CisgICAgIiIiWFhYIiIiCisgICAgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworCitkZWYgbmV3X2V2ZW50X2xvb3AoKToKKyAgICAiIiJYWFgiIiIKKyAgICByZXR1cm4gZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkubmV3X2V2ZW50X2xvb3AoKQorCisKK2RlZiBnZXRfY2hpbGRfd2F0Y2hlcigpOgorICAgICIiIlhYWCIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKworZGVmIHNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpOgorICAgICIiIlhYWCIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vZnV0dXJlcy5weSBiL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQzZTcxOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Z1dHVyZXMucHkKQEAgLTAsMCArMSwzNDMgQEAKKyIiIkEgRnV0dXJlIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBpbiBQRVAgMzE0OC4iIiIKKworX19hbGxfXyA9IFsnQ2FuY2VsbGVkRXJyb3InLCAnVGltZW91dEVycm9yJywKKyAgICAgICAgICAgJ0ludmFsaWRTdGF0ZUVycm9yJywKKyAgICAgICAgICAgJ0Z1dHVyZScsICd3cmFwX2Z1dHVyZScsCisgICAgICAgICAgIF0KKworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcy5fYmFzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKyMgU3RhdGVzIGZvciBGdXR1cmUuCitfUEVORElORyA9ICdQRU5ESU5HJworX0NBTkNFTExFRCA9ICdDQU5DRUxMRUQnCitfRklOSVNIRUQgPSAnRklOSVNIRUQnCisKKyMgVE9ETzogRG8gd2UgcmVhbGx5IHdhbnQgdG8gZGVwZW5kIG9uIGNvbmN1cnJlbnQuZnV0dXJlcyBpbnRlcm5hbHM/CitFcnJvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5fYmFzZS5FcnJvcgorQ2FuY2VsbGVkRXJyb3IgPSBjb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IKK1RpbWVvdXRFcnJvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaW1lb3V0RXJyb3IKKworU1RBQ0tfREVCVUcgPSBsb2dnaW5nLkRFQlVHIC0gMSAgIyBoZWF2eS1kdXR5IGRlYnVnZ2luZworCisKK2NsYXNzIEludmFsaWRTdGF0ZUVycm9yKEVycm9yKToKKyAgICAiIiJUaGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc3RhdGUuIiIiCisgICAgIyBUT0RPOiBTaG93IHRoZSBmdXR1cmUsIGl0cyBzdGF0ZSwgdGhlIG1ldGhvZCwgYW5kIHRoZSByZXF1aXJlZCBzdGF0ZS4KKworCitjbGFzcyBfVHJhY2ViYWNrTG9nZ2VyOgorICAgICIiIkhlbHBlciB0byBsb2cgYSB0cmFjZWJhY2sgdXBvbiBkZXN0cnVjdGlvbiBpZiBub3QgY2xlYXJlZC4KKworICAgIFRoaXMgc29sdmVzIGEgbmFzdHkgcHJvYmxlbSB3aXRoIEZ1dHVyZXMgYW5kIFRhc2tzIHRoYXQgaGF2ZSBhbgorICAgIGV4Y2VwdGlvbiBzZXQ6IGlmIG5vYm9keSBhc2tzIGZvciB0aGUgZXhjZXB0aW9uLCB0aGUgZXhjZXB0aW9uIGlzCisgICAgbmV2ZXIgbG9nZ2VkLiAgVGhpcyB2aW9sYXRlcyB0aGUgWmVuIG9mIFB5dGhvbjogJ0Vycm9ycyBzaG91bGQKKyAgICBuZXZlciBwYXNzIHNpbGVudGx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc2lsZW5jZWQuJworCisgICAgSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBsb2cgdGhlIGV4Y2VwdGlvbiBhcyBzb29uIGFzCisgICAgc2V0X2V4Y2VwdGlvbigpIGlzIGNhbGxlZDogaWYgdGhlIGNhbGxpbmcgY29kZSBpcyB3cml0dGVuCisgICAgcHJvcGVybHksIGl0IHdpbGwgZ2V0IHRoZSBleGNlcHRpb24gYW5kIGhhbmRsZSBpdCBwcm9wZXJseS4gIEJ1dAorICAgIHdlICpkbyogd2FudCB0byBsb2cgaXQgaWYgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkgd2FzIG5ldmVyIGNhbGxlZAorICAgIC0tIG90aGVyd2lzZSBkZXZlbG9wZXJzIHdhc3RlIGEgbG90IG9mIHRpbWUgd29uZGVyaW5nIHdoeSB0aGVpcgorICAgIGJ1Z2d5IGNvZGUgZmFpbHMgc2lsZW50bHkuCisKKyAgICBBbiBlYXJsaWVyIGF0dGVtcHQgYWRkZWQgYSBfX2RlbF9fKCkgbWV0aG9kIHRvIHRoZSBGdXR1cmUgY2xhc3MKKyAgICBpdHNlbGYsIGJ1dCB0aGlzIGJhY2tmaXJlZCBiZWNhdXNlIHRoZSBwcmVzZW5jZSBvZiBfX2RlbF9fKCkKKyAgICBwcmV2ZW50cyBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSBicmVha2luZyBjeWNsZXMuICBBIHdheSBvdXQgb2YKKyAgICB0aGlzIGNhdGNoLTIyIGlzIHRvIGF2b2lkIGhhdmluZyBhIF9fZGVsX18oKSBtZXRob2Qgb24gdGhlIEZ1dHVyZQorICAgIGNsYXNzIGl0c2VsZiwgYnV0IGluc3RlYWQgdG8gaGF2ZSBhIHJlZmVyZW5jZSB0byBhIGhlbHBlciBvYmplY3QKKyAgICB3aXRoIGEgX19kZWxfXygpIG1ldGhvZCB0aGF0IGxvZ3MgdGhlIHRyYWNlYmFjaywgd2hlcmUgd2UgZW5zdXJlCisgICAgdGhhdCB0aGUgaGVscGVyIG9iamVjdCBkb2Vzbid0IHBhcnRpY2lwYXRlIGluIGN5Y2xlcywgYW5kIG9ubHkgdGhlCisgICAgRnV0dXJlIGhhcyBhIHJlZmVyZW5jZSB0byBpdC4KKworICAgIFRoZSBoZWxwZXIgb2JqZWN0IGlzIGFkZGVkIHdoZW4gc2V0X2V4Y2VwdGlvbigpIGlzIGNhbGxlZC4gIFdoZW4KKyAgICB0aGUgRnV0dXJlIGlzIGNvbGxlY3RlZCwgYW5kIHRoZSBoZWxwZXIgaXMgcHJlc2VudCwgdGhlIGhlbHBlcgorICAgIG9iamVjdCBpcyBhbHNvIGNvbGxlY3RlZCwgYW5kIGl0cyBfX2RlbF9fKCkgbWV0aG9kIHdpbGwgbG9nIHRoZQorICAgIHRyYWNlYmFjay4gIFdoZW4gdGhlIEZ1dHVyZSdzIHJlc3VsdCgpIG9yIGV4Y2VwdGlvbigpIG1ldGhvZCBpcworICAgIGNhbGxlZCAoYW5kIGEgaGVscGVyIG9iamVjdCBpcyBwcmVzZW50KSwgaXQgcmVtb3ZlcyB0aGUgdGhlIGhlbHBlcgorICAgIG9iamVjdCwgYWZ0ZXIgY2FsbGluZyBpdHMgY2xlYXIoKSBtZXRob2QgdG8gcHJldmVudCBpdCBmcm9tCisgICAgbG9nZ2luZy4KKworICAgIE9uZSBkb3duc2lkZSBpcyB0aGF0IHdlIGRvIGEgZmFpciBhbW91bnQgb2Ygd29yayB0byBleHRyYWN0IHRoZQorICAgIHRyYWNlYmFjayBmcm9tIHRoZSBleGNlcHRpb24sIGV2ZW4gd2hlbiBpdCBpcyBuZXZlciBsb2dnZWQuICBJdAorICAgIHdvdWxkIHNlZW0gY2hlYXBlciB0byBqdXN0IHN0b3JlIHRoZSBleGNlcHRpb24gb2JqZWN0LCBidXQgdGhhdAorICAgIHJlZmVyZW5jZXMgdGhlIHRyYWNlYmFjaywgd2hpY2ggcmVmZXJlbmNlcyBzdGFjayBmcmFtZXMsIHdoaWNoIG1heQorICAgIHJlZmVyZW5jZSB0aGUgRnV0dXJlLCB3aGljaCByZWZlcmVuY2VzIHRoZSBfVHJhY2ViYWNrTG9nZ2VyLCBhbmQKKyAgICB0aGVuIHRoZSBfVHJhY2ViYWNrTG9nZ2VyIHdvdWxkIGJlIGluY2x1ZGVkIGluIGEgY3ljbGUsIHdoaWNoIGlzCisgICAgd2hhdCB3ZSdyZSB0cnlpbmcgdG8gYXZvaWQhICBBcyBhbiBvcHRpbWl6YXRpb24sIHdlIGRvbid0CisgICAgaW1tZWRpYXRlbHkgZm9ybWF0IHRoZSBleGNlcHRpb247IHdlIG9ubHkgZG8gdGhlIHdvcmsgd2hlbgorICAgIGFjdGl2YXRlKCkgaXMgY2FsbGVkLCB3aGljaCBjYWxsIGlzIGRlbGF5ZWQgdW50aWwgYWZ0ZXIgYWxsIHRoZQorICAgIEZ1dHVyZSdzIGNhbGxiYWNrcyBoYXZlIHJ1bi4gIFNpbmNlIHVzdWFsbHkgYSBGdXR1cmUgaGFzIGF0IGxlYXN0CisgICAgb25lIGNhbGxiYWNrICh0eXBpY2FsbHkgc2V0IGJ5ICd5aWVsZCBmcm9tJykgYW5kIHVzdWFsbHkgdGhhdAorICAgIGNhbGxiYWNrIGV4dHJhY3RzIHRoZSBjYWxsYmFjaywgdGhlcmVieSByZW1vdmluZyB0aGUgbmVlZCB0bworICAgIGZvcm1hdCB0aGUgZXhjZXB0aW9uLgorCisgICAgUFMuIEkgZG9uJ3QgY2xhaW0gY3JlZGl0IGZvciB0aGlzIHNvbHV0aW9uLiAgSSBmaXJzdCBoZWFyZCBvZiBpdAorICAgIGluIGEgZGlzY3Vzc2lvbiBhYm91dCBjbG9zaW5nIGZpbGVzIHdoZW4gdGhleSBhcmUgY29sbGVjdGVkLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gWydleGMnLCAndGInXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIHNlbGYudGIgPSBOb25lCisKKyAgICBkZWYgYWN0aXZhdGUoc2VsZik6CisgICAgICAgIGV4YyA9IHNlbGYuZXhjCisgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZXhjID0gTm9uZQorICAgICAgICAgICAgc2VsZi50YiA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Yy5fX2NsYXNzX18sIGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuX190cmFjZWJhY2tfXykKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgc2VsZi5leGMgPSBOb25lCisgICAgICAgIHNlbGYudGIgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50YjoKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignRnV0dXJlL1Rhc2sgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWQ6XG4lcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgJycuam9pbihzZWxmLnRiKSkKKworCitjbGFzcyBGdXR1cmU6CisgICAgIiIiVGhpcyBjbGFzcyBpcyAqYWxtb3N0KiBjb21wYXRpYmxlIHdpdGggY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4KKworICAgIERpZmZlcmVuY2VzOgorCisgICAgLSByZXN1bHQoKSBhbmQgZXhjZXB0aW9uKCkgZG8gbm90IHRha2UgYSB0aW1lb3V0IGFyZ3VtZW50IGFuZAorICAgICAgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldC4KKworICAgIC0gQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBhZGRfZG9uZV9jYWxsYmFjaygpIGFyZSBhbHdheXMgY2FsbGVkCisgICAgICB2aWEgdGhlIGV2ZW50IGxvb3AncyBjYWxsX3Nvb25fdGhyZWFkc2FmZSgpLgorCisgICAgLSBUaGlzIGNsYXNzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkKKyAgICAgIG1ldGhvZHMgaW4gdGhlIGNvbmN1cnJlbnQuZnV0dXJlcyBwYWNrYWdlLgorCisgICAgKEluIFB5dGhvbiAzLjQgb3IgbGF0ZXIgd2UgbWF5IGJlIGFibGUgdG8gdW5pZnkgdGhlIGltcGxlbWVudGF0aW9ucy4pCisgICAgIiIiCisKKyAgICAjIENsYXNzIHZhcmlhYmxlcyBzZXJ2aW5nIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSB2YXJpYWJsZXMuCisgICAgX3N0YXRlID0gX1BFTkRJTkcKKyAgICBfcmVzdWx0ID0gTm9uZQorICAgIF9leGNlcHRpb24gPSBOb25lCisgICAgX2xvb3AgPSBOb25lCisKKyAgICBfYmxvY2tpbmcgPSBGYWxzZSAgIyBwcm9wZXIgdXNlIG9mIGZ1dHVyZSAoeWllbGQgdnMgeWllbGQgZnJvbSkKKworICAgIF90Yl9sb2dnZXIgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgZnV0dXJlLgorCisgICAgICAgIFRoZSBvcHRpb25hbCBldmVudF9sb29wIGFyZ3VtZW50IGFsbG93cyB0byBleHBsaWNpdGx5IHNldCB0aGUgZXZlbnQKKyAgICAgICAgbG9vcCBvYmplY3QgdXNlZCBieSB0aGUgZnV0dXJlLiBJZiBpdCdzIG5vdCBwcm92aWRlZCwgdGhlIGZ1dHVyZSB1c2VzCisgICAgICAgIHRoZSBkZWZhdWx0IGV2ZW50IGxvb3AuCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2NhbGxiYWNrcyA9IFtdCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXMgKz0gJzxleGNlcHRpb249eyFyfT4nLmZvcm1hdChzZWxmLl9leGNlcHRpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcyArPSAnPHJlc3VsdD17IXJ9PicuZm9ybWF0KHNlbGYuX3Jlc3VsdCkKKyAgICAgICAgZWxpZiBzZWxmLl9jYWxsYmFja3M6CisgICAgICAgICAgICBzaXplID0gbGVuKHNlbGYuX2NhbGxiYWNrcykKKyAgICAgICAgICAgIGlmIHNpemUgPiAyOgorICAgICAgICAgICAgICAgIHJlcyArPSAnPHt9LCBbe30sIDx7fSBtb3JlPiwge31dPicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSwgc2VsZi5fY2FsbGJhY2tzWzBdLAorICAgICAgICAgICAgICAgICAgICBzaXplLTIsIHNlbGYuX2NhbGxiYWNrc1stMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlcyArPSAnPHt9LCB7fT4nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZi5fY2FsbGJhY2tzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzICs9ICc8e30+Jy5mb3JtYXQoc2VsZi5fc3RhdGUpCisgICAgICAgIHJldHVybiByZXMKKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgICIiIkNhbmNlbCB0aGUgZnV0dXJlIGFuZCBzY2hlZHVsZSBjYWxsYmFja3MuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgb3IgY2FuY2VsbGVkLCByZXR1cm4gRmFsc2UuICBPdGhlcndpc2UsCisgICAgICAgIGNoYW5nZSB0aGUgZnV0dXJlJ3Mgc3RhdGUgdG8gY2FuY2VsbGVkLCBzY2hlZHVsZSB0aGUgY2FsbGJhY2tzIGFuZAorICAgICAgICByZXR1cm4gVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX3N0YXRlID0gX0NBTkNFTExFRAorICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9zY2hlZHVsZV9jYWxsYmFja3Moc2VsZik6CisgICAgICAgICIiIkludGVybmFsOiBBc2sgdGhlIGV2ZW50IGxvb3AgdG8gY2FsbCBhbGwgY2FsbGJhY2tzLgorCisgICAgICAgIFRoZSBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4gQWxzbworICAgICAgICBjbGVhcnMgdGhlIGNhbGxiYWNrIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBjYWxsYmFja3MgPSBzZWxmLl9jYWxsYmFja3NbOl0KKyAgICAgICAgaWYgbm90IGNhbGxiYWNrczoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2NhbGxiYWNrc1s6XSA9IFtdCisgICAgICAgIGZvciBjYWxsYmFjayBpbiBjYWxsYmFja3M6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYWxsYmFjaywgc2VsZikKKworICAgIGRlZiBjYW5jZWxsZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBmdXR1cmUgd2FzIGNhbmNlbGxlZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlID09IF9DQU5DRUxMRUQKKworICAgICMgRG9uJ3QgaW1wbGVtZW50IHJ1bm5pbmcoKTsgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxODY5OQorCisgICAgZGVmIGRvbmUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBmdXR1cmUgaXMgZG9uZS4KKworICAgICAgICBEb25lIG1lYW5zIGVpdGhlciB0aGF0IGEgcmVzdWx0IC8gZXhjZXB0aW9uIGFyZSBhdmFpbGFibGUsIG9yIHRoYXQgdGhlCisgICAgICAgIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HCisKKyAgICBkZWYgcmVzdWx0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlc3VsdCB0aGlzIGZ1dHVyZSByZXByZXNlbnRzLgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaGFzIGJlZW4gY2FuY2VsbGVkLCByYWlzZXMgQ2FuY2VsbGVkRXJyb3IuICBJZiB0aGUKKyAgICAgICAgZnV0dXJlJ3MgcmVzdWx0IGlzbid0IHlldCBhdmFpbGFibGUsIHJhaXNlcyBJbnZhbGlkU3RhdGVFcnJvci4gIElmCisgICAgICAgIHRoZSBmdXR1cmUgaXMgZG9uZSBhbmQgaGFzIGFuIGV4Y2VwdGlvbiBzZXQsIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9DQU5DRUxMRUQ6CisgICAgICAgICAgICByYWlzZSBDYW5jZWxsZWRFcnJvcgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfRklOSVNIRUQ6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcignUmVzdWx0IGlzIG5vdCByZWFkeS4nKQorICAgICAgICBpZiBzZWxmLl90Yl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdAorCisgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBleGNlcHRpb24gdGhhdCB3YXMgc2V0IG9uIHRoaXMgZnV0dXJlLgorCisgICAgICAgIFRoZSBleGNlcHRpb24gKG9yIE5vbmUgaWYgbm8gZXhjZXB0aW9uIHdhcyBzZXQpIGlzIHJldHVybmVkIG9ubHkgaWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lLiAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcworICAgICAgICBDYW5jZWxsZWRFcnJvci4gIElmIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9DQU5DRUxMRUQ6CisgICAgICAgICAgICByYWlzZSBDYW5jZWxsZWRFcnJvcgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfRklOSVNIRUQ6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcignRXhjZXB0aW9uIGlzIG5vdCBzZXQuJykKKyAgICAgICAgaWYgc2VsZi5fdGJfbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyLmNsZWFyKCkKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlciA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgZGVmIGFkZF9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgIiIiQWRkIGEgY2FsbGJhY2sgdG8gYmUgcnVuIHdoZW4gdGhlIGZ1dHVyZSBiZWNvbWVzIGRvbmUuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGZ1dHVyZSBvYmplY3QuIElmCisgICAgICAgIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHRoZSBjYWxsYmFjayBpcworICAgICAgICBzY2hlZHVsZWQgd2l0aCBjYWxsX3Nvb24uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGZuLCBzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2tzLmFwcGVuZChmbikKKworICAgICMgTmV3IG1ldGhvZCBub3QgaW4gUEVQIDMxNDguCisKKyAgICBkZWYgcmVtb3ZlX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAiIiJSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBhIGNhbGxiYWNrIGZyb20gdGhlICJjYWxsIHdoZW4gZG9uZSIgbGlzdC4KKworICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2FsbGJhY2tzIHJlbW92ZWQuCisgICAgICAgICIiIgorICAgICAgICBmaWx0ZXJlZF9jYWxsYmFja3MgPSBbZiBmb3IgZiBpbiBzZWxmLl9jYWxsYmFja3MgaWYgZiAhPSBmbl0KKyAgICAgICAgcmVtb3ZlZF9jb3VudCA9IGxlbihzZWxmLl9jYWxsYmFja3MpIC0gbGVuKGZpbHRlcmVkX2NhbGxiYWNrcykKKyAgICAgICAgaWYgcmVtb3ZlZF9jb3VudDoKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrc1s6XSA9IGZpbHRlcmVkX2NhbGxiYWNrcworICAgICAgICByZXR1cm4gcmVtb3ZlZF9jb3VudAorCisgICAgIyBTby1jYWxsZWQgaW50ZXJuYWwgbWV0aG9kcyAobm90ZTogbm8gc2V0X3J1bm5pbmdfb3Jfbm90aWZ5X2NhbmNlbCgpKS4KKworICAgIGRlZiBzZXRfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAgICIiIk1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgaXRzIHJlc3VsdC4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgcmFpc2VzCisgICAgICAgIEludmFsaWRTdGF0ZUVycm9yLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcigne306IHshcn0nLmZvcm1hdChzZWxmLl9zdGF0ZSwgc2VsZikpCisgICAgICAgIHNlbGYuX3Jlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9GSU5JU0hFRAorICAgICAgICBzZWxmLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjZXB0aW9uKToKKyAgICAgICAgIiIiTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBhbiBleGNlcHRpb24uCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ3t9OiB7IXJ9Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYpKQorICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gX1RyYWNlYmFja0xvZ2dlcihleGNlcHRpb24pCisgICAgICAgIHNlbGYuX3N0YXRlID0gX0ZJTklTSEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisgICAgICAgICMgQXJyYW5nZSBmb3IgdGhlIGxvZ2dlciB0byBiZSBhY3RpdmF0ZWQgYWZ0ZXIgYWxsIGNhbGxiYWNrcworICAgICAgICAjIGhhdmUgaGFkIGEgY2hhbmNlIHRvIGNhbGwgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkuCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3RiX2xvZ2dlci5hY3RpdmF0ZSkKKworICAgICMgVHJ1bHkgaW50ZXJuYWwgbWV0aG9kcy4KKworICAgIGRlZiBfY29weV9zdGF0ZShzZWxmLCBvdGhlcik6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0byBjb3B5IHN0YXRlIGZyb20gYW5vdGhlciBGdXR1cmUuCisKKyAgICAgICAgVGhlIG90aGVyIEZ1dHVyZSBtYXkgYmUgYSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG90aGVyLmRvbmUoKQorICAgICAgICBpZiBzZWxmLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5kb25lKCkKKyAgICAgICAgaWYgb3RoZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBzZWxmLmNhbmNlbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGNlcHRpb24gPSBvdGhlci5leGNlcHRpb24oKQorICAgICAgICAgICAgaWYgZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X2V4Y2VwdGlvbihleGNlcHRpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG90aGVyLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfcmVzdWx0KHJlc3VsdCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgc2VsZi5fYmxvY2tpbmcgPSBUcnVlCisgICAgICAgICAgICB5aWVsZCBzZWxmICAjIFRoaXMgdGVsbHMgVGFzayB0byB3YWl0IGZvciBjb21wbGV0aW9uLgorICAgICAgICBhc3NlcnQgc2VsZi5kb25lKCksICJ5aWVsZCBmcm9tIHdhc24ndCB1c2VkIHdpdGggZnV0dXJlIgorICAgICAgICByZXR1cm4gc2VsZi5yZXN1bHQoKSAgIyBNYXkgcmFpc2UgdG9vLgorCisKK2RlZiB3cmFwX2Z1dHVyZShmdXQsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV3JhcCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlIG9iamVjdC4iIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1dCwgRnV0dXJlKToKKyAgICAgICAgcmV0dXJuIGZ1dAorICAgIGFzc2VydCBpc2luc3RhbmNlKGZ1dCwgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSksIFwKKyAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgaXMgZXhwZWN0ZWQsIGdvdCB7IXJ9Jy5mb3JtYXQoZnV0KQorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgbmV3X2Z1dHVyZSA9IEZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgX2NoZWNrX2NhbmNlbF9vdGhlcihmKToKKyAgICAgICAgaWYgZi5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorCisgICAgbmV3X2Z1dHVyZS5hZGRfZG9uZV9jYWxsYmFjayhfY2hlY2tfY2FuY2VsX290aGVyKQorICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjaygKKyAgICAgICAgbGFtYmRhIGZ1dHVyZTogbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZSgKKyAgICAgICAgICAgIG5ld19mdXR1cmUuX2NvcHlfc3RhdGUsIGZ1dCkpCisgICAgcmV0dXJuIG5ld19mdXR1cmUKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2xvY2tzLnB5IGIvTGliL2FzeW5jaW8vbG9ja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkNjc3OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2xvY2tzLnB5CkBAIC0wLDAgKzEsNDMzIEBACisiIiJTeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcy4iIiIKKworX19hbGxfXyA9IFsnTG9jaycsICdFdmVudCcsICdDb25kaXRpb24nLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnXQorCitpbXBvcnQgY29sbGVjdGlvbnMKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCB0YXNrcworCisKK2NsYXNzIExvY2s6CisgICAgIiIiUHJpbWl0aXZlIGxvY2sgb2JqZWN0cy4KKworICAgIEEgcHJpbWl0aXZlIGxvY2sgaXMgYSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlIHRoYXQgaXMgbm90IG93bmVkCisgICAgYnkgYSBwYXJ0aWN1bGFyIGNvcm91dGluZSB3aGVuIGxvY2tlZC4gIEEgcHJpbWl0aXZlIGxvY2sgaXMgaW4gb25lCisgICAgb2YgdHdvIHN0YXRlcywgJ2xvY2tlZCcgb3IgJ3VubG9ja2VkJy4KKworICAgIEl0IGlzIGNyZWF0ZWQgaW4gdGhlIHVubG9ja2VkIHN0YXRlLiAgSXQgaGFzIHR3byBiYXNpYyBtZXRob2RzLAorICAgIGFjcXVpcmUoKSBhbmQgcmVsZWFzZSgpLiAgV2hlbiB0aGUgc3RhdGUgaXMgdW5sb2NrZWQsIGFjcXVpcmUoKQorICAgIGNoYW5nZXMgdGhlIHN0YXRlIHRvIGxvY2tlZCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIFdoZW4gdGhlCisgICAgc3RhdGUgaXMgbG9ja2VkLCBhY3F1aXJlKCkgYmxvY2tzIHVudGlsIGEgY2FsbCB0byByZWxlYXNlKCkgaW4KKyAgICBhbm90aGVyIGNvcm91dGluZSBjaGFuZ2VzIGl0IHRvIHVubG9ja2VkLCB0aGVuIHRoZSBhY3F1aXJlKCkgY2FsbAorICAgIHJlc2V0cyBpdCB0byBsb2NrZWQgYW5kIHJldHVybnMuICBUaGUgcmVsZWFzZSgpIG1ldGhvZCBzaG91bGQgb25seQorICAgIGJlIGNhbGxlZCBpbiB0aGUgbG9ja2VkIHN0YXRlOyBpdCBjaGFuZ2VzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZAorICAgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYW4KKyAgICB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciB3aWxsIGJlIHJhaXNlZC4KKworICAgIFdoZW4gbW9yZSB0aGFuIG9uZSBjb3JvdXRpbmUgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgd2FpdGluZyBmb3IKKyAgICB0aGUgc3RhdGUgdG8gdHVybiB0byB1bmxvY2tlZCwgb25seSBvbmUgY29yb3V0aW5lIHByb2NlZWRzIHdoZW4gYQorICAgIHJlbGVhc2UoKSBjYWxsIHJlc2V0cyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQ7IGZpcnN0IGNvcm91dGluZSB3aGljaAorICAgIGlzIGJsb2NrZWQgaW4gYWNxdWlyZSgpIGlzIGJlaW5nIHByb2Nlc3NlZC4KKworICAgIGFjcXVpcmUoKSBpcyBhIGNvcm91dGluZSBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoICd5aWVsZCBmcm9tJy4KKworICAgIExvY2tzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAgJyh5aWVsZCBmcm9tIGxvY2spJworICAgIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uLgorCisgICAgVXNhZ2U6CisKKyAgICAgICAgbG9jayA9IExvY2soKQorICAgICAgICAuLi4KKyAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIC4uLgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgIENvbnRleHQgbWFuYWdlciB1c2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB3aXRoICh5aWVsZCBmcm9tIGxvY2spOgorICAgICAgICAgICAgIC4uLgorCisgICAgTG9jayBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIGxvY2tpbmcgc3RhdGU6CisKKyAgICAgICAgaWYgbm90IGxvY2subG9ja2VkKCk6CisgICAgICAgICAgIHlpZWxkIGZyb20gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAjIGxvY2sgaXMgYWNxdWlyZWQKKyAgICAgICAgICAgLi4uCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9sb2NrZWQgPSBGYWxzZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnbG9ja2VkJyBpZiBzZWxmLl9sb2NrZWQgZWxzZSAndW5sb2NrZWQnCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgZGVmIGxvY2tlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgbG9jayBpcyBhY3F1aXJlZC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2tlZAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBhY3F1aXJlKHNlbGYpOgorICAgICAgICAiIiJBY3F1aXJlIGEgbG9jay4KKworICAgICAgICBUaGlzIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGxvY2sgaXMgdW5sb2NrZWQsIHRoZW4gc2V0cyBpdCB0bworICAgICAgICBsb2NrZWQgYW5kIHJldHVybnMgVHJ1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXJzIGFuZCBub3Qgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIGxvY2suCisKKyAgICAgICAgV2hlbiB0aGUgbG9jayBpcyBsb2NrZWQsIHJlc2V0IGl0IHRvIHVubG9ja2VkLCBhbmQgcmV0dXJuLgorICAgICAgICBJZiBhbnkgb3RoZXIgY29yb3V0aW5lcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZWNvbWUKKyAgICAgICAgdW5sb2NrZWQsIGFsbG93IGV4YWN0bHkgb25lIG9mIHRoZW0gdG8gcHJvY2VlZC4KKworICAgICAgICBXaGVuIGludm9rZWQgb24gYW4gdW5sb2NrZWQgbG9jaywgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorCisgICAgICAgIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgICAgICAjIFdha2UgdXAgdGhlIGZpcnN0IHdhaXRlciB3aG8gaXNuJ3QgY2FuY2VsbGVkLgorICAgICAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChUcnVlKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdMb2NrIGlzIG5vdCBhY3F1aXJlZC4nKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYucmVsZWFzZSgpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworCitjbGFzcyBFdmVudDoKKyAgICAiIiJBbiBFdmVudCBpbXBsZW1lbnRhdGlvbiwgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8gdGhyZWFkaW5nLkV2ZW50LgorCisgICAgQ2xhc3MgaW1wbGVtZW50aW5nIGV2ZW50IG9iamVjdHMuIEFuIGV2ZW50IG1hbmFnZXMgYSBmbGFnIHRoYXQgY2FuIGJlIHNldAorICAgIHRvIHRydWUgd2l0aCB0aGUgc2V0KCkgbWV0aG9kIGFuZCByZXNldCB0byBmYWxzZSB3aXRoIHRoZSBjbGVhcigpIG1ldGhvZC4KKyAgICBUaGUgd2FpdCgpIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGZsYWcgaXMgdHJ1ZS4gVGhlIGZsYWcgaXMgaW5pdGlhbGx5CisgICAgZmFsc2UuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fdmFsdWUgPSBGYWxzZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnc2V0JyBpZiBzZWxmLl92YWx1ZSBlbHNlICd1bnNldCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgaXNfc2V0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKKworICAgIGRlZiBzZXQoc2VsZik6CisgICAgICAgICIiIlNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byB0cnVlLiBBbGwgY29yb3V0aW5lcyB3YWl0aW5nIGZvciBpdCB0bworICAgICAgICBiZWNvbWUgdHJ1ZSBhcmUgYXdha2VuZWQuIENvcm91dGluZSB0aGF0IGNhbGwgd2FpdCgpIG9uY2UgdGhlIGZsYWcgaXMKKyAgICAgICAgdHJ1ZSB3aWxsIG5vdCBibG9jayBhdCBhbGwuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fdmFsdWU6CisgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IFRydWUKKworICAgICAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChUcnVlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZXNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byBmYWxzZS4gU3Vic2VxdWVudGx5LCBjb3JvdXRpbmVzIGNhbGxpbmcKKyAgICAgICAgd2FpdCgpIHdpbGwgYmxvY2sgdW50aWwgc2V0KCkgaXMgY2FsbGVkIHRvIHNldCB0aGUgaW50ZXJuYWwgZmxhZworICAgICAgICB0byB0cnVlIGFnYWluLiIiIgorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIkJsb2NrIHVudGlsIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCisKKyAgICAgICAgSWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZSBvbiBlbnRyeSwgcmV0dXJuIFRydWUKKyAgICAgICAgaW1tZWRpYXRlbHkuICBPdGhlcndpc2UsIGJsb2NrIHVudGlsIGFub3RoZXIgY29yb3V0aW5lIGNhbGxzCisgICAgICAgIHNldCgpIHRvIHNldCB0aGUgZmxhZyB0byB0cnVlLCB0aGVuIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdmFsdWU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworCitjbGFzcyBDb25kaXRpb246CisgICAgIiIiQSBDb25kaXRpb24gaW1wbGVtZW50YXRpb24sIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvIHRocmVhZGluZy5Db25kaXRpb24uCisKKyAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgY29uZGl0aW9uIHZhcmlhYmxlIG9iamVjdHMuIEEgY29uZGl0aW9uIHZhcmlhYmxlCisgICAgYWxsb3dzIG9uZSBvciBtb3JlIGNvcm91dGluZXMgdG8gd2FpdCB1bnRpbCB0aGV5IGFyZSBub3RpZmllZCBieSBhbm90aGVyCisgICAgY29yb3V0aW5lLgorCisgICAgQSBuZXcgTG9jayBvYmplY3QgaXMgY3JlYXRlZCBhbmQgdXNlZCBhcyB0aGUgdW5kZXJseWluZyBsb2NrLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgIyBMb2NrIGFzIGFuIGF0dHJpYnV0ZSBhcyBpbiB0aHJlYWRpbmcuQ29uZGl0aW9uLgorICAgICAgICBsb2NrID0gTG9jayhsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrCisgICAgICAgICMgRXhwb3J0IHRoZSBsb2NrJ3MgbG9ja2VkKCksIGFjcXVpcmUoKSBhbmQgcmVsZWFzZSgpIG1ldGhvZHMuCisgICAgICAgIHNlbGYubG9ja2VkID0gbG9jay5sb2NrZWQKKyAgICAgICAgc2VsZi5hY3F1aXJlID0gbG9jay5hY3F1aXJlCisgICAgICAgIHNlbGYucmVsZWFzZSA9IGxvY2sucmVsZWFzZQorCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYubG9ja2VkKCkgZWxzZSAndW5sb2NrZWQnCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAiIiJXYWl0IHVudGlsIG5vdGlmaWVkLgorCisgICAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcworICAgICAgICBtZXRob2QgaXMgY2FsbGVkLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgcmVsZWFzZXMgdGhlIHVuZGVybHlpbmcgbG9jaywgYW5kIHRoZW4gYmxvY2tzCisgICAgICAgIHVudGlsIGl0IGlzIGF3YWtlbmVkIGJ5IGEgbm90aWZ5KCkgb3Igbm90aWZ5X2FsbCgpIGNhbGwgZm9yCisgICAgICAgIHRoZSBzYW1lIGNvbmRpdGlvbiB2YXJpYWJsZSBpbiBhbm90aGVyIGNvcm91dGluZS4gIE9uY2UKKyAgICAgICAgYXdha2VuZWQsIGl0IHJlLWFjcXVpcmVzIHRoZSBsb2NrIGFuZCByZXR1cm5zIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHdhaXQgb24gdW4tYWNxdWlyZWQgbG9jaycpCisKKyAgICAgICAga2VlcF9sb2NrID0gVHJ1ZQorICAgICAgICBzZWxmLnJlbGVhc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZChmdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXJzLnJlbW92ZShmdXQpCisKKyAgICAgICAgZXhjZXB0IEdlbmVyYXRvckV4aXQ6CisgICAgICAgICAgICBrZWVwX2xvY2sgPSBGYWxzZSAgIyBQcmV2ZW50IHlpZWxkIGluIGZpbmFsbHkgY2xhdXNlLgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGtlZXBfbG9jazoKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHdhaXRfZm9yKHNlbGYsIHByZWRpY2F0ZSk6CisgICAgICAgICIiIldhaXQgdW50aWwgYSBwcmVkaWNhdGUgYmVjb21lcyB0cnVlLgorCisgICAgICAgIFRoZSBwcmVkaWNhdGUgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVzdWx0IHdpbGwgYmUKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBib29sZWFuIHZhbHVlLiAgVGhlIGZpbmFsIHByZWRpY2F0ZSB2YWx1ZSBpcworICAgICAgICB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgd2hpbGUgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi53YWl0KCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBub3RpZnkoc2VsZiwgbj0xKToKKyAgICAgICAgIiIiQnkgZGVmYXVsdCwgd2FrZSB1cCBvbmUgY29yb3V0aW5lIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24sIGlmIGFueS4KKyAgICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZAorICAgICAgICBpcyBjYWxsZWQsIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCB3YWtlcyB1cCBhdCBtb3N0IG4gb2YgdGhlIGNvcm91dGluZXMgd2FpdGluZyBmb3IgdGhlCisgICAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZTsgaXQgaXMgYSBuby1vcCBpZiBubyBjb3JvdXRpbmVzIGFyZSB3YWl0aW5nLgorCisgICAgICAgIE5vdGU6IGFuIGF3YWtlbmVkIGNvcm91dGluZSBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gZnJvbSBpdHMKKyAgICAgICAgd2FpdCgpIGNhbGwgdW50aWwgaXQgY2FuIHJlYWNxdWlyZSB0aGUgbG9jay4gU2luY2Ugbm90aWZ5KCkgZG9lcworICAgICAgICBub3QgcmVsZWFzZSB0aGUgbG9jaywgaXRzIGNhbGxlciBzaG91bGQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBpZHggPSAwCisgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIGlkeCA+PSBuOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoRmFsc2UpCisKKyAgICBkZWYgbm90aWZ5X2FsbChzZWxmKToKKyAgICAgICAgIiIiV2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiBUaGlzIG1ldGhvZCBhY3RzCisgICAgICAgIGxpa2Ugbm90aWZ5KCksIGJ1dCB3YWtlcyB1cCBhbGwgd2FpdGluZyB0aHJlYWRzIGluc3RlYWQgb2Ygb25lLiBJZiB0aGUKKyAgICAgICAgY2FsbGluZyB0aHJlYWQgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgICAgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ub3RpZnkobGVuKHNlbGYuX3dhaXRlcnMpKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvY2suX19lbnRlcl9fKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrLl9fZXhpdF9fKCphcmdzKQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisgICAgICAgIHJldHVybiBzZWxmCisKKworY2xhc3MgU2VtYXBob3JlOgorICAgICIiIkEgU2VtYXBob3JlIGltcGxlbWVudGF0aW9uLgorCisgICAgQSBzZW1hcGhvcmUgbWFuYWdlcyBhbiBpbnRlcm5hbCBjb3VudGVyIHdoaWNoIGlzIGRlY3JlbWVudGVkIGJ5IGVhY2gKKyAgICBhY3F1aXJlKCkgY2FsbCBhbmQgaW5jcmVtZW50ZWQgYnkgZWFjaCByZWxlYXNlKCkgY2FsbC4gVGhlIGNvdW50ZXIKKyAgICBjYW4gbmV2ZXIgZ28gYmVsb3cgemVybzsgd2hlbiBhY3F1aXJlKCkgZmluZHMgdGhhdCBpdCBpcyB6ZXJvLCBpdCBibG9ja3MsCisgICAgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIHRocmVhZCBjYWxscyByZWxlYXNlKCkuCisKKyAgICBTZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCisgICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50IGdpdmVzIHRoZSBpbml0aWFsIHZhbHVlIGZvciB0aGUgaW50ZXJuYWwKKyAgICBjb3VudGVyOyBpdCBkZWZhdWx0cyB0byAxLiBJZiB0aGUgdmFsdWUgZ2l2ZW4gaXMgbGVzcyB0aGFuIDAsCisgICAgVmFsdWVFcnJvciBpcyByYWlzZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgdmFsdWUgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU2VtYXBob3JlIGluaXRpYWwgdmFsdWUgbXVzdCBiZSA+PSAwIikKKyAgICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICBzZWxmLl9sb2NrZWQgPSAodmFsdWUgPT0gMCkKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmVzID0gc3VwZXIoKS5fX3JlcHJfXygpCisgICAgICAgIGV4dHJhID0gJ2xvY2tlZCcgaWYgc2VsZi5fbG9ja2VkIGVsc2UgJ3VubG9ja2VkLHZhbHVlOnt9Jy5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLl92YWx1ZSkKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgc2VtYXBob3JlIGNhbiBub3QgYmUgYWNxdWlyZWQgaW1tZWRpYXRlbHkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb2NrZWQKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgYWNxdWlyZShzZWxmKToKKyAgICAgICAgIiIiQWNxdWlyZSBhIHNlbWFwaG9yZS4KKworICAgICAgICBJZiB0aGUgaW50ZXJuYWwgY291bnRlciBpcyBsYXJnZXIgdGhhbiB6ZXJvIG9uIGVudHJ5LAorICAgICAgICBkZWNyZW1lbnQgaXQgYnkgb25lIGFuZCByZXR1cm4gVHJ1ZSBpbW1lZGlhdGVseS4gIElmIGl0IGlzCisgICAgICAgIHplcm8gb24gZW50cnksIGJsb2NrLCB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgY29yb3V0aW5lIGhhcworICAgICAgICBjYWxsZWQgcmVsZWFzZSgpIHRvIG1ha2UgaXQgbGFyZ2VyIHRoYW4gMCwgYW5kIHRoZW4gcmV0dXJuCisgICAgICAgIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fd2FpdGVycyBhbmQgc2VsZi5fdmFsdWUgPiAwOgorICAgICAgICAgICAgc2VsZi5fdmFsdWUgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5fdmFsdWUgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgc2VsZi5fdmFsdWUgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5fdmFsdWUgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgICIiIlJlbGVhc2UgYSBzZW1hcGhvcmUsIGluY3JlbWVudGluZyB0aGUgaW50ZXJuYWwgY291bnRlciBieSBvbmUuCisgICAgICAgIFdoZW4gaXQgd2FzIHplcm8gb24gZW50cnkgYW5kIGFub3RoZXIgY29yb3V0aW5lIGlzIHdhaXRpbmcgZm9yIGl0IHRvCisgICAgICAgIGJlY29tZSBsYXJnZXIgdGhhbiB6ZXJvIGFnYWluLCB3YWtlIHVwIHRoYXQgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdmFsdWUgKz0gMQorICAgICAgICBzZWxmLl9sb2NrZWQgPSBGYWxzZQorICAgICAgICBmb3Igd2FpdGVyIGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChUcnVlKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAjIFRPRE86IFRoaXMgaXMgcXVlc3Rpb25hYmxlLiAgSG93IGRvIHdlIGtub3cgdGhlIHVzZXIgYWN0dWFsbHkKKyAgICAgICAgIyB3cm90ZSAid2l0aCAoeWllbGQgZnJvbSBzZW1hKSIgaW5zdGVhZCBvZiAid2l0aCBzZW1hIj8KKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYucmVsZWFzZSgpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworCitjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CisgICAgIiIiQSBib3VuZGVkIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgcmFpc2VzIFZhbHVlRXJyb3IgaW4gcmVsZWFzZSgpIGlmIGl0IHdvdWxkIGluY3JlYXNlIHRoZSB2YWx1ZQorICAgIGFib3ZlIHRoZSBpbml0aWFsIHZhbHVlLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX2JvdW5kX3ZhbHVlID0gdmFsdWUKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh2YWx1ZSwgbG9vcD1sb29wKQorCisgICAgZGVmIHJlbGVhc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3ZhbHVlID49IHNlbGYuX2JvdW5kX3ZhbHVlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQm91bmRlZFNlbWFwaG9yZSByZWxlYXNlZCB0b28gbWFueSB0aW1lcycpCisgICAgICAgIHN1cGVyKCkucmVsZWFzZSgpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9sb2cucHkgYi9MaWIvYXN5bmNpby9sb2cucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhNzA3NAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2xvZy5weQpAQCAtMCwwICsxLDcgQEAKKyIiIkxvZ2dpbmcgY29uZmlndXJhdGlvbi4iIiIKKworaW1wb3J0IGxvZ2dpbmcKKworCisjIE5hbWUgdGhlIGxvZ2dlciBhZnRlciB0aGUgcGFja2FnZS4KK2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fcGFja2FnZV9fKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3OWJjMjUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9wcm9hY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw0NDIgQEAKKyIiIkV2ZW50IGxvb3AgdXNpbmcgYSBwcm9hY3RvciBhbmQgcmVsYXRlZCBjbGFzc2VzLgorCitBIHByb2FjdG9yIGlzIGEgIm5vdGlmeS1vbi1jb21wbGV0aW9uIiBtdWx0aXBsZXhlci4gIEN1cnJlbnRseSBhCitwcm9hY3RvciBpcyBvbmx5IGltcGxlbWVudGVkIG9uIFdpbmRvd3Mgd2l0aCBJT0NQLgorIiIiCisKK2ltcG9ydCBzb2NrZXQKKworZnJvbSAuIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSAuIGltcG9ydCBjb25zdGFudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK2NsYXNzIF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgcGlwZSBhbmQgc29ja2V0IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZXh0cmEpCisgICAgICAgIHNlbGYuX3NldF9leHRyYShzb2NrKQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3NlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lICAjIE5vbmUgb3IgYnl0ZWFycmF5LgorICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgPSAwCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZSAgIyBTZXQgd2hlbiBjbG9zZSgpIGNhbGxlZC4KKyAgICAgICAgc2VsZi5fZW9mX3dyaXR0ZW4gPSBGYWxzZQorICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnNldF93cml0ZV9idWZmZXJfbGltaXRzKCkKKyAgICAgICAgaWYgc2VsZi5fc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyLmF0dGFjaChzZWxmKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIF9zZXRfZXh0cmEoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX2V4dHJhWydwaXBlJ10gPSBzb2NrCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlciBhbmQgc2VsZi5fd3JpdGVfZnV0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dC5jYW5jZWwoKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMpOgorICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYXRhbCBlcnJvciBmb3IgJXMnLCBzZWxmKQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0OgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0LmNhbmNlbCgpCisgICAgICAgIGlmIHNlbGYuX3JlYWRfZnV0OgorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgWFhYIElmIHRoZXJlIGlzIGEgcGVuZGluZyBvdmVybGFwcGVkIHJlYWQgb24gdGhlIG90aGVyCisgICAgICAgICAgICAjIGVuZCB0aGVuIGl0IG1heSBmYWlsIHdpdGggRVJST1JfTkVUTkFNRV9ERUxFVEVEIGlmIHdlCisgICAgICAgICAgICAjIGp1c3QgY2xvc2Ugb3VyIGVuZC4gIEZpcnN0IGNhbGxpbmcgc2h1dGRvd24oKSBzZWVtcyB0bworICAgICAgICAgICAgIyBjdXJlIGl0LCBidXQgbWF5YmUgdXNpbmcgRGlzY29ubmVjdEV4KCkgd291bGQgYmUgYmV0dGVyLgorICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9zb2NrLCAnc2h1dGRvd24nKToKKyAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYuX3NlcnZlcgorICAgICAgICAgICAgaWYgc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlcnZlci5kZXRhY2goc2VsZikKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBOb25lCisKKyAgICAjIFhYWCBUaGUgbmV4dCBmb3VyIG1ldGhvZHMgYXJlIG5lYXJseSBpZGVudGljYWwgdG8gY29ycmVzcG9uZGluZworICAgICMgb25lcyBpbiBfU2VsZWN0b3JUcmFuc3BvcnQuICBNYXliZSByZWZhY3RvciBidWZmZXIgbWFuYWdlbWVudCB0bworICAgICMgc2hhcmUgdGhlIGltcGxlbWVudGF0aW9ucz8gIChBbHNvIHRoZXNlIGFyZSByZWFsbHkgb25seSBuZWVkZWQKKyAgICAjIGJ5IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydCBidXQgc2luY2UgX2J1ZmZlciBpcyBkZWZpbmVkIG9uCisgICAgIyB0aGUgYmFzZSBjbGFzcyBJIGFtIHB1dHRpbmcgaXQgaGVyZSBmb3Igbm93LikKKworICAgIGRlZiBfbWF5YmVfcGF1c2VfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHNpemUgPSBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpCisgICAgICAgIGlmIHNpemUgPD0gc2VsZi5faGlnaF93YXRlcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi5fcHJvdG9jb2xfcGF1c2VkOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdwYXVzZV93cml0aW5nKCkgZmFpbGVkJykKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBpZiAoc2VsZi5fcHJvdG9jb2xfcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSA8PSBzZWxmLl9sb3dfd2F0ZXIpOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ3Jlc3VtZV93cml0aW5nKCkgZmFpbGVkJykKKworICAgIGRlZiBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhzZWxmLCBoaWdoPU5vbmUsIGxvdz1Ob25lKToKKyAgICAgICAgaWYgaGlnaCBpcyBOb25lOgorICAgICAgICAgICAgaWYgbG93IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaGlnaCA9IDY0KjEwMjQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGlnaCA9IDQqbG93CisgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgbG93ID0gaGlnaCAvLyA0CisgICAgICAgIGlmIG5vdCBoaWdoID49IGxvdyA+PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaGlnaCAoJXIpIG11c3QgYmUgPj0gbG93ICglcikgbXVzdCBiZSA+PSAwJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWdoLCBsb3cpKQorICAgICAgICBzZWxmLl9oaWdoX3dhdGVyID0gaGlnaAorICAgICAgICBzZWxmLl9sb3dfd2F0ZXIgPSBsb3cKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgICMgTk9URTogVGhpcyBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IGRhdGEgYWxyZWFkeSBwYXNzZWQgdG8KKyAgICAgICAgIyBzZW5kKCkgZXZlbiBpZiBzZW5kKCkgaGFzbid0IGZpbmlzaGVkIHlldC4KKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fYnVmZmVyKQorCisKK2NsYXNzIF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5SZWFkVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIHJlYWQgcGlwZXMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcCwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEsIHNlcnZlcikKKyAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3BfcmVhZGluZykKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdDYW5ub3QgcGF1c2VfcmVhZGluZygpIHdoZW4gY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQWxyZWFkeSBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vdCBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3BfcmVhZGluZywgc2VsZi5fcmVhZF9mdXQpCisKKyAgICBkZWYgX2xvb3BfcmVhZGluZyhzZWxmLCBmdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGZ1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fcmVhZF9mdXQgaXMgZnV0IG9yIChzZWxmLl9yZWFkX2Z1dCBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgICAgICAgICAgZGF0YSA9IGZ1dC5yZXN1bHQoKSAgIyBkZWxpdmVyIGRhdGEgbGF0ZXIgaW4gImZpbmFsbHkiIGNsYXVzZQorCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICMgc2luY2UgY2xvc2UoKSBoYXMgYmVlbiBjYWxsZWQgd2UgaWdub3JlIGFueSByZWFkIGRhdGEKKyAgICAgICAgICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBkYXRhID09IGInJzoKKyAgICAgICAgICAgICAgICAjIHdlIGdvdCBlbmQtb2YtZmlsZSBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgYSBuZXcgcmVhZAorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAjIHJlc2NoZWR1bGUgYSBuZXcgcmVhZAorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci5yZWN2KHNlbGYuX3NvY2ssIDQwOTYpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uQWJvcnRlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3JlYWRpbmcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsaWYgZGF0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisKK2NsYXNzIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLldyaXRlVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIHdyaXRlIHBpcGVzLiIiIgorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgaWYgc2VsZi5fZW9mX3dyaXR0ZW46CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3dyaXRlX2VvZigpIGFscmVhZHkgY2FsbGVkJykKKworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIE9ic2VydmFibGUgc3RhdGVzOgorICAgICAgICAjIDEuIElETEU6IF93cml0ZV9mdXQgYW5kIF9idWZmZXIgYm90aCBOb25lCisgICAgICAgICMgMi4gV1JJVElORzogX3dyaXRlX2Z1dCBzZXQ7IF9idWZmZXIgTm9uZQorICAgICAgICAjIDMuIEJBQ0tFRCBVUDogX3dyaXRlX2Z1dCBzZXQ7IF9idWZmZXIgYSBieXRlYXJyYXkKKyAgICAgICAgIyBXZSBhbHdheXMgY29weSB0aGUgZGF0YSwgc28gdGhlIGNhbGxlciBjYW4ndCBtb2RpZnkgaXQKKyAgICAgICAgIyB3aGlsZSB3ZSdyZSBzdGlsbCB3YWl0aW5nIGZvciB0aGUgSS9PIHRvIGhhcHBlbi4KKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0IGlzIE5vbmU6ICAjIElETEUgLT4gV1JJVElORworICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2J1ZmZlciBpcyBOb25lCisgICAgICAgICAgICAjIFBhc3MgYSBjb3B5LCBleGNlcHQgaWYgaXQncyBhbHJlYWR5IGltbXV0YWJsZS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3Bfd3JpdGluZyhkYXRhPWJ5dGVzKGRhdGEpKQorICAgICAgICAgICAgIyBYWFggU2hvdWxkIHdlIHBhdXNlIHRoZSBwcm90b2NvbCBhdCB0aGlzIHBvaW50CisgICAgICAgICAgICAjIGlmIGxlbihkYXRhKSA+IHNlbGYuX2hpZ2hfd2F0ZXI/ICAoVGhhdCB3b3VsZAorICAgICAgICAgICAgIyByZXF1aXJlIGtlZXBpbmcgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBieXRlcyBwYXNzZWQKKyAgICAgICAgICAgICMgdG8gYSBzZW5kKCkgdGhhdCBoYXNuJ3QgZmluaXNoZWQgeWV0LikKKyAgICAgICAgZWxpZiBub3Qgc2VsZi5fYnVmZmVyOiAgIyBXUklUSU5HIC0+IEJBQ0tFRCBVUAorICAgICAgICAgICAgIyBNYWtlIGEgbXV0YWJsZSBjb3B5IHdoaWNoIHdlIGNhbiBleHRlbmQuCisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBieXRlYXJyYXkoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKyAgICAgICAgZWxzZTogICMgQkFDS0VEIFVQCisgICAgICAgICAgICAjIEFwcGVuZCB0byBidWZmZXIgKGFsc28gY29waWVzKS4KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfbG9vcF93cml0aW5nKHNlbGYsIGY9Tm9uZSwgZGF0YT1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXNzZXJ0IGYgaXMgc2VsZi5fd3JpdGVfZnV0CisgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBOb25lCisgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgIGYucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fZW9mX3dyaXR0ZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnNlbmQoc2VsZi5fc29jaywgZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF93cml0aW5nKQorICAgICAgICAgICAgIyBOb3cgdGhhdCB3ZSd2ZSByZWR1Y2VkIHRoZSBidWZmZXIgc2l6ZSwgdGVsbCB0aGUKKyAgICAgICAgICAgICMgcHJvdG9jb2wgdG8gcmVzdW1lIHdyaXRpbmcgaWYgaXQgd2FzIHBhdXNlZC4gIE5vdGUgdGhhdAorICAgICAgICAgICAgIyB3ZSBkbyB0aGlzIGxhc3Qgc2luY2UgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBpbW1lZGlhdGVseQorICAgICAgICAgICAgIyBhbmQgaXQgbWF5IGFkZCBtb3JlIGRhdGEgdG8gdGhlIGJ1ZmZlciAoZXZlbiBjYXVzaW5nIHRoZQorICAgICAgICAgICAgIyBwcm90b2NvbCB0byBiZSBwYXVzZWQgYWdhaW4pLgorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworCitjbGFzcyBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIGR1cGxleCBwaXBlcy4iIiIKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIGNvbm5lY3RlZCBzb2NrZXRzLiIiIgorCisgICAgZGVmIF9zZXRfZXh0cmEoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrZXQnXSA9IHNvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tuYW1lJ10gPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgJ3BlZXJuYW1lJyBub3QgaW4gc2VsZi5fZXh0cmE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFbJ3BlZXJuYW1lJ10gPSBzb2NrLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nIG9yIHNlbGYuX2VvZl93cml0dGVuOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZl93cml0dGVuID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKworY2xhc3MgQmFzZVByb2FjdG9yRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2FjdG9yKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgcHJvYWN0b3I6ICVzJywgcHJvYWN0b3IuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IHByb2FjdG9yCisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gcHJvYWN0b3IgICAjIGNvbnZlbmllbnQgYWxpYXMKKyAgICAgICAgcHJvYWN0b3Iuc2V0X2xvb3Aoc2VsZikKKyAgICAgICAgc2VsZi5fbWFrZV9zZWxmX3BpcGUoKQorCisgICAgZGVmIF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgY2hlY2tfZm9yX2hhbmd1cD1UcnVlKToKKyAgICAgICAgaWYgY2hlY2tfZm9yX2hhbmd1cDoKKyAgICAgICAgICAgICMgV2Ugd2FudCBjb25uZWN0aW9uX2xvc3QoKSB0byBiZSBjYWxsZWQgd2hlbiBvdGhlciBlbmQgY2xvc2VzCisgICAgICAgICAgICByZXR1cm4gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIElmIG90aGVyIGVuZCBjbG9zZXMgd2UgbWF5IG5vdCBub3RpY2UgZm9yIGEgbG9uZyB0aW1lCisgICAgICAgICAgICByZXR1cm4gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9wcm9hY3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9hY3Rvci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9wcm9hY3RvciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gTm9uZQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG4pOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IucmVjdihzb2NrLCBuKQorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnNlbmQoc29jaywgZGF0YSkKKworICAgIGRlZiBzb2NrX2Nvbm5lY3Qoc2VsZiwgc29jaywgYWRkcmVzcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5jb25uZWN0KHNvY2ssIGFkZHJlc3MpCisKKyAgICBkZWYgc29ja19hY2NlcHQoc2VsZiwgc29jayk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5hY2NlcHQoc29jaykKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jbG9zZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fc3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2Nzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyAtPSAxCisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICAjIEEgc2VsZi1zb2NrZXQsIHJlYWxseS4gOi0pCisgICAgICAgIHNlbGYuX3Nzb2NrLCBzZWxmLl9jc29jayA9IHNlbGYuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9zc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5fY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyArPSAxCisgICAgICAgIHNlbGYuY2FsbF9zb29uKHNlbGYuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIF9sb29wX3NlbGZfcmVhZGluZyhzZWxmLCBmPU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYucmVzdWx0KCkgICMgbWF5IHJhaXNlCisgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IucmVjdihzZWxmLl9zc29jaywgNDA5NikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgc2VsZi5fY3NvY2suc2VuZChiJ3gnKQorCisgICAgZGVmIF9zdGFydF9zZXJ2aW5nKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIHNzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lvY3BFdmVudExvb3AgaXMgaW5jb21wYXRpYmxlIHdpdGggU1NMLicpCisKKyAgICAgICAgZGVmIGxvb3AoZj1Ob25lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb25uLCBhZGRyID0gZi5yZXN1bHQoKQorICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzb2NrLmZpbGVubygpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdBY2NlcHQgZmFpbGVkJykKKyAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhsb29wKQorCisgICAgICAgIHNlbGYuY2FsbF9zb29uKGxvb3ApCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICBwYXNzICAgICMgWFhYIGhhcmQgd29yayBjdXJyZW50bHkgZG9uZSBpbiBwb2xsCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzb2NrLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3Byb3RvY29scy5weSBiL0xpYi9hc3luY2lvL3Byb3RvY29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjg4NzBjCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5CkBAIC0wLDAgKzEsMTI4IEBACisiIiJBYnN0cmFjdCBQcm90b2NvbCBjbGFzcy4iIiIKKworX19hbGxfXyA9IFsnUHJvdG9jb2wnLCAnRGF0YWdyYW1Qcm90b2NvbCddCisKKworY2xhc3MgQmFzZVByb3RvY29sOgorICAgICIiIkNvbW1vbiBiYXNlIGNsYXNzIGZvciBwcm90b2NvbCBpbnRlcmZhY2VzLgorCisgICAgVXN1YWxseSB1c2VyIGltcGxlbWVudHMgcHJvdG9jb2xzIHRoYXQgZGVyaXZlZCBmcm9tIEJhc2VQcm90b2NvbAorICAgIGxpa2UgUHJvdG9jb2wgb3IgUHJvY2Vzc1Byb3RvY29sLgorCisgICAgVGhlIG9ubHkgY2FzZSB3aGVuIEJhc2VQcm90b2NvbCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkgaXMKKyAgICB3cml0ZS1vbmx5IHRyYW5zcG9ydCBsaWtlIHdyaXRlIHBpcGUKKyAgICAiIiIKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGlzIG1hZGUuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSB0cmFuc3BvcnQgcmVwcmVzZW50aW5nIHRoZSBwaXBlIGNvbm5lY3Rpb24uCisgICAgICAgIFRvIHJlY2VpdmUgZGF0YSwgd2FpdCBmb3IgZGF0YV9yZWNlaXZlZCgpIGNhbGxzLgorICAgICAgICBXaGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZCwgY29ubmVjdGlvbl9sb3N0KCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCBvciBjbG9zZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgTm9uZSAodGhlIGxhdHRlcgorICAgICAgICBtZWFuaW5nIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQgb3IgdGhlIGNvbm5lY3Rpb24gd2FzCisgICAgICAgIGFib3J0ZWQgb3IgY2xvc2VkKS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHRyYW5zcG9ydCdzIGJ1ZmZlciBnb2VzIG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyay4KKworICAgICAgICBQYXVzZSBhbmQgcmVzdW1lIGNhbGxzIGFyZSBwYWlyZWQgLS0gcGF1c2Vfd3JpdGluZygpIGlzIGNhbGxlZAorICAgICAgICBvbmNlIHdoZW4gdGhlIGJ1ZmZlciBnb2VzIHN0cmljdGx5IG92ZXIgdGhlIGhpZ2gtd2F0ZXIgbWFyaworICAgICAgICAoZXZlbiBpZiBzdWJzZXF1ZW50IHdyaXRlcyBpbmNyZWFzZXMgdGhlIGJ1ZmZlciBzaXplIGV2ZW4KKyAgICAgICAgbW9yZSksIGFuZCBldmVudHVhbGx5IHJlc3VtZV93cml0aW5nKCkgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKKyAgICAgICAgYnVmZmVyIHNpemUgcmVhY2hlcyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKyAgICAgICAgTm90ZSB0aGF0IGlmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgICAgICAgcGF1c2Vfd3JpdGluZygpIGlzIG5vdCBjYWxsZWQgLS0gaXQgbXVzdCBnbyBzdHJpY3RseSBvdmVyLgorICAgICAgICBDb252ZXJzZWx5LCByZXN1bWVfd3JpdGluZygpIGlzIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIgc2l6ZSBpcworICAgICAgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICAgICAgIGFyZSBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGdvIGFzIGV4cGVjdGVkIHdoZW4gZWl0aGVyCisgICAgICAgIG1hcmsgaXMgemVyby4KKworICAgICAgICBOT1RFOiBUaGlzIGlzIHRoZSBvbmx5IFByb3RvY29sIGNhbGxiYWNrIHRoYXQgaXMgbm90IGNhbGxlZAorICAgICAgICB0aHJvdWdoIEV2ZW50TG9vcC5jYWxsX3Nvb24oKSAtLSBpZiBpdCB3ZXJlLCBpdCB3b3VsZCBoYXZlIG5vCisgICAgICAgIGVmZmVjdCB3aGVuIGl0J3MgbW9zdCBuZWVkZWQgKHdoZW4gdGhlIGFwcCBrZWVwcyB3cml0aW5nCisgICAgICAgIHdpdGhvdXQgeWllbGRpbmcgdW50aWwgcGF1c2Vfd3JpdGluZygpIGlzIGNhbGxlZCkuCisgICAgICAgICIiIgorCisgICAgZGVmIHJlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKyAgICAgICAgU2VlIHBhdXNlX3dyaXRpbmcoKSBmb3IgZGV0YWlscy4KKyAgICAgICAgIiIiCisKKworY2xhc3MgUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIHN0cmVhbSBwcm90b2NvbC4KKworICAgIFRoZSB1c2VyIHNob3VsZCBpbXBsZW1lbnQgdGhpcyBpbnRlcmZhY2UuICBUaGV5IGNhbiBpbmhlcml0IGZyb20KKyAgICB0aGlzIGNsYXNzIGJ1dCBkb24ndCBuZWVkIHRvLiAgVGhlIGltcGxlbWVudGF0aW9ucyBoZXJlIGRvCisgICAgbm90aGluZyAodGhleSBkb24ndCByYWlzZSBleGNlcHRpb25zKS4KKworICAgIFdoZW4gdGhlIHVzZXIgd2FudHMgdG8gcmVxdWVzdHMgYSB0cmFuc3BvcnQsIHRoZXkgcGFzcyBhIHByb3RvY29sCisgICAgZmFjdG9yeSB0byBhIHV0aWxpdHkgZnVuY3Rpb24gKGUuZy4sIEV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbigpKS4KKworICAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgbWFkZSBzdWNjZXNzZnVsbHksIGNvbm5lY3Rpb25fbWFkZSgpIGlzCisgICAgY2FsbGVkIHdpdGggYSBzdWl0YWJsZSB0cmFuc3BvcnQgb2JqZWN0LiAgVGhlbiBkYXRhX3JlY2VpdmVkKCkKKyAgICB3aWxsIGJlIGNhbGxlZCAwIG9yIG1vcmUgdGltZXMgd2l0aCBkYXRhIChieXRlcykgcmVjZWl2ZWQgZnJvbSB0aGUKKyAgICB0cmFuc3BvcnQ7IGZpbmFsbHksIGNvbm5lY3Rpb25fbG9zdCgpIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZQorICAgIHdpdGggZWl0aGVyIGFuIGV4Y2VwdGlvbiBvYmplY3Qgb3IgTm9uZSBhcyBhbiBhcmd1bWVudC4KKworICAgIFN0YXRlIG1hY2hpbmUgb2YgY2FsbHM6CisKKyAgICAgIHN0YXJ0IC0+IENNIFstPiBEUipdIFstPiBFUj9dIC0+IENMIC0+IGVuZAorICAgICIiIgorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YSBpcyByZWNlaXZlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYSBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIG90aGVyIGVuZCBjYWxscyB3cml0ZV9lb2YoKSBvciBlcXVpdmFsZW50LgorCisgICAgICAgIElmIHRoaXMgcmV0dXJucyBhIGZhbHNlIHZhbHVlIChpbmNsdWRpbmcgTm9uZSksIHRoZSB0cmFuc3BvcnQKKyAgICAgICAgd2lsbCBjbG9zZSBpdHNlbGYuICBJZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUKKyAgICAgICAgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4KKyAgICAgICAgIiIiCisKKworY2xhc3MgRGF0YWdyYW1Qcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkludGVyZmFjZSBmb3IgZGF0YWdyYW0gcHJvdG9jb2wuIiIiCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgZGF0YWdyYW0gaXMgcmVjZWl2ZWQuIiIiCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSBzZW5kIG9yIHJlY2VpdmUgb3BlcmF0aW9uIHJhaXNlcyBhbiBPU0Vycm9yLgorCisgICAgICAgIChPdGhlciB0aGFuIEJsb2NraW5nSU9FcnJvciBvciBJbnRlcnJ1cHRlZEVycm9yLikKKyAgICAgICAgIiIiCisKKworY2xhc3MgU3VicHJvY2Vzc1Byb3RvY29sKEJhc2VQcm90b2NvbCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciBwcm90b2NvbCBmb3Igc3VicHJvY2VzcyBjYWxscy4iIiIKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgc3VicHJvY2VzcyB3cml0ZXMgZGF0YSBpbnRvIHN0ZG91dC9zdGRlcnIgcGlwZS4KKworICAgICAgICBmZCBpcyBpbnQgZmlsZSBkYXNjcmlwdG9yLgorICAgICAgICBkYXRhIGlzIGJ5dGVzIG9iamVjdC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZmQsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hpbGQgcHJvY2VzcyBpcworICAgICAgICBjbG9zZWQuCisKKyAgICAgICAgZmQgaXMgdGhlIGludCBmaWxlIGRlc2NyaXB0b3IgdGhhdCB3YXMgY2xvc2VkLgorICAgICAgICAiIiIKKworICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gc3VicHJvY2VzcyBoYXMgZXhpdGVkLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vcXVldWVzLnB5IGIvTGliL2FzeW5jaW8vcXVldWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWJmNDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9xdWV1ZXMucHkKQEAgLTAsMCArMSwyODQgQEAKKyIiIlF1ZXVlcyIiIgorCitfX2FsbF9fID0gWydRdWV1ZScsICdQcmlvcml0eVF1ZXVlJywgJ0xpZm9RdWV1ZScsICdKb2luYWJsZVF1ZXVlJywKKyAgICAgICAgICAgJ0Z1bGwnLCAnRW1wdHknXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBoZWFwcQoraW1wb3J0IHF1ZXVlCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgbG9ja3MKK2Zyb20gLnRhc2tzIGltcG9ydCBjb3JvdXRpbmUKKworCisjIFJlLWV4cG9ydCBxdWV1ZS5GdWxsIGFuZCAuRW1wdHkgZXhjZXB0aW9ucy4KK0Z1bGwgPSBxdWV1ZS5GdWxsCitFbXB0eSA9IHF1ZXVlLkVtcHR5CisKKworY2xhc3MgUXVldWU6CisgICAgIiIiQSBxdWV1ZSwgdXNlZnVsIGZvciBjb29yZGluYXRpbmcgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGNvcm91dGluZXMuCisKKyAgICBJZiBtYXhzaXplIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB6ZXJvLCB0aGUgcXVldWUgc2l6ZSBpcyBpbmZpbml0ZS4gSWYgaXQKKyAgICBpcyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwLCB0aGVuICJ5aWVsZCBmcm9tIHB1dCgpIiB3aWxsIGJsb2NrIHdoZW4gdGhlCisgICAgcXVldWUgcmVhY2hlcyBtYXhzaXplLCB1bnRpbCBhbiBpdGVtIGlzIHJlbW92ZWQgYnkgZ2V0KCkuCisKKyAgICBVbmxpa2UgdGhlIHN0YW5kYXJkIGxpYnJhcnkgUXVldWUsIHlvdSBjYW4gcmVsaWFibHkga25vdyB0aGlzIFF1ZXVlJ3Mgc2l6ZQorICAgIHdpdGggcXNpemUoKSwgc2luY2UgeW91ciBzaW5nbGUtdGhyZWFkZWQgVHVsaXAgYXBwbGljYXRpb24gd29uJ3QgYmUKKyAgICBpbnRlcnJ1cHRlZCBiZXR3ZWVuIGNhbGxpbmcgcXNpemUoKSBhbmQgZG9pbmcgYW4gb3BlcmF0aW9uIG9uIHRoZSBRdWV1ZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhzaXplPTAsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fbWF4c2l6ZSA9IG1heHNpemUKKworICAgICAgICAjIEZ1dHVyZXMuCisgICAgICAgIHNlbGYuX2dldHRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgICMgUGFpcnMgb2YgKGl0ZW0sIEZ1dHVyZSkuCisgICAgICAgIHNlbGYuX3B1dHRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2luaXQobWF4c2l6ZSkKKworICAgIGRlZiBfaW5pdChzZWxmLCBtYXhzaXplKToKKyAgICAgICAgc2VsZi5fcXVldWUgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisKKyAgICBkZWYgX2dldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLnBvcGxlZnQoKQorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSk6CisgICAgICAgIHNlbGYuX3F1ZXVlLmFwcGVuZChpdGVtKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzx7fSBhdCB7OiN4fSB7fT4nLmZvcm1hdCgKKyAgICAgICAgICAgIHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpLCBzZWxmLl9mb3JtYXQoKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzx7fSB7fT4nLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9mb3JtYXQoKSkKKworICAgIGRlZiBfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSAnbWF4c2l6ZT17IXJ9Jy5mb3JtYXQoc2VsZi5fbWF4c2l6ZSkKKyAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3F1ZXVlJywgTm9uZSk6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcXVldWU9eyFyfScuZm9ybWF0KGxpc3Qoc2VsZi5fcXVldWUpKQorICAgICAgICBpZiBzZWxmLl9nZXR0ZXJzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgX2dldHRlcnNbe31dJy5mb3JtYXQobGVuKHNlbGYuX2dldHRlcnMpKQorICAgICAgICBpZiBzZWxmLl9wdXR0ZXJzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgX3B1dHRlcnNbe31dJy5mb3JtYXQobGVuKHNlbGYuX3B1dHRlcnMpKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX2NvbnN1bWVfZG9uZV9nZXR0ZXJzKHNlbGYpOgorICAgICAgICAjIERlbGV0ZSB3YWl0ZXJzIGF0IHRoZSBoZWFkIG9mIHRoZSBnZXQoKSBxdWV1ZSB3aG8ndmUgdGltZWQgb3V0LgorICAgICAgICB3aGlsZSBzZWxmLl9nZXR0ZXJzIGFuZCBzZWxmLl9nZXR0ZXJzWzBdLmRvbmUoKToKKyAgICAgICAgICAgIHNlbGYuX2dldHRlcnMucG9wbGVmdCgpCisKKyAgICBkZWYgX2NvbnN1bWVfZG9uZV9wdXR0ZXJzKHNlbGYpOgorICAgICAgICAjIERlbGV0ZSB3YWl0ZXJzIGF0IHRoZSBoZWFkIG9mIHRoZSBwdXQoKSBxdWV1ZSB3aG8ndmUgdGltZWQgb3V0LgorICAgICAgICB3aGlsZSBzZWxmLl9wdXR0ZXJzIGFuZCBzZWxmLl9wdXR0ZXJzWzBdWzFdLmRvbmUoKToKKyAgICAgICAgICAgIHNlbGYuX3B1dHRlcnMucG9wbGVmdCgpCisKKyAgICBkZWYgcXNpemUoc2VsZik6CisgICAgICAgICIiIk51bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcXVldWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWF4c2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGFsbG93ZWQgaW4gdGhlIHF1ZXVlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF4c2l6ZQorCisgICAgZGVmIGVtcHR5KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcXVldWUgaXMgZW1wdHksIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9xdWV1ZQorCisgICAgZGVmIGZ1bGwoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZXJlIGFyZSBtYXhzaXplIGl0ZW1zIGluIHRoZSBxdWV1ZS4KKworICAgICAgICBOb3RlOiBpZiB0aGUgUXVldWUgd2FzIGluaXRpYWxpemVkIHdpdGggbWF4c2l6ZT0wICh0aGUgZGVmYXVsdCksCisgICAgICAgIHRoZW4gZnVsbCgpIGlzIG5ldmVyIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9tYXhzaXplIDw9IDA6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnFzaXplKCkgPT0gc2VsZi5fbWF4c2l6ZQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBwdXQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlLgorCisgICAgICAgIElmIHlvdSB5aWVsZCBmcm9tIHB1dCgpLCB3YWl0IHVudGlsIGEgZnJlZSBzbG90IGlzIGF2YWlsYWJsZQorICAgICAgICBiZWZvcmUgYWRkaW5nIGl0ZW0uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfZ2V0dGVycygpCisgICAgICAgIGlmIHNlbGYuX2dldHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3F1ZXVlLCAoCisgICAgICAgICAgICAgICAgJ3F1ZXVlIG5vbi1lbXB0eSwgd2h5IGFyZSBnZXR0ZXJzIHdhaXRpbmc/JykKKworICAgICAgICAgICAgZ2V0dGVyID0gc2VsZi5fZ2V0dGVycy5wb3BsZWZ0KCkKKworICAgICAgICAgICAgIyBVc2UgX3B1dCBhbmQgX2dldCBpbnN0ZWFkIG9mIHBhc3NpbmcgaXRlbSBzdHJhaWdodCB0byBnZXR0ZXIsIGluCisgICAgICAgICAgICAjIGNhc2UgYSBzdWJjbGFzcyBoYXMgbG9naWMgdGhhdCBtdXN0IHJ1biAoZS5nLiBKb2luYWJsZVF1ZXVlKS4KKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorICAgICAgICAgICAgZ2V0dGVyLnNldF9yZXN1bHQoc2VsZi5fZ2V0KCkpCisKKyAgICAgICAgZWxpZiBzZWxmLl9tYXhzaXplID4gMCBhbmQgc2VsZi5fbWF4c2l6ZSA9PSBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisKKyAgICAgICAgICAgIHNlbGYuX3B1dHRlcnMuYXBwZW5kKChpdGVtLCB3YWl0ZXIpKQorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisKKyAgICBkZWYgcHV0X25vd2FpdChzZWxmLCBpdGVtKToKKyAgICAgICAgIiIiUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUgd2l0aG91dCBibG9ja2luZy4KKworICAgICAgICBJZiBubyBmcmVlIHNsb3QgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCByYWlzZSBGdWxsLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX2dldHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9nZXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLl9xdWV1ZSwgKAorICAgICAgICAgICAgICAgICdxdWV1ZSBub24tZW1wdHksIHdoeSBhcmUgZ2V0dGVycyB3YWl0aW5nPycpCisKKyAgICAgICAgICAgIGdldHRlciA9IHNlbGYuX2dldHRlcnMucG9wbGVmdCgpCisKKyAgICAgICAgICAgICMgVXNlIF9wdXQgYW5kIF9nZXQgaW5zdGVhZCBvZiBwYXNzaW5nIGl0ZW0gc3RyYWlnaHQgdG8gZ2V0dGVyLCBpbgorICAgICAgICAgICAgIyBjYXNlIGEgc3ViY2xhc3MgaGFzIGxvZ2ljIHRoYXQgbXVzdCBydW4gKGUuZy4gSm9pbmFibGVRdWV1ZSkuCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKyAgICAgICAgICAgIGdldHRlci5zZXRfcmVzdWx0KHNlbGYuX2dldCgpKQorCisgICAgICAgIGVsaWYgc2VsZi5fbWF4c2l6ZSA+IDAgYW5kIHNlbGYuX21heHNpemUgPT0gc2VsZi5xc2l6ZSgpOgorICAgICAgICAgICAgcmFpc2UgRnVsbAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcHV0KGl0ZW0pCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuZCByZXR1cm4gYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZS4KKworICAgICAgICBJZiB5b3UgeWllbGQgZnJvbSBnZXQoKSwgd2FpdCB1bnRpbCBhIGl0ZW0gaXMgYXZhaWxhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY29uc3VtZV9kb25lX3B1dHRlcnMoKQorICAgICAgICBpZiBzZWxmLl9wdXR0ZXJzOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuZnVsbCgpLCAncXVldWUgbm90IGZ1bGwsIHdoeSBhcmUgcHV0dGVycyB3YWl0aW5nPycKKyAgICAgICAgICAgIGl0ZW0sIHB1dHRlciA9IHNlbGYuX3B1dHRlcnMucG9wbGVmdCgpCisgICAgICAgICAgICBzZWxmLl9wdXQoaXRlbSkKKworICAgICAgICAgICAgIyBXaGVuIGEgZ2V0dGVyIHJ1bnMgYW5kIGZyZWVzIHVwIGEgc2xvdCBzbyB0aGlzIHB1dHRlciBjYW4KKyAgICAgICAgICAgICMgcnVuLCB3ZSBuZWVkIHRvIGRlZmVyIHRoZSBwdXQgZm9yIGEgdGljayB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgIyBnZXR0ZXJzIGFuZCBwdXR0ZXJzIGFsdGVybmF0ZSBwZXJmZWN0bHkuIFNlZQorICAgICAgICAgICAgIyBDaGFubmVsVGVzdC50ZXN0X3dhaXQuCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihwdXR0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldCgpCisKKyAgICAgICAgZWxpZiBzZWxmLnFzaXplKCk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICAgICAgc2VsZi5fZ2V0dGVycy5hcHBlbmQod2FpdGVyKQorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHdhaXRlcikKKworICAgIGRlZiBnZXRfbm93YWl0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIFJldHVybiBhbiBpdGVtIGlmIG9uZSBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIGVsc2UgcmFpc2UgRW1wdHkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb25zdW1lX2RvbmVfcHV0dGVycygpCisgICAgICAgIGlmIHNlbGYuX3B1dHRlcnM6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5mdWxsKCksICdxdWV1ZSBub3QgZnVsbCwgd2h5IGFyZSBwdXR0ZXJzIHdhaXRpbmc/JworICAgICAgICAgICAgaXRlbSwgcHV0dGVyID0gc2VsZi5fcHV0dGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIHNlbGYuX3B1dChpdGVtKQorICAgICAgICAgICAgIyBXYWtlIHB1dHRlciBvbiBuZXh0IHRpY2suCisgICAgICAgICAgICBwdXR0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KCkKKworICAgICAgICBlbGlmIHNlbGYucXNpemUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRW1wdHkKKworCitjbGFzcyBQcmlvcml0eVF1ZXVlKFF1ZXVlKToKKyAgICAiIiJBIHN1YmNsYXNzIG9mIFF1ZXVlOyByZXRyaWV2ZXMgZW50cmllcyBpbiBwcmlvcml0eSBvcmRlciAobG93ZXN0IGZpcnN0KS4KKworICAgIEVudHJpZXMgYXJlIHR5cGljYWxseSB0dXBsZXMgb2YgdGhlIGZvcm06IChwcmlvcml0eSBudW1iZXIsIGRhdGEpLgorICAgICIiIgorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IFtdCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtLCBoZWFwcHVzaD1oZWFwcS5oZWFwcHVzaCk6CisgICAgICAgIGhlYXBwdXNoKHNlbGYuX3F1ZXVlLCBpdGVtKQorCisgICAgZGVmIF9nZXQoc2VsZiwgaGVhcHBvcD1oZWFwcS5oZWFwcG9wKToKKyAgICAgICAgcmV0dXJuIGhlYXBwb3Aoc2VsZi5fcXVldWUpCisKKworY2xhc3MgTGlmb1F1ZXVlKFF1ZXVlKToKKyAgICAiIiJBIHN1YmNsYXNzIG9mIFF1ZXVlIHRoYXQgcmV0cmlldmVzIG1vc3QgcmVjZW50bHkgYWRkZWQgZW50cmllcyBmaXJzdC4iIiIKKworICAgIGRlZiBfaW5pdChzZWxmLCBtYXhzaXplKToKKyAgICAgICAgc2VsZi5fcXVldWUgPSBbXQorCisgICAgZGVmIF9wdXQoc2VsZiwgaXRlbSk6CisgICAgICAgIHNlbGYuX3F1ZXVlLmFwcGVuZChpdGVtKQorCisgICAgZGVmIF9nZXQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9xdWV1ZS5wb3AoKQorCisKK2NsYXNzIEpvaW5hYmxlUXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWUgd2l0aCB0YXNrX2RvbmUoKSBhbmQgam9pbigpIG1ldGhvZHMuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKG1heHNpemU9bWF4c2l6ZSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID0gMAorICAgICAgICBzZWxmLl9maW5pc2hlZCA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fZmluaXNoZWQuc2V0KCkKKworICAgIGRlZiBfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBRdWV1ZS5fZm9ybWF0KHNlbGYpCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3M6CisgICAgICAgICAgICByZXN1bHQgKz0gJyB0YXNrcz17fScuZm9ybWF0KHNlbGYuX3VuZmluaXNoZWRfdGFza3MpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0pOgorICAgICAgICBzdXBlcigpLl9wdXQoaXRlbSkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyArPSAxCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkLmNsZWFyKCkKKworICAgIGRlZiB0YXNrX2RvbmUoc2VsZik6CisgICAgICAgICIiIkluZGljYXRlIHRoYXQgYSBmb3JtZXJseSBlbnF1ZXVlZCB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICAgIFVzZWQgYnkgcXVldWUgY29uc3VtZXJzLiBGb3IgZWFjaCBnZXQoKSB1c2VkIHRvIGZldGNoIGEgdGFzaywKKyAgICAgICAgYSBzdWJzZXF1ZW50IGNhbGwgdG8gdGFza19kb25lKCkgdGVsbHMgdGhlIHF1ZXVlIHRoYXQgdGhlIHByb2Nlc3NpbmcKKyAgICAgICAgb24gdGhlIHRhc2sgaXMgY29tcGxldGUuCisKKyAgICAgICAgSWYgYSBqb2luKCkgaXMgY3VycmVudGx5IGJsb2NraW5nLCBpdCB3aWxsIHJlc3VtZSB3aGVuIGFsbCBpdGVtcyBoYXZlCisgICAgICAgIGJlZW4gcHJvY2Vzc2VkIChtZWFuaW5nIHRoYXQgYSB0YXNrX2RvbmUoKSBjYWxsIHdhcyByZWNlaXZlZCBmb3IgZXZlcnkKKyAgICAgICAgaXRlbSB0aGF0IGhhZCBiZWVuIHB1dCgpIGludG8gdGhlIHF1ZXVlKS4KKworICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiBjYWxsZWQgbW9yZSB0aW1lcyB0aGFuIHRoZXJlIHdlcmUgaXRlbXMgcGxhY2VkIGluCisgICAgICAgIHRoZSBxdWV1ZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPD0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Rhc2tfZG9uZSgpIGNhbGxlZCB0b28gbWFueSB0aW1lcycpCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgLT0gMQorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID09IDA6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hlZC5zZXQoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBqb2luKHNlbGYpOgorICAgICAgICAiIiJCbG9jayB1bnRpbCBhbGwgaXRlbXMgaW4gdGhlIHF1ZXVlIGhhdmUgYmVlbiBnb3R0ZW4gYW5kIHByb2Nlc3NlZC4KKworICAgICAgICBUaGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBnb2VzIHVwIHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlCisgICAgICAgIHF1ZXVlLiBUaGUgY291bnQgZ29lcyBkb3duIHdoZW5ldmVyIGEgY29uc3VtZXIgdGhyZWFkIGNhbGxzIHRhc2tfZG9uZSgpCisgICAgICAgIHRvIGluZGljYXRlIHRoYXQgdGhlIGl0ZW0gd2FzIHJldHJpZXZlZCBhbmQgYWxsIHdvcmsgb24gaXQgaXMgY29tcGxldGUuCisgICAgICAgIFdoZW4gdGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZHJvcHMgdG8gemVybywgam9pbigpIHVuYmxvY2tzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA+IDA6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmlzaGVkLndhaXQoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5Y2FmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw4NjUgQEAKKyIiIkV2ZW50IGxvb3AgdXNpbmcgYSBzZWxlY3RvciBhbmQgcmVsYXRlZCBjbGFzc2VzLgorCitBIHNlbGVjdG9yIGlzIGEgIm5vdGlmeS13aGVuLXJlYWR5IiBtdWx0aXBsZXhlci4gIEZvciBhIHN1YmNsYXNzIHdoaWNoCithbHNvIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHNpZ25hbCBoYW5kbGluZywgc2VlIHRoZSB1bml4X2V2ZW50cyBzdWItbW9kdWxlLgorIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgc29ja2V0Cit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbnN0YW50cworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitjbGFzcyBCYXNlU2VsZWN0b3JFdmVudExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisgICAgIiIiU2VsZWN0b3IgZXZlbnQgbG9vcC4KKworICAgIFNlZSBldmVudHMuRXZlbnRMb29wIGZvciBBUEkgc3BlY2lmaWNhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgc2VsZWN0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnVXNpbmcgc2VsZWN0b3I6ICVzJywgc2VsZWN0b3IuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IHNlbGVjdG9yCisgICAgICAgIHNlbGYuX21ha2Vfc2VsZl9waXBlKCkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHJldHVybiBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX3NzbF90cmFuc3BvcnQoc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZiwgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgIHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUsIGV4dHJhLCBzZXJ2ZXIpCisKKyAgICBkZWYgX21ha2VfZGF0YWdyYW1fdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCBhZGRyZXNzLCBleHRyYSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc2VsZWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBOb25lCisgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jbG9zZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihzZWxmLl9zc29jay5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5fc3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9zc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5fY3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9jc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzIC09IDEKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgICMgQSBzZWxmLXNvY2tldCwgcmVhbGx5LiA6LSkKKyAgICAgICAgc2VsZi5fc3NvY2ssIHNlbGYuX2Nzb2NrID0gc2VsZi5fc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuX3Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9jc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzICs9IDEKKyAgICAgICAgc2VsZi5hZGRfcmVhZGVyKHNlbGYuX3Nzb2NrLmZpbGVubygpLCBzZWxmLl9yZWFkX2Zyb21fc2VsZikKKworICAgIGRlZiBfcmVhZF9mcm9tX3NlbGYoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Nzb2NrLnJlY3YoMSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jc29jay5zZW5kKGIneCcpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBfc3RhcnRfc2VydmluZyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0PU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc2VsZi5hZGRfcmVhZGVyKHNvY2suZmlsZW5vKCksIHNlbGYuX2FjY2VwdF9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwgc29jaywgc3NsY29udGV4dCwgc2VydmVyKQorCisgICAgZGVmIF9hY2NlcHRfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dD1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBjb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgQ29ubmVjdGlvbkFib3J0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzICAjIEZhbHNlIGFsYXJtLgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAjIFRoZXJlJ3Mgbm93aGVyZSB0byBzZW5kIHRoZSBlcnJvciwgc28ganVzdCBsb2cgaXQuCisgICAgICAgICAgICAjIFRPRE86IFNvbWVvbmUgd2lsbCB3YW50IGFuIGVycm9yIGhhbmRsZXIgZm9yIHRoaXMuCisgICAgICAgICAgICBpZiBleGMuZXJybm8gaW4gKGVycm5vLkVNRklMRSwgZXJybm8uRU5GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9CVUZTLCBlcnJuby5FTk9NRU0pOgorICAgICAgICAgICAgICAgICMgU29tZSBwbGF0Zm9ybXMgKGUuZy4gTGludXgga2VlcCByZXBvcnRpbmcgdGhlIEZEIGFzCisgICAgICAgICAgICAgICAgIyByZWFkeSwgc28gd2UgcmVtb3ZlIHRoZSByZWFkIGhhbmRsZXIgdGVtcG9yYXJpbHkuCisgICAgICAgICAgICAgICAgIyBXZSdsbCB0cnkgYWdhaW4gaW4gYSB3aGlsZS4KKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdBY2NlcHQgb3V0IG9mIHN5c3RlbSByZXNvdXJjZSAoJXMpJywgZXhjKQorICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihzb2NrLmZpbGVubygpKQorICAgICAgICAgICAgICAgIHNlbGYuY2FsbF9sYXRlcihjb25zdGFudHMuQUNDRVBUX1JFVFJZX0RFTEFZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGFydF9zZXJ2aW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2xjb250ZXh0LCBzZXJ2ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlICAjIFRoZSBldmVudCBsb29wIHdpbGwgY2F0Y2gsIGxvZyBhbmQgaWdub3JlIGl0LgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3NsY29udGV4dDoKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NzbF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sX2ZhY3RvcnkoKSwgc3NsY29udGV4dCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9VHJ1ZSwgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sX2ZhY3RvcnkoKSwgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAjIEl0J3Mgbm93IHVwIHRvIHRoZSBwcm90b2NvbCB0byBoYW5kbGUgdGhlIGNvbm5lY3Rpb24uCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgcmVhZGVyIGNhbGxiYWNrLiIiIgorICAgICAgICBoYW5kbGUgPSBldmVudHMubWFrZV9oYW5kbGUoY2FsbGJhY2ssIGFyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnJlZ2lzdGVyKGZkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUsIE5vbmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2sgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlLCB3cml0ZXIpKQorICAgICAgICAgICAgaWYgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKQorCisgICAgZGVmIHJlbW92ZV9yZWFkZXIoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZW1vdmUgYSByZWFkZXIgY2FsbGJhY2suIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBtYXNrICY9IH5zZWxlY3RvcnMuRVZFTlRfUkVBRAorICAgICAgICAgICAgaWYgbm90IG1hc2s6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IudW5yZWdpc3RlcihmZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrLCAoTm9uZSwgd3JpdGVyKSkKKworICAgICAgICAgICAgaWYgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFkZF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgICIiIkFkZCBhIHdyaXRlciBjYWxsYmFjay4uIiIiCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCBoYW5kbGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2sgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRlciwgaGFuZGxlKSkKKyAgICAgICAgICAgIGlmIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgd3JpdGVyIGNhbGxiYWNrLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBzZWxmLl9zZWxlY3Rvci5nZXRfa2V5KGZkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1hc2ssIChyZWFkZXIsIHdyaXRlcikgPSBrZXkuZXZlbnRzLCBrZXkuZGF0YQorICAgICAgICAgICAgIyBSZW1vdmUgYm90aCB3cml0ZXIgYW5kIGNvbm5lY3Rvci4KKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9XUklURQorICAgICAgICAgICAgaWYgbm90IG1hc2s6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IudW5yZWdpc3RlcihmZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IubW9kaWZ5KGZkLCBtYXNrLCAocmVhZGVyLCBOb25lKSkKKworICAgICAgICAgICAgaWYgd3JpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdyaXRlci5jYW5jZWwoKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19yZWN2KGZ1dCwgRmFsc2UsIHNvY2ssIG4pCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19yZWN2KHNlbGYsIGZ1dCwgcmVnaXN0ZXJlZCwgc29jaywgbik6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgIyBSZW1vdmUgdGhlIGNhbGxiYWNrIGVhcmx5LiAgSXQgc2hvdWxkIGJlIHJhcmUgdGhhdCB0aGUKKyAgICAgICAgICAgICMgc2VsZWN0b3Igc2F5cyB0aGUgZmQgaXMgcmVhZHkgYnV0IHRoZSBjYWxsIHN0aWxsIHJldHVybnMKKyAgICAgICAgICAgICMgRUFHQUlOLCBhbmQgSSBhbSB3aWxsaW5nIHRvIHRha2UgYSBoaXQgaW4gdGhhdCBjYXNlIGluCisgICAgICAgICAgICAjIG9yZGVyIHRvIHNpbXBsaWZ5IHRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzb2NrLnJlY3YobikKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hZGRfcmVhZGVyKGZkLCBzZWxmLl9zb2NrX3JlY3YsIGZ1dCwgVHJ1ZSwgc29jaywgbikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChkYXRhKQorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgIHNlbGYuX3NvY2tfc2VuZGFsbChmdXQsIEZhbHNlLCBzb2NrLCBkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX3NlbmRhbGwoc2VsZiwgZnV0LCByZWdpc3RlcmVkLCBzb2NrLCBkYXRhKToKKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IHNvY2suc2VuZChkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBuID0gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG4gPT0gbGVuKGRhdGEpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBzZWxmLmFkZF93cml0ZXIoZmQsIHNlbGYuX3NvY2tfc2VuZGFsbCwgZnV0LCBUcnVlLCBzb2NrLCBkYXRhKQorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgICMgVGhhdCBhZGRyZXNzIGJldHRlciBub3QgcmVxdWlyZSBhIGxvb2t1cCEgIFdlJ3JlIG5vdCBjYWxsaW5nCisgICAgICAgICMgc2VsZi5nZXRhZGRyaW5mbygpIGZvciB5b3UgaGVyZS4gIEJ1dCB2ZXJpZnlpbmcgdGhpcyBpcworICAgICAgICAjIGNvbXBsaWNhdGVkOyB0aGUgc29ja2V0IG1vZHVsZSBkb2Vzbid0IGhhdmUgYSBwYXR0ZXJuIGZvcgorICAgICAgICAjIElQdjYgYWRkcmVzc2VzICh0aGVyZSBhcmUgdG9vIG1hbnkgZm9ybXMsIGFwcGFyZW50bHkpLgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHNlbGYuX3NvY2tfY29ubmVjdChmdXQsIEZhbHNlLCBzb2NrLCBhZGRyZXNzKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfY29ubmVjdChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICAjIFRPRE86IFVzZSBnZXRhZGRyaW5mbygpIHRvIGxvb2sgdXAgdGhlIGFkZHJlc3MsIHRvIGF2b2lkIHRoZQorICAgICAgICAjIHRyYXAgb2YgaGFuZ2luZyB0aGUgZW50aXJlIGV2ZW50IGxvb3Agd2hlbiB0aGUgYWRkcmVzcworICAgICAgICAjIHJlcXVpcmVzIGRvaW5nIGEgRE5TIGxvb2t1cC4gIChPVE9ILCB0aGUgY2FsbGVyIHNob3VsZAorICAgICAgICAjIGFscmVhZHkgaGF2ZSBkb25lIHRoaXMsIHNvIGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQKKyAgICAgICAgIyBlYXNpbHkgdGVsbCB3aGV0aGVyIHRoZSBhZGRyZXNzIG5lZWRzIGxvb2tpbmcgdXAgb3Igbm90LiAgSQorICAgICAgICAjIGtub3cgaG93IHRvIGRvIHRoaXMgZm9yIElQdjQsIGJ1dCBJUHY2IGFkZHJlc3NlcyBoYXZlIG1hbnkKKyAgICAgICAgIyBzeW50YXhlcy4pCisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICAgICAgIyBGaXJzdCB0aW1lIGFyb3VuZC4KKyAgICAgICAgICAgICAgICBzb2NrLmNvbm5lY3QoYWRkcmVzcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCisgICAgICAgICAgICAgICAgaWYgZXJyICE9IDA6CisgICAgICAgICAgICAgICAgICAgICMgSnVtcCB0byB0aGUgZXhjZXB0IGNsYXVzZSBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsICdDb25uZWN0IGNhbGwgZmFpbGVkICVzJyAlIChhZGRyZXNzLCkpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYWRkX3dyaXRlcihmZCwgc2VsZi5fc29ja19jb25uZWN0LCBmdXQsIFRydWUsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBzb2NrX2FjY2VwdChzZWxmLCBzb2NrKToKKyAgICAgICAgIiIiWFhYIiIiCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19hY2NlcHQoZnV0LCBGYWxzZSwgc29jaykKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX2FjY2VwdChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2spOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHJlc3MgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBjb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfYWNjZXB0LCBmdXQsIFRydWUsIHNvY2spCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoKGNvbm4sIGFkZHJlc3MpKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgZm9yIGtleSwgbWFzayBpbiBldmVudF9saXN0OgorICAgICAgICAgICAgZmlsZW9iaiwgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5maWxlb2JqLCBrZXkuZGF0YQorICAgICAgICAgICAgaWYgbWFzayAmIHNlbGVjdG9ycy5FVkVOVF9SRUFEIGFuZCByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayhyZWFkZXIpCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1dSSVRFIGFuZCB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgd3JpdGVyLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayh3cml0ZXIpCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNvY2suZmlsZW5vKCkpCisgICAgICAgIHNvY2suY2xvc2UoKQorCisKK2NsYXNzIF9TZWxlY3RvclRyYW5zcG9ydCh0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisKKyAgICBtYXhfc2l6ZSA9IDI1NiAqIDEwMjQgICMgQnVmZmVyIHNpemUgcGFzc2VkIHRvIHJlY3YoKS4KKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGJ5dGVhcnJheSAgIyBDb25zdHJ1Y3RzIGluaXRpYWwgdmFsdWUgZm9yIHNlbGYuX2J1ZmZlci4KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3NvY2tldCddID0gc29jaworICAgICAgICBzZWxmLl9leHRyYVsnc29ja25hbWUnXSA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBpZiAncGVlcm5hbWUnIG5vdCBpbiBzZWxmLl9leHRyYToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9leHRyYVsncGVlcm5hbWUnXSA9IHNvY2suZ2V0cGVlcm5hbWUoKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9leHRyYVsncGVlcm5hbWUnXSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fc29jayA9IHNvY2sKKyAgICAgICAgc2VsZi5fc29ja19mZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBzZXJ2ZXIKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gc2VsZi5fYnVmZmVyX2ZhY3RvcnkoKQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgPSAwICAjIFNldCB3aGVuIGNhbGwgdG8gY29ubmVjdGlvbl9sb3N0IHNjaGVkdWxlZC4KKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgY2FsbGVkLgorICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnNldF93cml0ZV9idWZmZXJfbGltaXRzKCkKKyAgICAgICAgaWYgc2VsZi5fc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyLmF0dGFjaChzZWxmKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMpOgorICAgICAgICAjIFNob3VsZCBiZSBjYWxsZWQgZnJvbSBleGNlcHRpb24gaGFuZGxlciBvbmx5LgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMsIChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSk6CisgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdGYXRhbCBlcnJvciBmb3IgJXMnLCBzZWxmKQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zb2NrID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorICAgICAgICAgICAgc2VydmVyID0gc2VsZi5fc2VydmVyCisgICAgICAgICAgICBpZiBzZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VydmVyLmRldGFjaChzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlciA9IE5vbmUKKworICAgIGRlZiBfbWF5YmVfcGF1c2VfcHJvdG9jb2woc2VsZik6CisgICAgICAgIHNpemUgPSBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpCisgICAgICAgIGlmIHNpemUgPD0gc2VsZi5faGlnaF93YXRlcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBub3Qgc2VsZi5fcHJvdG9jb2xfcGF1c2VkOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdwYXVzZV93cml0aW5nKCkgZmFpbGVkJykKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBpZiAoc2VsZi5fcHJvdG9jb2xfcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSA8PSBzZWxmLl9sb3dfd2F0ZXIpOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ3Jlc3VtZV93cml0aW5nKCkgZmFpbGVkJykKKworICAgIGRlZiBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhzZWxmLCBoaWdoPU5vbmUsIGxvdz1Ob25lKToKKyAgICAgICAgaWYgaGlnaCBpcyBOb25lOgorICAgICAgICAgICAgaWYgbG93IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgaGlnaCA9IDY0KjEwMjQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaGlnaCA9IDQqbG93CisgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgbG93ID0gaGlnaCAvLyA0CisgICAgICAgIGlmIG5vdCBoaWdoID49IGxvdyA+PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaGlnaCAoJXIpIG11c3QgYmUgPj0gbG93ICglcikgbXVzdCBiZSA+PSAwJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWdoLCBsb3cpKQorICAgICAgICBzZWxmLl9oaWdoX3dhdGVyID0gaGlnaAorICAgICAgICBzZWxmLl9sb3dfd2F0ZXIgPSBsb3cKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fYnVmZmVyKQorCisKK2NsYXNzIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdBbHJlYWR5IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vdCBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fc29jay5yZWN2KHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAga2VlcF9vcGVuID0gc2VsZi5fcHJvdG9jb2wuZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgICAgICAgICBpZiBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgICMgV2UncmUga2VlcGluZyB0aGUgY29ubmVjdGlvbiBvcGVuIHNvIHRoZQorICAgICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGNhbiB3cml0ZSBtb3JlLCBidXQgd2Ugc3RpbGwgY2FuJ3QKKyAgICAgICAgICAgICAgICAgICAgIyByZWNlaXZlIG1vcmUsIHNvIHJlbW92ZSB0aGUgcmVhZGVyIGNhbGxiYWNrLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCisgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IGNhbGwgd3JpdGUoKSBhZnRlciB3cml0ZV9lb2YoKScpCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIE9wdGltaXphdGlvbjogdHJ5IHRvIHNlbmQgbm93LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG4gPSBzZWxmLl9zb2NrLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgTm90IGFsbCB3YXMgd3JpdHRlbjsgcmVnaXN0ZXIgd3JpdGUgaGFuZGxlci4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICAjIEFkZCBpdCB0byB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9idWZmZXIsICdEYXRhIHNob3VsZCBub3QgYmUgZW1wdHknCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChzZWxmLl9idWZmZXIpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOm5dCisgICAgICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSAgIyBNYXkgYXBwZW5kIHRvIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KF9TZWxlY3RvclRyYW5zcG9ydCk6CisKKyAgICBfYnVmZmVyX2ZhY3RvcnkgPSBieXRlYXJyYXkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBpZiBzc2wgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc3RkbGliIHNzbCBtb2R1bGUgbm90IGF2YWlsYWJsZScpCisKKyAgICAgICAgaWYgc2VydmVyX3NpZGU6CisgICAgICAgICAgICBpZiBub3Qgc3NsY29udGV4dDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXJ2ZXIgc2lkZSBzc2wgbmVlZHMgYSB2YWxpZCBTU0xDb250ZXh0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCBzc2xjb250ZXh0OgorICAgICAgICAgICAgICAgICMgQ2xpZW50IHNpZGUgbWF5IHBhc3Mgc3NsPVRydWUgdG8gdXNlIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICMgY29udGV4dDsgaW4gdGhhdCBjYXNlIHRoZSBzc2xjb250ZXh0IHBhc3NlZCBpcyBOb25lLgorICAgICAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgaXMgdGhlIHNhbWUgYXMgdXNlZCBieSB1cmxsaWIgd2l0aAorICAgICAgICAgICAgICAgICMgY2FkZWZhdWx0PVRydWUuCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdfY3JlYXRlX3N0ZGxpYl9jb250ZXh0Jyk6CisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPWJvb2woc2VydmVyX2hvc3RuYW1lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIEZhbGxiYWNrIGZvciBQeXRob24gMy4zLgorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgICAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorCisgICAgICAgIHdyYXBfa3dhcmdzID0geworICAgICAgICAgICAgJ3NlcnZlcl9zaWRlJzogc2VydmVyX3NpZGUsCisgICAgICAgICAgICAnZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QnOiBGYWxzZSwKKyAgICAgICAgfQorICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgYW5kIG5vdCBzZXJ2ZXJfc2lkZSBhbmQgc3NsLkhBU19TTkk6CisgICAgICAgICAgICB3cmFwX2t3YXJnc1snc2VydmVyX2hvc3RuYW1lJ10gPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgc3Nsc29jayA9IHNzbGNvbnRleHQud3JhcF9zb2NrZXQocmF3c29jaywgKip3cmFwX2t3YXJncykKKworICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3AsIHNzbHNvY2ssIHByb3RvY29sLCBleHRyYSwgc2VydmVyKQorCisgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzZWxmLl93YWl0ZXIgPSB3YWl0ZXIKKyAgICAgICAgc2VsZi5fcmF3c29jayA9IHJhd3NvY2sKKyAgICAgICAgc2VsZi5fc3NsY29udGV4dCA9IHNzbGNvbnRleHQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgICAgICAjIFNTTC1zcGVjaWZpYyBleHRyYSBpbmZvLiAgKHBlZXJjZXJ0IGlzIHNldCBsYXRlcikKKyAgICAgICAgc2VsZi5fZXh0cmEudXBkYXRlKHNzbGNvbnRleHQ9c3NsY29udGV4dCkKKworICAgICAgICBzZWxmLl9vbl9oYW5kc2hha2UoKQorCisgICAgZGVmIF9vbl9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suZG9faGFuZHNoYWtlKCkKKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgaWYgc2VsZi5fd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorCisgICAgICAgIHBlZXJjZXJ0ID0gc2VsZi5fc29jay5nZXRwZWVyY2VydCgpCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX3NzbGNvbnRleHQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgIyBWZXJpZnkgaG9zdG5hbWUgaWYgcmVxdWVzdGVkLCBQeXRob24gMy40KyB1c2VzIGNoZWNrX2hvc3RuYW1lCisgICAgICAgICAgICAjIGFuZCBjaGVja3MgdGhlIGhvc3RuYW1lIGluIGRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBpZiAoc2VsZi5fc2VydmVyX2hvc3RuYW1lIGFuZAorICAgICAgICAgICAgICAgIHNlbGYuX3NzbGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUocGVlcmNlcnQsIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBBZGQgZXh0cmEgaW5mbyB0aGF0IGJlY29tZXMgYXZhaWxhYmxlIGFmdGVyIGhhbmRzaGFrZS4KKyAgICAgICAgc2VsZi5fZXh0cmEudXBkYXRlKHBlZXJjZXJ0PXBlZXJjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyPXNlbGYuX3NvY2suY2lwaGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj1zZWxmLl9zb2NrLmNvbXByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IEZhbHNlCisgICAgICAgIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl93YWl0ZXIuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAjIFhYWCBUaGlzIGlzIGEgYml0IGlja3ksIGdpdmVuIHRoZSBjb21tZW50IGF0IHRoZSB0b3Agb2YKKyAgICAgICAgIyBfcmVhZF9yZWFkeSgpLiAgSXMgaXQgcG9zc2libGUgdG8gZXZva2UgYSBkZWFkbG9jaz8gIEkgZG9uJ3QKKyAgICAgICAgIyBrbm93LCBhbHRob3VnaCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBpdDsgd3JpdGUoKSB3aWxsIHN0aWxsCisgICAgICAgICMgYWNjZXB0IG1vcmUgZGF0YSBmb3IgdGhlIGJ1ZmZlciBhbmQgZXZlbnR1YWxseSB0aGUgYXBwIHdpbGwKKyAgICAgICAgIyBjYWxsIHJlc3VtZV9yZWFkaW5nKCkgYWdhaW4sIGFuZCB0aGluZ3Mgd2lsbCBmbG93IGFnYWluLgorCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdBbHJlYWR5IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSAoJ05vdCBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl93cml0ZV93YW50c19yZWFkOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl93cml0ZV9yZWFkeSgpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3NvY2sucmVjdihzZWxmLm1heF9zaXplKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgc3NsLlNTTFdhbnRSZWFkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRXcml0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcmVhZF93YW50c193cml0ZSA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdyZXR1cm5pbmcgdHJ1ZSBmcm9tIGVvZl9yZWNlaXZlZCgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgbm8gZWZmZWN0IHdoZW4gdXNpbmcgc3NsJykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3JlYWRfd2FudHNfd3JpdGU6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBub3QgKHNlbGYuX3BhdXNlZCBvciBzZWxmLl9jbG9zaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChzZWxmLl9idWZmZXIpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc3NsLlNTTFdhbnRXcml0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBuOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOm5dCisKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSwgbWVtb3J5dmlldykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdkYXRhIGFyZ3VtZW50IG11c3QgYmUgYnl0ZS1pc2ggKCVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShkYXRhKSkKKyAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9jb25uX2xvc3QgPj0gY29uc3RhbnRzLkxPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUzoKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICAjIEFkZCBpdCB0byB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydChfU2VsZWN0b3JUcmFuc3BvcnQpOgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gY29sbGVjdGlvbnMuZGVxdWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgYWRkcmVzcz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSwgXyBpbiBzZWxmLl9idWZmZXIpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9zb2NrLnJlY3Zmcm9tKHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkKGRhdGEsIGFkZHIpCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgYW5kIGFkZHIgbm90IGluIChOb25lLCBzZWxmLl9hZGRyZXNzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgYWRkcmVzczogbXVzdCBiZSBOb25lIG9yICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9hZGRyZXNzLCkpCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0IGFuZCBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc2VuZCBpdCByaWdodCBhd2F5IGZpcnN0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGFkZHIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB3aGF0IHdlIGJ1ZmZlciBpcyBpbW11dGFibGUuCisgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoKGJ5dGVzKGRhdGEpLCBhZGRyKSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF9zZW5kdG9fcmVhZHkoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9idWZmZXIucG9wbGVmdCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kbGVmdCgoZGF0YSwgYWRkcikpICAjIFRyeSBhZ2FpbiBsYXRlci4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSAgIyBNYXkgYXBwZW5kIHRvIGJ1ZmZlci4KKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc3RyZWFtcy5weSBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjNGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3N0cmVhbXMucHkKQEAgLTAsMCArMSwzOTggQEAKKyIiIlN0cmVhbS1yZWxhdGVkIHRoaW5ncy4iIiIKKworX19hbGxfXyA9IFsnU3RyZWFtUmVhZGVyJywgJ1N0cmVhbVdyaXRlcicsICdTdHJlYW1SZWFkZXJQcm90b2NvbCcsCisgICAgICAgICAgICdvcGVuX2Nvbm5lY3Rpb24nLCAnc3RhcnRfc2VydmVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29sbGVjdGlvbnMKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKKworCitfREVGQVVMVF9MSU1JVCA9IDIqKjE2CisKKworQHRhc2tzLmNvcm91dGluZQorZGVmIG9wZW5fY29ubmVjdGlvbihob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAiIiJBIHdyYXBwZXIgZm9yIGNyZWF0ZV9jb25uZWN0aW9uKCkgcmV0dXJuaW5nIGEgKHJlYWRlciwgd3JpdGVyKSBwYWlyLgorCisgICAgVGhlIHJlYWRlciByZXR1cm5lZCBpcyBhIFN0cmVhbVJlYWRlciBpbnN0YW5jZTsgdGhlIHdyaXRlciBpcyBhCisgICAgVHJhbnNwb3J0LgorCisgICAgVGhlIGFyZ3VtZW50cyBhcmUgYWxsIHRoZSB1c3VhbCBhcmd1bWVudHMgdG8gY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgIGV4Y2VwdCBwcm90b2NvbF9mYWN0b3J5OyBtb3N0IGNvbW1vbiBhcmUgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LAorICAgIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBmb2xsb3dpbmcuCisKKyAgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBsb29wICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgICBpbnN0YW5jZSB0byB1c2UpIGFuZCBsaW1pdCAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgIFN0cmVhbVJlYWRlcikuCisKKyAgICAoSWYgeW91IHdhbnQgdG8gY3VzdG9taXplIHRoZSBTdHJlYW1SZWFkZXIgYW5kL29yCisgICAgU3RyZWFtUmVhZGVyUHJvdG9jb2wgY2xhc3NlcywganVzdCBjb3B5IHRoZSBjb2RlIC0tIHRoZXJlJ3MKKyAgICByZWFsbHkgbm90aGluZyBzcGVjaWFsIGhlcmUgZXhjZXB0IHNvbWUgY29udmVuaWVuY2UuKQorICAgICIiIgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgcmVhZGVyID0gU3RyZWFtUmVhZGVyKGxpbWl0PWxpbWl0LCBsb29wPWxvb3ApCisgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIpCisgICAgdHJhbnNwb3J0LCBfID0geWllbGQgZnJvbSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICBsYW1iZGE6IHByb3RvY29sLCBob3N0LCBwb3J0LCAqKmt3ZHMpCisgICAgd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCkKKyAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKKworCitAdGFza3MuY29yb3V0aW5lCitkZWYgc3RhcnRfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIlN0YXJ0IGEgc29ja2V0IHNlcnZlciwgY2FsbCBiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuCisKKyAgICBUaGUgZmlyc3QgcGFyYW1ldGVyLCBgY2xpZW50X2Nvbm5lY3RlZF9jYmAsIHRha2VzIHR3byBwYXJhbWV0ZXJzOgorICAgIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIuICBjbGllbnRfcmVhZGVyIGlzIGEgU3RyZWFtUmVhZGVyCisgICAgb2JqZWN0LCB3aGlsZSBjbGllbnRfd3JpdGVyIGlzIGEgU3RyZWFtV3JpdGVyIG9iamVjdC4gIFRoaXMKKyAgICBwYXJhbWV0ZXIgY2FuIGVpdGhlciBiZSBhIHBsYWluIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGEgY29yb3V0aW5lOworICAgIGlmIGl0IGlzIGEgY29yb3V0aW5lLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gYQorICAgIFRhc2suCisKKyAgICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgIGxvb3AuY3JlYXRlX3NlcnZlcigpIGV4Y2VwdCBwcm90b2NvbF9mYWN0b3J5OyBtb3N0IGNvbW1vbiBhcmUKKyAgICBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgIGZvbGxvd2luZy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgbG9vcC5jcmVhdGVfc2VydmVyKCkuCisKKyAgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBsb29wICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgICBpbnN0YW5jZSB0byB1c2UpIGFuZCBsaW1pdCAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgIFN0cmVhbVJlYWRlcikuCisKKyAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLCBpLmUuIGEKKyAgICBTZXJ2ZXIgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHNlcnZpY2UuCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgICAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgY2xpZW50X2Nvbm5lY3RlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgICAgIHJldHVybiBwcm90b2NvbAorCisgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCBob3N0LCBwb3J0LCAqKmt3ZHMpKQorCisKK2NsYXNzIFN0cmVhbVJlYWRlclByb3RvY29sKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgIiIiVHJpdmlhbCBoZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiBQcm90b2NvbCBhbmQgU3RyZWFtUmVhZGVyLgorCisgICAgKFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgaW5zdGVhZCBvZiBtYWtpbmcgU3RyZWFtUmVhZGVyIGl0c2VsZiBhCisgICAgUHJvdG9jb2wgc3ViY2xhc3MsIGJlY2F1c2UgdGhlIFN0cmVhbVJlYWRlciBoYXMgb3RoZXIgcG90ZW50aWFsCisgICAgdXNlcywgYW5kIHRvIHByZXZlbnQgdGhlIHVzZXIgb2YgdGhlIFN0cmVhbVJlYWRlciB0byBhY2NpZGVudGFsbHkKKyAgICBjYWxsIGluYXBwcm9wcmlhdGUgbWV0aG9kcyBvZiB0aGUgcHJvdG9jb2wuKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbV9yZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2I9Tm9uZSwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlciA9IHN0cmVhbV9yZWFkZXIKKyAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fZHJhaW5fd2FpdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9jbGllbnRfY29ubmVjdGVkX2NiID0gY2xpZW50X2Nvbm5lY3RlZF9jYgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcCAgIyBNYXkgYmUgTm9uZTsgd2UgbWF5IG5ldmVyIG5lZWQgaXQuCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpCisgICAgICAgIGlmIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2Ioc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlcikKKyAgICAgICAgICAgIGlmIHRhc2tzLmlzY29yb3V0aW5lKHJlcyk6CisgICAgICAgICAgICAgICAgdGFza3MuVGFzayhyZXMsIGxvb3A9c2VsZi5fbG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZW9mKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICMgQWxzbyB3YWtlIHVwIHRoZSB3cml0aW5nIHNpZGUuCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuZmVlZF9kYXRhKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZW9mKCkKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BhdXNlZAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9wYXVzZWQKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fZHJhaW5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgU3RyZWFtV3JpdGVyOgorICAgICIiIldyYXBzIGEgVHJhbnNwb3J0LgorCisgICAgVGhpcyBleHBvc2VzIHdyaXRlKCksIHdyaXRlbGluZXMoKSwgW2Nhbl9dd3JpdGVfZW9mKCksCisgICAgZ2V0X2V4dHJhX2luZm8oKSBhbmQgY2xvc2UoKS4gIEl0IGFkZHMgZHJhaW4oKSB3aGljaCByZXR1cm5zIGFuCisgICAgb3B0aW9uYWwgRnV0dXJlIG9uIHdoaWNoIHlvdSBjYW4gd2FpdCBmb3IgZmxvdyBjb250cm9sLiAgSXQgYWxzbworICAgIGFkZHMgYSB0cmFuc3BvcnQgYXR0cmlidXRlIHdoaWNoIHJlZmVyZW5jZXMgdGhlIFRyYW5zcG9ydAorICAgIGRpcmVjdGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3JlYWRlciA9IHJlYWRlcgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRyYW5zcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGVsaW5lcyhkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC53cml0ZV9lb2YoKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2FuX3dyaXRlX2VvZigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdCkKKworICAgIGRlZiBkcmFpbihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBtZXRob2QgaGFzIGFuIHVudXN1YWwgcmV0dXJuIHZhbHVlLgorCisgICAgICAgIFRoZSBpbnRlbmRlZCB1c2UgaXMgdG8gd3JpdGUKKworICAgICAgICAgIHcud3JpdGUoZGF0YSkKKyAgICAgICAgICB5aWVsZCBmcm9tIHcuZHJhaW4oKQorCisgICAgICAgIFdoZW4gdGhlcmUncyBub3RoaW5nIHRvIHdhaXQgZm9yLCBkcmFpbigpIHJldHVybnMgKCksIGFuZCB0aGUKKyAgICAgICAgeWllbGQtZnJvbSBjb250aW51ZXMgaW1tZWRpYXRlbHkuICBXaGVuIHRoZSB0cmFuc3BvcnQgYnVmZmVyCisgICAgICAgIGlzIGZ1bGwgKHRoZSBwcm90b2NvbCBpcyBwYXVzZWQpLCBkcmFpbigpIGNyZWF0ZXMgYW5kIHJldHVybnMKKyAgICAgICAgYSBGdXR1cmUgYW5kIHRoZSB5aWVsZC1mcm9tIHdpbGwgYmxvY2sgdW50aWwgdGhhdCBGdXR1cmUgaXMKKyAgICAgICAgY29tcGxldGVkLCB3aGljaCB3aWxsIGhhcHBlbiB3aGVuIHRoZSBidWZmZXIgaXMgKHBhcnRpYWxseSkKKyAgICAgICAgZHJhaW5lZCBhbmQgdGhlIHByb3RvY29sIGlzIHJlc3VtZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9yZWFkZXIuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX3dyaXRlci5fZXhjZXB0aW9uCisgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydC5fY29ubl9sb3N0OiAgIyBVc2VzIHByaXZhdGUgdmFyaWFibGUuCisgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcignQ29ubmVjdGlvbiBsb3N0JykKKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb3RvY29sLl9wYXVzZWQ6CisgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fcHJvdG9jb2wuX2RyYWluX3dhaXRlcgorICAgICAgICBhc3NlcnQgd2FpdGVyIGlzIE5vbmUgb3Igd2FpdGVyLmNhbmNlbGxlZCgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wuX2RyYWluX3dhaXRlciA9IHdhaXRlcgorICAgICAgICByZXR1cm4gd2FpdGVyCisKKworY2xhc3MgU3RyZWFtUmVhZGVyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCBsb29wPU5vbmUpOgorICAgICAgICAjIFRoZSBsaW5lIGxlbmd0aCBsaW1pdCBpcyAgYSBzZWN1cml0eSBmZWF0dXJlOworICAgICAgICAjIGl0IGFsc28gZG91YmxlcyBhcyBoYWxmIHRoZSBidWZmZXIgbGltaXQuCisgICAgICAgIHNlbGYuX2xpbWl0ID0gbGltaXQKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IGNvbGxlY3Rpb25zLmRlcXVlKCkgICMgRGVxdWUgb2YgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCA9IDAgICMgQnl0ZXMgaW4gYnVmZmVyLgorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZSAgIyBXaGV0aGVyIHdlJ3JlIGRvbmUuCisgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUgICMgQSBmdXR1cmUuCisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorCisgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjCisKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIHNldF90cmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3RyYW5zcG9ydCBpcyBOb25lLCAnVHJhbnNwb3J0IGFscmVhZHkgc2V0JworICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkIGFuZCBzZWxmLl9ieXRlX2NvdW50IDw9IHNlbGYuX2xpbWl0OgorICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgZmVlZF9lb2Yoc2VsZik6CisgICAgICAgIHNlbGYuX2VvZiA9IFRydWUKKyAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IE5vbmUKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoVHJ1ZSkKKworICAgIGRlZiBmZWVkX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZChkYXRhKQorICAgICAgICBzZWxmLl9ieXRlX2NvdW50ICs9IGxlbihkYXRhKQorCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgICAgIGlmIChzZWxmLl90cmFuc3BvcnQgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCA+IDIqc2VsZi5fbGltaXQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYW5zcG9ydCBjYW4ndCBiZSBwYXVzZWQuCisgICAgICAgICAgICAgICAgIyBXZSdsbCBqdXN0IGhhdmUgdG8gYnVmZmVyIGFsbCBkYXRhLgorICAgICAgICAgICAgICAgICMgRm9yZ2V0IHRoZSB0cmFuc3BvcnQgc28gd2UgZG9uJ3Qga2VlcCB0cnlpbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIHBhcnRzX3NpemUgPSAwCisgICAgICAgIG5vdF9lbm91Z2ggPSBUcnVlCisKKyAgICAgICAgd2hpbGUgbm90X2Vub3VnaDoKKyAgICAgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlciBhbmQgbm90X2Vub3VnaDoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fYnVmZmVyLnBvcGxlZnQoKQorICAgICAgICAgICAgICAgIGljaGFyID0gZGF0YS5maW5kKGInXG4nKQorICAgICAgICAgICAgICAgIGlmIGljaGFyIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzX3NpemUgKz0gbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWNoYXIgKz0gMQorICAgICAgICAgICAgICAgICAgICBoZWFkLCB0YWlsID0gZGF0YVs6aWNoYXJdLCBkYXRhW2ljaGFyOl0KKyAgICAgICAgICAgICAgICAgICAgaWYgdGFpbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmRsZWZ0KHRhaWwpCisgICAgICAgICAgICAgICAgICAgIG5vdF9lbm91Z2ggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgcGFydHNfc2l6ZSArPSBsZW4oaGVhZCkKKworICAgICAgICAgICAgICAgIGlmIHBhcnRzX3NpemUgPiBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCAtPSBwYXJ0c19zaXplCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdMaW5lIGlzIHRvbyBsb25nJykKKworICAgICAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdF9lbm91Z2g6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3dhaXRlciBpcyBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisKKyAgICAgICAgbGluZSA9IGInJy5qb2luKHBhcnRzKQorICAgICAgICBzZWxmLl9ieXRlX2NvdW50IC09IHBhcnRzX3NpemUKKyAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3RyYW5zcG9ydCgpCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgaWYgbm90IG46CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYnl0ZV9jb3VudCBhbmQgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3dhaXRlcgorICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fd2FpdGVyCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIGlmIG4gPCAwIG9yIHNlbGYuX2J5dGVfY291bnQgPD0gbjoKKyAgICAgICAgICAgIGRhdGEgPSBiJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fYnl0ZV9jb3VudCA9IDAKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKworICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIHBhcnRzX2J5dGVzID0gMAorICAgICAgICB3aGlsZSBzZWxmLl9idWZmZXIgYW5kIHBhcnRzX2J5dGVzIDwgbjoKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIucG9wbGVmdCgpCisgICAgICAgICAgICBkYXRhX2J5dGVzID0gbGVuKGRhdGEpCisgICAgICAgICAgICBpZiBuIDwgcGFydHNfYnl0ZXMgKyBkYXRhX2J5dGVzOgorICAgICAgICAgICAgICAgIGRhdGFfYnl0ZXMgPSBuIC0gcGFydHNfYnl0ZXMKKyAgICAgICAgICAgICAgICBkYXRhLCByZXN0ID0gZGF0YVs6ZGF0YV9ieXRlc10sIGRhdGFbZGF0YV9ieXRlczpdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyLmFwcGVuZGxlZnQocmVzdCkKKworICAgICAgICAgICAgcGFydHMuYXBwZW5kKGRhdGEpCisgICAgICAgICAgICBwYXJ0c19ieXRlcyArPSBkYXRhX2J5dGVzCisgICAgICAgICAgICBzZWxmLl9ieXRlX2NvdW50IC09IGRhdGFfYnl0ZXMKKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorCisgICAgICAgIHJldHVybiBiJycuam9pbihwYXJ0cykKKworICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICBkZWYgcmVhZGV4YWN0bHkoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuX2V4Y2VwdGlvbgorCisgICAgICAgIGlmIG4gPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBiJycKKworICAgICAgICB3aGlsZSBzZWxmLl9ieXRlX2NvdW50IDwgbiBhbmQgbm90IHNlbGYuX2VvZjoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fd2FpdGVyCisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0ZXIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZWxmLnJlYWQobikpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90YXNrcy5weSBiL0xpYi9hc3luY2lvL3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTcxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90YXNrcy5weQpAQCAtMCwwICsxLDY1NyBAQAorIiIiU3VwcG9ydCBmb3IgdGFza3MsIGNvcm91dGluZXMgYW5kIHRoZSBzY2hlZHVsZXIuIiIiCisKK19fYWxsX18gPSBbJ2Nvcm91dGluZScsICdUYXNrJywKKyAgICAgICAgICAgJ0ZJUlNUX0NPTVBMRVRFRCcsICdGSVJTVF9FWENFUFRJT04nLCAnQUxMX0NPTVBMRVRFRCcsCisgICAgICAgICAgICd3YWl0JywgJ3dhaXRfZm9yJywgJ2FzX2NvbXBsZXRlZCcsICdzbGVlcCcsICdhc3luYycsCisgICAgICAgICAgICdnYXRoZXInLCAnc2hpZWxkJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb25jdXJyZW50LmZ1dHVyZXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgd2Vha3JlZgorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisjIElmIHlvdSBzZXQgX0RFQlVHIHRvIHRydWUsIEBjb3JvdXRpbmUgd2lsbCB3cmFwIHRoZSByZXN1bHRpbmcKKyMgZ2VuZXJhdG9yIG9iamVjdHMgaW4gYSBDb3JvV3JhcHBlciBpbnN0YW5jZSAoZGVmaW5lZCBiZWxvdykuICBUaGF0CisjIGluc3RhbmNlIHdpbGwgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBnZW5lcmF0b3IgaXMgbmV2ZXIgaXRlcmF0ZWQKKyMgb3Zlciwgd2hpY2ggbWF5IGhhcHBlbiB3aGVuIHlvdSBmb3JnZXQgdG8gdXNlICJ5aWVsZCBmcm9tIiB3aXRoIGEKKyMgY29yb3V0aW5lIGNhbGwuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBfREVCVUcgZmxhZyBpcyB0YWtlbgorIyB3aGVuIHRoZSBkZWNvcmF0b3IgaXMgdXNlZCwgc28gdG8gYmUgb2YgYW55IHVzZSBpdCBtdXN0IGJlIHNldAorIyBiZWZvcmUgeW91IGRlZmluZSB5b3VyIGNvcm91dGluZXMuICBBIGRvd25zaWRlIG9mIHVzaW5nIHRoaXMgZmVhdHVyZQorIyBpcyB0aGF0IHRyYWNlYmFja3Mgc2hvdyBlbnRyaWVzIGZvciB0aGUgQ29yb1dyYXBwZXIuX19uZXh0X18gbWV0aG9kCisjIHdoZW4gX0RFQlVHIGlzIHRydWUuCitfREVCVUcgPSBGYWxzZQorCisKK2NsYXNzIENvcm9XcmFwcGVyOgorICAgICIiIldyYXBwZXIgZm9yIGNvcm91dGluZSBpbiBfREVCVUcgbW9kZS4iIiIKKworICAgIF9fc2xvdF9fID0gWydnZW4nLCAnZnVuYyddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuLCBmdW5jKToKKyAgICAgICAgYXNzZXJ0IGluc3BlY3QuaXNnZW5lcmF0b3IoZ2VuKSwgZ2VuCisgICAgICAgIHNlbGYuZ2VuID0gZ2VuCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5nZW4pCisKKyAgICBkZWYgc2VuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorCisgICAgZGVmIHRocm93KHNlbGYsIGV4Yyk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi50aHJvdyhleGMpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5jbG9zZSgpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgZnJhbWUgPSBzZWxmLmdlbi5naV9mcmFtZQorICAgICAgICBpZiBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUuZl9sYXN0aSA9PSAtMToKKyAgICAgICAgICAgIGZ1bmMgPSBzZWxmLmZ1bmMKKyAgICAgICAgICAgIGNvZGUgPSBmdW5jLl9fY29kZV9fCisgICAgICAgICAgICBmaWxlbmFtZSA9IGNvZGUuY29fZmlsZW5hbWUKKyAgICAgICAgICAgIGxpbmVubyA9IGNvZGUuY29fZmlyc3RsaW5lbm8KKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcigKKyAgICAgICAgICAgICAgICAnQ29yb3V0aW5lICVyIGRlZmluZWQgYXQgJXM6JXMgd2FzIG5ldmVyIHlpZWxkZWQgZnJvbScsCisgICAgICAgICAgICAgICAgZnVuYy5fX25hbWVfXywgZmlsZW5hbWUsIGxpbmVubykKKworCitkZWYgY29yb3V0aW5lKGZ1bmMpOgorICAgICIiIkRlY29yYXRvciB0byBtYXJrIGNvcm91dGluZXMuCisKKyAgICBJZiB0aGUgY29yb3V0aW5lIGlzIG5vdCB5aWVsZGVkIGZyb20gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCwKKyAgICBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZC4KKyAgICAiIiIKKyAgICBpZiBpbnNwZWN0LmlzZ2VuZXJhdG9yZnVuY3Rpb24oZnVuYyk6CisgICAgICAgIGNvcm8gPSBmdW5jCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgY29ybygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXMgPSBmdW5jKCphcmdzLCAqKmt3KQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXMsIGZ1dHVyZXMuRnV0dXJlKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKHJlcyk6CisgICAgICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSByZXMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgIGlmIG5vdCBfREVCVUc6CisgICAgICAgIHdyYXBwZXIgPSBjb3JvCisgICAgZWxzZToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHcgPSBDb3JvV3JhcHBlcihjb3JvKCphcmdzLCAqKmt3ZHMpLCBmdW5jKQorICAgICAgICAgICAgdy5fX25hbWVfXyA9IGNvcm8uX19uYW1lX18KKyAgICAgICAgICAgIHcuX19kb2NfXyA9IGNvcm8uX19kb2NfXworICAgICAgICAgICAgcmV0dXJuIHcKKworICAgIHdyYXBwZXIuX2lzX2Nvcm91dGluZSA9IFRydWUgICMgRm9yIGlzY29yb3V0aW5lZnVuY3Rpb24oKS4KKyAgICByZXR1cm4gd3JhcHBlcgorCisKK2RlZiBpc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGZ1bmMgaXMgYSBkZWNvcmF0ZWQgY29yb3V0aW5lIGZ1bmN0aW9uLiIiIgorICAgIHJldHVybiBnZXRhdHRyKGZ1bmMsICdfaXNfY29yb3V0aW5lJywgRmFsc2UpCisKKworZGVmIGlzY29yb3V0aW5lKG9iaik6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgb2JqIGlzIGEgY29yb3V0aW5lIG9iamVjdC4iIiIKKyAgICByZXR1cm4gaXNpbnN0YW5jZShvYmosIENvcm9XcmFwcGVyKSBvciBpbnNwZWN0LmlzZ2VuZXJhdG9yKG9iaikKKworCitjbGFzcyBUYXNrKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJBIGNvcm91dGluZSB3cmFwcGVkIGluIGEgRnV0dXJlLiIiIgorCisgICAgIyBBbiBpbXBvcnRhbnQgaW52YXJpYW50IG1haW50YWluZWQgd2hpbGUgYSBUYXNrIG5vdCBkb25lOgorICAgICMKKyAgICAjIC0gRWl0aGVyIF9mdXRfd2FpdGVyIGlzIE5vbmUsIGFuZCBfc3RlcCgpIGlzIHNjaGVkdWxlZDsKKyAgICAjIC0gb3IgX2Z1dF93YWl0ZXIgaXMgc29tZSBGdXR1cmUsIGFuZCBfc3RlcCgpIGlzICpub3QqIHNjaGVkdWxlZC4KKyAgICAjCisgICAgIyBUaGUgb25seSB0cmFuc2l0aW9uIGZyb20gdGhlIGxhdHRlciB0byB0aGUgZm9ybWVyIGlzIHRocm91Z2gKKyAgICAjIF93YWtldXAoKS4gIFdoZW4gX2Z1dF93YWl0ZXIgaXMgbm90IE5vbmUsIG9uZSBvZiBpdHMgY2FsbGJhY2tzCisgICAgIyBtdXN0IGJlIF93YWtldXAoKS4KKworICAgICMgV2VhayBzZXQgY29udGFpbmluZyBhbGwgdGFza3MgYWxpdmUuCisgICAgX2FsbF90YXNrcyA9IHdlYWtyZWYuV2Vha1NldCgpCisKKyAgICAjIERpY3Rpb25hcnkgY29udGFpbmluZyB0YXNrcyB0aGF0IGFyZSBjdXJyZW50bHkgYWN0aXZlIGluCisgICAgIyBhbGwgcnVubmluZyBldmVudCBsb29wcy4gIHtFdmVudExvb3A6IFRhc2t9CisgICAgX2N1cnJlbnRfdGFza3MgPSB7fQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGN1cnJlbnRfdGFzayhjbHMsIGxvb3A9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayBpbiBhbiBldmVudCBsb29wIG9yIE5vbmUuCisKKyAgICAgICAgQnkgZGVmYXVsdCB0aGUgY3VycmVudCB0YXNrIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGlzIHJldHVybmVkLgorCisgICAgICAgIE5vbmUgaXMgcmV0dXJuZWQgd2hlbiBjYWxsZWQgbm90IGluIHRoZSBjb250ZXh0IG9mIGEgVGFzay4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZXR1cm4gY2xzLl9jdXJyZW50X3Rhc2tzLmdldChsb29wKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFsbF90YXNrcyhjbHMsIGxvb3A9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIHNldCBvZiBhbGwgdGFza3MgZm9yIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgICAgQnkgZGVmYXVsdCBhbGwgdGFza3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgYXJlIHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIHJldHVybiB7dCBmb3IgdCBpbiBjbHMuX2FsbF90YXNrcyBpZiB0Ll9sb29wIGlzIGxvb3B9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ybywgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGlzY29yb3V0aW5lKGNvcm8pLCByZXByKGNvcm8pICAjIE5vdCBhIGNvcm91dGluZSBmdW5jdGlvbiEKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2Nvcm8gPSBpdGVyKGNvcm8pICAjIFVzZSB0aGUgaXRlcmF0b3IganVzdCBpbiBjYXNlLgorICAgICAgICBzZWxmLl9mdXRfd2FpdGVyID0gTm9uZQorICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3N0ZXApCisgICAgICAgIHNlbGYuX19jbGFzc19fLl9hbGxfdGFza3MuYWRkKHNlbGYpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBpZiAoc2VsZi5fbXVzdF9jYW5jZWwgYW5kCisgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9PSBmdXR1cmVzLl9QRU5ESU5HIGFuZAorICAgICAgICAgICAgJzxQRU5ESU5HJyBpbiByZXMpOgorICAgICAgICAgICAgcmVzID0gcmVzLnJlcGxhY2UoJzxQRU5ESU5HJywgJzxDQU5DRUxMSU5HJywgMSkKKyAgICAgICAgaSA9IHJlcy5maW5kKCc8JykKKyAgICAgICAgaWYgaSA8IDA6CisgICAgICAgICAgICBpID0gbGVuKHJlcykKKyAgICAgICAgcmVzID0gcmVzWzppXSArICcoPHt9PiknLmZvcm1hdChzZWxmLl9jb3JvLl9fbmFtZV9fKSArIHJlc1tpOl0KKyAgICAgICAgcmV0dXJuIHJlcworCisgICAgZGVmIGdldF9zdGFjayhzZWxmLCAqLCBsaW1pdD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIHN0YWNrIGZyYW1lcyBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgYWN0aXZlLCB0aGlzIHJldHVybnMgdGhlIHN0YWNrIHdoZXJlIGl0IGlzCisgICAgICAgIHN1c3BlbmRlZC4gIElmIHRoZSBjb3JvdXRpbmUgaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgb3Igd2FzCisgICAgICAgIGNhbmNlbGxlZCwgdGhpcyByZXR1cm5zIGFuIGVtcHR5IGxpc3QuICBJZiB0aGUgY29yb3V0aW5lIHdhcworICAgICAgICB0ZXJtaW5hdGVkIGJ5IGFuIGV4Y2VwdGlvbiwgdGhpcyByZXR1cm5zIHRoZSBsaXN0IG9mIHRyYWNlYmFjaworICAgICAgICBmcmFtZXMuCisKKyAgICAgICAgVGhlIGZyYW1lcyBhcmUgYWx3YXlzIG9yZGVyZWQgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0LgorCisgICAgICAgIFRoZSBvcHRpb25hbCBsaW1pdCBnaXZlcyB0aGUgbWF4aW11bSBudW1tYmVyIG9mIGZyYW1lcyB0bworICAgICAgICByZXR1cm47IGJ5IGRlZmF1bHQgYWxsIGF2YWlsYWJsZSBmcmFtZXMgYXJlIHJldHVybmVkLiAgSXRzCisgICAgICAgIG1lYW5pbmcgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlciBhIHN0YWNrIG9yIGEgdHJhY2ViYWNrIGlzCisgICAgICAgIHJldHVybmVkOiB0aGUgbmV3ZXN0IGZyYW1lcyBvZiBhIHN0YWNrIGFyZSByZXR1cm5lZCwgYnV0IHRoZQorICAgICAgICBvbGRlc3QgZnJhbWVzIG9mIGEgdHJhY2ViYWNrIGFyZSByZXR1cm5lZC4gIChUaGlzIG1hdGNoZXMgdGhlCisgICAgICAgIGJlaGF2aW9yIG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLikKKworICAgICAgICBGb3IgcmVhc29ucyBiZXlvbmQgb3VyIGNvbnRyb2wsIG9ubHkgb25lIHN0YWNrIGZyYW1lIGlzCisgICAgICAgIHJldHVybmVkIGZvciBhIHN1c3BlbmRlZCBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBmcmFtZXMgPSBbXQorICAgICAgICBmID0gc2VsZi5fY29yby5naV9mcmFtZQorICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2hpbGUgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgPD0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGxpbWl0IC09IDEKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgZiA9IGYuZl9iYWNrCisgICAgICAgICAgICBmcmFtZXMucmV2ZXJzZSgpCisgICAgICAgIGVsaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGIgPSBzZWxmLl9leGNlcHRpb24uX190cmFjZWJhY2tfXworICAgICAgICAgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0IDw9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBsaW1pdCAtPSAxCisgICAgICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCh0Yi50Yl9mcmFtZSkKKyAgICAgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICAgICAgcmV0dXJuIGZyYW1lcworCisgICAgZGVmIHByaW50X3N0YWNrKHNlbGYsICosIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CisgICAgICAgICIiIlByaW50IHRoZSBzdGFjayBvciB0cmFjZWJhY2sgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgICBUaGlzIHByb2R1Y2VzIG91dHB1dCBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUsCisgICAgICAgIGZvciB0aGUgZnJhbWVzIHJldHJpZXZlZCBieSBnZXRfc3RhY2soKS4gIFRoZSBsaW1pdCBhcmd1bWVudAorICAgICAgICBpcyBwYXNzZWQgdG8gZ2V0X3N0YWNrKCkuICBUaGUgZmlsZSBhcmd1bWVudCBpcyBhbiBJL08gc3RyZWFtCisgICAgICAgIHRvIHdoaWNoIHRoZSBvdXRwdXQgZ29lczsgYnkgZGVmYXVsdCBpdCBnb2VzIHRvIHN5cy5zdGRlcnIuCisgICAgICAgICIiIgorICAgICAgICBleHRyYWN0ZWRfbGlzdCA9IFtdCisgICAgICAgIGNoZWNrZWQgPSBzZXQoKQorICAgICAgICBmb3IgZiBpbiBzZWxmLmdldF9zdGFjayhsaW1pdD1saW1pdCk6CisgICAgICAgICAgICBsaW5lbm8gPSBmLmZfbGluZW5vCisgICAgICAgICAgICBjbyA9IGYuZl9jb2RlCisgICAgICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBuYW1lID0gY28uY29fbmFtZQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIGNoZWNrZWQ6CisgICAgICAgICAgICAgICAgY2hlY2tlZC5hZGQoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCisgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCisgICAgICAgICAgICBleHRyYWN0ZWRfbGlzdC5hcHBlbmQoKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUpKQorICAgICAgICBleGMgPSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgaWYgbm90IGV4dHJhY3RlZF9saXN0OgorICAgICAgICAgICAgcHJpbnQoJ05vIHN0YWNrIGZvciAlcicgJSBzZWxmLCBmaWxlPWZpbGUpCisgICAgICAgIGVsaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoJ1RyYWNlYmFjayBmb3IgJXIgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JyAlIHNlbGYsCisgICAgICAgICAgICAgICAgICBmaWxlPWZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgnU3RhY2sgZm9yICVyIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicgJSBzZWxmLAorICAgICAgICAgICAgICAgICAgZmlsZT1maWxlKQorICAgICAgICB0cmFjZWJhY2sucHJpbnRfbGlzdChleHRyYWN0ZWRfbGlzdCwgZmlsZT1maWxlKQorICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4Yy5fX2NsYXNzX18sIGV4Yyk6CisgICAgICAgICAgICAgICAgcHJpbnQobGluZSwgZmlsZT1maWxlLCBlbmQ9JycpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRvbmUoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlci5jYW5jZWwoKToKKyAgICAgICAgICAgICAgICAjIExlYXZlIHNlbGYuX2Z1dF93YWl0ZXI7IGl0IG1heSBiZSBhIFRhc2sgdGhhdAorICAgICAgICAgICAgICAgICMgY2F0Y2hlcyBhbmQgaWdub3JlcyB0aGUgY2FuY2VsbGF0aW9uIHNvIHdlIG1heSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byBjYW5jZWwgaXQgYWdhaW4gbGF0ZXIuCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgIyBJdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgc2VsZi5fc3RlcCBpcyBhbHJlYWR5IHNjaGVkdWxlZC4KKyAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBUcnVlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3N0ZXAoc2VsZiwgdmFsdWU9Tm9uZSwgZXhjPU5vbmUpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuZG9uZSgpLCBcCisgICAgICAgICAgICAnX3N0ZXAoKTogYWxyZWFkeSBkb25lOiB7IXJ9LCB7IXJ9LCB7IXJ9Jy5mb3JtYXQoc2VsZiwgdmFsdWUsIGV4YykKKyAgICAgICAgaWYgc2VsZi5fbXVzdF9jYW5jZWw6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGMsIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIGV4YyA9IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICBjb3JvID0gc2VsZi5fY29ybworICAgICAgICBzZWxmLl9mdXRfd2FpdGVyID0gTm9uZQorCisgICAgICAgIHNlbGYuX19jbGFzc19fLl9jdXJyZW50X3Rhc2tzW3NlbGYuX2xvb3BdID0gc2VsZgorICAgICAgICAjIENhbGwgZWl0aGVyIGNvcm8udGhyb3coZXhjKSBvciBjb3JvLnNlbmQodmFsdWUpLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yby50aHJvdyhleGMpCisgICAgICAgICAgICBlbGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvcm8uc2VuZCh2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV4dChjb3JvKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9yZXN1bHQoZXhjLnZhbHVlKQorICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzdXBlcigpLmNhbmNlbCgpICAjIEkuZS4sIEZ1dHVyZS5jYW5jZWwoc2VsZikuCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICAgICAgICAgICMgWWllbGRlZCBGdXR1cmUgbXVzdCBjb21lIGZyb20gRnV0dXJlLl9faXRlcl9fKCkuCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0Ll9ibG9ja2luZzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9ibG9ja2luZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl93YWtldXApCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Z1dF93YWl0ZXIgPSByZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbXVzdF9jYW5jZWw6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyLmNhbmNlbCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3lpZWxkIHdhcyB1c2VkIGluc3RlYWQgb2YgeWllbGQgZnJvbSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRhc2sgeyFyfSB3aXRoIHshcn0nLmZvcm1hdChzZWxmLCByZXN1bHQpKSkKKyAgICAgICAgICAgIGVsaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBCYXJlIHlpZWxkIHJlbGlucXVpc2hlcyBjb250cm9sIGZvciBvbmUgZXZlbnQgbG9vcCBpdGVyYXRpb24uCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fc3RlcCkKKyAgICAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2dlbmVyYXRvcihyZXN1bHQpOgorICAgICAgICAgICAgICAgICMgWWllbGRpbmcgYSBnZW5lcmF0b3IgaXMganVzdCB3cm9uZy4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ3lpZWxkIHdhcyB1c2VkIGluc3RlYWQgb2YgeWllbGQgZnJvbSBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgJ2dlbmVyYXRvciBpbiB0YXNrIHshcn0gd2l0aCB7fScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHJlc3VsdCkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIHNvbWV0aGluZyBlbHNlIGlzIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLCBOb25lLAorICAgICAgICAgICAgICAgICAgICBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAnVGFzayBnb3QgYmFkIHlpZWxkOiB7IXJ9Jy5mb3JtYXQocmVzdWx0KSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fY3VycmVudF90YXNrcy5wb3Aoc2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZiA9IE5vbmUKKworICAgIGRlZiBfd2FrZXVwKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZnV0dXJlLnJlc3VsdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBUaGlzIG1heSBhbHNvIGJlIGEgY2FuY2VsbGF0aW9uLgorICAgICAgICAgICAgc2VsZi5fc3RlcChOb25lLCBleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdGVwKHZhbHVlLCBOb25lKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCisjIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkgc2ltaWxhciB0byB0aG9zZSBpbiBQRVAgMzE0OC4KKworRklSU1RfQ09NUExFVEVEID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0NPTVBMRVRFRAorRklSU1RfRVhDRVBUSU9OID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0VYQ0VQVElPTgorQUxMX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5BTExfQ09NUExFVEVECisKKworQGNvcm91dGluZQorZGVmIHdhaXQoZnMsICosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKToKKyAgICAiIiJXYWl0IGZvciB0aGUgRnV0dXJlcyBhbmQgY29yb3V0aW5lcyBnaXZlbiBieSBmcyB0byBjb21wbGV0ZS4KKworICAgIENvcm91dGluZXMgd2lsbCBiZSB3cmFwcGVkIGluIFRhc2tzLgorCisgICAgUmV0dXJucyB0d28gc2V0cyBvZiBGdXR1cmU6IChkb25lLCBwZW5kaW5nKS4KKworICAgIFVzYWdlOgorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChmcykKKworICAgIE5vdGU6IFRoaXMgZG9lcyBub3QgcmFpc2UgVGltZW91dEVycm9yISBGdXR1cmVzIHRoYXQgYXJlbid0IGRvbmUKKyAgICB3aGVuIHRoZSB0aW1lb3V0IG9jY3VycyBhcmUgcmV0dXJuZWQgaW4gdGhlIHNlY29uZCBzZXQuCisgICAgIiIiCisgICAgaWYgbm90IGZzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXQgb2YgY29yb3V0aW5lcy9GdXR1cmVzIGlzIGVtcHR5LicpCisKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZnMgPSBzZXQoYXN5bmMoZiwgbG9vcD1sb29wKSBmb3IgZiBpbiBmcykKKworICAgIGlmIHJldHVybl93aGVuIG5vdCBpbiAoRklSU1RfQ09NUExFVEVELCBGSVJTVF9FWENFUFRJT04sIEFMTF9DT01QTEVURUQpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIHJldHVybl93aGVuIHZhbHVlOiB7fScuZm9ybWF0KHJldHVybl93aGVuKSkKKyAgICByZXR1cm4gKHlpZWxkIGZyb20gX3dhaXQoZnMsIHRpbWVvdXQsIHJldHVybl93aGVuLCBsb29wKSkKKworCitkZWYgX3JlbGVhc2Vfd2FpdGVyKHdhaXRlciwgdmFsdWU9VHJ1ZSwgKmFyZ3MpOgorICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh2YWx1ZSkKKworCitAY29yb3V0aW5lCitkZWYgd2FpdF9mb3IoZnV0LCB0aW1lb3V0LCAqLCBsb29wPU5vbmUpOgorICAgICIiIldhaXQgZm9yIHRoZSBzaW5nbGUgRnV0dXJlIG9yIGNvcm91dGluZSB0byBjb21wbGV0ZSwgd2l0aCB0aW1lb3V0LgorCisgICAgQ29yb3V0aW5lIHdpbGwgYmUgd3JhcHBlZCBpbiBUYXNrLgorCisgICAgUmV0dXJucyByZXN1bHQgb2YgdGhlIEZ1dHVyZSBvciBjb3JvdXRpbmUuICBSYWlzZXMgVGltZW91dEVycm9yIHdoZW4KKyAgICB0aW1lb3V0IG9jY3Vycy4KKworICAgIFVzYWdlOgorCisgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihmdXQsIDEwLjApCisKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyLCBGYWxzZSkKKyAgICBjYiA9IGZ1bmN0b29scy5wYXJ0aWFsKF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyLCBUcnVlKQorCisgICAgZnV0ID0gYXN5bmMoZnV0LCBsb29wPWxvb3ApCisgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorCisgICAgdHJ5OgorICAgICAgICBpZiAoeWllbGQgZnJvbSB3YWl0ZXIpOgorICAgICAgICAgICAgcmV0dXJuIGZ1dC5yZXN1bHQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlLmNhbmNlbCgpCisKKworQGNvcm91dGluZQorZGVmIF93YWl0KGZzLCB0aW1lb3V0LCByZXR1cm5fd2hlbiwgbG9vcCk6CisgICAgIiIiSW50ZXJuYWwgaGVscGVyIGZvciB3YWl0KCkgYW5kIF93YWl0X2ZvcigpLgorCisgICAgVGhlIGZzIGFyZ3VtZW50IG11c3QgYmUgYSBjb2xsZWN0aW9uIG9mIEZ1dHVyZXMuCisgICAgIiIiCisgICAgYXNzZXJ0IGZzLCAnU2V0IG9mIEZ1dHVyZXMgaXMgZW1wdHkuJworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IE5vbmUKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKyAgICBjb3VudGVyID0gbGVuKGZzKQorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBub25sb2NhbCBjb3VudGVyCisgICAgICAgIGNvdW50ZXIgLT0gMQorICAgICAgICBpZiAoY291bnRlciA8PSAwIG9yCisgICAgICAgICAgICByZXR1cm5fd2hlbiA9PSBGSVJTVF9DT01QTEVURUQgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTiBhbmQgKG5vdCBmLmNhbmNlbGxlZCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5leGNlcHRpb24oKSBpcyBub3QgTm9uZSkpOgorICAgICAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KEZhbHNlKQorCisgICAgZm9yIGYgaW4gZnM6CisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soX29uX2NvbXBsZXRpb24pCisKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgZmluYWxseToKKyAgICAgICAgaWYgdGltZW91dF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorCisgICAgZG9uZSwgcGVuZGluZyA9IHNldCgpLCBzZXQoKQorICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICBpZiBmLmRvbmUoKToKKyAgICAgICAgICAgIGRvbmUuYWRkKGYpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwZW5kaW5nLmFkZChmKQorICAgIHJldHVybiBkb25lLCBwZW5kaW5nCisKKworIyBUaGlzIGlzICpub3QqIGEgQGNvcm91dGluZSEgIEl0IGlzIGp1c3QgYW4gaXRlcmF0b3IgKHlpZWxkaW5nIEZ1dHVyZXMpLgorZGVmIGFzX2NvbXBsZXRlZChmcywgKiwgbG9vcD1Ob25lLCB0aW1lb3V0PU5vbmUpOgorICAgICIiIlJldHVybiBhbiBpdGVyYXRvciB3aG9zZSB2YWx1ZXMsIHdoZW4gd2FpdGVkIGZvciwgYXJlIEZ1dHVyZXMuCisKKyAgICBUaGlzIGRpZmZlcnMgZnJvbSBQRVAgMzE0ODsgdGhlIHByb3BlciB3YXkgdG8gdXNlIHRoaXMgaXM6CisKKyAgICAgICAgZm9yIGYgaW4gYXNfY29tcGxldGVkKGZzKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZiAgIyBUaGUgJ3lpZWxkIGZyb20nIG1heSByYWlzZS4KKyAgICAgICAgICAgICMgVXNlIHJlc3VsdC4KKworICAgIFJhaXNlcyBUaW1lb3V0RXJyb3IgaWYgdGhlIHRpbWVvdXQgb2NjdXJzIGJlZm9yZSBhbGwgRnV0dXJlcyBhcmUKKyAgICBkb25lLgorCisgICAgTm90ZTogVGhlIGZ1dHVyZXMgJ2YnIGFyZSBub3QgbmVjZXNzYXJpbHkgbWVtYmVycyBvZiBmcy4KKyAgICAiIiIKKyAgICBsb29wID0gbG9vcCBpZiBsb29wIGlzIG5vdCBOb25lIGVsc2UgZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICBkZWFkbGluZSA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbG9vcC50aW1lKCkgKyB0aW1lb3V0CisgICAgdG9kbyA9IHNldChhc3luYyhmLCBsb29wPWxvb3ApIGZvciBmIGluIGZzKQorICAgIGNvbXBsZXRlZCA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3dhaXRfZm9yX29uZSgpOgorICAgICAgICB3aGlsZSBub3QgY29tcGxldGVkOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGRlYWRsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIGxvb3AudGltZSgpCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yKCkKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIF93YWl0KAorICAgICAgICAgICAgICAgIHRvZG8sIHRpbWVvdXQsIEZJUlNUX0NPTVBMRVRFRCwgbG9vcCkKKyAgICAgICAgICAgICMgTXVsdGlwbGUgY2FsbGVycyBtaWdodCBiZSB3YWl0aW5nIGZvciB0aGUgc2FtZSBldmVudHMKKyAgICAgICAgICAgICMgYW5kIGdldHRpbmcgdGhlIHNhbWUgb3V0Y29tZS4gIERlZHVwZSBieSB1cGRhdGluZyB0b2RvLgorICAgICAgICAgICAgZm9yIGYgaW4gZG9uZToKKyAgICAgICAgICAgICAgICBpZiBmIGluIHRvZG86CisgICAgICAgICAgICAgICAgICAgIHRvZG8ucmVtb3ZlKGYpCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZC5hcHBlbmQoZikKKyAgICAgICAgZiA9IGNvbXBsZXRlZC5wb3BsZWZ0KCkKKyAgICAgICAgcmV0dXJuIGYucmVzdWx0KCkgICMgTWF5IHJhaXNlLgorCisgICAgZm9yIF8gaW4gcmFuZ2UobGVuKHRvZG8pKToKKyAgICAgICAgeWllbGQgX3dhaXRfZm9yX29uZSgpCisKKworQGNvcm91dGluZQorZGVmIHNsZWVwKGRlbGF5LCByZXN1bHQ9Tm9uZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJDb3JvdXRpbmUgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbiB0aW1lIChpbiBzZWNvbmRzKS4iIiIKKyAgICBmdXR1cmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgaCA9IGZ1dHVyZS5fbG9vcC5jYWxsX2xhdGVyKGRlbGF5LCBmdXR1cmUuc2V0X3Jlc3VsdCwgcmVzdWx0KQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dHVyZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBoLmNhbmNlbCgpCisKKworZGVmIGFzeW5jKGNvcm9fb3JfZnV0dXJlLCAqLCBsb29wPU5vbmUpOgorICAgICIiIldyYXAgYSBjb3JvdXRpbmUgaW4gYSBmdXR1cmUuCisKKyAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBGdXR1cmUsIGl0IGlzIHJldHVybmVkIGRpcmVjdGx5LgorICAgICIiIgorICAgIGlmIGlzaW5zdGFuY2UoY29yb19vcl9mdXR1cmUsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZSBhbmQgbG9vcCBpcyBub3QgY29yb19vcl9mdXR1cmUuX2xvb3A6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsb29wIGFyZ3VtZW50IG11c3QgYWdyZWUgd2l0aCBGdXR1cmUnKQorICAgICAgICByZXR1cm4gY29yb19vcl9mdXR1cmUKKyAgICBlbGlmIGlzY29yb3V0aW5lKGNvcm9fb3JfZnV0dXJlKToKKyAgICAgICAgcmV0dXJuIFRhc2soY29yb19vcl9mdXR1cmUsIGxvb3A9bG9vcCkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgRnV0dXJlIG9yIGNvcm91dGluZSBpcyByZXF1aXJlZCcpCisKKworY2xhc3MgX0dhdGhlcmluZ0Z1dHVyZShmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiSGVscGVyIGZvciBnYXRoZXIoKS4KKworICAgIFRoaXMgb3ZlcnJpZGVzIGNhbmNlbCgpIHRvIGNhbmNlbCBhbGwgdGhlIGNoaWxkcmVuIGFuZCBhY3QgbW9yZQorICAgIGxpa2UgVGFzay5jYW5jZWwoKSwgd2hpY2ggZG9lc24ndCBpbW1lZGlhdGVseSBtYXJrIGl0c2VsZiBhcworICAgIGNhbmNlbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZHJlbiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gY2hpbGRyZW4KKworICAgIGRlZiBjYW5jZWwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgIGNoaWxkLmNhbmNlbCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKworZGVmIGdhdGhlcigqY29yb3Nfb3JfZnV0dXJlcywgbG9vcD1Ob25lLCByZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSk6CisgICAgIiIiUmV0dXJuIGEgZnV0dXJlIGFnZ3JlZ2F0aW5nIHJlc3VsdHMgZnJvbSB0aGUgZ2l2ZW4gY29yb3V0aW5lcworICAgIG9yIGZ1dHVyZXMuCisKKyAgICBBbGwgZnV0dXJlcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGV2ZW50IGxvb3AuICBJZiBhbGwgdGhlIHRhc2tzIGFyZQorICAgIGRvbmUgc3VjY2Vzc2Z1bGx5LCB0aGUgcmV0dXJuZWQgZnV0dXJlJ3MgcmVzdWx0IGlzIHRoZSBsaXN0IG9mCisgICAgcmVzdWx0cyAoaW4gdGhlIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgbm90IG5lY2Vzc2FyaWx5CisgICAgdGhlIG9yZGVyIG9mIHJlc3VsdHMgYXJyaXZhbCkuICBJZiAqcmVzdWx0X2V4Y2VwdGlvbiogaXMgVHJ1ZSwKKyAgICBleGNlcHRpb25zIGluIHRoZSB0YXNrcyBhcmUgdHJlYXRlZCB0aGUgc2FtZSBhcyBzdWNjZXNzZnVsCisgICAgcmVzdWx0cywgYW5kIGdhdGhlcmVkIGluIHRoZSByZXN1bHQgbGlzdDsgb3RoZXJ3aXNlLCB0aGUgZmlyc3QKKyAgICByYWlzZWQgZXhjZXB0aW9uIHdpbGwgYmUgaW1tZWRpYXRlbHkgcHJvcGFnYXRlZCB0byB0aGUgcmV0dXJuZWQKKyAgICBmdXR1cmUuCisKKyAgICBDYW5jZWxsYXRpb246IGlmIHRoZSBvdXRlciBGdXR1cmUgaXMgY2FuY2VsbGVkLCBhbGwgY2hpbGRyZW4gKHRoYXQKKyAgICBoYXZlIG5vdCBjb21wbGV0ZWQgeWV0KSBhcmUgYWxzbyBjYW5jZWxsZWQuICBJZiBhbnkgY2hpbGQgaXMKKyAgICBjYW5jZWxsZWQsIHRoaXMgaXMgdHJlYXRlZCBhcyBpZiBpdCByYWlzZWQgQ2FuY2VsbGVkRXJyb3IgLS0KKyAgICB0aGUgb3V0ZXIgRnV0dXJlIGlzICpub3QqIGNhbmNlbGxlZCBpbiB0aGlzIGNhc2UuICAoVGhpcyBpcyB0bworICAgIHByZXZlbnQgdGhlIGNhbmNlbGxhdGlvbiBvZiBvbmUgY2hpbGQgdG8gY2F1c2Ugb3RoZXIgY2hpbGRyZW4gdG8KKyAgICBiZSBjYW5jZWxsZWQuKQorICAgICIiIgorICAgIGNoaWxkcmVuID0gW2FzeW5jKGZ1dCwgbG9vcD1sb29wKSBmb3IgZnV0IGluIGNvcm9zX29yX2Z1dHVyZXNdCisgICAgbiA9IGxlbihjaGlsZHJlbikKKyAgICBpZiBuID09IDA6CisgICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQorICAgICAgICByZXR1cm4gb3V0ZXIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBjaGlsZHJlblswXS5fbG9vcAorICAgIGZvciBmdXQgaW4gY2hpbGRyZW46CisgICAgICAgIGlmIGZ1dC5fbG9vcCBpcyBub3QgbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZ1dHVyZXMgYXJlIHRpZWQgdG8gZGlmZmVyZW50IGV2ZW50IGxvb3BzIikKKyAgICBvdXRlciA9IF9HYXRoZXJpbmdGdXR1cmUoY2hpbGRyZW4sIGxvb3A9bG9vcCkKKyAgICBuZmluaXNoZWQgPSAwCisgICAgcmVzdWx0cyA9IFtOb25lXSAqIG4KKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpLCBmdXQpOgorICAgICAgICBub25sb2NhbCBuZmluaXNoZWQKKyAgICAgICAgaWYgb3V0ZXIuX3N0YXRlICE9IGZ1dHVyZXMuX1BFTkRJTkc6CisgICAgICAgICAgICBpZiBmdXQuX2V4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgICAgICBmdXQuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBmdXQuX3N0YXRlID09IGZ1dHVyZXMuX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJlcyA9IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgaWYgbm90IHJldHVybl9leGNlcHRpb25zOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24ocmVzKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIGZ1dC5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzID0gZnV0LmV4Y2VwdGlvbigpICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5fcmVzdWx0CisgICAgICAgIHJlc3VsdHNbaV0gPSByZXMKKyAgICAgICAgbmZpbmlzaGVkICs9IDEKKyAgICAgICAgaWYgbmZpbmlzaGVkID09IG46CisgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KHJlc3VsdHMpCisKKyAgICBmb3IgaSwgZnV0IGluIGVudW1lcmF0ZShjaGlsZHJlbik6CisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhmdW5jdG9vbHMucGFydGlhbChfZG9uZV9jYWxsYmFjaywgaSkpCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHNoaWVsZChhcmcsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV2FpdCBmb3IgYSBmdXR1cmUsIHNoaWVsZGluZyBpdCBmcm9tIGNhbmNlbGxhdGlvbi4KKworICAgIFRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKworICAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50CisKKyAgICAgICAgcmVzID0geWllbGQgZnJvbSBzb21ldGhpbmcoKQorCisgICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUKKyAgICB0YXNrIHJ1bm5pbmcgaW4gc29tZXRoaW5nKCkgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIFBPViBvZgorICAgIHNvbWV0aGluZygpLCB0aGUgY2FuY2VsbGF0aW9uIGRpZCBub3QgaGFwcGVuLiAgQnV0IGl0cyBjYWxsZXIgaXMKKyAgICBzdGlsbCBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICAgQ2FuY2VsbGVkRXJyb3IuICBOb3RlOiBJZiBzb21ldGhpbmcoKSBpcyBjYW5jZWxsZWQgYnkgb3RoZXIgbWVhbnMKKyAgICB0aGlzIHdpbGwgc3RpbGwgY2FuY2VsIHNoaWVsZCgpLgorCisgICAgSWYgeW91IHdhbnQgdG8gY29tcGxldGVseSBpZ25vcmUgY2FuY2VsbGF0aW9uIChub3QgcmVjb21tZW5kZWQpCisgICAgeW91IGNhbiBjb21iaW5lIHNoaWVsZCgpIHdpdGggYSB0cnkvZXhjZXB0IGNsYXVzZSwgYXMgZm9sbG93czoKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNoaWVsZChzb21ldGhpbmcoKSkKKyAgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICIiIgorICAgIGlubmVyID0gYXN5bmMoYXJnLCBsb29wPWxvb3ApCisgICAgaWYgaW5uZXIuZG9uZSgpOgorICAgICAgICAjIFNob3J0Y3V0LgorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBsb29wID0gaW5uZXIuX2xvb3AKKyAgICBvdXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpbm5lcik6CisgICAgICAgIGlmIG91dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgIyBNYXJrIGlubmVyJ3MgcmVzdWx0IGFzIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlubmVyLmNhbmNlbGxlZCgpIG9yIGlubmVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgaW5uZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhjID0gaW5uZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0ZXIuc2V0X3Jlc3VsdChpbm5lci5yZXN1bHQoKSkKKworICAgIGlubmVyLmFkZF9kb25lX2NhbGxiYWNrKF9kb25lX2NhbGxiYWNrKQorICAgIHJldHVybiBvdXRlcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxYTU0NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSwyNzYgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBtYWtlX3NlcnZlciwgV1NHSVJlcXVlc3RIYW5kbGVyLCBXU0dJU2VydmVyCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKK2Vsc2U6CisgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIgICMgcHJhZ21hOiBubyBjb3ZlcgorCisKK2RlZiBkdW1teV9zc2xfY29udGV4dCgpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorCisKK2RlZiBydW5fYnJpZWZseShsb29wKToKKyAgICBAdGFza3MuY29yb3V0aW5lCisgICAgZGVmIG9uY2UoKToKKyAgICAgICAgcGFzcworICAgIGdlbiA9IG9uY2UoKQorICAgIHQgPSB0YXNrcy5UYXNrKGdlbiwgbG9vcD1sb29wKQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICBmaW5hbGx5OgorICAgICAgICBnZW4uY2xvc2UoKQorCisKK2RlZiBydW5fdW50aWwobG9vcCwgcHJlZCwgdGltZW91dD1Ob25lKToKKyAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorICAgIHdoaWxlIG5vdCBwcmVkKCk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Muc2xlZXAodGltZW91dCwgbG9vcD1sb29wKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJ1bl9icmllZmx5KGxvb3ApCisgICAgcmV0dXJuIFRydWUKKworCitkZWYgcnVuX29uY2UobG9vcCk6CisgICAgIiIibG9vcC5zdG9wKCkgc2NoZWR1bGVzIF9yYWlzZV9zdG9wX2Vycm9yKCkKKyAgICBhbmQgcnVuX2ZvcmV2ZXIoKSBydW5zIHVudGlsIF9yYWlzZV9zdG9wX2Vycm9yKCkgY2FsbGJhY2suCisgICAgdGhpcyB3b250IHdvcmsgaWYgdGVzdCB3YWl0cyBmb3Igc29tZSBJTyBldmVudHMsIGJlY2F1c2UKKyAgICBfcmFpc2Vfc3RvcF9lcnJvcigpIHJ1bnMgYmVmb3JlIGFueSBvZiBpbyBldmVudHMgY2FsbGJhY2tzLgorICAgICIiIgorICAgIGxvb3Auc3RvcCgpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBydW5fdGVzdF9zZXJ2ZXIoKiwgaG9zdD0nMTI3LjAuMC4xJywgcG9ydD0wLCB1c2Vfc3NsPUZhbHNlKToKKworICAgIGNsYXNzIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcihXU0dJUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBkZWYgZ2V0X3N0ZGVycihzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBpby5TdHJpbmdJTygpCisKKyAgICAgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgY2xhc3MgU2lsZW50V1NHSVNlcnZlcihXU0dJU2VydmVyKToKKyAgICAgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBjbGFzcyBTU0xXU0dJU2VydmVyKFNpbGVudFdTR0lTZXJ2ZXIpOgorICAgICAgICBkZWYgZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAgICAgIyBUaGUgcmVsYXRpdmUgbG9jYXRpb24gb2Ygb3VyIHRlc3QgZGlyZWN0b3J5ICh3aGljaAorICAgICAgICAgICAgIyBjb250YWlucyB0aGUgc3NsIGtleSBhbmQgY2VydGlmaWNhdGUgZmlsZXMpIGRpZmZlcnMKKyAgICAgICAgICAgICMgYmV0d2VlbiB0aGUgc3RkbGliIGFuZCBzdGFuZC1hbG9uZSBUdWxpcC9hc3luY2lvLgorICAgICAgICAgICAgIyBQcmVmZXIgb3VyIG93biBpZiB3ZSBjYW4gZmluZCBpdC4KKyAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywgJ3Rlc3RzJykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGhlcmUpOgorICAgICAgICAgICAgICAgIGhlcmUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0JywgJ3Rlc3RfYXN5bmNpbycpCisgICAgICAgICAgICBrZXlmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzc2xfa2V5LnBlbScpCisgICAgICAgICAgICBjZXJ0ZmlsZSA9IG9zLnBhdGguam9pbihoZXJlLCAnc3NsX2NlcnQucGVtJykKKyAgICAgICAgICAgIHNzb2NrID0gc3NsLndyYXBfc29ja2V0KHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlckNsYXNzKHNzb2NrLCBjbGllbnRfYWRkcmVzcywgc2VsZikKKyAgICAgICAgICAgICAgICBzc29jay5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIG1heWJlIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgYnkgcGVlcgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBhcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgorICAgICAgICBzdGF0dXMgPSAnMjAwIE9LJworICAgICAgICBoZWFkZXJzID0gWygnQ29udGVudC10eXBlJywgJ3RleHQvcGxhaW4nKV0KKyAgICAgICAgc3RhcnRfcmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzKQorICAgICAgICByZXR1cm4gW2InVGVzdCBtZXNzYWdlJ10KKworICAgICMgUnVuIHRoZSB0ZXN0IFdTR0kgc2VydmVyIGluIGEgc2VwYXJhdGUgdGhyZWFkIGluIG9yZGVyIG5vdCB0bworICAgICMgaW50ZXJmZXJlIHdpdGggZXZlbnQgaGFuZGxpbmcgaW4gdGhlIG1haW4gdGhyZWFkCisgICAgc2VydmVyX2NsYXNzID0gU1NMV1NHSVNlcnZlciBpZiB1c2Vfc3NsIGVsc2UgU2lsZW50V1NHSVNlcnZlcgorICAgIGh0dHBkID0gbWFrZV9zZXJ2ZXIoaG9zdCwgcG9ydCwgYXBwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2NsYXNzLCBTaWxlbnRXU0dJUmVxdWVzdEhhbmRsZXIpCisgICAgaHR0cGQuYWRkcmVzcyA9IGh0dHBkLnNlcnZlcl9hZGRyZXNzCisgICAgc2VydmVyX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWh0dHBkLnNlcnZlX2ZvcmV2ZXIpCisgICAgc2VydmVyX3RocmVhZC5zdGFydCgpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBodHRwZAorICAgIGZpbmFsbHk6CisgICAgICAgIGh0dHBkLnNodXRkb3duKCkKKyAgICAgICAgaHR0cGQuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VydmVyX3RocmVhZC5qb2luKCkKKworCitkZWYgbWFrZV90ZXN0X3Byb3RvY29sKGJhc2UpOgorICAgIGRjdCA9IHt9CisgICAgZm9yIG5hbWUgaW4gZGlyKGJhc2UpOgorICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19fJykgYW5kIG5hbWUuZW5kc3dpdGgoJ19fJyk6CisgICAgICAgICAgICAjIHNraXAgbWFnaWMgbmFtZXMKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGRjdFtuYW1lXSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhyZXR1cm5fdmFsdWU9Tm9uZSkKKyAgICByZXR1cm4gdHlwZSgnVGVzdFByb3RvY29sJywgKGJhc2UsKSArIGJhc2UuX19iYXNlc19fLCBkY3QpKCkKKworCitjbGFzcyBUZXN0U2VsZWN0b3Ioc2VsZWN0b3JzLkJhc2VTZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYua2V5cyA9IHt9CisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoZmlsZW9iaiwgMCwgZXZlbnRzLCBkYXRhKQorICAgICAgICBzZWxmLmtleXNbZmlsZW9ial0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHJldHVybiBzZWxmLmtleXMucG9wKGZpbGVvYmopCisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICByZXR1cm4gW10KKworICAgIGRlZiBnZXRfbWFwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzCisKKworY2xhc3MgVGVzdExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisgICAgIiIiTG9vcCBmb3IgdW5pdHRlc3RzLgorCisgICAgSXQgbWFuYWdlcyBzZWxmIHRpbWUgZGlyZWN0bHkuCisgICAgSWYgc29tZXRoaW5nIHNjaGVkdWxlZCB0byBiZSBleGVjdXRlZCBsYXRlciB0aGVuCisgICAgb24gbmV4dCBsb29wIGl0ZXJhdGlvbiBhZnRlciBhbGwgcmVhZHkgaGFuZGxlcnMgZG9uZQorICAgIGdlbmVyYXRvciBwYXNzZWQgdG8gX19pbml0X18gaXMgY2FsbGluZy4KKworICAgIEdlbmVyYXRvciBzaG91bGQgYmUgbGlrZSB0aGlzOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIC4uLgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIC4uLgorICAgICAgICAgICAgLi4uID0geWllbGQgdGltZV9hZHZhbmNlCisKKyAgICBWYWx1ZSByZXR1bmVkIGJ5IHlpZWxkIGlzIGFic29sdXRlIHRpbWUgb2YgbmV4dCBzY2hlZHVsZWQgaGFuZGxlci4KKyAgICBWYWx1ZSBwYXNzZWQgdG8geWllbGQgaXMgdGltZSBhZHZhbmNlIHRvIG1vdmUgbG9vcCdzIHRpbWUgZm9yd2FyZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW49Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgICAgIGlmIGdlbiBpcyBOb25lOgorICAgICAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBzZWxmLl9jaGVja19vbl9jbG9zZSA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9jaGVja19vbl9jbG9zZSA9IFRydWUKKworICAgICAgICBzZWxmLl9nZW4gPSBnZW4oKQorICAgICAgICBuZXh0KHNlbGYuX2dlbikKKyAgICAgICAgc2VsZi5fdGltZSA9IDAKKyAgICAgICAgc2VsZi5fdGltZXJzID0gW10KKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBUZXN0U2VsZWN0b3IoKQorCisgICAgICAgIHNlbGYucmVhZGVycyA9IHt9CisgICAgICAgIHNlbGYud3JpdGVycyA9IHt9CisgICAgICAgIHNlbGYucmVzZXRfY291bnRlcnMoKQorCisgICAgZGVmIHRpbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90aW1lCisKKyAgICBkZWYgYWR2YW5jZV90aW1lKHNlbGYsIGFkdmFuY2UpOgorICAgICAgICAiIiJNb3ZlIHRlc3QgdGltZSBmb3J3YXJkLiIiIgorICAgICAgICBpZiBhZHZhbmNlOgorICAgICAgICAgICAgc2VsZi5fdGltZSArPSBhZHZhbmNlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2NoZWNrX29uX2Nsb3NlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2dlbi5zZW5kKDApCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRpbWUgZ2VuZXJhdG9yIGlzIG5vdCBmaW5pc2hlZCIpCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi5yZWFkZXJzW2ZkXSA9IGV2ZW50cy5tYWtlX2hhbmRsZShjYWxsYmFjaywgYXJncykKKworICAgIGRlZiByZW1vdmVfcmVhZGVyKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyX2NvdW50W2ZkXSArPSAxCisgICAgICAgIGlmIGZkIGluIHNlbGYucmVhZGVyczoKKyAgICAgICAgICAgIGRlbCBzZWxmLnJlYWRlcnNbZmRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYXNzZXJ0X3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IGZkIGluIHNlbGYucmVhZGVycywgJ2ZkIHt9IGlzIG5vdCByZWdpc3RlcmVkJy5mb3JtYXQoZmQpCisgICAgICAgIGhhbmRsZSA9IHNlbGYucmVhZGVyc1tmZF0KKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fY2FsbGJhY2sgPT0gY2FsbGJhY2ssICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9hcmdzID09IGFyZ3MsICd7IXJ9ICE9IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgIGhhbmRsZS5fYXJncywgYXJncykKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLndyaXRlcnNbZmRdID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorCisgICAgZGVmIHJlbW92ZV93cml0ZXIoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLnJlbW92ZV93cml0ZXJfY291bnRbZmRdICs9IDEKKyAgICAgICAgaWYgZmQgaW4gc2VsZi53cml0ZXJzOgorICAgICAgICAgICAgZGVsIHNlbGYud3JpdGVyc1tmZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhc3NlcnRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBhc3NlcnQgZmQgaW4gc2VsZi53cml0ZXJzLCAnZmQge30gaXMgbm90IHJlZ2lzdGVyZWQnLmZvcm1hdChmZCkKKyAgICAgICAgaGFuZGxlID0gc2VsZi53cml0ZXJzW2ZkXQorICAgICAgICBhc3NlcnQgaGFuZGxlLl9jYWxsYmFjayA9PSBjYWxsYmFjaywgJ3shcn0gIT0geyFyfScuZm9ybWF0KAorICAgICAgICAgICAgaGFuZGxlLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2FyZ3MgPT0gYXJncywgJ3shcn0gIT0geyFyfScuZm9ybWF0KAorICAgICAgICAgICAgaGFuZGxlLl9hcmdzLCBhcmdzKQorCisgICAgZGVmIHJlc2V0X2NvdW50ZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnJlbW92ZV9yZWFkZXJfY291bnQgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChpbnQpCisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcl9jb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKworICAgIGRlZiBfcnVuX29uY2Uoc2VsZik6CisgICAgICAgIHN1cGVyKCkuX3J1bl9vbmNlKCkKKyAgICAgICAgZm9yIHdoZW4gaW4gc2VsZi5fdGltZXJzOgorICAgICAgICAgICAgYWR2YW5jZSA9IHNlbGYuX2dlbi5zZW5kKHdoZW4pCisgICAgICAgICAgICBzZWxmLmFkdmFuY2VfdGltZShhZHZhbmNlKQorICAgICAgICBzZWxmLl90aW1lcnMgPSBbXQorCisgICAgZGVmIGNhbGxfYXQoc2VsZiwgd2hlbiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi5fdGltZXJzLmFwcGVuZCh3aGVuKQorICAgICAgICByZXR1cm4gc3VwZXIoKS5jYWxsX2F0KHdoZW4sIGNhbGxiYWNrLCAqYXJncykKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgIHJldHVybgorCisgICAgZGVmIF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90cmFuc3BvcnRzLnB5IGIvTGliL2FzeW5jaW8vdHJhbnNwb3J0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmZlYjkzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdHJhbnNwb3J0cy5weQpAQCAtMCwwICsxLDIxOSBAQAorIiIiQWJzdHJhY3QgVHJhbnNwb3J0IGNsYXNzLiIiIgorCitpbXBvcnQgc3lzCisKK1BZMzQgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KQorCitfX2FsbF9fID0gWydSZWFkVHJhbnNwb3J0JywgJ1dyaXRlVHJhbnNwb3J0JywgJ1RyYW5zcG9ydCddCisKKworY2xhc3MgQmFzZVRyYW5zcG9ydDoKKyAgICAiIiJCYXNlIGNsYXNzIGZvciB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4dHJhPU5vbmUpOgorICAgICAgICBpZiBleHRyYSBpcyBOb25lOgorICAgICAgICAgICAgZXh0cmEgPSB7fQorICAgICAgICBzZWxmLl9leHRyYSA9IGV4dHJhCisKKyAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IG9wdGlvbmFsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4dHJhLmdldChuYW1lLCBkZWZhdWx0KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBmbHVzaGVkIGFzeW5jaHJvbm91c2x5LiAgTm8gbW9yZSBkYXRhCisgICAgICAgIHdpbGwgYmUgcmVjZWl2ZWQuICBBZnRlciBhbGwgYnVmZmVyZWQgZGF0YSBpcyBmbHVzaGVkLCB0aGUKKyAgICAgICAgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgY2FsbGVkCisgICAgICAgIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgUmVhZFRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIHJlYWQtb25seSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgICIiIlBhdXNlIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIE5vIGRhdGEgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHByb3RvY29sJ3MgZGF0YV9yZWNlaXZlZCgpCisgICAgICAgIG1ldGhvZCB1bnRpbCByZXN1bWVfcmVhZGluZygpIGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUmVzdW1lIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIERhdGEgcmVjZWl2ZWQgd2lsbCBvbmNlIGFnYWluIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncworICAgICAgICBkYXRhX3JlY2VpdmVkKCkgbWV0aG9kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFdyaXRlVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkludGVyZmFjZSBmb3Igd3JpdGUtb25seSB0cmFuc3BvcnRzLiIiIgorCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICAiIiJTZXQgdGhlIGhpZ2gtIGFuZCBsb3ctd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgICAgICAgVGhlc2UgdHdvIHZhbHVlcyBjb250cm9sIHdoZW4gdG8gY2FsbCB0aGUgcHJvdG9jb2wncworICAgICAgICBwYXVzZV93cml0aW5nKCkgYW5kIHJlc3VtZV93cml0aW5nKCkgbWV0aG9kcy4gIElmIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGxvdy13YXRlciBsaW1pdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdC4gIE5laXRoZXIgdmFsdWUgY2FuIGJlIG5lZ2F0aXZlLgorCisgICAgICAgIFRoZSBkZWZhdWx0cyBhcmUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBJZiBvbmx5IHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGEKKyAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyBoaWdoIHRvIHplcm8gZm9yY2VzIGxvdyB0byB6ZXJvIGFzCisgICAgICAgIHdlbGwsIGFuZCBjYXVzZXMgcGF1c2Vfd3JpdGluZygpIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyBsb3cgdG8gemVybyBjYXVzZXMKKyAgICAgICAgcmVzdW1lX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlIHNvbWUgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpc3Rfb2ZfZGF0YSk6CisgICAgICAgICIiIldyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMgYW5kCisgICAgICAgIGNhbGxzIHdyaXRlKCkgb24gdGhlIHJlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBQWTM0OgorICAgICAgICAgICAgIyBJbiBQeXRob24gMy4zLCBieXRlcy5qb2luKCkgZG9lc24ndCBoYW5kbGUgbWVtb3J5dmlldy4KKyAgICAgICAgICAgIGxpc3Rfb2ZfZGF0YSA9ICgKKyAgICAgICAgICAgICAgICBieXRlcyhkYXRhKSBpZiBpc2luc3RhbmNlKGRhdGEsIG1lbW9yeXZpZXcpIGVsc2UgZGF0YQorICAgICAgICAgICAgICAgIGZvciBkYXRhIGluIGxpc3Rfb2ZfZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZShiJycuam9pbihsaXN0X29mX2RhdGEpKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdyaXRlIGVuZCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhLgorCisgICAgICAgIChUaGlzIGlzIGxpa2UgdHlwaW5nIF5EIGludG8gYSBVTklYIHByb2dyYW0gcmVhZGluZyBmcm9tIHN0ZGluLikKKworICAgICAgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGlzIHRyYW5zcG9ydCBzdXBwb3J0cyB3cml0ZV9lb2YoKSwgRmFsc2UgaWYgbm90LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFRyYW5zcG9ydChSZWFkVHJhbnNwb3J0LCBXcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIHJlcHJlc2VudGluZyBhIGJpZGlyZWN0aW9uYWwgdHJhbnNwb3J0LgorCisgICAgVGhlcmUgbWF5IGJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zLCBidXQgdHlwaWNhbGx5LCB0aGUgdXNlciBkb2VzCisgICAgbm90IGltcGxlbWVudCBuZXcgdHJhbnNwb3J0czsgcmF0aGVyLCB0aGUgcGxhdGZvcm0gcHJvdmlkZXMgc29tZQorICAgIHVzZWZ1bCB0cmFuc3BvcnRzIHRoYXQgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGJlc3QKKyAgICBwcmFjdGljZXMuCisKKyAgICBUaGUgdXNlciBuZXZlciBpbnN0YW50aWF0ZXMgYSB0cmFuc3BvcnQgZGlyZWN0bHk7IHRoZXkgY2FsbCBhCisgICAgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyBpdCBhIHByb3RvY29sIGZhY3RvcnkgYW5kIG90aGVyCisgICAgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGFuZCBwcm90b2NvbC4gIChFLmcuCisgICAgRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkgb3IgRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKS4pCisKKyAgICBUaGUgdXRpbGl0eSBmdW5jdGlvbiB3aWxsIGFzeW5jaHJvbm91c2x5IGNyZWF0ZSBhIHRyYW5zcG9ydCBhbmQgYQorICAgIHByb3RvY29sIGFuZCBob29rIHRoZW0gdXAgYnkgY2FsbGluZyB0aGUgcHJvdG9jb2wncworICAgIGNvbm5lY3Rpb25fbWFkZSgpIG1ldGhvZCwgcGFzc2luZyBpdCB0aGUgdHJhbnNwb3J0LgorCisgICAgVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgcmFpc2VzIE5vdEltcGxlbWVudGVkIGZvciBldmVyeSBtZXRob2QKKyAgICBleGNlcHQgd3JpdGVsaW5lcygpLCB3aGljaCBjYWxscyB3cml0ZSgpIGluIGEgbG9vcC4KKyAgICAiIiIKKworCitjbGFzcyBEYXRhZ3JhbVRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIGRhdGFncmFtIChVRFApIHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgICIiIlNlbmQgZGF0YSB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgYWRkciBpcyB0YXJnZXQgc29ja2V0IGFkZHJlc3MuCisgICAgICAgIElmIGFkZHIgaXMgTm9uZSB1c2UgdGFyZ2V0IGFkZHJlc3MgcG9pbnRlZCBvbiB0cmFuc3BvcnQgY3JlYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFN1YnByb2Nlc3NUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgaWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgcmV0dXJuY29kZS4KKworICAgICAgICBTZWUgYWxzbworICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9waXBlX3RyYW5zcG9ydChzZWxmLCBmZCk6CisgICAgICAgICIiIkdldCB0cmFuc3BvcnQgZm9yIHBpcGUgd2l0aCBudW1iZXIgZmQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICAiIiJTZW5kIHNpZ25hbCB0byBzdWJwcm9jZXNzLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBkb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBBbGlhcyBmb3IgY2xvc2UoKSBtZXRob2QuCisKKyAgICAgICAgT24gUG9zaXggT1NzIHRoZSBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uIFRlcm1pbmF0ZVByb2Nlc3MoKQorICAgICAgICAgaXMgY2FsbGVkIHRvIHN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAgICAiIiJLaWxsIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIE9uIFBvc2l4IE9TcyB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyBraWxsKCkgaXMgYW4gYWxpYXMgZm9yIHRlcm1pbmF0ZSgpLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ua2lsbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjNmYjlmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkKQEAgLTAsMCArMSw3NDYgQEAKKyIiIlNlbGVjdG9yIGV2ZW50bG9vcCBmb3IgVW5peCB3aXRoIHNpZ25hbCBoYW5kbGluZy4iIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgZmNudGwKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCisKKworZnJvbSAuIGltcG9ydCBiYXNlX3N1YnByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnU2VsZWN0b3JFdmVudExvb3AnLCAnU1RESU4nLCAnU1RET1VUJywgJ1NUREVSUicsCisgICAgICAgICAgICdBYnN0cmFjdENoaWxkV2F0Y2hlcicsICdTYWZlQ2hpbGRXYXRjaGVyJywKKyAgICAgICAgICAgJ0Zhc3RDaGlsZFdhdGNoZXInLCAnRGVmYXVsdEV2ZW50TG9vcFBvbGljeScsCisgICAgICAgICAgIF0KKworU1RESU4gPSAwCitTVERPVVQgPSAxCitTVERFUlIgPSAyCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICByYWlzZSBJbXBvcnRFcnJvcignU2lnbmFscyBhcmUgbm90IHJlYWxseSBzdXBwb3J0ZWQgb24gV2luZG93cycpCisKKworY2xhc3MgX1VuaXhTZWxlY3RvckV2ZW50TG9vcChzZWxlY3Rvcl9ldmVudHMuQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAiIiJVbml4IGV2ZW50IGxvb3AKKworICAgIEFkZHMgc2lnbmFsIGhhbmRsaW5nIHRvIFNlbGVjdG9yRXZlbnRMb29wCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3I9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oc2VsZWN0b3IpCisgICAgICAgIHNlbGYuX3NpZ25hbF9oYW5kbGVycyA9IHt9CisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiBzb2NrZXQuc29ja2V0cGFpcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGZvciBzaWcgaW4gbGlzdChzZWxmLl9zaWduYWxfaGFuZGxlcnMpOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4gIFVOSVggb25seS4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX3NpZ25hbChzaWcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgc2V0X3dha2V1cF9mZCgpIHJhaXNlcyBWYWx1ZUVycm9yIGlmIHRoaXMgaXMgbm90IHRoZQorICAgICAgICAgICAgIyBtYWluIHRocmVhZC4gIEJ5IGNhbGxpbmcgaXQgZWFybHkgd2UgZW5zdXJlIHRoYXQgYW4KKyAgICAgICAgICAgICMgZXZlbnQgbG9vcCBydW5uaW5nIGluIGFub3RoZXIgdGhyZWFkIGNhbm5vdCBhZGQgYSBzaWduYWwKKyAgICAgICAgICAgICMgaGFuZGxlci4KKyAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKHNlbGYuX2Nzb2NrLmZpbGVubygpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLm1ha2VfaGFuZGxlKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXSA9IGhhbmRsZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBzZWxmLl9oYW5kbGVfc2lnbmFsKQorICAgICAgICAgICAgIyBTZXQgU0FfUkVTVEFSVCB0byBsaW1pdCBFSU5UUiBvY2N1cnJlbmNlcy4KKyAgICAgICAgICAgIHNpZ25hbC5zaWdpbnRlcnJ1cHQoc2lnLCBGYWxzZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQoLTEpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgbmV4YzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBuZXhjKQorCisgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUlOVkFMOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2lnIHt9IGNhbm5vdCBiZSBjYXVnaHQnLmZvcm1hdChzaWcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgZGVmIF9oYW5kbGVfc2lnbmFsKHNlbGYsIHNpZywgYXJnKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRoYXQgaXMgdGhlIGFjdHVhbCBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgaGFuZGxlID0gc2VsZi5fc2lnbmFsX2hhbmRsZXJzLmdldChzaWcpCisgICAgICAgIGlmIGhhbmRsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICAjIEFzc3VtZSBpdCdzIHNvbWUgcmFjZSBjb25kaXRpb24uCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKSAgIyBSZW1vdmUgaXQgcHJvcGVybHkuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9hZGRfY2FsbGJhY2tfc2lnbmFsc2FmZShoYW5kbGUpCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgICIiIlJlbW92ZSBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLiAgVU5JWCBvbmx5LgorCisgICAgICAgIFJldHVybiBUcnVlIGlmIGEgc2lnbmFsIGhhbmRsZXIgd2FzIHJlbW92ZWQsIEZhbHNlIGlmIG5vdC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX3NpZ25hbChzaWcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9zaWduYWxfaGFuZGxlcnNbc2lnXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBpZiBzaWcgPT0gc2lnbmFsLlNJR0lOVDoKKyAgICAgICAgICAgIGhhbmRsZXIgPSBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5TSUdfREZMCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWcsIGhhbmRsZXIpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaWcge30gY2Fubm90IGJlIGNhdWdodCcuZm9ybWF0KHNpZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgbm90IHNlbGYuX3NpZ25hbF9oYW5kbGVyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygnc2V0X3dha2V1cF9mZCgtMSkgZmFpbGVkOiAlcycsIGV4YykKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9jaGVja19zaWduYWwoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIHZhbGlkYXRlIGEgc2lnbmFsLgorCisgICAgICAgIFJhaXNlIFZhbHVlRXJyb3IgaWYgdGhlIHNpZ25hbCBudW1iZXIgaXMgaW52YWxpZCBvciB1bmNhdGNoYWJsZS4KKyAgICAgICAgUmFpc2UgUnVudGltZUVycm9yIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBzZXR0aW5nIHVwIHRoZSBoYW5kbGVyLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2lnLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzaWcgbXVzdCBiZSBhbiBpbnQsIG5vdCB7IXJ9Jy5mb3JtYXQoc2lnKSkKKworICAgICAgICBpZiBub3QgKDEgPD0gc2lnIDwgc2lnbmFsLk5TSUcpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAnc2lnIHt9IG91dCBvZiByYW5nZSgxLCB7fSknLmZvcm1hdChzaWcsIHNpZ25hbC5OU0lHKSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlciwgZXh0cmEpCisKKyAgICBkZWYgX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIGV2ZW50cy5nZXRfY2hpbGRfd2F0Y2hlcigpIGFzIHdhdGNoZXI6CisgICAgICAgICAgICB0cmFuc3AgPSBfVW5peFN1YnByb2Nlc3NUcmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncykKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIodHJhbnNwLmdldF9waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hpbGRfd2F0Y2hlcl9jYWxsYmFjaywgdHJhbnNwKQorICAgICAgICB5aWVsZCBmcm9tIHRyYW5zcC5fcG9zdF9pbml0KCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcAorCisgICAgZGVmIF9jaGlsZF93YXRjaGVyX2NhbGxiYWNrKHNlbGYsIHBpZCwgcmV0dXJuY29kZSwgdHJhbnNwKToKKyAgICAgICAgc2VsZi5jYWxsX3Nvb25fdGhyZWFkc2FmZSh0cmFuc3AuX3Byb2Nlc3NfZXhpdGVkLCByZXR1cm5jb2RlKQorCisgICAgZGVmIF9zdWJwcm9jZXNzX2Nsb3NlZChzZWxmLCB0cmFuc3ApOgorICAgICAgICBwYXNzCisKKworZGVmIF9zZXRfbm9uYmxvY2tpbmcoZmQpOgorICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgZmxhZ3MgPSBmbGFncyB8IG9zLk9fTk9OQkxPQ0sKKyAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGTCwgZmxhZ3MpCisKKworY2xhc3MgX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLlJlYWRUcmFuc3BvcnQpOgorCisgICAgbWF4X3NpemUgPSAyNTYgKiAxMDI0ICAjIG1heCBieXRlcyB3ZSByZWFkIGluIG9uZSBldmVudGxvb3AgaXRlcmF0aW9uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTRklGTyhtb2RlKSBvciBzdGF0LlNfSVNTT0NLKG1vZGUpKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBpcGUgdHJhbnNwb3J0IGlzIGZvciBwaXBlcy9zb2NrZXRzIG9ubHkuIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9maWxlbm8sIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24od2FpdGVyLnNldF9yZXN1bHQsIE5vbmUpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYuX2ZpbGVubywgc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2Nsb3NlKGV4YykKKworICAgIGRlZiBfY2xvc2Uoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIGV4YykKKworICAgIGRlZiBfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworCitjbGFzcyBfVW5peFdyaXRlUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLldyaXRlVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaXNfc29ja2V0ID0gc3RhdC5TX0lTU09DSyhtb2RlKQorICAgICAgICBpc19waXBlID0gc3RhdC5TX0lTRklGTyhtb2RlKQorICAgICAgICBpZiBub3QgKGlzX3NvY2tldCBvciBpc19waXBlKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBpcGUgdHJhbnNwb3J0IGlzIGZvciBwaXBlcy9zb2NrZXRzIG9ubHkuIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBvciB3cml0ZV9lb2YoKSBjYWxsZWQuCisKKyAgICAgICAgIyBPbiBBSVgsIHRoZSByZWFkZXIgdHJpY2sgb25seSB3b3JrcyBmb3Igc29ja2V0cy4KKyAgICAgICAgIyBPbiBvdGhlciBwbGF0Zm9ybXMgaXQgd29ya3MgZm9yIHBpcGVzIGFuZCBzb2NrZXRzLgorICAgICAgICAjIChFeGNlcHRpb246IE9TIFggMTAuND8gIElzc3VlICMxOTI5NC4pCisgICAgICAgIGlmIGlzX3NvY2tldCBvciBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgIGlmIHdhaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHdhaXRlci5zZXRfcmVzdWx0LCBOb25lKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICAjIFBpcGUgd2FzIGNsb3NlZCBieSBwZWVyLgorICAgICAgICBzZWxmLl9jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSwgcmVwcihkYXRhKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCBvciBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcy53cml0ZShwaXBlLCBkYXRhKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IG9zLndyaXRlKHNlbGYuX2ZpbGVubywgZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisKKyAgICBkZWYgX3dyaXRlX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYicnLmpvaW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBhc3NlcnQgZGF0YSwgJ0RhdGEgc2hvdWxkIG5vdCBiZSBlbXB0eScKKworICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gb3Mud3JpdGUoc2VsZi5fZmlsZW5vLCBkYXRhKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICMgUmVtb3ZlIHdyaXRlciBoZXJlLCBfZmF0YWxfZXJyb3IoKSBkb2Vzbid0IGl0CisgICAgICAgICAgICAjIGJlY2F1c2UgX2J1ZmZlciBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpICAjIFRyeSBhZ2FpbiBsYXRlci4KKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBUT0RPOiBNYWtlIHRoZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gd3JpdGVfZW9mKCksIGNsb3NlKCksCisgICAgIyBhYm9ydCgpLCBfZmF0YWxfZXJyb3IoKSBhbmQgX2Nsb3NlKCkgbW9yZSBzdHJhaWdodGZvcndhcmQuCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBzZWxmLl9waXBlCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgIyB3cml0ZV9lb2YgaXMgYWxsIHdoYXQgd2UgbmVlZGVkIHRvIGNsb3NlIHRoZSB3cml0ZSBwaXBlCisgICAgICAgICAgICBzZWxmLndyaXRlX2VvZigpCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgIHNlbGYuX2Nsb3NlKE5vbmUpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4Yyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGxvZ2dlci5leGNlcHRpb24oJ0ZhdGFsIGVycm9yIGZvciAlcycsIHNlbGYpCisgICAgICAgIHNlbGYuX2Nsb3NlKGV4YykKKworICAgIGRlZiBfY2xvc2Uoc2VsZiwgZXhjPU5vbmUpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4U3VicHJvY2Vzc1RyYW5zcG9ydChiYXNlX3N1YnByb2Nlc3MuQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHN0ZGluX3cgPSBOb25lCisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgICMgVXNlIGEgc29ja2V0IHBhaXIgZm9yIHN0ZGluLCBzaW5jZSBub3QgYWxsIHBsYXRmb3JtcworICAgICAgICAgICAgIyBzdXBwb3J0IHNlbGVjdGluZyByZWFkIGV2ZW50cyBvbiB0aGUgd3JpdGUgZW5kIG9mIGEKKyAgICAgICAgICAgICMgc29ja2V0ICh3aGljaCB3ZSB1c2UgaW4gb3JkZXIgdG8gZGV0ZWN0IGNsb3Npbmcgb2YgdGhlCisgICAgICAgICAgICAjIG90aGVyIGVuZCkuICBOb3RhYmx5IHRoaXMgaXMgbmVlZGVkIG9uIEFJWCwgYW5kIHdvcmtzCisgICAgICAgICAgICAjIGp1c3QgZmluZSBvbiBvdGhlciBwbGF0Zm9ybXMuCisgICAgICAgICAgICBzdGRpbiwgc3RkaW5fdyA9IHNlbGYuX2xvb3AuX3NvY2tldHBhaXIoKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgaWYgc3RkaW5fdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBvcGVuKHN0ZGluX3cuZGV0YWNoKCksICdyYicsIGJ1ZmZlcmluZz1idWZzaXplKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1vbml0b3JpbmcgY2hpbGQgcHJvY2Vzc2VzLgorCisgICAgT2JqZWN0cyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyBtb25pdG9yIGEgY29sbGVjdGlvbiBvZiBzdWJwcm9jZXNzZXMgYW5kCisgICAgcmVwb3J0IHRoZWlyIHRlcm1pbmF0aW9uIG9yIGludGVycnVwdGlvbiBieSBhIHNpZ25hbC4KKworICAgIE5ldyBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCAuYWRkX2NoaWxkX2hhbmRsZXIoKS4gU3RhcnRpbmcgYSBuZXcKKyAgICBwcm9jZXNzIG11c3QgYmUgZG9uZSB3aXRoaW4gYSAnd2l0aCcgYmxvY2sgdG8gYWxsb3cgdGhlIHdhdGNoZXIgdG8gc3VzcGVuZAorICAgIGl0cyBhY3Rpdml0eSB1bnRpbCB0aGUgbmV3IHByb2Nlc3MgaWYgZnVsbHkgcmVnaXN0ZXJlZCAodGhpcyBpcyBuZWVkZWQgdG8KKyAgICBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMpLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgd2l0aCB3YXRjaGVyOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInNsZWVwIDEiKQorICAgICAgICAgICAgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcihwcm9jLnBpZCwgY2FsbGJhY2spCisKKyAgICBOb3RlczoKKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKworICAgICAgICBTaW5jZSBjaGlsZCB3YXRjaGVyIG9iamVjdHMgbWF5IGNhdGNoIHRoZSBTSUdDSExEIHNpZ25hbCBhbmQgY2FsbAorICAgICAgICB3YWl0cGlkKC0xKSwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGFjdGl2ZSBvYmplY3QgcGVyIHByb2Nlc3MuCisgICAgIiIiCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJSZWdpc3RlciBhIG5ldyBjaGlsZCBoYW5kbGVyLgorCisgICAgICAgIEFycmFuZ2UgZm9yIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpIHRvIGJlIGNhbGxlZCB3aGVuCisgICAgICAgIHByb2Nlc3MgJ3BpZCcgdGVybWluYXRlcy4gU3BlY2lmeWluZyBhbm90aGVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZQorICAgICAgICBwcm9jZXNzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBoYW5kbGVyLgorCisgICAgICAgIE5vdGU6IGNhbGxiYWNrKCkgbXVzdCBiZSB0aHJlYWQtc2FmZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkKToKKyAgICAgICAgIiIiUmVtb3ZlcyB0aGUgaGFuZGxlciBmb3IgcHJvY2VzcyAncGlkJy4KKworICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBUcnVlIGlmIHRoZSBoYW5kbGVyIHdhcyBzdWNjZXNzZnVsbHkgcmVtb3ZlZCwKKyAgICAgICAgRmFsc2UgaWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gcmVtb3ZlLiIiIgorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGF0dGFjaF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJBdHRhY2ggdGhlIHdhdGNoZXIgdG8gYW4gZXZlbnQgbG9vcC4KKworICAgICAgICBJZiB0aGUgd2F0Y2hlciB3YXMgcHJldmlvdXNseSBhdHRhY2hlZCB0byBhbiBldmVudCBsb29wLCB0aGVuIGl0IGlzCisgICAgICAgIGZpcnN0IGRldGFjaGVkIGJlZm9yZSBhdHRhY2hpbmcgdG8gdGhlIG5ldyBsb29wLgorCisgICAgICAgIE5vdGU6IGxvb3AgbWF5IGJlIE5vbmUuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdhdGNoZXIuCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiRW50ZXIgdGhlIHdhdGNoZXIncyBjb250ZXh0IGFuZCBhbGxvdyBzdGFydGluZyBuZXcgcHJvY2Vzc2VzCisKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IHJldHVybiBzZWxmIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGEsIGIsIGMpOgorICAgICAgICAiIiJFeGl0IHRoZSB3YXRjaGVyJ3MgY29udGV4dCIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworCitjbGFzcyBCYXNlQ2hpbGRXYXRjaGVyKEFic3RyYWN0Q2hpbGRXYXRjaGVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5hdHRhY2hfbG9vcChOb25lKQorCisgICAgZGVmIF9kb193YWl0cGlkKHNlbGYsIGV4cGVjdGVkX3BpZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgYXR0YWNoX2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgIGFzc2VydCBsb29wIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShsb29wLCBldmVudHMuQWJzdHJhY3RFdmVudExvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdDSExEKQorCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgc2VsZi5fc2lnX2NobGQpCisKKyAgICAgICAgICAgICMgUHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGNhc2UgYSBjaGlsZCB0ZXJtaW5hdGVkCisgICAgICAgICAgICAjIGR1cmluZyB0aGUgc3dpdGNoLgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZF9hbGwoKQorCisgICAgZGVmIF9zaWdfY2hsZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZF9hbGwoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmV4Y2VwdGlvbignVW5rbm93biBleGNlcHRpb24gaW4gU0lHQ0hMRCBoYW5kbGVyJykKKworICAgIGRlZiBfY29tcHV0ZV9yZXR1cm5jb2RlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGRpZWQgYmVjYXVzZSBvZiBhIHNpZ25hbC4KKyAgICAgICAgICAgIHJldHVybiAtb3MuV1RFUk1TSUcoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBleGl0ZWQgKGUuZyBzeXMuZXhpdCgpKS4KKyAgICAgICAgICAgIHJldHVybiBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBleGl0ZWQsIGJ1dCB3ZSBkb24ndCB1bmRlcnN0YW5kIGl0cyBzdGF0dXMuCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIGxldCdzIGp1c3QKKyAgICAgICAgICAgICMgcmV0dXJuIHRoYXQgc3RhdHVzOyBwZXJoYXBzIHRoYXQgaGVscHMgZGVidWcgaXQuCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInU2FmZScgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGRpc3J1cHRpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMgYnkKKyAgICBwb2xsaW5nIGV4cGxpY2l0bHkgZWFjaCBwcm9jZXNzIGluIHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkuCisKKyAgICBUaGlzIGlzIGEgc2FmZSBzb2x1dGlvbiBidXQgaXQgaGFzIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhCisgICAgYmlnIG51bWJlciBvZiBjaGlsZHJlbiAoTyhuKSBlYWNoIHRpbWUgU0lHQ0hMRCBpcyByYWlzZWQpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gY2FsbGJhY2ssIGFyZ3MKKworICAgICAgICAjIFByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlIHRoZSBjaGlsZCBpcyBhbHJlYWR5IHRlcm1pbmF0ZWQuCisgICAgICAgIHNlbGYuX2RvX3dhaXRwaWQocGlkKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorCisgICAgICAgIGZvciBwaWQgaW4gbGlzdChzZWxmLl9jYWxsYmFja3MpOgorICAgICAgICAgICAgc2VsZi5fZG9fd2FpdHBpZChwaWQpCisKKyAgICBkZWYgX2RvX3dhaXRwaWQoc2VsZiwgZXhwZWN0ZWRfcGlkKToKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX3BpZCA+IDAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoZXhwZWN0ZWRfcGlkLCBvcy5XTk9IQU5HKQorICAgICAgICBleGNlcHQgQ2hpbGRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGlzIGFscmVhZHkgcmVhcGVkCisgICAgICAgICAgICAjIChtYXkgaGFwcGVuIGlmIHdhaXRwaWQoKSBpcyBjYWxsZWQgZWxzZXdoZXJlKS4KKyAgICAgICAgICAgIHBpZCA9IGV4cGVjdGVkX3BpZAorICAgICAgICAgICAgcmV0dXJuY29kZSA9IDI1NQorICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAgICAgIlVua25vd24gY2hpbGQgcHJvY2VzcyBwaWQgJWQsIHdpbGwgcmVwb3J0IHJldHVybmNvZGUgMjU1IiwKKyAgICAgICAgICAgICAgICBwaWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlLgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fY29tcHV0ZV9yZXR1cm5jb2RlKHN0YXR1cykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICMgTWF5IGhhcHBlbiBpZiAucmVtb3ZlX2NoaWxkX2hhbmRsZXIoKSBpcyBjYWxsZWQKKyAgICAgICAgICAgICMgYWZ0ZXIgb3Mud2FpdHBpZCgpIHJldHVybnMuCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIEZhc3RDaGlsZFdhdGNoZXIoQmFzZUNoaWxkV2F0Y2hlcik6CisgICAgIiIiJ0Zhc3QnIGNoaWxkIHdhdGNoZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIHJlYXBzIGV2ZXJ5IHRlcm1pbmF0ZWQgcHJvY2Vzc2VzIGJ5IGNhbGxpbmcKKyAgICBvcy53YWl0cGlkKC0xKSBkaXJlY3RseSwgcG9zc2libHkgYnJlYWtpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMKKyAgICBhbmQgd2FpdGluZyBmb3IgdGhlaXIgdGVybWluYXRpb24uCisKKyAgICBUaGVyZSBpcyBubyBub3RpY2VhYmxlIG92ZXJoZWFkIHdoZW4gaGFuZGxpbmcgYSBiaWcgbnVtYmVyIG9mIGNoaWxkcmVuCisgICAgKE8oMSkgZWFjaCB0aW1lIGEgY2hpbGQgdGVybWluYXRlcykuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzID0ge30KKyAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fem9tYmllcyA9IHt9CisgICAgICAgIHNlbGYuX2ZvcmtzID0gMAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzZWxmLl96b21iaWVzLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9mb3JrcyArPSAxCisKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmtzIC09IDEKKworICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3Mgb3Igbm90IHNlbGYuX3pvbWJpZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGNvbGxhdGVyYWxfdmljdGltcyA9IHN0cihzZWxmLl96b21iaWVzKQorICAgICAgICAgICAgc2VsZi5fem9tYmllcy5jbGVhcigpCisKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoCisgICAgICAgICAgICAiQ2F1Z2h0IHN1YnByb2Nlc3NlcyB0ZXJtaW5hdGlvbiBmcm9tIHVua25vd24gcGlkczogJXMiLAorICAgICAgICAgICAgY29sbGF0ZXJhbF92aWN0aW1zKQorCisgICAgZGVmIGFkZF9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2ZvcmtzLCAiTXVzdCB1c2UgdGhlIGNvbnRleHQgbWFuYWdlciIKKworICAgICAgICBzZWxmLl9jYWxsYmFja3NbcGlkXSA9IGNhbGxiYWNrLCBhcmdzCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgbm90IGFscmVhZHkgdGVybWluYXRlZC4KKyAgICAgICAgICAgICMgKHJhaXNlIEtleUVycm9yIGlmIHN0aWxsIGFsaXZlKQorICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX3pvbWJpZXMucG9wKHBpZCkKKworICAgICAgICAgICAgIyBDaGlsZCBpcyBkZWFkLCB0aGVyZWZvcmUgd2UgY2FuIGZpcmUgdGhlIGNhbGxiYWNrIGltbWVkaWF0ZWx5LgorICAgICAgICAgICAgIyBGaXJzdCB3ZSByZW1vdmUgaXQgZnJvbSB0aGUgZGljdC4KKyAgICAgICAgICAgICMgKHJhaXNlIEtleUVycm9yIGlmIC5yZW1vdmVfY2hpbGRfaGFuZGxlcigpIHdhcyBjYWxsZWQgaW4tYmV0d2VlbikKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLl9jYWxsYmFja3NbcGlkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX2RvX3dhaXRwaWRfYWxsKHNlbGYpOgorICAgICAgICAjIEJlY2F1c2Ugb2Ygc2lnbmFsIGNvYWxlc2NpbmcsIHdlIG11c3Qga2VlcCBjYWxsaW5nIHdhaXRwaWQoKSBhcworICAgICAgICAjIGxvbmcgYXMgd2UncmUgYWJsZSB0byByZWFwIGEgY2hpbGQuCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKC0xLCBvcy5XTk9IQU5HKQorICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICMgTm8gbW9yZSBjaGlsZCBwcm9jZXNzZXMgZXhpc3QuCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICAjIEEgY2hpbGQgcHJvY2VzcyBpcyBzdGlsbCBhbGl2ZS4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fY29tcHV0ZV9yZXR1cm5jb2RlKHN0YXR1cykKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gc2VsZi5fY2FsbGJhY2tzLnBvcChwaWQpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgIyB1bmtub3duIGNoaWxkCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9mb3JrczoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgSXQgbWF5IG5vdCBiZSByZWdpc3RlcmVkIHlldC4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3pvbWJpZXNbcGlkXSA9IHJldHVybmNvZGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIkNhdWdodCBzdWJwcm9jZXNzIHRlcm1pbmF0aW9uIGZyb20gdW5rbm93biBwaWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgIiVkIC0+ICVkIiwgcGlkLCByZXR1cm5jb2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgICIiIlhYWCIiIgorICAgIF9sb29wX2ZhY3RvcnkgPSBfVW5peFNlbGVjdG9yRXZlbnRMb29wCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl93YXRjaGVyID0gTm9uZQorCisgICAgZGVmIF9pbml0X3dhdGNoZXIoc2VsZik6CisgICAgICAgIHdpdGggZXZlbnRzLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBOb25lOiAgIyBwcmFnbWE6IG5vIGJyYW5jaAorICAgICAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIgPSBTYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLl9NYWluVGhyZWFkKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLl9sb2NhbC5fbG9vcCkKKworICAgIGRlZiBzZXRfZXZlbnRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiU2V0IHRoZSBldmVudCBsb29wLgorCisgICAgICAgIEFzIGEgc2lkZSBlZmZlY3QsIGlmIGEgY2hpbGQgd2F0Y2hlciB3YXMgc2V0IGJlZm9yZSwgdGhlbiBjYWxsaW5nCisgICAgICAgIC5zZXRfZXZlbnRfbG9vcCgpIGZyb20gdGhlIG1haW4gdGhyZWFkIHdpbGwgY2FsbCAuYXR0YWNoX2xvb3AobG9vcCkgb24KKyAgICAgICAgdGhlIGNoaWxkIHdhdGNoZXIuCisgICAgICAgICIiIgorCisgICAgICAgIHN1cGVyKCkuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIG5vdCBOb25lIGFuZCBcCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpOgorICAgICAgICAgICAgc2VsZi5fd2F0Y2hlci5hdHRhY2hfbG9vcChsb29wKQorCisgICAgZGVmIGdldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICAiIiJHZXQgdGhlIGNoaWxkIHdhdGNoZXIKKworICAgICAgICBJZiBub3QgeWV0IHNldCwgYSBTYWZlQ2hpbGRXYXRjaGVyIG9iamVjdCBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9pbml0X3dhdGNoZXIoKQorCisgICAgICAgIHJldHVybiBzZWxmLl93YXRjaGVyCisKKyAgICBkZWYgc2V0X2NoaWxkX3dhdGNoZXIoc2VsZiwgd2F0Y2hlcik6CisgICAgICAgICIiIlNldCB0aGUgY2hpbGQgd2F0Y2hlciIiIgorCisgICAgICAgIGFzc2VydCB3YXRjaGVyIGlzIE5vbmUgb3IgaXNpbnN0YW5jZSh3YXRjaGVyLCBBYnN0cmFjdENoaWxkV2F0Y2hlcikKKworICAgICAgICBpZiBzZWxmLl93YXRjaGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2F0Y2hlci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5fd2F0Y2hlciA9IHdhdGNoZXIKKworU2VsZWN0b3JFdmVudExvb3AgPSBfVW5peFNlbGVjdG9yRXZlbnRMb29wCitEZWZhdWx0RXZlbnRMb29wUG9saWN5ID0gX1VuaXhEZWZhdWx0RXZlbnRMb29wUG9saWN5CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3dpbmRvd3NfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWQyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpAQCAtMCwwICsxLDQ3NSBAQAorIiIiU2VsZWN0b3IgYW5kIHByb2FjdG9yIGV2ZW50bG9vcHMgZm9yIFdpbmRvd3MuIiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB3ZWFrcmVmCitpbXBvcnQgc3RydWN0CitpbXBvcnQgX3dpbmFwaQorCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBiYXNlX3N1YnByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBwcm9hY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC4gaW1wb3J0IHdpbmRvd3NfdXRpbHMKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCitmcm9tIC4gaW1wb3J0IF9vdmVybGFwcGVkCisKKworX19hbGxfXyA9IFsnU2VsZWN0b3JFdmVudExvb3AnLCAnUHJvYWN0b3JFdmVudExvb3AnLCAnSW9jcFByb2FjdG9yJywKKyAgICAgICAgICAgJ0RlZmF1bHRFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICBdCisKKworTlVMTCA9IDAKK0lORklOSVRFID0gMHhmZmZmZmZmZgorRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEID0gMTIyNQorRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEID0gMTIzNgorCisKK2NsYXNzIF9PdmVybGFwcGVkRnV0dXJlKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJTdWJjbGFzcyBvZiBGdXR1cmUgd2hpY2ggcmVwcmVzZW50cyBhbiBvdmVybGFwcGVkIG9wZXJhdGlvbi4KKworICAgIENhbmNlbGxpbmcgaXQgd2lsbCBpbW1lZGlhdGVseSBjYW5jZWwgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG92LCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5vdiA9IG92CisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm92LmNhbmNlbCgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gc3VwZXIoKS5jYW5jZWwoKQorCisKK2NsYXNzIF9XYWl0SGFuZGxlRnV0dXJlKGZ1dHVyZXMuRnV0dXJlKToKKyAgICAiIiJTdWJjbGFzcyBvZiBGdXR1cmUgd2hpY2ggcmVwcmVzZW50cyBhIHdhaXQgaGFuZGxlLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhaXRfaGFuZGxlLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdF9oYW5kbGUgPSB3YWl0X2hhbmRsZQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5jYW5jZWwoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfb3ZlcmxhcHBlZC5VbnJlZ2lzdGVyV2FpdChzZWxmLl93YWl0X2hhbmRsZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUud2luZXJyb3IgIT0gX292ZXJsYXBwZWQuRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2NsYXNzIFBpcGVTZXJ2ZXIob2JqZWN0KToKKyAgICAiIiJDbGFzcyByZXByZXNlbnRpbmcgYSBwaXBlIHNlcnZlci4KKworICAgIFRoaXMgaXMgbXVjaCBsaWtlIGEgYm91bmQsIGxpc3RlbmluZyBzb2NrZXQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcyA9IHdlYWtyZWYuV2Vha1NldCgpCisgICAgICAgIHNlbGYuX3BpcGUgPSBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoVHJ1ZSkKKworICAgIGRlZiBfZ2V0X3VuY29ubmVjdGVkX3BpcGUoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIG5ldyBpbnN0YW5jZSBhbmQgcmV0dXJuIHByZXZpb3VzIG9uZS4gIFRoaXMgZW5zdXJlcworICAgICAgICAjIHRoYXQgKHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkKSB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3QKKyAgICAgICAgIyBvbmUgcGlwZSBoYW5kbGUgZm9yIGFkZHJlc3MuICBUaGVyZWZvcmUgaWYgYSBjbGllbnQgYXR0ZW1wdAorICAgICAgICAjIHRvIGNvbm5lY3QgaXQgd2lsbCBub3QgZmFpbCB3aXRoIEZpbGVOb3RGb3VuZEVycm9yLgorICAgICAgICB0bXAsIHNlbGYuX3BpcGUgPSBzZWxmLl9waXBlLCBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoRmFsc2UpCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiBfc2VydmVyX3BpcGVfaGFuZGxlKHNlbGYsIGZpcnN0KToKKyAgICAgICAgIyBSZXR1cm4gYSB3cmFwcGVyIGZvciBhIG5ldyBwaXBlIGhhbmRsZS4KKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZmxhZ3MgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0RVUExFWCB8IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKyAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICBmbGFncyB8PSBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFCisgICAgICAgIGggPSBfd2luYXBpLkNyZWF0ZU5hbWVkUGlwZSgKKyAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MsIGZsYWdzLAorICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1RZUEVfTUVTU0FHRSB8IF93aW5hcGkuUElQRV9SRUFETU9ERV9NRVNTQUdFIHwKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9XQUlULAorICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1VOTElNSVRFRF9JTlNUQU5DRVMsCisgICAgICAgICAgICB3aW5kb3dzX3V0aWxzLkJVRlNJWkUsIHdpbmRvd3NfdXRpbHMuQlVGU0laRSwKKyAgICAgICAgICAgIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTCkKKyAgICAgICAgcGlwZSA9IHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoKQorICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcy5hZGQocGlwZSkKKyAgICAgICAgcmV0dXJuIHBpcGUKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBDbG9zZSBhbGwgaW5zdGFuY2VzIHdoaWNoIGhhdmUgbm90IGJlZW4gY29ubmVjdGVkIHRvIGJ5IGEgY2xpZW50LgorICAgICAgICBpZiBzZWxmLl9hZGRyZXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIHBpcGUgaW4gc2VsZi5fZnJlZV9pbnN0YW5jZXM6CisgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2ZyZWVfaW5zdGFuY2VzLmNsZWFyKCkKKworICAgIF9fZGVsX18gPSBjbG9zZQorCisKK2NsYXNzIF9XaW5kb3dzU2VsZWN0b3JFdmVudExvb3Aoc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgIiIiV2luZG93cyB2ZXJzaW9uIG9mIHNlbGVjdG9yIGV2ZW50IGxvb3AuIiIiCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisKK2NsYXNzIFByb2FjdG9yRXZlbnRMb29wKHByb2FjdG9yX2V2ZW50cy5CYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICIiIldpbmRvd3MgdmVyc2lvbiBvZiBwcm9hY3RvciBldmVudCBsb29wIHVzaW5nIElPQ1AuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYWN0b3I9Tm9uZSk6CisgICAgICAgIGlmIHByb2FjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBwcm9hY3RvciA9IElvY3BQcm9hY3RvcigpCisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocHJvYWN0b3IpCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJldHVybiB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfcGlwZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGFkZHJlc3MpOgorICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuY29ubmVjdF9waXBlKGFkZHJlc3MpCisgICAgICAgIHBpcGUgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgdHJhbnMgPSBzZWxmLl9tYWtlX2R1cGxleF9waXBlX3RyYW5zcG9ydChwaXBlLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17J2FkZHInOiBhZGRyZXNzfSkKKyAgICAgICAgcmV0dXJuIHRyYW5zLCBwcm90b2NvbAorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBzdGFydF9zZXJ2aW5nX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgYWRkcmVzcyk6CisgICAgICAgIHNlcnZlciA9IFBpcGVTZXJ2ZXIoYWRkcmVzcykKKworICAgICAgICBkZWYgbG9vcChmPU5vbmUpOgorICAgICAgICAgICAgcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBmOgorICAgICAgICAgICAgICAgICAgICBwaXBlID0gZi5yZXN1bHQoKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIuX2ZyZWVfaW5zdGFuY2VzLmRpc2NhcmQocGlwZSkKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLCBwcm90b2NvbCwgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisgICAgICAgICAgICAgICAgcGlwZSA9IHNlcnZlci5fZ2V0X3VuY29ubmVjdGVkX3BpcGUoKQorICAgICAgICAgICAgICAgIGlmIHBpcGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmFjY2VwdF9waXBlKHBpcGUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBwaXBlIGFuZCBwaXBlLmZpbGVubygpICE9IC0xOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdQaXBlIGFjY2VwdCBmYWlsZWQnKQorICAgICAgICAgICAgICAgICAgICBwaXBlLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGlmIHBpcGU6CisgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3ApCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcCkKKyAgICAgICAgcmV0dXJuIFtzZXJ2ZXJdCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBzZXJ2ZXIpOgorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHRhc2tzLmNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICB0cmFuc3AgPSBfV2luZG93c1N1YnByb2Nlc3NUcmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpCisgICAgICAgIHlpZWxkIGZyb20gdHJhbnNwLl9wb3N0X2luaXQoKQorICAgICAgICByZXR1cm4gdHJhbnNwCisKKyAgICBkZWYgX3N1YnByb2Nlc3NfY2xvc2VkKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBJb2NwUHJvYWN0b3I6CisgICAgIiIiUHJvYWN0b3IgaW1wbGVtZW50YXRpb24gdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25jdXJyZW5jeT0weGZmZmZmZmZmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2lvY3AgPSBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KAorICAgICAgICAgICAgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIDAsIGNvbmN1cnJlbmN5KQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgZGVmIHNldF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBub3Qgc2VsZi5fcmVzdWx0czoKKyAgICAgICAgICAgIHNlbGYuX3BvbGwodGltZW91dCkKKyAgICAgICAgdG1wID0gc2VsZi5fcmVzdWx0cworICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgcmV0dXJuIHRtcAorCisgICAgZGVmIHJlY3Yoc2VsZiwgY29ubiwgbmJ5dGVzLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBUmVjdihjb25uLmZpbGVubygpLCBuYnl0ZXMsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuUmVhZEZpbGUoY29ubi5maWxlbm8oKSwgbmJ5dGVzKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoKQorCisgICAgZGVmIHNlbmQoc2VsZiwgY29ubiwgYnVmLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBU2VuZChjb25uLmZpbGVubygpLCBidWYsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuV3JpdGVGaWxlKGNvbm4uZmlsZW5vKCksIGJ1ZikKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgPT0gX292ZXJsYXBwZWQuRVJST1JfTkVUTkFNRV9ERUxFVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigqZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaCkKKworICAgIGRlZiBhY2NlcHQoc2VsZiwgbGlzdGVuZXIpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AobGlzdGVuZXIpCisgICAgICAgIGNvbm4gPSBzZWxmLl9nZXRfYWNjZXB0X3NvY2tldChsaXN0ZW5lci5mYW1pbHkpCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5BY2NlcHRFeChsaXN0ZW5lci5maWxlbm8oKSwgY29ubi5maWxlbm8oKSkKKworICAgICAgICBkZWYgZmluaXNoX2FjY2VwdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0FDQ0VQVF9DT05URVhUIHNvIGdldHNvY2tuYW1lKCkgZXRjIHdvcmsuCisgICAgICAgICAgICBidWYgPSBzdHJ1Y3QucGFjaygnQFAnLCBsaXN0ZW5lci5maWxlbm8oKSkKKyAgICAgICAgICAgIGNvbm4uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5TT19VUERBVEVfQUNDRVBUX0NPTlRFWFQsIGJ1ZikKKyAgICAgICAgICAgIGNvbm4uc2V0dGltZW91dChsaXN0ZW5lci5nZXR0aW1lb3V0KCkpCisgICAgICAgICAgICByZXR1cm4gY29ubiwgY29ubi5nZXRwZWVybmFtZSgpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBsaXN0ZW5lciwgZmluaXNoX2FjY2VwdCkKKworICAgIGRlZiBjb25uZWN0KHNlbGYsIGNvbm4sIGFkZHJlc3MpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AoY29ubikKKyAgICAgICAgIyBUaGUgc29ja2V0IG5lZWRzIHRvIGJlIGxvY2FsbHkgYm91bmQgYmVmb3JlIHdlIGNhbGwgQ29ubmVjdEV4KCkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLkJpbmRMb2NhbChjb25uLmZpbGVubygpLCBjb25uLmZhbWlseSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUud2luZXJyb3IgIT0gZXJybm8uV1NBRUlOVkFMOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFByb2JhYmx5IGFscmVhZHkgbG9jYWxseSBib3VuZDsgY2hlY2sgdXNpbmcgZ2V0c29ja25hbWUoKS4KKyAgICAgICAgICAgIGlmIGNvbm4uZ2V0c29ja25hbWUoKVsxXSA9PSAwOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBvdi5Db25uZWN0RXgoY29ubi5maWxlbm8oKSwgYWRkcmVzcykKKworICAgICAgICBkZWYgZmluaXNoX2Nvbm5lY3QodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgICMgVXNlIFNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQgc28gZ2V0c29ja25hbWUoKSBldGMgd29yay4KKyAgICAgICAgICAgIGNvbm4uc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5TT19VUERBVEVfQ09OTkVDVF9DT05URVhULCAwKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4KKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaF9jb25uZWN0KQorCisgICAgZGVmIGFjY2VwdF9waXBlKHNlbGYsIHBpcGUpOgorICAgICAgICBzZWxmLl9yZWdpc3Rlcl93aXRoX2lvY3AocGlwZSkKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3ROYW1lZFBpcGUocGlwZS5maWxlbm8oKSkKKworICAgICAgICBkZWYgZmluaXNoKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIG92LmdldHJlc3VsdCgpCisgICAgICAgICAgICByZXR1cm4gcGlwZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgcGlwZSwgZmluaXNoKQorCisgICAgZGVmIGNvbm5lY3RfcGlwZShzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LldhaXROYW1lZFBpcGVBbmRDb25uZWN0KGFkZHJlc3MsIHNlbGYuX2lvY3AsIG92LmFkZHJlc3MpCisKKyAgICAgICAgZGVmIGZpbmlzaChlcnIsIGhhbmRsZSwgb3YpOgorICAgICAgICAgICAgIyBlcnIsIGhhbmRsZSB3ZXJlIGFyZ3VtZW50cyBwYXNzZWQgdG8gUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKQorICAgICAgICAgICAgIyBpbiBhIGZ1bmN0aW9uIHJ1biBpbiBhIHRocmVhZCBwb29sLgorICAgICAgICAgICAgaWYgZXJyID09IF9vdmVybGFwcGVkLkVSUk9SX1NFTV9USU1FT1VUOgorICAgICAgICAgICAgICAgICMgQ29ubmVjdGlvbiBkaWQgbm90IHN1Y2NlZWQgd2l0aGluIHRpbWUgbGltaXQuCisgICAgICAgICAgICAgICAgbXNnID0gX292ZXJsYXBwZWQuRm9ybWF0TWVzc2FnZShlcnIpCisgICAgICAgICAgICAgICAgcmFpc2UgQ29ubmVjdGlvblJlZnVzZWRFcnJvcigwLCBtc2csIE5vbmUsIGVycikKKyAgICAgICAgICAgIGVsaWYgZXJyICE9IDA6CisgICAgICAgICAgICAgICAgbXNnID0gX292ZXJsYXBwZWQuRm9ybWF0TWVzc2FnZShlcnIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCBtc2csIE5vbmUsIGVycikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoYW5kbGUpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlZ2lzdGVyKG92LCBOb25lLCBmaW5pc2gsIHdhaXRfZm9yX3Bvc3Q9VHJ1ZSkKKworICAgIGRlZiB3YWl0X2Zvcl9oYW5kbGUoc2VsZiwgaGFuZGxlLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBtcyA9IF93aW5hcGkuSU5GSU5JVEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zID0gaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KQorCisgICAgICAgICMgV2Ugb25seSBjcmVhdGUgb3Ygc28gd2UgY2FuIHVzZSBvdi5hZGRyZXNzIGFzIGEga2V5IGZvciB0aGUgY2FjaGUuCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICB3aCA9IF9vdmVybGFwcGVkLlJlZ2lzdGVyV2FpdFdpdGhRdWV1ZSgKKyAgICAgICAgICAgIGhhbmRsZSwgc2VsZi5faW9jcCwgb3YuYWRkcmVzcywgbXMpCisgICAgICAgIGYgPSBfV2FpdEhhbmRsZUZ1dHVyZSh3aCwgbG9vcD1zZWxmLl9sb29wKQorCisgICAgICAgIGRlZiBmaW5pc2godHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgaWYgbm90IGYuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfb3ZlcmxhcHBlZC5VbnJlZ2lzdGVyV2FpdCh3aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBzZWNvbmQgd2FpdCBtZWFucyB0aGF0IHdlIHNob3VsZCBvbmx5IHVzZQorICAgICAgICAgICAgIyB0aGlzIHdpdGggaGFuZGxlcyB0eXBlcyB3aGVyZSBhIHN1Y2Nlc3NmdWwgd2FpdCBoYXMgbm8KKyAgICAgICAgICAgICMgZWZmZWN0LiAgU28gZXZlbnRzIG9yIHByb2Nlc3NlcyBhcmUgYWxsIHJpZ2h0LCBidXQgbG9ja3MKKyAgICAgICAgICAgICMgb3Igc2VtYXBob3JlcyBhcmUgbm90LiAgQWxzbyBub3RlIGlmIHRoZSBoYW5kbGUgaXMKKyAgICAgICAgICAgICMgc2lnbmFsbGVkIGFuZCB0aGVuIHF1aWNrbHkgcmVzZXQsIHRoZW4gd2UgbWF5IHJldHVybgorICAgICAgICAgICAgIyBGYWxzZSBldmVuIHRob3VnaCB3ZSBoYXZlIG5vdCB0aW1lZCBvdXQuCisgICAgICAgICAgICByZXR1cm4gKF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChoYW5kbGUsIDApID09CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgICAgICBzZWxmLl9jYWNoZVtvdi5hZGRyZXNzXSA9IChmLCBvdiwgTm9uZSwgZmluaXNoKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF9yZWdpc3Rlcl93aXRoX2lvY3Aoc2VsZiwgb2JqKToKKyAgICAgICAgIyBUbyBnZXQgbm90aWZpY2F0aW9ucyBvZiBmaW5pc2hlZCBvcHMgb24gdGhpcyBvYmplY3RzIHNlbnQgdG8gdGhlCisgICAgICAgICMgY29tcGxldGlvbiBwb3J0LCB3ZXJlIG11c3QgcmVnaXN0ZXIgdGhlIGhhbmRsZS4KKyAgICAgICAgaWYgb2JqIG5vdCBpbiBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZC5hZGQob2JqKQorICAgICAgICAgICAgX292ZXJsYXBwZWQuQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChvYmouZmlsZW5vKCksIHNlbGYuX2lvY3AsIDAsIDApCisgICAgICAgICAgICAjIFhYWCBXZSBjb3VsZCBhbHNvIHVzZSBTZXRGaWxlQ29tcGxldGlvbk5vdGlmaWNhdGlvbk1vZGVzKCkKKyAgICAgICAgICAgICMgdG8gYXZvaWQgc2VuZGluZyBub3RpZmljYXRpb25zIHRvIGNvbXBsZXRpb24gcG9ydCBvZiBvcHMKKyAgICAgICAgICAgICMgdGhhdCBzdWNjZWVkIGltbWVkaWF0ZWx5LgorCisgICAgZGVmIF9yZWdpc3RlcihzZWxmLCBvdiwgb2JqLCBjYWxsYmFjaywgd2FpdF9mb3JfcG9zdD1GYWxzZSk6CisgICAgICAgICMgUmV0dXJuIGEgZnV0dXJlIHdoaWNoIHdpbGwgYmUgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgIyBvcGVyYXRpb24gd2hlbiBpdCBjb21wbGV0ZXMuICBUaGUgZnV0dXJlJ3MgdmFsdWUgaXMgYWN0dWFsbHkKKyAgICAgICAgIyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGJhY2soKS4KKyAgICAgICAgZiA9IF9PdmVybGFwcGVkRnV0dXJlKG92LCBsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGlmIG92LnBlbmRpbmcgb3Igd2FpdF9mb3JfcG9zdDoKKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uIGZvciBsYXRlci4gIE5vdGUgdGhhdAorICAgICAgICAgICAgIyB3ZSBvbmx5IHN0b3JlIG9iaiB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZ2FyYmFnZQorICAgICAgICAgICAgIyBjb2xsZWN0ZWQgdG9vIGVhcmx5LgorICAgICAgICAgICAgc2VsZi5fY2FjaGVbb3YuYWRkcmVzc10gPSAoZiwgb3YsIG9iaiwgY2FsbGJhY2spCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgc28gbm8gbmVlZCB0byBwb3N0cG9uZSB0aGUKKyAgICAgICAgICAgICMgd29yay4gIFdlIGNhbm5vdCB0YWtlIHRoaXMgc2hvcnQgY3V0IGlmIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAjIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXkgdmFsdWVzIHJldHVybmVkIGJ5CisgICAgICAgICAgICAjIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayhOb25lLCBOb25lLCBvdikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGYKKworICAgIGRlZiBfZ2V0X2FjY2VwdF9zb2NrZXQoc2VsZiwgZmFtaWx5KToKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5KQorICAgICAgICBzLnNldHRpbWVvdXQoMCkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBtcyA9IElORklOSVRFCisgICAgICAgIGVsaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSB0aW1lb3V0IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zID0gaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KQorICAgICAgICAgICAgaWYgbXMgPj0gSU5GSU5JVEU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGltZW91dCB0b28gYmlnIikKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXR1cyA9IF9vdmVybGFwcGVkLkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoc2VsZi5faW9jcCwgbXMpCisgICAgICAgICAgICBpZiBzdGF0dXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVyciwgdHJhbnNmZXJyZWQsIGtleSwgYWRkcmVzcyA9IHN0YXR1cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYsIG92LCBvYmosIGNhbGxiYWNrID0gc2VsZi5fY2FjaGUucG9wKGFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgIyBrZXkgaXMgZWl0aGVyIHplcm8sIG9yIGl0IGlzIHVzZWQgdG8gcmV0dXJuIGEgcGlwZQorICAgICAgICAgICAgICAgICMgaGFuZGxlIHdoaWNoIHNob3VsZCBiZSBjbG9zZWQgdG8gYXZvaWQgYSBsZWFrLgorICAgICAgICAgICAgICAgIGlmIGtleSBub3QgaW4gKDAsIF9vdmVybGFwcGVkLklOVkFMSURfSEFORExFX1ZBTFVFKToKKyAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShrZXkpCisgICAgICAgICAgICAgICAgbXMgPSAwCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIG9iaiBpbiBzZWxmLl9zdG9wcGVkX3NlcnZpbmc6CisgICAgICAgICAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICAgICAgZWxpZiBub3QgZi5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2FsbGJhY2sodHJhbnNmZXJyZWQsIGtleSwgb3YpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdHMuYXBwZW5kKGYpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZi5zZXRfcmVzdWx0KHZhbHVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRzLmFwcGVuZChmKQorICAgICAgICAgICAgbXMgPSAwCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBvYmopOgorICAgICAgICAjIG9iaiBpcyBhIHNvY2tldCBvciBwaXBlIGhhbmRsZS4gIEl0IHdpbGwgYmUgY2xvc2VkIGluCisgICAgICAgICMgQmFzZVByb2FjdG9yRXZlbnRMb29wLl9zdG9wX3NlcnZpbmcoKSB3aGljaCB3aWxsIG1ha2UgYW55CisgICAgICAgICMgcGVuZGluZyBvcGVyYXRpb25zIGZhaWwgcXVpY2tseS4KKyAgICAgICAgc2VsZi5fc3RvcHBlZF9zZXJ2aW5nLmFkZChvYmopCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2FuY2VsIHJlbWFpbmluZyByZWdpc3RlcmVkIG9wZXJhdGlvbnMuCisgICAgICAgIGZvciBhZGRyZXNzLCAoZiwgb3YsIG9iaiwgY2FsbGJhY2spIGluIGxpc3Qoc2VsZi5fY2FjaGUuaXRlbXMoKSk6CisgICAgICAgICAgICBpZiBvYmogaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gd2FzIHN0YXJ0ZWQgd2l0aCBjb25uZWN0X3BpcGUoKSB3aGljaAorICAgICAgICAgICAgICAgICMgcXVldWVzIGEgdGFzayB0byBXaW5kb3dzJyB0aHJlYWQgcG9vbC4gIFRoaXMgY2Fubm90CisgICAgICAgICAgICAgICAgIyBiZSBjYW5jZWxsZWQsIHNvIGp1c3QgZm9yZ2V0IGl0LgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9jYWNoZVthZGRyZXNzXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG92LmNhbmNlbCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB3aGlsZSBzZWxmLl9jYWNoZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9wb2xsKDEpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygndGFraW5nIGxvbmcgdGltZSB0byBjbG9zZSBwcm9hY3RvcicpCisKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIGlmIHNlbGYuX2lvY3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHNlbGYuX2lvY3ApCisgICAgICAgICAgICBzZWxmLl9pb2NwID0gTm9uZQorCisKK2NsYXNzIF9XaW5kb3dzU3VicHJvY2Vzc1RyYW5zcG9ydChiYXNlX3N1YnByb2Nlc3MuQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQpOgorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX3Byb2MgPSB3aW5kb3dzX3V0aWxzLlBvcGVuKAorICAgICAgICAgICAgYXJncywgc2hlbGw9c2hlbGwsIHN0ZGluPXN0ZGluLCBzdGRvdXQ9c3Rkb3V0LCBzdGRlcnI9c3RkZXJyLAorICAgICAgICAgICAgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKworICAgICAgICBkZWYgY2FsbGJhY2soZik6CisgICAgICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5fcHJvYy5wb2xsKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NfZXhpdGVkKHJldHVybmNvZGUpCisKKyAgICAgICAgZiA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShpbnQoc2VsZi5fcHJvYy5faGFuZGxlKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYWxsYmFjaykKKworCitTZWxlY3RvckV2ZW50TG9vcCA9IF9XaW5kb3dzU2VsZWN0b3JFdmVudExvb3AKKworCitjbGFzcyBfV2luZG93c0RlZmF1bHRFdmVudExvb3BQb2xpY3koZXZlbnRzLkJhc2VEZWZhdWx0RXZlbnRMb29wUG9saWN5KToKKyAgICBfbG9vcF9mYWN0b3J5ID0gU2VsZWN0b3JFdmVudExvb3AKKworCitEZWZhdWx0RXZlbnRMb29wUG9saWN5ID0gX1dpbmRvd3NEZWZhdWx0RXZlbnRMb29wUG9saWN5CmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5IGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFjMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c191dGlscy5weQpAQCAtMCwwICsxLDE5MiBAQAorIiIiCitWYXJpb3VzIFdpbmRvd3Mgc3BlY2lmaWMgYml0cyBhbmQgcGllY2VzCisiIiIKKworaW1wb3J0IHN5cworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHJhaXNlIEltcG9ydEVycm9yKCd3aW4zMiBvbmx5JykKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1zdmNydAoraW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgX3dpbmFwaQorCisKK19fYWxsX18gPSBbJ3NvY2tldHBhaXInLCAncGlwZScsICdQb3BlbicsICdQSVBFJywgJ1BpcGVIYW5kbGUnXQorCisKKyMgQ29uc3RhbnRzL2dsb2JhbHMKKworCitCVUZTSVpFID0gODE5MgorUElQRSA9IHN1YnByb2Nlc3MuUElQRQorU1RET1VUID0gc3VicHJvY2Vzcy5TVERPVVQKK19tbWFwX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIHNvY2tldC5zb2NrZXRwYWlyKCkKKworCitkZWYgc29ja2V0cGFpcihmYW1pbHk9c29ja2V0LkFGX0lORVQsIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wKToKKyAgICAiIiJBIHNvY2tldCBwYWlyIHVzYWJsZSBhcyBhIHNlbGYtcGlwZSwgZm9yIFdpbmRvd3MuCisKKyAgICBPcmlnaW46IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzQzMjU3ODMsIGJ5IEdlZXJ0IEphbnNlbi4gIFB1YmxpYyBkb21haW4uCisgICAgIiIiCisgICAgIyBXZSBjcmVhdGUgYSBjb25uZWN0ZWQgVENQIHNvY2tldC4gTm90ZSB0aGUgdHJpY2sgd2l0aCBzZXRibG9ja2luZygwKQorICAgICMgdGhhdCBwcmV2ZW50cyB1cyBmcm9tIGhhdmluZyB0byBjcmVhdGUgYSB0aHJlYWQuCisgICAgbHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgbHNvY2suYmluZCgoJ2xvY2FsaG9zdCcsIDApKQorICAgIGxzb2NrLmxpc3RlbigxKQorICAgIGFkZHIsIHBvcnQgPSBsc29jay5nZXRzb2NrbmFtZSgpCisgICAgY3NvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgY3NvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgdHJ5OgorICAgICAgICBjc29jay5jb25uZWN0KChhZGRyLCBwb3J0KSkKKyAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgIHBhc3MKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBsc29jay5jbG9zZSgpCisgICAgICAgIGNzb2NrLmNsb3NlKCkKKyAgICAgICAgcmFpc2UKKyAgICBzc29jaywgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgY3NvY2suc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICBsc29jay5jbG9zZSgpCisgICAgcmV0dXJuIChzc29jaywgY3NvY2spCisKKworIyBSZXBsYWNlbWVudCBmb3Igb3MucGlwZSgpIHVzaW5nIGhhbmRsZXMgaW5zdGVhZCBvZiBmZHMKKworCitkZWYgcGlwZSgqLCBkdXBsZXg9RmFsc2UsIG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpLCBidWZzaXplPUJVRlNJWkUpOgorICAgICIiIkxpa2Ugb3MucGlwZSgpIGJ1dCB3aXRoIG92ZXJsYXBwZWQgc3VwcG9ydCBhbmQgdXNpbmcgaGFuZGxlcyBub3QgZmRzLiIiIgorICAgIGFkZHJlc3MgPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHl0aG9uLXBpcGUtJWQtJWQtJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3MuZ2V0cGlkKCksIG5leHQoX21tYXBfY291bnRlcikpKQorCisgICAgaWYgZHVwbGV4OgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfRFVQTEVYCisgICAgICAgIGFjY2VzcyA9IF93aW5hcGkuR0VORVJJQ19SRUFEIHwgX3dpbmFwaS5HRU5FUklDX1dSSVRFCisgICAgICAgIG9ic2l6ZSwgaWJzaXplID0gYnVmc2l6ZSwgYnVmc2l6ZQorICAgIGVsc2U6CisgICAgICAgIG9wZW5tb2RlID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19JTkJPVU5ECisgICAgICAgIGFjY2VzcyA9IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IDAsIGJ1ZnNpemUKKworICAgIG9wZW5tb2RlIHw9IF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UKKworICAgIGlmIG92ZXJsYXBwZWRbMF06CisgICAgICAgIG9wZW5tb2RlIHw9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKworICAgIGlmIG92ZXJsYXBwZWRbMV06CisgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzID0gX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRAorICAgIGVsc2U6CisgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzID0gMAorCisgICAgaDEgPSBoMiA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIGgxID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBhZGRyZXNzLCBvcGVubW9kZSwgX3dpbmFwaS5QSVBFX1dBSVQsCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIGgyID0gX3dpbmFwaS5DcmVhdGVGaWxlKAorICAgICAgICAgICAgYWRkcmVzcywgYWNjZXNzLCAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKKyAgICAgICAgICAgIGZsYWdzX2FuZF9hdHRyaWJzLCBfd2luYXBpLk5VTEwpCisKKyAgICAgICAgb3YgPSBfd2luYXBpLkNvbm5lY3ROYW1lZFBpcGUoaDEsIG92ZXJsYXBwZWQ9VHJ1ZSkKKyAgICAgICAgb3YuR2V0T3ZlcmxhcHBlZFJlc3VsdChUcnVlKQorICAgICAgICByZXR1cm4gaDEsIGgyCisgICAgZXhjZXB0OgorICAgICAgICBpZiBoMSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDEpCisgICAgICAgIGlmIGgyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMikKKyAgICAgICAgcmFpc2UKKworCisjIFdyYXBwZXIgZm9yIGEgcGlwZSBoYW5kbGUKKworCitjbGFzcyBQaXBlSGFuZGxlOgorICAgICIiIldyYXBwZXIgZm9yIGFuIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGUgd2hpY2ggaXMgdmFndWVseSBmaWxlLW9iamVjdCBsaWtlLgorCisgICAgVGhlIElPQ1AgZXZlbnQgbG9vcCBjYW4gdXNlIHRoZXNlIGluc3RlYWQgb2Ygc29ja2V0IG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhhbmRsZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hhbmRsZQorCisgICAgZGVmIGNsb3NlKHNlbGYsICosIENsb3NlSGFuZGxlPV93aW5hcGkuQ2xvc2VIYW5kbGUpOgorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgIT0gLTE6CisgICAgICAgICAgICBDbG9zZUhhbmRsZShzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSAtMQorCisgICAgX19kZWxfXyA9IGNsb3NlCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKworIyBSZXBsYWNlbWVudCBmb3Igc3VicHJvY2Vzcy5Qb3BlbiB1c2luZyBvdmVybGFwcGVkIHBpcGUgaGFuZGxlcworCisKK2NsYXNzIFBvcGVuKHN1YnByb2Nlc3MuUG9wZW4pOgorICAgICIiIlJlcGxhY2VtZW50IGZvciBzdWJwcm9jZXNzLlBvcGVuIHVzaW5nIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGVzLgorCisgICAgVGhlIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciBhcmUgTm9uZSBvciBpbnN0YW5jZXMgb2YgUGlwZUhhbmRsZS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCAqKmt3ZHMpOgorICAgICAgICBhc3NlcnQgbm90IGt3ZHMuZ2V0KCd1bml2ZXJzYWxfbmV3bGluZXMnKQorICAgICAgICBhc3NlcnQga3dkcy5nZXQoJ2J1ZnNpemUnLCAwKSA9PSAwCisgICAgICAgIHN0ZGluX3JmZCA9IHN0ZG91dF93ZmQgPSBzdGRlcnJfd2ZkID0gTm9uZQorICAgICAgICBzdGRpbl93aCA9IHN0ZG91dF9yaCA9IHN0ZGVycl9yaCA9IE5vbmUKKyAgICAgICAgaWYgc3RkaW4gPT0gUElQRToKKyAgICAgICAgICAgIHN0ZGluX3JoLCBzdGRpbl93aCA9IHBpcGUob3ZlcmxhcHBlZD0oRmFsc2UsIFRydWUpLCBkdXBsZXg9VHJ1ZSkKKyAgICAgICAgICAgIHN0ZGluX3JmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRpbl9yaCwgb3MuT19SRE9OTFkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbl9yZmQgPSBzdGRpbgorICAgICAgICBpZiBzdGRvdXQgPT0gUElQRToKKyAgICAgICAgICAgIHN0ZG91dF9yaCwgc3Rkb3V0X3doID0gcGlwZShvdmVybGFwcGVkPShUcnVlLCBGYWxzZSkpCisgICAgICAgICAgICBzdGRvdXRfd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZG91dF93aCwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZG91dF93ZmQgPSBzdGRvdXQKKyAgICAgICAgaWYgc3RkZXJyID09IFBJUEU6CisgICAgICAgICAgICBzdGRlcnJfcmgsIHN0ZGVycl93aCA9IHBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgRmFsc2UpKQorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShzdGRlcnJfd2gsIDApCisgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBzdGRvdXRfd2ZkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gc3RkZXJyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oYXJncywgc3RkaW49c3RkaW5fcmZkLCBzdGRvdXQ9c3Rkb3V0X3dmZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVycl93ZmQsICoqa3dkcykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZm9yIGggaW4gKHN0ZGluX3doLCBzdGRvdXRfcmgsIHN0ZGVycl9yaCk6CisgICAgICAgICAgICAgICAgaWYgaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0ZGluX3doIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4gPSBQaXBlSGFuZGxlKHN0ZGluX3doKQorICAgICAgICAgICAgaWYgc3Rkb3V0X3JoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gUGlwZUhhbmRsZShzdGRvdXRfcmgpCisgICAgICAgICAgICBpZiBzdGRlcnJfcmggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBQaXBlSGFuZGxlKHN0ZGVycl9yaCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHN0ZGluID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3RkaW5fcmZkKQorICAgICAgICAgICAgaWYgc3Rkb3V0ID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3Rkb3V0X3dmZCkKKyAgICAgICAgICAgIGlmIHN0ZGVyciA9PSBQSVBFOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHN0ZGVycl93ZmQpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNvcmUucHkgYi9MaWIvYXN5bmNvcmUucHkKaW5kZXggOTA5ZDlmNi4uNzU0ODFkZCAxMDA2NDQKLS0tIGEvTGliL2FzeW5jb3JlLnB5CisrKyBiL0xpYi9hc3luY29yZS5weQpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICBvYmouaGFuZGxlX2V4cHRfZXZlbnQoKQogICAgICAgICBpZiBmbGFncyAmIChzZWxlY3QuUE9MTEhVUCB8IHNlbGVjdC5QT0xMRVJSIHwgc2VsZWN0LlBPTExOVkFMKToKICAgICAgICAgICAgIG9iai5oYW5kbGVfY2xvc2UoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmFyZ3NbMF0gbm90IGluIF9ESVNDT05ORUNURUQ6CiAgICAgICAgICAgICBvYmouaGFuZGxlX2Vycm9yKCkKICAgICAgICAgZWxzZToKQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgICAgICAgIyBwYXNzZWQgYmUgY29ubmVjdGVkLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuYWRkciA9IHNvY2suZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKEVOT1RDT05OLCBFSU5WQUwpOgogICAgICAgICAgICAgICAgICAgICAjIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBnb3QgYW4gdW5jb25uZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgIyBzb2NrZXQuCkBAIC0zMDQsNyArMzA0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikgfCAxCiAgICAgICAgICAgICAgICAgKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTM0NSw3ICszNDUsNyBAQAogICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcmVzcwogICAgICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdF9ldmVudCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBlcnJvcmNvZGVbZXJyXSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCBlcnJvcmNvZGVbZXJyXSkKIAogICAgIGRlZiBhY2NlcHQoc2VsZik6CiAgICAgICAgICMgWFhYIGNhbiByZXR1cm4gZWl0aGVyIGFuIGFkZHJlc3MgcGFpciBvciBOb25lCkBAIC0zNTMsNyArMzUzLDcgQEAKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIChFV09VTERCTE9DSywgRUNPTk5BQk9SVEVELCBFQUdBSU4pOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzY1LDcgKzM2NSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuc29ja2V0LnNlbmQoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdID09IEVXT1VMREJMT0NLOgogICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICBlbGlmIHdoeS5hcmdzWzBdIGluIF9ESVNDT05ORUNURUQ6CkBAIC0zODQsNyArMzg0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAjIHdpbnNvY2sgc29tZXRpbWVzIHJhaXNlcyBFTk9UQ09OTgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCkBAIC0zOTcsMTEgKzM5NywxMiBAQAogICAgICAgICBzZWxmLmFjY2VwdGluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuY29ubmVjdGluZyA9IEZhbHNlCiAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgotICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gbm90IGluIChFTk9UQ09OTiwgRUJBREYpOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYuc29ja2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBub3QgaW4gKEVOT1RDT05OLCBFQkFERik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAjIGNoZWFwIGluaGVyaXRhbmNlLCB1c2VkIHRvIHBhc3MgYWxsIG90aGVyIGF0dHJpYnV0ZQogICAgICMgcmVmZXJlbmNlcyB0byB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgpAQCAtNDQzLDcgKzQ0NCw3IEBACiAgICAgZGVmIGhhbmRsZV9jb25uZWN0X2V2ZW50KHNlbGYpOgogICAgICAgICBlcnIgPSBzZWxmLnNvY2tldC5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCiAgICAgICAgIGlmIGVyciAhPSAwOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVyciwgX3N0cmVycm9yKGVycikpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVyciwgX3N0cmVycm9yKGVycikpCiAgICAgICAgIHNlbGYuaGFuZGxlX2Nvbm5lY3QoKQogICAgICAgICBzZWxmLmNvbm5lY3RlZCA9IFRydWUKICAgICAgICAgc2VsZi5jb25uZWN0aW5nID0gRmFsc2UKQEAgLTUzMiw3ICs1MzMsNyBAQAogCiAgICAgZGVmIGluaXRpYXRlX3NlbmQoc2VsZik6CiAgICAgICAgIG51bV9zZW50ID0gMAotICAgICAgICBudW1fc2VudCA9IGRpc3BhdGNoZXIuc2VuZChzZWxmLCBzZWxmLm91dF9idWZmZXJbOjUxMl0pCisgICAgICAgIG51bV9zZW50ID0gZGlzcGF0Y2hlci5zZW5kKHNlbGYsIHNlbGYub3V0X2J1ZmZlcls6NjU1MzZdKQogICAgICAgICBzZWxmLm91dF9idWZmZXIgPSBzZWxmLm91dF9idWZmZXJbbnVtX3NlbnQ6XQogCiAgICAgZGVmIGhhbmRsZV93cml0ZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9iYXNlNjQucHkgYi9MaWIvYmFzZTY0LnB5CmluZGV4IGI2ZTgyYjYuLjg0ODE4Y2YgMTAwNzU1Ci0tLSBhL0xpYi9iYXNlNjQucHkKKysrIGIvTGliL2Jhc2U2NC5weQpAQCAtMSw2ICsxLDYgQEAKICMhIC91c3IvYmluL2VudiBweXRob24zCiAKLSIiIlJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzIiIiCisiIiJCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IChSRkMgMzU0OCksIEJhc2U4NSBhbmQgQXNjaWk4NSBkYXRhIGVuY29kaW5ncyIiIgogCiAjIE1vZGlmaWVkIDA0LU9jdC0xOTk1IGJ5IEphY2sgSmFuc2VuIHRvIHVzZSBiaW5hc2NpaSBtb2R1bGUKICMgTW9kaWZpZWQgMzAtRGVjLTIwMDMgYnkgQmFycnkgV2Fyc2F3IHRvIGFkZCBmdWxsIFJGQyAzNTQ4IHN1cHBvcnQKQEAgLTksNiArOSw3IEBACiBpbXBvcnQgcmUKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGl0ZXJ0b29scwogCiAKIF9fYWxsX18gPSBbCkBAIC0xNyw2ICsxOCw4IEBACiAgICAgIyBHZW5lcmFsaXplZCBpbnRlcmZhY2UgZm9yIG90aGVyIGVuY29kaW5ncwogICAgICdiNjRlbmNvZGUnLCAnYjY0ZGVjb2RlJywgJ2IzMmVuY29kZScsICdiMzJkZWNvZGUnLAogICAgICdiMTZlbmNvZGUnLCAnYjE2ZGVjb2RlJywKKyAgICAjIEJhc2U4NSBhbmQgQXNjaWk4NSBlbmNvZGluZ3MKKyAgICAnYjg1ZW5jb2RlJywgJ2I4NWRlY29kZScsICdhODVlbmNvZGUnLCAnYTg1ZGVjb2RlJywKICAgICAjIFN0YW5kYXJkIEJhc2U2NCBlbmNvZGluZwogICAgICdzdGFuZGFyZF9iNjRlbmNvZGUnLCAnc3RhbmRhcmRfYjY0ZGVjb2RlJywKICAgICAjIFNvbWUgY29tbW9uIEJhc2U2NCBhbHRlcm5hdGl2ZXMuICBBcyByZWZlcmVuY2VkIGJ5IFJGQyAzNDU4LCBzZWUgdGhyZWFkCkBAIC0zNSwxMSArMzgsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBzLmVuY29kZSgnYXNjaWknKQogICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RyaW5nIGFyZ3VtZW50IHNob3VsZCBjb250YWluIG9ubHkgQVNDSUkgY2hhcmFjdGVycycpCi0gICAgZWxpZiBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKKyAgICBpZiBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKICAgICAgICAgcmV0dXJuIHMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBieXRlcyBvciBBU0NJSSBzdHJpbmcsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBieXRlcy1saWtlIG9iamVjdCBvciBBU0NJSSAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nLCBub3QgJXIiICUgcy5fX2NsYXNzX18uX19uYW1lX18pIGZyb20gTm9uZQogCiAKICMgQmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHVzZXMgYmluYXNjaWkKQEAgLTU0LDE0ICs1OSw5IEBACiAKICAgICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAjIFN0cmlwIG9mZiB0aGUgdHJhaWxpbmcgbmV3bGluZQogICAgIGVuY29kZWQgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KHMpWzotMV0KICAgICBpZiBhbHRjaGFycyBpcyBub3QgTm9uZToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYWx0Y2hhcnMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFsdGNoYXJzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgYXNzZXJ0IGxlbihhbHRjaGFycykgPT0gMiwgcmVwcihhbHRjaGFycykKICAgICAgICAgcmV0dXJuIGVuY29kZWQudHJhbnNsYXRlKGJ5dGVzLm1ha2V0cmFucyhiJysvJywgYWx0Y2hhcnMpKQogICAgIHJldHVybiBlbmNvZGVkCkBAIC0xMzgsMjEgKzEzOCwxMCBAQAogCiAKICMgQmFzZTMyIGVuY29kaW5nL2RlY29kaW5nIG11c3QgYmUgZG9uZSBpbiBQeXRob24KLV9iMzJhbHBoYWJldCA9IHsKLSAgICAwOiBiJ0EnLCAgOTogYidKJywgMTg6IGInUycsIDI3OiBiJzMnLAotICAgIDE6IGInQicsIDEwOiBiJ0snLCAxOTogYidUJywgMjg6IGInNCcsCi0gICAgMjogYidDJywgMTE6IGInTCcsIDIwOiBiJ1UnLCAyOTogYic1JywKLSAgICAzOiBiJ0QnLCAxMjogYidNJywgMjE6IGInVicsIDMwOiBiJzYnLAotICAgIDQ6IGInRScsIDEzOiBiJ04nLCAyMjogYidXJywgMzE6IGInNycsCi0gICAgNTogYidGJywgMTQ6IGInTycsIDIzOiBiJ1gnLAotICAgIDY6IGInRycsIDE1OiBiJ1AnLCAyNDogYidZJywKLSAgICA3OiBiJ0gnLCAxNjogYidRJywgMjU6IGInWicsCi0gICAgODogYidJJywgMTc6IGInUicsIDI2OiBiJzInLAotICAgIH0KLQotX2IzMnRhYiA9IFt2WzBdIGZvciBrLCB2IGluIHNvcnRlZChfYjMyYWxwaGFiZXQuaXRlbXMoKSldCi1fYjMycmV2ID0gZGljdChbKHZbMF0sIGspIGZvciBrLCB2IGluIF9iMzJhbHBoYWJldC5pdGVtcygpXSkKLQorX2IzMmFscGhhYmV0ID0gYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjIzNDU2NycKK19iMzJ0YWIgPSBbYnl0ZXMoW2ldKSBmb3IgaSBpbiBfYjMyYWxwaGFiZXRdCitfYjMydGFiMiA9IFthICsgYiBmb3IgYSBpbiBfYjMydGFiIGZvciBiIGluIF9iMzJ0YWJdCitfYjMycmV2ID0ge3Y6IGsgZm9yIGssIHYgaW4gZW51bWVyYXRlKF9iMzJhbHBoYWJldCl9CiAKIGRlZiBiMzJlbmNvZGUocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQmFzZTMyLgpAQCAtMTYwLDMxICsxNDksMjEgQEAKICAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICBxdWFudGEsIGxlZnRvdmVyID0gZGl2bW9kKGxlbihzKSwgNSkKKyAgICAgICAgcyA9IG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgbGVmdG92ZXIgPSBsZW4ocykgJSA1CiAgICAgIyBQYWQgdGhlIGxhc3QgcXVhbnR1bSB3aXRoIHplcm8gYml0cyBpZiBuZWNlc3NhcnkKICAgICBpZiBsZWZ0b3ZlcjoKICAgICAgICAgcyA9IHMgKyBieXRlcyg1IC0gbGVmdG92ZXIpICAjIERvbid0IHVzZSArPSAhCi0gICAgICAgIHF1YW50YSArPSAxCiAgICAgZW5jb2RlZCA9IGJ5dGVhcnJheSgpCi0gICAgZm9yIGkgaW4gcmFuZ2UocXVhbnRhKToKLSAgICAgICAgIyBjMSBhbmQgYzIgYXJlIDE2IGJpdHMgd2lkZSwgYzMgaXMgOCBiaXRzIHdpZGUuICBUaGUgaW50ZW50IG9mIHRoaXMKLSAgICAgICAgIyBjb2RlIGlzIHRvIHByb2Nlc3MgdGhlIDQwIGJpdHMgaW4gdW5pdHMgb2YgNSBiaXRzLiAgU28gd2UgdGFrZSB0aGUgMQotICAgICAgICAjIGxlZnRvdmVyIGJpdCBvZiBjMSBhbmQgdGFjayBpdCBvbnRvIGMyLiAgVGhlbiB3ZSB0YWtlIHRoZSAyIGxlZnRvdmVyCi0gICAgICAgICMgYml0cyBvZiBjMiBhbmQgdGFjayB0aGVtIG9udG8gYzMuICBUaGUgc2hpZnRzIGFuZCBtYXNrcyBhcmUgaW50ZW5kZWQKLSAgICAgICAgIyB0byBnaXZlIHVzIHZhbHVlcyBvZiBleGFjdGx5IDUgYml0cyBpbiB3aWR0aC4KLSAgICAgICAgYzEsIGMyLCBjMyA9IHN0cnVjdC51bnBhY2soJyFISEInLCBzW2kqNTooaSsxKSo1XSkKLSAgICAgICAgYzIgKz0gKGMxICYgMSkgPDwgMTYgIyAxNyBiaXRzIHdpZGUKLSAgICAgICAgYzMgKz0gKGMyICYgMykgPDwgOCAgIyAxMCBiaXRzIHdpZGUKLSAgICAgICAgZW5jb2RlZCArPSBieXRlcyhbX2IzMnRhYltjMSA+PiAxMV0sICAgICAgICAgIyBiaXRzIDEgLSA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMxID4+IDYpICYgMHgxZl0sICMgYml0cyA2IC0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzEgPj4gMSkgJiAweDFmXSwgIyBiaXRzIDExIC0gMTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMiA+PiAxMl0sICAgICAgICAgIyBiaXRzIDE2IC0gMjAgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiA3KSAmIDB4MWZdLCAjIGJpdHMgMjEgLSAyNSAoNiAtIDEwKQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiAyKSAmIDB4MWZdLCAjIGJpdHMgMjYgLSAzMCAoMTEgLSAxNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMyA+PiA1XSwgICAgICAgICAgIyBiaXRzIDMxIC0gMzUgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MzICYgMHgxZl0sICAgICAgICAjIGJpdHMgMzYgLSA0MCAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgZnJvbV9ieXRlcyA9IGludC5mcm9tX2J5dGVzCisgICAgYjMydGFiMiA9IF9iMzJ0YWIyCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCA1KToKKyAgICAgICAgYyA9IGZyb21fYnl0ZXMoc1tpOiBpICsgNV0sICdiaWcnKQorICAgICAgICBlbmNvZGVkICs9IChiMzJ0YWIyW2MgPj4gMzBdICsgICAgICAgICAgICMgYml0cyAxIC0gMTAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMlsoYyA+PiAyMCkgJiAweDNmZl0gKyAjIGJpdHMgMTEgLSAyMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyWyhjID4+IDEwKSAmIDB4M2ZmXSArICMgYml0cyAyMSAtIDMwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbYyAmIDB4M2ZmXSAgICAgICAgICAgIyBiaXRzIDMxIC0gNDAKKyAgICAgICAgICAgICAgICAgICApCiAgICAgIyBBZGp1c3QgZm9yIGFueSBsZWZ0b3ZlciBwYXJ0aWFsIHF1YW50YQogICAgIGlmIGxlZnRvdmVyID09IDE6CiAgICAgICAgIGVuY29kZWRbLTY6XSA9IGInPT09PT09JwpAQCAtMTk2LDcgKzE3NSw2IEBACiAgICAgICAgIGVuY29kZWRbLTE6XSA9IGInPScKICAgICByZXR1cm4gYnl0ZXMoZW5jb2RlZCkKIAotCiBkZWYgYjMyZGVjb2RlKHMsIGNhc2Vmb2xkPUZhbHNlLCBtYXAwMT1Ob25lKToKICAgICAiIiJEZWNvZGUgYSBCYXNlMzIgZW5jb2RlZCBieXRlIHN0cmluZy4KIApAQCAtMjE3LDggKzE5NSw3IEBACiAgICAgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dC4KICAgICAiIiIKICAgICBzID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEocykKLSAgICBxdWFudGEsIGxlZnRvdmVyID0gZGl2bW9kKGxlbihzKSwgOCkKLSAgICBpZiBsZWZ0b3ZlcjoKKyAgICBpZiBsZW4ocykgJSA4OgogICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQogICAgICMgSGFuZGxlIHNlY3Rpb24gMi40IHplcm8gYW5kIG9uZSBtYXBwaW5nLiAgVGhlIGZsYWcgbWFwMDEgd2lsbCBiZSBlaXRoZXIKICAgICAjIEZhbHNlLCBvciB0aGUgY2hhcmFjdGVyIHRvIG1hcCB0aGUgZGlnaXQgMSAob25lKSB0by4gIEl0IHNob3VsZCBiZQpAQCAtMjMyLDQyICsyMDksMzYgQEAKICAgICAjIFN0cmlwIG9mZiBwYWQgY2hhcmFjdGVycyBmcm9tIHRoZSByaWdodC4gIFdlIG5lZWQgdG8gY291bnQgdGhlIHBhZAogICAgICMgY2hhcmFjdGVycyBiZWNhdXNlIHRoaXMgd2lsbCB0ZWxsIHVzIGhvdyBtYW55IG51bGwgYnl0ZXMgdG8gcmVtb3ZlIGZyb20KICAgICAjIHRoZSBlbmQgb2YgdGhlIGRlY29kZWQgc3RyaW5nLgotICAgIHBhZGNoYXJzID0gMAotICAgIG1vID0gcmUuc2VhcmNoKGInKD9QPHBhZD5bPV0qKSQnLCBzKQotICAgIGlmIG1vOgotICAgICAgICBwYWRjaGFycyA9IGxlbihtby5ncm91cCgncGFkJykpCi0gICAgICAgIGlmIHBhZGNoYXJzID4gMDoKLSAgICAgICAgICAgIHMgPSBzWzotcGFkY2hhcnNdCisgICAgbCA9IGxlbihzKQorICAgIHMgPSBzLnJzdHJpcChiJz0nKQorICAgIHBhZGNoYXJzID0gbCAtIGxlbihzKQogICAgICMgTm93IGRlY29kZSB0aGUgZnVsbCBxdWFudGEKLSAgICBwYXJ0cyA9IFtdCi0gICAgYWNjID0gMAotICAgIHNoaWZ0ID0gMzUKLSAgICBmb3IgYyBpbiBzOgotICAgICAgICB2YWwgPSBfYjMycmV2LmdldChjKQotICAgICAgICBpZiB2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTMyIGRpZ2l0IGZvdW5kJykKLSAgICAgICAgYWNjICs9IF9iMzJyZXZbY10gPDwgc2hpZnQKLSAgICAgICAgc2hpZnQgLT0gNQotICAgICAgICBpZiBzaGlmdCA8IDA6Ci0gICAgICAgICAgICBwYXJ0cy5hcHBlbmQoYmluYXNjaWkudW5oZXhsaWZ5KGJ5dGVzKCclMDEweCcgJSBhY2MsICJhc2NpaSIpKSkKLSAgICAgICAgICAgIGFjYyA9IDAKLSAgICAgICAgICAgIHNoaWZ0ID0gMzUKKyAgICBkZWNvZGVkID0gYnl0ZWFycmF5KCkKKyAgICBiMzJyZXYgPSBfYjMycmV2CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCA4KToKKyAgICAgICAgcXVhbnRhID0gc1tpOiBpICsgOF0KKyAgICAgICAgYWNjID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgYyBpbiBxdWFudGE6CisgICAgICAgICAgICAgICAgYWNjID0gKGFjYyA8PCA1KSArIGIzMnJldltjXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UzMiBkaWdpdCBmb3VuZCcpIGZyb20gTm9uZQorICAgICAgICBkZWNvZGVkICs9IGFjYy50b19ieXRlcyg1LCAnYmlnJykKICAgICAjIFByb2Nlc3MgdGhlIGxhc3QsIHBhcnRpYWwgcXVhbnRhCi0gICAgbGFzdCA9IGJpbmFzY2lpLnVuaGV4bGlmeShieXRlcygnJTAxMHgnICUgYWNjLCAiYXNjaWkiKSkKLSAgICBpZiBwYWRjaGFycyA9PSAwOgotICAgICAgICBsYXN0ID0gYicnICAgICAgICAgICAgICAgICAgICAgICMgTm8gY2hhcmFjdGVycwotICAgIGVsaWYgcGFkY2hhcnMgPT0gMToKLSAgICAgICAgbGFzdCA9IGxhc3RbOi0xXQotICAgIGVsaWYgcGFkY2hhcnMgPT0gMzoKLSAgICAgICAgbGFzdCA9IGxhc3RbOi0yXQotICAgIGVsaWYgcGFkY2hhcnMgPT0gNDoKLSAgICAgICAgbGFzdCA9IGxhc3RbOi0zXQotICAgIGVsaWYgcGFkY2hhcnMgPT0gNjoKLSAgICAgICAgbGFzdCA9IGxhc3RbOi00XQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCi0gICAgcGFydHMuYXBwZW5kKGxhc3QpCi0gICAgcmV0dXJuIGInJy5qb2luKHBhcnRzKQorICAgIGlmIHBhZGNoYXJzOgorICAgICAgICBhY2MgPDw9IDUgKiBwYWRjaGFycworICAgICAgICBsYXN0ID0gYWNjLnRvX2J5dGVzKDUsICdiaWcnKQorICAgICAgICBpZiBwYWRjaGFycyA9PSAxOgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTFdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gMzoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0yXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDQ6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotM10KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSA2OgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignSW5jb3JyZWN0IHBhZGRpbmcnKQorICAgIHJldHVybiBieXRlcyhkZWNvZGVkKQogCiAKIApAQCAtMjc5LDggKzI1MCw2IEBACiAKICAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuICBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KICAgICAiIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICByZXR1cm4gYmluYXNjaWkuaGV4bGlmeShzKS51cHBlcigpCiAKIApAQCAtMzAyLDcgKzI3MSwxOTMgQEAKICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMTYgZGlnaXQgZm91bmQnKQogICAgIHJldHVybiBiaW5hc2NpaS51bmhleGxpZnkocykKIAorIworIyBBc2NpaTg1IGVuY29kaW5nL2RlY29kaW5nCisjCiAKK2RlZiBfODVlbmNvZGUoYiwgY2hhcnMsIGNoYXJzMiwgcGFkPUZhbHNlLCBmb2xkbnVscz1GYWxzZSwgZm9sZHNwYWNlcz1GYWxzZSk6CisgICAgIyBIZWxwZXIgZnVuY3Rpb24gZm9yIGE4NWVuY29kZSBhbmQgYjg1ZW5jb2RlCisgICAgaWYgbm90IGlzaW5zdGFuY2UoYiwgYnl0ZXNfdHlwZXMpOgorICAgICAgICBiID0gbWVtb3J5dmlldyhiKS50b2J5dGVzKCkKKworICAgIHBhZGRpbmcgPSAoLWxlbihiKSkgJSA0CisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgYiA9IGIgKyBiJ1wwJyAqIHBhZGRpbmcKKyAgICB3b3JkcyA9IHN0cnVjdC5TdHJ1Y3QoJyElZEknICUgKGxlbihiKSAvLyA0KSkudW5wYWNrKGIpCisKKyAgICBhODVjaGFyczIgPSBfYTg1Y2hhcnMyCisgICAgYTg1Y2hhcnMgPSBfYTg1Y2hhcnMKKyAgICBjaHVua3MgPSBbYid6JyBpZiBmb2xkbnVscyBhbmQgbm90IHdvcmQgZWxzZQorICAgICAgICAgICAgICBiJ3knIGlmIGZvbGRzcGFjZXMgYW5kIHdvcmQgPT0gMHgyMDIwMjAyMCBlbHNlCisgICAgICAgICAgICAgIChjaGFyczJbd29yZCAvLyA2MTQxMjVdICsKKyAgICAgICAgICAgICAgIGNoYXJzMlt3b3JkIC8vIDg1ICUgNzIyNV0gKworICAgICAgICAgICAgICAgY2hhcnNbd29yZCAlIDg1XSkKKyAgICAgICAgICAgICAgZm9yIHdvcmQgaW4gd29yZHNdCisKKyAgICBpZiBwYWRkaW5nIGFuZCBub3QgcGFkOgorICAgICAgICBpZiBjaHVua3NbLTFdID09IGIneic6CisgICAgICAgICAgICBjaHVua3NbLTFdID0gY2hhcnNbMF0gKiA1CisgICAgICAgIGNodW5rc1stMV0gPSBjaHVua3NbLTFdWzotcGFkZGluZ10KKworICAgIHJldHVybiBiJycuam9pbihjaHVua3MpCisKK19BODVTVEFSVCA9IGIiPH4iCitfQTg1RU5EID0gYiJ+PiIKK19hODVjaGFycyA9IFtieXRlcyhbaV0pIGZvciBpIGluIHJhbmdlKDMzLCAxMTgpXQorX2E4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9hODVjaGFycyBmb3IgYiBpbiBfYTg1Y2hhcnNdCisKK2RlZiBhODVlbmNvZGUoYiwgKiwgZm9sZHNwYWNlcz1GYWxzZSwgd3JhcGNvbD0wLCBwYWQ9RmFsc2UsIGFkb2JlPUZhbHNlKToKKyAgICAiIiJFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBBc2NpaTg1LgorCisgICAgYiBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiBUaGUgZW5jb2RlZCBieXRlIHN0cmluZyBpcyByZXR1cm5lZC4KKworICAgIGZvbGRzcGFjZXMgaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IHVzZXMgdGhlIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2UgJ3knCisgICAgaW5zdGVhZCBvZiA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkgYXMgc3VwcG9ydGVkIGJ5ICdidG9hJy4gVGhpcworICAgIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBZG9iZSBlbmNvZGluZy4KKworICAgIHdyYXBjb2wgY29udHJvbHMgd2hldGhlciB0aGUgb3V0cHV0IHNob3VsZCBoYXZlIG5ld2xpbmUgKCdcbicpIGNoYXJhY3RlcnMKKyAgICBhZGRlZCB0byBpdC4gSWYgdGhpcyBpcyBub24temVybywgZWFjaCBvdXRwdXQgbGluZSB3aWxsIGJlIGF0IG1vc3QgdGhpcworICAgIG1hbnkgY2hhcmFjdGVycyBsb25nLgorCisgICAgcGFkIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHN0cmluZyBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0IGJlZm9yZQorICAgIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhlIGJ0b2EgaW1wbGVtZW50YXRpb24gYWx3YXlzIHBhZHMuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+LAorICAgIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFkb2JlIGltcGxlbWVudGF0aW9uLgorICAgICIiIgorICAgIHJlc3VsdCA9IF84NWVuY29kZShiLCBfYTg1Y2hhcnMsIF9hODVjaGFyczIsIHBhZCwgVHJ1ZSwgZm9sZHNwYWNlcykKKworICAgIGlmIGFkb2JlOgorICAgICAgICByZXN1bHQgPSBfQTg1U1RBUlQgKyByZXN1bHQKKyAgICBpZiB3cmFwY29sOgorICAgICAgICB3cmFwY29sID0gbWF4KDIgaWYgYWRvYmUgZWxzZSAxLCB3cmFwY29sKQorICAgICAgICBjaHVua3MgPSBbcmVzdWx0W2k6IGkgKyB3cmFwY29sXQorICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHJlc3VsdCksIHdyYXBjb2wpXQorICAgICAgICBpZiBhZG9iZToKKyAgICAgICAgICAgIGlmIGxlbihjaHVua3NbLTFdKSArIDIgPiB3cmFwY29sOgorICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQoYicnKQorICAgICAgICByZXN1bHQgPSBiJ1xuJy5qb2luKGNodW5rcykKKyAgICBpZiBhZG9iZToKKyAgICAgICAgcmVzdWx0ICs9IF9BODVFTkQKKworICAgIHJldHVybiByZXN1bHQKKworZGVmIGE4NWRlY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YicgXHRcblxyXHYnKToKKyAgICAiIiJEZWNvZGUgYW4gQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc3RyaW5nLgorCisgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZGVjb2RlLgorCisgICAgZm9sZHNwYWNlcyBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlIHNob3VsZCBiZQorICAgIGFjY2VwdGVkIGFzIHNob3J0aGFuZCBmb3IgNCBjb25zZWN1dGl2ZSBzcGFjZXMgKEFTQ0lJIDB4MjApLiBUaGlzIGZlYXR1cmUgaXMKKyAgICBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFkb2JlIGVuY29kaW5nLgorCisgICAgYWRvYmUgY29udHJvbHMgd2hldGhlciB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgaW4gQWRvYmUgQXNjaWk4NSBmb3JtYXQgKGkuZS4KKyAgICBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAgaWdub3JlY2hhcnMgc2hvdWxkIGJlIGEgYnl0ZSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIGlnbm9yZSBmcm9tIHRoZQorICAgIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkgZGVmYXVsdAorICAgIGNvbnRhaW5zIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gQVNDSUkuCisgICAgIiIiCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgaWYgYWRvYmU6CisgICAgICAgIGlmIG5vdCAoYi5zdGFydHN3aXRoKF9BODVTVEFSVCkgYW5kIGIuZW5kc3dpdGgoX0E4NUVORCkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQXNjaWk4NSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2VzIG11c3QgYmUgYnJhY2tldGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IHt9IGFuZCB7fSIuZm9ybWF0KF9BODVTVEFSVCwgX0E4NUVORCkpCisgICAgICAgIGIgPSBiWzI6LTJdICMgU3RyaXAgb2ZmIHN0YXJ0L2VuZCBtYXJrZXJzCisgICAgIworICAgICMgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoaXMgc3RlcHdpc2UsIHNvIGFzIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGhhbmRsZQorICAgICMgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZXMKKyAgICAjCisgICAgcGFja0kgPSBzdHJ1Y3QuU3RydWN0KCchSScpLnBhY2sKKyAgICBkZWNvZGVkID0gW10KKyAgICBkZWNvZGVkX2FwcGVuZCA9IGRlY29kZWQuYXBwZW5kCisgICAgY3VyciA9IFtdCisgICAgY3Vycl9hcHBlbmQgPSBjdXJyLmFwcGVuZAorICAgIGN1cnJfY2xlYXIgPSBjdXJyLmNsZWFyCisgICAgZm9yIHggaW4gYiArIGIndScgKiA0OgorICAgICAgICBpZiBiJyEnWzBdIDw9IHggPD0gYid1J1swXToKKyAgICAgICAgICAgIGN1cnJfYXBwZW5kKHgpCisgICAgICAgICAgICBpZiBsZW4oY3VycikgPT0gNToKKyAgICAgICAgICAgICAgICBhY2MgPSAwCisgICAgICAgICAgICAgICAgZm9yIHggaW4gY3VycjoKKyAgICAgICAgICAgICAgICAgICAgYWNjID0gODUgKiBhY2MgKyAoeCAtIDMzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBc2NpaTg1IG92ZXJmbG93JykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgY3Vycl9jbGVhcigpCisgICAgICAgIGVsaWYgeCA9PSBiJ3onWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd6IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidcMFwwXDBcMCcpCisgICAgICAgIGVsaWYgZm9sZHNwYWNlcyBhbmQgeCA9PSBiJ3knWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidceDIwXHgyMFx4MjBceDIwJykKKyAgICAgICAgZWxpZiB4IGluIGlnbm9yZWNoYXJzOgorICAgICAgICAgICAgIyBTa2lwIHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb24tQXNjaWk4NSBkaWdpdCBmb3VuZDogJWMnICUgeCkKKworICAgIHJlc3VsdCA9IGInJy5qb2luKGRlY29kZWQpCisgICAgcGFkZGluZyA9IDQgLSBsZW4oY3VycikKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICAjIFRocm93IGF3YXkgdGhlIGV4dHJhIHBhZGRpbmcKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG9yaWdpbmFsbHkgdGFrZW4gKHdpdGggcGVybWlzc2lvbikgZnJvbSBNZXJjdXJpYWwKKworX2I4NWNoYXJzID0gYiIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIFwKKyAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXohIyQlJigpKistOzw9Pj9AXl9ge3x9fiIKK19iODVjaGFycyA9IFtieXRlcyhbaV0pIGZvciBpIGluIF9iODVjaGFyc10KK19iODVjaGFyczIgPSBbKGEgKyBiKSBmb3IgYSBpbiBfYjg1Y2hhcnMgZm9yIGIgaW4gX2I4NWNoYXJzXQorX2I4NWRlYyA9IE5vbmUKKworZGVmIGI4NWVuY29kZShiLCBwYWQ9RmFsc2UpOgorICAgICIiIkVuY29kZSBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgYXJyYXkgaW4gYmFzZTg1IGZvcm1hdC4KKworICAgIElmIHBhZCBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggIlwwIiBzbyBpdHMgbGVuZ3RoIGlzIGEgbXVsdGlwbGUgb2YKKyAgICA0IGNoYXJhY3RlcnMgYmVmb3JlIGVuY29kaW5nLgorICAgICIiIgorICAgIHJldHVybiBfODVlbmNvZGUoYiwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyLCBwYWQpCisKK2RlZiBiODVkZWNvZGUoYik6CisgICAgIiIiRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgYXJyYXkiIiIKKyAgICBiID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEoYikKKyAgICBnbG9iYWwgX2I4NWRlYworICAgIGlmIF9iODVkZWMgaXMgTm9uZToKKyAgICAgICAgX2I4NWRlYyA9IFtOb25lXSAqIDI1NgorICAgICAgICBmb3IgaSwgYyBpbiBlbnVtZXJhdGUoX2I4NWNoYXJzKToKKyAgICAgICAgICAgIF9iODVkZWNbY1swXV0gPSBpCisKKyAgICBwYWRkaW5nID0gKC1sZW4oYikpICUgNQorICAgIGIgPSBiICsgYid+JyAqIHBhZGRpbmcKKyAgICBvdXQgPSBbXQorICAgIHBhY2tJID0gc3RydWN0LlN0cnVjdCgnIUknKS5wYWNrCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGIpLCA1KToKKyAgICAgICAgY2h1bmsgPSBiW2k6aSArIDVdCisgICAgICAgIGFjYyA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGMgaW4gY2h1bms6CisgICAgICAgICAgICAgICAgYWNjID0gYWNjICogODUgKyBfYjg1ZGVjW2NdCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBmb3IgaiwgYyBpbiBlbnVtZXJhdGUoY2h1bmspOgorICAgICAgICAgICAgICAgIGlmIF9iODVkZWNbY10gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFkIGJhc2U4NSBjaGFyYWN0ZXIgYXQgcG9zaXRpb24gJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChpICsgaikpIGZyb20gTm9uZQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0LmFwcGVuZChwYWNrSShhY2MpKQorICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFzZTg1IG92ZXJmbG93IGluIGh1bmsgc3RhcnRpbmcgYXQgYnl0ZSAlZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpKSBmcm9tIE5vbmUKKworICAgIHJlc3VsdCA9IGInJy5qb2luKG91dCkKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICByZXN1bHQgPSByZXN1bHRbOi1wYWRkaW5nXQorICAgIHJldHVybiByZXN1bHQKIAogIyBMZWdhY3kgaW50ZXJmYWNlLiAgVGhpcyBjb2RlIGNvdWxkIGJlIGNsZWFuZWQgdXAgc2luY2UgSSBkb24ndCBiZWxpZXZlCiAjIGJpbmFzY2lpIGhhcyBhbnkgbGluZSBsZW5ndGggbGltaXRhdGlvbnMuICBJdCBqdXN0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBpdApAQCAtMzM1LDEyICs0OTAsMjYgQEAKICAgICAgICAgcyA9IGJpbmFzY2lpLmEyYl9iYXNlNjQobGluZSkKICAgICAgICAgb3V0cHV0LndyaXRlKHMpCiAKK2RlZiBfaW5wdXRfdHlwZV9jaGVjayhzKToKKyAgICB0cnk6CisgICAgICAgIG0gPSBtZW1vcnl2aWV3KHMpCisgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlcnI6CisgICAgICAgIG1zZyA9ICJleHBlY3RlZCBieXRlcy1saWtlIG9iamVjdCwgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpIGZyb20gZXJyCisgICAgaWYgbS5mb3JtYXQgbm90IGluICgnYycsICdiJywgJ0InKToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCBzaW5nbGUgYnl0ZSBlbGVtZW50cywgbm90ICVyIGZyb20gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtLmZvcm1hdCwgcy5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIGlmIG0ubmRpbSAhPSAxOgorICAgICAgICBtc2cgPSAoImV4cGVjdGVkIDEtRCBkYXRhLCBub3QgJWQtRCBkYXRhIGZyb20gJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtLm5kaW0sIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKwogCiBkZWYgZW5jb2RlYnl0ZXMocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZXN0cmluZyBpbnRvIGEgYnl0ZXN0cmluZyBjb250YWluaW5nIG11bHRpcGxlIGxpbmVzCiAgICAgb2YgYmFzZS02NCBkYXRhLiIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQorICAgIF9pbnB1dF90eXBlX2NoZWNrKHMpCiAgICAgcGllY2VzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIE1BWEJJTlNJWkUpOgogICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBNQVhCSU5TSVpFXQpAQCAtMzU3LDggKzUyNiw3IEBACiAKIGRlZiBkZWNvZGVieXRlcyhzKToKICAgICAiIiJEZWNvZGUgYSBieXRlc3RyaW5nIG9mIGJhc2UtNjQgZGF0YSBpbnRvIGEgYnl0ZXN0cmluZy4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMpCiAKIGRlZiBkZWNvZGVzdHJpbmcocyk6CmRpZmYgLS1naXQgYS9MaWIvYmRiLnB5IGIvTGliL2JkYi5weQppbmRleCBkZDFmNDI4Li42N2EwODQ2IDEwMDY0NAotLS0gYS9MaWIvYmRiLnB5CisrKyBiL0xpYi9iZGIucHkKQEAgLTMsNiArMyw3IEBACiBpbXBvcnQgZm5tYXRjaAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCitmcm9tIGluc3BlY3QgaW1wb3J0IENPX0dFTkVSQVRPUgogCiBfX2FsbF9fID0gWyJCZGJRdWl0IiwgIkJkYiIsICJCcmVha3BvaW50Il0KIApAQCAtNzUsMjQgKzc2LDQ4IEBACiAgICAgICAgIGlmIG5vdCAoc2VsZi5zdG9wX2hlcmUoZnJhbWUpIG9yIHNlbGYuYnJlYWtfYW55d2hlcmUoZnJhbWUpKToKICAgICAgICAgICAgICMgTm8gbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uCiAgICAgICAgICAgICByZXR1cm4gIyBOb25lCisgICAgICAgICMgSWdub3JlIGNhbGwgZXZlbnRzIGluIGdlbmVyYXRvciBleGNlcHQgd2hlbiBzdGVwcGluZy4KKyAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgIHNlbGYudXNlcl9jYWxsKGZyYW1lLCBhcmcpCiAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9yZXR1cm4oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBmcmFtZSA9PSBzZWxmLnJldHVybmZyYW1lOgorICAgICAgICAgICAgIyBJZ25vcmUgcmV0dXJuIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgICAgICBpZiBzZWxmLnN0b3BmcmFtZSBhbmQgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZV9yZXR1cm5pbmcgPSBmcmFtZQogICAgICAgICAgICAgICAgIHNlbGYudXNlcl9yZXR1cm4oZnJhbWUsIGFyZykKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcmFtZV9yZXR1cm5pbmcgPSBOb25lCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisgICAgICAgICAgICAjIFRoZSB1c2VyIGlzc3VlZCBhICduZXh0JyBvciAndW50aWwnIGNvbW1hbmQuCisgICAgICAgICAgICBpZiBzZWxmLnN0b3BmcmFtZSBpcyBmcmFtZSBhbmQgc2VsZi5zdG9wbGluZW5vICE9IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhOb25lLCBOb25lKQogICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogCiAgICAgZGVmIGRpc3BhdGNoX2V4Y2VwdGlvbihzZWxmLCBmcmFtZSwgYXJnKToKICAgICAgICAgaWYgc2VsZi5zdG9wX2hlcmUoZnJhbWUpOgorICAgICAgICAgICAgIyBXaGVuIHN0ZXBwaW5nIHdpdGggbmV4dC91bnRpbC9yZXR1cm4gaW4gYSBnZW5lcmF0b3IgZnJhbWUsIHNraXAKKyAgICAgICAgICAgICMgdGhlIGludGVybmFsIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uICh3aXRoIG5vIHRyYWNlYmFjaykKKyAgICAgICAgICAgICMgdHJpZ2dlcmVkIGJ5IGEgc3ViaXRlcmF0b3IgcnVuIHdpdGggdGhlICd5aWVsZCBmcm9tJyBzdGF0ZW1lbnQuCisgICAgICAgICAgICBpZiBub3QgKGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUgorICAgICAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGlzIFN0b3BJdGVyYXRpb24gYW5kIGFyZ1syXSBpcyBOb25lKToKKyAgICAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAjIFN0b3AgYXQgdGhlIFN0b3BJdGVyYXRpb24gb3IgR2VuZXJhdG9yRXhpdCBleGNlcHRpb24gd2hlbiB0aGUgdXNlcgorICAgICAgICAjIGhhcyBzZXQgc3RvcGZyYW1lIGluIGEgZ2VuZXJhdG9yIGJ5IGlzc3VpbmcgYSByZXR1cm4gY29tbWFuZCwgb3IgYQorICAgICAgICAjIG5leHQvdW50aWwgY29tbWFuZCBhdCB0aGUgbGFzdCBzdGF0ZW1lbnQgaW4gdGhlIGdlbmVyYXRvciBiZWZvcmUgdGhlCisgICAgICAgICMgZXhjZXB0aW9uLgorICAgICAgICBlbGlmIChzZWxmLnN0b3BmcmFtZSBhbmQgZnJhbWUgaXMgbm90IHNlbGYuc3RvcGZyYW1lCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc3RvcGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUgorICAgICAgICAgICAgICAgIGFuZCBhcmdbMF0gaW4gKFN0b3BJdGVyYXRpb24sIEdlbmVyYXRvckV4aXQpKToKICAgICAgICAgICAgIHNlbGYudXNlcl9leGNlcHRpb24oZnJhbWUsIGFyZykKICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKwogICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogCiAgICAgIyBOb3JtYWxseSBkZXJpdmVkIGNsYXNzZXMgZG9uJ3Qgb3ZlcnJpZGUgdGhlIGZvbGxvd2luZwpAQCAtMTE1LDEwICsxNDAsOCBAQAogICAgICAgICAgICAgaWYgc2VsZi5zdG9wbGluZW5vID09IC0xOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIGZyYW1lLmZfbGluZW5vID49IHNlbGYuc3RvcGxpbmVubwotICAgICAgICB3aGlsZSBmcmFtZSBpcyBub3QgTm9uZSBhbmQgZnJhbWUgaXMgbm90IHNlbGYuc3RvcGZyYW1lOgotICAgICAgICAgICAgaWYgZnJhbWUgaXMgc2VsZi5ib3RmcmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgaWYgbm90IHNlbGYuc3RvcGZyYW1lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgYnJlYWtfaGVyZShzZWxmLCBmcmFtZSk6CkBAIC0yMDcsNyArMjMwLDEwIEBACiAKICAgICBkZWYgc2V0X3JldHVybihzZWxmLCBmcmFtZSk6CiAgICAgICAgICIiIlN0b3Agd2hlbiByZXR1cm5pbmcgZnJvbSB0aGUgZ2l2ZW4gZnJhbWUuIiIiCi0gICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQorICAgICAgICBpZiBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUsIE5vbmUsIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLmZfYmFjaywgZnJhbWUpCiAKICAgICBkZWYgc2V0X3RyYWNlKHNlbGYsIGZyYW1lPU5vbmUpOgogICAgICAgICAiIiJTdGFydCBkZWJ1Z2dpbmcgZnJvbSBgZnJhbWVgLgpkaWZmIC0tZ2l0IGEvTGliL2J6Mi5weSBiL0xpYi9iejIucHkKaW5kZXggMWRlOGYzYy4uNmY0N2JmYSAxMDA2NDQKLS0tIGEvTGliL2J6Mi5weQorKysgYi9MaWIvYnoyLnB5CkBAIC05LDcgKzksNiBAQAogCiBfX2F1dGhvcl9fID0gIk5hZGVlbSBWYXdkYSA8bmFkZWVtLnZhd2RhQGdtYWlsLmNvbT4iCiAKLWltcG9ydCBidWlsdGlucwogaW1wb3J0IGlvCiBpbXBvcnQgd2FybmluZ3MKIApAQCAtMjgsNiArMjcsOCBAQAogCiBfQlVGRkVSX1NJWkUgPSA4MTkyCiAKK19idWlsdGluX29wZW4gPSBvcGVuCisKIAogY2xhc3MgQloyRmlsZShpby5CdWZmZXJlZElPQmFzZSk6CiAKQEAgLTQzLDE2ICs0NCwxNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpOgogICAgICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlLgogCi0gICAgICAgIElmIGZpbGVuYW1lIGlzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgaXMgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8KLSAgICAgICAgYmUgb3BlbmVkLiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGZpbGUgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KLSAgICAgICAgcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGl0IGdpdmVzIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAotICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsIG9yICdhJyBmb3IKLSAgICAgICAgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsIGFuZCAnYWInLgorICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICd4JyBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICdhJyBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsICd4YicsIGFuZCAnYWInLgogCiAgICAgICAgIGJ1ZmZlcmluZyBpcyBpZ25vcmVkLiBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuCiAKLSAgICAgICAgSWYgbW9kZSBpcyAndycgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKKyAgICAgICAgSWYgbW9kZSBpcyAndycsICd4JyBvciAnYScsIGNvbXByZXNzbGV2ZWwgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMQogICAgICAgICBhbmQgOSBzcGVjaWZ5aW5nIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbjogMSBwcm9kdWNlcyB0aGUgbGVhc3QKICAgICAgICAgY29tcHJlc3Npb24sIGFuZCA5IChkZWZhdWx0KSBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4KIApAQCAtODUsMTUgKzg3LDE5IEBACiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCisgICAgICAgIGVsaWYgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIG1vZGUgPSAieGIiCisgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxpZiBtb2RlIGluICgiYSIsICJhYiIpOgogICAgICAgICAgICAgbW9kZSA9ICJhYiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiB7IXJ9Ii5mb3JtYXQobW9kZSkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6ICVyIiAlIChtb2RlLCkpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgIHNlbGYuX2ZwID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gX2J1aWx0aW5fb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9tb2RlID0gbW9kZV9jb2RlCiAgICAgICAgIGVsaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKSBvciBoYXNhdHRyKGZpbGVuYW1lLCAid3JpdGUiKToKQEAgLTE4OSwxNSArMTk1LDE3IEBACiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICAgICAjIEVuZC1vZi1zdHJlYW0gbWFya2VyIGFuZCBlbmQgb2YgZmlsZS4gV2UncmUgZ29vZC4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9ibGVtIC0gd2Ugd2VyZSBleHBlY3RpbmcgbW9yZSBjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCiAKLSAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQpAQCAtNDE5LDcgKzQyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYWxsKHJldHVybl9kYXRhPUZhbHNlKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX3NpemUgKyBvZmZzZXQKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiB7fSIuZm9ybWF0KHdoZW5jZSkpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiAlcyIgJSAod2hlbmNlLCkpCiAKICAgICAgICAgICAgICMgTWFrZSBpdCBzbyB0aGF0IG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZm9yd2FyZC4KICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKQEAgLTQ0MywyMCArNDUxLDIwIEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKLSAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGNhbiBiZSBhbiBhY3R1YWwgZmlsZW5hbWUgKGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAiYSIgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsCi0gICAgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IG1vZGUgaXMgInJiIiwgYW5kIHRoZQotICAgIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgIngiLCAieGIiLCAiYSIgb3IKKyAgICAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUgY29uc3RydWN0b3I6Ci0gICAgQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKLSAgICBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUKKyAgICBjb25zdHJ1Y3RvcjogQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwKKyAgICB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIEJaMkZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CmRpZmYgLS1naXQgYS9MaWIvY1Byb2ZpbGUucHkgYi9MaWIvY1Byb2ZpbGUucHkKaW5kZXggYzI0ZDQ1Yi4uMTE4NDM4NSAxMDA3NTUKLS0tIGEvTGliL2NQcm9maWxlLnB5CisrKyBiL0xpYi9jUHJvZmlsZS5weQpAQCAtNyw1NCArNywyMCBAQAogX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJQcm9maWxlIl0KIAogaW1wb3J0IF9sc3Byb2YKK2ltcG9ydCBwcm9maWxlIGFzIF9weXByb2ZpbGUKIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICMgU2ltcGxlIGludGVyZmFjZQogCiBkZWYgcnVuKHN0YXRlbWVudCwgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6Ci0gICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUKLSAgICAiZXhlYyIgc3RhdGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgZmlsZSBuYW1lLiAgSW4gYWxsIGNhc2VzIHRoaXMKLSAgICByb3V0aW5lIGF0dGVtcHRzIHRvICJleGVjIiBpdHMgZmlyc3QgYXJndW1lbnQgYW5kIGdhdGhlciBwcm9maWxpbmcKLSAgICBzdGF0aXN0aWNzIGZyb20gdGhlIGV4ZWN1dGlvbi4gSWYgbm8gZmlsZSBuYW1lIGlzIHByZXNlbnQsIHRoZW4gdGhpcwotICAgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcHJpbnRzIGEgc2ltcGxlIHByb2ZpbGluZyByZXBvcnQsIHNvcnRlZCBieSB0aGUKLSAgICBzdGFuZGFyZCBuYW1lIHN0cmluZyAoZmlsZS9saW5lL2Z1bmN0aW9uLW5hbWUpIHRoYXQgaXMgcHJlc2VudGVkIGluCi0gICAgZWFjaCBsaW5lLgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKLSAgICByZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLAotICAgIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUuCisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzb3J0KQogCi0gICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKK3J1bi5fX2RvY19fID0gX3B5cHJvZmlsZS5ydW4uX19kb2NfXworcnVuY3R4Ll9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bmN0eC5fX2RvY19fCiAKICMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAKQEAgLTc3LDEwICs0Myw5IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKICAgICAgICAgaW1wb3J0IG1hcnNoYWwKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLmRpc2FibGUoKQpkaWZmIC0tZ2l0IGEvTGliL2NnaS5weSBiL0xpYi9jZ2kucHkKaW5kZXggMDZlMDNiNS4uMWQ4MDQwYyAxMDA3NTUKLS0tIGEvTGliL2NnaS5weQorKysgYi9MaWIvY2dpLnB5CkBAIC04MCw3ICs4MCw3IEBACiAgICAgaWYgbG9nZmlsZSBhbmQgbm90IGxvZ2ZwOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsb2dmcCA9IG9wZW4obG9nZmlsZSwgImEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgaWYgbm90IGxvZ2ZwOgogICAgICAgICBsb2cgPSBub2xvZwpAQCAtNTUyLDYgKzU1MiwxMiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5yZWFkX3NpbmdsZSgpCiAKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwcmludGFibGUgcmVwcmVzZW50YXRpb24uIiIiCiAgICAgICAgIHJldHVybiAiRmllbGRTdG9yYWdlKCVyLCAlciwgJXIpIiAlICgKQEAgLTY3MCw3ICs2NzYsNiBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcsIGVycm9ycz1zZWxmLmVycm9ycykKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHF1ZXJ5OgogICAgICAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQoTWluaUZpZWxkU3RvcmFnZShrZXksIHZhbHVlKSkKLSAgICAgICAgICAgIEZpZWxkU3RvcmFnZUNsYXNzID0gTm9uZQogCiAgICAgICAgIGtsYXNzID0gc2VsZi5GaWVsZFN0b3JhZ2VDbGFzcyBvciBzZWxmLl9fY2xhc3NfXwogICAgICAgICBmaXJzdF9saW5lID0gc2VsZi5mcC5yZWFkbGluZSgpICMgYnl0ZXMKQEAgLTk1OCw4ICs5NjMsOCBAQAogICAgIHByaW50KCI8SDM+Q3VycmVudCBXb3JraW5nIERpcmVjdG9yeTo8L0gzPiIpCiAgICAgdHJ5OgogICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJvcy5lcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICBwcmludCgiT1NFcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoaHRtbC5lc2NhcGUocHdkKSkKICAgICBwcmludCgpCmRpZmYgLS1naXQgYS9MaWIvY2h1bmsucHkgYi9MaWIvY2h1bmsucHkKaW5kZXggNTg2M2VkMC4uZGM5MGE3NSAxMDA2NDQKLS0tIGEvTGliL2NodW5rLnB5CisrKyBiL0xpYi9jaHVuay5weQpAQCAtNzAsNyArNzAsNyBAQAogICAgICAgICBzZWxmLnNpemVfcmVhZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSBzZWxmLmZpbGUudGVsbCgpCi0gICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIElPRXJyb3IpOgorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuc2Vla2FibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5zZWVrYWJsZSA9IFRydWUKQEAgLTEwMiw3ICsxMDIsNyBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCBzZWVrIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCBzZWVrIikKICAgICAgICAgaWYgd2hlbmNlID09IDE6CiAgICAgICAgICAgICBwb3MgPSBwb3MgKyBzZWxmLnNpemVfcmVhZAogICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLnNlZWsobiwgMSkKICAgICAgICAgICAgICAgICBzZWxmLnNpemVfcmVhZCA9IHNlbGYuc2l6ZV9yZWFkICsgbgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdoaWxlIHNlbGYuc2l6ZV9yZWFkIDwgc2VsZi5jaHVua3NpemU6CiAgICAgICAgICAgICBuID0gbWluKDgxOTIsIHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQpCmRpZmYgLS1naXQgYS9MaWIvY29kZS5weSBiL0xpYi9jb2RlLnB5CmluZGV4IDkwMjBhYWIuLmY4MTg0YjYgMTAwNjQ0Ci0tLSBhL0xpYi9jb2RlLnB5CisrKyBiL0xpYi9jb2RlLnB5CkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiglcylcbiIgJQogICAgICAgICAgICAgICAgICAgICAgICAoc3lzLnZlcnNpb24sIHN5cy5wbGF0Zm9ybSwgY3BydCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBiYW5uZXI6CiAgICAgICAgICAgICBzZWxmLndyaXRlKCIlc1xuIiAlIHN0cihiYW5uZXIpKQogICAgICAgICBtb3JlID0gMAogICAgICAgICB3aGlsZSAxOgpkaWZmIC0tZ2l0IGEvTGliL2NvZGVjcy5weSBiL0xpYi9jb2RlY3MucHkKaW5kZXggNmE2ZWI5MC4uMmUyZTc1NSAxMDA2NDQKLS0tIGEvTGliL2NvZGVjcy5weQorKysgYi9MaWIvY29kZWNzLnB5CkBAIC03Myw5ICs3MywxOSBAQAogIyMjIENvZGVjIGJhc2UgY2xhc3NlcyAoZGVmaW5pbmcgdGhlIEFQSSkKIAogY2xhc3MgQ29kZWNJbmZvKHR1cGxlKToKKyAgICAiIiJDb2RlYyBkZXRhaWxzIHdoZW4gbG9va2luZyB1cCB0aGUgY29kZWMgcmVnaXN0cnkiIiIKKworICAgICMgUHJpdmF0ZSBBUEkgdG8gYWxsb3cgUHl0aG9uIDMuNCB0byBibGFja2xpc3QgdGhlIGtub3duIG5vbi1Vbmljb2RlCisgICAgIyBjb2RlY3MgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIEEgbW9yZSBnZW5lcmFsIG1lY2hhbmlzbSB0bworICAgICMgcmVsaWFibHkgZGlzdGluZ3Vpc2ggdGVzdCBlbmNvZGluZ3MgZnJvbSBvdGhlciBjb2RlY3Mgd2lsbCBob3BlZnVsbHkKKyAgICAjIGJlIGRlZmluZWQgZm9yIFB5dGhvbiAzLjUKKyAgICAjCisgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NjE5CisgICAgX2lzX3RleHRfZW5jb2RpbmcgPSBUcnVlICMgQXNzdW1lIGNvZGVjcyBhcmUgdGV4dCBlbmNvZGluZ3MgYnkgZGVmYXVsdAogCiAgICAgZGVmIF9fbmV3X18oY2xzLCBlbmNvZGUsIGRlY29kZSwgc3RyZWFtcmVhZGVyPU5vbmUsIHN0cmVhbXdyaXRlcj1Ob25lLAotICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9Tm9uZSwgaW5jcmVtZW50YWxkZWNvZGVyPU5vbmUsIG5hbWU9Tm9uZSk6CisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1Ob25lLCBpbmNyZW1lbnRhbGRlY29kZXI9Tm9uZSwgbmFtZT1Ob25lLAorICAgICAgICAqLCBfaXNfdGV4dF9lbmNvZGluZz1Ob25lKToKICAgICAgICAgc2VsZiA9IHR1cGxlLl9fbmV3X18oY2xzLCAoZW5jb2RlLCBkZWNvZGUsIHN0cmVhbXJlYWRlciwgc3RyZWFtd3JpdGVyKSkKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLmVuY29kZSA9IGVuY29kZQpAQCAtODQsNiArOTQsOCBAQAogICAgICAgICBzZWxmLmluY3JlbWVudGFsZGVjb2RlciA9IGluY3JlbWVudGFsZGVjb2RlcgogICAgICAgICBzZWxmLnN0cmVhbXdyaXRlciA9IHN0cmVhbXdyaXRlcgogICAgICAgICBzZWxmLnN0cmVhbXJlYWRlciA9IHN0cmVhbXJlYWRlcgorICAgICAgICBpZiBfaXNfdGV4dF9lbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2lzX3RleHRfZW5jb2RpbmcgPSBfaXNfdGV4dF9lbmNvZGluZwogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5IGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CmluZGV4IGQ3MzcyOTUuLjAyYmRjNTcgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKQEAgLTMsMTYgKzMsMTYgQEAKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGNvbnRpbnVlIHRvIG1ha2UgdGhlIGNvbGxlY3Rpb25zIEFCQ3MKICMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb25zIG1vZHVsZS4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCi1fX2FsbF9fICs9IGNvbGxlY3Rpb25zLmFiYy5fX2FsbF9fCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2ltcG9ydCBfY29sbGVjdGlvbnNfYWJjCitfX2FsbF9fICs9IF9jb2xsZWN0aW9uc19hYmMuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSBhcyBfcHJveHkKK2Zyb20gX3dlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIgYXMgX3JlY3Vyc2l2ZV9yZXByCiAKQEAgLTE5OSwxMyArMTk5LDEwIEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcnCi0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQogICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQogICAgICAgICBmb3IgayBpbiB2YXJzKE9yZGVyZWREaWN0KCkpOgogICAgICAgICAgICAgaW5zdF9kaWN0LnBvcChrLCBOb25lKQotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKCksIGluc3RfZGljdCBvciBOb25lLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMoKSkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAnb2QuY29weSgpIC0+IGEgc2hhbGxvdyBjb3B5IG9mIG9kJwpAQCAtODIyLDkgKzgxOSwxNCBAQAogCiAgICAgX19jb3B5X18gPSBjb3B5CiAKLSAgICBkZWYgbmV3X2NoaWxkKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnB1c2goKQotICAgICAgICAnTmV3IENoYWluTWFwIHdpdGggYSBuZXcgZGljdCBmb2xsb3dlZCBieSBhbGwgcHJldmlvdXMgbWFwcy4nCi0gICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh7fSwgKnNlbGYubWFwcykKKyAgICBkZWYgbmV3X2NoaWxkKHNlbGYsIG09Tm9uZSk6ICAgICAgICAgICAgICAgICMgbGlrZSBEamFuZ28ncyBDb250ZXh0LnB1c2goKQorICAgICAgICAnJycKKyAgICAgICAgTmV3IENoYWluTWFwIHdpdGggYSBuZXcgbWFwIGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLiBJZiBubworICAgICAgICBtYXAgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIG0gPSB7fQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18obSwgKnNlbGYubWFwcykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJlbnRzKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucG9wKCkKZGlmZiAtLWdpdCBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CmluZGV4IDc5MzkyNjguLjg5MTYwMGQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKKysrIGIvTGliL2NvbGxlY3Rpb25zL2FiYy5weQpAQCAtMSw3MjggKzEsMiBAQAotIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotCi0iIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgotCi1Vbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgotIiIiCi0KLWZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAotaW1wb3J0IHN5cwotCi1fX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCi0gICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAotICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAotICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCi0gICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCi0gICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAotICAgICAgICAgICAiQnl0ZVN0cmluZyIsCi0gICAgICAgICAgIF0KLQotIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcwotIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6Ci0jICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQotIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCi0jIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0Ci0jIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAotIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KLWJ5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCi1ieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQotI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/Ci1kaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCi1kaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQotZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCi1saXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKLWxpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCi1yYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCi1zZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQotc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKLXR1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKLXppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCi0jIyB2aWV3cyAjIwotZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCi1kaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCi1kaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQotIyMgbWlzYyAjIwotbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQotCi0KLSMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIwotCi1jbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgotICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgotICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHdoaWxlIEZhbHNlOgotICAgICAgICAgICAgeWllbGQgTm9uZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgotICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCi0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKLSAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCi0gICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCi0jSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQotCi1jbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKLSAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotIyMjIFNFVFMgIyMjCi0KLQotY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCi0KLSAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKLSAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KLQotICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKLSAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KLSAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBjbHMoaXQpCi0KLSAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCi0KLSAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6Ci0gICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJwotICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQotCi0gICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKLQotICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQotICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQotCi0gICAgZGVmIF9oYXNoKHNlbGYpOgotICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgotCi0gICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCi0gICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKLSAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgotCi0gICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KLQotICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQotICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAotICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKLSAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCi0gICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KLSAgICAgICAgIiIiCi0gICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCi0gICAgICAgIE1BU0sgPSAyICogTUFYICsgMQotICAgICAgICBuID0gbGVuKHNlbGYpCi0gICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQotICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgZm9yIHggaW4gc2VsZjoKLSAgICAgICAgICAgIGh4ID0gaGFzaCh4KQotICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKLSAgICAgICAgICAgIGggJj0gTUFTSwotICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBpZiBoID4gTUFYOgotICAgICAgICAgICAgaCAtPSBNQVNLICsgMQotICAgICAgICBpZiBoID09IC0xOgotICAgICAgICAgICAgaCA9IDU5MDkyMzcxMwotICAgICAgICByZXR1cm4gaAotCi1TZXQucmVnaXN0ZXIoZnJvemVuc2V0KQotCi0KLWNsYXNzIE11dGFibGVTZXQoU2V0KToKLSAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAotICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQotICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0KLSAgICBkZWYgcG9wKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgotICAgICAgICBpdCA9IGl0ZXIoc2VsZikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKLSAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgotICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBpdCBpcyBzZWxmOgotICAgICAgICAgICAgc2VsZi5jbGVhcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKLQotCi0jIyMgTUFQUElOR1MgIyMjCi0KLQotY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQotICAgIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgotICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKLQotICAgIGRlZiBpdGVtcyhzZWxmKToKLSAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKLSAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQotCi0gICAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKLSAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCi0KLQotY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgotICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZwotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCi0KLQotY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQga2V5Ci0KLUtleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKLQotCi1jbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKLSAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKLQotSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCi0KLQotY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KLQotVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKLQotCi1jbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCi0gICAga2V5L3ZhbHVlIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKLSAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgX19tYXJrZXIgPSBvYmplY3QoKQotCi0gICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgotICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KLSAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgotICAgICAgICAnJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgcG9waXRlbShzZWxmKToKLSAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCi0gICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKLSAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCi0gICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2Ci0gICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCi0gICAgICAgIGVsaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKLSAgICAgICAgc2VsZiA9IGFyZ3NbMF0KLSAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotCi0gICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLU11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCi0KLQotIyMjIFNFUVVFTkNFUyAjIyMKLQotCi1jbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCi0KLSAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBpID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCi0gICAgICAgICAgICAgICAgeWllbGQgdgotICAgICAgICAgICAgICAgIGkgKz0gMQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGZvciB2IGluIHNlbGY6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKLSAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmW2ldCi0KLSAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KLSAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0KLSAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJwotICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQotCi1TZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKLVNlcXVlbmNlLnJlZ2lzdGVyKHN0cikKLVNlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQotCi0KLWNsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgotCi0gICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCi0KLSAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCi1CeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKLQotCi1jbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCi0gICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JwotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCi0gICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJldmVyc2Uoc2VsZik6Ci0gICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6Ci0gICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCi0KLSAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKLSAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKLQotICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgotICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCi0gICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCi0gICAgICAgICcnJwotICAgICAgICB2ID0gc2VsZltpbmRleF0KLSAgICAgICAgZGVsIHNlbGZbaW5kZXhdCi0gICAgICAgIHJldHVybiB2Ci0KLSAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgJycnCi0gICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQotCi0gICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCAqCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCBhNmMwY2Y2Li5iOTNlMzg0IDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC0zMywxNyArMzMsMjUgQEAKICMgWUlROiB1c2VkIGJ5IGNvbXBvc2l0ZSB2aWRlbyBzaWduYWxzIChsaW5lYXIgY29tYmluYXRpb25zIG9mIFJHQikKICMgWTogcGVyY2VpdmVkIGdyZXkgbGV2ZWwgKDAuMCA9PSBibGFjaywgMS4wID09IHdoaXRlKQogIyBJLCBROiBjb2xvciBjb21wb25lbnRzCisjCisjIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgdmVyc2lvbnMgb2YgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoZXNlIGZvcm11bGFlLgorIyBUaGUgb25lcyBpbiB0aGlzIGxpYnJhcnkgdXNlcyBjb25zdGFudHMgZnJvbSB0aGUgRkNDIHZlcnNpb24gb2YgTlRTQy4KIAogZGVmIHJnYl90b195aXEociwgZywgYik6CiAgICAgeSA9IDAuMzAqciArIDAuNTkqZyArIDAuMTEqYgotICAgIGkgPSAwLjYwKnIgLSAwLjI4KmcgLSAwLjMyKmIKLSAgICBxID0gMC4yMSpyIC0gMC41MipnICsgMC4zMSpiCisgICAgaSA9IDAuNzQqKHIteSkgLSAwLjI3KihiLXkpCisgICAgcSA9IDAuNDgqKHIteSkgKyAwLjQxKihiLXkpCiAgICAgcmV0dXJuICh5LCBpLCBxKQogCiBkZWYgeWlxX3RvX3JnYih5LCBpLCBxKToKLSAgICByID0geSArIDAuOTQ4MjYyKmkgKyAwLjYyNDAxMypxCi0gICAgZyA9IHkgLSAwLjI3NjA2NippIC0gMC42Mzk4MTAqcQotICAgIGIgPSB5IC0gMS4xMDU0NTAqaSArIDEuNzI5ODYwKnEKKyAgICAjIHIgPSB5ICsgKDAuMjcqcSArIDAuNDEqaSkgLyAoMC43NCowLjQxICsgMC4yNyowLjQ4KQorICAgICMgYiA9IHkgKyAoMC43NCpxIC0gMC40OCppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBnID0geSAtICgwLjMwKihyLXkpICsgMC4xMSooYi15KSkgLyAwLjU5CisKKyAgICByID0geSArIDAuOTQ2ODgyMjE3MDkwMDY5MyppICsgMC42MjM1NTY1ODE5ODYxNDMzKnEKKyAgICBnID0geSAtIDAuMjc0Nzg3NjQ2Mjk4OTc4MzQqaSAtIDAuNjM1NjkxMDc5MTg3MzgwMSpxCisgICAgYiA9IHkgLSAxLjEwODU0NTAzNDY0MjAzMjIqaSArIDEuNzA5MDA2OTI4NDA2NDY2NipxCisKICAgICBpZiByIDwgMC4wOgogICAgICAgICByID0gMC4wCiAgICAgaWYgZyA8IDAuMDoKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggZDNjZmY2YS4uNDc1ZGMxYyAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTEzLDcgKzEzLDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc3RydWN0CiAKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgcHJpbnQoJ0xpc3RpbmcgeyFyfS4uLicuZm9ybWF0KGRpcikpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcHJpbnQoIkNhbid0IGxpc3QgeyFyfSIuZm9ybWF0KGRpcikpCiAgICAgICAgIG5hbWVzID0gW10KICAgICBuYW1lcy5zb3J0KCkKQEAgLTkxLDIyICs5MSwyMyBAQAogICAgICAgICAgICAgY2ZpbGUgPSBmdWxsbmFtZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWUsIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKICAgICAgICAgICAgIGNhY2hlX2RpciA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCiAgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6CiAgICAgICAgICAgICBpZiBub3QgZm9yY2U6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZSkKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUpCiAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3JiJykgYXMgY2hhbmRsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCA9IGNoYW5kbGUucmVhZCg4KQogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3QgPT0gYWN0dWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICAgICAgICAgIHByaW50KCdDb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKQEAgLTEyNCw3ICsxMjUsNyBAQAogICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5kZWNvZGUoc3lzLnN0ZG91dC5lbmNvZGluZykKICAgICAgICAgICAgICAgICBwcmludChtc2cpCiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgSU9FcnJvcikgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICBpZiBxdWlldDoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBjb21waWxpbmcgeyFyfS4uLicuZm9ybWF0KGZ1bGxuYW1lKSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjA5LDcgKzIxMCw3IEBACiAgICAgICAgICAgICB3aXRoIChzeXMuc3RkaW4gaWYgYXJncy5mbGlzdD09Jy0nIGVsc2Ugb3BlbihhcmdzLmZsaXN0KSkgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlX2Rlc3RzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CmluZGV4IGNhM2FlYmQuLjNkMDMyODAgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQpAQCAtMTk4LDggKzE5OCw3IEBACiAgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKIAogICAgIHRyeToKLSAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKLSAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorICAgICAgICB5aWVsZCBmcm9tIGZpbmlzaGVkCiAKICAgICAgICAgd2hpbGUgcGVuZGluZzoKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weSBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQppbmRleCBhZGYyYWI0Li4wN2I1MjI1IDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CkBAIC00MCw3ICs0MCw3IEBACiAKIFByb2Nlc3MgIzEuLm46CiAtIHJlYWRzIF9DYWxsSXRlbXMgZnJvbSAiQ2FsbCBRIiwgZXhlY3V0ZXMgdGhlIGNhbGxzLCBhbmQgcHV0cyB0aGUgcmVzdWx0aW5nCi0gIF9SZXN1bHRJdGVtcyBpbiAiUmVxdWVzdCBRIgorICBfUmVzdWx0SXRlbXMgaW4gIlJlc3VsdCBRIgogIiIiCiAKIF9fYXV0aG9yX18gPSAnQnJpYW4gUXVpbmxhbiAoYnJpYW5Ac3dlZXRhcHAuY29tKScKQEAgLTQ5LDggKzQ5LDkgQEAKIGltcG9ydCBvcwogZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IF9iYXNlCiBpbXBvcnQgcXVldWUKK2Zyb20gcXVldWUgaW1wb3J0IEZ1bGwKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUsIEZ1bGwKK2Zyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBTaW1wbGVRdWV1ZQogZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHdlYWtyZWYKQEAgLTI0MCw2ICsyNDEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInRlcm1pbmF0ZWQgYWJydXB0bHkgd2hpbGUgdGhlIGZ1dHVyZSB3YXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgInJ1bm5pbmcgb3IgcGVuZGluZy4iCiAgICAgICAgICAgICAgICAgICAgICkpCisgICAgICAgICAgICAgICAgIyBEZWxldGUgcmVmZXJlbmNlcyB0byBvYmplY3QuIFNlZSBpc3N1ZTE2Mjg0CisgICAgICAgICAgICAgICAgZGVsIHdvcmtfaXRlbQogICAgICAgICAgICAgcGVuZGluZ193b3JrX2l0ZW1zLmNsZWFyKCkKICAgICAgICAgICAgICMgVGVybWluYXRlIHJlbWFpbmluZyB3b3JrZXJzIGZvcmNpYmx5OiB0aGUgcXVldWVzIG9yIHRoZWlyCiAgICAgICAgICAgICAjIGxvY2tzIG1heSBiZSBpbiBhIGRpcnR5IHN0YXRlIGFuZCBibG9jayBmb3JldmVyLgpAQCAtMjY0LDYgKzI2Nyw4IEBACiAgICAgICAgICAgICAgICAgICAgIHdvcmtfaXRlbS5mdXR1cmUuc2V0X2V4Y2VwdGlvbihyZXN1bHRfaXRlbS5leGNlcHRpb24pCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfcmVzdWx0KHJlc3VsdF9pdGVtLnJlc3VsdCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICMgQ2hlY2sgd2hldGhlciB3ZSBzaG91bGQgc3RhcnQgc2h1dHRpbmcgZG93bi4KICAgICAgICAgZXhlY3V0b3IgPSBleGVjdXRvcl9yZWZlcmVuY2UoKQogICAgICAgICAjIE5vIG1vcmUgd29yayBpdGVtcyBjYW4gYmUgYWRkZWQgaWY6CkBAIC0zMjcsNyArMzMyLDcgQEAKICAgICAgICAgX2NoZWNrX3N5c3RlbV9saW1pdHMoKQogCiAgICAgICAgIGlmIG1heF93b3JrZXJzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQorICAgICAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSBvcy5jcHVfY291bnQoKSBvciAxCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG1heF93b3JrZXJzCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkKaW5kZXggOTViYjY4Mi4uZjliZWIwZiAxMDA2NDQKLS0tIGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkKQEAgLTYzLDYgKzYzLDggQEAKICAgICAgICAgICAgIHdvcmtfaXRlbSA9IHdvcmtfcXVldWUuZ2V0KGJsb2NrPVRydWUpCiAgICAgICAgICAgICBpZiB3b3JrX2l0ZW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgd29ya19pdGVtLnJ1bigpCisgICAgICAgICAgICAgICAgIyBEZWxldGUgcmVmZXJlbmNlcyB0byBvYmplY3QuIFNlZSBpc3N1ZTE2Mjg0CisgICAgICAgICAgICAgICAgZGVsIHdvcmtfaXRlbQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICAgICAjIEV4aXQgaWY6CmRpZmYgLS1naXQgYS9MaWIvY29uZmlncGFyc2VyLnB5IGIvTGliL2NvbmZpZ3BhcnNlci5weQppbmRleCBmZGUxYzEyLi43OTRmODU3IDEwMDY0NAotLS0gYS9MaWIvY29uZmlncGFyc2VyLnB5CisrKyBiL0xpYi9jb25maWdwYXJzZXIucHkKQEAgLTY4Nyw3ICs2ODcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKGZwLCBmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJlYWRfb2suYXBwZW5kKGZpbGVuYW1lKQogICAgICAgICByZXR1cm4gcmVhZF9vawpkaWZmIC0tZ2l0IGEvTGliL2NvbnRleHRsaWIucHkgYi9MaWIvY29udGV4dGxpYi5weQppbmRleCBmOGUwMjZiLi5kMzIxOWY2IDEwMDY0NAotLS0gYS9MaWIvY29udGV4dGxpYi5weQorKysgYi9MaWIvY29udGV4dGxpYi5weQpAQCAtNCw3ICs0LDggQEAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKIAotX19hbGxfXyA9IFsiY29udGV4dG1hbmFnZXIiLCAiY2xvc2luZyIsICJDb250ZXh0RGVjb3JhdG9yIiwgIkV4aXRTdGFjayJdCitfX2FsbF9fID0gWyJjb250ZXh0bWFuYWdlciIsICJjbG9zaW5nIiwgIkNvbnRleHREZWNvcmF0b3IiLCAiRXhpdFN0YWNrIiwKKyAgICAgICAgICAgInJlZGlyZWN0X3N0ZG91dCIsICJzdXBwcmVzcyJdCiAKIAogY2xhc3MgQ29udGV4dERlY29yYXRvcihvYmplY3QpOgpAQCAtMzYsNiArMzcsMTYgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHNlbGYuZ2VuID0gZnVuYygqYXJncywgKiprd2RzKQogICAgICAgICBzZWxmLmZ1bmMsIHNlbGYuYXJncywgc2VsZi5rd2RzID0gZnVuYywgYXJncywga3dkcworICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBkb2MgPSBnZXRhdHRyKGZ1bmMsICJfX2RvY19fIiwgTm9uZSkKKyAgICAgICAgaWYgZG9jIGlzIE5vbmU6CisgICAgICAgICAgICBkb2MgPSB0eXBlKHNlbGYpLl9fZG9jX18KKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jCisgICAgICAgICMgVW5mb3J0dW5hdGVseSwgdGhpcyBzdGlsbCBkb2Vzbid0IHByb3ZpZGUgZ29vZCBoZWxwIG91dHB1dCB3aGVuCisgICAgICAgICMgaW5zcGVjdGluZyB0aGUgY3JlYXRlZCBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzLCBzaW5jZSBweWRvYworICAgICAgICAjIGN1cnJlbnRseSBieXBhc3NlcyB0aGUgaW5zdGFuY2UgZG9jc3RyaW5nIGFuZCBzaG93cyB0aGUgZG9jc3RyaW5nCisgICAgICAgICMgZm9yIHRoZSBjbGFzcyBpbnN0ZWFkLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk0MDQgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgIGRlZiBfcmVjcmVhdGVfY20oc2VsZik6CiAgICAgICAgICMgX0dDTSBpbnN0YW5jZXMgYXJlIG9uZS1zaG90IGNvbnRleHQgbWFuYWdlcnMsIHNvIHRoZQpAQCAtNDcsNyArNTgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmdlbikKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJnZW5lcmF0b3IgZGlkbid0IHlpZWxkIikgZnJvbSBOb25lCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKQEAgLTE0MCw2ICsxNTEsNjIgQEAKICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKICAgICAgICAgc2VsZi50aGluZy5jbG9zZSgpCiAKK2NsYXNzIHJlZGlyZWN0X3N0ZG91dDoKKyAgICAiIiJDb250ZXh0IG1hbmFnZXIgZm9yIHRlbXBvcmFyaWx5IHJlZGlyZWN0aW5nIHN0ZG91dCB0byBhbm90aGVyIGZpbGUKKworICAgICAgICAjIEhvdyB0byBzZW5kIGhlbHAoKSB0byBzdGRlcnIKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoc3lzLnN0ZGVycik6CisgICAgICAgICAgICBoZWxwKGRpcikKKworICAgICAgICAjIEhvdyB0byB3cml0ZSBoZWxwKCkgdG8gYSBmaWxlCisgICAgICAgIHdpdGggb3BlbignaGVscC50eHQnLCAndycpIGFzIGY6CisgICAgICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgICAgICBoZWxwKHBvdykKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuZXdfdGFyZ2V0KToKKyAgICAgICAgc2VsZi5fbmV3X3RhcmdldCA9IG5ld190YXJnZXQKKyAgICAgICAgIyBXZSB1c2UgYSBsaXN0IG9mIG9sZCB0YXJnZXRzIHRvIG1ha2UgdGhpcyBDTSByZS1lbnRyYW50CisgICAgICAgIHNlbGYuX29sZF90YXJnZXRzID0gW10KKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX29sZF90YXJnZXRzLmFwcGVuZChzeXMuc3Rkb3V0KQorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fbmV3X3RhcmdldAorICAgICAgICByZXR1cm4gc2VsZi5fbmV3X3RhcmdldAorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y3R5cGUsIGV4Y2luc3QsIGV4Y3RiKToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX29sZF90YXJnZXRzLnBvcCgpCisKKworY2xhc3Mgc3VwcHJlc3M6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHNwZWNpZmllZCBleGNlcHRpb25zCisKKyAgICBBZnRlciB0aGUgZXhjZXB0aW9uIGlzIHN1cHByZXNzZWQsIGV4ZWN1dGlvbiBwcm9jZWVkcyB3aXRoIHRoZSBuZXh0CisgICAgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgd2l0aCBzdGF0ZW1lbnQuCisKKyAgICAgICAgIHdpdGggc3VwcHJlc3MoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICAgIG9zLnJlbW92ZShzb21lZmlsZSkKKyAgICAgICAgICMgRXhlY3V0aW9uIHN0aWxsIHJlc3VtZXMgaGVyZSBpZiB0aGUgZmlsZSB3YXMgYWxyZWFkeSByZW1vdmVkCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmV4Y2VwdGlvbnMpOgorICAgICAgICBzZWxmLl9leGNlcHRpb25zID0gZXhjZXB0aW9ucworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y3R5cGUsIGV4Y2luc3QsIGV4Y3RiKToKKyAgICAgICAgIyBVbmxpa2UgaXNpbnN0YW5jZSBhbmQgaXNzdWJjbGFzcywgQ1B5dGhvbiBleGNlcHRpb24gaGFuZGxpbmcKKyAgICAgICAgIyBjdXJyZW50bHkgb25seSBsb29rcyBhdCB0aGUgY29uY3JldGUgdHlwZSBoaWVyYXJjaHkgKGlnbm9yaW5nCisgICAgICAgICMgdGhlIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja2luZyBob29rcykuIFdoaWxlIEd1aWRvIGNvbnNpZGVycworICAgICAgICAjIHRoYXQgYSBidWcgcmF0aGVyIHRoYW4gYSBmZWF0dXJlLCBpdCdzIGEgZmFpcmx5IGhhcmQgb25lIHRvIGZpeAorICAgICAgICAjIGR1ZSB0byB2YXJpb3VzIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIHN1cHByZXNzIHByb3ZpZGVzCisgICAgICAgICMgdGhlIHNpbXBsZXIgaXNzdWJjbGFzcyBiYXNlZCBzZW1hbnRpY3MsIHJhdGhlciB0aGFuIHRyeWluZyB0bworICAgICAgICAjIGV4YWN0bHkgcmVwcm9kdWNlIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlci4KKyAgICAgICAgIworICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTIwMjkgZm9yIG1vcmUgZGV0YWlscworICAgICAgICByZXR1cm4gZXhjdHlwZSBpcyBub3QgTm9uZSBhbmQgaXNzdWJjbGFzcyhleGN0eXBlLCBzZWxmLl9leGNlcHRpb25zKQorCiAKICMgSW5zcGlyZWQgYnkgZGlzY3Vzc2lvbnMgb24gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNTg1CiBjbGFzcyBFeGl0U3RhY2sob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi9jb3B5cmVnLnB5IGIvTGliL2NvcHlyZWcucHkKaW5kZXggNjZjMGY4YS4uNjdmNWJiMCAxMDA2NDQKLS0tIGEvTGliL2NvcHlyZWcucHkKKysrIGIvTGliL2NvcHlyZWcucHkKQEAgLTg3LDYgKzg3LDEyIEBACiBkZWYgX19uZXdvYmpfXyhjbHMsICphcmdzKToKICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCAqYXJncykKIAorZGVmIF9fbmV3b2JqX2V4X18oY2xzLCBhcmdzLCBrd2FyZ3MpOgorICAgICIiIlVzZWQgYnkgcGlja2xlIHByb3RvY29sIDQsIGluc3RlYWQgb2YgX19uZXdvYmpfXyB0byBhbGxvdyBjbGFzc2VzIHdpdGgKKyAgICBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIHRvIGJlIHBpY2tsZWQgY29ycmVjdGx5LgorICAgICIiIgorICAgIHJldHVybiBjbHMuX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncykKKwogZGVmIF9zbG90bmFtZXMoY2xzKToKICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHNsb3QgbmFtZXMgZm9yIGEgZ2l2ZW4gY2xhc3MuCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CmluZGV4IGM5MmUxMzAuLmUzNGM2NDYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQpAQCAtMzQsMTcgKzM0LDE1IEBACiAgICAgIEZVTkNGTEFHX1VTRV9FUlJOTyBhcyBfRlVOQ0ZMQUdfVVNFX0VSUk5PLCBcCiAgICAgIEZVTkNGTEFHX1VTRV9MQVNURVJST1IgYXMgX0ZVTkNGTEFHX1VTRV9MQVNURVJST1IKIAotIiIiCi1XSU5PTEVBUEkgLT4gSFJFU1VMVAotV0lOT0xFQVBJXyh0eXBlKQotCi1TVERNRVRIT0RDQUxMVFlQRQotCi1TVERNRVRIT0QobmFtZSkKLVNURE1FVEhPRF8odHlwZSwgbmFtZSkKLQotU1REQVBJQ0FMTFRZUEUKLSIiIgorIyBXSU5PTEVBUEkgLT4gSFJFU1VMVAorIyBXSU5PTEVBUElfKHR5cGUpCisjCisjIFNURE1FVEhPRENBTExUWVBFCisjCisjIFNURE1FVEhPRChuYW1lKQorIyBTVERNRVRIT0RfKHR5cGUsIG5hbWUpCisjCisjIFNUREFQSUNBTExUWVBFCiAKIGRlZiBjcmVhdGVfc3RyaW5nX2J1ZmZlcihpbml0LCBzaXplPU5vbmUpOgogICAgICIiImNyZWF0ZV9zdHJpbmdfYnVmZmVyKGFCeXRlcykgLT4gY2hhcmFjdGVyIGFycmF5CkBAIC0zOTUsNyArMzkzLDcgQEAKICAgICAgICAgX3R5cGVfID0gImwiCiAgICAgICAgICMgX2NoZWNrX3JldHZhbF8gaXMgY2FsbGVkIHdpdGggdGhlIGZ1bmN0aW9uJ3MgcmVzdWx0IHdoZW4gaXQKICAgICAgICAgIyBpcyB1c2VkIGFzIHJlc3R5cGUuICBJdCBjaGVja3MgZm9yIHRoZSBGQUlMRUQgYml0LCBhbmQKLSAgICAgICAgIyByYWlzZXMgYSBXaW5kb3dzRXJyb3IgaWYgaXQgaXMgc2V0LgorICAgICAgICAjIHJhaXNlcyBhbiBPU0Vycm9yIGlmIGl0IGlzIHNldC4KICAgICAgICAgIwogICAgICAgICAjIFRoZSBfY2hlY2tfcmV0dmFsXyBtZXRob2QgaXMgaW1wbGVtZW50ZWQgaW4gQywgc28gdGhhdCB0aGUKICAgICAgICAgIyBtZXRob2QgZGVmaW5pdGlvbiBpdHNlbGYgaXMgbm90IGluY2x1ZGVkIGluIHRoZSB0cmFjZWJhY2sKQEAgLTQwNyw3ICs0MDUsNyBAQAogICAgIGNsYXNzIE9sZURMTChDRExMKToKICAgICAgICAgIiIiVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgZGxsIGV4cG9ydGluZyBmdW5jdGlvbnMgdXNpbmcgdGhlCiAgICAgICAgIFdpbmRvd3Mgc3RkY2FsbCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCByZXR1cm5pbmcgSFJFU1VMVC4KLSAgICAgICAgSFJFU1VMVCBlcnJvciB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmFpc2VkIGFzIFdpbmRvd3NFcnJvcgorICAgICAgICBIUkVTVUxUIGVycm9yIHZhbHVlcyBhcmUgYXV0b21hdGljYWxseSByYWlzZWQgYXMgT1NFcnJvcgogICAgICAgICBleGNlcHRpb25zLgogICAgICAgICAiIiIKICAgICAgICAgX2Z1bmNfZmxhZ3NfID0gX0ZVTkNGTEFHX1NURENBTEwKQEAgLTQ1Niw3ICs0NTQsNyBAQAogICAgICAgICAgICAgY29kZSA9IEdldExhc3RFcnJvcigpCiAgICAgICAgIGlmIGRlc2NyIGlzIE5vbmU6CiAgICAgICAgICAgICBkZXNjciA9IEZvcm1hdEVycm9yKGNvZGUpLnN0cmlwKCkKLSAgICAgICAgcmV0dXJuIFdpbmRvd3NFcnJvcihOb25lLCBkZXNjciwgTm9uZSwgY29kZSkKKyAgICAgICAgcmV0dXJuIE9TRXJyb3IoTm9uZSwgZGVzY3IsIE5vbmUsIGNvZGUpCiAKIGlmIHNpemVvZihjX3VpbnQpID09IHNpemVvZihjX3ZvaWRfcCk6CiAgICAgY19zaXplX3QgPSBjX3VpbnQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weSBiL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQppbmRleCBjYzVmZTAyLi43YzcyMjEwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CkBAIC0zNyw3ICszNyw3IEBACiAKIGRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyhwYWNrYWdlLCBtYXNrKToKICAgICBpbXBvcnQgZm5tYXRjaAotICAgIGlmIChoYXNhdHRyKHBhY2thZ2UsICJfX2xvYWRlcl9fIikgYW5kCisgICAgaWYgKHBhY2thZ2UuX19sb2FkZXJfXyBpcyBub3QgTm9uZSBhbmQKICAgICAgICAgICAgIGhhc2F0dHIocGFja2FnZS5fX2xvYWRlcl9fLCAnX2ZpbGVzJykpOgogICAgICAgICBwYXRoID0gcGFja2FnZS5fX25hbWVfXy5yZXBsYWNlKCIuIiwgb3MucGF0aC5zZXApCiAgICAgICAgIG1hc2sgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbWFzaykKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NoZWNrcmV0dmFsLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKaW5kZXggMDFjY2M1Ny4uMTliYjgxMyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlZGxsLm9sZWF1dDMyLkNyZWF0ZVR5cGVMaWIyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQppbmRleCBjYmYyZTA1Li4yNzFlM2Y1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CkBAIC01LDE3ICs1LDE0IEBACiAKICMgWFhYIFRoaXMgdGVzdCBtdXN0IGJlIHJldmlld2VkIGZvciBjb3JyZWN0bmVzcyEhIQogCi0iIiIKLWN0eXBlcycgdHlwZXMgYXJlIGNvbnRhaW5lciB0eXBlcy4KLQotVGhleSBoYXZlIGFuIGludGVybmFsIG1lbW9yeSBibG9jaywgd2hpY2ggb25seSBjb25zaXN0cyBvZiBzb21lIGJ5dGVzLAotYnV0IGl0IGhhcyB0byBrZWVwIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyBhcyB3ZWxsLiBUaGlzIGlzIG5vdAotcmVhbGx5IG5lZWRlZCBmb3IgdHJpdmlhbCBDIHR5cGVzIGxpa2UgaW50IG9yIGNoYXIsIGJ1dCBpdCBpcyBpbXBvcnRhbnQKLWZvciBhZ2dyZWdhdGUgdHlwZXMgbGlrZSBzdHJpbmdzIG9yIHBvaW50ZXJzIGluIHBhcnRpY3VsYXIuCi0KLVdoYXQgYWJvdXQgcG9pbnRlcnM/Ci0KLSIiIgorIyBjdHlwZXMnIHR5cGVzIGFyZSBjb250YWluZXIgdHlwZXMuCisjCisjIFRoZXkgaGF2ZSBhbiBpbnRlcm5hbCBtZW1vcnkgYmxvY2ssIHdoaWNoIG9ubHkgY29uc2lzdHMgb2Ygc29tZSBieXRlcywKKyMgYnV0IGl0IGhhcyB0byBrZWVwIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyBhcyB3ZWxsLiBUaGlzIGlzIG5vdAorIyByZWFsbHkgbmVlZGVkIGZvciB0cml2aWFsIEMgdHlwZXMgbGlrZSBpbnQgb3IgY2hhciwgYnV0IGl0IGlzIGltcG9ydGFudAorIyBmb3IgYWdncmVnYXRlIHR5cGVzIGxpa2Ugc3RyaW5ncyBvciBwb2ludGVycyBpbiBwYXJ0aWN1bGFyLgorIworIyBXaGF0IGFib3V0IHBvaW50ZXJzPwogCiBjbGFzcyBPYmplY3RzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIGEsIGIpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQppbmRleCBlZGE4NDZkLi5mZDI2ODM3IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQpAQCAtMywzNSArMywzMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgQm9iIElwcG9saXRvOgotIiIiCi1Pay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vawotc29tZXRoaW5nIGxpa2U6Ci0KLWltcG9ydCBvcwotZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKLQotZGVmIGZpbmRfbGliKG5hbWUpOgotICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAotICAgICBuYW1lKycuZnJhbWV3b3JrLycrbmFtZV0KLSAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgotICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKGR5bGRfZmluZChkeWxpYikpCi0gICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICBwYXNzCi0gICAgIHJhaXNlIFZhbHVlRXJyb3IsICIlcyBub3QgZm91bmQiICUgKG5hbWUsKQotCi1JdCdsbCBoYXZlIG91dHB1dCBsaWtlIHRoaXM6Ci0KLSA+Pj4gZmluZF9saWIoJ3B0aHJlYWQnKQotJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJwotID4+PiBmaW5kX2xpYigneicpCi0nL3Vzci9saWIvbGliei4xLmR5bGliJwotID4+PiBmaW5kX2xpYignSU9LaXQnKQotJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JwotCi0tYm9iCi0KLSIiIgorIworIyBPay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vaworIyBzb21ldGhpbmcgbGlrZToKKyMKKyMgaW1wb3J0IG9zCisjIGZyb20gbWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCisjCisjIGRlZiBmaW5kX2xpYihuYW1lKToKKyMgICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAorIyAgICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQorIyAgICAgIGZvciBkeWxpYiBpbiBwb3NzaWJsZToKKyMgICAgICAgICAgdHJ5OgorIyAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKKyMgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisjICAgICAgICAgICAgICBwYXNzCisjICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCisjCisjIEl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKKyMKKyMgID4+PiBmaW5kX2xpYigncHRocmVhZCcpCisjICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicKKyMgID4+PiBmaW5kX2xpYigneicpCisjICcvdXNyL2xpYi9saWJ6LjEuZHlsaWInCisjICA+Pj4gZmluZF9saWIoJ0lPS2l0JykKKyMgJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JworIworIyAtYm9iCiAKIGZyb20gY3R5cGVzLm1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW4zMi5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5CmluZGV4IGRhMjEzMzYuLjkxYWQzMTQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5CkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICAgICAgIyBDYWxsIGZ1bmN0aW9ucyB3aXRoIGludmFsaWQgYXJndW1lbnRzLCBhbmQgbWFrZSBzdXJlCiAgICAgICAgICAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgogICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLCAzMikKIAogICAgICAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6CiAgICAgICAgICAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb24gd2luMzIgeDY0CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3V0aWwucHkgYi9MaWIvY3R5cGVzL3V0aWwucHkKaW5kZXggMDU0YzUxMS4uMGNmMjA3NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy91dGlsLnB5CisrKyBiL0xpYi9jdHlwZXMvdXRpbC5weQpAQCAtMTAyLDkgKzEwMiw4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGNjb3V0KQotICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIHJ2ID09IDEwOgogICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2NjIG9yIGNjIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIHRyYWNlKQpAQCAtMTMzLDggKzEzMiwxMCBAQAogICAgICAgICAgICAgY21kID0gJ2lmICEgdHlwZSBvYmpkdW1wID4vZGV2L251bGwgMj4mMTsgdGhlbiBleGl0IDEwOyBmaTsnIFwKICAgICAgICAgICAgICAgICAgICJvYmpkdW1wIC1wIC1qIC5keW5hbWljIDI+L2Rldi9udWxsICIgKyBmCiAgICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQotICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCi0gICAgICAgICAgICBydiA9IGYuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGR1bXAgPSBmLnJlYWQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBydiA9IGYuY2xvc2UoKQogICAgICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignb2JqZHVtcCBjb21tYW5kIG5vdCBmb3VuZCcpCiAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcc1NPTkFNRVxzKyhbXlxzXSspJywgZHVtcCkKQEAgLTE3NywxMCArMTc4LDExIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNtZCA9ICdlbnYgTENfQUxMPUMgL3Vzci9iaW4vY3JsZSAyPi9kZXYvbnVsbCcKIAotICAgICAgICAgICAgZm9yIGxpbmUgaW4gb3MucG9wZW4oY21kKS5yZWFkbGluZXMoKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdEZWZhdWx0IExpYnJhcnkgUGF0aCAoRUxGKTonKToKLSAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG9zLnBvcGVuKGNtZCkpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZi5yZWFkbGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aHMgPSBsaW5lLnNwbGl0KClbNF0KIAogICAgICAgICAgICAgaWYgbm90IHBhdGhzOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCmRpZmYgLS1naXQgYS9MaWIvZGF0ZXRpbWUucHkgYi9MaWIvZGF0ZXRpbWUucHkKaW5kZXggZDFmMzUzYi4uMTc4OTcxNCAxMDA2NDQKLS0tIGEvTGliL2RhdGV0aW1lLnB5CisrKyBiL0xpYi9kYXRldGltZS5weQpAQCAtMjMsOSArMjMsMTAgQEAKICMgZm9yIGFsbCBjb21wdXRhdGlvbnMuICBTZWUgdGhlIGJvb2sgZm9yIGFsZ29yaXRobXMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbgogIyBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWxzIGFuZCBtYW55IG90aGVyIGNhbGVuZGFyIHN5c3RlbXMuCiAKLV9EQVlTX0lOX01PTlRIID0gW05vbmUsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCisjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgorX0RBWVNfSU5fTU9OVEggPSBbLTEsIDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCiAKLV9EQVlTX0JFRk9SRV9NT05USCA9IFtOb25lXQorX0RBWVNfQkVGT1JFX01PTlRIID0gWy0xXSAjIC0xIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGluZGV4aW5nIHB1cnBvc2VzLgogZGJtID0gMAogZm9yIGRpbSBpbiBfREFZU19JTl9NT05USFsxOl06CiAgICAgX0RBWVNfQkVGT1JFX01PTlRILmFwcGVuZChkYm0pCkBAIC0xOTE3LDIwMyArMTkxOCwyMDMgQEAKIHRpbWV6b25lLm1pbiA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21pbm9mZnNldCkKIHRpbWV6b25lLm1heCA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21heG9mZnNldCkKIF9FUE9DSCA9IGRhdGV0aW1lKDE5NzAsIDEsIDEsIHR6aW5mbz10aW1lem9uZS51dGMpCi0iIiIKLVNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKLSAgICB4Lm4gPSB4IHN0cmlwcGVkIG9mIGl0cyB0aW1lem9uZSAtLSBpdHMgbmFpdmUgdGltZS4KLSAgICB4Lm8gPSB4LnV0Y29mZnNldCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgotICAgICAgICAgIHJldHVybiBOb25lCi0gICAgeC5kID0geC5kc3QoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKLSAgICAgICAgICByZXR1cm4gTm9uZQotICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAogCi1Ob3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjIFNvbWUgdGltZSB6b25lIGFsZ2VicmEuICBGb3IgYSBkYXRldGltZSB4LCBsZXQKKyMgICAgIHgubiA9IHggc3RyaXBwZWQgb2YgaXRzIHRpbWV6b25lIC0tIGl0cyBuYWl2ZSB0aW1lLgorIyAgICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyMgICAgICAgICAgIHJldHVybiBOb25lCisjICAgICB4LmQgPSB4LmRzdCgpLCBhbmQgYXNzdW1pbmcgdGhhdCBkb2Vzbid0IHJhaXNlIGFuIGV4Y2VwdGlvbiBvcgorIyAgICAgICAgICAgcmV0dXJuIE5vbmUKKyMgICAgIHgucyA9IHgncyBzdGFuZGFyZCBvZmZzZXQsIHgubyAtIHguZAorIworIyBOb3cgc29tZSBkZXJpdmVkIHJ1bGVzLCB3aGVyZSBrIGlzIGEgZHVyYXRpb24gKHRpbWVkZWx0YSkuCisjCisjIDEuIHgubyA9IHgucyArIHguZAorIyAgICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCisjCisjIDIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCisjICAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKKyMgICAgc2FuZSB0emluZm8gY2xhc3Nlcy4KKyMKKyMgMy4gVGhlIG5haXZlIFVUQyB0aW1lIGNvcnJlc3BvbmRpbmcgdG8geCBpcyB4Lm4gLSB4Lm8uCisjICAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KKyMKKyMgNC4gKHgraykucyA9IHgucworIyAgICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgorIworIyA1LiAoeCtrKS5uID0geC5uICsgaworIyAgICBBZ2FpbiBmb2xsb3dzIGZyb20gaG93IGFyaXRobWV0aWMgaXMgZGVmaW5lZC4KKyMKKyMgTm93IHdlIGNhbiBleHBsYWluIHR6LmZyb211dGMoeCkuICBMZXQncyBhc3N1bWUgaXQncyBhbiBpbnRlcmVzdGluZyBjYXNlCisjIChtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgorIyBOb25lIHdoZW4gY2FsbGVkKS4KKyMKKyMgVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgorIyB4IGlzIGFscmVhZHkgaW4gVVRDLgorIworIyBCeSAjMywgd2Ugd2FudAorIworIyAgICAgeS5uIC0geS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0KKyMKKyMgVGhlIGFsZ29yaXRobSBzdGFydHMgYnkgYXR0YWNoaW5nIHR6IHRvIHgubiwgYW5kIGNhbGxpbmcgdGhhdCB5LiAgU28KKyMgeC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQorIyBiZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6CisjCisjICAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQorIworIyBCeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcworIworIyAgICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KKyMKKyMgQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgorIyBTdWJzdGl0dXRpbmcgdGhhdCBpbnRvIFszXSwKKyMKKyMgICAgeC5uICsgayAtICh5K2spLnMgLSAoeStrKS5kID0geC5uOyB0aGUgeC5uIHRlcm1zIGNhbmNlbCwgbGVhdmluZworIyAgICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKKyMgICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCisjICAgIGsgPSB5LnMgLSAoeStrKS5kCisjCisjIE9uIHRoZSBSSFMsICh5K2spLmQgY2FuJ3QgYmUgY29tcHV0ZWQgZGlyZWN0bHksIGJ1dCB5LnMgY2FuIGJlLCBhbmQgd2UKKyMgYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKKyMgdmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKKyMgbGVzcyB0aGFuIDI0IGhvdXJzLiAgRm9yIHRoYXQgcmVhc29uLCBpZiB5IGlzIGZpcm1seSBpbiBzdGQgdGltZSwgKHkraykuZCBtdXN0CisjIGJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgorIworIyBJbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcworIworIyAgICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KKyMKKyMgSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKKyMgbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCisjCisjIEF0IHRoaXMgcG9pbnQsIGlmCisjCisjICAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQorIworIyB3ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKKyMgYXQgdGhlIHN0YXJ0IG9mIGRheWxpZ2h0IHRpbWUuICBQaWN0dXJlIFVTIEVhc3Rlcm4gZm9yIGNvbmNyZXRlbmVzcy4gIFRoZSB3YWxsCisjIHRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCisjIHNlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bworIyBiZSBFRFQgKGJlY2F1c2UgaXQncyAiYWZ0ZXIgMiIpLCB3aGljaCBpcyBhIHJlZHVuZGFudCBzcGVsbGluZyBvZiAxOk1NIEVTVAorIyBvbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKKyMgdGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KKyMKKyMgSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCisjIGJ1dCB0aGF0IHRha2VzIGEgYml0IG9mIHByb29mLiAgV2UgZmlyc3QgcHJvdmUgYSBzdHJvbmdlciByZXN1bHQuICBXaGF0J3MgdGhlCisjIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0CisjCisjICAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQorIworIyBOb3cKKyMgICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KKyMgICAgICh5ICsgeS5zKS5uID0gICAgICAgICAgICAgICBieSAjNQorIyAgICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgorIyAgICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS5zID0gei5zIGJ5ICMyCisjICAgICB4Lm4gKyB6LnMKKyMKKyMgUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCisjCisjICAgICBkaWZmID0KKyMgICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCisjICAgICB4Lm4gLSB4Lm4gLSB6LnMgKyB6Lm8gPSAgICAgICAgIGNhbmNlbGxpbmcKKyMgICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKKyMgICAgIHouZAorIworIyBTbyBkaWZmID0gei5kLgorIworIyBJZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKKyMgc3BlbGxpbmcgd2Ugd2FudGVkIGluIHRoZSBlbmRjYXNlIGRlc2NyaWJlZCBhYm92ZS4gIFdlJ3JlIGRvbmUuICBDb250cmFyaWx5LAorIyBpZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCisjCisjIElmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KKyMgYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQorIyBsb2NhbCBjbG9jayBpbnRvIHR6J3MgZGF5bGlnaHQgdGltZSkuCisjCisjIExldAorIworIyAgICAgeicgPSB6ICsgei5kID0geiArIGRpZmYgICAgICAgICAgICAgICAgICAgICBbN10KKyMKKyMgYW5kIHdlIGNhbiBhZ2FpbiBhc2sgd2hldGhlcgorIworIyAgICAgeicubiAtIHonLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICBbOF0KKyMKKyMgSWYgc28sIHdlJ3JlIGRvbmUuICBJZiBub3QsIHRoZSB0emluZm8gY2xhc3MgaXMgaW5zYW5lLCBhY2NvcmRpbmcgdG8gdGhlCisjIGFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCisjIGNvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgorIyB0aGUganVzdGlmaWNhdGlvbnMgZm9yIHRoZSBraW5kcyBvZiBzdWJzdGl0dXRpb25zIHdlJ3ZlIGRvbmUgc2V2ZXJhbCB0aW1lcworIyBhbHJlYWR5KToKKyMKKyMgICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCisjICAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQorIyAgICAgICAgICAgICB4Lm4gLSAoei5uICsgeC5uIC0gKHoubiAtIHoubykgLSB6Jy5vKSA9CisjICAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCisjICAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCisjICAgICAgICAgICAgIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICAgICAgICAgICMxIHR3aWNlCisjICAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KKyMgICAgICAgICAgICAgeicuZCAtIHouZAorIworIyBTbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKKyMgd2UndmUgZm91bmQgdGhlIFVUQy1lcXVpdmFsZW50IHNvIGFyZSBkb25lLiAgSW4gZmFjdCwgd2Ugc3RvcCB3aXRoIFs3XSBhbmQKKyMgcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KKyMKKyMgSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKKyMgYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKKyMgd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlc3VsdCBkc3QoKSByZXR1cm5zOiAgd2Ugc3RhcnQgaW4gRFNULCBhbmQgbW92aW5nCisjIGEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgorIworIyBUaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0CisjIHRoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKKyMgdHppbmZvIGNsYXNzLiAgSW4gVVMgRWFzdGVybiwgdGhhdCdzIDU6TU0gVVRDID0gMDpNTSBFU1QgPSAxOk1NIEVEVC4gIER1cmluZworIyB0aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCisjIFVUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKKyMgdGltZSAoNDpNTSBVVEMpLiAgVGhlcmUgaXMgbm8gbG9jYWwgdGltZSBtYXBwaW5nIHRvIDU6TU0gVVRDLiAgVGhlIGxvY2FsCisjIGNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KKyMgc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKKyMgVVRDIGhvdXJzIDU6TU0gYW5kIDY6TU0gdG8gMTpNTSBFYXN0ZXJuLiAgVGhlIHJlc3VsdCBpcyBhbWJpZ3VvdXMKKyMgaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KKyMKKyMgV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKKyMgc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgorIyB6JyA9IHogKyB6LmQgPSAxOk1NIHRoZW4sIGFuZCB6Jy5kPTAsIGFuZCB6Jy5kIC0gei5kID0gLTYwICE9IDAgc28gWzhdCisjIChjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgorIworIyBCZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAorIyB3ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKKyMgYW5kIHdlIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHRoZXJlIGFyZSBvbmx5IDIgcG9zc2libGUgdmFsdWVzIGRzdCgpIGNhbgorIyByZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKKyMgYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZworIyB0d28gcG9zc2libGUgZHN0KCkgb3V0Y29tZXMsIG9uZSB6ZXJvIGFuZCB0aGUgb3RoZXIgbm9uLXplcm8pLiAgVGhlcmVmb3JlCisjIHonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KKyMKKyMgTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKKyMgY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCisjIGRheWxpZ2h0IHRpbWUgd2UgaW50ZW5kIGhlcmUpLCBidXQgcmV0dXJuaW5nIGl0IGdpdmVzIHRoZSByZWFsLWxpZmUgImxvY2FsCisjIGNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KKyMgdHouCisjCisjIFdoZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKKyMgdGhlIDE6TU0gc3RhbmRhcmQgdGltZSBzcGVsbGluZyB3ZSB3YW50LgorIworIyBTbyBob3cgY2FuIHRoaXMgYnJlYWs/ICBPbmUgb2YgdGhlIGFzc3VtcHRpb25zIG11c3QgYmUgdmlvbGF0ZWQuICBUd28KKyMgcG9zc2liaWxpdGllczoKKyMKKyMgMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgorIyAgICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKKyMgICAgYSByZWdpb24gZGVjaWRlcyB0byBjaGFuZ2UgaXRzIGJhc2Ugb2Zmc2V0IGZyb20gVVRDLgorIworIyAyKSBUaGVyZSBtYXkgYmUgdmVyc2lvbnMgb2YgImRvdWJsZSBkYXlsaWdodCIgdGltZSB3aGVyZSB0aGUgdGFpbCBlbmQgb2YKKyMgICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0CisjICAgIGVub3VnaCB0byBzYXkuCisjCisjIEluIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCisjICJhbG1vc3QgYWxsIiB0aW1lIHpvbmVzOiAgc28gbG9uZyBhcyB0aGUgc3RhbmRhcmQgb2Zmc2V0IGlzIGludmFyaWFudCwgaXQKKyMgZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCisjIGlmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKKyMgc21hbGwgZHN0KCkgbWF5IGdldCB3aXRoaW4gaXRzIGJvdW5kczsgYW5kIGl0IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaWYgc29tZQorIyBwZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCisjIHByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KIAotMS4geC5vID0geC5zICsgeC5kCi0gICBUaGlzIGZvbGxvd3MgZnJvbSB0aGUgZGVmaW5pdGlvbiBvZiB4LnMuCi0KLTIuIElmIHggYW5kIHkgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLCB4LnMgPSB5LnMuCi0gICBUaGlzIGlzIGFjdHVhbGx5IGEgcmVxdWlyZW1lbnQsIGFuIGFzc3VtcHRpb24gd2UgbmVlZCB0byBtYWtlIGFib3V0Ci0gICBzYW5lIHR6aW5mbyBjbGFzc2VzLgotCi0zLiBUaGUgbmFpdmUgVVRDIHRpbWUgY29ycmVzcG9uZGluZyB0byB4IGlzIHgubiAtIHguby4KLSAgIFRoaXMgaXMgYWdhaW4gYSByZXF1aXJlbWVudCBmb3IgYSBzYW5lIHR6aW5mbyBjbGFzcy4KLQotNC4gKHgraykucyA9IHgucwotICAgVGhpcyBmb2xsb3dzIGZyb20gIzIsIGFuZCB0aGF0IGRhdGltZXRpbWV0eit0aW1lZGVsdGEgcHJlc2VydmVzIHR6aW5mby4KLQotNS4gKHgraykubiA9IHgubiArIGsKLSAgIEFnYWluIGZvbGxvd3MgZnJvbSBob3cgYXJpdGhtZXRpYyBpcyBkZWZpbmVkLgotCi1Ob3cgd2UgY2FuIGV4cGxhaW4gdHouZnJvbXV0Yyh4KS4gIExldCdzIGFzc3VtZSBpdCdzIGFuIGludGVyZXN0aW5nIGNhc2UKLShtZWFuaW5nIHRoYXQgdGhlIHZhcmlvdXMgdHppbmZvIG1ldGhvZHMgZXhpc3QsIGFuZCBkb24ndCBibG93IHVwIG9yIHJldHVybgotTm9uZSB3aGVuIGNhbGxlZCkuCi0KLVRoZSBmdW5jdGlvbiB3YW50cyB0byByZXR1cm4gYSBkYXRldGltZSB5IHdpdGggdGltZXpvbmUgdHosIGVxdWl2YWxlbnQgdG8geC4KLXggaXMgYWxyZWFkeSBpbiBVVEMuCi0KLUJ5ICMzLCB3ZSB3YW50Ci0KLSAgICB5Lm4gLSB5Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXQotCi1UaGUgYWxnb3JpdGhtIHN0YXJ0cyBieSBhdHRhY2hpbmcgdHogdG8geC5uLCBhbmQgY2FsbGluZyB0aGF0IHkuICBTbwoteC5uID0geS5uIGF0IHRoZSBzdGFydC4gIFRoZW4gaXQgd2FudHMgdG8gYWRkIGEgZHVyYXRpb24gayB0byB5LCBzbyB0aGF0IFsxXQotYmVjb21lcyB0cnVlOyBpbiBlZmZlY3QsIHdlIHdhbnQgdG8gc29sdmUgWzJdIGZvciBrOgotCi0gICAoeStrKS5uIC0gKHkraykubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICBbMl0KLQotQnkgIzEsIHRoaXMgaXMgdGhlIHNhbWUgYXMKLQotICAgKHkraykubiAtICgoeStrKS5zICsgKHkraykuZCkgPSB4Lm4gICAgICAgICAgWzNdCi0KLUJ5ICM1LCAoeStrKS5uID0geS5uICsgaywgd2hpY2ggZXF1YWxzIHgubiArIGsgYmVjYXVzZSB4Lm49eS5uIGF0IHRoZSBzdGFydC4KLVN1YnN0aXR1dGluZyB0aGF0IGludG8gWzNdLAotCi0gICB4Lm4gKyBrIC0gKHkraykucyAtICh5K2spLmQgPSB4Lm47IHRoZSB4Lm4gdGVybXMgY2FuY2VsLCBsZWF2aW5nCi0gICBrIC0gKHkraykucyAtICh5K2spLmQgPSAwOyByZWFycmFuZ2luZywKLSAgIGsgPSAoeStrKS5zIC0gKHkraykuZDsgYnkgIzQsICh5K2spLnMgPT0geS5zLCBzbwotICAgayA9IHkucyAtICh5K2spLmQKLQotT24gdGhlIFJIUywgKHkraykuZCBjYW4ndCBiZSBjb21wdXRlZCBkaXJlY3RseSwgYnV0IHkucyBjYW4gYmUsIGFuZCB3ZQotYXBwcm94aW1hdGUgayBieSBpZ25vcmluZyB0aGUgKHkraykuZCB0ZXJtIGF0IGZpcnN0LiAgTm90ZSB0aGF0IGsgY2FuJ3QgYmUKLXZlcnkgbGFyZ2UsIHNpbmNlIGFsbCBvZmZzZXQtcmV0dXJuaW5nIG1ldGhvZHMgcmV0dXJuIGEgZHVyYXRpb24gb2YgbWFnbml0dWRlCi1sZXNzIHRoYW4gMjQgaG91cnMuICBGb3IgdGhhdCByZWFzb24sIGlmIHkgaXMgZmlybWx5IGluIHN0ZCB0aW1lLCAoeStrKS5kIG11c3QKLWJlIDAsIHNvIGlnbm9yaW5nIGl0IGhhcyBubyBjb25zZXF1ZW5jZSB0aGVuLgotCi1JbiBhbnkgY2FzZSwgdGhlIG5ldyB2YWx1ZSBpcwotCi0gICAgeiA9IHkgKyB5LnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNF0KLQotSXQncyBoZWxwZnVsIHRvIHN0ZXAgYmFjayBhdCBsb29rIGF0IFs0XSBmcm9tIGEgaGlnaGVyIGxldmVsOiAgaXQncyBzaW1wbHkKLW1hcHBpbmcgZnJvbSBVVEMgdG8gdHoncyBzdGFuZGFyZCB0aW1lLgotCi1BdCB0aGlzIHBvaW50LCBpZgotCi0gICAgei5uIC0gei5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNV0KLQotd2UgaGF2ZSBhbiBlcXVpdmFsZW50IHRpbWUsIGFuZCBhcmUgYWxtb3N0IGRvbmUuICBUaGUgaW5zZWN1cml0eSBoZXJlIGlzCi1hdCB0aGUgc3RhcnQgb2YgZGF5bGlnaHQgdGltZS4gIFBpY3R1cmUgVVMgRWFzdGVybiBmb3IgY29uY3JldGVuZXNzLiAgVGhlIHdhbGwKLXRpbWUganVtcHMgZnJvbSAxOjU5IHRvIDM6MDAsIGFuZCB3YWxsIGhvdXJzIG9mIHRoZSBmb3JtIDI6TU0gZG9uJ3QgbWFrZSBnb29kCi1zZW5zZSB0aGVuLiAgVGhlIGRvY3MgYXNrIHRoYXQgYW4gRWFzdGVybiB0emluZm8gY2xhc3MgY29uc2lkZXIgc3VjaCBhIHRpbWUgdG8KLWJlIEVEVCAoYmVjYXVzZSBpdCdzICJhZnRlciAyIiksIHdoaWNoIGlzIGEgcmVkdW5kYW50IHNwZWxsaW5nIG9mIDE6TU0gRVNUCi1vbiB0aGUgZGF5IERTVCBzdGFydHMuICBXZSB3YW50IHRvIHJldHVybiB0aGUgMTpNTSBFU1Qgc3BlbGxpbmcgYmVjYXVzZSB0aGF0J3MKLXRoZSBvbmx5IHNwZWxsaW5nIHRoYXQgbWFrZXMgc2Vuc2Ugb24gdGhlIGxvY2FsIHdhbGwgY2xvY2suCi0KLUluIGZhY3QsIGlmIFs1XSBob2xkcyBhdCB0aGlzIHBvaW50LCB3ZSBkbyBoYXZlIHRoZSBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLAotYnV0IHRoYXQgdGFrZXMgYSBiaXQgb2YgcHJvb2YuICBXZSBmaXJzdCBwcm92ZSBhIHN0cm9uZ2VyIHJlc3VsdC4gIFdoYXQncyB0aGUKLWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzVdPyAgTGV0Ci0KLSAgICBkaWZmID0geC5uIC0gKHoubiAtIHoubykgICAgICAgICAgICAgICAgICAgIFs2XQotCi1Ob3cKLSAgICB6Lm4gPSAgICAgICAgICAgICAgICAgICAgICAgYnkgWzRdCi0gICAgKHkgKyB5LnMpLm4gPSAgICAgICAgICAgICAgIGJ5ICM1Ci0gICAgeS5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHkubiA9IHgubgotICAgIHgubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB6IGFuZCB5IGFyZSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LnMgPSB6LnMgYnkgIzIKLSAgICB4Lm4gKyB6LnMKLQotUGx1Z2dpbmcgdGhhdCBiYWNrIGludG8gWzZdIGdpdmVzCi0KLSAgICBkaWZmID0KLSAgICB4Lm4gLSAoKHgubiArIHoucykgLSB6Lm8pID0gICAgIGV4cGFuZGluZwotICAgIHgubiAtIHgubiAtIHoucyArIHoubyA9ICAgICAgICAgY2FuY2VsbGluZwotICAgIC0gei5zICsgei5vID0gICAgICAgICAgICAgICAgICAgYnkgIzIKLSAgICB6LmQKLQotU28gZGlmZiA9IHouZC4KLQotSWYgWzVdIGlzIHRydWUgbm93LCBkaWZmID0gMCwgc28gei5kID0gMCB0b28sIGFuZCB3ZSBoYXZlIHRoZSBzdGFuZGFyZC10aW1lCi1zcGVsbGluZyB3ZSB3YW50ZWQgaW4gdGhlIGVuZGNhc2UgZGVzY3JpYmVkIGFib3ZlLiAgV2UncmUgZG9uZS4gIENvbnRyYXJpbHksCi1pZiB6LmQgPSAwLCB0aGVuIHdlIGhhdmUgYSBVVEMgZXF1aXZhbGVudCwgYW5kIGFyZSBhbHNvIGRvbmUuCi0KLUlmIFs1XSBpcyBub3QgdHJ1ZSBub3csIGRpZmYgPSB6LmQgIT0gMCwgYW5kIHouZCBpcyB0aGUgb2Zmc2V0IHdlIG5lZWQgdG8KLWFkZCB0byB6IChpbiBlZmZlY3QsIHogaXMgaW4gdHoncyBzdGFuZGFyZCB0aW1lLCBhbmQgd2UgbmVlZCB0byBzaGlmdCB0aGUKLWxvY2FsIGNsb2NrIGludG8gdHoncyBkYXlsaWdodCB0aW1lKS4KLQotTGV0Ci0KLSAgICB6JyA9IHogKyB6LmQgPSB6ICsgZGlmZiAgICAgICAgICAgICAgICAgICAgIFs3XQotCi1hbmQgd2UgY2FuIGFnYWluIGFzayB3aGV0aGVyCi0KLSAgICB6Jy5uIC0geicubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4XQotCi1JZiBzbywgd2UncmUgZG9uZS4gIElmIG5vdCwgdGhlIHR6aW5mbyBjbGFzcyBpcyBpbnNhbmUsIGFjY29yZGluZyB0byB0aGUKLWFzc3VtcHRpb25zIHdlJ3ZlIG1hZGUuICBUaGlzIGFsc28gcmVxdWlyZXMgYSBiaXQgb2YgcHJvb2YuICBBcyBiZWZvcmUsIGxldCdzCi1jb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs4XSAoYW5kIHNraXBwaW5nIHNvbWUgb2YKLXRoZSBqdXN0aWZpY2F0aW9ucyBmb3IgdGhlIGtpbmRzIG9mIHN1YnN0aXR1dGlvbnMgd2UndmUgZG9uZSBzZXZlcmFsIHRpbWVzCi1hbHJlYWR5KToKLQotICAgIGRpZmYnID0geC5uIC0gKHonLm4gLSB6Jy5vKSA9ICAgICAgICAgICByZXBsYWNpbmcgeicubiB2aWEgWzddCi0gICAgICAgICAgICB4Lm4gIC0gKHoubiArIGRpZmYgLSB6Jy5vKSA9ICAgIHJlcGxhY2luZyBkaWZmIHZpYSBbNl0KLSAgICAgICAgICAgIHgubiAtICh6Lm4gKyB4Lm4gLSAoei5uIC0gei5vKSAtIHonLm8pID0KLSAgICAgICAgICAgIHgubiAtIHoubiAtIHgubiArIHoubiAtIHoubyArIHonLm8gPSAgICBjYW5jZWwgeC5uCi0gICAgICAgICAgICAtIHoubiArIHoubiAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgY2FuY2VsIHoubgotICAgICAgICAgICAgLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgICAgICAgICAgIzEgdHdpY2UKLSAgICAgICAgICAgIC16LnMgLSB6LmQgKyB6Jy5zICsgeicuZCA9ICAgICAgICAgIHogYW5kIHonIGhhdmUgc2FtZSB0emluZm8KLSAgICAgICAgICAgIHonLmQgLSB6LmQKLQotU28geicgaXMgVVRDLWVxdWl2YWxlbnQgdG8geCBpZmYgeicuZCA9IHouZCBhdCB0aGlzIHBvaW50LiAgSWYgdGhleSBhcmUgZXF1YWwsCi13ZSd2ZSBmb3VuZCB0aGUgVVRDLWVxdWl2YWxlbnQgc28gYXJlIGRvbmUuICBJbiBmYWN0LCB3ZSBzdG9wIHdpdGggWzddIGFuZAotcmV0dXJuIHonLCBub3QgYm90aGVyaW5nIHRvIGNvbXB1dGUgeicuZC4KLQotSG93IGNvdWxkIHouZCBhbmQgeidkIGRpZmZlcj8gIHonID0geiArIHouZCBbN10sIHNvIG1lcmVseSBtb3ZpbmcgeicgYnkKLWEgZHN0KCkgb2Zmc2V0LCBhbmQgc3RhcnRpbmcgKmZyb20qIGEgdGltZSBhbHJlYWR5IGluIERTVCAod2Uga25vdyB6LmQgIT0gMCksCi13b3VsZCBoYXZlIHRvIGNoYW5nZSB0aGUgcmVzdWx0IGRzdCgpIHJldHVybnM6ICB3ZSBzdGFydCBpbiBEU1QsIGFuZCBtb3ZpbmcKLWEgbGl0dGxlIGZ1cnRoZXIgaW50byBpdCB0YWtlcyB1cyBvdXQgb2YgRFNULgotCi1UaGVyZSBpc24ndCBhIHNhbmUgY2FzZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4uICBUaGUgY2xvc2VzdCBpdCBnZXRzIGlzIGF0Ci10aGUgZW5kIG9mIERTVCwgd2hlcmUgdGhlcmUncyBhbiBob3VyIGluIFVUQyB3aXRoIG5vIHNwZWxsaW5nIGluIGEgaHlicmlkCi10emluZm8gY2xhc3MuICBJbiBVUyBFYXN0ZXJuLCB0aGF0J3MgNTpNTSBVVEMgPSAwOk1NIEVTVCA9IDE6TU0gRURULiAgRHVyaW5nCi10aGF0IGhvdXIsIG9uIGFuIEVhc3Rlcm4gY2xvY2sgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lICg2Ok1NCi1VVEMpIGJlY2F1c2UgdGhlIGRvY3MgaW5zaXN0IG9uIHRoYXQsIGJ1dCAwOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIGRheWxpZ2h0Ci10aW1lICg0Ok1NIFVUQykuICBUaGVyZSBpcyBubyBsb2NhbCB0aW1lIG1hcHBpbmcgdG8gNTpNTSBVVEMuICBUaGUgbG9jYWwKLWNsb2NrIGp1bXBzIGZyb20gMTo1OSBiYWNrIHRvIDE6MDAgYWdhaW4sIGFuZCByZXBlYXRzIHRoZSAxOk1NIGhvdXIgaW4KLXN0YW5kYXJkIHRpbWUuICBTaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbG9jYWwgY2xvY2sgKmRvZXMqLCB3ZSB3YW50IHRvIG1hcCBib3RoCi1VVEMgaG91cnMgNTpNTSBhbmQgNjpNTSB0byAxOk1NIEVhc3Rlcm4uICBUaGUgcmVzdWx0IGlzIGFtYmlndW91cwotaW4gbG9jYWwgdGltZSwgYnV0IHNvIGl0IGdvZXMgLS0gaXQncyB0aGUgd2F5IHRoZSBsb2NhbCBjbG9jayB3b3Jrcy4KLQotV2hlbiB4ID0gNTpNTSBVVEMgaXMgdGhlIGlucHV0IHRvIHRoaXMgYWxnb3JpdGhtLCB4Lm89MCwgeS5vPS01IGFuZCB5LmQ9MCwKLXNvIHo9MDpNTS4gIHouZD02MCAobWludXRlcykgdGhlbiwgc28gWzVdIGRvZXNuJ3QgaG9sZCBhbmQgd2Uga2VlcCBnb2luZy4KLXonID0geiArIHouZCA9IDE6TU0gdGhlbiwgYW5kIHonLmQ9MCwgYW5kIHonLmQgLSB6LmQgPSAtNjAgIT0gMCBzbyBbOF0KLShjb3JyZWN0bHkpIGNvbmNsdWRlcyB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCB0byB4LgotCi1CZWNhdXNlIHdlIGtub3cgei5kIHNhaWQgeiB3YXMgaW4gZGF5bGlnaHQgdGltZSAoZWxzZSBbNV0gd291bGQgaGF2ZSBoZWxkIGFuZAotd2Ugd291bGQgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgd2Uga25vdyB6LmQgIT0geicuZCAoZWxzZSBbOF0gd291bGQgaGF2ZSBoZWxkCi1hbmQgd2UgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgdGhlcmUgYXJlIG9ubHkgMiBwb3NzaWJsZSB2YWx1ZXMgZHN0KCkgY2FuCi1yZXR1cm4gaW4gRWFzdGVybiwgaXQgZm9sbG93cyB0aGF0IHonLmQgbXVzdCBiZSAwICh3aGljaCBpdCBpcyBpbiB0aGUgZXhhbXBsZSwKLWJ1dCB0aGUgcmVhc29uaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBleGFtcGxlIC0tIGl0IGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKLXR3byBwb3NzaWJsZSBkc3QoKSBvdXRjb21lcywgb25lIHplcm8gYW5kIHRoZSBvdGhlciBub24temVybykuICBUaGVyZWZvcmUKLXonIG11c3QgYmUgaW4gc3RhbmRhcmQgdGltZSwgYW5kIGlzIHRoZSBzcGVsbGluZyB3ZSB3YW50IGluIHRoaXMgY2FzZS4KLQotTm90ZSBhZ2FpbiB0aGF0IHonIGlzIG5vdCBVVEMtZXF1aXZhbGVudCBhcyBmYXIgYXMgdGhlIGh5YnJpZCB0emluZm8gY2xhc3MgaXMKLWNvbmNlcm5lZCAoYmVjYXVzZSBpdCB0YWtlcyB6JyBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lIHJhdGhlciB0aGFuIHRoZQotZGF5bGlnaHQgdGltZSB3ZSBpbnRlbmQgaGVyZSksIGJ1dCByZXR1cm5pbmcgaXQgZ2l2ZXMgdGhlIHJlYWwtbGlmZSAibG9jYWwKLWNsb2NrIHJlcGVhdHMgYW4gaG91ciIgYmVoYXZpb3Igd2hlbiBtYXBwaW5nIHRoZSAidW5zcGVsbGFibGUiIFVUQyBob3VyIGludG8KLXR6LgotCi1XaGVuIHRoZSBpbnB1dCBpcyA2Ok1NLCB6PTE6TU0gYW5kIHouZD0wLCBhbmQgd2Ugc3RvcCBhdCBvbmNlLCBhZ2FpbiB3aXRoCi10aGUgMTpNTSBzdGFuZGFyZCB0aW1lIHNwZWxsaW5nIHdlIHdhbnQuCi0KLVNvIGhvdyBjYW4gdGhpcyBicmVhaz8gIE9uZSBvZiB0aGUgYXNzdW1wdGlvbnMgbXVzdCBiZSB2aW9sYXRlZC4gIFR3bwotcG9zc2liaWxpdGllczoKLQotMSkgWzJdIGVmZmVjdGl2ZWx5IHNheXMgdGhhdCB5LnMgaXMgaW52YXJpYW50IGFjcm9zcyBhbGwgeSBiZWxvbmcgdG8gYSBnaXZlbgotICAgdGltZSB6b25lLiAgVGhpcyBpc24ndCB0cnVlIGlmLCBmb3IgcG9saXRpY2FsIHJlYXNvbnMgb3IgY29udGluZW50YWwgZHJpZnQsCi0gICBhIHJlZ2lvbiBkZWNpZGVzIHRvIGNoYW5nZSBpdHMgYmFzZSBvZmZzZXQgZnJvbSBVVEMuCi0KLTIpIFRoZXJlIG1heSBiZSB2ZXJzaW9ucyBvZiAiZG91YmxlIGRheWxpZ2h0IiB0aW1lIHdoZXJlIHRoZSB0YWlsIGVuZCBvZgotICAgdGhlIGFuYWx5c2lzIGdpdmVzIHVwIGEgc3RlcCB0b28gZWFybHkuICBJIGhhdmVuJ3QgdGhvdWdodCBhYm91dCB0aGF0Ci0gICBlbm91Z2ggdG8gc2F5LgotCi1JbiBhbnkgY2FzZSwgaXQncyBjbGVhciB0aGF0IHRoZSBkZWZhdWx0IGZyb211dGMoKSBpcyBzdHJvbmcgZW5vdWdoIHRvIGhhbmRsZQotImFsbW9zdCBhbGwiIHRpbWUgem9uZXM6ICBzbyBsb25nIGFzIHRoZSBzdGFuZGFyZCBvZmZzZXQgaXMgaW52YXJpYW50LCBpdAotZG9lc24ndCBtYXR0ZXIgaWYgZGF5bGlnaHQgdGltZSB0cmFuc2l0aW9uIHBvaW50cyBjaGFuZ2UgZnJvbSB5ZWFyIHRvIHllYXIsIG9yCi1pZiBkYXlsaWdodCB0aW1lIGlzIHNraXBwZWQgaW4gc29tZSB5ZWFyczsgaXQgZG9lc24ndCBtYXR0ZXIgaG93IGxhcmdlIG9yCi1zbWFsbCBkc3QoKSBtYXkgZ2V0IHdpdGhpbiBpdHMgYm91bmRzOyBhbmQgaXQgZG9lc24ndCBldmVuIG1hdHRlciBpZiBzb21lCi1wZXJ2ZXJzZSB0aW1lIHpvbmUgcmV0dXJucyBhIG5lZ2F0aXZlIGRzdCgpKS4gIFNvIGEgYnJlYWtpbmcgY2FzZSBtdXN0IGJlCi1wcmV0dHkgYml6YXJyZSwgYW5kIGEgdHppbmZvIHN1YmNsYXNzIGNhbiBvdmVycmlkZSBmcm9tdXRjKCkgaWYgaXQgaXMuCi0iIiIKIHRyeToKICAgICBmcm9tIF9kYXRldGltZSBpbXBvcnQgKgogZXhjZXB0IEltcG9ydEVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL2RibS9fX2luaXRfXy5weSBiL0xpYi9kYm0vX19pbml0X18ucHkKaW5kZXggYTc4M2ZkZS4uNWY0NjY0YSAxMDA2NDQKLS0tIGEvTGliL2RibS9fX2luaXRfXy5weQorKysgYi9MaWIvZGJtL19faW5pdF9fLnB5CkBAIC00Miw3ICs0Miw3IEBACiBfZGVmYXVsdG1vZCA9IE5vbmUKIF9tb2R1bGVzID0ge30KIAotZXJyb3IgPSAoZXJyb3IsIElPRXJyb3IpCitlcnJvciA9IChlcnJvciwgT1NFcnJvcikKIAogdHJ5OgogICAgIGZyb20gZGJtIGltcG9ydCBuZGJtCkBAIC0xMTEsMTIgKzExMSwxMCBAQAogICAgIHRyeToKICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLnBhZyIsICJyYiIpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAjIGRibSBsaW5rZWQgd2l0aCBnZGJtIG9uIE9TLzIgZG9lc24ndCBoYXZlIC5kaXIgZmlsZQotICAgICAgICBpZiBub3QgKG5kYm0ubGlicmFyeSA9PSAiR05VIGdkYm0iIGFuZCBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCIpOgotICAgICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUgKyAiLmRpciIsICJyYiIpCisgICAgICAgIGYuY2xvc2UoKQogICAgICAgICByZXR1cm4gImRibS5uZGJtIgotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIHNvbWUgZGJtIGVtdWxhdGlvbnMgYmFzZWQgb24gQmVya2VsZXkgREIgZ2VuZXJhdGUgYSAuZGIgZmlsZQogICAgICAgICAjIHNvbWUgZG8gbm90LCBidXQgdGhleSBzaG91bGQgYmUgY2F1Z2h0IGJ5IHRoZSBic2QgY2hlY2tzCiAgICAgICAgIHRyeToKQEAgLTEyOSw3ICsxMjcsNyBAQAogICAgICAgICAgICAgICAgIGQgPSBuZGJtLm9wZW4oZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0ubmRibSIKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyBDaGVjayBmb3IgZHVtYmRibSBuZXh0IC0tIHRoaXMgaGFzIGEgLmRpciBhbmQgYSAuZGF0IGZpbGUKQEAgLTE0NiwxMyArMTQ0LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuICJkYm0uZHVtYiIKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgIGV4Y2VwdCAoT1NFcnJvciwgSU9FcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKIAogICAgICMgU2VlIGlmIHRoZSBmaWxlIGV4aXN0cywgcmV0dXJuIE5vbmUgaWYgbm90CiAgICAgdHJ5OgogICAgICAgICBmID0gaW8ub3BlbihmaWxlbmFtZSwgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgICMgUmVhZCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgLS0gdGhlIG1hZ2ljIG51bWJlcgpkaWZmIC0tZ2l0IGEvTGliL2RibS9kdW1iLnB5IGIvTGliL2RibS9kdW1iLnB5CmluZGV4IGNmYjkxMjMuLmJhNmEyMGQgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vZHVtYi5weQorKysgYi9MaWIvZGJtL2R1bWIucHkKQEAgLTI5LDcgKzI5LDcgQEAKIAogX0JMT0NLU0laRSA9IDUxMgogCi1lcnJvciA9IElPRXJyb3IKK2Vycm9yID0gT1NFcnJvcgogCiBjbGFzcyBfRGF0YWJhc2UoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgogCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgICAgICMgTW9kIGJ5IEphY2s6IGNyZWF0ZSBkYXRhIGZpbGUgaWYgbmVlZGVkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfaW8ub3BlbihzZWxmLl9kYXRmaWxlLCAncicsIGVuY29kaW5nPSJMYXRpbi0xIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQogICAgICAgICAgICAgc2VsZi5fY2htb2Qoc2VsZi5fZGF0ZmlsZSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHNlbGYuX2luZGV4ID0ge30KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICdyJywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgpAQCAtMTAwLDEyICsxMDAsMTIgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9vcy51bmxpbmsoc2VsZi5fYmFrZmlsZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9vcy5yZW5hbWUoc2VsZi5fZGlyZmlsZSwgc2VsZi5fYmFrZmlsZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuX29zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBmID0gc2VsZi5faW8ub3BlbihzZWxmLl9kaXJmaWxlLCAndycsIGVuY29kaW5nPSJMYXRpbi0xIikKQEAgLTIzNiw2ICsyMzYsMTIgQEAKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLl9vcywgJ2NobW9kJyk6CiAgICAgICAgICAgICBzZWxmLl9vcy5jaG1vZChmaWxlLCBzZWxmLl9tb2RlKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAKIGRlZiBvcGVuKGZpbGUsIGZsYWc9Tm9uZSwgbW9kZT0wbzY2Nik6CiAgICAgIiIiT3BlbiB0aGUgZGF0YWJhc2UgZmlsZSwgZmlsZW5hbWUsIGFuZCByZXR1cm4gY29ycmVzcG9uZGluZyBvYmplY3QuCmRpZmYgLS1naXQgYS9MaWIvZGVjaW1hbC5weSBiL0xpYi9kZWNpbWFsLnB5CmluZGV4IDlmMzdlNGYuLjdiYzFjOTQgMTAwNjQ0Ci0tLSBhL0xpYi9kZWNpbWFsLnB5CisrKyBiL0xpYi9kZWNpbWFsLnB5CkBAIC03MDQsOCArNzA0LDcgQEAKIAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvIERlY2ltYWwiICUgdmFsdWUpCiAKLSAgICAjIEBjbGFzc21ldGhvZCwgYnV0IEBkZWNvcmF0b3IgaXMgbm90IHZhbGlkIFB5dGhvbiAyLjMgc3ludGF4LCBzbwotICAgICMgZG9uJ3QgdXNlIGl0IChzZWUgbm90ZXMgb24gUHkyLjMgY29tcGF0aWJpbGl0eSBhdCB0b3Agb2YgZmlsZSkKKyAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZnJvbV9mbG9hdChjbHMsIGYpOgogICAgICAgICAiIiJDb252ZXJ0cyBhIGZsb2F0IHRvIGEgZGVjaW1hbCBudW1iZXIsIGV4YWN0bHkuCiAKQEAgLTc0NCw3ICs3NDMsNiBAQAogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIGNscyhyZXN1bHQpCi0gICAgZnJvbV9mbG9hdCA9IGNsYXNzbWV0aG9kKGZyb21fZmxvYXQpCiAKICAgICBkZWYgX2lzbmFuKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIG51bWJlciBpcyBub3QgYWN0dWFsbHkgb25lLgpkaWZmIC0tZ2l0IGEvTGliL2RpZmZsaWIucHkgYi9MaWIvZGlmZmxpYi5weQppbmRleCBmZTk0Y2M0Li4xNTljYmU0IDEwMDY0NAotLS0gYS9MaWIvZGlmZmxpYi5weQorKysgYi9MaWIvZGlmZmxpYi5weQpAQCAtMzM2LDIwICszMzYsNiBAQAogICAgICAgICAgICAgZm9yIGVsdCBpbiBwb3B1bGFyOiAjIGRpdHRvOyBhcyBmYXN0IGZvciAxJSBkZWxldGlvbgogICAgICAgICAgICAgICAgIGRlbCBiMmpbZWx0XQogCi0gICAgZGVmIGlzYmp1bmsoc2VsZiwgaXRlbSk6Ci0gICAgICAgICJEZXByZWNhdGVkOyB1c2UgJ2l0ZW0gaW4gU2VxdWVuY2VNYXRjaGVyKCkuYmp1bmsnLiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiJ1NlcXVlbmNlTWF0Y2hlcigpLmlzYmp1bmsoaXRlbSknIGlzIGRlcHJlY2F0ZWQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgInVzZSAnaXRlbSBpbiBTTWluc3RhbmNlLmJqdW5rJyBpbnN0ZWFkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLmJqdW5rCi0KLSAgICBkZWYgaXNicG9wdWxhcihzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5icG9wdWxhcicuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNicG9wdWxhcihpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYnBvcHVsYXInIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYnBvcHVsYXIKLQogICAgIGRlZiBmaW5kX2xvbmdlc3RfbWF0Y2goc2VsZiwgYWxvLCBhaGksIGJsbywgYmhpKToKICAgICAgICAgIiIiRmluZCBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGluIGFbYWxvOmFoaV0gYW5kIGJbYmxvOmJoaV0uCiAKQEAgLTkyMiw4ICs5MDgsNyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmtub3duIHRhZyAlcicgJSAodGFnLCkpCiAKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBnCiAKICAgICBkZWYgX2R1bXAoc2VsZiwgdGFnLCB4LCBsbywgaGkpOgogICAgICAgICAiIiJHZW5lcmF0ZSBjb21wYXJpc29uIHJlc3VsdHMgZm9yIGEgc2FtZS10YWdnZWQgcmFuZ2UuIiIiCkBAIC05NDIsOCArOTI3LDcgQEAKICAgICAgICAgICAgIHNlY29uZCA9IHNlbGYuX2R1bXAoJysnLCBiLCBibG8sIGJoaSkKIAogICAgICAgICBmb3IgZyBpbiBmaXJzdCwgc2Vjb25kOgotICAgICAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfZmFuY3lfcmVwbGFjZShzZWxmLCBhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpOgogICAgICAgICByIiIiCkBAIC05OTcsOCArOTgxLDcgQEAKICAgICAgICAgICAgICMgbm8gbm9uLWlkZW50aWNhbCAicHJldHR5IGNsb3NlIiBwYWlyCiAgICAgICAgICAgICBpZiBlcWkgaXMgTm9uZToKICAgICAgICAgICAgICAgICAjIG5vIGlkZW50aWNhbCBwYWlyIGVpdGhlciAtLSB0cmVhdCBpdCBhcyBhIHN0cmFpZ2h0IHJlcGxhY2UKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9wbGFpbl9yZXBsYWNlKGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSk6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3BsYWluX3JlcGxhY2UoYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIyBubyBjbG9zZSBwYWlyLCBidXQgYW4gaWRlbnRpY2FsIHBhaXIgLS0gc3luY2ggdXAgb24gdGhhdAogICAgICAgICAgICAgYmVzdF9pLCBiZXN0X2osIGJlc3RfcmF0aW8gPSBlcWksIGVxaiwgMS4wCkBAIC0xMDEwLDggKzk5Myw3IEBACiAgICAgICAgICMgaWRlbnRpY2FsCiAKICAgICAgICAgIyBwdW1wIG91dCBkaWZmcyBmcm9tIGJlZm9yZSB0aGUgc3luY2ggcG9pbnQKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGFsbywgYmVzdF9pLCBiLCBibG8sIGJlc3Rfaik6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGFsbywgYmVzdF9pLCBiLCBibG8sIGJlc3RfaikKIAogICAgICAgICAjIGRvIGludHJhbGluZSBtYXJraW5nIG9uIHRoZSBzeW5jaCBwYWlyCiAgICAgICAgIGFlbHQsIGJlbHQgPSBhW2Jlc3RfaV0sIGJbYmVzdF9qXQpAQCAtMTAzMywxNSArMTAxNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICBidGFncyArPSAnICcgKiBsYgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gdGFnICVyJyAlICh0YWcsKSkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYuX3Fmb3JtYXQoYWVsdCwgYmVsdCwgYXRhZ3MsIGJ0YWdzKToKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3Fmb3JtYXQoYWVsdCwgYmVsdCwgYXRhZ3MsIGJ0YWdzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyB0aGUgc3luY2ggcGFpciBpcyBpZGVudGljYWwKICAgICAgICAgICAgIHlpZWxkICcgICcgKyBhZWx0CiAKICAgICAgICAgIyBwdW1wIG91dCBkaWZmcyBmcm9tIGFmdGVyIHRoZSBzeW5jaCBwb2ludAotICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9mYW5jeV9oZWxwZXIoYSwgYmVzdF9pKzEsIGFoaSwgYiwgYmVzdF9qKzEsIGJoaSk6Ci0gICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGJlc3RfaSsxLCBhaGksIGIsIGJlc3RfaisxLCBiaGkpCiAKICAgICBkZWYgX2ZhbmN5X2hlbHBlcihzZWxmLCBhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpOgogICAgICAgICBnID0gW10KQEAgLTEwNTMsOCArMTAzMyw3IEBACiAgICAgICAgIGVsaWYgYmxvIDwgYmhpOgogICAgICAgICAgICAgZyA9IHNlbGYuX2R1bXAoJysnLCBiLCBibG8sIGJoaSkKIAotICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICB5aWVsZCBmcm9tIGcKIAogICAgIGRlZiBfcWZvcm1hdChzZWxmLCBhbGluZSwgYmxpbmUsIGF0YWdzLCBidGFncyk6CiAgICAgICAgIHIiIiIKZGlmZiAtLWdpdCBhL0xpYi9kaXMucHkgYi9MaWIvZGlzLnB5CmluZGV4IDU0M2ZkYzcuLjgxY2JlN2YgMTAwNjQ0Ci0tLSBhL0xpYi9kaXMucHkKKysrIGIvTGliL2Rpcy5weQpAQCAtMiwxMiArMiwxNSBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCiAKIGZyb20gb3Bjb2RlIGltcG9ydCAqCiBmcm9tIG9wY29kZSBpbXBvcnQgX19hbGxfXyBhcyBfb3Bjb2Rlc19hbGwKIAogX19hbGxfXyA9IFsiY29kZV9pbmZvIiwgImRpcyIsICJkaXNhc3NlbWJsZSIsICJkaXN0YiIsICJkaXNjbyIsCi0gICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSJdICsgX29wY29kZXNfYWxsCisgICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSIsCisgICAgICAgICAgICJnZXRfaW5zdHJ1Y3Rpb25zIiwgIkluc3RydWN0aW9uIiwgIkJ5dGVjb2RlIl0gKyBfb3Bjb2Rlc19hbGwKIGRlbCBfb3Bjb2Rlc19hbGwKIAogX2hhdmVfY29kZSA9ICh0eXBlcy5NZXRob2RUeXBlLCB0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLkNvZGVUeXBlLCB0eXBlKQpAQCAtMjUsMTQgKzI4LDE0IEBACiAgICAgICAgIGMgPSBjb21waWxlKHNvdXJjZSwgbmFtZSwgJ2V4ZWMnKQogICAgIHJldHVybiBjCiAKLWRlZiBkaXMoeD1Ob25lKToKK2RlZiBkaXMoeD1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICIiIkRpc2Fzc2VtYmxlIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4KIAogICAgIFdpdGggbm8gYXJndW1lbnQsIGRpc2Fzc2VtYmxlIHRoZSBsYXN0IHRyYWNlYmFjay4KIAogICAgICIiIgogICAgIGlmIHggaXMgTm9uZToKLSAgICAgICAgZGlzdGIoKQorICAgICAgICBkaXN0YihmaWxlPWZpbGUpCiAgICAgICAgIHJldHVybgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwpAQCAtNDIsMjMgKzQ1LDIzIEBACiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHguX19kaWN0X18uaXRlbXMoKSkKICAgICAgICAgZm9yIG5hbWUsIHgxIGluIGl0ZW1zOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4MSwgX2hhdmVfY29kZSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHByaW50KCJEaXNhc3NlbWJseSBvZiAlczoiICUgbmFtZSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGlzKHgxKQorICAgICAgICAgICAgICAgICAgICBkaXMoeDEsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZykKLSAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJTb3JyeToiLCBtc2csIGZpbGU9ZmlsZSkKKyAgICAgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCiAgICAgZWxpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICMgQ29kZSBvYmplY3QKLSAgICAgICAgZGlzYXNzZW1ibGUoeCkKKyAgICAgICAgZGlzYXNzZW1ibGUoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOiAjIFJhdyBieXRlY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKHgsIGZpbGU9ZmlsZSkKICAgICBlbGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgIyBTb3VyY2UgY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfc3RyKHgpCisgICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCwgZmlsZT1maWxlKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKIAotZGVmIGRpc3RiKHRiPU5vbmUpOgorZGVmIGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgYSB0cmFjZWJhY2sgKGRlZmF1bHQ6IGxhc3QgdHJhY2ViYWNrKS4iIiIKICAgICBpZiB0YiBpcyBOb25lOgogICAgICAgICB0cnk6CkBAIC02Niw3ICs2OSw3IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigibm8gbGFzdCB0cmFjZWJhY2sgdG8gZGlzYXNzZW1ibGUiKQogICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKLSAgICBkaXNhc3NlbWJsZSh0Yi50Yl9mcmFtZS5mX2NvZGUsIHRiLnRiX2xhc3RpKQorICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGksIGZpbGU9ZmlsZSkKIAogIyBUaGUgaW5zcGVjdCBtb2R1bGUgaW50ZXJyb2dhdGVzIHRoaXMgZGljdGlvbmFyeSB0byBidWlsZCBpdHMKICMgbGlzdCBvZiBDT18qIGNvbnN0YW50cy4gSXQgaXMgYWxzbyB1c2VkIGJ5IHByZXR0eV9mbGFncyB0bwpAQCAtOTUsMTkgKzk4LDIyIEBACiAgICAgICAgIG5hbWVzLmFwcGVuZChoZXgoZmxhZ3MpKQogICAgIHJldHVybiAiLCAiLmpvaW4obmFtZXMpCiAKLWRlZiBjb2RlX2luZm8oeCk6Ci0gICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorZGVmIF9nZXRfY29kZV9vYmplY3QoeCk6CisgICAgIiIiSGVscGVyIHRvIGhhbmRsZSBtZXRob2RzLCBmdW5jdGlvbnMsIHN0cmluZ3MgYW5kIHJhdyBjb2RlIG9iamVjdHMiIiIKICAgICBpZiBoYXNhdHRyKHgsICdfX2Z1bmNfXycpOiAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwogICAgIGlmIGhhc2F0dHIoeCwgJ19fY29kZV9fJyk6ICMgRnVuY3Rpb24KICAgICAgICAgeCA9IHguX19jb2RlX18KICAgICBpZiBpc2luc3RhbmNlKHgsIHN0cik6ICAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIHggPSBfdHJ5X2NvbXBpbGUoeCwgIjxjb2RlX2luZm8+IikKKyAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGRpc2Fzc2VtYmx5PiIpCiAgICAgaWYgaGFzYXR0cih4LCAnY29fY29kZScpOiAgIyBDb2RlIG9iamVjdAotICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oeCkKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisgICAgICAgIHJldHVybiB4CisgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCisgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisKK2RlZiBjb2RlX2luZm8oeCk6CisgICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyhfZ2V0X2NvZGVfb2JqZWN0KHgpKQogCiBkZWYgX2Zvcm1hdF9jb2RlX2luZm8oY28pOgogICAgIGxpbmVzID0gW10KQEAgLTE0MCwxMDYgKzE0NiwyMDYgQEAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJTRkOiAlcyIgJSBpX24pCiAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKIAotZGVmIHNob3dfY29kZShjbyk6Ci0gICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gc3Rkb3V0LiIiIgotICAgIHByaW50KGNvZGVfaW5mbyhjbykpCitkZWYgc2hvd19jb2RlKGNvLCAqLCBmaWxlPU5vbmUpOgorICAgICIiIlByaW50IGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlIHRvICpmaWxlKi4KIAotZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSk6Ci0gICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKLSAgICBjb2RlID0gY28uY29fY29kZQotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBJZiAqZmlsZSogaXMgbm90IHByb3ZpZGVkLCB0aGUgb3V0cHV0IGlzIHByaW50ZWQgb24gc3Rkb3V0LgorICAgICIiIgorICAgIHByaW50KGNvZGVfaW5mbyhjbyksIGZpbGU9ZmlsZSkKKworX0luc3RydWN0aW9uID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0luc3RydWN0aW9uIiwKKyAgICAgIm9wbmFtZSBvcGNvZGUgYXJnIGFyZ3ZhbCBhcmdyZXByIG9mZnNldCBzdGFydHNfbGluZSBpc19qdW1wX3RhcmdldCIpCisKK2NsYXNzIEluc3RydWN0aW9uKF9JbnN0cnVjdGlvbik6CisgICAgIiIiRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgICAgIERlZmluZWQgZmllbGRzOgorICAgICAgICAgb3BuYW1lIC0gaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBvcGNvZGUgLSBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbgorICAgICAgICAgYXJnIC0gbnVtZXJpYyBhcmd1bWVudCB0byBvcGVyYXRpb24gKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisgICAgICAgICBhcmd2YWwgLSByZXNvbHZlZCBhcmcgdmFsdWUgKGlmIGtub3duKSwgb3RoZXJ3aXNlIHNhbWUgYXMgYXJnCisgICAgICAgICBhcmdyZXByIC0gaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygb3BlcmF0aW9uIGFyZ3VtZW50CisgICAgICAgICBvZmZzZXQgLSBzdGFydCBpbmRleCBvZiBvcGVyYXRpb24gd2l0aGluIGJ5dGVjb2RlIHNlcXVlbmNlCisgICAgICAgICBzdGFydHNfbGluZSAtIGxpbmUgc3RhcnRlZCBieSB0aGlzIG9wY29kZSAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGlzX2p1bXBfdGFyZ2V0IC0gVHJ1ZSBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBGYWxzZQorICAgICIiIgorCisgICAgZGVmIF9kaXNhc3NlbWJsZShzZWxmLCBsaW5lbm9fd2lkdGg9MywgbWFya19hc19jdXJyZW50PUZhbHNlKToKKyAgICAgICAgIiIiRm9ybWF0IGluc3RydWN0aW9uIGRldGFpbHMgZm9yIGluY2x1c2lvbiBpbiBkaXNhc3NlbWJseSBvdXRwdXQKKworICAgICAgICAqbGluZW5vX3dpZHRoKiBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgbGluZSBudW1iZXIgZmllbGQgKDAgb21pdHMgaXQpCisgICAgICAgICptYXJrX2FzX2N1cnJlbnQqIGluc2VydHMgYSAnLS0+JyBtYXJrZXIgYXJyb3cgYXMgcGFydCBvZiB0aGUgbGluZQorICAgICAgICAiIiIKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgIyBDb2x1bW46IFNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCisgICAgICAgIGlmIGxpbmVub193aWR0aDoKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZW5vX2ZtdCA9ICIlJSVkZCIgJSBsaW5lbm9fd2lkdGgKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKGxpbmVub19mbXQgJSBzZWxmLnN0YXJ0c19saW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgJyAqIGxpbmVub193aWR0aCkKKyAgICAgICAgIyBDb2x1bW46IEN1cnJlbnQgaW5zdHJ1Y3Rpb24gaW5kaWNhdG9yCisgICAgICAgIGlmIG1hcmtfYXNfY3VycmVudDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJy0tPicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICAnKQorICAgICAgICAjIENvbHVtbjogSnVtcCB0YXJnZXQgbWFya2VyCisgICAgICAgIGlmIHNlbGYuaXNfanVtcF90YXJnZXQ6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCc+PicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICcpCisgICAgICAgICMgQ29sdW1uOiBJbnN0cnVjdGlvbiBvZmZzZXQgZnJvbSBzdGFydCBvZiBjb2RlIHNlcXVlbmNlCisgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLm9mZnNldCkucmp1c3QoNCkpCisgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgbmFtZQorICAgICAgICBmaWVsZHMuYXBwZW5kKHNlbGYub3BuYW1lLmxqdXN0KDIwKSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBhcmd1bWVudAorICAgICAgICBpZiBzZWxmLmFyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLmFyZykucmp1c3QoNSkpCisgICAgICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50IGRldGFpbHMKKyAgICAgICAgICAgIGlmIHNlbGYuYXJncmVwcjoKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcoJyArIHNlbGYuYXJncmVwciArICcpJykKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKGZpZWxkcykucnN0cmlwKCkKKworCitkZWYgZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBmaXJzdF9saW5lPU5vbmUpOgorICAgICIiIkl0ZXJhdG9yIGZvciB0aGUgb3Bjb2RlcyBpbiBtZXRob2RzLCBmdW5jdGlvbnMgb3IgY29kZQorCisgICAgR2VuZXJhdGVzIGEgc2VyaWVzIG9mIEluc3RydWN0aW9uIG5hbWVkIHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YKKyAgICBlYWNoIG9wZXJhdGlvbnMgaW4gdGhlIHN1cHBsaWVkIGNvZGUuCisKKyAgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgICBPdGhlcndpc2UsIHRoZSBzb3VyY2UgbGluZSBpbmZvcm1hdGlvbiAoaWYgYW55KSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tCisgICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKyAgICAiIiIKKyAgICBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwogICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBpZiBmaXJzdF9saW5lIGlzIG5vdCBOb25lOgorICAgICAgICBsaW5lX29mZnNldCA9IGZpcnN0X2xpbmUgLSBjby5jb19maXJzdGxpbmVubworICAgIGVsc2U6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gMAorICAgIHJldHVybiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjby5jb19jb2RlLCBjby5jb192YXJuYW1lcywgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgY2VsbF9uYW1lcywgbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQpCisKK2RlZiBfZ2V0X2NvbnN0X2luZm8oY29uc3RfaW5kZXgsIGNvbnN0X2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBjb25zdCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgY29uc3RhbnQgYW5kIGl0cyByZXByIGlmIHRoZSBjb25zdGFudAorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgY29uc3RhbnQgaW5kZXggYW5kIGl0cyByZXByKCkuCisgICAgIiIiCisgICAgYXJndmFsID0gY29uc3RfaW5kZXgKKyAgICBpZiBjb25zdF9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBjb25zdF9saXN0W2NvbnN0X2luZGV4XQorICAgIHJldHVybiBhcmd2YWwsIHJlcHIoYXJndmFsKQorCitkZWYgX2dldF9uYW1lX2luZm8obmFtZV9pbmRleCwgbmFtZV9saXN0KToKKyAgICAiIiJIZWxwZXIgdG8gZ2V0IG9wdGlvbmFsIGRldGFpbHMgYWJvdXQgbmFtZWQgcmVmZXJlbmNlcworCisgICAgICAgUmV0dXJucyB0aGUgZGVyZWZlcmVuY2VkIG5hbWUgYXMgYm90aCB2YWx1ZSBhbmQgcmVwciBpZiB0aGUgbmFtZQorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBuYW1lX2luZGV4CisgICAgaWYgbmFtZV9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBuYW1lX2xpc3RbbmFtZV9pbmRleF0KKyAgICAgICAgYXJncmVwciA9IGFyZ3ZhbAorICAgIGVsc2U6CisgICAgICAgIGFyZ3JlcHIgPSByZXByKGFyZ3ZhbCkKKyAgICByZXR1cm4gYXJndmFsLCBhcmdyZXByCisKKworZGVmIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvZGUsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsIGNvbnN0YW50cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gYSBieXRlY29kZSBzdHJpbmcuCisKKyAgICBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiBJbnN0cnVjdGlvbiBuYW1lZHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YgZWFjaAorICAgIG9wY29kZS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUncyBydW50aW1lIGVudmlyb25tZW50CisgICAgKGUuZy4gdmFyaWFibGUgbmFtZXMsIGNvbnN0YW50cykgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBvcHRpb25hbAorICAgIGFyZ3VtZW50cy4KKworICAgICIiIgorICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBleHRlbmRlZF9hcmcgPSAwCisgICAgc3RhcnRzX2xpbmUgPSBOb25lCisgICAgZnJlZSA9IE5vbmUKKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKLSAgICBleHRlbmRlZF9hcmcgPSAwCi0gICAgZnJlZSA9IE5vbmUKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgaW4gbGluZXN0YXJ0czoKLSAgICAgICAgICAgIGlmIGkgPiAwOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCIlM2QiICUgbGluZXN0YXJ0c1tpXSwgZW5kPScgJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCcgICAnLCBlbmQ9JyAnKQotCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMjApLCBlbmQ9JyAnKQorICAgICAgICBvZmZzZXQgPSBpCisgICAgICAgIGlmIGxpbmVzdGFydHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGFydHNfbGluZSA9IGxpbmVzdGFydHMuZ2V0KGksIE5vbmUpCisgICAgICAgICAgICBpZiBzdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGFydHNfbGluZSArPSBsaW5lX29mZnNldAorICAgICAgICBpc19qdW1wX3RhcmdldCA9IGkgaW4gbGFiZWxzCiAgICAgICAgIGkgPSBpKzEKKyAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBhcmd2YWwgPSBOb25lCisgICAgICAgIGFyZ3JlcHIgPSAnJwogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZworICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYgKyBleHRlbmRlZF9hcmcKICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IDAKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGlmIG9wID09IEVYVEVOREVEX0FSRzoKLSAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBvcGFyZyo2NTUzNgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCisgICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnKjY1NTM2CisgICAgICAgICAgICAjICBTZXQgYXJndmFsIHRvIHRoZSBkZXJlZmVyZW5jZWQgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHdoZW4KKyAgICAgICAgICAgICMgIGF2YWlsYWJlLCBhbmQgYXJncmVwciB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFyZ3ZhbC4KKyAgICAgICAgICAgICMgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzIG5lZWRzIHRoZSBzdHJpbmcgcmVwciBvZiB0aGUKKyAgICAgICAgICAgICMgICAgcmF3IG5hbWUgaW5kZXggZm9yIExPQURfR0xPQkFMLCBMT0FEX0NPTlNULCBldGMuCisgICAgICAgICAgICBhcmd2YWwgPSBhcmcKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY28uY29fY29uc3RzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9jb25zdF9pbmZvKGFyZywgY29uc3RhbnRzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIG5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBpICsgYXJnCisgICAgICAgICAgICAgICAgYXJncmVwciA9ICJ0byAiICsgcmVwcihhcmd2YWwpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2xvY2FsOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX3Zhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIHZhcm5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsID0gY21wX29wW2FyZ10KKyAgICAgICAgICAgICAgICBhcmdyZXByID0gYXJndmFsCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2ZyZWU6Ci0gICAgICAgICAgICAgICAgaWYgZnJlZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBmcmVlID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGZyZWVbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgY2VsbHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gIiVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciIgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pCisgICAgICAgIHlpZWxkIEluc3RydWN0aW9uKG9wbmFtZVtvcF0sIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ3ZhbCwgYXJncmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdGFydHNfbGluZSwgaXNfanVtcF90YXJnZXQpCisKK2RlZiBkaXNhc3NlbWJsZShjbywgbGFzdGk9LTEsICosIGZpbGU9Tm9uZSk6CisgICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycworICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoY28uY29fY29kZSwgbGFzdGksIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLCBmaWxlPWZpbGUpCiAKIGRlZiBfZGlzYXNzZW1ibGVfYnl0ZXMoY29kZSwgbGFzdGk9LTEsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lKToKLSAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCi0gICAgbiA9IGxlbihjb2RlKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IG46Ci0gICAgICAgIG9wID0gY29kZVtpXQotICAgICAgICBpZiBpID09IGxhc3RpOiBwcmludCgnLS0+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgICcsIGVuZD0nICcpCi0gICAgICAgIGlmIGkgaW4gbGFiZWxzOiBwcmludCgnPj4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAnLCBlbmQ9JyAnKQotICAgICAgICBwcmludChyZXByKGkpLnJqdXN0KDQpLCBlbmQ9JyAnKQotICAgICAgICBwcmludChvcG5hbWVbb3BdLmxqdXN0KDE1KSwgZW5kPScgJykKLSAgICAgICAgaSA9IGkrMQotICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgotICAgICAgICAgICAgaSA9IGkrMgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCi0gICAgICAgICAgICBpZiBvcCBpbiBoYXNjb25zdDoKLSAgICAgICAgICAgICAgICBpZiBjb25zdGFudHM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY29uc3RhbnRzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBuYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgdmFybmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHZhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKScgJSBvcGFyZywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzY29tcGFyZToKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjbXBfb3Bbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYXJnczoKLSAgICAgICAgICAgICAgICBwcmludCgnKCVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciknCi0gICAgICAgICAgICAgICAgICAgICAgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pLCBlbmQ9JyAnKQotICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lLCBjZWxscz1Ob25lLCBsaW5lc3RhcnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICosIGZpbGU9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIyBPbWl0IHRoZSBsaW5lIG51bWJlciBjb2x1bW4gZW50aXJlbHkgaWYgd2UgaGF2ZSBubyBsaW5lIG51bWJlciBpbmZvCisgICAgc2hvd19saW5lbm8gPSBsaW5lc3RhcnRzIGlzIG5vdCBOb25lCisgICAgIyBUT0RPPzogQWRqdXN0IHdpZHRoIHVwd2FyZHMgaWYgbWF4KGxpbmVzdGFydHMudmFsdWVzKCkpID49IDEwMDA/CisgICAgbGluZW5vX3dpZHRoID0gMyBpZiBzaG93X2xpbmVubyBlbHNlIDAKKyAgICBmb3IgaW5zdHIgaW4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXMsIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIGNlbGxzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1saW5lX29mZnNldCk6CisgICAgICAgIG5ld19zb3VyY2VfbGluZSA9IChzaG93X2xpbmVubyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyLnN0YXJ0c19saW5lIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIub2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgbmV3X3NvdXJjZV9saW5lOgorICAgICAgICAgICAgcHJpbnQoZmlsZT1maWxlKQorICAgICAgICBpc19jdXJyZW50X2luc3RyID0gaW5zdHIub2Zmc2V0ID09IGxhc3RpCisgICAgICAgIHByaW50KGluc3RyLl9kaXNhc3NlbWJsZShsaW5lbm9fd2lkdGgsIGlzX2N1cnJlbnRfaW5zdHIpLCBmaWxlPWZpbGUpCiAKLWRlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSk6CitkZWYgX2Rpc2Fzc2VtYmxlX3N0cihzb3VyY2UsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSB0aGUgc291cmNlIHN0cmluZywgdGhlbiBkaXNhc3NlbWJsZSB0aGUgY29kZSBvYmplY3QuIiIiCi0gICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JykpCisgICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JyksIGZpbGU9ZmlsZSkKIAogZGlzY28gPSBkaXNhc3NlbWJsZSAgICAgICAgICAgICAgICAgICAgICMgWFhYIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogCkBAIC0yNTAsMTkgKzM1NiwyMSBAQAogCiAgICAgIiIiCiAgICAgbGFiZWxzID0gW10KKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCiAgICAgICAgIGkgPSBpKzEKICAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKKyAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2CiAgICAgICAgICAgICBpID0gaSsyCiAgICAgICAgICAgICBsYWJlbCA9IC0xCiAgICAgICAgICAgICBpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIGxhYmVsID0gaStvcGFyZworICAgICAgICAgICAgICAgIGxhYmVsID0gaSthcmcKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzamFiczoKLSAgICAgICAgICAgICAgICBsYWJlbCA9IG9wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBhcmcKICAgICAgICAgICAgIGlmIGxhYmVsID49IDA6CiAgICAgICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIGxhYmVsczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCkKQEAgLTI5MCwyNyArMzk4LDc3IEBACiAgICAgaWYgbGluZW5vICE9IGxhc3RsaW5lbm86CiAgICAgICAgIHlpZWxkIChhZGRyLCBsaW5lbm8pCiAKK2NsYXNzIEJ5dGVjb2RlOgorICAgICIiIlRoZSBieXRlY29kZSBvcGVyYXRpb25zIG9mIGEgcGllY2Ugb2YgY29kZQorCisgICAgSW5zdGFudGlhdGUgdGhpcyB3aXRoIGEgZnVuY3Rpb24sIG1ldGhvZCwgc3RyaW5nIG9mIGNvZGUsIG9yIGEgY29kZSBvYmplY3QKKyAgICAoYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpKS4KKworICAgIEl0ZXJhdGluZyBvdmVyIHRoaXMgeWllbGRzIHRoZSBieXRlY29kZSBvcGVyYXRpb25zIGFzIEluc3RydWN0aW9uIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgKiwgZmlyc3RfbGluZT1Ob25lLCBjdXJyZW50X29mZnNldD1Ob25lKToKKyAgICAgICAgc2VsZi5jb2Rlb2JqID0gY28gPSBfZ2V0X2NvZGVfb2JqZWN0KHgpCisgICAgICAgIGlmIGZpcnN0X2xpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBzZWxmLl9saW5lX29mZnNldCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGZpcnN0X2xpbmUKKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgIHNlbGYuX2NlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgICAgIHNlbGYuX2xpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0ID0geAorICAgICAgICBzZWxmLmN1cnJlbnRfb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgY28gPSBzZWxmLmNvZGVvYmoKKyAgICAgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgc2VsZi5fY2VsbF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSh7IXJ9KSIuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fdHJhY2ViYWNrKGNscywgdGIpOgorICAgICAgICAiIiIgQ29uc3RydWN0IGEgQnl0ZWNvZGUgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrICIiIgorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBjbHModGIudGJfZnJhbWUuZl9jb2RlLCBjdXJyZW50X29mZnNldD10Yi50Yl9sYXN0aSkKKworICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gZm9ybWF0dGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKHNlbGYuY29kZW9iaikKKworICAgIGRlZiBkaXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zLiIiIgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfb2Zmc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5jdXJyZW50X29mZnNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gLTEKKyAgICAgICAgd2l0aCBpby5TdHJpbmdJTygpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCB2YXJuYW1lcz1jby5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcz1jby5jb19uYW1lcywgY29uc3RhbnRzPWNvLmNvX2NvbnN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscz1zZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzdGFydHM9c2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPW91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aT1vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKKworCiBkZWYgX3Rlc3QoKToKICAgICAiIiJTaW1wbGUgdGVzdCBwcm9ncmFtIHRvIGRpc2Fzc2VtYmxlIGEgZmlsZS4iIiIKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIHN5cy5hcmd2WzI6XToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVzYWdlOiBweXRob24gZGlzLnB5IFstfGZpbGVdXG4iKQotICAgICAgICAgICAgc3lzLmV4aXQoMikKLSAgICAgICAgZm4gPSBzeXMuYXJndlsxXQotICAgICAgICBpZiBub3QgZm4gb3IgZm4gPT0gIi0iOgotICAgICAgICAgICAgZm4gPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSBOb25lCi0gICAgaWYgZm4gaXMgTm9uZToKLSAgICAgICAgZiA9IHN5cy5zdGRpbgotICAgIGVsc2U6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgIHNvdXJjZSA9IGYucmVhZCgpCi0gICAgaWYgZm4gaXMgbm90IE5vbmU6Ci0gICAgICAgIGYuY2xvc2UoKQotICAgIGVsc2U6Ci0gICAgICAgIGZuID0gIjxzdGRpbj4iCi0gICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBmbiwgImV4ZWMiKQorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2luZmlsZScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSwgbmFyZ3M9Jz8nLCBkZWZhdWx0PSctJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdpdGggYXJncy5pbmZpbGUgYXMgaW5maWxlOgorICAgICAgICBzb3VyY2UgPSBpbmZpbGUucmVhZCgpCisgICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBhcmdzLmluZmlsZS5uYW1lLCAiZXhlYyIpCiAgICAgZGlzKGNvZGUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5IGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQppbmRleCA2NzQ3YWI4Li4zOGE1MDg2IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKQEAgLTEzLDUgKzEzLDUgQEAKICMgVXBkYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBQeXRob24gcmVsZWFzZSBwcm9jZXNzLgogIwogIy0tc3RhcnQgY29uc3RhbnRzLS0KLV9fdmVyc2lvbl9fID0gIjMuMy4zIgorX192ZXJzaW9uX18gPSAiMy40LjBiMSIKICMtLWVuZCBjb25zdGFudHMtLQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9hcmNoaXZlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQppbmRleCBmY2RhMDhlLi40NDcwYmIwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weQpAQCAtMTgsMTUgKzE4LDU1IEBACiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgbWtwYXRoCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKLWRlZiBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCBiYXNlX2RpciwgY29tcHJlc3M9Imd6aXAiLCB2ZXJib3NlPTAsIGRyeV9ydW49MCk6Cit0cnk6CisgICAgZnJvbSBwd2QgaW1wb3J0IGdldHB3bmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0cHduYW0gPSBOb25lCisKK3RyeToKKyAgICBmcm9tIGdycCBpbXBvcnQgZ2V0Z3JuYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRncm5hbSA9IE5vbmUKKworZGVmIF9nZXRfZ2lkKG5hbWUpOgorICAgICIiIlJldHVybnMgYSBnaWQsIGdpdmVuIGEgZ3JvdXAgbmFtZS4iIiIKKyAgICBpZiBnZXRncm5hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldGdybmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIF9nZXRfdWlkKG5hbWUpOgorICAgICIiIlJldHVybnMgYW4gdWlkLCBnaXZlbiBhIHVzZXIgbmFtZS4iIiIKKyAgICBpZiBnZXRwd25hbSBpcyBOb25lIG9yIG5hbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IGdldHB3bmFtKG5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gcmVzdWx0WzJdCisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLAorICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lKToKICAgICAiIiJDcmVhdGUgYSAocG9zc2libHkgY29tcHJlc3NlZCkgdGFyIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyCiAgICAgJ2Jhc2VfZGlyJy4KIAogICAgICdjb21wcmVzcycgbXVzdCBiZSAiZ3ppcCIgKHRoZSBkZWZhdWx0KSwgImNvbXByZXNzIiwgImJ6aXAyIiwgb3IgTm9uZS4KLSAgICBCb3RoICJ0YXIiIGFuZCB0aGUgY29tcHJlc3Npb24gdXRpbGl0eSBuYW1lZCBieSAnY29tcHJlc3MnIG11c3QgYmUgb24KLSAgICB0aGUgZGVmYXVsdCBwcm9ncmFtIHNlYXJjaCBwYXRoLCBzbyB0aGlzIGlzIHByb2JhYmx5IFVuaXgtc3BlY2lmaWMuCisgICAgKGNvbXByZXNzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yKQorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgYW4gb3duZXIgYW5kIGEgZ3JvdXAgZm9yIHRoZQorICAgIGFyY2hpdmUgdGhhdCBpcyBiZWluZyBidWlsdC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAKKyAgICB3aWxsIGJlIHVzZWQuCisKICAgICBUaGUgb3V0cHV0IHRhciBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfZGlyJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKICAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6IiwgIi5iejIiIG9yICIuWiIpLgorCiAgICAgUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLgogICAgICIiIgogICAgIHRhcl9jb21wcmVzc2lvbiA9IHsnZ3ppcCc6ICdneicsICdiemlwMic6ICdiejInLCBOb25lOiAnJywgJ2NvbXByZXNzJzogJyd9CkBAIC00OCwxMCArODgsMjMgQEAKICAgICBpbXBvcnQgdGFyZmlsZSAgIyBsYXRlIGltcG9ydCBzbyBQeXRob24gYnVpbGQgaXRzZWxmIGRvZXNuJ3QgYnJlYWsKIAogICAgIGxvZy5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCisKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKKworICAgIGRlZiBfc2V0X3VpZF9naWQodGFyaW5mbyk6CisgICAgICAgIGlmIGdpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8uZ2lkID0gZ2lkCisgICAgICAgICAgICB0YXJpbmZvLmduYW1lID0gZ3JvdXAKKyAgICAgICAgaWYgdWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby51aWQgPSB1aWQKKyAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSBvd25lcgorICAgICAgICByZXR1cm4gdGFyaW5mbworCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUsICd3fCVzJyAlIHRhcl9jb21wcmVzc2lvbltjb21wcmVzc10pCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIpCisgICAgICAgICAgICB0YXIuYWRkKGJhc2VfZGlyLCBmaWx0ZXI9X3NldF91aWRfZ2lkKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIApAQCAtMTQwLDcgKzE5Myw3IEBACiAgICAgcmV0dXJuIE5vbmUKIAogZGVmIG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwgdmVyYm9zZT0wLAotICAgICAgICAgICAgICAgICBkcnlfcnVuPTApOgorICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhbiBhcmNoaXZlIGZpbGUgKGVnLiB6aXAgb3IgdGFyKS4KIAogICAgICdiYXNlX25hbWUnIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgbWludXMgYW55IGZvcm1hdC1zcGVjaWZpYwpAQCAtMTUzLDYgKzIwNiw5IEBACiAgICAgaWUuICdiYXNlX2Rpcicgd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCiAgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAncm9vdF9kaXInIGFuZCAnYmFzZV9kaXInIGJvdGggZGVmYXVsdAogICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogICAgICIiIgogICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKICAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKQEAgLTE3NCw2ICsyMzAsMTEgQEAKICAgICBmdW5jID0gZm9ybWF0X2luZm9bMF0KICAgICBmb3IgYXJnLCB2YWwgaW4gZm9ybWF0X2luZm9bMV06CiAgICAgICAgIGt3YXJnc1thcmddID0gdmFsCisKKyAgICBpZiBmb3JtYXQgIT0gJ3ppcCc6CisgICAgICAgIGt3YXJnc1snb3duZXInXSA9IG93bmVyCisgICAgICAgIGt3YXJnc1snZ3JvdXAnXSA9IGdyb3VwCisKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZnVuYyhiYXNlX25hbWUsIGJhc2VfZGlyLCAqKmt3YXJncykKICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jY29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQppbmRleCBjNzk1Yzk1Li45MTFlODRkIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weQpAQCAtMzUxLDcgKzM1MSw3IEBACiAgICAgICAgIHJldHVybiBtYWNyb3MsIG9iamVjdHMsIGV4dHJhLCBwcF9vcHRzLCBidWlsZAogCiAgICAgZGVmIF9nZXRfY2NfYXJncyhzZWxmLCBwcF9vcHRzLCBkZWJ1ZywgYmVmb3JlKToKLSAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgZW14Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKKyAgICAgICAgIyB3b3JrcyBmb3IgdW5peGNjb21waWxlciwgY3lnd2luY2NvbXBpbGVyCiAgICAgICAgIGNjX2FyZ3MgPSBwcF9vcHRzICsgWyctYyddCiAgICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICAgY2NfYXJnc1s6MF0gPSBbJy1nJ10KQEAgLTkyNiw3ICs5MjYsNiBAQAogICAgICMgb24gYSBjeWd3aW4gYnVpbHQgcHl0aG9uIHdlIGNhbiB1c2UgZ2NjIGxpa2UgYW4gb3JkaW5hcnkgVU5JWGlzaAogICAgICMgY29tcGlsZXIKICAgICAoJ2N5Z3dpbi4qJywgJ3VuaXgnKSwKLSAgICAoJ29zMmVteCcsICdlbXgnKSwKIAogICAgICMgT1MgbmFtZSBtYXBwaW5ncwogICAgICgncG9zaXgnLCAndW5peCcpLApAQCAtOTY4LDggKzk2Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1pbmd3MzIgcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgV2luMzIiKSwKICAgICAgICAgICAgICAgICAgICAnYmNwcCc6ICAgICgnYmNwcGNvbXBpbGVyJywgJ0JDUFBDb21waWxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJvcmxhbmQgQysrIENvbXBpbGVyIiksCi0gICAgICAgICAgICAgICAgICAgJ2VteCc6ICAgICAoJ2VteGNjb21waWxlcicsICdFTVhDQ29tcGlsZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFTVggcG9ydCBvZiBHTlUgQyBDb21waWxlciBmb3IgT1MvMiIpLAogICAgICAgICAgICAgICAgICB9CiAKIGRlZiBzaG93X2NvbXBpbGVycygpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jbWQucHkgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQppbmRleCAzZWEwODEwLi5jODlkNWVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NtZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NtZC5weQpAQCAtMzY1LDkgKzM2NSwxMSBAQAogICAgICAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KICAgICAgICAgc3Bhd24oY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1zZWxmLmRyeV9ydW4pCiAKLSAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lKToKKyAgICBkZWYgbWFrZV9hcmNoaXZlKHNlbGYsIGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgICAgIHJldHVybiBhcmNoaXZlX3V0aWwubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwgYmFzZV9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyeV9ydW49c2VsZi5kcnlfcnVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQogCiAgICAgZGVmIG1ha2VfZmlsZShzZWxmLCBpbmZpbGVzLCBvdXRmaWxlLCBmdW5jLCBhcmdzLAogICAgICAgICAgICAgICAgICAgZXhlY19tc2c9Tm9uZSwgc2tpcF9tc2c9Tm9uZSwgbGV2ZWw9MSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKaW5kZXggYzUxODhlYi4uNjgxNGExYyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQpAQCAtMzcsNiArMzcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICJbZGVmYXVsdDogZGlzdF0iKSwKICAgICAgICAgICAgICAgICAgICAgKCdza2lwLWJ1aWxkJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJza2lwIHJlYnVpbGRpbmcgZXZlcnl0aGluZyAoZm9yIHRlc3RpbmcvZGVidWdnaW5nKSIpLAorICAgICAgICAgICAgICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICAgICAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAgICAgICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICAgICAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIgorICAgICAgICAgICAgICAgICAgICAgIiBbZGVmYXVsdDogY3VycmVudCBncm91cF0iKSwKICAgICAgICAgICAgICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3NraXAtYnVpbGQnXQpAQCAtNTIsOCArNTgsNyBAQAogICAgICMgVGhpcyB3b24ndCBkbyBpbiByZWFsaXR5OiB3aWxsIG5lZWQgdG8gZGlzdGluZ3Vpc2ggUlBNLWlzaCBMaW51eCwKICAgICAjIERlYmlhbi1pc2ggTGludXgsIFNvbGFyaXMsIEZyZWVCU0QsIC4uLiwgV2luZG93cywgTWFjIE9TLgogICAgIGRlZmF1bHRfZm9ybWF0ID0geydwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgJ29zMic6ICd6aXAnfQorICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnfQogCiAgICAgIyBFc3RhYmxpc2ggdGhlIHByZWZlcnJlZCBvcmRlciAoZm9yIHRoZSAtLWhlbHAtZm9ybWF0cyBvcHRpb24pLgogICAgIGZvcm1hdF9jb21tYW5kcyA9IFsncnBtJywgJ2d6dGFyJywgJ2J6dGFyJywgJ3p0YXInLCAndGFyJywKQEAgLTc4LDYgKzgzLDggQEAKICAgICAgICAgc2VsZi5mb3JtYXRzID0gTm9uZQogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSAwCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBoYXZlIHRvIGZpbmFsaXplICdwbGF0X25hbWUnIGJlZm9yZSAnYmRpc3RfYmFzZScKQEAgLTEyMyw2ICsxMzAsMTEgQEAKICAgICAgICAgICAgIGlmIGNtZF9uYW1lIG5vdCBpbiBzZWxmLm5vX2Zvcm1hdF9vcHRpb246CiAgICAgICAgICAgICAgICAgc3ViX2NtZC5mb3JtYXQgPSBzZWxmLmZvcm1hdHNbaV0KIAorICAgICAgICAgICAgIyBwYXNzaW5nIHRoZSBvd25lciBhbmQgZ3JvdXAgbmFtZXMgZm9yIHRhciBhcmNoaXZpbmcKKyAgICAgICAgICAgIGlmIGNtZF9uYW1lID09ICdiZGlzdF9kdW1iJzoKKyAgICAgICAgICAgICAgICBzdWJfY21kLm93bmVyID0gc2VsZi5vd25lcgorICAgICAgICAgICAgICAgIHN1Yl9jbWQuZ3JvdXAgPSBzZWxmLmdyb3VwCisKICAgICAgICAgICAgICMgSWYgd2UncmUgZ29pbmcgdG8gbmVlZCB0byBydW4gdGhpcyBjb21tYW5kIGFnYWluLCB0ZWxsIGl0IHRvCiAgICAgICAgICAgICAjIGtlZXAgaXRzIHRlbXBvcmFyeSBmaWxlcyBhcm91bmQgc28gc3Vic2VxdWVudCBydW5zIGdvIGZhc3Rlci4KICAgICAgICAgICAgIGlmIGNtZF9uYW1lIGluIGNvbW1hbmRzW2krMTpdOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQppbmRleCAxYWIwOWQxLi40NDA1ZDEyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfZHVtYi5weQpAQCAtMzMsMTMgKzMzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICgncmVsYXRpdmUnLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgImJ1aWxkIHRoZSBhcmNoaXZlIHVzaW5nIHJlbGF0aXZlIHBhdGhzIgogICAgICAgICAgICAgICAgICAgICAgIihkZWZhdWx0OiBmYWxzZSkiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydrZWVwLXRlbXAnLCAnc2tpcC1idWlsZCcsICdyZWxhdGl2ZSddCiAKICAgICBkZWZhdWx0X2Zvcm1hdCA9IHsgJ3Bvc2l4JzogJ2d6dGFyJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ250JzogJ3ppcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJyB9CisgICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnIH0KIAogICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYmRpc3RfZGlyID0gTm9uZQpAQCAtNDksNiArNTQsOCBAQAogICAgICAgICBzZWxmLmRpc3RfZGlyID0gTm9uZQogICAgICAgICBzZWxmLnNraXBfYnVpbGQgPSBOb25lCiAgICAgICAgIHNlbGYucmVsYXRpdmUgPSAwCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5iZGlzdF9kaXIgaXMgTm9uZToKQEAgLTg1LDExICs5Miw2IEBACiAgICAgICAgIGFyY2hpdmVfYmFzZW5hbWUgPSAiJXMuJXMiICUgKHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYXRfbmFtZSkKIAotICAgICAgICAjIE9TLzIgb2JqZWN0cyB0byBhbnkgIjoiIGNoYXJhY3RlcnMgaW4gYSBmaWxlbmFtZSAoc3VjaCBhcyB3aGVuCi0gICAgICAgICMgYSB0aW1lc3RhbXAgaXMgdXNlZCBpbiBhIHZlcnNpb24pIHNvIGNoYW5nZSB0aGVtIHRvIGh5cGhlbnMuCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gYXJjaGl2ZV9iYXNlbmFtZS5yZXBsYWNlKCI6IiwgIi0iKQotCiAgICAgICAgIHBzZXVkb2luc3RhbGxfcm9vdCA9IG9zLnBhdGguam9pbihzZWxmLmRpc3RfZGlyLCBhcmNoaXZlX2Jhc2VuYW1lKQogICAgICAgICBpZiBub3Qgc2VsZi5yZWxhdGl2ZToKICAgICAgICAgICAgIGFyY2hpdmVfcm9vdCA9IHNlbGYuYmRpc3RfZGlyCkBAIC0xMDcsNyArMTA5LDggQEAKIAogICAgICAgICAjIE1ha2UgdGhlIGFyY2hpdmUKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLm1ha2VfYXJjaGl2ZShwc2V1ZG9pbnN0YWxsX3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdCwgcm9vdF9kaXI9YXJjaGl2ZV9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgIGlmIHNlbGYuZGlzdHJpYnV0aW9uLmhhc19leHRfbW9kdWxlcygpOgogICAgICAgICAgICAgcHl2ZXJzaW9uID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CmluZGV4IGJjNmEyM2YuLjliZTU5MjMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQpAQCAtMjMwLDExICsyMzAsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUEMnLCAnVkM2JykpCiAKLSAgICAgICAgIyBPUy8yIChFTVgpIGRvZXNuJ3Qgc3VwcG9ydCBEZWJ1ZyB2cyBSZWxlYXNlIGJ1aWxkcywgYnV0IGhhcyB0aGUKLSAgICAgICAgIyBpbXBvcnQgbGlicmFyaWVzIGluIGl0cyAiQ29uZmlnIiBzdWJkaXJlY3RvcnkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAnQ29uZmlnJykpCi0KICAgICAgICAgIyBmb3IgZXh0ZW5zaW9ucyB1bmRlciBDeWd3aW4gYW5kIEF0aGVPUyBQeXRob24ncyBsaWJyYXJ5IGRpcmVjdG9yeSBtdXN0IGJlCiAgICAgICAgICMgYXBwZW5kZWQgdG8gbGlicmFyeV9kaXJzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gJ2N5Z3dpbicgb3Igc3lzLnBsYXRmb3JtWzo2XSA9PSAnYXRoZW9zJzoKQEAgLTU0Myw3ICs1MzgsNyBAQAogICAgICAgICAgICAgbGlicmFyeV9kaXJzPWV4dC5saWJyYXJ5X2RpcnMsCiAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycz1leHQucnVudGltZV9saWJyYXJ5X2RpcnMsCiAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1leHRyYV9hcmdzLAotICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9c2VsZi5nZXRfZXhwb3J0X3N5bWJvbHMoZXh0KSwKKyAgICAgICAgICAgIGV4cG9ydF9zeW1ib2xzPWV4dC5leHBvcnRfc3ltYm9scywKICAgICAgICAgICAgIGRlYnVnPXNlbGYuZGVidWcsCiAgICAgICAgICAgICBidWlsZF90ZW1wPXNlbGYuYnVpbGRfdGVtcCwKICAgICAgICAgICAgIHRhcmdldF9sYW5nPWxhbmd1YWdlKQpAQCAtNjE5LDkgKzYxNCw2IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gInN3aWcuZXhlIgotICAgICAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgICAgICAjIGFzc3VtZSBzd2lnIGF2YWlsYWJsZSBpbiB0aGUgUEFUSC4KLSAgICAgICAgICAgIHJldHVybiAic3dpZy5leGUiCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyBob3cgdG8gZmluZCAobXVjaCBsZXNzIHJ1bikgU1dJRyAiCkBAIC02NzIsOSArNjY0LDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGZyb20gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbXBvcnQgZ2V0X2NvbmZpZ192YXIKICAgICAgICAgZXh0X3BhdGggPSBleHRfbmFtZS5zcGxpdCgnLicpCi0gICAgICAgICMgT1MvMiBoYXMgYW4gOCBjaGFyYWN0ZXIgbW9kdWxlIChleHRlbnNpb24pIGxpbWl0IDotKAotICAgICAgICBpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgZXh0X3BhdGhbbGVuKGV4dF9wYXRoKSAtIDFdID0gZXh0X3BhdGhbbGVuKGV4dF9wYXRoKSAtIDFdWzo4XQogICAgICAgICAjIGV4dGVuc2lvbnMgaW4gZGVidWdfbW9kZSBhcmUgbmFtZWQgJ21vZHVsZV9kLnB5ZCcgdW5kZXIgd2luZG93cwogICAgICAgICBleHRfc3VmZml4ID0gZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKQogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIHNlbGYuZGVidWc6CkBAIC02OTUsNyArNjg0LDcgQEAKICAgICBkZWYgZ2V0X2xpYnJhcmllcyhzZWxmLCBleHQpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2YgbGlicmFyaWVzIHRvIGxpbmsgYWdhaW5zdCB3aGVuIGJ1aWxkaW5nIGEKICAgICAgICAgc2hhcmVkIGV4dGVuc2lvbi4gIE9uIG1vc3QgcGxhdGZvcm1zLCB0aGlzIGlzIGp1c3QgJ2V4dC5saWJyYXJpZXMnOwotICAgICAgICBvbiBXaW5kb3dzIGFuZCBPUy8yLCB3ZSBhZGQgdGhlIFB5dGhvbiBsaWJyYXJ5IChlZy4gcHl0aG9uMjAuZGxsKS4KKyAgICAgICAgb24gV2luZG93cywgd2UgYWRkIHRoZSBQeXRob24gbGlicmFyeSAoZWcuIHB5dGhvbjIwLmRsbCkuCiAgICAgICAgICIiIgogICAgICAgICAjIFRoZSBweXRob24gbGlicmFyeSBpcyBhbHdheXMgbmVlZGVkIG9uIFdpbmRvd3MuICBGb3IgTVNWQywgdGhpcwogICAgICAgICAjIGlzIHJlZHVuZGFudCwgc2luY2UgdGhlIGxpYnJhcnkgaXMgbWVudGlvbmVkIGluIGEgcHJhZ21hIGluCkBAIC03MTUsMTkgKzcwNCw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMgKyBbcHl0aG9ubGliXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcwotICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAib3MyZW14IjoKLSAgICAgICAgICAgICMgRU1YL0dDQyByZXF1aXJlcyB0aGUgcHl0aG9uIGxpYnJhcnkgZXhwbGljaXRseSwgYW5kIEkKLSAgICAgICAgICAgICMgYmVsaWV2ZSBWQUNQUCBkb2VzIGFzIHdlbGwgKHRob3VnaCBub3QgY29uZmlybWVkKSAtIEFJTSBBcHIwMQotICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQlZCIKLSAgICAgICAgICAgICMgZGVidWcgdmVyc2lvbnMgb2YgdGhlIG1haW4gRExMIGFyZW4ndCBzdXBwb3J0ZWQsIGF0IGxlYXN0Ci0gICAgICAgICAgICAjIG5vdCBhdCB0aGlzIHRpbWUgLSBBSU0gQXByMDEKLSAgICAgICAgICAgICNpZiBzZWxmLmRlYnVnOgotICAgICAgICAgICAgIyAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlICsgJ19kJwotICAgICAgICAgICAgcHl0aG9ubGliID0gKHRlbXBsYXRlICUKLSAgICAgICAgICAgICAgICAgICAoc3lzLmhleHZlcnNpb24gPj4gMjQsIChzeXMuaGV4dmVyc2lvbiA+PiAxNikgJiAweGZmKSkKLSAgICAgICAgICAgICMgZG9uJ3QgZXh0ZW5kIGV4dC5saWJyYXJpZXMsIGl0IG1heSBiZSBzaGFyZWQgd2l0aCBvdGhlcgotICAgICAgICAgICAgIyBleHRlbnNpb25zLCBpdCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgbGlzdAotICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMgKyBbcHl0aG9ubGliXQogICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybVs6Nl0gPT0gImN5Z3dpbiI6CiAgICAgICAgICAgICB0ZW1wbGF0ZSA9ICJweXRob24lZC4lZCIKICAgICAgICAgICAgIHB5dGhvbmxpYiA9ICh0ZW1wbGF0ZSAlCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKaW5kZXggZDQ4ZWI2OS4uOTEwMGI5NiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQpAQCAtMyw3ICszLDcgQEAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAnYnVpbGRfcHknIGNvbW1hbmQuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIApAQCAtMzEzLDExICszMTMsMTEgQEAKICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGZpbGVuYW1lKQogICAgICAgICAgICAgaWYgaW5jbHVkZV9ieXRlY29kZToKICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGU6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKICAgICAgICAgICAgICAgICBpZiBzZWxmLm9wdGltaXplID4gMDoKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQorICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICAgICAgICAgb3V0cHV0cyArPSBbCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKaW5kZXggNGI1YjIyZS4uOTBhODM4MCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3NjcmlwdHMucHkKQEAgLTc0LDcgKzc0LDcgQEAKICAgICAgICAgICAgICMgc2NyaXB0LgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNjcmlwdCwgInJiIikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZHJ5X3J1bjoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBmID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQppbmRleCAzYzY3NWQxLi40NTY1MTFjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQpAQCAtNTgsMTMgKzU4LDYgQEAKICAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAogICAgICAgICB9LAogICAgICdudCc6IFdJTkRPV1NfU0NIRU1FLAotICAgICdvczInOiB7Ci0gICAgICAgICdwdXJlbGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAotICAgICAgICB9LAogICAgIH0KIAogIyB1c2VyIHNpdGUgc2NoZW1lcwpAQCAtODYsMTQgKzc5LDYgQEAKICAgICAgICAgJ2RhdGEnICAgOiAnJHVzZXJiYXNlJywKICAgICAgICAgfQogCi0gICAgSU5TVEFMTF9TQ0hFTUVTWydvczJfaG9tZSddID0gewotICAgICAgICAncHVyZWxpYic6ICckdXNlcnNpdGUnLAotICAgICAgICAncGxhdGxpYic6ICckdXNlcnNpdGUnLAotICAgICAgICAnaGVhZGVycyc6ICckdXNlcmJhc2UvaW5jbHVkZS9weXRob24kcHlfdmVyc2lvbl9zaG9ydC8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJHVzZXJiYXNlL2JpbicsCi0gICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCi0gICAgICAgIH0KLQogIyBUaGUga2V5cyB0byBhbiBpbnN0YWxsYXRpb24gc2NoZW1lOyBpZiBhbnkgbmV3IHR5cGVzIG9mIGZpbGVzIGFyZSB0byBiZQogIyBpbnN0YWxsZWQsIGJlIHN1cmUgdG8gYWRkIGFuIGVudHJ5IHRvIGV2ZXJ5IGluc3RhbGxhdGlvbiBzY2hlbWUgYWJvdmUsCiAjIGFuZCB0byBTQ0hFTUVfS0VZUyBoZXJlLgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CmluZGV4IDE1YzA4ZjEuLjIxNTgxM2IgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKQEAgLTQsNyArNCw3IEBACiAoaW5zdGFsbCBhbGwgUHl0aG9uIG1vZHVsZXMpLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogCiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBDb21tYW5kCkBAIC0xNjUsMTAgKzE2NSwxMCBAQAogICAgICAgICAgICAgaWYgZXh0ICE9IFBZVEhPTl9TT1VSQ0VfRVhURU5TSU9OOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGU6Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgIHB5X2ZpbGUsIGRlYnVnX292ZXJyaWRlPVRydWUpKQogICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlcy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgIHB5X2ZpbGUsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAogICAgICAgICByZXR1cm4gYnl0ZWNvZGVfZmlsZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQppbmRleCAxMTZmNjdlLi43ZWEzZDVmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CkBAIC03NCw2ICs3NCwxMCBAQAogICAgICAgICAoJ21ldGFkYXRhLWNoZWNrJywgTm9uZSwKICAgICAgICAgICJFbnN1cmUgdGhhdCBhbGwgcmVxdWlyZWQgZWxlbWVudHMgb2YgbWV0YS1kYXRhICIKICAgICAgICAgICJhcmUgc3VwcGxpZWQuIFdhcm4gaWYgYW55IG1pc3NpbmcuIFtkZWZhdWx0XSIpLAorICAgICAgICAoJ293bmVyPScsICd1JywKKyAgICAgICAgICJPd25lciBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsndXNlLWRlZmF1bHRzJywgJ3BydW5lJywKQEAgLTExMyw2ICsxMTcsOCBAQAogCiAgICAgICAgIHNlbGYuYXJjaGl2ZV9maWxlcyA9IE5vbmUKICAgICAgICAgc2VsZi5tZXRhZGF0YV9jaGVjayA9IDEKKyAgICAgICAgc2VsZi5vd25lciA9IE5vbmUKKyAgICAgICAgc2VsZi5ncm91cCA9IE5vbmUKIAogICAgIGRlZiBmaW5hbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBpZiBzZWxmLm1hbmlmZXN0IGlzIE5vbmU6CkBAIC00NDQsNyArNDUwLDggQEAKICAgICAgICAgICAgIHNlbGYuZm9ybWF0cy5hcHBlbmQoc2VsZi5mb3JtYXRzLnBvcChzZWxmLmZvcm1hdHMuaW5kZXgoJ3RhcicpKSkKIAogICAgICAgICBmb3IgZm10IGluIHNlbGYuZm9ybWF0czoKLSAgICAgICAgICAgIGZpbGUgPSBzZWxmLm1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZtdCwgYmFzZV9kaXI9YmFzZV9kaXIpCisgICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsIGdyb3VwPXNlbGYuZ3JvdXApCiAgICAgICAgICAgICBhcmNoaXZlX2ZpbGVzLmFwcGVuZChmaWxlKQogICAgICAgICAgICAgc2VsZi5kaXN0cmlidXRpb24uZGlzdF9maWxlcy5hcHBlbmQoKCdzZGlzdCcsICcnLCBmaWxlKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKaW5kZXggZDJiYzgyYy4uMjg3MTU4MyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IHVybG9wZW4ocmVxdWVzdCkKICAgICAgICAgICAgIHN0YXR1cyA9IHJlc3VsdC5nZXRjb2RlKCkKICAgICAgICAgICAgIHJlYXNvbiA9IHJlc3VsdC5tc2cKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZShzdHIoZSksIGxvZy5FUlJPUikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNlcHQgSFRUUEVycm9yIGFzIGU6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CmluZGV4IDFmZDUzMzQuLjc0MzlhODMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5CkBAIC0yMSw3ICsyMSw3IEBACiBjbGFzcyBQeVBJUkNDb21tYW5kKENvbW1hbmQpOgogICAgICIiIkJhc2UgY29tbWFuZCB0aGF0IGtub3dzIGhvdyB0byBoYW5kbGUgdGhlIC5weXBpcmMgZmlsZQogICAgICIiIgotICAgIERFRkFVTFRfUkVQT1NJVE9SWSA9ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknCisgICAgREVGQVVMVF9SRVBPU0lUT1JZID0gJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknCiAgICAgREVGQVVMVF9SRUFMTSA9ICdweXBpJwogICAgIHJlcG9zaXRvcnkgPSBOb25lCiAgICAgcmVhbG0gPSBOb25lCkBAIC04Myw2ICs4MywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGNvbmZpZy5nZXQoc2VydmVyLCBrZXkpCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGRlZmF1bHQKKworICAgICAgICAgICAgICAgICAgICAjIHdvcmsgYXJvdW5kIHBlb3BsZSBoYXZpbmcgInJlcG9zaXRvcnkiIGZvciB0aGUgInB5cGkiCisgICAgICAgICAgICAgICAgICAgICMgc2VjdGlvbiBvZiB0aGVpciBjb25maWcgc2V0IHRvIHRoZSBIVFRQIChyYXRoZXIgdGhhbgorICAgICAgICAgICAgICAgICAgICAjIEhUVFBTKSBVUkwKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZlciA9PSAncHlwaScgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5IGluIChzZWxmLkRFRkFVTFRfUkVQT1NJVE9SWSwgJ3B5cGknKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WydyZXBvc2l0b3J5J10gPSBzZWxmLkRFRkFVTFRfUkVQT1NJVE9SWQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQKKwogICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFsnc2VydmVyJ10gPT0gcmVwb3NpdG9yeSBvcgogICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFsncmVwb3NpdG9yeSddID09IHJlcG9zaXRvcnkpOgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29yZS5weSBiL0xpYi9kaXN0dXRpbHMvY29yZS5weQppbmRleCAyNjAzMzJhLi5jODExZDViIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvcmUucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CkBAIC0xMjgsOCArMTI4LDkgQEAKICAgICBpZiBfc2V0dXBfc3RvcF9hZnRlciA9PSAiY29uZmlnIjoKICAgICAgICAgcmV0dXJuIGRpc3QKIAotICAgICMgUGFyc2UgdGhlIGNvbW1hbmQgbGluZTsgYW55IGNvbW1hbmQtbGluZSBlcnJvcnMgYXJlIHRoZSBlbmQgdXNlcidzCi0gICAgIyBmYXVsdCwgc28gdHVybiB0aGVtIGludG8gU3lzdGVtRXhpdCB0byBzdXBwcmVzcyB0cmFjZWJhY2tzLgorICAgICMgUGFyc2UgdGhlIGNvbW1hbmQgbGluZSBhbmQgb3ZlcnJpZGUgY29uZmlnIGZpbGVzOyBhbnkKKyAgICAjIGNvbW1hbmQtbGluZSBlcnJvcnMgYXJlIHRoZSBlbmQgdXNlcidzIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50bworICAgICMgU3lzdGVtRXhpdCB0byBzdXBwcmVzcyB0cmFjZWJhY2tzLgogICAgIHRyeToKICAgICAgICAgb2sgPSBkaXN0LnBhcnNlX2NvbW1hbmRfbGluZSgpCiAgICAgZXhjZXB0IERpc3R1dGlsc0FyZ0Vycm9yIGFzIG1zZzoKQEAgLTE0OCw3ICsxNDksNyBAQAogICAgICAgICAgICAgZGlzdC5ydW5fY29tbWFuZHMoKQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KCJpbnRlcnJ1cHRlZCIpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIGV4YzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgogICAgICAgICAgICAgZXJyb3IgPSBncm9rX2Vudmlyb25tZW50X2Vycm9yKGV4YykKIAogICAgICAgICAgICAgaWYgREVCVUc6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2N5Z3dpbmNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CmluZGV4IGUwMDc0YTEuLmQyOGIxYjMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5CkBAIC01NCw3ICs1NCw4IEBACiBmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGdlbl9wcmVwcm9jZXNzX29wdGlvbnMsIGdlbl9saWJfb3B0aW9ucwogZnJvbSBkaXN0dXRpbHMudW5peGNjb21waWxlciBpbXBvcnQgVW5peENDb21waWxlcgogZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCB3cml0ZV9maWxlCi1mcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvciwgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IChEaXN0dXRpbHNFeGVjRXJyb3IsIENDb21waWxlckVycm9yLAorICAgICAgICBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IpCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiBmcm9tIGRpc3R1dGlscy52ZXJzaW9uIGltcG9ydCBMb29zZVZlcnNpb24KIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBmaW5kX2V4ZWN1dGFibGUKQEAgLTI5NCwxOCArMjk1LDE3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlbnRyeV9wb2ludCA9ICcnCiAKLSAgICAgICAgaWYgc2VsZi5nY2NfdmVyc2lvbiA8ICc0JyBvciBpc19jeWd3aW5nY2MoKToKLSAgICAgICAgICAgIG5vX2N5Z3dpbiA9ICcgLW1uby1jeWd3aW4nCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnJworICAgICAgICBpZiBpc19jeWd3aW5nY2MoKToKKyAgICAgICAgICAgIHJhaXNlIENDb21waWxlckVycm9yKAorICAgICAgICAgICAgICAgICdDeWd3aW4gZ2NjIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jb21waWxlcj1taW5ndzMyJykKIAotICAgICAgICBzZWxmLnNldF9leGVjdXRhYmxlcyhjb21waWxlcj0nZ2NjJXMgLU8gLVdhbGwnICUgbm9fY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjJXMgLW1kbGwgLU8gLVdhbGwnICUgbm9fY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9jeHg9J2crKyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjJXMnICUgbm9fY3lnd2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzJXMgJXMgJXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmxpbmtlcl9kbGwsIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9vcHRpb24sIGVudHJ5X3BvaW50KSkKKyAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtTyAtV2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyX3NvPSdnY2MgLW1kbGwgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9jeHg9J2crKyAtTyAtV2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9zbz0nJXMgJXMgJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBzaGFyZWRfb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X3BvaW50KSkKICAgICAgICAgIyBNYXliZSB3ZSBzaG91bGQgYWxzbyBhcHBlbmQgLW10aHJlYWRzLCBidXQgdGhlbiB0aGUgZmluaXNoZWQKICAgICAgICAgIyBkbGxzIG5lZWQgYW5vdGhlciBkbGwgKG1pbmd3bTEwLmRsbCBzZWUgTWluZ3czMiBkb2NzKQogICAgICAgICAjICgtbXRocmVhZHM6IFN1cHBvcnQgdGhyZWFkLXNhZmUgZXhjZXB0aW9uIGhhbmRsaW5nIG9uIGBNaW5ndzMyJykKQEAgLTM2NCw3ICszNjQsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBDT05GSUdfSF9OT1RPSywgIiclcycgZG9lcyBub3QgbWVudGlvbiAnX19HTlVDX18nIiAlIGZuCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBjb25maWdfaC5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgcmV0dXJuIChDT05GSUdfSF9VTkNFUlRBSU4sCiAgICAgICAgICAgICAgICAgImNvdWxkbid0IHJlYWQgJyVzJzogJXMiICUgKGZuLCBleGMuc3RyZXJyb3IpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQppbmRleCAyODI2ZmY4Li4yYjM1YWEzIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgICAiY2Fubm90IGNvcHkgdHJlZSAnJXMnOiBub3QgYSBkaXJlY3RvcnkiICUgc3JjKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNyYykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAoZXJybm8sIGVycnN0cikgPSBlCiAgICAgICAgIGlmIGRyeV9ydW46CiAgICAgICAgICAgICBuYW1lcyA9IFtdCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICAgICAgICAgIGFic3BhdGggPSBvcy5wYXRoLmFic3BhdGgoY21kWzFdKQogICAgICAgICAgICAgaWYgYWJzcGF0aCBpbiBfcGF0aF9jcmVhdGVkOgogICAgICAgICAgICAgICAgIGRlbCBfcGF0aF9jcmVhdGVkW2Fic3BhdGhdCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT1NFcnJvcikgYXMgZXhjOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICBsb2cud2Fybihncm9rX2Vudmlyb25tZW50X2Vycm9yKAogICAgICAgICAgICAgICAgICAgICBleGMsICJlcnJvciByZW1vdmluZyAlczogIiAlIGRpcmVjdG9yeSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQppbmRleCAxMWEyMTAyLi43ZWIwNGJjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CkBAIC01Miw3ICs1Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgKCdxdWlldCcsICdxJywgInJ1biBxdWlldGx5ICh0dXJucyB2ZXJib3NpdHkgb2ZmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICgnZHJ5LXJ1bicsICduJywgImRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ2gnLCAic2hvdyBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UiKSwKLSAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAoJ25vLXVzZXItY2ZnJywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZSBweWRpc3R1dGlscy5jZmcgaW4geW91ciBob21lIGRpcmVjdG9yeScpLAorICAgIF0KIAogICAgICMgJ2NvbW1vbl91c2FnZScgaXMgYSBzaG9ydCAoMi0zIGxpbmUpIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjb21tb24KICAgICAjIHVzYWdlIG9mIHRoZSBzZXR1cCBzY3JpcHQuCkBAIC0yNTksNiArMjYxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCiAKKyAgICAgICAgIyBuby11c2VyLWNmZyBpcyBoYW5kbGVkIGJlZm9yZSBvdGhlciBjb21tYW5kIGxpbmUgYXJncworICAgICAgICAjIGJlY2F1c2Ugb3RoZXIgYXJncyBvdmVycmlkZSB0aGUgY29uZmlnIGZpbGVzLCBhbmQgdGhpcworICAgICAgICAjIG9uZSBpcyBuZWVkZWQgYmVmb3JlIHdlIGNhbiBsb2FkIHRoZSBjb25maWcgZmlsZXMuCisgICAgICAgICMgSWYgYXR0cnNbJ3NjcmlwdF9hcmdzJ10gd2Fzbid0IHBhc3NlZCwgYXNzdW1lIGZhbHNlLgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBhbHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IGxvb2sgYXQgdGhlIGdsb2JhbCBvcHRpb25zCisgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNjcmlwdF9hcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLnNjcmlwdF9hcmdzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGFyZyA9PSAnLS1uby11c2VyLWNmZyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKIAogICAgIGRlZiBnZXRfb3B0aW9uX2RpY3Qoc2VsZiwgY29tbWFuZCk6CkBAIC0zMTAsNyArMzI4LDEwIEBACiAgICAgICAgIERpc3R1dGlscyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IChpZS4gd2hlcmUgdGhlIHRvcC1sZXZlbAogICAgICAgICBEaXN0dXRpbHMgX19pbnN0X18ucHkgZmlsZSBsaXZlcyksIGEgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUKICAgICAgICAgZGlyZWN0b3J5IG5hbWVkIC5weWRpc3R1dGlscy5jZmcgb24gVW5peCBhbmQgcHlkaXN0dXRpbHMuY2ZnCi0gICAgICAgIG9uIFdpbmRvd3MvTWFjLCBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgb24gV2luZG93cy9NYWM7IGFuZCBzZXR1cC5jZmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCisgICAgICAgIC0tbm8tdXNlci1jZmcgb3B0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgZmlsZXMgPSBbXQogICAgICAgICBjaGVja19lbnZpcm9uKCkKQEAgLTMzMCwxNSArMzUxLDE5IEBACiAgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gInB5ZGlzdHV0aWxzLmNmZyIKIAogICAgICAgICAjIEFuZCBsb29rIGZvciB0aGUgdXNlciBjb25maWcgZmlsZQotICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHVzZXJfZmlsZSk6Ci0gICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQorICAgICAgICBpZiBzZWxmLndhbnRfdXNlcl9jZmc6CisgICAgICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZCh1c2VyX2ZpbGUpCiAKICAgICAgICAgIyBBbGwgcGxhdGZvcm1zIHN1cHBvcnQgbG9jYWwgc2V0dXAuY2ZnCiAgICAgICAgIGxvY2FsX2ZpbGUgPSAic2V0dXAuY2ZnIgogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbF9maWxlKToKICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChsb2NhbF9maWxlKQogCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgidXNpbmcgY29uZmlnIGZpbGVzOiAlcyIgJSAnLCAnLmpvaW4oZmlsZXMpKQorCiAgICAgICAgIHJldHVybiBmaWxlcwogCiAgICAgZGVmIHBhcnNlX2NvbmZpZ19maWxlcyhzZWxmLCBmaWxlbmFtZXM9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc1ZjhkLi4wMDAwMDAwCi0tLSBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLSIiImRpc3R1dGlscy5lbXhjY29tcGlsZXIKLQotUHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZiBVbml4Q0NvbXBpbGVyIHRoYXQKLWhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotIiIiCi0KLSMgaXNzdWVzOgotIwotIyAqIE9TLzIgaW5zaXN0cyB0aGF0IERMTHMgY2FuIGhhdmUgbmFtZXMgbm8gbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzCi0jICAgV2UgcHV0IGV4cG9ydF9zeW1ib2xzIGluIGEgZGVmLWZpbGUsIGFzIHRob3VnaCB0aGUgRExMIGNhbiBoYXZlCi0jICAgYW4gYXJiaXRyYXJ5IGxlbmd0aCBuYW1lLCBidXQgdHJ1bmNhdGUgdGhlIG91dHB1dCBmaWxlbmFtZS4KLSMKLSMgKiBvbmx5IHVzZSBPTUYgb2JqZWN0cyBhbmQgdXNlIExJTkszODYgYXMgdGhlIGxpbmtlciAoLVpvbWYpCi0jCi0jICogYWx3YXlzIGJ1aWxkIGZvciBtdWx0aXRocmVhZGluZyAoLVptdCkgYXMgdGhlIGFjY29tcGFueWluZyBPUy8yIHBvcnQKLSMgICBvZiBQeXRob24gaXMgb25seSBkaXN0cmlidXRlZCB3aXRoIHRocmVhZHMgZW5hYmxlZC4KLSMKLSMgdGVzdGVkIGNvbmZpZ3VyYXRpb25zOgotIwotIyAqIEVNWCBnY2MgMi44MS9FTVggMC45ZCBmaXgwMwotCi1pbXBvcnQgb3Msc3lzLGNvcHkKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCi1mcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yLCBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgRU1YQ0NvbXBpbGVyIChVbml4Q0NvbXBpbGVyKToKLQotICAgIGNvbXBpbGVyX3R5cGUgPSAnZW14JwotICAgIG9ial9leHRlbnNpb24gPSAiLm9iaiIKLSAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICIubGliIgotICAgIHNoYXJlZF9saWJfZXh0ZW5zaW9uID0gIi5kbGwiCi0gICAgc3RhdGljX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICBzaGFyZWRfbGliX2Zvcm1hdCA9ICIlcyVzIgotICAgIHJlc19leHRlbnNpb24gPSAiLnJlcyIgICAgICAjIGNvbXBpbGVkIHJlc291cmNlIGZpbGUKLSAgICBleGVfZXh0ZW5zaW9uID0gIi5leGUiCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKLQotICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSA9IGNoZWNrX2NvbmZpZ19oKCkKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiUHl0aG9uJ3MgR0NDIHN0YXR1czogJXMgKGRldGFpbHM6ICVzKSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIGRldGFpbHMpKQotICAgICAgICBpZiBzdGF0dXMgaXMgbm90IENPTkZJR19IX09LOgotICAgICAgICAgICAgc2VsZi53YXJuKAotICAgICAgICAgICAgICAgICJQeXRob24ncyBweWNvbmZpZy5oIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHlvdXIgY29tcGlsZXIuICAiICsKLSAgICAgICAgICAgICAgICAoIlJlYXNvbjogJXMuIiAlIGRldGFpbHMpICsKLSAgICAgICAgICAgICAgICAiQ29tcGlsaW5nIG1heSBmYWlsIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIHByZXByb2Nlc3NvciBtYWNyb3MuIikKLQotICAgICAgICAoc2VsZi5nY2NfdmVyc2lvbiwgc2VsZi5sZF92ZXJzaW9uKSA9IFwKLSAgICAgICAgICAgIGdldF92ZXJzaW9ucygpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoc2VsZi5jb21waWxlcl90eXBlICsgIjogZ2NjICVzLCBsZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGRfdmVyc2lvbikgKQotCi0gICAgICAgICMgSGFyZC1jb2RlIEdDQyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LgotICAgICAgICAjIFhYWCBvcHRpbWl6YXRpb24sIHdhcm5pbmdzIGV0Yy4gc2hvdWxkIGJlIGN1c3RvbWl6YWJsZS4KLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjIC1ab21mIC1abXQgLVpjcnRkbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsIC1aZGxsJykKLQotICAgICAgICAjIHdhbnQgdGhlIGdjYyBsaWJyYXJ5IHN0YXRpY2FsbHkgbGlua2VkIChzbyB0aGF0IHdlIGRvbid0IGhhdmUKLSAgICAgICAgIyB0byBkaXN0cmlidXRlIGEgdmVyc2lvbiBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyIHdlIGhhdmUpCi0gICAgICAgIHNlbGYuZGxsX2xpYnJhcmllcz1bImdjYyJdCi0KLSAgICAjIF9faW5pdF9fICgpCi0KLSAgICBkZWYgX2NvbXBpbGUoc2VsZiwgb2JqLCBzcmMsIGV4dCwgY2NfYXJncywgZXh0cmFfcG9zdGFyZ3MsIHBwX29wdHMpOgotICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAjIGdjYyByZXF1aXJlcyAnLnJjJyBjb21waWxlZCB0byBiaW5hcnkgKCcucmVzJykgZmlsZXMgISEhCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbInJjIiwgIi1yIiwgc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0gICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKLQotICAgIGRlZiBsaW5rIChzZWxmLAotICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgZGVidWc9MCwKLSAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICBidWlsZF90ZW1wPU5vbmUsCi0gICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgotCi0gICAgICAgICMgdXNlIHNlcGFyYXRlIGNvcGllcywgc28gd2UgY2FuIG1vZGlmeSB0aGUgbGlzdHMKLSAgICAgICAgZXh0cmFfcHJlYXJncyA9IGNvcHkuY29weShleHRyYV9wcmVhcmdzIG9yIFtdKQotICAgICAgICBsaWJyYXJpZXMgPSBjb3B5LmNvcHkobGlicmFyaWVzIG9yIFtdKQotICAgICAgICBvYmplY3RzID0gY29weS5jb3B5KG9iamVjdHMgb3IgW10pCi0KLSAgICAgICAgIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotICAgICAgICBsaWJyYXJpZXMuZXh0ZW5kKHNlbGYuZGxsX2xpYnJhcmllcykKLQotICAgICAgICAjIGhhbmRsZSBleHBvcnQgc3ltYm9scyBieSBjcmVhdGluZyBhIGRlZi1maWxlCi0gICAgICAgICMgd2l0aCBleGVjdXRhYmxlcyB0aGlzIG9ubHkgd29ya3Mgd2l0aCBnY2MvbGQgYXMgbGlua2VyCi0gICAgICAgIGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSkpOgotICAgICAgICAgICAgIyAoVGhlIGxpbmtlciBkb2Vzbid0IGRvIGFueXRoaW5nIGlmIG91dHB1dCBpcyB1cC10by1kYXRlLgotICAgICAgICAgICAgIyBTbyBpdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdGhpcywKLSAgICAgICAgICAgICMgYnV0IGZvciB0aGlzIHdlIGhhZCB0byBpbnNlcnQgc29tZSB1bmNoYW5nZWQgcGFydHMgb2YKLSAgICAgICAgICAgICMgVW5peENDb21waWxlciwgYW5kIHRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudC4pCi0KLSAgICAgICAgICAgICMgd2Ugd2FudCB0byBwdXQgc29tZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCi0gICAgICAgICAgICAjIG9iamVjdCBmaWxlcyBhcmUsIGJ1aWxkX3RlbXAgZG9lc24ndCBoZWxwIG11Y2gKLSAgICAgICAgICAgICMgd2hlcmUgYXJlIHRoZSBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIHRlbXBfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9iamVjdHNbMF0pCi0gICAgICAgICAgICAjIG5hbWUgb2YgZGxsIHRvIGdpdmUgdGhlIGhlbHBlciBmaWxlcyB0aGUgc2FtZSBiYXNlIG5hbWUKLSAgICAgICAgICAgIChkbGxfbmFtZSwgZGxsX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KAotICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKLQotICAgICAgICAgICAgIyBnZW5lcmF0ZSB0aGUgZmlsZW5hbWVzIGZvciB0aGVzZSBmaWxlcwotICAgICAgICAgICAgZGVmX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcF9kaXIsIGRsbF9uYW1lICsgIi5kZWYiKQotCi0gICAgICAgICAgICAjIEdlbmVyYXRlIC5kZWYgZmlsZQotICAgICAgICAgICAgY29udGVudHMgPSBbCi0gICAgICAgICAgICAgICAgIkxJQlJBUlkgJXMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgJSBcCi0gICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpWzBdLAotICAgICAgICAgICAgICAgICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIsCi0gICAgICAgICAgICAgICAgIkVYUE9SVFMiXQotICAgICAgICAgICAgZm9yIHN5bSBpbiBleHBvcnRfc3ltYm9sczoKLSAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJyAgIiVzIicgJSBzeW0pCi0gICAgICAgICAgICBzZWxmLmV4ZWN1dGUod3JpdGVfZmlsZSwgKGRlZl9maWxlLCBjb250ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRpbmcgJXMiICUgZGVmX2ZpbGUpCi0KLSAgICAgICAgICAgICMgbmV4dCBhZGQgb3B0aW9ucyBmb3IgZGVmLWZpbGUgYW5kIHRvIGNyZWF0aW5nIGltcG9ydCBsaWJyYXJpZXMKLSAgICAgICAgICAgICMgZm9yIGdjYy9sZCB0aGUgZGVmLWZpbGUgaXMgc3BlY2lmaWVkIGFzIGFueSBvdGhlciBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKGRlZl9maWxlKQotCi0gICAgICAgICNlbmQ6IGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAjICAgICAgICAodGFyZ2V0X2Rlc2MgIT0gc2VsZi5FWEVDVVRBQkxFIG9yIHNlbGYubGlua2VyX2RsbCA9PSAiZ2NjIikpOgotCi0gICAgICAgICMgd2hvIHdhbnRzIHN5bWJvbHMgYW5kIGEgbWFueSB0aW1lcyBsYXJnZXIgb3V0cHV0IGZpbGUKLSAgICAgICAgIyBzaG91bGQgZXhwbGljaXRseSBzd2l0Y2ggdGhlIGRlYnVnIG1vZGUgb24KLSAgICAgICAgIyBvdGhlcndpc2Ugd2UgbGV0IGRsbHdyYXAvbGQgc3RyaXAgdGhlIG91dHB1dCBmaWxlCi0gICAgICAgICMgKE9uIG15IG1hY2hpbmU6IDEwS0IgPCBzdHJpcHBlZF9maWxlIDwgPz8xMDBLQgotICAgICAgICAjICAgdW5zdHJpcHBlZF9maWxlID0gc3RyaXBwZWRfZmlsZSArIFhYWCBLQgotICAgICAgICAjICAoIFhYWD0yNTQgZm9yIGEgdHlwaWNhbCBweXRob24gZXh0ZW5zaW9uKSkKLSAgICAgICAgaWYgbm90IGRlYnVnOgotICAgICAgICAgICAgZXh0cmFfcHJlYXJncy5hcHBlbmQoIi1zIikKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLmxpbmsoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICMgZXhwb3J0X3N5bWJvbHMsIHdlIGRvIHRoaXMgaW4gb3VyIGRlZi1maWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZykKLQotICAgICMgbGluayAoKQotCi0gICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICMgb3ZlcnJpZGUgdGhlIG9iamVjdF9maWxlbmFtZXMgbWV0aG9kIGZyb20gQ0NvbXBpbGVyIHRvCi0gICAgIyBzdXBwb3J0IHJjIGFuZCByZXMtZmlsZXMKLSAgICBkZWYgb2JqZWN0X2ZpbGVuYW1lcyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGVuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfZGlyPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9JycpOgotICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6IG91dHB1dF9kaXIgPSAnJwotICAgICAgICBvYmpfbmFtZXMgPSBbXQotICAgICAgICBmb3Igc3JjX25hbWUgaW4gc291cmNlX2ZpbGVuYW1lczoKLSAgICAgICAgICAgICMgdXNlIG5vcm1jYXNlIHRvIG1ha2Ugc3VyZSAnLnJjJyBpcyByZWFsbHkgJy5yYycgYW5kIG5vdCAnLlJDJwotICAgICAgICAgICAgKGJhc2UsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0IChvcy5wYXRoLm5vcm1jYXNlKHNyY19uYW1lKSkKLSAgICAgICAgICAgIGlmIGV4dCBub3QgaW4gKHNlbGYuc3JjX2V4dGVuc2lvbnMgKyBbJy5yYyddKToKLSAgICAgICAgICAgICAgICByYWlzZSBVbmtub3duRmlsZUVycm9yKCJ1bmtub3duIGZpbGUgdHlwZSAnJXMnIChmcm9tICclcycpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAoZXh0LCBzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBzdHJpcF9kaXI6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUgKGJhc2UpCi0gICAgICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAgICAgIyB0aGVzZSBuZWVkIHRvIGJlIGNvbXBpbGVkIHRvIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYucmVzX2V4dGVuc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYub2JqX2V4dGVuc2lvbikpCi0gICAgICAgIHJldHVybiBvYmpfbmFtZXMKLQotICAgICMgb2JqZWN0X2ZpbGVuYW1lcyAoKQotCi0gICAgIyBvdmVycmlkZSB0aGUgZmluZF9saWJyYXJ5X2ZpbGUgbWV0aG9kIGZyb20gVW5peENDb21waWxlcgotICAgICMgdG8gZGVhbCB3aXRoIGZpbGUgbmFtaW5nL3NlYXJjaGluZyBkaWZmZXJlbmNlcwotICAgIGRlZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgotICAgICAgICBzaG9ydGxpYiA9ICclcy5saWInICUgbGliCi0gICAgICAgIGxvbmdsaWIgPSAnbGliJXMubGliJyAlIGxpYiAgICAjIHRoaXMgZm9ybSB2ZXJ5IHJhcmUKLQotICAgICAgICAjIGdldCBFTVgncyBkZWZhdWx0IGxpYnJhcnkgZGlyZWN0b3J5IHNlYXJjaCBwYXRoCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVteF9kaXJzID0gb3MuZW52aXJvblsnTElCUkFSWV9QQVRIJ10uc3BsaXQoJzsnKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IFtdCi0KLSAgICAgICAgZm9yIGRpciBpbiBkaXJzICsgZW14X2RpcnM6Ci0gICAgICAgICAgICBzaG9ydGxpYnAgPSBvcy5wYXRoLmpvaW4oZGlyLCBzaG9ydGxpYikKLSAgICAgICAgICAgIGxvbmdsaWJwID0gb3MucGF0aC5qb2luKGRpciwgbG9uZ2xpYikKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNob3J0bGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0bGlicAotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsb25nbGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvbmdsaWJwCi0KLSAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotIyBjbGFzcyBFTVhDQ29tcGlsZXIKLQotCi0jIEJlY2F1c2UgdGhlc2UgY29tcGlsZXJzIGFyZW4ndCBjb25maWd1cmVkIGluIFB5dGhvbidzIHB5Y29uZmlnLmggZmlsZSBieQotIyBkZWZhdWx0LCB3ZSBzaG91bGQgYXQgbGVhc3Qgd2FybiB0aGUgdXNlciBpZiBoZSBpcyB1c2luZyBhIHVubW9kaWZpZWQKLSMgdmVyc2lvbi4KLQotQ09ORklHX0hfT0sgPSAib2siCi1DT05GSUdfSF9OT1RPSyA9ICJub3Qgb2siCi1DT05GSUdfSF9VTkNFUlRBSU4gPSAidW5jZXJ0YWluIgotCi1kZWYgY2hlY2tfY29uZmlnX2goKToKLQotICAgICIiIkNoZWNrIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHNwZWNpZmljYWxseSwgcHljb25maWcuaCkKLSAgICBhcHBlYXJzIGFtZW5hYmxlIHRvIGJ1aWxkaW5nIGV4dGVuc2lvbnMgd2l0aCBHQ0MuICBSZXR1cm5zIGEgdHVwbGUKLSAgICAoc3RhdHVzLCBkZXRhaWxzKSwgd2hlcmUgJ3N0YXR1cycgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgotICAgICAgQ09ORklHX0hfT0sKLSAgICAgICAgYWxsIGlzIHdlbGwsIGdvIGFoZWFkIGFuZCBjb21waWxlCi0gICAgICBDT05GSUdfSF9OT1RPSwotICAgICAgICBkb2Vzbid0IGxvb2sgZ29vZAotICAgICAgQ09ORklHX0hfVU5DRVJUQUlOCi0gICAgICAgIG5vdCBzdXJlIC0tIHVuYWJsZSB0byByZWFkIHB5Y29uZmlnLmgKLSAgICAnZGV0YWlscycgaXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgc2l0dWF0aW9uLgotCi0gICAgTm90ZSB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY29uY2x1ZGUgIk9LIjogZWl0aGVyICdzeXMudmVyc2lvbicgY29udGFpbnMKLSAgICB0aGUgc3RyaW5nICJHQ0MiIChpbXBseWluZyB0aGF0IHRoaXMgUHl0aG9uIHdhcyBidWlsdCB3aXRoIEdDQyksIG9yIHRoZQotICAgIGluc3RhbGxlZCAicHljb25maWcuaCIgY29udGFpbnMgdGhlIHN0cmluZyAiX19HTlVDX18iLgotICAgICIiIgotCi0gICAgIyBYWFggc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIGNoZWNrcyBzeXMudmVyc2lvbiwgaXQncyBub3Qgc3RyaWN0bHkgYQotICAgICMgInB5Y29uZmlnLmgiIGNoZWNrIC0tIHNob3VsZCBwcm9iYWJseSBiZSByZW5hbWVkLi4uCi0KLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIyBpZiBzeXMudmVyc2lvbiBjb250YWlucyBHQ0MgdGhlbiBweXRob24gd2FzIGNvbXBpbGVkIHdpdGgKLSAgICAjIEdDQywgYW5kIHRoZSBweWNvbmZpZy5oIGZpbGUgc2hvdWxkIGJlIE9LCi0gICAgaWYgc3lzLnZlcnNpb24uZmluZCgiR0NDIikgPj0gMDoKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9PSywgInN5cy52ZXJzaW9uIG1lbnRpb25zICdHQ0MnIikKLQotICAgIGZuID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCi0gICAgdHJ5OgotICAgICAgICAjIEl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byByZWFkIHNpbmdsZSBsaW5lcyB0byBzZWFyY2guCi0gICAgICAgICMgQnV0IHdlIGRvIHRoaXMgb25seSBvbmNlLCBhbmQgaXQgaXMgZmFzdCBlbm91Z2gKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSBmLnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6Ci0gICAgICAgICMgaWYgd2UgY2FuJ3QgcmVhZCB0aGlzIGZpbGUsIHdlIGNhbm5vdCBzYXkgaXQgaXMgd3JvbmcKLSAgICAgICAgIyB0aGUgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBsYXRlciBhYm91dCB0aGlzIGZpbGUgYXMgbWlzc2luZwotICAgICAgICByZXR1cm4gKENPTkZJR19IX1VOQ0VSVEFJTiwKLSAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVhZCAnJXMnOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvcikpCi0KLSAgICBlbHNlOgotICAgICAgICAjICJweWNvbmZpZy5oIiBjb250YWlucyBhbiAiI2lmZGVmIF9fR05VQ19fIiBvciBzb21ldGhpbmcgc2ltaWxhcgotICAgICAgICBpZiBzLmZpbmQoIl9fR05VQ19fIikgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICInJXMnIG1lbnRpb25zICdfX0dOVUNfXyciICUgZm4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX05PVE9LLCAiJyVzJyBkb2VzIG5vdCBtZW50aW9uICdfX0dOVUNfXyciICUgZm4pCi0KLQotZGVmIGdldF92ZXJzaW9ucygpOgotICAgICIiIiBUcnkgdG8gZmluZCBvdXQgdGhlIHZlcnNpb25zIG9mIGdjYyBhbmQgbGQuCi0gICAgICAgIElmIG5vdCBwb3NzaWJsZSBpdCByZXR1cm5zIE5vbmUgZm9yIGl0LgotICAgICIiIgotICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KLSAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCi0gICAgaW1wb3J0IHJlCi0KLSAgICBnY2NfZXhlID0gZmluZF9leGVjdXRhYmxlKCdnY2MnKQotICAgIGlmIGdjY19leGU6Ci0gICAgICAgIG91dCA9IG9zLnBvcGVuKGdjY19leGUgKyAnIC1kdW1wdmVyc2lvbicsJ3InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0LmNsb3NlKCkKLSAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKCcoXGQrXC5cZCtcLlxkKyknLCBvdXRfc3RyaW5nLCByZS5BU0NJSSkKLSAgICAgICAgaWYgcmVzdWx0OgotICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBTdHJpY3RWZXJzaW9uKHJlc3VsdC5ncm91cCgxKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgICMgRU1YIGxkIGhhcyBubyB3YXkgb2YgcmVwb3J0aW5nIHZlcnNpb24gbnVtYmVyLCBhbmQgd2UgdXNlIEdDQwotICAgICMgYW55d2F5IC0gc28gd2UgY2FuIGxpbmsgT01GIERMTHMKLSAgICBsZF92ZXJzaW9uID0gTm9uZQotICAgIHJldHVybiAoZ2NjX3ZlcnNpb24sIGxkX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weSBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CmluZGV4IGViMTNjOTguLjhiOTMwNTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CkBAIC0zNSw4ICszNSw4IEBACiAKIGNsYXNzIERpc3R1dGlsc0ZpbGVFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBpbiB0aGUgZmlsZXN5c3RlbTogZXhwZWN0ZWQgZmlsZSBub3QgZm91bmQsIGV0Yy4KLSAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIElPRXJyb3Igb3IKLSAgICBPU0Vycm9yIGNvdWxkIGJlIHJhaXNlZC4iIiIKKyAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIE9TRXJyb3IKKyAgICBjb3VsZCBiZSByYWlzZWQuIiIiCiAgICAgcGFzcwogCiBjbGFzcyBEaXN0dXRpbHNPcHRpb25FcnJvciAoRGlzdHV0aWxzRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQppbmRleCA5YmRkMTRlLi5mNmVkMjkwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQpAQCAtMjcsMjYgKzI3LDI2IEBACiAgICAgdHJ5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmc3JjID0gb3BlbihzcmMsICdyYicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlLnN0cmVycm9yKSkKIAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkc3QgPSBvcGVuKGRzdCwgJ3diJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZzcmMucmVhZChidWZmZXJfc2l6ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkc3Qud3JpdGUoYnVmKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogICAgIGZpbmFsbHk6CkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICBjb3B5X2l0ID0gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRzdCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAobnVtLCBtc2cpID0gZQogICAgICAgICBpZiBudW0gPT0gZXJybm8uRVhERVY6CiAgICAgICAgICAgICBjb3B5X2l0ID0gVHJ1ZQpAQCAtMjA1LDExICsyMDUsMTEgQEAKICAgICAgICAgY29weV9maWxlKHNyYywgZHN0LCB2ZXJib3NlPXZlcmJvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzcmMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgKG51bSwgbXNnKSA9IGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZHN0KQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgImNvdWxkbid0IG1vdmUgJyVzJyB0byAnJXMnIGJ5IGNvcHkvZGVsZXRlOiAiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkgYi9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKaW5kZXggYjNmNmNlMS4uOTY4OGYyMCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQpAQCAtNzI5LDcgKzcyOSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG1hbmlmZXN0X2ZpbGUKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgbWFuaWZlc3RfZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgLS0gTWlzY2VsbGFuZW91cyBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3NwYXduLnB5IGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQppbmRleCBmNThjNTVmLi5iMWM1YTQ0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKQEAgLTMyLDggKzMyLDYgQEAKICAgICAgICAgX3NwYXduX3Bvc2l4KGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKICAgICBlbGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgX3NwYXduX250KGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49ZHJ5X3J1bikKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIF9zcGF3bl9vczIoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAgICJkb24ndCBrbm93IGhvdyB0byBzcGF3biBwcm9ncmFtcyBvbiBwbGF0Zm9ybSAnJXMnIiAlIG9zLm5hbWUpCkBAIC03NCwyNiArNzIsNiBAQAogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAogICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykpCiAKLWRlZiBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgIGV4ZWN1dGFibGUgPSBjbWRbMF0KLSAgICBpZiBzZWFyY2hfcGF0aDoKLSAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKLSAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCi0gICAgaWYgbm90IGRyeV9ydW46Ci0gICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCi0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiY29tbWFuZCAnJXMnIGZhaWxlZDogJXMiICUgKGNtZFswXSwgZXhjLmFyZ3NbLTFdKSkKLSAgICAgICAgaWYgcmMgIT0gMDoKLSAgICAgICAgICAgICMgYW5kIHRoaXMgcmVmbGVjdHMgdGhlIGNvbW1hbmQgcnVubmluZyBidXQgZmFpbGluZwotICAgICAgICAgICAgbG9nLmRlYnVnKCJjb21tYW5kICclcycgZmFpbGVkIHdpdGggZXhpdCBzdGF0dXMgJWQiICUgKGNtZFswXSwgcmMpKQotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJyVzJyBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kWzBdLCByYykpCi0KIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiAgICAgX2NmZ190YXJnZXQgPSBOb25lCkBAIC0xODAsNyArMTU4LDcgQEAKICAgICBwYXRocyA9IHBhdGguc3BsaXQob3MucGF0aHNlcCkKICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGV4ZWN1dGFibGUpCiAKLSAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3Igb3MubmFtZSA9PSAnb3MyJykgYW5kIChleHQgIT0gJy5leGUnKToKKyAgICBpZiAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CiAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCiAKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZXhlY3V0YWJsZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CmluZGV4IGI5NDc5ODguLjc1NTM3ZGIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CkBAIC0xMTQsOCArMTE0LDYgQEAKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIiwgcHl0aG9uX2RpcikKICAgICBlbGlmIG9zLm5hbWUgPT0gIm50IjoKICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiSW5jbHVkZSIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICJJIGRvbid0IGtub3cgd2hlcmUgUHl0aG9uIGluc3RhbGxzIGl0cyBDIGhlYWRlciBmaWxlcyAiCkBAIC0xNTcsMTEgKzE1NSw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikKLSAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6Ci0gICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIERpc3R1dGlsc1BsYXRmb3JtRXJyb3IoCiAgICAgICAgICAgICAiSSBkb24ndCBrbm93IHdoZXJlIFB5dGhvbiBpbnN0YWxscyBpdHMgbGlicmFyeSAiCkBAIC00NDIsNyArNDM1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKICAgICAgICAgcGFyc2VfbWFrZWZpbGUoZmlsZW5hbWUsIGcpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXlfbXNnID0gbXlfbXNnICsgIiAoJXMpIiAlIG1zZy5zdHJlcnJvcgpAQCAtNDU0LDcgKzQ0Nyw3IEBACiAgICAgICAgIGZpbGVuYW1lID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmaWxlOgogICAgICAgICAgICAgcGFyc2VfY29uZmlnX2goZmlsZSwgZykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQogICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CiAgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCkBAIC00OTIsNyArNDg1LDYgQEAKICAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQogICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQogCi0gICAgZ1snU08nXSA9ICcucHlkJwogICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIGdbJ0VYRSddID0gIi5leGUiCiAgICAgZ1snVkVSU0lPTiddID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkucmVwbGFjZSgiLiIsICIiKQpAQCAtNTAyLDI0ICs0OTQsNiBAQAogICAgIF9jb25maWdfdmFycyA9IGcKIAogCi1kZWYgX2luaXRfb3MyKCk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBPUy8yIiIiCi0gICAgZyA9IHt9Ci0gICAgIyBzZXQgYmFzaWMgaW5zdGFsbCBkaXJlY3RvcmllcwotICAgIGdbJ0xJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgZ1snQklOTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLQotICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCi0gICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCi0KLSAgICBnWydTTyddID0gJy5weWQnCi0gICAgZ1snRVhUX1NVRkZJWCddID0gJy5weWQnCi0gICAgZ1snRVhFJ10gPSAiLmV4ZSIKLQotICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKLSAgICBfY29uZmlnX3ZhcnMgPSBnCi0KLQogZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CiAgICAgIiIiV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24KICAgICB2YXJpYWJsZXMgcmVsZXZhbnQgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgR2VuZXJhbGx5IHRoaXMgaW5jbHVkZXMKQEAgLTU0NCw2ICs1MTgsMTEgQEAKICAgICAgICAgX2NvbmZpZ192YXJzWydwcmVmaXgnXSA9IFBSRUZJWAogICAgICAgICBfY29uZmlnX3ZhcnNbJ2V4ZWNfcHJlZml4J10gPSBFWEVDX1BSRUZJWAogCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNlZSBpc3N1ZTE5NTU1CisgICAgICAgIFNPID0gX2NvbmZpZ192YXJzLmdldCgnRVhUX1NVRkZJWCcpCisgICAgICAgIGlmIFNPIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2NvbmZpZ192YXJzWydTTyddID0gU08KKwogICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCiAgICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgpAQCAtNTk0LDQgKzU3Myw3IEBACiAgICAgcmV0dXJuZWQgYnkgJ2dldF9jb25maWdfdmFycygpJy4gIEVxdWl2YWxlbnQgdG8KICAgICBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKICAgICAiIiIKKyAgICBpZiBuYW1lID09ICdTTyc6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCdTTyBpcyBkZXByZWNhdGVkLCB1c2UgRVhUX1NVRkZJWCcsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQppbmRleCBkM2ZiMjRhLi42YjQyYzVhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKQEAgLTE2LDYgKzE2LDEzIEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgcGF0Y2gKIAogdHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKICAgICBpbXBvcnQgemlwZmlsZQogICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNzcsNyArODQsNyBAQAogCiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKIAogICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgdGFyZ2V0X25hbWUpCiAKQEAgLTI3NSw2ICsyODIsNTggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBBUkNISVZFX0ZPUk1BVFNbJ3h4eCddCiAKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0CisgICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKKyAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JworCisgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFVJRF9HSURfU1VQUE9SVCwgIlJlcXVpcmVzIGdycCBhbmQgcHdkIHN1cHBvcnQiKQorICAgIGRlZiB0ZXN0X3RhcmZpbGVfcm9vdF9vd25lcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgb3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXJjaGl2ZV9uYW1lID0gbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEFyY2hpdmVVdGlsVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9kdW1iLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKaW5kZXggMGFkMzJkNC4uYzhjY2RjMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfZHVtYi4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgemlwZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC03NSw4ICs3NCw2IEBACiAgICAgICAgICMgc2VlIHdoYXQgd2UgaGF2ZQogICAgICAgICBkaXN0X2NyZWF0ZWQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihwa2dfZGlyLCAnZGlzdCcpKQogICAgICAgICBiYXNlID0gIiVzLiVzLnppcCIgJSAoZGlzdC5nZXRfZnVsbG5hbWUoKSwgY21kLnBsYXRfbmFtZSkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgIGJhc2UgPSBiYXNlLnJlcGxhY2UoJzonLCAnLScpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXN0X2NyZWF0ZWQsIFtiYXNlXSkKIApAQCAtOTAsNyArODcsNyBAQAogICAgICAgICBjb250ZW50cyA9IHNvcnRlZChvcy5wYXRoLmJhc2VuYW1lKGZuKSBmb3IgZm4gaW4gY29udGVudHMpCiAgICAgICAgIHdhbnRlZCA9IFsnZm9vLTAuMS1weSVzLiVzLmVnZy1pbmZvJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLCAnZm9vLnB5J10KICAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpKQorICAgICAgICAgICAgd2FudGVkLmFwcGVuZCgnZm9vLiVzLnB5YycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBzb3J0ZWQod2FudGVkKSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQppbmRleCAyY2U5ZDQ0Li5jOGY2Yjg5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CkBAIC0yLDcgKzIsNiBAQAogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQpAQCAtNjMsNyArNjIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNhY2hlX2RpcikpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBweWNfZmlsZXMgPSBvcy5saXN0ZGlyKHB5Y2FjaGVfZGlyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19pbml0X18uJXMucHljIiAlIGltcC5nZXRfdGFnKCksIHB5Y19maWxlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBweWNfZmlsZXMpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYWNrYWdlX2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgYnVncyAjMTY2ODU5Ni8jMTcyMDg5NwpAQCAtMTAyLDcgKzEwMiw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnYm9pbGVkZWdncy4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ10pCiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAnYnl0ZS1jb21waWxlIGRpc2FibGVkJykKICAgICBkZWYgdGVzdF9ieXRlX2NvbXBpbGVfb3B0aW1pemVkKHNlbGYpOgpAQCAtMTE5LDcgKzEyMCw4IEBACiAgICAgICAgIGZvdW5kID0gb3MubGlzdGRpcihjbWQuYnVpbGRfbGliKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnX19weWNhY2hlX18nLCAnYm9pbGVkZWdncy5weSddKQogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGNtZC5idWlsZF9saWIsICdfX3B5Y2FjaGVfXycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksIFsnYm9pbGVkZWdncy4lcy5weW8nICUgaW1wLmdldF90YWcoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZvdW5kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgZGVmIHRlc3RfZGlyX2luX3BhY2thZ2VfZGF0YShzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQppbmRleCAwZThkNjVlLi40ZGU4MjVhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKQEAgLTg3LDcgKzg3LDcgQEAKIAogICAgICAgICBjb25maWcgPSBsaXN0KHNvcnRlZChjb25maWcuaXRlbXMoKSkpCiAgICAgICAgIHdhaXRlZCA9IFsoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLCAoJ3JlYWxtJywgJ3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSwKKyAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCiAgICAgICAgICAgICAgICAgICAoJ3NlcnZlcicsICdzZXJ2ZXIxJyksICgndXNlcm5hbWUnLCAnbWUnKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWcsIHdhaXRlZCkKIApAQCAtOTYsNyArOTYsNyBAQAogICAgICAgICBjb25maWcgPSBjbWQuX3JlYWRfcHlwaXJjKCkKICAgICAgICAgY29uZmlnID0gbGlzdChzb3J0ZWQoY29uZmlnLml0ZW1zKCkpKQogICAgICAgICB3YWl0ZWQgPSBbKCdwYXNzd29yZCcsICdzZWNyZXQnKSwgKCdyZWFsbScsICdweXBpJyksCi0gICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJyksCisgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpLAogICAgICAgICAgICAgICAgICAgKCdzZXJ2ZXInLCAnc2VydmVyLWxvZ2luJyksICgndXNlcm5hbWUnLCAndGFyZWsnKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25maWcsIHdhaXRlZCkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCA5YThjYTE5Li5iN2ZkM2ZiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMzksNiArMzksNyBAQAogCiAKIGNsYXNzIERpc3RyaWJ1dGlvblRlc3RDYXNlKHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuRW52aXJvbkd1YXJkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMTMsNiArMjE0LDM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRpc3QuYW5ub3VuY2UsIGFyZ3MsIGt3YXJncykKIAogCisgICAgZGVmIHRlc3RfZmluZF9jb25maWdfZmlsZXNfZGlzYWJsZShzZWxmKToKKyAgICAgICAgIyBUaWNrZXQgIzExODA6IEFsbG93IHVzZXIgdG8gZGlzYWJsZSB0aGVpciBob21lIGNvbmZpZyBmaWxlLgorICAgICAgICB0ZW1wX2hvbWUgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgIi5weWRpc3R1dGlscy5jZmciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9IG9zLnBhdGguam9pbih0ZW1wX2hvbWUsICJweWRpc3R1dGlscy5jZmciKQorCisgICAgICAgIHdpdGggb3Blbih1c2VyX2ZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdbZGlzdHV0aWxzXVxuJykKKworICAgICAgICBkZWYgX2V4cGFuZGVyKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHRlbXBfaG9tZQorCisgICAgICAgIG9sZF9leHBhbmRlciA9IG9zLnBhdGguZXhwYW5kdXNlcgorICAgICAgICBvcy5wYXRoLmV4cGFuZHVzZXIgPSBfZXhwYW5kZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IERpc3RyaWJ1dGlvbigpCisgICAgICAgICAgICBhbGxfZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKworICAgICAgICAgICAgZCA9IERpc3RyaWJ1dGlvbihhdHRycz17J3NjcmlwdF9hcmdzJzogWyctLW5vLXVzZXItY2ZnJ119KQorICAgICAgICAgICAgZmlsZXMgPSBkLmZpbmRfY29uZmlnX2ZpbGVzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IG9sZF9leHBhbmRlcgorCisgICAgICAgICMgbWFrZSBzdXJlIC0tbm8tdXNlci1jZmcgZGlzYWJsZXMgdGhlIHVzZXIgY2ZnIGZpbGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsX2ZpbGVzKS0xLCBsZW4oZmlsZXMpKQorCiBjbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHN1cHBvcnQuRW52aXJvbkd1YXJkLAogICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTQwNiwxNCArNDM1LDE0IEBACiAgICAgICAgIFBLR19JTkZPLnNlZWsoMCkKICAgICAgICAgbWV0YWRhdGEucmVhZF9wa2dfZmlsZShQS0dfSU5GTykKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5uYW1lLCAicGFja2FnZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLnZlcnNpb24sICIxLjAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5kZXNjcmlwdGlvbiwgInh4eCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLmRvd25sb2FkX3VybCwgJ2h0dHA6Ly9leGFtcGxlLmNvbScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG1ldGFkYXRhLmtleXdvcmRzLCBbJ29uZScsICd0d28nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEucGxhdGZvcm1zLCBbJ1VOS05PV04nXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMobWV0YWRhdGEub2Jzb2xldGVzLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhtZXRhZGF0YS5yZXF1aXJlcywgWydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRhZGF0YS5uYW1lLCAicGFja2FnZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEudmVyc2lvbiwgIjEuMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEuZGVzY3JpcHRpb24sICJ4eHgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLmRvd25sb2FkX3VybCwgJ2h0dHA6Ly9leGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEua2V5d29yZHMsIFsnb25lJywgJ3R3byddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnBsYXRmb3JtcywgWydVTktOT1dOJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0YWRhdGEub2Jzb2xldGVzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGFkYXRhLnJlcXVpcmVzLCBbJ2ZvbyddKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKaW5kZXggZWRlODhlNS4uMThlMWU1NyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGwucHkKQEAgLTEsNyArMSw2IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbC4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzaXRlCkBAIC05NCw3ICs5Myw3IEBACiAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCiAKLSAgICAgICAgZm9yIGtleSBpbiAoJ250X3VzZXInLCAndW5peF91c2VyJywgJ29zMl9ob21lJyk6CisgICAgICAgIGZvciBrZXkgaW4gKCdudF91c2VyJywgJ3VuaXhfdXNlcicpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIElOU1RBTExfU0NIRU1FUykKIAogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCd9KQpAQCAtMTkzLDcgKzE5Miw4IEBACiAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICBmb3VuZCA9IFtvcy5wYXRoLmJhc2VuYW1lKGxpbmUpIGZvciBsaW5lIGluIGNvbnRlbnQuc3BsaXRsaW5lcygpXQotICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8uJXMucHljJyAlIGltcC5nZXRfdGFnKCksICdzYXloaScsCisgICAgICAgIGV4cGVjdGVkID0gWydoZWxsby5weScsICdoZWxsby4lcy5weWMnICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgJ3NheWhpJywKICAgICAgICAgICAgICAgICAgICAgJ1VOS05PV04tMC4wLjAtcHklcy4lcy5lZ2ctaW5mbycgJSBzeXMudmVyc2lvbl9pbmZvWzoyXV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgZXhwZWN0ZWQpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQppbmRleCBkMGRmY2EwLi40MGRkMWE5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CkBAIC0xLDcgKzEsNyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGxfZGF0YS4iIiIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYiBpbXBvcnQgaW5zdGFsbF9saWIKQEAgLTQ0LDggKzQ0LDEwIEBACiAgICAgICAgIGYgPSBvcy5wYXRoLmpvaW4ocHJvamVjdF9kaXIsICdmb28ucHknKQogICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZiwgJyMgcHl0aG9uIGZpbGUnKQogICAgICAgICBjbWQuYnl0ZV9jb21waWxlKFtmXSkKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIGRlYnVnX292ZXJyaWRlPVRydWUpCi0gICAgICAgIHB5b19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKQorICAgICAgICBweW9fZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX2ZpbGUpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHlvX2ZpbGUpKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKaW5kZXggZTYzNTlkNi4uMTY0NTg2YiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQpAQCAtMTQsNiArMTQsMTIgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBaTElCX1NVUFBPUlQgPSBGYWxzZQogCit0cnk6CisgICAgaW1wb3J0IGdycAorICAgIGltcG9ydCBwd2QKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVUlEX0dJRF9TVVBQT1JUID0gRmFsc2UKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdCBpbXBvcnQgc2Rpc3QsIHNob3dfZm9ybWF0cwogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCkBAIC00MjUsNiArNDMxLDU2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGZpbGVuYW1lcyksIFsnZmFrZS0xLjAnLCAnZmFrZS0xLjAvUEtHLUlORk8nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zha2UtMS4wL1JFQURNRS5tYW51YWwnXSkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9tYWtlX2Rpc3RyaWJ1dGlvbl9vd25lcl9ncm91cChzZWxmKToKKworICAgICAgICAjIGNoZWNrIGlmIHRhciBhbmQgZ3ppcCBhcmUgaW5zdGFsbGVkCisgICAgICAgIGlmIChmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGlzIE5vbmUgb3IKKyAgICAgICAgICAgICAgICBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSBpcyBOb25lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgbm93IGJ1aWxkaW5nIGEgc2Rpc3QKKyAgICAgICAgZGlzdCwgY21kID0gc2VsZi5nZXRfY21kKCkKKworICAgICAgICAjIGNyZWF0aW5nIGEgZ3p0YXIgYW5kIHNwZWNpZnlpbmcgdGhlIG93bmVyK2dyb3VwCisgICAgICAgIGNtZC5mb3JtYXRzID0gWydnenRhciddCisgICAgICAgIGNtZC5vd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBjbWQuZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorICAgICAgICBjbWQucnVuKCkKKworICAgICAgICAjIG1ha2luZyBzdXJlIHdlIGhhdmUgdGhlIGdvb2QgcmlnaHRzCisgICAgICAgIGFyY2hpdmVfbmFtZSA9IGpvaW4oc2VsZi50bXBfZGlyLCAnZGlzdCcsICdmYWtlLTEuMC50YXIuZ3onKQorICAgICAgICBhcmNoaXZlID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBhcmNoaXZlLmdldG1lbWJlcnMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci51aWQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIuZ2lkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXJjaGl2ZS5jbG9zZSgpCisKKyAgICAgICAgIyBidWlsZGluZyBhIHNkaXN0IGFnYWluCisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyCisgICAgICAgIGNtZC5mb3JtYXRzID0gWydnenRhciddCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cworICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisKKyAgICAgICAgIyBub3RlIHRoYXQgd2UgYXJlIG5vdCB0ZXN0aW5nIHRoZSBncm91cCBvd25lcnNoaXAgaGVyZQorICAgICAgICAjIGJlY2F1c2UsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm1zIGFuZCB0aGUgY29udGFpbmVyCisgICAgICAgICMgcmlnaHRzIChzZWUgIzc0MDgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCBvcy5nZXR1aWQoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoU0Rpc3RUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDc4MTJkOC4uYjVmZGM5OCAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CkBAIC0xLDE2ICsxLDE0IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLnN5c2NvbmZpZy4iIiIKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAotaW1wb3J0IHRlc3QKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiBmcm9tIGRpc3R1dGlscy5jY29tcGlsZXIgaW1wb3J0IGdldF9kZWZhdWx0X2NvbXBpbGVyCiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiAKLWNsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3lzY29uZmlnVGVzdENhc2Uoc3VwcG9ydC5FbnZpcm9uR3VhcmQsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN1cGVyKFN5c2NvbmZpZ1Rlc3RDYXNlLCBzZWxmKS5zZXRVcCgpCiAgICAgICAgIHNlbGYubWFrZWZpbGUgPSBOb25lCkBAIC0zMiw3ICszMCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjb25maWdfaCksIGNvbmZpZ19oKQogCiAgICAgZGVmIHRlc3RfZ2V0X3B5dGhvbl9saWIoc2VsZik6Ci0gICAgICAgIGxpYl9kaXIgPSBzeXNjb25maWcuZ2V0X3B5dGhvbl9saWIoKQogICAgICAgICAjIFhYWCBkb2Vzbid0IHdvcmsgb24gTGludXggd2hlbiBQeXRob24gd2FzIG5ldmVyIGluc3RhbGxlZCBiZWZvcmUKICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKGxpYl9kaXIpLCBsaWJfZGlyKQogICAgICAgICAjIHRlc3QgZm9yIHB5dGhvbnh4LmxpYj8KQEAgLTY3LDggKzY0LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhQeXRob25faCksIFB5dGhvbl9oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5c2NvbmZpZy5faXNfcHl0aG9uX3NvdXJjZV9kaXIoc3JjZGlyKSkKICAgICAgICAgZWxpZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZGlybmFtZShzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjZGlyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICAgICBzcmNkaXIpCiAKICAgICBkZWYgdGVzdF9zcmNkaXJfaW5kZXBlbmRlbnRfb2ZfY3dkKHNlbGYpOgogICAgICAgICAjIHNyY2RpciBzaG91bGQgYmUgaW5kZXBlbmRlbnQgb2YgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKQEAgLTEyOSwxMCArMTI3LDEzIEBACiAKICAgICBkZWYgdGVzdF9zeXNjb25maWdfbW9kdWxlKHNlbGYpOgogICAgICAgICBpbXBvcnQgc3lzY29uZmlnIGFzIGdsb2JhbF9zeXNjb25maWcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpKQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyksJ2NvbXBpbGVyIGZsYWdzIGN1c3RvbWl6ZWQnKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpLAorICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGVyIGZsYWdzIGN1c3RvbWl6ZWQnKQogICAgIGRlZiB0ZXN0X3N5c2NvbmZpZ19jb21waWxlcl92YXJzKHNlbGYpOgogICAgICAgICAjIE9uIE9TIFgsIGJpbmFyeSBpbnN0YWxsZXJzIHN1cHBvcnQgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZGluZyBvbgogICAgICAgICAjIHZhcmlvdXMgbGV2ZWxzIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggZGlmZmVyaW5nIFhjb2RlCkBAIC0xNTEsOSArMTUyLDMwIEBACiAgICAgICAgIGltcG9ydCBzeXNjb25maWcgYXMgZ2xvYmFsX3N5c2NvbmZpZwogICAgICAgICBpZiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJyk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciwgJ1NPJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX3ZhbHVlKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19pbl92YXJzKHNlbGYpOgorICAgICAgICB2YXJzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHZhcnNbJ1NPJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyc1snU08nXSwgdmFyc1snRVhUX1NVRkZJWCddKQogCiAKIGRlZiB0ZXN0X3N1aXRlKCk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQppbmRleCBhNDc0NTk2Li4xZmNiYTg4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKQEAgLTc3LDcgKzc3LDcgQEAKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogICAgICAgICBmb3IgYXR0ciwgd2FpdGVkIGluICgoJ3VzZXJuYW1lJywgJ21lJyksICgncGFzc3dvcmQnLCAnc2VjcmV0JyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmVhbG0nLCAncHlwaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJykpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlcG9zaXRvcnknLCAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScpKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihjbWQsIGF0dHIpLCB3YWl0ZWQpCiAKICAgICBkZWYgdGVzdF9zYXZlZF9wYXNzd29yZChzZWxmKToKQEAgLTExNCwxMSArMTE0LDEyIEBACiAgICAgICAgICAjIHdoYXQgZGlkIHdlIHNlbmQgPwogICAgICAgICBoZWFkZXJzID0gZGljdChzZWxmLmxhc3Rfb3Blbi5yZXEuaGVhZGVycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjA4NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhoZWFkZXJzWydDb250ZW50LXR5cGUnXS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYubGFzdF9vcGVuLnJlcS5nZXRfbWV0aG9kKCksICdQT1NUJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpJykKLSAgICAgICAgc2VsZi5hc3NlcnRfKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKKyAgICAgICAgY29udGVudF90eXBlID0gaGVhZGVyc1snQ29udGVudC10eXBlJ10KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbnRlbnRfdHlwZS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9tZXRob2QoKSwgJ1BPU1QnKQorICAgICAgICBleHBlY3RlZF91cmwgPSAnaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksIGV4cGVjdGVkX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHVwbG9hZFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQppbmRleCAwMDIxOWNmLi41NDg4NjVjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQpAQCAtMjM2LDcgKzIzNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9yb290LCAnYzpcXHJvb3QnLCAnaXRzXFxoZXJlJykKIAotICAgICAgICAjIFhYWCBwbGF0Zm9ybXMgdG8gYmUgY292ZXJlZDogb3MyLCBtYWMKKyAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG1hYwogCiAgICAgZGVmIHRlc3RfY2hlY2tfZW52aXJvbihzZWxmKToKICAgICAgICAgdXRpbC5fZW52aXJvbl9jaGVja2VkID0gMApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IDY3ZDgxNjYuLmVmYjM4MzQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdHJpbmcKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgpAQCAtMTU0LDEyICsxNTQsNiBAQAogICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIChkcml2ZSwgcGF0aCkgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCi0gICAgICAgIGlmIHBhdGhbMF0gPT0gb3Muc2VwOgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCi0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCJub3RoaW5nIGtub3duIGFib3V0IHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKIApAQCAtMjEzLDggKzIwNyw4IEBACiAKIAogZGVmIGdyb2tfZW52aXJvbm1lbnRfZXJyb3IgKGV4YywgcHJlZml4PSJlcnJvcjogIik6Ci0gICAgIiIiR2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIEVudmlyb25tZW50RXJyb3IgKElPRXJyb3Igb3IKLSAgICBPU0Vycm9yKSBleGNlcHRpb24gb2JqZWN0LiAgSGFuZGxlcyBQeXRob24gMS41LjEgYW5kIDEuNS4yIHN0eWxlcywgYW5kCisgICAgIiIiR2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBmcm9tIGFuIE9TRXJyb3IKKyAgICBleGNlcHRpb24gb2JqZWN0LiAgSGFuZGxlcyBQeXRob24gMS41LjEgYW5kIDEuNS4yIHN0eWxlcywgYW5kCiAgICAgZG9lcyB3aGF0IGl0IGNhbiB0byBkZWFsIHdpdGggZXhjZXB0aW9uIG9iamVjdHMgdGhhdCBkb24ndCBoYXZlIGEKICAgICBmaWxlbmFtZSAod2hpY2ggaGFwcGVucyB3aGVuIHRoZSBlcnJvciBpcyBkdWUgdG8gYSB0d28tZmlsZSBvcGVyYXRpb24sCiAgICAgc3VjaCBhcyAncmVuYW1lKCknIG9yICdsaW5rKCknLiAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBhcyBhIHN0cmluZwpAQCAtNDU5LDkgKzQ1MywxMCBAQAogICAgICAgICAgICAgIyAgIGNmaWxlIC0gYnl0ZS1jb21waWxlZCBmaWxlCiAgICAgICAgICAgICAjICAgZGZpbGUgLSBwdXJwb3J0ZWQgc291cmNlIGZpbGVuYW1lIChzYW1lIGFzICdmaWxlJyBieSBkZWZhdWx0KQogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICAgICAgICAgIGRmaWxlID0gZmlsZQogICAgICAgICAgICAgaWYgcHJlZml4OgogICAgICAgICAgICAgICAgIGlmIGZpbGVbOmxlbihwcmVmaXgpXSAhPSBwcmVmaXg6CmRpZmYgLS1naXQgYS9MaWIvZG9jdGVzdC5weSBiL0xpYi9kb2N0ZXN0LnB5CmluZGV4IDNmMGQ5ZDkuLmZjZmNiYjAgMTAwNjQ0Ci0tLSBhL0xpYi9kb2N0ZXN0LnB5CisrKyBiL0xpYi9kb2N0ZXN0LnB5CkBAIC02Miw2ICs2Miw3IEBACiAgICAgJ1JFUE9SVF9ORElGRicsCiAgICAgJ1JFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUnLAogICAgICdSRVBPUlRJTkdfRkxBR1MnLAorICAgICdGQUlMX0ZBU1QnLAogICAgICMgMS4gVXRpbGl0eSBGdW5jdGlvbnMKICAgICAjIDIuIEV4YW1wbGUgJiBEb2NUZXN0CiAgICAgJ0V4YW1wbGUnLApAQCAtOTIsNiArOTMsNyBAQAogXQogCiBpbXBvcnQgX19mdXR1cmVfXworaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTE1MCwxMSArMTUyLDEzIEBACiBSRVBPUlRfQ0RJRkYgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfQ0RJRkYnKQogUkVQT1JUX05ESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX05ESUZGJykKIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJykKK0ZBSUxfRkFTVCA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ0ZBSUxfRkFTVCcpCiAKIFJFUE9SVElOR19GTEFHUyA9IChSRVBPUlRfVURJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9DRElGRiB8CiAgICAgICAgICAgICAgICAgICAgUkVQT1JUX05ESUZGIHwKLSAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKQorICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgfAorICAgICAgICAgICAgICAgICAgIEZBSUxfRkFTVCkKIAogIyBTcGVjaWFsIHN0cmluZyBtYXJrZXJzIGZvciB1c2UgaW4gYHdhbnRgIHN0cmluZ3M6CiBCTEFOS0xJTkVfTUFSS0VSID0gJzxCTEFOS0xJTkU+JwpAQCAtMjEyLDcgKzIxNiw3IEBACiAgICAgaWYgbW9kdWxlX3JlbGF0aXZlOgogICAgICAgICBwYWNrYWdlID0gX25vcm1hbGl6ZV9tb2R1bGUocGFja2FnZSwgMykKICAgICAgICAgZmlsZW5hbWUgPSBfbW9kdWxlX3JlbGF0aXZlX3BhdGgocGFja2FnZSwgZmlsZW5hbWUpCi0gICAgICAgIGlmIGhhc2F0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nKToKKyAgICAgICAgaWYgZ2V0YXR0cihwYWNrYWdlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdnZXRfZGF0YScpOgogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBwYWNrYWdlLl9fbG9hZGVyX18uZ2V0X2RhdGEoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IGZpbGVfY29udGVudHMuZGVjb2RlKGVuY29kaW5nKQpAQCAtOTQwLDYgKzk0NCw4IEBACiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlIGlzIGluc3BlY3QuZ2V0bW9kdWxlKG9iamVjdCkKICAgICAgICAgZWxpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19kaWN0X18gaXMgb2JqZWN0Ll9fZ2xvYmFsc19fCisgICAgICAgIGVsaWYgaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3Iob2JqZWN0KToKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19uYW1lX18gPT0gb2JqZWN0Ll9fb2JqY2xhc3NfXy5fX21vZHVsZV9fCiAgICAgICAgIGVsaWYgaW5zcGVjdC5pc2NsYXNzKG9iamVjdCk6CiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fbmFtZV9fID09IG9iamVjdC5fX21vZHVsZV9fCiAgICAgICAgIGVsaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CkBAIC05NzIsNyArOTc4LDcgQEAKICAgICAgICAgICAgIGZvciB2YWxuYW1lLCB2YWwgaW4gb2JqLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgdG8gZnVuY3Rpb25zICYgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpKSBhbmQKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkpIGFuZAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcm9tX21vZHVsZShtb2R1bGUsIHZhbCkpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maW5kKHRlc3RzLCB2YWwsIHZhbG5hbWUsIG1vZHVsZSwgc291cmNlX2xpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JzLCBzZWVuKQpAQCAtOTg0LDkgKzk5MCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18ga2V5cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3RyaW5nczogJXIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZSh2YWxuYW1lKSwpKQotICAgICAgICAgICAgICAgIGlmIG5vdCAoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtZXRob2QodmFsKSBvciBpbnNwZWN0LmlzbW9kdWxlKHZhbCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UodmFsLCBzdHIpKToKKyAgICAgICAgICAgICAgICBpZiBub3QgKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3BlY3QuaXNtb2R1bGUodmFsKSBvciBpc2luc3RhbmNlKHZhbCwgc3RyKSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkRvY1Rlc3RGaW5kZXIuZmluZDogX190ZXN0X18gdmFsdWVzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzdHJpbmdzLCBmdW5jdGlvbnMsIG1ldGhvZHMsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xhc3Nlcywgb3IgbW9kdWxlczogJXIiICUKQEAgLTEwMDUsNyArMTAxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGdldGF0dHIob2JqLCB2YWxuYW1lKS5fX2Z1bmNfXwogCiAgICAgICAgICAgICAgICAgIyBSZWN1cnNlIHRvIG1ldGhvZHMsIHByb3BlcnRpZXMsIGFuZCBuZXN0ZWQgY2xhc3Nlcy4KLSAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNmdW5jdGlvbih2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCisgICAgICAgICAgICAgICAgaWYgKChpbnNwZWN0Lmlzcm91dGluZSh2YWwpIG9yIGluc3BlY3QuaXNjbGFzcyh2YWwpIG9yCiAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWwsIHByb3BlcnR5KSkgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnJvbV9tb2R1bGUobW9kdWxlLCB2YWwpKToKICAgICAgICAgICAgICAgICAgICAgdmFsbmFtZSA9ICclcy4lcycgJSAobmFtZSwgdmFsbmFtZSkKQEAgLTEzNjcsNiArMTM3Miw5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgKCJ1bmtub3duIG91dGNvbWUiLCBvdXRjb21lKQogCisgICAgICAgICAgICBpZiBmYWlsdXJlcyBhbmQgc2VsZi5vcHRpb25mbGFncyAmIEZBSUxfRkFTVDoKKyAgICAgICAgICAgICAgICBicmVhaworCiAgICAgICAgICMgUmVzdG9yZSB0aGUgb3B0aW9uIGZsYWdzIChpbiBjYXNlIHRoZXkgd2VyZSBtb2RpZmllZCkKICAgICAgICAgc2VsZi5vcHRpb25mbGFncyA9IG9yaWdpbmFsX29wdGlvbmZsYWdzCiAKQEAgLTIzMDgsNiArMjMxNiwxMiBAQAogICAgIF9fc3RyX18gPSBzaG9ydERlc2NyaXB0aW9uCiAKIAorY2xhc3MgX0RvY1Rlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgIHBhc3MKKworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMzUzLDcgKzIzNjcsNyBAQAogCiAgICAgaWYgbm90IHRlc3RzIGFuZCBzeXMuZmxhZ3Mub3B0aW1pemUgPj0yOgogICAgICAgICAjIFNraXAgZG9jdGVzdHMgd2hlbiBydW5uaW5nIHdpdGggLU8yCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKICAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UobW9kdWxlKSkKICAgICAgICAgcmV0dXJuIHN1aXRlCiAgICAgZWxpZiBub3QgdGVzdHM6CkBAIC0yMzY3LDcgKzIzODEsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1vZHVsZSwgImhhcyBubyBkb2NzdHJpbmdzIikKIAogICAgIHRlc3RzLnNvcnQoKQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgIGlmIGxlbih0ZXN0LmV4YW1wbGVzKSA9PSAwOgpAQCAtMjQ3Nyw3ICsyNDkxLDcgQEAKICAgICBlbmNvZGluZwogICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgICAiIiIKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKIAogICAgICMgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgX25vcm1hbGl6ZV9tb2R1bGUgaXMgY2FsbGVkIGF0IHRoZSByaWdodAogICAgICMgbGV2ZWwuICBJZiBpdCB3ZXJlIGNhbGxlZCBpbiBEb2NGaWxlVGVzdCwgdGhlbiB0aGlzIGZ1bmN0aW9uCkBAIC0yNzI3LDEzICsyNzQxLDMwIEBACiAKIAogZGVmIF90ZXN0KCk6Ci0gICAgdGVzdGZpbGVzID0gW2FyZyBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XSBpZiBhcmcgYW5kIGFyZ1swXSAhPSAnLSddCi0gICAgaWYgbm90IHRlc3RmaWxlczoKLSAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgICAgIGlmICdfX2xvYWRlcl9fJyBpbiBnbG9iYWxzKCk6ICAgICAgICAgICMgcHl0aG9uIC1tCi0gICAgICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQotICAgICAgICBwcmludCgidXNhZ2U6IHswfSBbLXZdIGZpbGUgLi4uIi5mb3JtYXQobmFtZSkpCi0gICAgICAgIHJldHVybiAyCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3Rlc3QgcnVubmVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdmVyeSB2ZXJib3NlIG91dHB1dCBmb3IgYWxsIHRlc3RzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9wdGlvbicsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9T1BUSU9ORkxBR1NfQllfTkFNRS5rZXlzKCksIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnc3BlY2lmeSBhIGRvY3Rlc3Qgb3B0aW9uIGZsYWcgdG8gYXBwbHknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRvIHRoZSB0ZXN0IHJ1bjsgbWF5IGJlIHNwZWNpZmllZCBtb3JlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB0aGFuIG9uY2UgdG8gYXBwbHkgbXVsdGlwbGUgb3B0aW9ucycpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbC1mYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgZmlyc3QgZmFpbHVyZSAodGhpcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgYSBzaG9ydGhhbmQgZm9yIC1vIEZBSUxfRkFTVCwgYW5kIGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgLW8gb3B0aW9ucyknKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0cyB0byBydW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgdGVzdGZpbGVzID0gYXJncy5maWxlCisgICAgIyBWZXJib3NlIHVzZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgImluc3BlY3QgYXJndiIgbWFnaWMgaW4gRG9jVGVzdFJ1bm5lciwKKyAgICAjIGJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcgYXJncGFyc2Ugd2UgYXJlIHBhc3NpbmcgaXQgbWFudWFsbHkgbm93LgorICAgIHZlcmJvc2UgPSBhcmdzLnZlcmJvc2UKKyAgICBvcHRpb25zID0gMAorICAgIGZvciBvcHRpb24gaW4gYXJncy5vcHRpb246CisgICAgICAgIG9wdGlvbnMgfD0gT1BUSU9ORkxBR1NfQllfTkFNRVtvcHRpb25dCisgICAgaWYgYXJncy5mYWlsX2Zhc3Q6CisgICAgICAgIG9wdGlvbnMgfD0gRkFJTF9GQVNUCiAgICAgZm9yIGZpbGVuYW1lIGluIHRlc3RmaWxlczoKICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgogICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KQEAgLTI3NDMsOSArMjc3NCwxMCBAQAogICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtLCB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT12ZXJib3NlLCBvcHRpb25mbGFncz1vcHRpb25zKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weSBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQppbmRleCAyOTE0MzdjLi4wMzkyMzc5IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKKysrIGIvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CkBAIC0zNjgsOCArMzY4LDcgQEAKICAgICAgICAgICAgICAgICB5aWVsZCAoaW5kZW50ICsgJyAgICAhISBpbnZhbGlkIGVsZW1lbnQgaW4gdG9rZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0OiB7IXJ9Jy5mb3JtYXQodG9rZW4pKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB0b2tlbi5fcHAoaW5kZW50KycgICAgJyk6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKQogICAgICAgICBpZiBzZWxmLmRlZmVjdHM6CiAgICAgICAgICAgICBleHRyYSA9ICcgRGVmZWN0czoge30nLmZvcm1hdChzZWxmLmRlZmVjdHMpCiAgICAgICAgIGVsc2U6CkBAIC0xMzE1LDI0ICsxMzE0LDIyIEBACiAjIFBhcnNlcgogIwogCi0iIiJQYXJzZSBzdHJpbmdzIGFjY29yZGluZyB0byBSRkM4MjIvMjA0Ny8yODIyLzUzMjIgcnVsZXMuCi0KLVRoaXMgaXMgYSBzdGF0ZWxlc3MgcGFyc2VyLiAgRWFjaCBnZXRfWFhYIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgYW5kCi1yZXR1cm5zIGVpdGhlciBhIFRlcm1pbmFsIG9yIGEgVG9rZW5MaXN0IHJlcHJlc2VudGluZyB0aGUgUkZDIG9iamVjdCBuYW1lZAotYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKLWZyb20gdGhlIGlucHV0LiAgVGh1cyBhIHBhcnNlciBtZXRob2QgY29uc3VtZXMgdGhlIG5leHQgc3ludGFjdGljIGNvbnN0cnVjdAotb2YgYSBnaXZlbiB0eXBlIGFuZCByZXR1cm5zIGEgdG9rZW4gcmVwcmVzZW50aW5nIHRoZSBjb25zdHJ1Y3QgcGx1cyB0aGUKLXVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgotCi1Gb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAotdGhlbjoKLQotICAgIHBocmFzZSwgdmFsdWUgPSBnZXRfcGhyYXNlKHZhbHVlKQotCi1yZXR1cm5zIHRoZSBjb21wbGV0ZSBwaHJhc2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB2YWx1ZSwgcGx1cyBhbnkKLWNoYXJhY3RlcnMgbGVmdCBpbiB0aGUgc3RyaW5nIGFmdGVyIHRoZSBwaHJhc2UgaXMgcmVtb3ZlZC4KLQotIiIiCisjIFBhcnNlIHN0cmluZ3MgYWNjb3JkaW5nIHRvIFJGQzgyMi8yMDQ3LzI4MjIvNTMyMiBydWxlcy4KKyMKKyMgVGhpcyBpcyBhIHN0YXRlbGVzcyBwYXJzZXIuICBFYWNoIGdldF9YWFggZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBhbmQKKyMgcmV0dXJucyBlaXRoZXIgYSBUZXJtaW5hbCBvciBhIFRva2VuTGlzdCByZXByZXNlbnRpbmcgdGhlIFJGQyBvYmplY3QgbmFtZWQKKyMgYnkgdGhlIG1ldGhvZCBhbmQgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgcmVtYWluaW5nIHVucGFyc2VkIGNoYXJhY3RlcnMKKyMgZnJvbSB0aGUgaW5wdXQuICBUaHVzIGEgcGFyc2VyIG1ldGhvZCBjb25zdW1lcyB0aGUgbmV4dCBzeW50YWN0aWMgY29uc3RydWN0CisjIG9mIGEgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY29uc3RydWN0IHBsdXMgdGhlCisjIHVucGFyc2VkIHJlbWFpbmRlciBvZiB0aGUgaW5wdXQgc3RyaW5nLgorIworIyBGb3IgZXhhbXBsZSwgaWYgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmVkIGhlYWRlciBpcyBhICdwaHJhc2UnLAorIyB0aGVuOgorIworIyAgICAgcGhyYXNlLCB2YWx1ZSA9IGdldF9waHJhc2UodmFsdWUpCisjCisjIHJldHVybnMgdGhlIGNvbXBsZXRlIHBocmFzZSBmcm9tIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nIHZhbHVlLCBwbHVzIGFueQorIyBjaGFyYWN0ZXJzIGxlZnQgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgcGhyYXNlIGlzIHJlbW92ZWQuCiAKIF93c3Bfc3BsaXR0ZXIgPSByZS5jb21waWxlKHInKFt7fV0rKScuZm9ybWF0KCcnLmpvaW4oV1NQKSkpLnNwbGl0CiBfbm9uX2F0b21fZW5kX21hdGNoZXIgPSByZS5jb21waWxlKHIiW157fV0rIi5mb3JtYXQoCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkgYi9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2MzY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weQpAQCAtMCwwICsxLDI0OSBAQAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgZW1haWwuY2hhcnNldAoraW1wb3J0IGVtYWlsLm1lc3NhZ2UKK2ltcG9ydCBlbWFpbC5lcnJvcnMKK2Zyb20gZW1haWwgaW1wb3J0IHF1b3ByaW1pbWUKKworY2xhc3MgQ29udGVudE1hbmFnZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2hhbmRsZXJzID0ge30KKyAgICAgICAgc2VsZi5zZXRfaGFuZGxlcnMgPSB7fQorCisgICAgZGVmIGFkZF9nZXRfaGFuZGxlcihzZWxmLCBrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLmdldF9oYW5kbGVyc1trZXldID0gaGFuZGxlcgorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICBjb250ZW50X3R5cGUgPSBtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpCisgICAgICAgIGlmIGNvbnRlbnRfdHlwZSBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1tjb250ZW50X3R5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIG1haW50eXBlID0gbXNnLmdldF9jb250ZW50X21haW50eXBlKCkKKyAgICAgICAgaWYgbWFpbnR5cGUgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbbWFpbnR5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICcnIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzWycnXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICByYWlzZSBLZXlFcnJvcihjb250ZW50X3R5cGUpCisKKyAgICBkZWYgYWRkX3NldF9oYW5kbGVyKHNlbGYsIHR5cGVrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLnNldF9oYW5kbGVyc1t0eXBla2V5XSA9IGhhbmRsZXIKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIG9iaiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBpZiBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgICMgWFhYOiBpcyB0aGlzIGVycm9yIGEgZ29vZCBpZGVhIG9yIG5vdD8gIFdlIGNhbiByZW1vdmUgaXQgbGF0ZXIsCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4ndCBhZGQgaXQgbGF0ZXIsIHNvIGRvIGl0IGZvciBub3cuCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldF9jb250ZW50IG5vdCB2YWxpZCBvbiBtdWx0aXBhcnQiKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5fZmluZF9zZXRfaGFuZGxlcihtc2csIG9iaikKKyAgICAgICAgbXNnLmNsZWFyX2NvbnRlbnQoKQorICAgICAgICBoYW5kbGVyKG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgIGRlZiBfZmluZF9zZXRfaGFuZGxlcihzZWxmLCBtc2csIG9iaik6CisgICAgICAgIGZ1bGxfcGF0aF9mb3JfZXJyb3IgPSBOb25lCisgICAgICAgIGZvciB0eXAgaW4gdHlwZShvYmopLl9fbXJvX186CisgICAgICAgICAgICBpZiB0eXAgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW3R5cF0KKyAgICAgICAgICAgIHFuYW1lID0gdHlwLl9fcXVhbG5hbWVfXworICAgICAgICAgICAgbW9kbmFtZSA9IGdldGF0dHIodHlwLCAnX19tb2R1bGVfXycsICcnKQorICAgICAgICAgICAgZnVsbF9wYXRoID0gJy4nLmpvaW4oKG1vZG5hbWUsIHFuYW1lKSkgaWYgbW9kbmFtZSBlbHNlIHFuYW1lCisgICAgICAgICAgICBpZiBmdWxsX3BhdGhfZm9yX2Vycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoX2Zvcl9lcnJvciA9IGZ1bGxfcGF0aAorICAgICAgICAgICAgaWYgZnVsbF9wYXRoIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tmdWxsX3BhdGhdCisgICAgICAgICAgICBpZiBxbmFtZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbcW5hbWVdCisgICAgICAgICAgICBuYW1lID0gdHlwLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tuYW1lXQorICAgICAgICBpZiBOb25lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW05vbmVdCisgICAgICAgIHJhaXNlIEtleUVycm9yKGZ1bGxfcGF0aF9mb3JfZXJyb3IpCisKKworcmF3X2RhdGFfbWFuYWdlciA9IENvbnRlbnRNYW5hZ2VyKCkKKworCitkZWYgZ2V0X3RleHRfY29udGVudChtc2csIGVycm9ycz0ncmVwbGFjZScpOgorICAgIGNvbnRlbnQgPSBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCisgICAgY2hhcnNldCA9IG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnLCAnQVNDSUknKQorICAgIHJldHVybiBjb250ZW50LmRlY29kZShjaGFyc2V0LCBlcnJvcnM9ZXJyb3JzKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ3RleHQnLCBnZXRfdGV4dF9jb250ZW50KQorCisKK2RlZiBnZXRfbm9uX3RleHRfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCitmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKG1haW50eXBlLCBnZXRfbm9uX3RleHRfY29udGVudCkKKworCitkZWYgZ2V0X21lc3NhZ2VfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoMCkKK2ZvciBzdWJ0eXBlIGluICdyZmM4MjIgZXh0ZXJuYWwtYm9keScuc3BsaXQoKToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcignbWVzc2FnZS8nK3N1YnR5cGUsIGdldF9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIGdldF9hbmRfZml4dXBfdW5rbm93bl9tZXNzYWdlX2NvbnRlbnQobXNnKToKKyAgICAjIElmIHdlIGRvbid0IHVuZGVyc3RhbmQgYSBtZXNzYWdlIHN1YnR5cGUsIHdlIGFyZSBzdXBwb3NlZCB0byB0cmVhdCBpdCBhcworICAgICMgaWYgaXQgd2VyZSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sIHBlcgorICAgICMgdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjQuICBGZWVkcGFyc2VyIGRvZXNuJ3QgZG8gdGhhdCwKKyAgICAjIHNvIGRvIG91ciBiZXN0IHRvIGZpeCB0aGluZ3MgdXAuICBOb3RlIHRoYXQgaXQgaXMgKm5vdCogYXBwcm9wcmlhdGUgdG8KKyAgICAjIG1vZGVsIG1lc3NhZ2UvcGFydGlhbCBjb250ZW50IGFzIE1lc3NhZ2Ugb2JqZWN0cywgc28gdGhleSBhcmUgaGFuZGxlZAorICAgICMgaGVyZSBhcyB3ZWxsLiAgKEhvdyB0byByZWFzc2VtYmxlIHRoZW0gaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIGNvbW1lbnQgOikKKyAgICByZXR1cm4gYnl0ZXMobXNnLmdldF9wYXlsb2FkKDApKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ21lc3NhZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2FuZF9maXh1cF91bmtub3duX21lc3NhZ2VfY29udGVudCkKKworCitkZWYgX3ByZXBhcmVfc2V0KG1zZywgbWFpbnR5cGUsIHN1YnR5cGUsIGhlYWRlcnMpOgorICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnLycuam9pbigobWFpbnR5cGUsIHN1YnR5cGUpKQorICAgIGlmIGhlYWRlcnM6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGhlYWRlcnNbMF0sICduYW1lJyk6CisgICAgICAgICAgICBtcCA9IG1zZy5wb2xpY3kKKyAgICAgICAgICAgIGhlYWRlcnMgPSBbbXAuaGVhZGVyX2ZhY3RvcnkoKm1wLmhlYWRlcl9zb3VyY2VfcGFyc2UoW2hlYWRlcl0pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnNdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gaGVhZGVyczoKKyAgICAgICAgICAgICAgICBpZiBoZWFkZXIuZGVmZWN0czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgaGVhZGVyLmRlZmVjdHNbMF0KKyAgICAgICAgICAgICAgICBtc2dbaGVhZGVyLm5hbWVdID0gaGVhZGVyCisgICAgICAgIGV4Y2VwdCBlbWFpbC5lcnJvcnMuSGVhZGVyRGVmZWN0IGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgaGVhZGVyOiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZm9sZChwb2xpY3k9bXNnLnBvbGljeSkpKSBmcm9tIGV4YworCisKK2RlZiBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcyk6CisgICAgaWYgZGlzcG9zaXRpb24gaXMgTm9uZSBhbmQgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGRpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnCisgICAgaWYgZGlzcG9zaXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddID0gZGlzcG9zaXRpb24KKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnLnNldF9wYXJhbSgnZmlsZW5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nQ29udGVudC1EaXNwb3NpdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZT1UcnVlKQorICAgIGlmIGNpZCBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnWydDb250ZW50LUlEJ10gPSBjaWQKKyAgICBpZiBwYXJhbXMgaXMgbm90IE5vbmU6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHBhcmFtcy5pdGVtcygpOgorICAgICAgICAgICAgbXNnLnNldF9wYXJhbShrZXksIHZhbHVlKQorCisKKyMgWFhYOiBUaGlzIGlzIGEgY2xlYW5lZC11cCB2ZXJzaW9uIG9mIGJhc2U2NG1pbWUuYm9keV9lbmNvZGUuICBJdCB3b3VsZAorIyBiZSBuaWNlIHRvIGRyb3AgYm90aCB0aGlzIGFuZCBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIGluIGZhdm9yIG9mCisjIGVuaGFuY2VkIGJpbmFzY2lpIHJvdXRpbmVzIHRoYXQgYWNjZXB0ZWQgYSBtYXhfbGluZV9sZW5ndGggcGFyYW1ldGVyLgorZGVmIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aCk6CisgICAgZW5jb2RlZF9saW5lcyA9IFtdCisgICAgdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lID0gbWF4X2xpbmVfbGVuZ3RoICogMyAvLyA0CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmUpOgorICAgICAgICB0aGlzbGluZSA9IGRhdGFbaTppK3VuZW5jb2RlZF9ieXRlc19wZXJfbGluZV0KKyAgICAgICAgZW5jb2RlZF9saW5lcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NCh0aGlzbGluZSkuZGVjb2RlKCdhc2NpaScpKQorICAgIHJldHVybiAnJy5qb2luKGVuY29kZWRfbGluZXMpCisKKworZGVmIF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgcG9saWN5KToKKyAgICBsaW5lcyA9IHN0cmluZy5lbmNvZGUoY2hhcnNldCkuc3BsaXRsaW5lcygpCisgICAgbGluZXNlcCA9IHBvbGljeS5saW5lc2VwLmVuY29kZSgnYXNjaWknKQorICAgIGRlZiBlbWJlZGVkX2JvZHkobGluZXMpOiByZXR1cm4gbGluZXNlcC5qb2luKGxpbmVzKSArIGxpbmVzZXAKKyAgICBkZWYgbm9ybWFsX2JvZHkobGluZXMpOiByZXR1cm4gYidcbicuam9pbihsaW5lcykgKyBiJ1xuJworICAgIGlmIGN0ZT09Tm9uZToKKyAgICAgICAgIyBVc2UgaGV1cmlzdGljcyB0byBkZWNpZGUgb24gdGhlICJiZXN0IiBlbmNvZGluZy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICc3Yml0Jywgbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiAocG9saWN5LmN0ZV90eXBlID09ICc4Yml0JyBhbmQKKyAgICAgICAgICAgICAgICBtYXgobGVuKHgpIGZvciB4IGluIGxpbmVzKSA8PSBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKToKKyAgICAgICAgICAgIHJldHVybiAnOGJpdCcsIG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIHNuaWZmID0gZW1iZWRlZF9ib2R5KGxpbmVzWzoxMF0pCisgICAgICAgIHNuaWZmX3FwID0gcXVvcHJpbWltZS5ib2R5X2VuY29kZShzbmlmZi5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgICAgIHNuaWZmX2Jhc2U2NCA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoc25pZmYpCisgICAgICAgICMgVGhpcyBpcyBhIGxpdHRsZSB1bmZhaXIgdG8gcXA7IGl0IGluY2x1ZGVzIGxpbmVzZXBzLCBiYXNlNjQgZG9lc24ndC4KKyAgICAgICAgaWYgbGVuKHNuaWZmX3FwKSA+IGxlbihzbmlmZl9iYXNlNjQpOgorICAgICAgICAgICAgY3RlID0gJ2Jhc2U2NCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0ZSA9ICdxdW90ZWQtcHJpbnRhYmxlJworICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA8PSAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RlLCBzbmlmZl9xcAorICAgIGlmIGN0ZSA9PSAnN2JpdCc6CisgICAgICAgIGRhdGEgPSBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzhiaXQnOgorICAgICAgICBkYXRhID0gbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgIGRhdGEgPSBxdW9wcmltaW1lLmJvZHlfZW5jb2RlKG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGVtYmVkZWRfYm9keShsaW5lcyksIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nIHt9Ii5mb3JtYXQoY3RlKSkKKyAgICByZXR1cm4gY3RlLCBkYXRhCisKKworZGVmIHNldF90ZXh0X2NvbnRlbnQobXNnLCBzdHJpbmcsIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnLCBjdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgX3ByZXBhcmVfc2V0KG1zZywgJ3RleHQnLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGN0ZSwgcGF5bG9hZCA9IF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgbXNnLnBvbGljeSkKKyAgICBtc2cuc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICBtc2cuc2V0X3BhcmFtKCdjaGFyc2V0JywKKyAgICAgICAgICAgICAgICAgIGVtYWlsLmNoYXJzZXQuQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCksCisgICAgICAgICAgICAgICAgICByZXBsYWNlPVRydWUpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHN0ciwgc2V0X3RleHRfY29udGVudCkKKworCitkZWYgc2V0X21lc3NhZ2VfY29udGVudChtc2csIG1lc3NhZ2UsIHN1YnR5cGU9InJmYzgyMiIsIGN0ZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgaWYgc3VidHlwZSA9PSAncGFydGlhbCc6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1lc3NhZ2UvcGFydGlhbCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNZXNzYWdlIG9iamVjdHMiKQorICAgIGlmIHN1YnR5cGUgPT0gJ3JmYzgyMic6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0JywgJzhiaXQnLCAnYmluYXJ5Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMSBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9yZmM4MjIgcGFydHMgZG8gbm90IHN1cHBvcnQgY3RlPXt9Ii5mb3JtYXQoY3RlKSkKKyAgICAgICAgIyA4Yml0IHdpbGwgZ2V0IGNvZXJjZWQgb24gc2VyaWFsaXphdGlvbiBpZiBwb2xpY3kuY3RlX3R5cGU9JzdiaXQnLiAgV2UKKyAgICAgICAgIyBtYXkgZW5kIHVwIGNsYWltaW5nIDhiaXQgd2hlbiBpdCBpc24ndCBuZWVkZWQsIGJ1dCB0aGUgb25seSBuZWdhdGl2ZQorICAgICAgICAjIHJlc3VsdCBvZiB0aGF0IHNob3VsZCBiZSBhIGdhdGV3YXkgdGhhdCBuZWVkcyB0byBjb2VyY2UgdG8gN2JpdAorICAgICAgICAjIGhhdmluZyB0byBsb29rIHRocm91Z2ggdGhlIHdob2xlIGVtYmVkZGVkIG1lc3NhZ2UgdG8gZGlzY292ZXIgd2hldGhlcgorICAgICAgICAjIG9yIG5vdCBpdCBhY3R1YWxseSBoYXMgdG8gZG8gYW55dGhpbmcuCisgICAgICAgIGN0ZSA9ICc4Yml0JyBpZiBjdGUgaXMgTm9uZSBlbHNlIGN0ZQorICAgIGVsaWYgc3VidHlwZSA9PSAnZXh0ZXJuYWwtYm9keSc6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMyBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9leHRlcm5hbC1ib2R5IHBhcnRzIGRvIG5vdCBzdXBwb3J0IGN0ZT17fSIuZm9ybWF0KGN0ZSkpCisgICAgICAgIGN0ZSA9ICc3Yml0JworICAgIGVsaWYgY3RlIGlzIE5vbmU6CisgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi40IHNheXMgYWxsIGZ1dHVyZQorICAgICAgICAjIHN1YnR5cGVzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIDdiaXQsIHNvIGFzc3VtZSB0aGF0LgorICAgICAgICBjdGUgPSAnN2JpdCcKKyAgICBfcHJlcGFyZV9zZXQobXNnLCAnbWVzc2FnZScsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgbXNnLnNldF9wYXlsb2FkKFttZXNzYWdlXSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIoZW1haWwubWVzc2FnZS5NZXNzYWdlLCBzZXRfbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBzZXRfYnl0ZXNfY29udGVudChtc2csIGRhdGEsIG1haW50eXBlLCBzdWJ0eXBlLCBjdGU9J2Jhc2U2NCcsCisgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIF9wcmVwYXJlX3NldChtc2csIG1haW50eXBlLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aD1tc2cucG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgICMgWFhYOiBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIHdvbid0IGVuY29kZSBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gZGF0YSwKKyAgICAgICAgIyBzbyB3ZSBjYW4ndCB1c2UgaXQuICBUaGlzIG1lYW5zIG1heF9saW5lX2xlbmd0aCBpcyBpZ25vcmVkLiAgQW5vdGhlcgorICAgICAgICAjIGJ1ZyB0byBmaXggbGF0ZXIuICAoTm90ZTogZW5jb2RlcnMucXVvcHJpIGlzIGJyb2tlbiBvbiBsaW5lIGVuZHMuKQorICAgICAgICBkYXRhID0gYmluYXNjaWkuYjJhX3FwKGRhdGEsIGlzdGV4dD1GYWxzZSwgaGVhZGVyPUZhbHNlLCBxdW90ZXRhYnM9VHJ1ZSkKKyAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzdiaXQnOgorICAgICAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb25seSBBU0NJSS4gIFRoZSBlYXJseSB3YXJuaW5nIGhlcmUgc2VlbXMKKyAgICAgICAgIyB3b3J0aCB0aGUgb3ZlcmhlYWQuLi5pZiB5b3UgY2FyZSB3cml0ZSB5b3VyIG93biBjb250ZW50IG1hbmFnZXIgOikuCisgICAgICAgIGRhdGEuZW5jb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgaW4gKCc4Yml0JywgJ2JpbmFyeScpOgorICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgbXNnLnNldF9wYXlsb2FkKGRhdGEpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK2ZvciB0eXAgaW4gKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHR5cCwgc2V0X2J5dGVzX2NvbnRlbnQpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weSBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CmluZGV4IGVhNDFlOTUuLmViNzVmZTMgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CkBAIC05OCwyNCArOTgsMTUgQEAKICAgICAgICAgIiIiUHVzaCBzb21lIG5ldyBkYXRhIGludG8gdGhpcyBvYmplY3QuIiIiCiAgICAgICAgICMgSGFuZGxlIGFueSBwcmV2aW91cyBsZWZ0b3ZlcnMKICAgICAgICAgZGF0YSwgc2VsZi5fcGFydGlhbCA9IHNlbGYuX3BhcnRpYWwgKyBkYXRhLCAnJwotICAgICAgICAjIENyYWNrIGludG8gbGluZXMsIGJ1dCBwcmVzZXJ2ZSB0aGUgbmV3bGluZXMgb24gdGhlIGVuZCBvZiBlYWNoCi0gICAgICAgIHBhcnRzID0gTkxDUkVfY3JhY2suc3BsaXQoZGF0YSkKLSAgICAgICAgIyBUaGUgKmFoZW0qIGludGVyZXN0aW5nIGJlaGF2aW91ciBvZiByZS5zcGxpdCB3aGVuIHN1cHBsaWVkIGdyb3VwaW5nCi0gICAgICAgICMgcGFyZW50aGVzZXMgaXMgdGhhdCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSByZXN1bHRpbmcgbGlzdCBpcyB0aGUKLSAgICAgICAgIyBkYXRhIGFmdGVyIHRoZSBmaW5hbCBSRS4gIEluIHRoZSBjYXNlIG9mIGEgTkwvQ1IgdGVybWluYXRlZCBzdHJpbmcsCi0gICAgICAgICMgdGhpcyBpcyB0aGUgZW1wdHkgc3RyaW5nLgotICAgICAgICBzZWxmLl9wYXJ0aWFsID0gcGFydHMucG9wKCkKLSAgICAgICAgI0dBTiAyOU1hcjA5ICBidWdzIDE1NTU1NzAsIDE3MjE4NjIgIENvbmZ1c2lvbiBhdCA4SyBib3VuZGFyeSBlbmRpbmcgd2l0aCBccjoKLSAgICAgICAgIyBpcyB0aGVyZSBhIFxuIHRvIGZvbGxvdyBsYXRlcj8KLSAgICAgICAgaWYgbm90IHNlbGYuX3BhcnRpYWwgYW5kIHBhcnRzIGFuZCBwYXJ0c1stMV0uZW5kc3dpdGgoJ1xyJyk6Ci0gICAgICAgICAgICBzZWxmLl9wYXJ0aWFsID0gcGFydHMucG9wKC0yKStwYXJ0cy5wb3AoKQotICAgICAgICAjIHBhcnRzIGlzIGEgbGlzdCBvZiBzdHJpbmdzLCBhbHRlcm5hdGluZyBiZXR3ZWVuIHRoZSBsaW5lIGNvbnRlbnRzCi0gICAgICAgICMgYW5kIHRoZSBlb2wgY2hhcmFjdGVyKHMpLiAgR2F0aGVyIHVwIGEgbGlzdCBvZiBsaW5lcyBhZnRlcgotICAgICAgICAjIHJlLWF0dGFjaGluZyB0aGUgbmV3bGluZXMuCi0gICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHBhcnRzKSAvLyAyKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChwYXJ0c1tpKjJdICsgcGFydHNbaSoyKzFdKQotICAgICAgICBzZWxmLnB1c2hsaW5lcyhsaW5lcykKKyAgICAgICAgIyBDcmFjayBpbnRvIGxpbmVzLCBidXQgcHJlc2VydmUgdGhlIGxpbmVzZXAgY2hhcmFjdGVycyBvbiB0aGUgZW5kIG9mIGVhY2gKKyAgICAgICAgcGFydHMgPSBkYXRhLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0IGRvZXMgbm90IGVuZCBpbiBhIG5ld2xpbmUsIHRoZW4gdHJlYXQKKyAgICAgICAgIyBpdCBhcyBhIHBhcnRpYWwgbGluZS4gIFdlIG9ubHkgY2hlY2sgZm9yICdcbicgaGVyZSBiZWNhdXNlIGEgbGluZQorICAgICAgICAjIGVuZGluZyB3aXRoICdccicgbWlnaHQgYmUgYSBsaW5lIHRoYXQgd2FzIHNwbGl0IGluIHRoZSBtaWRkbGUgb2YgYQorICAgICAgICAjICdcclxuJyBzZXF1ZW5jZSAoc2VlIGJ1Z3MgMTU1NTU3MCBhbmQgMTcyMTg2MikuCisgICAgICAgIGlmIHBhcnRzIGFuZCBub3QgcGFydHNbLTFdLmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgc2VsZi5fcGFydGlhbCA9IHBhcnRzLnBvcCgpCisgICAgICAgIHNlbGYucHVzaGxpbmVzKHBhcnRzKQogCiAgICAgZGVmIHB1c2hsaW5lcyhzZWxmLCBsaW5lcyk6CiAgICAgICAgICMgUmV2ZXJzZSBhbmQgaW5zZXJ0IGF0IHRoZSBmcm9udCBvZiB0aGUgbGluZXMuCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvaXRlcmF0b3JzLnB5IGIvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQppbmRleCAzYWRjNGEwLi5iNTUwMmVlIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CisrKyBiL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKQEAgLTI2LDggKzI2LDcgQEAKICAgICB5aWVsZCBzZWxmCiAgICAgaWYgc2VsZi5pc19tdWx0aXBhcnQoKToKICAgICAgICAgZm9yIHN1YnBhcnQgaW4gc2VsZi5nZXRfcGF5bG9hZCgpOgotICAgICAgICAgICAgZm9yIHN1YnN1YnBhcnQgaW4gc3VicGFydC53YWxrKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3Vic3VicGFydAorICAgICAgICAgICAgeWllbGQgZnJvbSBzdWJwYXJ0LndhbGsoKQogCiAKIAwKQEAgLTQwLDggKzM5LDcgQEAKICAgICBmb3Igc3VicGFydCBpbiBtc2cud2FsaygpOgogICAgICAgICBwYXlsb2FkID0gc3VicGFydC5nZXRfcGF5bG9hZChkZWNvZGU9ZGVjb2RlKQogICAgICAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIHN0cik6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBTdHJpbmdJTyhwYXlsb2FkKToKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIFN0cmluZ0lPKHBheWxvYWQpCiAKIAogZGVmIHR5cGVkX3N1YnBhcnRfaXRlcmF0b3IobXNnLCBtYWludHlwZT0ndGV4dCcsIHN1YnR5cGU9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWVzc2FnZS5weSBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CmluZGV4IGY0M2EzODAuLmNlNjczYjAgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5CisrKyBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CkBAIC04LDggKzgsNiBAQAogCiBpbXBvcnQgcmUKIGltcG9ydCB1dQotaW1wb3J0IGJhc2U2NAotaW1wb3J0IGJpbmFzY2lpCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTwogCiAjIEludHJhcGFja2FnZSBpbXBvcnRzCkBAIC0xMzIsMjIgKzEzMCw1MCBAQAogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgc3RyaW5nLgotICAgICAgICBUaGlzIGluY2x1ZGVzIHRoZSBoZWFkZXJzLCBib2R5LCBhbmQgZW52ZWxvcGUgaGVhZGVyLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXNfc3RyaW5nKCkKIAotICAgIGRlZiBhc19zdHJpbmcoc2VsZiwgdW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wKToKKyAgICBkZWYgYXNfc3RyaW5nKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBtYXhoZWFkZXJsZW49MCwgcG9saWN5PU5vbmUpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIHN0cmluZy4KLSAgICAgICAgT3B0aW9uYWwgYHVuaXhmcm9tJyB3aGVuIFRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxvcGUKLSAgICAgICAgaGVhZGVyLgogCi0gICAgICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgYW5kIG1heSBub3QgZ2VuZXJhdGUgdGhlIG1lc3NhZ2UgZXhhY3RseQotICAgICAgICBhcyB5b3UgaW50ZW5kLiAgRm9yIG1vcmUgZmxleGliaWxpdHksIHVzZSB0aGUgZmxhdHRlbigpIG1ldGhvZCBvZiBhCi0gICAgICAgIEdlbmVyYXRvciBpbnN0YW5jZS4KKyAgICAgICAgT3B0aW9uYWwgJ3VuaXhmcm9tJywgd2hlbiB0cnVlLCBtZWFucyBpbmNsdWRlIHRoZSBVbml4IEZyb21fIGVudmVsb3BlCisgICAgICAgIGhlYWRlci4gIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIGlmIG1heGhlYWRlcmxlbiBpcworICAgICAgICBub3Qgc3BlY2lmaWVkIGl0IGRlZmF1bHRzIHRvIDAsIHNvIHlvdSBtdXN0IG92ZXJyaWRlIGl0IGV4cGxpY2l0bHkKKyAgICAgICAgaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgbWF4aGVhZGVybGVuLiAgJ3BvbGljeScgaXMgcGFzc2VkIHRvIHRoZQorICAgICAgICBHZW5lcmF0b3IgaW5zdGFuY2UgdXNlZCB0byBzZXJpYWxpemUgdGhlIG1lc2FzZ2U7IGlmIGl0IGlzIG5vdAorICAgICAgICBzcGVjaWZpZWQgdGhlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhlIG1lc3NhZ2UgaW5zdGFuY2UgaXMgdXNlZC4KKworICAgICAgICBJZiB0aGUgbWVzc2FnZSBvYmplY3QgY29udGFpbnMgYmluYXJ5IGRhdGEgdGhhdCBpcyBub3QgZW5jb2RlZAorICAgICAgICBhY2NvcmRpbmcgdG8gUkZDIHN0YW5kYXJkcywgdGhlIG5vbi1jb21wbGlhbnQgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIGJ5CisgICAgICAgIHVuaWNvZGUgInVua25vd24gY2hhcmFjdGVyIiBjb2RlIHBvaW50cy4KICAgICAgICAgIiIiCiAgICAgICAgIGZyb20gZW1haWwuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKKyAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kgaWYgcG9saWN5IGlzIE5vbmUgZWxzZSBwb2xpY3kKICAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIGcgPSBHZW5lcmF0b3IoZnAsIG1hbmdsZV9mcm9tXz1GYWxzZSwgbWF4aGVhZGVybGVuPW1heGhlYWRlcmxlbikKKyAgICAgICAgZyA9IEdlbmVyYXRvcihmcCwKKyAgICAgICAgICAgICAgICAgICAgICBtYW5nbGVfZnJvbV89RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgbWF4aGVhZGVybGVuPW1heGhlYWRlcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4oc2VsZiwgdW5peGZyb209dW5peGZyb20pCisgICAgICAgIHJldHVybiBmcC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIGJ5dGVzIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLmFzX2J5dGVzKCkKKworICAgIGRlZiBhc19ieXRlcyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgcG9saWN5PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGVudGlyZSBmb3JtYXR0ZWQgbWVzc2FnZSBhcyBhIGJ5dGVzIG9iamVjdC4KKworICAgICAgICBPcHRpb25hbCAndW5peGZyb20nLCB3aGVuIHRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxvcGUKKyAgICAgICAgaGVhZGVyLiAgJ3BvbGljeScgaXMgcGFzc2VkIHRvIHRoZSBCeXRlc0dlbmVyYXRvciBpbnN0YW5jZSB1c2VkIHRvCisgICAgICAgIHNlcmlhbGl6ZSB0aGUgbWVzc2FnZTsgaWYgbm90IHNwZWNpZmllZCB0aGUgcG9saWN5IGFzc29jaWF0ZWQgd2l0aAorICAgICAgICB0aGUgbWVzc2FnZSBpbnN0YW5jZSBpcyB1c2VkLgorICAgICAgICAiIiIKKyAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEJ5dGVzR2VuZXJhdG9yCisgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5IGlmIHBvbGljeSBpcyBOb25lIGVsc2UgcG9saWN5CisgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihmcCwgbWFuZ2xlX2Zyb21fPUZhbHNlLCBwb2xpY3k9cG9saWN5KQogICAgICAgICBnLmZsYXR0ZW4oc2VsZiwgdW5peGZyb209dW5peGZyb20pCiAgICAgICAgIHJldHVybiBmcC5nZXR2YWx1ZSgpCiAKQEAgLTY1MSw3ICs2NzcsNyBAQAogICAgICAgICByZXR1cm4gZmFpbG9iagogCiAgICAgZGVmIHNldF9wYXJhbShzZWxmLCBwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLAotICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJyk6CisgICAgICAgICAgICAgICAgICBjaGFyc2V0PU5vbmUsIGxhbmd1YWdlPScnLCByZXBsYWNlPUZhbHNlKToKICAgICAgICAgIiIiU2V0IGEgcGFyYW1ldGVyIGluIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgogCiAgICAgICAgIElmIHRoZSBwYXJhbWV0ZXIgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGhlYWRlciwgaXRzIHZhbHVlIHdpbGwgYmUKQEAgLTY5NSw4ICs3MjEsMTEgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IFNFTUlTUEFDRS5qb2luKFtjdHlwZSwgYXBwZW5kX3BhcmFtXSkKICAgICAgICAgaWYgY3R5cGUgIT0gc2VsZi5nZXQoaGVhZGVyKToKLSAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KLSAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IGN0eXBlCisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGYucmVwbGFjZV9oZWFkZXIoaGVhZGVyLCBjdHlwZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVsIHNlbGZbaGVhZGVyXQorICAgICAgICAgICAgICAgIHNlbGZbaGVhZGVyXSA9IGN0eXBlCiAKICAgICBkZWYgZGVsX3BhcmFtKHNlbGYsIHBhcmFtLCBoZWFkZXI9J2NvbnRlbnQtdHlwZScsIHJlcXVvdGU9VHJ1ZSk6CiAgICAgICAgICIiIlJlbW92ZSB0aGUgZ2l2ZW4gcGFyYW1ldGVyIGNvbXBsZXRlbHkgZnJvbSB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KQEAgLTg3NywzICs5MDYsMjA4IEBACiAKICAgICAjIEkuZS4gZGVmIHdhbGsoc2VsZik6IC4uLgogICAgIGZyb20gZW1haWwuaXRlcmF0b3JzIGltcG9ydCB3YWxrCisKKworY2xhc3MgTUlNRVBhcnQoTWVzc2FnZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9saWN5PU5vbmUpOgorICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKKyAgICAgICAgICAgIGZyb20gZW1haWwucG9saWN5IGltcG9ydCBkZWZhdWx0CisgICAgICAgICAgICBwb2xpY3kgPSBkZWZhdWx0CisgICAgICAgIE1lc3NhZ2UuX19pbml0X18oc2VsZiwgcG9saWN5KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2F0dGFjaG1lbnQoc2VsZik6CisgICAgICAgIGNfZCA9IHNlbGYuZ2V0KCdjb250ZW50LWRpc3Bvc2l0aW9uJykKKyAgICAgICAgaWYgY19kIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGNfZC5sb3dlcigpID09ICdhdHRhY2htZW50JworCisgICAgZGVmIF9maW5kX2JvZHkoc2VsZiwgcGFydCwgcHJlZmVyZW5jZWxpc3QpOgorICAgICAgICBpZiBwYXJ0LmlzX2F0dGFjaG1lbnQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBwYXJ0LmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlID09ICd0ZXh0JzoKKyAgICAgICAgICAgIGlmIHN1YnR5cGUgaW4gcHJlZmVyZW5jZWxpc3Q6CisgICAgICAgICAgICAgICAgeWllbGQgKHByZWZlcmVuY2VsaXN0LmluZGV4KHN1YnR5cGUpLCBwYXJ0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHN1YnR5cGUgIT0gJ3JlbGF0ZWQnOgorICAgICAgICAgICAgZm9yIHN1YnBhcnQgaW4gcGFydC5pdGVyX3BhcnRzKCk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX2JvZHkoc3VicGFydCwgcHJlZmVyZW5jZWxpc3QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgJ3JlbGF0ZWQnIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgeWllbGQgKHByZWZlcmVuY2VsaXN0LmluZGV4KCdyZWxhdGVkJyksIHBhcnQpCisgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgc3RhcnQgPSBwYXJ0LmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICBpZiBzdGFydDoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIGlmIHN1YnBhcnRbJ2NvbnRlbnQtaWQnXSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydAorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBjYW5kaWRhdGUgaXMgTm9uZToKKyAgICAgICAgICAgIHN1YnBhcnRzID0gcGFydC5nZXRfcGF5bG9hZCgpCisgICAgICAgICAgICBjYW5kaWRhdGUgPSBzdWJwYXJ0c1swXSBpZiBzdWJwYXJ0cyBlbHNlIE5vbmUKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX2JvZHkoY2FuZGlkYXRlLCBwcmVmZXJlbmNlbGlzdCkKKworICAgIGRlZiBnZXRfYm9keShzZWxmLCBwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKToKKyAgICAgICAgIiIiUmV0dXJuIGJlc3QgY2FuZGlkYXRlIG1pbWUgcGFydCBmb3IgZGlzcGxheSBhcyAnYm9keScgb2YgbWVzc2FnZS4KKworICAgICAgICBEbyBhIGRlcHRoIGZpcnN0IHNlYXJjaCwgc3RhcnRpbmcgd2l0aCBzZWxmLCBsb29raW5nIGZvciB0aGUgZmlyc3QgcGFydAorICAgICAgICBtYXRjaGluZyBlYWNoIG9mIHRoZSBpdGVtcyBpbiBwcmVmZXJlbmNlbGlzdCwgYW5kIHJldHVybiB0aGUgcGFydAorICAgICAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBpdGVtIHRoYXQgaGFzIGEgbWF0Y2gsIG9yIE5vbmUgaWYgbm8gaXRlbXMKKyAgICAgICAgaGF2ZSBhIG1hdGNoLiAgSWYgJ3JlbGF0ZWQnIGlzIG5vdCBpbmNsdWRlZCBpbiBwcmVmZXJlbmNlbGlzdCwgY29uc2lkZXIKKyAgICAgICAgdGhlIHJvb3QgcGFydCBvZiBhbnkgbXVsdGlwYXJ0L3JlbGF0ZWQgZW5jb3VudGVyZWQgYXMgYSBjYW5kaWRhdGUKKyAgICAgICAgbWF0Y2guICBJZ25vcmUgcGFydHMgd2l0aCAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCcuCisgICAgICAgICIiIgorICAgICAgICBiZXN0X3ByaW8gPSBsZW4ocHJlZmVyZW5jZWxpc3QpCisgICAgICAgIGJvZHkgPSBOb25lCisgICAgICAgIGZvciBwcmlvLCBwYXJ0IGluIHNlbGYuX2ZpbmRfYm9keShzZWxmLCBwcmVmZXJlbmNlbGlzdCk6CisgICAgICAgICAgICBpZiBwcmlvIDwgYmVzdF9wcmlvOgorICAgICAgICAgICAgICAgIGJlc3RfcHJpbyA9IHByaW8KKyAgICAgICAgICAgICAgICBib2R5ID0gcGFydAorICAgICAgICAgICAgICAgIGlmIHByaW8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIGJvZHkKKworICAgIF9ib2R5X3R5cGVzID0geygndGV4dCcsICdwbGFpbicpLAorICAgICAgICAgICAgICAgICAgICgndGV4dCcsICdodG1sJyksCisgICAgICAgICAgICAgICAgICAgKCdtdWx0aXBhcnQnLCAncmVsYXRlZCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ2FsdGVybmF0aXZlJyl9CisgICAgZGVmIGl0ZXJfYXR0YWNobWVudHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBub24tbWFpbiBwYXJ0cyBvZiBhIG11bHRpcGFydC4KKworICAgICAgICBTa2lwIHRoZSBmaXJzdCBvZiBlYWNoIG9jY3VycmVuY2Ugb2YgdGV4dC9wbGFpbiwgdGV4dC9odG1sLAorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgb3IgbXVsdGlwYXJ0L2FsdGVybmF0aXZlIGluIHRoZSBtdWx0aXBhcnQgKHVubGVzcworICAgICAgICB0aGV5IGhhdmUgYSAnQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudCcgaGVhZGVyKSBhbmQgaW5jbHVkZSBhbGwKKyAgICAgICAgcmVtYWluaW5nIHN1YnBhcnRzIGluIHRoZSByZXR1cm5lZCBpdGVyYXRvci4gIFdoZW4gYXBwbGllZCB0byBhCisgICAgICAgIG11bHRpcGFydC9yZWxhdGVkLCByZXR1cm4gYWxsIHBhcnRzIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0LiAgUmV0dXJuIGFuCisgICAgICAgIGVtcHR5IGl0ZXJhdG9yIHdoZW4gYXBwbGllZCB0byBhIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBvciBhCisgICAgICAgIG5vbi1tdWx0aXBhcnQuCisgICAgICAgICIiIgorICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHNlbGYuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgaWYgbWFpbnR5cGUgIT0gJ211bHRpcGFydCcgb3Igc3VidHlwZSA9PSAnYWx0ZXJuYXRpdmUnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcnRzID0gc2VsZi5nZXRfcGF5bG9hZCgpCisgICAgICAgIGlmIG1haW50eXBlID09ICdtdWx0aXBhcnQnIGFuZCBzdWJ0eXBlID09ICdyZWxhdGVkJzoKKyAgICAgICAgICAgICMgRm9yIHJlbGF0ZWQsIHdlIHRyZWF0IGV2ZXJ5dGhpbmcgYnV0IHRoZSByb290IGFzIGFuIGF0dGFjaG1lbnQuCisgICAgICAgICAgICAjIFRoZSByb290IG1heSBiZSBpbmRpY2F0ZWQgYnkgJ3N0YXJ0JzsgaWYgdGhlcmUncyBubyBzdGFydCBvciB3ZQorICAgICAgICAgICAgIyBjYW4ndCBmaW5kIHRoZSBuYW1lZCBzdGFydCwgdHJlYXQgdGhlIGZpcnN0IHN1YnBhcnQgYXMgdGhlIHJvb3QuCisgICAgICAgICAgICBzdGFydCA9IHNlbGYuZ2V0X3BhcmFtKCdzdGFydCcpCisgICAgICAgICAgICBpZiBzdGFydDoKKyAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgYXR0YWNobWVudHMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0LmdldCgnY29udGVudC1pZCcpID09IHN0YXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5hcHBlbmQocGFydCkKKyAgICAgICAgICAgICAgICBpZiBmb3VuZDoKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhdHRhY2htZW50cworICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHBhcnRzLnBvcCgwKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwYXJ0cworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgT3RoZXJ3aXNlIHdlIG1vcmUgb3IgbGVzcyBpbnZlcnQgdGhlIHJlbWFpbmluZyBsb2dpYyBpbiBnZXRfYm9keS4KKyAgICAgICAgIyBUaGlzIG9ubHkgcmVhbGx5IHdvcmtzIGluIGVkZ2UgY2FzZXMgKGV4OiBub24tdGV4dCByZWxhdGVkcyBvcgorICAgICAgICAjIGFsdGVybmF0aXZlcykgaWYgdGhlIHNlbmRpbmcgYWdlbnQgc2V0cyBjb250ZW50LWRpc3Bvc2l0aW9uLgorICAgICAgICBzZWVuID0gW10gICAjIE9ubHkgc2tpcCB0aGUgZmlyc3QgZXhhbXBsZSBvZiBlYWNoIGNhbmRpZGF0ZSB0eXBlLgorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICAgICAgaWYgKChtYWludHlwZSwgc3VidHlwZSkgaW4gc2VsZi5fYm9keV90eXBlcyBhbmQKKyAgICAgICAgICAgICAgICAgICAgbm90IHBhcnQuaXNfYXR0YWNobWVudCBhbmQgc3VidHlwZSBub3QgaW4gc2Vlbik6CisgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc3VidHlwZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgcGFydAorCisgICAgZGVmIGl0ZXJfcGFydHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBpbW1lZGlhdGUgc3VicGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yIGZvciBhIG5vbi1tdWx0aXBhcnQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuZ2V0X3BheWxvYWQoKQorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsICphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIGNvbnRlbnRfbWFuYWdlciBpcyBOb25lOgorICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyID0gc2VsZi5wb2xpY3kuY29udGVudF9tYW5hZ2VyCisgICAgICAgIHJldHVybiBjb250ZW50X21hbmFnZXIuZ2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgY29udGVudF9tYW5hZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgPSBzZWxmLnBvbGljeS5jb250ZW50X21hbmFnZXIKKyAgICAgICAgY29udGVudF9tYW5hZ2VyLnNldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIF9tYWtlX211bHRpcGFydChzZWxmLCBzdWJ0eXBlLCBkaXNhbGxvd2VkX3N1YnR5cGVzLCBib3VuZGFyeSk6CisgICAgICAgIGlmIHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIGV4aXN0aW5nX3N1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3N1YnR5cGUoKQorICAgICAgICAgICAgZGlzYWxsb3dlZF9zdWJ0eXBlcyA9IGRpc2FsbG93ZWRfc3VidHlwZXMgKyAoc3VidHlwZSwpCisgICAgICAgICAgICBpZiBleGlzdGluZ19zdWJ0eXBlIGluIGRpc2FsbG93ZWRfc3VidHlwZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGNvbnZlcnQge30gdG8ge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmdfc3VidHlwZSwgc3VidHlwZSkpCisgICAgICAgIGtlZXBfaGVhZGVycyA9IFtdCisgICAgICAgIHBhcnRfaGVhZGVycyA9IFtdCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLl9oZWFkZXJzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgcGFydF9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsdWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrZWVwX2hlYWRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisgICAgICAgIGlmIHBhcnRfaGVhZGVyczoKKyAgICAgICAgICAgICMgVGhlcmUgaXMgZXhpc3RpbmcgY29udGVudCwgbW92ZSBpdCB0byB0aGUgZmlyc3Qgc3VicGFydC4KKyAgICAgICAgICAgIHBhcnQgPSB0eXBlKHNlbGYpKHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgICAgIHBhcnQuX2hlYWRlcnMgPSBwYXJ0X2hlYWRlcnMKKyAgICAgICAgICAgIHBhcnQuX3BheWxvYWQgPSBzZWxmLl9wYXlsb2FkCisgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW3BhcnRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW10KKyAgICAgICAgc2VsZi5faGVhZGVycyA9IGtlZXBfaGVhZGVycworICAgICAgICBzZWxmWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgaWYgYm91bmRhcnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnNldF9wYXJhbSgnYm91bmRhcnknLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX3JlbGF0ZWQoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdyZWxhdGVkJywgKCdhbHRlcm5hdGl2ZScsICdtaXhlZCcpLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX2FsdGVybmF0aXZlKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgnYWx0ZXJuYXRpdmUnLCAoJ21peGVkJywpLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX21peGVkKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgnbWl4ZWQnLCAoKSwgYm91bmRhcnkpCisKKyAgICBkZWYgX2FkZF9tdWx0aXBhcnQoc2VsZiwgX3N1YnR5cGUsICphcmdzLCBfZGlzcD1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgKHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSAhPSAnbXVsdGlwYXJ0JyBvcgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2NvbnRlbnRfc3VidHlwZSgpICE9IF9zdWJ0eXBlKToKKyAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ21ha2VfJyArIF9zdWJ0eXBlKSgpCisgICAgICAgIHBhcnQgPSB0eXBlKHNlbGYpKHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgcGFydC5zZXRfY29udGVudCgqYXJncywgKiprdykKKyAgICAgICAgaWYgX2Rpc3AgYW5kICdjb250ZW50LWRpc3Bvc2l0aW9uJyBub3QgaW4gcGFydDoKKyAgICAgICAgICAgIHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9IF9kaXNwCisgICAgICAgIHNlbGYuYXR0YWNoKHBhcnQpCisKKyAgICBkZWYgYWRkX3JlbGF0ZWQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdyZWxhdGVkJywgKmFyZ3MsIF9kaXNwPSdpbmxpbmUnLCAqKmt3KQorCisgICAgZGVmIGFkZF9hbHRlcm5hdGl2ZShzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ2FsdGVybmF0aXZlJywgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgYWRkX2F0dGFjaG1lbnQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdtaXhlZCcsICphcmdzLCBfZGlzcD0nYXR0YWNobWVudCcsICoqa3cpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBbXQorICAgICAgICBzZWxmLl9wYXlsb2FkID0gTm9uZQorCisgICAgZGVmIGNsZWFyX2NvbnRlbnQoc2VsZik6CisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBbKG4sIHYpIGZvciBuLCB2IGluIHNlbGYuX2hlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgbi5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIHNlbGYuX3BheWxvYWQgPSBOb25lCisKKworY2xhc3MgRW1haWxNZXNzYWdlKE1JTUVQYXJ0KToKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHN1cGVyKCkuc2V0X2NvbnRlbnQoKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICdNSU1FLVZlcnNpb24nIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgc2VsZlsnTUlNRS1WZXJzaW9uJ10gPSAnMS4wJwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3BhcnNlci5weSBiL0xpYi9lbWFpbC9wYXJzZXIucHkKaW5kZXggNzUyYmYzNS4uZjQ5ZDMxZCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3BhcnNlci5weQorKysgYi9MaWIvZW1haWwvcGFyc2VyLnB5CkBAIC00LDcgKzQsOCBAQAogCiAiIiJBIHBhcnNlciBvZiBSRkMgMjgyMiBhbmQgTUlNRSBlbWFpbCBtZXNzYWdlcy4iIiIKIAotX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlciddCitfX2FsbF9fID0gWydQYXJzZXInLCAnSGVhZGVyUGFyc2VyJywgJ0J5dGVzUGFyc2VyJywgJ0J5dGVzSGVhZGVyUGFyc2VyJywKKyAgICAgICAgICAgJ0ZlZWRQYXJzZXInLCAnQnl0ZXNGZWVkUGFyc2VyJ10KIAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgVGV4dElPV3JhcHBlcgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3BvbGljeS5weSBiL0xpYi9lbWFpbC9wb2xpY3kucHkKaW5kZXggMzhlODhhZi4uZjBiMjBmNCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3BvbGljeS5weQorKysgYi9MaWIvZW1haWwvcG9saWN5LnB5CkBAIC01LDYgKzUsNyBAQAogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgUG9saWN5LCBDb21wYXQzMiwgY29tcGF0MzIsIF9leHRlbmRfZG9jc3RyaW5ncwogZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgX2hhc19zdXJyb2dhdGVzCiBmcm9tIGVtYWlsLmhlYWRlcnJlZ2lzdHJ5IGltcG9ydCBIZWFkZXJSZWdpc3RyeSBhcyBIZWFkZXJSZWdpc3RyeQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgcmF3X2RhdGFfbWFuYWdlcgogCiBfX2FsbF9fID0gWwogICAgICdDb21wYXQzMicsCkBAIC01OCwxMCArNTksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgdHJlYXRtZW50LCB3aGlsZSBhbGwgb3RoZXIgZmllbGRzIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlYXRlZCBhcyB1bnN0cnVjdHVyZWQuICBUaGlzIGxpc3Qgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkIGJlZm9yZSB0aGUgZXh0ZW5zaW9uIGlzIG1hcmtlZCBzdGFibGUuKQorCisgICAgY29udGVudF9tYW5hZ2VyICAgICAtLSBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCB0d28gbWV0aG9kczogZ2V0X2NvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZXRfY29udGVudC4gIFdoZW4gdGhlIGdldF9jb250ZW50IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfY29udGVudCBtZXRob2Qgb2YgYSBNZXNzYWdlIG9iamVjdCBpcyBjYWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYWxscyB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhpcyBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGl0IHRoZSBtZXNzYWdlIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGFyZ3VtZW50cyBvciBrZXl3b3JkcyB0aGF0IHdlcmUgcGFzc2VkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIFRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhOmB+ZW1haWwuY29udGVudG1hbmFnZXIucmF3X2RhdGFfbWFuYWdlcmAuCisKICAgICAiIiIKIAogICAgIHJlZm9sZF9zb3VyY2UgPSAnbG9uZycKICAgICBoZWFkZXJfZmFjdG9yeSA9IEhlYWRlclJlZ2lzdHJ5KCkKKyAgICBjb250ZW50X21hbmFnZXIgPSByYXdfZGF0YV9tYW5hZ2VyCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgZWFjaCBuZXcgaW5zdGFuY2UgZ2V0cyBhIHVuaXF1ZSBoZWFkZXIgZmFjdG9yeQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3V0aWxzLnB5IGIvTGliL2VtYWlsL3V0aWxzLnB5CmluZGV4IDkzYTYyNWMuLjI1YjBkNTYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC91dGlscy5weQorKysgYi9MaWIvZW1haWwvdXRpbHMucHkKQEAgLTU0LDE3ICs1NCwyNyBAQAogc3BlY2lhbHNyZSA9IHJlLmNvbXBpbGUocidbXVtcXCgpPD5ALDo7Ii5dJykKIGVzY2FwZXNyZSA9IHJlLmNvbXBpbGUocidbXFwiXScpCiAKLSMgSG93IHRvIGZpZ3VyZSBvdXQgaWYgd2UgYXJlIHByb2Nlc3Npbmcgc3RyaW5ncyB0aGF0IGNvbWUgZnJvbSBhIGJ5dGUKLSMgc291cmNlIHdpdGggdW5kZWNvZGFibGUgY2hhcmFjdGVycy4KLV9oYXNfc3Vycm9nYXRlcyA9IHJlLmNvbXBpbGUoCi0gICAgJyhbXlx1ZDgwMC1cdWRiZmZdfFxBKVtcdWRjMDAtXHVkZmZmXShbXlx1ZGMwMC1cdWRmZmZdfFxaKScpLnNlYXJjaAorZGVmIF9oYXNfc3Vycm9nYXRlcyhzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzIGNvbnRhaW5zIHN1cnJvZ2F0ZS1lc2NhcGVkIGJpbmFyeSBkYXRhLiIiIgorICAgICMgVGhpcyBjaGVjayBpcyBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IHVubGVzcyB0aGVyZSBhcmUgc3Vycm9nYXRlcywgdXRmOAorICAgICMgKFB5dGhvbidzIGRlZmF1bHQgZW5jb2RpbmcpIGNhbiBlbmNvZGUgYW55IHN0cmluZy4gIFRoaXMgaXMgdGhlIGZhc3Rlc3QKKyAgICAjIHdheSB0byBjaGVjayBmb3Igc3Vycm9nYXRlcywgc2VlIGlzc3VlIDExNDU0IGZvciB0aW1pbmdzLgorICAgIHRyeToKKyAgICAgICAgcy5lbmNvZGUoKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICByZXR1cm4gVHJ1ZQogCiAjIEhvdyB0byBkZWFsIHdpdGggYSBzdHJpbmcgY29udGFpbmluZyBieXRlcyBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUKICMgYXBwbGljYXRpb24gdGhyb3VnaCB0aGUgJ25vcm1hbCcgaW50ZXJmYWNlLgogZGVmIF9zYW5pdGl6ZShzdHJpbmcpOgotICAgICMgVHVybiBhbnkgZXNjYXBlZCBieXRlcyBpbnRvIHVuaWNvZGUgJ3Vua25vd24nIGNoYXIuCi0gICAgb3JpZ2luYWxfYnl0ZXMgPSBzdHJpbmcuZW5jb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQotICAgIHJldHVybiBvcmlnaW5hbF9ieXRlcy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKQorICAgICMgVHVybiBhbnkgZXNjYXBlZCBieXRlcyBpbnRvIHVuaWNvZGUgJ3Vua25vd24nIGNoYXIuICBJZiB0aGUgZXNjYXBlZAorICAgICMgYnl0ZXMgaGFwcGVuIHRvIGJlIHV0Zi04IHRoZXkgd2lsbCBpbnN0ZWFkIGdldCBkZWNvZGVkLCBldmVuIGlmIHRoZXkKKyAgICAjIHdlcmUgaW52YWxpZCBpbiB0aGUgY2hhcnNldCB0aGUgc291cmNlIHdhcyBzdXBwb3NlZCB0byBiZSBpbi4gIFRoaXMKKyAgICAjIHNlZW1zIGxpa2UgaXQgaXMgbm90IGEgYmFkIHRoaW5nOyBhIGRlZmVjdCB3YXMgc3RpbGwgcmVnaXN0ZXJlZC4KKyAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisKIAogCiAjIEhlbHBlcnMKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weSBiL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQppbmRleCAyMzVkZWI1Li41NDYxYWEwIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKKysrIGIvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CkBAIC0zMyw5ICszMyw5IEBACiAgICAgJ3VzJyAgICAgICAgICAgICAgICAgOiAnYXNjaWknLAogICAgICd1c19hc2NpaScgICAgICAgICAgIDogJ2FzY2lpJywKIAotICAgICMjIGJhc2U2NF9jb2RlYyBjb2RlYwotICAgICMnYmFzZTY0JyAgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAotICAgICMnYmFzZV82NCcgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAorICAgICMgYmFzZTY0X2NvZGVjIGNvZGVjCisgICAgJ2Jhc2U2NCcgICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKKyAgICAnYmFzZV82NCcgICAgICAgICAgICA6ICdiYXNlNjRfY29kZWMnLAogCiAgICAgIyBiaWc1IGNvZGVjCiAgICAgJ2JpZzVfdHcnICAgICAgICAgICAgOiAnYmlnNScsCkBAIC00NSw4ICs0NSw4IEBACiAgICAgJ2JpZzVfaGtzY3MnICAgICAgICAgOiAnYmlnNWhrc2NzJywKICAgICAnaGtzY3MnICAgICAgICAgICAgICA6ICdiaWc1aGtzY3MnLAogCi0gICAgIyMgYnoyX2NvZGVjIGNvZGVjCi0gICAgIydiejInICAgICAgICAgICAgICAgIDogJ2J6Ml9jb2RlYycsCisgICAgIyBiejJfY29kZWMgY29kZWMKKyAgICAnYnoyJyAgICAgICAgICAgICAgICA6ICdiejJfY29kZWMnLAogCiAgICAgIyBjcDAzNyBjb2RlYwogICAgICcwMzcnICAgICAgICAgICAgICAgIDogJ2NwMDM3JywKQEAgLTYzLDYgKzYzLDEyIEBACiAgICAgJ2NzaWJtMTAyNicgICAgICAgICAgOiAnY3AxMDI2JywKICAgICAnaWJtMTAyNicgICAgICAgICAgICA6ICdjcDEwMjYnLAogCisgICAgIyBjcDExMjUgY29kZWMKKyAgICAnMTEyNScgICAgICAgICAgICAgICAgOiAnY3AxMTI1JywKKyAgICAnaWJtMTEyNScgICAgICAgICAgICAgOiAnY3AxMTI1JywKKyAgICAnY3A4NjZ1JyAgICAgICAgICAgICAgOiAnY3AxMTI1JywKKyAgICAncnVzY2lpJyAgICAgICAgICAgICAgOiAnY3AxMTI1JywKKwogICAgICMgY3AxMTQwIGNvZGVjCiAgICAgJzExNDAnICAgICAgICAgICAgICAgOiAnY3AxMTQwJywKICAgICAnaWJtMTE0MCcgICAgICAgICAgICA6ICdjcDExNDAnLApAQCAtMjQ4LDggKzI1NCw4IEBACiAgICAgJ2NwOTM2JyAgICAgICAgICAgICAgOiAnZ2JrJywKICAgICAnbXM5MzYnICAgICAgICAgICAgICA6ICdnYmsnLAogCi0gICAgIyMgaGV4X2NvZGVjIGNvZGVjCi0gICAgIydoZXgnICAgICAgICAgICAgICAgIDogJ2hleF9jb2RlYycsCisgICAgIyBoZXhfY29kZWMgY29kZWMKKyAgICAnaGV4JyAgICAgICAgICAgICAgICA6ICdoZXhfY29kZWMnLAogCiAgICAgIyBocF9yb21hbjggY29kZWMKICAgICAncm9tYW44JyAgICAgICAgICAgICA6ICdocF9yb21hbjgnLApAQCAtNDUwLDEzICs0NTYsMTMgQEAKICAgICAnY3AxNTQnICAgICAgICAgICAgICA6ICdwdGNwMTU0JywKICAgICAnY3lyaWxsaWNfYXNpYW4nICAgICA6ICdwdGNwMTU0JywKIAotICAgICMjIHF1b3ByaV9jb2RlYyBjb2RlYwotICAgICMncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLAotICAgICMncXVvdGVkX3ByaW50YWJsZScgICA6ICdxdW9wcmlfY29kZWMnLAotICAgICMncXVvdGVkcHJpbnRhYmxlJyAgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICMgcXVvcHJpX2NvZGVjIGNvZGVjCisgICAgJ3F1b3ByaScgICAgICAgICAgICAgOiAncXVvcHJpX2NvZGVjJywKKyAgICAncXVvdGVkX3ByaW50YWJsZScgICA6ICdxdW9wcmlfY29kZWMnLAorICAgICdxdW90ZWRwcmludGFibGUnICAgIDogJ3F1b3ByaV9jb2RlYycsCiAKLSAgICAjIyByb3RfMTMgY29kZWMKLSAgICAjJ3JvdDEzJyAgICAgICAgICAgICAgOiAncm90XzEzJywKKyAgICAjIHJvdF8xMyBjb2RlYworICAgICdyb3QxMycgICAgICAgICAgICAgIDogJ3JvdF8xMycsCiAKICAgICAjIHNoaWZ0X2ppcyBjb2RlYwogICAgICdjc3NoaWZ0amlzJyAgICAgICAgIDogJ3NoaWZ0X2ppcycsCkBAIC01MTgsMTIgKzUyNCwxMiBAQAogICAgICd1dGY4X3VjczInICAgICAgICAgIDogJ3V0Zl84JywKICAgICAndXRmOF91Y3M0JyAgICAgICAgICA6ICd1dGZfOCcsCiAKLSAgICAjIyB1dV9jb2RlYyBjb2RlYwotICAgICMndXUnICAgICAgICAgICAgICAgICA6ICd1dV9jb2RlYycsCisgICAgIyB1dV9jb2RlYyBjb2RlYworICAgICd1dScgICAgICAgICAgICAgICAgIDogJ3V1X2NvZGVjJywKIAotICAgICMjIHpsaWJfY29kZWMgY29kZWMKLSAgICAjJ3ppcCcgICAgICAgICAgICAgICAgOiAnemxpYl9jb2RlYycsCi0gICAgIyd6bGliJyAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAorICAgICMgemxpYl9jb2RlYyBjb2RlYworICAgICd6aXAnICAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAorICAgICd6bGliJyAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAogCiAgICAgIyB0ZW1wb3JhcnkgbWFjIENKSyBhbGlhc2VzLCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHByb3BlciBjb2RlY3MgaW4gMy4xCiAgICAgJ3hfbWFjX2phcGFuZXNlJyAgICAgIDogJ3NoaWZ0X2ppcycsCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2Jhc2U2NF9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvYmFzZTY0X2NvZGVjLnB5CmluZGV4IDMyMWE5NjEuLjg4MWQxYmEgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvYmFzZTY0X2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYmFzZTY0X2NvZGVjLnB5CkBAIC01Miw0ICs1Miw1IEBACiAgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCiAgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCiAgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIF9pc190ZXh0X2VuY29kaW5nPUZhbHNlLAogICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkKaW5kZXggZTY1ZDIyNi4uZmQ5NDk1ZSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkKQEAgLTc0LDQgKzc0LDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDAzNy5weSBiL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKaW5kZXggYmZlMmMxZS4uNGVkZDcwOCAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9jcDAzNy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhkOScgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCiAgICAgJ1x4ZGEnICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQogICAgICdceDlmJyAgICAgIyAgMHhGRiAtPiBDT05UUk9MCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMTEyNS5weSBiL0xpYi9lbmNvZGluZ3MvY3AxMTI1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmQ2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwMTEyNS5weQpAQCAtMCwwICsxLDY5OCBAQAorIiIiIFB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBmb3IgQ1AxMTI1CisKKyIiIiMiCisKK2ltcG9ydCBjb2RlY3MKKworIyMjIENvZGVjIEFQSXMKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKworICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ19tYXApCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfbWFwKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwMTEyNScsCisgICAgICAgIGVuY29kZT1Db2RlYygpLmVuY29kZSwKKyAgICAgICAgZGVjb2RlPUNvZGVjKCkuZGVjb2RlLAorICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9SW5jcmVtZW50YWxFbmNvZGVyLAorICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAorICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICkKKworIyMjIERlY29kaW5nIE1hcAorCitkZWNvZGluZ19tYXAgPSBjb2RlY3MubWFrZV9pZGVudGl0eV9kaWN0KHJhbmdlKDI1NikpCitkZWNvZGluZ19tYXAudXBkYXRlKHsKKyAgICAweDAwODA6IDB4MDQxMCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAweDAwODE6IDB4MDQxMSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgMHgwMDgyOiAweDA0MTIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgIDB4MDA4MzogMHgwNDEzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgMHgwMDg0OiAweDA0MTQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgIDB4MDA4NTogMHgwNDE1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAweDAwODY6IDB4MDQxNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgIDB4MDA4NzogMHgwNDE3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAweDAwODg6IDB4MDQxOCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAweDAwODk6IDB4MDQxOSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDAwOGE6IDB4MDQxYSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgMHgwMDhiOiAweDA0MWIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgIDB4MDA4YzogMHgwNDFjLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAweDAwOGQ6IDB4MDQxZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgMHgwMDhlOiAweDA0MWUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwMDhmOiAweDA0MWYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgIDB4MDA5MDogMHgwNDIwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAweDAwOTE6IDB4MDQyMSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgMHgwMDkyOiAweDA0MjIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgIDB4MDA5MzogMHgwNDIzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDA5NDogMHgwNDI0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAweDAwOTU6IDB4MDQyNSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgMHgwMDk2OiAweDA0MjYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAweDAwOTc6IDB4MDQyNywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgIDB4MDA5ODogMHgwNDI4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgMHgwMDk5OiAweDA0MjksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgIDB4MDA5YTogMHgwNDJhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwMDliOiAweDA0MmIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgMHgwMDljOiAweDA0MmMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDAwOWQ6IDB4MDQyZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAweDAwOWU6IDB4MDQyZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgMHgwMDlmOiAweDA0MmYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgIDB4MDBhMDogMHgwNDMwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAweDAwYTE6IDB4MDQzMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgIDB4MDBhMjogMHgwNDMyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgMHgwMGEzOiAweDA0MzMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgMHgwMGE0OiAweDA0MzQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAweDAwYTU6IDB4MDQzNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgIDB4MDBhNjogMHgwNDM2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgIDB4MDBhNzogMHgwNDM3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgMHgwMGE4OiAweDA0MzgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgIDB4MDBhOTogMHgwNDM5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDAwYWE6IDB4MDQzYSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgIDB4MDBhYjogMHgwNDNiLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgMHgwMGFjOiAweDA0M2MsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAweDAwYWQ6IDB4MDQzZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgIDB4MDBhZTogMHgwNDNlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAweDAwYWY6IDB4MDQzZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgIDB4MDBiMDogMHgyNTkxLCAgICAgIyAgTElHSFQgU0hBREUKKyAgICAweDAwYjE6IDB4MjU5MiwgICAgICMgIE1FRElVTSBTSEFERQorICAgIDB4MDBiMjogMHgyNTkzLCAgICAgIyAgREFSSyBTSEFERQorICAgIDB4MDBiMzogMHgyNTAyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgwMGI0OiAweDI1MjQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDAwYjU6IDB4MjU2MSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgwMGI2OiAweDI1NjIsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MDBiNzogMHgyNTU2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MDBiODogMHgyNTU1LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MDBiOTogMHgyNTYzLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MDBiYTogMHgyNTUxLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIDB4MDBiYjogMHgyNTU3LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgMHgwMGJjOiAweDI1NWQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgMHgwMGJkOiAweDI1NWMsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MDBiZTogMHgyNTViLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDAwYmY6IDB4MjUxMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgwMGMwOiAweDI1MTQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgwMGMxOiAweDI1MzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzI6IDB4MjUyYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGMzOiAweDI1MWMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgwMGM0OiAweDI1MDAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MDBjNTogMHgyNTNjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGM2OiAweDI1NWUsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDAwYzc6IDB4MjU1ZiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MDBjODogMHgyNTVhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDAwYzk6IDB4MjU1NCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDAwY2E6IDB4MjU2OSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2I6IDB4MjU2NiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjYzogMHgyNTYwLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDAwY2Q6IDB4MjU1MCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIDB4MDBjZTogMHgyNTZjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjZjogMHgyNTY3LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDAwZDA6IDB4MjU2OCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgwMGQxOiAweDI1NjQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgwMGQyOiAweDI1NjUsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgwMGQzOiAweDI1NTksICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDAwZDQ6IDB4MjU1OCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MDBkNTogMHgyNTUyLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDAwZDY6IDB4MjU1MywgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgwMGQ3OiAweDI1NmIsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MDBkODogMHgyNTZhLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDAwZDk6IDB4MjUxOCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIDB4MDBkYTogMHgyNTBjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgMHgwMGRiOiAweDI1ODgsICAgICAjICBGVUxMIEJMT0NLCisgICAgMHgwMGRjOiAweDI1ODQsICAgICAjICBMT1dFUiBIQUxGIEJMT0NLCisgICAgMHgwMGRkOiAweDI1OGMsICAgICAjICBMRUZUIEhBTEYgQkxPQ0sKKyAgICAweDAwZGU6IDB4MjU5MCwgICAgICMgIFJJR0hUIEhBTEYgQkxPQ0sKKyAgICAweDAwZGY6IDB4MjU4MCwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDAwZTA6IDB4MDQ0MCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgIDB4MDBlMTogMHgwNDQxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCisgICAgMHgwMGUyOiAweDA0NDIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKKyAgICAweDAwZTM6IDB4MDQ0MywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgMHgwMGU0OiAweDA0NDQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKKyAgICAweDAwZTU6IDB4MDQ0NSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQQorICAgIDB4MDBlNjogMHgwNDQ2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQorICAgIDB4MDBlNzogMHgwNDQ3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQorICAgIDB4MDBlODogMHgwNDQ4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorICAgIDB4MDBlOTogMHgwNDQ5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgMHgwMGVhOiAweDA0NGEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwMGViOiAweDA0NGIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorICAgIDB4MDBlYzogMHgwNDRjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDBlZDogMHgwNDRkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAweDAwZWU6IDB4MDQ0ZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZVQorICAgIDB4MDBlZjogMHgwNDRmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgMHgwMGYwOiAweDA0MDEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgIDB4MDBmMTogMHgwNDUxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCisgICAgMHgwMGYyOiAweDA0OTAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDAwZjM6IDB4MDQ5MSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDAwZjQ6IDB4MDQwNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDBmNTogMHgwNDU0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDBmNjogMHgwNDA2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwMGY3OiAweDA0NTYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwMGY4OiAweDA0MDcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorICAgIDB4MDBmOTogMHgwNDU3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCisgICAgMHgwMGZhOiAweDAwYjcsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwMGZiOiAweDIyMWEsICAgICAjICBTUVVBUkUgUk9PVAorICAgIDB4MDBmYzogMHgyMTE2LCAgICAgIyAgTlVNRVJPIFNJR04KKyAgICAweDAwZmQ6IDB4MDBhNCwgICAgICMgIENVUlJFTkNZIFNJR04KKyAgICAweDAwZmU6IDB4MjVhMCwgICAgICMgIEJMQUNLIFNRVUFSRQorICAgIDB4MDBmZjogMHgwMGEwLCAgICAgIyAgTk8tQlJFQUsgU1BBQ0UKK30pCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICAnXHgwMCcgICAgICMgIDB4MDAwMCAtPiBOVUxMCisgICAgJ1x4MDEnICAgICAjICAweDAwMDEgLT4gU1RBUlQgT0YgSEVBRElORworICAgICdceDAyJyAgICAgIyAgMHgwMDAyIC0+IFNUQVJUIE9GIFRFWFQKKyAgICAnXHgwMycgICAgICMgIDB4MDAwMyAtPiBFTkQgT0YgVEVYVAorICAgICdceDA0JyAgICAgIyAgMHgwMDA0IC0+IEVORCBPRiBUUkFOU01JU1NJT04KKyAgICAnXHgwNScgICAgICMgIDB4MDAwNSAtPiBFTlFVSVJZCisgICAgJ1x4MDYnICAgICAjICAweDAwMDYgLT4gQUNLTk9XTEVER0UKKyAgICAnXHgwNycgICAgICMgIDB4MDAwNyAtPiBCRUxMCisgICAgJ1x4MDgnICAgICAjICAweDAwMDggLT4gQkFDS1NQQUNFCisgICAgJ1x0JyAgICAgICAjICAweDAwMDkgLT4gSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgJ1xuJyAgICAgICAjICAweDAwMGEgLT4gTElORSBGRUVECisgICAgJ1x4MGInICAgICAjICAweDAwMGIgLT4gVkVSVElDQUwgVEFCVUxBVElPTgorICAgICdceDBjJyAgICAgIyAgMHgwMDBjIC0+IEZPUk0gRkVFRAorICAgICdccicgICAgICAgIyAgMHgwMDBkIC0+IENBUlJJQUdFIFJFVFVSTgorICAgICdceDBlJyAgICAgIyAgMHgwMDBlIC0+IFNISUZUIE9VVAorICAgICdceDBmJyAgICAgIyAgMHgwMDBmIC0+IFNISUZUIElOCisgICAgJ1x4MTAnICAgICAjICAweDAwMTAgLT4gREFUQSBMSU5LIEVTQ0FQRQorICAgICdceDExJyAgICAgIyAgMHgwMDExIC0+IERFVklDRSBDT05UUk9MIE9ORQorICAgICdceDEyJyAgICAgIyAgMHgwMDEyIC0+IERFVklDRSBDT05UUk9MIFRXTworICAgICdceDEzJyAgICAgIyAgMHgwMDEzIC0+IERFVklDRSBDT05UUk9MIFRIUkVFCisgICAgJ1x4MTQnICAgICAjICAweDAwMTQgLT4gREVWSUNFIENPTlRST0wgRk9VUgorICAgICdceDE1JyAgICAgIyAgMHgwMDE1IC0+IE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgJ1x4MTYnICAgICAjICAweDAwMTYgLT4gU1lOQ0hST05PVVMgSURMRQorICAgICdceDE3JyAgICAgIyAgMHgwMDE3IC0+IEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICAnXHgxOCcgICAgICMgIDB4MDAxOCAtPiBDQU5DRUwKKyAgICAnXHgxOScgICAgICMgIDB4MDAxOSAtPiBFTkQgT0YgTUVESVVNCisgICAgJ1x4MWEnICAgICAjICAweDAwMWEgLT4gU1VCU1RJVFVURQorICAgICdceDFiJyAgICAgIyAgMHgwMDFiIC0+IEVTQ0FQRQorICAgICdceDFjJyAgICAgIyAgMHgwMDFjIC0+IEZJTEUgU0VQQVJBVE9SCisgICAgJ1x4MWQnICAgICAjICAweDAwMWQgLT4gR1JPVVAgU0VQQVJBVE9SCisgICAgJ1x4MWUnICAgICAjICAweDAwMWUgLT4gUkVDT1JEIFNFUEFSQVRPUgorICAgICdceDFmJyAgICAgIyAgMHgwMDFmIC0+IFVOSVQgU0VQQVJBVE9SCisgICAgJyAnICAgICAgICAjICAweDAwMjAgLT4gU1BBQ0UKKyAgICAnIScgICAgICAgICMgIDB4MDAyMSAtPiBFWENMQU1BVElPTiBNQVJLCisgICAgJyInICAgICAgICAjICAweDAwMjIgLT4gUVVPVEFUSU9OIE1BUksKKyAgICAnIycgICAgICAgICMgIDB4MDAyMyAtPiBOVU1CRVIgU0lHTgorICAgICckJyAgICAgICAgIyAgMHgwMDI0IC0+IERPTExBUiBTSUdOCisgICAgJyUnICAgICAgICAjICAweDAwMjUgLT4gUEVSQ0VOVCBTSUdOCisgICAgJyYnICAgICAgICAjICAweDAwMjYgLT4gQU1QRVJTQU5ECisgICAgIiciICAgICAgICAjICAweDAwMjcgLT4gQVBPU1RST1BIRQorICAgICcoJyAgICAgICAgIyAgMHgwMDI4IC0+IExFRlQgUEFSRU5USEVTSVMKKyAgICAnKScgICAgICAgICMgIDB4MDAyOSAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgICcqJyAgICAgICAgIyAgMHgwMDJhIC0+IEFTVEVSSVNLCisgICAgJysnICAgICAgICAjICAweDAwMmIgLT4gUExVUyBTSUdOCisgICAgJywnICAgICAgICAjICAweDAwMmMgLT4gQ09NTUEKKyAgICAnLScgICAgICAgICMgIDB4MDAyZCAtPiBIWVBIRU4tTUlOVVMKKyAgICAnLicgICAgICAgICMgIDB4MDAyZSAtPiBGVUxMIFNUT1AKKyAgICAnLycgICAgICAgICMgIDB4MDAyZiAtPiBTT0xJRFVTCisgICAgJzAnICAgICAgICAjICAweDAwMzAgLT4gRElHSVQgWkVSTworICAgICcxJyAgICAgICAgIyAgMHgwMDMxIC0+IERJR0lUIE9ORQorICAgICcyJyAgICAgICAgIyAgMHgwMDMyIC0+IERJR0lUIFRXTworICAgICczJyAgICAgICAgIyAgMHgwMDMzIC0+IERJR0lUIFRIUkVFCisgICAgJzQnICAgICAgICAjICAweDAwMzQgLT4gRElHSVQgRk9VUgorICAgICc1JyAgICAgICAgIyAgMHgwMDM1IC0+IERJR0lUIEZJVkUKKyAgICAnNicgICAgICAgICMgIDB4MDAzNiAtPiBESUdJVCBTSVgKKyAgICAnNycgICAgICAgICMgIDB4MDAzNyAtPiBESUdJVCBTRVZFTgorICAgICc4JyAgICAgICAgIyAgMHgwMDM4IC0+IERJR0lUIEVJR0hUCisgICAgJzknICAgICAgICAjICAweDAwMzkgLT4gRElHSVQgTklORQorICAgICc6JyAgICAgICAgIyAgMHgwMDNhIC0+IENPTE9OCisgICAgJzsnICAgICAgICAjICAweDAwM2IgLT4gU0VNSUNPTE9OCisgICAgJzwnICAgICAgICAjICAweDAwM2MgLT4gTEVTUy1USEFOIFNJR04KKyAgICAnPScgICAgICAgICMgIDB4MDAzZCAtPiBFUVVBTFMgU0lHTgorICAgICc+JyAgICAgICAgIyAgMHgwMDNlIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgJz8nICAgICAgICAjICAweDAwM2YgLT4gUVVFU1RJT04gTUFSSworICAgICdAJyAgICAgICAgIyAgMHgwMDQwIC0+IENPTU1FUkNJQUwgQVQKKyAgICAnQScgICAgICAgICMgIDB4MDA0MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgJ0InICAgICAgICAjICAweDAwNDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgICdDJyAgICAgICAgIyAgMHgwMDQzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICAnRCcgICAgICAgICMgIDB4MDA0NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgJ0UnICAgICAgICAjICAweDAwNDUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgICdGJyAgICAgICAgIyAgMHgwMDQ2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICAnRycgICAgICAgICMgIDB4MDA0NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgJ0gnICAgICAgICAjICAweDAwNDggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgICdJJyAgICAgICAgIyAgMHgwMDQ5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAnSicgICAgICAgICMgIDB4MDA0YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgJ0snICAgICAgICAjICAweDAwNGIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgICdMJyAgICAgICAgIyAgMHgwMDRjIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICAnTScgICAgICAgICMgIDB4MDA0ZCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgJ04nICAgICAgICAjICAweDAwNGUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgICdPJyAgICAgICAgIyAgMHgwMDRmIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICAnUCcgICAgICAgICMgIDB4MDA1MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgJ1EnICAgICAgICAjICAweDAwNTEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgICdSJyAgICAgICAgIyAgMHgwMDUyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICAnUycgICAgICAgICMgIDB4MDA1MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgJ1QnICAgICAgICAjICAweDAwNTQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgICdVJyAgICAgICAgIyAgMHgwMDU1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICAnVicgICAgICAgICMgIDB4MDA1NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgJ1cnICAgICAgICAjICAweDAwNTcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgICdYJyAgICAgICAgIyAgMHgwMDU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICAnWScgICAgICAgICMgIDB4MDA1OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgJ1onICAgICAgICAjICAweDAwNWEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgICdbJyAgICAgICAgIyAgMHgwMDViIC0+IExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXFwnICAgICAgICMgIDB4MDA1YyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICAnXScgICAgICAgICMgIDB4MDA1ZCAtPiBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgICdeJyAgICAgICAgIyAgMHgwMDVlIC0+IENJUkNVTUZMRVggQUNDRU5UCisgICAgJ18nICAgICAgICAjICAweDAwNWYgLT4gTE9XIExJTkUKKyAgICAnYCcgICAgICAgICMgIDB4MDA2MCAtPiBHUkFWRSBBQ0NFTlQKKyAgICAnYScgICAgICAgICMgIDB4MDA2MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgICdiJyAgICAgICAgIyAgMHgwMDYyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgJ2MnICAgICAgICAjICAweDAwNjMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAnZCcgICAgICAgICMgIDB4MDA2NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgICdlJyAgICAgICAgIyAgMHgwMDY1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgJ2YnICAgICAgICAjICAweDAwNjYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAnZycgICAgICAgICMgIDB4MDA2NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgICdoJyAgICAgICAgIyAgMHgwMDY4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgJ2knICAgICAgICAjICAweDAwNjkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAnaicgICAgICAgICMgIDB4MDA2YSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgICdrJyAgICAgICAgIyAgMHgwMDZiIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgJ2wnICAgICAgICAjICAweDAwNmMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAnbScgICAgICAgICMgIDB4MDA2ZCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgICduJyAgICAgICAgIyAgMHgwMDZlIC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgJ28nICAgICAgICAjICAweDAwNmYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAncCcgICAgICAgICMgIDB4MDA3MCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgICdxJyAgICAgICAgIyAgMHgwMDcxIC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgJ3InICAgICAgICAjICAweDAwNzIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAncycgICAgICAgICMgIDB4MDA3MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgICd0JyAgICAgICAgIyAgMHgwMDc0IC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgJ3UnICAgICAgICAjICAweDAwNzUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAndicgICAgICAgICMgIDB4MDA3NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgICd3JyAgICAgICAgIyAgMHgwMDc3IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgJ3gnICAgICAgICAjICAweDAwNzggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAneScgICAgICAgICMgIDB4MDA3OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgICd6JyAgICAgICAgIyAgMHgwMDdhIC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgJ3snICAgICAgICAjICAweDAwN2IgLT4gTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgJ3wnICAgICAgICAjICAweDAwN2MgLT4gVkVSVElDQUwgTElORQorICAgICd9JyAgICAgICAgIyAgMHgwMDdkIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAnficgICAgICAgICMgIDB4MDA3ZSAtPiBUSUxERQorICAgICdceDdmJyAgICAgIyAgMHgwMDdmIC0+IERFTEVURQorICAgICdcdTA0MTAnICAgIyAgMHgwMDgwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAnXHUwNDExJyAgICMgIDB4MDA4MSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorICAgICdcdTA0MTInICAgIyAgMHgwMDgyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisgICAgJ1x1MDQxMycgICAjICAweDAwODMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgJ1x1MDQxNCcgICAjICAweDAwODQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKKyAgICAnXHUwNDE1JyAgICMgIDB4MDA4NSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgICdcdTA0MTYnICAgIyAgMHgwMDg2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgICdcdTA0MTcnICAgIyAgMHgwMDg3IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisgICAgJ1x1MDQxOCcgICAjICAweDAwODggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgICdcdTA0MTknICAgIyAgMHgwMDg5IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAnXHUwNDFhJyAgICMgIDB4MDA4YSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorICAgICdcdTA0MWInICAgIyAgMHgwMDhiIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgJ1x1MDQxYycgICAjICAweDAwOGMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAnXHUwNDFkJyAgICMgIDB4MDA4ZCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorICAgICdcdTA0MWUnICAgIyAgMHgwMDhlIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAnXHUwNDFmJyAgICMgIDB4MDA4ZiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgICdcdTA0MjAnICAgIyAgMHgwMDkwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCisgICAgJ1x1MDQyMScgICAjICAweDAwOTEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAnXHUwNDIyJyAgICMgIDB4MDA5MiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgICdcdTA0MjMnICAgIyAgMHgwMDkzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyAgICAnXHUwNDI0JyAgICMgIDB4MDA5NCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgICdcdTA0MjUnICAgIyAgMHgwMDk1IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgJ1x1MDQyNicgICAjICAweDAwOTYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisgICAgJ1x1MDQyNycgICAjICAweDAwOTcgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgJ1x1MDQyOCcgICAjICAweDAwOTggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgJ1x1MDQyOScgICAjICAweDAwOTkgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAnXHUwNDJhJyAgICMgIDB4MDA5YSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KKyAgICAnXHUwNDJiJyAgICMgIDB4MDA5YiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgJ1x1MDQyYycgICAjICAweDAwOWMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgJ1x1MDQyZCcgICAjICAweDAwOWQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorICAgICdcdTA0MmUnICAgIyAgMHgwMDllIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgJ1x1MDQyZicgICAjICAweDAwOWYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAnXHUwNDMwJyAgICMgIDB4MDBhMCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorICAgICdcdTA0MzEnICAgIyAgMHgwMGExIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgICdcdTA0MzInICAgIyAgMHgwMGEyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBWRQorICAgICdcdTA0MzMnICAgIyAgMHgwMGEzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAnXHUwNDM0JyAgICMgIDB4MDBhNCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAnXHUwNDM1JyAgICMgIDB4MDBhNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAnXHUwNDM2JyAgICMgIDB4MDBhNiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCisgICAgJ1x1MDQzNycgICAjICAweDAwYTcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgJ1x1MDQzOCcgICAjICAweDAwYTggLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyAgICAnXHUwNDM5JyAgICMgIDB4MDBhOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorICAgICdcdTA0M2EnICAgIyAgMHgwMGFhIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgICdcdTA0M2InICAgIyAgMHgwMGFiIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTAorICAgICdcdTA0M2MnICAgIyAgMHgwMGFjIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTQorICAgICdcdTA0M2QnICAgIyAgMHgwMGFkIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgICdcdTA0M2UnICAgIyAgMHgwMGFlIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBPCisgICAgJ1x1MDQzZicgICAjICAweDAwYWYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCisgICAgJ1x1MjU5MScgICAjICAweDAwYjAgLT4gTElHSFQgU0hBREUKKyAgICAnXHUyNTkyJyAgICMgIDB4MDBiMSAtPiBNRURJVU0gU0hBREUKKyAgICAnXHUyNTkzJyAgICMgIDB4MDBiMiAtPiBEQVJLIFNIQURFCisgICAgJ1x1MjUwMicgICAjICAweDAwYjMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgJ1x1MjUyNCcgICAjICAweDAwYjQgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgJ1x1MjU2MScgICAjICAweDAwYjUgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTYyJyAgICMgIDB4MDBiNiAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgICdcdTI1NTYnICAgIyAgMHgwMGI3IC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTU1JyAgICMgIDB4MDBiOCAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjU2MycgICAjICAweDAwYjkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgICdcdTI1NTEnICAgIyAgMHgwMGJhIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAnXHUyNTU3JyAgICMgIDB4MDBiYiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAnXHUyNTVkJyAgICMgIDB4MDBiYyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgJ1x1MjU1YycgICAjICAweDAwYmQgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTViJyAgICMgIDB4MDBiZSAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1MTAnICAgIyAgMHgwMGJmIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgJ1x1MjUxNCcgICAjICAweDAwYzAgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgICdcdTI1MzQnICAgIyAgMHgwMGMxIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1MmMnICAgIyAgMHgwMGMyIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjUxYycgICAjICAweDAwYzMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgICdcdTI1MDAnICAgIyAgMHgwMGM0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgJ1x1MjUzYycgICAjICAweDAwYzUgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU1ZScgICAjICAweDAwYzYgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1ZicgICAjICAweDAwYzcgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU1YScgICAjICAweDAwYzggLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAnXHUyNTU0JyAgICMgIDB4MDBjOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU2OScgICAjICAweDAwY2EgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjYnICAgIyAgMHgwMGNiIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjAnICAgIyAgMHgwMGNjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjU1MCcgICAjICAweDAwY2QgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgJ1x1MjU2YycgICAjICAweDAwY2UgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjcnICAgIyAgMHgwMGNmIC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjU2OCcgICAjICAweDAwZDAgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTY0JyAgICMgIDB4MDBkMSAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjU2NScgICAjICAweDAwZDIgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NTknICAgIyAgMHgwMGQzIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NTgnICAgIyAgMHgwMGQ0IC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgICdcdTI1NTInICAgIyAgMHgwMGQ1IC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1MycgICAjICAweDAwZDYgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTZiJyAgICMgIDB4MDBkNyAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NmEnICAgIyAgMHgwMGQ4IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjUxOCcgICAjICAweDAwZDkgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgJ1x1MjUwYycgICAjICAweDAwZGEgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU4OCcgICAjICAweDAwZGIgLT4gRlVMTCBCTE9DSworICAgICdcdTI1ODQnICAgIyAgMHgwMGRjIC0+IExPV0VSIEhBTEYgQkxPQ0sKKyAgICAnXHUyNThjJyAgICMgIDB4MDBkZCAtPiBMRUZUIEhBTEYgQkxPQ0sKKyAgICAnXHUyNTkwJyAgICMgIDB4MDBkZSAtPiBSSUdIVCBIQUxGIEJMT0NLCisgICAgJ1x1MjU4MCcgICAjICAweDAwZGYgLT4gVVBQRVIgSEFMRiBCTE9DSworICAgICdcdTA0NDAnICAgIyAgMHgwMGUwIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgICdcdTA0NDEnICAgIyAgMHgwMGUxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFUworICAgICdcdTA0NDInICAgIyAgMHgwMGUyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgICdcdTA0NDMnICAgIyAgMHgwMGUzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgJ1x1MDQ0NCcgICAjICAweDAwZTQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgJ1x1MDQ0NScgICAjICAweDAwZTUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgJ1x1MDQ0NicgICAjICAweDAwZTYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQorICAgICdcdTA0NDcnICAgIyAgMHgwMGU3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAnXHUwNDQ4JyAgICMgIDB4MDBlOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgJ1x1MDQ0OScgICAjICAweDAwZTkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgJ1x1MDQ0YScgICAjICAweDAwZWEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgICdcdTA0NGInICAgIyAgMHgwMGViIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgJ1x1MDQ0YycgICAjICAweDAwZWMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorICAgICdcdTA0NGQnICAgIyAgMHgwMGVkIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFCisgICAgJ1x1MDQ0ZScgICAjICAweDAwZWUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgJ1x1MDQ0ZicgICAjICAweDAwZWYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgJ1x1MDQwMScgICAjICAweDAwZjAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAnXHUwNDUxJyAgICMgIDB4MDBmMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAnXHUwNDkwJyAgICMgIDB4MDBmMiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAnXHUwNDkxJyAgICMgIDB4MDBmMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgJ1x1MDQwNCcgICAjICAweDAwZjQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgJ1x1MDQ1NCcgICAjICAweDAwZjUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgICdcdTA0MDYnICAgIyAgMHgwMGY2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgICdcdTA0NTYnICAgIyAgMHgwMGY3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAnXHUwNDA3JyAgICMgIDB4MDBmOCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorICAgICdcdTA0NTcnICAgIyAgMHgwMGY5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZSQorICAgICdceGI3JyAgICAgIyAgMHgwMGZhIC0+IE1JRERMRSBET1QKKyAgICAnXHUyMjFhJyAgICMgIDB4MDBmYiAtPiBTUVVBUkUgUk9PVAorICAgICdcdTIxMTYnICAgIyAgMHgwMGZjIC0+IE5VTUVSTyBTSUdOCisgICAgJ1x4YTQnICAgICAjICAweDAwZmQgLT4gQ1VSUkVOQ1kgU0lHTgorICAgICdcdTI1YTAnICAgIyAgMHgwMGZlIC0+IEJMQUNLIFNRVUFSRQorICAgICdceGEwJyAgICAgIyAgMHgwMGZmIC0+IE5PLUJSRUFLIFNQQUNFCispCisKKyMjIyBFbmNvZGluZyBNYXAKKworZW5jb2RpbmdfbWFwID0geworICAgIDB4MDAwMDogMHgwMDAwLCAgICAgIyAgTlVMTAorICAgIDB4MDAwMTogMHgwMDAxLCAgICAgIyAgU1RBUlQgT0YgSEVBRElORworICAgIDB4MDAwMjogMHgwMDAyLCAgICAgIyAgU1RBUlQgT0YgVEVYVAorICAgIDB4MDAwMzogMHgwMDAzLCAgICAgIyAgRU5EIE9GIFRFWFQKKyAgICAweDAwMDQ6IDB4MDAwNCwgICAgICMgIEVORCBPRiBUUkFOU01JU1NJT04KKyAgICAweDAwMDU6IDB4MDAwNSwgICAgICMgIEVOUVVJUlkKKyAgICAweDAwMDY6IDB4MDAwNiwgICAgICMgIEFDS05PV0xFREdFCisgICAgMHgwMDA3OiAweDAwMDcsICAgICAjICBCRUxMCisgICAgMHgwMDA4OiAweDAwMDgsICAgICAjICBCQUNLU1BBQ0UKKyAgICAweDAwMDk6IDB4MDAwOSwgICAgICMgIEhPUklaT05UQUwgVEFCVUxBVElPTgorICAgIDB4MDAwYTogMHgwMDBhLCAgICAgIyAgTElORSBGRUVECisgICAgMHgwMDBiOiAweDAwMGIsICAgICAjICBWRVJUSUNBTCBUQUJVTEFUSU9OCisgICAgMHgwMDBjOiAweDAwMGMsICAgICAjICBGT1JNIEZFRUQKKyAgICAweDAwMGQ6IDB4MDAwZCwgICAgICMgIENBUlJJQUdFIFJFVFVSTgorICAgIDB4MDAwZTogMHgwMDBlLCAgICAgIyAgU0hJRlQgT1VUCisgICAgMHgwMDBmOiAweDAwMGYsICAgICAjICBTSElGVCBJTgorICAgIDB4MDAxMDogMHgwMDEwLCAgICAgIyAgREFUQSBMSU5LIEVTQ0FQRQorICAgIDB4MDAxMTogMHgwMDExLCAgICAgIyAgREVWSUNFIENPTlRST0wgT05FCisgICAgMHgwMDEyOiAweDAwMTIsICAgICAjICBERVZJQ0UgQ09OVFJPTCBUV08KKyAgICAweDAwMTM6IDB4MDAxMywgICAgICMgIERFVklDRSBDT05UUk9MIFRIUkVFCisgICAgMHgwMDE0OiAweDAwMTQsICAgICAjICBERVZJQ0UgQ09OVFJPTCBGT1VSCisgICAgMHgwMDE1OiAweDAwMTUsICAgICAjICBORUdBVElWRSBBQ0tOT1dMRURHRQorICAgIDB4MDAxNjogMHgwMDE2LCAgICAgIyAgU1lOQ0hST05PVVMgSURMRQorICAgIDB4MDAxNzogMHgwMDE3LCAgICAgIyAgRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworICAgIDB4MDAxODogMHgwMDE4LCAgICAgIyAgQ0FOQ0VMCisgICAgMHgwMDE5OiAweDAwMTksICAgICAjICBFTkQgT0YgTUVESVVNCisgICAgMHgwMDFhOiAweDAwMWEsICAgICAjICBTVUJTVElUVVRFCisgICAgMHgwMDFiOiAweDAwMWIsICAgICAjICBFU0NBUEUKKyAgICAweDAwMWM6IDB4MDAxYywgICAgICMgIEZJTEUgU0VQQVJBVE9SCisgICAgMHgwMDFkOiAweDAwMWQsICAgICAjICBHUk9VUCBTRVBBUkFUT1IKKyAgICAweDAwMWU6IDB4MDAxZSwgICAgICMgIFJFQ09SRCBTRVBBUkFUT1IKKyAgICAweDAwMWY6IDB4MDAxZiwgICAgICMgIFVOSVQgU0VQQVJBVE9SCisgICAgMHgwMDIwOiAweDAwMjAsICAgICAjICBTUEFDRQorICAgIDB4MDAyMTogMHgwMDIxLCAgICAgIyAgRVhDTEFNQVRJT04gTUFSSworICAgIDB4MDAyMjogMHgwMDIyLCAgICAgIyAgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwMjM6IDB4MDAyMywgICAgICMgIE5VTUJFUiBTSUdOCisgICAgMHgwMDI0OiAweDAwMjQsICAgICAjICBET0xMQVIgU0lHTgorICAgIDB4MDAyNTogMHgwMDI1LCAgICAgIyAgUEVSQ0VOVCBTSUdOCisgICAgMHgwMDI2OiAweDAwMjYsICAgICAjICBBTVBFUlNBTkQKKyAgICAweDAwMjc6IDB4MDAyNywgICAgICMgIEFQT1NUUk9QSEUKKyAgICAweDAwMjg6IDB4MDAyOCwgICAgICMgIExFRlQgUEFSRU5USEVTSVMKKyAgICAweDAwMjk6IDB4MDAyOSwgICAgICMgIFJJR0hUIFBBUkVOVEhFU0lTCisgICAgMHgwMDJhOiAweDAwMmEsICAgICAjICBBU1RFUklTSworICAgIDB4MDAyYjogMHgwMDJiLCAgICAgIyAgUExVUyBTSUdOCisgICAgMHgwMDJjOiAweDAwMmMsICAgICAjICBDT01NQQorICAgIDB4MDAyZDogMHgwMDJkLCAgICAgIyAgSFlQSEVOLU1JTlVTCisgICAgMHgwMDJlOiAweDAwMmUsICAgICAjICBGVUxMIFNUT1AKKyAgICAweDAwMmY6IDB4MDAyZiwgICAgICMgIFNPTElEVVMKKyAgICAweDAwMzA6IDB4MDAzMCwgICAgICMgIERJR0lUIFpFUk8KKyAgICAweDAwMzE6IDB4MDAzMSwgICAgICMgIERJR0lUIE9ORQorICAgIDB4MDAzMjogMHgwMDMyLCAgICAgIyAgRElHSVQgVFdPCisgICAgMHgwMDMzOiAweDAwMzMsICAgICAjICBESUdJVCBUSFJFRQorICAgIDB4MDAzNDogMHgwMDM0LCAgICAgIyAgRElHSVQgRk9VUgorICAgIDB4MDAzNTogMHgwMDM1LCAgICAgIyAgRElHSVQgRklWRQorICAgIDB4MDAzNjogMHgwMDM2LCAgICAgIyAgRElHSVQgU0lYCisgICAgMHgwMDM3OiAweDAwMzcsICAgICAjICBESUdJVCBTRVZFTgorICAgIDB4MDAzODogMHgwMDM4LCAgICAgIyAgRElHSVQgRUlHSFQKKyAgICAweDAwMzk6IDB4MDAzOSwgICAgICMgIERJR0lUIE5JTkUKKyAgICAweDAwM2E6IDB4MDAzYSwgICAgICMgIENPTE9OCisgICAgMHgwMDNiOiAweDAwM2IsICAgICAjICBTRU1JQ09MT04KKyAgICAweDAwM2M6IDB4MDAzYywgICAgICMgIExFU1MtVEhBTiBTSUdOCisgICAgMHgwMDNkOiAweDAwM2QsICAgICAjICBFUVVBTFMgU0lHTgorICAgIDB4MDAzZTogMHgwMDNlLCAgICAgIyAgR1JFQVRFUi1USEFOIFNJR04KKyAgICAweDAwM2Y6IDB4MDAzZiwgICAgICMgIFFVRVNUSU9OIE1BUksKKyAgICAweDAwNDA6IDB4MDA0MCwgICAgICMgIENPTU1FUkNJQUwgQVQKKyAgICAweDAwNDE6IDB4MDA0MSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAweDAwNDI6IDB4MDA0MiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICAweDAwNDM6IDB4MDA0MywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICAweDAwNDQ6IDB4MDA0NCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAweDAwNDU6IDB4MDA0NSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICAweDAwNDY6IDB4MDA0NiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICAweDAwNDc6IDB4MDA0NywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAweDAwNDg6IDB4MDA0OCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICAweDAwNDk6IDB4MDA0OSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAweDAwNGE6IDB4MDA0YSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAweDAwNGI6IDB4MDA0YiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICAweDAwNGM6IDB4MDA0YywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICAweDAwNGQ6IDB4MDA0ZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAweDAwNGU6IDB4MDA0ZSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICAweDAwNGY6IDB4MDA0ZiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICAweDAwNTA6IDB4MDA1MCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAweDAwNTE6IDB4MDA1MSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICAweDAwNTI6IDB4MDA1MiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICAweDAwNTM6IDB4MDA1MywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAweDAwNTQ6IDB4MDA1NCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICAweDAwNTU6IDB4MDA1NSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICAweDAwNTY6IDB4MDA1NiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAweDAwNTc6IDB4MDA1NywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICAweDAwNTg6IDB4MDA1OCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICAweDAwNTk6IDB4MDA1OSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAweDAwNWE6IDB4MDA1YSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICAweDAwNWI6IDB4MDA1YiwgICAgICMgIExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICAweDAwNWM6IDB4MDA1YywgICAgICMgIFJFVkVSU0UgU09MSURVUworICAgIDB4MDA1ZDogMHgwMDVkLCAgICAgIyAgUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICAweDAwNWU6IDB4MDA1ZSwgICAgICMgIENJUkNVTUZMRVggQUNDRU5UCisgICAgMHgwMDVmOiAweDAwNWYsICAgICAjICBMT1cgTElORQorICAgIDB4MDA2MDogMHgwMDYwLCAgICAgIyAgR1JBVkUgQUNDRU5UCisgICAgMHgwMDYxOiAweDAwNjEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgIDB4MDA2MjogMHgwMDYyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAweDAwNjM6IDB4MDA2MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgMHgwMDY0OiAweDAwNjQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgIDB4MDA2NTogMHgwMDY1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAweDAwNjY6IDB4MDA2NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgMHgwMDY3OiAweDAwNjcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgIDB4MDA2ODogMHgwMDY4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAweDAwNjk6IDB4MDA2OSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgMHgwMDZhOiAweDAwNmEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgIDB4MDA2YjogMHgwMDZiLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAweDAwNmM6IDB4MDA2YywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgMHgwMDZkOiAweDAwNmQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgIDB4MDA2ZTogMHgwMDZlLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAweDAwNmY6IDB4MDA2ZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgMHgwMDcwOiAweDAwNzAsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgIDB4MDA3MTogMHgwMDcxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAweDAwNzI6IDB4MDA3MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgMHgwMDczOiAweDAwNzMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgIDB4MDA3NDogMHgwMDc0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAweDAwNzU6IDB4MDA3NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgMHgwMDc2OiAweDAwNzYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgIDB4MDA3NzogMHgwMDc3LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAweDAwNzg6IDB4MDA3OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgMHgwMDc5OiAweDAwNzksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgIDB4MDA3YTogMHgwMDdhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAweDAwN2I6IDB4MDA3YiwgICAgICMgIExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgIDB4MDA3YzogMHgwMDdjLCAgICAgIyAgVkVSVElDQUwgTElORQorICAgIDB4MDA3ZDogMHgwMDdkLCAgICAgIyAgUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgIDB4MDA3ZTogMHgwMDdlLCAgICAgIyAgVElMREUKKyAgICAweDAwN2Y6IDB4MDA3ZiwgICAgICMgIERFTEVURQorICAgIDB4MDBhMDogMHgwMGZmLCAgICAgIyAgTk8tQlJFQUsgU1BBQ0UKKyAgICAweDAwYTQ6IDB4MDBmZCwgICAgICMgIENVUlJFTkNZIFNJR04KKyAgICAweDAwYjc6IDB4MDBmYSwgICAgICMgIE1JRERMRSBET1QKKyAgICAweDA0MDE6IDB4MDBmMCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCisgICAgMHgwNDA0OiAweDAwZjQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDA0MDY6IDB4MDBmNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDQwNzogMHgwMGY4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKyAgICAweDA0MTA6IDB4MDA4MCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAweDA0MTE6IDB4MDA4MSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgMHgwNDEyOiAweDAwODIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgIDB4MDQxMzogMHgwMDgzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgMHgwNDE0OiAweDAwODQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgIDB4MDQxNTogMHgwMDg1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAweDA0MTY6IDB4MDA4NiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgIDB4MDQxNzogMHgwMDg3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAweDA0MTg6IDB4MDA4OCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAweDA0MTk6IDB4MDA4OSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDA0MWE6IDB4MDA4YSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgMHgwNDFiOiAweDAwOGIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgIDB4MDQxYzogMHgwMDhjLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAweDA0MWQ6IDB4MDA4ZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgMHgwNDFlOiAweDAwOGUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwNDFmOiAweDAwOGYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgIDB4MDQyMDogMHgwMDkwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAweDA0MjE6IDB4MDA5MSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgMHgwNDIyOiAweDAwOTIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgIDB4MDQyMzogMHgwMDkzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDQyNDogMHgwMDk0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAweDA0MjU6IDB4MDA5NSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgMHgwNDI2OiAweDAwOTYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAweDA0Mjc6IDB4MDA5NywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgIDB4MDQyODogMHgwMDk4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgMHgwNDI5OiAweDAwOTksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgIDB4MDQyYTogMHgwMDlhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwNDJiOiAweDAwOWIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgMHgwNDJjOiAweDAwOWMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDA0MmQ6IDB4MDA5ZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAweDA0MmU6IDB4MDA5ZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgMHgwNDJmOiAweDAwOWYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgIDB4MDQzMDogMHgwMGEwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAweDA0MzE6IDB4MDBhMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgIDB4MDQzMjogMHgwMGEyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgMHgwNDMzOiAweDAwYTMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgMHgwNDM0OiAweDAwYTQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAweDA0MzU6IDB4MDBhNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgIDB4MDQzNjogMHgwMGE2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgIDB4MDQzNzogMHgwMGE3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgMHgwNDM4OiAweDAwYTgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgIDB4MDQzOTogMHgwMGE5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDA0M2E6IDB4MDBhYSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgIDB4MDQzYjogMHgwMGFiLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgMHgwNDNjOiAweDAwYWMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAweDA0M2Q6IDB4MDBhZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgIDB4MDQzZTogMHgwMGFlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAweDA0M2Y6IDB4MDBhZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgIDB4MDQ0MDogMHgwMGUwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgMHgwNDQxOiAweDAwZTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAweDA0NDI6IDB4MDBlMiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgIDB4MDQ0MzogMHgwMGUzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAweDA0NDQ6IDB4MDBlNCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgIDB4MDQ0NTogMHgwMGU1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgMHgwNDQ2OiAweDAwZTYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgMHgwNDQ3OiAweDAwZTcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgMHgwNDQ4OiAweDAwZTgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgMHgwNDQ5OiAweDAwZTksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAweDA0NGE6IDB4MDBlYSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDA0NGI6IDB4MDBlYiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgMHgwNDRjOiAweDAwZWMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwNDRkOiAweDAwZWQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgIDB4MDQ0ZTogMHgwMGVlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgMHgwNDRmOiAweDAwZWYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKyAgICAweDA0NTE6IDB4MDBmMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJTworICAgIDB4MDQ1NDogMHgwMGY1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDQ1NjogMHgwMGY3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDQ1NzogMHgwMGY5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCisgICAgMHgwNDkwOiAweDAwZjIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDA0OTE6IDB4MDBmMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDIxMTY6IDB4MDBmYywgICAgICMgIE5VTUVSTyBTSUdOCisgICAgMHgyMjFhOiAweDAwZmIsICAgICAjICBTUVVBUkUgUk9PVAorICAgIDB4MjUwMDogMHgwMGM0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAweDI1MDI6IDB4MDBiMywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgIDB4MjUwYzogMHgwMGRhLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgMHgyNTEwOiAweDAwYmYsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgIDB4MjUxNDogMHgwMGMwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgIDB4MjUxODogMHgwMGQ5LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgMHgyNTFjOiAweDAwYzMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgyNTI0OiAweDAwYjQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDI1MmM6IDB4MDBjMiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTM0OiAweDAwYzEsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDI1M2M6IDB4MDBjNSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU1MDogMHgwMGNkLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgMHgyNTUxOiAweDAwYmEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgMHgyNTUyOiAweDAwZDUsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MjU1MzogMHgwMGQ2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDI1NTQ6IDB4MDBjOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1NTU6IDB4MDBiOCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDI1NTY6IDB4MDBiNywgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDI1NTc6IDB4MDBiYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MjU1ODogMHgwMGQ0LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgyNTU5OiAweDAwZDMsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDI1NWE6IDB4MDBjOCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgMHgyNTViOiAweDAwYmUsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MjU1YzogMHgwMGJkLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDI1NWQ6IDB4MDBiYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDI1NWU6IDB4MDBjNiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MjU1ZjogMHgwMGM3LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgyNTYwOiAweDAwY2MsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MjU2MTogMHgwMGI1LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDI1NjI6IDB4MDBiNiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgyNTYzOiAweDAwYjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTY0OiAweDAwZDEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgyNTY1OiAweDAwZDIsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgyNTY2OiAweDAwY2IsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1Njc6IDB4MDBjZiwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgyNTY4OiAweDAwZDAsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MjU2OTogMHgwMGNhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU2YTogMHgwMGQ4LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDI1NmI6IDB4MDBkNywgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgyNTZjOiAweDAwY2UsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTgwOiAweDAwZGYsICAgICAjICBVUFBFUiBIQUxGIEJMT0NLCisgICAgMHgyNTg0OiAweDAwZGMsICAgICAjICBMT1dFUiBIQUxGIEJMT0NLCisgICAgMHgyNTg4OiAweDAwZGIsICAgICAjICBGVUxMIEJMT0NLCisgICAgMHgyNThjOiAweDAwZGQsICAgICAjICBMRUZUIEhBTEYgQkxPQ0sKKyAgICAweDI1OTA6IDB4MDBkZSwgICAgICMgIFJJR0hUIEhBTEYgQkxPQ0sKKyAgICAweDI1OTE6IDB4MDBiMCwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgyNTkyOiAweDAwYjEsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDI1OTM6IDB4MDBiMiwgICAgICMgIERBUksgU0hBREUKKyAgICAweDI1YTA6IDB4MDBmZSwgICAgICMgIEJMQUNLIFNRVUFSRQorfQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDI3My5weSBiL0xpYi9lbmNvZGluZ3MvY3AyNzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljNmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvY3AyNzMucHkKQEAgLTAsMCArMSwzMDcgQEAKKyIiIiBQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgY3AyNzMgZ2VuZXJhdGVkIGZyb20gJ3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQnIHdpdGggZ2VuY29kZWMucHkuCisKKyIiIiMiCisKK2ltcG9ydCBjb2RlY3MKKworIyMjIENvZGVjIEFQSXMKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKworICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ190YWJsZSkKKworICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ190YWJsZSkKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdjcDI3MycsCisgICAgICAgIGVuY29kZT1Db2RlYygpLmVuY29kZSwKKyAgICAgICAgZGVjb2RlPUNvZGVjKCkuZGVjb2RlLAorICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9SW5jcmVtZW50YWxFbmNvZGVyLAorICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAorICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICkKKworCisjIyMgRGVjb2RpbmcgVGFibGUKKworZGVjb2RpbmdfdGFibGUgPSAoCisgICAgJ1x4MDAnICAgICAgIyAgMHgwMCAtPiBOVUxMIChOVUwpCisgICAgJ1x4MDEnICAgICAgIyAgMHgwMSAtPiBTVEFSVCBPRiBIRUFESU5HIChTT0gpCisgICAgJ1x4MDInICAgICAgIyAgMHgwMiAtPiBTVEFSVCBPRiBURVhUIChTVFgpCisgICAgJ1x4MDMnICAgICAgIyAgMHgwMyAtPiBFTkQgT0YgVEVYVCAoRVRYKQorICAgICdceDljJyAgICAgICMgIDB4MDQgLT4gU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorICAgICdcdCcgICAgICAgICMgIDB4MDUgLT4gQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKQorICAgICdceDg2JyAgICAgICMgIDB4MDYgLT4gU1RBUlQgT0YgU0VMRUNURUQgQVJFQSAoU1NBKQorICAgICdceDdmJyAgICAgICMgIDB4MDcgLT4gREVMRVRFIChERUwpCisgICAgJ1x4OTcnICAgICAgIyAgMHgwOCAtPiBFTkQgT0YgR1VBUkRFRCBBUkVBIChFUEEpCisgICAgJ1x4OGQnICAgICAgIyAgMHgwOSAtPiBSRVZFUlNFIExJTkUgRkVFRCAoUkkpCisgICAgJ1x4OGUnICAgICAgIyAgMHgwQSAtPiBTSU5HTEUtU0hJRlQgVFdPIChTUzIpCisgICAgJ1x4MGInICAgICAgIyAgMHgwQiAtPiBMSU5FIFRBQlVMQVRJT04gKFZUKQorICAgICdceDBjJyAgICAgICMgIDB4MEMgLT4gRk9STSBGRUVEIChGRikKKyAgICAnXHInICAgICAgICAjICAweDBEIC0+IENBUlJJQUdFIFJFVFVSTiAoQ1IpCisgICAgJ1x4MGUnICAgICAgIyAgMHgwRSAtPiBTSElGVCBPVVQgKFNPKQorICAgICdceDBmJyAgICAgICMgIDB4MEYgLT4gU0hJRlQgSU4gKFNJKQorICAgICdceDEwJyAgICAgICMgIDB4MTAgLT4gREFUQUxJTksgRVNDQVBFIChETEUpCisgICAgJ1x4MTEnICAgICAgIyAgMHgxMSAtPiBERVZJQ0UgQ09OVFJPTCBPTkUgKERDMSkKKyAgICAnXHgxMicgICAgICAjICAweDEyIC0+IERFVklDRSBDT05UUk9MIFRXTyAoREMyKQorICAgICdceDEzJyAgICAgICMgIDB4MTMgLT4gREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKKyAgICAnXHg5ZCcgICAgICAjICAweDE0IC0+IE9QRVJBVElORyBTWVNURU0gQ09NTUFORCAoT1NDKQorICAgICdceDg1JyAgICAgICMgIDB4MTUgLT4gTkVYVCBMSU5FIChORUwpCisgICAgJ1x4MDgnICAgICAgIyAgMHgxNiAtPiBCQUNLU1BBQ0UgKEJTKQorICAgICdceDg3JyAgICAgICMgIDB4MTcgLT4gRU5EIE9GIFNFTEVDVEVEIEFSRUEgKEVTQSkKKyAgICAnXHgxOCcgICAgICAjICAweDE4IC0+IENBTkNFTCAoQ0FOKQorICAgICdceDE5JyAgICAgICMgIDB4MTkgLT4gRU5EIE9GIE1FRElVTSAoRU0pCisgICAgJ1x4OTInICAgICAgIyAgMHgxQSAtPiBQUklWQVRFIFVTRSBUV08gKFBVMikKKyAgICAnXHg4ZicgICAgICAjICAweDFCIC0+IFNJTkdMRS1TSElGVCBUSFJFRSAoU1MzKQorICAgICdceDFjJyAgICAgICMgIDB4MUMgLT4gRklMRSBTRVBBUkFUT1IgKElTNCkKKyAgICAnXHgxZCcgICAgICAjICAweDFEIC0+IEdST1VQIFNFUEFSQVRPUiAoSVMzKQorICAgICdceDFlJyAgICAgICMgIDB4MUUgLT4gUkVDT1JEIFNFUEFSQVRPUiAoSVMyKQorICAgICdceDFmJyAgICAgICMgIDB4MUYgLT4gVU5JVCBTRVBBUkFUT1IgKElTMSkKKyAgICAnXHg4MCcgICAgICAjICAweDIwIC0+IFBBRERJTkcgQ0hBUkFDVEVSIChQQUQpCisgICAgJ1x4ODEnICAgICAgIyAgMHgyMSAtPiBISUdIIE9DVEVUIFBSRVNFVCAoSE9QKQorICAgICdceDgyJyAgICAgICMgIDB4MjIgLT4gQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKKyAgICAnXHg4MycgICAgICAjICAweDIzIC0+IE5PIEJSRUFLIEhFUkUgKE5CSCkKKyAgICAnXHg4NCcgICAgICAjICAweDI0IC0+IElOREVYIChJTkQpCisgICAgJ1xuJyAgICAgICAgIyAgMHgyNSAtPiBMSU5FIEZFRUQgKExGKQorICAgICdceDE3JyAgICAgICMgIDB4MjYgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSyAoRVRCKQorICAgICdceDFiJyAgICAgICMgIDB4MjcgLT4gRVNDQVBFIChFU0MpCisgICAgJ1x4ODgnICAgICAgIyAgMHgyOCAtPiBDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKKyAgICAnXHg4OScgICAgICAjICAweDI5IC0+IENIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTiAoSFRKKQorICAgICdceDhhJyAgICAgICMgIDB4MkEgLT4gTElORSBUQUJVTEFUSU9OIFNFVCAoVlRTKQorICAgICdceDhiJyAgICAgICMgIDB4MkIgLT4gUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKKyAgICAnXHg4YycgICAgICAjICAweDJDIC0+IFBBUlRJQUwgTElORSBCQUNLV0FSRCAoUExVKQorICAgICdceDA1JyAgICAgICMgIDB4MkQgLT4gRU5RVUlSWSAoRU5RKQorICAgICdceDA2JyAgICAgICMgIDB4MkUgLT4gQUNLTk9XTEVER0UgKEFDSykKKyAgICAnXHgwNycgICAgICAjICAweDJGIC0+IEJFTEwgKEJFTCkKKyAgICAnXHg5MCcgICAgICAjICAweDMwIC0+IERFVklDRSBDT05UUk9MIFNUUklORyAoRENTKQorICAgICdceDkxJyAgICAgICMgIDB4MzEgLT4gUFJJVkFURSBVU0UgT05FIChQVTEpCisgICAgJ1x4MTYnICAgICAgIyAgMHgzMiAtPiBTWU5DSFJPTk9VUyBJRExFIChTWU4pCisgICAgJ1x4OTMnICAgICAgIyAgMHgzMyAtPiBTRVQgVFJBTlNNSVQgU1RBVEUgKFNUUykKKyAgICAnXHg5NCcgICAgICAjICAweDM0IC0+IENBTkNFTCBDSEFSQUNURVIgKENDSCkKKyAgICAnXHg5NScgICAgICAjICAweDM1IC0+IE1FU1NBR0UgV0FJVElORyAoTVcpCisgICAgJ1x4OTYnICAgICAgIyAgMHgzNiAtPiBTVEFSVCBPRiBHVUFSREVEIEFSRUEgKFNQQSkKKyAgICAnXHgwNCcgICAgICAjICAweDM3IC0+IEVORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKKyAgICAnXHg5OCcgICAgICAjICAweDM4IC0+IFNUQVJUIE9GIFNUUklORyAoU09TKQorICAgICdceDk5JyAgICAgICMgIDB4MzkgLT4gU0lOR0xFIEdSQVBISUMgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNHQ0kpCisgICAgJ1x4OWEnICAgICAgIyAgMHgzQSAtPiBTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKKyAgICAnXHg5YicgICAgICAjICAweDNCIC0+IENPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUiAoQ1NJKQorICAgICdceDE0JyAgICAgICMgIDB4M0MgLT4gREVWSUNFIENPTlRST0wgRk9VUiAoREM0KQorICAgICdceDE1JyAgICAgICMgIDB4M0QgLT4gTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKKyAgICAnXHg5ZScgICAgICAjICAweDNFIC0+IFBSSVZBQ1kgTUVTU0FHRSAoUE0pCisgICAgJ1x4MWEnICAgICAgIyAgMHgzRiAtPiBTVUJTVElUVVRFIChTVUIpCisgICAgJyAnICAgICAgICAgIyAgMHg0MCAtPiBTUEFDRQorICAgICdceGEwJyAgICAgICMgIDB4NDEgLT4gTk8tQlJFQUsgU1BBQ0UKKyAgICAnXHhlMicgICAgICAjICAweDQyIC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgICd7JyAgICAgICAgICMgIDB4NDMgLT4gTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgJ1x4ZTAnICAgICAgIyAgMHg0NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgJ1x4ZTEnICAgICAgIyAgMHg0NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgJ1x4ZTMnICAgICAgIyAgMHg0NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgJ1x4ZTUnICAgICAgIyAgMHg0NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAnXHhlNycgICAgICAjICAweDQ4IC0+IExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgICdceGYxJyAgICAgICMgIDB4NDkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgICdceGM0JyAgICAgICMgIDB4NEEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgICcuJyAgICAgICAgICMgIDB4NEIgLT4gRlVMTCBTVE9QCisgICAgJzwnICAgICAgICAgIyAgMHg0QyAtPiBMRVNTLVRIQU4gU0lHTgorICAgICcoJyAgICAgICAgICMgIDB4NEQgLT4gTEVGVCBQQVJFTlRIRVNJUworICAgICcrJyAgICAgICAgICMgIDB4NEUgLT4gUExVUyBTSUdOCisgICAgJyEnICAgICAgICAgIyAgMHg0RiAtPiBFWENMQU1BVElPTiBNQVJLCisgICAgJyYnICAgICAgICAgIyAgMHg1MCAtPiBBTVBFUlNBTkQKKyAgICAnXHhlOScgICAgICAjICAweDUxIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAnXHhlYScgICAgICAjICAweDUyIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGViJyAgICAgICMgIDB4NTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhlOCcgICAgICAjICAweDU0IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAnXHhlZCcgICAgICAjICAweDU1IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAnXHhlZScgICAgICAjICAweDU2IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGVmJyAgICAgICMgIDB4NTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhlYycgICAgICAjICAweDU4IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAnficgICAgICAgICAjICAweDU5IC0+IFRJTERFCisgICAgJ1x4ZGMnICAgICAgIyAgMHg1QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgJyQnICAgICAgICAgIyAgMHg1QiAtPiBET0xMQVIgU0lHTgorICAgICcqJyAgICAgICAgICMgIDB4NUMgLT4gQVNURVJJU0sKKyAgICAnKScgICAgICAgICAjICAweDVEIC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgJzsnICAgICAgICAgIyAgMHg1RSAtPiBTRU1JQ09MT04KKyAgICAnXicgICAgICAgICAjICAweDVGIC0+IENJUkNVTUZMRVggQUNDRU5UCisgICAgJy0nICAgICAgICAgIyAgMHg2MCAtPiBIWVBIRU4tTUlOVVMKKyAgICAnLycgICAgICAgICAjICAweDYxIC0+IFNPTElEVVMKKyAgICAnXHhjMicgICAgICAjICAweDYyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1snICAgICAgICAgIyAgMHg2MyAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1x4YzAnICAgICAgIyAgMHg2NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAnXHhjMScgICAgICAjICAweDY1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgICdceGMzJyAgICAgICMgIDB4NjYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgJ1x4YzUnICAgICAgIyAgMHg2NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgICdceGM3JyAgICAgICMgIDB4NjggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAnXHhkMScgICAgICAjICAweDY5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgICdceGY2JyAgICAgICMgIDB4NkEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAnLCcgICAgICAgICAjICAweDZCIC0+IENPTU1BCisgICAgJyUnICAgICAgICAgIyAgMHg2QyAtPiBQRVJDRU5UIFNJR04KKyAgICAnXycgICAgICAgICAjICAweDZEIC0+IExPVyBMSU5FCisgICAgJz4nICAgICAgICAgIyAgMHg2RSAtPiBHUkVBVEVSLVRIQU4gU0lHTgorICAgICc/JyAgICAgICAgICMgIDB4NkYgLT4gUVVFU1RJT04gTUFSSworICAgICdceGY4JyAgICAgICMgIDB4NzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAnXHhjOScgICAgICAjICAweDcxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGNhJyAgICAgICMgIDB4NzIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjYicgICAgICAjICAweDczIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhjOCcgICAgICAjICAweDc0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgICdceGNkJyAgICAgICMgIDB4NzUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgJ1x4Y2UnICAgICAgIyAgMHg3NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGNmJyAgICAgICMgIDB4NzcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgICdceGNjJyAgICAgICMgIDB4NzggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgJ2AnICAgICAgICAgIyAgMHg3OSAtPiBHUkFWRSBBQ0NFTlQKKyAgICAnOicgICAgICAgICAjICAweDdBIC0+IENPTE9OCisgICAgJyMnICAgICAgICAgIyAgMHg3QiAtPiBOVU1CRVIgU0lHTgorICAgICdceGE3JyAgICAgICMgIDB4N0MgLT4gU0VDVElPTiBTSUdOCisgICAgIiciICAgICAgICAgIyAgMHg3RCAtPiBBUE9TVFJPUEhFCisgICAgJz0nICAgICAgICAgIyAgMHg3RSAtPiBFUVVBTFMgU0lHTgorICAgICciJyAgICAgICAgICMgIDB4N0YgLT4gUVVPVEFUSU9OIE1BUksKKyAgICAnXHhkOCcgICAgICAjICAweDgwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAnYScgICAgICAgICAjICAweDgxIC0+IExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgJ2InICAgICAgICAgIyAgMHg4MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgICdjJyAgICAgICAgICMgIDB4ODMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAnZCcgICAgICAgICAjICAweDg0IC0+IExBVElOIFNNQUxMIExFVFRFUiBECisgICAgJ2UnICAgICAgICAgIyAgMHg4NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgICdmJyAgICAgICAgICMgIDB4ODYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAnZycgICAgICAgICAjICAweDg3IC0+IExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgJ2gnICAgICAgICAgIyAgMHg4OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgICdpJyAgICAgICAgICMgIDB4ODkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAnXHhhYicgICAgICAjICAweDhBIC0+IExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x4YmInICAgICAgIyAgMHg4QiAtPiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHhmMCcgICAgICAjICAweDhDIC0+IExBVElOIFNNQUxMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKyAgICAnXHhmZCcgICAgICAjICAweDhEIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAnXHhmZScgICAgICAjICAweDhFIC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorICAgICdceGIxJyAgICAgICMgIDB4OEYgLT4gUExVUy1NSU5VUyBTSUdOCisgICAgJ1x4YjAnICAgICAgIyAgMHg5MCAtPiBERUdSRUUgU0lHTgorICAgICdqJyAgICAgICAgICMgIDB4OTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICAjICAweDkyIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgJ2wnICAgICAgICAgIyAgMHg5MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgICdtJyAgICAgICAgICMgIDB4OTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICAjICAweDk1IC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgJ28nICAgICAgICAgIyAgMHg5NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgICdwJyAgICAgICAgICMgIDB4OTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICAjICAweDk4IC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgJ3InICAgICAgICAgIyAgMHg5OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgICdceGFhJyAgICAgICMgIDB4OUEgLT4gRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICAnXHhiYScgICAgICAjICAweDlCIC0+IE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorICAgICdceGU2JyAgICAgICMgIDB4OUMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEFFCisgICAgJ1x4YjgnICAgICAgIyAgMHg5RCAtPiBDRURJTExBCisgICAgJ1x4YzYnICAgICAgIyAgMHg5RSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorICAgICdceGE0JyAgICAgICMgIDB4OUYgLT4gQ1VSUkVOQ1kgU0lHTgorICAgICdceGI1JyAgICAgICMgIDB4QTAgLT4gTUlDUk8gU0lHTgorICAgICdceGRmJyAgICAgICMgIDB4QTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMgKEdlcm1hbikKKyAgICAncycgICAgICAgICAjICAweEEyIC0+IExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgJ3QnICAgICAgICAgIyAgMHhBMyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgICd1JyAgICAgICAgICMgIDB4QTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAndicgICAgICAgICAjICAweEE1IC0+IExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgJ3cnICAgICAgICAgIyAgMHhBNiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgICd4JyAgICAgICAgICMgIDB4QTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAneScgICAgICAgICAjICAweEE4IC0+IExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgJ3onICAgICAgICAgIyAgMHhBOSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgICdceGExJyAgICAgICMgIDB4QUEgLT4gSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworICAgICdceGJmJyAgICAgICMgIDB4QUIgLT4gSU5WRVJURUQgUVVFU1RJT04gTUFSSworICAgICdceGQwJyAgICAgICMgIDB4QUMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisgICAgJ1x4ZGQnICAgICAgIyAgMHhBRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAnXHhkZScgICAgICAjICAweEFFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisgICAgJ1x4YWUnICAgICAgIyAgMHhBRiAtPiBSRUdJU1RFUkVEIFNJR04KKyAgICAnXHhhMicgICAgICAjICAweEIwIC0+IENFTlQgU0lHTgorICAgICdceGEzJyAgICAgICMgIDB4QjEgLT4gUE9VTkQgU0lHTgorICAgICdceGE1JyAgICAgICMgIDB4QjIgLT4gWUVOIFNJR04KKyAgICAnXHhiNycgICAgICAjICAweEIzIC0+IE1JRERMRSBET1QKKyAgICAnXHhhOScgICAgICAjICAweEI0IC0+IENPUFlSSUdIVCBTSUdOCisgICAgJ0AnICAgICAgICAgIyAgMHhCNSAtPiBDT01NRVJDSUFMIEFUCisgICAgJ1x4YjYnICAgICAgIyAgMHhCNiAtPiBQSUxDUk9XIFNJR04KKyAgICAnXHhiYycgICAgICAjICAweEI3IC0+IFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgICdceGJkJyAgICAgICMgIDB4QjggLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisgICAgJ1x4YmUnICAgICAgIyAgMHhCOSAtPiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKyAgICAnXHhhYycgICAgICAjICAweEJBIC0+IE5PVCBTSUdOCisgICAgJ3wnICAgICAgICAgIyAgMHhCQiAtPiBWRVJUSUNBTCBMSU5FCisgICAgJ1x1MjAzZScgICAgIyAgMHhCQyAtPiBPVkVSTElORQorICAgICdceGE4JyAgICAgICMgIDB4QkQgLT4gRElBRVJFU0lTCisgICAgJ1x4YjQnICAgICAgIyAgMHhCRSAtPiBBQ1VURSBBQ0NFTlQKKyAgICAnXHhkNycgICAgICAjICAweEJGIC0+IE1VTFRJUExJQ0FUSU9OIFNJR04KKyAgICAnXHhlNCcgICAgICAjICAweEMwIC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgJ0EnICAgICAgICAgIyAgMHhDMSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgJ0InICAgICAgICAgIyAgMHhDMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgJ0MnICAgICAgICAgIyAgMHhDMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAgIyAgMHhDNCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgJ0UnICAgICAgICAgIyAgMHhDNSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgJ0YnICAgICAgICAgIyAgMHhDNiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAgIyAgMHhDNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgJ0gnICAgICAgICAgIyAgMHhDOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgJ0knICAgICAgICAgIyAgMHhDOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ1x4YWQnICAgICAgIyAgMHhDQSAtPiBTT0ZUIEhZUEhFTgorICAgICdceGY0JyAgICAgICMgIDB4Q0IgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4YTYnICAgICAgIyAgMHhDQyAtPiBCUk9LRU4gQkFSCisgICAgJ1x4ZjInICAgICAgIyAgMHhDRCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgJ1x4ZjMnICAgICAgIyAgMHhDRSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgJ1x4ZjUnICAgICAgIyAgMHhDRiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgJ1x4ZmMnICAgICAgIyAgMHhEMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgICdKJyAgICAgICAgICMgIDB4RDEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgICdLJyAgICAgICAgICMgIDB4RDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgICdMJyAgICAgICAgICMgIDB4RDMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgICdNJyAgICAgICAgICMgIDB4RDQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgICdOJyAgICAgICAgICMgIDB4RDUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgICdPJyAgICAgICAgICMgIDB4RDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgICdQJyAgICAgICAgICMgIDB4RDcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgICdRJyAgICAgICAgICMgIDB4RDggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgICdSJyAgICAgICAgICMgIDB4RDkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgICdceGI5JyAgICAgICMgIDB4REEgLT4gU1VQRVJTQ1JJUFQgT05FCisgICAgJ1x4ZmInICAgICAgIyAgMHhEQiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAnfScgICAgICAgICAjICAweERDIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAnXHhmOScgICAgICAjICAweEREIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAnXHhmYScgICAgICAjICAweERFIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAnXHhmZicgICAgICAjICAweERGIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZDYnICAgICAgIyAgMHhFMCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZjcnICAgICAgIyAgMHhFMSAtPiBESVZJU0lPTiBTSUdOCisgICAgJ1MnICAgICAgICAgIyAgMHhFMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgJ1QnICAgICAgICAgIyAgMHhFMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgJ1UnICAgICAgICAgIyAgMHhFNCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAgIyAgMHhFNSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgJ1cnICAgICAgICAgIyAgMHhFNiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgJ1gnICAgICAgICAgIyAgMHhFNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAgIyAgMHhFOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgJ1onICAgICAgICAgIyAgMHhFOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgJ1x4YjInICAgICAgIyAgMHhFQSAtPiBTVVBFUlNDUklQVCBUV08KKyAgICAnXHhkNCcgICAgICAjICAweEVCIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgJ1xcJyAgICAgICAgIyAgMHhFQyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICAnXHhkMicgICAgICAjICAweEVEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgICdceGQzJyAgICAgICMgIDB4RUUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgJ1x4ZDUnICAgICAgIyAgMHhFRiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAnMCcgICAgICAgICAjICAweEYwIC0+IERJR0lUIFpFUk8KKyAgICAnMScgICAgICAgICAjICAweEYxIC0+IERJR0lUIE9ORQorICAgICcyJyAgICAgICAgICMgIDB4RjIgLT4gRElHSVQgVFdPCisgICAgJzMnICAgICAgICAgIyAgMHhGMyAtPiBESUdJVCBUSFJFRQorICAgICc0JyAgICAgICAgICMgIDB4RjQgLT4gRElHSVQgRk9VUgorICAgICc1JyAgICAgICAgICMgIDB4RjUgLT4gRElHSVQgRklWRQorICAgICc2JyAgICAgICAgICMgIDB4RjYgLT4gRElHSVQgU0lYCisgICAgJzcnICAgICAgICAgIyAgMHhGNyAtPiBESUdJVCBTRVZFTgorICAgICc4JyAgICAgICAgICMgIDB4RjggLT4gRElHSVQgRUlHSFQKKyAgICAnOScgICAgICAgICAjICAweEY5IC0+IERJR0lUIE5JTkUKKyAgICAnXHhiMycgICAgICAjICAweEZBIC0+IFNVUEVSU0NSSVBUIFRIUkVFCisgICAgJ1x4ZGInICAgICAgIyAgMHhGQiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgICddJyAgICAgICAgICMgIDB4RkMgLT4gUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXHhkOScgICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgICdceGRhJyAgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgJ1x4OWYnICAgICAgIyAgMHhGRiAtPiBBUFBMSUNBVElPTiBQUk9HUkFNIENPTU1BTkQgKEFQQykKKykKKworIyMjIEVuY29kaW5nIHRhYmxlCitlbmNvZGluZ190YWJsZT1jb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkgYi9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CmluZGV4IGE5NzViZTcuLjVmNjE1MzUgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKKysrIGIvTGliL2VuY29kaW5ncy9jcDUwMC5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZDknICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQogICAgICdceGRhJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKICAgICAnXHg5ZicgICAgICMgIDB4RkYgLT4gQ09OVFJPTAotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9oZXhfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2hleF9jb2RlYy5weQppbmRleCBlMDAzZmMzLi5mMmVkMGE3IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2hleF9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2hleF9jb2RlYy5weQpAQCAtNTIsNCArNTIsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weSBiL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CmluZGV4IGQ5Y2M1MTYuLjhjZmMwMWYgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvaXNvODg1OV8xLnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhmZCcgICAgICMgIDB4RkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQogICAgICdceGZlJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKICAgICAnXHhmZicgICAgICMgIDB4RkYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKLSAgICAnXHVmZmZlJyAgICMjIFdpZGVuIHRvIFVDUzIgZm9yIG9wdGltaXphdGlvbgogKQogCiAjIyMgRW5jb2RpbmcgdGFibGUKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkKaW5kZXggOTI0M2ZjNC4uNzBmNzA4MyAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy9xdW9wcmlfY29kZWMucHkKQEAgLTUzLDQgKzUzLDUgQEAKICAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKICAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKICAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICAgICAgX2lzX3RleHRfZW5jb2Rpbmc9RmFsc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9yb3RfMTMucHkgYi9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQppbmRleCAzMTQwYzE0Li5mZmY5MTUzIDEwMDc1NQotLS0gYS9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQpAQCAtNDMsNiArNDMsNyBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCiAKICMjIyBNYXAKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CmluZGV4IDY5YzZmMTcuLmUzMjY5ZTQgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKKysrIGIvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQpAQCAtOTYsNCArOTYsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkKaW5kZXggZTBiOWNkYS4uNGM4MWNhMSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvemxpYl9jb2RlYy5weQpAQCAtNzQsNCArNzQsNSBAQAogICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAogICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAogICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICAgICBfaXNfdGV4dF9lbmNvZGluZz1GYWxzZSwKICAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5IGIvTGliL2Vuc3VyZXBpcC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzAxM2FlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Vuc3VyZXBpcC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDExNCBAQAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHBrZ3V0aWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorCisjIFRPRE86IFJlbW92ZSB0aGUgLS1wcmUgZmxhZyB3aGVuIGEgcGlwIDEuNSBmaW5hbCBjb3B5IGlzIGF2YWlsYWJsZQorCisKK19fYWxsX18gPSBbInZlcnNpb24iLCAiYm9vdHN0cmFwIl0KKworCitfU0VUVVBUT09MU19WRVJTSU9OID0gIjEuMy4yIgorCitfUElQX1ZFUlNJT04gPSAiMS41cmMxIgorCitfUFJPSkVDVFMgPSBbCisgICAgKCJzZXR1cHRvb2xzIiwgX1NFVFVQVE9PTFNfVkVSU0lPTiksCisgICAgKCJwaXAiLCBfUElQX1ZFUlNJT04pLAorXQorCisKK2RlZiBfcnVuX3BpcChhcmdzLCBhZGRpdGlvbmFsX3BhdGhzPU5vbmUpOgorICAgICMgQWRkIG91ciBidW5kbGVkIHNvZnR3YXJlIHRvIHRoZSBzeXMucGF0aCBzbyB3ZSBjYW4gaW1wb3J0IGl0CisgICAgaWYgYWRkaXRpb25hbF9wYXRocyBpcyBub3QgTm9uZToKKyAgICAgICAgc3lzLnBhdGggPSBhZGRpdGlvbmFsX3BhdGhzICsgc3lzLnBhdGgKKworICAgICMgSW5zdGFsbCB0aGUgYnVuZGxlZCBzb2Z0d2FyZQorICAgIGltcG9ydCBwaXAKKyAgICBwaXAubWFpbihhcmdzKQorCisKK2RlZiB2ZXJzaW9uKCk6CisgICAgIiIiCisgICAgUmV0dXJucyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgcGlwLgorICAgICIiIgorICAgIHJldHVybiBfUElQX1ZFUlNJT04KKworCitkZWYgYm9vdHN0cmFwKCosIHJvb3Q9Tm9uZSwgdXBncmFkZT1GYWxzZSwgdXNlcj1GYWxzZSwKKyAgICAgICAgICAgICAgYWx0aW5zdGFsbD1GYWxzZSwgZGVmYXVsdF9waXA9RmFsc2UsCisgICAgICAgICAgICAgIHZlcmJvc2l0eT0wKToKKyAgICAiIiIKKyAgICBCb290c3RyYXAgcGlwIGludG8gdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbiAob3IgdGhlIGdpdmVuIHJvb3QKKyAgICBkaXJlY3RvcnkpLgorICAgICIiIgorICAgIGlmIGFsdGluc3RhbGwgYW5kIGRlZmF1bHRfcGlwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgdXNlIGFsdGluc3RhbGwgYW5kIGRlZmF1bHRfcGlwIHRvZ2V0aGVyIikKKworICAgICMgQnkgZGVmYXVsdCwgaW5zdGFsbGluZyBwaXAgYW5kIHNldHVwdG9vbHMgaW5zdGFsbHMgYWxsIG9mIHRoZQorICAgICMgZm9sbG93aW5nIHNjcmlwdHMgKFguWSA9PSBydW5uaW5nIFB5dGhvbiB2ZXJzaW9uKToKKyAgICAjCisgICAgIyAgIHBpcCwgcGlwWCwgcGlwWC5ZLCBlYXN5X2luc3RhbGwsIGVhc3lfaW5zdGFsbC1YLlkKKyAgICAjCisgICAgIyBwaXAgMS41KyBhbGxvd3MgZW5zdXJlcGlwIHRvIHJlcXVlc3QgdGhhdCBzb21lIG9mIHRob3NlIGJlIGxlZnQgb3V0CisgICAgaWYgYWx0aW5zdGFsbDoKKyAgICAgICAgIyBvbWl0IHBpcCwgcGlwWCBhbmQgZWFzeV9pbnN0YWxsCisgICAgICAgIG9zLmVudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0gPSAiYWx0aW5zdGFsbCIKKyAgICBlbGlmIG5vdCBkZWZhdWx0X3BpcDoKKyAgICAgICAgIyBvbWl0IHBpcCBhbmQgZWFzeV9pbnN0YWxsCisgICAgICAgIG9zLmVudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0gPSAiaW5zdGFsbCIKKworICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgorICAgICAgICAjIFB1dCBvdXIgYnVuZGxlZCB3aGVlbHMgaW50byBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5kIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgIyBhZGRpdGlvbmFsIHBhdGhzIHRoYXQgbmVlZCBhZGRlZCB0byBzeXMucGF0aAorICAgICAgICBhZGRpdGlvbmFsX3BhdGhzID0gW10KKyAgICAgICAgZm9yIHByb2plY3QsIHZlcnNpb24gaW4gX1BST0pFQ1RTOgorICAgICAgICAgICAgd2hlZWxfbmFtZSA9ICJ7fS17fS1weTIucHkzLW5vbmUtYW55LndobCIuZm9ybWF0KHByb2plY3QsIHZlcnNpb24pCisgICAgICAgICAgICB3aGwgPSBwa2d1dGlsLmdldF9kYXRhKAorICAgICAgICAgICAgICAgICJlbnN1cmVwaXAiLAorICAgICAgICAgICAgICAgICJfYnVuZGxlZC97fSIuZm9ybWF0KHdoZWVsX25hbWUpLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0bXBkaXIsIHdoZWVsX25hbWUpLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSh3aGwpCisKKyAgICAgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMuYXBwZW5kKG9zLnBhdGguam9pbih0bXBkaXIsIHdoZWVsX25hbWUpKQorCisgICAgICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgICAgICBhcmdzID0gWworICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLCB0bXBkaXIsCisgICAgICAgICAgICAjIFRlbXBvcmFyeSB1bnRpbCBwaXAgMS41IGlzIGZpbmFsCisgICAgICAgICAgICAiLS1wcmUiLAorICAgICAgICBdCisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhcmdzICs9IFsiLS1yb290Iiwgcm9vdF0KKyAgICAgICAgaWYgdXBncmFkZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXVwZ3JhZGUiXQorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlciJdCisgICAgICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItIiArICJ2IiAqIHZlcmJvc2l0eV0KKworICAgICAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gX1BST0pFQ1RTXSwgYWRkaXRpb25hbF9wYXRocykKKworZGVmIF91bmluc3RhbGwoKiwgdmVyYm9zaXR5PTApOgorICAgICIiIkhlbHBlciB0byBzdXBwb3J0IGEgY2xlYW4gZGVmYXVsdCB1bmluc3RhbGwgcHJvY2VzcyBvbiBXaW5kb3dzIiIiCisgICAgIyBOb3RoaW5nIHRvIGRvIGlmIHBpcCB3YXMgbmV2ZXIgaW5zdGFsbGVkLCBvciBoYXMgYmVlbiByZW1vdmVkCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgcGlwCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICByZXR1cm4KKworICAgICMgSWYgdGhlIHBpcCB2ZXJzaW9uIGRvZXNuJ3QgbWF0Y2ggdGhlIGJ1bmRsZWQgb25lLCBsZWF2ZSBpdCBhbG9uZQorICAgIGlmIHBpcC5fX3ZlcnNpb25fXyAhPSBfUElQX1ZFUlNJT046CisgICAgICAgIG1zZyA9ICgiZW5zdXJlcGlwIHdpbGwgb25seSB1bmluc3RhbGwgYSBtYXRjaGluZyBwaXAgIgorICAgICAgICAgICAgICAgIih7IXJ9IGluc3RhbGxlZCwgeyFyfSBidW5kbGVkKSIpCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtc2cuZm9ybWF0KHBpcC5fX3ZlcnNpb25fXywgX1BJUF9WRVJTSU9OKSkKKworICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgIGFyZ3MgPSBbInVuaW5zdGFsbCIsICIteSJdCisgICAgaWYgdmVyYm9zaXR5OgorICAgICAgICBhcmdzICs9IFsiLSIgKyAidiIgKiB2ZXJib3NpdHldCisKKyAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gcmV2ZXJzZWQoX1BST0pFQ1RTKV0pCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5IGIvTGliL2Vuc3VyZXBpcC9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2U4NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2Vuc3VyZXBpcC9fX21haW5fXy5weQpAQCAtMCwwICsxLDY2IEBACitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlbnN1cmVwaXAKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9InB5dGhvbiAtbSBlbnN1cmVwaXAiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXZlcnNpb24iLAorICAgICAgICBhY3Rpb249InZlcnNpb24iLAorICAgICAgICB2ZXJzaW9uPSJwaXAge30iLmZvcm1hdChlbnN1cmVwaXAudmVyc2lvbigpKSwKKyAgICAgICAgaGVscD0iU2hvdyB0aGUgdmVyc2lvbiBvZiBwaXAgdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBQeXRob24uIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi12IiwgIi0tdmVyYm9zZSIsCisgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICBkZWZhdWx0PTAsCisgICAgICAgIGRlc3Q9InZlcmJvc2l0eSIsCisgICAgICAgIGhlbHA9KCJHaXZlIG1vcmUgb3V0cHV0LiBPcHRpb24gaXMgYWRkaXRpdmUsIGFuZCBjYW4gYmUgdXNlZCB1cCB0byAzICIKKyAgICAgICAgICAgICAgInRpbWVzLiIpLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLVUiLCAiLS11cGdyYWRlIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0iVXBncmFkZSBwaXAgYW5kIGRlcGVuZGVuY2llcywgZXZlbiBpZiBhbHJlYWR5IGluc3RhbGxlZC4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS11c2VyIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0iSW5zdGFsbCB1c2luZyB0aGUgdXNlciBzY2hlbWUuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tcm9vdCIsCisgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgaGVscD0iSW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5LiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLWFsdGluc3RhbGwiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgiTWFrZSBhbiBhbHRlcm5hdGUgaW5zdGFsbCwgaW5zdGFsbGluZyBvbmx5IHRoZSBYLlkgdmVyc2lvbmVkIgorICAgICAgICAgICAgICAic2NyaXB0cyAoRGVmYXVsdDogcGlwWCwgcGlwWC5ZLCBlYXN5X2luc3RhbGwtWC5ZKSIpLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1kZWZhdWx0LXBpcCIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9KCJNYWtlIGEgZGVmYXVsdCBwaXAgaW5zdGFsbCwgaW5zdGFsbGluZyB0aGUgdW5xdWFsaWZpZWQgcGlwICIKKyAgICAgICAgICAgICAgImFuZCBlYXN5X2luc3RhbGwgaW4gYWRkaXRpb24gdG8gdGhlIHZlcnNpb25lZCBzY3JpcHRzIiksCisgICAgKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIGVuc3VyZXBpcC5ib290c3RyYXAoCisgICAgICAgIHJvb3Q9YXJncy5yb290LAorICAgICAgICB1cGdyYWRlPWFyZ3MudXBncmFkZSwKKyAgICAgICAgdXNlcj1hcmdzLnVzZXIsCisgICAgICAgIHZlcmJvc2l0eT1hcmdzLnZlcmJvc2l0eSwKKyAgICAgICAgYWx0aW5zdGFsbD1hcmdzLmFsdGluc3RhbGwsCisgICAgICAgIGRlZmF1bHRfcGlwPWFyZ3MuZGVmYXVsdF9waXAsCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC0xLjVyYzEtcHkyLnB5My1ub25lLWFueS53aGwgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC0xLjVyYzEtcHkyLnB5My1ub25lLWFueS53aGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQxODg5NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTEuNXJjMS1weTIucHkzLW5vbmUtYW55LndobApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMS4zLjItcHkyLnB5My1ub25lLWFueS53aGwgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMS4zLjItcHkyLnB5My1ub25lLWFueS53aGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5NjJiMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvc2V0dXB0b29scy0xLjMuMi1weTIucHkzLW5vbmUtYW55LndobApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL191bmluc3RhbGwucHkgYi9MaWIvZW5zdXJlcGlwL191bmluc3RhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjNDg2YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weQpAQCAtMCwwICsxLDMwIEBACisiIiJCYXNpYyBwaXAgdW5pbnN0YWxsYXRpb24gc3VwcG9ydCwgaGVscGVyIGZvciB0aGUgV2luZG93cyB1bmluc3RhbGxlciIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlbnN1cmVwaXAKKworCitkZWYgbWFpbigpOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9InB5dGhvbiAtbSBlbnN1cmVwaXAuX3VuaW5zdGFsbCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0idmVyc2lvbiIsCisgICAgICAgIHZlcnNpb249InBpcCB7fSIuZm9ybWF0KGVuc3VyZXBpcC52ZXJzaW9uKCkpLAorICAgICAgICBoZWxwPSJTaG93IHRoZSB2ZXJzaW9uIG9mIHBpcCB0aGlzIHdpbGwgYXR0ZW1wdCB0byB1bmluc3RhbGwuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi12IiwgIi0tdmVyYm9zZSIsCisgICAgICAgIGFjdGlvbj0iY291bnQiLAorICAgICAgICBkZWZhdWx0PTAsCisgICAgICAgIGRlc3Q9InZlcmJvc2l0eSIsCisgICAgICAgIGhlbHA9KCJHaXZlIG1vcmUgb3V0cHV0LiBPcHRpb24gaXMgYWRkaXRpdmUsIGFuZCBjYW4gYmUgdXNlZCB1cCB0byAzICIKKyAgICAgICAgICAgICAgInRpbWVzLiIpLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbCh2ZXJib3NpdHk9YXJncy52ZXJib3NpdHkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9lbnVtLnB5IGIvTGliL2VudW0ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1OGY4ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnVtLnB5CkBAIC0wLDAgKzEsNTA0IEBACitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZSwgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK19fYWxsX18gPSBbJ0VudW0nLCAnSW50RW51bScsICd1bmlxdWUnXQorCisKK2RlZiBfaXNfZGVzY3JpcHRvcihvYmopOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBvYmogaXMgYSBkZXNjcmlwdG9yLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuICgKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19nZXRfXycpIG9yCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fc2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX2RlbGV0ZV9fJykpCisKKworZGVmIF9pc19kdW5kZXIobmFtZSk6CisgICAgIiIiUmV0dXJucyBUcnVlIGlmIGEgX19kdW5kZXJfXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzoyXSA9PSBuYW1lWy0yOl0gPT0gJ19fJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMjozXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0zOi0yXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiA0KQorCisKK2RlZiBfaXNfc3VuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9zdW5kZXJfIG5hbWUsIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICByZXR1cm4gKG5hbWVbMF0gPT0gbmFtZVstMV0gPT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVsxOjJdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbLTI6LTFdICE9ICdfJyBhbmQKKyAgICAgICAgICAgIGxlbihuYW1lKSA+IDIpCisKKworZGVmIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGNscyk6CisgICAgIiIiTWFrZSB0aGUgZ2l2ZW4gY2xhc3MgdW4tcGlja2xhYmxlLiIiIgorICAgIGRlZiBfYnJlYWtfb25fY2FsbF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXIgY2Fubm90IGJlIHBpY2tsZWQnICUgc2VsZikKKyAgICBjbHMuX19yZWR1Y2VfXyA9IF9icmVha19vbl9jYWxsX3JlZHVjZQorICAgIGNscy5fX21vZHVsZV9fID0gJzx1bmtub3duPicKKworCitjbGFzcyBfRW51bURpY3QoZGljdCk6CisgICAgIiIiVHJhY2sgZW51bSBtZW1iZXIgb3JkZXIgYW5kIGVuc3VyZSBtZW1iZXIgbmFtZXMgYXJlIG5vdCByZXVzZWQuCisKKyAgICBFbnVtTWV0YSB3aWxsIHVzZSB0aGUgbmFtZXMgZm91bmQgaW4gc2VsZi5fbWVtYmVyX25hbWVzIGFzIHRoZQorICAgIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lcyA9IFtdCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIkNoYW5nZXMgYW55dGhpbmcgbm90IGR1bmRlcmVkIG9yIG5vdCBhIGRlc2NyaXB0b3IuCisKKyAgICAgICAgSWYgYW4gZW51bSBtZW1iZXIgbmFtZSBpcyB1c2VkIHR3aWNlLCBhbiBlcnJvciBpcyByYWlzZWQ7IGR1cGxpY2F0ZQorICAgICAgICB2YWx1ZXMgYXJlIG5vdCBjaGVja2VkIGZvci4KKworICAgICAgICBTaW5nbGUgdW5kZXJzY29yZSAoc3VuZGVyKSBuYW1lcyBhcmUgcmVzZXJ2ZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIF9pc19zdW5kZXIoa2V5KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ19uYW1lc18gYXJlIHJlc2VydmVkIGZvciBmdXR1cmUgRW51bSB1c2UnKQorICAgICAgICBlbGlmIF9pc19kdW5kZXIoa2V5KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxpZiBrZXkgaW4gc2VsZi5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgIyBkZXNjcmlwdG9yIG92ZXJ3cml0aW5nIGFuIGVudW0/CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0F0dGVtcHRlZCB0byByZXVzZSBrZXk6ICVyJyAlIGtleSkKKyAgICAgICAgZWxpZiBub3QgX2lzX2Rlc2NyaXB0b3IodmFsdWUpOgorICAgICAgICAgICAgaWYga2V5IGluIHNlbGY6CisgICAgICAgICAgICAgICAgIyBlbnVtIG92ZXJ3cml0aW5nIGEgZGVzY3JpcHRvcj8KKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0tleSBhbHJlYWR5IGRlZmluZWQgYXM6ICVyJyAlIHNlbGZba2V5XSkKKyAgICAgICAgICAgIHNlbGYuX21lbWJlcl9uYW1lcy5hcHBlbmQoa2V5KQorICAgICAgICBzdXBlcigpLl9fc2V0aXRlbV9fKGtleSwgdmFsdWUpCisKKworCisjIER1bW15IHZhbHVlIGZvciBFbnVtIGFzIEVudW1NZXRhIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBpdCwgYnV0IG9mIGNvdXJzZQorIyB1bnRpbCBFbnVtTWV0YSBmaW5pc2hlcyBydW5uaW5nIHRoZSBmaXJzdCB0aW1lIHRoZSBFbnVtIGNsYXNzIGRvZXNuJ3QgZXhpc3QuCisjIFRoaXMgaXMgYWxzbyB3aHkgdGhlcmUgYXJlIGNoZWNrcyBpbiBFbnVtTWV0YSBsaWtlIGBpZiBFbnVtIGlzIG5vdCBOb25lYAorRW51bSA9IE5vbmUKKworCitjbGFzcyBFbnVtTWV0YSh0eXBlKToKKyAgICAiIiJNZXRhY2xhc3MgZm9yIEVudW0iIiIKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgY2xzLCBiYXNlcyk6CisgICAgICAgIHJldHVybiBfRW51bURpY3QoKQorCisgICAgZGVmIF9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgIyBhbiBFbnVtIGNsYXNzIGlzIGZpbmFsIG9uY2UgZW51bWVyYXRpb24gaXRlbXMgaGF2ZSBiZWVuIGRlZmluZWQ7IGl0CisgICAgICAgICMgY2Fubm90IGJlIG1peGVkIHdpdGggb3RoZXIgdHlwZXMgKGludCwgZmxvYXQsIGV0Yy4pIGlmIGl0IGhhcyBhbgorICAgICAgICAjIGluaGVyaXRlZCBfX25ld19fIHVubGVzcyBhIG5ldyBfX25ld19fIGlzIGRlZmluZWQgKG9yIHRoZSByZXN1bHRpbmcKKyAgICAgICAgIyBjbGFzcyB3aWxsIGZhaWwpLgorICAgICAgICBtZW1iZXJfdHlwZSwgZmlyc3RfZW51bSA9IG1ldGFjbHMuX2dldF9taXhpbnNfKGJhc2VzKQorICAgICAgICBfX25ld19fLCBzYXZlX25ldywgdXNlX2FyZ3MgPSBtZXRhY2xzLl9maW5kX25ld18oY2xhc3NkaWN0LCBtZW1iZXJfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZW51bSkKKworICAgICAgICAjIHNhdmUgZW51bSBpdGVtcyBpbnRvIHNlcGFyYXRlIG1hcHBpbmcgc28gdGhleSBkb24ndCBnZXQgYmFrZWQgaW50bworICAgICAgICAjIHRoZSBuZXcgY2xhc3MKKyAgICAgICAgbWVtYmVycyA9IHtrOiBjbGFzc2RpY3Rba10gZm9yIGsgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXN9CisgICAgICAgIGZvciBuYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgZGVsIGNsYXNzZGljdFtuYW1lXQorCisgICAgICAgICMgY2hlY2sgZm9yIGlsbGVnYWwgZW51bSBuYW1lcyAoYW55IG90aGVycz8pCisgICAgICAgIGludmFsaWRfbmFtZXMgPSBzZXQobWVtYmVycykgJiB7J21ybycsIH0KKyAgICAgICAgaWYgaW52YWxpZF9uYW1lczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgZW51bSBtZW1iZXIgbmFtZTogezB9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgJywnLmpvaW4oaW52YWxpZF9uYW1lcykpKQorCisgICAgICAgICMgY3JlYXRlIG91ciBuZXcgRW51bSB0eXBlCisgICAgICAgIGVudW1fY2xhc3MgPSBzdXBlcigpLl9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KQorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbmFtZXNfID0gW10gICAgICAgICAgICAgICAjIG5hbWVzIGluIGRlZmluaXRpb24gb3JkZXIKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF8gPSBPcmRlcmVkRGljdCgpICAgICAgIyBuYW1lLT52YWx1ZSBtYXAKKyAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX3R5cGVfID0gbWVtYmVyX3R5cGUKKworICAgICAgICAjIFJldmVyc2UgdmFsdWUtPm5hbWUgbWFwIGZvciBoYXNoYWJsZSB2YWx1ZXMuCisgICAgICAgIGVudW1fY2xhc3MuX3ZhbHVlMm1lbWJlcl9tYXBfID0ge30KKworICAgICAgICAjIGNoZWNrIGZvciBhIF9fZ2V0bmV3YXJnc19fLCBhbmQgaWYgbm90IHByZXNlbnQgc2Fib3RhZ2UKKyAgICAgICAgIyBwaWNrbGluZywgc2luY2UgaXQgd29uJ3Qgd29yayBhbnl3YXkKKyAgICAgICAgaWYgKG1lbWJlcl90eXBlIGlzIG5vdCBvYmplY3QgYW5kCisgICAgICAgICAgICBtZW1iZXJfdHlwZS5fX2RpY3RfXy5nZXQoJ19fZ2V0bmV3YXJnc19fJykgaXMgTm9uZQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGVudW1fY2xhc3MpCisKKyAgICAgICAgIyBpbnN0YW50aWF0ZSB0aGVtLCBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBhcyB3ZSBnbworICAgICAgICAjIHdlIGluc3RhbnRpYXRlIGZpcnN0IGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGR1cGxpY2F0ZXMgZmlyc3QgaW4gY2FzZQorICAgICAgICAjIGEgY3VzdG9tIF9fbmV3X18gaXMgZG9pbmcgc29tZXRoaW5nIGZ1bmt5IHdpdGggdGhlIHZhbHVlcyAtLSBzdWNoIGFzCisgICAgICAgICMgYXV0by1udW1iZXJpbmcgOykKKyAgICAgICAgZm9yIG1lbWJlcl9uYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgdmFsdWUgPSBtZW1iZXJzW21lbWJlcl9uYW1lXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBhcmdzID0gKHZhbHVlLCApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB2YWx1ZQorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgdHVwbGU6ICAgIyBzcGVjaWFsIGNhc2UgZm9yIHR1cGxlIGVudW1zCisgICAgICAgICAgICAgICAgYXJncyA9IChhcmdzLCApICAgICAjIHdyYXAgaXQgb25lIG1vcmUgdGltZQorICAgICAgICAgICAgaWYgbm90IHVzZV9hcmdzOgorICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyID0gX19uZXdfXyhlbnVtX2NsYXNzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MsICphcmdzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gbWVtYmVyX3R5cGUoKmFyZ3MpCisgICAgICAgICAgICB2YWx1ZSA9IGVudW1fbWVtYmVyLl92YWx1ZV8KKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9uYW1lXyA9IG1lbWJlcl9uYW1lCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX29iamNsYXNzX18gPSBlbnVtX2NsYXNzCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX2luaXRfXygqYXJncykKKyAgICAgICAgICAgICMgSWYgYW5vdGhlciBtZW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSB3YXMgYWxyZWFkeSBkZWZpbmVkLCB0aGUKKyAgICAgICAgICAgICMgbmV3IG1lbWJlciBiZWNvbWVzIGFuIGFsaWFzIHRvIHRoZSBleGlzdGluZyBvbmUuCisgICAgICAgICAgICBmb3IgbmFtZSwgY2Fub25pY2FsX21lbWJlciBpbiBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNhbm9uaWNhbF9tZW1iZXIudmFsdWUgPT0gZW51bV9tZW1iZXIuX3ZhbHVlXzoKKyAgICAgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBjYW5vbmljYWxfbWVtYmVyCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQWxpYXNlcyBkb24ndCBhcHBlYXIgaW4gbWVtYmVyIG5hbWVzIChvbmx5IGluIF9fbWVtYmVyc19fKS4KKyAgICAgICAgICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbmFtZXNfLmFwcGVuZChtZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9tYXBfW21lbWJlcl9uYW1lXSA9IGVudW1fbWVtYmVyCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBUaGlzIG1heSBmYWlsIGlmIHZhbHVlIGlzIG5vdCBoYXNoYWJsZS4gV2UgY2FuJ3QgYWRkIHRoZSB2YWx1ZQorICAgICAgICAgICAgICAgICMgdG8gdGhlIG1hcCwgYW5kIGJ5LXZhbHVlIGxvb2t1cHMgZm9yIHRoaXMgdmFsdWUgd2lsbCBiZQorICAgICAgICAgICAgICAgICMgbGluZWFyLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXSA9IGVudW1fbWVtYmVyCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIGRvdWJsZSBjaGVjayB0aGF0IHJlcHIgYW5kIGZyaWVuZHMgYXJlIG5vdCB0aGUgbWl4aW4ncyBvciB2YXJpb3VzCisgICAgICAgICMgdGhpbmdzIGJyZWFrIChzdWNoIGFzIHBpY2tsZSkKKyAgICAgICAgZm9yIG5hbWUgaW4gKCdfX3JlcHJfXycsICdfX3N0cl9fJywgJ19fZm9ybWF0X18nLCAnX19nZXRuZXdhcmdzX18nKToKKyAgICAgICAgICAgIGNsYXNzX21ldGhvZCA9IGdldGF0dHIoZW51bV9jbGFzcywgbmFtZSkKKyAgICAgICAgICAgIG9ial9tZXRob2QgPSBnZXRhdHRyKG1lbWJlcl90eXBlLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgZW51bV9tZXRob2QgPSBnZXRhdHRyKGZpcnN0X2VudW0sIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBvYmpfbWV0aG9kIGlzIG5vdCBOb25lIGFuZCBvYmpfbWV0aG9kIGlzIGNsYXNzX21ldGhvZDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUsIGVudW1fbWV0aG9kKQorCisgICAgICAgICMgcmVwbGFjZSBhbnkgb3RoZXIgX19uZXdfXyB3aXRoIG91ciBvd24gKGFzIGxvbmcgYXMgRW51bSBpcyBub3QgTm9uZSwKKyAgICAgICAgIyBhbnl3YXkpIC0tIGFnYWluLCB0aGlzIGlzIHRvIHN1cHBvcnQgcGlja2xlCisgICAgICAgIGlmIEVudW0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGlmIHRoZSB1c2VyIGRlZmluZWQgdGhlaXIgb3duIF9fbmV3X18sIHNhdmUgaXQgYmVmb3JlIGl0IGdldHMKKyAgICAgICAgICAgICMgY2xvYmJlcmVkIGluIGNhc2UgdGhleSBzdWJjbGFzcyBsYXRlcgorICAgICAgICAgICAgaWYgc2F2ZV9uZXc6CisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fX25ld19tZW1iZXJfXyA9IF9fbmV3X18KKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfXyA9IEVudW0uX19uZXdfXworICAgICAgICByZXR1cm4gZW51bV9jbGFzcworCisgICAgZGVmIF9fY2FsbF9fKGNscywgdmFsdWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJFaXRoZXIgcmV0dXJucyBhbiBleGlzdGluZyBtZW1iZXIsIG9yIGNyZWF0ZXMgYSBuZXcgZW51bSBjbGFzcy4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJvdGggd2hlbiBhbiBlbnVtIGNsYXNzIGlzIGdpdmVuIGEgdmFsdWUgdG8gbWF0Y2gKKyAgICAgICAgdG8gYW4gZW51bWVyYXRpb24gbWVtYmVyIChpLmUuIENvbG9yKDMpKSBhbmQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSQorICAgICAgICAoaS5lLiBDb2xvciA9IEVudW0oJ0NvbG9yJywgbmFtZXM9J3JlZCBncmVlbiBibHVlJykpLgorCisgICAgICAgIFdoZW4gdXNlZCBmb3IgdGhlIGZ1bmN0aW9uYWwgQVBJOiBgbW9kdWxlYCwgaWYgc2V0LCB3aWxsIGJlIHN0b3JlZCBpbgorICAgICAgICB0aGUgbmV3IGNsYXNzJyBfX21vZHVsZV9fIGF0dHJpYnV0ZTsgYHR5cGVgLCBpZiBzZXQsIHdpbGwgYmUgbWl4ZWQgaW4KKyAgICAgICAgYXMgdGhlIGZpcnN0IGJhc2UgY2xhc3MuCisKKyAgICAgICAgTm90ZTogaWYgYG1vZHVsZWAgaXMgbm90IHNldCB0aGlzIHJvdXRpbmUgd2lsbCBhdHRlbXB0IHRvIGRpc2NvdmVyIHRoZQorICAgICAgICBjYWxsaW5nIG1vZHVsZSBieSB3YWxraW5nIHRoZSBmcmFtZSBzdGFjazsgaWYgdGhpcyBpcyB1bnN1Y2Nlc3NmdWwKKyAgICAgICAgdGhlIHJlc3VsdGluZyBjbGFzcyB3aWxsIG5vdCBiZSBwaWNrbGVhYmxlLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lcyBpcyBOb25lOiAgIyBzaW1wbGUgdmFsdWUgbG9va3VwCisgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgIyBvdGhlcndpc2UsIGZ1bmN0aW9uYWwgQVBJOiB3ZSdyZSBjcmVhdGluZyBhIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgcmV0dXJuIGNscy5fY3JlYXRlXyh2YWx1ZSwgbmFtZXMsIG1vZHVsZT1tb2R1bGUsIHR5cGU9dHlwZSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oY2xzLCBtZW1iZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShtZW1iZXIsIGNscykgYW5kIG1lbWJlci5uYW1lIGluIGNscy5fbWVtYmVyX21hcF8KKworICAgIGRlZiBfX2RlbGF0dHJfXyhjbHMsIGF0dHIpOgorICAgICAgICAjIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBzb21lb25lIHRyaWVzIHRvIGRlbGV0ZSBhbiBhdHRyaWJ1dGUKKyAgICAgICAgIyAoc2VlIGlzc3VlMTkwMjUpLgorICAgICAgICBpZiBhdHRyIGluIGNscy5fbWVtYmVyX21hcF86CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIiVzOiBjYW5ub3QgZGVsZXRlIEVudW0gbWVtYmVyLiIgJSBjbHMuX19uYW1lX18pCisgICAgICAgIHN1cGVyKCkuX19kZWxhdHRyX18oYXR0cikKKworICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddICsKKyAgICAgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW51bSBtZW1iZXIgbWF0Y2hpbmcgYG5hbWVgCisKKyAgICAgICAgV2UgdXNlIF9fZ2V0YXR0cl9fIGluc3RlYWQgb2YgZGVzY3JpcHRvcnMgb3IgaW5zZXJ0aW5nIGludG8gdGhlIGVudW0KKyAgICAgICAgY2xhc3MnIF9fZGljdF9fIGluIG9yZGVyIHRvIHN1cHBvcnQgYG5hbWVgIGFuZCBgdmFsdWVgIGJlaW5nIGJvdGgKKyAgICAgICAgcHJvcGVydGllcyBmb3IgZW51bSBtZW1iZXJzICh3aGljaCBsaXZlIGluIHRoZSBjbGFzcycgX19kaWN0X18pIGFuZAorICAgICAgICBlbnVtIG1lbWJlcnMgdGhlbXNlbHZlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX2R1bmRlcihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpIGZyb20gTm9uZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywgbmFtZSk6CisgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisKKyAgICBkZWYgX19pdGVyX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIGNscy5fbWVtYmVyX25hbWVzXykKKworICAgIGRlZiBfX2xlbl9fKGNscyk6CisgICAgICAgIHJldHVybiBsZW4oY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fbWVtYmVyc19fKGNscyk6CisgICAgICAgICIiIlJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKworICAgICAgICBUaGlzIG1hcHBpbmcgbGlzdHMgYWxsIGVudW0gbWVtYmVycywgaW5jbHVkaW5nIGFsaWFzZXMuIE5vdGUgdGhhdCB0aGlzCisgICAgICAgIGlzIGEgcmVhZC1vbmx5IHZpZXcgb2YgdGhlIGludGVybmFsIG1hcHBpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBNYXBwaW5nUHJveHlUeXBlKGNscy5fbWVtYmVyX21hcF8pCisKKyAgICBkZWYgX19yZXByX18oY2xzKToKKyAgICAgICAgcmV0dXJuICI8ZW51bSAlcj4iICUgY2xzLl9fbmFtZV9fCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKGNscyk6CisgICAgICAgIHJldHVybiAoY2xzLl9tZW1iZXJfbWFwX1tuYW1lXSBmb3IgbmFtZSBpbiByZXZlcnNlZChjbHMuX21lbWJlcl9uYW1lc18pKQorCisgICAgZGVmIF9fc2V0YXR0cl9fKGNscywgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiJCbG9jayBhdHRlbXB0cyB0byByZWFzc2lnbiBFbnVtIG1lbWJlcnMuCisKKyAgICAgICAgQSBzaW1wbGUgYXNzaWdubWVudCB0byB0aGUgY2xhc3MgbmFtZXNwYWNlIG9ubHkgY2hhbmdlcyBvbmUgb2YgdGhlCisgICAgICAgIHNldmVyYWwgcG9zc2libGUgd2F5cyB0byBnZXQgYW4gRW51bSBtZW1iZXIgZnJvbSB0aGUgRW51bSBjbGFzcywKKyAgICAgICAgcmVzdWx0aW5nIGluIGFuIGluY29uc2lzdGVudCBFbnVtZXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgbWVtYmVyX21hcCA9IGNscy5fX2RpY3RfXy5nZXQoJ19tZW1iZXJfbWFwXycsIHt9KQorICAgICAgICBpZiBuYW1lIGluIG1lbWJlcl9tYXA6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignQ2Fubm90IHJlYXNzaWduIG1lbWJlcnMuJykKKyAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IEVudW0gY2xhc3MuCisKKyAgICAgICAgYG5hbWVzYCBjYW4gYmU6CisKKyAgICAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIG1lbWJlciBuYW1lcywgc2VwYXJhdGVkIGVpdGhlciB3aXRoIHNwYWNlcyBvcgorICAgICAgICAgIGNvbW1hcy4gIFZhbHVlcyBhcmUgYXV0by1udW1iZXJlZCBmcm9tIDEuCisgICAgICAgICogQW4gaXRlcmFibGUgb2YgbWVtYmVyIG5hbWVzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiAobWVtYmVyIG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAgICAgKiBBIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUgLT4gdmFsdWUuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGFjbHMgPSBjbHMuX19jbGFzc19fCisgICAgICAgIGJhc2VzID0gKGNscywgKSBpZiB0eXBlIGlzIE5vbmUgZWxzZSAodHlwZSwgY2xzKQorICAgICAgICBjbGFzc2RpY3QgPSBtZXRhY2xzLl9fcHJlcGFyZV9fKGNsYXNzX25hbWUsIGJhc2VzKQorCisgICAgICAgICMgc3BlY2lhbCBwcm9jZXNzaW5nIG5lZWRlZCBmb3IgbmFtZXM/CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgKHR1cGxlLCBsaXN0KSkgYW5kIGlzaW5zdGFuY2UobmFtZXNbMF0sIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IFsoZSwgaSkgZm9yIChpLCBlKSBpbiBlbnVtZXJhdGUobmFtZXMsIDEpXQorCisgICAgICAgICMgSGVyZSwgbmFtZXMgaXMgZWl0aGVyIGFuIGl0ZXJhYmxlIG9mIChuYW1lLCB2YWx1ZSkgb3IgYSBtYXBwaW5nLgorICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgc3RyKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbSwgbmFtZXNbaXRlbV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUsIG1lbWJlcl92YWx1ZSA9IGl0ZW0KKyAgICAgICAgICAgIGNsYXNzZGljdFttZW1iZXJfbmFtZV0gPSBtZW1iZXJfdmFsdWUKKyAgICAgICAgZW51bV9jbGFzcyA9IG1ldGFjbHMuX19uZXdfXyhtZXRhY2xzLCBjbGFzc19uYW1lLCBiYXNlcywgY2xhc3NkaWN0KQorCisgICAgICAgICMgVE9ETzogcmVwbGFjZSB0aGUgZnJhbWUgaGFjayBpZiBhIGJsZXNzZWQgd2F5IHRvIGtub3cgdGhlIGNhbGxpbmcKKyAgICAgICAgIyBtb2R1bGUgaXMgZXZlciBkZXZlbG9wZWQKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLl9nZXRmcmFtZSgyKS5mX2dsb2JhbHNbJ19fbmFtZV9fJ10KKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19tb2R1bGVfXyA9IG1vZHVsZQorCisgICAgICAgIHJldHVybiBlbnVtX2NsYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZXRfbWl4aW5zXyhiYXNlcyk6CisgICAgICAgICIiIlJldHVybnMgdGhlIHR5cGUgZm9yIGNyZWF0aW5nIGVudW0gbWVtYmVycywgYW5kIHRoZSBmaXJzdCBpbmhlcml0ZWQKKyAgICAgICAgZW51bSBjbGFzcy4KKworICAgICAgICBiYXNlczogdGhlIHR1cGxlIG9mIGJhc2VzIHRoYXQgd2FzIGdpdmVuIHRvIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGJhc2VzOgorICAgICAgICAgICAgcmV0dXJuIG9iamVjdCwgRW51bQorCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBzdWJjbGFzc2luZyBhIGNsYXNzIHdpdGggZXhpc3RpbmcKKyAgICAgICAgIyBlbnVtZXJhdGlvbiBtZW1iZXJzOyB3aGlsZSB3ZSdyZSBhdCBpdCwgc2VlIGlmIGFueSBvdGhlciBkYXRhCisgICAgICAgICMgdHlwZSBoYXMgYmVlbiBtaXhlZCBpbiBzbyB3ZSBjYW4gdXNlIHRoZSBjb3JyZWN0IF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGUgPSBmaXJzdF9lbnVtID0gTm9uZQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGlmICAoYmFzZSBpcyBub3QgRW51bSBhbmQKKyAgICAgICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgYmFzZS5fbWVtYmVyX25hbWVzXyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgZXh0ZW5kIGVudW1lcmF0aW9ucyIpCisgICAgICAgICMgYmFzZSBpcyBub3cgdGhlIGxhc3QgYmFzZSBpbiBiYXNlcworICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmV3IGVudW1lcmF0aW9ucyBtdXN0IGJlIGNyZWF0ZWQgYXMgIgorICAgICAgICAgICAgICAgICAgICAiYENsYXNzTmFtZShbbWl4aW5fdHlwZSxdIGVudW1fdHlwZSlgIikKKworICAgICAgICAjIGdldCBjb3JyZWN0IG1peC1pbiB0eXBlIChlaXRoZXIgbWl4LWluIHR5cGUgb2YgRW51bSBzdWJjbGFzcywgb3IKKyAgICAgICAgIyBmaXJzdCBiYXNlIGlmIGxhc3QgYmFzZSBpcyBFbnVtKQorICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhiYXNlc1swXSwgRW51bSk6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2VzWzBdICAgICAjIGZpcnN0IGRhdGEgdHlwZQorICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2VzWy0xXSAgIyBlbnVtIHR5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBiYXNlIGluIGJhc2VzWzBdLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBtb3N0IGNvbW1vbjogKEludEVudW0sIGludCwgRW51bSwgb2JqZWN0KQorICAgICAgICAgICAgICAgICMgcG9zc2libGU6ICAgICg8RW51bSAnQXV0b0ludEVudW0nPiwgPEVudW0gJ0ludEVudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdpbnQnPiwgPEVudW0gJ0VudW0nPiwKKyAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgPGNsYXNzICdvYmplY3QnPikKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGJhc2UsIEVudW0pOgorICAgICAgICAgICAgICAgICAgICBpZiBmaXJzdF9lbnVtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtID0gYmFzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIG1lbWJlcl90eXBlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IGJhc2UKKworICAgICAgICByZXR1cm4gbWVtYmVyX3R5cGUsIGZpcnN0X2VudW0KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgIiIiUmV0dXJucyB0aGUgX19uZXdfXyB0byBiZSB1c2VkIGZvciBjcmVhdGluZyB0aGUgZW51bSBtZW1iZXJzLgorCisgICAgICAgIGNsYXNzZGljdDogdGhlIGNsYXNzIGRpY3Rpb25hcnkgZ2l2ZW4gdG8gX19uZXdfXworICAgICAgICBtZW1iZXJfdHlwZTogdGhlIGRhdGEgdHlwZSB3aG9zZSBfX25ld19fIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0CisgICAgICAgIGZpcnN0X2VudW06IGVudW1lcmF0aW9uIHRvIGNoZWNrIGZvciBhbiBvdmVycmlkaW5nIF9fbmV3X18KKworICAgICAgICAiIiIKKyAgICAgICAgIyBub3cgZmluZCB0aGUgY29ycmVjdCBfX25ld19fLCBjaGVja2luZyB0byBzZWUgb2Ygb25lIHdhcyBkZWZpbmVkCisgICAgICAgICMgYnkgdGhlIHVzZXI7IGFsc28gY2hlY2sgZWFybGllciBlbnVtIGNsYXNzZXMgaW4gY2FzZSBhIF9fbmV3X18gd2FzCisgICAgICAgICMgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18KKyAgICAgICAgX19uZXdfXyA9IGNsYXNzZGljdC5nZXQoJ19fbmV3X18nLCBOb25lKQorCisgICAgICAgICMgc2hvdWxkIF9fbmV3X18gYmUgc2F2ZWQgYXMgX19uZXdfbWVtYmVyX18gbGF0ZXI/CisgICAgICAgIHNhdmVfbmV3ID0gX19uZXdfXyBpcyBub3QgTm9uZQorCisgICAgICAgIGlmIF9fbmV3X18gaXMgTm9uZToKKyAgICAgICAgICAgICMgY2hlY2sgYWxsIHBvc3NpYmxlcyBmb3IgX19uZXdfbWVtYmVyX18gYmVmb3JlIGZhbGxpbmcgYmFjayB0bworICAgICAgICAgICAgIyBfX25ld19fCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnX19uZXdfbWVtYmVyX18nLCAnX19uZXdfXycpOgorICAgICAgICAgICAgICAgIGZvciBwb3NzaWJsZSBpbiAobWVtYmVyX3R5cGUsIGZpcnN0X2VudW0pOgorICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSBnZXRhdHRyKHBvc3NpYmxlLCBtZXRob2QsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIHRhcmdldCBub3QgaW4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZS5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5fX25ld19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVudW0uX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OgorICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfXyA9IHRhcmdldAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBfX25ld19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfX25ld19fID0gb2JqZWN0Ll9fbmV3X18KKworICAgICAgICAjIGlmIGEgbm9uLW9iamVjdC5fX25ld19fIGlzIHVzZWQgdGhlbiB3aGF0ZXZlciB2YWx1ZS90dXBsZSB3YXMKKyAgICAgICAgIyBhc3NpZ25lZCB0byB0aGUgZW51bSBtZW1iZXIgbmFtZSB3aWxsIGJlIHBhc3NlZCB0byBfX25ld19fIGFuZCB0byB0aGUKKyAgICAgICAgIyBuZXcgZW51bSBtZW1iZXIncyBfX2luaXRfXworICAgICAgICBpZiBfX25ld19fIGlzIG9iamVjdC5fX25ld19fOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlX2FyZ3MgPSBUcnVlCisKKyAgICAgICAgcmV0dXJuIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncworCisKK2NsYXNzIEVudW0obWV0YWNsYXNzPUVudW1NZXRhKToKKyAgICAiIiJHZW5lcmljIGVudW1lcmF0aW9uLgorCisgICAgRGVyaXZlIGZyb20gdGhpcyBjbGFzcyB0byBkZWZpbmUgbmV3IGVudW1lcmF0aW9ucy4KKworICAgICIiIgorICAgIGRlZiBfX25ld19fKGNscywgdmFsdWUpOgorICAgICAgICAjIGFsbCBlbnVtIGluc3RhbmNlcyBhcmUgYWN0dWFsbHkgY3JlYXRlZCBkdXJpbmcgY2xhc3MgY29uc3RydWN0aW9uCisgICAgICAgICMgd2l0aG91dCBjYWxsaW5nIHRoaXMgbWV0aG9kOyB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIG1ldGFjbGFzcycKKyAgICAgICAgIyBfX2NhbGxfXyAoaS5lLiBDb2xvcigzKSApLCBhbmQgYnkgcGlja2xlCisgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIGNsczoKKyAgICAgICAgICAgICMgRm9yIGxvb2t1cHMgbGlrZSBDb2xvcihDb2xvci5yZWQpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgIyBieS12YWx1ZSBzZWFyY2ggZm9yIGEgbWF0Y2hpbmcgZW51bSBtZW1iZXIKKyAgICAgICAgIyBzZWUgaWYgaXQncyBpbiB0aGUgcmV2ZXJzZSBtYXBwaW5nIChmb3IgaGFzaGFibGUgdmFsdWVzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB2YWx1ZSBpbiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuX3ZhbHVlMm1lbWJlcl9tYXBfW3ZhbHVlXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBub3QgdGhlcmUsIG5vdyBkbyBsb25nIHNlYXJjaCAtLSBPKG4pIGJlaGF2aW9yCisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGNscy5fbWVtYmVyX21hcF8udmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgbWVtYmVyLnZhbHVlID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIGlzIG5vdCBhIHZhbGlkICVzIiAlICh2YWx1ZSwgY2xzLl9fbmFtZV9fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXM6ICVyPiIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfLCBzZWxmLl92YWx1ZV8pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIGFkZGVkX2JlaGF2aW9yID0gW20gZm9yIG0gaW4gc2VsZi5fX2NsYXNzX18uX19kaWN0X18gaWYgbVswXSAhPSAnXyddCisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSArCisgICAgICAgICAgICAgICAgYWRkZWRfYmVoYXZpb3IpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICMgbWl4ZWQtaW4gRW51bXMgc2hvdWxkIHVzZSB0aGUgbWl4ZWQtaW4gdHlwZSdzIF9fZm9ybWF0X18sIG90aGVyd2lzZQorICAgICAgICAjIHdlIGNhbiBnZXQgc3RyYW5nZSByZXN1bHRzIHdpdGggdGhlIEVudW0gbmFtZSBzaG93aW5nIHVwIGluc3RlYWQgb2YKKyAgICAgICAgIyB0aGUgdmFsdWUKKworICAgICAgICAjIHB1cmUgRW51bSBicmFuY2gKKyAgICAgICAgaWYgc2VsZi5fbWVtYmVyX3R5cGVfIGlzIG9iamVjdDoKKyAgICAgICAgICAgIGNscyA9IHN0cgorICAgICAgICAgICAgdmFsID0gc3RyKHNlbGYpCisgICAgICAgICMgbWl4LWluIGJyYW5jaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzID0gc2VsZi5fbWVtYmVyX3R5cGVfCisgICAgICAgICAgICB2YWwgPSBzZWxmLnZhbHVlCisgICAgICAgIHJldHVybiBjbHMuX19mb3JtYXRfXyh2YWwsIGZvcm1hdF9zcGVjKQorCisgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX3ZhbHVlXywgKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9uYW1lXykKKworICAgICMgRHluYW1pY0NsYXNzQXR0cmlidXRlIGlzIHVzZWQgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGBuYW1lYCBhbmQKKyAgICAjIGB2YWx1ZWAgcHJvcGVydGllcyBvZiBlbnVtIG1lbWJlcnMgd2hpbGUga2VlcGluZyBzb21lIG1lYXN1cmUgb2YKKyAgICAjIHByb3RlY3Rpb24gZnJvbSBtb2RpZmljYXRpb24sIHdoaWxlIHN0aWxsIGFsbG93aW5nIGZvciBhbiBlbnVtZXJhdGlvbgorICAgICMgdG8gaGF2ZSBtZW1iZXJzIG5hbWVkIGBuYW1lYCBhbmQgYHZhbHVlYC4gIFRoaXMgd29ya3MgYmVjYXVzZSBlbnVtZXJhdGlvbgorICAgICMgbWVtYmVycyBhcmUgbm90IHNldCBkaXJlY3RseSBvbiB0aGUgZW51bSBjbGFzcyAtLSBfX2dldGF0dHJfXyBpcworICAgICMgdXNlZCB0byBsb29rIHRoZW0gdXAuCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWVfCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICAiIiJUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfCisKKworY2xhc3MgSW50RW51bShpbnQsIEVudW0pOgorICAgICIiIkVudW0gd2hlcmUgbWVtYmVycyBhcmUgYWxzbyAoYW5kIG11c3QgYmUpIGludHMiIiIKKworCitkZWYgdW5pcXVlKGVudW1lcmF0aW9uKToKKyAgICAiIiJDbGFzcyBkZWNvcmF0b3IgZm9yIGVudW1lcmF0aW9ucyBlbnN1cmluZyB1bmlxdWUgbWVtYmVyIHZhbHVlcy4iIiIKKyAgICBkdXBsaWNhdGVzID0gW10KKyAgICBmb3IgbmFtZSwgbWVtYmVyIGluIGVudW1lcmF0aW9uLl9fbWVtYmVyc19fLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgIT0gbWVtYmVyLm5hbWU6CisgICAgICAgICAgICBkdXBsaWNhdGVzLmFwcGVuZCgobmFtZSwgbWVtYmVyLm5hbWUpKQorICAgIGlmIGR1cGxpY2F0ZXM6CisgICAgICAgIGFsaWFzX2RldGFpbHMgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgWyIlcyAtPiAlcyIgJSAoYWxpYXMsIG5hbWUpIGZvciAoYWxpYXMsIG5hbWUpIGluIGR1cGxpY2F0ZXNdKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdkdXBsaWNhdGUgdmFsdWVzIGZvdW5kIGluICVyOiAlcycgJQorICAgICAgICAgICAgICAgIChlbnVtZXJhdGlvbiwgYWxpYXNfZGV0YWlscykpCisgICAgcmV0dXJuIGVudW1lcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvZmlsZWNtcC5weSBiL0xpYi9maWxlY21wLnB5CmluZGV4IGY1Y2VhMWQuLjMyODUyODggMTAwNjQ0Ci0tLSBhL0xpYi9maWxlY21wLnB5CisrKyBiL0xpYi9maWxlY21wLnB5CkBAIC02LDYgKzYsNyBAQAogRnVuY3Rpb25zOgogICAgIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSkgLT4gaW50CiAgICAgY21wZmlsZXMoYSwgYiwgY29tbW9uKSAtPiAoW10sIFtdLCBbXSkKKyAgICBjbGVhcl9jYWNoZSgpCiAKICIiIgogCkBAIC0xMywxMSArMTQsMTggQEAKIGltcG9ydCBzdGF0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZmlsdGVyZmFsc2UKIAotX19hbGxfXyA9IFsiY21wIiwgImRpcmNtcCIsICJjbXBmaWxlcyJdCitfX2FsbF9fID0gWydjbGVhcl9jYWNoZScsICdjbXAnLCAnZGlyY21wJywgJ2NtcGZpbGVzJywgJ0RFRkFVTFRfSUdOT1JFUyddCiAKIF9jYWNoZSA9IHt9CiBCVUZTSVpFID0gOCoxMDI0CiAKK0RFRkFVTFRfSUdOT1JFUyA9IFsKKyAgICAnUkNTJywgJ0NWUycsICd0YWdzJywgJy5naXQnLCAnLmhnJywgJy5ienInLCAnX2RhcmNzJywgJ19fcHljYWNoZV9fJ10KKworZGVmIGNsZWFyX2NhY2hlKCk6CisgICAgIiIiQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIiIiCisgICAgX2NhY2hlLmNsZWFyKCkKKwogZGVmIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSk6CiAgICAgIiIiQ29tcGFyZSB0d28gZmlsZXMuCiAKQEAgLTM1LDcgKzQzLDggQEAKICAgICBUcnVlIGlmIHRoZSBmaWxlcyBhcmUgdGhlIHNhbWUsIEZhbHNlIG90aGVyd2lzZS4KIAogICAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKLSAgICB3aXRoIGEgY2FjaGUgaW52YWxpZGF0aW9uIG1lY2hhbmlzbSByZWx5aW5nIG9uIHN0YWxlIHNpZ25hdHVyZXMuCisgICAgd2l0aCBhIGNhY2hlIGludmFsaWRhdGlvbiBtZWNoYW5pc20gcmVseWluZyBvbiBzdGFsZSBzaWduYXR1cmVzCisgICAgb3IgYnkgZXhwbGljaXRseSBjYWxsaW5nIGNsZWFyX2NhY2hlKCkuCiAKICAgICAiIiIKIApAQCAtNTIsNyArNjEsNyBAQAogICAgIGlmIG91dGNvbWUgaXMgTm9uZToKICAgICAgICAgb3V0Y29tZSA9IF9kb19jbXAoZjEsIGYyKQogICAgICAgICBpZiBsZW4oX2NhY2hlKSA+IDEwMDogICAgICAjIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNhY2hlCi0gICAgICAgICAgICBfY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgY2xlYXJfY2FjaGUoKQogICAgICAgICBfY2FjaGVbZjEsIGYyLCBzMSwgczJdID0gb3V0Y29tZQogICAgIHJldHVybiBvdXRjb21lCiAKQEAgLTgwLDcgKzg5LDcgQEAKICAgICBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKICAgICAgIEEgYW5kIEIgYXJlIGRpcmVjdG9yaWVzLgogICAgICAgSUdOT1JFIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsCi0gICAgICAgIGRlZmF1bHRzIHRvIFsnUkNTJywgJ0NWUycsICd0YWdzJ10uCisgICAgICAgIGRlZmF1bHRzIHRvIERFRkFVTFRfSUdOT1JFUy4KICAgICAgIEhJREUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsCiAgICAgICAgIGRlZmF1bHRzIHRvIFtvcy5jdXJkaXIsIG9zLnBhcmRpcl0uCiAKQEAgLTExNiw3ICsxMjUsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5oaWRlID0gaGlkZQogICAgICAgICBpZiBpZ25vcmUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuaWdub3JlID0gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXSAjIE5hbWVzIGlnbm9yZWQgaW4gY29tcGFyaXNvbgorICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBERUZBVUxUX0lHTk9SRVMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuaWdub3JlID0gaWdub3JlCiAKQEAgLTE0NywxMiArMTU2LDEyIEBACiAgICAgICAgICAgICBvayA9IDEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhX3N0YXQgPSBvcy5zdGF0KGFfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBhX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYl9zdGF0ID0gb3Muc3RhdChiX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICMgcHJpbnQoJ0NhblwndCBzdGF0JywgYl9wYXRoLCAnOicsIHdoeS5hcmdzWzFdKQogICAgICAgICAgICAgICAgIG9rID0gMAogCkBAIC0yNjgsNyArMjc3LDcgQEAKIGRlZiBfY21wKGEsIGIsIHNoLCBhYnM9YWJzLCBjbXA9Y21wKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBub3QgYWJzKGNtcChhLCBiLCBzaCkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gMgogCiAKZGlmZiAtLWdpdCBhL0xpYi9maWxlaW5wdXQucHkgYi9MaWIvZmlsZWlucHV0LnB5CmluZGV4IDg3OWEwZmQuLmRlMjk1MTggMTAwNjQ0Ci0tLSBhL0xpYi9maWxlaW5wdXQucHkKKysrIGIvTGliL2ZpbGVpbnB1dC5weQpAQCAtMzAsNyArMzAsNyBAQAogCiBBbGwgZmlsZXMgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUgYnkgZGVmYXVsdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5CiBzZXR0aW5nIHRoZSBtb2RlIHBhcmFtZXRlciB0byBpbnB1dCgpIG9yIEZpbGVJbnB1dC5fX2luaXRfXygpLgotSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIElPRXJyb3IKK0lmIGFuIEkvTyBlcnJvciBvY2N1cnMgZHVyaW5nIG9wZW5pbmcgb3IgcmVhZGluZyBhIGZpbGUsIHRoZSBPU0Vycm9yCiBleGNlcHRpb24gaXMgcmFpc2VkLgogCiBJZiBzeXMuc3RkaW4gaXMgdXNlZCBtb3JlIHRoYW4gb25jZSwgdGhlIHNlY29uZCBhbmQgZnVydGhlciB1c2Ugd2lsbApAQCAtMjIyLDYgKzIyMiwxMCBAQAogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoJ3InLCAnclUnLCAnVScsICdyYicpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsZUlucHV0IG9wZW5pbmcgbW9kZSBtdXN0IGJlIG9uZSBvZiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncicsICdyVScsICdVJyBhbmQgJ3JiJyIpCisgICAgICAgIGlmICdVJyBpbiBtb2RlOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQogICAgICAgICBpZiBvcGVuaG9vazoKICAgICAgICAgICAgIGlmIGlucGxhY2U6CkBAIC0zMjIsOSArMzI2LDExIEBACiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wbGFjZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgT1NFcnJvcgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2JhY2t1cGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzQ2LDcgKzM1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vdXRwdXQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5ob29rOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggNjBlNjBmMS4uZDhjY2E1MiAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0xOSw2ICsxOSw5IEBACiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy53YXJuKCd0aGUgZm9ybWF0dGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJworICAgICAgICAgICAgICAnUHl0aG9uIDMuNicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKIAogQVNfSVMgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvZnJhY3Rpb25zLnB5IGIvTGliL2ZyYWN0aW9ucy5weQppbmRleCA4YmU1MmQyLi43OWU4M2ZmIDEwMDY0NAotLS0gYS9MaWIvZnJhY3Rpb25zLnB5CisrKyBiL0xpYi9mcmFjdGlvbnMucHkKQEAgLTE4Miw4ICsxODIsMTAgQEAKICAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShmLCBmbG9hdCk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzLmZyb21fZmxvYXQoKSBvbmx5IHRha2VzIGZsb2F0cywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBmLCB0eXBlKGYpLl9fbmFtZV9fKSkKLSAgICAgICAgaWYgbWF0aC5pc25hbihmKSBvciBtYXRoLmlzaW5mKGYpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNuYW4oZik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIG1hdGguaXNpbmYoZik6CisgICAgICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJDYW5ub3QgY29udmVydCAlciB0byAlcy4iICUgKGYsIGNscy5fX25hbWVfXykpCiAgICAgICAgIHJldHVybiBjbHMoKmYuYXNfaW50ZWdlcl9yYXRpbygpKQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xOTYsOSArMTk4LDExIEBACiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVzLmZyb21fZGVjaW1hbCgpIG9ubHkgdGFrZXMgRGVjaW1hbHMsIG5vdCAlciAoJXMpIiAlCiAgICAgICAgICAgICAgICAgKGNscy5fX25hbWVfXywgZGVjLCB0eXBlKGRlYykuX19uYW1lX18pKQotICAgICAgICBpZiBub3QgZGVjLmlzX2Zpbml0ZSgpOgotICAgICAgICAgICAgIyBDYXRjaGVzIGluZmluaXRpZXMgYW5kIG5hbnMuCi0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfaW5maW5pdGUoKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoCisgICAgICAgICAgICAgICAgIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQorICAgICAgICBpZiBkZWMuaXNfbmFuKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3QgY29udmVydCAlcyB0byAlcy4iICUgKGRlYywgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgc2lnbiwgZGlnaXRzLCBleHAgPSBkZWMuYXNfdHVwbGUoKQogICAgICAgICBkaWdpdHMgPSBpbnQoJycuam9pbihtYXAoc3RyLCBkaWdpdHMpKSkKICAgICAgICAgaWYgc2lnbjoKZGlmZiAtLWdpdCBhL0xpYi9mdHBsaWIucHkgYi9MaWIvZnRwbGliLnB5CmluZGV4IDVlNzVlNmQuLjJjYzQ3MDIgMTAwNjQ0Ci0tLSBhL0xpYi9mdHBsaWIucHkKKysrIGIvTGliL2Z0cGxpYi5weQpAQCAtMzksOSArMzksMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAoraW1wb3J0IHdhcm5pbmdzCiBmcm9tIHNvY2tldCBpbXBvcnQgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKIAotX19hbGxfXyA9IFsiRlRQIiwiTmV0cmMiXQorX19hbGxfXyA9IFsiRlRQIiwgIk5ldHJjIl0KIAogIyBNYWdpYyBudW1iZXIgZnJvbSA8c29ja2V0Lmg+CiBNU0dfT09CID0gMHgxICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm9jZXNzIGRhdGEgb3V0IG9mIGJhbmQKQEAgLTYzLDcgKzY0LDcgQEAKIAogIyBBbGwgZXhjZXB0aW9ucyAoaG9wZWZ1bGx5KSB0aGF0IG1heSBiZSByYWlzZWQgaGVyZSBhbmQgdGhhdCBhcmVuJ3QKICMgKGFsd2F5cykgcHJvZ3JhbW1pbmcgZXJyb3JzIG9uIG91ciBzaWRlCi1hbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvcikKK2FsbF9lcnJvcnMgPSAoRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogCiAKICMgTGluZSB0ZXJtaW5hdG9ycyAod2UgYWx3YXlzIG91dHB1dCBDUkxGLCBidXQgYWNjZXB0IGFueSBvZiBDUkxGLCBDUiwgTEYpCkBAIC0xMjYsNyArMTI3LDcgQEAKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CkBAIC0xMzYsNiArMTM3LDcgQEAKICAgICAgICAgJycnQ29ubmVjdCB0byBob3N0LiAgQXJndW1lbnRzIGFyZToKICAgICAgICAgIC0gaG9zdDogaG9zdG5hbWUgdG8gY29ubmVjdCB0byAoc3RyaW5nLCBkZWZhdWx0IHByZXZpb3VzIGhvc3QpCiAgICAgICAgICAtIHBvcnQ6IHBvcnQgdG8gY29ubmVjdCB0byAoaW50ZWdlciwgZGVmYXVsdCBwcmV2aW91cyBwb3J0KQorICAgICAgICAgLSB0aW1lb3V0OiB0aGUgdGltZW91dCB0byBzZXQgYWdhaW5zdCB0aGUgZnRwIHNvY2tldChzKQogICAgICAgICAgLSBzb3VyY2VfYWRkcmVzczogYSAyLXR1cGxlIChob3N0LCBwb3J0KSBmb3IgdGhlIHNvY2tldCB0byBiaW5kCiAgICAgICAgICAgIHRvIGFzIGl0cyBzb3VyY2UgYWRkcmVzcyBiZWZvcmUgY29ubmVjdGluZy4KICAgICAgICAgJycnCkBAIC0xODYsNyArMTg4LDggQEAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBsaW5lIHRvIHRoZSBzZXJ2ZXIsIGFwcGVuZGluZyBDUkxGCiAgICAgZGVmIHB1dGxpbmUoc2VsZiwgbGluZSk6CiAgICAgICAgIGxpbmUgPSBsaW5lICsgQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMToKKyAgICAgICAgICAgIHByaW50KCcqcHV0KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQogCiAgICAgIyBJbnRlcm5hbDogc2VuZCBvbmUgY29tbWFuZCB0byB0aGUgc2VydmVyICh0aHJvdWdoIHB1dGxpbmUoKSkKQEAgLTIwMiw5ICsyMDUsMTIgQEAKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgogICAgICAgICAgICAgcHJpbnQoJypnZXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKLSAgICAgICAgaWYgbm90IGxpbmU6IHJhaXNlIEVPRkVycm9yCi0gICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOiBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgIGVsaWYgbGluZVstMTpdIGluIENSTEY6IGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgorICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjoKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgcmV0dXJuIGxpbmUKIAogICAgICMgSW50ZXJuYWw6IGdldCBhIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlciwgd2hpY2ggbWF5IHBvc3NpYmx5CkBAIC0yMjcsNyArMjMzLDggQEAKICAgICAjIFJhaXNlIHZhcmlvdXMgZXJyb3JzIGlmIHRoZSByZXNwb25zZSBpbmRpY2F0ZXMgYW4gZXJyb3IKICAgICBkZWYgZ2V0cmVzcChzZWxmKToKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmc6IHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzoKKyAgICAgICAgICAgIHByaW50KCcqcmVzcConLCBzZWxmLnNhbml0aXplKHJlc3ApKQogICAgICAgICBzZWxmLmxhc3RyZXNwID0gcmVzcFs6M10KICAgICAgICAgYyA9IHJlc3BbOjFdCiAgICAgICAgIGlmIGMgaW4geycxJywgJzInLCAnMyd9OgpAQCAtMjUxLDcgKzI1OCw4IEBACiAgICAgICAgIElQIGFuZCBTeW5jaDsgdGhhdCBkb2Vzbid0IHNlZW0gdG8gd29yayB3aXRoIHRoZSBzZXJ2ZXJzIEkndmUKICAgICAgICAgdHJpZWQuICBJbnN0ZWFkLCBqdXN0IHNlbmQgdGhlIEFCT1IgY29tbWFuZCBhcyBPT0IgZGF0YS4nJycKICAgICAgICAgbGluZSA9IGInQUJPUicgKyBCX0NSTEYKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOiBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQgdXJnZW50KicsIHNlbGYuc2FuaXRpemUobGluZSkpCiAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUsIE1TR19PT0IpCiAgICAgICAgIHJlc3AgPSBzZWxmLmdldG11bHRpbGluZSgpCiAgICAgICAgIGlmIHJlc3BbOjNdIG5vdCBpbiB7JzQyNicsICcyMjUnLCAnMjI2J306CkBAIC0zMDAsNyArMzA4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIF86CiAgICAgICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQpAQCAtMzExLDggKzMxOSw4IEBACiAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICAgICBzb2NrLmxpc3RlbigxKQogICAgICAgICBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpWzFdICMgR2V0IHByb3BlciBwb3J0CiAgICAgICAgIGhvc3QgPSBzZWxmLnNvY2suZ2V0c29ja25hbWUoKVswXSAjIEdldCBwcm9wZXIgaG9zdApAQCAtMzkyLDkgKzQwMCwxMiBAQAogCiAgICAgZGVmIGxvZ2luKHNlbGYsIHVzZXIgPSAnJywgcGFzc3dkID0gJycsIGFjY3QgPSAnJyk6CiAgICAgICAgICcnJ0xvZ2luLCBkZWZhdWx0IGFub255bW91cy4nJycKLSAgICAgICAgaWYgbm90IHVzZXI6IHVzZXIgPSAnYW5vbnltb3VzJwotICAgICAgICBpZiBub3QgcGFzc3dkOiBwYXNzd2QgPSAnJwotICAgICAgICBpZiBub3QgYWNjdDogYWNjdCA9ICcnCisgICAgICAgIGlmIG5vdCB1c2VyOgorICAgICAgICAgICAgdXNlciA9ICdhbm9ueW1vdXMnCisgICAgICAgIGlmIG5vdCBwYXNzd2Q6CisgICAgICAgICAgICBwYXNzd2QgPSAnJworICAgICAgICBpZiBub3QgYWNjdDoKKyAgICAgICAgICAgIGFjY3QgPSAnJwogICAgICAgICBpZiB1c2VyID09ICdhbm9ueW1vdXMnIGFuZCBwYXNzd2QgaW4geycnLCAnLSd9OgogICAgICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBhbm9ueW1vdXMgZnRwIHBhc3N3b3JkIHNwZWNpZmllZAogICAgICAgICAgICAgIyB0aGVuIHdlJ2xsIGp1c3QgdXNlIGFub255bW91c0AKQEAgLTQwNSw4ICs0MTYsMTAgQEAKICAgICAgICAgICAgICMgICBob3N0IG9yIGNvdW50cnkuCiAgICAgICAgICAgICBwYXNzd2QgPSBwYXNzd2QgKyAnYW5vbnltb3VzQCcKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVVNFUiAnICsgdXNlcikKLSAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6IHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BBU1MgJyArIHBhc3N3ZCkKLSAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6IHJlc3AgPSBzZWxmLnNlbmRjbWQoJ0FDQ1QgJyArIGFjY3QpCisgICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnUEFTUyAnICsgcGFzc3dkKQorICAgICAgICBpZiByZXNwWzBdID09ICczJzoKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ0FDQ1QgJyArIGFjY3QpCiAgICAgICAgIGlmIHJlc3BbMF0gIT0gJzInOgogICAgICAgICAgICAgcmFpc2UgZXJyb3JfcmVwbHkocmVzcCkKICAgICAgICAgcmV0dXJuIHJlc3AKQEAgLTQzMiw2ICs0NDUsOSBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCisgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgaWYgX1NTTFNvY2tldCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShjb25uLCBfU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCiAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKIAogICAgIGRlZiByZXRybGluZXMoc2VsZiwgY21kLCBjYWxsYmFjayA9IE5vbmUpOgpAQCAtNDQ2LDcgKzQ2Miw4IEBACiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgVGhlIHJlc3BvbnNlIGNvZGUuCiAgICAgICAgICIiIgotICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKKyAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJpbnRfbGluZQogICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdUWVBFIEEnKQogICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kKSBhcyBjb25uLCBcCiAgICAgICAgICAgICAgICAgIGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKSBhcyBmcDoKQEAgLTQ1NCw3ICs0NzEsOCBAQAogICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQogICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYubWF4bGluZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjogcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKQEAgLTQ2Miw2ICs0ODAsOSBAQAogICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKToKQEAgLTQ4Myw5ICs1MDQsMTQgQEAKICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgpAQCAtNTA2LDEyICs1MzIsMTcgQEAKICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQogICAgICAgICAgICAgICAgIGlmIGxlbihidWYpID4gc2VsZi5tYXhsaW5lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGlmIGJ1ZlstMjpdICE9IEJfQ1JMRjoKICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCiAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1ZiArIEJfQ1JMRgogICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgYWNjdChzZWxmLCBwYXNzd29yZCk6CkBAIC02NDYsOCArNjc3LDEwIEBACiB0cnk6CiAgICAgaW1wb3J0IHNzbAogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKKyAgICBfU1NMU29ja2V0ID0gTm9uZQogZWxzZToKKyAgICBfU1NMU29ja2V0ID0gc3NsLlNTTFNvY2tldAorCiAgICAgY2xhc3MgRlRQX1RMUyhGVFApOgogICAgICAgICAnJydBIEZUUCBzdWJjbGFzcyB3aGljaCBhZGRzIFRMUyBzdXBwb3J0IHRvIEZUUCBhcyBkZXNjcmliZWQKICAgICAgICAgaW4gUkZDLTQyMTcuCkBAIC02OTQsNiArNzI3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzZWxmLnNzbF92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogICAgICAgICAgICAgc2VsZi5fcHJvdF9wID0gRmFsc2UKICAgICAgICAgICAgIEZUUC5fX2luaXRfXyhzZWxmLCBob3N0LCB1c2VyLCBwYXNzd2QsIGFjY3QsIHRpbWVvdXQsIHNvdXJjZV9hZGRyZXNzKQpAQCAtNzExLDEyICs3NDgsOSBAQAogICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggVExTJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBTU0wnKQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIHNlbGYua2V5ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZShtb2RlPSdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKICAgICAgICAgICAgIHJldHVybiByZXNwCiAKQEAgLTc1NSw4MCArNzg5LDExIEBACiAgICAgICAgIGRlZiBudHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0PU5vbmUpOgogICAgICAgICAgICAgY29ubiwgc2l6ZSA9IEZUUC5udHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0KQogICAgICAgICAgICAgaWYgc2VsZi5fcHJvdF9wOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzc2wud3JhcF9zb2NrZXQoY29ubiwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5ob3N0IGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoY29ubiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gY29ubiwgc2l6ZQogCi0gICAgICAgIGRlZiByZXRyYmluYXJ5KHNlbGYsIGNtZCwgY2FsbGJhY2ssIGJsb2Nrc2l6ZT04MTkyLCByZXN0PU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiByZXRybGluZXMoc2VsZiwgY21kLCBjYWxsYmFjayA9IE5vbmUpOgotICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCi0gICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdUWVBFIEEnKQotICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kKQotICAgICAgICAgICAgZnAgPSBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKLSAgICAgICAgICAgIHdpdGggZnAsIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKHNlbGYubWF4bGluZSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IHNlbGYubWF4bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKToKLSAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBJJykKLSAgICAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZChibG9ja3NpemUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHN0b3JsaW5lcyhzZWxmLCBjbWQsIGZwLCBjYWxsYmFjaz1Ob25lKToKLSAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBBJykKLSAgICAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQpIGFzIGNvbm46Ci0gICAgICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGJ1ZikgPiBzZWxmLm1heGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiZ290IG1vcmUgdGhhbiAlZCBieXRlcyIgJSBzZWxmLm1heGxpbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMjpdICE9IEJfQ1JMRjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMV0gaW4gQl9DUkxGOiBidWYgPSBidWZbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICsgQl9DUkxGCi0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KICAgICAgICAgZGVmIGFib3J0KHNlbGYpOgogICAgICAgICAgICAgIyBvdmVycmlkZGVuIGFzIHdlIGNhbid0IHBhc3MgTVNHX09PQiBmbGFnIHRvIHNlbmRhbGwoKQogICAgICAgICAgICAgbGluZSA9IGInQUJPUicgKyBCX0NSTEYKQEAgLTgzOSw3ICs4MDQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJlc3AKIAogICAgIF9fYWxsX18uYXBwZW5kKCdGVFBfVExTJykKLSAgICBhbGxfZXJyb3JzID0gKEVycm9yLCBJT0Vycm9yLCBFT0ZFcnJvciwgc3NsLlNTTEVycm9yKQorICAgIGFsbF9lcnJvcnMgPSAoRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yLCBzc2wuU1NMRXJyb3IpCiAKIAogXzE1MF9yZSA9IE5vbmUKQEAgLTkzNiw3ICs5MDEsOCBAQAogCiBkZWYgZnRwY3Aoc291cmNlLCBzb3VyY2VuYW1lLCB0YXJnZXQsIHRhcmdldG5hbWUgPSAnJywgdHlwZSA9ICdJJyk6CiAgICAgJycnQ29weSBmaWxlIGZyb20gb25lIEZUUC1pbnN0YW5jZSB0byBhbm90aGVyLicnJwotICAgIGlmIG5vdCB0YXJnZXRuYW1lOiB0YXJnZXRuYW1lID0gc291cmNlbmFtZQorICAgIGlmIG5vdCB0YXJnZXRuYW1lOgorICAgICAgICB0YXJnZXRuYW1lID0gc291cmNlbmFtZQogICAgIHR5cGUgPSAnVFlQRSAnICsgdHlwZQogICAgIHNvdXJjZS52b2lkY21kKHR5cGUpCiAgICAgdGFyZ2V0LnZvaWRjbWQodHlwZSkKQEAgLTk0Niw5ICs5MTIsMTEgQEAKICAgICAjIHRyYW5zZmVyIHJlcXVlc3QuCiAgICAgIyBTbzogU1RPUiBiZWZvcmUgUkVUUiwgYmVjYXVzZSBoZXJlIHRoZSB0YXJnZXQgaXMgYSAidXNlciIuCiAgICAgdHJlcGx5ID0gdGFyZ2V0LnNlbmRjbWQoJ1NUT1IgJyArIHRhcmdldG5hbWUpCi0gICAgaWYgdHJlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfToKKyAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNyZXBseSA9IHNvdXJjZS5zZW5kY21kKCdSRVRSICcgKyBzb3VyY2VuYW1lKQotICAgIGlmIHNyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306CisgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzb3VyY2Uudm9pZHJlc3AoKQogICAgIHRhcmdldC52b2lkcmVzcCgpCiAKQEAgLTk2NiwxOSArOTM0LDIyIEBACiAgICAgX19kZWZhY2N0ID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbmV0cmMgbW9kdWxlIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGlmICJIT01FIiBpbiBvcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkhPTUUiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLm5ldHJjIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzcGVjaWZ5IGZpbGUgdG8gbG9hZCBvciBzZXQgJEhPTUUiKQogICAgICAgICBzZWxmLl9faG9zdHMgPSB7fQogICAgICAgICBzZWxmLl9fbWFjcm9zID0ge30KICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAiciIpCiAgICAgICAgIGluX21hY3JvID0gMAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaworICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGluX21hY3JvIGFuZCBsaW5lLnN0cmlwKCk6CiAgICAgICAgICAgICAgICAgbWFjcm9fbGluZXMuYXBwZW5kKGxpbmUpCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTEwODcsNyArMTA1OCw3IEBACiAgICAgdXNlcmlkID0gcGFzc3dkID0gYWNjdCA9ICcnCiAgICAgdHJ5OgogICAgICAgICBuZXRyYyA9IE5ldHJjKHJjZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgcmNmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ291bGQgbm90IG9wZW4gYWNjb3VudCBmaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIHVzaW5nIGFub255bW91cyBsb2dpbi4iKQpkaWZmIC0tZ2l0IGEvTGliL2Z1bmN0b29scy5weSBiL0xpYi9mdW5jdG9vbHMucHkKaW5kZXggMDUzZTQ0ZS4uMWU3OWIzMSAxMDA2NDQKLS0tIGEvTGliL2Z1bmN0b29scy5weQorKysgYi9MaWIvZnVuY3Rvb2xzLnB5CkBAIC0zLDE2ICszLDI0IEBACiAjIFB5dGhvbiBtb2R1bGUgd3JhcHBlciBmb3IgX2Z1bmN0b29scyBDIG1vZHVsZQogIyB0byBhbGxvdyB1dGlsaXRpZXMgd3JpdHRlbiBpbiBQeXRob24gdG8gYmUgYWRkZWQKICMgdG8gdGhlIGZ1bmN0b29scyBtb2R1bGUuCi0jIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+Ci0jIGFuZCBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+Ci0jICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+LAorIyBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+LAorIyBhbmQgxYF1a2FzeiBMYW5nYSA8bHVrYXN6IGF0IGxhbmdhLnBsPi4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KICMgU2VlIEMgc291cmNlIGNvZGUgZm9yIF9mdW5jdG9vbHMgY3JlZGl0cy9jb3B5cmlnaHQKIAogX19hbGxfXyA9IFsndXBkYXRlX3dyYXBwZXInLCAnd3JhcHMnLCAnV1JBUFBFUl9BU1NJR05NRU5UUycsICdXUkFQUEVSX1VQREFURVMnLAotICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnXQorICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnLAorICAgICAgICAgICAncGFydGlhbG1ldGhvZCcsICdzaW5nbGVkaXNwYXRjaCddCiAKLWZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbCwgcmVkdWNlCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitmcm9tIGFiYyBpbXBvcnQgZ2V0X2NhY2hlX3Rva2VuCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlLCBNZXRob2RUeXBlCitmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtLZXlEaWN0aW9uYXJ5CiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBSTG9jawogZXhjZXB0OgpAQCAtNDcsNyArNTUsNiBAQAogICAgICAgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZyb20gdGhlIHdyYXBwZWQKICAgICAgICBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUykKICAgICAiIiIKLSAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgIGZvciBhdHRyIGluIGFzc2lnbmVkOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIod3JhcHBlZCwgYXR0cikKQEAgLTU3LDYgKzY0LDkgQEAKICAgICAgICAgICAgIHNldGF0dHIod3JhcHBlciwgYXR0ciwgdmFsdWUpCiAgICAgZm9yIGF0dHIgaW4gdXBkYXRlZDoKICAgICAgICAgZ2V0YXR0cih3cmFwcGVyLCBhdHRyKS51cGRhdGUoZ2V0YXR0cih3cmFwcGVkLCBhdHRyLCB7fSkpCisgICAgIyBJc3N1ZSAjMTc0ODI6IHNldCBfX3dyYXBwZWRfXyBsYXN0IHNvIHdlIGRvbid0IGluYWR2ZXJ0ZW50bHkgY29weSBpdAorICAgICMgZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aGVuIHVwZGF0aW5nIF9fZGljdF9fCisgICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC03OSwyMSArODksOTEgQEAKICMjIyB0b3RhbF9vcmRlcmluZyBjbGFzcyBkZWNvcmF0b3IKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKKyMgVGhlIGNvcnJlY3Qgd2F5IHRvIGluZGljYXRlIHRoYXQgYSBjb21wYXJpc29uIG9wZXJhdGlvbiBkb2Vzbid0CisjIHJlY29nbmlzZSB0aGUgb3RoZXIgdHlwZSBpcyB0byByZXR1cm4gTm90SW1wbGVtZW50ZWQgYW5kIGxldCB0aGUKKyMgaW50ZXJwcmV0ZXIgaGFuZGxlIHJhaXNpbmcgVHlwZUVycm9yIGlmIGJvdGggb3BlcmFuZHMgcmV0dXJuCisjIE5vdEltcGxlbWVudGVkIGZyb20gdGhlaXIgcmVzcGVjdGl2ZSBjb21wYXJpc29uIG1ldGhvZHMKKyMKKyMgVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdG90YWxfb3JkZXJpbmcgbW9yZSBjb21wbGljYXRlZCwgc2luY2UKKyMgd2UgbmVlZCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmlnZ2VyIGluZmluaXRlIHJlY3Vyc2lvbiB3aGVuIHR3bworIyBkaWZmZXJlbnQgdHlwZXMgdGhhdCBib3RoIHVzZSB0aGlzIGRlY29yYXRvciBlbmNvdW50ZXIgZWFjaCBvdGhlci4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIGEgdHlwZSBpbXBsZW1lbnRzIF9fbHRfXywgaXQncyBuYXR1cmFsIHRvIGRlZmluZQorIyBfX2d0X18gYXMgc29tZXRoaW5nIGxpa2U6CisjCisjICAgIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPCBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIKKyMKKyMgSG93ZXZlciwgdXNpbmcgdGhlIG9wZXJhdG9yIHN5bnRheCBsaWtlIHRoYXQgZW5kcyB1cCBpbnZva2luZyB0aGUgZnVsbAorIyB0eXBlIGNoZWNraW5nIG1hY2hpbmVyeSBhZ2FpbiBhbmQgbWVhbnMgd2UgY2FuIGVuZCB1cCBib3VuY2luZyBiYWNrIGFuZAorIyBmb3J0aCBiZXR3ZWVuIHRoZSB0d28gb3BlcmFuZHMgdW50aWwgd2UgcnVuIG91dCBvZiBzdGFjayBzcGFjZS4KKyMKKyMgVGhlIHNvbHV0aW9uIGlzIHRvIGRlZmluZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgaW52b2tlIHRoZSBhcHByb3ByaWF0ZQorIyBtYWdpYyBtZXRob2RzIGRpcmVjdGx5LCBlbnN1cmluZyB3ZSBvbmx5IHRyeSBlYWNoIG9wZXJhbmQgb25jZSwgYW5kCisjIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpbW1lZGlhdGVseSBpZiBpdCBpcyByZXR1cm5lZCBmcm9tIHRoZQorIyB1bmRlcmx5aW5nIHVzZXIgcHJvdmlkZWQgbWV0aG9kLiBVc2luZyB0aGlzIHNjaGVtZSwgdGhlIF9fZ3RfXyBkZXJpdmVkCisjIGZyb20gYSB1c2VyIHByb3ZpZGVkIF9fbHRfXyBiZWNvbWVzOgorIworIyAgICBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKQorCitkZWYgX25vdF9vcChvcCwgb3RoZXIpOgorICAgICMgIm5vdCBhIDwgYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgICMgIm5vdCBhIDw9IGIiIGhhbmRsZXMgImEgPiBiIgorICAgICMgIm5vdCBhID49IGIiIGhhbmRsZXMgImEgPCBiIgorICAgICMgIm5vdCBhID4gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKworZGVmIF9vcF9vcl9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgImEgPCBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA8PSBiIgorICAgICMgImEgPiBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCisKK2RlZiBfbm90X29wX2FuZF9ub3RfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJub3QgKGEgPCBiIG9yIGEgPT0gYikiIGhhbmRsZXMgImEgPiBiIgorICAgICMgIm5vdCBhIDwgYiBhbmQgYSAhPSBiIiBpcyBlcXVpdmFsZW50CisgICAgIyAibm90IChhID4gYiBvciBhID09IGIpIiBoYW5kbGVzICJhIDwgYiIKKyAgICAjICJub3QgYSA+IGIgYW5kIGEgIT0gYiIgaXMgZXF1aXZhbGVudAorICAgIG9wX3Jlc3VsdCA9IG9wKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgYW5kIHNlbGYgIT0gb3RoZXIKKworZGVmIF9ub3Rfb3Bfb3JfZXEob3AsIHNlbGYsIG90aGVyKToKKyAgICAjICJub3QgYSA8PSBiIG9yIGEgPT0gYiIgaGFuZGxlcyAiYSA+PSBiIgorICAgICMgIm5vdCBhID49IGIgb3IgYSA9PSBiIiBoYW5kbGVzICJhIDw9IGIiCisgICAgb3BfcmVzdWx0ID0gb3Aob3RoZXIpCisgICAgaWYgb3BfcmVzdWx0IGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICByZXR1cm4gbm90IG9wX3Jlc3VsdCBvciBzZWxmID09IG90aGVyCisKK2RlZiBfb3BfYW5kX25vdF9lcShvcCwgc2VsZiwgb3RoZXIpOgorICAgICMgImEgPD0gYiBhbmQgbm90IGEgPT0gYiIgaGFuZGxlcyAiYSA8IGIiCisgICAgIyAiYSA+PSBiIGFuZCBub3QgYSA9PSBiIiBoYW5kbGVzICJhID4gYiIKKyAgICBvcF9yZXN1bHQgPSBvcChvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBvcF9yZXN1bHQgYW5kIHNlbGYgIT0gb3RoZXIKKwogZGVmIHRvdGFsX29yZGVyaW5nKGNscyk6CiAgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgZmlsbHMgaW4gbWlzc2luZyBvcmRlcmluZyBtZXRob2RzIiIiCiAgICAgY29udmVydCA9IHsKLSAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIpXSwKLSAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPD0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIpXSwKLSAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID4gb3RoZXIpXSwKLSAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogKG5vdCBzZWxmID49IG90aGVyKSBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3BfYW5kX25vdF9lcShzZWxmLl9fbHRfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX29yX2VxKHNlbGYuX19sdF9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19sdF9fLCBvdGhlcikpXSwKKyAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcF9vcl9lcShzZWxmLl9fbGVfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX29wX2FuZF9ub3RfZXEoc2VsZi5fX2xlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Aoc2VsZi5fX2xlX18sIG90aGVyKSldLAorICAgICAgICAnX19ndF9fJzogWygnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wX2FuZF9ub3RfZXEoc2VsZi5fX2d0X18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9vcl9lcShzZWxmLl9fZ3RfXywgc2VsZiwgb3RoZXIpKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogX25vdF9vcChzZWxmLl9fZ3RfXywgb3RoZXIpKV0sCisgICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9ub3Rfb3Bfb3JfZXEoc2VsZi5fX2dlX18sIHNlbGYsIG90aGVyKSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IF9vcF9hbmRfbm90X2VxKHNlbGYuX19nZV9fLCBzZWxmLCBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBfbm90X29wKHNlbGYuX19nZV9fLCBvdGhlcikpXQogICAgIH0KICAgICAjIEZpbmQgdXNlci1kZWZpbmVkIGNvbXBhcmlzb25zIChub3QgdGhvc2UgaW5oZXJpdGVkIGZyb20gb2JqZWN0KS4KICAgICByb290cyA9IFtvcCBmb3Igb3AgaW4gY29udmVydCBpZiBnZXRhdHRyKGNscywgb3AsIE5vbmUpIGlzIG5vdCBnZXRhdHRyKG9iamVjdCwgb3AsIE5vbmUpXQpAQCAtMTQwLDYgKzIyMCwxMDMgQEAKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIHBhcnRpYWwoKSBhcmd1bWVudCBhcHBsaWNhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBQdXJlbHkgZnVuY3Rpb25hbCwgbm8gZGVzY3JpcHRvciBiZWhhdmlvdXIKK2RlZiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAiIiJOZXcgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICBhbmQga2V5d29yZHMuCisgICAgIiIiCisgICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6CisgICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCisgICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCisgICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKKyAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCisgICAgbmV3ZnVuYy5hcmdzID0gYXJncworICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcworICAgIHJldHVybiBuZXdmdW5jCisKK3RyeToKKyAgICBmcm9tIF9mdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKKyMgRGVzY3JpcHRvciB2ZXJzaW9uCitjbGFzcyBwYXJ0aWFsbWV0aG9kKG9iamVjdCk6CisgICAgIiIiTWV0aG9kIGRlc2NyaXB0b3Igd2l0aCBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIHRoZSBnaXZlbiBhcmd1bWVudHMKKyAgICBhbmQga2V5d29yZHMuCisKKyAgICBTdXBwb3J0cyB3cmFwcGluZyBleGlzdGluZyBkZXNjcmlwdG9ycyBhbmQgaGFuZGxlcyBub24tZGVzY3JpcHRvcgorICAgIGNhbGxhYmxlcyBhcyBpbnN0YW5jZSBtZXRob2RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKKyAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZ1bmMpIGFuZCBub3QgaGFzYXR0cihmdW5jLCAiX19nZXRfXyIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ7IXJ9IGlzIG5vdCBjYWxsYWJsZSBvciBhIGRlc2NyaXB0b3IiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmMpKQorCisgICAgICAgICMgZnVuYyBjb3VsZCBiZSBhIGRlc2NyaXB0b3IgbGlrZSBjbGFzc21ldGhvZCB3aGljaCBpc24ndCBjYWxsYWJsZSwKKyAgICAgICAgIyBzbyB3ZSBjYW4ndCBpbmhlcml0IGZyb20gcGFydGlhbCAoaXQgdmVyaWZpZXMgZnVuYyBpcyBjYWxsYWJsZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBwYXJ0aWFsbWV0aG9kKToKKyAgICAgICAgICAgICMgZmxhdHRlbmluZyBpcyBtYW5kYXRvcnkgaW4gb3JkZXIgdG8gcGxhY2UgY2xzL3NlbGYgYmVmb3JlIGFsbAorICAgICAgICAgICAgIyBvdGhlciBhcmd1bWVudHMKKyAgICAgICAgICAgICMgaXQncyBhbHNvIG1vcmUgZWZmaWNpZW50IHNpbmNlIG9ubHkgb25lIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkCisgICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jLmZ1bmMKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGZ1bmMuYXJncyArIGFyZ3MKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMgPSBmdW5jLmtleXdvcmRzLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5rZXl3b3Jkcy51cGRhdGUoa2V5d29yZHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZ1bmMgPSBmdW5jCisgICAgICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzID0ga2V5d29yZHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgYXJncyA9ICIsICIuam9pbihtYXAocmVwciwgc2VsZi5hcmdzKSkKKyAgICAgICAga2V5d29yZHMgPSAiLCAiLmpvaW4oInt9PXshcn0iLmZvcm1hdChrLCB2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gc2VsZi5rZXl3b3Jkcy5pdGVtcygpKQorICAgICAgICBmb3JtYXRfc3RyaW5nID0gInttb2R1bGV9LntjbHN9KHtmdW5jfSwge2FyZ3N9LCB7a2V5d29yZHN9KSIKKyAgICAgICAgcmV0dXJuIGZvcm1hdF9zdHJpbmcuZm9ybWF0KG1vZHVsZT1zZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzPXNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYz1zZWxmLmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPWFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3Jkcz1rZXl3b3JkcykKKworICAgIGRlZiBfbWFrZV91bmJvdW5kX21ldGhvZChzZWxmKToKKyAgICAgICAgZGVmIF9tZXRob2QoKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICAgICAgICAgY2FsbF9rZXl3b3JkcyA9IHNlbGYua2V5d29yZHMuY29weSgpCisgICAgICAgICAgICBjYWxsX2tleXdvcmRzLnVwZGF0ZShrZXl3b3JkcykKKyAgICAgICAgICAgIGNsc19vcl9zZWxmLCAqcmVzdCA9IGFyZ3MKKyAgICAgICAgICAgIGNhbGxfYXJncyA9IChjbHNfb3Jfc2VsZiwpICsgc2VsZi5hcmdzICsgdHVwbGUocmVzdCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bmMoKmNhbGxfYXJncywgKipjYWxsX2tleXdvcmRzKQorICAgICAgICBfbWV0aG9kLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXworICAgICAgICByZXR1cm4gX21ldGhvZAorCisgICAgZGVmIF9fZ2V0X18oc2VsZiwgb2JqLCBjbHMpOgorICAgICAgICBnZXQgPSBnZXRhdHRyKHNlbGYuZnVuYywgIl9fZ2V0X18iLCBOb25lKQorICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgIGlmIGdldCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG5ld19mdW5jID0gZ2V0KG9iaiwgY2xzKQorICAgICAgICAgICAgaWYgbmV3X2Z1bmMgaXMgbm90IHNlbGYuZnVuYzoKKyAgICAgICAgICAgICAgICAjIEFzc3VtZSBfX2dldF9fIHJldHVybmluZyBzb21ldGhpbmcgbmV3IGluZGljYXRlcyB0aGUKKyAgICAgICAgICAgICAgICAjIGNyZWF0aW9uIG9mIGFuIGFwcHJvcHJpYXRlIGNhbGxhYmxlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFydGlhbChuZXdfZnVuYywgKnNlbGYuYXJncywgKipzZWxmLmtleXdvcmRzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Ll9fc2VsZl9fID0gbmV3X2Z1bmMuX19zZWxmX18KKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6CisgICAgICAgICAgICAjIElmIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IgZGlkbid0IGRvIGFueXRoaW5nLCB0cmVhdCB0aGlzCisgICAgICAgICAgICAjIGxpa2UgYW4gaW5zdGFuY2UgbWV0aG9kCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlX3VuYm91bmRfbWV0aG9kKCkuX19nZXRfXyhvYmosIGNscykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9faXNhYnN0cmFjdG1ldGhvZF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLmZ1bmMsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIsIEZhbHNlKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgTFJVIENhY2hlIGZ1bmN0aW9uIGRlY29yYXRvcgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjIwLDcgKzM5Nyw2IEBACiAgICAgUFJFViwgTkVYVCwgS0VZLCBSRVNVTFQgPSAwLCAxLCAyLCAzICAgIyBuYW1lcyBmb3IgdGhlIGxpbmsgZmllbGRzCiAKICAgICBkZWYgZGVjb3JhdGluZ19mdW5jdGlvbih1c2VyX2Z1bmN0aW9uKToKLQogICAgICAgICBjYWNoZSA9IHt9CiAgICAgICAgIGhpdHMgPSBtaXNzZXMgPSAwCiAgICAgICAgIGZ1bGwgPSBGYWxzZQpAQCAtMzI5LDMgKzUwNSwyMTAgQEAKICAgICAgICAgcmV0dXJuIHVwZGF0ZV93cmFwcGVyKHdyYXBwZXIsIHVzZXJfZnVuY3Rpb24pCiAKICAgICByZXR1cm4gZGVjb3JhdGluZ19mdW5jdGlvbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgc2luZ2xlZGlzcGF0Y2goKSAtIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIGRlY29yYXRvcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIF9jM19tZXJnZShzZXF1ZW5jZXMpOgorICAgICIiIk1lcmdlcyBNUk9zIGluICpzZXF1ZW5jZXMqIHRvIGEgc2luZ2xlIE1STyB1c2luZyB0aGUgQzMgYWxnb3JpdGhtLgorCisgICAgQWRhcHRlZCBmcm9tIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy4KKworICAgICIiIgorICAgIHJlc3VsdCA9IFtdCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgc2VxdWVuY2VzID0gW3MgZm9yIHMgaW4gc2VxdWVuY2VzIGlmIHNdICAgIyBwdXJnZSBlbXB0eSBzZXF1ZW5jZXMKKyAgICAgICAgaWYgbm90IHNlcXVlbmNlczoKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZm9yIHMxIGluIHNlcXVlbmNlczogICAjIGZpbmQgbWVyZ2UgY2FuZGlkYXRlcyBhbW9uZyBzZXEgaGVhZHMKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHMxWzBdCisgICAgICAgICAgICBmb3IgczIgaW4gc2VxdWVuY2VzOgorICAgICAgICAgICAgICAgIGlmIGNhbmRpZGF0ZSBpbiBzMlsxOl06CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsgICAgICAjIHJlamVjdCB0aGUgY3VycmVudCBoZWFkLCBpdCBhcHBlYXJzIGxhdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBjYW5kaWRhdGU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkluY29uc2lzdGVudCBoaWVyYXJjaHkiKQorICAgICAgICByZXN1bHQuYXBwZW5kKGNhbmRpZGF0ZSkKKyAgICAgICAgIyByZW1vdmUgdGhlIGNob3NlbiBjYW5kaWRhdGUKKyAgICAgICAgZm9yIHNlcSBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICBpZiBzZXFbMF0gPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgIGRlbCBzZXFbMF0KKworZGVmIF9jM19tcm8oY2xzLCBhYmNzPU5vbmUpOgorICAgICIiIkNvbXB1dGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciB1c2luZyBleHRlbmRlZCBDMyBsaW5lYXJpemF0aW9uLgorCisgICAgSWYgbm8gKmFiY3MqIGFyZSBnaXZlbiwgdGhlIGFsZ29yaXRobSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlIGJ1aWx0LWluIEMzCisgICAgbGluZWFyaXphdGlvbiB1c2VkIGZvciBtZXRob2QgcmVzb2x1dGlvbi4KKworICAgIElmIGdpdmVuLCAqYWJjcyogaXMgYSBsaXN0IG9mIGFic3RyYWN0IGJhc2UgY2xhc3NlcyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZAorICAgIGludG8gdGhlIHJlc3VsdGluZyBNUk8uIFVucmVsYXRlZCBBQkNzIGFyZSBpZ25vcmVkIGFuZCBkb24ndCBlbmQgdXAgaW4gdGhlCisgICAgcmVzdWx0LiBUaGUgYWxnb3JpdGhtIGluc2VydHMgQUJDcyB3aGVyZSB0aGVpciBmdW5jdGlvbmFsaXR5IGlzIGludHJvZHVjZWQsCisgICAgaS5lLiBpc3N1YmNsYXNzKGNscywgYWJjKSByZXR1cm5zIFRydWUgZm9yIHRoZSBjbGFzcyBpdHNlbGYgYnV0IHJldHVybnMKKyAgICBGYWxzZSBmb3IgYWxsIGl0cyBkaXJlY3QgYmFzZSBjbGFzc2VzLiBJbXBsaWNpdCBBQkNzIGZvciBhIGdpdmVuIGNsYXNzCisgICAgKGVpdGhlciByZWdpc3RlcmVkIG9yIGluZmVycmVkIGZyb20gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lhbCBtZXRob2QgbGlrZQorICAgIF9fbGVuX18pIGFyZSBpbnNlcnRlZCBkaXJlY3RseSBhZnRlciB0aGUgbGFzdCBBQkMgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlCisgICAgTVJPIG9mIHNhaWQgY2xhc3MuIElmIHR3byBpbXBsaWNpdCBBQkNzIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gdGhlCisgICAgcmVzdWx0aW5nIE1STywgdGhlaXIgb3JkZXJpbmcgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdHlwZXMgaW4gKmFiY3MqLgorCisgICAgIiIiCisgICAgZm9yIGksIGJhc2UgaW4gZW51bWVyYXRlKHJldmVyc2VkKGNscy5fX2Jhc2VzX18pKToKKyAgICAgICAgaWYgaGFzYXR0cihiYXNlLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgYm91bmRhcnkgPSBsZW4oY2xzLl9fYmFzZXNfXykgLSBpCisgICAgICAgICAgICBicmVhayAgICMgQmFzZXMgdXAgdG8gdGhlIGxhc3QgZXhwbGljaXQgQUJDIGFyZSBjb25zaWRlcmVkIGZpcnN0LgorICAgIGVsc2U6CisgICAgICAgIGJvdW5kYXJ5ID0gMAorICAgIGFiY3MgPSBsaXN0KGFiY3MpIGlmIGFiY3MgZWxzZSBbXQorICAgIGV4cGxpY2l0X2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fWzpib3VuZGFyeV0pCisgICAgYWJzdHJhY3RfYmFzZXMgPSBbXQorICAgIG90aGVyX2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fW2JvdW5kYXJ5Ol0pCisgICAgZm9yIGJhc2UgaW4gYWJjczoKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbHMsIGJhc2UpIGFuZCBub3QgYW55KAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYiwgYmFzZSkgZm9yIGIgaW4gY2xzLl9fYmFzZXNfXworICAgICAgICAgICAgKToKKyAgICAgICAgICAgICMgSWYgKmNscyogaXMgdGhlIGNsYXNzIHRoYXQgaW50cm9kdWNlcyBiZWhhdmlvdXIgZGVzY3JpYmVkIGJ5CisgICAgICAgICAgICAjIGFuIEFCQyAqYmFzZSosIGluc2VydCBzYWlkIEFCQyB0byBpdHMgTVJPLgorICAgICAgICAgICAgYWJzdHJhY3RfYmFzZXMuYXBwZW5kKGJhc2UpCisgICAgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXM6CisgICAgICAgIGFiY3MucmVtb3ZlKGJhc2UpCisgICAgZXhwbGljaXRfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gZXhwbGljaXRfYmFzZXNdCisgICAgYWJzdHJhY3RfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXNdCisgICAgb3RoZXJfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gb3RoZXJfYmFzZXNdCisgICAgcmV0dXJuIF9jM19tZXJnZSgKKyAgICAgICAgW1tjbHNdXSArCisgICAgICAgIGV4cGxpY2l0X2MzX21yb3MgKyBhYnN0cmFjdF9jM19tcm9zICsgb3RoZXJfYzNfbXJvcyArCisgICAgICAgIFtleHBsaWNpdF9iYXNlc10gKyBbYWJzdHJhY3RfYmFzZXNdICsgW290aGVyX2Jhc2VzXQorICAgICkKKworZGVmIF9jb21wb3NlX21ybyhjbHMsIHR5cGVzKToKKyAgICAiIiJDYWxjdWxhdGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgYSBnaXZlbiBjbGFzcyAqY2xzKi4KKworICAgIEluY2x1ZGVzIHJlbGV2YW50IGFic3RyYWN0IGJhc2UgY2xhc3NlcyAod2l0aCB0aGVpciByZXNwZWN0aXZlIGJhc2VzKSBmcm9tCisgICAgdGhlICp0eXBlcyogaXRlcmFibGUuIFVzZXMgYSBtb2RpZmllZCBDMyBsaW5lYXJpemF0aW9uIGFsZ29yaXRobS4KKworICAgICIiIgorICAgIGJhc2VzID0gc2V0KGNscy5fX21yb19fKQorICAgICMgUmVtb3ZlIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgX19tcm9fXyBvciB1bnJlbGF0ZWQuCisgICAgZGVmIGlzX3JlbGF0ZWQodHlwKToKKyAgICAgICAgcmV0dXJuICh0eXAgbm90IGluIGJhc2VzIGFuZCBoYXNhdHRyKHR5cCwgJ19fbXJvX18nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlzc3ViY2xhc3MoY2xzLCB0eXApKQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgaXNfcmVsYXRlZChuKV0KKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBzdHJpY3QgYmFzZXMgb2Ygb3RoZXIgZW50cmllcyAodGhleSB3aWxsIGVuZCB1cAorICAgICMgaW4gdGhlIE1STyBhbnl3YXkuCisgICAgZGVmIGlzX3N0cmljdF9iYXNlKHR5cCk6CisgICAgICAgIGZvciBvdGhlciBpbiB0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cCAhPSBvdGhlciBhbmQgdHlwIGluIG90aGVyLl9fbXJvX186CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdHlwZXMgPSBbbiBmb3IgbiBpbiB0eXBlcyBpZiBub3QgaXNfc3RyaWN0X2Jhc2UobildCisgICAgIyBTdWJjbGFzc2VzIG9mIHRoZSBBQkNzIGluICp0eXBlcyogd2hpY2ggYXJlIGFsc28gaW1wbGVtZW50ZWQgYnkKKyAgICAjICpjbHMqIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBBQkMgb3JkZXJpbmcuCisgICAgdHlwZV9zZXQgPSBzZXQodHlwZXMpCisgICAgbXJvID0gW10KKyAgICBmb3IgdHlwIGluIHR5cGVzOgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBzdWIgaW4gdHlwLl9fc3ViY2xhc3Nlc19fKCk6CisgICAgICAgICAgICBpZiBzdWIgbm90IGluIGJhc2VzIGFuZCBpc3N1YmNsYXNzKGNscywgc3ViKToKKyAgICAgICAgICAgICAgICBmb3VuZC5hcHBlbmQoW3MgZm9yIHMgaW4gc3ViLl9fbXJvX18gaWYgcyBpbiB0eXBlX3NldF0pCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIG1yby5hcHBlbmQodHlwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBGYXZvciBzdWJjbGFzc2VzIHdpdGggdGhlIGJpZ2dlc3QgbnVtYmVyIG9mIHVzZWZ1bCBiYXNlcworICAgICAgICBmb3VuZC5zb3J0KGtleT1sZW4sIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZm9yIHN1YiBpbiBmb3VuZDoKKyAgICAgICAgICAgIGZvciBzdWJjbHMgaW4gc3ViOgorICAgICAgICAgICAgICAgIGlmIHN1YmNscyBub3QgaW4gbXJvOgorICAgICAgICAgICAgICAgICAgICBtcm8uYXBwZW5kKHN1YmNscykKKyAgICByZXR1cm4gX2MzX21ybyhjbHMsIGFiY3M9bXJvKQorCitkZWYgX2ZpbmRfaW1wbChjbHMsIHJlZ2lzdHJ5KToKKyAgICAiIiJSZXR1cm5zIHRoZSBiZXN0IG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZyb20gKnJlZ2lzdHJ5KiBmb3IgdHlwZSAqY2xzKi4KKworICAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzIG1ldGhvZAorICAgIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorCisgICAgTm90ZTogaWYgKnJlZ2lzdHJ5KiBkb2VzIG5vdCBjb250YWluIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYmFzZQorICAgICpvYmplY3QqIHR5cGUsIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOb25lLgorCisgICAgIiIiCisgICAgbXJvID0gX2NvbXBvc2VfbXJvKGNscywgcmVnaXN0cnkua2V5cygpKQorICAgIG1hdGNoID0gTm9uZQorICAgIGZvciB0IGluIG1ybzoKKyAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIElmICptYXRjaCogaXMgYW4gaW1wbGljaXQgQUJDIGJ1dCB0aGVyZSBpcyBhbm90aGVyIHVucmVsYXRlZCwKKyAgICAgICAgICAgICMgZXF1YWxseSBtYXRjaGluZyBpbXBsaWNpdCBBQkMsIHJlZnVzZSB0aGUgdGVtcHRhdGlvbiB0byBndWVzcy4KKyAgICAgICAgICAgIGlmICh0IGluIHJlZ2lzdHJ5IGFuZCB0IG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoIG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc3N1YmNsYXNzKG1hdGNoLCB0KSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IHt9IG9yIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG1hdGNoLCB0KSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6CisgICAgICAgICAgICBtYXRjaCA9IHQKKyAgICByZXR1cm4gcmVnaXN0cnkuZ2V0KG1hdGNoKQorCitkZWYgc2luZ2xlZGlzcGF0Y2goZnVuYyk6CisgICAgIiIiU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yLgorCisgICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSBnZW5lcmljIGZ1bmN0aW9uLCB3aGljaCBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICBiZWhhdmlvdXJzIGRlcGVuZGluZyB1cG9uIHRoZSB0eXBlIG9mIGl0cyBmaXJzdCBhcmd1bWVudC4gVGhlIGRlY29yYXRlZAorICAgIGZ1bmN0aW9uIGFjdHMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCBhZGRpdGlvbmFsCisgICAgaW1wbGVtZW50YXRpb25zIGNhbiBiZSByZWdpc3RlcmVkIHVzaW5nIHRoZSByZWdpc3RlcigpIGF0dHJpYnV0ZSBvZiB0aGUKKyAgICBnZW5lcmljIGZ1bmN0aW9uLgorCisgICAgIiIiCisgICAgcmVnaXN0cnkgPSB7fQorICAgIGRpc3BhdGNoX2NhY2hlID0gV2Vha0tleURpY3Rpb25hcnkoKQorICAgIGNhY2hlX3Rva2VuID0gTm9uZQorCisgICAgZGVmIGRpc3BhdGNoKGNscyk6CisgICAgICAgICIiImdlbmVyaWNfZnVuYy5kaXNwYXRjaChjbHMpIC0+IDxmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj4KKworICAgICAgICBSdW5zIHRoZSBkaXNwYXRjaCBhbGdvcml0aG0gdG8gcmV0dXJuIHRoZSBiZXN0IGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuICpjbHMqIHJlZ2lzdGVyZWQgb24gKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3VycmVudF90b2tlbiA9IGdldF9jYWNoZV90b2tlbigpCisgICAgICAgICAgICBpZiBjYWNoZV90b2tlbiAhPSBjdXJyZW50X3Rva2VuOgorICAgICAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBjYWNoZV90b2tlbiA9IGN1cnJlbnRfdG9rZW4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wbCA9IGRpc3BhdGNoX2NhY2hlW2Nsc10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcGwgPSByZWdpc3RyeVtjbHNdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaW1wbCA9IF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSkKKyAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlW2Nsc10gPSBpbXBsCisgICAgICAgIHJldHVybiBpbXBsCisKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCBmdW5jPU5vbmUpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMucmVnaXN0ZXIoY2xzLCBmdW5jKSAtPiBmdW5jCisKKyAgICAgICAgUmVnaXN0ZXJzIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gKmNscyogb24gYSAqZ2VuZXJpY19mdW5jKi4KKworICAgICAgICAiIiIKKyAgICAgICAgbm9ubG9jYWwgY2FjaGVfdG9rZW4KKyAgICAgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3RlcihjbHMsIGYpCisgICAgICAgIHJlZ2lzdHJ5W2Nsc10gPSBmdW5jCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIE5vbmUgYW5kIGhhc2F0dHIoY2xzLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgIHJldHVybiBkaXNwYXRjaChhcmdzWzBdLl9fY2xhc3NfXykoKmFyZ3MsICoqa3cpCisKKyAgICByZWdpc3RyeVtvYmplY3RdID0gZnVuYworICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgorICAgIHdyYXBwZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaAorICAgIHdyYXBwZXIucmVnaXN0cnkgPSBNYXBwaW5nUHJveHlUeXBlKHJlZ2lzdHJ5KQorICAgIHdyYXBwZXIuX2NsZWFyX2NhY2hlID0gZGlzcGF0Y2hfY2FjaGUuY2xlYXIKKyAgICB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmdW5jKQorICAgIHJldHVybiB3cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKaW5kZXggMzQwYzAwNC4uY2E0YTUxMCAxMDA2NDQKLS0tIGEvTGliL2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtNyw3ICs3LDggQEAKIGltcG9ydCBzdGF0CiAKIF9fYWxsX18gPSBbJ2NvbW1vbnByZWZpeCcsICdleGlzdHMnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLCAnZ2V0bXRpbWUnLAotICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnXQorICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywKKyAgICAgICAgICAgJ3NhbWVzdGF0J10KIAogCiAjIERvZXMgYSBwYXRoIGV4aXN0PwpAQCAtMTYsNyArMTcsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yNyw3ICsyOCw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCiAKQEAgLTM5LDcgKzQwLDcgQEAKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChzKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQogCkBAIC03NSw2ICs3NiwzMSBAQAogICAgICAgICAgICAgcmV0dXJuIHMxWzppXQogICAgIHJldHVybiBzMQogCisjIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQorIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZXN0YXQoczEsIHMyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHJldHVybiAoczEuc3RfaW5vID09IHMyLnN0X2lubyBhbmQKKyAgICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYpCisKKworIyBBcmUgdHdvIGZpbGVuYW1lcyByZWFsbHkgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZT8KK2RlZiBzYW1lZmlsZShmMSwgZjIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgorICAgIHMxID0gb3Muc3RhdChmMSkKKyAgICBzMiA9IG9zLnN0YXQoZjIpCisgICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKKworCisjIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KKyMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQorZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHMxID0gb3MuZnN0YXQoZnAxKQorICAgIHMyID0gb3MuZnN0YXQoZnAyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKwogIyBTcGxpdCBhIHBhdGggaW4gcm9vdCBhbmQgZXh0ZW5zaW9uLgogIyBUaGUgZXh0ZW5zaW9uIGlzIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZG90IGluIHRoZSBsYXN0CiAjIHBhdGhuYW1lIGNvbXBvbmVudDsgdGhlIHJvb3QgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhhdC4KZGlmZiAtLWdpdCBhL0xpYi9nZXRwYXNzLnB5IGIvTGliL2dldHBhc3MucHkKaW5kZXggMDA0NDc0Mi4uNTNjMzhiOCAxMDA2NDQKLS0tIGEvTGliL2dldHBhc3MucHkKKysrIGIvTGliL2dldHBhc3MucHkKQEAgLTE1LDcgKzE1LDExIEBACiAjICAgICAgICAgIEd1aWRvIHZhbiBSb3NzdW0gKFdpbmRvd3Mgc3VwcG9ydCBhbmQgY2xlYW51cCkKICMgICAgICAgICAgR3JlZ29yeSBQLiBTbWl0aCAodHR5IHN1cHBvcnQgJiBHZXRQYXNzV2FybmluZykKIAotaW1wb3J0IG9zLCBzeXMsIHdhcm5pbmdzCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncwogCiBfX2FsbF9fID0gWyJnZXRwYXNzIiwiZ2V0dXNlciIsIkdldFBhc3NXYXJuaW5nIl0KIApAQCAtMzgsNTIgKzQyLDU3IEBACiAKICAgICBBbHdheXMgcmVzdG9yZXMgdGVybWluYWwgc2V0dGluZ3MgYmVmb3JlIHJldHVybmluZy4KICAgICAiIiIKLSAgICBmZCA9IE5vbmUKLSAgICB0dHkgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICAjIEFsd2F5cyB0cnkgcmVhZGluZyBhbmQgd3JpdGluZyBkaXJlY3RseSBvbiB0aGUgdHR5IGZpcnN0LgotICAgICAgICBmZCA9IG9zLm9wZW4oJy9kZXYvdHR5Jywgb3MuT19SRFdSfG9zLk9fTk9DVFRZKQotICAgICAgICB0dHkgPSBvcy5mZG9wZW4oZmQsICd3KycsIDEpCi0gICAgICAgIGlucHV0ID0gdHR5Ci0gICAgICAgIGlmIG5vdCBzdHJlYW06Ci0gICAgICAgICAgICBzdHJlYW0gPSB0dHkKLSAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgotICAgICAgICAjIElmIHRoYXQgZmFpbHMsIHNlZSBpZiBzdGRpbiBjYW4gYmUgY29udHJvbGxlZC4KKyAgICBwYXNzd2QgPSBOb25lCisgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQotICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCi0gICAgICAgIGlucHV0ID0gc3lzLnN0ZGluCi0gICAgICAgIGlmIG5vdCBzdHJlYW06Ci0gICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCi0KLSAgICBpZiBmZCBpcyBub3QgTm9uZToKLSAgICAgICAgcGFzc3dkID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvbGQgPSB0ZXJtaW9zLnRjZ2V0YXR0cihmZCkgICAgICMgYSBjb3B5IHRvIHNhdmUKLSAgICAgICAgICAgIG5ldyA9IG9sZFs6XQotICAgICAgICAgICAgbmV3WzNdICY9IH50ZXJtaW9zLkVDSE8gICMgMyA9PSAnbGZsYWdzJwotICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzID0gdGVybWlvcy5UQ1NBRkxVU0gKLSAgICAgICAgICAgIGlmIGhhc2F0dHIodGVybWlvcywgJ1RDU0FTT0ZUJyk6Ci0gICAgICAgICAgICAgICAgdGNzZXRhdHRyX2ZsYWdzIHw9IHRlcm1pb3MuVENTQVNPRlQKKyAgICAgICAgICAgICMgQWx3YXlzIHRyeSByZWFkaW5nIGFuZCB3cml0aW5nIGRpcmVjdGx5IG9uIHRoZSB0dHkgZmlyc3QuCisgICAgICAgICAgICBmZCA9IG9zLm9wZW4oJy9kZXYvdHR5Jywgb3MuT19SRFdSfG9zLk9fTk9DVFRZKQorICAgICAgICAgICAgdHR5ID0gaW8uRmlsZUlPKGZkLCAndysnKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dCh0dHkpCisgICAgICAgICAgICBpbnB1dCA9IGlvLlRleHRJT1dyYXBwZXIodHR5KQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChpbnB1dCkKKyAgICAgICAgICAgIGlmIG5vdCBzdHJlYW06CisgICAgICAgICAgICAgICAgc3RyZWFtID0gaW5wdXQKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgSWYgdGhhdCBmYWlscywgc2VlIGlmIHN0ZGluIGNhbiBiZSBjb250cm9sbGVkLgorICAgICAgICAgICAgc3RhY2suY2xvc2UoKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG5ldykKLSAgICAgICAgICAgICAgICBwYXNzd2QgPSBfcmF3X2lucHV0KHByb21wdCwgc3RyZWFtLCBpbnB1dD1pbnB1dCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRjc2V0YXR0cl9mbGFncywgb2xkKQotICAgICAgICAgICAgICAgIHN0cmVhbS5mbHVzaCgpICAjIGlzc3VlNzIwOAotICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvcjoKLSAgICAgICAgICAgIGlmIHBhc3N3ZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAjIF9yYXdfaW5wdXQgc3VjY2VlZGVkLiAgVGhlIGZpbmFsIHRjc2V0YXR0ciBmYWlsZWQuICBSZXJhaXNlCi0gICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHRlcm1pbmFsIGluIGFuIHVua25vd24gc3RhdGUuCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICMgV2UgY2FuJ3QgY29udHJvbCB0aGUgdHR5IG9yIHN0ZGluLiAgR2l2ZSB1cCBhbmQgdXNlIG5vcm1hbCBJTy4KLSAgICAgICAgICAgICMgZmFsbGJhY2tfZ2V0cGFzcygpIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nLgotICAgICAgICAgICAgZGVsIGlucHV0LCB0dHkgICMgY2xlYW4gdXAgdW51c2VkIGZpbGUgb2JqZWN0cyBiZWZvcmUgYmxvY2tpbmcKLSAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisgICAgICAgICAgICAgICAgZmQgPSBzeXMuc3RkaW4uZmlsZW5vKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGZkID0gTm9uZQorICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisgICAgICAgICAgICBpbnB1dCA9IHN5cy5zdGRpbgorICAgICAgICAgICAgaWYgbm90IHN0cmVhbToKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBzeXMuc3RkZXJyCiAKLSAgICBzdHJlYW0ud3JpdGUoJ1xuJykKLSAgICByZXR1cm4gcGFzc3dkCisgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9sZCA9IHRlcm1pb3MudGNnZXRhdHRyKGZkKSAgICAgIyBhIGNvcHkgdG8gc2F2ZQorICAgICAgICAgICAgICAgIG5ldyA9IG9sZFs6XQorICAgICAgICAgICAgICAgIG5ld1szXSAmPSB+dGVybWlvcy5FQ0hPICAjIDMgPT0gJ2xmbGFncycKKyAgICAgICAgICAgICAgICB0Y3NldGF0dHJfZmxhZ3MgPSB0ZXJtaW9zLlRDU0FGTFVTSAorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIodGVybWlvcywgJ1RDU0FTT0ZUJyk6CisgICAgICAgICAgICAgICAgICAgIHRjc2V0YXR0cl9mbGFncyB8PSB0ZXJtaW9zLlRDU0FTT0ZUCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXJtaW9zLnRjc2V0YXR0cihmZCwgdGNzZXRhdHRyX2ZsYWdzLCBuZXcpCisgICAgICAgICAgICAgICAgICAgIHBhc3N3ZCA9IF9yYXdfaW5wdXQocHJvbXB0LCBzdHJlYW0sIGlucHV0PWlucHV0KQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHRlcm1pb3MudGNzZXRhdHRyKGZkLCB0Y3NldGF0dHJfZmxhZ3MsIG9sZCkKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkgICMgaXNzdWU3MjA4CisgICAgICAgICAgICBleGNlcHQgdGVybWlvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBwYXNzd2QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgX3Jhd19pbnB1dCBzdWNjZWVkZWQuICBUaGUgZmluYWwgdGNzZXRhdHRyIGZhaWxlZC4gIFJlcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHRlcm1pbmFsIGluIGFuIHVua25vd24gc3RhdGUuCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgIyBXZSBjYW4ndCBjb250cm9sIHRoZSB0dHkgb3Igc3RkaW4uICBHaXZlIHVwIGFuZCB1c2Ugbm9ybWFsIElPLgorICAgICAgICAgICAgICAgICMgZmFsbGJhY2tfZ2V0cGFzcygpIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSB3YXJuaW5nLgorICAgICAgICAgICAgICAgIGlmIHN0cmVhbSBpcyBub3QgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgICMgY2xlYW4gdXAgdW51c2VkIGZpbGUgb2JqZWN0cyBiZWZvcmUgYmxvY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgc3RhY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHBhc3N3ZCA9IGZhbGxiYWNrX2dldHBhc3MocHJvbXB0LCBzdHJlYW0pCisKKyAgICAgICAgc3RyZWFtLndyaXRlKCdcbicpCisgICAgICAgIHJldHVybiBwYXNzd2QKIAogCiBkZWYgd2luX2dldHBhc3MocHJvbXB0PSdQYXNzd29yZDogJywgc3RyZWFtPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL2dldHRleHQucHkgYi9MaWIvZ2V0dGV4dC5weQppbmRleCBlNDNmMDQ0Li4wNWQ5YzFlIDEwMDY0NAotLS0gYS9MaWIvZ2V0dGV4dC5weQorKysgYi9MaWIvZ2V0dGV4dC5weQpAQCAtMjQ0LDcgKzI0NCw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uLCBtc2djb3VudCwgbWFzdGVyaWR4LCB0cmFuc2lkeCA9IHVucGFjaygnPjRJJywgYnVmWzQ6MjBdKQogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQogICAgICAgICAjIE5vdyBwdXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIC5tbyBmaWxlIGJ1ZmZlciBpbnRvIHRoZSBjYXRhbG9nCiAgICAgICAgICMgZGljdGlvbmFyeS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbXNnY291bnQpOgpAQCAtMjU2LDcgKzI1Niw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gYnVmW21vZmY6bWVuZF0KICAgICAgICAgICAgICAgICB0bXNnID0gYnVmW3RvZmY6dGVuZF0KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnRmlsZSBpcyBjb3JydXB0JywgZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFNlZSBpZiB3ZSdyZSBsb29raW5nIGF0IEdOVSAubW8gY29udmVudGlvbnMgZm9yIG1ldGFkYXRhCiAgICAgICAgICAgICBpZiBtbGVuID09IDA6CiAgICAgICAgICAgICAgICAgIyBDYXRhbG9nIGRlc2NyaXB0aW9uCkBAIC0zOTgsNyArMzk4LDcgQEAKICAgICBpZiBub3QgbW9maWxlczoKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQorICAgICAgICByYWlzZSBPU0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKICAgICAjIEF2b2lkIG9wZW5pbmcsIHJlYWRpbmcsIGFuZCBwYXJzaW5nIHRoZSAubW8gZmlsZSBhZnRlciBpdCdzIGJlZW4gZG9uZQogICAgICMgb25jZS4KICAgICByZXN1bHQgPSBOb25lCkBAIC00NjAsNyArNDYwLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQuZ2V0dGV4dChtZXNzYWdlKQogCkBAIC00NjgsNyArNDY4LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQubGdldHRleHQobWVzc2FnZSkKIApAQCAtNDc2LDcgKzQ3Niw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CkBAIC00ODcsNyArNDg3LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG4gPT0gMToKICAgICAgICAgICAgIHJldHVybiBtc2dpZDEKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9nbG9iLnB5IGIvTGliL2dsb2IucHkKaW5kZXggMWY2MDI2NS4uZTM4OGI1ZiAxMDA2NDQKLS0tIGEvTGliL2dsb2IucHkKKysrIGIvTGliL2dsb2IucHkKQEAgLTMyLDggKzMyLDcgQEAKICAgICAgICAgcmV0dXJuCiAgICAgZGlybmFtZSwgYmFzZW5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgIGlmIG5vdCBkaXJuYW1lOgotICAgICAgICBmb3IgbmFtZSBpbiBnbG9iMShOb25lLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lCisgICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCiAgICAgICAgIHJldHVybgogICAgICMgYG9zLnBhdGguc3BsaXQoKWAgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmIGFzIGEgZGlybmFtZSBpZiBpdCBpcyBhCiAgICAgIyBkcml2ZSBvciBVTkMgcGF0aC4gIFByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGlmIGEgZHJpdmUgb3IgVU5DIHBhdGgKQEAgLTYyLDcgKzYxLDcgQEAKICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbm90IF9pc2hpZGRlbihwYXR0ZXJuKToKICAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBuYW1lcyBpZiBub3QgX2lzaGlkZGVuKHgpXQpAQCAtODAsOCArNzksOCBAQAogICAgIHJldHVybiBbXQogCiAKLW1hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnWyo/W10nKQotbWFnaWNfY2hlY2tfYnl0ZXMgPSByZS5jb21waWxlKGInWyo/W10nKQorbWFnaWNfY2hlY2sgPSByZS5jb21waWxlKCcoWyo/W10pJykKK21hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJyhbKj9bXSknKQogCiBkZWYgaGFzX21hZ2ljKHMpOgogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgpAQCAtOTIsMyArOTEsMTUgQEAKIAogZGVmIF9pc2hpZGRlbihwYXRoKToKICAgICByZXR1cm4gcGF0aFswXSBpbiAoJy4nLCBiJy4nWzBdKQorCitkZWYgZXNjYXBlKHBhdGhuYW1lKToKKyAgICAiIiJFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAiIiIKKyAgICAjIEVzY2FwaW5nIGlzIGRvbmUgYnkgd3JhcHBpbmcgYW55IG9mICIqP1siIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLgorICAgICMgTWV0YWNoYXJhY3RlcnMgZG8gbm90IHdvcmsgaW4gdGhlIGRyaXZlIHBhcnQgYW5kIHNob3VsZG4ndCBiZSBlc2NhcGVkLgorICAgIGRyaXZlLCBwYXRobmFtZSA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRobmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhuYW1lLCBieXRlcyk6CisgICAgICAgIHBhdGhuYW1lID0gbWFnaWNfY2hlY2tfYnl0ZXMuc3ViKGJyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrLnN1YihyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICByZXR1cm4gZHJpdmUgKyBwYXRobmFtZQpkaWZmIC0tZ2l0IGEvTGliL2d6aXAucHkgYi9MaWIvZ3ppcC5weQppbmRleCAyZmQwM2ZhLi44ZDIxZmU0IDEwMDY0NAotLS0gYS9MaWIvZ3ppcC5weQorKysgYi9MaWIvZ3ppcC5weQpAQCAtMjMsOSArMjMsOSBAQAogICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgogICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yICJhYiIgZm9yCisgICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzCisgICAgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAogICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvcjoKICAgICBHemlwRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKQEAgLTY1LDkgKzY1LDYgQEAKICAgICAjIG9yIHVuc2lnbmVkLgogICAgIG91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCB2YWx1ZSkpCiAKLWRlZiByZWFkMzIoaW5wdXQpOgotICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI8SSIsIGlucHV0LnJlYWQoNCkpWzBdCi0KIGNsYXNzIF9QYWRkZWRGaWxlOgogICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCiAgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKQEAgLTE1NCwxMSArMTUxLDExIEBACiAgICAgICAgIGZpbGVvYmosIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsCiAgICAgICAgIGFuZCBpbiB0aGlzIGNhc2UgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCi0gICAgICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgJ3InLCAncmInLCAnYScsICdhYicsICd3Jywgb3IgJ3diJywKLSAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAorICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsICd3YicsICd4Jywgb3IKKyAgICAgICAgJ3hiJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0CiAgICAgICAgIGlzIHRoZSBtb2RlIG9mIGZpbGVvYmogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgJ3JiJy4KICAgICAgICAgQSBtb2RlIG9mICdyJyBpcyBlcXVpdmFsZW50IHRvIG9uZSBvZiAncmInLCBhbmQgc2ltaWxhcmx5IGZvciAndycgYW5kCi0gICAgICAgICd3YicsIGFuZCAnYScgYW5kICdhYicuCisgICAgICAgICd3YicsICdhJyBhbmQgJ2FiJywgYW5kICd4JyBhbmQgJ3hiJy4KIAogICAgICAgICBUaGUgY29tcHJlc3NsZXZlbCBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5IGNvbnRyb2xsaW5nIHRoZQogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCiAgICAgICAgICAgICBmaWxlb2JqID0gX1BhZGRlZEZpbGUoZmlsZW9iaikKIAotICAgICAgICBlbGlmIG1vZGUuc3RhcnRzd2l0aCgoJ3cnLCAnYScpKToKKyAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnLCAneCcpKToKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFdSSVRFCiAgICAgICAgICAgICBzZWxmLl9pbml0X3dyaXRlKGZpbGVuYW1lKQogICAgICAgICAgICAgc2VsZi5jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooY29tcHJlc3NsZXZlbCwKQEAgLTI4MSwyOCArMjc4LDMyIEBACiAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpICYgMHhmZmZmZmZmZgogICAgICAgICBzZWxmLnNpemUgPSAwCiAKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChuKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKG4gLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCisgICAgICAgICAgICBkYXRhICs9IGIKKyAgICAgICAgcmV0dXJuIGRhdGEKKwogICAgIGRlZiBfcmVhZF9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgbWFnaWMgPSBzZWxmLmZpbGVvYmoucmVhZCgyKQogICAgICAgICBpZiBtYWdpYyA9PSBiJyc6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKIAotICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKKyAgICAgICAgbWV0aG9kLCBmbGFnLCBzZWxmLm10aW1lID0gc3RydWN0LnVucGFjaygiPEJCSXh4Iiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKICAgICAgICAgaWYgbWV0aG9kICE9IDg6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCi0gICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCi0gICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50Ci0gICAgICAgICAgICB4bGVuID0gb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgeGxlbiA9IHhsZW4gKyAyNTYqb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoeGxlbikKKyAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKICAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgogICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTMxNiwxOCArMzE3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQwogCiAgICAgICAgIHVudXNlZCA9IHNlbGYuZmlsZW9iai51bnVzZWQoKQogICAgICAgICBpZiB1bnVzZWQ6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3ModW51c2VkKQogICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSh1bmNvbXByZXNzKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAid3JpdGUoKSBvbiByZWFkLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zNDgsMjcgKzM1MCwyMyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICByZWFkc2l6ZSA9IDEwMjQKICAgICAgICAgaWYgc2l6ZSA8IDA6ICAgICAgICAjIGdldCB0aGUgd2hvbGUgdGhpbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKHJlYWRzaXplKQotICAgICAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCisgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdoaWxlIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWQocmVhZHNpemUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCiAKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KQEAgLTM4MSwxNyArMzc5LDE0IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGb3IgY2VydGFpbiBpbnB1dCBkYXRhLCBhIHNpbmdsZSBjYWxsIHRvIF9yZWFkKCkgbWF5IG5vdCByZXR1cm4KLSAgICAgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCisgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCisgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuX3JlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2l6ZSA8IDAgb3Igc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCkBAIC00MDUsNyArNDAwLDcgQEAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInBlZWsoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgIyBEbyBub3QgcmV0dXJuIHJpZGljdWxvdXNseSBzbWFsbCBidWZmZXJzLCBmb3Igb25lIGNvbW1vbiBpZGlvbQogICAgICAgICAjIGlzIHRvIGNhbGwgcGVlaygxKSBhbmQgZXhwZWN0IG1vcmUgYnl0ZXMgaW4gcmV0dXJuLgpAQCAtNDE0LDEyICs0MDksOSBAQAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA9PSAwOgogICAgICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgotICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1cm4gYiIiIGlmIHdlIGhhdmVuJ3QgcmVhY2hlZCBFT0YuCisgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPT0gMCBhbmQgc2VsZi5fcmVhZChtYXgobiwgMTAyNCkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5leHRyYXNpemUKQEAgLTQzMiwxMyArNDI0LDE0IEBACiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT0xMDI0KToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBGYWxzZQogCkBAIC00NTUsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyhidWYpCiAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQpAQCAtNDcxLDYgKzQ2NCw3IEBACiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgpAQCAtNDg1LDEzICs0NzksMTIgQEAKICAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQogICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKICAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCisgICAgICAgIGNyYzMyLCBpc2l6ZSA9IHN0cnVjdC51bnBhY2soIjxJSSIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ1JDIGNoZWNrIGZhaWxlZCAlcyAhPSAlcyIgJSAoaGV4KGNyYzMyKSwKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgoc2VsZi5jcmMpKSkKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKIAogICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KICAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CkBAIC01NDAsNyArNTMzLDcgQEAKICAgICAgICAgJycnUmV0dXJuIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtIGZpbGUgcG9zaXRpb24gaW5kaWNhdG9yIHRvIHRoZQogICAgICAgICBiZWdpbm5pbmcgb2YgdGhlIGZpbGUnJycKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW4ndCByZXdpbmQgaW4gd3JpdGUgbW9kZSIpCiAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKDApCiAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCiAgICAgICAgIHNlbGYuZXh0cmFidWYgPSBiIiIKQEAgLTU2NSw3ICs1NTgsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlZWsgZnJvbSBlbmQgbm90IHN1cHBvcnRlZCcpCiAgICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYub2Zmc2V0OgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTmVnYXRpdmUgc2VlayBpbiB3cml0ZSBtb2RlJykKICAgICAgICAgICAgIGNvdW50ID0gb2Zmc2V0IC0gc2VsZi5vZmZzZXQKICAgICAgICAgICAgIGNodW5rID0gYnl0ZXMoMTAyNCkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGNvdW50IC8vIDEwMjQpOgpkaWZmIC0tZ2l0IGEvTGliL2hhc2hsaWIucHkgYi9MaWIvaGFzaGxpYi5weQppbmRleCAyMTQ1NGM3Li43NzY3M2YwIDEwMDY0NAotLS0gYS9MaWIvaGFzaGxpYi5weQorKysgYi9MaWIvaGFzaGxpYi5weQpAQCAtMSw0ICsxLDQgQEAKLSMgIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorIy4gIENvcHlyaWdodCAoQykgMjAwNS0yMDEwICAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQogIyAgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCkBAIC01NCw0MCArNTQsNTIgQEAKIAogIyBUaGlzIHR1cGxlIGFuZCBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCkgbXVzdCBiZSBtb2RpZmllZCBpZiBhIG5ldwogIyBhbHdheXMgYXZhaWxhYmxlIGFsZ29yaXRobSBpcyBhZGRlZC4KLV9fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJykKK19fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJywKKyAgICAgICAgICAgICAgICAgICAgICAnc2hhM18yMjQnLCAnc2hhM18yNTYnLCAnc2hhM18zODQnLCAnc2hhM181MTInKQogCiBhbGdvcml0aG1zX2d1YXJhbnRlZWQgPSBzZXQoX19hbHdheXNfc3VwcG9ydGVkKQogYWxnb3JpdGhtc19hdmFpbGFibGUgPSBzZXQoX19hbHdheXNfc3VwcG9ydGVkKQogCiBfX2FsbF9fID0gX19hbHdheXNfc3VwcG9ydGVkICsgKCduZXcnLCAnYWxnb3JpdGhtc19ndWFyYW50ZWVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZ29yaXRobXNfYXZhaWxhYmxlJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZ29yaXRobXNfYXZhaWxhYmxlJywgJ3Bia2RmMl9obWFjJykKIAogCitfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSB7fQorCiBkZWYgX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICBjYWNoZSA9IF9fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZQorICAgIGNvbnN0cnVjdG9yID0gY2FjaGUuZ2V0KG5hbWUpCisgICAgaWYgY29uc3RydWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcgogICAgIHRyeToKICAgICAgICAgaWYgbmFtZSBpbiAoJ1NIQTEnLCAnc2hhMScpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGExCi0gICAgICAgICAgICByZXR1cm4gX3NoYTEuc2hhMQorICAgICAgICAgICAgY2FjaGVbJ1NIQTEnXSA9IGNhY2hlWydzaGExJ10gPSBfc2hhMS5zaGExCiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ01ENScsICdtZDUnKToKICAgICAgICAgICAgIGltcG9ydCBfbWQ1Ci0gICAgICAgICAgICByZXR1cm4gX21kNS5tZDUKKyAgICAgICAgICAgIGNhY2hlWydNRDUnXSA9IGNhY2hlWydtZDUnXSA9IF9tZDUubWQ1CiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ1NIQTI1NicsICdzaGEyNTYnLCAnU0hBMjI0JywgJ3NoYTIyNCcpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGEyNTYKLSAgICAgICAgICAgIGJzID0gbmFtZVszOl0KLSAgICAgICAgICAgIGlmIGJzID09ICcyNTYnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhMjU2LnNoYTI1NgotICAgICAgICAgICAgZWxpZiBicyA9PSAnMjI0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTI1Ni5zaGEyMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEyMjQnXSA9IGNhY2hlWydzaGEyMjQnXSA9IF9zaGEyNTYuc2hhMjI0CisgICAgICAgICAgICBjYWNoZVsnU0hBMjU2J10gPSBjYWNoZVsnc2hhMjU2J10gPSBfc2hhMjU2LnNoYTI1NgogICAgICAgICBlbGlmIG5hbWUgaW4gKCdTSEE1MTInLCAnc2hhNTEyJywgJ1NIQTM4NCcsICdzaGEzODQnKToKICAgICAgICAgICAgIGltcG9ydCBfc2hhNTEyCi0gICAgICAgICAgICBicyA9IG5hbWVbMzpdCi0gICAgICAgICAgICBpZiBicyA9PSAnNTEyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGE1MTIKLSAgICAgICAgICAgIGVsaWYgYnMgPT0gJzM4NCc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGE1MTIuc2hhMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBMzg0J10gPSBjYWNoZVsnc2hhMzg0J10gPSBfc2hhNTEyLnNoYTM4NAorICAgICAgICAgICAgY2FjaGVbJ1NIQTUxMiddID0gY2FjaGVbJ3NoYTUxMiddID0gX3NoYTUxMi5zaGE1MTIKKyAgICAgICAgZWxpZiBuYW1lIGluIHsnc2hhM18yMjQnLCAnc2hhM18yNTYnLCAnc2hhM18zODQnLCAnc2hhM181MTInLAorICAgICAgICAgICAgICAgICAgICAgICdTSEEzXzIyNCcsICdTSEEzXzI1NicsICdTSEEzXzM4NCcsICdTSEEzXzUxMid9OgorICAgICAgICAgICAgaW1wb3J0IF9zaGEzCisgICAgICAgICAgICBjYWNoZVsnU0hBM18yMjQnXSA9IGNhY2hlWydzaGEzXzIyNCddID0gX3NoYTMuc2hhM18yMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEzXzI1NiddID0gY2FjaGVbJ3NoYTNfMjU2J10gPSBfc2hhMy5zaGEzXzI1NgorICAgICAgICAgICAgY2FjaGVbJ1NIQTNfMzg0J10gPSBjYWNoZVsnc2hhM18zODQnXSA9IF9zaGEzLnNoYTNfMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBM181MTInXSA9IGNhY2hlWydzaGEzXzUxMiddID0gX3NoYTMuc2hhM181MTIKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MgICMgbm8gZXh0ZW5zaW9uIG1vZHVsZSwgdGhpcyBoYXNoIGlzIHVuc3VwcG9ydGVkLgogCisgICAgY29uc3RydWN0b3IgPSBjYWNoZS5nZXQobmFtZSkKKyAgICBpZiBjb25zdHJ1Y3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCisKICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnN1cHBvcnRlZCBoYXNoIHR5cGUgJyArIG5hbWUpCiAKIApAQCAtMTM0LDYgKzE0Niw3MSBAQAogICAgIG5ldyA9IF9fcHlfbmV3CiAgICAgX19nZXRfaGFzaCA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IKIAordHJ5OgorICAgICMgT3BlblNTTCdzIFBLQ1M1X1BCS0RGMl9ITUFDIHJlcXVpcmVzIE9wZW5TU0wgMS4wKyB3aXRoIEhNQUMgYW5kIFNIQQorICAgIGZyb20gX2hhc2hsaWIgaW1wb3J0IHBia2RmMl9obWFjCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RyYW5zXzVDID0gYnl0ZXMoKHggXiAweDVDKSBmb3IgeCBpbiByYW5nZSgyNTYpKQorICAgIF90cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKKworICAgIGRlZiBwYmtkZjJfaG1hYyhoYXNoX25hbWUsIHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBka2xlbj1Ob25lKToKKyAgICAgICAgIiIiUGFzc3dvcmQgYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMiAoUEtDUyAjNSB2Mi4wKQorCisgICAgICAgIFRoaXMgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBiYXNlZCBvbiB0aGUgaG1hYyBtb2R1bGUgYWJvdXQgYXMgZmFzdAorICAgICAgICBhcyBPcGVuU1NMJ3MgUEtDUzVfUEJLREYyX0hNQUMgZm9yIHNob3J0IHBhc3N3b3JkcyBhbmQgbXVjaCBmYXN0ZXIKKyAgICAgICAgZm9yIGxvbmcgcGFzc3dvcmRzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaGFzaF9uYW1lLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKGhhc2hfbmFtZSkKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXNzd29yZCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHBhc3N3b3JkID0gYnl0ZXMobWVtb3J5dmlldyhwYXNzd29yZCkpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNhbHQsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBzYWx0ID0gYnl0ZXMobWVtb3J5dmlldyhzYWx0KSkKKworICAgICAgICAjIEZhc3QgaW5saW5lIEhNQUMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaW5uZXIgPSBuZXcoaGFzaF9uYW1lKQorICAgICAgICBvdXRlciA9IG5ldyhoYXNoX25hbWUpCisgICAgICAgIGJsb2Nrc2l6ZSA9IGdldGF0dHIoaW5uZXIsICdibG9ja19zaXplJywgNjQpCisgICAgICAgIGlmIGxlbihwYXNzd29yZCkgPiBibG9ja3NpemU6CisgICAgICAgICAgICBwYXNzd29yZCA9IG5ldyhoYXNoX25hbWUsIHBhc3N3b3JkKS5kaWdlc3QoKQorICAgICAgICBwYXNzd29yZCA9IHBhc3N3b3JkICsgYidceDAwJyAqIChibG9ja3NpemUgLSBsZW4ocGFzc3dvcmQpKQorICAgICAgICBpbm5lci51cGRhdGUocGFzc3dvcmQudHJhbnNsYXRlKF90cmFuc18zNikpCisgICAgICAgIG91dGVyLnVwZGF0ZShwYXNzd29yZC50cmFuc2xhdGUoX3RyYW5zXzVDKSkKKworICAgICAgICBkZWYgcHJmKG1zZywgaW5uZXI9aW5uZXIsIG91dGVyPW91dGVyKToKKyAgICAgICAgICAgICMgUEJLREYyX0hNQUMgdXNlcyB0aGUgcGFzc3dvcmQgYXMga2V5LiBXZSBjYW4gcmUtdXNlIHRoZSBzYW1lCisgICAgICAgICAgICAjIGRpZ2VzdCBvYmplY3RzIGFuZCBhbmQganVzdCB1cGRhdGUgY29waWVzIHRvIHNraXAgaW5pdGlhbGl6YXRpb24uCisgICAgICAgICAgICBpY3B5ID0gaW5uZXIuY29weSgpCisgICAgICAgICAgICBvY3B5ID0gb3V0ZXIuY29weSgpCisgICAgICAgICAgICBpY3B5LnVwZGF0ZShtc2cpCisgICAgICAgICAgICBvY3B5LnVwZGF0ZShpY3B5LmRpZ2VzdCgpKQorICAgICAgICAgICAgcmV0dXJuIG9jcHkuZGlnZXN0KCkKKworICAgICAgICBpZiBpdGVyYXRpb25zIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoaXRlcmF0aW9ucykKKyAgICAgICAgaWYgZGtsZW4gaXMgTm9uZToKKyAgICAgICAgICAgIGRrbGVuID0gb3V0ZXIuZGlnZXN0X3NpemUKKyAgICAgICAgaWYgZGtsZW4gPCAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihka2xlbikKKworICAgICAgICBka2V5ID0gYicnCisgICAgICAgIGxvb3AgPSAxCisgICAgICAgIGZyb21fYnl0ZXMgPSBpbnQuZnJvbV9ieXRlcworICAgICAgICB3aGlsZSBsZW4oZGtleSkgPCBka2xlbjoKKyAgICAgICAgICAgIHByZXYgPSBwcmYoc2FsdCArIGxvb3AudG9fYnl0ZXMoNCwgJ2JpZycpKQorICAgICAgICAgICAgIyBlbmRpYW5lc3MgZG9lc24ndCBtYXR0ZXIgaGVyZSBhcyBsb25nIHRvIC8gZnJvbSB1c2UgdGhlIHNhbWUKKyAgICAgICAgICAgIHJrZXkgPSBpbnQuZnJvbV9ieXRlcyhwcmV2LCAnYmlnJykKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMgLSAxKToKKyAgICAgICAgICAgICAgICBwcmV2ID0gcHJmKHByZXYpCisgICAgICAgICAgICAgICAgIyBya2V5ID0gcmtleSBeIHByZXYKKyAgICAgICAgICAgICAgICBya2V5IF49IGZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBsb29wICs9IDEKKyAgICAgICAgICAgIGRrZXkgKz0gcmtleS50b19ieXRlcyhpbm5lci5kaWdlc3Rfc2l6ZSwgJ2JpZycpCisKKyAgICAgICAgcmV0dXJuIGRrZXlbOmRrbGVuXQorCisKIGZvciBfX2Z1bmNfbmFtZSBpbiBfX2Fsd2F5c19zdXBwb3J0ZWQ6CiAgICAgIyB0cnkgdGhlbSBhbGwsIHNvbWUgbWF5IG5vdCB3b3JrIGR1ZSB0byB0aGUgT3BlblNTTAogICAgICMgdmVyc2lvbiBub3Qgc3VwcG9ydGluZyB0aGF0IGFsZ29yaXRobS4KZGlmZiAtLWdpdCBhL0xpYi9obWFjLnB5IGIvTGliL2htYWMucHkKaW5kZXggNDI5N2E3MS4uNzc3ODVhMiAxMDA2NDQKLS0tIGEvTGliL2htYWMucHkKKysrIGIvTGliL2htYWMucHkKQEAgLTQsNyArNCw4IEBACiAiIiIKIAogaW1wb3J0IHdhcm5pbmdzIGFzIF93YXJuaW5ncwotZnJvbSBvcGVyYXRvciBpbXBvcnQgX2NvbXBhcmVfZGlnZXN0IGFzIGNvbXBhcmVfZGlnZXN0Citmcm9tIF9vcGVyYXRvciBpbXBvcnQgX2NvbXBhcmVfZGlnZXN0IGFzIGNvbXBhcmVfZGlnZXN0CitpbXBvcnQgaGFzaGxpYiBhcyBfaGFzaGxpYgogCiB0cmFuc181QyA9IGJ5dGVzKCh4IF4gMHg1QykgZm9yIHggaW4gcmFuZ2UoMjU2KSkKIHRyYW5zXzM2ID0gYnl0ZXMoKHggXiAweDM2KSBmb3IgeCBpbiByYW5nZSgyNTYpKQpAQCAtMjgsMjEgKzI5LDI3IEBACiAgICAgICAgIGtleTogICAgICAga2V5IGZvciB0aGUga2V5ZWQgaGFzaCBvYmplY3QuCiAgICAgICAgIG1zZzogICAgICAgSW5pdGlhbCBpbnB1dCBmb3IgdGhlIGhhc2gsIGlmIHByb3ZpZGVkLgogICAgICAgICBkaWdlc3Rtb2Q6IEEgbW9kdWxlIHN1cHBvcnRpbmcgUEVQIDI0Ny4gICpPUioKLSAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LgorICAgICAgICAgICAgICAgICAgIEEgaGFzaGxpYiBjb25zdHJ1Y3RvciByZXR1cm5pbmcgYSBuZXcgaGFzaCBvYmplY3QuICpPUioKKyAgICAgICAgICAgICAgICAgICBBIGhhc2ggbmFtZSBzdWl0YWJsZSBmb3IgaGFzaGxpYi5uZXcoKS4KICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBoYXNobGliLm1kNS4KKyAgICAgICAgICAgICAgICAgICBJbXBsaWNpdCBkZWZhdWx0IHRvIGhhc2hsaWIubWQ1IGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAgICByZW1vdmVkIGluIFB5dGhvbiAzLjYuCiAKLSAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBieXRlcyBvYmplY3RzLgorICAgICAgICBOb3RlOiBrZXkgYW5kIG1zZyBtdXN0IGJlIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdHMuCiAgICAgICAgICIiIgogCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgYnl0ZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXk6IGV4cGVjdGVkIGJ5dGVzLCBidXQgZ290ICVyIiAlIHR5cGUoa2V5KS5fX25hbWVfXykKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXk6IGV4cGVjdGVkIGJ5dGVzIG9yIGJ5dGVhcnJheSwgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCiAKICAgICAgICAgaWYgZGlnZXN0bW9kIGlzIE5vbmU6Ci0gICAgICAgICAgICBpbXBvcnQgaGFzaGxpYgotICAgICAgICAgICAgZGlnZXN0bW9kID0gaGFzaGxpYi5tZDUKKyAgICAgICAgICAgIF93YXJuaW5ncy53YXJuKCJITUFDKCkgd2l0aG91dCBhbiBleHBsaWNpdCBkaWdlc3Rtb2QgYXJndW1lbnQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIGRlcHJlY2F0ZWQuIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgICAgIGRpZ2VzdG1vZCA9IF9oYXNobGliLm1kNQogCiAgICAgICAgIGlmIGNhbGxhYmxlKGRpZ2VzdG1vZCk6CiAgICAgICAgICAgICBzZWxmLmRpZ2VzdF9jb25zID0gZGlnZXN0bW9kCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkaWdlc3Rtb2QsIHN0cik6CisgICAgICAgICAgICBzZWxmLmRpZ2VzdF9jb25zID0gbGFtYmRhIGQ9YicnOiBfaGFzaGxpYi5uZXcoZGlnZXN0bW9kLCBkKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGxhbWJkYSBkPWInJzogZGlnZXN0bW9kLm5ldyhkKQogCkBAIC02Myw2ICs3MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCiAgICAgICAgICAgICBibG9ja3NpemUgPSBzZWxmLmJsb2Nrc2l6ZQogCisgICAgICAgICMgc2VsZi5ibG9ja3NpemUgaXMgdGhlIGRlZmF1bHQgYmxvY2tzaXplLiBzZWxmLmJsb2NrX3NpemUgaXMKKyAgICAgICAgIyBlZmZlY3RpdmUgYmxvY2sgc2l6ZSBhcyB3ZWxsIGFzIHRoZSBwdWJsaWMgQVBJIGF0dHJpYnV0ZS4KKyAgICAgICAgc2VsZi5ibG9ja19zaXplID0gYmxvY2tzaXplCisKICAgICAgICAgaWYgbGVuKGtleSkgPiBibG9ja3NpemU6CiAgICAgICAgICAgICBrZXkgPSBzZWxmLmRpZ2VzdF9jb25zKGtleSkuZGlnZXN0KCkKIApAQCAtNzIsMTEgKzgzLDEzIEBACiAgICAgICAgIGlmIG1zZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYudXBkYXRlKG1zZykKIAorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gImhtYWMtIiArIHNlbGYuaW5uZXIubmFtZQorCiAgICAgZGVmIHVwZGF0ZShzZWxmLCBtc2cpOgogICAgICAgICAiIiJVcGRhdGUgdGhpcyBoYXNoaW5nIG9iamVjdCB3aXRoIHRoZSBzdHJpbmcgbXNnLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobXNnLCBieXRlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBidXQgZ290ICVyIiAlIHR5cGUobXNnKS5fX25hbWVfXykKICAgICAgICAgc2VsZi5pbm5lci51cGRhdGUobXNnKQogCiAgICAgZGVmIGNvcHkoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvaHRtbC9fX2luaXRfXy5weSBiL0xpYi9odG1sL19faW5pdF9fLnB5CmluZGV4IDAyNjUyZWYuLmRhMGEwYTMgMTAwNjQ0Ci0tLSBhL0xpYi9odG1sL19faW5pdF9fLnB5CisrKyBiL0xpYi9odG1sL19faW5pdF9fLnB5CkBAIC0yLDEyICsyLDEyIEBACiBHZW5lcmFsIGZ1bmN0aW9ucyBmb3IgSFRNTCBtYW5pcHVsYXRpb24uCiAiIiIKIAoraW1wb3J0IHJlIGFzIF9yZQorZnJvbSBodG1sLmVudGl0aWVzIGltcG9ydCBodG1sNSBhcyBfaHRtbDUKIAotX2VzY2FwZV9tYXAgPSB7b3JkKCcmJyk6ICcmYW1wOycsIG9yZCgnPCcpOiAnJmx0OycsIG9yZCgnPicpOiAnJmd0Oyd9Ci1fZXNjYXBlX21hcF9mdWxsID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnLAotICAgICAgICAgICAgICAgICAgICBvcmQoJyInKTogJyZxdW90OycsIG9yZCgnXCcnKTogJyYjeDI3Oyd9CiAKLSMgTkI6IHRoaXMgaXMgYSBjYW5kaWRhdGUgZm9yIGEgYnl0ZXMvc3RyaW5nIHBvbHltb3JwaGljIGludGVyZmFjZQorX19hbGxfXyA9IFsnZXNjYXBlJywgJ3VuZXNjYXBlJ10KKwogCiBkZWYgZXNjYXBlKHMsIHF1b3RlPVRydWUpOgogICAgICIiIgpAQCAtMTYsNiArMTYsMTE3IEBACiAgICAgY2hhcmFjdGVycywgYm90aCBkb3VibGUgcXVvdGUgKCIpIGFuZCBzaW5nbGUgcXVvdGUgKCcpIGNoYXJhY3RlcnMgYXJlIGFsc28KICAgICB0cmFuc2xhdGVkLgogICAgICIiIgorICAgIHMgPSBzLnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAjIE11c3QgYmUgZG9uZSBmaXJzdCEKKyAgICBzID0gcy5yZXBsYWNlKCI8IiwgIiZsdDsiKQorICAgIHMgPSBzLnJlcGxhY2UoIj4iLCAiJmd0OyIpCiAgICAgaWYgcXVvdGU6Ci0gICAgICAgIHJldHVybiBzLnRyYW5zbGF0ZShfZXNjYXBlX21hcF9mdWxsKQotICAgIHJldHVybiBzLnRyYW5zbGF0ZShfZXNjYXBlX21hcCkKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnIicsICImcXVvdDsiKQorICAgICAgICBzID0gcy5yZXBsYWNlKCdcJycsICImI3gyNzsiKQorICAgIHJldHVybiBzCisKKworIyBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjdG9rZW5pemluZy1jaGFyYWN0ZXItcmVmZXJlbmNlcworCitfaW52YWxpZF9jaGFycmVmcyA9IHsKKyAgICAweDAwOiAnXHVmZmZkJywgICMgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSCisgICAgMHgwZDogJ1xyJywgICAgICAjIENBUlJJQUdFIFJFVFVSTgorICAgIDB4ODA6ICdcdTIwYWMnLCAgIyBFVVJPIFNJR04KKyAgICAweDgxOiAnXHg4MScsICAgICMgPGNvbnRyb2w+CisgICAgMHg4MjogJ1x1MjAxYScsICAjIFNJTkdMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgIDB4ODM6ICdcdTAxOTInLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sKKyAgICAweDg0OiAnXHUyMDFlJywgICMgRE9VQkxFIExPVy05IFFVT1RBVElPTiBNQVJLCisgICAgMHg4NTogJ1x1MjAyNicsICAjIEhPUklaT05UQUwgRUxMSVBTSVMKKyAgICAweDg2OiAnXHUyMDIwJywgICMgREFHR0VSCisgICAgMHg4NzogJ1x1MjAyMScsICAjIERPVUJMRSBEQUdHRVIKKyAgICAweDg4OiAnXHUwMmM2JywgICMgTU9ESUZJRVIgTEVUVEVSIENJUkNVTUZMRVggQUNDRU5UCisgICAgMHg4OTogJ1x1MjAzMCcsICAjIFBFUiBNSUxMRSBTSUdOCisgICAgMHg4YTogJ1x1MDE2MCcsICAjIExBVElOIENBUElUQUwgTEVUVEVSIFMgV0lUSCBDQVJPTgorICAgIDB4OGI6ICdcdTIwMzknLCAgIyBTSU5HTEUgTEVGVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OGM6ICdcdTAxNTInLCAgIyBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIE9FCisgICAgMHg4ZDogJ1x4OGQnLCAgICAjIDxjb250cm9sPgorICAgIDB4OGU6ICdcdTAxN2QnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBaIFdJVEggQ0FST04KKyAgICAweDhmOiAnXHg4ZicsICAgICMgPGNvbnRyb2w+CisgICAgMHg5MDogJ1x4OTAnLCAgICAjIDxjb250cm9sPgorICAgIDB4OTE6ICdcdTIwMTgnLCAgIyBMRUZUIFNJTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTI6ICdcdTIwMTknLCAgIyBSSUdIVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDkzOiAnXHUyMDFjJywgICMgTEVGVCBET1VCTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDk0OiAnXHUyMDFkJywgICMgUklHSFQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5NTogJ1x1MjAyMicsICAjIEJVTExFVAorICAgIDB4OTY6ICdcdTIwMTMnLCAgIyBFTiBEQVNICisgICAgMHg5NzogJ1x1MjAxNCcsICAjIEVNIERBU0gKKyAgICAweDk4OiAnXHUwMmRjJywgICMgU01BTEwgVElMREUKKyAgICAweDk5OiAnXHUyMTIyJywgICMgVFJBREUgTUFSSyBTSUdOCisgICAgMHg5YTogJ1x1MDE2MScsICAjIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggQ0FST04KKyAgICAweDliOiAnXHUyMDNhJywgICMgU0lOR0xFIFJJR0hULVBPSU5USU5HIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5YzogJ1x1MDE1MycsICAjIExBVElOIFNNQUxMIExJR0FUVVJFIE9FCisgICAgMHg5ZDogJ1x4OWQnLCAgICAjIDxjb250cm9sPgorICAgIDB4OWU6ICdcdTAxN2UnLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgWiBXSVRIIENBUk9OCisgICAgMHg5ZjogJ1x1MDE3OCcsICAjIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBESUFFUkVTSVMKK30KKworX2ludmFsaWRfY29kZXBvaW50cyA9IHsKKyAgICAjIDB4MDAwMSB0byAweDAwMDgKKyAgICAweDEsIDB4MiwgMHgzLCAweDQsIDB4NSwgMHg2LCAweDcsIDB4OCwKKyAgICAjIDB4MDAwRSB0byAweDAwMUYKKyAgICAweGUsIDB4ZiwgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOSwKKyAgICAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorICAgICMgMHgwMDdGIHRvIDB4MDA5RgorICAgIDB4N2YsIDB4ODAsIDB4ODEsIDB4ODIsIDB4ODMsIDB4ODQsIDB4ODUsIDB4ODYsIDB4ODcsIDB4ODgsIDB4ODksIDB4OGEsCisgICAgMHg4YiwgMHg4YywgMHg4ZCwgMHg4ZSwgMHg4ZiwgMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwKKyAgICAweDk3LCAweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAorICAgICMgMHhGREQwIHRvIDB4RkRFRgorICAgIDB4ZmRkMCwgMHhmZGQxLCAweGZkZDIsIDB4ZmRkMywgMHhmZGQ0LCAweGZkZDUsIDB4ZmRkNiwgMHhmZGQ3LCAweGZkZDgsCisgICAgMHhmZGQ5LCAweGZkZGEsIDB4ZmRkYiwgMHhmZGRjLCAweGZkZGQsIDB4ZmRkZSwgMHhmZGRmLCAweGZkZTAsIDB4ZmRlMSwKKyAgICAweGZkZTIsIDB4ZmRlMywgMHhmZGU0LCAweGZkZTUsIDB4ZmRlNiwgMHhmZGU3LCAweGZkZTgsIDB4ZmRlOSwgMHhmZGVhLAorICAgIDB4ZmRlYiwgMHhmZGVjLCAweGZkZWQsIDB4ZmRlZSwgMHhmZGVmLAorICAgICMgb3RoZXJzCisgICAgMHhiLCAweGZmZmUsIDB4ZmZmZiwgMHgxZmZmZSwgMHgxZmZmZiwgMHgyZmZmZSwgMHgyZmZmZiwgMHgzZmZmZSwgMHgzZmZmZiwKKyAgICAweDRmZmZlLCAweDRmZmZmLCAweDVmZmZlLCAweDVmZmZmLCAweDZmZmZlLCAweDZmZmZmLCAweDdmZmZlLCAweDdmZmZmLAorICAgIDB4OGZmZmUsIDB4OGZmZmYsIDB4OWZmZmUsIDB4OWZmZmYsIDB4YWZmZmUsIDB4YWZmZmYsIDB4YmZmZmUsIDB4YmZmZmYsCisgICAgMHhjZmZmZSwgMHhjZmZmZiwgMHhkZmZmZSwgMHhkZmZmZiwgMHhlZmZmZSwgMHhlZmZmZiwgMHhmZmZmZSwgMHhmZmZmZiwKKyAgICAweDEwZmZmZSwgMHgxMGZmZmYKK30KKworCitkZWYgX3JlcGxhY2VfY2hhcnJlZihzKToKKyAgICBzID0gcy5ncm91cCgxKQorICAgIGlmIHNbMF0gPT0gJyMnOgorICAgICAgICAjIG51bWVyaWMgY2hhcnJlZgorICAgICAgICBpZiBzWzFdIGluICd4WCc6CisgICAgICAgICAgICBudW0gPSBpbnQoc1syOl0ucnN0cmlwKCc7JyksIDE2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbnVtID0gaW50KHNbMTpdLnJzdHJpcCgnOycpKQorICAgICAgICBpZiBudW0gaW4gX2ludmFsaWRfY2hhcnJlZnM6CisgICAgICAgICAgICByZXR1cm4gX2ludmFsaWRfY2hhcnJlZnNbbnVtXQorICAgICAgICBpZiAweEQ4MDAgPD0gbnVtIDw9IDB4REZGRiBvciBudW0gPiAweDEwRkZGRjoKKyAgICAgICAgICAgIHJldHVybiAnXHVGRkZEJworICAgICAgICBpZiBudW0gaW4gX2ludmFsaWRfY29kZXBvaW50czoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICByZXR1cm4gY2hyKG51bSkKKyAgICBlbHNlOgorICAgICAgICAjIG5hbWVkIGNoYXJyZWYKKyAgICAgICAgaWYgcyBpbiBfaHRtbDU6CisgICAgICAgICAgICByZXR1cm4gX2h0bWw1W3NdCisgICAgICAgICMgZmluZCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBuYW1lIChhcyBkZWZpbmVkIGJ5IHRoZSBzdGFuZGFyZCkKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UobGVuKHMpLTEsIDEsIC0xKToKKyAgICAgICAgICAgIGlmIHNbOnhdIGluIF9odG1sNToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2h0bWw1W3NbOnhdXSArIHNbeDpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJyYnICsgcworCisKK19jaGFycmVmID0gX3JlLmNvbXBpbGUocicmKCNbMC05XSs7PycKKyAgICAgICAgICAgICAgICAgICAgICAgcid8I1t4WF1bMC05YS1mQS1GXSs7PycKKyAgICAgICAgICAgICAgICAgICAgICAgcid8W15cdFxuXGYgPCYjO117MSwzMn07PyknKQorCitkZWYgdW5lc2NhcGUocyk6CisgICAgIiIiCisgICAgQ29udmVydCBhbGwgbmFtZWQgYW5kIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgKGUuZy4gJmd0OywgJiM2MjssCisgICAgJngzZTspIGluIHRoZSBzdHJpbmcgcyB0byB0aGUgY29ycmVzcG9uZGluZyB1bmljb2RlIGNoYXJhY3RlcnMuCisgICAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIDUgc3RhbmRhcmQKKyAgICBmb3IgYm90aCB2YWxpZCBhbmQgaW52YWxpZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcywgYW5kIHRoZSBsaXN0IG9mCisgICAgSFRNTCA1IG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2VzIGRlZmluZWQgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KKyAgICAiIiIKKyAgICBpZiAnJicgbm90IGluIHM6CisgICAgICAgIHJldHVybiBzCisgICAgcmV0dXJuIF9jaGFycmVmLnN1YihfcmVwbGFjZV9jaGFycmVmLCBzKQpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvcGFyc2VyLnB5IGIvTGliL2h0bWwvcGFyc2VyLnB5CmluZGV4IDJkM2JlZjMuLjEyYzI4YjggMTAwNjQ0Ci0tLSBhL0xpYi9odG1sL3BhcnNlci5weQorKysgYi9MaWIvaHRtbC9wYXJzZXIucHkKQEAgLTgsOSArOCwxNCBAQAogIyBhbmQgQ0RBVEEgKGNoYXJhY3RlciBkYXRhIC0tIG9ubHkgZW5kIHRhZ3MgYXJlIHNwZWNpYWwpLgogCiAKLWltcG9ydCBfbWFya3VwYmFzZQogaW1wb3J0IHJlCiBpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBfbWFya3VwYmFzZQorCitmcm9tIGh0bWwgaW1wb3J0IHVuZXNjYXBlCisKKworX19hbGxfXyA9IFsnSFRNTFBhcnNlciddCiAKICMgUmVndWxhciBleHByZXNzaW9ucyB1c2VkIGZvciBwYXJzaW5nCiAKQEAgLTkyLDYgKzk3LDggQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKK19kZWZhdWx0X3NlbnRpbmVsID0gb2JqZWN0KCkKKwogY2xhc3MgSFRNTFBhcnNlcihfbWFya3VwYmFzZS5QYXJzZXJCYXNlKToKICAgICAiIiJGaW5kIHRhZ3MgYW5kIG90aGVyIG1hcmt1cCBhbmQgY2FsbCBoYW5kbGVyIGZ1bmN0aW9ucy4KIApAQCAtMTA1LDI2ICsxMTIsMzkgQEAKICAgICBzZWxmLmhhbmRsZV9zdGFydGVuZHRhZygpOyBlbmQgdGFncyBieSBzZWxmLmhhbmRsZV9lbmR0YWcoKS4gIFRoZQogICAgIGRhdGEgYmV0d2VlbiB0YWdzIGlzIHBhc3NlZCBmcm9tIHRoZSBwYXJzZXIgdG8gdGhlIGRlcml2ZWQgY2xhc3MKICAgICBieSBjYWxsaW5nIHNlbGYuaGFuZGxlX2RhdGEoKSB3aXRoIHRoZSBkYXRhIGFzIGFyZ3VtZW50ICh0aGUgZGF0YQotICAgIG1heSBiZSBzcGxpdCB1cCBpbiBhcmJpdHJhcnkgY2h1bmtzKS4gIEVudGl0eSByZWZlcmVuY2VzIGFyZQotICAgIHBhc3NlZCBieSBjYWxsaW5nIHNlbGYuaGFuZGxlX2VudGl0eXJlZigpIHdpdGggdGhlIGVudGl0eQotICAgIHJlZmVyZW5jZSBhcyB0aGUgYXJndW1lbnQuICBOdW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIGFyZQotICAgIHBhc3NlZCB0byBzZWxmLmhhbmRsZV9jaGFycmVmKCkgd2l0aCB0aGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlCi0gICAgcmVmZXJlbmNlIGFzIHRoZSBhcmd1bWVudC4KKyAgICBtYXkgYmUgc3BsaXQgdXAgaW4gYXJiaXRyYXJ5IGNodW5rcykuICBJZiBjb252ZXJ0X2NoYXJyZWZzIGlzCisgICAgVHJ1ZSB0aGUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXJlIGNvbnZlcnRlZCBhdXRvbWF0aWNhbGx5IHRvIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgVW5pY29kZSBjaGFyYWN0ZXIgKGFuZCBzZWxmLmhhbmRsZV9kYXRhKCkgaXMgbm8KKyAgICBsb25nZXIgc3BsaXQgaW4gY2h1bmtzKSwgb3RoZXJ3aXNlIHRoZXkgYXJlIHBhc3NlZCBieSBjYWxsaW5nCisgICAgc2VsZi5oYW5kbGVfZW50aXR5cmVmKCkgb3Igc2VsZi5oYW5kbGVfY2hhcnJlZigpIHdpdGggdGhlIHN0cmluZworICAgIGNvbnRhaW5pbmcgcmVzcGVjdGl2ZWx5IHRoZSBuYW1lZCBvciBudW1lcmljIHJlZmVyZW5jZSBhcyB0aGUKKyAgICBhcmd1bWVudC4KICAgICAiIiIKIAogICAgIENEQVRBX0NPTlRFTlRfRUxFTUVOVFMgPSAoInNjcmlwdCIsICJzdHlsZSIpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaWN0PUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyaWN0PV9kZWZhdWx0X3NlbnRpbmVsLCAqLAorICAgICAgICAgICAgICAgICBjb252ZXJ0X2NoYXJyZWZzPV9kZWZhdWx0X3NlbnRpbmVsKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbmQgcmVzZXQgdGhpcyBpbnN0YW5jZS4KIAorICAgICAgICBJZiBjb252ZXJ0X2NoYXJyZWZzIGlzIFRydWUgKGRlZmF1bHQ6IEZhbHNlKSwgYWxsIGNoYXJhY3RlciByZWZlcmVuY2VzCisgICAgICAgIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlcnMuCiAgICAgICAgIElmIHN0cmljdCBpcyBzZXQgdG8gRmFsc2UgKHRoZSBkZWZhdWx0KSB0aGUgcGFyc2VyIHdpbGwgcGFyc2UgaW52YWxpZAogICAgICAgICBtYXJrdXAsIG90aGVyd2lzZSBpdCB3aWxsIHJhaXNlIGFuIGVycm9yLiAgTm90ZSB0aGF0IHRoZSBzdHJpY3QgbW9kZQotICAgICAgICBpcyBkZXByZWNhdGVkLgorICAgICAgICBhbmQgYXJndW1lbnQgYXJlIGRlcHJlY2F0ZWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBzdHJpY3Q6Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgc3RyaWN0IG1vZGUgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9kZWZhdWx0X3NlbnRpbmVsOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIHN0cmljdCBhcmd1bWVudCBhbmQgbW9kZSBhcmUgZGVwcmVjYXRlZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0cmljdCA9IEZhbHNlICAjIGRlZmF1bHQKICAgICAgICAgc2VsZi5zdHJpY3QgPSBzdHJpY3QKKyAgICAgICAgaWYgY29udmVydF9jaGFycmVmcyBpcyBfZGVmYXVsdF9zZW50aW5lbDoKKyAgICAgICAgICAgIGNvbnZlcnRfY2hhcnJlZnMgPSBGYWxzZSAgIyBkZWZhdWx0CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgdmFsdWUgb2YgY29udmVydF9jaGFycmVmcyB3aWxsIGJlY29tZSBUcnVlIGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjMuNS4gWW91IGFyZSBlbmNvdXJhZ2VkIHRvIHNldCB0aGUgdmFsdWUgZXhwbGljaXRseS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgc2VsZi5jb252ZXJ0X2NoYXJyZWZzID0gY29udmVydF9jaGFycmVmcwogICAgICAgICBzZWxmLnJlc2V0KCkKIAogICAgIGRlZiByZXNldChzZWxmKToKQEAgLTE0OSw2ICsxNjksOCBAQAogICAgICAgICBzZWxmLmdvYWhlYWQoMSkKIAogICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhlICdlcnJvcicgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICAgICAgcmFpc2UgSFRNTFBhcnNlRXJyb3IobWVzc2FnZSwgc2VsZi5nZXRwb3MoKSkKIAogICAgIF9fc3RhcnR0YWdfdGV4dCA9IE5vbmUKQEAgLTE3MywxNCArMTk1LDI1IEBACiAgICAgICAgIGkgPSAwCiAgICAgICAgIG4gPSBsZW4ocmF3ZGF0YSkKICAgICAgICAgd2hpbGUgaSA8IG46Ci0gICAgICAgICAgICBtYXRjaCA9IHNlbGYuaW50ZXJlc3Rpbmcuc2VhcmNoKHJhd2RhdGEsIGkpICMgPCBvciAmCi0gICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICBqID0gbWF0Y2guc3RhcnQoKQorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgIGogPSByYXdkYXRhLmZpbmQoJzwnLCBpKQorICAgICAgICAgICAgICAgIGlmIGogPCAwOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgICMgd2FpdCB0aWxsIHdlIGdldCBhbGwgdGhlIHRleHQKKyAgICAgICAgICAgICAgICAgICAgaiA9IG4KICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jZGF0YV9lbGVtOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGogPSBuCi0gICAgICAgICAgICBpZiBpIDwgajogc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6al0pCisgICAgICAgICAgICAgICAgbWF0Y2ggPSBzZWxmLmludGVyZXN0aW5nLnNlYXJjaChyYXdkYXRhLCBpKSAgIyA8IG9yICYKKyAgICAgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICAgICAgaiA9IG1hdGNoLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBqID0gbgorICAgICAgICAgICAgaWYgaSA8IGo6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHVuZXNjYXBlKHJhd2RhdGFbaTpqXSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6al0pCiAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgaikKICAgICAgICAgICAgIGlmIGkgPT0gbjogYnJlYWsKICAgICAgICAgICAgIHN0YXJ0c3dpdGggPSByYXdkYXRhLnN0YXJ0c3dpdGgKQEAgLTIxNSw3ICsyNDgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gaSArIDEKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0gMQotICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTprXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6a10pKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6a10pCiAgICAgICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGspCiAgICAgICAgICAgICBlbGlmIHN0YXJ0c3dpdGgoIiYjIiwgaSk6CiAgICAgICAgICAgICAgICAgbWF0Y2ggPSBjaGFycmVmLm1hdGNoKHJhd2RhdGEsIGkpCkBAIC0yNjYsNyArMzAyLDEwIEBACiAgICAgICAgICAgICAgICAgYXNzZXJ0IDAsICJpbnRlcmVzdGluZy5zZWFyY2goKSBsaWVkIgogICAgICAgICAjIGVuZCB3aGlsZQogICAgICAgICBpZiBlbmQgYW5kIGkgPCBuIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgotICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6bl0pCisgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6bl0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpuXSkKICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBuKQogICAgICAgICBzZWxmLnJhd2RhdGEgPSByYXdkYXRhW2k6XQogCkBAIC0zNDksNyArMzg4LDcgQEAKICAgICAgICAgICAgICAgICAgYXR0cnZhbHVlWzoxXSA9PSAnIicgPT0gYXR0cnZhbHVlWy0xOl06CiAgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gYXR0cnZhbHVlWzE6LTFdCiAgICAgICAgICAgICBpZiBhdHRydmFsdWU6Ci0gICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gc2VsZi51bmVzY2FwZShhdHRydmFsdWUpCisgICAgICAgICAgICAgICAgYXR0cnZhbHVlID0gdW5lc2NhcGUoYXR0cnZhbHVlKQogICAgICAgICAgICAgYXR0cnMuYXBwZW5kKChhdHRybmFtZS5sb3dlcigpLCBhdHRydmFsdWUpKQogICAgICAgICAgICAgayA9IG0uZW5kKCkKIApAQCAtNTA1LDMxICs1NDQsNyBAQAogCiAgICAgIyBJbnRlcm5hbCAtLSBoZWxwZXIgdG8gcmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVyIHF1b3RpbmcKICAgICBkZWYgdW5lc2NhcGUoc2VsZiwgcyk6Ci0gICAgICAgIGlmICcmJyBub3QgaW4gczoKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGRlZiByZXBsYWNlRW50aXRpZXMocyk6Ci0gICAgICAgICAgICBzID0gcy5ncm91cHMoKVswXQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHNbMF0gPT0gIiMiOgotICAgICAgICAgICAgICAgICAgICBzID0gc1sxOl0KLSAgICAgICAgICAgICAgICAgICAgaWYgc1swXSBpbiBbJ3gnLCdYJ106Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHNbMTpdLnJzdHJpcCgnOycpLCAxNikKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBpbnQocy5yc3RyaXAoJzsnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNocihjKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICcmIycgKyBzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUKLSAgICAgICAgICAgICAgICBpZiBzIGluIGh0bWw1OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDVbc10KLSAgICAgICAgICAgICAgICBlbGlmIHMuZW5kc3dpdGgoJzsnKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKLSAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyLCBsZW4ocykpOgotICAgICAgICAgICAgICAgICAgICBpZiBzWzp4XSBpbiBodG1sNToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sNVtzWzp4XV0gKyBzW3g6XQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJicgKyBzCi0KLSAgICAgICAgcmV0dXJuIHJlLnN1YihyIiYoIz9beFhdPyg/OlswLTlhLWZBLUZdKzt8XHd7MSwzMn07PykpIiwKLSAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlRW50aXRpZXMsIHMsIGZsYWdzPXJlLkFTQ0lJKQorICAgICAgICB3YXJuaW5ncy53YXJuKCdUaGUgdW5lc2NhcGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCAnCisgICAgICAgICAgICAgICAgICAgICAgJ2luIDMuNSwgdXNlIGh0bWwudW5lc2NhcGUoKSBpbnN0ZWFkLicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIHJldHVybiB1bmVzY2FwZShzKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY2xpZW50LnB5IGIvTGliL2h0dHAvY2xpZW50LnB5CmluZGV4IGNjNDUyZTIuLjU2ZjU0OGEgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL2NsaWVudC5weQorKysgYi9MaWIvaHR0cC9jbGllbnQucHkKQEAgLTI3MSw4ICsyNzEsNiBAQAogICAgIHJldHVybiBlbWFpbC5wYXJzZXIuUGFyc2VyKF9jbGFzcz1fY2xhc3MpLnBhcnNlc3RyKGhzdHJpbmcpCiAKIAotX3N0cmljdF9zZW50aW5lbCA9IG9iamVjdCgpCi0KIGNsYXNzIEhUVFBSZXNwb25zZShpby5SYXdJT0Jhc2UpOgogCiAgICAgIyBTZWUgUkZDIDI2MTYgc2VjIDE5LjYgYW5kIFJGQyAxOTQ1IHNlYyA2IGZvciBkZXRhaWxzLgpAQCAtMjgyLDcgKzI4MCw3IEBACiAgICAgIyB0ZXh0IGZvbGxvd2luZyBSRkMgMjA0Ny4gIFRoZSBiYXNpYyBzdGF0dXMgbGluZSBwYXJzaW5nIG9ubHkKICAgICAjIGFjY2VwdHMgaXNvLTg4NTktMS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSk6CiAgICAgICAgICMgSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgY29udGVudC1sZW5ndGggaGVhZGVyLCB3ZSBuZWVkIHRvCiAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIGNsaWVudCBkb2Vzbid0IHJlYWQgbW9yZSB0aGFuIHRoZQogICAgICAgICAjIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJsb2NrIHVudGlsCkBAIC0yOTIsMTAgKzI5MCw2IEBACiAgICAgICAgICMgY2xpZW50cyB1bmxlc3MgdGhleSBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcuCiAgICAgICAgIHNlbGYuZnAgPSBzb2NrLm1ha2VmaWxlKCJyYiIpCiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGRlYnVnbGV2ZWwKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCiAKICAgICAgICAgIyBUaGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpcyByZXR1cm5lZCB2aWEgdXJsbGliLiAgVGhlIGNsaWVudHMKQEAgLTczMiwxMyArNzI2LDE3IEBACiAgICAgZGVmYXVsdF9wb3J0ID0gSFRUUF9QT1JUCiAgICAgYXV0b19vcGVuID0gMQogICAgIGRlYnVnbGV2ZWwgPSAwCisgICAgIyBUQ1AgTWF4aW11bSBTZWdtZW50IFNpemUgKE1TUykgaXMgZGV0ZXJtaW5lZCBieSB0aGUgVENQIHN0YWNrIG9uCisgICAgIyBhIHBlci1jb25uZWN0aW9uIGJhc2lzLiAgVGhlcmUgaXMgbm8gc2ltcGxlIGFuZCBlZmZpY2llbnQKKyAgICAjIHBsYXRmb3JtIGluZGVwZW5kZW50IG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcgdGhlIE1TUywgc28KKyAgICAjIGluc3RlYWQgYSByZWFzb25hYmxlIGVzdGltYXRlIGlzIGNob3Nlbi4gIFRoZSBnZXRzb2Nrb3B0KCkKKyAgICAjIGludGVyZmFjZSB1c2luZyB0aGUgVENQX01BWFNFRyBwYXJhbWV0ZXIgbWF5IGJlIGEgc3VpdGFibGUKKyAgICAjIGFwcHJvYWNoIG9uIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMuIEEgdmFsdWUgb2YgMTZLaUIgaXMgY2hvc2VuCisgICAgIyBhcyBhIHJlYXNvbmFibGUgZXN0aW1hdGUgb2YgdGhlIG1heGltdW0gTVNTLgorICAgIG1zcyA9IDE2Mzg0CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgotICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9zdHJpY3Rfc2VudGluZWw6Ci0gICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ0aGUgJ3N0cmljdCcgYXJndW1lbnQgaXNuJ3Qgc3VwcG9ydGVkIGFueW1vcmU7ICIKLSAgICAgICAgICAgICAgICAiaHR0cC5jbGllbnQgbm93IGFsd2F5cyBhc3N1bWVzIEhUVFAvMS54IGNvbXBsaWFudCBzZXJ2ZXJzLiIsCi0gICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lKToKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLnNvdXJjZV9hZGRyZXNzID0gc291cmNlX2FkZHJlc3MKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQpAQCAtODA0LDggKzgwMiw4IEBACiAKICAgICAgICAgaWYgY29kZSAhPSAyMDA6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiVHVubmVsIGNvbm5lY3Rpb24gZmFpbGVkOiAlZCAlcyIgJSAoY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpcCgpKSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLnN0cmlwKCkpKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZSA9IHJlc3BvbnNlLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSkKICAgICAgICAgICAgIGlmIGxlbihsaW5lKSA+IF9NQVhMSU5FOgpAQCAtODk5LDggKzg5NywxMSBAQAogICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpdCiAgICAgICAgICMgSWYgbXNnIGFuZCBtZXNzYWdlX2JvZHkgYXJlIHNlbnQgaW4gYSBzaW5nbGUgc2VuZCgpIGNhbGwsCiAgICAgICAgICMgaXQgd2lsbCBhdm9pZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBjYXVzZWQgYnkgdGhlIGludGVyYWN0aW9uCi0gICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRobS4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2JvZHksIGJ5dGVzKToKKyAgICAgICAgIyBiZXR3ZWVuIGRlbGF5ZWQgYWNrIGFuZCB0aGUgTmFnbGUgYWxnb3JpdGhtLiBIb3dldmVyLAorICAgICAgICAjIHRoZXJlIGlzIG5vIHBlcmZvcm1hbmNlIGdhaW4gaWYgdGhlIG1lc3NhZ2UgaXMgbGFyZ2VyCisgICAgICAgICMgdGhhbiBNU1MgKGFuZCB0aGVyZSBpcyBhIG1lbW9yeSBwZW5hbHR5IGZvciB0aGUgbWVzc2FnZQorICAgICAgICAjIGNvcHkpLgorICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2VfYm9keSwgYnl0ZXMpIGFuZCBsZW4obWVzc2FnZV9ib2R5KSA8IHNlbGYubXNzOgogICAgICAgICAgICAgbXNnICs9IG1lc3NhZ2VfYm9keQogICAgICAgICAgICAgbWVzc2FnZV9ib2R5ID0gTm9uZQogICAgICAgICBzZWxmLnNlbmQobXNnKQpAQCAtMTE3MCwxNiArMTE3MSwxNSBAQAogICAgICAgICAjIFhYWCBTaG91bGQga2V5X2ZpbGUgYW5kIGNlcnRfZmlsZSBiZSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBjb250ZXh0PwogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLCBjaGVja19ob3N0bmFtZT1Ob25lKToKLSAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBzZWxmLmtleV9maWxlID0ga2V5X2ZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9maWxlID0gY2VydF9maWxlCiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBTb21lIHJlYXNvbmFibGUgZGVmYXVsdHMKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKICAgICAgICAgICAgIHdpbGxfdmVyaWZ5ID0gY29udGV4dC52ZXJpZnlfbW9kZSAhPSBzc2wuQ0VSVF9OT05FCiAgICAgICAgICAgICBpZiBjaGVja19ob3N0bmFtZSBpcyBOb25lOgogICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lID0gd2lsbF92ZXJpZnkKQEAgLTEyMDQsMTMgKzEyMDQsMTMgQEAKICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9jaGVja19ob3N0bmFtZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZWxmLl9jaGVja19ob3N0bmFtZToKKyAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNzbC5tYXRjaF9ob3N0bmFtZShzZWxmLnNvY2suZ2V0cGVlcmNlcnQoKSwgc2VsZi5ob3N0KQotICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBfX2FsbF9fLmFwcGVuZCgiSFRUUFNDb25uZWN0aW9uIikKIApkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY29va2llamFyLnB5IGIvTGliL2h0dHAvY29va2llamFyLnB5CmluZGV4IGRkYjc5YzUuLmJlODI4ZWIgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL2Nvb2tpZWphci5weQorKysgYi9MaWIvaHR0cC9jb29raWVqYXIucHkKQEAgLTExOTMsOCArMTE5Myw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtYXBwaW5nID0gVHJ1ZQotICAgICAgICAgICAgZm9yIHN1Ym9iaiBpbiBkZWVwdmFsdWVzKG9iaik6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3Vib2JqCisgICAgICAgICAgICB5aWVsZCBmcm9tIGRlZXB2YWx1ZXMob2JqKQogICAgICAgICBpZiBub3QgbWFwcGluZzoKICAgICAgICAgICAgIHlpZWxkIG9iagogCkBAIC0xNzMxLDggKzE3MzAsOCBAQAogICAgICAgICByZXR1cm4gIjwlc1slc10+IiAlIChzZWxmLl9fY2xhc3NfXywgIiwgIi5qb2luKHIpKQogCiAKLSMgZGVyaXZlcyBmcm9tIElPRXJyb3IgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4wCi1jbGFzcyBMb2FkRXJyb3IoSU9FcnJvcik6IHBhc3MKKyMgZGVyaXZlcyBmcm9tIE9TRXJyb3IgZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIuNC4wCitjbGFzcyBMb2FkRXJyb3IoT1NFcnJvcik6IHBhc3MKIAogY2xhc3MgRmlsZUNvb2tpZUphcihDb29raWVKYXIpOgogICAgICIiIkNvb2tpZUphciB0aGF0IGNhbiBiZSBsb2FkZWQgZnJvbSBhbmQgc2F2ZWQgdG8gYSBmaWxlLiIiIgpAQCAtMTc2MiwxNyArMTc2MSwxNCBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLl9yZWFsbHlfbG9hZChmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgcmV2ZXJ0KHNlbGYsIGZpbGVuYW1lPU5vbmUsCiAgICAgICAgICAgICAgICBpZ25vcmVfZGlzY2FyZD1GYWxzZSwgaWdub3JlX2V4cGlyZXM9RmFsc2UpOgogICAgICAgICAiIiJDbGVhciBhbGwgY29va2llcyBhbmQgcmVsb2FkIGNvb2tpZXMgZnJvbSBhIHNhdmVkIGZpbGUuCiAKLSAgICAgICAgUmFpc2VzIExvYWRFcnJvciAob3IgSU9FcnJvcikgaWYgcmV2ZXJzaW9uIGlzIG5vdCBzdWNjZXNzZnVsOyB0aGUKKyAgICAgICAgUmFpc2VzIExvYWRFcnJvciAob3IgT1NFcnJvcikgaWYgcmV2ZXJzaW9uIGlzIG5vdCBzdWNjZXNzZnVsOyB0aGUKICAgICAgICAgb2JqZWN0J3Mgc3RhdGUgd2lsbCBub3QgYmUgYWx0ZXJlZCBpZiB0aGlzIGhhcHBlbnMuCiAKICAgICAgICAgIiIiCkBAIC0xNzg3LDcgKzE3ODMsNyBAQAogICAgICAgICAgICAgc2VsZi5fY29va2llcyA9IHt9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2FkKGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpCi0gICAgICAgICAgICBleGNlcHQgKExvYWRFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0gb2xkX3N0YXRlCiAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtMTg1NywxNSArMTg1MywxMiBAQAogICAgICAgICAgICAgaWYgc2VsZi5maWxlbmFtZSBpcyBub3QgTm9uZTogZmlsZW5hbWUgPSBzZWxmLmZpbGVuYW1lCiAgICAgICAgICAgICBlbHNlOiByYWlzZSBWYWx1ZUVycm9yKE1JU1NJTkdfRklMRU5BTUVfVEVYVCkKIAotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciKSBhcyBmOgogICAgICAgICAgICAgIyBUaGVyZSByZWFsbHkgaXNuJ3QgYW4gTFdQIENvb2tpZXMgMi4wIGZvcm1hdCwgYnV0IHRoaXMgaW5kaWNhdGVzCiAgICAgICAgICAgICAjIHRoYXQgdGhlcmUgaXMgZXh0cmEgaW5mb3JtYXRpb24gaW4gaGVyZSAoZG9tYWluX2RvdCBhbmQKICAgICAgICAgICAgICMgcG9ydF9zcGVjKSB3aGlsZSBzdGlsbCBiZWluZyBjb21wYXRpYmxlIHdpdGggbGlid3d3LXBlcmwsIEkgaG9wZS4KICAgICAgICAgICAgIGYud3JpdGUoIiNMV1AtQ29va2llcy0yLjBcbiIpCiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuYXNfbHdwX3N0cihpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgX3JlYWxseV9sb2FkKHNlbGYsIGYsIGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpOgogICAgICAgICBtYWdpYyA9IGYucmVhZGxpbmUoKQpAQCAtMTkzOCw4ICsxOTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlnbm9yZV9leHBpcmVzIGFuZCBjLmlzX2V4cGlyZWQobm93KToKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQotCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNDUsNyArMjAzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgc2VsZi5zZXRfY29va2llKGMpCiAKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIF93YXJuX3VuaGFuZGxlZF9leGNlcHRpb24oKQpAQCAtMjA1Nyw4ICsyMDQ5LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5oZWFkZXIpCiAgICAgICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgZm9yIGNvb2tpZSBpbiBzZWxmOgpAQCAtMjA4Nyw1ICsyMDc4LDMgQEAKICAgICAgICAgICAgICAgICAgICAgIlx0Ii5qb2luKFtjb29raWUuZG9tYWluLCBpbml0aWFsX2RvdCwgY29va2llLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdXJlLCBleHBpcmVzLCBuYW1lLCB2YWx1ZV0pKwogICAgICAgICAgICAgICAgICAgICAiXG4iKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9zZXJ2ZXIucHkgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKaW5kZXggMmJmZGExMi4uN2I1NzdiNCAxMDA2NDQKLS0tIGEvTGliL2h0dHAvc2VydmVyLnB5CisrKyBiL0xpYi9odHRwL3NlcnZlci5weQpAQCAtNDAxLDEyICs0MDEsMTcgQEAKICAgICAgICAgd2hpbGUgbm90IHNlbGYuY2xvc2VfY29ubmVjdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlX29uZV9yZXF1ZXN0KCkKIAotICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CisgICAgZGVmIHNlbmRfZXJyb3Ioc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lLCBleHBsYWluPU5vbmUpOgogICAgICAgICAiIiJTZW5kIGFuZCBsb2cgYW4gZXJyb3IgcmVwbHkuCiAKLSAgICAgICAgQXJndW1lbnRzIGFyZSB0aGUgZXJyb3IgY29kZSwgYW5kIGEgZGV0YWlsZWQgbWVzc2FnZS4KLSAgICAgICAgVGhlIGRldGFpbGVkIG1lc3NhZ2UgZGVmYXVsdHMgdG8gdGhlIHNob3J0IGVudHJ5IG1hdGNoaW5nIHRoZQotICAgICAgICByZXNwb25zZSBjb2RlLgorICAgICAgICBBcmd1bWVudHMgYXJlCisgICAgICAgICogY29kZTogICAgYW4gSFRUUCBlcnJvciBjb2RlCisgICAgICAgICAgICAgICAgICAgMyBkaWdpdHMKKyAgICAgICAgKiBtZXNzYWdlOiBhIHNpbXBsZSBvcHRpb25hbCAxIGxpbmUgcmVhc29uIHBocmFzZS4KKyAgICAgICAgICAgICAgICAgICAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvICV4ODAtRkYgKQorICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIHNob3J0IGVudHJ5IG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlCisgICAgICAgICogZXhwbGFpbjogYSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBsb25nIGVudHJ5CisgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgdGhlIHJlc3BvbnNlIGNvZGUuCiAKICAgICAgICAgVGhpcyBzZW5kcyBhbiBlcnJvciByZXNwb25zZSAoc28gaXQgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueQogICAgICAgICBvdXRwdXQgaGFzIGJlZW4gZ2VuZXJhdGVkKSwgbG9ncyB0aGUgZXJyb3IsIGFuZCBmaW5hbGx5IHNlbmRzCkBAIC00MjAsMTcgKzQyNSwyMCBAQAogICAgICAgICAgICAgc2hvcnRtc2csIGxvbmdtc2cgPSAnPz8/JywgJz8/PycKICAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgogICAgICAgICAgICAgbWVzc2FnZSA9IHNob3J0bXNnCi0gICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCisgICAgICAgIGlmIGV4cGxhaW4gaXMgTm9uZToKKyAgICAgICAgICAgIGV4cGxhaW4gPSBsb25nbXNnCiAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJjb2RlICVkLCBtZXNzYWdlICVzIiwgY29kZSwgbWVzc2FnZSkKICAgICAgICAgIyB1c2luZyBfcXVvdGVfaHRtbCB0byBwcmV2ZW50IENyb3NzIFNpdGUgU2NyaXB0aW5nIGF0dGFja3MgKHNlZSBidWcgIzExMDAyMDEpCiAgICAgICAgIGNvbnRlbnQgPSAoc2VsZi5lcnJvcl9tZXNzYWdlX2Zvcm1hdCAlCi0gICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBleHBsYWlufSkKKyAgICAgICAgICAgICAgICAgICB7J2NvZGUnOiBjb2RlLCAnbWVzc2FnZSc6IF9xdW90ZV9odG1sKG1lc3NhZ2UpLCAnZXhwbGFpbic6IF9xdW90ZV9odG1sKGV4cGxhaW4pfSkKKyAgICAgICAgYm9keSA9IGNvbnRlbnQuZW5jb2RlKCdVVEYtOCcsICdyZXBsYWNlJykKICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtVHlwZSIsIHNlbGYuZXJyb3JfY29udGVudF90eXBlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb25uZWN0aW9uJywgJ2Nsb3NlJykKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1MZW5ndGgnLCBpbnQobGVuKGJvZHkpKSkKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIGlmIHNlbGYuY29tbWFuZCAhPSAnSEVBRCcgYW5kIGNvZGUgPj0gMjAwIGFuZCBjb2RlIG5vdCBpbiAoMjA0LCAzMDQpOgotICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQogCiAgICAgZGVmIHNlbmRfcmVzcG9uc2Uoc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lKToKICAgICAgICAgIiIiQWRkIHRoZSByZXNwb25zZSBoZWFkZXIgdG8gdGhlIGhlYWRlcnMgYnVmZmVyIGFuZCBsb2cgdGhlCkBAIC03MDksNyArNzE3LDcgQEAKICAgICAgICAgY3R5cGUgPSBzZWxmLmd1ZXNzX3R5cGUocGF0aCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCwgIkZpbGUgbm90IGZvdW5kIikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCkBAIC03MzAsNyArNzM4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpc3QgPSBvcy5saXN0ZGlyKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDA0LCAiTm8gcGVybWlzc2lvbiB0byBsaXN0IGRpcmVjdG9yeSIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBsaXN0LnNvcnQoa2V5PWxhbWJkYSBhOiBhLmxvd2VyKCkpCkBAIC0xMTI0LDcgKzExMzIsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQpAQCAtMTE3NywxNSArMTE4NSwxNSBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCi1kZWYgdGVzdChIYW5kbGVyQ2xhc3MgPSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgU2VydmVyQ2xhc3MgPSBIVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDApOgorZGVmIHRlc3QoSGFuZGxlckNsYXNzPUJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICBTZXJ2ZXJDbGFzcz1IVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDAsIGJpbmQ9IiIpOgogICAgICIiIlRlc3QgdGhlIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLgogCiAgICAgVGhpcyBydW5zIGFuIEhUVFAgc2VydmVyIG9uIHBvcnQgODAwMCAob3IgdGhlIGZpcnN0IGNvbW1hbmQgbGluZQogICAgIGFyZ3VtZW50KS4KIAogICAgICIiIgotICAgIHNlcnZlcl9hZGRyZXNzID0gKCcnLCBwb3J0KQorICAgIHNlcnZlcl9hZGRyZXNzID0gKGJpbmQsIHBvcnQpCiAKICAgICBIYW5kbGVyQ2xhc3MucHJvdG9jb2xfdmVyc2lvbiA9IHByb3RvY29sCiAgICAgaHR0cGQgPSBTZXJ2ZXJDbGFzcyhzZXJ2ZXJfYWRkcmVzcywgSGFuZGxlckNsYXNzKQpAQCAtMTIwMywxMiArMTIxMSwxNiBAQAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNnaScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1J1biBhcyBDR0kgU2VydmVyJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJpbmQnLCAnLWInLCBkZWZhdWx0PScnLCBtZXRhdmFyPSdBRERSRVNTJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIGJpbmQgYWRkcmVzcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdbZGVmYXVsdDogYWxsIGludGVyZmFjZXNdJykKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdwb3J0JywgYWN0aW9uPSdzdG9yZScsCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTgwMDAsIHR5cGU9aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgbmFyZ3M9Jz8nLAogICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU3BlY2lmeSBhbHRlcm5hdGUgcG9ydCBbZGVmYXVsdDogODAwMF0nKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAgICAgaWYgYXJncy5jZ2k6Ci0gICAgICAgIHRlc3QoSGFuZGxlckNsYXNzPUNHSUhUVFBSZXF1ZXN0SGFuZGxlciwgcG9ydD1hcmdzLnBvcnQpCisgICAgICAgIGhhbmRsZXJfY2xhc3MgPSBDR0lIVFRQUmVxdWVzdEhhbmRsZXIKICAgICBlbHNlOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCisgICAgdGVzdChIYW5kbGVyQ2xhc3M9aGFuZGxlcl9jbGFzcywgcG9ydD1hcmdzLnBvcnQsIGJpbmQ9YXJncy5iaW5kKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5IGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CmluZGV4IGM5YWQzNjQuLmVhZjY4Y2IgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKQEAgLTU0OCw3ICs1NDgsNyBAQAogICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShzZWxmLmhlbHBfdXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZT0nRG9jdW1lbnQgU3RhcnQgRmFpbHVyZScsCiAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGVsc2U6CkBAIC04NzEsNyArODcxLDcgQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbic6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoaGVscGZpbGUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdEb2N1bWVudCBTdGFydCBGYWlsdXJlJywKICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9c3RyKHdoeSksIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQppbmRleCAzN2EzMzdlLi5hOTk4OWE4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9GaWxlTGlzdC5weQpAQCAtMTAzLDcgKzEwMyw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwd2QsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weSBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKaW5kZXggMmUwNzMxMi4uYzAwNzRlMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CkBAIC0xMjUsNCArMTI1LDMgQEAKICAgICAjIEhlbmNlIElkbGUgbXVzdCBiZSByZXN0YXJ0ZWQgYWZ0ZXIgZWRpdGluZyB0aGlzIGZpbGUgZm9yIGEgbGl2ZSB0ZXN0LgogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfZ3JlcCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQotCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkgYi9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKaW5kZXggY2JhODA0OC4uNzU4OWFiOCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CisrKyBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQpAQCAtNTAzLDcgKzUwMyw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9ICIiCiAgICAgICAgICAgICByZXR1cm4gcHdkLCAiIgogCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ORVdTLnR4dCBiL0xpYi9pZGxlbGliL05FV1MudHh0CmluZGV4IDU0NTA3MDEuLjQ3OGMxODMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL05FV1MudHh0CisrKyBiL0xpYi9pZGxlbGliL05FV1MudHh0CkBAIC0xLDEyICsxLDEwIEBACi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjI/CitXaGF0J3MgTmV3IGluIElETEUgMy40LjA/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC0gSXNzdWUgIzE3MzkwOiBEaXNwbGF5IFB5dGhvbiB2ZXJzaW9uIG9uIElkbGUgdGl0bGUgYmFyLgogICBJbml0aWFsIHBhdGNoIGJ5IEVkbW9uZCBCdXJuZXR0LgogCi0KLVdoYXQncyBOZXcgaW4gSURMRSAzLjMuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KKy0gSXNzdWUgIzUwNjY6IFVwZGF0ZSBJRExFIGRvY3MuIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgogCiAtIElzc3VlICMxNzYyNTogQ2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKaW5kZXggYmE0MDcxOS4uNWU1YzZiZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBkZWYgR2V0U3ViTGlzdChzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNlbGYuZGlyIG9yIG9zLmN1cmRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICBwYWNrYWdlcyA9IFtdCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weSBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKaW5kZXggYjJhMWY1OC4uMzZhZmY5MiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUHlTaGVsbC5weQorKysgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CkBAIC00MTksNyArNDE5LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnJwY2NsdCA9IE15UlBDQ2xpZW50KGFkZHIpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9wb3J0X2JpbmRpbmdfZXJyb3IoKQpAQCAtMTAzNCw3ICsxMDM0LDEwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBub3N1YiA9ICI9PT09IE5vIFN1YnByb2Nlc3MgPT09PSIKKyAgICAgICAgICAgIG5vc3ViID0gKCI9PT09IE5vIFN1YnByb2Nlc3MgPT09PVxuXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIldBUk5JTkc6IFJ1bm5pbmcgSURMRSB3aXRob3V0IGEgU3VicHJvY2VzcyBpcyBkZXByZWNhdGVkXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBsYXRlciB2ZXJzaW9uLiBTZWUgSGVscC9JRExFIEhlbHBcbiIgKworICAgICAgICAgICAgICAgICAgICAiZm9yIGRldGFpbHMuXG5cbiIpCiAgICAgICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBycGMuZGlzcGxheWhvb2sKIAogICAgICAgICBzZWxmLndyaXRlKCJQeXRob24gJXMgb24gJXNcbiVzXG4lcyIgJQpAQCAtMTM5Miw3ICsxMzk1LDggQEAKICAgICAgICBpZGxlICBbLWRuc10gWy10IHRpdGxlXSAtIFthcmddKgogCiAgIC1oICAgICAgICAgcHJpbnQgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSAgLW4gICAgICAgICBydW4gSURMRSB3aXRob3V0IGEgc3VicHJvY2VzcyAoc2VlIEhlbHAvSURMRSBIZWxwIGZvciBkZXRhaWxzKQorICAtbiAgICAgICAgIHJ1biBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIChERVBSRUNBVEVELAorICAgICAgICAgICAgIHNlZSBIZWxwL0lETEUgSGVscCBmb3IgZGV0YWlscykKIAogVGhlIGZvbGxvd2luZyBvcHRpb25zIHdpbGwgb3ZlcnJpZGUgdGhlIElETEUgJ3NldHRpbmdzJyBjb25maWd1cmF0aW9uOgogCkBAIC0xNDcwLDYgKzE0NzQsOCBAQAogICAgICAgICBpZiBvID09ICctaSc6CiAgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBUcnVlCiAgICAgICAgIGlmIG8gPT0gJy1uJzoKKyAgICAgICAgICAgIHByaW50KCIgV2FybmluZzogcnVubmluZyBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHVzZV9zdWJwcm9jZXNzID0gRmFsc2UKICAgICAgICAgaWYgbyA9PSAnLXInOgogICAgICAgICAgICAgc2NyaXB0ID0gYQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weSBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKaW5kZXggMjViYWU0OC4uMWY0ODU0ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQorKysgYi9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CkBAIC0zODEsNyArMzgxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYucGF0aCwgbmV3cGF0aCkKICAgICAgICAgICAgIHNlbGYucGF0aCA9IG5ld3BhdGgKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBHZXRJY29uTmFtZShzZWxmKToKQEAgLTM5NCw3ICszOTQsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5wYXRoKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIG5hbWVzLnNvcnQoa2V5ID0gb3MucGF0aC5ub3JtY2FzZSkKICAgICAgICAgc3VibGlzdCA9IFtdCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5IGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQppbmRleCBhOTc0ZDU0Li5lYTIwMTBlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKQEAgLTI3MSw4ICsyNzEsMTAgQEAKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKwogICAgIGRlZiBTZXRPcHRpb24oc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CiAgICAgICAgICIiIkluIHVzZXIncyBjb25maWcgZmlsZSwgc2V0IHNlY3Rpb24ncyBvcHRpb24gdG8gdmFsdWUuCisKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKIApAQCAtNjM4LDggKzY0MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGtleUJpbmRpbmdzCisKICAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLGNvbmZpZ1NldCk6CiAgICAgICAgICIiIkZldGNoIGxpc3Qgb2YgZXh0cmEgaGVscCBzb3VyY2VzIGZyb20gYSBnaXZlbiBjb25maWdTZXQuCisKICAgICAgICAgVmFsaWQgY29uZmlnU2V0cyBhcmUgJ3VzZXInIG9yICdkZWZhdWx0Jy4gIFJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIG9mCiAgICAgICAgIHRoZSBmb3JtIChtZW51X2l0ZW0gLCBwYXRoX3RvX2hlbHBfZmlsZSAsIG9wdGlvbiksIG9yIHJldHVybiB0aGUgZW1wdHkKICAgICAgICAgbGlzdC4gICdvcHRpb24nIGlzIHRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIGhlbHAgcmVzb3VyY2UuICAnb3B0aW9uJwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaGVscC50eHQgYi9MaWIvaWRsZWxpYi9oZWxwLnR4dAppbmRleCBmZjc4NmM1Li42Mzc4YTJlIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9oZWxwLnR4dAorKysgYi9MaWIvaWRsZWxpYi9oZWxwLnR4dApAQCAtMSwxNDIgKzEsMTg1IEBACiBbU2VlIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciAqKiBUSVBTICoqIG9uIHVzaW5nIElETEUgISFdCiAKLUNsaWNrIG9uIHRoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhCi1zZXBhcmF0ZSB3aW5kb3cgY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkLgorSURMRSBpcyB0aGUgUHl0aG9uIElERSBidWlsdCB3aXRoIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0LgogCi1GaWxlIE1lbnU6CitJRExFIGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorLWNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0CistY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIFVuaXgsIGFuZCBPUyBYCistbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsIHNtYXJ0IGluZGVudCwKK2NhbGwgdGlwcywgYW5kIG1hbnkgb3RoZXIgZmVhdHVyZXMKKy1QeXRob24gc2hlbGwgd2luZG93IChhLmsuYSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKKy1kZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKLQlOZXcgRmlsZSAgICAgICAgIC0tIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93Ci0JT3Blbi4uLiAgICAgICAgICAtLSBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKLQlSZWNlbnQgRmlsZXMuLi4gIC0tIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcwotCU9wZW4gTW9kdWxlLi4uICAgLS0gT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQotCUNsYXNzIEJyb3dzZXIgICAgLS0gU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQotCVBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcworTWVudXM6CisKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiBJRExFJ3MKK21lbnVzIGR5bmFtaWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBFYWNoIG1lbnUKK2RvY3VtZW50ZWQgYmVsb3cgaW5kaWNhdGVzIHdoaWNoIHdpbmRvdyB0eXBlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gQ2xpY2sgb24KK3RoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhIHNlcGFyYXRlIHdpbmRvdworY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkIChmb3IgVW5peCBhbmQgV2luZG93cyBvbmx5KS4KKworRmlsZSBNZW51IChTaGVsbCBhbmQgRWRpdG9yKToKKworICAgICAgICBOZXcgRmlsZSAgICAgICAgIC0tIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93CisgICAgICAgIE9wZW4uLi4gICAgICAgICAgLS0gT3BlbiBhbiBleGlzdGluZyBmaWxlCisgICAgICAgIE9wZW4gTW9kdWxlLi4uICAgLS0gT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorICAgICAgICBSZWNlbnQgRmlsZXMuLi4gIC0tIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcworICAgICAgICBDbGFzcyBCcm93c2VyICAgIC0tIFNob3cgY2xhc3NlcyBhbmQgbWV0aG9kcyBpbiBjdXJyZW50IGZpbGUKKyAgICAgICAgUGF0aCBCcm93c2VyICAgICAtLSBTaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBjbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBtZXRob2RzCi0JLS0tCi0JU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKLQkJICAgICAgICAgICAgd2luZG93cyBoYXZlIGEgKiBiZWZvcmUgYW5kIGFmdGVyIHRoZSB3aW5kb3cgdGl0bGUpCisgICAgICAgIC0tLQorICAgICAgICBTYXZlICAgICAgICAgICAgIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQogCi0JU2F2ZSBBcy4uLiAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzCi0JCSAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKLQlTYXZlIENvcHkgQXMuLi4gIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUKLQkJICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JLS0tCi0JUHJpbnQgV2luZG93ICAgICAtLSBQcmludCB0aGUgY3VycmVudCB3aW5kb3cKLQktLS0KLQlDbG9zZSAgICAgICAgICAgIC0tIENsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKLQlFeGl0ICAgICAgICAgICAgIC0tIENsb3NlIGFsbCB3aW5kb3dzLCBxdWl0IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgICAgICAgU2F2ZSBBcy4uLiAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIG5ldyBmaWxlLCB3aGljaCBiZWNvbWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgICAgICBTYXZlIENvcHkgQXMuLi4gIC0tIFNhdmUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgLS0tCisgICAgICAgIFByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDbG9zZSAgICAgICAgICAgIC0tIENsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgICAgICAgRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCiAKLUVkaXQgTWVudToKK0VkaXQgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQotCVJlZG8gICAgICAgICAgICAgLS0gUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKLQktLS0KLQlDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCisgICAgICAgIFVuZG8gICAgICAgICAgICAgLS0gVW5kbyBsYXN0IGNoYW5nZSB0byBjdXJyZW50IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhIG1heGltdW0gb2YgMTAwMCBjaGFuZ2VzIG1heSBiZSB1bmRvbmUpCisgICAgICAgIFJlZG8gICAgICAgICAgICAgLS0gUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgLS0tCisgICAgICAgIEN1dCAgICAgICAgICAgICAgLS0gQ29weSBhIHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uCi0JQ29weSAgICAgICAgICAgICAtLSBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAotCVBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdwotCVNlbGVjdCBBbGwgICAgICAgLS0gU2VsZWN0IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGVkaXQgYnVmZmVyCi0JLS0tCi0JRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKLQlGaW5kIEFnYWluICAgICAgIC0tIFJlcGVhdCBsYXN0IHNlYXJjaAotCUZpbmQgU2VsZWN0aW9uICAgLS0gU2VhcmNoIGZvciB0aGUgc3RyaW5nIGluIHRoZSBzZWxlY3Rpb24KLQlGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCi0JUmVwbGFjZS4uLiAgICAgICAtLSBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZyBib3gKLQlHbyB0byBMaW5lICAgICAgIC0tIEFzayBmb3IgYSBsaW5lIG51bWJlciBhbmQgc2hvdyB0aGF0IGxpbmUKLQlTaG93IENhbGx0aXAgICAgIC0tIE9wZW4gYSBzbWFsbCB3aW5kb3cgd2l0aCBmdW5jdGlvbiBwYXJhbSBoaW50cwotCVNob3cgQ29tcGxldGlvbnMgLS0gT3BlbiBhIHNjcm9sbCB3aW5kb3cgYWxsb3dpbmcgc2VsZWN0aW9uIGtleXdvcmRzCi0JCQkgICAgYW5kIGF0dHJpYnV0ZXMuIChzZWUgJypUSVBTKicsIGJlbG93KQotCVNob3cgUGFyZW5zCSAtLSBIaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIHBhcmVudGhlc2lzCi0JRXhwYW5kIFdvcmQgICAgICAtLSBFeHBhbmQgdGhlIHdvcmQgeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYW5vdGhlcgotCQkgICAgICAgICAgICB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsgcmVwZWF0IHRvIGdldCBhCisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIFNlbGVjdCBBbGwgICAgICAgLS0gU2VsZWN0IHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGVkaXQgYnVmZmVyCisgICAgICAgIC0tLQorICAgICAgICBGaW5kLi4uICAgICAgICAgIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCB3aXRoIG1hbnkgb3B0aW9ucworICAgICAgICBGaW5kIEFnYWluICAgICAgIC0tIFJlcGVhdCBsYXN0IHNlYXJjaAorICAgICAgICBGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCisgICAgICAgIEZpbmQgaW4gRmlsZXMuLi4gLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IGZvciBzZWFyY2hpbmcgZmlsZXMKKyAgICAgICAgUmVwbGFjZS4uLiAgICAgICAtLSBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZyBib3gKKyAgICAgICAgR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCisgICAgICAgIEV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkIGluIHRoZSBzYW1lIGJ1ZmZlcjsgcmVwZWF0IHRvIGdldCBhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGV4cGFuc2lvbgorICAgICAgICBTaG93IENhbGx0aXAgICAgIC0tIEFmdGVyIGFuIHVuY2xvc2VkIHBhcmVudGhlc2lzIGZvciBhIGZ1bmN0aW9uLCBvcGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBzbWFsbCB3aW5kb3cgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgaGludHMKKyAgICAgICAgU2hvdyBQYXJlbnMgICAgICAtLSBIaWdobGlnaHQgdGhlIHN1cnJvdW5kaW5nIHBhcmVudGhlc2lzCisgICAgICAgIFNob3cgQ29tcGxldGlvbnMgLS0gT3BlbiBhIHNjcm9sbCB3aW5kb3cgYWxsb3dpbmcgc2VsZWN0aW9uIGtleXdvcmRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGF0dHJpYnV0ZXMuIChzZWUgJypUSVBTKicsIGJlbG93KQogCi1Gb3JtYXQgTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitGb3JtYXQgTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCUluZGVudCBSZWdpb24gICAgICAgLS0gU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgNCBzcGFjZXMKLQlEZWRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgNCBzcGFjZXMKLQlDb21tZW50IE91dCBSZWdpb24gIC0tIEluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcwotCVVuY29tbWVudCBSZWdpb24gICAgLS0gUmVtb3ZlIGxlYWRpbmcgIyBvciAjIyBmcm9tIHNlbGVjdGVkIGxpbmVzCi0JVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMKLQkJKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQotCVVudGFiaWZ5IFJlZ2lvbiAgICAgLS0gVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIHJpZ2h0IG51bWJlciBvZiBzcGFjZXMKLQlOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGgKLQlGb3JtYXQgUGFyYWdyYXBoICAgIC0tIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoCisgICAgICAgIEluZGVudCBSZWdpb24gICAgICAgLS0gU2hpZnQgc2VsZWN0ZWQgbGluZXMgcmlnaHQgYnkgdGhlIGluZGVudCB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDQgc3BhY2VzKQorICAgICAgICBEZWRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgYnkgdGhlIGluZGVudCB3aWR0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDQgc3BhY2VzKQorICAgICAgICBDb21tZW50IE91dCBSZWdpb24gIC0tIEluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcworICAgICAgICBVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcworICAgICAgICBUYWJpZnkgUmVnaW9uICAgICAgIC0tIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4KKyAgICAgICAgICAgICAgICAoTm90ZTogV2UgcmVjb21tZW5kIHVzaW5nIDQgc3BhY2UgYmxvY2tzIHRvIGluZGVudCBQeXRob24gY29kZS4pCisgICAgICAgIFVudGFiaWZ5IFJlZ2lvbiAgICAgLS0gVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlbnQgbnVtYmVyIG9mIHNwYWNlcworICAgICAgICBUb2dnbGUgdGFicyAgICAgICAgIC0tIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZXMgYW5kIHRhYnMuCisgICAgICAgIE5ldyBJbmRlbnQgV2lkdGguLi4gLS0gT3BlbiBhIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWQgZGVmYXVsdCBieSB0aGUgUHl0aG9uIGNvbW11bml0eSBpcyA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzLgorICAgICAgICBGb3JtYXQgUGFyYWdyYXBoICAgIC0tIFJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtc2VwYXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYWdyYXBoLiBBbGwgbGluZXMgaW4gdGhlIHBhcmFncmFwaCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkIHRvIGxlc3MgdGhhbiA4MCBjb2x1bW5zLgorICAgICAgICAtLS0KKyAgICAgICAgU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSAtLSBSZW1vdmVkIGFueSBzcGFjZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyCiAKLVJ1biBNZW51IChvbmx5IGluIEVkaXQgd2luZG93KToKK1J1biBNZW51IChFZGl0b3Igd2luZG93IG9ubHkpOgogCi0JUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdwotCS0tLQotCUNoZWNrIE1vZHVsZSAtLSBSdW4gYSBzeW50YXggY2hlY2sgb24gdGhlIG1vZHVsZQotCVJ1biBNb2R1bGUgICAtLSBFeGVjdXRlIHRoZSBjdXJyZW50IGZpbGUgaW4gdGhlIF9fbWFpbl9fIG5hbWVzcGFjZQorICAgICAgICBQeXRob24gU2hlbGwgLS0gT3BlbiBvciB3YWtlIHVwIHRoZSBQeXRob24gc2hlbGwgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDaGVjayBNb2R1bGUgLS0gQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yIHdpbmRvdy4gIElmIHRoZSBtb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlIGNvZGUuCisgICAgICAgIFJ1biBNb2R1bGUgICAtLSBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQsIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGUgdGhlIGN1cnJlbnRseSBvcGVuIG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBoYXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuCiAKLVNoZWxsIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK1NoZWxsIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCVZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IHJlc3RhcnQKLQlSZXN0YXJ0IFNoZWxsICAgICAtLSBSZXN0YXJ0IHRoZSBpbnRlcnByZXRlciB3aXRoIGEgZnJlc2ggZW52aXJvbm1lbnQKKyAgICAgICAgVmlldyBMYXN0IFJlc3RhcnQgLS0gU2Nyb2xsIHRoZSBzaGVsbCB3aW5kb3cgdG8gdGhlIGxhc3QgU2hlbGwgcmVzdGFydAorICAgICAgICBSZXN0YXJ0IFNoZWxsICAgICAtLSBSZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUgZW52aXJvbm1lbnQKIAotRGVidWcgTWVudSAob25seSBpbiBTaGVsbCB3aW5kb3cpOgorRGVidWcgTWVudSAoU2hlbGwgd2luZG93IG9ubHkpOgogCi0JR28gdG8gRmlsZS9MaW5lICAgLS0gbG9vayBhcm91bmQgdGhlIGluc2VydCBwb2ludCBmb3IgYSBmaWxlbmFtZQotCQkgICAgICAgICAgICAgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLCBhbmQgc2hvdyB0aGUgbGluZQotCURlYnVnZ2VyICh0b2dnbGUpIC0tIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlIGRlYnVnZ2VyCi0JU3RhY2sgVmlld2VyICAgICAgLS0gU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbgotCUF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gT3BlbiBzdGFjayB2aWV3ZXIgb24gdHJhY2ViYWNrCisgICAgICAgIEdvIHRvIEZpbGUvTGluZSAgIC0tIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLCBhbmQgc2hvdyB0aGUgbGluZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlZnVsIHRvIHZpZXcgdGhlIHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suICBBdmFpbGFibGUgaW4gdGhlIGNvbnRleHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVudSBvZiB0aGUgU2hlbGwgd2luZG93LgorICAgICAgICBEZWJ1Z2dlciAodG9nZ2xlKSAtLSBUaGlzIGZlYXR1cmUgaXMgbm90IGNvbXBsZXRlIGFuZCBjb25zaWRlcmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhbC4gUnVuIGNvbW1hbmRzIGluIHRoZSBzaGVsbCB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdnZXIuCisgICAgICAgIFN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KKyAgICAgICAgQXV0by1vcGVuIFN0YWNrIFZpZXdlciAodG9nZ2xlKSAtLSBUb2dnbGUgYXV0b21hdGljYWxseSBvcGVuaW5nIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrIHZpZXdlciBvbiB1bmhhbmRsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24KIAotT3B0aW9ucyBNZW51OgorT3B0aW9ucyBNZW51IChTaGVsbCBhbmQgRWRpdG9yKToKIAotCUNvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKKyAgICAgICAgQ29uZmlndXJlIElETEUgLS0gT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nLiAgRm9udHMsIGluZGVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXliaW5kaW5ncywgYW5kIGNvbG9yIHRoZW1lcyBtYXkgYmUgYWx0ZXJlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnR1cCBQcmVmZXJlbmNlcyBtYXkgYmUgc2V0LCBhbmQgQWRkaXRpb25hbCBIZWxwCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KLQkJCSAgCi0JCQkgIE9uIE9TIFggdGhpcyBtZW51IGlzIG5vdCBwcmVzZW50LCB1c2UKLQkJCSAgbWVudSAnSURMRSAtPiBQcmVmZXJlbmNlcy4uLicgaW5zdGVhZC4KLQktLS0KLQlDb2RlIENvbnRleHQgLS0JICBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdyB3aGljaAotCQkJICBzaG93cyB0aGUgYmxvY2sgY29udGV4dCBvZiB0aGUgc2VjdGlvbiBvZiBjb2RlCi0JCQkgIHdoaWNoIGlzIHNjcm9sbGluZyBvZmYgdGhlIHRvcCBvciB0aGUgd2luZG93LgotCQkJICAoTm90IHByZXNlbnQgaW4gU2hlbGwgd2luZG93LikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnR1cCBQcmVmZXJlbmNlcyBtYXkgYmUgc2V0LCBhbmQgYWRkaXRpb25hbCBIZWxwCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZC4KIAotV2luZG93cyBNZW51OgorICAgICAgICAtLS0KKyAgICAgICAgQ29kZSBDb250ZXh0ICh0b2dnbGUpIC0tIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBzaG93cyB0aGUgYmxvY2sgY29udGV4dCBvZiB0aGUgc2VjdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgY29kZSB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuIFRoaXMgaXMgbm90IHByZXNlbnQgaW4gdGhlIFNoZWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cgb25seSB0aGUgRWRpdG9yIHdpbmRvdy4KIAotCVpvb20gSGVpZ2h0IC0tIHRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIGNvbmZpZ3VyZWQgc2l6ZQotCWFuZCBtYXhpbXVtIGhlaWdodC4KLQktLS0KLQlUaGUgcmVzdCBvZiB0aGlzIG1lbnUgbGlzdHMgdGhlIG5hbWVzIG9mIGFsbCBvcGVuIHdpbmRvd3M7Ci0Jc2VsZWN0IG9uZSB0byBicmluZyBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmCi0JbmVjZXNzYXJ5KS4KK1dpbmRvd3MgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgWm9vbSBIZWlnaHQgLS0gVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDQweDgwIGluaXRpYWwKKyAgICAgICAgc2V0dGluZykgYW5kIG1heGltdW0gaGVpZ2h0LiAgVGhlIGluaXRpYWwgc2l6ZSBpcyBpbiB0aGUgQ29uZmlndXJlCisgICAgICAgIElETEUgZGlhbG9nIHVuZGVyIHRoZSBnZW5lcmFsIHRhYi4KKyAgICAgICAgLS0tCisgICAgICAgIFRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsKKyAgICAgICAgc2VsZWN0IG9uZSB0byBicmluZyBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmCisgICAgICAgIG5lY2Vzc2FyeSkuCiAKIEhlbHAgTWVudToKIAotCUFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cwotCUlETEUgUmVhZG1lIC0tIEJhY2tncm91bmQgZGlzY3Vzc2lvbiBhbmQgY2hhbmdlIGRldGFpbHMKLQktLS0KLQlJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZQotCVB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKLQkJICAgICAgIGluc3RhbGxlZC4gIE90aGVyd2lzZSwgYWNjZXNzIHd3dy5weXRob24ub3JnLgotCS0tLQotCShBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSkKKyAgICAgICAgQWJvdXQgSURMRSAgLS0gVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisgICAgICAgIC0tLQorICAgICAgICBJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZSB3aGljaCBpcyBhIGhlbHAgZmlsZSBmb3IgSURMRQorICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHRpcHMuCisgICAgICAgIFB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLiAgT3Igd2lsbCBzdGFydCBhIHdlYiBicm93c2VyIGFuZCBvcGVuCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCisgICAgICAgIC0tLQorICAgICAgICBBZGRpdGlvbmFsIGhlbHAgc291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSB3aXRoIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIEdlbmVyYWwgdGFiLgogCi1FZGl0IGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgorRWRpdG9yIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50ICh3aGVuIGRlYnVnZ2VyIG9wZW4pCi0JQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIFNldCBCcmVha3BvaW50ICAgLS0gU2V0cyBhIGJyZWFrcG9pbnQuIEJyZWFrcG9pbnRzIGFyZSBvbmx5IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBvcGVuLgorICAgICAgICBDbGVhciBCcmVha3BvaW50IC0tIENsZWFycyB0aGUgYnJlYWtwb2ludCBvbiB0aGF0IGxpbmUKIAogU2hlbGwgY29udGV4dCBtZW51IChSaWdodC1jbGljayAvIENvbnRyb2wtY2xpY2sgb24gT1MgWCBpbiBTaGVsbCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQktLS0KLQlHbyB0byBmaWxlL2xpbmUgIC0tIFNhbWUgYXMgaW4gRGVidWcgbWVudQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKIAogCiAqKiBUSVBTICoqCkBAIC0xNDQsMTU5ICsxODcsMTgyIEBACiAKIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzOgogCi0JV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgotCXRoZSBXaW5kb3dzIGhlbHAgZm9ybWF0LiAgVGhlIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzIGZlYXR1cmUgb2YgdGhlCi0JY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCi0Jc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQotCWxvY2F0aW9uIGluIHRoZSBIZWxwIEZpbGUgUGF0aCBzbG90IG9mIHRoZSBOZXcgSGVscCBTb3VyY2UgZGlhbG9nLiAgVXNlCi0JaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKLQlicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KKyAgICAgICAgV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgorICAgICAgICB0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQorICAgICAgICBjb25maWd1cmF0aW9uIEdVSSBzdXBwb3J0cyAuY2htLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxldHlwZXMKKyAgICAgICAgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQorICAgICAgICBsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQorICAgICAgICBodHRwOi8vIGFuZC9vciB3d3cuIHRvIGlkZW50aWZ5IGV4dGVybmFsIFVSTHMsIG9yIGRvd25sb2FkIHRoZSBmaWxlIGFuZAorICAgICAgICBicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KIAotCUFsbCB1c2VycyBjYW4gYWNjZXNzIHRoZSBleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcKLQl0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCB3d3cucHl0aG9uLm9yZy9kb2MuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAotCW9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgorICAgICAgICBBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCisgICAgICAgIHR1dG9yaWFscywgYXZhaWxhYmxlIGF0IGRvY3MucHl0aG9uLm9yZy4gIFNlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkCisgICAgICAgIG9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgogCiBCYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uOgogCi0JQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCi0JQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KLQlBcnJvdyBrZXlzIGFuZCBQYWdlIFVwL0Rvd24gbW92ZSBhcm91bmQuCi0JQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KLQlIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KLQlDb250cm9sLUhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlLgotCVNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6Ci0JCUNvbnRyb2wtYSAgICAgYmVnaW5uaW5nIG9mIGxpbmUKLQkJQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQotCQlDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKLQkJQ29udHJvbC1sICAgICBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50Ci0JU3RhbmRhcmQgV2luZG93cyBiaW5kaW5ncyBtYXkgd29yayBvbiB0aGF0IHBsYXRmb3JtLgotCUtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgU2V0dGluZ3MgRGlhbG9nLCBsb29rIHRoZXJlLgorICAgICAgICBCYWNrc3BhY2UgZGVsZXRlcyBjaGFyIHRvIHRoZSBsZWZ0OyBERUwgZGVsZXRlcyBjaGFyIHRvIHRoZSByaWdodC4KKyAgICAgICAgQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KKyAgICAgICAgQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgorICAgICAgICBDb250cm9sLWxlZnQvcmlnaHQgQXJyb3cgbW92ZXMgYnkgd29yZHMgaW4gYSBzdHJhbmdlIGJ1dCB1c2VmdWwgd2F5LgorICAgICAgICBIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KKyAgICAgICAgQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KKyAgICAgICAgU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKKyAgICAgICAgICAgICAgICBDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCisgICAgICAgICAgICAgICAgQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtayAgICAga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQorICAgICAgICAgICAgICAgIENvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAorICAgICAgICBTdGFuZGFyZCBrZXliaW5kaW5ncyAobGlrZSBDb250cm9sLWMgdG8gY29weSBhbmQgQ29udHJvbC12IHRvCisgICAgICAgIHBhc3RlKSBtYXkgd29yay4gIEtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nLgogCiBBdXRvbWF0aWMgaW5kZW50YXRpb246CiAKLQlBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCi0JKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcwotCShicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCi0JaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCi0JaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbgotCUluZGVudCBXaWR0aC4gIChOLkIuIEN1cnJlbnRseSB0YWJzIGFyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZQotCXRvIFRjbC9UayBpc3N1ZXMuKQorICAgICAgICBBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCisgICAgICAgIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAgICAgICAgKGJyZWFrLCByZXR1cm4gZXRjLikgdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcKKyAgICAgICAgaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCisgICAgICAgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KKyAgICAgICAgSW5kZW50IFdpZHRoLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKKyAgICAgICAgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCiAgICAgICAgIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgogCiBDb21wbGV0aW9uczoKIAotCUNvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgotCWNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCi0JZm9yIGZpbGVuYW1lcy4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mCisgICAgICAgIGNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCisgICAgICAgIGZvciBmaWxlbmFtZXMuCiAKLQlUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKLQkoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKLQl0eXBlZC4gIElmIGFmdGVyIG9uZSBvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlcgotCWNoYXJhY3RlcnMpIHlvdSB0eXBlIGEgVGFiIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKLQljb250aW51YXRpb24gaXMgZm91bmQuCisgICAgICAgIFRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheQorICAgICAgICAoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKKyAgICAgICAgdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKKyAgICAgICAgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQgdGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZQorICAgICAgICBjb250aW51YXRpb24gaXMgZm91bmQuCiAKLQlJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCi0JVGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKyAgICAgICAgSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQorICAgICAgICB0YWIgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgogCi0JJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5Ci0Jc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQotCWJsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCi0JY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKLQljaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgorICAgICAgICAnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorICAgICAgICBDb250cm9sLXNwYWNlIGtleXMgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiAgSW4gYW4gZW1wdHkKKyAgICAgICAgc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQorICAgICAgICBibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorICAgICAgICBjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiAgSWYgc29tZQorICAgICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgogCi0JSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKLQllbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSBUYWIgd2lsbCBjYXVzZQotCXRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdCB3aW5kb3cgb3IKLQlTaGVsbC4gIFR3byBUYWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCi0Jd2lsbCBSZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQotCXNlbGVjdGlvbiwgYW5kIHRoZSBzY3JvbGx3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorICAgICAgICBJZiBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorICAgICAgICBlbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSB0YWIgd2lsbCBjYXVzZQorICAgICAgICB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCisgICAgICAgIFNoZWxsLiAgVHdvIHRhYnMgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKKyAgICAgICAgd2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQorICAgICAgICBzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCiAKLQknSGlkZGVuJyBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KLQluYW1lIGFmdGVyIGEgJy4nLiAgZS5nLiAnXycuICBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCi0JJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorICAgICAgICAiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KKyAgICAgICAgbmFtZSBhZnRlciBhICcuJywgIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAorICAgICAgICAnX19hbGxfXycgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCiAKLQlDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorICAgICAgICBDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQogCi0JQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KLQlhbiBFZGl0IHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQotCWZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKLQlzaXR1YXRpb24uICBOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4KLQlzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorICAgICAgICBDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuICBOYW1lcyBpbgorICAgICAgICBhbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIF9fbWFpbl9fIG9yIHN5cy5tb2R1bGVzIHdpbGwgbm90IGJlCisgICAgICAgIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKKyAgICAgICAgc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCisgICAgICAgIHN5cy5tb2R1bGVzLCBzbyBtdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCiAKLQlJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQotCWxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPVE9ILCB5b3UgY291bGQgbWFrZSB0aGUgZGVsYXkgemVyby4KLQotCVlvdSBjb3VsZCBhbHNvIHN3aXRjaCBvZmYgdGhlIENhbGxUaXBzIGV4dGVuc2lvbi4gIChXZSB3aWxsIGJlIGFkZGluZwotCWEgZGVsYXkgdG8gdGhlIGNhbGwgdGlwIHdpbmRvdy4pCisgICAgICAgIElmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5CisgICAgICAgIGxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPciBhbm90aGVyIG9wdGlvbiBpcyB0aGUgZGVsYXkgY291bGQKKyAgICAgICAgYmUgc2V0IHRvIHplcm8uIEFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gcHJldmVudGluZyBBQ1cgcG9wdXBzIGlzIHRvCisgICAgICAgIGRpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3c6CiAKLQlDb250cm9sLWMgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZC4KLQlDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCisgICAgICAgIENvbnRyb2wtZCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCA+Pj4gcHJvbXB0LgorICAgICAgICBBbHQtLyBleHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgogCiAgICAgQ29tbWFuZCBoaXN0b3J5OgogCi0JQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4KLQlBbHQtbiByZXRyaWV2ZXMgbmV4dC4KLQkgICAgICAoVGhlc2UgYXJlIENvbnRyb2wtcCwgQ29udHJvbC1uIG9uIE9TIFgpCi0JUmV0dXJuIHdoaWxlIGN1cnNvciBpcyBvbiBhIHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZC4KLQlFeHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgorICAgICAgICBBbHQtcCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbiBPUyBYCisgICAgICAgIHVzZSBDb250cm9sLXAuCisgICAgICAgIEFsdC1uIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSBDb250cm9sLW4uCisgICAgICAgIFJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCiAKICAgICBTeW50YXggY29sb3JzOgogCi0JVGhlIGNvbG9yaW5nIGlzIGFwcGxpZWQgaW4gYSBiYWNrZ3JvdW5kICJ0aHJlYWQiLCBzbyB5b3UgbWF5Ci0Jb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgotCXNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCisgICAgICAgIFRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQorICAgICAgICBvY2Nhc2lvbmFsbHkgc2VlIHVuY29sb3JpemVkIHRleHQuICBUbyBjaGFuZ2UgdGhlIGNvbG9yCisgICAgICAgIHNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCiAKICAgICBQeXRob24gZGVmYXVsdCBzeW50YXggY29sb3JzOgogCi0JS2V5d29yZHMJb3JhbmdlCi0JQnVpbHRpbnMJcm95YWwgcHVycGxlCi0JU3RyaW5ncwkJZ3JlZW4KLQlDb21tZW50cwlyZWQKLQlEZWZpbml0aW9ucwlibHVlCisgICAgICAgIEtleXdvcmRzICAgICAgICBvcmFuZ2UKKyAgICAgICAgQnVpbHRpbnMgICAgICAgIHJveWFsIHB1cnBsZQorICAgICAgICBTdHJpbmdzICAgICAgICAgZ3JlZW4KKyAgICAgICAgQ29tbWVudHMgICAgICAgIHJlZAorICAgICAgICBEZWZpbml0aW9ucyAgICAgYmx1ZQogCiAgICAgU2hlbGwgZGVmYXVsdCBjb2xvcnM6CiAKLQlDb25zb2xlIG91dHB1dAlicm93bgotCXN0ZG91dAkJYmx1ZQotCXN0ZGVycgkJcmVkCi0Jc3RkaW4JCWJsYWNrCisgICAgICAgIENvbnNvbGUgb3V0cHV0ICBicm93bgorICAgICAgICBzdGRvdXQgICAgICAgICAgYmx1ZQorICAgICAgICBzdGRlcnIgICAgICAgICAgcmVkCisgICAgICAgIHN0ZGluICAgICAgICAgICBibGFjawogCiBPdGhlciBwcmVmZXJlbmNlczoKIAotCVRoZSBmb250IHByZWZlcmVuY2VzLCBrZXliaW5kaW5nLCBhbmQgc3RhcnR1cCBwcmVmZXJlbmNlcyBjYW4KLQliZSBjaGFuZ2VkIHVzaW5nIHRoZSBTZXR0aW5ncyBkaWFsb2cuCisgICAgICAgIFRoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbgorICAgICAgICBiZSBjaGFuZ2VkIHZpYSB0aGUgQ29uZmlndXJlIElETEUgbWVudSBvcHRpb24uICBCZSBzdXJlIHRvIG5vdGUgdGhhdAorICAgICAgICBrZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQsIElETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbgorICAgICAgICBhZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIGtleXMgdGFiLgogCiBDb21tYW5kIGxpbmUgdXNhZ2U6CiAKLQlFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgorICAgICAgICBFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgogCi1SdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOgorICAgICAgICBpZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1zXSBbLXQgdGl0bGVdIFthcmddIC4uLgogCi0JSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQotCXNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCi0JUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKLQl0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCi0JaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQotCWVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKLQl5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAotCXJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKLQlhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQotCXdpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICAgIC1jIGNvbW1hbmQgIHJ1biB0aGlzIGNvbW1hbmQKKyAgICAgICAgLWQgICAgICAgICAgZW5hYmxlIGRlYnVnZ2VyCisgICAgICAgIC1lICAgICAgICAgIGVkaXQgbW9kZTsgYXJndW1lbnRzIGFyZSBmaWxlcyB0byBiZSBlZGl0ZWQKKyAgICAgICAgLXMgICAgICAgICAgcnVuICRJRExFU1RBUlRVUCBvciAkUFlUSE9OU1RBUlRVUCBmaXJzdAorICAgICAgICAtdCB0aXRsZSAgICBzZXQgdGl0bGUgb2Ygc2hlbGwgd2luZG93CisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGFyZ3VtZW50czoKKyAgICAgICAgMS4gSWYgLWUgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kIHN5cy5hcmd2CisgICAgICAgICAgIHJlZmxlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIElETEUgaXRzZWxmLgorICAgICAgICAyLiBPdGhlcndpc2UsIGlmIC1jIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0sIHdpdGggc3lzLmFyZ3ZbMF0gc2V0IHRvIC1jLgorICAgICAgICAzLiBPdGhlcndpc2UsIGlmIG5laXRoZXIgLWUgbm9yIC1jIGlzIHVzZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhCisgICAgICAgICAgIHNjcmlwdCB3aGljaCBpcyBleGVjdXRlZCB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGluCisgICAgICAgICAgIHN5cy5hcmd2WzE6Li4uXSAgYW5kIHN5cy5hcmd2WzBdIHNldCB0byB0aGUgc2NyaXB0IG5hbWUuICBJZiB0aGUKKyAgICAgICAgICAgc2NyaXB0IG5hbWUgaXMgLSwgbm8gc2NyaXB0IGlzIGV4ZWN1dGVkIGJ1dCBhbiBpbnRlcmFjdGl2ZSBQeXRob24KKyAgICAgICAgICAgc2Vzc2lvbiBpcyBzdGFydGVkOyB0aGUgYXJndW1lbnRzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gc3lzLmFyZ3YuCisKK1J1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3M6IChERVBSRUNBVEVEIGluIFB5dGhvbiAzLjQgc2VlIElzc3VlIDE2MTIzKQorCisgICAgICAgIElmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKKyAgICAgICAgc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKKyAgICAgICAgUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKKyAgICAgICAgdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAorICAgICAgICBpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCisgICAgICAgIGVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKKyAgICAgICAgeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKKyAgICAgICAgcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworICAgICAgICBhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQorICAgICAgICB3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgogCiBFeHRlbnNpb25zOgogCi0JSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgotCWNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0JVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgorICAgICAgICBJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgIGNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKIAotCQlGb3JtYXRQYXJhZ3JhcGgKLQkJQXV0b0V4cGFuZAotCQlab29tSGVpZ2h0Ci0JCVNjcmlwdEJpbmRpbmcKLQkJQ2FsbFRpcHMKLQkJUGFyZW5NYXRjaAotCQlBdXRvQ29tcGxldGUKLQkJQ29kZUNvbnRleHQKKyAgICAgICAgICAgICAgICBGb3JtYXRQYXJhZ3JhcGgKKyAgICAgICAgICAgICAgICBBdXRvRXhwYW5kCisgICAgICAgICAgICAgICAgWm9vbUhlaWdodAorICAgICAgICAgICAgICAgIFNjcmlwdEJpbmRpbmcKKyAgICAgICAgICAgICAgICBDYWxsVGlwcworICAgICAgICAgICAgICAgIFBhcmVuTWF0Y2gKKyAgICAgICAgICAgICAgICBBdXRvQ29tcGxldGUKKyAgICAgICAgICAgICAgICBDb2RlQ29udGV4dApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZXZlci5weSBiL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKaW5kZXggNjBmMWQzMi4uY2QyYzhiZiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZXZlci5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CkBAIC0xICsxIEBACi1JRExFX1ZFUlNJT04gPSAiMy4zLjMiCitJRExFX1ZFUlNJT04gPSAiMy40LjBiMSIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3JwYy5weSBiL0xpYi9pZGxlbGliL3JwYy5weQppbmRleCBkZGNlNmU5Li45YzUxYjhmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ycGMucHkKKysrIGIvTGliL2lkbGVsaWIvcnBjLnB5CkBAIC0xOTksNyArMTk5LDcgQEAKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleDoKICAgICAgICAgICAgIHJldHVybiAoIkNBTExFWEMiLCBleCkKQEAgLTM0MCw3ICszNDAsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBzZWxmLnNvY2suc2VuZChzWzpCVUZTSVpFXSkKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic29ja2V0IG5vIGxvbmdlciBleGlzdHMiKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHMgPSBzW246XQpAQCAtMzU3LDcgKzM1Nyw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzID0gc2VsZi5zb2NrLnJlY3YoQlVGU0laRSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgaWYgbGVuKHMpID09IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKQEAgLTUzNyw3ICs1MzcsNyBAQAogICAgICAgICAgICAgU29ja2V0SU8uX19pbml0X18oc2VsZiwgd29ya2luZ19zb2NrKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcHJpbnQoIioqIEludmFsaWQgaG9zdDogIiwgYWRkcmVzcywgZmlsZT1zeXMuX19zdGRlcnJfXykKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogCiAgICAgZGVmIGdldF9yZW1vdGVfcHJveHkoc2VsZiwgb2lkKToKICAgICAgICAgcmV0dXJuIFJQQ1Byb3h5KHNlbGYsIG9pZCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3J1bi5weSBiL0xpYi9pZGxlbGliL3J1bi5weQppbmRleCBjMTg1OWI2Li4xM2NlYzYyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ydW4ucHkKKysrIGIvTGliL2lkbGVsaWIvcnVuLnB5CkBAIC0xNTAsOCArMTUwLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VydmVyID0gTXlSUENTZXJ2ZXIoYWRkcmVzcywgTXlIYW5kbGVyKQogICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBwcmludCgiSURMRSBTdWJwcm9jZXNzOiBzb2NrZXQgZXJyb3I6ICIgKyBlcnIuYXJnc1sxXSArCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHByaW50KCJJRExFIFN1YnByb2Nlc3M6IE9TRXJyb3I6ICIgKyBlcnIuYXJnc1sxXSArCiAgICAgICAgICAgICAgICAgICAiLCByZXRyeWluZy4uLi4iLCBmaWxlPXN5cy5fX3N0ZGVycl9fKQogICAgICAgICAgICAgc29ja2V0X2Vycm9yID0gZXJyCiAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9pbWFwbGliLnB5IGIvTGliL2ltYXBsaWIucHkKaW5kZXggM2Y2NjU2YS4uYWRlMmY5YyAxMDA2NDQKLS0tIGEvTGliL2ltYXBsaWIucHkKKysrIGIvTGliL2ltYXBsaWIucHkKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTI4MSw3ICsyODEsNyBAQAogICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTU1NCw3ICs1NTQsNyBAQAogICAgICAgICBpbXBvcnQgaG1hYwogICAgICAgICBwd2QgPSAoc2VsZi5wYXNzd29yZC5lbmNvZGUoJ0FTQ0lJJykgaWYgaXNpbnN0YW5jZShzZWxmLnBhc3N3b3JkLCBzdHIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNlbGYucGFzc3dvcmQpCi0gICAgICAgIHJldHVybiBzZWxmLnVzZXIgKyAiICIgKyBobWFjLkhNQUMocHdkLCBjaGFsbGVuZ2UpLmhleGRpZ2VzdCgpCisgICAgICAgIHJldHVybiBzZWxmLnVzZXIgKyAiICIgKyBobWFjLkhNQUMocHdkLCBjaGFsbGVuZ2UsICdtZDUnKS5oZXhkaWdlc3QoKQogCiAKICAgICBkZWYgbG9nb3V0KHNlbGYpOgpAQCAtNzQyLDEyICs3NDIsMTIgQEAKICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ1RMUyBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCiAgICAgICAgICMgR2VuZXJhdGUgYSBkZWZhdWx0IFNTTCBjb250ZXh0IGlmIG5vbmUgd2FzIHBhc3NlZC4KICAgICAgICAgaWYgc3NsX2NvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgotICAgICAgICAgICAgc3NsX2NvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQogICAgICAgICB0eXAsIGRhdCA9IHNlbGYuX3NpbXBsZV9jb21tYW5kKG5hbWUpCiAgICAgICAgIGlmIHR5cCA9PSAnT0snOgotICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrKQorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5ob3N0IGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQogICAgICAgICAgICAgc2VsZi5fdGxzX2VzdGFibGlzaGVkID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fZ2V0X2NhcGFiaWxpdGllcygpCkBAIC05MTUsNyArOTE1LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnNlbmQoZGF0YSArIENSTEYpCi0gICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSBhcyB2YWw6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHZhbDoKICAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogJXMnICUgdmFsKQogCiAgICAgICAgIGlmIGxpdGVyYWwgaXMgTm9uZToKQEAgLTk0MCw3ICs5NDAsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc2VuZChsaXRlcmFsKQogICAgICAgICAgICAgICAgIHNlbGYuc2VuZChDUkxGKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIE9TRXJyb3IpIGFzIHZhbDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHZhbDoKICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICAgICAgaWYgbm90IGxpdGVyYXRvcjoKQEAgLTEwODUsNyArMTA4NSw3IEBACiAKICAgICAgICAgIyBQcm90b2NvbCBtYW5kYXRlcyBhbGwgbGluZXMgdGVybWluYXRlZCBieSBDUkxGCiAgICAgICAgIGlmIG5vdCBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiB1bnRlcm1pbmF0ZWQgbGluZScpCisgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6IHVudGVybWluYXRlZCBsaW5lOiAlcicgJSBsaW5lKQogCiAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KICAgICAgICAgaWYgX19kZWJ1Z19fOgpAQCAtMTIxMCwxNSArMTIxMCwxNyBAQAogCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIHNzbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuc3NsX2NvbnRleHQgPSBzc2xfY29udGV4dAogICAgICAgICAgICAgSU1BUDQuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZik6CiAgICAgICAgICAgICBzb2NrID0gSU1BUDQuX2NyZWF0ZV9zb2NrZXQoc2VsZikKLSAgICAgICAgICAgIGlmIHNlbGYuc3NsX2NvbnRleHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zc2xfY29udGV4dC53cmFwX3NvY2tldChzb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKIAogICAgICAgICBkZWYgb3BlbihzZWxmLCBob3N0PScnLCBwb3J0PUlNQVA0X1NTTF9QT1JUKToKICAgICAgICAgICAgICIiIlNldHVwIGNvbm5lY3Rpb24gdG8gcmVtb3RlIHNlcnZlciBvbiAiaG9zdDpwb3J0Ii4KZGlmZiAtLWdpdCBhL0xpYi9pbWdoZHIucHkgYi9MaWIvaW1naGRyLnB5CmluZGV4IDZlZTQ1ZGEuLjBjYmEwNjMgMTAwNjQ0Ci0tLSBhL0xpYi9pbWdoZHIucHkKKysrIGIvTGliL2ltZ2hkci5weQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmludCh3aGF0KGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBub3QgZm91bmQgKioqJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9pbXAucHkgYi9MaWIvaW1wLnB5CmluZGV4IDQwODgzODMuLmM4NDQ5YzYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXAucHkKKysrIGIvTGliL2ltcC5weQpAQCAtMTYsMTggKzE2LDIwIEBACiAgICAgIyBQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLgogICAgIGxvYWRfZHluYW1pYyA9IE5vbmUKIAotIyBEaXJlY3RseSBleHBvc2VkIGJ5IHRoaXMgbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBuZXdfbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZSwgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBfRVJSX01TRywgX1NwZWNNZXRob2RzCiAKLQotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0b2tlbml6ZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgd2FybmluZ3MKIAord2FybmluZ3Mud2FybigidGhlIGltcCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgaW1wb3J0bGliOyAiCisgICAgICAgICAgICAgICJzZWUgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gZm9yIGFsdGVybmF0aXZlIHVzZXMiLAorICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQogCiAjIERFUFJFQ0FURUQKIFNFQVJDSF9FUlJPUiA9IDAKQEAgLTQyLDkgKzQ0LDIzIEBACiBJTVBfSE9PSyA9IDkKIAogCitkZWYgbmV3X21vZHVsZShuYW1lKToKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgQ3JlYXRlIGEgbmV3IG1vZHVsZS4KKworICAgIFRoZSBtb2R1bGUgaXMgbm90IGVudGVyZWQgaW50byBzeXMubW9kdWxlcy4KKworICAgICIiIgorICAgIHJldHVybiB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisKKwogZGVmIGdldF9tYWdpYygpOgotICAgICIiIlJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuIiIiCi0gICAgcmV0dXJuIF9ib290c3RyYXAuX01BR0lDX0JZVEVTCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuTUFHSUNfTlVNQkVSCiAKIAogZGVmIGdldF90YWcoKToKQEAgLTUyLDEyICs2OCw0MiBAQAogICAgIHJldHVybiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKIAorZGVmIGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weWMvLnB5byBmaWxlLgorCisgICAgVGhlIC5weSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8gdGhlCisgICAgLnB5Yy8ucHlvIGZpbGUgY2FsY3VsYXRlZCBhcyBpZiB0aGUgLnB5IGZpbGUgd2VyZSBpbXBvcnRlZC4gIFRoZSBleHRlbnNpb24KKyAgICB3aWxsIGJlIC5weWMgdW5sZXNzIHN5cy5mbGFncy5vcHRpbWl6ZSBpcyBub24temVybywgdGhlbiBpdCB3aWxsIGJlIC5weW8uCisKKyAgICBJZiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgdGhlbiBpdCBtdXN0IGJlIGEgYm9vbGVhbiBhbmQgaXMgdXNlZCBpbgorICAgIHBsYWNlIG9mIHN5cy5mbGFncy5vcHRpbWl6ZS4KKworICAgIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgorCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGUpCisKKworZGVmIHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weWMuLy5weW8gZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyAucHkgZmlsZS4KKworICAgIFRoZSAucHljLy5weW8gZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0OyB0aGlzIHNpbXBseSByZXR1cm5zIHRoZSBwYXRoIHRvCisgICAgdGhlIC5weSBmaWxlIGNhbGN1bGF0ZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgLnB5Yy8ucHlvIGZpbGUuICBJZiBwYXRoIGRvZXMKKyAgICBub3QgY29uZm9ybSB0byBQRVAgMzE0NyBmb3JtYXQsIFZhbHVlRXJyb3Igd2lsbCBiZSByYWlzZWQuIElmCisgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisKIGRlZiBnZXRfc3VmZml4ZXMoKToKLSAgICB3YXJuaW5ncy53YXJuKCdpbXAuZ2V0X3N1ZmZpeGVzKCkgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb25zdGFudHMgJwotICAgICAgICAgICAgICAgICAgJ2RlZmluZWQgb24gaW1wb3J0bGliLm1hY2hpbmVyeSBpbnN0ZWFkJywKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAiIiIqKkRFUFJFQ0FURUQqKiIiIgogICAgIGV4dGVuc2lvbnMgPSBbKHMsICdyYicsIENfRVhURU5TSU9OKSBmb3IgcyBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTXQotICAgIHNvdXJjZSA9IFsocywgJ1UnLCBQWV9TT1VSQ0UpIGZvciBzIGluIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNdCisgICAgc291cmNlID0gWyhzLCAncicsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KICAgICBieXRlY29kZSA9IFsocywgJ3JiJywgUFlfQ09NUElMRUQpIGZvciBzIGluIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU10KIAogICAgIHJldHVybiBleHRlbnNpb25zICsgc291cmNlICsgYnl0ZWNvZGUKQEAgLTY1LDcgKzExMSwxMSBAQAogCiBjbGFzcyBOdWxsSW1wb3J0ZXI6CiAKLSAgICAiIiJOdWxsIGltcG9ydCBvYmplY3QuIiIiCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIE51bGwgaW1wb3J0IG9iamVjdC4KKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBwYXRoID09ICcnOgpAQCAtMTA2LDQ4ICsxNTYsNDkgQEAKICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCiAKIAotY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIpOgorY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX3NvdXJjZSgpLiIiIgogCiAKIGRlZiBsb2FkX3NvdXJjZShuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3NvdXJjZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpLmxvYWRfbW9kdWxlKCknCi0gICAgICAgICAgICcgaW5zdGVhZCcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBsb2FkZXIgPSBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCi1jbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwKLSAgICAgICAgX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwgU291cmNlbGVzc0ZpbGVMb2FkZXIpOgogCiAgICAgIiIiQ29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBpbXBsZW1lbnRpbmcgbG9hZF9jb21waWxlZCgpLiIiIgogCiAKIGRlZiBsb2FkX2NvbXBpbGVkKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfY29tcGlsZWQoKSBpcyBkZXByZWNhdGVkOyB1c2UgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkuJwotICAgICAgICAgICAnbG9hZF9tb2R1bGUoKSBpbnN0ZWFkICcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCisgICAgbG9hZGVyID0gX0xvYWRDb21waWxlZENvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBTb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19zcGVjX18ubG9hZGVyID0gbW9kdWxlLl9fbG9hZGVyX18KICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIGxvYWRfcGFja2FnZShuYW1lLCBwYXRoKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3BhY2thZ2UoKSBpcyBkZXByZWNhdGVkOyB1c2UgZWl0aGVyICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcigpIG9yICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIoKSBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgZXh0ZW5zaW9ucyA9IChtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTWzpdICsKICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0pCkBAIC0xNTcsNyArMjA4LDEzIEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3shcn0gaXMgbm90IGEgcGFja2FnZScuZm9ybWF0KHBhdGgpKQotICAgIHJldHVybiBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aCkubG9hZF9tb2R1bGUobmFtZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBtZXRob2RzLmxvYWQoKQogCiAKIGRlZiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZGV0YWlscyk6CkBAIC0xNjksMzIgKzIyNiwzMCBAQAogCiAgICAgIiIiCiAgICAgc3VmZml4LCBtb2RlLCB0eXBlXyA9IGRldGFpbHMKLSAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJykKLSAgICAgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIG9wZW4gbW9kZSB7IXJ9Jy5mb3JtYXQobW9kZSkpCi0gICAgICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06Ci0gICAgICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBZX0NPTVBJTEVEOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfcGFja2FnZShuYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfRlJPWkVOOgotICAgICAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKKyAgICBlbGlmIGZpbGUgaXMgTm9uZSBhbmQgdHlwZV8gaW4ge1BZX1NPVVJDRSwgUFlfQ09NUElMRUR9OgorICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICBlbGlmIHR5cGVfID09IFBZX1NPVVJDRToKKyAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6CisgICAgICAgIHJldHVybiBsb2FkX2NvbXBpbGVkKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBvcGVuZWRfZmlsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgorICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQorICAgIGVsaWYgdHlwZV8gPT0gQ19CVUlMVElOOgorICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46CisgICAgICAgIHJldHVybiBpbml0X2Zyb3plbihuYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQogCiAKIGRlZiBmaW5kX21vZHVsZShuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjMwLDU0ICsyODUsMzEgQEAKICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYWNrYWdlX2RpcmVjdG9yeSwgcGFja2FnZV9maWxlX25hbWUpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBwYWNrYWdlX2RpcmVjdG9yeSwgKCcnLCAnJywgUEtHX0RJUkVDVE9SWSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgdHlwZV8gaW4gZ2V0X3N1ZmZpeGVzKCk6Ci0gICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAotICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgorICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG5hbWUgKyBzdWZmaXgKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJlYWsgICMgQnJlYWsgb3V0IG9mIG91dGVyIGxvb3Agd2hlbiBicmVha2luZyBvdXQgb2YgaW5uZXIgbG9vcC4KICAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfYm9vdHN0cmFwLl9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKIAogICAgIGVuY29kaW5nID0gTm9uZQotICAgIGlmIG1vZGUgPT0gJ1UnOgorICAgIGlmICdiJyBub3QgaW4gbW9kZToKICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGZpbGUucmVhZGxpbmUpWzBdCiAgICAgZmlsZSA9IG9wZW4oZmlsZV9wYXRoLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZykKICAgICByZXR1cm4gZmlsZSwgZmlsZV9wYXRoLCAoc3VmZml4LCBtb2RlLCB0eXBlXykKIAogCi1fUkVMT0FESU5HID0ge30KLQogZGVmIHJlbG9hZChtb2R1bGUpOgotICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCiAKICAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCiAKICAgICAiIiIKLSAgICBpZiBub3QgbW9kdWxlIG9yIHR5cGUobW9kdWxlKSAhPSB0eXBlKHN5cyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQotICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6Ci0gICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCi0gICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQotICAgIHRyeToKLSAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXy5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gaW1wb3J0bGliLnJlbG9hZChtb2R1bGUpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAyMmM5MGYyLi4zZTk2OWJiIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsNSArMSw1IEBACiAiIiJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydC4iIiIKLV9fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcyddCitfX2FsbF9fID0gWydfX2ltcG9ydF9fJywgJ2ltcG9ydF9tb2R1bGUnLCAnaW52YWxpZGF0ZV9jYWNoZXMnLCAncmVsb2FkJ10KIAogIyBCb290c3RyYXAgaGVscCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xMSw2ICsxMSw3IEBACiAjIGluaXRpYWxpc2VkIGJlbG93IGlmIHRoZSBmcm96ZW4gb25lIGlzIG5vdCBhdmFpbGFibGUpLgogaW1wb3J0IF9pbXAgICMgSnVzdCB0aGUgYnVpbHRpbiBjb21wb25lbnQsIE5PVCB0aGUgZnVsbCBQeXRob24gbW9kdWxlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIAogdHJ5OgogICAgIGltcG9ydCBfZnJvemVuX2ltcG9ydGxpYiBhcyBfYm9vdHN0cmFwCkBAIC00NSwxOSArNDYsNDIgQEAKICAgICAgICAgICAgIGZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpCiAKIAotZGVmIGZpbmRfbG9hZGVyKG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgIiIiRmluZCB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KK2RlZiBmaW5kX3NwZWMobmFtZSwgcGF0aD1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNwZWMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgogCiAgICAgRmlyc3QsIHN5cy5tb2R1bGVzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW1wb3J0ZWQuIElmCi0gICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCisgICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19zcGVjX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQogICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgotICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgbG9hZGVyIHdpdGggdGhlCi0gICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBjb3VsZAorICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgc3BlYyB3aXRoIHRoZQorICAgIHZhbHVlIG9mICdwYXRoJyBnaXZlbiB0byB0aGUgZmluZGVycy4gTm9uZSBpcyByZXR1cm5lZCBpZiBubyBzcGVjIGNvdWxkCiAgICAgYmUgZm91bmQuCiAKICAgICBEb3R0ZWQgbmFtZXMgZG8gbm90IGhhdmUgdGhlaXIgcGFyZW50IHBhY2thZ2VzIGltcGxpY2l0bHkgaW1wb3J0ZWQuIFlvdSB3aWxsCiAgICAgbW9zdCBsaWtlbHkgbmVlZCB0byBleHBsaWNpdGx5IGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIGluIHRoZSBwcm9wZXIKLSAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IGxvYWRlci4KKyAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IHNwZWMuCisKKyAgICAiIiIKKyAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX3NwZWNfXyBpcyBub3Qgc2V0Jy5mb3JtYXQobmFtZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgTm9uZScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworCisjIFhYWCBEZXByZWNhdGUuLi4KK2RlZiBmaW5kX2xvYWRlcihuYW1lLCBwYXRoPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KKworICAgIFRoaXMgaXMgYSBiYWNrd2FyZC1jb21wYXRpYmxlIHdyYXBwZXIgYXJvdW5kIGZpbmRfc3BlYygpLgogCiAgICAgIiIiCiAgICAgdHJ5OgpAQCAtNjgsNyArOTIsMjAgQEAKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgIHBhc3MKLSAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fbG9hZGVyX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorCisgICAgc3BlYyA9IF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBwYXRoKQorICAgICMgV2Ugd29uJ3Qgd29ycnkgYWJvdXQgbWFsZm9ybWVkIHNwZWNzIChtaXNzaW5nIGF0dHJpYnV0ZXMpLgorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBmb3Ige30gbWlzc2luZyBsb2FkZXInLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25hbWVzcGFjZSBwYWNrYWdlcyBkbyBub3QgaGF2ZSBsb2FkZXJzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgIHJldHVybiBzcGVjLmxvYWRlcgogCiAKIGRlZiBpbXBvcnRfbW9kdWxlKG5hbWUsIHBhY2thZ2U9Tm9uZSk6CkBAIC04Miw5ICsxMTksNTAgQEAKICAgICBsZXZlbCA9IDAKICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy4nKToKICAgICAgICAgaWYgbm90IHBhY2thZ2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbGF0aXZlIGltcG9ydHMgcmVxdWlyZSB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IikKKyAgICAgICAgICAgIG1zZyA9ICgidGhlICdwYWNrYWdlJyBhcmd1bWVudCBpcyByZXF1aXJlZCB0byBwZXJmb3JtIGEgcmVsYXRpdmUgIgorICAgICAgICAgICAgICAgICAgICJpbXBvcnQgZm9yIHshcn0iKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQobmFtZSkpCiAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gbmFtZToKICAgICAgICAgICAgIGlmIGNoYXJhY3RlciAhPSAnLic6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGxldmVsICs9IDEKICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZ2NkX2ltcG9ydChuYW1lW2xldmVsOl0sIHBhY2thZ2UsIGxldmVsKQorCisKK19SRUxPQURJTkcgPSB7fQorCisKK2RlZiByZWxvYWQobW9kdWxlKToKKyAgICAiIiJSZWxvYWQgdGhlIG1vZHVsZSBhbmQgcmV0dXJuIGl0LgorCisgICAgVGhlIG1vZHVsZSBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLgorCisgICAgIiIiCisgICAgaWYgbm90IG1vZHVsZSBvciBub3QgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbG9hZCgpIGFyZ3VtZW50IG11c3QgYmUgbW9kdWxlIikKKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19zcGVjX18ubmFtZQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworCisgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgIG1zZyA9ICJtb2R1bGUge30gbm90IGluIHN5cy5tb2R1bGVzIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgaWYgbmFtZSBpbiBfUkVMT0FESU5HOgorICAgICAgICByZXR1cm4gX1JFTE9BRElOR1tuYW1lXQorICAgIF9SRUxPQURJTkdbbmFtZV0gPSBtb2R1bGUKKyAgICB0cnk6CisgICAgICAgIHBhcmVudF9uYW1lID0gbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgaWYgcGFyZW50X25hbWUgYW5kIHBhcmVudF9uYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgIG1zZyA9ICJwYXJlbnQgeyFyfSBub3QgaW4gc3lzLm1vZHVsZXMiCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KHBhcmVudF9uYW1lKSwgbmFtZT1wYXJlbnRfbmFtZSkKKyAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXyA9IF9ib290c3RyYXAuX2ZpbmRfc3BlYyhuYW1lLCBOb25lLCBtb2R1bGUpCisgICAgICAgIG1ldGhvZHMgPSBfYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQorICAgICAgICBtZXRob2RzLmV4ZWMobW9kdWxlKQorICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgX1JFTE9BRElOR1tuYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKaW5kZXggZTQwZWM5Mi4uNmI4Zjk3OSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQpAQCAtOSw3ICs5LDcgQEAKICMKICMgSU1QT1JUQU5UOiBXaGVuZXZlciBtYWtpbmcgY2hhbmdlcyB0byB0aGlzIG1vZHVsZSwgYmUgc3VyZSB0byBydW4KICMgYSB0b3AtbGV2ZWwgbWFrZSBpbiBvcmRlciB0byBnZXQgdGhlIGZyb3plbiB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUKLSMgdXBkYXRlLiBOb3QgZG9pbmcgc28sIHdpbGwgcmVzdWx0IGluIHRoZSBNYWtlZmlsZSB0byBmYWlsIGZvcgorIyB1cGRhdGUuIE5vdCBkb2luZyBzbyB3aWxsIHJlc3VsdCBpbiB0aGUgTWFrZWZpbGUgdG8gZmFpbCBmb3IKICMgYWxsIG90aGVycyB3aG8gZG9uJ3QgaGF2ZSBhIC4vcHl0aG9uIGFyb3VuZCB0byBmcmVlemUgdGhlIG1vZHVsZQogIyBpbiB0aGUgZWFybHkgc3RhZ2VzIG9mIGNvbXBpbGF0aW9uLgogIwpAQCAtMjAsMTAgKzIwLDYgQEAKICMgcmVmZXJlbmNlIGFueSBpbmplY3RlZCBvYmplY3RzISBUaGlzIGluY2x1ZGVzIG5vdCBvbmx5IGdsb2JhbCBjb2RlIGJ1dCBhbHNvCiAjIGFueXRoaW5nIHNwZWNpZmllZCBhdCB0aGUgY2xhc3MgbGV2ZWwuCiAKLSMgWFhYIE1ha2Ugc3VyZSBhbGwgcHVibGljIG5hbWVzIGhhdmUgbm8gc2luZ2xlIGxlYWRpbmcgdW5kZXJzY29yZSBhbmQgYWxsCi0jICAgICBvdGhlcnMgZG8uCi0KLQogIyBCb290c3RyYXAtcmVsYXRlZCBjb2RlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBfQ0FTRV9JTlNFTlNJVElWRV9QTEFURk9STVMgPSAnd2luJywgJ2N5Z3dpbicsICdkYXJ3aW4nCkBAIC00MSw3NiArMzcsNTggQEAKICAgICByZXR1cm4gX3JlbGF4X2Nhc2UKIAogCi0jIFRPRE86IEV4cG9zZSBmcm9tIG1hcnNoYWwKIGRlZiBfd19sb25nKHgpOgotICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLgotCi0gICAgWFhYIFRlbXBvcmFyeSB1bnRpbCBtYXJzaGFsJ3MgbG9uZyBmdW5jdGlvbnMgYXJlIGV4cG9zZWQuCi0KLSAgICAiIiIKLSAgICB4ID0gaW50KHgpCi0gICAgaW50X2J5dGVzID0gW10KLSAgICBpbnRfYnl0ZXMuYXBwZW5kKHggJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gOCkgJiAweEZGKQotICAgIGludF9ieXRlcy5hcHBlbmQoKHggPj4gMTYpICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDI0KSAmIDB4RkYpCi0gICAgcmV0dXJuIGJ5dGVhcnJheShpbnRfYnl0ZXMpCisgICAgIiIiQ29udmVydCBhIDMyLWJpdCBpbnRlZ2VyIHRvIGxpdHRsZS1lbmRpYW4uIiIiCisgICAgcmV0dXJuIChpbnQoeCkgJiAweEZGRkZGRkZGKS50b19ieXRlcyg0LCAnbGl0dGxlJykKIAogCi0jIFRPRE86IEV4cG9zZSBmcm9tIG1hcnNoYWwKIGRlZiBfcl9sb25nKGludF9ieXRlcyk6Ci0gICAgIiIiQ29udmVydCA0IGJ5dGVzIGluIGxpdHRsZS1lbmRpYW4gdG8gYW4gaW50ZWdlci4KLQotICAgIFhYWCBUZW1wb3JhcnkgdW50aWwgbWFyc2hhbCdzIGxvbmcgZnVuY3Rpb24gYXJlIGV4cG9zZWQuCi0KLSAgICAiIiIKLSAgICB4ID0gaW50X2J5dGVzWzBdCi0gICAgeCB8PSBpbnRfYnl0ZXNbMV0gPDwgOAotICAgIHggfD0gaW50X2J5dGVzWzJdIDw8IDE2Ci0gICAgeCB8PSBpbnRfYnl0ZXNbM10gPDwgMjQKLSAgICByZXR1cm4geAorICAgICIiIkNvbnZlcnQgNCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIHRvIGFuIGludGVnZXIuIiIiCisgICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGludF9ieXRlcywgJ2xpdHRsZScpCiAKIAogZGVmIF9wYXRoX2pvaW4oKnBhdGhfcGFydHMpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmpvaW4oKS4iIiIKLSAgICBuZXdfcGFydHMgPSBbXQotICAgIGZvciBwYXJ0IGluIHBhdGhfcGFydHM6Ci0gICAgICAgIGlmIG5vdCBwYXJ0OgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbmV3X3BhcnRzLmFwcGVuZChwYXJ0KQotICAgICAgICBpZiBwYXJ0Wy0xXSBub3QgaW4gcGF0aF9zZXBhcmF0b3JzOgotICAgICAgICAgICAgbmV3X3BhcnRzLmFwcGVuZChwYXRoX3NlcCkKLSAgICByZXR1cm4gJycuam9pbihuZXdfcGFydHNbOi0xXSkgICMgRHJvcCBzdXBlcmZsdW91cyBwYXRoIHNlcGFyYXRvci4KKyAgICByZXR1cm4gcGF0aF9zZXAuam9pbihbcGFydC5yc3RyaXAocGF0aF9zZXBhcmF0b3JzKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXRoX3BhcnRzIGlmIHBhcnRdKQogCiAKIGRlZiBfcGF0aF9zcGxpdChwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5zcGxpdCgpLiIiIgorICAgIGlmIGxlbihwYXRoX3NlcGFyYXRvcnMpID09IDE6CisgICAgICAgIGZyb250LCBfLCB0YWlsID0gcGF0aC5ycGFydGl0aW9uKHBhdGhfc2VwKQorICAgICAgICByZXR1cm4gZnJvbnQsIHRhaWwKICAgICBmb3IgeCBpbiByZXZlcnNlZChwYXRoKToKICAgICAgICAgaWYgeCBpbiBwYXRoX3NlcGFyYXRvcnM6Ci0gICAgICAgICAgICBzZXAgPSB4Ci0gICAgICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIHNlcCA9IHBhdGhfc2VwCi0gICAgZnJvbnQsIF8sIHRhaWwgPSBwYXRoLnJwYXJ0aXRpb24oc2VwKQotICAgIHJldHVybiBmcm9udCwgdGFpbAorICAgICAgICAgICAgZnJvbnQsIHRhaWwgPSBwYXRoLnJzcGxpdCh4LCBtYXhzcGxpdD0xKQorICAgICAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCisgICAgcmV0dXJuICcnLCBwYXRoCisKKworZGVmIF9wYXRoX3N0YXQocGF0aCk6CisgICAgIiIiU3RhdCB0aGUgcGF0aC4KKworICAgIE1hZGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiB0byBtYWtlIGl0IGVhc2llciB0byBvdmVycmlkZSBpbiBleHBlcmltZW50cworICAgIChlLmcuIGNhY2hlIHN0YXQgcmVzdWx0cykuCisKKyAgICAiIiIKKyAgICByZXR1cm4gX29zLnN0YXQocGF0aCkKIAogCiBkZWYgX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIG1vZGUpOgogICAgICIiIlRlc3Qgd2hldGhlciB0aGUgcGF0aCBpcyB0aGUgc3BlY2lmaWVkIG1vZGUgdHlwZS4iIiIKICAgICB0cnk6Ci0gICAgICAgIHN0YXRfaW5mbyA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0YXRfaW5mbyA9IF9wYXRoX3N0YXQocGF0aCkKICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIChzdGF0X2luZm8uc3RfbW9kZSAmIDBvMTcwMDAwKSA9PSBtb2RlCiAKIAotIyBYWFggQ291bGQgYWxzbyBleHBvc2UgTW9kdWxlcy9nZXRwYXRoLmM6aXNmaWxlKCkKIGRlZiBfcGF0aF9pc2ZpbGUocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNmaWxlLiIiIgogICAgIHJldHVybiBfcGF0aF9pc19tb2RlX3R5cGUocGF0aCwgMG8xMDAwMDApCiAKIAotIyBYWFggQ291bGQgYWxzbyBleHBvc2UgTW9kdWxlcy9nZXRwYXRoLmM6aXNkaXIoKQogZGVmIF9wYXRoX2lzZGlyKHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmlzZGlyLiIiIgogICAgIGlmIG5vdCBwYXRoOgpAQCAtMTQ4LDE3ICsxMjYsMzAgQEAKICAgICBuZXcuX19kaWN0X18udXBkYXRlKG9sZC5fX2RpY3RfXykKIAogCitkZWYgX25ld19tb2R1bGUobmFtZSk6CisgICAgcmV0dXJuIHR5cGUoc3lzKShuYW1lKQorCisKIF9jb2RlX3R5cGUgPSB0eXBlKF93cmFwLl9fY29kZV9fKQogCiAKLWRlZiBuZXdfbW9kdWxlKG5hbWUpOgotICAgICIiIkNyZWF0ZSBhIG5ldyBtb2R1bGUuCiAKLSAgICBUaGUgbW9kdWxlIGlzIG5vdCBlbnRlcmVkIGludG8gc3lzLm1vZHVsZXMuCitjbGFzcyBfTWFuYWdlUmVsb2FkOgogCi0gICAgIiIiCi0gICAgcmV0dXJuIHR5cGUoX2lvKShuYW1lKQorICAgICIiIk1hbmFnZXMgdGhlIHBvc3NpYmxlIGNsZWFuLXVwIG9mIHN5cy5tb2R1bGVzIGZvciBsb2FkX21vZHVsZSgpLiIiIgogCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5faXNfcmVsb2FkID0gc2VsZi5fbmFtZSBpbiBzeXMubW9kdWxlcworCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgaWYgYW55KGFyZyBpcyBub3QgTm9uZSBmb3IgYXJnIGluIGFyZ3MpIGFuZCBub3Qgc2VsZi5faXNfcmVsb2FkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tzZWxmLl9uYW1lXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogIyBNb2R1bGUtbGV2ZWwgbG9ja2luZyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMTQsNyArMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQgKz0gMQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5oYXNfZGVhZGxvY2soKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9EZWFkbG9ja0Vycm9yKCJkZWFkbG9jayBkZXRlY3RlZCBieSAlciIgJSBzZWxmKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgX0RlYWRsb2NrRXJyb3IoJ2RlYWRsb2NrIGRldGVjdGVkIGJ5ICVyJyAlIHNlbGYpCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FrZXVwLmFjcXVpcmUoRmFsc2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53YWl0ZXJzICs9IDEKICAgICAgICAgICAgICAgICAjIFdhaXQgZm9yIGEgcmVsZWFzZSgpIGNhbGwKQEAgLTIyNyw3ICsyMTgsNyBAQAogICAgICAgICB0aWQgPSBfdGhyZWFkLmdldF9pZGVudCgpCiAgICAgICAgIHdpdGggc2VsZi5sb2NrOgogICAgICAgICAgICAgaWYgc2VsZi5vd25lciAhPSB0aWQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrIikKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2snKQogICAgICAgICAgICAgYXNzZXJ0IHNlbGYuY291bnQgPiAwCiAgICAgICAgICAgICBzZWxmLmNvdW50IC09IDEKICAgICAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gMDoKQEAgLTIzNyw3ICsyMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLndha2V1cC5yZWxlYXNlKCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfTW9kdWxlTG9jayglcikgYXQgJWQiICUgKHNlbGYubmFtZSwgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAnX01vZHVsZUxvY2soeyFyfSkgYXQge30nLmZvcm1hdChzZWxmLm5hbWUsIGlkKHNlbGYpKQogCiAKIGNsYXNzIF9EdW1teU1vZHVsZUxvY2s6CkBAIC0yNTQsMTEgKzI0NSwyOCBAQAogCiAgICAgZGVmIHJlbGVhc2Uoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuY291bnQgPT0gMDoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jayIpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2snKQogICAgICAgICBzZWxmLmNvdW50IC09IDEKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJfRHVtbXlNb2R1bGVMb2NrKCVyKSBhdCAlZCIgJSAoc2VsZi5uYW1lLCBpZChzZWxmKSkKKyAgICAgICAgcmV0dXJuICdfRHVtbXlNb2R1bGVMb2NrKHshcn0pIGF0IHt9Jy5mb3JtYXQoc2VsZi5uYW1lLCBpZChzZWxmKSkKKworCitjbGFzcyBfTW9kdWxlTG9ja01hbmFnZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2xvY2sgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gX2dldF9tb2R1bGVfbG9jayhzZWxmLl9uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQorICAgICAgICBzZWxmLl9sb2NrLmFjcXVpcmUoKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX2xvY2sucmVsZWFzZSgpCiAKIAogIyBUaGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIGZvciBjb25zdW1wdGlvbiBieSBQeXRob24vaW1wb3J0LmMuCkBAIC0zMTUsOTUgKzMyMywxMDggQEAKIAogIyBGaW5kZXIvbG9hZGVyIHV0aWxpdHkgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0iIiJNYWdpYyB3b3JkIHRvIHJlamVjdCAucHljIGZpbGVzIGdlbmVyYXRlZCBieSBvdGhlciBQeXRob24gdmVyc2lvbnMuCi1JdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgorIyBNYWdpYyB3b3JkIHRvIHJlamVjdCAucHljIGZpbGVzIGdlbmVyYXRlZCBieSBvdGhlciBQeXRob24gdmVyc2lvbnMuCisjIEl0IHNob3VsZCBjaGFuZ2UgZm9yIGVhY2ggaW5jb21wYXRpYmxlIGNoYW5nZSB0byB0aGUgYnl0ZWNvZGUuCisjCisjIFRoZSB2YWx1ZSBvZiBDUiBhbmQgTEYgaXMgaW5jb3Jwb3JhdGVkIHNvIGlmIHlvdSBldmVyIHJlYWQgb3Igd3JpdGUKKyMgYSAucHljIGZpbGUgaW4gdGV4dCBtb2RlIHRoZSBtYWdpYyBudW1iZXIgd2lsbCBiZSB3cm9uZzsgYWxzbywgdGhlCisjIEFwcGxlIE1QVyBjb21waWxlciBzd2FwcyB0aGVpciB2YWx1ZXMsIGJvdGNoaW5nIHN0cmluZyBjb25zdGFudHMuCisjCisjIFRoZSBtYWdpYyBudW1iZXJzIG11c3QgYmUgc3BhY2VkIGFwYXJ0IGF0IGxlYXN0IDIgdmFsdWVzLCBhcyB0aGUKKyMgLVUgaW50ZXJwZXRlciBmbGFnIHdpbGwgY2F1c2UgTUFHSUMrMSBiZWluZyB1c2VkLiBUaGV5IGhhdmUgYmVlbgorIyBvZGQgbnVtYmVycyBmb3Igc29tZSB0aW1lIG5vdy4KKyMKKyMgVGhlcmUgd2VyZSBhIHZhcmlldHkgb2Ygb2xkIHNjaGVtZXMgZm9yIHNldHRpbmcgdGhlIG1hZ2ljIG51bWJlci4KKyMgVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQorIyAxMC4KKyMKKyMgU3RhcnRpbmcgd2l0aCB0aGUgYWRvcHRpb24gb2YgUEVQIDMxNDcgaW4gUHl0aG9uIDMuMiwgZXZlcnkgYnVtcCBpbiBtYWdpYworIyBudW1iZXIgYWxzbyBpbmNsdWRlcyBhIG5ldyAibWFnaWMgdGFnIiwgaS5lLiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2VkCisjIHRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCisjIHRoZSBtYWdpYyBudW1iZXIsIHlvdSBtdXN0IGFsc28gc2V0IGEgbmV3IHVuaXF1ZSBtYWdpYyB0YWcuICBHZW5lcmFsbHkgdGhpcworIyBjYW4gYmUgbmFtZWQgYWZ0ZXIgdGhlIFB5dGhvbiBtYWpvciB2ZXJzaW9uIG9mIHRoZSBtYWdpYyBudW1iZXIgYnVtcCwgYnV0CisjIGl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCisjIHRoYXQncyBjb21lIGJlZm9yZS4gIFRoZSB0YWdzIGFyZSBpbmNsdWRlZCBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLCBzdGFydGluZworIyB3aXRoIFB5dGhvbiAzLjJhMC4KKyMKKyMgS25vd24gdmFsdWVzOgorIyAgUHl0aG9uIDEuNTogICAyMDEyMQorIyAgUHl0aG9uIDEuNS4xOiAyMDEyMQorIyAgICAgUHl0aG9uIDEuNS4yOiAyMDEyMQorIyAgICAgUHl0aG9uIDEuNjogICA1MDQyOAorIyAgICAgUHl0aG9uIDIuMDogICA1MDgyMworIyAgICAgUHl0aG9uIDIuMC4xOiA1MDgyMworIyAgICAgUHl0aG9uIDIuMTogICA2MDIwMgorIyAgICAgUHl0aG9uIDIuMS4xOiA2MDIwMgorIyAgICAgUHl0aG9uIDIuMS4yOiA2MDIwMgorIyAgICAgUHl0aG9uIDIuMjogICA2MDcxNworIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAxMQorIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAyMQorIyAgICAgUHl0aG9uIDIuM2EwOiA2MjAxMSAoISkKKyMgICAgIFB5dGhvbiAyLjRhMDogNjIwNDEKKyMgICAgIFB5dGhvbiAyLjRhMzogNjIwNTEKKyMgICAgIFB5dGhvbiAyLjRiMTogNjIwNjEKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwNzEKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwODEgKGFzdC1icmFuY2gpCisjICAgICBQeXRob24gMi41YTA6IDYyMDkxICh3aXRoKQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MiAoY2hhbmdlZCBXSVRIX0NMRUFOVVAgb3Bjb2RlKQorIyAgICAgUHl0aG9uIDIuNWIzOiA2MjEwMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4pCisjICAgICBQeXRob24gMi41YjM6IDYyMTExIChmaXggd3JvbmcgY29kZTogeCArPSB5aWVsZCkKKyMgICAgIFB5dGhvbiAyLjVjMTogNjIxMjEgKGZpeCB3cm9uZyBsbm90YWIgd2l0aCBmb3IgbG9vcHMgYW5kCisjICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yaW5nIGNvbnN0YW50cyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCkKKyMgICAgIFB5dGhvbiAyLjVjMjogNjIxMzEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uIGluIGxpc3Rjb21wL2dlbmV4cCkKKyMgICAgIFB5dGhvbiAyLjZhMDogNjIxNTEgKHBlZXBob2xlIG9wdGltaXphdGlvbnMgYW5kIFNUT1JFX01BUCBvcGNvZGUpCisjICAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQorIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE3MSAob3B0aW1pemUgbGlzdCBjb21wcmVoZW5zaW9ucy9jaGFuZ2UgTElTVF9BUFBFTkQpCisjICAgICBQeXRob24gMi43YTA6IDYyMTgxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyMgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJvZHVjZSBQT1BfSlVNUF9JRl9GQUxTRSBhbmQgUE9QX0pVTVBfSUZfVFJVRSkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIxOTEgKGludHJvZHVjZSBTRVRVUF9XSVRIKQorIyAgICAgUHl0aG9uIDIuN2EwICA2MjIwMSAoaW50cm9kdWNlIEJVSUxEX1NFVCkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMTEgKGludHJvZHVjZSBNQVBfQUREIGFuZCBTRVRfQUREKQorIyAgICAgUHl0aG9uIDMwMDA6ICAgMzAwMAorIyAgICAgICAgICAgICAgICAgICAgMzAxMCAocmVtb3ZlZCBVTkFSWV9DT05WRVJUKQorIyAgICAgICAgICAgICAgICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQorIyAgICAgICAgICAgICAgICAgICAgMzAzMCAoYWRkZWQga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMpCisjICAgICAgICAgICAgICAgICAgICAzMDQwIChhZGRlZCBzaWduYXR1cmUgYW5ub3RhdGlvbnMpCisjICAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCisjICAgICAgICAgICAgICAgICAgICAzMDYwIChQRVAgMzExNSBtZXRhY2xhc3Mgc3ludGF4KQorIyAgICAgICAgICAgICAgICAgICAgMzA2MSAoc3RyaW5nIGxpdGVyYWxzIGJlY29tZSB1bmljb2RlKQorIyAgICAgICAgICAgICAgICAgICAgMzA3MSAoUEVQIDMxMDkgcmFpc2UgY2hhbmdlcykKKyMgICAgICAgICAgICAgICAgICAgIDMwODEgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCisjICAgICAgICAgICAgICAgICAgICAzMDkxIChraWxsIHN0cjggaW50ZXJuaW5nKQorIyAgICAgICAgICAgICAgICAgICAgMzEwMSAobWVyZ2UgZnJvbSAyLjZhMCwgc2VlIDYyMTUxKQorIyAgICAgICAgICAgICAgICAgICAgMzEwMyAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQorIyAgICAgUHl0aG9uIDMuMGE0OiAzMTExIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKS4KKyMgICAgIFB5dGhvbiAzLjBhNTogMzEzMSAobGV4aWNhbCBleGNlcHRpb24gc3RhY2tpbmcsIGluY2x1ZGluZyBQT1BfRVhDRVBUKQorIyAgICAgUHl0aG9uIDMuMWEwOiAzMTQxIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6CisjICAgICAgICAgICAgIGNoYW5nZSBMSVNUX0FQUEVORCBhbmQgU0VUX0FERCwgYWRkIE1BUF9BREQpCisjICAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgorIyAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCisjICAgICBQeXRob24gMy4yYTA6IDMxNjAgKGFkZCBTRVRVUF9XSVRIKQorIyAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKKyMgICAgIFB5dGhvbiAzLjJhMTogMzE3MCAoYWRkIERVUF9UT1BfVFdPLCByZW1vdmUgRFVQX1RPUFggYW5kIFJPVF9GT1VSKQorIyAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKKyMgICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKKyMgICAgIFB5dGhvbiAzLjNhMCAgMzE5MCBfX2NsYXNzX18gc3VwZXIgY2xvc3VyZSBjaGFuZ2VkCisjICAgICBQeXRob24gMy4zYTAgIDMyMDAgKF9fcXVhbG5hbWVfXyBhZGRlZCkKKyMgICAgICAgICAgICAgICAgICAgICAgMzIxMCAoYWRkZWQgc2l6ZSBtb2R1bG8gMioqMzIgdG8gdGhlIHB5YyBoZWFkZXIpCisjICAgICBQeXRob24gMy4zYTEgIDMyMjAgKGNoYW5nZWQgUEVQIDM4MCBpbXBsZW1lbnRhdGlvbikKKyMgICAgIFB5dGhvbiAzLjNhNCAgMzIzMCAocmV2ZXJ0IGNoYW5nZXMgdG8gaW1wbGljaXQgX19jbGFzc19fIGNsb3N1cmUpCisjICAgICBQeXRob24gMy40YTEgIDMyNTAgKGV2YWx1YXRlIHBvc2l0aW9uYWwgZGVmYXVsdCBhcmd1bWVudHMgYmVmb3JlCisjICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZC1vbmx5IGRlZmF1bHRzKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjYwIChhZGQgTE9BRF9DTEFTU0RFUkVGOyBhbGxvdyBsb2NhbHMgb2YgY2xhc3MgdG8gb3ZlcnJpZGUKKyMgICAgICAgICAgICAgICAgICAgICAgICBmcmVlIHZhcnMpCisjICAgICBQeXRob24gMy40YTEgIDMyNzAgKHZhcmlvdXMgdHdlYWtzIHRvIHRoZSBfX2NsYXNzX18gY2xvc3VyZSkKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI4MCAocmVtb3ZlIGltcGxpY2l0IGNsYXNzIGFyZ3VtZW50KQorIyAgICAgUHl0aG9uIDMuNGE0ICAzMjkwIChjaGFuZ2VzIHRvIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKKyMgICAgIFB5dGhvbiAzLjRhNCAgMzMwMCAobW9yZSBjaGFuZ2VzIHRvIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKKyMKKyMgTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubworIyBsb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQorIyBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKS4KIAotVGhlIHZhbHVlIG9mIENSIGFuZCBMRiBpcyBpbmNvcnBvcmF0ZWQgc28gaWYgeW91IGV2ZXIgcmVhZCBvciB3cml0ZQotYSAucHljIGZpbGUgaW4gdGV4dCBtb2RlIHRoZSBtYWdpYyBudW1iZXIgd2lsbCBiZSB3cm9uZzsgYWxzbywgdGhlCi1BcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgotCi1UaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCi0tVSBpbnRlcnBldGVyIGZsYWcgd2lsbCBjYXVzZSBNQUdJQysxIGJlaW5nIHVzZWQuIFRoZXkgaGF2ZSBiZWVuCi1vZGQgbnVtYmVycyBmb3Igc29tZSB0aW1lIG5vdy4KLQotVGhlcmUgd2VyZSBhIHZhcmlldHkgb2Ygb2xkIHNjaGVtZXMgZm9yIHNldHRpbmcgdGhlIG1hZ2ljIG51bWJlci4KLVRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKLTEwLgotCi1TdGFydGluZyB3aXRoIHRoZSBhZG9wdGlvbiBvZiBQRVAgMzE0NyBpbiBQeXRob24gMy4yLCBldmVyeSBidW1wIGluIG1hZ2ljCi1udW1iZXIgYWxzbyBpbmNsdWRlcyBhIG5ldyAibWFnaWMgdGFnIiwgaS5lLiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2VkCi10byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQotdGhlIG1hZ2ljIG51bWJlciwgeW91IG11c3QgYWxzbyBzZXQgYSBuZXcgdW5pcXVlIG1hZ2ljIHRhZy4gIEdlbmVyYWxseSB0aGlzCi1jYW4gYmUgbmFtZWQgYWZ0ZXIgdGhlIFB5dGhvbiBtYWpvciB2ZXJzaW9uIG9mIHRoZSBtYWdpYyBudW1iZXIgYnVtcCwgYnV0Ci1pdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQotdGhhdCdzIGNvbWUgYmVmb3JlLiAgVGhlIHRhZ3MgYXJlIGluY2x1ZGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHN0YXJ0aW5nCi13aXRoIFB5dGhvbiAzLjJhMC4KLQotS25vd24gdmFsdWVzOgotIFB5dGhvbiAxLjU6ICAgMjAxMjEKLSBQeXRob24gMS41LjE6IDIwMTIxCi0gICAgUHl0aG9uIDEuNS4yOiAyMDEyMQotICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKLSAgICBQeXRob24gMi4wOiAgIDUwODIzCi0gICAgUHl0aG9uIDIuMC4xOiA1MDgyMwotICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKLSAgICBQeXRob24gMi4xLjE6IDYwMjAyCi0gICAgUHl0aG9uIDIuMS4yOiA2MDIwMgotICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKLSAgICBQeXRob24gMi4zYTA6IDYyMDExCi0gICAgUHl0aG9uIDIuM2EwOiA2MjAyMQotICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCi0gICAgUHl0aG9uIDIuNGEwOiA2MjA0MQotICAgIFB5dGhvbiAyLjRhMzogNjIwNTEKLSAgICBQeXRob24gMi40YjE6IDYyMDYxCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA3MQotICAgIFB5dGhvbiAyLjVhMDogNjIwODEgKGFzdC1icmFuY2gpCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKLSAgICBQeXRob24gMi41YTA6IDYyMDkyIChjaGFuZ2VkIFdJVEhfQ0xFQU5VUCBvcGNvZGUpCi0gICAgUHl0aG9uIDIuNWIzOiA2MjEwMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4pCi0gICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCi0gICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yaW5nIGNvbnN0YW50cyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCkKLSAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCi0gICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKLSAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQotICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKLSAgICAgICAgICAgICAgICAgICAzMDEwIChyZW1vdmVkIFVOQVJZX0NPTlZFUlQpCi0gICAgICAgICAgICAgICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQotICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKLSAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKLSAgICAgICAgICAgICAgICAgICAzMDYxIChzdHJpbmcgbGl0ZXJhbHMgYmVjb21lIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgMzA3MSAoUEVQIDMxMDkgcmFpc2UgY2hhbmdlcykKLSAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQotICAgICAgICAgICAgICAgICAgIDMwOTEgKGtpbGwgc3RyOCBpbnRlcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgMzEwMSAobWVyZ2UgZnJvbSAyLjZhMCwgc2VlIDYyMTUxKQotICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKLSAgICBQeXRob24gMy4wYTQ6IDMxMTEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pLgotICAgIFB5dGhvbiAzLjBhNTogMzEzMSAobGV4aWNhbCBleGNlcHRpb24gc3RhY2tpbmcsIGluY2x1ZGluZyBQT1BfRVhDRVBUKQotICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgotICAgICAgICAgICAgY2hhbmdlIExJU1RfQVBQRU5EIGFuZCBTRVRfQURELCBhZGQgTUFQX0FERCkKLSAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgotICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQotICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCi0gICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKLSAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgotICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKLSAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAotICAgIFB5dGhvbiAzLjNhMCAgMzIwMCAoX19xdWFsbmFtZV9fIGFkZGVkKQotICAgICAgICAgICAgICAgICAgICAgMzIxMCAoYWRkZWQgc2l6ZSBtb2R1bG8gMioqMzIgdG8gdGhlIHB5YyBoZWFkZXIpCi0gICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCi0gICAgUHl0aG9uIDMuM2E0ICAzMjMwIChyZXZlcnQgY2hhbmdlcyB0byBpbXBsaWNpdCBfX2NsYXNzX18gY2xvc3VyZSkKLQotTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubwotbG9uZ2VyIGJlIHVuZGVyc3Rvb2QgYnkgb2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBldmFsIGxvb3AgKHVzdWFsbHkKLWR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgotCi0iIiIKLV9SQVdfTUFHSUNfTlVNQkVSID0gMzIzMCB8IG9yZCgnXHInKSA8PCAxNiB8IG9yZCgnXG4nKSA8PCAyNAotX01BR0lDX0JZVEVTID0gYnl0ZXMoX1JBV19NQUdJQ19OVU1CRVIgPj4gbiAmIDB4ZmYgZm9yIG4gaW4gcmFuZ2UoMCwgMjUsIDgpKQorTUFHSUNfTlVNQkVSID0gKDMzMDApLnRvX2J5dGVzKDIsICdsaXR0bGUnKSArIGInXHJcbicKK19SQVdfTUFHSUNfTlVNQkVSID0gaW50LmZyb21fYnl0ZXMoTUFHSUNfTlVNQkVSLCAnbGl0dGxlJykgICMgRm9yIGltcG9ydC5jCiAKIF9QWUNBQ0hFID0gJ19fcHljYWNoZV9fJwogCkBAIC00ODEsNiArNTAyLDE4IEBACiAgICAgcmV0dXJuIHNvdXJjZV9wYXRoIGlmIF9wYXRoX2lzZmlsZShzb3VyY2VfcGF0aCkgZWxzZSBieXRlY29kZV9wYXRoCiAKIAorZGVmIF9jYWxjX21vZGUocGF0aCk6CisgICAgIiIiQ2FsY3VsYXRlIHRoZSBtb2RlIHBlcm1pc3Npb25zIGZvciBhIGJ5dGVjb2RlIGZpbGUuIiIiCisgICAgdHJ5OgorICAgICAgICBtb2RlID0gX3BhdGhfc3RhdChwYXRoKS5zdF9tb2RlCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIG1vZGUgPSAwbzY2NgorICAgICMgV2UgYWx3YXlzIGVuc3VyZSB3cml0ZSBhY2Nlc3Mgc28gd2UgY2FuIHVwZGF0ZSBjYWNoZWQgZmlsZXMKKyAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCisgICAgbW9kZSB8PSAwbzIwMAorICAgIHJldHVybiBtb2RlCisKKwogZGVmIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSwgKmFyZ3MsIHZlcmJvc2l0eT0xKToKICAgICAiIiJQcmludCB0aGUgbWVzc2FnZSB0byBzdGRlcnIgaWYgLXYvUFlUSE9OVkVSQk9TRSBpcyB0dXJuZWQgb24uIiIiCiAgICAgaWYgc3lzLmZsYWdzLnZlcmJvc2UgPj0gdmVyYm9zaXR5OgpAQCAtNDg5LDg1ICs1MjIsNiBAQAogICAgICAgICBwcmludChtZXNzYWdlLmZvcm1hdCgqYXJncyksIGZpbGU9c3lzLnN0ZGVycikKIAogCi1kZWYgc2V0X3BhY2thZ2UoZnhuKToKLSAgICAiIiJTZXQgX19wYWNrYWdlX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKLSAgICBkZWYgc2V0X3BhY2thZ2Vfd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBtb2R1bGUgPSBmeG4oKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIHJldHVybiBtb2R1bGUKLSAgICBfd3JhcChzZXRfcGFja2FnZV93cmFwcGVyLCBmeG4pCi0gICAgcmV0dXJuIHNldF9wYWNrYWdlX3dyYXBwZXIKLQotCi1kZWYgc2V0X2xvYWRlcihmeG4pOgotICAgICIiIlNldCBfX2xvYWRlcl9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCi0gICAgZGVmIHNldF9sb2FkZXJfd3JhcHBlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBtb2R1bGUgPSBmeG4oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgcmV0dXJuIG1vZHVsZQotICAgIF93cmFwKHNldF9sb2FkZXJfd3JhcHBlciwgZnhuKQotICAgIHJldHVybiBzZXRfbG9hZGVyX3dyYXBwZXIKLQotCi1kZWYgbW9kdWxlX2Zvcl9sb2FkZXIoZnhuKToKLSAgICAiIiJEZWNvcmF0b3IgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyIG1vZHVsZSBmb3IgbG9hZGVycy4KLQotICAgIFRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb2R1bGUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG1vZHVsZQotICAgIG5hbWUuIFRoZSBtb2R1bGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgZnJvbSBzeXMubW9kdWxlcyBpZgotICAgIGl0IGFscmVhZHkgZXhpc3RzIG9yIGlzIGEgbmV3IG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBpcyBuZXcsIHRoZW4gX19uYW1lX18KLSAgICBpcyBzZXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QsIF9fbG9hZGVyX18gaXMgc2V0IHRvIHNlbGYsIGFuZAotICAgIF9fcGFja2FnZV9fIGlzIHNldCBhY2NvcmRpbmdseSAoaWYgc2VsZi5pc19wYWNrYWdlKCkgaXMgZGVmaW5lZCkgd2lsbCBiZSBzZXQKLSAgICBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gKGlmIHNlbGYuaXNfcGFja2FnZSgpIGRvZXMKLSAgICBub3Qgd29yayBmb3IgdGhlIG1vZHVsZSBpdCB3aWxsIGJlIHNldCBwb3N0LWxvYWQpLgotCi0gICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIGRlY29yYXRvciBjcmVhdGVkIHRoZSBtb2R1bGUgaXQgaXMKLSAgICBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgotCi0gICAgVGhlIGRlY29yYXRvciBhc3N1bWVzIHRoYXQgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiB0YWtlcyB0aGUgbW9kdWxlIG5hbWUgYXMKLSAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LgotCi0gICAgIiIiCi0gICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChmdWxsbmFtZSkKLSAgICAgICAgaXNfcmVsb2FkID0gbW9kdWxlIGlzIG5vdCBOb25lCi0gICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6Ci0gICAgICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBvcGVuKCkgaXMgY2FsbGVkIGFzIHRoZSAnaW8nIG1vZHVsZQotICAgICAgICAgICAgIyBpbXBsaWNpdGx5IGltcG9ydHMgJ2xvY2FsZScgYW5kIHdvdWxkIG90aGVyd2lzZSB0cmlnZ2VyIGFuCi0gICAgICAgICAgICAjIGluZmluaXRlIGxvb3AuCi0gICAgICAgICAgICBtb2R1bGUgPSBuZXdfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCi0gICAgICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMgd3JvbmcpCi0gICAgICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IHNlbGYuaXNfcGFja2FnZShmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzBdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyB3YXMgbm90IHNldCBhYm92ZSwgX19pbXBvcnRfXygpIHdpbGwgZG8gaXQgbGF0ZXIuCi0gICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IEZhbHNlCi0gICAgX3dyYXAobW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlciwgZnhuKQotICAgIHJldHVybiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyCi0KLQogZGVmIF9jaGVja19uYW1lKG1ldGhvZCk6CiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGF0IHRoZSBtb2R1bGUgYmVpbmcgcmVxdWVzdGVkIG1hdGNoZXMgdGhlIG9uZSB0aGUKICAgICBsb2FkZXIgY2FuIGhhbmRsZS4KQEAgLTU4MCw3ICs1MzQsNyBAQAogICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBuYW1lID0gc2VsZi5uYW1lCiAgICAgICAgIGVsaWYgc2VsZi5uYW1lICE9IG5hbWU6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigibG9hZGVyIGNhbm5vdCBoYW5kbGUgJXMiICUgbmFtZSwgbmFtZT1uYW1lKQorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ2xvYWRlciBjYW5ub3QgaGFuZGxlICVzJyAlIG5hbWUsIG5hbWU9bmFtZSkKICAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCBuYW1lLCAqYXJncywgKiprd2FyZ3MpCiAgICAgX3dyYXAoX2NoZWNrX25hbWVfd3JhcHBlciwgbWV0aG9kKQogICAgIHJldHVybiBfY2hlY2tfbmFtZV93cmFwcGVyCkBAIC01OTAsNyArNTQ0LDcgQEAKICAgICAiIiJEZWNvcmF0b3IgdG8gdmVyaWZ5IHRoZSBuYW1lZCBtb2R1bGUgaXMgYnVpbHQtaW4uIiIiCiAgICAgZGVmIF9yZXF1aXJlc19idWlsdGluX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBpZiBmdWxsbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoInt9IGlzIG5vdCBhIGJ1aWx0LWluIG1vZHVsZSIuZm9ybWF0KGZ1bGxuYW1lKSwKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGJ1aWx0LWluIG1vZHVsZScuZm9ybWF0KGZ1bGxuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpCiAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgZnVsbG5hbWUpCiAgICAgX3dyYXAoX3JlcXVpcmVzX2J1aWx0aW5fd3JhcHBlciwgZnhuKQpAQCAtNjAxLDcgKzU1NSw3IEBACiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGUgbmFtZWQgbW9kdWxlIGlzIGZyb3plbi4iIiIKICAgICBkZWYgX3JlcXVpcmVzX2Zyb3plbl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgaWYgbm90IF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJ7fSBpcyBub3QgYSBmcm96ZW4gbW9kdWxlIi5mb3JtYXQoZnVsbG5hbWUpLAorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgZnJvemVuIG1vZHVsZScuZm9ybWF0KGZ1bGxuYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpCiAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgZnVsbG5hbWUpCiAgICAgX3dyYXAoX3JlcXVpcmVzX2Zyb3plbl93cmFwcGVyLCBmeG4pCkBAIC02MTYsMTEgKzU3MCw2NTkgQEAKICAgICAjIHJldHVybiBOb25lLgogICAgIGxvYWRlciwgcG9ydGlvbnMgPSBzZWxmLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQogICAgIGlmIGxvYWRlciBpcyBOb25lIGFuZCBsZW4ocG9ydGlvbnMpOgotICAgICAgICBtc2cgPSAiTm90IGltcG9ydGluZyBkaXJlY3Rvcnkge306IG1pc3NpbmcgX19pbml0X18iCisgICAgICAgIG1zZyA9ICdOb3QgaW1wb3J0aW5nIGRpcmVjdG9yeSB7fTogbWlzc2luZyBfX2luaXRfXycKICAgICAgICAgX3dhcm5pbmdzLndhcm4obXNnLmZvcm1hdChwb3J0aW9uc1swXSksIEltcG9ydFdhcm5pbmcpCiAgICAgcmV0dXJuIGxvYWRlcgogCiAKK2RlZiBfbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSk6CisgICAgIiIiTG9hZCB0aGUgc3BlY2lmaWVkIG1vZHVsZSBpbnRvIHN5cy5tb2R1bGVzIGFuZCByZXR1cm4gaXQuIiIiCisgICAgIyBYWFggRGVwcmVjYXRpb24gV2FybmluZyBoZXJlLi4uCisgICAgc3BlYyA9IHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIHNlbGYpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tmdWxsbmFtZV0KKyAgICAgICAgbWV0aG9kcy5leGVjKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBtZXRob2RzLmxvYWQoKQorCisKK2RlZiBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIHNvdXJjZV9zdGF0cz1Ob25lLCBuYW1lPU5vbmUsIHBhdGg9Tm9uZSk6CisgICAgIiIiVmFsaWRhdGUgdGhlIGhlYWRlciBvZiB0aGUgcGFzc2VkLWluIGJ5dGVjb2RlIGFnYWluc3Qgc291cmNlX3N0YXRzIChpZgorICAgIGdpdmVuKSBhbmQgcmV0dXJuaW5nIHRoZSBieXRlY29kZSB0aGF0IGNhbiBiZSBjb21waWxlZCBieSBjb21waWxlKCkuCisKKyAgICBBbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGVuaGFuY2UgZXJyb3IgcmVwb3J0aW5nLgorCisgICAgSW1wb3J0RXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBpcyBpbmNvcnJlY3Qgb3IgdGhlIGJ5dGVjb2RlIGlzCisgICAgZm91bmQgdG8gYmUgc3RhbGUuIEVPRkVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBkYXRhIGlzIGZvdW5kIHRvIGJlCisgICAgdHJ1bmNhdGVkLgorCisgICAgIiIiCisgICAgZXhjX2RldGFpbHMgPSB7fQorICAgIGlmIG5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGV4Y19kZXRhaWxzWyduYW1lJ10gPSBuYW1lCisgICAgZWxzZToKKyAgICAgICAgIyBUbyBwcmV2ZW50IGhhdmluZyB0byBtYWtlIGFsbCBtZXNzYWdlcyBoYXZlIGEgY29uZGl0aW9uYWwgbmFtZS4KKyAgICAgICAgbmFtZSA9ICc8Ynl0ZWNvZGU+JworICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgIGV4Y19kZXRhaWxzWydwYXRoJ10gPSBwYXRoCisgICAgbWFnaWMgPSBkYXRhWzo0XQorICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KKyAgICByYXdfc2l6ZSA9IGRhdGFbODoxMl0KKyAgICBpZiBtYWdpYyAhPSBNQUdJQ19OVU1CRVI6CisgICAgICAgIG1lc3NhZ2UgPSAnYmFkIG1hZ2ljIG51bWJlciBpbiB7IXJ9OiB7IXJ9Jy5mb3JtYXQobmFtZSwgbWFnaWMpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgKipleGNfZGV0YWlscykKKyAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgorICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgdGltZXN0YW1wIGluIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCisgICAgZWxpZiBsZW4ocmF3X3NpemUpICE9IDQ6CisgICAgICAgIG1lc3NhZ2UgPSAncmVhY2hlZCBFT0Ygd2hpbGUgcmVhZGluZyBzaXplIG9mIHNvdXJjZSBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQorICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc291cmNlX210aW1lID0gaW50KHNvdXJjZV9zdGF0c1snbXRpbWUnXSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICdieXRlY29kZSBpcyBzdGFsZSBmb3IgeyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZShtZXNzYWdlKQorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3NpemUpICE9IHNvdXJjZV9zaXplOgorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdieXRlY29kZSBpcyBzdGFsZSBmb3IgeyFyfScuZm9ybWF0KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqZXhjX2RldGFpbHMpCisgICAgcmV0dXJuIGRhdGFbMTI6XQorCisKK2RlZiBfY29tcGlsZV9ieXRlY29kZShkYXRhLCBuYW1lPU5vbmUsIGJ5dGVjb2RlX3BhdGg9Tm9uZSwgc291cmNlX3BhdGg9Tm9uZSk6CisgICAgIiIiQ29tcGlsZSBieXRlY29kZSBhcyByZXR1cm5lZCBieSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKCkuIiIiCisgICAgY29kZSA9IG1hcnNoYWwubG9hZHMoZGF0YSkKKyAgICBpZiBpc2luc3RhbmNlKGNvZGUsIF9jb2RlX3R5cGUpOgorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHshcn0nLCBieXRlY29kZV9wYXRoKQorICAgICAgICBpZiBzb3VyY2VfcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShjb2RlLCBzb3VyY2VfcGF0aCkKKyAgICAgICAgcmV0dXJuIGNvZGUKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignTm9uLWNvZGUgb2JqZWN0IGluIHshcn0nLmZvcm1hdChieXRlY29kZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisKK2RlZiBfY29kZV90b19ieXRlY29kZShjb2RlLCBtdGltZT0wLCBzb3VyY2Vfc2l6ZT0wKToKKyAgICAiIiJDb21waWxlIGEgY29kZSBvYmplY3QgaW50byBieXRlY29kZSBmb3Igd3JpdGluZyBvdXQgdG8gYSBieXRlLWNvbXBpbGVkCisgICAgZmlsZS4iIiIKKyAgICBkYXRhID0gYnl0ZWFycmF5KE1BR0lDX05VTUJFUikKKyAgICBkYXRhLmV4dGVuZChfd19sb25nKG10aW1lKSkKKyAgICBkYXRhLmV4dGVuZChfd19sb25nKHNvdXJjZV9zaXplKSkKKyAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGUpKQorICAgIHJldHVybiBkYXRhCisKKworZGVmIGRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKToKKyAgICAiIiJEZWNvZGUgYnl0ZXMgcmVwcmVzZW50aW5nIHNvdXJjZSBjb2RlIGFuZCByZXR1cm4gdGhlIHN0cmluZy4KKworICAgIFVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQgaXMgdXNlZCBpbiB0aGUgZGVjb2RpbmcuCisgICAgIiIiCisgICAgaW1wb3J0IHRva2VuaXplICAjIFRvIGF2b2lkIGJvb3RzdHJhcCBpc3N1ZXMuCisgICAgc291cmNlX2J5dGVzX3JlYWRsaW5lID0gX2lvLkJ5dGVzSU8oc291cmNlX2J5dGVzKS5yZWFkbGluZQorICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHNvdXJjZV9ieXRlc19yZWFkbGluZSkKKyAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQorICAgIHJldHVybiBuZXdsaW5lX2RlY29kZXIuZGVjb2RlKHNvdXJjZV9ieXRlcy5kZWNvZGUoZW5jb2RpbmdbMF0pKQorCisKKyMgTW9kdWxlIHNwZWNpZmljYXRpb25zICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmIF9tb2R1bGVfcmVwcihtb2R1bGUpOgorICAgICMgVGhlIGltcGxlbWVudGF0aW9uIG9mIE1vZHVsZVR5cGVfX3JlcHJfXygpLgorICAgIGxvYWRlciA9IGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpCisgICAgaWYgaGFzYXR0cihsb2FkZXIsICdtb2R1bGVfcmVwcicpOgorICAgICAgICAjIFhYWCBEZXByZWNhdGlvbiBXYXJuaW5nIGhlcmUuLi4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5tb2R1bGVfcmVwcihtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBfU3BlY01ldGhvZHMoc3BlYykubW9kdWxlX3JlcHIoKQorCisgICAgIyBXZSBjb3VsZCB1c2UgbW9kdWxlLl9fY2xhc3NfXy5fX25hbWVfXyBpbnN0ZWFkIG9mICdtb2R1bGUnIGluIHRoZQorICAgICMgdmFyaW91cyByZXByIHBlcm11dGF0aW9ucy4KKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIG5hbWUgPSAnPycKKyAgICB0cnk6CisgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlLl9fZmlsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoeyFyfSk+Jy5mb3JtYXQobmFtZSwgbG9hZGVyKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBmaWxlbmFtZSkKKworCitjbGFzcyBfaW5zdGFsbGVkX3NhZmVseToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLl9tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5fc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCisgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcworICAgICAgICAjIHdyb25nKQorICAgICAgICBzZWxmLl9zcGVjLl9pbml0aWFsaXppbmcgPSBUcnVlCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYuX3NwZWMubmFtZV0gPSBzZWxmLl9tb2R1bGUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9zcGVjCisgICAgICAgICAgICBpZiBhbnkoYXJnIGlzIG5vdCBOb25lIGZvciBhcmcgaW4gYXJncyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdpbXBvcnQgeyFyfSAjIHshcn0nLCBzcGVjLm5hbWUsIHNwZWMubG9hZGVyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3BlYy5faW5pdGlhbGl6aW5nID0gRmFsc2UKKworCitjbGFzcyBNb2R1bGVTcGVjOgorICAgICIiIlRoZSBzcGVjaWZpY2F0aW9uIGZvciBhIG1vZHVsZSwgdXNlZCBmb3IgbG9hZGluZy4KKworICAgIEEgbW9kdWxlJ3Mgc3BlYyBpcyB0aGUgc291cmNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlLiAgRm9yCisgICAgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG1vZHVsZSwgaW5jbHVkaW5nIHNvdXJjZSwgdXNlIHRoZSBzcGVjJ3MKKyAgICBsb2FkZXIuCisKKyAgICBgbmFtZWAgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gIGBsb2FkZXJgIGlzIHRoZSBsb2FkZXIKKyAgICB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBgcGFyZW50YCBpcyB0aGUgbmFtZSBvZiB0aGUKKyAgICBwYWNrYWdlIHRoZSBtb2R1bGUgaXMgaW4uICBUaGUgcGFyZW50IGlzIGRlcml2ZWQgZnJvbSB0aGUgbmFtZS4KKworICAgIGBpc19wYWNrYWdlYCBkZXRlcm1pbmVzIGlmIHRoZSBtb2R1bGUgaXMgY29uc2lkZXJlZCBhIHBhY2thZ2Ugb3IKKyAgICBub3QuICBPbiBtb2R1bGVzIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IHRoZSBgX19wYXRoX19gIGF0dHJpYnV0ZS4KKworICAgIGBvcmlnaW5gIGlzIHRoZSBzcGVjaWZpYyBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBsb2FkZXIgZnJvbSB3aGljaCB0bworICAgIGxvYWQgdGhlIG1vZHVsZSwgaWYgdGhhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuICBXaGVuIGZpbGVuYW1lIGlzCisgICAgc2V0LCBvcmlnaW4gd2lsbCBtYXRjaC4KKworICAgIGBoYXNfbG9jYXRpb25gIGluZGljYXRlcyB0aGF0IGEgc3BlYydzICJvcmlnaW4iIHJlZmxlY3RzIGEgbG9jYXRpb24uCisgICAgV2hlbiB0aGlzIGlzIFRydWUsIGBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUgaXMgc2V0LgorCisgICAgYGNhY2hlZGAgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZSwgaWYgYW55LiAgSXQKKyAgICBjb3JyZXNwb25kcyB0byB0aGUgYF9fY2FjaGVkX19gIGF0dHJpYnV0ZS4KKworICAgIGBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uc2AgaXMgdGhlIHNlcXVlbmNlIG9mIHBhdGggZW50cmllcyB0bworICAgIHNlYXJjaCB3aGVuIGltcG9ydGluZyBzdWJtb2R1bGVzLiAgSWYgc2V0LCBpc19wYWNrYWdlIHNob3VsZCBiZQorICAgIFRydWUtLWFuZCBGYWxzZSBvdGhlcndpc2UuCisKKyAgICBQYWNrYWdlcyBhcmUgc2ltcGx5IG1vZHVsZXMgdGhhdCAobWF5KSBoYXZlIHN1Ym1vZHVsZXMuICBJZiBhIHNwZWMKKyAgICBoYXMgYSBub24tTm9uZSB2YWx1ZSBpbiBgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnNgLCB0aGUgaW1wb3J0CisgICAgc3lzdGVtIHdpbGwgY29uc2lkZXIgbW9kdWxlcyBsb2FkZWQgZnJvbSB0aGUgc3BlYyBhcyBwYWNrYWdlcy4KKworICAgIE9ubHkgZmluZGVycyAoc2VlIGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIgYW5kCisgICAgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIpIHNob3VsZCBtb2RpZnkgTW9kdWxlU3BlYyBpbnN0YW5jZXMuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBsb2FkZXJfc3RhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmxvYWRlciA9IGxvYWRlcgorICAgICAgICBzZWxmLm9yaWdpbiA9IG9yaWdpbgorICAgICAgICBzZWxmLmxvYWRlcl9zdGF0ZSA9IGxvYWRlcl9zdGF0ZQorICAgICAgICBzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10gaWYgaXNfcGFja2FnZSBlbHNlIE5vbmUKKworICAgICAgICAjIGZpbGUtbG9jYXRpb24gYXR0cmlidXRlcworICAgICAgICBzZWxmLl9zZXRfZmlsZWF0dHIgPSBGYWxzZQorICAgICAgICBzZWxmLl9jYWNoZWQgPSBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJ25hbWU9eyFyfScuZm9ybWF0KHNlbGYubmFtZSksCisgICAgICAgICAgICAgICAgJ2xvYWRlcj17IXJ9Jy5mb3JtYXQoc2VsZi5sb2FkZXIpXQorICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdvcmlnaW49eyFyfScuZm9ybWF0KHNlbGYub3JpZ2luKSkKKyAgICAgICAgaWYgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz17fScKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykpCisgICAgICAgIHJldHVybiAne30oe30pJy5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICcsICcuam9pbihhcmdzKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzbXNsID0gc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRlciA9PSBvdGhlci5sb2FkZXIgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luID09IG90aGVyLm9yaWdpbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgc21zbCA9PSBvdGhlci5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWQgPT0gb3RoZXIuY2FjaGVkIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhc19sb2NhdGlvbiA9PSBvdGhlci5oYXNfbG9jYXRpb24pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNhY2hlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2FjaGVkIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fc2V0X2ZpbGVhdHRyOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcmlnaW4KKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShTT1VSQ0VfU1VGRklYRVMpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoQllURUNPREVfU1VGRklYRVMpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZAorCisgICAgQGNhY2hlZC5zZXR0ZXIKKyAgICBkZWYgY2FjaGVkKHNlbGYsIGNhY2hlZCk6CisgICAgICAgIHNlbGYuX2NhY2hlZCA9IGNhY2hlZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudChzZWxmKToKKyAgICAgICAgIiIiVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSdzIHBhcmVudC4iIiIKKyAgICAgICAgaWYgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXRfZmlsZWF0dHIKKworCitkZWYgc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBpc19wYWNrYWdlPU5vbmUpOgorICAgICIiIlJldHVybiBhIG1vZHVsZSBzcGVjIGJhc2VkIG9uIHZhcmlvdXMgbG9hZGVyIG1ldGhvZHMuIiIiCisgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfZmlsZW5hbWUnKToKKyAgICAgICAgaWYgaXNfcGFja2FnZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgICAgIHNlYXJjaCA9IFtdIGlmIGlzX3BhY2thZ2UgZWxzZSBOb25lCisgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2FkZXI9bG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9c2VhcmNoKQorCisgICAgaWYgaXNfcGFja2FnZSBpcyBOb25lOgorICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2lzX3BhY2thZ2UnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gbG9hZGVyLmlzX3BhY2thZ2UobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gTm9uZSAgIyBha2EsIHVuZGVmaW5lZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyB0aGUgZGVmYXVsdAorICAgICAgICAgICAgaXNfcGFja2FnZSA9IEZhbHNlCisKKyAgICByZXR1cm4gTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsIG9yaWdpbj1vcmlnaW4sIGlzX3BhY2thZ2U9aXNfcGFja2FnZSkKKworCitfUE9QVUxBVEUgPSBvYmplY3QoKQorCisKK2RlZiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2NhdGlvbj1Ob25lLCAqLCBsb2FkZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1fUE9QVUxBVEUpOgorICAgICIiIlJldHVybiBhIG1vZHVsZSBzcGVjIGJhc2VkIG9uIGEgZmlsZSBsb2NhdGlvbi4KKworICAgIFRvIGluZGljYXRlIHRoYXQgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIHNldAorICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIHRvIGEgbGlzdCBvZiBkaXJlY3RvcnkgcGF0aHMuICBBbgorICAgIGVtcHR5IGxpc3QgaXMgc3VmZmljaWVudCwgdGhvdWdoIGl0cyBub3Qgb3RoZXJ3aXNlIHVzZWZ1bCB0byB0aGUKKyAgICBpbXBvcnQgc3lzdGVtLgorCisgICAgVGhlIGxvYWRlciBtdXN0IHRha2UgYSBzcGVjIGFzIGl0cyBvbmx5IF9faW5pdF9fKCkgYXJnLgorCisgICAgIiIiCisgICAgaWYgbG9jYXRpb24gaXMgTm9uZToKKyAgICAgICAgIyBUaGUgY2FsbGVyIG1heSBzaW1wbHkgd2FudCBhIHBhcnRpYWxseSBwb3B1bGF0ZWQgbG9jYXRpb24tCisgICAgICAgICMgb3JpZW50ZWQgc3BlYy4gIFNvIHdlIHNldCB0aGUgbG9jYXRpb24gdG8gYSBib2d1cyB2YWx1ZSBhbmQKKyAgICAgICAgIyBmaWxsIGluIGFzIG11Y2ggYXMgd2UgY2FuLgorICAgICAgICBsb2NhdGlvbiA9ICc8dW5rbm93bj4nCisgICAgICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnZ2V0X2ZpbGVuYW1lJyk6CisgICAgICAgICAgICAjIEV4ZWN1dGlvbkxvYWRlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gbG9hZGVyLmdldF9maWxlbmFtZShuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgSWYgdGhlIGxvY2F0aW9uIGlzIG9uIHRoZSBmaWxlc3lzdGVtLCBidXQgZG9lc24ndCBhY3R1YWxseSBleGlzdCwKKyAgICAjIHdlIGNvdWxkIHJldHVybiBOb25lIGhlcmUsIGluZGljYXRpbmcgdGhhdCB0aGUgbG9jYXRpb24gaXMgbm90CisgICAgIyB2YWxpZC4gIEhvd2V2ZXIsIHdlIGRvbid0IGhhdmUgYSBnb29kIHdheSBvZiB0ZXN0aW5nIHNpbmNlIGFuCisgICAgIyBpbmRpcmVjdCBsb2NhdGlvbiAoZS5nLiBhIHppcCBmaWxlIG9yIFVSTCkgd2lsbCBsb29rIGxpa2UgYQorICAgICMgbm9uLWV4aXN0ZW50IGZpbGUgcmVsYXRpdmUgdG8gdGhlIGZpbGVzeXN0ZW0uCisKKyAgICBzcGVjID0gTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsIG9yaWdpbj1sb2NhdGlvbikKKyAgICBzcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisKKyAgICAjIFBpY2sgYSBsb2FkZXIgaWYgb25lIHdhc24ndCBwcm92aWRlZC4KKyAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgZm9yIGxvYWRlcl9jbGFzcywgc3VmZml4ZXMgaW4gX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCk6CisgICAgICAgICAgICBpZiBsb2NhdGlvbi5lbmRzd2l0aCh0dXBsZShzdWZmaXhlcykpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbGFzcyhuYW1lLCBsb2NhdGlvbikKKyAgICAgICAgICAgICAgICBzcGVjLmxvYWRlciA9IGxvYWRlcgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBTZXQgc3VibW9kdWxlX3NlYXJjaF9wYXRocyBhcHByb3ByaWF0ZWx5LgorICAgIGlmIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIGlzIF9QT1BVTEFURToKKyAgICAgICAgIyBDaGVjayB0aGUgbG9hZGVyLgorICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2lzX3BhY2thZ2UnKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gbG9hZGVyLmlzX3BhY2thZ2UobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbXQorICAgIGVsc2U6CisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPT0gW106CisgICAgICAgIGlmIGxvY2F0aW9uOgorICAgICAgICAgICAgZGlybmFtZSA9IF9wYXRoX3NwbGl0KGxvY2F0aW9uKVswXQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucy5hcHBlbmQoZGlybmFtZSkKKworICAgIHJldHVybiBzcGVjCisKKworZGVmIF9zcGVjX2Zyb21fbW9kdWxlKG1vZHVsZSwgbG9hZGVyPU5vbmUsIG9yaWdpbj1Ob25lKToKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIHVzZSBpbiBfc2V0dXAoKS4KKyAgICB0cnk6CisgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKyAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyID0gbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBsb2FkZXIgd2lsbCBzdGF5IE5vbmUuCisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBsb2NhdGlvbiA9IG1vZHVsZS5fX2ZpbGVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbG9jYXRpb24gPSBOb25lCisgICAgaWYgb3JpZ2luIGlzIE5vbmU6CisgICAgICAgIGlmIGxvY2F0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3JpZ2luID0gbG9hZGVyLl9PUklHSU4KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBvcmlnaW4gPSBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcmlnaW4gPSBsb2NhdGlvbgorICAgIHRyeToKKyAgICAgICAgY2FjaGVkID0gbW9kdWxlLl9fY2FjaGVkX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGNhY2hlZCA9IE5vbmUKKyAgICB0cnk6CisgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gbGlzdChtb2R1bGUuX19wYXRoX18pCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IE5vbmUKKworICAgIHNwZWMgPSBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgb3JpZ2luPW9yaWdpbikKKyAgICBzcGVjLl9zZXRfZmlsZWF0dHIgPSBGYWxzZSBpZiBsb2NhdGlvbiBpcyBOb25lIGVsc2UgVHJ1ZQorICAgIHNwZWMuY2FjaGVkID0gY2FjaGVkCisgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgcmV0dXJuIHNwZWMKKworCitjbGFzcyBfU3BlY01ldGhvZHM6CisKKyAgICAiIiJDb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCBzcGVjIG9iamVjdHMgdG8gcHJvdmlkZSBzcGVjLXNwZWNpZmljCisgICAgbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzcGVjKToKKyAgICAgICAgc2VsZi5zcGVjID0gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fbW9kdWxlKGNscywgbW9kdWxlKToKKyAgICAgICAgIiIiQ3JlYXRlIGEgc3BlYyBmcm9tIGEgbW9kdWxlJ3MgYXR0cmlidXRlcy4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gc3BlYy5fX2xvYWRlcl9fCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgc3BlYyA9IF9maW5kX3NwZWMobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9sb2FkZXIobW9kdWxlLl9fbmFtZV9fLCBsb2FkZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKG1vZHVsZS5fX25hbWVfXywgbG9hZGVyKQorICAgICAgICByZXR1cm4gY2xzKHNwZWMpCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVwciB0byB1c2UgZm9yIHRoZSBtb2R1bGUuIiIiCisgICAgICAgICMgV2UgbW9zdGx5IHJlcGxpY2F0ZSBfbW9kdWxlX3JlcHIoKSB1c2luZyB0aGUgc3BlYyBhdHRyaWJ1dGVzLgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgIG5hbWUgPSAnPycgaWYgc3BlYy5uYW1lIGlzIE5vbmUgZWxzZSBzcGVjLm5hbWUKKyAgICAgICAgaWYgc3BlYy5vcmlnaW4gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIHNwZWMubG9hZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KG5hbWUsIHNwZWMub3JpZ2luKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoe30pPicuZm9ybWF0KHNwZWMubmFtZSwgc3BlYy5vcmlnaW4pCisKKyAgICBkZWYgaW5pdF9tb2R1bGVfYXR0cnMoc2VsZiwgbW9kdWxlLCAqLCBfb3ZlcnJpZGU9RmFsc2UsIF9mb3JjZV9uYW1lPVRydWUpOgorICAgICAgICAiIiJTZXQgdGhlIG1vZHVsZSdzIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgQWxsIG1pc3NpbmcgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQuICBIZXJlCisgICAgICAgIGlzIGhvdyB0aGUgc3BlYyBhdHRyaWJ1dGVzIG1hcCBvbnRvIHRoZSBtb2R1bGU6CisKKyAgICAgICAgc3BlYy5uYW1lIC0+IG1vZHVsZS5fX25hbWVfXworICAgICAgICBzcGVjLmxvYWRlciAtPiBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBzcGVjLnBhcmVudCAtPiBtb2R1bGUuX19wYWNrYWdlX18KKyAgICAgICAgc3BlYyAtPiBtb2R1bGUuX19zcGVjX18KKworICAgICAgICBPcHRpb25hbDoKKyAgICAgICAgc3BlYy5vcmlnaW4gLT4gbW9kdWxlLl9fZmlsZV9fIChpZiBzcGVjLnNldF9maWxlYXR0ciBpcyB0cnVlKQorICAgICAgICBzcGVjLmNhY2hlZCAtPiBtb2R1bGUuX19jYWNoZWRfXyAoaWYgX19maWxlX18gYWxzbyBzZXQpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgLT4gbW9kdWxlLl9fcGF0aF9fIChpZiBzZXQpCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKworICAgICAgICAjIFRoZSBwYXNzZWQgaW4gbW9kdWxlIG1heSBiZSBub3Qgc3VwcG9ydCBhdHRyaWJ1dGUgYXNzaWdubWVudCwKKyAgICAgICAgIyBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBkb24ndCBzZXQgdGhlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgIyBfX25hbWVfXworICAgICAgICBpZiAoX292ZXJyaWRlIG9yIF9mb3JjZV9uYW1lIG9yCisgICAgICAgICAgICBnZXRhdHRyKG1vZHVsZSwgJ19fbmFtZV9fJywgTm9uZSkgaXMgTm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fID0gc3BlYy5uYW1lCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19sb2FkZXJfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEEgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrLgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IF9OYW1lc3BhY2VMb2FkZXIuX19uZXdfXyhfTmFtZXNwYWNlTG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3BhY2thZ2VfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5wYXJlbnQKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3NwZWNfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fcGF0aF9fCisgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246CisgICAgICAgICAgICAjIF9fZmlsZV9fCisgICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2ZpbGVfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzcGVjLm9yaWdpbgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIF9fY2FjaGVkX18KKyAgICAgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuY2FjaGVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNwZWMuY2FjaGVkCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBtb2R1bGUgdG8gYmUgbG9hZGVkLgorCisgICAgICAgIFRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBhcmUgYWxzbyBzZXQgd2l0aCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgdmFsdWVzIGZyb20gdGhlIHNwZWMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgIyBUeXBpY2FsbHkgbG9hZGVycyB3aWxsIG5vdCBpbXBsZW1lbnQgY3JlYXRlX21vZHVsZSgpLgorICAgICAgICBpZiBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICAgICAgIyBJZiBjcmVhdGVfbW9kdWxlKCkgcmV0dXJucyBgTm9uZWAgaXQgbWVhbnMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICMgbW9kdWxlIGNyZWF0aW9uIHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBldmVyIGNhbGxlZCBhcyB0aGUgJ2lvJworICAgICAgICAgICAgIyBtb2R1bGUgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UKKyAgICAgICAgICAgICMgdHJpZ2dlciBhbiBpbmZpbml0ZSBsb29wLgorICAgICAgICAgICAgbW9kdWxlID0gX25ld19tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIF9leGVjKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkRvIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIGV4ZWN1dGUgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbmFtZXNwYWNlIG9mIGBtb2R1bGVgIGlzIHVzZWQgYXMgdGhlIHRhcmdldCBvZiBleGVjdXRpb24uCisgICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGxvYWRlcidzIGBleGVjX21vZHVsZSgpYCBtZXRob2QuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgIyBVc2VkIGJ5IGltcG9ydGxpYi5yZWxvYWQoKSBhbmQgX2xvYWRfbW9kdWxlX3NoaW0oKS4KKyAgICBkZWYgZXhlYyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJFeGVjdXRlIHRoZSBzcGVjIGluIGFuIGV4aXN0aW5nIG1vZHVsZSdzIG5hbWVzcGFjZS4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYuc3BlYy5uYW1lCisgICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6CisgICAgICAgICAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBtc2cgPSAnbW9kdWxlIHshcn0gbm90IGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICAjIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUsIF9vdmVycmlkZT1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICAgICAgICAgICMgWFhYIERlcHJlY2F0aW9uV2FybmluZyBnb2VzIGhlcmUuLi4KKyAgICAgICAgICAgICAgICBzZWxmLnNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbmFtZV0KKworICAgIGRlZiBfbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKHNlbGYpOgorICAgICAgICAjIFhYWCBEZXByZWNhdGlvbldhcm5pbmcgZ29lcyBoZXJlLi4uCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgIyBUaGUgbW9kdWxlIG11c3QgYmUgaW4gc3lzLm1vZHVsZXMhCisgICAgICAgIHNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc3BlYy5sb2FkZXIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgU2luY2UgbW9kdWxlLl9fcGF0aF9fIG1heSBub3QgbGluZSB1cCB3aXRoCisgICAgICAgICAgICAgICAgIyBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMsIHdlIGNhbid0IG5lY2Vzc2FyaWx5IHJlbHkKKyAgICAgICAgICAgICAgICAjIG9uIHNwZWMucGFyZW50IGhlcmUuCisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3NwZWNfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgIyBYWFggSWYgd2UgZG9uJ3QgZW5kIHVwIHVzaW5nIHRoaXMgZm9yIHB5dGhvbnJ1bi5jL3J1bnB5LCB3ZSBzaG91bGQKKyAgICAjICAgICBnZXQgcmlkIG9mIGl0LgorICAgIGRlZiBfbG9hZF9leGlzdGluZyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJFeGVjIHRoZSBzcGVjJ2VkIG1vZHVsZSBpbnRvIGFuIGV4aXN0aW5nIG1vZHVsZSdzIG5hbWVzcGFjZS4iIiIKKyAgICAgICAgIyBGb3IgdXNlIGJ5IHJ1bnB5LgorICAgICAgICB3aXRoIF9pbnN0YWxsZWRfc2FmZWx5KG1vZHVsZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmV4ZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gbG9hZGVkCisKKyAgICBkZWYgX2xvYWRfdW5sb2NrZWQoc2VsZik6CisgICAgICAgICMgQSBoZWxwZXIgZm9yIGRpcmVjdCB1c2UgYnkgdGhlIGltcG9ydCBzeXN0ZW0uCisgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG5vdCBhIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKCkKKworICAgICAgICBtb2R1bGUgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIHdpdGggX2luc3RhbGxlZF9zYWZlbHkobW9kdWxlKToKKyAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2Ugc28gZG8gbm90aGluZy4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCisKKyAgICAgICAgIyBXZSBkb24ndCBlbnN1cmUgdGhhdCB0aGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgZ2V0CisgICAgICAgICMgc2V0IGluIHRoZSBzeXMubW9kdWxlcyByZXBsYWNlbWVudCBjYXNlLiAgU3VjaCBtb2R1bGVzIGFyZSBvbgorICAgICAgICAjIHRoZWlyIG93bi4KKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgIyBBIG1ldGhvZCB1c2VkIGR1cmluZyB0ZXN0aW5nIG9mIF9sb2FkX3VubG9ja2VkKCkgYW5kIGJ5CisgICAgIyBfbG9hZF9tb2R1bGVfc2hpbSgpLgorICAgIGRlZiBsb2FkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIG9iamVjdCwgbG9hZGVkIGJ5IHRoZSBzcGVjJ3MgbG9hZGVyLgorCisgICAgICAgIFRoZSBtb2R1bGUgaXMgbm90IGFkZGVkIHRvIGl0cyBwYXJlbnQuCisKKyAgICAgICAgSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcywgdGhhdCBleGlzdGluZyBtb2R1bGUgZ2V0cworICAgICAgICBjbG9iYmVyZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfdW5sb2NrZWQoKQogCiAKICMgTG9hZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTYzNCw5ICsxMjM2LDE5IEBACiAKICAgICAiIiIKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbW9kdWxlX3JlcHIobW9kdWxlKToKKyAgICAgICAgIyBYWFggZGVwcmVjYXRlCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChidWlsdC1pbik+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKGJ1aWx0LWluKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIF9pbXAuaXNfYnVpbHRpbihmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgY2xzLCBvcmlnaW49J2J1aWx0LWluJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKQEAgLTY0NSwyMyArMTI1NywxOCBAQAogICAgICAgICBJZiAncGF0aCcgaXMgZXZlciBzcGVjaWZpZWQgdGhlbiB0aGUgc2VhcmNoIGlzIGNvbnNpZGVyZWQgYSBmYWlsdXJlLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2J1aWx0aW4oZnVsbG5hbWUpIGVsc2UgTm9uZQorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGJ1aWx0LWluIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICB3aXRoIF9NYW5hZ2VSZWxvYWQoZnVsbG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmluaXRfYnVpbHRpbiwgZnVsbG5hbWUpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gY2xzCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICcnCisgICAgICAgIHJldHVybiBtb2R1bGUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgpAQCAtNjc5LDYgKzEyODYsNyBAQAogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBpc19wYWNrYWdlKGNscywgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gRmFsc2UgYXMgYnVpbHQtaW4gbW9kdWxlcyBhcmUgbmV2ZXIgcGFja2FnZXMuIiIiCisgICAgICAgICMgWFhYIERlcHJlY2F0aW9uV2FybmluZyBoZXJlLi4uCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAKQEAgLTY5MSwzMSArMTI5OSwzNiBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG0pOgorICAgICAgICAjIFhYWCBkZXByZWNhdGUKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKGZyb3plbik+Jy5mb3JtYXQobS5fX25hbWVfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG0pOgotICAgICAgICByZXR1cm4gIjxtb2R1bGUgJ3t9JyAoZnJvemVuKT4iLmZvcm1hdChtLl9fbmFtZV9fKQorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGlmIF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBjbHMsIG9yaWdpbj0nZnJvemVuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiRmluZCBhIGZyb3plbiBtb2R1bGUuIiIiCiAgICAgICAgIHJldHVybiBjbHMgaWYgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpIGVsc2UgTm9uZQogCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleGVjX21vZHVsZShtb2R1bGUpOgorICAgICAgICBuYW1lID0gbW9kdWxlLl9fc3BlY19fLm5hbWUKKyAgICAgICAgaWYgbm90IF9pbXAuaXNfZnJvemVuKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3shcn0gaXMgbm90IGEgZnJvemVuIG1vZHVsZScuZm9ybWF0KG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lKQorICAgICAgICBjb2RlID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmdldF9mcm96ZW5fb2JqZWN0LCBuYW1lKQorICAgICAgICBleGVjKGNvZGUsIG1vZHVsZS5fX2RpY3RfXykKKwogICAgIEBjbGFzc21ldGhvZAotICAgIEBzZXRfcGFja2FnZQotICAgIEBzZXRfbG9hZGVyCi0gICAgQF9yZXF1aXJlc19mcm96ZW4KICAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkxvYWQgYSBmcm96ZW4gbW9kdWxlLiIiIgotICAgICAgICBpc19yZWxvYWQgPSBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChfaW1wLmluaXRfZnJvemVuLCBmdWxsbmFtZSkKLSAgICAgICAgICAgICMgTGV0IG91ciBvd24gbW9kdWxlX3JlcHIoKSBtZXRob2QgcHJvZHVjZSBhIHN1aXRhYmxlIHJlcHIuCi0gICAgICAgICAgICBkZWwgbS5fX2ZpbGVfXwotICAgICAgICAgICAgcmV0dXJuIG0KLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKGNscywgZnVsbG5hbWUpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2Zyb3plbgpAQCAtNzM4LDIyICsxMzUxLDIxIEBACiAKIGNsYXNzIFdpbmRvd3NSZWdpc3RyeUZpbmRlcjoKIAotICAgICIiIk1ldGEgcGF0aCBmaW5kZXIgZm9yIG1vZHVsZXMgZGVjbGFyZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuCi0gICAgIiIiCisgICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4iIiIKIAogICAgIFJFR0lTVFJZX0tFWSA9ICgKLSAgICAgICAgIlNvZnR3YXJlXFxQeXRob25cXFB5dGhvbkNvcmVcXHtzeXNfdmVyc2lvbn0iCi0gICAgICAgICJcXE1vZHVsZXNcXHtmdWxsbmFtZX0iKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfScpCiAgICAgUkVHSVNUUllfS0VZX0RFQlVHID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWciKQorICAgICAgICAnU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufScKKyAgICAgICAgJ1xcTW9kdWxlc1xce2Z1bGxuYW1lfVxcRGVidWcnKQogICAgIERFQlVHX0JVSUxEID0gRmFsc2UgICMgQ2hhbmdlZCBpbiBfc2V0dXAoKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9vcGVuX3JlZ2lzdHJ5KGNscywga2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfQ1VSUkVOVF9VU0VSLCBrZXkpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORSwga2V5KQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC03NjYsMjQgKzEzNzgsMzUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfdmVyc2lvbj1zeXMudmVyc2lvbls6M10pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggY2xzLl9vcGVuX3JlZ2lzdHJ5KGtleSkgYXMgaGtleToKLSAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAiIikKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICBmaWxlcGF0aCA9IF93aW5yZWcuUXVlcnlWYWx1ZShoa2V5LCAnJykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gZmlsZXBhdGgKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIG1vZHVsZSBuYW1lZCBpbiB0aGUgcmVnaXN0cnkuIiIiCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIyBYWFggdW50ZXN0ZWQhIE5lZWQgYSBXaW5kb3dzIHBlcnNvbiB0byB3cml0ZSB0ZXN0cyAob3RoZXJ3aXNlIG1vY2sgb3V0IGFwcHJvcHJpYXRlbHkpCiAgICAgICAgIGZpbGVwYXRoID0gY2xzLl9zZWFyY2hfcmVnaXN0cnkoZnVsbG5hbWUpCiAgICAgICAgIGlmIGZpbGVwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfb3Muc3RhdChmaWxlcGF0aCkKKyAgICAgICAgICAgIF9wYXRoX3N0YXQoZmlsZXBhdGgpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgZm9yIGxvYWRlciwgc3VmZml4ZXMgaW4gX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCk6CiAgICAgICAgICAgICBpZiBmaWxlcGF0aC5lbmRzd2l0aCh0dXBsZShzdWZmaXhlcykpOgotICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIoZnVsbG5hbWUsIGZpbGVwYXRoKQorICAgICAgICAgICAgICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBsb2FkZXIoZnVsbG5hbWUsIGZpbGVwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49ZmlsZXBhdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJGaW5kIG1vZHVsZSBuYW1lZCBpbiB0aGUgcmVnaXN0cnkuIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBjbGFzcyBfTG9hZGVyQmFzaWNzOgpAQCAtNzkxLDYgKzE0MTQsNyBAQAogICAgICIiIkJhc2UgY2xhc3Mgb2YgY29tbW9uIGNvZGUgbmVlZGVkIGJ5IGJvdGggU291cmNlTG9hZGVyIGFuZAogICAgIFNvdXJjZWxlc3NGaWxlTG9hZGVyLiIiIgogCisgICAgIyBYWFggZGVwcmVjYXRlPwogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5pc19wYWNrYWdlIGJ5IGNoZWNraW5nIGlmCiAgICAgICAgIHRoZSBwYXRoIHJldHVybmVkIGJ5IGdldF9maWxlbmFtZSBoYXMgYSBmaWxlbmFtZSBvZiAnX19pbml0X18ucHknLiIiIgpAQCAtNzk5LDc0ICsxNDIzLDE1IEBACiAgICAgICAgIHRhaWxfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQogICAgICAgICByZXR1cm4gZmlsZW5hbWVfYmFzZSA9PSAnX19pbml0X18nIGFuZCB0YWlsX25hbWUgIT0gJ19faW5pdF9fJwogCi0gICAgZGVmIF9ieXRlc19mcm9tX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBkYXRhLCBieXRlY29kZV9wYXRoLCBzb3VyY2Vfc3RhdHMpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG1hcnNoYWxsZWQgYnl0ZXMgZnJvbSBieXRlY29kZSwgdmVyaWZ5aW5nIHRoZSBtYWdpYwotICAgICAgICBudW1iZXIsIHRpbWVzdGFtcCBhbmQgc291cmNlIHNpemUgYWxvbmcgdGhlIHdheS4KKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbW9kdWxlLiIiIgorICAgICAgICBjb2RlID0gc2VsZi5nZXRfY29kZShtb2R1bGUuX19uYW1lX18pCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybnMgTm9uZScuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykpCisgICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZSwgbW9kdWxlLl9fZGljdF9fKQogCi0gICAgICAgIElmIHNvdXJjZV9zdGF0cyBpcyBOb25lIHRoZW4gc2tpcCB0aGUgdGltZXN0YW1wIGNoZWNrLgotCi0gICAgICAgICIiIgotICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgIGlmIG1hZ2ljICE9IF9NQUdJQ19CWVRFUzoKLSAgICAgICAgICAgIG1zZyA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChmdWxsbmFtZSwgbWFnaWMpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1zZykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgdGltZXN0YW1wIGluIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgICAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAnYmFkIHNpemUgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAjIENhbid0IHJldHVybiB0aGUgY29kZSBvYmplY3QgYXMgZXJyb3JzIGZyb20gbWFyc2hhbCBsb2FkaW5nIG5lZWQgdG8KLSAgICAgICAgIyBwcm9wYWdhdGUgZXZlbiB3aGVuIHNvdXJjZSBpcyBhdmFpbGFibGUuCi0gICAgICAgIHJldHVybiBkYXRhWzEyOl0KLQotICAgIEBtb2R1bGVfZm9yX2xvYWRlcgotICAgIGRlZiBfbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCAqLCBzb3VyY2VsZXNzPUZhbHNlKToKLSAgICAgICAgIiIiSGVscGVyIGZvciBsb2FkX21vZHVsZSBhYmxlIHRvIGhhbmRsZSBlaXRoZXIgc291cmNlIG9yIHNvdXJjZWxlc3MKLSAgICAgICAgbG9hZGluZy4iIiIKLSAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuZ2V0X2NvZGUobmFtZSkKLSAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgaWYgbm90IHNvdXJjZWxlc3M6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBjYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQotICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQobW9kdWxlLl9fZmlsZV9fKVswXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIGxvYWRfbW9kdWxlID0gX2xvYWRfbW9kdWxlX3NoaW0KIAogCiBjbGFzcyBTb3VyY2VMb2FkZXIoX0xvYWRlckJhc2ljcyk6CkBAIC04NzQsOCArMTQzOSwxMCBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCiAgICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgorCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgcmV0dXJuaW5nIGEgbWV0YWRhdGEgZGljdCBmb3IgdGhlIHNwZWNpZmllZCBwYXRoCkBAIC04ODYsNiArMTQ1Myw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgdGhlIGxvYWRlciB0byByZWFkIGJ5dGVjb2RlIGZpbGVzLgorICAgICAgICBSYWlzZXMgSU9FcnJvciB3aGVuIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKQEAgLTkwMywzMiArMTQ3MSwyNiBAQAogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd3JpdGVzIGRhdGEgKGJ5dGVzKSB0byBhIGZpbGUgcGF0aCAoYSBzdHIpLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgZm9yIHRoZSB3cml0aW5nIG9mIGJ5dGVjb2RlIGZpbGVzLgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfc291cmNlLiIiIgotICAgICAgICBpbXBvcnQgdG9rZW5pemUKICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCkiLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIHJlYWRzb3VyY2UgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHJlYWRzb3VyY2UpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRldGVjdCBlbmNvZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRlY29kZSBzb3VyY2UgZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YworICAgICAgICByZXR1cm4gZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aCwgKiwgX29wdGltaXplPS0xKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2JqZWN0IHR5cGUgdGhhdCBjb21waWxlKCkgc3VwcG9ydHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKIAogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCkBAIC05NDYsNDUgKzE1MDgsMzQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Vfc3RhdHM9c3QsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30gbWF0Y2hlcyB7fScsIGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIF9jb2RlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShmb3VuZCwgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoPWJ5dGVjb2RlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGg9c291cmNlX3BhdGgpCiAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQogICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoX01BR0lDX0JZVEVTKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhsZW4oc291cmNlX2J5dGVzKSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCisgICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQogICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQpAQCAtOTkyLDE2ICsxNTQzLDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgTG9hZGVyLmxvYWRfbW9kdWxlLgotCi0gICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCi0gICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCi0gICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KIAogY2xhc3MgRmlsZUxvYWRlcjoKIApAQCAtMTAxNyw3ICsxNTU4LDkgQEAKICAgICBAX2NoZWNrX25hbWUKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGEgbW9kdWxlIGZyb20gYSBmaWxlLiIiIgotICAgICAgICAjIElzc3VlICMxNDg1NzogQXZvaWQgdGhlIHplcm8tYXJndW1lbnQgZm9ybSBzbyB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBUaGUgb25seSByZWFzb24gZm9yIHRoaXMgbWV0aG9kIGlzIGZvciB0aGUgbmFtZSBjaGVjay4KKworICAgICAgICAjIElzc3VlICMxNDg1NzogQXZvaWQgdGhlIHplcm8tYXJndW1lbnQgZm9ybSBvZiBzdXBlciBzbyB0aGUgaW1wbGVtZW50YXRpb24KICAgICAgICAgIyBvZiB0aGF0IGZvcm0gY2FuIGJlIHVwZGF0ZWQgd2l0aG91dCBicmVha2luZyB0aGUgZnJvemVuIG1vZHVsZQogICAgICAgICByZXR1cm4gc3VwZXIoRmlsZUxvYWRlciwgc2VsZikubG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKQEAgLTEwMzgsMTggKzE1ODEsMTIgQEAKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG1ldGFkYXRhIGZvciB0aGUgcGF0aC4iIiIKLSAgICAgICAgc3QgPSBfb3Muc3RhdChwYXRoKQorICAgICAgICBzdCA9IF9wYXRoX3N0YXQocGF0aCkKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzdC5zdF9tdGltZSwgJ3NpemUnOiBzdC5zdF9zaXplfQogCiAgICAgZGVmIF9jYWNoZV9ieXRlY29kZShzZWxmLCBzb3VyY2VfcGF0aCwgYnl0ZWNvZGVfcGF0aCwgZGF0YSk6CiAgICAgICAgICMgQWRhcHQgYmV0d2VlbiB0aGUgdHdvIEFQSXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kZSA9IF9vcy5zdGF0KHNvdXJjZV9wYXRoKS5zdF9tb2RlCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgbW9kZSA9IDBvNjY2Ci0gICAgICAgICMgV2UgYWx3YXlzIGVuc3VyZSB3cml0ZSBhY2Nlc3Mgc28gd2UgY2FuIHVwZGF0ZSBjYWNoZWQgZmlsZXMKLSAgICAgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQotICAgICAgICBtb2RlIHw9IDBvMjAwCisgICAgICAgIG1vZGUgPSBfY2FsY19tb2RlKHNvdXJjZV9wYXRoKQogICAgICAgICByZXR1cm4gc2VsZi5zZXRfZGF0YShieXRlY29kZV9wYXRoLCBkYXRhLCBfbW9kZT1tb2RlKQogCiAgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEsICosIF9tb2RlPTBvNjY2KToKQEAgLTEwODUsMjAgKzE2MjIsMTEgQEAKIAogICAgICIiIkxvYWRlciB3aGljaCBoYW5kbGVzIHNvdXJjZWxlc3MgZmlsZSBpbXBvcnRzLiIiIgogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzb3VyY2VsZXNzPVRydWUpCi0KICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICBwYXRoID0gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCiAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGJ5dGVzX2RhdGEgPSBzZWxmLl9ieXRlc19mcm9tX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhLCBwYXRoLCBOb25lKQotICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShmb3VuZCwgX2NvZGVfdHlwZSk6Ci0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdjb2RlIG9iamVjdCBmcm9tIHshcn0nLCBwYXRoKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm9uLWNvZGUgb2JqZWN0IGluIHt9Ii5mb3JtYXQocGF0aCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPXBhdGgpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBfdmFsaWRhdGVfYnl0ZWNvZGVfaGVhZGVyKGRhdGEsIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgcmV0dXJuIF9jb21waWxlX2J5dGVjb2RlKGJ5dGVzX2RhdGEsIG5hbWU9ZnVsbG5hbWUsIGJ5dGVjb2RlX3BhdGg9cGF0aCkKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuIiIiCkBAIC0xMTIyLDIyICsxNjUwLDIwIEBACiAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKIAogICAgIEBfY2hlY2tfbmFtZQotICAgIEBzZXRfcGFja2FnZQotICAgIEBzZXRfbG9hZGVyCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhbiBleHRlbnNpb24gbW9kdWxlLiIiIgotICAgICAgICBpc19yZWxvYWQgPSBmdWxsbmFtZSBpbiBzeXMubW9kdWxlcwotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggX01hbmFnZVJlbG9hZChmdWxsbmFtZSk6CiAgICAgICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAubG9hZF9keW5hbWljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgc2VsZi5wYXRoKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKSBhbmQgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQoc2VsZi5wYXRoKVswXV0KLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQorICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICBpZiBpc19wYWNrYWdlIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgaWYgbm90IGlzX3BhY2thZ2U6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKIAogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgpAQCAtMTE1Myw2ICsxNjc5LDExIEBACiAgICAgICAgICIiIlJldHVybiBOb25lIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGhhdmUgbm8gc291cmNlIGNvZGUuIiIiCiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBAX2NoZWNrX25hbWUKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKIAogY2xhc3MgX05hbWVzcGFjZVBhdGg6CiAgICAgIiIiUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBwYWNrYWdlJ3MgcGF0aC4gIEl0IHVzZXMgdGhlIG1vZHVsZSBuYW1lCkBAIC0xMTg1LDExICsxNzE2LDEyIEBACiAgICAgICAgICMgSWYgdGhlIHBhcmVudCdzIHBhdGggaGFzIGNoYW5nZWQsIHJlY2FsY3VsYXRlIF9wYXRoCiAgICAgICAgIHBhcmVudF9wYXRoID0gdHVwbGUoc2VsZi5fZ2V0X3BhcmVudF9wYXRoKCkpICMgTWFrZSBhIGNvcHkKICAgICAgICAgaWYgcGFyZW50X3BhdGggIT0gc2VsZi5fbGFzdF9wYXJlbnRfcGF0aDoKLSAgICAgICAgICAgIGxvYWRlciwgbmV3X3BhdGggPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKICAgICAgICAgICAgICMgTm90ZSB0aGF0IG5vIGNoYW5nZXMgYXJlIG1hZGUgaWYgYSBsb2FkZXIgaXMgcmV0dXJuZWQsIGJ1dCB3ZQogICAgICAgICAgICAgIyAgZG8gcmVtZW1iZXIgdGhlIG5ldyBwYXJlbnQgcGF0aAotICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcGF0aCA9IG5ld19wYXRoCisgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCiAgICAgICAgICAgICBzZWxmLl9sYXN0X3BhcmVudF9wYXRoID0gcGFyZW50X3BhdGggICAgICMgU2F2ZSB0aGUgY29weQogICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAogCkBAIC0xMjAwLDcgKzE3MzIsNyBAQAogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3JlY2FsY3VsYXRlKCkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX05hbWVzcGFjZVBhdGgoeyFyfSkiLmZvcm1hdChzZWxmLl9wYXRoKQorICAgICAgICByZXR1cm4gJ19OYW1lc3BhY2VQYXRoKHshcn0pJy5mb3JtYXQoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuX3JlY2FsY3VsYXRlKCkKQEAgLTEyMDksMjAgKzE3NDEsMzAgQEAKICAgICAgICAgc2VsZi5fcGF0aC5hcHBlbmQoaXRlbSkKIAogCi1jbGFzcyBOYW1lc3BhY2VMb2FkZXI6CisjIFdlIHVzZSB0aGlzIGV4Y2x1c2l2ZWx5IGluIGluaXRfbW9kdWxlX2F0dHJzKCkgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCitjbGFzcyBfTmFtZXNwYWNlTG9hZGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6CiAgICAgICAgIHNlbGYuX3BhdGggPSBfTmFtZXNwYWNlUGF0aChuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcikKIAorICAgICMgWFhYIERlcHJlY2F0ZQogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChuYW1lc3BhY2UpPiIuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKG5hbWVzcGFjZSk+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQogCi0gICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gJycKKworICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBjb21waWxlKCcnLCAnPHN0cmluZz4nLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQorCisgICAgIyBYWFggRGVwcmVjYXRlCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuIiIiCiAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ25hbWVzcGFjZSBtb2R1bGUgbG9hZGVkIHdpdGggcGF0aCB7IXJ9Jywgc2VsZi5fcGF0aCkKLSAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gc2VsZi5fcGF0aAotICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHJldHVybiBfbG9hZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSkKIAogCiAjIEZpbmRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xMjY1LDcgKzE4MDcsNyBAQAogCiAgICAgICAgICIiIgogICAgICAgICBpZiBwYXRoID09ICcnOgotICAgICAgICAgICAgcGF0aCA9ICcuJworICAgICAgICAgICAgcGF0aCA9IF9vcy5nZXRjd2QoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmaW5kZXIgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CkBAIC0xMjc0LDcgKzE4MTYsMjAgQEAKICAgICAgICAgcmV0dXJuIGZpbmRlcgogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9nZXRfbG9hZGVyKGNscywgZnVsbG5hbWUsIHBhdGgpOgorICAgIGRlZiBfbGVnYWN5X2dldF9zcGVjKGNscywgZnVsbG5hbWUsIGZpbmRlcik6CisgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9sb2FkZXInKToKKyAgICAgICAgICAgIGxvYWRlciwgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZnVsbG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCisgICAgICAgICAgICBwb3J0aW9ucyA9IE5vbmUKKyAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGxvYWRlcikKKyAgICAgICAgc3BlYyA9IE1vZHVsZVNwZWMoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBwb3J0aW9ucworICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9nZXRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQ9Tm9uZSk6CiAgICAgICAgICIiIkZpbmQgdGhlIGxvYWRlciBvciBuYW1lc3BhY2VfcGF0aCBmb3IgdGhpcyBtb2R1bGUvcGFja2FnZSBuYW1lLiIiIgogICAgICAgICAjIElmIHRoaXMgZW5kcyB1cCBiZWluZyBhIG5hbWVzcGFjZSBwYWNrYWdlLCBuYW1lc3BhY2VfcGF0aCBpcwogICAgICAgICAjICB0aGUgbGlzdCBvZiBwYXRocyB0aGF0IHdpbGwgYmVjb21lIGl0cyBfX3BhdGhfXwpAQCAtMTI4NCwzOCArMTgzOSw1OCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBmaW5kZXIgPSBjbHMuX3BhdGhfaW1wb3J0ZXJfY2FjaGUoZW50cnkpCiAgICAgICAgICAgICBpZiBmaW5kZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX2xvYWRlcicpOgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBmaW5kZXIuZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IFtdCi0gICAgICAgICAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAjIFdlIGZvdW5kIGEgbG9hZGVyOiByZXR1cm4gaXQgaW1tZWRpYXRlbHkuCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIsIG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBjbHMuX2xlZ2FjeV9nZXRfc3BlYyhmdWxsbmFtZSwgZmluZGVyKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBzcGVjLmxvYWRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICAgICAgICAgICAgICBpZiBwb3J0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc3BlYyBtaXNzaW5nIGxvYWRlcicpCiAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHBvc3NpYmx5IHBhcnQgb2YgYSBuYW1lc3BhY2UgcGFja2FnZS4KICAgICAgICAgICAgICAgICAjICBSZW1lbWJlciB0aGVzZSBwYXRoIGVudHJpZXMgKGlmIGFueSkgZm9yIHdoZW4gd2UKICAgICAgICAgICAgICAgICAjICBjcmVhdGUgYSBuYW1lc3BhY2UgcGFja2FnZSwgYW5kIGNvbnRpbnVlIGl0ZXJhdGluZwogICAgICAgICAgICAgICAgICMgIG9uIHBhdGguCiAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3BhdGguZXh0ZW5kKHBvcnRpb25zKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUsIG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBuYW1lc3BhY2VfcGF0aAorICAgICAgICAgICAgcmV0dXJuIHNwZWMKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIHRoZSBtb2R1bGUgb24gc3lzLnBhdGggb3IgJ3BhdGgnIGJhc2VkIG9uIHN5cy5wYXRoX2hvb2tzIGFuZAorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgogICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CiAgICAgICAgICAgICBwYXRoID0gc3lzLnBhdGgKLSAgICAgICAgbG9hZGVyLCBuYW1lc3BhY2VfcGF0aCA9IGNscy5fZ2V0X2xvYWRlcihmdWxsbmFtZSwgcGF0aCkKLSAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgotICAgICAgICBlbHNlOgorICAgICAgICBzcGVjID0gY2xzLl9nZXRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0KQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBlbGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aCA9IHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9wYXRoOgogICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYXQgbGVhc3Qgb25lIG5hbWVzcGFjZSBwYXRoLiAgUmV0dXJuIGEKLSAgICAgICAgICAgICAgICAjICBsb2FkZXIgd2hpY2ggY2FuIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVzcGFjZUxvYWRlcihmdWxsbmFtZSwgbmFtZXNwYWNlX3BhdGgsIGNscy5fZ2V0X2xvYWRlcikKKyAgICAgICAgICAgICAgICAjICBzcGVjIHdoaWNoIGNhbiBjcmVhdGUgdGhlIG5hbWVzcGFjZSBwYWNrYWdlLgorICAgICAgICAgICAgICAgIHNwZWMub3JpZ2luID0gJ25hbWVzcGFjZScKKyAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gX05hbWVzcGFjZVBhdGgoZnVsbG5hbWUsIG5hbWVzcGFjZV9wYXRoLCBjbHMuX2dldF9zcGVjKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiImZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLiIiIgorICAgICAgICAjIFhYWCBEZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHNwZWMgPSBjbHMuZmluZF9zcGVjKGZ1bGxuYW1lLCBwYXRoKQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogCiBjbGFzcyBGaWxlRmluZGVyOgpAQCAtMTM1MCwxMCArMTkyNSwyOCBAQAogICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgb3IgdGhlIG5hbWVzcGFjZQogICAgICAgICBwYWNrYWdlIHBvcnRpb25zLiBSZXR1cm5zIChsb2FkZXIsIGxpc3Qtb2YtcG9ydGlvbnMpLiIiIgorICAgICAgICBzcGVjID0gc2VsZi5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lLCBbXQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIsIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgb3IgW10KKworICAgIGRlZiBfZ2V0X3NwZWMoc2VsZiwgbG9hZGVyX2NsYXNzLCBmdWxsbmFtZSwgcGF0aCwgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIHRhcmdldCk6CisgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbGFzcyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZ2V0X3NwZWMgPSBsb2FkZXIuX2dldF9zcGVjCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihmdWxsbmFtZSwgcGF0aCwgbG9hZGVyPWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBnZXRfc3BlYyhmdWxsbmFtZSwgcGF0aCwgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIHRhcmdldCkKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCisgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuIiIiCiAgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCiAgICAgICAgIHRhaWxfbW9kdWxlID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG10aW1lID0gX29zLnN0YXQoc2VsZi5wYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgbXRpbWUgPSBfcGF0aF9zdGF0KHNlbGYucGF0aCBvciBfb3MuZ2V0Y3dkKCkpLnN0X210aW1lCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbXRpbWUgPSAtMQogICAgICAgICBpZiBtdGltZSAhPSBzZWxmLl9wYXRoX210aW1lOgpAQCAtMTM2OSwzMyArMTk2MiwzNCBAQAogICAgICAgICAjIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgKGFuZCB0aHVzIGEgcGFja2FnZSkuCiAgICAgICAgIGlmIGNhY2hlX21vZHVsZSBpbiBjYWNoZToKICAgICAgICAgICAgIGJhc2VfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSkKLSAgICAgICAgICAgIGlmIF9wYXRoX2lzZGlyKGJhc2VfcGF0aCk6Ci0gICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgW2Jhc2VfcGF0aF0sIHRhcmdldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBhIG5hbWVzcGFjZSBwYWNrYWdlLCByZXR1cm4gdGhlIHBhdGggaWYgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAjICBmaW5kIGEgbW9kdWxlIGluIHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gX3BhdGhfaXNkaXIoYmFzZV9wYXRoKQogICAgICAgICAjIENoZWNrIGZvciBhIGZpbGUgdy8gYSBwcm9wZXIgc3VmZml4IGV4aXN0cy4KLSAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgogICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlICsgc3VmZml4KQogICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgndHJ5aW5nIHt9Jy5mb3JtYXQoZnVsbF9wYXRoKSwgdmVyYm9zaXR5PTIpCiAgICAgICAgICAgICBpZiBjYWNoZV9tb2R1bGUgKyBzdWZmaXggaW4gY2FjaGU6CiAgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgTm9uZSwgdGFyZ2V0KQogICAgICAgICBpZiBpc19uYW1lc3BhY2U6CiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdwb3NzaWJsZSBuYW1lc3BhY2UgZm9yIHt9Jy5mb3JtYXQoYmFzZV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgW2Jhc2VfcGF0aF0pCi0gICAgICAgIHJldHVybiAoTm9uZSwgW10pCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbYmFzZV9wYXRoXQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZmlsbF9jYWNoZShzZWxmKToKICAgICAgICAgIiIiRmlsbCB0aGUgY2FjaGUgb2YgcG90ZW50aWFsIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGZvciB0aGlzIGRpcmVjdG9yeS4iIiIKICAgICAgICAgcGF0aCA9IHNlbGYucGF0aAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGgpCisgICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGggb3IgX29zLmdldGN3ZCgpKQogICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBQZXJtaXNzaW9uRXJyb3IsIE5vdEFEaXJlY3RvcnlFcnJvcik6CiAgICAgICAgICAgICAjIERpcmVjdG9yeSBoYXMgZWl0aGVyIGJlZW4gcmVtb3ZlZCwgdHVybmVkIGludG8gYSBmaWxlLCBvciBtYWRlCiAgICAgICAgICAgICAjIHVucmVhZGFibGUuCkBAIC0xNDIwLDcgKzIwMTQsNyBAQAogICAgICAgICAgICAgICAgIGxvd2VyX3N1ZmZpeF9jb250ZW50cy5hZGQobmV3X25hbWUpCiAgICAgICAgICAgICBzZWxmLl9wYXRoX2NhY2hlID0gbG93ZXJfc3VmZml4X2NvbnRlbnRzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyk6Ci0gICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSBzZXQoZm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHMpCisgICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSB7Zm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHN9CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcGF0aF9ob29rKGNscywgKmxvYWRlcl9kZXRhaWxzKToKQEAgLTE0MzUsMTMgKzIwMjksMTMgQEAKICAgICAgICAgZGVmIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcihwYXRoKToKICAgICAgICAgICAgICIiIlBhdGggaG9vayBmb3IgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLiIiIgogICAgICAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQiLCBwYXRoPXBhdGgpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ29ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCcsIHBhdGg9cGF0aCkKICAgICAgICAgICAgIHJldHVybiBjbHMocGF0aCwgKmxvYWRlcl9kZXRhaWxzKQogCiAgICAgICAgIHJldHVybiBwYXRoX2hvb2tfZm9yX0ZpbGVGaW5kZXIKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJGaWxlRmluZGVyKCVyKSIgJSAoc2VsZi5wYXRoLCkKKyAgICAgICAgcmV0dXJuICdGaWxlRmluZGVyKHshcn0pJy5mb3JtYXQoc2VsZi5wYXRoKQogCiAKICMgSW1wb3J0IGl0c2VsZiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE0NjgsMTkgKzIwNjIsNDMgQEAKICAgICByZXR1cm4gJ3t9Lnt9Jy5mb3JtYXQoYmFzZSwgbmFtZSkgaWYgbmFtZSBlbHNlIGJhc2UKIAogCi1kZWYgX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpOgorZGVmIF9maW5kX3NwZWMobmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpOgogICAgICIiIkZpbmQgYSBtb2R1bGUncyBsb2FkZXIuIiIiCiAgICAgaWYgbm90IHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIF93YXJuaW5ncy53YXJuKCdzeXMubWV0YV9wYXRoIGlzIGVtcHR5JywgSW1wb3J0V2FybmluZykKKyAgICAjIFdlIGNoZWNrIHN5cy5tb2R1bGVzIGhlcmUgZm9yIHRoZSByZWxvYWQgY2FzZS4gIFdoaWxlIGEgcGFzc2VkLWluCisgICAgIyB0YXJnZXQgd2lsbCB1c3VhbGx5IGluZGljYXRlIGEgcmVsb2FkIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSwgd2hlcmVhcworICAgICMgc3lzLm1vZHVsZXMgcHJvdmlkZXMgb25lLgorICAgIGlzX3JlbG9hZCA9IG5hbWUgaW4gc3lzLm1vZHVsZXMKICAgICBmb3IgZmluZGVyIGluIHN5cy5tZXRhX3BhdGg6CiAgICAgICAgIHdpdGggX0ltcG9ydExvY2tDb250ZXh0KCk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICAgICAgaWYgbG9hZGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlcgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZpbmRfc3BlYyA9IGZpbmRlci5maW5kX3NwZWMKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fCisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRfc3BlYyhuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCisgICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfX3NwZWNfXyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSB1c2UgdGhlIGZvdW5kIHNwZWMgc2luY2UgdGhhdCBpcyB0aGUgb25lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSB3b3VsZCBoYXZlIHVzZWQgaWYgdGhlIHBhcmVudCBtb2R1bGUgaGFkbid0CisgICAgICAgICAgICAgICAgICAgICMgYmVhdGVuIHVzIHRvIHRoZSBwdW5jaC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBfX3NwZWNfXyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3NwZWNfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBOb25lCiAKQEAgLTE0ODgsMjEgKzIxMDYsMjIgQEAKIGRlZiBfc2FuaXR5X2NoZWNrKG5hbWUsIHBhY2thZ2UsIGxldmVsKToKICAgICAiIiJWZXJpZnkgYXJndW1lbnRzIGFyZSAic2FuZSIuIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJtb2R1bGUgbmFtZSBtdXN0IGJlIHN0ciwgbm90IHt9Ii5mb3JtYXQodHlwZShuYW1lKSkpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fScuZm9ybWF0KHR5cGUobmFtZSkpKQogICAgIGlmIGxldmVsIDwgMDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbGV2ZWwgbXVzdCBiZSA+PSAwJykKICAgICBpZiBwYWNrYWdlOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYWNrYWdlLCBzdHIpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJfX3BhY2thZ2VfXyBub3Qgc2V0IHRvIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignX19wYWNrYWdlX18gbm90IHNldCB0byBhIHN0cmluZycpCiAgICAgICAgIGVsaWYgcGFja2FnZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAoIlBhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAiCi0gICAgICAgICAgICAgICAgICAgImltcG9ydCIpCisgICAgICAgICAgICBtc2cgPSAoJ1BhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAnCisgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCcpCiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvcihtc2cuZm9ybWF0KHBhY2thZ2UpKQogICAgIGlmIG5vdCBuYW1lIGFuZCBsZXZlbCA9PSAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFbXB0eSBtb2R1bGUgbmFtZSIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IG1vZHVsZSBuYW1lJykKIAogCi1fRVJSX01TRyA9ICdObyBtb2R1bGUgbmFtZWQgeyFyfScKK19FUlJfTVNHX1BSRUZJWCA9ICdObyBtb2R1bGUgbmFtZWQgJworX0VSUl9NU0cgPSBfRVJSX01TR19QUkVGSVggKyAneyFyfScKIAogZGVmIF9maW5kX2FuZF9sb2FkX3VubG9ja2VkKG5hbWUsIGltcG9ydF8pOgogICAgIHBhdGggPSBOb25lCkBAIC0xNTEzLDU4ICsyMTMyLDI4IEBACiAgICAgICAgICMgQ3Jhenkgc2lkZS1lZmZlY3RzIQogICAgICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCi0gICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYXRoID0gcGFyZW50X21vZHVsZS5fX3BhdGhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBtc2cgPSAoX0VSUl9NU0cgKyAnOyB7fSBpcyBub3QgYSBwYWNrYWdlJykuZm9ybWF0KG5hbWUsIHBhcmVudCkKKyAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHshcn0gaXMgbm90IGEgcGFja2FnZScpLmZvcm1hdChuYW1lLCBwYXJlbnQpCiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKLSAgICBsb2FkZXIgPSBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCi0gICAgICAgICMgVE9ETyhicmV0dCk6IHN3aXRjaCB0byBhIHByb3BlciBNb2R1bGVOb3RGb3VuZCBleGNlcHRpb24gaW4gUHl0aG9uCi0gICAgICAgICMgMy40LgotICAgICAgICBleGMuX25vdF9mb3VuZCA9IFRydWUKLSAgICAgICAgcmFpc2UgZXhjCi0gICAgZWxpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9JywgbmFtZSwgbG9hZGVyKQotICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgc3BlYyA9IF9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IF9TcGVjTWV0aG9kcyhzcGVjKS5fbG9hZF91bmxvY2tlZCgpCiAgICAgaWYgcGFyZW50OgogICAgICAgICAjIFNldCB0aGUgbW9kdWxlIGFzIGFuIGF0dHJpYnV0ZSBvbiBpdHMgcGFyZW50LgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICBzZXRhdHRyKHBhcmVudF9tb2R1bGUsIG5hbWUucnBhcnRpdGlvbignLicpWzJdLCBtb2R1bGUpCi0gICAgIyBTZXQgX19wYWNrYWdlX18gaWYgdGhlIGxvYWRlciBkaWQgbm90LgotICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgIyBTZXQgbG9hZGVyIGlmIG5lZWQgYmUuCi0gICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKIGRlZiBfZmluZF9hbmRfbG9hZChuYW1lLCBpbXBvcnRfKToKICAgICAiIiJGaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUsIGFuZCByZWxlYXNlIHRoZSBpbXBvcnQgbG9jay4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGxvY2sgPSBfZ2V0X21vZHVsZV9sb2NrKG5hbWUpCi0gICAgZmluYWxseToKLSAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQotICAgIGxvY2suYWNxdWlyZSgpCi0gICAgdHJ5OgorICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgogICAgICAgICByZXR1cm4gX2ZpbmRfYW5kX2xvYWRfdW5sb2NrZWQobmFtZSwgaW1wb3J0XykKLSAgICBmaW5hbGx5OgotICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAKIGRlZiBfZ2NkX2ltcG9ydChuYW1lLCBwYWNrYWdlPU5vbmUsIGxldmVsPTApOgpAQCAtMTU4NSw4ICsyMTc0LDggQEAKICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQogICAgIGlmIG1vZHVsZSBpcyBOb25lOgogICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIG1lc3NhZ2UgPSAoImltcG9ydCBvZiB7fSBoYWx0ZWQ7ICIKLSAgICAgICAgICAgICAgICAgICAgIk5vbmUgaW4gc3lzLm1vZHVsZXMiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgbWVzc2FnZSA9ICgnaW1wb3J0IG9mIHt9IGhhbHRlZDsgJworICAgICAgICAgICAgICAgICAgICdOb25lIGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkpCiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsIG5hbWU9bmFtZSkKICAgICBfbG9ja191bmxvY2tfbW9kdWxlKG5hbWUpCiAgICAgcmV0dXJuIG1vZHVsZQpAQCAtMTYxNiw5ICsyMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkaWN0YXRlcyB3ZSBpZ25vcmUgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgICMgaW1wb3J0cyB0cmlnZ2VyZWQgYnkgZnJvbWxpc3QgZm9yIG1vZHVsZXMgdGhhdCBkb24ndAogICAgICAgICAgICAgICAgICAgICAjIGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAjIFRPRE8oYnJldHQpOiBJbiBQeXRob24gMy40LCBoYXZlIGltcG9ydCByYWlzZQotICAgICAgICAgICAgICAgICAgICAjICAgTW9kdWxlTm90Rm91bmQgYW5kIGNhdGNoIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoZXhjLCAnX25vdF9mb3VuZCcsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RyKGV4Yykuc3RhcnRzd2l0aChfRVJSX01TR19QUkVGSVgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjLm5hbWUgPT0gZnJvbV9uYW1lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC0xNjg2LDYgKzIyNzMsMTMgQEAKICAgICAgICAgcmV0dXJuIF9oYW5kbGVfZnJvbWxpc3QobW9kdWxlLCBmcm9tbGlzdCwgX2djZF9pbXBvcnQpCiAKIAorZGVmIF9idWlsdGluX2Zyb21fbmFtZShuYW1lKToKKyAgICBzcGVjID0gQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhuYW1lKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25vIGJ1aWx0LWluIG1vZHVsZSBuYW1lZCAnICsgbmFtZSkKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgcmV0dXJuIG1ldGhvZHMuX2xvYWRfdW5sb2NrZWQoKQorCiAKIGRlZiBfc2V0dXAoc3lzX21vZHVsZSwgX2ltcF9tb2R1bGUpOgogICAgICIiIlNldHVwIGltcG9ydGxpYiBieSBpbXBvcnRpbmcgbmVlZGVkIGJ1aWx0LWluIG1vZHVsZXMgYW5kIGluamVjdGluZyB0aGVtCkBAIC0xNzA0LDI0ICsyMjk4LDMxIEBACiAgICAgZWxzZToKICAgICAgICAgQllURUNPREVfU1VGRklYRVMgPSBERUJVR19CWVRFQ09ERV9TVUZGSVhFUwogCisgICAgIyBTZXQgdXAgdGhlIHNwZWMgZm9yIGV4aXN0aW5nIGJ1aWx0aW4vZnJvemVuIG1vZHVsZXMuCiAgICAgbW9kdWxlX3R5cGUgPSB0eXBlKHN5cykKICAgICBmb3IgbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCBtb2R1bGVfdHlwZSk6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gQnVpbHRpbkltcG9ydGVyCi0gICAgICAgICAgICAgICAgZWxpZiBfaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBGcm96ZW5JbXBvcnRlcgorICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gQnVpbHRpbkltcG9ydGVyCisgICAgICAgICAgICBlbGlmIF9pbXAuaXNfZnJvemVuKG5hbWUpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IEZyb3plbkltcG9ydGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjID0gX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXIpCisgICAgICAgICAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgICAgICBtZXRob2RzLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCBidWlsdC1pbiBtb2R1bGVzIG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwLgogICAgIHNlbGZfbW9kdWxlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCiAgICAgZm9yIGJ1aWx0aW5fbmFtZSBpbiAoJ19pbycsICdfd2FybmluZ3MnLCAnYnVpbHRpbnMnLCAnbWFyc2hhbCcpOgogICAgICAgICBpZiBidWlsdGluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9uYW1lKQorICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoYnVpbHRpbl9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1tidWlsdGluX25hbWVdCiAgICAgICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsIGJ1aWx0aW5fbmFtZSwgYnVpbHRpbl9tb2R1bGUpCiAKLSAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKSwgKCdvczInLCBbJ1xcJywgJy8nXSkKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIG9zIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgorICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pCiAgICAgZm9yIGJ1aWx0aW5fb3MsIHBhdGhfc2VwYXJhdG9ycyBpbiBvc19kZXRhaWxzOgogICAgICAgICAjIEFzc3VtcHRpb24gbWFkZSBpbiBfcGF0aF9qb2luKCkKICAgICAgICAgYXNzZXJ0IGFsbChsZW4oc2VwKSA9PSAxIGZvciBzZXAgaW4gcGF0aF9zZXBhcmF0b3JzKQpAQCAtMTczMSwzMiArMjMzMiwzMyBAQAogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9vcykKLSAgICAgICAgICAgICAgICAjIFRPRE86IHJpcCBvdXQgb3MyIGNvZGUgYWZ0ZXIgMy4zIGlzIHJlbGVhc2VkIGFzIHBlciBQRVAgMTEKLSAgICAgICAgICAgICAgICBpZiBidWlsdGluX29zID09ICdvczInIGFuZCAnRU1YIEdDQycgaW4gc3lzLnZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhfc2VwID0gcGF0aF9zZXBhcmF0b3JzWzFdCisgICAgICAgICAgICAgICAgb3NfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fb3MpCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdpbXBvcnRsaWIgcmVxdWlyZXMgcG9zaXggb3IgbnQnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfb3MnLCBvc19tb2R1bGUpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsICcnLmpvaW4ocGF0aF9zZXBhcmF0b3JzKSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3RocmVhZCBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KICAgICB0cnk6Ci0gICAgICAgIHRocmVhZF9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ190aHJlYWQnKQorICAgICAgICB0aHJlYWRfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCdfdGhyZWFkJykKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICMgUHl0aG9uIHdhcyBidWlsdCB3aXRob3V0IHRocmVhZHMKICAgICAgICAgdGhyZWFkX21vZHVsZSA9IE5vbmUKLSAgICB3ZWFrcmVmX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX3dlYWtyZWYnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfdGhyZWFkJywgdGhyZWFkX21vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3dlYWtyZWYgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCisgICAgd2Vha3JlZl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ193ZWFrcmVmJykKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dlYWtyZWYnLCB3ZWFrcmVmX21vZHVsZSkKKworICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgd2lucmVnIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgogICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ250JzoKLSAgICAgICAgd2lucmVnX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnd2lucmVnJykKKyAgICAgICAgd2lucmVnX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnd2lucmVnJykKICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193aW5yZWcnLCB3aW5yZWdfbW9kdWxlKQogCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19vcycsIG9zX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3RocmVhZCcsIHRocmVhZF9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsIHNldChwYXRoX3NlcGFyYXRvcnMpKQogICAgICMgQ29uc3RhbnRzCiAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19yZWxheF9jYXNlJywgX21ha2VfcmVsYXhfY2FzZSgpKQogICAgIEVYVEVOU0lPTl9TVUZGSVhFUy5leHRlbmQoX2ltcC5leHRlbnNpb25fc3VmZml4ZXMoKSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvYWJjLnB5IGIvTGliL2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMzg3NTY3YS4uMzk5NWZmMiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL2ltcG9ydGxpYi9hYmMucHkKQEAgLTgsMTEgKzgsNiBAQAogICAgICAgICByYWlzZQogICAgIF9mcm96ZW5faW1wb3J0bGliID0gTm9uZQogaW1wb3J0IGFiYwotaW1wb3J0IGltcAotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQotaW1wb3J0IHdhcm5pbmdzCiAKIAogZGVmIF9yZWdpc3RlcihhYnN0cmFjdF9jbHMsICpjbGFzc2VzKToKQEAgLTM3LDI4ICszMiwzMSBAQAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCiAgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIG9wdGlvbmFsIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0IG9yIE5vbmUuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgTWV0YVBhdGhGaW5kZXIoRmluZGVyKToKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBmaW5kZXJzIG9uIHN5cy5tZXRhX3BhdGguIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgICAjIFhYWCBEZXByZWNhdGUKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHNob3VsZCBmaW5kIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBwYXRoIGlzIGEgc3RyIG9yIE5vbmUuCi0gICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0LgorICAgICAgICAiIiJSZXR1cm4gYSBsb2FkZXIgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCByZXR1cm4gTm9uZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQKKyAgICAgICAgdGhlIHBhdGggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb3IgTm9uZS4KKwogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAiIiJBbiBvcHRpb25hbCBtZXRob2QgZm9yIGNsZWFyaW5nIHRoZSBmaW5kZXIncyBjYWNoZSwgaWYgYW55LgogICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihNZXRhUGF0aEZpbmRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgIG1hY2hpbmVyeS5QYXRoRmluZGVyLCBtYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyKQpAQCAtNjgsMjMgKzY2LDMxIEBACiAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBwYXRoIGVudHJ5IGZpbmRlcnMgdXNlZCBieSBQYXRoRmluZGVyLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCwgd2hlbiBpbXBsZW1lbnRlZCwgcmV0dXJucyBhIG1vZHVsZSBsb2FkZXIuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSAyLXR1cGxlIG9mIChMb2FkZXIsIHBvcnRpb24pIHdoZXJlCi0gICAgICAgIHBvcnRpb24gaXMgYSBzZXF1ZW5jZSBvZiBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgY29udHJpYnV0aW5nIHRvIHBhcnQgb2YKLSAgICAgICAgYSBuYW1lc3BhY2UgcGFja2FnZS4gIFRoZSBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkgYW5kIHRoZSBsb2FkZXIgbWF5IGJlCi0gICAgICAgIE5vbmUuCi0gICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAKKyAgICAjIFhYWCBEZXByZWNhdGUuCisgICAgZGVmIGZpbmRfbG9hZGVyKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIChsb2FkZXIsIG5hbWVzcGFjZSBwb3J0aW9uKSBmb3IgdGhlIHBhdGggZW50cnkuCisKKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgVGhlIG5hbWVzcGFjZSBwb3J0aW9uIGlzIGEgc2VxdWVuY2Ugb2YKKyAgICAgICAgcGF0aCBlbnRyaWVzIGNvbnRyaWJ1dGluZyB0byBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuIFRoZQorICAgICAgICBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkuICBJZiBsb2FkZXIgaXMgbm90IE5vbmUsIHRoZSBwb3J0aW9uIHdpbGwKKyAgICAgICAgYmUgaWdub3JlZC4KKworICAgICAgICBUaGUgcG9ydGlvbiB3aWxsIGJlIGRpc2NhcmRlZCBpZiBhbm90aGVyIHBhdGggZW50cnkgZmluZGVyCisgICAgICAgIGxvY2F0ZXMgdGhlIG1vZHVsZSBhcyBhIG5vcm1hbCBtb2R1bGUgb3IgcGFja2FnZS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIE5vbmUsIFtdCisKKyAgICAjIFhYWCBEZXByZWNhdGUuCiAgICAgZmluZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9maW5kX21vZHVsZV9zaGltCiAKICAgICBkZWYgaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICIiIkFuIG9wdGlvbmFsIG1ldGhvZCBmb3IgY2xlYXJpbmcgdGhlIGZpbmRlcidzIGNhY2hlLCBpZiBhbnkuCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgUGF0aEZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKIF9yZWdpc3RlcihQYXRoRW50cnlGaW5kZXIsIG1hY2hpbmVyeS5GaWxlRmluZGVyKQogCkBAIC05MywxNiArOTksNDMgQEAKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBsb2FkZXJzLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCBsb2FkIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHRvIGluaXRpYWxpemUgYW5kIGludG8gd2hpY2ggdG8gbG9hZC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIGFueXRoaW5nIHByZXZlbnRzIGl0CisgICAgICAgIGZyb20gY3JlYXRpbmcgYSBuZXcgbW9kdWxlLiAgSXQgbWF5IHJldHVybiBOb25lIHRvIGluZGljYXRlCisgICAgICAgIHRoYXQgdGhlIHNwZWMgc2hvdWxkIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZS4KKworICAgICAgICBjcmVhdGVfbW9kdWxlKCkgaXMgb3B0aW9uYWwuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgZGVmZXIgdG8gX1NwZWNNZXRob2RzLmNyZWF0ZSgpIGZvciB0aGUgbmV3IG1vZHVsZS4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgV2UgZG9uJ3QgZGVmaW5lIGV4ZWNfbW9kdWxlKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgICAjIFhYWCBEZXByZWNhdGUuCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBsb2FkZWQgbW9kdWxlLgorCisgICAgICAgIFRoZSBtb2R1bGUgbXVzdCBiZSBhZGRlZCB0byBzeXMubW9kdWxlcyBhbmQgaGF2ZSBpbXBvcnQtcmVsYXRlZAorICAgICAgICBhdHRyaWJ1dGVzIHNldCBwcm9wZXJseS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4KKworICAgICAgICBJbXBvcnRFcnJvciBpcyByYWlzZWQgb24gZmFpbHVyZS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgICMgWFhYIERlcHJlY2F0ZS4KICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwci4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlJ3MgcmVwci4KKworICAgICAgICBVc2VkIGJ5IHRoZSBtb2R1bGUgdHlwZSB3aGVuIHRoZSBtZXRob2QgZG9lcyBub3QgcmFpc2UKKyAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgZXhjZXB0aW9uIHdpbGwgY2F1c2UgTW9kdWxlVHlwZS5fX3JlcHJfXyB0byBpZ25vcmUgdGhpcyBtZXRob2QuCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCkBAIC0xMTksNyArMTUyLDcgQEAKICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGJ5dGVzIGZvcgogICAgICAgICB0aGUgc3BlY2lmaWVkIHBhdGguICBUaGUgcGF0aCBtdXN0IGJlIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogCiBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CkBAIC0xMzEsMjYgKzE2NCw0NyBAQAogCiAgICAgIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCi0gICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHdoZXRoZXIgdGhlCisgICAgICAgIG1vZHVsZSBpcyBhIHBhY2thZ2UuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgYm9vbC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKwogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgIGZvciB0aGUgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHR5cGVzLkNvZGVUeXBlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICIiIk1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBjb2RlIG9iamVjdCBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgdHlwZXMuQ29kZVR5cGUgaWYgcG9zc2libGUsIGVsc2UKKyAgICAgICAgcmV0dXJucyBOb25lIGlmIGEgY29kZSBvYmplY3QgZG9lcyBub3QgbWFrZSBzZW5zZQorICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUKKyAgICAgICAgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUKLSAgICAgICAgbW9kdWxlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIHN0ci4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLgogCi1fcmVnaXN0ZXIoSW5zcGVjdExvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aD0nPHN0cmluZz4nKToKKyAgICAgICAgIiIiQ29tcGlsZSAnZGF0YScgaW50byBhIGNvZGUgb2JqZWN0LgorCisgICAgICAgIFRoZSAnZGF0YScgYXJndW1lbnQgY2FuIGJlIGFueXRoaW5nIHRoYXQgY29tcGlsZSgpIGNhbiBoYW5kbGUuIFRoZSdwYXRoJworICAgICAgICBhcmd1bWVudCBzaG91bGQgYmUgd2hlcmUgdGhlIGRhdGEgd2FzIHJldHJpZXZlZCAod2hlbiBhcHBsaWNhYmxlKS4iIiIKKyAgICAgICAgcmV0dXJuIGNvbXBpbGUoZGF0YSwgcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKKworICAgIGV4ZWNfbW9kdWxlID0gX2Jvb3RzdHJhcC5fTG9hZGVyQmFzaWNzLmV4ZWNfbW9kdWxlCisgICAgbG9hZF9tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MubG9hZF9tb2R1bGUKKworX3JlZ2lzdGVyKEluc3BlY3RMb2FkZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikKIAogCiBjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5zcGVjdExvYWRlcik6CkBAIC0xNjUsOCArMjE5LDI5IEBACiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdGhhdCBfX2ZpbGVfXyBpcyB0byBiZQotICAgICAgICBzZXQgdG8uIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2V0IHRvLgorCisgICAgICAgIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJNZXRob2QgdG8gcmV0dXJuIHRoZSBjb2RlIG9iamVjdCBmb3IgZnVsbG5hbWUuCisKKyAgICAgICAgU2hvdWxkIHJldHVybiBOb25lIGlmIG5vdCBhcHBsaWNhYmxlIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuCisgICAgICAgIFJhaXNlIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgc291cmNlID0gc2VsZi5nZXRfc291cmNlKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlLCBwYXRoKQorCitfcmVnaXN0ZXIoRXhlY3V0aW9uTG9hZGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogCiBjbGFzcyBGaWxlTG9hZGVyKF9ib290c3RyYXAuRmlsZUxvYWRlciwgUmVzb3VyY2VMb2FkZXIsIEV4ZWN1dGlvbkxvYWRlcik6CkBAIC0xOTgsNyArMjczLDcgQEAKICAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSAoaW50KSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHBhdGggKHN0cikuIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9zdGF0cy5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9zdGF0czoKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIGludChzZWxmLnBhdGhfc3RhdHMocGF0aClbJ210aW1lJ10pCiAKICAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKQEAgLTIwOSw3ICsyODQsNyBAQAogICAgICAgICAtICdzaXplJyAob3B0aW9uYWwpIGlzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYucGF0aF9tdGltZS5fX2Z1bmNfXyBpcyBTb3VyY2VMb2FkZXIucGF0aF9tdGltZToKLSAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CkBAIC0yMjAsMTg1ICsyOTUsNiBAQAogICAgICAgICBBbnkgbmVlZGVkIGludGVybWVkaWFyeSBkaXJlY3RvcmllcyBhcmUgdG8gYmUgY3JlYXRlZC4gSWYgZm9yIHNvbWUKICAgICAgICAgcmVhc29uIHRoZSBmaWxlIGNhbm5vdCBiZSB3cml0dGVuIGJlY2F1c2Ugb2YgcGVybWlzc2lvbnMsIGZhaWwKICAgICAgICAgc2lsZW50bHkuCi0KICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogX3JlZ2lzdGVyKFNvdXJjZUxvYWRlciwgbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCi0KLWNsYXNzIFB5TG9hZGVyKFNvdXJjZUxvYWRlcik6Ci0KLSAgICAiIiJJbXBsZW1lbnQgdGhlIGRlcHJlY2F0ZWQgUHlMb2FkZXIgQUJDIGluIHRlcm1zIG9mIFNvdXJjZUxvYWRlci4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgSXQgaXMgc2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQuCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgbm90IG5lZWRlZCB0aGVuIGltcGxlbWVudCB0aGUKLSAgICBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQgb2YgdGhpcyBjbGFzcy4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzCi0gICAgbmVlZGVkLCB0aGVuIHVzZSB0aGUgZm9sbG93aW5nIGlkaW9tIHRvIGhhdmUgYSBzaW5nbGUgY2xhc3MgdGhhdCBpcwotICAgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHM6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICMgSW1wbGVtZW50IC4uLgotCi0gICAgICAgICAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICcnJ0ltcGxlbWVudCBzb3VyY2VfcGF0aCBpbiB0ZXJtcyBvZiBnZXRfZmlsZW5hbWUuJycnCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0gICAgIiIiCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBtb2R1bGUgbmFtZSBhbmQgcmV0dXJucyB0aGUgcGF0aCB0bwotICAgICAgICB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJJbXBsZW1lbnQgZ2V0X2ZpbGVuYW1lIGluIHRlcm1zIG9mIHNvdXJjZV9wYXRoLgotCi0gICAgICAgIEFzIGdldF9maWxlbmFtZSBzaG91bGQgb25seSByZXR1cm4gYSBzb3VyY2UgZmlsZSBwYXRoIHRoZXJlIGlzIG5vCi0gICAgICAgIGNoYW5jZSBvZiB0aGUgcGF0aCBub3QgZXhpc3RpbmcgYnV0IGxvYWRpbmcgc3RpbGwgYmVpbmcgcG9zc2libGUsIHNvCi0gICAgICAgIEltcG9ydEVycm9yIHNob3VsZCBwcm9wYWdhdGUgaW5zdGVhZCBvZiBiZWluZyB0dXJuZWQgaW50byByZXR1cm5pbmcKLSAgICAgICAgTm9uZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeUxvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40OyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgdGhlIGltcG9ydGxpYiBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBhdGlibGUgd2l0aCBQeXRob24gMy4xIG9ud2FyZHMuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotCi0KLWNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyKToKLQotICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gYXNzaXN0IGluIGxvYWRpbmcgc291cmNlIGFuZCBieXRlY29kZSBieQotICAgIHJlcXVpcmluZyBvbmx5IGJhY2stZW5kIHN0b3JhZ2UgbWV0aG9kcyB0byBiZSBpbXBsZW1lbnRlZC4KLQotICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgUmVtb3ZhbCBpcyBzbGF0ZWQgZm9yIFB5dGhvbiAzLjQuIEltcGxlbWVudAotICAgIHRoZSBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQuIElmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHNlZQotICAgIFB5TG9hZGVyLgotCi0gICAgVGhlIG1ldGhvZHMgZ2V0X2NvZGUsIGdldF9zb3VyY2UsIGFuZCBsb2FkX21vZHVsZSBhcmUgaW1wbGVtZW50ZWQgZm9yIHRoZQotICAgIHVzZXIuCi0KLSAgICAiIiIKLQotICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHNvdXJjZSBvciBieXRlY29kZSBmaWxlIHBhdGguIiIiCi0gICAgICAgIHBhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgcGF0aCBhdmFpbGFibGUgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezAhcn0iLmZvcm1hdChmdWxsbmFtZSksIG5hbWU9ZnVsbG5hbWUpCi0KLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJHZXQgYSBjb2RlIG9iamVjdCBmcm9tIHNvdXJjZSBvciBieXRlY29kZS4iIiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBzbGF0ZWQgZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBpbiBQeXRob24gMy40OyB1c2UgU291cmNlTG9hZGVyIGluc3RlYWQuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBzZWUgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXN0IGRvY3VtZW50YXRpb24gZm9yIFB5TG9hZGVyLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBzZWxmLnNvdXJjZV9tdGltZShmdWxsbmFtZSkKLSAgICAgICAgIyBUcnkgdG8gdXNlIGJ5dGVjb2RlIGlmIGl0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWFnaWMgPSBkYXRhWzo0XQotICAgICAgICAgICAgICAgIGlmIGxlbihtYWdpYykgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbWFnaWMgbnVtYmVyIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgICAgICAgICBpZiBsZW4ocmF3X3RpbWVzdGFtcCkgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiYmFkIHRpbWVzdGFtcCBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICBweWNfdGltZXN0YW1wID0gX2Jvb3RzdHJhcC5fcl9sb25nKHJhd190aW1lc3RhbXApCi0gICAgICAgICAgICAgICAgcmF3X3NvdXJjZV9zaXplID0gZGF0YVs4OjEyXQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfc291cmNlX3NpemUpICE9IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgZmlsZSBzaXplIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgICMgU291cmNlIHNpemUgaXMgdW51c2VkIGFzIHRoZSBBQkMgZG9lcyBub3QgcHJvdmlkZSBhIHdheSB0bwotICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzaXplIG9mIHRoZSBzb3VyY2UgYWhlYWQgb2YgcmVhZGluZyBpdC4KLSAgICAgICAgICAgICAgICBieXRlY29kZSA9IGRhdGFbMTI6XQotICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIG1hZ2ljIG51bWJlciBpcyB2YWxpZC4KLSAgICAgICAgICAgICAgICBpZiBpbXAuZ2V0X21hZ2ljKCkgIT0gbWFnaWM6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgYnl0ZWNvZGUgaXMgbm90IHN0YWxlIChvbmx5IG1hdHRlcnMgd2hlbgotICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgc291cmNlIHRvIGZhbGwgYmFjayBvbi4KLSAgICAgICAgICAgICAgICBpZiBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICBpZiBweWNfdGltZXN0YW1wIDwgc291cmNlX3RpbWVzdGFtcDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJieXRlY29kZSBpcyBzdGFsZSIsIG5hbWU9ZnVsbG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgIyBJZiBzb3VyY2UgaXMgYXZhaWxhYmxlIGdpdmUgaXQgYSBzaG90LgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEJ5dGVjb2RlIHNlZW1zIGZpbmUsIHNvIHRyeSB0byB1c2UgaXQuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWwubG9hZHMoYnl0ZWNvZGUpCi0gICAgICAgIGVsaWYgc291cmNlX3RpbWVzdGFtcCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBhdmFpbGFibGUgdG8gY3JlYXRlIGNvZGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBmb3IgezAhcn0iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQotICAgICAgICAjIFVzZSB0aGUgc291cmNlLgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHNvdXJjZV9wYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICBtZXNzYWdlID0gImEgc291cmNlIHBhdGggbXVzdCBleGlzdCB0byBsb2FkIHswfSIuZm9ybWF0KGZ1bGxuYW1lKQotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSkKLSAgICAgICAgc291cmNlID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNvdXJjZSwgc291cmNlX3BhdGgsICdleGVjJywgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgICMgR2VuZXJhdGUgYnl0ZWNvZGUgYW5kIHdyaXRlIGl0IG91dC4KLSAgICAgICAgaWYgbm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlOgotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcoc291cmNlX3RpbWVzdGFtcCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChfYm9vdHN0cmFwLl93X2xvbmcobGVuKHNvdXJjZSkgJiAweEZGRkZGRkZGKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgZGF0YSkKLSAgICAgICAgcmV0dXJuIGNvZGVfb2JqZWN0Ci0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHNvdXJjZV9tdGltZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgcmV0dXJucyBhbiBpbnQKLSAgICAgICAgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2Ugb2YgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIHRoZSBzdHIgcGF0aG5hbWUKLSAgICAgICAgdG8gdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIHdyaXRlX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZC4gIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIGJ5dGVzIG9iamVjdAotICAgICAgICByZXByZXNlbnRpbmcgdGhlIGJ5dGVjb2RlIGZvciB0aGUgbW9kdWxlLiAgUmV0dXJucyBhIGJvb2xlYW4KLSAgICAgICAgcmVwcmVzZW50aW5nIHdoZXRoZXIgdGhlIGJ5dGVjb2RlIHdhcyB3cml0dGVuIG9yIG5vdC4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9tYWNoaW5lcnkucHkgYi9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQppbmRleCBmZjgyNmU0Li4yZTFiMmQ3IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQorKysgYi9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weQpAQCAtNSw2ICs1LDcgQEAKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IChTT1VSQ0VfU1VGRklYRVMsIERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTLAogICAgICAgICAgICAgICAgICAgICAgICAgIE9QVElNSVpFRF9CWVRFQ09ERV9TVUZGSVhFUywgQllURUNPREVfU1VGRklYRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgRVhURU5TSU9OX1NVRkZJWEVTKQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTW9kdWxlU3BlYwogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgQnVpbHRpbkltcG9ydGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBGcm96ZW5JbXBvcnRlcgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgV2luZG93c1JlZ2lzdHJ5RmluZGVyCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKaW5kZXggMTMxNjQzNy4uMDRiMTk1MSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi91dGlsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSwxMCArMSwxOCBAQAogIiIiVXRpbGl0eSBjb2RlIGZvciBjb25zdHJ1Y3RpbmcgaW1wb3J0ZXJzLCBldGMuIiIiCiAKLWZyb20gLl9ib290c3RyYXAgaW1wb3J0IG1vZHVsZV9mb3JfbG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzZXRfbG9hZGVyCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzZXRfcGFja2FnZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgTUFHSUNfTlVNQkVSCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgZGVjb2RlX3NvdXJjZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNwZWNfZnJvbV9sb2FkZXIKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfcmVzb2x2ZV9uYW1lCiAKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCiAKIGRlZiByZXNvbHZlX25hbWUobmFtZSwgcGFja2FnZSk6CiAgICAgIiIiUmVzb2x2ZSBhIHJlbGF0aXZlIG1vZHVsZSBuYW1lIHRvIGFuIGFic29sdXRlIG9uZS4iIiIKQEAgLTE5LDMgKzI3LDk0IEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBsZXZlbCArPSAxCiAgICAgcmV0dXJuIF9yZXNvbHZlX25hbWUobmFtZVtsZXZlbDpdLCBwYWNrYWdlLCBsZXZlbCkKKworCitAY29udGV4dG1hbmFnZXIKK2RlZiBfbW9kdWxlX3RvX2xvYWQobmFtZSk6CisgICAgaXNfcmVsb2FkID0gbmFtZSBpbiBzeXMubW9kdWxlcworCisgICAgbW9kdWxlID0gc3lzLm1vZHVsZXMuZ2V0KG5hbWUpCisgICAgaWYgbm90IGlzX3JlbG9hZDoKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGNhbGxlZCBhcyB0aGUgJ2lvJyBtb2R1bGUKKyAgICAgICAgIyBpbXBsaWNpdGx5IGltcG9ydHMgJ2xvY2FsZScgYW5kIHdvdWxkIG90aGVyd2lzZSB0cmlnZ2VyIGFuCisgICAgICAgICMgaW5maW5pdGUgbG9vcC4KKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKG5hbWUpCisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcworICAgICAgICAjIChvdGhlcndpc2UgYW4gb3B0aW1pemF0aW9uIHNob3J0Y3V0IGluIGltcG9ydC5jIGJlY29tZXMgd3JvbmcpCisgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gVHJ1ZQorICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgIHRyeToKKyAgICAgICAgeWllbGQgbW9kdWxlCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBGYWxzZQorCisKKyMgWFhYIGRlcHJlY2F0ZQorZGVmIHNldF9wYWNrYWdlKGZ4bik6CisgICAgIiIiU2V0IF9fcGFja2FnZV9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIHNldF9wYWNrYWdlX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgbW9kdWxlID0gZnhuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgcmV0dXJuIHNldF9wYWNrYWdlX3dyYXBwZXIKKworCisjIFhYWCBkZXByZWNhdGUKK2RlZiBzZXRfbG9hZGVyKGZ4bik6CisgICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4iIiIKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgc2V0X2xvYWRlcl93cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIHJldHVybiBzZXRfbG9hZGVyX3dyYXBwZXIKKworCitkZWYgbW9kdWxlX2Zvcl9sb2FkZXIoZnhuKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyIG1vZHVsZSBmb3IgbG9hZGVycy4KKworICAgIFRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb2R1bGUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG1vZHVsZQorICAgIG5hbWUuIFRoZSBtb2R1bGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgZnJvbSBzeXMubW9kdWxlcyBpZgorICAgIGl0IGFscmVhZHkgZXhpc3RzIG9yIGlzIGEgbmV3IG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBpcyBuZXcsIHRoZW4gX19uYW1lX18KKyAgICBpcyBzZXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QsIF9fbG9hZGVyX18gaXMgc2V0IHRvIHNlbGYsIGFuZAorICAgIF9fcGFja2FnZV9fIGlzIHNldCBhY2NvcmRpbmdseSAoaWYgc2VsZi5pc19wYWNrYWdlKCkgaXMgZGVmaW5lZCkgd2lsbCBiZSBzZXQKKyAgICBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gKGlmIHNlbGYuaXNfcGFja2FnZSgpIGRvZXMKKyAgICBub3Qgd29yayBmb3IgdGhlIG1vZHVsZSBpdCB3aWxsIGJlIHNldCBwb3N0LWxvYWQpLgorCisgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIGRlY29yYXRvciBjcmVhdGVkIHRoZSBtb2R1bGUgaXQgaXMKKyAgICBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgorCisgICAgVGhlIGRlY29yYXRvciBhc3N1bWVzIHRoYXQgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiB0YWtlcyB0aGUgbW9kdWxlIG5hbWUgYXMKKyAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LgorCisgICAgIiIiCisgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgQGZ1bmN0b29scy53cmFwcyhmeG4pCisgICAgZGVmIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIoc2VsZiwgZnVsbG5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggX21vZHVsZV90b19sb2FkKGZ1bGxuYW1lKSBhcyBtb2R1bGU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gZnVsbG5hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgICAgICMgSWYgX19wYWNrYWdlX18gd2FzIG5vdCBzZXQgYWJvdmUsIF9faW1wb3J0X18oKSB3aWxsIGRvIGl0IGxhdGVyLgorICAgICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBtb2R1bGUsICphcmdzLCAqKmt3YXJncykKKworICAgIHJldHVybiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvaW5zcGVjdC5weSBiL0xpYi9pbnNwZWN0LnB5CmluZGV4IDkzMzdiZDUuLmRjOTRlNDQgMTAwNjQ0Ci0tLSBhL0xpYi9pbnNwZWN0LnB5CisrKyBiL0xpYi9pbnNwZWN0LnB5CkBAIC0zMSw3ICszMSw3IEBACiBfX2F1dGhvcl9fID0gKCdLYS1QaW5nIFllZSA8cGluZ0BsZncub3JnPicsCiAgICAgICAgICAgICAgICdZdXJ5IFNlbGl2YW5vdiA8eXNlbGl2YW5vdkBzcHJ5bWl4LmNvbT4nKQogCi1pbXBvcnQgaW1wCitpbXBvcnQgYXN0CiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IGxpbmVjYWNoZQpAQCAtMjY4LDIxICsyNjgsNDAgQEAKICAgICBlbHNlOgogICAgICAgICBtcm8gPSAoKQogICAgIHJlc3VsdHMgPSBbXQotICAgIGZvciBrZXkgaW4gZGlyKG9iamVjdCk6Ci0gICAgICAgICMgRmlyc3QgdHJ5IHRvIGdldCB0aGUgdmFsdWUgdmlhIF9fZGljdF9fLiBTb21lIGRlc2NyaXB0b3JzIGRvbid0Ci0gICAgICAgICMgbGlrZSBjYWxsaW5nIHRoZWlyIF9fZ2V0X18gKHNlZSBidWcgIzE3ODUpLgotICAgICAgICBmb3IgYmFzZSBpbiBtcm86Ci0gICAgICAgICAgICBpZiBrZXkgaW4gYmFzZS5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGJhc2UuX19kaWN0X19ba2V5XQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iamVjdCwga2V5KQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIHByb2Nlc3NlZCA9IHNldCgpCisgICAgbmFtZXMgPSBkaXIob2JqZWN0KQorICAgICMgOmRkIGFueSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIHRvIHRoZSBsaXN0IG9mIG5hbWVzIGlmIG9iamVjdCBpcyBhIGNsYXNzOworICAgICMgdGhpcyBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZSBlbnRyaWVzIGlmLCBmb3IgZXhhbXBsZSwgYSB2aXJ0dWFsCisgICAgIyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgRHluYW1pY0NsYXNzQXR0cmlidXRlIGV4aXN0cworICAgIHRyeToKKyAgICAgICAgZm9yIGJhc2UgaW4gb2JqZWN0Ll9fYmFzZXNfXzoKKyAgICAgICAgICAgIGZvciBrLCB2IGluIGJhc2UuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChrKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGZvciBrZXkgaW4gbmFtZXM6CisgICAgICAgICMgRmlyc3QgdHJ5IHRvIGdldCB0aGUgdmFsdWUgdmlhIGdldGF0dHIuICBTb21lIGRlc2NyaXB0b3JzIGRvbid0CisgICAgICAgICMgbGlrZSBjYWxsaW5nIHRoZWlyIF9fZ2V0X18gKHNlZSBidWcgIzE3ODUpLCBzbyBmYWxsIGJhY2sgdG8KKyAgICAgICAgIyBsb29raW5nIGluIHRoZSBfX2RpY3RfXy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBnZXRhdHRyKG9iamVjdCwga2V5KQorICAgICAgICAgICAgIyBoYW5kbGUgdGhlIGR1cGxpY2F0ZSBrZXkKKyAgICAgICAgICAgIGlmIGtleSBpbiBwcm9jZXNzZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgZm9yIGJhc2UgaW4gbXJvOgorICAgICAgICAgICAgICAgIGlmIGtleSBpbiBiYXNlLl9fZGljdF9fOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJhc2UuX19kaWN0X19ba2V5XQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGNvdWxkIGJlIGEgKGN1cnJlbnRseSkgbWlzc2luZyBzbG90IG1lbWJlciwgb3IgYSBidWdneQorICAgICAgICAgICAgICAgICMgX19kaXJfXzsgZGlzY2FyZCBhbmQgbW92ZSBvbgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIG5vdCBwcmVkaWNhdGUgb3IgcHJlZGljYXRlKHZhbHVlKToKICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChrZXksIHZhbHVlKSkKLSAgICByZXN1bHRzLnNvcnQoKQorICAgICAgICBwcm9jZXNzZWQuYWRkKGtleSkKKyAgICByZXN1bHRzLnNvcnQoa2V5PWxhbWJkYSBwYWlyOiBwYWlyWzBdKQogICAgIHJldHVybiByZXN1bHRzCiAKIEF0dHJpYnV0ZSA9IG5hbWVkdHVwbGUoJ0F0dHJpYnV0ZScsICduYW1lIGtpbmQgZGVmaW5pbmdfY2xhc3Mgb2JqZWN0JykKQEAgLTI5OSw2MCArMzE4LDEwNiBAQAogICAgICAgICAgICAgICAgJ2NsYXNzIG1ldGhvZCcgICAgY3JlYXRlZCB2aWEgY2xhc3NtZXRob2QoKQogICAgICAgICAgICAgICAgJ3N0YXRpYyBtZXRob2QnICAgY3JlYXRlZCB2aWEgc3RhdGljbWV0aG9kKCkKICAgICAgICAgICAgICAgICdwcm9wZXJ0eScgICAgICAgIGNyZWF0ZWQgdmlhIHByb3BlcnR5KCkKLSAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgIGFueSBvdGhlciBmbGF2b3Igb2YgbWV0aG9kCisgICAgICAgICAgICAgICAnbWV0aG9kJyAgICAgICAgICBhbnkgb3RoZXIgZmxhdm9yIG9mIG1ldGhvZCBvciBkZXNjcmlwdG9yCiAgICAgICAgICAgICAgICAnZGF0YScgICAgICAgICAgICBub3QgYSBtZXRob2QKIAogICAgICAgICAyLiBUaGUgY2xhc3Mgd2hpY2ggZGVmaW5lZCB0aGlzIGF0dHJpYnV0ZSAoYSBjbGFzcykuCiAKLSAgICAgICAgMy4gVGhlIG9iamVjdCBhcyBvYnRhaW5lZCBkaXJlY3RseSBmcm9tIHRoZSBkZWZpbmluZyBjbGFzcydzCi0gICAgICAgICAgIF9fZGljdF9fLCBub3QgdmlhIGdldGF0dHIuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvcgotICAgICAgICAgICBkYXRhIGF0dHJpYnV0ZXM6ICBDLmRhdGEgaXMganVzdCBhIGRhdGEgb2JqZWN0LCBidXQKLSAgICAgICAgICAgQy5fX2RpY3RfX1snZGF0YSddIG1heSBiZSBhIGRhdGEgZGVzY3JpcHRvciB3aXRoIGFkZGl0aW9uYWwKLSAgICAgICAgICAgaW5mbywgbGlrZSBhIF9fZG9jX18gc3RyaW5nLgorICAgICAgICAzLiBUaGUgb2JqZWN0IGFzIG9idGFpbmVkIGJ5IGNhbGxpbmcgZ2V0YXR0cjsgaWYgdGhpcyBmYWlscywgb3IgaWYgdGhlCisgICAgICAgICAgIHJlc3VsdGluZyBvYmplY3QgZG9lcyBub3QgbGl2ZSBhbnl3aGVyZSBpbiB0aGUgY2xhc3MnIG1ybyAoaW5jbHVkaW5nCisgICAgICAgICAgIG1ldGFjbGFzc2VzKSB0aGVuIHRoZSBvYmplY3QgaXMgbG9va2VkIHVwIGluIHRoZSBkZWZpbmluZyBjbGFzcydzCisgICAgICAgICAgIGRpY3QgKGZvdW5kIGJ5IHdhbGtpbmcgdGhlIG1ybykuCisKKyAgICBJZiBvbmUgb2YgdGhlIGl0ZW1zIGluIGRpcihjbHMpIGlzIHN0b3JlZCBpbiB0aGUgbWV0YWNsYXNzIGl0IHdpbGwgbm93CisgICAgYmUgZGlzY292ZXJlZCBhbmQgbm90IGhhdmUgTm9uZSBiZSBsaXN0ZWQgYXMgdGhlIGNsYXNzIGluIHdoaWNoIGl0IHdhcworICAgIGRlZmluZWQuICBBbnkgaXRlbXMgd2hvc2UgaG9tZSBjbGFzcyBjYW5ub3QgYmUgZGlzY292ZXJlZCBhcmUgc2tpcHBlZC4KICAgICAiIiIKIAogICAgIG1ybyA9IGdldG1ybyhjbHMpCisgICAgbWV0YW1ybyA9IGdldG1ybyh0eXBlKGNscykpICMgZm9yIGF0dHJpYnV0ZXMgc3RvcmVkIGluIHRoZSBtZXRhY2xhc3MKKyAgICBtZXRhbXJvID0gdHVwbGUoW2NscyBmb3IgY2xzIGluIG1ldGFtcm8gaWYgY2xzIG5vdCBpbiAodHlwZSwgb2JqZWN0KV0pCisgICAgY2xhc3NfYmFzZXMgPSAoY2xzLCkgKyBtcm8KKyAgICBhbGxfYmFzZXMgPSBjbGFzc19iYXNlcyArIG1ldGFtcm8KICAgICBuYW1lcyA9IGRpcihjbHMpCisgICAgIyA6ZGQgYW55IER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgdG8gdGhlIGxpc3Qgb2YgbmFtZXM7CisgICAgIyB0aGlzIG1heSByZXN1bHQgaW4gZHVwbGljYXRlIGVudHJpZXMgaWYsIGZvciBleGFtcGxlLCBhIHZpcnR1YWwKKyAgICAjIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZXhpc3RzLgorICAgIGZvciBiYXNlIGluIG1ybzoKKyAgICAgICAgZm9yIGssIHYgaW4gYmFzZS5fX2RpY3RfXy5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIG5hbWVzLmFwcGVuZChrKQogICAgIHJlc3VsdCA9IFtdCisgICAgcHJvY2Vzc2VkID0gc2V0KCkKKwogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICAjIEdldCB0aGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbmFtZSwgYW5kIHdoZXJlIGl0IHdhcyBkZWZpbmVkLgorICAgICAgICAjIE5vcm1hbCBvYmplY3RzIHdpbGwgYmUgbG9va2VkIHVwIHdpdGggYm90aCBnZXRhdHRyIGFuZCBkaXJlY3RseSBpbgorICAgICAgICAjIGl0cyBjbGFzcycgZGljdCAoaW4gY2FzZSBnZXRhdHRyIGZhaWxzIFtidWcgIzE3ODVdLCBhbmQgYWxzbyB0byBsb29rCisgICAgICAgICMgZm9yIGEgZG9jc3RyaW5nKS4KKyAgICAgICAgIyBGb3IgRHluYW1pY0NsYXNzQXR0cmlidXRlcyBvbiB0aGUgc2Vjb25kIHBhc3Mgd2Ugb25seSBsb29rIGluIHRoZQorICAgICAgICAjIGNsYXNzJ3MgZGljdC4KKyAgICAgICAgIwogICAgICAgICAjIEdldHRpbmcgYW4gb2JqIGZyb20gdGhlIF9fZGljdF9fIHNvbWV0aW1lcyByZXZlYWxzIG1vcmUgdGhhbgogICAgICAgICAjIHVzaW5nIGdldGF0dHIuICBTdGF0aWMgYW5kIGNsYXNzIG1ldGhvZHMgYXJlIGRyYW1hdGljIGV4YW1wbGVzLgotICAgICAgICAjIEZ1cnRoZXJtb3JlLCBzb21lIG9iamVjdHMgbWF5IHJhaXNlIGFuIEV4Y2VwdGlvbiB3aGVuIGZldGNoZWQgd2l0aAotICAgICAgICAjIGdldGF0dHIoKS4gVGhpcyBpcyB0aGUgY2FzZSB3aXRoIHNvbWUgZGVzY3JpcHRvcnMgKGJ1ZyAjMTc4NSkuCi0gICAgICAgICMgVGh1cywgd2Ugb25seSB1c2UgZ2V0YXR0cigpIGFzIGEgbGFzdCByZXNvcnQuCiAgICAgICAgIGhvbWVjbHMgPSBOb25lCi0gICAgICAgIGZvciBiYXNlIGluIChjbHMsKSArIG1ybzoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gYmFzZS5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICBvYmogPSBiYXNlLl9fZGljdF9fW25hbWVdCi0gICAgICAgICAgICAgICAgaG9tZWNscyA9IGJhc2UKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihjbHMsIG5hbWUpCi0gICAgICAgICAgICBob21lY2xzID0gZ2V0YXR0cihvYmosICJfX29iamNsYXNzX18iLCBob21lY2xzKQotCi0gICAgICAgICMgQ2xhc3NpZnkgdGhlIG9iamVjdC4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHN0YXRpY21ldGhvZCk6Ci0gICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGNsYXNzbWV0aG9kKToKLSAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBwcm9wZXJ0eSk6Ci0gICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgotICAgICAgICBlbGlmIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopOgotICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCi0gICAgICAgIGVsaWYgaXNkYXRhZGVzY3JpcHRvcihvYmopOgotICAgICAgICAgICAga2luZCA9ICJkYXRhIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgb2JqX3ZpYV9nZXRhdHRyID0gZ2V0YXR0cihjbHMsIG5hbWUpCi0gICAgICAgICAgICBpZiAoaXNmdW5jdGlvbihvYmpfdmlhX2dldGF0dHIpIG9yCi0gICAgICAgICAgICAgICAgaXNtZXRob2RkZXNjcmlwdG9yKG9ial92aWFfZ2V0YXR0cikpOgotICAgICAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgorICAgICAgICBnZXRfb2JqID0gTm9uZQorICAgICAgICBkaWN0X29iaiA9IE5vbmUKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ19fZGljdF9fJzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJfX2RpY3RfXyBpcyBzcGVjaWFsLCBkb24ndCB3YW50IHRoZSBwcm94eSIpCisgICAgICAgICAgICAgICAgZ2V0X29iaiA9IGdldGF0dHIoY2xzLCBuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBraW5kID0gImRhdGEiCi0gICAgICAgICAgICBvYmogPSBvYmpfdmlhX2dldGF0dHIKLQorICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBnZXRhdHRyKGdldF9vYmosICJfX29iamNsYXNzX18iLCBob21lY2xzKQorICAgICAgICAgICAgICAgIGlmIGhvbWVjbHMgbm90IGluIGNsYXNzX2Jhc2VzOgorICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSByZXN1bHRpbmcgb2JqZWN0IGRvZXMgbm90IGxpdmUgc29tZXdoZXJlIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAjIG1ybywgZHJvcCBpdCBhbmQgc2VhcmNoIHRoZSBtcm8gbWFudWFsbHkKKyAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICMgZmlyc3QgbG9vayBpbiB0aGUgY2xhc3NlcworICAgICAgICAgICAgICAgICAgICBmb3Igc3JjaF9jbHMgaW4gY2xhc3NfYmFzZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzcmNoX29iaiA9IGdldGF0dHIoc3JjaF9jbHMsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzcmNoX29iaiA9PSBnZXRfb2JqOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gc3JjaF9jbHMKKyAgICAgICAgICAgICAgICAgICAgIyB0aGVuIGNoZWNrIHRoZSBtZXRhY2xhc3NlcworICAgICAgICAgICAgICAgICAgICBmb3Igc3JjaF9jbHMgaW4gbWV0YW1ybzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNoX29iaiA9IHNyY2hfY2xzLl9fZ2V0YXR0cl9fKGNscywgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3JjaF9vYmogPT0gZ2V0X29iajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IHNyY2hfY2xzCisgICAgICAgICAgICAgICAgICAgIGlmIGxhc3RfY2xzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IGxhc3RfY2xzCisgICAgICAgIGZvciBiYXNlIGluIGFsbF9iYXNlczoKKyAgICAgICAgICAgIGlmIG5hbWUgaW4gYmFzZS5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICBkaWN0X29iaiA9IGJhc2UuX19kaWN0X19bbmFtZV0KKyAgICAgICAgICAgICAgICBpZiBob21lY2xzIG5vdCBpbiBtZXRhbXJvOgorICAgICAgICAgICAgICAgICAgICBob21lY2xzID0gYmFzZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGhvbWVjbHMgaXMgTm9uZToKKyAgICAgICAgICAgICMgdW5hYmxlIHRvIGxvY2F0ZSB0aGUgYXR0cmlidXRlIGFueXdoZXJlLCBtb3N0IGxpa2VseSBkdWUgdG8KKyAgICAgICAgICAgICMgYnVnZ3kgY3VzdG9tIF9fZGlyX187IGRpc2NhcmQgYW5kIG1vdmUgb24KKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG9iaiA9IGdldF9vYmogb3IgZGljdF9vYmoKKyAgICAgICAgIyBDbGFzc2lmeSB0aGUgb2JqZWN0IG9yIGl0cyBkZXNjcmlwdG9yLgorICAgICAgICBpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBzdGF0aWNtZXRob2QpOgorICAgICAgICAgICAga2luZCA9ICJzdGF0aWMgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBjbGFzc21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gImNsYXNzIG1ldGhvZCIKKyAgICAgICAgICAgIG9iaiA9IGRpY3Rfb2JqCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkaWN0X29iaiwgcHJvcGVydHkpOgorICAgICAgICAgICAga2luZCA9ICJwcm9wZXJ0eSIKKyAgICAgICAgICAgIG9iaiA9IGRpY3Rfb2JqCisgICAgICAgIGVsaWYgaXNmdW5jdGlvbihvYmopIG9yIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopOgorICAgICAgICAgICAga2luZCA9ICJtZXRob2QiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBraW5kID0gImRhdGEiCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoQXR0cmlidXRlKG5hbWUsIGtpbmQsIGhvbWVjbHMsIG9iaikpCi0KKyAgICAgICAgcHJvY2Vzc2VkLmFkZChuYW1lKQogICAgIHJldHVybiByZXN1bHQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjbGFzcyBoZWxwZXJzCkBAIC0zNjEsNiArNDI2LDQwIEBACiAgICAgIlJldHVybiB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgKGluY2x1ZGluZyBjbHMpIGluIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyLiIKICAgICByZXR1cm4gY2xzLl9fbXJvX18KIAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmdW5jdGlvbiBoZWxwZXJzCisKK2RlZiB1bndyYXAoZnVuYywgKiwgc3RvcD1Ob25lKToKKyAgICAiIiJHZXQgdGhlIG9iamVjdCB3cmFwcGVkIGJ5ICpmdW5jKi4KKworICAgRm9sbG93cyB0aGUgY2hhaW4gb2YgOmF0dHI6YF9fd3JhcHBlZF9fYCBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdAorICAgb2JqZWN0IGluIHRoZSBjaGFpbi4KKworICAgKnN0b3AqIGlzIGFuIG9wdGlvbmFsIGNhbGxiYWNrIGFjY2VwdGluZyBhbiBvYmplY3QgaW4gdGhlIHdyYXBwZXIgY2hhaW4KKyAgIGFzIGl0cyBzb2xlIGFyZ3VtZW50IHRoYXQgYWxsb3dzIHRoZSB1bndyYXBwaW5nIHRvIGJlIHRlcm1pbmF0ZWQgZWFybHkgaWYKKyAgIHRoZSBjYWxsYmFjayByZXR1cm5zIGEgdHJ1ZSB2YWx1ZS4gSWYgdGhlIGNhbGxiYWNrIG5ldmVyIHJldHVybnMgYSB0cnVlCisgICB2YWx1ZSwgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBjaGFpbiBpcyByZXR1cm5lZCBhcyB1c3VhbC4gRm9yIGV4YW1wbGUsCisgICA6ZnVuYzpgc2lnbmF0dXJlYCB1c2VzIHRoaXMgdG8gc3RvcCB1bndyYXBwaW5nIGlmIGFueSBvYmplY3QgaW4gdGhlCisgICBjaGFpbiBoYXMgYSBgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGUgZGVmaW5lZC4KKworICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIGEgY3ljbGUgaXMgZW5jb3VudGVyZWQuCisKKyAgICAiIiIKKyAgICBpZiBzdG9wIGlzIE5vbmU6CisgICAgICAgIGRlZiBfaXNfd3JhcHBlcihmKToKKyAgICAgICAgICAgIHJldHVybiBoYXNhdHRyKGYsICdfX3dyYXBwZWRfXycpCisgICAgZWxzZToKKyAgICAgICAgZGVmIF9pc193cmFwcGVyKGYpOgorICAgICAgICAgICAgcmV0dXJuIGhhc2F0dHIoZiwgJ19fd3JhcHBlZF9fJykgYW5kIG5vdCBzdG9wKGYpCisgICAgZiA9IGZ1bmMgICMgcmVtZW1iZXIgdGhlIG9yaWdpbmFsIGZ1bmMgZm9yIGVycm9yIHJlcG9ydGluZworICAgIG1lbW8gPSB7aWQoZil9ICMgTWVtb2lzZSBieSBpZCB0byB0b2xlcmF0ZSBub24taGFzaGFibGUgb2JqZWN0cworICAgIHdoaWxlIF9pc193cmFwcGVyKGZ1bmMpOgorICAgICAgICBmdW5jID0gZnVuYy5fX3dyYXBwZWRfXworICAgICAgICBpZF9mdW5jID0gaWQoZnVuYykKKyAgICAgICAgaWYgaWRfZnVuYyBpbiBtZW1vOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignd3JhcHBlciBsb29wIHdoZW4gdW53cmFwcGluZyB7IXJ9Jy5mb3JtYXQoZikpCisgICAgICAgIG1lbW8uYWRkKGlkX2Z1bmMpCisgICAgcmV0dXJuIGZ1bmMKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzb3VyY2UgY29kZSBleHRyYWN0aW9uCiBkZWYgaW5kZW50c2l6ZShsaW5lKToKICAgICAiIiJSZXR1cm4gdGhlIGluZGVudCBzaXplLCBpbiBzcGFjZXMsIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgb2YgdGV4dC4iIiIKQEAgLTQ0MCw2ICs1MzksOSBAQAogICAgICIiIkdldCB0aGUgbW9kdWxlIG5hbWUsIHN1ZmZpeCwgbW9kZSwgYW5kIG1vZHVsZSB0eXBlIGZvciBhIGdpdmVuIGZpbGUuIiIiCiAgICAgd2FybmluZ3Mud2FybignaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkgaXMgZGVwcmVjYXRlZCcsIERlcHJlY2F0aW9uV2FybmluZywKICAgICAgICAgICAgICAgICAgIDIpCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIGltcG9ydCBpbXAKICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUocGF0aCkKICAgICBzdWZmaXhlcyA9IFsoLWxlbihzdWZmaXgpLCBzdWZmaXgsIG1vZGUsIG10eXBlKQogICAgICAgICAgICAgICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCBtdHlwZSBpbiBpbXAuZ2V0X3N1ZmZpeGVzKCldCkBAIC00NzYsNyArNTc4LDcgQEAKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CiAgICAgICAgIHJldHVybiBmaWxlbmFtZQogICAgICMgb25seSByZXR1cm4gYSBub24tZXhpc3RlbnQgZmlsZW5hbWUgaWYgdGhlIG1vZHVsZSBoYXMgYSBQRVAgMzAyIGxvYWRlcgotICAgIGlmIGhhc2F0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycpOgorICAgIGlmIGdldGF0dHIoZ2V0bW9kdWxlKG9iamVjdCwgZmlsZW5hbWUpLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAjIG9yIGl0IGlzIGluIHRoZSBsaW5lY2FjaGUKICAgICBpZiBmaWxlbmFtZSBpbiBsaW5lY2FjaGUuY2FjaGU6CkBAIC01NDUsMTMgKzY0NywxMyBAQAogCiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIGFsbCB0aGUgbGluZXMKLSAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIElPRXJyb3IKKyAgICBpbiB0aGUgZmlsZSBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGV4ZXMgYSBsaW5lIGluIHRoYXQgbGlzdC4gIEFuIE9TRXJyb3IKICAgICBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAKICAgICBmaWxlID0gZ2V0ZmlsZShvYmplY3QpCiAgICAgc291cmNlZmlsZSA9IGdldHNvdXJjZWZpbGUob2JqZWN0KQogICAgIGlmIG5vdCBzb3VyY2VmaWxlIGFuZCBmaWxlWzoxXSArIGZpbGVbLTE6XSAhPSAnPD4nOgotICAgICAgICByYWlzZSBJT0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKKyAgICAgICAgcmFpc2UgT1NFcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCiAgICAgZmlsZSA9IHNvdXJjZWZpbGUgaWYgc291cmNlZmlsZSBlbHNlIGZpbGUKIAogICAgIG1vZHVsZSA9IGdldG1vZHVsZShvYmplY3QsIGZpbGUpCkBAIC01NjAsNyArNjYyLDcgQEAKICAgICBlbHNlOgogICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlKQogICAgIGlmIG5vdCBsaW5lczoKLSAgICAgICAgcmFpc2UgSU9FcnJvcignY291bGQgbm90IGdldCBzb3VyY2UgY29kZScpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBnZXQgc291cmNlIGNvZGUnKQogCiAgICAgaWYgaXNtb2R1bGUob2JqZWN0KToKICAgICAgICAgcmV0dXJuIGxpbmVzLCAwCkBAIC01ODYsNyArNjg4LDcgQEAKICAgICAgICAgICAgIGNhbmRpZGF0ZXMuc29ydCgpCiAgICAgICAgICAgICByZXR1cm4gbGluZXMsIGNhbmRpZGF0ZXNbMF1bMV0KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNsYXNzIGRlZmluaXRpb24nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgY2xhc3MgZGVmaW5pdGlvbicpCiAKICAgICBpZiBpc21ldGhvZChvYmplY3QpOgogICAgICAgICBvYmplY3QgPSBvYmplY3QuX19mdW5jX18KQEAgLTU5OCwxNCArNzAwLDE0IEBACiAgICAgICAgIG9iamVjdCA9IG9iamVjdC5mX2NvZGUKICAgICBpZiBpc2NvZGUob2JqZWN0KToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob2JqZWN0LCAnY29fZmlyc3RsaW5lbm8nKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGRlZmluaXRpb24nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgZnVuY3Rpb24gZGVmaW5pdGlvbicpCiAgICAgICAgIGxudW0gPSBvYmplY3QuY29fZmlyc3RsaW5lbm8gLSAxCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUocideKFxzKmRlZlxzKXwoLiooPzwhXHcpbGFtYmRhKDp8XHMpKXxeKFxzKkApJykKICAgICAgICAgd2hpbGUgbG51bSA+IDA6CiAgICAgICAgICAgICBpZiBwYXQubWF0Y2gobGluZXNbbG51bV0pOiBicmVhawogICAgICAgICAgICAgbG51bSA9IGxudW0gLSAxCiAgICAgICAgIHJldHVybiBsaW5lcywgbG51bQotICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNvZGUgb2JqZWN0JykKKyAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZmluZCBjb2RlIG9iamVjdCcpCiAKIGRlZiBnZXRjb21tZW50cyhvYmplY3QpOgogICAgICIiIkdldCBsaW5lcyBvZiBjb21tZW50cyBpbW1lZGlhdGVseSBwcmVjZWRpbmcgYW4gb2JqZWN0J3Mgc291cmNlIGNvZGUuCkBAIC02MTQsNyArNzE2LDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGxpbmVzLCBsbnVtID0gZmluZHNvdXJjZShvYmplY3QpCi0gICAgZXhjZXB0IChJT0Vycm9yLCBUeXBlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgVHlwZUVycm9yKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CkBAIC03MTAsNyArODEyLDcgQEAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIGxpc3Qgb2YgdGhlIGxpbmVzCiAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0IGFuZCB0aGUgbGluZSBudW1iZXIgaW5kaWNhdGVzIHdoZXJlIGluIHRoZQotICAgIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgd2FzIGZvdW5kLiAgQW4gSU9FcnJvciBpcworICAgIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoZSBmaXJzdCBsaW5lIG9mIGNvZGUgd2FzIGZvdW5kLiAgQW4gT1NFcnJvciBpcwogICAgIHJhaXNlZCBpZiB0aGUgc291cmNlIGNvZGUgY2Fubm90IGJlIHJldHJpZXZlZC4iIiIKICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2Uob2JqZWN0KQogCkBAIC03MjIsNyArODI0LDcgQEAKIAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc2luZ2xlIHN0cmluZy4gIEFuCi0gICAgSU9FcnJvciBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCisgICAgT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgbGluZXMsIGxudW0gPSBnZXRzb3VyY2VsaW5lcyhvYmplY3QpCiAgICAgcmV0dXJuICcnLmpvaW4obGluZXMpCiAKQEAgLTExMjMsNyArMTIyNSw3IEBACiAgICAgICAgIHN0YXJ0ID0gbGluZW5vIC0gMSAtIGNvbnRleHQvLzIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKGZyYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBsaW5lcyA9IGluZGV4ID0gTm9uZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3RhcnQgPSBtYXgoc3RhcnQsIDEpCkBAIC0xMzQ1LDYgKzE0NDcsOSBAQAogICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLl9fZnVuY19fKQogICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz10dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSlbMTpdKQogCisgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPworICAgIG9iaiA9IHVud3JhcChvYmosIHN0b3A9KGxhbWJkYSBmOiBoYXNhdHRyKGYsICJfX3NpZ25hdHVyZV9fIikpKQorCiAgICAgdHJ5OgogICAgICAgICBzaWcgPSBvYmouX19zaWduYXR1cmVfXwogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKQEAgLTEzNTMsMTcgKzE0NTgsMTMgQEAKICAgICAgICAgaWYgc2lnIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNpZwogCi0gICAgdHJ5OgotICAgICAgICAjIFdhcyB0aGlzIGZ1bmN0aW9uIHdyYXBwZWQgYnkgYSBkZWNvcmF0b3I/Ci0gICAgICAgIHdyYXBwZWQgPSBvYmouX193cmFwcGVkX18KLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gc2lnbmF0dXJlKHdyYXBwZWQpCiAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuRnVuY3Rpb25UeXBlKToKICAgICAgICAgcmV0dXJuIFNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKG9iaikKIAorICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5CdWlsdGluRnVuY3Rpb25UeXBlKToKKyAgICAgICAgcmV0dXJuIFNpZ25hdHVyZS5mcm9tX2J1aWx0aW4ob2JqKQorCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIGZ1bmN0b29scy5wYXJ0aWFsKToKICAgICAgICAgc2lnID0gc2lnbmF0dXJlKG9iai5mdW5jKQogCkBAIC0xODQ1LDYgKzE5NDYsNjQgQEAKICAgICAgICAgICAgICAgICAgICByZXR1cm5fYW5ub3RhdGlvbj1hbm5vdGF0aW9ucy5nZXQoJ3JldHVybicsIF9lbXB0eSksCiAgICAgICAgICAgICAgICAgICAgX192YWxpZGF0ZV9wYXJhbWV0ZXJzX189RmFsc2UpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbV9idWlsdGluKGNscywgZnVuYyk6CisgICAgICAgIHMgPSBnZXRhdHRyKGZ1bmMsICJfX3RleHRfc2lnbmF0dXJlX18iLCBOb25lKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgcy5lbmRzd2l0aCgiLykiKToKKyAgICAgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICBzID0gc1s6LTJdICsgJyknCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBraW5kID0gUGFyYW1ldGVyLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorCisgICAgICAgIHMgPSAiZGVmIGZvbyIgKyBzICsgIjogcGFzcyIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UocykKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobW9kdWxlLCBhc3QuTW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBhc3QuRnVuY3Rpb25EZWYKKyAgICAgICAgZiA9IG1vZHVsZS5ib2R5WzBdCisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGVtcHR5ID0gUGFyYW1ldGVyLmVtcHR5CisKKyAgICAgICAgZGVmIHAobmFtZV9ub2RlLCBkZWZhdWx0X25vZGUsIGRlZmF1bHQ9ZW1wdHkpOgorICAgICAgICAgICAgbmFtZSA9IG5hbWVfbm9kZS5hcmcKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShkZWZhdWx0X25vZGUsIGFzdC5OdW0pOgorICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBkZWZhdWx0Lm4KKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShkZWZhdWx0X25vZGUsIGFzdC5OYW1lQ29uc3RhbnQpOgorICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBkZWZhdWx0X25vZGUudmFsdWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBraW5kLCBkZWZhdWx0PWRlZmF1bHQsIGFubm90YXRpb249ZW1wdHkpKQorCisgICAgICAgICMgbm9uLWtleXdvcmQtb25seSBwYXJhbWV0ZXJzCisgICAgICAgIGZvciBuYW1lLCBkZWZhdWx0IGluIHJldmVyc2VkKGxpc3QoaXRlcnRvb2xzLnppcF9sb25nZXN0KHJldmVyc2VkKGYuYXJncy5hcmdzKSwgcmV2ZXJzZWQoZi5hcmdzLmRlZmF1bHRzKSwgZmlsbHZhbHVlPU5vbmUpKSk6CisgICAgICAgICAgICBwKG5hbWUsIGRlZmF1bHQpCisKKyAgICAgICAgIyAqYXJncworICAgICAgICBpZiBmLmFyZ3MudmFyYXJnOgorICAgICAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfUE9TSVRJT05BTAorICAgICAgICAgICAgcChmLmFyZ3MudmFyYXJnLCBlbXB0eSkKKworICAgICAgICAjIGtleXdvcmQtb25seSBhcmd1bWVudHMKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5LRVlXT1JEX09OTFkKKyAgICAgICAgZm9yIG5hbWUsIGRlZmF1bHQgaW4gemlwKGYuYXJncy5rd29ubHlhcmdzLCBmLmFyZ3Mua3dfZGVmYXVsdHMpOgorICAgICAgICAgICAgcChuYW1lLCBkZWZhdWx0KQorCisgICAgICAgICMgKiprd2FyZ3MKKyAgICAgICAgaWYgZi5hcmdzLmt3YXJnOgorICAgICAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfS0VZV09SRAorICAgICAgICAgICAgcChmLmFyZ3Mua3dhcmcsIGVtcHR5KQorCisgICAgICAgIHJldHVybiBjbHMocGFyYW1ldGVycywgcmV0dXJuX2Fubm90YXRpb249Y2xzLmVtcHR5KQorCisKICAgICBAcHJvcGVydHkKICAgICBkZWYgcGFyYW1ldGVycyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmFtZXRlcnMKQEAgLTIwNzIsMyArMjIzMSw2NCBAQAogICAgICAgICAgICAgcmVuZGVyZWQgKz0gJyAtPiB7fScuZm9ybWF0KGFubm8pCiAKICAgICAgICAgcmV0dXJuIHJlbmRlcmVkCisKK2RlZiBfbWFpbigpOgorICAgICIiIiBMb2dpYyBmb3IgaW5zcGVjdGluZyBhbiBvYmplY3QgZ2l2ZW4gYXQgY29tbWFuZCBsaW5lICIiIgorICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGltcG9ydCBpbXBvcnRsaWIKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnb2JqZWN0JywKKyAgICAgICAgIGhlbHA9IlRoZSBvYmplY3QgdG8gYmUgYW5hbHlzZWQuICIKKyAgICAgICAgICAgICAgIkl0IHN1cHBvcnRzIHRoZSAnbW9kdWxlOnF1YWxuYW1lJyBzeW50YXgiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctZCcsICctLWRldGFpbHMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICBoZWxwPSdEaXNwbGF5IGluZm8gYWJvdXQgdGhlIG1vZHVsZSByYXRoZXIgdGhhbiBpdHMgc291cmNlIGNvZGUnKQorCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHRhcmdldCA9IGFyZ3Mub2JqZWN0CisgICAgbW9kX25hbWUsIGhhc19hdHRycywgYXR0cnMgPSB0YXJnZXQucGFydGl0aW9uKCI6IikKKyAgICB0cnk6CisgICAgICAgIG9iaiA9IG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG1vZF9uYW1lKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICBtc2cgPSAiRmFpbGVkIHRvIGltcG9ydCB7fSAoe306IHt9KSIuZm9ybWF0KG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZXhjKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMpCisgICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBleGl0KDIpCisKKyAgICBpZiBoYXNfYXR0cnM6CisgICAgICAgIHBhcnRzID0gYXR0cnMuc3BsaXQoIi4iKQorICAgICAgICBvYmogPSBtb2R1bGUKKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgcGFydCkKKworICAgIGlmIG1vZHVsZS5fX25hbWVfXyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgIHByaW50KCJDYW4ndCBnZXQgaW5mbyBmb3IgYnVpbHRpbiBtb2R1bGVzLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgxKQorCisgICAgaWYgYXJncy5kZXRhaWxzOgorICAgICAgICBwcmludCgnVGFyZ2V0OiB7fScuZm9ybWF0KHRhcmdldCkpCisgICAgICAgIHByaW50KCdPcmlnaW46IHt9Jy5mb3JtYXQoZ2V0c291cmNlZmlsZShtb2R1bGUpKSkKKyAgICAgICAgcHJpbnQoJ0NhY2hlZDoge30nLmZvcm1hdChtb2R1bGUuX19jYWNoZWRfXykpCisgICAgICAgIGlmIG9iaiBpcyBtb2R1bGU6CisgICAgICAgICAgICBwcmludCgnTG9hZGVyOiB7fScuZm9ybWF0KHJlcHIobW9kdWxlLl9fbG9hZGVyX18pKSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBwcmludCgnU3VibW9kdWxlIHNlYXJjaCBwYXRoOiB7fScuZm9ybWF0KG1vZHVsZS5fX3BhdGhfXykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX18sIGxpbmVubyA9IGZpbmRzb3VyY2Uob2JqKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCdMaW5lOiB7fScuZm9ybWF0KGxpbmVubykpCisKKyAgICAgICAgcHJpbnQoJ1xuJykKKyAgICBlbHNlOgorICAgICAgICBwcmludChnZXRzb3VyY2Uob2JqKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9pby5weSBiL0xpYi9pby5weQppbmRleCBiZGE0ZGVmLi4zOTg3OGI4IDEwMDY0NAotLS0gYS9MaWIvaW8ucHkKKysrIGIvTGliL2lvLnB5CkBAIC00LDcgKzQsNyBAQAogQXQgdGhlIHRvcCBvZiB0aGUgSS9PIGhpZXJhcmNoeSBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyBJT0Jhc2UuIEl0CiBkZWZpbmVzIHRoZSBiYXNpYyBpbnRlcmZhY2UgdG8gYSBzdHJlYW0uIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlcmUgaXMgbm8KIHNlcGFyYXRpb24gYmV0d2VlbiByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHN0cmVhbXM7IGltcGxlbWVudGF0aW9ucyBhcmUKLWFsbG93ZWQgdG8gcmFpc2UgYW4gSU9FcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgorYWxsb3dlZCB0byByYWlzZSBhbiBPU0Vycm9yIGlmIHRoZXkgZG8gbm90IHN1cHBvcnQgYSBnaXZlbiBvcGVyYXRpb24uCiAKIEV4dGVuZGluZyBJT0Jhc2UgaXMgUmF3SU9CYXNlIHdoaWNoIGRlYWxzIHNpbXBseSB3aXRoIHRoZSByZWFkaW5nIGFuZAogd3JpdGluZyBvZiByYXcgYnl0ZXMgdG8gYSBzdHJlYW0uIEZpbGVJTyBzdWJjbGFzc2VzIFJhd0lPQmFzZSB0byBwcm92aWRlCmRpZmYgLS1naXQgYS9MaWIvaXBhZGRyZXNzLnB5IGIvTGliL2lwYWRkcmVzcy5weQppbmRleCBlYWJmZDZmLi45N2ZmMTNkIDEwMDY0NAotLS0gYS9MaWIvaXBhZGRyZXNzLnB5CisrKyBiL0xpYi9pcGFkZHJlc3MucHkKQEAgLTk3NSwxMyArOTc1LDI1IEBACiAgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgNDE5My4KKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5IG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gKHNlbGYubmV0d29ya19hZGRyZXNzLmlzX3ByaXZhdGUgYW5kCiAgICAgICAgICAgICAgICAgc2VsZi5icm9hZGNhc3RfYWRkcmVzcy5pc19wcml2YXRlKQogCiAgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dsb2JhbChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBpZiB0aGlzIGFkZHJlc3MgaXMgYWxsb2NhdGVkIGZvciBwdWJsaWMgbmV0d29ya3MuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KKworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLmlzX3ByaXZhdGUKKworICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc191bnNwZWNpZmllZChzZWxmKToKICAgICAgICAgIiIiVGVzdCBpZiB0aGUgYWRkcmVzcyBpcyB1bnNwZWNpZmllZC4KIApAQCAtMTIyMSwxOSArMTIzMywzMCBAQAogICAgICAgICByZXR1cm4gc2VsZiBpbiByZXNlcnZlZF9uZXR3b3JrCiAKICAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCiAgICAgZGVmIGlzX3ByaXZhdGUoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgMTkxOC4KKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgotICAgICAgICBwcml2YXRlXzEwID0gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKQotICAgICAgICBwcml2YXRlXzE3MiA9IElQdjROZXR3b3JrKCcxNzIuMTYuMC4wLzEyJykKLSAgICAgICAgcHJpdmF0ZV8xOTIgPSBJUHY0TmV0d29yaygnMTkyLjE2OC4wLjAvMTYnKQotICAgICAgICByZXR1cm4gKHNlbGYgaW4gcHJpdmF0ZV8xMCBvcgotICAgICAgICAgICAgICAgIHNlbGYgaW4gcHJpdmF0ZV8xNzIgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIHByaXZhdGVfMTkyKQorICAgICAgICByZXR1cm4gKHNlbGYgaW4gSVB2NE5ldHdvcmsoJzAuMC4wLjAvOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTAuMC4wLjAvOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTI3LjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE2OS4yNTQuMC4wLzE2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNzIuMTYuMC4wLzEyJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjAvMjknKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4wLjAuMTcwLzMxJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4yLjAvMjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTguMTguMC4wLzE1Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTguNTEuMTAwLjAvMjQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzIwMy4wLjExMy4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyNDAuMC4wLjAvNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjU1LjI1NS4yNTUuMjU1LzMyJykpCisKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19tdWx0aWNhc3Qoc2VsZik6CkBAIC0xNDY2LDYgKzE0ODksMjEgQEAKICAgICAgICAgaWYgc2VsZi5fcHJlZml4bGVuID09IChzZWxmLl9tYXhfcHJlZml4bGVuIC0gMSk6CiAgICAgICAgICAgICBzZWxmLmhvc3RzID0gc2VsZi5fX2l0ZXJfXwogCisgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAobm90IChzZWxmLm5ldHdvcmtfYWRkcmVzcyBpbiBJUHY0TmV0d29yaygnMTAwLjY0LjAuMC8xMCcpIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmJyb2FkY2FzdF9hZGRyZXNzIGluIElQdjROZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykpIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLmlzX3ByaXZhdGUpCisKKwogCiBjbGFzcyBfQmFzZVY2OgogCkBAIC0xODIyLDE1ICsxODYwLDM2IEBACiAgICAgICAgIHJldHVybiBzZWxmIGluIHNpdGVsb2NhbF9uZXR3b3JrCiAKICAgICBAcHJvcGVydHkKKyAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCiAgICAgZGVmIGlzX3ByaXZhdGUoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHJpdmF0ZSBuZXR3b3Jrcy4KIAogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIHBlciBSRkMgNDE5My4KKyAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgogCiAgICAgICAgICIiIgotICAgICAgICBwcml2YXRlX25ldHdvcmsgPSBJUHY2TmV0d29yaygnZmMwMDo6LzcnKQotICAgICAgICByZXR1cm4gc2VsZiBpbiBwcml2YXRlX25ldHdvcmsKKyAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjZOZXR3b3JrKCc6OjEvMTI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6Oi8xMjgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzo6ZmZmZjowOjAvOTYnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzEwMDo6LzY0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjovMjMnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJzIwMDE6Mjo6LzQ4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOmRiODo6LzMyJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjEwOjovMjgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmZTgwOjovMTAnKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIHRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19wcml2YXRlCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfdW5zcGVjaWZpZWQoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvanNvbi9fX2luaXRfXy5weSBiL0xpYi9qc29uL19faW5pdF9fLnB5CmluZGV4IDQ4YTRmOGYuLmE0NTlmNzcgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL19faW5pdF9fLnB5CisrKyBiL0xpYi9qc29uL19faW5pdF9fLnB5CkBAIC0zOSw4ICszOSw3IEBACiBQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsCi0gICAgLi4uICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpKQorICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCiAgICAgewogICAgICAgICAiNCI6IDUsCiAgICAgICAgICI2IjogNwpAQCAtMTQ2LDEzICsxNDUsMTIgQEAKICAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKICAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAogICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUKLSAgICBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gYGBpbmRlbnRgYCBpcyBzcGVjaWZpZWQuCi0gICAgWW91IGNhbiB1c2UgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KKyAgICByZXByZXNlbnRhdGlvbi4KIAotICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBzcGVjaWZpZWQsIGBgc2VwYXJhdG9yc2BgIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KICAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KQEAgLTIwOSwxMyArMjA3LDEyIEBACiAgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCiAgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKICAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKLSAgICByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlCi0gICAgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuIGBgaW5kZW50YGAgaXMgc3BlY2lmaWVkLgotICAgIFlvdSBjYW4gdXNlIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCisgICAgcmVwcmVzZW50YXRpb24uCiAKLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgSWYgc3BlY2lmaWVkLCBgYHNlcGFyYXRvcnNgYCBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCkBAIC0zMTMsNiArMzEwLDExIEBACiAgICAgVGhlIGBgZW5jb2RpbmdgYCBhcmd1bWVudCBpcyBpZ25vcmVkIGFuZCBkZXByZWNhdGVkLgogCiAgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd0aGUgSlNPTiBvYmplY3QgbXVzdCBiZSBzdHIsIG5vdCB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5fX2NsYXNzX18uX19uYW1lX18pKQorICAgIGlmIHMuc3RhcnRzd2l0aCh1J1x1ZmVmZicpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmV4cGVjdGVkIFVURi04IEJPTSAoZGVjb2RlIHVzaW5nIHV0Zi04LXNpZykiKQogICAgIGlmIChjbHMgaXMgTm9uZSBhbmQgb2JqZWN0X2hvb2sgaXMgTm9uZSBhbmQKICAgICAgICAgICAgIHBhcnNlX2ludCBpcyBOb25lIGFuZCBwYXJzZV9mbG9hdCBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfY29uc3RhbnQgaXMgTm9uZSBhbmQgb2JqZWN0X3BhaXJzX2hvb2sgaXMgTm9uZSBhbmQgbm90IGt3KToKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2RlY29kZXIucHkgYi9MaWIvanNvbi9kZWNvZGVyLnB5CmluZGV4IDgwZDM0MjAuLjU5ZTVmNDEgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2RlY29kZXIucHkKKysrIGIvTGliL2pzb24vZGVjb2Rlci5weQpAQCAtMSw5ICsxLDYgQEAKICIiIkltcGxlbWVudGF0aW9uIG9mIEpTT05EZWNvZGVyCiAiIiIKLWltcG9ydCBiaW5hc2NpaQogaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0CiAKIGZyb20ganNvbiBpbXBvcnQgc2Nhbm5lcgogdHJ5OgpAQCAtMTUsMTQgKzEyLDkgQEAKIAogRkxBR1MgPSByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMCiAKLWRlZiBfZmxvYXRjb25zdGFudHMoKToKLSAgICBfQllURVMgPSBiaW5hc2NpaS51bmhleGxpZnkoYic3RkY4MDAwMDAwMDAwMDAwN0ZGMDAwMDAwMDAwMDAwMCcpCi0gICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgX0JZVEVTID0gX0JZVEVTWzo4XVs6Oi0xXSArIF9CWVRFU1s4Ol1bOjotMV0KLSAgICBuYW4sIGluZiA9IHN0cnVjdC51bnBhY2soJ2RkJywgX0JZVEVTKQotICAgIHJldHVybiBuYW4sIGluZiwgLWluZgotCi1OYU4sIFBvc0luZiwgTmVnSW5mID0gX2Zsb2F0Y29uc3RhbnRzKCkKK05hTiA9IGZsb2F0KCduYW4nKQorUG9zSW5mID0gZmxvYXQoJ2luZicpCitOZWdJbmYgPSBmbG9hdCgnLWluZicpCiAKIAogZGVmIGxpbmVjb2woZG9jLCBwb3MpOgpAQCAtMTk1LDggKzE4Nyw4IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUsIGVuZCA9IHNjYW5fb25jZShzLCBlbmQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyBvYmplY3QiLCBzLCBlbmQpKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBlcnI6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHZhbHVlIiwgcywgZXJyLnZhbHVlKSkgZnJvbSBOb25lCiAgICAgICAgIHBhaXJzX2FwcGVuZCgoa2V5LCB2YWx1ZSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5leHRjaGFyID0gc1tlbmRdCkBAIC0yMzksOCArMjMxLDggQEAKICAgICB3aGlsZSBUcnVlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgX2FwcGVuZCh2YWx1ZSkKICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQogICAgICAgICBpZiBuZXh0Y2hhciBpbiBfd3M6CkBAIC0yNTAsNyArMjQyLDcgQEAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxpZiBuZXh0Y2hhciAhPSAnLCc6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQpKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcywgZW5kIC0gMSkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNbZW5kXSBpbiBfd3M6CiAgICAgICAgICAgICAgICAgZW5kICs9IDEKQEAgLTM2NSw2ICszNTcsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb2JqLCBlbmQgPSBzZWxmLnNjYW5fb25jZShzLCBpZHgpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gSlNPTiBvYmplY3QgY291bGQgYmUgZGVjb2RlZCIpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgcmV0dXJuIG9iaiwgZW5kCmRpZmYgLS1naXQgYS9MaWIvanNvbi9lbmNvZGVyLnB5IGIvTGliL2pzb24vZW5jb2Rlci5weQppbmRleCAxZDhiMjBjLi4wNTEzODM4IDEwMDY0NAotLS0gYS9MaWIvanNvbi9lbmNvZGVyLnB5CisrKyBiL0xpYi9qc29uL2VuY29kZXIucHkKQEAgLTEyNSwxNCArMTI1LDEyIEBACiAgICAgICAgIElmIGluZGVudCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkKICAgICAgICAgZWxlbWVudHMgYW5kIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0CiAgICAgICAgIGluZGVudCBsZXZlbC4gIEFuIGluZGVudCBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuCi0gICAgICAgIE5vbmUgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0Ci0gICAgICAgIGl0ZW0gc2VwYXJhdG9yIGlzICcsICcsICB0aGUgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcKLSAgICAgICAgd2hpdGVzcGFjZSB3aGVuIGluZGVudCBpcyBzcGVjaWZpZWQuICBZb3UgY2FuIHVzZQotICAgICAgICBzZXBhcmF0b3JzPSgnLCcsICc6ICcpIHRvIGF2b2lkIHRoaXMuCisgICAgICAgIE5vbmUgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4KIAotICAgICAgICBJZiBzcGVjaWZpZWQsIHNlcGFyYXRvcnMgc2hvdWxkIGJlIGEgKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQotICAgICAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04KLSAgICAgICAgcmVwcmVzZW50YXRpb24geW91IHNob3VsZCBzcGVjaWZ5ICgnLCcsICc6JykgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCisgICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91bGQgYmUgYW4gKGl0ZW1fc2VwYXJhdG9yLCBrZXlfc2VwYXJhdG9yKQorICAgICAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKSBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICAgICAgKCcsJywgJzogJykgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICAgICAgeW91IHNob3VsZCBzcGVjaWZ5ICgnLCcsICc6JykgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICAgICAgSWYgc3BlY2lmaWVkLCBkZWZhdWx0IGlzIGEgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3Igb2JqZWN0cwogICAgICAgICB0aGF0IGNhbid0IG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlCkBAIC0xNDgsNiArMTQ2LDggQEAKICAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKICAgICAgICAgaWYgc2VwYXJhdG9ycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IsIHNlbGYua2V5X3NlcGFyYXRvciA9IHNlcGFyYXRvcnMKKyAgICAgICAgZWxpZiBpbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLml0ZW1fc2VwYXJhdG9yID0gJywnCiAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CiAKQEAgLTE3NSw2ICsxNzUsNyBAQAogICAgIGRlZiBlbmNvZGUoc2VsZiwgbyk6CiAgICAgICAgICIiIlJldHVybiBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIGRhdGEgc3RydWN0dXJlLgogCisgICAgICAgID4+PiBmcm9tIGpzb24uZW5jb2RlciBpbXBvcnQgSlNPTkVuY29kZXIKICAgICAgICAgPj4+IEpTT05FbmNvZGVyKCkuZW5jb2RlKHsiZm9vIjogWyJiYXIiLCAiYmF6Il19KQogICAgICAgICAneyJmb28iOiBbImJhciIsICJiYXoiXX0nCiAKQEAgLTI5OCw5ICsyOTksMTMgQEAKICAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgYnVmICsgJ2ZhbHNlJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIFN1YmNsYXNzZXMgb2YgaW50L2Zsb2F0IG1heSBvdmVycmlkZSBfX3N0cl9fLCBidXQgd2Ugc3RpbGwKKyAgICAgICAgICAgICAgICAjIHdhbnQgdG8gZW5jb2RlIHRoZW0gYXMgaW50ZWdlcnMvZmxvYXRzIGluIEpTT04uIE9uZSBleGFtcGxlCisgICAgICAgICAgICAgICAgIyB3aXRoaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaXMgSW50RW51bS4KKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBzdHIoaW50KHZhbHVlKSkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3ZlIGZvciBpbnQKKyAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBidWYKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKQEAgLTMwOSw4ICszMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9kaWN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGUodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gY2h1bmtzCiAgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKICAgICAgICAgICAgIHlpZWxkICdcbicgKyBfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsCkBAIC0zNDcsNyArMzUxLDggQEAKICAgICAgICAgICAgICMgSmF2YVNjcmlwdCBpcyB3ZWFrbHkgdHlwZWQgZm9yIHRoZXNlLCBzbyBpdCBtYWtlcyBzZW5zZSB0bwogICAgICAgICAgICAgIyBhbHNvIGFsbG93IHRoZW0uICBNYW55IGVuY29kZXJzIHNlZW0gdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhpcy4KICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGZsb2F0KToKLSAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRzdHIoa2V5KQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAga2V5ID0gX2Zsb2F0c3RyKGZsb2F0KGtleSkpCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBUcnVlOgogICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJwogICAgICAgICAgICAgZWxpZiBrZXkgaXMgRmFsc2U6CkBAIC0zNTUsNyArMzYwLDggQEAKICAgICAgICAgICAgIGVsaWYga2V5IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ251bGwnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoa2V5LCBpbnQpOgotICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICBrZXkgPSBzdHIoaW50KGtleSkpCiAgICAgICAgICAgICBlbGlmIF9za2lwa2V5czoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKQEAgLTM3NSw5ICszODEsMTEgQEAKICAgICAgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CiAgICAgICAgICAgICAgICAgeWllbGQgJ2ZhbHNlJwogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgICAgIHlpZWxkIHN0cih2YWx1ZSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIHlpZWxkIHN0cihpbnQodmFsdWUpKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KHZhbHVlKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2xpc3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKQEAgLTM4NSw4ICszOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZV9kaWN0KHZhbHVlLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGUodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKLSAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gY2h1bmtzCiAgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKICAgICAgICAgICAgIHlpZWxkICdcbicgKyBfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsCkBAIC00MDQsMTUgKzQxMSwxNSBAQAogICAgICAgICBlbGlmIG8gaXMgRmFsc2U6CiAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBpbnQpOgotICAgICAgICAgICAgeWllbGQgc3RyKG8pCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgeWllbGQgc3RyKGludChvKSkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKLSAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihvKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgIHlpZWxkIF9mbG9hdHN0cihmbG9hdChvKSkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgeWllbGQgZnJvbSBfaXRlcmVuY29kZV9saXN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGRpY3QpOgotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKToKLSAgICAgICAgICAgICAgICB5aWVsZCBjaHVuaworICAgICAgICAgICAgeWllbGQgZnJvbSBfaXRlcmVuY29kZV9kaWN0KG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQpAQCAtNDIwLDggKzQyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCiAgICAgICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBvCiAgICAgICAgICAgICBvID0gX2RlZmF1bHQobykKLSAgICAgICAgICAgIGZvciBjaHVuayBpbiBfaXRlcmVuY29kZShvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZGVsIG1hcmtlcnNbbWFya2VyaWRdCiAgICAgcmV0dXJuIF9pdGVyZW5jb2RlCmRpZmYgLS1naXQgYS9MaWIvanNvbi9zY2FubmVyLnB5IGIvTGliL2pzb24vc2Nhbm5lci5weQppbmRleCAyM2VlZjYxLi44NjQyNmNkIDEwMDY0NAotLS0gYS9MaWIvanNvbi9zY2FubmVyLnB5CisrKyBiL0xpYi9qc29uL3NjYW5uZXIucHkKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzdHJpbmdbaWR4XQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KKyAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24oaWR4KQogCiAgICAgICAgIGlmIG5leHRjaGFyID09ICciJzoKICAgICAgICAgICAgIHJldHVybiBwYXJzZV9zdHJpbmcoc3RyaW5nLCBpZHggKyAxLCBzdHJpY3QpCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJy0nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDldID09ICctSW5maW5pdHknOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2NvbnN0YW50KCctSW5maW5pdHknKSwgaWR4ICsgOQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbihpZHgpCiAKICAgICBkZWYgc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdG9vbC5weSBiL0xpYi9qc29uL3Rvb2wucHkKaW5kZXggZWNmOWM0Ny4uN2RiNDUyOCAxMDA2NDQKLS0tIGEvTGliL2pzb24vdG9vbC5weQorKysgYi9MaWIvanNvbi90b29sLnB5CkBAIC0zMSw4ICszMSw3IEBACiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGUpCiAgICAgd2l0aCBvdXRmaWxlOgotICAgICAgICBqc29uLmR1bXAob2JqLCBvdXRmaWxlLCBzb3J0X2tleXM9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQorICAgICAgICBqc29uLmR1bXAob2JqLCBvdXRmaWxlLCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpCiAgICAgICAgIG91dGZpbGUud3JpdGUoJ1xuJykKIAogCmRpZmYgLS1naXQgYS9MaWIva2V5d29yZC5weSBiL0xpYi9rZXl3b3JkLnB5CmluZGV4IGRhZDM5Y2MuLjZlMWU4ODIgMTAwNzU1Ci0tLSBhL0xpYi9rZXl3b3JkLnB5CisrKyBiL0xpYi9rZXl3b3JkLnB5CkBAIC02MCw2ICs2MCwxMiBAQAogICAgIGlmIGxlbihhcmdzKSA+IDE6IG9wdGZpbGUgPSBhcmdzWzFdCiAgICAgZWxzZTogb3B0ZmlsZSA9ICJMaWIva2V5d29yZC5weSIKIAorICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldCwgdGFraW5nIGNhcmUgdG8gcHJlc2VydmUgaXRzCisgICAgIyBuZXdsaW5lIGNvbnZlbnRpb24uCisgICAgd2l0aCBvcGVuKG9wdGZpbGUsIG5ld2xpbmU9JycpIGFzIGZwOgorICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQorICAgIG5sID0gZm9ybWF0WzBdW2xlbihmb3JtYXRbMF0uc3RyaXAoKSk6XSBpZiBmb3JtYXQgZWxzZSAnXG4nCisKICAgICAjIHNjYW4gdGhlIHNvdXJjZSBmaWxlIGZvciBrZXl3b3JkcwogICAgIHdpdGggb3BlbihpcHRmaWxlKSBhcyBmcDoKICAgICAgICAgc3RycHJvZyA9IHJlLmNvbXBpbGUoJyIoW14iXSspIicpCkBAIC02OCwyNiArNzQsMjEgQEAKICAgICAgICAgICAgIGlmICd7MSwgIicgaW4gbGluZToKICAgICAgICAgICAgICAgICBtYXRjaCA9IHN0cnByb2cuc2VhcmNoKGxpbmUpCiAgICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsXG4iKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICAgICAgJyIgKyBtYXRjaC5ncm91cCgxKSArICInLCIgKyBubCkKICAgICBsaW5lcy5zb3J0KCkKIAotICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldAotICAgIHdpdGggb3BlbihvcHRmaWxlKSBhcyBmcDoKLSAgICAgICAgZm9ybWF0ID0gZnAucmVhZGxpbmVzKCkKLQotICAgICMgaW5zZXJ0IHRoZSBsaW5lcyBvZiBrZXl3b3JkcworICAgICMgaW5zZXJ0IHRoZSBsaW5lcyBvZiBrZXl3b3JkcyBpbnRvIHRoZSBza2VsZXRvbgogICAgIHRyeToKLSAgICAgICAgc3RhcnQgPSBmb3JtYXQuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS1cbiIpICsgMQotICAgICAgICBlbmQgPSBmb3JtYXQuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tXG4iKQorICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLSIgKyBubCkgKyAxCisgICAgICAgIGVuZCA9IGZvcm1hdC5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS0iICsgbmwpCiAgICAgICAgIGZvcm1hdFtzdGFydDplbmRdID0gbGluZXMKICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgidGFyZ2V0IGRvZXMgbm90IGNvbnRhaW4gZm9ybWF0IG1hcmtlcnNcbiIpCiAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAjIHdyaXRlIHRoZSBvdXRwdXQgZmlsZQotICAgIGZwID0gb3BlbihvcHRmaWxlLCAndycpCi0gICAgZnAud3JpdGUoJycuam9pbihmb3JtYXQpKQotICAgIGZwLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4ob3B0ZmlsZSwgJ3cnLCBuZXdsaW5lPScnKSBhcyBmcDoKKyAgICAgICAgZnAud3JpdGVsaW5lcyhmb3JtYXQpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKaW5kZXggMjI3NmRjOS4uMzM5NzUwZSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CisrKyBiL0xpYi9saWIydG8zL2J0bV91dGlscy5weQpAQCAtOTYsOCArOTYsNyBAQAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgICJHZW5lcmF0b3IgdGhhdCByZXR1cm5zIHRoZSBsZWF2ZXMgb2YgdGhlIHRyZWUiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogICAgICAgICBpZiBub3Qgc2VsZi5jaGlsZHJlbjoKICAgICAgICAgICAgIHlpZWxkIHNlbGYKIApAQCAtMjc3LDcgKzI3Niw2IEBACiAgICAgc3ViLWl0ZXJhYmxlcyIiIgogICAgIGZvciB4IGluIHNlcXVlbmNlOgogICAgICAgICBpZiBpc2luc3RhbmNlKHgsIChsaXN0LCB0dXBsZSkpOgotICAgICAgICAgICAgZm9yIHkgaW4gcmVjX3Rlc3QoeCwgdGVzdF9mdW5jKToKLSAgICAgICAgICAgICAgICB5aWVsZCB5CisgICAgICAgICAgICB5aWVsZCBmcm9tIHJlY190ZXN0KHgsIHRlc3RfZnVuYykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHlpZWxkIHRlc3RfZnVuYyh4KQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weSBiL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKaW5kZXggNjBkMjE5Zi4uNmUyNTljNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CkBAIC0xMjksNiArMTI5LDI5IEBACiAgICAgaW1wID0gTm9kZShzeW1zLmltcG9ydF9mcm9tLCBjaGlsZHJlbikKICAgICByZXR1cm4gaW1wCiAKK2RlZiBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKToKKyAgICAiIiJSZXR1cm5zIGFuIGltcG9ydCBzdGF0ZW1lbnQgYW5kIGNhbGxzIGEgbWV0aG9kCisgICAgb2YgdGhlIG1vZHVsZToKKworICAgIGltcG9ydCBtb2R1bGUKKyAgICBtb2R1bGUubmFtZSgpIiIiCisgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQorICAgIGlmIG9iai50eXBlID09IHN5bXMuYXJnbGlzdDoKKyAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCisgICAgZWxzZToKKyAgICAgICAgbmV3YXJnbGlzdCA9IE5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQorICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQorICAgIGlmIGFmdGVyOgorICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCisgICAgbmV3ID0gTm9kZShzeW1zLnBvd2VyLAorICAgICAgICAgICAgICAgQXR0cihOYW1lKG5hbWVzWzBdKSwgTmFtZShuYW1lc1sxXSkpICsKKyAgICAgICAgICAgICAgIFtOb2RlKHN5bXMudHJhaWxlciwKKyAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAorICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCisgICAgbmV3LnByZWZpeCA9IG5vZGUucHJlZml4CisgICAgcmV0dXJuIG5ldworCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgRGV0ZXJtaW5lIHdoZXRoZXIgYSBub2RlIHJlcHJlc2VudHMgYSBnaXZlbiBsaXRlcmFsCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9hc3NlcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViY2VjODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weQpAQCAtMCwwICsxLDM0IEBACisiIiJGaXhlciB0aGF0IHJlcGxhY2VzIGRlcHJlY2F0ZWQgdW5pdHRlc3QgbWV0aG9kIG5hbWVzLiIiIgorCisjIEF1dGhvcjogRXppbyBNZWxvdHRpCisKK2Zyb20gLi5maXhlcl9iYXNlIGltcG9ydCBCYXNlRml4Citmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgTmFtZQorCitOQU1FUyA9IGRpY3QoCisgICAgYXNzZXJ0Xz0iYXNzZXJ0VHJ1ZSIsCisgICAgYXNzZXJ0RXF1YWxzPSJhc3NlcnRFcXVhbCIsCisgICAgYXNzZXJ0Tm90RXF1YWxzPSJhc3NlcnROb3RFcXVhbCIsCisgICAgYXNzZXJ0QWxtb3N0RXF1YWxzPSJhc3NlcnRBbG1vc3RFcXVhbCIsCisgICAgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzPSJhc3NlcnROb3RBbG1vc3RFcXVhbCIsCisgICAgYXNzZXJ0UmVnZXhwTWF0Y2hlcz0iYXNzZXJ0UmVnZXgiLAorICAgIGFzc2VydFJhaXNlc1JlZ2V4cD0iYXNzZXJ0UmFpc2VzUmVnZXgiLAorICAgIGZhaWxVbmxlc3NFcXVhbD0iYXNzZXJ0RXF1YWwiLAorICAgIGZhaWxJZkVxdWFsPSJhc3NlcnROb3RFcXVhbCIsCisgICAgZmFpbFVubGVzc0FsbW9zdEVxdWFsPSJhc3NlcnRBbG1vc3RFcXVhbCIsCisgICAgZmFpbElmQWxtb3N0RXF1YWw9ImFzc2VydE5vdEFsbW9zdEVxdWFsIiwKKyAgICBmYWlsVW5sZXNzPSJhc3NlcnRUcnVlIiwKKyAgICBmYWlsVW5sZXNzUmFpc2VzPSJhc3NlcnRSYWlzZXMiLAorICAgIGZhaWxJZj0iYXNzZXJ0RmFsc2UiLAorKQorCisKK2NsYXNzIEZpeEFzc2VydHMoQmFzZUZpeCk6CisKKyAgICBQQVRURVJOID0gIiIiCisgICAgICAgICAgICAgIHBvd2VyPCBhbnkrIHRyYWlsZXI8ICcuJyBtZXRoPSglcyk+IGFueSogPgorICAgICAgICAgICAgICAiIiIgJSAnfCcuam9pbihtYXAocmVwciwgTkFNRVMpKQorCisgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKKyAgICAgICAgbmFtZSA9IHJlc3VsdHNbIm1ldGgiXVswXQorICAgICAgICBuYW1lLnJlcGxhY2UoTmFtZShOQU1FU1tzdHIobmFtZSldLCBwcmVmaXg9bmFtZS5wcmVmaXgpKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKaW5kZXggNmJlMTFjZC4uZmIyOTczYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CkBAIC02LDkgKzYsOCBAQAogaW50ZXJuKHMpIC0+IHN5cy5pbnRlcm4ocykiIiIKIAogIyBMb2NhbCBpbXBvcnRzCi1mcm9tIC4uIGltcG9ydCBweXRyZWUKIGZyb20gLi4gaW1wb3J0IGZpeGVyX2Jhc2UKLWZyb20gLi5maXhlcl91dGlsIGltcG9ydCBOYW1lLCBBdHRyLCB0b3VjaF9pbXBvcnQKK2Zyb20gLi5maXhlcl91dGlsIGltcG9ydCBJbXBvcnRBbmRDYWxsLCB0b3VjaF9pbXBvcnQKIAogCiBjbGFzcyBGaXhJbnRlcm4oZml4ZXJfYmFzZS5CYXNlRml4KToKQEAgLTI2LDIxICsyNSw3IEBACiAgICAgIiIiCiAKICAgICBkZWYgdHJhbnNmb3JtKHNlbGYsIG5vZGUsIHJlc3VsdHMpOgotICAgICAgICBzeW1zID0gc2VsZi5zeW1zCi0gICAgICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKLSAgICAgICAgaWYgb2JqLnR5cGUgPT0gc3ltcy5hcmdsaXN0OgotICAgICAgICAgICAgbmV3YXJnbGlzdCA9IG9iai5jbG9uZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gcHl0cmVlLk5vZGUoc3ltcy5hcmdsaXN0LCBbb2JqLmNsb25lKCldKQotICAgICAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KLSAgICAgICAgaWYgYWZ0ZXI6Ci0gICAgICAgICAgICBhZnRlciA9IFtuLmNsb25lKCkgZm9yIG4gaW4gYWZ0ZXJdCi0gICAgICAgIG5ldyA9IHB5dHJlZS5Ob2RlKHN5bXMucG93ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHIoTmFtZSgic3lzIiksIE5hbWUoImludGVybiIpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFtweXRyZWUuTm9kZShzeW1zLnRyYWlsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQotICAgICAgICBuZXcucHJlZml4ID0gbm9kZS5wcmVmaXgKKyAgICAgICAgbmFtZXMgPSAoJ3N5cycsICdpbnRlcm4nKQorICAgICAgICBuZXcgPSBJbXBvcnRBbmRDYWxsKG5vZGUsIHJlc3VsdHMsIG5hbWVzKQogICAgICAgICB0b3VjaF9pbXBvcnQoTm9uZSwgJ3N5cycsIG5vZGUpCiAgICAgICAgIHJldHVybiBuZXcKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5CkBAIC0wLDAgKzEsMjggQEAKKyIiIkZpeGVyIGZvciByZWxvYWQoKS4KKworcmVsb2FkKHMpIC0+IGltcC5yZWxvYWQocykiIiIKKworIyBMb2NhbCBpbXBvcnRzCitmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgSW1wb3J0QW5kQ2FsbCwgdG91Y2hfaW1wb3J0CisKKworY2xhc3MgRml4UmVsb2FkKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCisKKyAgICBQQVRURVJOID0gIiIiCisgICAgcG93ZXI8ICdyZWxvYWQnCisgICAgICAgICAgIHRyYWlsZXI8IGxwYXI9JygnCisgICAgICAgICAgICAgICAgICAgICggbm90KGFyZ2xpc3QgfCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIG9iaj1hbnkKKyAgICAgICAgICAgICAgICAgICAgICB8IG9iaj1hcmdsaXN0PChub3QgYXJndW1lbnQ8YW55ICc9JyBhbnk+KSBhbnkgJywnPiApCisgICAgICAgICAgICAgICAgICAgIHJwYXI9JyknID4KKyAgICAgICAgICAgYWZ0ZXI9YW55KgorICAgID4KKyAgICAiIiIKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWVzID0gKCdpbXAnLCAncmVsb2FkJykKKyAgICAgICAgbmV3ID0gSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcykKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsICdpbXAnLCBub2RlKQorICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmOWNjMThiLi45M2JhZTkwIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTkwLDExICs5MCwxMSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKGJhY2t1cCk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoYmFja3VwKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW1vdmUgYmFja3VwICVzIiwgYmFja3VwKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJDYW4ndCByZW5hbWUgJXMgdG8gJXMiLCBmaWxlbmFtZSwgYmFja3VwKQogICAgICAgICAjIEFjdHVhbGx5IHdyaXRlIHRoZSBuZXcgZmlsZQogICAgICAgICB3cml0ZSA9IHN1cGVyKFN0ZG91dFJlZmFjdG9yaW5nVG9vbCwgc2VsZikud3JpdGVfZmlsZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weSBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKaW5kZXggYmY0OTc2Mi4uZWQwY2FjNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgb3BlbiAlczogJXMiICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHNlbGYuc3ltYm9sMm51bWJlciA9IHt9CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBUaGUgY29kZSBiZWxvdyBlc3NlbnRpYWxseSB1c2VzIGYncyBpdGVyYXRvci1uZXNzIQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDRjNjExYzYuLjNjY2M2OWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZ3JhbW1hciB0YWJsZXMgdG8gJXMiLCBncCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBnLmR1bXAoZ3ApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBmYWlsZWQ6IitzdHIoZSkpCiAgICAgZWxzZToKICAgICAgICAgZyA9IGdyYW1tYXIuR3JhbW1hcigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQppbmRleCAxNGM1ZjcwLi43ZjFjNTY0IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKQEAgLTg2LDE1ICs4NiwxMyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJEdW1wIHRoZSBncmFtbWFyIHRhYmxlcyB0byBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgIndiIikKLSAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYuX19kaWN0X18sIGYsIDIpCiAKICAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgdGFibGVzIGZyb20gYSBwaWNrbGUgZmlsZS4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGQgPSBwaWNrbGUubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGQpCiAKICAgICBkZWYgY29weShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCAxN2NiZjBhLi5jNGExYmUzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC0xOTQsOCArMTk0LDcgQEAKIAogICAgIGRlZiBsZWF2ZXMoc2VsZik6CiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIHggaW4gY2hpbGQubGVhdmVzKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeAorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5sZWF2ZXMoKQogCiAgICAgZGVmIGRlcHRoKHNlbGYpOgogICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBOb25lOgpAQCAtMjc0LDE2ICsyNzMsMTQgQEAKICAgICBkZWYgcG9zdF9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcG9zdC1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmNoaWxkcmVuOgotICAgICAgICAgICAgZm9yIG5vZGUgaW4gY2hpbGQucG9zdF9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucG9zdF9vcmRlcigpCiAgICAgICAgIHlpZWxkIHNlbGYKIAogICAgIGRlZiBwcmVfb3JkZXIoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHByZS1vcmRlciBpdGVyYXRvciBmb3IgdGhlIHRyZWUuIiIiCiAgICAgICAgIHlpZWxkIHNlbGYKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wcmVfb3JkZXIoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBub2RlCisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLnByZV9vcmRlcigpCiAKICAgICBkZWYgX3ByZWZpeF9nZXR0ZXIoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcmVmYWN0b3IucHkgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQppbmRleCAyMDFlMTkzLi44MTAwMzE3IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQorKysgYi9MaWIvbGliMnRvMy9yZWZhY3Rvci5weQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgICAgICAgdHJ5OgpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHdyaXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQppbmRleCBhMDJiYmZlLi43MzFjNDAzIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CkBAIC01Myw3ICs1Myw3IEBACiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHByaW50KCJTY2FubmluZyIsIGRpciwgIi4uLiIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CmluZGV4IDJmMDhmOTMuLjA2YjAwMzMgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfZml4ZXJzLnB5CkBAIC0yODIsNiArMjgyLDY1IEBACiAgICAgICAgIGIgPSAiIiJmKCphcmdzLCAqKmt3ZHMpIiIiCiAgICAgICAgIHNlbGYuY2hlY2soYSwgYikKIAorY2xhc3MgVGVzdF9yZWxvYWQoRml4ZXJUZXN0Q2FzZSk6CisgICAgZml4ZXIgPSAicmVsb2FkIgorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfY29tbWVudChzZWxmKToKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICMgY29tbWVudCIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgIyBQRVAgOCBjb21tZW50cworICAgICAgICBiID0gIiIicmVsb2FkKCBhICkgICMgY29tbWVudCIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApICAjIGNvbW1lbnQiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3Rfc3BhY2Uoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSApIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIiIicmVsb2FkKCBhKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZCggYSkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgIGIgPSAiIiJyZWxvYWQoYSApIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKGEgKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CisgICAgICAgIHMgPSAiIiJyZWxvYWQoYT0xKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgZykiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICpoKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoZiwgKmgsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCpoLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqaCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCoqaSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKwogY2xhc3MgVGVzdF9pbnRlcm4oRml4ZXJUZXN0Q2FzZSk6CiAgICAgZml4ZXIgPSAiaW50ZXJuIgogCkBAIC00NTc2LDMgKzQ2MzUsNTMgQEAKICAgICBkZWYgdGVzdF91bmNoYW5nZWQoc2VsZik6CiAgICAgICAgIHMgPSAiIiJmKHN5cy5leGl0ZnVuYykiIiIKICAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworCitjbGFzcyBUZXN0X2Fzc2VydHMoRml4ZXJUZXN0Q2FzZSk6CisKKyAgICBmaXhlciA9ICJhc3NlcnRzIgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9uYW1lcyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0XyhUcnVlKScsICdzZWxmLmFzc2VydFRydWUoVHJ1ZSknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMiknLCAnc2VsZi5hc3NlcnRFcXVhbCgyLCAyKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydE5vdEVxdWFscygyLCAzKScsICdzZWxmLmFzc2VydE5vdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWxzKDIsIDMpJywgJ3NlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbHMoMiwgOCknLCAnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgyLCA4KScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NFcXVhbCgyLCAyKScsICdzZWxmLmFzc2VydEVxdWFsKDIsIDIpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmRXF1YWwoMiwgMyknLCAnc2VsZi5hc3NlcnROb3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCgyLCAzKScsICdzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmQWxtb3N0RXF1YWwoMiwgOCknLCAnc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgyLCA4KScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3MoVHJ1ZSknLCAnc2VsZi5hc3NlcnRUcnVlKFRydWUpJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbFVubGVzc1JhaXNlcyhmb28pJywgJ3NlbGYuYXNzZXJ0UmFpc2VzKGZvbyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsSWYoRmFsc2UpJywgJ3NlbGYuYXNzZXJ0RmFsc2UoRmFsc2UpJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGIsIGEgaW4gdGVzdHM6CisgICAgICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICBkZWYgdGVzdF92YXJpYW50cyhzZWxmKToKKyAgICAgICAgYiA9ICdlcSA9IHNlbGYuYXNzZXJ0RXF1YWxzJworICAgICAgICBhID0gJ2VxID0gc2VsZi5hc3NlcnRFcXVhbCcKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDMsIG1zZz0iZmFpbCIpJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMywgbXNnPSJmYWlsIiknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscygyLCAzLCBtc2c9ImZhaWwiKSAjIGZvbycKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsKDIsIDMsIG1zZz0iZmFpbCIpICMgZm9vJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMgKDIsIDMpJworICAgICAgICBhID0gJ3NlbGYuYXNzZXJ0RXF1YWwgKDIsIDMpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnICBzZWxmLmFzc2VydEVxdWFscyAoMiwgMyknCisgICAgICAgIGEgPSAnICBzZWxmLmFzc2VydEVxdWFsICgyLCAzKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3dpdGggc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEV4cGxvc2lvbik6IGV4cGxvZGUoKScKKyAgICAgICAgYSA9ICd3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGxvc2lvbik6IGV4cGxvZGUoKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3dpdGggc2VsZi5mYWlsVW5sZXNzUmFpc2VzKEV4cGxvc2lvbikgYXMgY206IGV4cGxvZGUoKScKKyAgICAgICAgYSA9ICd3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4cGxvc2lvbikgYXMgY206IGV4cGxvZGUoKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzZWxmLnVuY2hhbmdlZCgnc2VsZi5hc3NlcnRFcXVhbHNPblNhdHVyZGF5JykKKyAgICAgICAgc2VsZi51bmNoYW5nZWQoJ3NlbGYuYXNzZXJ0RXF1YWxzT25TYXR1cmRheSgzLCA1KScpCmRpZmYgLS1naXQgYS9MaWIvbGluZWNhY2hlLnB5IGIvTGliL2xpbmVjYWNoZS5weQppbmRleCBjM2YyYzNmLi4wMmE5ZWI1IDEwMDY0NAotLS0gYS9MaWIvbGluZWNhY2hlLnB5CisrKyBiL0xpYi9saW5lY2FjaGUucHkKQEAgLTU5LDcgKzU5LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlICAgIyBuby1vcCBmb3IgZmlsZXMgbG9hZGVkIHZpYSBhIF9fbG9hZGVyX18KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBkZWwgY2FjaGVbZmlsZW5hbWVdCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBzaXplICE9IHN0YXQuc3Rfc2l6ZSBvciBtdGltZSAhPSBzdGF0LnN0X210aW1lOgpAQCAtOTEsNyArOTEsNyBAQAogICAgICAgICAgICAgaWYgbmFtZSBhbmQgZ2V0X3NvdXJjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRfc291cmNlKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgSU9FcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CkBAIC0xMTgsMTQgKzExOCwxNCBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5zdGF0KGZ1bGxuYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICB0cnk6CiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmdWxsbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBbXQogICAgIGlmIGxpbmVzIGFuZCBub3QgbGluZXNbLTFdLmVuZHN3aXRoKCdcbicpOgogICAgICAgICBsaW5lc1stMV0gKz0gJ1xuJwpkaWZmIC0tZ2l0IGEvTGliL2xvY2FsZS5weSBiL0xpYi9sb2NhbGUucHkKaW5kZXggZDJhODg1ZC4uMmU4MmM5NSAxMDA2NDQKLS0tIGEvTGliL2xvY2FsZS5weQorKysgYi9MaWIvbG9jYWxlLnB5CkBAIC01NTQsOCArNTU0LDggQEAKICAgICAjIE9uIFdpbjMyLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBBTlNJIGNvZGUgcGFnZQogICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBjaGFyc2V0IHRoYXQgdGhlIHVzZXIgaXMgbGlrZWx5IHVzaW5nLiIiIgotICAgICAgICBpbXBvcnQgX2xvY2FsZQotICAgICAgICByZXR1cm4gX2xvY2FsZS5fZ2V0ZGVmYXVsdGxvY2FsZSgpWzFdCisgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZQorICAgICAgICByZXR1cm4gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiBlbHNlOgogICAgICMgT24gVW5peCwgaWYgQ09ERVNFVCBpcyBhdmFpbGFibGUsIHVzZSB0aGF0LgogICAgIHRyeToKQEAgLTU3NCwyNyArNTc0LDE2IEBACiAgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUgPSBUcnVlKToKICAgICAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZywKICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uIiIiCisgICAgICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKICAgICAgICAgICAgIGlmIGRvX3NldGxvY2FsZToKICAgICAgICAgICAgICAgICBvbGRsb2MgPSBzZXRsb2NhbGUoTENfQ1RZUEUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICIiKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICMgd2hlbiB0aGUgc2V0dGluZyBoYXMgYW4gaW52YWxpZCB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgIyBEZWZhdWx0IHRvIFVURi04IGluIHRoYXQgY2FzZSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCi0gICAgICAgICAgICAgICAgICAgICMgcmV0dXJuaW5nIG5vdGhpbmcgd2lsbCBjcmFzaCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBpbnRlcnByZXRlci4KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmVzdWx0ID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCisgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCBvbGRsb2MpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5sX2xhbmdpbmZvKENPREVTRVQpCi0gICAgICAgICAgICAgICAgaWYgbm90IHJlc3VsdCBhbmQgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgICAgICAjIFNlZSBhYm92ZSBmb3IgZXhwbGFuYXRpb24KLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5IGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKaW5kZXggN2Y5NGUzOS4uOWI0MWI5ZCAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKKysrIGIvTGliL2xvZ2dpbmcvX19pbml0X18ucHkKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHRoZSBmcmFtZSBvYmplY3QgZm9yIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZS4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKIAogIyBfc3JjZmlsZSBpcyBvbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzeXMuX2dldGZyYW1lKCkuCkBAIC0xMjMsMjAgKzEyMywyMiBAQAogREVCVUcgPSAxMAogTk9UU0VUID0gMAogCi1fbGV2ZWxOYW1lcyA9IHsKLSAgICBDUklUSUNBTCA6ICdDUklUSUNBTCcsCi0gICAgRVJST1IgOiAnRVJST1InLAotICAgIFdBUk5JTkcgOiAnV0FSTklORycsCi0gICAgSU5GTyA6ICdJTkZPJywKLSAgICBERUJVRyA6ICdERUJVRycsCi0gICAgTk9UU0VUIDogJ05PVFNFVCcsCi0gICAgJ0NSSVRJQ0FMJyA6IENSSVRJQ0FMLAotICAgICdFUlJPUicgOiBFUlJPUiwKLSAgICAnV0FSTicgOiBXQVJOSU5HLAotICAgICdXQVJOSU5HJyA6IFdBUk5JTkcsCi0gICAgJ0lORk8nIDogSU5GTywKLSAgICAnREVCVUcnIDogREVCVUcsCi0gICAgJ05PVFNFVCcgOiBOT1RTRVQsCitfbGV2ZWxUb05hbWUgPSB7CisgICAgQ1JJVElDQUw6ICdDUklUSUNBTCcsCisgICAgRVJST1I6ICdFUlJPUicsCisgICAgV0FSTklORzogJ1dBUk5JTkcnLAorICAgIElORk86ICdJTkZPJywKKyAgICBERUJVRzogJ0RFQlVHJywKKyAgICBOT1RTRVQ6ICdOT1RTRVQnLAorfQorX25hbWVUb0xldmVsID0geworICAgICdDUklUSUNBTCc6IENSSVRJQ0FMLAorICAgICdFUlJPUic6IEVSUk9SLAorICAgICdXQVJOJzogV0FSTklORywKKyAgICAnV0FSTklORyc6IFdBUk5JTkcsCisgICAgJ0lORk8nOiBJTkZPLAorICAgICdERUJVRyc6IERFQlVHLAorICAgICdOT1RTRVQnOiBOT1RTRVQsCiB9CiAKIGRlZiBnZXRMZXZlbE5hbWUobGV2ZWwpOgpAQCAtMTUzLDcgKzE1NSw3IEBACiAKICAgICBPdGhlcndpc2UsIHRoZSBzdHJpbmcgIkxldmVsICVzIiAlIGxldmVsIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIHJldHVybiBfbGV2ZWxOYW1lcy5nZXQobGV2ZWwsICgiTGV2ZWwgJXMiICUgbGV2ZWwpKQorICAgIHJldHVybiBfbGV2ZWxUb05hbWUuZ2V0KGxldmVsLCAoIkxldmVsICVzIiAlIGxldmVsKSkKIAogZGVmIGFkZExldmVsTmFtZShsZXZlbCwgbGV2ZWxOYW1lKToKICAgICAiIiIKQEAgLTE2Myw4ICsxNjUsOCBAQAogICAgICIiIgogICAgIF9hY3F1aXJlTG9jaygpCiAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gY2F1c2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxdID0gbGV2ZWxOYW1lCi0gICAgICAgIF9sZXZlbE5hbWVzW2xldmVsTmFtZV0gPSBsZXZlbAorICAgICAgICBfbGV2ZWxUb05hbWVbbGV2ZWxdID0gbGV2ZWxOYW1lCisgICAgICAgIF9uYW1lVG9MZXZlbFtsZXZlbE5hbWVdID0gbGV2ZWwKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCkBAIC0xNzIsOSArMTc0LDkgQEAKICAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgogICAgICAgICBydiA9IGxldmVsCiAgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgotICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbmFtZVRvTGV2ZWw6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKLSAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICAgICAgcnYgPSBfbmFtZVRvTGV2ZWxbbGV2ZWxdCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCiAgICAgcmV0dXJuIHJ2CkBAIC04ODAsMTYgKzg4MiwzMCBAQAogICAgICAgICBUaGUgcmVjb3JkIHdoaWNoIHdhcyBiZWluZyBwcm9jZXNzZWQgaXMgcGFzc2VkIGluIHRvIHRoaXMgbWV0aG9kLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcmFpc2VFeGNlcHRpb25zIGFuZCBzeXMuc3RkZXJyOiAgIyBzZWUgaXNzdWUgMTM4MDcKLSAgICAgICAgICAgIGVpID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIHQsIHYsIHRiID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKGVpWzBdLCBlaVsxXSwgZWlbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBzeXMuc3RkZXJyKQotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0xvZ2dlZCBmcm9tIGZpbGUgJXMsIGxpbmUgJXNcbicgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuZmlsZW5hbWUsIHJlY29yZC5saW5lbm8pKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6ICNwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLS0tIExvZ2dpbmcgZXJyb3IgLS0tXG4nKQorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24odCwgdiwgdGIsIE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnQ2FsbCBzdGFjazpcbicpCisgICAgICAgICAgICAgICAgIyBXYWxrIHRoZSBzdGFjayBmcmFtZSB1cCB1bnRpbCB3ZSdyZSBvdXQgb2YgbG9nZ2luZywKKyAgICAgICAgICAgICAgICAjIHNvIGFzIHRvIHByaW50IHRoZSBjYWxsaW5nIGNvbnRleHQuCisgICAgICAgICAgICAgICAgZnJhbWUgPSB0Yi50Yl9mcmFtZQorICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZSBhbmQgb3MucGF0aC5kaXJuYW1lKGZyYW1lLmZfY29kZS5jb19maWxlbmFtZSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgX19wYXRoX19bMF0pOgorICAgICAgICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLmZfYmFjaworICAgICAgICAgICAgICAgIGlmIGZyYW1lOgorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2soZnJhbWUsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGNvdWxkbid0IGZpbmQgdGhlIHJpZ2h0IHN0YWNrIGZyYW1lLCBmb3Igc29tZSByZWFzb24KKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnTG9nZ2VkIGZyb20gZmlsZSAlcywgbGluZSAlc1xuJyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuZmlsZW5hbWUsIHJlY29yZC5saW5lbm8pKQorICAgICAgICAgICAgICAgICMgSXNzdWUgMTg2NzE6IG91dHB1dCBsb2dnaW5nIG1lc3NhZ2UgYW5kIGFyZ3VtZW50cworICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01lc3NhZ2U6ICVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXJndW1lbnRzOiAlc1xuJyAlIChyZWNvcmQubXNnLCByZWNvcmQuYXJncykpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIGVpCisgICAgICAgICAgICAgICAgZGVsIHQsIHYsIHRiCiAKIGNsYXNzIFN0cmVhbUhhbmRsZXIoSGFuZGxlcik6CiAgICAgIiIiCkBAIC05MzksOSArOTU1LDcgQEAKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShtc2cpCiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXJtaW5hdG9yKQogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEZpbGVIYW5kbGVyKFN0cmVhbUhhbmRsZXIpOgpAQCAtMTgzMyw3ICsxODQ3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgaC5hY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAogICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKICAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdApAQCAtMTg0MSw3ICsxODU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIGgucmVsZWFzZSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0OiAjIGlnbm9yZSBldmVyeXRoaW5nLCBhcyB3ZSdyZSBzaHV0dGluZyBkb3duCiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggMTg4MDYxNC4uYjg4MmE2MiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtNjEsMTEgKzYxLDE0IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi0gICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgotICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShmbmFtZSwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcik6CisgICAgICAgIGNwID0gZm5hbWUKICAgICBlbHNlOgotICAgICAgICBjcC5yZWFkKGZuYW1lKQorICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCisgICAgICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3AucmVhZChmbmFtZSkKIAogICAgIGZvcm1hdHRlcnMgPSBfY3JlYXRlX2Zvcm1hdHRlcnMoY3ApCiAKQEAgLTE0MSw3ICsxNDQsNyBAQAogICAgICAgICBoID0ga2xhc3MoKmFyZ3MpCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgICAgIGguc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGlmIGxlbihmbXQpOgogICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyc1tmbXRdKQogICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpOgpAQCAtMTg4LDcgKzE5MSw3IEBACiAgICAgbG9nID0gcm9vdAogICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgbG9nLnNldExldmVsKGxldmVsKQogICAgIGZvciBoIGluIHJvb3QuaGFuZGxlcnNbOl06CiAgICAgICAgIHJvb3QucmVtb3ZlSGFuZGxlcihoKQogICAgIGhsaXN0ID0gc2VjdGlvblsiaGFuZGxlcnMiXQpAQCAtMjM0LDcgKzIzNyw3IEBACiAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUocW4pCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgICAgICBmb3IgaCBpbiBsb2dnZXIuaGFuZGxlcnNbOl06CiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCkBAIC03MjksNiArNzMyLDcgQEAKICAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgogICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKICAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBwcm9wcyA9IGNvbmZpZy5wb3AoJy4nLCBOb25lKQogICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQpAQCAtNzQ3LDYgKzc1MSw5IEBACiAgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCiAgICAgICAgIGlmIGZpbHRlcnM6CiAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CkBAIC03OTUsNyArODAyLDcgQEAKICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKLWRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgorZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwogICAgIGNvbmZpZ3VyYXRpb25zLgpAQCAtODA0LDYgKzgxMSwxNSBAQAogICAgIFJldHVybnMgYSBUaHJlYWQgb2JqZWN0IG9uIHdoaWNoIHlvdSBjYW4gY2FsbCBzdGFydCgpIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIsCiAgICAgYW5kIHdoaWNoIHlvdSBjYW4gam9pbigpIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KKworICAgIFVzZSB0aGUgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byB2ZXJpZnkgYW55IGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgd2lyZQorICAgIGZyb20gYSBjbGllbnQuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVjZWl2ZXMgYQorICAgIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBieXRlcyBvZiBjb25maWd1cmF0aW9uIGRhdGEgcmVjZWl2ZWQgYWNyb3NzIHRoZQorICAgIG5ldHdvcmsgLSBhbmQgaXQgc2hvdWxkIHJldHVybiBlaXRoZXIgYGBOb25lYGAsIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgcGFzc2VkIGluIGJ5dGVzIGNvdWxkIG5vdCBiZSB2ZXJpZmllZCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgb3IgYQorICAgIGJ5dGUgc3RyaW5nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hY2hpbmVyeSBhcworICAgIG5vcm1hbC4gTm90ZSB0aGF0IHlvdSBjYW4gcmV0dXJuIHRyYW5zZm9ybWVkIGJ5dGVzLCBlLmcuIGJ5IGRlY3J5cHRpbmcKKyAgICB0aGUgYnl0ZXMgcGFzc2VkIGluLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6ICNwcmFnbWE6IG5vIGNvdmVyCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKQEAgLTgzMSwyNSArODQ3LDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgidXRmLTgiKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGRpY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci52ZXJpZnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc2VydmVyLnZlcmlmeShjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaXMgbm90IE5vbmU6ICAgIyB2ZXJpZmllZCwgY2FuIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLmFyZ3MsIHR1cGxlKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtODY1LDEzICs4ODIsMTQgQEAKICAgICAgICAgYWxsb3dfcmV1c2VfYWRkcmVzcyA9IDEKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nbG9jYWxob3N0JywgcG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsCi0gICAgICAgICAgICAgICAgICAgICBoYW5kbGVyPU5vbmUsIHJlYWR5PU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lLCByZWFkeT1Ob25lLCB2ZXJpZnk9Tm9uZSk6CiAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQogICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICAgICAgc2VsZi5hYm9ydCA9IDAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlbGYudGltZW91dCA9IDEKICAgICAgICAgICAgIHNlbGYucmVhZHkgPSByZWFkeQorICAgICAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKIAogICAgICAgICBkZWYgc2VydmVfdW50aWxfc3RvcHBlZChzZWxmKToKICAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKQEAgLTg4OSwxNiArOTA3LDE4IEBACiAKICAgICBjbGFzcyBTZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6CiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmN2ciwgaGRsciwgcG9ydCwgdmVyaWZ5KToKICAgICAgICAgICAgIHN1cGVyKFNlcnZlciwgc2VsZikuX19pbml0X18oKQogICAgICAgICAgICAgc2VsZi5yY3ZyID0gcmN2cgogICAgICAgICAgICAgc2VsZi5oZGxyID0gaGRscgogICAgICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKICAgICAgICAgICAgIHNlbGYucmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQogCiAgICAgICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLnJjdnIocG9ydD1zZWxmLnBvcnQsIGhhbmRsZXI9c2VsZi5oZGxyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk9c2VsZi5yZWFkeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJpZnk9c2VsZi52ZXJpZnkpCiAgICAgICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0KICAgICAgICAgICAgIHNlbGYucmVhZHkuc2V0KCkKQEAgLTkwOCw3ICs5MjgsNyBAQAogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogICAgICAgICAgICAgc2VydmVyLnNlcnZlX3VudGlsX3N0b3BwZWQoKQogCi0gICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCkKKyAgICByZXR1cm4gU2VydmVyKENvbmZpZ1NvY2tldFJlY2VpdmVyLCBDb25maWdTdHJlYW1IYW5kbGVyLCBwb3J0LCB2ZXJpZnkpCiAKIGRlZiBzdG9wTGlzdGVuaW5nKCk6CiAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weSBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CmluZGV4IGRkZWM3ZGQuLmIyZTdkNDQgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CisrKyBiL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5CkBAIC03Miw5ICs3Miw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLnNob3VsZFJvbGxvdmVyKHJlY29yZCk6CiAgICAgICAgICAgICAgICAgc2VsZi5kb1JvbGxvdmVyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuRmlsZUhhbmRsZXIuZW1pdChzZWxmLCByZWNvcmQpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgcm90YXRpb25fZmlsZW5hbWUoc2VsZiwgZGVmYXVsdF9uYW1lKToKQEAgLTIwMSwxMSArMTk5LDEyIEBACiAgICAgSWYgYmFja3VwQ291bnQgaXMgPiAwLCB3aGVuIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXBDb3VudAogICAgIGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlLCB1dGM9RmFsc2UsIGF0VGltZT1Ob25lKToKICAgICAgICAgQmFzZVJvdGF0aW5nSGFuZGxlci5fX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgJ2EnLCBlbmNvZGluZywgZGVsYXkpCiAgICAgICAgIHNlbGYud2hlbiA9IHdoZW4udXBwZXIoKQogICAgICAgICBzZWxmLmJhY2t1cENvdW50ID0gYmFja3VwQ291bnQKICAgICAgICAgc2VsZi51dGMgPSB1dGMKKyAgICAgICAgc2VsZi5hdFRpbWUgPSBhdFRpbWUKICAgICAgICAgIyBDYWxjdWxhdGUgdGhlIHJlYWwgcm9sbG92ZXIgaW50ZXJ2YWwsIHdoaWNoIGlzIGp1c3QgdGhlIG51bWJlciBvZgogICAgICAgICAjIHNlY29uZHMgYmV0d2VlbiByb2xsb3ZlcnMuICBBbHNvIHNldCB0aGUgZmlsZW5hbWUgc3VmZml4IHVzZWQgd2hlbgogICAgICAgICAjIGEgcm9sbG92ZXIgb2NjdXJzLiAgQ3VycmVudCAnd2hlbicgZXZlbnRzIHN1cHBvcnRlZDoKQEAgLTI3NSw5ICsyNzQsMjIgQEAKICAgICAgICAgICAgIGN1cnJlbnRIb3VyID0gdFszXQogICAgICAgICAgICAgY3VycmVudE1pbnV0ZSA9IHRbNF0KICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQgPSB0WzVdCi0gICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIG1pZG5pZ2h0Ci0gICAgICAgICAgICByID0gX01JRE5JR0hUIC0gKChjdXJyZW50SG91ciAqIDYwICsgY3VycmVudE1pbnV0ZSkgKiA2MCArCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQpCisgICAgICAgICAgICBjdXJyZW50RGF5ID0gdFs2XQorICAgICAgICAgICAgIyByIGlzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBsZWZ0IGJldHdlZW4gbm93IGFuZCB0aGUgbmV4dCByb3RhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi5hdFRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSBfTUlETklHSFQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcm90YXRlX3RzID0gKChzZWxmLmF0VGltZS5ob3VyICogNjAgKyBzZWxmLmF0VGltZS5taW51dGUpKjYwICsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hdFRpbWUuc2Vjb25kKQorCisgICAgICAgICAgICByID0gcm90YXRlX3RzIC0gKChjdXJyZW50SG91ciAqIDYwICsgY3VycmVudE1pbnV0ZSkgKiA2MCArCisgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGlmIHIgPCAwOgorICAgICAgICAgICAgICAgICMgUm90YXRlIHRpbWUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHRpbWUgKGZvciBleGFtcGxlIHdoZW4KKyAgICAgICAgICAgICAgICAjIHNlbGYucm90YXRlQXQgaXMgMTM6NDUgYW5kIGl0IG5vdyAxNDoxNSksIHJvdGF0aW9uIGlzCisgICAgICAgICAgICAgICAgIyB0b21vcnJvdy4KKyAgICAgICAgICAgICAgICByICs9IF9NSUROSUdIVAorICAgICAgICAgICAgICAgIGN1cnJlbnREYXkgPSAoY3VycmVudERheSArIDEpICUgNwogICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudFRpbWUgKyByCiAgICAgICAgICAgICAjIElmIHdlIGFyZSByb2xsaW5nIG92ZXIgb24gYSBjZXJ0YWluIGRheSwgYWRkIGluIHRoZSBudW1iZXIgb2YgZGF5cyB1bnRpbAogICAgICAgICAgICAgIyB0aGUgbmV4dCByb2xsb3ZlciwgYnV0IG9mZnNldCBieSAxIHNpbmNlIHdlIGp1c3QgY2FsY3VsYXRlZCB0aGUgdGltZQpAQCAtMjk1LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAjIFRoaXMgaXMgYmVjYXVzZSB0aGUgYWJvdmUgdGltZSBjYWxjdWxhdGlvbiB0YWtlcyB1cyB0byBtaWRuaWdodCBvbiB0aGlzCiAgICAgICAgICAgICAjIGRheSwgaS5lLiB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGF5LgogICAgICAgICAgICAgaWYgc2VsZi53aGVuLnN0YXJ0c3dpdGgoJ1cnKToKLSAgICAgICAgICAgICAgICBkYXkgPSB0WzZdICMgMCBpcyBNb25kYXkKKyAgICAgICAgICAgICAgICBkYXkgPSBjdXJyZW50RGF5ICMgMCBpcyBNb25kYXkKICAgICAgICAgICAgICAgICBpZiBkYXkgIT0gc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRheSA8IHNlbGYuZGF5T2ZXZWVrOgogICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1RvV2FpdCA9IHNlbGYuZGF5T2ZXZWVrIC0gZGF5CkBAIC00NDQsMTEgKzQ1Niw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgc3RhdCB0aGUgZmlsZSBieSBwYXRoLCBjaGVja2luZyBmb3IgZXhpc3RlbmNlCiAgICAgICAgICAgICBzcmVzID0gb3Muc3RhdChzZWxmLmJhc2VGaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBzcmVzID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzcmVzID0gTm9uZQogICAgICAgICAjIGNvbXBhcmUgZmlsZSBzeXN0ZW0gc3RhdCB3aXRoIHRoYXQgb2Ygb3VyIHN0cmVhbSBmaWxlIGhhbmRsZQogICAgICAgICBpZiBub3Qgc3JlcyBvciBzcmVzW1NUX0RFVl0gIT0gc2VsZi5kZXYgb3Igc3Jlc1tTVF9JTk9dICE9IHNlbGYuaW5vOgogICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW0gaXMgbm90IE5vbmU6CkBAIC00ODUsNiArNDk0LDEwIEBACiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgaWYgcG9ydCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKGhvc3QsIHBvcnQpCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5jbG9zZU9uRXJyb3IgPSBGYWxzZQogICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUKQEAgLTUwMCwxNSArNTEzLDE3IEBACiAgICAgICAgIEEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZSBwcmVjaXNlCiAgICAgICAgIHR5cGUgb2Ygc29ja2V0IHRoZXkgd2FudC4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGlmIGhhc2F0dHIocywgJ3NldHRpbWVvdXQnKToKLSAgICAgICAgICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6Ci0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzZWxmLmFkZHJlc3MsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvbm5lY3Qoc2VsZi5hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNsb3NlKCkgICMgSXNzdWUgMTkxODIKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTUyOCw3ICs1NDMsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYubWFrZVNvY2tldCgpCiAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVRpbWUgPSBOb25lICMgbmV4dCB0aW1lLCBubyBkZWxheSBiZWZvcmUgdHJ5aW5nCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgI0NyZWF0aW9uIGZhaWxlZCwgc28gc2V0IHRoZSByZXRyeSB0aW1lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXRyeVRpbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVBlcmlvZCA9IHNlbGYucmV0cnlTdGFydApAQCAtNTUyLDE2ICs1NjcsOCBAQAogICAgICAgICAjYnV0IGFyZSBzdGlsbCB1bmFibGUgdG8gY29ubmVjdC4KICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5zb2NrLCAic2VuZGFsbCIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQotICAgICAgICAgICAgICAgIGVsc2U6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlbihzKQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZWZ0ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgPSBzZWxmLnNvY2suc2VuZChzW3NlbnRzb2ZhcjpdKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gc2VudHNvZmFyICsgc2VudAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgLSBzZW50Ci0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUgICMgc28gd2UgY2FuIGNhbGwgY3JlYXRlU29ja2V0IG5leHQgdGltZQogCkBAIC02MTEsOSArNjE4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNlbGYubWFrZVBpY2tsZShyZWNvcmQpCiAgICAgICAgICAgICBzZWxmLnNlbmQocykKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTY1Miw3ICs2NTcsMTEgQEAKICAgICAgICAgVGhlIGZhY3RvcnkgbWV0aG9kIG9mIFNvY2tldEhhbmRsZXIgaXMgaGVyZSBvdmVycmlkZGVuIHRvIGNyZWF0ZQogICAgICAgICBhIFVEUCBzb2NrZXQgKFNPQ0tfREdSQU0pLgogICAgICAgICAiIiIKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBpZiBzZWxmLnBvcnQgaXMgTm9uZToKKyAgICAgICAgICAgIGZhbWlseSA9IHNvY2tldC5BRl9VTklYCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYW1pbHkgPSBzb2NrZXQuQUZfSU5FVAorICAgICAgICBzID0gc29ja2V0LnNvY2tldChmYW1pbHksIHNvY2tldC5TT0NLX0RHUkFNKQogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIHNlbmQoc2VsZiwgcyk6CkBAIC02NjUsNyArNjc0LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuc29jayBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5jcmVhdGVTb2NrZXQoKQotICAgICAgICBzZWxmLnNvY2suc2VuZHRvKHMsIChzZWxmLmhvc3QsIHNlbGYucG9ydCkpCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8ocywgc2VsZi5hZGRyZXNzKQogCiBjbGFzcyBTeXNMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CiAgICAgIiIiCkBAIC03NzcsNyArNzg2LDExIEBACiAKICAgICAgICAgSWYgYWRkcmVzcyBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcsIGEgVU5JWCBzb2NrZXQgaXMgdXNlZC4gVG8gbG9nIHRvIGEKICAgICAgICAgbG9jYWwgc3lzbG9nZCwgIlN5c0xvZ0hhbmRsZXIoYWRkcmVzcz0iL2Rldi9sb2ciKSIgY2FuIGJlIHVzZWQuCi0gICAgICAgIElmIGZhY2lsaXR5IGlzIG5vdCBzcGVjaWZpZWQsIExPR19VU0VSIGlzIHVzZWQuCisgICAgICAgIElmIGZhY2lsaXR5IGlzIG5vdCBzcGVjaWZpZWQsIExPR19VU0VSIGlzIHVzZWQuIElmIHNvY2t0eXBlIGlzCisgICAgICAgIHNwZWNpZmllZCBhcyBzb2NrZXQuU09DS19ER1JBTSBvciBzb2NrZXQuU09DS19TVFJFQU0sIHRoYXQgc3BlY2lmaWMKKyAgICAgICAgc29ja2V0IHR5cGUgd2lsbCBiZSB1c2VkLiBGb3IgVW5peCBzb2NrZXRzLCB5b3UgY2FuIGFsc28gc3BlY2lmeSBhCisgICAgICAgIHNvY2t0eXBlIG9mIE5vbmUsIGluIHdoaWNoIGNhc2Ugc29ja2V0LlNPQ0tfREdSQU0gd2lsbCBiZSB1c2VkLCBmYWxsaW5nCisgICAgICAgIGJhY2sgdG8gc29ja2V0LlNPQ0tfU1RSRUFNLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAKQEAgLTgwNyw3ICs4MjAsNyBAQAogICAgICAgICAgICAgc2VsZi5zb2NrZXQuY29ubmVjdChhZGRyZXNzKQogICAgICAgICAgICAgIyBpdCB3b3JrZWQsIHNvIHNldCBzZWxmLnNvY2t0eXBlIHRvIHRoZSB1c2VkIHR5cGUKICAgICAgICAgICAgIHNlbGYuc29ja3R5cGUgPSB1c2Vfc29ja3R5cGUKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICBpZiBzZWxmLnNvY2t0eXBlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICMgdXNlciBkaWRuJ3Qgc3BlY2lmeSBmYWxsaW5nIGJhY2ssIHNvIGZhaWwKQEAgLTgxOCw3ICs4MzEsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKICAgICAgICAgICAgICAgICAjIGl0IHdvcmtlZCwgc28gc2V0IHNlbGYuc29ja3R5cGUgdG8gdGhlIHVzZWQgdHlwZQogICAgICAgICAgICAgICAgIHNlbGYuc29ja3R5cGUgPSB1c2Vfc29ja3R5cGUKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtODcxLDEwICs4ODQsOSBAQAogICAgICAgICAgICAgbXNnID0gc2VsZi5pZGVudCArIG1zZwogICAgICAgICBpZiBzZWxmLmFwcGVuZF9udWw6CiAgICAgICAgICAgICBtc2cgKz0gJ1wwMDAnCi0gICAgICAgICIiIgotICAgICAgICBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCi0gICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotICAgICAgICAiIiIKKworICAgICAgICAjIFdlIG5lZWQgdG8gY29udmVydCByZWNvcmQgbGV2ZWwgdG8gbG93ZXJjYXNlLCBtYXliZSB0aGlzIHdpbGwKKyAgICAgICAgIyBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSkKICAgICAgICAgcHJpbyA9IHByaW8uZW5jb2RlKCd1dGYtOCcpCkBAIC04ODUsNyArODk3LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYudW5peHNvY2tldDoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmQobXNnKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCkBAIC04OTMsOSArOTA1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kdG8obXNnLCBzZWxmLmFkZHJlc3MpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmRhbGwobXNnKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBjbGFzcyBTTVRQSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgpAQCAtOTczLDkgKzk4Myw3IEBACiAgICAgICAgICAgICAgICAgc210cC5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkKQogICAgICAgICAgICAgc210cC5zZW5kbWFpbChzZWxmLmZyb21hZGRyLCBzZWxmLnRvYWRkcnMsIG1zZykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIE5URXZlbnRMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMDYwLDkgKzEwNjgsNyBAQAogICAgICAgICAgICAgICAgIHR5cGUgPSBzZWxmLmdldEV2ZW50VHlwZShyZWNvcmQpCiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQogICAgICAgICAgICAgICAgIHNlbGYuX3dlbHUuUmVwb3J0RXZlbnQoc2VsZi5hcHBuYW1lLCBpZCwgY2F0LCB0eXBlLCBbbXNnXSkKLSAgICAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtMTE0Nyw5ICsxMTUzLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYubWV0aG9kID09ICJQT1NUIjoKICAgICAgICAgICAgICAgICBoLnNlbmQoZGF0YS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgICAgICBoLmdldHJlc3BvbnNlKCkgICAgI2Nhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdAotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBjbGFzcyBCdWZmZXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMzI5LDkgKzEzMzMsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5lbnF1ZXVlKHNlbGYucHJlcGFyZShyZWNvcmQpKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBpZiB0aHJlYWRpbmc6CmRpZmYgLS1naXQgYS9MaWIvbHptYS5weSBiL0xpYi9sem1hLnB5CmluZGV4IDFhODk4ODcuLmYxZDM5NTggMTAwNjQ0Ci0tLSBhL0xpYi9sem1hLnB5CisrKyBiL0xpYi9sem1hLnB5CkBAIC01NCw5ICs1NCw5IEBACiAgICAgICAgIGJ5dGVzIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4KICAgICAgICAgYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywgb3IKLSAgICAgICAgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwKLSAgICAgICAgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgorICAgICAgICBtb2RlIGNhbiBiZSAiciIgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAidyIgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICJ4IiBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICJhIiBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICJyYiIsICJ3YiIsICJ4YiIgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgogCiAgICAgICAgIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgZmlsZS4KICAgICAgICAgSWYgbW9kZSBpcyAiciIsIHRoaXMgZGVmYXVsdHMgdG8gRk9STUFUX0FVVE8uIE90aGVyd2lzZSwgdGhlCkBAIC0xMTAsOCArMTEwLDkgQEAKICAgICAgICAgICAgICMgc3RyZWFtIHdpbGwgbmVlZCBhIHNlcGFyYXRlIGRlY29tcHJlc3NvciBvYmplY3QuCiAgICAgICAgICAgICBzZWxmLl9pbml0X2FyZ3MgPSB7ImZvcm1hdCI6Zm9ybWF0LCAiZmlsdGVycyI6ZmlsdGVyc30KICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCi0gICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ3IiwgIndiIiwgImEiLCAiYWIiLCAieCIsICJ4YiIpOgogICAgICAgICAgICAgaWYgZm9ybWF0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRk9STUFUX1haCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQpAQCAtMTQzLDcgKzE0NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgZWxpZiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQpAQCAtMTg3LDE1ICsxODgsMTggQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogCiAgICAgZGVmIF9jaGVja19jYW5fcmVhZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHJlYWRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fd3JpdGUoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciB3cml0aW5nIikKIAogICAgIGRlZiBfY2hlY2tfY2FuX3NlZWsoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnJlYWRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJTZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBmaWxlcyBvcGVuIGZvciByZWFkaW5nIikKICAgICAgICAgaWYgbm90IHNlbGYuX2ZwLnNlZWthYmxlKCk6CkBAIC0yMDQsMTYgKzIwOCwxMyBAQAogCiAgICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KICAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKICAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGE6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKQEAgLTIzNiwzMCArMjM3LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaykKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIFJlYWQgZGF0YSB1bnRpbCBFT0YuCiAgICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KICAgICBkZWYgX3JlYWRfYWxsKHNlbGYsIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKwogICAgICAgICBibG9ja3MgPSBbXQogICAgICAgICB3aGlsZSBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChzZWxmLl9idWZmZXIpCiAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKHNlbGYuX2J1ZmZlcikKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihibG9ja3MpCiAKICAgICAjIFJlYWQgYSBibG9jayBvZiB1cCB0byBuIGJ5dGVzLgogICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCiAgICAgZGVmIF9yZWFkX2Jsb2NrKHNlbGYsIG4sIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIElmIHdlIGhhdmUgZW5vdWdoIGRhdGEgYnVmZmVyZWQsIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICAgICAgZW5kID0gc2VsZi5fYnVmZmVyX29mZnNldCArIG4KKyAgICAgICAgaWYgZW5kIDw9IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDogZW5kXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IGVuZAorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEgaWYgcmV0dXJuX2RhdGEgZWxzZSBOb25lCisKKyAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisKICAgICAgICAgYmxvY2tzID0gW10KICAgICAgICAgd2hpbGUgbiA+IDAgYW5kIHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICBpZiBuIDwgbGVuKHNlbGYuX2J1ZmZlcik6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcls6bl0KLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbbjpdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IG4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKICAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoZGF0YSkKICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKQEAgLTI3NCw5ICsyOTMsOSBAQAogICAgICAgICBUaGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGlzIHVuc3BlY2lmaWVkLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcgorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQogCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KQEAgLTI4NSw3ICszMDQsNyBAQAogICAgICAgICBSZXR1cm5zIGIiIiBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGF0IEVPRi4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvciBzaXplID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgZWxpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FsbCgpCkBAIC0zMDIsMTggKzMyMSw0MCBAQAogICAgICAgICAjIHRoaXMgZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBtYWtlIHByb2dyZXNzLgogICAgICAgICAjIEluIHRoaXMgY2FzZSB3ZSBtYWtlIG11bHRpcGxlIHJlYWRzLCB0byBhdm9pZCByZXR1cm5pbmcgYiIiLgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIChzaXplID09IDAgb3Igc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvcgotICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpOgorICAgICAgICBpZiAoc2l6ZSA9PSAwIG9yCisgICAgICAgICAgICAjIE9ubHkgY2FsbCBfZmlsbF9idWZmZXIoKSBpZiB0aGUgYnVmZmVyIGlzIGFjdHVhbGx5IGVtcHR5LgorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgc3BlZWR1cCBpZiAqc2l6ZSogaXMgc21hbGwuCisgICAgICAgICAgICAoc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKSBhbmQgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgaWYgMCA8IHNpemUgPCBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOnNpemVdCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2l6ZTpdCisgICAgICAgIGlmIHNpemUgPiAwOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArIHNpemVdCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICs9IGxlbihkYXRhKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQogICAgICAgICByZXR1cm4gZGF0YQogCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGEgbGluZSBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKworICAgICAgICBUaGUgdGVybWluYXRpbmcgbmV3bGluZSAoaWYgcHJlc2VudCkgaXMgcmV0YWluZWQuIElmIHNpemUgaXMKKyAgICAgICAgbm9uLW5lZ2F0aXZlLCBubyBtb3JlIHRoYW4gc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQgKGluIHdoaWNoCisgICAgICAgIGNhc2UgdGhlIGxpbmUgbWF5IGJlIGluY29tcGxldGUpLiBSZXR1cm5zIGInJyBpZiBhbHJlYWR5IGF0IEVPRi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKKyAgICAgICAgIyBTaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIC0gdGhlIHdob2xlIGxpbmUgaXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXIuZmluZChiIlxuIiwgc2VsZi5fYnVmZmVyX29mZnNldCkgKyAxCisgICAgICAgICAgICBpZiBlbmQgPiAwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS5yZWFkbGluZShzZWxmLCBzaXplKQorCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJXcml0ZSBhIGJ5dGVzIG9iamVjdCB0byB0aGUgZmlsZS4KIApAQCAtMzMzLDcgKzM3NCw4IEBACiAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFECiAgICAgICAgIHNlbGYuX3BvcyA9IDAKICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKIAogICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPTApOgogICAgICAgICAiIiJDaGFuZ2UgdGhlIGZpbGUgcG9zaXRpb24uCkBAIC0zNzIsOCArNDE0LDcgQEAKICAgICAgICAgICAgIG9mZnNldCAtPSBzZWxmLl9wb3MKIAogICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgZGF0YSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KLSAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9SRUFEX0VPRjoKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmVhZF9ibG9jayhvZmZzZXQsIHJldHVybl9kYXRhPUZhbHNlKQogCiAgICAgICAgIHJldHVybiBzZWxmLl9wb3MKIApAQCAtMzg4LDIzICs0MjksMjUgQEAKICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgogICAgICIiIk9wZW4gYW4gTFpNQS1jb21wcmVzc2VkIGZpbGUgaW4gYmluYXJ5IG9yIHRleHQgbW9kZS4KIAotICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwKLSAgICBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0Ci0gICAgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgorICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMKKyAgICBvYmplY3QpLCBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuCisgICAgZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiAoZGVmYXVsdCksICJ3IiwgIndiIiwgImEiLCBvciAiYWIiIGZvcgotICAgIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiIChkZWZhdWx0KSwgInciLCAid2IiLCAieCIsICJ4YiIsCisgICAgImEiLCBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0Iiwgb3IgImF0IiBmb3IgdGV4dAorICAgIG1vZGUuCiAKLSAgICBUaGUgZm9ybWF0LCBjaGVjaywgcHJlc2V0IGFuZCBmaWx0ZXJzIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbgotICAgIHNldHRpbmdzLCBhcyBmb3IgTFpNQUNvbXByZXNzb3IsIExaTUFEZWNvbXByZXNzb3IgYW5kIExaTUFGaWxlLgorICAgIFRoZSBmb3JtYXQsIGNoZWNrLCBwcmVzZXQgYW5kIGZpbHRlcnMgYXJndW1lbnRzIHNwZWNpZnkgdGhlCisgICAgY29tcHJlc3Npb24gc2V0dGluZ3MsIGFzIGZvciBMWk1BQ29tcHJlc3NvciwgTFpNQURlY29tcHJlc3NvciBhbmQKKyAgICBMWk1BRmlsZS4KIAotICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBMWk1BRmlsZSBjb25zdHJ1Y3RvcjoKLSAgICBMWk1BRmlsZShmaWxlbmFtZSwgbW9kZSwgLi4uKS4gSW4gdGhpcyBjYXNlLCB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQKLSAgICBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KKyAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgTFpNQUZpbGUKKyAgICBjb25zdHJ1Y3RvcjogTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIExaTUFGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgotICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvciBoYW5kbGluZwotICAgIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCisgICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCisgICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAogICAgICIiIgogICAgIGlmICJ0IiBpbiBtb2RlOgpAQCAtNDM0LDcgKzQ3Nyw3IEBACiAgICAgUmVmZXIgdG8gTFpNQUNvbXByZXNzb3IncyBkb2NzdHJpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAgICAgb3B0aW9uYWwgYXJndW1lbnRzICpmb3JtYXQqLCAqY2hlY2sqLCAqcHJlc2V0KiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3IgaW5zdGVhZC4KICAgICAiIiIKICAgICBjb21wID0gTFpNQUNvbXByZXNzb3IoZm9ybWF0LCBjaGVjaywgcHJlc2V0LCBmaWx0ZXJzKQogICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCkBAIC00NDYsNyArNDg5LDcgQEAKICAgICBSZWZlciB0byBMWk1BRGVjb21wcmVzc29yJ3MgZG9jc3RyaW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgIG9wdGlvbmFsIGFyZ3VtZW50cyAqZm9ybWF0KiwgKmNoZWNrKiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhIExaTUFEZWNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BRGVjb21wcmVzc29yIGluc3RlYWQuCiAgICAgIiIiCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgd2hpbGUgVHJ1ZToKZGlmZiAtLWdpdCBhL0xpYi9tYWNwYXRoLnB5IGIvTGliL21hY3BhdGgucHkKaW5kZXggMTYxNWQ5MS4uZDM0ZjllOTQgMTAwNjQ0Ci0tLSBhL0xpYi9tYWNwYXRoLnB5CisrKyBiL0xpYi9tYWNwYXRoLnB5CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL21haWxib3gucHkgYi9MaWIvbWFpbGJveC5weQppbmRleCBkNTlkYWU4Li41ZjU5MWJjIDEwMDY0NAotLS0gYS9MaWIvbWFpbGJveC5weQorKysgYi9MaWIvbWFpbGJveC5weQpAQCAtMjIsOSArMjIsNiBAQAogaW1wb3J0IGlvCiBpbXBvcnQgY29udGV4dGxpYgogdHJ5OgotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnb3MyZW14JzoKLSAgICAgICAgIyBPUy8yIEVNWCBmY250bCgpIG5vdCBhZGVxdWF0ZQotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgogICAgIGltcG9ydCBmY250bAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGZjbnRsID0gTm9uZQpAQCAtMzQxLDExICszMzgsOCBAQAogICAgICAgICAjIFRoaXMgb3ZlcnJpZGVzIGFuIGluYXBwbGljYWJsZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgc3VwZXJjbGFzcy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5yZW1vdmUoa2V5KQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIEZpbGVOb3RGb3VuZEVycm9yKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBtZXNzYWdlKToKICAgICAgICAgIiIiUmVwbGFjZSB0aGUga2V5ZWQgbWVzc2FnZTsgcmFpc2UgS2V5RXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4iIiIKQEAgLTM3NywxNCArMzcxLDExIEBACiAgICAgZGVmIGdldF9tZXNzYWdlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIE1lc3NhZ2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgc3VicGF0aCA9IHNlbGYuX2xvb2t1cChrZXkpCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJwYXRoKSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YnBhdGgpLCAncmInKSBhcyBmOgogICAgICAgICAgICAgaWYgc2VsZi5fZmFjdG9yeToKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1zZyA9IE1haWxkaXJNZXNzYWdlKGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgc3ViZGlyLCBuYW1lID0gb3MucGF0aC5zcGxpdChzdWJwYXRoKQogICAgICAgICBtc2cuc2V0X3N1YmRpcihzdWJkaXIpCiAgICAgICAgIGlmIHNlbGYuY29sb24gaW4gbmFtZToKQEAgLTM5NCwxMSArMzg1LDggQEAKIAogICAgIGRlZiBnZXRfYnl0ZXMoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgYnl0ZXMgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2xvb2t1cChrZXkpKSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2xvb2t1cChrZXkpKSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKS5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCkBAIC01MTAsMTYgKzQ5OCwxMiBAQAogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICd0bXAnLCB1bmlxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBNYWlsZGlyLl9jb3VudCArPSAxCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZV9jYXJlZnVsbHkocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIE1haWxkaXIuX2NvdW50ICs9IDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZV9jYXJlZnVsbHkocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICMgRmFsbCB0aHJvdWdoIHRvIGhlcmUgaWYgc3RhdCBzdWNjZWVkZWQgb3Igb3BlbiByYWlzZWQgRUVYSVNULgogICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ05hbWUgY2xhc2ggcHJldmVudGVkIGZpbGUgY3JlYXRpb246ICVzJyAlCkBAIC01OTYsNyArNTgwLDcgQEAKICAgICAgICAgTWFpbGJveC5fX2luaXRfXyhzZWxmLCBwYXRoLCBmYWN0b3J5LCBjcmVhdGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgaWYgY3JlYXRlOgogICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAnd2IrJykKQEAgLTYzOSw4ICs2MjMsNyBAQAogICAgIGRlZiBpdGVya2V5cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIga2V5cy4iIiIKICAgICAgICAgc2VsZi5fbG9va3VwKCkKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl90b2Mua2V5cygpOgotICAgICAgICAgICAgeWllbGQga2V5CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fdG9jLmtleXMoKQogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUga2V5ZWQgbWVzc2FnZSBleGlzdHMsIEZhbHNlIG90aGVyd2lzZS4iIiIKQEAgLTcxOCwxMyArNzAxLDkgQEAKICAgICAgICAgb3MuY2htb2QobmV3X2ZpbGUubmFtZSwgbW9kZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCi0gICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCi0gICAgICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKKyAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKICAgICAgICAgc2VsZi5fdG9jID0gbmV3X3RvYwogICAgICAgICBzZWxmLl9wZW5kaW5nID0gRmFsc2UKQEAgLTEwMDEsNyArOTgwLDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwMTUsNyArOTk0LDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwNDEsMTIgKzEwMjAsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwNTQsOCArMTAzMyw2IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZm9yIG5hbWUsIGtleV9saXN0IGluIHNlbGYuZ2V0X3NlcXVlbmNlcygpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBrZXkgaW4ga2V5X2xpc3Q6CiAgICAgICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShuYW1lKQpAQCAtMTA2OCwxMiArMTA0NSwxMiBAQAogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYisnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgX2xvY2tfZmlsZShmKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTA4MSwxNCArMTA1OCwxMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTIwODEsNyArMjA1Niw3IEBACiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFHQUlOLCBlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdsb2NrZjogbG9jayB1bmF2YWlsYWJsZTogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKQEAgLTIwOTEsNyArMjA2Niw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJlX2xvY2sgPSBfY3JlYXRlX3RlbXBvcmFyeShmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgIHByZV9sb2NrLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBQ0NFUywgZXJybm8uRVJPRlMpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gICMgV2l0aG91dCB3cml0ZSBhY2Nlc3MsIGp1c3Qgc2tpcCBkb3Rsb2NraW5nLgogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yMTA0LDE0ICsyMDc5LDEwIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgb3MucmVuYW1lKHByZV9sb2NrLm5hbWUsIGYubmFtZSArICcubG9jaycpCiAgICAgICAgICAgICAgICAgICAgIGRvdGxvY2tfZG9uZSA9IFRydWUKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FRVhJU1Qgb3IgXAotICAgICAgICAgICAgICAgICAgKG9zLm5hbWUgPT0gJ29zMicgYW5kIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTKToKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHByZV9sb2NrLm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHByZV9sb2NrLm5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdkb3QgbG9jayB1bmF2YWlsYWJsZTogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQogICAgIGV4Y2VwdDoKICAgICAgICAgaWYgZmNudGw6CiAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX1VOKQpkaWZmIC0tZ2l0IGEvTGliL21haWxjYXAucHkgYi9MaWIvbWFpbGNhcC5weQppbmRleCA5OWY0OTU4Li5iZDYxYjBiIDEwMDY0NAotLS0gYS9MaWIvbWFpbGNhcC5weQorKysgYi9MaWIvbWFpbGNhcC5weQpAQCAtMjAsNyArMjAsNyBAQAogICAgIGZvciBtYWlsY2FwIGluIGxpc3RtYWlsY2FwZmlsZXMoKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKG1haWxjYXAsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgbW9yZWNhcHMgPSByZWFkbWFpbGNhcGZpbGUoZnApCiAgICAgICAgIGZwLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IDNlNzQyYTcuLmQ3MTYxZjggMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMzYxLDcgKzM2MSw3IEBACiBkZWYgcmVhZF9taW1lX3R5cGVzKGZpbGUpOgogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICBkYiA9IE1pbWVUeXBlcygpCiAgICAgZGIucmVhZGZwKGYsIFRydWUpCmRpZmYgLS1naXQgYS9MaWIvbW9kdWxlZmluZGVyLnB5IGIvTGliL21vZHVsZWZpbmRlci5weQppbmRleCBhMTk3YTBkLi5lYmQwNjhhIDEwMDY0NAotLS0gYS9MaWIvbW9kdWxlZmluZGVyLnB5CisrKyBiL0xpYi9tb2R1bGVmaW5kZXIucHkKQEAgLTEsMTMgKzEsMTYgQEAKICIiIkZpbmQgbW9kdWxlcyB1c2VkIGJ5IGEgc2NyaXB0LCB1c2luZyBpbnRyb3NwZWN0aW9uLiIiIgogCiBpbXBvcnQgZGlzCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IG1hcnNoYWwKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgc3RydWN0CitpbXBvcnQgd2FybmluZ3MKK3dpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgaW1wb3J0IGltcAogCiAjIFhYWCBDbGVhbiB1cCBvbmNlIHN0cjgncyBjc3RvciBtYXRjaGVzIGJ5dGVzLgogTE9BRF9DT05TVCA9IGJ5dGVzKFtkaXMub3BuYW1lLmluZGV4KCdMT0FEX0NPTlNUJyldKQpAQCAtMjI5LDcgKzIzMiw3IEBACiAgICAgICAgIGZvciBkaXIgaW4gbS5fX3BhdGhfXzoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5tc2coMiwgImNhbid0IGxpc3QgZGlyZWN0b3J5IiwgZGlyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CmluZGV4IDFmM2U2N2MuLjg2ZGY2MzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQpAQCAtOCwyNjAgKzgsMzEgQEAKICMgc3VicGFja2FnZSAnbXVsdGlwcm9jZXNzaW5nLmR1bW15JyBoYXMgdGhlIHNhbWUgQVBJIGJ1dCBpcyBhIHNpbXBsZQogIyB3cmFwcGVyIGZvciAndGhyZWFkaW5nJy4KICMKLSMgVHJ5IGNhbGxpbmcgYG11bHRpcHJvY2Vzc2luZy5kb2MubWFpbigpYCB0byByZWFkIHRoZSBodG1sCi0jIGRvY3VtZW50YXRpb24gaW4gYSB3ZWJicm93c2VyLgotIwotIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX192ZXJzaW9uX18gPSAnMC43MGExJwotCi1fX2FsbF9fID0gWwotICAgICdQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nLCAnZnJlZXplX3N1cHBvcnQnLAotICAgICdNYW5hZ2VyJywgJ1BpcGUnLCAnY3B1X2NvdW50JywgJ2xvZ190b19zdGRlcnInLCAnZ2V0X2xvZ2dlcicsCi0gICAgJ2FsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcnLCAnQnVmZmVyVG9vU2hvcnQnLCAnVGltZW91dEVycm9yJywKLSAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLAotICAgICdFdmVudCcsICdCYXJyaWVyJywgJ1F1ZXVlJywgJ1NpbXBsZVF1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcsCi0gICAgJ1ZhbHVlJywgJ0FycmF5JywgJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAotICAgIF0KLQotX19hdXRob3JfXyA9ICdSLiBPdWRrZXJrIChyLm0ub3Vka2Vya0BnbWFpbC5jb20pJwotCi0jCi0jIEltcG9ydHMKLSMKLQotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBTVUJERUJVRywgU1VCV0FSTklORworZnJvbSAuIGltcG9ydCBjb250ZXh0CiAKICMKLSMgRXhjZXB0aW9ucworIyBDb3B5IHN0dWZmIGZyb20gZGVmYXVsdCBjb250ZXh0CiAjCiAKLWNsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKK2dsb2JhbHMoKS51cGRhdGUoKG5hbWUsIGdldGF0dHIoY29udGV4dC5fZGVmYXVsdF9jb250ZXh0LCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18pCitfX2FsbF9fID0gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18KIAogIwotIyBEZWZpbml0aW9ucyBub3QgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIFhYWCBUaGVzZSBzaG91bGQgbm90IHJlYWxseSBiZSBkb2N1bWVudGVkIG9yIHB1YmxpYy4KICMKIAotZGVmIE1hbmFnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggYSBydW5uaW5nIHNlcnZlciBwcm9jZXNzCi0KLSAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKLSAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCi0gICAgbSA9IFN5bmNNYW5hZ2VyKCkKLSAgICBtLnN0YXJ0KCkKLSAgICByZXR1cm4gbQotCi1kZWYgUGlwZShkdXBsZXg9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKLSAgICByZXR1cm4gUGlwZShkdXBsZXgpCi0KLWRlZiBjcHVfY291bnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IGludChvcy5lbnZpcm9uWydOVU1CRVJfT0ZfUFJPQ0VTU09SUyddKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEtleUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbGlmICdic2QnIGluIHN5cy5wbGF0Zm9ybSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgIGNvbW0gPSAnL3NiaW4vc3lzY3RsIC1uIGh3Lm5jcHUnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIGNvbW0gPSAnL3VzcicgKyBjb21tCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3MucG9wZW4oY29tbSkgYXMgcDoKLSAgICAgICAgICAgICAgICBudW0gPSBpbnQocC5yZWFkKCkpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgbnVtID0gMAotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IG9zLnN5c2NvbmYoJ1NDX05QUk9DRVNTT1JTX09OTE4nKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLQotICAgIGlmIG51bSA+PSAxOgotICAgICAgICByZXR1cm4gbnVtCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCi0KLWRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICcnJwotICAgIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KLSAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KLSAgICAnJycKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0Ci0gICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLQotZGVmIGdldF9sb2dnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuIGl0IGlzIGNyZWF0ZWQKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCi0gICAgcmV0dXJuIGdldF9sb2dnZXIoKQotCi1kZWYgbG9nX3RvX3N0ZGVycihsZXZlbD1Ob25lKToKLSAgICAnJycKLSAgICBUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKLSAgICByZXR1cm4gbG9nX3RvX3N0ZGVycihsZXZlbCkKLQotZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoKToKLSAgICAnJycKLSAgICBJbnN0YWxsIHN1cHBvcnQgZm9yIHNlbmRpbmcgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMgYmV0d2VlbiBwcm9jZXNzZXMKLSAgICAnJycKLSAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCi0gICAgIyBpdHMgb25seSBlZmZlY3Qgd2FzIHRvIG1ha2Ugc29ja2V0IG9iamVjdHMgaW5oZXJpdGFibGUgb24gV2luZG93cy4KLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KK1NVQkRFQlVHID0gNQorU1VCV0FSTklORyA9IDI1CiAKICMKLSMgRGVmaW5pdGlvbnMgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIEFsaWFzIGZvciBtYWluIG1vZHVsZSAtLSB3aWxsIGJlIHJlc2V0IGJ5IGJvb3RzdHJhcHBpbmcgY2hpbGQgcHJvY2Vzc2VzCiAjCiAKLWRlZiBMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jawotICAgIHJldHVybiBMb2NrKCkKLQotZGVmIFJMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHJlY3Vyc2l2ZSBsb2NrIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBSTG9jawotICAgIHJldHVybiBSTG9jaygpCi0KLWRlZiBDb25kaXRpb24obG9jaz1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBDb25kaXRpb24KLSAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2spCi0KLWRlZiBTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCi0gICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSkKLQotZGVmIEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCi0gICAgcmV0dXJuIEJvdW5kZWRTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBFdmVudCgpOgotICAgICcnJwotICAgIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50Ci0gICAgcmV0dXJuIEV2ZW50KCkKLQotZGVmIEJhcnJpZXIocGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEJhcnJpZXIKLSAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQpCi0KLWRlZiBRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFF1ZXVlCi0gICAgcmV0dXJuIFF1ZXVlKG1heHNpemUpCi0KLWRlZiBKb2luYWJsZVF1ZXVlKG1heHNpemU9MCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQotICAgIHJldHVybiBKb2luYWJsZVF1ZXVlKG1heHNpemUpCi0KLWRlZiBTaW1wbGVRdWV1ZSgpOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgcmV0dXJuIFNpbXBsZVF1ZXVlKCkKLQotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgUG9vbAotICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkKQotCi1kZWYgUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQotICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKLQotZGVmIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgYXJyYXkKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5Ci0gICAgcmV0dXJuIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpCi0KLWRlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlCi0gICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2spCi0KLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQotICAgIHJldHVybiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCBsb2NrPWxvY2spCi0KLSMKLSMKLSMKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSk6Ci0gICAgICAgICcnJwotICAgICAgICBTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KLSAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgaW5zdGVhZCBvZiBzeXMuZXhlY3V0YWJsZS4KLSAgICAgICAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IHNldF9leGVjdXRhYmxlCi0gICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCi0KLSAgICBfX2FsbF9fICs9IFsnc2V0X2V4ZWN1dGFibGUnXQoraWYgJ19fbWFpbl9fJyBpbiBzeXMubW9kdWxlczoKKyAgICBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKaW5kZXggMmEwYmMyZi4uOGFkNmZkNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQpAQCAtMTIsOCArMTIsNiBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCBwaWNrbGUKLWltcG9ydCBzZWxlY3QKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCBlcnJubwpAQCAtMjIsOSArMjAsMTMgQEAKIGltcG9ydCBpdGVydG9vbHMKIAogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MsIEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Ci1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfdGVtcF9kaXIsIEZpbmFsaXplLCBzdWJfZGVidWcsIGRlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5mb3JraW5nIGltcG9ydCBGb3JraW5nUGlja2xlcgorCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK2Zyb20gLiBpbXBvcnQgQXV0aGVudGljYXRpb25FcnJvciwgQnVmZmVyVG9vU2hvcnQKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKwogdHJ5OgogICAgIGltcG9ydCBfd2luYXBpCiAgICAgZnJvbSBfd2luYXBpIGltcG9ydCBXQUlUX09CSkVDVF8wLCBXQUlUX1RJTUVPVVQsIElORklOSVRFCkBAIC03Miw3ICs3NCw3IEBACiAgICAgaWYgZmFtaWx5ID09ICdBRl9JTkVUJzoKICAgICAgICAgcmV0dXJuICgnbG9jYWxob3N0JywgMCkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9Z2V0X3RlbXBfZGlyKCkpCisgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfUElQRSc6CiAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHljLSVkLSVkLScgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5nZXRwaWQoKSwgbmV4dChfbW1hcF9jb3VudGVyKSkpCkBAIC0xMzIsMjIgKzEzNCwyMiBAQAogCiAgICAgZGVmIF9jaGVja19jbG9zZWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJoYW5kbGUgaXMgY2xvc2VkIikKIAogICAgIGRlZiBfY2hlY2tfcmVhZGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgd3JpdGUtb25seSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQogCiAgICAgZGVmIF9jaGVja193cml0YWJsZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3dyaXRhYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQogCiAgICAgZGVmIF9iYWRfbWVzc2FnZV9sZW5ndGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3dyaXRhYmxlOgogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgY2xvc2VkKHNlbGYpOgpAQCAtMjAyLDkgKzIwNCw3IEBACiAgICAgICAgICIiIlNlbmQgYSAocGlja2xhYmxlKSBvYmplY3QiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfd3JpdGFibGUoKQotICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIoYnVmLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkuZHVtcChvYmopCi0gICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikpCiAKICAgICBkZWYgcmVjdl9ieXRlcyhzZWxmLCBtYXhsZW5ndGg9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMjQ5LDcgKzI0OSw3IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrX3JlYWRhYmxlKCkKICAgICAgICAgYnVmID0gc2VsZi5fcmVjdl9ieXRlcygpCi0gICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICByZXR1cm4gRm9ya2luZ1BpY2tsZXIubG9hZHMoYnVmLmdldGJ1ZmZlcigpKQogCiAgICAgZGVmIHBvbGwoc2VsZiwgdGltZW91dD0wLjApOgogICAgICAgICAiIiJXaGV0aGVyIHRoZXJlIGlzIGFueSBpbnB1dCBhdmFpbGFibGUgdG8gYmUgcmVhZCIiIgpAQCAtMzE3LDcgKzMxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYKICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyID09IF93aW5hcGkuRVJST1JfTU9SRV9EQVRBOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfbW9yZV9kYXRhKG92LCBtYXhzaXplKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSBfd2luYXBpLkVSUk9SX0JST0tFTl9QSVBFOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTM4OSw3ICszODksNyBAQAogICAgICAgICAgICAgICAgIGlmIHJlbWFpbmluZyA9PSBzaXplOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImdvdCBlbmQgb2YgZmlsZSBkdXJpbmcgbWVzc2FnZSIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImdvdCBlbmQgb2YgZmlsZSBkdXJpbmcgbWVzc2FnZSIpCiAgICAgICAgICAgICBidWYud3JpdGUoY2h1bmspCiAgICAgICAgICAgICByZW1haW5pbmcgLT0gbgogICAgICAgICByZXR1cm4gYnVmCkBAIC00NDksNyArNDQ5LDcgQEAKICAgICAgICAgUmV0dXJucyBhIGBDb25uZWN0aW9uYCBvYmplY3QuCiAgICAgICAgICcnJwogICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignbGlzdGVuZXIgaXMgY2xvc2VkJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2xpc3RlbmVyIGlzIGNsb3NlZCcpCiAgICAgICAgIGMgPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQogICAgICAgICBpZiBzZWxmLl9hdXRoa2V5OgogICAgICAgICAgICAgZGVsaXZlcl9jaGFsbGVuZ2UoYywgc2VsZi5fYXV0aGtleSkKQEAgLTUzNSw3ICs1MzUsOSBAQAogICAgICAgICAgICAgX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRSwKICAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKLSAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwKKyAgICAgICAgICAgIDEsIG9ic2l6ZSwgaWJzaXplLCBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLAorICAgICAgICAgICAgIyBkZWZhdWx0IHNlY3VyaXR5IGRlc2NyaXB0b3I6IHRoZSBoYW5kbGUgY2Fubm90IGJlIGluaGVyaXRlZAorICAgICAgICAgICAgX3dpbmFwaS5OVUxMCiAgICAgICAgICAgICApCiAgICAgICAgIGgyID0gX3dpbmFwaS5DcmVhdGVGaWxlKAogICAgICAgICAgICAgYWRkcmVzcywgYWNjZXNzLCAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKQEAgLTU4MCw3ICs1ODIsNyBAQAogICAgICAgICBzZWxmLl9sYXN0X2FjY2VwdGVkID0gTm9uZQogCiAgICAgICAgIGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgICAgICBzZWxmLl91bmxpbmsgPSBGaW5hbGl6ZSgKKyAgICAgICAgICAgIHNlbGYuX3VubGluayA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICAgICAgc2VsZiwgb3MudW5saW5rLCBhcmdzPShhZGRyZXNzLCksIGV4aXRwcmlvcml0eT0wCiAgICAgICAgICAgICAgICAgKQogICAgICAgICBlbHNlOgpAQCAtNjI4LDggKzYzMCw4IEBACiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfcXVldWUgPSBbc2VsZi5fbmV3X2hhbmRsZShmaXJzdD1UcnVlKV0KIAogICAgICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKLSAgICAgICAgICAgIHN1Yl9kZWJ1ZygnbGlzdGVuZXIgY3JlYXRlZCB3aXRoIGFkZHJlc3M9JXInLCBzZWxmLl9hZGRyZXNzKQotICAgICAgICAgICAgc2VsZi5jbG9zZSA9IEZpbmFsaXplKAorICAgICAgICAgICAgdXRpbC5zdWJfZGVidWcoJ2xpc3RlbmVyIGNyZWF0ZWQgd2l0aCBhZGRyZXNzPSVyJywgc2VsZi5fYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIFBpcGVMaXN0ZW5lci5fZmluYWxpemVfcGlwZV9saXN0ZW5lciwKICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9oYW5kbGVfcXVldWUsIHNlbGYuX2FkZHJlc3MpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKQEAgLTY3MSw3ICs2NzMsNyBAQAogCiAgICAgICAgIEBzdGF0aWNtZXRob2QKICAgICAgICAgZGVmIF9maW5hbGl6ZV9waXBlX2xpc3RlbmVyKHF1ZXVlLCBhZGRyZXNzKToKLSAgICAgICAgICAgIHN1Yl9kZWJ1ZygnY2xvc2luZyBsaXN0ZW5lciB3aXRoIGFkZHJlc3M9JXInLCBhZGRyZXNzKQorICAgICAgICAgICAgdXRpbC5zdWJfZGVidWcoJ2Nsb3NpbmcgbGlzdGVuZXIgd2l0aCBhZGRyZXNzPSVyJywgYWRkcmVzcykKICAgICAgICAgICAgIGZvciBoYW5kbGUgaW4gcXVldWU6CiAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoYW5kbGUpCiAKQEAgLTY4OCw3ICs2OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAwLCBfd2luYXBpLk5VTEwsIF93aW5hcGkuT1BFTl9FWElTVElORywKICAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5GSUxFX0ZMQUdfT1ZFUkxBUFBFRCwgX3dpbmFwaS5OVUxMCiAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciBub3QgaW4gKF93aW5hcGkuRVJST1JfU0VNX1RJTUVPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuRVJST1JfUElQRV9CVVNZKSBvciBfY2hlY2tfdGltZW91dCh0KToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTcxNyw3ICs3MTksNyBAQAogICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgIG1lc3NhZ2UgPSBvcy51cmFuZG9tKE1FU1NBR0VfTEVOR1RIKQogICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhDSEFMTEVOR0UgKyBtZXNzYWdlKQotICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UpLmRpZ2VzdCgpCisgICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSwgJ21kNScpLmRpZ2VzdCgpCiAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGlmIHJlc3BvbnNlID09IGRpZ2VzdDoKICAgICAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKFdFTENPTUUpCkBAIC03MzEsNyArNzMzLDcgQEAKICAgICBtZXNzYWdlID0gY29ubmVjdGlvbi5yZWN2X2J5dGVzKDI1NikgICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgYXNzZXJ0IG1lc3NhZ2VbOmxlbihDSEFMTEVOR0UpXSA9PSBDSEFMTEVOR0UsICdtZXNzYWdlID0gJXInICUgbWVzc2FnZQogICAgIG1lc3NhZ2UgPSBtZXNzYWdlW2xlbihDSEFMTEVOR0UpOl0KLSAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlKS5kaWdlc3QoKQorICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UsICdtZDUnKS5kaWdlc3QoKQogICAgIGNvbm5lY3Rpb24uc2VuZF9ieXRlcyhkaWdlc3QpCiAgICAgcmVzcG9uc2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgIyByZWplY3QgbGFyZ2UgbWVzc2FnZQogICAgIGlmIHJlc3BvbnNlICE9IFdFTENPTUU6CkBAIC04NzQsMjggKzg3NiwxNSBAQAogCiBlbHNlOgogCi0gICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gaW50KHRpbWVvdXQgKiAxMDAwKSAgIyB0aW1lb3V0IGlzIGluIG1pbGxpc2Vjb25kcwotICAgICAgICAgICAgZmRfbWFwID0ge30KLSAgICAgICAgICAgIHBvbGxzdGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKLSAgICAgICAgICAgICAgICBwb2xsc3Rlci5yZWdpc3RlcihmZCwgc2VsZWN0LlBPTExJTikKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZkLCAnZmlsZW5vJyk6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZC5maWxlbm8oKV0gPSBmZAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZkX21hcFtmZF0gPSBmZAotICAgICAgICAgICAgbHMgPSBbXQotICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBwb2xsc3Rlci5wb2xsKHRpbWVvdXQpOgotICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgc2VsZWN0LlBPTExOVkFMOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgZGVzY3JpcHRvciAlaScgJSBmZCkKLSAgICAgICAgICAgICAgICBscy5hcHBlbmQoZmRfbWFwW2ZkXSkKLSAgICAgICAgICAgIHJldHVybiBscwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiBfcG9sbChmZHMsIHRpbWVvdXQpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoZmRzLCBbXSwgW10sIHRpbWVvdXQpWzBdCisgICAgaW1wb3J0IHNlbGVjdG9ycwogCisgICAgIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZQorICAgICMgZGVzY3JpcHRvciwgY29udHJhcmlseSB0byBlcG9sbC9rcXVldWUgKGFsc28sIHRoZXkgcmVxdWlyZSBhIHNpbmdsZQorICAgICMgc3lzY2FsbCkuCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBfV2FpdFNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAKICAgICBkZWYgd2FpdChvYmplY3RfbGlzdCwgdGltZW91dD1Ob25lKToKICAgICAgICAgJycnCkBAIC05MDMsMzQgKzg5Miw1NCBAQAogCiAgICAgICAgIFJldHVybnMgbGlzdCBvZiB0aG9zZSBvYmplY3RzIGluIG9iamVjdF9saXN0IHdoaWNoIGFyZSByZWFkeS9yZWFkYWJsZS4KICAgICAgICAgJycnCi0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9wb2xsKG9iamVjdF9saXN0LCAwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgdGltZW91dCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd2l0aCBfV2FpdFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBmb3Igb2JqIGluIG9iamVjdF9saXN0OgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKG9iaiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gdGltZS50aW1lKCkKKyAgICAgICAgICAgICAgICBkZWFkbGluZSA9IHRpbWUudGltZSgpICsgdGltZW91dAorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBba2V5LmZpbGVvYmogZm9yIChrZXksIGV2ZW50cykgaW4gcmVhZHldCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKIAogIwogIyBNYWtlIGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHNoYXJhYmxlIGlmIHBvc3NpYmxlCiAjCiAKIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9jb25uZWN0aW9uKQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKFBpcGVDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGhhbmRsZSA9IGNvbm4uZmlsZW5vKCkKKyAgICAgICAgd2l0aCBzb2NrZXQuZnJvbWZkKGhhbmRsZSwgc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCisgICAgICAgICAgICBkcyA9IHJlc291cmNlX3NoYXJlci5EdXBTb2NrZXQocykKKyAgICAgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkcywgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRzLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKKworICAgIGRlZiByZWR1Y2VfcGlwZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBhY2Nlc3MgPSAoKF93aW5hcGkuRklMRV9HRU5FUklDX1JFQUQgaWYgY29ubi5yZWFkYWJsZSBlbHNlIDApIHwKKyAgICAgICAgICAgICAgICAgIChfd2luYXBpLkZJTEVfR0VORVJJQ19XUklURSBpZiBjb25uLndyaXRhYmxlIGVsc2UgMCkpCisgICAgICAgIGRoID0gcmVkdWN0aW9uLkR1cEhhbmRsZShjb25uLmZpbGVubygpLCBhY2Nlc3MpCisgICAgICAgIHJldHVybiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbiwgKGRoLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQorICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKKyAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWNlX3BpcGVfY29ubmVjdGlvbikKKwogZWxzZToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoc29ja2V0LnNvY2tldCwgcmVkdWN0aW9uLnJlZHVjZV9zb2NrZXQpCi0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKKyAgICBkZWYgcmVkdWNlX2Nvbm5lY3Rpb24oY29ubik6CisgICAgICAgIGRmID0gcmVkdWN0aW9uLkR1cEZkKGNvbm4uZmlsZW5vKCkpCisgICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9jb25uZWN0aW9uKGRmLCByZWFkYWJsZSwgd3JpdGFibGUpOgorICAgICAgICBmZCA9IGRmLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKGZkLCByZWFkYWJsZSwgd3JpdGFibGUpCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjZV9jb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODQ5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2NvbnRleHQucHkKQEAgLTAsMCArMSwzNDggQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKKworX19hbGxfXyA9IFtdICAgICAgICAgICAgIyB0aGluZ3MgYXJlIGNvcGllZCBmcm9tIGhlcmUgdG8gX19pbml0X18ucHkKKworIworIyBFeGNlcHRpb25zCisjCisKK2NsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgorICAgIHBhc3MKKworIworIyBCYXNlIHR5cGUgZm9yIGNvbnRleHRzCisjCisKK2NsYXNzIEJhc2VDb250ZXh0KG9iamVjdCk6CisKKyAgICBQcm9jZXNzRXJyb3IgPSBQcm9jZXNzRXJyb3IKKyAgICBCdWZmZXJUb29TaG9ydCA9IEJ1ZmZlclRvb1Nob3J0CisgICAgVGltZW91dEVycm9yID0gVGltZW91dEVycm9yCisgICAgQXV0aGVudGljYXRpb25FcnJvciA9IEF1dGhlbnRpY2F0aW9uRXJyb3IKKworICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4pCisKKyAgICBkZWYgY3B1X2NvdW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtJycnCisgICAgICAgIG51bSA9IG9zLmNwdV9jb3VudCgpCisgICAgICAgIGlmIG51bSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbnVtCisKKyAgICBkZWYgTWFuYWdlcihzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIG1hbmFnZXIgYXNzb2NpYXRlZCB3aXRoIGEgcnVubmluZyBzZXJ2ZXIgcHJvY2VzcworCisgICAgICAgIFRoZSBtYW5hZ2VycyBtZXRob2RzIHN1Y2ggYXMgYExvY2soKWAsIGBDb25kaXRpb24oKWAgYW5kIGBRdWV1ZSgpYAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5tYW5hZ2VycyBpbXBvcnQgU3luY01hbmFnZXIKKyAgICAgICAgbSA9IFN5bmNNYW5hZ2VyKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisgICAgICAgIG0uc3RhcnQoKQorICAgICAgICByZXR1cm4gbQorCisgICAgZGVmIFBpcGUoc2VsZiwgZHVwbGV4PVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIHR3byBjb25uZWN0aW9uIG9iamVjdCBjb25uZWN0ZWQgYnkgYSBwaXBlJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKKyAgICAgICAgcmV0dXJuIFBpcGUoZHVwbGV4KQorCisgICAgZGVmIExvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBub24tcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBMb2NrCisgICAgICAgIHJldHVybiBMb2NrKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUkxvY2soc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSByZWN1cnNpdmUgbG9jayBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IFJMb2NrCisgICAgICAgIHJldHVybiBSTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIENvbmRpdGlvbihzZWxmLCBsb2NrPU5vbmUpOgorICAgICAgICAnJydSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQ29uZGl0aW9uCisgICAgICAgIHJldHVybiBDb25kaXRpb24obG9jaywgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTZW1hcGhvcmUoc2VsZiwgdmFsdWU9MSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBTZW1hcGhvcmUKKyAgICAgICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBCb3VuZGVkU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgYm91bmRlZCBzZW1hcGhvcmUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCisgICAgICAgIHJldHVybiBCb3VuZGVkU2VtYXBob3JlKHZhbHVlLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEV2ZW50KHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGFuIGV2ZW50IG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgRXZlbnQKKyAgICAgICAgcmV0dXJuIEV2ZW50KGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQmFycmllcihzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBCYXJyaWVyCisgICAgICAgIHJldHVybiBCYXJyaWVyKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgUXVldWUKKyAgICAgICAgcmV0dXJuIFF1ZXVlKG1heHNpemUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgSm9pbmFibGVRdWV1ZShzZWxmLCBtYXhzaXplPTApOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQorICAgICAgICByZXR1cm4gSm9pbmFibGVRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFNpbXBsZVF1ZXVlKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcXVldWUgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKKyAgICAgICAgcmV0dXJuIFNpbXBsZVF1ZXVlKGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUG9vbChzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCisgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIHByb2Nlc3MgcG9vbCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAucG9vbCBpbXBvcnQgUG9vbAorICAgICAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUmF3VmFsdWUoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2hhcmVkIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd1ZhbHVlCisgICAgICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKKworICAgIGRlZiBSYXdBcnJheShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBhcnJheScnJworICAgICAgICBmcm9tIC5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5CisgICAgICAgIHJldHVybiBSYXdBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyKQorCisgICAgZGVmIFZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPVRydWUpOgorICAgICAgICAnJydSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBWYWx1ZQorICAgICAgICByZXR1cm4gVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgKiwgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQorICAgICAgICByZXR1cm4gQXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplciwgbG9jaz1sb2NrLAorICAgICAgICAgICAgICAgICAgICAgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBmcmVlemVfc3VwcG9ydChzZWxmKToKKyAgICAgICAgJycnQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgZmFrZSBmb3JrZWQgcHJvY2VzcyBpbiBhIGZyb3plbiBleGVjdXRhYmxlLgorICAgICAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKKyAgICAgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBmcmVlemVfc3VwcG9ydAorICAgICAgICAgICAgZnJlZXplX3N1cHBvcnQoKQorCisgICAgZGVmIGdldF9sb2dnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybiBwYWNrYWdlIGxvZ2dlciAtLSBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IHRoZW4KKyAgICAgICAgaXQgaXMgY3JlYXRlZC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGdldF9sb2dnZXIKKyAgICAgICAgcmV0dXJuIGdldF9sb2dnZXIoKQorCisgICAgZGVmIGxvZ190b19zdGRlcnIoc2VsZiwgbGV2ZWw9Tm9uZSk6CisgICAgICAgICcnJ1R1cm4gb24gbG9nZ2luZyBhbmQgYWRkIGEgaGFuZGxlciB3aGljaCBwcmludHMgdG8gc3RkZXJyJycnCisgICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKKyAgICAgICAgcmV0dXJuIGxvZ190b19zdGRlcnIobGV2ZWwpCisKKyAgICBkZWYgYWxsb3dfY29ubmVjdGlvbl9waWNrbGluZyhzZWxmKToKKyAgICAgICAgJycnSW5zdGFsbCBzdXBwb3J0IGZvciBzZW5kaW5nIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzCisgICAgICAgIGJldHdlZW4gcHJvY2Vzc2VzCisgICAgICAgICcnJworICAgICAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCisgICAgICAgICMgaXRzIG9ubHkgZWZmZWN0IHdhcyB0byBtYWtlIHNvY2tldCBvYmplY3RzIGluaGVyaXRhYmxlIG9uIFdpbmRvd3MuCisgICAgICAgIGZyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorCisgICAgZGVmIHNldF9leGVjdXRhYmxlKHNlbGYsIGV4ZWN1dGFibGUpOgorICAgICAgICAnJydTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KKyAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIGluc3RlYWQgb2Ygc3lzLmV4ZWN1dGFibGUgd2hlbiB1c2luZyB0aGUgJ3NwYXduJworICAgICAgICBzdGFydCBtZXRob2QuICBVc2VmdWwgZm9yIHBlb3BsZSBlbWJlZGRpbmcgUHl0aG9uLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAuc3Bhd24gaW1wb3J0IHNldF9leGVjdXRhYmxlCisgICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCisKKyAgICBkZWYgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChzZWxmLCBtb2R1bGVfbmFtZXMpOgorICAgICAgICAnJydTZXQgbGlzdCBvZiBtb2R1bGUgbmFtZXMgdG8gdHJ5IHRvIGxvYWQgaW4gZm9ya3NlcnZlciBwcm9jZXNzLgorICAgICAgICBUaGlzIGlzIHJlYWxseSBqdXN0IGEgaGludC4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLmZvcmtzZXJ2ZXIgaW1wb3J0IHNldF9mb3Jrc2VydmVyX3ByZWxvYWQKKyAgICAgICAgc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZChtb2R1bGVfbmFtZXMpCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN0eCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBmaW5kIGNvbnRleHQgZm9yICVyJyAlIG1ldGhvZCkKKyAgICAgICAgY3R4Ll9jaGVja19hdmFpbGFibGUoKQorICAgICAgICByZXR1cm4gY3R4CisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBzZXRfc3RhcnRfbWV0aG9kKHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IHNldCBzdGFydCBtZXRob2Qgb2YgY29uY3JldGUgY29udGV4dCcpCisKKyAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgcGFzcworCisjCisjIFR5cGUgb2YgZGVmYXVsdCBjb250ZXh0IC0tIHVuZGVybHlpbmcgY29udGV4dCBjYW4gYmUgc2V0IGF0IG1vc3Qgb25jZQorIworCitjbGFzcyBQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgIF9zdGFydF9tZXRob2QgPSBOb25lCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICByZXR1cm4gX2RlZmF1bHRfY29udGV4dC5nZXRfY29udGV4dCgpLlByb2Nlc3MuX1BvcGVuKHByb2Nlc3Nfb2JqKQorCitjbGFzcyBEZWZhdWx0Q29udGV4dChCYXNlQ29udGV4dCk6CisgICAgUHJvY2VzcyA9IFByb2Nlc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0KToKKyAgICAgICAgc2VsZi5fZGVmYXVsdF9jb250ZXh0ID0gY29udGV4dAorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKworICAgIGRlZiBnZXRfY29udGV4dChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2FjdHVhbF9jb250ZXh0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2QsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgbm90IE5vbmUgYW5kIG5vdCBmb3JjZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY29udGV4dCBoYXMgYWxyZWFkeSBiZWVuIHNldCcpCisgICAgICAgIGlmIG1ldGhvZCBpcyBOb25lIGFuZCBmb3JjZToKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5nZXRfY29udGV4dChtZXRob2QpCisKKyAgICBkZWYgZ2V0X3N0YXJ0X21ldGhvZChzZWxmLCBhbGxvd19ub25lPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fYWN0dWFsX2NvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGFsbG93X25vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FjdHVhbF9jb250ZXh0ID0gc2VsZi5fZGVmYXVsdF9jb250ZXh0CisgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dC5fbmFtZQorCisgICAgZGVmIGdldF9hbGxfc3RhcnRfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICByZXR1cm4gWydzcGF3biddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorICAgICAgICAgICAgaWYgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJ10KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnZm9yaycsICdzcGF3biddCisKK0RlZmF1bHRDb250ZXh0Ll9fYWxsX18gPSBsaXN0KHggZm9yIHggaW4gZGlyKERlZmF1bHRDb250ZXh0KSBpZiB4WzBdICE9ICdfJykKKworIworIyBDb250ZXh0IHR5cGVzIGZvciBmaXhlZCBzdGFydCBtZXRob2QKKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisKKyAgICBjbGFzcyBGb3JrUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdmb3JrJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fZm9yayBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICAgICAgX3N0YXJ0X21ldGhvZCA9ICdzcGF3bicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX3NwYXduX3Bvc2l4IGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya1NlcnZlclByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmtzZXJ2ZXIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBGb3JrQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmsnCisgICAgICAgIFByb2Nlc3MgPSBGb3JrUHJvY2VzcworCisgICAgY2xhc3MgU3Bhd25Db250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnc3Bhd24nCisgICAgICAgIFByb2Nlc3MgPSBTcGF3blByb2Nlc3MKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJDb250ZXh0KEJhc2VDb250ZXh0KToKKyAgICAgICAgX25hbWUgPSAnZm9ya3NlcnZlcicKKyAgICAgICAgUHJvY2VzcyA9IEZvcmtTZXJ2ZXJQcm9jZXNzCisgICAgICAgIGRlZiBfY2hlY2tfYXZhaWxhYmxlKHNlbGYpOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmb3Jrc2VydmVyIHN0YXJ0IG1ldGhvZCBub3QgYXZhaWxhYmxlJykKKworICAgIF9jb25jcmV0ZV9jb250ZXh0cyA9IHsKKyAgICAgICAgJ2ZvcmsnOiBGb3JrQ29udGV4dCgpLAorICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICAgICAgJ2ZvcmtzZXJ2ZXInOiBGb3JrU2VydmVyQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydmb3JrJ10pCisKK2Vsc2U6CisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl93aW4zMiBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdzcGF3bic6IFNwYXduQ29udGV4dCgpLAorICAgIH0KKyAgICBfZGVmYXVsdF9jb250ZXh0ID0gRGVmYXVsdENvbnRleHQoX2NvbmNyZXRlX2NvbnRleHRzWydzcGF3biddKQorCisjCisjIEZvcmNlIHRoZSBzdGFydCBtZXRob2QKKyMKKworZGVmIF9mb3JjZV9zdGFydF9tZXRob2QobWV0aG9kKToKKyAgICBfZGVmYXVsdF9jb250ZXh0Ll9hY3R1YWxfY29udGV4dCA9IF9jb25jcmV0ZV9jb250ZXh0c1ttZXRob2RdCisKKyMKKyMgQ2hlY2sgdGhhdCB0aGUgY3VycmVudCB0aHJlYWQgaXMgc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCisjCisKK190bHMgPSB0aHJlYWRpbmcubG9jYWwoKQorCitkZWYgZ2V0X3NwYXduaW5nX3BvcGVuKCk6CisgICAgcmV0dXJuIGdldGF0dHIoX3RscywgJ3NwYXduaW5nX3BvcGVuJywgTm9uZSkKKworZGVmIHNldF9zcGF3bmluZ19wb3Blbihwb3Blbik6CisgICAgX3Rscy5zcGF3bmluZ19wb3BlbiA9IHBvcGVuCisKK2RlZiBhc3NlcnRfc3Bhd25pbmcob2JqKToKKyAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAnJXMgb2JqZWN0cyBzaG91bGQgb25seSBiZSBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMnCisgICAgICAgICAgICAnIHRocm91Z2ggaW5oZXJpdGFuY2UnICUgdHlwZShvYmopLl9fbmFtZV9fCisgICAgICAgICAgICApCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQppbmRleCBlMzFmYzYxLi45N2Y3YWY3IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKICMKICMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlCi0jICAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCiBfX2FsbF9fID0gWwpAQCAtNDcsNyArMjIsNyBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBhcnJheQogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uIGltcG9ydCBQaXBlCitmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCiBmcm9tIHRocmVhZGluZyBpbXBvcnQgTG9jaywgUkxvY2ssIFNlbWFwaG9yZSwgQm91bmRlZFNlbWFwaG9yZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IEV2ZW50LCBDb25kaXRpb24sIEJhcnJpZXIKIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCkBAIC0xMzgsNyArMTEzLDcgQEAKICAgICBwYXNzCiAKIGRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6Ci0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAorICAgIGZyb20gLi5wb29sIGltcG9ydCBUaHJlYWRQb29sCiAgICAgcmV0dXJuIFRocmVhZFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCiAKIEpvaW5hYmxlUXVldWUgPSBRdWV1ZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CmluZGV4IDg3NGVjOGUuLjY5NGVmOTYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKIF9fYWxsX18gPSBbICdDbGllbnQnLCAnTGlzdGVuZXInLCAnUGlwZScgXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzkzMjM3Li4wMDAwMDAwCi0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0jCi0jIE1vZHVsZSBmb3Igc3RhcnRpbmcgYSBwcm9jZXNzIG9iamVjdCB1c2luZyBvcy5mb3JrKCkgb3IgQ3JlYXRlUHJvY2VzcygpCi0jCi0jIG11bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5Ci0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWltcG9ydCBlcnJubwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbCwgcHJvY2VzcwotCi1fX2FsbF9fID0gWydQb3BlbicsICdhc3NlcnRfc3Bhd25pbmcnLCAnZHVwbGljYXRlJywgJ2Nsb3NlJywgJ0ZvcmtpbmdQaWNrbGVyJ10KLQotIwotIyBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHRocmVhZCBpcyBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSMKLQotZGVmIGFzc2VydF9zcGF3bmluZyhzZWxmKToKLSAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICclcyBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcycKLSAgICAgICAgICAgICcgdGhyb3VnaCBpbmhlcml0YW5jZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCi0gICAgICAgICAgICApCi0KLSMKLSMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQotIwotCi1mcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlcgotZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQotCi1jbGFzcyBGb3JraW5nUGlja2xlcihQaWNrbGVyKToKLSAgICBfZXh0cmFfcmVkdWNlcnMgPSB7fQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIFBpY2tsZXIuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBkaXNwYXRjaF90YWJsZS5jb3B5KCkKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHJlZ2lzdGVyKGNscywgdHlwZSwgcmVkdWNlKToKLSAgICAgICAgY2xzLl9leHRyYV9yZWR1Y2Vyc1t0eXBlXSA9IHJlZHVjZQotCi1kZWYgX3JlZHVjZV9tZXRob2QobSk6Ci0gICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgotICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKLWNsYXNzIF9DOgotICAgIGRlZiBmKHNlbGYpOgotICAgICAgICBwYXNzCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQotCi0KLWRlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgotICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotCi10cnk6Ci0gICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfcmVkdWNlX3BhcnRpYWwocCk6Ci0gICAgICAgIHJldHVybiBfcmVidWlsZF9wYXJ0aWFsLCAocC5mdW5jLCBwLmFyZ3MsIHAua2V5d29yZHMgb3Ige30pCi0gICAgZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgotICAgICAgICByZXR1cm4gcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihwYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCi0KLSMKLSMgVW5peAotIwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICBkdXBsaWNhdGUgPSBvcy5kdXAKLSAgICBjbG9zZSA9IG9zLmNsb3NlCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0KLSAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKLSAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSByCi0KLSAgICAgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KLSAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQotICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKLSAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQotCi0gICAgICAgICAgICAjIGB3YCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBjaGlsZCBleGl0cywgYXQgd2hpY2ggcG9pbnQgYHJgCi0gICAgICAgICAgICAjIHdpbGwgYmVjb21lIHJlYWR5IGZvciByZWFkaW5nICh1c2luZyBlLmcuIHNlbGVjdCgpKS4KLSAgICAgICAgICAgIG9zLmNsb3NlKHcpCi0gICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAociwpKQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotIwotIyBXaW5kb3dzCi0jCi0KLWVsc2U6Ci0gICAgaW1wb3J0IF90aHJlYWQKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgaW1wb3J0IF93aW5hcGkKLQotICAgIGZyb20gcGlja2xlIGltcG9ydCBsb2FkLCBISUdIRVNUX1BST1RPQ09MCi0KLSAgICBkZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUpOgotICAgICAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIFRFUk1JTkFURSA9IDB4MTAwMDAKLSAgICBXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQotICAgIFdJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCi0KLSAgICBjbG9zZSA9IF93aW5hcGkuQ2xvc2VIYW5kbGUKLQotICAgICMKLSAgICAjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgotICAgICMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCi0gICAgIwotCi0gICAgaWYgV0lOU0VSVklDRToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9uLmV4ZScpCi0gICAgZWxzZToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQotICAgICAgICBfcHl0aG9uX2V4ZSA9IGV4ZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgZHVwbGljYXRlKGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3M9Tm9uZSwgaW5oZXJpdGFibGU9RmFsc2UpOgotICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgotICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKLSAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAotICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAotICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTCi0gICAgICAgICAgICApCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0gICAgICAgICcnJwotICAgICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIF90bHMgPSBfdGhyZWFkLl9sb2NhbCgpCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKCciJXMiJyAlIHggZm9yIHggaW4gZ2V0X2NvbW1hbmRfbGluZSgpKQotICAgICAgICAgICAgcHJlcF9kYXRhID0gZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCi0KLSAgICAgICAgICAgICMgY3JlYXRlIHBpcGUgZm9yIGNvbW11bmljYXRpb24gd2l0aCBjaGlsZAotICAgICAgICAgICAgcmZkLCB3ZmQgPSBvcy5waXBlKCkKLQotICAgICAgICAgICAgIyBnZXQgaGFuZGxlIGZvciByZWFkIGVuZCBvZiB0aGUgcGlwZSBhbmQgbWFrZSBpdCBpbmhlcml0YWJsZQotICAgICAgICAgICAgcmhhbmRsZSA9IGR1cGxpY2F0ZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShyZmQpLCBpbmhlcml0YWJsZT1UcnVlKQotICAgICAgICAgICAgb3MuY2xvc2UocmZkKQotCi0gICAgICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgotICAgICAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIF9weXRob25fZXhlLCBjbWQgKyAoJyAlcycgJSByaGFuZGxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIDEsIDAsIE5vbmUsIE5vbmUsIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBjbG9zZShyaGFuZGxlKQotCi0gICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCi0gICAgICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKLSAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaW50KGhwKQotICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKLQotICAgICAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAotICAgICAgICAgICAgICAgIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkLCBISUdIRVNUX1BST1RPQ09MKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihQb3Blbi5fdGxzLCAncHJvY2Vzc19oYW5kbGUnLCBOb25lKSBpcyBub3QgTm9uZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoaGFuZGxlKToKLSAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGUoaGFuZGxlLCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlKQotCi0gICAgICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gX3dpbmFwaS5JTkZJTklURQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCi0KLSAgICAgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaW50KHNlbGYuX2hhbmRsZSksIG1zZWNzKQotICAgICAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gVEVSTUlOQVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCi0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF93aW5hcGkuVGVybWluYXRlUHJvY2VzcyhpbnQoc2VsZi5faGFuZGxlKSwgVEVSTUlOQVRFKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgaXNfZm9ya2luZyhhcmd2KToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZwotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3YpID49IDIgYW5kIGFyZ3ZbMV0gPT0gJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnOgotICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmd2KSA9PSAzCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLQotICAgIGRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgotICAgICAgICAgICAgbWFpbigpCi0gICAgICAgICAgICBzeXMuZXhpdCgpCi0KLQotICAgIGRlZiBnZXRfY29tbWFuZF9saW5lKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCi0gICAgICAgICcnJwotICAgICAgICBpZiBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKLSAgICAgICAgICAgIEF0dGVtcHQgdG8gc3RhcnQgYSBuZXcgcHJvY2VzcyBiZWZvcmUgdGhlIGN1cnJlbnQgcHJvY2VzcwotICAgICAgICAgICAgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgotCi0gICAgICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBvbiBXaW5kb3dzIGFuZCB5b3UgaGF2ZQotICAgICAgICAgICAgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tIGluIHRoZSBtYWluIG1vZHVsZToKLQotICAgICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0KLSAgICAgICAgICAgIFRoZSAiZnJlZXplX3N1cHBvcnQoKSIgbGluZSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvZ3JhbQotICAgICAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGEgV2luZG93cyBleGVjdXRhYmxlLicnJykKLQotICAgICAgICBpZiBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBbc3lzLmV4ZWN1dGFibGUsICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb2cgPSAnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgbWFpbjsgbWFpbigpJwotICAgICAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgICAgICByZXR1cm4gW19weXRob25fZXhlXSArIG9wdHMgKyBbJy1jJywgcHJvZywgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotCi0KLSAgICBkZWYgbWFpbigpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCi0gICAgICAgICcnJwotICAgICAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKLQotICAgICAgICBoYW5kbGUgPSBpbnQoc3lzLmFyZ3ZbLTFdKQotICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShoYW5kbGUsIG9zLk9fUkRPTkxZKQotICAgICAgICBmcm9tX3BhcmVudCA9IG9zLmZkb3BlbihmZCwgJ3JiJykKLQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQotICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQotICAgICAgICBzZWxmID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZnJvbV9wYXJlbnQuY2xvc2UoKQotCi0gICAgICAgIGV4aXRjb2RlID0gc2VsZi5fYm9vdHN0cmFwKCkKLSAgICAgICAgc3lzLmV4aXQoZXhpdGNvZGUpCi0KLQotICAgIGRlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiBpbmZvIGFib3V0IHBhcmVudCBuZWVkZWQgYnkgY2hpbGQgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IF9sb2dnZXIsIF9sb2dfdG9fc3RkZXJyCi0KLSAgICAgICAgZCA9IGRpY3QoCi0gICAgICAgICAgICBuYW1lPW5hbWUsCi0gICAgICAgICAgICBzeXNfcGF0aD1zeXMucGF0aCwKLSAgICAgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAotICAgICAgICAgICAgbG9nX3RvX3N0ZGVycj1fbG9nX3RvX3N0ZGVyciwKLSAgICAgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAotICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgX2xvZ2dlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gX2xvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCi0KLSAgICAgICAgaWYgbm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0U6Ci0gICAgICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQotICAgICAgICAgICAgaWYgbm90IG1haW5fcGF0aCBhbmQgc3lzLmFyZ3ZbMF0gbm90IGluICgnJywgJy1jJyk6Ci0gICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gc3lzLmFyZ3ZbMF0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCi0gICAgICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKLQotICAgICAgICByZXR1cm4gZAotCi0jCi0jIFByZXBhcmUgY3VycmVudCBwcm9jZXNzCi0jCi0KLW9sZF9tYWluX21vZHVsZXMgPSBbXQotCi1kZWYgcHJlcGFyZShkYXRhKToKLSAgICAnJycKLSAgICBUcnkgdG8gZ2V0IGN1cnJlbnQgcHJvY2VzcyByZWFkeSB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICcnJwotICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKHN5cy5tb2R1bGVzWydfX21haW5fXyddKQotCi0gICAgaWYgJ25hbWUnIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQotCi0gICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2F1dGhrZXkgPSBkYXRhWydhdXRoa2V5J10KLQotICAgIGlmICdsb2dfdG9fc3RkZXJyJyBpbiBkYXRhIGFuZCBkYXRhWydsb2dfdG9fc3RkZXJyJ106Ci0gICAgICAgIHV0aWwubG9nX3RvX3N0ZGVycigpCi0KLSAgICBpZiAnbG9nX2xldmVsJyBpbiBkYXRhOgotICAgICAgICB1dGlsLmdldF9sb2dnZXIoKS5zZXRMZXZlbChkYXRhWydsb2dfbGV2ZWwnXSkKLQotICAgIGlmICdzeXNfcGF0aCcgaW4gZGF0YToKLSAgICAgICAgc3lzLnBhdGggPSBkYXRhWydzeXNfcGF0aCddCi0KLSAgICBpZiAnc3lzX2FyZ3YnIGluIGRhdGE6Ci0gICAgICAgIHN5cy5hcmd2ID0gZGF0YVsnc3lzX2FyZ3YnXQotCi0gICAgaWYgJ2RpcicgaW4gZGF0YToKLSAgICAgICAgb3MuY2hkaXIoZGF0YVsnZGlyJ10pCi0KLSAgICBpZiAnb3JpZ19kaXInIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSID0gZGF0YVsnb3JpZ19kaXInXQotCi0gICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKLSAgICAgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKLSAgICAgICAgIyBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIF9fZmlsZV9fCi0gICAgICAgICMgYW5kIGEgbW9kdWxlJ3MgcmVhbCBuYW1lLiBTZWUgUEVQIDMwMiBhbmQgaXNzdWUgIzEwODQ1Ci0gICAgICAgIG1haW5fcGF0aCA9IGRhdGFbJ21haW5fcGF0aCddCi0gICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKLSAgICAgICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpCi0KLSAgICAgICAgaWYgbWFpbl9uYW1lID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCi0gICAgICAgICAgICBtYWluX21vZHVsZS5fX2ZpbGVfXyA9IG1haW5fcGF0aAotICAgICAgICBlbGlmIG1haW5fbmFtZSAhPSAnaXB5dGhvbic6Ci0gICAgICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQotICAgICAgICAgICAgIyBjb250YWluIGFkZGl0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBzdGlsbCBiZSBleGVjdXRlZAotICAgICAgICAgICAgaW1wb3J0IGltcAotCi0gICAgICAgICAgICBpZiBtYWluX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkaXJzID0gTm9uZQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkuc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKLSAgICAgICAgICAgICAgICBkaXJzID0gW29zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCldCi0KLSAgICAgICAgICAgIGFzc2VydCBtYWluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzLCBtYWluX25hbWUKLSAgICAgICAgICAgIGZpbGUsIHBhdGhfbmFtZSwgZXRjID0gaW1wLmZpbmRfbW9kdWxlKG1haW5fbmFtZSwgZGlycykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFdlIHdvdWxkIGxpa2UgdG8gZG8gImltcC5sb2FkX21vZHVsZSgnX19tYWluX18nLCAuLi4pIgotICAgICAgICAgICAgICAgICMgaGVyZS4gIEhvd2V2ZXIsIHRoYXQgd291bGQgY2F1c2UgJ2lmIF9fbmFtZV9fID09Ci0gICAgICAgICAgICAgICAgIyAiX19tYWluX18iJyBjbGF1c2VzIHRvIGJlIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgIG1haW5fbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKAotICAgICAgICAgICAgICAgICAgICAnX19wYXJlbnRzX21haW5fXycsIGZpbGUsIHBhdGhfbmFtZSwgZXRjCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gbWFpbl9tb2R1bGUKLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbWFpbl9fJwotCi0gICAgICAgICAgICAjIFRyeSB0byBtYWtlIHRoZSBwb3RlbnRpYWxseSBwaWNrbGFibGUgb2JqZWN0cyBpbgotICAgICAgICAgICAgIyBzeXMubW9kdWxlc1snX19tYWluX18nXSByZWFsaXplIHRoZXkgYXJlIGluIHRoZSBtYWluCi0gICAgICAgICAgICAjIG1vZHVsZSAtLSBzb21ld2hhdCB1Z2x5LgotICAgICAgICAgICAgZm9yIG9iaiBpbiBsaXN0KG1haW5fbW9kdWxlLl9fZGljdF9fLnZhbHVlcygpKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09ICdfX3BhcmVudHNfbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX21vZHVsZV9fID0gJ19fbWFpbl9fJwotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc1MTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsMjY3IEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydlbnN1cmVfcnVubmluZycsICdnZXRfaW5oZXJpdGVkX2ZkcycsICdjb25uZWN0X3RvX25ld19wcm9jZXNzJywKKyAgICAgICAgICAgJ3NldF9mb3Jrc2VydmVyX3ByZWxvYWQnXQorCisjCisjCisjCisKK01BWEZEU19UT19TRU5EID0gMjU2CitVTlNJR05FRF9TVFJVQ1QgPSBzdHJ1Y3QuU3RydWN0KCdRJykgICAgICMgbGFyZ2UgZW5vdWdoIGZvciBwaWRfdAorCisjCisjIEZvcmtzZXJ2ZXIgY2xhc3MKKyMKKworY2xhc3MgRm9ya1NlcnZlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBOb25lCisgICAgICAgIHNlbGYuX2luaGVyaXRlZF9mZHMgPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyA9IFsnX19tYWluX18nXQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlc19uYW1lcyk6CisgICAgICAgICcnJ1NldCBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0byB0cnkgdG8gbG9hZCBpbiBmb3Jrc2VydmVyIHByb2Nlc3MuJycnCisgICAgICAgIGlmIG5vdCBhbGwodHlwZShtb2QpIGlzIHN0ciBmb3IgbW9kIGluIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZV9uYW1lcyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzJykKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gbW9kdWxlc19uYW1lcworCisgICAgZGVmIGdldF9pbmhlcml0ZWRfZmRzKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gbGlzdCBvZiBmZHMgaW5oZXJpdGVkIGZyb20gcGFyZW50IHByb2Nlc3MuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIE5vbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyB3YXMgbm90IHN0YXJ0ZWQgYnkgZm9yaworICAgICAgICBzZXJ2ZXIuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gc2VsZi5faW5oZXJpdGVkX2ZkcworCisgICAgZGVmIGNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZiwgZmRzKToKKyAgICAgICAgJycnUmVxdWVzdCBmb3Jrc2VydmVyIHRvIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MuCisKKyAgICAgICAgUmV0dXJucyBhIHBhaXIgb2YgZmRzIChzdGF0dXNfciwgZGF0YV93KS4gIFRoZSBjYWxsaW5nIHByb2Nlc3MgY2FuIHJlYWQKKyAgICAgICAgdGhlIGNoaWxkIHByb2Nlc3MncyBwaWQgYW5kIChldmVudHVhbGx5KSBpdHMgcmV0dXJuY29kZSBmcm9tIHN0YXR1c19yLgorICAgICAgICBUaGUgY2FsbGluZyBwcm9jZXNzIHNob3VsZCB3cml0ZSB0byBkYXRhX3cgdGhlIHBpY2tsZWQgcHJlcGFyYXRpb24gYW5kCisgICAgICAgIHByb2Nlc3MgZGF0YS4KKyAgICAgICAgJycnCisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBpZiBsZW4oZmRzKSArIDQgPj0gTUFYRkRTX1RPX1NFTkQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0b28gbWFueSBmZHMnKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGNsaWVudDoKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgYWxsZmRzID0gW2NoaWxkX3IsIGNoaWxkX3csIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKV0KKyAgICAgICAgICAgIGFsbGZkcyArPSBmZHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZGZkcyhjbGllbnQsIGFsbGZkcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50X3IsIHBhcmVudF93CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3cpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBhIGZvcmsgc2VydmVyIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHByb2Nlc3MuICBOb3RlIHRoYXQgdXN1YWxseSBhIGNoaWxkCisgICAgICAgIHByb2Nlc3Mgd2lsbCBqdXN0IHJldXNlIHRoZSBmb3Jrc2VydmVyIHN0YXJ0ZWQgYnkgaXRzIHBhcmVudCwgc28KKyAgICAgICAgZW5zdXJlX3J1bm5pbmcoKSB3aWxsIGRvIG5vdGhpbmcuCisgICAgICAgICcnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5lbnN1cmVfcnVubmluZygpCisgICAgICAgICAgICBpZiBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjbWQgPSAoJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtzZXJ2ZXIgaW1wb3J0IG1haW47ICcgKworICAgICAgICAgICAgICAgICAgICdtYWluKCVkLCAlZCwgJXIsICoqJXIpJykKKworICAgICAgICAgICAgaWYgc2VsZi5fcHJlbG9hZF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlc2lyZWRfa2V5cyA9IHsnbWFpbl9wYXRoJywgJ3N5c19wYXRoJ30KKyAgICAgICAgICAgICAgICBkYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEoJ2lnbm9yZScpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRpY3QoKHgseSkgZm9yICh4LHkpIGluIGRhdGEuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHggaW4gZGVzaXJlZF9rZXlzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0ge30KKworICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKSBhcyBsaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gY29ubmVjdGlvbi5hcmJpdHJhcnlfYWRkcmVzcygnQUZfVU5JWCcpCisgICAgICAgICAgICAgICAgbGlzdGVuZXIuYmluZChhZGRyZXNzKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGFkZHJlc3MsIDBvNjAwKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxMDApCisKKyAgICAgICAgICAgICAgICAjIGFsbCBjbGllbnQgcHJvY2Vzc2VzIG93biB0aGUgd3JpdGUgZW5kIG9mIHRoZSAiYWxpdmUiIHBpcGU7CisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZXkgYWxsIHRlcm1pbmF0ZSB0aGUgcmVhZCBlbmQgYmVjb21lcyByZWFkeS4KKyAgICAgICAgICAgICAgICBhbGl2ZV9yLCBhbGl2ZV93ID0gb3MucGlwZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfcl0KKyAgICAgICAgICAgICAgICAgICAgY21kICU9IChsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfciwgc2VsZi5fcHJlbG9hZF9tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyArPSBbJy1jJywgY21kXQorICAgICAgICAgICAgICAgICAgICBwaWQgPSB1dGlsLnNwYXdudl9wYXNzZmRzKGV4ZSwgYXJncywgZmRzX3RvX3Bhc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShhbGl2ZV93KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBhbGl2ZV93CisKKyMKKyMKKyMKKworZGVmIG1haW4obGlzdGVuZXJfZmQsIGFsaXZlX3IsIHByZWxvYWQsIG1haW5fcGF0aD1Ob25lLCBzeXNfcGF0aD1Ob25lKToKKyAgICAnJydSdW4gZm9ya3NlcnZlci4nJycKKyAgICBpZiBwcmVsb2FkOgorICAgICAgICBpZiAnX19tYWluX18nIGluIHByZWxvYWQgYW5kIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Bhd24uaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nCisgICAgICAgIGZvciBtb2RuYW1lIGluIHByZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgY2xvc2Ugc3lzLnN0ZGluCisgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBpZ25vcmluZyBTSUdDSExEIG1lYW5zIG5vIG5lZWQgdG8gcmVhcCB6b21iaWUgcHJvY2Vzc2VzCisgICAgaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgZmlsZW5vPWxpc3RlbmVyX2ZkKSBhcyBsaXN0ZW5lciwgXAorICAgICAgICAgc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICBfZm9ya3NlcnZlci5fZm9ya3NlcnZlcl9hZGRyZXNzID0gbGlzdGVuZXIuZ2V0c29ja25hbWUoKQorCisgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKGxpc3RlbmVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoYWxpdmVfciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZmRzID0gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHNlbGVjdG9yLnNlbGVjdCgpXQorICAgICAgICAgICAgICAgICAgICBpZiByZmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGFsaXZlX3IgaW4gcmZkczoKKyAgICAgICAgICAgICAgICAgICAgIyBFT0YgYmVjYXVzZSBubyBtb3JlIGNsaWVudCBwcm9jZXNzZXMgbGVmdAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucmVhZChhbGl2ZV9yLCAxKSA9PSBiJycKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxpc3RlbmVyIGluIHJmZHMKKyAgICAgICAgICAgICAgICB3aXRoIGxpc3RlbmVyLmFjY2VwdCgpWzBdIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLmZvcmsoKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKworICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpOgorICAgICMgY2xvc2UgdW5uZWNlc3Nhcnkgc3R1ZmYgYW5kIHJlc2V0IFNJR0NITEQgaGFuZGxlcgorICAgIGxpc3RlbmVyLmNsb3NlKCkKKyAgICBvcy5jbG9zZShhbGl2ZV9yKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIGhhbmRsZXIpCisKKyAgICAjIHJlY2VpdmUgZmRzIGZyb20gcGFyZW50IHByb2Nlc3MKKyAgICBmZHMgPSByZWR1Y3Rpb24ucmVjdmZkcyhzLCBNQVhGRFNfVE9fU0VORCArIDEpCisgICAgcy5jbG9zZSgpCisgICAgYXNzZXJ0IGxlbihmZHMpIDw9IE1BWEZEU19UT19TRU5ECisgICAgKGNoaWxkX3IsIGNoaWxkX3csIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FsaXZlX2ZkLAorICAgICBzdGZkLCAqX2ZvcmtzZXJ2ZXIuX2luaGVyaXRlZF9mZHMpID0gZmRzCisgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHN0ZmQKKworICAgICMgc2VuZCBwaWQgdG8gY2xpZW50IHByb2Nlc3NlcworICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIG9zLmdldHBpZCgpKQorCisgICAgIyByZXNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2VlZCgpCisKKyAgICAjIHJ1biBwcm9jZXNzIG9iamVjdCByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICBjb2RlID0gc3Bhd24uX21haW4oY2hpbGRfcikKKworICAgICMgd3JpdGUgdGhlIGV4aXQgY29kZSB0byB0aGUgcGlwZQorICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIGNvZGUpCisKKyMKKyMgUmVhZCBhbmQgd3JpdGUgdW5zaWduZWQgbnVtYmVycworIworCitkZWYgcmVhZF91bnNpZ25lZChmZCk6CisgICAgZGF0YSA9IGInJworICAgIGxlbmd0aCA9IFVOU0lHTkVEX1NUUlVDVC5zaXplCisgICAgd2hpbGUgbGVuKGRhdGEpIDwgbGVuZ3RoOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKGZkLCBsZW5ndGggLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ3VuZXhwZWN0ZWQgRU9GJykKKyAgICAgICAgZGF0YSArPSBzCisgICAgcmV0dXJuIFVOU0lHTkVEX1NUUlVDVC51bnBhY2soZGF0YSlbMF0KKworZGVmIHdyaXRlX3Vuc2lnbmVkKGZkLCBuKToKKyAgICBtc2cgPSBVTlNJR05FRF9TVFJVQ1QucGFjayhuKQorICAgIHdoaWxlIG1zZzoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuYnl0ZXMgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBnZXQgaGVyZScpCisgICAgICAgIG1zZyA9IG1zZ1tuYnl0ZXM6XQorCisjCisjCisjCisKK19mb3Jrc2VydmVyID0gRm9ya1NlcnZlcigpCitlbnN1cmVfcnVubmluZyA9IF9mb3Jrc2VydmVyLmVuc3VyZV9ydW5uaW5nCitnZXRfaW5oZXJpdGVkX2ZkcyA9IF9mb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzCitjb25uZWN0X3RvX25ld19wcm9jZXNzID0gX2ZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2Vzcworc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCA9IF9mb3Jrc2VydmVyLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQppbmRleCBlNjNmZGI4Li45OGJmZGM4IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CkBAIC04LDE1ICs4LDE3IEBACiAjCiAKIGltcG9ydCBiaXNlY3QKK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBtbWFwCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IGl0ZXJ0b29scwotCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgRmluYWxpemUsIGluZm8KLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKIAogX19hbGxfXyA9IFsnQnVmZmVyV3JhcHBlciddCiAKQEAgLTMwLDE3ICszMiwyNSBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgogICAgICAgICAgICAgc2VsZi5zaXplID0gc2l6ZQotICAgICAgICAgICAgc2VsZi5uYW1lID0gJ3B5bS0lZC0lZCcgJSAob3MuZ2V0cGlkKCksIG5leHQoQXJlbmEuX2NvdW50ZXIpKQotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNlbGYuc2l6ZSwgdGFnbmFtZT1zZWxmLm5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgX3dpbmFwaS5HZXRMYXN0RXJyb3IoKSA9PSAwLCAndGFnbmFtZSBhbHJlYWR5IGluIHVzZScKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgbmFtZSA9ICdweW0tJWQtJXMnICUgKG9zLmdldHBpZCgpLCBuZXh0KHNlbGYuX3JhbmQpKQorICAgICAgICAgICAgICAgIGJ1ZiA9IG1tYXAubW1hcCgtMSwgc2l6ZSwgdGFnbmFtZT1uYW1lKQorICAgICAgICAgICAgICAgIGlmIF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIFdlIGhhdmUgcmVvcGVuZWQgYSBwcmVleGlzdGluZyBtbWFwLgorICAgICAgICAgICAgICAgIGJ1Zi5jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignQ2Fubm90IGZpbmQgbmFtZSBmb3IgbmV3IG1tYXAnKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBidWYKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gKHNlbGYuc2l6ZSwgc2VsZi5uYW1lKQogCiAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgICAgIGNvbnRleHQuYXNzZXJ0X3NwYXduaW5nKHNlbGYpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUKIAogICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKQEAgLTUyLDEwICs2MiwyOCBAQAogCiAgICAgY2xhc3MgQXJlbmEob2JqZWN0KToKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2l6ZSk6Ci0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcCgtMSwgc2l6ZSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUsIGZkPS0xKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICAgICAgaWYgZmQgPT0gLTE6CisgICAgICAgICAgICAgICAgc2VsZi5mZCwgbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoCisgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9J3B5bS0lZC0nJW9zLmdldHBpZCgpLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAoc2VsZi5mZCwpKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZkLCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGInXDAnKnNpemUpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG1tYXAubW1hcChzZWxmLmZkLCBzZWxmLnNpemUpCisKKyAgICBkZWYgcmVkdWNlX2FyZW5hKGEpOgorICAgICAgICBpZiBhLmZkID09IC0xOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQXJlbmEgaXMgdW5waWNrbGFibGUgYmVjYXVzZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JraW5nIHdhcyBlbmFibGVkIHdoZW4gaXQgd2FzIGNyZWF0ZWQnKQorICAgICAgICByZXR1cm4gcmVidWlsZF9hcmVuYSwgKGEuc2l6ZSwgcmVkdWN0aW9uLkR1cEZkKGEuZmQpKQorCisgICAgZGVmIHJlYnVpbGRfYXJlbmEoc2l6ZSwgZHVwZmQpOgorICAgICAgICByZXR1cm4gQXJlbmEoc2l6ZSwgZHVwZmQuZGV0YWNoKCkpCisKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQXJlbmEsIHJlZHVjZV9hcmVuYSkKIAogIwogIyBDbGFzcyBhbGxvd2luZyBhbGxvY2F0aW9uIG9mIGNodW5rcyBvZiBtZW1vcnkgZnJvbSBhcmVuYXMKQEAgLTkwLDcgKzExOCw3IEBACiAgICAgICAgIGlmIGkgPT0gbGVuKHNlbGYuX2xlbmd0aHMpOgogICAgICAgICAgICAgbGVuZ3RoID0gc2VsZi5fcm91bmR1cChtYXgoc2VsZi5fc2l6ZSwgc2l6ZSksIG1tYXAuUEFHRVNJWkUpCiAgICAgICAgICAgICBzZWxmLl9zaXplICo9IDIKLSAgICAgICAgICAgIGluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCisgICAgICAgICAgICB1dGlsLmluZm8oJ2FsbG9jYXRpbmcgYSBuZXcgbW1hcCBvZiBsZW5ndGggJWQnLCBsZW5ndGgpCiAgICAgICAgICAgICBhcmVuYSA9IEFyZW5hKGxlbmd0aCkKICAgICAgICAgICAgIHNlbGYuX2FyZW5hcy5hcHBlbmQoYXJlbmEpCiAgICAgICAgICAgICByZXR1cm4gKGFyZW5hLCAwLCBsZW5ndGgpCkBAIC0yMTYsNyArMjQ0LDcgQEAKICAgICAgICAgYXNzZXJ0IDAgPD0gc2l6ZSA8IHN5cy5tYXhzaXplCiAgICAgICAgIGJsb2NrID0gQnVmZmVyV3JhcHBlci5faGVhcC5tYWxsb2Moc2l6ZSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSAoYmxvY2ssIHNpemUpCi0gICAgICAgIEZpbmFsaXplKHNlbGYsIEJ1ZmZlcldyYXBwZXIuX2hlYXAuZnJlZSwgYXJncz0oYmxvY2ssKSkKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCiAKICAgICBkZWYgY3JlYXRlX21lbW9yeXZpZXcoc2VsZik6CiAgICAgICAgIChhcmVuYSwgc3RhcnQsIHN0b3ApLCBzaXplID0gc2VsZi5fc3RhdGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CmluZGV4IDk2MDU2YjAuLmNjODdkMzYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQpAQCAtMTksMTEgKzE5LDE2IEBACiBpbXBvcnQgYXJyYXkKIGltcG9ydCBxdWV1ZQogCi1mcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YwotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuLCBQb29sLCB1dGlsLCBjb25uZWN0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBBdXRoZW50aWNhdGlvblN0cmluZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgUG9wZW4sIEZvcmtpbmdQaWNrbGVyCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKK2Zyb20gdHJhY2ViYWNrIGltcG9ydCBmb3JtYXRfZXhjCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvb2wKK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAogCiAjCiAjIFJlZ2lzdGVyIHNvbWUgdGhpbmdzIGZvciBwaWNrbGluZwpAQCAtMzEsMTYgKzM2LDE0IEBACiAKIGRlZiByZWR1Y2VfYXJyYXkoYSk6CiAgICAgcmV0dXJuIGFycmF5LmFycmF5LCAoYS50eXBlY29kZSwgYS50b2J5dGVzKCkpCi1Gb3JraW5nUGlja2xlci5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQorcmVkdWN0aW9uLnJlZ2lzdGVyKGFycmF5LmFycmF5LCByZWR1Y2VfYXJyYXkpCiAKIHZpZXdfdHlwZXMgPSBbdHlwZShnZXRhdHRyKHt9LCBuYW1lKSgpKSBmb3IgbmFtZSBpbiAoJ2l0ZW1zJywna2V5cycsJ3ZhbHVlcycpXQogaWYgdmlld190eXBlc1swXSBpcyBub3QgbGlzdDogICAgICAgIyBvbmx5IG5lZWRlZCBpbiBQeTMuMAogICAgIGRlZiByZWJ1aWxkX2FzX2xpc3Qob2JqKToKICAgICAgICAgcmV0dXJuIGxpc3QsIChsaXN0KG9iaiksKQogICAgIGZvciB2aWV3X3R5cGUgaW4gdmlld190eXBlczoKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCi0gICAgICAgIGltcG9ydCBjb3B5cmVnCi0gICAgICAgIGNvcHlyZWcucGlja2xlKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQorICAgICAgICByZWR1Y3Rpb24ucmVnaXN0ZXIodmlld190eXBlLCByZWJ1aWxkX2FzX2xpc3QpCiAKICMKICMgVHlwZSBmb3IgaWRlbnRpZnlpbmcgc2hhcmVkIG9iamVjdHMKQEAgLTEzMCw3ICsxMzMsNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWdpc3RyeSwgYWRkcmVzcywgYXV0aGtleSwgc2VyaWFsaXplcik6CiAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGF1dGhrZXksIGJ5dGVzKQogICAgICAgICBzZWxmLnJlZ2lzdHJ5ID0gcmVnaXN0cnkKLSAgICAgICAgc2VsZi5hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5hdXRoa2V5ID0gcHJvY2Vzcy5BdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQogICAgICAgICBMaXN0ZW5lciwgQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCiAKICAgICAgICAgIyBkbyBhdXRoZW50aWNhdGlvbiBsYXRlcgpAQCAtMTQ2LDcgKzE0OSw3IEBACiAgICAgICAgIFJ1biB0aGUgc2VydmVyIGZvcmV2ZXIKICAgICAgICAgJycnCiAgICAgICAgIHNlbGYuc3RvcF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl9tYW5hZ2VyX3NlcnZlciA9IHNlbGYKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFjY2VwdGVyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5hY2NlcHRlcikKICAgICAgICAgICAgIGFjY2VwdGVyLmRhZW1vbiA9IFRydWUKQEAgLTE2Nyw3ICsxNzAsNyBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGMgPSBzZWxmLmxpc3RlbmVyLmFjY2VwdCgpCi0gICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLmhhbmRsZV9yZXF1ZXN0LCBhcmdzPShjLCkpCiAgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKQEAgLTQzNiwxNSArNDM5LDE3IEBACiAgICAgX3JlZ2lzdHJ5ID0ge30KICAgICBfU2VydmVyID0gU2VydmVyCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPU5vbmUsIGF1dGhrZXk9Tm9uZSwgc2VyaWFsaXplcj0ncGlja2xlJywKKyAgICAgICAgICAgICAgICAgY3R4PU5vbmUpOgogICAgICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcyAgICAgIyBYWFggbm90IGZpbmFsIGFkZHJlc3MgaWYgZWcgKCcnLCAwKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgc2VsZi5fc3RhdGUgPSBTdGF0ZSgpCiAgICAgICAgIHNlbGYuX3N0YXRlLnZhbHVlID0gU3RhdGUuSU5JVElBTAogICAgICAgICBzZWxmLl9zZXJpYWxpemVyID0gc2VyaWFsaXplcgogICAgICAgICBzZWxmLl9MaXN0ZW5lciwgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdCisgICAgICAgIHNlbGYuX2N0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCiAKICAgICBkZWYgZ2V0X3NlcnZlcihzZWxmKToKICAgICAgICAgJycnCkBAIC00NzYsNyArNDgxLDcgQEAKICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQogCiAgICAgICAgICMgc3Bhd24gcHJvY2VzcyB3aGljaCBydW5zIGEgc2VydmVyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBQcm9jZXNzKAorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fY3R4LlByb2Nlc3MoCiAgICAgICAgICAgICB0YXJnZXQ9dHlwZShzZWxmKS5fcnVuX3NlcnZlciwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3JlZ2lzdHJ5LCBzZWxmLl9hZGRyZXNzLCBzZWxmLl9hdXRoa2V5LAogICAgICAgICAgICAgICAgICAgc2VsZi5fc2VyaWFsaXplciwgd3JpdGVyLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpLApAQCAtNjkxLDExICs2OTYsMTEgQEAKICAgICAgICAgc2VsZi5fQ2xpZW50ID0gbGlzdGVuZXJfY2xpZW50W3NlcmlhbGl6ZXJdWzFdCiAKICAgICAgICAgaWYgYXV0aGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgZWxpZiBzZWxmLl9tYW5hZ2VyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHNlbGYuX21hbmFnZXIuX2F1dGhrZXkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICAgICAgaWYgaW5jcmVmOgogICAgICAgICAgICAgc2VsZi5faW5jcmVmKCkKQEAgLTcwNCw3ICs3MDksNyBAQAogCiAgICAgZGVmIF9jb25uZWN0KHNlbGYpOgogICAgICAgICB1dGlsLmRlYnVnKCdtYWtpbmcgY29ubmVjdGlvbiB0byBtYW5hZ2VyJykKLSAgICAgICAgbmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgIG5hbWUgKz0gJ3wnICsgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZQogICAgICAgICBjb25uID0gc2VsZi5fQ2xpZW50KHNlbGYuX3Rva2VuLmFkZHJlc3MsIGF1dGhrZXk9c2VsZi5fYXV0aGtleSkKQEAgLTc5OCw3ICs4MDMsNyBAQAogCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgIGt3ZHMgPSB7fQotICAgICAgICBpZiBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgaWYgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3ZHNbJ2F1dGhrZXknXSA9IHNlbGYuX2F1dGhrZXkKIAogICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICdfaXNhdXRvJywgRmFsc2UpOgpAQCAtODM1LDE0ICs4NDAsMTQgQEAKIAogICAgIElmIHBvc3NpYmxlIHRoZSBzaGFyZWQgb2JqZWN0IGlzIHJldHVybmVkLCBvciBvdGhlcndpc2UgYSBwcm94eSBmb3IgaXQuCiAgICAgJycnCi0gICAgc2VydmVyID0gZ2V0YXR0cihjdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCisgICAgc2VydmVyID0gZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX21hbmFnZXJfc2VydmVyJywgTm9uZSkKIAogICAgIGlmIHNlcnZlciBhbmQgc2VydmVyLmFkZHJlc3MgPT0gdG9rZW4uYWRkcmVzczoKICAgICAgICAgcmV0dXJuIHNlcnZlci5pZF90b19vYmpbdG9rZW4uaWRdWzBdCiAgICAgZWxzZToKICAgICAgICAgaW5jcmVmID0gKAogICAgICAgICAgICAga3dkcy5wb3AoJ2luY3JlZicsIFRydWUpIGFuZAotICAgICAgICAgICAgbm90IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQorICAgICAgICAgICAgbm90IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpCiAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBmdW5jKHRva2VuLCBzZXJpYWxpemVyLCBpbmNyZWY9aW5jcmVmLCAqKmt3ZHMpCiAKQEAgLTg4OSw3ICs4OTQsNyBAQAogICAgIGlmIGF1dGhrZXkgaXMgTm9uZSBhbmQgbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgYXV0aGtleSA9IG1hbmFnZXIuX2F1dGhrZXkKICAgICBpZiBhdXRoa2V5IGlzIE5vbmU6Ci0gICAgICAgIGF1dGhrZXkgPSBjdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CisgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKIAogICAgIFByb3h5VHlwZSA9IE1ha2VQcm94eVR5cGUoJ0F1dG9Qcm94eVslc10nICUgdG9rZW4udHlwZWlkLCBleHBvc2VkKQogICAgIHByb3h5ID0gUHJveHlUeXBlKHRva2VuLCBzZXJpYWxpemVyLCBtYW5hZ2VyPW1hbmFnZXIsIGF1dGhrZXk9YXV0aGtleSwKQEAgLTExMDksNyArMTExNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlclByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0NvbmRpdGlvbicsIHRocmVhZGluZy5Db25kaXRpb24sIENvbmRpdGlvblByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0JhcnJpZXInLCB0aHJlYWRpbmcuQmFycmllciwgQmFycmllclByb3h5KQotU3luY01hbmFnZXIucmVnaXN0ZXIoJ1Bvb2wnLCBQb29sLCBQb29sUHJveHkpCitTeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIHBvb2wuUG9vbCwgUG9vbFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ2xpc3QnLCBsaXN0LCBMaXN0UHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignZGljdCcsIGRpY3QsIERpY3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdWYWx1ZScsIFZhbHVlLCBWYWx1ZVByb3h5KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CmluZGV4IDBmMmRhYjQuLjFjYjJkOTUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKQEAgLTcsNyArNyw3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsnUG9vbCddCitfX2FsbF9fID0gWydQb29sJywgJ1RocmVhZFBvb2wnXQogCiAjCiAjIEltcG9ydHMKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IHF1ZXVlCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgZGVidWcKKyMgSWYgdGhyZWFkaW5nIGlzIGF2YWlsYWJsZSB0aGVuIFRocmVhZFBvb2wgc2hvdWxkIGJlIHByb3ZpZGVkLiAgVGhlcmVmb3JlCisjIHdlIGF2b2lkIHRvcC1sZXZlbCBpbXBvcnRzIHdoaWNoIGFyZSBsaWFibGUgdG8gZmFpbCBvbiBzb21lIHN5c3RlbXMuCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCiAKICMKICMgQ29uc3RhbnRzIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgYSBwb29sCkBAIC00Myw2ICs0NywyOSBAQAogICAgIHJldHVybiBsaXN0KGl0ZXJ0b29scy5zdGFybWFwKGFyZ3NbMF0sIGFyZ3NbMV0pKQogCiAjCisjIEhhY2sgdG8gZW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwgdHJhY2ViYWNrCisjCisKK2NsYXNzIFJlbW90ZVRyYWNlYmFjayhFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0Yik6CisgICAgICAgIHNlbGYudGIgPSB0YgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50YgorCitjbGFzcyBFeGNlcHRpb25XaXRoVHJhY2ViYWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMsIHRiKToKKyAgICAgICAgdGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbih0eXBlKGV4YyksIGV4YywgdGIpCisgICAgICAgIHRiID0gJycuam9pbih0YikKKyAgICAgICAgc2VsZi5leGMgPSBleGMKKyAgICAgICAgc2VsZi50YiA9ICdcbiIiIlxuJXMiIiInICUgdGIKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfZXhjLCAoc2VsZi5leGMsIHNlbGYudGIpCisKK2RlZiByZWJ1aWxkX2V4YyhleGMsIHRiKToKKyAgICBleGMuX19jYXVzZV9fID0gUmVtb3RlVHJhY2ViYWNrKHRiKQorICAgIHJldHVybiBleGMKKworIwogIyBDb2RlIHJ1biBieSB3b3JrZXIgcHJvY2Vzc2VzCiAjCiAKQEAgLTc4LDI4ICsxMDUsMjkgQEAKICAgICB3aGlsZSBtYXh0YXNrcyBpcyBOb25lIG9yIChtYXh0YXNrcyBhbmQgY29tcGxldGVkIDwgbWF4dGFza3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgSU9FcnJvcik6Ci0gICAgICAgICAgICBkZWJ1Zygnd29ya2VyIGdvdCBFT0ZFcnJvciBvciBJT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICBleGNlcHQgKEVPRkVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3Qgc2VudGluZWwgLS0gZXhpdGluZycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICBqb2IsIGksIGZ1bmMsIGFyZ3MsIGt3ZHMgPSB0YXNrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdCA9IChUcnVlLCBmdW5jKCphcmdzLCAqKmt3ZHMpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBlID0gRXhjZXB0aW9uV2l0aFRyYWNlYmFjayhlLCBlLl9fdHJhY2ViYWNrX18pCiAgICAgICAgICAgICByZXN1bHQgPSAoRmFsc2UsIGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCByZXN1bHQpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICB3cmFwcGVkID0gTWF5YmVFbmNvZGluZ0Vycm9yKGUsIHJlc3VsdFsxXSkKLSAgICAgICAgICAgIGRlYnVnKCJQb3NzaWJsZSBlbmNvZGluZyBlcnJvciB3aGlsZSBzZW5kaW5nIHJlc3VsdDogJXMiICUgKAorICAgICAgICAgICAgdXRpbC5kZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKICAgICAgICAgICAgICAgICB3cmFwcGVkKSkKICAgICAgICAgICAgIHB1dCgoam9iLCBpLCAoRmFsc2UsIHdyYXBwZWQpKSkKICAgICAgICAgY29tcGxldGVkICs9IDEKLSAgICBkZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQorICAgIHV0aWwuZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKIAogIwogIyBDbGFzcyByZXByZXNlbnRpbmcgYSBwcm9jZXNzIHBvb2wKQEAgLTEwOSwxMCArMTM3LDEyIEBACiAgICAgJycnCiAgICAgQ2xhc3Mgd2hpY2ggc3VwcG9ydHMgYW4gYXN5bmMgdmVyc2lvbiBvZiBhcHBseWluZyBmdW5jdGlvbnMgdG8gYXJndW1lbnRzLgogICAgICcnJwotICAgIFByb2Nlc3MgPSBQcm9jZXNzCisgICAgZGVmIFByb2Nlc3Moc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLl9jdHguUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKLSAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKKyAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLl9jdHggPSBjb250ZXh0IG9yIGdldF9jb250ZXh0KCkKICAgICAgICAgc2VsZi5fc2V0dXBfcXVldWVzKCkKICAgICAgICAgc2VsZi5fdGFza3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CkBAIC0xMjIsMTAgKzE1Miw3IEBACiAgICAgICAgIHNlbGYuX2luaXRhcmdzID0gaW5pdGFyZ3MKIAogICAgICAgICBpZiBwcm9jZXNzZXMgaXMgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwcm9jZXNzZXMgPSBjcHVfY291bnQoKQotICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gMQorICAgICAgICAgICAgcHJvY2Vzc2VzID0gb3MuY3B1X2NvdW50KCkgb3IgMQogICAgICAgICBpZiBwcm9jZXNzZXMgPCAxOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTnVtYmVyIG9mIHByb2Nlc3NlcyBtdXN0IGJlIGF0IGxlYXN0IDEiKQogCkBAIC0xNjIsNyArMTg5LDcgQEAKICAgICAgICAgc2VsZi5fcmVzdWx0X2hhbmRsZXIuX3N0YXRlID0gUlVOCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLnN0YXJ0KCkKIAotICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSBGaW5hbGl6ZSgKKyAgICAgICAgc2VsZi5fdGVybWluYXRlID0gdXRpbC5GaW5hbGl6ZSgKICAgICAgICAgICAgIHNlbGYsIHNlbGYuX3Rlcm1pbmF0ZV9wb29sLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fdGFza3F1ZXVlLCBzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwgc2VsZi5fcG9vbCwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLCBzZWxmLl90YXNrX2hhbmRsZXIsCkBAIC0xNzksNyArMjA2LDcgQEAKICAgICAgICAgICAgIHdvcmtlciA9IHNlbGYuX3Bvb2xbaV0KICAgICAgICAgICAgIGlmIHdvcmtlci5leGl0Y29kZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHdvcmtlciBleGl0ZWQKLSAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIGkpCiAgICAgICAgICAgICAgICAgd29ya2VyLmpvaW4oKQogICAgICAgICAgICAgICAgIGNsZWFuZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX3Bvb2xbaV0KQEAgLTE5OSw3ICsyMjYsNyBAQAogICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCiAgICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKICAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgZGVidWcoJ2FkZGVkIHdvcmtlcicpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdhZGRlZCB3b3JrZXInKQogCiAgICAgZGVmIF9tYWludGFpbl9wb29sKHNlbGYpOgogICAgICAgICAiIiJDbGVhbiB1cCBhbnkgZXhpdGVkIHdvcmtlcnMgYW5kIHN0YXJ0IHJlcGxhY2VtZW50cyBmb3IgdGhlbS4KQEAgLTIwOCw5ICsyMzUsOCBAQAogICAgICAgICAgICAgc2VsZi5fcmVwb3B1bGF0ZV9wb29sKCkKIAogICAgIGRlZiBfc2V0dXBfcXVldWVzKHNlbGYpOgotICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgICAgIHNlbGYuX2lucXVldWUgPSBTaW1wbGVRdWV1ZSgpCi0gICAgICAgIHNlbGYuX291dHF1ZXVlID0gU2ltcGxlUXVldWUoKQorICAgICAgICBzZWxmLl9pbnF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5fb3V0cXVldWUgPSBzZWxmLl9jdHguU2ltcGxlUXVldWUoKQogICAgICAgICBzZWxmLl9xdWlja19wdXQgPSBzZWxmLl9pbnF1ZXVlLl93cml0ZXIuc2VuZAogICAgICAgICBzZWxmLl9xdWlja19nZXQgPSBzZWxmLl9vdXRxdWV1ZS5fcmVhZGVyLnJlY3YKIApAQCAtMzM2LDcgKzM2Miw3IEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgIyBzZW5kIHNlbnRpbmVsIHRvIHN0b3Agd29ya2VycwogICAgICAgICBwb29sLl90YXNrcXVldWUucHV0KE5vbmUpCi0gICAgICAgIGRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sLCBjYWNoZSk6CkBAIC0zNDYsNyArMzcyLDcgQEAKICAgICAgICAgICAgIGkgPSAtMQogICAgICAgICAgICAgZm9yIGksIHRhc2sgaW4gZW51bWVyYXRlKHRhc2tzZXEpOgogICAgICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZSAhPSBSVU4nKQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcHV0KHRhc2spCkBAIC0zNTgsMjcgKzM4NCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBzZXRfbGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKKyAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKICAgICAgICAgICAgICAgICAgICAgc2V0X2xlbmd0aChpKzEpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKIAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVsbCByZXN1bHQgaGFuZGxlciB0byBmaW5pc2ggd2hlbiBjYWNoZSBpcyBlbXB0eQotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgICAgIG91dHF1ZXVlLnB1dChOb25lKQogCiAgICAgICAgICAgICAjIHRlbGwgd29ya2VycyB0aGVyZSBpcyBubyBtb3JlIHdvcmsKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgc2VuZGluZyBzZW50aW5lbCB0byB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBwdXQoTm9uZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBJT0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3QgT1NFcnJvciB3aGVuIHNlbmRpbmcgc2VudGluZWxzJykKIAotICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGV4aXRpbmcnKQorICAgICAgICB1dGlsLmRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfcmVzdWx0cyhvdXRxdWV1ZSwgZ2V0LCBjYWNoZSk6CkBAIC0zODcsMTcgKzQxMywxNyBAQAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRhc2sgPSBnZXQoKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9JT0Vycm9yIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL09TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgICAgIGlmIHRocmVhZC5fc3RhdGU6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IHRocmVhZC5fc3RhdGUgPT0gVEVSTUlOQVRFCi0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlPVRFUk1JTkFURScpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3Qgc2VudGluZWwnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgam9iLCBpLCBvYmogPSB0YXNrCkBAIC00MDksMTIgKzQzNSwxMiBAQAogICAgICAgICB3aGlsZSBjYWNoZSBhbmQgdGhyZWFkLl9zdGF0ZSAhPSBURVJNSU5BVEU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGFzayBpcyBOb25lOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgaWdub3JpbmcgZXh0cmEgc2VudGluZWwnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKICAgICAgICAgICAgIHRyeToKQEAgLTQyMyw3ICs0NDksNyBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBpZiBoYXNhdHRyKG91dHF1ZXVlLCAnX3JlYWRlcicpOgotICAgICAgICAgICAgZGVidWcoJ2Vuc3VyaW5nIHRoYXQgb3V0cXVldWUgaXMgbm90IGZ1bGwnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCiAgICAgICAgICAgICAjIElmIHdlIGRvbid0IG1ha2Ugcm9vbSBhdmFpbGFibGUgaW4gb3V0cXVldWUgdGhlbgogICAgICAgICAgICAgIyBhdHRlbXB0cyB0byBhZGQgdGhlIHNlbnRpbmVsIChOb25lKSB0byBvdXRxdWV1ZSBtYXkKICAgICAgICAgICAgICMgYmxvY2suICBUaGVyZSBpcyBndWFyYW50ZWVkIHRvIGJlIG5vIG1vcmUgdGhhbiAyIHNlbnRpbmVscy4KQEAgLTQzMiwxMCArNDU4LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRxdWV1ZS5fcmVhZGVyLnBvbGwoKToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCisgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGV4aXRpbmc6IGxlbihjYWNoZSk9JXMsIHRocmVhZC5fc3RhdGU9JXMnLAogICAgICAgICAgICAgICBsZW4oY2FjaGUpLCB0aHJlYWQuX3N0YXRlKQogCiAgICAgQHN0YXRpY21ldGhvZApAQCAtNDUzLDE5ICs0NzksMTkgQEAKICAgICAgICAgICAgICAgKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBkZWJ1ZygnY2xvc2luZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnY2xvc2luZyBwb29sJykKICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gUlVOOgogICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSBDTE9TRQogICAgICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gQ0xPU0UKIAogICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl90ZXJtaW5hdGUoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6Ci0gICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wnKQogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgaW4gKENMT1NFLCBURVJNSU5BVEUpCiAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIuam9pbigpCkBAIC00NzYsNyArNTAyLDcgQEAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIHNpemUpOgogICAgICAgICAjIHRhc2tfaGFuZGxlciBtYXkgYmUgYmxvY2tlZCB0cnlpbmcgdG8gcHV0IGl0ZW1zIG9uIGlucXVldWUKLSAgICAgICAgZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQorICAgICAgICB1dGlsLmRlYnVnKCdyZW1vdmluZyB0YXNrcyBmcm9tIGlucXVldWUgdW50aWwgdGFzayBoYW5kbGVyIGZpbmlzaGVkJykKICAgICAgICAgaW5xdWV1ZS5fcmxvY2suYWNxdWlyZSgpCiAgICAgICAgIHdoaWxlIHRhc2tfaGFuZGxlci5pc19hbGl2ZSgpIGFuZCBpbnF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgaW5xdWV1ZS5fcmVhZGVyLnJlY3YoKQpAQCAtNDg2LDEyICs1MTIsMTIgQEAKICAgICBkZWYgX3Rlcm1pbmF0ZV9wb29sKGNscywgdGFza3F1ZXVlLCBpbnF1ZXVlLCBvdXRxdWV1ZSwgcG9vbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLCB0YXNrX2hhbmRsZXIsIHJlc3VsdF9oYW5kbGVyLCBjYWNoZSk6CiAgICAgICAgICMgdGhpcyBpcyBndWFyYW50ZWVkIHRvIG9ubHkgYmUgY2FsbGVkIG9uY2UKLSAgICAgICAgZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2ZpbmFsaXppbmcgcG9vbCcpCiAKICAgICAgICAgd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHRhc2tfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKIAotICAgICAgICBkZWJ1ZygnaGVscGluZyB0YXNrIGhhbmRsZXIvd29ya2VycyB0byBmaW5pc2gnKQorICAgICAgICB1dGlsLmRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCiAgICAgICAgIGNscy5faGVscF9zdHVmZl9maW5pc2goaW5xdWV1ZSwgdGFza19oYW5kbGVyLCBsZW4ocG9vbCkpCiAKICAgICAgICAgYXNzZXJ0IHJlc3VsdF9oYW5kbGVyLmlzX2FsaXZlKCkgb3IgbGVuKGNhY2hlKSA9PSAwCkBAIC01MDEsMzEgKzUyNywzMSBAQAogCiAgICAgICAgICMgV2UgbXVzdCB3YWl0IGZvciB0aGUgd29ya2VyIGhhbmRsZXIgdG8gZXhpdCBiZWZvcmUgdGVybWluYXRpbmcKICAgICAgICAgIyB3b3JrZXJzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB3b3JrZXJzIHRvIGJlIHJlc3RhcnRlZCBiZWhpbmQgb3VyIGJhY2suCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyB3b3JrZXIgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB3b3JrZXJfaGFuZGxlcjoKICAgICAgICAgICAgIHdvcmtlcl9oYW5kbGVyLmpvaW4oKQogCiAgICAgICAgICMgVGVybWluYXRlIHdvcmtlcnMgd2hpY2ggaGF2ZW4ndCBhbHJlYWR5IGZpbmlzaGVkLgogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCd0ZXJtaW5hdGluZyB3b3JrZXJzJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmV4aXRjb2RlIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHAudGVybWluYXRlKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyB0YXNrIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCiAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpIGlzIG5vdCB0YXNrX2hhbmRsZXI6CiAgICAgICAgICAgICB0YXNrX2hhbmRsZXIuam9pbigpCiAKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHJlc3VsdCBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHJlc3VsdF9oYW5kbGVyOgogICAgICAgICAgICAgcmVzdWx0X2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6Ci0gICAgICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQogICAgICAgICAgICAgZm9yIHAgaW4gcG9vbDoKICAgICAgICAgICAgICAgICBpZiBwLmlzX2FsaXZlKCk6CiAgICAgICAgICAgICAgICAgICAgICMgd29ya2VyIGhhcyBub3QgeWV0IGV4aXRlZAotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnY2xlYW5pbmcgdXAgd29ya2VyICVkJyAlIHAucGlkKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCiAgICAgICAgICAgICAgICAgICAgIHAuam9pbigpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgpAQCAtNzExLDcgKzczNywxMCBAQAogCiBjbGFzcyBUaHJlYWRQb29sKFBvb2wpOgogCi0gICAgZnJvbSAuZHVtbXkgaW1wb3J0IFByb2Nlc3MKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIFByb2Nlc3MoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGZyb20gLmR1bW15IGltcG9ydCBQcm9jZXNzCisgICAgICAgIHJldHVybiBQcm9jZXNzKCphcmdzLCAqKmt3ZHMpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKICAgICAgICAgUG9vbC5fX2luaXRfXyhzZWxmLCBwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjNjYzE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3JrLnB5CkBAIC0wLDAgKzEsODMgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNpZ25hbAoraW1wb3J0IGVycm5vCisKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBmb3JrCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgbWV0aG9kID0gJ2ZvcmsnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fbGF1bmNoKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RzID0gb3Mud2FpdHBpZChzZWxmLnBpZCwgZmxhZykKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3CisgICAgICAgICAgICAgICAgICAgICMgZS5lcnJubyA9PSBlcnJuby5FQ0hJTEQgPT0gMTAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IC1vcy5XVEVSTVNJRyhzdHMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IG9zLldFWElUU1RBVFVTKHN0cykKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKKyAgICAgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucG9sbChvcy5XTk9IQU5HIGlmIHRpbWVvdXQgPT0gMC4wIGVsc2UgMCkKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCisgICAgICAgICAgICBleGNlcHQgUHJvY2Vzc0xvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgY29kZSA9IDEKKyAgICAgICAgcGFyZW50X3IsIGNoaWxkX3cgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5waWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgc2VsZi5waWQgPT0gMDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShwYXJlbnRfcikKKyAgICAgICAgICAgICAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICAgICAgICAgICAgICByYW5kb20uc2VlZCgpCisgICAgICAgICAgICAgICAgY29kZSA9IHByb2Nlc3Nfb2JqLl9ib290c3RyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfdykKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChwYXJlbnRfciwpKQorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHBhcmVudF9yCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjExNWY4MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9ya3NlcnZlci5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgaW8KK2ltcG9ydCBvcworCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgoraWYgbm90IHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgIHJhaXNlIEltcG9ydEVycm9yKCdObyBzdXBwb3J0IGZvciBzZW5kaW5nIGZkcyBiZXR3ZWVuIHByb2Nlc3NlcycpCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgZm9ya3NlcnZlcgorZnJvbSAuIGltcG9ydCBwb3Blbl9mb3JrCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworCitfX2FsbF9fID0gWydQb3BlbiddCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmQpOgorICAgICAgICBzZWxmLmluZCA9IGluZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBmb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzKClbc2VsZi5pbmRdCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIHNlcnZlciBwcm9jZXNzCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdmb3Jrc2VydmVyJworICAgIER1cEZkID0gX0R1cEZkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzZWxmLl9mZHMgPSBbXQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKGZkKQorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2ZkcykgLSAxCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBidWYpCisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcm9jZXNzX29iaiwgYnVmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgICAgICBzZWxmLnNlbnRpbmVsLCB3ID0gZm9ya3NlcnZlci5jb25uZWN0X3RvX25ld19wcm9jZXNzKHNlbGYuX2ZkcykKKyAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHNlbGYuc2VudGluZWwsKSkKKyAgICAgICAgd2l0aCBvcGVuKHcsICd3YicsIGNsb3NlZmQ9VHJ1ZSkgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLnBpZCA9IGZvcmtzZXJ2ZXIucmVhZF91bnNpZ25lZChzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHBvbGwoc2VsZiwgZmxhZz1vcy5XTk9IQU5HKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCB3YWl0CisgICAgICAgICAgICB0aW1lb3V0ID0gMCBpZiBmbGFnID09IG9zLldOT0hBTkcgZWxzZSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdChbc2VsZi5zZW50aW5lbF0sIHRpbWVvdXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gZm9ya3NlcnZlci5yZWFkX3Vuc2lnbmVkKHNlbGYuc2VudGluZWwpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICAjIFRoZSBwcm9jZXNzIGVuZGVkIGFibm9ybWFsbHkgcGVyaGFwcyBiZWNhdXNlIG9mIGEgc2lnbmFsCisgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMjU1CisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fcG9zaXgucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNWRjNDIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5CkBAIC0wLDAgKzEsNzIgQEAKK2ltcG9ydCBmY250bAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHBvcGVuX2ZvcmsKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworZnJvbSAuIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisKKyMKKyMgV3JhcHBlciBmb3IgYW4gZmQgdXNlZCB3aGlsZSBsYXVuY2hpbmcgYSBwcm9jZXNzCisjCisKK2NsYXNzIF9EdXBGZChvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgIGRlZiBkZXRhY2goc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZkCisKKyMKKyMgU3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyBhIGZyZXNoIGludGVycHJldGVyCisjCisKK2NsYXNzIFBvcGVuKHBvcGVuX2ZvcmsuUG9wZW4pOgorICAgIG1ldGhvZCA9ICdzcGF3bicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgdHJhY2tlcl9mZCA9IHNlbWFwaG9yZV90cmFja2VyLmdldGZkKCkKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZCh0cmFja2VyX2ZkKQorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgZnAgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJlcF9kYXRhLCBmcCkKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCBmcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgcGFyZW50X3IgPSBjaGlsZF93ID0gY2hpbGRfciA9IHBhcmVudF93ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJlbnRfciwgY2hpbGRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY2hpbGRfciwgcGFyZW50X3cgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUodHJhY2tlcl9mZD10cmFja2VyX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1jaGlsZF9yKQorICAgICAgICAgICAgc2VsZi5fZmRzLmV4dGVuZChbY2hpbGRfciwgY2hpbGRfd10pCisgICAgICAgICAgICBzZWxmLnBpZCA9IHV0aWwuc3Bhd252X3Bhc3NmZHMoc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQsIHNlbGYuX2ZkcykKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgorICAgICAgICAgICAgd2l0aCBvcGVuKHBhcmVudF93LCAnd2InLCBjbG9zZWZkPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZnAuZ2V0YnVmZmVyKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBwYXJlbnRfciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIGZvciBmZCBpbiAoY2hpbGRfciwgY2hpbGRfdywgcGFyZW50X3cpOgorICAgICAgICAgICAgICAgIGlmIGZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNTMwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3dpbjMyLnB5CkBAIC0wLDAgKzEsOTkgQEAKK2ltcG9ydCBvcworaW1wb3J0IG1zdmNydAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IF93aW5hcGkKKworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ1BvcGVuJ10KKworIworIworIworCitURVJNSU5BVEUgPSAweDEwMDAwCitXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQorV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworIworIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKKyMgd2hvc2UgY29uc3RydWN0b3IgdGFrZXMgYSBwcm9jZXNzIG9iamVjdCBhcyBpdHMgYXJndW1lbnQuCisjCisKK2NsYXNzIFBvcGVuKG9iamVjdCk6CisgICAgJycnCisgICAgU3RhcnQgYSBzdWJwcm9jZXNzIHRvIHJ1biB0aGUgY29kZSBvZiBhIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgbWV0aG9kID0gJ3NwYXduJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcHJlcF9kYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCisKKyAgICAgICAgIyByZWFkIGVuZCBvZiBwaXBlIHdpbGwgYmUgInN0b2xlbiIgYnkgdGhlIGNoaWxkIHByb2Nlc3MKKyAgICAgICAgIyAtLSBzZWUgc3Bhd25fbWFpbigpIGluIHNwYXduLnB5LgorICAgICAgICByaGFuZGxlLCB3aGFuZGxlID0gX3dpbmFwaS5DcmVhdGVQaXBlKE5vbmUsIDApCisgICAgICAgIHdmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZSh3aGFuZGxlLCAwKQorICAgICAgICBjbWQgPSBzcGF3bi5nZXRfY29tbWFuZF9saW5lKHBhcmVudF9waWQ9b3MuZ2V0cGlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9oYW5kbGU9cmhhbmRsZSkKKyAgICAgICAgY21kID0gJyAnLmpvaW4oJyIlcyInICUgeCBmb3IgeCBpbiBjbWQpCisKKyAgICAgICAgd2l0aCBvcGVuKHdmZCwgJ3diJywgY2xvc2VmZD1UcnVlKSBhcyB0b19jaGlsZDoKKyAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGhwLCBodCwgcGlkLCB0aWQgPSBfd2luYXBpLkNyZWF0ZVByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHNwYXduLmdldF9leGVjdXRhYmxlKCksIGNtZCwKKyAgICAgICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgRmFsc2UsIDAsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHJoYW5kbGUpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCisgICAgICAgICAgICBzZWxmLnBpZCA9IHBpZAorICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBpbnQoaHApCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIF93aW5hcGkuQ2xvc2VIYW5kbGUsIChzZWxmLnNlbnRpbmVsLCkpCisKKyAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oc2VsZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIHRvX2NoaWxkKQorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByb2Nlc3Nfb2JqLCB0b19jaGlsZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgIGFzc2VydCBzZWxmIGlzIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkKKyAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5kdXBsaWNhdGUoaGFuZGxlLCBzZWxmLnNlbnRpbmVsKQorCisgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCisKKyAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvclNpbmdsZU9iamVjdChpbnQoc2VsZi5faGFuZGxlKSwgbXNlY3MpCisgICAgICAgICAgICBpZiByZXMgPT0gX3dpbmFwaS5XQUlUX09CSkVDVF8wOgorICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCisgICAgICAgICAgICAgICAgaWYgY29kZSA9PSBURVJNSU5BVEU6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAtc2lnbmFsLlNJR1RFUk0KKyAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuY29kZQorCisgICAgZGVmIHBvbGwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXR1cm5jb2RlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX3dpbmFwaS5UZXJtaW5hdGVQcm9jZXNzKGludChzZWxmLl9oYW5kbGUpLCBURVJNSU5BVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKaW5kZXggM2QzMmFkZC4uNjg5NTliZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQpAQCAtNyw3ICs3LDcgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nXQorX19hbGxfXyA9IFsnQmFzZVByb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCiAKICMKICMgSW1wb3J0cwpAQCAtNDMsNyArNDMsNyBAQAogICAgIFJldHVybiBsaXN0IG9mIHByb2Nlc3Mgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIGxpdmUgY2hpbGQgcHJvY2Vzc2VzCiAgICAgJycnCiAgICAgX2NsZWFudXAoKQotICAgIHJldHVybiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKQorICAgIHJldHVybiBsaXN0KF9jaGlsZHJlbikKIAogIwogIwpAQCAtNTEsMzMgKzUxLDI5IEBACiAKIGRlZiBfY2xlYW51cCgpOgogICAgICMgY2hlY2sgZm9yIHByb2Nlc3NlcyB3aGljaCBoYXZlIGZpbmlzaGVkCi0gICAgZm9yIHAgaW4gbGlzdChfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbik6CisgICAgZm9yIHAgaW4gbGlzdChfY2hpbGRyZW4pOgogICAgICAgICBpZiBwLl9wb3Blbi5wb2xsKCkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHApCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChwKQogCiAjCiAjIFRoZSBgUHJvY2Vzc2AgY2xhc3MKICMKIAotY2xhc3MgUHJvY2VzcyhvYmplY3QpOgorY2xhc3MgQmFzZVByb2Nlc3Mob2JqZWN0KToKICAgICAnJycKICAgICBQcm9jZXNzIG9iamVjdHMgcmVwcmVzZW50IGFjdGl2aXR5IHRoYXQgaXMgcnVuIGluIGEgc2VwYXJhdGUgcHJvY2VzcwogCi0gICAgVGhlIGNsYXNzIGlzIGFuYWxhZ291cyB0byBgdGhyZWFkaW5nLlRocmVhZGAKKyAgICBUaGUgY2xhc3MgaXMgYW5hbG9nb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAogICAgICcnJwotICAgIF9Qb3BlbiA9IE5vbmUKKyAgICBkZWYgX1BvcGVuKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ3JvdXA9Tm9uZSwgdGFyZ2V0PU5vbmUsIG5hbWU9Tm9uZSwgYXJncz0oKSwga3dhcmdzPXt9LAogICAgICAgICAgICAgICAgICAqLCBkYWVtb249Tm9uZSk6CiAgICAgICAgIGFzc2VydCBncm91cCBpcyBOb25lLCAnZ3JvdXAgYXJndW1lbnQgbXVzdCBiZSBOb25lIGZvciBub3cnCi0gICAgICAgIGNvdW50ID0gbmV4dChfY3VycmVudF9wcm9jZXNzLl9jb3VudGVyKQorICAgICAgICBjb3VudCA9IG5leHQoX3Byb2Nlc3NfY291bnRlcikKICAgICAgICAgc2VsZi5faWRlbnRpdHkgPSBfY3VycmVudF9wcm9jZXNzLl9pZGVudGl0eSArIChjb3VudCwpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBfY3VycmVudF9wcm9jZXNzLl9hdXRoa2V5Ci0gICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gZGFlbW9uCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9kYWVtb25pYyA9IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBfY3VycmVudF9wcm9jZXNzLl90ZW1wZGlyCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IF9jdXJyZW50X3Byb2Nlc3MuX2NvbmZpZy5jb3B5KCkKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IG9zLmdldHBpZCgpCiAgICAgICAgIHNlbGYuX3BvcGVuID0gTm9uZQogICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKQEAgLTg1LDYgKzgxLDggQEAKICAgICAgICAgc2VsZi5fa3dhcmdzID0gZGljdChrd2FyZ3MpCiAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lIG9yIHR5cGUoc2VsZikuX19uYW1lX18gKyAnLScgKyBcCiAgICAgICAgICAgICAgICAgICAgICAnOicuam9pbihzdHIoaSkgZm9yIGkgaW4gc2VsZi5faWRlbnRpdHkpCisgICAgICAgIGlmIGRhZW1vbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gZGFlbW9uCiAgICAgICAgIF9kYW5nbGluZy5hZGQoc2VsZikKIAogICAgIGRlZiBydW4oc2VsZik6CkBAIC0xMDEsMTYgKzk5LDEyIEBACiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAnY2Fubm90IHN0YXJ0IGEgcHJvY2VzcyB0d2ljZScKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BhcmVudF9waWQgPT0gb3MuZ2V0cGlkKCksIFwKICAgICAgICAgICAgICAgICdjYW4gb25seSBzdGFydCBhIHByb2Nlc3Mgb2JqZWN0IGNyZWF0ZWQgYnkgY3VycmVudCBwcm9jZXNzJwotICAgICAgICBhc3NlcnQgbm90IF9jdXJyZW50X3Byb2Nlc3MuX2RhZW1vbmljLCBcCisgICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmdldCgnZGFlbW9uJyksIFwKICAgICAgICAgICAgICAgICdkYWVtb25pYyBwcm9jZXNzZXMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgY2hpbGRyZW4nCiAgICAgICAgIF9jbGVhbnVwKCkKLSAgICAgICAgaWYgc2VsZi5fUG9wZW4gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBQb3BlbiA9IHNlbGYuX1BvcGVuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBzZWxmLl9wb3BlbiA9IFBvcGVuKHNlbGYpCisgICAgICAgIHNlbGYuX3BvcGVuID0gc2VsZi5fUG9wZW4oc2VsZikKICAgICAgICAgc2VsZi5fc2VudGluZWwgPSBzZWxmLl9wb3Blbi5zZW50aW5lbAotICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5hZGQoc2VsZikKKyAgICAgICAgX2NoaWxkcmVuLmFkZChzZWxmKQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKICAgICAgICAgJycnCkBAIC0xMjYsNyArMTIwLDcgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIG5vdCBOb25lLCAnY2FuIG9ubHkgam9pbiBhIHN0YXJ0ZWQgcHJvY2VzcycKICAgICAgICAgcmVzID0gc2VsZi5fcG9wZW4ud2FpdCh0aW1lb3V0KQogICAgICAgICBpZiByZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfY3VycmVudF9wcm9jZXNzLl9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCisgICAgICAgICAgICBfY2hpbGRyZW4uZGlzY2FyZChzZWxmKQogCiAgICAgZGVmIGlzX2FsaXZlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTE1NCw3ICsxNDgsNyBAQAogICAgICAgICAnJycKICAgICAgICAgUmV0dXJuIHdoZXRoZXIgcHJvY2VzcyBpcyBhIGRhZW1vbgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RhZW1vbmljCisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWcuZ2V0KCdkYWVtb24nLCBGYWxzZSkKIAogICAgIEBkYWVtb24uc2V0dGVyCiAgICAgZGVmIGRhZW1vbihzZWxmLCBkYWVtb25pYyk6CkBAIC0xNjIsMTggKzE1NiwxOCBAQAogICAgICAgICBTZXQgd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgTm9uZSwgJ3Byb2Nlc3MgaGFzIGFscmVhZHkgc3RhcnRlZCcKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb25pYworICAgICAgICBzZWxmLl9jb25maWdbJ2RhZW1vbiddID0gZGFlbW9uaWMKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBhdXRoa2V5KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fYXV0aGtleQorICAgICAgICByZXR1cm4gc2VsZi5fY29uZmlnWydhdXRoa2V5J10KIAogICAgIEBhdXRoa2V5LnNldHRlcgogICAgIGRlZiBhdXRoa2V5KHNlbGYsIGF1dGhrZXkpOgogICAgICAgICAnJycKICAgICAgICAgU2V0IGF1dGhvcml6YXRpb24ga2V5IG9mIHByb2Nlc3MKICAgICAgICAgJycnCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhhdXRoa2V5KQorICAgICAgICBzZWxmLl9jb25maWdbJ2F1dGhrZXknXSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgZXhpdGNvZGUoc2VsZik6CkBAIC0yMjcsMTcgKzIyMSwxOSBAQAogICAgICAgICAgICAgICAgIHN0YXR1cyA9ICdzdG9wcGVkWyVzXScgJSBfZXhpdGNvZGVfdG9fbmFtZS5nZXQoc3RhdHVzLCBzdGF0dXMpCiAKICAgICAgICAgcmV0dXJuICc8JXMoJXMsICVzJXMpPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCBzZWxmLl9kYWVtb25pYyBhbmQgJyBkYWVtb24nIG9yICcnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuZGFlbW9uIGFuZCAnIGRhZW1vbicgb3IgJycpCiAKICAgICAjIwogCiAgICAgZGVmIF9ib290c3RyYXAoc2VsZik6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbAotICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcworICAgICAgICBmcm9tIC4gaW1wb3J0IHV0aWwsIGNvbnRleHQKKyAgICAgICAgZ2xvYmFsIF9jdXJyZW50X3Byb2Nlc3MsIF9wcm9jZXNzX2NvdW50ZXIsIF9jaGlsZHJlbgogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gc2V0KCkKLSAgICAgICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXJ0X21ldGhvZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0Ll9mb3JjZV9zdGFydF9tZXRob2Qoc2VsZi5fc3RhcnRfbWV0aG9kKQorICAgICAgICAgICAgX3Byb2Nlc3NfY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgX2NoaWxkcmVuID0gc2V0KCkKICAgICAgICAgICAgIGlmIHN5cy5zdGRpbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCkBAIC0yODUsOCArMjgxLDggQEAKIAogY2xhc3MgQXV0aGVudGljYXRpb25TdHJpbmcoYnl0ZXMpOgogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgotICAgICAgICBmcm9tIC5mb3JraW5nIGltcG9ydCBQb3BlbgotICAgICAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGZyb20gLmNvbnRleHQgaW1wb3J0IGdldF9zcGF3bmluZ19wb3BlbgorICAgICAgICBpZiBnZXRfc3Bhd25pbmdfcG9wZW4oKSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAogICAgICAgICAgICAgICAgICdQaWNrbGluZyBhbiBBdXRoZW50aWNhdGlvblN0cmluZyBvYmplY3QgaXMgJwogICAgICAgICAgICAgICAgICdkaXNhbGxvd2VkIGZvciBzZWN1cml0eSByZWFzb25zJwpAQCAtMjk3LDIwICsyOTMsMjkgQEAKICMgQ3JlYXRlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG1haW4gcHJvY2VzcwogIwogCi1jbGFzcyBfTWFpblByb2Nlc3MoUHJvY2Vzcyk6CitjbGFzcyBfTWFpblByb2Nlc3MoQmFzZVByb2Nlc3MpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudGl0eSA9ICgpCi0gICAgICAgIHNlbGYuX2RhZW1vbmljID0gRmFsc2UKICAgICAgICAgc2VsZi5fbmFtZSA9ICdNYWluUHJvY2VzcycKICAgICAgICAgc2VsZi5fcGFyZW50X3BpZCA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCi0gICAgICAgIHNlbGYuX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpCi0gICAgICAgIHNlbGYuX3RlbXBkaXIgPSBOb25lCisgICAgICAgIHNlbGYuX2NvbmZpZyA9IHsnYXV0aGtleSc6IEF1dGhlbnRpY2F0aW9uU3RyaW5nKG9zLnVyYW5kb20oMzIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZW1wcmVmaXgnOiAnL21wJ30KKyAgICAgICAgIyBOb3RlIHRoYXQgc29tZSB2ZXJzaW9ucyBvZiBGcmVlQlNEIG9ubHkgYWxsb3cgbmFtZWQKKyAgICAgICAgIyBzZW1hcGhvcmVzIHRvIGhhdmUgbmFtZXMgb2YgdXAgdG8gMTQgY2hhcmFjdGVycy4gIFRoZXJlZm9yZQorICAgICAgICAjIHdlIGNob29zZSBhIHNob3J0IHByZWZpeC4KKyAgICAgICAgIworICAgICAgICAjIE9uIE1hY09TWCBpbiBhIHNhbmRib3ggaXQgbWF5IGJlIG5lY2Vzc2FyeSB0byB1c2UgYQorICAgICAgICAjIGRpZmZlcmVudCBwcmVmaXggLS0gc2VlICMxOTQ3OC4KKyAgICAgICAgIworICAgICAgICAjIEV2ZXJ5dGhpbmcgaW4gc2VsZi5fY29uZmlnIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IGRlc2NlbmRhbnQKKyAgICAgICAgIyBwcm9jZXNzZXMuCisKIAogX2N1cnJlbnRfcHJvY2VzcyA9IF9NYWluUHJvY2VzcygpCitfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCitfY2hpbGRyZW4gPSBzZXQoKQogZGVsIF9NYWluUHJvY2VzcwogCiAjCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3F1ZXVlcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CmluZGV4IDM3MjcxZmIuLmY2NTA3NzEgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5CkBAIC0xOCwxMSArMTgsMTQgQEAKIGltcG9ydCBlcnJubwogCiBmcm9tIHF1ZXVlIGltcG9ydCBFbXB0eSwgRnVsbAorCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQotZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IExvY2ssIEJvdW5kZWRTZW1hcGhvcmUsIFNlbWFwaG9yZSwgQ29uZGl0aW9uCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmsKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorCitmcm9tIC51dGlsIGltcG9ydCBkZWJ1ZywgaW5mbywgRmluYWxpemUsIHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGlzX2V4aXRpbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogIwogIyBRdWV1ZSB0eXBlIHVzaW5nIGEgcGlwZSwgYnVmZmVyIGFuZCB0aHJlYWQKQEAgLTMwLDE4ICszMywxOCBAQAogCiBjbGFzcyBRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKICAgICAgICAgaWYgbWF4c2l6ZSA8PSAwOgogICAgICAgICAgICAgbWF4c2l6ZSA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jay5TRU1fVkFMVUVfTUFYCiAgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCi0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX29waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fc2VtID0gQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCisgICAgICAgIHNlbGYuX3NlbSA9IGN0eC5Cb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCiAgICAgICAgICMgRm9yIHVzZSBieSBjb25jdXJyZW50LmZ1dHVyZXMKICAgICAgICAgc2VsZi5faWdub3JlX2VwaXBlID0gRmFsc2UKIApAQCAtNTEsNyArNTQsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBRdWV1ZS5fYWZ0ZXJfZm9yaykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2lnbm9yZV9lcGlwZSwgc2VsZi5fbWF4c2l6ZSwgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrLCBzZWxmLl9zZW0sIHNlbGYuX29waWQpCiAKQEAgLTY5LDggKzcyLDggQEAKICAgICAgICAgc2VsZi5fam9pbmNhbmNlbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlID0gTm9uZQotICAgICAgICBzZWxmLl9zZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgc2VsZi5fcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2CisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMgPSBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcworICAgICAgICBzZWxmLl9yZWN2X2J5dGVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAKICAgICBkZWYgcHV0KHNlbGYsIG9iaiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKQEAgLTg5LDE0ICs5Miw5IEBACiAKICAgICBkZWYgZ2V0KHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGlmIGJsb2NrIGFuZCB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9ybG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKLQorICAgICAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CkBAIC0xMDksMTEgKzEwNywxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKICAgICBkZWYgcXNpemUoc2VsZik6CiAgICAgICAgICMgUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igb24gTWFjIE9TWCBiZWNhdXNlIG9mIGJyb2tlbiBzZW1fZ2V0dmFsdWUoKQpAQCAtMTU4LDcgKzE1Nyw3IEBACiAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCiAgICAgICAgIHNlbGYuX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQoCiAgICAgICAgICAgICB0YXJnZXQ9UXVldWUuX2ZlZWQsCi0gICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kLAorICAgICAgICAgICAgYXJncz0oc2VsZi5fYnVmZmVyLCBzZWxmLl9ub3RlbXB0eSwgc2VsZi5fc2VuZF9ieXRlcywKICAgICAgICAgICAgICAgICAgIHNlbGYuX3dsb2NrLCBzZWxmLl93cml0ZXIuY2xvc2UsIHNlbGYuX2lnbm9yZV9lcGlwZSksCiAgICAgICAgICAgICBuYW1lPSdRdWV1ZUZlZWRlclRocmVhZCcKICAgICAgICAgICAgICkKQEAgLTIxMCwxMCArMjA5LDggQEAKICAgICAgICAgICAgIG5vdGVtcHR5LnJlbGVhc2UoKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgorICAgIGRlZiBfZmVlZChidWZmZXIsIG5vdGVtcHR5LCBzZW5kX2J5dGVzLCB3cml0ZWxvY2ssIGNsb3NlLCBpZ25vcmVfZXBpcGUpOgogICAgICAgICBkZWJ1Zygnc3RhcnRpbmcgdGhyZWFkIHRvIGZlZWQgZGF0YSB0byBwaXBlJykKLSAgICAgICAgZnJvbSAudXRpbCBpbXBvcnQgaXNfZXhpdGluZwotCiAgICAgICAgIG5hY3F1aXJlID0gbm90ZW1wdHkuYWNxdWlyZQogICAgICAgICBucmVsZWFzZSA9IG5vdGVtcHR5LnJlbGVhc2UKICAgICAgICAgbndhaXQgPSBub3RlbXB0eS53YWl0CkBAIC0yNDEsMTIgKzIzOCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgd2FjcXVpcmUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kX2J5dGVzKG9iaikKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FjcXVpcmUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKICAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKQEAgLTI3OSwxMCArMjc4LDEwIEBACiAKIGNsYXNzIEpvaW5hYmxlUXVldWUoUXVldWUpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCk6Ci0gICAgICAgIFF1ZXVlLl9faW5pdF9fKHNlbGYsIG1heHNpemUpCi0gICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSBTZW1hcGhvcmUoMCkKLSAgICAgICAgc2VsZi5fY29uZCA9IENvbmRpdGlvbigpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heHNpemU9MCwgKiwgY3R4KToKKyAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSwgY3R4PWN0eCkKKyAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IGN0eC5TZW1hcGhvcmUoMCkKKyAgICAgICAgc2VsZi5fY29uZCA9IGN0eC5Db25kaXRpb24oKQogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIFF1ZXVlLl9fZ2V0c3RhdGVfXyhzZWxmKSArIChzZWxmLl9jb25kLCBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQpAQCAtMzMyLDQ4ICszMzEsMzcgQEAKIAogY2xhc3MgU2ltcGxlUXVldWUob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBQaXBlKGR1cGxleD1GYWxzZSkKLSAgICAgICAgc2VsZi5fcmxvY2sgPSBMb2NrKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIgPSBjb25uZWN0aW9uLlBpcGUoZHVwbGV4PUZhbHNlKQorICAgICAgICBzZWxmLl9ybG9jayA9IGN0eC5Mb2NrKCkKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBOb25lCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl93bG9jayA9IExvY2soKQotICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCiAKICAgICBkZWYgZW1wdHkoc2VsZik6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5fcG9sbCgpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgcmV0dXJuIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKQogCiAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CiAgICAgICAgIChzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciwgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrKSA9IHN0YXRlCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKLSAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKLSAgICAgICAgcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2Ci0gICAgICAgIHJhY3F1aXJlLCBycmVsZWFzZSA9IHNlbGYuX3Jsb2NrLmFjcXVpcmUsIHNlbGYuX3Jsb2NrLnJlbGVhc2UKLSAgICAgICAgZGVmIGdldCgpOgotICAgICAgICAgICAgcmFjcXVpcmUoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWN2KCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgcnJlbGVhc2UoKQotICAgICAgICBzZWxmLmdldCA9IGdldAorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fcmxvY2s6CisgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWFkZXIucmVjdl9ieXRlcygpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKKyAgICBkZWYgcHV0KHNlbGYsIG9iaik6CisgICAgICAgICMgc2VyaWFsaXplIHRoZSBkYXRhIGJlZm9yZSBhY3F1aXJpbmcgdGhlIGxvY2sKKyAgICAgICAgb2JqID0gRm9ya2luZ1BpY2tsZXIuZHVtcHMob2JqKQogICAgICAgICBpZiBzZWxmLl93bG9jayBpcyBOb25lOgogICAgICAgICAgICAgIyB3cml0ZXMgdG8gYSBtZXNzYWdlIG9yaWVudGVkIHdpbjMyIHBpcGUgYXJlIGF0b21pYwotICAgICAgICAgICAgc2VsZi5wdXQgPSBzZWxmLl93cml0ZXIuc2VuZAorICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VuZCA9IHNlbGYuX3dyaXRlci5zZW5kCi0gICAgICAgICAgICB3YWNxdWlyZSwgd3JlbGVhc2UgPSBzZWxmLl93bG9jay5hY3F1aXJlLCBzZWxmLl93bG9jay5yZWxlYXNlCi0gICAgICAgICAgICBkZWYgcHV0KG9iaik6Ci0gICAgICAgICAgICAgICAgd2FjcXVpcmUoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbmQob2JqKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHdyZWxlYXNlKCkKLSAgICAgICAgICAgIHNlbGYucHV0ID0gcHV0CisgICAgICAgICAgICB3aXRoIHNlbGYuX3dsb2NrOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlci5zZW5kX2J5dGVzKG9iaikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKaW5kZXggNjU2ZmE4Zi4uMDFlNmRlMiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKQEAgLTEsNiArMSw1IEBACiAjCi0jIE1vZHVsZSB0byBhbGxvdyBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyB0byBiZSB0cmFuc2ZlcnJlZAotIyBiZXR3ZWVuIHByb2Nlc3NlcworIyBNb2R1bGUgd2hpY2ggZGVhbHMgd2l0aCBwaWNrbGluZyBvZiBvYmplY3RzLgogIwogIyBtdWx0aXByb2Nlc3NpbmcvcmVkdWN0aW9uLnB5CiAjCkBAIC04LDI3ICs3LDU3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsncmVkdWNlX3NvY2tldCcsICdyZWR1Y2VfY29ubmVjdGlvbicsICdzZW5kX2hhbmRsZScsICdyZWN2X2hhbmRsZSddCi0KK2ltcG9ydCBjb3B5cmVnCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KIGltcG9ydCBvcwotaW1wb3J0IHN5cworaW1wb3J0IHBpY2tsZQogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHN0cnVjdAotaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1Zywgc3ViX2RlYnVnCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBpc19leGl0aW5nLCBzdWJfd2FybmluZworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHV0aWwKIAorX19hbGxfXyA9IFsnc2VuZF9oYW5kbGUnLCAncmVjdl9oYW5kbGUnLCAnRm9ya2luZ1BpY2tsZXInLCAncmVnaXN0ZXInLCAnZHVtcCddCisKKworSEFWRV9TRU5EX0hBTkRMRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgorICAgICAgICAgICAgICAgICAgICAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQsICdTQ01fUklHSFRTJykgYW5kCisgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdzZW5kbXNnJykpKQogCiAjCi0jCisjIFBpY2tsZXIgc3ViY2xhc3MKICMKIAotaWYgbm90KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIChoYXNhdHRyKHNvY2tldCwgJ0NNU0dfTEVOJykgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpKSk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3BpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgRm9ya2luZ1BpY2tsZXIocGlja2xlLlBpY2tsZXIpOgorICAgICcnJ1BpY2tsZXIgc3ViY2xhc3MgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcuJycnCisgICAgX2V4dHJhX3JlZHVjZXJzID0ge30KKyAgICBfY29weXJlZ19kaXNwYXRjaF90YWJsZSA9IGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBzZWxmLl9jb3B5cmVnX2Rpc3BhdGNoX3RhYmxlLmNvcHkoKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZWdpc3RlcihjbHMsIHR5cGUsIHJlZHVjZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBhIHR5cGUuJycnCisgICAgICAgIGNscy5fZXh0cmFfcmVkdWNlcnNbdHlwZV0gPSByZWR1Y2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wcyhjbHMsIG9iaiwgcHJvdG9jb2w9Tm9uZSk6CisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjbHMoYnVmLCBwcm90b2NvbCkuZHVtcChvYmopCisgICAgICAgIHJldHVybiBidWYuZ2V0YnVmZmVyKCkKKworICAgIGxvYWRzID0gcGlja2xlLmxvYWRzCisKK3JlZ2lzdGVyID0gRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIKKworZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lKToKKyAgICAnJydSZXBsYWNlbWVudCBmb3IgcGlja2xlLmR1bXAoKSB1c2luZyBGb3JraW5nUGlja2xlci4nJycKKyAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCiAKICMKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKQEAgLTM2LDIwICs2NSw0NCBAQAogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAjIFdpbmRvd3MKLSAgICBfX2FsbF9fICs9IFsncmVkdWNlX3BpcGVfY29ubmVjdGlvbiddCisgICAgX19hbGxfXyArPSBbJ0R1cEhhbmRsZScsICdkdXBsaWNhdGUnLCAnc3RlYWxfaGFuZGxlJ10KICAgICBpbXBvcnQgX3dpbmFwaQogCisgICAgZGVmIGR1cGxpY2F0ZShoYW5kbGUsIHRhcmdldF9wcm9jZXNzPU5vbmUsIGluaGVyaXRhYmxlPUZhbHNlKToKKyAgICAgICAgJycnRHVwbGljYXRlIGEgaGFuZGxlLiAgKHRhcmdldF9wcm9jZXNzIGlzIGEgaGFuZGxlIG5vdCBhIHBpZCEpJycnCisgICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQorICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCisgICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MpCisKKyAgICBkZWYgc3RlYWxfaGFuZGxlKHNvdXJjZV9waWQsIGhhbmRsZSk6CisgICAgICAgICcnJ1N0ZWFsIGEgaGFuZGxlIGZyb20gcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHNvdXJjZV9waWQuJycnCisgICAgICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZSA9IF93aW5hcGkuT3BlblByb2Nlc3MoCisgICAgICAgICAgICBfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHNvdXJjZV9waWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKKyAgICAgICAgICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIDAsIEZhbHNlLAorICAgICAgICAgICAgICAgIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTIHwgX3dpbmFwaS5EVVBMSUNBVEVfQ0xPU0VfU09VUkNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzb3VyY2VfcHJvY2Vzc19oYW5kbGUpCisKICAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICBkaCA9IER1cEhhbmRsZShoYW5kbGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTLCBkZXN0aW5hdGlvbl9waWQpCiAgICAgICAgIGNvbm4uc2VuZChkaCkKIAogICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgcmV0dXJuIGNvbm4ucmVjdigpLmRldGFjaCgpCiAKICAgICBjbGFzcyBEdXBIYW5kbGUob2JqZWN0KToKKyAgICAgICAgJycnUGlja2xhYmxlIHdyYXBwZXIgZm9yIGEgaGFuZGxlLicnJwogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlLCBhY2Nlc3MsIHBpZD1Ob25lKToKLSAgICAgICAgICAgICMgZHVwbGljYXRlIGhhbmRsZSBmb3IgcHJvY2VzcyB3aXRoIGdpdmVuIHBpZAogICAgICAgICAgICAgaWYgcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSBqdXN0IGR1cGxpY2F0ZSB0aGUgaGFuZGxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kCisgICAgICAgICAgICAgICAgIyBsZXQgdGhlIHJlY2VpdmluZyBwcm9jZXNzIHN0ZWFsIHRoZSBoYW5kbGUuCiAgICAgICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwgcGlkKQogICAgICAgICAgICAgdHJ5OgpAQCAtNjIsOSArMTE1LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9waWQgPSBwaWQKIAogICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBoYW5kbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJwogICAgICAgICAgICAgIyByZXRyaWV2ZSBoYW5kbGUgZnJvbSBwcm9jZXNzIHdoaWNoIGN1cnJlbnRseSBvd25zIGl0CiAgICAgICAgICAgICBpZiBzZWxmLl9waWQgPT0gb3MuZ2V0cGlkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgaGFuZGxlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCBmb3IgdGhpcyBwcm9jZXNzLgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKyAgICAgICAgICAgICMgV2UgbXVzdCBzdGVhbCB0aGUgaGFuZGxlIGZyb20gdGhlIHByb2Nlc3Mgd2hvc2UgcGlkIGlzIHNlbGYuX3BpZC4KICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTc0LDIwNyArMTMwLDExMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHByb2MpCiAKLSAgICBjbGFzcyBEdXBTb2NrZXQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgotICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQotICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIG5ld19zb2NrLmNsb3NlKQotCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0KLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKLQotICAgIGRlZiByZWJ1aWxkX3NvY2tldChkcyk6Ci0gICAgICAgIHJldHVybiBkcy5kZXRhY2goKQotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCi0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBkcyA9IER1cFNvY2tldChzKQotICAgICAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRzLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0gICAgZGVmIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGFjY2VzcyA9ICgoX3dpbmFwaS5GSUxFX0dFTkVSSUNfUkVBRCBpZiBjb25uLnJlYWRhYmxlIGVsc2UgMCkgfAotICAgICAgICAgICAgICAgICAgKF93aW5hcGkuRklMRV9HRU5FUklDX1dSSVRFIGlmIGNvbm4ud3JpdGFibGUgZWxzZSAwKSkKLSAgICAgICAgZGggPSBEdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQotICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZUNvbm5lY3Rpb24KLSAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCiBlbHNlOgogICAgICMgVW5peAorICAgIF9fYWxsX18gKz0gWydEdXBGZCcsICdzZW5kZmRzJywgJ3JlY3ZmZHMnXQorICAgIGltcG9ydCBhcnJheQogCiAgICAgIyBPbiBNYWNPU1ggd2Ugc2hvdWxkIGFja25vd2xlZGdlIHJlY2VpcHQgb2YgZmRzIC0tIHNlZSBJc3N1ZTE0NjY5CiAgICAgQUNLTk9XTEVER0UgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKIAotICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6Ci0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgcy5zZW5kbXNnKFtiJ3gnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCJAaSIsIGhhbmRsZSkpXSkKLSAgICAgICAgaWYgQUNLTk9XTEVER0UgYW5kIGNvbm4ucmVjdl9ieXRlcygpICE9IGInQUNLJzoKKyAgICBkZWYgc2VuZGZkcyhzb2NrLCBmZHMpOgorICAgICAgICAnJydTZW5kIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBmZHMgPSBhcnJheS5hcnJheSgnaScsIGZkcykKKyAgICAgICAgbXNnID0gYnl0ZXMoW2xlbihmZHMpICUgMjU2XSkKKyAgICAgICAgc29jay5zZW5kbXNnKFttc2ddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywgZmRzKV0pCisgICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBzb2NrLnJlY3YoMSkgIT0gYidBJzoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZGlkIG5vdCByZWNlaXZlIGFja25vd2xlZGdlbWVudCBvZiBmZCcpCiAKLSAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6Ci0gICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoIkBpIikKKyAgICBkZWYgcmVjdmZkcyhzb2NrLCBzaXplKToKKyAgICAgICAgJycnUmVjZWl2ZSBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJykKKyAgICAgICAgYnl0ZXNfc2l6ZSA9IGEuaXRlbXNpemUgKiBzaXplCisgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzb2NrLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKGJ5dGVzX3NpemUpKQorICAgICAgICBpZiBub3QgbXNnIGFuZCBub3QgYW5jZGF0YToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgorICAgICAgICAgICAgICAgIHNvY2suc2VuZChiJ0EnKQorICAgICAgICAgICAgaWYgbGVuKGFuY2RhdGEpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWNlaXZlZCAlZCBpdGVtcyBvZiBhbmNkYXRhJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhbmNkYXRhKSkKKyAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQorICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCisgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oY21zZ19kYXRhKSAlIGEuaXRlbXNpemUgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGNtc2dfZGF0YSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGEpICUgMjU2ID09IG1zZ1swXQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGEpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKworICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6CisgICAgICAgICcnJ1NlbmQgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHMucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oc2l6ZSkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgQUNLTk9XTEVER0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhiJ0FDSycpCi0gICAgICAgICAgICAgICAgY21zZ19sZXZlbCwgY21zZ190eXBlLCBjbXNnX2RhdGEgPSBhbmNkYXRhWzBdCi0gICAgICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCJAaSIsIGNtc2dfZGF0YVs6c2l6ZV0pWzBdCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIGRhdGEgcmVjZWl2ZWQnKQorICAgICAgICAgICAgc2VuZGZkcyhzLCBbaGFuZGxlXSkKIAotICAgIGNsYXNzIER1cEZkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6Ci0gICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNlbmRfaGFuZGxlKGNvbm4sIG5ld19mZCwgcGlkKQotICAgICAgICAgICAgZGVmIGNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UobmV3X2ZkKQotICAgICAgICAgICAgc2VsZi5faWQgPSByZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisgICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgorICAgICAgICAnJydSZWNlaXZlIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJworICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHJldHVybiByZWN2ZmRzKHMsIDEpWzBdCiAKLSAgICAgICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgICAgIGNvbm4gPSByZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3ZfaGFuZGxlKGNvbm4pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGRlZiBEdXBGZChmZCk6CisgICAgICAgICcnJ1JldHVybiBhIHdyYXBwZXIgZm9yIGFuIGZkLicnJworICAgICAgICBwb3Blbl9vYmogPSBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpCisgICAgICAgIGlmIHBvcGVuX29iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwb3Blbl9vYmouRHVwRmQocG9wZW5fb2JqLmR1cGxpY2F0ZV9mb3JfY2hpbGQoZmQpKQorICAgICAgICBlbGlmIEhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlX3NoYXJlci5EdXBGZChmZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NDTV9SSUdIVFMgYXBwZWFycyBub3QgdG8gYmUgYXZhaWxhYmxlJykKIAotICAgIGRlZiByZWR1Y2Vfc29ja2V0KHMpOgorIworIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCisjCisKK2RlZiBfcmVkdWNlX21ldGhvZChtKToKKyAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorY2xhc3MgX0M6CisgICAgZGVmIGYoc2VsZik6CisgICAgICAgIHBhc3MKK3JlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCisKKworZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6CisgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKK3JlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorcmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCisKKworZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKKyAgICByZXR1cm4gX3JlYnVpbGRfcGFydGlhbCwgKHAuZnVuYywgcC5hcmdzLCBwLmtleXdvcmRzIG9yIHt9KQorZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgorICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKK3JlZ2lzdGVyKGZ1bmN0b29scy5wYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCisKKyMKKyMgTWFrZSBzb2NrZXRzIHBpY2tsYWJsZQorIworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CisgICAgICAgIGZyb20gLnJlc291cmNlX3NoYXJlciBpbXBvcnQgRHVwU29ja2V0CisgICAgICAgIHJldHVybiBfcmVidWlsZF9zb2NrZXQsIChEdXBTb2NrZXQocyksKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZHMpOgorICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKKworZWxzZToKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CiAgICAgICAgIGRmID0gRHVwRmQocy5maWxlbm8oKSkKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCisgICAgZGVmIF9yZWJ1aWxkX3NvY2tldChkZiwgZmFtaWx5LCB0eXBlLCBwcm90byk6CiAgICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBkZiA9IER1cEZkKGNvbm4uZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZGYsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgZmQgPSBkZi5kZXRhY2goKQotICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0jCi0jIFNlcnZlciB3aGljaCBzaGFyZXMgcmVnaXN0ZXJlZCByZXNvdXJjZXMgd2l0aCBjbGllbnRzCi0jCi0KLWNsYXNzIFJlc291cmNlU2hhcmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9rZXkgPSAwCi0gICAgICAgIHNlbGYuX2NhY2hlID0ge30KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzID0gW10KLSAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBSZXNvdXJjZVNoYXJlci5fYWZ0ZXJmb3JrKQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHNlbmQsIGNsb3NlKToKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKLSAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCi0gICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIGFkZHJlc3MsIGtleSA9IGlkZW50Ci0gICAgICAgIGMgPSBDbGllbnQoYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQotICAgICAgICByZXR1cm4gYwotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLCBhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCi0gICAgICAgICAgICAgICAgYy5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm4oJ1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgbm90IHN0b3Agd2hlbiBhc2tlZCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICAgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLQotICAgIGRlZiBfYWZ0ZXJmb3JrKHNlbGYpOgotICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgIyBJZiBzZWxmLl9sb2NrIHdhcyBsb2NrZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmssIGl0IG1heSBiZSBicm9rZW4KLSAgICAgICAgIyAtLSBzZWUgaXNzdWUgNjcyMS4gIFJlcGxhY2UgaXQgd2l0aG91dCBsZXR0aW5nIGl0IGJlIGdjJ2VkLgotICAgICAgICBzZWxmLl9vbGRfbG9ja3MuYXBwZW5kKHNlbGYuX2xvY2spCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotCi0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgTGlzdGVuZXIKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xpc3RlbmVyIGlzIE5vbmUKLSAgICAgICAgZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcwotICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCi0gICAgICAgIHQuZGFlbW9uID0gVHJ1ZQotICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gdAotCi0gICAgZGVmIF9zZXJ2ZShzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKLSAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdigpCi0gICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAga2V5LCBkZXN0aW5hdGlvbl9waWQgPSBtc2cKLSAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCi0gICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCi0gICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc19leGl0aW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm5pbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAndGhyZWFkIGZvciBzaGFyaW5nIGhhbmRsZXMgcmFpc2VkIGV4Y2VwdGlvbiA6XG4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICctJyo3OSArICdcbicgKyB0cmFjZWJhY2suZm9ybWF0X2V4YygpICsgJy0nKjc5Ci0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLXJlc291cmNlX3NoYXJlciA9IFJlc291cmNlU2hhcmVyKCkKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vPWZkKQorICAgIHJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIF9yZWR1Y2Vfc29ja2V0KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKQEAgLTAsMCArMSwxNTggQEAKKyMKKyMgV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIHNoYXJpbmcgZmRzIG9uIFVuaXgsIGFuZCBmb3Igc2hhcmluZyBzb2NrZXRzIG9uCisjIFdpbmRvd3MuCisjCisjIEEgY2xpZW50IHdoaWNoIHdhbnRzIHRvIHBpY2tsZSBhIHJlc291cmNlIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSByZXNvdXJjZQorIyBzaGFyZXIgYW5kIGdldHMgYW4gaWRlbnRpZmllciBpbiByZXR1cm4uICBUaGUgdW5waWNrbGluZyBwcm9jZXNzIHdpbGwgY29ubmVjdAorIyB0byB0aGUgcmVzb3VyY2Ugc2hhcmVyLCBzZW5kcyB0aGUgaWRlbnRpZmllciBhbmQgaXRzIHBpZCwgYW5kIHRoZW4gcmVjZWl2ZXMKKyMgdGhlIHJlc291cmNlLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ3N0b3AnXQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIF9fYWxsX18gKz0gWydEdXBTb2NrZXQnXQorCisgICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIHNvY2tldC4nJycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQorICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBzb2NrZXQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKKworZWxzZToKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnXQorCisgICAgY2xhc3MgRHVwRmQob2JqZWN0KToKKyAgICAgICAgJycnV3JhcHBlciBmb3IgZmQgd2hpY2ggY2FuIGJlIHVzZWQgYXQgYW55IHRpbWUuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKKyAgICAgICAgICAgIGRlZiBjbG9zZSgpOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBjbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBmZC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCisgICAgICAgICAgICB3aXRoIF9yZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5yZWN2X2hhbmRsZShjb25uKQorCisKK2NsYXNzIF9SZXNvdXJjZVNoYXJlcihvYmplY3QpOgorICAgICcnJ01hbmFnZXIgZm9yIHJlc291Y2VzIHVzaW5nIGJhY2tncm91bmQgdGhyZWFkLicnJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fa2V5ID0gMAorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIHJlc291cmNlLCByZXR1cm5pbmcgYW4gaWRlbnRpZmllci4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKKyAgICAgICAgJycnUmV0dXJuIGNvbm5lY3Rpb24gZnJvbSB3aGljaCB0byByZWNlaXZlIGlkZW50aWZpZWQgcmVzb3VyY2UuJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAorICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAorICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnU3RvcCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgYW5kIGNsZWFyIHJlZ2lzdGVyZWQgcmVzb3VyY2VzLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjID0gQ2xpZW50KHNlbGYuX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbih0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICB1dGlsLnN1Yl93YXJuaW5nKCdfUmVzb3VyY2VTaGFyZXIgdGhyZWFkIGRpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBzdG9wIHdoZW4gYXNrZWQnKQorICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisKKyAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisgICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCisgICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KKyAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCisgICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCisgICAgICAgIHV0aWwuZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBzZWxmLl9saXN0ZW5lci5hZGRyZXNzCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zZXJ2ZSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzZWxmLl90aHJlYWQgPSB0CisKKyAgICBkZWYgX3NlcnZlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ3B0aHJlYWRfc2lnbWFzaycpOgorICAgICAgICAgICAgc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCByYW5nZSgxLCBzaWduYWwuTlNJRykpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKSBhcyBjb25uOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCisgICAgICAgICAgICAgICAgICAgIHNlbmQsIGNsb3NlID0gc2VsZi5fY2FjaGUucG9wKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaWYgbm90IHV0aWwuaXNfZXhpdGluZygpOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisKKworX3Jlc291cmNlX3NoYXJlciA9IF9SZXNvdXJjZVNoYXJlcigpCitzdG9wID0gX3Jlc291cmNlX3NoYXJlci5zdG9wCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIyYjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpAQCAtMCwwICsxLDE0NSBAQAorIworIyBPbiBVbml4IHdlIHJ1biBhIHNlcnZlciBwcm9jZXNzIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHVubGlua2VkCisjIHNlbWFwaG9yZXMuIFRoZSBzZXJ2ZXIgaWdub3JlcyBTSUdJTlQgYW5kIFNJR1RFUk0gYW5kIHJlYWRzIGZyb20gYQorIyBwaXBlLiAgRXZlcnkgb3RoZXIgcHJvY2VzcyBvZiB0aGUgcHJvZ3JhbSBoYXMgYSBjb3B5IG9mIHRoZSB3cml0YWJsZQorIyBlbmQgb2YgdGhlIHBpcGUsIHNvIHdlIGdldCBFT0Ygd2hlbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkLgorIyBUaGVuIHRoZSBzZXJ2ZXIgcHJvY2VzcyB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3JlIG5hbWVzLgorIworIyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBzeXN0ZW0gb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgbnVtYmVyCisjIG9mIG5hbWVkIHNlbWFwaG9yZXMsIGFuZCB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aWxsCisjIHRoZSBuZXh0IHJlYm9vdC4gIFdpdGhvdXQgdGhpcyBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzLCAia2lsbGFsbAorIyBweXRob24iIHdvdWxkIHByb2JhYmx5IGxlYXZlIHVubGlua2VkIHNlbWFwaG9yZXMuCisjCisKK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCisKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKKworX19hbGxfXyA9IFsnZW5zdXJlX3J1bm5pbmcnLCAncmVnaXN0ZXInLCAndW5yZWdpc3RlciddCisKKworY2xhc3MgU2VtYXBob3JlVHJhY2tlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9mZCA9IE5vbmUKKworICAgIGRlZiBnZXRmZChzZWxmKToKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIHJldHVybiBzZWxmLl9mZAorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgcnVuIGZyb20gYW55IHByb2Nlc3MuICBVc3VhbGx5IGEgY2hpbGQgcHJvY2VzcyB3aWxsIHVzZQorICAgICAgICB0aGUgc2VtYXBob3JlIGNyZWF0ZWQgYnkgaXRzIHBhcmVudC4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHN5cy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNtZCA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgbWFpbjttYWluKCVkKScKKyAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcy5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgd2lsbCBvdXQgbGl2ZSB1cywgc28gbm8gbmVlZCB0byB3YWl0IG9uIHBpZAorICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctYycsIGNtZCAlIHJdCisgICAgICAgICAgICAgICAgdXRpbC5zcGF3bnZfcGFzc2ZkcyhleGUsIGFyZ3MsIGZkc190b19wYXNzKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmQgPSB3CisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1JFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydVbnJlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1VOUkVHSVNURVInLCBuYW1lKQorCisgICAgZGVmIF9zZW5kKHNlbGYsIGNtZCwgbmFtZSk6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBtc2cgPSAnezB9OnsxfVxuJy5mb3JtYXQoY21kLCBuYW1lKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgaWYgbGVuKG5hbWUpID4gNTEyOgorICAgICAgICAgICAgIyBwb3NpeCBndWFyYW50ZWVzIHRoYXQgd3JpdGVzIHRvIGEgcGlwZSBvZiBsZXNzIHRoYW4gUElQRV9CVUYKKyAgICAgICAgICAgICMgYnl0ZXMgYXJlIGF0b21pYywgYW5kIHRoYXQgUElQRV9CVUYgPj0gNTEyCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYW1lIHRvbyBsb25nJykKKyAgICAgICAgbmJ5dGVzID0gb3Mud3JpdGUoc2VsZi5fZmQsIG1zZykKKyAgICAgICAgYXNzZXJ0IG5ieXRlcyA9PSBsZW4obXNnKQorCisKK19zZW1hcGhvcmVfdHJhY2tlciA9IFNlbWFwaG9yZVRyYWNrZXIoKQorZW5zdXJlX3J1bm5pbmcgPSBfc2VtYXBob3JlX3RyYWNrZXIuZW5zdXJlX3J1bm5pbmcKK3JlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnJlZ2lzdGVyCit1bnJlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnVucmVnaXN0ZXIKK2dldGZkID0gX3NlbWFwaG9yZV90cmFja2VyLmdldGZkCisKKworZGVmIG1haW4oZmQpOgorICAgICcnJ1J1biBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAjIHByb3RlY3QgdGhlIHByb2Nlc3MgZnJvbSBeQyBhbmQgImtpbGxhbGwgcHl0aG9uIiBldGMKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZm9yIGYgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgY2FjaGUgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgIyBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNlbWFwaG9yZXMKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNtZCwgbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdChiJzonKQorICAgICAgICAgICAgICAgICAgICBpZiBjbWQgPT0gYidSRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gYidVTlJFR0lTVEVSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd1bnJlY29nbml6ZWQgY29tbWFuZCAlcicgJSBjbWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgIyBhbGwgcHJvY2Vzc2VzIGhhdmUgdGVybWluYXRlZDsgY2xlYW51cCBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMKKyAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVha2VkIHNlbWFwaG9yZXMgdG8gY2xlYW4gdXAgYXQgc2h1dGRvd24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjYWNoZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbWUgaW4gY2FjaGU6CisgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIHRoaXMKKyAgICAgICAgICAgICMgc2VtYXBob3JlIGhhcyBmYWlsZWQgdG8gdW5yZWdpc3RlciBpdC4gUHJlc3VtYWJseSBpdCBoYXMgZGllZC4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIHVubGluayBpdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6ICVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKaW5kZXggYTM1OGVkNC4uMGMxNzgyNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKQEAgLTEwLDggKzEwLDExIEBACiBpbXBvcnQgY3R5cGVzCiBpbXBvcnQgd2Vha3JlZgogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgaGVhcCwgUkxvY2sKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgRm9ya2luZ1BpY2tsZXIKK2Zyb20gLiBpbXBvcnQgaGVhcAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAorCitmcm9tIC5jb250ZXh0IGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogX19hbGxfXyA9IFsnUmF3VmFsdWUnLCAnUmF3QXJyYXknLCAnVmFsdWUnLCAnQXJyYXknLCAnY29weScsICdzeW5jaHJvbml6ZWQnXQogCkBAIC02Myw3ICs2Niw3IEBACiAgICAgICAgIHJlc3VsdC5fX2luaXRfXygqc2l6ZV9vcl9pbml0aWFsaXplcikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6CitkZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFZhbHVlCiAgICAgJycnCkBAIC03MSwxMiArNzQsMTMgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgorZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFJhd0FycmF5CiAgICAgJycnCkBAIC04NCwyNSArODgsMjcgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKIGRlZiBjb3B5KG9iaik6CiAgICAgbmV3X29iaiA9IF9uZXdfdmFsdWUodHlwZShvYmopKQogICAgIGN0eXBlcy5wb2ludGVyKG5ld19vYmopWzBdID0gb2JqCiAgICAgcmV0dXJuIG5ld19vYmoKIAotZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSk6CitkZWYgc3luY2hyb25pemVkKG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKG9iaiwgU3luY2hyb25pemVkQmFzZSksICdvYmplY3QgYWxyZWFkeSBzeW5jaHJvbml6ZWQnCisgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKIAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjdHlwZXMuX1NpbXBsZUNEYXRhKToKLSAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLkFycmF5KToKICAgICAgICAgaWYgb2JqLl90eXBlXyBpcyBjdHlwZXMuY19jaGFyOgotICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2spCi0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRBcnJheShvYmosIGxvY2spCisgICAgICAgICAgICByZXR1cm4gU3luY2hyb25pemVkU3RyaW5nKG9iaiwgbG9jaywgY3R4KQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxzZToKICAgICAgICAgY2xzID0gdHlwZShvYmopCiAgICAgICAgIHRyeToKQEAgLTExMiw3ICsxMTgsNyBAQAogICAgICAgICAgICAgZCA9IGRpY3QoKG5hbWUsIG1ha2VfcHJvcGVydHkobmFtZSkpIGZvciBuYW1lIGluIG5hbWVzKQogICAgICAgICAgICAgY2xhc3NuYW1lID0gJ1N5bmNocm9uaXplZCcgKyBjbHMuX19uYW1lX18KICAgICAgICAgICAgIHNjbHMgPSBjbGFzc19jYWNoZVtjbHNdID0gdHlwZShjbGFzc25hbWUsIChTeW5jaHJvbml6ZWRCYXNlLCksIGQpCi0gICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaykKKyAgICAgICAgcmV0dXJuIHNjbHMob2JqLCBsb2NrLCBjdHgpCiAKICMKICMgRnVuY3Rpb25zIGZvciBwaWNrbGluZy91bnBpY2tsaW5nCkBAIC0xNzIsOSArMTc4LDEzIEBACiAKIGNsYXNzIFN5bmNocm9uaXplZEJhc2Uob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29iaiA9IG9iagotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCisgICAgICAgIGlmIGxvY2s6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb2NrID0gY3R4LlJMb2NrKCkKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX2xvY2sucmVsZWFzZQogCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjRiNTNmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpAQCAtMCwwICsxLDI1OCBAQAorIworIyBDb2RlIHVzZWQgdG8gc3RhcnQgcHJvY2Vzc2VzIHdoZW4gdXNpbmcgdGhlIHNwYXduIG9yIGZvcmtzZXJ2ZXIKKyMgc3RhcnQgbWV0aG9kcy4KKyMKKyMgbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzeXMKKworZnJvbSAuIGltcG9ydCBnZXRfc3RhcnRfbWV0aG9kLCBzZXRfc3RhcnRfbWV0aG9kCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydfbWFpbicsICdmcmVlemVfc3VwcG9ydCcsICdzZXRfZXhlY3V0YWJsZScsICdnZXRfZXhlY3V0YWJsZScsCisgICAgICAgICAgICdnZXRfcHJlcGFyYXRpb25fZGF0YScsICdnZXRfY29tbWFuZF9saW5lJywgJ2ltcG9ydF9tYWluX3BhdGgnXQorCisjCisjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgorIyBQZW9wbGUgZW1iZWRkaW5nIFB5dGhvbiB3YW50IHRvIG1vZGlmeSBpdC4KKyMKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgV0lORVhFID0gRmFsc2UKKyAgICBXSU5TRVJWSUNFID0gRmFsc2UKK2Vsc2U6CisgICAgV0lORVhFID0gKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKSkKKyAgICBXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCitpZiBXSU5TRVJWSUNFOgorICAgIF9weXRob25fZXhlID0gb3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgJ3B5dGhvbi5leGUnKQorZWxzZToKKyAgICBfcHl0aG9uX2V4ZSA9IHN5cy5leGVjdXRhYmxlCisKK2RlZiBzZXRfZXhlY3V0YWJsZShleGUpOgorICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQorICAgIF9weXRob25fZXhlID0gZXhlCisKK2RlZiBnZXRfZXhlY3V0YWJsZSgpOgorICAgIHJldHVybiBfcHl0aG9uX2V4ZQorCisjCisjCisjCisKK2RlZiBpc19mb3JraW5nKGFyZ3YpOgorICAgICcnJworICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZworICAgICcnJworICAgIGlmIGxlbihhcmd2KSA+PSAyIGFuZCBhcmd2WzFdID09ICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJzoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitkZWYgZnJlZXplX3N1cHBvcnQoKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBmb3IgcHJvY2VzcyBvYmplY3QgaWYgdGhpcyBpbiBub3QgdGhlIG1haW4gcHJvY2VzcworICAgICcnJworICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgorICAgICAgICBtYWluKCkKKyAgICAgICAgc3lzLmV4aXQoKQorCisKK2RlZiBnZXRfY29tbWFuZF9saW5lKCoqa3dkcyk6CisgICAgJycnCisgICAgUmV0dXJucyBwcmVmaXggb2YgY29tbWFuZCBsaW5lIHVzZWQgZm9yIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworICAgICcnJworICAgIGlmIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpOgorICAgICAgICByZXR1cm4gW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisgICAgZWxzZToKKyAgICAgICAgcHJvZyA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zcGF3biBpbXBvcnQgc3Bhd25fbWFpbjsgc3Bhd25fbWFpbiglcyknCisgICAgICAgIHByb2cgJT0gJywgJy5qb2luKCclcz0lcicgJSBpdGVtIGZvciBpdGVtIGluIGt3ZHMuaXRlbXMoKSkKKyAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIHJldHVybiBbX3B5dGhvbl9leGVdICsgb3B0cyArIFsnLWMnLCBwcm9nLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddCisKKworZGVmIHNwYXduX21haW4ocGlwZV9oYW5kbGUsIHBhcmVudF9waWQ9Tm9uZSwgdHJhY2tlcl9mZD1Ob25lKToKKyAgICAnJycKKyAgICBSdW4gY29kZSBzcGVjaWZlZCBieSBkYXRhIHJlY2VpdmVkIG92ZXIgcGlwZQorICAgICcnJworICAgIGFzc2VydCBpc19mb3JraW5nKHN5cy5hcmd2KQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIGZyb20gLnJlZHVjdGlvbiBpbXBvcnQgc3RlYWxfaGFuZGxlCisgICAgICAgIG5ld19oYW5kbGUgPSBzdGVhbF9oYW5kbGUocGFyZW50X3BpZCwgcGlwZV9oYW5kbGUpCisgICAgICAgIGZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKG5ld19oYW5kbGUsIG9zLk9fUkRPTkxZKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKKyAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHRyYWNrZXJfZmQKKyAgICAgICAgZmQgPSBwaXBlX2hhbmRsZQorICAgIGV4aXRjb2RlID0gX21haW4oZmQpCisgICAgc3lzLmV4aXQoZXhpdGNvZGUpCisKKworZGVmIF9tYWluKGZkKToKKyAgICB3aXRoIG9zLmZkb3BlbihmZCwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmcm9tX3BhcmVudDoKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJlcGFyYXRpb25fZGF0YSA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQorICAgICAgICAgICAgc2VsZiA9IHBpY2tsZS5sb2FkKGZyb21fcGFyZW50KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcKKyAgICByZXR1cm4gc2VsZi5fYm9vdHN0cmFwKCkKKworCitkZWYgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpOgorICAgIGlmIGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19pbmhlcml0aW5nJywgRmFsc2UpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJycnCisgICAgICAgIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBzdGFydCBhIG5ldyBwcm9jZXNzIGJlZm9yZSB0aGUKKyAgICAgICAgY3VycmVudCBwcm9jZXNzIGhhcyBmaW5pc2hlZCBpdHMgYm9vdHN0cmFwcGluZyBwaGFzZS4KKworICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBub3QgdXNpbmcgZm9yayB0byBzdGFydCB5b3VyCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBhbmQgeW91IGhhdmUgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tCisgICAgICAgIGluIHRoZSBtYWluIG1vZHVsZToKKworICAgICAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgICAgICBmcmVlemVfc3VwcG9ydCgpCisgICAgICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhlICJmcmVlemVfc3VwcG9ydCgpIiBsaW5lIGNhbiBiZSBvbWl0dGVkIGlmIHRoZSBwcm9ncmFtCisgICAgICAgIGlzIG5vdCBnb2luZyB0byBiZSBmcm96ZW4gdG8gcHJvZHVjZSBhbiBleGVjdXRhYmxlLicnJykKKworCitkZWYgZ2V0X3ByZXBhcmF0aW9uX2RhdGEobmFtZSk6CisgICAgJycnCisgICAgUmV0dXJuIGluZm8gYWJvdXQgcGFyZW50IG5lZWRlZCBieSBjaGlsZCB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAorICAgICcnJworICAgIF9jaGVja19ub3RfaW1wb3J0aW5nX21haW4oKQorICAgIGQgPSBkaWN0KAorICAgICAgICBsb2dfdG9fc3RkZXJyPXV0aWwuX2xvZ190b19zdGRlcnIsCisgICAgICAgIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5LAorICAgICAgICApCisKKyAgICBpZiB1dGlsLl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gdXRpbC5fbG9nZ2VyLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgIHN5c19wYXRoPXN5cy5wYXRoLmNvcHkoKQorICAgIHRyeToKKyAgICAgICAgaSA9IHN5c19wYXRoLmluZGV4KCcnKQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgc3lzX3BhdGhbaV0gPSBwcm9jZXNzLk9SSUdJTkFMX0RJUgorCisgICAgZC51cGRhdGUoCisgICAgICAgIG5hbWU9bmFtZSwKKyAgICAgICAgc3lzX3BhdGg9c3lzX3BhdGgsCisgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAorICAgICAgICBvcmlnX2Rpcj1wcm9jZXNzLk9SSUdJTkFMX0RJUiwKKyAgICAgICAgZGlyPW9zLmdldGN3ZCgpLAorICAgICAgICBzdGFydF9tZXRob2Q9Z2V0X3N0YXJ0X21ldGhvZCgpLAorICAgICAgICApCisKKyAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBvciAobm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0UpOgorICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQorICAgICAgICBpZiBub3QgbWFpbl9wYXRoIGFuZCBzeXMuYXJndlswXSBub3QgaW4gKCcnLCAnLWMnKToKKyAgICAgICAgICAgIG1haW5fcGF0aCA9IHN5cy5hcmd2WzBdCisgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIChub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgIG1haW5fcGF0aCA9IG9zLnBhdGguam9pbihwcm9jZXNzLk9SSUdJTkFMX0RJUiwgbWFpbl9wYXRoKQorICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKKworICAgIHJldHVybiBkCisKKyMKKyMgUHJlcGFyZSBjdXJyZW50IHByb2Nlc3MKKyMKKworb2xkX21haW5fbW9kdWxlcyA9IFtdCisKK2RlZiBwcmVwYXJlKGRhdGEpOgorICAgICcnJworICAgIFRyeSB0byBnZXQgY3VycmVudCBwcm9jZXNzIHJlYWR5IHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgaWYgJ25hbWUnIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQorCisgICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6CisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSA9IGRhdGFbJ2F1dGhrZXknXQorCisgICAgaWYgJ2xvZ190b19zdGRlcnInIGluIGRhdGEgYW5kIGRhdGFbJ2xvZ190b19zdGRlcnInXToKKyAgICAgICAgdXRpbC5sb2dfdG9fc3RkZXJyKCkKKworICAgIGlmICdsb2dfbGV2ZWwnIGluIGRhdGE6CisgICAgICAgIHV0aWwuZ2V0X2xvZ2dlcigpLnNldExldmVsKGRhdGFbJ2xvZ19sZXZlbCddKQorCisgICAgaWYgJ3N5c19wYXRoJyBpbiBkYXRhOgorICAgICAgICBzeXMucGF0aCA9IGRhdGFbJ3N5c19wYXRoJ10KKworICAgIGlmICdzeXNfYXJndicgaW4gZGF0YToKKyAgICAgICAgc3lzLmFyZ3YgPSBkYXRhWydzeXNfYXJndiddCisKKyAgICBpZiAnZGlyJyBpbiBkYXRhOgorICAgICAgICBvcy5jaGRpcihkYXRhWydkaXInXSkKKworICAgIGlmICdvcmlnX2RpcicgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCisKKyAgICBpZiAnc3RhcnRfbWV0aG9kJyBpbiBkYXRhOgorICAgICAgICBzZXRfc3RhcnRfbWV0aG9kKGRhdGFbJ3N0YXJ0X21ldGhvZCddKQorCisgICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKKyAgICAgICAgaW1wb3J0X21haW5fcGF0aChkYXRhWydtYWluX3BhdGgnXSkKKworCitkZWYgaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpOgorICAgICcnJworICAgIFNldCBzeXMubW9kdWxlc1snX19tYWluX18nXSB0byBtb2R1bGUgYXQgbWFpbl9wYXRoCisgICAgJycnCisgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKKyAgICAjIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gX19maWxlX18KKyAgICAjIGFuZCBhIG1vZHVsZSdzIHJlYWwgbmFtZS4gU2VlIFBFUCAzMDIgYW5kIGlzc3VlICMxMDg0NQorICAgIGlmIGdldGF0dHIoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10sICdfX2ZpbGVfXycsIE5vbmUpID09IG1haW5fcGF0aDoKKyAgICAgICAgcmV0dXJuCisKKyAgICBtYWluX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKSlbMF0KKyAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKKyAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSkKKworICAgIGlmIG1haW5fbmFtZSA9PSAnX19tYWluX18nOgorICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgICAgIG1haW5fbW9kdWxlLl9fZmlsZV9fID0gbWFpbl9wYXRoCisgICAgZWxpZiBtYWluX25hbWUgIT0gJ2lweXRob24nOgorICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQorICAgICAgICAjIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHRoYXQgc2hvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkCisgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKKyAgICAgICAgaW1wb3J0IHR5cGVzCisKKyAgICAgICAgaWYgbWFpbl9wYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBkaXJzID0gTm9uZQorICAgICAgICBlbGlmIG9zLnBhdGguYmFzZW5hbWUobWFpbl9wYXRoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgorICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGlycyA9IFtvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKV0KKworICAgICAgICBhc3NlcnQgbWFpbl9uYW1lIG5vdCBpbiBzeXMubW9kdWxlcywgbWFpbl9uYW1lCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcCgnX19tcF9tYWluX18nLCBOb25lKQorICAgICAgICAjIFdlIHNob3VsZCBub3QgdHJ5IHRvIGxvYWQgX19tYWluX18KKyAgICAgICAgIyBzaW5jZSB0aGF0IHdvdWxkIGV4ZWN1dGUgJ2lmIF9fbmFtZV9fID09ICJfX21haW5fXyInCisgICAgICAgICMgY2xhdXNlcywgcG90ZW50aWFsbHkgY2F1c2luZyBhIHBzdWVkbyBmb3JrIGJvbWIuCisgICAgICAgIG1haW5fbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtYWluX25hbWUpCisgICAgICAgICMgWFhYIFVzZSBhIHRhcmdldCBvZiBtYWluX21vZHVsZT8KKyAgICAgICAgc3BlYyA9IGltcG9ydGxpYi5maW5kX3NwZWMobWFpbl9uYW1lLCBwYXRoPWRpcnMpCisgICAgICAgIG1ldGhvZHMgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKKyAgICAgICAgbWV0aG9kcy5pbml0X21vZHVsZV9hdHRycyhtYWluX21vZHVsZSkKKyAgICAgICAgbWFpbl9tb2R1bGUuX19uYW1lX18gPSAnX19tcF9tYWluX18nCisgICAgICAgIGNvZGUgPSBzcGVjLmxvYWRlci5nZXRfY29kZShtYWluX25hbWUpCisgICAgICAgIGV4ZWMoY29kZSwgbWFpbl9tb2R1bGUuX19kaWN0X18pCisKKyAgICAgICAgb2xkX21haW5fbW9kdWxlcy5hcHBlbmQoc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10pCisgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gc3lzLm1vZHVsZXNbJ19fbXBfbWFpbl9fJ10gPSBtYWluX21vZHVsZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weSBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKaW5kZXggMGZhY2E3OC4uOWQ4ZTI4MiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CkBAIC0xMSwyMCArMTEsMjQgQEAKICAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLCAnRXZlbnQnCiAgICAgXQogCitpbXBvcnQgb3MKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBzeXMKLQoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCByZWdpc3Rlcl9hZnRlcl9mb3JrLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nLCBQb3BlbgorCiBmcm9tIHRpbWUgaW1wb3J0IHRpbWUgYXMgX3RpbWUKIAorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgdXRpbAorCiAjIFRyeSB0byBpbXBvcnQgdGhlIG1wLnN5bmNocm9uaXplIG1vZHVsZSBjbGVhbmx5LCBpZiBpdCBmYWlscwogIyByYWlzZSBJbXBvcnRFcnJvciBmb3IgcGxhdGZvcm1zIGxhY2tpbmcgYSB3b3JraW5nIHNlbV9vcGVuIGltcGxlbWVudGF0aW9uLgogIyBTZWUgaXNzdWUgMzc3MAogdHJ5OgotICAgIGZyb20gX211bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2VtTG9jaworICAgIGZyb20gX211bHRpcHJvY2Vzc2luZyBpbXBvcnQgU2VtTG9jaywgc2VtX3VubGluawogZXhjZXB0IChJbXBvcnRFcnJvcik6CiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIlRoaXMgcGxhdGZvcm0gbGFja3MgYSBmdW5jdGlvbmluZyBzZW1fb3BlbiIgKwogICAgICAgICAgICAgICAgICAgICAgICIgaW1wbGVtZW50YXRpb24sIHRoZXJlZm9yZSwgdGhlIHJlcXVpcmVkIiArCkBAIC00NCwxNSArNDgsNDYgQEAKIAogY2xhc3MgU2VtTG9jayhvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSk6Ci0gICAgICAgIHNsID0gc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jayhraW5kLCB2YWx1ZSwgbWF4dmFsdWUpCi0gICAgICAgIGRlYnVnKCdjcmVhdGVkIHNlbWxvY2sgd2l0aCBoYW5kbGUgJXMnICUgc2wuaGFuZGxlKQorICAgIF9yYW5kID0gdGVtcGZpbGUuX1JhbmRvbU5hbWVTZXF1ZW5jZSgpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwga2luZCwgdmFsdWUsIG1heHZhbHVlLCAqLCBjdHgpOgorICAgICAgICBjdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQorICAgICAgICBjdHggPSBjdHguZ2V0X2NvbnRleHQoKQorICAgICAgICB1bmxpbmtfbm93ID0gc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IgY3R4Ll9uYW1lID09ICdmb3JrJworICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNsID0gc2VsZi5fc2VtbG9jayA9IF9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jaygKKyAgICAgICAgICAgICAgICAgICAga2luZCwgdmFsdWUsIG1heHZhbHVlLCBzZWxmLl9tYWtlX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgdW5saW5rX25vdykKKyAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKCdjYW5ub3QgZmluZCBuYW1lIGZvciBzZW1hcGhvcmUnKQorCisgICAgICAgIHV0aWwuZGVidWcoJ2NyZWF0ZWQgc2VtbG9jayB3aXRoIGhhbmRsZSAlcycgJSBzbC5oYW5kbGUpCiAgICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CiAgICAgICAgICAgICBkZWYgX2FmdGVyX2Zvcmsob2JqKToKICAgICAgICAgICAgICAgICBvYmouX3NlbWxvY2suX2FmdGVyX2ZvcmsoKQotICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfYWZ0ZXJfZm9yaykKKyAgICAgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfYWZ0ZXJfZm9yaykKKworICAgICAgICBpZiBzZWxmLl9zZW1sb2NrLm5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFdlIG9ubHkgZ2V0IGhlcmUgaWYgd2UgYXJlIG9uIFVuaXggd2l0aCBmb3JraW5nCisgICAgICAgICAgICAjIGRpc2FibGVkLiAgV2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIG9yIHRoZQorICAgICAgICAgICAgIyBwcm9jZXNzIHNodXRzIGRvd24gd2UgdW5saW5rIHRoZSBzZW1hcGhvcmUgbmFtZQorICAgICAgICAgICAgZnJvbSAuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IHJlZ2lzdGVyCisgICAgICAgICAgICByZWdpc3RlcihzZWxmLl9zZW1sb2NrLm5hbWUpCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIFNlbUxvY2suX2NsZWFudXAsIChzZWxmLl9zZW1sb2NrLm5hbWUsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdHByaW9yaXR5PTApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jbGVhbnVwKG5hbWUpOgorICAgICAgICBmcm9tIC5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgdW5yZWdpc3RlcgorICAgICAgICBzZW1fdW5saW5rKG5hbWUpCisgICAgICAgIHVucmVnaXN0ZXIobmFtZSkKIAogICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgogICAgICAgICBzZWxmLmFjcXVpcmUgPSBzZWxmLl9zZW1sb2NrLmFjcXVpcmUKQEAgLTY1LDIzICsxMDAsMzIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX19leGl0X18oKmFyZ3MpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrCi0gICAgICAgIHJldHVybiAoUG9wZW4uZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBoID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKS5kdXBsaWNhdGVfZm9yX2NoaWxkKHNsLmhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGggPSBzbC5oYW5kbGUKKyAgICAgICAgcmV0dXJuIChoLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSwgc2wubmFtZSkKIAogICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLl9yZWJ1aWxkKCpzdGF0ZSkKLSAgICAgICAgZGVidWcoJ3JlY3JlYXRlZCBibG9ja2VyIHdpdGggaGFuZGxlICVyJyAlIHN0YXRlWzBdKQorICAgICAgICB1dGlsLmRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfbmFtZSgpOgorICAgICAgICByZXR1cm4gJyVzLSVzJyAlIChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3NlbXByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KFNlbUxvY2suX3JhbmQpKQorCiAjCiAjIFNlbWFwaG9yZQogIwogCiBjbGFzcyBTZW1hcGhvcmUoU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIHZhbHVlLCBTRU1fVkFMVUVfTUFYLCBjdHg9Y3R4KQogCiAgICAgZGVmIGdldF92YWx1ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpCkBAIC05OSw4ICsxNDMsOCBAQAogCiBjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTExNiwxMyArMTYwLDEzIEBACiAKIGNsYXNzIExvY2soU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCAxLCAxKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSwgY3R4PWN0eCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5faXNfbWluZSgpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUgIT0gJ01haW5UaHJlYWQnOgogICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VtbG9jay5fZ2V0X3ZhbHVlKCkgPT0gMToKQEAgLTE0MSwxMyArMTg1LDEzIEBACiAKIGNsYXNzIFJMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFJFQ1VSU0lWRV9NVVRFWCwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zZW1sb2NrLl9jb3VudCgpCkBAIC0xNjcsMTUgKzIxMSwxNSBAQAogCiBjbGFzcyBDb25kaXRpb24ob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUpOgotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCi0gICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dhaXRfc2VtYXBob3JlID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgY3R4LlJMb2NrKCkKKyAgICAgICAgc2VsZi5fc2xlZXBpbmdfY291bnQgPSBjdHguU2VtYXBob3JlKDApCisgICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IGN0eC5TZW1hcGhvcmUoMCkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2xvY2ssIHNlbGYuX3NsZWVwaW5nX2NvdW50LAogICAgICAgICAgICAgICAgIHNlbGYuX3dva2VuX2NvdW50LCBzZWxmLl93YWl0X3NlbWFwaG9yZSkKIApAQCAtMjg5LDkgKzMzMyw5IEBACiAKIGNsYXNzIEV2ZW50KG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQgPSBDb25kaXRpb24oTG9jaygpKQotICAgICAgICBzZWxmLl9mbGFnID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbmQgPSBjdHguQ29uZGl0aW9uKGN0eC5Mb2NrKCkpCisgICAgICAgIHNlbGYuX2ZsYWcgPSBjdHguU2VtYXBob3JlKDApCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQpAQCAtMzQwLDExICszODQsMTEgQEAKIAogY2xhc3MgQmFycmllcih0aHJlYWRpbmcuQmFycmllcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUsICosIGN0eCk6CiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgorICAgICAgICBmcm9tIC5oZWFwIGltcG9ydCBCdWZmZXJXcmFwcGVyCiAgICAgICAgIHdyYXBwZXIgPSBCdWZmZXJXcmFwcGVyKHN0cnVjdC5jYWxjc2l6ZSgnaScpICogMikKLSAgICAgICAgY29uZCA9IENvbmRpdGlvbigpCisgICAgICAgIGNvbmQgPSBjdHguQ29uZGl0aW9uKCkKICAgICAgICAgc2VsZi5fX3NldHN0YXRlX18oKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY29uZCwgd3JhcHBlcikpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gMAogICAgICAgICBzZWxmLl9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQppbmRleCBmNTg2MmI0Li5lNDc2ZTg1IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CkBAIC0xNywxMyArMTcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xlYW51cCBmdW5jdGlvbiBiZWZvcmUgbXVsdGlwcm9jZXNzaW5nIGRvZXMKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncwogCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbgorZnJvbSAuIGltcG9ydCBwcm9jZXNzCiAKIF9fYWxsX18gPSBbCiAgICAgJ3N1Yl9kZWJ1ZycsICdkZWJ1ZycsICdpbmZvJywgJ3N1Yl93YXJuaW5nJywgJ2dldF9sb2dnZXInLAogICAgICdsb2dfdG9fc3RkZXJyJywgJ2dldF90ZW1wX2RpcicsICdyZWdpc3Rlcl9hZnRlcl9mb3JrJywKICAgICAnaXNfZXhpdGluZycsICdGaW5hbGl6ZScsICdGb3JrQXdhcmVUaHJlYWRMb2NrJywgJ0ZvcmtBd2FyZUxvY2FsJywKLSAgICAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCisgICAgJ2Nsb3NlX2FsbF9mZHNfZXhjZXB0JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAogICAgIF0KIAogIwpAQCAtNzEsOCArNzEsNiBAQAogCiAgICAgICAgICAgICBfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoTE9HR0VSX05BTUUpCiAgICAgICAgICAgICBfbG9nZ2VyLnByb3BhZ2F0ZSA9IDAKLSAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKFNVQkRFQlVHLCAnU1VCREVCVUcnKQotICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCV0FSTklORywgJ1NVQldBUk5JTkcnKQogCiAgICAgICAgICAgICAjIFhYWCBtdWx0aXByb2Nlc3Npbmcgc2hvdWxkIGNsZWFudXAgYmVmb3JlIGxvZ2dpbmcKICAgICAgICAgICAgIGlmIGhhc2F0dHIoYXRleGl0LCAndW5yZWdpc3RlcicpOgpAQCAtMTExLDEzICsxMDksMTQgQEAKIAogZGVmIGdldF90ZW1wX2RpcigpOgogICAgICMgZ2V0IG5hbWUgb2YgYSB0ZW1wIGRpcmVjdG9yeSB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cAotICAgIGlmIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyIGlzIE5vbmU6CisgICAgdGVtcGRpciA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2NvbmZpZy5nZXQoJ3RlbXBkaXInKQorICAgIGlmIHRlbXBkaXIgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IHNodXRpbCwgdGVtcGZpbGUKICAgICAgICAgdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdweW1wLScpCiAgICAgICAgIGluZm8oJ2NyZWF0ZWQgdGVtcCBkaXJlY3RvcnkgJXMnLCB0ZW1wZGlyKQogICAgICAgICBGaW5hbGl6ZShOb25lLCBzaHV0aWwucm10cmVlLCBhcmdzPVt0ZW1wZGlyXSwgZXhpdHByaW9yaXR5PS0xMDApCi0gICAgICAgIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyID0gdGVtcGRpcgotICAgIHJldHVybiBjdXJyZW50X3Byb2Nlc3MoKS5fdGVtcGRpcgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3RlbXBkaXInXSA9IHRlbXBkaXIKKyAgICByZXR1cm4gdGVtcGRpcgogCiAjCiAjIFN1cHBvcnQgZm9yIHJlaW5pdGlhbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIGJvb3RzdHJhcHBpbmcgYSBjaGlsZCBwcm9jZXNzCkBAIC0yNzMsOCArMjcyLDggQEAKIF9leGl0aW5nID0gRmFsc2UKIAogZGVmIF9leGl0X2Z1bmN0aW9uKGluZm89aW5mbywgZGVidWc9ZGVidWcsIF9ydW5fZmluYWxpemVycz1fcnVuX2ZpbmFsaXplcnMsCi0gICAgICAgICAgICAgICAgICAgYWN0aXZlX2NoaWxkcmVuPWFjdGl2ZV9jaGlsZHJlbiwKLSAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2Nlc3M9Y3VycmVudF9wcm9jZXNzKToKKyAgICAgICAgICAgICAgICAgICBhY3RpdmVfY2hpbGRyZW49cHJvY2Vzcy5hY3RpdmVfY2hpbGRyZW4sCisgICAgICAgICAgICAgICAgICAgY3VycmVudF9wcm9jZXNzPXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKToKICAgICAjIFdlIGhvbGQgb24gdG8gcmVmZXJlbmNlcyB0byBmdW5jdGlvbnMgaW4gdGhlIGFyZ2xpc3QgZHVlIHRvIHRoZQogICAgICMgc2l0dWF0aW9uIGRlc2NyaWJlZCBiZWxvdywgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhpcwogICAgICMgbW9kdWxlJ3MgZ2xvYmFscyBhcmUgZGVzdHJveWVkLgpAQCAtMzAzLDcgKzMwMiw3IEBACiAgICAgICAgICAgICAjICM5MjA3LgogCiAgICAgICAgICAgICBmb3IgcCBpbiBhY3RpdmVfY2hpbGRyZW4oKToKLSAgICAgICAgICAgICAgICBpZiBwLl9kYWVtb25pYzoKKyAgICAgICAgICAgICAgICBpZiBwLmRhZW1vbjoKICAgICAgICAgICAgICAgICAgICAgaW5mbygnY2FsbGluZyB0ZXJtaW5hdGUoKSBmb3IgZGFlbW9uICVzJywgcC5uYW1lKQogICAgICAgICAgICAgICAgICAgICBwLl9wb3Blbi50ZXJtaW5hdGUoKQogCkBAIC0zMzUsMyArMzM0LDM2IEBACiAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgbGFtYmRhIG9iaiA6IG9iai5fX2RpY3RfXy5jbGVhcigpKQogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCkKKworIworIyBDbG9zZSBmZHMgZXhjZXB0IHRob3NlIHNwZWNpZmllZAorIworCit0cnk6CisgICAgTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCitleGNlcHQgRXhjZXB0aW9uOgorICAgIE1BWEZEID0gMjU2CisKK2RlZiBjbG9zZV9hbGxfZmRzX2V4Y2VwdChmZHMpOgorICAgIGZkcyA9IGxpc3QoZmRzKSArIFstMSwgTUFYRkRdCisgICAgZmRzLnNvcnQoKQorICAgIGFzc2VydCBmZHNbLTFdID09IE1BWEZELCAnZmQgdG9vIGxhcmdlJworICAgIGZvciBpIGluIHJhbmdlKGxlbihmZHMpIC0gMSk6CisgICAgICAgIG9zLmNsb3NlcmFuZ2UoZmRzW2ldKzEsIGZkc1tpKzFdKQorCisjCisjIFN0YXJ0IGEgcHJvZ3JhbSB3aXRoIG9ubHkgc3BlY2lmaWVkIGZkcyBrZXB0IG9wZW4KKyMKKworZGVmIHNwYXdudl9wYXNzZmRzKHBhdGgsIGFyZ3MsIHBhc3NmZHMpOgorICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCisgICAgcGFzc2ZkcyA9IHNvcnRlZChwYXNzZmRzKQorICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgYXJncywgW29zLmZzZW5jb2RlKHBhdGgpXSwgVHJ1ZSwgcGFzc2ZkcywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSwKKyAgICAgICAgICAgIEZhbHNlLCBGYWxzZSwgTm9uZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jbG9zZShlcnJwaXBlX3JlYWQpCisgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfd3JpdGUpCmRpZmYgLS1naXQgYS9MaWIvbmV0cmMucHkgYi9MaWIvbmV0cmMucHkKaW5kZXggMmFhNDhmMy4uYmJiM2QyMyAxMDA2NDQKLS0tIGEvTGliL25ldHJjLnB5CisrKyBiL0xpYi9uZXRyYy5weQpAQCAtMyw4ICszLDYgQEAKICMgTW9kdWxlIGFuZCBkb2N1bWVudGF0aW9uIGJ5IEVyaWMgUy4gUmF5bW9uZCwgMjEgRGVjIDE5OTgKIAogaW1wb3J0IG9zLCBzaGxleCwgc3RhdAotaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgIGltcG9ydCBwd2QKIAogX19hbGxfXyA9IFsibmV0cmMiLCAiTmV0cmNQYXJzZUVycm9yIl0KIApAQCAtMjgsNyArMjYsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsnSE9NRSddLCAiLm5ldHJjIikKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDb3VsZCBub3QgZmluZCAubmV0cmM6ICRIT01FIGlzIG5vdCBzZXQiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCiAgICAgICAgIHNlbGYuaG9zdHMgPSB7fQogICAgICAgICBzZWxmLm1hY3JvcyA9IHt9CiAgICAgICAgIHdpdGggb3BlbihmaWxlKSBhcyBmcDoKQEAgLTkyLDYgKzkwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnIGFuZCBkZWZhdWx0X25ldHJjOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9IG9zLmZzdGF0KGZwLmZpbGVubygpKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5zdF91aWQgIT0gb3MuZ2V0dWlkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHB3ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm93bmVyID0gcHdkLmdldHB3dWlkKHByb3Auc3RfdWlkKVswXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9ubnRwbGliLnB5IGIvTGliL25udHBsaWIucHkKaW5kZXggMDJjYzM3Yy4uZmNiMDFkMyAxMDA2NDQKLS0tIGEvTGliL25udHBsaWIucHkKKysrIGIvTGliL25udHBsaWIucHkKQEAgLTI3OSw3ICsyNzksNyBAQAogCiBpZiBfaGF2ZV9zc2w6CiAKLSAgICBkZWYgX2VuY3J5cHRfb24oc29jaywgY29udGV4dCk6CisgICAgZGVmIF9lbmNyeXB0X29uKHNvY2ssIGNvbnRleHQsIGhvc3RuYW1lKToKICAgICAgICAgIiIiV3JhcCBhIHNvY2tldCBpbiBTU0wvVExTLiBBcmd1bWVudHM6CiAgICAgICAgIC0gc29jazogU29ja2V0IHRvIHdyYXAKICAgICAgICAgLSBjb250ZXh0OiBTU0wgY29udGV4dCB0byB1c2UgZm9yIHRoZSBlbmNyeXB0ZWQgY29ubmVjdGlvbgpAQCAtMjg4LDEwICsyODgsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBHZW5lcmF0ZSBhIGRlZmF1bHQgU1NMIGNvbnRleHQgaWYgbm9uZSB3YXMgcGFzc2VkLgogICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgotICAgICAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgotICAgICAgICByZXR1cm4gY29udGV4dC53cmFwX3NvY2tldChzb2NrKQorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKKyAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gaG9zdG5hbWUgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgIHJldHVybiBjb250ZXh0LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAKIAogIyBUaGUgY2xhc3NlcyB0aGVtc2VsdmVzCkBAIC0zNjYsNyArMzY1LDcgQEAKICAgICAgICAgaWYgaXNfY29ubmVjdGVkKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgpAQCAtOTU2LDcgKzk1NSw3IEBACiAgICAgICAgICAgICAgICAgaWYgYXV0aDoKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBQZXJmb3JtIE5OVFAgYXV0aGVudGljYXRpb24gaWYgbmVlZGVkLgogICAgICAgICBpZiBub3QgdXNlcjoKQEAgLTEwMDcsNyArMTAwNiw3IEBACiAgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUQVJUVExTJykKICAgICAgICAgICAgIGlmIHJlc3Auc3RhcnRzd2l0aCgnMzgyJyk6CiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIGNvbnRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBjb250ZXh0LCBzZWxmLmhvc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQogICAgICAgICAgICAgICAgIHNlbGYudGxzX29uID0gVHJ1ZQogICAgICAgICAgICAgICAgICMgQ2FwYWJpbGl0aWVzIG1heSBjaGFuZ2UgYWZ0ZXIgVExTIHN0YXJ0cyB1cCwgc28gYXNrIGZvciB0aGVtCkBAIC0xMDY3LDcgKzEwNjYsNyBAQAogICAgICAgICAgICAgaW4gZGVmYXVsdCBwb3J0IGFuZCB0aGUgYHNzbF9jb250ZXh0YCBhcmd1bWVudCBmb3IgU1NMIGNvbm5lY3Rpb25zLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0KQotICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBzc2xfY29udGV4dCkKKyAgICAgICAgICAgIHNlbGYuc29jayA9IF9lbmNyeXB0X29uKHNlbGYuc29jaywgc3NsX2NvbnRleHQsIGhvc3QpCiAgICAgICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQogICAgICAgICAgICAgX05OVFBCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGUsIGhvc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVybW9kZT1yZWFkZXJtb2RlLCB0aW1lb3V0PXRpbWVvdXQpCmRpZmYgLS1naXQgYS9MaWIvbnRwYXRoLnB5IGIvTGliL250cGF0aC5weQppbmRleCA4MjZiZTg3Li42YjY1Njk3IDEwMDY0NAotLS0gYS9MaWIvbnRwYXRoLnB5CisrKyBiL0xpYi9udHBhdGgucHkKQEAgLTE3LDcgKzE3LDcgQEAKICAgICAgICAgICAgImlzbW91bnQiLCAiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAogICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCiAgICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyIsInJlbHBhdGgiLAotICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIixdCisgICAgICAgICAgICJzYW1lZmlsZSIsICJzYW1lb3BlbmZpbGUiLCAic2FtZXN0YXQiLF0KIAogIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKICMgVGhlc2UgYXJlIHByaW1hcmlseSBmb3IgZXhwb3J0OyBpbnRlcm5hbGx5LCB0aGV5IGFyZSBoYXJkY29kZWQuCkBAIC0zMCw5ICszMCw2IEBACiBkZWZwYXRoID0gJy47QzpcXGJpbicKIGlmICdjZScgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgogICAgIGRlZnBhdGggPSAnXFxXaW5kb3dzJwotZWxpZiAnb3MyJyBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgIyBPUy8yIHcvIFZBQ1BQCi0gICAgYWx0c2VwID0gJy8nCiBkZXZudWxsID0gJ251bCcKIAogZGVmIF9nZXRfZW1wdHkocGF0aCk6CkBAIC0zMjAsMTIgKzMxNywxMSBAQAogCiBkZWYgaXNsaW5rKHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgotICAgIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuIGZhbHNlIGZvciBXaW5kb3dzIHByaW9yIHRvIDYuMAotICAgIGFuZCBmb3IgT1MvMi4KKyAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAuCiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTTE5LKHN0LnN0X21vZGUpCiAKQEAgLTMzNSwyMCArMzMxLDM5IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIFdpbmRvd3NFcnJvcik6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBUcnVlCiAKLSMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/ICBFaXRoZXIgYSByb290ICh3aXRoIG9yIHdpdGhvdXQgZHJpdmUgbGV0dGVyKQotIyBvciBhbiBVTkMgcGF0aCB3aXRoIGF0IG1vc3QgYSAvIG9yIFwgYWZ0ZXIgdGhlIG1vdW50IHBvaW50LgotCisjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PworIyBBbnkgZHJpdmUgbGV0dGVyIHJvb3QgKGVnIGM6XCkKKyMgQW55IHNoYXJlIFVOQyAoZWcgXFxzZXJ2ZXJcc2hhcmUpCisjIEFueSB2b2x1bWUgbW91bnRlZCBvbiBhIGZpbGVzeXN0ZW0gZm9sZGVyCisjCisjIE5vIG9uZSBtZXRob2QgZGV0ZWN0cyBhbGwgdGhyZWUgc2l0dWF0aW9ucy4gSGlzdG9yaWNhbGx5IHdlJ3ZlIGxleGljYWxseQorIyBkZXRlY3RlZCBkcml2ZSBsZXR0ZXIgcm9vdHMgYW5kIHNoYXJlIFVOQ3MuIFRoZSBjYW5vbmljYWwgYXBwcm9hY2ggdG8KKyMgZGV0ZWN0aW5nIG1vdW50ZWQgdm9sdW1lcyAocXVlcnlpbmcgdGhlIHJlcGFyc2UgdGFnKSBmYWlscyBmb3IgdGhlIG1vc3QKKyMgY29tbW9uIGNhc2U6IGRyaXZlIGxldHRlciByb290cy4gVGhlIGFsdGVybmF0aXZlIHdoaWNoIHVzZXMgR2V0Vm9sdW1lUGF0aE5hbWUKKyMgZmFpbHMgaWYgdGhlIGRyaXZlIGxldHRlciBpcyB0aGUgcmVzdWx0IG9mIGEgU1VCU1QuCit0cnk6CisgICAgZnJvbSBudCBpbXBvcnQgX2dldHZvbHVtZXBhdGhuYW1lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX2dldHZvbHVtZXBhdGhuYW1lID0gTm9uZQogZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCisgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChhIGRyaXZlIHJvb3QsIHRoZSByb290IG9mIGEKKyAgICBzaGFyZSwgb3IgYSBtb3VudGVkIHZvbHVtZSkiIiIKICAgICBzZXBzID0gX2dldF9ib3Roc2VwcyhwYXRoKQorICAgIHBhdGggPSBhYnNwYXRoKHBhdGgpCiAgICAgcm9vdCwgcmVzdCA9IHNwbGl0ZHJpdmUocGF0aCkKICAgICBpZiByb290IGFuZCByb290WzBdIGluIHNlcHM6CiAgICAgICAgIHJldHVybiAobm90IHJlc3QpIG9yIChyZXN0IGluIHNlcHMpCi0gICAgcmV0dXJuIHJlc3QgaW4gc2VwcworICAgIGlmIHJlc3QgaW4gc2VwczoKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIF9nZXR2b2x1bWVwYXRobmFtZToKKyAgICAgICAgcmV0dXJuIHBhdGgucnN0cmlwKHNlcHMpID09IF9nZXR2b2x1bWVwYXRobmFtZShwYXRoKS5yc3RyaXAoc2VwcykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKIAogCiAjIEV4cGFuZCBwYXRocyBiZWdpbm5pbmcgd2l0aCAnficgb3IgJ351c2VyJy4KQEAgLTU4OCw3ICs2MDMsNyBAQAogICAgICAgICBpZiBwYXRoOiAjIEVtcHR5IHBhdGggbXVzdCByZXR1cm4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwYXRoID0gX2dldGZ1bGxwYXRobmFtZShwYXRoKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MgIyBCYWQgcGF0aCAtIHJldHVybiB1bmNoYW5nZWQuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6CiAgICAgICAgICAgICBwYXRoID0gb3MuZ2V0Y3dkYigpCkBAIC02NTYsMjMgKzY3MSw2IEBACiAgICAgZGVmIF9nZXRmaW5hbHBhdGhuYW1lKGYpOgogICAgICAgICByZXR1cm4gbm9ybWNhc2UoYWJzcGF0aChmKSkKIAotZGVmIHNhbWVmaWxlKGYxLCBmMik6Ci0gICAgIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIKLSAgICByZXR1cm4gX2dldGZpbmFscGF0aG5hbWUoZjEpID09IF9nZXRmaW5hbHBhdGhuYW1lKGYyKQotCi0KLXRyeToKLSAgICBmcm9tIG50IGltcG9ydCBfZ2V0ZmlsZWluZm9ybWF0aW9uCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBPbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywganVzdCByZXR1cm4gdGhlIGZkIGFuZCBzZWUgdGhhdAotICAgICMgaXQgY29tcGFyZXMgZXF1YWwgaW4gc2FtZW9wZW5maWxlLgotICAgIGRlZiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGZkKToKLSAgICAgICAgcmV0dXJuIGZkCi0KLWRlZiBzYW1lb3BlbmZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYxKSA9PSBfZ2V0ZmlsZWluZm9ybWF0aW9uKGYyKQotCiAKIHRyeToKICAgICAjIFRoZSBnZW5lcmljcGF0aC5pc2RpciBpbXBsZW1lbnRhdGlvbiB1c2VzIG9zLnN0YXQgYW5kIGNoZWNrcyB0aGUgbW9kZQpkaWZmIC0tZ2l0IGEvTGliL250dXJsMnBhdGgucHkgYi9MaWIvbnR1cmwycGF0aC5weQppbmRleCA1MTFkY2VjLi41YTZkNDRhIDEwMDY0NAotLS0gYS9MaWIvbnR1cmwycGF0aC5weQorKysgYi9MaWIvbnR1cmwycGF0aC5weQpAQCAtMjMsNyArMjMsNyBAQAogICAgIGNvbXAgPSB1cmwuc3BsaXQoJ3wnKQogICAgIGlmIGxlbihjb21wKSAhPSAyIG9yIGNvbXBbMF1bLTFdIG5vdCBpbiBzdHJpbmcuYXNjaWlfbGV0dGVyczoKICAgICAgICAgZXJyb3IgPSAnQmFkIFVSTDogJyArIHVybAotICAgICAgICByYWlzZSBJT0Vycm9yKGVycm9yKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm9yKQogICAgIGRyaXZlID0gY29tcFswXVstMV0udXBwZXIoKQogICAgIGNvbXBvbmVudHMgPSBjb21wWzFdLnNwbGl0KCcvJykKICAgICBwYXRoID0gZHJpdmUgKyAnOicKQEAgLTU1LDcgKzU1LDcgQEAKICAgICBjb21wID0gcC5zcGxpdCgnOicpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgbGVuKGNvbXBbMF0pID4gMToKICAgICAgICAgZXJyb3IgPSAnQmFkIHBhdGg6ICcgKyBwCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAKICAgICBkcml2ZSA9IHVybGxpYi5wYXJzZS5xdW90ZShjb21wWzBdLnVwcGVyKCkpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJ1xcJykKZGlmZiAtLWdpdCBhL0xpYi9vcGNvZGUucHkgYi9MaWIvb3Bjb2RlLnB5CmluZGV4IGE2MzlmZTMuLjBiZDFlZTYgMTAwNjQ0Ci0tLSBhL0xpYi9vcGNvZGUucHkKKysrIGIvTGliL29wY29kZS5weQpAQCAtOCw2ICs4LDE5IEBACiAgICAgICAgICAgICJoYXNsb2NhbCIsICJoYXNjb21wYXJlIiwgImhhc2ZyZWUiLCAib3BuYW1lIiwgIm9wbWFwIiwKICAgICAgICAgICAgIkhBVkVfQVJHVU1FTlQiLCAiRVhURU5ERURfQVJHIiwgImhhc25hcmdzIl0KIAorIyBJdCdzIGEgY2hpY2tlbi1hbmQtZWdnIEknbSBhZnJhaWQ6CisjIFdlJ3JlIGltcG9ydGVkIGJlZm9yZSBfb3Bjb2RlJ3MgbWFkZS4KKyMgV2l0aCBleGNlcHRpb24gdW5oZWVkZWQKKyMgKHN0YWNrX2VmZmVjdCBpcyBub3QgbmVlZGVkKQorIyBCb3RoIG91ciBjaGlja2VucyBhbmQgZWdncyBhcmUgYWxsYXllZC4KKyMgICAgIC0tTGFycnkgSGFzdGluZ3MsIDIwMTMvMTEvMjMKKwordHJ5OgorICAgIGZyb20gX29wY29kZSBpbXBvcnQgc3RhY2tfZWZmZWN0CisgICAgX19hbGxfXy5hcHBlbmQoJ3N0YWNrX2VmZmVjdCcpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworCiBjbXBfb3AgPSAoJzwnLCAnPD0nLCAnPT0nLCAnIT0nLCAnPicsICc+PScsICdpbicsICdub3QgaW4nLCAnaXMnLAogICAgICAgICAnaXMgbm90JywgJ2V4Y2VwdGlvbiBtYXRjaCcsICdCQUQnKQogCkBAIC04NCw3ICs5Nyw2IEBACiBkZWZfb3AoJ0JJTkFSWV9PUicsIDY2KQogZGVmX29wKCdJTlBMQUNFX1BPV0VSJywgNjcpCiBkZWZfb3AoJ0dFVF9JVEVSJywgNjgpCi1kZWZfb3AoJ1NUT1JFX0xPQ0FMUycsIDY5KQogCiBkZWZfb3AoJ1BSSU5UX0VYUFInLCA3MCkKIGRlZl9vcCgnTE9BRF9CVUlMRF9DTEFTUycsIDcxKQpAQCAtMTc5LDYgKzE5MSw5IEBACiBkZWZfb3AoJ1NFVF9BREQnLCAxNDYpCiBkZWZfb3AoJ01BUF9BREQnLCAxNDcpCiAKK2RlZl9vcCgnTE9BRF9DTEFTU0RFUkVGJywgMTQ4KQoraGFzZnJlZS5hcHBlbmQoMTQ4KQorCiBkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NCkKIEVYVEVOREVEX0FSRyA9IDE0NAogCmRpZmYgLS1naXQgYS9MaWIvb3BlcmF0b3IucHkgYi9MaWIvb3BlcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxYTlhNAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9vcGVyYXRvci5weQpAQCAtMCwwICsxLDQxMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitPcGVyYXRvciBJbnRlcmZhY2UKKworVGhpcyBtb2R1bGUgZXhwb3J0cyBhIHNldCBvZiBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50cmluc2ljCitvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIG9wZXJhdG9yLmFkZCh4LCB5KSBpcyBlcXVpdmFsZW50Cit0byB0aGUgZXhwcmVzc2lvbiB4K3kuICBUaGUgZnVuY3Rpb24gbmFtZXMgYXJlIHRob3NlIHVzZWQgZm9yIHNwZWNpYWwKK21ldGhvZHM7IHZhcmlhbnRzIHdpdGhvdXQgbGVhZGluZyBhbmQgdHJhaWxpbmcgJ19fJyBhcmUgYWxzbyBwcm92aWRlZAorZm9yIGNvbnZlbmllbmNlLgorCitUaGlzIGlzIHRoZSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbW9kdWxlLgorIiIiCisKK19fYWxsX18gPSBbJ2FicycsICdhZGQnLCAnYW5kXycsICdhdHRyZ2V0dGVyJywgJ2NvbmNhdCcsICdjb250YWlucycsICdjb3VudE9mJywKKyAgICAgICAgICAgJ2RlbGl0ZW0nLCAnZXEnLCAnZmxvb3JkaXYnLCAnZ2UnLCAnZ2V0aXRlbScsICdndCcsICdpYWRkJywgJ2lhbmQnLAorICAgICAgICAgICAnaWNvbmNhdCcsICdpZmxvb3JkaXYnLCAnaWxzaGlmdCcsICdpbW9kJywgJ2ltdWwnLCAnaW5kZXgnLAorICAgICAgICAgICAnaW5kZXhPZicsICdpbnYnLCAnaW52ZXJ0JywgJ2lvcicsICdpcG93JywgJ2lyc2hpZnQnLCAnaXNfJywKKyAgICAgICAgICAgJ2lzX25vdCcsICdpc3ViJywgJ2l0ZW1nZXR0ZXInLCAnaXRydWVkaXYnLCAnaXhvcicsICdsZScsCisgICAgICAgICAgICdsZW5ndGhfaGludCcsICdsc2hpZnQnLCAnbHQnLCAnbWV0aG9kY2FsbGVyJywgJ21vZCcsICdtdWwnLCAnbmUnLAorICAgICAgICAgICAnbmVnJywgJ25vdF8nLCAnb3JfJywgJ3BvcycsICdwb3cnLCAncnNoaWZ0JywgJ3NldGl0ZW0nLCAnc3ViJywKKyAgICAgICAgICAgJ3RydWVkaXYnLCAndHJ1dGgnLCAneG9yJ10KKworZnJvbSBidWlsdGlucyBpbXBvcnQgYWJzIGFzIF9hYnMKKworCisjIENvbXBhcmlzb24gT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbHQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8IGIuIgorICAgIHJldHVybiBhIDwgYgorCitkZWYgbGUoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PSBiLiIKKyAgICByZXR1cm4gYSA8PSBiCisKK2RlZiBlcShhLCBiKToKKyAgICAiU2FtZSBhcyBhID09IGIuIgorICAgIHJldHVybiBhID09IGIKKworZGVmIG5lKGEsIGIpOgorICAgICJTYW1lIGFzIGEgIT0gYi4iCisgICAgcmV0dXJuIGEgIT0gYgorCitkZWYgZ2UoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PSBiLiIKKyAgICByZXR1cm4gYSA+PSBiCisKK2RlZiBndChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4gYi4iCisgICAgcmV0dXJuIGEgPiBiCisKKyMgTG9naWNhbCBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBub3RfKGEpOgorICAgICJTYW1lIGFzIG5vdCBhLiIKKyAgICByZXR1cm4gbm90IGEKKworZGVmIHRydXRoKGEpOgorICAgICJSZXR1cm4gVHJ1ZSBpZiBhIGlzIHRydWUsIEZhbHNlIG90aGVyd2lzZS4iCisgICAgcmV0dXJuIFRydWUgaWYgYSBlbHNlIEZhbHNlCisKK2RlZiBpc18oYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBiLiIKKyAgICByZXR1cm4gYSBpcyBiCisKK2RlZiBpc19ub3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSBpcyBub3QgYi4iCisgICAgcmV0dXJuIGEgaXMgbm90IGIKKworIyBNYXRoZW1hdGljYWwvQml0d2lzZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGFicyhhKToKKyAgICAiU2FtZSBhcyBhYnMoYSkuIgorICAgIHJldHVybiBfYWJzKGEpCisKK2RlZiBhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIuIgorICAgIHJldHVybiBhICsgYgorCitkZWYgYW5kXyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICYgYi4iCisgICAgcmV0dXJuIGEgJiBiCisKK2RlZiBmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vIGIuIgorICAgIHJldHVybiBhIC8vIGIKKworZGVmIGluZGV4KGEpOgorICAgICJTYW1lIGFzIGEuX19pbmRleF9fKCkuIgorICAgIHJldHVybiBhLl9faW5kZXhfXygpCisKK2RlZiBpbnYoYSk6CisgICAgIlNhbWUgYXMgfmEuIgorICAgIHJldHVybiB+YQoraW52ZXJ0ID0gaW52CisKK2RlZiBsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PCBiLiIKKyAgICByZXR1cm4gYSA8PCBiCisKK2RlZiBtb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlIGIuIgorICAgIHJldHVybiBhICUgYgorCitkZWYgbXVsKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKiBiLiIKKyAgICByZXR1cm4gYSAqIGIKKworZGVmIG5lZyhhKToKKyAgICAiU2FtZSBhcyAtYS4iCisgICAgcmV0dXJuIC1hCisKK2RlZiBvcl8oYSwgYik6CisgICAgIlNhbWUgYXMgYSB8IGIuIgorICAgIHJldHVybiBhIHwgYgorCitkZWYgcG9zKGEpOgorICAgICJTYW1lIGFzICthLiIKKyAgICByZXR1cm4gK2EKKworZGVmIHBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqIGIuIgorICAgIHJldHVybiBhICoqIGIKKworZGVmIHJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+IGIuIgorICAgIHJldHVybiBhID4+IGIKKworZGVmIHN1YihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC0gYi4iCisgICAgcmV0dXJuIGEgLSBiCisKK2RlZiB0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLyBiLiIKKyAgICByZXR1cm4gYSAvIGIKKworZGVmIHhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF4gYi4iCisgICAgcmV0dXJuIGEgXiBiCisKKyMgU2VxdWVuY2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBjb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iCisgICAgaWYgbm90IGhhc2F0dHIoYSwgJ19fZ2V0aXRlbV9fJyk6CisgICAgICAgIG1zZyA9ICInJXMnIG9iamVjdCBjYW4ndCBiZSBjb25jYXRlbmF0ZWQiICUgdHlwZShhKS5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgIHJldHVybiBhICsgYgorCitkZWYgY29udGFpbnMoYSwgYik6CisgICAgIlNhbWUgYXMgYiBpbiBhIChub3RlIHJldmVyc2VkIG9wZXJhbmRzKS4iCisgICAgcmV0dXJuIGIgaW4gYQorCitkZWYgY291bnRPZihhLCBiKToKKyAgICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZXMgYiBvY2N1cnMgaW4gYS4iCisgICAgY291bnQgPSAwCisgICAgZm9yIGkgaW4gYToKKyAgICAgICAgaWYgaSA9PSBiOgorICAgICAgICAgICAgY291bnQgKz0gMQorICAgIHJldHVybiBjb3VudAorCitkZWYgZGVsaXRlbShhLCBiKToKKyAgICAiU2FtZSBhcyBkZWwgYVtiXS4iCisgICAgZGVsIGFbYl0KKworZGVmIGdldGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgYVtiXS4iCisgICAgcmV0dXJuIGFbYl0KKworZGVmIGluZGV4T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIKKyAgICBmb3IgaSwgaiBpbiBlbnVtZXJhdGUoYSk6CisgICAgICAgIGlmIGogPT0gYjoKKyAgICAgICAgICAgIHJldHVybiBpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2VxdWVuY2UuaW5kZXgoeCk6IHggbm90IGluIHNlcXVlbmNlJykKKworZGVmIHNldGl0ZW0oYSwgYiwgYyk6CisgICAgIlNhbWUgYXMgYVtiXSA9IGMuIgorICAgIGFbYl0gPSBjCisKK2RlZiBsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCk6CisgICAgIiIiCisgICAgUmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gb2JqLgorICAgIFRoaXMgaXMgdXNlZnVsIGZvciBwcmVzaXppbmcgY29udGFpbmVycyB3aGVuIGJ1aWxkaW5nIGZyb20gYW4gaXRlcmFibGUuCisKKyAgICBJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIGxlbigpLCB0aGUgcmVzdWx0IHdpbGwgYmUgZXhhY3QuIE90aGVyd2lzZSwgaXQgbWF5CisgICAgb3Zlci0gb3IgdW5kZXItZXN0aW1hdGUgYnkgYW4gYXJiaXRyYXJ5IGFtb3VudC4gVGhlIHJlc3VsdCB3aWxsIGJlIGFuCisgICAgaW50ZWdlciA+PSAwLgorICAgICIiIgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIGludCk6CisgICAgICAgIG1zZyA9ICgiJyVzJyBvYmplY3QgY2Fubm90IGJlIGludGVycHJldGVkIGFzIGFuIGludGVnZXIiICUKKyAgICAgICAgICAgICAgIHR5cGUoZGVmYXVsdCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKKyAgICB0cnk6CisgICAgICAgIHJldHVybiBsZW4ob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgIHRyeToKKyAgICAgICAgaGludCA9IHR5cGUob2JqKS5fX2xlbmd0aF9oaW50X18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICB0cnk6CisgICAgICAgIHZhbCA9IGhpbnQob2JqKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgaWYgdmFsIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbCwgaW50KToKKyAgICAgICAgbXNnID0gKCdfX2xlbmd0aF9oaW50X18gbXVzdCBiZSBpbnRlZ2VyLCBub3QgJXMnICUKKyAgICAgICAgICAgICAgIHR5cGUodmFsKS5fX25hbWVfXykKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiB2YWwgPCAwOgorICAgICAgICBtc2cgPSAnX19sZW5ndGhfaGludF9fKCkgc2hvdWxkIHJldHVybiA+PSAwJworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICByZXR1cm4gdmFsCisKKyMgR2VuZXJhbGl6ZWQgTG9va3VwIE9iamVjdHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2NsYXNzIGF0dHJnZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gYXR0cmlidXRlKHMpIGZyb20gaXRzIG9wZXJhbmQuCisgICAgQWZ0ZXIgZiA9IGF0dHJnZXR0ZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZS4KKyAgICBBZnRlciBnID0gYXR0cmdldHRlcignbmFtZScsICdkYXRlJyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoci5uYW1lLCByLmRhdGUpLgorICAgIEFmdGVyIGggPSBhdHRyZ2V0dGVyKCduYW1lLmZpcnN0JywgJ25hbWUubGFzdCcpLCB0aGUgY2FsbCBoKHIpIHJldHVybnMKKyAgICAoci5uYW1lLmZpcnN0LCByLm5hbWUubGFzdCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGF0dHIsICphdHRycyk6CisgICAgICAgIGlmIG5vdCBhdHRyczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGF0dHIsIHN0cik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykKKyAgICAgICAgICAgIG5hbWVzID0gYXR0ci5zcGxpdCgnLicpCisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ2V0dGVycyA9IHR1cGxlKG1hcChhdHRyZ2V0dGVyLCAoYXR0ciwpICsgYXR0cnMpKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoZ2V0dGVyKG9iaikgZm9yIGdldHRlciBpbiBnZXR0ZXJzKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIGl0ZW1nZXR0ZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgZmV0Y2hlcyB0aGUgZ2l2ZW4gaXRlbShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBpdGVtZ2V0dGVyKDIpLCB0aGUgY2FsbCBmKHIpIHJldHVybnMgclsyXS4KKyAgICBBZnRlciBnID0gaXRlbWdldHRlcigyLCA1LCAzKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zIChyWzJdLCByWzVdLCByWzNdKQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVtLCAqaXRlbXMpOgorICAgICAgICBpZiBub3QgaXRlbXM6CisgICAgICAgICAgICBkZWYgZnVuYyhvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBvYmpbaXRlbV0KKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtcyA9IChpdGVtLCkgKyBpdGVtcworICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUob2JqW2ldIGZvciBpIGluIGl0ZW1zKQorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5fY2FsbChvYmopCisKK2NsYXNzIG1ldGhvZGNhbGxlcjoKKyAgICAiIiIKKyAgICBSZXR1cm4gYSBjYWxsYWJsZSBvYmplY3QgdGhhdCBjYWxscyB0aGUgZ2l2ZW4gbWV0aG9kIG9uIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBtZXRob2RjYWxsZXIoJ25hbWUnKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHIubmFtZSgpLgorICAgIEFmdGVyIGcgPSBtZXRob2RjYWxsZXIoJ25hbWUnLCAnZGF0ZScsIGZvbz0xKSwgdGhlIGNhbGwgZyhyKSByZXR1cm5zCisgICAgci5uYW1lKCdkYXRlJywgZm9vPTEpLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGxlbihhcmdzKSA8IDI6CisgICAgICAgICAgICBtc2cgPSAibWV0aG9kY2FsbGVyIG5lZWRzIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgdGhlIG1ldGhvZCBuYW1lIgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgc2VsZi5fbmFtZSA9IGFyZ3NbMV0KKyAgICAgICAgc2VsZi5fYXJncyA9IGFyZ3NbMjpdCisgICAgICAgIHNlbGYuX2t3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIG9iaik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKG9iaiwgc2VsZi5fbmFtZSkoKnNlbGYuX2FyZ3MsICoqc2VsZi5fa3dhcmdzKQorCisjIEluLXBsYWNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgaWFkZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICs9IGIuIgorICAgIGEgKz0gYgorICAgIHJldHVybiBhCisKK2RlZiBpYW5kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJj0gYi4iCisgICAgYSAmPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGljb25jYXQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWZsb29yZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLy89IGIuIgorICAgIGEgLy89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWxzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhIDw8PSBiLiIKKyAgICBhIDw8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltb2QoYSwgYik6CisgICAgIlNhbWUgYXMgYSAlPSBiLiIKKyAgICBhICU9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICo9IGIuIgorICAgIGEgKj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpb3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSB8PSBiLiIKKyAgICBhIHw9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXBvdyhhLCBiKToKKyAgICAiU2FtZSBhcyBhICoqPSBiLiIKKyAgICBhICoqPWIKKyAgICByZXR1cm4gYQorCitkZWYgaXJzaGlmdChhLCBiKToKKyAgICAiU2FtZSBhcyBhID4+PSBiLiIKKyAgICBhID4+PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtPSBiLiIKKyAgICBhIC09IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXRydWVkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvPSBiLiIKKyAgICBhIC89IGIKKyAgICByZXR1cm4gYQorCitkZWYgaXhvcihhLCBiKToKKyAgICAiU2FtZSBhcyBhIF49IGIuIgorICAgIGEgXj0gYgorICAgIHJldHVybiBhCisKKwordHJ5OgorICAgIGZyb20gX29wZXJhdG9yIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgX19kb2NfXworCisjIEFsbCBvZiB0aGVzZSAiX19mdW5jX18gPSBmdW5jIiBhc3NpZ25tZW50cyBoYXZlIHRvIGhhcHBlbiBhZnRlciBpbXBvcnRpbmcKKyMgZnJvbSBfb3BlcmF0b3IgdG8gbWFrZSBzdXJlIHRoZXkncmUgc2V0IHRvIHRoZSByaWdodCBmdW5jdGlvbgorX19sdF9fID0gbHQKK19fbGVfXyA9IGxlCitfX2VxX18gPSBlcQorX19uZV9fID0gbmUKK19fZ2VfXyA9IGdlCitfX2d0X18gPSBndAorX19ub3RfXyA9IG5vdF8KK19fYWJzX18gPSBhYnMKK19fYWRkX18gPSBhZGQKK19fYW5kX18gPSBhbmRfCitfX2Zsb29yZGl2X18gPSBmbG9vcmRpdgorX19pbmRleF9fID0gaW5kZXgKK19faW52X18gPSBpbnYKK19faW52ZXJ0X18gPSBpbnZlcnQKK19fbHNoaWZ0X18gPSBsc2hpZnQKK19fbW9kX18gPSBtb2QKK19fbXVsX18gPSBtdWwKK19fbmVnX18gPSBuZWcKK19fb3JfXyA9IG9yXworX19wb3NfXyA9IHBvcworX19wb3dfXyA9IHBvdworX19yc2hpZnRfXyA9IHJzaGlmdAorX19zdWJfXyA9IHN1YgorX190cnVlZGl2X18gPSB0cnVlZGl2CitfX3hvcl9fID0geG9yCitfX2NvbmNhdF9fID0gY29uY2F0CitfX2NvbnRhaW5zX18gPSBjb250YWlucworX19kZWxpdGVtX18gPSBkZWxpdGVtCitfX2dldGl0ZW1fXyA9IGdldGl0ZW0KK19fc2V0aXRlbV9fID0gc2V0aXRlbQorX19pYWRkX18gPSBpYWRkCitfX2lhbmRfXyA9IGlhbmQKK19faWNvbmNhdF9fID0gaWNvbmNhdAorX19pZmxvb3JkaXZfXyA9IGlmbG9vcmRpdgorX19pbHNoaWZ0X18gPSBpbHNoaWZ0CitfX2ltb2RfXyA9IGltb2QKK19faW11bF9fID0gaW11bAorX19pb3JfXyA9IGlvcgorX19pcG93X18gPSBpcG93CitfX2lyc2hpZnRfXyA9IGlyc2hpZnQKK19faXN1Yl9fID0gaXN1YgorX19pdHJ1ZWRpdl9fID0gaXRydWVkaXYKK19faXhvcl9fID0gaXhvcgpkaWZmIC0tZ2l0IGEvTGliL29zLnB5IGIvTGliL29zLnB5CmluZGV4IDg3Njg5Y2MuLmU5ODgwYTEgMTAwNjQ0Ci0tLSBhL0xpYi9vcy5weQorKysgYi9MaWIvb3MucHkKQEAgLTEsOSArMSw5IEBACiByIiIiT1Mgcm91dGluZXMgZm9yIE1hYywgTlQsIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KIAogVGhpcyBleHBvcnRzOgotICAtIGFsbCBmdW5jdGlvbnMgZnJvbSBwb3NpeCwgbnQsIG9zMiwgb3IgY2UsIGUuZy4gdW5saW5rLCBzdGF0LCBldGMuCisgIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KICAgLSBvcy5wYXRoIGlzIGVpdGhlciBwb3NpeHBhdGggb3IgbnRwYXRoCi0gIC0gb3MubmFtZSBpcyBlaXRoZXIgJ3Bvc2l4JywgJ250JywgJ29zMicgb3IgJ2NlJy4KKyAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnIG9yICdjZScuCiAgIC0gb3MuY3VyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKCcuJyBvciAnOicpCiAgIC0gb3MucGFyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSAoJy4uJyBvciAnOjonKQogICAtIG9zLnNlcCBpcyB0aGUgKG9yIGEgbW9zdCBjb21tb24pIHBhdGhuYW1lIHNlcGFyYXRvciAoJy8nIG9yICc6JyBvciAnXFwnKQpAQCAtODEsMzAgKzgxLDYgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MKIAotZWxpZiAnb3MyJyBpbiBfbmFtZXM6Ci0gICAgbmFtZSA9ICdvczInCi0gICAgbGluZXNlcCA9ICdcclxuJwotICAgIGZyb20gb3MyIGltcG9ydCAqCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2V4aXQKLSAgICAgICAgX19hbGxfXy5hcHBlbmQoJ19leGl0JykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCdFTVggR0NDJykgPT0gLTE6Ci0gICAgICAgIGltcG9ydCBudHBhdGggYXMgcGF0aAotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBvczJlbXhwYXRoIGFzIHBhdGgKLSAgICAgICAgZnJvbSBfZW14X2xpbmsgaW1wb3J0IGxpbmsKLQotICAgIGltcG9ydCBvczIKLSAgICBfX2FsbF9fLmV4dGVuZChfZ2V0X2V4cG9ydHNfbGlzdChvczIpKQotICAgIGRlbCBvczIKLQotICAgIHRyeToKLSAgICAgICAgZnJvbSBvczIgaW1wb3J0IF9oYXZlX2Z1bmN0aW9ucwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotCiBlbGlmICdjZScgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnY2UnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMjU2LDEwICsyMzIsOSBAQAogICAgIGlmIGhlYWQgYW5kIHRhaWwgYW5kIG5vdCBwYXRoLmV4aXN0cyhoZWFkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbWFrZWRpcnMoaGVhZCwgbW9kZSwgZXhpc3Rfb2spCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICAjIGJlIGhhcHB5IGlmIHNvbWVvbmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBwYXRoCi0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgcGFzcwogICAgICAgICBjZGlyID0gY3VyZGlyCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodGFpbCwgYnl0ZXMpOgogICAgICAgICAgICAgY2RpciA9IGJ5dGVzKGN1cmRpciwgJ0FTQ0lJJykKQEAgLTMwMiw3ICsyNzcsNyBAQAogICAgIHdoaWxlIGhlYWQgYW5kIHRhaWw6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJtZGlyKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBoZWFkLCB0YWlsID0gcGF0aC5zcGxpdChoZWFkKQogCkBAIC0zMjksNyArMzA0LDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZW1vdmVkaXJzKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIF9fYWxsX18uZXh0ZW5kKFsibWFrZWRpcnMiLCAicmVtb3ZlZGlycyIsICJyZW5hbWVzIl0pCkBAIC0zNjUsNyArMzQwLDcgQEAKIAogICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKICAgICBvcHRpb25hbCBhcmcgJ29uZXJyb3InIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgZnVuY3Rpb247IGl0Ci0gICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIG9zLmVycm9yIGluc3RhbmNlLiAgSXQgY2FuCisgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIE9TRXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KICAgICByZXBvcnQgdGhlIGVycm9yIHRvIGNvbnRpbnVlIHdpdGggdGhlIHdhbGssIG9yIHJhaXNlIHRoZSBleGNlcHRpb24KICAgICB0byBhYm9ydCB0aGUgd2Fsay4gIE5vdGUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYXZhaWxhYmxlIGFzIHRoZQogICAgIGZpbGVuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KQEAgLTM5OSwxMCArMzc0LDEwIEBACiAgICAgIyBtaW5vciByZWFzb24gd2hlbiAoc2F5KSBhIHRob3VzYW5kIHJlYWRhYmxlIGRpcmVjdG9yaWVzIGFyZSBzdGlsbAogICAgICMgbGVmdCB0byB2aXNpdC4gIFRoYXQgbG9naWMgaXMgY29waWVkIGhlcmUuCiAgICAgdHJ5OgotICAgICAgICAjIE5vdGUgdGhhdCBsaXN0ZGlyIGFuZCBlcnJvciBhcmUgZ2xvYmFscyBpbiB0aGlzIG1vZHVsZSBkdWUKKyAgICAgICAgIyBOb3RlIHRoYXQgbGlzdGRpciBpcyBnbG9iYWwgaW4gdGhpcyBtb2R1bGUgZHVlCiAgICAgICAgICMgdG8gZWFybGllciBpbXBvcnQtKi4KICAgICAgICAgbmFtZXMgPSBsaXN0ZGlyKHRvcCkKLSAgICBleGNlcHQgZXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQogICAgICAgICByZXR1cm4KQEAgLTUwNCw3ICs0NzksNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9yaWdfc3QgPSBzdGF0KG5hbWUsIGRpcl9mZD10b3BmZCwgZm9sbG93X3N5bWxpbmtzPWZvbGxvd19zeW1saW5rcykKICAgICAgICAgICAgICAgICBkaXJmZCA9IG9wZW4obmFtZSwgT19SRE9OTFksIGRpcl9mZD10b3BmZCkKLSAgICAgICAgICAgIGV4Y2VwdCBlcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgaWYgb25lcnJvciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihlcnIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC01OTksNyArNTc0LDcgQEAKICAgICAgICAgZnVsbG5hbWUgPSBwYXRoLmpvaW4oZGlyLCBmaWxlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjX2Z1bmMoZnVsbG5hbWUsICphcmdyZXN0KQotICAgICAgICBleGNlcHQgZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGxhc3RfZXhjID0gZQogICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQogICAgICAgICAgICAgaWYgKGUuZXJybm8gIT0gZXJybm8uRU5PRU5UIGFuZCBlLmVycm5vICE9IGVycm5vLkVOT1RESVIKQEAgLTY1Niw3ICs2MzEsNyBAQAogCiAKICMgQ2hhbmdlIGVudmlyb24gdG8gYXV0b21hdGljYWxseSBjYWxsIHB1dGVudigpLCB1bnNldGVudiBpZiB0aGV5IGV4aXN0LgotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IE11dGFibGVNYXBwaW5nCiAKIGNsYXNzIF9FbnZpcm9uKE11dGFibGVNYXBwaW5nKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZW5jb2Rla2V5LCBkZWNvZGVrZXksIGVuY29kZXZhbHVlLCBkZWNvZGV2YWx1ZSwgcHV0ZW52LCB1bnNldGVudik6CkBAIC03MTYsMTcgKzY5MSwxOSBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBfcHV0ZW52ID0gbGFtYmRhIGtleSwgdmFsdWU6IE5vbmUKIGVsc2U6Ci0gICAgX19hbGxfXy5hcHBlbmQoInB1dGVudiIpCisgICAgaWYgInB1dGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJwdXRlbnYiKQogCiB0cnk6CiAgICAgX3Vuc2V0ZW52ID0gdW5zZXRlbnYKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgX3Vuc2V0ZW52ID0gbGFtYmRhIGtleTogX3B1dGVudihrZXksICIiKQogZWxzZToKLSAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQorICAgIGlmICJ1bnNldGVudiIgbm90IGluIF9fYWxsX186CisgICAgICAgIF9fYWxsX18uYXBwZW5kKCJ1bnNldGVudiIpCiAKIGRlZiBfY3JlYXRlZW52aXJvbigpOgotICAgIGlmIG5hbWUgaW4gKCdvczInLCAnbnQnKToKKyAgICBpZiBuYW1lID09ICdudCc6CiAgICAgICAgICMgV2hlcmUgRW52IFZhciBOYW1lcyBNdXN0IEJlIFVQUEVSQ0FTRQogICAgICAgICBkZWYgY2hlY2tfc3RyKHZhbHVlKToKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgpAQCAtNzY2LDcgKzc0Myw3IEBACiAgICAga2V5LCBkZWZhdWx0IGFuZCB0aGUgcmVzdWx0IGFyZSBzdHIuIiIiCiAgICAgcmV0dXJuIGVudmlyb24uZ2V0KGtleSwgZGVmYXVsdCkKIAotc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiA9IG5hbWUgbm90IGluICgnb3MyJywgJ250JykKK3N1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSAobmFtZSAhPSAnbnQnKQogX19hbGxfXy5leHRlbmQoKCJnZXRlbnYiLCAic3VwcG9ydHNfYnl0ZXNfZW52aXJvbiIpKQogCiBpZiBzdXBwb3J0c19ieXRlc19lbnZpcm9uOgpAQCAtODY1LDcgKzg0Miw3IEBACiAgICAgICAgICAgICAgICAgZWxpZiBXSUZFWElURUQoc3RzKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiTm90IHN0b3BwZWQsIHNpZ25hbGVkIG9yIGV4aXRlZD8/PyIpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIk5vdCBzdG9wcGVkLCBzaWduYWxlZCBvciBleGl0ZWQ/Pz8iKQogCiAgICAgZGVmIHNwYXdudihtb2RlLCBmaWxlLCBhcmdzKToKICAgICAgICAgIiIic3Bhd252KG1vZGUsIGZpbGUsIGFyZ3MpIC0+IGludGVnZXIKQEAgLTkwOCw2ICs4ODUsMTAgQEAKIG90aGVyd2lzZSByZXR1cm4gLVNJRywgd2hlcmUgU0lHIGlzIHRoZSBzaWduYWwgdGhhdCBraWxsZWQgaXQuICIiIgogICAgICAgICByZXR1cm4gX3NwYXdudmVmKG1vZGUsIGZpbGUsIGFyZ3MsIGVudiwgZXhlY3ZwZSkKIAorCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnYiLCAic3Bhd252ZSIsICJzcGF3bnZwIiwgInNwYXdudnBlIl0pCisKKwogaWYgX2V4aXN0cygic3Bhd252Iik6CiAgICAgIyBUaGVzZSBhcmVuJ3Qgc3VwcGxpZWQgYnkgdGhlIGJhc2ljIFdpbmRvd3MgY29kZQogICAgICMgYnV0IGNhbiBiZSBlYXNpbHkgaW1wbGVtZW50ZWQgaW4gUHl0aG9uCkBAIC05MzMsNyArOTE0LDcgQEAKICAgICAgICAgcmV0dXJuIHNwYXdudmUobW9kZSwgZmlsZSwgYXJnc1s6LTFdLCBlbnYpCiAKIAotICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252IiwgInNwYXdudmUiLCAic3Bhd25sIiwgInNwYXdubGUiLF0pCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bmwiLCAic3Bhd25sZSJdKQogCiAKIGlmIF9leGlzdHMoInNwYXdudnAiKToKQEAgLTk2MSwzNCArOTQyLDggQEAKICAgICAgICAgcmV0dXJuIHNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3NbOi0xXSwgZW52KQogCiAKLSAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudnAiLCAic3Bhd252cGUiLCAic3Bhd25scCIsICJzcGF3bmxwZSIsXSkKKyAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdubHAiLCAic3Bhd25scGUiXSkKIAotaW1wb3J0IGNvcHlyZWcgYXMgX2NvcHlyZWcKLQotZGVmIF9tYWtlX3N0YXRfcmVzdWx0KHR1cCwgZGljdCk6Ci0gICAgcmV0dXJuIHN0YXRfcmVzdWx0KHR1cCwgZGljdCkKLQotZGVmIF9waWNrbGVfc3RhdF9yZXN1bHQoc3IpOgotICAgICh0eXBlLCBhcmdzKSA9IHNyLl9fcmVkdWNlX18oKQotICAgIHJldHVybiAoX21ha2Vfc3RhdF9yZXN1bHQsIGFyZ3MpCi0KLXRyeToKLSAgICBfY29weXJlZy5waWNrbGUoc3RhdF9yZXN1bHQsIF9waWNrbGVfc3RhdF9yZXN1bHQsIF9tYWtlX3N0YXRfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0X3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwotCi1kZWYgX21ha2Vfc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KToKLSAgICByZXR1cm4gc3RhdHZmc19yZXN1bHQodHVwLCBkaWN0KQotCi1kZWYgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdChzcik6Ci0gICAgKHR5cGUsIGFyZ3MpID0gc3IuX19yZWR1Y2VfXygpCi0gICAgcmV0dXJuIChfbWFrZV9zdGF0dmZzX3Jlc3VsdCwgYXJncykKLQotdHJ5OgotICAgIF9jb3B5cmVnLnBpY2tsZShzdGF0dmZzX3Jlc3VsdCwgX3BpY2tsZV9zdGF0dmZzX3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgIF9tYWtlX3N0YXR2ZnNfcmVzdWx0KQotZXhjZXB0IE5hbWVFcnJvcjogIyBzdGF0dmZzX3Jlc3VsdCBtYXkgbm90IGV4aXN0Ci0gICAgcGFzcwogCiAjIFN1cHBseSBvcy5wb3BlbigpCiBkZWYgcG9wZW4oY21kLCBtb2RlPSJyIiwgYnVmZmVyaW5nPS0xKToKZGlmZiAtLWdpdCBhL0xpYi9vczJlbXhwYXRoLnB5IGIvTGliL29zMmVteHBhdGgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjY2JmOGEuLjAwMDAwMDAKLS0tIGEvTGliL29zMmVteHBhdGgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotIyBNb2R1bGUgJ29zMmVteHBhdGgnIC0tIGNvbW1vbiBvcGVyYXRpb25zIG9uIE9TLzIgcGF0aG5hbWVzCi0iIiJDb21tb24gcGF0aG5hbWUgbWFuaXB1bGF0aW9ucywgT1MvMiBFTVggdmVyc2lvbi4KLQotSW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGltcG9ydCBvcyBhbmQgcmVmZXIgdG8gdGhpcwotbW9kdWxlIGFzIG9zLnBhdGguCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3RhdAotZnJvbSBnZW5lcmljcGF0aCBpbXBvcnQgKgotZnJvbSBudHBhdGggaW1wb3J0IChleHBhbmR1c2VyLCBleHBhbmR2YXJzLCBpc2FicywgaXNsaW5rLCBzcGxpdGRyaXZlLAotICAgICAgICAgICAgICAgICAgICBzcGxpdGV4dCwgc3BsaXQpCi0KLV9fYWxsX18gPSBbIm5vcm1jYXNlIiwiaXNhYnMiLCJqb2luIiwic3BsaXRkcml2ZSIsInNwbGl0Iiwic3BsaXRleHQiLAotICAgICAgICAgICAiYmFzZW5hbWUiLCJkaXJuYW1lIiwiY29tbW9ucHJlZml4IiwiZ2V0c2l6ZSIsImdldG10aW1lIiwKLSAgICAgICAgICAgImdldGF0aW1lIiwiZ2V0Y3RpbWUiLCAiaXNsaW5rIiwiZXhpc3RzIiwibGV4aXN0cyIsImlzZGlyIiwiaXNmaWxlIiwKLSAgICAgICAgICAgImlzbW91bnQiLCJleHBhbmR1c2VyIiwiZXhwYW5kdmFycyIsIm5vcm1wYXRoIiwiYWJzcGF0aCIsCi0gICAgICAgICAgICJzcGxpdHVuYyIsImN1cmRpciIsInBhcmRpciIsInNlcCIsInBhdGhzZXAiLCJkZWZwYXRoIiwiYWx0c2VwIiwKLSAgICAgICAgICAgImV4dHNlcCIsImRldm51bGwiLCJyZWFscGF0aCIsInN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzIl0KLQotIyBzdHJpbmdzIHJlcHJlc2VudGluZyB2YXJpb3VzIHBhdGgtcmVsYXRlZCBiaXRzIGFuZCBwaWVjZXMKLWN1cmRpciA9ICcuJwotcGFyZGlyID0gJy4uJwotZXh0c2VwID0gJy4nCi1zZXAgPSAnLycKLWFsdHNlcCA9ICdcXCcKLXBhdGhzZXAgPSAnOycKLWRlZnBhdGggPSAnLjtDOlxcYmluJwotZGV2bnVsbCA9ICdudWwnCi0KLSMgTm9ybWFsaXplIHRoZSBjYXNlIG9mIGEgcGF0aG5hbWUgYW5kIG1hcCBzbGFzaGVzIHRvIGJhY2tzbGFzaGVzLgotIyBPdGhlciBub3JtYWxpemF0aW9ucyAoc3VjaCBhcyBvcHRpbWl6aW5nICcuLi8nIGF3YXkpIGFyZSBub3QgZG9uZQotIyAodGhpcyBpcyBkb25lIGJ5IG5vcm1wYXRoKS4KLQotZGVmIG5vcm1jYXNlKHMpOgotICAgICIiIk5vcm1hbGl6ZSBjYXNlIG9mIHBhdGhuYW1lLgotCi0gICAgTWFrZXMgYWxsIGNoYXJhY3RlcnMgbG93ZXJjYXNlIGFuZCBhbGwgYWx0c2VwcyBpbnRvIHNlcHMuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCi0gICAgcmV0dXJuIHMucmVwbGFjZSgnXFwnLCAnLycpLmxvd2VyKCkKLQotCi0jIEpvaW4gdHdvIChvciBtb3JlKSBwYXRocy4KLQotZGVmIGpvaW4oYSwgKnApOgotICAgICIiIkpvaW4gdHdvIG9yIG1vcmUgcGF0aG5hbWUgY29tcG9uZW50cywgaW5zZXJ0aW5nIHNlcCBhcyBuZWVkZWQiIiIKLSAgICBwYXRoID0gYQotICAgIGZvciBiIGluIHA6Ci0gICAgICAgIGlmIGlzYWJzKGIpOgotICAgICAgICAgICAgcGF0aCA9IGIKLSAgICAgICAgZWxpZiBwYXRoID09ICcnIG9yIHBhdGhbLTE6XSBpbiAnL1xcOic6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aCArIGIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgJy8nICsgYgotICAgIHJldHVybiBwYXRoCi0KLQotIyBQYXJzZSBVTkMgcGF0aHMKLWRlZiBzcGxpdHVuYyhwKToKLSAgICAiIiJTcGxpdCBhIHBhdGhuYW1lIGludG8gVU5DIG1vdW50IHBvaW50IGFuZCByZWxhdGl2ZSBwYXRoIHNwZWNpZmllcnMuCi0KLSAgICBSZXR1cm4gYSAyLXR1cGxlICh1bmMsIHJlc3QpOyBlaXRoZXIgcGFydCBtYXkgYmUgZW1wdHkuCi0gICAgSWYgdW5jIGlzIG5vdCBlbXB0eSwgaXQgaGFzIHRoZSBmb3JtICcvL2hvc3QvbW91bnQnIChvciBzaW1pbGFyCi0gICAgdXNpbmcgYmFja3NsYXNoZXMpLiAgdW5jK3Jlc3QgaXMgYWx3YXlzIHRoZSBpbnB1dCBwYXRoLgotICAgIFBhdGhzIGNvbnRhaW5pbmcgZHJpdmUgbGV0dGVycyBuZXZlciBoYXZlIGFuIFVOQyBwYXJ0LgotICAgICIiIgotICAgIGlmIHBbMToyXSA9PSAnOic6Ci0gICAgICAgIHJldHVybiAnJywgcCAjIERyaXZlIGxldHRlciBwcmVzZW50Ci0gICAgZmlyc3RUd28gPSBwWzA6Ml0KLSAgICBpZiBmaXJzdFR3byA9PSAnLycgKiAyIG9yIGZpcnN0VHdvID09ICdcXCcgKiAyOgotICAgICAgICAjIGlzIGEgVU5DIHBhdGg6Ci0gICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnYgZXF1aXZhbGVudCB0byBkcml2ZSBsZXR0ZXIKLSAgICAgICAgIyBcXG1hY2hpbmVcbW91bnRwb2ludFxkaXJlY3Rvcmllcy4uLgotICAgICAgICAjICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl5eCi0gICAgICAgIG5vcm1wID0gbm9ybWNhc2UocCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgMikKLSAgICAgICAgaWYgaW5kZXggPT0gLTE6Ci0gICAgICAgICAgICAjI3JhaXNlIFJ1bnRpbWVFcnJvciwgJ2lsbGVnYWwgVU5DIHBhdGg6ICInICsgcCArICciJwotICAgICAgICAgICAgcmV0dXJuICgiIiwgcCkKLSAgICAgICAgaW5kZXggPSBub3JtcC5maW5kKCcvJywgaW5kZXggKyAxKQotICAgICAgICBpZiBpbmRleCA9PSAtMToKLSAgICAgICAgICAgIGluZGV4ID0gbGVuKHApCi0gICAgICAgIHJldHVybiBwWzppbmRleF0sIHBbaW5kZXg6XQotICAgIHJldHVybiAnJywgcAotCi0KLSMgUmV0dXJuIHRoZSB0YWlsIChiYXNlbmFtZSkgcGFydCBvZiBhIHBhdGguCi0KLWRlZiBiYXNlbmFtZShwKToKLSAgICAiIiJSZXR1cm5zIHRoZSBmaW5hbCBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVsxXQotCi0KLSMgUmV0dXJuIHRoZSBoZWFkIChkaXJuYW1lKSBwYXJ0IG9mIGEgcGF0aC4KLQotZGVmIGRpcm5hbWUocCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZGlyZWN0b3J5IGNvbXBvbmVudCBvZiBhIHBhdGhuYW1lIiIiCi0gICAgcmV0dXJuIHNwbGl0KHApWzBdCi0KLQotIyBhbGlhcyBleGlzdHMgdG8gbGV4aXN0cwotbGV4aXN0cyA9IGV4aXN0cwotCi0KLSMgSXMgYSBwYXRoIGEgZGlyZWN0b3J5PwotCi0jIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKLSMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KLQotZGVmIGlzbW91bnQocGF0aCk6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IChkZWZpbmVkIGFzIHJvb3Qgb2YgZHJpdmUpIiIiCi0gICAgdW5jLCByZXN0ID0gc3BsaXR1bmMocGF0aCkKLSAgICBpZiB1bmM6Ci0gICAgICAgIHJldHVybiByZXN0IGluICgiIiwgIi8iLCAiXFwiKQotICAgIHAgPSBzcGxpdGRyaXZlKHBhdGgpWzFdCi0gICAgcmV0dXJuIGxlbihwKSA9PSAxIGFuZCBwWzBdIGluICcvXFwnCi0KLQotIyBOb3JtYWxpemUgYSBwYXRoLCBlLmcuIEEvL0IsIEEvLi9CIGFuZCBBL2Zvby8uLi9CIGFsbCBiZWNvbWUgQS9CLgotCi1kZWYgbm9ybXBhdGgocGF0aCk6Ci0gICAgIiIiTm9ybWFsaXplIHBhdGgsIGVsaW1pbmF0aW5nIGRvdWJsZSBzbGFzaGVzLCBldGMuIiIiCi0gICAgcGF0aCA9IHBhdGgucmVwbGFjZSgnXFwnLCAnLycpCi0gICAgcHJlZml4LCBwYXRoID0gc3BsaXRkcml2ZShwYXRoKQotICAgIHdoaWxlIHBhdGhbOjFdID09ICcvJzoKLSAgICAgICAgcHJlZml4ID0gcHJlZml4ICsgJy8nCi0gICAgICAgIHBhdGggPSBwYXRoWzE6XQotICAgIGNvbXBzID0gcGF0aC5zcGxpdCgnLycpCi0gICAgaSA9IDAKLSAgICB3aGlsZSBpIDwgbGVuKGNvbXBzKToKLSAgICAgICAgaWYgY29tcHNbaV0gPT0gJy4nOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ldCi0gICAgICAgIGVsaWYgY29tcHNbaV0gPT0gJy4uJyBhbmQgaSA+IDAgYW5kIGNvbXBzW2ktMV0gbm90IGluICgnJywgJy4uJyk6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaS0xOmkrMV0KLSAgICAgICAgICAgIGkgPSBpIC0gMQotICAgICAgICBlbGlmIGNvbXBzW2ldID09ICcnIGFuZCBpID4gMCBhbmQgY29tcHNbaS0xXSAhPSAnJzoKLSAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaSA9IGkgKyAxCi0gICAgIyBJZiB0aGUgcGF0aCBpcyBub3cgZW1wdHksIHN1YnN0aXR1dGUgJy4nCi0gICAgaWYgbm90IHByZWZpeCBhbmQgbm90IGNvbXBzOgotICAgICAgICBjb21wcy5hcHBlbmQoJy4nKQotICAgIHJldHVybiBwcmVmaXggKyAnLycuam9pbihjb21wcykKLQotCi0jIFJldHVybiBhbiBhYnNvbHV0ZSBwYXRoLgotZGVmIGFic3BhdGgocGF0aCk6Ci0gICAgIiIiUmV0dXJuIHRoZSBhYnNvbHV0ZSB2ZXJzaW9uIG9mIGEgcGF0aCIiIgotICAgIGlmIG5vdCBpc2FicyhwYXRoKToKLSAgICAgICAgcGF0aCA9IGpvaW4ob3MuZ2V0Y3dkKCksIHBhdGgpCi0gICAgcmV0dXJuIG5vcm1wYXRoKHBhdGgpCi0KLSMgcmVhbHBhdGggaXMgYSBuby1vcCBvbiBzeXN0ZW1zIHdpdGhvdXQgaXNsaW5rIHN1cHBvcnQKLXJlYWxwYXRoID0gYWJzcGF0aAotCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvcGF0aGxpYi5weSBiL0xpYi9wYXRobGliLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MDRjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvcGF0aGxpYi5weQpAQCAtMCwwICsxLDEyODEgQEAKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KK2ltcG9ydCBudHBhdGgKK2ltcG9ydCBvcworaW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZQorZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorZnJvbSBlcnJubyBpbXBvcnQgRUlOVkFMLCBFTk9FTlQKK2Zyb20gb3BlcmF0b3IgaW1wb3J0IGF0dHJnZXR0ZXIKK2Zyb20gc3RhdCBpbXBvcnQgU19JU0RJUiwgU19JU0xOSywgU19JU1JFRywgU19JU1NPQ0ssIFNfSVNCTEssIFNfSVNDSFIsIFNfSVNGSUZPCitmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgcXVvdGVfZnJvbV9ieXRlcyBhcyB1cmxxdW90ZV9mcm9tX2J5dGVzCisKKworc3VwcG9ydHNfc3ltbGlua3MgPSBUcnVlCit0cnk6CisgICAgaW1wb3J0IG50CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgbnQgPSBOb25lCitlbHNlOgorICAgIGlmIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXSA+PSAoNiwgMCk6CisgICAgICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaW5hbHBhdGhuYW1lCisgICAgZWxzZToKKyAgICAgICAgc3VwcG9ydHNfc3ltbGlua3MgPSBGYWxzZQorICAgICAgICBfZ2V0ZmluYWxwYXRobmFtZSA9IE5vbmUKKworCitfX2FsbF9fID0gWworICAgICJQdXJlUGF0aCIsICJQdXJlUG9zaXhQYXRoIiwgIlB1cmVXaW5kb3dzUGF0aCIsCisgICAgIlBhdGgiLCAiUG9zaXhQYXRoIiwgIldpbmRvd3NQYXRoIiwKKyAgICBdCisKKyMKKyMgSW50ZXJuYWxzCisjCisKK2RlZiBfaXNfd2lsZGNhcmRfcGF0dGVybihwYXQpOgorICAgICMgV2hldGhlciB0aGlzIHBhdHRlcm4gbmVlZHMgYWN0dWFsIG1hdGNoaW5nIHVzaW5nIGZubWF0Y2gsIG9yIGNhbgorICAgICMgYmUgbG9va2VkIHVwIGRpcmVjdGx5IGFzIGEgZmlsZS4KKyAgICByZXR1cm4gIioiIGluIHBhdCBvciAiPyIgaW4gcGF0IG9yICJbIiBpbiBwYXQKKworCitjbGFzcyBfRmxhdm91cihvYmplY3QpOgorICAgICIiIkEgZmxhdm91ciBpbXBsZW1lbnRzIGEgcGFydGljdWxhciAocGxhdGZvcm0tc3BlY2lmaWMpIHNldCBvZiBwYXRoCisgICAgc2VtYW50aWNzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmpvaW4gPSBzZWxmLnNlcC5qb2luCisKKyAgICBkZWYgcGFyc2VfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICBwYXJzZWQgPSBbXQorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBhbHRzZXAgPSBzZWxmLmFsdHNlcAorICAgICAgICBkcnYgPSByb290ID0gJycKKyAgICAgICAgaXQgPSByZXZlcnNlZChwYXJ0cykKKyAgICAgICAgZm9yIHBhcnQgaW4gaXQ6CisgICAgICAgICAgICBpZiBub3QgcGFydDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgYWx0c2VwOgorICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LnJlcGxhY2UoYWx0c2VwLCBzZXApCisgICAgICAgICAgICBkcnYsIHJvb3QsIHJlbCA9IHNlbGYuc3BsaXRyb290KHBhcnQpCisgICAgICAgICAgICBpZiBzZXAgaW4gcmVsOgorICAgICAgICAgICAgICAgIGZvciB4IGluIHJldmVyc2VkKHJlbC5zcGxpdChzZXApKToKKyAgICAgICAgICAgICAgICAgICAgaWYgeCBhbmQgeCAhPSAnLic6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQuYXBwZW5kKHN5cy5pbnRlcm4oeCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHJlbCBhbmQgcmVsICE9ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChzeXMuaW50ZXJuKHJlbCkpCisgICAgICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgICAgICBpZiBub3QgZHJ2OgorICAgICAgICAgICAgICAgICAgICAjIElmIG5vIGRyaXZlIGlzIHByZXNlbnQsIHRyeSB0byBmaW5kIG9uZSBpbiB0aGUgcHJldmlvdXMKKyAgICAgICAgICAgICAgICAgICAgIyBwYXJ0cy4gVGhpcyBtYWtlcyB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgZS5nLgorICAgICAgICAgICAgICAgICAgICAjICgiQzoiLCAiLyIsICJhIikgcmVhc29uYWJseSBpbnR1aXRpdmUuCisgICAgICAgICAgICAgICAgICAgIGZvciBwYXJ0IGluIGl0OgorICAgICAgICAgICAgICAgICAgICAgICAgZHJ2ID0gc2VsZi5zcGxpdHJvb3QocGFydClbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRydjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChkcnYgKyByb290KQorICAgICAgICBwYXJzZWQucmV2ZXJzZSgpCisgICAgICAgIHJldHVybiBkcnYsIHJvb3QsIHBhcnNlZAorCisgICAgZGVmIGpvaW5fcGFyc2VkX3BhcnRzKHNlbGYsIGRydiwgcm9vdCwgcGFydHMsIGRydjIsIHJvb3QyLCBwYXJ0czIpOgorICAgICAgICAiIiIKKyAgICAgICAgSm9pbiB0aGUgdHdvIHBhdGhzIHJlcHJlc2VudGVkIGJ5IHRoZSByZXNwZWN0aXZlCisgICAgICAgIChkcml2ZSwgcm9vdCwgcGFydHMpIHR1cGxlcy4gIFJldHVybiBhIG5ldyAoZHJpdmUsIHJvb3QsIHBhcnRzKSB0dXBsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHJvb3QyOgorICAgICAgICAgICAgaWYgbm90IGRydjIgYW5kIGRydjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZHJ2LCByb290MiwgW2RydiArIHJvb3QyXSArIHBhcnRzMlsxOl0KKyAgICAgICAgZWxpZiBkcnYyOgorICAgICAgICAgICAgaWYgZHJ2MiA9PSBkcnYgb3Igc2VsZi5jYXNlZm9sZChkcnYyKSA9PSBzZWxmLmNhc2Vmb2xkKGRydik6CisgICAgICAgICAgICAgICAgIyBTYW1lIGRyaXZlID0+IHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgIHJldHVybiBkcnYsIHJvb3QsIHBhcnRzICsgcGFydHMyWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTZWNvbmQgcGF0aCBpcyBub24tYW5jaG9yZWQgKGNvbW1vbiBjYXNlKQorICAgICAgICAgICAgcmV0dXJuIGRydiwgcm9vdCwgcGFydHMgKyBwYXJ0czIKKyAgICAgICAgcmV0dXJuIGRydjIsIHJvb3QyLCBwYXJ0czIKKworCitjbGFzcyBfV2luZG93c0ZsYXZvdXIoX0ZsYXZvdXIpOgorICAgICMgUmVmZXJlbmNlIGZvciBXaW5kb3dzIHBhdGhzIGNhbiBiZSBmb3VuZCBhdAorICAgICMgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2FhMzY1MjQ3JTI4dj12cy44NSUyOS5hc3B4CisKKyAgICBzZXAgPSAnXFwnCisgICAgYWx0c2VwID0gJy8nCisgICAgaGFzX2RydiA9IFRydWUKKyAgICBwYXRobW9kID0gbnRwYXRoCisKKyAgICBpc19zdXBwb3J0ZWQgPSAobnQgaXMgbm90IE5vbmUpCisKKyAgICBkcml2ZV9sZXR0ZXJzID0gKAorICAgICAgICBzZXQoY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSArIDEpKSB8CisgICAgICAgIHNldChjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpICsgMSkpCisgICAgKQorICAgIGV4dF9uYW1lc3BhY2VfcHJlZml4ID0gJ1xcXFw/XFwnCisKKyAgICByZXNlcnZlZF9uYW1lcyA9ICgKKyAgICAgICAgeydDT04nLCAnUFJOJywgJ0FVWCcsICdOVUwnfSB8CisgICAgICAgIHsnQ09NJWQnICUgaSBmb3IgaSBpbiByYW5nZSgxLCAxMCl9IHwKKyAgICAgICAgeydMUFQlZCcgJSBpIGZvciBpIGluIHJhbmdlKDEsIDEwKX0KKyAgICAgICAgKQorCisgICAgIyBJbnRlcmVzdGluZyBmaW5kaW5ncyBhYm91dCBleHRlbmRlZCBwYXRoczoKKyAgICAjIC0gJ1xcP1xjOlxhJywgJy8vPy9jOlxhJyBhbmQgJy8vPy9jOi9hJyBhcmUgYWxsIHN1cHBvcnRlZAorICAgICMgICBidXQgJ1xcP1xjOi9hJyBpcyBub3QKKyAgICAjIC0gZXh0ZW5kZWQgcGF0aHMgYXJlIGFsd2F5cyBhYnNvbHV0ZTsgInJlbGF0aXZlIiBleHRlbmRlZCBwYXRocyB3aWxsCisgICAgIyAgIGZhaWwuCisKKyAgICBkZWYgc3BsaXRyb290KHNlbGYsIHBhcnQsIHNlcD1zZXApOgorICAgICAgICBmaXJzdCA9IHBhcnRbMDoxXQorICAgICAgICBzZWNvbmQgPSBwYXJ0WzE6Ml0KKyAgICAgICAgaWYgKHNlY29uZCA9PSBzZXAgYW5kIGZpcnN0ID09IHNlcCk6CisgICAgICAgICAgICAjIFhYWCBleHRlbmRlZCBwYXRocyBzaG91bGQgYWxzbyBkaXNhYmxlIHRoZSBjb2xsYXBzaW5nIG9mICIuIgorICAgICAgICAgICAgIyBjb21wb25lbnRzIChhY2NvcmRpbmcgdG8gTVNETiBkb2NzKS4KKyAgICAgICAgICAgIHByZWZpeCwgcGFydCA9IHNlbGYuX3NwbGl0X2V4dGVuZGVkX3BhdGgocGFydCkKKyAgICAgICAgICAgIGZpcnN0ID0gcGFydFswOjFdCisgICAgICAgICAgICBzZWNvbmQgPSBwYXJ0WzE6Ml0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIHRoaXJkID0gcGFydFsyOjNdCisgICAgICAgIGlmIChzZWNvbmQgPT0gc2VwIGFuZCBmaXJzdCA9PSBzZXAgYW5kIHRoaXJkICE9IHNlcCk6CisgICAgICAgICAgICAjIGlzIGEgVU5DIHBhdGg6CisgICAgICAgICAgICAjIHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2diByb290CisgICAgICAgICAgICAjIFxcbWFjaGluZVxtb3VudHBvaW50XGRpcmVjdG9yeVxldGNcLi4uCisgICAgICAgICAgICAjICAgICAgICAgICAgZGlyZWN0b3J5IF5eXl5eXl5eXl5eXl5eCisgICAgICAgICAgICBpbmRleCA9IHBhcnQuZmluZChzZXAsIDIpCisgICAgICAgICAgICBpZiBpbmRleCAhPSAtMToKKyAgICAgICAgICAgICAgICBpbmRleDIgPSBwYXJ0LmZpbmQoc2VwLCBpbmRleCArIDEpCisgICAgICAgICAgICAgICAgIyBhIFVOQyBwYXRoIGNhbid0IGhhdmUgdHdvIHNsYXNoZXMgaW4gYSByb3cKKyAgICAgICAgICAgICAgICAjIChhZnRlciB0aGUgaW5pdGlhbCB0d28pCisgICAgICAgICAgICAgICAgaWYgaW5kZXgyICE9IGluZGV4ICsgMToKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXgyID09IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgyID0gbGVuKHBhcnQpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyBwYXJ0WzE6aW5kZXgyXSwgc2VwLCBwYXJ0W2luZGV4MisxOl0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0WzppbmRleDJdLCBzZXAsIHBhcnRbaW5kZXgyKzE6XQorICAgICAgICBkcnYgPSByb290ID0gJycKKyAgICAgICAgaWYgc2Vjb25kID09ICc6JyBhbmQgZmlyc3QgaW4gc2VsZi5kcml2ZV9sZXR0ZXJzOgorICAgICAgICAgICAgZHJ2ID0gcGFydFs6Ml0KKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0WzI6XQorICAgICAgICAgICAgZmlyc3QgPSB0aGlyZAorICAgICAgICBpZiBmaXJzdCA9PSBzZXA6CisgICAgICAgICAgICByb290ID0gZmlyc3QKKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0LmxzdHJpcChzZXApCisgICAgICAgIHJldHVybiBwcmVmaXggKyBkcnYsIHJvb3QsIHBhcnQKKworICAgIGRlZiBjYXNlZm9sZChzZWxmLCBzKToKKyAgICAgICAgcmV0dXJuIHMubG93ZXIoKQorCisgICAgZGVmIGNhc2Vmb2xkX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIFtwLmxvd2VyKCkgZm9yIHAgaW4gcGFydHNdCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBwYXRoKToKKyAgICAgICAgcyA9IHN0cihwYXRoKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRjd2QoKQorICAgICAgICBpZiBfZ2V0ZmluYWxwYXRobmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHRfdG9fbm9ybWFsKF9nZXRmaW5hbHBhdGhuYW1lKHMpKQorICAgICAgICAjIE1lYW5zIGZhbGxiYWNrIG9uIGFic29sdXRlCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX3NwbGl0X2V4dGVuZGVkX3BhdGgoc2VsZiwgcywgZXh0X3ByZWZpeD1leHRfbmFtZXNwYWNlX3ByZWZpeCk6CisgICAgICAgIHByZWZpeCA9ICcnCisgICAgICAgIGlmIHMuc3RhcnRzd2l0aChleHRfcHJlZml4KToKKyAgICAgICAgICAgIHByZWZpeCA9IHNbOjRdCisgICAgICAgICAgICBzID0gc1s0Ol0KKyAgICAgICAgICAgIGlmIHMuc3RhcnRzd2l0aCgnVU5DXFwnKToKKyAgICAgICAgICAgICAgICBwcmVmaXggKz0gc1s6M10KKyAgICAgICAgICAgICAgICBzID0gJ1xcJyArIHNbMzpdCisgICAgICAgIHJldHVybiBwcmVmaXgsIHMKKworICAgIGRlZiBfZXh0X3RvX25vcm1hbChzZWxmLCBzKToKKyAgICAgICAgIyBUdXJuIGJhY2sgYW4gZXh0ZW5kZWQgcGF0aCBpbnRvIGEgbm9ybWFsIERPUy1saWtlIHBhdGgKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwbGl0X2V4dGVuZGVkX3BhdGgocylbMV0KKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgICMgTk9URTogdGhlIHJ1bGVzIGZvciByZXNlcnZlZCBuYW1lcyBzZWVtIHNvbWV3aGF0IGNvbXBsaWNhdGVkCisgICAgICAgICMgKGUuZy4gciIuLlxOVUwiIGlzIHJlc2VydmVkIGJ1dCBub3QgciJmb29cTlVMIikuCisgICAgICAgICMgV2UgZXJyIG9uIHRoZSBzaWRlIG9mIGNhdXRpb24gYW5kIHJldHVybiBUcnVlIGZvciBwYXRocyB3aGljaCBhcmUKKyAgICAgICAgIyBub3QgY29uc2lkZXJlZCByZXNlcnZlZCBieSBXaW5kb3dzLgorICAgICAgICBpZiBub3QgcGFydHM6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcGFydHNbMF0uc3RhcnRzd2l0aCgnXFxcXCcpOgorICAgICAgICAgICAgIyBVTkMgcGF0aHMgYXJlIG5ldmVyIHJlc2VydmVkCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHBhcnRzWy0xXS5wYXJ0aXRpb24oJy4nKVswXS51cHBlcigpIGluIHNlbGYucmVzZXJ2ZWRfbmFtZXMKKworICAgIGRlZiBtYWtlX3VyaShzZWxmLCBwYXRoKToKKyAgICAgICAgIyBVbmRlciBXaW5kb3dzLCBmaWxlIFVSSXMgdXNlIHRoZSBVVEYtOCBlbmNvZGluZy4KKyAgICAgICAgZHJpdmUgPSBwYXRoLmRyaXZlCisgICAgICAgIGlmIGxlbihkcml2ZSkgPT0gMiBhbmQgZHJpdmVbMV0gPT0gJzonOgorICAgICAgICAgICAgIyBJdCdzIGEgcGF0aCBvbiBhIGxvY2FsIGRyaXZlID0+ICdmaWxlOi8vL2M6L2EvYicKKyAgICAgICAgICAgIHJlc3QgPSBwYXRoLmFzX3Bvc2l4KClbMjpdLmxzdHJpcCgnLycpCisgICAgICAgICAgICByZXR1cm4gJ2ZpbGU6Ly8vJXMvJXMnICUgKAorICAgICAgICAgICAgICAgIGRyaXZlLCB1cmxxdW90ZV9mcm9tX2J5dGVzKHJlc3QuZW5jb2RlKCd1dGYtOCcpKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgSXQncyBhIHBhdGggb24gYSBuZXR3b3JrIGRyaXZlID0+ICdmaWxlOi8vaG9zdC9zaGFyZS9hL2InCisgICAgICAgICAgICByZXR1cm4gJ2ZpbGU6JyArIHVybHF1b3RlX2Zyb21fYnl0ZXMocGF0aC5hc19wb3NpeCgpLmVuY29kZSgndXRmLTgnKSkKKworCitjbGFzcyBfUG9zaXhGbGF2b3VyKF9GbGF2b3VyKToKKyAgICBzZXAgPSAnLycKKyAgICBhbHRzZXAgPSAnJworICAgIGhhc19kcnYgPSBGYWxzZQorICAgIHBhdGhtb2QgPSBwb3NpeHBhdGgKKworICAgIGlzX3N1cHBvcnRlZCA9IChvcy5uYW1lICE9ICdudCcpCisKKyAgICBkZWYgc3BsaXRyb290KHNlbGYsIHBhcnQsIHNlcD1zZXApOgorICAgICAgICBpZiBwYXJ0IGFuZCBwYXJ0WzBdID09IHNlcDoKKyAgICAgICAgICAgIHN0cmlwcGVkX3BhcnQgPSBwYXJ0LmxzdHJpcChzZXApCisgICAgICAgICAgICAjIEFjY29yZGluZyB0byBQT1NJWCBwYXRoIHJlc29sdXRpb246CisgICAgICAgICAgICAjIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvYmFzZWRlZnMveGJkX2NoYXAwNC5odG1sI3RhZ18wNF8xMQorICAgICAgICAgICAgIyAiQSBwYXRobmFtZSB0aGF0IGJlZ2lucyB3aXRoIHR3byBzdWNjZXNzaXZlIHNsYXNoZXMgbWF5IGJlCisgICAgICAgICAgICAjIGludGVycHJldGVkIGluIGFuIGltcGxlbWVudGF0aW9uLWRlZmluZWQgbWFubmVyLCBhbHRob3VnaCBtb3JlCisgICAgICAgICAgICAjIHRoYW4gdHdvIGxlYWRpbmcgc2xhc2hlcyBzaGFsbCBiZSB0cmVhdGVkIGFzIGEgc2luZ2xlIHNsYXNoIi4KKyAgICAgICAgICAgIGlmIGxlbihwYXJ0KSAtIGxlbihzdHJpcHBlZF9wYXJ0KSA9PSAyOgorICAgICAgICAgICAgICAgIHJldHVybiAnJywgc2VwICogMiwgc3RyaXBwZWRfcGFydAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJycsIHNlcCwgc3RyaXBwZWRfcGFydAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcnLCAnJywgcGFydAorCisgICAgZGVmIGNhc2Vmb2xkKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGNhc2Vmb2xkX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIHBhcnRzCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBwYXRoKToKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgZGVmIHNwbGl0KHApOgorICAgICAgICAgICAgcmV0dXJuIFt4IGZvciB4IGluIHAuc3BsaXQoc2VwKSBpZiB4XQorICAgICAgICBkZWYgYWJzcGFydHMocCk6CisgICAgICAgICAgICAjIE91ciBvd24gYWJzcGF0aCgpLCBzaW5jZSB0aGUgcG9zaXhwYXRoIG9uZSBtYWtlcworICAgICAgICAgICAgIyB0aGUgbWlzdGFrZSBvZiAibm9ybWFsaXppbmciIHRoZSBwYXRoIHdpdGhvdXQgcmVzb2x2aW5nIHRoZQorICAgICAgICAgICAgIyBzeW1saW5rcyBmaXJzdC4KKyAgICAgICAgICAgIGlmIG5vdCBwLnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BsaXQob3MuZ2V0Y3dkKCkpICsgc3BsaXQocCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNwbGl0KHApCisgICAgICAgIHBhcnRzID0gYWJzcGFydHMoc3RyKHBhdGgpKVs6Oi0xXQorICAgICAgICBhY2Nlc3NvciA9IHBhdGguX2FjY2Vzc29yCisgICAgICAgIHJlc29sdmVkID0gY3VyID0gIiIKKyAgICAgICAgc3ltbGlua3MgPSB7fQorICAgICAgICB3aGlsZSBwYXJ0czoKKyAgICAgICAgICAgIHBhcnQgPSBwYXJ0cy5wb3AoKQorICAgICAgICAgICAgY3VyID0gcmVzb2x2ZWQgKyBzZXAgKyBwYXJ0CisgICAgICAgICAgICBpZiBjdXIgaW4gc3ltbGlua3MgYW5kIHN5bWxpbmtzW2N1cl0gPD0gbGVuKHBhcnRzKToKKyAgICAgICAgICAgICAgICAjIFdlJ3ZlIGFscmVhZHkgc2VlbiB0aGUgc3ltbGluayBhbmQgdGhlcmUncyBub3QgbGVzcworICAgICAgICAgICAgICAgICMgd29yayB0byBkbyB0aGFuIHRoZSBsYXN0IHRpbWUuCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTeW1saW5rIGxvb3AgZnJvbSAlciIgJSBjdXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IucmVhZGxpbmsoY3VyKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAjIE5vdCBhIHN5bWxpbmsKKyAgICAgICAgICAgICAgICByZXNvbHZlZCA9IGN1cgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRha2Ugbm90ZSBvZiByZW1haW5pbmcgd29yayBmcm9tIHRoaXMgc3ltbGluaworICAgICAgICAgICAgICAgIHN5bWxpbmtzW2N1cl0gPSBsZW4ocGFydHMpCisgICAgICAgICAgICAgICAgaWYgdGFyZ2V0LnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICAgICAgIyBTeW1saW5rIHBvaW50cyB0byBhYnNvbHV0ZSBwYXRoCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkID0gIiIKKyAgICAgICAgICAgICAgICBwYXJ0cy5leHRlbmQoc3BsaXQodGFyZ2V0KVs6Oi0xXSkKKyAgICAgICAgcmV0dXJuIHJlc29sdmVkIG9yIHNlcAorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgbWFrZV91cmkoc2VsZiwgcGF0aCk6CisgICAgICAgICMgV2UgcmVwcmVzZW50IHRoZSBwYXRoIHVzaW5nIHRoZSBsb2NhbCBmaWxlc3lzdGVtIGVuY29kaW5nLAorICAgICAgICAjIGZvciBwb3J0YWJpbGl0eSB0byBvdGhlciBhcHBsaWNhdGlvbnMuCisgICAgICAgIGJwYXRoID0gYnl0ZXMocGF0aCkKKyAgICAgICAgcmV0dXJuICdmaWxlOi8vJyArIHVybHF1b3RlX2Zyb21fYnl0ZXMoYnBhdGgpCisKKworX3dpbmRvd3NfZmxhdm91ciA9IF9XaW5kb3dzRmxhdm91cigpCitfcG9zaXhfZmxhdm91ciA9IF9Qb3NpeEZsYXZvdXIoKQorCisKK2NsYXNzIF9BY2Nlc3NvcjoKKyAgICAiIiJBbiBhY2Nlc3NvciBpbXBsZW1lbnRzIGEgcGFydGljdWxhciAoc3lzdGVtLXNwZWNpZmljIG9yIG5vdCkgd2F5IG9mCisgICAgYWNjZXNzaW5nIHBhdGhzIG9uIHRoZSBmaWxlc3lzdGVtLiIiIgorCisKK2NsYXNzIF9Ob3JtYWxBY2Nlc3NvcihfQWNjZXNzb3IpOgorCisgICAgZGVmIF93cmFwX3N0cmZ1bmMoc3RyZnVuYyk6CisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoc3RyZnVuYykKKyAgICAgICAgZGVmIHdyYXBwZWQocGF0aG9iaiwgKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHN0cmZ1bmMoc3RyKHBhdGhvYmopLCAqYXJncykKKyAgICAgICAgcmV0dXJuIHN0YXRpY21ldGhvZCh3cmFwcGVkKQorCisgICAgZGVmIF93cmFwX2JpbmFyeV9zdHJmdW5jKHN0cmZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHN0cmZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHBhdGhvYmpBLCBwYXRob2JqQiwgKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIHN0cmZ1bmMoc3RyKHBhdGhvYmpBKSwgc3RyKHBhdGhvYmpCKSwgKmFyZ3MpCisgICAgICAgIHJldHVybiBzdGF0aWNtZXRob2Qod3JhcHBlZCkKKworICAgIHN0YXQgPSBfd3JhcF9zdHJmdW5jKG9zLnN0YXQpCisKKyAgICBsc3RhdCA9IF93cmFwX3N0cmZ1bmMob3MubHN0YXQpCisKKyAgICBvcGVuID0gX3dyYXBfc3RyZnVuYyhvcy5vcGVuKQorCisgICAgbGlzdGRpciA9IF93cmFwX3N0cmZ1bmMob3MubGlzdGRpcikKKworICAgIGNobW9kID0gX3dyYXBfc3RyZnVuYyhvcy5jaG1vZCkKKworICAgIGlmIGhhc2F0dHIob3MsICJsY2htb2QiKToKKyAgICAgICAgbGNobW9kID0gX3dyYXBfc3RyZnVuYyhvcy5sY2htb2QpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGxjaG1vZChzZWxmLCBwYXRob2JqLCBtb2RlKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxjaG1vZCgpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iKQorCisgICAgbWtkaXIgPSBfd3JhcF9zdHJmdW5jKG9zLm1rZGlyKQorCisgICAgdW5saW5rID0gX3dyYXBfc3RyZnVuYyhvcy51bmxpbmspCisKKyAgICBybWRpciA9IF93cmFwX3N0cmZ1bmMob3Mucm1kaXIpCisKKyAgICByZW5hbWUgPSBfd3JhcF9iaW5hcnlfc3RyZnVuYyhvcy5yZW5hbWUpCisKKyAgICByZXBsYWNlID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3MucmVwbGFjZSkKKworICAgIGlmIG50OgorICAgICAgICBpZiBzdXBwb3J0c19zeW1saW5rczoKKyAgICAgICAgICAgIHN5bWxpbmsgPSBfd3JhcF9iaW5hcnlfc3RyZnVuYyhvcy5zeW1saW5rKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVmIHN5bWxpbmsoYSwgYiwgdGFyZ2V0X2lzX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3ltbGluaygpIG5vdCBhdmFpbGFibGUgb24gdGhpcyBzeXN0ZW0iKQorICAgIGVsc2U6CisgICAgICAgICMgVW5kZXIgUE9TSVgsIG9zLnN5bWxpbmsoKSB0YWtlcyB0d28gYXJncworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBzeW1saW5rKGEsIGIsIHRhcmdldF9pc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgcmV0dXJuIG9zLnN5bWxpbmsoc3RyKGEpLCBzdHIoYikpCisKKyAgICB1dGltZSA9IF93cmFwX3N0cmZ1bmMob3MudXRpbWUpCisKKyAgICAjIEhlbHBlciBmb3IgcmVzb2x2ZSgpCisgICAgZGVmIHJlYWRsaW5rKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gb3MucmVhZGxpbmsocGF0aCkKKworCitfbm9ybWFsX2FjY2Vzc29yID0gX05vcm1hbEFjY2Vzc29yKCkKKworCisjCisjIEdsb2JiaW5nIGhlbHBlcnMKKyMKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgX2NhY2hlZChmdW5jKToKKyAgICB0cnk6CisgICAgICAgIGZ1bmMuX19jYWNoZWRfXworICAgICAgICB5aWVsZCBmdW5jCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBjYWNoZSA9IHt9CisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVbYXJnc10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGNhY2hlW2FyZ3NdID0gZnVuYygqYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgd3JhcHBlci5fX2NhY2hlZF9fID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCB3cmFwcGVyCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjYWNoZS5jbGVhcigpCisKK2RlZiBfbWFrZV9zZWxlY3RvcihwYXR0ZXJuX3BhcnRzKToKKyAgICBwYXQgPSBwYXR0ZXJuX3BhcnRzWzBdCisgICAgY2hpbGRfcGFydHMgPSBwYXR0ZXJuX3BhcnRzWzE6XQorICAgIGlmIHBhdCA9PSAnKionOgorICAgICAgICBjbHMgPSBfUmVjdXJzaXZlV2lsZGNhcmRTZWxlY3RvcgorICAgIGVsaWYgJyoqJyBpbiBwYXQ6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcGF0dGVybjogJyoqJyBjYW4gb25seSBiZSBhbiBlbnRpcmUgcGF0aCBjb21wb25lbnQiKQorICAgIGVsaWYgX2lzX3dpbGRjYXJkX3BhdHRlcm4ocGF0KToKKyAgICAgICAgY2xzID0gX1dpbGRjYXJkU2VsZWN0b3IKKyAgICBlbHNlOgorICAgICAgICBjbHMgPSBfUHJlY2lzZVNlbGVjdG9yCisgICAgcmV0dXJuIGNscyhwYXQsIGNoaWxkX3BhcnRzKQorCitpZiBoYXNhdHRyKGZ1bmN0b29scywgImxydV9jYWNoZSIpOgorICAgIF9tYWtlX3NlbGVjdG9yID0gZnVuY3Rvb2xzLmxydV9jYWNoZSgpKF9tYWtlX3NlbGVjdG9yKQorCisKK2NsYXNzIF9TZWxlY3RvcjoKKyAgICAiIiJBIHNlbGVjdG9yIG1hdGNoZXMgYSBzcGVjaWZpYyBnbG9iIHBhdHRlcm4gcGFydCBhZ2FpbnN0IHRoZSBjaGlsZHJlbgorICAgIG9mIGEgZ2l2ZW4gcGF0aC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIHNlbGYuY2hpbGRfcGFydHMgPSBjaGlsZF9wYXJ0cworICAgICAgICBpZiBjaGlsZF9wYXJ0czoKKyAgICAgICAgICAgIHNlbGYuc3VjY2Vzc29yID0gX21ha2Vfc2VsZWN0b3IoY2hpbGRfcGFydHMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3NvciA9IF9UZXJtaW5hdGluZ1NlbGVjdG9yKCkKKworICAgIGRlZiBzZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCk6CisgICAgICAgICIiIkl0ZXJhdGUgb3ZlciBhbGwgY2hpbGQgcGF0aHMgb2YgYHBhcmVudF9wYXRoYCBtYXRjaGVkIGJ5IHRoaXMKKyAgICAgICAgc2VsZWN0b3IuICBUaGlzIGNhbiBjb250YWluIHBhcmVudF9wYXRoIGl0c2VsZi4iIiIKKyAgICAgICAgcGF0aF9jbHMgPSB0eXBlKHBhcmVudF9wYXRoKQorICAgICAgICBpc19kaXIgPSBwYXRoX2Nscy5pc19kaXIKKyAgICAgICAgZXhpc3RzID0gcGF0aF9jbHMuZXhpc3RzCisgICAgICAgIGxpc3RkaXIgPSBwYXJlbnRfcGF0aC5fYWNjZXNzb3IubGlzdGRpcgorICAgICAgICByZXR1cm4gc2VsZi5fc2VsZWN0X2Zyb20ocGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKQorCisKK2NsYXNzIF9UZXJtaW5hdGluZ1NlbGVjdG9yOgorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICB5aWVsZCBwYXJlbnRfcGF0aAorCisKK2NsYXNzIF9QcmVjaXNlU2VsZWN0b3IoX1NlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChzZWxmLm5hbWUpCisgICAgICAgIGlmIGV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuc3VjY2Vzc29yLl9zZWxlY3RfZnJvbShwYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgeWllbGQgcAorCisKK2NsYXNzIF9XaWxkY2FyZFNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0LCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIHNlbGYucGF0ID0gcmUuY29tcGlsZShmbm1hdGNoLnRyYW5zbGF0ZShwYXQpKQorICAgICAgICBfU2VsZWN0b3IuX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpCisKKyAgICBkZWYgX3NlbGVjdF9mcm9tKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgIGlmIG5vdCBpc19kaXIocGFyZW50X3BhdGgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGNmID0gcGFyZW50X3BhdGguX2ZsYXZvdXIuY2FzZWZvbGQKKyAgICAgICAgZm9yIG5hbWUgaW4gbGlzdGRpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICBjYXNlZm9sZGVkID0gY2YobmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYucGF0Lm1hdGNoKGNhc2Vmb2xkZWQpOgorICAgICAgICAgICAgICAgIHBhdGggPSBwYXJlbnRfcGF0aC5fbWFrZV9jaGlsZF9yZWxwYXRoKG5hbWUpCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tKHBhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorCisKK2NsYXNzIF9SZWN1cnNpdmVXaWxkY2FyZFNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0LCBjaGlsZF9wYXJ0cyk6CisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfaXRlcmF0ZV9kaXJlY3RvcmllcyhzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBsaXN0ZGlyKToKKyAgICAgICAgeWllbGQgcGFyZW50X3BhdGgKKyAgICAgICAgZm9yIG5hbWUgaW4gbGlzdGRpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgaWYgaXNfZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIGZvciBwIGluIHNlbGYuX2l0ZXJhdGVfZGlyZWN0b3JpZXMocGF0aCwgaXNfZGlyLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIF9zZWxlY3RfZnJvbShzZWxmLCBwYXJlbnRfcGF0aCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICBpZiBub3QgaXNfZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB3aXRoIF9jYWNoZWQobGlzdGRpcikgYXMgbGlzdGRpcjoKKyAgICAgICAgICAgIHlpZWxkZWQgPSBzZXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvcl9zZWxlY3QgPSBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20KKyAgICAgICAgICAgICAgICBmb3Igc3RhcnRpbmdfcG9pbnQgaW4gc2VsZi5faXRlcmF0ZV9kaXJlY3RvcmllcyhwYXJlbnRfcGF0aCwgaXNfZGlyLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc3VjY2Vzc29yX3NlbGVjdChzdGFydGluZ19wb2ludCwgaXNfZGlyLCBleGlzdHMsIGxpc3RkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4geWllbGRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGRlZC5hZGQocCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgeWllbGRlZC5jbGVhcigpCisKKworIworIyBQdWJsaWMgQVBJCisjCisKK2NsYXNzIF9QYXRoUGFyZW50cyhTZXF1ZW5jZSk6CisgICAgIiIiVGhpcyBvYmplY3QgcHJvdmlkZXMgc2VxdWVuY2UtbGlrZSBhY2Nlc3MgdG8gdGhlIGxvZ2ljYWwgYW5jZXN0b3JzCisgICAgb2YgYSBwYXRoLiAgRG9uJ3QgdHJ5IHRvIGNvbnN0cnVjdCBpdCB5b3Vyc2VsZi4iIiIKKyAgICBfX3Nsb3RzX18gPSAoJ19wYXRoY2xzJywgJ19kcnYnLCAnX3Jvb3QnLCAnX3BhcnRzJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgIyBXZSBkb24ndCBzdG9yZSB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgcmVmZXJlbmNlIGN5Y2xlcworICAgICAgICBzZWxmLl9wYXRoY2xzID0gdHlwZShwYXRoKQorICAgICAgICBzZWxmLl9kcnYgPSBwYXRoLl9kcnYKKyAgICAgICAgc2VsZi5fcm9vdCA9IHBhdGguX3Jvb3QKKyAgICAgICAgc2VsZi5fcGFydHMgPSBwYXRoLl9wYXJ0cworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RydiBvciBzZWxmLl9yb290OgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wYXJ0cykgLSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3BhcnRzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGlkeCk6CisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoaWR4KQorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aGNscy5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFydHNbOi1pZHggLSAxXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8e30ucGFyZW50cz4iLmZvcm1hdChzZWxmLl9wYXRoY2xzLl9fbmFtZV9fKQorCisKK2NsYXNzIFB1cmVQYXRoKG9iamVjdCk6CisgICAgIiIiUHVyZVBhdGggcmVwcmVzZW50cyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgb2ZmZXJzIG9wZXJhdGlvbnMgd2hpY2gKKyAgICBkb24ndCBpbXBseSBhbnkgYWN0dWFsIGZpbGVzeXN0ZW0gSS9PLiAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLAorICAgIGluc3RhbnRpYXRpbmcgYSBQdXJlUGF0aCB3aWxsIHJldHVybiBlaXRoZXIgYSBQdXJlUG9zaXhQYXRoIG9yIGEKKyAgICBQdXJlV2luZG93c1BhdGggb2JqZWN0LiAgWW91IGNhbiBhbHNvIGluc3RhbnRpYXRlIGVpdGhlciBvZiB0aGVzZSBjbGFzc2VzCisgICAgZGlyZWN0bHksIHJlZ2FyZGxlc3Mgb2YgeW91ciBzeXN0ZW0uCisgICAgIiIiCisgICAgX19zbG90c19fID0gKAorICAgICAgICAnX2RydicsICdfcm9vdCcsICdfcGFydHMnLAorICAgICAgICAnX3N0cicsICdfaGFzaCcsICdfcHBhcnRzJywgJ19jYWNoZWRfY3BhcnRzJywKKyAgICApCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgUHVyZVBhdGggZnJvbSBvbmUgb3Igc2V2ZXJhbCBzdHJpbmdzIGFuZCBvciBleGlzdGluZworICAgICAgICBQdXJlUGF0aCBvYmplY3RzLiAgVGhlIHN0cmluZ3MgYW5kIHBhdGggb2JqZWN0cyBhcmUgY29tYmluZWQgc28gYXMKKyAgICAgICAgdG8geWllbGQgYSBjYW5vbmljYWxpemVkIHBhdGgsIHdoaWNoIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZQorICAgICAgICBuZXcgUHVyZVBhdGggb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgY2xzIGlzIFB1cmVQYXRoOgorICAgICAgICAgICAgY2xzID0gUHVyZVdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIFB1cmVQb3NpeFBhdGgKKyAgICAgICAgcmV0dXJuIGNscy5fZnJvbV9wYXJ0cyhhcmdzKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICMgVXNpbmcgdGhlIHBhcnRzIHR1cGxlIGhlbHBzIHNoYXJlIGludGVybmVkIHBhdGggcGFydHMKKyAgICAgICAgIyB3aGVuIHBpY2tsaW5nIHJlbGF0ZWQgcGF0aHMuCisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIHR1cGxlKHNlbGYuX3BhcnRzKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2VfYXJncyhjbHMsIGFyZ3MpOgorICAgICAgICAjIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGRvbid0IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlLCBqdXN0CisgICAgICAgICMgY2Fub25pY2FsaXplIHNvbWUgY29uc3RydWN0b3IgYXJndW1lbnRzLgorICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGZvciBhIGluIGFyZ3M6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGEsIFB1cmVQYXRoKToKKyAgICAgICAgICAgICAgICBwYXJ0cyArPSBhLl9wYXJ0cworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGEsIHN0cik6CisgICAgICAgICAgICAgICAgIyBBc3N1bWluZyBhIHN0cgorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgYSBwYXRoIG9yIHN0ciBvYmplY3QsIG5vdCAlciIKKyAgICAgICAgICAgICAgICAgICAgJSB0eXBlKGEpKQorICAgICAgICByZXR1cm4gY2xzLl9mbGF2b3VyLnBhcnNlX3BhcnRzKHBhcnRzKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnRzKGNscywgYXJncywgaW5pdD1UcnVlKToKKyAgICAgICAgIyBXZSBuZWVkIHRvIGNhbGwgX3BhcnNlX2FyZ3Mgb24gdGhlIGluc3RhbmNlLCBzbyBhcyB0byBnZXQgdGhlCisgICAgICAgICMgcmlnaHQgZmxhdm91ci4KKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5fZHJ2ID0gZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGFydHMKKyAgICAgICAgaWYgaW5pdDoKKyAgICAgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMsIGluaXQ9VHJ1ZSk6CisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX2RydiA9IGRydgorICAgICAgICBzZWxmLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLl9wYXJ0cyA9IHBhcnRzCisgICAgICAgIGlmIGluaXQ6CisgICAgICAgICAgICBzZWxmLl9pbml0KCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZm9ybWF0X3BhcnNlZF9wYXJ0cyhjbHMsIGRydiwgcm9vdCwgcGFydHMpOgorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJldHVybiBkcnYgKyByb290ICsgY2xzLl9mbGF2b3VyLmpvaW4ocGFydHNbMTpdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIGNscy5fZmxhdm91ci5qb2luKHBhcnRzKQorCisgICAgZGVmIF9pbml0KHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlbiBpbiBjb25jcmV0ZSBQYXRoCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfbWFrZV9jaGlsZChzZWxmLCBhcmdzKToKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX2ZsYXZvdXIuam9pbl9wYXJzZWRfcGFydHMoCisgICAgICAgICAgICBzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsIHNlbGYuX3BhcnRzLCBkcnYsIHJvb3QsIHBhcnRzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoZHJ2LCByb290LCBwYXJ0cykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCwgc3VpdGFibGUgZm9yCisgICAgICAgIHBhc3NpbmcgdG8gc3lzdGVtIGNhbGxzLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3N0ciA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0cykgb3IgJy4nCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RyCisKKyAgICBkZWYgYXNfcG9zaXgoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoIHdpdGggZm9yd2FyZCAoLykKKyAgICAgICAgc2xhc2hlcy4iIiIKKyAgICAgICAgZiA9IHNlbGYuX2ZsYXZvdXIKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmKS5yZXBsYWNlKGYuc2VwLCAnLycpCisKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoLiAgVGhpcyBpcyBvbmx5CisgICAgICAgIHJlY29tbWVuZGVkIHRvIHVzZSB1bmRlciBVbml4LiIiIgorICAgICAgICByZXR1cm4gb3MuZnNlbmNvZGUoc3RyKHNlbGYpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9KHshcn0pIi5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuYXNfcG9zaXgoKSkKKworICAgIGRlZiBhc191cmkoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCBhcyBhICdmaWxlJyBVUkkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX2Fic29sdXRlKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWxhdGl2ZSBwYXRoIGNhbid0IGJlIGV4cHJlc3NlZCBhcyBhIGZpbGUgVVJJIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZsYXZvdXIubWFrZV91cmkoc2VsZikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfY3BhcnRzKHNlbGYpOgorICAgICAgICAjIENhY2hlZCBjYXNlZm9sZGVkIHBhcnRzLCBmb3IgaGFzaGluZyBhbmQgY29tcGFyaXNvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX2NwYXJ0cworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9jYWNoZWRfY3BhcnRzID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZF9wYXJ0cyhzZWxmLl9wYXJ0cykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfY3BhcnRzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID09IG90aGVyLl9jcGFydHMgYW5kIHNlbGYuX2ZsYXZvdXIgaXMgb3RoZXIuX2ZsYXZvdXIKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5faGFzaCA9IGhhc2godHVwbGUoc2VsZi5fY3BhcnRzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYXNoCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzIDwgb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA8PSBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID4gb3RoZXIuX2NwYXJ0cworCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBQdXJlUGF0aCkgb3Igc2VsZi5fZmxhdm91ciBpcyBub3Qgb3RoZXIuX2ZsYXZvdXI6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NwYXJ0cyA+PSBvdGhlci5fY3BhcnRzCisKKyAgICBkcml2ZSA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19kcnYnKSwKKyAgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgZHJpdmUgcHJlZml4IChsZXR0ZXIgb3IgVU5DIHBhdGgpLCBpZiBhbnkuIiIiKQorCisgICAgcm9vdCA9IHByb3BlcnR5KGF0dHJnZXR0ZXIoJ19yb290JyksCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJUaGUgcm9vdCBvZiB0aGUgcGF0aCwgaWYgYW55LiIiIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbmNob3Ioc2VsZik6CisgICAgICAgICIiIlRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdCwgb3IgJycuIiIiCisgICAgICAgIGFuY2hvciA9IHNlbGYuX2RydiArIHNlbGYuX3Jvb3QKKyAgICAgICAgcmV0dXJuIGFuY2hvcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBwYXRoIGNvbXBvbmVudCwgaWYgYW55LiIiIgorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gKDEgaWYgKHNlbGYuX2RydiBvciBzZWxmLl9yb290KSBlbHNlIDApOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIHJldHVybiBwYXJ0c1stMV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXgoc2VsZik6CisgICAgICAgICIiIlRoZSBmaW5hbCBjb21wb25lbnQncyBsYXN0IHN1ZmZpeCwgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGkgPSBuYW1lLnJmaW5kKCcuJykKKyAgICAgICAgaWYgMCA8IGkgPCBsZW4obmFtZSkgLSAxOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVbaTpdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdWZmaXhlcyhzZWxmKToKKyAgICAgICAgIiIiQSBsaXN0IG9mIHRoZSBmaW5hbCBjb21wb25lbnQncyBzdWZmaXhlcywgaWYgYW55LiIiIgorICAgICAgICBuYW1lID0gc2VsZi5uYW1lCisgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy4nKToKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBuYW1lID0gbmFtZS5sc3RyaXAoJy4nKQorICAgICAgICByZXR1cm4gWycuJyArIHN1ZmZpeCBmb3Igc3VmZml4IGluIG5hbWUuc3BsaXQoJy4nKVsxOl1dCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc3RlbShzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBtaW51cyBpdHMgbGFzdCBzdWZmaXguIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoJy4nKQorICAgICAgICBpZiAwIDwgaSA8IGxlbihuYW1lKSAtIDE6CisgICAgICAgICAgICByZXR1cm4gbmFtZVs6aV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgd2l0aF9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSBmaWxlIG5hbWUgY2hhbmdlZC4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJ0c1s6LTFdICsgW25hbWVdKQorCisgICAgZGVmIHdpdGhfc3VmZml4KHNlbGYsIHN1ZmZpeCk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHdpdGggdGhlIGZpbGUgc3VmZml4IGNoYW5nZWQgKG9yIGFkZGVkLCBpZiBub25lKS4iIiIKKyAgICAgICAgIyBYWFggaWYgc3VmZml4IGlzIE5vbmUsIHNob3VsZCB0aGUgY3VycmVudCBzdWZmaXggYmUgcmVtb3ZlZD8KKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIG9sZF9zdWZmaXggPSBzZWxmLnN1ZmZpeAorICAgICAgICBpZiBub3Qgb2xkX3N1ZmZpeDoKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gbmFtZVs6LWxlbihvbGRfc3VmZml4KV0gKyBzdWZmaXgKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotMV0gKyBbbmFtZV0pCisKKyAgICBkZWYgcmVsYXRpdmVfdG8oc2VsZiwgKm90aGVyKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIHRvIGFub3RoZXIgcGF0aCBpZGVudGlmaWVkIGJ5IHRoZSBwYXNzZWQKKyAgICAgICAgYXJndW1lbnRzLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgcG9zc2libGUgKGJlY2F1c2UgdGhpcyBpcyBub3QKKyAgICAgICAgYSBzdWJwYXRoIG9mIHRoZSBvdGhlciBwYXRoKSwgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgICMgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kLCBkcml2ZSBhbmQgcm9vdCBhcmUgY29uc2lkZXJlZAorICAgICAgICAjIHNlcGFyYXRlIHBhcnRzLCBpLmUuOgorICAgICAgICAjICAgUGF0aCgnYzovJykucmVsYXRpdmVfdG8oJ2M6JykgIGdpdmVzIFBhdGgoJy8nKQorICAgICAgICAjICAgUGF0aCgnYzovJykucmVsYXRpdmVfdG8oJy8nKSAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgZHJ2ID0gc2VsZi5fZHJ2CisgICAgICAgIHJvb3QgPSBzZWxmLl9yb290CisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgaWYgcm9vdDoKKyAgICAgICAgICAgICAgICBhYnNfcGFydHMgPSBbZHJ2LCByb290XSArIHBhcnRzWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhYnNfcGFydHMgPSBbZHJ2XSArIHBhcnRzWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWJzX3BhcnRzID0gcGFydHMKKyAgICAgICAgdG9fZHJ2LCB0b19yb290LCB0b19wYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3Mob3RoZXIpCisgICAgICAgIGlmIHRvX2RydiBvciB0b19yb290OgorICAgICAgICAgICAgaWYgdG9fcm9vdDoKKyAgICAgICAgICAgICAgICB0b19hYnNfcGFydHMgPSBbdG9fZHJ2LCB0b19yb290XSArIHRvX3BhcnRzWzE6XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0b19hYnNfcGFydHMgPSBbdG9fZHJ2XSArIHRvX3BhcnRzWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gdG9fcGFydHMKKyAgICAgICAgbiA9IGxlbih0b19hYnNfcGFydHMpCisgICAgICAgIGlmIG4gPT0gMCBhbmQgKGRydiBvciByb290KSBvciBhYnNfcGFydHNbOm5dICE9IHRvX2Fic19wYXJ0czoKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX2Zvcm1hdF9wYXJzZWRfcGFydHModG9fZHJ2LCB0b19yb290LCB0b19wYXJ0cykKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInshcn0gZG9lcyBub3Qgc3RhcnQgd2l0aCB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9wYXJzZWRfcGFydHMoJycsICcnLCBhYnNfcGFydHNbbjpdKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcnRzKHNlbGYpOgorICAgICAgICAiIiJBbiBvYmplY3QgcHJvdmlkaW5nIHNlcXVlbmNlLWxpa2UgYWNjZXNzIHRvIHRoZQorICAgICAgICBjb21wb25lbnRzIGluIHRoZSBmaWxlc3lzdGVtIHBhdGguIiIiCisgICAgICAgICMgV2UgY2FjaGUgdGhlIHR1cGxlIHRvIGF2b2lkIGJ1aWxkaW5nIGEgbmV3IG9uZSBlYWNoIHRpbWUgLnBhcnRzCisgICAgICAgICMgaXMgYWNjZXNzZWQuICBYWFggaXMgdGhpcyBuZWNlc3Nhcnk/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wcGFydHMKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fcHBhcnRzID0gdHVwbGUoc2VsZi5fcGFydHMpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHBhcnRzCisKKyAgICBkZWYgam9pbnBhdGgoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJDb21iaW5lIHRoaXMgcGF0aCB3aXRoIG9uZSBvciBzZXZlcmFsIGFyZ3VtZW50cywgYW5kIHJldHVybiBhCisgICAgICAgIG5ldyBwYXRoIHJlcHJlc2VudGluZyBlaXRoZXIgYSBzdWJwYXRoIChpZiBhbGwgYXJndW1lbnRzIGFyZSByZWxhdGl2ZQorICAgICAgICBwYXRocykgb3IgYSB0b3RhbGx5IGRpZmZlcmVudCBwYXRoIChpZiBvbmUgb2YgdGhlIGFyZ3VtZW50cyBpcworICAgICAgICBhbmNob3JlZCkuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV9jaGlsZChhcmdzKQorCisgICAgZGVmIF9fdHJ1ZWRpdl9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9tYWtlX2NoaWxkKChrZXksKSkKKworICAgIGRlZiBfX3J0cnVlZGl2X18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFydHMoW2tleV0gKyBzZWxmLl9wYXJ0cykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnQoc2VsZik6CisgICAgICAgICIiIlRoZSBsb2dpY2FsIHBhcmVudCBvZiB0aGUgcGF0aC4iIiIKKyAgICAgICAgZHJ2ID0gc2VsZi5fZHJ2CisgICAgICAgIHJvb3QgPSBzZWxmLl9yb290CisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAxIGFuZCAoZHJ2IG9yIHJvb3QpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKGRydiwgcm9vdCwgcGFydHNbOi0xXSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJlbnRzKHNlbGYpOgorICAgICAgICAiIiJBIHNlcXVlbmNlIG9mIHRoaXMgcGF0aCdzIGxvZ2ljYWwgcGFyZW50cy4iIiIKKyAgICAgICAgcmV0dXJuIF9QYXRoUGFyZW50cyhzZWxmKQorCisgICAgZGVmIGlzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICAiIiJUcnVlIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlIChoYXMgYm90aCBhIHJvb3QgYW5kLCBpZiBhcHBsaWNhYmxlLAorICAgICAgICBhIGRyaXZlKS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jvb3Q6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9mbGF2b3VyLmhhc19kcnYgb3IgYm9vbChzZWxmLl9kcnYpCisKKyAgICBkZWYgaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGNvbnRhaW5zIG9uZSBvZiB0aGUgc3BlY2lhbCBuYW1lcyByZXNlcnZlZAorICAgICAgICBieSB0aGUgc3lzdGVtLCBpZiBhbnkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9mbGF2b3VyLmlzX3Jlc2VydmVkKHNlbGYuX3BhcnRzKQorCisgICAgZGVmIG1hdGNoKHNlbGYsIHBhdGhfcGF0dGVybik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gVHJ1ZSBpZiB0aGlzIHBhdGggbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAgICAgICAgIiIiCisgICAgICAgIGNmID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZAorICAgICAgICBwYXRoX3BhdHRlcm4gPSBjZihwYXRoX3BhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0X3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0aF9wYXR0ZXJuLCkpCisgICAgICAgIGlmIG5vdCBwYXRfcGFydHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBwYXR0ZXJuIikKKyAgICAgICAgaWYgZHJ2IGFuZCBkcnYgIT0gY2Yoc2VsZi5fZHJ2KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiByb290IGFuZCByb290ICE9IGNmKHNlbGYuX3Jvb3QpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHBhcnRzID0gc2VsZi5fY3BhcnRzCisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgaWYgbGVuKHBhdF9wYXJ0cykgIT0gbGVuKHBhcnRzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHBhdF9wYXJ0cyA9IHBhdF9wYXJ0c1sxOl0KKyAgICAgICAgZWxpZiBsZW4ocGF0X3BhcnRzKSA+IGxlbihwYXJ0cyk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZm9yIHBhcnQsIHBhdCBpbiB6aXAocmV2ZXJzZWQocGFydHMpLCByZXZlcnNlZChwYXRfcGFydHMpKToKKyAgICAgICAgICAgIGlmIG5vdCBmbm1hdGNoLmZubWF0Y2hjYXNlKHBhcnQsIHBhdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgUHVyZVBvc2l4UGF0aChQdXJlUGF0aCk6CisgICAgX2ZsYXZvdXIgPSBfcG9zaXhfZmxhdm91cgorICAgIF9fc2xvdHNfXyA9ICgpCisKKworY2xhc3MgUHVyZVdpbmRvd3NQYXRoKFB1cmVQYXRoKToKKyAgICBfZmxhdm91ciA9IF93aW5kb3dzX2ZsYXZvdXIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisKKyMgRmlsZXN5c3RlbS1hY2Nlc3NpbmcgY2xhc3NlcworCisKK2NsYXNzIFBhdGgoUHVyZVBhdGgpOgorICAgIF9fc2xvdHNfXyA9ICgKKyAgICAgICAgJ19hY2Nlc3NvcicsCisgICAgICAgICdfY2xvc2VkJywKKyAgICApCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGNscyBpcyBQYXRoOgorICAgICAgICAgICAgY2xzID0gV2luZG93c1BhdGggaWYgb3MubmFtZSA9PSAnbnQnIGVsc2UgUG9zaXhQYXRoCisgICAgICAgIHNlbGYgPSBjbHMuX2Zyb21fcGFydHMoYXJncywgaW5pdD1GYWxzZSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2ZsYXZvdXIuaXNfc3VwcG9ydGVkOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiY2Fubm90IGluc3RhbnRpYXRlICVyIG9uIHlvdXIgc3lzdGVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjbHMuX19uYW1lX18sKSkKKyAgICAgICAgc2VsZi5faW5pdCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX2luaXQoc2VsZiwKKyAgICAgICAgICAgICAgIyBQcml2YXRlIG5vbi1jb25zdHJ1Y3RvciBhcmd1bWVudHMKKyAgICAgICAgICAgICAgdGVtcGxhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKyAgICAgICAgaWYgdGVtcGxhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9hY2Nlc3NvciA9IHRlbXBsYXRlLl9hY2Nlc3NvcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IgPSBfbm9ybWFsX2FjY2Vzc29yCisKKyAgICBkZWYgX21ha2VfY2hpbGRfcmVscGF0aChzZWxmLCBwYXJ0KToKKyAgICAgICAgIyBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB1c2VkIGZvciBkaXIgd2Fsa2luZy4gIGBwYXJ0YCBtdXN0IGJlCisgICAgICAgICMgYSBzaW5nbGUgcGFydCByZWxhdGl2ZSB0byB0aGlzIHBhdGguCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMgKyBbcGFydF0KKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwgcGFydHMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHQsIHYsIHRiKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorCisgICAgZGVmIF9yYWlzZV9jbG9zZWQoc2VsZik6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgiKQorCisgICAgZGVmIF9vcGVuZXIoc2VsZiwgbmFtZSwgZmxhZ3MsIG1vZGU9MG82NjYpOgorICAgICAgICAjIEEgc3R1YiBmb3IgdGhlIG9wZW5lciBhcmd1bWVudCB0byBidWlsdC1pbiBvcGVuKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLm9wZW4oc2VsZiwgZmxhZ3MsIG1vZGUpCisKKyAgICBkZWYgX3Jhd19vcGVuKHNlbGYsIGZsYWdzLCBtb2RlPTBvNzc3KToKKyAgICAgICAgIiIiCisgICAgICAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCBieSB0aGlzIHBhdGggYW5kIHJldHVybiBhIGZpbGUgZGVzY3JpcHRvciwKKyAgICAgICAgYXMgb3Mub3BlbigpIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3Iub3BlbihzZWxmLCBmbGFncywgbW9kZSkKKworICAgICMgUHVibGljIEFQSQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGN3ZChjbHMpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgcGF0aCBwb2ludGluZyB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQorICAgICAgICAoYXMgcmV0dXJuZWQgYnkgb3MuZ2V0Y3dkKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIGNscyhvcy5nZXRjd2QoKSkKKworICAgIGRlZiBpdGVyZGlyKHNlbGYpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgdGhlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5LiAgRG9lcyBub3QgeWllbGQgYW55CisgICAgICAgIHJlc3VsdCBmb3IgdGhlIHNwZWNpYWwgcGF0aHMgJy4nIGFuZCAnLi4nLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5fYWNjZXNzb3IubGlzdGRpcihzZWxmKToKKyAgICAgICAgICAgIGlmIG5hbWUgaW4geycuJywgJy4uJ306CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBhIHBhdGggb2JqZWN0IGZvciB0aGVzZSBtYWtlcyBsaXR0bGUgc2Vuc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgc2VsZi5fbWFrZV9jaGlsZF9yZWxwYXRoKG5hbWUpCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKworICAgIGRlZiBnbG9iKHNlbGYsIHBhdHRlcm4pOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgdGhpcyBzdWJ0cmVlIGFuZCB5aWVsZCBhbGwgZXhpc3RpbmcgZmlsZXMgKG9mIGFueQorICAgICAgICBraW5kLCBpbmNsdWRpbmcgZGlyZWN0b3JpZXMpIG1hdGNoaW5nIHRoZSBnaXZlbiBwYXR0ZXJuLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQocGF0dGVybikKKyAgICAgICAgZHJ2LCByb290LCBwYXR0ZXJuX3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0dGVybiwpKQorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIk5vbi1yZWxhdGl2ZSBwYXR0ZXJucyBhcmUgdW5zdXBwb3J0ZWQiKQorICAgICAgICBzZWxlY3RvciA9IF9tYWtlX3NlbGVjdG9yKHR1cGxlKHBhdHRlcm5fcGFydHMpKQorICAgICAgICBmb3IgcCBpbiBzZWxlY3Rvci5zZWxlY3RfZnJvbShzZWxmKToKKyAgICAgICAgICAgIHlpZWxkIHAKKworICAgIGRlZiByZ2xvYihzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgIiIiUmVjdXJzaXZlbHkgeWllbGQgYWxsIGV4aXN0aW5nIGZpbGVzIChvZiBhbnkga2luZCwgaW5jbHVkaW5nCisgICAgICAgIGRpcmVjdG9yaWVzKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybiwgYW55d2hlcmUgaW4gdGhpcyBzdWJ0cmVlLgorICAgICAgICAiIiIKKyAgICAgICAgcGF0dGVybiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQocGF0dGVybikKKyAgICAgICAgZHJ2LCByb290LCBwYXR0ZXJuX3BhcnRzID0gc2VsZi5fZmxhdm91ci5wYXJzZV9wYXJ0cygocGF0dGVybiwpKQorICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIk5vbi1yZWxhdGl2ZSBwYXR0ZXJucyBhcmUgdW5zdXBwb3J0ZWQiKQorICAgICAgICBzZWxlY3RvciA9IF9tYWtlX3NlbGVjdG9yKCgiKioiLCkgKyB0dXBsZShwYXR0ZXJuX3BhcnRzKSkKKyAgICAgICAgZm9yIHAgaW4gc2VsZWN0b3Iuc2VsZWN0X2Zyb20oc2VsZik6CisgICAgICAgICAgICB5aWVsZCBwCisKKyAgICBkZWYgYWJzb2x1dGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBhYnNvbHV0ZSB2ZXJzaW9uIG9mIHRoaXMgcGF0aC4gIFRoaXMgZnVuY3Rpb24gd29ya3MKKyAgICAgICAgZXZlbiBpZiB0aGUgcGF0aCBkb2Vzbid0IHBvaW50IHRvIGFueXRoaW5nLgorCisgICAgICAgIE5vIG5vcm1hbGl6YXRpb24gaXMgZG9uZSwgaS5lLiBhbGwgJy4nIGFuZCAnLi4nIHdpbGwgYmUga2VwdCBhbG9uZy4KKyAgICAgICAgVXNlIHJlc29sdmUoKSB0byBnZXQgdGhlIGNhbm9uaWNhbCBwYXRoIHRvIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgWFhYIHVudGVzdGVkIHlldCEKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgaWYgc2VsZi5pc19hYnNvbHV0ZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgIyBGSVhNRSB0aGlzIG11c3QgZGVmZXIgdG8gdGhlIHNwZWNpZmljIGZsYXZvdXIgKGFuZCwgdW5kZXIgV2luZG93cywKKyAgICAgICAgIyB1c2UgbnQuX2dldGZ1bGxwYXRobmFtZSgpKQorICAgICAgICBvYmogPSBzZWxmLl9mcm9tX3BhcnRzKFtvcy5nZXRjd2QoKV0gKyBzZWxmLl9wYXJ0cywgaW5pdD1GYWxzZSkKKyAgICAgICAgb2JqLl9pbml0KHRlbXBsYXRlPXNlbGYpCisgICAgICAgIHJldHVybiBvYmoKKworICAgIGRlZiByZXNvbHZlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTWFrZSB0aGUgcGF0aCBhYnNvbHV0ZSwgcmVzb2x2aW5nIGFsbCBzeW1saW5rcyBvbiB0aGUgd2F5IGFuZCBhbHNvCisgICAgICAgIG5vcm1hbGl6aW5nIGl0IChmb3IgZXhhbXBsZSB0dXJuaW5nIHNsYXNoZXMgaW50byBiYWNrc2xhc2hlcyB1bmRlcgorICAgICAgICBXaW5kb3dzKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHMgPSBzZWxmLl9mbGF2b3VyLnJlc29sdmUoc2VsZikKKyAgICAgICAgaWYgcyBpcyBOb25lOgorICAgICAgICAgICAgIyBObyBzeW1saW5rIHJlc29sdXRpb24gPT4gZm9yIGNvbnNpc3RlbmN5LCByYWlzZSBhbiBlcnJvciBpZgorICAgICAgICAgICAgIyB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGZvcmJpZGRlbgorICAgICAgICAgICAgc2VsZi5zdGF0KCkKKyAgICAgICAgICAgIHMgPSBzdHIoc2VsZi5hYnNvbHV0ZSgpKQorICAgICAgICAjIE5vdyB3ZSBoYXZlIG5vIHN5bWxpbmtzIGluIHRoZSBwYXRoLCBpdCdzIHNhZmUgdG8gbm9ybWFsaXplIGl0LgorICAgICAgICBub3JtZWQgPSBzZWxmLl9mbGF2b3VyLnBhdGhtb2Qubm9ybXBhdGgocykKKyAgICAgICAgb2JqID0gc2VsZi5fZnJvbV9wYXJ0cygobm9ybWVkLCksIGluaXQ9RmFsc2UpCisgICAgICAgIG9iai5faW5pdCh0ZW1wbGF0ZT1zZWxmKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgc3RhdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBzdGF0KCkgc3lzdGVtIGNhbGwgb24gdGhpcyBwYXRoLCBsaWtlCisgICAgICAgIG9zLnN0YXQoKSBkb2VzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLnN0YXQoc2VsZikKKworICAgIGRlZiBvd25lcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbG9naW4gbmFtZSBvZiB0aGUgZmlsZSBvd25lci4KKyAgICAgICAgIiIiCisgICAgICAgIGltcG9ydCBwd2QKKyAgICAgICAgcmV0dXJuIHB3ZC5nZXRwd3VpZChzZWxmLnN0YXQoKS5zdF91aWQpLnB3X25hbWUKKworICAgIGRlZiBncm91cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgZ3JvdXAgbmFtZSBvZiB0aGUgZmlsZSBnaWQuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgZ3JwCisgICAgICAgIHJldHVybiBncnAuZ2V0Z3JnaWQoc2VsZi5zdGF0KCkuc3RfZ2lkKS5ncl9uYW1lCisKKyAgICBkZWYgb3BlbihzZWxmLCBtb2RlPSdyJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLAorICAgICAgICAgICAgIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgT3BlbiB0aGUgZmlsZSBwb2ludGVkIGJ5IHRoaXMgcGF0aCBhbmQgcmV0dXJuIGEgZmlsZSBvYmplY3QsIGFzCisgICAgICAgIHRoZSBidWlsdC1pbiBvcGVuKCkgZnVuY3Rpb24gZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHJldHVybiBpby5vcGVuKHN0cihzZWxmKSwgbW9kZSwgYnVmZmVyaW5nLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXI9c2VsZi5fb3BlbmVyKQorCisgICAgZGVmIHRvdWNoKHNlbGYsIG1vZGU9MG82NjYsIGV4aXN0X29rPVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHRoaXMgZmlsZSB3aXRoIHRoZSBnaXZlbiBhY2Nlc3MgbW9kZSwgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIGV4aXN0X29rOgorICAgICAgICAgICAgIyBGaXJzdCB0cnkgdG8gYnVtcCBtb2RpZmljYXRpb24gdGltZQorICAgICAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBub3RlOiBHTlUgdG91Y2ggdXNlcyB0aGUgVVRJTUVfTk9XIG9wdGlvbiBvZgorICAgICAgICAgICAgIyB0aGUgdXRpbWVuc2F0KCkgLyBmdXRpbWVucygpIGZ1bmN0aW9ucy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci51dGltZShzZWxmLCBOb25lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBBdm9pZCBleGNlcHRpb24gY2hhaW5pbmcKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBmbGFncyA9IG9zLk9fQ1JFQVQgfCBvcy5PX1dST05MWQorICAgICAgICBpZiBub3QgZXhpc3Rfb2s6CisgICAgICAgICAgICBmbGFncyB8PSBvcy5PX0VYQ0wKKyAgICAgICAgZmQgPSBzZWxmLl9yYXdfb3BlbihmbGFncywgbW9kZSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgbWtkaXIoc2VsZiwgbW9kZT0wbzc3NywgcGFyZW50cz1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIG5vdCBwYXJlbnRzOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9hY2Nlc3Nvci5ta2RpcihzZWxmLCBtb2RlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmVudC5ta2Rpcihtb2RlLCBUcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisKKyAgICBkZWYgY2htb2Qoc2VsZiwgbW9kZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBwYXRoLCBsaWtlIG9zLmNobW9kKCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5jaG1vZChzZWxmLCBtb2RlKQorCisgICAgZGVmIGxjaG1vZChzZWxmLCBtb2RlKToKKyAgICAgICAgIiIiCisgICAgICAgIExpa2UgY2htb2QoKSwgZXhjZXB0IGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIHRoZSBzeW1saW5rJ3MKKyAgICAgICAgcGVybWlzc2lvbnMgYXJlIGNoYW5nZWQsIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLmxjaG1vZChzZWxmLCBtb2RlKQorCisgICAgZGVmIHVubGluayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGlzIGZpbGUgb3IgbGluay4KKyAgICAgICAgSWYgdGhlIHBhdGggaXMgYSBkaXJlY3RvcnksIHVzZSBybWRpcigpIGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci51bmxpbmsoc2VsZikKKworICAgIGRlZiBybWRpcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGlzIGRpcmVjdG9yeS4gIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJtZGlyKHNlbGYpCisKKyAgICBkZWYgbHN0YXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMaWtlIHN0YXQoKSwgZXhjZXB0IGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIHRoZSBzeW1saW5rJ3MKKyAgICAgICAgc3RhdHVzIGluZm9ybWF0aW9uIGlzIHJldHVybmVkLCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3IubHN0YXQoc2VsZikKKworICAgIGRlZiByZW5hbWUoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbmFtZSB0aGlzIHBhdGggdG8gdGhlIGdpdmVuIHBhdGguCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5yZW5hbWUoc2VsZiwgdGFyZ2V0KQorCisgICAgZGVmIHJlcGxhY2Uoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbmFtZSB0aGlzIHBhdGggdG8gdGhlIGdpdmVuIHBhdGgsIGNsb2JiZXJpbmcgdGhlIGV4aXN0aW5nCisgICAgICAgIGRlc3RpbmF0aW9uIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJlcGxhY2Uoc2VsZiwgdGFyZ2V0KQorCisgICAgZGVmIHN5bWxpbmtfdG8oc2VsZiwgdGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgdGhpcyBwYXRoIGEgc3ltbGluayBwb2ludGluZyB0byB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgICAgTm90ZSB0aGUgb3JkZXIgb2YgYXJndW1lbnRzIChzZWxmLCB0YXJnZXQpIGlzIHRoZSByZXZlcnNlIG9mIG9zLnN5bWxpbmsncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnN5bWxpbmsodGFyZ2V0LCBzZWxmLCB0YXJnZXRfaXNfZGlyZWN0b3J5KQorCisgICAgIyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSBzdGF0IHJlc3VsdHMKKworICAgIGRlZiBleGlzdHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBleGlzdHMuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnN0YXQoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2RpcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNESVIoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2ZpbGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSAoYWxzbyBUcnVlIGZvciBzeW1saW5rcyBwb2ludGluZworICAgICAgICB0byByZWd1bGFyIGZpbGVzKS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTUkVHKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zeW1saW5rKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNMTksoc2VsZi5sc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2Jsb2NrX2RldmljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgYmxvY2sgZGV2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNCTEsoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2NoYXJfZGV2aWNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBjaGFyYWN0ZXIgZGV2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNDSFIoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2ZpZm8oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIEZJRk8uCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0ZJRk8oc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRU5PRU5UOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3NvY2tldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNTT0NLKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVOT0VOVDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBQb3NpeFBhdGgoUGF0aCwgUHVyZVBvc2l4UGF0aCk6CisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgV2luZG93c1BhdGgoUGF0aCwgUHVyZVdpbmRvd3NQYXRoKToKKyAgICBfX3Nsb3RzX18gPSAoKQpkaWZmIC0tZ2l0IGEvTGliL3BkYi5weSBiL0xpYi9wZGIucHkKaW5kZXggODBjYmE5ZC4uZGQ3Y2ViOCAxMDA3NTUKLS0tIGEvTGliL3BkYi5weQorKysgYi9MaWIvcGRiLnB5CkBAIC05MiwyMSArOTIsMTQgQEAKICAgICBjcmUgPSByZS5jb21waWxlKHInZGVmXHMrJXNccypbKF0nICUgcmUuZXNjYXBlKGZ1bmNuYW1lKSkKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAjIGNvbnN1bWVyIG9mIHRoaXMgaW5mbyBleHBlY3RzIHRoZSBmaXJzdCBsaW5lIHRvIGJlIDEKLSAgICBsaW5lbm8gPSAxCi0gICAgYW5zd2VyID0gTm9uZQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmUgPT0gJyc6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBjcmUubWF0Y2gobGluZSk6Ci0gICAgICAgICAgICBhbnN3ZXIgPSBmdW5jbmFtZSwgZmlsZW5hbWUsIGxpbmVubwotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgbGluZW5vICs9IDEKLSAgICBmcC5jbG9zZSgpCi0gICAgcmV0dXJuIGFuc3dlcgorICAgIHdpdGggZnA6CisgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGZwLCBzdGFydD0xKToKKyAgICAgICAgICAgIGlmIGNyZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY25hbWUsIGZpbGVuYW1lLCBsaW5lbm8KKyAgICByZXR1cm4gTm9uZQogCiBkZWYgZ2V0c291cmNlbGluZXMob2JqKToKICAgICBsaW5lcywgbGluZW5vID0gaW5zcGVjdC5maW5kc291cmNlKG9iaikKQEAgLTE3MCwxMiArMTYzLDEyIEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlbnZIb21lLCAiLnBkYnJjIikpIGFzIHJjRmlsZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBvcGVuKCIucGRicmMiKSBhcyByY0ZpbGU6CiAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBzZWxmLmNvbW1hbmRzID0ge30gIyBhc3NvY2lhdGVzIGEgY29tbWFuZCBsaXN0IHRvIGJyZWFrcG9pbnQgbnVtYmVycwpAQCAtMzA0LDggKzI5NywxNiBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190cmFjZWJhY2sgPSBleGNfaW5mbwogICAgICAgICBmcmFtZS5mX2xvY2Fsc1snX19leGNlcHRpb25fXyddID0gZXhjX3R5cGUsIGV4Y192YWx1ZQotICAgICAgICBzZWxmLm1lc3NhZ2UodHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGNfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3ZhbHVlKVstMV0uc3RyaXAoKSkKKworICAgICAgICAjIEFuICdJbnRlcm5hbCBTdG9wSXRlcmF0aW9uJyBleGNlcHRpb24gaXMgYW4gZXhjZXB0aW9uIGRlYnVnIGV2ZW50CisgICAgICAgICMgaXNzdWVkIGJ5IHRoZSBpbnRlcnByZXRlciB3aGVuIGhhbmRsaW5nIGEgc3ViZ2VuZXJhdG9yIHJ1biB3aXRoCisgICAgICAgICMgJ3lpZWxkIGZyb20nIG9yIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLiBObyBleGNlcHRpb24gaGFzCisgICAgICAgICMgYWN0dWFsbHkgb2NjdXJlZCBpbiB0aGlzIGNhc2UuIFRoZSBkZWJ1Z2dlciB1c2VzIHRoaXMgZGVidWcgZXZlbnQgdG8KKyAgICAgICAgIyBzdG9wIHdoZW4gdGhlIGRlYnVnZ2VlIGlzIHJldHVybmluZyBmcm9tIHN1Y2ggZ2VuZXJhdG9ycy4KKyAgICAgICAgcHJlZml4ID0gJ0ludGVybmFsICcgaWYgKG5vdCBleGNfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhjX3R5cGUgaXMgU3RvcEl0ZXJhdGlvbikgZWxzZSAnJworICAgICAgICBzZWxmLm1lc3NhZ2UoJyVzJXMnICUgKHByZWZpeCwKKyAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsIGV4Y192YWx1ZSlbLTFdLnN0cmlwKCkpKQogICAgICAgICBzZWxmLmludGVyYWN0aW9uKGZyYW1lLCBleGNfdHJhY2ViYWNrKQogCiAgICAgIyBHZW5lcmFsIGludGVyYWN0aW9uIGZ1bmN0aW9uCkBAIC0xMTYzLDE1ICsxMTY0LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gX3JzdHIoJyoqIHJhaXNlZCAlcyAqKicgJSBlcnIpCiAKICAgICBkZWYgZG9fcChzZWxmLCBhcmcpOgotICAgICAgICAiIiJwKHJpbnQpIGV4cHJlc3Npb24KKyAgICAgICAgIiIicCBleHByZXNzaW9uCiAgICAgICAgIFByaW50IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4KICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubWVzc2FnZShyZXByKHNlbGYuX2dldHZhbChhcmcpKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwotICAgICMgbWFrZSAicHJpbnQiIGFuIGFsaWFzIG9mICJwIiBzaW5jZSBwcmludCBpc24ndCBhIFB5dGhvbiBzdGF0ZW1lbnQgYW55bW9yZQotICAgIGRvX3ByaW50ID0gZG9fcAogCiAgICAgZGVmIGRvX3BwKHNlbGYsIGFyZyk6CiAgICAgICAgICIiInBwIGV4cHJlc3Npb24KQEAgLTEyNDUsNyArMTI0NCw3IEBACiAgICAgICAgIGJyZWFrbGlzdCA9IHNlbGYuZ2V0X2ZpbGVfYnJlYWtzKGZpbGVuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMoc2VsZi5jdXJmcmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lcywgbGluZW5vLCBicmVha2xpc3QsIHNlbGYuY3VyZnJhbWUpCkBAIC0xMjYxLDcgKzEyNjAsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGxpbmVzLCBsaW5lbm8gPSBnZXRzb3VyY2VsaW5lcyhvYmopCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVHlwZUVycm9yKSBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVHlwZUVycm9yKSBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lcywgbGluZW5vKQpAQCAtMTM5Miw3ICsxMzkxLDcgQEAKICAgICAgICAgcGxhY2VkIGluIHRoZSAucGRicmMgZmlsZSk6CiAKICAgICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKQotICAgICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50ICIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdCisgICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pCiAgICAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGYKICAgICAgICAgYWxpYXMgcHMgcGkgc2VsZgogICAgICAgICAiIiIKQEAgLTE1NTAsNyArMTU0OSw3IEBACiAgICAgICAgICdoZWxwJywgJ3doZXJlJywgJ2Rvd24nLCAndXAnLCAnYnJlYWsnLCAndGJyZWFrJywgJ2NsZWFyJywgJ2Rpc2FibGUnLAogICAgICAgICAnZW5hYmxlJywgJ2lnbm9yZScsICdjb25kaXRpb24nLCAnY29tbWFuZHMnLCAnc3RlcCcsICduZXh0JywgJ3VudGlsJywKICAgICAgICAgJ2p1bXAnLCAncmV0dXJuJywgJ3JldHZhbCcsICdydW4nLCAnY29udGludWUnLCAnbGlzdCcsICdsb25nbGlzdCcsCi0gICAgICAgICdhcmdzJywgJ3ByaW50JywgJ3BwJywgJ3doYXRpcycsICdzb3VyY2UnLCAnZGlzcGxheScsICd1bmRpc3BsYXknLAorICAgICAgICAnYXJncycsICdwJywgJ3BwJywgJ3doYXRpcycsICdzb3VyY2UnLCAnZGlzcGxheScsICd1bmRpc3BsYXknLAogICAgICAgICAnaW50ZXJhY3QnLCAnYWxpYXMnLCAndW5hbGlhcycsICdkZWJ1ZycsICdxdWl0JywKICAgICBdCiAKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGUucHkgYi9MaWIvcGlja2xlLnB5CmluZGV4IDM4NmZmYmEuLmM1NzE0OWEgMTAwNjQ0Ci0tLSBhL0xpYi9waWNrbGUucHkKKysrIGIvTGliL3BpY2tsZS5weQpAQCAtMjMsMTIgKzIzLDEzIEBACiAKICIiIgogCi1mcm9tIHR5cGVzIGltcG9ydCBGdW5jdGlvblR5cGUsIEJ1aWx0aW5GdW5jdGlvblR5cGUKK2Zyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZSwgTW9kdWxlVHlwZQogZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQogZnJvbSBjb3B5cmVnIGltcG9ydCBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LCBfaW52ZXJ0ZWRfcmVnaXN0cnksIF9leHRlbnNpb25fY2FjaGUKLWltcG9ydCBtYXJzaGFsCitmcm9tIGl0ZXJ0b29scyBpbXBvcnQgaXNsaWNlCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RydWN0Citmcm9tIHN5cyBpbXBvcnQgbWF4c2l6ZQorZnJvbSBzdHJ1Y3QgaW1wb3J0IHBhY2ssIHVucGFjawogaW1wb3J0IHJlCiBpbXBvcnQgaW8KIGltcG9ydCBjb2RlY3MKQEAgLTQxLDI4ICs0MiwyNCBAQAogYnl0ZXNfdHlwZXMgPSAoYnl0ZXMsIGJ5dGVhcnJheSkKIAogIyBUaGVzZSBhcmUgcHVyZWx5IGluZm9ybWF0aW9uYWw7IG5vIGNvZGUgdXNlcyB0aGVzZS4KLWZvcm1hdF92ZXJzaW9uID0gIjMuMCIgICAgICAgICAgICAgICAgICAjIEZpbGUgZm9ybWF0IHZlcnNpb24gd2Ugd3JpdGUKK2Zvcm1hdF92ZXJzaW9uID0gIjQuMCIgICAgICAgICAgICAgICAgICAjIEZpbGUgZm9ybWF0IHZlcnNpb24gd2Ugd3JpdGUKIGNvbXBhdGlibGVfZm9ybWF0cyA9IFsiMS4wIiwgICAgICAgICAgICAjIE9yaWdpbmFsIHByb3RvY29sIDAKICAgICAgICAgICAgICAgICAgICAgICAiMS4xIiwgICAgICAgICAgICAjIFByb3RvY29sIDAgd2l0aCBJTlNUIGFkZGVkCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMiIsICAgICAgICAgICAgIyBPcmlnaW5hbCBwcm90b2NvbCAxCiAgICAgICAgICAgICAgICAgICAgICAgIjEuMyIsICAgICAgICAgICAgIyBQcm90b2NvbCAxIHdpdGggQklORkxPQVQgYWRkZWQKICAgICAgICAgICAgICAgICAgICAgICAiMi4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDIKICAgICAgICAgICAgICAgICAgICAgICAiMy4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDMKKyAgICAgICAgICAgICAgICAgICAgICAiNC4wIiwgICAgICAgICAgICAjIFByb3RvY29sIDQKICAgICAgICAgICAgICAgICAgICAgICBdICAgICAgICAgICAgICAgICAjIE9sZCBmb3JtYXQgdmVyc2lvbnMgd2UgY2FuIHJlYWQKIAogIyBUaGlzIGlzIHRoZSBoaWdoZXN0IHByb3RvY29sIG51bWJlciB3ZSBrbm93IGhvdyB0byByZWFkLgotSElHSEVTVF9QUk9UT0NPTCA9IDMKK0hJR0hFU1RfUFJPVE9DT0wgPSA0CiAKICMgVGhlIHByb3RvY29sIHdlIHdyaXRlIGJ5IGRlZmF1bHQuICBNYXkgYmUgbGVzcyB0aGFuIEhJR0hFU1RfUFJPVE9DT0wuCiAjIFdlIGludGVudGlvbmFsbHkgd3JpdGUgYSBwcm90b2NvbCB0aGF0IFB5dGhvbiAyLnggY2Fubm90IHJlYWQ7CiAjIHRoZXJlIGFyZSB0b28gbWFueSBpc3N1ZXMgd2l0aCB0aGF0LgogREVGQVVMVF9QUk9UT0NPTCA9IDMKIAotIyBXaHkgdXNlIHN0cnVjdC5wYWNrKCkgZm9yIHBpY2tsaW5nIGJ1dCBtYXJzaGFsLmxvYWRzKCkgZm9yCi0jIHVucGlja2xpbmc/ICBzdHJ1Y3QucGFjaygpIGlzIDQwJSBmYXN0ZXIgdGhhbiBtYXJzaGFsLmR1bXBzKCksIGJ1dAotIyBtYXJzaGFsLmxvYWRzKCkgaXMgdHdpY2UgYXMgZmFzdCBhcyBzdHJ1Y3QudW5wYWNrKCkhCi1tbG9hZHMgPSBtYXJzaGFsLmxvYWRzCi0KIGNsYXNzIFBpY2tsZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiQSBjb21tb24gYmFzZSBjbGFzcyBmb3IgdGhlIG90aGVyIHBpY2tsaW5nIGV4Y2VwdGlvbnMuIiIiCiAgICAgcGFzcwpAQCAtMTY4LDcgKzE2NSwxODEgQEAKIEJJTkJZVEVTICAgICAgID0gYidCJyAgICMgcHVzaCBieXRlczsgY291bnRlZCBiaW5hcnkgc3RyaW5nIGFyZ3VtZW50CiBTSE9SVF9CSU5CWVRFUyA9IGInQycgICAjICAiICAgICAiICAgOyAgICAiICAgICAgIiAgICAgICAiICAgICAgIiA8IDI1NiBieXRlcwogCi1fX2FsbF9fLmV4dGVuZChbeCBmb3IgeCBpbiBkaXIoKSBpZiByZS5tYXRjaCgiW0EtWl1bQS1aMC05X10rJCIseCldKQorIyBQcm90b2NvbCA0CitTSE9SVF9CSU5VTklDT0RFID0gYidceDhjJyAgIyBwdXNoIHNob3J0IHN0cmluZzsgVVRGLTggbGVuZ3RoIDwgMjU2IGJ5dGVzCitCSU5VTklDT0RFOCAgICAgID0gYidceDhkJyAgIyBwdXNoIHZlcnkgbG9uZyBzdHJpbmcKK0JJTkJZVEVTOCAgICAgICAgPSBiJ1x4OGUnICAjIHB1c2ggdmVyeSBsb25nIGJ5dGVzIHN0cmluZworRU1QVFlfU0VUICAgICAgICA9IGInXHg4ZicgICMgcHVzaCBlbXB0eSBzZXQgb24gdGhlIHN0YWNrCitBRERJVEVNUyAgICAgICAgID0gYidceDkwJyAgIyBtb2RpZnkgc2V0IGJ5IGFkZGluZyB0b3Btb3N0IHN0YWNrIGl0ZW1zCitGUk9aRU5TRVQgICAgICAgID0gYidceDkxJyAgIyBidWlsZCBmcm96ZW5zZXQgZnJvbSB0b3Btb3N0IHN0YWNrIGl0ZW1zCitORVdPQkpfRVggICAgICAgID0gYidceDkyJyAgIyBsaWtlIE5FV09CSiBidXQgd29yayB3aXRoIGtleXdvcmQgb25seSBhcmd1bWVudHMKK1NUQUNLX0dMT0JBTCAgICAgPSBiJ1x4OTMnICAjIHNhbWUgYXMgR0xPQkFMIGJ1dCB1c2luZyBuYW1lcyBvbiB0aGUgc3RhY2tzCitNRU1PSVpFICAgICAgICAgID0gYidceDk0JyAgIyBzdG9yZSB0b3Agb2YgdGhlIHN0YWNrIGluIG1lbW8KK0ZSQU1FICAgICAgICAgICAgPSBiJ1x4OTUnICAjIGluZGljYXRlIHRoZSBiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUKKworX19hbGxfXy5leHRlbmQoW3ggZm9yIHggaW4gZGlyKCkgaWYgcmUubWF0Y2goIltBLVpdW0EtWjAtOV9dKyQiLCB4KV0pCisKKworY2xhc3MgX0ZyYW1lcjoKKworICAgIF9GUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVfd3JpdGUpOgorICAgICAgICBzZWxmLmZpbGVfd3JpdGUgPSBmaWxlX3dyaXRlCisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiBzdGFydF9mcmFtaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBpby5CeXRlc0lPKCkKKworICAgIGRlZiBlbmRfZnJhbWluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lIGFuZCBzZWxmLmN1cnJlbnRfZnJhbWUudGVsbCgpID4gMDoKKyAgICAgICAgICAgIHNlbGYuY29tbWl0X2ZyYW1lKGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgY29tbWl0X2ZyYW1lKHNlbGYsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZiA9IHNlbGYuY3VycmVudF9mcmFtZQorICAgICAgICAgICAgaWYgZi50ZWxsKCkgPj0gc2VsZi5fRlJBTUVfU0laRV9UQVJHRVQgb3IgZm9yY2U6CisgICAgICAgICAgICAgICAgd2l0aCBmLmdldGJ1ZmZlcigpIGFzIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIG4gPSBsZW4oZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUgPSBzZWxmLmZpbGVfd3JpdGUKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoRlJBTUUpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKHBhY2soIjxRIiwgbikpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICAgICAgZi50cnVuY2F0ZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmN1cnJlbnRfZnJhbWUud3JpdGUoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfd3JpdGUoZGF0YSkKKworCitjbGFzcyBfVW5mcmFtZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV9yZWFkLCBmaWxlX3JlYWRsaW5lLCBmaWxlX3RlbGw9Tm9uZSk6CisgICAgICAgIHNlbGYuZmlsZV9yZWFkID0gZmlsZV9yZWFkCisgICAgICAgIHNlbGYuZmlsZV9yZWFkbGluZSA9IGZpbGVfcmVhZGxpbmUKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZChuKQorICAgICAgICAgICAgaWYgbm90IGRhdGEgYW5kIG4gIT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkKG4pCisgICAgICAgICAgICBpZiBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIGVuZCBvZiBmcmFtZSIpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkKG4pCisKKyAgICBkZWYgcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmN1cnJlbnRfZnJhbWUucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgZGF0YVstMV0gIT0gYidcbic6CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgZW5kIG9mIGZyYW1lIikKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWRsaW5lKCkKKworICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYsIGZyYW1lX3NpemUpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWUgYW5kIHNlbGYuY3VycmVudF9mcmFtZS5yZWFkKCkgIT0gYicnOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICJiZWdpbm5pbmcgb2YgYSBuZXcgZnJhbWUgYmVmb3JlIGVuZCBvZiBjdXJyZW50IGZyYW1lIikKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gaW8uQnl0ZXNJTyhzZWxmLmZpbGVfcmVhZChmcmFtZV9zaXplKSkKKworCisjIFRvb2xzIHVzZWQgZm9yIHBpY2tsaW5nLgorCitkZWYgX2dldGF0dHJpYnV0ZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPUZhbHNlKToKKyAgICBkb3R0ZWRfcGF0aCA9IG5hbWUuc3BsaXQoIi4iKQorICAgIGlmIG5vdCBhbGxvd19xdWFsbmFtZSBhbmQgbGVuKGRvdHRlZF9wYXRoKSA+IDE6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgcXVhbGlmaWVkIGF0dHJpYnV0ZSB7IXJ9IG9uIHshcn07ICIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIHByb3RvY29scyA+PSA0IHRvIGVuYWJsZSBzdXBwb3J0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIG9iaikpCisgICAgZm9yIHN1YnBhdGggaW4gZG90dGVkX3BhdGg6CisgICAgICAgIGlmIHN1YnBhdGggPT0gJzxsb2NhbHM+JzoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlIHshcn0gb24geyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHN1YnBhdGgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJDYW4ndCBnZXQgYXR0cmlidXRlIHshcn0gb24geyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICByZXR1cm4gb2JqCisKK2RlZiB3aGljaG1vZHVsZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPUZhbHNlKToKKyAgICAiIiJGaW5kIHRoZSBtb2R1bGUgYW4gb2JqZWN0IGJlbG9uZyB0by4iIiIKKyAgICBtb2R1bGVfbmFtZSA9IGdldGF0dHIob2JqLCAnX19tb2R1bGVfXycsIE5vbmUpCisgICAgaWYgbW9kdWxlX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBtb2R1bGVfbmFtZQorICAgIGZvciBtb2R1bGVfbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CisgICAgICAgIGlmIG1vZHVsZV9uYW1lID09ICdfX21haW5fXycgb3IgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWUpIGlzIG9iajoKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiAnX19tYWluX18nCisKK2RlZiBlbmNvZGVfbG9uZyh4KToKKyAgICByIiIiRW5jb2RlIGEgbG9uZyB0byBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgorICAgIE5vdGUgdGhhdCAwIGlzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nLCB0byBzYXZlIGEKKyAgICBieXRlIGluIHRoZSBMT05HMSBwaWNrbGluZyBjb250ZXh0LgorCisgICAgPj4+IGVuY29kZV9sb25nKDApCisgICAgYicnCisgICAgPj4+IGVuY29kZV9sb25nKDI1NSkKKyAgICBiJ1x4ZmZceDAwJworICAgID4+PiBlbmNvZGVfbG9uZygzMjc2NykKKyAgICBiJ1x4ZmZceDdmJworICAgID4+PiBlbmNvZGVfbG9uZygtMjU2KQorICAgIGInXHgwMFx4ZmYnCisgICAgPj4+IGVuY29kZV9sb25nKC0zMjc2OCkKKyAgICBiJ1x4MDBceDgwJworICAgID4+PiBlbmNvZGVfbG9uZygtMTI4KQorICAgIGInXHg4MCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMTI3KQorICAgIGInXHg3ZicKKyAgICA+Pj4KKyAgICAiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBiJycKKyAgICBuYnl0ZXMgPSAoeC5iaXRfbGVuZ3RoKCkgPj4gMykgKyAxCisgICAgcmVzdWx0ID0geC50b19ieXRlcyhuYnl0ZXMsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCisgICAgaWYgeCA8IDAgYW5kIG5ieXRlcyA+IDE6CisgICAgICAgIGlmIHJlc3VsdFstMV0gPT0gMHhmZiBhbmQgKHJlc3VsdFstMl0gJiAweDgwKSAhPSAwOgorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotMV0KKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBkZWNvZGVfbG9uZyhkYXRhKToKKyAgICByIiIiRGVjb2RlIGEgbG9uZyBmcm9tIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCisKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYicnKQorICAgIDAKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHgwMCIpCisgICAgMjU1CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4N2YiKQorICAgIDMyNzY3CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ZmYiKQorICAgIC0yNTYKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHg4MCIpCisgICAgLTMyNzY4CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHg4MCIpCisgICAgLTEyOAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4N2YiKQorICAgIDEyNworICAgICIiIgorICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhkYXRhLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorCiAKICMgUGlja2xpbmcgbWFjaGluZXJ5CiAKQEAgLTE3OCw5ICszNDksOSBAQAogICAgICAgICAiIiJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKICAgICAgICAgVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKLSAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdAotICAgICAgICBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IKLSAgICAgICAgUHl0aG9uIDMuMC4KKyAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUKKyAgICAgICAgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IKKyAgICAgICAgUHl0aG9uIDMuCiAKICAgICAgICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdAogICAgICAgICBwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZQpAQCAtMTkzLDggKzM2NCw4IEBACiAgICAgICAgIG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCiAgICAgICAgIElmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgICAgICAgbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbgotICAgICAgICAyLngsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICAgICAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsCisgICAgICAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgogICAgICAgICAiIiIKICAgICAgICAgaWYgcHJvdG9jb2wgaXMgTm9uZToKICAgICAgICAgICAgIHByb3RvY29sID0gREVGQVVMVF9QUk9UT0NPTApAQCAtMjAzLDkgKzM3NCwxMSBAQAogICAgICAgICBlbGlmIG5vdCAwIDw9IHByb3RvY29sIDw9IEhJR0hFU1RfUFJPVE9DT0w6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIgJSBISUdIRVNUX1BST1RPQ09MKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlID0gZmlsZS53cml0ZQorICAgICAgICAgICAgc2VsZi5fZmlsZV93cml0ZSA9IGZpbGUud3JpdGUKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmaWxlIG11c3QgaGF2ZSBhICd3cml0ZScgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mcmFtZXIgPSBfRnJhbWVyKHNlbGYuX2ZpbGVfd3JpdGUpCisgICAgICAgIHNlbGYud3JpdGUgPSBzZWxmLmZyYW1lci53cml0ZQogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLnByb3RvID0gaW50KHByb3RvY29sKQogICAgICAgICBzZWxmLmJpbiA9IHByb3RvY29sID49IDEKQEAgLTIyNywxMyArNDAwLDE2IEBACiAgICAgICAgICIiIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4iIiIKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIFBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBpcwogICAgICAgICAjIG9ubHkgbmVlZGVkIHRvIG1pbWljIHRoZSBiZWhhdmlvciBvZiBfcGlja2xlLlBpY2tsZXIuZHVtcCgpLgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAid3JpdGUiKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9maWxlX3dyaXRlIik6CiAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJQaWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMuX19pbml0X18oKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sKSkKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgc2VsZi53cml0ZShQUk9UTyArIGJ5dGVzKFtzZWxmLnByb3RvXSkpCisgICAgICAgICAgICBzZWxmLndyaXRlKFBST1RPICsgcGFjaygiPEIiLCBzZWxmLnByb3RvKSkKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgc2VsZi5mcmFtZXIuc3RhcnRfZnJhbWluZygpCiAgICAgICAgIHNlbGYuc2F2ZShvYmopCiAgICAgICAgIHNlbGYud3JpdGUoU1RPUCkKKyAgICAgICAgc2VsZi5mcmFtZXIuZW5kX2ZyYW1pbmcoKQogCiAgICAgZGVmIG1lbW9pemUoc2VsZiwgb2JqKToKICAgICAgICAgIiIiU3RvcmUgYW4gb2JqZWN0IGluIHRoZSBtZW1vLiIiIgpAQCAtMjUzLDMxICs0MjksMzUgQEAKICAgICAgICAgaWYgc2VsZi5mYXN0OgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGFzc2VydCBpZChvYmopIG5vdCBpbiBzZWxmLm1lbW8KLSAgICAgICAgbWVtb19sZW4gPSBsZW4oc2VsZi5tZW1vKQotICAgICAgICBzZWxmLndyaXRlKHNlbGYucHV0KG1lbW9fbGVuKSkKLSAgICAgICAgc2VsZi5tZW1vW2lkKG9iaildID0gbWVtb19sZW4sIG9iagorICAgICAgICBpZHggPSBsZW4oc2VsZi5tZW1vKQorICAgICAgICBzZWxmLndyaXRlKHNlbGYucHV0KGlkeCkpCisgICAgICAgIHNlbGYubWVtb1tpZChvYmopXSA9IGlkeCwgb2JqCiAKICAgICAjIFJldHVybiBhIFBVVCAoQklOUFVULCBMT05HX0JJTlBVVCkgb3Bjb2RlIHN0cmluZywgd2l0aCBhcmd1bWVudCBpLgotICAgIGRlZiBwdXQoc2VsZiwgaSwgcGFjaz1zdHJ1Y3QucGFjayk6Ci0gICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQklOUFVUICsgYnl0ZXMoW2ldKQorICAgIGRlZiBwdXQoc2VsZiwgaWR4KToKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgcmV0dXJuIE1FTU9JWkUKKyAgICAgICAgZWxpZiBzZWxmLmJpbjoKKyAgICAgICAgICAgIGlmIGlkeCA8IDI1NjoKKyAgICAgICAgICAgICAgICByZXR1cm4gQklOUFVUICsgcGFjaygiPEIiLCBpZHgpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBMT05HX0JJTlBVVCArIHBhY2soIjxJIiwgaSkKLQotICAgICAgICByZXR1cm4gUFVUICsgcmVwcihpKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJworICAgICAgICAgICAgICAgIHJldHVybiBMT05HX0JJTlBVVCArIHBhY2soIjxJIiwgaWR4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIFBVVCArIHJlcHIoaWR4KS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJwogCiAgICAgIyBSZXR1cm4gYSBHRVQgKEJJTkdFVCwgTE9OR19CSU5HRVQpIG9wY29kZSBzdHJpbmcsIHdpdGggYXJndW1lbnQgaS4KLSAgICBkZWYgZ2V0KHNlbGYsIGksIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBnZXQoc2VsZiwgaSk6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICByZXR1cm4gQklOR0VUICsgYnl0ZXMoW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBCSU5HRVQgKyBwYWNrKCI8QiIsIGkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBMT05HX0JJTkdFVCArIHBhY2soIjxJIiwgaSkKIAogICAgICAgICByZXR1cm4gR0VUICsgcmVwcihpKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJwogCiAgICAgZGVmIHNhdmUoc2VsZiwgb2JqLCBzYXZlX3BlcnNpc3RlbnRfaWQ9VHJ1ZSk6CisgICAgICAgIHNlbGYuZnJhbWVyLmNvbW1pdF9mcmFtZSgpCisKICAgICAgICAgIyBDaGVjayBmb3IgcGVyc2lzdGVudCBpZCAoZGVmaW5lZCBieSBhIHN1YmNsYXNzKQogICAgICAgICBwaWQgPSBzZWxmLnBlcnNpc3RlbnRfaWQob2JqKQogICAgICAgICBpZiBwaWQgaXMgbm90IE5vbmUgYW5kIHNhdmVfcGVyc2lzdGVudF9pZDoKQEAgLTI4NiwyMCArNDY2LDIwIEBACiAKICAgICAgICAgIyBDaGVjayB0aGUgbWVtbwogICAgICAgICB4ID0gc2VsZi5tZW1vLmdldChpZChvYmopKQotICAgICAgICBpZiB4OgorICAgICAgICBpZiB4IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi53cml0ZShzZWxmLmdldCh4WzBdKSkKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgQ2hlY2sgdGhlIHR5cGUgZGlzcGF0Y2ggdGFibGUKICAgICAgICAgdCA9IHR5cGUob2JqKQogICAgICAgICBmID0gc2VsZi5kaXNwYXRjaC5nZXQodCkKLSAgICAgICAgaWYgZjoKKyAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGYoc2VsZiwgb2JqKSAjIENhbGwgdW5ib3VuZCBtZXRob2Qgd2l0aCBleHBsaWNpdCBzZWxmCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIENoZWNrIHByaXZhdGUgZGlzcGF0Y2ggdGFibGUgaWYgYW55LCBvciBlbHNlIGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKICAgICAgICAgcmVkdWNlID0gZ2V0YXR0cihzZWxmLCAnZGlzcGF0Y2hfdGFibGUnLCBkaXNwYXRjaF90YWJsZSkuZ2V0KHQpCi0gICAgICAgIGlmIHJlZHVjZToKKyAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcnYgPSByZWR1Y2Uob2JqKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBjbGFzcyB3aXRoIGEgY3VzdG9tIG1ldGFjbGFzczsgdHJlYXQgYXMgcmVndWxhciBjbGFzcwpAQCAtMzEzLDExICs0OTMsMTEgQEAKIAogICAgICAgICAgICAgIyBDaGVjayBmb3IgYSBfX3JlZHVjZV9leF9fIG1ldGhvZCwgZmFsbCBiYWNrIHRvIF9fcmVkdWNlX18KICAgICAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIob2JqLCAiX19yZWR1Y2VfZXhfXyIsIE5vbmUpCi0gICAgICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgICAgICBpZiByZWR1Y2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y2Uoc2VsZi5wcm90bykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVkdWNlID0gZ2V0YXR0cihvYmosICJfX3JlZHVjZV9fIiwgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgICAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBydiA9IHJlZHVjZSgpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiQ2FuJ3QgcGlja2xlICVyIG9iamVjdDogJXIiICUKQEAgLTM1MywyNCArNTMzLDMzIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLndyaXRlKFBFUlNJRCArIHN0cihwaWQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4nKQogCi0gICAgZGVmIHNhdmVfcmVkdWNlKHNlbGYsIGZ1bmMsIGFyZ3MsIHN0YXRlPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGxpc3RpdGVtcz1Ob25lLCBkaWN0aXRlbXM9Tm9uZSwgb2JqPU5vbmUpOgorICAgIGRlZiBzYXZlX3JlZHVjZShzZWxmLCBmdW5jLCBhcmdzLCBzdGF0ZT1Ob25lLCBsaXN0aXRlbXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgZGljdGl0ZW1zPU5vbmUsIG9iaj1Ob25lKToKICAgICAgICAgIyBUaGlzIEFQSSBpcyBjYWxsZWQgYnkgc29tZSBzdWJjbGFzc2VzCiAKLSAgICAgICAgIyBBc3NlcnQgdGhhdCBhcmdzIGlzIGEgdHVwbGUKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJncywgdHVwbGUpOgotICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJncyBmcm9tIHNhdmVfcmVkdWNlKCkgc2hvdWxkIGJlIGEgdHVwbGUiKQotCi0gICAgICAgICMgQXNzZXJ0IHRoYXQgZnVuYyBpcyBjYWxsYWJsZQorICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJncyBmcm9tIHNhdmVfcmVkdWNlKCkgbXVzdCBiZSBhIHR1cGxlIikKICAgICAgICAgaWYgbm90IGNhbGxhYmxlKGZ1bmMpOgotICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiZnVuYyBmcm9tIHNhdmVfcmVkdWNlKCkgc2hvdWxkIGJlIGNhbGxhYmxlIikKKyAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImZ1bmMgZnJvbSBzYXZlX3JlZHVjZSgpIG11c3QgYmUgY2FsbGFibGUiKQogCiAgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKICAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCiAKLSAgICAgICAgIyBQcm90b2NvbCAyIHNwZWNpYWwgY2FzZTogaWYgZnVuYydzIG5hbWUgaXMgX19uZXdvYmpfXywgdXNlIE5FV09CSgotICAgICAgICBpZiBzZWxmLnByb3RvID49IDIgYW5kIGdldGF0dHIoZnVuYywgIl9fbmFtZV9fIiwgIiIpID09ICJfX25ld29ial9fIjoKLSAgICAgICAgICAgICMgQSBfX3JlZHVjZV9fIGltcGxlbWVudGF0aW9uIGNhbiBkaXJlY3QgcHJvdG9jb2wgMiB0bworICAgICAgICBmdW5jX25hbWUgPSBnZXRhdHRyKGZ1bmMsICJfX25hbWVfXyIsICIiKQorICAgICAgICBpZiBzZWxmLnByb3RvID49IDQgYW5kIGZ1bmNfbmFtZSA9PSAiX19uZXdvYmpfZXhfXyI6CisgICAgICAgICAgICBjbHMsIGFyZ3MsIGt3YXJncyA9IGFyZ3MKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNscywgIl9fbmV3X18iKToKKyAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzWzBdIGZyb20ge30gYXJncyBoYXMgbm8gX19uZXdfXyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuY19uYW1lKSkKKyAgICAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgY2xzIGlzIG5vdCBvYmouX19jbGFzc19fOgorICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3NbMF0gZnJvbSB7fSBhcmdzIGhhcyB0aGUgd3JvbmcgY2xhc3MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmNfbmFtZSkpCisgICAgICAgICAgICBzYXZlKGNscykKKyAgICAgICAgICAgIHNhdmUoYXJncykKKyAgICAgICAgICAgIHNhdmUoa3dhcmdzKQorICAgICAgICAgICAgd3JpdGUoTkVXT0JKX0VYKQorICAgICAgICBlbGlmIHNlbGYucHJvdG8gPj0gMiBhbmQgZnVuY19uYW1lID09ICJfX25ld29ial9fIjoKKyAgICAgICAgICAgICMgQSBfX3JlZHVjZV9fIGltcGxlbWVudGF0aW9uIGNhbiBkaXJlY3QgcHJvdG9jb2wgMiBvciBuZXdlciB0bwogICAgICAgICAgICAgIyB1c2UgdGhlIG1vcmUgZWZmaWNpZW50IE5FV09CSiBvcGNvZGUsIHdoaWxlIHN0aWxsCiAgICAgICAgICAgICAjIGFsbG93aW5nIHByb3RvY29sIDAgYW5kIDEgdG8gd29yayBub3JtYWxseS4gIEZvciB0aGlzIHRvCiAgICAgICAgICAgICAjIHdvcmssIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSBfX3JlZHVjZV9fIHNob3VsZCBiZQpAQCAtNDEzLDcgKzYwMiwxMyBAQAogICAgICAgICAgICAgd3JpdGUoUkVEVUNFKQogCiAgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisgICAgICAgICAgICAjIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICAgIyByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgICMgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4KKyAgICAgICAgICAgIGlmIGlkKG9iaikgaW4gc2VsZi5tZW1vOgorICAgICAgICAgICAgICAgIHdyaXRlKFBPUCArIHNlbGYuZ2V0KHNlbGYubWVtb1tpZChvYmopXVswXSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICAgICAgIyBNb3JlIG5ldyBzcGVjaWFsIGNhc2VzICh0aGF0IHdvcmsgd2l0aCBvbGRlciBwcm90b2NvbHMgYXMKICAgICAgICAgIyB3ZWxsKTogd2hlbiBfX3JlZHVjZV9fIHJldHVybnMgYSB0dXBsZSB3aXRoIDQgb3IgNSBpdGVtcywKQEAgLTQzOCwyMiArNjMzLDE0IEBACiAgICAgICAgIHNlbGYud3JpdGUoTk9ORSkKICAgICBkaXNwYXRjaFt0eXBlKE5vbmUpXSA9IHNhdmVfbm9uZQogCi0gICAgZGVmIHNhdmVfZWxsaXBzaXMoc2VsZiwgb2JqKToKLSAgICAgICAgc2VsZi5zYXZlX2dsb2JhbChFbGxpcHNpcywgJ0VsbGlwc2lzJykKLSAgICBkaXNwYXRjaFt0eXBlKEVsbGlwc2lzKV0gPSBzYXZlX2VsbGlwc2lzCi0KLSAgICBkZWYgc2F2ZV9ub3RpbXBsZW1lbnRlZChzZWxmLCBvYmopOgotICAgICAgICBzZWxmLnNhdmVfZ2xvYmFsKE5vdEltcGxlbWVudGVkLCAnTm90SW1wbGVtZW50ZWQnKQotICAgIGRpc3BhdGNoW3R5cGUoTm90SW1wbGVtZW50ZWQpXSA9IHNhdmVfbm90aW1wbGVtZW50ZWQKLQogICAgIGRlZiBzYXZlX2Jvb2woc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgc2VsZi53cml0ZShvYmogYW5kIE5FV1RSVUUgb3IgTkVXRkFMU0UpCisgICAgICAgICAgICBzZWxmLndyaXRlKE5FV1RSVUUgaWYgb2JqIGVsc2UgTkVXRkFMU0UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKG9iaiBhbmQgVFJVRSBvciBGQUxTRSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoVFJVRSBpZiBvYmogZWxzZSBGQUxTRSkKICAgICBkaXNwYXRjaFtib29sXSA9IHNhdmVfYm9vbAogCi0gICAgZGVmIHNhdmVfbG9uZyhzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2xvbmcoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICAjIElmIHRoZSBpbnQgaXMgc21hbGwgZW5vdWdoIHRvIGZpdCBpbiBhIHNpZ25lZCA0LWJ5dGUgMidzLWNvbXAKICAgICAgICAgICAgICMgZm9ybWF0LCB3ZSBjYW4gc3RvcmUgaXQgbW9yZSBlZmZpY2llbnRseSB0aGFuIHRoZSBnZW5lcmFsCkBAIC00NjEsOTMgKzY0OCw5NSBAQAogICAgICAgICAgICAgIyBGaXJzdCBvbmUtIGFuZCB0d28tYnl0ZSB1bnNpZ25lZCBpbnRzOgogICAgICAgICAgICAgaWYgb2JqID49IDA6CiAgICAgICAgICAgICAgICAgaWYgb2JqIDw9IDB4ZmY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMSArIGJ5dGVzKFtvYmpdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQxICsgcGFjaygiPEIiLCBvYmopKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBpZiBvYmogPD0gMHhmZmZmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDIgKyBieXRlcyhbb2JqJjB4ZmYsIG9iaj4+OF0pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDIgKyBwYWNrKCI8SCIsIG9iaikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgIyBOZXh0IGNoZWNrIGZvciA0LWJ5dGUgc2lnbmVkIGludHM6Ci0gICAgICAgICAgICBoaWdoX2JpdHMgPSBvYmogPj4gMzEgICMgbm90ZSB0aGF0IFB5dGhvbiBzaGlmdCBzaWduLWV4dGVuZHMKLSAgICAgICAgICAgIGlmIGhpZ2hfYml0cyA9PSAwIG9yIGhpZ2hfYml0cyA9PSAtMToKLSAgICAgICAgICAgICAgICAjIEFsbCBoaWdoIGJpdHMgYXJlIGNvcGllcyBvZiBiaXQgMioqMzEsIHNvIHRoZSB2YWx1ZQotICAgICAgICAgICAgICAgICMgZml0cyBpbiBhIDQtYnl0ZSBzaWduZWQgaW50LgorICAgICAgICAgICAgaWYgLTB4ODAwMDAwMDAgPD0gb2JqIDw9IDB4N2ZmZmZmZmY6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQgKyBwYWNrKCI8aSIsIG9iaikpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKICAgICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVfbG9uZyhvYmopCiAgICAgICAgICAgICBuID0gbGVuKGVuY29kZWQpCiAgICAgICAgICAgICBpZiBuIDwgMjU2OgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzEgKyBieXRlcyhbbl0pICsgZW5jb2RlZCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkcxICsgcGFjaygiPEIiLCBuKSArIGVuY29kZWQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTE9ORzQgKyBwYWNrKCI8aSIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLndyaXRlKExPTkcgKyByZXByKG9iaikuZW5jb2RlKCJhc2NpaSIpICsgYidMXG4nKQogICAgIGRpc3BhdGNoW2ludF0gPSBzYXZlX2xvbmcKIAotICAgIGRlZiBzYXZlX2Zsb2F0KHNlbGYsIG9iaiwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfZmxvYXQoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkZMT0FUICsgcGFjaygnPmQnLCBvYmopKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi53cml0ZShGTE9BVCArIHJlcHIob2JqKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJykKICAgICBkaXNwYXRjaFtmbG9hdF0gPSBzYXZlX2Zsb2F0CiAKLSAgICBkZWYgc2F2ZV9ieXRlcyhzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2J5dGVzKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYucHJvdG8gPCAzOgotICAgICAgICAgICAgaWYgbGVuKG9iaikgPT0gMDoKKyAgICAgICAgICAgIGlmIG5vdCBvYmo6ICMgYnl0ZXMgb2JqZWN0IGlzIGVtcHR5CiAgICAgICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShieXRlcywgKCksIG9iaj1vYmopCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoY29kZWNzLmVuY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHIob2JqLCAnbGF0aW4xJyksICdsYXRpbjEnKSwgb2JqPW9iaikKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBuID0gbGVuKG9iaikKLSAgICAgICAgaWYgbiA8IDI1NjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBieXRlcyhbbl0pICsgYnl0ZXMob2JqKSkKKyAgICAgICAgaWYgbiA8PSAweGZmOgorICAgICAgICAgICAgc2VsZi53cml0ZShTSE9SVF9CSU5CWVRFUyArIHBhY2soIjxCIiwgbikgKyBvYmopCisgICAgICAgIGVsaWYgbiA+IDB4ZmZmZmZmZmYgYW5kIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoQklOQllURVM4ICsgcGFjaygiPFEiLCBuKSArIG9iaikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud3JpdGUoQklOQllURVMgKyBwYWNrKCI8SSIsIG4pICsgYnl0ZXMob2JqKSkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoQklOQllURVMgKyBwYWNrKCI8SSIsIG4pICsgb2JqKQogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgIGRpc3BhdGNoW2J5dGVzXSA9IHNhdmVfYnl0ZXMKIAotICAgIGRlZiBzYXZlX3N0cihzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX3N0cihzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIGVuY29kZWQgPSBvYmouZW5jb2RlKCd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKICAgICAgICAgICAgIG4gPSBsZW4oZW5jb2RlZCkKLSAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERSArIHBhY2soIjxJIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgaWYgbiA8PSAweGZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShTSE9SVF9CSU5VTklDT0RFICsgcGFjaygiPEIiLCBuKSArIGVuY29kZWQpCisgICAgICAgICAgICBlbGlmIG4gPiAweGZmZmZmZmZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFOCArIHBhY2soIjxRIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREUgKyBwYWNrKCI8SSIsIG4pICsgZW5jb2RlZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlKCJcXCIsICJcXHUwMDVjIikKICAgICAgICAgICAgIG9iaiA9IG9iai5yZXBsYWNlKCJcbiIsICJcXHUwMDBhIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoVU5JQ09ERSArIGJ5dGVzKG9iai5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpKSArCisgICAgICAgICAgICBzZWxmLndyaXRlKFVOSUNPREUgKyBvYmouZW5jb2RlKCdyYXctdW5pY29kZS1lc2NhcGUnKSArCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4nKQogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgIGRpc3BhdGNoW3N0cl0gPSBzYXZlX3N0cgogCiAgICAgZGVmIHNhdmVfdHVwbGUoc2VsZiwgb2JqKToKLSAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCi0gICAgICAgIHByb3RvID0gc2VsZi5wcm90bwotCi0gICAgICAgIG4gPSBsZW4ob2JqKQotICAgICAgICBpZiBuID09IDA6Ci0gICAgICAgICAgICBpZiBwcm90bzoKLSAgICAgICAgICAgICAgICB3cml0ZShFTVBUWV9UVVBMRSkKKyAgICAgICAgaWYgbm90IG9iajogIyB0dXBsZSBpcyBlbXB0eQorICAgICAgICAgICAgaWYgc2VsZi5iaW46CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShFTVBUWV9UVVBMRSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd3JpdGUoTUFSSyArIFRVUExFKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIFRVUExFKQogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbiA9IGxlbihvYmopCiAgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKICAgICAgICAgbWVtbyA9IHNlbGYubWVtbwotICAgICAgICBpZiBuIDw9IDMgYW5kIHByb3RvID49IDI6CisgICAgICAgIGlmIG4gPD0gMyBhbmQgc2VsZi5wcm90byA+PSAyOgogICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqOgogICAgICAgICAgICAgICAgIHNhdmUoZWxlbWVudCkKICAgICAgICAgICAgICMgU3VidGxlLiAgU2FtZSBhcyBpbiB0aGUgYmlnIGNvbW1lbnQgYmVsb3cuCiAgICAgICAgICAgICBpZiBpZChvYmopIGluIG1lbW86CiAgICAgICAgICAgICAgICAgZ2V0ID0gc2VsZi5nZXQobWVtb1tpZChvYmopXVswXSkKLSAgICAgICAgICAgICAgICB3cml0ZShQT1AgKiBuICsgZ2V0KQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoUE9QICogbiArIGdldCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd3JpdGUoX3R1cGxlc2l6ZTJjb2RlW25dKQorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoX3R1cGxlc2l6ZTJjb2RlW25dKQogICAgICAgICAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIHByb3RvIDAgb3IgcHJvdG8gMSBhbmQgdHVwbGUgaXNuJ3QgZW1wdHksIG9yIHByb3RvID4gMSBhbmQgdHVwbGUKICAgICAgICAgIyBoYXMgbW9yZSB0aGFuIDMgZWxlbWVudHMuCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogICAgICAgICB3cml0ZShNQVJLKQogICAgICAgICBmb3IgZWxlbWVudCBpbiBvYmo6CiAgICAgICAgICAgICBzYXZlKGVsZW1lbnQpCkBAIC01NjEsMjUgKzc1MCwyMyBAQAogICAgICAgICAgICAgIyBjb3VsZCBoYXZlIGJlZW4gZG9uZSBpbiB0aGUgImZvciBlbGVtZW50IiBsb29wIGluc3RlYWQsIGJ1dAogICAgICAgICAgICAgIyByZWN1cnNpdmUgdHVwbGVzIGFyZSBhIHJhcmUgdGhpbmcuCiAgICAgICAgICAgICBnZXQgPSBzZWxmLmdldChtZW1vW2lkKG9iaildWzBdKQotICAgICAgICAgICAgaWYgcHJvdG86CisgICAgICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgICAgICB3cml0ZShQT1BfTUFSSyArIGdldCkKICAgICAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIFBPUF9NQVJLIG5vdCBhdmFpbGFibGUKICAgICAgICAgICAgICAgICB3cml0ZShQT1AgKiAobisxKSArIGdldCkKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgTm8gcmVjdXJzaW9uLgotICAgICAgICBzZWxmLndyaXRlKFRVUExFKQorICAgICAgICB3cml0ZShUVVBMRSkKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKIAogICAgIGRpc3BhdGNoW3R1cGxlXSA9IHNhdmVfdHVwbGUKIAogICAgIGRlZiBzYXZlX2xpc3Qoc2VsZiwgb2JqKToKLSAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCi0KICAgICAgICAgaWYgc2VsZi5iaW46Ci0gICAgICAgICAgICB3cml0ZShFTVBUWV9MSVNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShFTVBUWV9MSVNUKQogICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBjYW4ndCB1c2UgRU1QVFlfTElTVAotICAgICAgICAgICAgd3JpdGUoTUFSSyArIExJU1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBMSVNUKQogCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAgICAgICAgIHNlbGYuX2JhdGNoX2FwcGVuZHMob2JqKQpAQCAtNTk5LDE3ICs3ODYsOSBAQAogICAgICAgICAgICAgICAgIHdyaXRlKEFQUEVORCkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGl0ZW1zID0gaXRlcihpdGVtcykKLSAgICAgICAgciA9IHJhbmdlKHNlbGYuX0JBVENIU0laRSkKLSAgICAgICAgd2hpbGUgaXRlbXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0bXAgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHggPSBuZXh0KGl0ZW1zKQotICAgICAgICAgICAgICAgICAgICB0bXAuYXBwZW5kKHgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0bXAgPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKICAgICAgICAgICAgIG4gPSBsZW4odG1wKQogICAgICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKQEAgLTYyMCwxNCArNzk5LDE0IEBACiAgICAgICAgICAgICAgICAgc2F2ZSh0bXBbMF0pCiAgICAgICAgICAgICAgICAgd3JpdGUoQVBQRU5EKQogICAgICAgICAgICAgIyBlbHNlIHRtcCBpcyBlbXB0eSwgYW5kIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgc2F2ZV9kaWN0KHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotCiAgICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgd3JpdGUoRU1QVFlfRElDVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfRElDVCkKICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gY2FuJ3QgdXNlIEVNUFRZX0RJQ1QKLSAgICAgICAgICAgIHdyaXRlKE1BUksgKyBESUNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgRElDVCkKIAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICBzZWxmLl9iYXRjaF9zZXRpdGVtcyhvYmouaXRlbXMoKSkKQEAgLTY0OCwxNiArODI3LDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZShTRVRJVEVNKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaXRlbXMgPSBpdGVyKGl0ZW1zKQotICAgICAgICByID0gcmFuZ2Uoc2VsZi5fQkFUQ0hTSVpFKQotICAgICAgICB3aGlsZSBpdGVtcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRtcCA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiByOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZChuZXh0KGl0ZW1zKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgaXRlbXMgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGl0ID0gaXRlcihpdGVtcykKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRtcCA9IGxpc3QoaXNsaWNlKGl0LCBzZWxmLl9CQVRDSFNJWkUpKQogICAgICAgICAgICAgbiA9IGxlbih0bXApCiAgICAgICAgICAgICBpZiBuID4gMToKICAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQpAQCAtNjcxLDU1ICs4NDMsMTA5IEBACiAgICAgICAgICAgICAgICAgc2F2ZSh2KQogICAgICAgICAgICAgICAgIHdyaXRlKFNFVElURU0pCiAgICAgICAgICAgICAjIGVsc2UgdG1wIGlzIGVtcHR5LCBhbmQgd2UncmUgZG9uZQorICAgICAgICAgICAgaWYgbiA8IHNlbGYuX0JBVENIU0laRToKKyAgICAgICAgICAgICAgICByZXR1cm4KIAotICAgIGRlZiBzYXZlX2dsb2JhbChzZWxmLCBvYmosIG5hbWU9Tm9uZSwgcGFjaz1zdHJ1Y3QucGFjayk6CisgICAgZGVmIHNhdmVfc2V0KHNlbGYsIG9iaik6CisgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCisKKyAgICAgICAgaWYgc2VsZi5wcm90byA8IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKHNldCwgKGxpc3Qob2JqKSwpLCBvYmo9b2JqKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoRU1QVFlfU0VUKQorICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorCisgICAgICAgIGl0ID0gaXRlcihvYmopCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBiYXRjaCA9IGxpc3QoaXNsaWNlKGl0LCBzZWxmLl9CQVRDSFNJWkUpKQorICAgICAgICAgICAgbiA9IGxlbihiYXRjaCkKKyAgICAgICAgICAgIGlmIG4gPiAwOgorICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCisgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gYmF0Y2g6CisgICAgICAgICAgICAgICAgICAgIHNhdmUoaXRlbSkKKyAgICAgICAgICAgICAgICB3cml0ZShBRERJVEVNUykKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgZGlzcGF0Y2hbc2V0XSA9IHNhdmVfc2V0CisKKyAgICBkZWYgc2F2ZV9mcm96ZW5zZXQoc2VsZiwgb2JqKToKKyAgICAgICAgc2F2ZSA9IHNlbGYuc2F2ZQorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKKworICAgICAgICBpZiBzZWxmLnByb3RvIDwgNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoZnJvemVuc2V0LCAobGlzdChvYmopLCksIG9iaj1vYmopCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShNQVJLKQorICAgICAgICBmb3IgaXRlbSBpbiBvYmo6CisgICAgICAgICAgICBzYXZlKGl0ZW0pCisKKyAgICAgICAgaWYgaWQob2JqKSBpbiBzZWxmLm1lbW86CisgICAgICAgICAgICAjIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBpbiB0aGUgbWVtbywgdGhpcyBtZWFucyBpdCBpcworICAgICAgICAgICAgIyByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICAgICAgICMgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4KKyAgICAgICAgICAgIHdyaXRlKFBPUF9NQVJLICsgc2VsZi5nZXQoc2VsZi5tZW1vW2lkKG9iaildWzBdKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKEZST1pFTlNFVCkKKyAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKyAgICBkaXNwYXRjaFtmcm96ZW5zZXRdID0gc2F2ZV9mcm96ZW5zZXQKKworICAgIGRlZiBzYXZlX2dsb2JhbChzZWxmLCBvYmosIG5hbWU9Tm9uZSk6CiAgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogICAgICAgICBtZW1vID0gc2VsZi5tZW1vCiAKKyAgICAgICAgaWYgbmFtZSBpcyBOb25lIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBuYW1lID0gZ2V0YXR0cihvYmosICdfX3F1YWxuYW1lX18nLCBOb25lKQogICAgICAgICBpZiBuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBuYW1lID0gb2JqLl9fbmFtZV9fCiAKLSAgICAgICAgbW9kdWxlID0gZ2V0YXR0cihvYmosICJfX21vZHVsZV9fIiwgTm9uZSkKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBtb2R1bGUgPSB3aGljaG1vZHVsZShvYmosIG5hbWUpCi0KKyAgICAgICAgbW9kdWxlX25hbWUgPSB3aGljaG1vZHVsZShvYmosIG5hbWUsIGFsbG93X3F1YWxuYW1lPXNlbGYucHJvdG8gPj0gNCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUsIGxldmVsPTApCi0gICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2R1bGVdCi0gICAgICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kLCBuYW1lKQorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgbGV2ZWw9MCkKKyAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQorICAgICAgICAgICAgb2JqMiA9IF9nZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEtleUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKAogICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJXI6IGl0J3Mgbm90IGZvdW5kIGFzICVzLiVzIiAlCi0gICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGVfbmFtZSwgbmFtZSkpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBrbGFzcyBpcyBub3Qgb2JqOgorICAgICAgICAgICAgaWYgb2JqMiBpcyBub3Qgb2JqOgogICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJXI6IGl0J3Mgbm90IHRoZSBzYW1lIG9iamVjdCBhcyAlcy4lcyIgJQotICAgICAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGUsIG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAob2JqLCBtb2R1bGVfbmFtZSwgbmFtZSkpCiAKICAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyOgotICAgICAgICAgICAgY29kZSA9IF9leHRlbnNpb25fcmVnaXN0cnkuZ2V0KChtb2R1bGUsIG5hbWUpKQorICAgICAgICAgICAgY29kZSA9IF9leHRlbnNpb25fcmVnaXN0cnkuZ2V0KChtb2R1bGVfbmFtZSwgbmFtZSkpCiAgICAgICAgICAgICBpZiBjb2RlOgogICAgICAgICAgICAgICAgIGFzc2VydCBjb2RlID4gMAogICAgICAgICAgICAgICAgIGlmIGNvZGUgPD0gMHhmZjoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGUoRVhUMSArIGJ5dGVzKFtjb2RlXSkpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDEgKyBwYWNrKCI8QiIsIGNvZGUpKQogICAgICAgICAgICAgICAgIGVsaWYgY29kZSA8PSAweGZmZmY6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDIgKyBieXRlcyhbY29kZSYweGZmLCBjb2RlPj44XSkpCisgICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDIgKyBwYWNrKCI8SCIsIGNvZGUpKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDQgKyBwYWNrKCI8aSIsIGNvZGUpKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIE5vbi1BU0NJSSBpZGVudGlmaWVycyBhcmUgc3VwcG9ydGVkIG9ubHkgd2l0aCBwcm90b2NvbHMgPj0gMy4KLSAgICAgICAgaWYgc2VsZi5wcm90byA+PSAzOgotICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlLCAidXRmLTgiKSArIGInXG4nICsKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgc2VsZi5zYXZlKG1vZHVsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5zYXZlKG5hbWUpCisgICAgICAgICAgICB3cml0ZShTVEFDS19HTE9CQUwpCisgICAgICAgIGVsaWYgc2VsZi5wcm90byA+PSAzOgorICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlX25hbWUsICJ1dGYtOCIpICsgYidcbicgKwogICAgICAgICAgICAgICAgICAgYnl0ZXMobmFtZSwgInV0Zi04IikgKyBiJ1xuJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHNlbGYuZml4X2ltcG9ydHM6Ci0gICAgICAgICAgICAgICAgaWYgKG1vZHVsZSwgbmFtZSkgaW4gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkc6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgbmFtZSA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HWyhtb2R1bGUsIG5hbWUpXQotICAgICAgICAgICAgICAgIGlmIG1vZHVsZSBpbiBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HW21vZHVsZV0KKyAgICAgICAgICAgICAgICByX25hbWVfbWFwcGluZyA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HCisgICAgICAgICAgICAgICAgcl9pbXBvcnRfbWFwcGluZyA9IF9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcKKyAgICAgICAgICAgICAgICBpZiAobW9kdWxlX25hbWUsIG5hbWUpIGluIHJfbmFtZV9tYXBwaW5nOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSwgbmFtZSA9IHJfbmFtZV9tYXBwaW5nWyhtb2R1bGVfbmFtZSwgbmFtZSldCisgICAgICAgICAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gcl9pbXBvcnRfbWFwcGluZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSByX2ltcG9ydF9tYXBwaW5nW21vZHVsZV9uYW1lXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZSwgImFzY2lpIikgKyBiJ1xuJyArCisgICAgICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlX25hbWUsICJhc2NpaSIpICsgYidcbicgKwogICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJhc2NpaSIpICsgYidcbicpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCkBAIC03MzgsNTggKzk2NCw4IEBACiAgICAgICAgIHJldHVybiBzZWxmLnNhdmVfZ2xvYmFsKG9iaikKIAogICAgIGRpc3BhdGNoW0Z1bmN0aW9uVHlwZV0gPSBzYXZlX2dsb2JhbAotICAgIGRpc3BhdGNoW0J1aWx0aW5GdW5jdGlvblR5cGVdID0gc2F2ZV9nbG9iYWwKICAgICBkaXNwYXRjaFt0eXBlXSA9IHNhdmVfdHlwZQogCi0jIFBpY2tsaW5nIGhlbHBlcnMKLQotZGVmIF9rZWVwX2FsaXZlKHgsIG1lbW8pOgotICAgICIiIktlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgeCBpbiB0aGUgbWVtby4KLQotICAgIEJlY2F1c2Ugd2UgcmVtZW1iZXIgb2JqZWN0cyBieSB0aGVpciBpZCwgd2UgaGF2ZQotICAgIHRvIGFzc3VyZSB0aGF0IHBvc3NpYmx5IHRlbXBvcmFyeSBvYmplY3RzIGFyZSBrZXB0Ci0gICAgYWxpdmUgYnkgcmVmZXJlbmNpbmcgdGhlbS4KLSAgICBXZSBzdG9yZSBhIHJlZmVyZW5jZSBhdCB0aGUgaWQgb2YgdGhlIG1lbW8sIHdoaWNoIHNob3VsZAotICAgIG5vcm1hbGx5IG5vdCBiZSB1c2VkIHVubGVzcyBzb21lb25lIHRyaWVzIHRvIGRlZXBjb3B5Ci0gICAgdGhlIG1lbW8gaXRzZWxmLi4uCi0gICAgIiIiCi0gICAgdHJ5OgotICAgICAgICBtZW1vW2lkKG1lbW8pXS5hcHBlbmQoeCkKLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICMgYWhhLCB0aGlzIGlzIHRoZSBmaXJzdCBvbmUgOi0pCi0gICAgICAgIG1lbW9baWQobWVtbyldPVt4XQotCi0KLSMgQSBjYWNoZSBmb3Igd2hpY2htb2R1bGUoKSwgbWFwcGluZyBhIGZ1bmN0aW9uIG9iamVjdCB0byB0aGUgbmFtZSBvZgotIyB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZm91bmQuCi0KLWNsYXNzbWFwID0ge30gIyBjYWxsZWQgY2xhc3NtYXAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0KLWRlZiB3aGljaG1vZHVsZShmdW5jLCBmdW5jbmFtZSk6Ci0gICAgIiIiRmlndXJlIG91dCB0aGUgbW9kdWxlIGluIHdoaWNoIGEgZnVuY3Rpb24gb2NjdXJzLgotCi0gICAgU2VhcmNoIHN5cy5tb2R1bGVzIGZvciB0aGUgbW9kdWxlLgotICAgIENhY2hlIGluIGNsYXNzbWFwLgotICAgIFJldHVybiBhIG1vZHVsZSBuYW1lLgotICAgIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgZm91bmQsIHJldHVybiAiX19tYWluX18iLgotICAgICIiIgotICAgICMgUHl0aG9uIGZ1bmN0aW9ucyBzaG91bGQgYWx3YXlzIGdldCBhbiBfX21vZHVsZV9fIGZyb20gdGhlaXIgZ2xvYmFscy4KLSAgICBtb2QgPSBnZXRhdHRyKGZ1bmMsICJfX21vZHVsZV9fIiwgTm9uZSkKLSAgICBpZiBtb2QgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBtb2QKLSAgICBpZiBmdW5jIGluIGNsYXNzbWFwOgotICAgICAgICByZXR1cm4gY2xhc3NtYXBbZnVuY10KLQotICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gbGlzdChzeXMubW9kdWxlcy5pdGVtcygpKToKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250aW51ZSAjIHNraXAgZHVtbXkgcGFja2FnZSBlbnRyaWVzCi0gICAgICAgIGlmIG5hbWUgIT0gJ19fbWFpbl9fJyBhbmQgZ2V0YXR0cihtb2R1bGUsIGZ1bmNuYW1lLCBOb25lKSBpcyBmdW5jOgotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICBuYW1lID0gJ19fbWFpbl9fJwotICAgIGNsYXNzbWFwW2Z1bmNdID0gbmFtZQotICAgIHJldHVybiBuYW1lCi0KIAogIyBVbnBpY2tsaW5nIG1hY2hpbmVyeQogCkBAIC04MTcsOCArOTkzLDggQEAKICAgICAgICAgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZAogICAgICAgICAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IGZpbGUucmVhZGxpbmUKLSAgICAgICAgc2VsZi5yZWFkID0gZmlsZS5yZWFkCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZGxpbmUgPSBmaWxlLnJlYWRsaW5lCisgICAgICAgIHNlbGYuX2ZpbGVfcmVhZCA9IGZpbGUucmVhZAogICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKICAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKQEAgLTgzMiwxNiArMTAwOCwyMCBAQAogICAgICAgICAiIiIKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIFVucGlja2xlciB3YXMgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LiBUaGlzIGlzCiAgICAgICAgICMgb25seSBuZWVkZWQgdG8gbWltaWMgdGhlIGJlaGF2aW9yIG9mIF9waWNrbGUuVW5waWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgInJlYWQiKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9maWxlX3JlYWQiKToKICAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiVW5waWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy5fX2luaXRfXygpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpKQorICAgICAgICBzZWxmLl91bmZyYW1lciA9IF9VbmZyYW1lcihzZWxmLl9maWxlX3JlYWQsIHNlbGYuX2ZpbGVfcmVhZGxpbmUpCisgICAgICAgIHNlbGYucmVhZCA9IHNlbGYuX3VuZnJhbWVyLnJlYWQKKyAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuX3VuZnJhbWVyLnJlYWRsaW5lCiAgICAgICAgIHNlbGYubWFyayA9IG9iamVjdCgpICMgYW55IG5ldyB1bmlxdWUgb2JqZWN0CiAgICAgICAgIHNlbGYuc3RhY2sgPSBbXQogICAgICAgICBzZWxmLmFwcGVuZCA9IHNlbGYuc3RhY2suYXBwZW5kCisgICAgICAgIHNlbGYucHJvdG8gPSAwCiAgICAgICAgIHJlYWQgPSBzZWxmLnJlYWQKICAgICAgICAgZGlzcGF0Y2ggPSBzZWxmLmRpc3BhdGNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGtleSA9IHJlYWQoMSkKICAgICAgICAgICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtODcxLDEyICsxMDUxLDE5IEBACiAgICAgZGlzcGF0Y2ggPSB7fQogCiAgICAgZGVmIGxvYWRfcHJvdG8oc2VsZik6Ci0gICAgICAgIHByb3RvID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgcHJvdG8gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgaWYgbm90IDAgPD0gcHJvdG8gPD0gSElHSEVTVF9QUk9UT0NPTDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbDogJWQiICUgcHJvdG8pCiAgICAgICAgIHNlbGYucHJvdG8gPSBwcm90bwogICAgIGRpc3BhdGNoW1BST1RPWzBdXSA9IGxvYWRfcHJvdG8KIAorICAgIGRlZiBsb2FkX2ZyYW1lKHNlbGYpOgorICAgICAgICBmcmFtZV9zaXplLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGZyYW1lX3NpemUgPiBzeXMubWF4c2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZyYW1lIHNpemUgPiBzeXMubWF4c2l6ZTogJWQiICUgZnJhbWVfc2l6ZSkKKyAgICAgICAgc2VsZi5fdW5mcmFtZXIubG9hZF9mcmFtZShmcmFtZV9zaXplKQorICAgIGRpc3BhdGNoW0ZSQU1FWzBdXSA9IGxvYWRfZnJhbWUKKwogICAgIGRlZiBsb2FkX3BlcnNpZChzZWxmKToKICAgICAgICAgcGlkID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucGVyc2lzdGVudF9sb2FkKHBpZCkpCkBAIC05MDYsNDMgKzEwOTMsNDAgQEAKICAgICAgICAgZWxpZiBkYXRhID09IFRSVUVbMTpdOgogICAgICAgICAgICAgdmFsID0gVHJ1ZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCisgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKICAgICAgICAgc2VsZi5hcHBlbmQodmFsKQogICAgIGRpc3BhdGNoW0lOVFswXV0gPSBsb2FkX2ludAogCiAgICAgZGVmIGxvYWRfYmluaW50KHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVFswXV0gPSBsb2FkX2JpbmludAogCiAgICAgZGVmIGxvYWRfYmluaW50MShzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQob3JkKHNlbGYucmVhZCgxKSkpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZCgxKVswXSkKICAgICBkaXNwYXRjaFtCSU5JTlQxWzBdXSA9IGxvYWRfYmluaW50MQogCiAgICAgZGVmIGxvYWRfYmluaW50MihzZWxmKToKLSAgICAgICAgc2VsZi5hcHBlbmQobWxvYWRzKGInaScgKyBzZWxmLnJlYWQoMikgKyBiJ1wwMDBcMDAwJykpCisgICAgICAgIHNlbGYuYXBwZW5kKHVucGFjaygnPEgnLCBzZWxmLnJlYWQoMikpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDJbMF1dID0gbG9hZF9iaW5pbnQyCiAKICAgICBkZWYgbG9hZF9sb25nKHNlbGYpOgotICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09ICdMJzoKKyAgICAgICAgdmFsID0gc2VsZi5yZWFkbGluZSgpWzotMV0KKyAgICAgICAgaWYgdmFsIGFuZCB2YWxbLTFdID09IGInTCdbMF06CiAgICAgICAgICAgICB2YWwgPSB2YWxbOi0xXQogICAgICAgICBzZWxmLmFwcGVuZChpbnQodmFsLCAwKSkKICAgICBkaXNwYXRjaFtMT05HWzBdXSA9IGxvYWRfbG9uZwogCiAgICAgZGVmIGxvYWRfbG9uZzEoc2VsZik6Ci0gICAgICAgIG4gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBuID0gc2VsZi5yZWFkKDEpWzBdCiAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobikKICAgICAgICAgc2VsZi5hcHBlbmQoZGVjb2RlX2xvbmcoZGF0YSkpCiAgICAgZGlzcGF0Y2hbTE9ORzFbMF1dID0gbG9hZF9sb25nMQogCiAgICAgZGVmIGxvYWRfbG9uZzQoc2VsZik6Ci0gICAgICAgIG4gPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBuIDwgMDoKICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzCi0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkxPTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50IikKICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HNFswXV0gPSBsb2FkX2xvbmc0CkBAIC05NTEsMzkgKzExMzUsMzYgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoZmxvYXQoc2VsZi5yZWFkbGluZSgpWzotMV0pKQogICAgIGRpc3BhdGNoW0ZMT0FUWzBdXSA9IGxvYWRfZmxvYXQKIAotICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9iaW5mbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc+ZCcsIHNlbGYucmVhZCg4KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklORkxPQVRbMF1dID0gbG9hZF9iaW5mbG9hdAogCiAgICAgZGVmIGxvYWRfc3RyaW5nKHNlbGYpOgotICAgICAgICBvcmlnID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIHJlcCA9IG9yaWdbOi0xXQotICAgICAgICBmb3IgcSBpbiAoYiciJywgYiInIik6ICMgZG91YmxlIG9yIHNpbmdsZSBxdW90ZQotICAgICAgICAgICAgaWYgcmVwLnN0YXJ0c3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKHJlcCkgPCAyIG9yIG5vdCByZXAuZW5kc3dpdGgocSk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKQotICAgICAgICAgICAgICAgIHJlcCA9IHJlcFtsZW4ocSk6LWxlbihxKV0KLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBkYXRhID0gc2VsZi5yZWFkbGluZSgpWzotMV0KKyAgICAgICAgIyBTdHJpcCBvdXRlcm1vc3QgcXVvdGVzCisgICAgICAgIGlmIGxlbihkYXRhKSA+PSAyIGFuZCBkYXRhWzBdID09IGRhdGFbLTFdIGFuZCBkYXRhWzBdIGluIGInIlwnJzoKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhWzE6LTFdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnNlY3VyZSBzdHJpbmcgcGlja2xlOiAlciIgJSBvcmlnKQotICAgICAgICBzZWxmLmFwcGVuZChjb2RlY3MuZXNjYXBlX2RlY29kZShyZXApWzBdCisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoInRoZSBTVFJJTkcgb3Bjb2RlIGFyZ3VtZW50IG11c3QgYmUgcXVvdGVkIikKKyAgICAgICAgc2VsZi5hcHBlbmQoY29kZWNzLmVzY2FwZV9kZWNvZGUoZGF0YSlbMF0KICAgICAgICAgICAgICAgICAgICAgLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykpCiAgICAgZGlzcGF0Y2hbU1RSSU5HWzBdXSA9IGxvYWRfc3RyaW5nCiAKICAgICBkZWYgbG9hZF9iaW5zdHJpbmcoc2VsZik6CiAgICAgICAgICMgRGVwcmVjYXRlZCBCSU5TVFJJTkcgdXNlcyBzaWduZWQgMzItYml0IGxlbmd0aAotICAgICAgICBsZW4gPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgbGVuLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA8IDA6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOU1RSSU5HIHBpY2tsZSBoYXMgbmVnYXRpdmUgYnl0ZSBjb3VudCIpCiAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKQogICAgICAgICB2YWx1ZSA9IHN0cihkYXRhLCBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKICAgICAgICAgc2VsZi5hcHBlbmQodmFsdWUpCiAgICAgZGlzcGF0Y2hbQklOU1RSSU5HWzBdXSA9IGxvYWRfYmluc3RyaW5nCiAKLSAgICBkZWYgbG9hZF9iaW5ieXRlcyhzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfYmluYnl0ZXMoc2VsZik6CiAgICAgICAgIGxlbiwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlZCBieXRlcyIgJSBtYXhzaXplKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQogICAgICAgICBzZWxmLmFwcGVuZChzZWxmLnJlYWQobGVuKSkKICAgICBkaXNwYXRjaFtCSU5CWVRFU1swXV0gPSBsb2FkX2JpbmJ5dGVzCiAKQEAgLTk5MSwyNSArMTE3MiwzOSBAQAogICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkbGluZSgpWzotMV0sICdyYXctdW5pY29kZS1lc2NhcGUnKSkKICAgICBkaXNwYXRjaFtVTklDT0RFWzBdXSA9IGxvYWRfdW5pY29kZQogCi0gICAgZGVmIGxvYWRfYmludW5pY29kZShzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfYmludW5pY29kZShzZWxmKToKICAgICAgICAgbGVuLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGxlbiA+IG1heHNpemU6Ci0gICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSk7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQogICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCiAgICAgZGlzcGF0Y2hbQklOVU5JQ09ERVswXV0gPSBsb2FkX2JpbnVuaWNvZGUKIAorICAgIGRlZiBsb2FkX2JpbnVuaWNvZGU4KHNlbGYpOgorICAgICAgICBsZW4sID0gdW5wYWNrKCc8UScsIHNlbGYucmVhZCg4KSkKKyAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOVU5JQ09ERTggZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiAlZCBieXRlcyIgJSBtYXhzaXplKQorICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCisgICAgZGlzcGF0Y2hbQklOVU5JQ09ERThbMF1dID0gbG9hZF9iaW51bmljb2RlOAorCiAgICAgZGVmIGxvYWRfc2hvcnRfYmluc3RyaW5nKHNlbGYpOgotICAgICAgICBsZW4gPSBvcmQoc2VsZi5yZWFkKDEpKQotICAgICAgICBkYXRhID0gYnl0ZXMoc2VsZi5yZWFkKGxlbikpCisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKICAgICAgICAgdmFsdWUgPSBzdHIoZGF0YSwgc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQogICAgIGRpc3BhdGNoW1NIT1JUX0JJTlNUUklOR1swXV0gPSBsb2FkX3Nob3J0X2JpbnN0cmluZwogCiAgICAgZGVmIGxvYWRfc2hvcnRfYmluYnl0ZXMoc2VsZik6Ci0gICAgICAgIGxlbiA9IG9yZChzZWxmLnJlYWQoMSkpCi0gICAgICAgIHNlbGYuYXBwZW5kKGJ5dGVzKHNlbGYucmVhZChsZW4pKSkKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQogICAgIGRpc3BhdGNoW1NIT1JUX0JJTkJZVEVTWzBdXSA9IGxvYWRfc2hvcnRfYmluYnl0ZXMKIAorICAgIGRlZiBsb2FkX3Nob3J0X2JpbnVuaWNvZGUoc2VsZik6CisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCisgICAgZGlzcGF0Y2hbU0hPUlRfQklOVU5JQ09ERVswXV0gPSBsb2FkX3Nob3J0X2JpbnVuaWNvZGUKKwogICAgIGRlZiBsb2FkX3R1cGxlKHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFt0dXBsZShzZWxmLnN0YWNrW2srMTpdKV0KQEAgLTEwMzksNiArMTIzNCwxNSBAQAogICAgICAgICBzZWxmLmFwcGVuZCh7fSkKICAgICBkaXNwYXRjaFtFTVBUWV9ESUNUWzBdXSA9IGxvYWRfZW1wdHlfZGljdGlvbmFyeQogCisgICAgZGVmIGxvYWRfZW1wdHlfc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZChzZXQoKSkKKyAgICBkaXNwYXRjaFtFTVBUWV9TRVRbMF1dID0gbG9hZF9lbXB0eV9zZXQKKworICAgIGRlZiBsb2FkX2Zyb3plbnNldChzZWxmKToKKyAgICAgICAgayA9IHNlbGYubWFya2VyKCkKKyAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbZnJvemVuc2V0KHNlbGYuc3RhY2tbaysxOl0pXQorICAgIGRpc3BhdGNoW0ZST1pFTlNFVFswXV0gPSBsb2FkX2Zyb3plbnNldAorCiAgICAgZGVmIGxvYWRfbGlzdChzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbc2VsZi5zdGFja1trKzE6XV0KQEAgLTEwNDYsMTIgKzEyNTAsOSBAQAogCiAgICAgZGVmIGxvYWRfZGljdChzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKLSAgICAgICAgZCA9IHt9CiAgICAgICAgIGl0ZW1zID0gc2VsZi5zdGFja1trKzE6XQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaXRlbXMpLCAyKToKLSAgICAgICAgICAgIGtleSA9IGl0ZW1zW2ldCi0gICAgICAgICAgICB2YWx1ZSA9IGl0ZW1zW2krMV0KLSAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCisgICAgICAgIGQgPSB7aXRlbXNbaV06IGl0ZW1zW2krMV0KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaXRlbXMpLCAyKX0KICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbZF0KICAgICBkaXNwYXRjaFtESUNUWzBdXSA9IGxvYWRfZGljdAogCkBAIC0xMDkwLDExICsxMjkxLDE5IEBACiAKICAgICBkZWYgbG9hZF9uZXdvYmooc2VsZik6CiAgICAgICAgIGFyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCi0gICAgICAgIGNscyA9IHNlbGYuc3RhY2tbLTFdCisgICAgICAgIGNscyA9IHNlbGYuc3RhY2sucG9wKCkKICAgICAgICAgb2JqID0gY2xzLl9fbmV3X18oY2xzLCAqYXJncykKLSAgICAgICAgc2VsZi5zdGFja1stMV0gPSBvYmoKKyAgICAgICAgc2VsZi5hcHBlbmQob2JqKQogICAgIGRpc3BhdGNoW05FV09CSlswXV0gPSBsb2FkX25ld29iagogCisgICAgZGVmIGxvYWRfbmV3b2JqX2V4KHNlbGYpOgorICAgICAgICBrd2FyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGFyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGNscyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgb2JqID0gY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXBwZW5kKG9iaikKKyAgICBkaXNwYXRjaFtORVdPQkpfRVhbMF1dID0gbG9hZF9uZXdvYmpfZXgKKwogICAgIGRlZiBsb2FkX2dsb2JhbChzZWxmKToKICAgICAgICAgbW9kdWxlID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgIG5hbWUgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoInV0Zi04IikKQEAgLTExMDIsMTggKzEzMTEsMjYgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoa2xhc3MpCiAgICAgZGlzcGF0Y2hbR0xPQkFMWzBdXSA9IGxvYWRfZ2xvYmFsCiAKKyAgICBkZWYgbG9hZF9zdGFja19nbG9iYWwoc2VsZik6CisgICAgICAgIG5hbWUgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgaWYgdHlwZShuYW1lKSBpcyBub3Qgc3RyIG9yIHR5cGUobW9kdWxlKSBpcyBub3Qgc3RyOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJTVEFDS19HTE9CQUwgcmVxdWlyZXMgc3RyIikKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5maW5kX2NsYXNzKG1vZHVsZSwgbmFtZSkpCisgICAgZGlzcGF0Y2hbU1RBQ0tfR0xPQkFMWzBdXSA9IGxvYWRfc3RhY2tfZ2xvYmFsCisKICAgICBkZWYgbG9hZF9leHQxKHNlbGYpOgotICAgICAgICBjb2RlID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgY29kZSA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQxWzBdXSA9IGxvYWRfZXh0MQogCiAgICAgZGVmIGxvYWRfZXh0MihzZWxmKToKLSAgICAgICAgY29kZSA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDIpICsgYidcMDAwXDAwMCcpCisgICAgICAgIGNvZGUsID0gdW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSkKICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUMlswXV0gPSBsb2FkX2V4dDIKIAogICAgIGRlZiBsb2FkX2V4dDQoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgY29kZSwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQ0WzBdXSA9IGxvYWRfZXh0NAogCkBAIC0xMTI3LDcgKzEzNDQsNyBAQAogICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgaWYgY29kZSA8PSAwOiAjIG5vdGUgdGhhdCAwIGlzIGZvcmJpZGRlbgogICAgICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZS4KLSAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpCiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9uIGNvZGUgJWQiICUgY29kZSkKICAgICAgICAgb2JqID0gc2VsZi5maW5kX2NsYXNzKCprZXkpCiAgICAgICAgIF9leHRlbnNpb25fY2FjaGVbY29kZV0gPSBvYmoKQEAgLTExNDEsOSArMTM1OCw4IEBACiAgICAgICAgICAgICBpZiBtb2R1bGUgaW4gX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkc6CiAgICAgICAgICAgICAgICAgbW9kdWxlID0gX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkdbbW9kdWxlXQogICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZSwgbGV2ZWw9MCkKLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kdWxlXQotICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICByZXR1cm4ga2xhc3MKKyAgICAgICAgcmV0dXJuIF9nZXRhdHRyaWJ1dGUoc3lzLm1vZHVsZXNbbW9kdWxlXSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogCiAgICAgZGVmIGxvYWRfcmVkdWNlKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKQEAgLTExODEsNyArMTM5Nyw3IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtCSU5HRVRbMF1dID0gbG9hZF9iaW5nZXQKIAotICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYsIHVucGFjaz1zdHJ1Y3QudW5wYWNrKToKKyAgICBkZWYgbG9hZF9sb25nX2JpbmdldChzZWxmKToKICAgICAgICAgaSwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBzZWxmLmFwcGVuZChzZWxmLm1lbW9baV0pCiAgICAgZGlzcGF0Y2hbTE9OR19CSU5HRVRbMF1dID0gbG9hZF9sb25nX2JpbmdldApAQCAtMTIwMCwxMyArMTQxNiwxOCBAQAogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0JJTlBVVFswXV0gPSBsb2FkX2JpbnB1dAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2xvbmdfYmlucHV0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIGkgPiBtYXhzaXplOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibmVnYXRpdmUgTE9OR19CSU5QVVQgYXJndW1lbnQiKQogICAgICAgICBzZWxmLm1lbW9baV0gPSBzZWxmLnN0YWNrWy0xXQogICAgIGRpc3BhdGNoW0xPTkdfQklOUFVUWzBdXSA9IGxvYWRfbG9uZ19iaW5wdXQKIAorICAgIGRlZiBsb2FkX21lbW9pemUoc2VsZik6CisgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KKyAgICAgICAgbWVtb1tsZW4obWVtbyldID0gc2VsZi5zdGFja1stMV0KKyAgICBkaXNwYXRjaFtNRU1PSVpFWzBdXSA9IGxvYWRfbWVtb2l6ZQorCiAgICAgZGVmIGxvYWRfYXBwZW5kKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgdmFsdWUgPSBzdGFjay5wb3AoKQpAQCAtMTI0NiwxMiArMTQ2NywyNiBAQAogICAgICAgICBkZWwgc3RhY2tbbWFyazpdCiAgICAgZGlzcGF0Y2hbU0VUSVRFTVNbMF1dID0gbG9hZF9zZXRpdGVtcwogCisgICAgZGVmIGxvYWRfYWRkaXRlbXMoc2VsZik6CisgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjaworICAgICAgICBtYXJrID0gc2VsZi5tYXJrZXIoKQorICAgICAgICBzZXRfb2JqID0gc3RhY2tbbWFyayAtIDFdCisgICAgICAgIGl0ZW1zID0gc3RhY2tbbWFyayArIDE6XQorICAgICAgICBpZiBpc2luc3RhbmNlKHNldF9vYmosIHNldCk6CisgICAgICAgICAgICBzZXRfb2JqLnVwZGF0ZShpdGVtcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZCA9IHNldF9vYmouYWRkCisgICAgICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKKyAgICAgICAgICAgICAgICBhZGQoaXRlbSkKKyAgICAgICAgZGVsIHN0YWNrW21hcms6XQorICAgIGRpc3BhdGNoW0FERElURU1TWzBdXSA9IGxvYWRfYWRkaXRlbXMKKwogICAgIGRlZiBsb2FkX2J1aWxkKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgc3RhdGUgPSBzdGFjay5wb3AoKQogICAgICAgICBpbnN0ID0gc3RhY2tbLTFdCiAgICAgICAgIHNldHN0YXRlID0gZ2V0YXR0cihpbnN0LCAiX19zZXRzdGF0ZV9fIiwgTm9uZSkKLSAgICAgICAgaWYgc2V0c3RhdGU6CisgICAgICAgIGlmIHNldHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2V0c3RhdGUoc3RhdGUpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2xvdHN0YXRlID0gTm9uZQpAQCAtMTI3OSw4NiArMTUxNCw0NiBAQAogICAgICAgICByYWlzZSBfU3RvcCh2YWx1ZSkKICAgICBkaXNwYXRjaFtTVE9QWzBdXSA9IGxvYWRfc3RvcAogCi0jIEVuY29kZS9kZWNvZGUgaW50cy4KLQotZGVmIGVuY29kZV9sb25nKHgpOgotICAgIHIiIiJFbmNvZGUgYSBsb25nIHRvIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCi0gICAgTm90ZSB0aGF0IDAgaXMgYSBzcGVjaWFsIGNhc2UsIHJldHVybmluZyBhbiBlbXB0eSBzdHJpbmcsIHRvIHNhdmUgYQotICAgIGJ5dGUgaW4gdGhlIExPTkcxIHBpY2tsaW5nIGNvbnRleHQuCi0KLSAgICA+Pj4gZW5jb2RlX2xvbmcoMCkKLSAgICBiJycKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMjU1KQotICAgIGInXHhmZlx4MDAnCi0gICAgPj4+IGVuY29kZV9sb25nKDMyNzY3KQotICAgIGInXHhmZlx4N2YnCi0gICAgPj4+IGVuY29kZV9sb25nKC0yNTYpCi0gICAgYidceDAwXHhmZicKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTMyNzY4KQotICAgIGInXHgwMFx4ODAnCi0gICAgPj4+IGVuY29kZV9sb25nKC0xMjgpCi0gICAgYidceDgwJwotICAgID4+PiBlbmNvZGVfbG9uZygxMjcpCi0gICAgYidceDdmJwotICAgID4+PgotICAgICIiIgotICAgIGlmIHggPT0gMDoKLSAgICAgICAgcmV0dXJuIGInJwotICAgIG5ieXRlcyA9ICh4LmJpdF9sZW5ndGgoKSA+PiAzKSArIDEKLSAgICByZXN1bHQgPSB4LnRvX2J5dGVzKG5ieXRlcywgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKLSAgICBpZiB4IDwgMCBhbmQgbmJ5dGVzID4gMToKLSAgICAgICAgaWYgcmVzdWx0Wy0xXSA9PSAweGZmIGFuZCAocmVzdWx0Wy0yXSAmIDB4ODApICE9IDA6Ci0gICAgICAgICAgICByZXN1bHQgPSByZXN1bHRbOi0xXQotICAgIHJldHVybiByZXN1bHQKLQotZGVmIGRlY29kZV9sb25nKGRhdGEpOgotICAgIHIiIiJEZWNvZGUgYW4gaW50IGZyb20gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KLQotICAgID4+PiBkZWNvZGVfbG9uZyhiJycpCi0gICAgMAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDAwIikKLSAgICAyNTUKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHg3ZiIpCi0gICAgMzI3NjcKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHhmZiIpCi0gICAgLTI1NgotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceDgwIikKLSAgICAtMzI3NjgKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDgwIikKLSAgICAtMTI4Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHg3ZiIpCi0gICAgMTI3Ci0gICAgIiIiCi0gICAgcmV0dXJuIGludC5mcm9tX2J5dGVzKGRhdGEsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCiAKICMgU2hvcnRoYW5kcwogCi1kZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgotICAgIFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKK2RlZiBfZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgorICAgIF9QaWNrbGVyKGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCiAKLWRlZiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgorZGVmIF9kdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgogICAgIGYgPSBpby5CeXRlc0lPKCkKLSAgICBQaWNrbGVyKGYsIHByb3RvY29sLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cykuZHVtcChvYmopCisgICAgX1BpY2tsZXIoZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKICAgICByZXMgPSBmLmdldHZhbHVlKCkKICAgICBhc3NlcnQgaXNpbnN0YW5jZShyZXMsIGJ5dGVzX3R5cGVzKQogICAgIHJldHVybiByZXMKIAotZGVmIGxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKLSAgICByZXR1cm4gVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAorZGVmIF9sb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CisgICAgcmV0dXJuIF9VbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCiAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCiAKLWRlZiBsb2FkcyhzLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgorZGVmIF9sb2FkcyhzLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgogICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBsb2FkIHBpY2tsZSBmcm9tIHVuaWNvZGUgc3RyaW5nIikKICAgICBmaWxlID0gaW8uQnl0ZXNJTyhzKQotICAgIHJldHVybiBVbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCi0gICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCisgICAgcmV0dXJuIF9VbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCisgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpLmxvYWQoKQogCiAjIFVzZSB0aGUgZmFzdGVyIF9waWNrbGUgaWYgcG9zc2libGUKIHRyeToKLSAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICoKKyAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICgKKyAgICAgICAgUGlja2xlRXJyb3IsCisgICAgICAgIFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlciwKKyAgICAgICAgVW5waWNrbGVyLAorICAgICAgICBkdW1wLAorICAgICAgICBkdW1wcywKKyAgICAgICAgbG9hZCwKKyAgICAgICAgbG9hZHMKKyAgICApCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgUGlja2xlciwgVW5waWNrbGVyID0gX1BpY2tsZXIsIF9VbnBpY2tsZXIKKyAgICBkdW1wLCBkdW1wcywgbG9hZCwgbG9hZHMgPSBfZHVtcCwgX2R1bXBzLCBfbG9hZCwgX2xvYWRzCiAKICMgRG9jdGVzdAogZGVmIF90ZXN0KCk6CmRpZmYgLS1naXQgYS9MaWIvcGlja2xldG9vbHMucHkgYi9MaWIvcGlja2xldG9vbHMucHkKaW5kZXggNjEyZmE4Zi4uYTI0ODBmNiAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZXRvb2xzLnB5CisrKyBiL0xpYi9waWNrbGV0b29scy5weQpAQCAtMTEsNiArMTEsNyBAQAogJycnCiAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBpbwogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCkBAIC0zNCwxMTkgKzM1LDExOCBAQAogIyAgIGJ5IGEgbGF0ZXIgR0VULgogCiAKLSIiIgotIkEgcGlja2xlIiBpcyBhIHByb2dyYW0gZm9yIGEgdmlydHVhbCBwaWNrbGUgbWFjaGluZSAoUE0sIGJ1dCBtb3JlIGFjY3VyYXRlbHkKLWNhbGxlZCBhbiB1bnBpY2tsaW5nIG1hY2hpbmUpLiAgSXQncyBhIHNlcXVlbmNlIG9mIG9wY29kZXMsIGludGVycHJldGVkIGJ5IHRoZQotUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMgIkEgcGlja2xlIiBpcyBhIHByb2dyYW0gZm9yIGEgdmlydHVhbCBwaWNrbGUgbWFjaGluZSAoUE0sIGJ1dCBtb3JlIGFjY3VyYXRlbHkKKyMgY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCisjIFBNLCBidWlsZGluZyBhbiBhcmJpdHJhcmlseSBjb21wbGV4IFB5dGhvbiBvYmplY3QuCisjCisjIEZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKKyMgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBubyBhcml0aG1ldGljIGFuZCBubyBmdW5jdGlvbiBjYWxscy4gIE9wY29kZXMgYXJlCisjIGV4ZWN1dGVkIG9uY2UgZWFjaCwgZnJvbSBmaXJzdCB0byBsYXN0LCB1bnRpbCBhIFNUT1Agb3Bjb2RlIGlzIHJlYWNoZWQuCisjCisjIFRoZSBQTSBoYXMgdHdvIGRhdGEgYXJlYXMsICJ0aGUgc3RhY2siIGFuZCAidGhlIG1lbW8iLgorIworIyBNYW55IG9wY29kZXMgcHVzaCBQeXRob24gb2JqZWN0cyBvbnRvIHRoZSBzdGFjazsgZS5nLiwgSU5UIHB1c2hlcyBhIFB5dGhvbgorIyBpbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKKyMgbGl0ZXJhbCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIElOVCBvcGNvZGUgaW4gdGhlIHBpY2tsZSBieXRlc3RyZWFtLiAgT3RoZXIKKyMgb3Bjb2RlcyB0YWtlIFB5dGhvbiBvYmplY3RzIG9mZiB0aGUgc3RhY2suICBUaGUgcmVzdWx0IG9mIHVucGlja2xpbmcgaXMKKyMgd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgorIworIyBUaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAorIyBtYXBwaW5nIGxpdHRsZSBpbnRlZ2VycyB0byBvYmplY3RzLiAgVGhlIG1lbW8gc2VydmVzIGFzIHRoZSBQTSdzICJsb25nIHRlcm0KKyMgbWVtb3J5IiwgYW5kIHRoZSBsaXR0bGUgaW50ZWdlcnMgaW5kZXhpbmcgdGhlIG1lbW8gYXJlIGFraW4gdG8gdmFyaWFibGUKKyMgbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKKyMgYW5kIG90aGVycyBwdXNoIGEgbWVtbyBvYmplY3QgYXQgYSBnaXZlbiBpbmRleCBvbnRvIHRoZSBzdGFjayBhZ2Fpbi4KKyMKKyMgQXQgaGVhcnQsIHRoYXQncyBhbGwgdGhlIFBNIGhhcy4gIFN1YnRsZXRpZXMgYXJpc2UgZm9yIHRoZXNlIHJlYXNvbnM6CisjCisjICsgT2JqZWN0IGlkZW50aXR5LiAgT2JqZWN0cyBjYW4gYmUgYXJiaXRyYXJpbHkgY29tcGxleCwgYW5kIHN1Ym9iamVjdHMKKyMgICBtYXkgYmUgc2hhcmVkIChmb3IgZXhhbXBsZSwgdGhlIGxpc3QgW2EsIGFdIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYQorIyAgIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKKyMgICBncmFwaCwgZmFpdGhmdWxseSByZXByb2R1Y2luZyBzaGFyaW5nLgorIworIyArIFJlY3Vyc2l2ZSBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIGFmdGVyICJMID0gW107IEwuYXBwZW5kKEwpIiwgTCBpcyBhCisjICAgbGlzdCwgYW5kIExbMF0gaXMgdGhlIHNhbWUgbGlzdC4gIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb2JqZWN0IGlkZW50aXR5CisjICAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCisjICAgZ2V0IHRoZSByaWdodCByZXN1bHQgaW4gYWxsIGNhc2VzLgorIworIyArIFRoaW5ncyBwaWNrbGUgZG9lc24ndCBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQuICBFeGFtcGxlcyBvZiB0aGluZ3MgcGlja2xlCisjICAgZG9lcyBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgYXJlIFB5dGhvbidzIGJ1aWx0aW4gc2NhbGFyIGFuZCBjb250YWluZXIKKyMgICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCisjICAgdGhlbS4gIEZvciB0aGluZ3MgbGlrZSBtb2R1bGUgcmVmZXJlbmNlcyBhbmQgaW5zdGFuY2VzIG9mIHVzZXItZGVmaW5lZAorIyAgIGNsYXNzZXMsIHBpY2tsZSdzIGtub3dsZWRnZSBpcyBsaW1pdGVkLiAgSGlzdG9yaWNhbGx5LCBtYW55IGVuaGFuY2VtZW50cworIyAgIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKKyMgICBhbmQvb3IgbW9yZSBjb21wYWN0KSBqb2Igb24gdGhvc2UuCisjCisjICsgQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgbWljcm8tb3B0aW1pemF0aW9uLiAgQXMgZXhwbGFpbmVkIGJlbG93LAorIyAgIHBpY2tsZSBvcGNvZGVzIG5ldmVyIGdvIGF3YXksIG5vdCBldmVuIHdoZW4gYmV0dGVyIHdheXMgdG8gZG8gYSB0aGluZworIyAgIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgorIyAgIEZvciBleGFtcGxlLCBwcm90b2NvbCAwIGhhZCB0d28gb3Bjb2RlcyBmb3IgYnVpbGRpbmcgUHl0aG9uIGludGVnZXJzIChJTlQKKyMgICBhbmQgTE9ORyksIHByb3RvY29sIDEgYWRkZWQgdGhyZWUgbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2Ygc2hvcnQKKyMgICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCisjICAgbG9uZyBpbnRlZ2VycyAoYmVmb3JlIHByb3RvY29sIDIsIHRoZSBvbmx5IHdheXMgdG8gcGlja2xlIGEgUHl0aG9uIGxvbmcKKyMgICB0b29rIHRpbWUgcXVhZHJhdGljIGluIHRoZSBudW1iZXIgb2YgZGlnaXRzLCBmb3IgYm90aCBwaWNrbGluZyBhbmQKKyMgICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgorIyAgIHdlYXJ5aW5nIGNvbXBsaWNhdGlvbi4KKyMKKyMKKyMgUGlja2xlIHByb3RvY29sczoKKyMKKyMgRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKKyMgcGlja2xlIG9wY29kZXMgZ2V0IGFkZGVkLCBhbmQgZWFjaCB2ZXJzaW9uJ3MgdW5waWNrbGVyIGNhbiBoYW5kbGUgYWxsIHRoZQorIyBwaWNrbGUgb3Bjb2RlcyBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMgdG8gZGF0ZS4gIFNvIG9sZCBwaWNrbGVzIGNvbnRpbnVlIHRvCisjIGJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCisjIHRoZSBzdWJzZXQgb2Ygb3Bjb2RlcyBhdmFpbGFibGUgdW5kZXIgcHJldmlvdXMgcHJvdG9jb2wgdmVyc2lvbnMgdG9vLCBzbyB0aGF0CisjIHVzZXJzIGNhbiBjcmVhdGUgcGlja2xlcyB1bmRlciB0aGUgY3VycmVudCB2ZXJzaW9uIHJlYWRhYmxlIGJ5IG9sZGVyCisjIHZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKKyMgd2l0aGluIGl0LiAgSWYgYW4gb2xkZXIgdW5waWNrbGVyIHRyaWVzIHRvIHJlYWQgYSBwaWNrbGUgdXNpbmcgYSBsYXRlcgorIyBwcm90b2NvbCwgdGhlIHJlc3VsdCBpcyBtb3N0IGxpa2VseSBhbiBleGNlcHRpb24gZHVlIHRvIHNlZWluZyBhbiB1bmtub3duIChpbgorIyB0aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCisjCisjIFRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKKyMgInRleHQgbW9kZSIgYmVmb3JlIFB5dGhvbiAyLjMuICBUaGUgZW50aXJlIHBpY2tsZSBieXRlc3RyZWFtIGlzIG1hZGUgdXAgb2YKKyMgcHJpbnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHBsdXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLCBpbiBwcm90b2NvbCAwLgorIyBUaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0CisjIHNvbWV0aW1lcyBwYWluZnVsbHkgaW5lZmZpY2llbnQuCisjCisjIFRoZSBzZWNvbmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBpcyBub3cgY2FsbGVkICJwcm90b2NvbCAxIiwgYW5kIHdhcyBjYWxsZWQKKyMgImJpbmFyeSBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoaXMgYWRkZWQgbWFueSBvcGNvZGVzIHdpdGggYXJndW1lbnRzCisjIGNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCisjIGJ5dGVzLiAgQmluYXJ5IG1vZGUgcGlja2xlcyBjYW4gYmUgc3Vic3RhbnRpYWxseSBzbWFsbGVyIHRoYW4gZXF1aXZhbGVudAorIyB0ZXh0IG1vZGUgcGlja2xlcywgYW5kIHNvbWV0aW1lcyBmYXN0ZXIgdG9vOyBlLmcuLCBCSU5JTlQgcmVwcmVzZW50cyBhIDQtYnl0ZQorIyBpbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQorIyAocGVyaGFwcykgMTEtY2hhcmFjdGVyIGRlY2ltYWwgc3RyaW5nIGF0dGFjaGVkIHRvIElOVC4gIFByb3RvY29sIDEgYWxzbyBhZGRlZAorIyBhIG51bWJlciBvZiBvcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBtYW55IHN0YWNrIGVsZW1lbnRzIGF0IG9uY2UgKGxpa2UgQVBQRU5EUworIyBhbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KKyMKKyMgVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAorIyAyIi4gIFRoaXMgYWRkZWQ6CisjCisjIC0gQSBiZXR0ZXIgd2F5IHRvIHBpY2tsZSBpbnN0YW5jZXMgb2YgbmV3LXN0eWxlIGNsYXNzZXMgKE5FV09CSikuCisjCisjIC0gQSB3YXkgZm9yIGEgcGlja2xlIHRvIGlkZW50aWZ5IGl0cyBwcm90b2NvbCAoUFJPVE8pLgorIworIyAtIFRpbWUtIGFuZCBzcGFjZS0gZWZmaWNpZW50IHBpY2tsaW5nIG9mIGxvbmcgaW50cyAoTE9OR3sxLDR9KS4KKyMKKyMgLSBTaG9ydGN1dHMgZm9yIHNtYWxsIHR1cGxlcyAoVFVQTEV7MSwyLDN9fS4KKyMKKyMgLSBEZWRpY2F0ZWQgb3Bjb2RlcyBmb3IgYm9vbHMgKE5FV1RSVUUsIE5FV0ZBTFNFKS4KKyMKKyMgLSBUaGUgImV4dGVuc2lvbiByZWdpc3RyeSIsIGEgdmVjdG9yIG9mIHBvcHVsYXIgb2JqZWN0cyB0aGF0IGNhbiBiZSBwdXNoZWQKKyMgICBlZmZpY2llbnRseSBieSBpbmRleCAoRVhUezEsMiw0fSkuICBUaGlzIGlzIGFraW4gdG8gdGhlIG1lbW8gYW5kIEdFVCwgYnV0CisjICAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCisjICAgUFVUKS4KKyMKKyMgQW5vdGhlciBpbmRlcGVuZGVudCBjaGFuZ2Ugd2l0aCBQeXRob24gMi4zIGlzIHRoZSBhYmFuZG9ubWVudCBvZiBhbnkKKyMgcHJldGVuc2UgdGhhdCBpdCBtaWdodCBiZSBzYWZlIHRvIGxvYWQgcGlja2xlcyByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZAorIyBwYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKKyMgdGhpcyBhbmQgdGhlcmUgaXNuJ3QgYSB1c2UgY2FzZSB0aGF0IHdhcnJhbnRzIHRoZSBleHBlbnNlIG9mIHN1Y2ggYW4KKyMgYW5hbHlzaXMuCisjCisjIFRvIHRoaXMgZW5kLCBhbGwgdGVzdHMgZm9yIF9fc2FmZV9mb3JfdW5waWNrbGluZ19fIG9yIGZvcgorIyBjb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KKyMgUmVmZXJlbmNlcyB0byB0aGVzZSB2YXJpYWJsZXMgaW4gdGhlIGRlc2NyaXB0aW9ucyBiZWxvdyBhcmUgdG8gYmUgc2VlbgorIyBhcyBkZXNjcmliaW5nIHVucGlja2xpbmcgaW4gUHl0aG9uIDIuMiBhbmQgYmVmb3JlLgogCi1Gb3IgdGhlIG1vc3QgcGFydCwgdGhlIFBNIGlzIHZlcnkgc2ltcGxlOiAgdGhlcmUgYXJlIG5vIGxvb3BpbmcsIHRlc3RpbmcsIG9yCi1jb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKLWV4ZWN1dGVkIG9uY2UgZWFjaCwgZnJvbSBmaXJzdCB0byBsYXN0LCB1bnRpbCBhIFNUT1Agb3Bjb2RlIGlzIHJlYWNoZWQuCi0KLVRoZSBQTSBoYXMgdHdvIGRhdGEgYXJlYXMsICJ0aGUgc3RhY2siIGFuZCAidGhlIG1lbW8iLgotCi1NYW55IG9wY29kZXMgcHVzaCBQeXRob24gb2JqZWN0cyBvbnRvIHRoZSBzdGFjazsgZS5nLiwgSU5UIHB1c2hlcyBhIFB5dGhvbgotaW50ZWdlciBvYmplY3Qgb24gdGhlIHN0YWNrLCB3aG9zZSB2YWx1ZSBpcyBnb3R0ZW4gZnJvbSBhIGRlY2ltYWwgc3RyaW5nCi1saXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgotb3Bjb2RlcyB0YWtlIFB5dGhvbiBvYmplY3RzIG9mZiB0aGUgc3RhY2suICBUaGUgcmVzdWx0IG9mIHVucGlja2xpbmcgaXMKLXdoYXRldmVyIG9iamVjdCBpcyBsZWZ0IG9uIHRoZSBzdGFjayB3aGVuIHRoZSBmaW5hbCBTVE9QIG9wY29kZSBpcyBleGVjdXRlZC4KLQotVGhlIG1lbW8gaXMgc2ltcGx5IGFuIGFycmF5IG9mIG9iamVjdHMsIG9yIGl0IGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhIGRpY3QKLW1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQotbWVtb3J5IiwgYW5kIHRoZSBsaXR0bGUgaW50ZWdlcnMgaW5kZXhpbmcgdGhlIG1lbW8gYXJlIGFraW4gdG8gdmFyaWFibGUKLW5hbWVzLiAgU29tZSBvcGNvZGVzIHBvcCBhIHN0YWNrIG9iamVjdCBpbnRvIHRoZSBtZW1vIGF0IGEgZ2l2ZW4gaW5kZXgsCi1hbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgotCi1BdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKLQotKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cwotICBtYXkgYmUgc2hhcmVkIChmb3IgZXhhbXBsZSwgdGhlIGxpc3QgW2EsIGFdIHJlZmVycyB0byB0aGUgc2FtZSBvYmplY3QgYQotICB0d2ljZSkuICBJdCBjYW4gYmUgdml0YWwgdGhhdCB1bnBpY2tsaW5nIHJlY3JlYXRlIGFuIGlzb21vcnBoaWMgb2JqZWN0Ci0gIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCi0KLSsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKLSAgbGlzdCwgYW5kIExbMF0gaXMgdGhlIHNhbWUgbGlzdC4gIFRoaXMgaXMgcmVsYXRlZCB0byB0aGUgb2JqZWN0IGlkZW50aXR5Ci0gIHBvaW50LCBhbmQgc29tZSBzZXF1ZW5jZXMgb2YgcGlja2xlIG9wY29kZXMgYXJlIHN1YnRsZSBpbiBvcmRlciB0bwotICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCi0KLSsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKLSAgZG9lcyBrbm93IGV2ZXJ5dGhpbmcgYWJvdXQgYXJlIFB5dGhvbidzIGJ1aWx0aW4gc2NhbGFyIGFuZCBjb250YWluZXIKLSAgdHlwZXMsIGxpa2UgaW50cyBhbmQgdHVwbGVzLiAgVGhleSBnZW5lcmFsbHkgaGF2ZSBvcGNvZGVzIGRlZGljYXRlZCB0bwotICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCi0gIGNsYXNzZXMsIHBpY2tsZSdzIGtub3dsZWRnZSBpcyBsaW1pdGVkLiAgSGlzdG9yaWNhbGx5LCBtYW55IGVuaGFuY2VtZW50cwotICBoYXZlIGJlZW4gbWFkZSB0byB0aGUgcGlja2xlIHByb3RvY29sIGluIG9yZGVyIHRvIGRvIGEgYmV0dGVyIChmYXN0ZXIsCi0gIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KLQotKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCi0gIHBpY2tsZSBvcGNvZGVzIG5ldmVyIGdvIGF3YXksIG5vdCBldmVuIHdoZW4gYmV0dGVyIHdheXMgdG8gZG8gYSB0aGluZwotICBnZXQgaW52ZW50ZWQuICBUaGUgcmVwZXJ0b2lyZSBvZiB0aGUgUE0ganVzdCBrZWVwcyBncm93aW5nIG92ZXIgdGltZS4KLSAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAotICBhbmQgTE9ORyksIHByb3RvY29sIDEgYWRkZWQgdGhyZWUgbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2Ygc2hvcnQKLSAgaW50ZWdlcnMsIGFuZCBwcm90b2NvbCAyIGFkZGVkIHR3byBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZgotICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZwotICB0b29rIHRpbWUgcXVhZHJhdGljIGluIHRoZSBudW1iZXIgb2YgZGlnaXRzLCBmb3IgYm90aCBwaWNrbGluZyBhbmQKLSAgdW5waWNrbGluZykuICAiT3Bjb2RlIGJsb2F0IiBpc24ndCBzbyBtdWNoIGEgc3VidGxldHkgYXMgYSBzb3VyY2Ugb2YKLSAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgotCi0KLVBpY2tsZSBwcm90b2NvbHM6Ci0KLUZvciBjb21wYXRpYmlsaXR5LCB0aGUgbWVhbmluZyBvZiBhIHBpY2tsZSBvcGNvZGUgbmV2ZXIgY2hhbmdlcy4gIEluc3RlYWQgbmV3Ci1waWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCi1waWNrbGUgb3Bjb2RlcyBpbiBhbGwgcHJvdG9jb2wgdmVyc2lvbnMgdG8gZGF0ZS4gIFNvIG9sZCBwaWNrbGVzIGNvbnRpbnVlIHRvCi1iZSByZWFkYWJsZSBmb3JldmVyLiAgVGhlIHBpY2tsZXIgY2FuIGdlbmVyYWxseSBiZSB0b2xkIHRvIHJlc3RyaWN0IGl0c2VsZiB0bwotdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKLXVzZXJzIGNhbiBjcmVhdGUgcGlja2xlcyB1bmRlciB0aGUgY3VycmVudCB2ZXJzaW9uIHJlYWRhYmxlIGJ5IG9sZGVyCi12ZXJzaW9ucy4gIEhvd2V2ZXIsIGEgcGlja2xlIGRvZXMgbm90IGNvbnRhaW4gaXRzIHZlcnNpb24gbnVtYmVyIGVtYmVkZGVkCi13aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCi1wcm90b2NvbCwgdGhlIHJlc3VsdCBpcyBtb3N0IGxpa2VseSBhbiBleGNlcHRpb24gZHVlIHRvIHNlZWluZyBhbiB1bmtub3duIChpbgotdGhlIG9sZGVyIHVucGlja2xlcikgb3Bjb2RlLgotCi1UaGUgb3JpZ2luYWwgcGlja2xlIHVzZWQgd2hhdCdzIG5vdyBjYWxsZWQgInByb3RvY29sIDAiLCBhbmQgd2hhdCB3YXMgY2FsbGVkCi0idGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgotcHJpbnRhYmxlIDctYml0IEFTQ0lJIGNoYXJhY3RlcnMsIHBsdXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLCBpbiBwcm90b2NvbCAwLgotVGhhdCdzIHdoeSBpdCB3YXMgY2FsbGVkIHRleHQgbW9kZS4gIFByb3RvY29sIDAgaXMgc21hbGwgYW5kIGVsZWdhbnQsIGJ1dAotc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KLQotVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAotImJpbmFyeSBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoaXMgYWRkZWQgbWFueSBvcGNvZGVzIHdpdGggYXJndW1lbnRzCi1jb25zaXN0aW5nIG9mIGFyYml0cmFyeSBieXRlcywgaW5jbHVkaW5nIE5VTCBieXRlcyBhbmQgdW5wcmludGFibGUgImhpZ2ggYml0IgotYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50Ci10ZXh0IG1vZGUgcGlja2xlcywgYW5kIHNvbWV0aW1lcyBmYXN0ZXIgdG9vOyBlLmcuLCBCSU5JTlQgcmVwcmVzZW50cyBhIDQtYnl0ZQotaW50IGFzIDQgYnl0ZXMgZm9sbG93aW5nIHRoZSBvcGNvZGUsIHdoaWNoIGlzIGNoZWFwZXIgdG8gdW5waWNrbGUgdGhhbiB0aGUKLShwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCi1hIG51bWJlciBvZiBvcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBtYW55IHN0YWNrIGVsZW1lbnRzIGF0IG9uY2UgKGxpa2UgQVBQRU5EUwotYW5kIFNFVElURU1TKSwgYW5kICJzaG9ydGN1dCIgb3Bjb2RlcyAobGlrZSBFTVBUWV9ESUNUIGFuZCBFTVBUWV9UVVBMRSkuCi0KLVRoZSB0aGlyZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGNhbWUgaW4gUHl0aG9uIDIuMywgYW5kIGlzIGNhbGxlZCAicHJvdG9jb2wKLTIiLiAgVGhpcyBhZGRlZDoKLQotLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KLQotLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCi0KLS0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgotCi0tIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgotCi0tIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgotCi0tIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAotICBlZmZpY2llbnRseSBieSBpbmRleCAoRVhUezEsMiw0fSkuICBUaGlzIGlzIGFraW4gdG8gdGhlIG1lbW8gYW5kIEdFVCwgYnV0Ci0gIHRoZSByZWdpc3RyeSBjb250ZW50cyBhcmUgcHJlZGVmaW5lZCAodGhlcmUncyBub3RoaW5nIGFraW4gdG8gdGhlIG1lbW8ncwotICBQVVQpLgotCi1Bbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQotcHJldGVuc2UgdGhhdCBpdCBtaWdodCBiZSBzYWZlIHRvIGxvYWQgcGlja2xlcyByZWNlaXZlZCBmcm9tIHVudHJ1c3RlZAotcGFydGllcyAtLSBubyBzdWZmaWNpZW50IHNlY3VyaXR5IGFuYWx5c2lzIGhhcyBiZWVuIGRvbmUgdG8gZ3VhcmFudGVlCi10aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgotYW5hbHlzaXMuCi0KLVRvIHRoaXMgZW5kLCBhbGwgdGVzdHMgZm9yIF9fc2FmZV9mb3JfdW5waWNrbGluZ19fIG9yIGZvcgotY29weXJlZy5zYWZlX2NvbnN0cnVjdG9ycyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSB1bnBpY2tsaW5nIGNvZGUuCi1SZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCi1hcyBkZXNjcmliaW5nIHVucGlja2xpbmcgaW4gUHl0aG9uIDIuMiBhbmQgYmVmb3JlLgotIiIiCiAKICMgTWV0YS1ydWxlOiAgRGVzY3JpcHRpb25zIGFyZSBzdG9yZWQgaW4gaW5zdGFuY2VzIG9mIGRlc2NyaXB0b3Igb2JqZWN0cywKICMgd2l0aCBwbGFpbiBjb25zdHJ1Y3RvcnMuICBObyBtZXRhLWxhbmd1YWdlIGlzIGRlZmluZWQgZnJvbSB3aGljaApAQCAtMTY5LDYgKzE2OSw3IEBACiBUQUtFTl9GUk9NX0FSR1VNRU5UMSAgPSAtMiAgICMgbnVtIGJ5dGVzIGlzIDEtYnl0ZSB1bnNpZ25lZCBpbnQKIFRBS0VOX0ZST01fQVJHVU1FTlQ0ICA9IC0zICAgIyBudW0gYnl0ZXMgaXMgNC1ieXRlIHNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAogVEFLRU5fRlJPTV9BUkdVTUVOVDRVID0gLTQgICAjIG51bSBieXRlcyBpcyA0LWJ5dGUgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKK1RBS0VOX0ZST01fQVJHVU1FTlQ4VSA9IC01ICAgIyBudW0gYnl0ZXMgaXMgOC1ieXRlIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CiAKIGNsYXNzIEFyZ3VtZW50RGVzY3JpcHRvcihvYmplY3QpOgogICAgIF9fc2xvdHNfXyA9ICgKQEAgLTE3Niw3ICsxNzcsNyBAQAogICAgICAgICAnbmFtZScsCiAKICAgICAgICAgIyBsZW5ndGggb2YgYXJndW1lbnQsIGluIGJ5dGVzOyBhbiBpbnQ7IFVQX1RPX05FV0xJTkUgYW5kCi0gICAgICAgICMgVEFLRU5fRlJPTV9BUkdVTUVOVHsxLDR9IGFyZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHZhcmlhYmxlLWxlbmd0aAorICAgICAgICAjIFRBS0VOX0ZST01fQVJHVU1FTlR7MSw0LDh9IGFyZSBuZWdhdGl2ZSB2YWx1ZXMgZm9yIHZhcmlhYmxlLWxlbmd0aAogICAgICAgICAjIGNhc2VzCiAgICAgICAgICduJywKIApAQCAtMTk3LDcgKzE5OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuIGluIChVUF9UT19ORVdMSU5FLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UNFUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UOFUpKQogICAgICAgICBzZWxmLm4gPSBuCiAKICAgICAgICAgc2VsZi5yZWFkZXIgPSByZWFkZXIKQEAgLTI4OSw2ICsyOTEsMjcgQEAKICAgICAgICAgICAgIGRvYz0iRm91ci1ieXRlIHVuc2lnbmVkIGludGVnZXIsIGxpdHRsZS1lbmRpYW4uIikKIAogCitkZWYgcmVhZF91aW50OChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiByZWFkX3VpbnQ4KGlvLkJ5dGVzSU8oYidceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcpKQorICAgIDI1NQorICAgID4+PiByZWFkX3VpbnQ4KGlvLkJ5dGVzSU8oYidceGZmJyAqIDgpKSA9PSAyKio2NC0xCisgICAgVHJ1ZQorICAgICIiIgorCisgICAgZGF0YSA9IGYucmVhZCg4KQorICAgIGlmIGxlbihkYXRhKSA9PSA4OgorICAgICAgICByZXR1cm4gX3VucGFjaygiPFEiLCBkYXRhKVswXQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vdCBlbm91Z2ggZGF0YSBpbiBzdHJlYW0gdG8gcmVhZCB1aW50OCIpCisKK3VpbnQ4ID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgbmFtZT0ndWludDgnLAorICAgICAgICAgICAgbj04LAorICAgICAgICAgICAgcmVhZGVyPXJlYWRfdWludDgsCisgICAgICAgICAgICBkb2M9IkVpZ2h0LWJ5dGUgdW5zaWduZWQgaW50ZWdlciwgbGl0dGxlLWVuZGlhbi4iKQorCisKIGRlZiByZWFkX3N0cmluZ25sKGYsIGRlY29kZT1UcnVlLCBzdHJpcHF1b3Rlcz1UcnVlKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtMzgyLDYgKzQwNSwzNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBibGFuayBzZXBhcmF0aW5nIHRoZSB0d28gc3RyaW5ncy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiKQogCisKK2RlZiByZWFkX3N0cmluZzEoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8KKyAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAwIikpCisgICAgJycKKyAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCisgICAgJ2FiYycKKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQxKGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIGRhdGEuZGVjb2RlKCJsYXRpbi0xIikKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHN0cmluZzEsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICAgICAgICAgICAgICAgKG4sIGxlbihkYXRhKSkpCisKK3N0cmluZzEgPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgIG5hbWU9InN0cmluZzEiLAorICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQxLAorICAgICAgICAgICAgICByZWFkZXI9cmVhZF9zdHJpbmcxLAorICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIHN0cmluZy4KKworICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAxLWJ5dGUgdW5zaWduZWQgaW50IGdpdmluZyB0aGUgbnVtYmVyCisgICAgICAgICAgICAgIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueQorICAgICAgICAgICAgICBieXRlcy4KKyAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX3N0cmluZzQoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTQxNiwyOCArNDY5LDI4IEBACiAgICAgICAgICAgICAgICIiIikKIAogCi1kZWYgcmVhZF9zdHJpbmcxKGYpOgorZGVmIHJlYWRfYnl0ZXMxKGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCi0gICAgPj4+IHJlYWRfc3RyaW5nMShpby5CeXRlc0lPKGIiXHgwMCIpKQotICAgICcnCi0gICAgPj4+IHJlYWRfc3RyaW5nMShpby5CeXRlc0lPKGIiXHgwM2FiY2RlZiIpKQotICAgICdhYmMnCisgICAgPj4+IHJlYWRfYnl0ZXMxKGlvLkJ5dGVzSU8oYiJceDAwIikpCisgICAgYicnCisgICAgPj4+IHJlYWRfYnl0ZXMxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCisgICAgYidhYmMnCiAgICAgIiIiCiAKICAgICBuID0gcmVhZF91aW50MShmKQogICAgIGFzc2VydCBuID49IDAKICAgICBkYXRhID0gZi5yZWFkKG4pCiAgICAgaWYgbGVuKGRhdGEpID09IG46Ci0gICAgICAgIHJldHVybiBkYXRhLmRlY29kZSgibGF0aW4tMSIpCi0gICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSBzdHJpbmcxLCBidXQgb25seSAlZCByZW1haW4iICUKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIGJ5dGVzMSwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCiAgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKIAotc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKLSAgICAgICAgICAgICAgbmFtZT0ic3RyaW5nMSIsCitieXRlczEgPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgIG5hbWU9ImJ5dGVzMSIsCiAgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCi0gICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3N0cmluZzEsCi0gICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgc3RyaW5nLgorICAgICAgICAgICAgICByZWFkZXI9cmVhZF9ieXRlczEsCisgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgYnl0ZXMgc3RyaW5nLgogCiAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nIHRoZSBudW1iZXIKICAgICAgICAgICAgICAgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhhdCBtYW55CkBAIC00ODcsNiArNTQwLDcgQEAKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQ0KGYpCisgICAgYXNzZXJ0IG4gPj0gMAogICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYnl0ZXM0IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKICAgICBkYXRhID0gZi5yZWFkKG4pCkBAIC01MDYsNiArNTYwLDQwIEBACiAgICAgICAgICAgICAgICIiIikKIAogCitkZWYgcmVhZF9ieXRlczgoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8sIHN0cnVjdCwgc3lzCisgICAgPj4+IHJlYWRfYnl0ZXM4KGlvLkJ5dGVzSU8oYiJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiYyIpKQorICAgIGInJworICAgID4+PiByZWFkX2J5dGVzOChpby5CeXRlc0lPKGIiXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBhYmNkZWYiKSkKKyAgICBiJ2FiYycKKyAgICA+Pj4gYmlnc2l6ZTggPSBzdHJ1Y3QucGFjaygiPFEiLCBzeXMubWF4c2l6ZS8vMykKKyAgICA+Pj4gcmVhZF9ieXRlczgoaW8uQnl0ZXNJTyhiaWdzaXplOCArIGIiYWJjZGVmIikpICAjZG9jdGVzdDogK0VMTElQU0lTCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGV4cGVjdGVkIC4uLiBieXRlcyBpbiBhIGJ5dGVzOCwgYnV0IG9ubHkgNiByZW1haW4KKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQ4KGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYnl0ZXM4IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBkYXRhCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSBieXRlczgsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICAgICAgICAgICAgICAgKG4sIGxlbihkYXRhKSkpCisKK2J5dGVzOCA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0iYnl0ZXM4IiwKKyAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UOFUsCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX2J5dGVzOCwKKyAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBieXRlcyBzdHJpbmcuCisKKyAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gdW5zaWduZWQgaW50IGdpdmluZworICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGF0IG1hbnkgYnl0ZXMuCisgICAgICAgICAgICAgICIiIikKKwogZGVmIHJlYWRfdW5pY29kZXN0cmluZ25sKGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC01MzEsNiArNjE5LDQ2IEBACiAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlIHNlcXVlbmNlcy4KICAgICAgICAgICAgICAgICAgICAgICAiIiIpCiAKKworZGVmIHJlYWRfdW5pY29kZXN0cmluZzEoZik6CisgICAgciIiIgorICAgID4+PiBpbXBvcnQgaW8KKyAgICA+Pj4gcyA9ICdhYmNkXHVhYmNkJworICAgID4+PiBlbmMgPSBzLmVuY29kZSgndXRmLTgnKQorICAgID4+PiBlbmMKKyAgICBiJ2FiY2RceGVhXHhhZlx4OGQnCisgICAgPj4+IG4gPSBieXRlcyhbbGVuKGVuYyldKSAgIyBsaXR0bGUtZW5kaWFuIDEtYnl0ZSBsZW5ndGgKKyAgICA+Pj4gdCA9IHJlYWRfdW5pY29kZXN0cmluZzEoaW8uQnl0ZXNJTyhuICsgZW5jICsgYidqdW5rJykpCisgICAgPj4+IHMgPT0gdAorICAgIFRydWUKKworICAgID4+PiByZWFkX3VuaWNvZGVzdHJpbmcxKGlvLkJ5dGVzSU8obiArIGVuY1s6LTFdKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgNyBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmcxLCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDEoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gc3RyKGRhdGEsICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmcxLCBidXQgb25seSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAicmVtYWluIiAlIChuLCBsZW4oZGF0YSkpKQorCit1bmljb2Rlc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0idW5pY29kZXN0cmluZzEiLAorICAgICAgICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQxLAorICAgICAgICAgICAgICAgICAgICByZWFkZXI9cmVhZF91bmljb2Rlc3RyaW5nMSwKKyAgICAgICAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBVbmljb2RlIHN0cmluZy4KKworICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSAxLWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICAgICAgICAgICAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50LS0gdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZyAtLQorICAgICAgICAgICAgICAgICAgICBjb250YWlucyB0aGF0IG1hbnkgYnl0ZXMuCisgICAgICAgICAgICAgICAgICAgICIiIikKKworCiBkZWYgcmVhZF91bmljb2Rlc3RyaW5nNChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNTUwLDYgKzY3OCw3IEBACiAgICAgIiIiCiAKICAgICBuID0gcmVhZF91aW50NChmKQorICAgIGFzc2VydCBuID49IDAKICAgICBpZiBuID4gc3lzLm1heHNpemU6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuaWNvZGVzdHJpbmc0IGJ5dGUgY291bnQgPiBzeXMubWF4c2l6ZTogJWQiICUgbikKICAgICBkYXRhID0gZi5yZWFkKG4pCkBAIC01NzEsNiArNzAwLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICIiIikKIAogCitkZWYgcmVhZF91bmljb2Rlc3RyaW5nOChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiBzID0gJ2FiY2RcdWFiY2QnCisgICAgPj4+IGVuYyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAgPj4+IGVuYworICAgIGInYWJjZFx4ZWFceGFmXHg4ZCcKKyAgICA+Pj4gbiA9IGJ5dGVzKFtsZW4oZW5jKV0pICsgYnl0ZXMoNykgICMgbGl0dGxlLWVuZGlhbiA4LWJ5dGUgbGVuZ3RoCisgICAgPj4+IHQgPSByZWFkX3VuaWNvZGVzdHJpbmc4KGlvLkJ5dGVzSU8obiArIGVuYyArIGInanVuaycpKQorICAgID4+PiBzID09IHQKKyAgICBUcnVlCisKKyAgICA+Pj4gcmVhZF91bmljb2Rlc3RyaW5nOChpby5CeXRlc0lPKG4gKyBlbmNbOi0xXSkpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGV4cGVjdGVkIDcgYnl0ZXMgaW4gYSB1bmljb2Rlc3RyaW5nOCwgYnV0IG9ubHkgNiByZW1haW4KKyAgICAiIiIKKworICAgIG4gPSByZWFkX3VpbnQ4KGYpCisgICAgYXNzZXJ0IG4gPj0gMAorICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5pY29kZXN0cmluZzggYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIHN0cihkYXRhLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpCisgICAgcmFpc2UgVmFsdWVFcnJvcigiZXhwZWN0ZWQgJWQgYnl0ZXMgaW4gYSB1bmljb2Rlc3RyaW5nOCwgYnV0IG9ubHkgJWQgIgorICAgICAgICAgICAgICAgICAgICAgInJlbWFpbiIgJSAobiwgbGVuKGRhdGEpKSkKKwordW5pY29kZXN0cmluZzggPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICAgICAgICAgIG5hbWU9InVuaWNvZGVzdHJpbmc4IiwKKyAgICAgICAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UOFUsCisgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3VuaWNvZGVzdHJpbmc4LAorICAgICAgICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIFVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDgtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgICAgICAgICAgICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQtLSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nIC0tCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX2RlY2ltYWxubF9zaG9ydChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtODYwLDYgKzEwMzAsMTYgQEAKICAgICAgICAgICAgICBvYnR5cGU9ZGljdCwKICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGRpY3Qgb2JqZWN0LiIpCiAKK3B5c2V0ID0gU3RhY2tPYmplY3QoCisgICAgICAgICAgICBuYW1lPSJzZXQiLAorICAgICAgICAgICAgb2J0eXBlPXNldCwKKyAgICAgICAgICAgIGRvYz0iQSBQeXRob24gc2V0IG9iamVjdC4iKQorCitweWZyb3plbnNldCA9IFN0YWNrT2JqZWN0KAorICAgICAgICAgICAgICAgICAgbmFtZT0iZnJvemVuc2V0IiwKKyAgICAgICAgICAgICAgICAgIG9idHlwZT1zZXQsCisgICAgICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGZyb3plbnNldCBvYmplY3QuIikKKwogYW55b2JqZWN0ID0gU3RhY2tPYmplY3QoCiAgICAgICAgICAgICAgICAgbmFtZT0nYW55JywKICAgICAgICAgICAgICAgICBvYnR5cGU9b2JqZWN0LApAQCAtMTE0Myw2ICsxMzIzLDE5IEBACiAgICAgICBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nQklOQllURVM4JywKKyAgICAgIGNvZGU9J1x4OGUnLAorICAgICAgYXJnPWJ5dGVzOCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWJ5dGVzXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBieXRlcyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgOC1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55IGJ5dGVzLAorICAgICAgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIHNwZWxsIE5vbmUuCiAKICAgICBJKG5hbWU9J05PTkUnLApAQCAtMTE5MSw2ICsxMzg0LDE5IEBACiAgICAgICB1bnRpbCB0aGUgbmV4dCBuZXdsaW5lIGNoYXJhY3Rlci4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J1NIT1JUX0JJTlVOSUNPREUnLAorICAgICAgY29kZT0nXHg4YycsCisgICAgICBhcmc9dW5pY29kZXN0cmluZzEsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHl1bmljb2RlXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBVbmljb2RlIHN0cmluZyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgMS1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZy4gIFRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCisgICAgICAiIiIpLAorCiAgICAgSShuYW1lPSdCSU5VTklDT0RFJywKICAgICAgIGNvZGU9J1gnLAogICAgICAgYXJnPXVuaWNvZGVzdHJpbmc0LApAQCAtMTIwNCw2ICsxNDEwLDE5IEBACiAgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdCSU5VTklDT0RFOCcsCisgICAgICBjb2RlPSdceDhkJywKKyAgICAgIGFyZz11bmljb2Rlc3RyaW5nOCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXVuaWNvZGVdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nIG9iamVjdC4KKworICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6ICB0aGUgZmlyc3QgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiBzaWduZWQgaW50CisgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLiAgVGhlIHNlY29uZCBpcyB0aGF0IG1hbnkKKyAgICAgIGJ5dGVzLCBhbmQgaXMgdGhlIFVURi04IGVuY29kaW5nIG9mIHRoZSBVbmljb2RlIHN0cmluZy4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gc3BlbGwgZmxvYXRzLgogCiAgICAgSShuYW1lPSdGTE9BVCcsCkBAIC0xNDI5LDYgKzE2NDgsNTQgQEAKICAgICAgIDEsIDIsIC4uLiwgbiwgYW5kIGluIHRoYXQgb3JkZXIuCiAgICAgICAiIiIpLAogCisgICAgIyBXYXlzIHRvIGJ1aWxkIHNldHMKKworICAgIEkobmFtZT0nRU1QVFlfU0VUJywKKyAgICAgIGNvZGU9J1x4OGYnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHlzZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iUHVzaCBhbiBlbXB0eSBzZXQuIiksCisKKyAgICBJKG5hbWU9J0FERElURU1TJywKKyAgICAgIGNvZGU9J1x4OTAnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W3B5c2V0LCBtYXJrb2JqZWN0LCBzdGFja3NsaWNlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweXNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkFkZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGl0ZW1zIHRvIGFuIGV4aXN0aW5nIHNldC4KKworICAgICAgVGhlIHNsaWNlIG9mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdCBpcyB0YWtlbiBhcworICAgICAgYSBzZXF1ZW5jZSBvZiBpdGVtcywgYWRkZWQgdG8gdGhlIHNldCBpbW1lZGlhdGVseSB1bmRlciB0aGUgdG9wbW9zdAorICAgICAgbWFya29iamVjdC4gIEV2ZXJ5dGhpbmcgYXQgYW5kIGFmdGVyIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgaXMgcG9wcGVkLAorICAgICAgbGVhdmluZyB0aGUgbXV0YXRlZCBzZXQgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2suCisKKyAgICAgIFN0YWNrIGJlZm9yZTogIC4uLiBweXNldCBtYXJrb2JqZWN0IGl0ZW1fMSAuLi4gaXRlbV9uCisgICAgICBTdGFjayBhZnRlcjogICAuLi4gcHlzZXQKKworICAgICAgd2hlcmUgcHlzZXQgaGFzIGJlZW4gbW9kaWZpZWQgdmlhIHB5c2V0LmFkZChpdGVtX2kpID0gaXRlbV9pIGZvciBpIGluCisgICAgICAxLCAyLCAuLi4sIG4sIGFuZCBpbiB0aGF0IG9yZGVyLgorICAgICAgIiIiKSwKKworICAgICMgV2F5IHRvIGJ1aWxkIGZyb3plbnNldHMKKworICAgIEkobmFtZT0nRlJPWkVOU0VUJywKKyAgICAgIGNvZGU9J1x4OTEnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W21hcmtvYmplY3QsIHN0YWNrc2xpY2VdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5ZnJvemVuc2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQnVpbGQgYSBmcm96ZW5zZXQgb3V0IG9mIHRoZSB0b3Btb3N0IHNsaWNlLCBhZnRlciBtYXJrb2JqZWN0LgorCisgICAgICBBbGwgdGhlIHN0YWNrIGVudHJpZXMgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgYXJlIHBsYWNlZCBpbnRvCisgICAgICBhIHNpbmdsZSBQeXRob24gZnJvemVuc2V0LCB3aGljaCBzaW5nbGUgZnJvemVuc2V0IG9iamVjdCByZXBsYWNlcyBhbGwKKyAgICAgIG9mIHRoZSBzdGFjayBmcm9tIHRoZSB0b3Btb3N0IG1hcmtvYmplY3Qgb253YXJkLiAgRm9yIGV4YW1wbGUsCisKKyAgICAgIFN0YWNrIGJlZm9yZTogLi4uIG1hcmtvYmplY3QgMSAyIDMKKyAgICAgIFN0YWNrIGFmdGVyOiAgLi4uIGZyb3plbnNldCh7MSwgMiwgM30pCisgICAgICAiIiIpLAorCiAgICAgIyBTdGFjayBtYW5pcHVsYXRpb24uCiAKICAgICBJKG5hbWU9J1BPUCcsCkBAIC0xNTUwLDYgKzE4MTcsMTggQEAKICAgICAgIHVuc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBmb2xsb3dpbmcuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdNRU1PSVpFJywKKyAgICAgIGNvZGU9J1x4OTQnLAorICAgICAgYXJnPU5vbmUsCisgICAgICBzdGFja19iZWZvcmU9W2FueW9iamVjdF0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiU3RvcmUgdGhlIHN0YWNrIHRvcCBpbnRvIHRoZSBtZW1vLiAgVGhlIHN0YWNrIGlzIG5vdCBwb3BwZWQuCisKKyAgICAgIFRoZSBpbmRleCBvZiB0aGUgbWVtbyBsb2NhdGlvbiB0byB3cml0ZSBpcyB0aGUgbnVtYmVyIG9mCisgICAgICBlbGVtZW50cyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgbWVtby4KKyAgICAgICIiIiksCisKICAgICAjIEFjY2VzcyB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IChwcmVkZWZpbmVkIG9iamVjdHMpLiAgQWtpbiB0byB0aGUgR0VUCiAgICAgIyBmYW1pbHkuCiAKQEAgLTE2MTUsNiArMTg5NCwxNSBAQAogICAgICAgc3RhY2ssIHNvIHVucGlja2xpbmcgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyBmb3JtIG9mIGxvb2t1cC4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J1NUQUNLX0dMT0JBTCcsCisgICAgICBjb2RlPSdceDkzJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtweXVuaWNvZGUsIHB5dW5pY29kZV0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTAsCisgICAgICBkb2M9IiIiUHVzaCBhIGdsb2JhbCBvYmplY3QgKG1vZHVsZS5hdHRyKSBvbiB0aGUgc3RhY2suCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIGJ1aWxkIG9iamVjdHMgb2YgY2xhc3NlcyBwaWNrbGUgZG9lc24ndCBrbm93IGFib3V0IGRpcmVjdGx5CiAgICAgIyAodXNlci1kZWZpbmVkIGNsYXNzZXMpLiAgSSBkZXNwYWlyIG9mIGRvY3VtZW50aW5nIHRoaXMgYWNjdXJhdGVseQogICAgICMgYW5kIGNvbXByZWhlbnNpYmx5IC0tIHlvdSByZWFsbHkgaGF2ZSB0byByZWFkIHRoZSBwaWNrbGUgY29kZSB0bwpAQCAtMTc3MSw2ICsyMDU5LDIxIEBACiAgICAgICBvbnRvIHRoZSBzdGFjay4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J05FV09CSl9FWCcsCisgICAgICBjb2RlPSdceDkyJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVthbnlvYmplY3QsIGFueW9iamVjdCwgYW55b2JqZWN0XSwKKyAgICAgIHN0YWNrX2FmdGVyPVthbnlvYmplY3RdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJCdWlsZCBhbiBvYmplY3QgaW5zdGFuY2UuCisKKyAgICAgIFRoZSBzdGFjayBiZWZvcmUgc2hvdWxkIGJlIHRob3VnaHQgb2YgYXMgY29udGFpbmluZyBhIGNsYXNzCisgICAgICBvYmplY3QgZm9sbG93ZWQgYnkgYW4gYXJndW1lbnQgdHVwbGUgYW5kIGJ5IGEga2V5d29yZCBhcmd1bWVudCBkaWN0CisgICAgICAodGhlIGRpY3QgYmVpbmcgdGhlIHN0YWNrIHRvcCkuICBDYWxsIHRoZXNlIGNscyBhbmQgYXJncy4gIFRoZXkgYXJlCisgICAgICBwb3BwZWQgb2ZmIHRoZSBzdGFjaywgYW5kIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgICAgY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKmt3YXJncykgaXMgIHB1c2hlZCBiYWNrICBvbnRvIHRoZSBzdGFjay4KKyAgICAgICIiIiksCisKICAgICAjIE1hY2hpbmUgY29udHJvbC4KIAogICAgIEkobmFtZT0nUFJPVE8nLApAQCAtMTc5OCw2ICsyMTAxLDIwIEBACiAgICAgICBlbXB0eSB0aGVuLgogICAgICAgIiIiKSwKIAorICAgICMgRnJhbWluZyBzdXBwb3J0LgorCisgICAgSShuYW1lPSdGUkFNRScsCisgICAgICBjb2RlPSdceDk1JywKKyAgICAgIGFyZz11aW50OCwKKyAgICAgIHN0YWNrX2JlZm9yZT1bXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJJbmRpY2F0ZSB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGZyYW1lLgorCisgICAgICBUaGUgdW5waWNrbGVyIG1heSB1c2UgdGhpcyBvcGNvZGUgdG8gc2FmZWx5IHByZWZldGNoIGRhdGEgZnJvbSBpdHMKKyAgICAgIHVuZGVybHlpbmcgc3RyZWFtLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBkZWFsIHdpdGggcGVyc2lzdGVudCBJRHMuCiAKICAgICBJKG5hbWU9J1BFUlNJRCcsCkBAIC0xOTA0LDYgKzIyMjEsMzggQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHBpY2tsZSBvcGNvZGUgZ2VuZXJhdG9yLgogCitkZWYgX2dlbm9wcyhkYXRhLCB5aWVsZF9lbmRfcG9zPUZhbHNlKToKKyAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGJ5dGVzX3R5cGVzKToKKyAgICAgICAgZGF0YSA9IGlvLkJ5dGVzSU8oZGF0YSkKKworICAgIGlmIGhhc2F0dHIoZGF0YSwgInRlbGwiKToKKyAgICAgICAgZ2V0cG9zID0gZGF0YS50ZWxsCisgICAgZWxzZToKKyAgICAgICAgZ2V0cG9zID0gbGFtYmRhOiBOb25lCisKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwb3MgPSBnZXRwb3MoKQorICAgICAgICBjb2RlID0gZGF0YS5yZWFkKDEpCisgICAgICAgIG9wY29kZSA9IGNvZGUyb3AuZ2V0KGNvZGUuZGVjb2RlKCJsYXRpbi0xIikpCisgICAgICAgIGlmIG9wY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgY29kZSA9PSBiIiI6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgc2VlaW5nIFNUT1AiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdCBwb3NpdGlvbiAlcywgb3Bjb2RlICVyIHVua25vd24iICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjx1bmtub3duPiIgaWYgcG9zIGlzIE5vbmUgZWxzZSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKSkKKyAgICAgICAgaWYgb3Bjb2RlLmFyZyBpcyBOb25lOgorICAgICAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJnID0gb3Bjb2RlLmFyZy5yZWFkZXIoZGF0YSkKKyAgICAgICAgaWYgeWllbGRfZW5kX3BvczoKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MsIGdldHBvcygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zCisgICAgICAgIGlmIGNvZGUgPT0gYicuJzoKKyAgICAgICAgICAgIGFzc2VydCBvcGNvZGUubmFtZSA9PSAnU1RPUCcKKyAgICAgICAgICAgIGJyZWFrCisKIGRlZiBnZW5vcHMocGlja2xlKToKICAgICAiIiJHZW5lcmF0ZSBhbGwgdGhlIG9wY29kZXMgaW4gYSBwaWNrbGUuCiAKQEAgLTE5MjcsNjIgKzIyNzYsNDggQEAKICAgICB1c2VkLiAgRWxzZSAodGhlIHBpY2tsZSBkb2Vzbid0IGhhdmUgYSB0ZWxsKCksIGFuZCBpdCdzIG5vdCBvYnZpb3VzIGhvdwogICAgIHRvIHF1ZXJ5IGl0cyBjdXJyZW50IHBvc2l0aW9uKSBwb3MgaXMgTm9uZS4KICAgICAiIiIKLQotICAgIGlmIGlzaW5zdGFuY2UocGlja2xlLCBieXRlc190eXBlcyk6Ci0gICAgICAgIGltcG9ydCBpbwotICAgICAgICBwaWNrbGUgPSBpby5CeXRlc0lPKHBpY2tsZSkKLQotICAgIGlmIGhhc2F0dHIocGlja2xlLCAidGVsbCIpOgotICAgICAgICBnZXRwb3MgPSBwaWNrbGUudGVsbAotICAgIGVsc2U6Ci0gICAgICAgIGdldHBvcyA9IGxhbWJkYTogTm9uZQotCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgcG9zID0gZ2V0cG9zKCkKLSAgICAgICAgY29kZSA9IHBpY2tsZS5yZWFkKDEpCi0gICAgICAgIG9wY29kZSA9IGNvZGUyb3AuZ2V0KGNvZGUuZGVjb2RlKCJsYXRpbi0xIikpCi0gICAgICAgIGlmIG9wY29kZSBpcyBOb25lOgotICAgICAgICAgICAgaWYgY29kZSA9PSBiIiI6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgc2VlaW5nIFNUT1AiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhdCBwb3NpdGlvbiAlcywgb3Bjb2RlICVyIHVua25vd24iICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zIGlzIE5vbmUgYW5kICI8dW5rbm93bj4iIG9yIHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUpKQotICAgICAgICBpZiBvcGNvZGUuYXJnIGlzIE5vbmU6Ci0gICAgICAgICAgICBhcmcgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBhcmcgPSBvcGNvZGUuYXJnLnJlYWRlcihwaWNrbGUpCi0gICAgICAgIHlpZWxkIG9wY29kZSwgYXJnLCBwb3MKLSAgICAgICAgaWYgY29kZSA9PSBiJy4nOgotICAgICAgICAgICAgYXNzZXJ0IG9wY29kZS5uYW1lID09ICdTVE9QJwotICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gX2dlbm9wcyhwaWNrbGUpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBBIHBpY2tsZSBvcHRpbWl6ZXIuCiAKIGRlZiBvcHRpbWl6ZShwKToKICAgICAnT3B0aW1pemUgYSBwaWNrbGUgc3RyaW5nIGJ5IHJlbW92aW5nIHVudXNlZCBQVVQgb3Bjb2RlcycKLSAgICBnZXRzID0gc2V0KCkgICAgICAgICAgICAjIHNldCBvZiBhcmdzIHVzZWQgYnkgYSBHRVQgb3Bjb2RlCi0gICAgcHV0cyA9IFtdICAgICAgICAgICAgICAgIyAoYXJnLCBzdGFydHBvcywgc3RvcHBvcykgZm9yIHRoZSBQVVQgb3Bjb2RlcwotICAgIHByZXZwb3MgPSBOb25lICAgICAgICAgICMgc2V0IHRvIHBvcyBpZiBwcmV2aW91cyBvcGNvZGUgd2FzIGEgUFVUCi0gICAgZm9yIG9wY29kZSwgYXJnLCBwb3MgaW4gZ2Vub3BzKHApOgotICAgICAgICBpZiBwcmV2cG9zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHV0cy5hcHBlbmQoKHByZXZhcmcsIHByZXZwb3MsIHBvcykpCi0gICAgICAgICAgICBwcmV2cG9zID0gTm9uZQorICAgIG5vdF9hX3B1dCA9IG9iamVjdCgpCisgICAgZ2V0cyA9IHsgbm90X2FfcHV0IH0gICAgIyBzZXQgb2YgYXJncyB1c2VkIGJ5IGEgR0VUIG9wY29kZQorICAgIG9wY29kZXMgPSBbXSAgICAgICAgICAgICMgKHN0YXJ0cG9zLCBzdG9wcG9zLCBwdXRpZCkKKyAgICBwcm90byA9IDAKKyAgICBmb3Igb3Bjb2RlLCBhcmcsIHBvcywgZW5kX3BvcyBpbiBfZ2Vub3BzKHAsIHlpZWxkX2VuZF9wb3M9VHJ1ZSk6CiAgICAgICAgIGlmICdQVVQnIGluIG9wY29kZS5uYW1lOgotICAgICAgICAgICAgcHJldmFyZywgcHJldnBvcyA9IGFyZywgcG9zCi0gICAgICAgIGVsaWYgJ0dFVCcgaW4gb3Bjb2RlLm5hbWU6Ci0gICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocG9zLCBlbmRfcG9zLCBhcmcpKQorICAgICAgICBlbGlmICdGUkFNRScgaW4gb3Bjb2RlLm5hbWU6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiAnR0VUJyBpbiBvcGNvZGUubmFtZToKKyAgICAgICAgICAgICAgICBnZXRzLmFkZChhcmcpCisgICAgICAgICAgICBlbGlmIG9wY29kZS5uYW1lID09ICdQUk9UTyc6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHBvcyA9PSAwLCBwb3MKKyAgICAgICAgICAgICAgICBwcm90byA9IGFyZworICAgICAgICAgICAgb3Bjb2Rlcy5hcHBlbmQoKHBvcywgZW5kX3Bvcywgbm90X2FfcHV0KSkKKyAgICAgICAgICAgIHByZXZwb3MsIHByZXZhcmcgPSBwb3MsIE5vbmUKIAotICAgICMgQ29weSB0aGUgcGlja2xlIHN0cmluZyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCi0gICAgcyA9IFtdCi0gICAgaSA9IDAKLSAgICBmb3IgYXJnLCBzdGFydCwgc3RvcCBpbiBwdXRzOgotICAgICAgICBqID0gc3RvcCBpZiAoYXJnIGluIGdldHMpIGVsc2Ugc3RhcnQKLSAgICAgICAgcy5hcHBlbmQocFtpOmpdKQotICAgICAgICBpID0gc3RvcAotICAgIHMuYXBwZW5kKHBbaTpdKQotICAgIHJldHVybiBiJycuam9pbihzKQorICAgICMgQ29weSB0aGUgb3Bjb2RlcyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCisgICAgb3V0ID0gaW8uQnl0ZXNJTygpCisgICAgb3Bjb2RlcyA9IGl0ZXIob3Bjb2RlcykKKyAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAjIFdyaXRlIHRoZSBQUk9UTyBoZWFkZXIgYmVmb3JlIGFueSBmcmFtaW5nCisgICAgICAgIHN0YXJ0LCBzdG9wLCBfID0gbmV4dChvcGNvZGVzKQorICAgICAgICBvdXQud3JpdGUocFtzdGFydDpzdG9wXSkKKyAgICBidWYgPSBwaWNrbGUuX0ZyYW1lcihvdXQud3JpdGUpCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgYnVmLnN0YXJ0X2ZyYW1pbmcoKQorICAgIGZvciBzdGFydCwgc3RvcCwgcHV0aWQgaW4gb3Bjb2RlczoKKyAgICAgICAgaWYgcHV0aWQgaW4gZ2V0czoKKyAgICAgICAgICAgIGJ1Zi5jb21taXRfZnJhbWUoKQorICAgICAgICAgICAgYnVmLndyaXRlKHBbc3RhcnQ6c3RvcF0pCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgYnVmLmVuZF9mcmFtaW5nKCkKKyAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgc3ltYm9saWMgcGlja2xlIGRpc2Fzc2VtYmxlci4KQEAgLTIwODIsMTcgKzI0MTcsMjAgQEAKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9IG1hcmttc2cgPSAibm8gTUFSSyBleGlzdHMgb24gc3RhY2siCiAKICAgICAgICAgIyBDaGVjayBmb3IgY29ycmVjdCBtZW1vIHVzYWdlLgotICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiKToKLSAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKLSAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgorICAgICAgICBpZiBvcGNvZGUubmFtZSBpbiAoIlBVVCIsICJCSU5QVVQiLCAiTE9OR19CSU5QVVQiLCAiTUVNT0laRSIpOgorICAgICAgICAgICAgaWYgb3Bjb2RlLm5hbWUgPT0gIk1FTU9JWkUiOgorICAgICAgICAgICAgICAgIG1lbW9faWR4ID0gbGVuKG1lbW8pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBhcmcgaXMgbm90IE5vbmUKKyAgICAgICAgICAgICAgICBtZW1vX2lkeCA9IGFyZworICAgICAgICAgICAgaWYgbWVtb19pZHggaW4gbWVtbzoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJtZW1vIGtleSAlciBhbHJlYWR5IGRlZmluZWQiICUgYXJnCiAgICAgICAgICAgICBlbGlmIG5vdCBzdGFjazoKICAgICAgICAgICAgICAgICBlcnJvcm1zZyA9ICJzdGFjayBpcyBlbXB0eSAtLSBjYW4ndCBzdG9yZSBpbnRvIG1lbW8iCiAgICAgICAgICAgICBlbGlmIHN0YWNrWy0xXSBpcyBtYXJrb2JqZWN0OgogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gImNhbid0IHN0b3JlIG1hcmtvYmplY3QgaW4gdGhlIG1lbW8iCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1lbW9bYXJnXSA9IHN0YWNrWy0xXQotCisgICAgICAgICAgICAgICAgbWVtb1ttZW1vX2lkeF0gPSBzdGFja1stMV0KICAgICAgICAgZWxpZiBvcGNvZGUubmFtZSBpbiAoIkdFVCIsICJCSU5HRVQiLCAiTE9OR19CSU5HRVQiKToKICAgICAgICAgICAgIGlmIGFyZyBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4oYWZ0ZXIpID09IDEKZGlmZiAtLWdpdCBhL0xpYi9wa2d1dGlsLnB5IGIvTGliL3BrZ3V0aWwucHkKaW5kZXggMjBlNjQ5OC4uNDY4MmQyMiAxMDA2NDQKLS0tIGEvTGliL3BrZ3V0aWwucHkKKysrIGIvTGliL3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTQgQEAKICIiIlV0aWxpdGllcyB0byBzdXBwb3J0IHBhY2thZ2VzLiIiIgogCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaCBhcyBzaW1wbGVnZW5lcmljCiBpbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCi1mcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCitpbXBvcnQgc3lzCiBmcm9tIHR5cGVzIGltcG9ydCBNb2R1bGVUeXBlCitpbXBvcnQgd2FybmluZ3MKIAogX19hbGxfXyA9IFsKICAgICAnZ2V0X2ltcG9ydGVyJywgJ2l0ZXJfaW1wb3J0ZXJzJywgJ2dldF9sb2FkZXInLCAnZmluZF9sb2FkZXInLApAQCAtMjAsNTMgKzIyLDEzIEBACiAgICAgaW1wb3J0IG1hcnNoYWwKIAogICAgIG1hZ2ljID0gc3RyZWFtLnJlYWQoNCkKLSAgICBpZiBtYWdpYyAhPSBpbXAuZ2V0X21hZ2ljKCk6CisgICAgaWYgbWFnaWMgIT0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSOgogICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgc3RyZWFtLnJlYWQoOCkgIyBTa2lwIHRpbWVzdGFtcCBhbmQgc2l6ZQogICAgIHJldHVybiBtYXJzaGFsLmxvYWQoc3RyZWFtKQogCiAKLWRlZiBzaW1wbGVnZW5lcmljKGZ1bmMpOgotICAgICIiIk1ha2UgYSB0cml2aWFsIHNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9uIiIiCi0gICAgcmVnaXN0cnkgPSB7fQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3KToKLSAgICAgICAgb2IgPSBhcmdzWzBdCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNscyA9IG9iLl9fY2xhc3NfXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBjbHMgPSB0eXBlKG9iKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtcm8gPSBjbHMuX19tcm9fXwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2xhc3MgY2xzKGNscywgb2JqZWN0KToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIG1ybyA9IGNscy5fX21yb19fWzE6XQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBtcm8gPSBvYmplY3QsICAgIyBtdXN0IGJlIGFuIEV4dGVuc2lvbkNsYXNzIG9yIHNvbWUgc3VjaCAgOigKLSAgICAgICAgZm9yIHQgaW4gbXJvOgotICAgICAgICAgICAgaWYgdCBpbiByZWdpc3RyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVnaXN0cnlbdF0oKmFyZ3MsICoqa3cpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprdykKLSAgICB0cnk6Ci0gICAgICAgIHdyYXBwZXIuX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCi0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgcGFzcyAgICAjIFB5dGhvbiAyLjMgZG9lc24ndCBhbGxvdyBmdW5jdGlvbnMgdG8gYmUgcmVuYW1lZAotCi0gICAgZGVmIHJlZ2lzdGVyKHR5cCwgZnVuYz1Ob25lKToKLSAgICAgICAgaWYgZnVuYyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3Rlcih0eXAsIGYpCi0gICAgICAgIHJlZ2lzdHJ5W3R5cF0gPSBmdW5jCi0gICAgICAgIHJldHVybiBmdW5jCi0KLSAgICB3cmFwcGVyLl9fZGljdF9fID0gZnVuYy5fX2RpY3RfXwotICAgIHdyYXBwZXIuX19kb2NfXyA9IGZ1bmMuX19kb2NfXwotICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgotICAgIHJldHVybiB3cmFwcGVyCi0KLQogZGVmIHdhbGtfcGFja2FnZXMocGF0aD1Ob25lLCBwcmVmaXg9JycsIG9uZXJyb3I9Tm9uZSk6CiAgICAgIiIiWWllbGRzIChtb2R1bGVfbG9hZGVyLCBuYW1lLCBpc3BrZykgZm9yIGFsbCBtb2R1bGVzIHJlY3Vyc2l2ZWx5CiAgICAgb24gcGF0aCwgb3IsIGlmIHBhdGggaXMgTm9uZSwgYWxsIGFjY2Vzc2libGUgbW9kdWxlcy4KQEAgLTEyMSw4ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgIyBkb24ndCB0cmF2ZXJzZSBwYXRoIGl0ZW1zIHdlJ3ZlIHNlZW4gYmVmb3JlCiAgICAgICAgICAgICAgICAgcGF0aCA9IFtwIGZvciBwIGluIHBhdGggaWYgbm90IHNlZW4ocCldCiAKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiB3YWxrX3BhY2thZ2VzKHBhdGgsIG5hbWUrJy4nLCBvbmVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgaXRlbQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2Fsa19wYWNrYWdlcyhwYXRoLCBuYW1lKycuJywgb25lcnJvcikKIAogCiBkZWYgaXRlcl9tb2R1bGVzKHBhdGg9Tm9uZSwgcHJlZml4PScnKToKQEAgLTE0OSwxMyArMTEwLDEyIEBACiAgICAgICAgICAgICAgICAgeWllbGQgaSwgbmFtZSwgaXNwa2cKIAogCi0jQHNpbXBsZWdlbmVyaWMKK0BzaW1wbGVnZW5lcmljCiBkZWYgaXRlcl9pbXBvcnRlcl9tb2R1bGVzKGltcG9ydGVyLCBwcmVmaXg9JycpOgogICAgIGlmIG5vdCBoYXNhdHRyKGltcG9ydGVyLCAnaXRlcl9tb2R1bGVzJyk6CiAgICAgICAgIHJldHVybiBbXQogICAgIHJldHVybiBpbXBvcnRlci5pdGVyX21vZHVsZXMocHJlZml4KQogCi1pdGVyX2ltcG9ydGVyX21vZHVsZXMgPSBzaW1wbGVnZW5lcmljKGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcykKIAogIyBJbXBsZW1lbnQgYSBmaWxlIHdhbGtlciBmb3IgdGhlIG5vcm1hbCBpbXBvcnRsaWIgcGF0aCBob29rCiBkZWYgX2l0ZXJfZmlsZV9maW5kZXJfbW9kdWxlcyhpbXBvcnRlciwgcHJlZml4PScnKToKQEAgLTIwMSw2ICsxNjEsMTMgQEAKIGl0ZXJfaW1wb3J0ZXJfbW9kdWxlcy5yZWdpc3RlcigKICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIsIF9pdGVyX2ZpbGVfZmluZGVyX21vZHVsZXMpCiAKKworZGVmIF9pbXBvcnRfaW1wKCk6CisgICAgZ2xvYmFsIGltcAorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXAgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnaW1wJykKKwogY2xhc3MgSW1wSW1wb3J0ZXI6CiAgICAgIiIiUEVQIDMwMiBJbXBvcnRlciB0aGF0IHdyYXBzIFB5dGhvbidzICJjbGFzc2ljIiBpbXBvcnQgYWxnb3JpdGhtCiAKQEAgLTIxMyw4ICsxODAsMTAgQEAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUpOgotICAgICAgICB3YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCisgICAgICAgIGdsb2JhbCBpbXAKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAogICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CkBAIC0yNzksOCArMjQ4LDkgQEAKICAgICBjb2RlID0gc291cmNlID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZXRjKToKLSAgICAgICAgd2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAotICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhpcyBlbXVsYXRpb24gaXMgZGVwcmVjYXRlZCwgdXNlICdpbXBvcnRsaWInIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgX2ltcG9ydF9pbXAoKQogICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQogICAgICAgICBzZWxmLmZ1bGxuYW1lID0gZnVsbG5hbWUKQEAgLTM1MCw5ICszMjAsOCBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQogICAgICAgICAgICAgZWxpZiBtb2RfdHlwZT09aW1wLlBZX0NPTVBJTEVEOgogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZW5hbWVbOi0xXSk6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWVbOi0xXSwgJ3InKQotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGYucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZVs6LTFdLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IGYucmVhZCgpCiAgICAgICAgICAgICBlbGlmIG1vZF90eXBlPT1pbXAuUEtHX0RJUkVDVE9SWToKICAgICAgICAgICAgICAgICBzZWxmLnNvdXJjZSA9IHNlbGYuX2dldF9kZWxlZ2F0ZSgpLmdldF9zb3VyY2UoKQogICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKQEAgLTQ1NiwxMiArNDI1LDEyIEBACiAgICAgICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgIGVsc2U6Ci0gICAgICAgIGZvciBpbXBvcnRlciBpbiBzeXMubWV0YV9wYXRoOgotICAgICAgICAgICAgeWllbGQgaW1wb3J0ZXIKKyAgICAgICAgeWllbGQgZnJvbSBzeXMubWV0YV9wYXRoCiAgICAgICAgIHBhdGggPSBzeXMucGF0aAogICAgIGZvciBpdGVtIGluIHBhdGg6CiAgICAgICAgIHlpZWxkIGdldF9pbXBvcnRlcihpdGVtKQogCisKIGRlZiBnZXRfbG9hZGVyKG1vZHVsZV9vcl9uYW1lKToKICAgICAiIiJHZXQgYSBQRVAgMzAyICJsb2FkZXIiIG9iamVjdCBmb3IgbW9kdWxlX29yX25hbWUKIApAQCAtNTg5LDE5ICs1NTgsMjAgQEAKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGtnZmlsZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ocGtnZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBvcGVuICVzOiAlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnZmlsZSwgbXNnKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQobGluZSkgIyBEb24ndCBjaGVjayBmb3IgZXhpc3RlbmNlIQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKIAogICAgIHJldHVybiBwYXRoCiAKKwogZGVmIGdldF9kYXRhKHBhY2thZ2UsIHJlc291cmNlKToKICAgICAiIiJHZXQgYSByZXNvdXJjZSBmcm9tIGEgcGFja2FnZS4KIApAQCAtNjI0LDEwICs1OTQsMTUgQEAKICAgICB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGdldF9kYXRhKCksIHRoZW4gTm9uZSBpcyByZXR1cm5lZC4KICAgICAiIiIKIAotICAgIGxvYWRlciA9IGdldF9sb2FkZXIocGFja2FnZSkKKyAgICBzcGVjID0gaW1wb3J0bGliLmZpbmRfc3BlYyhwYWNrYWdlKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgogICAgIGlmIGxvYWRlciBpcyBOb25lIG9yIG5vdCBoYXNhdHRyKGxvYWRlciwgJ2dldF9kYXRhJyk6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yIGxvYWRlci5sb2FkX21vZHVsZShwYWNrYWdlKQorICAgICMgWFhYIG5lZWRzIHRlc3QKKyAgICBtb2QgPSAoc3lzLm1vZHVsZXMuZ2V0KHBhY2thZ2UpIG9yCisgICAgICAgICAgIGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5sb2FkKCkpCiAgICAgaWYgbW9kIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIobW9kLCAnX19maWxlX18nKToKICAgICAgICAgcmV0dXJuIE5vbmUKIApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L0lOLnB5IGIvTGliL3BsYXQtb3MyZW14L0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNhZTI0Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9uZXRpbmV0L2luLmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9wYXJhbS5oCi1QQUdFX1NJWkUgPSAweDEwMDAKLUhaID0gMTAwCi1NQVhOQU1MRU4gPSAyNjAKLU1BWFBBVEhMRU4gPSAyNjAKLWRlZiBodG9ubChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgbnRvaGwoWCk6IHJldHVybiBfc3dhcGwoWCkKLQotZGVmIGh0b25zKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLWRlZiBudG9ocyhYKTogcmV0dXJuIF9zd2FwcyhYKQotCi1JUFBST1RPX0lQID0gMAotSVBQUk9UT19JQ01QID0gMQotSVBQUk9UT19JR01QID0gMgotSVBQUk9UT19HR1AgPSAzCi1JUFBST1RPX1RDUCA9IDYKLUlQUFJPVE9fRUdQID0gOAotSVBQUk9UT19QVVAgPSAxMgotSVBQUk9UT19VRFAgPSAxNwotSVBQUk9UT19JRFAgPSAyMgotSVBQUk9UT19UUCA9IDI5Ci1JUFBST1RPX0VPTiA9IDgwCi1JUFBST1RPX1JBVyA9IDI1NQotSVBQUk9UT19NQVggPSAyNTYKLUlQUE9SVF9SRVNFUlZFRCA9IDEwMjQKLUlQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCi1kZWYgSU5fQ0xBU1NBKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ODAwMDAwMDApID09IDApCi0KLUlOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCi1JTl9DTEFTU0FfTlNISUZUID0gMjQKLUlOX0NMQVNTQV9IT1NUID0gMHgwMGZmZmZmZgotSU5fQ0xBU1NBX01BWCA9IDEyOAotZGVmIElOX0NMQVNTQihpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGMwMDAwMDAwKSA9PSAweDgwMDAwMDAwKQotCi1JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAotSU5fQ0xBU1NCX05TSElGVCA9IDE2Ci1JTl9DTEFTU0JfSE9TVCA9IDB4MDAwMGZmZmYKLUlOX0NMQVNTQl9NQVggPSA2NTUzNgotZGVmIElOX0NMQVNTQyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGMwMDAwMDAwKQotCi1JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMAotSU5fQ0xBU1NDX05TSElGVCA9IDgKLUlOX0NMQVNTQ19IT1NUID0gMHgwMDAwMDBmZgotZGVmIElOX0NMQVNTRChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1JTl9DTEFTU0RfTkVUID0gMHhmMDAwMDAwMAotSU5fQ0xBU1NEX05TSElGVCA9IDI4Ci1JTl9DTEFTU0RfSE9TVCA9IDB4MGZmZmZmZmYKLWRlZiBJTl9NVUxUSUNBU1QoaSk6IHJldHVybiBJTl9DTEFTU0QoaSkKLQotZGVmIElOX0VYUEVSSU1FTlRBTChpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGUwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQotCi1kZWYgSU5fQkFEQ0xBU1MoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9IDB4MDAwMDAwMDAKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLUlOQUREUl9CUk9BRENBU1QgPSAweGZmZmZmZmZmCi1JTkFERFJfTk9ORSA9IDB4ZmZmZmZmZmYKLUlOQUREUl9VTlNQRUNfR1JPVVAgPSAweGUwMDAwMDAwCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAweGUwMDAwMDAxCi1JTkFERFJfTUFYX0xPQ0FMX0dST1VQID0gMHhlMDAwMDBmZgotSU5fTE9PUEJBQ0tORVQgPSAxMjcKLUlQX09QVElPTlMgPSAxCi1JUF9NVUxUSUNBU1RfSUYgPSAyCi1JUF9NVUxUSUNBU1RfVFRMID0gMwotSVBfTVVMVElDQVNUX0xPT1AgPSA0Ci1JUF9BRERfTUVNQkVSU0hJUCA9IDUKLUlQX0RST1BfTUVNQkVSU0hJUCA9IDYKLUlQX0hEUklOQ0wgPSAyCi1JUF9UT1MgPSAzCi1JUF9UVEwgPSA0Ci1JUF9SRUNWT1BUUyA9IDUKLUlQX1JFQ1ZSRVRPUFRTID0gNgotSVBfUkVDVkRTVEFERFIgPSA3Ci1JUF9SRVRPUFRTID0gOAotSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0gMQotSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKLUlQX01BWF9NRU1CRVJTSElQUyA9IDIwCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5IGIvTGliL3BsYXQtb3MyZW14L1NPQ0tFVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFjNTk0YS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLSMgR2VuZXJhdGVkIGJ5IGgycHkgZnJvbSBmOi9lbXgvaW5jbHVkZS9zeXMvc29ja2V0LmgKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1GRF9TRVRTSVpFID0gMjU2Ci0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvdWlvLmgKLUZSRUFEID0gMQotRldSSVRFID0gMgotU09DS19TVFJFQU0gPSAxCi1TT0NLX0RHUkFNID0gMgotU09DS19SQVcgPSAzCi1TT0NLX1JETSA9IDQKLVNPQ0tfU0VRUEFDS0VUID0gNQotU09fREVCVUcgPSAweDAwMDEKLVNPX0FDQ0VQVENPTk4gPSAweDAwMDIKLVNPX1JFVVNFQUREUiA9IDB4MDAwNAotU09fS0VFUEFMSVZFID0gMHgwMDA4Ci1TT19ET05UUk9VVEUgPSAweDAwMTAKLVNPX0JST0FEQ0FTVCA9IDB4MDAyMAotU09fVVNFTE9PUEJBQ0sgPSAweDAwNDAKLVNPX0xJTkdFUiA9IDB4MDA4MAotU09fT09CSU5MSU5FID0gMHgwMTAwCi1TT19MX0JST0FEQ0FTVCA9IDB4MDIwMAotU09fUkNWX1NIVVRET1dOID0gMHgwNDAwCi1TT19TTkRfU0hVVERPV04gPSAweDA4MDAKLVNPX1NOREJVRiA9IDB4MTAwMQotU09fUkNWQlVGID0gMHgxMDAyCi1TT19TTkRMT1dBVCA9IDB4MTAwMwotU09fUkNWTE9XQVQgPSAweDEwMDQKLVNPX1NORFRJTUVPID0gMHgxMDA1Ci1TT19SQ1ZUSU1FTyA9IDB4MTAwNgotU09fRVJST1IgPSAweDEwMDcKLVNPX1RZUEUgPSAweDEwMDgKLVNPX09QVElPTlMgPSAweDEwMTAKLVNPTF9TT0NLRVQgPSAweGZmZmYKLUFGX1VOU1BFQyA9IDAKLUFGX1VOSVggPSAxCi1BRl9JTkVUID0gMgotQUZfSU1QTElOSyA9IDMKLUFGX1BVUCA9IDQKLUFGX0NIQU9TID0gNQotQUZfTlMgPSA2Ci1BRl9OQlMgPSA3Ci1BRl9JU08gPSA3Ci1BRl9PU0kgPSBBRl9JU08KLUFGX0VDTUEgPSA4Ci1BRl9EQVRBS0lUID0gOQotQUZfQ0NJVFQgPSAxMAotQUZfU05BID0gMTEKLUFGX0RFQ25ldCA9IDEyCi1BRl9ETEkgPSAxMwotQUZfTEFUID0gMTQKLUFGX0hZTElOSyA9IDE1Ci1BRl9BUFBMRVRBTEsgPSAxNgotQUZfTkIgPSAxNwotQUZfTkVUQklPUyA9IEFGX05CCi1BRl9PUzIgPSBBRl9VTklYCi1BRl9NQVggPSAxOAotUEZfVU5TUEVDID0gQUZfVU5TUEVDCi1QRl9VTklYID0gQUZfVU5JWAotUEZfSU5FVCA9IEFGX0lORVQKLVBGX0lNUExJTksgPSBBRl9JTVBMSU5LCi1QRl9QVVAgPSBBRl9QVVAKLVBGX0NIQU9TID0gQUZfQ0hBT1MKLVBGX05TID0gQUZfTlMKLVBGX05CUyA9IEFGX05CUwotUEZfSVNPID0gQUZfSVNPCi1QRl9PU0kgPSBBRl9JU08KLVBGX0VDTUEgPSBBRl9FQ01BCi1QRl9EQVRBS0lUID0gQUZfREFUQUtJVAotUEZfQ0NJVFQgPSBBRl9DQ0lUVAotUEZfU05BID0gQUZfU05BCi1QRl9ERUNuZXQgPSBBRl9ERUNuZXQKLVBGX0RMSSA9IEFGX0RMSQotUEZfTEFUID0gQUZfTEFUCi1QRl9IWUxJTksgPSBBRl9IWUxJTksKLVBGX0FQUExFVEFMSyA9IEFGX0FQUExFVEFMSwotUEZfTkIgPSBBRl9OQgotUEZfTkVUQklPUyA9IEFGX05CCi1QRl9PUzIgPSBBRl9VTklYCi1QRl9NQVggPSBBRl9NQVgKLVNPTUFYQ09OTiA9IDUKLU1TR19PT0IgPSAweDEKLU1TR19QRUVLID0gMHgyCi1NU0dfRE9OVFJPVVRFID0gMHg0Ci1NU0dfRU9SID0gMHg4Ci1NU0dfVFJVTkMgPSAweDEwCi1NU0dfQ1RSVU5DID0gMHgyMAotTVNHX1dBSVRBTEwgPSAweDQwCi1NU0dfTUFYSU9WTEVOID0gMTYKLVNDTV9SSUdIVFMgPSAweDAxCi1NVF9GUkVFID0gMAotTVRfREFUQSA9IDEKLU1UX0hFQURFUiA9IDIKLU1UX1NPQ0tFVCA9IDMKLU1UX1BDQiA9IDQKLU1UX1JUQUJMRSA9IDUKLU1UX0hUQUJMRSA9IDYKLU1UX0FUQUJMRSA9IDcKLU1UX1NPTkFNRSA9IDgKLU1UX1pPTUJJRSA9IDkKLU1UX1NPT1BUUyA9IDEwCi1NVF9GVEFCTEUgPSAxMQotTVRfUklHSFRTID0gMTIKLU1UX0lGQUREUiA9IDEzCi1NQVhTT0NLRVRTID0gMjA0OApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weSBiL0xpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTZiNTQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLSMgX2VteF9saW5rLnB5Ci0KLSMgV3JpdHRlbiBieSBBbmRyZXcgSSBNYWNJbnR5cmUsIERlY2VtYmVyIDIwMDIuCi0KLSIiIl9lbXhfbGluay5weSBpcyBhIHNpbXBsaXN0aWMgZW11bGF0aW9uIG9mIHRoZSBVbml4IGxpbmsoMikgbGlicmFyeSByb3V0aW5lCi1mb3IgY3JlYXRpbmcgc28tY2FsbGVkIGhhcmQgbGlua3MuICBJdCBpcyBpbnRlbmRlZCB0byBiZSBpbXBvcnRlZCBpbnRvCi10aGUgb3MgbW9kdWxlIGluIHBsYWNlIG9mIHRoZSB1bmltcGxlbWVudGVkIChvbiBPUy8yKSBQb3NpeCBsaW5rKCkKLWZ1bmN0aW9uIChvcy5saW5rKCkpLgotCi1XZSBkbyB0aGlzIG9uIE9TLzIgYnkgaW1wbGVtZW50aW5nIGEgZmlsZSBjb3B5LCB3aXRoIGxpbmsoMikgc2VtYW50aWNzOi0KLSAgLSB0aGUgdGFyZ2V0IGNhbm5vdCBhbHJlYWR5IGV4aXN0OwotICAtIHdlIGhvcGUgdGhhdCB0aGUgYWN0dWFsIGZpbGUgb3BlbiAoaWYgc3VjY2Vzc2Z1bCkgaXMgYWN0dWFsbHkKLSAgICBhdG9taWMuLi4KLQotTGltaXRhdGlvbnMgb2YgdGhpcyBhcHByb2FjaC9pbXBsZW1lbnRhdGlvbiBpbmNsdWRlOi0KLSAgLSBubyBzdXBwb3J0IGZvciBjb3JyZWN0IGxpbmsgY291bnRzIChFTVggc3RhdCh0YXJnZXQpLnN0X25saW5rCi0gICAgaXMgYWx3YXlzIDEpOwotICAtIHRocmVhZCBzYWZldHkgdW5kZWZpbmVkOwotICAtIGRlZmF1bHQgZmlsZSBwZXJtaXNzaW9ucyAocit3KSB1c2VkLCBjYW4ndCBiZSBvdmVyLXJpZGRlbjsKLSAgLSBpbXBsZW1lbnRlZCBpbiBQeXRob24gc28gY29tcGFyYXRpdmVseSBzbG93LCBlc3BlY2lhbGx5IGZvciBsYXJnZQotICAgIHNvdXJjZSBmaWxlczsKLSAgLSBuZWVkIHN1ZmZpY2llbnQgZnJlZSBkaXNrIHNwYWNlIHRvIHN0b3JlIHRoZSBjb3B5LgotCi1CZWhhdmlvdXI6LQotICAtIGFueSBleGNlcHRpb24gc2hvdWxkIHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyOwotICAtIHdhbnQgdGFyZ2V0IHRvIGJlIGFuIGV4YWN0IGNvcHkgb2YgdGhlIHNvdXJjZSwgc28gdXNlIGJpbmFyeSBtb2RlOwotICAtIHJldHVybnMgTm9uZSwgc2FtZSBhcyBvcy5saW5rKCkgd2hpY2ggaXMgaW1wbGVtZW50ZWQgaW4gcG9zaXhtb2R1bGUuYzsKLSAgLSB0YXJnZXQgcmVtb3ZlZCBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlIHdoZXJlIHBvc3NpYmxlOwotICAtIGdpdmVuIHRoZSBtb3RpdmF0aW9uIHRvIHdyaXRlIHRoaXMgZW11bGF0aW9uIGNhbWUgZnJvbSB0cnlpbmcgdG8KLSAgICBzdXBwb3J0IGEgVW5peCByZXNvdXJjZSBsb2NrIGltcGxlbWVudGF0aW9uLCB3aGVyZSBtaW5pbWFsIG92ZXJoZWFkCi0gICAgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSB0YXJnZXQgaXMgZGVzaXJhYmxlIGFuZCB0aGUgZmlsZXMgYXJlIHNtYWxsLAotICAgIHdlIHJlYWQgYSBzb3VyY2UgYmxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY3JlYXRlIHRoZSB0YXJnZXQgc28gdGhhdAotICAgIHdlJ3JlIHJlYWR5IHRvIGltbWVkaWF0ZWx5IHdyaXRlIHNvbWUgZGF0YSBpbnRvIGl0LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi0KLV9fYWxsX18gPSBbJ2xpbmsnXQotCi1kZWYgbGluayhzb3VyY2UsIHRhcmdldCk6Ci0gICAgIiIibGluayhzb3VyY2UsIHRhcmdldCkgLT4gTm9uZQotCi0gICAgQXR0ZW1wdCB0byBoYXJkIGxpbmsgdGhlIHNvdXJjZSBmaWxlIHRvIHRoZSB0YXJnZXQgZmlsZSBuYW1lLgotICAgIE9uIE9TLzIsIHRoaXMgY3JlYXRlcyBhIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHNvdXJjZSBmaWxlLgotICAgICIiIgotCi0gICAgcyA9IG9zLm9wZW4oc291cmNlLCBvcy5PX1JET05MWSB8IG9zLk9fQklOQVJZKQotICAgIGlmIG9zLmlzYXR0eShzKToKLSAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FWERFViwgJ0Nyb3NzLWRldmljZSBsaW5rJykKLSAgICBkYXRhID0gb3MucmVhZChzLCAxMDI0KQotCi0gICAgdHJ5OgotICAgICAgICB0ID0gb3Mub3Blbih0YXJnZXQsIG9zLk9fV1JPTkxZIHwgb3MuT19CSU5BUlkgfCBvcy5PX0NSRUFUIHwgb3MuT19FWENMKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBvcy5jbG9zZShzKQotICAgICAgICByYWlzZQotCi0gICAgdHJ5OgotICAgICAgICB3aGlsZSBkYXRhOgotICAgICAgICAgICAgb3Mud3JpdGUodCwgZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIG9zLmNsb3NlKHQpCi0gICAgICAgIG9zLnVubGluayh0YXJnZXQpCi0gICAgICAgIHJhaXNlCi0KLSAgICBvcy5jbG9zZShzKQotICAgIG9zLmNsb3NlKHQpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRyeToKLSAgICAgICAgbGluayhzeXMuYXJndlsxXSwgc3lzLmFyZ3ZbMl0pCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHByaW50KCdVc2FnZTogZW14X2xpbmsgPHNvdXJjZT4gPHRhcmdldD4nKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBwcmludCgnZW14X2xpbms6ICVzJyAlIHN0cihzeXMuZXhjX2luZm8oKVsxXSkpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5IGIvTGliL3BsYXQtb3MyZW14L2dycC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU2M2VmOC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGdycCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLgotCi0iIiJSZXBsYWNlbWVudCBmb3IgZ3JwIHN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUsIGludGVuZGVkIGZvciB1c2Ugb24KLU9TLzIgYW5kIHNpbWlsYXIgc3lzdGVtcyB3aGljaCBkb24ndCBub3JtYWxseSBoYXZlIGFuIC9ldGMvZ3JvdXAgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggZ3JvdXAgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNCBmaWVsZHMgcGVyCi1yZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSBncm91cCBuYW1lIChzdHJpbmcpCi0gIC0gZ3JvdXAgcGFzc3dvcmQgKG9wdGlvbmFsIGVuY3J5cHRlZCBzdHJpbmcpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgbWVtYmVycyAoY29tbWEgZGVsaW1pdGVkIGxpc3Qgb2YgdXNlcmlkcywgd2l0aCBubyBzcGFjZXMpCi0KLU5vdGUgdGhhdCBtZW1iZXJzIGFyZSBvbmx5IGluY2x1ZGVkIGluIHRoZSBncm91cCBmaWxlIGZvciBncm91cHMgdGhhdAotYXJlbid0IHRoZWlyIHByaW1hcnkgZ3JvdXBzLgotKHNlZSB0aGUgc2VjdGlvbiA4LjIgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuCi0KLVRoZSBtb2R1bGUgbG9va3MgZm9yIHRoZSBncm91cCBkYXRhYmFzZSBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9ucwotKGluIG9yZGVyIGZpcnN0IHRvIGxhc3QpOgotICAtICR7RVRDX0dST1VQfSAgICAgICAgICAgICAgKG9yICVFVENfR1JPVVAlKQotICAtICR7RVRDfS9ncm91cCAgICAgICAgICAgICAgKG9yICVFVEMlL2dyb3VwKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL2dyb3VwICAgKG9yICVQWVRIT05IT01FJS9FdGMvZ3JvdXApCi0KLUNsYXNzZXMKLS0tLS0tLS0KLQotTm9uZQotCi1GdW5jdGlvbnMKLS0tLS0tLS0tLQotCi1nZXRncmdpZChnaWQpIC0gIHJldHVybiB0aGUgcmVjb3JkIGZvciBncm91cC1pZCBnaWQgYXMgYSA0LXR1cGxlCi0KLWdldGdybmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwICduYW1lJyBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDQtdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotZ3JvdXBfZmlsZSAtICAgICB0aGUgcGF0aCBvZiB0aGUgZ3JvdXAgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBncm91cCBmaWxlCi1fX2dyb3VwX3BhdGggPSBbXQotaWYgJ0VUQ19HUk9VUCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19HUk9VUCddKQotaWYgJ0VUQycgaW4gb3MuZW52aXJvbjoKLSAgICBfX2dyb3VwX3BhdGguYXBwZW5kKCclcy9ncm91cCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL0V0Yy9ncm91cCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLWdyb3VwX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fZ3JvdXBfcGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIF9fZiA9IG9wZW4oX19pLCAncicpCi0gICAgICAgIF9fZi5jbG9zZSgpCi0gICAgICAgIGdyb3VwX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVycyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBncm91cCBmaWxlLgotX19maWVsZF9zZXAgPSBbJzonXQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXAuYXBwZW5kKG9zLnBhdGhzZXApCi0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcDoKLSAgICAgICAgIyB0aGVyZSBzaG91bGQgYmUgMyBkZWxpbWl0ZXIgY2hhcmFjdGVycyAoZm9yIDQgZmllbGRzKQotICAgICAgICBpZiByZWNvcmQuY291bnQoYykgPT0gMzoKLSAgICAgICAgICAgIGZzID0gYwotICAgICAgICAgICAgYnJlYWsKLSAgICBpZiBmczoKLSAgICAgICAgcmV0dXJuIGZzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IGdyb3VwIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIGdpZCwgbWVtKToKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snZ3JfbmFtZSddID0gbmFtZQotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9wYXNzd2QnXSA9IHBhc3N3ZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9naWQnXSA9IGdpZAotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9tZW0nXSA9IG1lbQotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5ncl9uYW1lLCBzZWxmLmdyX3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ3JfZ2lkLCBzZWxmLmdyX21lbSkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNAotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgR0lEIG9yIGdyb3VwIG5hbWUKLWRlZiBfX3JlYWRfZ3JvdXBfZmlsZSgpOgotICAgIGlmIGdyb3VwX2ZpbGU6Ci0gICAgICAgIGdyb3VwID0gb3Blbihncm91cF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIGdyb3VwIGRhdGFiYXNlIDw8JykKLSAgICBnaWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgZW50cnkgPSBncm91cC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDM6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmaWVsZHNbMl0gPSBpbnQoZmllbGRzWzJdKQotICAgICAgICAgICAgZmllbGRzWzNdID0gW2Yuc3RyaXAoKSBmb3IgZiBpbiBmaWVsZHNbM10uc3BsaXQoJywnKV0KLSAgICAgICAgICAgIHJlY29yZCA9IEdyb3VwKCpmaWVsZHMpCi0gICAgICAgICAgICBpZiBmaWVsZHNbMl0gbm90IGluIGdpZHg6Ci0gICAgICAgICAgICAgICAgZ2lkeFtmaWVsZHNbMl1dID0gcmVjb3JkCi0gICAgICAgICAgICBpZiBmaWVsZHNbMF0gbm90IGluIG5hbXg6Ci0gICAgICAgICAgICAgICAgbmFteFtmaWVsZHNbMF1dID0gcmVjb3JkCi0gICAgICAgIGVsaWYgbGVuKGVudHJ5KSA+IDA6Ci0gICAgICAgICAgICBwYXNzICAgICAgICAgICAgICAgICAgICAgICAgICMgc2tpcCBlbXB0eSBvciBtYWxmb3JtZWQgcmVjb3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBncm91cC5jbG9zZSgpCi0gICAgaWYgbGVuKGdpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuIChnaWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgR0lECi1kZWYgZ2V0Z3JnaWQoZ2lkKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnW2dpZF0KLQotIyByZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGJ5IGdyb3VwIG5hbWUKLWRlZiBnZXRncm5hbShuYW1lKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBuW25hbWVdCi0KLSMgcmV0dXJuIGFsbCB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldGdyYWxsKCk6Ci0gICAgZywgbiA9IF9fcmVhZF9ncm91cF9maWxlKCkKLSAgICByZXR1cm4gZy52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5IGIvTGliL3BsYXQtb3MyZW14L3B3ZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNiMDc3Zi4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLSMgdGhpcyBtb2R1bGUgaXMgYW4gT1MvMiBvcmllbnRlZCByZXBsYWNlbWVudCBmb3IgdGhlIHB3ZCBzdGFuZGFyZAotIyBleHRlbnNpb24gbW9kdWxlLgotCi0jIHdyaXR0ZW4gYnkgQW5kcmV3IE1hY0ludHlyZSwgQXByaWwgMjAwMS4KLSMgdXBkYXRlZCBKdWx5IDIwMDMsIGFkZGluZyBmaWVsZCBhY2Nlc3NvciBzdXBwb3J0Ci0KLSMgbm90ZSB0aGF0IHRoaXMgaW1wbGVtZW50YXRpb24gY2hlY2tzIHdoZXRoZXIgIjoiIG9yICI7IiBhcyB1c2VkIGFzCi0jIHRoZSBmaWVsZCBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgUGF0aCBjb252ZXJzaW9ucyBhcmUgYXJlIGFwcGxpZWQgd2hlbgotIyB0aGUgZGF0YWJhc2UgdXNlcyAiOiIgYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBwd2Qgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9wYXNzd2QgZmlsZS4KLQotVGhlIHN0YW5kYXJkIFVuaXggcGFzc3dvcmQgZGF0YWJhc2UgaXMgYW4gQVNDSUkgdGV4dCBmaWxlIHdpdGggNyBmaWVsZHMKLXBlciByZWNvcmQgKGxpbmUpLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbjoKLSAgLSB1c2VyIG5hbWUgKHN0cmluZykKLSAgLSBwYXNzd29yZCAoZW5jcnlwdGVkIHN0cmluZywgb3IgIioiIG9yICIiKQotICAtIHVzZXIgaWQgKGludGVnZXIpCi0gIC0gZ3JvdXAgaWQgKGludGVnZXIpCi0gIC0gZGVzY3JpcHRpb24gKHVzdWFsbHkgdXNlcidzIG5hbWUpCi0gIC0gaG9tZSBkaXJlY3RvcnkgKHBhdGggdG8gdXNlcidzIGhvbWUgZGlyZWN0b3J5KQotICAtIHNoZWxsIChwYXRoIHRvIHRoZSB1c2VyJ3MgbG9naW4gc2hlbGwpCi0KLShzZWUgdGhlIHNlY3Rpb24gOC4xIG9mIHRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UpCi0KLVRoaXMgaW1wbGVtZW50YXRpb24gZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBVbml4IGltcGxlbWVudGF0aW9uIGJ5Ci1hbGxvd2luZyB1c2Ugb2YgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciAtICc7JyBvbiBPUy8yLAotRE9TIGFuZCBNUy1XaW5kb3dzIC0gYXMgdGhlIGZpZWxkIHNlcGFyYXRvciBpbiBhZGRpdGlvbiB0byB0aGUgVW5peAotc3RhbmRhcmQgIjoiLiAgQWRkaXRpb25hbGx5LCB3aGVuICI6IiBpcyB0aGUgc2VwYXJhdG9yIHBhdGggY29udmVyc2lvbnMKLWFyZSBhcHBsaWVkIHRvIGRlYWwgd2l0aCBhbnkgbXVuZ2luZyBvZiB0aGUgZHJpdmUgbGV0dGVyIHJlZmVyZW5jZS4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIHBhc3N3b3JkIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfUEFTU1dEfSAgICAgICAgICAgICAob3IgJUVUQ19QQVNTV0QlKQotICAtICR7RVRDfS9wYXNzd2QgICAgICAgICAgICAgKG9yICVFVEMlL3Bhc3N3ZCkKLSAgLSAke1BZVEhPTkhPTUV9L0V0Yy9wYXNzd2QgIChvciAlUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldHB3dWlkKHVpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXItaWQgdWlkIGFzIGEgNy10dXBsZQotCi1nZXRwd25hbShuYW1lKSAtIHJldHVybiB0aGUgcmVjb3JkIGZvciB1c2VyICduYW1lJyBhcyBhIDctdHVwbGUKLQotZ2V0cHdhbGwoKSAtICAgICByZXR1cm4gYSBsaXN0IG9mIDctdHVwbGVzLCBlYWNoIHR1cGxlIGJlaW5nIG9uZSByZWNvcmQKLSAgICAgICAgICAgICAgICAgKE5PVEU6IHRoZSBvcmRlciBpcyBhcmJpdHJhcnkpCi0KLUF0dHJpYnV0ZXMKLS0tLS0tLS0tLS0KLQotcGFzc3dkX2ZpbGUgLSAgICB0aGUgcGF0aCBvZiB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgZmlsZQotCi0iIiIKLQotaW1wb3J0IG9zCi0KLSMgdHJ5IGFuZCBmaW5kIHRoZSBwYXNzd2QgZmlsZQotX19wYXNzd2RfcGF0aCA9IFtdCi1pZiAnRVRDX1BBU1NXRCcgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZChvcy5lbnZpcm9uWydFVENfUEFTU1dEJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9wYXNzd2QnICUgb3MuZW52aXJvblsnRVRDJ10pCi1pZiAnUFlUSE9OSE9NRScgaW4gb3MuZW52aXJvbjoKLSAgICBfX3Bhc3N3ZF9wYXRoLmFwcGVuZCgnJXMvRXRjL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydQWVRIT05IT01FJ10pCi0KLXBhc3N3ZF9maWxlID0gTm9uZQotZm9yIF9faSBpbiBfX3Bhc3N3ZF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgcGFzc3dkX2ZpbGUgPSBfX2kKLSAgICAgICAgYnJlYWsKLSAgICBleGNlcHQ6Ci0gICAgICAgIHBhc3MKLQotIyBwYXRoIGNvbnZlcnNpb24gaGFuZGxlcnMKLWRlZiBfX251bGxwYXRoY29udihwYXRoKToKLSAgICByZXR1cm4gcGF0aC5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQotCi1kZWYgX191bml4cGF0aGNvbnYocGF0aCk6Ci0gICAgIyB0d28ga25vd24gZHJpdmUgbGV0dGVyIHZhcmlhdGlvbnM6ICJ4OyIgYW5kICIkeCIKLSAgICBpZiBwYXRoWzBdID09ICckJzoKLSAgICAgICAgY29udiA9IHBhdGhbMV0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsaWYgcGF0aFsxXSA9PSAnOyc6Ci0gICAgICAgIGNvbnYgPSBwYXRoWzBdICsgJzonICsgcGF0aFsyOl0KLSAgICBlbHNlOgotICAgICAgICBjb252ID0gcGF0aAotICAgIHJldHVybiBjb252LnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLSMgZGVjaWRlIHdoYXQgZmllbGQgc2VwYXJhdG9yIHdlIGNhbiB0cnkgdG8gdXNlIC0gVW5peCBzdGFuZGFyZCwgd2l0aAotIyB0aGUgcGxhdGZvcm0ncyBwYXRoIHNlcGFyYXRvciBhcyBhbiBvcHRpb24uICBObyBzcGVjaWFsIGZpZWxkIGNvbnZlcnNpb24KLSMgaGFuZGxlciBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGZpZWxkCi0jIHNlcGFyYXRvciwgYnV0IGFyZSByZXF1aXJlZCBmb3IgdGhlIGhvbWUgZGlyZWN0b3J5IGFuZCBzaGVsbCBmaWVsZHMgd2hlbgotIyB1c2luZyB0aGUgc3RhbmRhcmQgVW5peCAoIjoiKSBmaWVsZCBzZXBhcmF0b3IuCi1fX2ZpZWxkX3NlcCA9IHsnOic6IF9fdW5peHBhdGhjb252fQotaWYgb3MucGF0aHNlcDoKLSAgICBpZiBvcy5wYXRoc2VwICE9ICc6JzoKLSAgICAgICAgX19maWVsZF9zZXBbb3MucGF0aHNlcF0gPSBfX251bGxwYXRoY29udgotCi0jIGhlbHBlciByb3V0aW5lIHRvIGlkZW50aWZ5IHdoaWNoIHNlcGFyYXRvciBjaGFyYWN0ZXIgaXMgaW4gdXNlCi1kZWYgX19nZXRfZmllbGRfc2VwKHJlY29yZCk6Ci0gICAgZnMgPSBOb25lCi0gICAgZm9yIGMgaW4gX19maWVsZF9zZXAua2V5cygpOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSA2IGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNyBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSA2OgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gcGFzc3dkIGRhdGFiYXNlIGZpZWxkcyBub3QgZGVsaW1pdGVkIDw8JykKLQotIyBjbGFzcyB0byBtYXRjaCB0aGUgbmV3IHJlY29yZCBmaWVsZCBuYW1lIGFjY2Vzc29ycy4KLSMgdGhlIHJlc3VsdGluZyBvYmplY3QgaXMgaW50ZW5kZWQgdG8gYmVoYXZlIGxpa2UgYSByZWFkLW9ubHkgdHVwbGUsCi0jIHdpdGggZWFjaCBtZW1iZXIgYWxzbyBhY2Nlc3NpYmxlIGJ5IGEgZmllbGQgbmFtZS4KLWNsYXNzIFBhc3N3ZDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgcGFzc3dkLCB1aWQsIGdpZCwgZ2Vjb3MsIGRpciwgc2hlbGwpOgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3VpZCddID0gdWlkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2dlY29zJ10gPSBnZWNvcwotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19kaXInXSA9IGRpcgotICAgICAgICBzZWxmLl9fZGljdF9fWydwd19zaGVsbCddID0gc2hlbGwKLSAgICAgICAgc2VsZi5fX2RpY3RfX1snX3JlY29yZCddID0gKHNlbGYucHdfbmFtZSwgc2VsZi5wd19wYXNzd2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X3VpZCwgc2VsZi5wd19naWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB3X2dlY29zLCBzZWxmLnB3X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfc2hlbGwpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDcKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5fcmVjb3JkW2tleV0KLQotICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSk6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdhdHRyaWJ1dGUgcmVhZC1vbmx5OiAlcycgJSBuYW1lKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYuX3JlY29yZCkKLQotICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgdGhpcyA9IHN0cihzZWxmLl9yZWNvcmQpCi0gICAgICAgIGlmIHRoaXMgPT0gb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbGlmIHRoaXMgPCBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAtMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi0jIHJlYWQgdGhlIHdob2xlIGZpbGUsIHBhcnNpbmcgZWFjaCBlbnRyeSBpbnRvIHR1cGxlIGZvcm0KLSMgd2l0aCBkaWN0aW9uYXJpZXMgdG8gc3BlZWQgcmVjYWxsIGJ5IFVJRCBvciBwYXNzd2QgbmFtZQotZGVmIF9fcmVhZF9wYXNzd2RfZmlsZSgpOgotICAgIGlmIHBhc3N3ZF9maWxlOgotICAgICAgICBwYXNzd2QgPSBvcGVuKHBhc3N3ZF9maWxlLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IoJz4+IG5vIHBhc3N3b3JkIGRhdGFiYXNlIDw8JykKLSAgICB1aWR4ID0ge30KLSAgICBuYW14ID0ge30KLSAgICBzZXAgPSBOb25lCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZW50cnkgPSBwYXNzd2QucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgIGlmIGxlbihlbnRyeSkgPiA2OgotICAgICAgICAgICAgaWYgc2VwIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VwID0gX19nZXRfZmllbGRfc2VwKGVudHJ5KQotICAgICAgICAgICAgZmllbGRzID0gZW50cnkuc3BsaXQoc2VwKQotICAgICAgICAgICAgZm9yIGkgaW4gKDIsIDMpOgotICAgICAgICAgICAgICAgIGZpZWxkc1tpXSA9IGludChmaWVsZHNbaV0pCi0gICAgICAgICAgICBmb3IgaSBpbiAoNSwgNik6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gX19maWVsZF9zZXBbc2VwXShmaWVsZHNbaV0pCi0gICAgICAgICAgICByZWNvcmQgPSBQYXNzd2QoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gdWlkeDoKLSAgICAgICAgICAgICAgICB1aWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIHBhc3N3ZC5jbG9zZSgpCi0gICAgaWYgbGVuKHVpZHgpID09IDA6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgcmV0dXJuICh1aWR4LCBuYW14KQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IFVJRAotZGVmIGdldHB3dWlkKHVpZCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIHVbdWlkXQotCi0jIHJldHVybiB0aGUgcGFzc3dkIGRhdGFiYXNlIGVudHJ5IGJ5IHBhc3N3ZCBuYW1lCi1kZWYgZ2V0cHduYW0obmFtZSk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cmllcwotZGVmIGdldHB3YWxsKCk6Ci0gICAgdSwgbiA9IF9fcmVhZF9wYXNzd2RfZmlsZSgpCi0gICAgcmV0dXJuIG4udmFsdWVzKCkKLQotIyB0ZXN0IGhhcm5lc3MKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZ2V0cHdhbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuIGIvTGliL3BsYXQtb3MyZW14L3JlZ2VuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzZWNkMmE4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbgorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIyEgL2Jpbi9zaAotZXhwb3J0IElOQ0xVREU9JENfSU5DTFVERV9QQVRICi1zZXQgLXYKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9mY250bC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvc3lzL3NvY2tldC5oCi1weXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAtaSAnKHVfbG9uZyknICRDX0lOQ0xVREVfUEFUSC9uZXRpbmV0L2luLmgKLSNweXRob24uZXhlIC4uLy4uL1Rvb2xzL3NjcmlwdHMvaDJweS5weSAkQ19JTkNMVURFX1BBVEgvdGVybWlvcy5oCmRpZmYgLS1naXQgYS9MaWIvcGxhdGZvcm0ucHkgYi9MaWIvcGxhdGZvcm0ucHkKaW5kZXggZWM1ZGY4NS4uYzNjNGIzMiAxMDA3NTUKLS0tIGEvTGliL3BsYXRmb3JtLnB5CisrKyBiL0xpYi9wbGF0Zm9ybS5weQpAQCAtMTIyLDcgKzEyMiw3IEBACiBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCiAgICAgIyBQeXRob24gdmVyc2lvbnMKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicpOgogICAgICAgICAjIFVzZSB0aGUgb2xkIENQL00gTlVMIGFzIGRldmljZSBuYW1lCiAgICAgICAgIERFVl9OVUxMID0gJ05VTCcKICAgICBlbHNlOgpAQCAtMzE2LDcgKzMxNiw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBldGMgPSBvcy5saXN0ZGlyKCcvZXRjJykKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgUHJvYmFibHkgbm90IGEgVW5peCBzeXN0ZW0KICAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKICAgICBldGMuc29ydCgpCkBAIC00MDMsMTMgKzQwMywxMyBAQAogCiBkZWYgX3N5c2NtZF92ZXIoc3lzdGVtPScnLCByZWxlYXNlPScnLCB2ZXJzaW9uPScnLAogCi0gICAgICAgICAgICAgICBzdXBwb3J0ZWRfcGxhdGZvcm1zPSgnd2luMzInLCd3aW4xNicsJ2RvcycsJ29zMicpKToKKyAgICAgICAgICAgICAgIHN1cHBvcnRlZF9wbGF0Zm9ybXM9KCd3aW4zMicsJ3dpbjE2JywnZG9zJykpOgogCiAgICAgIiIiIFRyaWVzIHRvIGZpZ3VyZSBvdXQgdGhlIE9TIHZlcnNpb24gdXNlZCBhbmQgcmV0dXJucwogICAgICAgICBhIHR1cGxlIChzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uKS4KIAogICAgICAgICBJdCB1c2VzIHRoZSAidmVyIiBzaGVsbCBjb21tYW5kIGZvciB0aGlzIHdoaWNoIGlzIGtub3duCi0gICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MgYW5kIE9TLzIuIFhYWCBPdGhlcnMgdG9vID8KKyAgICAgICAgdG8gZXhpc3RzIG9uIFdpbmRvd3MsIERPUy4gWFhYIE90aGVycyB0b28gPwogCiAgICAgICAgIEluIGNhc2UgdGhpcyBmYWlscywgdGhlIGdpdmVuIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMKICAgICAgICAgZGVmYXVsdHMuCkBAIC00MjQsMTMgKzQyNCwxMCBAQAogICAgICAgICAgICAgcGlwZSA9IHBvcGVuKGNtZCkKICAgICAgICAgICAgIGluZm8gPSBwaXBlLnJlYWQoKQogICAgICAgICAgICAgaWYgcGlwZS5jbG9zZSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKCdjb21tYW5kIGZhaWxlZCcpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY29tbWFuZCBmYWlsZWQnKQogICAgICAgICAgICAgIyBYWFggSG93IGNhbiBJIHN1cHByZXNzIHNoZWxsIGVycm9ycyBmcm9tIGJlaW5nIHdyaXR0ZW4KICAgICAgICAgICAgICMgICAgIHRvIHN0ZGVyciA/Ci0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLHdoeSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgI3ByaW50ICdDb21tYW5kICVzIGZhaWxlZDogJXMnICUgKGNtZCx3aHkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgpAQCAtNTgxLDcgKzU3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICMgRGlzY2FyZCBhbnkgdHlwZSB0aGF0IGlzbid0IFJFR19TWgogICAgICAgICAgICAgICAgICAgICBpZiB0eXBlID09IFJFR19TWiBhbmQgbmFtZS5maW5kKCJTZXJ2ZXIiKSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfdHlwZSA9IFZFUl9OVF9TRVJWRVIKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAjIFVzZSBkZWZhdWx0IG9mIFZFUl9OVF9XT1JLU1RBVElPTgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKQEAgLTYzNyw2MiArNjM0LDYgQEAKICAgICBSZWdDbG9zZUtleShrZXlDdXJWZXIpCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUKIAotZGVmIF9tYWNfdmVyX2xvb2t1cChzZWxlY3RvcnMsZGVmYXVsdD1Ob25lKToKLQotICAgIGZyb20gX2dlc3RhbHQgaW1wb3J0IGdlc3RhbHQKLSAgICBsID0gW10KLSAgICBhcHBlbmQgPSBsLmFwcGVuZAotICAgIGZvciBzZWxlY3RvciBpbiBzZWxlY3RvcnM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGFwcGVuZChnZXN0YWx0KHNlbGVjdG9yKSkKLSAgICAgICAgZXhjZXB0IChSdW50aW1lRXJyb3IsIE9TRXJyb3IpOgotICAgICAgICAgICAgYXBwZW5kKGRlZmF1bHQpCi0gICAgcmV0dXJuIGwKLQotZGVmIF9iY2Qyc3RyKGJjZCk6Ci0KLSAgICByZXR1cm4gaGV4KGJjZClbMjpdCi0KLWRlZiBfbWFjX3Zlcl9nZXN0YWx0KCk6Ci0gICAgIiIiCi0gICAgICAgIFRoYW5rcyB0byBNYXJrIFIuIExldmluc29uIGZvciBtYWlsaW5nIGRvY3VtZW50YXRpb24gbGlua3MgYW5kCi0gICAgICAgIGNvZGUgZXhhbXBsZXMgZm9yIHRoaXMgZnVuY3Rpb24uIERvY3VtZW50YXRpb24gZm9yIHRoZQotICAgICAgICBnZXN0YWx0KCkgQVBJIGlzIGF2YWlsYWJsZSBvbmxpbmUgYXQ6Ci0KLSAgICAgICAgICAgaHR0cDovL3d3dy5yZ2Fyb3MubmwvZ2VzdGFsdC8KLSAgICAiIiIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGhlIHZlcnNpb24gaW5mbyBtb2R1bGUgaXMgYXZhaWxhYmxlCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgX2dlc3RhbHQKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgIyBHZXQgdGhlIGluZm9zCi0gICAgc3lzdiwgc3lzYSA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5c3YnLCdzeXNhJykpCi0gICAgIyBEZWNvZGUgdGhlIGluZm9zCi0gICAgaWYgc3lzdjoKLSAgICAgICAgbWFqb3IgPSAoc3lzdiAmIDB4RkYwMCkgPj4gOAotICAgICAgICBtaW5vciA9IChzeXN2ICYgMHgwMEYwKSA+PiA0Ci0gICAgICAgIHBhdGNoID0gKHN5c3YgJiAweDAwMEYpCi0KLSAgICAgICAgaWYgKG1ham9yLCBtaW5vcikgPj0gKDEwLCA0KToKLSAgICAgICAgICAgICMgdGhlICdzeXN2JyBnZXN0YWxkIGNhbm5vdCByZXR1cm4gcGF0Y2hsZXZlbHMKLSAgICAgICAgICAgICMgaGlnaGVyIHRoYW4gOS4gQXBwbGUgaW50cm9kdWNlZCAzIG5ldwotICAgICAgICAgICAgIyBnZXN0YWx0IGNvZGVzIGluIDEwLjQgdG8gZGVhbCB3aXRoIHRoaXMKLSAgICAgICAgICAgICMgaXNzdWUgKG5lZWRlZCBiZWNhdXNlIHBhdGNoIGxldmVscyBjYW4KLSAgICAgICAgICAgICMgcnVuIGhpZ2hlciB0aGFuIDksIHN1Y2ggYXMgMTAuNC4xMSkKLSAgICAgICAgICAgIG1ham9yLG1pbm9yLHBhdGNoID0gX21hY192ZXJfbG9va3VwKCgnc3lzMScsJ3N5czInLCdzeXMzJykpCi0gICAgICAgICAgICByZWxlYXNlID0gJyVpLiVpLiVpJyAlKG1ham9yLCBtaW5vciwgcGF0Y2gpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZWxlYXNlID0gJyVzLiVpLiVpJyAlIChfYmNkMnN0cihtYWpvciksbWlub3IscGF0Y2gpCi0KLSAgICBpZiBzeXNhOgotICAgICAgICBtYWNoaW5lID0gezB4MTogJzY4aycsCi0gICAgICAgICAgICAgICAgICAgMHgyOiAnUG93ZXJQQycsCi0gICAgICAgICAgICAgICAgICAgMHhhOiAnaTM4Nid9LmdldChzeXNhLCcnKQotCi0gICAgdmVyc2lvbmluZm89KCcnLCAnJywgJycpCi0gICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQotCiBkZWYgX21hY192ZXJfeG1sKCk6CiAgICAgZm4gPSAnL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JwogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmbik6CkBAIC03MDgsNyArNjQ5LDcgQEAKICAgICB2ZXJzaW9uaW5mbz0oJycsICcnLCAnJykKICAgICBtYWNoaW5lID0gb3MudW5hbWUoKS5tYWNoaW5lCiAgICAgaWYgbWFjaGluZSBpbiAoJ3BwYycsICdQb3dlciBNYWNpbnRvc2gnKToKLSAgICAgICAgIyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBnZXN0YWx0IGJhc2VkIGNvZGUKKyAgICAgICAgIyBDYW5vbmljYWwgbmFtZQogICAgICAgICBtYWNoaW5lID0gJ1Bvd2VyUEMnCiAKICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uaW5mbyxtYWNoaW5lCkBAIC03MzAsMTIgKzY3MSw2IEBACiAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGluZm8KIAotICAgICMgSWYgdGhhdCBkb2Vzbid0IHdvcmsgZm9yIHNvbWUgcmVhc29uIGZhbGwgYmFjayB0byByZWFkaW5nIHRoZQotICAgICMgaW5mb3JtYXRpb24gdXNpbmcgZ2VzdGFsdCBjYWxscy4KLSAgICBpbmZvID0gX21hY192ZXJfZ2VzdGFsdCgpCi0gICAgaWYgaW5mbyBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIGluZm8KLQogICAgICMgSWYgdGhhdCBhbHNvIGRvZXNuJ3Qgd29yayByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWVzCiAgICAgcmV0dXJuIHJlbGVhc2UsdmVyc2lvbmluZm8sbWFjaGluZQogCkBAIC04ODIsNyArODE3LDcgQEAKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBzb2NrZXQuZ2V0aG9zdG5hbWUoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgU3RpbGwgbm90IHdvcmtpbmcuLi4KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIApAQCAtOTAxLDEyICs4MzYsMTIgQEAKIAogICAgICIiIiBJbnRlcmZhY2UgdG8gdGhlIHN5c3RlbSdzIHVuYW1lIGNvbW1hbmQuCiAgICAgIiIiCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdHJ5OgogICAgICAgICBmID0gb3MucG9wZW4oJ3VuYW1lICVzIDI+ICVzJyAlIChvcHRpb24sIERFVl9OVUxMKSkKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBmLnJlYWQoKS5zdHJpcCgpCiAgICAgcmMgPSBmLmNsb3NlKCkKQEAgLTkyNCw3ICs4NTksNyBAQAogICAgICAgICBkZWZhdWx0IGluIGNhc2UgdGhlIGNvbW1hbmQgc2hvdWxkIGZhaWwuCiAKICAgICAiIiIKLSAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicpOgogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0YXJnZXQgPSBfZm9sbG93X3N5bWxpbmtzKHRhcmdldCkKQEAgLTkzMiw3ICs4NjcsNyBAQAogICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2ZpbGUnLCB0YXJnZXRdLAogICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKIAotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Isb3MuZXJyb3IpOgorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIG91dHB1dCA9IHByb2MuY29tbXVuaWNhdGUoKVswXS5kZWNvZGUoJ2xhdGluLTEnKQogICAgIHJjID0gcHJvYy53YWl0KCkKZGlmZiAtLWdpdCBhL0xpYi9wbGlzdGxpYi5weSBiL0xpYi9wbGlzdGxpYi5weQppbmRleCAyYjBiNjM0Li4yNzdjZTYyIDEwMDY0NAotLS0gYS9MaWIvcGxpc3RsaWIucHkKKysrIGIvTGliL3BsaXN0bGliLnB5CkBAIC00LDI1ICs0LDIwIEBACiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4KIFVzdWFsbHkgdGhlIHRvcCBsZXZlbCBvYmplY3QgaXMgYSBkaWN0aW9uYXJ5LgogCi1UbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgcGF0aE9yRmlsZSkKLWZ1bmN0aW9uLiAncm9vdE9iamVjdCcgaXMgdGhlIHRvcCBsZXZlbCBvYmplY3QsICdwYXRoT3JGaWxlJyBpcyBhCi1maWxlbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCitUbyB3cml0ZSBvdXQgYSBwbGlzdCBmaWxlLCB1c2UgdGhlIGR1bXAodmFsdWUsIGZpbGUpCitmdW5jdGlvbi4gJ3ZhbHVlJyBpcyB0aGUgdG9wIGxldmVsIG9iamVjdCwgJ2ZpbGUnIGlzCithICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCiAKLVRvIHBhcnNlIGEgcGxpc3QgZnJvbSBhIGZpbGUsIHVzZSB0aGUgcmVhZFBsaXN0KHBhdGhPckZpbGUpIGZ1bmN0aW9uLAotd2l0aCBhIGZpbGUgbmFtZSBvciBhIChyZWFkYWJsZSkgZmlsZSBvYmplY3QgYXMgdGhlIG9ubHkgYXJndW1lbnQuIEl0CitUbyBwYXJzZSBhIHBsaXN0IGZyb20gYSBmaWxlLCB1c2UgdGhlIGxvYWQoZmlsZSkgZnVuY3Rpb24sCit3aXRoIGEgKHJlYWRhYmxlKSBmaWxlIG9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudC4gSXQKIHJldHVybnMgdGhlIHRvcCBsZXZlbCBvYmplY3QgKGFnYWluLCB1c3VhbGx5IGEgZGljdGlvbmFyeSkuCiAKLVRvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIHJlYWRQbGlzdEZyb21CeXRlcygpCi1hbmQgd3JpdGVQbGlzdFRvQnl0ZXMoKS4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHlvdSBjYW4gdXNlIGxvYWRzKCkKK2FuZCBkdW1wcygpLgogCiBWYWx1ZXMgY2FuIGJlIHN0cmluZ3MsIGludGVnZXJzLCBmbG9hdHMsIGJvb2xlYW5zLCB0dXBsZXMsIGxpc3RzLAotZGljdGlvbmFyaWVzIChidXQgb25seSB3aXRoIHN0cmluZyBrZXlzKSwgRGF0YSBvciBkYXRldGltZS5kYXRldGltZSBvYmplY3RzLgotU3RyaW5nIHZhbHVlcyAoaW5jbHVkaW5nIGRpY3Rpb25hcnkga2V5cykgaGF2ZSB0byBiZSB1bmljb2RlIHN0cmluZ3MgLS0gdGhleQotd2lsbCBiZSB3cml0dGVuIG91dCBhcyBVVEYtOC4KLQotVGhlIDxkYXRhPiBwbGlzdCB0eXBlIGlzIHN1cHBvcnRlZCB0aHJvdWdoIHRoZSBEYXRhIGNsYXNzLiBUaGlzIGlzIGEKLXRoaW4gd3JhcHBlciBhcm91bmQgYSBQeXRob24gYnl0ZXMgb2JqZWN0LiBVc2UgJ0RhdGEnIGlmIHlvdXIgc3RyaW5ncwotY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMuCitkaWN0aW9uYXJpZXMgKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCBEYXRhLCBieXRlcywgYnl0ZWFycmF5LCBvcgorZGF0ZXRpbWUuZGF0ZXRpbWUgb2JqZWN0cy4KIAogR2VuZXJhdGUgUGxpc3QgZXhhbXBsZToKIApAQCAtMzcsMjI2ICszMiw0OCBAQAogICAgICAgICAgICAgYVRydWVWYWx1ZSA9IFRydWUsCiAgICAgICAgICAgICBhRmFsc2VWYWx1ZSA9IEZhbHNlLAogICAgICAgICApLAotICAgICAgICBzb21lRGF0YSA9IERhdGEoYiI8YmluYXJ5IGd1bms+IiksCi0gICAgICAgIHNvbWVNb3JlRGF0YSA9IERhdGEoYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTApLAorICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgIHNvbWVNb3JlRGF0YSA9IGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwLAogICAgICAgICBhRGF0ZSA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZS5ta3RpbWUodGltZS5nbXRpbWUoKSkpLAogICAgICkKLSAgICB3cml0ZVBsaXN0KHBsLCBmaWxlTmFtZSkKKyAgICB3aXRoIG9wZW4oZmlsZU5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICBkdW1wKHBsLCBmcCkKIAogUGFyc2UgUGxpc3QgZXhhbXBsZToKIAotICAgIHBsID0gcmVhZFBsaXN0KHBhdGhPckZpbGUpCi0gICAgcHJpbnQgcGxbImFLZXkiXQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKKyAgICBwcmludChwbFsiYUtleSJdKQogIiIiCi0KLQogX19hbGxfXyA9IFsKICAgICAicmVhZFBsaXN0IiwgIndyaXRlUGxpc3QiLCAicmVhZFBsaXN0RnJvbUJ5dGVzIiwgIndyaXRlUGxpc3RUb0J5dGVzIiwKLSAgICAiUGxpc3QiLCAiRGF0YSIsICJEaWN0IgorICAgICJQbGlzdCIsICJEYXRhIiwgIkRpY3QiLCAiRk1UX1hNTCIsICJGTVRfQklOQVJZIiwKKyAgICAibG9hZCIsICJkdW1wIiwgImxvYWRzIiwgImR1bXBzIgogXQotIyBOb3RlOiB0aGUgUGxpc3QgYW5kIERpY3QgY2xhc3NlcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KIAogaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29kZWNzCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgZW51bQogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2Zyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogCiAKLWRlZiByZWFkUGxpc3QocGF0aE9yRmlsZSk6Ci0gICAgIiIiUmVhZCBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhIGZpbGUgbmFtZSBvciBhCi0gICAgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4gUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2gKLSAgICB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCi0gICAgIiIiCi0gICAgZGlkT3BlbiA9IEZhbHNlCi0gICAgdHJ5OgotICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6Ci0gICAgICAgICAgICBwYXRoT3JGaWxlID0gb3BlbihwYXRoT3JGaWxlLCAncmInKQotICAgICAgICAgICAgZGlkT3BlbiA9IFRydWUKLSAgICAgICAgcCA9IFBsaXN0UGFyc2VyKCkKLSAgICAgICAgcm9vdE9iamVjdCA9IHAucGFyc2UocGF0aE9yRmlsZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBkaWRPcGVuOgotICAgICAgICAgICAgcGF0aE9yRmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHJvb3RPYmplY3QKK1BsaXN0Rm9ybWF0ID0gZW51bS5FbnVtKCdQbGlzdEZvcm1hdCcsICdGTVRfWE1MIEZNVF9CSU5BUlknLCBtb2R1bGU9X19uYW1lX18pCitnbG9iYWxzKCkudXBkYXRlKFBsaXN0Rm9ybWF0Ll9fbWVtYmVyc19fKQogCiAKLWRlZiB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIHBhdGhPckZpbGUpOgotICAgICIiIldyaXRlICdyb290T2JqZWN0JyB0byBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhCi0gICAgZmlsZSBuYW1lIG9yIGEgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KLSAgICAiIiIKLSAgICBkaWRPcGVuID0gRmFsc2UKLSAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aE9yRmlsZSwgc3RyKToKLSAgICAgICAgICAgIHBhdGhPckZpbGUgPSBvcGVuKHBhdGhPckZpbGUsICd3YicpCi0gICAgICAgICAgICBkaWRPcGVuID0gVHJ1ZQotICAgICAgICB3cml0ZXIgPSBQbGlzdFdyaXRlcihwYXRoT3JGaWxlKQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPHBsaXN0IHZlcnNpb249XCIxLjBcIj4iKQotICAgICAgICB3cml0ZXIud3JpdGVWYWx1ZShyb290T2JqZWN0KQotICAgICAgICB3cml0ZXIud3JpdGVsbigiPC9wbGlzdD4iKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGRpZE9wZW46Ci0gICAgICAgICAgICBwYXRoT3JGaWxlLmNsb3NlKCkKLQotCi1kZWYgcmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpOgotICAgICIiIlJlYWQgYSBwbGlzdCBkYXRhIGZyb20gYSBieXRlcyBvYmplY3QuIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCi0gICAgIiIiCi0gICAgcmV0dXJuIHJlYWRQbGlzdChCeXRlc0lPKGRhdGEpKQotCi0KLWRlZiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KToKLSAgICAiIiJSZXR1cm4gJ3Jvb3RPYmplY3QnIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KLSAgICAiIiIKLSAgICBmID0gQnl0ZXNJTygpCi0gICAgd3JpdGVQbGlzdChyb290T2JqZWN0LCBmKQotICAgIHJldHVybiBmLmdldHZhbHVlKCkKLQotCi1jbGFzcyBEdW1iWE1MV3JpdGVyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbD0wLCBpbmRlbnQ9Ilx0Iik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5zdGFjayA9IFtdCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgPSBpbmRlbnRMZXZlbAotICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAotCi0gICAgZGVmIGJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKLSAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotCi0gICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBzZWxmLmluZGVudExldmVsID4gMAotICAgICAgICBhc3NlcnQgc2VsZi5zdGFjay5wb3AoKSA9PSBlbGVtZW50Ci0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgLT0gMQotICAgICAgICBzZWxmLndyaXRlbG4oIjwvJXM+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgc2ltcGxlRWxlbWVudChzZWxmLCBlbGVtZW50LCB2YWx1ZT1Ob25lKToKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2YWx1ZSA9IF9lc2NhcGUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4lczwvJXM+IiAlIChlbGVtZW50LCB2YWx1ZSwgZWxlbWVudCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcy8+IiAlIGVsZW1lbnQpCi0KLSAgICBkZWYgd3JpdGVsbihzZWxmLCBsaW5lKToKLSAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgICMgcGxpc3QgaGFzIGZpeGVkIGVuY29kaW5nIG9mIHV0Zi04Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxpbmUsIHN0cik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoc2VsZi5pbmRlbnRMZXZlbCAqIHNlbGYuaW5kZW50KQotICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUpCi0gICAgICAgIHNlbGYuZmlsZS53cml0ZShiJ1xuJykKLQotCi0jIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCi0jIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cyBtYXkgYmUgb21pdHRlZCB3aXRoCi0jICBhIGxvc3Mgb2YgcHJlY2lzaW9uKQotX2RhdGVQYXJzZXIgPSByZS5jb21waWxlKHIiKD9QPHllYXI+XGRcZFxkXGQpKD86LSg/UDxtb250aD5cZFxkKSg/Oi0oP1A8ZGF5PlxkXGQpKD86VCg/UDxob3VyPlxkXGQpKD86Oig/UDxtaW51dGU+XGRcZCkoPzo6KD9QPHNlY29uZD5cZFxkKSk/KT8pPyk/KT9aIiwgcmUuQVNDSUkpCi0KLWRlZiBfZGF0ZUZyb21TdHJpbmcocyk6Ci0gICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCi0gICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQotICAgIGxzdCA9IFtdCi0gICAgZm9yIGtleSBpbiBvcmRlcjoKLSAgICAgICAgdmFsID0gZ2Rba2V5XQotICAgICAgICBpZiB2YWwgaXMgTm9uZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCi0gICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCi0KLWRlZiBfZGF0ZVRvU3RyaW5nKGQpOgotICAgIHJldHVybiAnJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaJyAlICgKLSAgICAgICAgZC55ZWFyLCBkLm1vbnRoLCBkLmRheSwKLSAgICAgICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQKLSAgICApCi0KLQotIyBSZWdleCB0byBmaW5kIGFueSBjb250cm9sIGNoYXJzLCBleGNlcHQgZm9yIFx0IFxuIGFuZCBccgotX2NvbnRyb2xDaGFyUGF0ID0gcmUuY29tcGlsZSgKLSAgICByIltceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDBiXHgwY1x4MGVceDBmIgotICAgIHIiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZl0iKQotCi1kZWYgX2VzY2FwZSh0ZXh0KToKLSAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQotICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBwbGlzdGxpYi5EYXRhIGluc3RlYWQiKQotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKSAgICAgICAjIGNvbnZlcnQgRE9TIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyIiwgIlxuIikgICAgICAgICAjIGNvbnZlcnQgTWFjIGxpbmUgZW5kaW5ncwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAgICAgICAjIGVzY2FwZSAnJicKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKSAgICAgICAgIyBlc2NhcGUgJzwnCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikgICAgICAgICMgZXNjYXBlICc+JwotICAgIHJldHVybiB0ZXh0Ci0KLQotUExJU1RIRUFERVIgPSBiIiIiXAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotIiIiCi0KLWNsYXNzIFBsaXN0V3JpdGVyKER1bWJYTUxXcml0ZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudExldmVsPTAsIGluZGVudD1iIlx0Iiwgd3JpdGVIZWFkZXI9MSk6Ci0gICAgICAgIGlmIHdyaXRlSGVhZGVyOgotICAgICAgICAgICAgZmlsZS53cml0ZShQTElTVEhFQURFUikKLSAgICAgICAgRHVtYlhNTFdyaXRlci5fX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRMZXZlbCwgaW5kZW50KQotCi0gICAgZGVmIHdyaXRlVmFsdWUoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJzdHJpbmciLCB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBib29sKToKLSAgICAgICAgICAgICMgbXVzdCBzd2l0Y2ggZm9yIGJvb2wgYmVmb3JlIGludCwgYXMgYm9vbCBpcyBhCi0gICAgICAgICAgICAjIHN1YmNsYXNzIG9mIGludC4uLgotICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJ0cnVlIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJmYWxzZSIpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKLSAgICAgICAgICAgIHNlbGYud3JpdGVEaWN0KHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgotICAgICAgICAgICAgc2VsZi53cml0ZURhdGEodmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJkYXRlIiwgX2RhdGVUb1N0cmluZyh2YWx1ZSkpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlQXJyYXkodmFsdWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQotCi0gICAgZGVmIHdyaXRlRGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImRhdGEiKQotICAgICAgICBzZWxmLmluZGVudExldmVsIC09IDEKLSAgICAgICAgbWF4bGluZWxlbmd0aCA9IG1heCgxNiwgNzYgLSBsZW4oc2VsZi5pbmRlbnQucmVwbGFjZShiIlx0IiwgYiIgIiAqIDgpICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZW50TGV2ZWwpKQotICAgICAgICBmb3IgbGluZSBpbiBkYXRhLmFzQmFzZTY0KG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKLSAgICAgICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgKz0gMQotICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImRhdGEiKQotCi0gICAgZGVmIHdyaXRlRGljdChzZWxmLCBkKToKLSAgICAgICAgaWYgZDoKLSAgICAgICAgICAgIHNlbGYuYmVnaW5FbGVtZW50KCJkaWN0IikKLSAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKLSAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgc3RyKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCi0gICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJrZXkiLCBrZXkpCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZVZhbHVlKHZhbHVlKQotICAgICAgICAgICAgc2VsZi5lbmRFbGVtZW50KCJkaWN0IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiZGljdCIpCi0KLSAgICBkZWYgd3JpdGVBcnJheShzZWxmLCBhcnJheSk6Ci0gICAgICAgIGlmIGFycmF5OgotICAgICAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImFycmF5IikKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImFycmF5IikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgiYXJyYXkiKQorIworIworIyBEZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAogCiBjbGFzcyBfSW50ZXJuYWxEaWN0KGRpY3QpOgpAQCAtMjY0LDE5ICs4MSwxOCBAQAogICAgICMgVGhpcyBjbGFzcyBpcyBuZWVkZWQgd2hpbGUgRGljdCBpcyBzY2hlZHVsZWQgZm9yIGRlcHJlY2F0aW9uOgogICAgICMgd2Ugb25seSBuZWVkIHRvIHdhcm4gd2hlbiBhICp1c2VyKiBpbnN0YW50aWF0ZXMgRGljdCBvciB3aGVuCiAgICAgIyB0aGUgImF0dHJpYnV0ZSBub3RhdGlvbiBmb3IgZGljdCBrZXlzIiBpcyB1c2VkLgorICAgIF9fc2xvdHNfXyA9ICgpCiAKICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlID0gc2VsZlthdHRyXQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmV0dXJuIHZhbHVlCiAKICAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgYXR0ciwgdmFsdWUpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIkF0dHJpYnV0ZSBhY2Nlc3MgZnJvbSBwbGlzdCBkaWN0cyBpcyBkZXByZWNhdGVkLCB1c2UgZFtrZXldICIKICAgICAgICAgICAgICAibm90YXRpb24gaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZlthdHRyXSA9IHZhbHVlCkBAIC0yODYsNTYgKzEwMiwxMTEgQEAKICAgICAgICAgICAgIGRlbCBzZWxmW2F0dHJdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCi0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiQXR0cmlidXRlIGFjY2VzcyBmcm9tIHBsaXN0IGRpY3RzIGlzIGRlcHJlY2F0ZWQsIHVzZSBkW2tleV0gIgogICAgICAgICAgICAgICJub3RhdGlvbiBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogCisKIGNsYXNzIERpY3QoX0ludGVybmFsRGljdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAgICAgICAgIHdhcm4oIlRoZSBwbGlzdGxpYi5EaWN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSBidWlsdGluIGRpY3QgaW5zdGVhZCIsCiAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQogCiAKLWNsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCBtb2RlKToKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhPckZpbGUsIHN0cik6CisgICAgICAgIHdpdGggb3BlbihwYXRoT3JGaWxlLCBtb2RlKSBhcyBmcDoKKyAgICAgICAgICAgIHlpZWxkIGZwCiAKLSAgICAiIiJUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFVzZSByZWFkUGxpc3QoKSBhbmQgd3JpdGVQbGlzdCgpCisgICAgZWxzZToKKyAgICAgICAgeWllbGQgcGF0aE9yRmlsZQorCisKK2NsYXNzIFBsaXN0KF9JbnRlcm5hbERpY3QpOgorICAgICIiIlRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIGR1bXAoKSBhbmQgbG9hZCgpCiAgICAgZnVuY3Rpb25zIGluc3RlYWQsIHRvZ2V0aGVyIHdpdGggcmVndWxhciBkaWN0IG9iamVjdHMuCiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprd2FyZ3MpOgotICAgICAgICBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCi0gICAgICAgIHdhcm4oIlRoZSBQbGlzdCBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgdGhlIHJlYWRQbGlzdCgpIGFuZCAiCi0gICAgICAgICAgICAgIndyaXRlUGxpc3QoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgd2FybigiVGhlIFBsaXN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbG9hZCgpIGFuZCAiCisgICAgICAgICAgICAgImR1bXAoKSBmdW5jdGlvbnMgaW5zdGVhZCIsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqKmt3YXJncykKIAorICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tRmlsZShjbHMsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHJlYWRQbGlzdCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCi0gICAgICAgIHJvb3RPYmplY3QgPSByZWFkUGxpc3QocGF0aE9yRmlsZSkKKyAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSBsb2FkKCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKKyAgICAgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHZhbHVlID0gbG9hZChmcCkKICAgICAgICAgcGxpc3QgPSBjbHMoKQotICAgICAgICBwbGlzdC51cGRhdGUocm9vdE9iamVjdCkKKyAgICAgICAgcGxpc3QudXBkYXRlKHZhbHVlKQogICAgICAgICByZXR1cm4gcGxpc3QKLSAgICBmcm9tRmlsZSA9IGNsYXNzbWV0aG9kKGZyb21GaWxlKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIHBhdGhPckZpbGUpOgotICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIHdyaXRlUGxpc3QoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgotICAgICAgICB3cml0ZVBsaXN0KHNlbGYsIHBhdGhPckZpbGUpCisgICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgZHVtcCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCisgICAgICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBkdW1wKHNlbGYsIGZwKQogCiAKLWRlZiBfZW5jb2RlQmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICMgY29waWVkIGZyb20gYmFzZTY0LmVuY29kZWJ5dGVzKCksIHdpdGggYWRkZWQgbWF4bGluZWxlbmd0aCBhcmd1bWVudAotICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMwotICAgIHBpZWNlcyA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKLSAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KLSAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKLSAgICByZXR1cm4gYicnLmpvaW4ocGllY2VzKQorZGVmIHJlYWRQbGlzdChwYXRoT3JGaWxlKToKKyAgICAiIiIKKyAgICBSZWFkIGEgLnBsaXN0IGZyb20gYSBwYXRoIG9yIGZpbGUuIHBhdGhPckZpbGUgc2hvdWxkIGVpdGhlcgorICAgIGJlIGEgZmlsZSBuYW1lLCBvciBhIHJlYWRhYmxlIGJpbmFyeSBmaWxlIG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWQgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgcmVhZFBsaXN0IGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkKCkgaW5zdGVhZCIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKworICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHJldHVybiBsb2FkKGZwLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgICAgICBkaWN0X3R5cGU9X0ludGVybmFsRGljdCkKKworZGVmIHdyaXRlUGxpc3QodmFsdWUsIHBhdGhPckZpbGUpOgorICAgICIiIgorICAgIFdyaXRlICd2YWx1ZScgdG8gYSAucGxpc3QgZmlsZS4gJ3BhdGhPckZpbGUnIG1heSBlaXRoZXIgYmUgYQorICAgIGZpbGUgbmFtZSBvciBhICh3cml0YWJsZSkgZmlsZSBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHdyaXRlUGxpc3QgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXAoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHdpdGggX21heWJlX29wZW4ocGF0aE9yRmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgIGR1bXAodmFsdWUsIGZwLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorCisKK2RlZiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSk6CisgICAgIiIiCisgICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gUmV0dXJuIHRoZSByb290IG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWRzIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHJlYWRQbGlzdEZyb21CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIHJldHVybiBsb2FkKEJ5dGVzSU8oZGF0YSksIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwKKyAgICAgICAgZGljdF90eXBlPV9JbnRlcm5hbERpY3QpCisKKworZGVmIHdyaXRlUGxpc3RUb0J5dGVzKHZhbHVlKToKKyAgICAiIiIKKyAgICBSZXR1cm4gJ3ZhbHVlJyBhcyBhIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wcyBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSB3cml0ZVBsaXN0VG9CeXRlcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcHMoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgIGYgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKQorICAgIHJldHVybiBmLmdldHZhbHVlKCkKKwogCiBjbGFzcyBEYXRhOgorICAgICIiIgorICAgIFdyYXBwZXIgZm9yIGJpbmFyeSBkYXRhLgogCi0gICAgIiIiV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEuIiIiCisgICAgVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVkLCB1c2UgYSBieXRlcyBvYmplY3QgaW5zdGVhZC4KKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgpAQCAtMzQ2LDEwICsyMTcsMTAgQEAKICAgICBkZWYgZnJvbUJhc2U2NChjbHMsIGRhdGEpOgogICAgICAgICAjIGJhc2U2NC5kZWNvZGVieXRlcyBqdXN0IGNhbGxzIGJpbmFzY2lpLmEyYl9iYXNlNjQ7CiAgICAgICAgICMgaXQgc2VlbXMgb3ZlcmtpbGwgdG8gdXNlIGJvdGggYmFzZTY0IGFuZCBiaW5hc2NpaS4KLSAgICAgICAgcmV0dXJuIGNscyhiaW5hc2NpaS5hMmJfYmFzZTY0KGRhdGEpKQorICAgICAgICByZXR1cm4gY2xzKF9kZWNvZGVfYmFzZTY0KGRhdGEpKQogCiAgICAgZGVmIGFzQmFzZTY0KHNlbGYsIG1heGxpbmVsZW5ndGg9NzYpOgotICAgICAgICByZXR1cm4gX2VuY29kZUJhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCisgICAgICAgIHJldHVybiBfZW5jb2RlX2Jhc2U2NChzZWxmLmRhdGEsIG1heGxpbmVsZW5ndGgpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5fX2NsYXNzX18pOgpAQCAtMzYyLDQzICsyMzMsMTE5IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHJlcHIoc2VsZi5kYXRhKSkKIAotY2xhc3MgUGxpc3RQYXJzZXI6CisjCisjCisjIEVuZCBvZiBkZXByZWNhdGVkIGZ1bmN0aW9uYWxpdHkKKyMKKyMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworIworIyBYTUwgc3VwcG9ydAorIworCisKKyMgWE1MICdoZWFkZXInCitQTElTVEhFQURFUiA9IGIiIiJcCis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CisiIiIKKworCisjIFJlZ2V4IHRvIGZpbmQgYW55IGNvbnRyb2wgY2hhcnMsIGV4Y2VwdCBmb3IgXHQgXG4gYW5kIFxyCitfY29udHJvbENoYXJQYXQgPSByZS5jb21waWxlKAorICAgIHIiW1x4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MGJceDBjXHgwZVx4MGYiCisgICAgciJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXSIpCisKK2RlZiBfZW5jb2RlX2Jhc2U2NChzLCBtYXhsaW5lbGVuZ3RoPTc2KToKKyAgICAjIGNvcGllZCBmcm9tIGJhc2U2NC5lbmNvZGVieXRlcygpLCB3aXRoIGFkZGVkIG1heGxpbmVsZW5ndGggYXJndW1lbnQKKyAgICBtYXhiaW5zaXplID0gKG1heGxpbmVsZW5ndGgvLzQpKjMKKyAgICBwaWVjZXMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgbWF4Ymluc2l6ZSk6CisgICAgICAgIGNodW5rID0gc1tpIDogaSArIG1heGJpbnNpemVdCisgICAgICAgIHBpZWNlcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NChjaHVuaykpCisgICAgcmV0dXJuIGInJy5qb2luKHBpZWNlcykKKworZGVmIF9kZWNvZGVfYmFzZTY0KHMpOgorICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmEyYl9iYXNlNjQocy5lbmNvZGUoInV0Zi04IikpCisKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQorCisjIENvbnRlbnRzIHNob3VsZCBjb25mb3JtIHRvIGEgc3Vic2V0IG9mIElTTyA4NjAxCisjIChpbiBwYXJ0aWN1bGFyLCBZWVlZICctJyBNTSAnLScgREQgJ1QnIEhIICc6JyBNTSAnOicgU1MgJ1onLiAgU21hbGxlciB1bml0cworIyBtYXkgYmUgb21pdHRlZCB3aXRoICMgIGEgbG9zcyBvZiBwcmVjaXNpb24pCitfZGF0ZVBhcnNlciA9IHJlLmNvbXBpbGUociIoP1A8eWVhcj5cZFxkXGRcZCkoPzotKD9QPG1vbnRoPlxkXGQpKD86LSg/UDxkYXk+XGRcZCkoPzpUKD9QPGhvdXI+XGRcZCkoPzo6KD9QPG1pbnV0ZT5cZFxkKSg/OjooP1A8c2Vjb25kPlxkXGQpKT8pPyk/KT8pP1oiLCByZS5BU0NJSSkKKworCitkZWYgX2RhdGVfZnJvbV9zdHJpbmcocyk6CisgICAgb3JkZXIgPSAoJ3llYXInLCAnbW9udGgnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcpCisgICAgZ2QgPSBfZGF0ZVBhcnNlci5tYXRjaChzKS5ncm91cGRpY3QoKQorICAgIGxzdCA9IFtdCisgICAgZm9yIGtleSBpbiBvcmRlcjoKKyAgICAgICAgdmFsID0gZ2Rba2V5XQorICAgICAgICBpZiB2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGxzdC5hcHBlbmQoaW50KHZhbCkpCisgICAgcmV0dXJuIGRhdGV0aW1lLmRhdGV0aW1lKCpsc3QpCisKKworZGVmIF9kYXRlX3RvX3N0cmluZyhkKToKKyAgICByZXR1cm4gJyUwNGQtJTAyZC0lMDJkVCUwMmQ6JTAyZDolMDJkWicgJSAoCisgICAgICAgIGQueWVhciwgZC5tb250aCwgZC5kYXksCisgICAgICAgIGQuaG91ciwgZC5taW51dGUsIGQuc2Vjb25kCisgICAgKQorCitkZWYgX2VzY2FwZSh0ZXh0KToKKyAgICBtID0gX2NvbnRyb2xDaGFyUGF0LnNlYXJjaCh0ZXh0KQorICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInN0cmluZ3MgY2FuJ3QgY29udGFpbnMgY29udHJvbCBjaGFyYWN0ZXJzOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBieXRlcyBpbnN0ZWFkIikKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikgICAgICAgIyBjb252ZXJ0IERPUyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcciIsICJcbiIpICAgICAgICAgIyBjb252ZXJ0IE1hYyBsaW5lIGVuZGluZ3MKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikgICAgICAgIyBlc2NhcGUgJyYnCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikgICAgICAgICMgZXNjYXBlICc8JworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpICAgICAgICAjIGVzY2FwZSAnPicKKyAgICByZXR1cm4gdGV4dAorCitjbGFzcyBfUGxpc3RQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgogICAgICAgICBzZWxmLnN0YWNrID0gW10KLSAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBOb25lCisgICAgICAgIHNlbGYuX3VzZV9idWlsdGluX3R5cGVzID0gdXNlX2J1aWx0aW5fdHlwZXMKKyAgICAgICAgc2VsZi5fZGljdF90eXBlID0gZGljdF90eXBlCiAKICAgICBkZWYgcGFyc2Uoc2VsZiwgZmlsZW9iaik6Ci0gICAgICAgIGZyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IFBhcnNlckNyZWF0ZQogICAgICAgICBzZWxmLnBhcnNlciA9IFBhcnNlckNyZWF0ZSgpCi0gICAgICAgIHNlbGYucGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZUJlZ2luRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlRW5kRWxlbWVudAotICAgICAgICBzZWxmLnBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuaGFuZGxlRGF0YQorICAgICAgICBzZWxmLnBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVfYmVnaW5fZWxlbWVudAorICAgICAgICBzZWxmLnBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlX2VuZF9lbGVtZW50CisgICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5oYW5kbGVfZGF0YQogICAgICAgICBzZWxmLnBhcnNlci5QYXJzZUZpbGUoZmlsZW9iaikKICAgICAgICAgcmV0dXJuIHNlbGYucm9vdAogCi0gICAgZGVmIGhhbmRsZUJlZ2luRWxlbWVudChzZWxmLCBlbGVtZW50LCBhdHRycyk6CisgICAgZGVmIGhhbmRsZV9iZWdpbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIGF0dHJzKToKICAgICAgICAgc2VsZi5kYXRhID0gW10KICAgICAgICAgaGFuZGxlciA9IGdldGF0dHIoc2VsZiwgImJlZ2luXyIgKyBlbGVtZW50LCBOb25lKQogICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaGFuZGxlcihhdHRycykKIAotICAgIGRlZiBoYW5kbGVFbmRFbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgIGRlZiBoYW5kbGVfZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CiAgICAgICAgIGhhbmRsZXIgPSBnZXRhdHRyKHNlbGYsICJlbmRfIiArIGVsZW1lbnQsIE5vbmUpCiAgICAgICAgIGlmIGhhbmRsZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBoYW5kbGVyKCkKIAotICAgIGRlZiBoYW5kbGVEYXRhKHNlbGYsIGRhdGEpOgorICAgIGRlZiBoYW5kbGVfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5kYXRhLmFwcGVuZChkYXRhKQogCi0gICAgZGVmIGFkZE9iamVjdChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBpcyBub3QgTm9uZToKKyAgICBkZWYgYWRkX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZXhwZWN0ZWQgZWxlbWVudCBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikKLSAgICAgICAgICAgIHNlbGYuc3RhY2tbLTFdW3NlbGYuY3VycmVudEtleV0gPSB2YWx1ZQotICAgICAgICAgICAgc2VsZi5jdXJyZW50S2V5ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zdGFja1stMV1bc2VsZi5jdXJyZW50X2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2tleSA9IE5vbmUKICAgICAgICAgZWxpZiBub3Qgc2VsZi5zdGFjazoKICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgcm9vdCBvYmplY3QKICAgICAgICAgICAgIHNlbGYucm9vdCA9IHZhbHVlCkBAIC00MDgsNyArMzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQogICAgICAgICAgICAgc2VsZi5zdGFja1stMV0uYXBwZW5kKHZhbHVlKQogCi0gICAgZGVmIGdldERhdGEoc2VsZik6CisgICAgZGVmIGdldF9kYXRhKHNlbGYpOgogICAgICAgICBkYXRhID0gJycuam9pbihzZWxmLmRhdGEpCiAgICAgICAgIHNlbGYuZGF0YSA9IFtdCiAgICAgICAgIHJldHVybiBkYXRhCkBAIC00MTYsMzkgKzM2Myw2NDggQEAKICAgICAjIGVsZW1lbnQgaGFuZGxlcnMKIAogICAgIGRlZiBiZWdpbl9kaWN0KHNlbGYsIGF0dHJzKToKLSAgICAgICAgZCA9IF9JbnRlcm5hbERpY3QoKQotICAgICAgICBzZWxmLmFkZE9iamVjdChkKQorICAgICAgICBkID0gc2VsZi5fZGljdF90eXBlKCkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGQpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGQpCisKICAgICBkZWYgZW5kX2RpY3Qoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1pc3NpbmcgdmFsdWUgZm9yIGtleSAnJXMnIGF0IGxpbmUgJWQiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudEtleSxzZWxmLnBhcnNlci5DdXJyZW50TGluZU51bWJlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRfa2V5LHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKSkKICAgICAgICAgc2VsZi5zdGFjay5wb3AoKQogCiAgICAgZGVmIGVuZF9rZXkoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY3VycmVudEtleSBvciBub3QgaXNpbnN0YW5jZShzZWxmLnN0YWNrWy0xXSwgdHlwZSh7fSkpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhY2tbLTFdLCB0eXBlKHt9KSk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmV4cGVjdGVkIGtleSBhdCBsaW5lICVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQotICAgICAgICBzZWxmLmN1cnJlbnRLZXkgPSBzZWxmLmdldERhdGEoKQorICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gc2VsZi5nZXRfZGF0YSgpCiAKICAgICBkZWYgYmVnaW5fYXJyYXkoc2VsZiwgYXR0cnMpOgogICAgICAgICBhID0gW10KLSAgICAgICAgc2VsZi5hZGRPYmplY3QoYSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGEpCiAgICAgICAgIHNlbGYuc3RhY2suYXBwZW5kKGEpCisKICAgICBkZWYgZW5kX2FycmF5KHNlbGYpOgogICAgICAgICBzZWxmLnN0YWNrLnBvcCgpCiAKICAgICBkZWYgZW5kX3RydWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KFRydWUpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChUcnVlKQorCiAgICAgZGVmIGVuZF9mYWxzZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoRmFsc2UpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChGYWxzZSkKKwogICAgIGRlZiBlbmRfaW50ZWdlcihzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoaW50KHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGludChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9yZWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChmbG9hdChzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChmbG9hdChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KHNlbGYuZ2V0RGF0YSgpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3Qoc2VsZi5nZXRfZGF0YSgpKQorCiAgICAgZGVmIGVuZF9kYXRhKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChEYXRhLmZyb21CYXNlNjQoc2VsZi5nZXREYXRhKCkuZW5jb2RlKCJ1dGYtOCIpKSkKKyAgICAgICAgaWYgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXM6CisgICAgICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RlY29kZV9iYXNlNjQoc2VsZi5nZXRfZGF0YSgpKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRfb2JqZWN0KERhdGEuZnJvbUJhc2U2NChzZWxmLmdldF9kYXRhKCkpKQorCiAgICAgZGVmIGVuZF9kYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChfZGF0ZUZyb21TdHJpbmcoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoX2RhdGVfZnJvbV9zdHJpbmcoc2VsZi5nZXRfZGF0YSgpKSkKKworCitjbGFzcyBfRHVtYlhNTFdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsPTAsIGluZGVudD0iXHQiKToKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQorICAgICAgICBzZWxmLnN0YWNrID0gW10KKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsID0gaW5kZW50X2xldmVsCisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisKKyAgICBkZWYgYmVnaW5fZWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZWxlbWVudCkKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+IiAlIGVsZW1lbnQpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisKKyAgICBkZWYgZW5kX2VsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgICAgIGFzc2VydCBzZWxmLl9pbmRlbnRfbGV2ZWwgPiAwCisgICAgICAgIGFzc2VydCBzZWxmLnN0YWNrLnBvcCgpID09IGVsZW1lbnQKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8LyVzPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHNpbXBsZV9lbGVtZW50KHNlbGYsIGVsZW1lbnQsIHZhbHVlPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHZhbHVlID0gX2VzY2FwZSh2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiVzPC8lcz4iICUgKGVsZW1lbnQsIHZhbHVlLCBlbGVtZW50KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXMvPiIgJSBlbGVtZW50KQorCisgICAgZGVmIHdyaXRlbG4oc2VsZiwgbGluZSk6CisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAjIHBsaXN0IGhhcyBmaXhlZCBlbmNvZGluZyBvZiB1dGYtOAorCisgICAgICAgICAgICAjIFhYWDogaXMgdGhpcyB0ZXN0IG5lZWRlZD8KKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgc3RyKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzZWxmLl9pbmRlbnRfbGV2ZWwgKiBzZWxmLmluZGVudCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoYidcbicpCisKKworY2xhc3MgX1BsaXN0V3JpdGVyKF9EdW1iWE1MV3JpdGVyKToKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgICAgICBzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWw9MCwgaW5kZW50PWIiXHQiLCB3cml0ZUhlYWRlcj0xLAorICAgICAgICAgICAgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKworICAgICAgICBpZiB3cml0ZUhlYWRlcjoKKyAgICAgICAgICAgIGZpbGUud3JpdGUoUExJU1RIRUFERVIpCisgICAgICAgIF9EdW1iWE1MV3JpdGVyLl9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbCwgaW5kZW50KQorICAgICAgICBzZWxmLl9zb3J0X2tleXMgPSBzb3J0X2tleXMKKyAgICAgICAgc2VsZi5fc2tpcGtleXMgPSBza2lwa2V5cworCisgICAgZGVmIHdyaXRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8cGxpc3QgdmVyc2lvbj1cIjEuMFwiPiIpCisgICAgICAgIHNlbGYud3JpdGVfdmFsdWUodmFsdWUpCisgICAgICAgIHNlbGYud3JpdGVsbigiPC9wbGlzdD4iKQorCisgICAgZGVmIHdyaXRlX3ZhbHVlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInN0cmluZyIsIHZhbHVlKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgVHJ1ZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInRydWUiKQorCisgICAgICAgIGVsaWYgdmFsdWUgaXMgRmFsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJmYWxzZSIpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9kaWN0KHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2RhdGEodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlcyh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImRhdGUiLCBfZGF0ZV90b19zdHJpbmcodmFsdWUpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2FycmF5KHZhbHVlKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQorCisgICAgZGVmIHdyaXRlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdGVfYnl0ZXMoZGF0YS5kYXRhKQorCisgICAgZGVmIHdyaXRlX2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImRhdGEiKQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICBtYXhsaW5lbGVuZ3RoID0gbWF4KAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICA3NiAtIGxlbihzZWxmLmluZGVudC5yZXBsYWNlKGIiXHQiLCBiIiAiICogOCkgKiBzZWxmLl9pbmRlbnRfbGV2ZWwpKQorCisgICAgICAgIGZvciBsaW5lIGluIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImRhdGEiKQorCisgICAgZGVmIHdyaXRlX2RpY3Qoc2VsZiwgZCk6CisgICAgICAgIGlmIGQ6CisgICAgICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImRpY3QiKQorICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImtleSIsIGtleSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiZGljdCIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImRpY3QiKQorCisgICAgZGVmIHdyaXRlX2FycmF5KHNlbGYsIGFycmF5KToKKyAgICAgICAgaWYgYXJyYXk6CisgICAgICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImFycmF5IikKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiYXJyYXkiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJhcnJheSIpCisKKworZGVmIF9pc19mbXRfeG1sKGhlYWRlcik6CisgICAgcHJlZml4ZXMgPSAoYic8P3htbCcsIGInPHBsaXN0JykKKworICAgIGZvciBwZnggaW4gcHJlZml4ZXM6CisgICAgICAgIGlmIGhlYWRlci5zdGFydHN3aXRoKHBmeCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBBbHNvIGNoZWNrIGZvciBhbHRlcm5hdGl2ZSBYTUwgZW5jb2RpbmdzLCB0aGlzIGlzIHNsaWdodGx5CisgICAgIyBvdmVya2lsbCBiZWNhdXNlIHRoZSBBcHBsZSB0b29scyAoYW5kIHBsaXN0bGliKSB3aWxsIG5vdAorICAgICMgZ2VuZXJhdGUgZmlsZXMgd2l0aCB0aGVzZSBlbmNvZGluZ3MuCisgICAgZm9yIGJvbSwgZW5jb2RpbmcgaW4gKAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjgsICJ1dGYtOCIpLAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjE2X0JFLCAidXRmLTE2LWJlIiksCisgICAgICAgICAgICAgICAgKGNvZGVjcy5CT01fVVRGMTZfTEUsICJ1dGYtMTYtbGUiKSwKKyAgICAgICAgICAgICAgICAjIGV4cGF0IGRvZXMgbm90IHN1cHBvcnQgdXRmLTMyCisgICAgICAgICAgICAgICAgIyhjb2RlY3MuQk9NX1VURjMyX0JFLCAidXRmLTMyLWJlIiksCisgICAgICAgICAgICAgICAgIyhjb2RlY3MuQk9NX1VURjMyX0xFLCAidXRmLTMyLWxlIiksCisgICAgICAgICAgICApOgorICAgICAgICBpZiBub3QgaGVhZGVyLnN0YXJ0c3dpdGgoYm9tKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZm9yIHN0YXJ0IGluIHByZWZpeGVzOgorICAgICAgICAgICAgcHJlZml4ID0gYm9tICsgc3RhcnQuZGVjb2RlKCdhc2NpaScpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIGlmIGhlYWRlcls6bGVuKHByZWZpeCldID09IHByZWZpeDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKKyMKKyMgQmluYXJ5IFBsaXN0CisjCisKKworY2xhc3MgSW52YWxpZEZpbGVFeGNlcHRpb24gKFZhbHVlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlPSJJbnZhbGlkIGZpbGUiKToKKyAgICAgICAgVmFsdWVFcnJvci5fX2luaXRfXyhzZWxmLCBtZXNzYWdlKQorCitfQklOQVJZX0ZPUk1BVCA9IHsxOiAnQicsIDI6ICdIJywgNDogJ0wnLCA4OiAnUSd9CisKK2NsYXNzIF9CaW5hcnlQbGlzdFBhcnNlcjoKKyAgICAiIiIKKyAgICBSZWFkIG9yIHdyaXRlIGEgYmluYXJ5IHBsaXN0IGZpbGUsIGZvbGxvd2luZyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJpbmFyeQorICAgIGZvcm1hdC4gIFJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uIGluIGNhc2Ugb2YgZXJyb3IsIG90aGVyd2lzZSByZXR1cm4gdGhlCisgICAgcm9vdCBvYmplY3QuCisKKyAgICBzZWUgYWxzbzogaHR0cDovL29wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9DRi9DRi03NDQuMTgvQ0ZCaW5hcnlQTGlzdC5jCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgorICAgICAgICBzZWxmLl91c2VfYnVpbHRpbl90eXBlcyA9IHVzZV9idWlsdGluX3R5cGVzCisgICAgICAgIHNlbGYuX2RpY3RfdHlwZSA9IGRpY3RfdHlwZQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUaGUgYmFzaWMgZmlsZSBmb3JtYXQ6CisgICAgICAgICAgICAjIEhFQURFUgorICAgICAgICAgICAgIyBvYmplY3QuLi4KKyAgICAgICAgICAgICMgcmVmaWQtPm9mZnNldC4uLgorICAgICAgICAgICAgIyBUUkFJTEVSCisgICAgICAgICAgICBzZWxmLl9mcCA9IGZwCisgICAgICAgICAgICBzZWxmLl9mcC5zZWVrKC0zMiwgb3MuU0VFS19FTkQpCisgICAgICAgICAgICB0cmFpbGVyID0gc2VsZi5fZnAucmVhZCgzMikKKyAgICAgICAgICAgIGlmIGxlbih0cmFpbGVyKSAhPSAzMjoKKyAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgb2Zmc2V0X3NpemUsIHNlbGYuX3JlZl9zaXplLCBudW1fb2JqZWN0cywgdG9wX29iamVjdCwKKyAgICAgICAgICAgICAgICBvZmZzZXRfdGFibGVfb2Zmc2V0CisgICAgICAgICAgICApID0gc3RydWN0LnVucGFjaygnPjZ4QkJRUVEnLCB0cmFpbGVyKQorICAgICAgICAgICAgc2VsZi5fZnAuc2VlayhvZmZzZXRfdGFibGVfb2Zmc2V0KQorICAgICAgICAgICAgb2Zmc2V0X2Zvcm1hdCA9ICc+JyArIF9CSU5BUllfRk9STUFUW29mZnNldF9zaXplXSAqIG51bV9vYmplY3RzCisgICAgICAgICAgICBzZWxmLl9yZWZfZm9ybWF0ID0gX0JJTkFSWV9GT1JNQVRbc2VsZi5fcmVmX3NpemVdCisgICAgICAgICAgICBzZWxmLl9vYmplY3Rfb2Zmc2V0cyA9IHN0cnVjdC51bnBhY2soCisgICAgICAgICAgICAgICAgb2Zmc2V0X2Zvcm1hdCwgc2VsZi5fZnAucmVhZChvZmZzZXRfc2l6ZSAqIG51bV9vYmplY3RzKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1t0b3Bfb2JqZWN0XSkKKworICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKKyAgICBkZWYgX2dldF9zaXplKHNlbGYsIHRva2VuTCk6CisgICAgICAgICIiIiByZXR1cm4gdGhlIHNpemUgb2YgdGhlIG5leHQgb2JqZWN0LiIiIgorICAgICAgICBpZiB0b2tlbkwgPT0gMHhGOgorICAgICAgICAgICAgbSA9IHNlbGYuX2ZwLnJlYWQoMSlbMF0gJiAweDMKKyAgICAgICAgICAgIHMgPSAxIDw8IG0KKyAgICAgICAgICAgIGYgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtzXQorICAgICAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soZiwgc2VsZi5fZnAucmVhZChzKSlbMF0KKworICAgICAgICByZXR1cm4gdG9rZW5MCisKKyAgICBkZWYgX3JlYWRfcmVmcyhzZWxmLCBuKToKKyAgICAgICAgcmV0dXJuIHN0cnVjdC51bnBhY2soCisgICAgICAgICAgICAnPicgKyBzZWxmLl9yZWZfZm9ybWF0ICogbiwgc2VsZi5fZnAucmVhZChuICogc2VsZi5fcmVmX3NpemUpKQorCisgICAgZGVmIF9yZWFkX29iamVjdChzZWxmLCBvZmZzZXQpOgorICAgICAgICAiIiIKKyAgICAgICAgcmVhZCB0aGUgb2JqZWN0IGF0IG9mZnNldC4KKworICAgICAgICBNYXkgcmVjdXJzaXZlbHkgcmVhZCBzdWItb2JqZWN0cyAoY29udGVudCBvZiBhbiBhcnJheS9kaWN0L3NldCkKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2ZwLnNlZWsob2Zmc2V0KQorICAgICAgICB0b2tlbiA9IHNlbGYuX2ZwLnJlYWQoMSlbMF0KKyAgICAgICAgdG9rZW5ILCB0b2tlbkwgPSB0b2tlbiAmIDB4RjAsIHRva2VuICYgMHgwRgorCisgICAgICAgIGlmIHRva2VuID09IDB4MDA6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwODoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwOToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgIyBUaGUgcmVmZXJlbmNlZCBzb3VyY2UgY29kZSBhbHNvIG1lbnRpb25zIFVSTCAoMHgwYywgMHgwZCkgYW5kCisgICAgICAgICMgVVVJRCAoMHgwZSksIGJ1dCBuZWl0aGVyIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIENvY29hIGxpYnJhcmllcy4KKworICAgICAgICBlbGlmIHRva2VuID09IDB4MGY6CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgZWxpZiB0b2tlbkggPT0gMHgxMDogICMgaW50CisgICAgICAgICAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoc2VsZi5fZnAucmVhZCgxIDw8IHRva2VuTCksICdiaWcnKQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgyMjogIyByZWFsCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmYnLCBzZWxmLl9mcC5yZWFkKDQpKVswXQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgyMzogIyByZWFsCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLl9mcC5yZWFkKDgpKVswXQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgzMzogICMgZGF0ZQorICAgICAgICAgICAgZiA9IHN0cnVjdC51bnBhY2soJz5kJywgc2VsZi5fZnAucmVhZCg4KSlbMF0KKyAgICAgICAgICAgICMgdGltZXN0YW1wIDAgb2YgYmluYXJ5IHBsaXN0cyBjb3JyZXNwb25kcyB0byAxLzEvMjAwMQorICAgICAgICAgICAgIyAoeWVhciBvZiBNYWMgT1MgWCAxMC4wKSwgaW5zdGVhZCBvZiAxLzEvMTk3MC4KKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGYgKyAoMzEgKiAzNjUgKyA4KSAqIDg2NDAwKQorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NDA6ICAjIGRhdGEKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBpZiBzZWxmLl91c2VfYnVpbHRpbl90eXBlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZnAucmVhZChzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRGF0YShzZWxmLl9mcC5yZWFkKHMpKQorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NTA6ICAjIGFzY2lpIHN0cmluZworICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIHJlc3VsdCA9ICBzZWxmLl9mcC5yZWFkKHMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NjA6ICAjIHVuaWNvZGUgc3RyaW5nCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZwLnJlYWQocyAqIDIpLmRlY29kZSgndXRmLTE2YmUnKQorCisgICAgICAgICMgdG9rZW5IID09IDB4ODAgaXMgZG9jdW1lbnRlZCBhcyAnVUlEJyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGZvcgorICAgICAgICAjIGtleWVkLWFyY2hpdmluZywgbm90IGluIHBsaXN0cy4KKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweEEwOiAgIyBhcnJheQorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIG9ial9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW3hdKQorICAgICAgICAgICAgICAgIGZvciB4IGluIG9ial9yZWZzXQorCisgICAgICAgICMgdG9rZW5IID09IDB4QjAgaXMgZG9jdW1lbnRlZCBhcyAnb3Jkc2V0JywgYnV0IGlzIG5vdCBhY3R1YWxseQorICAgICAgICAjIGltcGxlbWVudGVkIGluIHRoZSBBcHBsZSByZWZlcmVuY2UgY29kZS4KKworICAgICAgICAjIHRva2VuSCA9PSAweEMwIGlzIGRvY3VtZW50ZWQgYXMgJ3NldCcsIGJ1dCBzZXRzIGNhbm5vdCBiZSB1c2VkIGluCisgICAgICAgICMgcGxpc3RzLgorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4RDA6ICAjIGRpY3QKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBrZXlfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgb2JqX3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2RpY3RfdHlwZSgpCisgICAgICAgICAgICBmb3IgaywgbyBpbiB6aXAoa2V5X3JlZnMsIG9ial9yZWZzKToKKyAgICAgICAgICAgICAgICByZXN1bHRbc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNba10pCisgICAgICAgICAgICAgICAgICAgIF0gPSBzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1tvXSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKK2RlZiBfY291bnRfdG9fc2l6ZShjb3VudCk6CisgICAgaWYgY291bnQgPCAxIDw8IDg6CisgICAgICAgIHJldHVybiAxCisKKyAgICBlbGlmIGNvdW50IDwgMSA8PCAxNjoKKyAgICAgICAgcmV0dXJuIDIKKworICAgIGVsaWYgY291bnQgPDwgMSA8PCAzMjoKKyAgICAgICAgcmV0dXJuIDQKKworICAgIGVsc2U6CisgICAgICAgIHJldHVybiA4CisKK2NsYXNzIF9CaW5hcnlQbGlzdFdyaXRlciAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIHNvcnRfa2V5cywgc2tpcGtleXMpOgorICAgICAgICBzZWxmLl9mcCA9IGZwCisgICAgICAgIHNlbGYuX3NvcnRfa2V5cyA9IHNvcnRfa2V5cworICAgICAgICBzZWxmLl9za2lwa2V5cyA9IHNraXBrZXlzCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdmFsdWUpOgorCisgICAgICAgICMgRmxhdHRlbmVkIG9iamVjdCBsaXN0OgorICAgICAgICBzZWxmLl9vYmpsaXN0ID0gW10KKworICAgICAgICAjIE1hcHBpbmdzIGZyb20gb2JqZWN0LT5vYmplY3RpZAorICAgICAgICAjIEZpcnN0IGRpY3QgaGFzICh0eXBlKG9iamVjdCksIG9iamVjdCkgYXMgdGhlIGtleSwKKyAgICAgICAgIyBzZWNvbmQgZGljdCBpcyB1c2VkIHdoZW4gb2JqZWN0IGlzIG5vdCBoYXNoYWJsZSBhbmQKKyAgICAgICAgIyBoYXMgaWQob2JqZWN0KSBhcyB0aGUga2V5LgorICAgICAgICBzZWxmLl9vYmp0YWJsZSA9IHt9CisgICAgICAgIHNlbGYuX29iamlkdGFibGUgPSB7fQorCisgICAgICAgICMgQ3JlYXRlIGxpc3Qgb2YgYWxsIG9iamVjdHMgaW4gdGhlIHBsaXN0CisgICAgICAgIHNlbGYuX2ZsYXR0ZW4odmFsdWUpCisKKyAgICAgICAgIyBTaXplIG9mIG9iamVjdCByZWZlcmVuY2VzIGluIHNlcmlhbGl6ZWQgY29udGFpbmVycworICAgICAgICAjIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBwbGlzdC4KKyAgICAgICAgbnVtX29iamVjdHMgPSBsZW4oc2VsZi5fb2JqbGlzdCkKKyAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHMgPSBbMF0qbnVtX29iamVjdHMKKyAgICAgICAgc2VsZi5fcmVmX3NpemUgPSBfY291bnRfdG9fc2l6ZShudW1fb2JqZWN0cykKKworICAgICAgICBzZWxmLl9yZWZfZm9ybWF0ID0gX0JJTkFSWV9GT1JNQVRbc2VsZi5fcmVmX3NpemVdCisKKyAgICAgICAgIyBXcml0ZSBmaWxlIGhlYWRlcgorICAgICAgICBzZWxmLl9mcC53cml0ZShiJ2JwbGlzdDAwJykKKworICAgICAgICAjIFdyaXRlIG9iamVjdCBsaXN0CisgICAgICAgIGZvciBvYmogaW4gc2VsZi5fb2JqbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX29iamVjdChvYmopCisKKyAgICAgICAgIyBXcml0ZSByZWZudW0tPm9iamVjdCBvZmZzZXQgdGFibGUKKyAgICAgICAgdG9wX29iamVjdCA9IHNlbGYuX2dldHJlZm51bSh2YWx1ZSkKKyAgICAgICAgb2Zmc2V0X3RhYmxlX29mZnNldCA9IHNlbGYuX2ZwLnRlbGwoKQorICAgICAgICBvZmZzZXRfc2l6ZSA9IF9jb3VudF90b19zaXplKG9mZnNldF90YWJsZV9vZmZzZXQpCisgICAgICAgIG9mZnNldF9mb3JtYXQgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtvZmZzZXRfc2l6ZV0gKiBudW1fb2JqZWN0cworICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjayhvZmZzZXRfZm9ybWF0LCAqc2VsZi5fb2JqZWN0X29mZnNldHMpKQorCisgICAgICAgICMgV3JpdGUgdHJhaWxlcgorICAgICAgICBzb3J0X3ZlcnNpb24gPSAwCisgICAgICAgIHRyYWlsZXIgPSAoCisgICAgICAgICAgICBzb3J0X3ZlcnNpb24sIG9mZnNldF9zaXplLCBzZWxmLl9yZWZfc2l6ZSwgbnVtX29iamVjdHMsCisgICAgICAgICAgICB0b3Bfb2JqZWN0LCBvZmZzZXRfdGFibGVfb2Zmc2V0CisgICAgICAgICkKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz41eEJCQlFRUScsICp0cmFpbGVyKSkKKworICAgIGRlZiBfZmxhdHRlbihzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgRmlyc3QgY2hlY2sgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgb2JqZWN0IHRhYmxlLCBub3QgdXNlZCBmb3IKKyAgICAgICAgIyBjb250YWluZXJzIHRvIGVuc3VyZSB0aGF0IHR3byBzdWJjb250YWluZXJzIHdpdGggdGhlIHNhbWUgY29udGVudHMKKyAgICAgICAgIyB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgZGlzdGluY3QgdmFsdWVzLgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoCisgICAgICAgICAgICAgICAgc3RyLCBpbnQsIGZsb2F0LCBkYXRldGltZS5kYXRldGltZSwgYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUpLCB2YWx1ZSkgaW4gc2VsZi5fb2JqdGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgIGlmICh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKSBpbiBzZWxmLl9vYmp0YWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCB0byBvYmplY3RyZWZlcmVuY2UgbWFwCisgICAgICAgIHJlZm51bSA9IGxlbihzZWxmLl9vYmpsaXN0KQorICAgICAgICBzZWxmLl9vYmpsaXN0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpXSA9IHJlZm51bQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZSksIHZhbHVlKV0gPSByZWZudW0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX29iamlkdGFibGVbaWQodmFsdWUpXSA9IHJlZm51bQorCisgICAgICAgICMgQW5kIGZpbmFsbHkgcmVjdXJzZSBpbnRvIGNvbnRhaW5lcnMKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBrZXlzID0gW10KKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBpdGVtcyA9IHZhbHVlLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChpdGVtcykKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoaywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodikKKworICAgICAgICAgICAgZm9yIG8gaW4gaXRlcnRvb2xzLmNoYWluKGtleXMsIHZhbHVlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fZmxhdHRlbihvKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgbyBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mbGF0dGVuKG8pCisKKyAgICBkZWYgX2dldHJlZm51bShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZSksIHZhbHVlKV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmppZHRhYmxlW2lkKHZhbHVlKV0KKworICAgIGRlZiBfd3JpdGVfc2l6ZShzZWxmLCB0b2tlbiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPCAxNToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QicsIHRva2VuIHwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCA4OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkInLCB0b2tlbiB8IDB4RiwgMHgxMCwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCAxNjoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJIJywgdG9rZW4gfCAweEYsIDB4MTEsIHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgMzI6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCTCcsIHRva2VuIHwgMHhGLCAweDEyLCBzaXplKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQlEnLCB0b2tlbiB8IDB4RiwgMHgxMywgc2l6ZSkpCisKKyAgICBkZWYgX3dyaXRlX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJlZiA9IHNlbGYuX2dldHJlZm51bSh2YWx1ZSkKKyAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHNbcmVmXSA9IHNlbGYuX2ZwLnRlbGwoKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDAwJykKKworICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDA4JykKKworICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDknKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKyAgICAgICAgICAgIGlmIHZhbHVlIDwgMSA8PCA4OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkInLCAweDEwLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCAxNjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJIJywgMHgxMSwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgMzI6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CTCcsIDB4MTIsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CUScsIDB4MTMsIHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QmQnLCAweDIzLCB2YWx1ZSkpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6CisgICAgICAgICAgICBmID0gKHZhbHVlIC0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwMSwgMSwgMSkpLnRvdGFsX3NlY29uZHMoKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CZCcsIDB4MzMsIGYpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NDAsIGxlbih2YWx1ZS5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHZhbHVlLmRhdGEpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDQwLCBsZW4odmFsdWUpKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NTAsIGxlbih2YWx1ZSkpCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIHQgPSB2YWx1ZS5lbmNvZGUoJ3V0Zi0xNmJlJykKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zaXplKDB4NjAsIGxlbih2YWx1ZSkpCisKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHQpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKKyAgICAgICAgICAgIHJlZnMgPSBbc2VsZi5fZ2V0cmVmbnVtKG8pIGZvciBvIGluIHZhbHVlXQorICAgICAgICAgICAgcyA9IGxlbihyZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEEwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICpyZWZzKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAga2V5UmVmcywgdmFsUmVmcyA9IFtdLCBbXQorCisgICAgICAgICAgICBpZiBzZWxmLl9zb3J0X2tleXM6CisgICAgICAgICAgICAgICAgcm9vdEl0ZW1zID0gc29ydGVkKHZhbHVlLml0ZW1zKCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJvb3RJdGVtcyA9IHZhbHVlLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gcm9vdEl0ZW1zOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGssIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3NraXBrZXlzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJrZXlzIG11c3QgYmUgc3RyaW5ncyIpCisgICAgICAgICAgICAgICAga2V5UmVmcy5hcHBlbmQoc2VsZi5fZ2V0cmVmbnVtKGspKQorICAgICAgICAgICAgICAgIHZhbFJlZnMuYXBwZW5kKHNlbGYuX2dldHJlZm51bSh2KSkKKworICAgICAgICAgICAgcyA9IGxlbihrZXlSZWZzKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweEQwLCBzKQorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz4nICsgc2VsZi5fcmVmX2Zvcm1hdCAqIHMsICprZXlSZWZzKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqdmFsUmVmcykpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworCitkZWYgX2lzX2ZtdF9iaW5hcnkoaGVhZGVyKToKKyAgICByZXR1cm4gaGVhZGVyWzo4XSA9PSBiJ2JwbGlzdDAwJworCisKKyMKKyMgR2VuZXJpYyBiaXRzCisjCisKK19GT1JNQVRTPXsKKyAgICBGTVRfWE1MOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF94bWwsCisgICAgICAgIHBhcnNlcj1fUGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fUGxpc3RXcml0ZXIsCisgICAgKSwKKyAgICBGTVRfQklOQVJZOiBkaWN0KAorICAgICAgICBkZXRlY3Q9X2lzX2ZtdF9iaW5hcnksCisgICAgICAgIHBhcnNlcj1fQmluYXJ5UGxpc3RQYXJzZXIsCisgICAgICAgIHdyaXRlcj1fQmluYXJ5UGxpc3RXcml0ZXIsCisgICAgKQorfQorCisKK2RlZiBsb2FkKGZwLCAqLCBmbXQ9Tm9uZSwgdXNlX2J1aWx0aW5fdHlwZXM9VHJ1ZSwgZGljdF90eXBlPWRpY3QpOgorICAgICIiIlJlYWQgYSAucGxpc3QgZmlsZS4gJ2ZwJyBzaG91bGQgYmUgKHJlYWRhYmxlKSBmaWxlIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgaWYgZm10IGlzIE5vbmU6CisgICAgICAgIGhlYWRlciA9IGZwLnJlYWQoMzIpCisgICAgICAgIGZwLnNlZWsoMCkKKyAgICAgICAgZm9yIGluZm8gaW4gX0ZPUk1BVFMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBpbmZvWydkZXRlY3QnXShoZWFkZXIpOgorICAgICAgICAgICAgICAgIHAgPSBpbmZvWydwYXJzZXInXSgKKyAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsCisgICAgICAgICAgICAgICAgICAgIGRpY3RfdHlwZT1kaWN0X3R5cGUsCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworICAgIGVsc2U6CisgICAgICAgIHAgPSBfRk9STUFUU1tmbXRdWydwYXJzZXInXSh1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKworICAgIHJldHVybiBwLnBhcnNlKGZwKQorCisKK2RlZiBsb2Fkcyh2YWx1ZSwgKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUgZnJvbSBhIGJ5dGVzIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKHZhbHVlKQorICAgIHJldHVybiBsb2FkKAorICAgICAgICBmcCwgZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZT1kaWN0X3R5cGUpCisKKworZGVmIGR1bXAodmFsdWUsIGZwLCAqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKyAgICAiIiJXcml0ZSAndmFsdWUnIHRvIGEgLnBsaXN0IGZpbGUuICdmcCcgc2hvdWxkIGJlIGEgKHdyaXRhYmxlKQorICAgIGZpbGUgb2JqZWN0LgorICAgICIiIgorICAgIGlmIGZtdCBub3QgaW4gX0ZPUk1BVFM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGZvcm1hdDogJXIiJShmbXQsKSkKKworICAgIHdyaXRlciA9IF9GT1JNQVRTW2ZtdF1bIndyaXRlciJdKGZwLCBzb3J0X2tleXM9c29ydF9rZXlzLCBza2lwa2V5cz1za2lwa2V5cykKKyAgICB3cml0ZXIud3JpdGUodmFsdWUpCisKKworZGVmIGR1bXBzKHZhbHVlLCAqLCBmbXQ9Rk1UX1hNTCwgc2tpcGtleXM9RmFsc2UsIHNvcnRfa2V5cz1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBieXRlcyBvYmplY3Qgd2l0aCB0aGUgY29udGVudHMgZm9yIGEgLnBsaXN0IGZpbGUuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9c2tpcGtleXMsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKZGlmZiAtLWdpdCBhL0xpYi9wb3BsaWIucHkgYi9MaWIvcG9wbGliLnB5CmluZGV4IDQzZjgzMDUuLjIzYTM1MTcgMTAwNjQ0Ci0tLSBhL0xpYi9wb3BsaWIucHkKKysrIGIvTGliL3BvcGxpYi5weQpAQCAtMTMsNyArMTMsMTUgQEAKIAogIyBJbXBvcnRzCiAKLWltcG9ydCByZSwgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAorCit0cnk6CisgICAgaW1wb3J0IHNzbAorICAgIEhBVkVfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBVkVfU1NMID0gRmFsc2UKIAogX19hbGxfXyA9IFsiUE9QMyIsImVycm9yX3Byb3RvIl0KIApAQCAtNjEsNiArNjksOCBAQAogICAgICAgICAgICAgQVBPUCBuYW1lIGRpZ2VzdCAgICAgICAgYXBvcChuYW1lLCBkaWdlc3QpCiAgICAgICAgICAgICBUT1AgbXNnIG4gICAgICAgICAgICAgICB0b3AobXNnLCBuKQogICAgICAgICAgICAgVUlETCBbbXNnXSAgICAgICAgICAgICAgdWlkbChtc2cgPSBOb25lKQorICAgICAgICAgICAgQ0FQQSAgICAgICAgICAgICAgICAgICAgY2FwYSgpCisgICAgICAgICAgICBTVExTICAgICAgICAgICAgICAgICAgICBzdGxzKCkKIAogICAgIFJhaXNlcyBvbmUgZXhjZXB0aW9uOiAnZXJyb3JfcHJvdG8nLgogCkBAIC04Nyw2ICs5Nyw3IEBACiAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9zb2NrZXQodGltZW91dCkKICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCiAgICAgICAgIHNlbGYuX2RlYnVnZ2luZyA9IDAKQEAgLTI2OCw3ICsyNzksMTQgQEAKICAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgIyBUaGUgc2VydmVyIG1pZ2h0IGFscmVhZHkgaGF2ZSBjbG9zZWQgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2sgPSBOb25lCiAKICAgICAjX19kZWxfXyA9IHF1aXQKQEAgLTMyNCwyMSArMzQyLDcyIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2hvcnRjbWQoJ1VJREwgJXMnICUgd2hpY2gpCiAgICAgICAgIHJldHVybiBzZWxmLl9sb25nY21kKCdVSURMJykKIAotdHJ5OgotICAgIGltcG9ydCBzc2wKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgorCisgICAgZGVmIGNhcGEoc2VsZik6CisgICAgICAgICIiIlJldHVybiBzZXJ2ZXIgY2FwYWJpbGl0aWVzIChSRkMgMjQ0OSkgYXMgYSBkaWN0aW9uYXJ5CisgICAgICAgID4+PiBjPXBvcGxpYi5QT1AzKCdsb2NhbGhvc3QnKQorICAgICAgICA+Pj4gYy5jYXBhKCkKKyAgICAgICAgeydJTVBMRU1FTlRBVElPTic6IFsnQ3lydXMnLCAnUE9QMycsICdzZXJ2ZXInLCAndjIuMi4xMiddLAorICAgICAgICAgJ1RPUCc6IFtdLCAnTE9HSU4tREVMQVknOiBbJzAnXSwgJ0FVVEgtUkVTUC1DT0RFJzogW10sCisgICAgICAgICAnRVhQSVJFJzogWydORVZFUiddLCAnVVNFUic6IFtdLCAnU1RMUyc6IFtdLCAnUElQRUxJTklORyc6IFtdLAorICAgICAgICAgJ1VJREwnOiBbXSwgJ1JFU1AtQ09ERVMnOiBbXX0KKyAgICAgICAgPj4+CisKKyAgICAgICAgUmVhbGx5LCBhY2NvcmRpbmcgdG8gUkZDIDI0NDksIHRoZSBjeXJ1cyBmb2xrcyBzaG91bGQgYXZvaWQKKyAgICAgICAgaGF2aW5nIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGxpdCBpbnRvIG11bHRpcGxlIGFyZ3VtZW50cy4uLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9wYXJzZWNhcChsaW5lKToKKyAgICAgICAgICAgIGxzdCA9IGxpbmUuZGVjb2RlKCdhc2NpaScpLnNwbGl0KCkKKyAgICAgICAgICAgIHJldHVybiBsc3RbMF0sIGxzdFsxOl0KKworICAgICAgICBjYXBzID0ge30KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuX2xvbmdjbWQoJ0NBUEEnKQorICAgICAgICAgICAgcmF3Y2FwcyA9IHJlc3BbMV0KKyAgICAgICAgICAgIGZvciBjYXBsaW5lIGluIHJhd2NhcHM6CisgICAgICAgICAgICAgICAgY2Fwbm0sIGNhcGFyZ3MgPSBfcGFyc2VjYXAoY2FwbGluZSkKKyAgICAgICAgICAgICAgICBjYXBzW2NhcG5tXSA9IGNhcGFyZ3MKKyAgICAgICAgZXhjZXB0IGVycm9yX3Byb3RvIGFzIF9lcnI6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBDQVBBIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKKyAgICAgICAgcmV0dXJuIGNhcHMKKworCisgICAgZGVmIHN0bHMoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIFJGQyAyNTk1LgorCisgICAgICAgICAgICAgICAgY29udGV4dCAtIGEgc3NsLlNTTENvbnRleHQKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBIQVZFX1NTTDoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzdXBwb3J0IG1pc3NpbmcnKQorICAgICAgICBpZiBzZWxmLl90bHNfZXN0YWJsaXNoZWQ6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBUTFMgc2Vzc2lvbiBhbHJlYWR5IGVzdGFibGlzaGVkJykKKyAgICAgICAgY2FwcyA9IHNlbGYuY2FwYSgpCisgICAgICAgIGlmIG5vdCAnU1RMUycgaW4gY2FwczoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFNUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUTFMnKQorICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgIHNlbGYuc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBUcnVlCisgICAgICAgIHJldHVybiByZXNwCisKKworaWYgSEFWRV9TU0w6CiAKICAgICBjbGFzcyBQT1AzX1NTTChQT1AzKToKICAgICAgICAgIiIiUE9QMyBjbGllbnQgY2xhc3Mgb3ZlciBTU0wgY29ubmVjdGlvbgogCi0gICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lKQorICAgICAgICBJbnN0YW50aWF0ZSB3aXRoOiBQT1AzX1NTTChob3N0bmFtZSwgcG9ydD05OTUsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lKQogCiAgICAgICAgICAgICAgICBob3N0bmFtZSAtIHRoZSBob3N0bmFtZSBvZiB0aGUgcG9wMyBvdmVyIHNzbCBzZXJ2ZXIKICAgICAgICAgICAgICAgIHBvcnQgLSBwb3J0IG51bWJlcgogICAgICAgICAgICAgICAga2V5ZmlsZSAtIFBFTSBmb3JtYXR0ZWQgZmlsZSB0aGF0IGNvbnRhaW5zIHlvdXIgcHJpdmF0ZSBrZXkKICAgICAgICAgICAgICAgIGNlcnRmaWxlIC0gUEVNIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlCisgICAgICAgICAgICAgICBjb250ZXh0IC0gYSBzc2wuU1NMQ29udGV4dAogCiAgICAgICAgIFNlZSB0aGUgbWV0aG9kcyBvZiB0aGUgcGFyZW50IGNsYXNzIFBPUDMgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICAgICAgICAgIiIiCkBAIC0zNTMsMTcgKzQyMiwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFBPUDMuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZiwgdGltZW91dCk6CiAgICAgICAgICAgICBzb2NrID0gUE9QMy5fY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICBzb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gc29jawogCisgICAgICAgIGRlZiBzdGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgICAgICIiIlRoZSBtZXRob2QgdW5jb25kaXRpb25hbGx5IHJhaXNlcyBhbiBleGNlcHRpb24gc2luY2UgdGhlCisgICAgICAgICAgICBTVExTIGNvbW1hbmQgZG9lc24ndCBtYWtlIGFueSBzZW5zZSBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkCisgICAgICAgICAgICBTU0wvVExTIHNlc3Npb24uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKCctRVJSIFRMUyBzZXNzaW9uIGFscmVhZHkgZXN0YWJsaXNoZWQnKQorCiAgICAgX19hbGxfXy5hcHBlbmQoIlBPUDNfU1NMIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi9wb3NpeHBhdGgucHkgYi9MaWIvcG9zaXhwYXRoLnB5CmluZGV4IGIxZTFhOTIuLjQ5MmM0MTUgMTAwNjQ0Ci0tLSBhL0xpYi9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Bvc2l4cGF0aC5weQpAQCAtMTYyLDcgKzE2Miw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmsiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiBzdGF0LlNfSVNMTksoc3Quc3RfbW9kZSkKIApAQCAtMTcyLDU2ICsxNzIsMzUgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGV4aXN0cy4gIFJldHVybnMgVHJ1ZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIAogCi0jIEFyZSB0d28gZmlsZW5hbWVzIHJlYWxseSBwb2ludGluZyB0byB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZWZpbGUoZjEsIGYyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiIiIKLSAgICBzMSA9IG9zLnN0YXQoZjEpCi0gICAgczIgPSBvcy5zdGF0KGYyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIG9wZW4gZmlsZXMgcmVhbGx5IHJlZmVyZW5jaW5nIHRoZSBzYW1lIGZpbGU/Ci0jIChOb3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgZmlsZSBkZXNjcmlwdG9yISkKLQotZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHMxID0gb3MuZnN0YXQoZnAxKQotICAgIHMyID0gb3MuZnN0YXQoZnAyKQotICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCi0KLQotIyBBcmUgdHdvIHN0YXQgYnVmZmVycyAob2J0YWluZWQgZnJvbSBzdGF0LCBmc3RhdCBvciBsc3RhdCkKLSMgZGVzY3JpYmluZyB0aGUgc2FtZSBmaWxlPwotCi1kZWYgc2FtZXN0YXQoczEsIHMyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgotICAgIHJldHVybiBzMS5zdF9pbm8gPT0gczIuc3RfaW5vIGFuZCBcCi0gICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYKLQotCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PwogIyAoRG9lcyB0aGlzIHdvcmsgZm9yIGFsbCBVTklYZXM/ICBJcyBpdCBldmVuIGd1YXJhbnRlZWQgdG8gd29yayBieSBQb3NpeD8pCiAKIGRlZiBpc21vdW50KHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCIiIgotICAgIGlmIGlzbGluayhwYXRoKToKLSAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKLSAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgdHJ5OgogICAgICAgICBzMSA9IG9zLmxzdGF0KHBhdGgpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgIyBJdCBkb2Vzbid0IGV4aXN0IC0tIHNvIG5vdCBhIG1vdW50IHBvaW50LiA6LSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZWxzZToKKyAgICAgICAgIyBBIHN5bWxpbmsgY2FuIG5ldmVyIGJlIGEgbW91bnQgcG9pbnQKKyAgICAgICAgaWYgc3RhdC5TX0lTTE5LKHMxLnN0X21vZGUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKKyAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCBiJy4uJykKKyAgICBlbHNlOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsICcuLicpCisgICAgdHJ5OgogICAgICAgICBzMiA9IG9zLmxzdGF0KHBhcmVudCkKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHJldHVybiBGYWxzZSAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQgOi0pCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorCiAgICAgZGV2MSA9IHMxLnN0X2RldgogICAgIGRldjIgPSBzMi5zdF9kZXYKICAgICBpZiBkZXYxICE9IGRldjI6CmRpZmYgLS1naXQgYS9MaWIvcHByaW50LnB5IGIvTGliL3BwcmludC5weQppbmRleCAyMmJlMGI0Yi4uM2JlOWMzNiAxMDA2NDQKLS0tIGEvTGliL3BwcmludC5weQorKysgYi9MaWIvcHByaW50LnB5CkBAIC0zNCw2ICszNCw3IEBACiAKICIiIgogCitpbXBvcnQgcmUKIGltcG9ydCBzeXMgYXMgX3N5cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QgYXMgX09yZGVyZWREaWN0CiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTyBhcyBfU3RyaW5nSU8KQEAgLTQxLDIyICs0MiwxOSBAQAogX19hbGxfXyA9IFsicHByaW50IiwicGZvcm1hdCIsImlzcmVhZGFibGUiLCJpc3JlY3Vyc2l2ZSIsInNhZmVyZXByIiwKICAgICAgICAgICAgIlByZXR0eVByaW50ZXIiXQogCi0jIGNhY2hlIHRoZXNlIGZvciBmYXN0ZXIgYWNjZXNzOgotX2NvbW1ham9pbiA9ICIsICIuam9pbgotX2lkID0gaWQKLV9sZW4gPSBsZW4KLV90eXBlID0gdHlwZQogCi0KLWRlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKToKK2RlZiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCAqLAorICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAiIiJQcmV0dHktcHJpbnQgYSBQeXRob24gb2JqZWN0IHRvIGEgc3RyZWFtIFtkZWZhdWx0IGlzIHN5cy5zdGRvdXRdLiIiIgogICAgIHByaW50ZXIgPSBQcmV0dHlQcmludGVyKAotICAgICAgICBzdHJlYW09c3RyZWFtLCBpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgpCisgICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCwKKyAgICAgICAgY29tcGFjdD1jb21wYWN0KQogICAgIHByaW50ZXIucHByaW50KG9iamVjdCkKIAotZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBmb3JtYXQob2JqZWN0LCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIkZvcm1hdCBhIFB5dGhvbiBvYmplY3QgaW50byBhIHByZXR0eS1wcmludGVkIHJlcHJlc2VudGF0aW9uLiIiIgotICAgIHJldHVybiBQcmV0dHlQcmludGVyKGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkucGZvcm1hdChvYmplY3QpCisgICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhY3Q9Y29tcGFjdCkucGZvcm1hdChvYmplY3QpCiAKIGRlZiBzYWZlcmVwcihvYmplY3QpOgogICAgICIiIlZlcnNpb24gb2YgcmVwcigpIHdoaWNoIGNhbiBoYW5kbGUgcmVjdXJzaXZlIGRhdGEgc3RydWN0dXJlcy4iIiIKQEAgLTEwMSw3ICs5OSw4IEBACiAgICAgcmV0dXJuIF9zYWZlX2tleSh0WzBdKSwgX3NhZmVfa2V5KHRbMV0pCiAKIGNsYXNzIFByZXR0eVByaW50ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKToKICAgICAgICAgIiIiSGFuZGxlIHByZXR0eSBwcmludGluZyBvcGVyYXRpb25zIG9udG8gYSBzdHJlYW0gdXNpbmcgYSBzZXQgb2YKICAgICAgICAgY29uZmlndXJlZCBwYXJhbWV0ZXJzLgogCkBAIC0xMTgsNiArMTE3LDkgQEAKICAgICAgICAgICAgIFRoZSBkZXNpcmVkIG91dHB1dCBzdHJlYW0uICBJZiBvbWl0dGVkIChvciBmYWxzZSksIHRoZSBzdGFuZGFyZAogICAgICAgICAgICAgb3V0cHV0IHN0cmVhbSBhdmFpbGFibGUgYXQgY29uc3RydWN0aW9uIHdpbGwgYmUgdXNlZC4KIAorICAgICAgICBjb21wYWN0CisgICAgICAgICAgICBJZiB0cnVlLCBzZXZlcmFsIGl0ZW1zIHdpbGwgYmUgY29tYmluZWQgaW4gb25lIGxpbmUuCisKICAgICAgICAgIiIiCiAgICAgICAgIGluZGVudCA9IGludChpbmRlbnQpCiAgICAgICAgIHdpZHRoID0gaW50KHdpZHRoKQpAQCAtMTMxLDYgKzEzMyw3IEBACiAgICAgICAgICAgICBzZWxmLl9zdHJlYW0gPSBzdHJlYW0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX2NvbXBhY3QgPSBib29sKGNvbXBhY3QpCiAKICAgICBkZWYgcHByaW50KHNlbGYsIG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3QsIHNlbGYuX3N0cmVhbSwgMCwgMCwge30sIDApCkBAIC0xNTAsMjggKzE1MywyNSBAQAogCiAgICAgZGVmIF9mb3JtYXQoc2VsZiwgb2JqZWN0LCBzdHJlYW0sIGluZGVudCwgYWxsb3dhbmNlLCBjb250ZXh0LCBsZXZlbCk6CiAgICAgICAgIGxldmVsID0gbGV2ZWwgKyAxCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoX3JlY3Vyc2lvbihvYmplY3QpKQogICAgICAgICAgICAgc2VsZi5fcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIob2JqZWN0LCBjb250ZXh0LCBsZXZlbCAtIDEpCi0gICAgICAgIHR5cCA9IF90eXBlKG9iamVjdCkKLSAgICAgICAgc2VwTGluZXMgPSBfbGVuKHJlcCkgPiAoc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlKQorICAgICAgICB0eXAgPSB0eXBlKG9iamVjdCkKKyAgICAgICAgbWF4X3dpZHRoID0gc2VsZi5fd2lkdGggLSAxIC0gaW5kZW50IC0gYWxsb3dhbmNlCisgICAgICAgIHNlcExpbmVzID0gbGVuKHJlcCkgPiBtYXhfd2lkdGgKICAgICAgICAgd3JpdGUgPSBzdHJlYW0ud3JpdGUKIAotICAgICAgICBpZiBzZWxmLl9kZXB0aCBhbmQgbGV2ZWwgPiBzZWxmLl9kZXB0aDoKLSAgICAgICAgICAgIHdyaXRlKHJlcCkKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGlmIHNlcExpbmVzOgogICAgICAgICAgICAgciA9IGdldGF0dHIodHlwLCAiX19yZXByX18iLCBOb25lKQogICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIGRpY3QpOgogICAgICAgICAgICAgICAgIHdyaXRlKCd7JykKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmRlbnRfcGVyX2xldmVsID4gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCiAgICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKQEAgLTE4MywxMyArMTgzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnOiAnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgbGVuKHJlcCkgKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpZiBsZW5ndGggPiAxOgogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZW50IGluIGl0ZW1zWzE6XToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGtleSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbiVzJXM6ICcgJSAoJyAnKmluZGVudCwgcmVwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIF9sZW4ocmVwKSArIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KQEAgLTIwMSw3ICsyMDEsNyBAQAogICAgICAgICAgICAgICAgIChpc3N1YmNsYXNzKHR5cCwgc2V0KSBhbmQgciBpcyBzZXQuX19yZXByX18pIG9yCiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBmcm96ZW5zZXQpIGFuZCByIGlzIGZyb3plbnNldC5fX3JlcHJfXykKICAgICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICAgICAgbGVuZ3RoID0gX2xlbihvYmplY3QpCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gbGVuKG9iamVjdCkKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgbGlzdCk6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdbJykKICAgICAgICAgICAgICAgICAgICAgZW5kY2hhciA9ICddJwpAQCAtMjI1LDIzICsyMjUsNzEgQEAKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoKHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgLSAxKSAqICcgJykKICAgICAgICAgICAgICAgICBpZiBsZW5ndGg6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbb2JqaWRdID0gMQotICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChvYmplY3RbMF0sIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW50IGluIG9iamVjdFsxOl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyxcbicgKyAnICcqaW5kZW50KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCAtIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0X2l0ZW1zKG9iamVjdCwgc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgdHVwbGUpIGFuZCBsZW5ndGggPT0gMToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJywnKQogICAgICAgICAgICAgICAgIHdyaXRlKGVuZGNoYXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBzdHIpIGFuZCBsZW4ob2JqZWN0KSA+IDAgYW5kIHIgaXMgc3RyLl9fcmVwcl9fOgorICAgICAgICAgICAgICAgIGRlZiBfc3RyX3BhcnRzKHMpOgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzdHJpbmcgbGl0ZXJhbHMgY29tcHJpc2luZyB0aGUgcmVwcigpCisgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBnaXZlbiBzdHJpbmcgdXNpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBzLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHJlcHIobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXApIDw9IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgKG5vbi1zcGFjZSwgc3BhY2UpIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0cyA9IHJlLnNwbGl0KHInKFxzKyknLCBsaW5lKSArIFsnJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocGFydHMpLCAyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRzW2ldICsgcGFydHNbaSsxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGUgPSBjdXJyZW50ICsgcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwcihjYW5kaWRhdGUpKSA+IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN1cnJlbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcmVwcihjdXJyZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjYW5kaWRhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCByZXByKGN1cnJlbnQpCisgICAgICAgICAgICAgICAgZm9yIGksIHJlcCBpbiBlbnVtZXJhdGUoX3N0cl9wYXJ0cyhvYmplY3QpKToKKyAgICAgICAgICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnXG4nICsgJyAnKmluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3cml0ZShyZXApCiAKKyAgICBkZWYgX2Zvcm1hdF9pdGVtcyhzZWxmLCBpdGVtcywgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQorICAgICAgICBkZWxpbW5sID0gJyxcbicgKyAnICcgKiBpbmRlbnQKKyAgICAgICAgZGVsaW0gPSAnJworICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50IC0gYWxsb3dhbmNlICsgMgorICAgICAgICBmb3IgZW50IGluIGl0ZW1zOgorICAgICAgICAgICAgaWYgc2VsZi5fY29tcGFjdDoKKyAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGVudCwgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICAgICAgdyA9IGxlbihyZXApICsgMgorICAgICAgICAgICAgICAgIGlmIHdpZHRoIDwgdzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtYXhfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVsaW06CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgICAgICBpZiB3aWR0aCA+PSB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRlbGltKQorICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICcsICcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKQorCiAgICAgZGVmIF9yZXByKHNlbGYsIG9iamVjdCwgY29udGV4dCwgbGV2ZWwpOgogICAgICAgICByZXByLCByZWFkYWJsZSwgcmVjdXJzaXZlID0gc2VsZi5mb3JtYXQob2JqZWN0LCBjb250ZXh0LmNvcHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcHRoLCBsZXZlbCkKQEAgLTI2Miw3ICszMTAsNyBAQAogIyBSZXR1cm4gdHJpcGxlIChyZXByX3N0cmluZywgaXNyZWFkYWJsZSwgaXNyZWN1cnNpdmUpLgogCiBkZWYgX3NhZmVfcmVwcihvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpOgotICAgIHR5cCA9IF90eXBlKG9iamVjdCkKKyAgICB0eXAgPSB0eXBlKG9iamVjdCkKICAgICBpZiB0eXAgaXMgc3RyOgogICAgICAgICBpZiAnbG9jYWxlJyBub3QgaW4gX3N5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgVHJ1ZSwgRmFsc2UKQEAgLTI4Niw3ICszMzQsNyBAQAogICAgIGlmIGlzc3ViY2xhc3ModHlwLCBkaWN0KSBhbmQgciBpcyBkaWN0Ll9fcmVwcl9fOgogICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuICJ7fSIsIFRydWUsIEZhbHNlCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuICJ7Li4ufSIsIEZhbHNlLCBvYmppZCBpbiBjb250ZXh0CiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CkBAIC0zMDcsNyArMzU1LDcgQEAKICAgICAgICAgICAgIGlmIGtyZWN1ciBvciB2cmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuICJ7JXN9IiAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgaWYgKGlzc3ViY2xhc3ModHlwLCBsaXN0KSBhbmQgciBpcyBsaXN0Ll9fcmVwcl9fKSBvciBcCiAgICAgICAgKGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIHIgaXMgdHVwbGUuX19yZXByX18pOgpAQCAtMzE1LDEzICszNjMsMTMgQEAKICAgICAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJbXSIsIFRydWUsIEZhbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSAiWyVzXSIKLSAgICAgICAgZWxpZiBfbGVuKG9iamVjdCkgPT0gMToKKyAgICAgICAgZWxpZiBsZW4ob2JqZWN0KSA9PSAxOgogICAgICAgICAgICAgZm9ybWF0ID0gIiglcywpIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIigpIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICIoJXMpIgotICAgICAgICBvYmppZCA9IF9pZChvYmplY3QpCisgICAgICAgIG9iamlkID0gaWQob2JqZWN0KQogICAgICAgICBpZiBtYXhsZXZlbHMgYW5kIGxldmVsID49IG1heGxldmVsczoKICAgICAgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLi4uIiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTM0MCw3ICszODgsNyBAQAogICAgICAgICAgICAgaWYgb3JlY3VyOgogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCi0gICAgICAgIHJldHVybiBmb3JtYXQgJSBfY29tbWFqb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCisgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLCAiLmpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKIAogICAgIHJlcCA9IHJlcHIob2JqZWN0KQogICAgIHJldHVybiByZXAsIChyZXAgYW5kIG5vdCByZXAuc3RhcnRzd2l0aCgnPCcpKSwgRmFsc2UKQEAgLTM0OCw3ICszOTYsNyBAQAogCiBkZWYgX3JlY3Vyc2lvbihvYmplY3QpOgogICAgIHJldHVybiAoIjxSZWN1cnNpb24gb24gJXMgd2l0aCBpZD0lcz4iCi0gICAgICAgICAgICAlIChfdHlwZShvYmplY3QpLl9fbmFtZV9fLCBfaWQob2JqZWN0KSkpCisgICAgICAgICAgICAlICh0eXBlKG9iamVjdCkuX19uYW1lX18sIGlkKG9iamVjdCkpKQogCiAKIGRlZiBfcGVyZmNoZWNrKG9iamVjdD1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9wcm9maWxlLnB5IGIvTGliL3Byb2ZpbGUucHkKaW5kZXggNzQzZTc3ZC4uNWQwZTk2OCAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTQwLDYgKzQwLDQwIEBACiAjICAgICAgIHJldHVybiBpX2NvdW50CiAjaXRpbWVzID0gaW50ZWdlcl90aW1lciAjIHJlcGxhY2Ugd2l0aCBDIGNvZGVkIHRpbWVyIHJldHVybmluZyBpbnRlZ2VycwogCitjbGFzcyBfVXRpbHM6CisgICAgIiIiU3VwcG9ydCBjbGFzcyBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBieQorICAgIHByb2ZpbGUucHkgYW5kIGNQcm9maWxlLnB5IG1vZHVsZXMuCisgICAgTm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZmlsZXIpOgorICAgICAgICBzZWxmLnByb2ZpbGVyID0gcHJvZmlsZXIKKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW4oc3RhdGVtZW50KQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Nob3cocHJvZiwgZmlsZW5hbWUsIHNvcnQpCisKKyAgICBkZWYgcnVuY3R4KHNlbGYsIHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBfc2hvdyhzZWxmLCBwcm9mLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZi5wcmludF9zdGF0cyhzb3J0KQorCisKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgZm9yIHRoZSBwcm9maWxlciBjbGFzcwogIyBOb3RlIHRoYXQgYW4gaW5zdGFuY2Ugb2YgUHJvZmlsZSgpIGlzICpub3QqIG5lZWRlZCB0byBjYWxsIHRoZW0uCkBAIC01NiwxNSArOTAsNyBAQAogICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KICAgICBlYWNoIGxpbmUuCiAgICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHRyeToKLSAgICAgICAgcHJvZiA9IHByb2YucnVuKHN0YXRlbWVudCkKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcwotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKICAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLApAQCAtNzIsMTYgKzk4LDggQEAKIAogICAgIHN0YXRlbWVudCBhbmQgZmlsZW5hbWUgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcHJvZmlsZS5ydW4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgIHBhc3MKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKIGNsYXNzIFByb2ZpbGU6CiAgICAgIiIiUHJvZmlsZXIgY2xhc3MuCkBAIC0zNzMsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cygpCiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLnNpbXVsYXRlX2NtZF9jb21wbGV0ZSgpCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA2YTc3NjA1Li5lMWVjMzU1IDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTkzLDkgKzkzLDggQEAKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6Ci0gICAgICAgICAgICBmID0gb3BlbihhcmcsICdyYicpCi0gICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihhcmcsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGVfc3RhdHMgPSBvcy5zdGF0KGFyZykKICAgICAgICAgICAgICAgICBhcmcgPSB0aW1lLmN0aW1lKGZpbGVfc3RhdHMuc3RfbXRpbWUpICsgIiAgICAiICsgYXJnCkBAIC0xNDksMTEgKzE0OCw4IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIldyaXRlIHRoZSBwcm9maWxlIGRhdGEgdG8gYSBmaWxlIHdlIGtub3cgaG93IHRvIGxvYWQgYmFjay4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3YicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICMgbGlzdCB0aGUgdHVwbGUgaW5kaWNlcyBhbmQgZGlyZWN0aW9ucyBmb3Igc29ydGluZywKICAgICAjIGFsb25nIHdpdGggc29tZSBwcmludGFibGUgZGVzY3JpcHRpb24KQEAgLTYxMiw3ICs2MDgsNyBAQAogICAgICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhsaW5lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzFdLCBmaWxlPXNlbGYuc3RyZWFtKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKZGlmZiAtLWdpdCBhL0xpYi9wdHkucHkgYi9MaWIvcHR5LnB5CmluZGV4IDNjY2Y2MTkuLmU4NDFmMTIgMTAwNjQ0Ci0tLSBhL0xpYi9wdHkucHkKKysrIGIvTGliL3B0eS5weQpAQCAtNDcsMjcgKzQ3LDE2IEBACiAgICAgcmV0dXJuIF9vcGVuX3Rlcm1pbmFsKCkKIAogZGVmIF9vcGVuX3Rlcm1pbmFsKCk6Ci0gICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLgotICAgIFNHSSBhbmQgZ2VuZXJpYyBCU0QgdmVyc2lvbiwgZm9yIHdoZW4gb3BlbnB0eSgpIGZhaWxzLiIiIgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IHNnaQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHR0eV9uYW1lLCBtYXN0ZXJfZmQgPSBzZ2kuX2dldHB0eShvcy5PX1JEV1IsIDBvNjY2LCAwKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBvcy5lcnJvcihtc2cpCi0gICAgICAgIHJldHVybiBtYXN0ZXJfZmQsIHR0eV9uYW1lCisgICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLiIiIgogICAgIGZvciB4IGluICdwcXJzdHV2d3h5elBRUlNUJzoKICAgICAgICAgZm9yIHkgaW4gJzAxMjM0NTY3ODlhYmNkZWYnOgogICAgICAgICAgICAgcHR5X25hbWUgPSAnL2Rldi9wdHknICsgeCArIHkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocHR5X25hbWUsIG9zLk9fUkRXUikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXR1cm4gKGZkLCAnL2Rldi90dHknICsgeCArIHkpCi0gICAgcmFpc2Ugb3MuZXJyb3IoJ291dCBvZiBwdHkgZGV2aWNlcycpCisgICAgcmFpc2UgT1NFcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKIAogZGVmIHNsYXZlX29wZW4odHR5X25hbWUpOgogICAgICIiInNsYXZlX29wZW4odHR5X25hbWUpIC0+IHNsYXZlX2ZkCkBAIC04Myw3ICs3Miw3IEBACiAgICAgdHJ5OgogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgInB0ZW0iKQogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgImxkdGVybSIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE3Myw4ICsxNjIsOSBAQAogICAgICAgICByZXN0b3JlID0gMAogICAgIHRyeToKICAgICAgICAgX2NvcHkobWFzdGVyX2ZkLCBtYXN0ZXJfcmVhZCwgc3RkaW5fcmVhZCkKLSAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByZXN0b3JlOgogICAgICAgICAgICAgdHR5LnRjc2V0YXR0cihTVERJTl9GSUxFTk8sIHR0eS5UQ1NBRkxVU0gsIG1vZGUpCiAKICAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCisgICAgcmV0dXJuIG9zLndhaXRwaWQocGlkLCAwKVsxXQpkaWZmIC0tZ2l0IGEvTGliL3B5X2NvbXBpbGUucHkgYi9MaWIvcHlfY29tcGlsZS5weQppbmRleCA2MmQ2OWFkLi4xMjc3YjkzIDEwMDY0NAotLS0gYS9MaWIvcHlfY29tcGlsZS5weQorKysgYi9MaWIvcHlfY29tcGlsZS5weQpAQCAtMywxNyArMywxNCBAQAogVGhpcyBtb2R1bGUgaGFzIGludGltYXRlIGtub3dsZWRnZSBvZiB0aGUgZm9ybWF0IG9mIC5weWMgZmlsZXMuCiAiIiIKIAotaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKLWltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQogaW1wb3J0IHRyYWNlYmFjawogCi1NQUdJQyA9IGltcC5nZXRfbWFnaWMoKQotCiBfX2FsbF9fID0gWyJjb21waWxlIiwgIm1haW4iLCAiUHlDb21waWxlRXJyb3IiXQogCiAKQEAgLTY1LDEzICs2Miw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLWRlZiB3cl9sb25nKGYsIHgpOgotICAgICIiIkludGVybmFsOyB3cml0ZSBhIDMyLWJpdCBpbnQgdG8gYSBmaWxlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuIiIiCi0gICAgZi53cml0ZShieXRlcyhbeCAgICAgICAgICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiA4KSAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMjQpICYgMHhmZl0pKQotCiBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSk6CiAgICAgIiIiQnl0ZS1jb21waWxlIG9uZSBQeXRob24gc291cmNlIGZpbGUgdG8gUHl0aG9uIGJ5dGVjb2RlLgogCkBAIC0xMDcsMTggKzk3LDMxIEBACiAgICAgU2VlIGNvbXBpbGVhbGwucHkgZm9yIGEgc2NyaXB0L21vZHVsZSB0aGF0IHVzZXMgdGhpcyBtb2R1bGUgdG8KICAgICBieXRlLWNvbXBpbGUgYWxsIGluc3RhbGxlZCBmaWxlcyAob3IgYWxsIGZpbGVzIGluIHNlbGVjdGVkCiAgICAgZGlyZWN0b3JpZXMpLgorCisgICAgRG8gbm90ZSB0aGF0IEZpbGVFeGlzdHNFcnJvciBpcyByYWlzZWQgaWYgY2ZpbGUgZW5kcyB1cCBwb2ludGluZyBhdCBhCisgICAgbm9uLXJlZ3VsYXIgZmlsZSBvciBzeW1saW5rLiBCZWNhdXNlIHRoZSBjb21waWxhdGlvbiB1c2VzIGEgZmlsZSByZW5hbWluZywKKyAgICB0aGUgcmVzdWx0aW5nIGZpbGUgd291bGQgYmUgcmVndWxhciBhbmQgdGh1cyBub3QgdGhlIHNhbWUgdHlwZSBvZiBmaWxlIGFzCisgICAgaXQgd2FzIHByZXZpb3VzbHkuCiAgICAgIiIiCi0gICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGUpIGFzIGY6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGUpCi0gICAgICAgIHRpbWVzdGFtcCA9IGludChzdC5zdF9tdGltZSkKLSAgICAgICAgc2l6ZSA9IHN0LnN0X3NpemUgJiAweEZGRkZGRkZGCi0gICAgICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQorICAgIGlmIGNmaWxlIGlzIE5vbmU6CisgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICBpZiBvcy5wYXRoLmlzbGluayhjZmlsZSk6CisgICAgICAgIG1zZyA9ICgne30gaXMgYSBzeW1saW5rIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW50byBhIHJlZ3VsYXIgZmlsZSBpZiAnCisgICAgICAgICAgICAgICAnaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGNmaWxlKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIG5vbi1yZWd1bGFyIGZpbGUgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciAnCisgICAgICAgICAgICAgICAnb25lIGlmIGltcG9ydCB3cml0ZXMgYSBieXRlLWNvbXBpbGVkIGZpbGUgdG8gaXQnKQorICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IobXNnLmZvcm1hdChjZmlsZSkpCisgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCc8cHlfY29tcGlsZT4nLCBmaWxlKQorICAgIHNvdXJjZV9ieXRlcyA9IGxvYWRlci5nZXRfZGF0YShmaWxlKQogICAgIHRyeToKLSAgICAgICAgY29kZW9iamVjdCA9IGJ1aWx0aW5zLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT1vcHRpbWl6ZSkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShzb3VyY2VfYnl0ZXMsIGRmaWxlIG9yIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGltaXplPW9wdGltaXplKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBweV9leGMgPSBQeUNvbXBpbGVFcnJvcihlcnIuX19jbGFzc19fLCBlcnIsIGRmaWxlIG9yIGZpbGUpCiAgICAgICAgIGlmIGRvcmFpc2U6CkBAIC0xMjYsMjggKzEyOSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShweV9leGMubXNnICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybgotICAgIGlmIGNmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgIHRyeToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaWYgZGlybmFtZToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKLSAgICAgICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCi0gICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKLSAgICAgICAgd3JfbG9uZyhmYywgc2l6ZSkKLSAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQotICAgICAgICBmYy5mbHVzaCgpCi0gICAgICAgIGZjLnNlZWsoMCwgMCkKLSAgICAgICAgZmMud3JpdGUoTUFHSUMpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCisgICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY29kZV90b19ieXRlY29kZSgKKyAgICAgICAgICAgIGNvZGUsIHNvdXJjZV9zdGF0c1snbXRpbWUnXSwgc291cmNlX3N0YXRzWydzaXplJ10pCisgICAgbW9kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jYWxjX21vZGUoZmlsZSkKKyAgICBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fd3JpdGVfYXRvbWljKGNmaWxlLCBieXRlY29kZSwgbW9kZSkKICAgICByZXR1cm4gY2ZpbGUKIAorCiBkZWYgbWFpbihhcmdzPU5vbmUpOgogICAgICIiIkNvbXBpbGUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCiAKQEAgLTE3Myw3ICsxNjgsNyBAQAogICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IubXNnKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBydiA9IDEKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggOWRjZTA3OS4uMmU2MzIyNiAxMDA3NTUKLS0tIGEvTGliL3B5ZG9jLnB5CisrKyBiL0xpYi9weWRvYy5weQpAQCAtNDQsMTYgKzQ0LDE2IEBACiAiIiIKIAogIyBLbm93biBidWdzIHRoYXQgY2FuJ3QgYmUgZml4ZWQgaGVyZToKLSMgICAtIGltcC5sb2FkX21vZHVsZSgpIGNhbm5vdCBiZSBwcmV2ZW50ZWQgZnJvbSBjbG9iYmVyaW5nIGV4aXN0aW5nCi0jICAgICBsb2FkZWQgbW9kdWxlcywgc28gY2FsbGluZyBzeW5vcHNpcygpIG9uIGEgYmluYXJ5IG1vZHVsZSBmaWxlCi0jICAgICBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhbnkgZXhpc3RpbmcgbW9kdWxlIHdpdGggdGhlIHNhbWUgbmFtZS4KKyMgICAtIHN5bm9wc2lzKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKKyMgICAgIGxvYWRlZCBtb2R1bGVzLgogIyAgIC0gSWYgdGhlIF9fZmlsZV9fIGF0dHJpYnV0ZSBvbiBhIG1vZHVsZSBpcyBhIHJlbGF0aXZlIHBhdGggYW5kCiAjICAgICB0aGUgY3VycmVudCBkaXJlY3RvcnkgaXMgY2hhbmdlZCB3aXRoIG9zLmNoZGlyKCksIGFuIGluY29ycmVjdAogIyAgICAgcGF0aCB3aWxsIGJlIGRpc3BsYXllZC4KIAogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtMTY3LDggKzE2Nyw5IEBACiBkZWYgdmlzaWJsZW5hbWUobmFtZSwgYWxsPU5vbmUsIG9iaj1Ob25lKToKICAgICAiIiJEZWNpZGUgd2hldGhlciB0byBzaG93IGRvY3VtZW50YXRpb24gb24gYSB2YXJpYWJsZS4iIiIKICAgICAjIENlcnRhaW4gc3BlY2lhbCBuYW1lcyBhcmUgcmVkdW5kYW50IG9yIGludGVybmFsLgorICAgICMgWFhYIFJlbW92ZSBfX2luaXRpYWxpemluZ19fPwogICAgIGlmIG5hbWUgaW4geydfX2F1dGhvcl9fJywgJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fY3JlZGl0c19fJywKLSAgICAgICAgICAgICAgICAnX19kYXRlX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2luaXRpYWxpemluZ19fJywKKyAgICAgICAgICAgICAgICAnX19kYXRlX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX3NwZWNfXycsCiAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsCiAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJywgJ19fcXVhbG5hbWVfXycsICdfX3Nsb3RzX18nLCAnX192ZXJzaW9uX18nfToKICAgICAgICAgcmV0dXJuIDAKQEAgLTIyNiw3ICsyMjcsNyBAQAogICAgIGlmIGxhc3R1cGRhdGUgaXMgTm9uZSBvciBsYXN0dXBkYXRlIDwgbXRpbWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbGUgPSB0b2tlbml6ZS5vcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIG1vZHVsZSBjYW4ndCBiZSBvcGVuZWQsIHNvIHNraXAgaXQKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGJpbmFyeV9zdWZmaXhlcyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0KQEAgLTI2NywyMCArMjY4LDE5IEBACiAKIGRlZiBpbXBvcnRmaWxlKHBhdGgpOgogICAgICIiIkltcG9ydCBhIFB5dGhvbiBzb3VyY2UgZmlsZSBvciBjb21waWxlZCBmaWxlIGdpdmVuIGl0cyBwYXRoLiIiIgotICAgIG1hZ2ljID0gaW1wLmdldF9tYWdpYygpCisgICAgbWFnaWMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZmlsZToKLSAgICAgICAgaWYgZmlsZS5yZWFkKGxlbihtYWdpYykpID09IG1hZ2ljOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9DT01QSUxFRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAga2luZCA9IGltcC5QWV9TT1VSQ0UKLSAgICAgICAgZmlsZS5zZWVrKDApCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQotICAgICAgICBuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubG9hZF9tb2R1bGUobmFtZSwgZmlsZSwgcGF0aCwgKGV4dCwgJ3InLCBraW5kKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCi0gICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBpc19ieXRlY29kZSA9IG1hZ2ljID09IGZpbGUucmVhZChsZW4obWFnaWMpKQorICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCisgICAgaWYgaXNfYnl0ZWNvZGU6CisgICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLlNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRoKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAKIGRlZiBzYWZlaW1wb3J0KHBhdGgsIGZvcmNlbG9hZD0wLCBjYWNoZT17fSk6CiAgICAgIiIiSW1wb3J0IGEgbW9kdWxlOyBoYW5kbGUgZXJyb3JzOyByZXR1cm4gTm9uZSBpZiB0aGUgbW9kdWxlIGlzbid0IGZvdW5kLgpAQCAtOTE2LDIwICs5MTYsMTggQEAKICAgICAgICAgICAgICAgICByZWFsbGluayA9IHJlYWxuYW1lCiAgICAgICAgICAgICB0aXRsZSA9ICc8YSBuYW1lPSIlcyI+PHN0cm9uZz4lczwvc3Ryb25nPjwvYT4gPSAlcycgJSAoCiAgICAgICAgICAgICAgICAgYW5jaG9yLCBuYW1lLCByZWFsbGluaykKLSAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCk6Ci0gICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCB2YXJrdywgZGVmYXVsdHMsIGFubiA9IFwKLSAgICAgICAgICAgICAgICBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG9iamVjdCkKLSAgICAgICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgICAgICAgICAgYXJncywgdmFyYXJncywga3dvbmx5YXJncywga3dkZWZhdWx0cywgdmFya3csIGRlZmF1bHRzLCBhbm4sCi0gICAgICAgICAgICAgICAgZm9ybWF0dmFsdWU9c2VsZi5mb3JtYXR2YWx1ZSwKLSAgICAgICAgICAgICAgICBmb3JtYXRhbm5vdGF0aW9uPWluc3BlY3QuZm9ybWF0YW5ub3RhdGlvbnJlbGF0aXZldG8ob2JqZWN0KSkKLSAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6Ci0gICAgICAgICAgICAgICAgdGl0bGUgPSAnPHN0cm9uZz4lczwvc3Ryb25nPiA8ZW0+bGFtYmRhPC9lbT4gJyAlIG5hbWUKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKyAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCkgb3IgaW5zcGVjdC5pc2J1aWx0aW4ob2JqZWN0KToKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nPiVzPC9zdHJvbmc+IDxlbT5sYW1iZGE8L2VtPiAnICUgbmFtZQorICAgICAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KKyAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKKyAgICAgICAgaWYgbm90IGFyZ3NwZWM6CiAgICAgICAgICAgICBhcmdzcGVjID0gJyguLi4pJwogCiAgICAgICAgIGRlY2wgPSB0aXRsZSArIGFyZ3NwZWMgKyAobm90ZSBhbmQgc2VsZi5ncmV5KApAQCAtMTIzNiw4ICsxMjM0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IGdldGRvYyh2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGRvYyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcHVzaChzZWxmLmRvY290aGVyKGdldGF0dHIob2JqZWN0LCBuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIG1vZCwgbWF4bGVuPTcwLCBkb2M9ZG9jKSArICdcbicpCisgICAgICAgICAgICAgICAgICAgIHB1c2goc2VsZi5kb2NvdGhlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqZWN0LCBuYW1lLCBOb25lKSBvciBob21lY2xzLl9fZGljdF9fW25hbWVdLAorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbW9kLCBtYXhsZW49NzAsIGRvYz1kb2MpICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybiBhdHRycwogCiAgICAgICAgIGF0dHJzID0gWyhuYW1lLCBraW5kLCBjbHMsIHZhbHVlKQpAQCAtMTI1OSw3ICsxMjU4LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGFnID0gImluaGVyaXRlZCBmcm9tICVzIiAlIGNsYXNzbmFtZSh0aGlzY2xhc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19tb2R1bGVfXykKLQogICAgICAgICAgICAgIyBTb3J0IGF0dHJzIGJ5IG5hbWUuCiAgICAgICAgICAgICBhdHRycy5zb3J0KCkKIApAQCAtMTI3NCw2ICsxMjcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YSBkZXNjcmlwdG9yJykKICAgICAgICAgICAgIGF0dHJzID0gc3BpbGxkYXRhKCJEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzICVzOlxuIiAlIHRhZywgYXR0cnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgdDogdFsxXSA9PSAnZGF0YScpCisKICAgICAgICAgICAgIGFzc2VydCBhdHRycyA9PSBbXQogICAgICAgICAgICAgYXR0cnMgPSBpbmhlcml0ZWQKIApAQCAtMTMxMiwyMCArMTMxMSwxOCBAQAogICAgICAgICAgICAgICAgIGNsLl9fZGljdF9fW3JlYWxuYW1lXSBpcyBvYmplY3QpOgogICAgICAgICAgICAgICAgIHNraXBkb2NzID0gMQogICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnID0gJyArIHJlYWxuYW1lCi0gICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgotICAgICAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBhbm4gPSBcCi0gICAgICAgICAgICAgIGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWMob2JqZWN0KQotICAgICAgICAgICAgYXJnc3BlYyA9IGluc3BlY3QuZm9ybWF0YXJnc3BlYygKLSAgICAgICAgICAgICAgICBhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubiwKLSAgICAgICAgICAgICAgICBmb3JtYXR2YWx1ZT1zZWxmLmZvcm1hdHZhbHVlLAotICAgICAgICAgICAgICAgIGZvcm1hdGFubm90YXRpb249aW5zcGVjdC5mb3JtYXRhbm5vdGF0aW9ucmVsYXRpdmV0byhvYmplY3QpKQotICAgICAgICAgICAgaWYgcmVhbG5hbWUgPT0gJzxsYW1iZGE+JzoKLSAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKLSAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KLSAgICAgICAgICAgICAgICAjIHNpbmNlIHRoZSBzeW50YXggZG9lc24ndCBzdXBwb3J0IGJ1dCBpdCBpcyBwb3NzaWJsZS4KLSAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCi0gICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKLSAgICAgICAgZWxzZToKKyAgICAgICAgYXJnc3BlYyA9IE5vbmUKKyAgICAgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKG9iamVjdCkgb3IgaW5zcGVjdC5pc2J1aWx0aW4ob2JqZWN0KToKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG9iamVjdCkKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChuYW1lKSArICcgbGFtYmRhICcKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCisgICAgICAgICAgICAgICAgICAgICMgc2luY2UgdGhlIHN5bnRheCBkb2Vzbid0IHN1cHBvcnQgYnV0IGl0IGlzIHBvc3NpYmxlLgorICAgICAgICAgICAgICAgICAgICAjIFNvIHJlbW92aW5nIHBhcmVudGhlc2VzIGlzbid0IHRydWx5IHNhZmUuCisgICAgICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCisgICAgICAgIGlmIG5vdCBhcmdzcGVjOgogICAgICAgICAgICAgYXJnc3BlYyA9ICcoLi4uKScKICAgICAgICAgZGVjbCA9IHRpdGxlICsgYXJnc3BlYyArIG5vdGUKIApAQCAtMTM5Niw3ICsxMzkzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsIG9zLmVudmlyb25bJ1BBR0VSJ10pCiAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1RFUk0nKSBpbiAoJ2R1bWInLCAnZW1hY3MnKToKICAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogdGVtcGZpbGVwYWdlcihwbGFpbih0ZXh0KSwgJ21vcmUgPCcpCiAgICAgaWYgaGFzYXR0cihvcywgJ3N5c3RlbScpIGFuZCBvcy5zeXN0ZW0oJyhsZXNzKSAyPi9kZXYvbnVsbCcpID09IDA6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsICdsZXNzJykKQEAgLTE0MjIsMTYgKzE0MTksMTUgQEAKICAgICB0cnk6CiAgICAgICAgIHBpcGUud3JpdGUodGV4dCkKICAgICAgICAgcGlwZS5jbG9zZSgpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MgIyBJZ25vcmUgYnJva2VuIHBpcGVzIGNhdXNlZCBieSBxdWl0dGluZyB0aGUgcGFnZXIgcHJvZ3JhbS4KIAogZGVmIHRlbXBmaWxlcGFnZXIodGV4dCwgY21kKToKICAgICAiIiJQYWdlIHRocm91Z2ggdGV4dCBieSBpbnZva2luZyBhIHByb2dyYW0gb24gYSB0ZW1wb3JhcnkgZmlsZS4iIiIKICAgICBpbXBvcnQgdGVtcGZpbGUKICAgICBmaWxlbmFtZSA9IHRlbXBmaWxlLm1rdGVtcCgpCi0gICAgZmlsZSA9IG9wZW4oZmlsZW5hbWUsICd3JykKLSAgICBmaWxlLndyaXRlKHRleHQpCi0gICAgZmlsZS5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGZpbGU6CisgICAgICAgIGZpbGUud3JpdGUodGV4dCkKICAgICB0cnk6CiAgICAgICAgIG9zLnN5c3RlbShjbWQgKyAnICInICsgZmlsZW5hbWUgKyAnIicpCiAgICAgZmluYWxseToKQEAgLTE4NTAsMTAgKzE4NDYsMTAgQEAKIFB5dGhvbiBwcm9ncmFtcyBhbmQgdXNpbmcgUHl0aG9uIG1vZHVsZXMuICBUbyBxdWl0IHRoaXMgaGVscCB1dGlsaXR5IGFuZAogcmV0dXJuIHRvIHRoZSBpbnRlcnByZXRlciwganVzdCB0eXBlICJxdWl0Ii4KIAotVG8gZ2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgbW9kdWxlcywga2V5d29yZHMsIG9yIHRvcGljcywgdHlwZSAibW9kdWxlcyIsCi0ia2V5d29yZHMiLCBvciAidG9waWNzIi4gIEVhY2ggbW9kdWxlIGFsc28gY29tZXMgd2l0aCBhIG9uZS1saW5lIHN1bW1hcnkKLW9mIHdoYXQgaXQgZG9lczsgdG8gbGlzdCB0aGUgbW9kdWxlcyB3aG9zZSBzdW1tYXJpZXMgY29udGFpbiBhIGdpdmVuIHdvcmQKLXN1Y2ggYXMgInNwYW0iLCB0eXBlICJtb2R1bGVzIHNwYW0iLgorVG8gZ2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgbW9kdWxlcywga2V5d29yZHMsIHN5bWJvbHMsIG9yIHRvcGljcywgdHlwZQorIm1vZHVsZXMiLCAia2V5d29yZHMiLCAic3ltYm9scyIsIG9yICJ0b3BpY3MiLiAgRWFjaCBtb2R1bGUgYWxzbyBjb21lcword2l0aCBhIG9uZS1saW5lIHN1bW1hcnkgb2Ygd2hhdCBpdCBkb2VzOyB0byBsaXN0IHRoZSBtb2R1bGVzIHdob3NlIG5hbWUKK29yIHN1bW1hcnkgY29udGFpbiBhIGdpdmVuIHN0cmluZyBzdWNoIGFzICJzcGFtIiwgdHlwZSAibW9kdWxlcyBzcGFtIi4KICcnJyAlIHR1cGxlKFtzeXMudmVyc2lvbls6M11dKjIpKQogCiAgICAgZGVmIGxpc3Qoc2VsZiwgaXRlbXMsIGNvbHVtbnM9NCwgd2lkdGg9ODApOgpAQCAtMTkxNywxMSArMTkxMywxMCBAQAogICAgICAgICBpZiBtb3JlX3hyZWZzOgogICAgICAgICAgICAgeHJlZnMgPSAoeHJlZnMgb3IgJycpICsgJyAnICsgbW9yZV94cmVmcwogICAgICAgICBpZiB4cmVmczoKLSAgICAgICAgICAgIGltcG9ydCBmb3JtYXR0ZXIKLSAgICAgICAgICAgIGJ1ZmZlciA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgICAgIGZvcm1hdHRlci5EdW1iV3JpdGVyKGJ1ZmZlcikuc2VuZF9mbG93aW5nX2RhdGEoCi0gICAgICAgICAgICAgICAgJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcgKyAnLCAnLmpvaW4oeHJlZnMuc3BsaXQoKSkgKyAnXG4nKQotICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJ1xuJXNcbicgJSBidWZmZXIuZ2V0dmFsdWUoKSkKKyAgICAgICAgICAgIGltcG9ydCB0ZXh0d3JhcAorICAgICAgICAgICAgdGV4dCA9ICdSZWxhdGVkIGhlbHAgdG9waWNzOiAnICsgJywgJy5qb2luKHhyZWZzLnNwbGl0KCkpICsgJ1xuJworICAgICAgICAgICAgd3JhcHBlZF90ZXh0ID0gdGV4dHdyYXAud3JhcCh0ZXh0LCA3MikKKyAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbiVzXG4nICUgJycuam9pbih3cmFwcGVkX3RleHQpKQogCiAgICAgZGVmIF9nZXR0b3BpYyhzZWxmLCB0b3BpYywgbW9yZV94cmVmcz0nJyk6CiAgICAgICAgICIiIlJldHVybiB1bmJ1ZmZlcmVkIHR1cGxlIG9mICh0b3BpYywgeHJlZnMpLgpAQCAtMTk1OCw5ICsxOTUzLDEwIEBACiAgICAgZGVmIGxpc3Rtb2R1bGVzKHNlbGYsIGtleT0nJyk6CiAgICAgICAgIGlmIGtleToKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwotSGVyZSBpcyBhIGxpc3Qgb2YgbWF0Y2hpbmcgbW9kdWxlcy4gIEVudGVyIGFueSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLgorSGVyZSBpcyBhIGxpc3Qgb2YgbW9kdWxlcyB3aG9zZSBuYW1lIG9yIHN1bW1hcnkgY29udGFpbnMgJ3t9Jy4KK0lmIHRoZXJlIGFyZSBhbnksIGVudGVyIGEgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4KIAotJycnKQorJycnLmZvcm1hdChrZXkpKQogICAgICAgICAgICAgYXByb3BvcyhrZXkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKQEAgLTE5NzksMzUgKzE5NzUsMTEgQEAKICAgICAgICAgICAgIHNlbGYubGlzdChtb2R1bGVzLmtleXMoKSkKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCcnJwogRW50ZXIgYW55IG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuICBPciwgdHlwZSAibW9kdWxlcyBzcGFtIiB0byBzZWFyY2gKLWZvciBtb2R1bGVzIHdob3NlIGRlc2NyaXB0aW9ucyBjb250YWluIHRoZSB3b3JkICJzcGFtIi4KK2ZvciBtb2R1bGVzIHdob3NlIG5hbWUgb3Igc3VtbWFyeSBjb250YWluIHRoZSBzdHJpbmcgInNwYW0iLgogJycnKQogCiBoZWxwID0gSGVscGVyKCkKIAotY2xhc3MgU2Nhbm5lcjoKLSAgICAiIiJBIGdlbmVyaWMgdHJlZSBpdGVyYXRvci4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdHMsIGNoaWxkcmVuLCBkZXNjZW5kcCk6Ci0gICAgICAgIHNlbGYucm9vdHMgPSByb290c1s6XQotICAgICAgICBzZWxmLnN0YXRlID0gW10KLSAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGNoaWxkcmVuCi0gICAgICAgIHNlbGYuZGVzY2VuZHAgPSBkZXNjZW5kcAotCi0gICAgZGVmIG5leHQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnN0YXRlOgotICAgICAgICAgICAgaWYgbm90IHNlbGYucm9vdHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJvb3QgPSBzZWxmLnJvb3RzLnBvcCgwKQotICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IFsocm9vdCwgc2VsZi5jaGlsZHJlbihyb290KSldCi0gICAgICAgIG5vZGUsIGNoaWxkcmVuID0gc2VsZi5zdGF0ZVstMV0KLSAgICAgICAgaWYgbm90IGNoaWxkcmVuOgotICAgICAgICAgICAgc2VsZi5zdGF0ZS5wb3AoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dCgpCi0gICAgICAgIGNoaWxkID0gY2hpbGRyZW4ucG9wKDApCi0gICAgICAgIGlmIHNlbGYuZGVzY2VuZHAoY2hpbGQpOgotICAgICAgICAgICAgc2VsZi5zdGF0ZS5hcHBlbmQoKGNoaWxkLCBzZWxmLmNoaWxkcmVuKGNoaWxkKSkpCi0gICAgICAgIHJldHVybiBjaGlsZAotCi0KIGNsYXNzIE1vZHVsZVNjYW5uZXI6CiAgICAgIiIiQW4gaW50ZXJydXB0aWJsZSBzY2FubmVyIHRoYXQgc2VhcmNoZXMgbW9kdWxlIHN5bm9wc2VzLiIiIgogCmRpZmYgLS1naXQgYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKaW5kZXggY2NmYzRlYy4uNGRmYTMyMyAxMDA2NDQKLS0tIGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CisrKyBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQpAQCAtMSw1ICsxLDUgQEAKICMgLSotIGNvZGluZzogdXRmLTggLSotCi0jIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFN1biBPY3QgMjcgMDk6MDc6NTUgMjAxMworIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTdW4gTm92IDI0IDA2OjUwOjM0IDIwMTMKIHRvcGljcyA9IHsnYXNzZXJ0JzogJ1xuVGhlIGBgYXNzZXJ0YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuQXNzZXJ0IHN0YXRlbWVudHMgYXJlIGEgY29udmVuaWVudCB3YXkgdG8gaW5zZXJ0IGRlYnVnZ2luZyBhc3NlcnRpb25zXG5pbnRvIGEgcHJvZ3JhbTpcblxuICAgYXNzZXJ0X3N0bXQgOjo9ICJhc3NlcnQiIGV4cHJlc3Npb24gWyIsIiBleHByZXNzaW9uXVxuXG5UaGUgc2ltcGxlIGZvcm0sIGBgYXNzZXJ0IGV4cHJlc3Npb25gYCwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjogcmFpc2UgQXNzZXJ0aW9uRXJyb3JcblxuVGhlIGV4dGVuZGVkIGZvcm0sIGBgYXNzZXJ0IGV4cHJlc3Npb24xLCBleHByZXNzaW9uMmBgLCBpcyBlcXVpdmFsZW50XG50b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgYGBfX2RlYnVnX19gYCBhbmQgYGBBc3NlcnRpb25FcnJvcmBgXG5yZWZlciB0byB0aGUgYnVpbHQtaW4gdmFyaWFibGVzIHdpdGggdGhvc2UgbmFtZXMuICBJbiB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24sIHRoZSBidWlsdC1pbiB2YXJpYWJsZSBgYF9fZGVidWdfX2BgIGlzIGBgVHJ1ZWBgIHVuZGVyXG5ub3JtYWwgY2lyY3Vtc3RhbmNlcywgYGBGYWxzZWBgIHdoZW4gb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZFxuKGNvbW1hbmQgbGluZSBvcHRpb24gLU8pLiAgVGhlIGN1cnJlbnQgY29kZSBnZW5lcmF0b3IgZW1pdHMgbm8gY29kZVxuZm9yIGFuIGFzc2VydCBzdGF0ZW1lbnQgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGF0IGNvbXBpbGVcbnRpbWUuICBOb3RlIHRoYXQgaXQgaXMgdW5uZWNlc3NhcnkgdG8gaW5jbHVkZSB0aGUgc291cmNlIGNvZGUgZm9yIHRoZVxuZXhwcmVzc2lvbiB0aGF0IGZhaWxlZCBpbiB0aGUgZXJyb3IgbWVzc2FnZTsgaXQgd2lsbCBiZSBkaXNwbGF5ZWQgYXNcbnBhcnQgb2YgdGhlIHN0YWNrIHRyYWNlLlxuXG5Bc3NpZ25tZW50cyB0byBgYF9fZGVidWdfX2BgIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKICAnYXNzaWdubWVudCc6ICdcbkFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqXG5cbkFzc2lnbm1lbnQgc3RhdGVtZW50cyBhcmUgdXNlZCB0byAocmUpYmluZCBuYW1lcyB0byB2YWx1ZXMgYW5kIHRvXG5tb2RpZnkgYXR0cmlidXRlcyBvciBpdGVtcyBvZiBtdXRhYmxlIG9iamVjdHM6XG5cbiAgIGFzc2lnbm1lbnRfc3RtdCA6Oj0gKHRhcmdldF9saXN0ICI9IikrIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgdGFyZ2V0X2xpc3QgICAgIDo6PSB0YXJnZXQgKCIsIiB0YXJnZXQpKiBbIiwiXVxuICAgdGFyZ2V0ICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICAgICAgICAgIHwgIigiIHRhcmdldF9saXN0ICIpIlxuICAgICAgICAgICAgICB8ICJbIiB0YXJnZXRfbGlzdCAiXSJcbiAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVyZWZcbiAgICAgICAgICAgICAgfCBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgfCBzbGljaW5nXG4gICAgICAgICAgICAgIHwgIioiIHRhcmdldFxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXRcbnRoaXMgY2FuIGJlIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlclxueWllbGRpbmcgYSB0dXBsZSkgYW5kIGFzc2lnbnMgdGhlIHNpbmdsZSByZXN1bHRpbmcgb2JqZWN0IHRvIGVhY2ggb2ZcbnRoZSB0YXJnZXQgbGlzdHMsIGZyb20gbGVmdCB0byByaWdodC5cblxuQXNzaWdubWVudCBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGRlcGVuZGluZyBvbiB0aGUgZm9ybSBvZiB0aGUgdGFyZ2V0XG4obGlzdCkuIFdoZW4gYSB0YXJnZXQgaXMgcGFydCBvZiBhIG11dGFibGUgb2JqZWN0IChhbiBhdHRyaWJ1dGVcbnJlZmVyZW5jZSwgc3Vic2NyaXB0aW9uIG9yIHNsaWNpbmcpLCB0aGUgbXV0YWJsZSBvYmplY3QgbXVzdFxudWx0aW1hdGVseSBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGFuZCBkZWNpZGUgYWJvdXQgaXRzIHZhbGlkaXR5LCBhbmRcbm1heSByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGFzc2lnbm1lbnQgaXMgdW5hY2NlcHRhYmxlLiAgVGhlIHJ1bGVzXG5vYnNlcnZlZCBieSB2YXJpb3VzIHR5cGVzIGFuZCB0aGUgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGdpdmVuIHdpdGggdGhlXG5kZWZpbml0aW9uIG9mIHRoZSBvYmplY3QgdHlwZXMgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZVxuaGllcmFyY2h5KikuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgdGFyZ2V0IGxpc3QsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW5cbnBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cywgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhcyBmb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlIG9iamVjdFxuICBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlIGFyZVxuICB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0b1xuICByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuICAqIElmIHRoZSB0YXJnZXQgbGlzdCBjb250YWlucyBvbmUgdGFyZ2V0IHByZWZpeGVkIHdpdGggYW4gYXN0ZXJpc2ssXG4gICAgY2FsbGVkIGEgInN0YXJyZWQiIHRhcmdldDogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2Ugd2l0aCBhdFxuICAgIGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBtaW51c1xuICAgIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG9cbiAgICByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkIHRhcmdldC4gIFRoZSBmaW5hbCBpdGVtc1xuICAgIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIgdGhlIHN0YXJyZWRcbiAgICB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXMgdGhlblxuICAgIGFzc2lnbmVkIHRvIHRoZSBzdGFycmVkIHRhcmdldCAodGhlIGxpc3QgY2FuIGJlIGVtcHR5KS5cblxuICAqIEVsc2U6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZVxuICAgIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgc2luZ2xlIHRhcmdldCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gaWRlbnRpZmllciAobmFtZSk6XG5cbiAgKiBJZiB0aGUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBhIGBgZ2xvYmFsYGAgb3IgYGBub25sb2NhbGBgXG4gICAgc3RhdGVtZW50IGluIHRoZSBjdXJyZW50IGNvZGUgYmxvY2s6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZVxuICAgIG9iamVjdCBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UuXG5cbiAgKiBPdGhlcndpc2U6IHRoZSBuYW1lIGlzIGJvdW5kIHRvIHRoZSBvYmplY3QgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2VcbiAgICBvciB0aGUgb3V0ZXIgbmFtZXNwYWNlIGRldGVybWluZWQgYnkgYGBub25sb2NhbGBgLCByZXNwZWN0aXZlbHkuXG5cbiAgVGhlIG5hbWUgaXMgcmVib3VuZCBpZiBpdCB3YXMgYWxyZWFkeSBib3VuZC4gIFRoaXMgbWF5IGNhdXNlIHRoZVxuICByZWZlcmVuY2UgY291bnQgZm9yIHRoZSBvYmplY3QgcHJldmlvdXNseSBib3VuZCB0byB0aGUgbmFtZSB0byByZWFjaFxuICB6ZXJvLCBjYXVzaW5nIHRoZSBvYmplY3QgdG8gYmUgZGVhbGxvY2F0ZWQgYW5kIGl0cyBkZXN0cnVjdG9yIChpZiBpdFxuICBoYXMgb25lKSB0byBiZSBjYWxsZWQuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHRhcmdldCBsaXN0IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIG9yIGluIHNxdWFyZVxuICBicmFja2V0czogVGhlIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mXG4gIGl0ZW1zIGFzIHRoZXJlIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIGl0cyBpdGVtcyBhcmVcbiAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGFuIGF0dHJpYnV0ZSByZWZlcmVuY2U6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW5cbiAgdGhlIHJlZmVyZW5jZSBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYW4gb2JqZWN0IHdpdGhcbiAgYXNzaWduYWJsZSBhdHRyaWJ1dGVzOyBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZSwgYGBUeXBlRXJyb3JgYCBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgYGBBdHRyaWJ1dGVFcnJvcmBgKS5cblxuICBOb3RlOiBJZiB0aGUgb2JqZWN0IGlzIGEgY2xhc3MgaW5zdGFuY2UgYW5kIHRoZSBhdHRyaWJ1dGUgcmVmZXJlbmNlXG4gIG9jY3VycyBvbiBib3RoIHNpZGVzIG9mIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yLCB0aGUgUkhTIGV4cHJlc3Npb24sXG4gIGBgYS54YGAgY2FuIGFjY2VzcyBlaXRoZXIgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG9yIChpZiBubyBpbnN0YW5jZVxuICBhdHRyaWJ1dGUgZXhpc3RzKSBhIGNsYXNzIGF0dHJpYnV0ZS4gIFRoZSBMSFMgdGFyZ2V0IGBgYS54YGAgaXNcbiAgYWx3YXlzIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAgVGh1cywgdGhlIHR3byBvY2N1cnJlbmNlcyBvZiBgYGEueGBgIGRvIG5vdCBuZWNlc3NhcmlseSByZWZlciB0byB0aGVcbiAgc2FtZSBhdHRyaWJ1dGU6IGlmIHRoZSBSSFMgZXhwcmVzc2lvbiByZWZlcnMgdG8gYSBjbGFzcyBhdHRyaWJ1dGUsXG4gIHRoZSBMSFMgY3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBhdHRyaWJ1dGUgYXMgdGhlIHRhcmdldCBvZiB0aGVcbiAgYXNzaWdubWVudDpcblxuICAgICBjbGFzcyBDbHM6XG4gICAgICAgICB4ID0gMyAgICAgICAgICAgICAjIGNsYXNzIHZhcmlhYmxlXG4gICAgIGluc3QgPSBDbHMoKVxuICAgICBpbnN0LnggPSBpbnN0LnggKyAxICAgIyB3cml0ZXMgaW5zdC54IGFzIDQgbGVhdmluZyBDbHMueCBhcyAzXG5cbiAgVGhpcyBkZXNjcmlwdGlvbiBkb2VzIG5vdCBuZWNlc3NhcmlseSBhcHBseSB0byBkZXNjcmlwdG9yXG4gIGF0dHJpYnV0ZXMsIHN1Y2ggYXMgcHJvcGVydGllcyBjcmVhdGVkIHdpdGggYGBwcm9wZXJ0eSgpYGAuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsIGBgSW5kZXhFcnJvcmBgIGlzIHJhaXNlZCAoYXNzaWdubWVudCB0byBhXG4gIHN1YnNjcmlwdGVkIHNlcXVlbmNlIGNhbm5vdCBhZGQgbmV3IGl0ZW1zIHRvIGEgbGlzdCkuXG5cbiAgSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLCB0aGVcbiAgc3Vic2NyaXB0IG11c3QgaGF2ZSBhIHR5cGUgY29tcGF0aWJsZSB3aXRoIHRoZSBtYXBwaW5nXCdzIGtleSB0eXBlLFxuICBhbmQgdGhlIG1hcHBpbmcgaXMgdGhlbiBhc2tlZCB0byBjcmVhdGUgYSBrZXkvZGF0dW0gcGFpciB3aGljaCBtYXBzXG4gIHRoZSBzdWJzY3JpcHQgdG8gdGhlIGFzc2lnbmVkIG9iamVjdC4gIFRoaXMgY2FuIGVpdGhlciByZXBsYWNlIGFuXG4gIGV4aXN0aW5nIGtleS92YWx1ZSBwYWlyIHdpdGggdGhlIHNhbWUga2V5IHZhbHVlLCBvciBpbnNlcnQgYSBuZXdcbiAga2V5L3ZhbHVlIHBhaXIgKGlmIG5vIGtleSB3aXRoIHRoZSBzYW1lIHZhbHVlIGV4aXN0ZWQpLlxuXG4gIEZvciB1c2VyLWRlZmluZWQgb2JqZWN0cywgdGhlIGBgX19zZXRpdGVtX18oKWBgIG1ldGhvZCBpcyBjYWxsZWRcbiAgd2l0aCBhcHByb3ByaWF0ZSBhcmd1bWVudHMuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHNsaWNpbmc6IFRoZSBwcmltYXJ5IGV4cHJlc3Npb24gaW4gdGhlIHJlZmVyZW5jZVxuICBpcyBldmFsdWF0ZWQuICBJdCBzaG91bGQgeWllbGQgYSBtdXRhYmxlIHNlcXVlbmNlIG9iamVjdCAoc3VjaCBhcyBhXG4gIGxpc3QpLiAgVGhlIGFzc2lnbmVkIG9iamVjdCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvYmplY3Qgb2YgdGhlIHNhbWVcbiAgdHlwZS4gIE5leHQsIHRoZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCxcbiAgaW5zb2ZhciB0aGV5IGFyZSBwcmVzZW50OyBkZWZhdWx0cyBhcmUgemVybyBhbmQgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aC4gIFRoZSBib3VuZHMgc2hvdWxkIGV2YWx1YXRlIHRvIGludGVnZXJzLiBJZiBlaXRoZXIgYm91bmQgaXNcbiAgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nXG4gIGJvdW5kcyBhcmUgY2xpcHBlZCB0byBsaWUgYmV0d2VlbiB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLFxuICBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2UgdGhlXG4gIHNsaWNlIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2YgdGhlXG4gIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSxcbiAgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZSB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3RcbiAgYWxsb3dzIGl0LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGVcbnN5bnRheCBmb3IgdGFyZ2V0cyBpcyB0YWtlbiB0byBiZSB0aGUgc2FtZSBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZFxuaW52YWxpZCBzeW50YXggaXMgcmVqZWN0ZWQgZHVyaW5nIHRoZSBjb2RlIGdlbmVyYXRpb24gcGhhc2UsIGNhdXNpbmdcbmxlc3MgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZXMuXG5cbldBUk5JTkc6IEFsdGhvdWdoIHRoZSBkZWZpbml0aW9uIG9mIGFzc2lnbm1lbnQgaW1wbGllcyB0aGF0IG92ZXJsYXBzXG5iZXR3ZWVuIHRoZSBsZWZ0LWhhbmQgc2lkZSBhbmQgdGhlIHJpZ2h0LWhhbmQgc2lkZSBhcmUgXCdzYWZlXCcgKGZvclxuZXhhbXBsZSBgYGEsIGIgPSBiLCBhYGAgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGVcbmZvbGxvd2luZyBwcm9ncmFtIHByaW50cyBgYFswLCAyXWBgOlxuXG4gICB4ID0gWzAsIDFdXG4gICBpID0gMFxuICAgaSwgeFtpXSA9IDEsIDJcbiAgIHByaW50KHgpXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTMyKiogLSBFeHRlbmRlZCBJdGVyYWJsZSBVbnBhY2tpbmdcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgYGAqdGFyZ2V0YGAgZmVhdHVyZS5cblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgYGB4ICs9IDFgYCBjYW4gYmUgcmV3cml0dGVuIGFzXG5gYHggPSB4ICsgMWBgIHRvIGFjaGlldmUgYSBzaW1pbGFyLCBidXQgbm90IGV4YWN0bHkgZXF1YWwgZWZmZWN0LiBJblxudGhlIGF1Z21lbnRlZCB2ZXJzaW9uLCBgYHhgYCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuXG5wb3NzaWJsZSwgdGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdFxucmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LFxudGhlIG9sZCBvYmplY3QgaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCiAgJ2F0b20taWRlbnRpZmllcnMnOiAnXG5JZGVudGlmaWVycyAoTmFtZXMpXG4qKioqKioqKioqKioqKioqKioqXG5cbkFuIGlkZW50aWZpZXIgb2NjdXJyaW5nIGFzIGFuIGF0b20gaXMgYSBuYW1lLiAgU2VlIHNlY3Rpb25cbipJZGVudGlmaWVycyBhbmQga2V5d29yZHMqIGZvciBsZXhpY2FsIGRlZmluaXRpb24gYW5kIHNlY3Rpb24gKk5hbWluZ1xuYW5kIGJpbmRpbmcqIGZvciBkb2N1bWVudGF0aW9uIG9mIG5hbWluZyBhbmQgYmluZGluZy5cblxuV2hlbiB0aGUgbmFtZSBpcyBib3VuZCB0byBhbiBvYmplY3QsIGV2YWx1YXRpb24gb2YgdGhlIGF0b20geWllbGRzXG50aGF0IG9iamVjdC4gV2hlbiBhIG5hbWUgaXMgbm90IGJvdW5kLCBhbiBhdHRlbXB0IHRvIGV2YWx1YXRlIGl0XG5yYWlzZXMgYSBgYE5hbWVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuKipQcml2YXRlIG5hbWUgbWFuZ2xpbmc6KiogV2hlbiBhbiBpZGVudGlmaWVyIHRoYXQgdGV4dHVhbGx5IG9jY3VycyBpblxuYSBjbGFzcyBkZWZpbml0aW9uIGJlZ2lucyB3aXRoIHR3byBvciBtb3JlIHVuZGVyc2NvcmUgY2hhcmFjdGVycyBhbmRcbmRvZXMgbm90IGVuZCBpbiB0d28gb3IgbW9yZSB1bmRlcnNjb3JlcywgaXQgaXMgY29uc2lkZXJlZCBhICpwcml2YXRlXG5uYW1lKiBvZiB0aGF0IGNsYXNzLiBQcml2YXRlIG5hbWVzIGFyZSB0cmFuc2Zvcm1lZCB0byBhIGxvbmdlciBmb3JtXG5iZWZvcmUgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIHRoZW0uICBUaGUgdHJhbnNmb3JtYXRpb24gaW5zZXJ0cyB0aGVcbmNsYXNzIG5hbWUsIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyByZW1vdmVkIGFuZCBhIHNpbmdsZSB1bmRlcnNjb3JlXG5pbnNlcnRlZCwgaW4gZnJvbnQgb2YgdGhlIG5hbWUuICBGb3IgZXhhbXBsZSwgdGhlIGlkZW50aWZpZXJcbmBgX19zcGFtYGAgb2NjdXJyaW5nIGluIGEgY2xhc3MgbmFtZWQgYGBIYW1gYCB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvXG5gYF9IYW1fX3NwYW1gYC4gIFRoaXMgdHJhbnNmb3JtYXRpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5bnRhY3RpY2FsXG5jb250ZXh0IGluIHdoaWNoIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQuICBJZiB0aGUgdHJhbnNmb3JtZWQgbmFtZSBpc1xuZXh0cmVtZWx5IGxvbmcgKGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzKSwgaW1wbGVtZW50YXRpb24gZGVmaW5lZFxudHJ1bmNhdGlvbiBtYXkgaGFwcGVuLiBJZiB0aGUgY2xhc3MgbmFtZSBjb25zaXN0cyBvbmx5IG9mIHVuZGVyc2NvcmVzLFxubm8gdHJhbnNmb3JtYXRpb24gaXMgZG9uZS5cbicsCkBAIC0xOSwxMiArMTksMTIgQEAKICAnY2FsbHMnOiAnXG5DYWxsc1xuKioqKipcblxuQSBjYWxsIGNhbGxzIGEgY2FsbGFibGUgb2JqZWN0IChlLmcuLCBhICpmdW5jdGlvbiopIHdpdGggYSBwb3NzaWJseVxuZW1wdHkgc2VyaWVzIG9mICphcmd1bWVudHMqOlxuXG4gICBjYWxsICAgICAgICAgICAgICAgICA6Oj0gcHJpbWFyeSAiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl0gfCBjb21wcmVoZW5zaW9uXSAiKSJcbiAgIGFyZ3VtZW50X2xpc3QgICAgICAgIDo6PSBwb3NpdGlvbmFsX2FyZ3VtZW50cyBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqIiBleHByZXNzaW9uXSBbIiwiIGtleXdvcmRfYXJndW1lbnRzXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZF9hcmd1bWVudHMgWyIsIiAiKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqIiBleHByZXNzaW9uIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKioiIGV4cHJlc3Npb25cbiAgIHBvc2l0aW9uYWxfYXJndW1lbnRzIDo6PSBleHByZXNzaW9uICgiLCIgZXhwcmVzc2lvbikqXG4gICBrZXl3b3JkX2FyZ3VtZW50cyAgICA6Oj0ga2V5d29yZF9pdGVtICgiLCIga2V5d29yZF9pdGVtKSpcbiAgIGtleXdvcmRfaXRlbSAgICAgICAgIDo6PSBpZGVudGlmaWVyICI9IiBleHByZXNzaW9uXG5cbkEgdHJhaWxpbmcgY29tbWEgbWF5IGJlIHByZXNlbnQgYWZ0ZXIgdGhlIHBvc2l0aW9uYWwgYW5kIGtleXdvcmRcbmFyZ3VtZW50cyBidXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzZW1hbnRpY3MuXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYSBjYWxsYWJsZSBvYmplY3QgKHVzZXItZGVmaW5lZFxuZnVuY3Rpb25zLCBidWlsdC1pbiBmdW5jdGlvbnMsIG1ldGhvZHMgb2YgYnVpbHQtaW4gb2JqZWN0cywgY2xhc3Ncbm9iamVjdHMsIG1ldGhvZHMgb2YgY2xhc3MgaW5zdGFuY2VzLCBhbmQgYWxsIG9iamVjdHMgaGF2aW5nIGFcbmBgX19jYWxsX18oKWBgIG1ldGhvZCBhcmUgY2FsbGFibGUpLiAgQWxsIGFyZ3VtZW50IGV4cHJlc3Npb25zIGFyZVxuZXZhbHVhdGVkIGJlZm9yZSB0aGUgY2FsbCBpcyBhdHRlbXB0ZWQuICBQbGVhc2UgcmVmZXIgdG8gc2VjdGlvblxuKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgdGhlIHN5bnRheCBvZiBmb3JtYWwgKnBhcmFtZXRlciogbGlzdHMuXG5cbklmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG9cbnBvc2l0aW9uYWwgYXJndW1lbnRzLCBhcyBmb2xsb3dzLiAgRmlyc3QsIGEgbGlzdCBvZiB1bmZpbGxlZCBzbG90cyBpc1xuY3JlYXRlZCBmb3IgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzLiAgSWYgdGhlcmUgYXJlIE4gcG9zaXRpb25hbFxuYXJndW1lbnRzLCB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIGZpcnN0IE4gc2xvdHMuICBOZXh0LCBmb3IgZWFjaFxua2V5d29yZCBhcmd1bWVudCwgdGhlIGlkZW50aWZpZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3QgKGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBmb3JtYWxcbnBhcmFtZXRlciBuYW1lLCB0aGUgZmlyc3Qgc2xvdCBpcyB1c2VkLCBhbmQgc28gb24pLiAgSWYgdGhlIHNsb3QgaXNcbmFscmVhZHkgZmlsbGVkLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzIGBgTm9uZWBgLCBpdCBmaWxscyB0aGUgc2xvdCkuICBXaGVuIGFsbCBhcmd1bWVudHMgaGF2ZVxuYmVlbiBwcm9jZXNzZWQsIHRoZSBzbG90cyB0aGF0IGFyZSBzdGlsbCB1bmZpbGxlZCBhcmUgZmlsbGVkIHdpdGggdGhlXG5jb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIChEZWZhdWx0XG52YWx1ZXMgYXJlIGNhbGN1bGF0ZWQsIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQ7IHRodXMsIGFcbm11dGFibGUgb2JqZWN0IHN1Y2ggYXMgYSBsaXN0IG9yIGRpY3Rpb25hcnkgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIHdpbGxcbmJlIHNoYXJlZCBieSBhbGwgY2FsbHMgdGhhdCBkb25cJ3Qgc3BlY2lmeSBhbiBhcmd1bWVudCB2YWx1ZSBmb3IgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3Q7IHRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYXZvaWRlZC4pICBJZiB0aGVyZSBhcmUgYW55XG51bmZpbGxlZCBzbG90cyBmb3Igd2hpY2ggbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpZWQsIGFcbmBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIGxpc3Qgb2YgZmlsbGVkXG5zbG90cyBpcyB1c2VkIGFzIHRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgY2FsbC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJvdmlkZVxuYnVpbHQtaW4gZnVuY3Rpb25zIHdob3NlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBkbyBub3QgaGF2ZSBuYW1lcywgZXZlblxuaWYgdGhleSBhcmUgXCduYW1lZFwnIGZvciB0aGUgcHVycG9zZSBvZiBkb2N1bWVudGF0aW9uLCBhbmQgd2hpY2hcbnRoZXJlZm9yZSBjYW5ub3QgYmUgc3VwcGxpZWQgYnkga2V5d29yZC4gIEluIENQeXRob24sIHRoaXMgaXMgdGhlIGNhc2VcbmZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSBgYFB5QXJnX1BhcnNlVHVwbGUoKWBgIHRvXG5wYXJzZSB0aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4ob3IgYW4gZW1wdHkgdHVwbGUgaWYgdGhlcmUgd2VyZSBubyBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHMpLlxuXG5JZiBhbnkga2V5d29yZCBhcmd1bWVudCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZm9ybWFsIHBhcmFtZXRlclxubmFtZSwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggYGAqKmlkZW50aWZpZXJgYCBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXRcbmZvcm1hbCBwYXJhbWV0ZXIgcmVjZWl2ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBrZXl3b3JkXG5hcmd1bWVudHMgKHVzaW5nIHRoZSBrZXl3b3JkcyBhcyBrZXlzIGFuZCB0aGUgYXJndW1lbnQgdmFsdWVzIGFzXG5jb3JyZXNwb25kaW5nIHZhbHVlcyksIG9yIGEgKG5ldykgZW1wdHkgZGljdGlvbmFyeSBpZiB0aGVyZSB3ZXJlIG5vXG5leGNlc3Mga2V5d29yZCBhcmd1bWVudHMuXG5cbklmIHRoZSBzeW50YXggYGAqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG5gYGV4cHJlc3Npb25gYCBtdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzXG5pdGVyYWJsZSBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50cztcbmlmIHRoZXJlIGFyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCBgYGV4cHJlc3Npb25gYFxuZXZhbHVhdGVzIHRvIGEgc2VxdWVuY2UgKnkxKiwgLi4uLCAqeU0qLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsXG53aXRoIE0rTiBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosICp5MSosIC4uLiwgKnlNKi5cblxuQSBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgYWx0aG91Z2ggdGhlIGBgKmV4cHJlc3Npb25gYCBzeW50YXggbWF5XG5hcHBlYXIgKmFmdGVyKiBzb21lIGtleXdvcmQgYXJndW1lbnRzLCBpdCBpcyBwcm9jZXNzZWQgKmJlZm9yZSogdGhlXG5rZXl3b3JkIGFyZ3VtZW50cyAoYW5kIHRoZSBgYCoqZXhwcmVzc2lvbmBgIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgYGAqZXhwcmVzc2lvbmBgXG5zeW50YXggdG8gYmUgdXNlZCBpbiB0aGUgc2FtZSBjYWxsLCBzbyBpbiBwcmFjdGljZSB0aGlzIGNvbmZ1c2lvbiBkb2VzXG5ub3QgYXJpc2UuXG5cbklmIHRoZSBzeW50YXggYGAqKmV4cHJlc3Npb25gYCBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLFxuYGBleHByZXNzaW9uYGAgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggYGBleHByZXNzaW9uYGAgYW5kIGFzIGFuIGV4cGxpY2l0IGtleXdvcmQgYXJndW1lbnQsXG5hIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cblxuRm9ybWFsIHBhcmFtZXRlcnMgdXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYFxuY2Fubm90IGJlIHVzZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzbG90cyBvciBhcyBrZXl3b3JkIGFyZ3VtZW50XG5uYW1lcy5cblxuQSBjYWxsIGFsd2F5cyByZXR1cm5zIHNvbWUgdmFsdWUsIHBvc3NpYmx5IGBgTm9uZWBgLCB1bmxlc3MgaXQgcmFpc2VzXG5hbiBleGNlcHRpb24uICBIb3cgdGhpcyB2YWx1ZSBpcyBjb21wdXRlZCBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIHRoZVxuY2FsbGFibGUgb2JqZWN0LlxuXG5JZiBpdCBpcy0tLVxuXG5hIHVzZXItZGVmaW5lZCBmdW5jdGlvbjpcbiAgIFRoZSBjb2RlIGJsb2NrIGZvciB0aGUgZnVuY3Rpb24gaXMgZXhlY3V0ZWQsIHBhc3NpbmcgaXQgdGhlXG4gICBhcmd1bWVudCBsaXN0LiAgVGhlIGZpcnN0IHRoaW5nIHRoZSBjb2RlIGJsb2NrIHdpbGwgZG8gaXMgYmluZCB0aGVcbiAgIGZvcm1hbCBwYXJhbWV0ZXJzIHRvIHRoZSBhcmd1bWVudHM7IHRoaXMgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb25cbiAgICpGdW5jdGlvbiBkZWZpbml0aW9ucyouICBXaGVuIHRoZSBjb2RlIGJsb2NrIGV4ZWN1dGVzIGEgYGByZXR1cm5gYFxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSBgYF9fY2FsbF9fKClgYCBtZXRob2Q7IHRoZSBlZmZlY3QgaXMgdGhlblxuICAgdGhlIHNhbWUgYXMgaWYgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZC5cbicsCiAgJ2NsYXNzJzogJ1xuQ2xhc3MgZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gW2RlY29yYXRvcnNdICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBUaGUgaW5oZXJpdGFuY2UgbGlzdFxudXN1YWxseSBnaXZlcyBhIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIChzZWUgKkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uKlxuZm9yIG1vcmUgYWR2YW5jZWQgdXNlcyksIHNvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgZXZhbHVhdGUgdG8gYVxuY2xhc3Mgb2JqZWN0IHdoaWNoIGFsbG93cyBzdWJjbGFzc2luZy4gIENsYXNzZXMgd2l0aG91dCBhbiBpbmhlcml0YW5jZVxubGlzdCBpbmhlcml0LCBieSBkZWZhdWx0LCBmcm9tIHRoZSBiYXNlIGNsYXNzIGBgb2JqZWN0YGA7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCBgYHNlbGYubmFtZSA9IHZhbHVlYGAuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvblxuImBgc2VsZi5uYW1lYGAiLCBhbmQgYW4gaW5zdGFuY2UgYXR0cmlidXRlIGhpZGVzIGEgY2xhc3MgYXR0cmlidXRlXG53aXRoIHRoZSBzYW1lIG5hbWUgd2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gIENsYXNzIGF0dHJpYnV0ZXMgY2FuIGJlXG51c2VkIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXNcbnRoZXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gICpEZXNjcmlwdG9ycyogY2FuIGJlIHVzZWQgdG9cbmNyZWF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzICoqUEVQIDMxMjkqKiAtIENsYXNzXG4gICBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzcyB0aGVyZVxuICAgIGlzIGEgYGBmaW5hbGx5YGAgY2xhdXNlIHdoaWNoIGhhcHBlbnMgdG8gcmFpc2UgYW5vdGhlciBleGNlcHRpb24uXG4gICAgVGhhdCBuZXcgZXhjZXB0aW9uIGNhdXNlcyB0aGUgb2xkIG9uZSB0byBiZSBsb3N0LlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgYGBhIDwgYiA8IGNgYCBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiBgYFRydWVgYCBvciBgYEZhbHNlYGAuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCBgYHggPCB5IDw9IHpgYCBpc1xuZXF1aXZhbGVudCB0byBgYHggPCB5IGFuZCB5IDw9IHpgYCwgZXhjZXB0IHRoYXQgYGB5YGAgaXMgZXZhbHVhdGVkXG5vbmx5IG9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzIGBgemBgIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gYGB4IDxcbnlgYCBpcyBmb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gYGBhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4gemBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4gemBgLFxuZXhjZXB0IHRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCBgYGEgb3AxIGIgb3AyIGNgYCBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uXG5iZXR3ZWVuICphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCBgYHggPCB5ID4gemBgIGlzIHBlcmZlY3RseSBsZWdhbFxuKHRob3VnaCBwZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzIGBgPGBgLCBgYD5gYCwgYGA9PWBgLCBgYD49YGAsIGBgPD1gYCwgYW5kIGBgIT1gYCBjb21wYXJlXG50aGUgdmFsdWVzIG9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLlxuSWYgYm90aCBhcmUgbnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsXG50aGUgYGA9PWBgIGFuZCBgYCE9YGAgb3BlcmF0b3JzICphbHdheXMqIGNvbnNpZGVyIG9iamVjdHMgb2YgZGlmZmVyZW50XG50eXBlcyB0byBiZSB1bmVxdWFsLCB3aGlsZSB0aGUgYGA8YGAsIGBgPmBgLCBgYD49YGAgYW5kIGBgPD1gYFxub3BlcmF0b3JzIHJhaXNlIGEgYGBUeXBlRXJyb3JgYCB3aGVuIGNvbXBhcmluZyBvYmplY3RzIG9mIGRpZmZlcmVudFxudHlwZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IHRoZXNlIG9wZXJhdG9ycyBmb3IgdGhlIGdpdmVuIHBhaXIgb2ZcbnR5cGVzLiAgWW91IGNhbiBjb250cm9sIGNvbXBhcmlzb24gYmVoYXZpb3Igb2Ygb2JqZWN0cyBvZiBub24tYnVpbHQtaW5cbnR5cGVzIGJ5IGRlZmluaW5nIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGxpa2UgYGBfX2d0X18oKWBgLCBkZXNjcmliZWRcbmluIHNlY3Rpb24gKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFRoZSB2YWx1ZXMgYGBmbG9hdChcJ05hTlwnKWBgIGFuZCBgYERlY2ltYWwoXCdOYU5cJylgYCBhcmUgc3BlY2lhbC4gVGhlXG4gIGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcywgYGB4IGlzIHhgYCBidXQgYXJlIG5vdCBlcXVhbCB0b1xuICB0aGVtc2VsdmVzLCBgYHggIT0geGBgLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuIGBgRmFsc2VgYC4gIEZvciBleGFtcGxlLCBib3RoIGBgMyA8XG4gIGZsb2F0KFwnTmFOXCcpYGAgYW5kIGBgZmxvYXQoXCdOYU5cJykgPCAzYGAgd2lsbCByZXR1cm4gYGBGYWxzZWBgLlxuXG4qIEJ5dGVzIG9iamVjdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljXG4gIHZhbHVlcyBvZiB0aGVpciBlbGVtZW50cy5cblxuKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpYyBlcXVpdmFsZW50c1xuICAodGhlIHJlc3VsdCBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBvcmQoKWBgKSBvZiB0aGVpciBjaGFyYWN0ZXJzLlxuICBbM10gU3RyaW5nIGFuZCBieXRlcyBvYmplY3QgY2FuXCd0IGJlIGNvbXBhcmVkIVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgYGBbMSwyLHhdIDw9IFsxLDIseV1gYCBoYXMgdGhlXG4gIHNhbWUgdmFsdWUgYXMgYGB4IDw9IHlgYC4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3RcbiAgZXhpc3QsIHRoZSBzaG9ydGVyIHNlcXVlbmNlIGlzIG9yZGVyZWQgZmlyc3QgKGZvciBleGFtcGxlLCBgYFsxLDJdIDxcbiAgWzEsMiwzXWBgKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGVcbiAgc2FtZSBgYChrZXksIHZhbHVlKWBgIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyBgYChcJzxcJywgXCc8PVwnLCBcJz49XCcsXG4gIFwnPlwnKWBgIHJhaXNlIGBgVHlwZUVycm9yYGAuXG5cbiogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kXG4gIHN1cGVyc2V0IHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGVcbiAgdHdvIHNldHMgYGB7MSwyfWBgIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsIGBgbWluKClgYCwgYGBtYXgoKWBgLCBhbmQgYGBzb3J0ZWQoKWBgIHByb2R1Y2VcbiAgdW5kZWZpbmVkIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXkgYXJlXG4gIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZCBzbWFsbGVyXG4gIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0IGNvbnNpc3RlbnRseVxuICB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuYGBOb3RJbXBsZW1lbnRlZGBgLlxuXG5UaGUgb3BlcmF0b3JzIGBgaW5gYCBhbmQgYGBub3QgaW5gYCB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgYGB4IGluIHNgYFxuZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mICpzKiwgYW5kIGZhbHNlIG90aGVyd2lzZS4gIGBgeFxubm90IGluIHNgYCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiBgYHggaW4gc2BgLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggYGBpbmBgXG50ZXN0cyB3aGV0aGVyIGEgdGhlIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzXG5zdWNoIGFzIGxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZVxuZXhwcmVzc2lvbiBgYHggaW4geWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpblxueSlgYC5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqXG5pcyBhIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgYGB5LmZpbmQoeCkgIT0gLTFgYC5cbkVtcHR5IHN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlclxuc3RyaW5nLCBzbyBgYCIiIGluICJhYmMiYGAgd2lsbCByZXR1cm4gYGBUcnVlYGAuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlIGBgX19jb250YWluc19fKClgYCBtZXRob2QsXG5gYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgYGB5Ll9fY29udGFpbnNfXyh4KWBgIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCBidXQgZG9cbmRlZmluZSBgYF9faXRlcl9fKClgYCwgYGB4IGluIHlgYCBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgYGB6YGAgd2l0aCBgYHhcbj09IHpgYCBpcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciBgYHlgYC4gIElmIGFuIGV4Y2VwdGlvbiBpc1xucmFpc2VkIGR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiBgYGluYGAgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbmBgX19nZXRpdGVtX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgYGB4ID09IHlbaV1gYCwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSBgYEluZGV4RXJyb3JgYCBleGNlcHRpb24uICAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiBgYGluYGAgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yIGBgbm90IGluYGAgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbmBgaW5gYC5cblxuVGhlIG9wZXJhdG9ycyBgYGlzYGAgYW5kIGBgaXMgbm90YGAgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiBgYHggaXNcbnlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBhbmQgKnkqIGFyZSB0aGUgc2FtZSBvYmplY3QuICBgYHggaXNcbm5vdCB5YGAgeWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbNF1cbicsCi0gJ2NvbXBvdW5kJzogJ1xuQ29tcG91bmQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnRhaW4gKGdyb3VwcyBvZikgb3RoZXIgc3RhdGVtZW50czsgdGhleSBhZmZlY3Rcbm9yIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aG9zZSBvdGhlciBzdGF0ZW1lbnRzIGluIHNvbWUgd2F5LiAgSW5cbmdlbmVyYWwsIGNvbXBvdW5kIHN0YXRlbWVudHMgc3BhbiBtdWx0aXBsZSBsaW5lcywgYWx0aG91Z2ggaW4gc2ltcGxlXG5pbmNhcm5hdGlvbnMgYSB3aG9sZSBjb21wb3VuZCBzdGF0ZW1lbnQgbWF5IGJlIGNvbnRhaW5lZCBpbiBvbmUgbGluZS5cblxuVGhlIGBgaWZgYCwgYGB3aGlsZWBgIGFuZCBgYGZvcmBgIHN0YXRlbWVudHMgaW1wbGVtZW50IHRyYWRpdGlvbmFsXG5jb250cm9sIGZsb3cgY29uc3RydWN0cy4gIGBgdHJ5YGAgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3JcbmNsZWFudXAgY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgYGB3aXRoYGAgc3RhdGVtZW50XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBpbml0aWFsaXphdGlvbiBhbmQgZmluYWxpemF0aW9uIGNvZGUgYXJvdW5kIGFcbmJsb2NrIG9mIGNvZGUuICBGdW5jdGlvbiBhbmQgY2xhc3MgZGVmaW5pdGlvbnMgYXJlIGFsc28gc3ludGFjdGljYWxseVxuY29tcG91bmQgc3RhdGVtZW50cy5cblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmRcbnN0YXRlbWVudHM7IHRoZSBmb2xsb3dpbmcgaXMgaWxsZWdhbCwgbW9zdGx5IGJlY2F1c2UgaXQgd291bGRuXCd0IGJlXG5jbGVhciB0byB3aGljaCBgYGlmYGAgY2xhdXNlIGEgZm9sbG93aW5nIGBgZWxzZWBgIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG5gYHByaW50KClgYCBjYWxscyBhcmUgZXhlY3V0ZWQ6XG5cbiAgIGlmIHggPCB5IDwgejogcHJpbnQoeCk7IHByaW50KHkpOyBwcmludCh6KVxuXG5TdW1tYXJpemluZzpcblxuICAgY29tcG91bmRfc3RtdCA6Oj0gaWZfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aGlsZV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZvcl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHRyeV9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdpdGhfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmdW5jZGVmXG4gICAgICAgICAgICAgICAgICAgICB8IGNsYXNzZGVmXG4gICBzdWl0ZSAgICAgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IE5FV0xJTkUgSU5ERU5UIHN0YXRlbWVudCsgREVERU5UXG4gICBzdGF0ZW1lbnQgICAgIDo6PSBzdG10X2xpc3QgTkVXTElORSB8IGNvbXBvdW5kX3N0bXRcbiAgIHN0bXRfbGlzdCAgICAgOjo9IHNpbXBsZV9zdG10ICgiOyIgc2ltcGxlX3N0bXQpKiBbIjsiXVxuXG5Ob3RlIHRoYXQgc3RhdGVtZW50cyBhbHdheXMgZW5kIGluIGEgYGBORVdMSU5FYGAgcG9zc2libHkgZm9sbG93ZWQgYnlcbmEgYGBERURFTlRgYC4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5c1xuYmVnaW4gd2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgYGBlbHNlYGBcJyBwcm9ibGVtIGlzIHNvbHZlZCBpbiBQeXRob24gYnlcbnJlcXVpcmluZyBuZXN0ZWQgYGBpZmBgIHN0YXRlbWVudHMgdG8gYmUgaW5kZW50ZWQpLlxuXG5UaGUgZm9ybWF0dGluZyBvZiB0aGUgZ3JhbW1hciBydWxlcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHBsYWNlc1xuZWFjaCBjbGF1c2Ugb24gYSBzZXBhcmF0ZSBsaW5lIGZvciBjbGFyaXR5LlxuXG5cblRoZSBgYGlmYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZlxucHJlc2VudCwgaXMgZXhlY3V0ZWQuXG5cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpc1xuZXhlY3V0ZWQgYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmdvZXMgYmFjayB0byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuXG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGZvcmBgIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYVxuc2VxdWVuY2UgKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG5gYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgYGBTdG9wSXRlcmF0aW9uYGBcbmV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCxcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5jb250aW51ZXMgd2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSBgYGVsc2VgYCBjbGF1c2UgaWYgdGhlcmUgd2FzXG5ubyBuZXh0IGl0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYHJhbmdlKClgYCByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzIGBgZm9yXG5pIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAgcmV0dXJucyB0aGUgbGlzdCBgYFswLCAxLFxuMl1gYC5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGUgbG9vcFxuICAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgYGBhc2BgIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLFxuaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyBgYGFzIHRhcmdldGBgLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSBgYHN5c2BgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbmBgc3lzLmV4Y19pbmZvKClgYC4gYGBzeXMuZXhjX2luZm8oKWBgIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2ZcbnRoZSBleGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdFxuKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW5cbnRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBgYHN5cy5leGNfaW5mbygpYGAgdmFsdWVzXG5hcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mXG50aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiAgSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uLCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3XG5leGNlcHRpb24uIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yXG5gYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWQgZXhjZXB0aW9uIGlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYGB3aXRoX2l0ZW1gYClcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSBgYHdpdGhgYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiYGAqYGAiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS1cbnRoaXMgaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlIGBgTm9uZWBgIGFzIHRoZVxuZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgImBgZGVmYGAiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcbiAgICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgdW5sZXNzIHRoZXJlXG4gICAgaXMgYSBgYGZpbmFsbHlgYCBjbGF1c2Ugd2hpY2ggaGFwcGVucyB0byByYWlzZSBhbm90aGVyIGV4Y2VwdGlvbi5cbiAgICBUaGF0IG5ldyBleGNlcHRpb24gY2F1c2VzIHRoZSBvbGQgb25lIHRvIGJlIGxvc3QuXG5cblsyXSBDdXJyZW50bHksIGNvbnRyb2wgImZsb3dzIG9mZiB0aGUgZW5kIiBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgYW5cbiAgICBleGNlcHRpb24gb3IgdGhlIGV4ZWN1dGlvbiBvZiBhIGBgcmV0dXJuYGAsIGBgY29udGludWVgYCwgb3JcbiAgICBgYGJyZWFrYGAgc3RhdGVtZW50LlxuXG5bM10gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgZnVuY3Rpb25cbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGZ1bmN0aW9uXCdzIGBgX19kb2NfX2BgIGF0dHJpYnV0ZSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyBgYF9fZG9jX19gYCBpdGVtIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgY2xhc3NcJ3MgKmRvY3N0cmluZyouXG4nLAorICdjb21wb3VuZCc6ICdcbkNvbXBvdW5kIHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKipcblxuQ29tcG91bmQgc3RhdGVtZW50cyBjb250YWluIChncm91cHMgb2YpIG90aGVyIHN0YXRlbWVudHM7IHRoZXkgYWZmZWN0XG5vciBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhvc2Ugb3RoZXIgc3RhdGVtZW50cyBpbiBzb21lIHdheS4gIEluXG5nZW5lcmFsLCBjb21wb3VuZCBzdGF0ZW1lbnRzIHNwYW4gbXVsdGlwbGUgbGluZXMsIGFsdGhvdWdoIGluIHNpbXBsZVxuaW5jYXJuYXRpb25zIGEgd2hvbGUgY29tcG91bmQgc3RhdGVtZW50IG1heSBiZSBjb250YWluZWQgaW4gb25lIGxpbmUuXG5cblRoZSBgYGlmYGAsIGBgd2hpbGVgYCBhbmQgYGBmb3JgYCBzdGF0ZW1lbnRzIGltcGxlbWVudCB0cmFkaXRpb25hbFxuY29udHJvbCBmbG93IGNvbnN0cnVjdHMuICBgYHRyeWBgIHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yXG5jbGVhbnVwIGNvZGUgZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cywgd2hpbGUgdGhlIGBgd2l0aGBgIHN0YXRlbWVudFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhXG5ibG9jayBvZiBjb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHlcbmNvbXBvdW5kIHN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggYGBpZmBgIGNsYXVzZSBhIGZvbGxvd2luZyBgYGVsc2VgYCBjbGF1c2Ugd291bGQgYmVsb25nOlxuXG4gICBpZiB0ZXN0MTogaWYgdGVzdDI6IHByaW50KHgpXG5cbkFsc28gbm90ZSB0aGF0IHRoZSBzZW1pY29sb24gYmluZHMgdGlnaHRlciB0aGFuIHRoZSBjb2xvbiBpbiB0aGlzXG5jb250ZXh0LCBzbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZVxuYGBwcmludCgpYGAgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhIGBgTkVXTElORWBgIHBvc3NpYmx5IGZvbGxvd2VkIGJ5XG5hIGBgREVERU5UYGAuICBBbHNvIG5vdGUgdGhhdCBvcHRpb25hbCBjb250aW51YXRpb24gY2xhdXNlcyBhbHdheXNcbmJlZ2luIHdpdGggYSBrZXl3b3JkIHRoYXQgY2Fubm90IHN0YXJ0IGEgc3RhdGVtZW50LCB0aHVzIHRoZXJlIGFyZSBub1xuYW1iaWd1aXRpZXMgKHRoZSBcJ2RhbmdsaW5nIGBgZWxzZWBgXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkIGBgaWZgYCBzdGF0ZW1lbnRzIHRvIGJlIGluZGVudGVkKS5cblxuVGhlIGZvcm1hdHRpbmcgb2YgdGhlIGdyYW1tYXIgcnVsZXMgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucyBwbGFjZXNcbmVhY2ggY2xhdXNlIG9uIGEgc2VwYXJhdGUgbGluZSBmb3IgY2xhcml0eS5cblxuXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXNcbmV4ZWN1dGVkIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5nb2VzIGJhY2sgdG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cblxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhIGBgU3RvcEl0ZXJhdGlvbmBgXG5leGNlcHRpb24pLCB0aGUgc3VpdGUgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuY29udGludWVzIHdpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgYGBlbHNlYGAgY2xhdXNlIGlmIHRoZXJlIHdhc1xubm8gbmV4dCBpdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvclxuaSA6PSBhIHRvIGIgZG9gYDsgZS5nLiwgYGBsaXN0KHJhbmdlKDMpKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSxcbjJdYGAuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGxvb3BcbiAgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgYGBleGNlcHRgYCBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW5cbm5vIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBzdWl0ZSwgYSBzZWFyY2ggZm9yXG5hbiBleGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdFxuY2xhdXNlcyBpbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuXG5leHByZXNzaW9uLWxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzXG5hbnkgZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0XG5leHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZVxucmVzdWx0aW5nIG9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzXG5jb21wYXRpYmxlIHdpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlXG5leGNlcHRpb24gb2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGBgYXNgYCBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSxcbmlmIHByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgYGBhcyB0YXJnZXRgYCwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgYGBzeXNgYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG5gYHN5cy5leGNfaW5mbygpYGAuIGBgc3lzLmV4Y19pbmZvKClgYCByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mXG50aGUgZXhjZXB0aW9uIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3RcbihzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluXG50aGUgcHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgYGBzeXMuZXhjX2luZm8oKWBgIHZhbHVlc1xuYXJlIHJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZlxudGhlIGBgZmluYWxseWBgIGNsYXVzZS4gIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBzZXQgYXMgdGhlIGNvbnRleHQgb2YgdGhlIG5ld1xuZXhjZXB0aW9uLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBvclxuYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQ6XG5cbiAgIGRlZiBmKCk6XG4gICAgICAgdHJ5OlxuICAgICAgICAgICAxLzBcbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICByZXR1cm4gNDJcblxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbldoZW4gYSBgYHJldHVybmBgLCBgYGJyZWFrYGAgb3IgYGBjb250aW51ZWBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpblxudGhlIGBgdHJ5YGAgc3VpdGUgb2YgYSBgYHRyeWBgLi4uYGBmaW5hbGx5YGAgc3RhdGVtZW50LCB0aGVcbmBgZmluYWxseWBgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBpcyBpbGxlZ2FsIGluIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGFcbnByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmVcbmxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgYGByYWlzZWBgIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlIGBgd2l0aGBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGBgd2l0aF9pdGVtYGApXG4gICBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19lbnRlcl9fKClgYCBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gYGBfX2VudGVyX18oKWBgIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgYGB3aXRoYGAgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgYGBfX2VudGVyX18oKWBgXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gYGBfX2V4aXRfXygpYGAgd2lsbCBhbHdheXNcbiAgICAgYmUgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGBgX19leGl0X18oKWBgLiBPdGhlcndpc2UsXG4gICB0aHJlZSBgYE5vbmVgYCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgYGBfX2V4aXRfXygpYGAgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgcmVyYWlzZWQuICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICBzdXBwcmVzc2VkLCBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nXG4gICB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSBgYF9fZXhpdF9fKClgYCBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5XaXRoIG1vcmUgdGhhbiBvbmUgaXRlbSwgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBhcyBpZlxubXVsdGlwbGUgYGB3aXRoYGAgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG5gYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG5cblxuQ2xhc3MgZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09XG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBkZWZpbmVzIGEgY2xhc3Mgb2JqZWN0IChzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkXG50eXBlIGhpZXJhcmNoeSopOlxuXG4gICBjbGFzc2RlZiAgICA6Oj0gW2RlY29yYXRvcnNdICJjbGFzcyIgY2xhc3NuYW1lIFtpbmhlcml0YW5jZV0gIjoiIHN1aXRlXG4gICBpbmhlcml0YW5jZSA6Oj0gIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiXG4gICBjbGFzc25hbWUgICA6Oj0gaWRlbnRpZmllclxuXG5BIGNsYXNzIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBUaGUgaW5oZXJpdGFuY2UgbGlzdFxudXN1YWxseSBnaXZlcyBhIGxpc3Qgb2YgYmFzZSBjbGFzc2VzIChzZWUgKkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uKlxuZm9yIG1vcmUgYWR2YW5jZWQgdXNlcyksIHNvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdCBzaG91bGQgZXZhbHVhdGUgdG8gYVxuY2xhc3Mgb2JqZWN0IHdoaWNoIGFsbG93cyBzdWJjbGFzc2luZy4gIENsYXNzZXMgd2l0aG91dCBhbiBpbmhlcml0YW5jZVxubGlzdCBpbmhlcml0LCBieSBkZWZhdWx0LCBmcm9tIHRoZSBiYXNlIGNsYXNzIGBgb2JqZWN0YGA7IGhlbmNlLFxuXG4gICBjbGFzcyBGb286XG4gICAgICAgcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbyhvYmplY3QpOlxuICAgICAgIHBhc3NcblxuVGhlIGNsYXNzXCdzIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgaW4gYSBuZXcgZXhlY3V0aW9uIGZyYW1lIChzZWVcbipOYW1pbmcgYW5kIGJpbmRpbmcqKSwgdXNpbmcgYSBuZXdseSBjcmVhdGVkIGxvY2FsIG5hbWVzcGFjZSBhbmQgdGhlXG5vcmlnaW5hbCBnbG9iYWwgbmFtZXNwYWNlLiAoVXN1YWxseSwgdGhlIHN1aXRlIGNvbnRhaW5zIG1vc3RseVxuZnVuY3Rpb24gZGVmaW5pdGlvbnMuKSAgV2hlbiB0aGUgY2xhc3NcJ3Mgc3VpdGUgZmluaXNoZXMgZXhlY3V0aW9uLCBpdHNcbmV4ZWN1dGlvbiBmcmFtZSBpcyBkaXNjYXJkZWQgYnV0IGl0cyBsb2NhbCBuYW1lc3BhY2UgaXMgc2F2ZWQuIFs0XSBBXG5jbGFzcyBvYmplY3QgaXMgdGhlbiBjcmVhdGVkIHVzaW5nIHRoZSBpbmhlcml0YW5jZSBsaXN0IGZvciB0aGUgYmFzZVxuY2xhc3NlcyBhbmQgdGhlIHNhdmVkIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LlxuVGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgdG8gdGhpcyBjbGFzcyBvYmplY3QgaW4gdGhlIG9yaWdpbmFsIGxvY2FsXG5uYW1lc3BhY2UuXG5cbkNsYXNzIGNyZWF0aW9uIGNhbiBiZSBjdXN0b21pemVkIGhlYXZpbHkgdXNpbmcgKm1ldGFjbGFzc2VzKi5cblxuQ2xhc3NlcyBjYW4gYWxzbyBiZSBkZWNvcmF0ZWQ6IGp1c3QgbGlrZSB3aGVuIGRlY29yYXRpbmcgZnVuY3Rpb25zLFxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBjbGFzcyBGb286IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb286IHBhc3NcbiAgIEZvbyA9IGYxKGFyZykoZjIoRm9vKSlcblxuVGhlIGV2YWx1YXRpb24gcnVsZXMgZm9yIHRoZSBkZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIHRoZSBzYW1lIGFzIGZvclxuZnVuY3Rpb24gZGVjb3JhdG9ycy4gIFRoZSByZXN1bHQgbXVzdCBiZSBhIGNsYXNzIG9iamVjdCwgd2hpY2ggaXMgdGhlblxuYm91bmQgdG8gdGhlIGNsYXNzIG5hbWUuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIFZhcmlhYmxlcyBkZWZpbmVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGFyZVxuY2xhc3MgYXR0cmlidXRlczsgdGhleSBhcmUgc2hhcmVkIGJ5IGluc3RhbmNlcy4gIEluc3RhbmNlIGF0dHJpYnV0ZXNcbmNhbiBiZSBzZXQgaW4gYSBtZXRob2Qgd2l0aCBgYHNlbGYubmFtZSA9IHZhbHVlYGAuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvblxuImBgc2VsZi5uYW1lYGAiLCBhbmQgYW4gaW5zdGFuY2UgYXR0cmlidXRlIGhpZGVzIGEgY2xhc3MgYXR0cmlidXRlXG53aXRoIHRoZSBzYW1lIG5hbWUgd2hlbiBhY2Nlc3NlZCBpbiB0aGlzIHdheS4gIENsYXNzIGF0dHJpYnV0ZXMgY2FuIGJlXG51c2VkIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzLCBidXQgdXNpbmcgbXV0YWJsZSB2YWx1ZXNcbnRoZXJlIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4gICpEZXNjcmlwdG9ycyogY2FuIGJlIHVzZWQgdG9cbmNyZWF0ZSBpbnN0YW5jZSB2YXJpYWJsZXMgd2l0aCBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzICoqUEVQIDMxMjkqKiAtIENsYXNzXG4gICBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzcyB0aGVyZVxuICAgIGlzIGEgYGBmaW5hbGx5YGAgY2xhdXNlIHdoaWNoIGhhcHBlbnMgdG8gcmFpc2UgYW5vdGhlciBleGNlcHRpb24uXG4gICAgVGhhdCBuZXcgZXhjZXB0aW9uIGNhdXNlcyB0aGUgb2xkIG9uZSB0byBiZSBsb3N0LlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29udGV4dC1tYW5hZ2Vycyc6ICdcbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgYGB3aXRoYGAgc3RhdGVtZW50LiBUaGUgY29udGV4dFxubWFuYWdlciBoYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZVxuY29udGV4dCBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlXG5ub3JtYWxseSBpbnZva2VkIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qVGhlIHdpdGggc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyXG5tZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBgYHdpdGhgYFxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSBgYGFzYGAgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgYGBOb25lYGAuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0IGBgX19leGl0X18oKWBgIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cbicsCiAgJ2NvbnRpbnVlJzogJ1xuVGhlIGBgY29udGludWVgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGNvbnRpbnVlX3N0bXQgOjo9ICJjb250aW51ZSJcblxuYGBjb250aW51ZWBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgYGBmb3JgYCBvclxuYGB3aGlsZWBgIGxvb3AsIGJ1dCBub3QgbmVzdGVkIGluIGEgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiBvclxuYGBmaW5hbGx5YGAgY2xhdXNlIHdpdGhpbiB0aGF0IGxvb3AuICBJdCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBjeWNsZVxub2YgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AuXG5cbldoZW4gYGBjb250aW51ZWBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5zdGFydGluZyB0aGUgbmV4dCBsb29wIGN5Y2xlLlxuJywKICAnY29udmVyc2lvbnMnOiAnXG5Bcml0aG1ldGljIGNvbnZlcnNpb25zXG4qKioqKioqKioqKioqKioqKioqKioqXG5cbldoZW4gYSBkZXNjcmlwdGlvbiBvZiBhbiBhcml0aG1ldGljIG9wZXJhdG9yIGJlbG93IHVzZXMgdGhlIHBocmFzZVxuInRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUsIiB0aGlzIG1lYW5zXG50aGF0IHRoZSBvcGVyYXRvciBpbXBsZW1lbnRhdGlvbiBmb3IgYnVpbHQtaW4gdHlwZXMgd29ya3MgdGhhdCB3YXk6XG5cbiogSWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgY29tcGxleCBudW1iZXIsIHRoZSBvdGhlciBpcyBjb252ZXJ0ZWQgdG9cbiAgY29tcGxleDtcblxuKiBvdGhlcndpc2UsIGlmIGVpdGhlciBhcmd1bWVudCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgdGhlIG90aGVyXG4gIGlzIGNvbnZlcnRlZCB0byBmbG9hdGluZyBwb2ludDtcblxuKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuXG5cblNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGxlZnRcbmFyZ3VtZW50IHRvIHRoZSBcJyVcJyBvcGVyYXRvcikuICBFeHRlbnNpb25zIG11c3QgZGVmaW5lIHRoZWlyIG93blxuY29udmVyc2lvbiBiZWhhdmlvci5cbicsCi0gJ2N1c3RvbWl6YXRpb24nOiAnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCBgYF9fZGVsX18oKWBgIG1ldGhvZHMgaW52b2x2ZWQuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgIGZvciB0aGUgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3dcbiAgICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvcixcbiAgICAgcGFydGljdWxhcmx5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGAgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGVcbiAgICJvZmZpY2lhbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSxcbiAgIHRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZFxuICAgdG8gcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgIGBgPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYFxuICAgYnV0IG5vdCBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuXG4gICAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpc1xuICAgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgc3RyKG9iamVjdClgYCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGZvcm1hdCgpYGBcbiAgIGFuZCBgYHByaW50KClgYCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGVcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgKnN0cmluZyogb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYGBvYmplY3QuX19yZXByX18oKWBgIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgYGBfX3N0cl9fKClgYCByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgYGBvYmplY3RgYFxuICAgY2FsbHMgYGBvYmplY3QuX19yZXByX18oKWBgLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYGJ5dGVzKClgYCB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgYGBieXRlc2BgIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBmb3JtYXQoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kIG9mIGNsYXNzIGBgc3RyYGApIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpc1xuICAgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzIHVwXG4gICB0byB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgYGBfX2Zvcm1hdF9fKClgYCwgaG93ZXZlciBtb3N0IGNsYXNzZXNcbiAgIHdpbGwgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3JcbiAgIHVzZSBhIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgY2FsbHNcbiAgIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZCBgYHg+PXlgYCBjYWxsc1xuICAgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6IGBgaGFzaCgpYGAgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwncyBjdXN0b21cbiAgICAgYGBfX2hhc2hfXygpYGAgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgYGBQeV9zc2l6ZV90YGAuICBUaGlzIGlzXG4gICAgIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0IGJ1aWxkcy5cbiAgICAgSWYgYW4gb2JqZWN0XCdzICAgYGBfX2hhc2hfXygpYGAgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzIG9mXG4gICAgIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbCBzdXBwb3J0ZWRcbiAgICAgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoIGBgcHl0aG9uIC1jICJpbXBvcnQgc3lzO1xuICAgICBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSJgYFxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiBgYF9fZXFfXygpYGAgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXNcbiAgIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlXG4gICB1c2FibGUgYXMgaXRlbXMgaW4gaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhbiBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGRcbiAgIG5vdCBpbXBsZW1lbnQgYGBfX2hhc2hfXygpYGAsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZVxuICAgY29sbGVjdGlvbnMgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlXG4gICBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2VxX18oKWBgIGFuZCBgYF9faGFzaF9fKClgYCBtZXRob2RzXG4gICBieSBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCBgYHguX19oYXNoX18oKWBgIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCBgYHggPT0geWBgIGltcGxpZXMgYm90aCB0aGF0IGBgeCBpcyB5YGAgYW5kIGBgaGFzaCh4KSA9PVxuICAgaGFzaCh5KWBgLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBhbmQgZG9lcyBub3QgZGVmaW5lXG4gICBgYF9faGFzaF9fKClgYCB3aWxsIGhhdmUgaXRzIGBgX19oYXNoX18oKWBgIGltcGxpY2l0bHkgc2V0IHRvXG4gICBgYE5vbmVgYC4gIFdoZW4gdGhlIGBgX19oYXNoX18oKWBgIG1ldGhvZCBvZiBhIGNsYXNzIGlzIGBgTm9uZWBgLFxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlblxuICAgYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmVcbiAgIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLFxuICAgY29sbGVjdGlvbnMuSGFzaGFibGVgYCkuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZVxuICAgaW50ZXJwcmV0ZXIgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nIGBgX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfX2BgLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgYGBfX2VxX18oKWBgIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gYGBfX2hhc2hfXygpYGAgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSBgYFR5cGVFcnJvcmBgIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWRcbiAgIGFzIGhhc2hhYmxlIGJ5IGFuIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSBgYF9faGFzaF9fKClgYCB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmQgZGF0ZXRpbWVcbiAgICAgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyBgYFBZVEhPTkhBU0hTRUVEYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLiAgV2hlbiB0aGlzIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlXG4gICBvYmplY3QgaXMgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fYm9vbF9fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXNcbiAgIGFyZSBjb25zaWRlcmVkIHRydWUuXG4nLAotICdkZWJ1Z2dlcic6ICdcbmBgcGRiYGAgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG1vZHVsZSBgYHBkYmBgIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbmBgUGRiYGAuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnlcbnJlYWRpbmcgdGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgYGBiZGJgYFxuYW5kIGBgY21kYGAuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgYGAoUGRiKWBgLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW1cbnVuZGVyIGNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogVGFiLWNvbXBsZXRpb24gdmlhIHRoZSBgYHJlYWRsaW5lYGAgbW9kdWxlIGlzXG5hdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZCBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWxcbmFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcyBhcmd1bWVudHMgb2YgdGhlIGBgcHJpbnRgYCBjb21tYW5kLlxuXG5gYHBkYi5weWBgIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy5cbkZvciBleGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6IGBgcGRiLnB5YGAgbm93IGFjY2VwdHMgYSBgYC1jYGAgb3B0aW9uIHRoYXRcbmV4ZWN1dGVzIGNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgYGAucGRicmNgYCBmaWxlLCBzZWUgKkRlYnVnZ2VyXG5Db21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY29udGludWVgYCBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW5cbiAgIHN0ZXAgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHVzaW5nIGBgc3RlcGBgIG9yIGBgbmV4dGBgIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSBgYF9fbWFpbl9fYGAgaXMgdXNlZC4gIChTZWVcbiAgIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgYnVpbHQtaW4gYGBleGVjKClgYCBvciBgYGV2YWwoKWBgXG4gICBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gYGBydW5ldmFsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICBgYHJ1bigpYGAuXG5cbnBkYi5ydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gYGBydW5jYWxsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cblRoZSBgYHJ1bipgYCBmdW5jdGlvbnMgYW5kIGBgc2V0X3RyYWNlKClgYCBhcmUgYWxpYXNlcyBmb3Jcbmluc3RhbnRpYXRpbmcgdGhlIGBgUGRiYGAgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZVxubmFtZS4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzXG55b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgYGBQZGJgYCBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgYGBjbWQuQ21kYGAgY2xhc3M7IHNlZSB0aGUgZGVzY3JpcHRpb24gdGhlcmUuXG5cbiAgIFRoZSAqc2tpcCogYXJndW1lbnQsIGlmIGdpdmVuLCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGdsb2Itc3R5bGVcbiAgIG1vZHVsZSBuYW1lIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdFxuICAgb3JpZ2luYXRlIGluIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXVxuXG4gICBCeSBkZWZhdWx0LCBQZGIgc2V0cyBhIGhhbmRsZXIgZm9yIHRoZSBTSUdJTlQgc2lnbmFsICh3aGljaCBpcyBzZW50XG4gICB3aGVuIHRoZSB1c2VyIHByZXNzZXMgQ3RybC1DIG9uIHRoZSBjb25zb2xlKSB3aGVuIHlvdSBnaXZlIGFcbiAgIGBgY29udGludWVgYCBjb21tYW5kLiBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXJcbiAgIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdSB3YW50IFBkYiBub3QgdG8gdG91Y2ggdGhlIFNJR0lOVFxuICAgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMjogVGhlICpub3NpZ2ludCogYXJndW1lbnQuICBQcmV2aW91c2x5LCBhIFNJR0lOVFxuICAgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5IFBkYi5cblxuICAgcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcbiAgIHJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBiZWxvdy4gIE1vc3RcbmNvbW1hbmRzIGNhbiBiZSBhYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnMgYXMgaW5kaWNhdGVkOyBlLmcuXG5gYGgoZWxwKWBgIG1lYW5zIHRoYXQgZWl0aGVyIGBgaGBgIG9yIGBgaGVscGBgIGNhbiBiZSB1c2VkIHRvIGVudGVyXG50aGUgaGVscCBjb21tYW5kIChidXQgbm90IGBgaGVgYCBvciBgYGhlbGBgLCBub3IgYGBIYGAgb3IgYGBIZWxwYGAgb3JcbmBgSEVMUGBgKS4gIEFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlXG4oc3BhY2VzIG9yIHRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHNcbihgYFtdYGApIGluIHRoZSBjb21tYW5kIHN5bnRheDsgdGhlIHNxdWFyZSBicmFja2V0cyBtdXN0IG5vdCBiZSB0eXBlZC5cbkFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIGJhclxuKGBgfGBgKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSBgYGxpc3RgYCBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKGBgIWBgKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5UaGUgZGVidWdnZXIgc3VwcG9ydHMgKmFsaWFzZXMqLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnlcbmBgOztgYC4gIChBIHNpbmdsZSBgYDtgYCBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvclxubXVsdGlwbGUgY29tbWFuZHMgaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vXG5pbnRlbGxpZ2VuY2UgaXMgYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0XG5hdCB0aGUgZmlyc3QgYGA7O2BgIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZFxuc3RyaW5nLlxuXG5JZiBhIGZpbGUgYGAucGRicmNgYCBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogYGAucGRicmNgYCBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdFxuY29udGludWUgZGVidWdnaW5nLCBzdWNoIGFzIGBgY29udGludWVgYCBvciBgYG5leHRgYC4gIFByZXZpb3VzbHksXG50aGVzZSBjb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gIGBgaGVscCBwZGJgYFxuICAgZGlzcGxheXMgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiAodGhlIGRvY3N0cmluZyBvZiB0aGUgYGBwZGJgYFxuICAgbW9kdWxlKS4gIFNpbmNlIHRoZSAqY29tbWFuZCogYXJndW1lbnQgbXVzdCBiZSBhbiBpZGVudGlmaWVyLFxuICAgYGBoZWxwIGV4ZWNgYCBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlIGBgIWBgIGNvbW1hbmQuXG5cbncoaGVyZSlcblxuICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuXG4gICBhcnJvdyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2ZcbiAgIG1vc3QgY29tbWFuZHMuXG5cbmQob3duKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyBkb3duIGluIHRoZVxuICAgc3RhY2sgdHJhY2UgKHRvIGEgbmV3ZXIgZnJhbWUpLlxuXG51KHApIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIHVwIGluIHRoZSBzdGFja1xuICAgdHJhY2UgKHRvIGFuIG9sZGVyIGZyYW1lKS5cblxuYihyZWFrKSBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFdpdGggYSAqbGluZW5vKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQgZmlsZS5cbiAgIFdpdGggYSAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZVxuICAgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuICBUaGUgZmlsZSBpc1xuICAgc2VhcmNoZWQgb24gYGBzeXMucGF0aGBgLiAgTm90ZSB0aGF0IGVhY2ggYnJlYWtwb2ludCBpcyBhc3NpZ25lZCBhXG4gICBudW1iZXIgdG8gd2hpY2ggYWxsIHRoZSBvdGhlciBicmVha3BvaW50IGNvbW1hbmRzIHJlZmVyLlxuXG4gICBJZiBhIHNlY29uZCBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsXG4gICB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50XG4gICBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LlxuXG50YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBUZW1wb3JhcnkgYnJlYWtwb2ludCwgd2hpY2ggaXMgcmVtb3ZlZCBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXNcbiAgIGZpcnN0IGhpdC4gVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGBgYnJlYWtgYC5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0IGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcHJpbnQgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggYGBlbmRgYDsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYG5leHRgYCBhbmRcbiAgIGBgc3RlcGBgIGlzIHRoYXQgYGBzdGVwYGAgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZVxuICAgYGBuZXh0YGAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5XG4gICBzdG9wcGluZyBhdCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBgYGZvcmBgIGxvb3Agb3Igb3V0XG4gICBvZiBhIGBgZmluYWxseWBgIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCBgYC5gYCBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS5cbiAgIFdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuICAgVGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgY3VycmVudCBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkgYGAtPmBgLiAgSWZcbiAgIGFuIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IGBgPj5gYCwgaWYgaXRcbiAgIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSBgYD4+YGAgbWFya2VyLlxuXG5sbCB8IGxvbmdsaXN0XG5cbiAgIExpc3QgYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBmcmFtZS5cbiAgIEludGVyZXN0aW5nIGxpbmVzIGFyZSBtYXJrZWQgYXMgZm9yIGBgbGlzdGBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucChyaW50KSBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSBgYHByaW50YGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpc1xuICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlIGBgcHByaW50YGAgbW9kdWxlLlxuXG53aGF0aXMgZXhwcmVzc2lvblxuXG4gICBQcmludCB0aGUgdHlwZSBvZiB0aGUgKmV4cHJlc3Npb24qLlxuXG5zb3VyY2UgZXhwcmVzc2lvblxuXG4gICBUcnkgdG8gZ2V0IHNvdXJjZSBjb2RlIGZvciB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCBkaXNwbGF5IGl0LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmRpc3BsYXkgW2V4cHJlc3Npb25dXG5cbiAgIERpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlmIGl0IGNoYW5nZWQsIGVhY2ggdGltZVxuICAgZXhlY3V0aW9uIHN0b3BzIGluIHRoZSBjdXJyZW50IGZyYW1lLlxuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGxpc3QgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG51bmRpc3BsYXkgW2V4cHJlc3Npb25dXG5cbiAgIERvIG5vdCBkaXNwbGF5IHRoZSBleHByZXNzaW9uIGFueSBtb3JlIGluIHRoZSBjdXJyZW50IGZyYW1lLlxuICAgV2l0aG91dCBleHByZXNzaW9uLCBjbGVhciBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmludGVyYWN0XG5cbiAgIFN0YXJ0IGFuIGludGVyYXRpdmUgaW50ZXJwcmV0ZXIgKHVzaW5nIHRoZSBgYGNvZGVgYCBtb2R1bGUpIHdob3NlXG4gICBnbG9iYWwgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluXG4gICB0aGUgY3VycmVudCBzY29wZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hbGlhcyBbbmFtZSBbY29tbWFuZF1dXG5cbiAgIENyZWF0ZSBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlIGNvbW1hbmRcbiAgIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBjYW4gYmVcbiAgIGluZGljYXRlZCBieSBgYCUxYGAsIGBgJTJgYCwgYW5kIHNvIG9uLCB3aGlsZSBgYCUqYGAgaXMgcmVwbGFjZWQgYnlcbiAgIGFsbCB0aGUgcGFyYW1ldGVycy4gSWYgbm8gY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yXG4gICAqbmFtZSogaXMgc2hvd24uIElmIG5vIGFyZ3VtZW50cyBhcmUgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuXG5cbiAgIEFsaWFzZXMgbWF5IGJlIG5lc3RlZCBhbmQgY2FuIGNvbnRhaW4gYW55dGhpbmcgdGhhdCBjYW4gYmUgbGVnYWxseVxuICAgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlIHRoYXQgaW50ZXJuYWwgcGRiIGNvbW1hbmRzICpjYW4qIGJlXG4gICBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGVcbiAgIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcyByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgY29tbWFuZCBsaW5lOyBhbGwgb3RoZXIgd29yZHMgaW4gdGhlIGxpbmUgYXJlIGxlZnRcbiAgIGFsb25lLlxuXG4gICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbiBwbGFjZWRcbiAgIGluIHRoZSBgYC5wZGJyY2BgIGZpbGUpOlxuXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZlxuICAgICAgYWxpYXMgcHMgcGkgc2VsZlxuXG51bmFsaWFzIG5hbWVcblxuICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cbiEgc3RhdGVtZW50XG5cbiAgIEV4ZWN1dGUgdGhlIChvbmUtbGluZSkgKnN0YXRlbWVudCogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnRcbiAgIHN0YWNrIGZyYW1lLiBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgc3RhdGVtZW50IHJlc2VtYmxlcyBhIGRlYnVnZ2VyIGNvbW1hbmQuICBUbyBzZXQgYVxuICAgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYVxuICAgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgb24gdGhlIHNhbWUgbGluZSwgZS5nLjpcblxuICAgICAgKFBkYikgZ2xvYmFsIGxpc3Rfb3B0aW9uczsgbGlzdF9vcHRpb25zID0gW1wnLWxcJ11cbiAgICAgIChQZGIpXG5cbnJ1biBbYXJncyAuLi5dXG5yZXN0YXJ0IFthcmdzIC4uLl1cblxuICAgUmVzdGFydCB0aGUgZGVidWdnZWQgUHl0aG9uIHByb2dyYW0uICBJZiBhbiBhcmd1bWVudCBpcyBzdXBwbGllZCxcbiAgIGl0IGlzIHNwbGl0IHdpdGggYGBzaGxleGBgIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ld1xuICAgYGBzeXMuYXJndmBgLiBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9uc1xuICAgYXJlIHByZXNlcnZlZC4gYGByZXN0YXJ0YGAgaXMgYW4gYWxpYXMgZm9yIGBgcnVuYGAuXG5cbnEodWl0KVxuXG4gICBRdWl0IGZyb20gdGhlIGRlYnVnZ2VyLiAgVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZSBpc1xuICAgIGRldGVybWluZWQgYnkgdGhlIGBgX19uYW1lX19gYCBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCisgJ2N1c3RvbWl6YXRpb24nOiAnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgYW5kIGNsZWFuZWQgdXAgd2hlbiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzXG4gICAgIGVuYWJsZWQgKGl0XCdzIG9uIGJ5IGRlZmF1bHQpLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCisgJ2RlYnVnZ2VyJzogJ1xuYGBwZGJgYCAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlIGBgcGRiYGAgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuYGBQZGJgYC4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieVxucmVhZGluZyB0aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyBgYGJkYmBgXG5hbmQgYGBjbWRgYC5cblxuVGhlIGRlYnVnZ2VyXCdzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbVxudW5kZXIgY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlIGBgcmVhZGxpbmVgYCBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgYGBwYGAgY29tbWFuZC5cblxuYGBwZGIucHlgYCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuXG5Gb3IgZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiBgYHBkYi5weWBgIG5vdyBhY2NlcHRzIGEgYGAtY2BgIG9wdGlvbiB0aGF0XG5leGVjdXRlcyBjb21tYW5kcyBhcyBpZiBnaXZlbiBpbiBhIGBgLnBkYnJjYGAgZmlsZSwgc2VlICpEZWJ1Z2dlclxuQ29tbWFuZHMqLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBmcm9tIGEgcnVubmluZyBwcm9ncmFtIGlzXG50byBpbnNlcnRcblxuICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpXG5cbmF0IHRoZSBsb2NhdGlvbiB5b3Ugd2FudCB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBjYW4gdGhlblxuc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGZvbGxvd2luZyB0aGlzIHN0YXRlbWVudCwgYW5kIGNvbnRpbnVlIHJ1bm5pbmdcbndpdGhvdXQgdGhlIGRlYnVnZ2VyIHVzaW5nIHRoZSBgYGNvbnRpbnVlYGAgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgYGBjb250aW51ZWBgLCBvciB5b3UgY2FuXG4gICBzdGVwIHRocm91Z2ggdGhlIHN0YXRlbWVudCB1c2luZyBgYHN0ZXBgYCBvciBgYG5leHRgYCAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgYGBfX21haW5fX2BgIGlzIHVzZWQuICAoU2VlXG4gICB0aGUgZXhwbGFuYXRpb24gb2YgdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgb3IgYGBldmFsKClgYFxuICAgZnVuY3Rpb25zLilcblxucGRiLnJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdClcbiAgIHVuZGVyIGRlYnVnZ2VyIGNvbnRyb2wuICBXaGVuIGBgcnVuZXZhbCgpYGAgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgYGBydW4oKWBgLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuIGBgcnVuY2FsbCgpYGAgcmV0dXJucywgaXQgcmV0dXJuc1xuICAgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnNcbiAgIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuXG5cbnBkYi5zZXRfdHJhY2UoKVxuXG4gICBFbnRlciB0aGUgZGVidWdnZXIgYXQgdGhlIGNhbGxpbmcgc3RhY2sgZnJhbWUuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgaGFyZC1jb2RlIGEgYnJlYWtwb2ludCBhdCBhIGdpdmVuIHBvaW50IGluIGEgcHJvZ3JhbSwgZXZlbiBpZiB0aGVcbiAgIGNvZGUgaXMgbm90IG90aGVyd2lzZSBiZWluZyBkZWJ1Z2dlZCAoZS5nLiB3aGVuIGFuIGFzc2VydGlvblxuICAgZmFpbHMpLlxuXG5wZGIucG9zdF9tb3J0ZW0odHJhY2ViYWNrPU5vbmUpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgZ2l2ZW4gKnRyYWNlYmFjayogb2JqZWN0LiAgSWYgbm9cbiAgICp0cmFjZWJhY2sqIGlzIGdpdmVuLCBpdCB1c2VzIHRoZSBvbmUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGlzXG4gICBjdXJyZW50bHkgYmVpbmcgaGFuZGxlZCAoYW4gZXhjZXB0aW9uIG11c3QgYmUgYmVpbmcgaGFuZGxlZCBpZiB0aGVcbiAgIGRlZmF1bHQgaXMgdG8gYmUgdXNlZCkuXG5cbnBkYi5wbSgpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluXG4gICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG5UaGUgYGBydW4qYGAgZnVuY3Rpb25zIGFuZCBgYHNldF90cmFjZSgpYGAgYXJlIGFsaWFzZXMgZm9yXG5pbnN0YW50aWF0aW5nIHRoZSBgYFBkYmBgIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWVcbm5hbWUuICBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpc1xueW91cnNlbGY6XG5cbmNsYXNzIGNsYXNzIHBkYi5QZGIoY29tcGxldGVrZXk9XCd0YWJcJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSwgbm9zaWdpbnQ9RmFsc2UpXG5cbiAgIGBgUGRiYGAgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nIGBgY21kLkNtZGBgIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudFxuICAgd2hlbiB0aGUgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICBgYGNvbnRpbnVlYGAgY29tbWFuZC4gVGhpcyBhbGxvd3MgeW91IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyXG4gICBhZ2FpbiBieSBwcmVzc2luZyBDdHJsLUMuICBJZiB5b3Ugd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZSBTSUdJTlRcbiAgIGhhbmRsZXIsIHNldCAqbm9zaWdpbnQqIHRvdCB0cnVlLlxuXG4gICBFeGFtcGxlIGNhbGwgdG8gZW5hYmxlIHRyYWNpbmcgd2l0aCAqc2tpcCo6XG5cbiAgICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bXCdkamFuZ28uKlwnXSkuc2V0X3RyYWNlKClcblxuICAgTmV3IGluIHZlcnNpb24gMy4xOiBUaGUgKnNraXAqIGFyZ3VtZW50LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAqbm9zaWdpbnQqIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgYSBTSUdJTlRcbiAgIGhhbmRsZXIgd2FzIG5ldmVyIHNldCBieSBQZGIuXG5cbiAgIHJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuICAgc2V0X3RyYWNlKClcblxuICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS5cblxuXG5EZWJ1Z2dlciBDb21tYW5kc1xuPT09PT09PT09PT09PT09PT1cblxuVGhlIGNvbW1hbmRzIHJlY29nbml6ZWQgYnkgdGhlIGRlYnVnZ2VyIGFyZSBsaXN0ZWQgYmVsb3cuICBNb3N0XG5jb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gb25lIG9yIHR3byBsZXR0ZXJzIGFzIGluZGljYXRlZDsgZS5nLlxuYGBoKGVscClgYCBtZWFucyB0aGF0IGVpdGhlciBgYGhgYCBvciBgYGhlbHBgYCBjYW4gYmUgdXNlZCB0byBlbnRlclxudGhlIGhlbHAgY29tbWFuZCAoYnV0IG5vdCBgYGhlYGAgb3IgYGBoZWxgYCwgbm9yIGBgSGBgIG9yIGBgSGVscGBgIG9yXG5gYEhFTFBgYCkuICBBcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZVxuKHNwYWNlcyBvciB0YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzXG4oYGBbXWBgKSBpbiB0aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbihgYHxgYCkuXG5cbkVudGVyaW5nIGEgYmxhbmsgbGluZSByZXBlYXRzIHRoZSBsYXN0IGNvbW1hbmQgZW50ZXJlZC4gIEV4Y2VwdGlvbjogaWZcbnRoZSBsYXN0IGNvbW1hbmQgd2FzIGEgYGBsaXN0YGAgY29tbWFuZCwgdGhlIG5leHQgMTEgbGluZXMgYXJlIGxpc3RlZC5cblxuQ29tbWFuZHMgdGhhdCB0aGUgZGVidWdnZXIgZG9lc25cJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvblxuc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb25cbnBvaW50IChgYCFgYCkuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5XG5gYDs7YGAuICAoQSBzaW5nbGUgYGA7YGAgaXMgbm90IHVzZWQgYXMgaXQgaXMgdGhlIHNlcGFyYXRvciBmb3Jcbm11bHRpcGxlIGNvbW1hbmRzIGluIGEgbGluZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgUHl0aG9uIHBhcnNlci4pICBOb1xuaW50ZWxsaWdlbmNlIGlzIGFwcGxpZWQgdG8gc2VwYXJhdGluZyB0aGUgY29tbWFuZHM7IHRoZSBpbnB1dCBpcyBzcGxpdFxuYXQgdGhlIGZpcnN0IGBgOztgYCBwYWlyLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBxdW90ZWRcbnN0cmluZy5cblxuSWYgYSBmaWxlIGBgLnBkYnJjYGAgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWZcbmJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kXG5hbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGxvY2FsIGZpbGUuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IGBgLnBkYnJjYGAgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyBgYGNvbnRpbnVlYGAgb3IgYGBuZXh0YGAuICBQcmV2aW91c2x5LFxudGhlc2UgY29tbWFuZHMgaGFkIG5vIGVmZmVjdC5cblxuaChlbHApIFtjb21tYW5kXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICBgYGhlbHAgcGRiYGBcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlIGBgcGRiYGBcbiAgIG1vZHVsZSkuICBTaW5jZSB0aGUgKmNvbW1hbmQqIGFyZ3VtZW50IG11c3QgYmUgYW4gaWRlbnRpZmllcixcbiAgIGBgaGVscCBleGVjYGAgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSBgYCFgYCBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uIGBgc3lzLnBhdGhgYC4gIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYVxuICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci5cblxuICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLlxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LFxuICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudFxuICAgaWdub3JlIGNvdW50LCBhbmQgdGhlIGFzc29jaWF0ZWQgY29uZGl0aW9uIGlmIGFueS5cblxudGJyZWFrIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzXG4gICBmaXJzdCBoaXQuIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciBgYGJyZWFrYGAuXG5cbmNsKGVhcikgW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2VcbiAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXRcbiAgIHJlbWFpbnMgaW4gdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuXG5cbmVuYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuXG5pZ25vcmUgYnBudW1iZXIgW2NvdW50XVxuXG4gICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXNcbiAgIG9taXR0ZWQsIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmVcbiAgIHdoZW4gdGhlIGlnbm9yZSBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzXG4gICBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG5vdCBkaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5jb25kaXRpb24gYnBudW1iZXIgW2NvbmRpdGlvbl1cblxuICAgU2V0IGEgbmV3ICpjb25kaXRpb24qIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgKmNvbmRpdGlvbipcbiAgIGlzIGFic2VudCwgYW55IGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLlxuXG5jb21tYW5kcyBbYnBudW1iZXJdXG5cbiAgIFNwZWNpZnkgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciBicmVha3BvaW50IG51bWJlciAqYnBudW1iZXIqLiAgVGhlXG4gICBjb21tYW5kcyB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmVcbiAgIGNvbnRhaW5pbmcganVzdCBgYGVuZGBgIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggYGBlbmRgYDsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBgYG5leHRgYCBhbmRcbiAgIGBgc3RlcGBgIGlzIHRoYXQgYGBzdGVwYGAgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZVxuICAgYGBuZXh0YGAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5XG4gICBzdG9wcGluZyBhdCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBgYGZvcmBgIGxvb3Agb3Igb3V0XG4gICBvZiBhIGBgZmluYWxseWBgIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCBgYC5gYCBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS5cbiAgIFdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuICAgVGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgY3VycmVudCBmcmFtZSBpcyBpbmRpY2F0ZWQgYnkgYGAtPmBgLiAgSWZcbiAgIGFuIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IGBgPj5gYCwgaWYgaXRcbiAgIGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSBgYD4+YGAgbWFya2VyLlxuXG5sbCB8IGxvbmdsaXN0XG5cbiAgIExpc3QgYWxsIHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBvciBmcmFtZS5cbiAgIEludGVyZXN0aW5nIGxpbmVzIGFyZSBtYXJrZWQgYXMgZm9yIGBgbGlzdGBgLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucCBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxuICAgTm90ZTogYGBwcmludCgpYGAgY2FuIGFsc28gYmUgdXNlZCwgYnV0IGlzIG5vdCBhIGRlYnVnZ2VyIGNvbW1hbmQgLS0tXG4gICAgIHRoaXMgZXhlY3V0ZXMgdGhlIFB5dGhvbiBgYHByaW50KClgYCBmdW5jdGlvbi5cblxucHAgZXhwcmVzc2lvblxuXG4gICBMaWtlIHRoZSBgYHBgYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzXG4gICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgYGBwcHJpbnRgYCBtb2R1bGUuXG5cbndoYXRpcyBleHByZXNzaW9uXG5cbiAgIFByaW50IHRoZSB0eXBlIG9mIHRoZSAqZXhwcmVzc2lvbiouXG5cbnNvdXJjZSBleHByZXNzaW9uXG5cbiAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lXG4gICBleGVjdXRpb24gc3RvcHMgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnRcbiAgIGZyYW1lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnVuZGlzcGxheSBbZXhwcmVzc2lvbl1cblxuICAgRG8gbm90IGRpc3BsYXkgdGhlIGV4cHJlc3Npb24gYW55IG1vcmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUuXG4gICBXaXRob3V0IGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuaW50ZXJhY3RcblxuICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciAodXNpbmcgdGhlIGBgY29kZWBgIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5IGBgJTFgYCwgYGAlMmBgLCBhbmQgc28gb24sIHdoaWxlIGBgJSpgYCBpcyByZXBsYWNlZCBieVxuICAgYWxsIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlIGBgLnBkYnJjYGAgZmlsZSk6XG5cbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IilcbiAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmXG4gICAgICBhbGlhcyBwcyBwaSBzZWxmXG5cbnVuYWxpYXMgbmFtZVxuXG4gICBEZWxldGUgdGhlIHNwZWNpZmllZCBhbGlhcy5cblxuISBzdGF0ZW1lbnRcblxuICAgRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSAqc3RhdGVtZW50KiBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudFxuICAgc3RhY2sgZnJhbWUuIFRoZSBleGNsYW1hdGlvbiBwb2ludCBjYW4gYmUgb21pdHRlZCB1bmxlc3MgdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBzdGF0ZW1lbnQgcmVzZW1ibGVzIGEgZGVidWdnZXIgY29tbWFuZC4gIFRvIHNldCBhXG4gICBnbG9iYWwgdmFyaWFibGUsIHlvdSBjYW4gcHJlZml4IHRoZSBhc3NpZ25tZW50IGNvbW1hbmQgd2l0aCBhXG4gICBgYGdsb2JhbGBgIHN0YXRlbWVudCBvbiB0aGUgc2FtZSBsaW5lLCBlLmcuOlxuXG4gICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbXCctbFwnXVxuICAgICAgKFBkYilcblxucnVuIFthcmdzIC4uLl1cbnJlc3RhcnQgW2FyZ3MgLi4uXVxuXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLFxuICAgaXQgaXMgc3BsaXQgd2l0aCBgYHNobGV4YGAgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICBgYHN5cy5hcmd2YGAuIEhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zXG4gICBhcmUgcHJlc2VydmVkLiBgYHJlc3RhcnRgYCBpcyBhbiBhbGlhcyBmb3IgYGBydW5gYC5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlIGlzXG4gICAgZGV0ZXJtaW5lZCBieSB0aGUgYGBfX25hbWVfX2BgIGluIHRoZSBmcmFtZSBnbG9iYWxzLlxuJywKICAnZGVsJzogJ1xuVGhlIGBgZGVsYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgZGVsX3N0bXQgOjo9ICJkZWwiIHRhcmdldF9saXN0XG5cbkRlbGV0aW9uIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgYXNzaWdubWVudCBpc1xuZGVmaW5lZC4gUmF0aGVyIHRoYW4gc3BlbGxpbmcgaXQgb3V0IGluIGZ1bGwgZGV0YWlscywgaGVyZSBhcmUgc29tZVxuaGludHMuXG5cbkRlbGV0aW9uIG9mIGEgdGFyZ2V0IGxpc3QgcmVjdXJzaXZlbHkgZGVsZXRlcyBlYWNoIHRhcmdldCwgZnJvbSBsZWZ0XG50byByaWdodC5cblxuRGVsZXRpb24gb2YgYSBuYW1lIHJlbW92ZXMgdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGZyb20gdGhlIGxvY2FsIG9yXG5nbG9iYWwgbmFtZXNwYWNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmFtZSBvY2N1cnMgaW4gYSBgYGdsb2JhbGBgXG5zdGF0ZW1lbnQgaW4gdGhlIHNhbWUgY29kZSBibG9jay4gIElmIHRoZSBuYW1lIGlzIHVuYm91bmQsIGFcbmBgTmFtZUVycm9yYGAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLlxuXG5EZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkXG50byB0aGUgcHJpbWFyeSBvYmplY3QgaW52b2x2ZWQ7IGRlbGV0aW9uIG9mIGEgc2xpY2luZyBpcyBpbiBnZW5lcmFsXG5lcXVpdmFsZW50IHRvIGFzc2lnbm1lbnQgb2YgYW4gZW1wdHkgc2xpY2Ugb2YgdGhlIHJpZ2h0IHR5cGUgKGJ1dCBldmVuXG50aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIHNsaWNlZCBvYmplY3QpLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWVcbmZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkXG5ibG9jay5cbicsCiAgJ2RpY3QnOiAnXG5EaWN0aW9uYXJ5IGRpc3BsYXlzXG4qKioqKioqKioqKioqKioqKioqXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IGlzIGEgcG9zc2libHkgZW1wdHkgc2VyaWVzIG9mIGtleS9kYXR1bSBwYWlyc1xuZW5jbG9zZWQgaW4gY3VybHkgYnJhY2VzOlxuXG4gICBkaWN0X2Rpc3BsYXkgICAgICAgOjo9ICJ7IiBba2V5X2RhdHVtX2xpc3QgfCBkaWN0X2NvbXByZWhlbnNpb25dICJ9IlxuICAga2V5X2RhdHVtX2xpc3QgICAgIDo6PSBrZXlfZGF0dW0gKCIsIiBrZXlfZGF0dW0pKiBbIiwiXVxuICAga2V5X2RhdHVtICAgICAgICAgIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uXG4gICBkaWN0X2NvbXByZWhlbnNpb24gOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb24gY29tcF9mb3JcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgeWllbGRzIGEgbmV3IGRpY3Rpb25hcnkgb2JqZWN0LlxuXG5JZiBhIGNvbW1hLXNlcGFyYXRlZCBzZXF1ZW5jZSBvZiBrZXkvZGF0dW0gcGFpcnMgaXMgZ2l2ZW4sIHRoZXkgYXJlXG5ldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHRvIGRlZmluZSB0aGUgZW50cmllcyBvZiB0aGUgZGljdGlvbmFyeTpcbmVhY2gga2V5IG9iamVjdCBpcyB1c2VkIGFzIGEga2V5IGludG8gdGhlIGRpY3Rpb25hcnkgdG8gc3RvcmUgdGhlXG5jb3JyZXNwb25kaW5nIGRhdHVtLiAgVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gc3BlY2lmeSB0aGUgc2FtZSBrZXlcbm11bHRpcGxlIHRpbWVzIGluIHRoZSBrZXkvZGF0dW0gbGlzdCwgYW5kIHRoZSBmaW5hbCBkaWN0aW9uYXJ5XCdzIHZhbHVlXG5mb3IgdGhhdCBrZXkgd2lsbCBiZSB0aGUgbGFzdCBvbmUgZ2l2ZW4uXG5cbkEgZGljdCBjb21wcmVoZW5zaW9uLCBpbiBjb250cmFzdCB0byBsaXN0IGFuZCBzZXQgY29tcHJlaGVuc2lvbnMsXG5uZWVkcyB0d28gZXhwcmVzc2lvbnMgc2VwYXJhdGVkIHdpdGggYSBjb2xvbiBmb2xsb3dlZCBieSB0aGUgdXN1YWxcbiJmb3IiIGFuZCAiaWYiIGNsYXVzZXMuIFdoZW4gdGhlIGNvbXByZWhlbnNpb24gaXMgcnVuLCB0aGUgcmVzdWx0aW5nXG5rZXkgYW5kIHZhbHVlIGVsZW1lbnRzIGFyZSBpbnNlcnRlZCBpbiB0aGUgbmV3IGRpY3Rpb25hcnkgaW4gdGhlIG9yZGVyXG50aGV5IGFyZSBwcm9kdWNlZC5cblxuUmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0aGUga2V5IHZhbHVlcyBhcmUgbGlzdGVkIGVhcmxpZXIgaW5cbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSouICAoVG8gc3VtbWFyaXplLCB0aGUga2V5IHR5cGVcbnNob3VsZCBiZSAqaGFzaGFibGUqLCB3aGljaCBleGNsdWRlcyBhbGwgbXV0YWJsZSBvYmplY3RzLikgIENsYXNoZXNcbmJldHdlZW4gZHVwbGljYXRlIGtleXMgYXJlIG5vdCBkZXRlY3RlZDsgdGhlIGxhc3QgZGF0dW0gKHRleHR1YWxseVxucmlnaHRtb3N0IGluIHRoZSBkaXNwbGF5KSBzdG9yZWQgZm9yIGEgZ2l2ZW4ga2V5IHZhbHVlIHByZXZhaWxzLlxuJywKICAnZHluYW1pYy1mZWF0dXJlcyc6ICdcbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuVGhlIGBgZXZhbCgpYGAgYW5kIGBgZXhlYygpYGAgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgYGBleGVjKClgYCBhbmQgYGBldmFsKClgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuJywKQEAgLTM0LDggKzM0LDggQEAKICAnZXhwcmxpc3RzJzogJ1xuRXhwcmVzc2lvbiBsaXN0c1xuKioqKioqKioqKioqKioqKlxuXG4gICBleHByZXNzaW9uX2xpc3QgOjo9IGV4cHJlc3Npb24gKCAiLCIgZXhwcmVzc2lvbiApKiBbIiwiXVxuXG5BbiBleHByZXNzaW9uIGxpc3QgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGVcbmxlbmd0aCBvZiB0aGUgdHVwbGUgaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZVxuZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiBgYCgpYGAuKVxuJywKICAnZmxvYXRpbmcnOiAnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCBgYDA3N2UwMTBgYCBpcyBsZWdhbCwgYW5kIGRlbm90ZXMgdGhlIHNhbWVcbm51bWJlciBhcyBgYDc3ZTEwYGAuIFRoZSBhbGxvd2VkIHJhbmdlIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlzXG5pbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIFNvbWUgZXhhbXBsZXMgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHM6XG5cbiAgIDMuMTQgICAgMTAuICAgIC4wMDEgICAgMWUxMDAgICAgMy4xNGUtMTAgICAgMGUwXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSBgYC0xYGBcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yIGBgLWBgIGFuZCB0aGVcbmxpdGVyYWwgYGAxYGAuXG4nLAogICdmb3InOiAnXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhIGBgU3RvcEl0ZXJhdGlvbmBgXG5leGNlcHRpb24pLCB0aGUgc3VpdGUgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuY29udGludWVzIHdpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgYGBlbHNlYGAgY2xhdXNlIGlmIHRoZXJlIHdhc1xubm8gbmV4dCBpdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvclxuaSA6PSBhIHRvIGIgZG9gYDsgZS5nLiwgYGBsaXN0KHJhbmdlKDMpKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSxcbjJdYGAuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGxvb3BcbiAgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKLSAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2QgYW5kIHRoZSBgYEZvcm1hdHRlcmBgIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiBgYEZvcm1hdHRlcmBgLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbmBge31gYC4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuYGB7e2BgIGFuZCBgYH19YGAuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50IGBgXCchXCdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2hcbmlzIHByZWNlZGVkIGJ5IGEgY29sb24gYGBcJzpcJ2BgLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdFxuZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzIGBgXCcxMFwnYGAgb3JcbmBgXCc6LV1cJ2BgKSB3aXRoaW4gYSBmb3JtYXQgc3RyaW5nLiBUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnlcbmFueSBudW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZVxuZm9ybSBgYFwnLm5hbWVcJ2BgIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyBgYGdldGF0dHIoKWBgLFxud2hpbGUgYW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYFwnW2luZGV4XVwnYGAgZG9lcyBhbiBpbmRleCBsb29rdXBcbnVzaW5nIGBgX19nZXRpdGVtX18oKWBgLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gYGBcJ3t9IHt9XCdgYCBpcyBlcXVpdmFsZW50IHRvIGBgXCd7MH0gezF9XCdgYC5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlXG5gYF9fZm9ybWF0X18oKWBgIG1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlc1xuaXQgaXMgZGVzaXJhYmxlIHRvIGZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsXG5vdmVycmlkaW5nIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWVcbnRvIGEgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgX19mb3JtYXRfXygpYGAsIHRoZSBub3JtYWwgZm9ybWF0dGluZ1xubG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGBgXCchc1wnYGAgd2hpY2ggY2FsbHNcbmBgc3RyKClgYCBvbiB0aGUgdmFsdWUsIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYCBhbmQgYGBcJyFhXCdgYFxud2hpY2ggY2FsbHMgYGBhc2NpaSgpYGAuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIChgYCIiYGApIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZS4gQSBub24tXG5lbXB0eSBmb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YW55IGNoYXJhY3Rlcj5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5JZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VlZGVkIGJ5IGEgKmZpbGwqXG5jaGFyYWN0ZXIgdGhhdCBjYW4gYmUgYW55IGNoYXJhY3RlciBhbmQgZGVmYXVsdHMgdG8gYSBzcGFjZSBpZlxub21pdHRlZC4gTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGB7YGAgYW5kIGBgfWBgIGFzICpmaWxsKlxuY2hhciB3aGlsZSB1c2luZyB0aGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Q7IHRoaXMgbGltaXRhdGlvbiBob3dldmVyXG5kb2VzblwndCBhZmZlY3QgdGhlIGBgZm9ybWF0KClgYCBmdW5jdGlvbi5cblxuVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnPFwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBvYmplY3RzKS4gICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc+XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBudW1iZXJzKS4gICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz1cJ2BgICAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICAgIHxcbiAgIHwgICAgICAgICAgIHwgYnV0IGJlZm9yZSB0aGUgZGlnaXRzLiAgVGhpcyBpcyB1c2VkIGZvciBwcmludGluZyBmaWVsZHMgICB8XG4gICB8ICAgICAgICAgICB8IGluIHRoZSBmb3JtIFwnKzAwMDAwMDEyMFwnLiBUaGlzIGFsaWdubWVudCBvcHRpb24gaXMgb25seSAgICB8XG4gICB8ICAgICAgICAgICB8IHZhbGlkIGZvciBudW1lcmljIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ15cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlIHRoYXQgdW5sZXNzIGEgbWluaW11bSBmaWVsZCB3aWR0aCBpcyBkZWZpbmVkLCB0aGUgZmllbGQgd2lkdGhcbndpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRhdGEgdG8gZmlsbCBpdCwgc28gdGhhdCB0aGVcbmFsaWdubWVudCBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gdGhpcyBjYXNlLlxuXG5UaGUgKnNpZ24qIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBudW1iZXIgdHlwZXMsIGFuZCBjYW4gYmUgb25lIG9mXG50aGUgZm9sbG93aW5nOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCcrXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIGZvciBib3RoIHBvc2l0aXZlIGFzICB8XG4gICB8ICAgICAgICAgICB8IHdlbGwgYXMgbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJy1cJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbmVnYXRpdmUgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycyAodGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvcikuICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycywgYW5kIGEgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYGBcJyNcJ2BgIG9wdGlvbiBjYXVzZXMgdGhlICJhbHRlcm5hdGUgZm9ybSIgdG8gYmUgdXNlZCBmb3IgdGhlXG5jb252ZXJzaW9uLiAgVGhlIGFsdGVybmF0ZSBmb3JtIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIGRpZmZlcmVudFxudHlwZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyLCBmbG9hdCwgY29tcGxleCBhbmRcbkRlY2ltYWwgdHlwZXMuIEZvciBpbnRlZ2Vycywgd2hlbiBiaW5hcnksIG9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXRcbmlzIHVzZWQsIHRoaXMgb3B0aW9uIGFkZHMgdGhlIHByZWZpeCByZXNwZWN0aXZlIGBgXCcwYlwnYGAsIGBgXCcwb1wnYGAsIG9yXG5gYFwnMHhcJ2BgIHRvIHRoZSBvdXRwdXQgdmFsdWUuIEZvciBmbG9hdHMsIGNvbXBsZXggYW5kIERlY2ltYWwgdGhlXG5hbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiB0byBhbHdheXMgY29udGFpbiBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LiBOb3JtYWxseSwgYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgcmVzdWx0IG9mIHRoZXNlIGNvbnZlcnNpb25zXG5vbmx5IGlmIGEgZGlnaXQgZm9sbG93cyBpdC4gSW4gYWRkaXRpb24sIGZvciBgYFwnZ1wnYGAgYW5kIGBgXCdHXCdgYFxuY29udmVyc2lvbnMsIHRyYWlsaW5nIHplcm9zIGFyZSBub3QgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHQuXG5cblRoZSBgYFwnLFwnYGAgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kc1xuc2VwYXJhdG9yLiBGb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlIGBgXCduXCdgYCBpbnRlZ2VyXG5wcmVzZW50YXRpb24gdHlwZSBpbnN0ZWFkLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBBZGRlZCB0aGUgYGBcJyxcJ2BgIG9wdGlvbiAoc2VlIGFsc28gKipQRVBcbjM3OCoqKS5cblxuKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdFxuc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuXG5cblByZWNlZGluZyB0aGUgKndpZHRoKiBmaWVsZCBieSBhIHplcm8gKGBgXCcwXCdgYCkgY2hhcmFjdGVyIGVuYWJsZXNcbnNpZ24tYXdhcmUgemVyby1wYWRkaW5nIGZvciBudW1lcmljIHR5cGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGFcbipmaWxsKiBjaGFyYWN0ZXIgb2YgYGBcJzBcJ2BgIHdpdGggYW4gKmFsaWdubWVudCogdHlwZSBvZiBgYFwnPVwnYGAuXG5cblRoZSAqcHJlY2lzaW9uKiBpcyBhIGRlY2ltYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IG1hbnkgZGlnaXRzIHNob3VsZFxuYmUgZGlzcGxheWVkIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlXG5mb3JtYXR0ZWQgd2l0aCBgYFwnZlwnYGAgYW5kIGBgXCdGXCdgYCwgb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbFxucG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9ybWF0dGVkIHdpdGggYGBcJ2dcJ2BgIG9yIGBgXCdHXCdgYC5cbkZvciBub24tbnVtYmVyIHR5cGVzIHRoZSBmaWVsZCBpbmRpY2F0ZXMgdGhlIG1heGltdW0gZmllbGQgc2l6ZSAtIGluXG5vdGhlciB3b3JkcywgaG93IG1hbnkgY2hhcmFjdGVycyB3aWxsIGJlIHVzZWQgZnJvbSB0aGUgZmllbGQgY29udGVudC5cblRoZSAqcHJlY2lzaW9uKiBpcyBub3QgYWxsb3dlZCBmb3IgaW50ZWdlciB2YWx1ZXMuXG5cbkZpbmFsbHksIHRoZSAqdHlwZSogZGV0ZXJtaW5lcyBob3cgdGhlIGRhdGEgc2hvdWxkIGJlIHByZXNlbnRlZC5cblxuVGhlIGF2YWlsYWJsZSBzdHJpbmcgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnc1wnYGAgICB8IFN0cmluZyBmb3JtYXQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdHlwZSBmb3Igc3RyaW5ncyBhbmQgICAgfFxuICAgfCAgICAgICAgICAgfCBtYXkgYmUgb21pdHRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdzXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYXZhaWxhYmxlIGludGVnZXIgcHJlc2VudGF0aW9uIHR5cGVzIGFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnYlwnYGAgICB8IEJpbmFyeSBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDIuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2NcJ2BgICAgfCBDaGFyYWN0ZXIuIENvbnZlcnRzIHRoZSBpbnRlZ2VyIHRvIHRoZSBjb3JyZXNwb25kaW5nICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgdW5pY29kZSBjaGFyYWN0ZXIgYmVmb3JlIHByaW50aW5nLiAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZFwnYGAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ29cJ2BgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCd4XCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ1hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgdXBwZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZFwnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFRoZSBzYW1lIGFzIGBgXCdkXCdgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5JbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgcHJlc2VudGF0aW9uIHR5cGVzLCBpbnRlZ2VycyBjYW4gYmUgZm9ybWF0dGVkXG53aXRoIHRoZSBmbG9hdGluZyBwb2ludCBwcmVzZW50YXRpb24gdHlwZXMgbGlzdGVkIGJlbG93IChleGNlcHRcbmBgXCduXCdgYCBhbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sIGBgZmxvYXQoKWBgIGlzIHVzZWQgdG8gY29udmVydCB0aGVcbmludGVnZXIgdG8gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmVmb3JlIGZvcm1hdHRpbmcuXG5cblRoZSBhdmFpbGFibGUgcHJlc2VudGF0aW9uIHR5cGVzIGZvciBmbG9hdGluZyBwb2ludCBhbmQgZGVjaW1hbCB2YWx1ZXNcbmFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnZVwnYGAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBQcmludHMgdGhlIG51bWJlciBpbiBzY2llbnRpZmljICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBub3RhdGlvbiB1c2luZyB0aGUgbGV0dGVyIFwnZVwnIHRvIGluZGljYXRlIHRoZSBleHBvbmVudC4gICAgfFxuICAgfCAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgYGA2YGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdFXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgYGBcJ2VcJ2BgIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBcJ0VcJyBhcyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdmXCdgYCAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gU2FtZSBhcyBgYFwnZlwnYGAsIGJ1dCBjb252ZXJ0cyBgYG5hbmBgIHRvICAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYE5BTmBgIGFuZCBgYGluZmBgIHRvIGBgSU5GYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdnXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gYGBwID49IDFgYCwgdGhpcyAgICB8XG4gICB8ICAgICAgICAgICB8IHJvdW5kcyB0aGUgbnVtYmVyIHRvIGBgcGBgIHNpZ25pZmljYW50IGRpZ2l0cyBhbmQgdGhlbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXRzIHRoZSByZXN1bHQgaW4gZWl0aGVyIGZpeGVkLXBvaW50IGZvcm1hdCBvciBpbiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2NpZW50aWZpYyBub3RhdGlvbiwgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICBUaGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2UgcnVsZXMgYXJlIGFzIGZvbGxvd3M6IHN1cHBvc2UgdGhhdCB0aGUgcmVzdWx0ICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgIHdvdWxkIGhhdmUgZXhwb25lbnQgYGBleHBgYC4gIFRoZW4gaWYgYGAtNCA8PSBleHAgIHxcbiAgIHwgICAgICAgICAgIHwgPCBwYGAsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgXCdmXCdgYCBhbmQgcHJlY2lzaW9uIGBgcC0xLWV4cGBgLiBPdGhlcndpc2UsIHRoZSBudW1iZXIgICB8XG4gICB8ICAgICAgICAgICB8IGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAuIEluIGJvdGggY2FzZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyBhcmUgICAgfFxuICAgfCAgICAgICAgICAgfCByZW1vdmVkIGZyb20gdGhlIHNpZ25pZmljYW5kLCBhbmQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYWxzbyByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyAgICB8XG4gICB8ICAgICAgICAgICB8IGl0LiAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgfFxuICAgfCAgICAgICAgICAgfCB6ZXJvLCBhbmQgbmFucywgYXJlIGZvcm1hdHRlZCBhcyBgYGluZmBgLCBgYC1pbmZgYCwgYGAwYGAsIHxcbiAgIHwgICAgICAgICAgIHwgYGAtMGBgIGFuZCBgYG5hbmBgIHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbi4gIEEgcHJlY2lzaW9uIG9mIGBgMGBgIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCAgfFxuICAgfCAgICAgICAgICAgfCB0byBhIHByZWNpc2lvbiBvZiBgYDFgYC4gIFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdHXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgYGBcJ2dcJ2BgIGV4Y2VwdCBzd2l0Y2hlcyB0byBgYFwnRVwnYGAgfFxuICAgfCAgICAgICAgICAgfCBpZiB0aGUgbnVtYmVyIGdldHMgdG9vIGxhcmdlLiBUaGUgcmVwcmVzZW50YXRpb25zIG9mICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgaW5maW5pdHkgYW5kIE5hTiBhcmUgdXBwZXJjYXNlZCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZ1wnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCclXCdgYCAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICB8ICAgICAgICAgICB8IGZpeGVkIChgYFwnZlwnYGApIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBTaW1pbGFyIHRvIGBgXCdnXCdgYCwgZXhjZXB0IHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0IHBhc3QgICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgZGVjaW1hbCBwb2ludCBhbmQgYSBkZWZhdWx0IHByZWNpc2lvbiBvZiAxMi4gVGhpcyBpcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW50ZW5kZWQgdG8gbWF0Y2ggYGBzdHIoKWBgLCBleGNlcHQgeW91IGNhbiBhZGQgdGhlIG90aGVyICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdCBtb2RpZmllcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGRcbmBgJWBgLWZvcm1hdHRpbmcsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZFxuaW5zdGVhZCBvZiBgYCVgYC4gRm9yIGV4YW1wbGUsIGBgXCclMDMuMmZcJ2BgIGNhbiBiZSB0cmFuc2xhdGVkIHRvXG5gYFwnezowMy4yZn1cJ2BgLlxuXG5UaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93blxuaW4gdGhlIGZvbGxvdyBleGFtcGxlcy5cblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBwb3NpdGlvbjpcblxuICAgPj4+IFwnezB9LCB7MX0sIHsyfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3t9LCB7fSwge31cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJykgICMgMy4xKyBvbmx5XG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludDpcbiAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOlxuICAgLi4uICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5XG4gICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnUG9pbnQoe3NlbGYueH0sIHtzZWxmLnl9KVwnLmZvcm1hdChzZWxmPXNlbGYpXG4gICAuLi5cbiAgID4+PiBzdHIoUG9pbnQoNCwgMikpXG4gICBcJ1BvaW50KDQsIDIpXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGl0ZW1zOlxuXG4gICA+Pj4gY29vcmQgPSAoMywgNSlcbiAgID4+PiBcJ1g6IHswWzBdfTsgIFk6IHswWzFdfVwnLmZvcm1hdChjb29yZClcbiAgIFwnWDogMzsgIFk6IDVcJ1xuXG5SZXBsYWNpbmcgYGAlc2BgIGFuZCBgYCVyYGA6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgYGAlK2ZgYCwgYGAlLWZgYCwgYW5kIGBgJSBmYGAgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgYGAleGBgIGFuZCBgYCVvYGAgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudFxuYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cblVzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6XG5cbiAgID4+PiBcJ3s6LH1cJy5mb3JtYXQoMTIzNDU2Nzg5MClcbiAgIFwnMSwyMzQsNTY3LDg5MFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTlcbiAgID4+PiB0b3RhbCA9IDIyXG4gICA+Pj4gXCdDb3JyZWN0IGFuc3dlcnM6IHs6LjIlfVwnLmZvcm1hdChwb2ludHMvdG90YWwpXG4gICBcJ0NvcnJlY3QgYW5zd2VyczogODYuMzYlXCdcblxuVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOlxuXG4gICA+Pj4gaW1wb3J0IGRhdGV0aW1lXG4gICA+Pj4gZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDcsIDQsIDEyLCAxNSwgNTgpXG4gICA+Pj4gXCd7OiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7ZmlsbH17YWxpZ259MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7OjAyWH17OjAyWH17OjAyWH17OjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6ICNkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0VcbiAgIC4uLiAgICAgZm9yIGJhc2UgaW4gXCdkWG9iXCc6XG4gICAuLi4gICAgICAgICBwcmludChcJ3swOnt3aWR0aH17YmFzZX19XCcuZm9ybWF0KG51bSwgYmFzZT1iYXNlLCB3aWR0aD13aWR0aCksIGVuZD1cJyBcJylcbiAgIC4uLiAgICAgcHJpbnQoKVxuICAgLi4uXG4gICAgICAgNSAgICAgNSAgICAgNSAgIDEwMVxuICAgICAgIDYgICAgIDYgICAgIDYgICAxMTBcbiAgICAgICA3ICAgICA3ICAgICA3ICAgMTExXG4gICAgICAgOCAgICAgOCAgICAxMCAgMTAwMFxuICAgICAgIDkgICAgIDkgICAgMTEgIDEwMDFcbiAgICAgIDEwICAgICBBICAgIDEyICAxMDEwXG4gICAgICAxMSAgICAgQiAgICAxMyAgMTAxMVxuJywKLSAnZnVuY3Rpb24nOiAnXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogYGA9YGBcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICJgYCpgYCIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLVxudGhpcyBpcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgImBgKmBgIiBvciAiYGAqaWRlbnRpZmllcmBgIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiYGA6IGV4cHJlc3Npb25gYCJcbmZvbGxvd2luZyB0aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb25cbmV2ZW4gdGhvc2Ugb2YgdGhlIGZvcm0gYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGAuICBGdW5jdGlvbnNcbm1heSBoYXZlICJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gImBgLT4gZXhwcmVzc2lvbmBgIiBhZnRlciB0aGVcbnBhcmFtZXRlciBsaXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvblxuYW5kIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC5cbkFubm90YXRpb25zIG1heSBiZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpblxudGhlIHNvdXJjZSBjb2RlLiAgVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGVcbnNlbWFudGljcyBvZiBhIGZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXNcbnZhbHVlcyBvZiBhIGRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGVcbmBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiYGBkZWZgYCJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuICAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuJywKKyAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2QgYW5kIHRoZSBgYEZvcm1hdHRlcmBgIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiBgYEZvcm1hdHRlcmBgLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbmBge31gYC4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuYGB7e2BgIGFuZCBgYH19YGAuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50IGBgXCchXCdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2hcbmlzIHByZWNlZGVkIGJ5IGEgY29sb24gYGBcJzpcJ2BgLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdFxuZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyIGFcbm51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGEgcG9zaXRpb25hbFxuYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkIGtleXdvcmRcbmFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZSAwLCAxLCAyLFxuLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kIHRoZVxubnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5CZWNhdXNlICphcmdfbmFtZSogaXMgbm90IHF1b3RlLWRlbGltaXRlZCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvXG5zcGVjaWZ5IGFyYml0cmFyeSBkaWN0aW9uYXJ5IGtleXMgKGUuZy4sIHRoZSBzdHJpbmdzIGBgXCcxMFwnYGAgb3JcbmBgXCc6LV1cJ2BgKSB3aXRoaW4gYSBmb3JtYXQgc3RyaW5nLiBUaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnlcbmFueSBudW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlIGV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZVxuZm9ybSBgYFwnLm5hbWVcJ2BgIHNlbGVjdHMgdGhlIG5hbWVkIGF0dHJpYnV0ZSB1c2luZyBgYGdldGF0dHIoKWBgLFxud2hpbGUgYW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYFwnW2luZGV4XVwnYGAgZG9lcyBhbiBpbmRleCBsb29rdXBcbnVzaW5nIGBgX19nZXRpdGVtX18oKWBgLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gYGBcJ3t9IHt9XCdgYCBpcyBlcXVpdmFsZW50IHRvIGBgXCd7MH0gezF9XCdgYC5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlXG5gYF9fZm9ybWF0X18oKWBgIG1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlc1xuaXQgaXMgZGVzaXJhYmxlIHRvIGZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsXG5vdmVycmlkaW5nIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWVcbnRvIGEgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgX19mb3JtYXRfXygpYGAsIHRoZSBub3JtYWwgZm9ybWF0dGluZ1xubG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGBgXCchc1wnYGAgd2hpY2ggY2FsbHNcbmBgc3RyKClgYCBvbiB0aGUgdmFsdWUsIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYCBhbmQgYGBcJyFhXCdgYFxud2hpY2ggY2FsbHMgYGBhc2NpaSgpYGAuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIChgYCIiYGApIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZS4gQSBub24tXG5lbXB0eSBmb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YW55IGNoYXJhY3Rlcj5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5JZiBhIHZhbGlkICphbGlnbiogdmFsdWUgaXMgc3BlY2lmaWVkLCBpdCBjYW4gYmUgcHJlY2VkZWQgYnkgYSAqZmlsbCpcbmNoYXJhY3RlciB0aGF0IGNhbiBiZSBhbnkgY2hhcmFjdGVyIGFuZCBkZWZhdWx0cyB0byBhIHNwYWNlIGlmXG5vbWl0dGVkLiBOb3RlIHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBgYHtgYCBhbmQgYGB9YGAgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZDsgdGhpcyBsaW1pdGF0aW9uIGhvd2V2ZXJcbmRvZXNuXCd0IGFmZmVjdCB0aGUgYGBmb3JtYXQoKWBgIGZ1bmN0aW9uLlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3JcbmBgXCcweFwnYGAgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yIGBgXCdnXCdgYCBhbmQgYGBcJ0dcJ2BgXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuUHJlY2VkaW5nIHRoZSAqd2lkdGgqIGZpZWxkIGJ5IGEgemVybyAoYGBcJzBcJ2BgKSBjaGFyYWN0ZXIgZW5hYmxlc1xuc2lnbi1hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYVxuKmZpbGwqIGNoYXJhY3RlciBvZiBgYFwnMFwnYGAgd2l0aCBhbiAqYWxpZ25tZW50KiB0eXBlIG9mIGBgXCc9XCdgYC5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoIGBgXCdmXCdgYCBhbmQgYGBcJ0ZcJ2BgLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsXG5wb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCBgYFwnZ1wnYGAgb3IgYGBcJ0dcJ2BgLlxuRm9yIG5vbi1udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW5cbm90aGVyIHdvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LlxuVGhlICpwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdzXCdgYCAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ3NcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdiXCdgYCAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnY1wnYGAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdkXCdgYCAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnb1wnYGAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ3hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnWFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdkXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdFxuYGBcJ25cJ2BgIGFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgYGBmbG9hdCgpYGAgaXMgdXNlZCB0byBjb252ZXJ0IHRoZVxuaW50ZWdlciB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdlXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBgYDZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gU2FtZSBhcyBgYFwnZVwnYGAgZXhjZXB0IGl0IHVzZXMgYW4gdXBwZXIgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIFwnRVwnIGFzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyLiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gRGlzcGxheXMgdGhlIG51bWJlciBhcyBhIGZpeGVkLXBvaW50IG51bWJlci4gIHxcbiAgIHwgICAgICAgICAgIHwgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYCwgYnV0IGNvbnZlcnRzIGBgbmFuYGAgdG8gICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgTkFOYGAgYW5kIGBgaW5mYGAgdG8gYGBJTkZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiBgYHAgPj0gMWBgLCB0aGlzICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gYGBwYGAgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAgd291bGQgaGF2ZSBleHBvbmVudCBgYGV4cGBgLiAgVGhlbiBpZiBgYC00IDw9IGV4cCAgfFxuICAgfCAgICAgICAgICAgfCA8IHBgYCwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBcJ2ZcJ2BgIGFuZCBwcmVjaXNpb24gYGBwLTEtZXhwYGAuIE90aGVyd2lzZSwgdGhlIG51bWJlciAgIHxcbiAgIHwgICAgICAgICAgIHwgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYC4gSW4gYm90aCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSAgICB8XG4gICB8ICAgICAgICAgICB8IHJlbW92ZWQgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyAgICAgfFxuICAgfCAgICAgICAgICAgfCBhbHNvIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nICAgIHxcbiAgIHwgICAgICAgICAgIHwgaXQuICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB8XG4gICB8ICAgICAgICAgICB8IHplcm8sIGFuZCBuYW5zLCBhcmUgZm9ybWF0dGVkIGFzIGBgaW5mYGAsIGBgLWluZmBgLCBgYDBgYCwgfFxuICAgfCAgICAgICAgICAgfCBgYC0wYGAgYW5kIGBgbmFuYGAgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgYGAwYGAgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50ICB8XG4gICB8ICAgICAgICAgICB8IHRvIGEgcHJlY2lzaW9uIG9mIGBgMWBgLiAgVGhlIGRlZmF1bHQgcHJlY2lzaW9uIGlzIGBgNmBgLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyBgYFwnZ1wnYGAgZXhjZXB0IHN3aXRjaGVzIHRvIGBgXCdFXCdgYCB8XG4gICB8ICAgICAgICAgICB8IGlmIHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBpbmZpbml0eSBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdnXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJyVcJ2BgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKGBgXCdmXCdgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gYGBcJ2dcJ2BgLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzICAgfFxuICAgfCAgICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCBgYHN0cigpYGAsIGV4Y2VwdCB5b3UgY2FuIGFkZCB0aGUgb3RoZXIgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZFxuYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBge31gYCBhbmQgd2l0aCBgYDpgYCB1c2VkXG5pbnN0ZWFkIG9mIGBgJWBgLiBGb3IgZXhhbXBsZSwgYGBcJyUwMy4yZlwnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG9cbmBgXCd7OjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyBgYCVzYGAgYW5kIGBgJXJgYDpcblxuICAgPj4+ICJyZXByKCkgc2hvd3MgcXVvdGVzOiB7IXJ9OyBzdHIoKSBkb2VzblwndDogeyFzfSIuZm9ybWF0KFwndGVzdDFcJywgXCd0ZXN0MlwnKVxuICAgInJlcHIoKSBzaG93cyBxdW90ZXM6IFwndGVzdDFcJzsgc3RyKCkgZG9lc25cJ3Q6IHRlc3QyIlxuXG5BbGlnbmluZyB0aGUgdGV4dCBhbmQgc3BlY2lmeWluZyBhIHdpZHRoOlxuXG4gICA+Pj4gXCd7OjwzMH1cJy5mb3JtYXQoXCdsZWZ0IGFsaWduZWRcJylcbiAgIFwnbGVmdCBhbGlnbmVkICAgICAgICAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6PjMwfVwnLmZvcm1hdChcJ3JpZ2h0IGFsaWduZWRcJylcbiAgIFwnICAgICAgICAgICAgICAgICByaWdodCBhbGlnbmVkXCdcbiAgID4+PiBcJ3s6XjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpXG4gICBcJyAgICAgICAgICAgY2VudGVyZWQgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7OipeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJykgICMgdXNlIFwnKlwnIGFzIGEgZmlsbCBjaGFyXG4gICBcJyoqKioqKioqKioqY2VudGVyZWQqKioqKioqKioqKlwnXG5cblJlcGxhY2luZyBgYCUrZmBgLCBgYCUtZmBgLCBhbmQgYGAlIGZgYCBhbmQgc3BlY2lmeWluZyBhIHNpZ246XG5cbiAgID4+PiBcJ3s6K2Z9OyB7OitmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBpdCBhbHdheXNcbiAgIFwnKzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezogZn07IHs6IGZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGEgc3BhY2UgZm9yIHBvc2l0aXZlIG51bWJlcnNcbiAgIFwnIDMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuICAgPj4+IFwnezotZn07IHs6LWZ9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IG9ubHkgdGhlIG1pbnVzIC0tIHNhbWUgYXMgXCd7OmZ9OyB7OmZ9XCdcbiAgIFwnMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG5cblJlcGxhY2luZyBgYCV4YGAgYW5kIGBgJW9gYCBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50XG5iYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAorICdmdW5jdGlvbic6ICdcbkZ1bmN0aW9uIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG5gYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iYGAqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZ1xuYW55IGV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWZcbnRoZSBmb3JtICJgYCoqaWRlbnRpZmllcmBgIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiYGAqYGAiIG9yICJgYCppZGVudGlmaWVyYGAiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICJgYDogZXhwcmVzc2lvbmBgIlxuZm9sbG93aW5nIHRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvblxuZXZlbiB0aG9zZSBvZiB0aGUgZm9ybSBgYCppZGVudGlmaWVyYGAgb3IgYGAqKmlkZW50aWZpZXJgYC4gIEZ1bmN0aW9uc1xubWF5IGhhdmUgInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiYGAtPiBleHByZXNzaW9uYGAiIGFmdGVyIHRoZVxucGFyYW1ldGVyIGxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uXG5hbmQgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLlxuQW5ub3RhdGlvbnMgbWF5IGJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluXG50aGUgc291cmNlIGNvZGUuICBUaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZVxuc2VtYW50aWNzIG9mIGEgZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhc1xudmFsdWVzIG9mIGEgZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZVxuYGBfX2Fubm90YXRpb25zX19gYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICJgYGRlZmBgIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICJgYGRlZmBgIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG4gICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAogICdnbG9iYWwnOiAnXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0IGBgZ2xvYmFsYGAsIGFsdGhvdWdoIGZyZWUgdmFyaWFibGVzIG1heSByZWZlciB0b1xuZ2xvYmFscyB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGdsb2JhbC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZVxuY29kZSBibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgYGBnbG9iYWxgYCBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG11c3Qgbm90IGJlIGRlZmluZWQgYXMgZm9ybWFsXG5wYXJhbWV0ZXJzIG9yIGluIGEgYGBmb3JgYCBsb29wIGNvbnRyb2wgdGFyZ2V0LCBgYGNsYXNzYGAgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGBgaW1wb3J0YGAgc3RhdGVtZW50LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90XG5lbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2VcbnRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5XG5jaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSBgYGdsb2JhbGBgIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuXG5JdCBhcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgYGBnbG9iYWxgYFxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhIHN0cmluZ1xub3IgY29kZSBvYmplY3Qgc3VwcGxpZWQgdG8gdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5IGBgZ2xvYmFsYGAgc3RhdGVtZW50cyBpblxudGhlIGNvZGUgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlXG5gYGV2YWwoKWBgIGFuZCBgYGNvbXBpbGUoKWBgIGZ1bmN0aW9ucy5cbicsCiAgJ2lkLWNsYXNzZXMnOiAnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBidWlsdGluc2BgIG1vZHVsZS4gIFdoZW5cbiAgIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3RcbiAgIGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAogICdpZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzIGBgQWBgIHRocm91Z2ggYGBaYGAsIHRoZSB1bmRlcnNjb3JlIGBgX2BgIGFuZCwgZXhjZXB0IGZvciB0aGVcbmZpcnN0IGNoYXJhY3RlciwgdGhlIGRpZ2l0cyBgYDBgYCB0aHJvdWdoIGBgOWBgLlxuXG5QeXRob24gMy4wIGludHJvZHVjZXMgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZyb20gb3V0c2lkZSB0aGUgQVNDSUlcbnJhbmdlIChzZWUgKipQRVAgMzEzMSoqKS4gIEZvciB0aGVzZSBjaGFyYWN0ZXJzLCB0aGUgY2xhc3NpZmljYXRpb25cbnVzZXMgdGhlIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGFzIGluY2x1ZGVkIGluIHRoZVxuYGB1bmljb2RlZGF0YWBgIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgYnVpbHRpbnNgYCBtb2R1bGUuICBXaGVuXG4gICBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90XG4gICBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiBgYF9fKl9fYGAgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXNcbiAgIG5vdCBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZVxuICAgd2l0aG91dCB3YXJuaW5nLlxuXG5gYF9fKmBgXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKQEAgLTU2LDIyICs1NiwyMiBAQAogICdwb3dlcic6ICdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6IGBgLTEqKjJgYCByZXN1bHRzIGluIGBgLTFgYC5cblxuVGhlIHBvd2VyIG9wZXJhdG9yIGhhcyB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgdGhlIGJ1aWx0LWluIGBgcG93KClgYFxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuYGAxMCoqMmBgIHJldHVybnMgYGAxMDBgYCwgYnV0IGBgMTAqKi0yYGAgcmV0dXJucyBgYDAuMDFgYC5cblxuUmFpc2luZyBgYDAuMGBgIHRvIGEgbmVnYXRpdmUgcG93ZXIgcmVzdWx0cyBpbiBhXG5gYFplcm9EaXZpc2lvbkVycm9yYGAuIFJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyXG5yZXN1bHRzIGluIGEgYGBjb21wbGV4YGAgbnVtYmVyLiAoSW4gZWFybGllciB2ZXJzaW9ucyBpdCByYWlzZWQgYVxuYGBWYWx1ZUVycm9yYGAuKVxuJywKICAncmFpc2UnOiAnXG5UaGUgYGByYWlzZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgYGByYWlzZWBgIHJlLXJhaXNlcyB0aGUgbGFzdCBleGNlcHRpb25cbnRoYXQgd2FzIGFjdGl2ZSBpbiB0aGUgY3VycmVudCBzY29wZS4gIElmIG5vIGV4Y2VwdGlvbiBpcyBhY3RpdmUgaW5cbnRoZSBjdXJyZW50IHNjb3BlLCBhIGBgUnVudGltZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbmRpY2F0aW5nXG50aGF0IHRoaXMgaXMgYW4gZXJyb3IuXG5cbk90aGVyd2lzZSwgYGByYWlzZWBgIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG5gYEJhc2VFeGNlcHRpb25gYC4gSWYgaXQgaXMgYSBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aWxsIGJlXG5vYnRhaW5lZCB3aGVuIG5lZWRlZCBieSBpbnN0YW50aWF0aW5nIHRoZSBjbGFzcyB3aXRoIG5vIGFyZ3VtZW50cy5cblxuVGhlICp0eXBlKiBvZiB0aGUgZXhjZXB0aW9uIGlzIHRoZSBleGNlcHRpb24gaW5zdGFuY2VcJ3MgY2xhc3MsIHRoZVxuKnZhbHVlKiBpcyB0aGUgaW5zdGFuY2UgaXRzZWxmLlxuXG5BIHRyYWNlYmFjayBvYmplY3QgaXMgbm9ybWFsbHkgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IHdoZW4gYW4gZXhjZXB0aW9uXG5pcyByYWlzZWQgYW5kIGF0dGFjaGVkIHRvIGl0IGFzIHRoZSBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUsIHdoaWNoXG5pcyB3cml0YWJsZS4gWW91IGNhbiBjcmVhdGUgYW4gZXhjZXB0aW9uIGFuZCBzZXQgeW91ciBvd24gdHJhY2ViYWNrIGluXG5vbmUgc3RlcCB1c2luZyB0aGUgYGB3aXRoX3RyYWNlYmFjaygpYGAgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2hcbnJldHVybnMgdGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0c1xuYXJndW1lbnQpLCBsaWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlIGBgZnJvbWBgIGNsYXVzZSBpcyB1c2VkIGZvciBleGNlcHRpb24gY2hhaW5pbmc6IGlmIGdpdmVuLCB0aGVcbnNlY29uZCAqZXhwcmVzc2lvbiogbXVzdCBiZSBhbm90aGVyIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZSwgd2hpY2hcbndpbGwgdGhlbiBiZSBhdHRhY2hlZCB0byB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBhcyB0aGUgYGBfX2NhdXNlX19gYFxuYXR0cmlidXRlICh3aGljaCBpcyB3cml0YWJsZSkuICBJZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBpcyBub3RcbmhhbmRsZWQsIGJvdGggZXhjZXB0aW9ucyB3aWxsIGJlIHByaW50ZWQ6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOlxuICAgLi4uICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNvbWV0aGluZyBiYWQgaGFwcGVuZWQiKSBmcm9tIGV4Y1xuICAgLi4uXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDIsIGluIDxtb2R1bGU+XG4gICBaZXJvRGl2aXNpb25FcnJvcjogaW50IGRpdmlzaW9uIG9yIG1vZHVsbyBieSB6ZXJvXG5cbiAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BIHNpbWlsYXIgbWVjaGFuaXNtIHdvcmtzIGltcGxpY2l0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGVcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzIHRoZW4gYXR0YWNoZWQgYXMgdGhlXG5uZXcgZXhjZXB0aW9uXCdzIGBgX19jb250ZXh0X19gYCBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCiAgJ3JldHVybic6ICdcblRoZSBgYHJldHVybmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJldHVybl9zdG10IDo6PSAicmV0dXJuIiBbZXhwcmVzc2lvbl9saXN0XVxuXG5gYHJldHVybmBgIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb25cbmRlZmluaXRpb24sIG5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSBgYE5vbmVgYCBpc1xuc3Vic3RpdHV0ZWQuXG5cbmBgcmV0dXJuYGAgbGVhdmVzIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwgd2l0aCB0aGUgZXhwcmVzc2lvbiBsaXN0XG4ob3IgYGBOb25lYGApIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiBgYHJldHVybmBgIHBhc3NlcyBjb250cm9sIG91dCBvZiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggYVxuYGBmaW5hbGx5YGAgY2xhdXNlLCB0aGF0IGBgZmluYWxseWBgIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5sZWF2aW5nIHRoZSBmdW5jdGlvbi5cblxuSW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24sIHRoZSBgYHJldHVybmBgIHN0YXRlbWVudCBpbmRpY2F0ZXMgdGhhdCB0aGVcbmdlbmVyYXRvciBpcyBkb25lIGFuZCB3aWxsIGNhdXNlIGBgU3RvcEl0ZXJhdGlvbmBgIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuYGBTdG9wSXRlcmF0aW9uYGAgYW5kIGJlY29tZXMgdGhlIGBgU3RvcEl0ZXJhdGlvbi52YWx1ZWBgIGF0dHJpYnV0ZS5cbicsCi0gJ3NlcXVlbmNlLXR5cGVzJzogIlxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uJ3Mgc3RhbmRhcmRcbmRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgTXV0YWJsZU1hcHBpbmdgYCBhYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHNcbmZyb20gYSBiYXNlIHNldCBvZiBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsXG5gYF9fZGVsaXRlbV9fKClgYCwgYW5kIGBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlXG5tZXRob2RzIGBgYXBwZW5kKClgYCwgYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsXG5gYGluc2VydCgpYGAsIGBgcG9wKClgYCwgYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLFxubGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkXG5pbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCxcbmBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLCBgYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGBcbmRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXRcbmlzIHJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZydzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2Vzbid0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKKyAnc2VxdWVuY2UtdHlwZXMnOiAiXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGdldCgpYGAsXG5gYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLCBgYGNvcHkoKWBgLFxuYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob24ncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuJ3QgZGVmaW5lIGEgYGBfX2Jvb2xfXygpYGAgbWV0aG9kIGFuZCB3aG9zZSBgYF9fbGVuX18oKWBgXG4gICBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KClgYC4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKICAnc2hpZnRpbmcnOiAnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGZsb29yIGRpdmlzaW9uIGJ5XG5gYHBvdygyLG4pYGAuICBBIGxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvblxud2l0aCBgYHBvdygyLG4pYGAuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvXG4gIGJlIGF0IG1vc3QgYGBzeXMubWF4c2l6ZWBgLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyBsYXJnZXJcbiAgdGhhbiBgYHN5cy5tYXhzaXplYGAgYW4gYGBPdmVyZmxvd0Vycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogJ1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGFcbnNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlXG50byBhIG1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWVcbmBgX19nZXRpdGVtX18oKWBgIG1ldGhvZCBhcyBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGEga2V5IHRoYXQgaXNcbmNvbnN0cnVjdGVkIGZyb20gdGhlIHNsaWNlIGxpc3QsIGFzIGZvbGxvd3MuICBJZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgYXQgbGVhc3Qgb25lIGNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbmNvbnZlcnNpb24gb2YgdGhlIHNsaWNlIGl0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb25lXG5zbGljZSBpdGVtIGlzIHRoZSBrZXkuICBUaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhblxuZXhwcmVzc2lvbiBpcyB0aGF0IGV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhXG5zbGljZSBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZVxuYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGVcbmV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyIGJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLFxucmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgYGBOb25lYGAgZm9yIG1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAogICdzcGVjaWFsYXR0cnMnOiAnXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSBgYGRpcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3RcJ3NcbiAgICh3cml0YWJsZSkgYXR0cmlidXRlcy5cblxuaW5zdGFuY2UuX19jbGFzc19fXG5cbiAgIFRoZSBjbGFzcyB0byB3aGljaCBhIGNsYXNzIGluc3RhbmNlIGJlbG9uZ3MuXG5cbmNsYXNzLl9fYmFzZXNfX1xuXG4gICBUaGUgdHVwbGUgb2YgYmFzZSBjbGFzc2VzIG9mIGEgY2xhc3Mgb2JqZWN0LlxuXG5jbGFzcy5fX25hbWVfX1xuXG4gICBUaGUgbmFtZSBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuY2xhc3MuX19xdWFsbmFtZV9fXG5cbiAgIFRoZSAqcXVhbGlmaWVkIG5hbWUqIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiBgYF9fbXJvX19gYC5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmQgaW5cbiAgICB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCBgYFsxLCAyXWBgIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG9cbiAgICBgYFsxLjAsIDIuMF1gYCwgYW5kIHNpbWlsYXJseSBmb3IgdHVwbGVzLlxuXG5bM10gVGhleSBtdXN0IGhhdmUgc2luY2UgdGhlIHBhcnNlciBjYW5cJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIENhc2VkIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eSBiZWluZ1xuICAgIG9uZSBvZiAiTHUiIChMZXR0ZXIsIHVwcGVyY2FzZSksICJMbCIgKExldHRlciwgbG93ZXJjYXNlKSwgb3IgIkx0IlxuICAgIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbls1XSBUbyBmb3JtYXQgb25seSBhIHR1cGxlIHlvdSBzaG91bGQgdGhlcmVmb3JlIHByb3ZpZGUgYSBzaW5nbGV0b25cbiAgICB0dXBsZSB3aG9zZSBvbmx5IGVsZW1lbnQgaXMgdGhlIHR1cGxlIHRvIGJlIGZvcm1hdHRlZC5cbicsCi0gJ3NwZWNpYWxuYW1lcyc6ICdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCBgYF9fZ2V0aXRlbV9fKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIHRoaXNcbmNsYXNzLCB0aGVuIGBgeFtpXWBgIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBgYHR5cGUoeCkuX19nZXRpdGVtX18oeCxcbmkpYGAuICBFeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvbiByYWlzZVxuYW4gZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuYGBBdHRyaWJ1dGVFcnJvcmBgIG9yIGBgVHlwZUVycm9yYGApLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbmBgTm9kZUxpc3RgYCBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gIGBgX19uZXdfXygpYGAgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgYGBfX25ld19fKClgYCBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHlcbiAgIGFuIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgdXNpbmdcbiAgIGBgc3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSlgYCB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgYGBfX25ld19fKClgYCByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgYGBfX2luaXRfXyhzZWxmWywgLi4uXSlgYCwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYC5cblxuICAgSWYgYGBfX25ld19fKClgYCBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgIGBgX19uZXdfXygpYGAgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgYGBfX2luaXRfXygpYGAgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9faW5pdF9fKClgYCBtZXRob2QsXG4gICBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2ZcbiAgIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgIGBgQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSlgYC4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50XG4gICBvbiBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICBgYFR5cGVFcnJvcmBgIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhIGBgX19kZWxfXygpYGAgbWV0aG9kLFxuICAgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2RlbF9fKClgYCBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5XG4gICBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGVcbiAgIGluc3RhbmNlLiAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yXG4gICB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6IGBgZGVsIHhgYCBkb2VzblwndCBkaXJlY3RseSBjYWxsIGBgeC5fX2RlbF9fKClgYCAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIGBgeGBgIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXJcbiAgICAgaXMgb25seSBjYWxsZWQgd2hlbiBgYHhgYFwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZVxuICAgICBjb21tb24gc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW5cbiAgICAgb2JqZWN0IGZyb20gZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW5cbiAgICAgb2JqZWN0cyAoZS5nLiwgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGhcbiAgICAgcGFyZW50IGFuZCBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlXG4gICAgIHN0YWNrIGZyYW1lIG9mIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrXG4gICAgIHN0b3JlZCBpbiBgYHN5cy5leGNfaW5mbygpWzJdYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3JcbiAgICAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW5cbiAgICAgdW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIGxhdHRlciB0d28gc2l0dWF0aW9ucyBjYW4gYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyBgYE5vbmVgYCBpblxuICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnlcbiAgICAgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tXG4gICAgIGxldmVsIGBgX19kZWxfXygpYGAgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb25cbiAgICAgZm9yIHRoZSBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvd1xuICAgICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLFxuICAgICBwYXJ0aWN1bGFybHkgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBgYGdhcmJhZ2VgYCB2YWx1ZS5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nIHRoZWlyIGV4ZWN1dGlvblxuICAgICBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvIGBgc3lzLnN0ZGVycmBgIGluc3RlYWQuXG4gICAgIEFsc28sIHdoZW4gYGBfX2RlbF9fKClgYCBpcyBpbnZva2VkIGluIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nXG4gICAgIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlclxuICAgICBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmVcbiAgICAgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHRvcm4gZG93biAoZS5nLiB0aGVcbiAgICAgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzIHJlYXNvbiwgYGBfX2RlbF9fKClgYFxuICAgICBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWQgdG8gbWFpbnRhaW5cbiAgICAgZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsIFB5dGhvblxuICAgICBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGByZXByKClgYCBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZVxuICAgIm9mZmljaWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLFxuICAgdGhpcyBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkXG4gICB0byByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgYGA8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+YGAgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzIGBgX19yZXByX18oKWBgXG4gICBidXQgbm90IGBgX19zdHJfXygpYGAsIHRoZW4gYGBfX3JlcHJfXygpYGAgaXMgYWxzbyB1c2VkIHdoZW4gYW5cbiAgICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzXG4gICByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYGBzdHIob2JqZWN0KWBgIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGBgZm9ybWF0KClgYFxuICAgYW5kIGBgcHJpbnQoKWBgIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZVxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICAqc3RyaW5nKiBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSBgYG9iamVjdC5fX3JlcHJfXygpYGAgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCBgYF9fc3RyX18oKWBgIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSBgYG9iamVjdGBgXG4gICBjYWxscyBgYG9iamVjdC5fX3JlcHJfXygpYGAuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgYnl0ZXMoKWBgIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSBgYGJ5dGVzYGAgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBzdHIuZm9ybWF0KClgYCBtZXRob2Qgb2YgY2xhc3MgYGBzdHJgYCkgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzXG4gICBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXMgdXBcbiAgIHRvIHRoZSB0eXBlIGltcGxlbWVudGluZyBgYF9fZm9ybWF0X18oKWBgLCBob3dldmVyIG1vc3QgY2xhc3Nlc1xuICAgd2lsbCBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvclxuICAgdXNlIGEgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiBgYHg8eWBgIGNhbGxzIGBgeC5fX2x0X18oeSlgYCwgYGB4PD15YGAgY2FsbHNcbiAgIGBgeC5fX2xlX18oeSlgYCwgYGB4PT15YGAgY2FsbHMgYGB4Ll9fZXFfXyh5KWBgLCBgYHghPXlgYCBjYWxsc1xuICAgYGB4Ll9fbmVfXyh5KWBgLCBgYHg+eWBgIGNhbGxzIGBgeC5fX2d0X18oeSlgYCwgYW5kIGBgeD49eWBgIGNhbGxzXG4gICBgYHguX19nZV9fKHkpYGAuXG5cbiAgIEEgcmljaCBjb21wYXJpc29uIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBzaW5nbGV0b25cbiAgIGBgTm90SW1wbGVtZW50ZWRgYCBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYVxuICAgZ2l2ZW4gcGFpciBvZiBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sIGBgRmFsc2VgYCBhbmQgYGBUcnVlYGAgYXJlXG4gICByZXR1cm5lZCBmb3IgYSBzdWNjZXNzZnVsIGNvbXBhcmlzb24uIEhvd2V2ZXIsIHRoZXNlIG1ldGhvZHMgY2FuXG4gICByZXR1cm4gYW55IHZhbHVlLCBzbyBpZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvciBpcyB1c2VkIGluIGFcbiAgIEJvb2xlYW4gY29udGV4dCAoZS5nLiwgaW4gdGhlIGNvbmRpdGlvbiBvZiBhbiBgYGlmYGAgc3RhdGVtZW50KSxcbiAgIFB5dGhvbiB3aWxsIGNhbGwgYGBib29sKClgYCBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHRcbiAgIGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuXG4gICBBY2NvcmRpbmdseSwgd2hlbiBkZWZpbmluZyBgYF9fZXFfXygpYGAsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgIGBgX19uZV9fKClgYCBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWVcbiAgIHRoZSBwYXJhZ3JhcGggb24gYGBfX2hhc2hfXygpYGAgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsIGBgX19sdF9fKClgYCBhbmQgYGBfX2d0X18oKWBgIGFyZSBlYWNoXG4gICBvdGhlclwncyByZWZsZWN0aW9uLCBgYF9fbGVfXygpYGAgYW5kIGBgX19nZV9fKClgYCBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgYW5kIGBgX19lcV9fKClgYCBhbmQgYGBfX25lX18oKWBgIGFyZSB0aGVpciBvd25cbiAgIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgYGBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKWBgLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogYGBoYXNoKClgYCB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzIGN1c3RvbVxuICAgICBgYF9faGFzaF9fKClgYCBtZXRob2QgdG8gdGhlIHNpemUgb2YgYSBgYFB5X3NzaXplX3RgYC4gIFRoaXMgaXNcbiAgICAgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXQgYnVpbGRzLlxuICAgICBJZiBhbiBvYmplY3RcJ3MgICBgYF9faGFzaF9fKClgYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2ZcbiAgICAgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZFxuICAgICBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggYGBweXRob24gLWMgImltcG9ydCBzeXM7XG4gICAgIHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0IGBgeCA9PSB5YGAgaW1wbGllcyBib3RoIHRoYXQgYGB4IGlzIHlgYCBhbmQgYGBoYXNoKHgpID09XG4gICBoYXNoKHkpYGAuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIGFuZCBkb2VzIG5vdCBkZWZpbmVcbiAgIGBgX19oYXNoX18oKWBgIHdpbGwgaGF2ZSBpdHMgYGBfX2hhc2hfXygpYGAgaW1wbGljaXRseSBzZXQgdG9cbiAgIGBgTm9uZWBgLiAgV2hlbiB0aGUgYGBfX2hhc2hfXygpYGAgbWV0aG9kIG9mIGEgY2xhc3MgaXMgYGBOb25lYGAsXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgYGBUeXBlRXJyb3JgYCB3aGVuXG4gICBhIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZVxuICAgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nIGBgaXNpbnN0YW5jZShvYmosXG4gICBjb2xsZWN0aW9ucy5IYXNoYWJsZWBgKS5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyBgYF9fZXFfXygpYGAgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgYGBfX2hhc2hfXygpYGAgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlXG4gICBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgYGBfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fYGAuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSBgYF9fZXFfXygpYGAgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biBgYF9faGFzaF9fKClgYCB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhIGBgVHlwZUVycm9yYGAgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZFxuICAgYXMgaGFzaGFibGUgYnkgYW4gYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlIGBgX19oYXNoX18oKWBgIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZCBkYXRldGltZVxuICAgICBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvIGBgUFlUSE9OSEFTSFNFRURgYC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgYGB4Lm5hbWVgYClcbmZvciBjbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yIGBgc2VsZmBgKS4gIGBgbmFtZWBgIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlXG4gICBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgYGBfX2dldGF0dHJfXygpYGAgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiBgYF9fZ2V0YXR0cl9fKClgYCBhbmQgYGBfX3NldGF0dHJfXygpYGAuKSBUaGlzIGlzIGRvbmUgYm90aFxuICAgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgYGBfX2dldGF0dHJfXygpYGBcbiAgIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGVcbiAgIHRoYXQgYXQgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnlcbiAgIG5vdCBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lc1xuICAgYGBfX2dldGF0dHJfXygpYGAsIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzc1xuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBlaXRoZXIgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKVxuICAgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uIEluIG9yZGVyXG4gICB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvblxuICAgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG9cbiAgIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpYGAuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiBgYGRpcigpYGAgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuIGBgZGlyKClgYCBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgYGBfX2RpY3RfX2BgLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgYGBOb25lYGAgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgLCBhbmRcbmBgX19kZWxldGVfXygpYGAuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsXG5pdCBpcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsIGBgYS54YGAgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoIGBgYS5fX2RpY3RfX1tcJ3hcJ11gYCwgdGhlblxuYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXWBgLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbmBgdHlwZShhKWBgIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsIGBgQS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgIGBgQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKWBgLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiBgYGFgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYHN1cGVyYGAsIHRoZW4gdGhlIGJpbmRpbmcgYGBzdXBlcihCLFxuICAgb2JqKS5tKClgYCBzZWFyY2hlcyBgYG9iai5fX2NsYXNzX18uX19tcm9fX2BgIGZvciB0aGUgYmFzZSBjbGFzc1xuICAgYGBBYGAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBgQmBgIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3JcbiAgIHdpdGggdGhlIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pYGAuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAgYW5kIGBgX19kZWxldGVfXygpYGAuXG5JZiBpdCBkb2VzIG5vdCBkZWZpbmUgYGBfX2dldF9fKClgYCwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsXG5yZXR1cm4gdGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGVcbm9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyBgYF9fc2V0X18oKWBgXG5hbmQvb3IgYGBfX2RlbGV0ZV9fKClgYCwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXNcbm5laXRoZXIsIGl0IGlzIGEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzXG5kZWZpbmUgYm90aCBgYF9fZ2V0X18oKWBgIGFuZCBgYF9fc2V0X18oKWBgLCB3aGlsZSBub24tZGF0YVxuZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZSBgYF9fZ2V0X18oKWBgIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aFxuYGBfX3NldF9fKClgYCBhbmQgYGBfX2dldF9fKClgYCBkZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvblxuaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluIGNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmVcbm92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nIGBgc3RhdGljbWV0aG9kKClgYCBhbmQgYGBjbGFzc21ldGhvZCgpYGApXG5hcmUgaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSBgYHByb3BlcnR5KClgYCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzIGBgQXR0cmlidXRlRXJyb3JgYC4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgYGBcJ19fZGljdF9fXCdgYCB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXMgZGVmaW5pbmdcbiAgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbnN0YW5jZXMuIElmIHdlYWtcbiAgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZCBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBpbnRgYCwgYGBzdHJgYCBhbmRcbiAgYGB0dXBsZWBgLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3MgbWF5XG4gIGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBUaGUgY2xhc3MgYm9keVxuaXMgZXhlY3V0ZWQgaW4gYSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgY2xhc3MgbmFtZSBpcyBib3VuZCBsb2NhbGx5IHRvXG50aGUgcmVzdWx0IG9mIGBgdHlwZShuYW1lLCBiYXNlcywgbmFtZXNwYWNlKWBgLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuYGBtZXRhY2xhc3NgYCBrZXl3b3JkIGFyZ3VtZW50IGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGxpbmUsIG9yIGJ5XG5pbmhlcml0aW5nIGZyb20gYW4gZXhpc3RpbmcgY2xhc3MgdGhhdCBpbmNsdWRlZCBzdWNoIGFuIGFyZ3VtZW50LiBJblxudGhlIGZvbGxvd2luZyBleGFtcGxlLCBib3RoIGBgTXlDbGFzc2BgIGFuZCBgYE15U3ViY2xhc3NgYCBhcmVcbmluc3RhbmNlcyBvZiBgYE1ldGFgYDpcblxuICAgY2xhc3MgTWV0YSh0eXBlKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15Q2xhc3MobWV0YWNsYXNzPU1ldGEpOlxuICAgICAgIHBhc3NcblxuICAgY2xhc3MgTXlTdWJjbGFzcyhNeUNsYXNzKTpcbiAgICAgICBwYXNzXG5cbkFueSBvdGhlciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbmFyZSBwYXNzZWQgdGhyb3VnaCB0byBhbGwgbWV0YWNsYXNzIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGJlbG93LlxuXG5XaGVuIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBleGVjdXRlZCwgdGhlIGZvbGxvd2luZyBzdGVwcyBvY2N1cjpcblxuKiB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWRcblxuKiB0aGUgY2xhc3MgbmFtZXNwYWNlIGlzIHByZXBhcmVkXG5cbiogdGhlIGNsYXNzIGJvZHkgaXMgZXhlY3V0ZWRcblxuKiB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWRcblxuXG5EZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgZm9yIGEgY2xhc3MgZGVmaW5pdGlvbiBpcyBkZXRlcm1pbmVkIGFzXG5mb2xsb3dzOlxuXG4qIGlmIG5vIGJhc2VzIGFuZCBubyBleHBsaWNpdCBtZXRhY2xhc3MgYXJlIGdpdmVuLCB0aGVuIGBgdHlwZSgpYGAgaXNcbiAgdXNlZFxuXG4qIGlmIGFuIGV4cGxpY2l0IG1ldGFjbGFzcyBpcyBnaXZlbiBhbmQgaXQgaXMgKm5vdCogYW4gaW5zdGFuY2Ugb2ZcbiAgYGB0eXBlKClgYCwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiBgYHR5cGUoKWBgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBtZXRhY2xhc3MsIG9yXG4gIGJhc2VzIGFyZSBkZWZpbmVkLCB0aGVuIHRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHVzZWRcblxuVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZXhwbGljaXRseSBzcGVjaWZpZWRcbm1ldGFjbGFzcyAoaWYgYW55KSBhbmQgdGhlIG1ldGFjbGFzc2VzIChpLmUuIGBgdHlwZShjbHMpYGApIG9mIGFsbFxuc3BlY2lmaWVkIGJhc2UgY2xhc3Nlcy4gVGhlIG1vc3QgZGVyaXZlZCBtZXRhY2xhc3MgaXMgb25lIHdoaWNoIGlzIGFcbnN1YnR5cGUgb2YgKmFsbCogb2YgdGhlc2UgY2FuZGlkYXRlIG1ldGFjbGFzc2VzLiBJZiBub25lIG9mIHRoZVxuY2FuZGlkYXRlIG1ldGFjbGFzc2VzIG1lZXRzIHRoYXQgY3JpdGVyaW9uLCB0aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uXG53aWxsIGZhaWwgd2l0aCBgYFR5cGVFcnJvcmBgLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSBgYF9fcHJlcGFyZV9fYGBcbmF0dHJpYnV0ZSwgaXQgaXMgY2FsbGVkIGFzIGBgbmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsXG5iYXNlcywgKiprd2RzKWBgICh3aGVyZSB0aGUgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cywgaWYgYW55LCBjb21lXG5mcm9tIHRoZSBjbGFzcyBkZWZpbml0aW9uKS5cblxuSWYgdGhlIG1ldGFjbGFzcyBoYXMgbm8gYGBfX3ByZXBhcmVfX2BgIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSBgYGRpY3QoKWBgIGluc3RhbmNlLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMwMDBcbiAgICAgIEludHJvZHVjZWQgdGhlIGBgX19wcmVwYXJlX19gYCBuYW1lc3BhY2UgaG9va1xuXG5cbkV4ZWN1dGluZyB0aGUgY2xhc3MgYm9keVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkIChhcHByb3hpbWF0ZWx5KSBhcyBgYGV4ZWMoYm9keSwgZ2xvYmFscygpLFxubmFtZXNwYWNlKWBgLiBUaGUga2V5IGRpZmZlcmVuY2UgZnJvbSBhIG5vcm1hbCBjYWxsIHRvIGBgZXhlYygpYGAgaXNcbnRoYXQgbGV4aWNhbCBzY29waW5nIGFsbG93cyB0aGUgY2xhc3MgYm9keSAoaW5jbHVkaW5nIGFueSBtZXRob2RzKSB0b1xucmVmZXJlbmNlIG5hbWVzIGZyb20gdGhlIGN1cnJlbnQgYW5kIG91dGVyIHNjb3BlcyB3aGVuIHRoZSBjbGFzc1xuZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIGEgZnVuY3Rpb24uXG5cbkhvd2V2ZXIsIGV2ZW4gd2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBvY2N1cnMgaW5zaWRlIHRoZSBmdW5jdGlvbixcbm1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgdGhlIGNsYXNzIHN0aWxsIGNhbm5vdCBzZWUgbmFtZXMgZGVmaW5lZCBhdCB0aGVcbmNsYXNzIHNjb3BlLiBDbGFzcyB2YXJpYWJsZXMgbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBmaXJzdFxucGFyYW1ldGVyIG9mIGluc3RhbmNlIG9yIGNsYXNzIG1ldGhvZHMsIGFuZCBjYW5ub3QgYmUgYWNjZXNzZWQgYXQgYWxsXG5mcm9tIHN0YXRpYyBtZXRob2RzLlxuXG5cbkNyZWF0aW5nIHRoZSBjbGFzcyBvYmplY3Rcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgY2xhc3MgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBieSBleGVjdXRpbmcgdGhlIGNsYXNzXG5ib2R5LCB0aGUgY2xhc3Mgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBgYG1ldGFjbGFzcyhuYW1lLCBiYXNlcyxcbm5hbWVzcGFjZSwgKiprd2RzKWBgICh0aGUgYWRkaXRpb25hbCBrZXl3b3JkcyBwYXNzZWQgaGVyZSBhcmUgdGhlIHNhbWVcbmFzIHRob3NlIHBhc3NlZCB0byBgYF9fcHJlcGFyZV9fYGApLlxuXG5UaGlzIGNsYXNzIG9iamVjdCBpcyB0aGUgb25lIHRoYXQgd2lsbCBiZSByZWZlcmVuY2VkIGJ5IHRoZSB6ZXJvLVxuYXJndW1lbnQgZm9ybSBvZiBgYHN1cGVyKClgYC4gYGBfX2NsYXNzX19gYCBpcyBhbiBpbXBsaWNpdCBjbG9zdXJlXG5yZWZlcmVuY2UgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaWYgYW55IG1ldGhvZHMgaW4gYSBjbGFzcyBib2R5IHJlZmVyXG50byBlaXRoZXIgYGBfX2NsYXNzX19gYCBvciBgYHN1cGVyYGAuIFRoaXMgYWxsb3dzIHRoZSB6ZXJvIGFyZ3VtZW50XG5mb3JtIG9mIGBgc3VwZXIoKWBgIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgY2xhc3MgYmVpbmcgZGVmaW5lZFxuYmFzZWQgb24gbGV4aWNhbCBzY29waW5nLCB3aGlsZSB0aGUgY2xhc3Mgb3IgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0b1xubWFrZSB0aGUgY3VycmVudCBjYWxsIGlzIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIG1ldGhvZC5cblxuQWZ0ZXIgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNsYXNzXG5kZWNvcmF0b3JzIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuICAgICAgRGVzY3JpYmVzIHRoZSBpbXBsaWNpdCBgYF9fY2xhc3NfX2BgIGNsb3N1cmUgcmVmZXJlbmNlXG5cblxuTWV0YWNsYXNzIGV4YW1wbGVcbi0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBwb3RlbnRpYWwgdXNlcyBmb3IgbWV0YWNsYXNzZXMgYXJlIGJvdW5kbGVzcy4gU29tZSBpZGVhcyB0aGF0IGhhdmVcbmJlZW4gZXhwbG9yZWQgaW5jbHVkZSBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnNcbndlcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXN1bHQgPSB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdChuYW1lc3BhY2UpKVxuICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSlcbiAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICBjbGFzcyBBKG1ldGFjbGFzcz1PcmRlcmVkQ2xhc3MpOlxuICAgICAgIGRlZiBvbmUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdHdvKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHRocmVlKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIGZvdXIoc2VsZik6IHBhc3NcblxuICAgPj4+IEEubWVtYmVyc1xuICAgKFwnX19tb2R1bGVfX1wnLCBcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCcsIFwnZm91clwnKVxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciAqQSogZ2V0cyBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYmVnaW5zXG53aXRoIGNhbGxpbmcgdGhlIG1ldGFjbGFzc1wncyBgYF9fcHJlcGFyZV9fKClgYCBtZXRob2Qgd2hpY2ggcmV0dXJucyBhblxuZW1wdHkgYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHNcbmFuZCBhdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCBnZXRzXG5pbnZva2VkLiAgVGhhdCBtZXRob2QgYnVpbGRzIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWRcbmRpY3Rpb25hcnkga2V5cyBpbiBhbiBhdHRyaWJ1dGUgY2FsbGVkIGBgbWVtYmVyc2BgLlxuXG5cbkN1c3RvbWl6aW5nIGluc3RhbmNlIGFuZCBzdWJjbGFzcyBjaGVja3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZVxuYGBpc2luc3RhbmNlKClgYCBhbmQgYGBpc3N1YmNsYXNzKClgYCBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgYGBhYmMuQUJDTWV0YWBgIGltcGxlbWVudHMgdGhlc2UgbWV0aG9kc1xuaW4gb3JkZXIgdG8gYWxsb3cgdGhlIGFkZGl0aW9uIG9mIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoQUJDcykgYXNcbiJ2aXJ0dWFsIGJhc2UgY2xhc3NlcyIgdG8gYW55IGNsYXNzIG9yIHR5cGUgKGluY2x1ZGluZyBidWlsdC1pblxudHlwZXMpLCBpbmNsdWRpbmcgb3RoZXIgQUJDcy5cblxuY2xhc3MuX19pbnN0YW5jZWNoZWNrX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIFJldHVybiB0cnVlIGlmICppbnN0YW5jZSogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgaW5zdGFuY2Ugb2YgKmNsYXNzKi4gSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcylgYC5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNzdWJjbGFzcyhzdWJjbGFzcywgY2xhc3MpYGAuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcbiAgICAgIEluY2x1ZGVzIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBjdXN0b21pemluZyBgYGlzaW5zdGFuY2UoKWBgIGFuZFxuICAgICAgYGBpc3N1YmNsYXNzKClgYCBiZWhhdmlvciB0aHJvdWdoIGBgX19pbnN0YW5jZWNoZWNrX18oKWBgIGFuZFxuICAgICAgYGBfX3N1YmNsYXNzY2hlY2tfXygpYGAsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5XG4gICAgICBpbiB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlIGBgYWJjYGBcbiAgICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsIGBgeChhcmcxLCBhcmcyLCAuLi4pYGAgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICBgYHguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKWBgLlxuXG5cbkVtdWxhdGluZyBjb250YWluZXIgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGltcGxlbWVudCBjb250YWluZXIgb2JqZWN0cy5cbkNvbnRhaW5lcnMgdXN1YWxseSBhcmUgc2VxdWVuY2VzIChzdWNoIGFzIGxpc3RzIG9yIHR1cGxlcykgb3IgbWFwcGluZ3NcbihsaWtlIGRpY3Rpb25hcmllcyksIGJ1dCBjYW4gcmVwcmVzZW50IG90aGVyIGNvbnRhaW5lcnMgYXMgd2VsbC4gIFRoZVxuZmlyc3Qgc2V0IG9mIG1ldGhvZHMgaXMgdXNlZCBlaXRoZXIgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIG9yIHRvXG5lbXVsYXRlIGEgbWFwcGluZzsgdGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBmb3IgYSBzZXF1ZW5jZSwgdGhlXG5hbGxvd2FibGUga2V5cyBzaG91bGQgYmUgdGhlIGludGVnZXJzICprKiBmb3Igd2hpY2ggYGAwIDw9IGsgPCBOYGBcbndoZXJlICpOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2hcbmRlZmluZSBhIHJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGVcbnRoZSBtZXRob2RzIGBga2V5cygpYGAsIGBgdmFsdWVzKClgYCwgYGBpdGVtcygpYGAsIGBgZ2V0KClgYCxcbmBgY2xlYXIoKWBgLCBgYHNldGRlZmF1bHQoKWBgLCBgYHBvcCgpYGAsIGBgcG9waXRlbSgpYGAsIGBgY29weSgpYGAsXG5hbmQgYGB1cGRhdGUoKWBgIGJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZFxuZGljdGlvbmFyeSBvYmplY3RzLiAgVGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUgcHJvdmlkZXMgYVxuYGBNdXRhYmxlTWFwcGluZ2BgIGFic3RyYWN0IGJhc2UgY2xhc3MgdG8gaGVscCBjcmVhdGUgdGhvc2UgbWV0aG9kc1xuZnJvbSBhIGJhc2Ugc2V0IG9mIGBgX19nZXRpdGVtX18oKWBgLCBgYF9fc2V0aXRlbV9fKClgYCxcbmBgX19kZWxpdGVtX18oKWBgLCBhbmQgYGBrZXlzKClgYC4gTXV0YWJsZSBzZXF1ZW5jZXMgc2hvdWxkIHByb3ZpZGVcbm1ldGhvZHMgYGBhcHBlbmQoKWBgLCBgYGNvdW50KClgYCwgYGBpbmRleCgpYGAsIGBgZXh0ZW5kKClgYCxcbmBgaW5zZXJ0KClgYCwgYGBwb3AoKWBgLCBgYHJlbW92ZSgpYGAsIGBgcmV2ZXJzZSgpYGAgYW5kIGBgc29ydCgpYGAsXG5saWtlIFB5dGhvbiBzdGFuZGFyZCBsaXN0IG9iamVjdHMuICBGaW5hbGx5LCBzZXF1ZW5jZSB0eXBlcyBzaG91bGRcbmltcGxlbWVudCBhZGRpdGlvbiAobWVhbmluZyBjb25jYXRlbmF0aW9uKSBhbmQgbXVsdGlwbGljYXRpb24gKG1lYW5pbmdcbnJlcGV0aXRpb24pIGJ5IGRlZmluaW5nIHRoZSBtZXRob2RzIGBgX19hZGRfXygpYGAsIGBgX19yYWRkX18oKWBgLFxuYGBfX2lhZGRfXygpYGAsIGBgX19tdWxfXygpYGAsIGBgX19ybXVsX18oKWBgIGFuZCBgYF9faW11bF9fKClgYFxuZGVzY3JpYmVkIGJlbG93OyB0aGV5IHNob3VsZCBub3QgZGVmaW5lIG90aGVyIG51bWVyaWNhbCBvcGVyYXRvcnMuICBJdFxuaXMgcmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSBgYGluYGBcbm9wZXJhdG9yOyBmb3IgbWFwcGluZ3MsIGBgaW5gYCBzaG91bGQgc2VhcmNoIHRoZSBtYXBwaW5nXCdzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2VzblwndCBkZWZpbmUgYSBgYF9fYm9vbF9fKClgYCBtZXRob2QgYW5kIHdob3NlIGBgX19sZW5fXygpYGBcbiAgIG1ldGhvZCByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLiAgQVxuICBjYWxsIGxpa2VcblxuICAgICBhWzE6Ml0gPSBiXG5cbiAgaXMgdHJhbnNsYXRlZCB0b1xuXG4gICAgIGFbc2xpY2UoMSwgMiwgTm9uZSldID0gYlxuXG4gIGFuZCBzbyBmb3J0aC4gIE1pc3Npbmcgc2xpY2UgaXRlbXMgYXJlIGFsd2F5cyBmaWxsZWQgaW4gd2l0aFxuICBgYE5vbmVgYC5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mIGBgc2VsZltrZXldYGAuIEZvciBzZXF1ZW5jZVxuICAgdHlwZXMsIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy5cbiAgIE5vdGUgdGhhdCB0aGUgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZiBuZWdhdGl2ZSBpbmRleGVzIChpZiB0aGVcbiAgIGNsYXNzIHdpc2hlcyB0byBlbXVsYXRlIGEgc2VxdWVuY2UgdHlwZSkgaXMgdXAgdG8gdGhlXG4gICBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuIElmICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSxcbiAgIGBgVHlwZUVycm9yYGAgbWF5IGJlIHJhaXNlZDsgaWYgb2YgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2ZcbiAgIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55IHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2ZcbiAgIG5lZ2F0aXZlIHZhbHVlcyksIGBgSW5kZXhFcnJvcmBgIHNob3VsZCBiZSByYWlzZWQuIEZvciBtYXBwaW5nXG4gICB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZSBjb250YWluZXIpLCBgYEtleUVycm9yYGBcbiAgIHNob3VsZCBiZSByYWlzZWQuXG5cbiAgIE5vdGU6IGBgZm9yYGAgbG9vcHMgZXhwZWN0IHRoYXQgYW4gYGBJbmRleEVycm9yYGAgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mIGBgc2VsZltrZXldYGAuICBTYW1lIG5vdGUgYXMgZm9yXG4gICBgYF9fZ2V0aXRlbV9fKClgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSBgYF9fZ2V0aXRlbV9fKClgYFxuICAgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kIHNob3VsZCBhbHNvIGJlIG1hZGVcbiAgIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIGBga2V5cygpYGAuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSBgYF9fcmV2ZXJzZWRfXygpYGAgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlXG4gICBgYHJldmVyc2VkKClgYCBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2VcbiAgIHByb3RvY29sIChgYF9fbGVuX18oKWBgIGFuZCBgYF9fZ2V0aXRlbV9fKClgYCkuICBPYmplY3RzIHRoYXRcbiAgIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sIHNob3VsZCBvbmx5IHByb3ZpZGVcbiAgIGBgX19yZXZlcnNlZF9fKClgYCBpZiB0aGV5IGNhbiBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uIHRoYXQgaXNcbiAgIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieSBgYHJldmVyc2VkKClgYC5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKGBgaW5gYCBhbmQgYGBub3QgaW5gYCkgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lIGBgX19jb250YWluc19fKClgYCwgdGhlIG1lbWJlcnNoaXBcbiAgIHRlc3QgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSBgYF9faXRlcl9fKClgYCwgdGhlbiB0aGUgb2xkXG4gICBzZXF1ZW5jZSBpdGVyYXRpb24gcHJvdG9jb2wgdmlhIGBgX19nZXRpdGVtX18oKWBgLCBzZWUgKnRoaXNcbiAgIHNlY3Rpb24gaW4gdGhlIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLFxuICAgYGBkaXZtb2QoKWBgLCBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCxcbiAgIGBgfGBgKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4ICsgeWBgLCB3aGVyZVxuICAgKngqIGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX2FkZF9fKClgYCBtZXRob2QsXG4gICBgYHguX19hZGRfXyh5KWBgIGlzIGNhbGxlZC4gIFRoZSBgYF9fZGl2bW9kX18oKWBgIG1ldGhvZCBzaG91bGQgYmVcbiAgIHRoZSBlcXVpdmFsZW50IHRvIHVzaW5nIGBgX19mbG9vcmRpdl9fKClgYCBhbmQgYGBfX21vZF9fKClgYDsgaXRcbiAgIHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byBgYF9fdHJ1ZWRpdl9fKClgYC4gIE5vdGUgdGhhdFxuICAgYGBfX3Bvd19fKClgYCBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluIGBgcG93KClgYCBmdW5jdGlvblxuICAgaXMgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiBgYE5vdEltcGxlbWVudGVkYGAuXG5cbm9iamVjdC5fX3JhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JtdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JkaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jwb3dfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3J4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Jvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5XG4gICBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nXG4gICBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvclxuICAgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCAtIHlgYCwgd2hlcmUgKnkqIGlzIGFuXG4gICBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19yc3ViX18oKWBgIG1ldGhvZCxcbiAgIGBgeS5fX3JzdWJfXyh4KWBgIGlzIGNhbGxlZCBpZiBgYHguX19zdWJfXyh5KWBgIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5IGBgcG93KClgYCB3aWxsIG5vdCB0cnkgY2FsbGluZyBgYF9fcnBvd19fKClgYFxuICAgKHRoZSBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZCBmb3IgdGhlXG4gICAgIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0IG9wZXJhbmRcJ3NcbiAgICAgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzIHRvXG4gICAgIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzIChgYCs9YGAsIGBgLT1gYCwgYGAqPWBgLCBgYC89YGAsIGBgLy89YGAsIGBgJT1gYCxcbiAgIGBgKio9YGAsIGBgPDw9YGAsIGBgPj49YGAsIGBgJj1gYCwgYGBePWBgLCBgYHw9YGApLiAgVGhlc2UgbWV0aG9kc1xuICAgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kXG4gICByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLFxuICAgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXhlY3V0ZSB0aGUgc3RhdGVtZW50IGBgeCArPSB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhXG4gICBjbGFzcyB0aGF0IGhhcyBhbiBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2lhZGRfXyh5KWBgIGlzXG4gICBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGRlZmluZSBhXG4gICBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgYW5kIGBgeS5fX3JhZGRfXyh4KWBgIGFyZVxuICAgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoYGAtYGAsIGBgK2BgLFxuICAgYGBhYnMoKWBgIGFuZCBgYH5gYCkuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBjb21wbGV4KClgYCxcbiAgIGBgaW50KClgYCwgYGBmbG9hdCgpYGAgYW5kIGBgcm91bmQoKWBgLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mXG4gICB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IuaW5kZXgoKWBgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluIGBgYmluKClgYCwgYGBoZXgoKWBgIGFuZCBgYG9jdCgpYGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSBgYHdpdGhgYCBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0XG5tYW5hZ2VyIGhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lXG5jb250ZXh0IGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmVcbm5vcm1hbGx5IGludm9rZWQgdXNpbmcgdGhlIGBgd2l0aGBgIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb25cbipUaGUgd2l0aCBzdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXJcbm1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIGBgd2l0aGBgXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlIGBgYXNgYCBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSBgYE5vbmVgYC5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgYGBfX2V4aXRfXygpYGAgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyBgYF9faGFzaF9fKClgYCBhbmQgYGBfX3JlcHJfXygpYGAgdGhhdCBhcmUgaW1wbGVtZW50ZWRcbmJ5IGFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mXG50aGVzZSBtZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsXG53aGVuIGludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtYWNoaW5lcnkgaW4gdGhpcyBmYXNoaW9uXG5wcm92aWRlcyBzaWduaWZpY2FudCBzY29wZSBmb3Igc3BlZWQgb3B0aW1pc2F0aW9ucyB3aXRoaW4gdGhlXG5pbnRlcnByZXRlciwgYXQgdGhlIGNvc3Qgb2Ygc29tZSBmbGV4aWJpbGl0eSBpbiB0aGUgaGFuZGxpbmcgb2ZcbnNwZWNpYWwgbWV0aG9kcyAodGhlIHNwZWNpYWwgbWV0aG9kICptdXN0KiBiZSBzZXQgb24gdGhlIGNsYXNzIG9iamVjdFxuaXRzZWxmIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnRseSBpbnZva2VkIGJ5IHRoZSBpbnRlcnByZXRlcikuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gSXQgKmlzKiBwb3NzaWJsZSBpbiBzb21lIGNhc2VzIHRvIGNoYW5nZSBhbiBvYmplY3RcJ3MgdHlwZSwgdW5kZXJcbiAgICBjZXJ0YWluIGNvbnRyb2xsZWQgY29uZGl0aW9ucy4gSXQgZ2VuZXJhbGx5IGlzblwndCBhIGdvb2QgaWRlYVxuICAgIHRob3VnaCwgc2luY2UgaXQgY2FuIGxlYWQgdG8gc29tZSB2ZXJ5IHN0cmFuZ2UgYmVoYXZpb3VyIGlmIGl0IGlzXG4gICAgaGFuZGxlZCBpbmNvcnJlY3RseS5cblxuWzJdIEZvciBvcGVyYW5kcyBvZiB0aGUgc2FtZSB0eXBlLCBpdCBpcyBhc3N1bWVkIHRoYXQgaWYgdGhlIG5vbi1cbiAgICByZWZsZWN0ZWQgbWV0aG9kIChzdWNoIGFzIGBgX19hZGRfXygpYGApIGZhaWxzIHRoZSBvcGVyYXRpb24gaXNcbiAgICBub3Qgc3VwcG9ydGVkLCB3aGljaCBpcyB3aHkgdGhlIHJlZmxlY3RlZCBtZXRob2QgaXMgbm90IGNhbGxlZC5cbicsCi0gJ3N0cmluZy1tZXRob2RzJzogJ1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgYGBzdHIuZm9ybWF0KClgYCxcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpTdHJpbmcgRm9ybWF0dGluZyopIGFuZCB0aGUgb3RoZXIgYmFzZWQgb25cbkMgYGBwcmludGZgYCBzdHlsZSBmb3JtYXR0aW5nIHRoYXQgaGFuZGxlcyBhIG5hcnJvd2VyIHJhbmdlIG9mIHR5cGVzXG5hbmQgaXMgc2xpZ2h0bHkgaGFyZGVyIHRvIHVzZSBjb3JyZWN0bHksIGJ1dCBpcyBvZnRlbiBmYXN0ZXIgZm9yIHRoZVxuY2FzZXMgaXQgY2FuIGhhbmRsZSAoKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyopLlxuXG5UaGUgKlRleHQgUHJvY2Vzc2luZyBTZXJ2aWNlcyogc2VjdGlvbiBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBjb3ZlcnNcbmEgbnVtYmVyIG9mIG90aGVyIG1vZHVsZXMgdGhhdCBwcm92aWRlIHZhcmlvdXMgdGV4dCByZWxhdGVkIHV0aWxpdGllc1xuKGluY2x1ZGluZyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBpbiB0aGUgYGByZWBgIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyIGBgXCdceGMzXHg5ZlwnYGAgaXMgZXF1aXZhbGVudCB0b1xuICAgYGAic3MiYGAuIFNpbmNlIGl0IGlzIGFscmVhZHkgbG93ZXJjYXNlLCBgYGxvd2VyKClgYCB3b3VsZCBkb1xuICAgbm90aGluZyB0byBgYFwnXHhjM1x4OWZcJ2BgOyBgYGNhc2Vmb2xkKClgYCBjb252ZXJ0cyBpdCB0byBgYCJzcyJgYC5cblxuICAgVGhlIGNhc2Vmb2xkaW5nIGFsZ29yaXRobSBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5cbiAgIFJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIHN0cmluZyBhcyBhIGJ5dGVzIG9iamVjdC4gRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgYGBcJ3V0Zi04XCdgYC4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudFxuICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGBcJ3N0cmljdFwnYGAsXG4gICBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgYGBVbmljb2RlRXJyb3JgYC4gT3RoZXJcbiAgIHBvc3NpYmxlIHZhbHVlcyBhcmUgYGBcJ2lnbm9yZVwnYGAsIGBgXCdyZXBsYWNlXCdgYCxcbiAgIGBgXCd4bWxjaGFycmVmcmVwbGFjZVwnYGAsIGBgXCdiYWNrc2xhc2hyZXBsYWNlXCdgYCBhbmQgYW55IG90aGVyIG5hbWVcbiAgIHJlZ2lzdGVyZWQgdmlhIGBgY29kZWNzLnJlZ2lzdGVyX2Vycm9yKClgYCwgc2VlIHNlY3Rpb24gKkNvZGVjIEJhc2VcbiAgIENsYXNzZXMqLiBGb3IgYSBsaXN0IG9mIHBvc3NpYmxlIGVuY29kaW5ncywgc2VlIHNlY3Rpb24gKlN0YW5kYXJkXG4gICBFbmNvZGluZ3MqLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLFxuICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mXG4gICBzdWZmaXhlcyB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXRcbiAgIHRoYXQgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZFxuICAgYnkgb25lIG9yIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGVcbiAgIGdpdmVuIHRhYiBzaXplLiAgVGFiIHBvc2l0aW9ucyBvY2N1ciBldmVyeSAqdGFic2l6ZSogY2hhcmFjdGVyc1xuICAgKGRlZmF1bHQgaXMgOCwgZ2l2aW5nIHRhYiBwb3NpdGlvbnMgYXQgY29sdW1ucyAwLCA4LCAxNiBhbmQgc28gb24pLlxuICAgVG8gZXhwYW5kIHRoZSBzdHJpbmcsIHRoZSBjdXJyZW50IGNvbHVtbiBpcyBzZXQgdG8gemVybyBhbmQgdGhlXG4gICBzdHJpbmcgaXMgZXhhbWluZWQgY2hhcmFjdGVyIGJ5IGNoYXJhY3Rlci4gIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgdGFiIChgYFxcdGBgKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlXG4gICByZXN1bHQgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi5cbiAgIChUaGUgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIG5ld2xpbmUgKGBgXFxuYGApIG9yIHJldHVybiAoYGBcXHJgYCksIGl0IGlzIGNvcGllZCBhbmQgdGhlIGN1cnJlbnRcbiAgIGNvbHVtbiBpcyByZXNldCB0byB6ZXJvLiAgQW55IG90aGVyIGNoYXJhY3RlciBpcyBjb3BpZWQgdW5jaGFuZ2VkXG4gICBhbmQgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGluY3JlbWVudGVkIGJ5IG9uZSByZWdhcmRsZXNzIG9mIGhvdyB0aGVcbiAgIGNoYXJhY3RlciBpcyByZXByZXNlbnRlZCB3aGVuIHByaW50ZWQuXG5cbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicygpXG4gICBcJzAxICAgICAgMDEyICAgICAwMTIzICAgIDAxMjM0XCdcbiAgID4+PiBcJzAxXFx0MDEyXFx0MDEyM1xcdDAxMjM0XCcuZXhwYW5kdGFicyg0KVxuICAgXCcwMSAgMDEyIDAxMjMgICAgMDEyMzRcJ1xuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgYGBmaW5kKClgYCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93IHRoZVxuICAgICBwb3NpdGlvbiBvZiAqc3ViKi4gIFRvIGNoZWNrIGlmICpzdWIqIGlzIGEgc3Vic3RyaW5nIG9yIG5vdCwgdXNlXG4gICAgIHRoZSBgYGluYGAgb3BlcmF0b3I6XG5cbiAgICAgICAgPj4+IFwnUHlcJyBpbiBcJ1B5dGhvblwnXG4gICAgICAgIFRydWVcblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyBgYHt9YGAuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byBgYHN0ci5mb3JtYXQoKiptYXBwaW5nKWBgLCBleGNlcHQgdGhhdCBgYG1hcHBpbmdgYCBpc1xuICAgdXNlZCBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhIGBgZGljdGBgIC4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvclxuICAgZXhhbXBsZSBgYG1hcHBpbmdgYCBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlclxuICAgYGBjYGAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgYGBUcnVlYGA6XG4gICBgYGMuaXNhbHBoYSgpYGAsIGBgYy5pc2RlY2ltYWwoKWBgLCBgYGMuaXNkaWdpdCgpYGAsIG9yXG4gICBgYGMuaXNudW1lcmljKClgYC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvXG4gICBmb3JtIGRlY2ltYWwtcmFkaXggbnVtYmVycywgZS5nLiBVKzA2NjAsIEFSQUJJQy1JTkRJQyBESUdJVCBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuICAgVXNlIGBga2V5d29yZC5pc2tleXdvcmQoKWBgIHRvIHRlc3QgZm9yIHJlc2VydmVkIGlkZW50aWZpZXJzIHN1Y2hcbiAgIGFzIGBgZGVmYGAgYW5kIGBgY2xhc3NgYC5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgbG93ZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gYGByZXByKClgYCBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvIGBgc3lzLnN0ZG91dGBgIG9yIGBgc3lzLnN0ZGVycmBgLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBbNF0gaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICppdGVyYWJsZSosIGluY2x1ZGluZyBgYGJ5dGVzYGAgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gYGBsZW4ocylgYC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuICAgVGhlIGxvd2VyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIubHN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGxlYWRpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcubHN0cmlwKClcbiAgIFwnc3BhY2lvdXMgICBcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcubHN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGUuY29tXCdcblxuc3RhdGljIHN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgYGBzdHIudHJhbnNsYXRlKClgYC5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgb24gZmFpbHVyZS5cblxuc3RyLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgcmZpbmQoKWBgIGJ1dCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiB0aGUgc3Vic3RyaW5nICpzdWIqXG4gICBpcyBub3QgZm91bmQuXG5cbnN0ci5yanVzdCh3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWYgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3JcbiAgIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkIG9yIGBgLTFgYCwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMSwsMlwnLnNwbGl0KFwnLFwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnXCcsIFwnMlwnXWBgKS4gIFRoZSAqc2VwKlxuICAgYXJndW1lbnQgbWF5IGNvbnNpc3Qgb2YgbXVsdGlwbGUgY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsXG4gICBgYFwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGApLiBTcGxpdHRpbmdcbiAgIGFuIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zIGBgW1wnXCddYGAuXG5cbiAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGBOb25lYGAsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhIGBgTm9uZWBgIHNlcGFyYXRvciByZXR1cm5zXG4gICBgYFtdYGAuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnIDEgIDIgICAzICBcJy5zcGxpdCgpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgLFxuICAgYW5kIGBgXCcgIDEgIDIgICAzICBcJy5zcGxpdChOb25lLCAxKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMiAgIDMgIFwnXWBgLlxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiBUaGlzIG1ldGhvZCB1c2VzIHRoZSAqdW5pdmVyc2FsIG5ld2xpbmVzKiBhcHByb2FjaCB0b1xuICAgc3BsaXR0aW5nIGxpbmVzLiBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbiAgIEZvciBleGFtcGxlLCBgYFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKClgYCByZXR1cm5zXG4gICBgYFtcJ2FiIGNcJywgXCdcJywgXCdkZSBmZ1wnLCBcJ2tsXCddYGAsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aFxuICAgYGBzcGxpdGxpbmVzKFRydWUpYGAgcmV0dXJucyBgYFtcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLFxuICAgXCdrbFxcclxcblwnXWBgLlxuXG4gICBVbmxpa2UgYGBzcGxpdCgpYGAgd2hlbiBhIGRlbGltaXRlciBzdHJpbmcgKnNlcCogaXMgZ2l2ZW4sIHRoaXNcbiAgIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QgZm9yIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBhIHRlcm1pbmFsXG4gICBsaW5lIGJyZWFrIGRvZXMgbm90IHJlc3VsdCBpbiBhbiBleHRyYSBsaW5lLlxuXG5zdHIuc3RhcnRzd2l0aChwcmVmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSAqcHJlZml4Kiwgb3RoZXJ3aXNlXG4gICByZXR1cm4gYGBGYWxzZWBgLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2tcbiAgIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgc3RyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGVcbiAgICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3Zpbmcgd2hpdGVzcGFjZS4gVGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHNcbiAgIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcuc3RyaXAoKVxuICAgXCdzcGFjaW91c1wnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5zdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlXCdcblxuc3RyLnN3YXBjYXNlKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkIHRvXG4gICBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJpbHkgdHJ1ZSB0aGF0XG4gICBgYHMuc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IHNgYC5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKVxuICAgICAgLi4uXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKG1hcClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHNcbiAgIChpbnRlZ2VycykgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBgYE5vbmVgYC4gIFVubWFwcGVkXG4gICBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSBgYHN0ci5tYWtldHJhbnMoKWBgIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBOb3RlOiBBbiBldmVuIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgICBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSBgYGNvZGVjc2BgIG1vZHVsZSAoc2VlXG4gICAgIGBgZW5jb2RpbmdzLmNwMTI1MWBgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIHRoZSBjYXNlZCBjaGFyYWN0ZXJzIFs0XVxuICAgY29udmVydGVkIHRvIHVwcGVyY2FzZS4gIE5vdGUgdGhhdCBgYHN0ci51cHBlcigpLmlzdXBwZXIoKWBgIG1pZ2h0XG4gICBiZSBgYEZhbHNlYGAgaWYgYGBzYGAgY29udGFpbnMgdW5jYXNlZCBjaGFyYWN0ZXJzIG9yIGlmIHRoZSBVbmljb2RlXG4gICBjYXRlZ29yeSBvZiB0aGUgcmVzdWx0aW5nIGNoYXJhY3RlcihzKSBpcyBub3QgIkx1IiAoTGV0dGVyLFxuICAgdXBwZXJjYXNlKSwgYnV0IGUuZy4gIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG4gICBUaGUgdXBwZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLlxuJywKKyAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkIGBgX19nZXRpdGVtX18oKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpc1xuY2xhc3MsIHRoZW4gYGB4W2ldYGAgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGBgdHlwZSh4KS5fX2dldGl0ZW1fXyh4LFxuaSlgYC4gIEV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlXG5hbiBleGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG5gYEF0dHJpYnV0ZUVycm9yYGAgb3IgYGBUeXBlRXJyb3JgYCkuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuYGBOb2RlTGlzdGBgIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y19pbmZvKClbMl1gYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIHdoZW4gdGhlIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpc1xuICAgICBlbmFibGVkIChpdFwncyBvbiBieSBkZWZhdWx0KS4gUmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdjYGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgdG9waWMuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGVcbiAgICJvZmZpY2lhbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSxcbiAgIHRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZFxuICAgdG8gcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgIGBgPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYFxuICAgYnV0IG5vdCBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuXG4gICAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpc1xuICAgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGBgc3RyKG9iamVjdClgYCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGZvcm1hdCgpYGBcbiAgIGFuZCBgYHByaW50KClgYCB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGVcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYVxuICAgKnN0cmluZyogb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gYGBvYmplY3QuX19yZXByX18oKWBgIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgYGBfX3N0cl9fKClgYCByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgYGBvYmplY3RgYFxuICAgY2FsbHMgYGBvYmplY3QuX19yZXByX18oKWBgLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBgYGJ5dGVzKClgYCB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgYGBieXRlc2BgIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBmb3JtYXQoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgIGBgc3RyLmZvcm1hdCgpYGAgbWV0aG9kIG9mIGNsYXNzIGBgc3RyYGApIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpc1xuICAgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzIHVwXG4gICB0byB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgYGBfX2Zvcm1hdF9fKClgYCwgaG93ZXZlciBtb3N0IGNsYXNzZXNcbiAgIHdpbGwgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3JcbiAgIHVzZSBhIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgY2FsbHNcbiAgIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZCBgYHg+PXlgYCBjYWxsc1xuICAgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIE5vdGU6IGBgaGFzaCgpYGAgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwncyBjdXN0b21cbiAgICAgYGBfX2hhc2hfXygpYGAgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgYGBQeV9zc2l6ZV90YGAuICBUaGlzIGlzXG4gICAgIHR5cGljYWxseSA4IGJ5dGVzIG9uIDY0LWJpdCBidWlsZHMgYW5kIDQgYnl0ZXMgb24gMzItYml0IGJ1aWxkcy5cbiAgICAgSWYgYW4gb2JqZWN0XCdzICAgYGBfX2hhc2hfXygpYGAgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzIG9mXG4gICAgIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbCBzdXBwb3J0ZWRcbiAgICAgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoIGBgcHl0aG9uIC1jICJpbXBvcnQgc3lzO1xuICAgICBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSJgYFxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiBgYF9fZXFfXygpYGAgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhIGBgX19oYXNoX18oKWBgIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXNcbiAgIGBgX19lcV9fKClgYCBidXQgbm90IGBgX19oYXNoX18oKWBgLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlXG4gICB1c2FibGUgYXMgaXRlbXMgaW4gaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG11dGFibGUgb2JqZWN0cyBhbmQgaW1wbGVtZW50cyBhbiBgYF9fZXFfXygpYGAgbWV0aG9kLCBpdCBzaG91bGRcbiAgIG5vdCBpbXBsZW1lbnQgYGBfX2hhc2hfXygpYGAsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZVxuICAgY29sbGVjdGlvbnMgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlXG4gICBvYmplY3RcJ3MgaGFzaCB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgYGBfX2VxX18oKWBgIGFuZCBgYF9faGFzaF9fKClgYCBtZXRob2RzXG4gICBieSBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCBgYHguX19oYXNoX18oKWBgIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCBgYHggPT0geWBgIGltcGxpZXMgYm90aCB0aGF0IGBgeCBpcyB5YGAgYW5kIGBgaGFzaCh4KSA9PVxuICAgaGFzaCh5KWBgLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBhbmQgZG9lcyBub3QgZGVmaW5lXG4gICBgYF9faGFzaF9fKClgYCB3aWxsIGhhdmUgaXRzIGBgX19oYXNoX18oKWBgIGltcGxpY2l0bHkgc2V0IHRvXG4gICBgYE5vbmVgYC4gIFdoZW4gdGhlIGBgX19oYXNoX18oKWBgIG1ldGhvZCBvZiBhIGNsYXNzIGlzIGBgTm9uZWBgLFxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlIGBgVHlwZUVycm9yYGAgd2hlblxuICAgYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmVcbiAgIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLFxuICAgY29sbGVjdGlvbnMuSGFzaGFibGVgYCkuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZVxuICAgaW50ZXJwcmV0ZXIgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nIGBgX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfX2BgLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgYGBfX2VxX18oKWBgIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSBgYF9faGFzaF9fID0gTm9uZWBgIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gYGBfX2hhc2hfXygpYGAgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSBgYFR5cGVFcnJvcmBgIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWRcbiAgIGFzIGhhc2hhYmxlIGJ5IGFuIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSBgYF9faGFzaF9fKClgYCB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmQgZGF0ZXRpbWVcbiAgICAgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyBgYFBZVEhPTkhBU0hTRUVEYGAuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLiAgV2hlbiB0aGlzIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlXG4gICBvYmplY3QgaXMgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fYm9vbF9fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXNcbiAgIGFyZSBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mIGBgeC5uYW1lYGApXG5mb3IgY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciBgYHNlbGZgYCkuICBgYG5hbWVgYCBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZVxuICAgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgIGBgX19nZXRhdHRyX18oKWBgIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gYGBfX2dldGF0dHJfXygpYGAgYW5kIGBgX19zZXRhdHRyX18oKWBgLikgVGhpcyBpcyBkb25lIGJvdGhcbiAgIGZvciBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlIGBgX19nZXRhdHRyX18oKWBgXG4gICB3b3VsZCBoYXZlIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlXG4gICB0aGF0IGF0IGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5XG4gICBub3QgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXNcbiAgIGBgX19nZXRhdHRyX18oKWBgLCB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3NcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgZWl0aGVyIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAuIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZClcbiAgIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLiBJbiBvcmRlclxuICAgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb25cbiAgIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvXG4gICBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKWBgLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kc1xuICAgICBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheCBvclxuICAgICBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiBgYF9fc2V0YXR0cl9fKClgYCB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlgYC5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgYGBfX3NldGF0dHJfXygpYGAgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgYGBkZWwgb2JqLm5hbWVgYCBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gYGBkaXIoKWBgIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiBgYGRpcigpYGAgY29udmVydHMgdGhlIHJldHVybmVkIHNlcXVlbmNlIHRvIGEgbGlzdCBhbmRcbiAgIHNvcnRzIGl0LlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnIGBgX19kaWN0X19gYC5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yIGBgTm9uZWBgIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCwgYW5kXG5gYF9fZGVsZXRlX18oKWBgLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LFxuaXQgaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCBgYGEueGBgIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCBgYGEuX19kaWN0X19bXCd4XCddYGAsIHRoZW5cbmBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ11gYCwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG5gYHR5cGUoYSlgYCBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsIGBgYS54YGAuXG5Ib3cgdGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gYGBhYGA6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgIGBgeC5fX2dldF9fKGEpYGAuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCBgYGEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiBgYHR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSlgYC5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCBgYEEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICBgYEEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSlgYC5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgYGBhYGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBzdXBlcmBgLCB0aGVuIHRoZSBiaW5kaW5nIGBgc3VwZXIoQixcbiAgIG9iaikubSgpYGAgc2VhcmNoZXMgYGBvYmouX19jbGFzc19fLl9fbXJvX19gYCBmb3IgdGhlIGJhc2UgY2xhc3NcbiAgIGBgQWBgIGltbWVkaWF0ZWx5IHByZWNlZGluZyBgYEJgYCBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yXG4gICB3aXRoIHRoZSBjYWxsOiBgYEEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKWBgLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgIGFuZCBgYF9fZGVsZXRlX18oKWBgLlxuSWYgaXQgZG9lcyBub3QgZGVmaW5lIGBgX19nZXRfXygpYGAsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbFxucmV0dXJuIHRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlXG5vYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgYGBfX3NldF9fKClgYFxuYW5kL29yIGBgX19kZWxldGVfXygpYGAsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzXG5uZWl0aGVyLCBpdCBpcyBhIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9yc1xuZGVmaW5lIGJvdGggYGBfX2dldF9fKClgYCBhbmQgYGBfX3NldF9fKClgYCwgd2hpbGUgbm9uLWRhdGFcbmRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGUgYGBfX2dldF9fKClgYCBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGhcbmBgX19zZXRfXygpYGAgYW5kIGBgX19nZXRfXygpYGAgZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb25cbmluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJbiBjb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlXG5vdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyBgYHN0YXRpY21ldGhvZCgpYGAgYW5kIGBgY2xhc3NtZXRob2QoKWBgKVxuYXJlIGltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgYGBwcm9wZXJ0eSgpYGAgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyBgYEF0dHJpYnV0ZUVycm9yYGAuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gIGBgXCdfX2RpY3RfX1wnYGAgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzIGRlZmluaW5nXG4gICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW5zdGFuY2VzLiBJZiB3ZWFrXG4gIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGQgYGBcJ19fd2Vha3JlZl9fXCdgYCB0byB0aGVcbiAgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZSBpbnN0YW5jZVxuICB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlIChleGNlcHQgYnlcbiAgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS4gVGhpc1xuICByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzIGBgaW50YGAsIGBgc3RyYGAgYW5kXG4gIGBgdHVwbGVgYC5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzIG1heVxuICBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgYGB0eXBlKClgYC4gVGhlIGNsYXNzIGJvZHlcbmlzIGV4ZWN1dGVkIGluIGEgbmV3IG5hbWVzcGFjZSBhbmQgdGhlIGNsYXNzIG5hbWUgaXMgYm91bmQgbG9jYWxseSB0b1xudGhlIHJlc3VsdCBvZiBgYHR5cGUobmFtZSwgYmFzZXMsIG5hbWVzcGFjZSlgYC5cblxuVGhlIGNsYXNzIGNyZWF0aW9uIHByb2Nlc3MgY2FuIGJlIGN1c3RvbWlzZWQgYnkgcGFzc2luZyB0aGVcbmBgbWV0YWNsYXNzYGAga2V5d29yZCBhcmd1bWVudCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBsaW5lLCBvciBieVxuaW5oZXJpdGluZyBmcm9tIGFuIGV4aXN0aW5nIGNsYXNzIHRoYXQgaW5jbHVkZWQgc3VjaCBhbiBhcmd1bWVudC4gSW5cbnRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgYm90aCBgYE15Q2xhc3NgYCBhbmQgYGBNeVN1YmNsYXNzYGAgYXJlXG5pbnN0YW5jZXMgb2YgYGBNZXRhYGA6XG5cbiAgIGNsYXNzIE1ldGEodHlwZSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeUNsYXNzKG1ldGFjbGFzcz1NZXRhKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15U3ViY2xhc3MoTXlDbGFzcyk6XG4gICAgICAgcGFzc1xuXG5Bbnkgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uXG5hcmUgcGFzc2VkIHRocm91Z2ggdG8gYWxsIG1ldGFjbGFzcyBvcGVyYXRpb25zIGRlc2NyaWJlZCBiZWxvdy5cblxuV2hlbiBhIGNsYXNzIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQsIHRoZSBmb2xsb3dpbmcgc3RlcHMgb2NjdXI6XG5cbiogdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkXG5cbiogdGhlIGNsYXNzIG5hbWVzcGFjZSBpcyBwcmVwYXJlZFxuXG4qIHRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkXG5cbiogdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkXG5cblxuRGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGZvciBhIGNsYXNzIGRlZmluaXRpb24gaXMgZGV0ZXJtaW5lZCBhc1xuZm9sbG93czpcblxuKiBpZiBubyBiYXNlcyBhbmQgbm8gZXhwbGljaXQgbWV0YWNsYXNzIGFyZSBnaXZlbiwgdGhlbiBgYHR5cGUoKWBgIGlzXG4gIHVzZWRcblxuKiBpZiBhbiBleHBsaWNpdCBtZXRhY2xhc3MgaXMgZ2l2ZW4gYW5kIGl0IGlzICpub3QqIGFuIGluc3RhbmNlIG9mXG4gIGBgdHlwZSgpYGAsIHRoZW4gaXQgaXMgdXNlZCBkaXJlY3RseSBhcyB0aGUgbWV0YWNsYXNzXG5cbiogaWYgYW4gaW5zdGFuY2Ugb2YgYGB0eXBlKClgYCBpcyBnaXZlbiBhcyB0aGUgZXhwbGljaXQgbWV0YWNsYXNzLCBvclxuICBiYXNlcyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyB1c2VkXG5cblRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHNlbGVjdGVkIGZyb20gdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkXG5tZXRhY2xhc3MgKGlmIGFueSkgYW5kIHRoZSBtZXRhY2xhc3NlcyAoaS5lLiBgYHR5cGUoY2xzKWBgKSBvZiBhbGxcbnNwZWNpZmllZCBiYXNlIGNsYXNzZXMuIFRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIG9uZSB3aGljaCBpcyBhXG5zdWJ0eXBlIG9mICphbGwqIG9mIHRoZXNlIGNhbmRpZGF0ZSBtZXRhY2xhc3Nlcy4gSWYgbm9uZSBvZiB0aGVcbmNhbmRpZGF0ZSBtZXRhY2xhc3NlcyBtZWV0cyB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvblxud2lsbCBmYWlsIHdpdGggYGBUeXBlRXJyb3JgYC5cblxuXG5QcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuT25jZSB0aGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGhhcyBiZWVuIGlkZW50aWZpZWQsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgcHJlcGFyZWQuIElmIHRoZSBtZXRhY2xhc3MgaGFzIGEgYGBfX3ByZXBhcmVfX2BgXG5hdHRyaWJ1dGUsIGl0IGlzIGNhbGxlZCBhcyBgYG5hbWVzcGFjZSA9IG1ldGFjbGFzcy5fX3ByZXBhcmVfXyhuYW1lLFxuYmFzZXMsICoqa3dkcylgYCAod2hlcmUgdGhlIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGlmIGFueSwgY29tZVxuZnJvbSB0aGUgY2xhc3MgZGVmaW5pdGlvbikuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIG5vIGBgX19wcmVwYXJlX19gYCBhdHRyaWJ1dGUsIHRoZW4gdGhlIGNsYXNzXG5uYW1lc3BhY2UgaXMgaW5pdGlhbGlzZWQgYXMgYW4gZW1wdHkgYGBkaWN0KClgYCBpbnN0YW5jZS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzMDAwXG4gICAgICBJbnRyb2R1Y2VkIHRoZSBgYF9fcHJlcGFyZV9fYGAgbmFtZXNwYWNlIGhvb2tcblxuXG5FeGVjdXRpbmcgdGhlIGNsYXNzIGJvZHlcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgY2xhc3MgYm9keSBpcyBleGVjdXRlZCAoYXBwcm94aW1hdGVseSkgYXMgYGBleGVjKGJvZHksIGdsb2JhbHMoKSxcbm5hbWVzcGFjZSlgYC4gVGhlIGtleSBkaWZmZXJlbmNlIGZyb20gYSBub3JtYWwgY2FsbCB0byBgYGV4ZWMoKWBgIGlzXG50aGF0IGxleGljYWwgc2NvcGluZyBhbGxvd3MgdGhlIGNsYXNzIGJvZHkgKGluY2x1ZGluZyBhbnkgbWV0aG9kcykgdG9cbnJlZmVyZW5jZSBuYW1lcyBmcm9tIHRoZSBjdXJyZW50IGFuZCBvdXRlciBzY29wZXMgd2hlbiB0aGUgY2xhc3NcbmRlZmluaXRpb24gb2NjdXJzIGluc2lkZSBhIGZ1bmN0aW9uLlxuXG5Ib3dldmVyLCBldmVuIHdoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gb2NjdXJzIGluc2lkZSB0aGUgZnVuY3Rpb24sXG5tZXRob2RzIGRlZmluZWQgaW5zaWRlIHRoZSBjbGFzcyBzdGlsbCBjYW5ub3Qgc2VlIG5hbWVzIGRlZmluZWQgYXQgdGhlXG5jbGFzcyBzY29wZS4gQ2xhc3MgdmFyaWFibGVzIG11c3QgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgZmlyc3RcbnBhcmFtZXRlciBvZiBpbnN0YW5jZSBvciBjbGFzcyBtZXRob2RzLCBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIGF0IGFsbFxuZnJvbSBzdGF0aWMgbWV0aG9kcy5cblxuXG5DcmVhdGluZyB0aGUgY2xhc3Mgb2JqZWN0XG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbk9uY2UgdGhlIGNsYXNzIG5hbWVzcGFjZSBoYXMgYmVlbiBwb3B1bGF0ZWQgYnkgZXhlY3V0aW5nIHRoZSBjbGFzc1xuYm9keSwgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGNhbGxpbmcgYGBtZXRhY2xhc3MobmFtZSwgYmFzZXMsXG5uYW1lc3BhY2UsICoqa3dkcylgYCAodGhlIGFkZGl0aW9uYWwga2V5d29yZHMgcGFzc2VkIGhlcmUgYXJlIHRoZSBzYW1lXG5hcyB0aG9zZSBwYXNzZWQgdG8gYGBfX3ByZXBhcmVfX2BgKS5cblxuVGhpcyBjbGFzcyBvYmplY3QgaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgcmVmZXJlbmNlZCBieSB0aGUgemVyby1cbmFyZ3VtZW50IGZvcm0gb2YgYGBzdXBlcigpYGAuIGBgX19jbGFzc19fYGAgaXMgYW4gaW1wbGljaXQgY2xvc3VyZVxucmVmZXJlbmNlIGNyZWF0ZWQgYnkgdGhlIGNvbXBpbGVyIGlmIGFueSBtZXRob2RzIGluIGEgY2xhc3MgYm9keSByZWZlclxudG8gZWl0aGVyIGBgX19jbGFzc19fYGAgb3IgYGBzdXBlcmBgLiBUaGlzIGFsbG93cyB0aGUgemVybyBhcmd1bWVudFxuZm9ybSBvZiBgYHN1cGVyKClgYCB0byBjb3JyZWN0bHkgaWRlbnRpZnkgdGhlIGNsYXNzIGJlaW5nIGRlZmluZWRcbmJhc2VkIG9uIGxleGljYWwgc2NvcGluZywgd2hpbGUgdGhlIGNsYXNzIG9yIGluc3RhbmNlIHRoYXQgd2FzIHVzZWQgdG9cbm1ha2UgdGhlIGN1cnJlbnQgY2FsbCBpcyBpZGVudGlmaWVkIGJhc2VkIG9uIHRoZSBmaXJzdCBhcmd1bWVudCBwYXNzZWRcbnRvIHRoZSBtZXRob2QuXG5cbkFmdGVyIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjbGFzc1xuZGVjb3JhdG9ycyBpbmNsdWRlZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiAoaWYgYW55KSBhbmQgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgdGhlIGRlZmluZWQgY2xhc3MuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTM1KiogLSBOZXcgc3VwZXJcbiAgICAgIERlc2NyaWJlcyB0aGUgaW1wbGljaXQgYGBfX2NsYXNzX19gYCBjbG9zdXJlIHJlZmVyZW5jZVxuXG5cbk1ldGFjbGFzcyBleGFtcGxlXG4tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGUgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW5cbmBgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgYCB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzXG53ZXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX3ByZXBhcmVfXygpYGAgbWV0aG9kIHdoaWNoIHJldHVybnMgYW5cbmVtcHR5IGBgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgYC4gIFRoYXQgbWFwcGluZyByZWNvcmRzIHRoZSBtZXRob2RzXG5hbmQgYXR0cmlidXRlcyBvZiAqQSogYXMgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNsYXNzXG5zdGF0ZW1lbnQuIE9uY2UgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGV4ZWN1dGVkLCB0aGUgb3JkZXJlZCBkaWN0aW9uYXJ5XG5pcyBmdWxseSBwb3B1bGF0ZWQgYW5kIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCBgYG1lbWJlcnNgYC5cblxuXG5DdXN0b21pemluZyBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGVcbmBgaXNpbnN0YW5jZSgpYGAgYW5kIGBgaXNzdWJjbGFzcygpYGAgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzIGBgYWJjLkFCQ01ldGFgYCBpbXBsZW1lbnRzIHRoZXNlIG1ldGhvZHNcbmluIG9yZGVyIHRvIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFzXG4idmlydHVhbCBiYXNlIGNsYXNzZXMiIHRvIGFueSBjbGFzcyBvciB0eXBlIChpbmNsdWRpbmcgYnVpbHQtaW5cbnR5cGVzKSwgaW5jbHVkaW5nIG90aGVyIEFCQ3MuXG5cbmNsYXNzLl9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqaW5zdGFuY2UqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIGluc3RhbmNlIG9mICpjbGFzcyouIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgIGBgaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpYGAuXG5cbmNsYXNzLl9fc3ViY2xhc3NjaGVja19fKHNlbGYsIHN1YmNsYXNzKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqc3ViY2xhc3MqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIHN1YmNsYXNzIG9mICpjbGFzcyouICBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzc3ViY2xhc3Moc3ViY2xhc3MsIGNsYXNzKWBgLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG4gICAgICBJbmNsdWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgY3VzdG9taXppbmcgYGBpc2luc3RhbmNlKClgYCBhbmRcbiAgICAgIGBgaXNzdWJjbGFzcygpYGAgYmVoYXZpb3IgdGhyb3VnaCBgYF9faW5zdGFuY2VjaGVja19fKClgYCBhbmRcbiAgICAgIGBgX19zdWJjbGFzc2NoZWNrX18oKWBgLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eVxuICAgICAgaW4gdGhlIGNvbnRleHQgb2YgYWRkaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3NlcyAoc2VlIHRoZSBgYGFiY2BgXG4gICAgICBtb2R1bGUpIHRvIHRoZSBsYW5ndWFnZS5cblxuXG5FbXVsYXRpbmcgY2FsbGFibGUgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fY2FsbF9fKHNlbGZbLCBhcmdzLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzICJjYWxsZWQiIGFzIGEgZnVuY3Rpb247IGlmIHRoaXMgbWV0aG9kXG4gICBpcyBkZWZpbmVkLCBgYHgoYXJnMSwgYXJnMiwgLi4uKWBgIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgYGB4Ll9fY2FsbF9fKGFyZzEsIGFyZzIsIC4uLilgYC5cblxuXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoIGBgMCA8PSBrIDwgTmBgXG53aGVyZSAqTiogaXMgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UsIG9yIHNsaWNlIG9iamVjdHMsIHdoaWNoXG5kZWZpbmUgYSByYW5nZSBvZiBpdGVtcy4gIEl0IGlzIGFsc28gcmVjb21tZW5kZWQgdGhhdCBtYXBwaW5ncyBwcm92aWRlXG50aGUgbWV0aG9kcyBgYGtleXMoKWBgLCBgYHZhbHVlcygpYGAsIGBgaXRlbXMoKWBgLCBgYGdldCgpYGAsXG5gYGNsZWFyKClgYCwgYGBzZXRkZWZhdWx0KClgYCwgYGBwb3AoKWBgLCBgYHBvcGl0ZW0oKWBgLCBgYGNvcHkoKWBgLFxuYW5kIGBgdXBkYXRlKClgYCBiZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmRcbmRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgTXV0YWJsZU1hcHBpbmdgYCBhYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHNcbmZyb20gYSBiYXNlIHNldCBvZiBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsXG5gYF9fZGVsaXRlbV9fKClgYCwgYW5kIGBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlXG5tZXRob2RzIGBgYXBwZW5kKClgYCwgYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsXG5gYGluc2VydCgpYGAsIGBgcG9wKClgYCwgYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLFxubGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkXG5pbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCxcbmBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLCBgYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGBcbmRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXRcbmlzIHJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3JcbnNlcXVlbmNlcywgaXQgc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9faXRlcl9fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IGl0ZXJhdGlvbiB0aHJvdWdoIHRoZVxuY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsIGBgX19pdGVyX18oKWBgIHNob3VsZCBiZSB0aGUgc2FtZSBhc1xuYGBrZXlzKClgYDsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGUgdGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYGxlbigpYGAuICBTaG91bGQgcmV0dXJuXG4gICB0aGUgbGVuZ3RoIG9mIHRoZSBvYmplY3QsIGFuIGludGVnZXIgYGA+PWBgIDAuICBBbHNvLCBhbiBvYmplY3RcbiAgIHRoYXQgZG9lc25cJ3QgZGVmaW5lIGEgYGBfX2Jvb2xfXygpYGAgbWV0aG9kIGFuZCB3aG9zZSBgYF9fbGVuX18oKWBgXG4gICBtZXRob2QgcmV0dXJucyB6ZXJvIGlzIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuXG5cbm9iamVjdC5fX2xlbmd0aF9oaW50X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBgYG9wZXJhdG9yLmxlbmd0aF9oaW50KClgYC4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyIGBgPj1gYCAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgLCB0aGUgbWVtYmVyc2hpcFxuICAgdGVzdCBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhIGBgX19pdGVyX18oKWBgLCB0aGVuIHRoZSBvbGRcbiAgIHNlcXVlbmNlIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgYGBfX2dldGl0ZW1fXygpYGAsIHNlZSAqdGhpc1xuICAgc2VjdGlvbiBpbiB0aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgLiAgTm90ZSB0aGF0XG4gICBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHlcbiAgIGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yXG4gICBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW5cbiAgIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLFxuICAgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgYGBwb3coKWBgIHdpbGwgbm90IHRyeSBjYWxsaW5nIGBgX19ycG93X18oKWBgXG4gICAodGhlIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLFxuICAgYGAqKj1gYCwgYGA8PD1gYCwgYGA+Pj1gYCwgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzXG4gICBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmRcbiAgIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsXG4gICAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgYGB4ICs9IHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9faWFkZF9fKHkpYGAgaXNcbiAgIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZG9lcyBub3QgZGVmaW5lIGFcbiAgIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9fYWRkX18oeSlgYCBhbmQgYGB5Ll9fcmFkZF9fKHgpYGAgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGBgeCArIHlgYC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYC1gYCwgYGArYGAsXG4gICBgYGFicygpYGAgYW5kIGBgfmBgKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNvbXBsZXgoKWBgLFxuICAgYGBpbnQoKWBgLCBgYGZsb2F0KClgYCBhbmQgYGByb3VuZCgpYGAuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2ZcbiAgIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gYGBiaW4oKWBgLCBgYGhleCgpYGAgYW5kIGBgb2N0KClgYCBmdW5jdGlvbnMpLiBNdXN0IHJldHVyblxuICAgYW4gaW50ZWdlci5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKKyAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSBgYHN0ci5mb3JtYXQoKWBgLFxuKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBhbmQgKlN0cmluZyBGb3JtYXR0aW5nKikgYW5kIHRoZSBvdGhlciBiYXNlZCBvblxuQyBgYHByaW50ZmBgIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXNcbmFuZCBpcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlXG5jYXNlcyBpdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSBgYHJlYGAgbW9kdWxlKS5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNhc2Vmb2xkKClcblxuICAgUmV0dXJuIGEgY2FzZWZvbGRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuIENhc2Vmb2xkZWQgc3RyaW5ncyBtYXkgYmVcbiAgIHVzZWQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLlxuXG4gICBDYXNlZm9sZGluZyBpcyBzaW1pbGFyIHRvIGxvd2VyY2FzaW5nIGJ1dCBtb3JlIGFnZ3Jlc3NpdmUgYmVjYXVzZVxuICAgaXQgaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIGFsbCBjYXNlIGRpc3RpbmN0aW9ucyBpbiBhIHN0cmluZy4gRm9yXG4gICBleGFtcGxlLCB0aGUgR2VybWFuIGxvd2VyY2FzZSBsZXR0ZXIgYGBcJ1x4YzNceDlmXCdgYCBpcyBlcXVpdmFsZW50IHRvXG4gICBgYCJzcyJgYC4gU2luY2UgaXQgaXMgYWxyZWFkeSBsb3dlcmNhc2UsIGBgbG93ZXIoKWBgIHdvdWxkIGRvXG4gICBub3RoaW5nIHRvIGBgXCdceGMzXHg5ZlwnYGA7IGBgY2FzZWZvbGQoKWBgIGNvbnZlcnRzIGl0IHRvIGBgInNzImBgLlxuXG4gICBUaGUgY2FzZWZvbGRpbmcgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyBgYFwndXRmLThcJ2BgLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyBgYFwnc3RyaWN0XCdgYCxcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSBgYFVuaWNvZGVFcnJvcmBgLiBPdGhlclxuICAgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCwgYGBcJ3JlcGxhY2VcJ2BgLFxuICAgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZVxuICAgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZVxuICAgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmRcbiAgIEVuY29kaW5ncyouXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2ZcbiAgIHN1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdFxuICAgdGhhdCBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyh0YWJzaXplPTgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKGBgXFx0YGApLCBvbmUgb3IgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGVcbiAgIHJlc3VsdCB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4gaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLlxuICAgKFRoZSB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QgY29waWVkLikgIElmIHRoZSBjaGFyYWN0ZXIgaXMgYVxuICAgbmV3bGluZSAoYGBcXG5gYCkgb3IgcmV0dXJuIChgYFxccmBgKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudFxuICAgY29sdW1uIGlzIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWRcbiAgIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCBpbiB0aGUgc2xpY2UgYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuXG5cbiAgIE5vdGU6IFRoZSBgYGZpbmQoKWBgIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBvbmx5IGlmIHlvdSBuZWVkIHRvIGtub3cgdGhlXG4gICAgIHBvc2l0aW9uIG9mICpzdWIqLiAgVG8gY2hlY2sgaWYgKnN1YiogaXMgYSBzdWJzdHJpbmcgb3Igbm90LCB1c2VcbiAgICAgdGhlIGBgaW5gYCBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvIGBgc3RyLmZvcm1hdCgqKm1hcHBpbmcpYGAsIGV4Y2VwdCB0aGF0IGBgbWFwcGluZ2BgIGlzXG4gICB1c2VkIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgYGBkaWN0YGAgLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yXG4gICBleGFtcGxlIGBgbWFwcGluZ2BgIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyXG4gICBgYGNgYCBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyBgYFRydWVgYDpcbiAgIGBgYy5pc2FscGhhKClgYCwgYGBjLmlzZGVjaW1hbCgpYGAsIGBgYy5pc2RpZ2l0KClgYCwgb3JcbiAgIGBgYy5pc251bWVyaWMoKWBgLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbiAgIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG4gICBVc2UgYGBrZXl3b3JkLmlza2V5d29yZCgpYGAgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaFxuICAgYXMgYGBkZWZgYCBhbmQgYGBjbGFzc2BgLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc251bWVyaWMoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBudW1lcmljIGNoYXJhY3RlcnMsXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBOdW1lcmljXG4gICBjaGFyYWN0ZXJzIGluY2x1ZGUgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZVxuICAgdGhlIFVuaWNvZGUgbnVtZXJpYyB2YWx1ZSBwcm9wZXJ0eSwgZS5nLiBVKzIxNTUsIFZVTEdBUiBGUkFDVElPTlxuICAgT05FIEZJRlRILiAgRm9ybWFsbHksIG51bWVyaWMgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCB0aGVcbiAgIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCwgTnVtZXJpY19UeXBlPURlY2ltYWwgb3JcbiAgIE51bWVyaWNfVHlwZT1OdW1lcmljLlxuXG5zdHIuaXNwcmludGFibGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBwcmludGFibGUgb3IgdGhlXG4gICBzdHJpbmcgaXMgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIE5vbnByaW50YWJsZSBjaGFyYWN0ZXJzIGFyZVxuICAgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlciBkYXRhYmFzZSBhc1xuICAgIk90aGVyIiBvciAiU2VwYXJhdG9yIiwgZXhjZXB0aW5nIHRoZSBBU0NJSSBzcGFjZSAoMHgyMCkgd2hpY2ggaXNcbiAgIGNvbnNpZGVyZWQgcHJpbnRhYmxlLiAgKE5vdGUgdGhhdCBwcmludGFibGUgY2hhcmFjdGVycyBpbiB0aGlzXG4gICBjb250ZXh0IGFyZSB0aG9zZSB3aGljaCBzaG91bGQgbm90IGJlIGVzY2FwZWQgd2hlbiBgYHJlcHIoKWBgIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gYGBzeXMuc3Rkb3V0YGAgb3IgYGBzeXMuc3RkZXJyYGAuKVxuXG5zdHIuaXNzcGFjZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGFyZSBvbmx5IHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgV2hpdGVzcGFjZVxuICAgY2hhcmFjdGVycyAgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJPdGhlciIgb3IgIlNlcGFyYXRvciIgYW5kIHRob3NlIHdpdGggYmlkaXJlY3Rpb25hbFxuICAgcHJvcGVydHkgYmVpbmcgb25lIG9mICJXUyIsICJCIiwgb3IgIlMiLlxuXG5zdHIuaXN0aXRsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB0aXRsZWNhc2VkIHN0cmluZyBhbmQgdGhlcmUgaXMgYXRcbiAgIGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZvciBleGFtcGxlIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5XG4gICBmb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuXG4gICBSZXR1cm4gZmFsc2Ugb3RoZXJ3aXNlLlxuXG5zdHIuaXN1cHBlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIFs0XSBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2VcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5qb2luKGl0ZXJhYmxlKVxuXG4gICBSZXR1cm4gYSBzdHJpbmcgd2hpY2ggaXMgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHN0cmluZ3MgaW4gdGhlXG4gICAqaXRlcmFibGUqICppdGVyYWJsZSouICBBIGBgVHlwZUVycm9yYGAgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nIGBgYnl0ZXNgYCBvYmplY3RzLlxuICAgVGhlIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byBgYGxlbihzKWBgLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLlxuXG4gICBUaGUgbG93ZXJjYXNpbmcgYWxnb3JpdGhtIHVzZWQgaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICBgYHN0ci50cmFuc2xhdGUoKWBgLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gYGBsZW4ocylgYC5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgYGBOb25lYGAsIGFueSB3aGl0ZXNwYWNlIHN0cmluZyBpcyBhIHNlcGFyYXRvci4gIEV4Y2VwdCBmb3JcbiAgIHNwbGl0dGluZyBmcm9tIHRoZSByaWdodCwgYGByc3BsaXQoKWBgIGJlaGF2ZXMgbGlrZSBgYHNwbGl0KClgYFxuICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5yc3RyaXAoKVxuICAgXCcgICBzcGFjaW91c1wnXG4gICA+Pj4gXCdtaXNzaXNzaXBwaVwnLnJzdHJpcChcJ2lwelwnKVxuICAgXCdtaXNzaXNzXCdcblxuc3RyLnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgYGAtMWBgLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuIFRoaXMgbWV0aG9kIHVzZXMgdGhlICp1bml2ZXJzYWwgbmV3bGluZXMqIGFwcHJvYWNoIHRvXG4gICBzcGxpdHRpbmcgbGluZXMuIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCdhYiBjXFxuXFxuZGUgZmdcXHJrbFxcclxcblwnLnNwbGl0bGluZXMoKWBgIHJldHVybnNcbiAgIGBgW1wnYWIgY1wnLCBcJ1wnLCBcJ2RlIGZnXCcsIFwna2xcJ11gYCwgd2hpbGUgdGhlIHNhbWUgY2FsbCB3aXRoXG4gICBgYHNwbGl0bGluZXMoVHJ1ZSlgYCByZXR1cm5zIGBgW1wnYWIgY1xcblwnLCBcJ1xcblwnLCBcJ2RlIGZnXFxyXCcsXG4gICBcJ2tsXFxyXFxuXCddYGAuXG5cbiAgIFVubGlrZSBgYHNwbGl0KClgYCB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpc1xuICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWxcbiAgIGxpbmUgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4gTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlIHRoYXRcbiAgIGBgcy5zd2FwY2FzZSgpLnN3YXBjYXNlKCkgPT0gc2BgLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAuLi4gICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpXG4gICAgICAuLi5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIGBgTm9uZWBgLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlIGBgc3RyLm1ha2V0cmFucygpYGAgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWVcbiAgICAgYGBlbmNvZGluZ3MuY3AxMjUxYGAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLiAgTm90ZSB0aGF0IGBgc3RyLnVwcGVyKCkuaXN1cHBlcigpYGAgbWlnaHRcbiAgIGJlIGBgRmFsc2VgYCBpZiBgYHNgYCBjb250YWlucyB1bmNhc2VkIGNoYXJhY3RlcnMgb3IgaWYgdGhlIFVuaWNvZGVcbiAgIGNhdGVnb3J5IG9mIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyKHMpIGlzIG5vdCAiTHUiIChMZXR0ZXIsXG4gICB1cHBlcmNhc2UpLCBidXQgZS5nLiAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbiAgIFRoZSB1cHBlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuXG4nLAogICdzdHJpbmdzJzogJ1xuU3RyaW5nIGFuZCBCeXRlcyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5TdHJpbmcgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIHN0cmluZ2xpdGVyYWwgICA6Oj0gW3N0cmluZ3ByZWZpeF0oc2hvcnRzdHJpbmcgfCBsb25nc3RyaW5nKVxuICAgc3RyaW5ncHJlZml4ICAgIDo6PSAiciIgfCAidSIgfCAiUiIgfCAiVSJcbiAgIHNob3J0c3RyaW5nICAgICA6Oj0gIlwnIiBzaG9ydHN0cmluZ2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydHN0cmluZ2l0ZW0qIFwnIlwnXG4gICBsb25nc3RyaW5nICAgICAgOjo9ICJcJ1wnXCciIGxvbmdzdHJpbmdpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ3N0cmluZ2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0c3RyaW5naXRlbSA6Oj0gc2hvcnRzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBsb25nc3RyaW5naXRlbSAgOjo9IGxvbmdzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBzaG9ydHN0cmluZ2NoYXIgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdzdHJpbmdjaGFyICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgc3RyaW5nZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgc291cmNlIGNoYXJhY3Rlcj5cblxuICAgYnl0ZXNsaXRlcmFsICAgOjo9IGJ5dGVzcHJlZml4KHNob3J0Ynl0ZXMgfCBsb25nYnl0ZXMpXG4gICBieXRlc3ByZWZpeCAgICA6Oj0gImIiIHwgIkIiIHwgImJyIiB8ICJCciIgfCAiYlIiIHwgIkJSIiB8ICJyYiIgfCAickIiIHwgIlJiIiB8ICJSQiJcbiAgIHNob3J0Ynl0ZXMgICAgIDo6PSAiXCciIHNob3J0Ynl0ZXNpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRieXRlc2l0ZW0qIFwnIlwnXG4gICBsb25nYnl0ZXMgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ2J5dGVzaXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdieXRlc2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0Ynl0ZXNpdGVtIDo6PSBzaG9ydGJ5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBsb25nYnl0ZXNpdGVtICA6Oj0gbG9uZ2J5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBzaG9ydGJ5dGVzY2hhciA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nYnl0ZXNjaGFyICA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBieXRlc2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IEFTQ0lJIGNoYXJhY3Rlcj5cblxuT25lIHN5bnRhY3RpYyByZXN0cmljdGlvbiBub3QgaW5kaWNhdGVkIGJ5IHRoZXNlIHByb2R1Y3Rpb25zIGlzIHRoYXRcbndoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWQgYmV0d2VlbiB0aGUgYGBzdHJpbmdwcmVmaXhgYCBvclxuYGBieXRlc3ByZWZpeGBgIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0XG5pcyBkZWZpbmVkIGJ5IHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgVVRGLTggaWYgbm8gZW5jb2RpbmdcbmRlY2xhcmF0aW9uIGlzIGdpdmVuIGluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nXG5kZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoYGBcJ2BgKSBvciBkb3VibGUgcXVvdGVzIChgYCJgYCkuICBUaGV5IGNhbiBhbHNvIGJlXG5lbmNsb3NlZCBpbiBtYXRjaGluZyBncm91cHMgb2YgdGhyZWUgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKHRoZXNlXG5hcmUgZ2VuZXJhbGx5IHJlZmVycmVkIHRvIGFzICp0cmlwbGUtcXVvdGVkIHN0cmluZ3MqKS4gIFRoZSBiYWNrc2xhc2hcbihgYFxcYGApIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggYGBcJ2JcJ2BgIG9yIGBgXCdCXCdgYDsgdGhleVxucHJvZHVjZSBhbiBpbnN0YW5jZSBvZiB0aGUgYGBieXRlc2BgIHR5cGUgaW5zdGVhZCBvZiB0aGUgYGBzdHJgYCB0eXBlLlxuVGhleSBtYXkgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnM7IGJ5dGVzIHdpdGggYSBudW1lcmljIHZhbHVlIG9mXG4xMjggb3IgZ3JlYXRlciBtdXN0IGJlIGV4cHJlc3NlZCB3aXRoIGVzY2FwZXMuXG5cbkFzIG9mIFB5dGhvbiAzLjMgaXQgaXMgcG9zc2libGUgYWdhaW4gdG8gcHJlZml4IHVuaWNvZGUgc3RyaW5ncyB3aXRoIGFcbmBgdWBgIHByZWZpeCB0byBzaW1wbGlmeSBtYWludGVuYW5jZSBvZiBkdWFsIDIueCBhbmQgMy54IGNvZGViYXNlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyIGBgXCdyXCdgYCBvciBgYFwnUlwnYGA7IHN1Y2ggc3RyaW5ncyBhcmUgY2FsbGVkICpyYXcgc3RyaW5ncyogYW5kXG50cmVhdCBiYWNrc2xhc2hlcyBhcyBsaXRlcmFsIGNoYXJhY3RlcnMuICBBcyBhIHJlc3VsdCwgaW4gc3RyaW5nXG5saXRlcmFscywgYGBcJ1xcVVwnYGAgYW5kIGBgXCdcXHVcJ2BgIGVzY2FwZXMgaW4gcmF3IHN0cmluZ3MgYXJlIG5vdCB0cmVhdGVkXG5zcGVjaWFsbHkuIEdpdmVuIHRoYXQgUHl0aG9uIDIueFwncyByYXcgdW5pY29kZSBsaXRlcmFscyBiZWhhdmVcbmRpZmZlcmVudGx5IHRoYW4gUHl0aG9uIDMueFwncyB0aGUgYGBcJ3VyXCdgYCBzeW50YXggaXMgbm90IHN1cHBvcnRlZC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgYGBcJ3JiXCdgYCBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhc1xuICAgYmVlbiBhZGRlZCBhcyBhIHN5bm9ueW0gb2YgYGBcJ2JyXCdgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbFxuICAgKGBgdVwndmFsdWVcJ2BgKSB3YXMgcmVpbnRyb2R1Y2VkIHRvIHNpbXBsaWZ5IHRoZSBtYWludGVuYW5jZSBvZiBkdWFsXG4gICBQeXRob24gMi54IGFuZCAzLnggY29kZWJhc2VzLiBTZWUgKipQRVAgNDE0KiogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbkluIHRyaXBsZS1xdW90ZWQgc3RyaW5ncywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWRcbihhbmQgYXJlIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvd1xudGVybWluYXRlIHRoZSBzdHJpbmcuICAoQSAicXVvdGUiIGlzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBvcGVuIHRoZVxuc3RyaW5nLCBpLmUuIGVpdGhlciBgYFwnYGAgb3IgYGAiYGAuKVxuXG5Vbmxlc3MgYW4gYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYCBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58IGBgXFxuZXdsaW5lYGAgICAgICB8IEJhY2tzbGFzaCBhbmQgbmV3bGluZSBpZ25vcmVkICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXFxgYCAgICAgICAgICAgIHwgQmFja3NsYXNoIChgYFxcYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXCdgYCAgICAgICAgICAgIHwgU2luZ2xlIHF1b3RlIChgYFwnYGApICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcImBgICAgICAgICAgICAgfCBEb3VibGUgcXVvdGUgKGBgImBgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGFgYCAgICAgICAgICAgIHwgQVNDSUkgQmVsbCAoQkVMKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxiYGAgICAgICAgICAgICB8IEFTQ0lJIEJhY2tzcGFjZSAoQlMpICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcZmBgICAgICAgICAgICAgfCBBU0NJSSBGb3JtZmVlZCAoRkYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXG5gYCAgICAgICAgICAgIHwgQVNDSUkgTGluZWZlZWQgKExGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxyYGAgICAgICAgICAgICB8IEFTQ0lJIENhcnJpYWdlIFJldHVybiAoQ1IpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcdGBgICAgICAgICAgICAgfCBBU0NJSSBIb3Jpem9udGFsIFRhYiAoVEFCKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHZgYCAgICAgICAgICAgIHwgQVNDSUkgVmVydGljYWwgVGFiIChWVCkgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxvb29gYCAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxceGhoYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFxcTntuYW1lfWBgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAoNCkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGRhdGFiYXNlICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHV4eHh4YGAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxVeHh4eHh4eHhgYCAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg2KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4eHh4eCogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGUgYnl0ZVxuICAgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXMgZGVub3RlIGFcbiAgIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciBuYW1lIGFsaWFzZXMgWzFdIGhhcyBiZWVuXG4gICBhZGRlZC5cblxuNS4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW4gYmVcbiAgIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG42LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXkuICBFeGFjdGx5IGVpZ2h0IGhleFxuICAgZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuVW5saWtlIFN0YW5kYXJkIEMsIGFsbCB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbGVmdCBpbiB0aGVcbnN0cmluZyB1bmNoYW5nZWQsIGkuZS4sICp0aGUgYmFja3NsYXNoIGlzIGxlZnQgaW4gdGhlIHN0cmluZyouICAoVGhpc1xuYmVoYXZpb3IgaXMgdXNlZnVsIHdoZW4gZGVidWdnaW5nOiBpZiBhbiBlc2NhcGUgc2VxdWVuY2UgaXMgbWlzdHlwZWQsXG50aGUgcmVzdWx0aW5nIG91dHB1dCBpcyBtb3JlIGVhc2lseSByZWNvZ25pemVkIGFzIGJyb2tlbi4pICBJdCBpcyBhbHNvXG5pbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBlc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmdcbmxpdGVyYWxzIGZhbGwgaW50byB0aGUgY2F0ZWdvcnkgb2YgdW5yZWNvZ25pemVkIGVzY2FwZXMgZm9yIGJ5dGVzXG5saXRlcmFscy5cblxuRXZlbiBpbiBhIHJhdyBzdHJpbmcsIHN0cmluZyBxdW90ZXMgY2FuIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCxcbmJ1dCB0aGUgYmFja3NsYXNoIHJlbWFpbnMgaW4gdGhlIHN0cmluZzsgZm9yIGV4YW1wbGUsIGBgciJcXCIiYGAgaXMgYVxudmFsaWQgc3RyaW5nIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGFcbmRvdWJsZSBxdW90ZTsgYGByIlxcImBgIGlzIG5vdCBhIHZhbGlkIHN0cmluZyBsaXRlcmFsIChldmVuIGEgcmF3XG5zdHJpbmcgY2Fubm90IGVuZCBpbiBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzKS4gIFNwZWNpZmljYWxseSwgKmFcbnJhdyBzdHJpbmcgY2Fubm90IGVuZCBpbiBhIHNpbmdsZSBiYWNrc2xhc2gqIChzaW5jZSB0aGUgYmFja3NsYXNoXG53b3VsZCBlc2NhcGUgdGhlIGZvbGxvd2luZyBxdW90ZSBjaGFyYWN0ZXIpLiAgTm90ZSBhbHNvIHRoYXQgYSBzaW5nbGVcbmJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIG5ld2xpbmUgaXMgaW50ZXJwcmV0ZWQgYXMgdGhvc2UgdHdvIGNoYXJhY3RlcnNcbmFzIHBhcnQgb2YgdGhlIHN0cmluZywgKm5vdCogYXMgYSBsaW5lIGNvbnRpbnVhdGlvbi5cbicsCiAgJ3N1YnNjcmlwdGlvbnMnOiAnXG5TdWJzY3JpcHRpb25zXG4qKioqKioqKioqKioqXG5cbkEgc3Vic2NyaXB0aW9uIHNlbGVjdHMgYW4gaXRlbSBvZiBhIHNlcXVlbmNlIChzdHJpbmcsIHR1cGxlIG9yIGxpc3QpXG5vciBtYXBwaW5nIChkaWN0aW9uYXJ5KSBvYmplY3Q6XG5cbiAgIHN1YnNjcmlwdGlvbiA6Oj0gcHJpbWFyeSAiWyIgZXhwcmVzc2lvbl9saXN0ICJdIlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHN1YnNjcmlwdGlvbixcbmUuZy4gYSBsaXN0IG9yIGRpY3Rpb25hcnkuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gc3VwcG9ydFxuc3Vic2NyaXB0aW9uIGJ5IGRlZmluaW5nIGEgYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLlxuXG5Gb3IgYnVpbHQtaW4gb2JqZWN0cywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvYmplY3RzIHRoYXQgc3VwcG9ydFxuc3Vic2NyaXB0aW9uOlxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcsIHRoZSBleHByZXNzaW9uIGxpc3QgbXVzdCBldmFsdWF0ZSB0byBhblxub2JqZWN0IHdob3NlIHZhbHVlIGlzIG9uZSBvZiB0aGUga2V5cyBvZiB0aGUgbWFwcGluZywgYW5kIHRoZVxuc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlIHZhbHVlIGluIHRoZSBtYXBwaW5nIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhhdFxua2V5LiAgKFRoZSBleHByZXNzaW9uIGxpc3QgaXMgYSB0dXBsZSBleGNlcHQgaWYgaXQgaGFzIGV4YWN0bHkgb25lXG5pdGVtLilcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBzZXF1ZW5jZSwgdGhlIGV4cHJlc3Npb24gKGxpc3QpIG11c3QgZXZhbHVhdGUgdG9cbmFuIGludGVnZXIgb3IgYSBzbGljZSAoYXMgZGlzY3Vzc2VkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuXG5cblRoZSBmb3JtYWwgc3ludGF4IG1ha2VzIG5vIHNwZWNpYWwgcHJvdmlzaW9uIGZvciBuZWdhdGl2ZSBpbmRpY2VzIGluXG5zZXF1ZW5jZXM7IGhvd2V2ZXIsIGJ1aWx0LWluIHNlcXVlbmNlcyBhbGwgcHJvdmlkZSBhIGBgX19nZXRpdGVtX18oKWBgXG5tZXRob2QgdGhhdCBpbnRlcnByZXRzIG5lZ2F0aXZlIGluZGljZXMgYnkgYWRkaW5nIHRoZSBsZW5ndGggb2YgdGhlXG5zZXF1ZW5jZSB0byB0aGUgaW5kZXggKHNvIHRoYXQgYGB4Wy0xXWBgIHNlbGVjdHMgdGhlIGxhc3QgaXRlbSBvZlxuYGB4YGApLiAgVGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciBsZXNzIHRoYW5cbnRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlLCBhbmQgdGhlIHN1YnNjcmlwdGlvbiBzZWxlY3RzIHRoZVxuaXRlbSB3aG9zZSBpbmRleCBpcyB0aGF0IHZhbHVlIChjb3VudGluZyBmcm9tIHplcm8pLiBTaW5jZSB0aGUgc3VwcG9ydFxuZm9yIG5lZ2F0aXZlIGluZGljZXMgYW5kIHNsaWNpbmcgb2NjdXJzIGluIHRoZSBvYmplY3RcJ3NcbmBgX19nZXRpdGVtX18oKWBgIG1ldGhvZCwgc3ViY2xhc3NlcyBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIHdpbGwgbmVlZFxudG8gZXhwbGljaXRseSBhZGQgdGhhdCBzdXBwb3J0LlxuXG5BIHN0cmluZ1wncyBpdGVtcyBhcmUgY2hhcmFjdGVycy4gIEEgY2hhcmFjdGVyIGlzIG5vdCBhIHNlcGFyYXRlIGRhdGFcbnR5cGUgYnV0IGEgc3RyaW5nIG9mIGV4YWN0bHkgb25lIGNoYXJhY3Rlci5cbicsCiAgJ3RydXRoJzogIlxuVHJ1dGggVmFsdWUgVGVzdGluZ1xuKioqKioqKioqKioqKioqKioqKlxuXG5Bbnkgb2JqZWN0IGNhbiBiZSB0ZXN0ZWQgZm9yIHRydXRoIHZhbHVlLCBmb3IgdXNlIGluIGFuIGBgaWZgYCBvclxuYGB3aGlsZWBgIGNvbmRpdGlvbiBvciBhcyBvcGVyYW5kIG9mIHRoZSBCb29sZWFuIG9wZXJhdGlvbnMgYmVsb3cuIFRoZVxuZm9sbG93aW5nIHZhbHVlcyBhcmUgY29uc2lkZXJlZCBmYWxzZTpcblxuKiBgYE5vbmVgYFxuXG4qIGBgRmFsc2VgYFxuXG4qIHplcm8gb2YgYW55IG51bWVyaWMgdHlwZSwgZm9yIGV4YW1wbGUsIGBgMGBgLCBgYDAuMGBgLCBgYDBqYGAuXG5cbiogYW55IGVtcHR5IHNlcXVlbmNlLCBmb3IgZXhhbXBsZSwgYGAnJ2BgLCBgYCgpYGAsIGBgW11gYC5cblxuKiBhbnkgZW1wdHkgbWFwcGluZywgZm9yIGV4YW1wbGUsIGBge31gYC5cblxuKiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMsIGlmIHRoZSBjbGFzcyBkZWZpbmVzIGFcbiAgYGBfX2Jvb2xfXygpYGAgb3IgYGBfX2xlbl9fKClgYCBtZXRob2QsIHdoZW4gdGhhdCBtZXRob2QgcmV0dXJucyB0aGVcbiAgaW50ZWdlciB6ZXJvIG9yIGBgYm9vbGBgIHZhbHVlIGBgRmFsc2VgYC4gWzFdXG5cbkFsbCBvdGhlciB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgdHJ1ZSAtLS0gc28gb2JqZWN0cyBvZiBtYW55IHR5cGVzIGFyZVxuYWx3YXlzIHRydWUuXG5cbk9wZXJhdGlvbnMgYW5kIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYSBCb29sZWFuIHJlc3VsdCBhbHdheXNcbnJldHVybiBgYDBgYCBvciBgYEZhbHNlYGAgZm9yIGZhbHNlIGFuZCBgYDFgYCBvciBgYFRydWVgYCBmb3IgdHJ1ZSxcbnVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLiAoSW1wb3J0YW50IGV4Y2VwdGlvbjogdGhlIEJvb2xlYW4gb3BlcmF0aW9uc1xuYGBvcmBgIGFuZCBgYGFuZGBgIGFsd2F5cyByZXR1cm4gb25lIG9mIHRoZWlyIG9wZXJhbmRzLilcbiIsCiAgJ3RyeSc6ICdcblRoZSBgYHRyeWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHRyeWBgIHN0YXRlbWVudCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vciBjbGVhbnVwIGNvZGVcbmZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHM6XG5cbiAgIHRyeV9zdG10ICA6Oj0gdHJ5MV9zdG10IHwgdHJ5Ml9zdG10XG4gICB0cnkxX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAoImV4Y2VwdCIgW2V4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgYGBleGNlcHRgYCBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW5cbm5vIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBzdWl0ZSwgYSBzZWFyY2ggZm9yXG5hbiBleGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdFxuY2xhdXNlcyBpbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuXG5leHByZXNzaW9uLWxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzXG5hbnkgZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0XG5leHByZXNzaW9uIGlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZVxucmVzdWx0aW5nIG9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzXG5jb21wYXRpYmxlIHdpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlXG5leGNlcHRpb24gb2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGVcbmV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSBgYHRyeWBgIHN0YXRlbWVudFxucmFpc2VkIHRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlIGBgYXNgYCBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSxcbmlmIHByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgYGBhcyB0YXJnZXRgYCwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgYGBzeXNgYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG5gYHN5cy5leGNfaW5mbygpYGAuIGBgc3lzLmV4Y19pbmZvKClgYCByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mXG50aGUgZXhjZXB0aW9uIGNsYXNzLCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3RcbihzZWUgc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KikgaWRlbnRpZnlpbmcgdGhlIHBvaW50IGluXG50aGUgcHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgYGBzeXMuZXhjX2luZm8oKWBgIHZhbHVlc1xuYXJlIHJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCBgYGVsc2VgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlIGBgdHJ5YGAgY2xhdXNlLiBbMl0gRXhjZXB0aW9ucyBpbiB0aGUgYGBlbHNlYGAgY2xhdXNlXG5hcmUgbm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyBgYGV4Y2VwdGBgIGNsYXVzZXMuXG5cbklmIGBgZmluYWxseWBgIGlzIHByZXNlbnQsIGl0IHNwZWNpZmllcyBhIFwnY2xlYW51cFwnIGhhbmRsZXIuICBUaGVcbmBgdHJ5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55IGBgZXhjZXB0YGAgYW5kIGBgZWxzZWBgXG5jbGF1c2VzLiAgSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBhbnkgb2YgdGhlIGNsYXVzZXMgYW5kIGlzIG5vdFxuaGFuZGxlZCwgdGhlIGV4Y2VwdGlvbiBpcyB0ZW1wb3JhcmlseSBzYXZlZC4gVGhlIGBgZmluYWxseWBgIGNsYXVzZSBpc1xuZXhlY3V0ZWQuICBJZiB0aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZlxudGhlIGBgZmluYWxseWBgIGNsYXVzZS4gIElmIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgcmFpc2VzIGFub3RoZXJcbmV4Y2VwdGlvbiwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBzZXQgYXMgdGhlIGNvbnRleHQgb2YgdGhlIG5ld1xuZXhjZXB0aW9uLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBvclxuYGBicmVha2BgIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQ6XG5cbiAgIGRlZiBmKCk6XG4gICAgICAgdHJ5OlxuICAgICAgICAgICAxLzBcbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICByZXR1cm4gNDJcblxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbldoZW4gYSBgYHJldHVybmBgLCBgYGJyZWFrYGAgb3IgYGBjb250aW51ZWBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpblxudGhlIGBgdHJ5YGAgc3VpdGUgb2YgYSBgYHRyeWBgLi4uYGBmaW5hbGx5YGAgc3RhdGVtZW50LCB0aGVcbmBgZmluYWxseWBgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBpcyBpbGxlZ2FsIGluIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGFcbnByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmVcbmxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgYGByYWlzZWBgIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAotICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSBgYE5vbmVgYC5cbiAgIEl0IGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucyxcbiAgIGUuZy4sIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICBgYE5vdEltcGxlbWVudGVkYGAuIE51bWVyaWMgbWV0aG9kcyBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbWF5XG4gICByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgdGhlXG4gICBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGUgcmVmbGVjdGVkXG4gICBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0b3IuKSAgSXRzXG4gICB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5FbGxpcHNpc1xuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsaXRlcmFsIGBgLi4uYGAgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lIGBgRWxsaXBzaXNgYC4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5gYG51bWJlcnMuTnVtYmVyYGBcbiAgIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IG51bWVyaWMgbGl0ZXJhbHMgYW5kIHJldHVybmVkIGFzIHJlc3VsdHMgYnlcbiAgIGFyaXRobWV0aWMgb3BlcmF0b3JzIGFuZCBhcml0aG1ldGljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIE51bWVyaWNcbiAgIG9iamVjdHMgYXJlIGltbXV0YWJsZTsgb25jZSBjcmVhdGVkIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMuXG4gICBQeXRob24gbnVtYmVycyBhcmUgb2YgY291cnNlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gbWF0aGVtYXRpY2FsXG4gICBudW1iZXJzLCBidXQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgb2YgbnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uXG4gICBpbiBjb21wdXRlcnMuXG5cbiAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZFxuICAgY29tcGxleCBudW1iZXJzOlxuXG4gICBgYG51bWJlcnMuSW50ZWdyYWxgYFxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoYGBpbnRgYClcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zIChgYGJvb2xgYClcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCB0aGUgdHJ1dGggdmFsdWVzIEZhbHNlIGFuZCBUcnVlLiAgVGhlIHR3b1xuICAgICAgICAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZSBhcmUgdGhlIG9ubHlcbiAgICAgICAgIEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlIGludGVnZXJcbiAgICAgICAgIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kIDEsXG4gICAgICAgICByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzIGBgIkZhbHNlImBgIG9yXG4gICAgICAgICBgYCJUcnVlImBgIGFyZSByZXR1cm5lZCwgcmVzcGVjdGl2ZWx5LlxuXG4gICAgICBUaGUgcnVsZXMgZm9yIGludGVnZXIgcmVwcmVzZW50YXRpb24gYXJlIGludGVuZGVkIHRvIGdpdmUgdGhlXG4gICAgICBtb3N0IG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gb2Ygc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9uc1xuICAgICAgaW52b2x2aW5nIG5lZ2F0aXZlIGludGVnZXJzLlxuXG4gICBgYG51bWJlcnMuUmVhbGBgIChgYGZsb2F0YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgYGBudW1iZXJzLkNvbXBsZXhgYCAoYGBjb21wbGV4YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciBgYHpgYCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyBgYHoucmVhbGBgIGFuZCBgYHouaW1hZ2BgLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZlxuICAgaXRlbXMgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGVcbiAgIGluZGV4IHNldCBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2ZcbiAgIHNlcXVlbmNlICphKiBpcyBzZWxlY3RlZCBieSBgYGFbaV1gYC5cblxuICAgU2VxdWVuY2VzIGFsc28gc3VwcG9ydCBzbGljaW5nOiBgYGFbaTpqXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqIGBgPD1gYCAqayogYGA8YGAgKmoqLiAgV2hlbiB1c2VkIGFzIGFuXG4gICBleHByZXNzaW9uLCBhIHNsaWNlIGlzIGEgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZS4gIFRoaXMgaW1wbGllc1xuICAgdGhhdCB0aGUgaW5kZXggc2V0IGlzIHJlbnVtYmVyZWQgc28gdGhhdCBpdCBzdGFydHMgYXQgMC5cblxuICAgU29tZSBzZXF1ZW5jZXMgYWxzbyBzdXBwb3J0ICJleHRlbmRlZCBzbGljaW5nIiB3aXRoIGEgdGhpcmQgInN0ZXAiXG4gICBwYXJhbWV0ZXI6IGBgYVtpOmo6a11gYCBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCpcbiAgIHdoZXJlIGBgeCA9IGkgKyBuKmtgYCwgKm4qIGBgPj1gYCBgYDBgYCBhbmQgKmkqIGBgPD1gYCAqeCogYGA8YGBcbiAgICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGVcbiAgICAgICAgIGNvZGVwb2ludHMuIEFsbCB0aGUgY29kZXBvaW50cyBpbiByYW5nZSBgYFUrMDAwMCAtIFUrMTBGRkZGYGBcbiAgICAgICAgIGNhbiBiZSByZXByZXNlbnRlZCBpbiBhIHN0cmluZy4gIFB5dGhvbiBkb2VzblwndCBoYXZlIGFcbiAgICAgICAgIGBgY2hyYGAgdHlwZSwgYW5kIGV2ZXJ5IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nIGlzXG4gICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvYmplY3Qgd2l0aCBsZW5ndGggYGAxYGAuICBUaGUgYnVpbHQtXG4gICAgICAgICBpbiBmdW5jdGlvbiBgYG9yZCgpYGAgY29udmVydHMgYSBjaGFyYWN0ZXIgdG8gaXRzIGNvZGVwb2ludFxuICAgICAgICAgKGFzIGFuIGludGVnZXIpOyBgYGNocigpYGAgY29udmVydHMgYW4gaW50ZWdlciBpbiByYW5nZSBgYDAgLVxuICAgICAgICAgMTBGRkZGYGAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLiBgYHN0ci5lbmNvZGUoKWBgIGNhblxuICAgICAgICAgYmUgdXNlZCB0byBjb252ZXJ0IGEgYGBzdHJgYCB0byBgYGJ5dGVzYGAgdXNpbmcgdGhlIGdpdmVuXG4gICAgICAgICBlbmNvZGluZywgYW5kIGBgYnl0ZXMuZGVjb2RlKClgYCBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZVxuICAgICAgICAgb3Bwb3NpdGUuXG5cbiAgICAgIFR1cGxlc1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgdHVwbGUgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gVHVwbGVzIG9mXG4gICAgICAgICB0d28gb3IgbW9yZSBpdGVtcyBhcmUgZm9ybWVkIGJ5IGNvbW1hLXNlcGFyYXRlZCBsaXN0cyBvZlxuICAgICAgICAgZXhwcmVzc2lvbnMuICBBIHR1cGxlIG9mIG9uZSBpdGVtIChhIFwnc2luZ2xldG9uXCcpIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFmZml4aW5nIGEgY29tbWEgdG8gYW4gZXhwcmVzc2lvbiAoYW4gZXhwcmVzc2lvbiBieVxuICAgICAgICAgaXRzZWxmIGRvZXMgbm90IGNyZWF0ZSBhIHR1cGxlLCBzaW5jZSBwYXJlbnRoZXNlcyBtdXN0IGJlXG4gICAgICAgICB1c2FibGUgZm9yIGdyb3VwaW5nIG9mIGV4cHJlc3Npb25zKS4gIEFuIGVtcHR5IHR1cGxlIGNhbiBiZVxuICAgICAgICAgZm9ybWVkIGJ5IGFuIGVtcHR5IHBhaXIgb2YgcGFyZW50aGVzZXMuXG5cbiAgICAgIEJ5dGVzXG4gICAgICAgICBBIGJ5dGVzIG9iamVjdCBpcyBhbiBpbW11dGFibGUgYXJyYXkuICBUaGUgaXRlbXMgYXJlIDgtYml0XG4gICAgICAgICBieXRlcywgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cbiAgICAgICAgIEJ5dGVzIGxpdGVyYWxzIChsaWtlIGBgYlwnYWJjXCdgYCkgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgYGBieXRlcygpYGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGJ5dGVzIG9iamVjdHMuICBBbHNvLFxuICAgICAgICAgYnl0ZXMgb2JqZWN0cyBjYW4gYmUgZGVjb2RlZCB0byBzdHJpbmdzIHZpYSB0aGUgYGBkZWNvZGUoKWBgXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kIGBgZGVsYGAgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gYGBieXRlYXJyYXkoKWBgIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgYGBhcnJheWBgIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZlxuICAgICAgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgIGBgMS4wYGApLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzZXQoKWBgIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzIGBgYWRkKClgYC5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluIGBgZnJvemVuc2V0KClgYCBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzXG4gICAgICBpbW11dGFibGUgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2ZcbiAgICAgIGFub3RoZXIgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gYGBhW2tdYGAgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5XG4gICBgYGtgYCBmcm9tIHRoZSBtYXBwaW5nIGBgYWBgOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZFxuICAgYXMgdGhlIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciBgYGRlbGBgIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pblxuICAgZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgICAgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBgYHsuLi59YGBcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgYGBkYm0ubmRibWBgIGFuZCBgYGRibS5nbnVgYCBwcm92aWRlXG4gICAgICBhZGRpdGlvbmFsIGV4YW1wbGVzIG9mIG1hcHBpbmcgdHlwZXMsIGFzIGRvZXMgdGhlXG4gICAgICBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgQXR0cmlidXRlICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09K1xuICAgICAgfCBgYF9fZG9jX19gYCAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb24gICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19uYW1lX19gYCAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19xdWFsbmFtZV9fYGAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgKnF1YWxpZmllZCBuYW1lKiB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5ldyBpbiB2ZXJzaW9uIDMuMy4gICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbW9kdWxlX19gYCAgICAgICAgICAgIHwgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluLCBvciAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RlZmF1bHRzX19gYCAgICAgICAgICB8IEEgdHVwbGUgY29udGFpbmluZyBkZWZhdWx0ICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCB2YWx1ZXMgZm9yIHRob3NlICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnRzIHRoYXQgaGF2ZSBkZWZhdWx0cywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yIGBgTm9uZWBgIGlmIG5vIGFyZ3VtZW50cyAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2NvZGVfX2BgICAgICAgICAgICAgICB8IFRoZSBjb2RlIG9iamVjdCByZXByZXNlbnRpbmcgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29tcGlsZWQgZnVuY3Rpb24gYm9keS4gICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2dsb2JhbHNfX2BgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGhvbGRzIHRoZSBmdW5jdGlvblwncyAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGdsb2JhbCB2YXJpYWJsZXMgLS0tIHRoZSBnbG9iYWwgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBuYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBpbiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hpY2ggdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLiB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19kaWN0X19gYCAgICAgICAgICAgICAgfCBUaGUgbmFtZXNwYWNlIHN1cHBvcnRpbmcgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0dHJpYnV0ZXMuICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19jbG9zdXJlX19gYCAgICAgICAgICAgfCBgYE5vbmVgYCBvciBhIHR1cGxlIG9mIGNlbGxzICAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBjb250YWluIGJpbmRpbmdzIGZvciB0aGUgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1bmN0aW9uXCdzIGZyZWUgdmFyaWFibGVzLiAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2Fubm90YXRpb25zX19gYCAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvZiBwYXJhbWV0ZXJzLiAgVGhlIGtleXMgb2YgdGhlIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGljdCBhcmUgdGhlIHBhcmFtZXRlciBuYW1lcywgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9yIGBgXCdyZXR1cm5cJ2BgIGZvciB0aGUgcmV0dXJuICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFubm90YXRpb24sIGlmIHByb3ZpZGVkLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fa3dkZWZhdWx0c19fYGAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuXG4gICAgICBNb3N0IG9mIHRoZSBhdHRyaWJ1dGVzIGxhYmVsbGVkICJXcml0YWJsZSIgY2hlY2sgdGhlIHR5cGUgb2YgdGhlXG4gICAgICBhc3NpZ25lZCB2YWx1ZS5cblxuICAgICAgRnVuY3Rpb24gb2JqZWN0cyBhbHNvIHN1cHBvcnQgZ2V0dGluZyBhbmQgc2V0dGluZyBhcmJpdHJhcnlcbiAgICAgIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgdG8gYXR0YWNoIG1ldGFkYXRhXG4gICAgICB0byBmdW5jdGlvbnMuICBSZWd1bGFyIGF0dHJpYnV0ZSBkb3Qtbm90YXRpb24gaXMgdXNlZCB0byBnZXQgYW5kXG4gICAgICBzZXQgc3VjaCBhdHRyaWJ1dGVzLiAqTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9ubHlcbiAgICAgIHN1cHBvcnRzIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gRnVuY3Rpb25cbiAgICAgIGF0dHJpYnV0ZXMgb24gYnVpbHQtaW4gZnVuY3Rpb25zIG1heSBiZSBzdXBwb3J0ZWQgaW4gdGhlXG4gICAgICBmdXR1cmUuKlxuXG4gICAgICBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IGEgZnVuY3Rpb25cJ3MgZGVmaW5pdGlvbiBjYW4gYmVcbiAgICAgIHJldHJpZXZlZCBmcm9tIGl0cyBjb2RlIG9iamVjdDsgc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBpbnRlcm5hbFxuICAgICAgdHlwZXMgYmVsb3cuXG5cbiAgIEluc3RhbmNlIG1ldGhvZHNcbiAgICAgIEFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgY29tYmluZXMgYSBjbGFzcywgYSBjbGFzcyBpbnN0YW5jZSBhbmRcbiAgICAgIGFueSBjYWxsYWJsZSBvYmplY3QgKG5vcm1hbGx5IGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uKS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBfX3NlbGZfX2BgIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCBgYF9fZnVuY19fYGAgaXMgdGhlIGZ1bmN0aW9uIG9iamVjdDsgYGBfX2RvY19fYGAgaXMgdGhlXG4gICAgICBtZXRob2RcJ3MgZG9jdW1lbnRhdGlvbiAoc2FtZSBhcyBgYF9fZnVuY19fLl9fZG9jX19gYCk7XG4gICAgICBgYF9fbmFtZV9fYGAgaXMgdGhlIG1ldGhvZCBuYW1lIChzYW1lIGFzIGBgX19mdW5jX18uX19uYW1lX19gYCk7XG4gICAgICBgYF9fbW9kdWxlX19gYCBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWRcbiAgICAgIGluLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgICAgTWV0aG9kcyBhbHNvIHN1cHBvcnQgYWNjZXNzaW5nIChidXQgbm90IHNldHRpbmcpIHRoZSBhcmJpdHJhcnlcbiAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZXMgb24gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBVc2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdHMgbWF5IGJlIGNyZWF0ZWQgd2hlbiBnZXR0aW5nIGFuXG4gICAgICBhdHRyaWJ1dGUgb2YgYSBjbGFzcyAocGVyaGFwcyB2aWEgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyksIGlmXG4gICAgICB0aGF0IGF0dHJpYnV0ZSBpcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3Qgb3IgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIHVzZXItXG4gICAgICBkZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBmcm9tIGEgY2xhc3MgdmlhIG9uZSBvZiBpdHMgaW5zdGFuY2VzLFxuICAgICAgaXRzIGBgX19zZWxmX19gYCBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLCBhbmQgdGhlIG1ldGhvZFxuICAgICAgb2JqZWN0IGlzIHNhaWQgdG8gYmUgYm91bmQuICBUaGUgbmV3IG1ldGhvZFwncyBgYF9fZnVuY19fYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSBgYF9fZnVuY19fYGBcbiAgICAgIGF0dHJpYnV0ZSBvZiB0aGUgbmV3IGluc3RhbmNlIGlzIG5vdCB0aGUgb3JpZ2luYWwgbWV0aG9kIG9iamVjdFxuICAgICAgYnV0IGl0cyBgYF9fZnVuY19fYGAgYXR0cmlidXRlLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCBpdHMgYGBfX3NlbGZfX2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyBgYF9fZnVuY19fYGAgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgZnVuY3Rpb24gb2JqZWN0IHVuZGVybHlpbmcgdGhlIGNsYXNzIG1ldGhvZC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNhbGxlZCwgdGhlIHVuZGVybHlpbmdcbiAgICAgIGZ1bmN0aW9uIChgYF9fZnVuY19fYGApIGlzIGNhbGxlZCwgaW5zZXJ0aW5nIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgKGBgX19zZWxmX19gYCkgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsXG4gICAgICB3aGVuIGBgQ2BgIGlzIGEgY2xhc3Mgd2hpY2ggY29udGFpbnMgYSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uXG4gICAgICBgYGYoKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBDYGAsIGNhbGxpbmcgYGB4LmYoMSlgYFxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgQy5mKHgsIDEpYGAuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluIGBgX19zZWxmX19gYCB3aWxsXG4gICAgICBhY3R1YWxseSBiZSB0aGUgY2xhc3MgaXRzZWxmLCBzbyB0aGF0IGNhbGxpbmcgZWl0aGVyIGBgeC5mKDEpYGBcbiAgICAgIG9yIGBgQy5mKDEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZihDLDEpYGAgd2hlcmUgYGBmYGAgaXNcbiAgICAgIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uLlxuXG4gICAgICBOb3RlIHRoYXQgdGhlIHRyYW5zZm9ybWF0aW9uIGZyb20gZnVuY3Rpb24gb2JqZWN0IHRvIGluc3RhbmNlXG4gICAgICBtZXRob2Qgb2JqZWN0IGhhcHBlbnMgZWFjaCB0aW1lIHRoZSBhdHRyaWJ1dGUgaXMgcmV0cmlldmVkIGZyb21cbiAgICAgIHRoZSBpbnN0YW5jZS4gIEluIHNvbWUgY2FzZXMsIGEgZnJ1aXRmdWwgb3B0aW1pemF0aW9uIGlzIHRvXG4gICAgICBhc3NpZ24gdGhlIGF0dHJpYnV0ZSB0byBhIGxvY2FsIHZhcmlhYmxlIGFuZCBjYWxsIHRoYXQgbG9jYWxcbiAgICAgIHZhcmlhYmxlLiBBbHNvIG5vdGljZSB0aGF0IHRoaXMgdHJhbnNmb3JtYXRpb24gb25seSBoYXBwZW5zIGZvclxuICAgICAgdXNlci1kZWZpbmVkIGZ1bmN0aW9uczsgb3RoZXIgY2FsbGFibGUgb2JqZWN0cyAoYW5kIGFsbCBub24tXG4gICAgICBjYWxsYWJsZSBvYmplY3RzKSBhcmUgcmV0cmlldmVkIHdpdGhvdXQgdHJhbnNmb3JtYXRpb24uICBJdCBpc1xuICAgICAgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgd2hpY2ggYXJlXG4gICAgICBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgaW5zdGFuY2UgYXJlIG5vdCBjb252ZXJ0ZWQgdG8gYm91bmRcbiAgICAgIG1ldGhvZHM7IHRoaXMgKm9ubHkqIGhhcHBlbnMgd2hlbiB0aGUgZnVuY3Rpb24gaXMgYW4gYXR0cmlidXRlXG4gICAgICBvZiB0aGUgY2xhc3MuXG5cbiAgIEdlbmVyYXRvciBmdW5jdGlvbnNcbiAgICAgIEEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIHVzZXMgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyBgYGl0ZXJhdG9yLl9fbmV4dF9fKClgYCBtZXRob2Qgd2lsbCBjYXVzZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgdW50aWwgaXQgcHJvdmlkZXMgYSB2YWx1ZSB1c2luZyB0aGVcbiAgICAgIGBgeWllbGRgYCBzdGF0ZW1lbnQuICBXaGVuIHRoZSBmdW5jdGlvbiBleGVjdXRlcyBhIGBgcmV0dXJuYGBcbiAgICAgIHN0YXRlbWVudCBvciBmYWxscyBvZmYgdGhlIGVuZCwgYSBgYFN0b3BJdGVyYXRpb25gYCBleGNlcHRpb24gaXNcbiAgICAgIHJhaXNlZCBhbmQgdGhlIGl0ZXJhdG9yIHdpbGwgaGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHNldCBvZlxuICAgICAgdmFsdWVzIHRvIGJlIHJldHVybmVkLlxuXG4gICBCdWlsdC1pbiBmdW5jdGlvbnNcbiAgICAgIEEgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYSBDIGZ1bmN0aW9uLlxuICAgICAgRXhhbXBsZXMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFyZSBgYGxlbigpYGAgYW5kIGBgbWF0aC5zaW4oKWBgXG4gICAgICAoYGBtYXRoYGAgaXMgYSBzdGFuZGFyZCBidWlsdC1pbiBtb2R1bGUpLiBUaGUgbnVtYmVyIGFuZCB0eXBlIG9mXG4gICAgICB0aGUgYXJndW1lbnRzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBDIGZ1bmN0aW9uLiBTcGVjaWFsIHJlYWQtXG4gICAgICBvbmx5IGF0dHJpYnV0ZXM6IGBgX19kb2NfX2BgIGlzIHRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uXG4gICAgICBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlOyBgYF9fbmFtZV9fYGAgaXMgdGhlXG4gICAgICBmdW5jdGlvblwncyBuYW1lOyBgYF9fc2VsZl9fYGAgaXMgc2V0IHRvIGBgTm9uZWBgIChidXQgc2VlIHRoZVxuICAgICAgbmV4dCBpdGVtKTsgYGBfX21vZHVsZV9fYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGVcbiAgICAgIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIGluIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICBCdWlsdC1pbiBtZXRob2RzXG4gICAgICBUaGlzIGlzIHJlYWxseSBhIGRpZmZlcmVudCBkaXNndWlzZSBvZiBhIGJ1aWx0LWluIGZ1bmN0aW9uLCB0aGlzXG4gICAgICB0aW1lIGNvbnRhaW5pbmcgYW4gb2JqZWN0IHBhc3NlZCB0byB0aGUgQyBmdW5jdGlvbiBhcyBhblxuICAgICAgaW1wbGljaXQgZXh0cmEgYXJndW1lbnQuICBBbiBleGFtcGxlIG9mIGEgYnVpbHQtaW4gbWV0aG9kIGlzXG4gICAgICBgYGFsaXN0LmFwcGVuZCgpYGAsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSBgYF9fc2VsZl9fYGAgaXMgc2V0IHRvIHRoZVxuICAgICAgb2JqZWN0IGRlbm90ZWQgYnkgKmFsaXN0Ki5cblxuICAgQ2xhc3Nlc1xuICAgICAgQ2xhc3NlcyBhcmUgY2FsbGFibGUuICBUaGVzZSBvYmplY3RzIG5vcm1hbGx5IGFjdCBhcyBmYWN0b3JpZXNcbiAgICAgIGZvciBuZXcgaW5zdGFuY2VzIG9mIHRoZW1zZWx2ZXMsIGJ1dCB2YXJpYXRpb25zIGFyZSBwb3NzaWJsZSBmb3JcbiAgICAgIGNsYXNzIHR5cGVzIHRoYXQgb3ZlcnJpZGUgYGBfX25ld19fKClgYC4gIFRoZSBhcmd1bWVudHMgb2YgdGhlXG4gICAgICBjYWxsIGFyZSBwYXNzZWQgdG8gYGBfX25ld19fKClgYCBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICBgYF9faW5pdF9fKClgYCB0byBpbml0aWFsaXplIHRoZSBuZXcgaW5zdGFuY2UuXG5cbiAgIENsYXNzIEluc3RhbmNlc1xuICAgICAgSW5zdGFuY2VzIG9mIGFyYml0cmFyeSBjbGFzc2VzIGNhbiBiZSBtYWRlIGNhbGxhYmxlIGJ5IGRlZmluaW5nXG4gICAgICBhIGBgX19jYWxsX18oKWBgIG1ldGhvZCBpbiB0aGVpciBjbGFzcy5cblxuTW9kdWxlc1xuICAgTW9kdWxlcyBhcmUgYSBiYXNpYyBvcmdhbml6YXRpb25hbCB1bml0IG9mIFB5dGhvbiBjb2RlLCBhbmQgYXJlXG4gICBjcmVhdGVkIGJ5IHRoZSAqaW1wb3J0IHN5c3RlbSogYXMgaW52b2tlZCBlaXRoZXIgYnkgdGhlIGBgaW1wb3J0YGBcbiAgIHN0YXRlbWVudCAoc2VlIGBgaW1wb3J0YGApLCBvciBieSBjYWxsaW5nIGZ1bmN0aW9ucyBzdWNoIGFzXG4gICBgYGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKClgYCBhbmQgYnVpbHQtaW4gYGBfX2ltcG9ydF9fKClgYC4gIEFcbiAgIG1vZHVsZSBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3RcbiAgICh0aGlzIGlzIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlIGBgX19nbG9iYWxzX19gYCBhdHRyaWJ1dGVcbiAgIG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUpLiAgQXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlXG4gICB0cmFuc2xhdGVkIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCBgYG0ueGBgIGlzXG4gICBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdYGAuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluXG4gICB0aGUgY29kZSBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndFxuICAgbmVlZGVkIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCBgYG0ueCA9IDFgYCBpcyBlcXVpdmFsZW50IHRvIGBgbS5fX2RpY3RfX1sieCJdID0gMWBgLlxuXG4gICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGU6IGBgX19kaWN0X19gYCBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIG1vZHVsZVwnc1xuICAgbmFtZTsgYGBfX2RvY19fYGAgaXMgdGhlIG1vZHVsZVwncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgYGBOb25lYGBcbiAgIGlmIHVuYXZhaWxhYmxlOyBgYF9fZmlsZV9fYGAgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBmaWxlIGZyb20gd2hpY2hcbiAgIHRoZSBtb2R1bGUgd2FzIGxvYWRlZCwgaWYgaXQgd2FzIGxvYWRlZCBmcm9tIGEgZmlsZS4gVGhlXG4gICBgYF9fZmlsZV9fYGAgYXR0cmlidXRlIG1heSBiZSBtaXNzaW5nIGZvciBjZXJ0YWluIHR5cGVzIG9mIG1vZHVsZXMsXG4gICBzdWNoIGFzIEMgbW9kdWxlcyB0aGF0IGFyZSBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjtcbiAgIGZvciBleHRlbnNpb24gbW9kdWxlcyBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdFxuICAgaXMgdGhlIHBhdGhuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBDLnhgYCBpcyB0cmFuc2xhdGVkIHRvXG4gICBgYEMuX19kaWN0X19bIngiXWBgIChhbHRob3VnaCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaG9va3Mgd2hpY2hcbiAgIGFsbG93IGZvciBvdGhlciBtZWFucyBvZiBsb2NhdGluZyBhdHRyaWJ1dGVzKS4gV2hlbiB0aGUgYXR0cmlidXRlXG4gICBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGludWVzIGluIHRoZSBiYXNlXG4gICBjbGFzc2VzLiBUaGlzIHNlYXJjaCBvZiB0aGUgYmFzZSBjbGFzc2VzIHVzZXMgdGhlIEMzIG1ldGhvZFxuICAgcmVzb2x1dGlvbiBvcmRlciB3aGljaCBiZWhhdmVzIGNvcnJlY3RseSBldmVuIGluIHRoZSBwcmVzZW5jZSBvZlxuICAgXCdkaWFtb25kXCcgaW5oZXJpdGFuY2Ugc3RydWN0dXJlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgIGluaGVyaXRhbmNlIHBhdGhzIGxlYWRpbmcgYmFjayB0byBhIGNvbW1vbiBhbmNlc3Rvci4gQWRkaXRpb25hbFxuICAgZGV0YWlscyBvbiB0aGUgQzMgTVJPIHVzZWQgYnkgUHl0aG9uIGNhbiBiZSBmb3VuZCBpbiB0aGVcbiAgIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSAyLjMgcmVsZWFzZSBhdFxuICAgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzIGBgQ2BgLCBzYXkpIHdvdWxkIHlpZWxkXG4gICBhIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZXMgaXMgYGBDYGAuICBXaGVuIGl0IHdvdWxkIHlpZWxkXG4gICBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvYmplY3Qgd3JhcHBlZFxuICAgYnkgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKlxuICAgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiBpdHMgYGBfX2RpY3RfX2BgLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgY2xhc3MgbmFtZTsgYGBfX21vZHVsZV9fYGBcbiAgIGlzIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IGBgX19kaWN0X19gYCBpc1xuICAgdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyBgYF9fYmFzZXNfX2BgIGlzIGFcbiAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLFxuICAgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDtcbiAgIGBgX19kb2NfX2BgIGlzIHRoZSBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZlxuICAgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UuICBTdGF0aWMgbWV0aG9kIGFuZFxuICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28gdHJhbnNmb3JtZWQ7IHNlZSBhYm92ZSB1bmRlclxuICAgIkNsYXNzZXMiLiAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5XG4gICBpbiB3aGljaCBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heVxuICAgZGlmZmVyIGZyb20gdGhlIG9iamVjdHMgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBjbGFzc1wnc1xuICAgYGBfX2RpY3RfX2BgLiAgSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlIG9iamVjdFwnc1xuICAgY2xhc3MgaGFzIGEgYGBfX2dldGF0dHJfXygpYGAgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZVxuICAgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgIGBgX19zZXRhdHRyX18oKWBgIG9yIGBgX19kZWxhdHRyX18oKWBgIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19kaWN0X19gYCBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICBgYF9fY2xhc3NfX2BgIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlIGBgb3BlbigpYGAgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyBgYG9zLnBvcGVuKClgYCwgYGBvcy5mZG9wZW4oKWBgLCBhbmQgdGhlIGBgbWFrZWZpbGUoKWBgXG4gICBtZXRob2Qgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICBgYGlvLlRleHRJT0Jhc2VgYCBhYnN0cmFjdCBjbGFzcy5cblxuSW50ZXJuYWwgdHlwZXNcbiAgIEEgZmV3IHR5cGVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgaW50ZXJwcmV0ZXIgYXJlIGV4cG9zZWQgdG8gdGhlXG4gICB1c2VyLiBUaGVpciBkZWZpbml0aW9ucyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIHRoZVxuICAgaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGFyZSBtZW50aW9uZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLlxuXG4gICBDb2RlIG9iamVjdHNcbiAgICAgIENvZGUgb2JqZWN0cyByZXByZXNlbnQgKmJ5dGUtY29tcGlsZWQqIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUsXG4gICAgICBvciAqYnl0ZWNvZGUqLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29kZSBvYmplY3QgYW5kIGFcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYW4gZXhwbGljaXRcbiAgICAgIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25cJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbiB3aGljaCBpdCB3YXNcbiAgICAgIGRlZmluZWQpLCB3aGlsZSBhIGNvZGUgb2JqZWN0IGNvbnRhaW5zIG5vIGNvbnRleHQ7IGFsc28gdGhlXG4gICAgICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBmdW5jdGlvbiBvYmplY3QsIG5vdFxuICAgICAgaW4gdGhlIGNvZGUgb2JqZWN0IChiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHZhbHVlcyBjYWxjdWxhdGVkIGF0XG4gICAgICBydW4tdGltZSkuICBVbmxpa2UgZnVuY3Rpb24gb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGVcbiAgICAgIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHRvIG11dGFibGVcbiAgICAgIG9iamVjdHMuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgY29fbmFtZWBgIGdpdmVzIHRoZSBmdW5jdGlvblxuICAgICAgbmFtZTsgYGBjb19hcmdjb3VudGBgIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHNcbiAgICAgIChpbmNsdWRpbmcgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyBgYGNvX25sb2NhbHNgYCBpcyB0aGVcbiAgICAgIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzKTsgYGBjb192YXJuYW1lc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2ZcbiAgICAgIHRoZSBsb2NhbCB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTtcbiAgICAgIGBgY29fY2VsbHZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zO1xuICAgICAgYGBjb19mcmVldmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgZnJlZVxuICAgICAgdmFyaWFibGVzOyBgYGNvX2NvZGVgYCBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mXG4gICAgICBieXRlY29kZSBpbnN0cnVjdGlvbnM7IGBgY29fY29uc3RzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuICAgICAgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fbmFtZXNgYCBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19maWxlbmFtZWBgIGlzXG4gICAgICB0aGUgZmlsZW5hbWUgZnJvbSB3aGljaCB0aGUgY29kZSB3YXMgY29tcGlsZWQ7XG4gICAgICBgYGNvX2ZpcnN0bGluZW5vYGAgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgIGBgY29fbG5vdGFiYGAgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7IGBgY29fc3RhY2tzaXplYGAgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemVcbiAgICAgIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsgYGBjb19mbGFnc2BgIGlzIGFuIGludGVnZXIgZW5jb2RpbmdcbiAgICAgIGEgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciBgYGNvX2ZsYWdzYGA6IGJpdFxuICAgICAgYGAweDA0YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCphcmd1bWVudHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXRcbiAgICAgIGBgMHgwOGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqKmtleXdvcmRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzOyBiaXQgYGAweDIwYGAgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0XG4gICAgICBkaXZpc2lvbmBgKSBhbHNvIHVzZSBiaXRzIGluIGBgY29fZmxhZ3NgYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFcbiAgICAgIGNvZGUgb2JqZWN0IHdhcyBjb21waWxlZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQ6IGJpdFxuICAgICAgYGAweDIwMDBgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZVxuICAgICAgZGl2aXNpb24gZW5hYmxlZDsgYml0cyBgYDB4MTBgYCBhbmQgYGAweDEwMDBgYCB3ZXJlIHVzZWQgaW5cbiAgICAgIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLlxuXG4gICAgICBPdGhlciBiaXRzIGluIGBgY29fZmxhZ3NgYCBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICBgYGNvX2NvbnN0c2BgIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICBgYE5vbmVgYCBpZiB1bmRlZmluZWQuXG5cbiAgIEZyYW1lIG9iamVjdHNcbiAgICAgIEZyYW1lIG9iamVjdHMgcmVwcmVzZW50IGV4ZWN1dGlvbiBmcmFtZXMuICBUaGV5IG1heSBvY2N1ciBpblxuICAgICAgdHJhY2ViYWNrIG9iamVjdHMgKHNlZSBiZWxvdykuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgZl9iYWNrYGAgaXMgdG8gdGhlIHByZXZpb3VzXG4gICAgICBzdGFjayBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgYGBOb25lYGAgaWYgdGhpcyBpcyB0aGVcbiAgICAgIGJvdHRvbSBzdGFjayBmcmFtZTsgYGBmX2NvZGVgYCBpcyB0aGUgY29kZSBvYmplY3QgYmVpbmcgZXhlY3V0ZWRcbiAgICAgIGluIHRoaXMgZnJhbWU7IGBgZl9sb2NhbHNgYCBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXBcbiAgICAgIGxvY2FsIHZhcmlhYmxlczsgYGBmX2dsb2JhbHNgYCBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgYGBmX2J1aWx0aW5zYGAgaXMgdXNlZCBmb3IgYnVpbHQtaW4gKGludHJpbnNpYykgbmFtZXM7XG4gICAgICBgYGZfbGFzdGlgYCBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvXG4gICAgICB0aGUgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogYGBmX3RyYWNlYGAsIGlmIG5vdCBgYE5vbmVgYCwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgYGBmX2xpbmVub2BgIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyXG4gICAgICBvZiB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uXG4gICAgICBqdW1wcyB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEFcbiAgICAgIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpXG4gICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5IGBgc3lzLmV4Y19pbmZvKClgYC4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWluc1xuICAgICAgbm8gc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseVxuICAgICAgZm9ybWF0dGVkKSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXNcbiAgICAgIGludGVyYWN0aXZlLCBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzXG4gICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYHRiX25leHRgYCBpcyB0aGUgbmV4dCBsZXZlbCBpblxuICAgICAgdGhlIHN0YWNrIHRyYWNlICh0b3dhcmRzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCksIG9yIGBgTm9uZWBgIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7IGBgdGJfZnJhbWVgYFxuICAgICAgcG9pbnRzIHRvIHRoZSBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7XG4gICAgICBgYHRiX2xpbmVub2BgIGdpdmVzIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZDsgYGB0Yl9sYXN0aWBgIGluZGljYXRlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZVxuICAgICAgbGluZSBudW1iZXIgYW5kIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyXG4gICAgICBmcm9tIHRoZSBsaW5lIG51bWJlciBvZiBpdHMgZnJhbWUgb2JqZWN0IGlmIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkIGluIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBubyBtYXRjaGluZyBleGNlcHQgY2xhdXNlXG4gICAgICBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgYGBfX2dldGl0ZW1fXygpYGBcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluIGBgc2xpY2UoKWBgXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBzdGFydGBgIGlzIHRoZSBsb3dlciBib3VuZDtcbiAgICAgIGBgc3RvcGBgIGlzIHRoZSB1cHBlciBib3VuZDsgYGBzdGVwYGAgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXNcbiAgICAgIGBgTm9uZWBgIGlmIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzdGF0aWNtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluIGBgY2xhc3NtZXRob2QoKWBgIGNvbnN0cnVjdG9yLlxuJywKKyAndHlwZXMnOiAnXG5UaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHlcbioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5CZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIHR5cGVzIHRoYXQgYXJlIGJ1aWx0IGludG8gUHl0aG9uLiAgRXh0ZW5zaW9uXG5tb2R1bGVzICh3cml0dGVuIGluIEMsIEphdmEsIG9yIG90aGVyIGxhbmd1YWdlcywgZGVwZW5kaW5nIG9uIHRoZVxuaW1wbGVtZW50YXRpb24pIGNhbiBkZWZpbmUgYWRkaXRpb25hbCB0eXBlcy4gIEZ1dHVyZSB2ZXJzaW9ucyBvZlxuUHl0aG9uIG1heSBhZGQgdHlwZXMgdG8gdGhlIHR5cGUgaGllcmFyY2h5IChlLmcuLCByYXRpb25hbCBudW1iZXJzLFxuZWZmaWNpZW50bHkgc3RvcmVkIGFycmF5cyBvZiBpbnRlZ2VycywgZXRjLiksIGFsdGhvdWdoIHN1Y2ggYWRkaXRpb25zXG53aWxsIG9mdGVuIGJlIHByb3ZpZGVkIHZpYSB0aGUgc3RhbmRhcmQgbGlicmFyeSBpbnN0ZWFkLlxuXG5Tb21lIG9mIHRoZSB0eXBlIGRlc2NyaXB0aW9ucyBiZWxvdyBjb250YWluIGEgcGFyYWdyYXBoIGxpc3Rpbmdcblwnc3BlY2lhbCBhdHRyaWJ1dGVzLlwnICBUaGVzZSBhcmUgYXR0cmlidXRlcyB0aGF0IHByb3ZpZGUgYWNjZXNzIHRvIHRoZVxuaW1wbGVtZW50YXRpb24gYW5kIGFyZSBub3QgaW50ZW5kZWQgZm9yIGdlbmVyYWwgdXNlLiAgVGhlaXIgZGVmaW5pdGlvblxubWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuXG5Ob25lXG4gICBUaGlzIHR5cGUgaGFzIGEgc2luZ2xlIHZhbHVlLiAgVGhlcmUgaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdGhpc1xuICAgdmFsdWUuIFRoaXMgb2JqZWN0IGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGJ1aWx0LWluIG5hbWUgYGBOb25lYGAuXG4gICBJdCBpcyB1c2VkIHRvIHNpZ25pZnkgdGhlIGFic2VuY2Ugb2YgYSB2YWx1ZSBpbiBtYW55IHNpdHVhdGlvbnMsXG4gICBlLmcuLCBpdCBpcyByZXR1cm5lZCBmcm9tIGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVyblxuICAgYW55dGhpbmcuIEl0cyB0cnV0aCB2YWx1ZSBpcyBmYWxzZS5cblxuTm90SW1wbGVtZW50ZWRcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZVxuICAgYGBOb3RJbXBsZW1lbnRlZGBgLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCBgYC4uLmBgIG9yIHRoZVxuICAgYnVpbHQtaW4gbmFtZSBgYEVsbGlwc2lzYGAuICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuYGBudW1iZXJzLk51bWJlcmBgXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgYGBudW1iZXJzLkludGVncmFsYGBcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBlbGVtZW50cyBmcm9tIHRoZSBtYXRoZW1hdGljYWwgc2V0IG9mIGludGVnZXJzXG4gICAgICAocG9zaXRpdmUgYW5kIG5lZ2F0aXZlKS5cblxuICAgICAgVGhlcmUgYXJlIHR3byB0eXBlcyBvZiBpbnRlZ2VyczpcblxuICAgICAgSW50ZWdlcnMgKGBgaW50YGApXG5cbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCBudW1iZXJzIGluIGFuIHVubGltaXRlZCByYW5nZSwgc3ViamVjdCB0b1xuICAgICAgICAgYXZhaWxhYmxlICh2aXJ0dWFsKSBtZW1vcnkgb25seS4gIEZvciB0aGUgcHVycG9zZSBvZiBzaGlmdFxuICAgICAgICAgYW5kIG1hc2sgb3BlcmF0aW9ucywgYSBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgYXNzdW1lZCwgYW5kXG4gICAgICAgICBuZWdhdGl2ZSBudW1iZXJzIGFyZSByZXByZXNlbnRlZCBpbiBhIHZhcmlhbnQgb2YgMlwnc1xuICAgICAgICAgY29tcGxlbWVudCB3aGljaCBnaXZlcyB0aGUgaWxsdXNpb24gb2YgYW4gaW5maW5pdGUgc3RyaW5nIG9mXG4gICAgICAgICBzaWduIGJpdHMgZXh0ZW5kaW5nIHRvIHRoZSBsZWZ0LlxuXG4gICAgICBCb29sZWFucyAoYGBib29sYGApXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgRmFsc2UgYW5kIFRydWUgYXJlIHRoZSBvbmx5XG4gICAgICAgICBCb29sZWFuIG9iamVjdHMuIFRoZSBCb29sZWFuIHR5cGUgaXMgYSBzdWJ0eXBlIG9mIHRoZSBpbnRlZ2VyXG4gICAgICAgICB0eXBlLCBhbmQgQm9vbGVhbiB2YWx1ZXMgYmVoYXZlIGxpa2UgdGhlIHZhbHVlcyAwIGFuZCAxLFxuICAgICAgICAgcmVzcGVjdGl2ZWx5LCBpbiBhbG1vc3QgYWxsIGNvbnRleHRzLCB0aGUgZXhjZXB0aW9uIGJlaW5nXG4gICAgICAgICB0aGF0IHdoZW4gY29udmVydGVkIHRvIGEgc3RyaW5nLCB0aGUgc3RyaW5ncyBgYCJGYWxzZSJgYCBvclxuICAgICAgICAgYGAiVHJ1ZSJgYCBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgYGBudW1iZXJzLlJlYWxgYCAoYGBmbG9hdGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IG1hY2hpbmUtbGV2ZWwgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludFxuICAgICAgbnVtYmVycy4gWW91IGFyZSBhdCB0aGUgbWVyY3kgb2YgdGhlIHVuZGVybHlpbmcgbWFjaGluZVxuICAgICAgYXJjaGl0ZWN0dXJlIChhbmQgQyBvciBKYXZhIGltcGxlbWVudGF0aW9uKSBmb3IgdGhlIGFjY2VwdGVkXG4gICAgICByYW5nZSBhbmQgaGFuZGxpbmcgb2Ygb3ZlcmZsb3cuIFB5dGhvbiBkb2VzIG5vdCBzdXBwb3J0IHNpbmdsZS1cbiAgICAgIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kXG4gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpc1xuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgIGBgbnVtYmVycy5Db21wbGV4YGAgKGBgY29tcGxleGBgKVxuICAgICAgVGhlc2UgcmVwcmVzZW50IGNvbXBsZXggbnVtYmVycyBhcyBhIHBhaXIgb2YgbWFjaGluZS1sZXZlbFxuICAgICAgZG91YmxlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzLiAgVGhlIHNhbWUgY2F2ZWF0cyBhcHBseVxuICAgICAgYXMgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgYVxuICAgICAgY29tcGxleCBudW1iZXIgYGB6YGAgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgYGB6LnJlYWxgYCBhbmQgYGB6LmltYWdgYC5cblxuU2VxdWVuY2VzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIG9yZGVyZWQgc2V0cyBpbmRleGVkIGJ5IG5vbi1uZWdhdGl2ZVxuICAgbnVtYmVycy4gVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2ZcbiAgIGl0ZW1zIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlXG4gICBpbmRleCBzZXQgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mXG4gICBzZXF1ZW5jZSAqYSogaXMgc2VsZWN0ZWQgYnkgYGBhW2ldYGAuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogYGBhW2k6al1gYCBzZWxlY3RzIGFsbCBpdGVtcyB3aXRoXG4gICBpbmRleCAqayogc3VjaCB0aGF0ICppKiBgYDw9YGAgKmsqIGBgPGBgICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiBgYGFbaTpqOmtdYGAgc2VsZWN0cyBhbGwgaXRlbXMgb2YgKmEqIHdpdGggaW5kZXggKngqXG4gICB3aGVyZSBgYHggPSBpICsgbiprYGAsICpuKiBgYD49YGAgYGAwYGAgYW5kICppKiBgYDw9YGAgKngqIGBgPGBgXG4gICAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlXG4gICAgICAgICBjb2RlcG9pbnRzLiBBbGwgdGhlIGNvZGVwb2ludHMgaW4gcmFuZ2UgYGBVKzAwMDAgLSBVKzEwRkZGRmBgXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhXG4gICAgICAgICBgYGNocmBgIHR5cGUsIGFuZCBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyBpc1xuICAgICAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcgb2JqZWN0IHdpdGggbGVuZ3RoIGBgMWBgLiAgVGhlIGJ1aWx0LVxuICAgICAgICAgaW4gZnVuY3Rpb24gYGBvcmQoKWBgIGNvbnZlcnRzIGEgY2hhcmFjdGVyIHRvIGl0cyBjb2RlcG9pbnRcbiAgICAgICAgIChhcyBhbiBpbnRlZ2VyKTsgYGBjaHIoKWBgIGNvbnZlcnRzIGFuIGludGVnZXIgaW4gcmFuZ2UgYGAwIC1cbiAgICAgICAgIDEwRkZGRmBgIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3Rlci4gYGBzdHIuZW5jb2RlKClgYCBjYW5cbiAgICAgICAgIGJlIHVzZWQgdG8gY29udmVydCBhIGBgc3RyYGAgdG8gYGBieXRlc2BgIHVzaW5nIHRoZSBnaXZlblxuICAgICAgICAgZW5jb2RpbmcsIGFuZCBgYGJ5dGVzLmRlY29kZSgpYGAgY2FuIGJlIHVzZWQgdG8gYWNoaWV2ZSB0aGVcbiAgICAgICAgIG9wcG9zaXRlLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICAgICBCeXRlc1xuICAgICAgICAgQSBieXRlcyBvYmplY3QgaXMgYW4gaW1tdXRhYmxlIGFycmF5LiAgVGhlIGl0ZW1zIGFyZSA4LWJpdFxuICAgICAgICAgYnl0ZXMsIHJlcHJlc2VudGVkIGJ5IGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG4gICAgICAgICBCeXRlcyBsaXRlcmFscyAobGlrZSBgYGJcJ2FiY1wnYGApIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICAgICAgIGBgYnl0ZXMoKWBgIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlIGBgZGVjb2RlKClgYFxuICAgICAgICAgbWV0aG9kLlxuXG4gICBNdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgTXV0YWJsZSBzZXF1ZW5jZXMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gIFRoZVxuICAgICAgc3Vic2NyaXB0aW9uIGFuZCBzbGljaW5nIG5vdGF0aW9ucyBjYW4gYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mXG4gICAgICBhc3NpZ25tZW50IGFuZCBgYGRlbGBgIChkZWxldGUpIHN0YXRlbWVudHMuXG5cbiAgICAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzOlxuXG4gICAgICBMaXN0c1xuICAgICAgICAgVGhlIGl0ZW1zIG9mIGEgbGlzdCBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiAgTGlzdHMgYXJlXG4gICAgICAgICBmb3JtZWQgYnkgcGxhY2luZyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGluXG4gICAgICAgICBzcXVhcmUgYnJhY2tldHMuIChOb3RlIHRoYXQgdGhlcmUgYXJlIG5vIHNwZWNpYWwgY2FzZXMgbmVlZGVkXG4gICAgICAgICB0byBmb3JtIGxpc3RzIG9mIGxlbmd0aCAwIG9yIDEuKVxuXG4gICAgICBCeXRlIEFycmF5c1xuICAgICAgICAgQSBieXRlYXJyYXkgb2JqZWN0IGlzIGEgbXV0YWJsZSBhcnJheS4gVGhleSBhcmUgY3JlYXRlZCBieVxuICAgICAgICAgdGhlIGJ1aWx0LWluIGBgYnl0ZWFycmF5KClgYCBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlIGBgYXJyYXlgYCBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGV4YW1wbGUgb2ZcbiAgICAgIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCBhcyBkb2VzIHRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5TZXQgdHlwZXNcbiAgIFRoZXNlIHJlcHJlc2VudCB1bm9yZGVyZWQsIGZpbml0ZSBzZXRzIG9mIHVuaXF1ZSwgaW1tdXRhYmxlXG4gICBvYmplY3RzLiBBcyBzdWNoLCB0aGV5IGNhbm5vdCBiZSBpbmRleGVkIGJ5IGFueSBzdWJzY3JpcHQuIEhvd2V2ZXIsXG4gICB0aGV5IGNhbiBiZSBpdGVyYXRlZCBvdmVyLCBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYFxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgYGAxYGAgYW5kXG4gICBgYDEuMGBgKSwgb25seSBvbmUgb2YgdGhlbSBjYW4gYmUgY29udGFpbmVkIGluIGEgc2V0LlxuXG4gICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgc2V0IHR5cGVzOlxuXG4gICBTZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYSBtdXRhYmxlIHNldC4gVGhleSBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc2V0KClgYCBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyBgYGFkZCgpYGAuXG5cbiAgIEZyb3plbiBzZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlXG4gICAgICBidWlsdC1pbiBgYGZyb3plbnNldCgpYGAgY29uc3RydWN0b3IuICBBcyBhIGZyb3plbnNldCBpc1xuICAgICAgaW1tdXRhYmxlIGFuZCAqaGFzaGFibGUqLCBpdCBjYW4gYmUgdXNlZCBhZ2FpbiBhcyBhbiBlbGVtZW50IG9mXG4gICAgICBhbm90aGVyIHNldCwgb3IgYXMgYSBkaWN0aW9uYXJ5IGtleS5cblxuTWFwcGluZ3NcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgYXJiaXRyYXJ5IGluZGV4XG4gICBzZXRzLiBUaGUgc3Vic2NyaXB0IG5vdGF0aW9uIGBgYVtrXWBgIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieVxuICAgYGBrYGAgZnJvbSB0aGUgbWFwcGluZyBgYGFgYDsgdGhpcyBjYW4gYmUgdXNlZCBpbiBleHByZXNzaW9ucyBhbmRcbiAgIGFzIHRoZSB0YXJnZXQgb2YgYXNzaWdubWVudHMgb3IgYGBkZWxgYCBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW5cbiAgIGZ1bmN0aW9uIGBgbGVuKClgYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtYXBwaW5nLlxuXG4gICBUaGVyZSBpcyBjdXJyZW50bHkgYSBzaW5nbGUgaW50cmluc2ljIG1hcHBpbmcgdHlwZTpcblxuICAgRGljdGlvbmFyaWVzXG4gICAgICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IG5lYXJseVxuICAgICAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoZSBvbmx5IHR5cGVzIG9mIHZhbHVlcyBub3QgYWNjZXB0YWJsZSBhc1xuICAgICAga2V5cyBhcmUgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMgb3IgZGljdGlvbmFyaWVzIG9yIG90aGVyXG4gICAgICBtdXRhYmxlIHR5cGVzIHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuICAgICAgaWRlbnRpdHksIHRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mXG4gICAgICBkaWN0aW9uYXJpZXMgcmVxdWlyZXMgYSBrZXlcJ3MgaGFzaCB2YWx1ZSB0byByZW1haW4gY29uc3RhbnQuXG4gICAgICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljXG4gICAgICBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgICAgIGBgMS4wYGApIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgYGB7Li4ufWBgXG4gICAgICBub3RhdGlvbiAoc2VlIHNlY3Rpb24gKkRpY3Rpb25hcnkgZGlzcGxheXMqKS5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGVzIGBgZGJtLm5kYm1gYCBhbmQgYGBkYm0uZ251YGAgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZVxuICAgICAgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZS5cblxuQ2FsbGFibGUgdHlwZXNcbiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0aW9uIChzZWVcbiAgIHNlY3Rpb24gKkNhbGxzKikgY2FuIGJlIGFwcGxpZWQ6XG5cbiAgIFVzZXItZGVmaW5lZCBmdW5jdGlvbnNcbiAgICAgIEEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgZnVuY3Rpb25cbiAgICAgIGRlZmluaXRpb24gKHNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyopLiAgSXQgc2hvdWxkIGJlXG4gICAgICBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICBhcyB0aGUgZnVuY3Rpb25cJ3MgZm9ybWFsIHBhcmFtZXRlciBsaXN0LlxuXG4gICAgICBTcGVjaWFsIGF0dHJpYnV0ZXM6XG5cbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IEF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgYGBfX2RvY19fYGAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fbmFtZV9fYGAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIG5hbWUgICAgICAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fcXVhbG5hbWVfX2BgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzICpxdWFsaWZpZWQgbmFtZSogfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOZXcgaW4gdmVyc2lvbiAzLjMuICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX21vZHVsZV9fYGAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiwgb3IgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19kZWZhdWx0c19fYGAgICAgICAgICAgfCBBIHR1cGxlIGNvbnRhaW5pbmcgZGVmYXVsdCAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJndW1lbnQgdmFsdWVzIGZvciB0aG9zZSAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50cyB0aGF0IGhhdmUgZGVmYXVsdHMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYE5vbmVgYCBpZiBubyBhcmd1bWVudHMgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19jb2RlX19gYCAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uIGJvZHkuICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19nbG9iYWxzX19gYCAgICAgICAgICAgfCBBIHJlZmVyZW5jZSB0byB0aGUgZGljdGlvbmFyeSAgIHwgUmVhZC1vbmx5ICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb25cJ3MgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBnbG9iYWwgdmFyaWFibGVzIC0tLSB0aGUgZ2xvYmFsIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgaW4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZGVmaW5lZC4gfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZGljdF9fYGAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyYml0cmFyeSBmdW5jdGlvbiBhdHRyaWJ1dGVzLiAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fY2xvc3VyZV9fYGAgICAgICAgICAgIHwgYGBOb25lYGAgb3IgYSB0dXBsZSBvZiBjZWxscyAgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgY29udGFpbiBiaW5kaW5ncyBmb3IgdGhlICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmdW5jdGlvblwncyBmcmVlIHZhcmlhYmxlcy4gICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19hbm5vdGF0aW9uc19fYGAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBhbm5vdGF0aW9ucyAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2YgcGFyYW1ldGVycy4gIFRoZSBrZXlzIG9mIHRoZSB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpY3QgYXJlIHRoZSBwYXJhbWV0ZXIgbmFtZXMsICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciBgYFwncmV0dXJuXCdgYCBmb3IgdGhlIHJldHVybiAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbm5vdGF0aW9uLCBpZiBwcm92aWRlZC4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2t3ZGVmYXVsdHNfX2BgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGRlZmF1bHRzIGZvciAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4gICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcblxuICAgICAgTW9zdCBvZiB0aGUgYXR0cmlidXRlcyBsYWJlbGxlZCAiV3JpdGFibGUiIGNoZWNrIHRoZSB0eXBlIG9mIHRoZVxuICAgICAgYXNzaWduZWQgdmFsdWUuXG5cbiAgICAgIEZ1bmN0aW9uIG9iamVjdHMgYWxzbyBzdXBwb3J0IGdldHRpbmcgYW5kIHNldHRpbmcgYXJiaXRyYXJ5XG4gICAgICBhdHRyaWJ1dGVzLCB3aGljaCBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGF0dGFjaCBtZXRhZGF0YVxuICAgICAgdG8gZnVuY3Rpb25zLiAgUmVndWxhciBhdHRyaWJ1dGUgZG90LW5vdGF0aW9uIGlzIHVzZWQgdG8gZ2V0IGFuZFxuICAgICAgc2V0IHN1Y2ggYXR0cmlidXRlcy4gKk5vdGUgdGhhdCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvbmx5XG4gICAgICBzdXBwb3J0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuIEZ1bmN0aW9uXG4gICAgICBhdHRyaWJ1dGVzIG9uIGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXkgYmUgc3VwcG9ydGVkIGluIHRoZVxuICAgICAgZnV0dXJlLipcblxuICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBhIGZ1bmN0aW9uXCdzIGRlZmluaXRpb24gY2FuIGJlXG4gICAgICByZXRyaWV2ZWQgZnJvbSBpdHMgY29kZSBvYmplY3Q7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgaW50ZXJuYWxcbiAgICAgIHR5cGVzIGJlbG93LlxuXG4gICBJbnN0YW5jZSBtZXRob2RzXG4gICAgICBBbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGNvbWJpbmVzIGEgY2xhc3MsIGEgY2xhc3MgaW5zdGFuY2UgYW5kXG4gICAgICBhbnkgY2FsbGFibGUgb2JqZWN0IChub3JtYWxseSBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbikuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgX19zZWxmX19gYCBpcyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIG9iamVjdCwgYGBfX2Z1bmNfX2BgIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7IGBgX19kb2NfX2BgIGlzIHRoZVxuICAgICAgbWV0aG9kXCdzIGRvY3VtZW50YXRpb24gKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX2RvY19fYGApO1xuICAgICAgYGBfX25hbWVfX2BgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyBgYF9fZnVuY19fLl9fbmFtZV9fYGApO1xuICAgICAgYGBfX21vZHVsZV9fYGAgaXMgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgbWV0aG9kIHdhcyBkZWZpbmVkXG4gICAgICBpbiwgb3IgYGBOb25lYGAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyBgYF9fc2VsZl9fYGAgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZSwgYW5kIHRoZSBtZXRob2RcbiAgICAgIG9iamVjdCBpcyBzYWlkIHRvIGJlIGJvdW5kLiAgVGhlIG5ldyBtZXRob2RcJ3MgYGBfX2Z1bmNfX2BgXG4gICAgICBhdHRyaWJ1dGUgaXMgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgV2hlbiBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZ1xuICAgICAgYW5vdGhlciBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgdGhlIGJlaGF2aW91ciBpc1xuICAgICAgdGhlIHNhbWUgYXMgZm9yIGEgZnVuY3Rpb24gb2JqZWN0LCBleGNlcHQgdGhhdCB0aGUgYGBfX2Z1bmNfX2BgXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgYGBfX2Z1bmNfX2BgIGF0dHJpYnV0ZS5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGNyZWF0ZWQgYnkgcmV0cmlldmluZyBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0IGZyb20gYSBjbGFzcyBvciBpbnN0YW5jZSwgaXRzIGBgX19zZWxmX19gYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBjbGFzcyBpdHNlbGYsIGFuZCBpdHMgYGBfX2Z1bmNfX2BgIGF0dHJpYnV0ZSBpc1xuICAgICAgdGhlIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoYGBfX2Z1bmNfX2BgKSBpcyBjYWxsZWQsIGluc2VydGluZyB0aGUgY2xhc3MgaW5zdGFuY2VcbiAgICAgIChgYF9fc2VsZl9fYGApIGluIGZyb250IG9mIHRoZSBhcmd1bWVudCBsaXN0LiAgRm9yIGluc3RhbmNlLFxuICAgICAgd2hlbiBgYENgYCBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvblxuICAgICAgYGBmKClgYCwgYW5kIGBgeGBgIGlzIGFuIGluc3RhbmNlIG9mIGBgQ2BgLCBjYWxsaW5nIGBgeC5mKDEpYGBcbiAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYEMuZih4LCAxKWBgLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgZGVyaXZlZCBmcm9tIGEgY2xhc3MgbWV0aG9kXG4gICAgICBvYmplY3QsIHRoZSAiY2xhc3MgaW5zdGFuY2UiIHN0b3JlZCBpbiBgYF9fc2VsZl9fYGAgd2lsbFxuICAgICAgYWN0dWFsbHkgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciBgYHguZigxKWBgXG4gICAgICBvciBgYEMuZigxKWBgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGYoQywxKWBgIHdoZXJlIGBgZmBgIGlzXG4gICAgICB0aGUgdW5kZXJseWluZyBmdW5jdGlvbi5cblxuICAgICAgTm90ZSB0aGF0IHRoZSB0cmFuc2Zvcm1hdGlvbiBmcm9tIGZ1bmN0aW9uIG9iamVjdCB0byBpbnN0YW5jZVxuICAgICAgbWV0aG9kIG9iamVjdCBoYXBwZW5zIGVhY2ggdGltZSB0aGUgYXR0cmlidXRlIGlzIHJldHJpZXZlZCBmcm9tXG4gICAgICB0aGUgaW5zdGFuY2UuICBJbiBzb21lIGNhc2VzLCBhIGZydWl0ZnVsIG9wdGltaXphdGlvbiBpcyB0b1xuICAgICAgYXNzaWduIHRoZSBhdHRyaWJ1dGUgdG8gYSBsb2NhbCB2YXJpYWJsZSBhbmQgY2FsbCB0aGF0IGxvY2FsXG4gICAgICB2YXJpYWJsZS4gQWxzbyBub3RpY2UgdGhhdCB0aGlzIHRyYW5zZm9ybWF0aW9uIG9ubHkgaGFwcGVucyBmb3JcbiAgICAgIHVzZXItZGVmaW5lZCBmdW5jdGlvbnM7IG90aGVyIGNhbGxhYmxlIG9iamVjdHMgKGFuZCBhbGwgbm9uLVxuICAgICAgY2FsbGFibGUgb2JqZWN0cykgYXJlIHJldHJpZXZlZCB3aXRob3V0IHRyYW5zZm9ybWF0aW9uLiAgSXQgaXNcbiAgICAgIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIHdoaWNoIGFyZVxuICAgICAgYXR0cmlidXRlcyBvZiBhIGNsYXNzIGluc3RhbmNlIGFyZSBub3QgY29udmVydGVkIHRvIGJvdW5kXG4gICAgICBtZXRob2RzOyB0aGlzICpvbmx5KiBoYXBwZW5zIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGFuIGF0dHJpYnV0ZVxuICAgICAgb2YgdGhlIGNsYXNzLlxuXG4gICBHZW5lcmF0b3IgZnVuY3Rpb25zXG4gICAgICBBIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCB1c2VzIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IChzZWVcbiAgICAgIHNlY3Rpb24gKlRoZSB5aWVsZCBzdGF0ZW1lbnQqKSBpcyBjYWxsZWQgYSAqZ2VuZXJhdG9yIGZ1bmN0aW9uKi5cbiAgICAgIFN1Y2ggYSBmdW5jdGlvbiwgd2hlbiBjYWxsZWQsIGFsd2F5cyByZXR1cm5zIGFuIGl0ZXJhdG9yIG9iamVjdFxuICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZXhlY3V0ZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb246ICBjYWxsaW5nXG4gICAgICB0aGUgaXRlcmF0b3JcJ3MgYGBpdGVyYXRvci5fX25leHRfXygpYGAgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlXG4gICAgICBgYHlpZWxkYGAgc3RhdGVtZW50LiAgV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgYHJldHVybmBgXG4gICAgICBzdGF0ZW1lbnQgb3IgZmFsbHMgb2ZmIHRoZSBlbmQsIGEgYGBTdG9wSXRlcmF0aW9uYGAgZXhjZXB0aW9uIGlzXG4gICAgICByYWlzZWQgYW5kIHRoZSBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2ZcbiAgICAgIHZhbHVlcyB0byBiZSByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYGBsZW4oKWBgIGFuZCBgYG1hdGguc2luKClgYFxuICAgICAgKGBgbWF0aGBgIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiBgYF9fZG9jX19gYCBpcyB0aGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvblxuICAgICAgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZTsgYGBfX25hbWVfX2BgIGlzIHRoZVxuICAgICAgZnVuY3Rpb25cJ3MgbmFtZTsgYGBfX3NlbGZfX2BgIGlzIHNldCB0byBgYE5vbmVgYCAoYnV0IHNlZSB0aGVcbiAgICAgIG5leHQgaXRlbSk7IGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlXG4gICAgICBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgQnVpbHQtaW4gbWV0aG9kc1xuICAgICAgVGhpcyBpcyByZWFsbHkgYSBkaWZmZXJlbnQgZGlzZ3Vpc2Ugb2YgYSBidWlsdC1pbiBmdW5jdGlvbiwgdGhpc1xuICAgICAgdGltZSBjb250YWluaW5nIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIEMgZnVuY3Rpb24gYXMgYW5cbiAgICAgIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZiBhIGJ1aWx0LWluIG1ldGhvZCBpc1xuICAgICAgYGBhbGlzdC5hcHBlbmQoKWBgLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgYGBfX3NlbGZfX2BgIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlIGBgX19uZXdfXygpYGAuICBUaGUgYXJndW1lbnRzIG9mIHRoZVxuICAgICAgY2FsbCBhcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgYGBfX2luaXRfXygpYGAgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlaXIgY2xhc3MuXG5cbk1vZHVsZXNcbiAgIE1vZHVsZXMgYXJlIGEgYmFzaWMgb3JnYW5pemF0aW9uYWwgdW5pdCBvZiBQeXRob24gY29kZSwgYW5kIGFyZVxuICAgY3JlYXRlZCBieSB0aGUgKmltcG9ydCBzeXN0ZW0qIGFzIGludm9rZWQgZWl0aGVyIGJ5IHRoZSBgYGltcG9ydGBgXG4gICBzdGF0ZW1lbnQgKHNlZSBgYGltcG9ydGBgKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgYGBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpYGAgYW5kIGJ1aWx0LWluIGBgX19pbXBvcnRfXygpYGAuICBBXG4gICBtb2R1bGUgb2JqZWN0IGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZCBieSBhIGRpY3Rpb25hcnkgb2JqZWN0XG4gICAodGhpcyBpcyB0aGUgZGljdGlvbmFyeSByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZ2xvYmFsc19fYGAgYXR0cmlidXRlXG4gICBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBtLnhgYCBpc1xuICAgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXWBgLiBBIG1vZHVsZSBvYmplY3QgZG9lcyBub3QgY29udGFpblxuICAgdGhlIGNvZGUgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIChzaW5jZSBpdCBpc25cJ3RcbiAgIG5lZWRlZCBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgYGBtLnggPSAxYGAgaXMgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXSA9IDFgYC5cblxuICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlOiBgYF9fZGljdF9fYGAgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBtb2R1bGVcJ3NcbiAgIG5hbWU7IGBgX19kb2NfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgXG4gICBpZiB1bmF2YWlsYWJsZTsgYGBfX2ZpbGVfX2BgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoXG4gICB0aGUgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZVxuICAgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBtYXkgYmUgbWlzc2luZyBmb3IgY2VydGFpbiB0eXBlcyBvZiBtb2R1bGVzLFxuICAgc3VjaCBhcyBDIG1vZHVsZXMgdGhhdCBhcmUgc3RhdGljYWxseSBsaW5rZWQgaW50byB0aGUgaW50ZXJwcmV0ZXI7XG4gICBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgbG9hZGVkIGR5bmFtaWNhbGx5IGZyb20gYSBzaGFyZWQgbGlicmFyeSwgaXRcbiAgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgZmlsZS5cblxuQ3VzdG9tIGNsYXNzZXNcbiAgIEN1c3RvbSBjbGFzcyB0eXBlcyBhcmUgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgY2xhc3MgZGVmaW5pdGlvbnMgKHNlZVxuICAgc2VjdGlvbiAqQ2xhc3MgZGVmaW5pdGlvbnMqKS4gIEEgY2xhc3MgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkXG4gICBieSBhIGRpY3Rpb25hcnkgb2JqZWN0LiBDbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgdHJhbnNsYXRlZFxuICAgdG8gbG9va3VwcyBpbiB0aGlzIGRpY3Rpb25hcnksIGUuZy4sIGBgQy54YGAgaXMgdHJhbnNsYXRlZCB0b1xuICAgYGBDLl9fZGljdF9fWyJ4Il1gYCAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoXG4gICBhbGxvdyBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZVxuICAgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyBgYENgYCwgc2F5KSB3b3VsZCB5aWVsZFxuICAgYSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZFxuICAgb2JqZWN0IHdob3NlIGBgX19zZWxmX19gYCBhdHRyaWJ1dGVzIGlzIGBgQ2BgLiAgV2hlbiBpdCB3b3VsZCB5aWVsZFxuICAgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWRcbiAgIGJ5IHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzIGBgX19kaWN0X19gYC5cblxuICAgQ2xhc3MgYXR0cmlidXRlIGFzc2lnbm1lbnRzIHVwZGF0ZSB0aGUgY2xhc3NcJ3MgZGljdGlvbmFyeSwgbmV2ZXJcbiAgIHRoZSBkaWN0aW9uYXJ5IG9mIGEgYmFzZSBjbGFzcy5cblxuICAgQSBjbGFzcyBvYmplY3QgY2FuIGJlIGNhbGxlZCAoc2VlIGFib3ZlKSB0byB5aWVsZCBhIGNsYXNzIGluc3RhbmNlXG4gICAoc2VlIGJlbG93KS5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fbmFtZV9fYGAgaXMgdGhlIGNsYXNzIG5hbWU7IGBgX19tb2R1bGVfX2BgXG4gICBpcyB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyBgYF9fZGljdF9fYGAgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGNsYXNzXCdzIG5hbWVzcGFjZTsgYGBfX2Jhc2VzX19gYCBpcyBhXG4gICB0dXBsZSAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcyxcbiAgIGluIHRoZSBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7XG4gICBgYF9fZG9jX19gYCBpcyB0aGUgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWZcbiAgIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlIGBgX19zZWxmX19gYCBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3NcbiAgIGBgX19kaWN0X19gYC4gIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3NcbiAgIGNsYXNzIGhhcyBhIGBgX19nZXRhdHRyX18oKWBgIG1ldGhvZCwgdGhhdCBpcyBjYWxsZWQgdG8gc2F0aXNmeSB0aGVcbiAgIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICBgYF9fc2V0YXR0cl9fKClgYCBvciBgYF9fZGVsYXR0cl9fKClgYCBtZXRob2QsIHRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiBgYF9fZGljdF9fYGAgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgYGBfX2NsYXNzX19gYCBpcyB0aGUgaW5zdGFuY2VcJ3MgY2xhc3MuXG5cbkkvTyBvYmplY3RzIChhbHNvIGtub3duIGFzIGZpbGUgb2JqZWN0cylcbiAgIEEgKmZpbGUgb2JqZWN0KiByZXByZXNlbnRzIGFuIG9wZW4gZmlsZS4gIFZhcmlvdXMgc2hvcnRjdXRzIGFyZVxuICAgYXZhaWxhYmxlIHRvIGNyZWF0ZSBmaWxlIG9iamVjdHM6IHRoZSBgYG9wZW4oKWBgIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gYGBvcy5wb3BlbigpYGAsIGBgb3MuZmRvcGVuKClgYCwgYW5kIHRoZSBgYG1ha2VmaWxlKClgYFxuICAgbWV0aG9kIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyBgYHN5cy5zdGRpbmBgLCBgYHN5cy5zdGRvdXRgYCBhbmQgYGBzeXMuc3RkZXJyYGAgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgYGBpby5UZXh0SU9CYXNlYGAgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGNvX25hbWVgYCBnaXZlcyB0aGUgZnVuY3Rpb25cbiAgICAgIG5hbWU7IGBgY29fYXJnY291bnRgYCBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4gICAgICAoaW5jbHVkaW5nIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgYGBjb19ubG9jYWxzYGAgaXMgdGhlXG4gICAgICBudW1iZXIgb2YgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyk7IGBgY29fdmFybmFtZXNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mXG4gICAgICB0aGUgbG9jYWwgdmFyaWFibGVzIChzdGFydGluZyB3aXRoIHRoZSBhcmd1bWVudCBuYW1lcyk7XG4gICAgICBgYGNvX2NlbGx2YXJzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbFxuICAgICAgdmFyaWFibGVzIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9ucztcbiAgICAgIGBgY29fZnJlZXZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWVcbiAgICAgIHZhcmlhYmxlczsgYGBjb19jb2RlYGAgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZlxuICAgICAgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyBgYGNvX2NvbnN0c2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbiAgICAgIGxpdGVyYWxzIHVzZWQgYnkgdGhlIGJ5dGVjb2RlOyBgYGNvX25hbWVzYGAgaXMgYSB0dXBsZVxuICAgICAgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fZmlsZW5hbWVgYCBpc1xuICAgICAgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgYGBjb19maXJzdGxpbmVub2BgIGlzIHRoZSBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb247XG4gICAgICBgYGNvX2xub3RhYmBgIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyBgYGNvX3N0YWNrc2l6ZWBgIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7IGBgY29fZmxhZ3NgYCBpcyBhbiBpbnRlZ2VyIGVuY29kaW5nXG4gICAgICBhIG51bWJlciBvZiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyLlxuXG4gICAgICBUaGUgZm9sbG93aW5nIGZsYWcgYml0cyBhcmUgZGVmaW5lZCBmb3IgYGBjb19mbGFnc2BgOiBiaXRcbiAgICAgIGBgMHgwNGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqYXJndW1lbnRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50czsgYml0XG4gICAgICBgYDB4MDhgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlIGBgKiprZXl3b3Jkc2BgIHN5bnRheFxuICAgICAgdG8gYWNjZXB0IGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50czsgYml0IGBgMHgyMGBgIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yLlxuXG4gICAgICBGdXR1cmUgZmVhdHVyZSBkZWNsYXJhdGlvbnMgKGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydFxuICAgICAgZGl2aXNpb25gYCkgYWxzbyB1c2UgYml0cyBpbiBgYGNvX2ZsYWdzYGAgdG8gaW5kaWNhdGUgd2hldGhlciBhXG4gICAgICBjb2RlIG9iamVjdCB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXRcbiAgICAgIGBgMHgyMDAwYGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB3YXMgY29tcGlsZWQgd2l0aCBmdXR1cmVcbiAgICAgIGRpdmlzaW9uIGVuYWJsZWQ7IGJpdHMgYGAweDEwYGAgYW5kIGBgMHgxMDAwYGAgd2VyZSB1c2VkIGluXG4gICAgICBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiBgYGNvX2ZsYWdzYGAgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UuXG5cbiAgICAgIElmIGEgY29kZSBvYmplY3QgcmVwcmVzZW50cyBhIGZ1bmN0aW9uLCB0aGUgZmlyc3QgaXRlbSBpblxuICAgICAgYGBjb19jb25zdHNgYCBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgYGBOb25lYGAgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYGZfYmFja2BgIGlzIHRvIHRoZSBwcmV2aW91c1xuICAgICAgc3RhY2sgZnJhbWUgKHRvd2FyZHMgdGhlIGNhbGxlciksIG9yIGBgTm9uZWBgIGlmIHRoaXMgaXMgdGhlXG4gICAgICBib3R0b20gc3RhY2sgZnJhbWU7IGBgZl9jb2RlYGAgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkXG4gICAgICBpbiB0aGlzIGZyYW1lOyBgYGZfbG9jYWxzYGAgaXMgdGhlIGRpY3Rpb25hcnkgdXNlZCB0byBsb29rIHVwXG4gICAgICBsb2NhbCB2YXJpYWJsZXM7IGBgZl9nbG9iYWxzYGAgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgIGBgZl9idWlsdGluc2BgIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzO1xuICAgICAgYGBmX2xhc3RpYGAgZ2l2ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24gKHRoaXMgaXMgYW4gaW5kZXggaW50b1xuICAgICAgdGhlIGJ5dGVjb2RlIHN0cmluZyBvZiB0aGUgY29kZSBvYmplY3QpLlxuXG4gICAgICBTcGVjaWFsIHdyaXRhYmxlIGF0dHJpYnV0ZXM6IGBgZl90cmFjZWBgLCBpZiBub3QgYGBOb25lYGAsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7IGBgZl9saW5lbm9gYCBpcyB0aGUgY3VycmVudCBsaW5lIG51bWJlclxuICAgICAgb2YgdGhlIGZyYW1lIC0tLSB3cml0aW5nIHRvIHRoaXMgZnJvbSB3aXRoaW4gYSB0cmFjZSBmdW5jdGlvblxuICAgICAganVtcHMgdG8gdGhlIGdpdmVuIGxpbmUgKG9ubHkgZm9yIHRoZSBib3R0b20tbW9zdCBmcmFtZSkuICBBXG4gICAgICBkZWJ1Z2dlciBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KVxuICAgICAgYnkgd3JpdGluZyB0byBmX2xpbmVuby5cblxuICAgICAgRnJhbWUgb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIGZyYW1lLmNsZWFyKClcblxuICAgICAgICAgVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBoZWxkIGJ5XG4gICAgICAgICB0aGUgZnJhbWUuICBBbHNvLCBpZiB0aGUgZnJhbWUgYmVsb25nZWQgdG8gYSBnZW5lcmF0b3IsIHRoZVxuICAgICAgICAgZ2VuZXJhdG9yIGlzIGZpbmFsaXplZC4gIFRoaXMgaGVscHMgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlc1xuICAgICAgICAgaW52b2x2aW5nIGZyYW1lIG9iamVjdHMgKGZvciBleGFtcGxlIHdoZW4gY2F0Y2hpbmcgYW5cbiAgICAgICAgIGV4Y2VwdGlvbiBhbmQgc3RvcmluZyBpdHMgdHJhY2ViYWNrIGZvciBsYXRlciB1c2UpLlxuXG4gICAgICAgICBgYFJ1bnRpbWVFcnJvcmBgIGlzIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgY3VycmVudGx5XG4gICAgICAgICBleGVjdXRpbmcuXG5cbiAgICAgICAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuICAgVHJhY2ViYWNrIG9iamVjdHNcbiAgICAgIFRyYWNlYmFjayBvYmplY3RzIHJlcHJlc2VudCBhIHN0YWNrIHRyYWNlIG9mIGFuIGV4Y2VwdGlvbi4gIEFcbiAgICAgIHRyYWNlYmFjayBvYmplY3QgaXMgY3JlYXRlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuICBXaGVuIHRoZVxuICAgICAgc2VhcmNoIGZvciBhbiBleGNlcHRpb24gaGFuZGxlciB1bndpbmRzIHRoZSBleGVjdXRpb24gc3RhY2ssIGF0XG4gICAgICBlYWNoIHVud291bmQgbGV2ZWwgYSB0cmFjZWJhY2sgb2JqZWN0IGlzIGluc2VydGVkIGluIGZyb250IG9mXG4gICAgICB0aGUgY3VycmVudCB0cmFjZWJhY2suICBXaGVuIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIGVudGVyZWQsXG4gICAgICB0aGUgc3RhY2sgdHJhY2UgaXMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0uIChTZWUgc2VjdGlvblxuICAgICAgKlRoZSB0cnkgc3RhdGVtZW50Ki4pIEl0IGlzIGFjY2Vzc2libGUgYXMgdGhlIHRoaXJkIGl0ZW0gb2YgdGhlXG4gICAgICB0dXBsZSByZXR1cm5lZCBieSBgYHN5cy5leGNfaW5mbygpYGAuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnNcbiAgICAgIG5vIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHlcbiAgICAgIGZvcm1hdHRlZCkgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzXG4gICAgICBpbnRlcmFjdGl2ZSwgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhc1xuICAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGB0Yl9uZXh0YGAgaXMgdGhlIG5leHQgbGV2ZWwgaW5cbiAgICAgIHRoZSBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQpLCBvciBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBuZXh0IGxldmVsOyBgYHRiX2ZyYW1lYGBcbiAgICAgIHBvaW50cyB0byB0aGUgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsO1xuICAgICAgYGB0Yl9saW5lbm9gYCBnaXZlcyB0aGUgbGluZSBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvblxuICAgICAgb2NjdXJyZWQ7IGBgdGJfbGFzdGlgYCBpbmRpY2F0ZXMgdGhlIHByZWNpc2UgaW5zdHJ1Y3Rpb24uICBUaGVcbiAgICAgIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluIHRoZSB0cmFjZWJhY2sgbWF5IGRpZmZlclxuICAgICAgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lIG9iamVjdCBpZiB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCBpbiBhIGBgdHJ5YGAgc3RhdGVtZW50IHdpdGggbm8gbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZVxuICAgICAgb3Igd2l0aCBhIGZpbmFsbHkgY2xhdXNlLlxuXG4gICBTbGljZSBvYmplY3RzXG4gICAgICBTbGljZSBvYmplY3RzIGFyZSB1c2VkIHRvIHJlcHJlc2VudCBzbGljZXMgZm9yIGBgX19nZXRpdGVtX18oKWBgXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiBgYHNsaWNlKClgYFxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgc3RhcnRgYCBpcyB0aGUgbG93ZXIgYm91bmQ7XG4gICAgICBgYHN0b3BgYCBpcyB0aGUgdXBwZXIgYm91bmQ7IGBgc3RlcGBgIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzXG4gICAgICBgYE5vbmVgYCBpZiBvbWl0dGVkLiAgVGhlc2UgYXR0cmlidXRlcyBjYW4gaGF2ZSBhbnkgdHlwZS5cblxuICAgICAgU2xpY2Ugb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6XG5cbiAgICAgIHNsaWNlLmluZGljZXMoc2VsZiwgbGVuZ3RoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBpbnRlZ2VyIGFyZ3VtZW50ICpsZW5ndGgqIGFuZFxuICAgICAgICAgY29tcHV0ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNsaWNlIHRoYXQgdGhlIHNsaWNlIG9iamVjdFxuICAgICAgICAgd291bGQgZGVzY3JpYmUgaWYgYXBwbGllZCB0byBhIHNlcXVlbmNlIG9mICpsZW5ndGgqIGl0ZW1zLlxuICAgICAgICAgSXQgcmV0dXJucyBhIHR1cGxlIG9mIHRocmVlIGludGVnZXJzOyByZXNwZWN0aXZlbHkgdGhlc2UgYXJlXG4gICAgICAgICB0aGUgKnN0YXJ0KiBhbmQgKnN0b3AqIGluZGljZXMgYW5kIHRoZSAqc3RlcCogb3Igc3RyaWRlXG4gICAgICAgICBsZW5ndGggb2YgdGhlIHNsaWNlLiBNaXNzaW5nIG9yIG91dC1vZi1ib3VuZHMgaW5kaWNlcyBhcmVcbiAgICAgICAgIGhhbmRsZWQgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHJlZ3VsYXIgc2xpY2VzLlxuXG4gICBTdGF0aWMgbWV0aG9kIG9iamVjdHNcbiAgICAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBwcm92aWRlIGEgd2F5IG9mIGRlZmVhdGluZyB0aGVcbiAgICAgIHRyYW5zZm9ybWF0aW9uIG9mIGZ1bmN0aW9uIG9iamVjdHMgdG8gbWV0aG9kIG9iamVjdHMgZGVzY3JpYmVkXG4gICAgICBhYm92ZS4gQSBzdGF0aWMgbWV0aG9kIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFueSBvdGhlclxuICAgICAgb2JqZWN0LCB1c3VhbGx5IGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QuIFdoZW4gYSBzdGF0aWNcbiAgICAgIG1ldGhvZCBvYmplY3QgaXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBvciBhIGNsYXNzIGluc3RhbmNlLCB0aGVcbiAgICAgIG9iamVjdCBhY3R1YWxseSByZXR1cm5lZCBpcyB0aGUgd3JhcHBlZCBvYmplY3QsIHdoaWNoIGlzIG5vdFxuICAgICAgc3ViamVjdCB0byBhbnkgZnVydGhlciB0cmFuc2Zvcm1hdGlvbi4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZVxuICAgICAgbm90IHRoZW1zZWx2ZXMgY2FsbGFibGUsIGFsdGhvdWdoIHRoZSBvYmplY3RzIHRoZXkgd3JhcCB1c3VhbGx5XG4gICAgICBhcmUuIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZCBieSB0aGUgYnVpbHQtaW5cbiAgICAgIGBgc3RhdGljbWV0aG9kKClgYCBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiBgYGNsYXNzbWV0aG9kKClgYCBjb25zdHJ1Y3Rvci5cbicsCiAgJ3R5cGVzZnVuY3Rpb25zJzogJ1xuRnVuY3Rpb25zXG4qKioqKioqKipcblxuRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5XG5vcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDogYGBmdW5jKGFyZ3VtZW50LWxpc3QpYGAuXG5cblRoZXJlIGFyZSByZWFsbHkgdHdvIGZsYXZvcnMgb2YgZnVuY3Rpb24gb2JqZWN0czogYnVpbHQtaW4gZnVuY3Rpb25zXG5hbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gIEJvdGggc3VwcG9ydCB0aGUgc2FtZSBvcGVyYXRpb24gKHRvIGNhbGxcbnRoZSBmdW5jdGlvbiksIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZGlmZmVyZW50LCBoZW5jZSB0aGVcbmRpZmZlcmVudCBvYmplY3QgdHlwZXMuXG5cblNlZSAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAndHlwZXNtYXBwaW5nJzogJ1xuTWFwcGluZyBUeXBlcyAtLS0gYGBkaWN0YGBcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKm1hcHBpbmcqIG9iamVjdCBtYXBzICpoYXNoYWJsZSogdmFsdWVzIHRvIGFyYml0cmFyeSBvYmplY3RzLlxuTWFwcGluZ3MgYXJlIG11dGFibGUgb2JqZWN0cy4gIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBzdGFuZGFyZFxubWFwcGluZyB0eXBlLCB0aGUgKmRpY3Rpb25hcnkqLiAgKEZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHQtXG5pbiBgYGxpc3RgYCwgYGBzZXRgYCwgYW5kIGBgdHVwbGVgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYFxubW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzIGBgMWBgIGFuZCBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvXG5pbmRleCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnNcbnN0b3JlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG9cbnVzZSB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbmBga2V5OiB2YWx1ZWBgIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHtcJ2phY2tcJzogNDA5OCxcblwnc2pvZXJkXCc6IDQxMjd9YGAgb3IgYGB7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9YGAsIG9yIGJ5IHRoZVxuYGBkaWN0YGAgY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QobWFwcGluZywgKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QoaXRlcmFibGUsICoqa3dhcmcpXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgYW5kIGEgcG9zc2libHkgZW1wdHkgc2V0IG9mIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICBJZiBubyBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuLCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQuXG4gICBJZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIGEgbWFwcGluZyBvYmplY3QsIGFcbiAgIGRpY3Rpb25hcnkgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyB0aGUgbWFwcGluZ1xuICAgb2JqZWN0LiAgT3RoZXJ3aXNlLCB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuICppdGVyYXRvcipcbiAgIG9iamVjdC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmF0b3Igd2l0aFxuICAgZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBvYmplY3Qgb2YgZWFjaCBpdGVtIGJlY29tZXMgYSBrZXlcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgb2JqZWN0IHRoZSBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZS4gIElmIGEga2V5IG9jY3VycyBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgZm9yIHRoYXQga2V5XG4gICBiZWNvbWVzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZWlyXG4gICB2YWx1ZXMgYXJlIGFkZGVkIHRvIHRoZSBkaWN0aW9uYXJ5IGNyZWF0ZWQgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuICBJZiBhIGtleSBiZWluZyBhZGRlZCBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tXG4gICB0aGUga2V5d29yZCBhcmd1bWVudCByZXBsYWNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuXG5cbiAgIFRvIGlsbHVzdHJhdGUsIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYWxsIHJldHVybiBhIGRpY3Rpb25hcnkgZXF1YWxcbiAgIHRvIGBgeyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM31gYDpcblxuICAgICAgPj4+IGEgPSBkaWN0KG9uZT0xLCB0d289MiwgdGhyZWU9MylcbiAgICAgID4+PiBiID0ge1wnb25lXCc6IDEsIFwndHdvXCc6IDIsIFwndGhyZWVcJzogM31cbiAgICAgID4+PiBjID0gZGljdCh6aXAoW1wnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJ10sIFsxLCAyLCAzXSkpXG4gICAgICA+Pj4gZCA9IGRpY3QoWyhcJ3R3b1wnLCAyKSwgKFwnb25lXCcsIDEpLCAoXCd0aHJlZVwnLCAzKV0pXG4gICAgICA+Pj4gZSA9IGRpY3Qoe1wndGhyZWVcJzogMywgXCdvbmVcJzogMSwgXCd0d29cJzogMn0pXG4gICAgICA+Pj4gYSA9PSBiID09IGMgPT0gZCA9PSBlXG4gICAgICBUcnVlXG5cbiAgIFByb3ZpZGluZyBrZXl3b3JkIGFyZ3VtZW50cyBhcyBpbiB0aGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvclxuICAga2V5cyB0aGF0IGFyZSB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMuICBPdGhlcndpc2UsIGFueSB2YWxpZCBrZXlzXG4gICBjYW4gYmUgdXNlZC5cblxuICAgVGhlc2UgYXJlIHRoZSBvcGVyYXRpb25zIHRoYXQgZGljdGlvbmFyaWVzIHN1cHBvcnQgKGFuZCB0aGVyZWZvcmUsXG4gICBjdXN0b20gbWFwcGluZyB0eXBlcyBzaG91bGQgc3VwcG9ydCB0b28pOlxuXG4gICBsZW4oZClcblxuICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGRpY3Rpb25hcnkgKmQqLlxuXG4gICBkW2tleV1cblxuICAgICAgUmV0dXJuIHRoZSBpdGVtIG9mICpkKiB3aXRoIGtleSAqa2V5Ki4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZlxuICAgICAgKmtleSogaXMgbm90IGluIHRoZSBtYXAuXG5cbiAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kIGBgX19taXNzaW5nX18oKWBgLCBpZiB0aGVcbiAgICAgIGtleSAqa2V5KiBpcyBub3QgcHJlc2VudCwgdGhlIGBgZFtrZXldYGAgb3BlcmF0aW9uIGNhbGxzIHRoYXRcbiAgICAgIG1ldGhvZCB3aXRoIHRoZSBrZXkgKmtleSogYXMgYXJndW1lbnQuICBUaGUgYGBkW2tleV1gYCBvcGVyYXRpb25cbiAgICAgIHRoZW4gcmV0dXJucyBvciByYWlzZXMgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZVxuICAgICAgYGBfX21pc3NpbmdfXyhrZXkpYGAgY2FsbCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LiBObyBvdGhlclxuICAgICAgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZSBgYF9fbWlzc2luZ19fKClgYC4gSWZcbiAgICAgIGBgX19taXNzaW5nX18oKWBgIGlzIG5vdCBkZWZpbmVkLCBgYEtleUVycm9yYGAgaXMgcmFpc2VkLlxuICAgICAgYGBfX21pc3NpbmdfXygpYGAgbXVzdCBiZSBhIG1ldGhvZDsgaXQgY2Fubm90IGJlIGFuIGluc3RhbmNlXG4gICAgICB2YXJpYWJsZTpcblxuICAgICAgICAgPj4+IGNsYXNzIENvdW50ZXIoZGljdCk6XG4gICAgICAgICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgICAgICAgLi4uICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgID4+PiBjID0gQ291bnRlcigpXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMFxuICAgICAgICAgPj4+IGNbXCdyZWRcJ10gKz0gMVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDFcblxuICAgICAgU2VlIGBgY29sbGVjdGlvbnMuQ291bnRlcmBgIGZvciBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uXG4gICAgICBpbmNsdWRpbmcgb3RoZXIgbWV0aG9kcyBoZWxwZnVsIGZvciBhY2N1bXVsYXRpbmcgYW5kIG1hbmFnaW5nXG4gICAgICB0YWxsaWVzLlxuXG4gICBkW2tleV0gPSB2YWx1ZVxuXG4gICAgICBTZXQgYGBkW2tleV1gYCB0byAqdmFsdWUqLlxuXG4gICBkZWwgZFtrZXldXG5cbiAgICAgIFJlbW92ZSBgYGRba2V5XWBgIGZyb20gKmQqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIG1hcC5cblxuICAga2V5IGluIGRcblxuICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpkKiBoYXMgYSBrZXkgKmtleSosIGVsc2UgYGBGYWxzZWBgLlxuXG4gICBrZXkgbm90IGluIGRcblxuICAgICAgRXF1aXZhbGVudCB0byBgYG5vdCBrZXkgaW4gZGBgLlxuXG4gICBpdGVyKGQpXG5cbiAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzIG9mIHRoZSBkaWN0aW9uYXJ5LiAgVGhpcyBpcyBhXG4gICAgICBzaG9ydGN1dCBmb3IgYGBpdGVyKGQua2V5cygpKWBgLlxuXG4gICBjbGVhcigpXG5cbiAgICAgIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS5cblxuICAgY29weSgpXG5cbiAgICAgIFJldHVybiBhIHNoYWxsb3cgY29weSBvZiB0aGUgZGljdGlvbmFyeS5cblxuICAgY2xhc3NtZXRob2QgZnJvbWtleXMoc2VxWywgdmFsdWVdKVxuXG4gICAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeSB3aXRoIGtleXMgZnJvbSAqc2VxKiBhbmQgdmFsdWVzIHNldCB0b1xuICAgICAgKnZhbHVlKi5cblxuICAgICAgYGBmcm9ta2V5cygpYGAgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICBnZXQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIFJldHVybiB0aGUgdmFsdWUgZm9yICprZXkqIGlmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCBlbHNlXG4gICAgICAqZGVmYXVsdCouIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIGBgTm9uZWBgLFxuICAgICAgc28gdGhhdCB0aGlzIG1ldGhvZCBuZXZlciByYWlzZXMgYSBgYEtleUVycm9yYGAuXG5cbiAgIGl0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgaXRlbXMgKGBgKGtleSwgdmFsdWUpYGBcbiAgICAgIHBhaXJzKS4gU2VlIHRoZSAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBrZXlzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSB0aGVcbiAgICAgICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cbiAgIHBvcChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJlbW92ZSBpdCBhbmQgcmV0dXJuIGl0cyB2YWx1ZSxcbiAgICAgIGVsc2UgcmV0dXJuICpkZWZhdWx0Ki4gIElmICpkZWZhdWx0KiBpcyBub3QgZ2l2ZW4gYW5kICprZXkqIGlzXG4gICAgICBub3QgaW4gdGhlIGRpY3Rpb25hcnksIGEgYGBLZXlFcnJvcmBgIGlzIHJhaXNlZC5cblxuICAgcG9waXRlbSgpXG5cbiAgICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGFyYml0cmFyeSBgYChrZXksIHZhbHVlKWBgIHBhaXIgZnJvbSB0aGVcbiAgICAgIGRpY3Rpb25hcnkuXG5cbiAgICAgIGBgcG9waXRlbSgpYGAgaXMgdXNlZnVsIHRvIGRlc3RydWN0aXZlbHkgaXRlcmF0ZSBvdmVyIGFcbiAgICAgIGRpY3Rpb25hcnksIGFzIG9mdGVuIHVzZWQgaW4gc2V0IGFsZ29yaXRobXMuICBJZiB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgZW1wdHksIGNhbGxpbmcgYGBwb3BpdGVtKClgYCByYWlzZXMgYSBgYEtleUVycm9yYGAuXG5cbiAgIHNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZXR1cm4gaXRzIHZhbHVlLiAgSWYgbm90LCBpbnNlcnRcbiAgICAgICprZXkqIHdpdGggYSB2YWx1ZSBvZiAqZGVmYXVsdCogYW5kIHJldHVybiAqZGVmYXVsdCouICAqZGVmYXVsdCpcbiAgICAgIGRlZmF1bHRzIHRvIGBgTm9uZWBgLlxuXG4gICB1cGRhdGUoW290aGVyXSlcblxuICAgICAgVXBkYXRlIHRoZSBkaWN0aW9uYXJ5IHdpdGggdGhlIGtleS92YWx1ZSBwYWlycyBmcm9tICpvdGhlciosXG4gICAgICBvdmVyd3JpdGluZyBleGlzdGluZyBrZXlzLiAgUmV0dXJuIGBgTm9uZWBgLlxuXG4gICAgICBgYHVwZGF0ZSgpYGAgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhblxuICAgICAgaXRlcmFibGUgb2Yga2V5L3ZhbHVlIHBhaXJzIChhcyB0dXBsZXMgb3Igb3RoZXIgaXRlcmFibGVzIG9mXG4gICAgICBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZSBrZXkvdmFsdWUgcGFpcnM6IGBgZC51cGRhdGUocmVkPTEsXG4gICAgICBibHVlPTIpYGAuXG5cbiAgIHZhbHVlcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIHZhbHVlcy4gIFNlZSB0aGVcbiAgICAgICpkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cyouXG5cblNlZSBhbHNvOlxuXG4gICBgYHR5cGVzLk1hcHBpbmdQcm94eVR5cGVgYCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSByZWFkLW9ubHkgdmlld1xuICAgb2YgYSBgYGRpY3RgYC5cblxuXG5EaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgYGBkaWN0LmtleXMoKWBgLCBgYGRpY3QudmFsdWVzKClgYCBhbmRcbmBgZGljdC5pdGVtcygpYGAgYXJlICp2aWV3IG9iamVjdHMqLiAgVGhleSBwcm92aWRlIGEgZHluYW1pYyB2aWV3IG9uXG50aGUgZGljdGlvbmFyeVwncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnlcbmNoYW5nZXMsIHRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuXG5cbkRpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLFxuYW5kIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czpcblxubGVuKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5pdGVyKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cywgdmFsdWVzIG9yIGl0ZW1zIChyZXByZXNlbnRlZCBhc1xuICAgdHVwbGVzIG9mIGBgKGtleSwgdmFsdWUpYGApIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBLZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzXG4gICBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uXG4gICB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cyxcbiAgIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZ1xuICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zIHdpbGwgZGlyZWN0bHlcbiAgIGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYGAodmFsdWUsIGtleSlgYCBwYWlyc1xuICAgdXNpbmcgYGB6aXAoKWBgOiBgYHBhaXJzID0gemlwKGQudmFsdWVzKCksIGQua2V5cygpKWBgLiAgQW5vdGhlclxuICAgd2F5IHRvIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzIGBgcGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW5cbiAgIGQuaXRlbXMoKV1gYC5cblxuICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5XG4gICBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzLlxuXG54IGluIGRpY3R2aWV3XG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeVwncyBrZXlzLFxuICAgdmFsdWVzIG9yIGl0ZW1zIChpbiB0aGUgbGF0dGVyIGNhc2UsICp4KiBzaG91bGQgYmUgYSBgYChrZXksXG4gICB2YWx1ZSlgYCB0dXBsZSkuXG5cbktleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuXG5JZiBhbGwgdmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCBgYChrZXksIHZhbHVlKWBgIHBhaXJzIGFyZSB1bmlxdWVcbmFuZCBoYXNoYWJsZSwgdGhlbiB0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmVcbm5vdCB0cmVhdGVkIGFzIHNldC1saWtlIHNpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pXG5Gb3Igc2V0LWxpa2Ugdmlld3MsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBkZWZpbmVkIGZvciB0aGUgYWJzdHJhY3RcbmJhc2UgY2xhc3MgYGBjb2xsZWN0aW9ucy5hYmMuU2V0YGAgYXJlIGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsIGBgPT1gYCxcbmBgPGBgLCBvciBgYF5gYCkuXG5cbkFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOlxuXG4gICA+Pj4gZGlzaGVzID0ge1wnZWdnc1wnOiAyLCBcJ3NhdXNhZ2VcJzogMSwgXCdiYWNvblwnOiAxLCBcJ3NwYW1cJzogNTAwfVxuICAgPj4+IGtleXMgPSBkaXNoZXMua2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4gICA+Pj4ga2V5cyBeIHtcJ3NhdXNhZ2VcJywgXCdqdWljZVwnfVxuICAge1wnanVpY2VcJywgXCdzYXVzYWdlXCcsIFwnYmFjb25cJywgXCdzcGFtXCd9XG4nLAogICd0eXBlc21ldGhvZHMnOiAnXG5NZXRob2RzXG4qKioqKioqXG5cbk1ldGhvZHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgdGhlIGF0dHJpYnV0ZSBub3RhdGlvbi5cblRoZXJlIGFyZSB0d28gZmxhdm9yczogYnVpbHQtaW4gbWV0aG9kcyAoc3VjaCBhcyBgYGFwcGVuZCgpYGAgb25cbmxpc3RzKSBhbmQgY2xhc3MgaW5zdGFuY2UgbWV0aG9kcy4gIEJ1aWx0LWluIG1ldGhvZHMgYXJlIGRlc2NyaWJlZFxud2l0aCB0aGUgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZW0uXG5cbklmIHlvdSBhY2Nlc3MgYSBtZXRob2QgKGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIGNsYXNzIG5hbWVzcGFjZSlcbnRocm91Z2ggYW4gaW5zdGFuY2UsIHlvdSBnZXQgYSBzcGVjaWFsIG9iamVjdDogYSAqYm91bmQgbWV0aG9kKiAoYWxzb1xuY2FsbGVkICppbnN0YW5jZSBtZXRob2QqKSBvYmplY3QuIFdoZW4gY2FsbGVkLCBpdCB3aWxsIGFkZCB0aGVcbmBgc2VsZmBgIGFyZ3VtZW50IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAgQm91bmQgbWV0aG9kcyBoYXZlIHR3b1xuc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBtLl9fc2VsZl9fYGAgaXMgdGhlIG9iamVjdCBvbiB3aGljaFxudGhlIG1ldGhvZCBvcGVyYXRlcywgYW5kIGBgbS5fX2Z1bmNfX2BgIGlzIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmdcbnRoZSBtZXRob2QuICBDYWxsaW5nIGBgbShhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pYGAgaXMgY29tcGxldGVseVxuZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgbS5fX2Z1bmNfXyhtLl9fc2VsZl9fLCBhcmctMSwgYXJnLTIsIC4uLixcbmFyZy1uKWBgLlxuXG5MaWtlIGZ1bmN0aW9uIG9iamVjdHMsIGJvdW5kIG1ldGhvZCBvYmplY3RzIHN1cHBvcnQgZ2V0dGluZyBhcmJpdHJhcnlcbmF0dHJpYnV0ZXMuICBIb3dldmVyLCBzaW5jZSBtZXRob2QgYXR0cmlidXRlcyBhcmUgYWN0dWFsbHkgc3RvcmVkIG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QgKGBgbWV0aC5fX2Z1bmNfX2BgKSwgc2V0dGluZyBtZXRob2RcbmF0dHJpYnV0ZXMgb24gYm91bmQgbWV0aG9kcyBpcyBkaXNhbGxvd2VkLiAgQXR0ZW1wdGluZyB0byBzZXQgYW5cbmF0dHJpYnV0ZSBvbiBhIG1ldGhvZCByZXN1bHRzIGluIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBiZWluZyByYWlzZWQuXG5JbiBvcmRlciB0byBzZXQgYSBtZXRob2QgYXR0cmlidXRlLCB5b3UgbmVlZCB0byBleHBsaWNpdGx5IHNldCBpdCBvblxudGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0OlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKTpcbiAgIC4uLiAgICAgICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLm1ldGhvZC53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCcgICMgY2FuXCd0IHNldCBvbiB0aGUgbWV0aG9kXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBBdHRyaWJ1dGVFcnJvcjogXCdtZXRob2RcJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSBcJ3dob2FtaVwnXG4gICA+Pj4gYy5tZXRob2QuX19mdW5jX18ud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pXG4gICBcJ215IG5hbWUgaXMgbWV0aG9kXCdcblxuU2VlICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKICAndHlwZXNtb2R1bGVzJzogIlxuTW9kdWxlc1xuKioqKioqKlxuXG5UaGUgb25seSBzcGVjaWFsIG9wZXJhdGlvbiBvbiBhIG1vZHVsZSBpcyBhdHRyaWJ1dGUgYWNjZXNzOlxuYGBtLm5hbWVgYCwgd2hlcmUgKm0qIGlzIGEgbW9kdWxlIGFuZCAqbmFtZSogYWNjZXNzZXMgYSBuYW1lIGRlZmluZWRcbmluICptKidzIHN5bWJvbCB0YWJsZS4gTW9kdWxlIGF0dHJpYnV0ZXMgY2FuIGJlIGFzc2lnbmVkIHRvLiAgKE5vdGVcbnRoYXQgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50IGlzIG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIGFuIG9wZXJhdGlvblxub24gYSBtb2R1bGUgb2JqZWN0OyBgYGltcG9ydCBmb29gYCBkb2VzIG5vdCByZXF1aXJlIGEgbW9kdWxlIG9iamVjdFxubmFtZWQgKmZvbyogdG8gZXhpc3QsIHJhdGhlciBpdCByZXF1aXJlcyBhbiAoZXh0ZXJuYWwpICpkZWZpbml0aW9uKlxuZm9yIGEgbW9kdWxlIG5hbWVkICpmb28qIHNvbWV3aGVyZS4pXG5cbkEgc3BlY2lhbCBhdHRyaWJ1dGUgb2YgZXZlcnkgbW9kdWxlIGlzIGBgX19kaWN0X19gYC4gVGhpcyBpcyB0aGVcbmRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgbW9kdWxlJ3Mgc3ltYm9sIHRhYmxlLiBNb2RpZnlpbmcgdGhpc1xuZGljdGlvbmFyeSB3aWxsIGFjdHVhbGx5IGNoYW5nZSB0aGUgbW9kdWxlJ3Mgc3ltYm9sIHRhYmxlLCBidXQgZGlyZWN0XG5hc3NpZ25tZW50IHRvIHRoZSBgYF9fZGljdF9fYGAgYXR0cmlidXRlIGlzIG5vdCBwb3NzaWJsZSAoeW91IGNhblxud3JpdGUgYGBtLl9fZGljdF9fWydhJ10gPSAxYGAsIHdoaWNoIGRlZmluZXMgYGBtLmFgYCB0byBiZSBgYDFgYCwgYnV0XG55b3UgY2FuJ3Qgd3JpdGUgYGBtLl9fZGljdF9fID0ge31gYCkuICBNb2RpZnlpbmcgYGBfX2RpY3RfX2BgIGRpcmVjdGx5XG5pcyBub3QgcmVjb21tZW5kZWQuXG5cbk1vZHVsZXMgYnVpbHQgaW50byB0aGUgaW50ZXJwcmV0ZXIgYXJlIHdyaXR0ZW4gbGlrZSB0aGlzOiBgYDxtb2R1bGVcbidzeXMnIChidWlsdC1pbik+YGAuICBJZiBsb2FkZWQgZnJvbSBhIGZpbGUsIHRoZXkgYXJlIHdyaXR0ZW4gYXNcbmBgPG1vZHVsZSAnb3MnIGZyb20gJy91c3IvbG9jYWwvbGliL3B5dGhvblguWS9vcy5weWMnPmBgLlxuIiwKLSAndHlwZXNzZXEnOiAnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGByYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYGBcbkFCQyBpcyBwcm92aWRlZCB0byBtYWtlIGl0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlXG5vcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZSB0eXBlcy5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5XG4ob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsXG4qcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsICpuKiwgKmkqLCAqaiogYW5kICprKiBhcmVcbmludGVnZXJzIGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZCB2YWx1ZVxucmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLlxuXG5UaGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgYGArYGAgKGNvbmNhdGVuYXRpb24pIGFuZCBgYCpgYFxuKHJlcGV0aXRpb24pIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZ1xubnVtZXJpYyBvcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICAgICAgICAgIHwgYGBUcnVlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBGYWxzZWBgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICAgICAgICAgIHwgYGBGYWxzZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBUcnVlYGAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMgKiBuYGAgb3IgYGBuICogc2BgICAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpKDcpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29uY2F0ZW5hdGVkICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaV1gYCAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbGVuKHMpYGAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBtYXgocylgYCAgICAgICAgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqIChhdCBvciBhZnRlciBpbmRleCAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICppKiBhbmQgYmVmb3JlIGluZGV4ICpqKikgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyBgYHN0cmBgLCBgYGJ5dGVzYGAgYW5kIGBgYnl0ZWFycmF5YGApIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgYGBsaXN0c2BgIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGVcbiAgIHN0cmluZzogYGBsZW4ocykgKyBpYGAgb3IgYGBsZW4ocykgKyBqYGAgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCBgYC0wYGAgaXMgc3RpbGwgYGAwYGAuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgYGBpIDw9IGsgPCBqYGAuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCwgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgb21pdHRlZCBvclxuICAgYGBOb25lYGAsIHVzZSBgYDBgYC4gIElmICpqKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB1c2VcbiAgIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzXG4gICBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgYGB4ID0gaSArIG4qa2BgIHN1Y2ggdGhhdCBgYDAgPD0gbiA8XG4gICAoai1pKS9rYGAuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlIGBgaWBgLCBgYGkra2BgLFxuICAgYGBpKzIqa2BgLCBgYGkrMyprYGAgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXRcbiAgIG5ldmVyIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCxcbiAgIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhleSBiZWNvbWVcbiAgICJlbmQiIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKlxuICAgY2Fubm90IGJlIHplcm8uIElmICprKiBpcyBgYE5vbmVgYCwgaXQgaXMgdHJlYXRlZCBsaWtlIGBgMWBgLlxuXG42LiBDb25jYXRlbmF0aW5nIGltbXV0YWJsZSBzZXF1ZW5jZXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBuZXcgb2JqZWN0LlxuICAgVGhpcyBtZWFucyB0aGF0IGJ1aWxkaW5nIHVwIGEgc2VxdWVuY2UgYnkgcmVwZWF0ZWQgY29uY2F0ZW5hdGlvblxuICAgd2lsbCBoYXZlIGEgcXVhZHJhdGljIHJ1bnRpbWUgY29zdCBpbiB0aGUgdG90YWwgc2VxdWVuY2UgbGVuZ3RoLlxuICAgVG8gZ2V0IGEgbGluZWFyIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvIG9uZSBvZiB0aGVcbiAgIGFsdGVybmF0aXZlcyBiZWxvdzpcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nIGBgc3RyYGAgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICBgYHN0ci5qb2luKClgYCBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSBgYGlvLlN0cmluZ0lPYGBcbiAgICAgaW5zdGFuY2UgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyBgYGJ5dGVzYGAgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgIGBgYnl0ZXMuam9pbigpYGAgb3IgYGBpby5CeXRlc0lPYGAsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgYGBieXRlYXJyYXlgYCBvYmplY3QuICBgYGJ5dGVhcnJheWBgIG9iamVjdHNcbiAgICAgYXJlIG11dGFibGUgYW5kIGhhdmUgYW4gZWZmaWNpZW50IG92ZXJhbGxvY2F0aW9uIG1lY2hhbmlzbVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgYGB0dXBsZWBgIG9iamVjdHMsIGV4dGVuZCBhIGBgbGlzdGBgIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgYGByYW5nZWBgKSBvbmx5IHN1cHBvcnQgaXRlbSBzZXF1ZW5jZXNcbiAgIHRoYXQgZm9sbG93IHNwZWNpZmljIHBhdHRlcm5zLCBhbmQgaGVuY2UgZG9uXCd0IHN1cHBvcnQgc2VxdWVuY2VcbiAgIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuOC4gYGBpbmRleGBgIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBzW2k6al0uaW5kZXgoeClgYCxcbiAgIG9ubHkgd2l0aG91dCBjb3B5aW5nIGFueSBkYXRhIGFuZCB3aXRoIHRoZSByZXR1cm5lZCBpbmRleCBiZWluZ1xuICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlXG4gICBzbGljZS5cblxuXG5JbW11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb25seSBvcGVyYXRpb24gdGhhdCBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXMgZ2VuZXJhbGx5IGltcGxlbWVudFxudGhhdCBpcyBub3QgYWxzbyBpbXBsZW1lbnRlZCBieSBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGlzIHN1cHBvcnQgZm9yXG50aGUgYGBoYXNoKClgYCBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzIGBgdHVwbGVgYCBpbnN0YW5jZXMsXG50byBiZSB1c2VkIGFzIGBgZGljdGBgIGtleXMgYW5kIHN0b3JlZCBpbiBgYHNldGBgIGFuZCBgYGZyb3plbnNldGBgXG5pbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gYGBUeXBlRXJyb3JgYC5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSBgYGNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgYCBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCBgYGJ5dGVhcnJheWBgIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiBgYDAgPD0geCA8PSAyNTVgYCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IFt4XWBgKSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY2xlYXIoKWBgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tIGBgc2BgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgZGVsIHNbOl1gYCkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGBgc2BgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgc1s6XWBgKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPSB0YGApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTppXSA9IFt4XWBgKSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuIGBgcmVtb3ZlYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSBgYHJldmVyc2UoKWBgIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuIGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyBgYGRpY3RgYCBhbmQgYGBzZXRgYClcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBgYGNsZWFyKClgYCBhbmQgYGBjb3B5KClgYCBtZXRob2RzLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogYGBbXWBgXG5cbiAgICogVXNpbmcgc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthXWBgLFxuICAgICBgYFthLCBiLCBjXWBgXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246IGBgW3ggZm9yIHggaW4gaXRlcmFibGVdYGBcblxuICAgKiBVc2luZyB0aGUgdHlwZSBjb25zdHJ1Y3RvcjogYGBsaXN0KClgYCBvciBgYGxpc3QoaXRlcmFibGUpYGBcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvIGBgaXRlcmFibGVbOl1gYC4gRm9yIGV4YW1wbGUsIGBgbGlzdChcJ2FiY1wnKWBgXG4gICByZXR1cm5zIGBgW1wnYVwnLCBcJ2JcJywgXCdjXCddYGAgYW5kIGBgbGlzdCggKDEsIDIsIDMpIClgYCByZXR1cm5zIGBgWzEsXG4gICAyLCAzXWBgLiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXdcbiAgIGVtcHR5IGxpc3QsIGBgW11gYC5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZVxuICAgYGBzb3J0ZWQoKWBgIGJ1aWx0LWluLlxuXG4gICBMaXN0cyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBhbmQgKm11dGFibGUqIHNlcXVlbmNlXG4gICBvcGVyYXRpb25zLiBMaXN0cyBhbHNvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZDpcblxuICAgc29ydCgqLCBrZXk9Tm9uZSwgcmV2ZXJzZT1Ob25lKVxuXG4gICAgICBUaGlzIG1ldGhvZCBzb3J0cyB0aGUgbGlzdCBpbiBwbGFjZSwgdXNpbmcgb25seSBgYDxgYFxuICAgICAgY29tcGFyaXNvbnMgYmV0d2VlbiBpdGVtcy4gRXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgLSBpZlxuICAgICAgYW55IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBmYWlsLCB0aGUgZW50aXJlIHNvcnQgb3BlcmF0aW9uIHdpbGxcbiAgICAgIGZhaWwgKGFuZCB0aGUgbGlzdCB3aWxsIGxpa2VseSBiZSBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkXG4gICAgICBzdGF0ZSkuXG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgIGBga2V5PXN0ci5sb3dlcmBgKS4gVGhlIGtleSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaXRlbSBpbiB0aGVcbiAgICAgIGxpc3QgaXMgY2FsY3VsYXRlZCBvbmNlIGFuZCB0aGVuIHVzZWQgZm9yIHRoZSBlbnRpcmUgc29ydGluZ1xuICAgICAgcHJvY2Vzcy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYGBOb25lYGAgbWVhbnMgdGhhdCBsaXN0IGl0ZW1zIGFyZVxuICAgICAgc29ydGVkIGRpcmVjdGx5IHdpdGhvdXQgY2FsY3VsYXRpbmcgYSBzZXBhcmF0ZSBrZXkgdmFsdWUuXG5cbiAgICAgIFRoZSBgYGZ1bmN0b29scy5jbXBfdG9fa2V5KClgYCB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGVuIHRoZSBsaXN0XG4gICAgICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICAgICBUaGlzIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2VcbiAgICAgIHdoZW4gc29ydGluZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzIHRoYXQgaXQgb3BlcmF0ZXNcbiAgICAgIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNvcnRlZCBzZXF1ZW5jZSAodXNlXG4gICAgICBgYHNvcnRlZCgpYGAgdG8gZXhwbGljaXRseSByZXF1ZXN0IGEgbmV3IHNvcnRlZCBsaXN0IGluc3RhbmNlKS5cblxuICAgICAgVGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZiBpdCBjYW5cbiAgICAgIGRldGVjdCB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuXG5UdXBsZXNcbj09PT09PVxuXG5UdXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5oZXRlcm9nZW5lb3VzIGRhdGEgKHN1Y2ggYXMgdGhlIDItdHVwbGVzIHByb2R1Y2VkIGJ5IHRoZVxuYGBlbnVtZXJhdGUoKWBgIGJ1aWx0LWluKS4gVHVwbGVzIGFyZSBhbHNvIHVzZWQgZm9yIGNhc2VzIHdoZXJlIGFuXG5pbW11dGFibGUgc2VxdWVuY2Ugb2YgaG9tb2dlbmVvdXMgZGF0YSBpcyBuZWVkZWQgKHN1Y2ggYXMgYWxsb3dpbmdcbnN0b3JhZ2UgaW4gYSBgYHNldGBgIG9yIGBgZGljdGBgIGluc3RhbmNlKS5cblxuY2xhc3MgY2xhc3MgdHVwbGUoW2l0ZXJhYmxlXSlcblxuICAgVHVwbGVzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBhIG51bWJlciBvZiB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBwYXJlbnRoZXNlcyB0byBkZW5vdGUgdGhlIGVtcHR5IHR1cGxlOiBgYCgpYGBcblxuICAgKiBVc2luZyBhIHRyYWlsaW5nIGNvbW1hIGZvciBhIHNpbmdsZXRvbiB0dXBsZTogYGBhLGBgIG9yIGBgKGEsKWBgXG5cbiAgICogU2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogYGBhLCBiLCBjYGAgb3IgYGAoYSwgYiwgYylgYFxuXG4gICAqIFVzaW5nIHRoZSBgYHR1cGxlKClgYCBidWlsdC1pbjogYGB0dXBsZSgpYGAgb3JcbiAgICAgYGB0dXBsZShpdGVyYWJsZSlgYFxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsIGBgdHVwbGUoXCdhYmNcJylgYCByZXR1cm5zIGBgKFwnYVwnLCBcJ2JcJyxcbiAgIFwnY1wnKWBgIGFuZCBgYHR1cGxlKCBbMSwgMiwgM10gKWBgIHJldHVybnMgYGAoMSwgMiwgMylgYC4gSWYgbm9cbiAgIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eSB0dXBsZSxcbiAgIGBgKClgYC5cblxuICAgTm90ZSB0aGF0IGl0IGlzIGFjdHVhbGx5IHRoZSBjb21tYSB3aGljaCBtYWtlcyBhIHR1cGxlLCBub3QgdGhlXG4gICBwYXJlbnRoZXNlcy4gVGhlIHBhcmVudGhlc2VzIGFyZSBvcHRpb25hbCwgZXhjZXB0IGluIHRoZSBlbXB0eVxuICAgdHVwbGUgY2FzZSwgb3Igd2hlbiB0aGV5IGFyZSBuZWVkZWQgdG8gYXZvaWQgc3ludGFjdGljIGFtYmlndWl0eS5cbiAgIEZvciBleGFtcGxlLCBgYGYoYSwgYiwgYylgYCBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCB0aHJlZVxuICAgYXJndW1lbnRzLCB3aGlsZSBgYGYoKGEsIGIsIGMpKWBgIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZVxuICAgYXMgdGhlIHNvbGUgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCBgYGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoKWBgIG1heSBiZSBhIG1vcmVcbmFwcHJvcHJpYXRlIGNob2ljZSB0aGFuIGEgc2ltcGxlIHR1cGxlIG9iamVjdC5cblxuXG5SYW5nZXNcbj09PT09PVxuXG5UaGUgYGByYW5nZWBgIHR5cGUgcmVwcmVzZW50cyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugb2YgbnVtYmVycyBhbmQgaXNcbmNvbW1vbmx5IHVzZWQgZm9yIGxvb3BpbmcgYSBzcGVjaWZpYyBudW1iZXIgb2YgdGltZXMgaW4gYGBmb3JgYCBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gYGBpbnRgYCBvciBhbnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgYGBfX2luZGV4X19gYFxuICAgc3BlY2lhbCBtZXRob2QpLiAgSWYgdGhlICpzdGVwKiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0b1xuICAgYGAxYGAuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBgMGBgLiBJZlxuICAgKnN0ZXAqIGlzIHplcm8sIGBgVmFsdWVFcnJvcmBgIGlzIHJhaXNlZC5cblxuICAgRm9yIGEgcG9zaXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgYSByYW5nZSBgYHJgYCBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgYGByW2ldID0gc3RhcnQgKyBzdGVwKmlgYCB3aGVyZSBgYGkgPj0gMGBgIGFuZFxuICAgYGByW2ldIDwgc3RvcGBgLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhIGBgcltpXSA9IHN0YXJ0ICsgc3RlcCppYGAsIGJ1dCB0aGVcbiAgIGNvbnN0cmFpbnRzIGFyZSBgYGkgPj0gMGBgIGFuZCBgYHJbaV0gPiBzdG9wYGAuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgYGByWzBdYGAgZG9lcyBub3QgbWVldCB0aGUgdmFsdWVcbiAgIGNvbnN0cmFpbnQuIFJhbmdlcyBkbyBzdXBwb3J0IG5lZ2F0aXZlIGluZGljZXMsIGJ1dCB0aGVzZSBhcmVcbiAgIGludGVycHJldGVkIGFzIGluZGV4aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UgZGV0ZXJtaW5lZCBieVxuICAgdGhlIHBvc2l0aXZlIGluZGljZXMuXG5cbiAgIFJhbmdlcyBjb250YWluaW5nIGFic29sdXRlIHZhbHVlcyBsYXJnZXIgdGhhbiBgYHN5cy5tYXhzaXplYGAgYXJlXG4gICBwZXJtaXR0ZWQgYnV0IHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgYGBsZW4oKWBgKSBtYXkgcmFpc2VcbiAgIGBgT3ZlcmZsb3dFcnJvcmBgLlxuXG4gICBSYW5nZSBleGFtcGxlczpcblxuICAgICAgPj4+IGxpc3QocmFuZ2UoMTApKVxuICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAxMSkpXG4gICAgICBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAzMCwgNSkpXG4gICAgICBbMCwgNSwgMTAsIDE1LCAyMCwgMjVdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAxMCwgMykpXG4gICAgICBbMCwgMywgNiwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIC0xMCwgLTEpKVxuICAgICAgWzAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwKSlcbiAgICAgIFtdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAwKSlcbiAgICAgIFtdXG5cbiAgIFJhbmdlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zIGV4Y2VwdFxuICAgY29uY2F0ZW5hdGlvbiBhbmQgcmVwZXRpdGlvbiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgcmFuZ2Ugb2JqZWN0c1xuICAgY2FuIG9ubHkgcmVwcmVzZW50IHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBhIHN0cmljdCBwYXR0ZXJuIGFuZFxuICAgcmVwZXRpdGlvbiBhbmQgY29uY2F0ZW5hdGlvbiB3aWxsIHVzdWFsbHkgdmlvbGF0ZSB0aGF0IHBhdHRlcm4pLlxuXG5UaGUgYWR2YW50YWdlIG9mIHRoZSBgYHJhbmdlYGAgdHlwZSBvdmVyIGEgcmVndWxhciBgYGxpc3RgYCBvclxuYGB0dXBsZWBgIGlzIHRoYXQgYSBgYHJhbmdlYGAgb2JqZWN0IHdpbGwgYWx3YXlzIHRha2UgdGhlIHNhbWUgKHNtYWxsKVxuYW1vdW50IG9mIG1lbW9yeSwgbm8gbWF0dGVyIHRoZSBzaXplIG9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzIChhcyBpdFxub25seSBzdG9yZXMgdGhlIGBgc3RhcnRgYCwgYGBzdG9wYGAgYW5kIGBgc3RlcGBgIHZhbHVlcywgY2FsY3VsYXRpbmdcbmluZGl2aWR1YWwgaXRlbXMgYW5kIHN1YnJhbmdlcyBhcyBuZWVkZWQpLlxuXG5SYW5nZSBvYmplY3RzIGltcGxlbWVudCB0aGUgYGBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgYCBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggYGA9PWBgIGFuZCBgYCE9YGAgY29tcGFyZXNcbnRoZW0gYXMgc2VxdWVuY2VzLiAgVGhhdCBpcywgdHdvIHJhbmdlIG9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWZcbnRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcy4gIChOb3RlIHRoYXQgdHdvIHJhbmdlXG5vYmplY3RzIHRoYXQgY29tcGFyZSBlcXVhbCBtaWdodCBoYXZlIGRpZmZlcmVudCBgYHN0YXJ0YGAsIGBgc3RvcGBgXG5hbmQgYGBzdGVwYGAgYXR0cmlidXRlcywgZm9yIGV4YW1wbGUgYGByYW5nZSgwKSA9PSByYW5nZSgyLCAxLCAzKWBgIG9yXG5gYHJhbmdlKDAsIDMsIDIpID09IHJhbmdlKDAsIDQsIDIpYGAuKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBJbXBsZW1lbnQgdGhlIFNlcXVlbmNlIEFCQy4gU3VwcG9ydCBzbGljaW5nXG5hbmQgbmVnYXRpdmUgaW5kaWNlcy4gVGVzdCBgYGludGBgIG9iamVjdHMgZm9yIG1lbWJlcnNoaXAgaW4gY29uc3RhbnRcbnRpbWUgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBhbGwgaXRlbXMuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IERlZmluZSBcJz09XCcgYW5kIFwnIT1cJyB0byBjb21wYXJlIHJhbmdlIG9iamVjdHNcbmJhc2VkIG9uIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nXG5iYXNlZCBvbiBvYmplY3QgaWRlbnRpdHkpLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFRoZSBgYHN0YXJ0YGAsIGBgc3RvcGBgIGFuZCBgYHN0ZXBgYCBhdHRyaWJ1dGVzLlxuJywKKyAndHlwZXNzZXEnOiAnXG5TZXF1ZW5jZSBUeXBlcyAtLS0gYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGByYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSBiYXNpYyBzZXF1ZW5jZSB0eXBlczogbGlzdHMsIHR1cGxlcywgYW5kIHJhbmdlXG5vYmplY3RzLiBBZGRpdGlvbmFsIHNlcXVlbmNlIHR5cGVzIHRhaWxvcmVkIGZvciBwcm9jZXNzaW5nIG9mICpiaW5hcnlcbmRhdGEqIGFuZCAqdGV4dCBzdHJpbmdzKiBhcmUgZGVzY3JpYmVkIGluIGRlZGljYXRlZCBzZWN0aW9ucy5cblxuXG5Db21tb24gU2VxdWVuY2UgT3BlcmF0aW9uc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgc3VwcG9ydGVkIGJ5IG1vc3Qgc2VxdWVuY2VcbnR5cGVzLCBib3RoIG11dGFibGUgYW5kIGltbXV0YWJsZS4gVGhlIGBgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYGBcbkFCQyBpcyBwcm92aWRlZCB0byBtYWtlIGl0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlXG5vcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZSB0eXBlcy5cblxuVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5XG4ob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsXG4qcyogYW5kICp0KiBhcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUsICpuKiwgKmkqLCAqaiogYW5kICprKiBhcmVcbmludGVnZXJzIGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZCB2YWx1ZVxucmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLlxuXG5UaGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZVxuY29tcGFyaXNvbiBvcGVyYXRpb25zLiBUaGUgYGArYGAgKGNvbmNhdGVuYXRpb24pIGFuZCBgYCpgYFxuKHJlcGV0aXRpb24pIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZ1xubnVtZXJpYyBvcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICAgICAgICAgIHwgYGBUcnVlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBGYWxzZWBgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICAgICAgICAgIHwgYGBGYWxzZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgYGBUcnVlYGAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMgKiBuYGAgb3IgYGBuICogc2BgICAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpKDcpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29uY2F0ZW5hdGVkICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaV1gYCAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbGVuKHMpYGAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBtYXgocylgYCAgICAgICAgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqIChhdCBvciBhZnRlciBpbmRleCAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICppKiBhbmQgYmVmb3JlIGluZGV4ICpqKikgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIG9wZXJhdGlvbnMgYXJlIHVzZWQgb25seSBmb3Igc2ltcGxlXG4gICBjb250YWlubWVudCB0ZXN0aW5nIGluIHRoZSBnZW5lcmFsIGNhc2UsIHNvbWUgc3BlY2lhbGlzZWQgc2VxdWVuY2VzXG4gICAoc3VjaCBhcyBgYHN0cmBgLCBgYGJ5dGVzYGAgYW5kIGBgYnl0ZWFycmF5YGApIGFsc28gdXNlIHRoZW0gZm9yXG4gICBzdWJzZXF1ZW5jZSB0ZXN0aW5nOlxuXG4gICAgICA+Pj4gImdnIiBpbiAiZWdncyJcbiAgICAgIFRydWVcblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgYGBsaXN0c2BgIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGVcbiAgIHN0cmluZzogYGBsZW4ocykgKyBpYGAgb3IgYGBsZW4ocykgKyBqYGAgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCBgYC0wYGAgaXMgc3RpbGwgYGAwYGAuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgYGBpIDw9IGsgPCBqYGAuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCwgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgb21pdHRlZCBvclxuICAgYGBOb25lYGAsIHVzZSBgYDBgYC4gIElmICpqKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB1c2VcbiAgIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzXG4gICBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgYGB4ID0gaSArIG4qa2BgIHN1Y2ggdGhhdCBgYDAgPD0gbiA8XG4gICAoai1pKS9rYGAuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlIGBgaWBgLCBgYGkra2BgLFxuICAgYGBpKzIqa2BgLCBgYGkrMyprYGAgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXRcbiAgIG5ldmVyIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCxcbiAgIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhleSBiZWNvbWVcbiAgICJlbmQiIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKlxuICAgY2Fubm90IGJlIHplcm8uIElmICprKiBpcyBgYE5vbmVgYCwgaXQgaXMgdHJlYXRlZCBsaWtlIGBgMWBgLlxuXG42LiBDb25jYXRlbmF0aW5nIGltbXV0YWJsZSBzZXF1ZW5jZXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBuZXcgb2JqZWN0LlxuICAgVGhpcyBtZWFucyB0aGF0IGJ1aWxkaW5nIHVwIGEgc2VxdWVuY2UgYnkgcmVwZWF0ZWQgY29uY2F0ZW5hdGlvblxuICAgd2lsbCBoYXZlIGEgcXVhZHJhdGljIHJ1bnRpbWUgY29zdCBpbiB0aGUgdG90YWwgc2VxdWVuY2UgbGVuZ3RoLlxuICAgVG8gZ2V0IGEgbGluZWFyIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvIG9uZSBvZiB0aGVcbiAgIGFsdGVybmF0aXZlcyBiZWxvdzpcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nIGBgc3RyYGAgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICBgYHN0ci5qb2luKClgYCBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSBgYGlvLlN0cmluZ0lPYGBcbiAgICAgaW5zdGFuY2UgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyBgYGJ5dGVzYGAgb2JqZWN0cywgeW91IGNhbiBzaW1pbGFybHkgdXNlXG4gICAgIGBgYnl0ZXMuam9pbigpYGAgb3IgYGBpby5CeXRlc0lPYGAsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgYGBieXRlYXJyYXlgYCBvYmplY3QuICBgYGJ5dGVhcnJheWBgIG9iamVjdHNcbiAgICAgYXJlIG11dGFibGUgYW5kIGhhdmUgYW4gZWZmaWNpZW50IG92ZXJhbGxvY2F0aW9uIG1lY2hhbmlzbVxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgYGB0dXBsZWBgIG9iamVjdHMsIGV4dGVuZCBhIGBgbGlzdGBgIGluc3RlYWRcblxuICAgKiBmb3Igb3RoZXIgdHlwZXMsIGludmVzdGlnYXRlIHRoZSByZWxldmFudCBjbGFzcyBkb2N1bWVudGF0aW9uXG5cbjcuIFNvbWUgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMgYGByYW5nZWBgKSBvbmx5IHN1cHBvcnQgaXRlbSBzZXF1ZW5jZXNcbiAgIHRoYXQgZm9sbG93IHNwZWNpZmljIHBhdHRlcm5zLCBhbmQgaGVuY2UgZG9uXCd0IHN1cHBvcnQgc2VxdWVuY2VcbiAgIGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbi5cblxuOC4gYGBpbmRleGBgIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuXG4gICBzdXBwb3J0ZWQsIHRoZSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB0byB0aGUgaW5kZXggbWV0aG9kIGFsbG93XG4gICBlZmZpY2llbnQgc2VhcmNoaW5nIG9mIHN1YnNlY3Rpb25zIG9mIHRoZSBzZXF1ZW5jZS4gUGFzc2luZyB0aGVcbiAgIGV4dHJhIGFyZ3VtZW50cyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBzW2k6al0uaW5kZXgoeClgYCxcbiAgIG9ubHkgd2l0aG91dCBjb3B5aW5nIGFueSBkYXRhIGFuZCB3aXRoIHRoZSByZXR1cm5lZCBpbmRleCBiZWluZ1xuICAgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZXF1ZW5jZSByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlXG4gICBzbGljZS5cblxuXG5JbW11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb25seSBvcGVyYXRpb24gdGhhdCBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXMgZ2VuZXJhbGx5IGltcGxlbWVudFxudGhhdCBpcyBub3QgYWxzbyBpbXBsZW1lbnRlZCBieSBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzIGlzIHN1cHBvcnQgZm9yXG50aGUgYGBoYXNoKClgYCBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzIGBgdHVwbGVgYCBpbnN0YW5jZXMsXG50byBiZSB1c2VkIGFzIGBgZGljdGBgIGtleXMgYW5kIHN0b3JlZCBpbiBgYHNldGBgIGFuZCBgYGZyb3plbnNldGBgXG5pbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gYGBUeXBlRXJyb3JgYC5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSBgYGNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgYCBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCBgYGJ5dGVhcnJheWBgIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiBgYDAgPD0geCA8PSAyNTVgYCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IFt4XWBgKSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY2xlYXIoKWBgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tIGBgc2BgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgZGVsIHNbOl1gYCkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGBgc2BgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgc1s6XWBgKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPSB0YGApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTppXSA9IFt4XWBgKSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuIGBgcmVtb3ZlYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSBgYHJldmVyc2UoKWBgIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuIGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyBgYGRpY3RgYCBhbmQgYGBzZXRgYClcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBgYGNsZWFyKClgYCBhbmQgYGBjb3B5KClgYCBtZXRob2RzLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogYGBbXWBgXG5cbiAgICogVXNpbmcgc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthXWBgLFxuICAgICBgYFthLCBiLCBjXWBgXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246IGBgW3ggZm9yIHggaW4gaXRlcmFibGVdYGBcblxuICAgKiBVc2luZyB0aGUgdHlwZSBjb25zdHJ1Y3RvcjogYGBsaXN0KClgYCBvciBgYGxpc3QoaXRlcmFibGUpYGBcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvIGBgaXRlcmFibGVbOl1gYC4gRm9yIGV4YW1wbGUsIGBgbGlzdChcJ2FiY1wnKWBgXG4gICByZXR1cm5zIGBgW1wnYVwnLCBcJ2JcJywgXCdjXCddYGAgYW5kIGBgbGlzdCggKDEsIDIsIDMpIClgYCByZXR1cm5zIGBgWzEsXG4gICAyLCAzXWBgLiBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXdcbiAgIGVtcHR5IGxpc3QsIGBgW11gYC5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZVxuICAgYGBzb3J0ZWQoKWBgIGJ1aWx0LWluLlxuXG4gICBMaXN0cyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBhbmQgKm11dGFibGUqIHNlcXVlbmNlXG4gICBvcGVyYXRpb25zLiBMaXN0cyBhbHNvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZDpcblxuICAgc29ydCgqLCBrZXk9Tm9uZSwgcmV2ZXJzZT1Ob25lKVxuXG4gICAgICBUaGlzIG1ldGhvZCBzb3J0cyB0aGUgbGlzdCBpbiBwbGFjZSwgdXNpbmcgb25seSBgYDxgYFxuICAgICAgY29tcGFyaXNvbnMgYmV0d2VlbiBpdGVtcy4gRXhjZXB0aW9ucyBhcmUgbm90IHN1cHByZXNzZWQgLSBpZlxuICAgICAgYW55IGNvbXBhcmlzb24gb3BlcmF0aW9ucyBmYWlsLCB0aGUgZW50aXJlIHNvcnQgb3BlcmF0aW9uIHdpbGxcbiAgICAgIGZhaWwgKGFuZCB0aGUgbGlzdCB3aWxsIGxpa2VseSBiZSBsZWZ0IGluIGEgcGFydGlhbGx5IG1vZGlmaWVkXG4gICAgICBzdGF0ZSkuXG5cbiAgICAgIGBgc29ydCgpYGAgYWNjZXB0cyB0d28gYXJndW1lbnRzIHRoYXQgY2FuIG9ubHkgYmUgcGFzc2VkIGJ5XG4gICAgICBrZXl3b3JkICgqa2V5d29yZC1vbmx5IGFyZ3VtZW50cyopOlxuXG4gICAgICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvXG4gICAgICBleHRyYWN0IGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudCAoZm9yIGV4YW1wbGUsXG4gICAgICBgYGtleT1zdHIubG93ZXJgYCkuIFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIGl0ZW0gaW4gdGhlXG4gICAgICBsaXN0IGlzIGNhbGN1bGF0ZWQgb25jZSBhbmQgdGhlbiB1c2VkIGZvciB0aGUgZW50aXJlIHNvcnRpbmdcbiAgICAgIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgIG1lYW5zIHRoYXQgbGlzdCBpdGVtcyBhcmVcbiAgICAgIHNvcnRlZCBkaXJlY3RseSB3aXRob3V0IGNhbGN1bGF0aW5nIGEgc2VwYXJhdGUga2V5IHZhbHVlLlxuXG4gICAgICBUaGUgYGBmdW5jdG9vbHMuY21wX3RvX2tleSgpYGAgdXRpbGl0eSBpcyBhdmFpbGFibGUgdG8gY29udmVydCBhXG4gICAgICAyLnggc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi5cblxuICAgICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgICAgVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlXG4gICAgICB3aGVuIHNvcnRpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0IG9wZXJhdGVzXG4gICAgICBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzb3J0ZWQgc2VxdWVuY2UgKHVzZVxuICAgICAgYGBzb3J0ZWQoKWBgIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIG5ldyBzb3J0ZWQgbGlzdCBpbnN0YW5jZSkuXG5cbiAgICAgIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gIEEgc29ydCBpc1xuICAgICAgc3RhYmxlIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2ZcbiAgICAgIGVsZW1lbnRzIHRoYXQgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluXG4gICAgICBtdWx0aXBsZSBwYXNzZXMgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5XG4gICAgICBncmFkZSkuXG5cbiAgICAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogV2hpbGUgYSBsaXN0IGlzIGJlaW5nIHNvcnRlZCxcbiAgICAgIHRoZSBlZmZlY3Qgb2YgYXR0ZW1wdGluZyB0byBtdXRhdGUsIG9yIGV2ZW4gaW5zcGVjdCwgdGhlIGxpc3QgaXNcbiAgICAgIHVuZGVmaW5lZC4gIFRoZSBDIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiBtYWtlcyB0aGUgbGlzdCBhcHBlYXJcbiAgICAgIGVtcHR5IGZvciB0aGUgZHVyYXRpb24sIGFuZCByYWlzZXMgYGBWYWx1ZUVycm9yYGAgaWYgaXQgY2FuXG4gICAgICBkZXRlY3QgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG5cblxuVHVwbGVzXG49PT09PT1cblxuVHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaGV0ZXJvZ2VuZW91cyBkYXRhIChzdWNoIGFzIHRoZSAyLXR1cGxlcyBwcm9kdWNlZCBieSB0aGVcbmBgZW51bWVyYXRlKClgYCBidWlsdC1pbikuIFR1cGxlcyBhcmUgYWxzbyB1c2VkIGZvciBjYXNlcyB3aGVyZSBhblxuaW1tdXRhYmxlIHNlcXVlbmNlIG9mIGhvbW9nZW5lb3VzIGRhdGEgaXMgbmVlZGVkIChzdWNoIGFzIGFsbG93aW5nXG5zdG9yYWdlIGluIGEgYGBzZXRgYCBvciBgYGRpY3RgYCBpbnN0YW5jZSkuXG5cbmNsYXNzIGNsYXNzIHR1cGxlKFtpdGVyYWJsZV0pXG5cbiAgIFR1cGxlcyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gYSBudW1iZXIgb2Ygd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2YgcGFyZW50aGVzZXMgdG8gZGVub3RlIHRoZSBlbXB0eSB0dXBsZTogYGAoKWBgXG5cbiAgICogVXNpbmcgYSB0cmFpbGluZyBjb21tYSBmb3IgYSBzaW5nbGV0b24gdHVwbGU6IGBgYSxgYCBvciBgYChhLClgYFxuXG4gICAqIFNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6IGBgYSwgYiwgY2BgIG9yIGBgKGEsIGIsIGMpYGBcblxuICAgKiBVc2luZyB0aGUgYGB0dXBsZSgpYGAgYnVpbHQtaW46IGBgdHVwbGUoKWBgIG9yXG4gICAgIGBgdHVwbGUoaXRlcmFibGUpYGBcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIHR1cGxlIHdob3NlIGl0ZW1zIGFyZSB0aGUgc2FtZSBhbmQgaW4gdGhlXG4gICBzYW1lIG9yZGVyIGFzICppdGVyYWJsZSpcJ3MgaXRlbXMuICAqaXRlcmFibGUqIG1heSBiZSBlaXRoZXIgYVxuICAgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHMgaXRlcmF0aW9uLCBvciBhbiBpdGVyYXRvclxuICAgb2JqZWN0LiAgSWYgKml0ZXJhYmxlKiBpcyBhbHJlYWR5IGEgdHVwbGUsIGl0IGlzIHJldHVybmVkXG4gICB1bmNoYW5nZWQuIEZvciBleGFtcGxlLCBgYHR1cGxlKFwnYWJjXCcpYGAgcmV0dXJucyBgYChcJ2FcJywgXCdiXCcsXG4gICBcJ2NcJylgYCBhbmQgYGB0dXBsZSggWzEsIDIsIDNdIClgYCByZXR1cm5zIGBgKDEsIDIsIDMpYGAuIElmIG5vXG4gICBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHkgdHVwbGUsXG4gICBgYCgpYGAuXG5cbiAgIE5vdGUgdGhhdCBpdCBpcyBhY3R1YWxseSB0aGUgY29tbWEgd2hpY2ggbWFrZXMgYSB0dXBsZSwgbm90IHRoZVxuICAgcGFyZW50aGVzZXMuIFRoZSBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBpbiB0aGUgZW1wdHlcbiAgIHR1cGxlIGNhc2UsIG9yIHdoZW4gdGhleSBhcmUgbmVlZGVkIHRvIGF2b2lkIHN5bnRhY3RpYyBhbWJpZ3VpdHkuXG4gICBGb3IgZXhhbXBsZSwgYGBmKGEsIGIsIGMpYGAgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggdGhyZWVcbiAgIGFyZ3VtZW50cywgd2hpbGUgYGBmKChhLCBiLCBjKSlgYCBpcyBhIGZ1bmN0aW9uIGNhbGwgd2l0aCBhIDMtdHVwbGVcbiAgIGFzIHRoZSBzb2xlIGFyZ3VtZW50LlxuXG4gICBUdXBsZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucy5cblxuRm9yIGhldGVyb2dlbmVvdXMgY29sbGVjdGlvbnMgb2YgZGF0YSB3aGVyZSBhY2Nlc3MgYnkgbmFtZSBpcyBjbGVhcmVyXG50aGFuIGFjY2VzcyBieSBpbmRleCwgYGBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKClgYCBtYXkgYmUgYSBtb3JlXG5hcHByb3ByaWF0ZSBjaG9pY2UgdGhhbiBhIHNpbXBsZSB0dXBsZSBvYmplY3QuXG5cblxuUmFuZ2VzXG49PT09PT1cblxuVGhlIGBgcmFuZ2VgYCB0eXBlIHJlcHJlc2VudHMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIG9mIG51bWJlcnMgYW5kIGlzXG5jb21tb25seSB1c2VkIGZvciBsb29waW5nIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRpbWVzIGluIGBgZm9yYGAgbG9vcHMuXG5cbmNsYXNzIGNsYXNzIHJhbmdlKHN0b3ApXG5jbGFzcyBjbGFzcyByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKVxuXG4gICBUaGUgYXJndW1lbnRzIHRvIHRoZSByYW5nZSBjb25zdHJ1Y3RvciBtdXN0IGJlIGludGVnZXJzIChlaXRoZXJcbiAgIGJ1aWx0LWluIGBgaW50YGAgb3IgYW55IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGBgX19pbmRleF9fYGBcbiAgIHNwZWNpYWwgbWV0aG9kKS4gIElmIHRoZSAqc3RlcCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG9cbiAgIGBgMWBgLiBJZiB0aGUgKnN0YXJ0KiBhcmd1bWVudCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYDBgYC4gSWZcbiAgICpzdGVwKiBpcyB6ZXJvLCBgYFZhbHVlRXJyb3JgYCBpcyByYWlzZWQuXG5cbiAgIEZvciBhIHBvc2l0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgYGByYGAgYXJlIGRldGVybWluZWRcbiAgIGJ5IHRoZSBmb3JtdWxhIGBgcltpXSA9IHN0YXJ0ICsgc3RlcCppYGAgd2hlcmUgYGBpID49IDBgYCBhbmRcbiAgIGBgcltpXSA8IHN0b3BgYC5cblxuICAgRm9yIGEgbmVnYXRpdmUgKnN0ZXAqLCB0aGUgY29udGVudHMgb2YgdGhlIHJhbmdlIGFyZSBzdGlsbFxuICAgZGV0ZXJtaW5lZCBieSB0aGUgZm9ybXVsYSBgYHJbaV0gPSBzdGFydCArIHN0ZXAqaWBgLCBidXQgdGhlXG4gICBjb25zdHJhaW50cyBhcmUgYGBpID49IDBgYCBhbmQgYGByW2ldID4gc3RvcGBgLlxuXG4gICBBIHJhbmdlIG9iamVjdCB3aWxsIGJlIGVtcHR5IGlmIGBgclswXWBgIGRvZXMgbm90IG1lZXQgdGhlIHZhbHVlXG4gICBjb25zdHJhaW50LiBSYW5nZXMgZG8gc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzLCBidXQgdGhlc2UgYXJlXG4gICBpbnRlcnByZXRlZCBhcyBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGRldGVybWluZWQgYnlcbiAgIHRoZSBwb3NpdGl2ZSBpbmRpY2VzLlxuXG4gICBSYW5nZXMgY29udGFpbmluZyBhYnNvbHV0ZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gYGBzeXMubWF4c2l6ZWBgIGFyZVxuICAgcGVybWl0dGVkIGJ1dCBzb21lIGZlYXR1cmVzIChzdWNoIGFzIGBgbGVuKClgYCkgbWF5IHJhaXNlXG4gICBgYE92ZXJmbG93RXJyb3JgYC5cblxuICAgUmFuZ2UgZXhhbXBsZXM6XG5cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEwKSlcbiAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMTEpKVxuICAgICAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMzAsIDUpKVxuICAgICAgWzAsIDUsIDEwLCAxNSwgMjAsIDI1XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMTAsIDMpKVxuICAgICAgWzAsIDMsIDYsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAtMTAsIC0xKSlcbiAgICAgIFswLCAtMSwgLTIsIC0zLCAtNCwgLTUsIC02LCAtNywgLTgsIC05XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCkpXG4gICAgICBbXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMCkpXG4gICAgICBbXVxuXG4gICBSYW5nZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucyBleGNlcHRcbiAgIGNvbmNhdGVuYXRpb24gYW5kIHJlcGV0aXRpb24gKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHJhbmdlIG9iamVjdHNcbiAgIGNhbiBvbmx5IHJlcHJlc2VudCBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgYSBzdHJpY3QgcGF0dGVybiBhbmRcbiAgIHJlcGV0aXRpb24gYW5kIGNvbmNhdGVuYXRpb24gd2lsbCB1c3VhbGx5IHZpb2xhdGUgdGhhdCBwYXR0ZXJuKS5cblxuVGhlIGFkdmFudGFnZSBvZiB0aGUgYGByYW5nZWBgIHR5cGUgb3ZlciBhIHJlZ3VsYXIgYGBsaXN0YGAgb3JcbmBgdHVwbGVgYCBpcyB0aGF0IGEgYGByYW5nZWBgIG9iamVjdCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBzYW1lIChzbWFsbClcbmFtb3VudCBvZiBtZW1vcnksIG5vIG1hdHRlciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXQgcmVwcmVzZW50cyAoYXMgaXRcbm9ubHkgc3RvcmVzIHRoZSBgYHN0YXJ0YGAsIGBgc3RvcGBgIGFuZCBgYHN0ZXBgYCB2YWx1ZXMsIGNhbGN1bGF0aW5nXG5pbmRpdmlkdWFsIGl0ZW1zIGFuZCBzdWJyYW5nZXMgYXMgbmVlZGVkKS5cblxuUmFuZ2Ugb2JqZWN0cyBpbXBsZW1lbnQgdGhlIGBgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlYGAgQUJDLCBhbmRcbnByb3ZpZGUgZmVhdHVyZXMgc3VjaCBhcyBjb250YWlubWVudCB0ZXN0cywgZWxlbWVudCBpbmRleCBsb29rdXAsXG5zbGljaW5nIGFuZCBzdXBwb3J0IGZvciBuZWdhdGl2ZSBpbmRpY2VzIChzZWUgKlNlcXVlbmNlIFR5cGVzIC0tLVxubGlzdCwgdHVwbGUsIHJhbmdlKik6XG5cbj4+PiByID0gcmFuZ2UoMCwgMjAsIDIpXG4+Pj4gclxucmFuZ2UoMCwgMjAsIDIpXG4+Pj4gMTEgaW4gclxuRmFsc2Vcbj4+PiAxMCBpbiByXG5UcnVlXG4+Pj4gci5pbmRleCgxMClcbjVcbj4+PiByWzVdXG4xMFxuPj4+IHJbOjVdXG5yYW5nZSgwLCAxMCwgMilcbj4+PiByWy0xXVxuMThcblxuVGVzdGluZyByYW5nZSBvYmplY3RzIGZvciBlcXVhbGl0eSB3aXRoIGBgPT1gYCBhbmQgYGAhPWBgIGNvbXBhcmVzXG50aGVtIGFzIHNlcXVlbmNlcy4gIFRoYXQgaXMsIHR3byByYW5nZSBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmXG50aGV5IHJlcHJlc2VudCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMuICAoTm90ZSB0aGF0IHR3byByYW5nZVxub2JqZWN0cyB0aGF0IGNvbXBhcmUgZXF1YWwgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgYGBzdGFydGBgLCBgYHN0b3BgYFxuYW5kIGBgc3RlcGBgIGF0dHJpYnV0ZXMsIGZvciBleGFtcGxlIGBgcmFuZ2UoMCkgPT0gcmFuZ2UoMiwgMSwgMylgYCBvclxuYGByYW5nZSgwLCAzLCAyKSA9PSByYW5nZSgwLCA0LCAyKWBgLilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogSW1wbGVtZW50IHRoZSBTZXF1ZW5jZSBBQkMuIFN1cHBvcnQgc2xpY2luZ1xuYW5kIG5lZ2F0aXZlIGluZGljZXMuIFRlc3QgYGBpbnRgYCBvYmplY3RzIGZvciBtZW1iZXJzaGlwIGluIGNvbnN0YW50XG50aW1lIGluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGl0ZW1zLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBEZWZpbmUgXCc9PVwnIGFuZCBcJyE9XCcgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzXG5iYXNlZCBvbiB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoZXkgZGVmaW5lIChpbnN0ZWFkIG9mIGNvbXBhcmluZ1xuYmFzZWQgb24gb2JqZWN0IGlkZW50aXR5KS5cblxuTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcy5cbicsCiAgJ3R5cGVzc2VxLW11dGFibGUnOiAiXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSBgYGNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2VgYCBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCBgYGJ5dGVhcnJheWBgIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiBgYDAgPD0geCA8PSAyNTVgYCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgYXBwZW5kcyAqeCogdG8gdGhlIGVuZCBvZiB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXF1ZW5jZSAoc2FtZSBhcyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IFt4XWBgKSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY2xlYXIoKWBgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tIGBgc2BgICAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgZGVsIHNbOl1gYCkgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGBgc2BgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChzYW1lIGFzIGBgc1s6XWBgKSAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgICAgfCBleHRlbmRzICpzKiB3aXRoIHRoZSBjb250ZW50cyBvZiB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp0KiAoc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPSB0YGApICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IGluc2VydHMgKngqIGludG8gKnMqIGF0IHRoZSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggZ2l2ZW4gYnkgKmkqIChzYW1lIGFzICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTppXSA9IFt4XWBgKSAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbHNvIHJlbW92ZXMgaXQgZnJvbSAqcyogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGVyZSBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuIGBgcmVtb3ZlYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSBgYHJldmVyc2UoKWBgIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXlcbiAgIG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnMgdGhhdCBpdFxuICAgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjUuIGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzIGBgZGljdGBgIGFuZCBgYHNldGBgKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6IGBgY2xlYXIoKWBgIGFuZCBgYGNvcHkoKWBgIG1ldGhvZHMuXG4iLAogICd1bmFyeSc6ICdcblVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFsbCB1bmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTpcblxuICAgdV9leHByIDo6PSBwb3dlciB8ICItIiB1X2V4cHIgfCAiKyIgdV9leHByIHwgIn4iIHVfZXhwclxuXG5UaGUgdW5hcnkgYGAtYGAgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5IGBgK2BgIChwbHVzKSBvcGVyYXRvciB5aWVsZHMgaXRzIG51bWVyaWMgYXJndW1lbnQgdW5jaGFuZ2VkLlxuXG5UaGUgdW5hcnkgYGB+YGAgKGludmVydCkgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBpdHNcbmludGVnZXIgYXJndW1lbnQuICBUaGUgYml0d2lzZSBpbnZlcnNpb24gb2YgYGB4YGAgaXMgZGVmaW5lZCBhc1xuYGAtKHgrMSlgYC4gIEl0IG9ubHkgYXBwbGllcyB0byBpbnRlZ3JhbCBudW1iZXJzLlxuXG5JbiBhbGwgdGhyZWUgY2FzZXMsIGlmIHRoZSBhcmd1bWVudCBkb2VzIG5vdCBoYXZlIHRoZSBwcm9wZXIgdHlwZSwgYVxuYGBUeXBlRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKICAnd2hpbGUnOiAnXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG4nLApkaWZmIC0tZ2l0IGEvTGliL3F1b3ByaS5weSBiL0xpYi9xdW9wcmkucHkKaW5kZXggM2QwZjBhYy4uZTViZDAxMCAxMDA3NTUKLS0tIGEvTGliL3F1b3ByaS5weQorKysgYi9MaWIvcXVvcHJpLnB5CkBAIC0yMjMsNyArMjIzLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZSwgInJiIikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlczogY2FuJ3Qgb3BlbiAoJXMpXG4iICUgKGZpbGUsIG1zZykpCiAgICAgICAgICAgICAgICAgc3RzID0gMQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCmRpZmYgLS1naXQgYS9MaWIvcmFuZG9tLnB5IGIvTGliL3JhbmRvbS5weQppbmRleCAxNGFjNWU1Li44MDgxNzVhIDEwMDY0NAotLS0gYS9MaWIvcmFuZG9tLnB5CisrKyBiL0xpYi9yYW5kb20ucHkKQEAgLTQxLDcgKzQxLDcgQEAKIGZyb20gbWF0aCBpbXBvcnQgbG9nIGFzIF9sb2csIGV4cCBhcyBfZXhwLCBwaSBhcyBfcGksIGUgYXMgX2UsIGNlaWwgYXMgX2NlaWwKIGZyb20gbWF0aCBpbXBvcnQgc3FydCBhcyBfc3FydCwgYWNvcyBhcyBfYWNvcywgY29zIGFzIF9jb3MsIHNpbiBhcyBfc2luCiBmcm9tIG9zIGltcG9ydCB1cmFuZG9tIGFzIF91cmFuZG9tCi1mcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgU2V0IGFzIF9TZXQsIFNlcXVlbmNlIGFzIF9TZXF1ZW5jZQorZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCBTZXQgYXMgX1NldCwgU2VxdWVuY2UgYXMgX1NlcXVlbmNlCiBmcm9tIGhhc2hsaWIgaW1wb3J0IHNoYTUxMiBhcyBfc2hhNTEyCiAKIF9fYWxsX18gPSBbIlJhbmRvbSIsInNlZWQiLCJyYW5kb20iLCJ1bmlmb3JtIiwicmFuZGludCIsImNob2ljZSIsInNhbXBsZSIsCkBAIC0xNTEsNiArMTUxLDkgQEAKIAogIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gcGlja2xlIHN1cHBvcnQgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAorICAgICMgSXNzdWUgMTc0ODk6IFNpbmNlIF9fcmVkdWNlX18gd2FzIGRlZmluZWQgdG8gZml4ICM3NTk4ODkgdGhpcyBpcyBubworICAgICMgbG9uZ2VyIGNhbGxlZDsgd2UgbGVhdmUgaXQgaGVyZSBiZWNhdXNlIGl0IGhhcyBiZWVuIGhlcmUgc2luY2UgcmFuZG9tIHdhcworICAgICMgcmV3cml0dGVuIGJhY2sgaW4gMjAwMSBhbmQgd2h5IHJpc2sgYnJlYWtpbmcgc29tZXRoaW5nLgogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6ICMgZm9yIHBpY2tsZQogICAgICAgICByZXR1cm4gc2VsZi5nZXRzdGF0ZSgpCiAKQEAgLTIxNiwxMCArMjE5LDExIEBACiAgICAgICAgICAgICAgICAgICAgTWV0aG9kPV9NZXRob2RUeXBlLCBCdWlsdGluTWV0aG9kPV9CdWlsdGluTWV0aG9kVHlwZSk6CiAgICAgICAgICJSZXR1cm4gYSByYW5kb20gaW50IGluIHRoZSByYW5nZSBbMCxuKS4gIFJhaXNlcyBWYWx1ZUVycm9yIGlmIG49PTAuIgogCisgICAgICAgIHJhbmRvbSA9IHNlbGYucmFuZG9tCiAgICAgICAgIGdldHJhbmRiaXRzID0gc2VsZi5nZXRyYW5kYml0cwogICAgICAgICAjIE9ubHkgY2FsbCBzZWxmLmdldHJhbmRiaXRzIGlmIHRoZSBvcmlnaW5hbCByYW5kb20oKSBidWlsdGluIG1ldGhvZAogICAgICAgICAjIGhhcyBub3QgYmVlbiBvdmVycmlkZGVuIG9yIGlmIGEgbmV3IGdldHJhbmRiaXRzKCkgd2FzIHN1cHBsaWVkLgotICAgICAgICBpZiB0eXBlKHNlbGYucmFuZG9tKSBpcyBCdWlsdGluTWV0aG9kIG9yIHR5cGUoZ2V0cmFuZGJpdHMpIGlzIE1ldGhvZDoKKyAgICAgICAgaWYgdHlwZShyYW5kb20pIGlzIEJ1aWx0aW5NZXRob2Qgb3IgdHlwZShnZXRyYW5kYml0cykgaXMgTWV0aG9kOgogICAgICAgICAgICAgayA9IG4uYml0X2xlbmd0aCgpICAjIGRvbid0IHVzZSAobi0xKSBoZXJlIGJlY2F1c2UgbiBjYW4gYmUgMQogICAgICAgICAgICAgciA9IGdldHJhbmRiaXRzKGspICAgICAgICAgICMgMCA8PSByIDwgMioqawogICAgICAgICAgICAgd2hpbGUgciA+PSBuOgpAQCAtMjI3LDcgKzIzMSw2IEBACiAgICAgICAgICAgICByZXR1cm4gcgogICAgICAgICAjIFRoZXJlJ3MgYW4gb3ZlcnJpZGVuIHJhbmRvbSgpIG1ldGhvZCBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kLAogICAgICAgICAjIHNvIHdlIGNhbiBvbmx5IHVzZSByYW5kb20oKSBmcm9tIGhlcmUuCi0gICAgICAgIHJhbmRvbSA9IHNlbGYucmFuZG9tCiAgICAgICAgIGlmIG4gPj0gbWF4c2l6ZToKICAgICAgICAgICAgIF93YXJuKCJVbmRlcmx5aW5nIHJhbmRvbSgpIGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwbHkgXG4iCiAgICAgICAgICAgICAgICAgImVub3VnaCBiaXRzIHRvIGNob29zZSBmcm9tIGEgcG9wdWxhdGlvbiByYW5nZSB0aGlzIGxhcmdlLlxuIgpAQCAtMjUxLDEwICsyNTQsMTEgQEAKICAgICAgICAgcmV0dXJuIHNlcVtpXQogCiAgICAgZGVmIHNodWZmbGUoc2VsZiwgeCwgcmFuZG9tPU5vbmUpOgotICAgICAgICAiIiJ4LCByYW5kb209cmFuZG9tLnJhbmRvbSAtPiBzaHVmZmxlIGxpc3QgeCBpbiBwbGFjZTsgcmV0dXJuIE5vbmUuCisgICAgICAgICIiIlNodWZmbGUgbGlzdCB4IGluIHBsYWNlLCBhbmQgcmV0dXJuIE5vbmUuCiAKLSAgICAgICAgT3B0aW9uYWwgYXJnIHJhbmRvbSBpcyBhIDAtYXJndW1lbnQgZnVuY3Rpb24gcmV0dXJuaW5nIGEgcmFuZG9tCi0gICAgICAgIGZsb2F0IGluIFswLjAsIDEuMCk7IGJ5IGRlZmF1bHQsIHRoZSBzdGFuZGFyZCByYW5kb20ucmFuZG9tLgorICAgICAgICBPcHRpb25hbCBhcmd1bWVudCByYW5kb20gaXMgYSAwLWFyZ3VtZW50IGZ1bmN0aW9uIHJldHVybmluZyBhCisgICAgICAgIHJhbmRvbSBmbG9hdCBpbiBbMC4wLCAxLjApOyBpZiBpdCBpcyB0aGUgZGVmYXVsdCBOb25lLCB0aGUKKyAgICAgICAgc3RhbmRhcmQgcmFuZG9tLnJhbmRvbSB3aWxsIGJlIHVzZWQuCiAKICAgICAgICAgIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi9yZS5weSBiL0xpYi9yZS5weQppbmRleCBmY2VhMTkwLi43N2Y1ZTNmIDEwMDY0NAotLS0gYS9MaWIvcmUucHkKKysrIGIvTGliL3JlLnB5CkBAIC04NSwxNiArODUsMTcgQEAKICAgICBcXCAgICAgICBNYXRjaGVzIGEgbGl0ZXJhbCBiYWNrc2xhc2guCiAKIFRoaXMgbW9kdWxlIGV4cG9ydHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Ci0gICAgbWF0Y2ggICAgTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgotICAgIHNlYXJjaCAgIFNlYXJjaCBhIHN0cmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgcGF0dGVybi4KLSAgICBzdWIgICAgICBTdWJzdGl0dXRlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBmb3VuZCBpbiBhIHN0cmluZy4KLSAgICBzdWJuICAgICBTYW1lIGFzIHN1YiwgYnV0IGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBtYWRlLgotICAgIHNwbGl0ICAgIFNwbGl0IGEgc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4uCi0gICAgZmluZGFsbCAgRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGluIGEgc3RyaW5nLgotICAgIGZpbmRpdGVyIFJldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyBhIG1hdGNoIG9iamVjdCBmb3IgZWFjaCBtYXRjaC4KLSAgICBjb21waWxlICBDb21waWxlIGEgcGF0dGVybiBpbnRvIGEgUmVnZXhPYmplY3QuCi0gICAgcHVyZ2UgICAgQ2xlYXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4KLSAgICBlc2NhcGUgICBCYWNrc2xhc2ggYWxsIG5vbi1hbHBoYW51bWVyaWNzIGluIGEgc3RyaW5nLgorICAgIG1hdGNoICAgICBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuCisgICAgZnVsbG1hdGNoIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gYWxsIG9mIGEgc3RyaW5nLgorICAgIHNlYXJjaCAgICBTZWFyY2ggYSBzdHJpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHBhdHRlcm4uCisgICAgc3ViICAgICAgIFN1YnN0aXR1dGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGZvdW5kIGluIGEgc3RyaW5nLgorICAgIHN1Ym4gICAgICBTYW1lIGFzIHN1YiwgYnV0IGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBtYWRlLgorICAgIHNwbGl0ICAgICBTcGxpdCBhIHN0cmluZyBieSB0aGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLgorICAgIGZpbmRhbGwgICBGaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gaW4gYSBzdHJpbmcuCisgICAgZmluZGl0ZXIgIFJldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyBhIG1hdGNoIG9iamVjdCBmb3IgZWFjaCBtYXRjaC4KKyAgICBjb21waWxlICAgQ29tcGlsZSBhIHBhdHRlcm4gaW50byBhIFJlZ2V4T2JqZWN0LgorICAgIHB1cmdlICAgICBDbGVhciB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLgorICAgIGVzY2FwZSAgICBCYWNrc2xhc2ggYWxsIG5vbi1hbHBoYW51bWVyaWNzIGluIGEgc3RyaW5nLgogCiBTb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgdGFrZXMgZmxhZ3MgYXMgb3B0aW9uYWwgcGFyYW1ldGVyczoKICAgICBBICBBU0NJSSAgICAgICBGb3Igc3RyaW5nIHBhdHRlcm5zLCBtYWtlIFx3LCBcVywgXGIsIFxCLCBcZCwgXEQKQEAgLTEyMSwxMCArMTIyLDkgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBzcmVfY29tcGlsZQogaW1wb3J0IHNyZV9wYXJzZQotaW1wb3J0IGZ1bmN0b29scwogCiAjIHB1YmxpYyBzeW1ib2xzCi1fX2FsbF9fID0gWyAibWF0Y2giLCAic2VhcmNoIiwgInN1YiIsICJzdWJuIiwgInNwbGl0IiwgImZpbmRhbGwiLAorX19hbGxfXyA9IFsgIm1hdGNoIiwgImZ1bGxtYXRjaCIsICJzZWFyY2giLCAic3ViIiwgInN1Ym4iLCAic3BsaXQiLCAiZmluZGFsbCIsCiAgICAgImNvbXBpbGUiLCAicHVyZ2UiLCAidGVtcGxhdGUiLCAiZXNjYXBlIiwgIkEiLCAiSSIsICJMIiwgIk0iLCAiUyIsICJYIiwKICAgICAiVSIsICJBU0NJSSIsICJJR05PUkVDQVNFIiwgIkxPQ0FMRSIsICJNVUxUSUxJTkUiLCAiRE9UQUxMIiwgIlZFUkJPU0UiLAogICAgICJVTklDT0RFIiwgImVycm9yIiBdCkBAIC0xNTUsNiArMTU1LDExIEBACiAgICAgYSBtYXRjaCBvYmplY3QsIG9yIE5vbmUgaWYgbm8gbWF0Y2ggd2FzIGZvdW5kLiIiIgogICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykubWF0Y2goc3RyaW5nKQogCitkZWYgZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCk6CisgICAgIiIiVHJ5IHRvIGFwcGx5IHRoZSBwYXR0ZXJuIHRvIGFsbCBvZiB0aGUgc3RyaW5nLCByZXR1cm5pbmcKKyAgICBhIG1hdGNoIG9iamVjdCwgb3IgTm9uZSBpZiBubyBtYXRjaCB3YXMgZm91bmQuIiIiCisgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5mdWxsbWF0Y2goc3RyaW5nKQorCiBkZWYgc2VhcmNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCk6CiAgICAgIiIiU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoIHRvIHRoZSBwYXR0ZXJuLCByZXR1cm5pbmcKICAgICBhIG1hdGNoIG9iamVjdCwgb3IgTm9uZSBpZiBubyBtYXRjaCB3YXMgZm91bmQuIiIiCmRpZmYgLS1naXQgYS9MaWIvcmxjb21wbGV0ZXIucHkgYi9MaWIvcmxjb21wbGV0ZXIucHkKaW5kZXggM2Y5NzA1My4uOTRmOTM0MSAxMDA2NDQKLS0tIGEvTGliL3JsY29tcGxldGVyLnB5CisrKyBiL0xpYi9ybGNvbXBsZXRlci5weQpAQCAtMjksNiArMjksNyBAQAogCiAiIiIKIAoraW1wb3J0IGF0ZXhpdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgX19tYWluX18KIApAQCAtMTU4LDMgKzE1OSw3IEBACiAgICAgcGFzcwogZWxzZToKICAgICByZWFkbGluZS5zZXRfY29tcGxldGVyKENvbXBsZXRlcigpLmNvbXBsZXRlKQorICAgICMgUmVsZWFzZSByZWZlcmVuY2VzIGVhcmx5IGF0IHNodXRkb3duICh0aGUgcmVhZGxpbmUgbW9kdWxlJ3MKKyAgICAjIGNvbnRlbnRzIGFyZSBxdWFzaS1pbW1vcnRhbCwgYW5kIHRoZSBjb21wbGV0ZXIgZnVuY3Rpb24gaG9sZHMgYQorICAgICMgcmVmZXJlbmNlIHRvIGdsb2JhbHMpLgorICAgIGF0ZXhpdC5yZWdpc3RlcihsYW1iZGE6IHJlYWRsaW5lLnNldF9jb21wbGV0ZXIoTm9uZSkpCmRpZmYgLS1naXQgYS9MaWIvcnVucHkucHkgYi9MaWIvcnVucHkucHkKaW5kZXggMzljMGU5Zi4uMWUwYTJiZSAxMDA2NDQKLS0tIGEvTGliL3J1bnB5LnB5CisrKyBiL0xpYi9ydW5weS5weQpAQCAtMTMsNyArMTMsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeSAjIGltcG9ydGxpYiBmaXJzdCBzbyB3ZSBjYW4gdGVzdCAjMTUzODYgdmlhIC1tCi1pbXBvcnQgaW1wCitpbXBvcnQgdHlwZXMKIGZyb20gcGtndXRpbCBpbXBvcnQgcmVhZF9jb2RlLCBnZXRfbG9hZGVyLCBnZXRfaW1wb3J0ZXIKIAogX19hbGxfXyA9IFsKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAiIiJUZW1wb3JhcmlseSByZXBsYWNlIGEgbW9kdWxlIGluIHN5cy5tb2R1bGVzIHdpdGggYW4gZW1wdHkgbmFtZXNwYWNlIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZF9uYW1lKToKICAgICAgICAgc2VsZi5tb2RfbmFtZSA9IG1vZF9uYW1lCi0gICAgICAgIHNlbGYubW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2RfbmFtZSkKICAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlID0gW10KIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC0yMjMsNyArMjIzLDEyIEBACiAgICAgICAgIHJ1bl9uYW1lID0gIjxydW5fcGF0aD4iCiAgICAgcGtnX25hbWUgPSBydW5fbmFtZS5ycGFydGl0aW9uKCIuIilbMF0KICAgICBpbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoX25hbWUpCi0gICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgKHR5cGUoTm9uZSksIGltcC5OdWxsSW1wb3J0ZXIpKToKKyAgICAjIFRyeWluZyB0byBhdm9pZCBpbXBvcnRpbmcgaW1wIHNvIGFzIHRvIG5vdCBjb25zdW1lIHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nLgorICAgIGlzX051bGxJbXBvcnRlciA9IEZhbHNlCisgICAgaWYgdHlwZShpbXBvcnRlcikuX19tb2R1bGVfXyA9PSAnaW1wJzoKKyAgICAgICAgaWYgdHlwZShpbXBvcnRlcikuX19uYW1lX18gPT0gJ051bGxJbXBvcnRlcic6CisgICAgICAgICAgICBpc19OdWxsSW1wb3J0ZXIgPSBUcnVlCisgICAgaWYgaXNpbnN0YW5jZShpbXBvcnRlciwgdHlwZShOb25lKSkgb3IgaXNfTnVsbEltcG9ydGVyOgogICAgICAgICAjIE5vdCBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCBzbyBydW4gdGhlIGNvZGUgZGlyZWN0bHkKICAgICAgICAgIyBleGVjZmlsZSgpIGRvZXNuJ3QgaGVscCBhcyB3ZSB3YW50IHRvIGFsbG93IGNvbXBpbGVkIGZpbGVzCiAgICAgICAgIGNvZGUsIG1vZF9sb2FkZXIgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHJ1bl9uYW1lLCBwYXRoX25hbWUpCmRpZmYgLS1naXQgYS9MaWIvc2NoZWQucHkgYi9MaWIvc2NoZWQucHkKaW5kZXggYjlhN2FkMS4uMmU2YjAwYSAxMDA2NDQKLS0tIGEvTGliL3NjaGVkLnB5CisrKyBiL0xpYi9zY2hlZC5weQpAQCAtNzEsMTAgKzcxLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBrd2FyZ3MgaXMgX3NlbnRpbmVsOgogICAgICAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgZXZlbnQgPSBFdmVudCh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICBldmVudCA9IEV2ZW50KHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAgICAgICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9xdWV1ZSwgZXZlbnQpCi0gICAgICAgICAgICByZXR1cm4gZXZlbnQgIyBUaGUgSUQKKyAgICAgICAgcmV0dXJuIGV2ZW50ICMgVGhlIElECiAKICAgICBkZWYgZW50ZXIoc2VsZiwgZGVsYXksIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50PSgpLCBrd2FyZ3M9X3NlbnRpbmVsKToKICAgICAgICAgIiIiQSB2YXJpYW50IHRoYXQgc3BlY2lmaWVzIHRoZSB0aW1lIGFzIGEgcmVsYXRpdmUgdGltZS4KQEAgLTgyLDkgKzgyLDggQEAKICAgICAgICAgVGhpcyBpcyBhY3R1YWxseSB0aGUgbW9yZSBjb21tb25seSB1c2VkIGludGVyZmFjZS4KIAogICAgICAgICAiIiIKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgdGltZSA9IHNlbGYudGltZWZ1bmMoKSArIGRlbGF5Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5lbnRlcmFicyh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQorICAgICAgICB0aW1lID0gc2VsZi50aW1lZnVuYygpICsgZGVsYXkKKyAgICAgICAgcmV0dXJuIHNlbGYuZW50ZXJhYnModGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKIAogICAgIGRlZiBjYW5jZWwoc2VsZiwgZXZlbnQpOgogICAgICAgICAiIiJSZW1vdmUgYW4gZXZlbnQgZnJvbSB0aGUgcXVldWUuCkBAIC0xNjUsNCArMTY0LDQgQEAKICAgICAgICAgIyB0aGUgYWN0dWFsIG9yZGVyIHRoZXkgd291bGQgYmUgcmV0cmlldmVkLgogICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CiAgICAgICAgICAgICBldmVudHMgPSBzZWxmLl9xdWV1ZVs6XQotICAgICAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKKyAgICAgICAgcmV0dXJuIGxpc3QobWFwKGhlYXBxLmhlYXBwb3AsIFtldmVudHNdKmxlbihldmVudHMpKSkKZGlmZiAtLWdpdCBhL0xpYi9zZWxlY3RvcnMucHkgYi9MaWIvc2VsZWN0b3JzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1MzNmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNDU1IEBACisiIiJTZWxlY3RvcnMgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCitgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcy4KKyIiIgorCisKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgTWFwcGluZworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHNlbGVjdAoraW1wb3J0IHN5cworCisKKyMgZ2VuZXJpYyBldmVudHMsIHRoYXQgbXVzdCBiZSBtYXBwZWQgdG8gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgb25lcworRVZFTlRfUkVBRCA9ICgxIDw8IDApCitFVkVOVF9XUklURSA9ICgxIDw8IDEpCisKKworZGVmIF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopOgorICAgICIiIlJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBvYmplY3QuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisKKyAgICBSZXR1cm5zOgorICAgIGNvcnJlc3BvbmRpbmcgZmlsZSBkZXNjcmlwdG9yCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmaWxlb2JqLCBpbnQpOgorICAgICAgICBmZCA9IGZpbGVvYmoKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmZCA9IGludChmaWxlb2JqLmZpbGVubygpKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmaWxlIG9iamVjdDogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieyFyfSIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICBpZiBmZCA8IDA6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgZmlsZSBkZXNjcmlwdG9yOiB7fSIuZm9ybWF0KGZkKSkKKyAgICByZXR1cm4gZmQKKworCitTZWxlY3RvcktleSA9IG5hbWVkdHVwbGUoJ1NlbGVjdG9yS2V5JywgWydmaWxlb2JqJywgJ2ZkJywgJ2V2ZW50cycsICdkYXRhJ10pCisiIiJPYmplY3QgdXNlZCB0byBhc3NvY2lhdGUgYSBmaWxlIG9iamVjdCB0byBpdHMgYmFja2luZyBmaWxlIGRlc2NyaXB0b3IsCitzZWxlY3RlZCBldmVudCBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiIiIgorCisKK2NsYXNzIF9TZWxlY3Rvck1hcHBpbmcoTWFwcGluZyk6CisgICAgIiIiTWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcik6CisgICAgICAgIHNlbGYuX3NlbGVjdG9yID0gc2VsZWN0b3IKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3NlbGVjdG9yLl9mZF90b19rZXkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5W19maWxlb2JqX3RvX2ZkKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleSkKKworCitjbGFzcyBCYXNlU2VsZWN0b3IobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICIiIlNlbGVjdG9yIGFic3RyYWN0IGJhc2UgY2xhc3MuCisKKyAgICBBIHNlbGVjdG9yIHN1cHBvcnRzIHJlZ2lzdGVyaW5nIGZpbGUgb2JqZWN0cyB0byBiZSBtb25pdG9yZWQgZm9yIHNwZWNpZmljCisgICAgSS9PIGV2ZW50cy4KKworICAgIEEgZmlsZSBvYmplY3QgaXMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgYW55IG9iamVjdCB3aXRoIGEgYGZpbGVubygpYCBtZXRob2QuCisgICAgQW4gYXJiaXRyYXJ5IG9iamVjdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIGZpbGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZAorICAgIGZvciBleGFtcGxlIHRvIHN0b3JlIGNvbnRleHQgaW5mb3JtYXRpb24sIGEgY2FsbGJhY2ssIGV0Yy4KKworICAgIEEgc2VsZWN0b3IgY2FuIHVzZSB2YXJpb3VzIGltcGxlbWVudGF0aW9ucyAoc2VsZWN0KCksIHBvbGwoKSwgZXBvbGwoKS4uLikKKyAgICBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLiBUaGUgZGVmYXVsdCBgU2VsZWN0b3JgIGNsYXNzIHVzZXMgdGhlIG1vc3QKKyAgICBwZXJmb3JtYW50IGltcGxlbWVudGF0aW9uIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIiIiUmVnaXN0ZXIgYSBmaWxlIG9iamVjdC4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmaWxlb2JqIC0tIGZpbGUgb2JqZWN0IG9yIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBldmVudHMgIC0tIGV2ZW50cyB0byBtb25pdG9yIChiaXR3aXNlIG1hc2sgb2YgRVZFTlRfUkVBRHxFVkVOVF9XUklURSkKKyAgICAgICAgZGF0YSAgICAtLSBhdHRhY2hlZCBkYXRhCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJVbnJlZ2lzdGVyIGEgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG1vZGlmeShzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICIiIkNoYW5nZSBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QgbW9uaXRvcmVkIGV2ZW50cyBvciBhdHRhY2hlZCBkYXRhLgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGV2ZW50cyAgLS0gZXZlbnRzIHRvIG1vbml0b3IgKGJpdHdpc2UgbWFzayBvZiBFVkVOVF9SRUFEfEVWRU5UX1dSSVRFKQorICAgICAgICBkYXRhICAgIC0tIGF0dGFjaGVkIGRhdGEKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgIHJldHVybiBzZWxmLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybSB0aGUgYWN0dWFsIHNlbGVjdGlvbiwgdW50aWwgc29tZSBtb25pdG9yZWQgZmlsZSBvYmplY3RzIGFyZQorICAgICAgICByZWFkeSBvciBhIHRpbWVvdXQgZXhwaXJlcy4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0aW1lb3V0IC0tIGlmIHRpbWVvdXQgPiAwLCB0aGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3YWl0IHRpbWUsIGluCisgICAgICAgICAgICAgICAgICAgc2Vjb25kcworICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMCwgdGhlIHNlbGVjdCgpIGNhbGwgd29uJ3QgYmxvY2ssIGFuZCB3aWxsCisgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSBjdXJyZW50bHkgcmVhZHkgZmlsZSBvYmplY3RzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lLCBzZWxlY3QoKSB3aWxsIGJsb2NrIHVudGlsIGEgbW9uaXRvcmVkCisgICAgICAgICAgICAgICAgICAgZmlsZSBvYmplY3QgYmVjb21lcyByZWFkeQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIGxpc3Qgb2YgKGtleSwgZXZlbnRzKSBmb3IgcmVhZHkgZmlsZSBvYmplY3RzCisgICAgICAgIGBldmVudHNgIGlzIGEgYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHNlbGVjdG9yLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X2tleShzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXkgYXNzb2NpYXRlZCB0byBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgZm9yIHRoaXMgZmlsZSBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIG1hcHBpbmcgPSBzZWxmLmdldF9tYXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbWFwcGluZ1tmaWxlb2JqXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBnZXRfbWFwKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBtYXBwaW5nIG9mIGZpbGUgb2JqZWN0cyB0byBzZWxlY3RvciBrZXlzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX0Jhc2VTZWxlY3RvckltcGwoQmFzZVNlbGVjdG9yKToKKyAgICAiIiJCYXNlIHNlbGVjdG9yIGltcGxlbWVudGF0aW9uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAjIHRoaXMgbWFwcyBmaWxlIGRlc2NyaXB0b3JzIHRvIGtleXMKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5ID0ge30KKyAgICAgICAgIyByZWFkLW9ubHkgbWFwcGluZyByZXR1cm5lZCBieSBnZXRfbWFwKCkKKyAgICAgICAgc2VsZi5fbWFwID0gX1NlbGVjdG9yTWFwcGluZyhzZWxmKQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgaWYgKG5vdCBldmVudHMpIG9yIChldmVudHMgJiB+KEVWRU5UX1JFQUQgfCBFVkVOVF9XUklURSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBldmVudHM6IHshcn0iLmZvcm1hdChldmVudHMpKQorCisgICAgICAgIGtleSA9IFNlbGVjdG9yS2V5KGZpbGVvYmosIF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopLCBldmVudHMsIGRhdGEpCisKKyAgICAgICAgaWYga2V5LmZkIGluIHNlbGYuX2ZkX3RvX2tleToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IChGRCB7fSkgaXMgYWxyZWFkeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmosIGtleS5mZCkpCisKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5W2tleS5mZF0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2ZkX3RvX2tleS5wb3AoX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaikpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgbW9kaWZ5KHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIyBUT0RPOiBTdWJjbGFzc2VzIGNhbiBwcm9iYWJseSBvcHRpbWl6ZSB0aGlzIGV2ZW4gZnVydGhlci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5W19maWxlb2JqX3RvX2ZkKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICAgICAgaWYgZXZlbnRzICE9IGtleS5ldmVudHM6CisgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGtleSA9IHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBlbGlmIGRhdGEgIT0ga2V5LmRhdGE6CisgICAgICAgICAgICAjIFVzZSBhIHNob3J0Y3V0IHRvIHVwZGF0ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgIGtleSA9IGtleS5fcmVwbGFjZShkYXRhPWRhdGEpCisgICAgICAgICAgICBzZWxmLl9mZF90b19rZXlba2V5LmZkXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2ZkX3RvX2tleS5jbGVhcigpCisKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hcAorCisgICAgZGVmIF9rZXlfZnJvbV9mZChzZWxmLCBmZCk6CisgICAgICAgICIiIlJldHVybiB0aGUga2V5IGFzc29jaWF0ZWQgdG8gYSBnaXZlbiBmaWxlIGRlc2NyaXB0b3IuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmQgLS0gZmlsZSBkZXNjcmlwdG9yCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgY29ycmVzcG9uZGluZyBrZXksIG9yIE5vbmUgaWYgbm90IGZvdW5kCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZmRfdG9fa2V5W2ZkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAiIiJTZWxlY3QtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9yZWFkZXJzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fd3JpdGVycyA9IHNldCgpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRlcnMuYWRkKGtleS5mZCkKKyAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl93cml0ZXJzLmFkZChrZXkuZmQpCisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgc2VsZi5fcmVhZGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgc2VsZi5fd3JpdGVycy5kaXNjYXJkKGtleS5mZCkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGRlZiBfc2VsZWN0KHNlbGYsIHIsIHcsIF8sIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdChyLCB3LCB3LCB0aW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIHIsIHcgKyB4LCBbXQorICAgIGVsc2U6CisgICAgICAgIF9zZWxlY3QgPSBzZWxlY3Quc2VsZWN0CisKKyAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICByZWFkeSA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHIsIHcsIF8gPSBzZWxmLl9zZWxlY3Qoc2VsZi5fcmVhZGVycywgc2VsZi5fd3JpdGVycywgW10sIHRpbWVvdXQpCisgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgIHIgPSBzZXQocikKKyAgICAgICAgdyA9IHNldCh3KQorICAgICAgICBmb3IgZmQgaW4gciB8IHc6CisgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICBpZiBmZCBpbiByOgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICBpZiBmZCBpbiB3OgorICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgIHJldHVybiByZWFkeQorCisKK2lmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgorCisgICAgY2xhc3MgUG9sbFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAgICAgIiIiUG9sbC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYuX3BvbGwgPSBzZWxlY3QucG9sbCgpCisKKyAgICAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICAgICAgcG9sbF9ldmVudHMgPSAwCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMSU4KKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgIHBvbGxfZXZlbnRzIHw9IHNlbGVjdC5QT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9wb2xsLnJlZ2lzdGVyKGtleS5mZCwgcG9sbF9ldmVudHMpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIHNlbGYuX3BvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KGludCgxMDAwICogdGltZW91dCksIDApCisgICAgICAgICAgICByZWFkeSA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRfZXZlbnRfbGlzdCA9IHNlbGYuX3BvbGwucG9sbCh0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3IgZmQsIGV2ZW50IGluIGZkX2V2ZW50X2xpc3Q6CisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMSU46CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5QT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2Vwb2xsJyk6CisKKyAgICBjbGFzcyBFcG9sbFNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAgICAgIiIiRXBvbGwtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9lcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9lcG9sbC5maWxlbm8oKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIGVwb2xsX2V2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgZXBvbGxfZXZlbnRzIHw9IHNlbGVjdC5FUE9MTElOCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBlcG9sbF9ldmVudHMgfD0gc2VsZWN0LkVQT0xMT1VUCisgICAgICAgICAgICBzZWxmLl9lcG9sbC5yZWdpc3RlcihrZXkuZmQsIGVwb2xsX2V2ZW50cykKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5fZXBvbGwudW5yZWdpc3RlcihrZXkuZmQpCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IC0xIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICAgICAgbWF4X2V2ID0gbGVuKHNlbGYuX2ZkX3RvX2tleSkKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZF9ldmVudF9saXN0ID0gc2VsZi5fZXBvbGwucG9sbCh0aW1lb3V0LCBtYXhfZXYpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gZmRfZXZlbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LkVQT0xMSU46CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9XUklURQorICAgICAgICAgICAgICAgIGlmIGV2ZW50ICYgfnNlbGVjdC5FUE9MTE9VVDoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZXBvbGwuY2xvc2UoKQorICAgICAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKworaWYgaGFzYXR0cihzZWxlY3QsICdrcXVldWUnKToKKworICAgIGNsYXNzIEtxdWV1ZVNlbGVjdG9yKF9CYXNlU2VsZWN0b3JJbXBsKToKKyAgICAgICAgIiIiS3F1ZXVlLWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9rcXVldWUuZmlsZW5vKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAga2V2ID0gc2VsZWN0LmtldmVudChrZXkuZmQsIHNlbGVjdC5LUV9GSUxURVJfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICBpZiBrZXkuZXZlbnRzICYgRVZFTlRfUkVBRDoKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LktRX0VWX0RFTEVURSkKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgICAgICBtYXhfZXYgPSBsZW4oc2VsZi5fZmRfdG9fa2V5KQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGtldl9saXN0ID0gc2VsZi5fa3F1ZXVlLmNvbnRyb2woTm9uZSwgbWF4X2V2LCB0aW1lb3V0KQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisgICAgICAgICAgICBmb3Iga2V2IGluIGtldl9saXN0OgorICAgICAgICAgICAgICAgIGZkID0ga2V2LmlkZW50CisgICAgICAgICAgICAgICAgZmxhZyA9IGtldi5maWx0ZXIKKyAgICAgICAgICAgICAgICBldmVudHMgPSAwCisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cyB8PSBFVkVOVF9SRUFECisgICAgICAgICAgICAgICAgaWYgZmxhZyA9PSBzZWxlY3QuS1FfRklMVEVSX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNsb3NlKCkKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisKKyMgQ2hvb3NlIHRoZSBiZXN0IGltcGxlbWVudGF0aW9uOiByb3VnaGx5LCBlcG9sbHxrcXVldWUgPiBwb2xsID4gc2VsZWN0LgorIyBzZWxlY3QoKSBhbHNvIGNhbid0IGFjY2VwdCBhIEZEID4gRkRfU0VUU0laRSAodXN1YWxseSBhcm91bmQgMTAyNCkKK2lmICdLcXVldWVTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEtxdWV1ZVNlbGVjdG9yCitlbGlmICdFcG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gRXBvbGxTZWxlY3RvcgorZWxpZiAnUG9sbFNlbGVjdG9yJyBpbiBnbG9iYWxzKCk6CisgICAgRGVmYXVsdFNlbGVjdG9yID0gUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFNlbGVjdFNlbGVjdG9yCmRpZmYgLS1naXQgYS9MaWIvc2hlbHZlLnB5IGIvTGliL3NoZWx2ZS5weQppbmRleCBjYzE4MTVlLi5jZWY1ODBlIDEwMDY0NAotLS0gYS9MaWIvc2hlbHZlLnB5CisrKyBiL0xpYi9zaGVsdmUucHkKQEAgLTYxLDcgKzYxLDcgQEAKIAogaW1wb3J0IGNvbGxlY3Rpb25zCiAKLV9fYWxsX18gPSBbIlNoZWxmIiwiQnNkRGJTaGVsZiIsIkRiZmlsZW5hbWVTaGVsZiIsIm9wZW4iXQorX19hbGxfXyA9IFsiU2hlbGYiLCAiQnNkRGJTaGVsZiIsICJEYmZpbGVuYW1lU2hlbGYiLCAib3BlbiJdCiAKIGNsYXNzIF9DbG9zZWREaWN0KGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nKToKICAgICAnTWFya2VyIGZvciBhIGNsb3NlZCBkaWN0LiAgQWNjZXNzIGF0dGVtcHRzIHJhaXNlIGEgVmFsdWVFcnJvci4nCkBAIC0xMzEsNiArMTMxLDEyIEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLnN5bmMoKQogICAgICAgICB0cnk6CkBAIC0xNDcsNiArMTUzLDcgQEAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ3dyaXRlYmFjaycpOgogICAgICAgICAgICAgIyBfX2luaXRfXyBkaWRuJ3Qgc3VjY2VlZCwgc28gZG9uJ3QgYm90aGVyIGNsb3NpbmcKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzM5MDA3IGZvciBkZXRhaWxzCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IGE1YjJkMjQuLjUwMmJiNjcgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMzksMTcgKzM5LDIwIEBACiAgICAgICAgICAgICJpZ25vcmVfcGF0dGVybnMiLCAiY2hvd24iLCAid2hpY2giXQogICAgICAgICAgICAjIGRpc2tfdXNhZ2UgaXMgYWRkZWQgbGF0ZXIsIGlmIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0KIAotY2xhc3MgRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFcnJvcihPU0Vycm9yKToKICAgICBwYXNzCiAKLWNsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBTYW1lRmlsZUVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiIiIgorCitjbGFzcyBTcGVjaWFsRmlsZUVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKLWNsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEV4ZWNFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCiAKLWNsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFJlYWRFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCiAKIGNsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDExICs2MCw2IEBACiAgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgogCiAKLXRyeToKLSAgICBXaW5kb3dzRXJyb3IKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgV2luZG93c0Vycm9yID0gTm9uZQotCiBkZWYgY29weWZpbGVvYmooZnNyYywgZmRzdCwgbGVuZ3RoPTE2KjEwMjQpOgogICAgICIiImNvcHkgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QgZnNyYyB0byBmaWxlLWxpa2Ugb2JqZWN0IGZkc3QiIiIKICAgICB3aGlsZSAxOgpAQCAtOTAsNyArODgsNyBAQAogCiAgICAgIiIiCiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKLSAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKKyAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhlIHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkKIAogICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgogICAgICAgICB0cnk6CkBAIC0yMjEsNiArMjE5LDkgQEAKICAgICBJZiBmb2xsb3dfc3ltbGlua3MgaXMgZmFsc2UsIHN5bWxpbmtzIHdvbid0IGJlIGZvbGxvd2VkLiBUaGlzCiAgICAgcmVzZW1ibGVzIEdOVSdzICJjcCAtUCBzcmMgZHN0Ii4KIAorICAgIElmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUsIGEgU2FtZUZpbGVFcnJvciB3aWxsIGJlCisgICAgcmFpc2VkLgorCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCkBAIC0zMjksMTUgKzMzMCwxMyBAQAogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKICAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKICAgICAgICAgICAgIGVycm9ycy5leHRlbmQoZXJyLmFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjbmFtZSwgZHN0bmFtZSwgc3RyKHdoeSkpKQogICAgIHRyeToKICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCiAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgotICAgICAgICBpZiBXaW5kb3dzRXJyb3IgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2Uod2h5LCBXaW5kb3dzRXJyb3IpOgotICAgICAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKKyAgICAgICAgIyBDb3B5aW5nIGZpbGUgYWNjZXNzIHRpbWVzIG1heSBmYWlsIG9uIFdpbmRvd3MKKyAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CiAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgIGlmIGVycm9yczoKICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQpAQCAtMzU2LDI0ICszNTUsMjQgQEAKICAgICBuYW1lcyA9IFtdCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIG9uZXJyb3Iob3MubGlzdGRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmdWxsbmFtZSkuc3RfbW9kZQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbW9kZSA9IDAKICAgICAgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgogICAgICAgICAgICAgX3JtdHJlZV91bnNhZmUoZnVsbG5hbWUsIG9uZXJyb3IpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZ1bGxuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgb25lcnJvcihvcy51bmxpbmssIGZ1bGxuYW1lLCBzeXMuZXhjX2luZm8oKSkKICAgICB0cnk6CiAgICAgICAgIG9zLnJtZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLnJtZGlyLCBwYXRoLCBzeXMuZXhjX2luZm8oKSkKIAogIyBWZXJzaW9uIHVzaW5nIGZkLWJhc2VkIEFQSXMgdG8gcHJvdGVjdCBhZ2FpbnN0IHJhY2VzCkBAIC00NjQsNyArNDYzLDcgQEAKICAgICAgICAgICAgICAgICBfcm10cmVlX3NhZmVfZmQoZmQsIHBhdGgsIG9uZXJyb3IpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9zaXRlLnB5IGIvTGliL3NpdGUucHkKaW5kZXggN2UwOTcwMS4uYjBkODI2OCAxMDA2NDQKLS0tIGEvTGliL3NpdGUucHkKKysrIGIvTGliL3NpdGUucHkKQEAgLTU4LDE3ICs1OCwyMCBAQAogYmVjYXVzZSBiYXIucHRoIGNvbWVzIGFscGhhYmV0aWNhbGx5IGJlZm9yZSBmb28ucHRoOyBhbmQgc3BhbSBpcwogb21pdHRlZCBiZWNhdXNlIGl0IGlzIG5vdCBtZW50aW9uZWQgaW4gZWl0aGVyIHBhdGggY29uZmlndXJhdGlvbiBmaWxlLgogCi1BZnRlciB0aGVzZSBwYXRoIG1hbmlwdWxhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKK1RoZSByZWFkbGluZSBtb2R1bGUgaXMgYWxzbyBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQgdG8gZW5hYmxlCitjb21wbGV0aW9uIGZvciBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdC4gIFRoaXMgY2FuIGJlIG92ZXJyaWRlbiBpbgorc2l0ZWN1c3RvbWl6ZSwgdXNlcmN1c3RvbWl6ZSBvciBQWVRIT05TVEFSVFVQLgorCitBZnRlciB0aGVzZSBvcGVyYXRpb25zLCBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gaW1wb3J0IGEgbW9kdWxlCiBuYW1lZCBzaXRlY3VzdG9taXplLCB3aGljaCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgYWRkaXRpb25hbAogc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9ucy4gIElmIHRoaXMgaW1wb3J0IGZhaWxzIHdpdGggYW4KIEltcG9ydEVycm9yIGV4Y2VwdGlvbiwgaXQgaXMgc2lsZW50bHkgaWdub3JlZC4KLQogIiIiCiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBfc2l0ZWJ1aWx0aW5zCiAKICMgUHJlZml4ZXMgZm9yIHNpdGUtcGFja2FnZXM7IGFkZCBhZGRpdGlvbmFsIHByZWZpeGVzIGxpa2UgL3Vzci9sb2NhbCBoZXJlCiBQUkVGSVhFUyA9IFtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXhdCkBAIC0xNDYsMTQgKzE0OSwxNCBAQAogICAgICAgIGFuZCBhZGQgdGhhdCB0byBrbm93bl9wYXRocywgb3IgZXhlY3V0ZSBpdCBpZiBpdCBzdGFydHMgd2l0aCAnaW1wb3J0ICcuCiAgICAgIiIiCiAgICAgaWYga25vd25fcGF0aHMgaXMgTm9uZToKLSAgICAgICAgX2luaXRfcGF0aGluZm8oKQorICAgICAgICBrbm93bl9wYXRocyA9IF9pbml0X3BhdGhpbmZvKCkKICAgICAgICAgcmVzZXQgPSAxCiAgICAgZWxzZToKICAgICAgICAgcmVzZXQgPSAwCiAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oc2l0ZWRpciwgbmFtZSkKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZ1bGxuYW1lLCAiciIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybgogICAgIHdpdGggZjoKICAgICAgICAgZm9yIG4sIGxpbmUgaW4gZW51bWVyYXRlKGYpOgpAQCAtMTk2LDcgKzE5OSw3IEBACiAgICAgICAgIGtub3duX3BhdGhzLmFkZChzaXRlZGlyY2FzZSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzaXRlZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBuYW1lcyBpZiBuYW1lLmVuZHN3aXRoKCIucHRoIildCiAgICAgZm9yIG5hbWUgaW4gc29ydGVkKG5hbWVzKToKQEAgLTMwMCw5ICszMDMsNyBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgc2Vlbi5hZGQocHJlZml4KQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgIGVsaWYgb3Muc2VwID09ICcvJzoKKyAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5dGhvbiIgKyBzeXMudmVyc2lvbls6M10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKSkKQEAgLTMyNSwyNyArMzI2LDE1IEBACiAgICAgIiIiQWRkIHNpdGUtcGFja2FnZXMgKGFuZCBwb3NzaWJseSBzaXRlLXB5dGhvbikgdG8gc3lzLnBhdGgiIiIKICAgICBmb3Igc2l0ZWRpciBpbiBnZXRzaXRlcGFja2FnZXMocHJlZml4ZXMpOgogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNpdGVkaXIpOgorICAgICAgICAgICAgaWYgInNpdGUtcHl0aG9uIiBpbiBzaXRlZGlyOgorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJyJzaXRlLXB5dGhvbiIgZGlyZWN0b3JpZXMgd2lsbCBub3QgYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cHBvcnRlZCBpbiAzLjUgYW55bW9yZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKLWRlZiBzZXRCRUdJTkxJQlBBVEgoKToKLSAgICAiIiJUaGUgT1MvMiBFTVggcG9ydCBoYXMgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBkbyBkb3VibGUgZHV0eQotICAgIGFzIERMTHMgKGFuZCBtdXN0IHVzZSB0aGUgLkRMTCBmaWxlIGV4dGVuc2lvbikgZm9yIG90aGVyIGV4dGVuc2lvbnMuCi0gICAgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggbmVlZHMgdG8gYmUgYW1lbmRlZCBzbyB0aGVzZSB3aWxsIGJlIGZvdW5kCi0gICAgZHVyaW5nIG1vZHVsZSBpbXBvcnQuICBVc2UgQkVHSU5MSUJQQVRIIHNvIHRoYXQgdGhlc2UgYXJlIGF0IHRoZSBzdGFydAotICAgIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLgotCi0gICAgIiIiCi0gICAgZGxscGF0aCA9IG9zLnBhdGguam9pbihzeXMucHJlZml4LCAiTGliIiwgImxpYi1keW5sb2FkIikKLSAgICBsaWJwYXRoID0gb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10uc3BsaXQoJzsnKQotICAgIGlmIGxpYnBhdGhbLTFdOgotICAgICAgICBsaWJwYXRoLmFwcGVuZChkbGxwYXRoKQotICAgIGVsc2U6Ci0gICAgICAgIGxpYnBhdGhbLTFdID0gZGxscGF0aAotICAgIG9zLmVudmlyb25bJ0JFR0lOTElCUEFUSCddID0gJzsnLmpvaW4obGlicGF0aCkKLQotCiBkZWYgc2V0cXVpdCgpOgogICAgICIiIkRlZmluZSBuZXcgYnVpbHRpbnMgJ3F1aXQnIGFuZCAnZXhpdCcuCiAKQEAgLTM2MCwxMjYgKzM0OSw4OSBAQAogICAgIGVsc2U6CiAgICAgICAgIGVvZiA9ICdDdHJsLUQgKGkuZS4gRU9GKScKIAotICAgIGNsYXNzIFF1aXR0ZXIob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgZW9mKQotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgY29kZT1Ob25lKToKLSAgICAgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCi0gICAgICAgICAgICAjIHN0ZGluIHdyYXBwZXIgaXMgY2xvc2VkLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQotICAgIGJ1aWx0aW5zLnF1aXQgPSBRdWl0dGVyKCdxdWl0JykKLSAgICBidWlsdGlucy5leGl0ID0gUXVpdHRlcignZXhpdCcpCisgICAgYnVpbHRpbnMucXVpdCA9IF9zaXRlYnVpbHRpbnMuUXVpdHRlcigncXVpdCcsIGVvZikKKyAgICBidWlsdGlucy5leGl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdleGl0JywgZW9mKQogCiAKLWNsYXNzIF9QcmludGVyKG9iamVjdCk6Ci0gICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgotICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCi0KLSAgICBNQVhMSU5FUyA9IDIzCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgotICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RhdGEgPSBkYXRhCi0gICAgICAgIHNlbGYuX19maWxlcyA9IGZpbGVzCi0gICAgICAgIHNlbGYuX19kaXJzID0gZGlycwotICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCi0KLSAgICBkZWYgX19zZXR1cChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX2xpbmVzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGRhdGEgPSBOb25lCi0gICAgICAgIGZvciBkaXIgaW4gc2VsZi5fX2RpcnM6Ci0gICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVzOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICJyIikKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fX2RhdGEKLSAgICAgICAgc2VsZi5fX2xpbmVzID0gZGF0YS5zcGxpdCgnXG4nKQotICAgICAgICBzZWxmLl9fbGluZWNudCA9IGxlbihzZWxmLl9fbGluZXMpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIGlmIGxlbihzZWxmLl9fbGluZXMpIDw9IHNlbGYuTUFYTElORVM6Ci0gICAgICAgICAgICByZXR1cm4gIlxuIi5qb2luKHNlbGYuX19saW5lcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiVHlwZSAlcygpIHRvIHNlZSB0aGUgZnVsbCAlcyB0ZXh0IiAlICgoc2VsZi5fX25hbWUsKSoyKQotCi0gICAgZGVmIF9fY2FsbF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9fc2V0dXAoKQotICAgICAgICBwcm9tcHQgPSAnSGl0IFJldHVybiBmb3IgbW9yZSwgb3IgcSAoYW5kIFJldHVybikgdG8gcXVpdDogJwotICAgICAgICBsaW5lbm8gPSAwCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGluZW5vLCBsaW5lbm8gKyBzZWxmLk1BWExJTkVTKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoc2VsZi5fX2xpbmVzW2ldKQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGluZW5vICs9IHNlbGYuTUFYTElORVMKLSAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgd2hpbGUga2V5IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGtleSA9IGlucHV0KHByb21wdCkKLSAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiAoJycsICdxJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYga2V5ID09ICdxJzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLQogZGVmIHNldGNvcHlyaWdodCgpOgogICAgICIiIlNldCAnY29weXJpZ2h0JyBhbmQgJ2NyZWRpdHMnIGluIGJ1aWx0aW5zIiIiCi0gICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX1ByaW50ZXIoImNvcHlyaWdodCIsIHN5cy5jb3B5cmlnaHQpCisgICAgYnVpbHRpbnMuY29weXJpZ2h0ID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKICAgICBpZiBzeXMucGxhdGZvcm1bOjRdID09ICdqYXZhJzoKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigKICAgICAgICAgICAgICJjcmVkaXRzIiwKICAgICAgICAgICAgICJKeXRob24gaXMgbWFpbnRhaW5lZCBieSB0aGUgSnl0aG9uIGRldmVsb3BlcnMgKHd3dy5qeXRob24ub3JnKS4iKQogICAgIGVsc2U6Ci0gICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKKyAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoImNyZWRpdHMiLCAiIiJcCiAgICAgVGhhbmtzIHRvIENXSSwgQ05SSSwgQmVPcGVuLmNvbSwgWm9wZSBDb3Jwb3JhdGlvbiBhbmQgYSBjYXN0IG9mIHRob3VzYW5kcwogICAgIGZvciBzdXBwb3J0aW5nIFB5dGhvbiBkZXZlbG9wbWVudC4gIFNlZSB3d3cucHl0aG9uLm9yZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIiIpCiAgICAgaGVyZSA9IG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykKLSAgICBidWlsdGlucy5saWNlbnNlID0gX1ByaW50ZXIoCisgICAgYnVpbHRpbnMubGljZW5zZSA9IF9zaXRlYnVpbHRpbnMuX1ByaW50ZXIoCiAgICAgICAgICJsaWNlbnNlIiwKLSAgICAgICAgIlNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvJS41cy9saWNlbnNlLyIgJSBzeXMudmVyc2lvbiwKKyAgICAgICAgIlNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvJS41cy9saWNlbnNlIiAlIHN5cy52ZXJzaW9uLAogICAgICAgICBbIkxJQ0VOU0UudHh0IiwgIkxJQ0VOU0UiXSwKICAgICAgICAgW29zLnBhdGguam9pbihoZXJlLCBvcy5wYXJkaXIpLCBoZXJlLCBvcy5jdXJkaXJdKQogCiAKLWNsYXNzIF9IZWxwZXIob2JqZWN0KToKLSAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgotICAgIFRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBweWRvYy5oZWxwICh3aXRoIGEgdHdpc3QpLgotCi0gICAgIiIiCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiVHlwZSBoZWxwKCkgZm9yIGludGVyYWN0aXZlIGhlbHAsICIgXAotICAgICAgICAgICAgICAgIm9yIGhlbHAob2JqZWN0KSBmb3IgaGVscCBhYm91dCBvYmplY3QuIgotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgaW1wb3J0IHB5ZG9jCi0gICAgICAgIHJldHVybiBweWRvYy5oZWxwKCphcmdzLCAqKmt3ZHMpCi0KIGRlZiBzZXRoZWxwZXIoKToKLSAgICBidWlsdGlucy5oZWxwID0gX0hlbHBlcigpCisgICAgYnVpbHRpbnMuaGVscCA9IF9zaXRlYnVpbHRpbnMuX0hlbHBlcigpCisKK2RlZiBlbmFibGVybGNvbXBsZXRlcigpOgorICAgICIiIkVuYWJsZSBkZWZhdWx0IHJlYWRsaW5lIGNvbmZpZ3VyYXRpb24gb24gaW50ZXJhY3RpdmUgcHJvbXB0cywgYnkKKyAgICByZWdpc3RlcmluZyBhIHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCisgICAgSWYgdGhlIHJlYWRsaW5lIG1vZHVsZSBjYW4gYmUgaW1wb3J0ZWQsIHRoZSBob29rIHdpbGwgc2V0IHRoZSBUYWIga2V5CisgICAgYXMgY29tcGxldGlvbiBrZXkgYW5kIHJlZ2lzdGVyIH4vLnB5dGhvbl9oaXN0b3J5IGFzIGhpc3RvcnkgZmlsZS4KKyAgICBUaGlzIGNhbiBiZSBvdmVycmlkZW4gaW4gdGhlIHNpdGVjdXN0b21pemUgb3IgdXNlcmN1c3RvbWl6ZSBtb2R1bGUsCisgICAgb3IgaW4gYSBQWVRIT05TVEFSVFVQIGZpbGUuCisgICAgIiIiCisgICAgZGVmIHJlZ2lzdGVyX3JlYWRsaW5lKCk6CisgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHJlYWRsaW5lCisgICAgICAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBSZWFkaW5nIHRoZSBpbml0aWFsaXphdGlvbiAoY29uZmlnKSBmaWxlIG1heSBub3QgYmUgZW5vdWdoIHRvIHNldCBhCisgICAgICAgICMgY29tcGxldGlvbiBrZXksIHNvIHdlIHNldCBvbmUgZmlyc3QgYW5kIHRoZW4gcmVhZCB0aGUgZmlsZS4KKyAgICAgICAgcmVhZGxpbmVfZG9jID0gZ2V0YXR0cihyZWFkbGluZSwgJ19fZG9jX18nLCAnJykKKyAgICAgICAgaWYgcmVhZGxpbmVfZG9jIGlzIG5vdCBOb25lIGFuZCAnbGliZWRpdCcgaW4gcmVhZGxpbmVfZG9jOgorICAgICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ2JpbmQgXkkgcmxfY29tcGxldGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVhZGxpbmUucGFyc2VfYW5kX2JpbmQoJ3RhYjogY29tcGxldGUnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaW5pdF9maWxlKCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAjIEFuIE9TRXJyb3IgaGVyZSBjb3VsZCBoYXZlIG1hbnkgY2F1c2VzLCBidXQgdGhlIG1vc3QgbGlrZWx5IG9uZQorICAgICAgICAgICAgIyBpcyB0aGF0IHRoZXJlJ3Mgbm8gLmlucHV0cmMgZmlsZSAob3IgLmVkaXRyYyBmaWxlIGluIHRoZSBjYXNlIG9mCisgICAgICAgICAgICAjIE1hYyBPUyBYICsgbGliZWRpdCkgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLiAgSW4gdGhhdCBjYXNlLCB3ZQorICAgICAgICAgICAgIyB3YW50IHRvIGlnbm9yZSB0aGUgZXhjZXB0aW9uLgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGlmIHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMSkgaXMgTm9uZToKKyAgICAgICAgICAgICMgSWYgbm8gaGlzdG9yeSB3YXMgbG9hZGVkLCBkZWZhdWx0IHRvIC5weXRob25faGlzdG9yeS4KKyAgICAgICAgICAgICMgVGhlIGd1YXJkIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBkb3VibGluZyBoaXN0b3J5IHNpemUgYXQKKyAgICAgICAgICAgICMgZWFjaCBpbnRlcnByZXRlciBleGl0IHdoZW4gcmVhZGxpbmUgd2FzIGFscmVhZHkgY29uZmlndXJlZAorICAgICAgICAgICAgIyB0aHJvdWdoIGEgUFlUSE9OU1RBUlRVUCBob29rLCBzZWU6CisgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1ODQ1I21zZzE5ODYzNgorICAgICAgICAgICAgaGlzdG9yeSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoJ34nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5weXRob25faGlzdG9yeScpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdG9yeSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihyZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUsIGhpc3RvcnkpCisKKyAgICBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXyA9IHJlZ2lzdGVyX3JlYWRsaW5lCiAKIGRlZiBhbGlhc21iY3MoKToKICAgICAiIiJPbiBXaW5kb3dzLCBzb21lIGRlZmF1bHQgZW5jb2RpbmdzIGFyZSBub3QgcHJvdmlkZWQgYnkgUHl0aG9uLAogICAgIHdoaWxlIHRoZXkgYXJlIGFsd2F5cyBhdmFpbGFibGUgYXMgIm1iY3MiIGluIGVhY2ggbG9jYWxlLiBNYWtlCiAgICAgdGhlbSB1c2FibGUgYnkgYWxpYXNpbmcgdG8gIm1iY3MiIGluIHN1Y2ggYSBjYXNlLiIiIgogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICBpbXBvcnQgbG9jYWxlLCBjb2RlY3MKLSAgICAgICAgZW5jID0gbG9jYWxlLmdldGRlZmF1bHRsb2NhbGUoKVsxXQorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUsIGNvZGVjcworICAgICAgICBlbmMgPSBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKICAgICAgICAgaWYgZW5jLnN0YXJ0c3dpdGgoJ2NwJyk6ICAgICAgICAgICAgIyAiY3AqKioiID8KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjb2RlY3MubG9va3VwKGVuYykKQEAgLTQ4OCw4ICs0NDAsNyBAQAogICAgICAgICAgICAgICAgIGVuY29kaW5ncy5fY2FjaGVbZW5jXSA9IGVuY29kaW5ncy5fdW5rbm93bgogICAgICAgICAgICAgICAgIGVuY29kaW5ncy5hbGlhc2VzLmFsaWFzZXNbZW5jXSA9ICdtYmNzJwogCi0KLUNPTkZJR19MSU5FID0gcmUuY29tcGlsZShyJ14oP1A8a2V5Pihcd3xbLV9dKSspXHMqPVxzKig/UDx2YWx1ZT4uKilccyokJykKK0NPTkZJR19MSU5FID0gcideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcKIAogZGVmIHZlbnYoa25vd25fcGF0aHMpOgogICAgIGdsb2JhbCBQUkVGSVhFUywgRU5BQkxFX1VTRVJfU0lURQpAQCAtNTEyLDEyICs0NjMsMTQgQEAKICAgICAgICAgXQogCiAgICAgaWYgY2FuZGlkYXRlX2NvbmZzOgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgY29uZmlnX2xpbmUgPSByZS5jb21waWxlKENPTkZJR19MSU5FKQogICAgICAgICB2aXJ0dWFsX2NvbmYgPSBjYW5kaWRhdGVfY29uZnNbMF0KICAgICAgICAgc3lzdGVtX3NpdGUgPSAidHJ1ZSIKICAgICAgICAgd2l0aCBvcGVuKHZpcnR1YWxfY29uZikgYXMgZjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIG0gPSBDT05GSUdfTElORS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIG0gPSBjb25maWdfbGluZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgIGlmIG06CiAgICAgICAgICAgICAgICAgICAgIGQgPSBtLmdyb3VwZGljdCgpCiAgICAgICAgICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBkWydrZXknXS5sb3dlcigpLCBkWyd2YWx1ZSddCkBAIC01ODksMTEgKzU0MiwxMCBAQAogICAgICAgICBFTkFCTEVfVVNFUl9TSVRFID0gY2hlY2tfZW5hYmxldXNlcnNpdGUoKQogICAgIGtub3duX3BhdGhzID0gYWRkdXNlcnNpdGVwYWNrYWdlcyhrbm93bl9wYXRocykKICAgICBrbm93bl9wYXRocyA9IGFkZHNpdGVwYWNrYWdlcyhrbm93bl9wYXRocykKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ29zMmVteCc6Ci0gICAgICAgIHNldEJFR0lOTElCUEFUSCgpCiAgICAgc2V0cXVpdCgpCiAgICAgc2V0Y29weXJpZ2h0KCkKICAgICBzZXRoZWxwZXIoKQorICAgIGVuYWJsZXJsY29tcGxldGVyKCkKICAgICBhbGlhc21iY3MoKQogICAgIGV4ZWNzaXRlY3VzdG9taXplKCkKICAgICBpZiBFTkFCTEVfVVNFUl9TSVRFOgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBkLnB5IGIvTGliL3NtdHBkLnB5CmluZGV4IDc3OGQ2ZDYuLjFmYTE1N2EgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwZC5weQorKysgYi9MaWIvc210cGQucHkKQEAgLTEyMSw4ICsxMjEsOSBAQAogICAgICAgICB9KQogICAgIG1heF9jb21tYW5kX3NpemVfbGltaXQgPSBtYXgoY29tbWFuZF9zaXplX2xpbWl0cy52YWx1ZXMoKSkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCk6Ci0gICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgIG1hcD1Ob25lKToKKyAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBtYXA9bWFwKQogICAgICAgICBzZWxmLnNtdHBfc2VydmVyID0gc2VydmVyCiAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgpAQCAtMTM3LDcgKzEzOCw3IEBACiAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwogICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQpAQCAtNTc2LDExICs1NzcsMTEgQEAKICAgICBjaGFubmVsX2NsYXNzID0gU01UUENoYW5uZWwKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIsCi0gICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCk6CisgICAgICAgICAgICAgICAgIGRhdGFfc2l6ZV9saW1pdD1EQVRBX1NJWkVfREVGQVVMVCwgbWFwPU5vbmUpOgogICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBsb2NhbGFkZHIKICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IHJlbW90ZWFkZHIKICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBkYXRhX3NpemVfbGltaXQKLSAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1tYXApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKQEAgLTU5Nyw3ICs1OTgsOCBAQAogCiAgICAgZGVmIGhhbmRsZV9hY2NlcHRlZChzZWxmLCBjb25uLCBhZGRyKToKICAgICAgICAgcHJpbnQoJ0luY29taW5nIGNvbm5lY3Rpb24gZnJvbSAlcycgJSByZXByKGFkZHIpLCBmaWxlPURFQlVHU1RSRUFNKQotICAgICAgICBjaGFubmVsID0gc2VsZi5jaGFubmVsX2NsYXNzKHNlbGYsIGNvbm4sIGFkZHIsIHNlbGYuZGF0YV9zaXplX2xpbWl0KQorICAgICAgICBjaGFubmVsID0gc2VsZi5jaGFubmVsX2NsYXNzKHNlbGYsIGNvbm4sIGFkZHIsIHNlbGYuZGF0YV9zaXplX2xpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21hcCkKIAogICAgICMgQVBJIGZvciAiZG9pbmcgc29tZXRoaW5nIHVzZWZ1bCB3aXRoIHRoZSBtZXNzYWdlIgogICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgpAQCAtNjY4LDcgKzY3MCw3IEBACiAgICAgICAgIGV4Y2VwdCBzbXRwbGliLlNNVFBSZWNpcGllbnRzUmVmdXNlZCBhcyBlOgogICAgICAgICAgICAgcHJpbnQoJ2dvdCBTTVRQUmVjaXBpZW50c1JlZnVzZWQnLCBmaWxlPURFQlVHU1RSRUFNKQogICAgICAgICAgICAgcmVmdXNlZCA9IGUucmVjaXBpZW50cwotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QnLCBlLl9fY2xhc3NfXywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgICMgQWxsIHJlY2lwaWVudHMgd2VyZSByZWZ1c2VkLiAgSWYgdGhlIGV4Y2VwdGlvbiBoYWQgYW4gYXNzb2NpYXRlZAogICAgICAgICAgICAgIyBlcnJvciBjb2RlLCB1c2UgaXQuICBPdGhlcndpc2UsZmFrZSBpdCB3aXRoIGEgbm9uLXRyaWdnZXJpbmcKQEAgLTc3OCw3ICs3ODAsNyBAQAogICAgICAgICBpZiBvcHQgaW4gKCctaCcsICctLWhlbHAnKToKICAgICAgICAgICAgIHVzYWdlKDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLVYnLCAnLS12ZXJzaW9uJyk6Ci0gICAgICAgICAgICBwcmludChfX3ZlcnNpb25fXywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18pCiAgICAgICAgICAgICBzeXMuZXhpdCgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1uJywgJy0tbm9zZXR1aWQnKToKICAgICAgICAgICAgIG9wdGlvbnMuc2V0dWlkID0gMApAQCAtODUwLDggKzg1Miw3IEBACiAgICAgICAgIG5vYm9keSA9IHB3ZC5nZXRwd25hbSgnbm9ib2R5JylbMl0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBFUk06IHJhaXNlCisgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CiAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHNldHVpZCAibm9ib2R5IjsgdHJ5IHJ1bm5pbmcgd2l0aCAtbiBvcHRpb24uJywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IDA3MmI5NzMuLjc5NmI4NjYgMTAwNjQ0Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC02Niw3ICs2Niw3IEBACiBPTERTVFlMRV9BVVRIID0gcmUuY29tcGlsZShyImF1dGg9KC4qKSIsIHJlLkkpCiAKICMgRXhjZXB0aW9uIGNsYXNzZXMgdXNlZCBieSB0aGlzIG1vZHVsZS4KLWNsYXNzIFNNVFBFeGNlcHRpb24oRXhjZXB0aW9uKToKK2NsYXNzIFNNVFBFeGNlcHRpb24oT1NFcnJvcik6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgYWxsIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoaXMgbW9kdWxlLiIiIgogCiBjbGFzcyBTTVRQU2VydmVyRGlzY29ubmVjdGVkKFNNVFBFeGNlcHRpb24pOgpAQCAtMjMyLDYgKzIzMiw3IEBACiAgICAgICAgIHdpbGwgYmUgdXNlZC4KIAogICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi50aW1lb3V0ID0gdGltZW91dAogICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzID0ge30KICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcyA9IHNvdXJjZV9hZGRyZXNzCkBAIC0zMTEsNyArMzEyLDcgQEAKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKCJub25udW1lcmljIHBvcnQiKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJub25udW1lcmljIHBvcnQiKQogICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgIHBvcnQgPSBzZWxmLmRlZmF1bHRfcG9ydAogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgpAQCAtMzMyLDcgKzMzMyw3IEBACiAgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCJhc2NpaSIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwocykKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByYWlzZSBTTVRQU2VydmVyRGlzY29ubmVjdGVkKCdTZXJ2ZXIgbm90IGNvbm5lY3RlZCcpCiAgICAgICAgIGVsc2U6CkBAIC0zNjUsNyArMzY2LDcgQEAKICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5maWxlLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgiQ29ubmVjdGlvbiB1bmV4cGVjdGVkbHkgY2xvc2VkOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHN0cihlKSkKQEAgLTU3OSw3ICs1ODAsNyBAQAogICAgICAgICBkZWYgZW5jb2RlX2NyYW1fbWQ1KGNoYWxsZW5nZSwgdXNlciwgcGFzc3dvcmQpOgogICAgICAgICAgICAgY2hhbGxlbmdlID0gYmFzZTY0LmRlY29kZWJ5dGVzKGNoYWxsZW5nZSkKICAgICAgICAgICAgIHJlc3BvbnNlID0gdXNlciArICIgIiArIGhtYWMuSE1BQyhwYXNzd29yZC5lbmNvZGUoJ2FzY2lpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlKS5oZXhkaWdlc3QoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZSwgJ21kNScpLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlX2Jhc2U2NChyZXNwb25zZS5lbmNvZGUoJ2FzY2lpJyksIGVvbD0nJykKIAogICAgICAgICBkZWYgZW5jb2RlX3BsYWluKHVzZXIsIHBhc3N3b3JkKToKQEAgLTY2NCwxMCArNjY1LDEyIEBACiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIG5vdCBOb25lIGFuZCBjZXJ0ZmlsZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb250ZXh0IGFuZCBjZXJ0ZmlsZSBhcmd1bWVudHMgYXJlIG11dHVhbGx5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQotICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBjb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywga2V5ZmlsZSwgY2VydGZpbGUpCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLl9ob3N0IGlmIHNzbC5IQVNfU05JIGVsc2UgTm9uZQorICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICAjIFJGQyAzMjA3OgogICAgICAgICAgICAgIyBUaGUgY2xpZW50IE1VU1QgZGlzY2FyZCBhbnkga25vd2xlZGdlIG9idGFpbmVkIGZyb20KQEAgLTg4MCw2ICs4ODMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFNNVFAuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgbG9jYWxfaG9zdG5hbWUsIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzKQpAQCAtODg5LDEwICs4OTUsOSBAQAogICAgICAgICAgICAgICAgIHByaW50KCdjb25uZWN0OicsIChob3N0LCBwb3J0KSwgZmlsZT1zdGRlcnIpCiAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VfYWRkcmVzcykKLSAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KG5ld19zb2NrZXQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQobmV3X3NvY2tldCwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5faG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKKyAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQobmV3X3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgIHJldHVybiBuZXdfc29ja2V0CiAKICAgICBfX2FsbF9fLmFwcGVuZCgiU01UUF9TU0wiKQpAQCAtOTM0LDcgKzkzOSw3IEBACiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChob3N0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3QgZmFpbDonLCBob3N0LCBmaWxlPXN0ZGVycikKICAgICAgICAgICAgIGlmIHNlbGYuc29jazoKZGlmZiAtLWdpdCBhL0xpYi9zbmRoZHIucHkgYi9MaWIvc25kaGRyLnB5CmluZGV4IDlmNWRjYzkuLjI0MGU1MDcgMTAwNjQ0Ci0tLSBhL0xpYi9zbmRoZHIucHkKKysrIGIvTGliL3NuZGhkci5weQpAQCAtMTEsNyArMTEsNyBAQAogLSBudW1iZXIgb2YgYml0cy9zYW1wbGUsIG9yICdVJyBmb3IgVS1MQVcsIG9yICdBJyBmb3IgQS1MQVcKIAogSWYgdGhlIGZpbGUgZG9lc24ndCBoYXZlIGEgcmVjb2duaXphYmxlIHR5cGUsIGl0IHJldHVybnMgTm9uZS4KLUlmIHRoZSBmaWxlIGNhbid0IGJlIG9wZW5lZCwgSU9FcnJvciBpcyByYWlzZWQuCitJZiB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIE9TRXJyb3IgaXMgcmFpc2VkLgogCiBUbyBjb21wdXRlIHRoZSB0b3RhbCB0aW1lLCBkaXZpZGUgdGhlIG51bWJlciBvZiBmcmFtZXMgYnkgdGhlCiBzYW1wbGluZyByYXRlIChhIGZyYW1lIGNvbnRhaW5zIGEgc2FtcGxlIGZvciBlYWNoIGNoYW5uZWwpLgpAQCAtMTM3LDE0ICsxMzcsMTcgQEAKIAogCiBkZWYgdGVzdF93YXYoaCwgZik6CisgICAgaW1wb3J0IHdhdmUKICAgICAjICdSSUZGJyA8bGVuPiAnV0FWRScgJ2ZtdCAnIDxsZW4+CiAgICAgaWYgbm90IGguc3RhcnRzd2l0aChiJ1JJRkYnKSBvciBoWzg6MTJdICE9IGInV0FWRScgb3IgaFsxMjoxNl0gIT0gYidmbXQgJzoKICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBzdHlsZSA9IGdldF9zaG9ydF9sZShoWzIwOjIyXSkKLSAgICBuY2hhbm5lbHMgPSBnZXRfc2hvcnRfbGUoaFsyMjoyNF0pCi0gICAgcmF0ZSA9IGdldF9sb25nX2xlKGhbMjQ6MjhdKQotICAgIHNhbXBsZV9iaXRzID0gZ2V0X3Nob3J0X2xlKGhbMzQ6MzZdKQotICAgIHJldHVybiAnd2F2JywgcmF0ZSwgbmNoYW5uZWxzLCAtMSwgc2FtcGxlX2JpdHMKKyAgICBmLnNlZWsoMCkKKyAgICB0cnk6CisgICAgICAgIHcgPSB3YXZlLm9wZW5mcChmLCAncicpCisgICAgZXhjZXB0IChFT0ZFcnJvciwgd2F2ZS5FcnJvcik6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuICgnd2F2Jywgdy5nZXRmcmFtZXJhdGUoKSwgdy5nZXRuY2hhbm5lbHMoKSwKKyAgICAgICAgICAgICAgICAgICB3LmdldG5mcmFtZXMoKSwgOCp3LmdldHNhbXB3aWR0aCgpKQogCiB0ZXN0cy5hcHBlbmQodGVzdF93YXYpCiAKQEAgLTIzMCw3ICsyMzMsNyBAQAogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHJpbnQod2hhdChmaWxlbmFtZSkpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHByaW50KCcqKiogbm90IGZvdW5kICoqKicpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0LnB5IGIvTGliL3NvY2tldC5weQppbmRleCBkNGYxYjY1Li42ZDY3YjNkIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0LnB5CisrKyBiL0xpYi9zb2NrZXQucHkKQEAgLTQ4LDYgKzQ4LDcgQEAKIGZyb20gX3NvY2tldCBpbXBvcnQgKgogCiBpbXBvcnQgb3MsIHN5cywgaW8KK2Zyb20gZW51bSBpbXBvcnQgSW50RW51bQogCiB0cnk6CiAgICAgaW1wb3J0IGVycm5vCkBAIC02MCw2ICs2MSwzMCBAQAogX19hbGxfXyA9IFsiZ2V0ZnFkbiIsICJjcmVhdGVfY29ubmVjdGlvbiJdCiBfX2FsbF9fLmV4dGVuZChvcy5fZ2V0X2V4cG9ydHNfbGlzdChfc29ja2V0KSkKIAorIyBTZXQgdXAgdGhlIHNvY2tldC5BRl8qIHNvY2tldC5TT0NLXyogY29uc3RhbnRzIGFzIG1lbWJlcnMgb2YgSW50RW51bXMgZm9yCisjIG5pY2VyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisjIE5vdGUgdGhhdCBfc29ja2V0IG9ubHkga25vd3MgYWJvdXQgdGhlIGludGVnZXIgdmFsdWVzLiBUaGUgcHVibGljIGludGVyZmFjZQorIyBpbiB0aGlzIG1vZHVsZSB1bmRlcnN0YW5kcyB0aGUgZW51bXMgYW5kIHRyYW5zbGF0ZXMgdGhlbSBiYWNrIGZyb20gaW50ZWdlcnMKKyMgd2hlcmUgbmVlZGVkIChlLmcuIC5mYW1pbHkgcHJvcGVydHkgb2YgYSBzb2NrZXQgb2JqZWN0KS4KK0FkZHJlc3NGYW1pbHkgPSBJbnRFbnVtKCdBZGRyZXNzRmFtaWx5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdBRl8nKX0pCitnbG9iYWxzKCkudXBkYXRlKEFkZHJlc3NGYW1pbHkuX19tZW1iZXJzX18pCisKK1NvY2tldFR5cGUgPSBJbnRFbnVtKCdTb2NrZXRUeXBlJywKKyAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB2YWx1ZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLmlzdXBwZXIoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCdTT0NLXycpfSkKK2dsb2JhbHMoKS51cGRhdGUoU29ja2V0VHlwZS5fX21lbWJlcnNfXykKKworZGVmIF9pbnRlbnVtX2NvbnZlcnRlcih2YWx1ZSwgZW51bV9rbGFzcyk6CisgICAgIiIiQ29udmVydCBhIG51bWVyaWMgZmFtaWx5IHZhbHVlIHRvIGFuIEludEVudW0gbWVtYmVyLgorCisgICAgSWYgaXQncyBub3QgYSBrbm93biBtZW1iZXIsIHJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBpdHNlbGYuCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gZW51bV9rbGFzcyh2YWx1ZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIHZhbHVlCiAKIF9yZWFsc29ja2V0ID0gc29ja2V0CiAKQEAgLTkxLDYgKzExNiwxMCBAQAogICAgIF9fc2xvdHNfXyA9IFsiX193ZWFrcmVmX18iLCAiX2lvX3JlZnMiLCAiX2Nsb3NlZCJdCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmFtaWx5PUFGX0lORVQsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTAsIGZpbGVubz1Ob25lKToKKyAgICAgICAgIyBGb3IgdXNlciBjb2RlIGFkZHJlc3MgZmFtaWx5IGFuZCB0eXBlIHZhbHVlcyBhcmUgSW50RW51bSBtZW1iZXJzLCBidXQKKyAgICAgICAgIyBmb3IgdGhlIHVuZGVybHlpbmcgX3NvY2tldC5zb2NrZXQgdGhleSdyZSBqdXN0IGludGVnZXJzLiBUaGUKKyAgICAgICAgIyBjb25zdHJ1Y3RvciBvZiBfc29ja2V0LnNvY2tldCBjb252ZXJ0cyB0aGUgZ2l2ZW4gYXJndW1lbnQgdG8gYW4KKyAgICAgICAgIyBpbnRlZ2VyIGF1dG9tYXRpY2FsbHkuCiAgICAgICAgIF9zb2NrZXQuc29ja2V0Ll9faW5pdF9fKHNlbGYsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZpbGVubykKICAgICAgICAgc2VsZi5faW9fcmVmcyA9IDAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKQEAgLTEwMywxMyArMTMyLDMyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lLiIiIgotICAgICAgICBzID0gX3NvY2tldC5zb2NrZXQuX19yZXByX18oc2VsZikKLSAgICAgICAgaWYgcy5zdGFydHN3aXRoKCI8c29ja2V0IG9iamVjdCIpOgotICAgICAgICAgICAgcyA9ICI8JXMuJXMlcyVzIiAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLCAnX2Nsb3NlZCcsIEZhbHNlKSBhbmQgIiBbY2xvc2VkXSAiIG9yICIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzWzc6XSkKKyAgICAgICAgIiIiV3JhcCBfX3JlcHJfXygpIHRvIHJldmVhbCB0aGUgcmVhbCBjbGFzcyBuYW1lIGFuZCBzb2NrZXQKKyAgICAgICAgYWRkcmVzcyhlcykuCisgICAgICAgICIiIgorICAgICAgICBjbG9zZWQgPSBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpCisgICAgICAgIHMgPSAiPCVzLiVzJXMgZmQ9JWksIGZhbWlseT0lcywgdHlwZT0lcywgcHJvdG89JWkiIFwKKyAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICIgW2Nsb3NlZF0iIGlmIGNsb3NlZCBlbHNlICIiLAorICAgICAgICAgICAgICAgc2VsZi5maWxlbm8oKSwKKyAgICAgICAgICAgICAgIHNlbGYuZmFtaWx5LAorICAgICAgICAgICAgICAgc2VsZi50eXBlLAorICAgICAgICAgICAgICAgc2VsZi5wcm90bykKKyAgICAgICAgaWYgbm90IGNsb3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsYWRkciA9IHNlbGYuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIGlmIGxhZGRyOgorICAgICAgICAgICAgICAgICAgICBzICs9ICIsIGxhZGRyPSVzIiAlIHN0cihsYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFkZHIgPSBzZWxmLmdldHBlZXJuYW1lKCkKKyAgICAgICAgICAgICAgICBpZiByYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgcyArPSAiLCByYWRkcj0lcyIgJSBzdHIocmFkZHIpCisgICAgICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzICs9ICc+JwogICAgICAgICByZXR1cm4gcwogCiAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKQEAgLTExOCw3ICsxNjYsOCBAQAogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgICIiImR1cCgpIC0+IHNvY2tldCBvYmplY3QKIAotICAgICAgICBSZXR1cm4gYSBuZXcgc29ja2V0IG9iamVjdCBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgc3lzdGVtIHJlc291cmNlLgorICAgICAgICBEdXBsaWNhdGUgdGhlIHNvY2tldC4gUmV0dXJuIGEgbmV3IHNvY2tldCBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBzYW1lCisgICAgICAgIHN5c3RlbSByZXNvdXJjZS4gVGhlIG5ldyBzb2NrZXQgaXMgbm9uLWluaGVyaXRhYmxlLgogICAgICAgICAiIiIKICAgICAgICAgZmQgPSBkdXAoc2VsZi5maWxlbm8oKSkKICAgICAgICAgc29jayA9IHNlbGYuX19jbGFzc19fKHNlbGYuZmFtaWx5LCBzZWxmLnR5cGUsIHNlbGYucHJvdG8sIGZpbGVubz1mZCkKQEAgLTIxMCw2ICsyNTksMzEgQEAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICByZXR1cm4gc3VwZXIoKS5kZXRhY2goKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZhbWlseShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIHRoaXMgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9pbnRlbnVtX2NvbnZlcnRlcihzdXBlcigpLmZhbWlseSwgQWRkcmVzc0ZhbWlseSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICAiIiJSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBzb2NrZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS50eXBlLCBTb2NrZXRUeXBlKQorCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSkKKyAgICAgICAgZGVmIHNldF9pbmhlcml0YWJsZShzZWxmLCBpbmhlcml0YWJsZSk6CisgICAgICAgICAgICBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBnZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGdldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIkdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorICAgIHNldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorCiBkZWYgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApOgogICAgICIiIiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkgLT4gc29ja2V0IG9iamVjdAogCkBAIC0yOTEsNyArMzY1LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKICAgICAgICAgaWYgc2VsZi5fdGltZW91dF9vY2N1cnJlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnJlY3ZfaW50byhiKQpAQCAtNDM1LDMgKzUwOSwyNyBAQAogICAgICAgICByYWlzZSBlcnIKICAgICBlbHNlOgogICAgICAgICByYWlzZSBlcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKKworZGVmIGdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApOgorICAgICIiIlJlc29sdmUgaG9zdCBhbmQgcG9ydCBpbnRvIGxpc3Qgb2YgYWRkcmVzcyBpbmZvIGVudHJpZXMuCisKKyAgICBUcmFuc2xhdGUgdGhlIGhvc3QvcG9ydCBhcmd1bWVudCBpbnRvIGEgc2VxdWVuY2Ugb2YgNS10dXBsZXMgdGhhdCBjb250YWluCisgICAgYWxsIHRoZSBuZWNlc3NhcnkgYXJndW1lbnRzIGZvciBjcmVhdGluZyBhIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhhdCBzZXJ2aWNlLgorICAgIGhvc3QgaXMgYSBkb21haW4gbmFtZSwgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSVB2NC92NiBhZGRyZXNzIG9yCisgICAgTm9uZS4gcG9ydCBpcyBhIHN0cmluZyBzZXJ2aWNlIG5hbWUgc3VjaCBhcyAnaHR0cCcsIGEgbnVtZXJpYyBwb3J0IG51bWJlciBvcgorICAgIE5vbmUuIEJ5IHBhc3NpbmcgTm9uZSBhcyB0aGUgdmFsdWUgb2YgaG9zdCBhbmQgcG9ydCwgeW91IGNhbiBwYXNzIE5VTEwgdG8KKyAgICB0aGUgdW5kZXJseWluZyBDIEFQSS4KKworICAgIFRoZSBmYW1pbHksIHR5cGUgYW5kIHByb3RvIGFyZ3VtZW50cyBjYW4gYmUgb3B0aW9uYWxseSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8KKyAgICBuYXJyb3cgdGhlIGxpc3Qgb2YgYWRkcmVzc2VzIHJldHVybmVkLiBQYXNzaW5nIHplcm8gYXMgYSB2YWx1ZSBmb3IgZWFjaCBvZgorICAgIHRoZXNlIGFyZ3VtZW50cyBzZWxlY3RzIHRoZSBmdWxsIHJhbmdlIG9mIHJlc3VsdHMuCisgICAgIiIiCisgICAgIyBXZSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHNpbmNlIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1lcmljIGZhbWlseQorICAgICMgYW5kIHNvY2tldCB0eXBlIHZhbHVlcyB0byBlbnVtIGNvbnN0YW50cy4KKyAgICBhZGRybGlzdCA9IFtdCisgICAgZm9yIHJlcyBpbiBfc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8sIGZsYWdzKToKKyAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICBhZGRybGlzdC5hcHBlbmQoKF9pbnRlbnVtX2NvbnZlcnRlcihhZiwgQWRkcmVzc0ZhbWlseSksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2ludGVudW1fY29udmVydGVyKHNvY2t0eXBlLCBTb2NrZXRUeXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bywgY2Fub25uYW1lLCBzYSkpCisgICAgcmV0dXJuIGFkZHJsaXN0CmRpZmYgLS1naXQgYS9MaWIvc29ja2V0c2VydmVyLnB5IGIvTGliL3NvY2tldHNlcnZlci5weQppbmRleCA4MzMyZmRmLi5lOWU0ZTRlIDEwMDY0NAotLS0gYS9MaWIvc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKQEAgLTI5OSw3ICsyOTksNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MgPSBzZWxmLmdldF9yZXF1ZXN0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi52ZXJpZnlfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CiAgICAgICAgICAgICB0cnk6CkBAIC00NzksNyArNDc5LDcgQEAKICAgICAgICAgICAgICNleHBsaWNpdGx5IHNodXRkb3duLiAgc29ja2V0LmNsb3NlKCkgbWVyZWx5IHJlbGVhc2VzCiAgICAgICAgICAgICAjdGhlIHNvY2tldCBhbmQgd2FpdHMgZm9yIEdDIHRvIHBlcmZvcm0gdGhlIGFjdHVhbCBjbG9zZS4KICAgICAgICAgICAgIHJlcXVlc3Quc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcyAjc29tZSBwbGF0Zm9ybXMgbWF5IHJhaXNlIEVOT1RDT05OIGhlcmUKICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAKQEAgLTUzMiw3ICs1MzIsNyBAQAogICAgICAgICAgICAgIyBjaGlsZHJlbi4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoMCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBpZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHBpZCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW46IGNvbnRpbnVlCiAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5yZW1vdmUocGlkKQpAQCAtNTQ1LDcgKzU0NSw3IEBACiAgICAgICAgIGZvciBjaGlsZCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQoY2hpbGQsIG9zLldOT0hBTkcpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwaWQgPSBOb25lCiAgICAgICAgICAgICBpZiBub3QgcGlkOiBjb250aW51ZQogICAgICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKaW5kZXggYjdlYzFhZC4uMDQ2NDlmYyAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CkBAIC0yOCw2ICsyOCw5IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmsKKworCiBjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrQVBJTGV2ZWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FsaXRlLmFwaWxldmVsLCAiMi4wIiwKQEAgLTE2Myw2ICsxNjYsMjEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN4LmluX3RyYW5zYWN0aW9uID0gVHJ1ZQogCisgICAgZGVmIENoZWNrT3BlblVyaShzZWxmKToKKyAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgNywgNyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc3FsaXRlLmNvbm5lY3QoJzptZW1vcnk6JywgdXJpPVRydWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KFRFU1RGTikgYXMgY3g6CisgICAgICAgICAgICBjeC5leGVjdXRlKCdjcmVhdGUgdGFibGUgdGVzdChpZCBpbnRlZ2VyKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiwgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDApJykKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdCgnZmlsZTonICsgVEVTVEZOICsgJz9tb2RlPXJvJywgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CisgICAgICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDEpJykKKworCiBjbGFzcyBDdXJzb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmN4ID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29tcGlsZS5weSBiL0xpYi9zcmVfY29tcGlsZS5weQppbmRleCBiOTg0YTU0Li4zYTUwODNmIDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbXBpbGUucHkKKysrIGIvTGliL3NyZV9jb21waWxlLnB5CkBAIC0xMyw2ICsxMyw3IEBACiBpbXBvcnQgX3NyZSwgc3lzCiBpbXBvcnQgc3JlX3BhcnNlCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIGFzc2VydCBfc3JlLk1BR0lDID09IE1BR0lDLCAiU1JFIG1vZHVsZSBtaXNtYXRjaCIKIApAQCAtNjQsMTMgKzY1LDYgQEAKICAgICAgICAgZWxpZiBvcCBpbiBSRVBFQVRJTkdfQ09ERVM6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX1RFTVBMQVRFOgogICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJpbnRlcm5hbDogdW5zdXBwb3J0ZWQgdGVtcGxhdGUgb3BlcmF0b3IiKQotICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRdKQotICAgICAgICAgICAgICAgIHNraXAgPSBfbGVuKGNvZGUpOyBlbWl0KDApCi0gICAgICAgICAgICAgICAgZW1pdChhdlswXSkKLSAgICAgICAgICAgICAgICBlbWl0KGF2WzFdKQotICAgICAgICAgICAgICAgIF9jb21waWxlKGNvZGUsIGF2WzJdLCBmbGFncykKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbU1VDQ0VTU10pCi0gICAgICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCiAgICAgICAgICAgICBlbGlmIF9zaW1wbGUoYXYpIGFuZCBvcCBpcyBub3QgUkVQRUFUOgogICAgICAgICAgICAgICAgIGlmIG9wIGlzIE1BWF9SRVBFQVQ6CiAgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tSRVBFQVRfT05FXSkKQEAgLTIwNywxNTggKzIwMSwxNDMgQEAKIGRlZiBfb3B0aW1pemVfY2hhcnNldChjaGFyc2V0LCBmaXh1cCk6CiAgICAgIyBpbnRlcm5hbDogb3B0aW1pemUgY2hhcmFjdGVyIHNldAogICAgIG91dCA9IFtdCi0gICAgb3V0YXBwZW5kID0gb3V0LmFwcGVuZAotICAgIGNoYXJtYXAgPSBbMF0qMjU2Ci0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChvcCwgYXYpKQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBhcHBlbmQgdG8gY2hhcm1hcCB0YWlsCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBjaGFyYWN0ZXIgc2V0IGNvbnRhaW5zIHVuaWNvZGUgY2hhcmFjdGVycwotICAgICAgICByZXR1cm4gX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApCisgICAgdGFpbCA9IFtdCisgICAgY2hhcm1hcCA9IGJ5dGVhcnJheSgyNTYpCisgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG9wIGlzIExJVEVSQUw6CisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCisgICAgICAgICAgICAgICAgZWxpZiBvcCBpcyBORUdBVEU6CisgICAgICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdGFpbC5hcHBlbmQoKG9wLCBhdikpCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBsZW4oY2hhcm1hcCkgPT0gMjU2OgorICAgICAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLVVDUzEgY2hhcmFjdGVyIGNvZGVzCisgICAgICAgICAgICAgICAgICAgIGNoYXJtYXAgKz0gYidcMCcgKiAweGZmMDAKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGJyZWFrCisKICAgICAjIGNvbXByZXNzIGNoYXJhY3RlciBtYXAKLSAgICBpID0gcCA9IG4gPSAwCiAgICAgcnVucyA9IFtdCi0gICAgcnVuc2FwcGVuZCA9IHJ1bnMuYXBwZW5kCi0gICAgZm9yIGMgaW4gY2hhcm1hcDoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgICAgICBwID0gaQotICAgICAgICAgICAgbiA9IG4gKyAxCi0gICAgICAgIGVsaWYgbjoKLSAgICAgICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgICAgICAgICAgbiA9IDAKLSAgICAgICAgaSA9IGkgKyAxCi0gICAgaWYgbjoKLSAgICAgICAgcnVuc2FwcGVuZCgocCwgbikpCi0gICAgaWYgbGVuKHJ1bnMpIDw9IDI6CisgICAgcSA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwID0gY2hhcm1hcC5maW5kKDEsIHEpCisgICAgICAgIGlmIHAgPCAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbGVuKHJ1bnMpID49IDI6CisgICAgICAgICAgICBydW5zID0gTm9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcSA9IGNoYXJtYXAuZmluZCgwLCBwKQorICAgICAgICBpZiBxIDwgMDoKKyAgICAgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBsZW4oY2hhcm1hcCkpKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcnVucy5hcHBlbmQoKHAsIHEpKQorICAgIGlmIHJ1bnMgaXMgbm90IE5vbmU6CiAgICAgICAgICMgdXNlIGxpdGVyYWwvcmFuZ2UKLSAgICAgICAgZm9yIHAsIG4gaW4gcnVuczoKLSAgICAgICAgICAgIGlmIG4gPT0gMToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKExJVEVSQUwsIHApKQorICAgICAgICBmb3IgcCwgcSBpbiBydW5zOgorICAgICAgICAgICAgaWYgcSAtIHAgPT0gMToKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChMSVRFUkFMLCBwKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChSQU5HRSwgKHAsIHArbi0xKSkpCisgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgoUkFOR0UsIChwLCBxIC0gMSkpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICBpZiBsZW4ob3V0KSA8IGxlbihjaGFyc2V0KToKICAgICAgICAgICAgIHJldHVybiBvdXQKLSAgICBlbHNlOgotICAgICAgICAjIHVzZSBiaXRtYXAKKyAgICAgICAgcmV0dXJuIGNoYXJzZXQKKworICAgICMgdXNlIGJpdG1hcAorICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CiAgICAgICAgIGRhdGEgPSBfbWtfYml0bWFwKGNoYXJtYXApCi0gICAgICAgIG91dGFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dC5hcHBlbmQoKENIQVJTRVQsIGRhdGEpKQorICAgICAgICBvdXQgKz0gdGFpbAogICAgICAgICByZXR1cm4gb3V0Ci0gICAgcmV0dXJuIGNoYXJzZXQKIAotZGVmIF9ta19iaXRtYXAoYml0cyk6Ci0gICAgZGF0YSA9IFtdCi0gICAgZGF0YWFwcGVuZCA9IGRhdGEuYXBwZW5kCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBzdGFydCA9ICgxLCAwKQotICAgIGVsc2U6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgbSwgdiA9IHN0YXJ0Ci0gICAgZm9yIGMgaW4gYml0czoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIHYgPSB2ICsgbQotICAgICAgICBtID0gbSArIG0KLSAgICAgICAgaWYgbSA+IE1BWENPREU6Ci0gICAgICAgICAgICBkYXRhYXBwZW5kKHYpCi0gICAgICAgICAgICBtLCB2ID0gc3RhcnQKLSAgICByZXR1cm4gZGF0YQorICAgICMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQorICAgICMgc2V0IGlzIGNvbnN0cnVjdGVkLiBUaGVuLCB0aGlzIGJpdG1hcCBpcyBzbGljZWQgaW50byBjaHVua3Mgb2YgMjU2CisgICAgIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcworICAgICMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcworICAgICMgcmVwcmVzZW50ZWQgYnkgYSAzMi1iaXQgd29yZCBzZXF1ZW5jZSwgY29uc2lzdGluZyBvZiBvbmUgd29yZCBmb3IKKyAgICAjIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQorICAgICMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQorICAgICMgc2VxdWVuY2Ugb2YgMjU2LWJpdCBjaHVua3MgKDggd29yZHMgZWFjaCkuCiAKLSMgVG8gcmVwcmVzZW50IGEgYmlnIGNoYXJzZXQsIGZpcnN0IGEgYml0bWFwIG9mIGFsbCBjaGFyYWN0ZXJzIGluIHRoZQotIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKLSMgY2hhcmFjdGVycywgZHVwbGljYXRlIGNodW5rcyBhcmUgZWxpbWluYXRlZCwgYW5kIGVhY2ggY2h1bmsgaXMKLSMgZ2l2ZW4gYSBudW1iZXIuIEluIHRoZSBjb21waWxlZCBleHByZXNzaW9uLCB0aGUgY2hhcnNldCBpcwotIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgotIyB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBjaHVua3MsIGEgc2VxdWVuY2Ugb2YgMjU2IGJ5dGVzICg2NCB3b3JkcykKLSMgb2YgY2h1bmsgbnVtYmVycyBpbmRleGVkIGJ5IHRoZWlyIG9yaWdpbmFsIGNodW5rIHBvc2l0aW9uLCBhbmQgYQotIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KKyAgICAjIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKKyAgICAjIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCisgICAgIyBsZXR0ZXJzIGFyZSB0byBiZSBtYXRjaGVkKSwgb3IgY29tcGxldGVseSBpbmNsdWRlZCAoZS5nLiBpZiBsYXJnZQorICAgICMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKKyAgICAjIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KIAotIyBDb21wcmVzc2lvbiBpcyBub3JtYWxseSBnb29kOiBpbiBhIHR5cGljYWwgY2hhcnNldCwgbGFyZ2UgcmFuZ2VzIG9mCi0jIFVuaWNvZGUgd2lsbCBiZSBlaXRoZXIgY29tcGxldGVseSBleGNsdWRlZCAoZS5nLiBpZiBvbmx5IGN5cmlsbGljCi0jIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCi0jIHN1YnJhbmdlcyBvZiBLYW5qaSBtYXRjaCkuIFRoZXNlIHJhbmdlcyB3aWxsIGJlIHJlcHJlc2VudGVkIGJ5Ci0jIGNodW5rcyBvZiBhbGwgb25lLWJpdHMgb3IgYWxsIHplcm8tYml0cy4KKyAgICAjIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKKyAgICAjIHRoZSBVbmljb2RlIGNoYXJhY3RlciBpcyBhbiBpbmRleCBpbnRvIHRoZSBjaHVuayBudW1iZXIsIGFuZCB0aGUKKyAgICAjIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKKyAgICAjIENIQVJTRVQgbWF0Y2hpbmcpLgogCi0jIE1hdGNoaW5nIGNhbiBiZSBhbHNvIGRvbmUgZWZmaWNpZW50bHk6IHRoZSBtb3JlIHNpZ25pZmljYW50IGJ5dGUgb2YKLSMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQotIyBsZXNzIHNpZ25pZmljYW50IGJ5dGUgaXMgYSBiaXQgaW5kZXggaW4gdGhlIGNodW5rIChqdXN0IGxpa2UgdGhlCi0jIENIQVJTRVQgbWF0Y2hpbmcpLgotCi0jIFRoZSBCSUdDSEFSU0VUIG9wY29kZSBzdGlsbCBzdXBwb3J0cyBvbmx5IHN1YnNldHMKLSMgb2YgdGhlIGJhc2ljIG11bHRpbGluZ3VhbCBwbGFuZTsgYW4gZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uCi0jIGZvciBhbGwgb2YgVW5pY29kZSBoYXMgbm90IHlldCBiZWVuIGRldmVsb3BlZC4gVGhpcyBtZWFucywKLSMgaW4gcGFydGljdWxhciwgdGhhdCBuZWdhdGVkIGNoYXJzZXRzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcwotIyBiaWdjaGFyc2V0cy4KLQotZGVmIF9vcHRpbWl6ZV91bmljb2RlKGNoYXJzZXQsIGZpeHVwKToKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBhcnJheQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICBjaGFybWFwID0gWzBdKjY1NTM2Ci0gICAgbmVnYXRlID0gMAotICAgIHRyeToKLSAgICAgICAgZm9yIG9wLCBhdiBpbiBjaGFyc2V0OgotICAgICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgotICAgICAgICAgICAgICAgIG5lZ2F0ZSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgTElURVJBTDoKLSAgICAgICAgICAgICAgICBjaGFybWFwW2ZpeHVwKGF2KV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgotICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGZpeHVwKGF2WzBdKSwgZml4dXAoYXZbMV0pKzEpOgotICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBDQVRFR09SWToKLSAgICAgICAgICAgICAgICAjIFhYWDogY291bGQgZXhwYW5kIGNhdGVnb3J5Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQgIyBjYW5ub3QgY29tcHJlc3MKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgIyBub24tQk1QIGNoYXJhY3RlcnM7IFhYWCBub3cgdGhleSBzaG91bGQgd29yawotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGlmIG5lZ2F0ZToKLSAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgIT0gNjU1MzU6Ci0gICAgICAgICAgICAjIFhYWDogbmVnYXRpb24gZG9lcyBub3Qgd29yayB3aXRoIGJpZyBjaGFyc2V0cwotICAgICAgICAgICAgIyBYWFgyOiBub3cgdGhleSBzaG91bGQgd29yaywgYnV0IHJlbW92aW5nIHRoaXMgd2lsbCBtYWtlIHRoZQotICAgICAgICAgICAgIyBjaGFybWFwIDE3IHRpbWVzIGJpZ2dlcgotICAgICAgICAgICAgcmV0dXJuIGNoYXJzZXQKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNjU1MzYpOgotICAgICAgICAgICAgY2hhcm1hcFtpXSA9IG5vdCBjaGFybWFwW2ldCisgICAgY2hhcm1hcCA9IGJ5dGVzKGNoYXJtYXApICMgc2hvdWxkIGJlIGhhc2hhYmxlCiAgICAgY29tcHMgPSB7fQotICAgIG1hcHBpbmcgPSBbMF0qMjU2CisgICAgbWFwcGluZyA9IGJ5dGVhcnJheSgyNTYpCiAgICAgYmxvY2sgPSAwCi0gICAgZGF0YSA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICAgICAgY2h1bmsgPSB0dXBsZShjaGFybWFwW2kqMjU2OihpKzEpKjI1Nl0pCi0gICAgICAgIG5ldyA9IGNvbXBzLnNldGRlZmF1bHQoY2h1bmssIGJsb2NrKQotICAgICAgICBtYXBwaW5nW2ldID0gbmV3Ci0gICAgICAgIGlmIG5ldyA9PSBibG9jazoKLSAgICAgICAgICAgIGJsb2NrID0gYmxvY2sgKyAxCi0gICAgICAgICAgICBkYXRhID0gZGF0YSArIF9ta19iaXRtYXAoY2h1bmspCi0gICAgaGVhZGVyID0gW2Jsb2NrXQotICAgIGlmIF9zcmUuQ09ERVNJWkUgPT0gMjoKLSAgICAgICAgY29kZSA9ICdIJwotICAgIGVsc2U6Ci0gICAgICAgIGNvZGUgPSAnSScKLSAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byBieXRlIGFycmF5IG9mIDI1NiBieXRlcwotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheSgnQicsIG1hcHBpbmcpLnRvYnl0ZXMoKQotICAgICMgQ29udmVydCBieXRlIGFycmF5IHRvIHdvcmQgYXJyYXkKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoY29kZSwgbWFwcGluZykKLSAgICBhc3NlcnQgbWFwcGluZy5pdGVtc2l6ZSA9PSBfc3JlLkNPREVTSVpFCi0gICAgYXNzZXJ0IGxlbihtYXBwaW5nKSAqIG1hcHBpbmcuaXRlbXNpemUgPT0gMjU2Ci0gICAgaGVhZGVyID0gaGVhZGVyICsgbWFwcGluZy50b2xpc3QoKQotICAgIGRhdGFbMDowXSA9IGhlYWRlcgotICAgIHJldHVybiBbKEJJR0NIQVJTRVQsIGRhdGEpXQorICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgIGZvciBpIGluIHJhbmdlKDAsIDY1NTM2LCAyNTYpOgorICAgICAgICBjaHVuayA9IGNoYXJtYXBbaTogaSArIDI1Nl0KKyAgICAgICAgaWYgY2h1bmsgaW4gY29tcHM6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFwcGluZ1tpIC8vIDI1Nl0gPSBjb21wc1tjaHVua10gPSBibG9jaworICAgICAgICAgICAgYmxvY2sgKz0gMQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgIGRhdGEgPSBfbWtfYml0bWFwKGRhdGEpCisgICAgZGF0YVswOjBdID0gW2Jsb2NrXSArIF9ieXRlc190b19jb2RlcyhtYXBwaW5nKQorICAgIG91dC5hcHBlbmQoKEJJR0NIQVJTRVQsIGRhdGEpKQorICAgIG91dCArPSB0YWlsCisgICAgcmV0dXJuIG91dAorCitfQ09ERUJJVFMgPSBfc3JlLkNPREVTSVpFICogOAorX0JJVFNfVFJBTlMgPSBiJzAnICsgYicxJyAqIDI1NQorZGVmIF9ta19iaXRtYXAoYml0cywgX0NPREVCSVRTPV9DT0RFQklUUywgX2ludD1pbnQpOgorICAgIHMgPSBiaXRzLnRyYW5zbGF0ZShfQklUU19UUkFOUylbOjotMV0KKyAgICByZXR1cm4gW19pbnQoc1tpIC0gX0NPREVCSVRTOiBpXSwgMikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzKSwgMCwgLV9DT0RFQklUUyldCisKK2RlZiBfYnl0ZXNfdG9fY29kZXMoYik6CisgICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gd29yZCBhcnJheQorICAgIGltcG9ydCBhcnJheQorICAgIGEgPSBhcnJheS5hcnJheSgnSScsIGIpCisgICAgYXNzZXJ0IGEuaXRlbXNpemUgPT0gX3NyZS5DT0RFU0laRQorICAgIGFzc2VydCBsZW4oYSkgKiBhLml0ZW1zaXplID09IGxlbihiKQorICAgIHJldHVybiBhLnRvbGlzdCgpCiAKIGRlZiBfc2ltcGxlKGF2KToKICAgICAjIGNoZWNrIGlmIGF2IGlzIGEgInNpbXBsZSIgb3BlcmF0b3IKICAgICBsbywgaGkgPSBhdlsyXS5nZXR3aWR0aCgpCiAgICAgcmV0dXJuIGxvID09IGhpID09IDEgYW5kIGF2WzJdWzBdWzBdICE9IFNVQlBBVFRFUk4KIAorZGVmIF9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlKHByZWZpeCk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYW4gb3ZlcmxhcCB0YWJsZSBmb3IgdGhlIGZvbGxvd2luZyBwcmVmaXguCisgICAgQW4gb3ZlcmxhcCB0YWJsZSBpcyBhIHRhYmxlIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIHByZWZpeCB3aGljaAorICAgIGluZm9ybXMgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWxmLW92ZXJsYXAgZm9yIGVhY2ggaW5kZXggaW4gdGhlIHByZWZpeDoKKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gMCwgcHJlZml4W2k6XSBjYW4ndCBvdmVybGFwIHByZWZpeFswOi4uLl0KKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gayB3aXRoIDAgPCBrIDw9IGksIHByZWZpeFtpLWsrMTppKzFdIG92ZXJsYXBzIHdpdGgKKyAgICAgIHByZWZpeFswOmtdCisgICAgIiIiCisgICAgdGFibGUgPSBbMF0gKiBsZW4ocHJlZml4KQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihwcmVmaXgpKToKKyAgICAgICAgaWR4ID0gdGFibGVbaSAtIDFdCisgICAgICAgIHdoaWxlIHByZWZpeFtpXSAhPSBwcmVmaXhbaWR4XToKKyAgICAgICAgICAgIGlmIGlkeCA9PSAwOgorICAgICAgICAgICAgICAgIHRhYmxlW2ldID0gMAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggPSB0YWJsZVtpZHggLSAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVbaV0gPSBpZHggKyAxCisgICAgcmV0dXJuIHRhYmxlCisKIGRlZiBfY29tcGlsZV9pbmZvKGNvZGUsIHBhdHRlcm4sIGZsYWdzKToKICAgICAjIGludGVybmFsOiBjb21waWxlIGFuIGluZm8gYmxvY2suICBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLAogICAgICMgdGhpcyBjb250YWlucyBtaW4vbWF4IHBhdHRlcm4gd2lkdGgsIGFuZCBhbiBvcHRpb25hbCBsaXRlcmFsCkBAIC00NTUsMTIgKzQzNCw3IEBACiAgICAgICAgIGVtaXQocHJlZml4X3NraXApICMgc2tpcAogICAgICAgICBjb2RlLmV4dGVuZChwcmVmaXgpCiAgICAgICAgICMgZ2VuZXJhdGUgb3ZlcmxhcCB0YWJsZQotICAgICAgICB0YWJsZSA9IFstMV0gKyAoWzBdKmxlbihwcmVmaXgpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocHJlZml4KSk6Ci0gICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbaV0rMQotICAgICAgICAgICAgd2hpbGUgdGFibGVbaSsxXSA+IDAgYW5kIHByZWZpeFtpXSAhPSBwcmVmaXhbdGFibGVbaSsxXS0xXToKLSAgICAgICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbdGFibGVbaSsxXS0xXSsxCi0gICAgICAgIGNvZGUuZXh0ZW5kKHRhYmxlWzE6XSkgIyBkb24ndCBzdG9yZSBmaXJzdCBlbnRyeQorICAgICAgICBjb2RlLmV4dGVuZChfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpKQogICAgIGVsaWYgY2hhcnNldDoKICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSkKICAgICBjb2RlW3NraXBdID0gbGVuKGNvZGUpIC0gc2tpcApkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb25zdGFudHMucHkgYi9MaWIvc3JlX2NvbnN0YW50cy5weQppbmRleCAzZmI1ZWFjLi4yM2UzNTE2IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbnN0YW50cy5weQorKysgYi9MaWIvc3JlX2NvbnN0YW50cy5weQpAQCAtMTUsMTEgKzE1LDcgQEAKIAogTUFHSUMgPSAyMDAzMTAxNwogCi10cnk6Ci0gICAgZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX3NyZQotICAgIE1BWFJFUEVBVCA9IF9zcmUuTUFYUkVQRUFUID0gNjU1MzUKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKICMgU1JFIHN0YW5kYXJkIGV4Y2VwdGlvbiAoYWNjZXNzIGFzIHNyZS5lcnJvcikKICMgc2hvdWxkIHRoaXMgcmVhbGx5IGJlIGhlcmU/CkBAIC0yNTQsNiArMjUwLDggQEAKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAlZFxuIiAlIFNSRV9GTEFHX0RPVEFMTCkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgJWRcbiIgJSBTUkVfRkxBR19VTklDT0RFKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSAlZFxuIiAlIFNSRV9GTEFHX1ZFUkJPU0UpCisgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ERUJVRyAlZFxuIiAlIFNSRV9GTEFHX0RFQlVHKQorICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgJWRcbiIgJSBTUkVfRkxBR19BU0NJSSkKIAogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fUFJFRklYICVkXG4iICUgU1JFX0lORk9fUFJFRklYKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fTElURVJBTCAlZFxuIiAlIFNSRV9JTkZPX0xJVEVSQUwpCmRpZmYgLS1naXQgYS9MaWIvc3JlX3BhcnNlLnB5IGIvTGliL3NyZV9wYXJzZS5weQppbmRleCA4YTc3NzkwLi42NTgzZWY2IDEwMDY0NAotLS0gYS9MaWIvc3JlX3BhcnNlLnB5CisrKyBiL0xpYi9zcmVfcGFyc2UucHkKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCBzeXMKIAogZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqCitmcm9tIF9zcmUgaW1wb3J0IE1BWFJFUEVBVAogCiBTUEVDSUFMX0NIQVJTID0gIi5cXFt7KCkqKz9eJHwiCiBSRVBFQVRfQ0hBUlMgPSAiKis/eyIKQEAgLTc2OCwzNSArNzY5LDMzIEBACiAgICAgIyBncm91cCByZWZlcmVuY2VzCiAgICAgcyA9IFRva2VuaXplcihzb3VyY2UpCiAgICAgc2dldCA9IHMuZ2V0Ci0gICAgcCA9IFtdCi0gICAgYSA9IHAuYXBwZW5kCi0gICAgZGVmIGxpdGVyYWwobGl0ZXJhbCwgcD1wLCBwYXBwZW5kPWEpOgotICAgICAgICBpZiBwIGFuZCBwWy0xXVswXSBpcyBMSVRFUkFMOgotICAgICAgICAgICAgcFstMV0gPSBMSVRFUkFMLCBwWy0xXVsxXSArIGxpdGVyYWwKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhcHBlbmQoKExJVEVSQUwsIGxpdGVyYWwpKQotICAgIHNlcCA9IHNvdXJjZVs6MF0KLSAgICBpZiBpc2luc3RhbmNlKHNlcCwgc3RyKToKLSAgICAgICAgbWFrZWNoYXIgPSBjaHIKLSAgICBlbHNlOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIHdoaWxlIDE6CisgICAgZ3JvdXBzID0gW10KKyAgICBsaXRlcmFscyA9IFtdCisgICAgbGl0ZXJhbCA9IFtdCisgICAgbGFwcGVuZCA9IGxpdGVyYWwuYXBwZW5kCisgICAgZGVmIGFkZGdyb3VwKGluZGV4KToKKyAgICAgICAgaWYgbGl0ZXJhbDoKKyAgICAgICAgICAgIGxpdGVyYWxzLmFwcGVuZCgnJy5qb2luKGxpdGVyYWwpKQorICAgICAgICAgICAgZGVsIGxpdGVyYWxbOl0KKyAgICAgICAgZ3JvdXBzLmFwcGVuZCgobGVuKGxpdGVyYWxzKSwgaW5kZXgpKQorICAgICAgICBsaXRlcmFscy5hcHBlbmQoTm9uZSkKKyAgICB3aGlsZSBUcnVlOgogICAgICAgICB0aGlzID0gc2dldCgpCiAgICAgICAgIGlmIHRoaXMgaXMgTm9uZToKICAgICAgICAgICAgIGJyZWFrICMgZW5kIG9mIHJlcGxhY2VtZW50IHN0cmluZwotICAgICAgICBpZiB0aGlzIGFuZCB0aGlzWzBdID09ICJcXCI6CisgICAgICAgIGlmIHRoaXNbMF0gPT0gIlxcIjoKICAgICAgICAgICAgICMgZ3JvdXAKLSAgICAgICAgICAgIGMgPSB0aGlzWzE6Ml0KKyAgICAgICAgICAgIGMgPSB0aGlzWzFdCiAgICAgICAgICAgICBpZiBjID09ICJnIjoKICAgICAgICAgICAgICAgICBuYW1lID0gIiIKICAgICAgICAgICAgICAgICBpZiBzLm1hdGNoKCI8Iik6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyID0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGFyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVudGVybWluYXRlZCBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgPT0gIj4iOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gbmFtZSArIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKz0gY2hhcgogICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigibWlzc2luZyBncm91cCBuYW1lIikKICAgICAgICAgICAgICAgICB0cnk6CkBAIC04MTAsNTAgKzgwOSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXR0ZXJuLmdyb3VwaW5kZXhbbmFtZV0KICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigidW5rbm93biBncm91cCBuYW1lIikKLSAgICAgICAgICAgICAgICBhKChNQVJLLCBpbmRleCkpCisgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW5kZXgpCiAgICAgICAgICAgICBlbGlmIGMgPT0gIjAiOgogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQotICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKKyAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCiAgICAgICAgICAgICBlbGlmIGMgaW4gRElHSVRTOgogICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBGYWxzZQogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjIGluIE9DVERJR0lUUyBhbmQgdGhpc1syXSBpbiBPQ1RESUdJVFMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBzLm5leHQgaW4gT0NURElHSVRTKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNvY3RhbCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBpc29jdGFsOgotICAgICAgICAgICAgICAgICAgICBhKChNQVJLLCBpbnQodGhpc1sxOl0pKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW50KHRoaXNbMTpdKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gbWFrZWNoYXIoRVNDQVBFU1t0aGlzXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyA9IGNocihFU0NBUEVTW3RoaXNdWzFdKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGxpdGVyYWwodGhpcykKKyAgICAgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsKHRoaXMpCi0gICAgIyBjb252ZXJ0IHRlbXBsYXRlIHRvIGdyb3VwcyBhbmQgbGl0ZXJhbHMgbGlzdHMKLSAgICBpID0gMAotICAgIGdyb3VwcyA9IFtdCi0gICAgZ3JvdXBzYXBwZW5kID0gZ3JvdXBzLmFwcGVuZAotICAgIGxpdGVyYWxzID0gW05vbmVdICogbGVuKHApCi0gICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6Ci0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4Ci0gICAgZWxzZToKKyAgICAgICAgICAgIGxhcHBlbmQodGhpcykKKyAgICBpZiBsaXRlcmFsOgorICAgICAgICBsaXRlcmFscy5hcHBlbmQoJycuam9pbihsaXRlcmFsKSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CiAgICAgICAgICMgVGhlIHRva2VuaXplciBpbXBsaWNpdGx5IGRlY29kZXMgYnl0ZXMgb2JqZWN0cyBhcyBsYXRpbi0xLCB3ZSBtdXN0CiAgICAgICAgICMgdGhlcmVmb3JlIHJlLWVuY29kZSB0aGUgZmluYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4LmVuY29kZSgnbGF0aW4tMScpCi0gICAgZm9yIGMsIHMgaW4gcDoKLSAgICAgICAgaWYgYyBpcyBNQVJLOgotICAgICAgICAgICAgZ3JvdXBzYXBwZW5kKChpLCBzKSkKLSAgICAgICAgICAgICMgbGl0ZXJhbFtpXSBpcyBhbHJlYWR5IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpdGVyYWxzW2ldID0gZW5jb2RlKHMpCi0gICAgICAgIGkgPSBpICsgMQorICAgICAgICBsaXRlcmFscyA9IFtOb25lIGlmIHMgaXMgTm9uZSBlbHNlIHMuZW5jb2RlKCdsYXRpbi0xJykgZm9yIHMgaW4gbGl0ZXJhbHNdCiAgICAgcmV0dXJuIGdyb3VwcywgbGl0ZXJhbHMKIAogZGVmIGV4cGFuZF90ZW1wbGF0ZSh0ZW1wbGF0ZSwgbWF0Y2gpOgpkaWZmIC0tZ2l0IGEvTGliL3NzbC5weSBiL0xpYi9zc2wucHkKaW5kZXggMDY0MzdiMy4uMDUyYTExOCAxMDA2NDQKLS0tIGEvTGliL3NzbC5weQorKysgYi9MaWIvc3NsLnB5CkBAIC01MiwxMCArNTIsNDcgQEAKIFBST1RPQ09MX1NTTHYzCiBQUk9UT0NPTF9TU0x2MjMKIFBST1RPQ09MX1RMU3YxCitQUk9UT0NPTF9UTFN2MV8xCitQUk9UT0NPTF9UTFN2MV8yCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGlkZW50aWZ5IHZhcmlvdXMgU1NMIGFsZXJ0IG1lc3NhZ2UgZGVzY3JpcHRpb25zIGFzIHBlcgoraHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNgorCitBTEVSVF9ERVNDUklQVElPTl9DTE9TRV9OT1RJRlkKK0FMRVJUX0RFU0NSSVBUSU9OX1VORVhQRUNURURfTUVTU0FHRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX1JFQ09SRF9NQUMKK0FMRVJUX0RFU0NSSVBUSU9OX1JFQ09SRF9PVkVSRkxPVworQUxFUlRfREVTQ1JJUFRJT05fREVDT01QUkVTU0lPTl9GQUlMVVJFCitBTEVSVF9ERVNDUklQVElPTl9IQU5EU0hBS0VfRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfUkVWT0tFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfRVhQSVJFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5LTk9XTgorQUxFUlRfREVTQ1JJUFRJT05fSUxMRUdBTF9QQVJBTUVURVIKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fQ0EKK0FMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09ERV9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fREVDUllQVF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fUFJPVE9DT0xfVkVSU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCitBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fVVNFUl9DQU5DRUxMRUQKK0FMRVJUX0RFU0NSSVBUSU9OX05PX1JFTkVHT1RJQVRJT04KK0FMRVJUX0RFU0NSSVBUSU9OX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCitBTEVSVF9ERVNDUklQVElPTl9VTlJFQ09HTklaRURfTkFNRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fUFNLX0lERU5USVRZCiAiIiIKIAogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSBlbnVtIGltcG9ydCBFbnVtIGFzIF9FbnVtCiAKIGltcG9ydCBfc3NsICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgaW1wb3J0IGl0LCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZQogCkBAIC02NiwzNSArMTAzLDI2IEBACiAgICAgU1NMU3lzY2FsbEVycm9yLCBTU0xFT0ZFcnJvciwKICAgICApCiBmcm9tIF9zc2wgaW1wb3J0IENFUlRfTk9ORSwgQ0VSVF9PUFRJT05BTCwgQ0VSVF9SRVFVSVJFRAotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgT1BfQUxMLCBPUF9OT19TU0x2MiwgT1BfTk9fU1NMdjMsIE9QX05PX1RMU3YxLAotICAgIE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgT1BfU0lOR0xFX0RIX1VTRQotICAgICkKLXRyeToKLSAgICBmcm9tIF9zc2wgaW1wb3J0IE9QX05PX0NPTVBSRVNTSU9OCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotdHJ5OgotICAgIGZyb20gX3NzbCBpbXBvcnQgT1BfU0lOR0xFX0VDREhfVVNFCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcworZnJvbSBfc3NsIGltcG9ydCAoVkVSSUZZX0RFRkFVTFQsIFZFUklGWV9DUkxfQ0hFQ0tfTEVBRiwgVkVSSUZZX0NSTF9DSEVDS19DSEFJTiwKKyAgICBWRVJJRllfWDUwOV9TVFJJQ1QpCitmcm9tIF9zc2wgaW1wb3J0IHR4dDJvYmogYXMgX3R4dDJvYmosIG5pZDJvYmogYXMgX25pZDJvYmoKIGZyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfZWdkLCBSQU5EX2FkZCwgUkFORF9ieXRlcywgUkFORF9wc2V1ZG9fYnl0ZXMKLWZyb20gX3NzbCBpbXBvcnQgKAotICAgIFNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKLSAgICBTU0xfRVJST1JfV0FOVF9SRUFELAotICAgIFNTTF9FUlJPUl9XQU5UX1dSSVRFLAotICAgIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQLAotICAgIFNTTF9FUlJPUl9TWVNDQUxMLAotICAgIFNTTF9FUlJPUl9TU0wsCi0gICAgU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCwKLSAgICBTU0xfRVJST1JfRU9GLAotICAgIFNTTF9FUlJPUl9JTlZBTElEX0VSUk9SX0NPREUsCi0gICAgKQorCitkZWYgX2ltcG9ydF9zeW1ib2xzKHByZWZpeCk6CisgICAgZm9yIG4gaW4gZGlyKF9zc2wpOgorICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocHJlZml4KToKKyAgICAgICAgICAgIGdsb2JhbHMoKVtuXSA9IGdldGF0dHIoX3NzbCwgbikKKworX2ltcG9ydF9zeW1ib2xzKCdPUF8nKQorX2ltcG9ydF9zeW1ib2xzKCdBTEVSVF9ERVNDUklQVElPTl8nKQorX2ltcG9ydF9zeW1ib2xzKCdTU0xfRVJST1JfJykKKwogZnJvbSBfc3NsIGltcG9ydCBIQVNfU05JLCBIQVNfRUNESCwgSEFTX05QTgotZnJvbSBfc3NsIGltcG9ydCAoUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKLSAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorCitmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYzLCBQUk9UT0NPTF9TU0x2MjMsIFBST1RPQ09MX1RMU3YxCiBmcm9tIF9zc2wgaW1wb3J0IF9PUEVOU1NMX0FQSV9WRVJTSU9OCiAKKwogX1BST1RPQ09MX05BTUVTID0gewogICAgIFBST1RPQ09MX1RMU3YxOiAiVExTdjEiLAogICAgIFBST1RPQ09MX1NTTHYyMzogIlNTTHYyMyIsCkBAIC0xMDgsMTMgKzEzNiwyNyBAQAogZWxzZToKICAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfU1NMdjJdID0gIlNTTHYyIgogCit0cnk6CisgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9UTFN2MV8xLCBQUk9UT0NPTF9UTFN2MV8yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMV0gPSAiVExTdjEuMSIKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMl0gPSAiVExTdjEuMiIKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgZnJvbSBfc3NsIGltcG9ydCBlbnVtX2NlcnRpZmljYXRlcywgZW51bV9jcmxzCisKIGZyb20gc29ja2V0IGltcG9ydCBnZXRuYW1laW5mbyBhcyBfZ2V0bmFtZWluZm8KLWZyb20gc29ja2V0IGltcG9ydCBlcnJvciBhcyBzb2NrZXRfZXJyb3IKK2Zyb20gc29ja2V0IGltcG9ydCBTSFVUX1JEV1IgYXMgX1NIVVRfUkRXUgogZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldCwgQUZfSU5FVCwgU09DS19TVFJFQU0sIGNyZWF0ZV9jb25uZWN0aW9uCiBpbXBvcnQgYmFzZTY0ICAgICAgICAjIGZvciBERVItdG8tUEVNIHRyYW5zbGF0aW9uCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgZXJybm8KIAorCitzb2NrZXRfZXJyb3IgPSBPU0Vycm9yICAjIGtlZXAgdGhhdCBwdWJsaWMgbmFtZSBpbiBtb2R1bGUgbmFtZXNwYWNlCisKIGlmIF9zc2wuSEFTX1RMU19VTklRVUU6CiAgICAgQ0hBTk5FTF9CSU5ESU5HX1RZUEVTID0gWyd0bHMtdW5pcXVlJ10KIGVsc2U6CkBAIC0xMjQsNiArMTY2LDEzIEBACiAjIChPcGVuU1NMJ3MgZGVmYXVsdCBzZXR0aW5nIGlzICdERUZBVUxUOiFhTlVMTDohZU5VTEwnKQogX0RFRkFVTFRfQ0lQSEVSUyA9ICdERUZBVUxUOiFhTlVMTDohZU5VTEw6IUxPVzohRVhQT1JUOiFTU0x2MicKIAorIyByZXN0cmljdGVkIGFuZCBtb3JlIHNlY3VyZSBjaXBoZXJzCisjIEhJR0g6IGhpZ2ggZW5jcnlwdGlvbiBjaXBoZXIgc3VpdGVzIHdpdGgga2V5IGxlbmd0aCA+PSAxMjggYml0cyAobm8gTUQ1KQorIyAhYU5VTEw6IG9ubHkgYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzIChubyBhbm9ueW1vdXMgREgpCisjICFSQzQ6IG5vIFJDNCBzdHJlYW1pbmcgY2lwaGVyLCBSQzQgaXMgYnJva2VuCisjICFEU1M6IFJTQSBpcyBwcmVmZXJyZWQgb3ZlciBEU0EKK19SRVNUUklDVEVEX0NJUEhFUlMgPSAnSElHSDohYU5VTEw6IVJDNDohRFNTJworCiAKIGNsYXNzIENlcnRpZmljYXRlRXJyb3IoVmFsdWVFcnJvcik6CiAgICAgcGFzcwpAQCAtMTg3LDcgKzIzNiw5IEBACiAgICAgcmV0dXJucyBub3RoaW5nLgogICAgICIiIgogICAgIGlmIG5vdCBjZXJ0OgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBvciBubyBjZXJ0aWZpY2F0ZSIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IG9yIG5vIGNlcnRpZmljYXRlLCBtYXRjaF9ob3N0bmFtZSBuZWVkcyBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIHNvY2tldCBvciBTU0wgY29udGV4dCB3aXRoIGVpdGhlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRCIpCiAgICAgZG5zbmFtZXMgPSBbXQogICAgIHNhbiA9IGNlcnQuZ2V0KCdzdWJqZWN0QWx0TmFtZScsICgpKQogICAgIGZvciBrZXksIHZhbHVlIGluIHNhbjoKQEAgLTIxOSwxMSArMjcwLDU4IEBACiAgICAgICAgICAgICAic3ViamVjdEFsdE5hbWUgZmllbGRzIHdlcmUgZm91bmQiKQogCiAKK0RlZmF1bHRWZXJpZnlQYXRocyA9IG5hbWVkdHVwbGUoIkRlZmF1bHRWZXJpZnlQYXRocyIsCisgICAgImNhZmlsZSBjYXBhdGggb3BlbnNzbF9jYWZpbGVfZW52IG9wZW5zc2xfY2FmaWxlIG9wZW5zc2xfY2FwYXRoX2VudiAiCisgICAgIm9wZW5zc2xfY2FwYXRoIikKKworZGVmIGdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpOgorICAgICIiIlJldHVybiBwYXRocyB0byBkZWZhdWx0IGNhZmlsZSBhbmQgY2FwYXRoLgorICAgICIiIgorICAgIHBhcnRzID0gX3NzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisgICAgIyBlbnZpcm9ubWVudCB2YXJzIHNoYWRvdyBwYXRocworICAgIGNhZmlsZSA9IG9zLmVudmlyb24uZ2V0KHBhcnRzWzBdLCBwYXJ0c1sxXSkKKyAgICBjYXBhdGggPSBvcy5lbnZpcm9uLmdldChwYXJ0c1syXSwgcGFydHNbM10pCisKKyAgICByZXR1cm4gRGVmYXVsdFZlcmlmeVBhdGhzKGNhZmlsZSBpZiBvcy5wYXRoLmlzZmlsZShjYWZpbGUpIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGF0aCBpZiBvcy5wYXRoLmlzZGlyKGNhcGF0aCkgZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnBhcnRzKQorCisKK2NsYXNzIF9BU04xT2JqZWN0KG5hbWVkdHVwbGUoIl9BU04xT2JqZWN0IiwgIm5pZCBzaG9ydG5hbWUgbG9uZ25hbWUgb2lkIikpOgorICAgICIiIkFTTi4xIG9iamVjdCBpZGVudGlmaWVyIGxvb2t1cAorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIG9pZCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX3R4dDJvYmoob2lkLCBuYW1lPUZhbHNlKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmcm9tbmlkKGNscywgbmlkKToKKyAgICAgICAgIiIiQ3JlYXRlIF9BU04xT2JqZWN0IGZyb20gT3BlblNTTCBudW1lcmljIElECisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl9uaWQyb2JqKG5pZCkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbW5hbWUoY2xzLCBuYW1lKToKKyAgICAgICAgIiIiQ3JlYXRlIF9BU04xT2JqZWN0IGZyb20gc2hvcnQgbmFtZSwgbG9uZyBuYW1lIG9yIE9JRAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfdHh0Mm9iaihuYW1lLCBuYW1lPVRydWUpKQorCisKK2NsYXNzIFB1cnBvc2UoX0FTTjFPYmplY3QsIF9FbnVtKToKKyAgICAiIiJTU0xDb250ZXh0IHB1cnBvc2UgZmxhZ3Mgd2l0aCBYNTA5djMgRXh0ZW5kZWQgS2V5IFVzYWdlIG9iamVjdHMKKyAgICAiIiIKKyAgICBTRVJWRVJfQVVUSCA9ICcxLjMuNi4xLjUuNS43LjMuMScKKyAgICBDTElFTlRfQVVUSCA9ICcxLjMuNi4xLjUuNS43LjMuMicKKworCiBjbGFzcyBTU0xDb250ZXh0KF9TU0xDb250ZXh0KToKICAgICAiIiJBbiBTU0xDb250ZXh0IGhvbGRzIHZhcmlvdXMgU1NMLXJlbGF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZAogICAgIGRhdGEsIHN1Y2ggYXMgY2VydGlmaWNhdGVzIGFuZCBwb3NzaWJseSBhIHByaXZhdGUga2V5LiIiIgogCi0gICAgX19zbG90c19fID0gKCdwcm90b2NvbCcsKQorICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCAnX193ZWFrcmVmX18nKQorICAgIF93aW5kb3dzX2NlcnRfc3RvcmVzID0gKCJDQSIsICJST09UIikKIAogICAgIGRlZiBfX25ld19fKGNscywgcHJvdG9jb2wsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHNlbGYgPSBfU1NMQ29udGV4dC5fX25ld19fKGNscywgcHJvdG9jb2wpCkBAIC0yNTUsNiArMzUzLDk0IEBACiAKICAgICAgICAgc2VsZi5fc2V0X25wbl9wcm90b2NvbHMocHJvdG9zKQogCisgICAgZGVmIF9sb2FkX3dpbmRvd3Nfc3RvcmVfY2VydHMoc2VsZiwgc3RvcmVuYW1lLCBwdXJwb3NlKToKKyAgICAgICAgY2VydHMgPSBieXRlYXJyYXkoKQorICAgICAgICBmb3IgY2VydCwgZW5jb2RpbmcsIHRydXN0IGluIGVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSk6CisgICAgICAgICAgICAjIENBIGNlcnRzIGFyZSBuZXZlciBQS0NTIzcgZW5jb2RlZAorICAgICAgICAgICAgaWYgZW5jb2RpbmcgPT0gIng1MDlfYXNuIjoKKyAgICAgICAgICAgICAgICBpZiB0cnVzdCBpcyBUcnVlIG9yIHB1cnBvc2Uub2lkIGluIHRydXN0OgorICAgICAgICAgICAgICAgICAgICBjZXJ0cy5leHRlbmQoY2VydCkKKyAgICAgICAgc2VsZi5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNlcnRzKQorICAgICAgICByZXR1cm4gY2VydHMKKworICAgIGRlZiBsb2FkX2RlZmF1bHRfY2VydHMoc2VsZiwgcHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRIKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKHB1cnBvc2UpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiBzZWxmLl93aW5kb3dzX2NlcnRfc3RvcmVzOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzdG9yZW5hbWUsIHB1cnBvc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKworZGVmIGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILCAqLCBjYWZpbGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgU1NMQ29udGV4dCBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzLgorCisgICAgTk9URTogVGhlIHByb3RvY29sIGFuZCBzZXR0aW5ncyBtYXkgY2hhbmdlIGFueXRpbWUgd2l0aG91dCBwcmlvcgorICAgICAgICAgIGRlcHJlY2F0aW9uLiBUaGUgdmFsdWVzIHJlcHJlc2VudCBhIGZhaXIgYmFsYW5jZSBiZXR3ZWVuIG1heGltdW0KKyAgICAgICAgICBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwdXJwb3NlKQorICAgIGNvbnRleHQgPSBTU0xDb250ZXh0KFBST1RPQ09MX1RMU3YxKQorICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MgorICAgICMgZGlzYWJsZSBjb21wcmVzc2lvbiB0byBwcmV2ZW50IENSSU1FIGF0dGFja3MgKE9wZW5TU0wgMS4wKykKKyAgICBjb250ZXh0Lm9wdGlvbnMgfD0gZ2V0YXR0cihfc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKQorICAgICMgZGlzYWxsb3cgY2lwaGVycyB3aXRoIGtub3duIHZ1bG5lcmFiaWxpdGllcworICAgIGNvbnRleHQuc2V0X2NpcGhlcnMoX1JFU1RSSUNURURfQ0lQSEVSUykKKyAgICAjIHZlcmlmeSBjZXJ0cyBhbmQgaG9zdCBuYW1lIGluIGNsaWVudCBtb2RlCisgICAgaWYgcHVycG9zZSA9PSBQdXJwb3NlLlNFUlZFUl9BVVRIOgorICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gQ0VSVF9SRVFVSVJFRAorICAgICAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgIGlmIGNhZmlsZSBvciBjYXBhdGggb3IgY2FkYXRhOgorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCwgY2FkYXRhKQorICAgIGVsaWYgY29udGV4dC52ZXJpZnlfbW9kZSAhPSBDRVJUX05PTkU6CisgICAgICAgICMgbm8gZXhwbGljaXQgY2FmaWxlLCBjYXBhdGggb3IgY2FkYXRhIGJ1dCB0aGUgdmVyaWZ5IG1vZGUgaXMKKyAgICAgICAgIyBDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQuIExldCdzIHRyeSB0byBsb2FkIGRlZmF1bHQgc3lzdGVtCisgICAgICAgICMgcm9vdCBDQSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBnaXZlbiBwdXJwb3NlLiBUaGlzIG1heSBmYWlsIHNpbGVudGx5LgorICAgICAgICBjb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cyhwdXJwb3NlKQorICAgIHJldHVybiBjb250ZXh0CisKKworZGVmIF9jcmVhdGVfc3RkbGliX2NvbnRleHQocHJvdG9jb2w9UFJPVE9DT0xfU1NMdjIzLCAqLCBjZXJ0X3JlcXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPUZhbHNlLCBwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1Ob25lLCBrZXlmaWxlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSBTU0xDb250ZXh0IG9iamVjdCBmb3IgUHl0aG9uIHN0ZGxpYiBtb2R1bGVzCisKKyAgICBBbGwgUHl0aG9uIHN0ZGxpYiBtb2R1bGVzIHNoYWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSBTU0xDb250ZXh0CisgICAgb2JqZWN0cyBpbiBvcmRlciB0byBrZWVwIGNvbW1vbiBzZXR0aW5ncyBpbiBvbmUgcGxhY2UuIFRoZSBjb25maWd1cmF0aW9uCisgICAgaXMgbGVzcyByZXN0cmljdCB0aGFuIGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSdzIHRvIGluY3JlYXNlIGJhY2t3YXJkCisgICAgY29tcGF0aWJpbGl0eS4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwdXJwb3NlKQorCisgICAgY29udGV4dCA9IFNTTENvbnRleHQocHJvdG9jb2wpCisgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCisgICAgY29udGV4dC5vcHRpb25zIHw9IE9QX05PX1NTTHYyCisKKyAgICBpZiBjZXJ0X3JlcXMgaXMgbm90IE5vbmU6CisgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKKyAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gY2hlY2tfaG9zdG5hbWUKKworICAgIGlmIGtleWZpbGUgYW5kIG5vdCBjZXJ0ZmlsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgIGlmIGNlcnRmaWxlIG9yIGtleWZpbGU6CisgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlKQorCisgICAgIyBsb2FkIENBIHJvb3QgY2VydHMKKyAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGF0YToKKyAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgsIGNhZGF0YSkKKyAgICBlbGlmIGNvbnRleHQudmVyaWZ5X21vZGUgIT0gQ0VSVF9OT05FOgorICAgICAgICAjIG5vIGV4cGxpY2l0IGNhZmlsZSwgY2FwYXRoIG9yIGNhZGF0YSBidXQgdGhlIHZlcmlmeSBtb2RlIGlzCisgICAgICAgICMgQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVELiBMZXQncyB0cnkgdG8gbG9hZCBkZWZhdWx0IHN5c3RlbQorICAgICAgICAjIHJvb3QgQ0EgY2VydGlmaWNhdGVzIGZvciB0aGUgZ2l2ZW4gcHVycG9zZS4gVGhpcyBtYXkgZmFpbCBzaWxlbnRseS4KKyAgICAgICAgY29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZSkKKworICAgIHJldHVybiBjb250ZXh0CiAKIGNsYXNzIFNTTFNvY2tldChzb2NrZXQpOgogICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHN1YnR5cGUgb2Ygc29ja2V0LnNvY2tldCB0aGF0IHdyYXBzCkBAIC0yNzEsNyArNDU3LDcgQEAKICAgICAgICAgICAgICAgICAgX2NvbnRleHQ9Tm9uZSk6CiAKICAgICAgICAgaWYgX2NvbnRleHQ6Ci0gICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBfY29udGV4dAorICAgICAgICAgICAgc2VsZi5fY29udGV4dCA9IF9jb250ZXh0CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZXJ2ZXJfc2lkZSBhbmQgbm90IGNlcnRmaWxlOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIGZvciBzZXJ2ZXItc2lkZSAiCkBAIC0yODAsMTYgKzQ2NiwxNiBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIikKICAgICAgICAgICAgIGlmIGNlcnRmaWxlIGFuZCBub3Qga2V5ZmlsZToKICAgICAgICAgICAgICAgICBrZXlmaWxlID0gY2VydGZpbGUKLSAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IFNTTENvbnRleHQoc3NsX3ZlcnNpb24pCi0gICAgICAgICAgICBzZWxmLmNvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQgPSBTU0xDb250ZXh0KHNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5fY29udGV4dC52ZXJpZnlfbW9kZSA9IGNlcnRfcmVxcwogICAgICAgICAgICAgaWYgY2FfY2VydHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYV9jZXJ0cykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYV9jZXJ0cykKICAgICAgICAgICAgIGlmIGNlcnRmaWxlOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCiAgICAgICAgICAgICBpZiBucG5fcHJvdG9jb2xzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfbnBuX3Byb3RvY29scyhucG5fcHJvdG9jb2xzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQuc2V0X25wbl9wcm90b2NvbHMobnBuX3Byb3RvY29scykKICAgICAgICAgICAgIGlmIGNpcGhlcnM6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5zZXRfY2lwaGVycyhjaXBoZXJzKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRfcmVxcyA9IGNlcnRfcmVxcwpAQCAtMjk5LDExICs0ODUsMTcgQEAKICAgICAgICAgaWYgc2VydmVyX3NpZGUgYW5kIHNlcnZlcl9ob3N0bmFtZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNlcnZlcl9ob3N0bmFtZSBjYW4gb25seSBiZSBzcGVjaWZpZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gY2xpZW50IG1vZGUiKQorICAgICAgICBpZiBzZWxmLl9jb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBub3Qgc2VydmVyX2hvc3RuYW1lOgorICAgICAgICAgICAgaWYgSEFTX1NOSToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSByZXF1aXJlcyBzZXJ2ZXJfaG9zdG5hbWUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSByZXF1aXJlcyBzZXJ2ZXJfaG9zdG5hbWUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidXQgaXQncyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgT3BlblNTTCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlicmFyeSIpCiAgICAgICAgIHNlbGYuc2VydmVyX3NpZGUgPSBzZXJ2ZXJfc2lkZQogICAgICAgICBzZWxmLnNlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQogICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0ID0gZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QKICAgICAgICAgc2VsZi5zdXBwcmVzc19yYWdnZWRfZW9mcyA9IHN1cHByZXNzX3JhZ2dlZF9lb2ZzCi0gICAgICAgIGNvbm5lY3RlZCA9IEZhbHNlCiAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29jay5mYW1pbHksCkBAIC0zMTEsMjcgKzUwMywyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPXNvY2sucHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5vPXNvY2suZmlsZW5vKCkpCiAgICAgICAgICAgICBzZWxmLnNldHRpbWVvdXQoc29jay5nZXR0aW1lb3V0KCkpCi0gICAgICAgICAgICAjIHNlZSBpZiBpdCdzIGNvbm5lY3RlZAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvY2suZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldF9lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIHNvY2suZGV0YWNoKCkKICAgICAgICAgZWxpZiBmaWxlbm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgZmlsZW5vPWZpbGVubykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQogCisgICAgICAgICMgU2VlIGlmIHdlIGFyZSBjb25uZWN0ZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5nZXRwZWVybmFtZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBjb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29ubmVjdGVkID0gVHJ1ZQorCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gY29ubmVjdGVkCiAgICAgICAgIGlmIGNvbm5lY3RlZDoKICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBTU0wgb2JqZWN0CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBzZWxmLl9jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgICAgICBpZiBkb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuZ2V0dGltZW91dCgpCkBAIC0zNDAsOSArNTM0LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkb19oYW5kc2hha2Vfb25fY29ubmVjdCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBmb3Igbm9uLWJsb2NraW5nIHNvY2tldHMiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCiAKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UgeAorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRleHQKKworICAgIEBjb250ZXh0LnNldHRlcgorICAgIGRlZiBjb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbnRleHQgPSBjdHgKKyAgICAgICAgc2VsZi5fc3Nsb2JqLmNvbnRleHQgPSBjdHgKIAogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkKCJDYW4ndCBkdXAoKSAlcyBpbnN0YW5jZXMiICUKQEAgLTM1MiwxMSArNTU1LDIxIEBACiAgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGhlcmUgaWYgeW91IHdpc2ggdG8gY2hlY2sgZm9yIHNwdXJpb3VzIGNsb3NlcwogICAgICAgICBwYXNzCiAKKyAgICBkZWYgX2NoZWNrX2Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgICMgZ2V0cGVlcm5hbWUoKSB3aWxsIHJhaXNlIEVOT1RDT05OIGlmIHRoZSBzb2NrZXQgaXMgcmVhbGx5CisgICAgICAgICAgICAjIG5vdCBjb25uZWN0ZWQ7IG5vdGUgdGhhdCB3ZSBjYW4gYmUgY29ubmVjdGVkIGV2ZW4gd2l0aG91dAorICAgICAgICAgICAgIyBfY29ubmVjdGVkIGJlaW5nIHNldCwgZS5nLiBpZiBjb25uZWN0KCkgZmlyc3QgcmV0dXJuZWQKKyAgICAgICAgICAgICMgRUFHQUlOLgorICAgICAgICAgICAgc2VsZi5nZXRwZWVybmFtZSgpCisKICAgICBkZWYgcmVhZChzZWxmLCBsZW49MCwgYnVmZmVyPU5vbmUpOgogICAgICAgICAiIiJSZWFkIHVwIHRvIExFTiBieXRlcyBhbmQgcmV0dXJuIHRoZW0uCiAgICAgICAgIFJldHVybiB6ZXJvLWxlbmd0aCBzdHJpbmcgb24gRU9GLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlYWQgb24gY2xvc2VkIG9yIHVud3JhcHBlZCBTU0wgc29ja2V0LiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIGJ1ZmZlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLnJlYWQobGVuLCBidWZmZXIpCkBAIC0zNzcsNiArNTkwLDggQEAKICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIG9mIERBVEEgYWN0dWFsbHkgdHJhbnNtaXR0ZWQuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBpZiBub3Qgc2VsZi5fc3Nsb2JqOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiV3JpdGUgb24gY2xvc2VkIG9yIHVud3JhcHBlZCBTU0wgc29ja2V0LiIpCiAgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKIAogICAgIGRlZiBnZXRwZWVyY2VydChzZWxmLCBiaW5hcnlfZm9ybT1GYWxzZSk6CkBAIC0zODYsNiArNjAxLDcgQEAKICAgICAgICAgY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLCBidXQgbm90IHZhbGlkYXRlZC4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2NoZWNrX2Nvbm5lY3RlZCgpCiAgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoucGVlcl9jZXJ0aWZpY2F0ZShiaW5hcnlfZm9ybSkKIAogICAgIGRlZiBzZWxlY3RlZF9ucG5fcHJvdG9jb2woc2VsZik6CkBAIC00MTYsMTggKzYzMiwxNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJub24temVybyBmbGFncyBub3QgYWxsb3dlZCBpbiBjYWxscyB0byBzZW5kKCkgb24gJXMiICUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18pCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTU0xFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgICAgICBpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQorICAgICAgICAgICAgZXhjZXB0IFNTTEVycm9yIGFzIHg6CisgICAgICAgICAgICAgICAgaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgZWxpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHYKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuc2VuZChzZWxmLCBkYXRhLCBmbGFncykKIApAQCAtNTM1LDEyICs3NTAsMTEgQEAKIAogICAgIGRlZiBfcmVhbF9jbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQotICAgICAgICAjIHNlbGYuX2Nsb3NlZCA9IFRydWUKICAgICAgICAgc29ja2V0Ll9yZWFsX2Nsb3NlKHNlbGYpCiAKICAgICBkZWYgZG9faGFuZHNoYWtlKHNlbGYsIGJsb2NrPUZhbHNlKToKICAgICAgICAgIiIiUGVyZm9ybSBhIFRMUy9TU0wgaGFuZHNoYWtlLiIiIgotCisgICAgICAgIHNlbGYuX2NoZWNrX2Nvbm5lY3RlZCgpCiAgICAgICAgIHRpbWVvdXQgPSBzZWxmLmdldHRpbWVvdXQoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiB0aW1lb3V0ID09IDAuMCBhbmQgYmxvY2s6CkBAIC01NDksNiArNzYzLDEyIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnNldHRpbWVvdXQodGltZW91dCkKIAorICAgICAgICBpZiBzZWxmLmNvbnRleHQuY2hlY2tfaG9zdG5hbWU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaG9zdG5hbWU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2hlY2tfaG9zdG5hbWUgbmVlZHMgc2VydmVyX2hvc3RuYW1lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCIpCisgICAgICAgICAgICBtYXRjaF9ob3N0bmFtZShzZWxmLmdldHBlZXJjZXJ0KCksIHNlbGYuc2VydmVyX2hvc3RuYW1lKQorCiAgICAgZGVmIF9yZWFsX2Nvbm5lY3Qoc2VsZiwgYWRkciwgY29ubmVjdF9leCk6CiAgICAgICAgIGlmIHNlbGYuc2VydmVyX3NpZGU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBjb25uZWN0IGluIHNlcnZlci1zaWRlIG1vZGUiKQpAQCAtNTY0LDExICs3ODQsMTEgQEAKICAgICAgICAgICAgICAgICByYyA9IE5vbmUKICAgICAgICAgICAgICAgICBzb2NrZXQuY29ubmVjdChzZWxmLCBhZGRyKQogICAgICAgICAgICAgaWYgbm90IHJjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgICAgICBpZiBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuIHJjCi0gICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3I6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCiAgICAgICAgICAgICByYWlzZQogCkBAIC02NjYsMTUgKzg4NiwxNiBAQAogICAgIElmICdzc2xfdmVyc2lvbicgaXMgc3BlY2lmaWVkLCB1c2UgaXQgaW4gdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdC4iIiIKIAogICAgIGhvc3QsIHBvcnQgPSBhZGRyCi0gICAgaWYgKGNhX2NlcnRzIGlzIG5vdCBOb25lKToKKyAgICBpZiBjYV9jZXJ0cyBpcyBub3QgTm9uZToKICAgICAgICAgY2VydF9yZXFzID0gQ0VSVF9SRVFVSVJFRAogICAgIGVsc2U6CiAgICAgICAgIGNlcnRfcmVxcyA9IENFUlRfTk9ORQotICAgIHMgPSBjcmVhdGVfY29ubmVjdGlvbihhZGRyKQotICAgIHMgPSB3cmFwX3NvY2tldChzLCBzc2xfdmVyc2lvbj1zc2xfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPWNlcnRfcmVxcywgY2FfY2VydHM9Y2FfY2VydHMpCi0gICAgZGVyY2VydCA9IHMuZ2V0cGVlcmNlcnQoVHJ1ZSkKLSAgICBzLmNsb3NlKCkKKyAgICBjb250ZXh0ID0gX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2xfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9Y2VydF9yZXFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1jYV9jZXJ0cykKKyAgICB3aXRoICBjcmVhdGVfY29ubmVjdGlvbihhZGRyKSBhcyBzb2NrOgorICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29jaykgYXMgc3Nsc29jazoKKyAgICAgICAgICAgIGRlcmNlcnQgPSBzc2xzb2NrLmdldHBlZXJjZXJ0KFRydWUpCiAgICAgcmV0dXJuIERFUl9jZXJ0X3RvX1BFTV9jZXJ0KGRlcmNlcnQpCiAKIGRlZiBnZXRfcHJvdG9jb2xfbmFtZShwcm90b2NvbF9jb2RlKToKZGlmZiAtLWdpdCBhL0xpYi9zdGF0LnB5IGIvTGliL3N0YXQucHkKaW5kZXggNzA0YWRmZS4uM2VlY2MzZSAxMDA2NDQKLS0tIGEvTGliL3N0YXQucHkKKysrIGIvTGliL3N0YXQucHkKQEAgLTE0NywzICsxNDcsOSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGVybS5hcHBlbmQoIi0iKQogICAgIHJldHVybiAiIi5qb2luKHBlcm0pCisKKyMgSWYgYXZhaWxhYmxlLCB1c2UgQyBpbXBsZW1lbnRhdGlvbgordHJ5OgorICAgIGZyb20gX3N0YXQgaW1wb3J0ICoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvc3RhdGlzdGljcy5weSBiL0xpYi9zdGF0aXN0aWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2N2E2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvc3RhdGlzdGljcy5weQpAQCAtMCwwICsxLDYxMCBAQAorIyMgIE1vZHVsZSBzdGF0aXN0aWNzLnB5CisjIworIyMgIENvcHlyaWdodCAoYykgMjAxMyBTdGV2ZW4gRCdBcHJhbm8gPHN0ZXZlK3B5dGhvbkBwZWFyd29vZC5pbmZvPi4KKyMjCisjIyAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIyAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyMgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyMKKyMjICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMjCisjIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyMgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyMgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisKKyIiIgorQmFzaWMgc3RhdGlzdGljcyBtb2R1bGUuCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgc3RhdGlzdGljcyBvZiBkYXRhLCBpbmNsdWRpbmcKK2F2ZXJhZ2VzLCB2YXJpYW5jZSwgYW5kIHN0YW5kYXJkIGRldmlhdGlvbi4KKworQ2FsY3VsYXRpbmcgYXZlcmFnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGdW5jdGlvbiAgICAgICAgICAgIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbWVhbiAgICAgICAgICAgICAgICBBcml0aG1ldGljIG1lYW4gKGF2ZXJhZ2UpIG9mIGRhdGEuCittZWRpYW4gICAgICAgICAgICAgIE1lZGlhbiAobWlkZGxlIHZhbHVlKSBvZiBkYXRhLgorbWVkaWFuX2xvdyAgICAgICAgICBMb3cgbWVkaWFuIG9mIGRhdGEuCittZWRpYW5faGlnaCAgICAgICAgIEhpZ2ggbWVkaWFuIG9mIGRhdGEuCittZWRpYW5fZ3JvdXBlZCAgICAgIE1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBncm91cGVkIGRhdGEuCittb2RlICAgICAgICAgICAgICAgIE1vZGUgKG1vc3QgY29tbW9uIHZhbHVlKSBvZiBkYXRhLgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2FsY3VsYXRlIHRoZSBhcml0aG1ldGljIG1lYW4gKCJ0aGUgYXZlcmFnZSIpIG9mIGRhdGE6CisKKz4+PiBtZWFuKFstMS4wLCAyLjUsIDMuMjUsIDUuNzVdKQorMi42MjUKKworCitDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIG1lZGlhbiBvZiBkaXNjcmV0ZSBkYXRhOgorCis+Pj4gbWVkaWFuKFsyLCAzLCA0LCA1XSkKKzMuNQorCisKK0NhbGN1bGF0ZSB0aGUgbWVkaWFuLCBvciA1MHRoIHBlcmNlbnRpbGUsIG9mIGRhdGEgZ3JvdXBlZCBpbnRvIGNsYXNzIGludGVydmFscworY2VudHJlZCBvbiB0aGUgZGF0YSB2YWx1ZXMgcHJvdmlkZWQuIEUuZy4gaWYgeW91ciBkYXRhIHBvaW50cyBhcmUgcm91bmRlZCB0bwordGhlIG5lYXJlc3Qgd2hvbGUgbnVtYmVyOgorCis+Pj4gbWVkaWFuX2dyb3VwZWQoWzIsIDIsIDMsIDMsIDMsIDRdKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUworMi44MzMzMzMzMzMzLi4uCisKK1RoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGluIHRoaXMgd2F5OiB5b3UgaGF2ZSB0d28gZGF0YSBwb2ludHMgaW4gdGhlIGNsYXNzCitpbnRlcnZhbCAxLjUtMi41LCB0aHJlZSBkYXRhIHBvaW50cyBpbiB0aGUgY2xhc3MgaW50ZXJ2YWwgMi41LTMuNSwgYW5kIG9uZSBpbgordGhlIGNsYXNzIGludGVydmFsIDMuNS00LjUuIFRoZSBtZWRpYW4gb2YgdGhlc2UgZGF0YSBwb2ludHMgaXMgMi44MzMzLi4uCisKKworQ2FsY3VsYXRpbmcgdmFyaWFiaWxpdHkgb3Igc3ByZWFkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Z1bmN0aW9uICAgICAgICAgICAgRGVzY3JpcHRpb24KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitwdmFyaWFuY2UgICAgICAgICAgIFBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgZGF0YS4KK3ZhcmlhbmNlICAgICAgICAgICAgU2FtcGxlIHZhcmlhbmNlIG9mIGRhdGEuCitwc3RkZXYgICAgICAgICAgICAgIFBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCitzdGRldiAgICAgICAgICAgICAgIFNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NhbGN1bGF0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIHNhbXBsZSBkYXRhOgorCis+Pj4gc3RkZXYoWzIuNSwgMy4yNSwgNS41LCAxMS4yNSwgMTEuNzVdKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUworNC4zODk2MTg0MzQ0NC4uLgorCitJZiB5b3UgaGF2ZSBwcmV2aW91c2x5IGNhbGN1bGF0ZWQgdGhlIG1lYW4sIHlvdSBjYW4gcGFzcyBpdCBhcyB0aGUgb3B0aW9uYWwKK3NlY29uZCBhcmd1bWVudCB0byB0aGUgZm91ciAic3ByZWFkIiBmdW5jdGlvbnMgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworPj4+IGRhdGEgPSBbMSwgMiwgMiwgNCwgNCwgNCwgNSwgNl0KKz4+PiBtdSA9IG1lYW4oZGF0YSkKKz4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisyLjUKKworCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKK0Egc2luZ2xlIGV4Y2VwdGlvbiBpcyBkZWZpbmVkOiBTdGF0aXN0aWNzRXJyb3IgaXMgYSBzdWJjbGFzcyBvZiBWYWx1ZUVycm9yLgorCisiIiIKKworX19hbGxfXyA9IFsgJ1N0YXRpc3RpY3NFcnJvcicsCisgICAgICAgICAgICAncHN0ZGV2JywgJ3B2YXJpYW5jZScsICdzdGRldicsICd2YXJpYW5jZScsCisgICAgICAgICAgICAnbWVkaWFuJywgICdtZWRpYW5fbG93JywgJ21lZGlhbl9oaWdoJywgJ21lZGlhbl9ncm91cGVkJywKKyAgICAgICAgICAgICdtZWFuJywgJ21vZGUnLAorICAgICAgICAgIF0KKworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBtYXRoCisKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisKKworIyA9PT0gRXhjZXB0aW9ucyA9PT0KKworY2xhc3MgU3RhdGlzdGljc0Vycm9yKFZhbHVlRXJyb3IpOgorICAgIHBhc3MKKworCisjID09PSBQcml2YXRlIHV0aWxpdGllcyA9PT0KKworZGVmIF9zdW0oZGF0YSwgc3RhcnQ9MCk6CisgICAgIiIiX3N1bShkYXRhIFssIHN0YXJ0XSkgLT4gdmFsdWUKKworICAgIFJldHVybiBhIGhpZ2gtcHJlY2lzaW9uIHN1bSBvZiB0aGUgZ2l2ZW4gbnVtZXJpYyBkYXRhLiBJZiBvcHRpb25hbAorICAgIGFyZ3VtZW50IGBgc3RhcnRgYCBpcyBnaXZlbiwgaXQgaXMgYWRkZWQgdG8gdGhlIHRvdGFsLiBJZiBgYGRhdGFgYCBpcworICAgIGVtcHR5LCBgYHN0YXJ0YGAgKGRlZmF1bHRpbmcgdG8gMCkgaXMgcmV0dXJuZWQuCisKKworICAgIEV4YW1wbGVzCisgICAgLS0tLS0tLS0KKworICAgID4+PiBfc3VtKFszLCAyLjI1LCA0LjUsIC0wLjUsIDEuMF0sIDAuNzUpCisgICAgMTEuMAorCisgICAgU29tZSBzb3VyY2VzIG9mIHJvdW5kLW9mZiBlcnJvciB3aWxsIGJlIGF2b2lkZWQ6CisKKyAgICA+Pj4gX3N1bShbMWU1MCwgMSwgLTFlNTBdICogMTAwMCkgICMgQnVpbHQtaW4gc3VtIHJldHVybnMgemVyby4KKyAgICAxMDAwLjAKKworICAgIEZyYWN0aW9ucyBhbmQgRGVjaW1hbHMgYXJlIGFsc28gc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IF9zdW0oW0YoMiwgMyksIEYoNywgNSksIEYoMSwgNCksIEYoNSwgNildKQorICAgIEZyYWN0aW9uKDYzLCAyMCkKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBkYXRhID0gW0QoIjAuMTM3NSIpLCBEKCIwLjIxMDgiKSwgRCgiMC4zMDYxIiksIEQoIjAuMDQxOSIpXQorICAgID4+PiBfc3VtKGRhdGEpCisgICAgRGVjaW1hbCgnMC42OTYzJykKKworICAgICIiIgorICAgIG4sIGQgPSBfZXhhY3RfcmF0aW8oc3RhcnQpCisgICAgVCA9IHR5cGUoc3RhcnQpCisgICAgcGFydGlhbHMgPSB7ZDogbn0gICMgbWFwIHtkZW5vbWluYXRvcjogc3VtIG9mIG51bWVyYXRvcnN9CisgICAgIyBNaWNyby1vcHRpbWl6YXRpb25zLgorICAgIGNvZXJjZV90eXBlcyA9IF9jb2VyY2VfdHlwZXMKKyAgICBleGFjdF9yYXRpbyA9IF9leGFjdF9yYXRpbworICAgIHBhcnRpYWxzX2dldCA9IHBhcnRpYWxzLmdldAorICAgICMgQWRkIG51bWVyYXRvcnMgZm9yIGVhY2ggZGVub21pbmF0b3IsIGFuZCB0cmFjayB0aGUgImN1cnJlbnQiIHR5cGUuCisgICAgZm9yIHggaW4gZGF0YToKKyAgICAgICAgVCA9IF9jb2VyY2VfdHlwZXMoVCwgdHlwZSh4KSkKKyAgICAgICAgbiwgZCA9IGV4YWN0X3JhdGlvKHgpCisgICAgICAgIHBhcnRpYWxzW2RdID0gcGFydGlhbHNfZ2V0KGQsIDApICsgbgorICAgIGlmIE5vbmUgaW4gcGFydGlhbHM6CisgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKFQsIChmbG9hdCwgRGVjaW1hbCkpCisgICAgICAgIGFzc2VydCBub3QgbWF0aC5pc2Zpbml0ZShwYXJ0aWFsc1tOb25lXSkKKyAgICAgICAgcmV0dXJuIFQocGFydGlhbHNbTm9uZV0pCisgICAgdG90YWwgPSBGcmFjdGlvbigpCisgICAgZm9yIGQsIG4gaW4gc29ydGVkKHBhcnRpYWxzLml0ZW1zKCkpOgorICAgICAgICB0b3RhbCArPSBGcmFjdGlvbihuLCBkKQorICAgIGlmIGlzc3ViY2xhc3MoVCwgaW50KToKKyAgICAgICAgYXNzZXJ0IHRvdGFsLmRlbm9taW5hdG9yID09IDEKKyAgICAgICAgcmV0dXJuIFQodG90YWwubnVtZXJhdG9yKQorICAgIGlmIGlzc3ViY2xhc3MoVCwgRGVjaW1hbCk6CisgICAgICAgIHJldHVybiBUKHRvdGFsLm51bWVyYXRvcikvdG90YWwuZGVub21pbmF0b3IKKyAgICByZXR1cm4gVCh0b3RhbCkKKworCitkZWYgX2V4YWN0X3JhdGlvKHgpOgorICAgICIiIkNvbnZlcnQgUmVhbCBudW1iZXIgeCBleGFjdGx5IHRvIChudW1lcmF0b3IsIGRlbm9taW5hdG9yKSBwYWlyLgorCisgICAgPj4+IF9leGFjdF9yYXRpbygwLjI1KQorICAgICgxLCA0KQorCisgICAgeCBpcyBleHBlY3RlZCB0byBiZSBhbiBpbnQsIEZyYWN0aW9uLCBEZWNpbWFsIG9yIGZsb2F0LgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBpbnQsIEZyYWN0aW9uCisgICAgICAgICAgICByZXR1cm4gKHgubnVtZXJhdG9yLCB4LmRlbm9taW5hdG9yKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGZsb2F0CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHguYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBEZWNpbWFsCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2RlY2ltYWxfdG9fcmF0aW8oeCkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBjb252ZXJ0IHR5cGUgJ3t9JyB0byBudW1lcmF0b3IvZGVub21pbmF0b3IiCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cuZm9ybWF0KHR5cGUoeCkuX19uYW1lX18pKSBmcm9tIE5vbmUKKyAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAjIElORiBvciBOQU4KKyAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgIyBEZWNpbWFsIHNpZ25hbGxpbmcgTkFOcyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGZsb2F0IDotKAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBEZWNpbWFsKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IHguaXNfZmluaXRlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBtYXRoLmlzZmluaXRlKHgpCisgICAgICAgIHJldHVybiAoeCwgTm9uZSkKKworCisjIEZJWE1FIFRoaXMgaXMgZmFzdGVyIHRoYW4gRnJhY3Rpb24uZnJvbV9kZWNpbWFsLCBidXQgc3RpbGwgdG9vIHNsb3cuCitkZWYgX2RlY2ltYWxfdG9fcmF0aW8oZCk6CisgICAgIiIiQ29udmVydCBEZWNpbWFsIGQgdG8gZXhhY3QgaW50ZWdlciByYXRpbyAobnVtZXJhdG9yLCBkZW5vbWluYXRvcikuCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgPj4+IF9kZWNpbWFsX3RvX3JhdGlvKERlY2ltYWwoIjIuNiIpKQorICAgICgyNiwgMTApCisKKyAgICAiIiIKKyAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGQuYXNfdHVwbGUoKQorICAgIGlmIGV4cCBpbiAoJ0YnLCAnbicsICdOJyk6ICAjIElORiwgTkFOLCBzTkFOCisgICAgICAgIGFzc2VydCBub3QgZC5pc19maW5pdGUoKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgbnVtID0gMAorICAgIGZvciBkaWdpdCBpbiBkaWdpdHM6CisgICAgICAgIG51bSA9IG51bSoxMCArIGRpZ2l0CisgICAgaWYgc2lnbjoKKyAgICAgICAgbnVtID0gLW51bQorICAgIGRlbiA9IDEwKiotZXhwCisgICAgcmV0dXJuIChudW0sIGRlbikKKworCitkZWYgX2NvZXJjZV90eXBlcyhUMSwgVDIpOgorICAgICIiIkNvZXJjZSB0eXBlcyBUMSBhbmQgVDIgdG8gYSBjb21tb24gdHlwZS4KKworICAgID4+PiBfY29lcmNlX3R5cGVzKGludCwgZmxvYXQpCisgICAgPGNsYXNzICdmbG9hdCc+CisKKyAgICBDb2VyY2lvbiBpcyBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoaXMgdGFibGUsIHdoZXJlICJOL0EiIG1lYW5zCisgICAgdGhhdCBhIFR5cGVFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgICAgKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKKyAgICB8ICAgICAgICAgIHwgaW50ICAgICAgIHwgRnJhY3Rpb24gIHwgRGVjaW1hbCAgIHwgZmxvYXQgICAgfAorICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCisgICAgfCBpbnQgICAgICB8IGludCAgICAgICB8IEZyYWN0aW9uICB8IERlY2ltYWwgICB8IGZsb2F0ICAgIHwKKyAgICB8IEZyYWN0aW9uIHwgRnJhY3Rpb24gIHwgRnJhY3Rpb24gIHwgTi9BICAgICAgIHwgZmxvYXQgICAgfAorICAgIHwgRGVjaW1hbCAgfCBEZWNpbWFsICAgfCBOL0EgICAgICAgfCBEZWNpbWFsICAgfCBmbG9hdCAgICB8CisgICAgfCBmbG9hdCAgICB8IGZsb2F0ICAgICB8IGZsb2F0ICAgICB8IGZsb2F0ICAgICB8IGZsb2F0ICAgIHwKKyAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKworCisgICAgU3ViY2xhc3NlcyB0cnVtcCB0aGVpciBwYXJlbnQgY2xhc3M7IHR3byBzdWJjbGFzc2VzIG9mIHRoZSBzYW1lCisgICAgYmFzZSBjbGFzcyB3aWxsIGJlIGNvZXJjZWQgdG8gdGhlIHNlY29uZCBvZiB0aGUgdHdvLgorCisgICAgIiIiCisgICAgIyBHZXQgdGhlIGNvbW1vbi9mYXN0IGNhc2VzIG91dCBvZiB0aGUgd2F5IGZpcnN0LgorICAgIGlmIFQxIGlzIFQyOiByZXR1cm4gVDEKKyAgICBpZiBUMSBpcyBpbnQ6IHJldHVybiBUMgorICAgIGlmIFQyIGlzIGludDogcmV0dXJuIFQxCisgICAgIyBTdWJjbGFzc2VzIHRydW1wIHRoZWlyIHBhcmVudCBjbGFzcy4KKyAgICBpZiBpc3N1YmNsYXNzKFQyLCBUMSk6IHJldHVybiBUMgorICAgIGlmIGlzc3ViY2xhc3MoVDEsIFQyKTogcmV0dXJuIFQxCisgICAgIyBGbG9hdHMgdHJ1bXAgZXZlcnl0aGluZyBlbHNlLgorICAgIGlmIGlzc3ViY2xhc3MoVDIsIGZsb2F0KTogcmV0dXJuIFQyCisgICAgaWYgaXNzdWJjbGFzcyhUMSwgZmxvYXQpOiByZXR1cm4gVDEKKyAgICAjIFN1YmNsYXNzZXMgb2YgdGhlIHNhbWUgYmFzZSBjbGFzcyBnaXZlIHByaW9yaXR5IHRvIHRoZSBzZWNvbmQuCisgICAgaWYgVDEuX19iYXNlX18gaXMgVDIuX19iYXNlX186IHJldHVybiBUMgorICAgICMgT3RoZXJ3aXNlLCBqdXN0IGdpdmUgdXAuCisgICAgcmFpc2UgVHlwZUVycm9yKCdjYW5ub3QgY29lcmNlIHR5cGVzICVyIGFuZCAlcicgJSAoVDEsIFQyKSkKKworCitkZWYgX2NvdW50cyhkYXRhKToKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignTm9uZSBpcyBub3QgaXRlcmFibGUnKQorICAgIHRhYmxlID0gY29sbGVjdGlvbnMuQ291bnRlcihkYXRhKS5tb3N0X2NvbW1vbigpCisgICAgaWYgbm90IHRhYmxlOgorICAgICAgICByZXR1cm4gdGFibGUKKyAgICAjIEV4dHJhY3QgdGhlIHZhbHVlcyB3aXRoIHRoZSBoaWdoZXN0IGZyZXF1ZW5jeS4KKyAgICBtYXhmcmVxID0gdGFibGVbMF1bMV0KKyAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4odGFibGUpKToKKyAgICAgICAgaWYgdGFibGVbaV1bMV0gIT0gbWF4ZnJlcToKKyAgICAgICAgICAgIHRhYmxlID0gdGFibGVbOmldCisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0YWJsZQorCisKKyMgPT09IE1lYXN1cmVzIG9mIGNlbnRyYWwgdGVuZGVuY3kgKGF2ZXJhZ2VzKSA9PT0KKworZGVmIG1lYW4oZGF0YSk6CisgICAgIiIiUmV0dXJuIHRoZSBzYW1wbGUgYXJpdGhtZXRpYyBtZWFuIG9mIGRhdGEuCisKKyAgICA+Pj4gbWVhbihbMSwgMiwgMywgNCwgNF0pCisgICAgMi44CisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gbWVhbihbRigzLCA3KSwgRigxLCAyMSksIEYoNSwgMyksIEYoMSwgMyldKQorICAgIEZyYWN0aW9uKDEzLCAyMSkKKworICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgID4+PiBtZWFuKFtEKCIwLjUiKSwgRCgiMC43NSIpLCBEKCIwLjYyNSIpLCBEKCIwLjM3NSIpXSkKKyAgICBEZWNpbWFsKCcwLjU2MjUnKQorCisgICAgSWYgYGBkYXRhYGAgaXMgZW1wdHksIFN0YXRpc3RpY3NFcnJvciB3aWxsIGJlIHJhaXNlZC4KKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAxOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ21lYW4gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGRhdGEgcG9pbnQnKQorICAgIHJldHVybiBfc3VtKGRhdGEpL24KKworCisjIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3YXlzIHRvIGNhbGN1bGF0ZSBtZWRpYW5zIHdpdGhvdXQgc29ydGluZz8gUXVpY2tzZWxlY3Q/CitkZWYgbWVkaWFuKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIG51bWVyaWMgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHJldHVybiB0aGUgbWlkZGxlIGRhdGEgcG9pbnQuCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIGV2ZW4sIHRoZSBtZWRpYW4gaXMgaW50ZXJwb2xhdGVkIGJ5CisgICAgdGFraW5nIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlczoKKworICAgID4+PiBtZWRpYW4oWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1LCA3XSkKKyAgICA0LjAKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgaWYgbiUyID09IDE6CisgICAgICAgIHJldHVybiBkYXRhW24vLzJdCisgICAgZWxzZToKKyAgICAgICAgaSA9IG4vLzIKKyAgICAgICAgcmV0dXJuIChkYXRhW2kgLSAxXSArIGRhdGFbaV0pLzIKKworCitkZWYgbWVkaWFuX2xvdyhkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIGxvdyBtZWRpYW4gb2YgbnVtZXJpYyBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBzbWFsbGVyIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDUsIDddKQorICAgIDMKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgaWYgbiUyID09IDE6CisgICAgICAgIHJldHVybiBkYXRhW24vLzJdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMiAtIDFdCisKKworZGVmIG1lZGlhbl9oaWdoKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgaGlnaCBtZWRpYW4gb2YgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgV2hlbiBpdCBpcyBldmVuLCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNSwgN10pCisgICAgNQorCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICByZXR1cm4gZGF0YVtuLy8yXQorCisKK2RlZiBtZWRpYW5fZ3JvdXBlZChkYXRhLCBpbnRlcnZhbD0xKToKKyAgICAiIiIiUmV0dXJuIHRoZSA1MHRoIHBlcmNlbnRpbGUgKG1lZGlhbikgb2YgZ3JvdXBlZCBjb250aW51b3VzIGRhdGEuCisKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDIsIDIsIDMsIDQsIDQsIDQsIDQsIDQsIDVdKQorICAgIDMuNworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbNTIsIDUyLCA1MywgNTRdKQorICAgIDUyLjUKKworICAgIFRoaXMgY2FsY3VsYXRlcyB0aGUgbWVkaWFuIGFzIHRoZSA1MHRoIHBlcmNlbnRpbGUsIGFuZCBzaG91bGQgYmUKKyAgICB1c2VkIHdoZW4geW91ciBkYXRhIGlzIGNvbnRpbnVvdXMgYW5kIGdyb3VwZWQuIEluIHRoZSBhYm92ZSBleGFtcGxlLAorICAgIHRoZSB2YWx1ZXMgMSwgMiwgMywgZXRjLiBhY3R1YWxseSByZXByZXNlbnQgdGhlIG1pZHBvaW50IG9mIGNsYXNzZXMKKyAgICAwLjUtMS41LCAxLjUtMi41LCAyLjUtMy41LCBldGMuIFRoZSBtaWRkbGUgdmFsdWUgZmFsbHMgc29tZXdoZXJlIGluCisgICAgY2xhc3MgMy41LTQuNSwgYW5kIGludGVycG9sYXRpb24gaXMgdXNlZCB0byBlc3RpbWF0ZSBpdC4KKworICAgIE9wdGlvbmFsIGFyZ3VtZW50IGBgaW50ZXJ2YWxgYCByZXByZXNlbnRzIHRoZSBjbGFzcyBpbnRlcnZhbCwgYW5kCisgICAgZGVmYXVsdHMgdG8gMS4gQ2hhbmdpbmcgdGhlIGNsYXNzIGludGVydmFsIG5hdHVyYWxseSB3aWxsIGNoYW5nZSB0aGUKKyAgICBpbnRlcnBvbGF0ZWQgNTB0aCBwZXJjZW50aWxlIHZhbHVlOgorCisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MSkKKyAgICAzLjI1CisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MikKKyAgICAzLjUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgd2hldGhlciB0aGUgZGF0YSBwb2ludHMgYXJlIGF0IGxlYXN0CisgICAgYGBpbnRlcnZhbGBgIGFwYXJ0LgorICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgZWxpZiBuID09IDE6CisgICAgICAgIHJldHVybiBkYXRhWzBdCisgICAgIyBGaW5kIHRoZSB2YWx1ZSBhdCB0aGUgbWlkcG9pbnQuIFJlbWVtYmVyIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlCisgICAgIyBjZW50cmUgb2YgdGhlIGNsYXNzIGludGVydmFsLgorICAgIHggPSBkYXRhW24vLzJdCisgICAgZm9yIG9iaiBpbiAoeCwgaW50ZXJ2YWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgbnVtYmVyIGJ1dCBnb3QgJXInICUgb2JqKQorICAgIHRyeToKKyAgICAgICAgTCA9IHggLSBpbnRlcnZhbC8yICAjIFRoZSBsb3dlciBsaW1pdCBvZiB0aGUgbWVkaWFuIGludGVydmFsLgorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICMgTWl4ZWQgdHlwZS4gRm9yIG5vdyB3ZSBqdXN0IGNvZXJjZSB0byBmbG9hdC4KKyAgICAgICAgTCA9IGZsb2F0KHgpIC0gZmxvYXQoaW50ZXJ2YWwpLzIKKyAgICBjZiA9IGRhdGEuaW5kZXgoeCkgICMgTnVtYmVyIG9mIHZhbHVlcyBiZWxvdyB0aGUgbWVkaWFuIGludGVydmFsLgorICAgICMgRklYTUUgVGhlIGZvbGxvd2luZyBsaW5lIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGZvciBiaWcgbGlzdHMuCisgICAgZiA9IGRhdGEuY291bnQoeCkgICMgTnVtYmVyIG9mIGRhdGEgcG9pbnRzIGluIHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgcmV0dXJuIEwgKyBpbnRlcnZhbCoobi8yIC0gY2YpL2YKKworCitkZWYgbW9kZShkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIG1vc3QgY29tbW9uIGRhdGEgcG9pbnQgZnJvbSBkaXNjcmV0ZSBvciBub21pbmFsIGRhdGEuCisKKyAgICBgYG1vZGVgYCBhc3N1bWVzIGRpc2NyZXRlIGRhdGEsIGFuZCByZXR1cm5zIGEgc2luZ2xlIHZhbHVlLiBUaGlzIGlzIHRoZQorICAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAzCisKKyAgICBUaGlzIGFsc28gd29ya3Mgd2l0aCBub21pbmFsIChub24tbnVtZXJpYykgZGF0YToKKworICAgID4+PiBtb2RlKFsicmVkIiwgImJsdWUiLCAiYmx1ZSIsICJyZWQiLCAiZ3JlZW4iLCAicmVkIiwgInJlZCJdKQorICAgICdyZWQnCisKKyAgICBJZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsIGBgbW9kZWBgIHdpbGwgcmFpc2UKKyAgICBTdGF0aXN0aWNzRXJyb3IuCisgICAgIiIiCisgICAgIyBHZW5lcmF0ZSBhIHRhYmxlIG9mIHNvcnRlZCAodmFsdWUsIGZyZXF1ZW5jeSkgcGFpcnMuCisgICAgdGFibGUgPSBfY291bnRzKGRhdGEpCisgICAgaWYgbGVuKHRhYmxlKSA9PSAxOgorICAgICAgICByZXR1cm4gdGFibGVbMF1bMF0KKyAgICBlbGlmIHRhYmxlOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoCisgICAgICAgICAgICAgICAgJ25vIHVuaXF1ZSBtb2RlOyBmb3VuZCAlZCBlcXVhbGx5IGNvbW1vbiB2YWx1ZXMnICUgbGVuKHRhYmxlKQorICAgICAgICAgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ25vIG1vZGUgZm9yIGVtcHR5IGRhdGEnKQorCisKKyMgPT09IE1lYXN1cmVzIG9mIHNwcmVhZCA9PT0KKworIyBTZWUgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9WYXJpYW5jZS5odG1sCisjICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1NhbXBsZVZhcmlhbmNlLmh0bWwKKyMgICAgIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWxnb3JpdGhtc19mb3JfY2FsY3VsYXRpbmdfdmFyaWFuY2UKKyMKKyMgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyB1c2UgdGhlIHNvLWNhbGxlZCAiY29tcHV0YXRpb25hbCBmb3JtdWxhIGZvcgorIyB2YXJpYW5jZSIsIGFzIHRoYXQgaXMgb25seSBzdWl0YWJsZSBmb3IgaGFuZCBjYWxjdWxhdGlvbnMgd2l0aCBhIHNtYWxsCisjIGFtb3VudCBvZiBsb3ctcHJlY2lzaW9uIGRhdGEuIEl0IGhhcyB0ZXJyaWJsZSBudW1lcmljIHByb3BlcnRpZXMuCisjCisjIFNlZSBhIGNvbXBhcmlzb24gb2YgdGhyZWUgY29tcHV0YXRpb25hbCBtZXRob2RzIGhlcmU6CisjIGh0dHA6Ly93d3cuam9obmRjb29rLmNvbS9ibG9nLzIwMDgvMDkvMjYvY29tcGFyaW5nLXRocmVlLW1ldGhvZHMtb2YtY29tcHV0aW5nLXN0YW5kYXJkLWRldmlhdGlvbi8KKworZGVmIF9zcyhkYXRhLCBjPU5vbmUpOgorICAgICIiIlJldHVybiBzdW0gb2Ygc3F1YXJlIGRldmlhdGlvbnMgb2Ygc2VxdWVuY2UgZGF0YS4KKworICAgIElmIGBgY2BgIGlzIE5vbmUsIHRoZSBtZWFuIGlzIGNhbGN1bGF0ZWQgaW4gb25lIHBhc3MsIGFuZCB0aGUgZGV2aWF0aW9ucworICAgIGZyb20gdGhlIG1lYW4gYXJlIGNhbGN1bGF0ZWQgaW4gYSBzZWNvbmQgcGFzcy4gT3RoZXJ3aXNlLCBkZXZpYXRpb25zIGFyZQorICAgIGNhbGN1bGF0ZWQgZnJvbSBgYGNgYCBhcyBnaXZlbi4gVXNlIHRoZSBzZWNvbmQgY2FzZSB3aXRoIGNhcmUsIGFzIGl0IGNhbgorICAgIGxlYWQgdG8gZ2FyYmFnZSByZXN1bHRzLgorICAgICIiIgorICAgIGlmIGMgaXMgTm9uZToKKyAgICAgICAgYyA9IG1lYW4oZGF0YSkKKyAgICBzcyA9IF9zdW0oKHgtYykqKjIgZm9yIHggaW4gZGF0YSkKKyAgICAjIFRoZSBmb2xsb3dpbmcgc3VtIHNob3VsZCBtYXRoZW1hdGljYWxseSBlcXVhbCB6ZXJvLCBidXQgZHVlIHRvIHJvdW5kaW5nCisgICAgIyBlcnJvciBtYXkgbm90LgorICAgIHNzIC09IF9zdW0oKHgtYykgZm9yIHggaW4gZGF0YSkqKjIvbGVuKGRhdGEpCisgICAgYXNzZXJ0IG5vdCBzcyA8IDAsICduZWdhdGl2ZSBzdW0gb2Ygc3F1YXJlIGRldmlhdGlvbnM6ICVmJyAlIHNzCisgICAgcmV0dXJuIHNzCisKKworZGVmIHZhcmlhbmNlKGRhdGEsIHhiYXI9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KKworICAgIGRhdGEgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIFJlYWwtdmFsdWVkIG51bWJlcnMsIHdpdGggYXQgbGVhc3QgdHdvCisgICAgdmFsdWVzLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgeGJhciwgaWYgZ2l2ZW4sIHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgIHRoZSBkYXRhLiBJZiBpdCBpcyBtaXNzaW5nIG9yIE5vbmUsIHRoZSBtZWFuIGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgIFVzZSB0aGlzIGZ1bmN0aW9uIHdoZW4geW91ciBkYXRhIGlzIGEgc2FtcGxlIGZyb20gYSBwb3B1bGF0aW9uLiBUbworICAgIGNhbGN1bGF0ZSB0aGUgdmFyaWFuY2UgZnJvbSB0aGUgZW50aXJlIHBvcHVsYXRpb24sIHNlZSBgYHB2YXJpYW5jZWBgLgorCisgICAgRXhhbXBsZXM6CisKKyAgICA+Pj4gZGF0YSA9IFsyLjc1LCAxLjc1LCAxLjI1LCAwLjI1LCAwLjUsIDEuMjUsIDMuNV0KKyAgICA+Pj4gdmFyaWFuY2UoZGF0YSkKKyAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgIElmIHlvdSBoYXZlIGFscmVhZHkgY2FsY3VsYXRlZCB0aGUgbWVhbiBvZiB5b3VyIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcworICAgIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGB4YmFyYGAgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworICAgID4+PiBtID0gbWVhbihkYXRhKQorICAgID4+PiB2YXJpYW5jZShkYXRhLCBtKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGF0IGBgeGJhcmBgIGlzIGFjdHVhbGx5IHRoZSBtZWFuIG9mCisgICAgYGBkYXRhYGAuIEdpdmluZyBhcmJpdHJhcnkgdmFsdWVzIGZvciBgYHhiYXJgYCBtYXkgbGVhZCB0byBpbnZhbGlkIG9yCisgICAgaW1wb3NzaWJsZSByZXN1bHRzLgorCisgICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IHZhcmlhbmNlKFtEKCIyNy41IiksIEQoIjMwLjI1IiksIEQoIjMwLjI1IiksIEQoIjM0LjUiKSwgRCgiNDEuNzUiKV0pCisgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IHZhcmlhbmNlKFtGKDEsIDYpLCBGKDEsIDIpLCBGKDUsIDMpXSkKKyAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMjoKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCd2YXJpYW5jZSByZXF1aXJlcyBhdCBsZWFzdCB0d28gZGF0YSBwb2ludHMnKQorICAgIHNzID0gX3NzKGRhdGEsIHhiYXIpCisgICAgcmV0dXJuIHNzLyhuLTEpCisKKworZGVmIHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgYGBkYXRhYGAuCisKKyAgICBkYXRhIHNob3VsZCBiZSBhbiBpdGVyYWJsZSBvZiBSZWFsLXZhbHVlZCBudW1iZXJzLCB3aXRoIGF0IGxlYXN0IG9uZQorICAgIHZhbHVlLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgbXUsIGlmIGdpdmVuLCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICB0aGUgZGF0YS4gSWYgaXQgaXMgbWlzc2luZyBvciBOb25lLCB0aGUgbWVhbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLgorICAgIFRvIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgYGB2YXJpYW5jZWBgIGZ1bmN0aW9uIGlzCisgICAgdXN1YWxseSBhIGJldHRlciBjaG9pY2UuCisKKyAgICBFeGFtcGxlczoKKworICAgID4+PiBkYXRhID0gWzAuMCwgMC4yNSwgMC4yNSwgMS4yNSwgMS41LCAxLjc1LCAyLjc1LCAzLjI1XQorICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAxLjI1CisKKyAgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgdGhlIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcworICAgIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICA+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgIDEuMjUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGhhdCBgYG11YGAgaXMgYWN0dWFsbHkgdGhlIG1lYW4gb2YgYGBkYXRhYGAuCisgICAgR2l2aW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBgbXVgYCBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgICByZXN1bHRzLgorCisgICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgIERlY2ltYWwoJzI0LjgxNScpCisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICBGcmFjdGlvbigxMywgNzIpCisKKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAxOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ3B2YXJpYW5jZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZGF0YSBwb2ludCcpCisgICAgc3MgPSBfc3MoZGF0YSwgbXUpCisgICAgcmV0dXJuIHNzL24KKworCitkZWYgc3RkZXYoZGF0YSwgeGJhcj1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNxdWFyZSByb290IG9mIHRoZSBzYW1wbGUgdmFyaWFuY2UuCisKKyAgICBTZWUgYGB2YXJpYW5jZWBgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgICA+Pj4gc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgIDEuMDgxMDg3NDE1NTIxOTgyNworCisgICAgIiIiCisgICAgdmFyID0gdmFyaWFuY2UoZGF0YSwgeGJhcikKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB2YXIuc3FydCgpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gbWF0aC5zcXJ0KHZhcikKKworCitkZWYgcHN0ZGV2KGRhdGEsIG11PU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKyAgICBTZWUgYGBwdmFyaWFuY2VgYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAgPj4+IHBzdGRldihbMS41LCAyLjUsIDIuNSwgMi43NSwgMy4yNSwgNC43NV0pCisgICAgMC45ODY4OTMyNzM1MjcyNTEKKworICAgICIiIgorICAgIHZhciA9IHB2YXJpYW5jZShkYXRhLCBtdSkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB2YXIuc3FydCgpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gbWF0aC5zcXJ0KHZhcikKZGlmZiAtLWdpdCBhL0xpYi9zdHJ1Y3QucHkgYi9MaWIvc3RydWN0LnB5CmluZGV4IDliZmMyM2YuLmQ2YmJhNTggMTAwNjQ0Ci0tLSBhL0xpYi9zdHJ1Y3QucHkKKysrIGIvTGliL3N0cnVjdC5weQpAQCAtMSw2ICsxLDcgQEAKIF9fYWxsX18gPSBbCiAgICAgIyBGdW5jdGlvbnMKICAgICAnY2FsY3NpemUnLCAncGFjaycsICdwYWNrX2ludG8nLCAndW5wYWNrJywgJ3VucGFja19mcm9tJywKKyAgICAnaXRlcl91bnBhY2snLAogCiAgICAgIyBDbGFzc2VzCiAgICAgJ1N0cnVjdCcsCmRpZmYgLS1naXQgYS9MaWIvc3VicHJvY2Vzcy5weSBiL0xpYi9zdWJwcm9jZXNzLnB5CmluZGV4IGMzYTI3ODguLjA5NDJkOTQgMTAwNjQ0Ci0tLSBhL0xpYi9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi9zdWJwcm9jZXNzLnB5CkBAIC0xNDUsMTEgKzE0NSwxMyBAQAogZ2V0c3RhdHVzb3V0cHV0KGNtZCk6CiAgICAgUmV0dXJuIChzdGF0dXMsIG91dHB1dCkgb2YgZXhlY3V0aW5nIGNtZCBpbiBhIHNoZWxsLgogCi0gICAgRXhlY3V0ZSB0aGUgc3RyaW5nICdjbWQnIGluIGEgc2hlbGwgd2l0aCBvcy5wb3BlbigpIGFuZCByZXR1cm4gYSAyLXR1cGxlCi0gICAgKHN0YXR1cywgb3V0cHV0KS4gIGNtZCBpcyBhY3R1YWxseSBydW4gYXMgJ3sgY21kIDsgfSAyPiYxJywgc28gdGhhdCB0aGUKLSAgICByZXR1cm5lZCBvdXRwdXQgd2lsbCBjb250YWluIG91dHB1dCBvciBlcnJvciBtZXNzYWdlcy4gQSB0cmFpbGluZyBuZXdsaW5lCi0gICAgaXMgc3RyaXBwZWQgZnJvbSB0aGUgb3V0cHV0LiBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZQotICAgIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBDIGZ1bmN0aW9uIHdhaXQoKS4gIEV4YW1wbGU6CisgICAgRXhlY3V0ZSB0aGUgc3RyaW5nICdjbWQnIGluIGEgc2hlbGwgd2l0aCAnY2hlY2tfb3V0cHV0JyBhbmQKKyAgICByZXR1cm4gYSAyLXR1cGxlIChzdGF0dXMsIG91dHB1dCkuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzIHVzZWQsCisgICAgbWVhbmluZyB0aGF0IHRoZSByZXN1bHQgd2l0aCBiZSBkZWNvZGVkIHRvIGEgc3RyaW5nLgorCisgICAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4KKyAgICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZAorICAgIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBmdW5jdGlvbiAnd2FpdCcuICBFeGFtcGxlOgogCiAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdscyAvYmluL2xzJykKICAgICAoMCwgJy9iaW4vbHMnKQpAQCAtMTc4LDYgKzE4MCw5IEBACiAKICAgICA+Pj4gb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJscyIsICItbCIsICIvZGV2L251bGwiXSkKIAorICAgIFRoZXJlIGlzIGFuIGFkZGl0aW9uYWwgb3B0aW9uYWwgYXJndW1lbnQsICJpbnB1dCIsIGFsbG93aW5nIHlvdSB0bworICAgIHBhc3MgYSBzdHJpbmcgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHlvdSB1c2UgdGhpcyBhcmd1bWVudAorICAgIHlvdSBtYXkgbm90IGFsc28gdXNlIHRoZSBQb3BlbiBjb25zdHJ1Y3RvcidzICJzdGRpbiIgYXJndW1lbnQuCiAKIEV4Y2VwdGlvbnMKIC0tLS0tLS0tLS0KQEAgLTM5OCwxOSArNDAzLDI0IEBACiAgICAgICAgIGhTdGRPdXRwdXQgPSBOb25lCiAgICAgICAgIGhTdGRFcnJvciA9IE5vbmUKICAgICAgICAgd1Nob3dXaW5kb3cgPSAwCi0gICAgY2xhc3MgcHl3aW50eXBlczoKLSAgICAgICAgZXJyb3IgPSBJT0Vycm9yCiBlbHNlOgotICAgIGltcG9ydCBzZWxlY3QKLSAgICBfaGFzX3BvbGwgPSBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKQogICAgIGltcG9ydCBfcG9zaXhzdWJwcm9jZXNzCi0gICAgX2NyZWF0ZV9waXBlID0gX3Bvc2l4c3VicHJvY2Vzcy5jbG9leGVjX3BpcGUKKyAgICBpbXBvcnQgc2VsZWN0CisgICAgaW1wb3J0IHNlbGVjdG9ycwogCiAgICAgIyBXaGVuIHNlbGVjdCBvciBwb2xsIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgZmlsZSBpcyB3cml0YWJsZSwKICAgICAjIHdlIGNhbiB3cml0ZSB1cCB0byBfUElQRV9CVUYgYnl0ZXMgd2l0aG91dCByaXNrIG9mIGJsb2NraW5nLgogICAgICMgUE9TSVggZGVmaW5lcyBQSVBFX0JVRiBhcyA+PSA1MTIuCiAgICAgX1BJUEVfQlVGID0gZ2V0YXR0cihzZWxlY3QsICdQSVBFX0JVRicsIDUxMikKIAorICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUKKyAgICAjIGRlc2NyaXB0b3IsIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUKKyAgICAjIHN5c2NhbGwpLgorICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIF9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorICAgIGVsc2U6CisgICAgICAgIF9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKIAogX19hbGxfXyA9IFsiUG9wZW4iLCAiUElQRSIsICJTVERPVVQiLCAiY2FsbCIsICJjaGVja19jYWxsIiwgImdldHN0YXR1c291dHB1dCIsCiAgICAgICAgICAgICJnZXRvdXRwdXQiLCAiY2hlY2tfb3V0cHV0IiwgIkNhbGxlZFByb2Nlc3NFcnJvciIsICJERVZOVUxMIl0KQEAgLTUwNiw2ICs1MTYsOCBAQAogICAgIGZvciBmbGFnLCBvcHQgaW4gZmxhZ19vcHRfbWFwLml0ZW1zKCk6CiAgICAgICAgIHYgPSBnZXRhdHRyKHN5cy5mbGFncywgZmxhZykKICAgICAgICAgaWYgdiA+IDA6CisgICAgICAgICAgICBpZiBmbGFnID09ICdoYXNoX3JhbmRvbWl6YXRpb24nOgorICAgICAgICAgICAgICAgIHYgPSAxICMgSGFuZGxlIHNwZWNpZmljYXRpb24gb2YgYW4gZXhhY3Qgc2VlZAogICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0nICsgb3B0ICogdikKICAgICBmb3Igb3B0IGluIHN5cy53YXJub3B0aW9uczoKICAgICAgICAgYXJncy5hcHBlbmQoJy1XJyArIG9wdCkKQEAgLTU2OCwxNCArNTgwLDMxIEBACiAgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQogICAgIGInbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LCBhcworICAgIGl0IHRvbyB3aWxsIGJlIHVzZWQgaW50ZXJuYWxseS4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAuLi4gICAgICAgICAgICAgIGlucHV0PWIid2hlbiBpbiB0aGUgY291cnNlIG9mIGZvb21hbiBldmVudHNcbiIpCisgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgSWYgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUgaXMgcGFzc2VkLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYQogICAgIHN0cmluZyByYXRoZXIgdGhhbiBieXRlcy4KICAgICAiIiIKICAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgaWYgJ2lucHV0JyBpbiBrd2FyZ3M6CisgICAgICAgIGlmICdzdGRpbicgaW4ga3dhcmdzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RkaW4gYW5kIGlucHV0IGFyZ3VtZW50cyBtYXkgbm90IGJvdGggYmUgdXNlZC4nKQorICAgICAgICBpbnB1dGRhdGEgPSBrd2FyZ3NbJ2lucHV0J10KKyAgICAgICAgZGVsIGt3YXJnc1snaW5wdXQnXQorICAgICAgICBrd2FyZ3NbJ3N0ZGluJ10gPSBQSVBFCisgICAgZWxzZToKKyAgICAgICAgaW5wdXRkYXRhID0gTm9uZQogICAgIHdpdGggUG9wZW4oKnBvcGVuYXJncywgc3Rkb3V0PVBJUEUsICoqa3dhcmdzKSBhcyBwcm9jZXNzOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXRkYXRhLCB0aW1lb3V0PXRpbWVvdXQpCiAgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXhwaXJlZDoKICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpCiAgICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKQEAgLTY2NCwxMyArNjkzLDE1IEBACiAjCiAKIGRlZiBnZXRzdGF0dXNvdXRwdXQoY21kKToKLSAgICAiIiJSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCisgICAgIiIiICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuICBBIHRyYWlsaW5nIG5ld2xpbmUKLSAgICBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZQotICAgIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBDIGZ1bmN0aW9uIHdhaXQoKS4gIEV4YW1wbGU6CisgICAgRXhlY3V0ZSB0aGUgc3RyaW5nICdjbWQnIGluIGEgc2hlbGwgd2l0aCAnY2hlY2tfb3V0cHV0JyBhbmQKKyAgICByZXR1cm4gYSAyLXR1cGxlIChzdGF0dXMsIG91dHB1dCkuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzIHVzZWQsCisgICAgbWVhbmluZyB0aGF0IHRoZSByZXN1bHQgd2l0aCBiZSBkZWNvZGVkIHRvIGEgc3RyaW5nLgorCisgICAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4KKyAgICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZAorICAgIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBmdW5jdGlvbiAnd2FpdCcuIEV4YW1wbGU6CiAKICAgICA+Pj4gaW1wb3J0IHN1YnByb2Nlc3MKICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2xzIC9iaW4vbHMnKQpAQCAtODIwLDcgKzg1MSw3IEBACiAgICAgICAgICAgICBmb3IgZiBpbiBmaWx0ZXIoTm9uZSwgKHNlbGYuc3RkaW4sIHNlbGYuc3Rkb3V0LCBzZWxmLnN0ZGVycikpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MgICMgSWdub3JlIEVCQURGIG9yIG90aGVyIGVycm9ycy4KIAogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3NlZF9jaGlsZF9waXBlX2ZkczoKQEAgLTgzNiw3ICs4NjcsNyBAQAogICAgICAgICAgICAgICAgIGZvciBmZCBpbiB0b19jbG9zZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAgICAgcmFpc2UKQEAgLTkwMCw3ICs5MzEsNyBAQAogICAgICAgICAgICAgICAgIGlmIGlucHV0OgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLndyaXRlKGlucHV0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FUElQRSBhbmQgZS5lcnJubyAhPSBlcnJuby5FSU5WQUw6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKQEAgLTEwMzIsMjMgKzEwNjMsNiBAQAogICAgICAgICAgICAgcmV0dXJuIEhhbmRsZShoKQogCiAKLSAgICAgICAgZGVmIF9maW5kX3c5eHBvcGVuKHNlbGYpOgotICAgICAgICAgICAgIiIiRmluZCBhbmQgcmV0dXJuIGFic29sdXQgcGF0aCB0byB3OXhwb3Blbi5leGUiIiIKLSAgICAgICAgICAgIHc5eHBvcGVuID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShfd2luYXBpLkdldE1vZHVsZUZpbGVOYW1lKDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3OXhwb3Blbi5leGUiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHc5eHBvcGVuKToKLSAgICAgICAgICAgICAgICAjIEVlZWsgLSBmaWxlLW5vdC1mb3VuZCAtIHBvc3NpYmx5IGFuIGVtYmVkZGluZwotICAgICAgICAgICAgICAgICMgc2l0dWF0aW9uIC0gc2VlIGlmIHdlIGNhbiBsb2NhdGUgaXQgaW4gc3lzLmV4ZWNfcHJlZml4Ci0gICAgICAgICAgICAgICAgdzl4cG9wZW4gPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKHN5cy5iYXNlX2V4ZWNfcHJlZml4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidzl4cG9wZW4uZXhlIikKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHModzl4cG9wZW4pOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBsb2NhdGUgdzl4cG9wZW4uZXhlLCB3aGljaCBpcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZGVkIGZvciBQb3BlbiB0byB3b3JrIHdpdGggeW91ciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2hlbGwgb3IgcGxhdGZvcm0uIikKLSAgICAgICAgICAgIHJldHVybiB3OXhwb3BlbgotCi0KICAgICAgICAgZGVmIF9leGVjdXRlX2NoaWxkKHNlbGYsIGFyZ3MsIGV4ZWN1dGFibGUsIHByZWV4ZWNfZm4sIGNsb3NlX2ZkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzLCBjd2QsIGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKQEAgLTEwNzcsMjEgKzEwOTEsNiBAQAogICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLndTaG93V2luZG93ID0gX3dpbmFwaS5TV19ISURFCiAgICAgICAgICAgICAgICAgY29tc3BlYyA9IG9zLmVudmlyb24uZ2V0KCJDT01TUEVDIiwgImNtZC5leGUiKQogICAgICAgICAgICAgICAgIGFyZ3MgPSAne30gL2MgInt9IicuZm9ybWF0IChjb21zcGVjLCBhcmdzKQotICAgICAgICAgICAgICAgIGlmIChfd2luYXBpLkdldFZlcnNpb24oKSA+PSAweDgwMDAwMDAwIG9yCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKGNvbXNwZWMpLmxvd2VyKCkgPT0gImNvbW1hbmQuY29tIik6Ci0gICAgICAgICAgICAgICAgICAgICMgV2luOXgsIG9yIHVzaW5nIGNvbW1hbmQuY29tIG9uIE5ULiBXZSBuZWVkIHRvCi0gICAgICAgICAgICAgICAgICAgICMgdXNlIHRoZSB3OXhwb3BlbiBpbnRlcm1lZGlhdGUgcHJvZ3JhbS4gRm9yIG1vcmUKLSAgICAgICAgICAgICAgICAgICAgIyBpbmZvcm1hdGlvbiwgc2VlIEtCIFExNTA5NTYKLSAgICAgICAgICAgICAgICAgICAgIyAoaHR0cDovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAwMTExMDUwODQwMDIvaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9zdXBwb3J0L2tiL2FydGljbGVzL1ExNTAvOS81Ni5hc3ApCi0gICAgICAgICAgICAgICAgICAgIHc5eHBvcGVuID0gc2VsZi5fZmluZF93OXhwb3BlbigpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSAnIiVzIiAlcycgJSAodzl4cG9wZW4sIGFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICMgTm90IHBhc3NpbmcgQ1JFQVRFX05FV19DT05TT0xFIGhhcyBiZWVuIGtub3duIHRvCi0gICAgICAgICAgICAgICAgICAgICMgY2F1c2UgcmFuZG9tIGZhaWx1cmVzIG9uIHdpbjl4LiAgU3BlY2lmaWNhbGx5IGEKLSAgICAgICAgICAgICAgICAgICAgIyBkaWFsb2c6ICJZb3VyIHByb2dyYW0gYWNjZXNzZWQgbWVtIGN1cnJlbnRseSBpbgotICAgICAgICAgICAgICAgICAgICAjIHVzZSBhdCB4eHgiIGFuZCBhIGhvcGVmdWwgd2FybmluZyBhYm91dCB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBzdGFiaWxpdHkgb2YgeW91ciBzeXN0ZW0uICBDb3N0IGlzIEN0cmwrQyB3b24ndAotICAgICAgICAgICAgICAgICAgICAjIGtpbGwgY2hpbGRyZW4uCi0gICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3MgfD0gX3dpbmFwaS5DUkVBVEVfTkVXX0NPTlNPTEUKIAogICAgICAgICAgICAgIyBTdGFydCB0aGUgcHJvY2VzcwogICAgICAgICAgICAgdHJ5OgpAQCAtMTEwMywxMiArMTEwMiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbykKLSAgICAgICAgICAgIGV4Y2VwdCBweXdpbnR5cGVzLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgIyBUcmFuc2xhdGUgcHl3aW50eXBlcy5lcnJvciB0byBXaW5kb3dzRXJyb3IsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgIyBhIHN1YmNsYXNzIG9mIE9TRXJyb3IuICBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseQotICAgICAgICAgICAgICAgICMgdHJhbnNsYXRlIGVycm5vIHVzaW5nIF9zeXNfZXJybGlzdCAob3Igc2ltaWxhciksIGJ1dAotICAgICAgICAgICAgICAgICMgaG93IGNhbiB0aGlzIGJlIGRvbmUgZnJvbSBQeXRob24/Ci0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yKCplLmFyZ3MpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgQ2hpbGQgaXMgbGF1bmNoZWQuIENsb3NlIHRoZSBwYXJlbnQncyBjb3B5IG9mIHRob3NlIHBpcGUKICAgICAgICAgICAgICAgICAjIGhhbmRsZXMgdGhhdCBvbmx5IHRoZSBjaGlsZCBzaG91bGQgaGF2ZSBvcGVuLiAgWW91IG5lZWQKQEAgLTExOTMsNyArMTE4Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgaW5wdXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4ud3JpdGUoaW5wdXQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCkBAIC0xMjcxLDcgKzEyNjQsNyBAQAogICAgICAgICAgICAgaWYgc3RkaW4gaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZGluID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZGluID09IERFVk5VTEw6CiAgICAgICAgICAgICAgICAgcDJjcmVhZCA9IHNlbGYuX2dldF9kZXZudWxsKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRpbiwgaW50KToKQEAgLTEyODMsNyArMTI3Niw3IEBACiAgICAgICAgICAgICBpZiBzdGRvdXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZG91dCA9PSBQSVBFOgotICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRvdXQgPT0gREVWTlVMTDoKICAgICAgICAgICAgICAgICBjMnB3cml0ZSA9IHNlbGYuX2dldF9kZXZudWxsKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRvdXQsIGludCk6CkBAIC0xMjk1LDcgKzEyODgsNyBAQAogICAgICAgICAgICAgaWYgc3RkZXJyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gUElQRToKLSAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKICAgICAgICAgICAgICAgICBlcnJ3cml0ZSA9IGMycHdyaXRlCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBERVZOVUxMOgpAQCAtMTM0Nyw3ICsxMzQwLDE0IEBACiAgICAgICAgICAgICAjIEZvciB0cmFuc2ZlcnJpbmcgcG9zc2libGUgZXhlYyBmYWlsdXJlIGZyb20gY2hpbGQgdG8gcGFyZW50LgogICAgICAgICAgICAgIyBEYXRhIGZvcm1hdDogImV4Y2VwdGlvbiBuYW1lOmhleCBlcnJubzpkZXNjcmlwdGlvbiIKICAgICAgICAgICAgICMgUGlja2xlIGlzIG5vdCB1c2VkOyBpdCBpcyBjb21wbGV4IGFuZCBpbnZvbHZlcyBtZW1vcnkgYWxsb2NhdGlvbi4KLSAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUgPSBvcy5waXBlKCkKKyAgICAgICAgICAgICMgZXJycGlwZV93cml0ZSBtdXN0IG5vdCBiZSBpbiB0aGUgc3RhbmRhcmQgaW8gMCwgMSwgb3IgMiBmZCByYW5nZS4KKyAgICAgICAgICAgIGxvd19mZHNfdG9fY2xvc2UgPSBbXQorICAgICAgICAgICAgd2hpbGUgZXJycGlwZV93cml0ZSA8IDM6CisgICAgICAgICAgICAgICAgbG93X2Zkc190b19jbG9zZS5hcHBlbmQoZXJycGlwZV93cml0ZSkKKyAgICAgICAgICAgICAgICBlcnJwaXBlX3dyaXRlID0gb3MuZHVwKGVycnBpcGVfd3JpdGUpCisgICAgICAgICAgICBmb3IgbG93X2ZkIGluIGxvd19mZHNfdG9fY2xvc2U6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UobG93X2ZkKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBtdXN0IGF2b2lkIGNvbXBsZXggd29yayB0aGF0IGNvdWxkIGludm9sdmUKQEAgLTE0MTcsMTMgKzE0MTcsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUsIGhleF9lcnJubywgZXJyX21zZyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJwaXBlX2RhdGEuc3BsaXQoYic6JywgMikpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidSdW50aW1lRXJyb3InCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidTdWJwcm9jZXNzRXJyb3InCiAgICAgICAgICAgICAgICAgICAgIGhleF9lcnJubyA9IGInMCcKICAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9IChiJ0JhZCBleGNlcHRpb24gZGF0YSBmcm9tIGNoaWxkOiAnICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGVycnBpcGVfZGF0YSkpCiAgICAgICAgICAgICAgICAgY2hpbGRfZXhjZXB0aW9uX3R5cGUgPSBnZXRhdHRyKAogICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnMsIGV4Y2VwdGlvbl9uYW1lLmRlY29kZSgnYXNjaWknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NFcnJvcikKICAgICAgICAgICAgICAgICBlcnJfbXNnID0gZXJyX21zZy5kZWNvZGUoZXJyb3JzPSJzdXJyb2dhdGVwYXNzIikKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGNoaWxkX2V4Y2VwdGlvbl90eXBlLCBPU0Vycm9yKSBhbmQgaGV4X2Vycm5vOgogICAgICAgICAgICAgICAgICAgICBlcnJub19udW0gPSBpbnQoaGV4X2Vycm5vLCAxNikKQEAgLTE0NTMsMTEgKzE0NTMsMTEgQEAKICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBfV0VYSVRTVEFUVVMoc3RzKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIFNob3VsZCBuZXZlciBoYXBwZW4KLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlVua25vd24gY2hpbGQgZXhpdCBzdGF0dXMhIikKKyAgICAgICAgICAgICAgICByYWlzZSBTdWJwcm9jZXNzRXJyb3IoIlVua25vd24gY2hpbGQgZXhpdCBzdGF0dXMhIikKIAogCiAgICAgICAgIGRlZiBfaW50ZXJuYWxfcG9sbChzZWxmLCBfZGVhZHN0YXRlPU5vbmUsIF93YWl0cGlkPW9zLndhaXRwaWQsCi0gICAgICAgICAgICAgICAgX1dOT0hBTkc9b3MuV05PSEFORywgX29zX2Vycm9yPW9zLmVycm9yLCBfRUNISUxEPWVycm5vLkVDSElMRCk6CisgICAgICAgICAgICAgICAgX1dOT0hBTkc9b3MuV05PSEFORywgX0VDSElMRD1lcnJuby5FQ0hJTEQpOgogICAgICAgICAgICAgIiIiQ2hlY2sgaWYgY2hpbGQgcHJvY2VzcyBoYXMgdGVybWluYXRlZC4gIFJldHVybnMgcmV0dXJuY29kZQogICAgICAgICAgICAgYXR0cmlidXRlLgogCkBAIC0xNDcwLDcgKzE0NzAsNyBAQAogICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IF93YWl0cGlkKHNlbGYucGlkLCBfV05PSEFORykKICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4aXRzdGF0dXMoc3RzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBfb3NfZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBfZGVhZHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX2RlYWRzdGF0ZQogICAgICAgICAgICAgICAgICAgICBlbGlmIGUuZXJybm8gPT0gX0VDSElMRDoKQEAgLTE1NDQsMTIgKzE1NDQsNjUgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgaW5wdXQ6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQogCi0gICAgICAgICAgICBpZiBfaGFzX3BvbGw6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9jb21tdW5pY2F0ZV93aXRoX3BvbGwoaW5wdXQsIGVuZHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHNlbGYuX2NvbW11bmljYXRlX3dpdGhfc2VsZWN0KGlucHV0LCBlbmR0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ190aW1lb3V0KQorICAgICAgICAgICAgc3Rkb3V0ID0gTm9uZQorICAgICAgICAgICAgc3RkZXJyID0gTm9uZQorCisgICAgICAgICAgICAjIE9ubHkgY3JlYXRlIHRoaXMgbWFwcGluZyBpZiB3ZSBoYXZlbid0IGFscmVhZHkuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0ID0ge30KKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRvdXRdID0gW10KKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRlcnJdID0gW10KKworICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRvdXRdCisgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKKyAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9maWxlb2JqMm91dHB1dFtzZWxmLnN0ZGVycl0KKworICAgICAgICAgICAgc2VsZi5fc2F2ZV9pbnB1dChpbnB1dCkKKworICAgICAgICAgICAgd2l0aCBfUG9wZW5TZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZGluLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3Rkb3V0LCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRlcnIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICAgICAgICAgd2hpbGUgc2VsZWN0b3IuZ2V0X21hcCgpOgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKKworICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKKworICAgICAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICMgb2JqZWN0czsgdGhleSBhcmUgbm8gbG9uZ2VyIHVzaW5nIEMgc3RkaW8hCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgc2VsZi5zdGRpbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuX2lucHV0W3NlbGYuX2lucHV0X29mZnNldCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoa2V5LmZkLCBjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuZmlsZW9iaiBpbiAoc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChrZXkuZmQsIDQwOTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnVucmVnaXN0ZXIoa2V5LmZpbGVvYmopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dFtrZXkuZmlsZW9ial0uYXBwZW5kKGRhdGEpCiAKICAgICAgICAgICAgIHNlbGYud2FpdCh0aW1lb3V0PXNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpKQogCkBAIC0xNTgzLDE2NyArMTYzNiw2IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5faW5wdXQuZW5jb2RlKHNlbGYuc3RkaW4uZW5jb2RpbmcpCiAKIAotICAgICAgICBkZWYgX2NvbW11bmljYXRlX3dpdGhfcG9sbChzZWxmLCBpbnB1dCwgZW5kdGltZSwgb3JpZ190aW1lb3V0KToKLSAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUgIyBSZXR1cm4KLSAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUgIyBSZXR1cm4KLQotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlID0ge30KLQotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX2FuZF9hcHBlbmQoZmlsZV9vYmosIGV2ZW50bWFzayk6Ci0gICAgICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKGZpbGVfb2JqLmZpbGVubygpLCBldmVudG1hc2spCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZVtmaWxlX29iai5maWxlbm8oKV0gPSBmaWxlX29iagotCi0gICAgICAgICAgICBkZWYgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKToKLSAgICAgICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihmZCkKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlW2ZkXS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmQyZmlsZS5wb3AoZmQpCi0KLSAgICAgICAgICAgIGlmIHNlbGYuc3RkaW4gYW5kIGlucHV0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRpbiwgc2VsZWN0LlBPTExPVVQpCi0KLSAgICAgICAgICAgICMgT25seSBjcmVhdGUgdGhpcyBtYXBwaW5nIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeS4KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0ID0ge30KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3Rkb3V0LmZpbGVubygpXSA9IFtdCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZGVyci5maWxlbm8oKV0gPSBbXQotCi0gICAgICAgICAgICBzZWxlY3RfUE9MTElOX1BPTExQUkkgPSBzZWxlY3QuUE9MTElOIHwgc2VsZWN0LlBPTExQUkkKLSAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRvdXQsIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSkKLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRvdXQuZmlsZW5vKCldCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICByZWdpc3Rlcl9hbmRfYXBwZW5kKHNlbGYuc3RkZXJyLCBzZWxlY3RfUE9MTElOX1BPTExQUkkpCi0gICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3RkZXJyLmZpbGVubygpXQotCi0gICAgICAgICAgICBzZWxmLl9zYXZlX2lucHV0KGlucHV0KQotCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9mZDJmaWxlOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHRpbWVvdXQgPCAwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwodGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGltZW91dChlbmR0aW1lLCBvcmlnX3RpbWVvdXQpCi0KLSAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZQotICAgICAgICAgICAgICAgICMgZmlsZSBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKLQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHNlbGVjdC5QT0xMT1VUOgotICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9pbnB1dFtzZWxmLl9pbnB1dF9vZmZzZXQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICs9IG9zLndyaXRlKGZkLCBjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0X29mZnNldCA+PSBsZW4oc2VsZi5faW5wdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgbW9kZSAmIHNlbGVjdF9QT0xMSU5fUE9MTFBSSToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGZkLCA0MDk2KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0W2ZkXS5hcHBlbmQoZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgSWdub3JlIGhhbmcgdXAgb3IgZXJyb3JzLgotICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotCi0gICAgICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3RkZXJyKQotCi0KLSAgICAgICAgZGVmIF9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChzZWxmLCBpbnB1dCwgZW5kdGltZSwgb3JpZ190aW1lb3V0KToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQgPSBbXQotICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldCA9IFtdCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5hcHBlbmQoc2VsZi5zdGRpbikKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQuYXBwZW5kKHNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5hcHBlbmQoc2VsZi5zdGRlcnIpCi0KLSAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCi0KLSAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUgIyBSZXR1cm4KLSAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUgIyBSZXR1cm4KLQotICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmYgPSBbXQotICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3N0ZG91dF9idWZmCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGRlcnJfYnVmZiA9IFtdCi0gICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fc3RkZXJyX2J1ZmYKLQotICAgICAgICAgICAgd2hpbGUgc2VsZi5fcmVhZF9zZXQgb3Igc2VsZi5fd3JpdGVfc2V0OgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHRpbWVvdXQgPCAwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIChybGlzdCwgd2xpc3QsIHhsaXN0KSA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3Qoc2VsZi5fcmVhZF9zZXQsIHNlbGYuX3dyaXRlX3NldCwgW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgICAgICAgICAgICAgIyBBY2NvcmRpbmcgdG8gdGhlIGRvY3MsIHJldHVybmluZyB0aHJlZSBlbXB0eSBsaXN0cyBpbmRpY2F0ZXMKLSAgICAgICAgICAgICAgICAjIHRoYXQgdGhlIHRpbWVvdXQgZXhwaXJlZC4KLSAgICAgICAgICAgICAgICBpZiBub3QgKHJsaXN0IG9yIHdsaXN0IG9yIHhsaXN0KToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEV4cGlyZWQoc2VsZi5hcmdzLCBvcmlnX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgIyBXZSBhbHNvIGNoZWNrIHdoYXQgdGltZSBpdCBpcyBvdXJzZWx2ZXMgZm9yIGdvb2QgbWVhc3VyZS4KLSAgICAgICAgICAgICAgICBzZWxmLl9jaGVja190aW1lb3V0KGVuZHRpbWUsIG9yaWdfdGltZW91dCkKLQotICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlCi0gICAgICAgICAgICAgICAgIyBmaWxlIG9iamVjdHM7IHRoZXkgYXJlIG5vIGxvbmdlciB1c2luZyBDIHN0ZGlvIQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBpbiB3bGlzdDoKLSAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9pbnB1dFtzZWxmLl9pbnB1dF9vZmZzZXQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArIF9QSVBFX0JVRl0KLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfd3JpdHRlbiA9IG9zLndyaXRlKHNlbGYuc3RkaW4uZmlsZW5vKCksIGNodW5rKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQucmVtb3ZlKHNlbGYuc3RkaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gYnl0ZXNfd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LnJlbW92ZShzZWxmLnN0ZGluKQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQgaW4gcmxpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYuc3Rkb3V0LmZpbGVubygpLCAxMDI0KQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LnJlbW92ZShzZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LmFwcGVuZChkYXRhKQotCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnIgaW4gcmxpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKHNlbGYuc3RkZXJyLmZpbGVubygpLCAxMDI0KQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LnJlbW92ZShzZWxmLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgc3RkZXJyLmFwcGVuZChkYXRhKQotCi0gICAgICAgICAgICByZXR1cm4gKHN0ZG91dCwgc3RkZXJyKQotCi0KICAgICAgICAgZGVmIHNlbmRfc2lnbmFsKHNlbGYsIHNpZyk6CiAgICAgICAgICAgICAiIiJTZW5kIGEgc2lnbmFsIHRvIHRoZSBwcm9jZXNzCiAgICAgICAgICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9zdW5hdS5weSBiL0xpYi9zdW5hdS5weQppbmRleCAxNWY3YjAzLi4zYzI0NDkyIDEwMDY0NAotLS0gYS9MaWIvc3VuYXUucHkKKysrIGIvTGliL3N1bmF1LnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIGdldGNvbXB0eXBlKCkgICAtLSByZXR1cm5zIGNvbXByZXNzaW9uIHR5cGUgKCdOT05FJyBvciAnVUxBVycpCiAgICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uIHR5cGUgKCdub3QgY29tcHJlc3NlZCcgbWF0Y2hlcyAnTk9ORScpCi0gICAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgICAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICAgICAgICBnZXRtYXJrZXJzKCkgICAgLS0gcmV0dXJucyBOb25lIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC0xMDMsNiArMTAzLDExIEBACiBpcyBkZXN0cm95ZWQuCiAiIiIKIAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorCitfc3VuYXVfcGFyYW1zID0gbmFtZWR0dXBsZSgnX3N1bmF1X3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmNoYW5uZWxzIHNhbXB3aWR0aCBmcmFtZXJhdGUgbmZyYW1lcyBjb21wdHlwZSBjb21wbmFtZScpCisKICMgZnJvbSA8bXVsdGltZWRpYS9hdWRpb19maWxlaGRyLmg+CiBBVURJT19GSUxFX01BR0lDID0gMHgyZTczNmU2NAogQVVESU9fRklMRV9FTkNPRElOR19NVUxBV184ID0gMQpAQCAtMTYzLDYgKzE2OCwxMiBAQAogICAgICAgICBpZiBzZWxmLl9maWxlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgaW5pdGZwKHNlbGYsIGZpbGUpOgogICAgICAgICBzZWxmLl9maWxlID0gZmlsZQogICAgICAgICBzZWxmLl9zb3VuZHBvcyA9IDAKQEAgLTI0Niw5ICsyNTcsOSBAQAogICAgICAgICAgICAgcmV0dXJuICdub3QgY29tcHJlc3NlZCcKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF9zdW5hdV9wYXJhbXMoc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTMwNyw2ICszMTgsMTIgQEAKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICBzZWxmLl9maWxlID0gTm9uZQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGluaXRmcChzZWxmLCBmaWxlKToKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5fZnJhbWVyYXRlID0gMApAQCAtMzM1LDcgKzM1Miw3IEBACiAgICAgZGVmIHNldHNhbXB3aWR0aChzZWxmLCBzYW1wd2lkdGgpOgogICAgICAgICBpZiBzZWxmLl9uZnJhbWVzd3JpdHRlbjoKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdjYW5ub3QgY2hhbmdlIHBhcmFtZXRlcnMgYWZ0ZXIgc3RhcnRpbmcgdG8gd3JpdGUnKQotICAgICAgICBpZiBzYW1wd2lkdGggbm90IGluICgxLCAyLCA0KToKKyAgICAgICAgaWYgc2FtcHdpZHRoIG5vdCBpbiAoMSwgMiwgMywgNCk6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignYmFkIHNhbXBsZSB3aWR0aCcpCiAgICAgICAgIHNlbGYuX3NhbXB3aWR0aCA9IHNhbXB3aWR0aAogCkBAIC0zOTAsMTQgKzQwNywxNiBAQAogICAgICAgICBzZWxmLnNldGNvbXB0eXBlKGNvbXB0eXBlLCBjb21wbmFtZSkKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF9zdW5hdV9wYXJhbXMoc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKCkKICAgICAgICAgaWYgc2VsZi5fY29tcHR5cGUgPT0gJ1VMQVcnOgogICAgICAgICAgICAgaW1wb3J0IGF1ZGlvb3AKQEAgLTQyMSw5ICs0NDAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCAhPSBzZWxmLl9kYXRhd3JpdHRlbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGF0Y2hoZWFkZXIoKQogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQorICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVuZWQgYW5kIHNlbGYuX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gTm9uZQogCiAgICAgIwpAQCAtNDQ4LDYgKzQ2Nyw5IEBACiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAyOgogICAgICAgICAgICAgICAgIGVuY29kaW5nID0gQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMTYKICAgICAgICAgICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSAyCisgICAgICAgICAgICBlbGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMjQKKyAgICAgICAgICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSAzCiAgICAgICAgICAgICBlbGlmIHNlbGYuX3NhbXB3aWR0aCA9PSA0OgogICAgICAgICAgICAgICAgIGVuY29kaW5nID0gQVVESU9fRklMRV9FTkNPRElOR19MSU5FQVJfMzIKICAgICAgICAgICAgICAgICBzZWxmLl9mcmFtZXNpemUgPSA0CmRpZmYgLS1naXQgYS9MaWIvc3ltYm9sLnB5IGIvTGliL3N5bWJvbC5weQppbmRleCAzNDE0M2I1Li41Y2Y0YTY1IDEwMDc1NQotLS0gYS9MaWIvc3ltYm9sLnB5CisrKyBiL0xpYi9zeW1ib2wucHkKQEAgLTEwMCw3ICsxMDAsNyBAQAogICAgICAgICBzeW1fbmFtZVtfdmFsdWVdID0gX25hbWUKIAogCi1kZWYgbWFpbigpOgorZGVmIF9tYWluKCk6CiAgICAgaW1wb3J0IHN5cwogICAgIGltcG9ydCB0b2tlbgogICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKQEAgLTEwOCw0ICsxMDgsNCBAQAogICAgIHRva2VuLl9tYWluKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvc3ltdGFibGUucHkgYi9MaWIvc3ltdGFibGUucHkKaW5kZXggYmIyNzE5Ni4uZTIzMzEzYiAxMDA2NDQKLS0tIGEvTGliL3N5bXRhYmxlLnB5CisrKyBiL0xpYi9zeW10YWJsZS5weQpAQCAtMjMyLDcgKzIzMiw4IEBACiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgaW1wb3J0IG9zLCBzeXMKLSAgICBzcmMgPSBvcGVuKHN5cy5hcmd2WzBdKS5yZWFkKCkKKyAgICB3aXRoIG9wZW4oc3lzLmFyZ3ZbMF0pIGFzIGY6CisgICAgICAgIHNyYyA9IGYucmVhZCgpCiAgICAgbW9kID0gc3ltdGFibGUoc3JjLCBvcy5wYXRoLnNwbGl0KHN5cy5hcmd2WzBdKVsxXSwgImV4ZWMiKQogICAgIGZvciBpZGVudCBpbiBtb2QuZ2V0X2lkZW50aWZpZXJzKCk6CiAgICAgICAgIGluZm8gPSBtb2QubG9va3VwKGlkZW50KQpkaWZmIC0tZ2l0IGEvTGliL3N5c2NvbmZpZy5weSBiL0xpYi9zeXNjb25maWcucHkKaW5kZXggMmEyMTYwYy4uZGJmNzc2NyAxMDA2NDQKLS0tIGEvTGliL3N5c2NvbmZpZy5weQorKysgYi9MaWIvc3lzY29uZmlnLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiQWNjZXNzIHRvIFB5dGhvbidzIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBmcm9tIG9zLnBhdGggaW1wb3J0IHBhcmRpciwgcmVhbHBhdGgKIApAQCAtNTIsMjUgKzUxLDYgQEAKICAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L1NjcmlwdHMnLAogICAgICAgICAnZGF0YSc6ICd7YmFzZX0nLAogICAgICAgICB9LAotICAgICdvczInOiB7Ci0gICAgICAgICdzdGRsaWInOiAne2luc3RhbGxlZF9iYXNlfS9MaWInLAotICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vTGliJywKLSAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2luY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9JbmNsdWRlJywKLSAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3tpbnN0YWxsZWRfYmFzZX0vSW5jbHVkZScsCi0gICAgICAgICdzY3JpcHRzJzogJ3tiYXNlfS9TY3JpcHRzJywKLSAgICAgICAgJ2RhdGEnOiAne2Jhc2V9JywKLSAgICAgICAgfSwKLSAgICAnb3MyX2hvbWUnOiB7Ci0gICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKLSAgICAgICAgJ3B1cmVsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdpbmNsdWRlJzogJ3t1c2VyYmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAotICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCi0gICAgICAgICdkYXRhJzogJ3t1c2VyYmFzZX0nLAotICAgICAgICB9LAogICAgICdudF91c2VyJzogewogICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9JywKICAgICAgICAgJ3BsYXRzdGRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0nLApAQCAtMjEwLDcgKzE5MCw2IEBACiAgICAgZGVmIGpvaW51c2VyKCphcmdzKToKICAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oKmFyZ3MpKQogCi0gICAgIyB3aGF0IGFib3V0ICdvczJlbXgnLCAncmlzY29zJyA/CiAgICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICBiYXNlID0gb3MuZW52aXJvbi5nZXQoIkFQUERBVEEiKSBvciAifiIKICAgICAgICAgaWYgZW52X2Jhc2U6CkBAIC0yNDIsNiArMjIxLDcgQEAKICAgICAiIiIKICAgICAjIFJlZ2V4ZXMgbmVlZGVkIGZvciBwYXJzaW5nIE1ha2VmaWxlIChhbmQgc2ltaWxhciBzeW50YXhlcywKICAgICAjIGxpa2Ugb2xkLXN0eWxlIFNldHVwIGZpbGVzKS4KKyAgICBpbXBvcnQgcmUKICAgICBfdmFyaWFibGVfcnggPSByZS5jb21waWxlKCIoW2EtekEtWl1bYS16QS1aMC05X10rKVxzKj1ccyooLiopIikKICAgICBfZmluZHZhcjFfcnggPSByZS5jb21waWxlKHIiXCRcKChbQS1aYS16XVtBLVphLXowLTlfXSopXCkiKQogICAgIF9maW5kdmFyMl9yeCA9IHJlLmNvbXBpbGUociJcJHsoW0EtWmEtel1bQS1aYS16MC05X10qKX0iKQpAQCAtMzY5LDIxICszNDksMjEgQEAKICAgICBtYWtlZmlsZSA9IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCiAgICAgdHJ5OgogICAgICAgICBfcGFyc2VfbWFrZWZpbGUobWFrZWZpbGUsIHZhcnMpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBtc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBtYWtlZmlsZQogICAgICAgICBpZiBoYXNhdHRyKGUsICJzdHJlcnJvciIpOgogICAgICAgICAgICAgbXNnID0gbXNnICsgIiAoJXMpIiAlIGUuc3RyZXJyb3IKLSAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgICAgIHJhaXNlIE9TRXJyb3IobXNnKQogICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIHB5Y29uZmlnLmg6CiAgICAgY29uZmlnX2ggPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKGNvbmZpZ19oKSBhcyBmOgogICAgICAgICAgICAgcGFyc2VfY29uZmlnX2goZiwgdmFycykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGNvbmZpZ19oCiAgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CiAgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgotICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKyAgICAgICAgcmFpc2UgT1NFcnJvcihtc2cpCiAgICAgIyBPbiBBSVgsIHRoZXJlIGFyZSB3cm9uZyBwYXRocyB0byB0aGUgbGlua2VyIHNjcmlwdHMgaW4gdGhlIE1ha2VmaWxlCiAgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAogICAgICMgdGhlIHNjcmlwdHMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5LgpAQCAtNDAzLDggKzM4Myw4IEBACiAgICAgIyBnZXRfcGxhdGZvcm0oKSBzdWNjZWVkcy4KICAgICBuYW1lID0gJ19zeXNjb25maWdkYXRhJwogICAgIGlmICdkYXJ3aW4nIGluIHN5cy5wbGF0Zm9ybToKLSAgICAgICAgaW1wb3J0IGltcAotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICBtb2R1bGUuYnVpbGRfdGltZV92YXJzID0gdmFycwogICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogCkBAIC00MzYsNyArNDE2LDYgQEAKICAgICB2YXJzWydMSUJERVNUJ10gPSBnZXRfcGF0aCgnc3RkbGliJykKICAgICB2YXJzWydCSU5MSUJERVNUJ10gPSBnZXRfcGF0aCgncGxhdHN0ZGxpYicpCiAgICAgdmFyc1snSU5DTFVERVBZJ10gPSBnZXRfcGF0aCgnaW5jbHVkZScpCi0gICAgdmFyc1snU08nXSA9ICcucHlkJwogICAgIHZhcnNbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIHZhcnNbJ0VYRSddID0gJy5leGUnCiAgICAgdmFyc1snVkVSU0lPTiddID0gX1BZX1ZFUlNJT05fU0hPUlRfTk9fRE9UCkBAIC00NTYsNiArNDM1LDcgQEAKICAgICAiIiIKICAgICBpZiB2YXJzIGlzIE5vbmU6CiAgICAgICAgIHZhcnMgPSB7fQorICAgIGltcG9ydCByZQogICAgIGRlZmluZV9yeCA9IHJlLmNvbXBpbGUoIiNkZWZpbmUgKFtBLVpdW0EtWmEtejAtOV9dKykgKC4qKVxuIikKICAgICB1bmRlZl9yeCA9IHJlLmNvbXBpbGUoIi9bKl0gI3VuZGVmIChbQS1aXVtBLVphLXowLTlfXSspIFsqXS9cbiIpCiAKQEAgLTU1MiwxMCArNTMyLDE0IEBACiAgICAgICAgICAgICAjIHN5cy5hYmlmbGFncyBtYXkgbm90IGJlIGRlZmluZWQgb24gYWxsIHBsYXRmb3Jtcy4KICAgICAgICAgICAgIF9DT05GSUdfVkFSU1snYWJpZmxhZ3MnXSA9ICcnCiAKLSAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpOgorICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgICAgICBfaW5pdF9ub25fcG9zaXgoX0NPTkZJR19WQVJTKQogICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CiAgICAgICAgICAgICBfaW5pdF9wb3NpeChfQ09ORklHX1ZBUlMpCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNlZSBpc3N1ZTE5NTU1CisgICAgICAgIFNPID0gX0NPTkZJR19WQVJTLmdldCgnRVhUX1NVRkZJWCcpCisgICAgICAgIGlmIFNPIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX0NPTkZJR19WQVJTWydTTyddID0gU08KICAgICAgICAgIyBTZXR0aW5nICd1c2VyYmFzZScgaXMgZG9uZSBiZWxvdyB0aGUgY2FsbCB0byB0aGUKICAgICAgICAgIyBpbml0IGZ1bmN0aW9uIHRvIGVuYWJsZSB1c2luZyAnZ2V0X2NvbmZpZ192YXInIGluCiAgICAgICAgICMgdGhlIGluaXQtZnVuY3Rpb24uCkBAIC01OTksNiArNTgzLDkgQEAKIAogICAgIEVxdWl2YWxlbnQgdG8gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCiAgICAgIiIiCisgICAgaWYgbmFtZSA9PSAnU08nOgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybignU08gaXMgZGVwcmVjYXRlZCwgdXNlIEVYVF9TVUZGSVgnLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgcmV0dXJuIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQogCiAKQEAgLTY3OSw2ICs2NjYsNyBAQAogICAgICAgICByZXR1cm4gIiVzLSVzLiVzIiAlIChvc25hbWUsIHZlcnNpb24sIHJlbGVhc2UpCiAgICAgZWxpZiBvc25hbWVbOjZdID09ICJjeWd3aW4iOgogICAgICAgICBvc25hbWUgPSAiY3lnd2luIgorICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgcmVsX3JlID0gcmUuY29tcGlsZShyJ1tcZC5dKycpCiAgICAgICAgIG0gPSByZWxfcmUubWF0Y2gocmVsZWFzZSkKICAgICAgICAgaWYgbToKZGlmZiAtLWdpdCBhL0xpYi90YWJuYW5ueS5weSBiL0xpYi90YWJuYW5ueS5weQppbmRleCA1YjliNDQ0Li40NmUwZjU2IDEwMDc1NQotLS0gYS9MaWIvdGFibmFubnkucHkKKysrIGIvTGliL3RhYm5hbm55LnB5CkBAIC05NSw3ICs5NSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIGYgPSB0b2tlbml6ZS5vcGVuKGZpbGUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJycHJpbnQoIiVyOiBJL08gRXJyb3I6ICVzIiAlIChmaWxlLCBtc2cpKQogICAgICAgICByZXR1cm4KIApkaWZmIC0tZ2l0IGEvTGliL3RhcmZpbGUucHkgYi9MaWIvdGFyZmlsZS5weQppbmRleCAxNmQzMzhjLi5mNGRmNmM3IDEwMDY0NAotLS0gYS9MaWIvdGFyZmlsZS5weQorKysgYi9MaWIvdGFyZmlsZS5weQpAQCAtNTYsOSArNTYsOSBAQAogIyBvcy5zeW1saW5rIG9uIFdpbmRvd3MgcHJpb3IgdG8gNi4wIHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yCiBzeW1saW5rX2V4Y2VwdGlvbiA9IChBdHRyaWJ1dGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcikKIHRyeToKLSAgICAjIFdpbmRvd3NFcnJvciAoMTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQorICAgICMgT1NFcnJvciAod2luZXJyb3I9MTMxNCkgd2lsbCBiZSByYWlzZWQgaWYgdGhlIGNhbGxlciBkb2VzIG5vdCBob2xkIHRoZQogICAgICMgU2VDcmVhdGVTeW1ib2xpY0xpbmtQcml2aWxlZ2UgcHJpdmlsZWdlCi0gICAgc3ltbGlua19leGNlcHRpb24gKz0gKFdpbmRvd3NFcnJvciwpCisgICAgc3ltbGlua19leGNlcHRpb24gKz0gKE9TRXJyb3IsKQogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKQEAgLTE0MCwzMCArMTQwLDYgQEAKIH0KIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBCaXRzIHVzZWQgaW4gdGhlIG1vZGUgZmllbGQsIHZhbHVlcyBpbiBvY3RhbC4KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVNfSUZMTksgPSAwbzEyMDAwMCAgICAgICAgIyBzeW1ib2xpYyBsaW5rCi1TX0lGUkVHID0gMG8xMDAwMDAgICAgICAgICMgcmVndWxhciBmaWxlCi1TX0lGQkxLID0gMG8wNjAwMDAgICAgICAgICMgYmxvY2sgZGV2aWNlCi1TX0lGRElSID0gMG8wNDAwMDAgICAgICAgICMgZGlyZWN0b3J5Ci1TX0lGQ0hSID0gMG8wMjAwMDAgICAgICAgICMgY2hhcmFjdGVyIGRldmljZQotU19JRklGTyA9IDBvMDEwMDAwICAgICAgICAjIGZpZm8KLQotVFNVSUQgICA9IDBvNDAwMCAgICAgICAgICAjIHNldCBVSUQgb24gZXhlY3V0aW9uCi1UU0dJRCAgID0gMG8yMDAwICAgICAgICAgICMgc2V0IEdJRCBvbiBleGVjdXRpb24KLVRTVlRYICAgPSAwbzEwMDAgICAgICAgICAgIyByZXNlcnZlZAotCi1UVVJFQUQgID0gMG80MDAgICAgICAgICAgICMgcmVhZCBieSBvd25lcgotVFVXUklURSA9IDBvMjAwICAgICAgICAgICAjIHdyaXRlIGJ5IG93bmVyCi1UVUVYRUMgID0gMG8xMDAgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgb3duZXIKLVRHUkVBRCAgPSAwbzA0MCAgICAgICAgICAgIyByZWFkIGJ5IGdyb3VwCi1UR1dSSVRFID0gMG8wMjAgICAgICAgICAgICMgd3JpdGUgYnkgZ3JvdXAKLVRHRVhFQyAgPSAwbzAxMCAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBncm91cAotVE9SRUFEICA9IDBvMDA0ICAgICAgICAgICAjIHJlYWQgYnkgb3RoZXIKLVRPV1JJVEUgPSAwbzAwMiAgICAgICAgICAgIyB3cml0ZSBieSBvdGhlcgotVE9FWEVDICA9IDBvMDAxICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IG90aGVyCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgaW5pdGlhbGl6YXRpb24KICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlmIG9zLm5hbWUgaW4gKCJudCIsICJjZSIpOgpAQCAtMjY0LDEzICsyNDAsMTMgQEAKICAgICBmb3IgYiBpbiByYW5nZShibG9ja3MpOgogICAgICAgICBidWYgPSBzcmMucmVhZChCVUZTSVpFKQogICAgICAgICBpZiBsZW4oYnVmKSA8IEJVRlNJWkU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogCiAgICAgaWYgcmVtYWluZGVyICE9IDA6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKHJlbWFpbmRlcikKICAgICAgICAgaWYgbGVuKGJ1ZikgPCByZW1haW5kZXI6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImVuZCBvZiBmaWxlIHJlYWNoZWQiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogICAgIHJldHVybgogCkBAIC0zOTksNyArMzc1LDcgQEAKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICJyIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5kYnVmID0gYiIiCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IE9TRXJyb3IKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKIApAQCAtMTYzMSw3ICsxNjA3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmlsZW9iaiA9IGd6aXAuR3ppcEZpbGUobmFtZSwgbW9kZSArICJiIiwgY29tcHJlc3NsZXZlbCwgZmlsZW9iaikKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgaWYgbm90IGV4dGZpbGVvYmogYW5kIGZpbGVvYmogaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICBpZiBmaWxlb2JqIGlzIE5vbmU6CkBAIC0xNjYyLDcgKzE2MzgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgZmlsZW9iai5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIm5vdCBhIGJ6aXAyIGZpbGUiKQogICAgICAgICB0Ll9leHRmaWxlb2JqID0gRmFsc2UKQEAgLTIwMjIsNyArMTk5OCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHRhcmluZm8sIG9zLnBhdGguam9pbihwYXRoLCB0YXJpbmZvLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2F0dHJzPXNldF9hdHRycykKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGVsc2U6CkBAIC0yMjExLDkgKzIxODcsOCBAQAogICAgICAgICAgICAgICAgIGlmIHRhcmluZm8uaXNzeW0oKSBhbmQgaGFzYXR0cihvcywgImxjaG93biIpOgogICAgICAgICAgICAgICAgICAgICBvcy5sY2hvd24odGFyZ2V0cGF0aCwgdSwgZykKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIm9zMmVteCI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG93bih0YXJnZXRwYXRoLCB1LCBnKQotICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hvd24odGFyZ2V0cGF0aCwgdSwgZykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG93bmVyIikKIAogICAgIGRlZiBjaG1vZChzZWxmLCB0YXJpbmZvLCB0YXJnZXRwYXRoKToKQEAgLTIyMjIsNyArMjE5Nyw3IEBACiAgICAgICAgIGlmIGhhc2F0dHIob3MsICdjaG1vZCcpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLmNobW9kKHRhcmdldHBhdGgsIHRhcmluZm8ubW9kZSkKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBtb2RlIikKIAogICAgIGRlZiB1dGltZShzZWxmLCB0YXJpbmZvLCB0YXJnZXRwYXRoKToKQEAgLTIyMzIsNyArMjIwNyw3IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudXRpbWUodGFyZ2V0cGF0aCwgKHRhcmluZm8ubXRpbWUsIHRhcmluZm8ubXRpbWUpKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRXh0cmFjdEVycm9yKCJjb3VsZCBub3QgY2hhbmdlIG1vZGlmaWNhdGlvbiB0aW1lIikKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjMyMyw5ICsyMjk4LDkgQEAKICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gVGFyRmlsZSdzIG1vZGUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIiVzIGlzIGNsb3NlZCIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIiVzIGlzIGNsb3NlZCIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgaWYgbW9kZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5tb2RlIG5vdCBpbiBtb2RlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiYmFkIG9wZXJhdGlvbiBmb3IgbW9kZSAlciIgJSBzZWxmLm1vZGUpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKIAogICAgIGRlZiBfZmluZF9saW5rX3RhcmdldChzZWxmLCB0YXJpbmZvKToKICAgICAgICAgIiIiRmluZCB0aGUgdGFyZ2V0IG1lbWJlciBvZiBhIHN5bWxpbmsgb3IgaGFyZGxpbmsgbWVtYmVyIGluIHRoZQpAQCAtMjQyOSwzICsyNDA0LDk3IEBACiAKIGJsdG5fb3BlbiA9IG9wZW4KIG9wZW4gPSBUYXJGaWxlLm9wZW4KKworCitkZWYgbWFpbigpOgorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgZGVzY3JpcHRpb24gPSAnQSBzaW1wbGUgY29tbWFuZCBsaW5lIGludGVyZmFjZSBmb3IgdGFyZmlsZSBtb2R1bGUuJworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcpCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbCcsICctLWxpc3QnLCBtZXRhdmFyPSc8dGFyZmlsZT4nLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTaG93IGxpc3Rpbmcgb2YgYSB0YXJmaWxlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1lJywgJy0tZXh0cmFjdCcsIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0oJzx0YXJmaWxlPicsICc8b3V0cHV0X2Rpcj4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRXh0cmFjdCB0YXJmaWxlIGludG8gdGFyZ2V0IGRpcicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsICctLWNyZWF0ZScsIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0oJzxuYW1lPicsICc8ZmlsZT4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ3JlYXRlIHRhcmZpbGUgZnJvbSBzb3VyY2VzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy10JywgJy0tdGVzdCcsIG1ldGF2YXI9Jzx0YXJmaWxlPicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Rlc3QgaWYgYSB0YXJmaWxlIGlzIHZhbGlkJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgaWYgYXJncy50ZXN0OgorICAgICAgICBzcmMgPSBhcmdzLnRlc3QKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgICAgIHByaW50KHRhci5nZXRtZW1iZXJzKCksIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgneyFyfSBpcyBhIHRhciBhcmNoaXZlLicuZm9ybWF0KHNyYykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCAneyFyfSBpcyBub3QgYSB0YXIgYXJjaGl2ZS5cbicuZm9ybWF0KHNyYykpCisKKyAgICBlbGlmIGFyZ3MubGlzdDoKKyAgICAgICAgc3JjID0gYXJncy5saXN0CisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHNyYywgJ3I6KicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1hcmdzLnZlcmJvc2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCAneyFyfSBpcyBub3QgYSB0YXIgYXJjaGl2ZS5cbicuZm9ybWF0KHNyYykpCisKKyAgICBlbGlmIGFyZ3MuZXh0cmFjdDoKKyAgICAgICAgaWYgbGVuKGFyZ3MuZXh0cmFjdCkgPT0gMToKKyAgICAgICAgICAgIHNyYyA9IGFyZ3MuZXh0cmFjdFswXQorICAgICAgICAgICAgY3VyZGlyID0gb3MuY3VyZGlyCisgICAgICAgIGVsaWYgbGVuKGFyZ3MuZXh0cmFjdCkgPT0gMjoKKyAgICAgICAgICAgIHNyYywgY3VyZGlyID0gYXJncy5leHRyYWN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJzZXIuZXhpdCgxLCBwYXJzZXIuZm9ybWF0X2hlbHAoKSkKKworICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIFRhckZpbGUub3BlbihzcmMsICdyOionKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICB0Zi5leHRyYWN0YWxsKHBhdGg9Y3VyZGlyKQorICAgICAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgICAgIGlmIGN1cmRpciA9PSAnLic6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICd7IXJ9IGZpbGUgaXMgZXh0cmFjdGVkLicuZm9ybWF0KHNyYykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAoJ3shcn0gZmlsZSBpcyBleHRyYWN0ZWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludG8geyFyfSBkaXJlY3RvcnkuJykuZm9ybWF0KHNyYywgY3VyZGlyKQorICAgICAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5jcmVhdGU6CisgICAgICAgIHRhcl9uYW1lID0gYXJncy5jcmVhdGUucG9wKDApCisgICAgICAgIF8sIGV4dCA9IG9zLnBhdGguc3BsaXRleHQodGFyX25hbWUpCisgICAgICAgIGNvbXByZXNzaW9ucyA9IHsKKyAgICAgICAgICAgICMgZ3oKKyAgICAgICAgICAgICdneic6ICdneicsCisgICAgICAgICAgICAndGd6JzogJ2d6JywKKyAgICAgICAgICAgICMgeHoKKyAgICAgICAgICAgICd4eic6ICd4eicsCisgICAgICAgICAgICAndHh6JzogJ3h6JywKKyAgICAgICAgICAgICMgYnoyCisgICAgICAgICAgICAnYnoyJzogJ2J6MicsCisgICAgICAgICAgICAndGJ6JzogJ2J6MicsCisgICAgICAgICAgICAndGJ6Mic6ICdiejInLAorICAgICAgICAgICAgJ3RiMic6ICdiejInLAorICAgICAgICB9CisgICAgICAgIHRhcl9tb2RlID0gJ3c6JyArIGNvbXByZXNzaW9uc1tleHRdIGlmIGV4dCBpbiBjb21wcmVzc2lvbnMgZWxzZSAndycKKyAgICAgICAgdGFyX2ZpbGVzID0gYXJncy5jcmVhdGUKKworICAgICAgICB3aXRoIFRhckZpbGUub3Blbih0YXJfbmFtZSwgdGFyX21vZGUpIGFzIHRmOgorICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiB0YXJfZmlsZXM6CisgICAgICAgICAgICAgICAgdGYuYWRkKGZpbGVfbmFtZSkKKworICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgneyFyfSBmaWxlIGNyZWF0ZWQuJy5mb3JtYXQodGFyX25hbWUpKQorCisgICAgZWxzZToKKyAgICAgICAgcGFyc2VyLmV4aXQoMSwgcGFyc2VyLmZvcm1hdF9oZWxwKCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVsbmV0bGliLnB5IGIvTGliL3RlbG5ldGxpYi5weQppbmRleCAxNGNhMWIxLi4wY2FjYWM4IDEwMDY0NAotLS0gYS9MaWIvdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZWxuZXRsaWIucHkKQEAgLTE3LDEzICsxNywxMiBAQAogTm90ZSB0aGF0IHJlYWRfYWxsKCkgd29uJ3QgcmVhZCB1bnRpbCBlb2YgLS0gaXQganVzdCByZWFkcyBzb21lIGRhdGEKIC0tIGJ1dCBpdCBndWFyYW50ZWVzIHRvIHJlYWQgYXQgbGVhc3Qgb25lIGJ5dGUgdW5sZXNzIEVPRiBpcyBoaXQuCiAKLUl0IGlzIHBvc3NpYmxlIHRvIHBhc3MgYSBUZWxuZXQgb2JqZWN0IHRvIHNlbGVjdC5zZWxlY3QoKSBpbiBvcmRlciB0bwotd2FpdCB1bnRpbCBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLiAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwKLXJlYWRfZWFnZXIoKSBtYXkgcmV0dXJuIGInJyBldmVuIGlmIHRoZXJlIHdhcyBkYXRhIG9uIHRoZSBzb2NrZXQsCi1iZWNhdXNlIHRoZSBwcm90b2NvbCBuZWdvdGlhdGlvbiBtYXkgaGF2ZSBlYXRlbiB0aGUgZGF0YS4gIFRoaXMgaXMgd2h5Ci1FT0ZFcnJvciBpcyBuZWVkZWQgaW4gc29tZSBjYXNlcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuICJubyBkYXRhIiBhbmQKLSJjb25uZWN0aW9uIGNsb3NlZCIgKHNpbmNlIHRoZSBzb2NrZXQgYWxzbyBhcHBlYXJzIHJlYWR5IGZvciByZWFkaW5nCi13aGVuIGl0IGlzIGNsb3NlZCkuCitJdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgVGVsbmV0IG9iamVjdCB0byBhIHNlbGVjdG9yIGluIG9yZGVyIHRvIHdhaXQgdW50aWwKK21vcmUgZGF0YSBpcyBhdmFpbGFibGUuICBOb3RlIHRoYXQgaW4gdGhpcyBjYXNlLCByZWFkX2VhZ2VyKCkgbWF5IHJldHVybiBiJycKK2V2ZW4gaWYgdGhlcmUgd2FzIGRhdGEgb24gdGhlIHNvY2tldCwgYmVjYXVzZSB0aGUgcHJvdG9jb2wgbmVnb3RpYXRpb24gbWF5IGhhdmUKK2VhdGVuIHRoZSBkYXRhLiAgVGhpcyBpcyB3aHkgRU9GRXJyb3IgaXMgbmVlZGVkIGluIHNvbWUgY2FzZXMgdG8gZGlzdGluZ3Vpc2gKK2JldHdlZW4gIm5vIGRhdGEiIGFuZCAiY29ubmVjdGlvbiBjbG9zZWQiIChzaW5jZSB0aGUgc29ja2V0IGFsc28gYXBwZWFycyByZWFkeQorZm9yIHJlYWRpbmcgd2hlbiBpdCBpcyBjbG9zZWQpLgogCiBUbyBkbzoKIC0gb3B0aW9uIG5lZ290aWF0aW9uCkBAIC0zNCwxMCArMzMsOSBAQAogCiAKICMgSW1wb3J0ZWQgbW9kdWxlcwotaW1wb3J0IGVycm5vCiBpbXBvcnQgc3lzCiBpbXBvcnQgc29ja2V0Ci1pbXBvcnQgc2VsZWN0CitpbXBvcnQgc2VsZWN0b3JzCiB0cnk6CiAgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgX3RpbWUKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTEzNCw2ICsxMzIsMTUgQEAKIEVYT1BMID0gYnl0ZXMoWzI1NV0pICMgRXh0ZW5kZWQtT3B0aW9ucy1MaXN0CiBOT09QVCA9IGJ5dGVzKFswXSkKIAorCisjIHBvbGwvc2VsZWN0IGhhdmUgdGhlIGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueSBleHRyYSBmaWxlIGRlc2NyaXB0b3IsCisjIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUgc3lzY2FsbCkuCitpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgIF9UZWxuZXRTZWxlY3RvciA9IHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IKK2Vsc2U6CisgICAgX1RlbG5ldFNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKKwogY2xhc3MgVGVsbmV0OgogCiAgICAgIiIiVGVsbmV0IGludGVyZmFjZSBjbGFzcy4KQEAgLTIxMCw3ICsyMTcsNiBAQAogICAgICAgICBzZWxmLnNiID0gMCAjIGZsYWcgZm9yIFNCIGFuZCBTRSBzZXF1ZW5jZS4KICAgICAgICAgc2VsZi5zYmRhdGFxID0gYicnCiAgICAgICAgIHNlbGYub3B0aW9uX2NhbGxiYWNrID0gTm9uZQotICAgICAgICBzZWxmLl9oYXNfcG9sbCA9IGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpCiAgICAgICAgIGlmIGhvc3QgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLm9wZW4oaG9zdCwgcG9ydCwgdGltZW91dCkKIApAQCAtMjc3LDcgKzI4Myw3IEBACiAgICAgICAgICIiIldyaXRlIGEgc3RyaW5nIHRvIHRoZSBzb2NrZXQsIGRvdWJsaW5nIGFueSBJQUMgY2hhcmFjdGVycy4KIAogICAgICAgICBDYW4gYmxvY2sgaWYgdGhlIGNvbm5lY3Rpb24gaXMgYmxvY2tlZC4gIE1heSByYWlzZQotICAgICAgICBzb2NrZXQuZXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICAgICAgICBPU0Vycm9yIGlmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KIAogICAgICAgICAiIiIKICAgICAgICAgaWYgSUFDIGluIGJ1ZmZlcjoKQEAgLTI5Myw2MCArMjk5LDYgQEAKICAgICAgICAgaXMgY2xvc2VkIGFuZCBubyBjb29rZWQgZGF0YSBpcyBhdmFpbGFibGUuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX2hhc19wb2xsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW50aWxfd2l0aF9wb2xsKG1hdGNoLCB0aW1lb3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW50aWxfd2l0aF9zZWxlY3QobWF0Y2gsIHRpbWVvdXQpCi0KLSAgICBkZWYgX3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYsIG1hdGNoLCB0aW1lb3V0KToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBhIGdpdmVuIHN0cmluZyBpcyBlbmNvdW50ZXJlZCBvciB1bnRpbCB0aW1lb3V0LgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGhlIHRpbWVvdXQuCi0gICAgICAgICIiIgotICAgICAgICBuID0gbGVuKG1hdGNoKQotICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCkKLSAgICAgICAgaWYgaSA8IDA6Ci0gICAgICAgICAgICBwb2xsZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBwb2xsZXIucmVnaXN0ZXIoc2VsZiwgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncykKLSAgICAgICAgICAgIHdoaWxlIGkgPCAwIGFuZCBub3Qgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHBvbGxlci5wb2xsKGNhbGxfdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBmb3IgZmQsIG1vZGUgaW4gcmVhZHk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgJiBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzOgotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBsZW4oc2VsZi5jb29rZWRxKS1uKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoLCBpKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKHNlbGYpCi0gICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgIGkgPSBpICsgbgotICAgICAgICAgICAgYnVmID0gc2VsZi5jb29rZWRxWzppXQotICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQotICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCi0KLSAgICBkZWYgX3JlYWRfdW50aWxfd2l0aF9zZWxlY3Qoc2VsZiwgbWF0Y2gsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgYSBnaXZlbiBzdHJpbmcgaXMgZW5jb3VudGVyZWQgb3IgdW50aWwgdGltZW91dC4KLQotICAgICAgICBUaGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZWxlY3Quc2VsZWN0KCkuCi0gICAgICAgICIiIgogICAgICAgICBuID0gbGVuKG1hdGNoKQogICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCiAgICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCkKQEAgLTM1NSwyNiArMzA3LDI1IEBACiAgICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCiAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCiAgICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgIHNfcmVwbHkgPSAoW3NlbGZdLCBbXSwgW10pCi0gICAgICAgIHNfYXJncyA9IHNfcmVwbHkKICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNfYXJncyA9IHNfYXJncyArICh0aW1lb3V0LCkKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZiBhbmQgc2VsZWN0LnNlbGVjdCgqc19hcmdzKSA9PSBzX3JlcGx5OgotICAgICAgICAgICAgaSA9IG1heCgwLCBsZW4oc2VsZi5jb29rZWRxKS1uKQotICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQotICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoLCBpKQotICAgICAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgICAgIGkgPSBpK24KLSAgICAgICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCi0gICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2k6XQotICAgICAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNfYXJncyA9IHNfcmVwbHkgKyAodGltZW91dC1lbGFwc2VkLCkKKyAgICAgICAgICAgIGRlYWRsaW5lID0gX3RpbWUoKSArIHRpbWVvdXQKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuZW9mOgorICAgICAgICAgICAgICAgIGlmIHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgaSA9IG1heCgwLCBsZW4oc2VsZi5jb29rZWRxKS1uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKKyAgICAgICAgICAgICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoLCBpKQorICAgICAgICAgICAgICAgICAgICBpZiBpID49IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gaStuCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmCisgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IGRlYWRsaW5lIC0gX3RpbWUoKQorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKIAogICAgIGRlZiByZWFkX2FsbChzZWxmKToKQEAgLTU3OSwyOSArNTMwLDM1IEBACiAKICAgICBkZWYgc29ja19hdmFpbChzZWxmKToKICAgICAgICAgIiIiVGVzdCB3aGV0aGVyIGRhdGEgaXMgYXZhaWxhYmxlIG9uIHRoZSBzb2NrZXQuIiIiCi0gICAgICAgIHJldHVybiBzZWxlY3Quc2VsZWN0KFtzZWxmXSwgW10sIFtdLCAwKSA9PSAoW3NlbGZdLCBbXSwgW10pCisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHJldHVybiBib29sKHNlbGVjdG9yLnNlbGVjdCgwKSkKIAogICAgIGRlZiBpbnRlcmFjdChzZWxmKToKICAgICAgICAgIiIiSW50ZXJhY3Rpb24gZnVuY3Rpb24sIGVtdWxhdGVzIGEgdmVyeSBkdW1iIHRlbG5ldCBjbGllbnQuIiIiCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgogICAgICAgICAgICAgc2VsZi5tdF9pbnRlcmFjdCgpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJmZCwgd2ZkLCB4ZmQgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLCBzeXMuc3RkaW5dLCBbXSwgW10pCi0gICAgICAgICAgICBpZiBzZWxmIGluIHJmZDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfZWFnZXIoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBDb25uZWN0aW9uIGNsb3NlZCBieSByZW1vdGUgaG9zdCAqKionKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHRleHQ6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUodGV4dC5kZWNvZGUoJ2FzY2lpJykpCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGluIHJmZDoKLSAgICAgICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuZW5jb2RlKCdhc2NpaScpCi0gICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzeXMuc3RkaW4sIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGZvciBrZXksIGV2ZW50cyBpbiBzZWxlY3Rvci5zZWxlY3QoKToKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgc2VsZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX2VhZ2VyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIENvbm5lY3Rpb24gY2xvc2VkIGJ5IHJlbW90ZSBob3N0ICoqKicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUodGV4dC5kZWNvZGUoJ2FzY2lpJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5LmZpbGVvYmogaXMgc3lzLnN0ZGluOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IHN5cy5zdGRpbi5yZWFkbGluZSgpLmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCiAKICAgICBkZWYgbXRfaW50ZXJhY3Qoc2VsZik6CiAgICAgICAgICIiIk11bHRpdGhyZWFkZWQgdmVyc2lvbiBvZiBpbnRlcmFjdCgpLiIiIgpAQCAtNjQ4LDc4ICs2MDUsNiBAQAogICAgICAgICByZXN1bHRzIGFyZSB1bmRldGVybWluaXN0aWMsIGFuZCBtYXkgZGVwZW5kIG9uIHRoZSBJL08gdGltaW5nLgogCiAgICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9oYXNfcG9sbDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3Rfd2l0aF9wb2xsKGxpc3QsIHRpbWVvdXQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhwZWN0X3dpdGhfc2VsZWN0KGxpc3QsIHRpbWVvdXQpCi0KLSAgICBkZWYgX2V4cGVjdF93aXRoX3BvbGwoc2VsZiwgZXhwZWN0X2xpc3QsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgb25lIGZyb20gYSBsaXN0IG9mIGEgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGVzLgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGhlIHRpbWVvdXQuCi0gICAgICAgICIiIgotICAgICAgICByZSA9IE5vbmUKLSAgICAgICAgZXhwZWN0X2xpc3QgPSBleHBlY3RfbGlzdFs6XQotICAgICAgICBpbmRpY2VzID0gcmFuZ2UobGVuKGV4cGVjdF9saXN0KSkKLSAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGV4cGVjdF9saXN0W2ldLCAic2VhcmNoIik6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHJlOiBpbXBvcnQgcmUKLSAgICAgICAgICAgICAgICBleHBlY3RfbGlzdFtpXSA9IHJlLmNvbXBpbGUoZXhwZWN0X2xpc3RbaV0pCi0gICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQKLSAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRpbWVfc3RhcnQgPSBfdGltZSgpCi0gICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgbSA9IE5vbmUKLSAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgIG0gPSBleHBlY3RfbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG5vdCBtOgotICAgICAgICAgICAgcG9sbGVyID0gc2VsZWN0LnBvbGwoKQotICAgICAgICAgICAgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncyA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgcG9sbGVyLnJlZ2lzdGVyKHNlbGYsIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3MpCi0gICAgICAgICAgICB3aGlsZSBub3QgbSBhbmQgbm90IHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSBwb2xsZXIucG9sbChjYWxsX3RpbWVvdXQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVJTlRSOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgZm9yIGZkLCBtb2RlIGluIHJlYWR5OgotICAgICAgICAgICAgICAgICAgICBpZiBtb2RlICYgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFnczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGV4cGVjdF9saXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG0uZW5kKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0LWVsYXBzZWQKLSAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKHNlbGYpCi0gICAgICAgIGlmIG06Ci0gICAgICAgICAgICByZXR1cm4gKGksIG0sIHRleHQpCi0gICAgICAgIHRleHQgPSBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKLSAgICAgICAgaWYgbm90IHRleHQgYW5kIHNlbGYuZW9mOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgcmV0dXJuICgtMSwgTm9uZSwgdGV4dCkKLQotICAgIGRlZiBfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYsIGxpc3QsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdW50aWwgb25lIGZyb20gYSBsaXN0IG9mIGEgcmVndWxhciBleHByZXNzaW9ucyBtYXRjaGVzLgotCi0gICAgICAgIFRoZSB0aW1lb3V0IGlzIGltcGxlbWVudGVkIHVzaW5nIHNlbGVjdC5zZWxlY3QoKS4KLSAgICAgICAgIiIiCiAgICAgICAgIHJlID0gTm9uZQogICAgICAgICBsaXN0ID0gbGlzdFs6XQogICAgICAgICBpbmRpY2VzID0gcmFuZ2UobGVuKGxpc3QpKQpAQCAtNzI4LDI3ICs2MTMsMjcgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgcmU6IGltcG9ydCByZQogICAgICAgICAgICAgICAgIGxpc3RbaV0gPSByZS5jb21waWxlKGxpc3RbaV0pCiAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKLSAgICAgICAgICAgICAgICBtID0gbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQotICAgICAgICAgICAgaWYgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNfYXJncyA9IChbc2VsZi5maWxlbm8oKV0sIFtdLCBbXSwgdGltZW91dC1lbGFwc2VkKQotICAgICAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KCpzX2FyZ3MpCi0gICAgICAgICAgICAgICAgaWYgbm90IHI6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCisgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0CisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmVvZjoKKyAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gaW5kaWNlczoKKyAgICAgICAgICAgICAgICAgICAgbSA9IGxpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb29rZWRxID0gc2VsZi5jb29rZWRxW2U6XQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWR5OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCiAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKICAgICAgICAgaWYgbm90IHRleHQgYW5kIHNlbGYuZW9mOgogICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKZGlmZiAtLWdpdCBhL0xpYi90ZW1wZmlsZS5weSBiL0xpYi90ZW1wZmlsZS5weQppbmRleCA5MTMzMmI2Li41ZDM0NjIxIDEwMDY0NAotLS0gYS9MaWIvdGVtcGZpbGUucHkKKysrIGIvTGliL3RlbXBmaWxlLnB5CkBAIC0zNSwzMSArMzUsMTIgQEAKIGZyb20gcmFuZG9tIGltcG9ydCBSYW5kb20gYXMgX1JhbmRvbQogCiB0cnk6Ci0gICAgaW1wb3J0IGZjbnRsIGFzIF9mY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfc2V0X2Nsb2V4ZWMoZmQpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmbGFncyA9IF9mY250bC5mY250bChmZCwgX2ZjbnRsLkZfR0VURkQsIDApCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBmbGFncyByZWFkIHN1Y2Nlc3NmdWxseSwgbW9kaWZ5Ci0gICAgICAgICAgICBmbGFncyB8PSBfZmNudGwuRkRfQ0xPRVhFQwotICAgICAgICAgICAgX2ZjbnRsLmZjbnRsKGZkLCBfZmNudGwuRl9TRVRGRCwgZmxhZ3MpCi0KLQotdHJ5OgogICAgIGltcG9ydCBfdGhyZWFkCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgaW1wb3J0IF9kdW1teV90aHJlYWQgYXMgX3RocmVhZAogX2FsbG9jYXRlX2xvY2sgPSBfdGhyZWFkLmFsbG9jYXRlX2xvY2sKIAogX3RleHRfb3BlbmZsYWdzID0gX29zLk9fUkRXUiB8IF9vcy5PX0NSRUFUIHwgX29zLk9fRVhDTAotaWYgaGFzYXR0cihfb3MsICdPX05PSU5IRVJJVCcpOgotICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0lOSEVSSVQKIGlmIGhhc2F0dHIoX29zLCAnT19OT0ZPTExPVycpOgogICAgIF90ZXh0X29wZW5mbGFncyB8PSBfb3MuT19OT0ZPTExPVwogCkBAIC04OCw4ICs2OSw4IEBACiAgICAgIyBGYWxsYmFjay4gIEFsbCB3ZSBuZWVkIGlzIHNvbWV0aGluZyB0aGF0IHJhaXNlcyBPU0Vycm9yIGlmIHRoZQogICAgICMgZmlsZSBkb2Vzbid0IGV4aXN0LgogICAgIGRlZiBfc3RhdChmbik6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmQgPSBfb3Mub3BlbihmbiwgX29zLk9fUkRPTkxZKQorICAgICAgICBvcy5jbG9zZShmZCkKIAogZGVmIF9leGlzdHMoZm4pOgogICAgIHRyeToKQEAgLTEyMyw3ICsxMDQsNyBAQAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgYyA9IHNlbGYuY2hhcmFjdGVycwogICAgICAgICBjaG9vc2UgPSBzZWxmLnJuZy5jaG9pY2UKLSAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluICIxMjM0NTYiXQorICAgICAgICBsZXR0ZXJzID0gW2Nob29zZShjKSBmb3IgZHVtbXkgaW4gcmFuZ2UoOCldCiAgICAgICAgIHJldHVybiAnJy5qb2luKGxldHRlcnMpCiAKIGRlZiBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCgpOgpAQCAtMTY1LDcgKzE0Niw3IEBACiAKICAgICBmb3IgZGlyIGluIGRpcmxpc3Q6CiAgICAgICAgIGlmIGRpciAhPSBfb3MuY3VyZGlyOgotICAgICAgICAgICAgZGlyID0gX29zLnBhdGgubm9ybWNhc2UoX29zLnBhdGguYWJzcGF0aChkaXIpKQorICAgICAgICAgICAgZGlyID0gX29zLnBhdGguYWJzcGF0aChkaXIpCiAgICAgICAgICMgVHJ5IG9ubHkgYSBmZXcgbmFtZXMgcGVyIGRpcmVjdG9yeS4KICAgICAgICAgZm9yIHNlcSBpbiByYW5nZSgxMDApOgogICAgICAgICAgICAgbmFtZSA9IG5leHQobmFtZXIpCkBAIC0yMTUsNyArMTk2LDYgQEAKICAgICAgICAgZmlsZSA9IF9vcy5wYXRoLmpvaW4oZGlyLCBwcmUgKyBuYW1lICsgc3VmKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmZCA9IF9vcy5vcGVuKGZpbGUsIGZsYWdzLCAwbzYwMCkKLSAgICAgICAgICAgIF9zZXRfY2xvZXhlYyhmZCkKICAgICAgICAgICAgIHJldHVybiAoZmQsIF9vcy5wYXRoLmFic3BhdGgoZmlsZSkpCiAgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZSAgICAjIHRyeSBhZ2FpbgpAQCAtNjkxLDcgKzY3MSw2IEBACiAgICAgX2lzbGluayA9IHN0YXRpY21ldGhvZChfb3MucGF0aC5pc2xpbmspCiAgICAgX3JlbW92ZSA9IHN0YXRpY21ldGhvZChfb3MucmVtb3ZlKQogICAgIF9ybWRpciA9IHN0YXRpY21ldGhvZChfb3Mucm1kaXIpCi0gICAgX29zX2Vycm9yID0gT1NFcnJvcgogICAgIF93YXJuID0gX3dhcm5pbmdzLndhcm4KIAogICAgIGRlZiBfcm10cmVlKHNlbGYsIHBhdGgpOgpAQCAtNzAxLDE2ICs2ODAsMTYgQEAKICAgICAgICAgICAgIGZ1bGxuYW1lID0gc2VsZi5fcGF0aF9qb2luKHBhdGgsIG5hbWUpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaXNkaXIgPSBzZWxmLl9pc2RpcihmdWxsbmFtZSkgYW5kIG5vdCBzZWxmLl9pc2xpbmsoZnVsbG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgc2VsZi5fb3NfZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBpc2RpciA9IEZhbHNlCiAgICAgICAgICAgICBpZiBpc2RpcjoKICAgICAgICAgICAgICAgICBzZWxmLl9ybXRyZWUoZnVsbG5hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKGZ1bGxuYW1lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxmLl9vc19lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9ybWRpcihwYXRoKQotICAgICAgICBleGNlcHQgc2VsZi5fb3NfZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvX19tYWluX18ucHkgYi9MaWIvdGVzdC9fX21haW5fXy5weQppbmRleCBjZTU2MTViLi5kNWZiZTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9fX21haW5fXy5weQorKysgYi9MaWIvdGVzdC9fX21haW5fXy5weQpAQCAtMSwxMyArMSwzIEBACi1mcm9tIHRlc3QgaW1wb3J0IHJlZ3J0ZXN0LCBzdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHJlZ3J0ZXN0CiAKLQotVEVNUERJUiwgVEVTVENXRCA9IHJlZ3J0ZXN0Ll9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChyZWdydGVzdC5URU1QRElSKQotcmVncnRlc3QuVEVNUERJUiA9IFRFTVBESVIKLXJlZ3J0ZXN0LlRFU1RDV0QgPSBURVNUQ1dECi0KLSMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQotIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCi0jIGNoYW5nZSB0aGUgQ1dELCB0aGUgb3JpZ2luYWwgQ1dEIHdpbGwgYmUgdXNlZC4gVGhlIG9yaWdpbmFsIENXRCBpcwotIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgotd2l0aCBzdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgotICAgIHJlZ3J0ZXN0Lm1haW4oKQorcmVncnRlc3QubWFpbl9pbl90ZW1wX2N3ZCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weSBiL0xpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvX3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CmluZGV4IDI3ZGIwMjkuLmJkMjZlM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5CisrKyBiL0xpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQpAQCAtNDMsNyArNDMsNyBAQAogCiB0cnk6CiAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IHJlZHVjdGlvbgotICAgIEhBU19SRURVQ1RJT04gPSBUcnVlCisgICAgSEFTX1JFRFVDVElPTiA9IHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgSEFTX1JFRFVDVElPTiA9IEZhbHNlCiAKQEAgLTk5LDYgKzk5LDkgQEAKIGV4Y2VwdDoKICAgICBNQVhGRCA9IDI1NgogCisjIFRvIHNwZWVkIHVwIHRlc3RzIHdoZW4gdXNpbmcgdGhlIGZvcmtzZXJ2ZXIsIHdlIGNhbiBwcmVsb2FkIHRoZXNlOgorUFJFTE9BRCA9IFsnX19tYWluX18nLCAndGVzdC50ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyJ10KKwogIwogIyBTb21lIHRlc3RzIHJlcXVpcmUgY3R5cGVzCiAjCkBAIC0yOTQsMTcgKzI5NywyMiBAQAogICAgICAgICBzZWxmLmFzc2VydFRpbWluZ0FsbW9zdEVxdWFsKGpvaW4uZWxhcHNlZCwgMC4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgVHJ1ZSkKIAorICAgICAgICAjIFhYWCBtYXliZSB0ZXJtaW5hdGluZyB0b28gc29vbiBjYXVzZXMgdGhlIHByb2JsZW1zIG9uIEdlbnRvby4uLgorICAgICAgICB0aW1lLnNsZWVwKDEpCisKICAgICAgICAgcC50ZXJtaW5hdGUoKQogCiAgICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCAnYWxhcm0nKToKKyAgICAgICAgICAgICMgT24gdGhlIEdlbnRvbyBidWlsZGJvdCB3YWl0cGlkKCkgb2Z0ZW4gc2VlbXMgdG8gYmxvY2sgZm9yZXZlci4KKyAgICAgICAgICAgICMgV2UgdXNlIGFsYXJtKCkgdG8gaW50ZXJydXB0IGl0IGlmIGl0IGJsb2NrcyBmb3IgdG9vIGxvbmcuCiAgICAgICAgICAgICBkZWYgaGFuZGxlcigqYXJncyk6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdqb2luIHRvb2sgdG9vIGxvbmc6ICVzJyAlIHApCiAgICAgICAgICAgICBvbGRfaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbigpLCBOb25lKQotICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgwKQogICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBvbGRfaGFuZGxlcikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbigpLCBOb25lKQpAQCAtMzQyLDcgKzM1MCw2IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX3Rlc3RfcmVjdXJzaW9uKGNscywgd2Nvbm4sIGlkKToKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IGZvcmtpbmcKICAgICAgICAgd2Nvbm4uc2VuZChpZCkKICAgICAgICAgaWYgbGVuKGlkKSA8IDI6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKQEAgLTM5MCw3ICszOTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD0wLjApKQogICAgICAgICBldmVudC5zZXQoKQogICAgICAgICBwLmpvaW4oKQotICAgICAgICBzZWxmLmFzc2VydFRydWUod2FpdF9mb3JfaGFuZGxlKHNlbnRpbmVsLCB0aW1lb3V0PURFTFRBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD0xKSkKIAogIwogIwpAQCAtMTc3OSw2ICsxNzg2LDM1IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldCgpLCBleHBlY3RlZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAubWFwX2FzeW5jLCBzcXIsIEwpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfdHJhY2ViYWNrKGNscyk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50CisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2soc2VsZik6CisgICAgICAgICMgV2Ugd2FudCBlbnN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGZyb20gdGhlIGNoaWxkIHByb2Nlc3MgaXMKKyAgICAgICAgIyBjb250YWluZWQgaW4gdGhlIHRyYWNlYmFjayByYWlzZWQgaW4gdGhlIG1haW4gcHJvY2Vzcy4KKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgd2l0aCBzZWxmLlBvb2woMSkgYXMgcDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHAuYXBwbHkoc2VsZi5fdGVzdF90cmFjZWJhY2spCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGMgPSBlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFJ1bnRpbWVFcnJvcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXhjKSwgUnVudGltZUVycm9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuYXJncywgKDEyMywpKQorICAgICAgICAgICAgY2F1c2UgPSBleGMuX19jYXVzZV9fCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoY2F1c2UpLCBtdWx0aXByb2Nlc3NpbmcucG9vbC5SZW1vdGVUcmFjZWJhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudCcsIGNhdXNlLnRiKQorCisgICAgICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBmMToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4YworICAgICAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZjEuZ2V0dmFsdWUoKSkKKwogZGVmIHJhaXNpbmcoKToKICAgICByYWlzZSBLZXlFcnJvcigia2V5IikKIApAQCAtMjQ4Niw3ICsyNTIyLDcgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnJlZHVjdGlvbiBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCisgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZXNvdXJjZV9zaGFyZXIKICAgICAgICAgcmVzb3VyY2Vfc2hhcmVyLnN0b3AodGltZW91dD01KQogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0yODAwLDMwICsyODM2LDQwIEBACiAjIFRlc3QgdGhhdCBmcm9tIC4uLiBpbXBvcnQgKiB3b3JrcyBmb3IgZWFjaCBtb2R1bGUKICMKIAotY2xhc3MgX1Rlc3RJbXBvcnRTdGFyKEJhc2VUZXN0Q2FzZSk6CitjbGFzcyBfVGVzdEltcG9ydFN0YXIodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgQUxMT1dFRF9UWVBFUyA9ICgncHJvY2Vzc2VzJywpCisgICAgZGVmIGdldF9tb2R1bGVfbmFtZXMoc2VsZik6CisgICAgICAgIGltcG9ydCBnbG9iCisgICAgICAgIGZvbGRlciA9IG9zLnBhdGguZGlybmFtZShtdWx0aXByb2Nlc3NpbmcuX19maWxlX18pCisgICAgICAgIHBhdHRlcm4gPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCAnKi5weScpCisgICAgICAgIGZpbGVzID0gZ2xvYi5nbG9iKHBhdHRlcm4pCisgICAgICAgIG1vZHVsZXMgPSBbb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLnNwbGl0KGYpWzFdKVswXSBmb3IgZiBpbiBmaWxlc10KKyAgICAgICAgbW9kdWxlcyA9IFsnbXVsdGlwcm9jZXNzaW5nLicgKyBtIGZvciBtIGluIG1vZHVsZXNdCisgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcuX19pbml0X18nKQorICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nJykKKyAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAogICAgIGRlZiB0ZXN0X2ltcG9ydChzZWxmKToKLSAgICAgICAgbW9kdWxlcyA9IFsKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcnLCAnbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24nLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5oZWFwJywgJ211bHRpcHJvY2Vzc2luZy5tYW5hZ2VycycsCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnBvb2wnLCAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MnLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZScsICdtdWx0aXByb2Nlc3NpbmcudXRpbCcKLSAgICAgICAgICAgIF0KKyAgICAgICAgbW9kdWxlcyA9IHNlbGYuZ2V0X21vZHVsZV9uYW1lcygpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9mb3JrJykKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9ya3NlcnZlcicpCisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX3NwYXduX3Bvc2l4JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fc3Bhd25fd2luMzInKQorICAgICAgICAgICAgaWYgbm90IEhBU19SRURVQ1RJT046CisgICAgICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9mb3Jrc2VydmVyJykKIAotICAgICAgICBpZiBIQVNfUkVEVUNUSU9OOgotICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24nKQotCi0gICAgICAgIGlmIGNfaW50IGlzIG5vdCBOb25lOgorICAgICAgICBpZiBjX2ludCBpcyBOb25lOgogICAgICAgICAgICAgIyBUaGlzIG1vZHVsZSByZXF1aXJlcyBfY3R5cGVzCi0gICAgICAgICAgICBtb2R1bGVzLmFwcGVuZCgnbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcycpCisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnNoYXJlZGN0eXBlcycpCiAKICAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlczoKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2QsICdfX2FsbF9fJyksIG5hbWUpCiAKLSAgICAgICAgICAgIGZvciBhdHRyIGluIGdldGF0dHIobW9kLCAnX19hbGxfXycsICgpKToKKyAgICAgICAgICAgIGZvciBhdHRyIGluIG1vZC5fX2FsbF9fOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihtb2QsIGF0dHIpLAogICAgICAgICAgICAgICAgICAgICAnJXIgZG9lcyBub3QgaGF2ZSBhdHRyaWJ1dGUgJXInICUgKG1vZCwgYXR0cikKQEAgLTI5MDYsNyArMjk1Miw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX2tpbGxlcihjbHMsIHBpZCk6Ci0gICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdVU1IxKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdVU1IxJyksICdyZXF1aXJlcyBTSUdVU1IxJykKQEAgLTI5MTksMTIgKzI5NjUsMTQgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAga2lsbGVyID0gc2VsZi5Qcm9jZXNzKHRhcmdldD1zZWxmLl9raWxsZXIsIGFyZ3M9KHBpZCwpKQogICAgICAgICAgICAga2lsbGVyLnN0YXJ0KCkKLSAgICAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KDEsKSkKLSAgICAgICAgICAgIHAuc3RhcnQoKQotICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPSgyLCkpCisgICAgICAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgICAgICAgcC5qb2luKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAga2lsbGVyLmpvaW4oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdvdF9zaWduYWxbMF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIDApCi0gICAgICAgICAgICBraWxsZXIuam9pbigpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBvbGRoYW5kbGVyKQogCkBAIC0yOTM3LDggKzI5ODUsMTEgQEAKICAgICBAdW5pdHRlc3Quc2tpcElmKFdJTjMyLCAic2tpcHBlZCBvbiBXaW5kb3dzIikKICAgICBkZWYgdGVzdF9pbnZhbGlkX2hhbmRsZXMoc2VsZik6CiAgICAgICAgIGNvbm4gPSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi5Db25uZWN0aW9uKDQ0OTc3NjA4KQorICAgICAgICAjIGNoZWNrIHRoYXQgcG9sbCgpIGRvZXNuJ3QgY3Jhc2gKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE9TRXJyb3IpLCBjb25uLnBvbGwpCisgICAgICAgICAgICBjb25uLnBvbGwoKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgIyBIYWNrIHByaXZhdGUgYXR0cmlidXRlIF9oYW5kbGUgdG8gYXZvaWQgcHJpbnRpbmcgYW4gZXJyb3IKICAgICAgICAgICAgICMgaW4gY29ubi5fX2RlbF9fCkBAIC0yOTQ2LDEzMSArMjk5Nyw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbiwgLTEpCiAKLSMKLSMgRnVuY3Rpb25zIHVzZWQgdG8gY3JlYXRlIHRlc3QgY2FzZXMgZnJvbSB0aGUgYmFzZSBvbmVzIGluIHRoaXMgbW9kdWxlCi0jCi0KLWRlZiBjcmVhdGVfdGVzdF9jYXNlcyhNaXhpbiwgdHlwZSk6Ci0gICAgcmVzdWx0ID0ge30KLSAgICBnbG9iID0gZ2xvYmFscygpCi0gICAgVHlwZSA9IHR5cGUuY2FwaXRhbGl6ZSgpCi0gICAgQUxMX1RZUEVTID0geydwcm9jZXNzZXMnLCAndGhyZWFkcycsICdtYW5hZ2VyJ30KLQotICAgIGZvciBuYW1lIGluIGxpc3QoZ2xvYi5rZXlzKCkpOgotICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19UZXN0Jyk6Ci0gICAgICAgICAgICBiYXNlID0gZ2xvYltuYW1lXQotICAgICAgICAgICAgYXNzZXJ0IHNldChiYXNlLkFMTE9XRURfVFlQRVMpIDw9IEFMTF9UWVBFUywgc2V0KGJhc2UuQUxMT1dFRF9UWVBFUykKLSAgICAgICAgICAgIGlmIHR5cGUgaW4gYmFzZS5BTExPV0VEX1RZUEVTOgotICAgICAgICAgICAgICAgIG5ld25hbWUgPSAnV2l0aCcgKyBUeXBlICsgbmFtZVsxOl0KLSAgICAgICAgICAgICAgICBjbGFzcyBUZW1wKGJhc2UsIE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICByZXN1bHRbbmV3bmFtZV0gPSBUZW1wCi0gICAgICAgICAgICAgICAgVGVtcC5fX25hbWVfXyA9IFRlbXAuX19xdWFsbmFtZV9fID0gbmV3bmFtZQotICAgICAgICAgICAgICAgIFRlbXAuX19tb2R1bGVfXyA9IE1peGluLl9fbW9kdWxlX18KLSAgICByZXR1cm4gcmVzdWx0Ci0KLSMKLSMgQ3JlYXRlIHRlc3QgY2FzZXMKLSMKLQotY2xhc3MgUHJvY2Vzc2VzTWl4aW4ob2JqZWN0KToKLSAgICBUWVBFID0gJ3Byb2Nlc3NlcycKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKLSAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KLSAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcykKLSAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbikKLSAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQotICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBpcGUpCi0gICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlF1ZXVlKQotICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUpCi0gICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuTG9jaykKLSAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUkxvY2spCi0gICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmUpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQm91bmRlZFNlbWFwaG9yZSkKLSAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbikKLSAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuRXZlbnQpCi0gICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQmFycmllcikKLSAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuVmFsdWUpCi0gICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkFycmF5KQotICAgIFJhd1ZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdWYWx1ZSkKLSAgICBSYXdBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3QXJyYXkpCi0KLXRlc3RjYXNlc19wcm9jZXNzZXMgPSBjcmVhdGVfdGVzdF9jYXNlcyhQcm9jZXNzZXNNaXhpbiwgdHlwZT0ncHJvY2Vzc2VzJykKLWdsb2JhbHMoKS51cGRhdGUodGVzdGNhc2VzX3Byb2Nlc3NlcykKLQotCi1jbGFzcyBNYW5hZ2VyTWl4aW4ob2JqZWN0KToKLSAgICBUWVBFID0gJ21hbmFnZXInCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlF1ZXVlJykpCi0gICAgSm9pbmFibGVRdWV1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuSm9pbmFibGVRdWV1ZScpKQotICAgIExvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkxvY2snKSkKLSAgICBSTG9jayA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuUkxvY2snKSkKLSAgICBTZW1hcGhvcmUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlNlbWFwaG9yZScpKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkJvdW5kZWRTZW1hcGhvcmUnKSkKLSAgICBDb25kaXRpb24gPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkNvbmRpdGlvbicpKQotICAgIEV2ZW50ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5FdmVudCcpKQotICAgIEJhcnJpZXIgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkJhcnJpZXInKSkKLSAgICBWYWx1ZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuVmFsdWUnKSkKLSAgICBBcnJheSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuQXJyYXknKSkKLSAgICBsaXN0ID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5saXN0JykpCi0gICAgZGljdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuZGljdCcpKQotICAgIE5hbWVzcGFjZSA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuTmFtZXNwYWNlJykpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgUG9vbChjbHMsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICByZXR1cm4gY2xzLm1hbmFnZXIuUG9vbCgqYXJncywgKiprd2RzKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKLSAgICAgICAgY2xzLm1hbmFnZXIgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICAjIG9ubHkgdGhlIG1hbmFnZXIgcHJvY2VzcyBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYWN0aXZlX2NoaWxkcmVuKCkKLSAgICAgICAgIyBidXQgdGhpcyBjYW4gdGFrZSBhIGJpdCBvbiBzbG93IG1hY2hpbmVzLCBzbyB3YWl0IGEgZmV3IHNlY29uZHMKLSAgICAgICAgIyBpZiB0aGVyZSBhcmUgb3RoZXIgY2hpbGRyZW4gdG9vIChzZWUgIzE3Mzk1KQotICAgICAgICB0ID0gMC4wMQotICAgICAgICB3aGlsZSBsZW4obXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpKSA+IDEgYW5kIHQgPCA1OgotICAgICAgICAgICAgdGltZS5zbGVlcCh0KQotICAgICAgICAgICAgdCAqPSAyCi0gICAgICAgIGdjLmNvbGxlY3QoKSAgICAgICAgICAgICAgICAgICAgICAgIyBkbyBnYXJiYWdlIGNvbGxlY3Rpb24KLSAgICAgICAgaWYgY2xzLm1hbmFnZXIuX251bWJlcl9vZl9vYmplY3RzKCkgIT0gMDoKLSAgICAgICAgICAgICMgVGhpcyBpcyBub3QgcmVhbGx5IGFuIGVycm9yIHNpbmNlIHNvbWUgdGVzdHMgZG8gbm90Ci0gICAgICAgICAgICAjIGVuc3VyZSB0aGF0IGFsbCBwcm9jZXNzZXMgd2hpY2ggaG9sZCBhIHJlZmVyZW5jZSB0byBhCi0gICAgICAgICAgICAjIG1hbmFnZWQgb2JqZWN0IGhhdmUgYmVlbiBqb2luZWQuCi0gICAgICAgICAgICBwcmludCgnU2hhcmVkIG9iamVjdHMgd2hpY2ggc3RpbGwgZXhpc3QgYXQgbWFuYWdlciBzaHV0ZG93bjonKQotICAgICAgICAgICAgcHJpbnQoY2xzLm1hbmFnZXIuX2RlYnVnX2luZm8oKSkKLSAgICAgICAgY2xzLm1hbmFnZXIuc2h1dGRvd24oKQotICAgICAgICBjbHMubWFuYWdlci5qb2luKCkKLSAgICAgICAgY2xzLm1hbmFnZXIgPSBOb25lCi0KLXRlc3RjYXNlc19tYW5hZ2VyID0gY3JlYXRlX3Rlc3RfY2FzZXMoTWFuYWdlck1peGluLCB0eXBlPSdtYW5hZ2VyJykKLWdsb2JhbHMoKS51cGRhdGUodGVzdGNhc2VzX21hbmFnZXIpCi0KLQotY2xhc3MgVGhyZWFkc01peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICd0aHJlYWRzJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUHJvY2VzcwotICAgIGNvbm5lY3Rpb24gPSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbgotICAgIGN1cnJlbnRfcHJvY2VzcyA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY3VycmVudF9wcm9jZXNzKQotICAgIGFjdGl2ZV9jaGlsZHJlbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuYWN0aXZlX2NoaWxkcmVuKQotICAgIFBvb2wgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBvb2wpCi0gICAgUGlwZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUGlwZSkKLSAgICBRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUXVldWUpCi0gICAgSm9pbmFibGVRdWV1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuSm9pbmFibGVRdWV1ZSkKLSAgICBMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Mb2NrKQotICAgIFJMb2NrID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5STG9jaykKLSAgICBTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlNlbWFwaG9yZSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Cb3VuZGVkU2VtYXBob3JlKQotICAgIENvbmRpdGlvbiA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQ29uZGl0aW9uKQotICAgIEV2ZW50ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5FdmVudCkKLSAgICBCYXJyaWVyID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5CYXJyaWVyKQotICAgIFZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5WYWx1ZSkKLSAgICBBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQXJyYXkpCi0KLXRlc3RjYXNlc190aHJlYWRzID0gY3JlYXRlX3Rlc3RfY2FzZXMoVGhyZWFkc01peGluLCB0eXBlPSd0aHJlYWRzJykKLWdsb2JhbHMoKS51cGRhdGUodGVzdGNhc2VzX3RocmVhZHMpCiAKIAogY2xhc3MgT3RoZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM0MjAsNyArMzM0Niw3IEBACiAgICAgZGVmIHRlc3RfZmxhZ3Moc2VsZik6CiAgICAgICAgIGltcG9ydCBqc29uLCBzdWJwcm9jZXNzCiAgICAgICAgICMgc3RhcnQgY2hpbGQgcHJvY2VzcyB1c2luZyB1bnVzdWFsIGZsYWdzCi0gICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X211bHRpcHJvY2Vzc2luZyBpbXBvcnQgVGVzdEZsYWdzOyAnICsKKyAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZyBpbXBvcnQgVGVzdEZsYWdzOyAnICsKICAgICAgICAgICAgICAgICAnVGVzdEZsYWdzLnJ1bl9pbl9jaGlsZCgpJykKICAgICAgICAgZGF0YSA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLUUnLCAnLVMnLCAnLU8nLCAnLWMnLCBwcm9nXSkKQEAgLTM0NjcsMTMgKzMzOTMsMTQgQEAKIAogY2xhc3MgVGVzdE5vRm9ya0JvbWIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X25vZm9ya2JvbWIoc2VsZik6CisgICAgICAgIHNtID0gbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKQogICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdtcF9mb3JrX2JvbWIucHknKQotICAgICAgICBpZiBXSU4zMjoKLSAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUobmFtZSkKKyAgICAgICAgaWYgc20gIT0gJ2ZvcmsnOgorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShuYW1lLCBzbSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIG91dC5kZWNvZGUoJ2FzY2lpJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdSdW50aW1lRXJyb3InLCBlcnIuZGVjb2RlKCdhc2NpaScpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sobmFtZSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHRlc3Quc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKG5hbWUsIHNtKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTIzJywgb3V0LmRlY29kZSgnYXNjaWknKS5yc3RyaXAoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGVyci5kZWNvZGUoJ2FzY2lpJykpCiAKQEAgLTM0OTEsNyArMzQxOCw4IEBACiAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jbHMuY2hpbGQsIGFyZ3M9KG4tMSwgY29ubikpCiAgICAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb25uLnNlbmQobGVuKHV0aWwuX2FmdGVyZm9ya19yZWdpc3RyeSkpCiAgICAgICAgIGNvbm4uY2xvc2UoKQpAQCAtMzUwMiwxMSArMzQzMCw3OCBAQAogICAgICAgICBvbGRfc2l6ZSA9IGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpCiAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5jaGlsZCwgYXJncz0oNSwgdykpCiAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICB3LmNsb3NlKCkKICAgICAgICAgbmV3X3NpemUgPSByLnJlY3YoKQotICAgICAgICBwLmpvaW4oKQorICAgICAgICBwLmpvaW4odGltZW91dD01KQogICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChuZXdfc2l6ZSwgb2xkX3NpemUpCiAKICMKKyMgQ2hlY2sgdGhhdCBub24tZm9ya2VkIGNoaWxkIHByb2Nlc3NlcyBkbyBub3QgaW5oZXJpdCB1bm5lZWRlZCBmZHMvaGFuZGxlcworIworCitjbGFzcyBUZXN0Q2xvc2VGZHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9oaWdoX3NvY2tldF9mZChzZWxmKToKKyAgICAgICAgaWYgV0lOMzI6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgbm90IGhhdmUgYW55IHNvY2tldCBoYW5kbGVzLCBzbworICAgICAgICAgICAgIyBjYWxsaW5nIHNvY2tldC5mcm9tZmQoKSBzaG91bGQgcHJvZHVjZSBXU0FFTk9UU09DSyBldmVuCisgICAgICAgICAgICAjIGlmIHRoZXJlIGlzIGEgaGFuZGxlIG9mIHRoZSBzYW1lIG51bWJlci4KKyAgICAgICAgICAgIHJldHVybiBzb2NrZXQuc29ja2V0KCkuZGV0YWNoKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2Ugd2FudCB0byBwcm9kdWNlIGEgc29ja2V0IHdpdGggYW4gZmQgaGlnaCBlbm91Z2ggdGhhdCBhCisgICAgICAgICAgICAjIGZyZXNobHkgY3JlYXRlZCBjaGlsZCBwcm9jZXNzIHdpbGwgbm90IGhhdmUgYW55IGZkcyBhcyBoaWdoLgorICAgICAgICAgICAgZmQgPSBzb2NrZXQuc29ja2V0KCkuZGV0YWNoKCkKKyAgICAgICAgICAgIHRvX2Nsb3NlID0gW10KKyAgICAgICAgICAgIHdoaWxlIGZkIDwgNTA6CisgICAgICAgICAgICAgICAgdG9fY2xvc2UuYXBwZW5kKGZkKQorICAgICAgICAgICAgICAgIGZkID0gb3MuZHVwKGZkKQorICAgICAgICAgICAgZm9yIHggaW4gdG9fY2xvc2U6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoeCkKKyAgICAgICAgICAgIHJldHVybiBmZAorCisgICAgZGVmIGNsb3NlKHNlbGYsIGZkKToKKyAgICAgICAgaWYgV0lOMzI6CisgICAgICAgICAgICBzb2NrZXQuc29ja2V0KGZpbGVubz1mZCkuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfY2xvc2VmZHMoY2xzLCBjb25uLCBmZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuZnJvbWZkKGZkLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBjb25uLnNlbmQoZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgY29ubi5zZW5kKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZWZkKHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX1JFRFVDVElPTjoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdyZXF1aXJlcyBmZCBwaWNrbGluZycpCisKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBtdWx0aXByb2Nlc3NpbmcuUGlwZSgpCisgICAgICAgIGZkID0gc2VsZi5nZXRfaGlnaF9zb2NrZXRfZmQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfY2xvc2VmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0od3JpdGVyLCBmZCkpCisgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICBlID0gcmVhZGVyLnJlY3YoKQorICAgICAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoZmQpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCkKKworICAgICAgICBpZiBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpID09ICdmb3JrJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZSwgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFdTQUVOT1RTT0NLID0gMTAwMzgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXJybm8gPT0gZXJybm8uRUJBREYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLndpbmVycm9yID09IFdTQUVOT1RTT0NLLCBlKQorCisjCiAjIElzc3VlICMxNzA5NzogRUlOVFIgc2hvdWxkIGJlIGlnbm9yZWQgYnkgcmVjdigpLCBzZW5kKCksIGFjY2VwdCgpIGV0YwogIwogCkBAIC0zNTUwLDEwICszNTQ1LDEwIEBACiAgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBoYW5kbGVyKQotICAgICAgICBsID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIoKQotICAgICAgICBjb25uLnNlbmQobC5hZGRyZXNzKQotICAgICAgICBhID0gbC5hY2NlcHQoKQotICAgICAgICBhLnNlbmQoJ3dlbGNvbWUnKQorICAgICAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKCkgYXMgbDoKKyAgICAgICAgICAgIGNvbm4uc2VuZChsLmFkZHJlc3MpCisgICAgICAgICAgICBhID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgYS5zZW5kKCd3ZWxjb21lJykKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHVVNSMScpLCAncmVxdWlyZXMgU0lHVVNSMScpCiAgICAgZGVmIHRlc3RfaWdub3JlX2xpc3RlbmVyKHNlbGYpOgpAQCAtMzU3NCwyNiArMzU2OSwyNjcgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQogCi0jCi0jCi0jCitjbGFzcyBUZXN0U3RhcnRNZXRob2QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY2hlY2tfY29udGV4dChjbHMsIGNvbm4pOgorICAgICAgICBjb25uLnNlbmQobXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSkKIAotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgZGVmIGNoZWNrX2NvbnRleHQoc2VsZiwgY3R4KToKKyAgICAgICAgciwgdyA9IGN0eC5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgcCA9IGN0eC5Qcm9jZXNzKHRhcmdldD1zZWxmLl9jaGVja19jb250ZXh0LCBhcmdzPSh3LCkpCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgY2hpbGRfbWV0aG9kID0gci5yZWN2KCkKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hpbGRfbWV0aG9kLCBjdHguZ2V0X3N0YXJ0X21ldGhvZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dChzZWxmKToKKyAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlcicpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN0eCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dChtZXRob2QpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGN0eC5nZXRfY29udGV4dCgpLCBjdHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X3N0YXJ0X21ldGhvZCwgJ3NwYXduJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfc3RhcnRfbWV0aG9kLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb250ZXh0KGN0eCkKKworICAgIGRlZiB0ZXN0X3NldF9nZXQoc2VsZik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfZm9ya3NlcnZlcl9wcmVsb2FkKFBSRUxPQUQpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBvbGRfbWV0aG9kID0gbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2NrID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgaXNzdWUgMzExMSEiKQotICAgIGNoZWNrX2Vub3VnaF9zZW1hcGhvcmVzKCkKLSAgICB1dGlsLmdldF90ZW1wX2RpcigpICAgICAjIGNyZWF0ZXMgdGVtcCBkaXJlY3RvcnkgZm9yIHVzZSBieSBhbGwgcHJvY2Vzc2VzCi0gICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChtZXRob2QsIGZvcmNlPVRydWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICAgICAgY3R4ID0gbXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfc3RhcnRfbWV0aG9kKCksIG1ldGhvZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShjdHgpLl9fbmFtZV9fLmxvd2VyKCkuc3RhcnRzd2l0aChtZXRob2QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgY3R4LlByb2Nlc3MuX19uYW1lX18ubG93ZXIoKS5zdGFydHN3aXRoKG1ldGhvZCkpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jb250ZXh0KG11bHRpcHJvY2Vzc2luZykKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChvbGRfbWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChjb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X2dldF9hbGwoc2VsZik6CisgICAgICAgIG1ldGhvZHMgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2FsbF9zdGFydF9tZXRob2RzKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZHMsIFsnc3Bhd24nXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2RzID09IFsnZm9yaycsICdzcGF3biddIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyA9PSBbJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlciddKQorCisjCisjIENoZWNrIHRoYXQga2lsbGluZyBwcm9jZXNzIGRvZXMgbm90IGxlYWsgbmFtZWQgc2VtYXBob3JlcworIworCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLAorICAgICAgICAgICAgICAgICAidGVzdCBzZW1hbnRpY3MgZG9uJ3QgbWFrZSBzZW5zZSBvbiBXaW5kb3dzIikKK2NsYXNzIFRlc3RTZW1hcGhvcmVUcmFja2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmVfdHJhY2tlcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgY21kID0gJycnaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAsIHRpbWUsIG9zCisgICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCJzcGF3biIpCisgICAgICAgICAgICBsb2NrMSA9IG1wLkxvY2soKQorICAgICAgICAgICAgbG9jazIgPSBtcC5Mb2NrKCkKKyAgICAgICAgICAgIG9zLndyaXRlKCVkLCBsb2NrMS5fc2VtbG9jay5uYW1lLmVuY29kZSgiYXNjaWkiKSArIGIiXFxuIikKKyAgICAgICAgICAgIG9zLndyaXRlKCVkLCBsb2NrMi5fc2VtbG9jay5uYW1lLmVuY29kZSgiYXNjaWkiKSArIGIiXFxuIikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICcnJworICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgY21kICUgKHcsIHcpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHM9W3ddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICB3aXRoIG9wZW4ociwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmOgorICAgICAgICAgICAgbmFtZTEgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICBuYW1lMiA9IGYucmVhZGxpbmUoKS5yc3RyaXAoKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgX211bHRpcHJvY2Vzc2luZy5zZW1fdW5saW5rKG5hbWUxKQorICAgICAgICBwLnRlcm1pbmF0ZSgpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHRpbWUuc2xlZXAoMS4wKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGN0eDoKKyAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lMikKKyAgICAgICAgIyBkb2NzIHNheSBpdCBzaG91bGQgYmUgRU5PRU5ULCBidXQgT1NYIHNlZW1zIHRvIGdpdmUgRUlOVkFMCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3R4LmV4Y2VwdGlvbi5lcnJubywgKGVycm5vLkVOT0VOVCwgZXJybm8uRUlOVkFMKSkKKyAgICAgICAgZXJyID0gcC5zdGRlcnIucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgICAgIGV4cGVjdGVkID0gJ3NlbWFwaG9yZV90cmFja2VyOiBUaGVyZSBhcHBlYXIgdG8gYmUgMiBsZWFrZWQgc2VtYXBob3JlcycKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgJ3NlbWFwaG9yZV90cmFja2VyOiAlcjogXFtFcnJubycgJSBuYW1lMSkKKworIworIyBNaXhpbnMKKyMKKworY2xhc3MgUHJvY2Vzc2VzTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ3Byb2Nlc3NlcycKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbikKKyAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQorICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBpcGUpCisgICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlF1ZXVlKQorICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUpCisgICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuTG9jaykKKyAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUkxvY2spCisgICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmUpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQm91bmRlZFNlbWFwaG9yZSkKKyAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbikKKyAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuRXZlbnQpCisgICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQmFycmllcikKKyAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuVmFsdWUpCisgICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkFycmF5KQorICAgIFJhd1ZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdWYWx1ZSkKKyAgICBSYXdBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3QXJyYXkpCiAKIAotZGVmIHRlYXJEb3duTW9kdWxlKCk6Ci0gICAgIyBwYXVzZSBhIGJpdCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZyBhYm91dCBkYW5nbGluZyB0aHJlYWRzL3Byb2Nlc3NlcwotICAgIHRpbWUuc2xlZXAoMC41KQorY2xhc3MgTWFuYWdlck1peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdtYW5hZ2VyJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcworICAgIFF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5RdWV1ZScpKQorICAgIEpvaW5hYmxlUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkpvaW5hYmxlUXVldWUnKSkKKyAgICBMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Mb2NrJykpCisgICAgUkxvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlJMb2NrJykpCisgICAgU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5TZW1hcGhvcmUnKSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlJykpCisgICAgQ29uZGl0aW9uID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Db25kaXRpb24nKSkKKyAgICBFdmVudCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuRXZlbnQnKSkKKyAgICBCYXJyaWVyID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5CYXJyaWVyJykpCisgICAgVmFsdWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlZhbHVlJykpCisgICAgQXJyYXkgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkFycmF5JykpCisgICAgbGlzdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIubGlzdCcpKQorICAgIGRpY3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmRpY3QnKSkKKyAgICBOYW1lc3BhY2UgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLk5hbWVzcGFjZScpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIFBvb2woY2xzLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIGNscy5tYW5hZ2VyLlBvb2woKmFyZ3MsICoqa3dkcykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgIyBvbmx5IHRoZSBtYW5hZ2VyIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFjdGl2ZV9jaGlsZHJlbigpCisgICAgICAgICMgYnV0IHRoaXMgY2FuIHRha2UgYSBiaXQgb24gc2xvdyBtYWNoaW5lcywgc28gd2FpdCBhIGZldyBzZWNvbmRzCisgICAgICAgICMgaWYgdGhlcmUgYXJlIG90aGVyIGNoaWxkcmVuIHRvbyAoc2VlICMxNzM5NSkKKyAgICAgICAgdCA9IDAuMDEKKyAgICAgICAgd2hpbGUgbGVuKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSkgPiAxIGFuZCB0IDwgNToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodCkKKyAgICAgICAgICAgIHQgKj0gMgorICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIGlmIGNscy5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpICE9IDA6CisgICAgICAgICAgICAjIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBzaW5jZSBzb21lIHRlc3RzIGRvIG5vdAorICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCBhbGwgcHJvY2Vzc2VzIHdoaWNoIGhvbGQgYSByZWZlcmVuY2UgdG8gYQorICAgICAgICAgICAgIyBtYW5hZ2VkIG9iamVjdCBoYXZlIGJlZW4gam9pbmVkLgorICAgICAgICAgICAgcHJpbnQoJ1NoYXJlZCBvYmplY3RzIHdoaWNoIHN0aWxsIGV4aXN0IGF0IG1hbmFnZXIgc2h1dGRvd246JykKKyAgICAgICAgICAgIHByaW50KGNscy5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkpCisgICAgICAgIGNscy5tYW5hZ2VyLnNodXRkb3duKCkKKyAgICAgICAgY2xzLm1hbmFnZXIuam9pbigpCisgICAgICAgIGNscy5tYW5hZ2VyID0gTm9uZQogCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCitjbGFzcyBUaHJlYWRzTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ3RocmVhZHMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qcm9jZXNzCisgICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5hY3RpdmVfY2hpbGRyZW4pCisgICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKKyAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5QaXBlKQorICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5RdWV1ZSkKKyAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Kb2luYWJsZVF1ZXVlKQorICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkxvY2spCisgICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlJMb2NrKQorICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuU2VtYXBob3JlKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJvdW5kZWRTZW1hcGhvcmUpCisgICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Db25kaXRpb24pCisgICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkV2ZW50KQorICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJhcnJpZXIpCisgICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlZhbHVlKQorICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5BcnJheSkKKworIworIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKKyMKKworZGVmIGluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QocmVtb3RlX2dsb2JzLCBzdGFydF9tZXRob2QpOgorICAgIF9fbW9kdWxlX18gPSByZW1vdGVfZ2xvYnNbJ19fbmFtZV9fJ10KKyAgICBsb2NhbF9nbG9icyA9IGdsb2JhbHMoKQorICAgIEFMTF9UWVBFUyA9IHsncHJvY2Vzc2VzJywgJ3RocmVhZHMnLCAnbWFuYWdlcid9CisKKyAgICBmb3IgbmFtZSwgYmFzZSBpbiBsb2NhbF9nbG9icy5pdGVtcygpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShiYXNlLCB0eXBlKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGlzc3ViY2xhc3MoYmFzZSwgQmFzZVRlc3RDYXNlKToKKyAgICAgICAgICAgIGlmIGJhc2UgaXMgQmFzZVRlc3RDYXNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhc3NlcnQgc2V0KGJhc2UuQUxMT1dFRF9UWVBFUykgPD0gQUxMX1RZUEVTLCBiYXNlLkFMTE9XRURfVFlQRVMKKyAgICAgICAgICAgIGZvciB0eXBlXyBpbiBiYXNlLkFMTE9XRURfVFlQRVM6CisgICAgICAgICAgICAgICAgbmV3bmFtZSA9ICdXaXRoJyArIHR5cGVfLmNhcGl0YWxpemUoKSArIG5hbWVbMTpdCisgICAgICAgICAgICAgICAgTWl4aW4gPSBsb2NhbF9nbG9ic1t0eXBlXy5jYXBpdGFsaXplKCkgKyAnTWl4aW4nXQorICAgICAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5ld25hbWUKKyAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBfX21vZHVsZV9fCisgICAgICAgICAgICAgICAgcmVtb3RlX2dsb2JzW25ld25hbWVdID0gVGVtcAorICAgICAgICBlbGlmIGlzc3ViY2xhc3MoYmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBvYmplY3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5hbWUKKyAgICAgICAgICAgIFRlbXAuX19tb2R1bGVfXyA9IF9fbW9kdWxlX18KKyAgICAgICAgICAgIHJlbW90ZV9nbG9ic1tuYW1lXSA9IFRlbXAKKworICAgIGRhbmdsaW5nID0gW05vbmUsIE5vbmVdCisgICAgb2xkX3N0YXJ0X21ldGhvZCA9IFtOb25lXQorCisgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfZm9ya3NlcnZlcl9wcmVsb2FkKFBSRUxPQUQpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgZGFuZ2xpbmdbMF0gPSBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcuY29weSgpCisgICAgICAgIGRhbmdsaW5nWzFdID0gdGhyZWFkaW5nLl9kYW5nbGluZy5jb3B5KCkKKyAgICAgICAgb2xkX3N0YXJ0X21ldGhvZFswXSA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9VHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qoc3RhcnRfbWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHN0YXJ0X21ldGhvZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHN0YXJ0IG1ldGhvZCBub3Qgc3VwcG9ydGVkJykKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgibGludXgiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NrID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJPU0Vycm9yIHJhaXNlcyBvbiBSTG9jayBjcmVhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgaXNzdWUgMzExMSEiKQorICAgICAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCisgICAgICAgIHV0aWwuZ2V0X3RlbXBfZGlyKCkgICAgICMgY3JlYXRlcyB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpLnNldExldmVsKExPR19MRVZFTCkKKworICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChvbGRfc3RhcnRfbWV0aG9kWzBdLCBmb3JjZT1UcnVlKQorICAgICAgICAjIHBhdXNlIGEgYml0IHNvIHdlIGRvbid0IGdldCB3YXJuaW5nIGFib3V0IGRhbmdsaW5nIHRocmVhZHMvcHJvY2Vzc2VzCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICB0bXAgPSBzZXQobXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nKSAtIHNldChkYW5nbGluZ1swXSkKKyAgICAgICAgaWYgdG1wOgorICAgICAgICAgICAgcHJpbnQoJ0RhbmdsaW5nIHByb2Nlc3NlczonLCB0bXAsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZGVsIHRtcAorICAgICAgICB0bXAgPSBzZXQodGhyZWFkaW5nLl9kYW5nbGluZykgLSBzZXQoZGFuZ2xpbmdbMV0pCisgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgIHByaW50KCdEYW5nbGluZyB0aHJlYWRzOicsIHRtcCwgZmlsZT1zeXMuc3RkZXJyKQorCisgICAgcmVtb3RlX2dsb2JzWydzZXRVcE1vZHVsZSddID0gc2V0VXBNb2R1bGUKKyAgICByZW1vdGVfZ2xvYnNbJ3RlYXJEb3duTW9kdWxlJ10gPSB0ZWFyRG93bk1vZHVsZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1IGIvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjIzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9hdWRpb2RhdGEvcGx1Y2stcGNtMjQuYXUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYXVkaW90ZXN0cy5weSBiL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKaW5kZXggMDA4MjgxZi4uYjc0OTdjZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CkBAIC01LDIzICs1LDEyIEBACiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc3lzCiAKLWRlZiBieXRlc3dhcDIoZGF0YSk6Ci0gICAgYSA9IGFycmF5LmFycmF5KCdoJykKLSAgICBhLmZyb21ieXRlcyhkYXRhKQotICAgIGEuYnl0ZXN3YXAoKQotICAgIHJldHVybiBhLnRvYnl0ZXMoKQorY2xhc3MgVW5zZWVrYWJsZUlPKGlvLkZpbGVJTyk6CisgICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCiAKLWRlZiBieXRlc3dhcDMoZGF0YSk6Ci0gICAgYmEgPSBieXRlYXJyYXkoZGF0YSkKLSAgICBiYVs6OjNdID0gZGF0YVsyOjozXQotICAgIGJhWzI6OjNdID0gZGF0YVs6OjNdCi0gICAgcmV0dXJuIGJ5dGVzKGJhKQotCi1kZWYgYnl0ZXN3YXA0KGRhdGEpOgotICAgIGEgPSBhcnJheS5hcnJheSgnaScpCi0gICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICBhLmJ5dGVzd2FwKCkKLSAgICByZXR1cm4gYS50b2J5dGVzKCkKKyAgICBkZWYgc2VlayhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogCiAKIGNsYXNzIEF1ZGlvVGVzdHM6CkBAIC00OSw2ICszOCwxMiBAQAogICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLAogICAgICAgICAgICAgICAgIChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIG5jaGFubmVscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzYW1wd2lkdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgZnJhbWVyYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uZnJhbWVzLCBuZnJhbWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wdHlwZSwgY29tcHR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXBuYW1lLCBjb21wbmFtZSkKIAogICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKHBhcmFtcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUubG9hZHMoZHVtcCksIHBhcmFtcykKQEAgLTY1LDE1ICs2MCwxMiBAQAogICAgICAgICByZXR1cm4gZgogCiAgICAgZGVmIGNoZWNrX2ZpbGUoc2VsZiwgdGVzdGZpbGUsIG5mcmFtZXMsIGZyYW1lcyk6Ci0gICAgICAgIGYgPSBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5uY2hhbm5lbHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIHNlbGYuc2FtcHdpZHRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmZyYW1lcmF0ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuZnJhbWVzKCksIG5mcmFtZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyhuZnJhbWVzKSwgZnJhbWVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF93cml0ZV9wYXJhbXMoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKQEAgLTgzLDYgKzc1LDUzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmZyYW1lcywgc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9jb250ZXh0X21hbmFnZXJfY2FsbHNfY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2xvc2UgY2hlY2tzIGZvciBhIG1pbmltdW0gaGVhZGVyIGFuZCB3aWxsIHJhaXNlIGFuIGVycm9yCisgICAgICAgICMgaWYgaXQgaXMgbm90IHNldCwgc28gdGhpcyBwcm92ZXMgdGhhdCBjbG9zZSBpcyBjYWxsZWQuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKFRFU1RGTiwgJ3diJyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLkVycm9yKToKKyAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl93aXRoX29wZW5fZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZXRuY2hhbm5lbHMoc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICAgICAgZi5zZXRzYW1wd2lkdGgoc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICAgICAgZi5zZXRmcmFtZXJhdGUoc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICAgICAgZi5zZXRjb21wdHlwZShzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIHNlbGYuY2xvc2VfZmQpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5nZXRmcCgpLmNsb3NlZCkKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZV9mZDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLmdldGZwKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgc2VsZi5jbG9zZV9mZCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl93aXRoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBmaWxlIGRvZXNuJ3QgZ2V0IGNsb3NlZCwgdGhpcyB0ZXN0IHdvbid0IGZhaWwsIGJ1dCBpdCB3aWxsCisgICAgICAgICMgcHJvZHVjZSBhIHJlc291cmNlIGxlYWsgd2FybmluZy4KKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKFRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYuc2V0bmNoYW5uZWxzKHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgZi5zZXRzYW1wd2lkdGgoc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICBmLnNldGZyYW1lcmF0ZShzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgIGYuc2V0Y29tcHR5cGUoc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5nZXRmcCgpLmNsb3NlZCkKKyAgICAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VfZmQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLmdldGZwKCkpCisKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQogICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQpAQCAtOTEsNiArMTMwLDMwIEBACiAKICAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQorICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICBmLndyaXRlZnJhbWVzKGJ5dGVhcnJheShzZWxmLmZyYW1lcykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9hcnJheShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQorICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICBmLndyaXRlZnJhbWVzKGFycmF5LmFycmF5KCdoJywgc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQorICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICBmLndyaXRlZnJhbWVzKG1lbW9yeXZpZXcoc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCiAgICAgZGVmIHRlc3RfaW5jb21wbGV0ZWRfd3JpdGUoc2VsZik6CiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgogICAgICAgICAgICAgdGVzdGZpbGUud3JpdGUoYidhYmFiYWdhbGFtYWdhJykKQEAgLTEyOSw2ICsxOTIsNTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZpbGUucmVhZCgxMyksIGInYWJhYmFnYWxhbWFnYScpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUodGVzdGZpbGUsIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKKyAgICBkZWYgdGVzdF91bnNlZWthYmxlX3JlYWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfZmlsZShURVNURk4pIGFzIGY6CisgICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKKworICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKKyAgICAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfZmlsZSh0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCisKKyAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKKworICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoc2VsZik6CisgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB0ZXN0ZmlsZS53cml0ZShiJ2FiYWJhZ2FsYW1hZ2EnKQorICAgICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUodGVzdGZpbGUpCisgICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzICsgMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5yZWFkKDEzKSwgYidhYmFiYWdhbGFtYWdhJykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzICsgMSwgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF91bnNlZWthYmxlX292ZXJmbG93ZWRfd3JpdGUoc2VsZik6CisgICAgICAgIHdpdGggVW5zZWVrYWJsZUlPKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB0ZXN0ZmlsZS53cml0ZShiJ2FiYWJhZ2FsYW1hZ2EnKQorICAgICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUodGVzdGZpbGUpCisgICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzIC0gMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLndyaXRlZnJhbWVzKHNlbGYuZnJhbWVzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5yZWFkKDEzKSwgYidhYmFiYWdhbGFtYWdhJykKKyAgICAgICAgICAgIGZyYW1lc2l6ZSA9IHNlbGYubmNoYW5uZWxzICogc2VsZi5zYW1wd2lkdGgKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZSh0ZXN0ZmlsZSwgc2VsZi5uZnJhbWVzIC0gMSwgc2VsZi5mcmFtZXNbOi1mcmFtZXNpemVdKQorCiAKIGNsYXNzIEF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZShBdWRpb1Rlc3RzKToKIApAQCAtMjA1LDEyICszMjEsOSBAQAogCiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5yZWFkKDEzKSwgYidhYmFiYWdhbGFtYWdhJykKLSAgICAgICAgICAgIGYgPSBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5uY2hhbm5lbHMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCBzZWxmLnNhbXB3aWR0aCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZnJhbWVyYXRlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuZnJhbWVzKCksIHNlbGYuc25kZmlsZW5mcmFtZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoc2VsZi5uZnJhbWVzKSwgc2VsZi5mcmFtZXMpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5IGIvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkKQEAgLTAsMCArMSwzIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorInNwYW0sIGJhciwgYmxhaCIKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weSBiL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQppbmRleCBjZjU0YzI4Li4wYTYyOTQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CkBAIC0xNjAsMTQgKzE2MCwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgZGVmXG5nICAgaGknLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCi0gICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgIyBjaGVjayBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKHRhYnNpemU9OCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnModGFic2l6ZT00KSkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInICBhXG4gYicsIHNlbGYubWFyc2hhbChiJyBcdGFcblx0YicpLmV4cGFuZHRhYnMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidoZWxsbycpLmV4cGFuZHRhYnMsIDQyLCA0MikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weSBiL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGI0MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyIiImJ5dGVjb2RlX2hlbHBlciAtIHN1cHBvcnQgdG9vbHMgZm9yIHRlc3RpbmcgY29ycmVjdCBieXRlY29kZSBnZW5lcmF0aW9uIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGRpcworaW1wb3J0IGlvCisKK19VTlNQRUNJRklFRCA9IG9iamVjdCgpCisKK2NsYXNzIEJ5dGVjb2RlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkN1c3RvbSBhc3NlcnRpb24gbWV0aG9kcyBmb3IgaW5zcGVjdGluZyBieXRlY29kZS4iIiIKKworICAgIGRlZiBnZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKHNlbGYsIGNvKToKKyAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgZGlzLmRpcyhjbywgZmlsZT1zKQorICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpCisKKyAgICBkZWYgYXNzZXJ0SW5CeXRlY29kZShzZWxmLCB4LCBvcG5hbWUsIGFyZ3ZhbD1fVU5TUEVDSUZJRUQpOgorICAgICAgICAiIiJSZXR1cm5zIGluc3RyIGlmIG9wIGlzIGZvdW5kLCBvdGhlcndpc2UgdGhyb3dzIEFzc2VydGlvbkVycm9yIiIiCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyh4KToKKyAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSBvcG5hbWU6CisgICAgICAgICAgICAgICAgaWYgYXJndmFsIGlzIF9VTlNQRUNJRklFRCBvciBpbnN0ci5hcmd2YWwgPT0gYXJndmFsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHIKKyAgICAgICAgZGlzYXNzZW1ibHkgPSBzZWxmLmdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoeCkKKyAgICAgICAgaWYgYXJndmFsIGlzIF9VTlNQRUNJRklFRDoKKyAgICAgICAgICAgIG1zZyA9ICclcyBub3QgZm91bmQgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG5vdCBmb3VuZCBpbiBieXRlY29kZTpcbiVzJworICAgICAgICAgICAgbXNnID0gbXNnICUgKG9wbmFtZSwgYXJndmFsLCBkaXNhc3NlbWJseSkKKyAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgIGRlZiBhc3NlcnROb3RJbkJ5dGVjb2RlKHNlbGYsIHgsIG9wbmFtZSwgYXJndmFsPV9VTlNQRUNJRklFRCk6CisgICAgICAgICIiIlRocm93cyBBc3NlcnRpb25FcnJvciBpZiBvcCBpcyBmb3VuZCIiIgorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CisgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgorICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKGNvKQorICAgICAgICAgICAgICAgIGlmIG9wYXJndmFsIGlzIF9VTlNQRUNJRklFRDoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJyVzIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJyAlIChvcG5hbWUsIGRpc2Fzc2VtYmx5KQorICAgICAgICAgICAgICAgIGVsaWYgaW5zdHIuYXJndmFsID09IGFyZ3ZhbDoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJyglcywlcikgb2NjdXJzIGluIGJ5dGVjb2RlOlxuJXMnCisgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1zZyAlIChvcG5hbWUsIGFyZ3ZhbCwgZGlzYXNzZW1ibHkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5IGIvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkKaW5kZXggMTM0M2YzNC4uYjY3ZDI4YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkKKysrIGIvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkKQEAgLTYxOSw2ICs2MTksMTAgQEAKICAgICAgICAgZXEodGQoaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQoMCkpCiAgICAgICAgIGVxKHRkKGRheXM9LS40L3VzX3Blcl9kYXksIGhvdXJzPS0uMi91c19wZXJfaG91ciksIHRkKG1pY3Jvc2Vjb25kcz0tMSkpCiAKKyAgICAgICAgIyBUZXN0IGZvciBhIHBhdGNoIGluIElzc3VlIDg4NjAKKyAgICAgICAgZXEodGQobWljcm9zZWNvbmRzPTAuNSksIDAuNSp0ZChtaWNyb3NlY29uZHM9MS4wKSkKKyAgICAgICAgZXEodGQobWljcm9zZWNvbmRzPTAuNSkvL3RkLnJlc29sdXRpb24sIDAuNSp0ZC5yZXNvbHV0aW9uLy90ZC5yZXNvbHV0aW9uKQorCiAgICAgZGVmIHRlc3RfbWFzc2l2ZV9ub3JtYWxpemF0aW9uKHNlbGYpOgogICAgICAgICB0ZCA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9LTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHRkLmRheXMsIHRkLnNlY29uZHMsIHRkLm1pY3Jvc2Vjb25kcyksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9maW5hbF9hLnB5IGIvTGliL3Rlc3QvZmluYWxfYS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBlZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZmluYWxfYS5weQpAQCAtMCwwICsxLDE5IEBACisiIiIKK0ZvZGRlciBmb3IgbW9kdWxlIGZpbmFsaXphdGlvbiB0ZXN0cyBpbiB0ZXN0X21vZHVsZS4KKyIiIgorCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC5maW5hbF9iCisKK3ggPSAnYScKKworY2xhc3MgQzoKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJbnNwZWN0IG1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucworICAgICAgICBwcmludCgieCA9IiwgeCkKKyAgICAgICAgcHJpbnQoImZpbmFsX2IueCA9IiwgdGVzdC5maW5hbF9iLngpCisgICAgICAgIHByaW50KCJzaHV0aWwucm10cmVlID0iLCBnZXRhdHRyKHNodXRpbC5ybXRyZWUsICdfX25hbWVfXycsIE5vbmUpKQorICAgICAgICBwcmludCgibGVuID0iLCBnZXRhdHRyKGxlbiwgJ19fbmFtZV9fJywgTm9uZSkpCisKK2MgPSBDKCkKK191bmRlcnNjb3JlZCA9IEMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZmluYWxfYi5weSBiL0xpYi90ZXN0L2ZpbmFsX2IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIyOGQ4MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2ZpbmFsX2IucHkKQEAgLTAsMCArMSwxOSBAQAorIiIiCitGb2RkZXIgZm9yIG1vZHVsZSBmaW5hbGl6YXRpb24gdGVzdHMgaW4gdGVzdF9tb2R1bGUuCisiIiIKKworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlc3QuZmluYWxfYQorCit4ID0gJ2InCisKK2NsYXNzIEM6CisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICMgSW5zcGVjdCBtb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMKKyAgICAgICAgcHJpbnQoInggPSIsIHgpCisgICAgICAgIHByaW50KCJmaW5hbF9hLnggPSIsIHRlc3QuZmluYWxfYS54KQorICAgICAgICBwcmludCgic2h1dGlsLnJtdHJlZSA9IiwgZ2V0YXR0cihzaHV0aWwucm10cmVlLCAnX19uYW1lX18nLCBOb25lKSkKKyAgICAgICAgcHJpbnQoImxlbiA9IiwgZ2V0YXR0cihsZW4sICdfX25hbWVfXycsIE5vbmUpKQorCitjID0gQygpCitfdW5kZXJzY29yZWQgPSBDKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weSBiL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQppbmRleCA4ODUyN2RmLi4xOWI1NGVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9mb3JrX3dhaXQucHkKKysrIGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgICAgICBzZWxmLmFsaXZlW2lkXSA9IG9zLmdldHBpZCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcChTSE9SVFNMRUVQKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydDMucGVtIGIvTGliL3Rlc3Qva2V5Y2VydDMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmE2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9rZXljZXJ0My5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBTUxnRDBrQUtEYjVjRnlQCitqYndOZlI1Q3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNCis5ejJqMU9sYU4rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaCithZ2dFZGtqMVRzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRUNnWUEwYUgrVDJWZjNXT1B2OEtka2NKZzZnQ1JlCit5SktYT1dnV1JjaWN4L0NVek9Fc1R4bUZJRFBMeHFBV0Ezazd2MEIrM3ZqR3c1WTlseWNWLzVYcVhOb1FJMTRqCit5MDlpTnN1bWRzMTN1NUFLa0dkVEpuWmhRN1VLZG9WSGZ1UDQ0WmRPdi9ySjUvVkQ2RjR6V3l3cGU5MHBjYksrCitBV0RWdHVzZ0dRQlNpZUVsMVFKQkFPeVZyVUc1bDJ5b1VCdGQyenIva2lHbS9EWXlYbEl0aFFPL0EzL0xuZ0RXCis1L3lkR3hWc1Q3bEFWT2dDc29UKzBMNGVmVGg5MFBqelc4TFBRclBCV1ZNQ1FRRFMzaC9GdFlZZDVsZnorRk5MCis5Q0VlMUYxdzlsOFA3NDl1TlVEMGczMTd6djF0YXRJcVZDc1FXSGZWSE5kVnZmUSt2U0Z3MzhPT1JPMDBYcXM5CisxR0pyQWtCa29YWEVreENab3k0UHRlaGVPLzhJV1dMR0dyNkw3ZGk2TXpGbDFsSXF3VDZEOEw5b2FWMnZ5bkZUCitEbktvcDBwYTA5VW5oanl3NTdLTU5tU0UyU1VKQWtFQXJsb1RFenBnUm1DcTRJSzIvTnBDZUdkSFM1dXFSbGJoCisxVklhL3hHcHM3RVdRbDVNbjhzd1FEZWwvWVAzV0dIVGpmeDdwZ1NlZ1Fma3lhUnRHcFo5T1FKQWE5VnVtajhtCitKQUF0STBCbmdhOGhnUXg3QmhUUVk0Q2FkRHh5aVJHT0dZaHdVellWQ3FrYjJzYlZSSDlIbndVYUpUN2NXQlkzCitSbkpkSE9NWFdlbTcvdz09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgxICgweGIwOTI2NGIxZjJkYTIxZDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049bG9jYWxob3N0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YzI6ZTA6MGY6NDk6MDA6Mjg6MzY6Zjk6NzA6NWM6OGY6OGQ6YmM6MGQ6CisgICAgICAgICAgICAgICAgICAgIDdkOjFlOjQyOmI1OmVjOjFkOjVjOjJmOmE0OjMxOjcwOjE2OjBmOmMwOmNiOgorICAgICAgICAgICAgICAgICAgICBjNjoyNDpkMzpiZToxMzoxNjplZTphNTo2Nzo5NzowMzphNjpkZjphOTo5OToKKyAgICAgICAgICAgICAgICAgICAgOTY6Y2M6Yzc6MmE6ZmI6MTE6N2Y6NGU6NjU6NGY6OGE6NWU6ODI6MjE6NGM6CisgICAgICAgICAgICAgICAgICAgIGY3OjNkOmEzOmQ0OmU5OjVhOjM3OmU3OjIyOmZkOjdlOmNkOjUzOjZkOjkzOgorICAgICAgICAgICAgICAgICAgICAzNDpkZTo5YzphZDo4NDphMjozNzpiZTpjNTo4ZDo4Mjo0ZjplMzphZToyMzoKKyAgICAgICAgICAgICAgICAgICAgZjM6YmU6YTc6NzU6MmM6NzI6MGY6ZWE6ZjM6Y2E6Y2Q6ZmM6ZTk6M2Y6YjU6CisgICAgICAgICAgICAgICAgICAgIGFmOjU2Ojk5OjZhOjA4OjA0Ojc2OjQ4OmY1OjRlOmM0OmFjOmJmOjVjOmQ2OgorICAgICAgICAgICAgICAgICAgICAyMTo4MjphNTozYzo4ODplNTpiZToxYjpiMQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDJmOjQyOjVmOmEzOjA5OjJjOmZhOjUxOjg4OmM3OjM3OjdmOmVhOjBlOjYzOmYwOmEyOjlhOgorICAgICAgICAgZTU6NWE6ZTI6Yzg6MjA6ZjA6M2Y6NjA6YmM6Yzg6MGY6YjY6YzY6NzY6Y2U6ZGI6ODM6OTM6CisgICAgICAgICBmNTphMzozMzo2NzowMTo4ZTowNDpjZDowMDo5YTo3MzpmZDpmMzozNTo4NjpmYTpkNzoxMzoKKyAgICAgICAgIGUyOjQ2OmM2OjlkOmMwOjI5OjUzOmQ0OmE5OjkwOmI4Ojc3OjRiOmU2OjgzOjc2OmU0OjkyOgorICAgICAgICAgZDY6OWM6NTA6Y2Y6NDM6ZDA6YzY6MDE6Nzc6NjE6OWE6ZGU6OWI6NzA6Zjc6NzI6Y2Q6NTk6CisgICAgICAgICAwMDozMTo2OTpkOTpiNDpjYTowNjo5Yzo2ZDpjMzpjNzo4MDo4Yzo2ODplNjpiNTphMjpmODoKKyAgICAgICAgIGVmOjFkOmJiOjE2OjlmOjc3Ojc3OmVmOjg3OjYyOjIyOjliOjRkOjY5OmE0OjNhOjFhOmYxOgorICAgICAgICAgMjE6NWU6OGM6MzI6YWM6OTI6ZmQ6MTU6NmI6MTg6YzI6N2Y6MTU6MGQ6OTg6MzA6Y2E6NzU6CisgICAgICAgICA4ZjoxYTo3MTpkZjpkYToxZDpiMjplZjo5YTplODoyZDoyZTowMjpmZDo0YTozYzphYTo5NjoKKyAgICAgICAgIDBiOjA2OjVkOjM1OmIzOjNkOjI0Ojg3OjRiOmUwOmIwOjU4OjYwOjJmOjQ1OmFjOjJlOjQ4OgorICAgICAgICAgOGE6YjA6OTk6MTA6NjU6Mjc6ZmY6Y2M6YjE6ZDg6ZmQ6YmQ6MjY6NmI6Yjk6MGM6MDU6MmE6CisgICAgICAgICBmNDo0NTo2MzozNTo1MTowNzplZDo4Mzo4NTpmZTo2Zjo2OTpjYjpiYjo0MDphODphZTpiNjoKKyAgICAgICAgIDNiOjU2OjRhOjJkOmE0OmVkOjZkOjExOjJjOjRkOmVkOjE3OjI0OmZkOjQ3OmJjOmQzOjQxOgorICAgICAgICAgYTI6ZDM6MDY6ZmU6MGM6OTA6ZDg6ZDg6OTQ6MjY6YzQ6ZmY6Y2M6YTE6ZDg6NDI6Nzc6ZWI6CisgICAgICAgICBmYzphOTo5NDo3MQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcERDQ0FZd0NDUUN3a21TeDh0b2gwVEFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJmTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJJd0VBWURWUVFERXdsc2IyTmhiR2h2CitjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UGpid05mUjVDCit0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTTl6MmoxT2xhCitOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWmFnZ0Vka2oxCitUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUM5Q1g2TUpMUHBSCitpTWMzZitvT1kvQ2ltdVZhNHNnZzhEOWd2TWdQdHNaMnp0dURrL1dqTTJjQmpnVE5BSnB6L2ZNMWh2clhFK0pHCit4cDNBS1ZQVXFaQzRkMHZtZzNia2t0YWNVTTlEME1ZQmQyR2EzcHR3OTNMTldRQXhhZG0weWdhY2JjUEhnSXhvCis1cldpK084ZHV4YWZkM2Z2aDJJaW0wMXBwRG9hOFNGZWpES3NrdjBWYXhqQ2Z4VU5tRERLZFk4YWNkL2FIYkx2CittdWd0TGdMOVNqeXFsZ3NHWFRXelBTU0hTK0N3V0dBdlJhd3VTSXF3bVJCbEovL01zZGo5dlNacnVRd0ZLdlJGCitZelZSQisyRGhmNXZhY3U3UUtpdXRqdFdTaTJrN1cwUkxFM3RGeVQ5Ujd6VFFhTFRCdjRNa05qWWxDYkUvOHloCisyRUozNi95cGxIRT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2tleWNlcnQ0LnBlbSBiL0xpYi90ZXN0L2tleWNlcnQ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzM1NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qva2V5Y2VydDQucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQUs1VVFpTUk1VmtOczJRdgorTDdnVWFpRGRGZXZOVVhSalU0REhBZTNaenpZTFpORTY5aDlnTzlWQ1NTMTZ0SjVmVDVWRXUwRVp5R3IwZTNWMgorTmtYMFpvVTBIYy9VYVk0cXg3TEhtbjVTWVpwSXhoSm5rZjdTeUhKSzF6VWFHbFUwL0x4WXFJdUdDdEY1ZHF4MQorTDJPUWhFeDFHTTZSeWRIZGdYNjlHNjRMWGNZNUFnTUJBQUVDZ1lBaHNSTWZKa2I5RVJMTWwvb0cvNXNMUXU5TAorcFdES3Q2K1p3ZHh6bFpiZ2dRODVDTVlzaGpMS0lvZDJETEwvc0xmMngxUFJYeVJHMTMxTTFFM2s4emtrejZkZQorUjF1RHJJTi94OTFpdVl6ZkxRWkdoOGJNWTdZamQyZW9yb2E2Ui83RGpwRWxHZWpMeE9BYURXTzBTVDJJRlF5OQorbXlUR1MyalNNOTd3Y1hmc1NRSkJBTlAzamVsSm9TNVg2QlJqVFNuZVkyMXdjb2N4VnVRaDhwWHBFckFMVk5zVAorZHJyRlRlYUJ1WnA3S3ZidG5JTTVnMldSTnZheExabEFZL2hYUEp2aTZuY0NRUURTaXgxY2VibWw2RW1QbEVaUworTW04Z3dJMkY5dWZVdW53Sm1CSmN6ODI2RG8wWk5HQnlXREFNL0pRWkg0Rlg0R2ZBRk51ajhQVWIrR1FmYWRreAoraTFEUEFrRUEwbFZzTkhvanZ1RHNJbzhIR3V6YXJOWlFUMmJlV2pKMWpkeGg5dDdIclR4N0xJcHM2cmIvZmhPSworWnMwUjZnVkFKYUViY1dBUFoydEZ5RUNJbkFkbnNRSkFVamFlWFhqdXhGa2pPRnltNVB2cXB2aHBpdkV4NzhCdQorSlBUcjNyQUtYbWZHTXh4ZnVPYTB4SzF3U3lzaFA2WlIvUkJuLytsY1hQS3ViaEhRRE9lZ3d3SkFKRjFEQlFuTgorKy90TG1PUFVMdER3ZlA0Wml4bisvOEdtR09haEZvUmN1NlZJR0htUmlsSlRuNk1PQnV0dzdHbHYyWWRlQzZsLworZTgzR3E2ZmZMVmZLTlE9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MiAoMHhiMDkyNjRiMWYyZGEyMWQyKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWZha2Vob3N0bmFtZQorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmFlOjU0OjQyOjIzOjA4OmU1OjU5OjBkOmIzOjY0OjJmOjJmOmI4OjE0OgorICAgICAgICAgICAgICAgICAgICA2YToyMDpkZDoxNTplYjpjZDo1MTo3NDo2Mzo1Mzo4MDpjNzowMTplZDpkOToKKyAgICAgICAgICAgICAgICAgICAgY2Y6MzY6MGI6NjQ6ZDE6M2E6ZjY6MWY6NjA6M2I6ZDU6NDI6NDk6MmQ6N2E6CisgICAgICAgICAgICAgICAgICAgIGI0OjllOjVmOjRmOjk1OjQ0OmJiOjQxOjE5OmM4OjZhOmY0OjdiOjc1Ojc2OgorICAgICAgICAgICAgICAgICAgICAzNjo0NTpmNDo2Njo4NTozNDoxZDpjZjpkNDo2OTo4ZToyYTpjNzpiMjpjNzoKKyAgICAgICAgICAgICAgICAgICAgOWE6N2U6NTI6NjE6OWE6NDg6YzY6MTI6Njc6OTE6ZmU6ZDI6Yzg6NzI6NGE6CisgICAgICAgICAgICAgICAgICAgIGQ3OjM1OjFhOjFhOjU1OjM0OmZjOmJjOjU4OmE4OjhiOjg2OjBhOmQxOjc5OgorICAgICAgICAgICAgICAgICAgICA3NjphYzo3NToyZjo2Mzo5MDo4NDo0Yzo3NToxODpjZTo5MTpjOTpkMTpkZDoKKyAgICAgICAgICAgICAgICAgICAgODE6N2U6YmQ6MWI6YWU6MGI6NWQ6YzY6MzkKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICBhZDo0NTo4YTo4ZTplZjpjNjplZjowNDo0MTo1YzoyYzo0YTo4NDpkYzowMjo3NjowYzpkMDoKKyAgICAgICAgIDY2OjBmOmYwOjE2OjA0OjU4OjRkOmZkOjY4OmI3OmI4OmQzOmE4OjQxOmE1OjVjOjNjOjZmOgorICAgICAgICAgNjU6M2M6ZDE6Zjg6Y2U6NDM6MzU6ZTc6NDE6NWY6NTM6M2Q6Yzk6MmM6YzM6N2Q6ZmM6NTY6CisgICAgICAgICA0YTpmYTo0Nzo3NzozODo5ZDpiYjo5NzoyODowYTozYjo5MToxOTo3ZjpiYzo3NDphZToxNToKKyAgICAgICAgIDZiOmJkOjIwOjM2OjY3OjQ1OmE1OjFlOjc5OmQ3Ojc1OmU2Ojg5OjVjOjZkOjU0Ojg0OmQxOgorICAgICAgICAgOTU6ZDc6YTc6YjQ6MzM6M2M6YWY6Mzc6YzQ6Nzk6OGY6NWU6NzU6ZGM6NzU6YzI6MTg6ZmI6CisgICAgICAgICA2MTo2ZjoyZDpkYzozODo2NTo1YjpiYTo2NzoyODpkMDo4ODpkNzo4ZDpiOToyMzo1YTo4ZToKKyAgICAgICAgIGU4OmM2OmJiOmRiOmNlOmQ1OmI4OjQxOjJhOmNlOjkzOjA4OmI2Ojk1OmFkOjM0OjIwOjE4OgorICAgICAgICAgZDU6M2I6Mzc6NTI6NzQ6NTA6MGI6MDc6MmM6YjA6NmQ6YTQ6NGM6N2I6ZjQ6ZTA6ZmQ6ZDE6CisgICAgICAgICBhZjoxNzphYToyMDpjZDo2MjplMzpmMDo5ZDozNzo2OTpkYjo0MTpiZDpkNDoxYzpmYjo1MzoKKyAgICAgICAgIDIwOmRhOjg4OjlkOjc2OjI2OjY3OmNlOjAxOjkwOmE3OjgwOjFkOmE5OjViOjM5OjczOjY4OgorICAgICAgICAgNTQ6MGE6ZDE6MmE6MDM6MWI6OGY6M2M6NDM6NWQ6NWQ6YzQ6NTE6ZjE6YTc6ZTc6MTE6ZGE6CisgICAgICAgICAzMToyYzo0OTowNjphZjowNDpmNDpiODozYzo5OTpjNDoyMDpiOTowNjozNjphMjowMDo5MjoKKyAgICAgICAgIDYxOjFkOjBjOjZkOjI0OjA1OmUyOjgyOmUxOjQ3OmRiOmEwOjVmOmJhOmI5OmZiOmJhOmZhOgorICAgICAgICAgNDk6MTI6MWU6Y2UKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3B6Q0NBWThDQ1FDd2ttU3g4dG9oMGpBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCaU1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SVXdFd1lEVlFRREV3eG1ZV3RsYUc5egorZEc1aGJXVXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBSzVVUWlNSTVWa05zMlF2TDdnVQorYWlEZEZldk5VWFJqVTRESEFlM1p6ellMWk5FNjloOWdPOVZDU1MxNnRKNWZUNVZFdTBFWnlHcjBlM1YyTmtYMAorWm9VMEhjL1VhWTRxeDdMSG1uNVNZWnBJeGhKbmtmN1N5SEpLMXpVYUdsVTAvTHhZcUl1R0N0RjVkcXgxTDJPUQoraEV4MUdNNlJ5ZEhkZ1g2OUc2NExYY1k1QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBSzFGaW83dgoreHU4RVFWd3NTb1RjQW5ZTTBHWVA4QllFV0UzOWFMZTQwNmhCcFZ3OGIyVTgwZmpPUXpYblFWOVRQY2tzdzMzOAorVmtyNlIzYzRuYnVYS0FvN2tSbC92SFN1Rld1OUlEWm5SYVVlZWRkMTVvbGNiVlNFMFpYWHA3UXpQSzgzeEhtUAorWG5YY2RjSVkrMkZ2TGR3NFpWdTZaeWpRaU5lTnVTTmFqdWpHdTl2TzFiaEJLczZUQ0xhVnJUUWdHTlU3TjFKMAorVUFzSExMQnRwRXg3OU9EOTBhOFhxaUROWXVQd25UZHAyMEc5MUJ6N1V5RGFpSjEySm1mT0FaQ25nQjJwV3psegorYUZRSzBTb0RHNDg4UTExZHhGSHhwK2NSMmpFc1NRYXZCUFM0UEpuRUlMa0dOcUlBa21FZERHMGtCZUtDNFVmYgorb0YrNnVmdTYra2tTSHM0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbGVha2Vycy90ZXN0X2dlc3RhbHQucHkgYi9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAwODFjMS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLWltcG9ydCBzeXMKLQotaWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgotICAgIHJhaXNlIFZhbHVlRXJyb3IoIlRoaXMgdGVzdCBvbmx5IGxlYWtzIG9uIE1hYyBPUyBYIikKLQotZGVmIGxlYWsoKToKLSAgICAjIHRha2VuIGZyb20gcGxhdGZvcm0uX21hY192ZXJfbG9va3VwKCkKLSAgICBmcm9tIGdlc3RhbHQgaW1wb3J0IGdlc3RhbHQKLSAgICBpbXBvcnQgTWFjT1MKLQotICAgIHRyeToKLSAgICAgICAgZ2VzdGFsdCgnc3lzdScpCi0gICAgZXhjZXB0IE1hY09TLkVycm9yOgotICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5IGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQppbmRleCBiZmJmNDRlLi4xY2JjZWEyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKQEAgLTgwLDYgKzgwLDExIEBACiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKICAgICAgICAgZGVsIGxvY2sKIAorICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKKyAgICAgICAgcmVwcihsb2NrKQorICAgICAgICBkZWwgbG9jaworCiAgICAgZGVmIHRlc3RfYWNxdWlyZV9kZXN0cm95KHNlbGYpOgogICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCiAgICAgICAgIGxvY2suYWNxdWlyZSgpCkBAIC00MTMsNiArNDE4LDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnkpCiAKICAgICBkZWYgX2NoZWNrX25vdGlmeShzZWxmLCBjb25kKToKKyAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyB0ZXN0IGlzIHNlbnNpdGl2ZSB0byB0aW1pbmcuICBJZiB0aGUgd29ya2VyIHRocmVhZHMKKyAgICAgICAgIyBkb24ndCBleGVjdXRlIGluIGEgdGltZWx5IGZhc2hpb24sIHRoZSBtYWluIHRocmVhZCBtYXkgdGhpbmsgdGhleQorICAgICAgICAjIGFyZSBmdXJ0aGVyIGFsb25nIHRoZW4gdGhleSBhcmUuICBUaGUgbWFpbiB0aHJlYWQgdGhlcmVmb3JlIGlzc3VlcworICAgICAgICAjIF93YWl0KCkgc3RhdGVtZW50cyB0byB0cnkgdG8gbWFrZSBzdXJlIHRoYXQgaXQgZG9lc24ndCByYWNlIGFoZWFkCisgICAgICAgICMgb2YgdGhlIHdvcmtlcnMuCisgICAgICAgICMgU2Vjb25kbHksIHRoaXMgdGVzdCBhc3N1bWVzIHRoYXQgY29uZGl0aW9uIHZhcmlhYmxlcyBhcmUgbm90IHN1YmplY3QKKyAgICAgICAgIyB0byBzcHVyaW91cyB3YWtldXBzLiAgVGhlIGFic2VuY2Ugb2Ygc3B1cmlvdXMgd2FrZXVwcyBpcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIGRldGFpbCBvZiBDb25kaXRpb24gQ2FyaWFibGVzIGluIGN1cnJlbnQgQ1B5dGhvbiwgYnV0IGluIGdlbmVyYWwsIG5vdAorICAgICAgICAjIGEgZ3VhcmFudGVlZCBwcm9wZXJ0eSBvZiBjb25kaXRpb24gdmFyaWFibGVzIGFzIGEgcHJvZ3JhbW1pbmcKKyAgICAgICAgIyBjb25zdHJ1Y3QuICBJbiBwYXJ0aWN1bGFyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgY2FuIG5vIGxvbmdlcgorICAgICAgICAjIGJlIGNvbnZlbmllbnRseSBndWFyYW50ZWVkIHNob3VsZCB0aGVpciBpbXBsZW1lbnRhdGlvbiBldmVyIGNoYW5nZS4KICAgICAgICAgTiA9IDUKICAgICAgICAgcmVzdWx0czEgPSBbXQogICAgICAgICByZXN1bHRzMiA9IFtdCkBAIC00NDAsNiArNDU2LDkgQEAKICAgICAgICAgICAgIF93YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbXSkKKyAgICAgICAgIyBmaXJzdCB3YWl0LCB0byBlbnN1cmUgYWxsIHdvcmtlcnMgc2V0dGxlIGludG8gY29uZC53YWl0KCkgYmVmb3JlCisgICAgICAgICMgd2UgY29udGludWUuIFNlZSBpc3N1ZSAjODc5OQorICAgICAgICBfd2FpdCgpCiAgICAgICAgICMgTm90aWZ5IDUgdGhyZWFkczogdGhleSBtaWdodCBiZSBpbiB0aGVpciBmaXJzdCBvciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBjb25kLm5vdGlmeSg1KQpAQCAtNDUwLDYgKzQ2OSw3IEBACiAgICAgICAgICAgICBfd2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsoVHJ1ZSwgMSldICogMyArIFsoVHJ1ZSwgMildICogMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgWyhUcnVlLCAyKV0gKiAzKQorICAgICAgICBfd2FpdCgpICMgbWFrZSBzdXJlIGFsbCB3b3JrZXJzIHNldHRsZSBpbnRvIGNvbmQud2FpdCgpCiAgICAgICAgICMgTm90aWZ5IGFsbCB0aHJlYWRzOiB0aGV5IGFyZSBhbGwgaW4gdGhlaXIgc2Vjb25kIHdhaXQKICAgICAgICAgY29uZC5hY3F1aXJlKCkKICAgICAgICAgY29uZC5ub3RpZnlfYWxsKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5IGIvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkKaW5kZXggNDhkMmU1Ny4uNDI1MWQ1NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkKKysrIGIvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkKQEAgLTIsNiArMiw3IEBACiBhbmQgZnJpZW5kcy4iIiIKIAogaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgKgpAQCAtMjAsMTEgKzIxLDU0IEBACiAKICAgICBbcmVxX3g1MDlfZXh0ZW5zaW9uc10KICAgICBzdWJqZWN0QWx0TmFtZSAgICAgICAgID0gRE5TOntob3N0bmFtZX0KKworICAgIFsgY2EgXQorICAgIGRlZmF1bHRfY2EgICAgICA9IENBX2RlZmF1bHQKKworICAgIFsgQ0FfZGVmYXVsdCBdCisgICAgZGlyID0gY2FkaXIKKyAgICBkYXRhYmFzZSAgPSAkZGlyL2luZGV4LnR4dAorICAgIGNybG51bWJlciA9ICRkaXIvY3JsLnR4dAorICAgIGRlZmF1bHRfbWQgPSBzaGExCisgICAgZGVmYXVsdF9kYXlzID0gMzYwMAorICAgIGRlZmF1bHRfY3JsX2RheXMgPSAzNjAwCisgICAgY2VydGlmaWNhdGUgPSBweWNhY2VydC5wZW0KKyAgICBwcml2YXRlX2tleSA9IHB5Y2FrZXkucGVtCisgICAgc2VyaWFsICAgID0gJGRpci9zZXJpYWwKKyAgICBSQU5ERklMRSAgPSAkZGlyLy5yYW5kCisKKyAgICBwb2xpY3kgICAgICAgICAgPSBwb2xpY3lfbWF0Y2gKKworICAgIFsgcG9saWN5X21hdGNoIF0KKyAgICBjb3VudHJ5TmFtZSAgICAgICAgICAgICA9IG1hdGNoCisgICAgc3RhdGVPclByb3ZpbmNlTmFtZSAgICAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbk5hbWUgICAgICAgID0gbWF0Y2gKKyAgICBvcmdhbml6YXRpb25hbFVuaXROYW1lICA9IG9wdGlvbmFsCisgICAgY29tbW9uTmFtZSAgICAgICAgICAgICAgPSBzdXBwbGllZAorICAgIGVtYWlsQWRkcmVzcyAgICAgICAgICAgID0gb3B0aW9uYWwKKworICAgIFsgcG9saWN5X2FueXRoaW5nIF0KKyAgICBjb3VudHJ5TmFtZSAgID0gb3B0aW9uYWwKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lID0gb3B0aW9uYWwKKyAgICBsb2NhbGl0eU5hbWUgICAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbk5hbWUgID0gb3B0aW9uYWwKKyAgICBvcmdhbml6YXRpb25hbFVuaXROYW1lICA9IG9wdGlvbmFsCisgICAgY29tbW9uTmFtZSAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgID0gb3B0aW9uYWwKKworCisgICAgWyB2M19jYSBdCisKKyAgICBzdWJqZWN0S2V5SWRlbnRpZmllcj1oYXNoCisgICAgYXV0aG9yaXR5S2V5SWRlbnRpZmllcj1rZXlpZDphbHdheXMsaXNzdWVyCisgICAgYmFzaWNDb25zdHJhaW50cyA9IENBOnRydWUKKwogICAgICIiIgogCiBoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAKLWRlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lKToKK2RlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lLCBzaWduPUZhbHNlKToKKyAgICBwcmludCgiY3JlYXRpbmcgY2VydCBmb3IgIiArIGhvc3RuYW1lKQogICAgIHRlbXBuYW1lcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKQEAgLTMzLDEwICs3NywyNSBAQAogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKHJlcV9maWxlLCAndycpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHJlcV90ZW1wbGF0ZS5mb3JtYXQoaG9zdG5hbWU9aG9zdG5hbWUpKQotICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1ub2RlcycsICcteDUwOScsCisgICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywKICAgICAgICAgICAgICAgICAnLW5ld2tleScsICdyc2E6MTAyNCcsICcta2V5b3V0Jywga2V5X2ZpbGUsCi0gICAgICAgICAgICAgICAgJy1vdXQnLCBjZXJ0X2ZpbGUsICctY29uZmlnJywgcmVxX2ZpbGVdCisgICAgICAgICAgICAgICAgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKGRlbGV0ZT1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICB0ZW1wbmFtZXMuYXBwZW5kKGYubmFtZSkKKyAgICAgICAgICAgICAgICByZXFmaWxlID0gZi5uYW1lCisgICAgICAgICAgICBhcmdzICs9IFsnLW91dCcsIHJlcWZpbGUgXQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhcmdzICs9IFsnLXg1MDknLCAnLW91dCcsIGNlcnRfZmlsZSBdCiAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorCisgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgcmVxX2ZpbGUsICctb3V0JywgY2VydF9maWxlLCAnLW91dGRpcicsICdjYWRpcicsCisgICAgICAgICAgICAgICAgICAgICctcG9saWN5JywgJ3BvbGljeV9hbnl0aGluZycsICctYmF0Y2gnLCAnLWluZmlsZXMnLCByZXFmaWxlIF0KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorCisKICAgICAgICAgd2l0aCBvcGVuKGNlcnRfZmlsZSwgJ3InKSBhcyBmOgogICAgICAgICAgICAgY2VydCA9IGYucmVhZCgpCiAgICAgICAgIHdpdGggb3BlbihrZXlfZmlsZSwgJ3InKSBhcyBmOgpAQCAtNDYsNiArMTA1LDM2IEBACiAgICAgICAgIGZvciBuYW1lIGluIHRlbXBuYW1lczoKICAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQogCitUTVBfQ0FESVIgPSAnY2FkaXInCisKK2RlZiB1bm1ha2VfY2EoKToKKyAgICBzaHV0aWwucm10cmVlKFRNUF9DQURJUikKKworZGVmIG1ha2VfY2EoKToKKyAgICBvcy5ta2RpcihUTVBfQ0FESVIpCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdpbmRleC50eHQnKSwnYSsnKSBhcyBmOgorICAgICAgICBwYXNzICMgZW1wdHkgZmlsZQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnY3JsLnR4dCcpLCdhKycpIGFzIGY6CisgICAgICAgIHIud3JpdGUoIjAwIikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2luZGV4LnR4dC5hdHRyJyksJ3crJykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgndW5pcXVlX3N1YmplY3QgPSBubycpCisKKyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgidyIpIGFzIHQ6CisgICAgICAgIHQud3JpdGUocmVxX3RlbXBsYXRlLmZvcm1hdChob3N0bmFtZT0nb3VyLWNhLXNlcnZlcicpKQorICAgICAgICB0LmZsdXNoKCkKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmOgorICAgICAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctZXh0ZW5zaW9ucycsICd2M19jYScsICctbm9kZXMnLAorICAgICAgICAgICAgICAgICAgICAnLW5ld2tleScsICdyc2E6MjA0OCcsICcta2V5b3V0JywgJ3B5Y2FrZXkucGVtJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCBmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICctc3ViaicsICcvQz1YWS9MPUNhc3RsZSBBbnRocmF4L089UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EvQ049b3VyLWNhLXNlcnZlciddCisgICAgICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCB0Lm5hbWUsICctY3JlYXRlX3NlcmlhbCcsCisgICAgICAgICAgICAgICAgICAgICctb3V0JywgJ3B5Y2FjZXJ0LnBlbScsICctYmF0Y2gnLCAnLW91dGRpcicsIFRNUF9DQURJUiwKKyAgICAgICAgICAgICAgICAgICAgJy1rZXlmaWxlJywgJ3B5Y2FrZXkucGVtJywgJy1kYXlzJywgJzM2NTAnLAorICAgICAgICAgICAgICAgICAgICAnLXNlbGZzaWduJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1pbmZpbGVzJywgZi5uYW1lIF0KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1nZW5jcmwnLCAnLW91dCcsICdyZXZvY2F0aW9uLmNybCddCisgICAgICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBvcy5jaGRpcihoZXJlKQpAQCAtNTQsMTEgKzE0MywzNCBAQAogICAgICAgICBmLndyaXRlKGNlcnQpCiAgICAgd2l0aCBvcGVuKCdzc2xfa2V5LnBlbScsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZShrZXkpCisgICAgcHJpbnQoInBhc3N3b3JkIHByb3RlY3Rpbmcgc3NsX2tleS5wZW0gaW4gc3NsX2tleS5wYXNzd2QucGVtIikKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3JzYScsJy1pbicsJ3NzbF9rZXkucGVtJywnLW91dCcsJ3NzbF9rZXkucGFzc3dkLnBlbScsJy1kZXMzJywnLXBhc3NvdXQnLCdwYXNzOnNvbWVwYXNzJ10pCisgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnLCdyc2EnLCctaW4nLCdzc2xfa2V5LnBlbScsJy1vdXQnLCdrZXljZXJ0LnBhc3N3ZC5wZW0nLCctZGVzMycsJy1wYXNzb3V0JywncGFzczpzb21lcGFzcyddKQorCiAgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBlbScsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZShrZXkpCiAgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIHdpdGggb3Blbigna2V5Y2VydC5wYXNzd2QucGVtJywgJ2ErJykgYXMgZjoKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCiAgICAgIyBGb3IgY2VydGlmaWNhdGUgbWF0Y2hpbmcgdGVzdHMKKyAgICBtYWtlX2NhKCkKICAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdmYWtlaG9zdG5hbWUnKQogICAgIHdpdGggb3Blbigna2V5Y2VydDIucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKICAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnbG9jYWxob3N0JywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQzLnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScsIFRydWUpCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0NC5wZW0nLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoa2V5KQorICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICB1bm1ha2VfY2EoKQorICAgIHByaW50KCJcblxuUGxlYXNlIGNoYW5nZSB0aGUgdmFsdWVzIGluIHRlc3Rfc3NsLnB5LCB0ZXN0X3BhcnNlX2NlcnQgZnVuY3Rpb24gcmVsYXRlZCB0byBub3RBZnRlcixub3RCZWZvcmUgYW5kIHNlcmlhbE51bWJlciIpCisgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnLCd4NTA5JywnLWluJywna2V5Y2VydC5wZW0nLCctZGF0ZXMnLCctc2VyaWFsJywnLW5vb3V0J10pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weSBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CmluZGV4IGQwOWU3OGMuLjhlZjBlYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CkBAIC0xNDAsMTIgKzE0MCw4IEBACiAgICAgcmV0dXJuICIiCiAKIAotY2xhc3MgZ2FpZXJyb3IoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLQotY2xhc3MgZXJyb3IoRXhjZXB0aW9uKToKLSAgICBwYXNzCitnYWllcnJvciA9IHNvY2tldF9tb2R1bGUuZ2FpZXJyb3IKK2Vycm9yID0gc29ja2V0X21vZHVsZS5lcnJvcgogCiAKICMgQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkgYi9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKaW5kZXggOTA4YWZlMy4uMDE3ZTAxMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CisrKyBiL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQpAQCAtNyw2ICs3LDExIEBACiAjIGNvcnJlY3RseSBvbiBXaW5kb3dzLiAgSG93ZXZlciwgd2Ugc2hvdWxkIGdldCBhIFJ1bnRpbWVFcnJvciByYXRoZXIKICMgdGhhbiB0aGUgV2luZG93cyBlcXVpdmFsZW50IG9mIGEgZm9yayBib21iLgogCitpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChzeXMuYXJndlsxXSkKK2Vsc2U6CisgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QoJ3NwYXduJykKKwogcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1mb28pCiBwLnN0YXJ0KCkKIHAuam9pbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5IGIvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQppbmRleCAyNmJhYzdiLi5kY2FhZTdiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKQEAgLTI4Miw3ICsyODIsNyBAQAogICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5vcGVuX21hcHBpbmdfZmlsZSgpLmNsb3NlKCkgIyB0ZXN0IGl0IHRvIHJlcG9ydCB0aGUgZXJyb3IgZWFybHkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiK3NlbGYubWFwZmlsZXVybCkKIAogICAgIGRlZiBvcGVuX21hcHBpbmdfZmlsZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weSBiL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQppbmRleCA1Y2U0NmRkLi4wNDBjMjZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKKysrIGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CkBAIC0xLDkgKzEsMTEgQEAKK2ltcG9ydCBjb3B5cmVnCiBpbXBvcnQgaW8KLWltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHBpY2tsZXRvb2xzCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCi1pbXBvcnQgY29weXJlZworaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgogZnJvbSBodHRwLmNvb2tpZXMgaW1wb3J0IFNpbXBsZUNvb2tpZQogCkBAIC05NSw2ICs5Nyw5IEBACiAgICAgZGVmIF9fZ2V0aW5pdGFyZ3NfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICgpCiAKK2NsYXNzIEgob2JqZWN0KToKKyAgICBwYXNzCisKIGltcG9ydCBfX21haW5fXwogX19tYWluX18uQyA9IEMKIEMuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKQEAgLTEwMiw2ICsxMDcsOCBAQAogRC5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgogX19tYWluX18uRSA9IEUKIEUuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKK19fbWFpbl9fLkggPSBICitILl9fbW9kdWxlX18gPSAiX19tYWluX18iCiAKIGNsYXNzIG15aW50KGludCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtNDkzLDMxICs1MDAsNTIgQEAKICAgICB4LmFwcGVuZCg1KQogICAgIHJldHVybiB4CiAKKwogY2xhc3MgQWJzdHJhY3RQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBTdWJjbGFzcyBtdXN0IGRlZmluZSBzZWxmLmR1bXBzLCBzZWxmLmxvYWRzLgogCisgICAgb3B0aW1pemVkID0gRmFsc2UKKwogICAgIF90ZXN0ZGF0YSA9IGNyZWF0ZV9kYXRhKCkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgcGFzcwogCisgICAgZGVmIGFzc2VydF9pc19jb3B5KHNlbGYsIG9iaiwgb2JqY29weSwgbXNnPU5vbmUpOgorICAgICAgICAiIiJVdGlsaXR5IG1ldGhvZCB0byB2ZXJpZnkgaWYgdHdvIG9iamVjdHMgYXJlIGNvcGllcyBvZiBlYWNoIG90aGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgbXNnID0gInshcn0gaXMgbm90IGEgY29weSBvZiB7IXJ9Ii5mb3JtYXQob2JqLCBvYmpjb3B5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgb2JqY29weSwgbXNnPW1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG9iaiksIHR5cGUob2JqY29weSksIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19kaWN0X18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fc2xvdHNfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwob2JqLl9fc2xvdHNfXywgb2JqY29weS5fX3Nsb3RzX18sIG1zZz1tc2cpCisgICAgICAgICAgICBmb3Igc2xvdCBpbiBvYmouX19zbG90c19fOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob2JqLCBzbG90KSwgaGFzYXR0cihvYmpjb3B5LCBzbG90KSwgbXNnPW1zZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob2JqLCBzbG90LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIob2JqY29weSwgc2xvdCwgTm9uZSksIG1zZz1tc2cpCisKICAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgogICAgICAgICAjIHRlc3QgdmFyaW91cyBkYXRhdHlwZXMgbm90IHRlc3RlZCBieSB0ZXN0ZGF0YQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgeCA9IG15aW50KDQpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgICAgIHggPSAoMSwgKCkpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgICAgIHggPSBpbml0YXJnKDEsIHgpCiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgIyBYWFggdGVzdCBfX3JlZHVjZV9fIHByb3RvY29sPwogCkBAIC01MjYsMTYgKzU1NCwxNiBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQogICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShleHBlY3RlZCwgZ290KQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGEwKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMCkpCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTEoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTEpKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEExKSkKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMikpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTIpKQogCiAgICAgZGVmIHRlc3RfbG9hZF9jbGFzc2ljX2luc3RhbmNlKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZTUxODAuICBUZXN0IGxvYWRpbmcgMi54IHBpY2tsZXMgdGhhdApAQCAtNTU3LDcgKzU4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGIiWFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiInAwXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKGRwMVxuYi4iKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMCkpCiAKICAgICAgICAgICAgICMgUHJvdG9jb2wgMSAoYmluYXJ5IG1vZGUgcGlja2xlKQogICAgICAgICAgICAgIiIiCkBAIC01NzQsNyArNjAyLDcgQEAKICAgICAgICAgICAgIHBpY2tsZTEgPSAoYicoY19fbWFpbl9fXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMSkpCiAKICAgICAgICAgICAgICMgUHJvdG9jb2wgMiAocGlja2xlMiA9IGInXHg4MFx4MDInICsgcGlja2xlMSkKICAgICAgICAgICAgICIiIgpAQCAtNTkyLDcgKzYyMCw3IEBACiAgICAgICAgICAgICBwaWNrbGUyID0gKGInXHg4MFx4MDIoY19fbWFpbl9fXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMikpCiAKICAgICAjIFRoZXJlIGFyZSBncmF0dWl0b3VzIGRpZmZlcmVuY2VzIGJldHdlZW4gcGlja2xlcyBwcm9kdWNlZCBieQogICAgICMgcGlja2xlIGFuZCBjUGlja2xlLCBsYXJnZWx5IGJlY2F1c2UgY1BpY2tsZSBzdGFydHMgUFVUIGluZGljZXMgYXQKQEAgLTYxNyw2ICs2NDUsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMobCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGxpc3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF0pCiAKQEAgLTYyNiw2ICs2NTUsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIHR1cGxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4WzBdKSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHhbMF1bMF0pCkBAIC02MzYsMTUgKzY2NiwzOSBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGRpY3QpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeC5rZXlzKCkpLCBbMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeFsxXSBpcyB4KQogCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3NldChzZWxmKToKKyAgICAgICAgaCA9IEgoKQorICAgICAgICB5ID0gc2V0KHtofSkKKyAgICAgICAgaC5hdHRyID0geQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeSwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIHNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobGlzdCh4KVswXS5hdHRyLCB4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZnJvemVuc2V0KHNlbGYpOgorICAgICAgICBoID0gSCgpCisgICAgICAgIHkgPSBmcm96ZW5zZXQoe2h9KQorICAgICAgICBoLmF0dHIgPSB5CisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgZnJvemVuc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsaXN0KHgpWzBdLmF0dHIsIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgMSkKKwogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9pbnN0KHNlbGYpOgogICAgICAgICBpID0gQygpCiAgICAgICAgIGkuYXR0ciA9IGkKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGksIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeCksIGRpcihpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeC5hdHRyLCB4KQogCkBAIC02NTcsNiArNzExLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsaXN0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcih4WzBdKSwgZGlyKGkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhbMF0uYXR0ci5rZXlzKCkpLCBbMV0pCkBAIC02NjQsMzEgKzcxOSw4IEBACiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLmxvYWRzLCBiJ2cwXG5wMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJygoS2R0cDBcbmhceDAwbC4pKScpLCBbKDEwMCwpLCAoMTAwLCldKQotCi0gICAgZGVmIHRlc3RfaW5zZWN1cmVfc3RyaW5ncyhzZWxmKToKLSAgICAgICAgIyBYWFggU29tZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQKLSAgICAgICAgaW5zZWN1cmUgPSBbYiJhYmMiLCBiIjIgKyAyIiwgIyBub3QgcXVvdGVkCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ2FiYycgKyAnZGVmJyIsICMgbm90IGEgc2luZ2xlIHF1b3RlZCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjIiwgIyBxdW90ZSBpcyBub3QgY2xvc2VkCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiY1wiIiwgIyBvcGVuIHF1b3RlIGFuZCBjbG9zZSBxdW90ZSBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAgICBiIidhYmMnICAgPyIsICMganVuayBhZnRlciBjbG9zZSBxdW90ZQotICAgICAgICAgICAgICAgICAgICBiIidcXCciLCAjIHRyYWlsaW5nIGJhY2tzbGFzaAotICAgICAgICAgICAgICAgICAgICAjIFZhcmlhdGlvbnMgb24gaXNzdWUgIzE3NzEwCi0gICAgICAgICAgICAgICAgICAgIGIiJyIsCi0gICAgICAgICAgICAgICAgICAgIGInIicsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgICAiLAotICAgICAgICAgICAgICAgICAgICBiJyIgICAgJywKLSAgICAgICAgICAgICAgICAgICAgIyBzb21lIHRlc3RzIG9mIHRoZSBxdW90aW5nIHJ1bGVzCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ2FiY1wiXCcnIiwKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInXFxcXGFcJ1wnXCdcXFwnXFxcXFwnJyIsCi0gICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgZm9yIGIgaW4gaW5zZWN1cmU6Ci0gICAgICAgICAgICBidWYgPSBiIlMiICsgYiArIGIiXDAxMnAwXDAxMi4iCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWygxMDAsKSwgKDEwMCwpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGInKChLZHRwMFxuaFx4MDBsLikpJykpCiAKICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgogICAgICAgICBlbmRjYXNlcyA9IFsnJywgJzxcXHU+JywgJzxcXFx1MTIzND4nLCAnPFxuPicsCkBAIC02OTksMjYgKzczMSwyNiBAQAogICAgICAgICAgICAgZm9yIHUgaW4gZW5kY2FzZXM6CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgdTIgPSBzZWxmLmxvYWRzKHApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHUsIHUyKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9oaWdoX3BsYW5lKHNlbGYpOgogICAgICAgICB0ID0gJ1xVMDAwMTIzNDUnCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHQyID0gc2VsZi5sb2FkcyhwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdDIpCiAKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIGZvciBzIGluIGInJywgYid4eXonLCBiJ3h5eicqMTAwOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAgICAgICAgICAgICBmb3IgcyBpbiBbYnl0ZXMoW2ldKSBmb3IgaSBpbiByYW5nZSgyNTYpXToKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogICAgICAgICAgICAgZm9yIHMgaW4gW2J5dGVzKFtpLCBpXSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV06CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKIAogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBzeXMKQEAgLTcyOCwxNCArNzYwLDE0IEBACiAgICAgICAgICAgICAgICAgZm9yIGV4cGVjdGVkIGluICgtbiwgbik6CiAgICAgICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKICAgICAgICAgICAgICAgICAgICAgbjIgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG4yKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KGV4cGVjdGVkLCBuMikKICAgICAgICAgICAgICAgICBuID0gbiA+PiAxCiAKICAgICBkZWYgdGVzdF9tYXhpbnQ2NChzZWxmKToKICAgICAgICAgbWF4aW50NjQgPSAoMSA8PCA2MykgLSAxCiAgICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuLicKICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhkYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgbWF4aW50NjQpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkobWF4aW50NjQsIGdvdCkKIAogICAgICAgICAjIFRyeSB0b28gd2l0aCBhIGJvZ3VzIGxpdGVyYWwuCiAgICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ0pVTktcbi4nCkBAIC03NTAsNyArNzgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIG4gaW4gbnBvcywgLW5wb3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKG4sIHByb3RvKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhwaWNrbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGdvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkobiwgZ290KQogICAgICAgICAjIFRyeSBhIG1vbnN0ZXIuICBUaGlzIGlzIHF1YWRyYXRpYy10aW1lIGluIHByb3RvcyAwICYgMSwgc28gZG9uJ3QKICAgICAgICAgIyBib3RoZXIgd2l0aCB0aG9zZS4KICAgICAgICAgbmJhc2UgPSBpbnQoImRlYWRiZWVmZmVlZGZhY2UiLCAxNikKQEAgLTc1OCw2ICs3OTAsMTAgQEAKICAgICAgICAgZm9yIG4gaW4gbmJhc2UsIC1uYmFzZToKICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKG4sIDIpCiAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICAjIGFzc2VydF9pc19jb3B5IGlzIHZlcnkgZXhwZW5zaXZlIGhlcmUgYXMgaXQgcHJlY29tcHV0ZXMKKyAgICAgICAgICAgICMgYSBmYWlsdXJlIG1lc3NhZ2UgYnkgY29tcHV0aW5nIHRoZSByZXByKCkgb2YgbiBhbmQgZ290LAorICAgICAgICAgICAgIyB3ZSBqdXN0IGRvIHRoZSBjaGVjayBvdXJzZWx2ZXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZ290KSwgaW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBnb3QpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKQEAgLTc2OCw3ICs4MDQsNyBAQAogICAgICAgICAgICAgZm9yIHZhbHVlIGluIHRlc3RfdmFsdWVzOgogICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHModmFsdWUsIHByb3RvKQogICAgICAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocGlja2xlKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIGdvdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHZhbHVlLCBnb3QpCiAKICAgICBAcnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnZGVfREUnLCAnZnJfRlInKQogICAgIGRlZiB0ZXN0X2Zsb2F0X2Zvcm1hdChzZWxmKToKQEAgLTgwMCw2ICs4MzYsNyBAQAogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoYSwgcHJvdG8pCiAgICAgICAgICAgICBiID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGEpLCB0eXBlKGIpKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0c2VxKHNlbGYpOgogICAgICAgICBpbXBvcnQgdGltZQpAQCAtODA5LDI5ICs4NDYsMjkgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0Iik6CiAgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXQob3MuY3VyZGlyKQogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0dmZzIik6CiAgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXR2ZnMob3MuY3VyZGlyKQogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKIAogICAgIGRlZiB0ZXN0X2VsbGlwc2lzKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoLi4uLCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC4uLiwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoLi4uLCB1KQogCiAgICAgZGVmIHRlc3Rfbm90aW1wbGVtZW50ZWQoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhOb3RJbXBsZW1lbnRlZCwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb3RJbXBsZW1lbnRlZCwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIHUpCiAKICAgICBkZWYgdGVzdF9zaW5nbGV0b25fdHlwZXMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzY0Nzc6IFRlc3QgdGhhdCB0eXBlcyBvZiBidWlsdC1pbiBzaW5nbGV0b25zIGNhbiBiZSBwaWNrbGVkLgpAQCAtODQ1LDIxICs4ODIsMjEgQEAKICAgICAjIFRlc3RzIGZvciBwcm90b2NvbCAyCiAKICAgICBkZWYgdGVzdF9wcm90byhzZWxmKToKLSAgICAgICAgYnVpbGRfbm9uZSA9IHBpY2tsZS5OT05FICsgcGlja2xlLlNUT1AKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGV4cGVjdGVkID0gYnVpbGRfbm9uZQorICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoTm9uZSwgcHJvdG8pCiAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gcGlja2xlLlBST1RPICsgYnl0ZXMoW3Byb3RvXSkgKyBleHBlY3RlZAotICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMoTm9uZSwgcHJvdG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHByb3RvX2hlYWRlciA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtwcm90b10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBpY2tsZWQuc3RhcnRzd2l0aChwcm90b19oZWFkZXIpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50X29wY29kZShwaWNrbGUuUFJPVE8sIHBpY2tsZWQpLCAwKQogCiAgICAgICAgIG9vYiA9IHByb3RvY29sc1stMV0gKyAxICAgICAjIGEgZnV0dXJlIHByb3RvY29sCisgICAgICAgIGJ1aWxkX25vbmUgPSBwaWNrbGUuTk9ORSArIHBpY2tsZS5TVE9QCiAgICAgICAgIGJhZHBpY2tsZSA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtvb2JdKSArIGJ1aWxkX25vbmUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5sb2FkcyhiYWRwaWNrbGUpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGRldGFpbDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoZGV0YWlsKS5zdGFydHN3aXRoKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sIikpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIsIHN0cihlcnIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBiYWQgcHJvdG9jb2wgbnVtYmVyIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQogCkBAIC04NjgsNyArOTA1LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzEsIHMpLCBwcm90byA+PSAyKQogCiAgICAgZGVmIHRlc3RfbG9uZzQoc2VsZik6CkBAIC04NzYsNyArOTEzLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzQsIHMpLCBwcm90byA+PSAyKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfdHVwbGVzKHNlbGYpOgpAQCAtOTE0LDkgKzk1MSw5IEBACiAgICAgICAgICAgICBmb3IgeCBpbiBhLCBiLCBjLCBkLCBlOgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5LCAocHJvdG8sIHgsIHMsIHkpKQotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW3Byb3RvLCBsZW4oeCldCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbbWluKHByb3RvLCAzKSwgbGVuKHgpXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSkKIAogICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CiAgICAgICAgICMgTWFwIChwcm90bywgc2luZ2xldG9uKSB0byBleHBlY3RlZCBvcGNvZGUuCkBAIC05NDAsOCArOTc3LDggQEAKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGlzIHksIChwcm90bywgeCwgcywgeSkpCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZF9vcGNvZGVbcHJvdG8sIHhdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSwgVHJ1ZSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVttaW4ocHJvdG8sIDMpLCB4XQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGNvZGVfaW5fcGlja2xlKGV4cGVjdGVkLCBzKSkKIAogICAgIGRlZiB0ZXN0X25ld29ial90dXBsZShzZWxmKToKICAgICAgICAgeCA9IE15VHVwbGUoWzEsIDIsIDNdKQpAQCAtOTUwLDggKzk4Nyw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCB0dXBsZSh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9saXN0KHNlbGYpOgogICAgICAgICB4ID0gTXlMaXN0KFsxLCAyLCAzXSkKQEAgLTk2MCw4ICs5OTYsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX2dlbmVyaWMoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CkBAIC05NzIsNiArMTAwNyw3IEBACiAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKICAgICAgICAgICAgICAgICBkZXRhaWwgPSAocHJvdG8sIEMsIEIsIHgsIHksIHR5cGUoeSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KSAjIFhYWCByZXZpc2l0CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCKHgpLCBCKHkpLCBkZXRhaWwpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fZGljdF9fLCB5Ll9fZGljdF9fLCBkZXRhaWwpCiAKQEAgLTEwMTAsMTEgKzEwNDYsMTAgQEAKICAgICAgICAgICAgIHMxID0gc2VsZi5kdW1wcyh4LCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihfX25hbWVfXy5lbmNvZGUoInV0Zi04IiksIHMxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIk15TGlzdCIsIHMxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczEpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSkKIAogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgICAgICMgRHVtcCB1c2luZyBwcm90b2NvbCAyIGZvciB0ZXN0LgogICAgICAgICAgICAgczIgPSBzZWxmLmR1bXBzKHgsIDIpCkBAIC0xMDIzLDkgKzEwNTgsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczIpLCBUcnVlLCByZXByKHMyKSkKIAogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCi0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGUucmVzdG9yZSgpCiAKQEAgLTEwNDksNyArMTA4Miw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FwcGVuZHMsIHByb3RvID4gMCkKIApAQCAtMTA1OCw3ICsxMDkxLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9hcHBlbmRzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BUFBFTkRTLCBzKQogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCAwKQpAQCAtMTA3Miw3ICsxMTA1LDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9zZXRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuU0VUSVRFTVMsIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgcHJvdG8gPiAwKQogCkBAIC0xMDgxLDIyICsxMTE0LDQ5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgMCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9zZXRpdGVtcyA+PSAyKQogCisgICAgZGVmIHRlc3Rfc2V0X2NodW5raW5nKHNlbGYpOgorICAgICAgICBuID0gMTAgICMgdG9vIHNtYWxsIHRvIGNodW5rCisgICAgICAgIHggPSBzZXQocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICBudW1fYWRkaXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFERElURU1TLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMSkKKworICAgICAgICBuID0gMjUwMCAgIyBleHBlY3QgYXQgbGVhc3QgdHdvIGNodW5rcyB3aGVuIHByb3RvID49IDQKKyAgICAgICAgeCA9IHNldChyYW5nZShuKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgIG51bV9hZGRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuQURESVRFTVMsIHMpCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9hZGRpdGVtcywgMikKKwogICAgIGRlZiB0ZXN0X3NpbXBsZV9uZXdvYmooc2VsZik6CiAgICAgICAgIHggPSBvYmplY3QuX19uZXdfXyhTaW1wbGVOZXdPYmopICAjIGF2b2lkIF9faW5pdF9fCiAgICAgICAgIHguYWJjID0gNjY2CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwgcHJvdG8gPj0gMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA8PSBwcm90byA8IDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSl9FWCwgcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvID49IDQpCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKSAgICMgd2lsbCByYWlzZSBUeXBlRXJyb3IgaWYgX19pbml0X18gY2FsbGVkCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYWJjLCA2NjYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdF9zbG90cyhzZWxmKToKICAgICAgICAgeCA9IFNsb3RMaXN0KFsxLCAyLCAzXSkKQEAgLTExMDQsMTAgKzExNjQsNyBAQAogICAgICAgICB4LmJhciA9ICJoZWxsbyIKICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgMikKICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYmFyLCB5LmJhcikKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX292ZXJyaWRlc19kZWZhdWx0X3JlZHVjZV9leChzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKQEAgLTExNTYsMTEgKzEyMTMsMTAgQEAKIAogICAgIEBub190cmFjaW5nCiAgICAgZGVmIHRlc3RfYmFkX2dldGF0dHIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzM1MTQ6IGNyYXNoIHdoZW4gdGhlcmUgaXMgYW4gaW5maW5pdGUgbG9vcCBpbiBfX2dldGF0dHJfXwogICAgICAgICB4ID0gQmFkR2V0YXR0cigpCi0gICAgICAgIGZvciBwcm90byBpbiAwLCAxOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmR1bXBzLCB4LCBwcm90bykKLSAgICAgICAgIyBwcm90b2NvbCAyIGRvbid0IHJhaXNlIGEgUnVudGltZUVycm9yLgotICAgICAgICBkID0gc2VsZi5kdW1wcyh4LCAyKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX2JhZF9pdGVyYXRvcihzZWxmKToKICAgICAgICAgIyBJc3N1ZTQxNzY6IGNyYXNoIHdoZW4gNHRoIGFuZCA1dGggaXRlbXMgb2YgX19yZWR1Y2VfXygpCkBAIC0xMTkzLDExICsxMjQ5LDEwIEBACiAgICAgICAgIG9iaiA9IFtkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpXQogCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCi0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgcHJvdG9jb2wgJWQ6ICVyICE9ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwcm90bywgb2JqLCBsb2FkZWQpKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KG9iaiwgbG9hZGVkKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX25hbWVfaW50ZXJuaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhdHRyaWJ1dGUgbmFtZXMgb2YgcGlja2xlZCBvYmplY3RzIGFyZSBpbnRlcm5lZCB3aGVuCkBAIC0xMjY4LDExICsxMzIzLDE0IEBACiAgICAgZGVmIHRlc3RfaW50X3BpY2tsaW5nX2VmZmljaWVuY3koc2VsZik6CiAgICAgICAgICMgVGVzdCBjb21wYWNpdHkgb2YgaW50IHJlcHJlc2VudGF0aW9uIChzZWUgaXNzdWUgIzEyNzQ0KQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgc2l6ZXMgPSBbbGVuKHNlbGYuZHVtcHMoMioqbiwgcHJvdG8pKSBmb3IgbiBpbiByYW5nZSg3MCldCi0gICAgICAgICAgICAjIHRoZSBzaXplIGZ1bmN0aW9uIGlzIG1vbm90b25pYwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2l6ZXMpLCBzaXplcykKLSAgICAgICAgICAgIGlmIHByb3RvID49IDI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2l6ZXNbLTFdLCAxNCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBwaWNrbGVzID0gW3NlbGYuZHVtcHMoMioqbiwgcHJvdG8pIGZvciBuIGluIHJhbmdlKDcwKV0KKyAgICAgICAgICAgICAgICBzaXplcyA9IGxpc3QobWFwKGxlbiwgcGlja2xlcykpCisgICAgICAgICAgICAgICAgIyB0aGUgc2l6ZSBmdW5jdGlvbiBpcyBtb25vdG9uaWMKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzaXplcyksIHNpemVzKQorICAgICAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIHBpY2tsZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wY29kZV9pbl9waWNrbGUocGlja2xlLkxPTkcsIHApKQogCiAgICAgZGVmIGNoZWNrX25lZ2F0aXZlXzMyYl9iaW5YWFgoc2VsZiwgZHVtcGVkKToKICAgICAgICAgaWYgc3lzLm1heHNpemUgPiAyKiozMjoKQEAgLTEzMDMsNiArMTM2MSwzNSBAQAogICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDAzWFx4MDFceDAwXHgwMFx4MDBhclx4ZmZceGZmXHhmZlx4ZmYuJwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBkdW1wZWQpCiAKKyAgICBkZWYgdGVzdF9iYWRseV9lc2NhcGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgYiJTJ1xcJ1xuLiIpCisKKyAgICBkZWYgdGVzdF9iYWRseV9xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzcxMAorICAgICAgICBiYWRwaWNrbGVzID0gW2IiUydcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1wnIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTIiBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1wnIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTIlwnXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiIlMnICcgXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiICIgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiIlMgJydcbi4iLAorICAgICAgICAgICAgICAgICAgICAgIGInUyAiIlxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MuJ10KKyAgICAgICAgZm9yIHAgaW4gYmFkcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIHNlbGYubG9hZHMsIHApCisKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgZ29vZHBpY2tsZXMgPSBbKGIiUycnXG4uIiwgJycpLAorICAgICAgICAgICAgICAgICAgICAgICAoYidTIiJcbi4nLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiJ1MiXFxuIlxuLicsICdcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAoYiJTJ1xcbidcbi4iLCAnXG4nKV0KKyAgICAgICAgZm9yIHAsIGV4cGVjdGVkIGluIGdvb2RwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBleHBlY3RlZCkKKwogICAgIGRlZiBfY2hlY2tfcGlja2xpbmdfd2l0aF9vcGNvZGUoc2VsZiwgb2JqLCBvcGNvZGUsIHByb3RvKToKICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBwaWNrbGVkKSkKQEAgLTEzMjYsNiArMTQxMywxOTUgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGlja2xpbmdfd2l0aF9vcGNvZGUob2JqLCBwaWNrbGUuU0VUSVRFTVMsIHByb3RvKQogCisgICAgIyBFeGVyY2lzZSBmcmFtaW5nIChwcm90byA+PSA0KSBmb3Igc2lnbmlmaWNhbnQgd29ya2xvYWRzCisKKyAgICBGUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNAorCisgICAgZGVmIGNoZWNrX2ZyYW1lX29wY29kZXMoc2VsZiwgcGlja2xlZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgYXJndW1lbnRzIG9mIEZSQU1FIG9wY29kZXMgaW4gYSBwcm90b2NvbCA0KyBwaWNrbGUuCisgICAgICAgICIiIgorICAgICAgICBmcmFtZV9vcGNvZGVfc2l6ZSA9IDkKKyAgICAgICAgbGFzdF9hcmcgPSBsYXN0X3BvcyA9IE5vbmUKKyAgICAgICAgZm9yIG9wLCBhcmcsIHBvcyBpbiBwaWNrbGV0b29scy5nZW5vcHMocGlja2xlZCk6CisgICAgICAgICAgICBpZiBvcC5uYW1lICE9ICdGUkFNRSc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxhc3RfcG9zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgVGhlIHByZXZpb3VzIGZyYW1lJ3Mgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG51bWJlcgorICAgICAgICAgICAgICAgICMgb2YgYnl0ZXMgdXAgdG8gdGhlIGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICAgICAgZnJhbWVfc2l6ZSA9IHBvcyAtIGxhc3RfcG9zIC0gZnJhbWVfb3Bjb2RlX3NpemUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYW1lX3NpemUsIGxhc3RfYXJnKQorICAgICAgICAgICAgbGFzdF9hcmcsIGxhc3RfcG9zID0gYXJnLCBwb3MKKyAgICAgICAgIyBUaGUgbGFzdCBmcmFtZSdzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXAKKyAgICAgICAgIyB0byB0aGUgcGlja2xlJ3MgZW5kLgorICAgICAgICBmcmFtZV9zaXplID0gbGVuKHBpY2tsZWQpIC0gbGFzdF9wb3MgLSBmcmFtZV9vcGNvZGVfc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYW1lX3NpemUsIGxhc3RfYXJnKQorCisgICAgZGVmIHRlc3RfZnJhbWluZ19tYW55X29iamVjdHMoc2VsZik6CisgICAgICAgIG9iaiA9IGxpc3QocmFuZ2UoMTAqKjUpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdW5waWNrbGVkKQorICAgICAgICAgICAgICAgIGJ5dGVzX3Blcl9mcmFtZSA9IChsZW4ocGlja2xlZCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYnl0ZXNfcGVyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUIC8gMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChieXRlc19wZXJfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GUkFNRV9TSVpFX1RBUkdFVCAqIDEpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mcmFtZV9vcGNvZGVzKHBpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9mcmFtaW5nX2xhcmdlX29iamVjdHMoc2VsZik6CisgICAgICAgIE4gPSAxMDI0ICogMTAyNAorICAgICAgICBvYmogPSBbYid4JyAqIE4sIGIneScgKiBOLCBiJ3onICogTl0KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHVucGlja2xlZCkKKyAgICAgICAgICAgICAgICBuX2ZyYW1lcyA9IGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobl9mcmFtZXMsIGxlbihvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZnJhbWVfb3Bjb2RlcyhwaWNrbGVkKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uYWxfZnJhbWVzKHNlbGYpOgorICAgICAgICBpZiBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCA8IDQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkLCBrZWVwX2ZyYW1lPU5vbmUpOgorICAgICAgICAgICAgIiIiUmVtb3ZlIGZyYW1lIG9wY29kZXMgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlLiIiIgorICAgICAgICAgICAgZnJhbWVfc3RhcnRzID0gW10KKyAgICAgICAgICAgICMgMSBieXRlIGZvciB0aGUgb3Bjb2RlIGFuZCA4IGZvciB0aGUgYXJndW1lbnQKKyAgICAgICAgICAgIGZyYW1lX29wY29kZV9zaXplID0gOQorICAgICAgICAgICAgZm9yIG9wY29kZSwgXywgcG9zIGluIHBpY2tsZXRvb2xzLmdlbm9wcyhwaWNrbGVkKToKKyAgICAgICAgICAgICAgICBpZiBvcGNvZGUubmFtZSA9PSAnRlJBTUUnOgorICAgICAgICAgICAgICAgICAgICBmcmFtZV9zdGFydHMuYXBwZW5kKHBvcykKKworICAgICAgICAgICAgbmV3cGlja2xlID0gYnl0ZWFycmF5KCkKKyAgICAgICAgICAgIGxhc3RfZnJhbWVfZW5kID0gMAorICAgICAgICAgICAgZm9yIGksIHBvcyBpbiBlbnVtZXJhdGUoZnJhbWVfc3RhcnRzKToKKyAgICAgICAgICAgICAgICBpZiBrZWVwX2ZyYW1lIGFuZCBrZWVwX2ZyYW1lKGkpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5ld3BpY2tsZSArPSBwaWNrbGVkW2xhc3RfZnJhbWVfZW5kOnBvc10KKyAgICAgICAgICAgICAgICBsYXN0X2ZyYW1lX2VuZCA9IHBvcyArIGZyYW1lX29wY29kZV9zaXplCisgICAgICAgICAgICBuZXdwaWNrbGUgKz0gcGlja2xlZFtsYXN0X2ZyYW1lX2VuZDpdCisgICAgICAgICAgICByZXR1cm4gbmV3cGlja2xlCisKKyAgICAgICAgZnJhbWVfc2l6ZSA9IHNlbGYuRlJBTUVfU0laRV9UQVJHRVQKKyAgICAgICAgbnVtX2ZyYW1lcyA9IDIwCisgICAgICAgIG9iaiA9IFtieXRlcyhbaV0pICogZnJhbWVfc2l6ZSBmb3IgaSBpbiByYW5nZShudW1fZnJhbWVzKV0KKworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisKKyAgICAgICAgICAgIGZyYW1lbGVzc19waWNrbGUgPSByZW1vdmVfZnJhbWVzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIGZyYW1lbGVzc19waWNrbGUpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHNlbGYubG9hZHMoZnJhbWVsZXNzX3BpY2tsZSkpCisKKyAgICAgICAgICAgIHNvbWVfZnJhbWVzX3BpY2tsZSA9IHJlbW92ZV9mcmFtZXMocGlja2xlZCwgbGFtYmRhIGk6IGkgJSAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHNvbWVfZnJhbWVzX3BpY2tsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgcGlja2xlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgc2VsZi5sb2Fkcyhzb21lX2ZyYW1lc19waWNrbGUpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX25hbWVzKHNlbGYpOgorICAgICAgICBnbG9iYWwgTmVzdGVkCisgICAgICAgIGNsYXNzIE5lc3RlZDoKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBvYmogaW4gW05lc3RlZC5BLCBOZXN0ZWQuQS5CLCBOZXN0ZWQuQS5CLkNdOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBvYmo9b2JqKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG9iaiwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9iaiwgdW5waWNrbGVkKQorCisgICAgZGVmIHRlc3RfcHlfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIFB5TWV0aG9kc1Rlc3QKKyAgICAgICAgY2xhc3MgUHlNZXRob2RzVGVzdDoKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBjaGVlc2UoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImNoZWVzZSIKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHdpbmUoY2xzKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgY2xzIGlzIFB5TWV0aG9kc1Rlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gIndpbmUiCisgICAgICAgICAgICBkZWYgYmlzY3VpdHMoc2VsZik6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZiwgUHlNZXRob2RzVGVzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gImJpc2N1aXRzIgorICAgICAgICAgICAgY2xhc3MgTmVzdGVkOgorICAgICAgICAgICAgICAgICJOZXN0ZWQgY2xhc3MiCisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBrZXRjaHVwKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2V0Y2h1cCIKKyAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgbWFwbGUoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNscyBpcyBQeU1ldGhvZHNUZXN0Lk5lc3RlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1hcGxlIgorICAgICAgICAgICAgICAgIGRlZiBwaWUoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYsIFB5TWV0aG9kc1Rlc3QuTmVzdGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBpZSIKKworICAgICAgICBweV9tZXRob2RzID0gKAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5jaGVlc2UsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0LndpbmUsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0KCkuYmlzY3VpdHMsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0Lk5lc3RlZC5rZXRjaHVwLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQubWFwbGUsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0Lk5lc3RlZCgpLnBpZQorICAgICAgICApCisgICAgICAgIHB5X3VuYm91bmRfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgIChQeU1ldGhvZHNUZXN0LmJpc2N1aXRzLCBQeU1ldGhvZHNUZXN0KSwKKyAgICAgICAgICAgIChQeU1ldGhvZHNUZXN0Lk5lc3RlZC5waWUsIFB5TWV0aG9kc1Rlc3QuTmVzdGVkKQorICAgICAgICApCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiBweV9tZXRob2RzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZCgpLCB1bnBpY2tsZWQoKSkKKyAgICAgICAgICAgIGZvciBtZXRob2QsIGNscyBpbiBweV91bmJvdW5kX21ldGhvZHM6CisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2Qob2JqKSwgdW5waWNrbGVkKG9iaikpCisKKworICAgIGRlZiB0ZXN0X2NfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIFN1YmNsYXNzCisgICAgICAgIGNsYXNzIFN1YmNsYXNzKHR1cGxlKToKKyAgICAgICAgICAgIGNsYXNzIE5lc3RlZChzdHIpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjX21ldGhvZHMgPSAoCisgICAgICAgICAgICAjIGJvdW5kIGJ1aWx0LWluIG1ldGhvZAorICAgICAgICAgICAgKCJhYmNkIi5pbmRleCwgKCJjIiwpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCBidWlsdC1pbiBtZXRob2QKKyAgICAgICAgICAgIChzdHIuaW5kZXgsICgiYWJjZCIsICJjIikpLAorICAgICAgICAgICAgIyBib3VuZCAic2xvdCIgbWV0aG9kCisgICAgICAgICAgICAoWzEsIDIsIDNdLl9fbGVuX18sICgpKSwKKyAgICAgICAgICAgICMgdW5ib3VuZCAic2xvdCIgbWV0aG9kCisgICAgICAgICAgICAobGlzdC5fX2xlbl9fLCAoWzEsIDIsIDNdLCkpLAorICAgICAgICAgICAgIyBib3VuZCAiY29leGlzdCIgbWV0aG9kCisgICAgICAgICAgICAoezEsIDJ9Ll9fY29udGFpbnNfXywgKDIsKSksCisgICAgICAgICAgICAjIHVuYm91bmQgImNvZXhpc3QiIG1ldGhvZAorICAgICAgICAgICAgKHNldC5fX2NvbnRhaW5zX18sICh7MSwgMn0sIDIpKSwKKyAgICAgICAgICAgICMgYnVpbHQtaW4gY2xhc3MgbWV0aG9kCisgICAgICAgICAgICAoZGljdC5mcm9ta2V5cywgKCgiYSIsIDEpLCAoImIiLCAyKSkpLAorICAgICAgICAgICAgIyBidWlsdC1pbiBzdGF0aWMgbWV0aG9kCisgICAgICAgICAgICAoYnl0ZWFycmF5Lm1ha2V0cmFucywgKGIiYWJjIiwgYiJ4eXoiKSksCisgICAgICAgICAgICAjIHN1YmNsYXNzIG1ldGhvZHMKKyAgICAgICAgICAgIChTdWJjbGFzcyhbMSwyLDJdKS5jb3VudCwgKDIsKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuY291bnQsIChTdWJjbGFzcyhbMSwyLDJdKSwgMikpLAorICAgICAgICAgICAgKFN1YmNsYXNzLk5lc3RlZCgic3dlZXQiKS5jb3VudCwgKCJlIiwpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5OZXN0ZWQuY291bnQsIChTdWJjbGFzcy5OZXN0ZWQoInN3ZWV0IiksICJlIikpLAorICAgICAgICApCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIG1ldGhvZCwgYXJncyBpbiBjX21ldGhvZHM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIG1ldGhvZD1tZXRob2QpOgorICAgICAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMobWV0aG9kLCBwcm90bykpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWV0aG9kKCphcmdzKSwgdW5waWNrbGVkKCphcmdzKSkKKwogCiBjbGFzcyBCaWdtZW1QaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTEzMzgsOCArMTYxNCw5IEBACiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTM1NCwyNCArMTYzMSw0NCBAQAogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDM6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IChwaWNrbGUuQklOQllURVMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8SSIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKICAgICBAYmlnbWVtdGVzdChzaXplPV80RywgbWVtdXNlPTEgKyAxLCBkcnlfcnVuPUZhbHNlKQogICAgIGRlZiB0ZXN0X2h1Z2VfYnl0ZXNfNjRiKHNlbGYsIHNpemUpOgotICAgICAgICBkYXRhID0gYiJhIiAqIHNpemUKKyAgICAgICAgZGF0YSA9IGIiYWNiZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgMzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgICAgICBpZiBwcm90byA9PSAzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQcm90b2NvbCAzIGRvZXMgbm90IHN1cHBvcnQgbGFyZ2UgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgd2UgZG8gbm90IGNyYXNoIHdoZW4gcHJvY2Vzc2luZyBvbmUuCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5CWVRFUzggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8USIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChkYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTEzODMsMjcgKzE2ODAsNTIgQEAKICAgICAgICAgZGF0YSA9ICJhYmNkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFs6MTVdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWy0xNTpdKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gKHBpY2tsZS5CSU5VTklDT0RFICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPEkiLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zdGFydCA9IHBpY2tsZWQuaW5kZXgoYidhYmNkJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWRbZGF0YV9zdGFydC1sZW4oaGVhZGVyKTpkYXRhX3N0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHBpY2tsZWQucmluZGV4KGIiYWJjZCIpICsgbGVuKGIiYWJjZCIpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQuaW5kZXgoYiJhYmNkIikpLCBsZW4oZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAotICAgICMgQklOVU5JQ09ERSAocHJvdG9jb2xzIDEsIDIgYW5kIDMpIGNhbm5vdCBjYXJyeSBtb3JlIHRoYW4KLSAgICAjIDIqKjMyIC0gMSBieXRlcyBvZiB1dGYtOCBlbmNvZGVkIHVuaWNvZGUuCisgICAgIyBCSU5VTklDT0RFIChwcm90b2NvbHMgMSwgMiBhbmQgMykgY2Fubm90IGNhcnJ5IG1vcmUgdGhhbiAyKiozMiAtIDEgYnl0ZXMKKyAgICAjIG9mIHV0Zi04IGVuY29kZWQgdW5pY29kZS4gQklOVU5JQ09ERTggKHByb3RvY29sIDQpIHN1cHBvcnRzIHRoZXNlIGh1Z2UKKyAgICAjIHVuaWNvZGUgc3RyaW5ncyBob3dldmVyLgogCi0gICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT0xICsgYXNjaWlfY2hhcl9zaXplLCBkcnlfcnVuPUZhbHNlKQorICAgIEBiaWdtZW10ZXN0KHNpemU9XzRHLCBtZW11c2U9MiArIGFzY2lpX2NoYXJfc2l6ZSwgZHJ5X3J1bj1GYWxzZSkKICAgICBkZWYgdGVzdF9odWdlX3N0cl82NGIoc2VsZiwgc2l6ZSk6Ci0gICAgICAgIGRhdGEgPSAiYSIgKiBzaXplCisgICAgICAgIGRhdGEgPSAiYWJjZCIgKiAoc2l6ZSAvLyA0KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgICAgIGlmIHByb3RvID09IDA6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IChwaWNrbGUuQklOVU5JQ09ERTggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8USIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChiJ2FiY2QnKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgocGlja2xlZC5yaW5kZXgoYiJhYmNkIikgKyBsZW4oYiJhYmNkIikgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZC5pbmRleChiImFiY2QiKSksIGxlbihkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCkBAIC0xNDQ3LDggKzE3NjksOCBAQAogICAgICAgICByZXR1cm4gb2JqZWN0Ll9fcmVkdWNlX18oc2VsZikKIAogY2xhc3MgUkVYX3NpeChvYmplY3QpOgotICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNHRoIGFyZ3VtZW50IChsaXN0IGl0ZXJhdG9yKSBvZiB0aGUgcmVkdWNlCi0gICAgcHJvdG9jb2wuCisgICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA0dGggYXJndW1lbnQgKGxpc3QgaXRlcmF0b3IpIG9mCisgICAgdGhlIHJlZHVjZSBwcm90b2NvbC4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbXM9Tm9uZSk6CiAgICAgICAgIHNlbGYuaXRlbXMgPSBpdGVtcyBpZiBpdGVtcyBpcyBub3QgTm9uZSBlbHNlIFtdCkBAIC0xNDYwLDggKzE3ODIsOCBAQAogICAgICAgICByZXR1cm4gdHlwZShzZWxmKSwgKCksIE5vbmUsIGl0ZXIoc2VsZi5pdGVtcyksIE5vbmUKIAogY2xhc3MgUkVYX3NldmVuKG9iamVjdCk6Ci0gICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA1dGggYXJndW1lbnQgKGRpY3QgaXRlcmF0b3IpIG9mIHRoZSByZWR1Y2UKLSAgICBwcm90b2NvbC4KKyAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDV0aCBhcmd1bWVudCAoZGljdCBpdGVyYXRvcikgb2YKKyAgICB0aGUgcmVkdWNlIHByb3RvY29sLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZT1Ob25lKToKICAgICAgICAgc2VsZi50YWJsZSA9IHRhYmxlIGlmIHRhYmxlIGlzIG5vdCBOb25lIGVsc2Uge30KQEAgLTE0OTksMTAgKzE4MjEsMTYgQEAKIGNsYXNzIE15RGljdChkaWN0KToKICAgICBzYW1wbGUgPSB7ImEiOiAxLCAiYiI6IDJ9CiAKK2NsYXNzIE15U2V0KHNldCk6CisgICAgc2FtcGxlID0geyJhIiwgImIifQorCitjbGFzcyBNeUZyb3plblNldChmcm96ZW5zZXQpOgorICAgIHNhbXBsZSA9IGZyb3plbnNldCh7ImEiLCAiYiJ9KQorCiBteWNsYXNzZXMgPSBbTXlJbnQsIE15RmxvYXQsCiAgICAgICAgICAgICAgTXlDb21wbGV4LAogICAgICAgICAgICAgIE15U3RyLCBNeVVuaWNvZGUsCi0gICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3RdCisgICAgICAgICAgICAgTXlUdXBsZSwgTXlMaXN0LCBNeURpY3QsIE15U2V0LCBNeUZyb3plblNldF0KIAogCiBjbGFzcyBTbG90TGlzdChNeUxpc3QpOgpAQCAtMTUxMiw2ICsxODQwLDggQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYiwgYyk6CiAgICAgICAgICMgcmFpc2UgYW4gZXJyb3IsIHRvIG1ha2Ugc3VyZSB0aGlzIGlzbid0IGNhbGxlZAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlNpbXBsZU5ld09iai5fX2luaXRfXygpIGRpZG4ndCBleHBlY3QgdG8gZ2V0IGNhbGxlZCIpCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fZGljdF9fID09IG90aGVyLl9fZGljdF9fCiAKIGNsYXNzIEJhZEdldGF0dHI6CiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGtleSk6CkBAIC0xNTQ4LDcgKzE4NzgsNyBAQAogCiAgICAgZGVmIHRlc3RfaGlnaGVzdF9wcm90b2NvbChzZWxmKToKICAgICAgICAgIyBPZiBjb3Vyc2UgdGhpcyBuZWVkcyB0byBiZSBjaGFuZ2VkIHdoZW4gSElHSEVTVF9QUk9UT0NPTCBjaGFuZ2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MLCA0KQogCiAgICAgZGVmIHRlc3RfY2FsbGFwaShzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQpAQCAtMTczMywyMiArMjA2MywyMyBAQAogCiAgICAgZGVmIF9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhzZWxmLCBpb2NsYXNzKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIGRhdGExID0gWyh4LCBzdHIoeCkpIGZvciB4IGluIHJhbmdlKDIwMDApXSArIFtiImFiY2RlIiwgbGVuXQotICAgICAgICAgICAgZiA9IGlvY2xhc3MoKQotICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKLSAgICAgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKLSAgICAgICAgICAgIHBpY2tsZWQgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBkYXRhMSA9IFsoeCwgc3RyKHgpKSBmb3IgeCBpbiByYW5nZSgyMDAwKV0gKyBbYiJhYmNkZSIsIGxlbl0KKyAgICAgICAgICAgICAgICBmID0gaW9jbGFzcygpCisgICAgICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTEpCisgICAgICAgICAgICAgICAgcGlja2xlZCA9IGYuZ2V0dmFsdWUoKQogCi0gICAgICAgICAgICBOID0gNQotICAgICAgICAgICAgZiA9IGlvY2xhc3MocGlja2xlZCAqIE4pCi0gICAgICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVyLmxvYWQoKSwgZGF0YTEpCi0gICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwb3MgKyBsZW4ocGlja2xlZCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgdW5waWNrbGVyLmxvYWQpCisgICAgICAgICAgICAgICAgTiA9IDUKKyAgICAgICAgICAgICAgICBmID0gaW9jbGFzcyhwaWNrbGVkICogTikKKyAgICAgICAgICAgICAgICB1bnBpY2tsZXIgPSBzZWxmLnVucGlja2xlcl9jbGFzcyhmKQorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQorICAgICAgICAgICAgICAgICAgICBpZiBmLnNlZWthYmxlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwb3MgKyBsZW4ocGlja2xlZCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVucGlja2xlci5sb2FkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfdW5waWNrbGluZ3Nfc2Vla2FibGUoc2VsZik6CiAgICAgICAgIHNlbGYuX2NoZWNrX211bHRpcGxlX3VucGlja2xpbmdzKGlvLkJ5dGVzSU8pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMWYzZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5Y2FrZXkucGVtIGIvTGliL3Rlc3QvcHljYWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2ZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFEbjN1bmpESjhBdHFIOQorSzF1VzBtL000TDZHdVNCZTdBTjZWYXZxcE9uNVNZWFNadFh0eDNycVZvNHRqK2RDNG1Jb3FaL1dHNDdydGJTYworbnhTcjMrYVVpM1lkUG0wa1llME12d0NLWVF6ZlhNZzJjeFlBelVlNmJhU2tkSWlESXdvWi9BbW5QRXBMMCtjZAorTGVUcVRGUWg4eWJiaVRjWTFBSzdRREpmcFA4dEhQZlV1K3lPejF5Q3JPWjhDR3hJaFdFSGZ5WGdYT0M4TkYvZwordVFSSGRjaEhDNDI4MXNob1h6T0RZdElnUkRXeHJZRWFpczI4TmJCY2kwZldHT21jR0pmTUFUd3B6T2dlNU9UQgordU43bndoRVloMXFUTk5pbUpmY1VjZXZrSWFMU0R5NHUxR0lBTmRQVzcxeGdTMHlwRk9MZEZWaEdOek1tdCtjdQorWGUxQzVNVk5BZ01CQUFFQ2dnRUJBSlBNN1F1VXJQbjRjTE4vWXNkMTVsd1RXbjlvSERGRmdrWUZ2Q3M2NmdYRQoranUvNkt4MkJqV0U0d1RKYnkwOUFITS9NcUIwRHZndVQ3TWYxUTJqM3RQUTFIWm93ZzhPd1JEbGV1d3A2S0lscworakJiaEwwSmRsLzVIQzY3a3RXdlo5d052Ty93RkcxclFmVDZGVmFqZjlMVWJXRWFTWmJPRzJTTGhIZnNIb3J6dQoreGpUSmFJM2JRLzArNzlCMWV4d2s1cnV3aHpGUmQvWHBZOGhsczdEL1JmUEl1SERsQmdoa1czTjU5S0ZXcmY1aAorNmJORWgyVEhtMCtJeUdjR3FzMEZEK1FDT1h5dnNqd1NVc3dxcnIyY3RMUkVPZURjZDVSZVVqU3hZZ2pjSlJybQorSjdjZUlZLyt1d0RKeHcvT2xubUJ2RjZwUU1rS3dZVzJnRnp0dStnMnQ0VUNnWUVBLzl5bzAxRXh6NGNyeFhzeQordEFsbkRKTSsrblpjbTA3cnRGalRLSFVmS1kvY0NnTlRhOHVkTTBzdm5md2xpZC9kcGdMc0kzOGd4MDRISEMxaQorRVo0YWN6K1RvSVdlZEx4TTBucTczLy94ZVJXRWF6T3ZDejFtTVRaYU1sZGFoVFdBeXpOOHFWSzJCLzYyNVl5NAord05ZV3l3ZUJCd0VCOE16YUNzNzNzcGtzWE9zQ2dZRUE1Lzd3dmhpb2ZZR0ZBZk11QU5lSkl3REwyT3RCbm9PdgorbVZOZkNtaTNHQzM4Znp3eWk1WnBza1dEaVMyd29KK0xRZnM5UXU0RWNaYlVGTGQ3Z2JlT3ZiNWdtRlV0WW9wZQorTGl0VVVLdW5JUjE4TWtRK21RREJwUVBRUGhrNFFKUDVyZUNiV2tyZlR1N2I1by9pUzQxczZmQlRGbXV6aExjVAorQzcxdkZkQ3llS2NDZ1lBaUNDcVllT3RFTERtQk9lTERtYUNRUnFHUTFOOTZkT1BiQ0JtRi94WVhCQ0NEWUcvZgorSGFVYUpuejk2WVRnc3RzYmNyWVAvcC9RZ3F0bGJ3L2xRZjlJcHdNdXpiY0cxZWp0OGc4OU95RFdOeXQyeXRnVQoraWFVbkZKQ29zMy9CeWgwSWFoL0JzZE91ZW8yL09KbDJaTU9CVzgwb3JsU2d2ODZjczJ5MDM3VEw0d0tCZ1FEbQorT095VytNbGJvd2huSXZmb0Jmd2xMRWtlZm5lajRuS0Q2V1JMWkJjdWU1UXlmMzU1WDA2TWhzYzlmb1hsSCs2RworRDloL2Jzd2lITmRocDZOODJyZGdQR2lIUXgvQ3hpVW9FLytiL252Z05PNW13NnFMRTJFWGJHMWU4cEFNSmN5RQorYkh3K1lrYXdnZ0RmRUxJMDM2ZlJqNWdraThTZVV6OG5TMW5OZ0VsYnlRS0JnQ1JEWDlKaCtNd1NMdTRRQldkdAorL2ZpK2x2M0s2a3VuL2ZJN0VPVjF2Q1Yvajg3MXRJQ3U3cHU1QnJPTHhBSHFvVmZVOUFVWDI5OS8yS2pDYjVwdgora2pvZ2lVSzZxV0NXQmxmdXFETldHQ29VR3Qxcmh6blV2YTBuTmpTTXk1cmluQmhoanBST1pDMnB3NDhsT2x1UAorVXV2WHNhUHBoN0dUcVB1eTRLYWIxMllDCistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IGFlNjJjNmUuLmMxYzgzMWYgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0xLDExICsxLDE4IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKLVVzYWdlOgorU2NyaXB0IHRvIHJ1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAorUnVuIHRoaXMgc2NyaXB0IHdpdGggLWggb3IgLS1oZWxwIGZvciBkb2N1bWVudGF0aW9uLgorIiIiCisKK1VTQUdFID0gIiIiXAogcHl0aG9uIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCiBweXRob24gcGF0aC90by9MaWIvdGVzdC9yZWdydGVzdC5weSBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KKyIiIgogCitERVNDUklQVElPTiA9ICIiIlwKK1J1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAogSWYgbm8gYXJndW1lbnRzIG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBmaW5kcyBhbGwgZmlsZXMgbWF0Y2hpbmcKIHRoZSBwYXR0ZXJuICJ0ZXN0XyoiIGluIHRoZSBMaWIvdGVzdCBzdWJkaXJlY3RvcnkgYW5kIHJ1bnMKQEAgLTE1LDYzICsyMiwxMCBAQAogY29tbWFuZCBsaW5lOgogCiBweXRob24gLUUgLVdkIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIC4uLl0KKyIiIgogCi0KLU9wdGlvbnM6Ci0KLS1oLy0taGVscCAgICAgICAtLSBwcmludCB0aGlzIHRleHQgYW5kIGV4aXQKLS0tdGltZW91dCBUSU1FT1VUCi0gICAgICAgICAgICAgICAgLS0gZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyBtb3JlCi0gICAgICAgICAgICAgICAgICAgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgaXMgbmVnYXRpdmUKLSAgICAgICAgICAgICAgICAgICBvciBlcXVhbHMgdG8gemVybwotLS13YWl0ICAgICAgICAgIC0tIHdhaXQgZm9yIHVzZXIgaW5wdXQsIGUuZy4sIGFsbG93IGEgZGVidWdnZXIgdG8gYmUgYXR0YWNoZWQKLQotVmVyYm9zaXR5Ci0KLS12Ly0tdmVyYm9zZSAgICAtLSBydW4gdGVzdHMgaW4gdmVyYm9zZSBtb2RlIHdpdGggb3V0cHV0IHRvIHN0ZG91dAotLXcvLS12ZXJib3NlMiAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlCi0tVy8tLXZlcmJvc2UzICAgLS0gZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlCi0tZC8tLWRlYnVnICAgICAgLS0gcHJpbnQgdHJhY2ViYWNrIGZvciBmYWlsZWQgdGVzdHMKLS1xLy0tcXVpZXQgICAgICAtLSBubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwKLS1vLy0tc2xvdyAgICAgICAtLSBwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cwotICAgLS1oZWFkZXIgICAgIC0tIHByaW50IGhlYWRlciB3aXRoIGludGVycHJldGVyIGluZm8KLQotU2VsZWN0aW5nIHRlc3RzCi0KLS1yLy0tcmFuZG9taXplICAtLSByYW5kb21pemUgdGVzdCBleGVjdXRpb24gb3JkZXIgKHNlZSBiZWxvdykKLSAgIC0tcmFuZHNlZWQgICAtLSBwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgcmFuZG9tIHJ1bgotLWYvLS1mcm9tZmlsZSAgIC0tIHJlYWQgbmFtZXMgb2YgdGVzdHMgdG8gcnVuIGZyb20gYSBmaWxlIChzZWUgYmVsb3cpCi0teC8tLWV4Y2x1ZGUgICAgLS0gYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSoKLS1zLy0tc2luZ2xlICAgICAtLSBzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzIChzZWUgYmVsb3cpCi0tbS8tLW1hdGNoIFBBVCAgLS0gbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQKLS1HLy0tZmFpbGZhc3QgICAtLSBmYWlsIGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzIChvbmx5IHdpdGggLXYgb3IgLVcpCi0tdS8tLXVzZSBSRVMxLFJFUzIsLi4uCi0gICAgICAgICAgICAgICAgLS0gc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyB0byBydW4KLS1NLy0tbWVtbGltaXQgTElNSVQKLSAgICAgICAgICAgICAgICAtLSBydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzCi0gICAtLXRlc3RkaXIgRElSCi0gICAgICAgICAgICAgICAgLS0gZXhlY3V0ZSB0ZXN0IGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5IChpbnN0ZWFkCi0gICAgICAgICAgICAgICAgICAgb2YgdGhlIFB5dGhvbiBzdGRsaWIgdGVzdCBzdWl0ZSkKLQotU3BlY2lhbCBydW5zCi0KLS1sLy0tZmluZGxlYWtzICAtLSBpZiBHQyBpcyBhdmFpbGFibGUgZGV0ZWN0IHRlc3RzIHRoYXQgbGVhayBtZW1vcnkKLS1MLy0tcnVubGVha3MgICAtLSBydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdAotLVIvLS1odW50cmxlYWtzIFJVTkNPVU5UUwotICAgICAgICAgICAgICAgIC0tIHNlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgdi4gc2xvdykKLS1qLy0tbXVsdGlwcm9jZXNzIFBST0NFU1NFUwotICAgICAgICAgICAgICAgIC0tIHJ1biBQUk9DRVNTRVMgcHJvY2Vzc2VzIGF0IG9uY2UKLS1ULy0tY292ZXJhZ2UgICAtLSB0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgbW9kdWxlCi0tRC8tLWNvdmVyZGlyIERJUkVDVE9SWQotICAgICAgICAgICAgICAgIC0tIERpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0Ci0tTi8tLW5vY292ZXJkaXIgLS0gUHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzCi0tdC8tLXRocmVzaG9sZCBUSFJFU0hPTEQKLSAgICAgICAgICAgICAgICAtLSBjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKQotLW4vLS1ub3dpbmRvd3MgIC0tIHN1cHByZXNzIGVycm9yIG1lc3NhZ2UgYm94ZXMgb24gV2luZG93cwotLUYvLS1mb3JldmVyICAgIC0tIHJ1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gZXJyb3IgaGFwcGVucwotCi0KLUFkZGl0aW9uYWwgT3B0aW9uIERldGFpbHM6CitFUElMT0cgPSAiIiJcCitBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzOgogCiAtciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGEKIGludCBzZWVkIHZhbHVlIGZvciB0aGUgcmFuZG9taXplcjsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIHRyb3VibGVzb21lCkBAIC0xNjgsMTEgKzEyMiwxMiBAQAogIyBXZSBpbXBvcnQgaW1wb3J0bGliICpBU0FQKiBpbiBvcmRlciB0byB0ZXN0ICMxNTM4NgogaW1wb3J0IGltcG9ydGxpYgogCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IGdldG9wdAogaW1wb3J0IGlvCiBpbXBvcnQganNvbgoraW1wb3J0IGxvY2FsZQogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCkBAIC0xOTQsNyArMTQ5LDcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiB0cnk6Ci0gICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCisgICAgaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcsIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gTm9uZQogCkBAIC0yNDYsMjAgKzIwMSwyNjIgQEAKIFJFU09VUkNFX05BTUVTID0gKCdhdWRpbycsICdjdXJzZXMnLCAnbGFyZ2VmaWxlJywgJ25ldHdvcmsnLAogICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJykKIAotVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCisjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisjIHRvIGtlZXAgdGhlIHRlc3QgZmlsZXMgaW4gYSBzdWJmb2xkZXIuICBUaGlzIGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCisjIGZpbGVzIHVzaW5nIHRoZSAibWFrZSBkaXN0Y2xlYW4iIGNvbW1hbmQuCitpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgVEVNUERJUiA9IG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpLCAnYnVpbGQnKQorZWxzZToKKyAgICBURU1QRElSID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCitURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKFRFTVBESVIpCiAKLWRlZiB1c2FnZShtc2cpOgotICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgIHByaW50KCJVc2UgLS1oZWxwIGZvciB1c2FnZSIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICBzeXMuZXhpdCgyKQorY2xhc3MgX0FyZ1BhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CiAKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHN1cGVyKCkuZXJyb3IobWVzc2FnZSArICJcblBhc3MgLWggb3IgLS1oZWxwIGZvciBjb21wbGV0ZSBoZWxwLiIpCiAKLWRlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKK2RlZiBfY3JlYXRlX3BhcnNlcigpOgorICAgICMgU2V0IHByb2cgdG8gcHJldmVudCB0aGUgdW5pbmZvcm1hdGl2ZSAiX19tYWluX18ucHkiIGZyb20gZGlzcGxheWluZyBpbgorICAgICMgZXJyb3IgbWVzc2FnZXMgd2hlbiB1c2luZyAicHl0aG9uIC1tIHRlc3QgLi4uIi4KKyAgICBwYXJzZXIgPSBfQXJnUGFyc2VyKHByb2c9J3JlZ3J0ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlPVVTQUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249REVTQ1JJUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICBlcGlsb2c9RVBJTE9HLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkX2hlbHA9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyKQorCisgICAgIyBBcmd1bWVudHMgd2l0aCB0aGlzIGNsYXVzZSBhZGRlZCB0byBpdHMgaGVscCBhcmUgZGVzY3JpYmVkIGZ1cnRoZXIgaW4KKyAgICAjIHRoZSBlcGlsb2cncyAiQWRkaXRpb25hbCBvcHRpb24gZGV0YWlscyIgc2VjdGlvbi4KKyAgICBtb3JlX2RldGFpbHMgPSAnICBTZWUgdGhlIHNlY3Rpb24gYXQgYm90dG9tIGZvciBtb3JlIGRldGFpbHMuJworCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdHZW5lcmFsIG9wdGlvbnMnKQorICAgICMgV2UgYWRkIGhlbHAgZXhwbGljaXRseSB0byBjb250cm9sIHdoYXQgYXJndW1lbnQgZ3JvdXAgaXQgcmVuZGVycyB1bmRlci4KKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1oJywgJy0taGVscCcsIGFjdGlvbj0naGVscCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS10aW1lb3V0JywgbWV0YXZhcj0nVElNRU9VVCcsIHR5cGU9ZmxvYXQsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkdW1wIHRoZSB0cmFjZWJhY2sgYW5kIGV4aXQgaWYgYSB0ZXN0IHRha2VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vcmUgdGhhbiBUSU1FT1VUIHNlY29uZHM7IGRpc2FibGVkIGlmIFRJTUVPVVQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMgbmVnYXRpdmUgb3IgZXF1YWxzIHRvIHplcm8nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS13YWl0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nd2FpdCBmb3IgdXNlciBpbnB1dCwgZS5nLiwgYWxsb3cgYSBkZWJ1Z2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGJlIGF0dGFjaGVkJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tc2xhdmVhcmdzJywgbWV0YXZhcj0nQVJHUycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUycsICctLXN0YXJ0JywgbWV0YXZhcj0nU1RBUlQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0aGUgbmFtZSBvZiB0aGUgdGVzdCBhdCB3aGljaCB0byBzdGFydC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1ZlcmJvc2l0eScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J2NvdW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnLCAnLS12ZXJib3NlMicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1XJywgJy0tdmVyYm9zZTMnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXEnLCAnLS1xdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J25vIG91dHB1dCB1bmxlc3Mgb25lIG9yIG1vcmUgdGVzdHMgZmFpbCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbycsICctLXNsb3cnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdwcmludF9zbG93JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1oZWFkZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU2VsZWN0aW5nIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmFuZG9taXplJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXJhbmRzZWVkJywgbWV0YXZhcj0nU0VFRCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3JhbmRvbV9zZWVkJywgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3Bhc3MgYSByYW5kb20gc2VlZCB0byByZXByb2R1Y2UgYSBwcmV2aW91cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JhbmRvbSBydW4nKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mcm9tZmlsZScsIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZS4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsICctLWV4Y2x1ZGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhcmd1bWVudHMgYXJlIHRlc3RzIHRvICpleGNsdWRlKicpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcycsICctLXNpbmdsZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NpbmdsZSBzdGVwIHRocm91Z2ggYSBzZXQgb2YgdGVzdHMuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW0nLCAnLS1tYXRjaCcsIG1ldGF2YXI9J1BBVCcsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J21hdGNoX3Rlc3RzJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nbWF0Y2ggdGVzdCBjYXNlcyBhbmQgbWV0aG9kcyB3aXRoIGdsb2IgcGF0dGVybiBQQVQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUcnLCAnLS1mYWlsZmFzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2ZhaWwgYXMgc29vbiBhcyBhIHRlc3QgZmFpbHMgKG9ubHkgd2l0aCAtdiBvciAtVyknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXUnLCAnLS11c2UnLCBtZXRhdmFyPSdSRVMxLFJFUzIsLi4uJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdhcHBlbmQnLCB0eXBlPXJlc291cmNlc19saXN0LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzcGVjaWZ5IHdoaWNoIHNwZWNpYWwgcmVzb3VyY2UgaW50ZW5zaXZlIHRlc3RzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gcnVuLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTScsICctLW1lbWxpbWl0JywgbWV0YXZhcj0nTElNSVQnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdmVyeSBsYXJnZSBtZW1vcnktY29uc3VtaW5nIHRlc3RzLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tdGVzdGRpcicsIG1ldGF2YXI9J0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2V4ZWN1dGUgdGVzdCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhpbnN0ZWFkIG9mIHRoZSBQeXRob24gc3RkbGliIHRlc3Qgc3VpdGUpJykKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnU3BlY2lhbCBydW5zJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tZmluZGxlYWtzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0naWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1MJywgJy0tcnVubGVha3MnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGhlIGxlYWtzKDEpIGNvbW1hbmQganVzdCBiZWZvcmUgZXhpdC4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctUicsICctLWh1bnRybGVha3MnLCBtZXRhdmFyPSdSVU5DT1VOVFMnLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPWh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3NlYXJjaCBmb3IgcmVmZXJlbmNlIGxlYWtzIChuZWVkcyBkZWJ1ZyBidWlsZCwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJ5IHNsb3cpLicgKyBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctaicsICctLW11bHRpcHJvY2VzcycsIG1ldGF2YXI9J1BST0NFU1NFUycsCisgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9tcCcsIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1UJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd0cmFjZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3R1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZHVsZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRCcsICctLWNvdmVyZGlyJywgbWV0YXZhcj0nRElSJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1yZWxhdGl2ZV9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLU4nLCAnLS1ub2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PU5vbmUsIGRlc3Q9J2NvdmVyZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHV0IGNvdmVyYWdlIGZpbGVzIGFsb25nc2lkZSBtb2R1bGVzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy10JywgJy0tdGhyZXNob2xkJywgbWV0YXZhcj0nVEhSRVNIT0xEJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1pbnQsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2NhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1uJywgJy0tbm93aW5kb3dzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1GJywgJy0tZm9yZXZlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0aGUgc3BlY2lmaWVkIHRlc3RzIGluIGEgbG9vcCwgdW50aWwgYW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvciBoYXBwZW5zJykKKworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2FyZ3MnLCBuYXJncz1hcmdwYXJzZS5SRU1BSU5ERVIsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgcmV0dXJuIHBhcnNlcgorCitkZWYgcmVsYXRpdmVfZmlsZW5hbWUoc3RyaW5nKToKKyAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCisgICAgIyBqb2luIGl0IHdpdGggdGhlIHNhdmVkIENXRCBzbyBpdCBlbmRzIHVwIHdoZXJlIHRoZSB1c2VyIGV4cGVjdHMuCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBzdHJpbmcpCisKK2RlZiBodW50cmxlYWtzKHN0cmluZyk6CisgICAgYXJncyA9IHN0cmluZy5zcGxpdCgnOicpCisgICAgaWYgbGVuKGFyZ3MpIG5vdCBpbiAoMiwgMyk6CisgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKAorICAgICAgICAgICAgJ25lZWRzIDIgb3IgMyBjb2xvbi1zZXBhcmF0ZWQgYXJndW1lbnRzJykKKyAgICBud2FybXVwID0gaW50KGFyZ3NbMF0pIGlmIGFyZ3NbMF0gZWxzZSA1CisgICAgbnRyYWNrZWQgPSBpbnQoYXJnc1sxXSkgaWYgYXJnc1sxXSBlbHNlIDQKKyAgICBmbmFtZSA9IGFyZ3NbMl0gaWYgbGVuKGFyZ3MpID4gMiBhbmQgYXJnc1syXSBlbHNlICdyZWZsb2cudHh0JworICAgIHJldHVybiBud2FybXVwLCBudHJhY2tlZCwgZm5hbWUKKworZGVmIHJlc291cmNlc19saXN0KHN0cmluZyk6CisgICAgdSA9IFt4Lmxvd2VyKCkgZm9yIHggaW4gc3RyaW5nLnNwbGl0KCcsJyldCisgICAgZm9yIHIgaW4gdToKKyAgICAgICAgaWYgciA9PSAnYWxsJyBvciByID09ICdub25lJzoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgciA9IHJbMTpdCisgICAgICAgIGlmIHIgbm90IGluIFJFU09VUkNFX05BTUVTOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ2ludmFsaWQgcmVzb3VyY2U6ICcgKyByKQorICAgIHJldHVybiB1CisKK2RlZiBfcGFyc2VfYXJncyhhcmdzLCAqKmt3YXJncyk6CisgICAgIyBEZWZhdWx0cworICAgIG5zID0gYXJncGFyc2UuTmFtZXNwYWNlKHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwKICAgICAgICAgIGV4Y2x1ZGU9RmFsc2UsIHNpbmdsZT1GYWxzZSwgcmFuZG9taXplPUZhbHNlLCBmcm9tZmlsZT1Ob25lLAogICAgICAgICAgZmluZGxlYWtzPUZhbHNlLCB1c2VfcmVzb3VyY2VzPU5vbmUsIHRyYWNlPUZhbHNlLCBjb3ZlcmRpcj0nY292ZXJhZ2UnLAogICAgICAgICAgcnVubGVha3M9RmFsc2UsIGh1bnRybGVha3M9RmFsc2UsIHZlcmJvc2UyPUZhbHNlLCBwcmludF9zbG93PUZhbHNlLAogICAgICAgICAgcmFuZG9tX3NlZWQ9Tm9uZSwgdXNlX21wPU5vbmUsIHZlcmJvc2UzPUZhbHNlLCBmb3JldmVyPUZhbHNlLAotICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSk6CisgICAgICAgICBoZWFkZXI9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lKQorICAgIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihucywgayk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVyIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB0aGlzIGZ1bmN0aW9uJyAlIGspCisgICAgICAgIHNldGF0dHIobnMsIGssIHYpCisgICAgaWYgbnMudXNlX3Jlc291cmNlcyBpcyBOb25lOgorICAgICAgICBucy51c2VfcmVzb3VyY2VzID0gW10KKworICAgIHBhcnNlciA9IF9jcmVhdGVfcGFyc2VyKCkKKyAgICBwYXJzZXIucGFyc2VfYXJncyhhcmdzPWFyZ3MsIG5hbWVzcGFjZT1ucykKKworICAgIGlmIG5zLnNpbmdsZSBhbmQgbnMuZnJvbWZpbGU6CisgICAgICAgIHBhcnNlci5lcnJvcigiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy50cmFjZToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItVCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLmZpbmRsZWFrczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy51c2VfbXAgYW5kIG5zLm1lbWxpbWl0OgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLmZhaWxmYXN0IGFuZCBub3QgKG5zLnZlcmJvc2Ugb3IgbnMudmVyYm9zZTMpOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1HLy0tZmFpbGZhc3QgbmVlZHMgZWl0aGVyIC12IG9yIC1XIikKKworICAgIGlmIG5zLnF1aWV0OgorICAgICAgICBucy52ZXJib3NlID0gMAorICAgIGlmIG5zLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKKyAgICAgICAgICAgIGlmIG5zLnRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICBucy50aW1lb3V0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IFRoZSB0aW1lb3V0IG9wdGlvbiByZXF1aXJlcyAiCisgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKKyAgICAgICAgICAgIG5zLnRpbWVvdXQgPSBOb25lCisgICAgaWYgbnMudXNlX21wIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBucy51c2VfbXAgPD0gMDoKKyAgICAgICAgICAgICMgVXNlIGFsbCBjb3JlcyArIGV4dHJhcyBmb3IgdGVzdHMgdGhhdCBsaWtlIHRvIHNsZWVwCisgICAgICAgICAgICBucy51c2VfbXAgPSAyICsgKG9zLmNwdV9jb3VudCgpIG9yIDEpCisgICAgICAgIGlmIG5zLnVzZV9tcCA9PSAxOgorICAgICAgICAgICAgbnMudXNlX21wID0gTm9uZQorICAgIGlmIG5zLnVzZToKKyAgICAgICAgZm9yIGEgaW4gbnMudXNlOgorICAgICAgICAgICAgZm9yIHIgaW4gYToKKyAgICAgICAgICAgICAgICBpZiByID09ICdhbGwnOgorICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzWzpdID0gUkVTT1VSQ0VfTkFNRVMKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiByID09ICdub25lJzoKKyAgICAgICAgICAgICAgICAgICAgZGVsIG5zLnVzZV9yZXNvdXJjZXNbOl0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICByZW1vdmUgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIHJbMF0gPT0gJy0nOgorICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICAgICAgICAgIGlmIHJlbW92ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgciBpbiBucy51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlcy5yZW1vdmUocikKKyAgICAgICAgICAgICAgICBlbGlmIHIgbm90IGluIG5zLnVzZV9yZXNvdXJjZXM6CisgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMuYXBwZW5kKHIpCisgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgbm90IE5vbmU6CisgICAgICAgIG5zLnJhbmRvbWl6ZSA9IFRydWUKKworICAgIHJldHVybiBucworCisKK2RlZiBydW5fdGVzdF9pbl9zdWJwcm9jZXNzKHRlc3RuYW1lLCBucyk6CisgICAgIiIiUnVuIHRoZSBnaXZlbiB0ZXN0IGluIGEgc3VicHJvY2VzcyB3aXRoIC0tc2xhdmVhcmdzLgorCisgICAgbnMgaXMgdGhlIG9wdGlvbiBOYW1lc3BhY2UgcGFyc2VkIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cy4gcmVncnRlc3QKKyAgICBpcyBpbnZva2VkIGluIGEgc3VicHJvY2VzcyB3aXRoIHRoZSAtLXNsYXZlYXJncyBhcmd1bWVudDsgd2hlbiB0aGUKKyAgICBzdWJwcm9jZXNzIGV4aXRzLCBpdHMgcmV0dXJuIGNvZGUsIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSByZXR1cm5lZCBhcyBhCisgICAgMy10dXBsZS4KKyAgICAiIiIKKyAgICBmcm9tIHN1YnByb2Nlc3MgaW1wb3J0IFBvcGVuLCBQSVBFCisgICAgYmFzZV9jbWQgPSAoW3N5cy5leGVjdXRhYmxlXSArIHN1cHBvcnQuYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkgKworICAgICAgICAgICAgICAgIFsnLVgnLCAnZmF1bHRoYW5kbGVyJywgJy1tJywgJ3Rlc3QucmVncnRlc3QnXSkKKworICAgIHNsYXZlYXJncyA9ICgKKyAgICAgICAgICAgICh0ZXN0bmFtZSwgbnMudmVyYm9zZSwgbnMucXVpZXQpLAorICAgICAgICAgICAgZGljdChodW50cmxlYWtzPW5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXM9bnMudXNlX3Jlc291cmNlcywKKyAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW5zLm1hdGNoX3Rlc3RzKSkKKyAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgYXMgcmVncnRlc3QncyBvcmlnaW5hbAorICAgICMgaW52b2NhdGlvbiBlbnN1cmVzIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KKyAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCisgICAgcG9wZW4gPSBQb3BlbihiYXNlX2NtZCArIFsnLS1zbGF2ZWFyZ3MnLCBqc29uLmR1bXBzKHNsYXZlYXJncyldLAorICAgICAgICAgICAgICAgICAgc3Rkb3V0PVBJUEUsIHN0ZGVycj1QSVBFLAorICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCisgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCisgICAgICAgICAgICAgICAgICBjd2Q9c3VwcG9ydC5TQVZFRENXRCkKKyAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKKyAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgcmV0dXJuIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyCisKKworZGVmIG1haW4odGVzdHM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICIiIkV4ZWN1dGUgYSB0ZXN0IHN1aXRlLgogCiAgICAgVGhpcyBhbHNvIHBhcnNlcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgbW9kaWZpZXMgaXRzIGJlaGF2aW9yCkBAIC0yODIsNyArNDc5LDYgQEAKICAgICBkaXJlY3RseSB0byBzZXQgdGhlIHZhbHVlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNldCBieSBmbGFncwogICAgIG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIiIiCi0KICAgICAjIERpc3BsYXkgdGhlIFB5dGhvbiB0cmFjZWJhY2sgb24gZmF0YWwgZXJyb3JzIChlLmcuIHNlZ2ZhdWx0KQogICAgIGZhdWx0aGFuZGxlci5lbmFibGUoYWxsX3RocmVhZHM9VHJ1ZSkKIApAQCAtMjk4LDE4NyArNDk0LDUxIEBACiAgICAgcmVwbGFjZV9zdGRvdXQoKQogCiAgICAgc3VwcG9ydC5yZWNvcmRfb3JpZ2luYWxfc3Rkb3V0KHN5cy5zdGRvdXQpCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdodnF4c29TOnJmOmx1OnQ6VEQ6TkxSOkZkd1dNOm5qOkdtOicsCi0gICAgICAgICAgICBbJ2hlbHAnLCAndmVyYm9zZScsICd2ZXJib3NlMicsICd2ZXJib3NlMycsICdxdWlldCcsCi0gICAgICAgICAgICAgJ2V4Y2x1ZGUnLCAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9taXplJywgJ2Zyb21maWxlPScsICdmaW5kbGVha3MnLAotICAgICAgICAgICAgICd1c2U9JywgJ3RocmVzaG9sZD0nLCAnY292ZXJkaXI9JywgJ25vY292ZXJkaXInLAotICAgICAgICAgICAgICdydW5sZWFrcycsICdodW50cmxlYWtzPScsICdtZW1saW1pdD0nLCAncmFuZHNlZWQ9JywKLSAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzPScsICdjb3ZlcmFnZScsICdzbGF2ZWFyZ3M9JywgJ2ZvcmV2ZXInLCAnZGVidWcnLAotICAgICAgICAgICAgICdzdGFydD0nLCAnbm93aW5kb3dzJywgJ2hlYWRlcicsICd0ZXN0ZGlyPScsICd0aW1lb3V0PScsICd3YWl0JywKLSAgICAgICAgICAgICAnZmFpbGZhc3QnLCAnbWF0Y2g9J10pCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHVzYWdlKG1zZykKIAotICAgICMgRGVmYXVsdHMKLSAgICBpZiByYW5kb21fc2VlZCBpcyBOb25lOgotICAgICAgICByYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCi0gICAgaWYgdXNlX3Jlc291cmNlcyBpcyBOb25lOgotICAgICAgICB1c2VfcmVzb3VyY2VzID0gW10KLSAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgc3RhcnQgPSBOb25lCi0gICAgdGltZW91dCA9IE5vbmUKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6Ci0gICAgICAgICAgICBwcmludChfX2RvY19fKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgbyBpbiAoJy12JywgJy0tdmVyYm9zZScpOgotICAgICAgICAgICAgdmVyYm9zZSArPSAxCi0gICAgICAgIGVsaWYgbyBpbiAoJy13JywgJy0tdmVyYm9zZTInKToKLSAgICAgICAgICAgIHZlcmJvc2UyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctZCcsICctLWRlYnVnJyk6Ci0gICAgICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLVcnLCAnLS12ZXJib3NlMycpOgotICAgICAgICAgICAgdmVyYm9zZTMgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1HJywgJy0tZmFpbGZhc3QnKToKLSAgICAgICAgICAgIGZhaWxmYXN0ID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctcScsICctLXF1aWV0Jyk6Ci0gICAgICAgICAgICBxdWlldCA9IFRydWU7Ci0gICAgICAgICAgICB2ZXJib3NlID0gMAotICAgICAgICBlbGlmIG8gaW4gKCcteCcsICctLWV4Y2x1ZGUnKToKLSAgICAgICAgICAgIGV4Y2x1ZGUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1TJywgJy0tc3RhcnQnKToKLSAgICAgICAgICAgIHN0YXJ0ID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctcycsICctLXNpbmdsZScpOgotICAgICAgICAgICAgc2luZ2xlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctbycsICctLXNsb3cnKToKLSAgICAgICAgICAgIHByaW50X3Nsb3cgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1yJywgJy0tcmFuZG9taXplJyk6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgIGVsaWYgbyA9PSAnLS1yYW5kc2VlZCc6Ci0gICAgICAgICAgICByYW5kb21pemUgPSBUcnVlCi0gICAgICAgICAgICByYW5kb21fc2VlZCA9IGludChhKQotICAgICAgICBlbGlmIG8gaW4gKCctZicsICctLWZyb21maWxlJyk6Ci0gICAgICAgICAgICBmcm9tZmlsZSA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLW0nLCAnLS1tYXRjaCcpOgotICAgICAgICAgICAgbWF0Y2hfdGVzdHMgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1sJywgJy0tZmluZGxlYWtzJyk6Ci0gICAgICAgICAgICBmaW5kbGVha3MgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1MJywgJy0tcnVubGVha3MnKToKLSAgICAgICAgICAgIHJ1bmxlYWtzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctdCcsICctLXRocmVzaG9sZCcpOgotICAgICAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgICAgICBnYy5zZXRfdGhyZXNob2xkKGludChhKSkKLSAgICAgICAgZWxpZiBvIGluICgnLVQnLCAnLS1jb3ZlcmFnZScpOgotICAgICAgICAgICAgdHJhY2UgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1EJywgJy0tY292ZXJkaXInKToKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgbmVlZCAgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZ29lcyB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgY292ZXJkaXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgYSkKLSAgICAgICAgZWxpZiBvIGluICgnLU4nLCAnLS1ub2NvdmVyZGlyJyk6Ci0gICAgICAgICAgICBjb3ZlcmRpciA9IE5vbmUKLSAgICAgICAgZWxpZiBvIGluICgnLVInLCAnLS1odW50cmxlYWtzJyk6Ci0gICAgICAgICAgICBodW50cmxlYWtzID0gYS5zcGxpdCgnOicpCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgbm90IGluICgyLCAzKToKLSAgICAgICAgICAgICAgICBwcmludChhLCBodW50cmxlYWtzKQotICAgICAgICAgICAgICAgIHVzYWdlKCctUiB0YWtlcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1swXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gNQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzBdID0gaW50KGh1bnRybGVha3NbMF0pCi0gICAgICAgICAgICBpZiBub3QgaHVudHJsZWFrc1sxXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gNAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzFdID0gaW50KGh1bnRybGVha3NbMV0pCi0gICAgICAgICAgICBpZiBsZW4oaHVudHJsZWFrcykgPT0gMiBvciBub3QgaHVudHJsZWFrc1syXToKLSAgICAgICAgICAgICAgICBodW50cmxlYWtzWzI6XSA9IFsicmVmbG9nLnR4dCJdCi0gICAgICAgICAgICAjIEF2b2lkIGZhbHNlIHBvc2l0aXZlcyBkdWUgdG8gdmFyaW91cyBjYWNoZXMKLSAgICAgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKLSAgICAgICAgICAgIHdhcm1fY2FjaGVzKCkKLSAgICAgICAgZWxpZiBvIGluICgnLU0nLCAnLS1tZW1saW1pdCcpOgotICAgICAgICAgICAgc3VwcG9ydC5zZXRfbWVtbGltaXQoYSkKLSAgICAgICAgZWxpZiBvIGluICgnLXUnLCAnLS11c2UnKToKLSAgICAgICAgICAgIHUgPSBbeC5sb3dlcigpIGZvciB4IGluIGEuc3BsaXQoJywnKV0KLSAgICAgICAgICAgIGZvciByIGluIHU6Ci0gICAgICAgICAgICAgICAgaWYgciA9PSAnYWxsJzoKLSAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlc1s6XSA9IFJFU09VUkNFX05BTUVTCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgciA9PSAnbm9uZSc6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCB1c2VfcmVzb3VyY2VzWzpdCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmVtb3ZlID0gRmFsc2UKLSAgICAgICAgICAgICAgICBpZiByWzBdID09ICctJzoKLSAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICByID0gclsxOl0KLSAgICAgICAgICAgICAgICBpZiByIG5vdCBpbiBSRVNPVVJDRV9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgdXNhZ2UoJ0ludmFsaWQgLXUvLS11c2Ugb3B0aW9uOiAnICsgYSkKLSAgICAgICAgICAgICAgICBpZiByZW1vdmU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHIgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCi0gICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiB1c2VfcmVzb3VyY2VzOgotICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmFwcGVuZChyKQotICAgICAgICBlbGlmIG8gaW4gKCctbicsICctLW5vd2luZG93cycpOgotICAgICAgICAgICAgaW1wb3J0IG1zdmNydAotICAgICAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PR1BGQVVMVEVSUk9SQk9YfAotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICMgcmVsZWFzZSBidWlsZAotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgotICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydEZpbGUobSwgbXN2Y3J0LkNSVERCR19GSUxFX1NUREVSUikKLSAgICAgICAgZWxpZiBvIGluICgnLUYnLCAnLS1mb3JldmVyJyk6Ci0gICAgICAgICAgICBmb3JldmVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctaicsICctLW11bHRpcHJvY2VzcycpOgotICAgICAgICAgICAgdXNlX21wID0gaW50KGEpCi0gICAgICAgICAgICBpZiB1c2VfbXAgPD0gMDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgICAgICAgICAgICAgIyBVc2UgYWxsIGNvcmVzICsgZXh0cmFzIGZvciB0ZXN0cyB0aGF0IGxpa2UgdG8gc2xlZXAKLSAgICAgICAgICAgICAgICAgICAgdXNlX21wID0gMiArIG11bHRpcHJvY2Vzc2luZy5jcHVfY291bnQoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB1c2VfbXAgPSAzCi0gICAgICAgICAgICBpZiB1c2VfbXAgPT0gMToKLSAgICAgICAgICAgICAgICB1c2VfbXAgPSBOb25lCi0gICAgICAgIGVsaWYgbyA9PSAnLS1oZWFkZXInOgotICAgICAgICAgICAgaGVhZGVyID0gVHJ1ZQotICAgICAgICBlbGlmIG8gPT0gJy0tc2xhdmVhcmdzJzoKLSAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IGpzb24ubG9hZHMoYSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKLSAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKLSAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKLSAgICAgICAgICAgIHN5cy5leGl0KDApCi0gICAgICAgIGVsaWYgbyA9PSAnLS10ZXN0ZGlyJzoKLSAgICAgICAgICAgICMgQ1dEIGlzIHJlcGxhY2VkIHdpdGggYSB0ZW1wb3JhcnkgZGlyIGJlZm9yZSBjYWxsaW5nIG1haW4oKSwgc28gd2UKLSAgICAgICAgICAgICMgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZW5kcyB1cCB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgotICAgICAgICAgICAgdGVzdGRpciA9IG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBhKQotICAgICAgICBlbGlmIG8gPT0gJy0tdGltZW91dCc6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGZsb2F0KGEpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogVGhlIHRpbWVvdXQgb3B0aW9uIHJlcXVpcmVzICIKLSAgICAgICAgICAgICAgICAgICAgICAiZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyIikKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gTm9uZQotICAgICAgICBlbGlmIG8gPT0gJy0td2FpdCc6Ci0gICAgICAgICAgICBpbnB1dCgiUHJlc3MgYW55IGtleSB0byBjb250aW51ZS4uLiIpCisgICAgbnMgPSBfcGFyc2VfYXJncyhzeXMuYXJndlsxOl0sICoqa3dhcmdzKQorCisgICAgaWYgbnMuaHVudHJsZWFrczoKKyAgICAgICAgIyBBdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIHZhcmlvdXMgY2FjaGVzCisgICAgICAgICMgZmlsbGluZyBzbG93bHkgd2l0aCByYW5kb20gZGF0YToKKyAgICAgICAgd2FybV9jYWNoZXMoKQorICAgIGlmIG5zLm1lbWxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICBzdXBwb3J0LnNldF9tZW1saW1pdChucy5tZW1saW1pdCkKKyAgICBpZiBucy50aHJlc2hvbGQgaXMgbm90IE5vbmU6CisgICAgICAgIGltcG9ydCBnYworICAgICAgICBnYy5zZXRfdGhyZXNob2xkKG5zLnRocmVzaG9sZCkKKyAgICBpZiBucy5ub3dpbmRvd3M6CisgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgbXN2Y3J0LlNldEVycm9yTW9kZShtc3ZjcnQuU0VNX0ZBSUxDUklUSUNBTEVSUk9SU3wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PQUxJR05NRU5URkFVTFRFWENFUFR8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0dQRkFVTFRFUlJPUkJPWHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc3ZjcnQuU0VNX05PT1BFTkZJTEVFUlJPUkJPWCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyByZWxlYXNlIGJ1aWxkCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgoIk5vIGhhbmRsZXIgZm9yIG9wdGlvbiB7fS4gIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyAiCi0gICAgICAgICAgICAgICAgICAgImF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuIikuZm9ybWF0KG8pLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgIGlmIHNpbmdsZSBhbmQgZnJvbWZpbGU6Ci0gICAgICAgIHVzYWdlKCItcyBhbmQgLWYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHRyYWNlOgotICAgICAgICB1c2FnZSgiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCBmaW5kbGVha3M6Ci0gICAgICAgIHVzYWdlKCItbCBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiB1c2VfbXAgYW5kIHN1cHBvcnQubWF4X21lbXVzZToKLSAgICAgICAgdXNhZ2UoIi1NIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIGZhaWxmYXN0IGFuZCBub3QgKHZlcmJvc2Ugb3IgdmVyYm9zZTMpOgotICAgICAgICB1c2FnZSgiLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVciKQorICAgICAgICAgICAgZm9yIG0gaW4gW21zdmNydC5DUlRfV0FSTiwgbXN2Y3J0LkNSVF9FUlJPUiwgbXN2Y3J0LkNSVF9BU1NFUlRdOgorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlKG0sIG1zdmNydC5DUlREQkdfTU9ERV9GSUxFKQorICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCisgICAgaWYgbnMud2FpdDoKKyAgICAgICAgaW5wdXQoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKQorCisgICAgaWYgbnMuc2xhdmVhcmdzIGlzIG5vdCBOb25lOgorICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKG5zLnNsYXZlYXJncykKKyAgICAgICAgaWYga3dhcmdzLmdldCgnaHVudHJsZWFrcycpOgorICAgICAgICAgICAgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByZXN1bHQgPSBJTlRFUlJVUFRFRCwgJycKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgcmVzdWx0ID0gQ0hJTERfRVJST1IsIHN0cihlKQorICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgcHJpbnQoKSAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCisgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKKyAgICAgICAgc3lzLmV4aXQoMCkKIAogICAgIGdvb2QgPSBbXQogICAgIGJhZCA9IFtdCkBAIC00ODcsMTIgKzU0NywxMiBAQAogICAgIGVudmlyb25tZW50X2NoYW5nZWQgPSBbXQogICAgIGludGVycnVwdGVkID0gRmFsc2UKIAotICAgIGlmIGZpbmRsZWFrczoKKyAgICBpZiBucy5maW5kbGVha3M6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBnYwogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwcmludCgnTm8gR0MgYXZhaWxhYmxlLCBkaXNhYmxpbmcgZmluZGxlYWtzLicpCi0gICAgICAgICAgICBmaW5kbGVha3MgPSBGYWxzZQorICAgICAgICAgICAgbnMuZmluZGxlYWtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgVW5jb21tZW50IHRoZSBsaW5lIGJlbG93IHRvIHJlcG9ydCBnYXJiYWdlIHRoYXQgaXMgbm90CiAgICAgICAgICAgICAjIGZyZWVhYmxlIGJ5IHJlZmVyZW5jZSBjb3VudGluZyBhbG9uZS4gIEJ5IGRlZmF1bHQgb25seQpAQCAtNTAwLDgyICs1NjAsODcgQEAKICAgICAgICAgICAgICNnYy5zZXRfZGVidWcoZ2MuREVCVUdfU0FWRUFMTCkKICAgICAgICAgICAgIGZvdW5kX2dhcmJhZ2UgPSBbXQogCi0gICAgaWYgc2luZ2xlOgorICAgIGlmIG5zLmh1bnRybGVha3M6CisgICAgICAgIHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXAgPSBGYWxzZQorCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAncHluZXh0dGVzdCcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RzID0gW25leHRfdGVzdF0KLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbmV4dF90ZXN0ID0gZnAucmVhZCgpLnN0cmlwKCkKKyAgICAgICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgaWYgZnJvbWZpbGU6CisgICAgaWYgbnMuZnJvbWZpbGU6CiAgICAgICAgIHRlc3RzID0gW10KLSAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmcm9tZmlsZSkpCi0gICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCi0gICAgICAgIGZvciBsaW5lIGluIGZwOgotICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCi0gICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQotICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgbnMuZnJvbWZpbGUpKSBhcyBmcDoKKyAgICAgICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgICAgICBsaW5lID0gY291bnRfcGF0LnN1YignJywgbGluZSkKKyAgICAgICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQorICAgICAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKGd1dHMpCiAKICAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgotICAgIHJlbW92ZXB5KGFyZ3MpCisgICAgcmVtb3ZlcHkobnMuYXJncykKICAgICByZW1vdmVweSh0ZXN0cykKIAogICAgIHN0ZHRlc3RzID0gU1REVEVTVFNbOl0KICAgICBub3R0ZXN0cyA9IE5PVFRFU1RTLmNvcHkoKQotICAgIGlmIGV4Y2x1ZGU6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKKyAgICBpZiBucy5leGNsdWRlOgorICAgICAgICBmb3IgYXJnIGluIG5zLmFyZ3M6CiAgICAgICAgICAgICBpZiBhcmcgaW4gc3RkdGVzdHM6CiAgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKICAgICAgICAgICAgIG5vdHRlc3RzLmFkZChhcmcpCi0gICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBucy5hcmdzID0gW10KIAogICAgICMgRm9yIGEgcGFydGlhbCBydW4sIHdlIGRvIG5vdCBuZWVkIHRvIGNsdXR0ZXIgdGhlIG91dHB1dC4KLSAgICBpZiB2ZXJib3NlIG9yIGhlYWRlciBvciBub3QgKHF1aWV0IG9yIHNpbmdsZSBvciB0ZXN0cyBvciBhcmdzKToKKyAgICBpZiBucy52ZXJib3NlIG9yIG5zLmhlYWRlciBvciBub3QgKG5zLnF1aWV0IG9yIG5zLnNpbmdsZSBvciB0ZXN0cyBvciBucy5hcmdzKToKICAgICAgICAgIyBQcmludCBiYXNpYyBwbGF0Zm9ybSBpbmZvcm1hdGlvbgogICAgICAgICBwcmludCgiPT0iLCBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwgKnN5cy52ZXJzaW9uLnNwbGl0KCkpCiAgICAgICAgIHByaW50KCI9PSAgIiwgcGxhdGZvcm0ucGxhdGZvcm0oYWxpYXNlZD1UcnVlKSwKICAgICAgICAgICAgICAgICAgICAgICAiJXMtZW5kaWFuIiAlIHN5cy5ieXRlb3JkZXIpCisgICAgICAgIHByaW50KCI9PSAgIiwgImhhc2ggYWxnb3JpdGhtOiIsIHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLAorICAgICAgICAgICAgICAiNjRiaXQiIGlmIHN5cy5tYXhzaXplID4gMioqMzIgZWxzZSAiMzJiaXQiKQogICAgICAgICBwcmludCgiPT0gICIsIG9zLmdldGN3ZCgpKQogICAgICAgICBwcmludCgiVGVzdGluZyB3aXRoIGZsYWdzOiIsIHN5cy5mbGFncykKIAogICAgICMgaWYgdGVzdGRpciBpcyBzZXQsIHRoZW4gd2UgYXJlIG5vdCBydW5uaW5nIHRoZSBweXRob24gdGVzdHMgc3VpdGUsIHNvCiAgICAgIyBkb24ndCBhZGQgZGVmYXVsdCB0ZXN0cyB0byBiZSBleGVjdXRlZCBvciBza2lwcGVkIChwYXNzIGVtcHR5IHZhbHVlcykKLSAgICBpZiB0ZXN0ZGlyOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBsaXN0KCksIHNldCgpKQorICAgIGlmIG5zLnRlc3RkaXI6CisgICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKG5zLnRlc3RkaXIsIGxpc3QoKSwgc2V0KCkpCiAgICAgZWxzZToKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQorICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyhucy50ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCiAKLSAgICBzZWxlY3RlZCA9IHRlc3RzIG9yIGFyZ3Mgb3IgYWxsdGVzdHMKLSAgICBpZiBzaW5nbGU6CisgICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBucy5hcmdzIG9yIGFsbHRlc3RzCisgICAgaWYgbnMuc2luZ2xlOgogICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkWzoxXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gYWxsdGVzdHNbYWxsdGVzdHMuaW5kZXgoc2VsZWN0ZWRbMF0pKzFdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgogICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IE5vbmUKICAgICAjIFJlbW92ZSBhbGwgdGhlIHNlbGVjdGVkIHRlc3RzIHRoYXQgcHJlY2VkZSBzdGFydCBpZiBpdCdzIHNldC4KLSAgICBpZiBzdGFydDoKKyAgICBpZiBucy5zdGFydDoKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGVsIHNlbGVjdGVkWzpzZWxlY3RlZC5pbmRleChzdGFydCldCisgICAgICAgICAgICBkZWwgc2VsZWN0ZWRbOnNlbGVjdGVkLmluZGV4KG5zLnN0YXJ0KV0KICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBzdGFydGluZyB0ZXN0ICglcyksIHVzaW5nIGFsbCB0ZXN0cyIgJSBzdGFydCkKLSAgICBpZiByYW5kb21pemU6Ci0gICAgICAgIHJhbmRvbS5zZWVkKHJhbmRvbV9zZWVkKQotICAgICAgICBwcmludCgiVXNpbmcgcmFuZG9tIHNlZWQiLCByYW5kb21fc2VlZCkKKyAgICAgICAgICAgIHByaW50KCJDb3VsZG4ndCBmaW5kIHN0YXJ0aW5nIHRlc3QgKCVzKSwgdXNpbmcgYWxsIHRlc3RzIiAlIG5zLnN0YXJ0KQorICAgIGlmIG5zLnJhbmRvbWl6ZToKKyAgICAgICAgaWYgbnMucmFuZG9tX3NlZWQgaXMgTm9uZToKKyAgICAgICAgICAgIG5zLnJhbmRvbV9zZWVkID0gcmFuZG9tLnJhbmRyYW5nZSgxMDAwMDAwMCkKKyAgICAgICAgcmFuZG9tLnNlZWQobnMucmFuZG9tX3NlZWQpCisgICAgICAgIHByaW50KCJVc2luZyByYW5kb20gc2VlZCIsIG5zLnJhbmRvbV9zZWVkKQogICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxlY3RlZCkKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgaW1wb3J0IHRyYWNlLCB0ZW1wZmlsZQogICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMuYmFzZV9wcmVmaXgsIHN5cy5iYXNlX2V4ZWNfcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT1GYWxzZSwgY291bnQ9VHJ1ZSkKIAogICAgIHRlc3RfdGltZXMgPSBbXQotICAgIHN1cHBvcnQudmVyYm9zZSA9IHZlcmJvc2UgICAgICAjIFRlbGwgdGVzdHMgdG8gYmUgbW9kZXJhdGVseSBxdWlldAotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IHVzZV9yZXNvdXJjZXMKKyAgICBzdXBwb3J0LnZlcmJvc2UgPSBucy52ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKKyAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBucy51c2VfcmVzb3VyY2VzCiAgICAgc2F2ZV9tb2R1bGVzID0gc3lzLm1vZHVsZXMua2V5cygpCiAKICAgICBkZWYgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KToKQEAgLTU5Myw3ICs2NTgsNyBAQAogICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKICAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCiAKLSAgICBpZiBmb3JldmVyOgorICAgIGlmIG5zLmZvcmV2ZXI6CiAgICAgICAgIGRlZiB0ZXN0X2ZvcmV2ZXIodGVzdHM9bGlzdChzZWxlY3RlZCkpOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKQEAgLTYwOCwxOSArNjczLDE2IEBACiAgICAgICAgIHRlc3RfY291bnQgPSAnL3t9Jy5mb3JtYXQobGVuKHNlbGVjdGVkKSkKICAgICAgICAgdGVzdF9jb3VudF93aWR0aCA9IGxlbih0ZXN0X2NvdW50KSAtIDEKIAotICAgIGlmIHVzZV9tcDoKKyAgICBpZiBucy51c2VfbXA6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoIk11bHRpcHJvY2VzcyBvcHRpb24gcmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQiKQogICAgICAgICAgICAgc3lzLmV4aXQoMikKICAgICAgICAgZnJvbSBxdWV1ZSBpbXBvcnQgUXVldWUKLSAgICAgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQotICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnNcXSQiKQorICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXSQiKQogICAgICAgICBvdXRwdXQgPSBRdWV1ZSgpCiAgICAgICAgIHBlbmRpbmcgPSBNdWx0aXByb2Nlc3NUZXN0cyh0ZXN0cykKLSAgICAgICAgb3B0X2FyZ3MgPSBzdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgIGJhc2VfY21kID0gW3N5cy5leGVjdXRhYmxlXSArIG9wdF9hcmdzICsgWyctbScsICd0ZXN0LnJlZ3J0ZXN0J10KICAgICAgICAgZGVmIHdvcmsoKToKICAgICAgICAgICAgICMgQSB3b3JrZXIgdGhyZWFkLgogICAgICAgICAgICAgdHJ5OgpAQCAtNjMwLDI0ICs2OTIsNyBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgIGFyZ3NfdHVwbGUgPSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAodGVzdCwgdmVyYm9zZSwgcXVpZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgZGljdChodW50cmxlYWtzPWh1bnRybGVha3MsIHVzZV9yZXNvdXJjZXM9dXNlX3Jlc291cmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc9ZGVidWcsIG91dHB1dF9vbl9mYWlsdXJlPXZlcmJvc2UzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGZhaWxmYXN0PWZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1tYXRjaF90ZXN0cykKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAjIC1FIGlzIG5lZWRlZCBieSBzb21lIHRlc3RzLCBlLmcuIHRlc3RfaW1wb3J0Ci0gICAgICAgICAgICAgICAgICAgICMgUnVubmluZyB0aGUgY2hpbGQgZnJvbSB0aGUgc2FtZSB3b3JraW5nIGRpcmVjdG9yeSBlbnN1cmVzCi0gICAgICAgICAgICAgICAgICAgICMgdGhhdCBURU1QRElSIGZvciB0aGUgY2hpbGQgaXMgdGhlIHNhbWUgd2hlbgotICAgICAgICAgICAgICAgICAgICAjIHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSBpcyB0cnVlLiBTZWUgaXNzdWUgMTUzMDAuCi0gICAgICAgICAgICAgICAgICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhhcmdzX3R1cGxlKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz0ob3MubmFtZSAhPSAnbnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXN1cHBvcnQuU0FWRURDV0QpCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgICAgICAgICByZXRjb2RlID0gcG9wZW4ud2FpdCgpCisgICAgICAgICAgICAgICAgICAgIHJldGNvZGUsIHN0ZG91dCwgc3RkZXJyID0gcnVuX3Rlc3RfaW5fc3VicHJvY2Vzcyh0ZXN0LCBucykKICAgICAgICAgICAgICAgICAgICAgIyBTdHJpcCBsYXN0IHJlZmNvdW50IG91dHB1dCBsaW5lIGlmIGl0IGV4aXN0cywgc2luY2UgaXQKICAgICAgICAgICAgICAgICAgICAgIyBjb21lcyBmcm9tIHRoZSBzaHV0ZG93biBvZiB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIHN1YmNvbW1hbmQuCiAgICAgICAgICAgICAgICAgICAgIHN0ZGVyciA9IGRlYnVnX291dHB1dF9wYXQuc3ViKCIiLCBzdGRlcnIpCkBAIC02NjQsMTkgKzcwOSwxOSBAQAogICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgd29ya2VycyA9IFtUaHJlYWQodGFyZ2V0PXdvcmspIGZvciBpIGluIHJhbmdlKHVzZV9tcCldCisgICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZShucy51c2VfbXApXQogICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnM6CiAgICAgICAgICAgICB3b3JrZXIuc3RhcnQoKQogICAgICAgICBmaW5pc2hlZCA9IDAKICAgICAgICAgdGVzdF9pbmRleCA9IDEKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCB1c2VfbXA6CisgICAgICAgICAgICB3aGlsZSBmaW5pc2hlZCA8IG5zLnVzZV9tcDoKICAgICAgICAgICAgICAgICB0ZXN0LCBzdGRvdXQsIHN0ZGVyciwgcmVzdWx0ID0gb3V0cHV0LmdldCgpCiAgICAgICAgICAgICAgICAgaWYgdGVzdCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCArPSAxCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQotICAgICAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBpZiBub3QgbnMucXVpZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIgaWYgYmFkIGVsc2UgIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LApAQCAtNjk5LDI5ICs3NDQsMzAgQEAKICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKICAgICBlbHNlOgogICAgICAgICBmb3IgdGVzdF9pbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUodGVzdHMsIDEpOgotICAgICAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgaWYgbm90IG5zLnF1aWV0OgogICAgICAgICAgICAgICAgIGZtdCA9ICJbezE6ezB9fXsyfS97M31dIHs0fSIgaWYgYmFkIGVsc2UgIlt7MTp7MH19ezJ9XSB7NH0iCiAgICAgICAgICAgICAgICAgcHJpbnQoZm10LmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgdGVzdF9jb3VudF93aWR0aCwgdGVzdF9pbmRleCwgdGVzdF9jb3VudCwgbGVuKGJhZCksIHRlc3QpKQogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgaWYgdHJhY2U6CisgICAgICAgICAgICBpZiBucy50cmFjZToKICAgICAgICAgICAgICAgICAjIElmIHdlJ3JlIHRyYWNpbmcgY29kZSBjb3ZlcmFnZSwgdGhlbiB3ZSBkb24ndCBleGl0IHdpdGggc3RhdHVzCiAgICAgICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCi0gICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgdGltZW91dD10aW1lb3V0KScsCisgICAgICAgICAgICAgICAgdHJhY2VyLnJ1bmN0eCgncnVudGVzdCh0ZXN0LCBucy52ZXJib3NlLCBucy5xdWlldCwgdGltZW91dD1ucy50aW1lb3V0KScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbG9jYWxzPXZhcnMoKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfb25fZmFpbHVyZT12ZXJib3NlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXRpbWVvdXQsIGZhaWxmYXN0PWZhaWxmYXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoX3Rlc3RzPW1hdGNoX3Rlc3RzKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIG5zLnZlcmJvc2UsIG5zLnF1aWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9bnMudmVyYm9zZTMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1ucy50aW1lb3V0LCBmYWlsZmFzdD1ucy5mYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykKICAgICAgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0ZWQgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgaWYgZmluZGxlYWtzOgorICAgICAgICAgICAgaWYgbnMuZmluZGxlYWtzOgogICAgICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICAgICAgICAgIGlmIGdjLmdhcmJhZ2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiB0ZXN0IGNyZWF0ZWQiLCBsZW4oZ2MuZ2FyYmFnZSksIGVuZD0nICcpCkBAIC03NDIsMTEgKzc4OCwxMSBAQAogICAgICAgICBvbWl0dGVkID0gc2V0KHNlbGVjdGVkKSAtIHNldChnb29kKSAtIHNldChiYWQpIC0gc2V0KHNraXBwZWQpCiAgICAgICAgIHByaW50KGNvdW50KGxlbihvbWl0dGVkKSwgInRlc3QiKSwgIm9taXR0ZWQ6IikKICAgICAgICAgcHJpbnRsaXN0KG9taXR0ZWQpCi0gICAgaWYgZ29vZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIGdvb2QgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgaWYgbm90IGJhZCBhbmQgbm90IHNraXBwZWQgYW5kIG5vdCBpbnRlcnJ1cHRlZCBhbmQgbGVuKGdvb2QpID4gMToKICAgICAgICAgICAgIHByaW50KCJBbGwiLCBlbmQ9JyAnKQogICAgICAgICBwcmludChjb3VudChsZW4oZ29vZCksICJ0ZXN0IiksICJPSy4iKQotICAgIGlmIHByaW50X3Nsb3c6CisgICAgaWYgbnMucHJpbnRfc2xvdzoKICAgICAgICAgdGVzdF90aW1lcy5zb3J0KHJldmVyc2U9VHJ1ZSkKICAgICAgICAgcHJpbnQoIjEwIHNsb3dlc3QgdGVzdHM6IikKICAgICAgICAgZm9yIHRpbWUsIHRlc3QgaW4gdGVzdF90aW1lc1s6MTBdOgpAQCAtNzYwLDMyICs4MDYsMTkgQEAKICAgICAgICAgcHJpbnQoInt9IGFsdGVyZWQgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudDoiLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgY291bnQobGVuKGVudmlyb25tZW50X2NoYW5nZWQpLCAidGVzdCIpKSkKICAgICAgICAgcHJpbnRsaXN0KGVudmlyb25tZW50X2NoYW5nZWQpCi0gICAgaWYgc2tpcHBlZCBhbmQgbm90IHF1aWV0OgorICAgIGlmIHNraXBwZWQgYW5kIG5vdCBucy5xdWlldDoKICAgICAgICAgcHJpbnQoY291bnQobGVuKHNraXBwZWQpLCAidGVzdCIpLCAic2tpcHBlZDoiKQogICAgICAgICBwcmludGxpc3Qoc2tpcHBlZCkKIAotICAgICAgICBlID0gX0V4cGVjdGVkU2tpcHMoKQotICAgICAgICBwbGF0ID0gc3lzLnBsYXRmb3JtCi0gICAgICAgIGlmIGUuaXN2YWxpZCgpOgotICAgICAgICAgICAgc3VycHJpc2UgPSBzZXQoc2tpcHBlZCkgLSBlLmdldGV4cGVjdGVkKCkgLSBzZXQocmVzb3VyY2VfZGVuaWVkcykKLSAgICAgICAgICAgIGlmIHN1cnByaXNlOgotICAgICAgICAgICAgICAgIHByaW50KGNvdW50KGxlbihzdXJwcmlzZSksICJza2lwIiksIFwKLSAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBvbiIsIHBsYXQgKyAiOiIpCi0gICAgICAgICAgICAgICAgcHJpbnRsaXN0KHN1cnByaXNlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCgiVGhvc2Ugc2tpcHMgYXJlIGFsbCBleHBlY3RlZCBvbiIsIHBsYXQgKyAiLiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgiQXNrIHNvbWVvbmUgdG8gdGVhY2ggcmVncnRlc3QucHkgYWJvdXQgd2hpY2ggdGVzdHMgYXJlIikKLSAgICAgICAgICAgIHByaW50KCJleHBlY3RlZCB0byBnZXQgc2tpcHBlZCBvbiIsIHBsYXQgKyAiLiIpCi0KLSAgICBpZiB2ZXJib3NlMiBhbmQgYmFkOgorICAgIGlmIG5zLnZlcmJvc2UyIGFuZCBiYWQ6CiAgICAgICAgIHByaW50KCJSZS1ydW5uaW5nIGZhaWxlZCB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUiKQogICAgICAgICBmb3IgdGVzdCBpbiBiYWQ6CiAgICAgICAgICAgICBwcmludCgiUmUtcnVubmluZyB0ZXN0ICVyIGluIHZlcmJvc2UgbW9kZSIgJSB0ZXN0KQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmVyYm9zZSA9IFRydWUKLSAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLCB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICAgICAgbnMudmVyYm9zZSA9IFRydWUKKyAgICAgICAgICAgICAgICBvayA9IHJ1bnRlc3QodGVzdCwgVHJ1ZSwgbnMucXVpZXQsIG5zLmh1bnRybGVha3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCkKICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwogICAgICAgICAgICAgICAgIHByaW50KCkKQEAgLTc5MywxOCArODI2LDE4IEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmFpc2UKIAotICAgIGlmIHNpbmdsZToKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CiAgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgciA9IHRyYWNlci5yZXN1bHRzKCkKLSAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPWNvdmVyZGlyKQorICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9bnMuY292ZXJkaXIpCiAKLSAgICBpZiBydW5sZWFrczoKKyAgICBpZiBucy5ydW5sZWFrczoKICAgICAgICAgb3Muc3lzdGVtKCJsZWFrcyAlZCIgJSBvcy5nZXRwaWQoKSkKIAogICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCBvciBpbnRlcnJ1cHRlZCkKQEAgLTg3Nyw3ICs5MTAsNyBAQAogICAgIGF0ZXhpdC5yZWdpc3RlcihyZXN0b3JlX3N0ZG91dCkKIAogZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAogICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lLAogICAgICAgICAgICAgdGltZW91dD1Ob25lKToKICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdC4KQEAgLTg4NSwxNCArOTE4LDE1IEBACiAgICAgdGVzdCAtLSB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgIHZlcmJvc2UgLS0gaWYgdHJ1ZSwgcHJpbnQgbW9yZSBtZXNzYWdlcwogICAgIHF1aWV0IC0tIGlmIHRydWUsIGRvbid0IHByaW50ICdza2lwcGVkJyBtZXNzYWdlcyAocHJvYmFibHkgcmVkdW5kYW50KQotICAgIHRlc3RfdGltZXMgLS0gYSBsaXN0IG9mICh0aW1lLCB0ZXN0X25hbWUpIHBhaXJzCiAgICAgaHVudHJsZWFrcyAtLSBydW4gbXVsdGlwbGUgdGltZXMgdG8gdGVzdCBmb3IgbGVha3M7IHJlcXVpcmVzIGEgZGVidWcKICAgICAgICAgICAgICAgICAgIGJ1aWxkOyBhIHRyaXBsZSBjb3JyZXNwb25kaW5nIHRvIC1SJ3MgdGhyZWUgYXJndW1lbnRzCisgICAgdXNlX3Jlc291cmNlcyAtLSBsaXN0IG9mIGV4dHJhIHJlc291cmNlcyB0byB1c2UKICAgICBvdXRwdXRfb25fZmFpbHVyZSAtLSBpZiB0cnVlLCBkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUKICAgICB0aW1lb3V0IC0tIGR1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgbW9yZSB0aGFuCiAgICAgICAgICAgICAgICB0aW1lb3V0IHNlY29uZHMKKyAgICBmYWlsZmFzdCwgbWF0Y2hfdGVzdHMgLS0gU2VlIHJlZ3J0ZXN0IGNvbW1hbmQtbGluZSBmbGFncyBmb3IgdGhlc2UuCiAKLSAgICBSZXR1cm5zIG9uZSBvZiB0aGUgdGVzdCByZXN1bHQgY29uc3RhbnRzOgorICAgIFJldHVybnMgdGhlIHR1cGxlIHJlc3VsdCwgdGVzdF90aW1lLCB3aGVyZSByZXN1bHQgaXMgb25lIG9mIHRoZSBjb25zdGFudHM6CiAgICAgICAgIElOVEVSUlVQVEVEICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiBydW4gdW5kZXIgLWoKICAgICAgICAgUkVTT1VSQ0VfREVOSUVEICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKICAgICAgICAgU0tJUFBFRCAgICAgICAgICB0ZXN0IHNraXBwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uCkBAIC05MzAsNyArOTY0LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3RyZWFtCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBGQUlMRUQ6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cmVhbS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3RkZXJyLndyaXRlKG91dHB1dCkKQEAgLTk0MCw3ICs5NzQsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvcmlnX3N0ZGVycgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLAorICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgZmluYWxseToKQEAgLTk5MiwxMCArMTAyNiwxMiBAQAogICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdzeXMucGF0aF9ob29rcycsICdfX2ltcG9ydF9fJywKICAgICAgICAgICAgICAgICAgJ3dhcm5pbmdzLmZpbHRlcnMnLCAnYXN5bmNvcmUuc29ja2V0X21hcCcsCiAgICAgICAgICAgICAgICAgICdsb2dnaW5nLl9oYW5kbGVycycsICdsb2dnaW5nLl9oYW5kbGVyTGlzdCcsICdzeXMuZ2V0dHJhY2UnLAotICAgICAgICAgICAgICAgICAnc3lzLndhcm5vcHRpb25zJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAotICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywKKyAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsCisgICAgICAgICAgICAgICAgICMgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKSBtYXkgcmVsZWFzZSByZWYKKyAgICAgICAgICAgICAgICAgIyB0byBhIHRocmVhZCwgc28gY2hlY2sgcHJvY2Vzc2VzIGZpcnN0LgorICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAogICAgICAgICAgICAgICAgICAnc3lzY29uZmlnLl9DT05GSUdfVkFSUycsICdzeXNjb25maWcuX0lOU1RBTExfU0NIRU1FUycsCi0gICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsCisgICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsICdsb2NhbGUnLCAnd2FybmluZ3Muc2hvd3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CkBAIC0xMTIzLDYgKzExNTksOCBAQAogICAgIGRlZiBnZXRfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYpOgogICAgICAgICBpZiBub3QgbXVsdGlwcm9jZXNzaW5nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBVbmpvaW5lZCBwcm9jZXNzIG9iamVjdHMgY2FuIHN1cnZpdmUgYWZ0ZXIgcHJvY2VzcyBleGl0cworICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCiAgICAgICAgICMgVGhpcyBjb3BpZXMgdGhlIHdlYWtyZWZzIHdpdGhvdXQgbWFraW5nIGFueSBzdHJvbmcgcmVmZXJlbmNlCiAgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcuY29weSgpCiAgICAgZGVmIHJlc3RvcmVfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYsIHNhdmVkKToKQEAgLTExNjQsNiArMTIwMiwyNSBAQAogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHN1cHBvcnQuVEVTVEZOKQogCisgICAgX2xjID0gW2dldGF0dHIobG9jYWxlLCBsYykgZm9yIGxjIGluIGRpcihsb2NhbGUpCisgICAgICAgICAgIGlmIGxjLnN0YXJ0c3dpdGgoJ0xDXycpXQorICAgIGRlZiBnZXRfbG9jYWxlKHNlbGYpOgorICAgICAgICBwYWlyaW5ncyA9IFtdCisgICAgICAgIGZvciBsYyBpbiBzZWxmLl9sYzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYWlyaW5ncy5hcHBlbmQoKGxjLCBsb2NhbGUuc2V0bG9jYWxlKGxjLCBOb25lKSkpCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIHBhaXJpbmdzCisgICAgZGVmIHJlc3RvcmVfbG9jYWxlKHNlbGYsIHNhdmVkKToKKyAgICAgICAgZm9yIGxjLCBzZXR0aW5nIGluIHNhdmVkOgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsYywgc2V0dGluZykKKworICAgIGRlZiBnZXRfd2FybmluZ3Nfc2hvd3dhcm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiB3YXJuaW5ncy5zaG93d2FybmluZworICAgIGRlZiByZXN0b3JlX3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYsIGZ4bik6CisgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gZnhuCisKICAgICBkZWYgcmVzb3VyY2VfaW5mbyhzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5yZXNvdXJjZXM6CiAgICAgICAgICAgICBtZXRob2Rfc3VmZml4ID0gbmFtZS5yZXBsYWNlKCcuJywgJ18nKQpAQCAtMTE5OCw3ICsxMjU1LDcgQEAKIAogCiBkZWYgcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwKLSAgICAgICAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CisgICAgICAgICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkaXNwbGF5X2ZhaWx1cmU9VHJ1ZSk6CiAgICAgc3VwcG9ydC51bmxvYWQodGVzdCkKIAogICAgIHRlc3RfdGltZSA9IDAuMApAQCAtMTIxMSw4ICsxMjY4LDcgQEAKICAgICAgICAgICAgIGFic3Rlc3QgPSAndGVzdC4nICsgdGVzdAogICAgICAgICB3aXRoIHNhdmVkX3Rlc3RfZW52aXJvbm1lbnQodGVzdCwgdmVyYm9zZSwgcXVpZXQpIGFzIGVudmlyb25tZW50OgogICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICB0aGVfcGFja2FnZSA9IF9faW1wb3J0X18oYWJzdGVzdCwgZ2xvYmFscygpLCBsb2NhbHMoKSwgW10pCi0gICAgICAgICAgICB0aGVfbW9kdWxlID0gZ2V0YXR0cih0aGVfcGFja2FnZSwgdGVzdCkKKyAgICAgICAgICAgIHRoZV9tb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShhYnN0ZXN0KQogICAgICAgICAgICAgIyBJZiB0aGUgdGVzdCBoYXMgYSB0ZXN0X21haW4sIHRoYXQgd2lsbCBydW4gdGhlIGFwcHJvcHJpYXRlCiAgICAgICAgICAgICAjIHRlc3RzLiAgSWYgbm90LCB1c2Ugbm9ybWFsIHVuaXR0ZXN0IHRlc3QgbG9hZGluZy4KICAgICAgICAgICAgIHRlc3RfcnVubmVyID0gZ2V0YXR0cih0aGVfbW9kdWxlLCAidGVzdF9tYWluIiwgTm9uZSkKQEAgLTEyMjEsOCArMTI3Nyw3IEBACiAgICAgICAgICAgICAgICAgdGVzdF9ydW5uZXIgPSBsYW1iZGE6IHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RzKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIoKQogICAgICAgICAgICAgaWYgaHVudHJsZWFrczoKLSAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLAotICAgICAgICAgICAgICAgICAgICBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIHJlZmxlYWsgPSBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgdGVzdF9ydW5uZXIsIGh1bnRybGVha3MpCiAgICAgICAgICAgICB0ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKICAgICBleGNlcHQgc3VwcG9ydC5SZXNvdXJjZURlbmllZCBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBxdWlldDoKQEAgLTEzMjgsNDEgKzEzODMsNTAgQEAKICAgICAgICAgZm9yIG9iaiBpbiBhYmMuX19zdWJjbGFzc2VzX18oKSArIFthYmNdOgogICAgICAgICAgICAgYWJjc1tvYmpdID0gb2JqLl9hYmNfcmVnaXN0cnkuY29weSgpCiAKLSAgICBpZiBpbmRpcmVjdF90ZXN0OgotICAgICAgICBkZWYgcnVuX3RoZV90ZXN0KCk6Ci0gICAgICAgICAgICBpbmRpcmVjdF90ZXN0KCkKLSAgICBlbHNlOgotICAgICAgICBkZWYgcnVuX3RoZV90ZXN0KCk6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbdGhlX21vZHVsZS5fX25hbWVfX10KLSAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgdGhlX21vZHVsZS5fX25hbWVfXykKLQotICAgIGRlbHRhcyA9IFtdCiAgICAgbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lID0gaHVudHJsZWFrcwogICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGZuYW1lKQogICAgIHJlcGNvdW50ID0gbndhcm11cCArIG50cmFja2VkCisgICAgcmNfZGVsdGFzID0gWzBdICogcmVwY291bnQKKyAgICBhbGxvY19kZWx0YXMgPSBbMF0gKiByZXBjb3VudAorCiAgICAgcHJpbnQoImJlZ2lubmluZyIsIHJlcGNvdW50LCAicmVwZXRpdGlvbnMiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgcHJpbnQoKCIxMjM0NTY3ODkwIioocmVwY291bnQvLzEwICsgMSkpWzpyZXBjb3VudF0sIGZpbGU9c3lzLnN0ZGVycikKICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQogICAgIGZvciBpIGluIHJhbmdlKHJlcGNvdW50KToKLSAgICAgICAgcmNfYmVmb3JlID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBydW5fdGhlX3Rlc3QoKQorICAgICAgICBpbmRpcmVjdF90ZXN0KCkKKyAgICAgICAgYWxsb2NfYWZ0ZXIsIHJjX2FmdGVyID0gZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQotICAgICAgICByY19hZnRlciA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICAgICAgaWYgaSA+PSBud2FybXVwOgotICAgICAgICAgICAgZGVsdGFzLmFwcGVuZChyY19hZnRlciAtIHJjX2JlZm9yZSkKKyAgICAgICAgICAgIHJjX2RlbHRhc1tpXSA9IHJjX2FmdGVyIC0gcmNfYmVmb3JlCisgICAgICAgICAgICBhbGxvY19kZWx0YXNbaV0gPSBhbGxvY19hZnRlciAtIGFsbG9jX2JlZm9yZQorICAgICAgICBhbGxvY19iZWZvcmUsIHJjX2JlZm9yZSA9IGFsbG9jX2FmdGVyLCByY19hZnRlcgogICAgIHByaW50KGZpbGU9c3lzLnN0ZGVycikKLSAgICBpZiBhbnkoZGVsdGFzKToKLSAgICAgICAgbXNnID0gJyVzIGxlYWtlZCAlcyByZWZlcmVuY2VzLCBzdW09JXMnICUgKHRlc3QsIGRlbHRhcywgc3VtKGRlbHRhcykpCi0gICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKLSAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1yZWZyZXApCi0gICAgICAgICAgICByZWZyZXAuZmx1c2goKQotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQorICAgICMgVGhlc2UgY2hlY2tlcnMgcmV0dXJuIEZhbHNlIG9uIHN1Y2Nlc3MsIFRydWUgb24gZmFpbHVyZQorICAgIGRlZiBjaGVja19yY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgcmV0dXJuIGFueShkZWx0YXMpCisgICAgZGVmIGNoZWNrX2FsbG9jX2RlbHRhcyhkZWx0YXMpOgorICAgICAgICAjIEF0IGxlYXN0IDEvM3JkIG9mIDBzCisgICAgICAgIGlmIDMgKiBkZWx0YXMuY291bnQoMCkgPCBsZW4oZGVsdGFzKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgTm90aGluZyBlbHNlIHRoYW4gMXMsIDBzIGFuZCAtMXMKKyAgICAgICAgaWYgbm90IHNldChkZWx0YXMpIDw9IHsxLDAsLTF9OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZmFpbGVkID0gRmFsc2UKKyAgICBmb3IgZGVsdGFzLCBpdGVtX25hbWUsIGNoZWNrZXIgaW4gWworICAgICAgICAocmNfZGVsdGFzLCAncmVmZXJlbmNlcycsIGNoZWNrX3JjX2RlbHRhcyksCisgICAgICAgIChhbGxvY19kZWx0YXMsICdtZW1vcnkgYmxvY2tzJywgY2hlY2tfYWxsb2NfZGVsdGFzKV06CisgICAgICAgIGlmIGNoZWNrZXIoZGVsdGFzKToKKyAgICAgICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgJXMsIHN1bT0lcycgJSAoCisgICAgICAgICAgICAgICAgdGVzdCwgZGVsdGFzW253YXJtdXA6XSwgaXRlbV9uYW1lLCBzdW0oZGVsdGFzKSkKKyAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJhIikgYXMgcmVmcmVwOgorICAgICAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1yZWZyZXApCisgICAgICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKKyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICByZXR1cm4gZmFpbGVkCiAKIGRlZiBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKToKICAgICBpbXBvcnQgZ2MsIGNvcHlyZWcKQEAgLTE0MjgsOCArMTQ5MiwxMSBAQAogICAgIGVsc2U6CiAgICAgICAgIGN0eXBlcy5fcmVzZXRfY2FjaGUoKQogCi0gICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaC4KKyAgICAjIENvbGxlY3QgY3ljbGljIHRyYXNoIGFuZCByZWFkIG1lbW9yeSBzdGF0aXN0aWNzIGltbWVkaWF0ZWx5IGFmdGVyLgorICAgIGZ1bmMxID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcworICAgIGZ1bmMyID0gc3lzLmdldHRvdGFscmVmY291bnQKICAgICBnYy5jb2xsZWN0KCkKKyAgICByZXR1cm4gZnVuYzEoKSwgZnVuYzIoKQogCiBkZWYgd2FybV9jYWNoZXMoKToKICAgICAjIGNoYXIgY2FjaGUKQEAgLTE0NzIsMzA3ICsxNTM5LDEwIEBACiAgICAgcHJpbnQoZmlsbCgnICcuam9pbihzdHIoZWx0KSBmb3IgZWx0IGluIHNvcnRlZCh4KSksIHdpZHRoLAogICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9YmxhbmtzLCBzdWJzZXF1ZW50X2luZGVudD1ibGFua3MpKQogCi0jIE1hcCBzeXMucGxhdGZvcm0gdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFzZW5hbWVzIG9mIHRlc3RzCi0jIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gdGhhdCBwbGF0Zm9ybS4KLSMKLSMgU3BlY2lhbCBjYXNlczoKLSMgICAgIHRlc3RfcGVwMjc3Ci0jICAgICAgICAgVGhlIF9FeHBlY3RlZFNraXBzIGNvbnN0cnVjdG9yIGFkZHMgdGhpcyB0byB0aGUgc2V0IG9mIGV4cGVjdGVkCi0jICAgICAgICAgc2tpcHMgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMuCi0jICAgICB0ZXN0X3RpbWVvdXQKLSMgICAgICAgICBDb250cm9sbGVkIGJ5IHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkLiAgUmVxdWlyZXMgdGhlIG5ldHdvcmsKLSMgICAgICAgICByZXNvdXJjZSBhbmQgYSBzb2NrZXQgbW9kdWxlLgotIwotIyBUZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBza2lwcGVkIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIG9uZSBwbGF0Zm9ybQotIyBhcmUgYWxzbyBoYW5kbGVkIHNlcGFyYXRlbHkuCiAKLV9leHBlY3RhdGlvbnMgPSAoCi0gICAgKCd3aW4zMicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X19sb2NhbGUKLSAgICAgICAgdGVzdF9jcnlwdAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9mY250bAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZGJtX25kYm0KLSAgICAgICAgdGVzdF9ncnAKLSAgICAgICAgdGVzdF9pb2N0bAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BpcGVzCi0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICB0ZXN0X3Bvc2l4Ci0gICAgICAgIHRlc3RfcHR5Ci0gICAgICAgIHRlc3RfcHdkCi0gICAgICAgIHRlc3RfcmVzb3VyY2UKLSAgICAgICAgdGVzdF9zaWduYWwKLSAgICAgICAgdGVzdF9zeXNsb2cKLSAgICAgICAgdGVzdF90aHJlYWRzaWduYWxzCi0gICAgICAgIHRlc3Rfd2FpdDMKLSAgICAgICAgdGVzdF93YWl0NAotICAgICAgICAiIiIpLAotICAgICgnbGludXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgIiIiKSwKLSAgICAoJ3VuaXh3YXJlJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgIiIiKSwKLSAgICAoJ29wZW51bml4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgIiIiKSwKLSAgICAoJ3Njb19zdicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2FzeW5jaGF0Ci0gICAgICAgIHRlc3RfZm9yazEKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2dldHRleHQKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9xdWV1ZQotICAgICAgICB0ZXN0X3NheAotICAgICAgICB0ZXN0X3N1bmRyeQotICAgICAgICB0ZXN0X3RocmVhZAotICAgICAgICB0ZXN0X3RocmVhZGVkX2ltcG9ydAotICAgICAgICB0ZXN0X3RocmVhZGVkdGVtcGZpbGUKLSAgICAgICAgdGVzdF90aHJlYWRpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ2RhcndpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X19sb2NhbGUKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ2RiCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICAiIiIpLAotICAgICgnc3Vub3MnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3ppcGZpbGUKLSAgICAgICAgdGVzdF96bGliCi0gICAgICAgICIiIiksCi0gICAgKCdocC11eCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2d6aXAKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnY3lnd2luJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICAiIiIpLAotICAgICgnb3MyZW14JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfYXVkaW9vcAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbW1hcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgICIiIiksCi0gICAgKCdmcmVlYnNkJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcGVwMjc3Ci0gICAgICAgIHRlc3RfcHR5Ci0gICAgICAgIHRlc3Rfc29ja2V0c2VydmVyCi0gICAgICAgIHRlc3RfdGNsCi0gICAgICAgIHRlc3RfdGsKLSAgICAgICAgdGVzdF90dGtfZ3Vpb25seQotICAgICAgICB0ZXN0X3R0a190ZXh0b25seQotICAgICAgICB0ZXN0X3RpbWVvdXQKLSAgICAgICAgdGVzdF91cmxsaWJuZXQKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ2FpeCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2J6MgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2d6aXAKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF96aXBpbXBvcnQKLSAgICAgICAgdGVzdF96bGliCi0gICAgICAgICIiIiksCi0gICAgKCdvcGVuYnNkJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3R5cGVzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X25vcm1hbGl6YXRpb24KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ25ldGJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSkKLQotY2xhc3MgX0V4cGVjdGVkU2tpcHM6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MucGF0aAotICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdGltZW91dAotCi0gICAgICAgIHNlbGYudmFsaWQgPSBGYWxzZQotICAgICAgICBleHBlY3RlZCA9IE5vbmUKLSAgICAgICAgZm9yIGl0ZW0gaW4gX2V4cGVjdGF0aW9uczoKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKGl0ZW1bMF0pOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gaXRlbVsxXQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGV4cGVjdGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5leHBlY3RlZCA9IHNldChleHBlY3RlZC5zcGxpdCgpKQotCi0gICAgICAgICAgICAjIFRoZXNlIGFyZSBicm9rZW4gdGVzdHMsIGZvciBub3cgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybS4KLSAgICAgICAgICAgICMgWFhYIEZpeCB0aGVzZSEKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X25pcycpCi0KLSAgICAgICAgICAgICMgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybSwgZXZlbiBMaW51eAotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcGVwMjc3JykKLQotICAgICAgICAgICAgIyBkb2N0ZXN0LCBwcm9maWxlIGFuZCBjUHJvZmlsZSB0ZXN0cyBmYWlsIHdoZW4gdGhlIGNvZGVjIGZvciB0aGUKLSAgICAgICAgICAgICMgZnMgZW5jb2RpbmcgaXNuJ3QgYnVpbHQgaW4gYmVjYXVzZSBQeVVuaWNvZGVfRGVjb2RlKCkgYWRkcyB0d28KLSAgICAgICAgICAgICMgY2FsbHMgaW50byBQeXRob24uCi0gICAgICAgICAgICBlbmNzID0gKCJ1dGYtOCIsICJsYXRpbi0xIiwgImFzY2lpIiwgIm1iY3MiLCAidXRmLTE2IiwgInV0Zi0zMiIpCi0gICAgICAgICAgICBpZiBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkubG93ZXIoKSBub3QgaW4gZW5jczoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9wcm9maWxlJykKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9jUHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfZG9jdGVzdCcpCi0KLSAgICAgICAgICAgIGlmIHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3RpbWVvdXQnKQotCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKLSAgICAgICAgICAgICAgICAjIHRlc3Rfc3FsaXRlIGlzIG9ubHkgcmVsaWFibGUgb24gV2luZG93cyB3aGVyZSB0aGUgbGlicmFyeQotICAgICAgICAgICAgICAgICMgaXMgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24KLSAgICAgICAgICAgICAgICBXSU5fT05MWSA9IHsidGVzdF91bmljb2RlX2ZpbGUiLCAidGVzdF93aW5yZWciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dpbnNvdW5kIiwgInRlc3Rfc3RhcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zcWxpdGUiLCAidGVzdF9tc2lsaWIifQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgfD0gV0lOX09OTFkKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdzdW5vczUnOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X25pcycpCi0KLSAgICAgICAgICAgIGlmIHN1cHBvcnQucHl0aG9uX2lzX29wdGltaXplZCgpOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCJ0ZXN0X2dkYiIpCi0KLSAgICAgICAgICAgIHNlbGYudmFsaWQgPSBUcnVlCi0KLSAgICBkZWYgaXN2YWxpZChzZWxmKToKLSAgICAgICAgIlJldHVybiB0cnVlIGlmZiBfRXhwZWN0ZWRTa2lwcyBrbm93cyBhYm91dCB0aGUgY3VycmVudCBwbGF0Zm9ybS4iCi0gICAgICAgIHJldHVybiBzZWxmLnZhbGlkCi0KLSAgICBkZWYgZ2V0ZXhwZWN0ZWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBzZXQgb2YgdGVzdCBuYW1lcyB3ZSBleHBlY3QgdG8gc2tpcCBvbiBjdXJyZW50IHBsYXRmb3JtLgotCi0gICAgICAgIHNlbGYuaXN2YWxpZCgpIG11c3QgYmUgdHJ1ZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgYXNzZXJ0IHNlbGYuaXN2YWxpZCgpCi0gICAgICAgIHJldHVybiBzZWxmLmV4cGVjdGVkCi0KLWRlZiBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUik6Ci0gICAgIyBXaGVuIHRlc3RzIGFyZSBydW4gZnJvbSB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgaXQgaXMgYmVzdCBwcmFjdGljZQotICAgICMgdG8ga2VlcCB0aGUgdGVzdCBmaWxlcyBpbiBhIHN1YmZvbGRlci4gIEl0IGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCi0gICAgIyBmaWxlcyB1c2luZyBjb21tYW5kICJtYWtlIGRpc3RjbGVhbiIuCitkZWYgbWFpbl9pbl90ZW1wX2N3ZCgpOgorICAgICIiIlJ1biBtYWluKCkgaW4gYSB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkuIiIiCiAgICAgaWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgotICAgICAgICBURU1QRElSID0gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJyksICdidWlsZCcpCi0gICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoVEVNUERJUikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIoVEVNUERJUikKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKQEAgLTE3ODEsMTAgKzE1NTEsMTYgQEAKICAgICAjIERlZmluZSBhIHdyaXRhYmxlIHRlbXAgZGlyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGN3ZCB3aGlsZSBydW5uaW5nCiAgICAgIyB0aGUgdGVzdHMuIFRoZSBuYW1lIG9mIHRoZSBkaXIgaW5jbHVkZXMgdGhlIHBpZCB0byBhbGxvdyBwYXJhbGxlbAogICAgICMgdGVzdGluZyAoc2VlIHRoZSAtaiBvcHRpb24pLgotICAgIFRFU1RDV0QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9ICd0ZXN0X3B5dGhvbl97fScuZm9ybWF0KG9zLmdldHBpZCgpKQorICAgIHRlc3RfY3dkID0gb3MucGF0aC5qb2luKFRFTVBESVIsIHRlc3RfY3dkKQogCi0gICAgVEVTVENXRCA9IG9zLnBhdGguam9pbihURU1QRElSLCBURVNUQ1dEKQotICAgIHJldHVybiBURU1QRElSLCBURVNUQ1dECisgICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJpbHkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKKyAgICAjIHRlbXBvcmFyeSBhbmQgd3JpdGFibGUgZGlyZWN0b3J5LiAgSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisgICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuICBUaGUgb3JpZ2luYWwgQ1dEIGlzCisgICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgorICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0ZXN0X2N3ZCwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgIG1haW4oKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgIyBSZW1vdmUgcmVncnRlc3QucHkncyBvd24gZGlyZWN0b3J5IGZyb20gdGhlIG1vZHVsZSBzZWFyY2ggcGF0aC4gRGVzcGl0ZQpAQCAtMTgwOCwxMSArMTU4NCw0IEBACiAgICAgIyBzYW5pdHkgY2hlY2sKICAgICBhc3NlcnQgX19maWxlX18gPT0gb3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKQogCi0gICAgVEVNUERJUiwgVEVTVENXRCA9IF9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChURU1QRElSKQotCi0gICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCi0gICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCi0gICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSAgICAjIGF2YWlsYWJsZSBmcm9tIHN1cHBvcnQuU0FWRURDV0QuCi0gICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgotICAgICAgICBtYWluKCkKKyAgICBtYWluX2luX3RlbXBfY3dkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsIGIvTGliL3Rlc3QvcmV2b2NhdGlvbi5jcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4OWIwOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnBqQ0Jqd0lCQVRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWVdURW1NQ1FHQTFVRQorQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVkJBTU1EVzkxY2kxagorWVMxelpYSjJaWElYRFRFek1URXlNVEUzTURnME4xb1hEVEl6TURrek1ERTNNRGcwTjFxZ0RqQU1NQW9HQTFVZAorRkFRREFnRUFNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUNOSlhDMm1WS2F1RWVOM0xsUTNadE01Z2tIM0V4SAorK2k0Ym1KanRKbjQ5N1d3dnZvSWVVZHJtVlhnSlFSOTNSdFYzN2had04wU1hNTGxObVVaUEg0ckhoaWhheXc0bQordW5DelZqL09oQ0NZNy9UUGpLdUoxTy8wWGhhTEJwQlZqUU43Ui8xdWpvUktiU2lhL0NEM3ZjbjdGcXh6dzdMSworZlNSQ0tSR1RqMUNaaXV4cnBodEZjaHdBTFhTaUZEeTltcjJaS2hJbWN5cTFQeWRmZ0V6VTc4QVBwT2tNUXNJQworVU5KL2NmM2M5ZW16ZitkVXRjTUVjZWpRM215bkJvNGVJR2cxRVc0MmJ6NHE0aFNqelFsS2NCVjBtdXc1cVhoYworSE94SDJpVEZoUTdTcnZWdUsvZE0xNHJZTTRCNW1TWDNuUkMxa05tWHBTOWozd0pEaHV3bWpIZWQKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CmluZGV4IGFiMjAxNjQuLjRkNWMxZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpAQCAtMTIsMTMgKzEyLDIyIEBACiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCi1mcm9tIGltcCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljLCBzdHJpcF9weXRob25fc3RkZXJyLCB0ZW1wX2RpcgogCiAjIEV4ZWN1dGluZyB0aGUgaW50ZXJwcmV0ZXIgaW4gYSBzdWJwcm9jZXNzCiBkZWYgX2Fzc2VydF9weXRob24oZXhwZWN0ZWRfc3VjY2VzcywgKmFyZ3MsICoqZW52X3ZhcnMpOgotICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlXQotICAgIGlmIG5vdCBlbnZfdmFyczoKKyAgICBpZiAnX19pc29sYXRlZCcgaW4gZW52X3ZhcnM6CisgICAgICAgIGlzb2xhdGVkID0gZW52X3ZhcnMucG9wKCdfX2lzb2xhdGVkJykKKyAgICBlbHNlOgorICAgICAgICBpc29sYXRlZCA9IG5vdCBlbnZfdmFycworICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLVgnLCAnZmF1bHRoYW5kbGVyJ10KKyAgICBpZiBpc29sYXRlZDoKKyAgICAgICAgIyBpc29sYXRlZCBtb2RlOiBpZ25vcmUgUHl0aG9uIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWdub3JlIHVzZXIKKyAgICAgICAgIyBzaXRlLXBhY2thZ2VzLCBhbmQgZG9uJ3QgYWRkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBzeXMucGF0aAorICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1JJykKKyAgICBlbGlmIG5vdCBlbnZfdmFyczoKKyAgICAgICAgIyBpZ25vcmUgUHl0aG9uIGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1FJykKICAgICAjIE5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LCBmb3IgaW4tcGxhY2UgdGVzdGluZyBvZgogICAgICMgc2hhcmVkIGxpYnJhcnkgYnVpbGRzLgpAQCAtMzksNyArNDgsNyBAQAogICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCiAgICAgICAgIHAuc3RkZXJyLmNsb3NlKCkKICAgICByYyA9IHAucmV0dXJuY29kZQotICAgIGVyciA9ICBzdHJpcF9weXRob25fc3RkZXJyKGVycikKKyAgICBlcnIgPSBzdHJpcF9weXRob25fc3RkZXJyKGVycikKICAgICBpZiAocmMgYW5kIGV4cGVjdGVkX3N1Y2Nlc3MpIG9yIChub3QgcmMgYW5kIG5vdCBleHBlY3RlZF9zdWNjZXNzKToKICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAiUHJvY2VzcyByZXR1cm4gY29kZSBpcyAlZCwgIgpAQCAtNDksMTggKzU4LDMyIEBACiBkZWYgYXNzZXJ0X3B5dGhvbl9vaygqYXJncywgKiplbnZfdmFycyk6CiAgICAgIiIiCiAgICAgQXNzZXJ0IHRoYXQgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBgYXJnc2AgYW5kIG9wdGlvbmFsIGVudmlyb25tZW50Ci0gICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgaXMgb2sgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LCBzdGRlcnIpIHR1cGxlLgorICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIHN1Y2NlZWRzIChyYyA9PSAwKSBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsCisgICAgc3RkZXJyKSB0dXBsZS4KKworICAgIElmIHRoZSBfX2NsZWFuZW52IGtleXdvcmQgaXMgc2V0LCBlbnZfdmFycyBpcyB1c2VkIGEgZnJlc2ggZW52aXJvbm1lbnQuCisKKyAgICBQeXRob24gaXMgc3RhcnRlZCBpbiBpc29sYXRlZCBtb2RlIChjb21tYW5kIGxpbmUgb3B0aW9uIC1JKSwKKyAgICBleGNlcHQgaWYgdGhlIF9faXNvbGF0ZWQga2V5d29yZCBpcyBzZXQgdG8gRmFsc2UuCiAgICAgIiIiCiAgICAgcmV0dXJuIF9hc3NlcnRfcHl0aG9uKFRydWUsICphcmdzLCAqKmVudl92YXJzKQogCiBkZWYgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiIKICAgICBBc3NlcnQgdGhhdCBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGBhcmdzYCBhbmQgb3B0aW9uYWwgZW52aXJvbm1lbnQKLSAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBmYWlscyBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGUuCisgICAgdmFyaWFibGVzIGBlbnZfdmFyc2AgZmFpbHMgKHJjICE9IDApIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwKKyAgICBzdGRlcnIpIHR1cGxlLgorCisgICAgU2VlIGFzc2VydF9weXRob25fb2soKSBmb3IgbW9yZSBvcHRpb25zLgogICAgICIiIgogICAgIHJldHVybiBfYXNzZXJ0X3B5dGhvbihGYWxzZSwgKmFyZ3MsICoqZW52X3ZhcnMpCiAKIGRlZiBzcGF3bl9weXRob24oKmFyZ3MsICoqa3cpOgorICAgICIiIlJ1biBhIFB5dGhvbiBzdWJwcm9jZXNzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKworICAgIGt3IGlzIGV4dHJhIGtleXdvcmQgYXJncyB0byBwYXNzIHRvIHN1YnByb2Nlc3MuUG9wZW4uIFJldHVybnMgYSBQb3BlbgorICAgIG9iamVjdC4KKyAgICAiIiIKICAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJ10KICAgICBjbWRfbGluZS5leHRlbmQoYXJncykKICAgICByZXR1cm4gc3VicHJvY2Vzcy5Qb3BlbihjbWRfbGluZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNjgsNiArOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3cpCiAKIGRlZiBraWxsX3B5dGhvbihwKToKKyAgICAiIiJSdW4gdGhlIGdpdmVuIFBvcGVuIHByb2Nlc3MgdW50aWwgY29tcGxldGlvbiBhbmQgcmV0dXJuIHN0ZG91dC4iIiIKICAgICBwLnN0ZGluLmNsb3NlKCkKICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpCiAgICAgcC5zdGRvdXQuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc29ydHBlcmYucHkgYi9MaWIvdGVzdC9zb3J0cGVyZi5weQppbmRleCBhZjdjMGI0Li45MDcyMmY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zb3J0cGVyZi5weQorKysgYi9MaWIvdGVzdC9zb3J0cGVyZi5weQpAQCAtMjIsNyArMjIsNyBAQAogICAgIGZuID0gb3MucGF0aC5qb2luKHRkLCAicnIlMDZkIiAlIG4pCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oZm4sICJyYiIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHIgPSByYW5kb20ucmFuZG9tCiAgICAgICAgIHJlc3VsdCA9IFtyKCkgZm9yIGkgaW4gcmFuZ2UobildCiAgICAgICAgIHRyeToKQEAgLTM1LDkgKzM1LDkgQEAKICAgICAgICAgICAgICAgICBpZiBmcDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJjYW4ndCB3cml0ZSIsIGZuLCAiOiIsIG1zZykKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBtYXJzaGFsLmxvYWQoZnApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zc2xfc2VydmVycy5weSBiL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CmluZGV4IDg2ODYxNTMuLjc1OWIzZjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CisrKyBiL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5CkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICAgICAgc3NsY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIHNvY2tldCBlcnJvcnMgYXJlIHNpbGVuY2VkIGJ5IHRoZSBjYWxsZXIsIHByaW50IHRoZW0gaGVyZQogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkdvdCBhbiBlcnJvcjpcbiVzXG4iICUgZSkKQEAgLTE0Nyw5ICsxNDcsMTEgQEAKICAgICAgICAgc2VsZi5zZXJ2ZXIuc2h1dGRvd24oKQogCiAKLWRlZiBtYWtlX2h0dHBzX3NlcnZlcihjYXNlLCBjZXJ0ZmlsZT1DRVJURklMRSwgaG9zdD1IT1NULCBoYW5kbGVyX2NsYXNzPU5vbmUpOgotICAgICMgd2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorZGVmIG1ha2VfaHR0cHNfc2VydmVyKGNhc2UsICosIGNvbnRleHQ9Tm9uZSwgY2VydGZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgaG9zdD1IT1NULCBoYW5kbGVyX2NsYXNzPU5vbmUpOgorICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgIyBXZSBhc3N1bWUgdGhlIGNlcnRmaWxlIGNvbnRhaW5zIGJvdGggcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlCiAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUpCiAgICAgc2VydmVyID0gSFRUUFNTZXJ2ZXJUaHJlYWQoY29udGV4dCwgaG9zdCwgaGFuZGxlcl9jbGFzcykKICAgICBmbGFnID0gdGhyZWFkaW5nLkV2ZW50KCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NzbHRlc3RzLnB5IGIvTGliL3Rlc3Qvc3NsdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWIwZWQyMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3NzbHRlc3RzLnB5CkBAIC0wLDAgKzEsMjIgQEAKKyMgQ29udmVuaWVuY2UgdGVzdCBtb2R1bGUgdG8gcnVuIGFsbCBvZiB0aGUgU1NMLXJlbGF0ZWQgdGVzdHMgaW4gdGhlCisjIHN0YW5kYXJkIGxpYnJhcnkuCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCisKK1RFU1RTID0gWyd0ZXN0X2FzeW5jaW8nLCAndGVzdF9mdHBsaWInLCAndGVzdF9oYXNobGliJywgJ3Rlc3RfaHR0cGxpYicsCisgICAgICAgICAndGVzdF9pbWFwbGliJywgJ3Rlc3Rfbm50cGxpYicsICd0ZXN0X3BvcGxpYicsICd0ZXN0X3NtdHBsaWInLAorICAgICAgICAgJ3Rlc3Rfc210cG5ldCcsICd0ZXN0X3VybGxpYjJfbG9jYWxuZXQnLCAndGVzdF92ZW52J10KKworZGVmIHJ1bl9yZWdydGVzdHMoKmV4dHJhX2FyZ3MpOgorICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICItbSIsICJ0ZXN0Il0KKyAgICBpZiBub3QgZXh0cmFfYXJnczoKKyAgICAgICAgYXJncy5hcHBlbmQoIi11bmV0d29yayIpCisgICAgZWxzZToKKyAgICAgICAgYXJncy5leHRlbmQoZXh0cmFfYXJncykKKyAgICBhcmdzLmV4dGVuZChURVNUUykKKyAgICByZXN1bHQgPSBzdWJwcm9jZXNzLmNhbGwoYXJncykKKyAgICBzeXMuZXhpdChyZXN1bHQpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVuX3JlZ3J0ZXN0cygqc3lzLmFyZ3ZbMTpdKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5IGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CmluZGV4IDFkNzAzODUuLjMwNzg0ZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQorKysgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKQEAgLTMyOCwxMyArMzI4LDI2IEBACiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAndXBwZXInLCA0MikKIAogICAgIGRlZiB0ZXN0X2V4cGFuZHRhYnMoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnKQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgOCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYiAgZGVmXG5nICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA0KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICBkZWZcbmcgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJcbmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgOCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgIyBjaGVjayBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCB0YWJzaXplPTgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIHRhYnNpemU9NCkKKwogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJyAgYVxuIGInLCAnIFx0YVxuXHRiJywgJ2V4cGFuZHRhYnMnLCAxKQogCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAnZXhwYW5kdGFicycsIDQyLCA0MikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weSBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQppbmRleCAxZjYxZTEzLi5kMTJiZDk1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKKysrIGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CkBAIC0xLDE3ICsxLDI3IEBACiAiIiJXaGVuIGNhbGxlZCBhcyBhIHNjcmlwdCwgcHJpbnQgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0aGUgb3BlbgotZmlsZSBkZXNjcmlwdG9ycyBvbiBzdGRvdXQuIiIiCitmaWxlIGRlc2NyaXB0b3JzIG9uIHN0ZG91dC4KKworVXNhZ2U6CitmZF9zdGF0cy5weTogY2hlY2sgYWxsIGZpbGUgZGVzY3JpcHRvcnMKK2ZkX3N0YXR1cy5weSBmZDEgZmQyIC4uLjogY2hlY2sgb25seSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9ycworIiIiCiAKIGltcG9ydCBlcnJubwogaW1wb3J0IG9zCi0KLXRyeToKLSAgICBfTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCi1leGNlcHQ6Ci0gICAgX01BWEZEID0gMjU2CitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIGZkcyA9IFtdCi0gICAgZm9yIGZkIGluIHJhbmdlKDAsIF9NQVhGRCk6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBfTUFYRkQgPSBvcy5zeXNjb25mKCJTQ19PUEVOX01BWCIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIF9NQVhGRCA9IDI1NgorICAgICAgICB0ZXN0X2ZkcyA9IHJhbmdlKDAsIF9NQVhGRCkKKyAgICBlbHNlOgorICAgICAgICB0ZXN0X2ZkcyA9IG1hcChpbnQsIHN5cy5hcmd2WzE6XSkKKyAgICBmb3IgZmQgaW4gdGVzdF9mZHM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZmQpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CkBAIC0xOSw2ICsyOSw2IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICMgSWdub3JlIFNvbGFyaXMgZG9vciBmaWxlcwotICAgICAgICBpZiBzdC5zdF9tb2RlICYgMHhGMDAwICE9IDB4ZDAwMDoKKyAgICAgICAgaWYgbm90IHN0YXQuU19JU0RPT1Ioc3Quc3RfbW9kZSk6CiAgICAgICAgICAgICBmZHMuYXBwZW5kKGZkKQogICAgIHByaW50KCcsJy5qb2luKG1hcChzdHIsIGZkcykpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKaW5kZXggMjMzYjEzYS4uYTI0MmE0NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CkBAIC0xNSwxMCArMTUsMTAgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBjb2xsZWN0aW9ucy5hYmMKIGltcG9ydCByZQogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBpbXAKIGltcG9ydCB0aW1lCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgZm5tYXRjaApAQCAtNTcsMjYgKzU3LDQ5IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbHptYSA9IE5vbmUKIAordHJ5OgorICAgIGltcG9ydCByZXNvdXJjZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHJlc291cmNlID0gTm9uZQorCiBfX2FsbF9fID0gWwotICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwgImltcG9ydF9tb2R1bGUiLCAidmVyYm9zZSIsCi0gICAgInVzZV9yZXNvdXJjZXMiLCAibWF4X21lbXVzZSIsICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwKLSAgICAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJ1bmxvYWQiLCAidW5saW5rIiwgInJtdHJlZSIsICJmb3JnZXQiLAorICAgICMgZ2xvYmFscworICAgICJQSVBFX01BWF9TSVpFIiwgInZlcmJvc2UiLCAibWF4X21lbXVzZSIsICJ1c2VfcmVzb3VyY2VzIiwgImZhaWxmYXN0IiwKKyAgICAjIGV4Y2VwdGlvbnMKKyAgICAiRXJyb3IiLCAiVGVzdEZhaWxlZCIsICJSZXNvdXJjZURlbmllZCIsCisgICAgIyBpbXBvcnRzCisgICAgImltcG9ydF9tb2R1bGUiLCAiaW1wb3J0X2ZyZXNoX21vZHVsZSIsICJDbGVhbkltcG9ydCIsCisgICAgIyBtb2R1bGVzCisgICAgInVubG9hZCIsICJmb3JnZXQiLAorICAgICMgaW8KKyAgICAicmVjb3JkX29yaWdpbmFsX3N0ZG91dCIsICJnZXRfb3JpZ2luYWxfc3Rkb3V0IiwgImNhcHR1cmVkX3N0ZG91dCIsCisgICAgImNhcHR1cmVkX3N0ZGluIiwgImNhcHR1cmVkX3N0ZGVyciIsCisgICAgIyBmaWxlc3lzdGVtCisgICAgIlRFU1RGTiIsICJTQVZFRENXRCIsICJ1bmxpbmsiLCAicm10cmVlIiwgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwKKyAgICAiY3JlYXRlX2VtcHR5X2ZpbGUiLCAiY2FuX3N5bWxpbmsiLCAiZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZSIsCisgICAgIyB1bml0dGVzdAogICAgICJpc19yZXNvdXJjZV9lbmFibGVkIiwgInJlcXVpcmVzIiwgInJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbiIsCi0gICAgInJlcXVpcmVzX2xpbnV4X3ZlcnNpb24iLCAicmVxdWlyZXNfbWFjX3ZlciIsICJmaW5kX3VudXNlZF9wb3J0IiwKLSAgICAiYmluZF9wb3J0IiwgIklQVjZfRU5BQkxFRCIsICJpc19qeXRob24iLCAiVEVTVEZOIiwgIkhPU1QiLCAiU0FWRURDV0QiLAotICAgICJ0ZW1wX2N3ZCIsICJmaW5kZmlsZSIsICJjcmVhdGVfZW1wdHlfZmlsZSIsICJzb3J0ZGljdCIsCi0gICAgImNoZWNrX3N5bnRheF9lcnJvciIsICJvcGVuX3VybHJlc291cmNlIiwgImNoZWNrX3dhcm5pbmdzIiwgIkNsZWFuSW1wb3J0IiwKLSAgICAiRW52aXJvbm1lbnRWYXJHdWFyZCIsICJUcmFuc2llbnRSZXNvdXJjZSIsICJjYXB0dXJlZF9zdGRvdXQiLAotICAgICJjYXB0dXJlZF9zdGRpbiIsICJjYXB0dXJlZF9zdGRlcnIiLCAidGltZV9vdXQiLCAic29ja2V0X3BlZXJfcmVzZXQiLAotICAgICJpb2Vycm9yX3BlZXJfcmVzZXQiLCAicnVuX3dpdGhfbG9jYWxlIiwgJ3RlbXBfdW1hc2snLAotICAgICJ0cmFuc2llbnRfaW50ZXJuZXQiLCAic2V0X21lbWxpbWl0IiwgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsCi0gICAgIkJhc2ljVGVzdFJ1bm5lciIsICJydW5fdW5pdHRlc3QiLCAicnVuX2RvY3Rlc3QiLCAidGhyZWFkaW5nX3NldHVwIiwKLSAgICAidGhyZWFkaW5nX2NsZWFudXAiLCAicmVhcF9jaGlsZHJlbiIsICJjcHl0aG9uX29ubHkiLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAotICAgICJnZXRfYXR0cmlidXRlIiwgInN3YXBfaXRlbSIsICJzd2FwX2F0dHIiLCAicmVxdWlyZXNfSUVFRV83NTQiLAotICAgICJUZXN0SGFuZGxlciIsICJNYXRjaGVyIiwgImNhbl9zeW1saW5rIiwgInNraXBfdW5sZXNzX3N5bWxpbmsiLAotICAgICJza2lwX3VubGVzc194YXR0ciIsICJpbXBvcnRfZnJlc2hfbW9kdWxlIiwgInJlcXVpcmVzX3psaWIiLAotICAgICJQSVBFX01BWF9TSVpFIiwgImZhaWxmYXN0IiwgImFudGljaXBhdGVfZmFpbHVyZSIsICJydW5fd2l0aF90eiIsCi0gICAgInJlcXVpcmVzX2d6aXAiLCAicmVxdWlyZXNfYnoyIiwgInJlcXVpcmVzX2x6bWEiLCAic3VwcHJlc3NfY3Jhc2hfcG9wdXAiLAorICAgICJyZXF1aXJlc19saW51eF92ZXJzaW9uIiwgInJlcXVpcmVzX21hY192ZXIiLCAiY2hlY2tfc3ludGF4X2Vycm9yIiwKKyAgICAiVHJhbnNpZW50UmVzb3VyY2UiLCAidGltZV9vdXQiLCAic29ja2V0X3BlZXJfcmVzZXQiLCAiaW9lcnJvcl9wZWVyX3Jlc2V0IiwKKyAgICAidHJhbnNpZW50X2ludGVybmV0IiwgIkJhc2ljVGVzdFJ1bm5lciIsICJydW5fdW5pdHRlc3QiLCAicnVuX2RvY3Rlc3QiLAorICAgICJza2lwX3VubGVzc19zeW1saW5rIiwgInJlcXVpcmVzX2d6aXAiLCAicmVxdWlyZXNfYnoyIiwgInJlcXVpcmVzX2x6bWEiLAorICAgICJiaWdtZW10ZXN0IiwgImJpZ2FkZHJzcGFjZXRlc3QiLCAiY3B5dGhvbl9vbmx5IiwgImdldF9hdHRyaWJ1dGUiLAorICAgICJyZXF1aXJlc19JRUVFXzc1NCIsICJza2lwX3VubGVzc194YXR0ciIsICJyZXF1aXJlc196bGliIiwKKyAgICAiYW50aWNpcGF0ZV9mYWlsdXJlIiwKKyAgICAjIHN5cworICAgICJpc19qeXRob24iLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAorICAgICMgbmV0d29yaworICAgICJIT1NUIiwgIklQVjZfRU5BQkxFRCIsICJmaW5kX3VudXNlZF9wb3J0IiwgImJpbmRfcG9ydCIsICJvcGVuX3VybHJlc291cmNlIiwKKyAgICAjIHByb2Nlc3NlcworICAgICd0ZW1wX3VtYXNrJywgInJlYXBfY2hpbGRyZW4iLAorICAgICMgbG9nZ2luZworICAgICJUZXN0SGFuZGxlciIsCisgICAgIyB0aHJlYWRzCisgICAgInRocmVhZGluZ19zZXR1cCIsICJ0aHJlYWRpbmdfY2xlYW51cCIsCisgICAgIyBtaXNjZWxsYW5lb3VzCisgICAgImNoZWNrX3dhcm5pbmdzIiwgIkVudmlyb25tZW50VmFyR3VhcmQiLCAicnVuX3dpdGhfbG9jYWxlIiwgInN3YXBfaXRlbSIsCisgICAgInN3YXBfYXR0ciIsICJNYXRjaGVyIiwgInNldF9tZW1saW1pdCIsICJTdXBwcmVzc0NyYXNoUmVwb3J0IiwgInNvcnRkaWN0IiwKKyAgICAicnVuX3dpdGhfdHoiLAogICAgIF0KIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTk4LDcgKzEyMSw4IEBACiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgogICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCiAKLSAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LgorICAgICIiIgogICAgIGlmIGlnbm9yZToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKyAobW9kdWxlfHBhY2thZ2UpIiwKQEAgLTEwOCwxNiArMTMyLDIxIEBACiAgICAgICAgIHlpZWxkCiAKIAotZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSk6CitkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlLCAqLCByZXF1aXJlZF9vbj0oKSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgU2tpcFRlc3QgaWYKICAgICBpdCBpcyBub3QgYXZhaWxhYmxlLgogCiAgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKLSAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiBJZiBhIG1vZHVsZSBpcyByZXF1aXJlZCBvbiBhIHBsYXRmb3JtIGJ1dCBvcHRpb25hbCBmb3IKKyAgICBvdGhlcnMsIHNldCByZXF1aXJlZF9vbiB0byBhbiBpdGVyYWJsZSBvZiBwbGF0Zm9ybSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlCisgICAgY29tcGFyZWQgYWdhaW5zdCBzeXMucGxhdGZvcm0uCisgICAgIiIiCiAgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0dXBsZShyZXF1aXJlZF9vbikpOgorICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdHIobXNnKSkKIAogCkBAIC0zMDMsMjUgKzMzMiwyMCBAQAogZGVmIHVubGluayhmaWxlbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfdW5saW5rKGZpbGVuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBmaWxlbmFtZSBuZWVkIG5vdCBleGlzdC4KLSAgICAgICAgaWYgZXJyb3IuZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVOT1RESVIpOgotICAgICAgICAgICAgcmFpc2UKKyAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBOb3RBRGlyZWN0b3J5RXJyb3IpOgorICAgICAgICBwYXNzCiAKIGRlZiBybWRpcihkaXJuYW1lKToKICAgICB0cnk6CiAgICAgICAgIF9ybWRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICAjIFRoZSBkaXJlY3RvcnkgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBybXRyZWUocGF0aCk6CiAgICAgdHJ5OgogICAgICAgICBfcm10cmVlKHBhdGgpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICBwYXNzCiAKIGRlZiBtYWtlX2xlZ2FjeV9weWMoc291cmNlKToKICAgICAiIiJNb3ZlIGEgUEVQIDMxNDcgcHljL3B5byBmaWxlIHRvIGl0cyBsZWdhY3kgcHljL3B5byBsb2NhdGlvbi4KQEAgLTMzMyw3ICszNTcsNyBAQAogICAgICAgICBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0LCBob3dldmVyIHRoZSBQRVAgMzE0NyBweWMgZmlsZSBtdXN0IGV4aXN0LgogICAgIDpyZXR1cm46IFRoZSBmaWxlIHN5c3RlbSBwYXRoIHRvIHRoZSBsZWdhY3kgcHljIGZpbGUuCiAgICAgIiIiCi0gICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgIHVwX29uZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoc291cmNlKSkKICAgICBsZWdhY3lfcHljID0gb3MucGF0aC5qb2luKHVwX29uZSwgc291cmNlICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpKQogICAgIG9zLnJlbmFtZShweWNfZmlsZSwgbGVnYWN5X3B5YykKQEAgLTM1Miw4ICszNzYsOCBAQAogICAgICAgICAjIGNvbWJpbmF0aW9ucyBvZiBQRVAgMzE0NyBhbmQgbGVnYWN5IHB5YyBhbmQgcHlvIGZpbGVzLgogICAgICAgICB1bmxpbmsoc291cmNlICsgJ2MnKQogICAgICAgICB1bmxpbmsoc291cmNlICsgJ28nKQotICAgICAgICB1bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICB1bmxpbmsoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICMgT24gc29tZSBwbGF0Zm9ybXMsIHNob3VsZCBub3QgcnVuIGd1aSB0ZXN0IGV2ZW4gaWYgaXQgaXMgYWxsb3dlZAogIyBpbiBgdXNlX3Jlc291cmNlcycuCkBAIC01MTQsNyArNTM4LDcgQEAKICAgICB0aGUgU09fUkVVU0VBRERSIHNvY2tldCBvcHRpb24gaGF2aW5nIGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gV2luZG93cyB2ZXJzdXMKICAgICBVbml4L0xpbnV4LiAgT24gVW5peCwgeW91IGNhbid0IGhhdmUgdHdvIEFGX0lORVQgU09DS19TVFJFQU0gc29ja2V0cyBiaW5kLAogICAgIGxpc3RlbiBhbmQgdGhlbiBhY2NlcHQgY29ubmVjdGlvbnMgb24gaWRlbnRpY2FsIGhvc3QvcG9ydHMuICBBbiBFQUREUklOVVNFCi0gICAgc29ja2V0LmVycm9yIHdpbGwgYmUgcmFpc2VkIGF0IHNvbWUgcG9pbnQgKGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kCisgICAgT1NFcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAogICAgIHRoZSBvcmRlciBiaW5kIGFuZCBsaXN0ZW4gd2VyZSBjYWxsZWQgb24gZWFjaCBzb2NrZXQpLgogCiAgICAgSG93ZXZlciwgb24gV2luZG93cywgaWYgU09fUkVVU0VBRERSIGlzIHNldCBvbiB0aGUgc29ja2V0cywgbm8gRUFERFJJTlVTRQpAQCAtNTkyLDkgKzYxNiw5IEBACiAgICAgICAgIHNvY2sgPSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgc29jay5iaW5kKCgnOjoxJywgMCkpCisgICAgICAgICAgICBzb2NrLmJpbmQoKEhPU1R2NiwgMCkpCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgc29ja2V0LmdhaWVycm9yKToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBzb2NrOgpAQCAtMTE4MSw5ICsxMjA1LDkgQEAKICMgQ29udGV4dCBtYW5hZ2VycyB0aGF0IHJhaXNlIFJlc291cmNlRGVuaWVkIHdoZW4gdmFyaW91cyBpc3N1ZXMKICMgd2l0aCB0aGUgSW50ZXJuZXQgY29ubmVjdGlvbiBtYW5pZmVzdCB0aGVtc2VsdmVzIGFzIGV4Y2VwdGlvbnMuCiAjIFhYWCBkZXByZWNhdGUgdGhlc2UgYW5kIHVzZSB0cmFuc2llbnRfaW50ZXJuZXQoKSBpbnN0ZWFkCi10aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKLXNvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2Uoc29ja2V0LmVycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQotaW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoSU9FcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK3RpbWVfb3V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRVRJTUVET1VUKQorc29ja2V0X3BlZXJfcmVzZXQgPSBUcmFuc2llbnRSZXNvdXJjZShPU0Vycm9yLCBlcnJubz1lcnJuby5FQ09OTlJFU0VUKQoraW9lcnJvcl9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpAQCAtMTIyOSwxNyArMTI1MywxNyBAQAogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpCiAgICAgICAgIHlpZWxkCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKICAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGEgPSBlcnIuYXJncwotICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCiAgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CiAgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKLSAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAjICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzFdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xNjk3LDkgKzE3MjEsMTggQEAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGRvY3N0cmluZ3MuCiAKLUhBVkVfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbChjcHl0aG9uPUZhbHNlKSBvcgotICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yCi0gICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisjIFJhdGhlciB0aGFuIHRyeWluZyB0byBlbnVtZXJhdGUgYWxsIHRoZSBjYXNlcyB3aGVyZSBkb2NzdHJpbmdzIG1heSBiZQorIyBkaXNhYmxlZCwgd2UganVzdCBjaGVjayBmb3IgdGhhdCBkaXJlY3RseQorCitkZWYgX2NoZWNrX2RvY3N0cmluZ3MoKToKKyAgICAiIiJKdXN0IHVzZWQgdG8gY2hlY2sgaWYgZG9jc3RyaW5ncyBhcmUgZW5hYmxlZCIiIgorCitNSVNTSU5HX0NfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisKK0hBVkVfRE9DU1RSSU5HUyA9IChfY2hlY2tfZG9jc3RyaW5ncy5fX2RvY19fIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgIG5vdCBNSVNTSU5HX0NfRE9DU1RSSU5HUykKIAogcmVxdWlyZXNfZG9jc3RyaW5ncyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9ET0NTVFJJTkdTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCkBAIC0xNzc0LDEyICsxODA3LDEyIEBACiBkZWYgdGhyZWFkaW5nX2NsZWFudXAoKm9yaWdpbmFsX3ZhbHVlcyk6CiAgICAgaWYgbm90IF90aHJlYWQ6CiAgICAgICAgIHJldHVybgotICAgIF9NQVhfQ09VTlQgPSAxMAorICAgIF9NQVhfQ09VTlQgPSAxMDAKICAgICBmb3IgY291bnQgaW4gcmFuZ2UoX01BWF9DT1VOVCk6CiAgICAgICAgIHZhbHVlcyA9IF90aHJlYWQuX2NvdW50KCksIHRocmVhZGluZy5fZGFuZ2xpbmcKICAgICAgICAgaWYgdmFsdWVzID09IG9yaWdpbmFsX3ZhbHVlczoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICMgWFhYIHByaW50IGEgd2FybmluZyBpbiBjYXNlIG9mIGZhaWx1cmU/CiAKQEAgLTE4ODEsNyArMTkxNCw3IEBACiAgICAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSBydW4gb24gdGhlIHJlc3VsdCBvZiB0aGUgY29tbXVuaWNhdGUoKSBtZXRob2QKICAgICBvZiBhIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0LgogICAgICIiIgotICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQorICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQogICAgIHJldHVybiBzdGRlcnIKIAogZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgpAQCAtMjAxMiwyNyArMjA0NSw4MSBAQAogICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCiAKIAotaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICIiIkRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZyBTZXRFcnJvck1vZGUuIiIiCi0gICAgICAgICMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjElMjh2PXZzLjg1JTI5LmFzcHgKLSAgICAgICAgIyBHZXRFcnJvck1vZGUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQIGFuZCBXaW5kb3dzIFNlcnZlciAyMDAzLAotICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAotICAgICAgICBpbXBvcnQgY3R5cGVzCi0gICAgICAgIGszMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKLSAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgotICAgICAgICBvbGRfZXJyb3JfbW9kZSA9IGszMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICBrMzIuU2V0RXJyb3JNb2RlKG9sZF9lcnJvcl9tb2RlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB5aWVsZAotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgazMyLlNldEVycm9yTW9kZShvbGRfZXJyb3JfbW9kZSkKLWVsc2U6Ci0gICAgIyB0aGlzIGlzIGEgbm8tb3AgZm9yIG90aGVyIHBsYXRmb3JtcwotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgIHlpZWxkCitkZWYgZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZShkaXJlY3RvcnkpOgorICAgICIiIkRldGVjdHMgaWYgdGhlIGZpbGUgc3lzdGVtIGZvciB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBpcyBjYXNlLWluc2Vuc2l0aXZlLiIiIgorICAgIGJhc2VfZnAsIGJhc2VfcGF0aCA9IHRlbXBmaWxlLm1rc3RlbXAoZGlyPWRpcmVjdG9yeSkKKyAgICBjYXNlX3BhdGggPSBiYXNlX3BhdGgudXBwZXIoKQorICAgIGlmIGNhc2VfcGF0aCA9PSBiYXNlX3BhdGg6CisgICAgICAgIGNhc2VfcGF0aCA9IGJhc2VfcGF0aC5sb3dlcigpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gb3MucGF0aC5zYW1lZmlsZShiYXNlX3BhdGgsIGNhc2VfcGF0aCkKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLnVubGluayhiYXNlX3BhdGgpCisKKworY2xhc3MgU3VwcHJlc3NDcmFzaFJlcG9ydDoKKyAgICAiIiJUcnkgdG8gcHJldmVudCBhIGNyYXNoIHJlcG9ydCBmcm9tIHBvcHBpbmcgdXAuCisKKyAgICBPbiBXaW5kb3dzLCBkb24ndCBkaXNwbGF5IHRoZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2cuICBPbiBVTklYLAorICAgIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIGNvcmVkdW1wIGZpbGUuCisgICAgIiIiCisgICAgb2xkX3ZhbHVlID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiT24gV2luZG93cywgZGlzYWJsZSBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCisgICAgICAgIFNldEVycm9yTW9kZS4KKworICAgICAgICBPbiBVTklYLCB0cnkgdG8gc2F2ZSB0aGUgcHJldmlvdXMgY29yZSBmaWxlIHNpemUgbGltaXQsIHRoZW4gc2V0CisgICAgICAgIHNvZnQgbGltaXQgdG8gMC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjEuYXNweAorICAgICAgICAgICAgIyBHZXRFcnJvck1vZGUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQIGFuZCBXaW5kb3dzIFNlcnZlciAyMDAzLAorICAgICAgICAgICAgIyBidXQgU2V0RXJyb3JNb2RlIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlLCBzbyB3ZSBjYW4gdXNlIHRoYXQKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgICAgIHNlbGYuX2szMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKKyAgICAgICAgICAgIFNFTV9OT0dQRkFVTFRFUlJPUkJPWCA9IDB4MDIKKyAgICAgICAgICAgIHNlbGYub2xkX3ZhbHVlID0gc2VsZi5fazMyLlNldEVycm9yTW9kZShTRU1fTk9HUEZBVUxURVJST1JCT1gpCisgICAgICAgICAgICBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKHNlbGYub2xkX3ZhbHVlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLm9sZF92YWx1ZSA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSkKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIHNlbGYub2xkX3ZhbHVlWzFdKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICAgICAjIGluICdEZXZlbG9wZXInIG1vZGUgYW5kIHdhcm4gdGhhdCBpdCB3aWxsIGdldCB0cmlnZ2VyZWQKKyAgICAgICAgICAgICAgICAjIHdoZW4gaXQgaXMuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhpcyBjb250ZXh0IG1hbmFnZXIgaXMgdXNlZCBpbiB0ZXN0cworICAgICAgICAgICAgICAgICMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBuZXh0IG1hbmFnZXIuCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnY29tLmFwcGxlLkNyYXNoUmVwb3J0ZXInLCAnRGlhbG9nVHlwZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQorICAgICAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgorICAgICAgICAgICAgICAgICAgICBwcmludCgidGhpcyB0ZXN0IHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhdCBpcyBpbnRlbnRpb25hbCIsIGVuZD0nJywgZmx1c2g9VHJ1ZSkKKworICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgIiIiUmVzdG9yZSBXaW5kb3dzIEVycm9yTW9kZSBvciBjb3JlIGZpbGUgYmVoYXZpb3IgdG8gaW5pdGlhbCB2YWx1ZS4iIiIKKyAgICAgICAgaWYgc2VsZi5vbGRfdmFsdWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHNlbGYuX2szMi5TZXRFcnJvck1vZGUoc2VsZi5vbGRfdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfdmFsdWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAKIGRlZiBwYXRjaCh0ZXN0X2luc3RhbmNlLCBvYmplY3RfdG9fcGF0Y2gsIGF0dHJfbmFtZSwgbmV3X3ZhbHVlKToKQEAgLTIwNjcsMyArMjE1NCwyMiBAQAogCiAgICAgIyBhY3R1YWxseSBvdmVycmlkZSB0aGUgYXR0cmlidXRlCiAgICAgc2V0YXR0cihvYmplY3RfdG9fcGF0Y2gsIGF0dHJfbmFtZSwgbmV3X3ZhbHVlKQorCisKK2RlZiBydW5faW5fc3ViaW50ZXJwKGNvZGUpOgorICAgICIiIgorICAgIFJ1biBjb2RlIGluIGEgc3ViaW50ZXJwcmV0ZXIuIFJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0IGlmIHRoZSB0cmFjZW1hbGxvYworICAgIG1vZHVsZSBpcyBlbmFibGVkLgorICAgICIiIgorICAgICMgSXNzdWUgIzEwOTE1LCAjMTU3NTE6IFB5R0lMU3RhdGVfKigpIGZ1bmN0aW9ucyBkb24ndCB3b3JrIHdpdGgKKyAgICAjIHN1Yi1pbnRlcnByZXRlcnMsIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgdXNlcyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJuYWxseQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgdHJhY2VtYWxsb2MuaXNfdHJhY2luZygpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInJ1bl9pbl9zdWJpbnRlcnAoKSBjYW5ub3QgYmUgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyB0cmFjaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtb3J5IGFsbG9jYXRpb25zIikKKyAgICByZXR1cm4gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weSBiL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQppbmRleCA2MDhlYzAxLi44Y2MyODVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CkBAIC0yOSwxNyArMjksMjAgQEAKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc3lzLm1vZHVsZXNbbW9kbmFtZV0sICJfX2FsbF9fIik6CiAgICAgICAgICAgICByYWlzZSBOb0FsbChtb2RuYW1lKQogICAgICAgICBuYW1lcyA9IHt9Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZWMoImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSwgbmFtZXMpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICMgSW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlIGV4Y2VwdGlvbiBzdHJpbmcKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCi0gICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIG5hbWVzOgotICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQotICAgICAgICBrZXlzID0gc2V0KG5hbWVzKQotICAgICAgICBhbGwgPSBzZXQoc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGwpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1vZHVsZT1tb2RuYW1lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjKCJmcm9tICVzIGltcG9ydCAqIiAlIG1vZG5hbWUsIG5hbWVzKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICMgSW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlIGV4Y2VwdGlvbiBzdHJpbmcKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9fYWxsX18gZmFpbHVyZSBpbiB7fToge306IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKKyAgICAgICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIG5hbWVzOgorICAgICAgICAgICAgICAgIGRlbCBuYW1lc1siX19idWlsdGluc19fIl0KKyAgICAgICAgICAgIGtleXMgPSBzZXQobmFtZXMpCisgICAgICAgICAgICBhbGxfbGlzdCA9IHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fYWxsX18KKyAgICAgICAgICAgIGFsbF9zZXQgPSBzZXQoYWxsX2xpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoYWxsX3NldCwgYWxsX2xpc3QsICJpbiBtb2R1bGUge30iLmZvcm1hdChtb2RuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgYWxsX3NldCwgImluIG1vZHVsZSB7fSIuZm9ybWF0KG1vZG5hbWUpKQogCiAgICAgZGVmIHdhbGtfbW9kdWxlcyhzZWxmLCBiYXNlZGlyLCBtb2RwYXRoKToKICAgICAgICAgZm9yIGZuIGluIHNvcnRlZChvcy5saXN0ZGlyKGJhc2VkaXIpKToKQEAgLTExMCw4ICsxMTMsNSBAQAogICAgICAgICAgICAgcHJpbnQoJ0ZvbGxvd2luZyBtb2R1bGVzIGZhaWxlZCB0byBiZSBpbXBvcnRlZDonLCBmYWlsZWRfaW1wb3J0cykKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQWxsVGVzdCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNTJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X19vcGNvZGUucHkKQEAgLTAsMCArMSwyMyBAQAoraW1wb3J0IGRpcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQoraW1wb3J0IHVuaXR0ZXN0CisKK19vcGNvZGUgPSBpbXBvcnRfbW9kdWxlKCJfb3Bjb2RlIikKKworY2xhc3MgT3Bjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RhY2tfZWZmZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnUE9QX1RPUCddKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydEVVBfVE9QX1RXTyddKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10sIDApLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10sIDEpLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ0JVSUxEX1NMSUNFJ10sIDMpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIDMwMDAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfb3Bjb2RlLnN0YWNrX2VmZmVjdCwgZGlzLm9wbWFwWydCVUlMRF9TTElDRSddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfb3Bjb2RlLnN0YWNrX2VmZmVjdCwgZGlzLm9wbWFwWydQT1BfVE9QJ10sIDApCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBydW5fdW5pdHRlc3QoT3Bjb2RlVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9hYmMucHkKaW5kZXggZDRkNzU1Ni4uOTNmOWRhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hYmMucHkKQEAgLTY4LDYgKzY4LDE5IEBACiAKIGNsYXNzIFRlc3RBQkModW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfQUJDX2hlbHBlcihzZWxmKToKKyAgICAgICAgIyBjcmVhdGUgYW4gQUJDIHVzaW5nIHRoZSBoZWxwZXIgY2xhc3MgYW5kIHBlcmZvcm0gYmFzaWMgY2hlY2tzCisgICAgICAgIGNsYXNzIEMoYWJjLkFCQyk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oY2xzKTogcmV0dXJuIGNscy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoQyksIGFiYy5BQkNNZXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oY2xzKTogcmV0dXJuIHN1cGVyKCkuZm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmZvbygpLCAnRCcpCisKICAgICBkZWYgdGVzdF9hYnN0cmFjdG1ldGhvZF9iYXNpY3Moc2VsZik6CiAgICAgICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICAgICAgZGVmIGZvbyhzZWxmKTogcGFzcwpAQCAtMjg4LDcgKzMwMSwxMCBAQAogICAgICAgICBiID0gQigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShiLCBBKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKGIsIChBLCkpKQorICAgICAgICB0b2tlbl9vbGQgPSBhYmMuZ2V0X2NhY2hlX3Rva2VuKCkKICAgICAgICAgQS5yZWdpc3RlcihCKQorICAgICAgICB0b2tlbl9uZXcgPSBhYmMuZ2V0X2NhY2hlX3Rva2VuKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0b2tlbl9vbGQsIHRva2VuX25ldykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgQSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIChBLCkpKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FpZmMucHkgYi9MaWIvdGVzdC90ZXN0X2FpZmMucHkKaW5kZXggYjc3MzU0Yi4uMDQxYjIzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9haWZjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgVEVTVEZOLCB1bmxpbmsKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBhdWRpb3Rlc3RzCitmcm9tIGF1ZGlvb3AgaW1wb3J0IGJ5dGVzd2FwCiBpbXBvcnQgb3MKIGltcG9ydCBpbwogaW1wb3J0IHN5cwpAQCAtOCwxMCArOSwxNyBAQAogaW1wb3J0IGFpZmMKIAogCi1jbGFzcyBBaWZjUENNOFRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCi0gICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBBaWZjVGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKKyAgICAgICAgICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlKToKICAgICBtb2R1bGUgPSBhaWZjCisgICAgY2xvc2VfZmQgPSBUcnVlCisgICAgdGVzdF91bnNlZWthYmxlX3JlYWQgPSBOb25lCisgICAgdGVzdF91bnNlZWthYmxlX3dyaXRlID0gTm9uZQorICAgIHRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZSA9IE5vbmUKKyAgICB0ZXN0X3Vuc2Vla2FibGVfb3ZlcmZsb3dlZF93cml0ZSA9IE5vbmUKKworCitjbGFzcyBBaWZjUENNOFRlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY204LmFpZmYnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CiAgICAgbmNoYW5uZWxzID0gMgpAQCAtMjYsMTMgKzM0LDkgQEAKICAgICAgIDExRkEgM0VGQiBCQ0ZDIDY2RkYgQ0YwNCA0MzA5IEMxMEUgNTExMiBFRTE3IDgyMTYgN0YxNCA4MDEyIFwKICAgICAgIDQ5MEUgNTIwRCBFRjBGIENFMEYgRTQwQyA2MzBBIDA4MEEgMkIwQiA1MTBFIDhCMTEgQjYwRSA0NDBBIFwKICAgICAgICIiIikKLSAgICBjbG9zZV9mZCA9IFRydWUKIAogCi1jbGFzcyBBaWZjUENNMTZUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAotICAgICAgICBhdWRpb3Rlc3RzLkF1ZGlvVGVzdHNXaXRoU291cmNlRmlsZSwKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIG1vZHVsZSA9IGFpZmMKK2NsYXNzIEFpZmNQQ00xNlRlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20xNi5haWZmJwogICAgIHNuZGZpbGVuZnJhbWVzID0gMzMwNwogICAgIG5jaGFubmVscyA9IDIKQEAgLTQ5LDEzICs1Myw5IEBACiAgICAgICBFRUUyMTc1MyA4MjA3MTY2NSA3RkZGMTQ0MyA4MDA0MTI4RiA0OUEyMEVBRiA1MkJCMERCQSBFRkI0MEY2MCBDRTNDMEZCRiBcCiAgICAgICBFNEIzMENFQyA2MzQzMEE1QyAwOEM4MEEyMCAyQkJCMEIwOCA1MTRBMEU0MyA4QkNGMTEzOSBCNkY2MEVFQiA0NDEyMEE1RSBcCiAgICAgICAiIiIpCi0gICAgY2xvc2VfZmQgPSBUcnVlCiAKIAotY2xhc3MgQWlmY1BDTTI0VGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKLSAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2R1bGUgPSBhaWZjCitjbGFzcyBBaWZjUENNMjRUZXN0KEFpZmNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMjQuYWlmZicKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKICAgICBuY2hhbm5lbHMgPSAyCkBAIC03OCwxMyArNzgsOSBAQAogICAgICAgRTRCNDlDMENFQTJEIDYzNDRBODBBNUE3QyAwOEM4RkUwQTFGRkUgMkJCOTg2MEIwQTBFIFwKICAgICAgIDUxNDg2RjBFNDRFMSA4QkNDNjQxMTNCMDUgQjZGNEVDMEVFQjM2IDQ0MTMxNzBBNUI0OCBcCiAgICAgICAiIiIpCi0gICAgY2xvc2VfZmQgPSBUcnVlCiAKIAotY2xhc3MgQWlmY1BDTTMyVGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKLSAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2R1bGUgPSBhaWZjCitjbGFzcyBBaWZjUENNMzJUZXN0KEFpZmNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stcGNtMzIuYWlmZicKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKICAgICBuY2hhbm5lbHMgPSAyCkBAIC0xMDcsMTMgKzEwMyw5IEBACiAgICAgICBFNEI0OUNDMDBDRUEyRDkwIDYzNDRBODgwMEE1QTdDQTAgMDhDOEZFODAwQTFGRkVFMCAyQkI5ODZDMDBCMEEwRTAwIFwKICAgICAgIDUxNDg2RjgwMEU0NEUxOTAgOEJDQzY0ODAxMTNCMDU4MCBCNkY0RUMwMDBFRUIzNjMwIDQ0MTMxNzgwMEE1QjQ4QTAgXAogICAgICAgIiIiKQotICAgIGNsb3NlX2ZkID0gVHJ1ZQogCiAKLWNsYXNzIEFpZmNVTEFXVGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKLSAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCi0gICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBtb2R1bGUgPSBhaWZjCitjbGFzcyBBaWZjVUxBV1Rlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay11bGF3LmFpZmMnCiAgICAgc25kZmlsZW5mcmFtZXMgPSAzMzA3CiAgICAgbmNoYW5uZWxzID0gMgpAQCAtMTMxLDE0ICsxMjMsMTAgQEAKICAgICAgIEU1MDQwQ0JDIDYxN0MwQTNDIDA4QkMwQTNDIDJDN0MwQjNDIDUxN0MwRTNDIDhBODQxMEZDIEI2ODQwRUJDIDQ1N0MwQTNDIFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMihmcmFtZXMpCi0gICAgY2xvc2VfZmQgPSBUcnVlCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCi1jbGFzcyBBaWZjQUxBV1Rlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCi0gICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAotICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgbW9kdWxlID0gYWlmYworY2xhc3MgQWlmY0FMQVdUZXN0KEFpZmNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc25kZmlsZW5hbWUgPSAncGx1Y2stYWxhdy5haWZjJwogICAgIHNuZGZpbGVuZnJhbWVzID0gMzMwNwogICAgIG5jaGFubmVscyA9IDIKQEAgLTE1Niw4ICsxNDQsNyBAQAogICAgICAgRTQ4MDBDQzAgNjIwMDBBNDAgMDhDMDBBNDAgMkIwMDBCNDAgNTIwMDBFNDAgOEEwMDExODAgQjYwMDBFQzAgNDYwMDBBNDAgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKLSAgICBjbG9zZV9mZCA9IFRydWUKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIEFpZmNNaXNjVGVzdChhdWRpb3Rlc3RzLkF1ZGlvVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE2Niw2ICsxNTMsMjEgQEAKICAgICAgICAgI1RoaXMgZmlsZSBjb250YWlucyBjaHVuayB0eXBlcyBhaWZjIGRvZXNuJ3QgcmVjb2duaXplLgogICAgICAgICBzZWxmLmYgPSBhaWZjLm9wZW4oZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpKQogCisgICAgZGVmIHRlc3RfcGFyYW1zX2FkZGVkKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZi5haWZmKCkKKyAgICAgICAgZi5zZXRwYXJhbXMoKDEsIDEsIDEsIDEsIGInTk9ORScsIGInJykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgZi5nZXRuY2hhbm5lbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBmLmdldHNhbXB3aWR0aCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIGYuZ2V0bmZyYW1lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wdHlwZSwgZi5nZXRjb21wdHlwZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgZi5nZXRjb21wbmFtZSgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfaGVhZGVyX2NvbXB0eXBlX3NhbXB3aWR0aChzZWxmKToKICAgICAgICAgZm9yIGNvbXB0eXBlIGluIChiJ1VMQVcnLCBiJ3VsYXcnLCBiJ0FMQVcnLCBiJ2FsYXcnLCBiJ0c3MjInKToKICAgICAgICAgICAgIGZvdXQgPSBhaWZjLm9wZW4oaW8uQnl0ZXNJTygpLCAnd2InKQpAQCAtMzY5LDEyICszNzEsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2FpZmZfYnlfZXh0ZW5zaW9uKHNlbGYpOgogICAgICAgICBzYW1wd2lkdGggPSAyCi0gICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3diJykKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAnLmFpZmYnCisgICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oZmlsZW5hbWUsICd3YicpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIGZpbGVuYW1lKQogICAgICAgICBmb3V0LnNldHBhcmFtcygoMSwgc2FtcHdpZHRoLCAxLCAxLCBiJ1VMQVcnLCBiJycpKQogICAgICAgICBmcmFtZXMgPSBiJ1x4MDAnICogZm91dC5nZXRuY2hhbm5lbHMoKSAqIHNhbXB3aWR0aAogICAgICAgICBmb3V0LndyaXRlZnJhbWVzKGZyYW1lcykKICAgICAgICAgZm91dC5jbG9zZSgpCi0gICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3JiJykKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3JiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXB0eXBlKCksIGInTk9ORScpCiAgICAgICAgIGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQppbmRleCBjMDZjOTQwLi5jMTBjNTkwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKQEAgLTE0LDYgKzE0LDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogY2xhc3MgU3RkSU9CdWZmZXIoU3RyaW5nSU8pOgogICAgIHBhc3MKIApAQCAtMTQyMSw2ICsxNDIyLDE5IEBACiAgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgnd2InLCAxKSIsIHJlcHIodHlwZSkpCiAKKyAgICBkZWYgdGVzdF9yX2xhdGluKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InLCBlbmNvZGluZz0nbGF0aW5fMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCdyJywgZW5jb2Rpbmc9J2xhdGluXzEnKSIsIHJlcHIodHlwZSkpCisKKyAgICBkZWYgdGVzdF93X2JpZzVfaWdub3JlKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3cnLCBlbmNvZGluZz0nYmlnNScsIGVycm9ycz0naWdub3JlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3cnLCBlbmNvZGluZz0nYmlnNScsIGVycm9ycz0naWdub3JlJykiLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIodHlwZSkpCisKKyAgICBkZWYgdGVzdF9yXzFfcmVwbGFjZShzZWxmKToKKyAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCdyJywgMSwgZXJyb3JzPSdyZXBsYWNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InLCAxLCBlcnJvcnM9J3JlcGxhY2UnKSIsIHJlcHIodHlwZSkpCisKIAogY2xhc3MgUkZpbGUob2JqZWN0KToKICAgICBzZWVuID0ge30KQEAgLTE1NTcsNiArMTU3MSwyNCBAQAogICAgIF0KIAogCitjbGFzcyBUZXN0RmlsZVR5cGVPcGVuQXJncyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG9wZW4gKHRoZSBidWlsdGluKSBpcyBjb3JyZWN0bHkgY2FsbGVkIiIiCisKKyAgICBkZWYgdGVzdF9vcGVuX2FyZ3Moc2VsZik6CisgICAgICAgIEZUID0gYXJncGFyc2UuRmlsZVR5cGUKKyAgICAgICAgY2FzZXMgPSBbCisgICAgICAgICAgICAoRlQoJ3JiJyksICgncmInLCAtMSwgTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgMSksICgndycsIDEsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIGVycm9ycz0ncmVwbGFjZScpLCAoJ3cnLCAtMSwgTm9uZSwgJ3JlcGxhY2UnKSksCisgICAgICAgICAgICAoRlQoJ3diJywgZW5jb2Rpbmc9J2JpZzUnKSwgKCd3YicsIC0xLCAnYmlnNScsIE5vbmUpKSwKKyAgICAgICAgICAgIChGVCgndycsIDAsICdsMScsICdzdHJpY3QnKSwgKCd3JywgMCwgJ2wxJywgJ3N0cmljdCcpKSwKKyAgICAgICAgXQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2J1aWx0aW5zLm9wZW4nKSBhcyBtOgorICAgICAgICAgICAgZm9yIHR5cGUsIGFyZ3MgaW4gY2FzZXM6CisgICAgICAgICAgICAgICAgdHlwZSgnZm9vJykKKyAgICAgICAgICAgICAgICBtLmFzc2VydF9jYWxsZWRfd2l0aCgnZm9vJywgKmFyZ3MpCisKKwogY2xhc3MgVGVzdFR5cGVDYWxsYWJsZShQYXJzZXJUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBzb21lIGNhbGxhYmxlcyBhcyBvcHRpb24vYXJndW1lbnQgdHlwZXMiIiIKIApAQCAtNDMyNyw3ICs0MzU5LDcgQEAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2Zvcm1hdChzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFBQJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy41JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy12J10pLnN0ZGVycgorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3Rkb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1BQUCAzLjVcbicsIG1zZykKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9faGVscChzZWxmKToKQEAgLTQzNDAsNyArNDM3Miw3IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9hY3Rpb24oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1hYWCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1WJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy43JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZGVycgorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3Rkb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1hYWCAzLjdcbicsIG1zZykKIAogICAgIGRlZiB0ZXN0X25vX2hlbHAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5IGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQppbmRleCBjY2NiNzA1Li40MDlkNTg2IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKQEAgLTM1NCwxMiArMzU0LDEyIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2Zyb21maWxlX2lvZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBJT0Vycm9yCisgICAgICAgICMgSXNzdWUgIzUzOTU6IENoZWNrIGlmIGZyb21maWxlIHJhaXNlcyBhIHByb3BlciBPU0Vycm9yCiAgICAgICAgICMgaW5zdGVhZCBvZiBFT0ZFcnJvci4KICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGEuZnJvbWZpbGUsIGYsIGxlbihzZWxmLmV4YW1wbGUpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKQEAgLTEwMjcsNiArMTAyNywxOCBAQAogICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY3ZvYmpzaXplKCdQbjJQaScpCiAgICAgICAgIHN1cHBvcnQuY2hlY2tfc2l6ZW9mKHNlbGYsIGEsIGJhc2VzaXplKQogCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZWNvZGUgIT0gJ3UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAnZm9vJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCB1c2UgYSBzdHIiLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgYXJyYXkuYXJyYXkoJ3UnLCAnZm9vJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgdXNlIGEgdW5pY29kZSBhcnJheSIsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsICJmb28iKQorICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGFycmF5LmFycmF5KCd1JywgJ2ZvbycpKQorCiAKIGNsYXNzIFN0cmluZ1Rlc3QoQmFzZVRlc3QpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CmluZGV4IDYzNTI4ODguLmU2OTQyMmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN0LnB5CkBAIC0xODAsMjAgKzE4MCwzNiBAQAogCiBjbGFzcyBBU1RfVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIF9hc3NlcnRUcnVlb3JkZXIoc2VsZiwgYXN0X25vZGUsIHBhcmVudF9wb3MpOgorICAgIGRlZiBfYXNzZXJ0VHJ1ZW9yZGVyKHNlbGYsIGFzdF9ub2RlLCBwYXJlbnRfcG9zLCByZXZlcnNlX2NoZWNrID0gRmFsc2UpOgorICAgICAgICBkZWYgc2hvdWxkX3JldmVyc2VfY2hlY2socGFyZW50LCBjaGlsZCk6CisgICAgICAgICAgICAjIEluIHNvbWUgc2l0dWF0aW9ucywgdGhlIGNoaWxkcmVuIG9mIG5vZGVzIG9jY3VyIGJlZm9yZQorICAgICAgICAgICAgIyB0aGVpciBwYXJlbnRzLCBmb3IgZXhhbXBsZSBpbiBhLmIuYywgYSBvY2N1cnMgYmVmb3JlIGIKKyAgICAgICAgICAgICMgYnV0IGEgaXMgYSBjaGlsZCBvZiBiLgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJlbnQsIGFzdC5DYWxsKToKKyAgICAgICAgICAgICAgICBpZiBwYXJlbnQuZnVuYyA9PSBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyZW50LCAoYXN0LkF0dHJpYnV0ZSwgYXN0LlN1YnNjcmlwdCkpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhc3Rfbm9kZSwgYXN0LkFTVCkgb3IgYXN0X25vZGUuX2ZpZWxkcyBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYXN0X25vZGUsIChhc3QuZXhwciwgYXN0LnN0bXQsIGFzdC5leGNlcHRoYW5kbGVyKSk6CiAgICAgICAgICAgICBub2RlX3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZV9wb3MgPj0gcGFyZW50X3BvcykKKyAgICAgICAgICAgIGlmIHJldmVyc2VfY2hlY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vZGVfcG9zIDw9IHBhcmVudF9wb3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlX3BvcyA+PSBwYXJlbnRfcG9zKQogICAgICAgICAgICAgcGFyZW50X3BvcyA9IChhc3Rfbm9kZS5saW5lbm8sIGFzdF9ub2RlLmNvbF9vZmZzZXQpCiAgICAgICAgIGZvciBuYW1lIGluIGFzdF9ub2RlLl9maWVsZHM6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIoYXN0X25vZGUsIG5hbWUpCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICBmb3IgY2hpbGQgaW4gdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydFRydWVvcmRlcihjaGlsZCwgcGFyZW50X3BvcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKGNoaWxkLCBwYXJlbnRfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRfcmV2ZXJzZV9jaGVjayhhc3Rfbm9kZSwgY2hpbGQpKQogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIodmFsdWUsIHBhcmVudF9wb3MpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0VHJ1ZW9yZGVyKHZhbHVlLCBwYXJlbnRfcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRfcmV2ZXJzZV9jaGVjayhhc3Rfbm9kZSwgdmFsdWUpKQogCiAgICAgZGVmIHRlc3RfQVNUX29iamVjdHMoc2VsZik6CiAgICAgICAgIHggPSBhc3QuQVNUKCkKQEAgLTI2MiwxNCArMjc4LDE0IEBACiAKICAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CiAgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLCAndmFyYXJnYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd29ubHlhcmdzJywgJ2t3YXJnJywgJ2t3YXJnYW5ub3RhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0cycsICdrd19kZWZhdWx0cycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX2ZpZWxkcywgKCdhcmdzJywgJ3ZhcmFyZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd29ubHlhcmdzJywgJ2t3X2RlZmF1bHRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t3YXJnJywgJ2RlZmF1bHRzJykpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICB4LnZhcmFyZwogCi0gICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCpyYW5nZSgxLCA5KSkKKyAgICAgICAgeCA9IGFzdC5hcmd1bWVudHMoKnJhbmdlKDEsIDcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFyYXJnLCAyKQogCiAgICAgZGVmIHRlc3RfZmllbGRfYXR0cl93cml0YWJsZShzZWxmKToKQEAgLTQzOSw3ICs0NTUsNyBAQAogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTApLCBhcmdzPVtOYW1lKGlkPSdlZ2dzJywgY3R4PUxvYWQoKSwgIgogICAgICAgICAgICAgImxpbmVubz0xLCBjb2xfb2Zmc2V0PTUpLCBTdHIocz0nYW5kIGNoZWVzZScsIGxpbmVubz0xLCAiCiAgICAgICAgICAgICAiY29sX29mZnNldD0xMSldLCBrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsICIKLSAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldKSIKKyAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD00KSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCldKSIKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfY29weV9sb2NhdGlvbihzZWxmKToKQEAgLTQ2MCw3ICs0NzYsNyBAQAogICAgICAgICAgICAgIk1vZHVsZShib2R5PVtFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSd3cml0ZScsIGN0eD1Mb2FkKCksICIKICAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgYXJncz1bU3RyKHM9J3NwYW0nLCBsaW5lbm89MSwgIgogICAgICAgICAgICAgImNvbF9vZmZzZXQ9NildLCBrZXl3b3Jkcz1bXSwgc3RhcmFyZ3M9Tm9uZSwga3dhcmdzPU5vbmUsICIKLSAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD0wKSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksICIKKyAgICAgICAgICAgICJsaW5lbm89MSwgY29sX29mZnNldD01KSwgbGluZW5vPTEsIGNvbF9vZmZzZXQ9MCksICIKICAgICAgICAgICAgICJFeHByKHZhbHVlPUNhbGwoZnVuYz1OYW1lKGlkPSdzcGFtJywgY3R4PUxvYWQoKSwgbGluZW5vPTEsICIKICAgICAgICAgICAgICJjb2xfb2Zmc2V0PTApLCBhcmdzPVtTdHIocz0nZWdncycsIGxpbmVubz0xLCBjb2xfb2Zmc2V0PTApXSwgIgogICAgICAgICAgICAgImtleXdvcmRzPVtdLCBzdGFyYXJncz1Ob25lLCBrd2FyZ3M9Tm9uZSwgbGluZW5vPTEsICIKQEAgLTU2MCw4ICs1NzYsOCBAQAogICAgICAgICBzZWxmLm1vZChtLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIsICJldmFsIikKIAogICAgIGRlZiBfY2hlY2tfYXJndW1lbnRzKHNlbGYsIGZhYywgY2hlY2spOgotICAgICAgICBkZWYgYXJndW1lbnRzKGFyZ3M9Tm9uZSwgdmFyYXJnPU5vbmUsIHZhcmFyZ2Fubm90YXRpb249Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICBrd29ubHlhcmdzPU5vbmUsIGt3YXJnPU5vbmUsIGt3YXJnYW5ub3RhdGlvbj1Ob25lLAorICAgICAgICBkZWYgYXJndW1lbnRzKGFyZ3M9Tm9uZSwgdmFyYXJnPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncz1Ob25lLCBrd2FyZz1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzPU5vbmUsIGt3X2RlZmF1bHRzPU5vbmUpOgogICAgICAgICAgICAgaWYgYXJncyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGFyZ3MgPSBbXQpAQCAtNTcxLDIwICs1ODcsMTIgQEAKICAgICAgICAgICAgICAgICBkZWZhdWx0cyA9IFtdCiAgICAgICAgICAgICBpZiBrd19kZWZhdWx0cyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGt3X2RlZmF1bHRzID0gW10KLSAgICAgICAgICAgIGFyZ3MgPSBhc3QuYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJnLCBrd2FyZ2Fubm90YXRpb24sIGRlZmF1bHRzLCBrd19kZWZhdWx0cykKKyAgICAgICAgICAgIGFyZ3MgPSBhc3QuYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dfZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywgZGVmYXVsdHMpCiAgICAgICAgICAgICByZXR1cm4gZmFjKGFyZ3MpCiAgICAgICAgIGFyZ3MgPSBbYXN0LmFyZygieCIsIGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpKV0KICAgICAgICAgY2hlY2soYXJndW1lbnRzKGFyZ3M9YXJncyksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKHZhcmFyZ2Fubm90YXRpb249YXN0Lk51bSgzKSksCi0gICAgICAgICAgICAgICJ2YXJhcmdhbm5vdGF0aW9uIGJ1dCBubyB2YXJhcmciKQotICAgICAgICBjaGVjayhhcmd1bWVudHModmFyYXJnYW5ub3RhdGlvbj1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwgdmFyYXJnPSJ4IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dvbmx5YXJncz1hcmdzKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQotICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dhcmdhbm5vdGF0aW9uPWFzdC5OdW0oNDIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgImt3YXJnYW5ub3RhdGlvbiBidXQgbm8ga3dhcmciKQotICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dhcmdhbm5vdGF0aW9uPWFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZz0ieCIpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhkZWZhdWx0cz1bYXN0Lk51bSgzKV0pLAogICAgICAgICAgICAgICAgICAgICAgICAibW9yZSBwb3NpdGlvbmFsIGRlZmF1bHRzIHRoYW4gYXJncyIpCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhrd19kZWZhdWx0cz1bYXN0Lk51bSg0KV0pLApAQCAtNTk5LDcgKzYwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKIAogICAgIGRlZiB0ZXN0X2Z1bmNkZWYoc2VsZik6Ci0gICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKQorICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSkKICAgICAgICAgZiA9IGFzdC5GdW5jdGlvbkRlZigieCIsIGEsIFtdLCBbXSwgTm9uZSkKICAgICAgICAgc2VsZi5zdG10KGYsICJlbXB0eSBib2R5IG9uIEZ1bmN0aW9uRGVmIikKICAgICAgICAgZiA9IGFzdC5GdW5jdGlvbkRlZigieCIsIGEsIFthc3QuUGFzcygpXSwgW2FzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpXSwKQEAgLTc3MCw3ICs3NzgsNyBAQAogICAgICAgICBzZWxmLmV4cHIodSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogCiAgICAgZGVmIHRlc3RfbGFtYmRhKHNlbGYpOgotICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSkKKyAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pCiAgICAgICAgIHNlbGYuZXhwcihhc3QuTGFtYmRhKGEsIGFzdC5OYW1lKCJ4IiwgYXN0LlN0b3JlKCkpKSwKICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgZGVmIGZhYyhhcmdzKToKQEAgLTkyOCw2ICs5MzYsOSBAQAogICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgogICAgICAgICBzZWxmLl9zZXF1ZW5jZShhc3QuVHVwbGUpCiAKKyAgICBkZWYgdGVzdF9uYW1lY29uc3RhbnQoc2VsZik6CisgICAgICAgIHNlbGYuZXhwcihhc3QuTmFtZUNvbnN0YW50KDQpLCAic2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKQorCiAgICAgZGVmIHRlc3Rfc3RkbGliX3ZhbGlkYXRlcyhzZWxmKToKICAgICAgICAgc3RkbGliID0gb3MucGF0aC5kaXJuYW1lKGFzdC5fX2ZpbGVfXykKICAgICAgICAgdGVzdHMgPSBbZm4gZm9yIGZuIGluIG9zLmxpc3RkaXIoc3RkbGliKSBpZiBmbi5lbmRzd2l0aCgiLnB5IildCkBAIC05MzYsMTMgKzk0NywxMCBAQAogICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc3RkbGliLCBtb2R1bGUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikgYXMgZnA6CiAgICAgICAgICAgICAgICAgc291cmNlID0gZnAucmVhZCgpCi0gICAgICAgICAgICBtb2QgPSBhc3QucGFyc2Uoc291cmNlKQorICAgICAgICAgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSwgZm4pCiAgICAgICAgICAgICBjb21waWxlKG1vZCwgZm4sICJleGVjIikKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQVNUX1Rlc3RzLCBBU1RIZWxwZXJzX1Rlc3QsIEFTVFZhbGlkYXRvclRlc3RzKQotCiBkZWYgbWFpbigpOgogICAgIGlmIF9fbmFtZV9fICE9ICdfX21haW5fXyc6CiAgICAgICAgIHJldHVybgpAQCAtOTU1LDIwICs5NjMsMjAgQEAKICAgICAgICAgICAgIHByaW50KCJdIikKICAgICAgICAgcHJpbnQoIm1haW4oKSIpCiAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQogCiAjIyMjIEVWRVJZVEhJTkcgQkVMT1cgSVMgR0VORVJBVEVEICMjIyMjCiBleGVjX3Jlc3VsdHMgPSBbCi0oJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ05vbmUnLCAoJ0xvYWQnLCkpKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgW10sIFtdKSwgWygnUGFzcycsICgxLCA5KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSldLCBOb25lLCBOb25lLCBbXSwgTm9uZSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0sIFtdKSwgWygnUGFzcycsICgxLCAxMikpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sICdhcmdzJywgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTQpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCBOb25lLCBOb25lLCBbXSwgJ2t3YXJncycsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICdhJywgTm9uZSksICgnYXJnJywgJ2InLCBOb25lKSwgKCdhcmcnLCAnYycsIE5vbmUpLCAoJ2FyZycsICdkJywgTm9uZSksICgnYXJnJywgJ2UnLCBOb25lKV0sICdhcmdzJywgTm9uZSwgW10sICdrd2FyZ3MnLCBOb25lLCBbKCdOdW0nLCAoMSwgMTEpLCAxKSwgKCdOYW1lJywgKDEsIDE2KSwgJ05vbmUnLCAoJ0xvYWQnLCkpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0sIFtdKSwgWygnUGFzcycsICgxLCA1MikpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTmFtZUNvbnN0YW50JywgKDEsIDApLCBOb25lKSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgOSkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgKDEsIDYpLCAnYScsIE5vbmUpXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTApKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKV0sIE5vbmUsIFtdLCBbXSwgTm9uZSwgWygnTnVtJywgKDEsIDgpLCAwKV0pLCBbKCdQYXNzJywgKDEsIDEyKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgKCdhcmcnLCAoMSwgNyksICdhcmdzJywgTm9uZSksIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCAoJ2FyZycsICgxLCA4KSwgJ2t3YXJncycsIE5vbmUpLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTcpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKSwgKCdhcmcnLCAoMSwgOSksICdiJywgTm9uZSksICgnYXJnJywgKDEsIDE0KSwgJ2MnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjIpLCAnZCcsIE5vbmUpLCAoJ2FyZycsICgxLCAyOCksICdlJywgTm9uZSldLCAoJ2FyZycsICgxLCAzNSksICdhcmdzJywgTm9uZSksIFtdLCBbXSwgKCdhcmcnLCAoMSwgNDMpLCAna3dhcmdzJywgTm9uZSksIFsoJ051bScsICgxLCAxMSksIDEpLCAoJ05hbWVDb25zdGFudCcsICgxLCAxNiksIE5vbmUpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0pLCBbKCdQYXNzJywgKDEsIDUyKSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgW10sIFtdLCBOb25lLCBOb25lLCBbKCdQYXNzJywgKDEsIDgpKV0sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbKCdOYW1lJywgKDEsIDgpLCAnb2JqZWN0JywgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1JldHVybicsICgxLCA4KSwgKCdOdW0nLCAoMSwgMTUpLCAxKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1JldHVybicsICgxLCA4KSwgKCdOdW0nLCAoMSwgMTUpLCAxKSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnRGVsZXRlJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDQpLCAndicsICgnRGVsJywpKV0pXSksCiAoJ01vZHVsZScsIFsoJ0Fzc2lnbicsICgxLCAwKSwgWygnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKV0sICgnTnVtJywgKDEsIDQpLCAxKSldKSwKICgnTW9kdWxlJywgWygnQXVnQXNzaWduJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICd2JywgKCdTdG9yZScsKSksICgnQWRkJywpLCAoJ051bScsICgxLCA1KSwgMSkpXSksCkBAIC05NzcsNyArOTg1LDcgQEAKICgnTW9kdWxlJywgWygnSWYnLCAoMSwgMCksICgnTmFtZScsICgxLCAzKSwgJ3YnLCAoJ0xvYWQnLCkpLCBbKCdQYXNzJywgKDEsIDUpKV0sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdXaXRoJywgKDEsIDApLCBbKCd3aXRoaXRlbScsICgnTmFtZScsICgxLCA1KSwgJ3gnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTApLCAneScsICgnU3RvcmUnLCkpKV0sIFsoJ1Bhc3MnLCAoMSwgMTMpKV0pXSksCiAoJ01vZHVsZScsIFsoJ1dpdGgnLCAoMSwgMCksIFsoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDEsIDUpLCAneCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxMCksICd5JywgKCdTdG9yZScsKSkpLCAoJ3dpdGhpdGVtJywgKCdOYW1lJywgKDEsIDEzKSwgJ3onLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAncScsICgnU3RvcmUnLCkpKV0sIFsoJ1Bhc3MnLCAoMSwgMjEpKV0pXSksCi0oJ01vZHVsZScsIFsoJ1JhaXNlJywgKDEsIDApLCAoJ0NhbGwnLCAoMSwgNiksICgnTmFtZScsICgxLCA2KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIFsoJ1N0cicsICgxLCAxNiksICdzdHJpbmcnKV0sIFtdLCBOb25lLCBOb25lKSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnUmFpc2UnLCAoMSwgMCksICgnQ2FsbCcsICgxLCAxNSksICgnTmFtZScsICgxLCA2KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIFsoJ1N0cicsICgxLCAxNiksICdzdHJpbmcnKV0sIFtdLCBOb25lLCBOb25lKSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnVHJ5JywgKDEsIDApLCBbKCdQYXNzJywgKDIsIDIpKV0sIFsoJ0V4Y2VwdEhhbmRsZXInLCAoMywgMCksICgnTmFtZScsICgzLCA3KSwgJ0V4Y2VwdGlvbicsICgnTG9hZCcsKSksIE5vbmUsIFsoJ1Bhc3MnLCAoNCwgMikpXSldLCBbXSwgW10pXSksCiAoJ01vZHVsZScsIFsoJ1RyeScsICgxLCAwKSwgWygnUGFzcycsICgyLCAyKSldLCBbXSwgW10sIFsoJ1Bhc3MnLCAoNCwgMikpXSldKSwKICgnTW9kdWxlJywgWygnQXNzZXJ0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgNyksICd2JywgKCdMb2FkJywpKSwgTm9uZSldKSwKQEAgLTEwMDIsMjkgKzEwMTAsMjkgQEAKICgnSW50ZXJhY3RpdmUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksICgnQWRkJywpLCAoJ051bScsICgxLCAyKSwgMikpKV0pLAogXQogZXZhbF9yZXN1bHRzID0gWwotKCdFeHByZXNzaW9uJywgKCdOYW1lJywgKDEsIDApLCAnTm9uZScsICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMCksIE5vbmUpKSwKICgnRXhwcmVzc2lvbicsICgnQm9vbE9wJywgKDEsIDApLCAoJ0FuZCcsKSwgWygnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNiksICdiJywgKCdMb2FkJywpKV0pKSwKICgnRXhwcmVzc2lvbicsICgnQmluT3AnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ0FkZCcsKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSkpKSwKICgnRXhwcmVzc2lvbicsICgnVW5hcnlPcCcsICgxLCAwKSwgKCdOb3QnLCksICgnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0xvYWQnLCkpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksICgnTmFtZScsICgxLCA3KSwgJ05vbmUnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksICgnTmFtZUNvbnN0YW50JywgKDEsIDcpLCBOb25lKSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMiksIDEpXSwgWygnTnVtJywgKDEsIDQpLCAyKV0pKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgW10sIFtdKSksCi0oJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZScsICgxLCAxKSwgJ05vbmUnLCAoJ0xvYWQnLCkpXSkpLAorKCdFeHByZXNzaW9uJywgKCdTZXQnLCAoMSwgMCksIFsoJ05hbWVDb25zdGFudCcsICgxLCAxKSwgTm9uZSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFsoJ051bScsICgyLCA2KSwgMSldLCBbKCdOdW0nLCAoNCwgMTApLCAyKV0pKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdENvbXAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKICgnRXhwcmVzc2lvbicsICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2InLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2QnLCAoJ0xvYWQnLCkpXSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0NvbXBhcmUnLCAoMSwgMCksICgnTnVtJywgKDEsIDApLCAxKSwgWygnTHQnLCksICgnTHQnLCldLCBbKCdOdW0nLCAoMSwgNCksIDIpLCAoJ051bScsICgxLCA4KSwgMyldKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0NhbGwnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2YnLCAoJ0xvYWQnLCkpLCBbKCdOdW0nLCAoMSwgMiksIDEpLCAoJ051bScsICgxLCA0KSwgMildLCBbKCdrZXl3b3JkJywgJ2MnLCAoJ051bScsICgxLCA4KSwgMykpXSwgKCdOYW1lJywgKDEsIDExKSwgJ2QnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgMTUpLCAnZScsICgnTG9hZCcsKSkpKSwKKygnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCAxKSwgKCdOYW1lJywgKDEsIDApLCAnZicsICgnTG9hZCcsKSksIFsoJ051bScsICgxLCAyKSwgMSksICgnTnVtJywgKDEsIDQpLCAyKV0sIFsoJ2tleXdvcmQnLCAnYycsICgnTnVtJywgKDEsIDgpLCAzKSldLCAoJ05hbWUnLCAoMSwgMTEpLCAnZCcsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCAxNSksICdlJywgKCdMb2FkJywpKSkpLAogKCdFeHByZXNzaW9uJywgKCdOdW0nLCAoMSwgMCksIDEwKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1N0cicsICgxLCAwKSwgJ3N0cmluZycpKSwKLSgnRXhwcmVzc2lvbicsICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpKSwKLSgnRXhwcmVzc2lvbicsICgnU3Vic2NyaXB0JywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTmFtZScsICgxLCAyKSwgJ2InLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNCksICdjJywgKCdMb2FkJywpKSwgTm9uZSksICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdBdHRyaWJ1dGUnLCAoMSwgMiksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAnYicsICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdTdWJzY3JpcHQnLCAoMSwgMiksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ1NsaWNlJywgKCdOYW1lJywgKDEsIDIpLCAnYicsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2MnLCAoJ0xvYWQnLCkpLCBOb25lKSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ05hbWUnLCAoMSwgMCksICd2JywgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0xpc3QnLCAoMSwgMCksIFsoJ051bScsICgxLCAxKSwgMSksICgnTnVtJywgKDEsIDMpLCAyKSwgKCdOdW0nLCAoMSwgNSksIDMpXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0xpc3QnLCAoMSwgMCksIFtdLCAoJ0xvYWQnLCkpKSwKICgnRXhwcmVzc2lvbicsICgnVHVwbGUnLCAoMSwgMCksIFsoJ051bScsICgxLCAwKSwgMSksICgnTnVtJywgKDEsIDIpLCAyKSwgKCdOdW0nLCAoMSwgNCksIDMpXSwgKCdMb2FkJywpKSksCiAoJ0V4cHJlc3Npb24nLCAoJ1R1cGxlJywgKDEsIDEpLCBbKCdOdW0nLCAoMSwgMSksIDEpLCAoJ051bScsICgxLCAzKSwgMiksICgnTnVtJywgKDEsIDUpLCAzKV0sICgnTG9hZCcsKSkpLAogKCdFeHByZXNzaW9uJywgKCdUdXBsZScsICgxLCAwKSwgW10sICgnTG9hZCcsKSkpLAotKCdFeHByZXNzaW9uJywgKCdDYWxsJywgKDEsIDApLCAoJ0F0dHJpYnV0ZScsICgxLCAwKSwgKCdBdHRyaWJ1dGUnLCAoMSwgMCksICgnQXR0cmlidXRlJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdhJywgKCdMb2FkJywpKSwgJ2InLCAoJ0xvYWQnLCkpLCAnYycsICgnTG9hZCcsKSksICdkJywgKCdMb2FkJywpKSwgWygnU3Vic2NyaXB0JywgKDEsIDgpLCAoJ0F0dHJpYnV0ZScsICgxLCA4KSwgKCdOYW1lJywgKDEsIDgpLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTnVtJywgKDEsIDEyKSwgMSksICgnTnVtJywgKDEsIDE0KSwgMiksIE5vbmUpLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUpKSwKKygnRXhwcmVzc2lvbicsICgnQ2FsbCcsICgxLCA3KSwgKCdBdHRyaWJ1dGUnLCAoMSwgNiksICgnQXR0cmlidXRlJywgKDEsIDQpLCAoJ0F0dHJpYnV0ZScsICgxLCAyKSwgKCdOYW1lJywgKDEsIDApLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgJ2MnLCAoJ0xvYWQnLCkpLCAnZCcsICgnTG9hZCcsKSksIFsoJ1N1YnNjcmlwdCcsICgxLCAxMiksICgnQXR0cmlidXRlJywgKDEsIDEwKSwgKCdOYW1lJywgKDEsIDgpLCAnYScsICgnTG9hZCcsKSksICdiJywgKCdMb2FkJywpKSwgKCdTbGljZScsICgnTnVtJywgKDEsIDEyKSwgMSksICgnTnVtJywgKDEsIDE0KSwgMiksIE5vbmUpLCAoJ0xvYWQnLCkpXSwgW10sIE5vbmUsIE5vbmUpKSwKIF0KIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKaW5kZXggYzc5ZmU2Zi4uZjkzYTUyZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CkBAIC0xNSw2ICsxNSw3IEBACiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIFNFUlZFUl9RVUlUID0gYidRVUlUXG4nCitUSU1FT1VUID0gMy4wCiAKIGlmIHRocmVhZGluZzoKICAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKQEAgLTEyMyw3ICsxMjQsOSBAQAogICAgICAgICBjLnB1c2goYiJJJ20gbm90IGRlYWQgeWV0ISIgKyB0ZXJtKQogICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW2IiaGVsbG8gd29ybGQiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCiAKQEAgLTE1NCw3ICsxNTcsOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtkYXRhWzp0ZXJtbGVuXV0pCiAKQEAgLTE3NCw3ICsxNzksOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVmZmVyLCBkYXRhKQpAQCAtMTg2LDcgKzE5Myw5IEBACiAgICAgICAgIHAgPSBhc3luY2hhdC5zaW1wbGVfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCwgYnVmZmVyX3NpemU9OCkKICAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIocCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTk2LDcgKzIwNSw5IEBACiAgICAgICAgIGRhdGEgPSBiImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIgogICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0yMDcsNyArMjE4LDkgQEAKICAgICAgICAgYy5wdXNoKGIiaGVsbG8gd29ybGRcblxuSSdtIG5vdCBkZWFkIHlldCFcbiIpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIFtiImhlbGxvIHdvcmxkIiwgYiIiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCkBAIC0yMjYsNyArMjM5LDkgQEAKICAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CiAgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgogICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCiAgICAgICAgICMgdGhlIHNlcnZlciBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGEgYnl0ZSBvciB0d28gYmFjaywgYnV0IHRoaXMKQEAgLTI2OCw5ICsyODMsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucG9wKCksICgwLCBOb25lKSkKIAogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFzeW5jaGF0LCBUZXN0QXN5bmNoYXRfV2l0aFBvbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyRnVuY3Rpb25zLCBUZXN0RmlmbykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzY2U1ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkKQEAgLTAsMCArMSwzMSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIHdlIGRvbid0IGhhdmUgdGhyZWFkaW5nLgoraW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKyMgU2tpcCB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIGNvbmN1cnJlbnQuZnV0dXJlcy4KK2ltcG9ydF9tb2R1bGUoJ2NvbmN1cnJlbnQuZnV0dXJlcycpCisKKworZGVmIHN1aXRlKCk6CisgICAgdGVzdHNfZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAndGVzdHMudHh0JykKKyAgICB3aXRoIG9wZW4odGVzdHNfZmlsZSkgYXMgZnA6CisgICAgICAgIHRlc3RfbmFtZXMgPSBmcC5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgIGZvciB0ZXN0X25hbWUgaW4gdGVzdF9uYW1lczoKKyAgICAgICAgbW9kX25hbWUgPSAndGVzdC4nICsgdGVzdF9uYW1lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzW21vZF9uYW1lXQorICAgICAgICAgICAgdGVzdHMuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KHN1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0OTQ5MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX21haW5fXy5weQpAQCAtMCwwICsxLDUgQEAKK2Zyb20gLiBpbXBvcnQgdGVzdF9tYWluCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNoby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDYzNjRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKQEAgLTAsMCArMSw4IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICBvcy53cml0ZSgxLCBidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzY2EwOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMi5weQpAQCAtMCwwICsxLDYgQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICBvcy53cml0ZSgyLCBiJ0VSUjonK2J1ZikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjQ0OTY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8zLnB5CkBAIC0wLDAgKzEsMTEgQEAKK2ltcG9ydCBvcworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGJ1ZiA9IG9zLnJlYWQoMCwgMTAyNCkKKyAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLndyaXRlKDEsIGInT1VUOicrYnVmKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgIG9zLndyaXRlKDIsIGInRVJSOicgKyBleC5fX2NsYXNzX18uX19uYW1lX18uZW5jb2RlKCdhc2NpaScpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2tleWNlcnQzLnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBTUxnRDBrQUtEYjVjRnlQCitqYndOZlI1Q3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNCis5ejJqMU9sYU4rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaCithZ2dFZGtqMVRzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRUNnWUEwYUgrVDJWZjNXT1B2OEtka2NKZzZnQ1JlCit5SktYT1dnV1JjaWN4L0NVek9Fc1R4bUZJRFBMeHFBV0Ezazd2MEIrM3ZqR3c1WTlseWNWLzVYcVhOb1FJMTRqCit5MDlpTnN1bWRzMTN1NUFLa0dkVEpuWmhRN1VLZG9WSGZ1UDQ0WmRPdi9ySjUvVkQ2RjR6V3l3cGU5MHBjYksrCitBV0RWdHVzZ0dRQlNpZUVsMVFKQkFPeVZyVUc1bDJ5b1VCdGQyenIva2lHbS9EWXlYbEl0aFFPL0EzL0xuZ0RXCis1L3lkR3hWc1Q3bEFWT2dDc29UKzBMNGVmVGg5MFBqelc4TFBRclBCV1ZNQ1FRRFMzaC9GdFlZZDVsZnorRk5MCis5Q0VlMUYxdzlsOFA3NDl1TlVEMGczMTd6djF0YXRJcVZDc1FXSGZWSE5kVnZmUSt2U0Z3MzhPT1JPMDBYcXM5CisxR0pyQWtCa29YWEVreENab3k0UHRlaGVPLzhJV1dMR0dyNkw3ZGk2TXpGbDFsSXF3VDZEOEw5b2FWMnZ5bkZUCitEbktvcDBwYTA5VW5oanl3NTdLTU5tU0UyU1VKQWtFQXJsb1RFenBnUm1DcTRJSzIvTnBDZUdkSFM1dXFSbGJoCisxVklhL3hHcHM3RVdRbDVNbjhzd1FEZWwvWVAzV0dIVGpmeDdwZ1NlZ1Fma3lhUnRHcFo5T1FKQWE5VnVtajhtCitKQUF0STBCbmdhOGhnUXg3QmhUUVk0Q2FkRHh5aVJHT0dZaHdVellWQ3FrYjJzYlZSSDlIbndVYUpUN2NXQlkzCitSbkpkSE9NWFdlbTcvdz09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgxICgweGIwOTI2NGIxZjJkYTIxZDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049bG9jYWxob3N0CisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YzI6ZTA6MGY6NDk6MDA6Mjg6MzY6Zjk6NzA6NWM6OGY6OGQ6YmM6MGQ6CisgICAgICAgICAgICAgICAgICAgIDdkOjFlOjQyOmI1OmVjOjFkOjVjOjJmOmE0OjMxOjcwOjE2OjBmOmMwOmNiOgorICAgICAgICAgICAgICAgICAgICBjNjoyNDpkMzpiZToxMzoxNjplZTphNTo2Nzo5NzowMzphNjpkZjphOTo5OToKKyAgICAgICAgICAgICAgICAgICAgOTY6Y2M6Yzc6MmE6ZmI6MTE6N2Y6NGU6NjU6NGY6OGE6NWU6ODI6MjE6NGM6CisgICAgICAgICAgICAgICAgICAgIGY3OjNkOmEzOmQ0OmU5OjVhOjM3OmU3OjIyOmZkOjdlOmNkOjUzOjZkOjkzOgorICAgICAgICAgICAgICAgICAgICAzNDpkZTo5YzphZDo4NDphMjozNzpiZTpjNTo4ZDo4Mjo0ZjplMzphZToyMzoKKyAgICAgICAgICAgICAgICAgICAgZjM6YmU6YTc6NzU6MmM6NzI6MGY6ZWE6ZjM6Y2E6Y2Q6ZmM6ZTk6M2Y6YjU6CisgICAgICAgICAgICAgICAgICAgIGFmOjU2Ojk5OjZhOjA4OjA0Ojc2OjQ4OmY1OjRlOmM0OmFjOmJmOjVjOmQ2OgorICAgICAgICAgICAgICAgICAgICAyMTo4MjphNTozYzo4ODplNTpiZToxYjpiMQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDJmOjQyOjVmOmEzOjA5OjJjOmZhOjUxOjg4OmM3OjM3OjdmOmVhOjBlOjYzOmYwOmEyOjlhOgorICAgICAgICAgZTU6NWE6ZTI6Yzg6MjA6ZjA6M2Y6NjA6YmM6Yzg6MGY6YjY6YzY6NzY6Y2U6ZGI6ODM6OTM6CisgICAgICAgICBmNTphMzozMzo2NzowMTo4ZTowNDpjZDowMDo5YTo3MzpmZDpmMzozNTo4NjpmYTpkNzoxMzoKKyAgICAgICAgIGUyOjQ2OmM2OjlkOmMwOjI5OjUzOmQ0OmE5OjkwOmI4Ojc3OjRiOmU2OjgzOjc2OmU0OjkyOgorICAgICAgICAgZDY6OWM6NTA6Y2Y6NDM6ZDA6YzY6MDE6Nzc6NjE6OWE6ZGU6OWI6NzA6Zjc6NzI6Y2Q6NTk6CisgICAgICAgICAwMDozMTo2OTpkOTpiNDpjYTowNjo5Yzo2ZDpjMzpjNzo4MDo4Yzo2ODplNjpiNTphMjpmODoKKyAgICAgICAgIGVmOjFkOmJiOjE2OjlmOjc3Ojc3OmVmOjg3OjYyOjIyOjliOjRkOjY5OmE0OjNhOjFhOmYxOgorICAgICAgICAgMjE6NWU6OGM6MzI6YWM6OTI6ZmQ6MTU6NmI6MTg6YzI6N2Y6MTU6MGQ6OTg6MzA6Y2E6NzU6CisgICAgICAgICA4ZjoxYTo3MTpkZjpkYToxZDpiMjplZjo5YTplODoyZDoyZTowMjpmZDo0YTozYzphYTo5NjoKKyAgICAgICAgIDBiOjA2OjVkOjM1OmIzOjNkOjI0Ojg3OjRiOmUwOmIwOjU4OjYwOjJmOjQ1OmFjOjJlOjQ4OgorICAgICAgICAgOGE6YjA6OTk6MTA6NjU6Mjc6ZmY6Y2M6YjE6ZDg6ZmQ6YmQ6MjY6NmI6Yjk6MGM6MDU6MmE6CisgICAgICAgICBmNDo0NTo2MzozNTo1MTowNzplZDo4Mzo4NTpmZTo2Zjo2OTpjYjpiYjo0MDphODphZTpiNjoKKyAgICAgICAgIDNiOjU2OjRhOjJkOmE0OmVkOjZkOjExOjJjOjRkOmVkOjE3OjI0OmZkOjQ3OmJjOmQzOjQxOgorICAgICAgICAgYTI6ZDM6MDY6ZmU6MGM6OTA6ZDg6ZDg6OTQ6MjY6YzQ6ZmY6Y2M6YTE6ZDg6NDI6Nzc6ZWI6CisgICAgICAgICBmYzphOTo5NDo3MQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcERDQ0FZd0NDUUN3a21TeDh0b2gwVEFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJmTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJJd0VBWURWUVFERXdsc2IyTmhiR2h2CitjM1F3Z1o4d0RRWUpLb1pJaHZjTkFRRUJCUUFEZ1kwQU1JR0pBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UGpid05mUjVDCit0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTTl6MmoxT2xhCitOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWmFnZ0Vka2oxCitUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUV3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUM5Q1g2TUpMUHBSCitpTWMzZitvT1kvQ2ltdVZhNHNnZzhEOWd2TWdQdHNaMnp0dURrL1dqTTJjQmpnVE5BSnB6L2ZNMWh2clhFK0pHCit4cDNBS1ZQVXFaQzRkMHZtZzNia2t0YWNVTTlEME1ZQmQyR2EzcHR3OTNMTldRQXhhZG0weWdhY2JjUEhnSXhvCis1cldpK084ZHV4YWZkM2Z2aDJJaW0wMXBwRG9hOFNGZWpES3NrdjBWYXhqQ2Z4VU5tRERLZFk4YWNkL2FIYkx2CittdWd0TGdMOVNqeXFsZ3NHWFRXelBTU0hTK0N3V0dBdlJhd3VTSXF3bVJCbEovL01zZGo5dlNacnVRd0ZLdlJGCitZelZSQisyRGhmNXZhY3U3UUtpdXRqdFdTaTJrN1cwUkxFM3RGeVQ5Ujd6VFFhTFRCdjRNa05qWWxDYkUvOHloCisyRUozNi95cGxIRT0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YjFmM2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtCkBAIC0wLDAgKzEsNzggQEAKK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDMgKDB4MikKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODAgKDB4YjA5MjY0YjFmMmRhMjFkMCkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IEphbiAgMiAxOTo0NzowNyAyMDIzIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMjA0OCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6ZTc6ZGU6ZTk6ZTM6MGM6OWY6MDA6YjY6YTE6ZmQ6MmI6NWI6OTY6ZDI6CisgICAgICAgICAgICAgICAgICAgIDZmOmNjOmUwOmJlOjg2OmI5OjIwOjVlOmVjOjAzOjdhOjU1OmFiOmVhOmE0OgorICAgICAgICAgICAgICAgICAgICBlOTpmOTo0OTo4NTpkMjo2NjpkNTplZDpjNzo3YTplYTo1Njo4ZToyZDo4ZjoKKyAgICAgICAgICAgICAgICAgICAgZTc6NDI6ZTI6NjI6Mjg6YTk6OWY6ZDY6MWI6OGU6ZWI6YjU6YjQ6OWM6OWY6CisgICAgICAgICAgICAgICAgICAgIDE0OmFiOmRmOmU2Ojk0OjhiOjc2OjFkOjNlOjZkOjI0OjYxOmVkOjBjOmJmOgorICAgICAgICAgICAgICAgICAgICAwMDo4YTo2MTowYzpkZjo1YzpjODozNjo3MzoxNjowMDpjZDo0NzpiYTo2ZDoKKyAgICAgICAgICAgICAgICAgICAgYTQ6YTQ6NzQ6ODg6ODM6MjM6MGE6MTk6ZmM6MDk6YTc6M2M6NGE6NGI6ZDM6CisgICAgICAgICAgICAgICAgICAgIGU3OjFkOjJkOmU0OmVhOjRjOjU0OjIxOmYzOjI2OmRiOjg5OjM3OjE4OmQ0OgorICAgICAgICAgICAgICAgICAgICAwMjpiYjo0MDozMjo1ZjphNDpmZjoyZDoxYzpmNzpkNDpiYjplYzo4ZTpjZjoKKyAgICAgICAgICAgICAgICAgICAgNWM6ODI6YWM6ZTY6N2M6MDg6NmM6NDg6ODU6NjE6MDc6N2Y6MjU6ZTA6NWM6CisgICAgICAgICAgICAgICAgICAgIGUwOmJjOjM0OjVmOmUwOmI5OjA0OjQ3Ojc1OmM4OjQ3OjBiOjhkOmJjOmQ2OgorICAgICAgICAgICAgICAgICAgICBjODo2ODo1ZjozMzo4Mzo2MjpkMjoyMDo0NDozNTpiMTphZDo4MToxYTo4YToKKyAgICAgICAgICAgICAgICAgICAgY2Q6YmM6MzU6YjA6NWM6OGI6NDc6ZDY6MTg6ZTk6OWM6MTg6OTc6Y2M6MDE6CisgICAgICAgICAgICAgICAgICAgIDNjOjI5OmNjOmU4OjFlOmU0OmU0OmMxOmI4OmRlOmU3OmMyOjExOjE4Ojg3OgorICAgICAgICAgICAgICAgICAgICA1YTo5MzozNDpkODphNjoyNTpmNzoxNDo3MTplYjplNDoyMTphMjpkMjowZjoKKyAgICAgICAgICAgICAgICAgICAgMmU6MmU6ZDQ6NjI6MDA6MzU6ZDM6ZDY6ZWY6NWM6NjA6NGI6NGM6YTk6MTQ6CisgICAgICAgICAgICAgICAgICAgIGUyOmRkOjE1OjU4OjQ2OjM3OjMzOjI2OmI3OmU3OjJlOjVkOmVkOjQyOmU0OgorICAgICAgICAgICAgICAgICAgICBjNTo0ZAorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICAgICAgWDUwOXYzIGV4dGVuc2lvbnM6CisgICAgICAgICAgICBYNTA5djMgU3ViamVjdCBLZXkgSWRlbnRpZmllcjogCisgICAgICAgICAgICAgICAgQkM6REQ6NjI6RDk6NzY6REE6MUI6RDI6NTQ6NkI6Q0Y6RTA6NjY6OUI6MUU6MUU6N0I6NTY6MEM6MEIKKyAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIGtleWlkOkJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisKKyAgICAgICAgICAgIFg1MDl2MyBCYXNpYyBDb25zdHJhaW50czogCisgICAgICAgICAgICAgICAgQ0E6VFJVRQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgN2Q6MGE6ZjU6Y2I6OGQ6ZDM6NWQ6YmQ6OTk6OGU6Zjg6MmI6MGY6YmE6ZWI6YzI6ZDk6YTY6CisgICAgICAgICAyNzo0ZjoyZTo3YjoyZjowZTo2NDpkODoxYzozNTo1MDo0ZTplZTpmYzo5MDpiOTo4ZDo2ZDoKKyAgICAgICAgIGE4OmM1OmM2OjA2OmIwOmFmOmYzOjJkOmJmOjNiOmI4OjQyOjA3OmRkOjE4OjdkOjZkOjk1OgorICAgICAgICAgNTQ6NTc6ODU6MTg6NjA6NDc6MmY6ZWI6Nzg6MWI6Zjk6ZTg6MTc6ZmQ6NWE6MGQ6ODc6MTc6CisgICAgICAgICAyODphYzo0Yzo2YTplNjpiYzoyOTpmNDpmNDo1NTo3MDoyOTo0MjpkZTo4NTplYTphYjo2YzoKKyAgICAgICAgIDIzOjA2OjY0OjMwOjc1OjAyOjhlOjUzOmJjOjVlOjAxOjMzOjM3OmNjOjFlOmNkOmI4OmE0OgorICAgICAgICAgZmQ6Y2E6ZTQ6NWY6NjU6M2I6ODM6MWM6ODY6ZjE6NTU6MDI6YTA6M2E6OGY6ZGI6OTE6Yjc6CisgICAgICAgICA0MDoxNDpiNDplNzo4ZDpkMjplZTo3MzpiYTplMzplNTozNDoyZDpiYzo5NDo2Zjo0ZToyNDoKKyAgICAgICAgIDA2OmY3OjVmOjhiOjBlOmE3OjhlOjZiOmRlOjVlOjc1OmY0OjMyOjlhOjUwOmIxOjQ0OjMzOgorICAgICAgICAgOWE6ZDA6MDU6ZTI6Nzg6ODI6ZmY6ZGI6ZGE6OGE6NjM6ZWI6YTk6ZGQ6ZDE6YmY6YTA6NjE6CisgICAgICAgICBhZDplMzo5ZTo4YToyNDo1ZDo2MjowZTplNzo0Yzo5MTo3ZjplZjpkZjozNDozNjozYjoyZjoKKyAgICAgICAgIDVkOmY1Ojg0OmIyOjJmOmM0OjZkOjkzOjk2OjFhOjZmOjMwOjI4OmYxOmRhOjEyOjlhOjY0OgorICAgICAgICAgYjQ6NDA6MzM6MWQ6YmQ6ZGU6MmI6NTM6YTg6ZWE6YmU6ZDY6YmM6NGU6OTY6ZjU6NDQ6ZmI6CisgICAgICAgICAzMjoxODphZTpkNToxZjpmNjo2OTphZjpiNjo0ZTo3YjoxZDo1ODplYzozYjphOTo1MzphMzoKKyAgICAgICAgIDVlOjU4OmM4OjllCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSURiVENDQWxXZ0F3SUJBZ0lKQUxDU1pMSHkyaUhRTUEwR0NTcUdTSWIzRFFFQkJRVUFNRTB4Q3pBSkJnTlYKK0JBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnUm05MWJtUmhkR2x2YmlCRFFURVcKK01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakFlRncweE16QXhNRFF4T1RRM01EZGFGdzB5TXpBeE1ESXgKK09UUTNNRGRhTUUweEN6QUpCZ05WQkFZVEFsaFpNU1l3SkFZRFZRUUtEQjFRZVhSb2IyNGdVMjltZEhkaGNtVWcKK1JtOTFibVJoZEdsdmJpQkRRVEVXTUJRR0ExVUVBd3dOYjNWeUxXTmhMWE5sY25abGNqQ0NBU0l3RFFZSktvWkkKK2h2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBT2ZlNmVNTW53QzJvZjByVzViU2I4emd2b2E1SUY3c0EzcFYKK3ErcWs2ZmxKaGRKbTFlM0hldXBXamkyUDUwTGlZaWlwbjlZYmp1dTF0SnlmRkt2ZjVwU0xkaDArYlNSaDdReS8KK0FJcGhETjljeURaekZnRE5SN3B0cEtSMGlJTWpDaG44Q2FjOFNrdlQ1eDB0NU9wTVZDSHpKdHVKTnhqVUFydEEKK01sK2sveTBjOTlTNzdJN1BYSUtzNW53SWJFaUZZUWQvSmVCYzRMdzBYK0M1QkVkMXlFY0xqYnpXeUdoZk00TmkKKzBpQkVOYkd0Z1JxS3pidzFzRnlMUjlZWTZad1lsOHdCUENuTTZCN2s1TUc0M3VmQ0VSaUhXcE0wMktZbDl4UngKKzYrUWhvdElQTGk3VVlnQTEwOWJ2WEdCTFRLa1U0dDBWV0VZM015YTM1eTVkN1VMa3hVMENBd0VBQWFOUU1FNHcKK0hRWURWUjBPQkJZRUZMemRZdGwyMmh2U1ZHdlA0R2FiSGg1N1Znd0xNQjhHQTFVZEl3UVlNQmFBRkx6ZFl0bDIKKzJodlNWR3ZQNEdhYkhoNTdWZ3dMTUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUIKK0FIMEs5Y3VOMDEyOW1ZNzRLdys2NjhMWnBpZFBMbnN2RG1UWUhEVlFUdTc4a0xtTmJhakZ4Z2F3ci9NdHZ6dTQKK1FnZmRHSDF0bFZSWGhSaGdSeS9yZUJ2NTZCZjlXZzJIRnlpc1RHcm12Q24wOUZWd0tVTGVoZXFyYkNNR1pEQjEKK0FvNVR2RjRCTXpmTUhzMjRwUDNLNUY5bE80TWNodkZWQXFBNmo5dVJ0MEFVdE9lTjB1NXp1dVBsTkMyOGxHOU8KK0pBYjNYNHNPcDQ1cjNsNTE5REthVUxGRU01clFCZUo0Z3YvYjJvcGo2Nm5kMGIrZ1lhM2pub29rWFdJTzUweVIKK2YrL2ZORFk3TDEzMWhMSXZ4RzJUbGhwdk1DangyaEthWkxSQU14MjkzaXRUcU9xKzFyeE9sdlZFK3pJWXJ0VWYKKzltbXZ0azU3SFZqc082bFRvMTVZeUo0PQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9jZXJ0LnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdhN2Q3ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0KQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDVkRDQ0FiMmdBd0lCQWdJSkFOZkhPQmtacjhKT01BMEdDU3FHU0liM0RRRUJCUVVBTUY4eEN6QUpCZ05WCitCQVlUQWxoWk1SY3dGUVlEVlFRSEV3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1CitJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjR4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERBZUZ3MHhNREV3CitNRGd5TXpBeE5UWmFGdzB5TURFd01EVXlNekF4TlRaYU1GOHhDekFKQmdOVkJBWVRBbGhaTVJjd0ZRWURWUVFICitFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrCitZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3CitnWWtDZ1lFQTIxdlQ1aXNxN0Y2OGFtWXV1TnBTRmxLRFByTVVDYTRZV1lxWlJ0Mk9aKy8zTkthWjJ4QWlTd3I3Cis2TXJRRjcwdDVuTGJTUHBxRTUrNVZyUzU4U1krZy9zWExpRmQ2QXBsSDF3Slp3aDc4RG9mYkZZWFVnZ2t0Rk10CitwVHlpWDhqdFA2NmJrY1BrREFEQTA4OVJJMVRRUjZDYStuN0hGYTdjMWZhYlZWNmkzemtDQXdFQUFhTVlNQll3CitGQVlEVlIwUkJBMHdDNElKYkc5allXeG9iM04wTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUhQY3RRQkVRNHdkCitCSjYrSmNwSXJhb3BMbjhCR2hiak5XajQwbW1ScVdCL05BV0Y2TTVuZTdLcEdBdTd0TGVHNGhiMXpMYWxkSzhHCitseHkyR1BTUkY2TEZTNDhkcEVqMkhiTXYybnZ2Nnh4YWxETUo5K0RpY1dnQUtUUTZiY1gyajNHVWtDUjBnL1QxCitDUmxOQkFBbHZoS3pPN0NscGY5bDBZS0JFZnJhSkJ5WAorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDNiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2tleS5wZW0KQEAgLTAsMCArMSwxNiBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTnRiMCtZckt1eGV2R3BtCitMcmphVWhaU2d6NnpGQW11R0ZtS21VYmRqbWZ2OXpTbW1kc1FJa3NLKytqSzBCZTlMZVp5MjBqNmFoT2Z1VmEwCit1ZkVtUG9QN0Z5NGhYZWdLWlI5Y0NXY0llL0E2SDJ4V0YxSUlKTFJUTGFVOG9sL0k3VCt1bTVIRDVBd0F3TlBQCitVU05VMEVlZ212cCt4eFd1M05YMm0xVmVvdDg1QWdNQkFBRUNnWUEzWmRaNjczWDBvZXhGbHE3QUFtcnV0a0h0CitDTDdMdndycE9pYUJqaHlUeFRlU05XenZ0UUJrSVU4RE9JMGJJYXpBNFVyZUFGZmZ3dHZFdVBtb25EYjNGK0lxCitTTUF1NDJYY0d5VlpFbCtnSGxUUFU5WFJYN25UT1hWdCtNbFJSUnhMNnQ5R2tHZlVBWEkzWHhKRFhXM2MwdkJLCitVTDl4cUQ4Y09SWE9mRTA2clFKQkFQOG1FWDFFUmtSNjRQdHNvZTQyODF2alRsTmZJYnM3Tk1Qa1Vucm45Ti9ZCitCTGhqTklmUTNIRlpHOEJUTUxmWDdrQ1M5RDU5M0RXNXRWNFo5QlAvYzZjQ1FRRGNGekNjVkFyTmgySlN5d09RCitaZlRmUmJKZy9aNUx0OUZrbmd2MW1lZUdOUGdJTUxOOFNnNjc5cEFPT1dtemRNTzNWNzA2ck5QelNWTU1FN0U1CitvUElmQWtFQThwRGRkYXJQNXRDdlRUZ1VwbVRGYmFrbTBLb1RabTIrRnpIY25BNGpSaCtYTlRqVE92OThZNklrCitlTzVkMVpuS1hzZVd2a1puY1FneGZkbk1xcXBqNXdKQWNOcS9SVm5lMURiWWx3V2NoVDJTaTY1TVltbUo4dCtGCiswbWNzVUxxak9uRU13ZjVlK3B0cTVMendieXJIWllxNUZOazdvY3VmUHYvWlFyY1NTQytjRndKQkFLdk9KQnlTCit4NTZxeUdlWkxPUWxXUzJKUzNLSm81OVh1TEZHcWNiZ045T205eEZhNDFZYjROOU52cGxGaXZzdlpkdzNtMVEvCitTUElYUXVUOFJNUERWTlE9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Jhc2VfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZjI5NzUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpAQCAtMCwwICsxLDY4NCBAQAorIiIiVGVzdHMgZm9yIGJhc2VfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZF91bnVzZWRfcG9ydCwgSVBWNl9FTkFCTEVECisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgYmFzZV9ldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgY29uc3RhbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGV2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHByb3RvY29scworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgbSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCwgbSwgbSwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV93cml0ZV9waXBlX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgZ2VuID0gc2VsZi5sb29wLl9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KG0sIG0sIG0sIG0sIG0sIG0sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIG5leHQsIGl0ZXIoZ2VuKSkKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfaGFuZGxlKHNlbGYpOgorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX3RpbWVyKHNlbGYpOgorICAgICAgICBoID0gZXZlbnRzLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkrMTAsIGxhbWJkYTogRmFsc2UsICgpKQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9zY2hlZHVsZWQpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX2NhbmNlbGxlZF9oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBldmVudHMuSGFuZGxlKGxhbWJkYTogRmFsc2UsICgpKQorICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2soaCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZik6CisgICAgICAgIGV4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yKGV4ZWN1dG9yKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4ZWN1dG9yLCBzZWxmLmxvb3AuX2RlZmF1bHRfZXhlY3V0b3IpCisKKyAgICBkZWYgdGVzdF9nZXRuYW1laW5mbyhzZWxmKToKKyAgICAgICAgc29ja2FkZHIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmdldG5hbWVpbmZvKHNvY2thZGRyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKE5vbmUsIHNvY2tldC5nZXRuYW1laW5mbywgc29ja2FkZHIsIDApLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb24oc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX2NhbGxiYWNrLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGV2ZW50cy5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oaCwgc2VsZi5sb29wLl9yZWFkeSkKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigxMC4wLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihoLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihoLCBzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcl9uZWdhdGl2ZV9kZWxheXMoc2VsZik6CisgICAgICAgIGNhbGxzID0gW10KKworICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKC0xLCBjYiwgJ2EnKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigtMiwgY2IsICdiJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsnYicsICdhJ10pCisKKyAgICBkZWYgdGVzdF90aW1lX2FuZF9jYWxsX2F0KHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd2hlbiA9IHNlbGYubG9vcC50aW1lKCkgKyAwLjEKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfYXQod2hlbiwgY2IpCisgICAgICAgIHQwID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0MSA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDkgPD0gdDEtdDAgPD0gMC45LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciwKKyAgICAgICAgICAgIE5vbmUsIGV2ZW50cy5IYW5kbGUoY2IsICgpKSwgKCcnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IsCisgICAgICAgICAgICBOb25lLCBldmVudHMuVGltZXJIYW5kbGUoMTAsIGNiLCAoKSkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYiwgKCkpCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX3BsYWluKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUoY2IsICgpKQorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4ZWN1dG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXhlY3V0b3Iuc3VibWl0LnJldHVybl92YWx1ZSA9IGYKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIHJlcykKKworICAgICAgICBleGVjdXRvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGV4ZWN1dG9yLnN1Ym1pdC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoZXhlY3V0b3IsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhlY3V0b3Iuc3VibWl0LmNhbGxlZCkKKworICAgICAgICBmLmNhbmNlbCgpICAjIERvbid0IGNvbXBsYWluIGFib3V0IGFiYW5kb25lZCBGdXR1cmUuCisKKyAgICBkZWYgdGVzdF9fcnVuX29uY2Uoc2VsZik6CisgICAgICAgIGgxID0gZXZlbnRzLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyA1LjAsIGxhbWJkYTogVHJ1ZSwgKCkpCisgICAgICAgIGgyID0gZXZlbnRzLlRpbWVySGFuZGxlKHRpbWUubW9ub3RvbmljKCkgKyAxMC4wLCBsYW1iZGE6IFRydWUsICgpKQorCisgICAgICAgIGgxLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoMSkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgyKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICB0ID0gc2VsZi5sb29wLl9zZWxlY3Rvci5zZWxlY3QuY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg5LjUgPCB0IDwgMTAuNSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaDJdLCBzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMudGltZScpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9fcnVuX29uY2VfbG9nZ2luZyhzZWxmLCBtX2xvZ2dpbmcsIG1fdGltZSk6CisgICAgICAgICMgTG9nIHRvIElORk8gbGV2ZWwgaWYgdGltZW91dCA+IDEuMCBzZWMuCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGRhdGEgPSBbMTAuMCwgMTAuMCwgMTIuMCwgMTMuMF0KKworICAgICAgICBkZWYgbW9ub3RvbmljKCk6CisgICAgICAgICAgICBub25sb2NhbCBkYXRhLCBpZHgKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICByZXR1cm4gZGF0YVtpZHhdCisKKyAgICAgICAgbV90aW1lLm1vbm90b25pYyA9IG1vbm90b25pYworICAgICAgICBtX2xvZ2dpbmcuSU5GTyA9IGxvZ2dpbmcuSU5GTworICAgICAgICBtX2xvZ2dpbmcuREVCVUcgPSBsb2dnaW5nLkRFQlVHCisKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKAorICAgICAgICAgICAgZXZlbnRzLlRpbWVySGFuZGxlKDExLjAsIGxhbWJkYTogVHJ1ZSwgKCkpKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5JTkZPLCBtX2xvZ2dpbmcubG9nLmNhbGxfYXJnc1swXVswXSkKKworICAgICAgICBpZHggPSAtMQorICAgICAgICBkYXRhID0gWzEwLjAsIDEwLjAsIDEwLjMsIDEzLjBdCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkID0gW2V2ZW50cy5UaW1lckhhbmRsZSgxMS4wLCBsYW1iZGE6VHJ1ZSwgKCkpXQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLkRFQlVHLCBtX2xvZ2dpbmcubG9nLmNhbGxfYXJnc1swXVswXSkKKworICAgIGRlZiB0ZXN0X19ydW5fb25jZV9zY2hlZHVsZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGhhbmRsZSA9IE5vbmUKKyAgICAgICAgcHJvY2Vzc2VkID0gRmFsc2UKKworICAgICAgICBkZWYgY2IobG9vcCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9jZXNzZWQsIGhhbmRsZQorICAgICAgICAgICAgcHJvY2Vzc2VkID0gVHJ1ZQorICAgICAgICAgICAgaGFuZGxlID0gbG9vcC5jYWxsX3Nvb24obGFtYmRhOiBUcnVlKQorCisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSAtIDEsIGNiLCAoc2VsZi5sb29wLCkpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2NoZWR1bGVkLmFwcGVuZChoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvY2Vzc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtoYW5kbGVdLCBsaXN0KHNlbGYubG9vcC5fcmVhZHkpKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCAnYmxhaCcpCisKKworY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY3JlYXRlX2Z1dHVyZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuSG9zdDogZXhhbXBsZS5jb21cclxuXHJcbicpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlEYXRhZ3JhbVByb3RvKHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNyZWF0ZV9mdXR1cmU9RmFsc2UpOgorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBjcmVhdGVfZnV0dXJlOgorICAgICAgICAgICAgc2VsZi5kb25lID0gZnV0dXJlcy5GdXR1cmUoKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMSVpFRCcKKworICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlcnJvcl9yZWNlaXZlZChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcFdpdGhTZWxlY3RvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gZXZlbnRzLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX211bHRpcGxlX2Vycm9ycyhzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGlkeCA9IC0xCisgICAgICAgIGVycm9ycyA9IFsnZXJyMScsICdlcnIyJ10KKworICAgICAgICBkZWYgX3NvY2tldCgqYXJncywgKiprdyk6CisgICAgICAgICAgICBub25sb2NhbCBpZHgsIGVycm9ycworICAgICAgICAgICAgaWR4ICs9IDEKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3JzW2lkeF0pCisKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0ID0gX3NvY2tldAorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICdNdWx0aXBsZSBleGNlcHRpb25zOiBlcnIxLCBlcnIyJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ub19ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiB0YXNrcy5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2Nvbm5lY3RfZXJyKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcxMDcuNi4xMDYuODInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGUoc2VsZik6CisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzAuMC4wLjEnLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMC4wLjAuMicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzX2xvY2FsX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGRlZiBiaW5kKGFkZHIpOgorICAgICAgICAgICAgaWYgYWRkclswXSA9PSAnMC4wLjAuMSc6CisgICAgICAgICAgICAgICAgZXJyID0gT1NFcnJvcignRXJyJykKKyAgICAgICAgICAgICAgICBlcnIuc3RyZXJyb3IgPSAnRXJyJworICAgICAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYmluZCA9IGJpbmQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbygqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gWygyLCAxLCA2LCAnJywgKCcwLjAuMC4xJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzAuMC4wLjInLCA4MCkpXQorCisgICAgICAgIGRlZiBnZXRhZGRyaW5mb190YXNrKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIHRhc2tzLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdFcnIyJykKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHIoY20uZXhjZXB0aW9uKS5zdGFydHN3aXRoKCdNdWx0aXBsZSBleGNlcHRpb25zOiAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oaG9zdCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgaWYgaG9zdCA9PSAnZXhhbXBsZS5jb20nOgorICAgICAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgTXlQcm90bywgJ2V4YW1wbGUuY29tJywgODAsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KE5vbmUsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIG1vY2tfZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBmLnNldF9yZXN1bHQoWyhzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9UQ1AsICcnLCAoJzEuMi4zLjQnLCA4MCkpXSkKKyAgICAgICAgICAgIHJldHVybiBmCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvLnNpZGVfZWZmZWN0ID0gbW9ja19nZXRhZGRyaW5mbworICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdC5yZXR1cm5fdmFsdWUgPSAoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgY2xhc3MgX1NlbGVjdG9yVHJhbnNwb3J0TW9jazoKKyAgICAgICAgICAgIF9zb2NrID0gTm9uZQorCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisKKyAgICAgICAgZGVmIG1vY2tfbWFrZV9zc2xfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3ZHMpOgorICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclRyYW5zcG9ydE1vY2soKQorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrID0gc29jaworICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnNpZGVfZWZmZWN0ID0gbW9ja19tYWtlX3NzbF90cmFuc3BvcnQKKyAgICAgICAgQU5ZID0gdW5pdHRlc3QubW9jay5BTlkKKyAgICAgICAgIyBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncHl0aG9uLm9yZycpCisgICAgICAgICMgTmV4dCB0cnkgYW4gZXhwbGljaXQgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3BlcmwuY29tJykKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncGVybC5jb20nKQorICAgICAgICAjIEZpbmFsbHkgdHJ5IGFuIGV4cGxpY2l0IGVtcHR5IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aChBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIFdoZW4gbm90IHVzaW5nIHNzbCwgc2VydmVyX2hvc3RuYW1lIG11c3QgYmUgTm9uZS4KKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBXaGVuIHVzaW5nIHNzbCwgc2VydmVyX2hvc3RuYW1lIG1heSBiZSBOb25lIGlmIGhvc3QgaXMgbm9uLWVtcHR5LgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICcnLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgTm9uZSwgODAsIHNzbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9VHJ1ZSwgc29jaz1zb2NrKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZW1wdHlfaG9zdChzZWxmKToKKyAgICAgICAgIyBpZiBob3N0IGlzIGVtcHR5IHN0cmluZyB1c2UgTm9uZSBpbnN0ZWFkCisgICAgICAgIGhvc3QgPSBvYmplY3QoKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhvc3QKKyAgICAgICAgICAgIGhvc3QgPSBhcmdzWzBdCisgICAgICAgICAgICB5aWVsZCBmcm9tIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gdGFza3MuVGFzayhnZXRhZGRyaW5mbygqYXJncywgKiprd2RzKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCAnJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShob3N0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBNeVByb3RvLCAnMC4wLjAuMCcsIDAsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfbm9fZ2V0YWRkcmluZm8oc2VsZik6CisgICAgICAgIGdldGFkZHJpbmZvID0gc2VsZi5sb29wLmdldGFkZHJpbmZvID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgc3RyZXJyb3IgPSAnZXJyb3InCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gWworICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEyNy4wLjAuMScsIDEwMTAwKSldCisgICAgICAgIG1fc29jayA9IG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBtX3NvY2suYmluZC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX2FkZHJpbmZvKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8ucmV0dXJuX3ZhbHVlID0gW10KKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJ2xvY2FsaG9zdCcsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfYWRkcl9lcnJvcihzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9J2xvY2FsaG9zdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnbG9jYWxob3N0JywgMSwgMiwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfY29ubmVjdF9lcnIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgcHJvdG9jb2xzLkRhdGFncmFtUHJvdG9jb2wsIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X3NvY2tldF9lcnIoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2tldC5zb2NrZXQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX21hdGNoaW5nX2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwKKyAgICAgICAgICAgIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCksIGxvY2FsX2FkZHI9KCc6OjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc2V0YmxrX2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuc2V0YmxvY2tpbmcuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vYWRkcl9ub2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBwcm90b2NvbHMuRGF0YWdyYW1Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2NhbnRfYmluZChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtX3NvY2tldC5BRl9JTkVUNiA9IHNvY2tldC5BRl9JTkVUNgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBtX3NvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVyciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX3JldHJ5KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5hY2NlcHQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoZXJybm8uRU1GSUxFLCAnVG9vIG1hbnkgb3BlbiBmaWxlcycpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmV4Y2VwdGlvbi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxMCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKGNvbnN0YW50cy5BQ0NFUFRfUkVUUllfREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeVByb3RvLCBzb2NrLCBOb25lLCBOb25lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMyNTYwYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpAQCAtMCwwICsxLDE3ODcgQEAKKyIiIlRlc3RzIGZvciBldmVudHMucHkuIiIiCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgZXJybm8KK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCAgIyBmaW5kX3VudXNlZF9wb3J0LCBJUFY2X0VOQUJMRUQsIFRFU1RfSE9NRV9ESVIKKworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRyYW5zcG9ydHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvY2tzCisKKworZGVmIGRhdGFfZmlsZShmaWxlbmFtZSk6CisgICAgaWYgaGFzYXR0cihzdXBwb3J0LCAnVEVTVF9IT01FX0RJUicpOgorICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RfSE9NRV9ESVIsIGZpbGVuYW1lKQorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gZnVsbG5hbWUKKyAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBmdWxsbmFtZQorICAgIHJhaXNlIEZpbGVOb3RGb3VuZEVycm9yKGZpbGVuYW1lKQorCitPTkxZQ0VSVCA9IGRhdGFfZmlsZSgnc3NsX2NlcnQucGVtJykKK09OTFlLRVkgPSBkYXRhX2ZpbGUoJ3NzbF9rZXkucGVtJykKK1NJR05FRF9DRVJURklMRSA9IGRhdGFfZmlsZSgna2V5Y2VydDMucGVtJykKK1NJR05JTkdfQ0EgPSBkYXRhX2ZpbGUoJ3B5Y2FjZXJ0LnBlbScpCisKKworY2xhc3MgTXlQcm90byhwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuSG9zdDogZXhhbXBsZS5jb21cclxuXHJcbicpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlEYXRhZ3JhbVByb3RvKHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUxJWkVEJworCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVJlYWRQaXBlUHJvdG8ocHJvdG9jb2xzLlByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSBbJ0lOSVRJQUwnXQorICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDT05ORUNURUQnKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnRU9GJykKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gWydJTklUSUFMJywgJ0NPTk5FQ1RFRCcsICdFT0YnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnQ0xPU0VEJykKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVdyaXRlUGlwZVByb3RvKHByb3RvY29scy5CYXNlUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVN1YnByb2Nlc3NQcm90b2NvbChwcm90b2NvbHMuU3VicHJvY2Vzc1Byb3RvY29sKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgIHNlbGYuY29tcGxldGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzID0ge2ZkOiBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApIGZvciBmZCBpbiByYW5nZSgzKX0KKyAgICAgICAgc2VsZi5kYXRhID0gezE6IGInJywgMjogYicnfQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuZ290X2RhdGEgPSB7MTogbG9ja3MuRXZlbnQobG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyOiBsb2Nrcy5FdmVudChsb29wPWxvb3ApfQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDT05ORUNURUQnCisgICAgICAgIHNlbGYuY29ubmVjdGVkLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIHNlbGYuY29tcGxldGVkLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLmRhdGFbZmRdICs9IGRhdGEKKyAgICAgICAgc2VsZi5nb3RfZGF0YVtmZF0uc2V0KCkKKworICAgIGRlZiBwaXBlX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBmZCwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgaWYgZXhjOgorICAgICAgICAgICAgc2VsZi5kaXNjb25uZWN0c1tmZF0uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzW2ZkXS5zZXRfcmVzdWx0KGV4YykKKworICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gc2VsZi50cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorCisKK2NsYXNzIEV2ZW50TG9vcFRlc3RzTWl4aW46CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMganVzdCBpbiBjYXNlIGlmIHdlIGhhdmUgdHJhbnNwb3J0IGNsb3NlIGNhbGxiYWNrcworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfbmVzdGluZyhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzEoKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfcnVubmluZygpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvMSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvMigpKQorCisgICAgIyBOb3RlOiBiZWNhdXNlIG9mIHRoZSBkZWZhdWx0IFdpbmRvd3MgdGltaW5nIGdyYW51bGFyaXR5IG9mCisgICAgIyAxNS42IG1zZWMsIHdlIHVzZSBmYWlybHkgbG9uZyBzbGVlcCB0aW1lcyBoZXJlICh+MTAwIG1zZWMpLgorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYpOgorICAgICAgICB0MCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgdDEgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA4IDw9IHQxLXQwIDw9IDAuOCwgdDEtdDApCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfc3RvcHBlZChzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGNiKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3RfY2FsbF9sYXRlcihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoMC4xLCBjYWxsYmFjaywgJ2hlbGxvIHdvcmxkJykKKyAgICAgICAgdDAgPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8gd29ybGQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMDggPD0gdDEtdDAgPD0gMC44LCB0MS10MCkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbihzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZzEsIGFyZzIpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKGFyZzEsIGFyZzIpKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICdoZWxsbycsICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWygnaGVsbG8nLCAnd29ybGQnKV0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgZGVmIHJ1bl9pbl90aHJlYWQoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgJ2hlbGxvJykKKyAgICAgICAgICAgIGxvY2sucmVsZWFzZSgpCisKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1bl9pbl90aHJlYWQpCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0LmpvaW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X2NhbGxfc29vbl90aHJlYWRzYWZlX3NhbWVfdGhyZWFkKHNlbGYpOgorICAgICAgICByZXN1bHRzID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2soYXJnKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGFyZykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRzKSA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICd3b3JsZCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgWydoZWxsbycsICd3b3JsZCddKQorCisgICAgZGVmIHRlc3RfcnVuX2luX2V4ZWN1dG9yKHNlbGYpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBmMiA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgcnVuLCAneW8nKQorICAgICAgICByZXMsIHRocmVhZF9pZCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAneW8nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRocmVhZF9pZCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgYnl0ZXNfcmVhZCA9IFtdCisKKyAgICAgICAgZGVmIHJlYWRlcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRhdGEgPSByLnJlY3YoMTAyNCkKKyAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTcHVyaW91cyByZWFkaW5lc3Mgbm90aWZpY2F0aW9ucyBhcmUgcG9zc2libGUKKyAgICAgICAgICAgICAgICAjIGF0IGxlYXN0IG9uIExpbnV4IC0tIHNlZSBtYW4gc2VsZWN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBieXRlc19yZWFkLmFwcGVuZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoci5maWxlbm8oKSkpCisgICAgICAgICAgICAgICAgci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoci5maWxlbm8oKSwgcmVhZGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidhYmMnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LnNlbmQsIGInZGVmJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5jbG9zZSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbihieXRlc19yZWFkKSwgYidhYmNkZWYnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgdy5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIody5maWxlbm8oKSwgdy5zZW5kLCBiJ3gnKigyNTYqMTAyNCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGRlZiByZW1vdmVfd3JpdGVyKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV93cml0ZXIody5maWxlbm8oKSkpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihyZW1vdmVfd3JpdGVyKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgZGF0YSA9IHIucmVjdigyNTYqMTAyNCkKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihkYXRhKSwgMjAwKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfb3BzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGh0dHBkLmFkZHJlc3MpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KSkKKyAgICAgICAgICAgICMgY29uc3VtZSBkYXRhCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkpCisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5zdGFydHN3aXRoKGInSFRUUC8xLjAgMjAwIE9LJykpCisKKyAgICBkZWYgdGVzdF9zb2NrX2NsaWVudF9mYWlsKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHdpbGwgZ2V0IGFuIHVudXNlZCBwb3J0CisgICAgICAgIGFkZHJlc3MgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHMuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICAgICAgYWRkcmVzcyA9IHMuZ2V0c29ja25hbWUoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGFkZHJlc3MpKQorICAgICAgICBzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBsaXN0ZW5lciA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBsaXN0ZW5lci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgbGlzdGVuZXIuYmluZCgoJzEyNy4wLjAuMScsIDApKQorICAgICAgICBsaXN0ZW5lci5saXN0ZW4oMSkKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChsaXN0ZW5lcikKKyAgICAgICAgY29ubiwgYWRkciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLmdldHRpbWVvdXQoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRyLCBjbGllbnQuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQuZ2V0cGVlcm5hbWUoKSwgbGlzdGVuZXIuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIGxpc3RlbmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpLCAnTm8gU0lHS0lMTCcpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBjYXVnaHQgPSAwCisKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKworICAgICAgICAjIENoZWNrIGVycm9yIGJlaGF2aW9yIGZpcnN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgJ2Jvb20nLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFR5cGVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgJ2Jvb20nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5OU0lHKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMCwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIC0xLCBteV9oYW5kbGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0tJTEwsCisgICAgICAgICAgICBteV9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIFNJR0tJTEwgZG9lc24ndCByYWlzZSwgc2luY2Ugd2UgZG9uJ3QgY2FsbCBzaWduYWwoKS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdLSUxMKSkKKyAgICAgICAgIyBOb3cgc2V0IGEgaGFuZGxlciBhbmQgaGFuZGxlIGl0LgorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIG15X2hhbmRsZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWduYWwuU0lHSU5UKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXVnaHQsIDEpCisgICAgICAgICMgUmVtb3ZpbmcgaXQgc2hvdWxkIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuZGVmYXVsdF9pbnRfaGFuZGxlcikKKyAgICAgICAgIyBSZW1vdmluZyBhZ2FpbiByZXR1cm5zIEZhbHNlLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0FMUk0nKSwgJ05vIFNJR0FMUk0nKQorICAgIGRlZiB0ZXN0X3NpZ25hbF9oYW5kbGluZ193aGlsZV9zZWxlY3Rpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCB3aXRoIGEgc2lnbmFsIGFjdHVhbGx5IGFycml2aW5nIGR1cmluZyBhIHNlbGVjdCgpIGNhbGwuCisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2F1Z2h0CisgICAgICAgICAgICBjYXVnaHQgKz0gMQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0FMUk0sIG15X2hhbmRsZXIpCisKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1JFQUwsIDAuMDEsIDApICAjIFNlbmQgU0lHQUxSTSBvbmNlLgorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHQUxSTScpLCAnTm8gU0lHQUxSTScpCisgICAgZGVmIHRlc3Rfc2lnbmFsX2hhbmRsaW5nX2FyZ3Moc2VsZik6CisgICAgICAgIHNvbWVfYXJncyA9ICg0MiwpCisgICAgICAgIGNhdWdodCA9IDAKKworICAgICAgICBkZWYgbXlfaGFuZGxlcigqYXJncyk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIHNvbWVfYXJncykKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdBTFJNLCBteV9oYW5kbGVyLCAqc29tZV9hcmdzKQorCisgICAgICAgIHNpZ25hbC5zZXRpdGltZXIoc2lnbmFsLklUSU1FUl9SRUFMLCAwLjEsIDApICAjIFNlbmQgU0lHQUxSTSBvbmNlLgorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigwLjUsIHNlbGYubG9vcC5zdG9wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhdWdodCwgMSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksICpodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCB0cmFuc3BvcnRzLlRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgcHJvdG9jb2xzLlByb3RvY29sKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwci5kb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NvY2soc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHNvY2sgPSBOb25lCisgICAgICAgICAgICBpbmZvcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0pKQorICAgICAgICAgICAgZm9yIGZhbWlseSwgdHlwZSwgcHJvdG8sIGNuYW1lLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAnQ2FuIG5vdCBjcmVhdGUgc29ja2V0LicKKworICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCBzb2NrPXNvY2spCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIHRyYW5zcG9ydHMuVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBwcm90b2NvbHMuUHJvdG9jb2wpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCAqaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICBzc2w9dGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCB0cmFuc3BvcnRzLlRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgcHJvdG9jb2xzLlByb3RvY29sKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdzc2wnIGluIHRyLl9fY2xhc3NfXy5fX25hbWVfXy5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9KGh0dHBkLmFkZHJlc3NbMF0sIHBvcnQpKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBwci50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJylbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydCwgZXhwZWN0ZWQpCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyX2luX3VzZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCBsb2NhbF9hZGRyPWh0dHBkLmFkZHJlc3MpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQUREUklOVVNFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdHIoaHR0cGQuYWRkcmVzcyksIGNtLmV4Y2VwdGlvbi5zdHJlcnJvcikKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXIoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCAnMC4wLjAuMCcsIDApCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VydmVyLnNvY2tldHMpLCAxKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcwLjAuMC4wJykKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kYWxsKGIneHh4JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90byBpcyBub3QgTm9uZSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyB3aW5kb3dzIGlvY3AKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBjbG9zZSBzZXJ2ZXIKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiBfbWFrZV9zc2xfc2VydmVyKHNlbGYsIGZhY3RvcnksIGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBmYWN0b3J5LCAnMTI3LjAuMC4xJywgMCwgc3NsPXNzbGNvbnRleHQpCisKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvc3QsICcxMjcuMC4wLjEnKQorICAgICAgICByZXR1cm4gc2VydmVyLCBob3N0LCBwb3J0CisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGNsYXNzIENsaWVudE15UHJvdG8oTXlQcm90byk6CisgICAgICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTCcsIHNlbGYuc3RhdGUKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHNlcnZlciwgaG9zdCwgcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3NlcnZlcihmYWN0b3J5LCBPTkxZQ0VSVCwgT05MWUtFWSkKKworICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oQ2xpZW50TXlQcm90bywgaG9zdCwgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICBjbGllbnQud3JpdGUoYid4eHgnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVByb3RvKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBwcm90by5uYnl0ZXMgPiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHByb3RvLm5ieXRlcykKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMTI3LjAuMC4xJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJuYW1lJylbMF0pCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoZmFjdG9yeSwgU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgbm8gQ0EgbG9hZGVkCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlcnRpZmljYXRlIHZlcmlmeSBmYWlsZWQgJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX21hdGNoX2ZhaWxlZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZXR1cm4gcHJvdG8KKworICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoZmFjdG9yeSwgU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoCisgICAgICAgICAgICBjYWZpbGU9U0lHTklOR19DQSkKKyAgICAgICAgaWYgaGFzYXR0cihzc2xjb250ZXh0X2NsaWVudCwgJ2NoZWNrX2hvc3RuYW1lJyk6CisgICAgICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5jaGVja19ob3N0bmFtZSA9IFRydWUKKworICAgICAgICAjIGluY29ycmVjdCBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9c3NsY29udGV4dF9jbGllbnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuQ2VydGlmaWNhdGVFcnJvciwKKyAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJzEyNy4wLjAuMScgZG9lc24ndCBtYXRjaCAnbG9jYWxob3N0JyIpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgc2VydmVyLCBob3N0LCBwb3J0ID0gc2VsZi5fbWFrZV9zc2xfc2VydmVyKGZhY3RvcnksIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgQ29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoIGNvcnJlY3QgQ0EgYW5kIHNlcnZlciBob3N0bmFtZS4KKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9c3NsY29udGV4dF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc29jayhzZWxmKToKKyAgICAgICAgcHJvdG8gPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBjbGFzcyBUZXN0TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgICAgICAgICAgcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzb2NrLCBzb2NrX29iKQorCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICBzb2NrX29iID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29ja19vYi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzb2NrX29iLmJpbmQoKCcwLjAuMC4wJywgMCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCBob3N0PWhvc3QsIHBvcnQ9cG9ydCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZHVhbF9zdGFjayhzZWxmKToKKyAgICAgICAgZl9wcm90byA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBmX3Byb3RvLnNldF9yZXN1bHQoc2VsZikKKworICAgICAgICB0cnlfY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKFRlc3RNeVByb3RvLCBob3N0PU5vbmUsIHBvcnQ9cG9ydCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBpZiBleC5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICB0cnlfY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCg1LCB0cnlfY291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfcHJvdG8pCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgZl9wcm90byA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCc6OjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2VydmVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IsIGNsaWVudC5jb25uZWN0LCAoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0TXlEYXRhZ3JhbVByb3RvKE15RGF0YWdyYW1Qcm90byk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oaW5uZXJfc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZW5kdG8oYidyZXNwOicrZGF0YSwgYWRkcikKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIFRlc3RNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc190cmFuc3BvcnQsIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNfdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICByZW1vdGVfYWRkcj0oaG9zdCwgcG9ydCkpCisgICAgICAgIHRyYW5zcG9ydCwgY2xpZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lOSVRJQUxJWkVEJywgY2xpZW50LnN0YXRlKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGIneHh4JykKKyAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICBpZiBzZXJ2ZXIubmJ5dGVzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBzZXJ2ZXIubmJ5dGVzKQorICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGlmIGNsaWVudC5uYnl0ZXM6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgICMgcmVjZWl2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg4LCBjbGllbnQubmJ5dGVzKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNsaWVudC5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBjbGllbnQuc3RhdGUpCisgICAgICAgIHNlcnZlci50cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfZmRzKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGxvb3AsIHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsb29wLl9pbnRlcm5hbF9mZHMpCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxvb3AuX2ludGVybmFsX2ZkcykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9vcC5fY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvb3AuX3Nzb2NrKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3JlYWRfcGlwZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisKKyAgICAgICAgZGVmIGZhY3RvcnkoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICBwcm90byA9IE15UmVhZFBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHJwaXBlLCB3cGlwZSA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlb2JqID0gaW8ub3BlbihycGlwZSwgJ3JiJywgMTAyNCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUoZmFjdG9yeSwgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3Mud3JpdGUod3BpcGUsIGInMjM0NScpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLmNsb3NlKHdwaXBlKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRicsICdDTE9TRUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcG9ydCA9IE5vbmUKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJldHVybiBwcm90bworCisgICAgICAgIHJwaXBlLCB3cGlwZSA9IG9zLnBpcGUoKQorICAgICAgICBwaXBlb2JqID0gaW8ub3Blbih3cGlwZSwgJ3diJywgMTAyNCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCB0cmFuc3BvcnQKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUoZmFjdG9yeSwgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gdAorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZGF0YSA9IG9zLnJlYWQocnBpcGUsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGRhdGEgPSBvcy5yZWFkKHJwaXBlLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMjM0NScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIG9zLmNsb3NlKHJwaXBlKQorCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZV9kaXNjb25uZWN0X29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwb3J0ID0gTm9uZQorCisgICAgICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bworICAgICAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICAgICAgcnNvY2ssIHdzb2NrID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4od3NvY2suZGV0YWNoKCksICd3YicsIDEwMjQpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdHJhbnNwb3J0CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF93cml0ZV9waXBlKGZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCBwcm90by50cmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMScpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYubG9vcC5zb2NrX3JlY3YocnNvY2ssIDEwMjQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMScsIGRhdGEpCisKKyAgICAgICAgcnNvY2suY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICBkZWYgdGVzdF9wcm9tcHRfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICByLCB3ID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgci5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX3JlY3YociwgMSkKKyAgICAgICAgb3YgPSBnZXRhdHRyKGYsICdvdicsIE5vbmUpCisgICAgICAgIGlmIG92IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG92LnBlbmRpbmcpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbWFpbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oZi5jYW5jZWwpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXMgPSAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBzdGFydCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sobWFpbigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZWxhcHNlZCA9IHRpbWUubW9ub3RvbmljKCkgLSBzdGFydAorCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhlbGFwc2VkLCAwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ2NhbmNlbGxlZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYucmVzdWx0KQorICAgICAgICBpZiBvdiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YucGVuZGluZykKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcocikKKworICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgdy5jbG9zZSgpCisKKworY2xhc3MgU3VicHJvY2Vzc1Rlc3RzTWl4aW46CisKKyAgICBkZWYgY2hlY2tfdGVybWluYXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmV0dXJuY29kZSwgaW50KQorICAgICAgICAgICAgIyBleHBlY3QgMSBidXQgc29tZXRpbWVzIGdldCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHVEVSTSwgcmV0dXJuY29kZSkKKworICAgIGRlZiBjaGVja19raWxsZWQoc2VsZiwgcmV0dXJuY29kZSk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJldHVybmNvZGUsIGludCkKKyAgICAgICAgICAgICMgZXhwZWN0IDEgYnV0IHNvbWV0aW1lcyBnZXQgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtc2lnbmFsLlNJR0tJTEwsIHJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2V4ZWMoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBzdGRpbiA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgc3RkaW4ud3JpdGUoYidQeXRob24gVGhlIFdpbm5lcicpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2ludGVyYWN0aXZlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgICAgICBzdGRpbi53cml0ZShiJ1B5dGhvbiAnKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgICAgICBwcm90by5nb3RfZGF0YVsxXS5jbGVhcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uICcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgICAgIHN0ZGluLndyaXRlKGInVGhlIFdpbm5lcicpCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmNoZWNrX3Rlcm1pbmF0ZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGwoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgJ2VjaG8gUHl0aG9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMCkuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKGYuZG9uZSgpIGZvciBmIGluIHByb3RvLmRpc2Nvbm5lY3RzLnZhbHVlcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm90by5kYXRhWzFdLnJzdHJpcChiJ1xyXG4nKSwgYidQeXRob24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLmRhdGFbMl0sIGInJykKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfZXhpdGNvZGUoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfY2xvc2VfYWZ0ZXJfZmluaXNoKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDIpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfa2lsbChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLmtpbGwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3AudGVybWluYXRlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywgIkRvbid0IGhhdmUgU0lHSFVQIikKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NlbmRfc2lnbmFsKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKworICAgICAgICB0cmFuc3Auc2VuZF9zaWduYWwoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdIVVAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBOb25lCisgICAgICAgIHRyYW5zcCA9IE5vbmUKKworICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvMi5weScpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8sIHRyYW5zcAorICAgICAgICAgICAgdHJhbnNwLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5kYXRhWzJdLnN0YXJ0c3dpdGgoYidFUlI6dGVzdCcpLCBwcm90by5kYXRhWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycl9yZWRpcmVjdF90b19zdGRvdXQoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNobzIucHknKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb3RvLCB0cmFuc3AKKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2csIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDIpKQorCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvdG8uZGF0YVsxXS5zdGFydHN3aXRoKGInT1VUOnRlc3RFUlI6dGVzdCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8uZGF0YVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHByb3RvLmRhdGFbMl0pCisKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19jbG9zZV9jbGllbnRfc3RyZWFtKHNlbGYpOgorICAgICAgICBwcm90byA9IE5vbmUKKyAgICAgICAgdHJhbnNwID0gTm9uZQorCisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8zLnB5JykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm90bywgdHJhbnNwCisgICAgICAgICAgICB0cmFuc3AsIHByb3RvID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZG91dCA9IHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMSkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgc3Rkb3V0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kaXNjb25uZWN0c1sxXSkKKyAgICAgICAgc3RkaW4ud3JpdGUoYid4eHgnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzJdLndhaXQoKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInRVJSOkJyb2tlblBpcGVFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFmdGVyIGNsb3NpbmcgdGhlIHJlYWQtZW5kIG9mIGEgcGlwZSwgd3JpdGluZyB0byB0aGUKKyAgICAgICAgICAgICMgd3JpdGUtZW5kIHVzaW5nIG9zLndyaXRlKCkgZmFpbHMgd2l0aCBlcnJubz09RUlOVkFMIGFuZAorICAgICAgICAgICAgIyBHZXRMYXN0RXJyb3IoKT09RVJST1JfSU5WQUxJRF9OQU1FIG9uIFdpbmRvd3MhPyEgIChVc2luZworICAgICAgICAgICAgIyBXcml0ZUZpbGUoKSB3ZSBnZXQgRVJST1JfQlJPS0VOX1BJUEUgYXMgZXhwZWN0ZWQuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpPU0Vycm9yJywgcHJvdG8uZGF0YVsyXSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfdGVybWluYXRlZChwcm90by5yZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc193YWl0X25vX3NhbWVfZ3JvdXAoc2VsZik6CisgICAgICAgIHByb3RvID0gTm9uZQorICAgICAgICB0cmFuc3AgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvdG8KKyAgICAgICAgICAgICMgc3RhcnQgdGhlIG5ldyBwcm9jZXNzIGluIGEgbmV3IHNlc3Npb24KKyAgICAgICAgICAgIHRyYW5zcCwgcHJvdG8gPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsCisgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDcsIHByb3RvLnJldHVybmNvZGUpCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX2V2ZW50cworCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoRXZlbnRMb29wVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB3aW5kb3dzX2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcCgpCisKKyAgICBjbGFzcyBQcm9hY3RvckV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gd2luZG93c19ldmVudHMuUHJvYWN0b3JFdmVudExvb3AoKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX3ZlcmlmeV9mYWlsZWQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX21hdGNoX2ZhaWxlZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIFNTTCIpCisKKyAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X3JlYWRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3JlYWRlcigpIikKKworICAgICAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2tfY2FuY2VsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfcmVhZGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X3dyaXRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3dyaXRlcigpIikKKworICAgICAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2tfY2FuY2VsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIklvY3BFdmVudExvb3AgZG9lcyBub3QgaGF2ZSBhZGRfd3JpdGVyKCkiKQorCisgICAgICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KAorICAgICAgICAgICAgICAgICJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KCkiKQorZWxzZToKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9ycworICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdW5peF9ldmVudHMKKworICAgIGNsYXNzIFVuaXhFdmVudExvb3BUZXN0c01peGluKEV2ZW50TG9vcFRlc3RzTWl4aW4pOgorICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgICAgIHdhdGNoZXIgPSB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgIHdhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgZXZlbnRzLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCisKKyAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgZXZlbnRzLnNldF9jaGlsZF93YXRjaGVyKE5vbmUpCisgICAgICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgS3F1ZXVlRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YnByb2Nlc3NUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuU2VsZWN0b3JFdmVudExvb3AoCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEVQb2xsRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9ycy5FcG9sbFNlbGVjdG9yKCkpCisKKyAgICBpZiBoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBQb2xsRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuUG9sbFNlbGVjdG9yKCkpCisKKyAgICAjIFNob3VsZCBhbHdheXMgZXhpc3QuCisgICAgY2xhc3MgU2VsZWN0RXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiB1bml4X2V2ZW50cy5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKSkKKworCitjbGFzcyBIYW5kbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIGFyZ3MgPSAoKQorICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuc3RhcnRzd2l0aCgKKyAgICAgICAgICAgICdIYW5kbGUoJworICAgICAgICAgICAgJzxmdW5jdGlvbiBIYW5kbGVUZXN0cy50ZXN0X2hhbmRsZS48bG9jYWxzPi5jYWxsYmFjaycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpJykpCisKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaC5fY2FuY2VsbGVkKQorCisgICAgICAgIHIgPSByZXByKGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICAnSGFuZGxlKCcKKyAgICAgICAgICAgICc8ZnVuY3Rpb24gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGUuPGxvY2Fscz4uY2FsbGJhY2snKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKTxjYW5jZWxsZWQ+JyksIHIpCisKKyAgICBkZWYgdGVzdF9tYWtlX2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIGgxID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGV2ZW50cy5tYWtlX2hhbmRsZSwgaDEsICgpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfd2l0aF9leGNlcHRpb24oc2VsZiwgbG9nKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKworICAgICAgICBoID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIGguX3J1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2cuZXhjZXB0aW9uLmNhbGxlZCkKKworCitjbGFzcyBUaW1lclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisgICAgICAgIGggPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgbGFtYmRhOiBGYWxzZSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChoKSwgaGFzaCh3aGVuKSkKKworICAgIGRlZiB0ZXN0X3RpbWVyKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICBhcmdzID0gKCkKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9jYWxsYmFjaywgY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fYXJncywgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoLl9jYW5jZWxsZWQpCisKKyAgICAgICAgciA9IHJlcHIoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJygpKScpKQorCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguX2NhbmNlbGxlZCkKKworICAgICAgICByID0gcmVwcihoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKCkpPGNhbmNlbGxlZD4nKSwgcikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzLlRpbWVySGFuZGxlLCBOb25lLCBjYWxsYmFjaywgYXJncykKKworICAgIGRlZiB0ZXN0X3RpbWVyX2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworCisgICAgICAgIHdoZW4gPSB0aW1lLm1vbm90b25pYygpCisKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCkpCisgICAgICAgICMgVE9ETzogVXNlIGFzc2VydExlc3MgZXRjLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID09IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxICE9IGgyKQorCisgICAgICAgIGgyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisKKyAgICAgICAgaDEgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssICgpKQorICAgICAgICBoMiA9IGV2ZW50cy5UaW1lckhhbmRsZSh3aGVuICsgMTAuMCwgY2FsbGJhY2ssICgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPCBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMiA8IGgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDEgPD0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPD0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPiBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyID4gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPj0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+PSBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxICE9IGgyKQorCisgICAgICAgIGgzID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIGgxLl9fZXFfXyhoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIGgxLl9fbmVfXyhoMykpCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb29wID0gZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9mb3JldmVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmlzX3J1bm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfbGF0ZXIsIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2F0LCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9zb29uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AudGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2luX2V4ZWN1dG9yLCBmLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5nZXRhZGRyaW5mbywgJ2xvY2FsaG9zdCcsIDgwODApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5nZXRuYW1laW5mbywgKCdsb2NhbGhvc3QnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9jb25uZWN0aW9uLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX3NlcnZlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9yZWFkZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfcmVhZGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3dyaXRlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV93cml0ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX3JlY3YsIGYsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19zZW5kYWxsLCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfY29ubmVjdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfYWNjZXB0LCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsLnBpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jb25uZWN0X3dyaXRlX3BpcGUsIGYsCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLnNlbnRpbmVsLnBpcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX3NoZWxsLCBmLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5zZW50aW5lbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnN1YnByb2Nlc3NfZXhlYywgZikKKworCitjbGFzcyBQcm90b2NvbHNBYnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHAgPSBwcm90b2NvbHMuUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmNvbm5lY3Rpb25fbWFkZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZGF0YV9yZWNlaXZlZChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5lb2ZfcmVjZWl2ZWQoKSkKKworICAgICAgICBkcCA9IHByb3RvY29scy5EYXRhZ3JhbVByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuY29ubmVjdGlvbl9tYWRlKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5jb25uZWN0aW9uX2xvc3QoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmVycm9yX3JlY2VpdmVkKGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5kYXRhZ3JhbV9yZWNlaXZlZChmLCBmKSkKKworICAgICAgICBzcCA9IHByb3RvY29scy5TdWJwcm9jZXNzUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9kYXRhX3JlY2VpdmVkKDEsIGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5waXBlX2Nvbm5lY3Rpb25fbG9zdCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucHJvY2Vzc19leGl0ZWQoKSkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlX3BvbGljeShzZWxmKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHdpbmRvd3NfZXZlbnRzCisgICAgICAgICAgICByZXR1cm4gd2luZG93c19ldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisgICAgICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICBkZWYgdGVzdF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuc2V0X2V2ZW50X2xvb3AsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kubmV3X2V2ZW50X2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb2xpY3kuX2xvY2FsLl9sb29wKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll9sb2NhbC5fbG9vcCwgbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF9jYWxsc19zZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHBvbGljeSwgInNldF9ldmVudF9sb29wIiwKKyAgICAgICAgICAgICAgICB3cmFwcz1wb2xpY3kuc2V0X2V2ZW50X2xvb3ApIGFzIG1fc2V0X2V2ZW50X2xvb3A6CisKKyAgICAgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgICAgICAjIHBvbGljeS5fbG9jYWwuX2xvb3AgbXVzdCBiZSBzZXQgdGhyb3VnaCAuc2V0X2V2ZW50X2xvb3AoKQorICAgICAgICAgICAgIyAodGhlIHVuaXggRGVmYXVsdEV2ZW50TG9vcFBvbGljeSBuZWVkcyB0aGlzIGNhbGwgdG8gYXR0YWNoCisgICAgICAgICAgICAjIHRoZSBjaGlsZCB3YXRjaGVyIGNvcnJlY3RseSkKKyAgICAgICAgICAgIG1fc2V0X2V2ZW50X2xvb3AuYXNzZXJ0X2NhbGxlZF93aXRoKGxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF9hZnRlcl9zZXRfbm9uZShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3ApCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5ldmVudHMudGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkJykKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF90aHJlYWQoc2VsZiwgbV9jdXJyZW50X3RocmVhZCk6CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LmdldF9ldmVudF9sb29wKQorCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIGRlZiB0ZXN0X25ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorCisgICAgICAgIGxvb3AgPSBwb2xpY3kubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICBvbGRfbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHBvbGljeS5zZXRfZXZlbnRfbG9vcCwgb2JqZWN0KCkpCisKKyAgICAgICAgbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KG9sZF9sb29wLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIG9sZF9sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gZXZlbnRzLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3ksIGV2ZW50cy5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3ksIGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKSkKKworICAgIGRlZiB0ZXN0X3NldF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgZXZlbnRzLnNldF9ldmVudF9sb29wX3BvbGljeSwgb2JqZWN0KCkpCisKKyAgICAgICAgb2xkX3BvbGljeSA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcF9wb2xpY3koKQorCisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeSwgZXZlbnRzLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHBvbGljeSwgb2xkX3BvbGljeSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1ZmNmMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKQEAgLTAsMCArMSwzNDcgQEAKKyIiIlRlc3RzIGZvciBmdXR1cmVzLnB5LiIiIgorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2RlZiBfZmFrZWZ1bmMoZik6CisgICAgcmV0dXJuIGYKKworCitjbGFzcyBGdXR1cmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfc3RhdGUoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaW5pdF9jb25zdHJ1Y3Rvcl9kZWZhdWx0X2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIEZ1dHVyZSBkb2VzJ3QgYWNjZXB0IGEgcG9zaXRpb25hbCBhcmd1bWVudAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZ1dHVyZXMuRnV0dXJlLCA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYucmVzdWx0KQorCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkludmFsaWRTdGF0ZUVycm9yLCBmLmV4Y2VwdGlvbikKKworICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBmLnJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmV4Y2VwdGlvbigpLCBleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGZpeHR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkICdBJworICAgICAgICAgICAgeCA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0InLCB4CisgICAgICAgICAgICB5ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQycsIHkKKworICAgICAgICBnID0gZml4dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgJ0EnKSAgIyB5aWVsZCAnQScuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgZikgICMgRmlyc3QgeWllbGQgZnJvbSBmLgorICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdCJywgNDIpKSAgIyB5aWVsZCAnQicsIHguCisgICAgICAgICMgVGhlIHNlY29uZCAieWllbGQgZnJvbSBmIiBkb2VzIG5vdCB5aWVsZCBmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQycsIDQyKSkgICMgeWllbGQgJ0MnLCB5LgorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZl9wZW5kaW5nID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3BlbmRpbmcpLCAnRnV0dXJlPFBFTkRJTkc+JykKKyAgICAgICAgZl9wZW5kaW5nLmNhbmNlbCgpCisKKyAgICAgICAgZl9jYW5jZWxsZWQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9jYW5jZWxsZWQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfY2FuY2VsbGVkKSwgJ0Z1dHVyZTxDQU5DRUxMRUQ+JykKKworICAgICAgICBmX3Jlc3VsdCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX3Jlc3VsdC5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3Jlc3VsdCksICdGdXR1cmU8cmVzdWx0PTQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmX3Jlc3VsdC5yZXN1bHQoKSwgNCkKKworICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZfZXhjZXB0aW9uKSwgJ0Z1dHVyZTxleGNlcHRpb249UnVudGltZUVycm9yKCk+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmX2V4Y2VwdGlvbi5leGNlcHRpb24oKSwgZXhjKQorCisgICAgICAgIGZfZmV3X2NhbGxiYWNrcyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2Zld19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBzZWxmLmFzc2VydEluKCdGdXR1cmU8UEVORElORywgWzxmdW5jdGlvbiBfZmFrZWZ1bmMnLAorICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZl9mZXdfY2FsbGJhY2tzKSkKKyAgICAgICAgZl9mZXdfY2FsbGJhY2tzLmNhbmNlbCgpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgciA9IHJlcHIoZl9tYW55X2NhbGxiYWNrcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignRnV0dXJlPFBFTkRJTkcsIFs8ZnVuY3Rpb24gX2Zha2VmdW5jJywgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDE4IG1vcmU+JywgcikKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcy5jYW5jZWwoKQorCisgICAgZGVmIHRlc3RfY29weV9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSBpbnRlcm5hbCBfY29weV9zdGF0ZSBtZXRob2Qgc2luY2UgaXQncyBiZWluZyBkaXJlY3RseQorICAgICAgICAjIGludm9rZWQgaW4gb3RoZXIgbW9kdWxlcy4KKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLnNldF9yZXN1bHQoMTApCisKKyAgICAgICAgbmV3ZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBuZXdmLl9jb3B5X3N0YXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdmLnJlc3VsdCgpLCAxMCkKKworICAgICAgICBmX2V4Y2VwdGlvbiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2V4Y2VwdGlvbi5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfZXhjZXB0aW9uLl9jb3B5X3N0YXRlKGZfZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9leGNlcHRpb24uZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5ld2ZfZXhjZXB0aW9uLnJlc3VsdCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkLl9jb3B5X3N0YXRlKGZfY2FuY2VsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9jYW5jZWxsZWQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgYXJnMSwgYXJnMiA9IGNvcm8oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ZXN0KQorICAgICAgICBmdXQuY2FuY2VsKCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfYWJhbmRvbmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX3Jlc3VsdF91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfcmVzdWx0X3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZnV0LnJlc3VsdCgpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3JldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZnV0LmV4Y2VwdGlvbigpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5mdXR1cmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXN1bHRfcmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignYm9vbScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGZ1dC5yZXN1bHQpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZShzZWxmKToKKworICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGZ1dHVyZXMud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMsIGlkZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYyLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdvaScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZjEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxKQorICAgICAgICBzZWxmLmFzc2VydElzKGYxLCBmMikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmZ1dHVyZXMuZXZlbnRzJykKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV91c2VfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBkZWYgcnVuKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gKGFyZywgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICBleCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoMSkKKyAgICAgICAgZjEgPSBleC5zdWJtaXQocnVuLCAnb2knKQorICAgICAgICBmMiA9IGZ1dHVyZXMud3JhcF9mdXR1cmUoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobV9ldmVudHMuZ2V0X2V2ZW50X2xvb3AucmV0dXJuX3ZhbHVlLCBmMi5fbG9vcCkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgZjEgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYyLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfY2FuY2VsMihzZWxmKToKKyAgICAgICAgZjEgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKyAgICAgICAgZjIgPSBmdXR1cmVzLndyYXBfZnV0dXJlKGYxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZjEuc2V0X3Jlc3VsdCg0MikKKyAgICAgICAgZjIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjEucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuY2FuY2VsbGVkKCkpCisKKworY2xhc3MgRnV0dXJlRG9uZUNhbGxiYWNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgcnVuX2JyaWVmbHkoc2VsZik6CisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIF9tYWtlX2NhbGxiYWNrKHNlbGYsIGJhZywgdGhpbmcpOgorICAgICAgICAjIENyZWF0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgYXBwZW5kcyB0aGluZyB0byBiYWcuCisgICAgICAgIGRlZiBiYWdfYXBwZW5kZXIoZnV0dXJlKToKKyAgICAgICAgICAgIGJhZy5hcHBlbmQodGhpbmcpCisgICAgICAgIHJldHVybiBiYWdfYXBwZW5kZXIKKworICAgIGRlZiBfbmV3X2Z1dHVyZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2ludm9rZWRfb25fc2V0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgYmFnID0gW10KKyAgICAgICAgZiA9IHNlbGYuX25ld19mdXR1cmUoKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCA0MikpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDE3KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGYuc2V0X3Jlc3VsdCgnZm9vJykKKworICAgICAgICBzZWxmLnJ1bl9icmllZmx5KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgWzQyLCAxN10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfaW52b2tlZF9vbl9zZXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDEwMCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbMTAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZG9uZV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgYmFnID0gW10KKyAgICAgICAgZiA9IHNlbGYuX25ld19mdXR1cmUoKQorICAgICAgICBjYjEgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMSkKKyAgICAgICAgY2IyID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDIpCisgICAgICAgIGNiMyA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAzKQorCisgICAgICAgICMgQWRkIG9uZSBjYjEgYW5kIG9uZSBjYjIuCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IxKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNiMikKKworICAgICAgICAjIE9uZSBpbnN0YW5jZSBvZiBjYjIgcmVtb3ZlZC4gTm93IHRoZXJlJ3Mgb25seSBvbmUgY2IxLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IyKSwgMSkKKworICAgICAgICAjIE5ldmVyIGhhZCBhbnkgY2IzIGluIHRoZXJlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVtb3ZlX2RvbmVfY2FsbGJhY2soY2IzKSwgMCkKKworICAgICAgICAjIEFmdGVyIHRoaXMgdGhlcmUgd2lsbCBiZSA2IGluc3RhbmNlcyBvZiBjYjEgYW5kIG9uZSBvZiBjYjIuCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IyKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IxKQorCisgICAgICAgICMgUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgY2IxLiBPbmUgY2IyIHJlbWFpbnMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjEpLCA2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZi5zZXRfcmVzdWx0KCdmb28nKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2ZvbycpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGYxMDZlMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2xvY2tzLnB5CkBAIC0wLDAgKzEsODM4IEBACisiIiJUZXN0cyBmb3IgbG9jay5weSIiIgorCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgcmUKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBsb2NrcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworU1RSX1JHWF9SRVBSID0gKAorICAgIHInXjwoP1A8Y2xhc3M+Lio/KSBvYmplY3QgYXQgKD9QPGFkZHJlc3M+Lio/KScKKyAgICByJ1xbKD9QPGV4dHJhcz4nCisgICAgcicoc2V0fHVuc2V0fGxvY2tlZHx1bmxvY2tlZCkoLHZhbHVlOlxkKT8oLHdhaXRlcnM6XGQrKT8nCisgICAgcicpXF0+XFonCispCitSR1hfUkVQUiA9IHJlLmNvbXBpbGUoU1RSX1JHWF9SRVBSKQorCisKK2NsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBsb29wKQorCisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgbG9jayA9IGxvY2tzLkxvY2soKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihsb2NrKS5lbmRzd2l0aCgnW3VubG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIobG9jaykpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIobG9jaykuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihsb2NrKSkpCisKKyAgICBkZWYgdGVzdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb2NrKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgbG9jayA9IGxvY2tzLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICB0YXNrID0gdGFza3MuVGFzayhsb2NrLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24odGFzay5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5fd2FpdGVycykKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9yYWNlKHNlbGYpOgorICAgICAgICAjIFNldmVyYWwgdGFza3M6CisgICAgICAgICMgLSBBIGFjcXVpcmVzIHRoZSBsb2NrCisgICAgICAgICMgLSBCIGlzIGJsb2NrZWQgaW4gYXFjdWlyZSgpCisgICAgICAgICMgLSBDIGlzIGJsb2NrZWQgaW4gYXFjdWlyZSgpCisgICAgICAgICMKKyAgICAgICAgIyBOb3csIGNvbmN1cnJlbnRseToKKyAgICAgICAgIyAtIEIgaXMgY2FuY2VsbGVkCisgICAgICAgICMgLSBBIHJlbGVhc2VzIHRoZSBsb2NrCisgICAgICAgICMKKyAgICAgICAgIyBJZiBCJ3Mgd2FpdGVyIGlzIG1hcmtlZCBjYW5jZWxsZWQgYnV0IG5vdCB5ZXQgcmVtb3ZlZCBmcm9tCisgICAgICAgICMgX3dhaXRlcnMsIEEncyByZWxlYXNlKCkgY2FsbCB3aWxsIGNyYXNoIHdoZW4gdHJ5aW5nIHRvIHNldAorICAgICAgICAjIEIncyB3YWl0ZXI7IGluc3RlYWQsIGl0IHNob3VsZCBtb3ZlIG9uIHRvIEMncyB3YWl0ZXIuCisKKyAgICAgICAgIyBTZXR1cDogQSBoYXMgdGhlIGxvY2ssIGIgYW5kIGMgYXJlIHdhaXRpbmcuCisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGxvY2tpdChuYW1lLCBibG9ja2VyKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBibG9ja2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGJsb2NrZXIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgICAgICBmYSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YSA9IHRhc2tzLlRhc2sobG9ja2l0KCdBJywgZmEpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorICAgICAgICB0YiA9IHRhc2tzLlRhc2sobG9ja2l0KCdCJywgTm9uZSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9jay5fd2FpdGVycyksIDEpCisgICAgICAgIHRjID0gdGFza3MuVGFzayhsb2NraXQoJ0MnLCBOb25lKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2NrLl93YWl0ZXJzKSwgMikKKworICAgICAgICAjIENyZWF0ZSB0aGUgcmFjZSBhbmQgY2hlY2suCisgICAgICAgICMgV2l0aG91dCB0aGUgZml4IHRoaXMgZmFpbGVkIGF0IHRoZSBsYXN0IGFzc2VydC4KKyAgICAgICAgZmEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0Yi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5fd2FpdGVyc1swXS5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRiLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGMuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbG9jay5yZWxlYXNlKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub193YWl0ZXJzKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsb2NrLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisKKyAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBsb2NrID0gbG9ja3MuTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBsb2NrKQorCisgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIGxvY2sgPSBsb2Nrcy5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworCitjbGFzcyBFdmVudFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhldi5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBldiA9IGxvY2tzLkV2ZW50KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZXYpLmVuZHN3aXRoKCdbdW5zZXRdPicpKQorICAgICAgICBtYXRjaCA9IFJHWF9SRVBSLm1hdGNoKHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLmdyb3VwKCdleHRyYXMnKSwgJ3Vuc2V0JykKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1tzZXRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgICAgIGV2Ll93YWl0ZXJzLmFwcGVuZCh1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGV2LndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFszLCAxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X29uX3NldChzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZXYuc2V0KCkKKworICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGV2LndhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcykKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBldiA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHdhaXQgPSB0YXNrcy5UYXNrKGV2LndhaXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgZnV0dXJlcy5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9jbGVhcihzZWxmKToKKyAgICAgICAgZXYgPSBsb2Nrcy5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgZGVmIHRlc3RfY2xlYXJfd2l0aF93YWl0ZXJzKHNlbGYpOgorICAgICAgICBldiA9IGxvY2tzLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBldi53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgZXYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oZXYuX3dhaXRlcnMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKworY2xhc3MgQ29uZGl0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBsb29wKQorCisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSB0YXNrcy5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IHRhc2tzLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5ub3RpZnkoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKQorCisgICAgICAgIHdhaXQgPSB0YXNrcy5UYXNrKGNvbmQud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLl93YWl0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb25kLndhaXQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcmVzdWx0ID0gRmFsc2UKKworICAgICAgICBkZWYgcHJlZGljYXRlKCk6CisgICAgICAgICAgICByZXR1cm4gcHJlc3VsdAorCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdF9mb3IocHJlZGljYXRlKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHByZXN1bHQgPSBUcnVlCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgIyBwcmVkaWNhdGUgY2FuIHJldHVybiB0cnVlIGltbWVkaWF0ZWx5CisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC53YWl0X2ZvcihsYW1iZGE6IFsxLCAyLCAzXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgY29uZC53YWl0X2ZvcihsYW1iZGE6IEZhbHNlKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeShzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoMSkKKyAgICAgICAgY29uZC5ub3RpZnkoMjA0OCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X25vdGlmeV9hbGwoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5X2FsbCgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBsb2Nrcy5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnlfYWxsKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd1bmxvY2tlZCcgaW4gcmVwcihjb25kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoY29uZCkpKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9ja2VkJyBpbiByZXByKGNvbmQpKQorCisgICAgICAgIGNvbmQuX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MScgaW4gcmVwcihjb25kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoY29uZCkpKQorCisgICAgICAgIGNvbmQuX3dhaXRlcnMuYXBwZW5kKHVuaXR0ZXN0Lm1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnM6MicgaW4gcmVwcihjb25kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoY29uZCkpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBjb25kID0gbG9ja3MuQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfY29uZCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGNvbmQpCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfY29uZCgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9ub195aWVsZChzZWxmKToKKyAgICAgICAgY29uZCA9IGxvY2tzLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNvbmQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdSdW50aW1lRXJyb3IgaXMgbm90IHJhaXNlZCBpbiB3aXRoIGV4cHJlc3Npb24nKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc3RyKGVyciksCisgICAgICAgICAgICAgICAgJyJ5aWVsZCBmcm9tIiBzaG91bGQgYmUgdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIgZXhwcmVzc2lvbicpCisKKworY2xhc3MgU2VtYXBob3JlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jdG9yX2xvb3Aoc2VsZik6CisgICAgICAgIGxvb3AgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgbG9vcCkKKworICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VtLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVzdF9pbml0aWFsX3ZhbHVlX3plcm8oc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZSgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbSA9IGxvY2tzLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW3VubG9ja2VkLHZhbHVlOjFdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihzZW0pKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHNlbSkuZW5kc3dpdGgoJ1tsb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3dhaXRlcnMnIG5vdCBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbS5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoxJyBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbS5fd2FpdGVycy5hcHBlbmQodW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoyJyBpbiByZXByKHNlbSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VtLl92YWx1ZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2Nrcy5TZW1hcGhvcmUsIC0xKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZShzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKDMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMykKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYzQocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCg0KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IHRhc2tzLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSB0YXNrcy5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdDQgPSB0YXNrcy5UYXNrKGM0KHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc2VtLl92YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oc2VtLl93YWl0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDQuZG9uZSgpKQorCisgICAgICAgICMgY2xlYW51cCBsb2NrZWQgc2VtYXBob3JlCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKworICAgIGRlZiB0ZXN0X2FjcXVpcmVfY2FuY2VsKHNlbGYpOgorICAgICAgICBzZW0gPSBsb2Nrcy5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKworICAgICAgICBhY3F1aXJlID0gdGFza3MuVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihhY3F1aXJlLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgYWNxdWlyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0uX3dhaXRlcnMpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vdF9hY3F1aXJlZChzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuQm91bmRlZFNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbS5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0ubG9ja2VkKCkpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgc2VtID0gbG9ja3MuU2VtYXBob3JlKDIsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Byb2FjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY0ZjQyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNDg0IEBACisiIiJUZXN0cyBmb3IgcHJvYWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VQcm9hY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0Citmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK2NsYXNzIFByb2FjdG9yU29ja2V0VHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm9hY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IgPSBzZWxmLnByb2FjdG9yCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19kYXRhKHNlbGYpOgorICAgICAgICByZXMgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzLnNldF9yZXN1bHQoYidkYXRhJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfbm9fZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInJykKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdHIuX2xvb3BfcmVhZGluZywgcmVzKQorCisgICAgICAgIHRyLmNsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX3JlYWRfZnV0ID0gcmVzCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcocmVzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvbkFib3J0ZWRFcnJvcigpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkX2lzX2ZhdGFsKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Nvbm5fcmVzZXRfbG9zdChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlc2V0RXJyb3IoKQorCisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IEZhbHNlCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gKE9TRXJyb3IoKSkKKworICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBOb25lKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhPWInZGF0YScpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIud3JpdGUoYicnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9tb3JlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2xvb3Bfd3JpdGluZy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmcoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZS5hZGRfZG9uZV9jYWxsYmFjay5cCisgICAgICAgICAgICBhc3NlcnRfY2FsbGVkX3dpdGgodHIuX2xvb3Bfd3JpdGluZykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnByb2FjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19lcnIoc2VsZiwgbV9sb2cpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHRyLl9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBOb25lKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmdfc3RvcChzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KGInZGF0YScpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl93cml0ZV9mdXQgPSBmdXQKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl93cml0ZV9mdXQpCisKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmdfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KDEpCisKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl93cml0ZV9mdXQgPSBmdXQKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5hYm9ydCgpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LnJlc2V0X21vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3dyaXRlX2Z1dChzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl93cml0ZV9mdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcihzZWxmLCBtX2xvZ2dpbmcpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZm9yY2VfY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2dnaW5nLmV4Y2VwdGlvbi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgcmVhZF9mdXQgPSB0ci5fcmVhZF9mdXQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZV9mdXQgPSB0ci5fd3JpdGVfZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisKKyAgICAgICAgcmVhZF9mdXQuY2FuY2VsLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHdyaXRlX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgIGRlZiB0ZXN0X2ZvcmNlX2Nsb3NlX2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yXzIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGF0YSddCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB0ci5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxfY291bnQsIDEpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZSA9IGYKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9lb2Zfd3JpdHRlbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2h1dGRvd24uY2FsbGVkKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBmLnNldF9yZXN1bHQoNCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcl93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2h1dGRvd24uY2FsbGVkKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorICAgICAgICBmLnNldF9yZXN1bHQoNCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2R1cGxleF9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZnV0dXJlcyA9IFtdCisgICAgICAgIGZvciBtc2cgaW4gW2InZGF0YTEnLCBiJ2RhdGEyJywgYidkYXRhMycsIGInZGF0YTQnLCBiJyddOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZi5zZXRfcmVzdWx0KG1zZykKKyAgICAgICAgICAgIGZ1dHVyZXMuYXBwZW5kKGYpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IGZ1dHVyZXMKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMScpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTQnKQorICAgICAgICB0ci5jbG9zZSgpCisKKworY2xhc3MgQmFzZVByb2FjdG9yRXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5wcm9hY3RvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5zc29jaywgc2VsZi5jc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGNsYXNzIEV2ZW50TG9vcChCYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgZGVmIF9zb2NrZXRwYWlyKHMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5zc29jaywgc2VsZi5jc29jaykKKworICAgICAgICBzZWxmLmxvb3AgPSBFdmVudExvb3Aoc2VsZi5wcm9hY3RvcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdChCYXNlUHJvYWN0b3JFdmVudExvb3AsICdjYWxsX3Nvb24nKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdChCYXNlUHJvYWN0b3JFdmVudExvb3AsICdfc29ja2V0cGFpcicpCisgICAgZGVmIHRlc3RfY3RvcihzZWxmLCBzb2NrZXRwYWlyLCBjYWxsX3Nvb24pOgorICAgICAgICBzc29jaywgY3NvY2sgPSBzb2NrZXRwYWlyLnJldHVybl92YWx1ZSA9ICgKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKSkKKyAgICAgICAgbG9vcCA9IEJhc2VQcm9hY3RvckV2ZW50TG9vcChzZWxmLnByb2FjdG9yKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AuX3Nzb2NrLCBzc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb29wLl9jc29jaywgY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vcC5faW50ZXJuYWxfZmRzLCAxKQorICAgICAgICBjYWxsX3Nvb24uYXNzZXJ0X2NhbGxlZF93aXRoKGxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLl9pbnRlcm5hbF9mZHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX2Nzb2NrKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvYWN0b3IuY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Byb2FjdG9yKQorCisgICAgICAgIHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fY2xvc2Vfc2VsZl9waXBlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzZWxmLnNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc2VsZi5zb2NrLCAxMjMpCisgICAgICAgIHNlbGYucHJvYWN0b3IuY29ubmVjdC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCAxMjMpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgQmFzZVByb2FjdG9yRXZlbnRMb29wLCBzZWxmLnByb2FjdG9yKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYuc29jaywgdW5pdHRlc3QubW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc3NvY2ssIDQwOTYpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nX2Z1dChzZWxmKToKKyAgICAgICAgZnV0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AuX2xvb3Bfc2VsZl9yZWFkaW5nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZigpCisgICAgICAgIHNlbGYuY3NvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoYid4JykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKFtdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ucHJvYWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcihzZWxmLCBtX2xvZyk6CisgICAgICAgIHBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsX3Nvb24uY2FsbGVkKQorCisgICAgICAgICMgY2FsbGJhY2sKKyAgICAgICAgbG9vcCA9IGNhbGxfc29vbi5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgbG9vcCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IuYWNjZXB0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2spCisKKyAgICAgICAgIyBjb25uCisgICAgICAgIGZ1dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGZ1dC5yZXN1bHQucmV0dXJuX3ZhbHVlID0gKHVuaXR0ZXN0Lm1vY2suTW9jaygpLCB1bml0dGVzdC5tb2NrLk1vY2soKSkKKworICAgICAgICBtYWtlX3RyID0gc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5yZXN1bHQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWFrZV90ci5jYWxsZWQpCisKKyAgICAgICAgIyBleGNlcHRpb24KKyAgICAgICAgZnV0LnJlc3VsdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZy5leGNlcHRpb24uY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9jYW5jZWwoc2VsZik6CisgICAgICAgIHBmID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbF9zb29uID0gc2VsZi5sb29wLmNhbGxfc29vbiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nKHBmLCBzZWxmLnNvY2spCisgICAgICAgIGxvb3AgPSBjYWxsX3Nvb24uY2FsbF9hcmdzWzBdWzBdCisKKyAgICAgICAgIyBjYW5jZWxsZWQKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICBsb29wKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zdG9wX3NlcnZpbmcoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYucHJvYWN0b3IuX3N0b3Bfc2VydmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoc29jaykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZjRlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9xdWV1ZXMucHkKQEAgLTAsMCArMSw0NzAgQEAKKyIiIlRlc3RzIGZvciBxdWV1ZXMucHkiIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitmcm9tIGFzeW5jaW8gaW1wb3J0IGV2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvY2tzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHF1ZXVlcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgX1F1ZXVlVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKworY2xhc3MgUXVldWVCYXNpY1Rlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiBfdGVzdF9yZXByX29yX3N0cihzZWxmLCBmbiwgZXhwZWN0X2lkKToKKyAgICAgICAgIiIiVGVzdCBRdWV1ZSdzIHJlcHIgb3Igc3RyLgorCisgICAgICAgIGZuIGlzIHJlcHIgb3Igc3RyLiBleHBlY3RfaWQgaXMgVHJ1ZSBpZiB3ZSBleHBlY3QgdGhlIFF1ZXVlJ3MgaWQgdG8KKyAgICAgICAgYXBwZWFyIGluIGZuKFF1ZXVlKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZuKHEpLnN0YXJ0c3dpdGgoJzxRdWV1ZScpLCBmbihxKSkKKyAgICAgICAgaWRfaXNfcHJlc2VudCA9IGhleChpZChxKSkgaW4gZm4ocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RfaWQsIGlkX2lzX3ByZXNlbnQpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWRkX2dldHRlcigpOgorICAgICAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgICAgICAjIFN0YXJ0IGEgdGFzayB0aGF0IHdhaXRzIHRvIGdldC4KKyAgICAgICAgICAgIHRhc2tzLlRhc2socS5nZXQoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgIyBMZXQgaXQgc3RhcnQgd2FpdGluZy4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19nZXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEuZ2V0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhZGRfZ2V0dGVyKCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgYWRkX3B1dHRlcigpOgorICAgICAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBwdXQuCisgICAgICAgICAgICB0YXNrcy5UYXNrKHEucHV0KDIpLCBsb29wPWxvb3ApCisgICAgICAgICAgICAjIExldCBpdCBzdGFydCB3YWl0aW5nLgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3B1dHRlcnNbMV0nIGluIGZuKHEpKQorICAgICAgICAgICAgIyByZXN1bWUgcS5wdXQgY29yb3V0aW5lIHRvIGZpbmlzaCBnZW5lcmF0b3IKKyAgICAgICAgICAgIHEuZ2V0X25vd2FpdCgpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWRkX3B1dHRlcigpKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfcXVldWU9WzFdJyBpbiBmbihxKSkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHEuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcmVwcl9vcl9zdHIocmVwciwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZXByX29yX3N0cihzdHIsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCkpCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X2Z1bGwoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocS5mdWxsKCkpCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShtYXhzaXplPTEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpKQorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAzLCAyXSwgaXRlbXMpCisKKyAgICBkZWYgdGVzdF9tYXhzaXplKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0yLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgcS5tYXhzaXplKQorICAgICAgICBoYXZlX2JlZW5fcHV0ID0gW10KKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBwdXR0ZXIoKToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gcS5wdXQoaSkKKyAgICAgICAgICAgICAgICBoYXZlX2JlZW5fcHV0LmFwcGVuZChpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICB0ID0gdGFza3MuVGFzayhwdXR0ZXIoKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjAxLCBsb29wPWxvb3ApCisKKyAgICAgICAgICAgICMgVGhlIHB1dHRlciBpcyBibG9ja2VkIGFmdGVyIHB1dHRpbmcgdHdvIGl0ZW1zLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMV0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgICAgICAgICAjIExldCB0aGUgcHV0dGVyIHJlc3VtZSBhbmQgcHV0IGxhc3QgaXRlbS4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMSwgMl0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDIsIGxvb3AudGltZSgpKQorCisKK2NsYXNzIFF1ZXVlR2V0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorCisgICAgZGVmIHRlc3RfZ2V0X3dpdGhfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZSgxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEuX3B1dHRlcnMuYXBwZW5kKCgyLCB3YWl0ZXIpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19nZXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1sb29wKQorICAgICAgICBzdGFydGVkID0gbG9ja3MuRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5pc2hlZAorICAgICAgICAgICAgc3RhcnRlZC5zZXQoKQorICAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBxLmdldCgpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjAxLCBxLnB1dF9ub3dhaXQsIDEpCisgICAgICAgICAgICBxdWV1ZV9nZXRfdGFzayA9IHRhc2tzLlRhc2socXVldWVfZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RhcnRlZC53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluaXNoZWQpCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHF1ZXVlX2dldF90YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluaXNoZWQpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX2dldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlcy5FbXB0eSwgcS5nZXRfbm93YWl0KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhbmNlbGxlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDYxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gdGFza3Mud2FpdF9mb3IocS5nZXQoKSwgMC4wNTEsIGxvb3A9bG9vcCkpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZ2V0X3Rhc2sgPSB0YXNrcy5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKDAuMDEsIGxvb3A9bG9vcCkgICMgbGV0IHRoZSB0YXNrIHN0YXJ0CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBnZXRfdGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNiwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsbGVkX3JhY2Uoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IHRhc2tzLlRhc2socS5nZXQoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHQxLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBxLnB1dF9ub3dhaXQoJ2EnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5yZXN1bHQoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfZ2V0X3dpdGhfd2FpdGluZ19wdXR0ZXJzKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLlF1ZXVlKGxvb3A9c2VsZi5sb29wLCBtYXhzaXplPTEpCisgICAgICAgIHRhc2tzLlRhc2socS5wdXQoJ2EnKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2tzLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYicpCisKKworY2xhc3MgUXVldWVQdXRUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICAjIE5vIG1heHNpemUsIHdvbid0IGJsb2NrLgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobWF4c2l6ZT0xLCBsb29wPWxvb3ApCisgICAgICAgIHN0YXJ0ZWQgPSBsb2Nrcy5FdmVudChsb29wPWxvb3ApCisgICAgICAgIGZpbmlzaGVkID0gRmFsc2UKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjAxLCBxLmdldF9ub3dhaXQpCisgICAgICAgICAgICBxdWV1ZV9wdXRfdGFzayA9IHRhc2tzLlRhc2socXVldWVfcHV0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RhcnRlZC53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluaXNoZWQpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHF1ZXVlX3B1dF90YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluaXNoZWQpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19wdXQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShtYXhzaXplPTEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocXVldWVzLkZ1bGwsIHEucHV0X25vd2FpdCwgMikKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9wdXRfY2FuY2VsbGVkX3JhY2Uoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUXVldWUobG9vcD1zZWxmLmxvb3AsIG1heHNpemU9MSkKKworICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrcy5UYXNrKHEucHV0KCdjJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gdGFza3MuVGFzayhxLnB1dCgnYicpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0X25vd2FpdCgpLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5nZXRfbm93YWl0KCksICdjJykKKworICAgIGRlZiB0ZXN0X3B1dF93aXRoX3dhaXRpbmdfZ2V0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdCA9IHRhc2tzLlRhc2socS5nZXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEucHV0KCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KSwgJ2EnKQorCisKK2NsYXNzIExpZm9RdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gcXVldWVzLkxpZm9RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzIsIDMsIDFdLCBpdGVtcykKKworCitjbGFzcyBQcmlvcml0eVF1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIHEgPSBxdWV1ZXMuUHJpb3JpdHlRdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZm9yIGkgaW4gWzEsIDMsIDJdOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgaXRlbXMgPSBbcS5nZXRfbm93YWl0KCkgZm9yIF8gaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDIsIDNdLCBpdGVtcykKKworCitjbGFzcyBKb2luYWJsZVF1ZXVlVGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfdGFza19kb25lX3VuZGVyZmxvdyhzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBxLnRhc2tfZG9uZSkKKworICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZShzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KGkpCisKKyAgICAgICAgYWNjdW11bGF0b3IgPSAwCisKKyAgICAgICAgIyBUd28gd29ya2VycyBnZXQgaXRlbXMgZnJvbSB0aGUgcXVldWUgYW5kIGNhbGwgdGFza19kb25lIGFmdGVyIGVhY2guCisgICAgICAgICMgSm9pbiB0aGUgcXVldWUgYW5kIGFzc2VydCBhbGwgaXRlbXMgaGF2ZSBiZWVuIHByb2Nlc3NlZC4KKyAgICAgICAgcnVubmluZyA9IFRydWUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3b3JrZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGFjY3VtdWxhdG9yCisKKyAgICAgICAgICAgIHdoaWxlIHJ1bm5pbmc6CisgICAgICAgICAgICAgICAgaXRlbSA9IHlpZWxkIGZyb20gcS5nZXQoKQorICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yICs9IGl0ZW0KKyAgICAgICAgICAgICAgICBxLnRhc2tfZG9uZSgpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoMik6CisgICAgICAgICAgICAgICAgdGFza3MuVGFzayh3b3JrZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmFuZ2UoMTAwKSksIGFjY3VtdWxhdG9yKQorCisgICAgICAgICMgY2xvc2UgcnVubmluZyBnZW5lcmF0b3JzCisgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZSgyKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgwKQorCisgICAgZGVmIHRlc3Rfam9pbl9lbXB0eV9xdWV1ZShzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgVGVzdCB0aGF0IGEgcXVldWUgam9pbigpcyBzdWNjZXNzZnVsbHksIGFuZCBiZWZvcmUgYW55dGhpbmcgZWxzZQorICAgICAgICAjIChkb25lIHR3aWNlIGZvciBpbnN1cmFuY2UpLgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGpvaW4oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGpvaW4oKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgcSA9IHF1ZXVlcy5Kb2luYWJsZVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuX2Zvcm1hdCgpLCAnbWF4c2l6ZT0wJykKKworICAgICAgICBxLl91bmZpbmlzaGVkX3Rhc2tzID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuX2Zvcm1hdCgpLCAnbWF4c2l6ZT0wIHRhc2tzPTInKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhhYTc2NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NlbGVjdG9yX2V2ZW50cy5weQpAQCAtMCwwICsxLDE2NjMgQEAKKyIiIlRlc3RzIGZvciBzZWxlY3Rvcl9ldmVudHMucHkiIiIKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBnYworaW1wb3J0IHBwcmludAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvLnByb3RvY29scyBpbXBvcnQgRGF0YWdyYW1Qcm90b2NvbCwgUHJvdG9jb2wKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VTZWxlY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTc2xUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQKKworCitjbGFzcyBUZXN0QmFzZVNlbGVjdG9yRXZlbnRMb29wKEJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisKKyAgICBkZWYgX21ha2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLl9zc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuX2Nzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzICs9IDEKKworCitkZWYgbGlzdF90b19idWZmZXIobD0oKSk6CisgICAgcmV0dXJuIGJ5dGVhcnJheSgpLmpvaW4obCkKKworCitjbGFzcyBCYXNlU2VsZWN0b3JFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IFRlc3RCYXNlU2VsZWN0b3JFdmVudExvb3AodW5pdHRlc3QubW9jay5Nb2NrKCkpCisKKyAgICBkZWYgdGVzdF9tYWtlX3NvY2tldF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIG0gPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KG0sIG0pLCBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydChtLCBtLCBtLCBtKSwgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLnNzbCcsIE5vbmUpCisgICAgZGVmIHRlc3RfbWFrZV9zc2xfdHJhbnNwb3J0X3dpdGhvdXRfc3NsX2Vycm9yKHNlbGYpOgorICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydChtLCBtLCBtLCBtKQorCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CisgICAgICAgIHNzb2NrID0gc2VsZi5sb29wLl9zc29jaworICAgICAgICBzc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworICAgICAgICBjc29jayA9IHNlbGYubG9vcC5fY3NvY2sKKyAgICAgICAgY3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEKKyAgICAgICAgcmVtb3ZlX3JlYWRlciA9IHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IHNlbGVjdG9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9jc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zc29jaykKKyAgICAgICAgc2VsZWN0b3IuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc3NvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgY3NvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgcmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoNykKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfbm9fc2VsZWN0b3Ioc2VsZik6CisgICAgICAgIHNzb2NrID0gc2VsZi5sb29wLl9zc29jaworICAgICAgICBjc29jayA9IHNlbGYubG9vcC5fY3NvY2sKKyAgICAgICAgcmVtb3ZlX3JlYWRlciA9IHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbW92ZV9yZWFkZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgc2VsZi5sb29wLl9zb2NrZXRwYWlyKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc3NvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3JlYWRfZnJvbV9zZWxmKCkpCisKKyAgICBkZWYgdGVzdF9yZWFkX2Zyb21fc2VsZl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc3NvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fY3NvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKQorCisgICAgZGVmIHRlc3Rfc29ja19yZWN2KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2sucmVjdi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgVHJ1ZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfcmVjdl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIHNlbGYubG9vcC5fc29ja19yZWN2LCBmLCBUcnVlLCBzb2NrLCAxMDI0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGxfbm9kYXRhKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGZ1dHVyZXMuRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suc2VuZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgVHJ1ZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9pbnRlcnJ1cHRlZChzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLmV4Y2VwdGlvbigpLCBlcnIpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfcGFydGlhbChzZWxmKToKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ3RhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX25vbmUoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGZ1dHVyZXMuRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKGYsIEZhbHNlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jb25uZWN0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBGYWxzZSwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNvbm5lY3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIFRydWUsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suZ2V0c29ja29wdC5yZXR1cm5fdmFsdWUgPSBlcnJuby5FQUdBSU4KKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdCwgZiwKKyAgICAgICAgICAgICBUcnVlLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRU5PVENPTk4KKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0KGYsIFRydWUsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBPU0Vycm9yKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0ID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBmdXR1cmVzLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jayksIHNlbGYubG9vcC5fc29ja19hY2NlcHQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0KHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgY29ubiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnJldHVybl92YWx1ZSA9IGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNvbm4sICgnMTI3LjAuMC4xJywgMTAwMCkpLCBmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChGYWxzZSwpLCBjb25uLnNldGJsb2NraW5nLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9jYW5jZWxlZF9mdXQoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5hY2NlcHQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorCisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBUcnVlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LCBmLCBUcnVlLCBzb2NrKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGYgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIGVyciA9IHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIsIGYuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkuc2lkZV9lZmZlY3QgPSBLZXlFcnJvcgorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodykKKworICAgIGRlZiB0ZXN0X2FkZF9yZWFkZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZWFkZXIuY2FuY2VsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGVjdG9ycy5FVkVOVF9XUklURSB8IHNlbGVjdG9ycy5FVkVOVF9SRUFELCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCByLl9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cml0ZXIsIHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nX3dyaXRlcihzZWxmKToKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIHdyaXRlcikpCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAoTm9uZSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3JlYWRfd3JpdGUoc2VsZik6CisgICAgICAgIHJlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCB8IHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgIChyZWFkZXIsIHdyaXRlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfYWRkX3dyaXRlcl9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHcuX2NhbGxiYWNrKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3dyaXRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IubW9kaWZ5LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyKDEpKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLl9jYW5jZWxsZWQgPSBGYWxzZQorCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYubG9vcC5fYWRkX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aChyZWFkZXIpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2V2ZW50c19yZWFkX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgcmVhZGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcmVhZGVyLmNhbmNlbGxlZCA9IFRydWUKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHdyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdyaXRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgod3JpdGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfd3JpdGVfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuY2FuY2VsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cygKKyAgICAgICAgICAgIFsoc2VsZWN0b3JzLlNlbGVjdG9yS2V5KDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCB3cml0ZXIpKSwKKyAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0pCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCgxKQorCisKK2NsYXNzIFNlbGVjdG9yVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKFByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fbG9vcCwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9zb2NrLCBzZWxmLnNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX3NvY2tfZmQsIDcpCisKKyAgICBkZWYgdGVzdF9hYm9ydChzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbN10pCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3dyaXRlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIE5vbmUpCisgICAgICAgIHRyLl9idWZmZXIuZXh0ZW5kKGInMScpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKDcsIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHVuaXR0ZXN0Lm1vY2suc2VudGluZWwpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fYnVmZmVyLCBsaXN0X3RvX2J1ZmZlcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgICAgICMgc2Vjb25kIGNsb3NlIHNob3VsZCBub3QgcmVtb3ZlIHJlYWRlcgorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9mYXRhbF9lcnJvcihzZWxmLCBtX2V4Yyk6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgTm9uZSkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yKGV4YykKKworICAgICAgICBtX2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoJ0ZhdGFsIGVycm9yIGZvciAlcycsIHRyKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGV4YykKKworICAgIGRlZiB0ZXN0X2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgZXhjID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gX1NlbGVjdG9yVHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBOb25lKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXhjKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisgICAgICAgIHNlbGYuc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fc29jaykKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisKK2NsYXNzIFNlbGVjdG9yU29ja2V0VHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKFByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrX2ZkID0gc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB0ciA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig3LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmFzc2VydF9jYWxsZWRfd2l0aCh0cikKKworICAgIGRlZiB0ZXN0X2N0b3Jfd2l0aF93YWl0ZXIoc2VsZik6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig3LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDcgaW4gc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig3LCB0ci5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZl9rZWVwX29wZW4oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInJworICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5yZXR1cm5fdmFsdWUgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuY2xvc2UuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3RyeWFnYWluKHNlbGYsIG1fZXhjKToKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2Fpbl9pbnRlcnJ1cHRlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2xvZ2dpbmcuZXhjZXB0aW9uJykKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2Nvbm5fcmVzZXQoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKworICAgIGRlZiB0ZXN0X3dyaXRlX21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YTEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWwoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9wYXJ0aWFsX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWxfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ3RhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWxfbm9uZShzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHRyYW5zcG9ydC5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHNlbGYuc29jay5yZXNldF9tb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfc3RyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9jbG9zaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICAjIFRoaXMgaXMgYW4gaW50ZXJuYWwgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcGFydGlhbF9ub25lKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9leGNlcHRpb25fYW5kX2Nsb3NlKHNlbGYsIG1fbG9nKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgcmVtb3ZlX3dyaXRlciA9IHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuc29jay5zaHV0ZG93bi5hc3NlcnRfY2FsbGVkX3dpdGgoc29ja2V0LlNIVVRfV1IpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxfY291bnQsIDEpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgbGlzdF90b19idWZmZXIoW2InZGF0YSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9lb2YpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBsYW1iZGEgXzogNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci5jbG9zZSgpCisKKworQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorY2xhc3MgU2VsZWN0b3JTc2xUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgc2VsZi5zc2xzb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHNlbGYuc3NsY29udGV4dCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5yZXR1cm5fdmFsdWUgPSBzZWxmLnNzbHNvY2sKKworICAgIGRlZiBfbWFrZV9vbmUoc2VsZiwgY3JlYXRlX3dhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlc2V0X2NvdW50ZXJzKCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9yZWFkZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX3dyaXRlcl9yZXRyeShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50V3JpdGVFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDEsIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2V4YyhzZWxmKToKKyAgICAgICAgZXhjID0gVmFsdWVFcnJvcigpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBleGMKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU3NsVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsIHNlbGYuc3NsY29udGV4dCkKKyAgICAgICAgdHJhbnNwb3J0Ll93YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5fd2FpdGVyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhleGMsIHRyYW5zcG9ydC5fd2FpdGVyLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlX2Jhc2VfZXhjKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0KQorICAgICAgICB0cmFuc3BvcnQuX3dhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB0cmFuc3BvcnQuX3dhaXRlci5leGNlcHRpb24oKSkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEgaW4gc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fcGF1c2VkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKworICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZWFycmF5KGInZGF0YScpKSAgIyBIYXNuJ3QgYmVlbiBtdXRhdGVkLgorICAgICAgICBzZWxmLmFzc2VydElzTm90KGRhdGEsIHRyYW5zcG9ydC5fYnVmZmVyKSAgIyBIYXNuJ3QgYmVlbiBpbmNvcnBvcmF0ZWQuCisKKyAgICBkZWYgdGVzdF93cml0ZV9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ3N0cicpCisKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zaW5nKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKCkpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnJlY3YuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ2RhdGEnLCksIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3dyaXRlX3dhbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fd3JpdGVfd2FudHNfcmVhZCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0cmFuc3BvcnQuX3NvY2tfZmQsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfcmVjdl9jb25uX3Jlc2V0KHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZXNldEVycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZvcmNlX2Nsb3NlID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcigpLCB0cmFuc3BvcnQuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfbm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNzbHNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3NlbmRfY2xvc2luZ19lbXB0eV9idWZmZXIoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9yZXRyeShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKworICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50V3JpdGVFcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9yZWFkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgodHJhbnNwb3J0Ll9zb2NrX2ZkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9leGMoc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9yZWFkX3dhbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fcmVhZF93YW50c193cml0ZSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5LmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fc29ja19mZCwgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyLndyaXRlX2VvZikKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzFdKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSBvciBub3Qgc3NsLkhBU19TTkksICdObyBTTkkgc3VwcG9ydCcpCisgICAgZGVmIHRlc3Rfc2VydmVyX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgc2VsZi5zc2xjb250ZXh0LAorICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5zb2NrLCBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSwgc2VydmVyX3NpZGU9RmFsc2UsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisKKworY2xhc3MgU2VsZWN0b3JTc2xXaXRob3V0U3NsVHJhbnNwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLnNzbCcsIE5vbmUpCisgICAgZGVmIHRlc3Rfc3NsX3RyYW5zcG9ydF9yZXF1aXJlc19zc2xfbW9kdWxlKHNlbGYpOgorICAgICAgICBNb2NrID0gdW5pdHRlc3QubW9jay5Nb2NrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclNzbFRyYW5zcG9ydChNb2NrKCksIE1vY2soKSwgTW9jaygpLCBNb2NrKCkpCisKKworY2xhc3MgU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChEYXRhZ3JhbVByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soc3BlY19zZXQ9c29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2ZnJvbS5yZXR1cm5fdmFsdWUgPSAoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0KSkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Zmcm9tLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VycihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X29zZXJyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG8oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8uY2FsbF9hcmdzWzBdLCAoZGF0YSwgKCcwLjAuMC4wJywgMTIzNCkpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYicnLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ2RhdGEyJywgKCcwLjAuMC4wJywgMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSwKKyAgICAgICAgICAgICAoYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YTIgPSBieXRlYXJyYXkoYidkYXRhMicpCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YTIsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0Ll9idWZmZXJbMV1bMF0sIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhMiA9IG1lbW9yeXZpZXcoYidkYXRhMicpCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YTIsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0Ll9idWZmZXJbMV1bMF0sIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKV0sIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfc2VuZHRvX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICB0cmFuc3BvcnQuX2Nvbm5fbG9zdCA9IDEKKworICAgICAgICB0cmFuc3BvcnQuX2FkZHJlc3MgPSAoJzEyMycsKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Vycm9yX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSwgKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19lcnJvcl9yZWNlaXZlZF9jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCAnc3RyJywgKCkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fY29ubmVjdGVkX2FkZHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sIGInc3RyJywgKCcwLjAuMC4wJywgMikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgYWRkcmVzcz0oMSwpKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGInZGF0YScsICgxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kdG8ucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGRhdGEsICgpKSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuc29jay5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKFsoYidkYXRhMScsICgpKSwgKGInZGF0YTInLCAoKSldKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCkpLCAoYidkYXRhMicsICgpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgpKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9lcnJvcl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JEYXRhZ3JhbVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5zb2NrLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2Vycm9yX3JlY2VpdmVkX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsICgnMC4wLjAuMCcsIDEpKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5lcnJvcl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfY29ubmVjdGVkKHNlbGYsIG1fZXhjKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwgKCcwLjAuMC4wJywgMSkpCisgICAgICAgIGVyciA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgbV9leGMuYXNzZXJ0X2NhbGxlZF93aXRoKCdGYXRhbCBlcnJvciBmb3IgJXMnLCB0cmFuc3BvcnQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N0cmVhbXMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MTZjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5CkBAIC0wLDAgKzEsNDMwIEBACisiIiJUZXN0cyBmb3Igc3RyZWFtcy5weS4iIiIKKworaW1wb3J0IGdjCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc3RyZWFtcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgU3RyZWFtUmVhZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgREFUQSA9IGInbGluZTFcbmxpbmUyXG5saW5lM1xuJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBqdXN0IGluIGNhc2UgaWYgd2UgaGF2ZSB0cmFuc3BvcnQgY2xvc2UgY2FsbGJhY2tzCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8uc3RyZWFtcy5ldmVudHMnKQorICAgIGRlZiB0ZXN0X2N0b3JfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLl9sb29wLCBtX2V2ZW50cy5nZXRfZXZlbnRfbG9vcC5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGYgPSBzdHJlYW1zLm9wZW5fY29ubmVjdGlvbigqaHR0cGQuYWRkcmVzcywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICAgICAgZiA9IHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJ0hUVFAvMS4wIDIwMCBPS1xyXG4nKQorICAgICAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uX25vX2xvb3Bfc3NsKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICBmID0gc3RyZWFtcy5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICAgICAgd3JpdGVyLndyaXRlKGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCisgICAgICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmVuZHN3aXRoKGInXHJcblxyXG5UZXN0IG1lc3NhZ2UnKSkKKworICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHN0cmVhbXMub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgd3JpdGVyLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoWmVyb0RpdmlzaW9uRXJyb3IoKSkKKyAgICAgICAgICAgIGYgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2ZlZWRfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfZmVlZF9kYXRhX2J5dGVfY291bnQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX3plcm8oc2VsZik6CisgICAgICAgICMgUmVhZCB6ZXJvIGJ5dGVzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLkRBVEEpLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSB0YXNrcy5UYXNrKHN0cmVhbS5yZWFkKDMwKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRfbGluZV9icmVha3Moc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcyB3aXRob3V0IGxpbmUgYnJlYWtzLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmUxJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmUyJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg1KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTEnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgYnl0ZXMsIHN0b3AgYXQgZW9mLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZCgxMDI0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZF91bnRpbF9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBhbGwgYnl0ZXMgdW50aWwgZW9mLgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZCgtMSksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMVxuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazInKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rMVxuY2h1bmsyJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lXG4nKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGknLCBkYXRhKQorCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZCgyKSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsxICcpCisgICAgICAgIHJlYWRfdGFzayA9IHRhc2tzLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMiAnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMyAnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ1xuIGNodW5rNCcpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInY2h1bmsxIGNodW5rMiBjaHVuazMgXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiJ1xuIGNodW5rNCcpLTEsIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2xpbWl0X3dpdGhfZXhpc3RpbmdfZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTFcbmxpbmUyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InbGluZTJcbiddLCBsaXN0KHN0cmVhbS5fYnVmZmVyKSkKKworICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcigzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ25lMScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidsaSddLCBsaXN0KHN0cmVhbS5fYnVmZmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9saW1pdChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIoNywgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsxJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazInKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rM1xuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidjaHVuazNcbiddLCBsaXN0KHN0cmVhbS5fYnVmZmVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBzdHJlYW0uX2J5dGVfY291bnQpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9saW5lX2J5dGVfY291bnQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs6Nl0pCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBWzY6XSkKKworICAgICAgICBsaW5lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTFcbicsIGxpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuREFUQSkgLSBsZW4oYidsaW5lMVxuJyksIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidzb21lIGRhdGEnKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInc29tZSBkYXRhJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VtcHR5X2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBsaW5lKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg3KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmwnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGVuKHNlbGYuREFUQSkgLSBsZW4oYidsaW5lMVxuJykgLSBsZW4oYidsaW5lMlxubCcpLAorICAgICAgICAgICAgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmVcbicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lXG4nLCBkYXRhKQorCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X3plcm9fb3JfbGVzcyhzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcyAoemVybyBvciBsZXNzKS4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuREFUQSksIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5EQVRBKSwgc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGV4YWN0bHkoc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMuCisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIG4gPSAyICogbGVuKHNlbGYuREFUQSkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZGV4YWN0bHkobiksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEgKyBzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuREFUQSksIHN0cmVhbS5fYnl0ZV9jb3VudCkKKworICAgIGRlZiB0ZXN0X3JlYWRleGFjdGx5X2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcyAoZW9mKS4KKyAgICAgICAgc3RyZWFtID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG4gPSAyICogbGVuKHNlbGYuREFUQSkKKyAgICAgICAgcmVhZF90YXNrID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZGV4YWN0bHkobiksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkRBVEEsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RyZWFtLl9ieXRlX2NvdW50KQorCisgICAgZGVmIHRlc3RfcmVhZGV4YWN0bHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmVcbicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGknLCBkYXRhKQorCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGV4YWN0bHkoMikpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzdHJlYW0uZXhjZXB0aW9uKCkpCisKKyAgICAgICAgZXhjID0gVmFsdWVFcnJvcigpCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl93YWl0ZXIoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNldF9lcnIoKToKKyAgICAgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiByZWFkbGluZSgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzdHJlYW0ucmVhZGxpbmUoKQorCisgICAgICAgIHQxID0gdGFza3MuVGFzayhzdHJlYW0ucmVhZGxpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhzZXRfZXJyKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdChbdDEsIHQyXSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxLnJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9jYW5jZWwoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJlYWRfYV9saW5lKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0cmVhbS5yZWFkbGluZSgpCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2socmVhZF9hX2xpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICAjIFRoZSBmb2xsb3dpbmcgbGluZSBmYWlscyBpZiBzZXRfZXhjZXB0aW9uKCkgaXNuJ3QgY2FyZWZ1bC4KKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdtZXNzYWdlJykpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHN0cmVhbS5fd2FpdGVyLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc3RhcnRfc2VydmVyKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15U2VydmVyOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5sb29wID0gbG9vcAorCisgICAgICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudChzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgZnJvbSBjbGllbnRfcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyLndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIHN0cmVhbXMuc3RhcnRfc2VydmVyKHNlbGYuaGFuZGxlX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEyNy4wLjAuMScsIDEyMzQ1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xpZW50X2NhbGxiYWNrKHNlbGYsIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIpOgorICAgICAgICAgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKGNsaWVudF9yZWFkZXIucmVhZGxpbmUoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgICAgICBkZWYgZG9uZSh0YXNrKToKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50X3dyaXRlci53cml0ZSh0YXNrLnJlc3VsdCgpKQorCisgICAgICAgICAgICAgICAgdGFzay5hZGRfZG9uZV9jYWxsYmFjayhkb25lKQorCisgICAgICAgICAgICBkZWYgc3RhcnRfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLnN0YXJ0X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnRfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLCAxMjM0NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYuc2VydmVyLndhaXRfY2xvc2VkKCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNsaWVudCgpOgorICAgICAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSB5aWVsZCBmcm9tIHN0cmVhbXMub3Blbl9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLCAxMjM0NSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAjIHNlbmQgYSBsaW5lCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYiJoZWxsbyB3b3JsZCFcbiIpCisgICAgICAgICAgICAjIHJlYWQgaXQgYmFjaworICAgICAgICAgICAgbXNnYmFjayA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gbXNnYmFjaworCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNvcm91dGluZSBhcyBjbGllbnQgaGFuZGxlcgorICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihzZWxmLmxvb3ApCisgICAgICAgIHNlcnZlci5zdGFydCgpCisgICAgICAgIG1zZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhjbGllbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY2FsbGJhY2sgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIuc3RhcnRfY2FsbGJhY2soKQorICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soY2xpZW50KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzBkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90YXNrcy5weQpAQCAtMCwwICsxLDE1NTQgQEAKKyIiIlRlc3RzIGZvciB0YXNrcy5weS4iIiIKKworaW1wb3J0IGdjCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IE1vY2sKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCB0YXNrcworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgRHVtbXk6CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnRHVtbXkoKScKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBUYXNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfdGFza19jbGFzcyhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdvaycKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ29rJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIGxvb3ApCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfYXN5bmNfY29yb3V0aW5lKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0ID0gdGFza3MuYXN5bmMobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ29rJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHQgPSB0YXNrcy5hc3luYyhub3RtdWNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBsb29wKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2FzeW5jX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZl9vcmlnID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZfb3JpZy5zZXRfcmVzdWx0KCdrbycpCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKGZfb3JpZykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgJ2tvJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCBmX29yaWcpCisKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5uZXdfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYgPSB0YXNrcy5hc3luYyhmX29yaWcsIGxvb3A9bG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgICAgICBmID0gdGFza3MuYXN5bmMoZl9vcmlnLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCBmX29yaWcpCisKKyAgICBkZWYgdGVzdF9hc3luY190YXNrKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0X29yaWcgPSB0YXNrcy5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQgPSB0YXNrcy5hc3luYyh0X29yaWcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgdF9vcmlnKQorCisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0ID0gdGFza3MuYXN5bmModF9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgdCA9IHRhc2tzLmFzeW5jKHRfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModCwgdF9vcmlnKQorCisgICAgZGVmIHRlc3RfYXN5bmNfbmVpdGhlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdGFza3MuYXN5bmMoJ29rJykKKworICAgIGRlZiB0ZXN0X3Rhc2tfcmVwcihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorICAgICAgICAgICAgcmV0dXJuICdhYmMnCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdC5hZGRfZG9uZV9jYWxsYmFjayhEdW1teSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8UEVORElORywgW0R1bW15KCldPicpCisgICAgICAgIHQuY2FuY2VsKCkgICMgRG9lcyBub3QgdGFrZSBpbW1lZGlhdGUgZWZmZWN0IQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUYXNrKDxub3RtdWNoPik8Q0FOQ0VMTElORywgW0R1bW15KCldPicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwgJ1Rhc2soPG5vdG11Y2g+KTxDQU5DRUxMRUQ+JykKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICJUYXNrKDxub3RtdWNoPik8cmVzdWx0PSdhYmMnPiIpCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHJfY3VzdG9tKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVChmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdUW10nCisKKyAgICAgICAgY2xhc3MgTXlUYXNrKHRhc2tzLlRhc2ssIFQpOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fcmVwcl9fKCkKKworICAgICAgICBnZW4gPSBjb3JvKCkKKyAgICAgICAgdCA9IE15VGFzayhnZW4sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksICdUW10oPGNvcm8+KScpCisgICAgICAgIGdlbi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90YXNrX2Jhc2ljcyhzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIGEgPSB5aWVsZCBmcm9tIGlubmVyMSgpCisgICAgICAgICAgICBiID0geWllbGQgZnJvbSBpbm5lcjIoKQorICAgICAgICAgICAgcmV0dXJuIGErYgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyMSgpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIyKCk6CisgICAgICAgICAgICByZXR1cm4gMTAwMAorCisgICAgICAgIHQgPSBvdXRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KSwgMTA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMTAuMCwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AuY2FsbF9zb29uKHQuY2FuY2VsKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3lpZWxkKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyBzdGFydCBjb3JvCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfaW5uZXJfZnV0dXJlKHNlbGYpOgorICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgdGFzaworICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9ib3RoX3Rhc2tfYW5kX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB0LmNhbmNlbCgpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF90YXNrX2NhdGNoaW5nKHNlbGYpOgorICAgICAgICBmdXQxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDEpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBmdXQxLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MikgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dDIuY2FuY2VsbGVkKCkpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfdGFza19pZ25vcmluZyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDMgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gZnV0MworICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIHQgPSB0YXNrcy5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDEpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBmdXQxLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MikgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dDIuY2FuY2VsbGVkKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDMpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBmdXQzLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dDMuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9jdXJyZW50X3Rhc2soc2VsZik6CisgICAgICAgIGxvb3AgPSBldmVudHMubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC5fbXVzdF9jYW5jZWwpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICAgICAgIyBUaGUgc2xlZXAgc2hvdWxkIGJlIGNhbmNlbGxlZCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMTAwLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3Rfc3RvcF93aGlsZV9ydW5faW5fY29tcGxldGUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjMsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIHggPSAwCisgICAgICAgIHdhaXRlcnMgPSBbXQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHgKKyAgICAgICAgICAgIHdoaWxlIHggPCAxMDoKKyAgICAgICAgICAgICAgICB3YWl0ZXJzLmFwcGVuZCh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCkpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXJzWy0xXQorICAgICAgICAgICAgICAgIHggKz0gMQorICAgICAgICAgICAgICAgIGlmIHggPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICAgICB0ID0gdGFza3MuVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4zLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIGNsb3NlIGdlbmVyYXRvcnMKKyAgICAgICAgZm9yIHcgaW4gd2FpdGVyczoKKyAgICAgICAgICAgIHcuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Ioc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC40LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4yLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgZnV0ID0gdGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdF9mb3IoZnV0LCAwLjEsIGxvb3A9bG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyB3YWl0IGZvciByZXN1bHQKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICB0YXNrcy53YWl0X2ZvcihmdXQsIDAuMywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdkb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3Jfd2l0aF9nbG9iYWxfbG9vcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjIsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAnZG9uZScKKworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AobG9vcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnV0ID0gdGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdF9mb3IoZnV0LCAwLjAxKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjE1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbYiwgYV0sIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthLCBiXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgcmV0dXJuIDQyCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgRG9pbmcgaXQgYWdhaW4gc2hvdWxkIHRha2Ugbm8gdGltZSBhbmQgZXhlcmNpc2UgYSBkaWZmZXJlbnQgcGF0aC4KKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX2dsb2JhbF9sb29wKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4wMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjAxNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gdGFza3Mud2FpdChbYiwgYV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYSwgYl0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICB0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorCisgICAgZGVmIHRlc3Rfd2FpdF9lcnJvcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIHRhc2tzLndhaXQoc2V0KCksIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICB0YXNrcy53YWl0KFt0YXNrcy5zbGVlcCgxMC4wLCBsb29wPXNlbGYubG9vcCldLAorICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fd2hlbj0tMSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9jb21wbGV0ZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKAorICAgICAgICAgICAgdGFza3Mud2FpdChbYiwgYV0sIHJldHVybl93aGVuPXRhc2tzLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKSwKKyAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7Yn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2F9LCBwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9yZWFsbHlfZG9uZShzZWxmKToKKyAgICAgICAgIyB0aGVyZSBpcyBwb3NzaWJpbGl0eSB0aGF0IHNvbWUgdGFza3MgaW4gdGhlIHBlbmRpbmcgbGlzdAorICAgICAgICAjIGJlY2FtZSBkb25lIGJ1dCB0aGVpciBjYWxsYmFja3MgaGF2ZW4ndCBhbGwgYmVlbiBjYWxsZWQgeWV0CisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzEoKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZAorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKGNvcm8xKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBiID0gdGFza3MuVGFzayhjb3JvMigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2soCisgICAgICAgICAgICB0YXNrcy53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49dGFza3MuRklSU1RfQ09NUExFVEVELAorICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthLCBifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZpcnN0X2V4Y2VwdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgICMgZmlyc3RfZXhjZXB0aW9uLCB0YXNrIGFscmVhZHkgaGFzIGV4Y2VwdGlvbgorICAgICAgICBhID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgxMC4wLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZXhjKCk6CisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcignZXJyJykKKworICAgICAgICBiID0gdGFza3MuVGFzayhleGMoKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gdGFza3MuVGFzaygKKyAgICAgICAgICAgIHRhc2tzLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj10YXNrcy5GSVJTVF9FWENFUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCksCisgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2J9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHthfSwgcGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9leGNlcHRpb25faW5fd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICAjIGZpcnN0X2V4Y2VwdGlvbiwgZXhjZXB0aW9uIGR1cmluZyB3YWl0aW5nCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDEwLjAsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBleGMoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ2VycicpCisKKyAgICAgICAgYiA9IHRhc2tzLlRhc2soZXhjKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IHRhc2tzLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj10YXNrcy5GSVJTVF9FWENFUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7Yn0sIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2F9LCBwZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xNQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXBlcigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5zbGVlcCgwLjE1LCBsb29wPWxvb3ApCisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigncmVhbGx5JykKKworICAgICAgICBiID0gdGFza3MuVGFzayhzbGVlcGVyKCksIGxvb3A9bG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGRvbmUsIHBlbmRpbmcgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2IsIGFdLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkb25lKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICBlcnJvcnMgPSBzZXQoZiBmb3IgZiBpbiBkb25lIGlmIGYuZXhjZXB0aW9uKCkgaXMgbm90IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlcnJvcnMpLCAxKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3MuVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfd2l0aF90aW1lb3V0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSB0YXNrcy53YWl0KFtiLCBhXSwgdGltZW91dD0wLjExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIHNldChbYV0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoW2JdKSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFza3Mud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2NvbmN1cnJlbnRfY29tcGxldGUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5UYXNrKHRhc2tzLnNsZWVwKDAuMSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3MuVGFzayh0YXNrcy5zbGVlcCgwLjE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgdGFza3Mud2FpdChbYiwgYV0sIHRpbWVvdXQ9MC4xLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KFtiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorICAgICAgICBjb21wbGV0ZWQgPSBzZXQoKQorICAgICAgICB0aW1lX3NoaWZ0ZWQgPSBGYWxzZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoZHQsIHgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdGltZV9zaGlmdGVkCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKGR0LCBsb29wPWxvb3ApCisgICAgICAgICAgICBjb21wbGV0ZWQuYWRkKHgpCisgICAgICAgICAgICBpZiBub3QgdGltZV9zaGlmdGVkIGFuZCAnYScgaW4gY29tcGxldGVkIGFuZCAnYicgaW4gY29tcGxldGVkOgorICAgICAgICAgICAgICAgIHRpbWVfc2hpZnRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjE0KQorICAgICAgICAgICAgcmV0dXJuIHgKKworICAgICAgICBhID0gc2xlZXBlcigwLjAxLCAnYScpCisgICAgICAgIGIgPSBzbGVlcGVyKDAuMDEsICdiJykKKyAgICAgICAgYyA9IHNsZWVwZXIoMC4xNSwgJ2MnKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgdmFsdWVzID0gW10KKyAgICAgICAgICAgIGZvciBmIGluIHRhc2tzLmFzX2NvbXBsZXRlZChbYiwgYywgYV0sIGxvb3A9bG9vcCk6CisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoeWllbGQgZnJvbSBmKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluIHJlc1s6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYicgaW4gcmVzWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMl0sICdjJykKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfd2l0aF90aW1lb3V0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEyLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDIKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIGEgPSB0YXNrcy5zbGVlcCgwLjEsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3Muc2xlZXAoMC4xNSwgJ2InLCBsb29wPWxvb3ApCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB2YWx1ZXMgPSBbXQorICAgICAgICAgICAgZm9yIGYgaW4gdGFza3MuYXNfY29tcGxldGVkKFthLCBiXSwgdGltZW91dD0wLjEyLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKCgxLCB2KSkKKyAgICAgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5UaW1lb3V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKCgyLCBleGMpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlcworCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDIsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMF0sICgxLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1sxXVswXSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc1sxXVsxXSwgZnV0dXJlcy5UaW1lb3V0RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMiwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9yZXZlcnNlX3dhaXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4wNQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgYSA9IHRhc2tzLnNsZWVwKDAuMDUsICdhJywgbG9vcD1sb29wKQorICAgICAgICBiID0gdGFza3Muc2xlZXAoMC4xMCwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KHRhc2tzLmFzX2NvbXBsZXRlZChmcywgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnV0cyksIDIpCisKKyAgICAgICAgeCA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHNbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIGxvb3AudGltZSgpKQorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgwLjA1KQorICAgICAgICB5ID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0c1swXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xMCwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfY29uY3VycmVudChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBhID0gdGFza3Muc2xlZXAoMC4wNSwgJ2EnLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSB0YXNrcy5zbGVlcCgwLjA1LCAnYicsIGxvb3A9bG9vcCkKKyAgICAgICAgZnMgPSB7YSwgYn0KKyAgICAgICAgZnV0cyA9IGxpc3QodGFza3MuYXNfY29tcGxldGVkKGZzLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmdXRzKSwgMikKKyAgICAgICAgd2FpdGVyID0gdGFza3Mud2FpdChmdXRzLCBsb29wPWxvb3ApCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGYucmVzdWx0KCkgZm9yIGYgaW4gZG9uZSksIHsnYScsICdiJ30pCisKKyAgICBkZWYgdGVzdF9zbGVlcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjA1CisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoZHQsIGFyZyk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2tzLnNsZWVwKGR0LzIsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gdGFza3Muc2xlZXAoZHQvMiwgYXJnLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2soc2xlZXBlcigwLjEsICd5ZWFoJyksIGxvb3A9bG9vcCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICd5ZWFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfc2xlZXBfY2FuY2VsKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgdCA9IHRhc2tzLlRhc2sodGFza3Muc2xlZXAoMTAuMCwgJ3llYWgnLCBsb29wPWxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBvcmlnX2NhbGxfbGF0ZXIgPSBsb29wLmNhbGxfbGF0ZXIKKworICAgICAgICBkZWYgY2FsbF9sYXRlcihzZWxmLCBkZWxheSwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGhhbmRsZQorICAgICAgICAgICAgaGFuZGxlID0gb3JpZ19jYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICAgICAgbG9vcC5jYWxsX2xhdGVyID0gY2FsbF9sYXRlcgorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYW5kbGUuX2NhbmNlbGxlZCkKKworICAgICAgICB0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhbmRsZS5fY2FuY2VsbGVkKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfc2xlZXBpbmdfdGFzayhzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoNTAwMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKGdlbikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvb3AuY2xvc2UpCisKKyAgICAgICAgc2xlZXBmdXQgPSBOb25lCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgc2xlZXAoZHQpOgorICAgICAgICAgICAgbm9ubG9jYWwgc2xlZXBmdXQKKyAgICAgICAgICAgIHNsZWVwZnV0ID0gdGFza3Muc2xlZXAoZHQsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBmdXQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBkb2l0KCk6CisgICAgICAgICAgICBzbGVlcGVyID0gdGFza3MuVGFzayhzbGVlcCg1MDAwKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMSwgc2xlZXBlci5jYW5jZWwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzbGVlcGVyCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NhbmNlbGxlZCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzbGVwdCBpbicKKworICAgICAgICBkb2VyID0gZG9pdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9vcC5ydW5fdW50aWxfY29tcGxldGUoZG9lciksICdjYW5jZWxsZWQnKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgbG9vcC50aW1lKCkpCisKKyAgICBkZWYgdGVzdF90YXNrX2NhbmNlbF93YWl0ZXJfZnV0dXJlKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKGNvcm8oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suX2Z1dF93YWl0ZXIsIGZ1dCkKKworICAgICAgICB0YXNrLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhc2suX2Z1dF93YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX2luX2NvbXBsZXRlZF90YXNrKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ2tvJworCisgICAgICAgIGdlbiA9IG5vdG11Y2goKQorICAgICAgICB0YXNrID0gdGFza3MuVGFzayhnZW4sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrLnNldF9yZXN1bHQoJ29rJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdGFzay5fc3RlcCkKKyAgICAgICAgZ2VuLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3N0ZXBfcmVzdWx0KHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICB5aWVsZCBOb25lCisgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICByZXR1cm4gJ2tvJworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBub3RtdWNoKCkpCisKKyAgICBkZWYgdGVzdF9zdGVwX3Jlc3VsdF9mdXR1cmUoc2VsZik6CisgICAgICAgICMgSWYgY29yb3V0aW5lIHJldHVybnMgZnV0dXJlLCB0YXNrIHdhaXRzIG9uIHRoaXMgZnV0dXJlLgorCisgICAgICAgIGNsYXNzIEZ1dChmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgc2VsZi5jYl9hZGRlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2RzKQorCisgICAgICAgICAgICBkZWYgYWRkX2RvbmVfY2FsbGJhY2soc2VsZiwgZm4pOgorICAgICAgICAgICAgICAgIHNlbGYuY2JfYWRkZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5hZGRfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgICBmdXQgPSBGdXQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBmdXQKKworICAgICAgICB0ID0gdGFza3MuVGFzayh3YWl0X2Zvcl9mdXR1cmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNiX2FkZGVkKQorCisgICAgICAgIHJlcyA9IG9iamVjdCgpCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KHJlcykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVzLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3N0ZXBfd2l0aF9iYXNlZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdXRjaCgpOgorICAgICAgICAgICAgcmFpc2UgQmFzZUV4Y2VwdGlvbigpCisKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2sobm90bXV0Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRhc2suX3N0ZXApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFzay5leGNlcHRpb24oKSwgQmFzZUV4Y2VwdGlvbikKKworICAgIGRlZiB0ZXN0X2Jhc2VleGNlcHRpb25fZHVyaW5nX2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gdGVzdF91dGlscy5UZXN0TG9vcChnZW4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoMTAsIGxvb3A9bG9vcCkKKworICAgICAgICBiYXNlX2V4YyA9IEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11dGNoKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzbGVlcGVyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIGJhc2VfZXhjCisKKyAgICAgICAgdGFzayA9IHRhc2tzLlRhc2sobm90bXV0Y2goKSwgbG9vcD1sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KGxvb3ApCisKKyAgICAgICAgdGFzay5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2suZG9uZSgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRlc3RfdXRpbHMucnVuX2JyaWVmbHksIGxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2suZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2suY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGFzay5leGNlcHRpb24oKSwgYmFzZV9leGMpCisKKyAgICBkZWYgdGVzdF9pc2Nvcm91dGluZWZ1bmN0aW9uKHNlbGYpOgorICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhc2tzLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4pKQorCisgICAgICAgIGRlZiBmbjEoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFza3MuaXNjb3JvdXRpbmVmdW5jdGlvbihmbjEpKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZuMigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2tzLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4yKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3ZzX3lpZWxkX2Zyb20oc2VsZik6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXRfZm9yX2Z1dHVyZSgpOgorICAgICAgICAgICAgeWllbGQgZnV0CisKKyAgICAgICAgdGFzayA9IHdhaXRfZm9yX2Z1dHVyZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF92c195aWVsZF9mcm9tX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIGdlbiA9IGNvcm8oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGdlbgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgcmV0dXJuICd0ZXN0JworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpKQorCisgICAgICAgIGNvcm8gPSBmdW5jKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2tzLmlzY29yb3V0aW5lKGNvcm8pKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2Nvcm91dGluZV9ub25fZ2VuX2Z1bmN0aW9uX3JldHVybl9mdXR1cmUoc2VsZik6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZ1bmMoKToKKyAgICAgICAgICAgIHJldHVybiBmdXQKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdCgndGVzdCcpCisKKyAgICAgICAgdDEgPSB0YXNrcy5UYXNrKGZ1bmMoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gdGFza3MuVGFzayhjb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0Mi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X2N1cnJlbnRfdGFzayhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFza3MuVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2tzLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzaykKKworICAgICAgICB0YXNrID0gdGFza3MuVGFzayhjb3JvKHNlbGYubG9vcCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhc2tzLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgIGRlZiB0ZXN0X2N1cnJlbnRfdGFza193aXRoX2ludGVybGVhdmluZ190YXNrcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFza3MuVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgIGZ1dDEgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhc2tzLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzazEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrcy5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2sxKQorICAgICAgICAgICAgZnV0Mi5zZXRfcmVzdWx0KFRydWUpCisKKyAgICAgICAgQHRhc2tzLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIobG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFza3MuVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMikKKyAgICAgICAgICAgIGZ1dDEuc2V0X3Jlc3VsdChUcnVlKQorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFza3MuVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMikKKworICAgICAgICB0YXNrMSA9IHRhc2tzLlRhc2soY29ybzEoc2VsZi5sb29wKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2syID0gdGFza3MuVGFzayhjb3JvMihzZWxmLmxvb3ApLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLndhaXQoKHRhc2sxLCB0YXNrMiksIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFza3MuVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgIyBTb21lIHRob3JvdWdoIHRlc3RzIGZvciBjYW5jZWxsYXRpb24gcHJvcGFnYXRpb24gdGhyb3VnaAorICAgICMgY29yb3V0aW5lcywgdGFza3MgYW5kIHdhaXQoKS4KKworICAgIGRlZiB0ZXN0X3lpZWxkX2Z1dHVyZV9wYXNzZXNfY2FuY2VsKHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBjYW5jZWxzIGlubmVyKCkgY2FuY2VscyB3YWl0ZXIuCisgICAgICAgIHByb29mID0gMAorICAgICAgICB3YWl0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgZXhjZXB0IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZ290IHBhc3Qgc2xlZXAoKSBpbiBpbm5lcigpJykKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGlubmVyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHByb29mICs9IDEwMCAgIyBFeHBlY3QgdGhpcyBwYXRoLgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxMAorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAxMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF95aWVsZF93YWl0X2RvZXNfbm90X3NoaWVsZF9jYW5jZWwoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIG1ha2VzIHdhaXQoKSByZXR1cm4gZWFybHksIGxlYXZlcyBpbm5lcigpCisgICAgICAgICMgcnVubmluZy4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIHByb29mICs9IDEKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIGQsIHAgPSB5aWVsZCBmcm9tIHRhc2tzLndhaXQoW2lubmVyKCldLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHByb29mICs9IDEwMAorCisgICAgICAgIGYgPSB0YXNrcy5hc3luYyhvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBmdXR1cmVzLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9yZXN1bHQoc2VsZik6CisgICAgICAgIGlubmVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gdGFza3Muc2hpZWxkKGlubmVyKQorICAgICAgICBpbm5lci5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG91dGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBpbm5lciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IHRhc2tzLnNoaWVsZChpbm5lcikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcignZXhwZWN0ZWQnKQorICAgICAgICBpbm5lci5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3V0ZXIuZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9jYW5jZWwoc2VsZik6CisgICAgICAgIGlubmVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gdGFza3Muc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9zaG9ydGN1dChzZWxmKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2tzLnNoaWVsZChmdXQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfZWZmZWN0KHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBkb2VzIG5vdCBhZmZlY3QgaW5uZXIoKS4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgICAgIHByb29mICs9IDEKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2hpZWxkKGlubmVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9nYXRoZXIoc2VsZik6CisgICAgICAgIGNoaWxkMSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjaGlsZDIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gdGFza3MuZ2F0aGVyKGNoaWxkMSwgY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgb3V0ZXIgPSB0YXNrcy5zaGllbGQocGFyZW50LCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIG91dGVyLmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ZXIuY2FuY2VsbGVkKCkpCisgICAgICAgIGNoaWxkMS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGNoaWxkMi5zZXRfcmVzdWx0KDIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5yZXN1bHQoKSwgWzEsIDJdKQorCisgICAgZGVmIHRlc3RfZ2F0aGVyX3NoaWVsZChzZWxmKToKKyAgICAgICAgY2hpbGQxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGNoaWxkMiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBpbm5lcjEgPSB0YXNrcy5zaGllbGQoY2hpbGQxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIyID0gdGFza3Muc2hpZWxkKGNoaWxkMiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHBhcmVudCA9IHRhc2tzLmdhdGhlcihpbm5lcjEsIGlubmVyMiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBwYXJlbnQuY2FuY2VsKCkKKyAgICAgICAgIyBUaGlzIHNob3VsZCBjYW5jZWwgaW5uZXIxIGFuZCBpbm5lcjIgYnV0IGJvdCBjaGlsZDEgYW5kIGNoaWxkMi4KKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXJlbnQuZXhjZXB0aW9uKCksIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbm5lcjEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbm5lcjIuY2FuY2VsbGVkKCkpCisgICAgICAgIGNoaWxkMS5zZXRfcmVzdWx0KDEpCisgICAgICAgIGNoaWxkMi5zZXRfcmVzdWx0KDIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisKK2NsYXNzIEdhdGhlclRlc3RzQmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbmVfbG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLm90aGVyX2xvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5vbmVfbG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYub3RoZXJfbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgX3J1bl9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICB3aGlsZSBsb29wLl9yZWFkeToKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKworICAgIGRlZiBfY2hlY2tfc3VjY2VzcyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGEsIGIsIGMgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjKSwgKiprd2FyZ3MpCisgICAgICAgIGNiID0gTW9jaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgYi5zZXRfcmVzdWx0KDEpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgyKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLmNhbGxlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgYy5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXQucmVzdWx0KCksIFsyLCAxLCAzXSkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MoKQorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKHJldHVybl9leGNlcHRpb25zPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVzdWx0X2V4Y2VwdGlvbl9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKHJldHVybl9leGNlcHRpb25zPVRydWUpCisKKyAgICBkZWYgdGVzdF9vbmVfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2Z1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcigqc2VsZi53cmFwX2Z1dHVyZXMoYSwgYiwgYywgZCwgZSkpCisgICAgICAgIGNiID0gTW9jaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgZXhjID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuZXhjZXB0aW9uKCksIGV4YykKKyAgICAgICAgIyBEb2VzIG5vdGhpbmcKKyAgICAgICAgYy5zZXRfcmVzdWx0KDMpCisgICAgICAgIGQuY2FuY2VsKCkKKyAgICAgICAgZS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIGEsIGIsIGMsIGQgPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSg0KV0KKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjLCBkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9leGNlcHRpb25zPVRydWUpCisgICAgICAgIGNiID0gTW9jaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgZXhjID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBleGMyID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgYi5zZXRfcmVzdWx0KDEpCisgICAgICAgIGMuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgzKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGQuc2V0X2V4Y2VwdGlvbihleGMyKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1dC5yZXN1bHQoKSwgWzMsIDEsIGV4YywgZXhjMl0pCisKKworY2xhc3MgRnV0dXJlR2F0aGVyVGVzdHMoR2F0aGVyVGVzdHNCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgd3JhcF9mdXR1cmVzKHNlbGYsICpmdXR1cmVzKToKKyAgICAgICAgcmV0dXJuIGZ1dHVyZXMKKworICAgIGRlZiBfY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2VsZiwgc2VxX29yX2l0ZXIpOgorICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGV2ZW50cy5zZXRfZXZlbnRfbG9vcCwgTm9uZSkKKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpzZXFfb3JfaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1dCwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXQucmVzdWx0KCksIFtdKQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKnNlcV9vcl9pdGVyLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2VtcHR5X3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShbXSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2UoKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKHNldCgpKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShpdGVyKCIiKSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2hldGVyb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBmdXQxID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBmdXQyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB0YXNrcy5nYXRoZXIoZnV0MSwgZnV0MikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHRhc2tzLmdhdGhlcihmdXQxLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2hvbW9nZW5vdXNfZnV0dXJlcyhzZWxmKToKKyAgICAgICAgY2hpbGRyZW4gPSBbZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLm90aGVyX2xvb3ApIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoKmNoaWxkcmVuKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKCpjaGlsZHJlbiwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorCisgICAgZGVmIHRlc3Rfb25lX2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSA9IFtmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDUpXQorICAgICAgICBmdXQgPSB0YXNrcy5nYXRoZXIoYSwgYiwgYywgZCwgZSkKKyAgICAgICAgY2IgPSBNb2NrKCkKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYi5jYW5jZWwoKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1dC5leGNlcHRpb24oKSwgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgIyBEb2VzIG5vdGhpbmcKKyAgICAgICAgYy5zZXRfcmVzdWx0KDMpCisgICAgICAgIGQuY2FuY2VsKCkKKyAgICAgICAgZS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0X2V4Y2VwdGlvbl9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlLCBmID0gW2Z1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KV0KKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKGEsIGIsIGMsIGQsIGUsIGYsIHJldHVybl9leGNlcHRpb25zPVRydWUpCisgICAgICAgIGNiID0gTW9jaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgYS5zZXRfcmVzdWx0KDEpCisgICAgICAgIHpkZSA9IFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgYi5zZXRfZXhjZXB0aW9uKHpkZSkKKyAgICAgICAgYy5jYW5jZWwoKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisgICAgICAgIGQuc2V0X3Jlc3VsdCgzKQorICAgICAgICBlLmNhbmNlbCgpCisgICAgICAgIHJ0ZSA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihydGUpCisgICAgICAgIHJlcyA9IHNlbGYub25lX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc1syXSwgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc1s0XSwgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcikKKyAgICAgICAgcmVzWzJdID0gcmVzWzRdID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzEsIHpkZSwgTm9uZSwgMywgTm9uZSwgcnRlXSkKKyAgICAgICAgY2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZnV0KQorCisKK2NsYXNzIENvcm91dGluZUdhdGhlclRlc3RzKEdhdGhlclRlc3RzQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKHNlbGYub25lX2xvb3ApCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB3cmFwX2Z1dHVyZXMoc2VsZiwgKmZ1dHVyZXMpOgorICAgICAgICBjb3JvcyA9IFtdCisgICAgICAgIGZvciBmdXQgaW4gZnV0dXJlczoKKyAgICAgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBjb3JvKGZ1dD1mdXQpOgorICAgICAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBmdXQpCisgICAgICAgICAgICBjb3Jvcy5hcHBlbmQoY29ybygpKQorICAgICAgICByZXR1cm4gY29yb3MKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2xvb3Bfc2VsZWN0aW9uKHNlbGYpOgorICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICByZXR1cm4gJ2FiYycKKyAgICAgICAgZ2VuMSA9IGNvcm8oKQorICAgICAgICBnZW4yID0gY29ybygpCisgICAgICAgIGZ1dCA9IHRhc2tzLmdhdGhlcihnZW4xLCBnZW4yKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZ2VuMS5jbG9zZSgpCisgICAgICAgIGdlbjIuY2xvc2UoKQorICAgICAgICBnZW4zID0gY29ybygpCisgICAgICAgIGdlbjQgPSBjb3JvKCkKKyAgICAgICAgZnV0ID0gdGFza3MuZ2F0aGVyKGdlbjMsIGdlbjQsIGxvb3A9c2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBnZW4zLmNsb3NlKCkKKyAgICAgICAgZ2VuNC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxsYXRpb25fYnJvYWRjYXN0KHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBjYW5jZWxzIGFsbCBjaGlsZHJlbi4KKyAgICAgICAgcHJvb2YgPSAwCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBwcm9vZiArPSAxCisKKyAgICAgICAgY2hpbGQxID0gdGFza3MuYXN5bmMoaW5uZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBjaGlsZDIgPSB0YXNrcy5hc3luYyhpbm5lcigpLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIGdhdGhlcmVyID0gTm9uZQorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZiwgZ2F0aGVyZXIKKyAgICAgICAgICAgIGdhdGhlcmVyID0gdGFza3MuZ2F0aGVyKGNoaWxkMSwgY2hpbGQyLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGdhdGhlcmVyCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gdGFza3MuYXN5bmMob3V0ZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5vbmVfbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYXRoZXJlci5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaWxkMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaWxkMi5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb29mLCAwKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX21hcmtpbmcoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGZpcnN0IGxpbmUgbWFya2VkICJNYXJrIGV4Y2VwdGlvbiByZXRyaWV2ZWQuIgorCisgICAgICAgIEB0YXNrcy5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKGYpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3Nob3VsZCBub3QgYmUgaWdub3JlZCcpCisKKyAgICAgICAgYSA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgYiA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBAdGFza3MuY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy5nYXRoZXIoaW5uZXIoYSksIGlubmVyKGIpLCBsb29wPXNlbGYub25lX2xvb3ApCisKKyAgICAgICAgZiA9IHRhc2tzLmFzeW5jKG91dGVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBhLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBiLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZi5leGNlcHRpb24oKSwgUnVudGltZUVycm9yKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTM5M2I1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weQpAQCAtMCwwICsxLDY1IEBACisiIiJUZXN0cyBmb3IgdHJhbnNwb3J0cy5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRyYW5zcG9ydHMKKworCitjbGFzcyBUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jdG9yX2V4dHJhX2lzX25vbmUoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2V4dHJhLCB7fSkKKworICAgIGRlZiB0ZXN0X2dldF9leHRyYV9pbmZvKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRzLlRyYW5zcG9ydCh7J2V4dHJhJzogJ2luZm8nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW5mbycsIHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnZXh0cmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJykpCisKKyAgICAgICAgZGVmYXVsdCA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZGVmYXVsdCwgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJywgZGVmYXVsdCkpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRzLlRyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlbGluZXMoW2InbGluZTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInbGluZTInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYidsaW5lMycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0cmFuc3BvcnQud3JpdGUuY2FsbF9jb3VudCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlLmFzc2VydF9jYWxsZWRfd2l0aChiJ2xpbmUxbGluZTJsaW5lMycpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGVfZW9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuY2FuX3dyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5yZXN1bWVfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuYWJvcnQpCisKKyAgICBkZWYgdGVzdF9kZ3JhbV9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHRyYW5zcG9ydHMuRGF0YWdyYW1UcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc190cmFuc3BvcnRfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnRzLlN1YnByb2Nlc3NUcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kX3NpZ25hbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnRlcm1pbmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmtpbGwpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdW5peF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThjZjQwNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3VuaXhfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTQ4OCBAQAorIiIiVGVzdHMgZm9yIHVuaXhfZXZlbnRzLnB5LiIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBnYworaW1wb3J0IGVycm5vCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHBwcmludAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1VOSVggb25seScpCisKKworZnJvbSBhc3luY2lvIGltcG9ydCBldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworZnJvbSBhc3luY2lvIGltcG9ydCB1bml4X2V2ZW50cworCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHNpZ25hbCwgJ1NpZ25hbHMgYXJlIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgU2VsZWN0b3JFdmVudExvb3BUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHVuaXhfZXZlbnRzLlNlbGVjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgZXZlbnRzLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jaGVja19zaWduYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLmxvb3AuX2NoZWNrX3NpZ25hbCwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5fY2hlY2tfc2lnbmFsLCBzaWduYWwuTlNJRyArIDEpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfc2lnbmFsX25vX2hhbmRsZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5faGFuZGxlX3NpZ25hbChzaWduYWwuTlNJRyArIDEsICgpKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NpZ25hbF9jYW5jZWxsZWRfaGFuZGxlcihzZWxmKToKKyAgICAgICAgaCA9IGV2ZW50cy5IYW5kbGUodW5pdHRlc3QubW9jay5Nb2NrKCksICgpKQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5OU0lHICsgMV0gPSBoCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX2hhbmRsZV9zaWduYWwoc2lnbmFsLk5TSUcgKyAxLCAoKSkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX3dpdGgoc2lnbmFsLk5TSUcgKyAxKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfc2V0dXBfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgY2IpCisgICAgICAgIGggPSBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVycy5nZXQoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGV2ZW50cy5IYW5kbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5fY2FsbGJhY2ssIGNiKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGRlZiBzZXRfd2FrZXVwX2ZkKGZkKToKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkID0gc2V0X3dha2V1cF9mZAorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUZBVUxUCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgRXJyLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfaW5zdGFsbF9lcnJvcjIoc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yMyhzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgIHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZ2dpbmcuaW5mby5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsX2NvdW50KQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zaWduYWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHNpZ25hbC5TSUdIVVAsIG1fc2lnbmFsLlNJR19ERkwpLCBtX3NpZ25hbC5zaWduYWwuY2FsbF9hcmdzWzBdKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBtX3NpZ25hbC5TSUdJTlQgPSBzaWduYWwuU0lHSU5UCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisgICAgICAgIHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzW3NpZ25hbC5TSUdIVVBdID0gb2JqZWN0KCkKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5yZXNldF9tb2NrKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fc2lnbmFsLnNldF93YWtldXBfZmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9zaWduYWwuc2lnbmFsLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChzaWduYWwuU0lHSU5ULCBtX3NpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKSwKKyAgICAgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2NsZWFudXBfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nZ2luZy5pbmZvKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQLCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gT1NFcnJvcgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyX2Vycm9yMihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgc2lnbmFsLlNJR0hVUCkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2lnbmFsX2hhbmRsZXJzKSwgMikKKworICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMpLCAwKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKC0xKQorCisKK2NsYXNzIFVuaXhSZWFkUGlwZVRyYW5zcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChwcm90b2NvbHMuUHJvdG9jb2wpCisgICAgICAgIHNlbGYucGlwZSA9IHVuaXR0ZXN0Lm1vY2suTW9jayhzcGVjX3NldD1pby5SYXdJT0Jhc2UpCisgICAgICAgIHNlbGYucGlwZS5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNQorCisgICAgICAgIGZjbnRsX3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdmY250bC5mY250bCcpCisgICAgICAgIGZjbnRsX3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZmNudGxfcGF0Y2hlci5zdG9wKQorCisgICAgICAgIGZzdGF0X3BhdGNoZXIgPSB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5mc3RhdCcpCisgICAgICAgIG1fZnN0YXQgPSBmc3RhdF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc3QgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzdC5zdF9tb2RlID0gc3RhdC5TX0lGSUZPCisgICAgICAgIG1fZnN0YXQucmV0dXJuX3ZhbHVlID0gc3QKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZzdGF0X3BhdGNoZXIuc3RvcCkKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmFzc2VydF9jYWxsZWRfd2l0aCh0cikKKworICAgIGRlZiB0ZXN0X2N0b3Jfd2l0aF93YWl0ZXIoc2VsZik6CisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wsIGZ1dCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZ1dC5yZXN1bHQoKSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeShzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgbV9yZWFkLnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhJykKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9lb2Yoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeV9ibG9ja2VkKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmV4Y2VwdGlvbicpCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5X2Vycm9yKHNlbGYsIG1fcmVhZCwgbV9sb2dleGMpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIG1fcmVhZC5zaWRlX2VmZmVjdCA9IGVycgorICAgICAgICB0ci5fY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgdHIuX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIG1fbG9nZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgnRmF0YWwgZXJyb3IgZm9yICVzJywgdHIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfcGF1c2VfcmVhZGluZyhzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBtID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoNSwgbSkKKyAgICAgICAgdHIucGF1c2VfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfcmVzdW1lX3JlYWRpbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci5fY2xvc2UgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9jbG9zZV9hbHJlYWR5X2Nsb3Npbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFJlYWRQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyLl9jbG9zZSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fY2xvc2UuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19jbG9zZShzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBvYmplY3QoKQorICAgICAgICB0ci5fY2xvc2UoZXJyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLnByb3RvY29sKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5sb29wKSkpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Rfd2l0aF9lcnIoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhSZWFkUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICB0ci5fY2FsbF9jb25uZWN0aW9uX2xvc3QoZXJyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fcHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYucHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5wcm90b2NvbCkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYubG9vcCkpKQorCisKK2NsYXNzIFVuaXhXcml0ZVBpcGVUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHRlc3RfdXRpbHMuVGVzdExvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2wocHJvdG9jb2xzLkJhc2VQcm90b2NvbCkKKyAgICAgICAgc2VsZi5waXBlID0gdW5pdHRlc3QubW9jay5Nb2NrKHNwZWNfc2V0PWlvLlJhd0lPQmFzZSkKKyAgICAgICAgc2VsZi5waXBlLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA1CisKKyAgICAgICAgZmNudGxfcGF0Y2hlciA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2ZjbnRsLmZjbnRsJykKKyAgICAgICAgZmNudGxfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmY250bF9wYXRjaGVyLnN0b3ApCisKKyAgICAgICAgZnN0YXRfcGF0Y2hlciA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLmZzdGF0JykKKyAgICAgICAgbV9mc3RhdCA9IGZzdGF0X3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzdCA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHN0LnN0X21vZGUgPSBzdGF0LlNfSUZTT0NLCisgICAgICAgIG1fZnN0YXQucmV0dXJuX3ZhbHVlID0gc3QKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZzdGF0X3BhdGNoZXIuc3RvcCkKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sLCBmdXQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDUsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdXQucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9jYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWwoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ3RhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2J1ZmZlcihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ3ByZXZpb3VzJ10KKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ3ByZXZpb3VzJywgYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2FnYWluKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcigpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5sb2dnZXInKQorICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXJyKHNlbGYsIG1fd3JpdGUsIG1fbG9nKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIGVyciA9IE9TRXJyb3IoKQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gZXJyCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB0ci5fY29ubl9sb3N0KQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb3ZlcnNwZWNpZmllZC4gOi0oCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3Igb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9jbG9zZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpICAjIHBpcGUgd2FzIGNsb3NlZCBieSBwZWVyCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYucGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3RvY29sKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fY2xvc2luZykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAzCisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYidhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9hZ2FpbihzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYubG9vcCwgc2VsZi5waXBlLCBzZWxmLnByb3RvY29sKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IoKQorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2InZGF0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF9fd3JpdGVfcmVhZHlfZW1wdHkoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXhjZXB0aW9uJykKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9lcnIoc2VsZiwgbV93cml0ZSwgbV9sb2dleGMpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IGVyciA9IE9TRXJyb3IoKQorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIG1fbG9nZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgnRmF0YWwgZXJyb3IgZm9yICVzJywgdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9jbG9zaW5nKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0ci5fd3JpdGVfcmVhZHkoKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLmFib3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBzeXMuZ2V0cmVmY291bnQoc2VsZi5wcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLnByb3RvY29sKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGdjLmdldF9yZWZlcnJlcnMoc2VsZi5sb29wKSkpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Rfd2l0aF9lcnIoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHN5cy5nZXRyZWZjb3VudChzZWxmLnByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChnYy5nZXRfcmVmZXJyZXJzKHNlbGYucHJvdG9jb2wpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc3lzLmdldHJlZmNvdW50KHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZ2MuZ2V0X3JlZmVycmVycyhzZWxmLmxvb3ApKSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisKKyAgICAgICAgdHIud3JpdGVfZW9mID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci53cml0ZV9lb2YuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLndyaXRlX2VvZi5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gdW5peF9ldmVudHMuX1VuaXhXcml0ZVBpcGVUcmFuc3BvcnQoCisgICAgICAgICAgICBzZWxmLmxvb3AsIHNlbGYucGlwZSwgc2VsZi5wcm90b2NvbCkKKworICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2Nsb3NpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9wZW5kaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHVuaXhfZXZlbnRzLl9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnBpcGUsIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9jbG9zaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworCitjbGFzcyBBYnN0cmFjdENoaWxkV2F0Y2hlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgZiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHdhdGNoZXIgPSB1bml4X2V2ZW50cy5BYnN0cmFjdENoaWxkV2F0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlciwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuYXR0YWNoX2xvb3AsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLl9fZW50ZXJfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLl9fZXhpdF9fLCBmLCBmLCBmKQorCisKK2NsYXNzIEJhc2VDaGlsZFdhdGNoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICB3YXRjaGVyID0gdW5peF9ldmVudHMuQmFzZUNoaWxkV2F0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fZG9fd2FpdHBpZCwgZikKKworCitXYWl0UGlkTW9ja3MgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCJXYWl0UGlkTW9ja3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIndhaXRwaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJRkVYSVRFRCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0lGU0lHTkFMRUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldFWElUU1RBVFVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXVEVSTVNJRyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorCisKK2NsYXNzIENoaWxkV2F0Y2hlclRlc3RzTWl4aW46CisKKyAgICBpZ25vcmVfd2FybmluZ3MgPSB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCh1bml4X2V2ZW50cy5sb2dnZXIsICJ3YXJuaW5nIikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuem9tYmllcyA9IHt9CisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBzZWxmLm1fYWRkX3NpZ25hbF9oYW5kbGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyID0gc2VsZi5jcmVhdGVfd2F0Y2hlcigpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHdhaXRwaWQoc2VsZiwgcGlkLCBmbGFncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCB1bml4X2V2ZW50cy5TYWZlQ2hpbGRXYXRjaGVyKSBvciBwaWQgIT0gLTE6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocGlkLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBwaWQgPCAwOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnpvbWJpZXMucG9waXRlbSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBwaWQsIHNlbGYuem9tYmllcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYucnVubmluZzoKKyAgICAgICAgICAgIHJldHVybiAwLCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBDaGlsZFByb2Nlc3NFcnJvcigpCisKKyAgICBkZWYgYWRkX3pvbWJpZShzZWxmLCBwaWQsIHJldHVybmNvZGUpOgorICAgICAgICBzZWxmLnpvbWJpZXNbcGlkXSA9IHJldHVybmNvZGUgKyAzMjc2OAorCisgICAgZGVmIFdJRkVYSVRFRChzZWxmLCBzdGF0dXMpOgorICAgICAgICByZXR1cm4gc3RhdHVzID49IDMyNzY4CisKKyAgICBkZWYgV0lGU0lHTkFMRUQoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgcmV0dXJuIDMyNzAwIDwgc3RhdHVzIDwgMzI3NjgKKworICAgIGRlZiBXRVhJVFNUQVRVUyhzZWxmLCBzdGF0dXMpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5XSUZFWElURUQoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIHN0YXR1cyAtIDMyNzY4CisKKyAgICBkZWYgV1RFUk1TSUcoc2VsZiwgc3RhdHVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuV0lGU0lHTkFMRUQoc3RhdHVzKSkKKyAgICAgICAgcmV0dXJuIDMyNzY4IC0gc3RhdHVzCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgc2VsZi5tX2FkZF9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIHNpZ25hbC5TSUdDSExELCBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKQorCisgICAgZGVmIHdhaXRwaWRfbW9ja3MoZnVuYyk6CisgICAgICAgIGRlZiB3cmFwcGVkX2Z1bmMoc2VsZik6CisgICAgICAgICAgICBkZWYgcGF0Y2godGFyZ2V0LCB3cmFwcGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdW5pdHRlc3QubW9jay5wYXRjaCh0YXJnZXQsIHdyYXBzPXdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2NhbGxhYmxlPXVuaXR0ZXN0Lm1vY2suTW9jaykKKworICAgICAgICAgICAgd2l0aCBwYXRjaCgnb3MuV1RFUk1TSUcnLCBzZWxmLldURVJNU0lHKSBhcyBtX1dURVJNU0lHLCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XRVhJVFNUQVRVUycsIHNlbGYuV0VYSVRTVEFUVVMpIGFzIG1fV0VYSVRTVEFUVVMsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldJRlNJR05BTEVEJywgc2VsZi5XSUZTSUdOQUxFRCkgYXMgbV9XSUZTSUdOQUxFRCwgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0lGRVhJVEVEJywgc2VsZi5XSUZFWElURUQpIGFzIG1fV0lGRVhJVEVELCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy53YWl0cGlkJywgc2VsZi53YWl0cGlkKSBhcyBtX3dhaXRwaWQ6CisgICAgICAgICAgICAgICAgZnVuYyhzZWxmLCBXYWl0UGlkTW9ja3MobV93YWl0cGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV0lGRVhJVEVELCBtX1dJRlNJR05BTEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fV0VYSVRTVEFUVVMsIG1fV1RFUk1TSUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZWRfZnVuYworCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQyLCBjYWxsYmFjaywgOSwgMTAsIDE0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIGlzIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAocmV0dXJuY29kZSAxMikKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQyLCAxMikKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MiwgMTIsIDksIDEwLCAxNCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MiwgMTMpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQgY2FsbGVkIGFnYWluCisgICAgICAgIHNlbGYuem9tYmllcy5jbGVhcigpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF90d29fY2hpbGRyZW4oc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAxCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQzLCBjYWxsYmFjazEsIDcsIDgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGQgMgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig0NCwgY2FsbGJhY2syLCAxNDcsIDE4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkZW4gYXJlIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzIChzaWduYWwgMykKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQzLCAtMykKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2sxLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQzLCAtMywgNywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorCisgICAgICAgICMgY2hpbGQgMiBzdGlsbCBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDIgdGVybWluYXRlcyAoY29kZSAxMDgpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NCwgMTA4KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDQsIDEwOCwgMTQ3LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MywgMTQpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NCwgMTUpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQgY2FsbGVkIGFnYWluCisgICAgICAgIHNlbGYuem9tYmllcy5jbGVhcigpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF90d29fY2hpbGRyZW5fdGVybWluYXRpbmdfdG9nZXRoZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAxCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ1LCBjYWxsYmFjazEsIDE3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDIKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDYsIGNhbGxiYWNrMiwgMTE0NywgMTgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGRlbiBhcmUgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMgKGNvZGUgNzgpCisgICAgICAgICMgY2hpbGQgMiB0ZXJtaW5hdGVzIChzaWduYWwgNSkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ1LCA3OCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQ2LCAtNSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2sxLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQ1LCA3OCwgMTcsIDgpCisgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NiwgLTUsIDExNDcsIDE4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldURVJNU0lHLnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazEucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NSwgMTQpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NiwgMTUpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9yYWNlX2NvbmRpdGlvbihzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyBiZWZvcmUgYmVpbmcgcmVnaXN0ZXJlZAorICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDUwLCA0KQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MCwgY2FsbGJhY2ssIDEsIDEyKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUwLCA0LCAxLCAxMikKKyAgICAgICAgY2FsbGJhY2sucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MCwgLTEpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF9yZXBsYWNlX2hhbmRsZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUxLCBjYWxsYmFjazEsIDE5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIHRoZSBzYW1lIGNoaWxkIGFnYWluCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUxLCBjYWxsYmFjazIsIDIxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgKHNpZ25hbCA4KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTEsIC04KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTEsIC04LCAyMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTEsIDEzKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmVtb3ZlX2hhbmRsZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTIsIGNhbGxiYWNrLCAxOTg0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHVucmVnaXN0ZXIgdGhlIGNoaWxkCisgICAgICAgIHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1MikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChjb2RlIDk5KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTIsIDk5KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5rbm93bl9zdGF0dXMoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTMsIGNhbGxiYWNrLCAtMTkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgdGVybWluYXRlIHdpdGggdW5rbm93biBzdGF0dXMKKyAgICAgICAgc2VsZi56b21iaWVzWzUzXSA9IDExNzgKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTMsIDExNzgsIC0xOSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUzLCAxMDEpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3RfcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMyA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZHJlbgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NCwgY2FsbGJhY2sxLCAxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU1LCBjYWxsYmFjazIsIDIpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTYsIGNhbGxiYWNrMywgMykKKworICAgICAgICAjIHJlbW92ZSBjaGlsZCBoYW5kbGVyIDEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NCkpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQgaGFuZGxlciAyIG11bHRpcGxlIHRpbWVzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKworICAgICAgICAjIGFsbCBjaGlsZHJlbiB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU0LCAwKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTUsIDEpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NiwgMikKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBjYWxsYmFjazMuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTYsIDIsIDMpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfdW5oYW5kbGVkX2V4Y2VwdGlvbihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NywgY2FsbGJhY2spCisKKyAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgbS53YWl0cGlkLnNpZGVfZWZmZWN0ID0gVmFsdWVFcnJvcgorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QodW5peF9ldmVudHMubG9nZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb24iKSBhcyBtX2V4Y2VwdGlvbjoKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobV9leGNlcHRpb24uY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX2NoaWxkX3JlYXBlZF9lbHNld2hlcmUoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTgsIGNhbGxiYWNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU4LCA0KQorCisgICAgICAgICMgd2FpdHBpZCBpcyBjYWxsZWQgZWxzZXdoZXJlCisgICAgICAgIG9zLndhaXRwaWQoNTgsIG9zLldOT0hBTkcpCisKKyAgICAgICAgbS53YWl0cGlkLnJlc2V0X21vY2soKQorCisgICAgICAgICMgc2lnY2hsZAorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZChtLndhaXRwaWQpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCB1bml4X2V2ZW50cy5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICMgaGVyZSB0aGUgRmFzdENoaWxkV2F0Y2hlIGVudGVycyBhIGRlYWRsb2NrCisgICAgICAgICAgICAjICh0aGVyZSBpcyBubyB3YXkgdG8gcHJldmVudCBpdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTgsIDI1NSkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF91bmtub3duX3BpZF9kdXJpbmdfcmVnaXN0cmF0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIHR3byBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3MsIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTkxLCA3KQorICAgICAgICAgICAgIyBhbiB1bmtub3duIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1OTMsIDE3KQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU5MSwgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU5MiwgY2FsbGJhY2syKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1OTEsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2V0X2xvb3Aoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjAsIGNhbGxiYWNrKQorCisgICAgICAgICMgYXR0YWNoIGEgbmV3IGxvb3AKKyAgICAgICAgb2xkX2xvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gdGVzdF91dGlscy5UZXN0TG9vcCgpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBvbGRfbG9vcCwKKyAgICAgICAgICAgICAgICAicmVtb3ZlX3NpZ25hbF9oYW5kbGVyIikgYXMgbV9vbGRfcmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBcCisgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLAorICAgICAgICAgICAgICAgICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX25ld19hZGRfc2lnbmFsX2hhbmRsZXI6CisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisKKyAgICAgICAgICAgIG1fb2xkX3JlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCkKKyAgICAgICAgICAgIG1fbmV3X2FkZF9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYwLCA5KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MCwgOSkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2V0X2xvb3BfcmFjZV9jb25kaXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgMyBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazMgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYxLCBjYWxsYmFjazEpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjIsIGNhbGxiYWNrMikKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MjIsIGNhbGxiYWNrMykKKworICAgICAgICAjIGRldGFjaCB0aGUgbG9vcAorICAgICAgICBvbGRfbG9vcCA9IHNlbGYubG9vcAorICAgICAgICBzZWxmLmxvb3AgPSBOb25lCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBvbGRfbG9vcCwgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3AoTm9uZSkKKworICAgICAgICAgICAgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisKKyAgICAgICAgIyBjaGlsZCAxICYgMiB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYxLCAxMSkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYyLCAtNSkKKworICAgICAgICAjIFNJR0NITEQgd2FzIG5vdCBjYXRjaGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMy5jYWxsZWQpCisKKyAgICAgICAgIyBhdHRhY2ggYSBuZXcgbG9vcAorICAgICAgICBzZWxmLmxvb3AgPSB0ZXN0X3V0aWxzLlRlc3RMb29wKCkKKworICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgIHNlbGYubG9vcCwgImFkZF9zaWduYWxfaGFuZGxlciIpIGFzIG1fYWRkX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgICAgICAgICBtX2FkZF9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKyAgICAgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MSwgMTEpICAjIHJhY2UgY29uZGl0aW9uIQorICAgICAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYyLCAtNSkgICMgcmFjZSBjb25kaXRpb24hCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMy5jYWxsZWQpCisKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBjaGlsZCAzIHRlcm1pbmF0ZXMKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYyMiwgMTkpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBjYWxsYmFjazMuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjIyLCAxOSkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgdHdvIGNoaWxkcmVuCisgICAgICAgIGNhbGxiYWNrMSA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAjIGNoaWxkIDEgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDYzLCA5KQorICAgICAgICAgICAgIyBvdGhlciBjaGlsZCB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNjUsIDE4KQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MywgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDY0LCBjYWxsYmFjazEpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYud2F0Y2hlci5fY2FsbGJhY2tzKSwgMSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCB1bml4X2V2ZW50cy5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX3pvbWJpZXMpLCAxKQorCisgICAgICAgICAgICB3aXRoIHVuaXR0ZXN0Lm1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AsCisgICAgICAgICAgICAgICAgICAgICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgICAgIHNlbGYud2F0Y2hlci5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBtX3JlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIuX2NhbGxiYWNrcykKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi53YXRjaGVyLl96b21iaWVzKQorCisKK2NsYXNzIFNhZmVDaGlsZFdhdGNoZXJUZXN0cyAoQ2hpbGRXYXRjaGVyVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjcmVhdGVfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIoKQorCisKK2NsYXNzIEZhc3RDaGlsZFdhdGNoZXJUZXN0cyAoQ2hpbGRXYXRjaGVyVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjcmVhdGVfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIoKQorCisKK2NsYXNzIFBvbGljeVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjcmVhdGVfcG9saWN5KHNlbGYpOgorICAgICAgICByZXR1cm4gdW5peF9ldmVudHMuRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hpbGRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll93YXRjaGVyKQorCisgICAgICAgIHdhdGNoZXIgPSBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod2F0Y2hlciwgdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcikKKworICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fd2F0Y2hlciwgd2F0Y2hlcikKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YXRjaGVyLl9sb29wKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfYWZ0ZXJfc2V0KHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBzZWxmLmNyZWF0ZV9wb2xpY3koKQorICAgICAgICB3YXRjaGVyID0gdW5peF9ldmVudHMuRmFzdENoaWxkV2F0Y2hlcigpCisKKyAgICAgICAgcG9saWN5LnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll93YXRjaGVyLCB3YXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIsIHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfd2l0aF9tYWlubG9vcF9leGlzdGluZyhzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll93YXRjaGVyKQorICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod2F0Y2hlciwgdW5peF9ldmVudHMuU2FmZUNoaWxkV2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBsb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfdGhyZWFkKHNlbGYpOgorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AocG9saWN5Lm5ld19ldmVudF9sb29wKCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHMuQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgICAgICB3YXRjaGVyID0gcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YXRjaGVyLl9sb29wKQorCisgICAgICAgICAgICBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKS5jbG9zZSgpCisKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKworICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBkZWYgdGVzdF9jaGlsZF93YXRjaGVyX3JlcGxhY2VfbWFpbmxvb3BfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHdhdGNoZXIgPSBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbG9vcCkKKworICAgICAgICBuZXdfbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChuZXdfbG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIG5ld19sb29wKQorCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgTm9uZSkKKworICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgbmV3X2xvb3AuY2xvc2UoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTMzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weQpAQCAtMCwwICsxLDEzOSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mgb25seScpCisKK2ltcG9ydCBfd2luYXBpCisKK2ltcG9ydCBhc3luY2lvCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c19ldmVudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgZnV0dXJlcworZnJvbSBhc3luY2lvIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgc3RyZWFtcworZnJvbSBhc3luY2lvIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgX292ZXJsYXBwZWQKKworCitjbGFzcyBVcHBlclByb3RvKHByb3RvY29scy5Qcm90b2NvbCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmJ1ZiA9IFtdCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zKToKKyAgICAgICAgc2VsZi50cmFucyA9IHRyYW5zCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5idWYuYXBwZW5kKGRhdGEpCisgICAgICAgIGlmIGInXG4nIGluIGRhdGE6CisgICAgICAgICAgICBzZWxmLnRyYW5zLndyaXRlKGInJy5qb2luKHNlbGYuYnVmKS51cHBlcigpKQorICAgICAgICAgICAgc2VsZi50cmFucy5jbG9zZSgpCisKKworY2xhc3MgUHJvYWN0b3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHdpbmRvd3NfZXZlbnRzLlByb2FjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AgPSBOb25lCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgYSwgYiA9IHNlbGYubG9vcC5fc29ja2V0cGFpcigpCisgICAgICAgIHRyYW5zID0gc2VsZi5sb29wLl9tYWtlX3NvY2tldF90cmFuc3BvcnQoYSwgcHJvdG9jb2xzLlByb3RvY29sKCkpCisgICAgICAgIGYgPSBhc3luY2lvLmFzeW5jKHNlbGYubG9vcC5zb2NrX3JlY3YoYiwgMTAwKSkKKyAgICAgICAgdHJhbnMuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZXN1bHQoKSwgYicnKQorCisgICAgZGVmIHRlc3RfZG91YmxlX2JpbmQoc2VsZik6CisgICAgICAgIEFERFJFU1MgPSByJ1xcLlxwaXBlXHRlc3RfZG91YmxlX2JpbmQtJXMnICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgc2VydmVyMSA9IHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIoQUREUkVTUykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IpOgorICAgICAgICAgICAgc2VydmVyMiA9IHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIoQUREUkVTUykKKyAgICAgICAgc2VydmVyMS5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9waXBlKHNlbGYpOgorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbGYuX3Rlc3RfcGlwZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ2RvbmUnKQorCisgICAgZGVmIF90ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIEFERFJFU1MgPSByJ1xcLlxwaXBlXF90ZXN0X3BpcGUtJXMnICUgb3MuZ2V0cGlkKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlByb3RvY29sLCBBRERSRVNTKQorCisgICAgICAgIFtzZXJ2ZXJdID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3RhcnRfc2VydmluZ19waXBlKAorICAgICAgICAgICAgVXBwZXJQcm90bywgQUREUkVTUykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlcnZlciwgd2luZG93c19ldmVudHMuUGlwZVNlcnZlcikKKworICAgICAgICBjbGllbnRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzdHJlYW1fcmVhZGVyID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm90b2NvbCA9IHN0cmVhbXMuU3RyZWFtUmVhZGVyUHJvdG9jb2woc3RyZWFtX3JlYWRlcikKKyAgICAgICAgICAgIHRyYW5zLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgQUREUkVTUykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFucywgdHJhbnNwb3J0cy5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvY29sLCBwcm90bykKKyAgICAgICAgICAgIGNsaWVudHMuYXBwZW5kKChzdHJlYW1fcmVhZGVyLCB0cmFucykpCisKKyAgICAgICAgZm9yIGksIChyLCB3KSBpbiBlbnVtZXJhdGUoY2xpZW50cyk6CisgICAgICAgICAgICB3LndyaXRlKCdsb3dlci17fVxuJy5mb3JtYXQoaSkuZW5jb2RlKCkpCisKKyAgICAgICAgZm9yIGksIChyLCB3KSBpbiBlbnVtZXJhdGUoY2xpZW50cyk6CisgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGZyb20gci5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLCAnTE9XRVIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorICAgICAgICAgICAgdy5jbG9zZSgpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlByb3RvY29sLCBBRERSRVNTKQorCisgICAgICAgIHJldHVybiAnZG9uZScKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX2hhbmRsZShzZWxmKToKKyAgICAgICAgZXZlbnQgPSBfb3ZlcmxhcHBlZC5DcmVhdGVFdmVudChOb25lLCBUcnVlLCBGYWxzZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF93aW5hcGkuQ2xvc2VIYW5kbGUsIGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgdW5zZXQgZXZlbnQgd2l0aCAwLjJzIHRpbWVvdXQ7CisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSBGYWxzZSBhdCB0aW1lb3V0CisgICAgICAgIGYgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMC4yKQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBlbGFwc2VkID0gc2VsZi5sb29wLnRpbWUoKSAtIHN0YXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMTggPCBlbGFwc2VkIDwgMC41LCBlbGFwc2VkKQorCisgICAgICAgIF9vdmVybGFwcGVkLlNldEV2ZW50KGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgZm9yIHNldCBldmVudDsKKyAgICAgICAgIyByZXN1bHQgc2hvdWxkIGJlIFRydWUgaW1tZWRpYXRlbHkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50LCAxMCkKKyAgICAgICAgc3RhcnQgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gZWxhcHNlZCA8IDAuMDIsIGVsYXBzZWQpCisKKyAgICAgICAgX292ZXJsYXBwZWQuUmVzZXRFdmVudChldmVudCkKKworICAgICAgICAjIFdhaXQgZm9yIHVuc2V0IGV2ZW50IHdpdGggYSBjYW5jZWxsZWQgZnV0dXJlOworICAgICAgICAjIENhbmNlbGxlZEVycm9yIHNob3VsZCBiZSByYWlzZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50LCAxMCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzdGFydCA9IHNlbGYubG9vcC50aW1lKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgZWxhcHNlZCA9IHNlbGYubG9vcC50aW1lKCkgLSBzdGFydAorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSBlbGFwc2VkIDwgMC4wMiwgZWxhcHNlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c191dGlscy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5ZDY2YwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkKQEAgLTAsMCArMSwxNDEgQEAKKyIiIlRlc3RzIGZvciB3aW5kb3dfdXRpbHMiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworCitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cyBvbmx5JykKKworaW1wb3J0IF93aW5hcGkKKworZnJvbSBhc3luY2lvIGltcG9ydCB3aW5kb3dzX3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCisKKworY2xhc3MgV2luc29ja2V0cGFpclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3dpbnNvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNzb2NrLCBjc29jayA9IHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcigpCisKKyAgICAgICAgY3NvY2suc2VuZChiJ3h4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYid4eHgnLCBzc29jay5yZWN2KDEwMjQpKQorCisgICAgICAgIGNzb2NrLmNsb3NlKCkKKyAgICAgICAgc3NvY2suY2xvc2UoKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ2FzeW5jaW8ud2luZG93c191dGlscy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X3dpbnNvY2tldHBhaXJfZXhjKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5nZXRzb2NrbmFtZS5yZXR1cm5fdmFsdWUgPSAoJycsIDEyMzQ1KQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBvYmplY3QoKSwgb2JqZWN0KCkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZS5jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZG93c191dGlscy5zb2NrZXRwYWlyKQorCisKK2NsYXNzIFBpcGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9waXBlX292ZXJsYXBwZWQoc2VsZik6CisgICAgICAgIGgxLCBoMiA9IHdpbmRvd3NfdXRpbHMucGlwZShvdmVybGFwcGVkPShUcnVlLCBUcnVlKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3YxID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIDApCisKKyAgICAgICAgICAgIG92MS5SZWFkRmlsZShoMSwgMTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG92MS5wZW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdjEuZXJyb3IsIF93aW5hcGkuRVJST1JfSU9fUEVORElORykKKyAgICAgICAgICAgIEVSUk9SX0lPX0lOQ09NUExFVEUgPSA5OTYKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdjEuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JT19JTkNPTVBMRVRFKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkIEVSUk9SX0lPX0lOQ09NUExFVEUnKQorCisgICAgICAgICAgICBvdjIgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YyLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92Mi5lcnJvciwgMCkKKworICAgICAgICAgICAgb3YyLldyaXRlRmlsZShoMiwgYiJoZWxsbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG92Mi5lcnJvciwgezAsIF93aW5hcGkuRVJST1JfSU9fUEVORElOR30pCisKKyAgICAgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvck11bHRpcGxlT2JqZWN0cyhbb3YyLmV2ZW50XSwgRmFsc2UsIDEwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBfd2luYXBpLldBSVRfT0JKRUNUXzApCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgRVJST1JfSU9fSU5DT01QTEVURSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YyLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG92Mi5lcnJvciwgezAsIF93aW5hcGkuRVJST1JfSU9fUEVORElOR30pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5nZXRyZXN1bHQoKSwgYiJoZWxsbyIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgxKQorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShoMikKKworICAgIGRlZiB0ZXN0X3BpcGVfaGFuZGxlKHNlbGYpOgorICAgICAgICBoLCBfID0gd2luZG93c191dGlscy5waXBlKG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpKQorICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKF8pCisgICAgICAgIHAgPSB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmZpbGVubygpLCBoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaGFuZGxlLCBoKQorCisgICAgICAgICMgY2hlY2sgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIHAgY2xvc2VzIGhhbmRsZQorICAgICAgICBkZWwgcAorICAgICAgICB0ZXN0LnN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS53aW5lcnJvciwgNikgICAgICMgRVJST1JfSU5WQUxJRF9IQU5ETEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZXhwZWN0ZWQgRVJST1JfSU5WQUxJRF9IQU5ETEUnKQorCisKK2NsYXNzIFBvcGVuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcG9wZW4oc2VsZik6CisgICAgICAgIGNvbW1hbmQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIHMgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzLnVwcGVyKCkpCisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdzdGRlcnInKQorICAgICAgICAgICAgIiIiCisgICAgICAgIG1zZyA9IGIiYmxhaFxuIgorCisgICAgICAgIHAgPSB3aW5kb3dzX3V0aWxzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29tbWFuZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXdpbmRvd3NfdXRpbHMuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXdpbmRvd3NfdXRpbHMuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXdpbmRvd3NfdXRpbHMuUElQRSkKKworICAgICAgICBmb3IgZiBpbiBbcC5zdGRpbiwgcC5zdGRvdXQsIHAuc3RkZXJyXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUpCisKKyAgICAgICAgb3ZpbiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICBvdm91dCA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICBvdmVyciA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorCisgICAgICAgIG92aW4uV3JpdGVGaWxlKHAuc3RkaW4uaGFuZGxlLCBtc2cpCisgICAgICAgIG92b3V0LlJlYWRGaWxlKHAuc3Rkb3V0LmhhbmRsZSwgMTAwKQorICAgICAgICBvdmVyci5SZWFkRmlsZShwLnN0ZGVyci5oYW5kbGUsIDEwMCkKKworICAgICAgICBldmVudHMgPSBbb3Zpbi5ldmVudCwgb3ZvdXQuZXZlbnQsIG92ZXJyLmV2ZW50XQorICAgICAgICAjIFN1cGVyLWxvbmcgdGltZW91dCBmb3Igc2xvdyBidWlsZGJvdHMuCisgICAgICAgIHJlcyA9IF93aW5hcGkuV2FpdEZvck11bHRpcGxlT2JqZWN0cyhldmVudHMsIFRydWUsIDEwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgX3dpbmFwaS5XQUlUX09CSkVDVF8wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92b3V0LnBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3ZlcnIucGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdmluLnBlbmRpbmcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdmluLmdldHJlc3VsdCgpLCBsZW4obXNnKSkKKyAgICAgICAgb3V0ID0gb3ZvdXQuZ2V0cmVzdWx0KCkucnN0cmlwKCkKKyAgICAgICAgZXJyID0gb3ZlcnIuZ2V0cmVzdWx0KCkucnN0cmlwKCkKKworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKG91dCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oZXJyKSwgMCkKKyAgICAgICAgIyBhbGxvdyBmb3IgcGFydGlhbCByZWFkcy4uLgorICAgICAgICBzZWxmLmFzc2VydFRydWUobXNnLnVwcGVyKCkucnN0cmlwKCkuc3RhcnRzd2l0aChvdXQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJzdGRlcnIiLnN0YXJ0c3dpdGgoZXJyKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RzLnR4dCBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2MDljZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0cy50eHQKQEAgLTAsMCArMSwxMyBAQAordGVzdF9hc3luY2lvLnRlc3RfYmFzZV9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X2V2ZW50cwordGVzdF9hc3luY2lvLnRlc3RfZnV0dXJlcwordGVzdF9hc3luY2lvLnRlc3RfbG9ja3MKK3Rlc3RfYXN5bmNpby50ZXN0X3Byb2FjdG9yX2V2ZW50cwordGVzdF9hc3luY2lvLnRlc3RfcXVldWVzCit0ZXN0X2FzeW5jaW8udGVzdF9zZWxlY3Rvcl9ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3N0cmVhbXMKK3Rlc3RfYXN5bmNpby50ZXN0X3Rhc2tzCit0ZXN0X2FzeW5jaW8udGVzdF90cmFuc3BvcnRzCit0ZXN0X2FzeW5jaW8udGVzdF91bml4X2V2ZW50cwordGVzdF9hc3luY2lvLnRlc3Rfd2luZG93c19ldmVudHMKK3Rlc3RfYXN5bmNpby50ZXN0X3dpbmRvd3NfdXRpbHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CmluZGV4IDVkMDYzMmUuLjA4NGQyNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQpAQCAtMTksNiArMTksNyBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAorVElNRU9VVCA9IDMKIEhBU19VTklYX1NPQ0tFVFMgPSBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKQogCiBjbGFzcyBkdW1teXNvY2tldDoKQEAgLTM5NSw3ICszOTYsMTAgQEAKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXAuZ2V0dmFsdWUoKSwgZGF0YSoyKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIHQuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgICAgICBpZiB0LmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKwogCiAKIGNsYXNzIERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzX1VzZVBvbGwoRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHMpOgpAQCAtNzQwLDcgKzc0NCwxMiBAQAogICAgICAgICBzLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQuZmFtaWx5LCBzZWxmLmZhbWlseSkKICAgICAgICAgU09DS19OT05CTE9DSyA9IGdldGF0dHIoc29ja2V0LCAnU09DS19OT05CTE9DSycsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSykKKyAgICAgICAgc29ja190eXBlID0gc29ja2V0LlNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSworICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzLnNvY2tldC50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja190eXBlIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQywgc29ja190eXBlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQudHlwZSwgc29ja190eXBlKQogCiAgICAgZGVmIHRlc3RfYmluZChzZWxmKToKICAgICAgICAgaWYgSEFTX1VOSVhfU09DS0VUUyBhbmQgc2VsZi5mYW1pbHkgPT0gc29ja2V0LkFGX1VOSVg6CkBAIC03NTQsNyArNzYzLDcgQEAKICAgICAgICAgczIgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKICAgICAgICAgczIuY3JlYXRlX3NvY2tldChzZWxmLmZhbWlseSkKICAgICAgICAgIyBFQUREUklOVVNFIGluZGljYXRlcyB0aGUgc29ja2V0IHdhcyBjb3JyZWN0bHkgYm91bmQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzMi5iaW5kLCAoc2VsZi5hZGRyWzBdLCBwb3J0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCiAKICAgICBkZWYgdGVzdF9zZXRfcmV1c2VfYWRkcihzZWxmKToKICAgICAgICAgaWYgSEFTX1VOSVhfU09DS0VUUyBhbmQgc2VsZi5mYW1pbHkgPT0gc29ja2V0LkFGX1VOSVg6CkBAIC03NjIsNyArNzcxLDcgQEAKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICB1bml0dGVzdC5za2lwKCJTT19SRVVTRUFERFIgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgaWYgU09fUkVVU0VBRERSIHN1Y2NlZWRlZCBmb3Igc29jayB3ZSBleHBlY3QgYXN5bmNvcmUKQEAgLTc4Nyw3ICs3OTYsMTEgQEAKICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGE6IGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50PTUwMCkpCiAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0LmpvaW4pCisgICAgICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgICAgIHQuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCiAKICAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5LCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgICAgICBzLnNldHRpbWVvdXQoLjIpCkBAIC03OTUsNyArODA4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygnaWknLCAxLCAwKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3Qoc2VydmVyLmFkZHJlc3MpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXRleGl0LnB5IGIvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKaW5kZXggMzBjM2I0YS4uODQ2NDRmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkKQEAgLTIsNiArMiw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBpbwogaW1wb3J0IGF0ZXhpdAoraW1wb3J0IF90ZXN0Y2FwaQogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKICMjIyBoZWxwZXJzCkBAIC0yMyw3ICsyNCw5IEBACiBkZWYgcmFpc2UyKCk6CiAgICAgcmFpc2UgU3lzdGVtRXJyb3IKIAotY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBHZW5lcmFsVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHNlbGYuc2F2ZV9zdGRlcnIgPSBzeXMuc3RkZXJyCkBAIC0xNDEsOCArMTQ0LDQzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgWzVdKQogCiAKK2NsYXNzIFN1YmludGVycHJldGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfbGVhayhzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3Qgc2hvd3MgYSBsZWFrIGluIHJlZmxlYWsgbW9kZSBpZiBhdGV4aXQgZG9lc24ndAorICAgICAgICAjIHRha2UgY2FyZSB0byBmcmVlIGNhbGxiYWNrcyBpbiBpdHMgcGVyLXN1YmludGVycHJldGVyIG1vZHVsZQorICAgICAgICAjIHN0YXRlLgorICAgICAgICBuID0gYXRleGl0Ll9uY2FsbGJhY2tzKCkKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZikKKyAgICAgICAgICAgIGRlbCBhdGV4aXQKKyAgICAgICAgICAgICIiIgorICAgICAgICByZXQgPSBzdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRleGl0Ll9uY2FsbGJhY2tzKCksIG4pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfbGVha19yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBTaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IHdpdGggYSByZWZjeWNsZSB0aHJvdWdoIHRoZSBhdGV4aXQKKyAgICAgICAgIyBtb2R1bGUuCisgICAgICAgIG4gPSBhdGV4aXQuX25jYWxsYmFja3MoKQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihmKQorICAgICAgICAgICAgYXRleGl0Ll9fYXRleGl0ID0gYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0ZXhpdC5fbmNhbGxiYWNrcygpLCBuKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2FzZSkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKaW5kZXggYTkyY2Y4Ny4uZDUwNzU0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQpAQCAtNSwxMyArNSwxOCBAQAogZGVmIHBhY2sod2lkdGgsIGRhdGEpOgogICAgIHJldHVybiBiJycuam9pbih2LnRvX2J5dGVzKHdpZHRoLCBzeXMuYnl0ZW9yZGVyLCBzaWduZWQ9VHJ1ZSkgZm9yIHYgaW4gZGF0YSkKIAotcGFja3MgPSB7dzogKGxhbWJkYSAqZGF0YSwgd2lkdGg9dzogcGFjayh3aWR0aCwgZGF0YSkpIGZvciB3IGluICgxLCAyLCA0KX0KLW1heHZhbHVlcyA9IHt3OiAoMSA8PCAoOCAqIHcgLSAxKSkgLSAxIGZvciB3IGluICgxLCAyLCA0KX0KLW1pbnZhbHVlcyA9IHt3OiAtMSA8PCAoOCAqIHcgLSAxKSBmb3IgdyBpbiAoMSwgMiwgNCl9CitkZWYgdW5wYWNrKHdpZHRoLCBkYXRhKToKKyAgICByZXR1cm4gW2ludC5mcm9tX2J5dGVzKGRhdGFbaTogaSArIHdpZHRoXSwgc3lzLmJ5dGVvcmRlciwgc2lnbmVkPVRydWUpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oZGF0YSksIHdpZHRoKV0KKworcGFja3MgPSB7dzogKGxhbWJkYSAqZGF0YSwgd2lkdGg9dzogcGFjayh3aWR0aCwgZGF0YSkpIGZvciB3IGluICgxLCAyLCAzLCA0KX0KK21heHZhbHVlcyA9IHt3OiAoMSA8PCAoOCAqIHcgLSAxKSkgLSAxIGZvciB3IGluICgxLCAyLCAzLCA0KX0KK21pbnZhbHVlcyA9IHt3OiAtMSA8PCAoOCAqIHcgLSAxKSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CiAKIGRhdGFzID0gewogICAgIDE6IGInXHgwMFx4MTJceDQ1XHhiYlx4N2ZceDgwXHhmZicsCiAgICAgMjogcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjcsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpLAorICAgIDM6IHBhY2tzWzNdKDAsIDB4MTIzNDU2LCAweDQ1Njc4OSwgLTB4NDU2Nzg5LCAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMSksCiAgICAgNDogcGFja3NbNF0oMCwgMHgxMjM0NTY3OCwgMHg0NTY3ODlhYiwgLTB4NDU2Nzg5YWIsCiAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0xKSwKIH0KQEAgLTE5LDYgKzI0LDcgQEAKIElOVkFMSURfREFUQSA9IFsKICAgICAoYidhYmMnLCAwKSwKICAgICAoYidhYmMnLCAyKSwKKyAgICAoYidhYicsIDMpLAogICAgIChiJ2FiYycsIDQpLAogXQogCkBAIC0yNiw4ICszMiwxMCBAQAogY2xhc3MgVGVzdEF1ZGlvb3AodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgocCg1KSwgdyksIDUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSwgLTgsIC0xKSwgdyksIDgpCkBAIC0zNiw5ICs0NCwxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChkYXRhc1t3XSwgdyksIC1taW52YWx1ZXNbd10pCiAKICAgICBkZWYgdGVzdF9taW5tYXgoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KGInJywgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KGJ5dGVhcnJheSgpLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgobWVtb3J5dmlldyhiJycpLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKSkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChwKDUpLCB3KSwgKDUsIDUpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChwKDUsIC04LCAtMSksIHcpLCAoLTgsIDUpKQpAQCAtNTAsMTYgKzYyLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW52YWx1ZXNbd10sIG1heHZhbHVlc1t3XSkpCiAKICAgICBkZWYgdGVzdF9tYXhwcChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKCpyYW5nZSgxMDApKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAocGFja3Nbd10oOSwgMTAsIDUsIDUsIDAsIDEpLCB3KSwgMTApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoZGF0YXNbd10sIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXh2YWx1ZXNbd10gLSBtaW52YWx1ZXNbd10pCiAKICAgICBkZWYgdGVzdF9hdmcoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKGInJywgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUpLCB3KSwgNSkKICAgICAgICAgICAgIHNlbGYgLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKHAoNSwgOCksIHcpLCA2KQpAQCAtNzQsMTcgKzkwLDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4NjAwMDAwMDApCiAKICAgICBkZWYgdGVzdF9hdmdwcChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGJ5dGVhcnJheSgpLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKCpyYW5nZSgxMDApKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAocGFja3Nbd10oOSwgMTAsIDUsIDUsIDAsIDEpLCB3KSwgMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1sxXSwgMSksIDE5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzJdLCAyKSwgNTA1MzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1szXSwgMyksIDEyOTM3MDk2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbNF0sIDQpLCAzMzExODk3MDAyKQogCiAgICAgZGVmIHRlc3Rfcm1zKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMocCgqcmFuZ2UoMTAwKSksIHcpLCA1NykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoYXVkaW9vcC5ybXMocChtYXh2YWx1ZXNbd10pICogNSwgdyksCkBAIC05MywxMSArMTE0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1taW52YWx1ZXNbd10sIGRlbHRhPTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMV0sIDEpLCA3NykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1syXSwgMiksIDIwMDAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzNdLCAzKSwgNTEyMDUyMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1s0XSwgNCksIDEzMTA4NTQxNTIpCiAKICAgICBkZWYgdGVzdF9jcm9zcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhiJycsIHcpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhieXRlYXJyYXkoKSwgdyksIC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKG1lbW9yeXZpZXcoYicnKSwgdyksIC0xKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgwLCAxLCAyKSwgdyksIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocCgxLCAyLCAtMywgLTQpLCB3KSwgMSkKQEAgLTEwNiwyMiArMTMwLDI5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MocChtaW52YWx1ZXNbd10sIG1heHZhbHVlc1t3XSksIHcpLCAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChiJycsIGInJywgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYnl0ZWFycmF5KCksIGJ5dGVhcnJheSgpLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChtZW1vcnl2aWV3KGInJyksIG1lbW9yeXZpZXcoYicnKSwgdyksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbd10sIGInXDAnICogbGVuKGRhdGFzW3ddKSwgdyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzFdLCBkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHgyNFx4N2ZceDgwXHg3Zlx4ODBceGZlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1syXSwgZGF0YXNbMl0sIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MjQ2OCwgMHg3ZmZmLCAtMHg4MDAwLCAweDdmZmYsIC0weDgwMDAsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1szXSwgZGF0YXNbM10sIDMpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MjQ2OGFjLCAweDdmZmZmZiwgLTB4ODAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbNF0sIGRhdGFzWzRdLCA0KSwKICAgICAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDI0NjhhY2YwLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0yKSkKIAogICAgIGRlZiB0ZXN0X2JpYXMoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBmb3IgYmlhcyBpbiAwLCAxLCAtMSwgMTI3LCAtMTI4LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhiJycsIHcsIGJpYXMpLCBiJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYnl0ZWFycmF5KCksIHcsIGJpYXMpLCBiJycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMobWVtb3J5dmlldyhiJycpLCB3LCBiaWFzKSwgYicnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1sxXSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAxXHgxM1x4NDZceGJjXHg4MFx4ODFceDAwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIC0xKSwKQEAgLTEzOCw2ICsxNjksMTcgQEAKICAgICAgICAgICAgICAgICBwYWNrc1syXSgtMSwgMHgxMjMzLCAweDQ1NjYsIC0weDQ1NjgsIDB4N2ZmZSwgMHg3ZmZmLCAtMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzJdLCAyLCAtMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAgZGF0YXNbMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAxKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgxLCAweDEyMzQ1NywgMHg0NTY3OGEsIC0weDQ1Njc4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MDAwMDAsIC0weDdmZmZmZiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzNdLCAzLCAtMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oLTEsIDB4MTIzNDU1LCAweDQ1Njc4OCwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZlLCAweDdmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMHg3ZmZmZmZmZiksCisgICAgICAgICAgICAgICAgcGFja3NbM10oLTEsIDB4MTIzNDU1LCAweDQ1Njc4OCwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZlLCAweDdmZmZmZiwgLTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTB4ODAwMDAwMDApLAorICAgICAgICAgICAgICAgIGRhdGFzWzNdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMSwgMHgxMjM0NTY3OSwgMHg0NTY3ODlhYywgLTB4NDU2Nzg5YWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwMDAsIC0weDdmZmZmZmZmLCAwKSkKQEAgLTE1Miw5OSArMTk0LDE0MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCAweDdmZmZmZmZmKSkKIAogICAgIGRlZiB0ZXN0X2xpbjJsaW4oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1t3XSwgdywgdyksIGRhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oYnl0ZWFycmF5KGRhdGFzW3ddKSwgdywgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4obWVtb3J5dmlldyhkYXRhc1t3XSksIHcsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgMiksCiAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMDAsIDB4NDUwMCwgLTB4NDUwMCwgMHg3ZjAwLCAtMHg4MDAwLCAtMHgxMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1sxXSwgMSwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMDAwMCwgMHg0NTAwMDAsIC0weDQ1MDAwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2YwMDAwLCAtMHg4MDAwMDAsIC0weDEwMDAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDQpLAogICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjAwMDAwMCwgMHg0NTAwMDAwMCwgLTB4NDUwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMDAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwMDAwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCAxKSwKICAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIzNDAwLCAweDQ1NjcwMCwgLTB4NDU2NzAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmMDAsIC0weDgwMDAwMCwgLTB4MTAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMl0sIDIsIDQpLAogICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgxMjM0MDAwMCwgMHg0NTY3MDAwMCwgLTB4NDU2NzAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAweDdmZmYwMDAwLCAtMHg4MDAwMDAwMCwgLTB4MTAwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgMSksCisgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgMiksCisgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzNdLCAzLCA0KSwKKyAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIzNDU2MDAsIDB4NDU2Nzg5MDAsIC0weDQ1Njc4OTAwLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYwMCwgLTB4ODAwMDAwMDAsIC0weDEwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAxKSwKICAgICAgICAgICAgIGInXHgwMFx4MTJceDQ1XHhiYVx4N2ZceDgwXHhmZicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAyKSwKICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY4LCAweDdmZmYsIC0weDgwMDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbNF0sIDQsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjM0NTYsIDB4NDU2Nzg5LCAtMHg0NTY3OGEsCisgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZiwgLTB4ODAwMDAwLCAtMSkpCiAKICAgICBkZWYgdGVzdF9hZHBjbTJsaW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAxLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDAwXHgwMFx4MDBceGZmXHgwMFx4ZmYnLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihieXRlYXJyYXkoYidceDA3XHg3Zlx4N2YnKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4obWVtb3J5dmlldyhiJ1x4MDdceDdmXHg3ZicpLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDAwXHgwMFx4MDBceGZmXHgwMFx4ZmYnLCAoLTE3OSwgNDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDIsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1syXSgwLCAweGIsIDB4MjksIC0weDE2LCAweDcyLCAtMHhiMyksICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzNdKDAsIDB4YjAwLCAweDI5MDAsIC0weDE2MDAsIDB4NzIwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4YjMwMCksICgtMTc5LCA0MCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgNCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhY2tzWzRdKDAsIDB4YjAwMDAsIDB4MjkwMDAwLCAtMHgxNjAwMDAsIDB4NzIwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMHhiMzAwMDApLCAoLTE3OSwgNDApKSkKIAogICAgICAgICAjIFZlcnkgY3Vyc29yeSB0ZXN0Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXDAnICogNSwgdywgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1wwJyAqIHcgKiAxMCwgKDAsIDApKSkKIAogICAgIGRlZiB0ZXN0X2xpbjJhZHBjbShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1sxXSwgMSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMl0sIDIsIE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShkYXRhc1s0XSwgNCwgTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGJ5dGVhcnJheShkYXRhc1sxXSksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKG1lbW9yeXZpZXcoZGF0YXNbMV0pLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbd10sIHcsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCiAKICAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShiJ1wwJyAqIHcgKiAxMCwgdywgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1wwJyAqIDUsICgwLCAwKSkpCiAKICAgICBkZWYgdGVzdF9saW4yYWxhdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzFdLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbMl0sIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1s0XSwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGJ5dGVhcnJheShkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKKyAgICAgICAgZm9yIHcgaW4gMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1t3XSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1NScpCiAKICAgICBkZWYgdGVzdF9hbGF3MmxpbihzZWxmKToKICAgICAgICAgZW5jb2RlZCA9IGInXHgwMFx4MDNceDI0XHgyYVx4NTFceDU0XHg1NVx4NThceDZiXHg3MVx4N2YnXAogICAgICAgICAgICAgICAgICAgYidceDgwXHg4M1x4YTRceGFhXHhkMVx4ZDRceGQ1XHhkOFx4ZWJceGYxXHhmZicKICAgICAgICAgc3JjID0gWy02ODgsIC03MjAsIC0yMjQwLCAtNDAzMiwgLTksIC0zLCAtMSwgLTI3LCAtMjQ0LCAtODIsIC0xMDYsCiAgICAgICAgICAgICAgICA2ODgsIDcyMCwgMjI0MCwgNDAzMiwgOSwgMywgMSwgMjcsIDI0NCwgODIsIDEwNl0KLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTMgZm9yIHggaW4gc3JjKSkpCisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBkZWNvZGVkID0gcGFja3Nbd10oKih4IDw8ICh3ICogOCkgPj4gMTMgZm9yIHggaW4gc3JjKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hbGF3MmxpbihieXRlYXJyYXkoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKG1lbW9yeXZpZXcoZW5jb2RlZCksIHcpLCBkZWNvZGVkKQogCiAgICAgICAgIGVuY29kZWQgPSBieXRlcyhyYW5nZSgyNTYpKQotICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgogICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AuYWxhdzJsaW4oZW5jb2RlZCwgdykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKIAogICAgIGRlZiB0ZXN0X2xpbjJ1bGF3KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1syXSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzRdLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoYnl0ZWFycmF5KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KG1lbW9yeXZpZXcoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDdlJykKIAogICAgIGRlZiB0ZXN0X3VsYXcybGluKHNlbGYpOgogICAgICAgICBlbmNvZGVkID0gYidceDAwXHgwZVx4MjhceDNmXHg1N1x4NmFceDc2XHg3Y1x4N2VceDdmJ1wKICAgICAgICAgICAgICAgICAgIGInXHg4MFx4OGVceGE4XHhiZlx4ZDdceGVhXHhmNlx4ZmNceGZlXHhmZicKICAgICAgICAgc3JjID0gWy04MDMxLCAtNDQ0NywgLTE0NzEsIC00OTUsIC0xNjMsIC01MywgLTE4LCAtNiwgLTIsIDAsCiAgICAgICAgICAgICAgICA4MDMxLCA0NDQ3LCAxNDcxLCA0OTUsIDE2MywgNTMsIDE4LCA2LCAyLCAwXQotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxNCBmb3IgeCBpbiBzcmMpKSkKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKKyAgICAgICAgICAgIGRlY29kZWQgPSBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxNCBmb3IgeCBpbiBzcmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGVuY29kZWQsIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnVsYXcybGluKGJ5dGVhcnJheShlbmNvZGVkKSwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4obWVtb3J5dmlldyhlbmNvZGVkKSwgdyksIGRlY29kZWQpCiAKICAgICAgICAgIyBDdXJyZW50IHUtbGF3IGltcGxlbWVudGF0aW9uIGhhcyB0d28gY29kZXMgZm8gMDogMHg3ZiBhbmQgMHhmZi4KICAgICAgICAgZW5jb2RlZCA9IGJ5dGVzKHJhbmdlKDEyNykpICsgYnl0ZXMocmFuZ2UoMTI4LCAyNTYpKQotICAgICAgICBmb3IgdyBpbiAyLCA0OgorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgogICAgICAgICAgICAgZGVjb2RlZCA9IGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkZWNvZGVkLCB3KSwgZW5jb2RlZCkKIAogICAgIGRlZiB0ZXN0X211bChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoYicnLCB3LCAyKSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChieXRlYXJyYXkoKSwgdywgMiksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwobWVtb3J5dmlldyhiJycpLCB3LCAyKSwgYicnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1t3XSwgdywgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXDAnICogbGVuKGRhdGFzW3ddKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbd10sIHcsIDEpLApAQCAtMjUzLDE0ICszMzcsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4MDBceDI0XHg3Zlx4ODBceDdmXHg4MFx4ZmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzJdLCAyLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MjQ2OGFjLCAweDdmZmZmZiwgLTB4ODAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmLCAtMHg4MDAwMDAsIC0yKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsIC0yKSkKIAogICAgIGRlZiB0ZXN0X3JhdGVjdihzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0xLCAoKDAsIDApLCkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYnl0ZWFycmF5KCksIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihtZW1vcnl2aWV3KGInJyksIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDUsIDgwMDAsIDgwMDAsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSAqIDUpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoYicnLCB3LCAxLCA4MDAwLCAxNjAwMCwgTm9uZSksCkBAIC0yNzIsNyArMzYzLDcgQEAKICAgICAgICAgZDIsIHN0YXRlID0gYXVkaW9vcC5yYXRlY3YoYidceDAwXHgwMVx4MDInLCAxLCAxLCA4MDAwLCAxNjAwMCwgc3RhdGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEgKyBkMiwgYidcMDAwXDAwMFwwMDFcMDAxXDAwMlwwMDFcMDAwXDAwMFwwMDFcMDAxXDAwMicpCiAKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGQwLCBzdGF0ZTAgPSBhdWRpb29wLnJhdGVjdihkYXRhc1t3XSwgdywgMSwgODAwMCwgMTYwMDAsIE5vbmUpCiAgICAgICAgICAgICBkLCBzdGF0ZSA9IGInJywgTm9uZQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGFzW3ddKSwgdyk6CkBAIC0yODMsMTMgKzM3NCwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgc3RhdGUwKQogCiAgICAgZGVmIHRlc3RfcmV2ZXJzZShzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKGInJywgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKGJ5dGVhcnJheSgpLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UobWVtb3J5dmlldyhiJycpLCB3KSwgYicnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJldmVyc2UocGFja3Nbd10oMCwgMSwgMiksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgyLCAxLCAwKSkKIAogICAgIGRlZiB0ZXN0X3RvbW9ubyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGExID0gZGF0YXNbd10KICAgICAgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KDIgKiBsZW4oZGF0YTEpKQogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CkBAIC0yOTksOSArMzkyLDEzIEBACiAgICAgICAgICAgICBmb3IgayBpbiByYW5nZSh3KToKICAgICAgICAgICAgICAgICBkYXRhMltrK3c6OjIqd10gPSBkYXRhMVtrOjp3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvbW9ubyhkYXRhMiwgdywgMC41LCAwLjUpLCBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oYnl0ZWFycmF5KGRhdGEyKSwgdywgMC41LCAwLjUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8obWVtb3J5dmlldyhkYXRhMiksIHcsIDAuNSwgMC41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTEpCiAKICAgICBkZWYgdGVzdF90b3N0ZXJlbyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGExID0gZGF0YXNbd10KICAgICAgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KDIgKiBsZW4oZGF0YTEpKQogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CkBAIC0zMTEsMTQgKzQwOCwyNSBAQAogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CiAgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhkYXRhMSwgdywgMSwgMSksIGRhdGEyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnRvc3RlcmVvKGJ5dGVhcnJheShkYXRhMSksIHcsIDEsIDEpLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhtZW1vcnl2aWV3KGRhdGExKSwgdywgMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEyKQogCiAgICAgZGVmIHRlc3RfZmluZGZhY3RvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoZGF0YXNbMl0sIGRhdGFzWzJdKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihieXRlYXJyYXkoZGF0YXNbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoZGF0YXNbMl0pKSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihtZW1vcnl2aWV3KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhkYXRhc1syXSkpLCAxLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGInXDAnICogbGVuKGRhdGFzWzJdKSwgZGF0YXNbMl0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCkKIAogICAgIGRlZiB0ZXN0X2ZpbmRmaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KGRhdGFzWzJdLCBkYXRhc1syXSksICgwLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChieXRlYXJyYXkoZGF0YXNbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoZGF0YXNbMl0pKSwgKDAsIDEuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZml0KG1lbW9yeXZpZXcoZGF0YXNbMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGRhdGFzWzJdKSksICgwLCAxLjApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXSwgcGFja3NbMl0oMSwgMiwgMCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgxLCA4MDM4LjgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXVs6LTJdICogNSArIGRhdGFzWzJdLCBkYXRhc1syXSksCkBAIC0zMjYsMTYgKzQzNCwzNyBAQAogCiAgICAgZGVmIHRlc3RfZmluZG1heChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgoZGF0YXNbMl0sIDEpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZG1heChieXRlYXJyYXkoZGF0YXNbMl0pLCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgobWVtb3J5dmlldyhkYXRhc1syXSksIDEpLCA1KQogCiAgICAgZGVmIHRlc3RfZ2V0c2FtcGxlKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZGF0YSA9IHBhY2tzW3ddKDAsIDEsIC0xLCBtYXh2YWx1ZXNbd10sIG1pbnZhbHVlc1t3XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGJ5dGVhcnJheShkYXRhKSwgdywgMCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKG1lbW9yeXZpZXcoZGF0YSksIHcsIDApLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAxKSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMiksIC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCAzKSwgbWF4dmFsdWVzW3ddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShkYXRhLCB3LCA0KSwgbWludmFsdWVzW3ddKQogCisgICAgZGVmIHRlc3RfYnl0ZXN3YXAoc2VsZik6CisgICAgICAgIHN3YXBwZWRfZGF0YXMgPSB7CisgICAgICAgICAgICAxOiBkYXRhc1sxXSwKKyAgICAgICAgICAgIDI6IHBhY2tzWzJdKDAsIDB4MzQxMiwgMHg2NzQ1LCAtMHg2NjQ2LCAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICAgICAgMzogcGFja3NbM10oMCwgMHg1NjM0MTIsIC0weDc2OThiYiwgMHg3Nzk4YmEsIC0weDgxLCAweDgwLCAtMSksCisgICAgICAgICAgICA0OiBwYWNrc1s0XSgwLCAweDc4NTYzNDEyLCAtMHg1NDc2OThiYiwgMHg1NTc2OThiYSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0weDgxLCAweDgwLCAtMSksCisgICAgICAgIH0KKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YXNbd10sIHcpLCBzd2FwcGVkX2RhdGFzW3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKHN3YXBwZWRfZGF0YXNbd10sIHcpLCBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChieXRlYXJyYXkoZGF0YXNbd10pLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dhcHBlZF9kYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChtZW1vcnl2aWV3KGRhdGFzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZWRfZGF0YXNbd10pCisKICAgICBkZWYgdGVzdF9uZWdhdGl2ZWxlbihzZWxmKToKICAgICAgICAgIyBmcm9tIGlzc3VlIDMzMDYsIHByZXZpb3VzbHkgaXQgc2VnZmF1bHRlZAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLApAQCAtMzY1LDEwICs0OTQsMzMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AubGluMmFsYXcsIGRhdGEsIHNpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgZGF0YSwgc2l6ZSwgc3RhdGUpCiAKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSAnYWJjZCcKKyAgICAgICAgc2l6ZSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmdldHNhbXBsZSwgZGF0YSwgc2l6ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm1heCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm1pbm1heCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmF2ZywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnJtcywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmF2Z3BwLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubWF4cHAsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5jcm9zcywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm11bCwgZGF0YSwgc2l6ZSwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AudG9tb25vLCBkYXRhLCBzaXplLCAwLjUsIDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnRvc3RlcmVvLCBkYXRhLCBzaXplLCAwLjUsIDAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmFkZCwgZGF0YSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmJpYXMsIGRhdGEsIHNpemUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5yZXZlcnNlLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmxpbiwgZGF0YSwgc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnJhdGVjdiwgZGF0YSwgc2l6ZSwgMSwgMSwgMSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJ1bGF3LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmFsYXcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGRhdGEsIHNpemUsIE5vbmUpCisKICAgICBkZWYgdGVzdF93cm9uZ3NpemUoc2VsZik6CiAgICAgICAgIGRhdGEgPSBiJ2FiY2RlZmdoJwogICAgICAgICBzdGF0ZSA9IE5vbmUKLSAgICAgICAgZm9yIHNpemUgaW4gKC0xLCAwLCAzLCA1LCAxMDI0KToKKyAgICAgICAgZm9yIHNpemUgaW4gKC0xLCAwLCA1LCAxMDI0KToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AudWxhdzJsaW4sIGRhdGEsIHNpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmFsYXcybGluLCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hZHBjbTJsaW4sIGRhdGEsIHNpemUsIHN0YXRlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkgYi9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQppbmRleCAxMzY5NWRlLi5iOTczOGRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQpAQCAtNSwxMCArNSwyMSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcwotCitpbXBvcnQgc3RydWN0Citmcm9tIGFycmF5IGltcG9ydCBhcnJheQogCiAKIGNsYXNzIExlZ2FjeUJhc2U2NFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgTGVnYWN5IEFQSSBpcyBub3QgYXMgcGVybWlzc2l2ZSBhcyB0aGUgbW9kZXJuIEFQSQorICAgIGRlZiBjaGVja190eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKyAgICAgICAgbXVsdGlkaW1lbnNpb25hbCA9IG1lbW9yeXZpZXcoYiIxMjM0IikuY2FzdCgnQicsICgyLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBtdWx0aWRpbWVuc2lvbmFsKQorICAgICAgICBpbnRfZGF0YSA9IG1lbW9yeXZpZXcoYiIxMjM0IikuY2FzdCgnSScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgaW50X2RhdGEpCisKICAgICBkZWYgdGVzdF9lbmNvZGVieXRlcyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhiInd3dy5weXRob24ub3JnIiksIGIiZDNkM0xuQjVkR2h2Ymk1dmNtYz1cbiIpCkBAIC0yNCw3ICszNSw5IEBACiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PVxuIikKICAgICAgICAgIyBOb24tYnl0ZXMKICAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKGJ5dGVhcnJheShiJ2FiYycpKSwgYidZV0pqXG4nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5lbmNvZGVieXRlcywgIiIpCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhtZW1vcnl2aWV3KGInYWJjJykpLCBiJ1lXSmpcbicpCisgICAgICAgIGVxKGJhc2U2NC5lbmNvZGVieXRlcyhhcnJheSgnQicsIGInYWJjJykpLCBiJ1lXSmpcbicpCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9lcnJvcnMoYmFzZTY0LmVuY29kZWJ5dGVzKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlYnl0ZXMoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtNDEsNyArNTQsOSBAQAogICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMoYicnKSwgYicnKQogICAgICAgICAjIE5vbi1ieXRlcwogICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMoYnl0ZWFycmF5KGInWVdKalxuJykpLCBiJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmRlY29kZWJ5dGVzLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKG1lbW9yeXZpZXcoYidZV0pqXG4nKSksIGInYWJjJykKKyAgICAgICAgZXEoYmFzZTY0LmRlY29kZWJ5dGVzKGFycmF5KCdCJywgYidZV0pqXG4nKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5jaGVja190eXBlX2Vycm9ycyhiYXNlNjQuZGVjb2RlYnl0ZXMpCiAKICAgICBkZWYgdGVzdF9lbmNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtNzMsNiArODgsNDIgQEAKIAogCiBjbGFzcyBCYXNlWFlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIE1vZGVybiBBUEkgY29tcGxldGVseSBpZ25vcmVzIGV4cG9ydGVkIGRpbWVuc2lvbiBhbmQgZm9ybWF0IGRhdGEgYW5kCisgICAgIyB0cmVhdHMgYW55IGJ1ZmZlciBhcyBhIHN0cmVhbSBvZiBieXRlcworICAgIGRlZiBjaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisKKyAgICBkZWYgY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorCisgICAgZGVmIGNoZWNrX290aGVyX3R5cGVzKHNlbGYsIGYsIGJ5dGVzX2RhdGEsIGV4cGVjdGVkKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGIgPSBieXRlYXJyYXkoYnl0ZXNfZGF0YSkKKyAgICAgICAgZXEoZihiKSwgZXhwZWN0ZWQpCisgICAgICAgICMgVGhlIGJ5dGVhcnJheSB3YXNuJ3QgbXV0YXRlZAorICAgICAgICBlcShiLCBieXRlc19kYXRhKQorICAgICAgICBlcShmKG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkpLCBleHBlY3RlZCkKKyAgICAgICAgZXEoZihhcnJheSgnQicsIGJ5dGVzX2RhdGEpKSwgZXhwZWN0ZWQpCisgICAgICAgICMgWFhYIHdoeSBpcyBiNjRlbmNvZGUgaGFyZGNvZGVkIGhlcmU/CisgICAgICAgIHNlbGYuY2hlY2tfbm9uYnl0ZV9lbGVtZW50X2Zvcm1hdChiYXNlNjQuYjY0ZW5jb2RlLCBieXRlc19kYXRhKQorICAgICAgICBzZWxmLmNoZWNrX211bHRpZGltZW5zaW9uYWwoYmFzZTY0LmI2NGVuY29kZSwgYnl0ZXNfZGF0YSkKKworICAgIGRlZiBjaGVja19tdWx0aWRpbWVuc2lvbmFsKHNlbGYsIGYsIGRhdGEpOgorICAgICAgICBwYWRkaW5nID0gYiJceDAwIiBpZiBsZW4oZGF0YSkgJSAyIGVsc2UgYiIiCisgICAgICAgIGJ5dGVzX2RhdGEgPSBkYXRhICsgcGFkZGluZyAjIE1ha2Ugc3VyZSBjYXN0IHdvcmtzCisgICAgICAgIHNoYXBlID0gKGxlbihieXRlc19kYXRhKSAvLyAyLCAyKQorICAgICAgICBtdWx0aWRpbWVuc2lvbmFsID0gbWVtb3J5dmlldyhieXRlc19kYXRhKS5jYXN0KCdCJywgc2hhcGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihtdWx0aWRpbWVuc2lvbmFsKSwgZihieXRlc19kYXRhKSkKKworICAgIGRlZiBjaGVja19ub25ieXRlX2VsZW1lbnRfZm9ybWF0KHNlbGYsIGYsIGRhdGEpOgorICAgICAgICBwYWRkaW5nID0gYiJceDAwIiAqICgoNCAtIGxlbihkYXRhKSkgJSA0KQorICAgICAgICBieXRlc19kYXRhID0gZGF0YSArIHBhZGRpbmcgIyBNYWtlIHN1cmUgY2FzdCB3b3JrcworICAgICAgICBpbnRfZGF0YSA9IG1lbW9yeXZpZXcoYnl0ZXNfZGF0YSkuY2FzdCgnSScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihpbnRfZGF0YSksIGYoYnl0ZXNfZGF0YSkpCisKKwogICAgIGRlZiB0ZXN0X2I2NGVuY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgICMgVGVzdCBkZWZhdWx0IGFscGhhYmV0CkBAIC05MCwxMyArMTQxLDE2IEBACiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpCiAgICAgICAgICMgVGVzdCB3aXRoIGFyYml0cmFyeSBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1iJyokJyksIGInMDFhKmIkY2QnKQotICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInWVdKalpBPT0nKQogICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9Ynl0ZWFycmF5KGInKiQnKSksCiAgICAgICAgICAgIGInMDFhKmIkY2QnKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsICIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsIGIiIiwgYWx0Y2hhcnM9IiIpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1tZW1vcnl2aWV3KGInKiQnKSksCisgICAgICAgICAgIGInMDFhKmIkY2QnKQorICAgICAgICBlcShiYXNlNjQuYjY0ZW5jb2RlKGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYWx0Y2hhcnM9YXJyYXkoJ0InLCBiJyokJykpLAorICAgICAgICAgICBiJzAxYSpiJGNkJykKKyAgICAgICAgIyBOb24tYnl0ZXMKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjY0ZW5jb2RlLCBiJ2FiY2QnLCBiJ1lXSmpaQT09JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmI2NGVuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjY0ZW5jb2RlLCBiIiIsIGFsdGNoYXJzPSIqJCIpCiAgICAgICAgICMgVGVzdCBzdGFuZGFyZCBhbHBoYWJldAogICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciKSwgYiJkM2QzTG5CNWRHaHZiaTV2Y21jPSIpCiAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYiJhIiksIGIiWVE9PSIpCkBAIC0xMTAsMTUgKzE2NCwxNSBAQAogICAgICAgICAgICBiIlJVWkhTRWxLUzB4TlRrOVFVVkpUVkZWV1YxaFpXakF4TWpNME5UIgogICAgICAgICAgICBiIlkzT0RraFFDTXdYaVlxS0NrN09qdytMQzRnVzExN2ZRPT0iKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInWVdKalpBPT0nKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmNkJywgYidZV0pqWkE9PScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUpCiAgICAgICAgICMgVGVzdCB3aXRoICdVUkwgc2FmZScgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnKSwgYicwMWEtYl9jZCcpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZShieXRlYXJyYXkoYidceGQzVlx4YmVvXHhmN1x4MWQnKSksIGInMDFhLWJfY2QnKQotICAgICAgICAjIENoZWNrIGlmIHBhc3NpbmcgYSBzdHIgb2JqZWN0IHJhaXNlcyBhbiBlcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkM1ZceGJlb1x4ZjdceDFkJywgYicwMWEtYl9jZCcpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZSkKIAogICAgIGRlZiB0ZXN0X2I2NGRlY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0xNDEsNyArMTk1LDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iNjRkZWNvZGUoYnl0ZWFycmF5KGIiWVdKaiIpKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iNjRkZWNvZGUsIGIiWVdKaiIsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmI2NGRlY29kZSkKIAogICAgICAgICAjIFRlc3Qgd2l0aCBhcmJpdHJhcnkgYWx0ZXJuYXRpdmUgY2hhcmFjdGVycwogICAgICAgICB0ZXN0c19hbHRjaGFycyA9IHsoYicwMWEqYiRjZCcsIGInKiQnKTogYidceGQzVlx4YmVvXHhmN1x4MWQnLApAQCAtMTYwLDcgKzIxNSw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlKGJ5dGVhcnJheShiIllXSmoiKSksIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlLCBiIllXSmoiLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUpCiAKICAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIHRlc3RzX3VybHNhZmUgPSB7YicwMWEtYl9jZCc6IGInXHhkM1ZceGJlb1x4ZjdceDFkJywKQEAgLTE3MCw3ICsyMjYsOSBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShieXRlYXJyYXkoYicwMWEtYl9jZCcpKSwgYidceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSwgYicwMWEtYl9jZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQzVlx4YmVvXHhmN1x4MWQnKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUpCiAKICAgICBkZWYgdGVzdF9iNjRkZWNvZGVfcGFkZGluZ19lcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJhc2U2NC5iNjRkZWNvZGUsIGInYWJjJykKQEAgLTIwNSw4ICsyNjMsOCBAQAogICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGInYWJjZCcpLCBiJ01GUkdHWkE9JykKICAgICAgICAgZXEoYmFzZTY0LmIzMmVuY29kZShiJ2FiY2RlJyksIGInTUZSR0daREYnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGJ5dGVhcnJheShiJ2FiY2QnKSksIGInTUZSR0daQT0nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMzJlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMzJlbmNvZGUsIGInYWJjZCcsIGInTUZSR0daQT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjMyZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjMyZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTIyMiw3ICsyODAsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIzMmRlY29kZShieXRlYXJyYXkoYidNRlJHRz09PScpKSwgYidhYmMnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMzJkZWNvZGUsIGInTUZSR0c9PT0nLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMzJkZWNvZGUpCiAKICAgICBkZWYgdGVzdF9iMzJkZWNvZGVfY2FzZWZvbGQoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjc3LDggKzMzNiw5IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYidceDAxXHgwMlx4YWJceGNkXHhlZicpLCBiJzAxMDJBQkNERUYnKQogICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGInXHgwMCcpLCBiJzAwJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShieXRlYXJyYXkoYidceDAxXHgwMlx4YWJceGNkXHhlZicpKSwgYicwMTAyQUJDREVGJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuYjE2ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjE2ZW5jb2RlLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAxMDJBQkNERUYnKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjE2ZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjE2ZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTI5MywxNCArMzUzLDI2OCBAQAogICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGInMDEwMmFiY2RlZicsIFRydWUpLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKICAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZSgnMDEwMmFiY2RlZicsIFRydWUpLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShieXRlYXJyYXkoYiIwMTAyQUJDREVGIikpLCBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjE2ZGVjb2RlLCBiIjAxMDJBQkNERUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjE2ZGVjb2RlKQorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGJ5dGVhcnJheShiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKG1lbW9yeXZpZXcoYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKyAgICAgICAgZXEoYmFzZTY0LmIxNmRlY29kZShhcnJheSgnQicsIGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisKKyAgICBkZWYgdGVzdF9hODVlbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiInd3dy5weXRob24ub3JnIjogYidHQlxcNmBFLVpQPURmLjFHRWI+JywKKyAgICAgICAgICAgIGJ5dGVzKHJhbmdlKDI1NSkpOiBiIiIiISEqLSciOWV1NyNSTGhHJGszW1cmLm9OZydHVkIiKGA9NTIqJCQiIiIKKyAgICAgICAgICAgICAgIGIiIiIoQis8X3BSLFVGY2Itbi1Wci8xaUotMEpQPT0xYzcwTTMmcyNdND9Za201WEBfKDZxJ1I4ODRjRSIiIgorICAgICAgICAgICAgICAgYiIiIkg5TUo4WDpmMStoPClsdCM9QlNnMz5bOlpDP3QhTVNBN11AY0JQRDNzQ2krJy5FLGZvPkZFTWJOIiIiCisgICAgICAgICAgICAgICBiIiIiR140VV5JIXBIbko6VzwpS1M+LzlMbCUiSU4vYGpZT0hHXWlQYS5RJFIkakQ0Uz1RN0RUVjgqVFUiIiIKKyAgICAgICAgICAgICAgIGIiIiJuc3JkVzJaZXRYS0FZL1lkKEw/WydkP09cXEBLMl9dWTIlb15xbW4qYDVUYTphTjtUSmJnIkdaZCIiIgorICAgICAgICAgICAgICAgYiIiIipeOmplQ0UuJWZcXCwhNWd0Z2lFaThOXFxValE1T2VraXFCdW0tWDYwbkY/KUBvXyVxUHEiYWRgIiIiCisgICAgICAgICAgICAgICBiIiIicjtIVCIiIiwKKyAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIKKyAgICAgICAgICAgICAgICBiIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSI6CisgICAgICAgICAgICAgICAgYidAOkVfV0FTLFJnQmtoRiJEL085MkVINixCRmBxdFJIJFZiQzZVWEA0N24/M0Q5MiYmVCcKKyAgICAgICAgICAgICAgICBiIjpKYW5kO2NIYXQ9Jy9VLzBKUD09MWM3ME0zJnItSSw7PEZOLk9aYC0zXW9TVy9nK0EoSFtQIiwKKyAgICAgICAgICAgIGIibm8gcGFkZGluZy4uIjogYidESnBZOkA6V25fREooUlMnLAorICAgICAgICAgICAgYiJ6ZXJvIGNvbXByZXNzaW9uXDBcMFwwXDAiOiBiJ0g9Xyw4K0NmPixFLG9OMkYob1ExeicsCisgICAgICAgICAgICBiInplcm8gY29tcHJlc3Npb25cMFwwXDAiOiBiJ0g9Xyw4K0NmPixFLG9OMkYob1ExISEhIScsCisgICAgICAgICAgICBiIkJvdW5kYXJ5OlwwXDBcMFwwIjogYic2PnEhYUE3OU0oM1dLLVshIScsCisgICAgICAgICAgICBiIlNwYWNlIGNvbXByOiAgICAiOiBiJztmSC9UQUtZSyREL2FNVis8VmRMJywKKyAgICAgICAgICAgIGInXHhmZic6IGIncnInLAorICAgICAgICAgICAgYidceGZmJyoyOiBiJ3M4TicsCisgICAgICAgICAgICBiJ1x4ZmYnKjM6IGInczhXKicsCisgICAgICAgICAgICBiJ1x4ZmYnKjQ6IGInczhXLSEnLAorICAgICAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoZGF0YSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoZGF0YSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGRhdGEsIGFkb2JlPVRydWUpLCBiJzx+JyArIHJlcyArIGInfj4nLCBkYXRhKQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmE4NWVuY29kZSwgYiJ3d3cucHl0aG9uLm9yZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQlxcNmBFLVpQPURmLjFHRWI+JykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5hODVlbmNvZGUsICIiKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ3d3cucHl0aG9uLm9yZyIsIHdyYXBjb2w9NywgYWRvYmU9RmFsc2UpLAorICAgICAgICAgICBiJ0dCXFw2YEUtXG5aUD1EZi4xXG5HRWI+JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiIlwwXDBcMFwwd3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPUZhbHNlKSwKKyAgICAgICAgICAgYid6R0JcXDZgRVxuLVpQPURmLlxuMUdFYj4nKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIid3d3LnB5dGhvbi5vcmciLCB3cmFwY29sPTcsIGFkb2JlPVRydWUpLAorICAgICAgICAgICBiJzx+R0JcXDZgXG5FLVpQPURmXG4uMUdFYj5cbn4+JykKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqOCwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneXknKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs8VmQnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGInICcqNiwgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGIneSs8VScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo1LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5KzknKQorCisgICAgZGVmIHRlc3RfYjg1ZW5jb2RlKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICB0ZXN0cyA9IHsKKyAgICAgICAgICAgIGInJzogYicnLAorICAgICAgICAgICAgYid3d3cucHl0aG9uLm9yZyc6IGInY1h4TCNhQ3ZsU1oqREdjYSVUJywKKyAgICAgICAgICAgIGJ5dGVzKHJhbmdlKDI1NSkpOiBiIiIiMDA5QzYxTyl+TTJuaC1jMz1Jd3M1RF5qKzZjclgxNyNTS0g5MzM3WCIiIgorICAgICAgICAgICAgICAgIGIiIiJBUiFfbkJxYiYlQ0BDcntFRztmQ0ZmbFNTRyZNRmlJNXwyeUpVdT0/S3RWITdMYDZuTk5KJmFkIiIiCisgICAgICAgICAgICAgICAgYiIiIk9pZk50UCpHQS1SOD59MlNYbytJVHdQdllVfTBpb1dNeVYmWGxaSXxZO0E2RGFCKl5UYmFpJWoiIiIKKyAgICAgICAgICAgICAgICBiIiIiY3pKcXplMF9kQGZQc1I4Z29URU9oPjQxZWpFIzx1a2RjeTtsJERtM24zPFpKb1NtTVpwck45cCIiIgorICAgICAgICAgICAgICAgIGIiIiJxQHx7KHNIdil9dGdXdUV1KDdoVXc2KFVreFZnSCF5dUg0XnpgP0A5I0twJFAkalFwZiUrMWN2IiIiCisgICAgICAgICAgICAgICAgYiIiIig5elA8KVlhRDQqeEIwSyt9KzthO05qeHE8bUtrKT07YFh+P0N0TEZAYlU4Vl4hNGBsYDEkKCMiIiIKKyAgICAgICAgICAgICAgICBiIiIie1FkcCIiIiwKKyAgICAgICAgICAgIGIiIiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiIiCisgICAgICAgICAgICAgICAgYiIiIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIiIjoKKyAgICAgICAgICAgICAgICBiIiIiVlBhIXNXb0JuK1g9LWIxWkVrT0hhZExCWGIjYH1uZDNyJVlMcXRWSk1AVUlaT0g1NXBQZiRAKCIiIgorICAgICAgICAgICAgICAgIGIiIiJRJmQkfVM2RXFFRmZsU1NHJk1GaUk1e0NlQlFSYmpEa3YjQ0l5Xm9zRStBVzdkd2wiIiIsCisgICAgICAgICAgICBiJ25vIHBhZGRpbmcuLic6IGInWmZfdVBWUHNAIVpmN25vJywKKyAgICAgICAgICAgIGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMFx4MDAnOiBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMDAnLAorICAgICAgICAgICAgYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwJzogYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAnLAorICAgICAgICAgICAgYiIiIkJvdW5kYXJ5Olx4MDBceDAwXHgwMFx4MDAiIiI6IGIiIiJMVGAwJFdNT2k3SXNnQ3cwMCIiIiwKKyAgICAgICAgICAgIGInU3BhY2UgY29tcHI6ICAgICc6IGInUSpkRXBXZ3VnM1pFJGlyQVJyKGgnLAorICAgICAgICAgICAgYidceGZmJzogYid7eycsCisgICAgICAgICAgICBiJ1x4ZmYnKjI6IGInfE5qJywKKyAgICAgICAgICAgIGInXHhmZicqMzogYid8TnM5JywKKyAgICAgICAgICAgIGInXHhmZicqNDogYid8TnNDMCcsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGRhdGEpLCByZXMpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjg1ZW5jb2RlLCBiInd3dy5weXRob24ub3JnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcpCisKKyAgICBkZWYgdGVzdF9hODVkZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nOiBiJ3d3dy5weXRob24ub3JnJywKKyAgICAgICAgICAgIGIiIiIhICEgKiAtJyJcblx0XHQ5ZXVcclxuNyMgIFJMXHZoRyRrM1tXJi5vTmcnR1ZCIihgPTUyKiQkIiIiCisgICAgICAgICAgICAgICBiIiIiKEIrPF9wUixVRmNiLW4tVnIvMWlKLTBKUD09MWM3ME0zJnMjXTQ/WWttNVhAXyg2cSdSODg0Y0UiIiIKKyAgICAgICAgICAgICAgIGIiIiJIOU1KOFg6ZjEraDwpbHQjPUJTZzM+WzpaQz90IU1TQTddQGNCUEQzc0NpKycuRSxmbz5GRU1iTiIiIgorICAgICAgICAgICAgICAgYiIiIkdeNFVeSSFwSG5KOlc8KUtTPi85TGwlIklOL2BqWU9IR11pUGEuUSRSJGpENFM9UTdEVFY4KlRVIiIiCisgICAgICAgICAgICAgICBiIiIibnNyZFcyWmV0WEtBWS9ZZChMP1snZD9PXFxASzJfXVkyJW9ecW1uKmA1VGE6YU47VEpiZyJHWmQiIiIKKyAgICAgICAgICAgICAgIGIiIiIqXjpqZUNFLiVmXFwsITVndGdpRWk4TlxcVWpRNU9la2lxQnVtLVg2MG5GPylAb18lcVBxImFkYCIiIgorICAgICAgICAgICAgICAgYiIiInI7SFQiIiI6IGJ5dGVzKHJhbmdlKDI1NSkpLAorICAgICAgICAgICAgYiIiIkA6RV9XQVMsUmdCa2hGIkQvTzkyRUg2LEJGYHF0UkgkVmJDNlVYQDQ3bj8zRDkyJiZUOkphbmQ7YyIiIgorICAgICAgICAgICAgICAgIGIiIiJIYXQ9Jy9VLzBKUD09MWM3ME0zJnItSSw7PEZOLk9aYC0zXW9TVy9nK0EoSFtQIiIiOgorICAgICAgICAgICAgICAgIGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0JworICAgICAgICAgICAgICAgIGInNTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fScsCisgICAgICAgICAgICBiJ0RKcFk6QDpXbl9ESihSUyc6IGInbm8gcGFkZGluZy4uJywKKyAgICAgICAgICAgIGInSD1fLDgrQ2Y+LEUsb04yRihvUTF6JzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ0g9Xyw4K0NmPixFLG9OMkYob1ExISEhISc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJzY+cSFhQTc5TSgzV0stWyEhJzogYiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiwKKyAgICAgICAgICAgIGInO2ZIL1RBS1lLJEQvYU1WKzxWZEwnOiBiJ1NwYWNlIGNvbXByOiAgICAnLAorICAgICAgICAgICAgYidycic6IGInXHhmZicsCisgICAgICAgICAgICBiJ3M4Tic6IGInXHhmZicqMiwKKyAgICAgICAgICAgIGInczhXKic6IGInXHhmZicqMywKKyAgICAgICAgICAgIGInczhXLSEnOiBiJ1x4ZmYnKjQsCisgICAgICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoZGF0YS5kZWNvZGUoImFzY2lpIiksIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJzx+JyArIGRhdGEgKyBiJ34+JywgYWRvYmU9VHJ1ZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoJzx+JXN+PicgJSBkYXRhLmRlY29kZSgiYXNjaWkiKSwgYWRvYmU9VHJ1ZSksCisgICAgICAgICAgICAgICByZXMsIGRhdGEpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3l5JywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqOCkKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krPFZkJywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ3krPFUnLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo2KQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneSs5JywgZm9sZHNwYWNlcz1UcnVlLCBhZG9iZT1GYWxzZSksIGInICcqNSkKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5hODVkZWNvZGUsIGInR0JcXDZgRS1aUD1EZi4xR0ViPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyIpCisKKyAgICBkZWYgdGVzdF9iODVkZWNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiJ2NYeEwjYUN2bFNaKkRHY2ElVCc6IGInd3d3LnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgYiIiIjAwOUM2MU8pfk0ybmgtYzM9SXdzNUReais2Y3JYMTcjU0tIOTMzN1giIiIKKyAgICAgICAgICAgICAgICBiIiIiQVIhX25CcWImJUNAQ3J7RUc7ZkNGZmxTU0cmTUZpSTV8MnlKVXU9P0t0ViE3TGA2bk5OSiZhZCIiIgorICAgICAgICAgICAgICAgIGIiIiJPaWZOdFAqR0EtUjg+fTJTWG8rSVR3UHZZVX0waW9XTXlWJlhsWkl8WTtBNkRhQipeVGJhaSVqIiIiCisgICAgICAgICAgICAgICAgYiIiImN6SnF6ZTBfZEBmUHNSOGdvVEVPaD40MWVqRSM8dWtkY3k7bCREbTNuMzxaSm9TbU1acHJOOXAiIiIKKyAgICAgICAgICAgICAgICBiIiIicUB8eyhzSHYpfXRnV3VFdSg3aFV3NihVa3hWZ0gheXVINF56YD9AOSNLcCRQJGpRcGYlKzFjdiIiIgorICAgICAgICAgICAgICAgIGIiIiIoOXpQPClZYUQ0KnhCMEsrfSs7YTtOanhxPG1Layk9O2BYfj9DdExGQGJVOFZeITRgbGAxJCgjIiIiCisgICAgICAgICAgICAgICAgYiIiIntRZHAiIiI6IGJ5dGVzKHJhbmdlKDI1NSkpLAorICAgICAgICAgICAgYiIiIlZQYSFzV29CbitYPS1iMVpFa09IYWRMQlhiI2B9bmQzciVZTHF0VkpNQFVJWk9INTVwUGYkQCgiIiIKKyAgICAgICAgICAgICAgICBiIiIiUSZkJH1TNkVxRUZmbFNTRyZNRmlJNXtDZUJRUmJqRGt2I0NJeV5vc0UrQVc3ZHdsIiIiOgorICAgICAgICAgICAgICAgIGIiIiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiIiCisgICAgICAgICAgICAgICAgYiIiIjAxMjM0NTY3ODkhQCMwXiYqKCk7Ojw+LC4gW117fSIiIiwKKyAgICAgICAgICAgIGInWmZfdVBWUHNAIVpmN25vJzogYidubyBwYWRkaW5nLi4nLAorICAgICAgICAgICAgYidkUyFCTkFZKlRCYUJeakhiN15tRzAwMDAwJzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMCc6IGInemVybyBjb21wcmVzc2lvblx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiIiIiTFRgMCRXTU9pN0lzZ0N3MDAiIiI6IGIiIiJCb3VuZGFyeTpceDAwXHgwMFx4MDBceDAwIiIiLAorICAgICAgICAgICAgYidRKmRFcFdndWczWkUkaXJBUnIoaCc6IGInU3BhY2UgY29tcHI6ICAgICcsCisgICAgICAgICAgICBiJ3t7JzogYidceGZmJywKKyAgICAgICAgICAgIGInfE5qJzogYidceGZmJyoyLAorICAgICAgICAgICAgYid8TnM5JzogYidceGZmJyozLAorICAgICAgICAgICAgYid8TnNDMCc6IGInXHhmZicqNCwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoZGF0YSksIHJlcykKKyAgICAgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoZGF0YS5kZWNvZGUoImFzY2lpIikpLCByZXMpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYjg1ZGVjb2RlLCBiJ2NYeEwjYUN2bFNaKkRHY2ElVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ3d3cucHl0aG9uLm9yZyIpCisKKyAgICBkZWYgdGVzdF9hODVfcGFkZGluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiIngiLCBwYWQ9VHJ1ZSksIGInR1E3XkQnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHgiLCBwYWQ9VHJ1ZSksIGIiR14nMmciKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHh4IiwgcGFkPVRydWUpLCBiJ0deK0g1JykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInh4eHgiLCBwYWQ9VHJ1ZSksIGInR14rSVgnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHh4eHgiLCBwYWQ9VHJ1ZSksIGInR14rSVhHUTdeRCcpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0dRN15EJyksIGIieFx4MDBceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYiJHXicyZyIpLCBiInh4XHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSDUnKSwgYiJ4eHhceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0lYJyksIGIieHh4eCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitJWEdRN15EJyksIGIieHh4eHhceDAwXHgwMFx4MDAiKQorCisgICAgZGVmIHRlc3RfYjg1X3BhZGRpbmcoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4IiwgcGFkPVRydWUpLCBiJ2NtTXpaJykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4IiwgcGFkPVRydWUpLCBiJ2N6NkgrJykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4eCIsIHBhZD1UcnVlKSwgYidjekFkSycpCisgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoYiJ4eHh4IiwgcGFkPVRydWUpLCBiJ2N6QWV0JykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4eHh4IiwgcGFkPVRydWUpLCBiJ2N6QWV0Y21NelonKQorCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjbU16WicpLCBiInhceDAwXHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3o2SCsnKSwgYiJ4eFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWRLJyksIGIieHh4XHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFldCcpLCBiInh4eHgiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZXRjbU16WicpLCBiInh4eHh4XHgwMFx4MDBceDAwIikKKworICAgIGRlZiB0ZXN0X2E4NWRlY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGlsbGVnYWwgPSAoc2V0KHJhbmdlKDMyKSkgfCBzZXQocmFuZ2UoMTE4LCAyNTYpKSkgLSBzZXQoYicgXHRcblxyXHYnKQorICAgICAgICBmb3IgYyBpbiBpbGxlZ2FsOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiJyEhISEnICsgYnl0ZXMoW2NdKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbXNnPWJ5dGVzKFtjXSkpOgorICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYichISEhJyArIGJ5dGVzKFtjXSksIGFkb2JlPUZhbHNlKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiJzx+ISEhIScgKyBieXRlcyhbY10pICsgYid+PicsIGFkb2JlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtYWxmb3JtZWQiLCBhZG9iZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjx+c3RpbGwgbWFsZm9ybWVkIiwgYWRvYmU9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbHNvIG1hbGZvcm1lZH4+IiwgYWRvYmU9VHJ1ZSkKKworICAgICAgICAjIFdpdGggYWRvYmU9RmFsc2UgKHRoZSBkZWZhdWx0KSwgQWRvYmUgZnJhbWluZyBtYXJrZXJzIGFyZSBkaXNhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPH5+PiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPH5+PiIsIGFkb2JlPUZhbHNlKQorICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGIiPH5+PiIsIGFkb2JlPVRydWUpICAjIHNhbml0eSBjaGVjaworCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjeCIsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2RleSIsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImEgYlxuYyIsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iIiIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczgnLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOFcnLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOFctJywgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsIGInczhXLSInLCBhZG9iZT1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2I4NWRlY29kZV9lcnJvcnMoc2VsZik6CisgICAgICAgIGlsbGVnYWwgPSBsaXN0KHJhbmdlKDMzKSkgKyBcCisgICAgICAgICAgICAgICAgICBsaXN0KGInIlwnLC4vOltcXF0nKSArIFwKKyAgICAgICAgICAgICAgICAgIGxpc3QocmFuZ2UoMTI4LCAyNTYpKQorICAgICAgICBmb3IgYyBpbiBpbGxlZ2FsOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmI4NWRlY29kZShiJzAwMDAnICsgYnl0ZXMoW2NdKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3wnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmI4NWRlY29kZSwgYid8TnMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOc0MnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOc0MxJykKIAogICAgIGRlZiB0ZXN0X2RlY29kZV9ub25hc2NpaV9zdHIoc2VsZik6CiAgICAgICAgIGRlY29kZV9mdW5jcyA9IChiYXNlNjQuYjY0ZGVjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMzJkZWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjE2ZGVjb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIxNmRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKQogICAgICAgICBmb3IgZiBpbiBkZWNvZGVfZnVuY3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLCAnd2l0aCBub24tYXNjaWkgXHhjYicpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKaW5kZXggN2I5YmQxOS4uNTgwYTk2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKQEAgLTcsNyArNyw3IEBACiBjX2Jpc2VjdCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnYmlzZWN0JywgZnJlc2g9WydfYmlzZWN0J10pCiAKIGNsYXNzIFJhbmdlKG9iamVjdCk6Ci0gICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3Qgd2l0aG91dCBhbnkgaW50ZWdlciB3aWR0aCBsaW1pdGF0aW9ucy4iIiIKKyAgICAiIiJBIHRyaXZpYWwgcmFuZ2UoKS1saWtlIG9iamVjdCB0aGF0IGhhcyBhbiBpbnNlcnQoKSBtZXRob2QuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBzdG9wKToKICAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CiAgICAgICAgIHNlbGYuc3RvcCA9IHN0b3AKQEAgLTEyMCwxMCArMTIwLDEwIEBACiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfbG8oc2VsZik6CiAgICAgICAgICMgSXNzdWUgMzMwMQogICAgICAgICBtb2QgPSBzZWxmLm1vZHVsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKQogCiAgICAgZGVmIHRlc3RfbGFyZ2VfcmFuZ2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTM0OTYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKaW5kZXggMDRlM2Y2MS4uMTY2Nzg0NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKQEAgLTQyOTAsOSArNDI5MCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBtZW1vcnl2aWV3LCB4KQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QnVmZmVyUHJvdG9jb2wpCi0KLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5IGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CmluZGV4IGMzNDJhNDMuLjY4NDMwNjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKQEAgLTQ2NCw2ICs0NjQsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGJvbVs6Ml0gKyBiJ2EnKQogCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGV2YWwsICJmb28iLCB7fSwgWCgpKQorCiAgICAgZGVmIHRlc3RfZ2VuZXJhbF9ldmFsKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHRoYXQgZ2VuZXJhbCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgdGhlIGxvY2FscyBhcmd1bWVudAogCkBAIC01NzksNyArNTg0LDEwIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgZnJvemVuZGljdF9lcnJvcigiZnJvemVuZGljdCBpcyByZWFkb25seSIpCiAKICAgICAgICAgIyByZWFkLW9ubHkgYnVpbHRpbnMKLSAgICAgICAgZnJvemVuX2J1aWx0aW5zID0gZnJvemVuZGljdChfX2J1aWx0aW5zX18pCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX19idWlsdGluc19fLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fLl9fZGljdF9fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvemVuX2J1aWx0aW5zID0gZnJvemVuZGljdChfX2J1aWx0aW5zX18pCiAgICAgICAgIGNvZGUgPSBjb21waWxlKCJfX2J1aWx0aW5zX19bJ3N1cGVyZ2xvYmFsJ109MjsgcHJpbnQoc3VwZXJnbG9iYWwpIiwgInRlc3QiLCAiZXhlYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZyb3plbmRpY3RfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMsIGNvZGUsIHsnX19idWlsdGluc19fJzogZnJvemVuX2J1aWx0aW5zfSkKQEAgLTgzOSw4ICs4NDcsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMi4wLCAzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMS4wLCAyLCAzKSwgMykKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXgsICgpKQorICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCBCYWRTZXEoKSkKKwogICAgICAgICBmb3Igc3RtdCBpbiAoCiAgICAgICAgICAgICAibWF4KGtleT1pbnQpIiwgICAgICAgICAgICAgICAgICMgbm8gYXJncworICAgICAgICAgICAgIm1heChkZWZhdWx0PU5vbmUpIiwKKyAgICAgICAgICAgICJtYXgoMSwgMiwgZGVmYXVsdD1Ob25lKSIsICAgICAgIyByZXF1aXJlIGNvbnRhaW5lciBmb3IgZGVmYXVsdAorICAgICAgICAgICAgIm1heChkZWZhdWx0PU5vbmUsIGtleT1pbnQpIiwKICAgICAgICAgICAgICJtYXgoMSwga2V5PWludCkiLCAgICAgICAgICAgICAgIyBzaW5nbGUgYXJnIG5vdCBpdGVyYWJsZQogICAgICAgICAgICAgIm1heCgxLCAyLCBrZXlzdG9uZT1pbnQpIiwgICAgICAjIHdyb25nIGtleXdvcmQKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5PWludCwgYWJjPWludCkiLCAgIyB0d28gbWFueSBrZXl3b3JkcwpAQCAtODU3LDYgKzg3NiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwyKSwga2V5PW5lZyksIDEpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMiwga2V5PW5lZyksIDEpICAgICAjIHR3byBlbGVtcwogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgpLCBkZWZhdWx0PU5vbmUpLCBOb25lKSAgICAjIHplcm8gZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAgIyBvbmUgZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwyKSwgZGVmYXVsdD1Ob25lKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgpLCBkZWZhdWx0PTEsIGtleT1uZWcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwgMiksIGRlZmF1bHQ9Mywga2V5PW5lZyksIDEpCisKICAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZHJhbmdlKDIwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KICAgICAgICAga2V5cyA9IGRpY3QoKGVsZW0sIHJhbmRvbS5yYW5kcmFuZ2UoNTApKSBmb3IgZWxlbSBpbiBkYXRhKQogICAgICAgICBmID0ga2V5cy5fX2dldGl0ZW1fXwpAQCAtODgzLDYgKzkwOSw5IEBACiAKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1pbihrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtaW4oZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWluKDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtaW4oZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWluKDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtaW4oMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg5OSw2ICs5MjgsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGtleT1uZWcpLCAyKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKDEsIDIsIGtleT1uZWcpLCAyKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsIDIpLCBkZWZhdWx0PTEsIGtleT1uZWcpLCAyKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTk0MCwyOSArOTc2LDI1IEBACiAgICAgZGVmIHdyaXRlX3Rlc3RmaWxlKHNlbGYpOgogICAgICAgICAjIE5CIHRoZSBmaXJzdCA0IGxpbmVzIGFyZSBhbHNvIHVzZWQgdG8gdGVzdCBpbnB1dCwgYmVsb3cKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICB0cnk6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgd2l0aCBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKCcxKzFcbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpCiAgICAgICAgICAgICBmcC53cml0ZSgnLlxuJykKICAgICAgICAgICAgIGZwLndyaXRlKCdEZWFyIEpvaG5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnWFhYJyoxMDApCiAgICAgICAgICAgICBmcC53cml0ZSgnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnMSsxXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnRGVhcicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDEwMCksICcgSm9oblxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZCgzMDApLCAnWFhYJyoxMDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMTAwMCksICdZWVknKjEwMCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKICAgICBkZWYgdGVzdF9vcGVuX2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CiAgICAgICAgIG9sZF9lbnZpcm9uID0gZGljdChvcy5lbnZpcm9uKQpAQCAtOTc3LDE1ICsxMDA5LDE3IEBACiAgICAgICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKICAgICAgICAgICAgIGN1cnJlbnRfbG9jYWxlX2VuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogICAgICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmcDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmVuY29kaW5nLCBjdXJyZW50X2xvY2FsZV9lbmNvZGluZykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKICAgICAgICAgICAgIG9zLmVudmlyb24udXBkYXRlKG9sZF9lbnZpcm9uKQogCisgICAgZGVmIHRlc3Rfb3Blbl9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGZpbGVvYmogPSBvcGVuKF9fZmlsZV9fKQorICAgICAgICB3aXRoIGZpbGVvYmo6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShmaWxlb2JqLmZpbGVubygpKSkKKwogICAgIGRlZiB0ZXN0X29yZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoJyAnKSwgMzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCdBJyksIDY1KQpAQCAtMTA5Niw3ICsxMTMwLDYgQEAKICAgICAgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVzdGRpbgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVzdGRvdXQKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhwdHksICJ0aGUgcHR5IGFuZCBzaWduYWwgbW9kdWxlcyBtdXN0IGJlIGF2YWlsYWJsZSIpCiAgICAgZGVmIGNoZWNrX2lucHV0X3R0eShzZWxmLCBwcm9tcHQsIHRlcm1pbmFsX2lucHV0LCBzdGRpb19lbmNvZGluZz1Ob25lKToKQEAgLTE0NzYsMTcgKzE1MDksMTEgQEAKICAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAjIElzc3VlICM3OTk0OiBvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMKICAgICAgICAgIyAgZGVwcmVjYXRlZAotICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2Vfd2FybmluZyk6Ci0gICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIiwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCi0gICAgICAgICAgICBpZiBzaG91bGRfcmFpc2Vfd2FybmluZzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod1swXS5tZXNzYWdlLCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsIHN0cih3WzBdLm1lc3NhZ2UpKQorICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2UpOgorICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZm9ybWF0LCBvYmosIGZtdF9zdHIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCiAKICAgICAgICAgZm10X3N0cnMgPSBbJycsICdzJ10KIApAQCAtMTU2NSwyMSArMTU5MiwxMCBAQAogICAgICAgICBkYXRhID0gJ1RoZSBxdWljayBCcm93biBmb3ggSnVtcGVkIG92ZXIgVGhlIGxhenkgRG9nJy5zcGxpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ydGVkLCBkYXRhLCBOb25lLCBsYW1iZGEgeCx5OiAwKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgdGVzdF9jbGFzc2VzID0gKEJ1aWx0aW5UZXN0LCBUZXN0U29ydGVkKQotCi0gICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCi0KLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgotICAgICAgICAgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCi0gICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcHJpbnQoY291bnRzKQotCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICBmcm9tIGRvY3Rlc3QgaW1wb3J0IERvY1Rlc3RTdWl0ZQorICAgIHRlc3RzLmFkZFRlc3QoRG9jVGVzdFN1aXRlKGJ1aWx0aW5zKSkKKyAgICByZXR1cm4gdGVzdHMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKaW5kZXggMzUyMGU4My4uODQ3YzdhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CkBAIC0yODgsOCArMjg4LDIyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihsc3QpLCBiImFiYyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbih0dXBsZShsc3QpKSwgYiJhYmMiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIiIpLmpvaW4oaXRlcihsc3QpKSwgYiJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiLiIpLmpvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLmNkIikKLSAgICAgICAgIyBYWFggbW9yZS4uLgorICAgICAgICBkb3Rfam9pbiA9IHNlbGYudHlwZTJ0ZXN0KGIiLjoiKS5qb2luCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW21lbW9yeXZpZXcoYiJhYiIpLCBiImNkIl0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2IiYWIiLCBtZW1vcnl2aWV3KGIiY2QiKV0pLCBiImFiLjpjZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG90X2pvaW4oW2J5dGVhcnJheShiImFiIiksIGIiY2QiXSksIGIiYWIuOmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbYiJhYiIsIGJ5dGVhcnJheShiImNkIildKSwgYiJhYi46Y2QiKQorICAgICAgICAjIFN0cmVzcyBpdCB3aXRoIG1hbnkgaXRlbXMKKyAgICAgICAgc2VxID0gW2IiYWJjIl0gKiAxMDAwCisgICAgICAgIGV4cGVjdGVkID0gYiJhYmMiICsgYiIuOmFiYyIgKiA5OTkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihzZXEpLCBleHBlY3RlZCkKKyAgICAgICAgIyBFcnJvciBoYW5kbGluZyBhbmQgY2xlYW51cCB3aGVuIHNvbWUgaXRlbSBpbiB0aGUgbWlkZGxlIG9mIHRoZQorICAgICAgICAjIHNlcXVlbmNlIGhhcyB0aGUgd3JvbmcgdHlwZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZG90X2pvaW4oW2J5dGVhcnJheShiImFiIiksICJjZCIsIGIiZWYiXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZG90X2pvaW4oW21lbW9yeXZpZXcoYiJhYiIpLCAiY2QiLCBiImVmIl0pCiAKICAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQpAQCAtNzU5LDcgKzc3Myw3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRmbikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CkBAIC04OTUsNiArOTA5LDE1IEBACiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgIGJbMzo0XSA9IGVsZW0KIAorICAgIGRlZiB0ZXN0X3NldHNsaWNlX2V4dGVuZChzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzZSB0aGUgcmVzaXppbmcgbG9naWMgKHNlZSBpc3N1ZSAjMTkwODcpCisgICAgICAgIGIgPSBieXRlYXJyYXkocmFuZ2UoMTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwMCkpKQorICAgICAgICBkZWwgYls6MTBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCwgMTAwKSkpCisgICAgICAgIGIuZXh0ZW5kKHJhbmdlKDEwMCwgMTEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGIpLCBsaXN0KHJhbmdlKDEwLCAxMTApKSkKKwogICAgIGRlZiB0ZXN0X2V4dGVuZGVkX3NldF9kZWxfc2xpY2Uoc2VsZik6CiAgICAgICAgIGluZGljZXMgPSAoMCwgTm9uZSwgMSwgMywgMTksIDMwMCwgMTw8MzMzLCAtMSwgLTIsIC0zMSwgLTMwMCkKICAgICAgICAgZm9yIHN0YXJ0IGluIGluZGljZXM6CkBAIC0xMjc0LDYgKzEyOTcsMTEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsIGlzIG5vdCBuZXd2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcisnIHJldHVybmVkIHZhbCBvbiBhIG11dGFibGUgb2JqZWN0JykKKyAgICAgICAgc2VwID0gc2VsZi5tYXJzaGFsKGInJykKKyAgICAgICAgbmV3dmFsID0gc2VwLmpvaW4oW3ZhbF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodmFsLCBuZXd2YWwpCisKIAogY2xhc3MgRml4ZWRTdHJpbmdUZXN0KHRlc3Quc3RyaW5nX3Rlc3RzLkJhc2VUZXN0KToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iejIucHkgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQppbmRleCA5ODU1N2YyLi5jZDU4ZjMxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J6Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgYmlnbWVtdGVzdCwgXzRHCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgYmlnbWVtdGVzdCwgXzRHCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwpAQCAtOSw2ICs5LDcgQEAKIGltcG9ydCByYW5kb20KIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdW5saW5rCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC0xOSwxMCArMjAsMTAgQEAKIGJ6MiA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnYnoyJykKIGZyb20gYnoyIGltcG9ydCBCWjJGaWxlLCBCWjJDb21wcmVzc29yLCBCWjJEZWNvbXByZXNzb3IKIAotaGFzX2NtZGxpbmVfYnVuemlwMiA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCJ3aW4zMiIsICJvczJlbXgiKQogCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIkJhc2UgZm9yIG90aGVyIHRlc3RjYXNlcy4iCisKICAgICBURVhUX0xJTkVTID0gWwogICAgICAgICBiJ3Jvb3Q6eDowOjA6cm9vdDovcm9vdDovYmluL2Jhc2hcbicsCiAgICAgICAgIGInYmluOng6MToxOmJpbjovYmluOlxuJywKQEAgLTUyLDEzICs1MywxNyBAQAogICAgIEJBRF9EQVRBID0gYid0aGlzIGlzIG5vdCBhIHZhbGlkIGJ6aXAyIGZpbGUnCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSBURVNURk4KKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNlbGYuZmlsZW5hbWUpOgogICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuZmlsZW5hbWUpCiAKLSAgICBpZiBoYXNfY21kbGluZV9idW56aXAyOgorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAjIGJ1bnppcDIgaXNuJ3QgYXZhaWxhYmxlIHRvIHJ1biBvbiBXaW5kb3dzLgorICAgICAgICBkZWYgZGVjb21wcmVzcyhzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHJldHVybiBiejIuZGVjb21wcmVzcyhkYXRhKQorICAgIGVsc2U6CiAgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgogICAgICAgICAgICAgcG9wID0gc3VicHJvY2Vzcy5Qb3BlbigiYnVuemlwMiIsIHNoZWxsPVRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKQEAgLTcyLDEzICs3Nyw5IEBACiAgICAgICAgICAgICAgICAgcmV0ID0gYnoyLmRlY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgIHJldHVybiByZXQKIAotICAgIGVsc2U6Ci0gICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCi0gICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgotICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCiAKIGNsYXNzIEJaMkZpbGVUZXN0KEJhc2VUZXN0KToKLSAgICAiVGVzdCBCWjJGaWxlIHR5cGUgbWlzY2VsbGFuZW91cyBtZXRob2RzLiIKKyAgICAiVGVzdCB0aGUgQloyRmlsZSBjbGFzcy4iCiAKICAgICBkZWYgY3JlYXRlVGVtcEZpbGUoc2VsZiwgc3RyZWFtcz0xLCBzdWZmaXg9YiIiKToKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CkBAIC04NiwxOCArODcsMTIgQEAKICAgICAgICAgICAgIGYud3JpdGUoc3VmZml4KQogCiAgICAgZGVmIHRlc3RCYWRBcmdzKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKDEyMy40NTYpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAieiIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicngiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgQloyRmlsZSgiL2Rldi9udWxsIiwgInJidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTApCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEJaMkZpbGUsIDEyMy40NTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAieiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCAicngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBCWjJGaWxlLCAiL2Rldi9udWxsIiwgInJidCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEJaMkZpbGUsICIvZGV2L251bGwiLCBjb21wcmVzc2xldmVsPTEwKQogCiAgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKQEAgLTIzMyw5ICsyMjgsOCBAQAogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKICAgICAgICAgYnoyZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYuX19uZXh0X18pCi0gICAgICAgICMgVGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGFib3ZlIC5fX25leHRfXyBjYWxsIGZhaWxlZCB0bwotICAgICAgICAjIHJlbGVhc2UgdGhlIGxvY2suCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGJ6MmYpCisgICAgICAgICMgVGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGFib3ZlIGNhbGwgZmFpbGVkIHRvIHJlbGVhc2UgdGhlIGxvY2suCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGxpbmVzKQogCiAgICAgZGVmIHRlc3RXcml0ZShzZWxmKToKQEAgLTI3OSw4ICsyNzMsOCBAQAogICAgICAgICAgICAgYnoyZi53cml0ZShiImFiYyIpCiAKICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgYnoyZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFtiImEiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFtiImEiXSkKIAogICAgIGRlZiB0ZXN0QXBwZW5kKHNlbGYpOgogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgpAQCAtMzk4LDcgKzM5Miw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5zZWVrYWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiejJmLnNlZWthYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00MjQsNyArNDE4LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnJlYWRhYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYucmVhZGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQ0MSw3ICs0MzUsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYud3JpdGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiejJmLndyaXRhYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00NTUsNyArNDQ5LDcgQEAKICAgICAgICAgICAgIGRlbCBvCiAKICAgICBkZWYgdGVzdE9wZW5Ob25leGlzdGVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgQloyRmlsZSwgIi9ub24vZXhpc3RlbnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCiAKICAgICBkZWYgdGVzdFJlYWRsaW5lc05vTmV3bGluZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTE5MTA0MzogcmVhZGxpbmVzKCkgZmFpbHMgb24gYSBmaWxlIGNvbnRhaW5pbmcgbm8gbmV3bGluZS4KQEAgLTQ5NSw3ICs0ODksNyBAQAogICAgICAgICAjIElzc3VlICM3MjA1OiBVc2luZyBhIEJaMkZpbGUgZnJvbSBzZXZlcmFsIHRocmVhZHMgc2hvdWxkbid0IGRlYWRsb2NrLgogICAgICAgICBkYXRhID0gYiIxIiAqIDIqKjIwCiAgICAgICAgIG50aHJlYWRzID0gMTAKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGRlZiBjb21wKCk6CiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKQEAgLTUwNiwyOCArNTAwLDI3IEBACiAgICAgICAgICAgICAgICAgdC5qb2luKCkKIAogICAgIGRlZiB0ZXN0V2l0aG91dFRocmVhZGluZyhzZWxmKToKLSAgICAgICAgYnoyID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgiYnoyIiwgYmxvY2tlZD0oInRocmVhZGluZyIsKSkKKyAgICAgICAgd2l0aCBtb2R1bGUuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImFiYyIpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgd2l0aCBtb2R1bGUuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJhYmMiKQogCiAgICAgZGVmIHRlc3RNaXhlZEl0ZXJhdGlvbkFuZFJlYWRzKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgbGluZWxlbiA9IGxlbihzZWxmLlRFWFRfTElORVNbMF0pCiAgICAgICAgIGhhbGZsZW4gPSBsaW5lbGVuIC8vIDIKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKICAgICAgICAgICAgIGJ6MmYucmVhZChoYWxmbGVuKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGJ6MmYpLCBzZWxmLlRFWFRfTElORVNbMF1baGFsZmxlbjpdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUW2xpbmVsZW46XSkKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKICAgICAgICAgICAgIGJ6MmYucmVhZGxpbmUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGJ6MmYpLCBzZWxmLlRFWFRfTElORVNbMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmUoKSwgc2VsZi5URVhUX0xJTkVTWzJdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZXMoKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKLSAgICAgICAgICAgICAgICBuZXh0KGJ6MmYpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBiejJmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lcygpLCBbXSkKIAogICAgIGRlZiB0ZXN0TXVsdGlTdHJlYW1PcmRlcmluZyhzZWxmKToKQEAgLTU5NSw2ICs1ODgsMjAgQEAKICAgICAgICAgICAgICAgICBiejJmLnNlZWsoLTE1MCwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbNTAwLTE1MDpdKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgICMgRHJvcCB0aGUgZW9zX21hZ2ljIGZpZWxkICg2IGJ5dGVzKSBhbmQgQ1JDICg0IGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gc2VsZi5EQVRBWzotMTBdCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIEJaMkZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQobGVuKHNlbGYuVEVYVCkpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorICAgICAgICAjIEluY29tcGxldGUgNC1ieXRlIGZpbGUgaGVhZGVyLCBhbmQgYmxvY2sgaGVhZGVyIG9mIGF0IGxlYXN0IDE0NiBiaXRzLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyMik6CisgICAgICAgICAgICB3aXRoIEJaMkZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCisKIGNsYXNzIEJaMkNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgogICAgICAgICBiejJjID0gQloyQ29tcHJlc3NvcigpCkBAIC03NDEsOTcgKzc0OCwxMjIgQEAKIAogCiBjbGFzcyBPcGVuVGVzdChCYXNlVGVzdCk6CisgICAgIlRlc3QgdGhlIG9wZW4gZnVuY3Rpb24uIgorCisgICAgZGVmIG9wZW4oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcmV0dXJuIGJ6Mi5vcGVuKCphcmdzLCAqKmt3YXJncykKKwogICAgIGRlZiB0ZXN0X2JpbmFyeV9tb2RlcyhzZWxmKToKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgid2IiLCAieGIiKToKKyAgICAgICAgICAgIGlmIG1vZGUgPT0gInhiIjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImFiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKIAogICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2JpbmFyeV9tb2RlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGltcGxpY2l0IGJpbmFyeSBtb2RlcyAobm8gImIiIG9yICJ0IiBpbiBtb2RlIHN0cmluZykuCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInciKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQorICAgICAgICBmb3IgbW9kZSBpbiAoInciLCAieCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieCI6CisgICAgICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImEiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfdGV4dF9tb2RlcyhzZWxmKToKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKICAgICAgICAgdGV4dF9uYXRpdmVfZW9sID0gdGV4dC5yZXBsYWNlKCJcbiIsIG9zLmxpbmVzZXApCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhdCIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHRleHQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgid3QiLCAieHQiKToKKyAgICAgICAgICAgIGlmIG1vZGUgPT0gInh0IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wgKiAyKQorCisgICAgZGVmIHRlc3RfeF9tb2RlKHNlbGYpOgorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiLCAieHQiKToKKyAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZmlsZW9iaihzZWxmKToKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAiciIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oQnl0ZXNJTyhzZWxmLkRBVEEpLCAicnQiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfYmFkX3BhcmFtcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGludmFsaWQgcGFyYW1ldGVyIGNvbWJpbmF0aW9ucy4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAid2J0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAieGJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVycm9ycz0iaWdub3JlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuLCBzZWxmLmZpbGVuYW1lLCAicmIiLCBuZXdsaW5lPSJcbiIpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZyhzZWxmKToKICAgICAgICAgIyBUZXN0IG5vbi1kZWZhdWx0IGVuY29kaW5nLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgZW5jb2Rpbmc9InV0Zi0xNi1sZSIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHRleHQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgidXRmLTE2LWxlIikKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9InV0Zi0xNi1sZSIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB0ZXh0KQogCiAgICAgZGVmIHRlc3RfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcihzZWxmKToKICAgICAgICAgIyBUZXN0IHdpdGggbm9uLWRlZmF1bHQgZW5jb2RpbmcgZXJyb3IgaGFuZGxlci4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiImZvb1x4ZmZiYXIiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9Imlnbm9yZSIpIFwKICAgICAgICAgICAgICAgICBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgImZvb2JhciIpCiAKICAgICBkZWYgdGVzdF9uZXdsaW5lKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBleHBsaWNpdCBuZXdsaW5lICh1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGRpc2FibGVkKS4KICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBuZXdsaW5lPSJcbiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBuZXdsaW5lPSJcciIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3RleHRdKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQppbmRleCA5MDEzYTdiLi4yMmM4ZWIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKIHRyeToKICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNDMsNyArNDQsNyBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF9ub19GYXRhbEVycm9yX2luZmluaXRlX2xvb3Aoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgX3Rlc3RjYXBpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX3Rlc3RjYXBpLmNyYXNoX25vX2N1cnJlbnRfdGhyZWFkKCknXSwKQEAgLTEwOSw2ICsxMTAsMzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfcG9zaXhzdWJwcm9jZXNzLmZvcmtfZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgWigpLFtiJzEnXSwzLFsxLCAyXSw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX3NpZ25hdHVyZV9wYXJzaW5nKHNlbGYpOgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5ub19kb2NzdHJpbmcuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19lbXB0eS5fX2RvY19fLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX2RvY19fLAorICAgICAgICAgICAgImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlIChib28pXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLiIKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZS5fX2RvY19fLAorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUuX190ZXh0X3NpZ25hdHVyZV9fLCAiKHNpZykiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMuX19kb2NfXywKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX3RleHRfc2lnbmF0dXJlX18sCisgICAgICAgICAgICAiKHBhcmFtZXRlcikiKQorCisKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBUZXN0UGVuZGluZ0NhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTkyLDYgKzIyNCw5IEBACiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3N1Ym1pdChsLCBuKQogICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGwsIG4pCiAKKworY2xhc3MgU3ViaW50ZXJwcmV0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CiAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgICByLCB3ID0gb3MucGlwZSgpCkBAIC0yMDIsNDcgKzIzNywxMDkgQEAKICAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcChpZChidWlsdGlucyksIGYpCiAgICAgICAgICAgICAiIiIuZm9ybWF0KHcpCiAgICAgICAgIHdpdGggb3BlbihyLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgcmV0ID0gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBpY2tsZS5sb2FkKGYpLCBpZChzeXMubW9kdWxlcykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBpY2tsZS5sb2FkKGYpLCBpZChidWlsdGlucykpCiAKKwogIyBCdWcgIzYwMTIKIGNsYXNzIFRlc3Q2MDEyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuYXJncGFyc2luZygiSGVsbG8iLCAiV29ybGQiKSwgMSkKIAogCi1jbGFzcyBFbWJlZGRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInRlc3QgZG9lc24ndCB3b3JrIHVuZGVyIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6Ci0gICAgICAgICMgWFhYIG9ubHkgdGVzdGVkIHVuZGVyIFVuaXggY2hlY2tvdXRzCitjbGFzcyBFbWJlZGRpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBiYXNlcGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpCi0gICAgICAgIG9sZGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGV4ZW5hbWUgPSAiX3Rlc3RlbWJlZCIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgICAgICAgICAgZXh0ID0gKCJfZCIgaWYgIl9kIiBpbiBzeXMuZXhlY3V0YWJsZSBlbHNlICIiKSArICIuZXhlIgorICAgICAgICAgICAgZXhlbmFtZSArPSBleHQKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVwYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAiTW9kdWxlcyIpCisgICAgICAgIHNlbGYudGVzdF9leGUgPSBleGUgPSBvcy5wYXRoLmpvaW4oZXhlcGF0aCwgZXhlbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBkb2Vzbid0IGV4aXN0IiAlIGV4ZSkKICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCBvdGhlcndpc2Ugd2UgZ2V0IGEgZmF0YWwgZXJyb3I6CiAgICAgICAgICMgIlB5X0luaXRpYWxpemU6IFVuYWJsZSB0byBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZwogICAgICAgICAjIExvb2t1cEVycm9yOiBubyBjb2RlYyBzZWFyY2ggZnVuY3Rpb25zIHJlZ2lzdGVyZWQ6IGNhbid0IGZpbmQgZW5jb2RpbmciCisgICAgICAgIHNlbGYub2xkY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIoYmFzZXBhdGgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYub2xkY3dkKQorCisgICAgZGVmIHJ1bl9lbWJlZGRlZF9pbnRlcnByZXRlcihzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJ1bnMgYSB0ZXN0IGluIHRoZSBlbWJlZGRlZCBpbnRlcnByZXRlciIiIgorICAgICAgICBjbWQgPSBbc2VsZi50ZXN0X2V4ZV0KKyAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByZXR1cm5jb2RlICVkLCBzdGRlcnIgaXMgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocC5yZXR1cm5jb2RlLCBlcnIpKQorICAgICAgICByZXR1cm4gb3V0LmRlY29kZSgibGF0aW4xIiksIGVyci5kZWNvZGUoImxhdGluMSIpCisKKyAgICBkZWYgdGVzdF9zdWJpbnRlcnBzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMganVzdCBhICJkb24ndCBjcmFzaCIgdGVzdAorICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCkKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQob3V0KQorICAgICAgICAgICAgcHJpbnQoZXJyKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpOgorICAgICAgICBycCwgd3AgPSBvcy5waXBlKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAiTW9kdWxlcyIsICJfdGVzdGVtYmVkIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleGUpOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIGRvZXNuJ3QgZXhpc3QiICUgZXhlKQotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW2V4ZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocC5yZXR1cm5jb2RlLCBlcnIpKQotICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgICAgICBwcmludChvdXQuZGVjb2RlKCdsYXRpbjEnKSkKLSAgICAgICAgICAgICAgICBwcmludChlcnIuZGVjb2RlKCdsYXRpbjEnKSkKKyAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKHdwLCAndycpIGFzIHc6CisgICAgICAgICAgICAgICAgZGVmYXVsdF9waXBlX2VuY29kaW5nID0gdy5lbmNvZGluZwogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorICAgICAgICAgICAgb3MuY2xvc2UocnApCisgICAgICAgIHJldHVybiBkZWZhdWx0X3BpcGVfZW5jb2RpbmcKKworICAgIGRlZiB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBDaGVja3MgZm9yY2VkIGNvbmZpZ3VyYXRpb24gb2YgZW1iZWRkZWQgaW50ZXJwcmV0ZXIgSU8gc3RyZWFtcworICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCJmb3JjZWRfaW9fZW5jb2RpbmciKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisgICAgICAgIGV4cGVjdGVkX3N0ZGluX2VuY29kaW5nID0gc3lzLl9fc3RkaW5fXy5lbmNvZGluZworICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nID0gc2VsZi5fZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9IG9zLmxpbmVzZXAuam9pbihbCisgICAgICAgICItLS0gVXNlIGRlZmF1bHRzIC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAorICAgICAgICAic3RkaW46IHswfTpzdHJpY3QiLAorICAgICAgICAic3Rkb3V0OiB7MX06c3RyaWN0IiwKKyAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlcnJvcnMgb25seSAtLS0iLAorICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHQiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkaW46IHswfTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3Rkb3V0OiB7MX06c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAorICAgICAgICAic3RkaW46IGxhdGluLTE6c3RyaWN0IiwKKyAgICAgICAgInN0ZG91dDogbGF0aW4tMTpzdHJpY3QiLAorICAgICAgICAic3RkZXJyOiBsYXRpbi0xOmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSJdKS5mb3JtYXQoZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGlwZV9lbmNvZGluZykKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBldmVyIHRyaXAgb3ZlciBvZGQgcGxhdGZvcm0gYmVoYXZpb3VyCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWRfb3V0cHV0KQogCiBjbGFzcyBTa2lwaXRlbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNTQsOCArNDUxLDkgQEAKICAgICBkZWYgdGVzdF9fdGVzdGNhcGkoc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIGRpcihfdGVzdGNhcGkpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpOgotICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKF90ZXN0Y2FwaSwgbmFtZSkKLSAgICAgICAgICAgICAgICB0ZXN0KCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiaW50ZXJuYWwiLCBuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gZ2V0YXR0cihfdGVzdGNhcGksIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRlc3QoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKaW5kZXggYTg5ZDdlNC4uMzI3YzE0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CkBAIC00LDYgKzQsNyBAQAogCiBpbXBvcnQgdGVzdC5zdXBwb3J0LCB1bml0dGVzdAogaW1wb3J0IG9zCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCkBAIC00MSw4ICs0MiwxMCBAQAogCiAgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKICAgICAgICAgdmVyc2lvbiA9ICgnUHl0aG9uICVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKS5lbmNvZGUoImFzY2lpIikKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLVYnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyLnN0YXJ0c3dpdGgodmVyc2lvbikpCisgICAgICAgIGZvciBzd2l0Y2ggaW4gJy1WJywgJy0tdmVyc2lvbic6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHN3aXRjaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLnN0YXJ0c3dpdGgodmVyc2lvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LnN0YXJ0c3dpdGgodmVyc2lvbikpCiAKICAgICBkZWYgdGVzdF92ZXJib3NlKHNlbGYpOgogICAgICAgICAjIC12IGNhdXNlcyBpbXBvcnRzIHRvIHdyaXRlIHRvIHN0ZGVyci4gIElmIHRoZSB3cml0ZSB0bwpAQCAtNTQsMTQgKzU3LDQ5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidzdGFjayBvdmVyZmxvdycsIGVycikKIAogICAgIGRlZiB0ZXN0X3hvcHRpb25zKHNlbGYpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCi0gICAgICAgIG9wdHMgPSBldmFsKG91dC5zcGxpdGxpbmVzKClbMF0pCisgICAgICAgIGRlZiBnZXRfeG9wdGlvbnMoKmFyZ3MpOgorICAgICAgICAgICAgIyB1c2Ugc3VicHJvY2VzcyBtb2R1bGUgZGlyZWN0bHkgYmVjYXVzZSB0ZXN0LnNjcmlwdF9oZWxwZXIgYWRkcworICAgICAgICAgICAgIyAiLVggZmF1bHRoYW5kbGVyIiB0byB0aGUgY29tbWFuZCBsaW5lCisgICAgICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLUUnKSArIGFyZ3MKKyAgICAgICAgICAgIGFyZ3MgKz0gKCctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgICAgIHJldHVybiBvcHRzCisKKyAgICAgICAgb3B0cyA9IGdldF94b3B0aW9ucygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywge30pCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soCi0gICAgICAgICAgICAnLVhhJywgJy1YYj1jLGQ9ZScsICctYycsICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScpCi0gICAgICAgIG9wdHMgPSBldmFsKG91dC5zcGxpdGxpbmVzKClbMF0pCisKKyAgICAgICAgb3B0cyA9IGdldF94b3B0aW9ucygnLVhhJywgJy1YYj1jLGQ9ZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0cywgeydhJzogVHJ1ZSwgJ2InOiAnYyxkPWUnfSkKIAorICAgIGRlZiB0ZXN0X3Nob3dyZWZjb3VudChzZWxmKToKKyAgICAgICAgZGVmIHJ1bl9weXRob24oKmFyZ3MpOgorICAgICAgICAgICAgIyB0aGlzIGlzIHNpbWlsYXIgdG8gYXNzZXJ0X3B5dGhvbl9vayBidXQgZG9lc24ndCBzdHJpcAorICAgICAgICAgICAgIyB0aGUgcmVmY291bnQgZnJvbSBzdGRlcnIuICBJdCBjYW4gYmUgcmVwbGFjZWQgb25jZQorICAgICAgICAgICAgIyBhc3NlcnRfcHl0aG9uX29rIHN0b3BzIGRvaW5nIHRoYXQuCisgICAgICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGVdCisgICAgICAgICAgICBjbWQuZXh0ZW5kKGFyZ3MpCisgICAgICAgICAgICBQSVBFID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSkKKyAgICAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBwLnN0ZG91dC5jbG9zZSgpCisgICAgICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgICAgICAgICByYyA9IHAucmV0dXJuY29kZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgICAgIHJldHVybiByYywgb3V0LCBlcnIKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgc3lzOyBwcmludChzeXMuX3hvcHRpb25zKScKKyAgICAgICAgIyBub3JtYWxseSB0aGUgcmVmY291bnQgaXMgaGlkZGVuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHJ1bl9weXRob24oJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIne30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorICAgICAgICAjICItWCBzaG93cmVmY291bnQiIHNob3dzIHRoZSByZWZjb3VudCwgYnV0IG9ubHkgaW4gZGVidWcgYnVpbGRzCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHJ1bl9weXRob24oJy1YJywgJ3Nob3dyZWZjb3VudCcsICctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBiInsnc2hvd3JlZmNvdW50JzogVHJ1ZX0iKQorICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKTogICMgZGVidWcgYnVpbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBicideXFtcZCsgcmVmcywgXGQrIGJsb2Nrc1xdJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKICAgICBkZWYgdGVzdF9ydW5fbW9kdWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZXhwZWN0ZWQgb3BlcmF0aW9uIG9mIHRoZSAnLW0nIHN3aXRjaAogICAgICAgICAjIFN3aXRjaCBuZWVkcyBhbiBhcmd1bWVudApAQCAtNzAsOSArMTA4LDkgQEAKICAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdmbm9yZDQzNTIweHl6JykKICAgICAgICAgIyBDaGVjayB0aGUgcnVucHkgbW9kdWxlIGFsc28gZ2l2ZXMgYW4gZXJyb3IgZm9yCiAgICAgICAgICMgYSBub25leGlzdGVudCBtb2R1bGUKLSAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JyksCisgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAncnVucHknLCAnZm5vcmQ0MzUyMHh5eicpCiAgICAgICAgICMgQWxsIGdvb2QgaWYgbW9kdWxlIGlzIGxvY2F0ZWQgYW5kIHJ1biBzdWNjZXNzZnVsbHkKLSAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKSwKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKQogCiAgICAgZGVmIHRlc3RfcnVuX21vZHVsZV9idWcxNzY0NDA3KHNlbGYpOgogICAgICAgICAjIC1tIGFuZCAtaSBuZWVkIHRvIHBsYXkgd2VsbCB0b2dldGhlcgpAQCAtMjEzLDYgKzI1MSwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgxLmVuY29kZSgnYXNjaWknKSwgb3V0KQogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgyLmVuY29kZSgnYXNjaWknKSwgb3V0KQogCisgICAgZGVmIHRlc3RfZW1wdHlfUFlUSE9OUEFUSF9pc3N1ZTE2MzA5KHNlbGYpOgorICAgICAgICAjIE9uIFBvc2l4LCBpdCBpcyBkb2N1bWVudGVkIHRoYXQgc2V0dGluZyBQQVRIIHRvIHRoZQorICAgICAgICAjIGVtcHR5IHN0cmluZyBpcyBlcXVpdmFsZW50IHRvIG5vdCBzZXR0aW5nIFBBVEggYXQgYWxsLAorICAgICAgICAjIHdoaWNoIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgcnVsZSB0aGF0IGluIGEgc3RyaW5nIGxpa2UKKyAgICAgICAgIyAiL2Jpbjo6L3Vzci9iaW4iIHRoZSBlbXB0eSBzdHJpbmcgaW4gdGhlIG1pZGRsZSBnZXRzCisgICAgICAgICMgaW50ZXJwcmV0ZWQgYXMgJy4nCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgcGF0aCA9ICI6Ii5qb2luKHN5cy5wYXRoKQorICAgICAgICAgICAgcGF0aCA9IHBhdGguZW5jb2RlKCJhc2NpaSIsICJiYWNrc2xhc2hyZXBsYWNlIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKHBhdGgpIiIiCisgICAgICAgIHJjMSwgb3V0MSwgZXJyMSA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgUFlUSE9OUEFUSD0iIikKKyAgICAgICAgcmMyLCBvdXQyLCBlcnIyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBfX2lzb2xhdGVkPUZhbHNlKQorICAgICAgICAjIHJlZ2FyZGluZyB0byBQb3NpeCBzcGVjaWZpY2F0aW9uLCBvdXRwdXRzIHNob3VsZCBiZSBlcXVhbAorICAgICAgICAjIGZvciBlbXB0eSBhbmQgdW5zZXQgUFlUSE9OUEFUSAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dDEsIG91dDIpCisKICAgICBkZWYgdGVzdF9kaXNwbGF5aG9va191bmVuY29kYWJsZShzZWxmKToKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgnYXNjaWknLCAnbGF0aW4tMScsICd1dGYtOCcpOgogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKQEAgLTI5MCw3ICszNDUsNyBAQAogICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBPU0Vycm9yOiAuKiBpZ25vcmVkJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIGlnbm9yZWQgaW4uKlxuT1NFcnJvcjogLionKQogCiAgICAgZGVmIHRlc3RfY2xvc2VkX3N0ZG91dChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTM0NDQ6IGlmIHN0ZG91dCBoYXMgYmVlbiBleHBsaWNpdGx5IGNsb3NlZCwgd2Ugc2hvdWxkCkBAIC0zODUsNiArNDQwLDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCiAKIAorICAgIGRlZiB0ZXN0X2lzb2xhdGVkbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLUknKQorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSUVzJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUknLCAnLWMnLAorICAgICAgICAgICAgJ2Zyb20gc3lzIGltcG9ydCBmbGFncyBhcyBmOyAnCisgICAgICAgICAgICAncHJpbnQoZi5ub191c2VyX3NpdGUsIGYuaWdub3JlX2Vudmlyb25tZW50LCBmLmlzb2xhdGVkKScsCisgICAgICAgICAgICAjIGR1bW15dmFyIHRvIHByZXZlbnQgZXh0cmFub3VzIC1FCisgICAgICAgICAgICBkdW1teXZhcj0iIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYicxIDEgMScpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdG1wZGlyOgorICAgICAgICAgICAgZmFrZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICJ1dWlkLnB5IikKKyAgICAgICAgICAgIG1haW4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAibWFpbi5weSIpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmFrZSwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoInJhaXNlIFJ1bnRpbWVFcnJvcignaXNvbGF0ZWQgbW9kZSB0ZXN0JylcbiIpCisgICAgICAgICAgICB3aXRoIG9wZW4obWFpbiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB1dWlkXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoInByaW50KCdvaycpXG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgbWFpbl0sIGN3ZD10bXBkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMKQorICAgICAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoW3N5cy5leGVjdXRhYmxlLCAiLUkiLCBtYWluXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD10bXBkaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiIm9rIikKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCiAgICAgdGVzdC5zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQppbmRleCBiNDI2OWI5Li5mODA0ZDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weQpAQCAtMTIzLDcgKzEyMyw3IEBACiAgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CiAgICAgICAgICAgICBjbWRfbGluZV9zd2l0Y2hlcyArPSAoJy0nICsgJ08nICogc3lzLmZsYWdzLm9wdGltaXplLCkKICAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpICsgdHVwbGUoZXhhbXBsZV9hcmdzKQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCpydW5fYXJncykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqcnVuX2FyZ3MsIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuX2NoZWNrX291dHB1dChzY3JpcHRfbmFtZSwgcmMsIG91dCArIGVyciwgZXhwZWN0ZWRfZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYXRoMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3BhY2thZ2UsIGV4cGVjdGVkX2xvYWRlcikKQEAgLTI5NCw3ICsyOTQsNyBAQAogICAgICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyLCAiaW1wb3J0IHN5czsgcHJpbnQoJ2luaXRfYXJndjA9PSVyJyAlIHN5cy5hcmd2WzBdKSIpCiAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnc2NyaXB0JykKLSAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0ZXN0X3BrZy5zY3JpcHQnLCAqZXhhbXBsZV9hcmdzKQorICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ3Rlc3RfcGtnLnNjcmlwdCcsICpleGFtcGxlX2FyZ3MsIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KG91dCkKICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJpbml0X2FyZ3YwPT0lciIgJSAnLW0nCkBAIC0zMTEsNyArMzExLDggQEAKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1jIiwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKICAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KCJzeXMucGF0aFswXT09JXIiICUgc3lzLnBhdGhbMF0pJykKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMToKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KG91dCkKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAic3lzLnBhdGhbMF09PSVyIiAlICcnCkBAIC0zMjUsNyArMzI2LDggQEAKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKHBhdGg9c2NyaXB0X2Rpcik6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItbSIsICJ3IikgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCi0gICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ290aGVyJywgKmV4YW1wbGVfYXJncykKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnb3RoZXInLCAqZXhhbXBsZV9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX291dHB1dChzY3JpcHRfbmFtZSwgcmMsIG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lLCAnJywgJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CmluZGV4IGFkZWYxNzAuLjVmZDIxZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQpAQCAtNjQsNiArNjQsMjAgQEAKICAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhvb2suY2FsbGVkKQogCisgICAgZGVmIHRlc3RfYmFubmVyKHNlbGYpOgorICAgICAgICAjIHdpdGggYmFubmVyCisgICAgICAgIHNlbGYuaW5mdW5jLnNpZGVfZWZmZWN0ID0gRU9GRXJyb3IoJ0ZpbmlzaGVkJykKKyAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KGJhbm5lcj0nRm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzKSwgMikKKyAgICAgICAgYmFubmVyX2NhbGwgPSBzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYW5uZXJfY2FsbCwgWyd3cml0ZScsICgnRm9vXG4nLCksIHt9XSkKKworICAgICAgICAjIG5vIGJhbm5lcgorICAgICAgICBzZWxmLnN0ZGVyci5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5pbmZ1bmMuc2lkZV9lZmZlY3QgPSBFT0ZFcnJvcignRmluaXNoZWQnKQorICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoYmFubmVyPScnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHMpLCAxKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0SW50ZXJhY3RpdmVDb25zb2xlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKaW5kZXggZmQ4ODUwNS4uODQ4MDRiYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CkBAIC04NzUsOCArODc1LDYgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVjb2RlKGVuY29kaW5nLCAidGVzdC5yZXBsYWNpbmciKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2RlY0NhbGxiYWNrVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQppbmRleCAzNTE3MDU3Li5mNjgyMzgwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQpAQCAtMSwxMCArMSwxMiBAQAogaW1wb3J0IF90ZXN0Y2FwaQogaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbwogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBlbmNvZGluZ3MKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTI5OSw4ICszMDEsNDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZGxpbmUoKSwgczUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksICIiKQogCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlID0gIlx1ZmZmZCIKKworICAgIGRlZiB0ZXN0X2xvbmVfc3Vycm9nYXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCAiXHVkODAwIi5lbmNvZGUsIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgImJhY2tzbGFzaHJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiW1xcdWRjODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgInhtbGNoYXJyZWZyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlsmIzU2NDQ4O10iLmVuY29kZShzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZShzZWxmLmVuY29kaW5nLCAiaWdub3JlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIltdIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWz9dIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisKKyAgICAgICAgYm9tID0gIiIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGZvciBiZWZvcmUsIGFmdGVyIGluIFsoIlxVMDAwMTBmZmYiLCAiQSIpLCAoIlsiLCAiXSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJBIiwgIlxVMDAwMTBmZmYiKV06CisgICAgICAgICAgICBiZWZvcmVfc2VxdWVuY2UgPSBiZWZvcmUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpW2xlbihib20pOl0KKyAgICAgICAgICAgIGFmdGVyX3NlcXVlbmNlID0gYWZ0ZXIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpW2xlbihib20pOl0KKyAgICAgICAgICAgIHRlc3Rfc3RyaW5nID0gYmVmb3JlICsgIlx1REM4MCIgKyBhZnRlcgorICAgICAgICAgICAgdGVzdF9zZXF1ZW5jZSA9IChib20gKyBiZWZvcmVfc2VxdWVuY2UgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlsbF9mb3JtZWRfc2VxdWVuY2UgKyBhZnRlcl9zZXF1ZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgdGVzdF9zZXF1ZW5jZS5kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3N0cmluZy5lbmNvZGUoc2VsZi5lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVwYXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Rfc2VxdWVuY2UuZGVjb2RlKHNlbGYuZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVwYXNzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Rfc3RyaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLCAiaWdub3JlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSArIGFmdGVyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLCAicmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKyBzZWxmLmlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSArIGFmdGVyKQorCiBjbGFzcyBVVEYzMlRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzIiCisgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGNceDAwXHgwMCIKKyAgICBlbHNlOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDAwXHgwMFx4ZGNceDgwIgogCiAgICAgc3BhbWxlID0gKGInXHhmZlx4ZmVceDAwXHgwMCcKICAgICAgICAgICAgICAgYidzXHgwMFx4MDBceDAwcFx4MDBceDAwXHgwMGFceDAwXHgwMFx4MDBtXHgwMFx4MDBceDAwJwpAQCAtMzkyLDYgKzQzMiw3IEBACiAKIGNsYXNzIFVURjMyTEVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWxlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjXHgwMFx4MDAiCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCkBAIC00MzYsNiArNDc3LDcgQEAKIAogY2xhc3MgVVRGMzJCRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMzItYmUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHgwMFx4MDBceGRjXHg4MCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTQ4MSw2ICs1MjMsMTAgQEAKIAogY2xhc3MgVVRGMTZUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTE2IgorICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjIgorICAgIGVsc2U6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZGNceDgwIgogCiAgICAgc3BhbWxlID0gYidceGZmXHhmZXNceDAwcFx4MDBhXHgwMG1ceDAwc1x4MDBwXHgwMGFceDAwbVx4MDAnCiAgICAgc3BhbWJlID0gYidceGZlXHhmZlx4MDBzXHgwMHBceDAwYVx4MDBtXHgwMHNceDAwcFx4MDBhXHgwMG0nCkBAIC01NTYsMTEgKzYwMiwxNCBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgogICAgICAgICAgICAgZnAud3JpdGUocykKLSAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgJ1UnLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKSBhcyByZWFkZXI6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLm9wZW4oc3VwcG9ydC5URVNURk4sICdVJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKKyAgICAgICAgd2l0aCByZWFkZXI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkKCksIHMxKQogCiBjbGFzcyBVVEYxNkxFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkYyIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTYwNCw2ICs2NTMsNyBAQAogCiBjbGFzcyBVVEYxNkJFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0xNi1iZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceGRjXHg4MCIKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTY0Nyw2ICs2OTcsOCBAQAogCiBjbGFzcyBVVEY4VGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi04IgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ZWRceGIyXHg4MCIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgPSAiXHVmZmZkIiAqIDMKIAogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKQEAgLTY3NiwxOCArNzI4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUsIHUuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQogCiAgICAgZGVmIHRlc3RfbG9uZV9zdXJyb2dhdGVzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRW5jb2RlRXJyb3IsICJcdWQ4MDAiLmVuY29kZSwgInV0Zi04IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBiIlx4ZWRceGEwXHg4MCIuZGVjb2RlLCAidXRmLTgiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJiYWNrc2xhc2hyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbXFx1ZGM4MF0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJ4bWxjaGFycmVmcmVwbGFjZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInWyYjNTY0NDg7XScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgInN1cnJvZ2F0ZWVzY2FwZSIpLAorICAgICAgICBzdXBlcigpLnRlc3RfbG9uZV9zdXJyb2dhdGVzKCkKKyAgICAgICAgIyBub3Qgc3VyZSBpZiB0aGlzIGlzIG1ha2luZyBzZW5zZSBmb3IKKyAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCd1dGYtOCcsICJzdXJyb2dhdGVlc2NhcGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tceDgwXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoInV0Zi04IiwgImlnbm9yZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInW10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJyZXBsYWNlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidbP10nKQogCiAgICAgZGVmIHRlc3Rfc3Vycm9nYXRlcGFzc19oYW5kbGVyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhYmNcdWQ4MDBkZWYiLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlcGFzcyIpLApAQCAtODQwLDE1ICs4ODUsMTkgQEAKICAgICAgICAgICAgIChiJ2ErLy8vLywrSUt3LWInLCAnYVx1ZmZmZlx1ZmZmZFx1MjBhY2InKSwKICAgICAgICAgXQogICAgICAgICBmb3IgcmF3LCBleHBlY3RlZCBpbiB0ZXN0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChyYXc9cmF3KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGNvZGVjcy51dGZfN19kZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdywgJ3N0cmljdCcsIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXcuZGVjb2RlKCd1dGYtNycsICdyZXBsYWNlJyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcVTAwMDEwNEEwJy5lbmNvZGUoc2VsZi5lbmNvZGluZyksIGInKzJBSGNvQS0nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcdWQ4MDFcdWRjYTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMkFIY29BLScuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCAnXFUwMDAxMDRBMCcpCiAKKyAgICB0ZXN0X2xvbmVfc3Vycm9nYXRlcyA9IE5vbmUKKworCiBjbGFzcyBVVEYxNkV4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CkBAIC04NzMsNyArOTIyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlLCA0MikKIAotY2xhc3MgVVRGOFNpZ1Rlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFVURjhTaWdUZXN0KFVURjhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgtc2lnIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKQEAgLTE1NTUsNiArMTYwNCw3IEBACiAgICAgImNwMDM3IiwKICAgICAiY3AxMDA2IiwKICAgICAiY3AxMDI2IiwKKyAgICAiY3AxMTI1IiwKICAgICAiY3AxMTQwIiwKICAgICAiY3AxMjUwIiwKICAgICAiY3AxMjUxIiwKQEAgLTIyNzMsNDYgKzIzMjMsMzE5IEBACiAgICAgInF1b3ByaV9jb2RlYyIsCiAgICAgImhleF9jb2RlYyIsCiBdCisKK3RyYW5zZm9ybV9hbGlhc2VzID0geworICAgICJiYXNlNjRfY29kZWMiOiBbImJhc2U2NCIsICJiYXNlXzY0Il0sCisgICAgInV1X2NvZGVjIjogWyJ1dSJdLAorICAgICJxdW9wcmlfY29kZWMiOiBbInF1b3ByaSIsICJxdW90ZWRfcHJpbnRhYmxlIiwgInF1b3RlZHByaW50YWJsZSJdLAorICAgICJoZXhfY29kZWMiOiBbImhleCJdLAorICAgICJyb3RfMTMiOiBbInJvdDEzIl0sCit9CisKIHRyeToKICAgICBpbXBvcnQgemxpYgogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHBhc3MKIGVsc2U6CiAgICAgYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5ncy5hcHBlbmQoInpsaWJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJ6bGliX2NvZGVjIl0gPSBbInppcCIsICJ6bGliIl0KIHRyeToKICAgICBpbXBvcnQgYnoyCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiYnoyX2NvZGVjIikKKyAgICB0cmFuc2Zvcm1fYWxpYXNlc1siYnoyX2NvZGVjIl0gPSBbImJ6MiJdCiAKIGNsYXNzIFRyYW5zZm9ybUNvZGVjVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CiAgICAgICAgIGJpbnB1dCA9IGJ5dGVzKHJhbmdlKDI1NikpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKLSAgICAgICAgICAgIChvLCBzaXplKSA9IGNvZGVjcy5nZXRlbmNvZGVyKGVuY29kaW5nKShiaW5wdXQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihiaW5wdXQpKQotICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihvKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgYmlucHV0KQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgICMgZ2VuZXJpYyBjb2RlY3MgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIGxlbihiaW5wdXQpKQorICAgICAgICAgICAgICAgIChpLCBzaXplKSA9IGNvZGVjcy5nZXRkZWNvZGVyKGVuY29kaW5nKShvKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgYmlucHV0KQogCiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQotICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQotICAgICAgICAgICAgc291dCA9IHJlYWRlci5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKKyAgICAgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKICAgICAgICAgICAgIGlmIGVuY29kaW5nIGluIFsndXVfY29kZWMnLCAnemxpYl9jb2RlYyddOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzaW4gPSBjb2RlY3MuZW5jb2RlKGIiXHg4MCIsIGVuY29kaW5nKQotICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQotICAgICAgICAgICAgc291dCA9IHJlYWRlci5yZWFkbGluZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvdXQsIGIiXHg4MCIpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgc2luID0gY29kZWNzLmVuY29kZShiIlx4ODAiLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCisgICAgICAgICAgICAgICAgc291dCA9IHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorCisgICAgZGVmIHRlc3RfYnVmZmVyX2FwaV91c2FnZShzZWxmKToKKyAgICAgICAgIyBXZSBjaGVjayBhbGwgdGhlIHRyYW5zZm9ybSBjb2RlY3MgYWNjZXB0IG1lbW9yeXZpZXcgaW5wdXQKKyAgICAgICAgIyBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nCisgICAgICAgICMgYW5kIGFsc28gdGhhdCB0aGV5IHJvdW5kdHJpcCBjb3JyZWN0bHkKKyAgICAgICAgb3JpZ2luYWwgPSBiIjEyMzQ1XHg4MCIKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZGF0YSA9IG9yaWdpbmFsCisgICAgICAgICAgICAgICAgdmlldyA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgICAgICAgICBkYXRhID0gY29kZWNzLmVuY29kZShkYXRhLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICB2aWV3X2VuY29kZWQgPSBjb2RlY3MuZW5jb2RlKHZpZXcsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlld19lbmNvZGVkLCBkYXRhKQorICAgICAgICAgICAgICAgIHZpZXcgPSBtZW1vcnl2aWV3KGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvZGVjcy5kZWNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBvcmlnaW5hbCkKKyAgICAgICAgICAgICAgICB2aWV3X2RlY29kZWQgPSBjb2RlY3MuZGVjb2RlKHZpZXcsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlld19kZWNvZGVkLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdGV4dF90b19iaW5hcnlfYmxhY2tsaXN0c19iaW5hcnlfdHJhbnNmb3JtcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBiaW5hcnkgLT4gYmluYXJ5IGNvZGVjcyBnaXZlIGEgZ29vZCBlcnJvciBmb3Igc3RyIGlucHV0CisgICAgICAgIGJhZF9pbnB1dCA9ICJiYWQgaW5wdXQgdHlwZSIKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZm10ID0gKCAieyFyfSBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICBiYWRfaW5wdXQuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXykKKworICAgIGRlZiB0ZXN0X3RleHRfdG9fYmluYXJ5X2JsYWNrbGlzdHNfdGV4dF90cmFuc2Zvcm1zKHNlbGYpOgorICAgICAgICAjIENoZWNrIHN0ci5lbmNvZGUgZ2l2ZXMgYSBnb29kIGVycm9yIG1lc3NhZ2UgZm9yIHN0ciAtPiBzdHIgY29kZWNzCisgICAgICAgIG1zZyA9IChyIl4ncm90XzEzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJqdXN0IGFuIGV4YW1wbGUgbWVzc2FnZSIuZW5jb2RlKCJyb3RfMTMiKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X3RvX3RleHRfYmxhY2tsaXN0c19iaW5hcnlfdHJhbnNmb3JtcyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBieXRlcy5kZWNvZGUgYW5kIGJ5dGVhcnJheS5kZWNvZGUgZ2l2ZSBhIGdvb2QgZXJyb3IKKyAgICAgICAgIyBtZXNzYWdlIGZvciBiaW5hcnkgLT4gYmluYXJ5IGNvZGVjcworICAgICAgICBkYXRhID0gYiJlbmNvZGUgZmlyc3QgdG8gZW5zdXJlIHdlIG1lZXQgYW55IGZvcm1hdCByZXN0cmljdGlvbnMiCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGVuY29kZWRfZGF0YSA9IGNvZGVjcy5lbmNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZm10ID0gKHIieyFyfSBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZF9kYXRhLmRlY29kZShlbmNvZGluZykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShlbmNvZGVkX2RhdGEpLmRlY29kZShlbmNvZGluZykKKworICAgIGRlZiB0ZXN0X2JpbmFyeV90b190ZXh0X2JsYWNrbGlzdHNfdGV4dF90cmFuc2Zvcm1zKHNlbGYpOgorICAgICAgICAjIENoZWNrIHN0ciAtPiBzdHIgY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBiaW5hcnkgaW5wdXQKKyAgICAgICAgZm9yIGJhZF9pbnB1dCBpbiAoYiJpbW11dGFibGUiLCBieXRlYXJyYXkoYiJtdXRhYmxlIikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYmFkX2lucHV0PWJhZF9pbnB1dCk6CisgICAgICAgICAgICAgICAgbXNnID0gKHIiXidyb3RfMTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICBiYWRfaW5wdXQuZGVjb2RlKCJyb3RfMTMiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXykKKworICAgIGRlZiB0ZXN0X2N1c3RvbV96bGliX2Vycm9yX2lzX3dyYXBwZWQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgemxpYiBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIG1hbGZvcm1lZCBpbnB1dAorICAgICAgICBtc2cgPSAiXmRlY29kaW5nIHdpdGggJ3psaWJfY29kZWMnIGNvZGVjIGZhaWxlZCIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEV4Y2VwdGlvbiwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImhlbGxvIiwgInpsaWJfY29kZWMiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShmYWlsdXJlLmV4Y2VwdGlvbikpCisKKyAgICBkZWYgdGVzdF9jdXN0b21faGV4X2Vycm9yX2lzX3dyYXBwZWQoc2VsZik6CisgICAgICAgICMgQ2hlY2sgaGV4IGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgbWFsZm9ybWVkIGlucHV0CisgICAgICAgIG1zZyA9ICJeZGVjb2Rpbmcgd2l0aCAnaGV4X2NvZGVjJyBjb2RlYyBmYWlsZWQiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJoZWxsbyIsICJoZXhfY29kZWMiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmFpbHVyZS5leGNlcHRpb24uX19jYXVzZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShmYWlsdXJlLmV4Y2VwdGlvbikpCisKKyAgICAjIFVuZm9ydHVuYXRlbHksIHRoZSBiejIgbW9kdWxlIHRocm93cyBPU0Vycm9yLCB3aGljaCB0aGUgY29kZWMKKyAgICAjIG1hY2hpbmVyeSBjdXJyZW50bHkgY2FuJ3Qgd3JhcCA6KAorCisgICAgIyBFbnN1cmUgY29kZWMgYWxpYXNlcyBmcm9tIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3NDc1IHdvcmsKKyAgICBkZWYgdGVzdF9hbGlhc2VzKHNlbGYpOgorICAgICAgICBmb3IgY29kZWNfbmFtZSwgYWxpYXNlcyBpbiB0cmFuc2Zvcm1fYWxpYXNlcy5pdGVtcygpOgorICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZSA9IGNvZGVjcy5sb29rdXAoY29kZWNfbmFtZSkubmFtZQorICAgICAgICAgICAgZm9yIGFsaWFzIGluIGFsaWFzZXM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYWxpYXM9YWxpYXMpOgorICAgICAgICAgICAgICAgICAgICBpbmZvID0gY29kZWNzLmxvb2t1cChhbGlhcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLm5hbWUsIGV4cGVjdGVkX25hbWUpCisKKworIyBUaGUgY29kZWMgc3lzdGVtIHRyaWVzIHRvIHdyYXAgZXhjZXB0aW9ucyBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGVycm9yCisjIG1lbnRpb25zIHRoZSBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIGFuZCB0aGUgY29kZWMgaW52b2x2ZWQuIFdlCisjIGN1cnJlbnRseSAqb25seSogd2FudCB0aGlzIHRvIGhhcHBlbiBmb3IgcmVsYXRpdmVseSBzdGF0ZWxlc3MKKyMgZXhjZXB0aW9ucywgd2hlcmUgdGhlIG9ubHkgc2lnbmlmaWNhbnQgaW5mb3JtYXRpb24gdGhleSBjb250YWluIGlzIHRoZWlyCisjIHR5cGUgYW5kIGEgc2luZ2xlIHN0ciBhcmd1bWVudC4KKworIyBVc2UgYSBsb2NhbCBjb2RlYyByZWdpc3RyeSB0byBhdm9pZCBhcHBlYXJpbmcgdG8gbGVhayBvYmplY3RzIHdoZW4KKyMgcmVnaXN0ZXJpbmcgbXVsdGlwbGUgc2VhY2ggZnVuY3Rpb25zCitfVEVTVF9DT0RFQ1MgPSB7fQorCitkZWYgX2dldF90ZXN0X2NvZGVjKGNvZGVjX25hbWUpOgorICAgIHJldHVybiBfVEVTVF9DT0RFQ1MuZ2V0KGNvZGVjX25hbWUpCitjb2RlY3MucmVnaXN0ZXIoX2dldF90ZXN0X2NvZGVjKSAjIFJldHVybnMgTm9uZSwgbm90IHVzYWJsZSBhcyBhIGRlY29yYXRvcgorCitjbGFzcyBFeGNlcHRpb25DaGFpbmluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFRoZXJlJ3Mgbm8gd2F5IHRvIHVucmVnaXN0ZXIgYSBjb2RlYyBzZWFyY2ggZnVuY3Rpb24sIHNvIHdlIGp1c3QKKyAgICAgICAgIyBlbnN1cmUgd2UgcmVuZGVyIHRoaXMgb25lIGZhaXJseSBoYXJtbGVzcyBhZnRlciB0aGUgdGVzdAorICAgICAgICAjIGNhc2UgZmluaXNoZXMgYnkgdXNpbmcgdGhlIHRlc3QgY2FzZSByZXByIGFzIHRoZSBjb2RlYyBuYW1lCisgICAgICAgICMgVGhlIGNvZGVjcyBtb2R1bGUgbm9ybWFsaXplcyBjb2RlYyBuYW1lcywgYWx0aG91Z2ggdGhpcyBkb2Vzbid0CisgICAgICAgICMgYXBwZWFyIHRvIGJlIGZvcm1hbGx5IGRvY3VtZW50ZWQuLi4KKyAgICAgICAgIyBXZSBhbHNvIG1ha2Ugc3VyZSB3ZSB1c2UgYSB0cnVseSB1bmlxdWUgaWQgZm9yIHRoZSBjdXN0b20gY29kZWMKKyAgICAgICAgIyB0byBhdm9pZCBpc3N1ZXMgd2l0aCB0aGUgY29kZWMgY2FjaGUgd2hlbiBydW5uaW5nIHRoZXNlIHRlc3RzCisgICAgICAgICMgbXVsdGlwbGUgdGltZXMgKGUuZy4gd2hlbiBodW50aW5nIGZvciByZWZsZWFrcykKKyAgICAgICAgdW5pcXVlX2lkID0gcmVwcihzZWxmKSArIHN0cihpZChzZWxmKSkKKyAgICAgICAgc2VsZi5jb2RlY19uYW1lID0gZW5jb2RpbmdzLm5vcm1hbGl6ZV9lbmNvZGluZyh1bmlxdWVfaWQpLmxvd2VyKCkKKworICAgICAgICAjIFdlIHN0b3JlIHRoZSBvYmplY3QgdG8gcmFpc2Ugb24gdGhlIGluc3RhbmNlIGJlY2F1c2Ugb2YgYSBiYWQKKyAgICAgICAgIyBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBjb2RlYyBjYWNoaW5nICh3aGljaCBtZWFucyB3ZSBjYW4ndAorICAgICAgICAjIHJlY3JlYXRlIHRoZSBjb2RlYyBlbnRyeSkgYW5kIHJlZ3J0ZXN0IHJlZmxlYWsgaHVudGluZyAod2hpY2gKKyAgICAgICAgIyBydW5zIHRoZSBzYW1lIHRlc3QgaW5zdGFuY2UgbXVsdGlwbGUgdGltZXMpLiBUaGlzIG1lYW5zIHdlCisgICAgICAgICMgbmVlZCB0byBlbnN1cmUgdGhlIGNvZGVjcyBjYWxsIGJhY2sgaW4gdG8gdGhlIGluc3RhbmNlIHRvIGZpbmQKKyAgICAgICAgIyBvdXQgd2hpY2ggZXhjZXB0aW9uIHRvIHJhaXNlIHJhdGhlciB0aGFuIGJpbmRpbmcgdGhlbSBpbiBhCisgICAgICAgICMgY2xvc3VyZSB0byBhbiBvYmplY3QgdGhhdCBtYXkgY2hhbmdlIG9uIHRoZSBuZXh0IHJ1bgorICAgICAgICBzZWxmLm9ial90b19yYWlzZSA9IFJ1bnRpbWVFcnJvcgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBfVEVTVF9DT0RFQ1MucG9wKHNlbGYuY29kZWNfbmFtZSwgTm9uZSkKKworICAgIGRlZiBzZXRfY29kZWMoc2VsZiwgZW5jb2RlLCBkZWNvZGUpOgorICAgICAgICBjb2RlY19pbmZvID0gY29kZWNzLkNvZGVjSW5mbyhlbmNvZGUsIGRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1zZWxmLmNvZGVjX25hbWUpCisgICAgICAgIF9URVNUX0NPREVDU1tzZWxmLmNvZGVjX25hbWVdID0gY29kZWNfaW5mbworCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgYXNzZXJ0V3JhcHBlZChzZWxmLCBvcGVyYXRpb24sIGV4Y190eXBlLCBtc2cpOgorICAgICAgICBmdWxsX21zZyA9IHIie30gd2l0aCB7IXJ9IGNvZGVjIGZhaWxlZCBcKHt9OiB7fVwpIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICBvcGVyYXRpb24sIHNlbGYuY29kZWNfbmFtZSwgZXhjX3R5cGUuX19uYW1lX18sIG1zZykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KGV4Y190eXBlLCBmdWxsX21zZykgYXMgY2F1Z2h0OgorICAgICAgICAgICAgeWllbGQgY2F1Z2h0CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjYXVnaHQuZXhjZXB0aW9uLl9fY2F1c2VfXywgZXhjX3R5cGUpCisKKyAgICBkZWYgcmFpc2Vfb2JqKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICAjIEhlbHBlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgdGhlIG9iamVjdCByYWlzZWQgYnkgYSB0ZXN0IGNvZGVjCisgICAgICAgIHJhaXNlIHNlbGYub2JqX3RvX3JhaXNlCisKKyAgICBkZWYgY2hlY2tfd3JhcHBlZChzZWxmLCBvYmpfdG9fcmFpc2UsIG1zZywgZXhjX3R5cGU9UnVudGltZUVycm9yKToKKyAgICAgICAgc2VsZi5vYmpfdG9fcmFpc2UgPSBvYmpfdG9fcmFpc2UKKyAgICAgICAgc2VsZi5zZXRfY29kZWMoc2VsZi5yYWlzZV9vYmosIHNlbGYucmFpc2Vfb2JqKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZW5jb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgICJzdHJfaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJlbmNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyX2lucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZGVjb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXcmFwcGVkKCJkZWNvZGluZyIsIGV4Y190eXBlLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfcmFpc2VfYnlfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKFJ1bnRpbWVFcnJvciwgIiIpCisKKyAgICBkZWYgdGVzdF9yYWlzZV9ieV92YWx1ZShzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChSdW50aW1lRXJyb3IobXNnKSwgbXNnKQorCisgICAgZGVmIHRlc3RfcmFpc2VfZ3JhbmRjaGlsZF9zdWJjbGFzc19leGFjdF9zaXplKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgY2xhc3MgTXlSdW50aW1lRXJyb3IoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChNeVJ1bnRpbWVFcnJvcihtc2cpLCBtc2csIE15UnVudGltZUVycm9yKQorCisgICAgZGVmIHRlc3RfcmFpc2Vfc3ViY2xhc3Nfd2l0aF93ZWFrcmVmX3N1cHBvcnQoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBjbGFzcyBNeVJ1bnRpbWVFcnJvcihSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoTXlSdW50aW1lRXJyb3IobXNnKSwgbXNnLCBNeVJ1bnRpbWVFcnJvcikKKworICAgIGRlZiBjaGVja19ub3Rfd3JhcHBlZChzZWxmLCBvYmpfdG9fcmFpc2UsIG1zZyk6CisgICAgICAgIGRlZiByYWlzZV9vYmooKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByYWlzZSBvYmpfdG9fcmFpc2UKKyAgICAgICAgc2VsZi5zZXRfY29kZWMocmFpc2Vfb2JqLCByYWlzZV9vYmopCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAic3RyIGlucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmVuY29kZSgic3RyIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJieXRlcyBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKworICAgIGRlZiB0ZXN0X2luaXRfb3ZlcnJpZGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEN1c3RvbUluaXQoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoQ3VzdG9tSW5pdCwgIiIpCisKKyAgICBkZWYgdGVzdF9uZXdfb3ZlcnJpZGVfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEN1c3RvbU5ldyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscykKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChDdXN0b21OZXcsICIiKQorCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfYXR0cmlidXRlX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgTk9UIGJlIHdyYXBwZWQiCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcihtc2cpCisgICAgICAgIGV4Yy5hdHRyID0gMQorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKGV4YywgIl57fSQiLmZvcm1hdChtc2cpKQorCisgICAgZGVmIHRlc3Rfbm9uX3N0cl9hcmdfaXNfbm90X3dyYXBwZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoUnVudGltZUVycm9yKDEpLCAiMSIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9hcmdzX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBtc2dfcmUgPSByIl5cKCdhJywgJ2InLCAnYydcKSQiCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoUnVudGltZUVycm9yKCdhJywgJ2InLCAnYycpLCBtc2dfcmUpCisKKyAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTYwOQorICAgIGRlZiB0ZXN0X2NvZGVjX2xvb2t1cF9mYWlsdXJlX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBtc2cgPSAiXnVua25vd24gZW5jb2Rpbmc6IHt9JCIuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgIyBUaGUgaW5pdGlhbCBjb2RlYyBsb29rdXAgc2hvdWxkIG5vdCBiZSB3cmFwcGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgICJzdHIgaW5wdXQiLmVuY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoInN0ciBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgYiJieXRlcyBpbnB1dCIuZGVjb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgY29kZWNzLmRlY29kZShiImJ5dGVzIGlucHV0Iiwgc2VsZi5jb2RlY19uYW1lKQorCisgICAgZGVmIHRlc3RfdW5mbGFnZ2VkX25vbl90ZXh0X2NvZGVjX2hhbmRsaW5nKHNlbGYpOgorICAgICAgICAjIFRoZSBzdGRsaWIgbm9uLXRleHQgY29kZWNzIGFyZSBub3cgbWFya2VkIHNvIHRoZXkncmUKKyAgICAgICAgIyBwcmUtZW1wdGl2ZWx5IHNraXBwZWQgYnkgdGhlIHRleHQgbW9kZWwgcmVsYXRlZCBtZXRob2RzCisgICAgICAgICMgSG93ZXZlciwgdGhpcmQgcGFydHkgY29kZWNzIHdvbid0IGJlIGZsYWdnZWQsIHNvIHdlIHN0aWxsIG1ha2UKKyAgICAgICAgIyBzdXJlIHRoZSBjYXNlIHdoZXJlIGFuIGluYXBwcm9wcmlhdGUgb3V0cHV0IHR5cGUgaXMgcHJvZHVjZWQgaXMKKyAgICAgICAgIyBoYW5kbGVkIGFwcHJvcHJpYXRlbHkKKyAgICAgICAgZGVmIGVuY29kZV90b19zdHIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gIm5vdCBieXRlcyEiLCAwCisgICAgICAgIGRlZiBkZWNvZGVfdG9fYnl0ZXMoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYiJub3Qgc3RyISIsIDAKKyAgICAgICAgc2VsZi5zZXRfY29kZWMoZW5jb2RlX3RvX3N0ciwgZGVjb2RlX3RvX2J5dGVzKQorICAgICAgICAjIE5vIGlucHV0IG9yIG91dHB1dCB0eXBlIGNoZWNrcyBvbiB0aGUgY29kZWNzIG1vZHVsZSBmdW5jdGlvbnMKKyAgICAgICAgZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUoTm9uZSwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZWQsICJub3QgYnl0ZXMhIikKKyAgICAgICAgZGVjb2RlZCA9IGNvZGVjcy5kZWNvZGUoTm9uZSwgc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlY29kZWQsIGIibm90IHN0ciEiKQorICAgICAgICAjIFRleHQgbW9kZWwgbWV0aG9kcyBzaG91bGQgY29tcGxhaW4KKyAgICAgICAgZm10ID0gKHIiXnshcn0gZW5jb2RlciByZXR1cm5lZCAnc3RyJyBpbnN0ZWFkIG9mICdieXRlcyc7ICIKKyAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMkIikKKyAgICAgICAgbXNnID0gZm10LmZvcm1hdChzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAic3RyX2lucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBmbXQgPSAociJeeyFyfSBkZWNvZGVyIHJldHVybmVkICdieXRlcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyQiKQorICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKQEAgLTIzMjQsOCArMjY0Nyw4IEBACiAgICAgZGVmIHRlc3RfaW52YWxpZF9jb2RlX3BhZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAtMSwgJ2EnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgLTEsIGInYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9lbmNvZGUsIDEyMywgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAxMjMsIGInYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAxMjMsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIDEyMywgYidhJykKIAogICAgIGRlZiB0ZXN0X2NvZGVfcGFnZV9uYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFVuaWNvZGVFbmNvZGVFcnJvciwgJ2NwOTMyJywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4OWM3YTguLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaywgdW5sb2FkCi1pbXBvcnQgaW1wb3J0bGliLCBvcywgc3lzCi0KLWNsYXNzIENvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2JhZF9jb2Rpbmcoc2VsZik6Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcnCi0gICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCi0KLSAgICBkZWYgdGVzdF9iYWRfY29kaW5nMihzZWxmKToKLSAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZzInCi0gICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCi0KLSAgICBkZWYgdmVyaWZ5X2JhZF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgX19pbXBvcnRfXywgJ3Rlc3QuJyArIG1vZHVsZV9uYW1lKQotCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCi0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6Ci0gICAgICAgICAgICBieXRlcyA9IGZwLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgYnl0ZXMsIGZpbGVuYW1lLCAnZXhlYycpCi0KLSAgICBkZWYgdGVzdF9leGVjX3ZhbGlkX2NvZGluZyhzZWxmKToKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYicjIGNvZGluZzogY3A5NDlcbmEgPSAiXHhhYVx4YTciXG4nLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgJ1x1MzA0NycpCi0KLSAgICBkZWYgdGVzdF9maWxlX3BhcnNlKHNlbGYpOgotICAgICAgICAjIGlzc3VlMTEzNDogYWxsIGVuY29kaW5ncyBvdXRzaWRlIGxhdGluLTEgYW5kIHV0Zi04IGZhaWwgb24KLSAgICAgICAgIyBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgbG9uZyBsaW5lcyAoPjUxMiBjb2x1bW5zKQotICAgICAgICB1bmxvYWQoVEVTVEZOKQotICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICIucHkiCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPSJjcDEyNTIiKQotICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGY6Ci0gICAgICAgICAgICAgICAgZi53cml0ZSgiIyAtKi0gY29kaW5nOiBjcDEyNTIgLSotXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ0Egc2hvcnQgc3RyaW5nXG4iKQotICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ1xuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInQSB2ZXJ5IGxvbmcgc3RyaW5nICVzJ1xuIiAlICgiWCIgKiAxMDAwKSkKLQotICAgICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKLSAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUpCi0gICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAiYyIpCi0gICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAibyIpCi0gICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQotCi0gICAgZGVmIHRlc3RfZXJyb3JfZnJvbV9zdHJpbmcoc2VsZik6Ci0gICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2Mjg5Ci0gICAgICAgIGlucHV0ID0gIiMgY29kaW5nOiBhc2NpaVxuXE57U05PV01BTn0iLmVuY29kZSgndXRmLTgnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKSBhcyBjOgotICAgICAgICAgICAgY29tcGlsZShpbnB1dCwgIjxzdHJpbmc+IiwgImV4ZWMiKQotICAgICAgICBleHBlY3RlZCA9ICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4ZTIgaW4gcG9zaXRpb24gMTY6ICIgXAotICAgICAgICAgICAgICAgICAgICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5leGNlcHRpb24uYXJnc1swXS5zdGFydHN3aXRoKGV4cGVjdGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1jLmV4Y2VwdGlvbi5hcmdzWzBdKQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQppbmRleCBmZjUyNzU1Li41NmU4MTIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKQEAgLTExMiw2ICsxMTIsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGQpLCBkaWN0KGE9MSwgYj0yLCBjPTMwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGQuaXRlbXMoKSksIGRpY3QoYT0xLCBiPTIsIGM9MzApKQogCisgICAgZGVmIHRlc3RfbmV3X2NoaWxkKHNlbGYpOgorICAgICAgICAnVGVzdHMgZm9yIGNoYW5nZXMgZm9yIGlzc3VlICMxNjYxMy4nCisgICAgICAgIGMgPSBDaGFpbk1hcCgpCisgICAgICAgIGNbJ2EnXSA9IDEKKyAgICAgICAgY1snYiddID0gMgorICAgICAgICBtID0geydiJzoyMCwgJ2MnOiAzMH0KKyAgICAgICAgZCA9IGMubmV3X2NoaWxkKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXBzLCBbeydiJzoyMCwgJ2MnOjMwfSwgeydhJzoxLCAnYic6Mn1dKSAgIyBjaGVjayBpbnRlcm5hbCBzdGF0ZQorICAgICAgICBzZWxmLmFzc2VydElzKG0sIGQubWFwc1swXSkKKworICAgICAgICAjIFVzZSBhIGRpZmZlcmVudCBtYXAgdGhhbiBhIGRpY3QKKyAgICAgICAgY2xhc3MgbG93ZXJkaWN0KGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXkubG93ZXIoKQorICAgICAgICAgICAgICAgIHJldHVybiBkaWN0Ll9fY29udGFpbnNfXyhzZWxmLCBrZXkpCisKKyAgICAgICAgYyA9IENoYWluTWFwKCkKKyAgICAgICAgY1snYSddID0gMQorICAgICAgICBjWydiJ10gPSAyCisgICAgICAgIG0gPSBsb3dlcmRpY3QoYj0yMCwgYz0zMCkKKyAgICAgICAgZCA9IGMubmV3X2NoaWxkKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobSwgZC5tYXBzWzBdKQorICAgICAgICBmb3Iga2V5IGluICdhYmMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgY29udGFpbnMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBkKQorICAgICAgICBmb3IgaywgdiBpbiBkaWN0KGE9MSwgQj0yMCwgQz0zMCwgej0xMDApLml0ZW1zKCk6ICAgICAgICAgICAgICMgY2hlY2sgZ2V0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KGssIDEwMCksIHYpCisKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBOYW1lZCBUdXBsZXMKQEAgLTc1MCw2ICs3ODIsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyYW5nZSgxMCksIFNlcXVlbmNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhyYW5nZSwgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWVtb3J5dmlldyhiIiIpLCBTZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobWVtb3J5dmlldywgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKQEAgLTkwNCwyMyArOTM4LDI2IEBACiAgICAgICAgIHdvcmRzID0gQ291bnRlcignd2hpY2ggd2l0Y2ggaGFkIHdoaWNoIHdpdGNoZXMgd3Jpc3Qgd2F0Y2gnLnNwbGl0KCkpCiAgICAgICAgIHVwZGF0ZV90ZXN0ID0gQ291bnRlcigpCiAgICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZSh3b3JkcykKLSAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWwotICAgICAgICAgICAgICAgICAgICB3b3Jkcy5jb3B5KCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuY29weSh3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMikpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpLAotICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIod29yZHMpKSwKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgIENvdW50ZXIod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBdKToKLSAgICAgICAgICAgIG1zZyA9IChpLCBkdXAsIHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4od29yZHMpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUod29yZHMpKQorICAgICAgICBmb3IgbGFiZWwsIGR1cCBpbiBbCisgICAgICAgICAgICAgICAgICAgICgnd29yZHMuY29weSgpJywgd29yZHMuY29weSgpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdjb3B5LmNvcHkod29yZHMpJywgY29weS5jb3B5KHdvcmRzKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5kZWVwY29weSh3b3JkcyknLCBjb3B5LmRlZXBjb3B5KHdvcmRzKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMCkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDApKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMSkpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDEpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMikpJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDIpKSksCisgICAgICAgICAgICAgICAgICAgICgncGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgLTEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpKSwKKyAgICAgICAgICAgICAgICAgICAgKCdldmFsKHJlcHIod29yZHMpKScsIGV2YWwocmVwcih3b3JkcykpKSwKKyAgICAgICAgICAgICAgICAgICAgKCd1cGRhdGVfdGVzdCcsIHVwZGF0ZV90ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgKCdDb3VudGVyKHdvcmRzKScsIENvdW50ZXIod29yZHMpKSwKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGxhYmVsPWxhYmVsKToKKyAgICAgICAgICAgICAgICBtc2cgPSAiXG5jb3B5OiAlc1xud29yZHM6ICVzIiAlIChkdXAsIHdvcmRzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZHVwLCB3b3JkcywgbXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCB3b3JkcykKIAogICAgIGRlZiB0ZXN0X2NvcHlfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIE15Q291bnRlcihDb3VudGVyKToKQEAgLTEwNDMsOCArMTA4MCwxMCBAQAogICAgICAgICAjIHRlc3QgZmlkZWxpdHkgdG8gdGhlIHB1cmUgcHl0aG9uIHZlcnNpb24KICAgICAgICAgYyA9IENvdW50ZXJTdWJjbGFzc1dpdGhTZXRJdGVtKCdhYnJhY2FkYWJyYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KGMpLCB7J2EnOiA1LCAnYic6IDIsICdjJzogMSwgJ2QnOiAxLCAncic6MiB9KQogICAgICAgICBjID0gQ291bnRlclN1YmNsYXNzV2l0aEdldCgnYWJyYWNhZGFicmEnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChjKSwgeydhJzogNSwgJ2InOiAyLCAnYyc6IDEsICdkJzogMSwgJ3InOjIgfSkKIAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTIwNSwyNCArMTI0NCwyOCBAQAogICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQogICAgICAgICB1cGRhdGVfdGVzdCA9IE9yZGVyZWREaWN0KCkKICAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKG9kKQotICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCi0gICAgICAgICAgICAgICAgICAgIG9kLmNvcHkoKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weShvZCksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAyKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDMpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKSwKLSAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKG9kKSksCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAotICAgICAgICAgICAgICAgICAgICBPcmRlcmVkRGljdChvZCksCi0gICAgICAgICAgICAgICAgICAgIF0pOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgb2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgb2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLml0ZW1zKCkpLCBsaXN0KG9kLml0ZW1zKCkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKG9kKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKG9kKSkKKyAgICAgICAgZm9yIGxhYmVsLCBkdXAgaW4gWworICAgICAgICAgICAgICAgICAgICAoJ29kLmNvcHkoKScsIG9kLmNvcHkoKSksCisgICAgICAgICAgICAgICAgICAgICgnY29weS5jb3B5KG9kKScsIGNvcHkuY29weShvZCkpLAorICAgICAgICAgICAgICAgICAgICAoJ2NvcHkuZGVlcGNvcHkob2QpJywgY29weS5kZWVwY29weShvZCkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAwKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDEpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAxKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDIpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAyKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDMpKScsCisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAzKSkpLAorICAgICAgICAgICAgICAgICAgICAoJ3BpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIC0xKSknLAorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKSksCisgICAgICAgICAgICAgICAgICAgICgnZXZhbChyZXByKG9kKSknLCBldmFsKHJlcHIob2QpKSksCisgICAgICAgICAgICAgICAgICAgICgndXBkYXRlX3Rlc3QnLCB1cGRhdGVfdGVzdCksCisgICAgICAgICAgICAgICAgICAgICgnT3JkZXJlZERpY3Qob2QpJywgT3JkZXJlZERpY3Qob2QpKSwKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGxhYmVsPWxhYmVsKToKKyAgICAgICAgICAgICAgICBtc2cgPSAiXG5jb3B5OiAlc1xub2Q6ICVzIiAlIChkdXAsIG9kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZHVwLCBvZCwgbXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKIAogICAgIGRlZiB0ZXN0X3lhbWxfbGlua2FnZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCBfX3JlZHVjZV9fIGlzIHNldHVwIGluIGEgd2F5IHRoYXQgc3VwcG9ydHMgUHlZQU1MJ3MgZHVtcCgpIGZlYXR1cmUuCkBAIC0xMjM3LDkgKzEyODAsMTggQEAKICAgICAgICAgIyBkbyBub3Qgc2F2ZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGlmIG5vdCBuZWVkZWQKICAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QuX19yZWR1Y2VfXygpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob2QuX19yZWR1Y2VfXygpWzJdKQogICAgICAgICBvZC54ID0gMTAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QuX19yZWR1Y2VfXygpKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUob2QuX19yZWR1Y2VfXygpWzJdKQorCisgICAgZGVmIHRlc3RfcGlja2xlX3JlY3Vyc2l2ZShzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kWzFdID0gb2QKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKC0xLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVwID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgcHJvdG8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5rZXlzKCkpLCBbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGR1cFsxXSwgZHVwKQogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQppbmRleCBlNDA1YjhhLi5hMjRlM2FkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKQEAgLTEsNCArMSw0IEBACi1pbXBvcnQgdW5pdHRlc3QsIHRlc3Quc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgY29sb3JzeXMKIAogZGVmIGZyYW5nZShzdGFydCwgc3RvcCwgc3RlcCk6CkBAIC02OSw4ICs2OSwzMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChobHMsIGNvbG9yc3lzLnJnYl90b19obHMoKnJnYikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHJnYiwgY29sb3JzeXMuaGxzX3RvX3JnYigqaGxzKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29sb3JzeXNUZXN0KQorICAgIGRlZiB0ZXN0X3lpcV9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciByIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgIGZvciBnIGluIGZyYW5nZSgwLjAsIDEuMCwgMC4yKToKKyAgICAgICAgICAgICAgICBmb3IgYiBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgICAgIHJnYiA9IChyLCBnLCBiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzeXMueWlxX3RvX3JnYigqY29sb3JzeXMucmdiX3RvX3lpcSgqcmdiKSkKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfeWlxX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgIyByZ2IsIHlpcQorICAgICAgICAgICAgKCgwLjAsIDAuMCwgMC4wKSwgKDAuMCwgMC4wLCAwLjApKSwgIyBibGFjaworICAgICAgICAgICAgKCgwLjAsIDAuMCwgMS4wKSwgKDAuMTEsIC0wLjMyMTcsIDAuMzEyMSkpLCAjIGJsdWUKKyAgICAgICAgICAgICgoMC4wLCAxLjAsIDAuMCksICgwLjU5LCAtMC4yNzczLCAtMC41MjUxKSksICMgZ3JlZW4KKyAgICAgICAgICAgICgoMC4wLCAxLjAsIDEuMCksICgwLjcsIC0wLjU5OSwgLTAuMjEzKSksICMgY3lhbgorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMC4wKSwgKDAuMywgMC41OTksIDAuMjEzKSksICMgcmVkCisgICAgICAgICAgICAoKDEuMCwgMC4wLCAxLjApLCAoMC40MSwgMC4yNzczLCAwLjUyNTEpKSwgIyBwdXJwbGUKKyAgICAgICAgICAgICgoMS4wLCAxLjAsIDAuMCksICgwLjg5LCAwLjMyMTcsIC0wLjMxMjEpKSwgIyB5ZWxsb3cKKyAgICAgICAgICAgICgoMS4wLCAxLjAsIDEuMCksICgxLjAsIDAuMCwgMC4wKSksICMgd2hpdGUKKyAgICAgICAgICAgICgoMC41LCAwLjUsIDAuNSksICgwLjUsIDAuMCwgMC4wKSksICMgZ3JleQorICAgICAgICBdCisgICAgICAgIGZvciAocmdiLCB5aXEpIGluIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoeWlxLCBjb2xvcnN5cy5yZ2JfdG9feWlxKCpyZ2IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChyZ2IsIGNvbG9yc3lzLnlpcV90b19yZ2IoKnlpcSkpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQppbmRleCBmZGRiNTM4Li5mZjI1MTVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CkBAIC0xLDExICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgY29tcGlsZWFsbAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xOCwxMSArMTksMTEgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIHNlbGYuc291cmNlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdC5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQorICAgICAgICBzZWxmLmJjX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2VfcGF0aCwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgZmlsZS53cml0ZSgneCA9IDEyM1xuJykKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aDIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfdGVzdDIucHknKQotICAgICAgICBzZWxmLmJjX3BhdGgyID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyKQorICAgICAgICBzZWxmLmJjX3BhdGgyID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2VsZi5zdWJkaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdfc3ViZGlyJykKICAgICAgICAgb3MubWtkaXIoc2VsZi5zdWJkaXJlY3RvcnkpCkBAIC0zNiw3ICszNyw3IEBACiAgICAgICAgIHdpdGggb3BlbihzZWxmLmJjX3BhdGgsICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgICBkYXRhID0gZmlsZS5yZWFkKDgpCiAgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoc2VsZi5zb3VyY2VfcGF0aCkuc3RfbXRpbWUpCi0gICAgICAgIGNvbXBhcmUgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgIGNvbXBhcmUgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwgbXRpbWUpCiAgICAgICAgIHJldHVybiBkYXRhLCBjb21wYXJlCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc3RhdCcpLCAndGVzdCBuZWVkcyBvcy5zdGF0KCknKQpAQCAtNTYsNyArNTcsOCBAQAogCiAgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CiAgICAgICAgICMgVGVzdCBhIGNoYW5nZSBpbiBtdGltZSBsZWFkcyB0byBhIG5ldyAucHljLgotICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIDEpKQorICAgICAgICBzZWxmLnJlY3JlYXRpb25fY2hlY2soc3RydWN0LnBhY2soJzw0c2wnLCBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkKIAogICAgIGRlZiB0ZXN0X21hZ2ljX251bWJlcihzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCkBAIC05NiwxNCArOTgsMTQgQEAKICAgICAgICAgIyBpbnRlcnByZXRlcidzIGNyZWF0ZXMgdGhlIGNvcnJlY3QgZmlsZSBuYW1lcwogICAgICAgICBvcHRpbWl6ZSA9IDEgaWYgX19kZWJ1Z19fIGVsc2UgMAogICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZGlyKHNlbGYuZGlyZWN0b3J5LCBxdWlldD1UcnVlLCBvcHRpbWl6ZT1vcHRpbWl6ZSkKLSAgICAgICAgY2FjaGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZCkpCi0gICAgICAgIGNhY2hlZDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDIpKQotICAgICAgICBjYWNoZWQzID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBjYWNoZWQzID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjYWNoZWQzKSkKIAogCkBAIC0xNTEsMTAgKzE1MywxMiBAQAogICAgICAgICByZXR1cm4gcmMsIG91dCwgZXJyCiAKICAgICBkZWYgYXNzZXJ0Q29tcGlsZWQoc2VsZiwgZm4pOgotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZuKSkpCisgICAgICAgIHBhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHBhdGgpKQogCiAgICAgZGVmIGFzc2VydE5vdENvbXBpbGVkKHNlbGYsIGZuKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZm4pKSkKKyAgICAgICAgcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHBhdGgpKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5fY2xlYW51cCkKQEAgLTE4OSw4ICsxOTMsOCBAQAogICAgICAgICAgICAgICAgIFsnLW0nLCAnY29tcGlsZWFsbCcsICctcScsIHNlbGYucGtnZGlyXSkpCiAgICAgICAgICAgICAjIFZlcmlmeSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGNvbnRlbnRzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucGtnZGlyX2NhY2hlZGlyKSkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KGltcC5nZXRfdGFnKCksIGV4dCkgZm9yIGJhc2UgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNvcnRlZChiYXNlLmZvcm1hdChzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLCBleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFzZSBpbiAoJ19faW5pdF9fLnt9Lnt9JywgJ2Jhci57fS57fScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob3MubGlzdGRpcihzZWxmLnBrZ2Rpcl9jYWNoZWRpcikpLCBleHBlY3RlZCkKICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZXJlIGFyZSBubyAucHljIGZpbGVzIGluIHRoZSBzb3VyY2UgZGlyZWN0b3J5LgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShbZm4gZm9yIGZuIGluIG9zLmxpc3RkaXIoc2VsZi5wa2dkaXIpCkBAIC0yMjMsNyArMjI3LDcgQEAKIAogICAgIGRlZiB0ZXN0X2ZvcmNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsIHNlbGYucGtnZGlyKQotICAgICAgICBweWNwYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCisgICAgICAgIHB5Y3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLmJhcmZuKQogICAgICAgICAjIHNldCBhdGltZS9tdGltZSBiYWNrd2FyZCB0byBhdm9pZCBmaWxlIHRpbWVzdGFtcCByZXNvbHV0aW9uIGlzc3VlcwogICAgICAgICBvcy51dGltZShweWNwYXRoLCAodGltZS50aW1lKCktNjAsKSoyKQogICAgICAgICBtdGltZSA9IG9zLnN0YXQocHljcGF0aCkuc3RfbXRpbWUKQEAgLTI4NywxMCArMjkxLDEwIEBACiAgICAgICAgIGJhemZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JheicsICdyYWlzZSBFeGNlcHRpb24nKQogICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsICctZCcsICdkaW5zZGFsZScsIHNlbGYucGtnZGlyKQogICAgICAgICBmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdiaW5nJywgJ2ltcG9ydCBiYXonKQotICAgICAgICBweWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoYmF6Zm4pCisgICAgICAgIHB5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQogICAgICAgICBvcy5yZW5hbWUocHljLCBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkaXIsICdiYXoucHljJykpCiAgICAgICAgIG9zLnJlbW92ZShiYXpmbikKLSAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4pCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKGZuLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgYidGaWxlICJkaW5zZGFsZScpCiAKICAgICBkZWYgdGVzdF9pbmNsdWRlX2JhZF9maWxlKHNlbGYpOgpAQCAtMjk4LDcgKzMwMiw3IEBACiAgICAgICAgICAgICAnLWknLCBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdub3N1Y2hmaWxlJyksIHNlbGYucGtnZGlyKQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgYidycm9yLipub3N1Y2hmaWxlJykKICAgICAgICAgc2VsZi5hc3NlcnROb3RSZWdleChlcnIsIGInVHJhY2ViYWNrJykKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnZGlyX2NhY2hlZGlyKSkpCiAKICAgICBkZWYgdGVzdF9pbmNsdWRlX2ZpbGVfd2l0aF9hcmcoc2VsZik6CkBAIC0zNTUsMTMgKzM1OSw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCBiIkNhbid0IGxpc3QgJ2JhZGZpbGVuYW1lJyIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICBDb21tYW5kTGluZVRlc3RzLAotICAgICAgICBDb21waWxlYWxsVGVzdHMsCi0gICAgICAgIEVuY29kaW5nVGVzdCwKLSAgICAgICAgKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQppbmRleCAxYmY0MDk3Li5jZDU1Mzc1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CkBAIC0yMjAsNiArMjIwLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBPUyhOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUyhOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUygxLjUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5TKDEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgiMSsxMGoiKSwgMSsxMGopCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleCgxMCksIDEwKzBqKQpAQCAtMzAxLDYgKzMwMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIDUrM2opCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAibm90ICdOb25lVHlwZSciLCBjb21wbGV4LCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiXDAiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiM1wwOSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgIjEiLCAiMiIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5CmluZGV4IDM5MjMwZTEuLmE3ZTk0NWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29uY3VycmVudF9mdXR1cmVzLnB5CkBAIC0xNSw2ICsxNSw3IEBACiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgogCiBmcm9tIGNvbmN1cnJlbnQgaW1wb3J0IGZ1dHVyZXMKIGZyb20gY29uY3VycmVudC5mdXR1cmVzLl9iYXNlIGltcG9ydCAoCkBAIC01Miw2ICs1MywxMSBAQAogICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCiAKK2NsYXNzIE15T2JqZWN0KG9iamVjdCk6CisgICAgZGVmIG15X21ldGhvZChzZWxmKToKKyAgICAgICAgcGFzcworCisKIGNsYXNzIEV4ZWN1dG9yTWl4aW46CiAgICAgd29ya2VyX2NvdW50ID0gNQogCkBAIC0zOTYsNiArNDAyLDIyIEBACiAgICAgICAgIHNlbGYuZXhlY3V0b3IubWFwKHN0ciwgWzJdICogKHNlbGYud29ya2VyX2NvdW50ICsgMSkpCiAgICAgICAgIHNlbGYuZXhlY3V0b3Iuc2h1dGRvd24oKQogCisgICAgQHRlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9ub19zdGFsZV9yZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjI4NDogY2hlY2sgdGhhdCB0aGUgZXhlY3V0b3JzIGRvbid0IHVubmVjZXNzYXJpbHkgaGFuZyBvbnRvCisgICAgICAgICMgcmVmZXJlbmNlcy4KKyAgICAgICAgbXlfb2JqZWN0ID0gTXlPYmplY3QoKQorICAgICAgICBteV9vYmplY3RfY29sbGVjdGVkID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgbXlfb2JqZWN0X2NhbGxiYWNrID0gd2Vha3JlZi5yZWYoCisgICAgICAgICAgICBteV9vYmplY3QsIGxhbWJkYSBvYmo6IG15X29iamVjdF9jb2xsZWN0ZWQuc2V0KCkpCisgICAgICAgICMgRGVsaWJlcmF0ZWx5IGRpc2NhcmRpbmcgdGhlIGZ1dHVyZS4KKyAgICAgICAgc2VsZi5leGVjdXRvci5zdWJtaXQobXlfb2JqZWN0Lm15X21ldGhvZCkKKyAgICAgICAgZGVsIG15X29iamVjdAorCisgICAgICAgIGNvbGxlY3RlZCA9IG15X29iamVjdF9jb2xsZWN0ZWQud2FpdCh0aW1lb3V0PTUuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbGxlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJTdGFsZSByZWZlcmVuY2Ugbm90IGNvbGxlY3RlZCB3aXRoaW4gdGltZW91dC4iKQorCiAKIGNsYXNzIFRocmVhZFBvb2xFeGVjdXRvclRlc3QoVGhyZWFkUG9vbE1peGluLCBFeGVjdXRvclRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYXBfc3VibWl0c193aXRob3V0X2l0ZXJhdGlvbihzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQppbmRleCA5ZTQ1ZjcwLi5iODc3MGM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CkBAIC0xLDUgKzEsNiBAQAogIiIiVW5pdCB0ZXN0cyBmb3IgY29udGV4dGxpYi5weSwgYW5kIG90aGVyIGNvbnRleHQgbWFuYWdlcnMuIiIiCiAKK2ltcG9ydCBpbwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEwMCwxNSArMTAxLDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fbmFtZV9fLCdiYXonKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5mb28sICdiYXInKQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKLSAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncwogICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2RvY19hdHRyaWIoc2VsZik6CiAgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzdHJpbmdfZ2l2ZW5fY21fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fZG9jX18sICJXaGVlISIpCisKKwogY2xhc3MgQ2xvc2luZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgICMgWFhYIFRoaXMgbmVlZHMgbW9yZSB3b3JrCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IGNsb3NpbmcuX19kb2NfXworICAgICAgICBvYmogPSBjbG9zaW5nKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKIAogICAgIGRlZiB0ZXN0X2Nsb3Npbmcoc2VsZik6CiAgICAgICAgIHN0YXRlID0gW10KQEAgLTIwNCw2ICsyMTUsNyBAQAogCiAKIGNsYXNzIG15Y29udGV4dChDb250ZXh0RGVjb3JhdG9yKToKKyAgICAiIiJFeGFtcGxlIGRlY29yYXRpb24tY29tcGF0aWJsZSBjb250ZXh0IG1hbmFnZXIgZm9yIHRlc3RpbmciIiIKICAgICBzdGFydGVkID0gRmFsc2UKICAgICBleGMgPSBOb25lCiAgICAgY2F0Y2ggPSBGYWxzZQpAQCAtMjE5LDYgKzIzMSwxMyBAQAogCiBjbGFzcyBUZXN0Q29udGV4dERlY29yYXRvcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gbXljb250ZXh0Ll9fZG9jX18KKyAgICAgICAgb2JqID0gbXljb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCiAgICAgZGVmIHRlc3RfY29udGV4dGRlY29yYXRvcihzZWxmKToKICAgICAgICAgY29udGV4dCA9IG15Y29udGV4dCgpCiAgICAgICAgIHdpdGggY29udGV4dCBhcyByZXN1bHQ6CkBAIC0zNzIsNiArMzkxLDEzIEBACiAKIGNsYXNzIFRlc3RFeGl0U3RhY2sodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IEV4aXRTdGFjay5fX2RvY19fCisgICAgICAgIG9iaiA9IEV4aXRTdGFjaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKKwogICAgIGRlZiB0ZXN0X25vX3Jlc291cmNlcyhzZWxmKToKICAgICAgICAgd2l0aCBFeGl0U3RhY2soKToKICAgICAgICAgICAgIHBhc3MKQEAgLTYzMSwxMCArNjU3LDExMSBAQAogICAgICAgICBzdGFjay5wdXNoKGNtKQogICAgICAgICBzZWxmLmFzc2VydElzKHN0YWNrLl9leGl0X2NhbGxiYWNrc1stMV0sIGNtKQogCitjbGFzcyBUZXN0UmVkaXJlY3RTdGRvdXQodW5pdHRlc3QuVGVzdENhc2UpOgogCi0jIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIHRlc3QgYWN0dWFsbHkgcnVuIHVuZGVyIHJlZ3J0ZXN0LnB5IQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSByZWRpcmVjdF9zdGRvdXQuX19kb2NfXworICAgICAgICBvYmogPSByZWRpcmVjdF9zdGRvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfbm9fcmVkaXJlY3RfaW5faW5pdChzZWxmKToKKyAgICAgICAgb3JpZ19zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHJlZGlyZWN0X3N0ZG91dChOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfdG9fc3RyaW5nX2lvKHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBtc2cgPSAiQ29uc2lkZXIgYW4gQVBJIGxpa2UgaGVscCgpLCB3aGljaCBwcmludHMgZGlyZWN0bHkgdG8gc3Rkb3V0IgorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICBwcmludChtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIG1zZykKKworICAgIGRlZiB0ZXN0X2VudGVyX3Jlc3VsdF9pc190YXJnZXQoc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpIGFzIGVudGVyX3Jlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZW50ZXJfcmVzdWx0LCBmKQorCisgICAgZGVmIHRlc3RfY21faXNfcmV1c2FibGUoc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdyaXRlX3RvX2YgPSByZWRpcmVjdF9zdGRvdXQoZikKKyAgICAgICAgb3JpZ19zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHdpdGggd3JpdGVfdG9fZjoKKyAgICAgICAgICAgIHByaW50KCJIZWxsbyIsIGVuZD0iICIpCisgICAgICAgIHdpdGggd3JpdGVfdG9fZjoKKyAgICAgICAgICAgIHByaW50KCJXb3JsZCEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIkhlbGxvIFdvcmxkIVxuIikKKworICAgIGRlZiB0ZXN0X2NtX2lzX3JlZW50cmFudChzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgd3JpdGVfdG9fZiA9IHJlZGlyZWN0X3N0ZG91dChmKQorICAgICAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgd2l0aCB3cml0ZV90b19mOgorICAgICAgICAgICAgcHJpbnQoIkhlbGxvIiwgZW5kPSIgIikKKyAgICAgICAgICAgIHdpdGggd3JpdGVfdG9fZjoKKyAgICAgICAgICAgICAgICBwcmludCgiV29ybGQhIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJIZWxsbyBXb3JsZCFcbiIpCisKKworY2xhc3MgVGVzdFN1cHByZXNzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBzdXBwcmVzcy5fX2RvY19fCisgICAgICAgIG9iaiA9IHN1cHByZXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19kb2NfXywgY21fZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3Rfbm9fcmVzdWx0X2Zyb21fZW50ZXIoc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoVmFsdWVFcnJvcikgYXMgZW50ZXJfcmVzdWx0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZW50ZXJfcmVzdWx0KQorCisgICAgZGVmIHRlc3Rfbm9fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHByZXNzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coMiwgNSksIDMyKQorCisgICAgZGVmIHRlc3RfZXhhY3RfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHByZXNzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBsZW4oNSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9oaWVyYXJjaHkoc2VsZik6CisgICAgICAgIHdpdGggc3VwcHJlc3MoTG9va3VwRXJyb3IpOgorICAgICAgICAgICAgJ0hlbGxvJ1s1MF0KKworICAgIGRlZiB0ZXN0X290aGVyX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIHN1cHByZXNzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgMS8wCisKKyAgICBkZWYgdGVzdF9ub19hcmdzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgIHdpdGggc3VwcHJlc3MoKToKKyAgICAgICAgICAgICAgICAxLzAKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2V4Y2VwdGlvbl9hcmdzKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHByZXNzKFplcm9EaXZpc2lvbkVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgMS8wCisgICAgICAgIHdpdGggc3VwcHJlc3MoWmVyb0RpdmlzaW9uRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICBsZW4oNSkKKworICAgIGRlZiB0ZXN0X2NtX2lzX3JlZW50cmFudChzZWxmKToKKyAgICAgICAgaWdub3JlX2V4Y2VwdGlvbnMgPSBzdXBwcmVzcyhFeGNlcHRpb24pCisgICAgICAgIHdpdGggaWdub3JlX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggaWdub3JlX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICBsZW4oNSkKKyAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczoKKyAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgd2l0aCBpZ25vcmVfZXhjZXB0aW9uczogIyBDaGVjayBuZXN0ZWQgdXNhZ2UKKyAgICAgICAgICAgICAgICBsZW4oNSkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKaW5kZXggNTY3NjY2OC4uY2U1ZDI3ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CkBAIC02LDkgKzYsMTEgQEAKICMgcmlwIG9mZiBhbGwgaW50ZXJlc3Rpbmcgc3R1ZmYgZnJvbSB0ZXN0X3Byb2ZpbGUKIGltcG9ydCBjUHJvZmlsZQogZnJvbSB0ZXN0LnRlc3RfcHJvZmlsZSBpbXBvcnQgUHJvZmlsZVRlc3QsIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0Citmcm9tIHRlc3QucHJvZmlsZWUgaW1wb3J0IHRlc3RmdW5jCiAKIGNsYXNzIENQcm9maWxlVGVzdChQcm9maWxlVGVzdCk6CiAgICAgcHJvZmlsZXJjbGFzcyA9IGNQcm9maWxlLlByb2ZpbGUKKyAgICBwcm9maWxlcm1vZHVsZSA9IGNQcm9maWxlCiAgICAgZXhwZWN0ZWRfbWF4X291dHB1dCA9ICJ7YnVpbHQtaW4gbWV0aG9kIG1heH0iCiAKICAgICBkZWYgZ2V0X2V4cGVjdGVkX291dHB1dChzZWxmKToKQEAgLTI3LDYgKzI5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgb2JqLmVuYWJsZSgpCiAgICAgICAgICAgICAgICAgICAgIG9iaiA9IF9sc3Byb2YuUHJvZmlsZXIoMSkKICAgICAgICAgICAgICAgICAgICAgb2JqLmRpc2FibGUoKQorICAgICAgICAgICAgICAgICAgICBvYmouY2xlYXIoKQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvcmlnX3N0ZGVycgogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKaW5kZXggY2ZiNzM0MS4uNjI0ZDcwMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CkBAIC0xLDExICsxLDcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKLWRlZiBzZXRVcE1vZHVsZSgpOgotICAgICMgdGhpcyBpbXBvcnQgd2lsbCByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCBpZiBfY3J5cHQgZG9lc24ndCBleGlzdCwKLSAgICAjIHNvIGl0IGhhcyB0byBiZSBkb25lIGluIHNldFVwTW9kdWxlIGZvciB0ZXN0IGRpc2NvdmVyeSB0byB3b3JrCi0gICAgZ2xvYmFsIGNyeXB0Ci0gICAgY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKK2NyeXB0ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjcnlwdCcpCiAKIGNsYXNzIENyeXB0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nzdi5weSBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CmluZGV4IDQ3OWViZDkuLjAxZmJhMjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3N2LnB5CkBAIC0xMzYsMTIgKzEzNiwxMiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKICAgICAgICAgICAgICAgICBpZiBpID4gMjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBCYWRMaXN0KCksICcnKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIEJhZExpc3QoKSwgJycpCiAgICAgICAgIGNsYXNzIEJhZEl0ZW06CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuX3dyaXRlX3Rlc3QsIFtCYWRJdGVtKCldLCAnJykKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2JpZ2ZpZWxkKHNlbGYpOgogICAgICAgICAjIFRoaXMgZXhlcmNpc2VzIHRoZSBidWZmZXIgcmVhbGxvYyBmdW5jdGlvbmFsaXR5CkBAIC0xODYsOSArMTg2LDkgQEAKICAgICBkZWYgdGVzdF93cml0ZXJvd3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEJyb2tlbkZpbGU6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYnVmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKEJyb2tlbkZpbGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd3JpdGVyLndyaXRlcm93cywgW1snYSddXSkKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKICAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaikKQEAgLTMwOCw2ICszMDgsMTUgQEAKICAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LCByb3dzW2ldKQogCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwX2VzY2FwZWRfdW5xdW90ZWRfbmV3bGluZXMoc2VsZik6CisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgidysiLCBuZXdsaW5lPScnKSBhcyBmaWxlb2JqOgorICAgICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihmaWxlb2JqLHF1b3Rpbmc9Y3N2LlFVT1RFX05PTkUsZXNjYXBlY2hhcj0iXFwiKQorICAgICAgICAgICAgcm93cyA9IFtbJ2FcbmInLCdiJ10sWydjJywneFxyXG5kJ11dCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3dzKHJvd3MpCisgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZvciBpLCByb3cgaW4gZW51bWVyYXRlKGNzdi5yZWFkZXIoZmlsZW9iaixxdW90aW5nPWNzdi5RVU9URV9OT05FLGVzY2FwZWNoYXI9IlxcIikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93LHJvd3NbaV0pCisKIGNsYXNzIFRlc3REaWFsZWN0UmVnaXN0cnkodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlZ2lzdHJ5X2JhZGFyZ3Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3N2Lmxpc3RfZGlhbGVjdHMsIE5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CmluZGV4IDI0M2EwYWYuLjFjNTc3NzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHJldHVybiBrZXlzCiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5tb2R1bGUuZXJyb3IsIElPRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgT1NFcnJvcikpCiAKICAgICBkZWYgdGVzdF9hbnlkYm1fbm90X2V4aXN0aW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYm0uZXJyb3IsIGRibS5vcGVuLCBfZm5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQppbmRleCAyMDhiYzRjLi45ZmQ4Y2RlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKQEAgLTE4NCw2ICsxODQsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImR1bWJkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgIyBUaGlzIGN1cnJlbnRseSBqdXN0IHJhaXNlcyBBdHRyaWJ1dGVFcnJvciByYXRoZXIgdGhhbiBhIHNwZWNpZmljCisgICAgICAgICMgZXhjZXB0aW9uIGxpa2UgdGhlIEdOVSBvciBOREJNIGJhc2VkIGltcGxlbWVudGF0aW9ucy4gU2VlCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5Mzg1IGZvciBkZXRhaWxzLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBkYi5rZXlzKCkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgX2RlbGV0ZV9maWxlcygpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQppbmRleCA0ZmI2NmM1Li5hNzgwOGY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CkBAIC04MSw2ICs4MSwxNyBAQAogICAgICAgICBzaXplMiA9IG9zLnBhdGguZ2V0c2l6ZShmaWxlbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpemUxID4gc2l6ZTIgPj0gc2l6ZTApCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAnYycpIGFzIGRiOgorICAgICAgICAgICAgZGJbImdkYm0gY29udGV4dCBtYW5hZ2VyIl0gPSAiY29udGV4dCBtYW5hZ2VyIgorCisgICAgICAgIHdpdGggZ2RibS5vcGVuKGZpbGVuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImdkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhnZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJHREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQppbmRleCBiNTdlMWYwLi4yMjkxNTYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKQEAgLTM3LDUgKzM3LDE4IEBACiAgICAgICAgICAgICBleGNlcHQgZXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCkKIAorICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsibmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkYm0ubmRibS5vcGVuKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZGI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZGIua2V5cygpKSwgW2IibmRibSBjb250ZXh0IG1hbmFnZXIiXSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGRibS5uZGJtLmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGRiLmtleXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CmluZGV4IDU0YTM2MTUuLjYzNzhlZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTI5MCw3ICsyOTAsNiBAQAogICAgICAgICBnbG9iYWwgc2tpcF9leHBlY3RlZAogICAgICAgICBpZiBza2lwX2V4cGVjdGVkOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKLSAgICAgICAgICAgIHJldHVybgogICAgICAgICB3aXRoIG9wZW4oZmlsZSkgYXMgZjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgnXHJcbicsICcnKS5yZXBsYWNlKCdcbicsICcnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKaW5kZXggYTg0ODdkMi4uN2JmZjFkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CkBAIC01NDMsOCArNTQzLDggQEAKICAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgogICAgICAgICBjaGVjayhkZXF1ZSgpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCi0gICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqIChCTE9DS0xFTiAvLyAyKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQotICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMiArIDEpKSwgYmFzZXNpemUgKyAyICogYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLSAxKSksIGJhc2VzaXplICsgYmxvY2tzaXplKQorICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiBCTE9DS0xFTiksIGJhc2VzaXplICsgMiAqIGJsb2Nrc2l6ZSkKICAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKDQyICogQkxPQ0tMRU4pKSwgYmFzZXNpemUgKyA0MyAqIGJsb2Nrc2l6ZSkKIAogY2xhc3MgVGVzdFZhcmlvdXNJdGVyYXRvckFyZ3ModW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weSBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKaW5kZXggODk0MGFlOS4uZjA4YTNkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXNjci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CkBAIC0xLDggKzEsMTEgQEAKIGltcG9ydCBidWlsdGlucworaW1wb3J0IGNvcHlyZWcKIGltcG9ydCBnYworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1hdGgKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwotaW1wb3J0IG1hdGgKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdlYWtyZWYKIApAQCAtMTc5Nyw2ICsxODAwLDcgQEAKICAgICAgICAgICAgICgiX190cnVuY19fIiwgaW50LCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgKCJfX2NlaWxfXyIsIG1hdGguY2VpbCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgICgiX19kaXJfXyIsIGRpciwgZW1wdHlfc2VxLCBzZXQoKSwge30pLAorICAgICAgICAgICAgKCJfX3JvdW5kX18iLCByb3VuZCwgemVybywgc2V0KCksIHt9KSwKICAgICAgICAgICAgIF0KIAogICAgICAgICBjbGFzcyBDaGVja2VyKG9iamVjdCk6CkBAIC0yMjU3LDcgKzIyNjEsOSBAQAogICAgICAgICBtaW5zdGFuY2UgPSBNKCJtIikKICAgICAgICAgbWluc3RhbmNlLmIgPSAyCiAgICAgICAgIG1pbnN0YW5jZS5hID0gMQotICAgICAgICBuYW1lcyA9IFt4IGZvciB4IGluIGRpcihtaW5zdGFuY2UpIGlmIHggbm90IGluIFsiX19uYW1lX18iLCAiX19kb2NfXyJdXQorICAgICAgICBkZWZhdWx0X2F0dHJpYnV0ZXMgPSBbJ19fbmFtZV9fJywgJ19fZG9jX18nLCAnX19wYWNrYWdlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19zcGVjX18nXQorICAgICAgICBuYW1lcyA9IFt4IGZvciB4IGluIGRpcihtaW5zdGFuY2UpIGlmIHggbm90IGluIGRlZmF1bHRfYXR0cmlidXRlc10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lcywgWydhJywgJ2InXSkKIAogICAgICAgICBjbGFzcyBNMihNKToKQEAgLTMxNTAsMTc2ICszMTU2LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hLCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYW5fZGVsZXRlX2RpY3QoZSksIGNhbl9kZWxldGVfZGljdChWYWx1ZUVycm9yKCkpKQogCi0gICAgZGVmIHRlc3RfcGlja2xlcyhzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLi4uCi0gICAgICAgIGltcG9ydCBwaWNrbGUKLQotICAgICAgICBkZWYgc29ydGVkaXRlbXMoZCk6Ci0gICAgICAgICAgICBMID0gbGlzdChkLml0ZW1zKCkpCi0gICAgICAgICAgICBMLnNvcnQoKQotICAgICAgICAgICAgcmV0dXJuIEwKLQotICAgICAgICBnbG9iYWwgQwotICAgICAgICBjbGFzcyBDKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoQywgc2VsZikuX19pbml0X18oKQotICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKLSAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCi0gICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJDKCVyLCAlcikiICUgKHNlbGYuYSwgc2VsZi5iKQotCi0gICAgICAgIGdsb2JhbCBDMQotICAgICAgICBjbGFzcyBDMShsaXN0KToKLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMxLCBjbHMpLl9fbmV3X18oY2xzKQotICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5hLCBzZWxmLmIpCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMxKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgbGlzdChzZWxmKSkKLQotICAgICAgICBnbG9iYWwgQzIKLSAgICAgICAgY2xhc3MgQzIoaW50KToKLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgYSwgYiwgdmFsPTApOgotICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcihDMiwgY2xzKS5fX25ld19fKGNscywgdmFsKQotICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiLCB2YWw9MCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMyKCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQotCi0gICAgICAgIGdsb2JhbCBDMwotICAgICAgICBjbGFzcyBDMyhvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KLSAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZm9vCi0gICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGZvbyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mb28gPSBmb28KLQotICAgICAgICBnbG9iYWwgQzRjbGFzc2ljLCBDNAotICAgICAgICBjbGFzcyBDNGNsYXNzaWM6ICMgY2xhc3NpYwotICAgICAgICAgICAgcGFzcwotICAgICAgICBjbGFzcyBDNChDNGNsYXNzaWMsIG9iamVjdCk6ICMgbWl4ZWQgaW5oZXJpdGFuY2UKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBmb3IgYmluIGluIDAsIDE6Ci0gICAgICAgICAgICBmb3IgY2xzIGluIEMsIEMxLCBDMjoKLSAgICAgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGNscywgYmluKQotICAgICAgICAgICAgICAgIGNsczIgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNsczIsIGNscykKLQotICAgICAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQotICAgICAgICAgICAgYiA9IEMyKCJoZWxsbyIsICJ3b3JsZCIsIDQyKQotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcygoYSwgYiksIGJpbikKLSAgICAgICAgICAgIHgsIHkgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2NsYXNzX18sIGEuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeS5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGIuX19kaWN0X18pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQotICAgICAgICAgICAgIyBUZXN0IGZvciBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXyBvbiBuZXcgc3R5bGUgY2xhc3MKLSAgICAgICAgICAgIHUgPSBDMyg0MikKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHModSwgYmluKQotICAgICAgICAgICAgdiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZm9vLCB2LmZvbykKLSAgICAgICAgICAgICMgVGVzdCBmb3IgcGlja2xhYmlsaXR5IG9mIGh5YnJpZCBjbGFzcwotICAgICAgICAgICAgdSA9IEM0KCkKLSAgICAgICAgICAgIHUuZm9vID0gNDIKLSAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHModSwgYmluKQotICAgICAgICAgICAgdiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Ll9fY2xhc3NfXywgdi5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZm9vLCB2LmZvbykKLQotICAgICAgICAjIFRlc3RpbmcgY29weS5kZWVwY29weSgpCi0gICAgICAgIGltcG9ydCBjb3B5Ci0gICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgotICAgICAgICAgICAgY2xzMiA9IGNvcHkuZGVlcGNvcHkoY2xzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjbHMyLCBjbHMpCi0KLSAgICAgICAgYSA9IEMxKDEsIDIpOyBhLmFwcGVuZCg0Mik7IGEuYXBwZW5kKDI0KQotICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCi0gICAgICAgIHgsIHkgPSBjb3B5LmRlZXBjb3B5KChhLCBiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkaXRlbXMoeC5fX2RpY3RfXyksIHNvcnRlZGl0ZW1zKGEuX19kaWN0X18pKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX19jbGFzc19fLCBiLl9fY2xhc3NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih4KSwgcmVwcihhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHkpLCByZXByKGIpKQotCi0gICAgZGVmIHRlc3RfcGlja2xlX3Nsb3RzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyAuLi4KLSAgICAgICAgaW1wb3J0IHBpY2tsZQotICAgICAgICAjIFBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18gYnV0IHdpdGhvdXQgX19nZXRzdGF0ZV9fIHNob3VsZCBmYWlsCi0gICAgICAgICMgKGlmIHVzaW5nIHByb3RvY29sIDAgb3IgMSkKLSAgICAgICAgZ2xvYmFsIEIsIEMsIEQsIEUKLSAgICAgICAgY2xhc3MgQihvYmplY3QpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBmb3IgYmFzZSBpbiBbb2JqZWN0LCBCXToKLSAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KLSAgICAgICAgICAgIGNsYXNzIEQoQyk6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEMgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGQgZmFpbDogcGlja2xlIEQgaW5zdGFuY2UgLSAlcyIgJSBiYXNlKQotICAgICAgICAgICAgIyBHaXZlIEMgYSBuaWNlIGdlbmVyaWMgX19nZXRzdGF0ZV9fIGFuZCBfX3NldHN0YXRlX18KLSAgICAgICAgICAgIGNsYXNzIEMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KLSAgICAgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0gc2VsZi5fX2RpY3RfXy5jb3B5KCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IHt9Ci0gICAgICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gc2VsZi5fX2NsYXNzX18uX19tcm9fXzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzbiBpbiBjbHMuX19kaWN0X18uZ2V0KCdfX3Nsb3RzX18nLCAoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkW3NuXSA9IGdldGF0dHIoc2VsZiwgc24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBkCi0gICAgICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBkKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gbGlzdChkLml0ZW1zKCkpOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCB2KQotICAgICAgICAgICAgY2xhc3MgRChDKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAjIE5vdyBpdCBzaG91bGQgd29yawotICAgICAgICAgICAgeCA9IEMoKQotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEhhc0F0dHIoeSwgJ2EnKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIDQyKQotICAgICAgICAgICAgeCA9IEQoKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHguYiA9IDEwMAotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSArIHkuYiwgMTQyKQotICAgICAgICAgICAgIyBBIHN1YmNsYXNzIHRoYXQgYWRkcyBhIHNsb3Qgc2hvdWxkIGFsc28gd29yawotICAgICAgICAgICAgY2xhc3MgRShDKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2InXQotICAgICAgICAgICAgeCA9IEUoKQotICAgICAgICAgICAgeC5hID0gNDIKLSAgICAgICAgICAgIHguYiA9ICJmb28iCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hLCB4LmEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYiwgeC5iKQotCiAgICAgZGVmIHRlc3RfYmluYXJ5X29wZXJhdG9yX292ZXJyaWRlKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgb3ZlcnJpZGVzIG9mIGJpbmFyeSBvcGVyYXRpb25zLi4uCiAgICAgICAgIGNsYXNzIEkoaW50KToKQEAgLTM3NDQsMTggKzM1ODAsOCBAQAogICAgICAgICAjIGJ1ZykuCiAgICAgICAgIGRlbCBjCiAKLSAgICAgICAgIyBJZiB0aGF0IGRpZG4ndCBibG93IHVwLCBpdCdzIGFsc28gaW50ZXJlc3RpbmcgdG8gc2VlIHdoZXRoZXIgY2xlYXJpbmcKLSAgICAgICAgIyB0aGUgbGFzdCBjb250YWluZXIgc2xvdCB3b3JrczogdGhhdCB3aWxsIGF0dGVtcHQgdG8gZGVsZXRlIGMgYWdhaW4sCi0gICAgICAgICMgd2hpY2ggd2lsbCBjYXVzZSBjIHRvIGdldCBhcHBlbmRlZCBiYWNrIHRvIHRoZSBjb250YWluZXIgYWdhaW4KLSAgICAgICAgIyAiZHVyaW5nIiB0aGUgZGVsLiAgKE9uIG5vbi1DUHl0aG9uIGltcGxlbWVudGF0aW9ucywgaG93ZXZlciwgX19kZWxfXwotICAgICAgICAjIGlzIHR5cGljYWxseSBub3QgY2FsbGVkIGFnYWluLikKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oQy5jb250YWluZXIpLCAxKQotICAgICAgICBkZWwgQy5jb250YWluZXJbLTFdCi0gICAgICAgIGlmIHN1cHBvcnQuY2hlY2tfaW1wbF9kZXRhaWwoKToKLSAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuY29udGFpbmVyWy0xXS5hdHRyLCA0MikKIAogICAgICAgICAjIE1ha2UgYyBtb3J0YWwgYWdhaW4sIHNvIHRoYXQgdGhlIHRlc3QgZnJhbWV3b3JrIHdpdGggLWwgZG9lc24ndCByZXBvcnQKICAgICAgICAgIyBpdCBhcyBhIGxlYWsuCkBAIC00NTM1LDYgKzQzNjEsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlLl9fZGljdF9fWydfX3F1YWxuYW1lX18nXS5fX3NldF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsICdPaW5rJykKIAorICAgICAgICBnbG9iYWwgWQorICAgICAgICBjbGFzcyBZOgorICAgICAgICAgICAgY2xhc3MgSW5zaWRlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9fcXVhbG5hbWVfXywgJ1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuSW5zaWRlLl9fcXVhbG5hbWVfXywgJ1kuSW5zaWRlJykKKwogICAgIGRlZiB0ZXN0X3F1YWxuYW1lX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0geydfX3F1YWxuYW1lX18nOiAnc29tZS5uYW1lJ30KICAgICAgICAgdHAgPSB0eXBlKCdGb28nLCAoKSwgbnMpCkBAIC00NjkwLDExICs0NTIzLDQzOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgubXlrZXkyLCAnZnJvbSBCYXNlMicpCiAKIAorY2xhc3MgUGlja2xpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NoZWNrX3JlZHVjZShzZWxmLCBwcm90bywgb2JqLCBhcmdzPSgpLCBrd2FyZ3M9e30sIHN0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgbGlzdGl0ZW1zPU5vbmUsIGRpY3RpdGVtcz1Ob25lKToKKyAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9leF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwgYXJncywga3dhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwpICsgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlX3R5cGUgPSB0eXBlKG9iaikuX19iYXNlX18KKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IChjb3B5cmVnLl9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG9iaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBiYXNlX3R5cGUgaXMgb2JqZWN0IGVsc2UgYmFzZV90eXBlKG9iaikpKQorICAgICAgICAgICAgaWYgc3RhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlICs9IChzdGF0ZSwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9leF9fKHByb3RvKSwgcmVkdWNlX3ZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19yZWR1Y2VfXygpLCByZWR1Y2VfdmFsdWUpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHByb3RvY29scyA9IHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSkKKyAgICAgICAgYXJncyA9ICgtMTAxLCAic3BhbSIpCisgICAgICAgIGt3YXJncyA9IHsnYmFjb24nOiAtMjAxLCAnZmlzaCc6IC0zMDF9CisgICAgICAgIHN0YXRlID0geydjaGVlc2UnOiAtNDAxfQorCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIG9iaiA9IEMxKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MsIHN0YXRlPXN0YXRlKQorCisgICAgICAgIGNsYXNzIEMyOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiYmFkIGFyZ3MiCisgICAgICAgIG9iaiA9IEMyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKworICAgICAgICBjbGFzcyBDMzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MsIGt3YXJncykKKyAgICAgICAgb2JqID0gQzMoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywga3dhcmdzKQorICAgICAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM0OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywgImJhZCBkaWN0IikKKyAgICAgICAgY2xhc3MgQzU6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiYmFkIHR1cGxlIiwga3dhcmdzKQorICAgICAgICBjbGFzcyBDNjoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgY2xhc3MgQzc6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gQzQsIEM1LCBDNiwgQzc6CisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM4OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywga3dhcmdzKQorICAgICAgICBvYmogPSBDOCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKyAgICAgICAgY2xhc3MgQzk6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChhcmdzLCB7fSkKKyAgICAgICAgb2JqID0gQzkoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MpCisKKyAgICAgICAgY2xhc3MgQzEwOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEwKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisKKyAgICAgICAgY2xhc3MgQzExOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUKKyAgICAgICAgb2JqID0gQzExKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT1zdGF0ZSkKKworICAgICAgICBjbGFzcyBDMTI6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IGRpY3QiCisgICAgICAgIG9iaiA9IEMxMigpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgc3RhdGU9Im5vdCBkaWN0IikKKworICAgICAgICBjbGFzcyBDMTM6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKyAgICAgICAgb2JqID0gQzEzKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX2V4X18ocHJvdG8pCisgICAgICAgICAgICBpZiBwcm90byA8IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNDoKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IHR1cGxlKHN0YXRlKQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKQorCisgICAgICAgIG9iaiA9IEMxNCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBzdGF0ZT0oTm9uZSwgc3RhdGUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgb2JqLl9fcmVkdWNlX18oKQorCisgICAgICAgIGNsYXNzIEMxNShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb2JqID0gQzE1KHsicXVlYmVjIjogLTYwMX0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgZGljdGl0ZW1zPWRpY3Qob2JqKSkKKworICAgICAgICBjbGFzcyBDMTYobGlzdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9iaiA9IEMxNihbInl1a29uIl0pCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgbGlzdGl0ZW1zPWxpc3Qob2JqKSkKKworICAgIGRlZiBfYXNzZXJ0X2lzX2NvcHkoc2VsZiwgb2JqLCBvYmpjb3B5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIHZlcmlmeSBpZiB0d28gb2JqZWN0cyBhcmUgY29waWVzIG9mIGVhY2ggb3RoZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbXNnIGlzIE5vbmU6CisgICAgICAgICAgICBtc2cgPSAieyFyfSBpcyBub3QgYSBjb3B5IG9mIHshcn0iLmZvcm1hdChvYmosIG9iamNvcHkpCisgICAgICAgIGlmIHR5cGUob2JqKS5fX3JlcHJfXyBpcyBvYmplY3QuX19yZXByX186CisgICAgICAgICAgICAjIFdlIGhhdmUgdGhpcyBsaW1pdGF0aW9uIGZvciBub3cgYmVjYXVzZSB3ZSB1c2UgdGhlIG9iamVjdCdzIHJlcHIKKyAgICAgICAgICAgICMgdG8gaGVscCB1cyB2ZXJpZnkgdGhhdCB0aGUgdHdvIG9iamVjdHMgYXJlIGNvcGllcy4gVGhpcyBhbGxvd3MKKyAgICAgICAgICAgICMgdXMgdG8gZGVsZWdhdGUgdGhlIG5vbi1nZW5lcmljIHZlcmlmaWNhdGlvbiBsb2dpYyB0byB0aGUgb2JqZWN0cworICAgICAgICAgICAgIyB0aGVtc2VsdmVzLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigib2JqZWN0IHBhc3NlZCB0byBfYXNzZXJ0X2lzX2NvcHkgbXVzdCAiICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSBfX3JlcHJfXyBtZXRob2QuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmosIG9iamNvcHksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvYmopLCB0eXBlKG9iamNvcHkpLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZGljdF9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX3Nsb3RzX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG9iai5fX3Nsb3RzX18sIG9iamNvcHkuX19zbG90c19fLCBtc2c9bXNnKQorICAgICAgICAgICAgZm9yIHNsb3QgaW4gb2JqLl9fc2xvdHNfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG9iaiwgc2xvdCksIGhhc2F0dHIob2JqY29weSwgc2xvdCksIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9iaiwgc2xvdCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKG9iamNvcHksIHNsb3QsIE5vbmUpLCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2JqKSwgcmVwcihvYmpjb3B5KSwgbXNnPW1zZykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCk6CisgICAgICAgICIiIlV0aWxpdHkgbWV0aG9kIHRvIGdlbmVyYXRlIHRoZSBtYW55IHBvc3NpYmxlIHBpY2tsZSBjb25maWd1cmF0aW9ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIFBpY2tsZUNvcGllcjoKKyAgICAgICAgICAgICJUaGlzIGNsYXNzIGNvcGllcyBvYmplY3QgdXNpbmcgcGlja2xlLiIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm90bywgZHVtcHMsIGxvYWRzKToKKyAgICAgICAgICAgICAgICBzZWxmLnByb3RvID0gcHJvdG8KKyAgICAgICAgICAgICAgICBzZWxmLmR1bXBzID0gZHVtcHMKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzID0gbG9hZHMKKyAgICAgICAgICAgIGRlZiBjb3B5KHNlbGYsIG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubG9hZHMoc2VsZi5kdW1wcyhvYmosIHNlbGYucHJvdG8pKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgV2UgdHJ5IHRvIGJlIGFzIGRlc2NyaXB0aXZlIGFzIHBvc3NpYmxlIGhlcmUgc2luY2UgdGhpcyBpcworICAgICAgICAgICAgICAgICMgdGhlIHN0cmluZyB3aGljaCB3ZSB3aWxsIGFsbG93IHVzIHRvIHRlbGwgdGhlIHBpY2tsZQorICAgICAgICAgICAgICAgICMgY29uZmlndXJhdGlvbiB3ZSBhcmUgdXNpbmcgZHVyaW5nIGRlYnVnZ2luZy4KKyAgICAgICAgICAgICAgICByZXR1cm4gKCJQaWNrbGVDb3BpZXIocHJvdG89e30sIGR1bXBzPXt9Lnt9LCBsb2Fkcz17fS57fSkiCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHVtcHMuX19tb2R1bGVfXywgc2VsZi5kdW1wcy5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZHMuX19tb2R1bGVfXywgc2VsZi5sb2Fkcy5fX3F1YWxuYW1lX18pKQorICAgICAgICByZXR1cm4gKFBpY2tsZUNvcGllcigqYXJncykgZm9yIGFyZ3MgaW4KKyAgICAgICAgICAgICAgICAgICBpdGVydG9vbHMucHJvZHVjdChyYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUuZHVtcHMsIHBpY2tsZS5fZHVtcHN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwaWNrbGUubG9hZHMsIHBpY2tsZS5fbG9hZHN9KSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9zbG90cyhzZWxmKToKKyAgICAgICAgIyBUZXN0cyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fLgorCisgICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkCisgICAgICAgICMgZmFpbCAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQorICAgICAgICBnbG9iYWwgQworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgX19zbG90c19fID0gWydhJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKKworICAgICAgICBnbG9iYWwgRAorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwaWNrbGUuZHVtcHMoRCgpLCAwKQorCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAiQSBjbGFzcyB3aXRoIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIGltcGxlbWVudGVkLiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHN0YXRlID0gZ2V0YXR0cihzZWxmLCAnX19kaWN0X18nLCB7fSkuY29weSgpCisgICAgICAgICAgICAgICAgZm9yIGNscyBpbiB0eXBlKHNlbGYpLl9fbXJvX186CisgICAgICAgICAgICAgICAgICAgIGZvciBzbG90IGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtzbG90XSA9IGdldGF0dHIoc2VsZiwgc2xvdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlcygpPCVyPiIgJSAodHlwZShzZWxmKS5fX25hbWVfXywgc2VsZi5fX2dldHN0YXRlX18oKSkKKworICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgb2YgYSBjbGFzcyB3aXRoIHNsb3RzLiIKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBnbG9iYWwgRQorICAgICAgICBjbGFzcyBFKEMpOgorICAgICAgICAgICAgIkEgc3ViY2xhc3Mgd2l0aCBhbiBleHRyYSBzbG90LiIKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCisKKyAgICAgICAgIyBOb3cgaXQgc2hvdWxkIHdvcmsKKyAgICAgICAgZm9yIHBpY2tsZV9jb3BpZXIgaW4gc2VsZi5fZ2VuZXJhdGVfcGlja2xlX2NvcGllcnMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAgeCA9IEMoKQorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgICAgIHggPSBEKCkKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHguYiA9IDEwMAorICAgICAgICAgICAgICAgIHkgPSBwaWNrbGVfY29waWVyLmNvcHkoeCkKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weSh4LCB5KQorCisgICAgICAgICAgICAgICAgeCA9IEUoKQorICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeC5iID0gImZvbyIKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9jb3B5aW5nKHNlbGYpOgorICAgICAgICAjIFRlc3RzIHBpY2tsaW5nIGFuZCBjb3B5aW5nIG5ldy1zdHlsZSBjbGFzc2VzIGFuZCBvYmplY3RzLgorICAgICAgICBnbG9iYWwgQzEKKyAgICAgICAgY2xhc3MgQzE6CisgICAgICAgICAgICAiVGhlIHN0YXRlIG9mIHRoaXMgY2xhc3MgaXMgY29weWFibGUgdmlhIGl0cyBpbnN0YW5jZSBkaWN0LiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gVHJ1ZQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMSglciwgJXIpIiAlIChzZWxmLmEsIHNlbGYuYikKKworICAgICAgICBnbG9iYWwgQzIKKyAgICAgICAgY2xhc3MgQzIobGlzdCk6CisgICAgICAgICAgICAiQSBsaXN0IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIpOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICAgICAgIyBUaGlzIGhlbHBzIHRlc3RpbmcgdGhhdCBfX2luaXRfXyBpcyBub3QgY2FsbGVkIGR1cmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIHVucGlja2xpbmcgcHJvY2Vzcywgd2hpY2ggd291bGQgY2F1c2UgZXh0cmEgYXBwZW5kcy4KKyAgICAgICAgICAgICAgICBzZWxmLmFwcGVuZCgiY2hlZXNlIikKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5BUkdTCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMiglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEMzCisgICAgICAgIGNsYXNzIEMzKGxpc3QpOgorICAgICAgICAgICAgIkEgbGlzdCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRzdGF0ZV9fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIE5FRURfRElDVF9DT1BZSU5HID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgICMgVGhpcyBoZWxwcyB0ZXN0aW5nIHRoYXQgX19pbml0X18gaXMgbm90IGNhbGxlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgIyB1bnBpY2tsaW5nIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGNhdXNlIGV4dHJhIGFwcGVuZHMuCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoImNoZWVzZSIpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgorICAgICAgICAgICAgICAgIGEsIGIgPSBzdGF0ZQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDMyglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGxpc3Qoc2VsZikpCisKKyAgICAgICAgZ2xvYmFsIEM0CisgICAgICAgIGNsYXNzIEM0KGludCk6CisgICAgICAgICAgICAiQW4gaW50IHN1YmNsYXNzIGNvcHlhYmxlIHZpYSBfX2dldG5ld2FyZ3NfXy4iCisgICAgICAgICAgICBBUkdTID0gKCJoZWxsbyIsICJ3b3JsZCIsIDEpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLkFSR1MKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkM0KCVyLCAlcik8JXI+IiAlIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDNQorICAgICAgICBjbGFzcyBDNShpbnQpOgorICAgICAgICAgICAgIkFuIGludCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRuZXdhcmdzX2V4X18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgS1dBUkdTID0geyd2YWx1ZSc6IDN9CisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsIGEsIGIsICosIHZhbHVlPTApOgorICAgICAgICAgICAgICAgIHNlbGYgPSBzdXBlcigpLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY2xzLkFSR1MsIGNscy5LV0FSR1MpCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDNSglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKKworICAgICAgICB0ZXN0X2NsYXNzZXMgPSAoQzEsIEMyLCBDMywgQzQsIEM1KQorICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIHBpY2tsZQorICAgICAgICBwaWNrbGVfY29waWVycyA9IHNlbGYuX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCkKKyAgICAgICAgZm9yIGNscywgcGlja2xlX2NvcGllciBpbiBpdGVydG9vbHMucHJvZHVjdCh0ZXN0X2NsYXNzZXMsIHBpY2tsZV9jb3BpZXJzKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMsIHBpY2tsZV9jb3BpZXI9cGlja2xlX2NvcGllcik6CisgICAgICAgICAgICAgICAga3dhcmdzID0gZ2V0YXR0cihjbHMsICdLV0FSR1MnLCB7fSkKKyAgICAgICAgICAgICAgICBvYmogPSBjbHMoKmNscy5BUkdTLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBwcm90byA9IHBpY2tsZV9jb3BpZXIucHJvdG8KKyAgICAgICAgICAgICAgICBpZiAyIDw9IHByb3RvIDwgNCBhbmQgaGFzYXR0cihjbHMsICdfX2dldG5ld2FyZ3NfZXhfXycpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlX2NvcGllci5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG9iamNvcHkgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyIGFuZCBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBwaWNrbGVfY29waWVyLmNvcHkob2JqY29weSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5MikKKworICAgICAgICAjIFRlc3RpbmcgY29weWluZyB0aHJvdWdoIGNvcHkuZGVlcGNvcHkoKQorICAgICAgICBmb3IgY2xzIGluIHRlc3RfY2xhc3NlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGNscz1jbHMpOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IGdldGF0dHIoY2xzLCAnS1dBUkdTJywge30pCisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCpjbHMuQVJHUywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjb3B5IG1vZHVsZSB0byBzdXBwb3J0IFBFUCAzMTU0J3MKKyAgICAgICAgICAgICAgICAjIHJlZHVjZSBwcm90b2NvbCA0LgorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAnX19nZXRuZXdhcmdzX2V4X18nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBvYmpjb3B5ID0gZGVlcGNvcHkob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weSkKKyAgICAgICAgICAgICAgICAjIEZvciB0ZXN0IGNsYXNzZXMgdGhhdCBzdXBwb3J0cyB0aGlzLCBtYWtlIHN1cmUgd2UgZGlkbid0IGdvCisgICAgICAgICAgICAgICAgIyBhcm91bmQgdGhlIHJlZHVjZSBwcm90b2NvbCBieSBzaW1wbHkgY29weWluZyB0aGUgYXR0cmlidXRlCisgICAgICAgICAgICAgICAgIyBkaWN0aW9uYXJ5LiBXZSBjbGVhciBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBwcmV2aW91cyBjb3B5IHRvCisgICAgICAgICAgICAgICAgIyBub3QgbXV0YXRlIHRoZSBvcmlnaW5hbCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgICBpZiBub3QgY2xzLk5FRURfRElDVF9DT1BZSU5HOgorICAgICAgICAgICAgICAgICAgICBvYmpjb3B5Ll9fZGljdF9fLmNsZWFyKCkKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weTIgPSBkZWVwY29weShvYmpjb3B5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkyKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICAjIFJ1biBhbGwgbG9jYWwgdGVzdCBjYXNlcywgd2l0aCBQVHlwZXNMb25nSW5pdFRlc3QgZmlyc3QuCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUFR5cGVzTG9uZ0luaXRUZXN0LCBPcGVyYXRvcnNUZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzUHJvcGVydGllc0FuZE1ldGhvZHMsIERpY3RQcm94eVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE1pc2NUZXN0cykKKyAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjVGVzdHMsIFBpY2tsaW5nVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQppbmRleCBiZWY0ZTE4Li40MGViZWVlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CkBAIC0yLDEzICsyLDE3IEBACiAKICMgSW5pdGlhbCB0ZXN0cyBhcmUgY29waWVkIGFzIGlzIGZyb20gInRlc3RfcG9sbC5weSIKIAotaW1wb3J0IG9zLCBzZWxlY3QsIHJhbmRvbSwgdW5pdHRlc3QsIHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc2VsZWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAogCiB0cnk6CiAgICAgc2VsZWN0LmRldnBvbGwKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9kZXZwb2xsIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQiKQogCiAKIGRlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKQEAgLTg3LDYgKzkxLDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDEgPDwgNjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHBvbGxzdGVyLnBvbGwsIDEgPDwgNjQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZGV2cG9sbCA9IHNlbGVjdC5kZXZwb2xsKCkKKworICAgICAgICAjIHRlc3QgZmlsZW5vKCkgbWV0aG9kIGFuZCBjbG9zZWQgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXZwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZGV2cG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZGV2cG9sbC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXZwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZGV2cG9sbC5jbG9zZSgpCisKKyAgICAgICAgIyBvcGVyYXRpb25zIG11c3QgZmFpbCB3aXRoIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIC4uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5wb2xsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnJlZ2lzdGVyLCBmZCwgZmQsIHNlbGVjdC5QT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGRldnBvbGwgPSBzZWxlY3QuZGV2cG9sbCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChkZXZwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShkZXZwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChEZXZQb2xsVGVzdHMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKaW5kZXggZDEzNTViYi4uOTRkNmJlNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXMucHkKQEAgLTEsMTEgKzEsMjkgQEAKICMgTWluaW1hbCB0ZXN0cyBmb3IgZGlzIG1vZHVsZQogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjYXB0dXJlZF9zdGRvdXQKK2Zyb20gdGVzdC5ieXRlY29kZV9oZWxwZXIgaW1wb3J0IEJ5dGVjb2RlVGVzdENhc2UKIGltcG9ydCBkaWZmbGliCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGltcG9ydCBkaXMKIGltcG9ydCBpbworaW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjIsMTIgKzQwLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OCwxMSArNjYsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC0xNzEsMzMgKzE4OSw2MyBAQAogICAgICAgICAgICAgIDI1IFJFVFVSTl9WQUxVRQogIiIiCiAKK2Rpc190cmFjZWJhY2sgPSAiIiJcCisgJS00ZCAgICAgICAgIDAgU0VUVVBfRVhDRVBUICAgICAgICAgICAgMTIgKHRvIDE1KQorCisgJS00ZCAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgICAgIDYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDApCisgICAgLS0+ICAgICAgIDkgQklOQVJZX1RSVUVfRElWSURFCisgICAgICAgICAgICAgMTAgUE9QX1RPUAorICAgICAgICAgICAgIDExIFBPUF9CTE9DSworICAgICAgICAgICAgIDEyIEpVTVBfRk9SV0FSRCAgICAgICAgICAgIDQ2ICh0byA2MSkKKworICUtNGQgICA+PiAgIDE1IERVUF9UT1AKKyAgICAgICAgICAgICAxNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoRXhjZXB0aW9uKQorICAgICAgICAgICAgIDE5IENPTVBBUkVfT1AgICAgICAgICAgICAgIDEwIChleGNlcHRpb24gbWF0Y2gpCisgICAgICAgICAgICAgMjIgUE9QX0pVTVBfSUZfRkFMU0UgICAgICAgNjAKKyAgICAgICAgICAgICAyNSBQT1BfVE9QCisgICAgICAgICAgICAgMjYgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgMjkgUE9QX1RPUAorICAgICAgICAgICAgIDMwIFNFVFVQX0ZJTkFMTFkgICAgICAgICAgIDE0ICh0byA0NykKKworICUtNGQgICAgICAgIDMzIExPQURfRkFTVCAgICAgICAgICAgICAgICAwIChlKQorICAgICAgICAgICAgIDM2IExPQURfQVRUUiAgICAgICAgICAgICAgICAxIChfX3RyYWNlYmFja19fKQorICAgICAgICAgICAgIDM5IFNUT1JFX0ZBU1QgICAgICAgICAgICAgICAxICh0YikKKyAgICAgICAgICAgICA0MiBQT1BfQkxPQ0sKKyAgICAgICAgICAgICA0MyBQT1BfRVhDRVBUCisgICAgICAgICAgICAgNDQgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgID4+ICAgNDcgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCisgICAgICAgICAgICAgNTAgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgNTMgREVMRVRFX0ZBU1QgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgNTYgRU5EX0ZJTkFMTFkKKyAgICAgICAgICAgICA1NyBKVU1QX0ZPUldBUkQgICAgICAgICAgICAgMSAodG8gNjEpCisgICAgICAgID4+ICAgNjAgRU5EX0ZJTkFMTFkKKworICUtNGQgICA+PiAgIDYxIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICh0YikKKyAgICAgICAgICAgICA2NCBSRVRVUk5fVkFMVUUKKyIiIiAlIChUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDEsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAyLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMywKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDQsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyA1KQorCiBjbGFzcyBEaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2Rpc2Fzc2VtYmx5KHNlbGYsIGZ1bmMsIGxhc3RpPS0xLCB3cmFwcGVyPVRydWUpOgotICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQotICAgICAgICBzYXZlX3N0ZG91dCA9IHN5cy5zdGRvdXQKLSAgICAgICAgc3lzLnN0ZG91dCA9IHMKLSAgICAgICAgdHJ5OgorICAgICAgICAjIFdlIHdhbnQgdG8gdGVzdCB0aGUgZGVmYXVsdCBwcmludGluZyBiZWhhdmlvdXIsIG5vdCB0aGUgZmlsZSBhcmcKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KG91dHB1dCk6CiAgICAgICAgICAgICBpZiB3cmFwcGVyOgogICAgICAgICAgICAgICAgIGRpcy5kaXMoZnVuYykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGlzLmRpc2Fzc2VtYmxlKGZ1bmMsIGxhc3RpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVfc3Rkb3V0Ci0gICAgICAgICMgVHJpbSB0cmFpbGluZyBibGFua3MgKGlmIGFueSkuCi0gICAgICAgIHJldHVybiBbbGluZS5yc3RyaXAoKSBmb3IgbGluZSBpbiBzLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpXQorICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKIAogICAgIGRlZiBnZXRfZGlzYXNzZW1ibGVfYXNfc3RyaW5nKHNlbGYsIGZ1bmMsIGxhc3RpPS0xKToKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jLCBsYXN0aSwgRmFsc2UpKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYywgbGFzdGksIEZhbHNlKQogCiAgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgotICAgICAgICBsaW5lcyA9IHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMpCi0gICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWQuc3BsaXRsaW5lcygpCi0gICAgICAgIGlmIGV4cGVjdGVkICE9IGxpbmVzOgotICAgICAgICAgICAgc2VsZi5mYWlsKAotICAgICAgICAgICAgICAgICJldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RhdGlvbjpcbiIgKwotICAgICAgICAgICAgICAgICJcbiIuam9pbihkaWZmbGliLm5kaWZmKGV4cGVjdGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfZGlzYXNzZW1ibHkoZnVuYyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfb3BtYXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlzLm9wbWFwWyJOT1AiXSwgOSkKQEAgLTI4OCwzNSArMzM2LDM1IEBACiAgICAgZGVmIHRlc3RfZGlzX29iamVjdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuZGlzLCBvYmplY3QoKSkKIAorY2xhc3MgRGlzV2l0aEZpbGVUZXN0cyhEaXNUZXN0cyk6CisKKyAgICAjIFJ1biB0aGUgdGVzdHMgYWdhaW4sIHVzaW5nIHRoZSBmaWxlIGFyZyBpbnN0ZWFkIG9mIHByaW50CisgICAgZGVmIGdldF9kaXNhc3NlbWJseShzZWxmLCBmdW5jLCBsYXN0aT0tMSwgd3JhcHBlcj1UcnVlKToKKyAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBpZiB3cmFwcGVyOgorICAgICAgICAgICAgZGlzLmRpcyhmdW5jLCBmaWxlPW91dHB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRpcy5kaXNhc3NlbWJsZShmdW5jLCBsYXN0aSwgZmlsZT1vdXRwdXQpCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQorCisKKwogY29kZV9pbmZvX2NvZGVfaW5mbyA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICBjb2RlX2luZm8KIEZpbGVuYW1lOiAgICAgICAgICAoLiopCiBBcmd1bWVudCBjb3VudDogICAgMQogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAxCi1TdGFjayBzaXplOiAgICAgICAgNAorU3RhY2sgc2l6ZTogICAgICAgIDMKIEZsYWdzOiAgICAgICAgICAgICBPUFRJTUlaRUQsIE5FV0xPQ0FMUywgTk9GUkVFCiBDb25zdGFudHM6CiAgICAwOiAlcgotICAgMTogJ19fZnVuY19fJwotICAgMjogJ19fY29kZV9fJwotICAgMzogJzxjb2RlX2luZm8+JwotICAgNDogJ2NvX2NvZGUnCi0gICA1OiAiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJSVzIG9iamVjdHMiCi0lc05hbWVzOgotICAgMDogaGFzYXR0cgotICAgMTogX19mdW5jX18KLSAgIDI6IF9fY29kZV9fCi0gICAzOiBpc2luc3RhbmNlCi0gICA0OiBzdHIKLSAgIDU6IF90cnlfY29tcGlsZQotICAgNjogX2Zvcm1hdF9jb2RlX2luZm8KLSAgIDc6IFR5cGVFcnJvcgotICAgODogdHlwZQotICAgOTogX19uYW1lX18KK05hbWVzOgorICAgMDogX2Zvcm1hdF9jb2RlX2luZm8KKyAgIDE6IF9nZXRfY29kZV9vYmplY3QKIFZhcmlhYmxlIG5hbWVzOgotICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCAnICAgNjogTm9uZVxuJykKLSAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCAnJykpCisgICAwOiB4IiIiICUgKCgnRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLicsKQorICAgICAgICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyIGVsc2UgKE5vbmUsKSkKIAogQHN0YXRpY21ldGhvZAogZGVmIHRyaWNreSh4LCB5LCB6PVRydWUsICphcmdzLCBjLCBkLCBlPVtdLCAqKmt3ZHMpOgpAQCAtMzgwLDcgKzQyOCw3IEBACiAKIGNvZGVfaW5mb19leHByX3N0ciA9ICIiIlwKIE5hbWU6ICAgICAgICAgICAgICA8bW9kdWxlPgotRmlsZW5hbWU6ICAgICAgICAgIDxjb2RlX2luZm8+CitGaWxlbmFtZTogICAgICAgICAgPGRpc2Fzc2VtYmx5PgogQXJndW1lbnQgY291bnQ6ICAgIDAKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMApAQCAtMzkzLDcgKzQ0MSw3IEBACiAKIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQwNyw3ICs0NTUsNyBAQAogCiBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTQ0MSw2ICs0ODksOSBAQAogICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CiAgICAgICAgICAgICAgICAgZGlzLnNob3dfY29kZSh4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQrIlxuIikKKyAgICAgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCwgZmlsZT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dC5nZXR2YWx1ZSgpLCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X2NvZGVfaW5mb19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmNvZGVfaW5mbywgb2JqZWN0KCkpCkBAIC00NDksOCArNTAwLDMzNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5wcmV0dHlfZmxhZ3MoMCksICcweDAnKQogCiAKKyMgRm9kZGVyIGZvciBpbnN0cnVjdGlvbiBpbnRyb3NwZWN0aW9uIHRlc3RzCisjICAgRWRpdGluZyBhbnkgb2YgdGhlc2UgbWF5IHJlcXVpcmUgcmVjYWxjdWxhdGluZyB0aGUgZXhwZWN0ZWQgb3V0cHV0CitkZWYgb3V0ZXIoYT0xLCBiPTIpOgorICAgIGRlZiBmKGM9MywgZD00KToKKyAgICAgICAgZGVmIGlubmVyKGU9NSwgZj02KToKKyAgICAgICAgICAgIHByaW50KGEsIGIsIGMsIGQsIGUsIGYpCisgICAgICAgIHByaW50KGEsIGIsIGMsIGQpCisgICAgICAgIHJldHVybiBpbm5lcgorICAgIHByaW50KGEsIGIsICcnLCAxLCBbXSwge30sICJIZWxsbyB3b3JsZCEiKQorICAgIHJldHVybiBmCisKK2RlZiBqdW1weSgpOgorICAgICMgVGhpcyB3b24ndCBhY3R1YWxseSBydW4gKGJ1dCB0aGF0J3MgT0ssIHdlIG9ubHkgZGlzYXNzZW1ibGUgaXQpCisgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICBwcmludChpKQorICAgICAgICBpZiBpIDwgNDoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyIpCisgICAgd2hpbGUgaToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaSAtPSAxCisgICAgICAgIGlmIGkgPiA2OgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHByaW50KCJXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/IikKKyAgICB0cnk6CisgICAgICAgIDEgLyAwCisgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICBwcmludCgiSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLiIpCisgICAgZWxzZToKKyAgICAgICAgd2l0aCBpIGFzIGRvZGd5OgorICAgICAgICAgICAgcHJpbnQoIk5ldmVyIHJlYWNoIHRoaXMiKQorICAgIGZpbmFsbHk6CisgICAgICAgIHByaW50KCJPSywgbm93IHdlJ3JlIGRvbmUiKQorCisjIEVuZCBmb2RkZXIgZm9yIG9waW5mbyBnZW5lcmF0aW9uIHRlc3RzCitleHBlY3RlZF9vdXRlcl9saW5lID0gMQorX2xpbmVfb2Zmc2V0ID0gb3V0ZXIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gLSAxCitjb2RlX29iamVjdF9mID0gb3V0ZXIuX19jb2RlX18uY29fY29uc3RzWzNdCitleHBlY3RlZF9mX2xpbmUgPSBjb2RlX29iamVjdF9mLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0Citjb2RlX29iamVjdF9pbm5lciA9IGNvZGVfb2JqZWN0X2YuY29fY29uc3RzWzNdCitleHBlY3RlZF9pbm5lcl9saW5lID0gY29kZV9vYmplY3RfaW5uZXIuY29fZmlyc3RsaW5lbm8gLSBfbGluZV9vZmZzZXQKK2V4cGVjdGVkX2p1bXB5X2xpbmUgPSAxCisKKyMgVGhlIGZvbGxvd2luZyBsaW5lcyBhcmUgdXNlZnVsIHRvIHJlZ2VuZXJhdGUgdGhlIGV4cGVjdGVkIHJlc3VsdHMgYWZ0ZXIKKyMgZWl0aGVyIHRoZSBmb2RkZXIgaXMgbW9kaWZpZWQgb3IgdGhlIGJ5dGVjb2RlIGdlbmVyYXRpb24gY2hhbmdlcworIyBBZnRlciByZWdlbmVyYXRpb24sIHVwZGF0ZSB0aGUgcmVmZXJlbmNlcyB0byBjb2RlX29iamVjdF9mIGFuZAorIyBjb2RlX29iamVjdF9pbm5lciBiZWZvcmUgcmVydW5uaW5nIHRoZSB0ZXN0cworCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19vdXRlciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fZiA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIoKSgpLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19pbm5lciA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKyNfaW5zdHJ1Y3Rpb25zID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2p1bXB5ID0gW1xuICAnLAorICAgICAgIycsXG4gICcuam9pbihtYXAoc3RyLCBfaW5zdHJ1Y3Rpb25zKSksICcsXG5dJywgc2VwPScnKQorCisKK0luc3RydWN0aW9uID0gZGlzLkluc3RydWN0aW9uCitleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9MywgYXJncmVwcj0nMycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0yLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9UVVBMRScsIG9wY29kZT0xMDIsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9Y29kZV9vYmplY3RfZiwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2YpLCBvZmZzZXQ9MTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mJyIsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT03LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9JycsIGFyZ3JlcHI9IicnIiwgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz02LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0zOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX0xJU1QnLCBvcGNvZGU9MTAzLCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX01BUCcsIG9wY29kZT0xMDUsIGFyZz0wLCBhcmd2YWw9MCwgYXJncmVwcj0nJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9J0hlbGxvIHdvcmxkIScsIGFyZ3JlcHI9IidIZWxsbyB3b3JsZCEnIiwgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz03LCBhcmd2YWw9NywgYXJncmVwcj0nNyBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1JFVFVSTl9WQUxVRScsIG9wY29kZT04MywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworZXhwZWN0ZWRfb3BpbmZvX2YgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0xLCBhcmd2YWw9NSwgYXJncmVwcj0nNScsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MCwgYXJndmFsPSdjJywgYXJncmVwcj0nYycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9NCwgYXJndmFsPTQsIGFyZ3JlcHI9JycsIG9mZnNldD0xOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2lubmVyLCBhcmdyZXByPXJlcHIoY29kZV9vYmplY3RfaW5uZXIpLCBvZmZzZXQ9MjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lcicsIGFyZ3JlcHI9IidvdXRlci48bG9jYWxzPi5mLjxsb2NhbHM+LmlubmVyJyIsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J01BS0VfQ0xPU1VSRScsIG9wY29kZT0xMzQsIGFyZz0yLCBhcmd2YWw9MiwgYXJncmVwcj0nJywgb2Zmc2V0PTI3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9MzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MzMsIHN0YXJ0c19saW5lPTUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9MzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nYicsIGFyZ3JlcHI9J2InLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTEsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9NDUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPSc0IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTQ4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0yLCBhcmd2YWw9J2lubmVyJywgYXJncmVwcj0naW5uZXInLCBvZmZzZXQ9NTIsIHN0YXJ0c19saW5lPTYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19pbm5lciA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTIsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MywgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2UnLCBhcmdyZXByPSdlJywgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTEsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTYsIGFyZ3ZhbD02LCBhcmdyZXByPSc2IHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19qdW1weSA9IFsKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9MT09QJywgb3Bjb2RlPTEyMCwgYXJnPTc0LCBhcmd2YWw9NzcsIGFyZ3JlcHI9J3RvIDc3Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0wLCBhcmd2YWw9J3JhbmdlJywgYXJncmVwcj0ncmFuZ2UnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTEwLCBhcmdyZXByPScxMCcsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nR0VUX0lURVInLCBvcGNvZGU9NjgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRk9SX0lURVInLCBvcGNvZGU9OTMsIGFyZz01MCwgYXJndmFsPTY2LCBhcmdyZXByPSd0byA2NicsIG9mZnNldD0xMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTE2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE5LCBzdGFydHNfbGluZT00LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTI5LCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0zMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0zNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTQ3LCBhcmd2YWw9NDcsIGFyZ3JlcHI9JycsIG9mZnNldD0zOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTQxLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD00NywgYXJncmVwcj0ndG8gNDcnLCBvZmZzZXQ9NDQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD00Nywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD01MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD01Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD01Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU5LCBzdGFydHNfbGluZT04LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD02Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD02Nywgc3RhcnRzX2xpbmU9MTAsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTQsIGFyZ3ZhbD0nSSBjYW4gaGF6IGVsc2UgY2xhdXNlPycsIGFyZ3JlcHI9IidJIGNhbiBoYXogZWxzZSBjbGF1c2U/JyIsIG9mZnNldD03MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTE1NCwgYXJncmVwcj0ndG8gMTU0Jywgb2Zmc2V0PTc3LCBzdGFydHNfbGluZT0xMSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9ODAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9KVU1QX0lGX0ZBTFNFJywgb3Bjb2RlPTExNCwgYXJnPTE0MywgYXJndmFsPTE0MywgYXJncmVwcj0nJywgb2Zmc2V0PTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTg2LCBzdGFydHNfbGluZT0xMiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTg5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD05Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9OTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD05Niwgc3RhcnRzX2xpbmU9MTMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTUsIGFyZ3ZhbD0xLCBhcmdyZXByPScxJywgb2Zmc2V0PTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSU5QTEFDRV9TVUJUUkFDVCcsIG9wY29kZT01NiwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTAyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTEwNiwgc3RhcnRzX2xpbmU9MTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD02LCBhcmdyZXByPSc2Jywgb2Zmc2V0PTEwOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9NCwgYXJndmFsPSc+JywgYXJncmVwcj0nPicsIG9mZnNldD0xMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMjQsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMTgsIHN0YXJ0c19saW5lPTE1LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTAsIGFyZ3ZhbD0xMjQsIGFyZ3JlcHI9J3RvIDEyNCcsIG9mZnNldD0xMjEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMjQsIHN0YXJ0c19saW5lPTE2LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTIsIGFyZ3ZhbD00LCBhcmdyZXByPSc0Jywgb2Zmc2V0PTEyNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NPTVBBUkVfT1AnLCBvcGNvZGU9MTA3LCBhcmc9MCwgYXJndmFsPSc8JywgYXJncmVwcj0nPCcsIG9mZnNldD0xMzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTMzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlJFQUtfTE9PUCcsIG9wY29kZT04MCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTM2LCBzdGFydHNfbGluZT0xNywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTE0MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTQzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTQ0LCBzdGFydHNfbGluZT0xOSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPSdXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JywgYXJncmVwcj0iJ1dobyBsZXQgbG9sY2F0eiBpbnRvIHRoaXMgdGVzdCBzdWl0ZT8nIiwgb2Zmc2V0PTE0Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTUwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9GSU5BTExZJywgb3Bjb2RlPTEyMiwgYXJnPTcyLCBhcmd2YWw9MjI5LCBhcmdyZXByPSd0byAyMjknLCBvZmZzZXQ9MTU0LCBzdGFydHNfbGluZT0yMCwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRVhDRVBUJywgb3Bjb2RlPTEyMSwgYXJnPTEyLCBhcmd2YWw9MTcyLCBhcmdyZXByPSd0byAxNzInLCBvZmZzZXQ9MTU3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD0xNjAsIHN0YXJ0c19saW5lPTIxLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz03LCBhcmd2YWw9MCwgYXJncmVwcj0nMCcsIG9mZnNldD0xNjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCSU5BUllfVFJVRV9ESVZJREUnLCBvcGNvZGU9MjcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY3LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjgsIGFyZ3ZhbD0yMDAsIGFyZ3JlcHI9J3RvIDIwMCcsIG9mZnNldD0xNjksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdEVVBfVE9QJywgb3Bjb2RlPTQsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE3Miwgc3RhcnRzX2xpbmU9MjIsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTIsIGFyZ3ZhbD0nWmVyb0RpdmlzaW9uRXJyb3InLCBhcmdyZXByPSdaZXJvRGl2aXNpb25FcnJvcicsIG9mZnNldD0xNzMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTEwLCBhcmd2YWw9J2V4Y2VwdGlvbiBtYXRjaCcsIGFyZ3JlcHI9J2V4Y2VwdGlvbiBtYXRjaCcsIG9mZnNldD0xNzYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xOTksIGFyZ3ZhbD0xOTksIGFyZ3JlcHI9JycsIG9mZnNldD0xNzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Miwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTgzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9MTg1LCBzdGFydHNfbGluZT0yMywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9OCwgYXJndmFsPSdIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJywgYXJncmVwcj0iJ0hlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4nIiwgb2Zmc2V0PTE4OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MTkxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfRVhDRVBUJywgb3Bjb2RlPTg5LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xOTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0ZPUldBUkQnLCBvcGNvZGU9MTEwLCBhcmc9MjYsIGFyZ3ZhbD0yMjUsIGFyZ3JlcHI9J3RvIDIyNScsIG9mZnNldD0xOTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yMDAsIHN0YXJ0c19saW5lPTI1LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdTRVRVUF9XSVRIJywgb3Bjb2RlPTE0MywgYXJnPTE3LCBhcmd2YWw9MjIzLCBhcmdyZXByPSd0byAyMjMnLCBvZmZzZXQ9MjAzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU1RPUkVfRkFTVCcsIG9wY29kZT0xMjUsIGFyZz0xLCBhcmd2YWw9J2RvZGd5JywgYXJncmVwcj0nZG9kZ3knLCBvZmZzZXQ9MjA2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIwOSwgc3RhcnRzX2xpbmU9MjYsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTksIGFyZ3ZhbD0nTmV2ZXIgcmVhY2ggdGhpcycsIGFyZ3JlcHI9IidOZXZlciByZWFjaCB0aGlzJyIsIG9mZnNldD0yMTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIxNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1dJVEhfQ0xFQU5VUCcsIG9wY29kZT04MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjIzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0JMT0NLJywgb3Bjb2RlPTg3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMjUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjI2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTIyOSwgc3RhcnRzX2xpbmU9MjgsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MTAsIGFyZ3ZhbD0iT0ssIG5vdyB3ZSdyZSBkb25lIiwgYXJncmVwcj0nIk9LLCBub3cgd2VcJ3JlIGRvbmUiJywgb2Zmc2V0PTIzMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9MjM1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yMzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdFTkRfRklOQUxMWScsIG9wY29kZT04OCwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTI0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCisjIE9uZSBsYXN0IHBpZWNlIG9mIGluc3BlY3QgZm9kZGVyIHRvIGNoZWNrIHRoZSBkZWZhdWx0IGxpbmUgbnVtYmVyIGhhbmRsaW5nCitkZWYgc2ltcGxlKCk6IHBhc3MKK2V4cGVjdGVkX29waW5mb19zaW1wbGUgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0wLCBzdGFydHNfbGluZT1zaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8sIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKQorXQorCisKK2NsYXNzIEluc3RydWN0aW9uVGVzdHMoQnl0ZWNvZGVUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKHNpbXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9maXJzdF9saW5lX3NldF90b19Ob25lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUsIGZpcnN0X2xpbmU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19zaW1wbGUpCisKKyAgICBkZWYgdGVzdF9vdXRlcihzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGYgPSBvdXRlcigpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfZl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2YpCisKKyAgICBkZWYgdGVzdF9kb3VibHlfbmVzdGVkKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpOgorICAgICAgICAgICAgaW5uZXIgPSBvdXRlcigpKCkKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoaW5uZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfaW5uZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19pbm5lcikKKworICAgIGRlZiB0ZXN0X2p1bXB5KHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhqdW1weSwgZmlyc3RfbGluZT1leHBlY3RlZF9qdW1weV9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX2p1bXB5KQorCisjIGdldF9pbnN0cnVjdGlvbnMgaGFzIGl0cyBvd24gdGVzdHMgYWJvdmUsIHNvIGNhbiByZWx5IG9uIGl0IHRvIHZhbGlkYXRlCisjIHRoZSBvYmplY3Qgb3JpZW50ZWQgQVBJCitjbGFzcyBCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9pbnN0YW50aWF0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2l0aCBmdW5jdGlvbiwgbWV0aG9kLCBjb2RlIHN0cmluZyBhbmQgY29kZSBvYmplY3QKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZShvYmopCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIuY29kZW9iaiwgdHlwZXMuQ29kZVR5cGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXMuQnl0ZWNvZGUsIG9iamVjdCgpKQorCisgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3Igb2JqIGluIFtfZiwgX0MoMSkuX19pbml0X18sICJhPTEiLCBfZi5fX2NvZGVfX106CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvYmo9b2JqKToKKyAgICAgICAgICAgICAgICB2aWFfb2JqZWN0ID0gbGlzdChkaXMuQnl0ZWNvZGUob2JqKSkKKyAgICAgICAgICAgICAgICB2aWFfZ2VuZXJhdG9yID0gbGlzdChkaXMuZ2V0X2luc3RydWN0aW9ucyhvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlhX29iamVjdCwgdmlhX2dlbmVyYXRvcikKKworICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWN0dWFsKSwgZXhwZWN0ZWRfb3BpbmZvX291dGVyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2xpbmVfaW5fZGlzYXNzZW1ibHkoc2VsZik6CisgICAgICAgICMgVXNlIHRoZSBsaW5lIGluIHRoZSBzb3VyY2UgY29kZQorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUoc2ltcGxlKS5kaXMoKVs6M10KKyAgICAgICAgZXhwZWN0ZWQgPSAiezo+M30iLmZvcm1hdChzaW1wbGUuX19jb2RlX18uY29fZmlyc3RsaW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgIyBVc2UgYW4gZXhwbGljaXQgZmlyc3QgbGluZSBudW1iZXIKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSwgZmlyc3RfbGluZT0zNTApLmRpcygpWzozXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgIjM1MCIpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSAxMDAwCisgICAgICAgIGZvciB4LCBleHBlY3RlZCBpbiBDb2RlSW5mb1Rlc3RzLnRlc3RfcGFpcnM6CisgICAgICAgICAgICBiID0gZGlzLkJ5dGVjb2RlKHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGIuaW5mbygpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2Rpc2Fzc2VtYmxlZChzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKF9mKS5kaXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZGlzX2YpCisKKyAgICBkZWYgdGVzdF9mcm9tX3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY3VycmVudF9vZmZzZXQsIHRiLnRiX2xhc3RpKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2tfZGlzKHNlbGYpOgorICAgICAgICB0YiA9IGdldF90YigpCisgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2sodGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kaXMoKSwgZGlzX3RyYWNlYmFjaykKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChEaXNUZXN0cywgQ29kZUluZm9UZXN0cykKKyAgICBydW5fdW5pdHRlc3QoRGlzVGVzdHMsIERpc1dpdGhGaWxlVGVzdHMsIENvZGVJbmZvVGVzdHMsCisgICAgICAgICAgICAgICAgIEluc3RydWN0aW9uVGVzdHMsIEJ5dGVjb2RlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCA4NjI1OWMzLi41NjE5M2U4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00MDksNyArNDA5LDggQEAKIAogIiIiCiAKLWRlZiB0ZXN0X0RvY1Rlc3RGaW5kZXIoKTogciIiIgorY2xhc3MgdGVzdF9Eb2NUZXN0RmluZGVyOgorICAgIGRlZiBiYXNpY3MoKTogciIiIgogVW5pdCB0ZXN0cyBmb3IgdGhlIGBEb2NUZXN0RmluZGVyYCBjbGFzcy4KIAogRG9jVGVzdEZpbmRlciBpcyB1c2VkIHRvIGV4dHJhY3QgRG9jVGVzdHMgZnJvbSBhbiBvYmplY3QncyBkb2NzdHJpbmcKQEAgLTY0Niw2ICs2NDcsMzkgQEAKICAgICBbMSwgOSwgMTJdCiAiIiIKIAorICAgIGlmIGludC5fX2RvY19fOiAjIHNpbXBsZSBjaGVjayBmb3IgLS13aXRob3V0LWRvYy1zdHJpbmdzLCBza2lwIGlmIGxhY2tpbmcKKyAgICAgICAgZGVmIG5vbl9QeXRob25fbW9kdWxlcygpOiByIiIiCisKK0ZpbmRpbmcgRG9jdGVzdHMgaW4gTW9kdWxlcyBOb3QgV3JpdHRlbiBpbiBQeXRob24KK35+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+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDg4OTZlZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlbWFpbAogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCiBmcm9tIGVtYWlsLl9wb2xpY3liYXNlIGltcG9ydCBjb21wYXQzMgpAQCAtNDIsNiArNDMsOCBAQAogICAgICMgaGVyZSB3ZSBtYWtlIG1pbmltYWwgY2hhbmdlcyBpbiB0aGUgdGVzdF9lbWFpbCB0ZXN0cyBjb21wYXJlZCB0byB0aGVpcgogICAgICMgcHJlLTMuMyBzdGF0ZS4KICAgICBwb2xpY3kgPSBjb21wYXQzMgorICAgICMgTGlrZXdpc2UsIHRoZSBkZWZhdWx0IG1lc3NhZ2Ugb2JqZWN0IGlzIE1lc3NhZ2UuCisgICAgbWVzc2FnZSA9IE1lc3NhZ2UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprdyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3cpCkBAIC01NCwxMSArNTcsMjMgQEAKICAgICAgICAgd2l0aCBvcGVuZmlsZShmaWxlbmFtZSkgYXMgZnA6CiAgICAgICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnAsIHBvbGljeT1zZWxmLnBvbGljeSkKIAotICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9TWVzc2FnZSwgcG9saWN5PU5vbmUpOgorICAgIGRlZiBfc3RyX21zZyhzZWxmLCBzdHJpbmcsIG1lc3NhZ2U9Tm9uZSwgcG9saWN5PU5vbmUpOgogICAgICAgICBpZiBwb2xpY3kgaXMgTm9uZToKICAgICAgICAgICAgIHBvbGljeSA9IHNlbGYucG9saWN5CisgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLm1lc3NhZ2UKICAgICAgICAgcmV0dXJuIGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoc3RyaW5nLCBtZXNzYWdlLCBwb2xpY3k9cG9saWN5KQogCisgICAgZGVmIF9ieXRlc19tc2coc2VsZiwgYnl0ZXN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQorICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKGJ5dGVzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCisKKyAgICBkZWYgX21ha2VfbWVzc2FnZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kpCisKICAgICBkZWYgX2J5dGVzX3JlcHIoc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBbcmVwcih4KSBmb3IgeCBpbiBiLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSldCiAKQEAgLTEyMyw2ICsxMzgsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTUwLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjI5ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCBjZDRmNzU3Li41N2YxMmFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0yNDksMTUgKzI0OSw0MiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKCdUTycsIG1zZykKIAogICAgIGRlZiB0ZXN0X2FzX3N0cmluZyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKICAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgogICAgICAgICAgICAgdGV4dCA9IGZwLnJlYWQoKQotICAgICAgICBlcSh0ZXh0LCBzdHIobXNnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBzdHIobXNnKSkKICAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpCiAgICAgICAgIGxpbmVzID0gZnVsbHJlcHIuc3BsaXQoJ1xuJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoJ0Zyb20gJykpCi0gICAgICAgIGVxKHRleHQsIE5MLmpvaW4obGluZXNbMTpdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisKKyAgICBkZWYgdGVzdF9hc19zdHJpbmdfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19zdHJpbmcocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAxLnR4dCcpIGFzIGZwOgorICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBieXRlcyhtc2cpKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyh1bml4ZnJvbT1UcnVlKQorICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KGInXG4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aChiJ0Zyb20gJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYidcbicuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXNfcG9saWN5KHNlbGYpOgorICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQorICAgICAgICBuZXdwb2xpY3kgPSBtc2cucG9saWN5LmNsb25lKGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBmdWxscmVwciA9IG1zZy5hc19ieXRlcyhwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBzID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBCeXRlc0dlbmVyYXRvcihzLHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihtc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVsbHJlcHIsIHMuZ2V0dmFsdWUoKSkKIAogICAgICMgdGVzdF9oZWFkZXJyZWdpc3RyeS5UZXN0Q29udGVudFR5cGVIZWFkZXIuYmFkX3BhcmFtcwogICAgIGRlZiB0ZXN0X2JhZF9wYXJhbShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQppbmRleCBmODI5ZjgzLi5mMmRmMzcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CkBAIC02NjEsNyArNjYxLDcgQEAKICAgICAgICAgICAgICd0ZXh0L3BsYWluOyBuYW1lPSJhc2NpaV9pc190aGVfZGVmYXVsdCInKSwKIAogICAgICAgICAncmZjMjIzMV9iYWRfY2hhcmFjdGVyX2luX2NoYXJzZXRfcGFyYW1ldGVyX3ZhbHVlJzogKAotICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RCIsCisgICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUYxJUYyJUYzIiwKICAgICAgICAgICAgICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICd0ZXh0JywKICAgICAgICAgICAgICdwbGFpbicsCkBAIC02NjksNiArNjY5LDE4IEBACiAgICAgICAgICAgICBbZXJyb3JzLlVuZGVjb2RhYmxlQnl0ZXNEZWZlY3RdLAogICAgICAgICAgICAgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04XHVGRkZEXHVGRkZEXHVGRkZEIicpLAogCisgICAgICAgICdyZmMyMjMxX3V0Zl84X2luX3N1cHBvc2VkbHlfYXNjaWlfY2hhcnNldF9wYXJhbWV0ZXJfdmFsdWUnOiAoCisgICAgICAgICAgICAidGV4dC9wbGFpbjsgY2hhcnNldCo9YXNjaWknJ3V0Zi04JUUyJTgwJTlEIiwKKyAgICAgICAgICAgICd0ZXh0L3BsYWluJywKKyAgICAgICAgICAgICd0ZXh0JywKKyAgICAgICAgICAgICdwbGFpbicsCisgICAgICAgICAgICB7J2NoYXJzZXQnOiAndXRmLTjigJ0nfSwKKyAgICAgICAgICAgIFtlcnJvcnMuVW5kZWNvZGFibGVCeXRlc0RlZmVjdF0sCisgICAgICAgICAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTjigJ0iJywKKyAgICAgICAgICAgICksCisgICAgICAgICAgICAjIFhYWDogaWYgdGhlIGFib3ZlIHdlcmUgKnJlKmZvbGRlZCwgaXQgd291bGQgZ2V0IHRhZ2dlZCBhcyB1dGYtOAorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGFzY2lpIGluIHRoZSBwYXJhbSwgc2luY2UgaXQgbm93IGNvbnRhaW5zIG5vbi1BU0NJSS4KKwogICAgICAgICAncmZjMjIzMV9lbmNvZGVkX3RoZW5fdW5lbmNvZGVkX3NlZ21lbnRzJzogKAogICAgICAgICAgICAgKCdhcHBsaWNhdGlvbi94LWZvbzsnCiAgICAgICAgICAgICAgICAgJ1x0bmFtZSowKj0idXMtYXNjaWlcJ2VuLXVzXCdNeSI7JwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQppbmRleCA4Y2MzZjgwLi5lMGViYjhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfbWVzc2FnZS5weQpAQCAtMSw2ICsxLDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXh0d3JhcAogZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Ci1mcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZQorZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0Citmcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZSwgcGFyYW1ldGVyaXplCisKKworIyBIZWxwZXIuCitkZWYgZmlyc3QoaXRlcmFibGUpOgorICAgIHJldHVybiBuZXh0KGZpbHRlcihsYW1iZGEgeDogeCBpcyBub3QgTm9uZSwgaXRlcmFibGUpLCBOb25lKQogCiAKIGNsYXNzIFRlc3QoVGVzdEVtYWlsQmFzZSk6CkBAIC0xNCw1ICsyMSw3MzggQEAKICAgICAgICAgICAgIG1bJ1RvJ10gPSAneHl6QGFiYycKIAogCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlQmFzZToKKworICAgIHBvbGljeSA9IHBvbGljeS5kZWZhdWx0CisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHRyaXBsZSAocmVsYXRlZCwgaHRtbCwgcGxhaW4pIG9mIGluZGljZXMgaW50byB0aGUKKyAgICAjIGxpc3QgcmV0dXJuZWQgYnkgJ3dhbGsnIGNhbGxlZCBvbiBhIE1lc3NhZ2UgY29uc3RydWN0ZWQgZnJvbSB0aGUgdGhpcmQuCisgICAgIyBUaGUgaW5kaWNlcyBpbmRpY2F0ZSB3aGljaCBwYXJ0IHNob3VsZCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBwYXJ0LXR5cGUKKyAgICAjIHdoZW4gcGFzc2VkIHRvIGdldF9ib2R5IChpZTogdGhlICJmaXJzdCIgcGFydCBvZiB0aGF0IHR5cGUgaW4gdGhlCisgICAgIyBtZXNzYWdlKS4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBsaXN0IG9mIGluZGljZXMgaW50byB0aGUgJ3dhbGsnIGxpc3QKKyAgICAjIG9mIHRoZSBhdHRhY2htZW50cyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8KKyAgICAjICdpdGVyX2F0dGFjaG1lbnRzJy4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvICd3YWxrJworICAgICMgdGhhdCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgYSBjYWxsIHRvICdpdGVyX3BhcnRzJy4gIE5vdGUgdGhhdCB0aGUgZmlyc3QKKyAgICAjIGl0ZW0gcmV0dXJuZWQgYnkgJ3dhbGsnIGlzIHRoZSBNZXNzYWdlIGl0c2VsZi4KKworICAgIG1lc3NhZ2VfcGFyYW1zID0geworCisgICAgICAgICdlbXB0eV9tZXNzYWdlJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIDApLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICIiKSwKKworICAgICAgICAnbm9uX21pbWVfcGxhaW4nOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgdGV4dCBib2R5CisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21pbWVfbm9uX3RleHQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworCisgICAgICAgICAgICAgICAgYm9ndXMgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9hbHRlcm5hdGl2ZSc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAncGxhaW5faHRtbF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIHByZWFtYmxlCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2F0dGFjaG1lbnRfbWl4ZWQnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdodG1sX3RleHRfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdFRhQ2htZW50CisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X2lubGluZV9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCAyLCAxKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogSW5MaW5lCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZQorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBSRkMgMjM4NworICAgICAgICAncmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgwLCAxLCBOb25lKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMT4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGRhdGEKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgbWVzc2FnZSBzdHJ1Y3R1cmUgd2lsbCBwcm9iYWJseSBuZXZlciBiZSBzZWVuIGluIHRoZSB3aWxkLCBidXQKKyAgICAgICAgIyBpdCBwcm92ZXMgd2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiB0ZXh0IHBhcnRzIGJhc2VkIG9uICdzdGFydCcuICBUaGUKKyAgICAgICAgIyBjb250ZW50IHdvdWxkIG5vdCwgb2YgY291cnNlLCBhY3R1YWxseSB3b3JrIDopCisgICAgICAgICdyZWxhdGVkX3dpdGhfc3RhcnQnOiAoCisgICAgICAgICAgICAoMCwgMiwgTm9uZSksCisgICAgICAgICAgICAoMSwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iPT09IjsgdHlwZT10ZXh0L2h0bWw7CisgICAgICAgICAgICAgICAgIHN0YXJ0PSI8Ym9keT4iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGluY2x1ZGU+CisKKyAgICAgICAgICAgICAgICB1c2VsZXNzIHRleHQKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8Ym9keT4KKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorICAgICAgICAgICAgICAgIDwhLS0jaW5jbHVkZSBmaWxlPSI8aW5jbHVkZT4iLS0+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKworICAgICAgICAnbWl4ZWRfYWx0ZXJuYXRpdmVfcGxhaW5fcmVsYXRlZCc6ICgKKyAgICAgICAgICAgICgzLCA0LCAyKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBBdHRhY0htZW5UCisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBUaGlzIHN0cnVjdHVyZSBzdWdnZXN0ZWQgYnkgU3RlcGhlbiBKLiBUdXJuYnVsbC4uLm1heSBub3QgZXhpc3QvYmUKKyAgICAgICAgIyBzdXBwb3J0ZWQgaW4gdGhlIHdpbGQsIGJ1dCB3ZSB3YW50IHRvIHN1cHBvcnQgaXQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWwnOiAoCisgICAgICAgICAgICAoMSwgNCwgMyksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgU2FtZSB0aGluZywgYnV0IHByb3Zpbmcgd2Ugb25seSBsb29rIGF0IHRoZSByb290IHBhcnQsIHdoaWNoIGlzIHRoZQorICAgICAgICAjIGZpcnN0IG9uZSBpZiB0aGVyZSBpc24ndCBhbnkgc3RhcnQgcGFyYW1ldGVyLiAgVGhhdCBpcywgdGhpcyBpcyBhCisgICAgICAgICMgYnJva2VuIHJlbGF0ZWQuCisgICAgICAgICdtaXhlZF9yZWxhdGVkX2FsdGVybmF0aXZlX3BsYWluX2h0bWxfd3Jvbmdfb3JkZXInOiAoCisgICAgICAgICAgICAoMSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICAoNiwgNyksCisgICAgICAgICAgICAoMSwgNiwgNyksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iKysrIgorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJfX18iCisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18tLQorCisgICAgICAgICAgICAgICAgLS0rKystLQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQKKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYW5vdGhlciBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdtZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKworICAgICAgICAgICAgICAgIFRvOiBiYXJAZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBGcm9tOiByb2JvdEBleGFtcC5jb20KKworICAgICAgICAgICAgICAgIHRoaXMgaXMgYSBtZXNzYWdlIGJvZHkuCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21peGVkX3RleHRfbWVzc2FnZV9yZmM4MjInOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMSksCisgICAgICAgICAgICAoMiwpLAorICAgICAgICAgICAgKDEsIDIpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBZb3VyIG1lc3NhZ2UgaGFzIGJvdW5jZWQsIHNlci4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAgfQorCisgICAgZGVmIG1lc3NhZ2VfYXNfZ2V0X2JvZHkoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbTm9uZSBpZiBuIGlzIE5vbmUgZWxzZSBhbGxwYXJ0c1tuXSBmb3IgbiBpbiBib2R5X3BhcnRzXQorICAgICAgICByZWxhdGVkID0gMDsgaHRtbCA9IDE7IHBsYWluID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkoKSwgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbcmVsYXRlZDpodG1sKzFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncmVsYXRlZCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcmVsYXRlZF0sIGV4cGVjdGVkW3BsYWluXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW2h0bWw6cGxhaW4rMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydyZWxhdGVkJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydodG1sJ10pLCBleHBlY3RlZFtodG1sXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PVsncGxhaW4nXSksIGV4cGVjdGVkW3BsYWluXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtwbGFpbjpodG1sLTE6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChbZXhwZWN0ZWRbcGxhaW5dLCBleHBlY3RlZFtyZWxhdGVkXV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgncGxhaW4nLCAnaHRtbCcsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkWzo6LTFdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib2R5KHByZWZlcmVuY2VsaXN0PSgnaHRtbCcsICdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtodG1sXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcGxhaW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtyZWxhdGVkXV0pKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9hdHRhY2htZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBhbGxwYXJ0cyA9IGxpc3QobS53YWxrKCkpCisgICAgICAgIGF0dGFjaG1lbnRzID0gW2FsbHBhcnRzW25dIGZvciBuIGluIGF0dGFjaG1lbnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX2F0dGFjaG1lbnRzKCkpLCBhdHRhY2htZW50cykKKworICAgIGRlZiBtZXNzYWdlX2FzX2l0ZXJfcGFydHMoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgcGFydHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gcGFydHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfcGFydHMoKSksIHBhcnRzKQorCisgICAgY2xhc3MgX1Rlc3RDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZywgYXJncywga3cKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5tc2cgPSBtc2cKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua3cgPSBrdworCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfd2l0aF9jbShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgY29udGVudF9tYW5hZ2VyPWNtLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X2RlZmF1bHRfY21fY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9c2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkpCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIChtLCAoKSwge30pKQorICAgICAgICBtc2csIGFyZ3MsIGt3ID0gbS5nZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIHt9KQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBwID0gcG9saWN5LmRlZmF1bHQuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJywgcG9saWN5PXApCisgICAgICAgIG0uc2V0X2NvbnRlbnQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgIyBvdXRjb21lIGlzIHdoZXRoZXIgeHh4X21ldGhvZCBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBlcnJvciB3aGVuIGNhbGxlZAorICAgICMgb24gbXVsdGlwYXJ0L3N1YnR5cGUuICBCbGFuayBvdXRjb21lIG1lYW5zIGl0IGRlcGVuZHMgb24geHh4IChhZGQKKyAgICAjIHN1Y2NlZWRzLCBtYWtlIHJhaXNlcykuICBOb3RlOiAnbm9uZScgbWVhbnMgdGhlcmUgYXJlIGNvbnRlbnQtdHlwZQorICAgICMgaGVhZGVycyBidXQgcGF5bG9hZCBpcyBOb25lLi4udGhpcyBoYXBwZW5pbmcgaW4gcHJhY3RpY2Ugd291bGQgYmUgdmVyeQorICAgICMgdW51c3VhbCwgc28gdHJlYXRpbmcgaXQgYXMgaWYgdGhlcmUgd2VyZSBjb250ZW50IHNlZW1zIHJlYXNvbmFibGUuCisgICAgIyAgICBtZXRob2QgICAgICAgICAgc3VidHlwZSAgICAgICAgICAgb3V0Y29tZQorICAgIHN1YnR5cGVfcGFyYW1zID0gKAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdyZWxhdGVkJywgICAgICAgICcnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAncmFpc2VzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ21peGVkJywgICAgICAgICAgJ3JhaXNlcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub19jb250ZW50JywgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdub25lJywgICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdwbGFpbicsICAgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdyZWxhdGVkJywgICAgICAgICdzdWNjZWVkcycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdhbHRlcm5hdGl2ZScsICAgICcnKSwKKyAgICAgICAgKCdhbHRlcm5hdGl2ZScsICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ2FsdGVybmF0aXZlJywgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnbWl4ZWQnLCAgICAgICAgJ21peGVkJywgICAgICAgICAgJycpLAorICAgICAgICApCisKKyAgICBkZWYgX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc2VsZiwgc3VidHlwZSk6CisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UoKQorICAgICAgICBwYXlsb2FkID0gTm9uZQorICAgICAgICBtc2dfaGVhZGVycyA9ICBbCisgICAgICAgICAgICAoJ1RvJywgJ2Zvb0BiYXIuY29tJyksCisgICAgICAgICAgICAoJ0Zyb20nLCAnYmFyQGZvby5jb20nKSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgaWYgc3VidHlwZSAhPSAnbm9fY29udGVudCc6CisgICAgICAgICAgICAoJ2NvbnRlbnQtc2hhZG93JywgJ0xvZ3J1cycpLAorICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdYLVJhbmRvbS1IZWFkZXInLCAnQ29yd2luJykpCisgICAgICAgIGlmIHN1YnR5cGUgPT0gJ3RleHQnOgorICAgICAgICAgICAgcGF5bG9hZCA9ICcnCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpKQorICAgICAgICAgICAgbS5zZXRfcGF5bG9hZCgnJykKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHBheWxvYWQgPSBbXQorICAgICAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnQ29udGVudC1UeXBlJywgJ211bHRpcGFydC8nICsgc3VidHlwZSkpCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtVHJ1bXAnLCAnUmFuZG9tJykpCisgICAgICAgIG0uc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgbVtuYW1lXSA9IHZhbHVlCisgICAgICAgIHJldHVybiBtLCBtc2dfaGVhZGVycywgcGF5bG9hZAorCisgICAgZGVmIF9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKHNlbGYsIG0sIG1ldGhvZF9uYW1lLCBzdWJ0eXBlLCBtZXRob2QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGFyOgorICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgZXhjX3RleHQgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydEluKHN1YnR5cGUsIGV4Y190ZXh0KQorICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZF9uYW1lLCBleGNfdGV4dCkKKworICAgIGRlZiBfY2hlY2tfbWFrZV9tdWx0aXBhcnQoc2VsZiwgbSwgbXNnX2hlYWRlcnMsIHBheWxvYWQpOgorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbm90IG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtKSwgY291bnQrMSkgIyArMSBmb3IgbmV3IENvbnRlbnQtVHlwZQorICAgICAgICBwYXJ0ID0gbmV4dChtLml0ZXJfcGFydHMoKSkKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgIGlmIG5hbWUubG93ZXIoKS5zdGFydHN3aXRoKCdjb250ZW50LScpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFtuYW1lXSwgdmFsdWUpCisgICAgICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXJ0KSwgY291bnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgbWFrZV9tZXRob2QgPSAnbWFrZV8nICsgbWV0aG9kCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBzZWxmLl9jaGVja19kaXNhbGxvd2VkX3N1YnR5cGVfcmFpc2VzKG0sIG1ldGhvZCwgc3VidHlwZSwgbWFrZV9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBtYWtlX21ldGhvZCkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgJ211bHRpcGFydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9zdWJ0eXBlKCksIG1ldGhvZCkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAnbm9fY29udGVudCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmdldF9wYXlsb2FkKCkpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ19oZWFkZXJzICsgWygnQ29udGVudC1UeXBlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdWx0aXBhcnQvJyttZXRob2QpXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX21ha2Vfd2l0aF9ib3VuZGFyeShzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICAjIERvaW5nIGFsbCB2YXJpYXRpb24gaXMgYSBiaXQgb2Ygb3ZlcmtpbGwuLi4KKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIGlmIG91dGNvbWUgaW4gKCcnLCAncmFpc2VzJyk6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgZ2V0YXR0cihtLCAnbWFrZV8nICsgbWV0aG9kKSgpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc3VidHlwZSA9PSAncGxhaW4nOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgZWxpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKGJvdW5kYXJ5PSJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19tdWx0aXBhcnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9ib3VuZGFyeSgpLCAnYWJjJykKKworICAgIGRlZiB0ZXN0X3BvbGljeV9vbl9wYXJ0X21hZGVfYnlfbWFrZV9jb21lc19mcm9tX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGZvciBtZXRob2QgaW4gKCdtYWtlX3JlbGF0ZWQnLCAnbWFrZV9hbHRlcm5hdGl2ZScsICdtYWtlX21peGVkJyk6CisgICAgICAgICAgICBtID0gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeS5jbG9uZShjb250ZW50X21hbmFnZXI9J2ZvbycpKQorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoMCkucG9saWN5LmNvbnRlbnRfbWFuYWdlciwgJ2ZvbycpCisKKyAgICBjbGFzcyBfVGVzdFNldENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoY29udGVudCkKKworICAgIGRlZiBzdWJ0eXBlX2FzX2FkZChzZWxmLCBtZXRob2QsIHN1YnR5cGUsIG91dGNvbWUpOgorICAgICAgICBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCA9IHNlbGYuX21ha2Vfc3VidHlwZV90ZXN0X21lc3NhZ2Uoc3VidHlwZSkKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBhZGRfbWV0aG9kID0gJ2FkZF9hdHRhY2htZW50JyBpZiBtZXRob2Q9PSdtaXhlZCcgZWxzZSAnYWRkXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSA9PSAncmFpc2VzJzoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBhZGRfbWV0aG9kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGdldGF0dHIobSwgYWRkX21ldGhvZCkoJ3Rlc3QnLCBjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBtZXRob2QgPT0gc3VidHlwZSBvciBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDEpCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDIpCisgICAgICAgICAgICBzZWxmLl9jaGVja19tYWtlX211bHRpcGFydChtLCBtc2dfaGVhZGVycywgcGF5bG9hZCkKKyAgICAgICAgICAgIHBhcnQgPSBtLmdldF9wYXlsb2FkKClbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X3BheWxvYWQoKSwgJ3Rlc3QnKQorICAgICAgICBpZiBtZXRob2Q9PSdtaXhlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2F0dGFjaG1lbnQnKQorICAgICAgICBlbGlmIG1ldGhvZD09J3JlbGF0ZWQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPdGhlcndpc2Ugd2UgZG9uJ3QgZ3Vlc3MuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJ0WydDb250ZW50LURpc3Bvc2l0aW9uJ10pCisKKyAgICBjbGFzcyBfVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcjoKKyAgICAgICAgZGVmIHNldF9jb250ZW50KHNlbGYsIG1zZywgY29udGVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfY29udGVudF9tYW5hZ2VyX2Zvcl9hZGRfY29tZXNfZnJvbV9wb2xpY3koc2VsZik6CisgICAgICAgIGNtID0gc2VsZi5fVGVzdFNldFJhaXNpbmdDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1jbSkpCisgICAgICAgIGZvciBtZXRob2QgaW4gKCdhZGRfcmVsYXRlZCcsICdhZGRfYWx0ZXJuYXRpdmUnLCAnYWRkX2F0dGFjaG1lbnQnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBhcjoKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhci5leGNlcHRpb24pLCAndGVzdCcpCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcihzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgbS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVtcygpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgbWVzc2FnZV9hc19jbGVhcl9jb250ZW50KHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBleHBlY3RlZF9oZWFkZXJzID0gW2ggZm9yIGggaW4gbS5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIG0uY2xlYXJfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLmtleXMoKSksIGV4cGVjdGVkX2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgW10pCisKKyAgICBkZWYgdGVzdF9pc19hdHRhY2htZW50KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9ICdpbmxpbmUnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ0F0VGFjaE1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KQorCisKKworY2xhc3MgVGVzdEVtYWlsTWVzc2FnZShUZXN0RW1haWxNZXNzYWdlQmFzZSwgVGVzdEVtYWlsQmFzZSk6CisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfYWRkc19NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworICAgIGNsYXNzIF9NSU1FX1ZlcnNpb25fYWRkaW5nX0NNOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBtc2dbJ01JTUUtVmVyc2lvbiddID0gJzEuMCcKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2R1cGxpY2F0ZV9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX01JTUVfVmVyc2lvbl9hZGRpbmdfQ00oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorICAgICAgICBtLnNldF9jb250ZW50KGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydNSU1FLVZlcnNpb24nXSwgJzEuMCcpCisKKworY2xhc3MgVGVzdE1JTUVQYXJ0KFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICAjIERvaW5nIHRoZSBmdWxsIHRlc3QgcnVuIGhlcmUgbWF5IHNlZW0gYSBiaXQgcmVkdW5kYW50LCBzaW5jZSB0aGUgdHdvCisgICAgIyBjbGFzc2VzIGFyZSBhbG1vc3QgaWRlbnRpY2FsLiAgQnV0IHdoYXQgaWYgdGhleSBkcmlmdCBhcGFydD8gIFNvIHdlIGRvCisgICAgIyB0aGUgZnVsbCB0ZXN0cyBzbyB0aGF0IGFueSBmdXR1cmUgZHJpZnQgZG9lc24ndCBpbnRyb2R1Y2UgYnVncy4KKyAgICBtZXNzYWdlID0gTUlNRVBhcnQKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X2RvZXNfbm90X2FkZF9NSU1FX1ZlcnNpb24oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdNSU1FLVZlcnNpb24nLCBtKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQppbmRleCA5ODNiZDQ5Li4wNmFkNWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKQEAgLTMwLDYgKzMwLDcgQEAKICAgICAgICAgJ3JhaXNlX29uX2RlZmVjdCc6ICAgICAgICAgIEZhbHNlLAogICAgICAgICAnaGVhZGVyX2ZhY3RvcnknOiAgICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmhlYWRlcl9mYWN0b3J5LAogICAgICAgICAncmVmb2xkX3NvdXJjZSc6ICAgICAgICAgICAgJ2xvbmcnLAorICAgICAgICAnY29udGVudF9tYW5hZ2VyJzogICAgICAgICAgZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlciwKICAgICAgICAgfSkKIAogICAgICMgRm9yIGVhY2ggcG9saWN5IHVuZGVyIHRlc3QsIHdlIGdpdmUgaGVyZSB3aGF0IHdlIGV4cGVjdCB0aGUgZGVmYXVsdHMgdG8KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKaW5kZXggNTQ0YjFiYi4uMTljZjY0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90b3J0dXJlX3Rlc3QucHkKQEAgLTI3LDcgKzI3LDcgQEAKICMgUHJldmVudCB0aGlzIHRlc3QgZnJvbSBydW5uaW5nIGluIHRoZSBQeXRob24gZGlzdHJvCiB0cnk6CiAgICAgb3BlbmZpbGUoJ2NyaXNwaW4tdG9ydHVyZS50eHQnKQotZXhjZXB0IElPRXJyb3I6CitleGNlcHQgT1NFcnJvcjoKICAgICByYWlzZSBUZXN0U2tpcHBlZAogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnN1cmVwaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExOTMyNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5CkBAIC0wLDAgKzEsMjAzIEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQgdGVzdC5zdXBwb3J0CitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworCisKK2NsYXNzIFRlc3RFbnN1cmVQaXBWZXJzaW9uKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JldHVybnNfdmVyc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnN1cmVwaXAuX1BJUF9WRVJTSU9OLCBlbnN1cmVwaXAudmVyc2lvbigpKQorCisKK2NsYXNzIFRlc3RCb290c3RyYXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBydW5fcGlwX3BhdGNoID0gdW5pdHRlc3QubW9jay5wYXRjaCgiZW5zdXJlcGlwLl9ydW5fcGlwIikKKyAgICAgICAgc2VsZi5ydW5fcGlwID0gcnVuX3BpcF9wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChydW5fcGlwX3BhdGNoLnN0b3ApCisKKyAgICAgICAgIyBBdm9pZCBzaWRlIGVmZmVjdHMgb24gdGhlIGFjdHVhbCBvcyBtb2R1bGUKKyAgICAgICAgb3NfcGF0Y2ggPSB1bml0dGVzdC5tb2NrLnBhdGNoKCJlbnN1cmVwaXAub3MiKQorICAgICAgICBwYXRjaGVkX29zID0gb3NfcGF0Y2guc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3NfcGF0Y2guc3RvcCkKKyAgICAgICAgcGF0Y2hlZF9vcy5wYXRoID0gb3MucGF0aAorICAgICAgICBzZWxmLm9zX2Vudmlyb24gPSBwYXRjaGVkX29zLmVudmlyb24gPSBvcy5lbnZpcm9uLmNvcHkoKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYm9vdHN0cmFwcGluZyhzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tcHJlIiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBzZWxmLnJ1bl9waXAuY2FsbF9hcmdzWzBdWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFkZGl0aW9uYWxfcGF0aHMpLCAyKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3Jvb3Qoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAocm9vdD0iL2Zvby9iYXIvIikKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLS1yb290IiwgIi9mb28vYmFyLyIsCisgICAgICAgICAgICAgICAgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3VzZXIoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodXNlcj1UcnVlKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXByZSIsICItLXVzZXIiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdXBncmFkZShzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh1cGdyYWRlPVRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tcHJlIiwgIi0tdXBncmFkZSIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMShzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLXYiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdmVyYm9zaXR5XzIoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAodmVyYm9zaXR5PTIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tcHJlIiwgIi12diIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMyhzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MykKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS1wcmUiLCAiLXZ2diIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9yZWd1bGFyX2luc3RhbGwoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3NfZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSwgImluc3RhbGwiKQorCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX2FsdF9pbnN0YWxsKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGFsdGluc3RhbGw9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIkVOU1VSRVBJUF9PUFRJT05TIl0sICJhbHRpbnN0YWxsIikKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9kZWZhdWx0X3BpcChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChkZWZhdWx0X3BpcD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJFTlNVUkVQSVBfT1BUSU9OUyIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X2FsdGluc3RhbGxfZGVmYXVsdF9waXBfY29uZmxpY3Qoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGFsdGluc3RhbGw9VHJ1ZSwgZGVmYXVsdF9waXA9VHJ1ZSkKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9ub3RfY2FsbGVkKCkKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBmYWtlX3BpcCh2ZXJzaW9uPWVuc3VyZXBpcC5fUElQX1ZFUlNJT04pOgorICAgIGlmIHZlcnNpb24gaXMgTm9uZToKKyAgICAgICAgcGlwID0gTm9uZQorICAgIGVsc2U6CisgICAgICAgIGNsYXNzIEZha2VQaXAoKToKKyAgICAgICAgICAgIF9fdmVyc2lvbl9fID0gdmVyc2lvbgorICAgICAgICBwaXAgPSBGYWtlUGlwKCkKKyAgICBzZW50aW5lbCA9IG9iamVjdCgpCisgICAgb3JpZ19waXAgPSBzeXMubW9kdWxlcy5nZXQoInBpcCIsIHNlbnRpbmVsKQorICAgIHN5cy5tb2R1bGVzWyJwaXAiXSA9IHBpcAorICAgIHRyeToKKyAgICAgICAgeWllbGQgcGlwCisgICAgZmluYWxseToKKyAgICAgICAgaWYgb3JpZ19waXAgaXMgc2VudGluZWw6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbInBpcCJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXMubW9kdWxlc1sicGlwIl0gPSBvcmlnX3BpcAorCitjbGFzcyBUZXN0VW5pbnN0YWxsKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcnVuX3BpcF9wYXRjaCA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goImVuc3VyZXBpcC5fcnVuX3BpcCIpCisgICAgICAgIHNlbGYucnVuX3BpcCA9IHJ1bl9waXBfcGF0Y2guc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocnVuX3BpcF9wYXRjaC5zdG9wKQorCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsX3NraXBwZWRfd2hlbl9ub3RfaW5zdGFsbGVkKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKE5vbmUpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGwoKQorICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X25vdF9jYWxsZWQoKQorCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsX2ZhaWxzX3dpdGhfd3JvbmdfdmVyc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgibm90IGEgdmFsaWQgdmVyc2lvbiIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsKCkKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9ub3RfY2FsbGVkKCkKKworCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbCgpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMShzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGwodmVyYm9zaXR5PTEpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAiLXYiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMihzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGwodmVyYm9zaXR5PTIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWyJ1bmluc3RhbGwiLCAiLXkiLCAiLXZ2IiwgInBpcCIsICJzZXR1cHRvb2xzIl0KKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsX3dpdGhfdmVyYm9zaXR5XzMoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsidW5pbnN0YWxsIiwgIi15IiwgIi12dnYiLCAicGlwIiwgInNldHVwdG9vbHMiXQorICAgICAgICApCisKKworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2YwZTVkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTMyNSBAQAoraW1wb3J0IGVudW0KK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcHlkb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gZW51bSBpbXBvcnQgRW51bSwgSW50RW51bSwgRW51bU1ldGEsIHVuaXF1ZQorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMsIFBpY2tsaW5nRXJyb3IKKworIyBmb3IgcGlja2xlIHRlc3RzCit0cnk6CisgICAgY2xhc3MgU3Rvb2dlcyhFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxCisgICAgICAgIENVUkxZID0gMgorICAgICAgICBNT0UgPSAzCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBTdG9vZ2VzID0gZXhjCisKK3RyeToKKyAgICBjbGFzcyBJbnRTdG9vZ2VzKGludCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgSW50U3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgRmxvYXRTdG9vZ2VzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxLjM5CisgICAgICAgIENVUkxZID0gMi43MgorICAgICAgICBNT0UgPSAzLjE0MjU5NgorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgRmxvYXRTdG9vZ2VzID0gZXhjCisKKyMgZm9yIHBpY2tsZSB0ZXN0IGFuZCBzdWJjbGFzcyB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgJ2FjY2VwdHMgb25seSBzdHJpbmcgdmFsdWVzJworICAgIGNsYXNzIE5hbWUoU3RyRW51bSk6CisgICAgICAgIEJERkwgPSAnR3VpZG8gdmFuIFJvc3N1bScKKyAgICAgICAgRkxVRkwgPSAnQmFycnkgV2Fyc2F3JworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgTmFtZSA9IGV4YworCit0cnk6CisgICAgUXVlc3Rpb24gPSBFbnVtKCdRdWVzdGlvbicsICd3aG8gd2hhdCB3aGVuIHdoZXJlIHdoeScsIG1vZHVsZT1fX25hbWVfXykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFF1ZXN0aW9uID0gZXhjCisKK3RyeToKKyAgICBBbnN3ZXIgPSBFbnVtKCdBbnN3ZXInLCAnaGltIHRoaXMgdGhlbiB0aGVyZSBiZWNhdXNlJykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEFuc3dlciA9IGV4YworCisjIGZvciBkb2N0ZXN0cwordHJ5OgorICAgIGNsYXNzIEZydWl0KEVudW0pOgorICAgICAgICB0b21hdG8gPSAxCisgICAgICAgIGJhbmFuYSA9IDIKKyAgICAgICAgY2hlcnJ5ID0gMworZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdEhlbHBlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgX2lzX2Rlc2NyaXB0b3IsIF9pc19zdW5kZXIsIF9pc19kdW5kZXIKKworICAgIGRlZiB0ZXN0X2lzX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIGZvbzoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGF0dHIgaW4gKCdfX2dldF9fJywnX19zZXRfXycsJ19fZGVsZXRlX18nKToKKyAgICAgICAgICAgIG9iaiA9IGZvbygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKyAgICAgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX2Rlc2NyaXB0b3Iob2JqKSkKKworICAgIGRlZiB0ZXN0X2lzX3N1bmRlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdfYV8nLCAnX2FhXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudW0uX2lzX3N1bmRlcihzKSkKKworICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfX2FfXycsICdfYV9fJywgJ19fYV8nLCAnXycsCisgICAgICAgICAgICAgICAgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19zdW5kZXIocykpCisKKyAgICBkZWYgdGVzdF9pc19kdW5kZXIoc2VsZik6CisgICAgICAgIGZvciBzIGluICgnX19hX18nLCAnX19hYV9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfZHVuZGVyKHMpKQorICAgICAgICBmb3IgcyBpbiAoJ2EnLCAnYV8nLCAnX2EnLCAnX19hJywgJ2FfXycsICdfYV8nLCAnX2FfXycsICdfX2FfJywgJ18nLAorICAgICAgICAgICAgICAgICdfXycsICdfX18nLCAnX19fXycsICdfX19fXycsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfZHVuZGVyKHMpKQorCisKK2NsYXNzIFRlc3RFbnVtKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgc2VsZi5TZWFzb24gPSBTZWFzb24KKworICAgICAgICBjbGFzcyBLb25zdGFudHMoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgRSA9IDIuNzE4MjgxOAorICAgICAgICAgICAgUEkgPSAzLjE0MTU5MjYKKyAgICAgICAgICAgIFRBVSA9IDIgKiBQSQorICAgICAgICBzZWxmLktvbnN0YW50cyA9IEtvbnN0YW50cworCisgICAgICAgIGNsYXNzIEdyYWRlcyhJbnRFbnVtKToKKyAgICAgICAgICAgIEEgPSA1CisgICAgICAgICAgICBCID0gNAorICAgICAgICAgICAgQyA9IDMKKyAgICAgICAgICAgIEQgPSAyCisgICAgICAgICAgICBGID0gMAorICAgICAgICBzZWxmLkdyYWRlcyA9IEdyYWRlcworCisgICAgICAgIGNsYXNzIERpcmVjdGlvbmFsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBFQVNUID0gJ2Vhc3QnCisgICAgICAgICAgICBXRVNUID0gJ3dlc3QnCisgICAgICAgICAgICBOT1JUSCA9ICdub3J0aCcKKyAgICAgICAgICAgIFNPVVRIID0gJ3NvdXRoJworICAgICAgICBzZWxmLkRpcmVjdGlvbmFsID0gRGlyZWN0aW9uYWwKKworICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlCisgICAgICAgIGNsYXNzIEhvbGlkYXkoZGF0ZSwgRW51bSk6CisgICAgICAgICAgICBORVdfWUVBUiA9IDIwMTMsIDEsIDEKKyAgICAgICAgICAgIElERVNfT0ZfTUFSQ0ggPSAyMDEzLCAzLCAxNQorICAgICAgICBzZWxmLkhvbGlkYXkgPSBIb2xpZGF5CisKKyAgICBkZWYgdGVzdF9kaXJfb25fY2xhc3Moc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZXQoZGlyKFNlYXNvbikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXycsCisgICAgICAgICAgICAgICAgJ1NQUklORycsICdTVU1NRVInLCAnQVVUVU1OJywgJ1dJTlRFUiddKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rpcl9vbl9pdGVtKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24uV0lOVEVSKSksCisgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfd2l0aF9hZGRlZF9iZWhhdmlvcihzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdChFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHdvd3NlcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJXb3dzZXIhIEknbSAlcyEiICUgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdCkpLAorICAgICAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLCAndGhpcycsICd0aGVzZSddKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc2V0KGRpcihUZXN0LnRoaXMpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnLCAnd293c2VyJ10pLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VudW1faW5fZW51bV9vdXQoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKFNlYXNvbi5XSU5URVIpLCBTZWFzb24uV0lOVEVSKQorCisgICAgZGVmIHRlc3RfZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRTdG9vZ2VzLkNVUkxZLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3RfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTZWFzb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTZWFzb24pLCA0LCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUl0sIGxzdCkKKworICAgICAgICBmb3IgaSwgc2Vhc29uIGluIGVudW1lcmF0ZSgnU1BSSU5HIFNVTU1FUiBBVVRVTU4gV0lOVEVSJy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTZWFzb24oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZ2V0YXR0cihTZWFzb24sIHNlYXNvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudmFsdWUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1NlYXNvbi4nICsgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVwcihlKSwKKyAgICAgICAgICAgICAgICAgICAgJzxTZWFzb24uezB9OiB7MX0+Jy5mb3JtYXQoc2Vhc29uLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLm5hbWUsICdTUFJJTkcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy5uYW1lID0gJ2ludmllcm5vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcudmFsdWUgPSAyCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ19tZW1iZXIoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLldJTlRFUiA9ICdyZWFsbHkgY29sZCcKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorCisgICAgICAgICAgICBkZWYgc3BhbShjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisgICAgICAgIGRlbCBTZWFzb24uc3BhbQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLkRSWQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HLm5hbWUKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBtcm8gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfY3JlYXRlXz0gMTEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9nZXRfbWl4aW5zXyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9maW5kX25ld18gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfYW55X25hbWVfID0gOQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU2Vhc29uLkFVVFVNTiwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDMsIFNlYXNvbikKKworICAgICAgICB2YWwgPSBTZWFzb24oMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIFNlYXNvbikKKworICAgICAgICBjbGFzcyBPdGhlckVudW0oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxOyB0d28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oT3RoZXJFbnVtLnR3bywgU2Vhc29uKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBTZWFzb24uV0lOVEVSCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPiA0CisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCAxKQorCisgICAgICAgIGNsYXNzIFBhcnQoRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBDTElQID0gMgorICAgICAgICAgICAgQkFSUkVMID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgUGFydC5TUFJJTkcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBQYXJ0LkNMSVAKKworICAgIGRlZiB0ZXN0X2VudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gRkFMTCA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFOT1RIRVJfU1BSSU5HID0gMQorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLAorICAgICAgICAgICAgIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVIsCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbi5GQUxMLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5BVVRVTU4udmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDMpLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigxKSwgU2Vhc29uLlNQUklORykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC5uYW1lLCAnQVVUVU1OJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbayBmb3Igayx2IGluIFNlYXNvbi5fX21lbWJlcnNfXy5pdGVtcygpIGlmIHYubmFtZSAhPSBrXSwKKyAgICAgICAgICAgICAgICBbJ0ZBTEwnLCAnQU5PVEhFUl9TUFJJTkcnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgcmVkID0gNAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkJworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkZGVyJworICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworCisKKyAgICBkZWYgdGVzdF9lbnVtX3dpdGhfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgSHVoKEVudW0pOgorICAgICAgICAgICAgbmFtZSA9IDEKKyAgICAgICAgICAgIHZhbHVlID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChIdWgpLAorICAgICAgICAgICAgW0h1aC5uYW1lLCBIdWgudmFsdWVdLAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoSHVoLm5hbWUpLCBIdWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUubmFtZSwgJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggJ3s6fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnezp9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezoyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezoyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Ol4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpeMjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo+MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PDIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjwyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fY3VzdG9tKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0RmxvYXQoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgb25lID0gMS4wCisgICAgICAgICAgICB0d28gPSAyLjAKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGVzdEZsb2F0IHN1Y2Nlc3MhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFRlc3RGbG9hdC5vbmUpLCAnVGVzdEZsb2F0IHN1Y2Nlc3MhJykKKworICAgIGRlZiBhc3NlcnRGb3JtYXRJc1ZhbHVlKHNlbGYsIHNwZWMsIG1lbWJlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5mb3JtYXQobWVtYmVyKSwgc3BlYy5mb3JtYXQobWVtYmVyLnZhbHVlKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2RhdGUoc2VsZik6CisgICAgICAgIEhvbGlkYXkgPSBzZWxmLkhvbGlkYXkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbX0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbSAlTTowMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9mbG9hdChzZWxmKToKKyAgICAgICAgS29uc3RhbnRzID0gc2VsZi5Lb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpufScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo1LjJ9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmZ9JywgS29uc3RhbnRzLlRBVSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2ludChzZWxmKToKKyAgICAgICAgR3JhZGVzID0gc2VsZi5HcmFkZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezorfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MDhYfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Yn0nLCBHcmFkZXMuQykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX3N0cihzZWxmKToKKyAgICAgICAgRGlyZWN0aW9uYWwgPSBzZWxmLkRpcmVjdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgZGF0ZXMgPSB7fQorICAgICAgICBkYXRlc1tTZWFzb24uV0lOVEVSXSA9ICcxMjI1JworICAgICAgICBkYXRlc1tTZWFzb24uU1BSSU5HXSA9ICcwMzE1JworICAgICAgICBkYXRlc1tTZWFzb24uU1VNTUVSXSA9ICcwNzA0JworICAgICAgICBkYXRlc1tTZWFzb24uQVVUVU1OXSA9ICcxMDMxJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVzW1NlYXNvbi5BVVRVTU5dLCAnMTAzMScpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGludCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShJbnRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGbG9hdEVudW0oZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoRmxvYXRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KHN0ciwgRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KFN0ckVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworCisgICAgZGVmIHRlc3RfaW50ZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2InLCAnYyddW1dlZWtEYXkuTU9OREFZXSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpIGZvciBpIGluIHJhbmdlKFdlZWtEYXkuVFVFU0RBWSldLCBbMCwgMSwgMl0pCisKKyAgICAgICAgbHN0ID0gbGlzdChXZWVrRGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oV2Vla0RheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFdlZWtEYXkpLCA3KQorICAgICAgICB0YXJnZXQgPSAnU1VOREFZIE1PTkRBWSBUVUVTREFZIFdFRE5FU0RBWSBUSFVSU0RBWSBGUklEQVkgU0FUVVJEQVknCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5zcGxpdCgpCisgICAgICAgIGZvciBpLCB3ZWVrZGF5IGluIGVudW1lcmF0ZSh0YXJnZXQsIDEpOgorICAgICAgICAgICAgZSA9IFdlZWtEYXkoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHdlZWtkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdC5pbmRleChlKSsxLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBlIDwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRW51bSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSBURVVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhXZWVrRGF5LlRFVVNEQVksIFdlZWtEYXkuVFVFU0RBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXZWVrRGF5KDMpLm5hbWUsICdUVUVTREFZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igayx2IGluIFdlZWtEYXkuX19tZW1iZXJzX18uaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIHYubmFtZSAhPSBrXSwgWydURVVTREFZJywgXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBTdG9vZ2VzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoU3Rvb2dlcy5DVVJMWSkpKQorICAgICAgICBzZWxmLmFzc2VydElzKFN0b29nZXMsIGxvYWRzKGR1bXBzKFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9pbnQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoSW50U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEludFN0b29nZXMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhJbnRTdG9vZ2VzLkNVUkxZLCBsb2FkcyhkdW1wcyhJbnRTdG9vZ2VzLkNVUkxZKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoSW50U3Rvb2dlcywgbG9hZHMoZHVtcHMoSW50U3Rvb2dlcykpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zsb2F0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEZsb2F0U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEZsb2F0U3Rvb2dlcworICAgICAgICBzZWxmLmFzc2VydElzKEZsb2F0U3Rvb2dlcy5DVVJMWSwgbG9hZHMoZHVtcHMoRmxvYXRTdG9vZ2VzLkNVUkxZKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmxvYXRTdG9vZ2VzLCBsb2FkcyhkdW1wcyhGbG9hdFN0b29nZXMpKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtX2Z1bmN0aW9uKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEFuc3dlciwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEFuc3dlcgorICAgICAgICBzZWxmLmFzc2VydElzKEFuc3dlci5oaW0sIGxvYWRzKGR1bXBzKEFuc3dlci5oaW0pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBbnN3ZXIsIGxvYWRzKGR1bXBzKEFuc3dlcikpKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb25fd2l0aF9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoUXVlc3Rpb24sIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBRdWVzdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzKFF1ZXN0aW9uLndobywgbG9hZHMoZHVtcHMoUXVlc3Rpb24ud2hvKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUXVlc3Rpb24sIGxvYWRzKGR1bXBzKFF1ZXN0aW9uKSkpCisKKyAgICBkZWYgdGVzdF9leHBsb2RpbmdfcGlja2xlKHNlbGYpOgorICAgICAgICBCYWRQaWNrbGUgPSBFbnVtKCdCYWRQaWNrbGUnLCAnZGlsbCBzd2VldCBicmVhZC1uLWJ1dHRlcicpCisgICAgICAgIGVudW0uX21ha2VfY2xhc3NfdW5waWNrbGFibGUoQmFkUGlja2xlKQorICAgICAgICBnbG9iYWxzKClbJ0JhZFBpY2tsZSddID0gQmFkUGlja2xlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR1bXBzKEJhZFBpY2tsZS5kaWxsKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBpY2tsaW5nRXJyb3IpOgorICAgICAgICAgICAgZHVtcHMoQmFkUGlja2xlKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIFNraWxsTGV2ZWwoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIG1hc3RlciA9ICd3aGF0IGlzIHRoZSBzb3VuZCBvZiBvbmUgaGFuZCBjbGFwcGluZz8nCisgICAgICAgICAgICBqb3VybmV5bWFuID0gJ3doeSBkaWQgdGhlIGNoaWNrZW4gY3Jvc3MgdGhlIHJvYWQ/JworICAgICAgICAgICAgYXBwcmVudGljZSA9ICdrbm9jaywga25vY2shJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNraWxsTGV2ZWwuYXBwcmVudGljZSwgJ2tub2NrLCBrbm9jayEnKQorCisgICAgZGVmIHRlc3RfZ2V0YXR0cl9nZXRpdGVtKHNlbGYpOgorICAgICAgICBjbGFzcyBQZXJpb2QoRW51bSk6CisgICAgICAgICAgICBtb3JuaW5nID0gMQorICAgICAgICAgICAgbm9vbiA9IDIKKyAgICAgICAgICAgIGV2ZW5pbmcgPSAzCisgICAgICAgICAgICBuaWdodCA9IDQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2QoMiksIFBlcmlvZC5ub29uKQorICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIoUGVyaW9kLCAnbmlnaHQnKSwgUGVyaW9kLm5pZ2h0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBlcmlvZFsnbW9ybmluZyddLCBQZXJpb2QubW9ybmluZykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZHVuZGVyKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihTZWFzb24sICdfX2VxX18nKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgV0lOVEVSID0gNAorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QoU2Vhc29uKSwKKyAgICAgICAgICAgICAgICBbU2Vhc29uLlNVTU1FUiwgU2Vhc29uLldJTlRFUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLlNQUklOR10sCisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZWRfaXRlcmF0aW9uX29yZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIGxpc3QocmV2ZXJzZWQoc2VsZi5TZWFzb24pKSwKKyAgICAgICAgICAgICAgICBbc2VsZi5TZWFzb24uV0lOVEVSLCBzZWxmLlNlYXNvbi5BVVRVTU4sIHNlbGYuU2Vhc29uLlNVTU1FUiwKKyAgICAgICAgICAgICAgICAgc2VsZi5TZWFzb24uU1BSSU5HXQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3N0cmluZ19saXN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgWydqdW5lJywgJ2p1bHknLCAnYXVndXN0J10pCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKAorICAgICAgICAgICAgICAgICdTdW1tZXJNb250aCcsCisgICAgICAgICAgICAgICAgKCgnanVuZScsIDEpLCAoJ2p1bHknLCAyKSwgKCdhdWd1c3QnLCAzKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9mcm9tX2RpY3Qoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgIE9yZGVyZWREaWN0KCgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZS52YWx1ZSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcsIHR5cGU9aW50KQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgbW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFN1bW1lck1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGUpLCBTdW1tZXJNb250aCkKKworICAgIGRlZiB0ZXN0X3Byb2dyYW1hdGljX2Z1bmN0aW9uX3R5cGVfZnJvbV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBJbnRFbnVtKCdTdW1tZXJNb250aCcsICdqdW5lIGp1bHkgYXVndXN0JykKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZyhzZWxmKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShOYW1lLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgTmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5hbWUuQkRGTCwgJ0d1aWRvIHZhbiBSb3NzdW0nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoTmFtZS5CREZMLCBOYW1lKCdHdWlkbyB2YW4gUm9zc3VtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBnZXRhdHRyKE5hbWUsICdCREZMJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTmFtZS5CREZMLCBsb2FkcyhkdW1wcyhOYW1lLkJERkwpKSkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIE1vcmVDb2xvcihDb2xvcik6CisgICAgICAgICAgICAgICAgY3lhbiA9IDQKKyAgICAgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgICAgIHllbGxvdyA9IDYKKworICAgIGRlZiB0ZXN0X2V4Y2x1ZGVfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgY2xhc3Mgd2hhdGV2ZXIoRW51bSk6CisgICAgICAgICAgICB0aGlzID0gJ3RoYXQnCisgICAgICAgICAgICB0aGVzZSA9ICd0aG9zZScKKyAgICAgICAgICAgIGRlZiByZWFsbHkoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdubywgbm90ICVzJyAlIHNlbGYudmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh0eXBlKHdoYXRldmVyLnJlYWxseSksIHdoYXRldmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdoYXRldmVyLnRoaXMucmVhbGx5KCksICdubywgbm90IHRoYXQnKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfaW5oZXJpdGFuY2Vfb3JkZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0sIHN0cik6CisgICAgICAgICAgICAgICAgTm90SGVyZSA9ICdlcnJvciBiZWZvcmUgdGhpcyBwb2ludCcKKworICAgIGRlZiB0ZXN0X2ludGVudW1fdHJhbnNpdGl2aXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBudW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAyCisgICAgICAgICAgICB0aHJlZSA9IDMKKyAgICAgICAgY2xhc3MgbnVtZXJvKEludEVudW0pOgorICAgICAgICAgICAgdW5vID0gMQorICAgICAgICAgICAgZG9zID0gMgorICAgICAgICAgICAgdHJlcyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIub25lLCBudW1lcm8udW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci50d28sIG51bWVyby5kb3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLnRocmVlLCBudW1lcm8udHJlcykKKworICAgIGRlZiB0ZXN0X3dyb25nX2VudW1faW5fY2FsbChzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIE1vbm9jaHJvbWUsIEdlbmRlci5tYWxlKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZW51bV9pbl9taXhlZF9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEludEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTW9ub2Nocm9tZSwgR2VuZGVyLm1hbGUpCisKKyAgICBkZWYgdGVzdF9taXhlZF9lbnVtX2luX2NhbGxfMShzZWxmKToKKyAgICAgICAgY2xhc3MgTW9ub2Nocm9tZShJbnRFbnVtKToKKyAgICAgICAgICAgIGJsYWNrID0gMAorICAgICAgICAgICAgd2hpdGUgPSAxCisgICAgICAgIGNsYXNzIEdlbmRlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG1hbGUgPSAwCisgICAgICAgICAgICBmZW1hbGUgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTW9ub2Nocm9tZShHZW5kZXIuZmVtYWxlKSwgTW9ub2Nocm9tZS53aGl0ZSkKKworICAgIGRlZiB0ZXN0X21peGVkX2VudW1faW5fY2FsbF8yKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEludEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhNb25vY2hyb21lKEdlbmRlci5tYWxlKSwgTW9ub2Nocm9tZS5ibGFjaykKKworICAgIGRlZiB0ZXN0X2ZsdWZsX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEZsdWZsbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQorICAgICAgICBjbGFzcyBNYWlsTWFuT3B0aW9ucyhGbHVmbG51bSk6CisgICAgICAgICAgICBvcHRpb24xID0gMQorICAgICAgICAgICAgb3B0aW9uMiA9IDIKKyAgICAgICAgICAgIG9wdGlvbjMgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KE1haWxNYW5PcHRpb25zLm9wdGlvbjEpLCAxKQorCisgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgb25lID0gMTAwCisgICAgICAgICAgICB0d28gPSAyMDAKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOdW1iZXIub25lLl9tZW1iZXJfdHlwZV8sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhOdW1iZXIuX21lbWJlcl90eXBlXywgaW50KQorICAgICAgICBjbGFzcyBTdHJpbmcoc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHlhcm4gPSAnc29mdCcKKyAgICAgICAgICAgIHJvcGUgPSAncm91Z2gnCisgICAgICAgICAgICB3aXJlID0gJ2hhcmQnCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3RyaW5nLnlhcm4uX21lbWJlcl90eXBlXywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzKFN0cmluZy5fbWVtYmVyX3R5cGVfLCBzdHIpCisgICAgICAgIGNsYXNzIFBsYWluKEVudW0pOgorICAgICAgICAgICAgdmFuaWxsYSA9ICd3aGl0ZScKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQbGFpbi52YW5pbGxhLl9tZW1iZXJfdHlwZV8sIG9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQbGFpbi5fbWVtYmVyX3R5cGVfLCBvYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19zdWNoX2VudW1fbWVtYmVyKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbG9yKDQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgQ29sb3JbJ2NoYXJ0cmV1c2UnXQorCisgICAgZGVmIHRlc3RfbmV3X3JlcHIoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZG9uJ3QgeW91IGp1c3QgbG92ZSBzaGFkZXMgb2YgJXM/IiAlIHNlbGYubmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlcHIoQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgImRvbid0IHlvdSBqdXN0IGxvdmUgc2hhZGVzIG9mIGJsdWU/IiwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgTXlFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiTXkgbmFtZSBpcyAlcy4iICUgc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIE15SW50RW51bShpbnQsIE15RW51bSk6CisgICAgICAgICAgICB0aGlzID0gMQorICAgICAgICAgICAgdGhhdCA9IDIKKyAgICAgICAgICAgIHRoZW90aGVyID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTXlJbnRFbnVtLnRoYXQpLCAiTXkgbmFtZSBpcyB0aGF0LiIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9taXhpbl9tcm8oc2VsZik6CisgICAgICAgIGNsYXNzIGF1dG9fZW51bSh0eXBlKEVudW0pKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKG1ldGFjbHMsIGNscywgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgICAgICAgICAgdGVtcCA9IHR5cGUoY2xhc3NkaWN0KSgpCisgICAgICAgICAgICAgICAgbmFtZXMgPSBzZXQoY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXMpCisgICAgICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgICAgICBmb3IgayBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgdiA9IGNsYXNzZGljdFtrXQorICAgICAgICAgICAgICAgICAgICBpZiB2IGlzIEVsbGlwc2lzOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSB2CisgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgICAgICB0ZW1wW2tdID0gdgorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIGNsYXNzZGljdC5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICBpZiBrIG5vdCBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBba10gPSB2CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKGF1dG9fZW51bSwgbWV0YWNscykuX19uZXdfXygKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFjbHMsIGNscywgYmFzZXMsIHRlbXApCisKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcmVkRW51bShFbnVtLCBtZXRhY2xhc3M9YXV0b19lbnVtKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBBdXRvSW50RW51bShJbnRFbnVtLCBtZXRhY2xhc3M9YXV0b19lbnVtKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0QXV0b051bWJlcihBdXRvTnVtYmVyZWRFbnVtKToKKyAgICAgICAgICAgIGEgPSAuLi4KKyAgICAgICAgICAgIGIgPSAzCisgICAgICAgICAgICBjID0gLi4uCisKKyAgICAgICAgY2xhc3MgVGVzdEF1dG9JbnQoQXV0b0ludEVudW0pOgorICAgICAgICAgICAgYSA9IC4uLgorICAgICAgICAgICAgYiA9IDMKKyAgICAgICAgICAgIGMgPSAuLi4KKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9nZXRuZXdhcmdzKHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZHMoZHVtcHMoTkk1KSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZHMoZHVtcHMoTkVJLnkpKSwgTkVJLnkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhvdXRfZ2V0bmV3YXJncyhzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGR1bXBzKE5FSS54KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFBpY2tsaW5nRXJyb3IpOgorICAgICAgICAgICAgZHVtcHMoTkVJKQorCisgICAgZGVmIHRlc3RfdHVwbGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFNvbWVUdXBsZSh0dXBsZSwgRW51bSk6CisgICAgICAgICAgICBmaXJzdCA9ICgxLCAnZm9yIHRoZSBtb25leScpCisgICAgICAgICAgICBzZWNvbmQgPSAoMiwgJ2ZvciB0aGUgc2hvdycpCisgICAgICAgICAgICB0aGlyZCA9ICgzLCAnZm9yIHRoZSBtdXNpYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShTb21lVHVwbGUuZmlyc3QpLCBTb21lVHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShTb21lVHVwbGUuc2Vjb25kLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTb21lVHVwbGUudGhpcmQsICgzLCAnZm9yIHRoZSBtdXNpYycpKQorICAgICAgICBnbG9iYWxzKClbJ1NvbWVUdXBsZSddID0gU29tZVR1cGxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZHMoZHVtcHMoU29tZVR1cGxlLmZpcnN0KSksIFNvbWVUdXBsZS5maXJzdCkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV92YWx1ZXNfZ2l2ZV91bmlxdWVfZW51bV9pdGVtcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGZpcnN0ID0gKCkKKyAgICAgICAgICAgIHNlY29uZCA9ICgpCisgICAgICAgICAgICB0aGlyZCA9ICgpCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KEF1dG9OdW1iZXIpLAorICAgICAgICAgICAgICAgIFtBdXRvTnVtYmVyLmZpcnN0LCBBdXRvTnVtYmVyLnNlY29uZCwgQXV0b051bWJlci50aGlyZF0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChBdXRvTnVtYmVyLnNlY29uZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXV0b051bWJlci50aGlyZC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBdXRvTnVtYmVyKDEpLCBBdXRvTnVtYmVyLmZpcnN0KQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX2VuaGFuY2VkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9taXhlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBBbHdheXNFcXVhbDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIE9yZGluYXJ5RW51bShFbnVtKToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQWx3YXlzRXF1YWwoKSwgT3JkaW5hcnlFbnVtLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT3JkaW5hcnlFbnVtLmEsIEFsd2F5c0VxdWFsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoR3JhZGUuQywgR3JhZGUuRCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzIoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSkKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmczKHNlbGYpOgorICAgICAgICBjbGFzcyBTaGFkZShFbnVtKToKKyAgICAgICAgICAgIGRlZiBzaGFkZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIENvbG9yKFNoYWRlKToKKyAgICAgICAgICAgIGRlZiBoZXgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyBoZXhsaWZpZWQhJyAlIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgeWVsbG93ID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vcmVDb2xvci5tYWdlbnRhLmhleCgpLCAnNSBoZXhsaWZpZWQhJykKKworCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVW5pcXVlRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gVW5pcXVlRW51bTogICVyIC0tPiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhLCBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY2xhc3MgQ29sb3IoVW5pcXVlRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBncmVuZSA9IDIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAgICAgICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAgICAgICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAgICAgICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgICAgICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgICAgICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgICAgICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgICAgICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgICAgICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgICAgICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgICAgICAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAgICAgICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAgICAgICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHksIDIpLCA5LjgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBsYW5ldC5FQVJUSC52YWx1ZSwgKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KSkKKworICAgIGRlZiB0ZXN0X25vbmhhc2hfdmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJJbkFMaXN0KEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFtsZW4oY2xzLl9fbWVtYmVyc19fKSArIDFdCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9ySW5BTGlzdChBdXRvTnVtYmVySW5BTGlzdCk6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvckluQUxpc3QpLCBbQ29sb3JJbkFMaXN0LnJlZCwgQ29sb3JJbkFMaXN0LmdyZWVuLCBDb2xvckluQUxpc3QuYmx1ZV0pCisgICAgICAgIGZvciBlbnVtLCB2YWx1ZSBpbiB6aXAoQ29sb3JJbkFMaXN0LCByYW5nZSgzKSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudW0udmFsdWUsIFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKENvbG9ySW5BTGlzdChbdmFsdWVdKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3R5cGVzX3Jlc29sdmVkX2luX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgbGFiZWwgPSBhcmdzCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmoubGFiZWwgPSBsYWJlbAorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRMaXN0KExhYmVsbGVkSW50RW51bSk6CisgICAgICAgICAgICB1bnByb2Nlc3NlZCA9ICgxLCAiVW5wcm9jZXNzZWQiKQorICAgICAgICAgICAgcGF5bWVudF9jb21wbGV0ZSA9ICgyLCAiUGF5bWVudCBDb21wbGV0ZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KExhYmVsbGVkTGlzdCksIFtMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIExhYmVsbGVkTGlzdC5wYXltZW50X2NvbXBsZXRlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGFiZWxsZWRMaXN0KDEpLCBMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQpCisKKworY2xhc3MgVGVzdFVuaXF1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmlxdWVfY2xlYW4oc2VsZik6CisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW4oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgdHJlcyA9IDQuMAorICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIENsZWFuZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBkb3VibGUgPSAyCisgICAgICAgICAgICB0cmlwbGUgPSAzCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGlydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndHJlcy4qb25lJyk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0eShFbnVtKToKKyAgICAgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICAgICAgdHdvID0gJ2RvcycKKyAgICAgICAgICAgICAgICB0cmVzID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAnZG91YmxlLipzaW5nbGUuKnR1cmtleS4qdHJpcGxlJywKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgQHVuaXF1ZQorICAgICAgICAgICAgY2xhc3MgRGlydGllcihJbnRFbnVtKToKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICAgICAgZG91YmxlID0gMQorICAgICAgICAgICAgICAgIHRyaXBsZSA9IDMKKyAgICAgICAgICAgICAgICB0dXJrZXkgPSAzCisKKworZXhwZWN0ZWRfaGVscF9vdXRwdXQgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENvbG9yCisgfCAgICAgIGVudW0uRW51bQorIHwgICAgICBidWlsdGlucy5vYmplY3QKKyB8XHgyMFx4MjAKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBibHVlID0gPENvbG9yLmJsdWU6IDM+CisgfFx4MjBceDIwCisgfCAgZ3JlZW4gPSA8Q29sb3IuZ3JlZW46IDI+CisgfFx4MjBceDIwCisgfCAgcmVkID0gPENvbG9yLnJlZDogMT4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW06CisgfFx4MjBceDIwCisgfCAgbmFtZQorIHwgICAgICBUaGUgbmFtZSBvZiB0aGUgRW51bSBtZW1iZXIuCisgfFx4MjBceDIwCisgfCAgdmFsdWUKKyB8ICAgICAgVGhlIHZhbHVlIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW1NZXRhOgorIHxceDIwXHgyMAorIHwgIF9fbWVtYmVyc19fCisgfCAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKyB8XHgyMFx4MjBceDIwXHgyMFx4MjBceDIwCisgfCAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyB8ICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKyIiIi5zdHJpcCgpCisKK2NsYXNzIFRlc3RTdGRMaWIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgIHJlZCA9IDEKKyAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgIGJsdWUgPSAzCisKKyAgICBkZWYgdGVzdF9weWRvYyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dCAlIF9fbmFtZV9fCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihzZWxmLkNvbG9yKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIGlmIHJlc3VsdCAhPSBleHBlY3RlZF90ZXh0OgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfZ2V0bWVtYmVycyhzZWxmKToKKyAgICAgICAgdmFsdWVzID0gZGljdCgoCisgICAgICAgICAgICAgICAgKCdfX2NsYXNzX18nLCBFbnVtTWV0YSksCisgICAgICAgICAgICAgICAgKCdfX2RvY19fJywgTm9uZSksCisgICAgICAgICAgICAgICAgKCdfX21lbWJlcnNfXycsIHNlbGYuQ29sb3IuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgICgnX19tb2R1bGVfXycsIF9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAoJ2JsdWUnLCBzZWxmLkNvbG9yLmJsdWUpLAorICAgICAgICAgICAgICAgICgnZ3JlZW4nLCBzZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICAoJ25hbWUnLCBFbnVtLl9fZGljdF9fWyduYW1lJ10pLAorICAgICAgICAgICAgICAgICgncmVkJywgc2VsZi5Db2xvci5yZWQpLAorICAgICAgICAgICAgICAgICgndmFsdWUnLCBFbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICApKQorICAgICAgICByZXN1bHQgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXMua2V5cygpLCByZXN1bHQua2V5cygpKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgayBpbiB2YWx1ZXMua2V5cygpOgorICAgICAgICAgICAgaWYgcmVzdWx0W2tdICE9IHZhbHVlc1trXToKKyAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiAgICAga2V5OiAlc1xuICByZXN1bHQ6ICVzXG5leHBlY3RlZDogJXNcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICgnPScgKiA3NSwgaywgcmVzdWx0W2tdLCB2YWx1ZXNba10sICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9pbnNwZWN0X2NsYXNzaWZ5X2NsYXNzX2F0dHJzKHNlbGYpOgorICAgICAgICAjIGluZGlyZWN0bHkgdGVzdCBfX29iamNsYXNzX18KKyAgICAgICAgZnJvbSBpbnNwZWN0IGltcG9ydCBBdHRyaWJ1dGUKKyAgICAgICAgdmFsdWVzID0gWworICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2NsYXNzX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9b2JqZWN0LCBvYmplY3Q9RW51bU1ldGEpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX2RvY19fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1Ob25lKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nX19tZW1iZXJzX18nLCBraW5kPSdwcm9wZXJ0eScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW1NZXRhLCBvYmplY3Q9RW51bU1ldGEuX19tZW1iZXJzX18pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21vZHVsZV9fJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1fX25hbWVfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2JsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J2dyZWVuJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLmdyZWVuKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ncmVkJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPXNlbGYuQ29sb3IsIG9iamVjdD1zZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J25hbWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J3ZhbHVlJywga2luZD0nZGF0YScsCisgICAgICAgICAgICAgICAgICAgIGRlZmluaW5nX2NsYXNzPUVudW0sIG9iamVjdD1FbnVtLl9fZGljdF9fWyd2YWx1ZSddKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHZhbHVlcy5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICByZXN1bHQgPSBsaXN0KGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZi5Db2xvcikpCisgICAgICAgIHJlc3VsdC5zb3J0KGtleT1sYW1iZGEgaXRlbTogaXRlbS5uYW1lKQorICAgICAgICBmYWlsZWQgPSBGYWxzZQorICAgICAgICBmb3IgdiwgciBpbiB6aXAodmFsdWVzLCByZXN1bHQpOgorICAgICAgICAgICAgaWYgciAhPSB2OgorICAgICAgICAgICAgICAgIHByaW50KCdcbiVzXG4lc1xuJXNcbiVzXG4nICUgKCc9JyAqIDc1LCByLCB2LCAnPScgKiA3NSksIHNlcD0nJykKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSBUcnVlCisgICAgICAgIGlmIGZhaWxlZDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVzdWx0IGRvZXMgbm90IGVxdWFsIGV4cGVjdGVkLCBzZWUgcHJpbnQgYWJvdmUiKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQppbmRleCA0YWYyMTdiLi44NzQyYWZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiBpbXBvcnQgcGlja2xlCiAKQEAgLTE2OCwxNSArMTY5LDEyIEBACiAgICAgICAgIHggPSByYW5nZSgxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmV2ZXJzZWQoeCkpLCB0eXBlKGl0ZXIoeCkpKQogCi0gICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgotICAgICAgICAjIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBub3QgYW4gaW50ZXJmYWNlIHJlcXVpcmVtZW50Ci0gICAgICAgIGZyb20gdGVzdC50ZXN0X2l0ZXJsZW4gaW1wb3J0IGxlbgogICAgICAgICBmb3IgcyBpbiAoJ2hlbGxvJywgdHVwbGUoJ2hlbGxvJyksIGxpc3QoJ2hlbGxvJyksIHJhbmdlKDUpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldmVyc2VkKHMpKSwgbGVuKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXZlcnNlZChzKSksIGxlbihzKSkKICAgICAgICAgICAgIHIgPSByZXZlcnNlZChzKQogICAgICAgICAgICAgbGlzdChyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHIpLCAwKQogICAgICAgICBjbGFzcyBTZXFXaXRoV2VpcmRMZW46CiAgICAgICAgICAgICBjYWxsZWQgPSBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CkBAIC0xODcsNyArMTg1LDcgQEAKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CiAgICAgICAgIHIgPSByZXZlcnNlZChTZXFXaXRoV2VpcmRMZW4oKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxlbiwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIG9wZXJhdG9yLmxlbmd0aF9oaW50LCByKQogCiAKICAgICBkZWYgdGVzdF9nYyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CmluZGV4IDdmOTU0N2YuLjY0NTlmYmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQpAQCAtMjEsMTAgKzIxLDExIEBACiAiIiIKIFRlc3RzIGZvciBlcG9sbCB3cmFwcGVyLgogIiIiCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgZXJybm8KLWltcG9ydCB0aW1lCitpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0zMyw3ICszNCw3IEBACiAKIHRyeToKICAgICBzZWxlY3QuZXBvbGwoKQotZXhjZXB0IElPRXJyb3IgYXMgZToKK2V4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CiAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJrZXJuZWwgZG9lc24ndCBzdXBwb3J0IGVwb2xsKCkiKQogICAgIHJhaXNlCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgICAgIGNsaWVudC5zZXRibG9ja2luZyhGYWxzZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBzZWxmLnNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKQEAgLTg3LDYgKzg4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZWN0LmVwb2xsLCBbJ2ZvbyddKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwge30pCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggc2VsZWN0LmVwb2xsKDE2KSBhcyBlcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcC5maWxlbm8oKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXAuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5maWxlbm8pCisKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6CiAgICAgICAgIHNlcnZlciwgY2xpZW50ID0gc2VsZi5fY29ubmVjdGVkX3BhaXIoKQogCkBAIC0xMTUsMTIgKzEyMywxMiBAQAogICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBmaWxlIGRlc2NyaXB0b3IgY2Fubm90IGJlIGEgbmVnYXRpdmUgaW50ZWdlciAoLTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcC5yZWdpc3RlciwgLTEsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICAjIElPRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCisgICAgICAgICAgICAjIE9TRXJyb3I6IFtFcnJubyA5XSBCYWQgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3RlciwgMTAwMDAsCiAgICAgICAgICAgICAgICAgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCiAgICAgICAgICAgICAjIHJlZ2lzdGVyaW5nIHR3aWNlIGFsc28gcmFpc2VzIGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgZXAucmVnaXN0ZXIoc2VydmVyLCBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGVwLnJlZ2lzdGVyLCBzZXJ2ZXIsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZXAuY2xvc2UoKQpAQCAtMTQyLDcgKzE1MCw3IEBACiAgICAgICAgIGVwLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXAyLnBvbGwoMSwgNCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FQkFERiwgZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXBvbGwgb24gY2xvc2VkIGZkIGRpZG4ndCByYWlzZSBFQkFERiIpCkBAIC0yMTgsNiArMjI2LDM2IEBACiAgICAgICAgIHNlcnZlci5jbG9zZSgpCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoZmQpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVwb2xsLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXBvbGwuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwb2xsLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGVwb2xsLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwubW9kaWZ5LCBmZCwgc2VsZWN0LkVQT0xMSU4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGVwb2xsLnBvbGwsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucmVnaXN0ZXIsIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwudW5yZWdpc3RlciwgZmQpCisKKyAgICBkZWYgdGVzdF9mZF9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGVwb2xsID0gc2VsZWN0LmVwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGVwb2xsLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShlcG9sbC5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0RVBvbGwpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCAxYWQ3Zjk3Li5mMDg1MWJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjcHl0aG9uX29ubHksIGdjX2NvbGxlY3QsIHJ1bl91bml0dGVzdCwgbm9fdHJhY2luZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5saW5rKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgY3B5dGhvbl9vbmx5LCBnY19jb2xsZWN0LCBydW5fdW5pdHRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX3RyYWNpbmcsIHVubGluaykKIAogY2xhc3MgTmFpdmVFeGNlcHRpb24oRXhjZXB0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC0yNDQsMjIgKzI0NCwyMiBAQAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsIDEpfSksCiAgICAgICAgICAgICAoU3lzdGVtRXhpdCwgKCdmb28nLCksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnY29kZScgOiAnZm9vJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiBOb25lLCAnc3RyZXJyb3InIDogTm9uZX0pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiAnZm9vJywgJ3N0cmVycm9yJyA6ICdiYXInfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicpLAorICAgICAgICAgICAgKE9TRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4Jyl9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdlcnJub1N0cicsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJyksCiAgICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZXJybm8nIDogJ2Vycm5vU3RyJywKICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgIHsnYXJncycgOiAoMSwgJ3N0ckVycm9yU3RyJyksICdlcnJubycgOiAxLAogICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cid9KSwKICAgICAgICAgICAgIChTeW50YXhFcnJvciwgKCksIHsnbXNnJyA6IE5vbmUsICd0ZXh0JyA6IE5vbmUsCkBAIC00MDksNyArNDA5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NvbnRleHRfXykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NhdXNlX18pCiAKLSAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRW52aXJvbm1lbnRFcnJvcik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpCkBAIC05NDcsMTMgKzk0NywxMSBAQAogCiAgICAgZGVmIHRlc3Rfbm9uX3N0cl9hcmd1bWVudChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTU3NzgKLSAgICAgICAgYXJnID0gYidhYmMnCi0gICAgICAgIGV4YyA9IEltcG9ydEVycm9yKGFyZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBCeXRlc1dhcm5pbmcpLCBxdWlldD1UcnVlKToKKyAgICAgICAgICAgIGFyZyA9IGInYWJjJworICAgICAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYXJnKSwgc3RyKGV4YykpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChFeGNlcHRpb25UZXN0cywgSW1wb3J0RXJyb3JUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmF1bHRoYW5kbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKaW5kZXggNzcwZTcwYy4uZWJkOTllZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkKQEAgLTE5LDE4ICsxOSw2IEBACiAKIFRJTUVPVVQgPSAwLjUKIAotdHJ5OgotICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IHNldHJsaW1pdCwgUkxJTUlUX0NPUkUsIGVycm9yIGFzIHJlc291cmNlX2Vycm9yCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcHJlcGFyZV9zdWJwcm9jZXNzID0gTm9uZQotZWxzZToKLSAgICBkZWYgcHJlcGFyZV9zdWJwcm9jZXNzKCk6Ci0gICAgICAgICMgZG9uJ3QgY3JlYXRlIGNvcmUgZmlsZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXRybGltaXQoUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZV9lcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0KIGRlZiBleHBlY3RlZF90cmFjZWJhY2sobGluZW5vMSwgbGluZW5vMiwgaGVhZGVyLCBtaW5fY291bnQ9MSk6CiAgICAgcmVnZXggPSBoZWFkZXIKICAgICByZWdleCArPSAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY1xuJyAlIGxpbmVubzEKQEAgLTU5LDEwICs0Nyw4IEBACiAgICAgICAgIGJ1aWxkLCBhbmQgcmVwbGFjZSAiQ3VycmVudCB0aHJlYWQgMHgwMDAwN2Y4ZDhmYmQ5NzAwIiBieSAiQ3VycmVudAogICAgICAgICB0aHJlYWQgWFhYIi4KICAgICAgICAgIiIiCi0gICAgICAgIG9wdGlvbnMgPSB7fQotICAgICAgICBpZiBwcmVwYXJlX3N1YnByb2Nlc3M6Ci0gICAgICAgICAgICBvcHRpb25zWydwcmVleGVjX2ZuJ10gPSBwcmVwYXJlX3N1YnByb2Nlc3MKLSAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUsICoqb3B0aW9ucykKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHByb2Nlc3MgPSBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLWMnLCBjb2RlKQogICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoKQogICAgICAgICBleGl0Y29kZSA9IHByb2Nlc3Mud2FpdCgpCiAgICAgICAgIG91dHB1dCA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihzdGRvdXQpCkBAIC04Niw5ICs3Miw5IEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYJworICAgICAgICAgICAgaGVhZGVyID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKKyAgICAgICAgICAgIGhlYWRlciA9ICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIHJlZ2V4ID0gIiIiCiBeRmF0YWwgUHl0aG9uIGVycm9yOiB7bmFtZX0KIApAQCAtMTAxLDggKzg3LDcgQEAKICAgICAgICAgICAgIGhlYWRlcj1yZS5lc2NhcGUoaGVhZGVyKSkKICAgICAgICAgaWYgb3RoZXJfcmVnZXg6CiAgICAgICAgICAgICByZWdleCArPSAnfCcgKyBvdGhlcl9yZWdleAotICAgICAgICB3aXRoIHN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCisgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCiAgICAgICAgIG91dHB1dCA9ICdcbicuam9pbihvdXRwdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0cHV0LCByZWdleCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChleGl0Y29kZSwgMCkKQEAgLTIzMiw4ICsyMTcsNyBAQAogZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKICIiIi5zdHJpcCgpCiAgICAgICAgIG5vdF9leHBlY3RlZCA9ICdGYXRhbCBQeXRob24gZXJyb3InCi0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgotICAgICAgICAgICAgc3RkZXJyLCBleGl0Y29kZSA9IHNlbGYuZ2V0X291dHB1dChjb2RlKQorICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCiAgICAgICAgIHN0ZGVyID0gJ1xuJy5qb2luKHN0ZGVycikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdF9leHBlY3RlZCBub3QgaW4gc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgIiVyIGlzIHByZXNlbnQgaW4gJXIiICUgKG5vdF9leHBlY3RlZCwgc3RkZXJyKSkKQEAgLTI2NCwxNiArMjQ4LDM0IEBACiAgICAgZGVmIHRlc3RfZGlzYWJsZWRfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgIyBCeSBkZWZhdWx0LCB0aGUgbW9kdWxlIHNob3VsZCBiZSBkaXNhYmxlZAogICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgotICAgICAgICByYywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCi0gICAgICAgIHN0ZG91dCA9IChzdGRvdXQgKyBzdGRlcnIpLnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiRmFsc2UiKQorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAnLUUnLCAnLWMnLCBjb2RlKQorICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJGYWxzZSIpCiAKICAgICBkZWYgdGVzdF9zeXNfeG9wdGlvbnMoc2VsZik6CiAgICAgICAgICMgVGVzdCBweXRob24gLVggZmF1bHRoYW5kbGVyCiAgICAgICAgIGNvZGUgPSAiaW1wb3J0IGZhdWx0aGFuZGxlcjsgcHJpbnQoZmF1bHRoYW5kbGVyLmlzX2VuYWJsZWQoKSkiCi0gICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1YIiwgImZhdWx0aGFuZGxlciIsICItYyIsIGNvZGUpCi0gICAgICAgIHN0ZG91dCA9IChzdGRvdXQgKyBzdGRlcnIpLnN0cmlwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiVHJ1ZSIpCisgICAgICAgIGFyZ3MgPSAoc3lzLmV4ZWN1dGFibGUsICItRSIsICItWCIsICJmYXVsdGhhbmRsZXIiLCAiLWMiLCBjb2RlKQorICAgICAgICAjIGRvbid0IHVzZSBhc3NlcnRfcHl0aG9uX29rKCkgYmVjYXVzZSBpdCBhbHdheXMgZW5hYmxlIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKKworICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgZW1wdHkgZW52IHZhcgorICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlKQorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJycKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZSBmYXVsdGhhbmRsZXIKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncywgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGIiRmFsc2UiKQorCisgICAgICAgICMgbm9uLWVtcHR5IGVudiB2YXIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WydQWVRIT05GQVVMVEhBTkRMRVInXSA9ICcxJworICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKIAogICAgIGRlZiBjaGVja19kdW1wX3RyYWNlYmFjayhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIgpAQCAtMzA0LDcgKzMwNiw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBsaW5lbm8gPSA4CiAgICAgICAgIGV4cGVjdGVkID0gWwotICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKKyAgICAgICAgICAgICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAlcyBpbiBmdW5jQicgJSBsaW5lbm8sCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMTEgaW4gZnVuY0EnLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDEzIGluIDxtb2R1bGU+JwpAQCAtMzM2LDcgKzMzOCw3IEBACiAgICAgICAgICAgICBmdW5jX25hbWU9ZnVuY19uYW1lLAogICAgICAgICApCiAgICAgICAgIGV4cGVjdGVkID0gWwotICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKKyAgICAgICAgICAgICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6JywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSA0IGluICVzJyAlIHRydW5jYXRlZCwKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSA2IGluIDxtb2R1bGU+JwogICAgICAgICBdCkBAIC0zOTAsMTMgKzM5MiwxMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gMTAKICAgICAgICAgcmVnZXggPSAiIiIKLV5UaHJlYWQgMHhbMC05YS1mXSs6CiteVGhyZWFkIDB4WzAtOWEtZl0rIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogKD86ICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIFtfYS16XSsKICl7ezEsM319ICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjMgaW4gcnVuCiAgIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcF9pbm5lcgogICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIF9ib290c3RyYXAKIAotQ3VycmVudCB0aHJlYWQgWFhYOgorQ3VycmVudCB0aHJlYWQgWFhYIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOgogICBGaWxlICI8c3RyaW5nPiIsIGxpbmUge2xpbmVub30gaW4gZHVtcAogICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgMjggaW4gPG1vZHVsZT4kCiAiIiIuc3RyaXAoKQpAQCAtNDU5LDcgKzQ2MSw3IEBACiAgICAgICAgICAgICBjb3VudCA9IGxvb3BzCiAgICAgICAgICAgICBpZiByZXBlYXQ6CiAgICAgICAgICAgICAgICAgY291bnQgKj0gMgotICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKzpcbicgJSB0aW1lb3V0X3N0cgorICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicgJSB0aW1lb3V0X3N0cgogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soOSwgMjAsIGhlYWRlciwgbWluX2NvdW50PWNvdW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01NjEsOSArNTYzLDkgQEAKICAgICAgICAgdHJhY2UgPSAnXG4nLmpvaW4odHJhY2UpCiAgICAgICAgIGlmIG5vdCB1bnJlZ2lzdGVyOgogICAgICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICAgICAgcmVnZXggPSAnQ3VycmVudCB0aHJlYWQgWFhYOlxuJworICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVnZXggPSAnVHJhY2ViYWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJworICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ1N0YWNrIFwobW9zdCByZWNlbnQgY2FsbCBmaXJzdFwpOlxuJwogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soNywgMjgsIHJlZ2V4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01OTAsOCArNTkyLDUgQEAKICAgICAgICAgc2VsZi5jaGVja19yZWdpc3RlcihjaGFpbj1UcnVlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGYXVsdEhhbmRsZXJUZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggYjhjZGEyZi4uODM3ZmMxNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0xLDcgKzEsNCBAQAogIiIiVGVzdCBwcm9ncmFtIGZvciB0aGUgZmNudGwgQyBtb2R1bGUuCi0KLU9TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCi0KICIiIgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgb3MKQEAgLTM5LDggKzM2LDYgQEAKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygncXFpaGhpJywgMCwgMCwgMCwgZmNudGwuRl9XUkxDSywgMCwgMCkKICAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ2FpeDMnLCAnYWl4NCcsICdocC11eEInLCAndW5peHdhcmU3J106CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hobGxsaWknLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwLCAwKQotICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnb3MyZW14J106Ci0gICAgICAgIGxvY2tkYXRhID0gTm9uZQogICAgIGVsc2U6CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hoJytzdGFydF9sZW4rJ2hoJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCkKICAgICBpZiBsb2NrZGF0YToKQEAgLTY2LDE4ICs2MSwyMCBAQAogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106Ci0gICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9mY250bF9maWxlX2Rlc2NyaXB0b3Ioc2VsZik6CiAgICAgICAgICMgYWdhaW4sIGJ1dCBwYXNzIHRoZSBmaWxlIHJhdGhlciB0aGFuIG51bWVyaWMgZGVzY3JpcHRvcgogICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydikKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2JhZF9maWxlKHNlbGYpOgpAQCAtMTE4LDYgKzExNSwyMSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAKKyAgICBkZWYgdGVzdF9mbG9jayhzZWxmKToKKyAgICAgICAgc2VsZi5mID0gb3BlbihURVNURk4sICd3YicpCisgICAgICAgIGZpbGVubyA9IHNlbGYuZi5maWxlbm8oKQorICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIGZjbnRsLkxPQ0tfU0gpCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19VTikKKyAgICAgICAgZmNudGwuZmxvY2soc2VsZi5mLCBmY250bC5MT0NLX1NIIHwgZmNudGwuTE9DS19OQikKKyAgICAgICAgZmNudGwuZmxvY2soc2VsZi5mLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmY250bC5mbG9jayhmaWxlbm8sIGZjbnRsLkxPQ0tfRVgpCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19VTikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmY250bC5mbG9jaywgLTEsIGZjbnRsLkxPQ0tfU0gpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmNudGwuZmxvY2ssICdzcGFtJywgZmNudGwuTE9DS19TSCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZmNudGwuZmxvY2ssIF90ZXN0Y2FwaS5JTlRfTUFYKzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkxPQ0tfU0gpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUZXN0RmNudGwpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKaW5kZXggNzZiMTY5NC4uZDU0ZTk3NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQpAQCAtODcsNyArODcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQogCiAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5mLnJlYWQpCiAKIGNsYXNzIENBdXRvRmlsZVRlc3RzKEF1dG9GaWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBvcGVuID0gaW8ub3BlbgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKaW5kZXggMDk1OTk3OS4uYzdjYjNmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMSw0ICsxLDMgQEAKLQogaW1wb3J0IG9zLCBmaWxlY21wLCBzaHV0aWwsIHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtNDAsMTUgKzM5LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLmRpciksCiAgICAgICAgICAgICAgICAgICAgICJGaWxlIGFuZCBkaXJlY3RvcnkgY29tcGFyZSBhcyBlcXVhbCIpCiAKKyAgICBkZWYgdGVzdF9jYWNoZV9jbGVhcihzZWxmKToKKyAgICAgICAgZmlyc3RfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIHNlY29uZF9jb21wYXJlID0gZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfZGlmZiwgc2hhbGxvdz1GYWxzZSkKKyAgICAgICAgZmlsZWNtcC5jbGVhcl9jYWNoZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oZmlsZWNtcC5fY2FjaGUpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FjaGUgbm90IGNsZWFyZWQgYWZ0ZXIgY2FsbGluZyBjbGVhcl9jYWNoZSIpCisKIGNsYXNzIERpckNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKICAgICAgICAgc2VsZi5kaXIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyJykKICAgICAgICAgc2VsZi5kaXJfc2FtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXItc2FtZScpCiAgICAgICAgIHNlbGYuZGlyX2RpZmYgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLWRpZmYnKQorCisgICAgICAgICMgQW5vdGhlciBkaXIgaXMgY3JlYXRlZCB1bmRlciBkaXJfc2FtZSwgYnV0IGl0IGhhcyBhIG5hbWUgZnJvbSB0aGUKKyAgICAgICAgIyBpZ25vcmVkIGxpc3Qgc28gaXQgc2hvdWxkIG5vdCBhZmZlY3QgdGVzdGluZyByZXN1bHRzLgorICAgICAgICBzZWxmLmRpcl9pZ25vcmVkID0gb3MucGF0aC5qb2luKHNlbGYuZGlyX3NhbWUsICcuaGcnKQorCiAgICAgICAgIHNlbGYuY2FzZWluc2Vuc2l0aXZlID0gb3MucGF0aC5ub3JtY2FzZSgnQScpID09IG9zLnBhdGgubm9ybWNhc2UoJ2EnKQogICAgICAgICBkYXRhID0gJ0NvbnRlbnRzIG9mIGZpbGUgZ28gaGVyZS5cbicKLSAgICAgICAgZm9yIGRpciBpbiBbc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmZdOgorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZiwgc2VsZi5kaXJfaWdub3JlZCk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpciwgVHJ1ZSkKICAgICAgICAgICAgIG9zLm1rZGlyKGRpcikKICAgICAgICAgICAgIGlmIHNlbGYuY2FzZWluc2Vuc2l0aXZlIGFuZCBkaXIgaXMgc2VsZi5kaXJfc2FtZToKQEAgLTY0LDkgKzc1LDExIEBACiAgICAgICAgIG91dHB1dC5jbG9zZSgpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXIpCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJfc2FtZSkKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9kaWZmKQorICAgICAgICBmb3IgZGlyIGluIChzZWxmLmRpciwgc2VsZi5kaXJfc2FtZSwgc2VsZi5kaXJfZGlmZik6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRpcikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaWdub3JlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLmhnJywgZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVMpCiAKICAgICBkZWYgdGVzdF9jbXBmaWxlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wZmlsZXMoc2VsZi5kaXIsIHNlbGYuZGlyLCBbJ2ZpbGUnXSkgPT0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKaW5kZXggMWU3MDY0MS4uZGI2MDgyYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTIyLDcgKzIyLDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIGZpbGVpbnB1dCBpbXBvcnQgRmlsZUlucHV0LCBob29rX2VuY29kZWQKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdW5saW5rIGFzIHNhZmVfdW5saW5rCiAKIApAQCAtMjI0LDggKzIyNCwxMCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIHRyeSBvcGVuaW5nIGluIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgW2IiQVxuQlxyXG5DXHJEIl0sIG1vZGU9IndiIikKLSAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBtb2RlPSJVIikKLSAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgbW9kZT0iVSIpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJBXG4iLCAiQlxuIiwgIkNcbiIsICJEIl0pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQpAQCAtMjc1LDggKzI3Nyw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgWyIiXSkKICAgICAgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPXQxKSBhcyBmaToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLl9maWxlcywgKCkpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQpAQCAtODM1LDIyICs4MzcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydElzKGt3YXJncy5wb3AoJ2VuY29kaW5nJyksIGVuY29kaW5nKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGt3YXJncykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgQnVmZmVyU2l6ZXNUZXN0cywKLSAgICAgICAgRmlsZUlucHV0VGVzdHMsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lucHV0LAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9jbG9zZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbmV4dGZpbGUsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2ZpbGVuYW1lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9saW5lbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2ZpbGVsaW5lbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2ZpbGVubywKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfaXNmaXJzdGxpbmUsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzc3RkaW4sCi0gICAgICAgIFRlc3RfaG9va19jb21wcmVzc2VkLAotICAgICAgICBUZXN0X2hvb2tfZW5jb2RlZCwKLSAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKaW5kZXggZjkxY2NhYS4uZTY3ODc2OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkKQEAgLTE0NSwxNiArMTQ1LDE2IEBACiAgICAgICAgICMgVW5peCBjYWxscyBkaXJjaGVjaygpIGFuZCByZXR1cm5zICJbRXJybm8gMjFdOiBJcyBhIGRpcmVjdG9yeSIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX0ZpbGVJTygnLicsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKIAogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAidGVzdCBvbmx5IHdvcmtzIG9uIGEgUE9TSVgtbGlrZSBzeXN0ZW0iKQogICAgIGRlZiB0ZXN0T3BlbkRpckZEKHNlbGYpOgogICAgICAgICBmZCA9IG9zLm9wZW4oJy4nLCBvcy5PX1JET05MWSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIF9GaWxlSU8oZmQsICdyJykKICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSVNESVIpCkBAIC0xNzIsNyArMTcyLDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTE4NCwxNCArMTg0LDE0IEBACiAgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIE9TRXJyb3IiKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgZGVmIFJlb3BlbkZvclJlYWQoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mLmZpbGVubygpKQpAQCAtMjg2LDcgKzI4Niw3IEBACiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIHJ1biBpbiBhIGNyb24gam9iIHRoZXJlIGp1c3QgYXJlbid0IGFueQogICAgICAgICAgICAgICAgICAgICAjIHR0eXMsIHNvIHNraXAgdGhlIHRlc3QuICBUaGlzIGFsc28gaGFuZGxlcyBvdGhlcgogICAgICAgICAgICAgICAgICAgICAjIE9TJ2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCAvZGV2L3R0eS4KQEAgLTM2Miw3ICszNjIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfRmlsZUlPLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCiAgICAgICAgICMgSXNzdWUgMTU5ODkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBfdGVzdGNhcGkuSU5UX01BWCArIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgX0ZpbGVJTywgX3Rlc3RjYXBpLklOVF9NSU4gLSAxKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maW5hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGM5Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9maW5hbGl6YXRpb24ucHkKQEAgLTAsMCArMSw1MTMgQEAKKyIiIgorVGVzdHMgZm9yIG9iamVjdCBmaW5hbGl6YXRpb24gc2VtYW50aWNzLCBhcyBvdXRsaW5lZCBpbiBQRVAgNDQyLgorIiIiCisKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZ2MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKKworaW1wb3J0IF90ZXN0Y2FwaQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgTm9uR0NTaW1wbGVCYXNlOgorICAgICIiIgorICAgIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdGhlIG9iamVjdHMgdW5kZXIgdGVzdCwgZXF1aXBwZWQgd2l0aCB2YXJpb3VzCisgICAgdGVzdGluZyBmZWF0dXJlcy4KKyAgICAiIiIKKworICAgIHN1cnZpdm9ycyA9IFtdCisgICAgZGVsX2NhbGxzID0gW10KKyAgICB0cF9kZWxfY2FsbHMgPSBbXQorICAgIGVycm9ycyA9IFtdCisKKyAgICBfY2xlYW5pbmcgPSBGYWxzZQorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY2xlYW51cChjbHMpOgorICAgICAgICBjbHMuc3Vydml2b3JzLmNsZWFyKCkKKyAgICAgICAgY2xzLmVycm9ycy5jbGVhcigpCisgICAgICAgIGdjLmdhcmJhZ2UuY2xlYXIoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgY2xzLmRlbF9jYWxscy5jbGVhcigpCisgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgdGVzdChjbHMpOgorICAgICAgICAiIiIKKyAgICAgICAgQSBjb250ZXh0IG1hbmFnZXIgdG8gdXNlIGFyb3VuZCBhbGwgZmluYWxpemF0aW9uIHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBzdXBwb3J0LmRpc2FibGVfZ2MoKToKKyAgICAgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgY2xzLnRwX2RlbF9jYWxscy5jbGVhcigpCisgICAgICAgICAgICBOb25HQ1NpbXBsZUJhc2UuX2NsZWFuaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgICAgIGlmIGNscy5lcnJvcnM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGNscy5lcnJvcnNbMF0KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBjbHMuX2NsZWFudXAoKQorCisgICAgZGVmIGNoZWNrX3Nhbml0eShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIHRoZSBvYmplY3QgaXMgc2FuZSAobm9uLWJyb2tlbikuCisgICAgICAgICIiIgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBQRVAgNDQyIGZpbmFsaXplci4gIFJlY29yZCB0aGF0IHRoaXMgd2FzIGNhbGxlZCwgY2hlY2sgdGhlCisgICAgICAgIG9iamVjdCBpcyBpbiBhIHNhbmUgc3RhdGUsIGFuZCBpbnZva2UgYSBzaWRlIGVmZmVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbGVhbmluZzoKKyAgICAgICAgICAgICAgICBzZWxmLmRlbF9jYWxscy5hcHBlbmQoaWQoc2VsZikpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19zYW5pdHkoKQorICAgICAgICAgICAgICAgIHNlbGYuc2lkZV9lZmZlY3QoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoZSkKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgc2lkZSBlZmZlY3QgY2FsbGVkIG9uIGRlc3RydWN0aW9uLgorICAgICAgICAiIiIKKworCitjbGFzcyBTaW1wbGVCYXNlKE5vbkdDU2ltcGxlQmFzZSk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuaWRfID0gaWQoc2VsZikKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmlkXyA9PSBpZChzZWxmKQorCisKK2NsYXNzIE5vbkdDKE5vbkdDU2ltcGxlQmFzZSk6CisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgTm9uR0NSZXN1cnJlY3RvcihOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXN1cnJlY3Qgc2VsZiBieSBzdG9yaW5nIHNlbGYgaW4gYSBjbGFzcy13aWRlIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1cnZpdm9ycy5hcHBlbmQoc2VsZikKKworY2xhc3MgU2ltcGxlKFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgU2ltcGxlUmVzdXJyZWN0b3IoTm9uR0NSZXN1cnJlY3RvciwgU2ltcGxlQmFzZSk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RCYXNlOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm9sZF9nYXJiYWdlID0gZ2MuZ2FyYmFnZVs6XQorICAgICAgICBnYy5nYXJiYWdlWzpdID0gW10KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBOb25lIG9mIHRoZSB0ZXN0cyBoZXJlIHNob3VsZCBwdXQgYW55dGhpbmcgaW4gZ2MuZ2FyYmFnZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIFtdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHNlbGYub2xkX2dhcmJhZ2UKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorCisgICAgZGVmIGFzc2VydF9kZWxfY2FsbHMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoU2ltcGxlQmFzZS5kZWxfY2FsbHMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfdHBfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UudHBfZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3N1cnZpdm9ycyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBTaW1wbGVCYXNlLnN1cnZpdm9ycyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9nYXJiYWdlKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGlkKHgpIGZvciB4IGluIGdjLmdhcmJhZ2UpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBjbGVhcl9zdXJ2aXZvcnMoc2VsZik6CisgICAgICAgIFNpbXBsZUJhc2Uuc3Vydml2b3JzLmNsZWFyKCkKKworCitjbGFzcyBTaW1wbGVGaW5hbGl6YXRpb25UZXN0KFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdCBmaW5hbGl6YXRpb24gd2l0aG91dCByZWZjeWNsZXMuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZVJlc3VycmVjdG9yKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cigpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ub25fZ2Moc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTm9uR0MoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X25vbl9nY19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTm9uR0NSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzX3RyYWNrZWQocykpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcyAqIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoaWRzKQorCisKK2NsYXNzIFNlbGZDeWNsZUJhc2U6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLnJlZiA9IHNlbGYKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgYXNzZXJ0IHNlbGYucmVmIGlzIHNlbGYKKworY2xhc3MgU2ltcGxlU2VsZkN5Y2xlKFNlbGZDeWNsZUJhc2UsIFNpbXBsZSk6CisgICAgcGFzcworCitjbGFzcyBTZWxmQ3ljbGVSZXN1cnJlY3RvcihTZWxmQ3ljbGVCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbFNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgRXhwbGljaXRseSBicmVhayB0aGUgcmVmZXJlbmNlIGN5Y2xlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5yZWYgPSBOb25lCisKKworY2xhc3MgU2VsZkN5Y2xlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIGFuIG9iamVjdCBoYXZpbmcgYSBzaW5nbGUgY3ljbGljIHJlZmVyZW5jZSB0bworICAgIGl0c2VsZi4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVTZWxmQ3ljbGUoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZGVsX18gY2FuIHJlc3VycmVjdCB0aGUgb2JqZWN0IGJlaW5nIGZpbmFsaXplZC4KKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTZWxmQ3ljbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgICMgWFhYIGlzIHRoaXMgZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgIyBXaGVuIHRyeWluZyB0byBkZXN0cm95IHRoZSBvYmplY3QgYSBzZWNvbmQgdGltZSwgX19kZWxfXworICAgICAgICAgICAgIyBpc24ndCBjYWxsZWQgYW55bW9yZSAoYW5kIHRoZSBvYmplY3QgaXNuJ3QgcmVzdXJyZWN0ZWQpLgorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3N1aWNpZGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgR0MgaXMgYWJsZSB0byBkZWFsIHdpdGggYW4gb2JqZWN0IHRoYXQga2lsbHMgaXRzIGxhc3QKKyAgICAgICAgIyByZWZlcmVuY2UgZHVyaW5nIF9fZGVsX18uCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU3VpY2lkYWxTZWxmQ3ljbGUoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworCitjbGFzcyBDaGFpbmVkQmFzZToKKworICAgIGRlZiBjaGFpbihzZWxmLCBsZWZ0KToKKyAgICAgICAgc2VsZi5zdWljaWRlZCA9IEZhbHNlCisgICAgICAgIHNlbGYubGVmdCA9IGxlZnQKKyAgICAgICAgbGVmdC5yaWdodCA9IHNlbGYKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgIHN1cGVyKCkuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgaWYgc2VsZi5zdWljaWRlZDoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmxlZnQgaXMgTm9uZQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYucmlnaHQgaXMgTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGVmdCA9IHNlbGYubGVmdAorICAgICAgICAgICAgaWYgbGVmdC5zdWljaWRlZDoKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFzc2VydCBsZWZ0LnJpZ2h0IGlzIHNlbGYKKyAgICAgICAgICAgIHJpZ2h0ID0gc2VsZi5yaWdodAorICAgICAgICAgICAgaWYgcmlnaHQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmlnaHQubGVmdCBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZUNoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisgICAgcGFzcworCitjbGFzcyBDaGFpbmVkUmVzdXJyZWN0b3IoQ2hhaW5lZEJhc2UsIFNpbXBsZVJlc3VycmVjdG9yKToKKyAgICBwYXNzCisKK2NsYXNzIFN1aWNpZGFsQ2hhaW5lZChDaGFpbmVkQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBUcnVlCisgICAgICAgIHNlbGYubGVmdCA9IE5vbmUKKyAgICAgICAgc2VsZi5yaWdodCA9IE5vbmUKKworCitjbGFzcyBDeWNsZUNoYWluRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIGEgY3ljbGljIGNoYWluLiAgVGhlc2UgdGVzdHMgYXJlIHNpbWlsYXIgaW4KKyAgICBzcGlyaXQgdG8gdGhlIHNlbGYtY3ljbGUgdGVzdHMgYWJvdmUsIGJ1dCB0aGUgY29sbGVjdGFibGUgb2JqZWN0CisgICAgZ3JhcGggaXNuJ3QgdHJpdmlhbCBhbnltb3JlLgorICAgICIiIgorCisgICAgZGVmIGJ1aWxkX2NoYWluKHNlbGYsIGNsYXNzZXMpOgorICAgICAgICBub2RlcyA9IFtjbHMoKSBmb3IgY2xzIGluIGNsYXNzZXNdCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihub2RlcykpOgorICAgICAgICAgICAgbm9kZXNbaV0uY2hhaW4obm9kZXNbaS0xXSkKKyAgICAgICAgcmV0dXJuIG5vZGVzCisKKyAgICBkZWYgY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBpZHMgPSBbaWQocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICB3cnMgPSBbd2Vha3JlZi5yZWYocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICBkZWwgbm9kZXMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3dyKCkgZm9yIHdyIGluIHdyc10sIFtOb25lXSAqIE4pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisKKyAgICBkZWYgY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKHNlbGYsIGNsYXNzZXMpOgorICAgICAgICBOID0gbGVuKGNsYXNzZXMpCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBub2RlcyA9IHNlbGYuYnVpbGRfY2hhaW4oY2xhc3NlcykKKyAgICAgICAgICAgIE4gPSBsZW4obm9kZXMpCisgICAgICAgICAgICBpZHMgPSBbaWQocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICBzdXJ2aXZvcl9pZHMgPSBbaWQocykgZm9yIHMgaW4gbm9kZXMgaWYgaXNpbnN0YW5jZShzLCBTaW1wbGVSZXN1cnJlY3RvcildCisgICAgICAgICAgICB3cnMgPSBbd2Vha3JlZi5yZWYocykgZm9yIHMgaW4gbm9kZXNdCisgICAgICAgICAgICBkZWwgbm9kZXMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhzdXJ2aXZvcl9pZHMpCisgICAgICAgICAgICAjIFhYWCBkZXNpcmFibGU/CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9zdXJ2aXZvcnMoKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKFtTaW1wbGVDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9ob21vZ2Vub3VzX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19zdWljaWRhbChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKFtTdWljaWRhbENoYWluZWRdICogMykKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19zdWljaWRhbF9vbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfdHdvKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbU3VpY2lkYWxDaGFpbmVkXSAqIDIgKyBbU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3Jlc3VycmVjdF9vbmUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3IsIFNpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdHdvKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbigKKyAgICAgICAgICAgIFtDaGFpbmVkUmVzdXJyZWN0b3IsIFNpbXBsZUNoYWluZWQsIFN1aWNpZGFsQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3Jlc3VycmVjdF90aHJlZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yXSAqIDIgKyBbU2ltcGxlQ2hhaW5lZF0gKiAyICsgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyKQorCisKKyMgTk9URTogdGhlIHRwX2RlbCBzbG90IGlzbid0IGF1dG9tYXRpY2FsbHkgaW5oZXJpdGVkLCBzbyB3ZSBoYXZlIHRvIGNhbGwKKyMgd2l0aF90cF9kZWwoKSBmb3IgZWFjaCBpbnN0YW50aWF0ZWQgY2xhc3MuCisKK2NsYXNzIExlZ2FjeUJhc2UoU2ltcGxlQmFzZSk6CisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBEbyBub3QgaW52b2tlIHNpZGVfZWZmZWN0IGhlcmUsIHNpbmNlIHdlIGFyZSBub3cgZXhlcmNpc2luZworICAgICAgICAgICAgIyB0aGUgdHBfZGVsIHNsb3QuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgX190cF9kZWxfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIExlZ2FjeSAocHJlLVBFUCA0NDIpIGZpbmFsaXplciwgbWFwcGVkIHRvIGEgdHBfZGVsIHNsb3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi50cF9kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKK0BfdGVzdGNhcGkud2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeShMZWdhY3lCYXNlKToKKyAgICBwYXNzCisKK0BfdGVzdGNhcGkud2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeVJlc3VycmVjdG9yKExlZ2FjeUJhc2UpOgorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK0BfdGVzdGNhcGkud2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBMZWdhY3lCYXNlKToKKyAgICBwYXNzCisKKworY2xhc3MgTGVnYWN5RmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2l0aCBhIHRwX2RlbC4KKyAgICAiIiIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBuZWVkIHRvIGNsZWFuIHVwIGEgYml0IG1vcmUsIHNpbmNlIHRoZXkgY3JlYXRlCisgICAgICAgICMgdW5jb2xsZWN0YWJsZSBvYmplY3RzLgorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfbGVnYWN5KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVJlc3VycmVjdG9yKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgICMgd2Vha3JlZnMgYXJlIGNsZWFyZWQgYmVmb3JlIHRwX2RlbCBpcyBjYWxsZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9zZWxmX2N5Y2xlKHNlbGYpOgorICAgICAgICAjIFNlbGYtY3ljbGVzIHdpdGggbGVnYWN5IGZpbmFsaXplcnMgZW5kIHVwIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTGVnYWN5U2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cigpLCBOb25lKQorICAgICAgICAgICAgIyBCcmVhayB0aGUgY3ljbGUgdG8gYWxsb3cgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2MuZ2FyYmFnZVswXS5yZWYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CmluZGV4IDUwMjI5MmYuLjVjMmRjM2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQpAQCAtNDEsNiArNDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0uIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsIGIiLSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCAnZGljdCciLCBmbG9hdCwge30pCiAgICAgICAgICMgTG9uZSBzdXJyb2dhdGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBmbG9hdCwgJ1x1RDhGMCcpCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBhY2NlcHQgYWx0ZXJuYXRlIGV4cG9uZW50IG1hcmtlcnMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IDgxOTJjMzguLmUwNjI2ZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgogIiIiCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGJkMTU5ZjUuLjI5MzMwZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0zMDcsMjcgKzMwNyw0MSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQUxMLCBvbGRsb2MpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9vcHRpbWlzYXRpb25zKHNlbGYpOgorICAgICAgICB0ZXh0ID0gImFiY2RlIiAjIDUgY2hhcmFjdGVycwogCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiVzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiUuNXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJS4xMHMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJTFzIiAlIHRleHQsIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoIiU1cyIgJSB0ZXh0LCB0ZXh0KQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRm9ybWF0VGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezB9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOnN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOi41c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6LjEwc30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6MXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoInswOjVzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQogCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGV4dCAlICgpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKHRleHQuZm9ybWF0KCksIHRleHQpCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9wcmVjaXNpb24oc2VsZik6Ci0gICAgICAgIElOVF9NQVggPSAyMTQ3NDgzNjQ3CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBJTlRfTUFYCiAKICAgICAgICAgZiA9IDEuMgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChmLCAiLjBmIiksICIxIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4zZiIpLCAiMS4yMDAiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChJTlRfTUFYICsgMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJwcmVjaXNpb24gdG9vIGJpZyIpCiAKICAgICAgICAgYyA9IGNvbXBsZXgoZikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4wZiIpLCAiMSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGYsICIuM2YiKSwgIjEuMjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoYywgIi4wZiIpLCAiMSswaiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuM2YiKSwgIjEuMjAwKzAuMDAwaiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBmb3JtYXQoZiwgIi4lc2YiICUgKElOVF9NQVggKyAxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInByZWNpc2lvbiB0b28gYmlnIikKKyAgICAgICAgICAgIGZvcm1hdChjLCAiLiVzZiIgJSAoSU5UX01BWCArIDEpKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CmluZGV4IDFmYWQ5MjEuLjMzMzY1MzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5CkBAIC0xNDYsOSArMTQ2LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIDEpLCBfY29tcG9uZW50cyhGKC0wLjApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMzYwMjg3OTcwMTg5NjM5NywgMzYwMjg3OTcwMTg5NjM5NjgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoMC4xKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJ25hbicpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCdpbmYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgZmxvYXQoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnaW5mJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIEYsIGZsb2F0KCctaW5mJykpCiAKICAgICBkZWYgdGVzdEluaXRGcm9tRGVjaW1hbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTEsIDEwKSwKQEAgLTE1NywxMCArMTU4LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCczLjVlLTInKSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKERlY2ltYWwoJy4wMDBlMjAnKSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ25hbicpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ3NuYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCctaW5mJykpCisgICAgICAgICMgYnVnIDE2NDY5OiBlcnJvciB0eXBlcyBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGRlY2ltYWwgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIERlY2ltYWwoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIEYsIERlY2ltYWwoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCctaW5mJykpCiAKICAgICBkZWYgdGVzdEZyb21TdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUsIDEpLCBfY29tcG9uZW50cyhGKCI1IikpKQpAQCAtMjQ4LDE0ICsyNTAsMTUgQEAKIAogICAgICAgICBpbmYgPSAxZTEwMDAKICAgICAgICAgbmFuID0gaW5mIC0gaW5mCisgICAgICAgICMgYnVnIDE2NDY5OiBlcnJvciB0eXBlcyBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGZsb2F0IC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBpbmYgdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIE92ZXJmbG93RXJyb3IsICJDYW5ub3QgY29udmVydCBpbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgaW5mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCAtaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2Zsb2F0LCAtaW5mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBuYW4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBuYW4gdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgbmFuKQogCiAgICAgZGVmIHRlc3RGcm9tRGVjaW1hbChzZWxmKToKQEAgLTI2OCwxNyArMjcxLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSAtIEYoMSwgMTAqKjMwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbChEZWNpbWFsKCIwLiIgKyAiOSIgKiAzMCkpKQogCisgICAgICAgICMgYnVnIDE2NDY5OiBlcnJvciB0eXBlcyBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGRlY2ltYWwgLT4gaW50CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgSW5maW5pdHkgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJpbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLUluZmluaXR5IHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgLUluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiLWluZiIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBOYU4gdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJuYW4iKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgc05hTiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgVmFsdWVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9kZWNpbWFsLCBEZWNpbWFsKCJzbmFuIikpCiAKICAgICBkZWYgdGVzdExpbWl0RGVub21pbmF0b3Ioc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZyYW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9mcmFtZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ1NzgwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9mcmFtZS5weQpAQCAtMCwwICsxLDExNiBAQAoraW1wb3J0IGdjCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIENsZWFyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGZyYW1lLmNsZWFyKCkuCisgICAgIiIiCisKKyAgICBkZWYgaW5uZXIoc2VsZiwgeD01LCAqKmt3YXJncyk6CisgICAgICAgIDEvMAorCisgICAgZGVmIG91dGVyKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pbm5lcigqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBleGMgPSBlCisgICAgICAgIHJldHVybiBleGMKKworICAgIGRlZiBjbGVhcl90cmFjZWJhY2tfZnJhbWVzKHNlbGYsIHRiKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFyIGFsbCBmcmFtZXMgaW4gYSB0cmFjZWJhY2suCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRiLnRiX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgZGVmIHRlc3RfY2xlYXJfbG9jYWxzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgZXhjID0gc2VsZi5vdXRlcihjPWMpCisgICAgICAgIGRlbCBjCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgQSByZWZlcmVuY2UgdG8gYyBpcyBoZWxkIHRocm91Z2ggdGhlIGZyYW1lcworICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgIHNlbGYuY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhleGMuX190cmFjZWJhY2tfXykKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgIyBUaGUgcmVmZXJlbmNlIHdhcyByZWxlYXNlZCBieSAuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpbm5lcigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgbmV4dChnZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW5kbHkpCisgICAgICAgICMgQ2xlYXJpbmcgdGhlIGZyYW1lIGNsb3NlcyB0aGUgZ2VuZXJhdG9yCisgICAgICAgIGdlbi5naV9mcmFtZS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbmRseSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2V4ZWN1dGluZyhzZWxmKToKKyAgICAgICAgIyBBdHRlbXB0aW5nIHRvIGNsZWFyIGFuIGV4ZWN1dGluZyBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEvMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGYgPSBlLl9fdHJhY2ViYWNrX18udGJfZnJhbWUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZi5jbGVhcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2V4ZWN1dGluZ19nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZ2VuZXJhdG9yIGZyYW1lIGlzIGZvcmJpZGRlbi4KKyAgICAgICAgZW5kbHkgPSBGYWxzZQorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgbm9ubG9jYWwgZW5kbHkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGYgPSBlLl9fdHJhY2ViYWNrX18udGJfZnJhbWUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZi5mX2JhY2suY2xlYXIoKQorICAgICAgICAgICAgICAgIHlpZWxkIGYKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZW5kbHkgPSBUcnVlCisgICAgICAgIGdlbiA9IGcoKQorICAgICAgICBmID0gbmV4dChnZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW5kbHkpCisgICAgICAgICMgQ2xlYXJpbmcgdGhlIGZyYW1lIGNsb3NlcyB0aGUgZ2VuZXJhdG9yCisgICAgICAgIGYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jbGVhcl9yZWZjeWNsZXMoc2VsZik6CisgICAgICAgICMgLmNsZWFyKCkgZG9lc24ndCBsZWF2ZSBhbnkgcmVmY3ljbGUgYmVoaW5kCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGMgPSBDKCkKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICAgICAgZGVsIGMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoTm9uZSwgd3IoKSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhleGMuX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm9uZSwgd3IoKSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5IGIvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNjc2MWMuLjAwMDAwMDAKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0jIFRlc3QgdGhlIGZyb3plbiBtb2R1bGUgZGVmaW5lZCBpbiBmcm96ZW4uYy4KLQotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZG91dCwgcnVuX3VuaXR0ZXN0Ci1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBzeXMKLQotY2xhc3MgRnJvemVuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgbW9kdWxlX2F0dHJzID0gZnJvemVuc2V0KFsnX19idWlsdGluc19fJywgJ19fY2FjaGVkX18nLCAnX19kb2NfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nXSkKLSAgICBwYWNrYWdlX2F0dHJzID0gZnJvemVuc2V0KGxpc3QobW9kdWxlX2F0dHJzKSArIFsnX19wYXRoX18nXSkKLQotICAgIGRlZiB0ZXN0X2Zyb3plbihzZWxmKToKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IF9faGVsbG9fXwotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIHg6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19oZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX2hlbGxvX18uaW5pdGlhbGl6ZWQsIFRydWUpCi0gICAgICAgICAgICBleHBlY3QgPSBzZXQoc2VsZi5tb2R1bGVfYXR0cnMpCi0gICAgICAgICAgICBleHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19oZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uaW5pdGlhbGl6ZWQsIFRydWUpCi0gICAgICAgICAgICBleHBlY3QgPSBzZXQoc2VsZi5wYWNrYWdlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgaWYgbm90ICJfX3BoZWxsb19fLnNwYW0iIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZXhwZWN0LmFkZCgnc3BhbScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgZXhwZWN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLl9fcGF0aF9fLCBbX19waGVsbG9fXy5fX25hbWVfX10pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLnNwYW0KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uc3BhbSBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5zcGFtLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgc3BhbV9leHBlY3QgPSBzZXQoc2VsZi5tb2R1bGVfYXR0cnMpCi0gICAgICAgICAgICBzcGFtX2V4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fLnNwYW0pKSwgc3BhbV9leHBlY3QpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIHBoZWxsb19leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnc3BhbScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBwaGVsbG9fZXhwZWN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLmZvbwotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKLQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19faGVsbG9fXyddCi0gICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXyddCi0gICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXy5zcGFtJ10KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChGcm96ZW5UZXN0cykKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weQppbmRleCA2NGNkODBiYy4uMTU0NThhOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTIxLDYgKzIxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBIT1NULCBIT1NUdjYKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAorVElNRU9VVCA9IDMKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCiAjIFJFVFIsIExJU1QsIE5MU1QsIE1MU0QgY29tbWFuZHMgYXJlIGlzc3VlZAogUkVUUl9EQVRBID0gJ2FiY2RlMTIzNDVcclxuJyAqIDEwMDAKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBhZGRyID0gbGlzdChtYXAoaW50LCBhcmcuc3BsaXQoJywnKSkpCiAgICAgICAgIGlwID0gJyVkLiVkLiVkLiVkJyAldHVwbGUoYWRkcls6NF0pCiAgICAgICAgIHBvcnQgPSAoYWRkcls0XSAqIDI1NikgKyBhZGRyWzVdCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIApAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChUSU1FT1VUKQogICAgICAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCiAgICAgICAgICAgICBpcCA9IGlwLnJlcGxhY2UoJy4nLCAnLCcpOyBwMSA9IHBvcnQgLyAyNTY7IHAyID0gcG9ydCAlIDI1NgogICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjcgZW50ZXJpbmcgcGFzc2l2ZSBtb2RlICglcywlZCwlZCknICUoaXAsIHAxLCBwMikpCkBAIC0xNDQsNyArMTQ1LDcgQEAKICAgICBkZWYgY21kX2VwcnQoc2VsZiwgYXJnKToKICAgICAgICAgYWYsIGlwLCBwb3J0ID0gYXJnLnNwbGl0KGFyZ1swXSlbMTotMV0KICAgICAgICAgcG9ydCA9IGludChwb3J0KQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKQEAgLTE1Miw3ICsxNTMsNyBAQAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQpAQCAtMzAwLDcgKzMwMSw4IEBACiAKIGlmIHNzbCBpcyBub3QgTm9uZToKIAotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJrZXljZXJ0LnBlbSIpCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQzLnBlbSIpCisgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJweWNhY2VydC5wZW0iKQogCiAgICAgY2xhc3MgU1NMQ29ubmVjdGlvbihhc3luY29yZS5kaXNwYXRjaGVyKToKICAgICAgICAgIiIiQW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCkBAIC0zMjcsNyArMzI5LDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzQxLDcgKzM0Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICMgQW55ICJzb2NrZXQgZXJyb3IiIGNvcnJlc3BvbmRzIHRvIGEgU1NMX0VSUk9SX1NZU0NBTEwgcmV0dXJuCiAgICAgICAgICAgICAgICAgIyBmcm9tIE9wZW5TU0wncyBTU0xfc2h1dGRvd24oKSwgY29ycmVzcG9uZGluZyB0byBhCiAgICAgICAgICAgICAgICAgIyBjbG9zZWQgc29ja2V0IGNvbmRpdGlvbi4gU2VlIGFsc286CkBAIC00NjAsNyArNDYyLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTQ4OCw3ICs0OTAsNyBAQAogCiAgICAgZGVmIHRlc3RfYWxsX2Vycm9ycyhzZWxmKToKICAgICAgICAgZXhjZXB0aW9ucyA9IChmdHBsaWIuZXJyb3JfcmVwbHksIGZ0cGxpYi5lcnJvcl90ZW1wLCBmdHBsaWIuZXJyb3JfcGVybSwKLSAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgSU9FcnJvciwgRU9GRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgZnRwbGliLmVycm9yX3Byb3RvLCBmdHBsaWIuRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogICAgICAgICBmb3IgeCBpbiBleGNlcHRpb25zOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIHgoJ2V4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gYWxsX2Vycm9ycyBzZXQnKQpAQCAtNjc4LDcgKzY4MCw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQpAQCAtNjkxLDEyICs2OTMsMTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgIyBiYXNlIHRlc3QKLSAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQpAQCAtNzA0LDcgKzcwNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQogCiAgICAgICAgICMgUVVJVCBzZW50IGluc2lkZSB0aGUgd2l0aCBibG9jawotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQpAQCAtNzE0LDcgKzcxNiw3IEBACiAgICAgICAgICMgZm9yY2UgYSB3cm9uZyByZXNwb25zZSBjb2RlIHRvIGJlIHNlbnQgb24gUVVJVDogZXJyb3JfcGVybQogICAgICAgICAjIGlzIGV4cGVjdGVkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5uZXh0X3Jlc3BvbnNlID0gJzU1MCBlcnJvciBvbiBxdWl0JwpAQCAtNzM2LDcgKzczOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPShIT1NULCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzQ3LDcgKzc0OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTc4NSw3ICs3ODcsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVHY2LCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTgwMiw3ICs4MDQsNyBAQAogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCi0gICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCkBAIC04MjksNyArODMxLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgIyBlbmFibGUgVExTCiAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQpAQCAtODQzLDcgKzg0NSw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC05MDMsNyArOTA1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnRwbGliLkZUUF9UTFMsIGNlcnRmaWxlPUNFUlRGSUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKGNvbnRleHQ9Y3R4LCB0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC05MjIsNiArOTI0LDM2IEBACiAgICAgICAgIHNlbGYuY2xpZW50LmNjYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LnNvY2sudW53cmFwKQogCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKKworICAgICAgICAjIDEyNy4wLjAuMSBkb2Vzbid0IG1hdGNoIFNBTgorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgICMgZXhjZXB0aW9uIHF1aXRzIGNvbm5lY3Rpb24KKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KCJsb2NhbGhvc3QiLCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdCgibG9jYWxob3N0Iiwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKyAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICBwYXNzCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMTAxNyw4ICsxMDQ5LDE5IEBACiAgICAgICAgIGZ0cC5jbG9zZSgpCiAKIAorY2xhc3MgVGVzdE5ldHJjRGVwcmVjYXRpb24oVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCgpLCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcGVuKCcubmV0cmMnLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ0cGxpYi5OZXRyYygpCisKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsCisgICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsIFRlc3ROZXRyY0RlcHJlY2F0aW9uLAogICAgICAgICAgICAgIFRlc3RJUHY2RW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgVGVzdFRMU19GVFBDbGFzc01peGluLCBUZXN0VExTX0ZUUENsYXNzXQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGM4ZWQ4MzAuLjUwOTRmN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC03LDYgKzcsMTEgQEAKICAgICBkZWYgaW5uZXJfZnVuY3Rpb24oKToKICAgICAgICAgY2xhc3MgTG9jYWxDbGFzczoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2xvYmFsIGlubmVyX2dsb2JhbF9mdW5jdGlvbgorICAgICAgICBkZWYgaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBkZWYgaW5uZXJfZnVuY3Rpb24yKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGlubmVyX2Z1bmN0aW9uMgogICAgICAgICByZXR1cm4gTG9jYWxDbGFzcwogICAgIHJldHVybiBsYW1iZGE6IGlubmVyX2Z1bmN0aW9uCiAKQEAgLTExNiw2ICsxMjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9mdW5jdGlvbigpKCkoKS5fX3F1YWxuYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbF9mdW5jdGlvbi48bG9jYWxzPi5pbm5lcl9mdW5jdGlvbi48bG9jYWxzPi5Mb2NhbENsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24uX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24oKS5fX3F1YWxuYW1lX18sICdpbm5lcl9nbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24yJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdjJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX3F1YWxuYW1lX18sICdjJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdkJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQppbmRleCBkYjFlOTM0Li4zOGM5NzEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQpAQCAtMSw1NyArMSw1NSBAQAotaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGFiYwogaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IHBlcm11dGF0aW9ucwogaW1wb3J0IHBpY2tsZQogZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIAotQHN0YXRpY21ldGhvZAotZGVmIFB5dGhvblBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgotICAgICdQdXJlIFB5dGhvbiBhcHByb3hpbWF0aW9uIG9mIHBhcnRpYWwoKScKLSAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKLSAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKLSAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKLSAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQotICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKLSAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCi0gICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCi0gICAgcmV0dXJuIG5ld2Z1bmMKK2ltcG9ydCBmdW5jdG9vbHMKKworcHlfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBibG9ja2VkPVsnX2Z1bmN0b29scyddKQorY19mdW5jdG9vbHMgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ2Z1bmN0b29scycsIGZyZXNoPVsnX2Z1bmN0b29scyddKQorCitkZWNpbWFsID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdkZWNpbWFsJywgZnJlc2g9WydfZGVjaW1hbCddKQorCiAKIGRlZiBjYXB0dXJlKCphcmdzLCAqKmt3KToKICAgICAiIiJjYXB0dXJlIGFsbCBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyIiIgogICAgIHJldHVybiBhcmdzLCBrdwogCisKIGRlZiBzaWduYXR1cmUocGFydCk6CiAgICAgIiIiIHJldHVybiB0aGUgc2lnbmF0dXJlIG9mIGEgcGFydGlhbCBvYmplY3QgIiIiCiAgICAgcmV0dXJuIChwYXJ0LmZ1bmMsIHBhcnQuYXJncywgcGFydC5rZXl3b3JkcywgcGFydC5fX2RpY3RfXykKIAotY2xhc3MgVGVzdFBhcnRpYWwodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgdGhldHlwZSA9IGZ1bmN0b29scy5wYXJ0aWFsCitjbGFzcyBUZXN0UGFydGlhbDoKIAogICAgIGRlZiB0ZXN0X2Jhc2ljX2V4YW1wbGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKHApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMywgNCwgYj0zMCwgYz00MCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgxLCAyLCAzLCA0KSwgZGljdChhPTEwLCBiPTMwLCBjPTQwKSkpCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUobWFwLCBsYW1iZGEgeDogeCoxMCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChtYXAsIGxhbWJkYSB4OiB4KjEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocChbMSwyLDMsNF0pKSwgWzEwLCAyMCwgMzAsIDQwXSkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6Ci0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQogICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHJlYWRhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mdW5jLCBjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXJncywgKDEsIDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2V5d29yZHMsIGRpY3QoYT0xMCwgYj0yMCkpCiAgICAgICAgICMgYXR0cmlidXRlcyBzaG91bGQgbm90IGJlIHdyaXRhYmxlCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYudGhldHlwZSwgdHlwZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYucGFydGlhbCwgdHlwZSk6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdmdW5jJywgbWFwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2FyZ3MnLCAoMSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAna2V5d29yZHMnLCBkaWN0KGE9MSwgYj0yKSkKIAotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGhleCkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChoZXgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGRlbCBwLl9fZGljdF9fCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CkBAIC02MCw5ICs1OCw5IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoJ3BhcnRpYWwgb2JqZWN0IGFsbG93ZWQgX19kaWN0X18gdG8gYmUgZGVsZXRlZCcpCiAKICAgICBkZWYgdGVzdF9hcmd1bWVudF9jaGVja2luZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZXR5cGUpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGFydGlhbCkgICAgICMgbmVlZCBhdCBsZWFzdCBhIGZ1bmMgYXJnCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudGhldHlwZSgyKSgpCisgICAgICAgICAgICBzZWxmLnBhcnRpYWwoMikoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgpAQCAtNzMsNyArNzEsNyBAQAogICAgICAgICBkZWYgZnVuYyhhPTEwLCBiPTIwKToKICAgICAgICAgICAgIHJldHVybiBhCiAgICAgICAgIGQgPSB7J2EnOjN9Ci0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoZnVuYywgYT01KQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGZ1bmMsIGE9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCoqZCksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydhJzozfSkKICAgICAgICAgcChiPTcpCkBAIC04MiwyMCArODAsMjAgQEAKICAgICBkZWYgdGVzdF9hcmdfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3IgemVybyBhcmdzIGluIGVpdGhlciBwYXJ0aWFsCiAgICAgICAgICMgb2JqZWN0IG9yIHRoZSBjYWxsZXIKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDEsMiksICgoMSwyKSwge30pKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoMSwyKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoMyw0KSwgKCgxLDIsMyw0KSwge30pKQogCiAgICAgZGVmIHRlc3Rfa3dfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIHNwZWNpYWwgY29kZSBwYXRocyBmb3Igbm8ga2V5d29yZCBhcmdzIGluCiAgICAgICAgICMgZWl0aGVyIHRoZSBwYXJ0aWFsIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocChhPTEpLCAoKCksIHsnYSc6MX0pKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCBhPTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHsnYSc6MX0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYj0yKSwgKCgpLCB7J2EnOjEsICdiJzoyfSkpCiAgICAgICAgICMga2V5d29yZCBhcmdzIGluIHRoZSBjYWxsIG92ZXJyaWRlIHRob3NlIGluIHRoZSBwYXJ0aWFsIG9iamVjdApAQCAtMTA0LDcgKzEwMiw3IEBACiAgICAgZGVmIHRlc3RfcG9zaXRpb25hbChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYXJncyBpbiBbKCksICgwLCksICgwLDEpLCAoMCwxLDIpLCAoMCwxLDIsMyldOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgICAgICBleHBlY3RlZCA9IGFyZ3MgKyAoJ3gnLCkKICAgICAgICAgICAgIGdvdCwgZW1wdHkgPSBwKCd4JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCA9PSBnb3QgYW5kIGVtcHR5ID09IHt9KQpAQCAtMTEyLDE0ICsxMTAsMTQgQEAKICAgICBkZWYgdGVzdF9rZXl3b3JkKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CiAgICAgICAgIGZvciBhIGluIFsnYScsIDAsIE5vbmUsIDMuNV06Ci0gICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIGE9YSkKKyAgICAgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT1hKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOmEsJ3gnOk5vbmV9CiAgICAgICAgICAgICBlbXB0eSwgZ290ID0gcCh4PU5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPT0gZ290IGFuZCBlbXB0eSA9PSAoKSkKIAogICAgIGRlZiB0ZXN0X25vX3NpZGVfZWZmZWN0cyhzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHNpZGUgZWZmZWN0cyB0aGF0IGFmZmVjdCBzdWJzZXF1ZW50IGNhbGxzCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgMCwgYT0xKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDAsIGE9MSkKICAgICAgICAgYXJnczEsIGt3MSA9IHAoMSwgYj0yKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnczEgPT0gKDAsMSkgYW5kIGt3MSA9PSB7J2EnOjEsJ2InOjJ9KQogICAgICAgICBhcmdzMiwga3cyID0gcCgpCkBAIC0xMjgsMTMgKzEyNiwxMyBAQAogICAgIGRlZiB0ZXN0X2Vycm9yX3Byb3BhZ2F0aW9uKHNlbGYpOgogICAgICAgICBkZWYgZih4LCB5KToKICAgICAgICAgICAgIHggLyB5Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgMSwgMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgMSksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiksIDEsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnRoZXR5cGUoZiwgeT0wKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmLCAxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmLCAxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmKSwgMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYucGFydGlhbChmLCB5PTApLCAxKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShpbnQsIGJhc2U9MTYpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoaW50LCBiYXNlPTE2KQogICAgICAgICBwID0gcHJveHkoZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZ1bmMsIHAuZnVuYykKICAgICAgICAgZiA9IE5vbmUKQEAgLTE0MiwzOSArMTQwLDQ2IEBACiAKICAgICBkZWYgdGVzdF93aXRoX2JvdW5kX2FuZF91bmJvdW5kX21ldGhvZHMoc2VsZik6CiAgICAgICAgIGRhdGEgPSBsaXN0KG1hcChzdHIsIHJhbmdlKDEwKSkpCi0gICAgICAgIGpvaW4gPSBzZWxmLnRoZXR5cGUoc3RyLmpvaW4sICcnKQorICAgICAgICBqb2luID0gc2VsZi5wYXJ0aWFsKHN0ci5qb2luLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCi0gICAgICAgIGpvaW4gPSBzZWxmLnRoZXR5cGUoJycuam9pbikKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbCgnJy5qb2luKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oZGF0YSksICcwMTIzNDU2Nzg5JykKIAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RQYXJ0aWFsQyhUZXN0UGFydGlhbCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBwYXJ0aWFsID0gY19mdW5jdG9vbHMucGFydGlhbAorCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgYXJncyA9IChvYmplY3QoKSwgb2JqZWN0KCkpCiAgICAgICAgIGFyZ3NfcmVwciA9ICcsICcuam9pbihyZXByKGEpIGZvciBhIGluIGFyZ3MpCi0gICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQorICAgICAgICAja3dhcmdzID0geydhJzogb2JqZWN0KCksICdiJzogb2JqZWN0KCl9CisgICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpfQogICAgICAgICBrd2FyZ3NfcmVwciA9ICcsICcuam9pbigiJXM9JXIiICUgKGssIHYpIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpKQotICAgICAgICBpZiBzZWxmLnRoZXR5cGUgaXMgZnVuY3Rvb2xzLnBhcnRpYWw6CisgICAgICAgIGlmIHNlbGYucGFydGlhbCBpcyBjX2Z1bmN0b29scy5wYXJ0aWFsOgogICAgICAgICAgICAgbmFtZSA9ICdmdW5jdG9vbHMucGFydGlhbCcKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnRoZXR5cGUuX19uYW1lX18KKyAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhcnRpYWwuX19uYW1lX18KIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSknLmZvcm1hdChuYW1lLCBjYXB0dXJlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgKmFyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGFyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICoqa3dhcmdzKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICoqa3dhcmdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBrd2FyZ3NfcmVwciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKIAotICAgICAgICBmID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIsIGt3YXJnc19yZXByKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCiAgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQogICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCkBAIC0xOTMsMjggKzE5OCwxNDAgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9CiAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUob2JqZWN0KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKG9iamVjdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAibmV3IHN0eWxlIGdldGFyZ3MgZm9ybWF0IGJ1dCBhcmd1bWVudCBpcyBub3QgYSB0dXBsZSIsCiAgICAgICAgICAgICAgICAgZi5fX3NldHN0YXRlX18sIEJhZFNlcXVlbmNlKCkpCiAKLWNsYXNzIFBhcnRpYWxTdWJjbGFzcyhmdW5jdG9vbHMucGFydGlhbCk6Ci0gICAgcGFzcwogCi1jbGFzcyBUZXN0UGFydGlhbFN1YmNsYXNzKFRlc3RQYXJ0aWFsKToKK2NsYXNzIFRlc3RQYXJ0aWFsUHkoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBwYXJ0aWFsID0gc3RhdGljbWV0aG9kKHB5X2Z1bmN0b29scy5wYXJ0aWFsKQogCi0gICAgdGhldHlwZSA9IFBhcnRpYWxTdWJjbGFzcwogCi1jbGFzcyBUZXN0UHl0aG9uUGFydGlhbChUZXN0UGFydGlhbCk6CitpZiBjX2Z1bmN0b29sczoKKyAgICBjbGFzcyBQYXJ0aWFsU3ViY2xhc3MoY19mdW5jdG9vbHMucGFydGlhbCk6CisgICAgICAgIHBhc3MKIAotICAgIHRoZXR5cGUgPSBQeXRob25QYXJ0aWFsCiAKLSAgICAjIHRoZSBweXRob24gdmVyc2lvbiBoYXNuJ3QgYSBuaWNlIHJlcHIKLSAgICBkZWYgdGVzdF9yZXByKHNlbGYpOiBwYXNzCitAdW5pdHRlc3Quc2tpcFVubGVzcyhjX2Z1bmN0b29scywgJ3JlcXVpcmVzIHRoZSBDIF9mdW5jdG9vbHMgbW9kdWxlJykKK2NsYXNzIFRlc3RQYXJ0aWFsQ1N1YmNsYXNzKFRlc3RQYXJ0aWFsQyk6CisgICAgaWYgY19mdW5jdG9vbHM6CisgICAgICAgIHBhcnRpYWwgPSBQYXJ0aWFsU3ViY2xhc3MKIAotICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGlzbid0IHBpY2tsYWJsZQotICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKTogcGFzcwotICAgIGRlZiB0ZXN0X3NldHN0YXRlX3JlZmNvdW50KHNlbGYpOiBwYXNzCisKK2NsYXNzIFRlc3RQYXJ0aWFsTWV0aG9kKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgbm90aGluZyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUpCisgICAgICAgIHBvc2l0aW9uYWwgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjYXB0dXJlLCAxKQorICAgICAgICBrZXl3b3JkcyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUsIGE9MikKKyAgICAgICAgYm90aCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUsIDMsIGI9NCkKKworICAgICAgICBuZXN0ZWQgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChwb3NpdGlvbmFsLCA1KQorCisgICAgICAgIG92ZXJfcGFydGlhbCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGZ1bmN0b29scy5wYXJ0aWFsKGNhcHR1cmUsIGM9NiksIDcpCisKKyAgICAgICAgc3RhdGljID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2Qoc3RhdGljbWV0aG9kKGNhcHR1cmUpLCA4KQorICAgICAgICBjbHMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChjbGFzc21ldGhvZChjYXB0dXJlKSwgZD05KQorCisgICAgYSA9IEEoKQorCisgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZygpLCAoKHNlbGYuYSwpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoNSksICgoc2VsZi5hLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKGM9NiksICgoc2VsZi5hLCksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyg1LCBjPTYpLCAoKHNlbGYuYSwgNSksIHsnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKCksICgoc2VsZi5hLCAxKSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKDUpLCAoKHNlbGYuYSwgMSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbChjPTYpLCAoKHNlbGYuYSwgMSksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEucG9zaXRpb25hbCg1LCBjPTYpLCAoKHNlbGYuYSwgMSwgNSksIHsnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3JkcygpLCAoKHNlbGYuYSwpLCB7J2EnOiAyfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKDUpLCAoKHNlbGYuYSwgNSksIHsnYSc6IDJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoYz02KSwgKChzZWxmLmEsKSwgeydhJzogMiwgJ2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKDUsIGM9NiksICgoc2VsZi5hLCA1KSwgeydhJzogMiwgJ2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aCgpLCAoKHNlbGYuYSwgMyksIHsnYic6IDR9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aCg1KSwgKChzZWxmLmEsIDMsIDUpLCB7J2InOiA0fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmJvdGgoYz02KSwgKChzZWxmLmEsIDMpLCB7J2InOiA0LCAnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aCg1LCBjPTYpLCAoKHNlbGYuYSwgMywgNSksIHsnYic6IDQsICdjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLmJvdGgoc2VsZi5hLCA1LCBjPTYpLCAoKHNlbGYuYSwgMywgNSksIHsnYic6IDQsICdjJzogNn0pKQorCisgICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoKSwgKChzZWxmLmEsIDEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCg2KSwgKChzZWxmLmEsIDEsIDUsIDYpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZChkPTcpLCAoKHNlbGYuYSwgMSwgNSksIHsnZCc6IDd9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKDYsIGQ9NyksICgoc2VsZi5hLCAxLCA1LCA2KSwgeydkJzogN30pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLm5lc3RlZChzZWxmLmEsIDYsIGQ9NyksICgoc2VsZi5hLCAxLCA1LCA2KSwgeydkJzogN30pKQorCisgICAgZGVmIHRlc3Rfb3Zlcl9wYXJ0aWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoKSwgKChzZWxmLmEsIDcpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbCg1KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbChkPTgpLCAoKHNlbGYuYSwgNyksIHsnYyc6IDYsICdkJzogOH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5vdmVyX3BhcnRpYWwoNSwgZD04KSwgKChzZWxmLmEsIDcsIDUpLCB7J2MnOiA2LCAnZCc6IDh9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5vdmVyX3BhcnRpYWwoc2VsZi5hLCA1LCBkPTgpLCAoKHNlbGYuYSwgNywgNSksIHsnYyc6IDYsICdkJzogOH0pKQorCisgICAgZGVmIHRlc3RfYm91bmRfbWV0aG9kX2ludHJvc3BlY3Rpb24oc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYuYQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5ib3RoLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLm5lc3RlZC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5vdmVyX3BhcnRpYWwuX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmouY2xzLl9fc2VsZl9fLCBzZWxmLkEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5BLmNscy5fX3NlbGZfXywgc2VsZi5BKQorCisgICAgZGVmIHRlc3RfdW5ib3VuZF9tZXRob2RfcmV0cmlldmFsKHNlbGYpOgorICAgICAgICBvYmogPSBzZWxmLkEKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5ib3RoLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5uZXN0ZWQsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLm92ZXJfcGFydGlhbCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmouc3RhdGljLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHNlbGYuYS5zdGF0aWMsICJfX3NlbGZfXyIpKQorCisgICAgZGVmIHRlc3RfZGVzY3JpcHRvcnMoc2VsZik6CisgICAgICAgIGZvciBvYmogaW4gW3NlbGYuQSwgc2VsZi5hXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmopOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYygpLCAoKDgsKSwge30pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYyg1KSwgKCg4LCA1KSwge30pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYyhkPTgpLCAoKDgsKSwgeydkJzogOH0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnN0YXRpYyg1LCBkPTgpLCAoKDgsIDUpLCB7J2QnOiA4fSkpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoKSwgKChzZWxmLkEsKSwgeydkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyg1KSwgKChzZWxmLkEsIDUpLCB7J2QnOiA5fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKGM9OCksICgoc2VsZi5BLCksIHsnYyc6IDgsICdkJzogOX0pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscyg1LCBjPTgpLCAoKHNlbGYuQSwgNSksIHsnYyc6IDgsICdkJzogOX0pKQorCisgICAgZGVmIHRlc3Rfb3ZlcnJpZGluZ19rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoYT0zKSwgKChzZWxmLmEsKSwgeydhJzogM30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuQS5rZXl3b3JkcyhzZWxmLmEsIGE9MyksICgoc2VsZi5hLCksIHsnYSc6IDN9KSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQihvYmplY3QpOgorICAgICAgICAgICAgICAgIG1ldGhvZCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKE5vbmUsIDEpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodmFycyhzZWxmLkEpWydib3RoJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmdW5jdG9vbHMucGFydGlhbG1ldGhvZCh7fSwgMywgYj00KScuZm9ybWF0KGNhcHR1cmUpKQorCisgICAgZGVmIHRlc3RfYWJzdHJhY3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEFic3RyYWN0KGFiYy5BQkNNZXRhKToKKworICAgICAgICAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICAgICAgZGVmIGFkZChzZWxmLCB4LCB5KToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGFkZDUgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChhZGQsIDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEFic3RyYWN0LmFkZC5fX2lzYWJzdHJhY3RtZXRob2RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEFic3RyYWN0LmFkZDUuX19pc2Fic3RyYWN0bWV0aG9kX18pCisKKyAgICAgICAgZm9yIGZ1bmMgaW4gW3NlbGYuQS5zdGF0aWMsIHNlbGYuQS5jbHMsIHNlbGYuQS5vdmVyX3BhcnRpYWwsIHNlbGYuQS5uZXN0ZWQsIHNlbGYuQS5ib3RoXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2V0YXR0cihmdW5jLCAnX19pc2Fic3RyYWN0bWV0aG9kX18nLCBGYWxzZSkpCisKIAogY2xhc3MgVGVzdFVwZGF0ZVdyYXBwZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMjMsMTkgKzM0MCwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQ9ZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUyk6CiAgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyB3ZXJlIGFzc2lnbmVkCiAgICAgICAgIGZvciBuYW1lIGluIGFzc2lnbmVkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIod3JhcHBlciwgbmFtZSkgaXMgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSwgZ2V0YXR0cih3cmFwcGVkLCBuYW1lKSkKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgdXBkYXRlZAogICAgICAgICBmb3IgbmFtZSBpbiB1cGRhdGVkOgogICAgICAgICAgICAgd3JhcHBlcl9hdHRyID0gZ2V0YXR0cih3cmFwcGVyLCBuYW1lKQogICAgICAgICAgICAgd3JhcHBlZF9hdHRyID0gZ2V0YXR0cih3cmFwcGVkLCBuYW1lKQogICAgICAgICAgICAgZm9yIGtleSBpbiB3cmFwcGVkX2F0dHI6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gIl9fZGljdF9fIiBhbmQga2V5ID09ICJfX3dyYXBwZWRfXyI6CisgICAgICAgICAgICAgICAgICAgICMgX193cmFwcGVkX18gaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIHVwZGF0ZSBjb2RlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVkX2F0dHJba2V5XSwgd3JhcHBlcl9hdHRyW2tleV0pCisgICAgICAgICMgQ2hlY2sgX193cmFwcGVkX18KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVkKQorCiAKICAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZihhOidUaGlzIGlzIGEgbmV3IGFubm90YXRpb24nKToKICAgICAgICAgICAgICIiIlRoaXMgaXMgYSB0ZXN0IiIiCiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGYuYXR0ciA9ICdUaGlzIGlzIGFsc28gYSB0ZXN0JworICAgICAgICBmLl9fd3JhcHBlZF9fID0gIlRoaXMgaXMgYSBiYWxkIGZhY2VkIGxpZSIKICAgICAgICAgZGVmIHdyYXBwZXIoYjonVGhpcyBpcyB0aGUgcHJpb3IgYW5ub3RhdGlvbicpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZikKQEAgLTMyMiw2ICs0NDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlci5fX2RvY19fLnN0YXJ0c3dpdGgoJ21heCgnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fYW5ub3RhdGlvbnNfXywge30pCiAKKwogY2xhc3MgVGVzdFdyYXBzKFRlc3RVcGRhdGVXcmFwcGVyKToKIAogICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CkBAIC0zMjksMTQgKzQ1NCwxNSBAQAogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIGYuX193cmFwcGVkX18gPSAiVGhpcyBpcyBzdGlsbCBhIGJhbGQgZmFjZWQgbGllIgogICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGYpCiAgICAgICAgIGRlZiB3cmFwcGVyKCk6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQogICAgICAgICByZXR1cm4gd3JhcHBlciwgZgogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIHdyYXBwZXIsIGYgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdmJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fcXVhbG5hbWVfXywgZi5fX3F1YWxuYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhbHNvIGEgdGVzdCcpCkBAIC0zODIsNiArNTA4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGEgZGlmZmVyZW50IHRlc3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuZGljdF9hdHRyLCBmLmRpY3RfYXR0cikKIAorCiBjbGFzcyBUZXN0UmVkdWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmdW5jID0gZnVuY3Rvb2xzLnJlZHVjZQogCkBAIC00NjIsMjQgKzU4OSwyOSBAQAogICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoYWRkLCBkKSwgIiIuam9pbihkLmtleXMoKSkpCiAKLWNsYXNzIFRlc3RDbXBUb0tleSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFRlc3RDbXBUb0tleToKIAogICAgIGRlZiB0ZXN0X2NtcF90b19rZXkoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSgzKSwga2V5KDMpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoa2V5KDMpLCBrZXkoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGtleSgzKSwga2V5KDMpKQorCiAgICAgICAgIGRlZiBjbXAyKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIGludCh4KSAtIGludCh5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAyKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoNC4wKSwga2V5KCc0JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhrZXkoMiksIGtleSgnMzUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoa2V5KDIpLCBrZXkoJzM1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5KDIpLCBrZXkoJzM1JykpCiAKICAgICBkZWYgdGVzdF9jbXBfdG9fa2V5X2FyZ3VtZW50cyhzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXA9Y21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KG9iaj0zKSwga2V5KG9iaj0zKSkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGtleShvYmo9MyksIGtleShvYmo9MSkpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpKToKQEAgLTQ4NywxMCArNjE5LDEwIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpKToKICAgICAgICAgICAgIDEgPCBrZXkoMykgICAgIyBsaHMgaXMgbm90IGEgSyBvYmplY3QKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoKSAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncworICAgICAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KCkgICAgICAgICAgICAgIyB0b28gZmV3IGFyZ3MKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSwgTm9uZSkgICAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxLCBOb25lKSAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoY21wMSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAga2V5KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CkBAIC00OTksNyArNjMxLDcgQEAKICAgICBkZWYgdGVzdF9iYWRfY21wKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDEpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIGtleSgzKSA+IGtleSgxKQogCkBAIC01MTQsMTMgKzY0NiwxMyBAQAogICAgIGRlZiB0ZXN0X29ial9maWVsZChzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXA9Y21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KG15Y21wPWNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDUwKS5vYmosIDUwKQogCiAgICAgZGVmIHRlc3Rfc29ydF9pbnQoc2VsZik6CiAgICAgICAgIGRlZiBteWNtcCh4LCB5KToKICAgICAgICAgICAgIHJldHVybiB5IC0geAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChyYW5nZSg1KSwga2V5PWZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKSksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9c2VsZi5jbXBfdG9fa2V5KG15Y21wKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWzQsIDMsIDIsIDEsIDBdKQogCiAgICAgZGVmIHRlc3Rfc29ydF9pbnRfc3RyKHNlbGYpOgpAQCAtNTI4LDE4ICs2NjAsMjkgQEAKICAgICAgICAgICAgIHgsIHkgPSBpbnQoeCksIGludCh5KQogICAgICAgICAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCiAgICAgICAgIHZhbHVlcyA9IFs1LCAnMycsIDcsIDIsICcwJywgJzEnLCA0LCAnMTAnLCAxXQotICAgICAgICB2YWx1ZXMgPSBzb3J0ZWQodmFsdWVzLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKQorICAgICAgICB2YWx1ZXMgPSBzb3J0ZWQodmFsdWVzLCBrZXk9c2VsZi5jbXBfdG9fa2V5KG15Y21wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbaW50KHZhbHVlKSBmb3IgdmFsdWUgaW4gdmFsdWVzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNCwgNSwgNywgMTBdKQogCiAgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKICAgICAgICAgZGVmIG15Y21wKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHkgLSB4Ci0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KG15Y21wKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXApCiAgICAgICAgIGsgPSBrZXkoMTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgaykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGssIGNvbGxlY3Rpb25zLkhhc2hhYmxlKQogCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdENtcFRvS2V5QyhUZXN0Q21wVG9LZXksIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgY21wX3RvX2tleSA9IGNfZnVuY3Rvb2xzLmNtcF90b19rZXkKKworCitjbGFzcyBUZXN0Q21wVG9LZXlQeShUZXN0Q21wVG9LZXksIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbXBfdG9fa2V5ID0gc3RhdGljbWV0aG9kKHB5X2Z1bmN0b29scy5jbXBfdG9fa2V5KQorCisKIGNsYXNzIFRlc3RUb3RhbE9yZGVyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2x0KHNlbGYpOgpAQCAtNTU3LDYgKzcwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgxKSA+IEEoMikpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19sZShzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNTczLDYgKzcxNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgxKSA+PSBBKDIpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ3Qoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTU4OSw2ICs3MzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMikgPCBBKDEpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ2Uoc2VsZik6CiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKQEAgLTYwNSw2ICs3NTEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEEoMikgPD0gQSgxKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX25vX292ZXJ3cml0ZShzZWxmKToKICAgICAgICAgIyBuZXcgbWV0aG9kcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBleGlzdGluZwpAQCAtNjI0LDI3ICs3NzEsMTE4IEBACiAgICAgICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2J1Z18xMDA0MihzZWxmKToKKyAgICBkZWYgdGVzdF90eXBlX2Vycm9yX3doZW5fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICAjIGJ1ZyAxMDA0MjsgZW5zdXJlIHN0YWNrIG92ZXJmbG93IGRvZXMgbm90IG9jY3VyCisgICAgICAgICMgd2hlbiBkZWNvcmF0ZWQgdHlwZXMgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKLSAgICAgICAgY2xhc3MgVGVzdFRPOgorICAgICAgICBjbGFzcyBJbXBsZW1lbnRzTGVzc1RoYW46CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgogICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW4pOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW4pOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCi0gICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIFRlc3RUTyg4KSA8PSAoKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgSW1wbGVtZW50c0dyZWF0ZXJUaGFuOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW4pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDw9IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IDEiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigtMSkgPCAxCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgTEUiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbigwKSA8IEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCBHVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKDEpIDwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDEpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIDw9IExUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDIpIDw9IEltcGxlbWVudHNMZXNzVGhhbigyKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSA8PSBHRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygzKSA8PSBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDMpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdUID4gR0UiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbig0KSA+IEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNCkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR1QgPiBMVCIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDUpID4gSW1wbGVtZW50c0xlc3NUaGFuKDUpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFID49IEdUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDYpID49IEltcGxlbWVudHNHcmVhdGVyVGhhbig2KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHRSA+PSBMRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg3KSA+PSBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDcpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFIHdoZW4gZXF1YWwiKToKKyAgICAgICAgICAgIGEgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOCkKKyAgICAgICAgICAgIGIgPSBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQoOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBhID49IGIKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgd2hlbiBlcXVhbCIpOgorICAgICAgICAgICAgYSA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg5KQorICAgICAgICAgICAgYiA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGEgPD0gYgogCiBjbGFzcyBUZXN0TFJVKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2xydShzZWxmKToKICAgICAgICAgZGVmIG9yaWcoeCwgeSk6Ci0gICAgICAgICAgICByZXR1cm4gMyp4K3kKKyAgICAgICAgICAgIHJldHVybiAzICogeCArIHkKICAgICAgICAgZiA9IGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0yMCkob3JpZykKICAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4c2l6ZSwgMjApCkBAIC03NDksNyArOTg3LDcgQEAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1c2VyX2Z1bmN0aW9uIGV4Y2VwdGlvbnMgZ2V0IHBhc3NlZCB0aHJvdWdoIHdpdGhvdXQKICAgICAgICAgIyBjcmVhdGluZyBhIGhhcmQtdG8tcmVhZCBjaGFpbmVkIGV4Y2VwdGlvbi4KICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMxNzcKLSAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEwMCk6CisgICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMjgpOgogICAgICAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZSkKICAgICAgICAgICAgIGRlZiBmdW5jKGkpOgogICAgICAgICAgICAgICAgIHJldHVybiAnYWJjJ1tpXQpAQCAtNzYyLDcgKzEwMDAsNyBAQAogICAgICAgICAgICAgICAgIGZ1bmMoMTUpCiAKICAgICBkZWYgdGVzdF9scnVfd2l0aF90eXBlcyhzZWxmKToKLSAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEwMCk6CisgICAgICAgIGZvciBtYXhzaXplIGluIChOb25lLCAxMjgpOgogICAgICAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT1tYXhzaXplLCB0eXBlZD1UcnVlKQogICAgICAgICAgICAgZGVmIHNxdWFyZSh4KToKICAgICAgICAgICAgICAgICByZXR1cm4geCAqIHgKQEAgLTc3Nyw2ICsxMDE1LDM2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNxdWFyZS5jYWNoZV9pbmZvKCkuaGl0cywgNCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3F1YXJlLmNhY2hlX2luZm8oKS5taXNzZXMsIDQpCiAKKyAgICBkZWYgdGVzdF9scnVfd2l0aF9rZXl3b3JkX2FyZ3Moc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICAgICAgZGVmIGZpYihuKToKKyAgICAgICAgICAgIGlmIG4gPCAyOgorICAgICAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgICAgICByZXR1cm4gZmliKG49bi0xKSArIGZpYihuPW4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFtmaWIobj1udW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoMTYpXSwKKyAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMF0KKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTI4LCBtaXNzZXM9MTYsIG1heHNpemU9MTI4LCBjdXJyc2l6ZT0xNikpCisgICAgICAgIGZpYi5jYWNoZV9jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MCwgbWlzc2VzPTAsIG1heHNpemU9MTI4LCBjdXJyc2l6ZT0wKSkKKworICAgIGRlZiB0ZXN0X2xydV93aXRoX2tleXdvcmRfYXJnc19tYXhzaXplX25vbmUoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9Tm9uZSkKKyAgICAgICAgZGVmIGZpYihuKToKKyAgICAgICAgICAgIGlmIG4gPCAyOgorICAgICAgICAgICAgICAgIHJldHVybiBuCisgICAgICAgICAgICByZXR1cm4gZmliKG49bi0xKSArIGZpYihuPW4tMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZmliKG49bnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDE2KV0sCisgICAgICAgICAgICBbMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3LCA2MTBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTI4LCBtaXNzZXM9MTYsIG1heHNpemU9Tm9uZSwgY3VycnNpemU9MTYpKQorICAgICAgICBmaWIuY2FjaGVfY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpYi5jYWNoZV9pbmZvKCksCisgICAgICAgICAgICBmdW5jdG9vbHMuX0NhY2hlSW5mbyhoaXRzPTAsIG1pc3Nlcz0wLCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTApKQorCiAgICAgZGVmIHRlc3RfbmVlZF9mb3JfcmxvY2soc2VsZik6CiAgICAgICAgICMgVGhpcyB3aWxsIGRlYWRsb2NrIG9uIGFuIExSVSBjYWNoZSB0aGF0IHVzZXMgYSByZWd1bGFyIGxvY2sKIApAQCAtODAyLDE3ICsxMDcwLDQ5NCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZUVxKDIpKSAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBjb3JyZWN0IHJldHVybiB2YWx1ZQogCiAKK2NsYXNzIFRlc3RTaW5nbGVEaXNwYXRjaCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc2ltcGxlX292ZXJsb2FkcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBkZWYgZ19pbnQoaSk6CisgICAgICAgICAgICByZXR1cm4gImludGVnZXIiCisgICAgICAgIGcucmVnaXN0ZXIoaW50LCBnX2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKCJzdHIiKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoMSksICJpbnRlZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKFsxLDIsM10pLCAiYmFzZSIpCisKKyAgICBkZWYgdGVzdF9tcm8oc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgRChDLCBCKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdfQShhKToKKyAgICAgICAgICAgIHJldHVybiAiQSIKKyAgICAgICAgZGVmIGdfQihiKToKKyAgICAgICAgICAgIHJldHVybiAiQiIKKyAgICAgICAgZy5yZWdpc3RlcihBLCBnX0EpCisgICAgICAgIGcucmVnaXN0ZXIoQiwgZ19CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQSgpKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQigpKSwgIkIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoQygpKSwgIkEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoRCgpKSwgIkIiKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBnLnJlZ2lzdGVyKGludCkKKyAgICAgICAgZGVmIGdfaW50KGkpOgorICAgICAgICAgICAgcmV0dXJuICJpbnQgJXMiICUgKGksKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoIiIpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygxMiksICJpbnQgMTIiKQorICAgICAgICBzZWxmLmFzc2VydElzKGcuZGlzcGF0Y2goaW50KSwgZ19pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZy5kaXNwYXRjaChvYmplY3QpLCBnLmRpc3BhdGNoKHN0cikpCisgICAgICAgICMgTm90ZTogaW4gdGhlIGFzc2VydCBhYm92ZSB0aGlzIGlzIG5vdCBnLgorICAgICAgICAjIEBzaW5nbGVkaXNwYXRjaCByZXR1cm5zIHRoZSB3cmFwcGVyLgorCisgICAgZGVmIHRlc3Rfd3JhcHBpbmdfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgIlNpbXBsZSB0ZXN0IgorICAgICAgICAgICAgcmV0dXJuICJUZXN0IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcuX19uYW1lX18sICJnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fZG9jX18sICJTaW1wbGUgdGVzdCIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhkZWNpbWFsLCAncmVxdWlyZXMgX2RlY2ltYWwnKQorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2NfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb24pCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gb2JqLmFyZ3MKKyAgICAgICAgc3VibiA9IGRlY2ltYWwuU3Vibm9ybWFsKCJFeHBvbmVudCA8IEVtaW4iKQorICAgICAgICBybmQgPSBkZWNpbWFsLlJvdW5kZWQoIk51bWJlciBnb3Qgcm91bmRlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgKCJFeHBvbmVudCA8IEVtaW4iLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5TdWJub3JtYWwpCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gIlRvbyBzbWFsbCB0byBjYXJlLiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHN1Ym4pLCAiVG9vIHNtYWxsIHRvIGNhcmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHJuZCksICgiTnVtYmVyIGdvdCByb3VuZGVkIiwpKQorCisgICAgZGVmIHRlc3RfY29tcG9zZV9tcm8oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgZXhhbXBsZXMgaW4gdGhpcyB0ZXN0IGRlcGVuZCBvbiBoYXlzdGFjayBvcmRlcmluZy4KKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIG1ybyA9IGZ1bmN0b29scy5fY29tcG9zZV9tcm8KKyAgICAgICAgYmFzZXMgPSBbYy5TZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNldF0KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKGRpY3QsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbZGljdCwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLk1hcHBpbmcsIGMuTXV0YWJsZU1hcHBpbmcsIGMuT3JkZXJlZERpY3RdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLkNoYWluTWFwLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2MuQ2hhaW5NYXAsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgICAgICMgSWYgdGhlcmUncyBhIGdlbmVyaWMgZnVuY3Rpb24gd2l0aCBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJlZCBmb3IKKyAgICAgICAgIyBib3RoIFNpemVkIGFuZCBDb250YWluZXIsIHBhc3NpbmcgYSBkZWZhdWx0ZGljdCB0byBpdCByZXN1bHRzIGluIGFuCisgICAgICAgICMgYW1iaWd1b3VzIGRpc3BhdGNoIHdoaWNoIHdpbGwgY2F1c2UgYSBSdW50aW1lRXJyb3IgKHNlZQorICAgICAgICAjIHRlc3RfbXJvX2NvbmZsaWN0cykuCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLlNpemVkLCBzdHJdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLmRlZmF1bHRkaWN0LCBbYy5TaXplZCwgYy5Db250YWluZXIsIHN0cl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLlNpemVkLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBNdXRhYmxlU2VxdWVuY2UgYmVsb3cgaXMgcmVnaXN0ZXJlZCBkaXJlY3RseSBvbiBELiBJbiBvdGhlciB3b3JkcywgaXQKKyAgICAgICAgIyBwcmVjZWVkcyBNdXRhYmxlTWFwcGluZyB3aGljaCBtZWFucyBzaW5nbGUgZGlzcGF0Y2ggd2lsbCBhbHdheXMKKyAgICAgICAgIyBjaG9vc2UgTXV0YWJsZVNlcXVlbmNlIGhlcmUuCisgICAgICAgIGNsYXNzIEQoYy5kZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMuTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKEQpCisgICAgICAgIGJhc2VzID0gW2MuTXV0YWJsZVNlcXVlbmNlLCBjLk11dGFibGVNYXBwaW5nXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oRCwgYmFzZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtELCBjLk11dGFibGVTZXF1ZW5jZSwgYy5TZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLk1hcHBpbmcsIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0XSkKKworICAgICAgICAjIENvbnRhaW5lciBhbmQgQ2FsbGFibGUgYXJlIHJlZ2lzdGVyZWQgb24gZGlmZmVyZW50IGJhc2UgY2xhc3NlcyBhbmQKKyAgICAgICAgIyBhIGdlbmVyaWMgZnVuY3Rpb24gc3VwcG9ydGluZyBib3RoIHNob3VsZCBhbHdheXMgcGljayB0aGUgQ2FsbGFibGUKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBpZiBhIEMgaW5zdGFuY2UgaXMgcGFzc2VkLgorICAgICAgICBjbGFzcyBDKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYmFzZXMgPSBbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEMsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbQywgYy5DYWxsYWJsZSwgYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5TaXplZCwgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBkID0geyJhIjogImIifQorICAgICAgICBsID0gWzEsIDIsIDNdCisgICAgICAgIHMgPSB7b2JqZWN0KCksIE5vbmV9CisgICAgICAgIGYgPSBmcm96ZW5zZXQocykKKyAgICAgICAgdCA9ICgxLCAyLCAzKQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgb2JqOiAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nLCBsYW1iZGEgb2JqOiAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkNoYWluTWFwLCBsYW1iZGEgb2JqOiAiY2hhaW5tYXAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIGlycmVsZXZhbnQgQUJDcyByZWdpc3RlcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSwgbGFtYmRhIG9iajogIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXQsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NYXBwaW5nLCBsYW1iZGEgb2JqOiAibWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikgICMgbm90IHNwZWNpZmljIGVub3VnaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXF1ZW5jZSwgbGFtYmRhIG9iajogInNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXQsIGxhbWJkYSBvYmo6ICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZGljdCwgbGFtYmRhIG9iajogImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgb2JqOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihzZXQsIGxhbWJkYSBvYmo6ICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcihmcm96ZW5zZXQsIGxhbWJkYSBvYmo6ICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKHR1cGxlLCBsYW1iZGEgb2JqOiAidHVwbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImZyb3plbi1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJ0dXBsZSIpCisKKyAgICBkZWYgdGVzdF9jM19hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2MzX21ybworICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMCAgICMgaW1wbGllcyBTaXplZAorICAgICAgICBAYy5Db250YWluZXIucmVnaXN0ZXIKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzICAgIyB1bnJlbGF0ZWQKKyAgICAgICAgY2xhc3MgWChELCBDLCBCKToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzICAgIyBpbXBsaWVzIENhbGxhYmxlCisgICAgICAgIGV4cGVjdGVkID0gW1gsIGMuQ2FsbGFibGUsIEQsIEMsIGMuQ29udGFpbmVyLCBCLCBjLlNpemVkLCBBLCBvYmplY3RdCisgICAgICAgIGZvciBhYmNzIGluIHBlcm11dGF0aW9ucyhbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXJdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9YWJjcyksIGV4cGVjdGVkKQorICAgICAgICAjIHVucmVsYXRlZCBBQkNzIGRvbid0IGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIE1STworICAgICAgICBtYW55X2FiY3MgPSBbYy5NYXBwaW5nLCBjLlNpemVkLCBjLkNhbGxhYmxlLCBjLkNvbnRhaW5lciwgYy5JdGVyYWJsZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcm8oWCwgYWJjcz1tYW55X2FiY3MpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X21yb19jb25mbGljdHMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGNsYXNzIE8oYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBvID0gTygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgImJhc2UiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuSXRlcmFibGUsIGxhbWJkYSBhcmc6ICJpdGVyYWJsZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5Db250YWluZXIsIGxhbWJkYSBhcmc6ICJjb250YWluZXIiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2l6ZWQsIGxhbWJkYSBhcmc6ICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXQsIGxhbWJkYSBhcmc6ICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJzaXplZCIpCisgICAgICAgIGMuSXRlcmFibGUucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgYmVjYXVzZSBpdCdzIGV4cGxpY2l0bHkgaW4gX19tcm9fXworICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihPKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJzaXplZCIpICAgIyBzZWUgYWJvdmU6IFNpemVkIGlzIGluIF9fbXJvX18KKyAgICAgICAgYy5TZXQucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2V0IikgICAgICMgYmVjYXVzZSBjLlNldCBpcyBhIHN1YmNsYXNzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGMuU2l6ZWQgYW5kIGMuQ29udGFpbmVyCisgICAgICAgIGNsYXNzIFA6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHAgPSBQKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHApLCAiYmFzZSIpCisgICAgICAgIGMuSXRlcmFibGUucmVnaXN0ZXIoUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHApLCAiaXRlcmFibGUiKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihQKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgcmVfb25lOgorICAgICAgICAgICAgZyhwKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX29uZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkl0ZXJhYmxlJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUShjLlNpemVkKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHEgPSBRKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHEpLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5TZXQucmVnaXN0ZXIoUSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHEpLCAic2V0IikgICAgICMgYmVjYXVzZSBjLlNldCBpcyBhIHN1YmNsYXNzIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGMuU2l6ZWQgYW5kIGMuSXRlcmFibGUKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaChhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaC5yZWdpc3RlcihjLlNpemVkKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJzaXplZCIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgIyBFdmVuIHRob3VnaCBTaXplZCBhbmQgQ29udGFpbmVyIGFyZSBleHBsaWNpdCBiYXNlcyBvZiBNdXRhYmxlTWFwcGluZywKKyAgICAgICAgIyB0aGlzIEFCQyBpcyBpbXBsaWNpdGx5IHJlZ2lzdGVyZWQgb24gZGVmYXVsdGRpY3Qgd2hpY2ggbWFrZXMgYWxsIG9mCisgICAgICAgICMgTXV0YWJsZU1hcHBpbmcncyBiYXNlcyBpbXBsaWNpdCBhcyB3ZWxsIGZyb20gZGVmYXVsdGRpY3QncworICAgICAgICAjIHBlcnNwZWN0aXZlLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgcmVfdHdvOgorICAgICAgICAgICAgaChjLmRlZmF1bHRkaWN0KGxhbWJkYTogMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICBzdHIocmVfdHdvLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAoKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4iKSwKKyAgICAgICAgICAgICAoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuU2l6ZWQnPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiIpKSwKKyAgICAgICAgKQorICAgICAgICBjbGFzcyBSKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihSKQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBpKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIEBpLnJlZ2lzdGVyKGMuTXV0YWJsZU1hcHBpbmcpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gIm1hcHBpbmciCisgICAgICAgIEBpLnJlZ2lzdGVyKGMuTXV0YWJsZVNlcXVlbmNlKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJzZXF1ZW5jZSIKKyAgICAgICAgciA9IFIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkociksICJzZXF1ZW5jZSIpCisgICAgICAgIGNsYXNzIFM6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIFQoUywgYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICB0ID0gVCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHQpLCAic2l6ZWQiKSAgICMgYmVjYXVzZSBpdCdzIGV4cGxpY2l0bHkgaW4gdGhlIE1STworICAgICAgICBjbGFzcyBVOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdSA9IFUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodSksICJzaXplZCIpICAgIyBpbXBsaWNpdCBTaXplZCBzdWJjbGFzcyBpbmZlcnJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmcm9tIHRoZSBleGlzdGVuY2Ugb2YgX19sZW5fXygpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFUpCisgICAgICAgICMgVGhlcmUgaXMgbm8gcHJlZmVyZW5jZSBmb3IgcmVnaXN0ZXJlZCB2ZXJzdXMgaW5mZXJyZWQgQUJDcy4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3RocmVlOgorICAgICAgICAgICAgaCh1KQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3RocmVlLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAoKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4iKSwKKyAgICAgICAgICAgICAoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuU2l6ZWQnPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiIpKSwKKyAgICAgICAgKQorICAgICAgICBjbGFzcyBWKGMuU2l6ZWQsIFMpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaihhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAai5yZWdpc3RlcihTKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJzIgorICAgICAgICBAai5yZWdpc3RlcihjLkNvbnRhaW5lcikKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiY29udGFpbmVyIgorICAgICAgICB2ID0gVigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaih2KSwgInMiKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihWKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJjb250YWluZXIiKSAgICMgYmVjYXVzZSBpdCBlbmRzIHVwIHJpZ2h0IGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTaXplZCBpbiB0aGUgTVJPCisKKyAgICBkZWYgdGVzdF9jYWNoZV9pbnZhbGlkYXRpb24oc2VsZik6CisgICAgICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFVzZXJEaWN0CisgICAgICAgIGNsYXNzIFRyYWNpbmdEaWN0KFVzZXJEaWN0KToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHN1cGVyKFRyYWNpbmdEaWN0LCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfb3BzID0gW10KKyAgICAgICAgICAgICAgICBzZWxmLmdldF9vcHMgPSBbXQorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5kYXRhW2tleV0KKyAgICAgICAgICAgICAgICBzZWxmLmdldF9vcHMuYXBwZW5kKGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgc2VsZi5kYXRhW2tleV0gPSB2YWx1ZQorICAgICAgICAgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZGF0YS5jbGVhcigpCisgICAgICAgIF9vcmlnX3drZCA9IGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeQorICAgICAgICB0ZCA9IFRyYWNpbmdEaWN0KCkKKyAgICAgICAgZnVuY3Rvb2xzLldlYWtLZXlEaWN0aW9uYXJ5ID0gbGFtYmRhOiB0ZAorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBkID0ge30KKyAgICAgICAgbCA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCBnLnJlZ2lzdHJ5W29iamVjdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIHRkLmRhdGFbbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3RdKQorICAgICAgICBnLnJlZ2lzdGVyKGxpc3QsIGxhbWJkYSBhcmc6ICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLl9maW5kX2ltcGwoZGljdCwgZy5yZWdpc3RyeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2xpc3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGxpc3QsIGcucmVnaXN0cnkpKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjLk11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKFgpICAgIyBXaWxsIG5vdCBpbnZhbGlkYXRlIHRoZSBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IHVzaW5nIEFCQ3MgeWV0LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdCwgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBnLmRpc3BhdGNoKGxpc3QpCisgICAgICAgIGcuZGlzcGF0Y2goZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdCwgbGlzdCwgZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCwgZGljdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3QsIGxpc3RdKQorICAgICAgICBjLk11dGFibGVTZXQucmVnaXN0ZXIoWCkgICAgICAgIyBXaWxsIGludmFsaWRhdGUgdGhlIGNhY2hlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDIpICAgIyBTdGFsZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nLCBsYW1iZGEgYXJnOiAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBnLnJlZ2lzdGVyKGRpY3QsIGxhbWJkYSBhcmc6ICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBnLl9jbGVhcl9jYWNoZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMCkKKyAgICAgICAgZnVuY3Rvb2xzLldlYWtLZXlEaWN0aW9uYXJ5ID0gX29yaWdfd2tkCisKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgVGVzdFBhcnRpYWwsCi0gICAgICAgIFRlc3RQYXJ0aWFsU3ViY2xhc3MsCi0gICAgICAgIFRlc3RQeXRob25QYXJ0aWFsLAorICAgICAgICBUZXN0UGFydGlhbEMsCisgICAgICAgIFRlc3RQYXJ0aWFsUHksCisgICAgICAgIFRlc3RQYXJ0aWFsQ1N1YmNsYXNzLAorICAgICAgICBUZXN0UGFydGlhbE1ldGhvZCwKICAgICAgICAgVGVzdFVwZGF0ZVdyYXBwZXIsCiAgICAgICAgIFRlc3RUb3RhbE9yZGVyaW5nLAotICAgICAgICBUZXN0Q21wVG9LZXksCisgICAgICAgIFRlc3RDbXBUb0tleUMsCisgICAgICAgIFRlc3RDbXBUb0tleVB5LAogICAgICAgICBUZXN0V3JhcHMsCiAgICAgICAgIFRlc3RSZWR1Y2UsCiAgICAgICAgIFRlc3RMUlUsCisgICAgICAgIFRlc3RTaW5nbGVEaXNwYXRjaCwKICAgICApCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQppbmRleCBhMGMxNTZmLi5iZWFjOTkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQpAQCAtODIsNiArODIsMTQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCiAKKyAgICBkZWYgdGVzdF9iYWRmdXR1cmUxMChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSB0ZXN0IGltcG9ydCBiYWRzeW50YXhfZnV0dXJlMTAKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm9yX2xvY2F0aW9uKG1zZyksICgiYmFkc3ludGF4X2Z1dHVyZTEwIiwgJzMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgZXhjZXB0aW9uIGRpZG4ndCBvY2N1ciIpCisKICAgICBkZWYgdGVzdF9wYXJzZXJoYWNrKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCB0aGUgcGFyc2VyLmM6OmZ1dHVyZV9oYWNrIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkCiAgICAgICAgICMgTm90ZTogYWx0aG91Z2ggdGhpcyB0ZXN0IG11c3QgcGFzcywgaXQncyBub3QgdGVzdGluZyB0aGUgb3JpZ2luYWwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2MucHkgYi9MaWIvdGVzdC90ZXN0X2djLnB5CmluZGV4IGM1OWI3MmUuLmU4ZjUyYTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nYy5weQpAQCAtMSw2ICsxLDkgQEAKK2ltcG9ydCBfdGVzdGNhcGkKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICh2ZXJib3NlLCByZWZjb3VudF90ZXN0LCBydW5fdW5pdHRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfcHl0aG9uX3N0ZGVycikKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBtYWtlX3NjcmlwdCwgdGVtcF9kaXIKKwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBnYwpAQCAtMzgsNiArNDEsNyBAQAogICAgICAgICAjIGdjIGNvbGxlY3RzIGl0LgogICAgICAgICBzZWxmLndyID0gd2Vha3JlZi5yZWYoQzEwNTU4MjAoNjY2KSwgaXRfaGFwcGVuZWQpCiAKK0BfdGVzdGNhcGkud2l0aF90cF9kZWwKIGNsYXNzIFVuY29sbGVjdGFibGUob2JqZWN0KToKICAgICAiIiJDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgd2l0aCBtdWx0aXBsZSBfX2RlbF9fIG1ldGhvZHMuCiAKQEAgLTUwLDcgKzU0LDcgQEAKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IFVuY29sbGVjdGFibGUocGFydG5lcj1zZWxmKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5wYXJ0bmVyID0gcGFydG5lcgotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICBwYXNzCiAKICMjIyBUZXN0cwpAQCAtMTM5LDExICsxNDMsMTIgQEAKICAgICAgICAgZGVsIGEKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXIoc2VsZik6CisgICAgZGVmIHRlc3RfbGVnYWN5X2ZpbmFsaXplcihzZWxmKToKICAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAogICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX190cF9kZWxfXyhzZWxmKTogcGFzcwogICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC0xNjMsMTEgKzE2OCwxMiBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgZmluZCBvYmogaW4gZ2FyYmFnZSAoZmluYWxpemVyKSIpCiAgICAgICAgIGdjLmdhcmJhZ2UucmVtb3ZlKG9iaikKIAotICAgIGRlZiB0ZXN0X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKKyAgICBkZWYgdGVzdF9sZWdhY3lfZmluYWxpemVyX25ld2NsYXNzKHNlbGYpOgogICAgICAgICAjIEEoKSBpcyB1bmNvbGxlY3RhYmxlIGlmIGl0IGlzIHBhcnQgb2YgYSBjeWNsZSwgbWFrZSBzdXJlIGl0IHNob3dzIHVwCiAgICAgICAgICMgaW4gZ2MuZ2FyYmFnZS4KKyAgICAgICAgQF90ZXN0Y2FwaS53aXRoX3RwX2RlbAogICAgICAgICBjbGFzcyBBKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQihvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC01NjgsMTIgKzU3NCwxNCBAQAogICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICBjb2RlID0gIiIiaWYgMToKICAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgQF90ZXN0Y2FwaS53aXRoX3RwX2RlbAogICAgICAgICAgICAgY2xhc3MgWDoKICAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiPFggJSVyPiIgJSUgc2VsZi5uYW1lCi0gICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICAgICAgeCA9IFgoJ2ZpcnN0JykKQEAgLTYxMCw2ICs2MTgsNjYgQEAKICAgICAgICAgc3RkZXJyID0gcnVuX2NvbW1hbmQoY29kZSAlICJnYy5ERUJVR19TQVZFQUxMIikKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiInVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCBzaHV0ZG93biIsIHN0ZGVycikKIAorICAgIGRlZiB0ZXN0X2djX21haW5fbW9kdWxlX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIENyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB0aHJvdWdoIHRoZSBfX21haW5fXyBtb2R1bGUgYW5kIGNoZWNrCisgICAgICAgICMgaXQgZ2V0cyBjb2xsZWN0ZWQgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICBsID0gW0MoKV0KKyAgICAgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2djX29yZGluYXJ5X21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBTYW1lIGFzIGFib3ZlLCBidXQgd2l0aCBhIG5vbi1fX21haW5fXyBtb2R1bGUuCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kdWxlID0gIiIiaWYgMToKKyAgICAgICAgICAgICAgICBpbXBvcnQgd2Vha3JlZgorICAgICAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ19fZGVsX18gY2FsbGVkJykKKyAgICAgICAgICAgICAgICBsID0gW0MoKV0KKyAgICAgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCAlcikKKyAgICAgICAgICAgICAgICBpbXBvcnQgZ2N0ZXN0CisgICAgICAgICAgICAgICAgIiIiICUgKHNjcmlwdF9kaXIsKQorICAgICAgICAgICAgbWFrZV9zY3JpcHQoc2NyaXB0X2RpciwgJ2djdGVzdCcsIG1vZHVsZSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGInX19kZWxfXyBjYWxsZWQnKQorCisgICAgZGVmIHRlc3RfZ2V0X3N0YXRzKHNlbGYpOgorICAgICAgICBzdGF0cyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN0YXRzKSwgMykKKyAgICAgICAgZm9yIHN0IGluIHN0YXRzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0LCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImNvbGxlY3RlZCIsICJjb2xsZWN0aW9ucyIsICJ1bmNvbGxlY3RhYmxlIn0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsiY29sbGVjdGVkIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsiY29sbGVjdGlvbnMiXSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0WyJ1bmNvbGxlY3RhYmxlIl0sIDApCisgICAgICAgICMgQ2hlY2sgdGhhdCBjb2xsZWN0aW9uIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQgY29ycmVjdGx5CisgICAgICAgIGlmIGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGdjLmVuYWJsZSkKKyAgICAgICAgICAgIGdjLmRpc2FibGUoKQorICAgICAgICBvbGQgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBnYy5jb2xsZWN0KDApCisgICAgICAgIG5ldyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzBdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMF1bImNvbGxlY3Rpb25zIl0gKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1sxXVsiY29sbGVjdGlvbnMiXSwgb2xkWzFdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1syXVsiY29sbGVjdGlvbnMiXSwgb2xkWzJdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBnYy5jb2xsZWN0KDIpCisgICAgICAgIG5ldyA9IGdjLmdldF9zdGF0cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3WzBdWyJjb2xsZWN0aW9ucyJdLCBvbGRbMF1bImNvbGxlY3Rpb25zIl0gKyAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1sxXVsiY29sbGVjdGlvbnMiXSwgb2xkWzFdWyJjb2xsZWN0aW9ucyJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1syXVsiY29sbGVjdGlvbnMiXSwgb2xkWzJdWyJjb2xsZWN0aW9ucyJdICsgMSkKKwogCiBjbGFzcyBHQ0NhbGxiYWNrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5IGIvTGliL3Rlc3QvdGVzdF9nZGIucHkKaW5kZXggODQ2NDIyYi4uMGUyNTRhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZGIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZGIucHkKQEAgLTUsNiArNSw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgcHByaW50CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHN5c2NvbmZpZwpAQCAtMTcsNiArMTgsNyBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIF90aHJlYWQgPSBOb25lCiAKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZmluZGZpbGUsIHB5dGhvbl9pc19vcHRpbWl6ZWQKIAogdHJ5OgpAQCAtNDAsNiArNDIsOCBAQAogY2hlY2tvdXRfaG9va19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbi1nZGIucHknKQogCitQWVRIT05IQVNIU0VFRCA9ICcxMjMnCisKIGRlZiBydW5fZ2RiKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiJSdW5zIGdkYiBpbiAtLWJhdGNoIG1vZGUgd2l0aCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgZ2l2ZW4gYnkgKmFyZ3MuCiAKQEAgLTE0NCw3ICsxNDgsNyBAQAogICAgICAgICAjIHByaW50ICgnICcuam9pbihhcmdzKSkKIAogICAgICAgICAjIFVzZSAiYXJncyIgdG8gaW52b2tlIGdkYiwgY2FwdHVyaW5nIHN0ZG91dCwgc3RkZXJyOgotICAgICAgICBvdXQsIGVyciA9IHJ1bl9nZGIoKmFyZ3MsIFBZVEhPTkhBU0hTRUVEPScwJykKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD1QWVRIT05IQVNIU0VFRCkKIAogICAgICAgICBlcnJsaW5lcyA9IGVyci5zcGxpdGxpbmVzKCkKICAgICAgICAgdW5leHBlY3RlZF9lcnJsaW5lcyA9IFtdCkBAIC0xNjUsNiArMTY5LDEwIEBACiAgICAgICAgICAgICAnbGludXgtZ2F0ZS5zbycsCiAgICAgICAgICAgICAnRG8geW91IG5lZWQgInNldCBzb2xpYi1zZWFyY2gtcGF0aCIgb3IgJwogICAgICAgICAgICAgJyJzZXQgc3lzcm9vdCI/JywKKyAgICAgICAgICAgICd3YXJuaW5nOiBTb3VyY2UgZmlsZSBpcyBtb3JlIHJlY2VudCB0aGFuIGV4ZWN1dGFibGUuJywKKyAgICAgICAgICAgICMgSXNzdWUgIzE5NzUzOiBtaXNzaW5nIHN5bWJvbHMgb24gU3lzdGVtIFoKKyAgICAgICAgICAgICdNaXNzaW5nIHNlcGFyYXRlIGRlYnVnaW5mbyBmb3IgJywKKyAgICAgICAgICAgICdUcnk6IHp5cHBlciBpbnN0YWxsIC1DICcsCiAgICAgICAgICAgICApCiAgICAgICAgIGZvciBsaW5lIGluIGVycmxpbmVzOgogICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChpZ25vcmVfcGF0dGVybnMpOgpAQCAtMjQ4LDkgKzI1Niw4IEBACiAgICAgZGVmIHRlc3RfZGljdHMoc2VsZik6CiAgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBkaWN0aW9uYXJpZXMnCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7fSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9KQotICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAieydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJ30sICJ7J2Zvbyc6ICdiYXInfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInLCAnZG91Z2xhcyc6IDQyfSwgInsnZG91Z2xhcyc6IDQyLCAnZm9vJzogJ2Jhcid9IikKIAogICAgIGRlZiB0ZXN0X2xpc3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgbGlzdHMnCkBAIC0zMDUsMjYgKzMxMiwzMCBAQAogCiAgICAgZGVmIHRlc3RfdHVwbGVzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdHVwbGVzJwotICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodHVwbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCksICcoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigoMSwpLCAnKDEsKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigoJ2ZvbycsICdiYXInLCAnYmF6JykpCiAKICAgICBkZWYgdGVzdF9zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBzZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KCksICdzZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWydhJywgJ2InXSksICJ7J2EnLCAnYid9IikKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldChbNCwgNSwgNl0pLCAiezQsIDUsIDZ9IikKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGhhbmRsZSBzZXRzIGNvbnRhaW5pbmcgdGhlICJkdW1teSIga2V5IHZhbHVlLAogICAgICAgICAjIHdoaWNoIGhhcHBlbnMgb24gZGVsZXRpb246CiAgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycncyA9IHNldChbJ2EnLCdiJ10pCi1zLnBvcCgpCitzLnJlbW92ZSgnYScpCiBpZChzKScnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgInsnYid9IikKIAogICAgIGRlZiB0ZXN0X2Zyb3plbnNldHMoc2VsZik6CiAgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzJwotICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCkpCisgICAgICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pIDwgKDcsIDMpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicHJldHR5LXByaW50aW5nIG9mIGZyb3plbnNldHMgbmVlZHMgZ2RiIDcuMyBvciBsYXRlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoKSwgJ2Zyb3plbnNldCgpJykKICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldChbJ2EnLCAnYiddKSwgImZyb3plbnNldCh7J2EnLCAnYid9KSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWzQsIDUsIDZdKSwgImZyb3plbnNldCh7NCwgNSwgNn0pIikKIApAQCAtODQxLDYgKzg1MiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciIuKlxuYSA9IDFcbmIgPSAyXG5jID0gM1xuLioiKQogCiBkZWYgdGVzdF9tYWluKCk6CisgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludCgiR0RCIHZlcnNpb246IikKKyAgICAgICAgZm9yIGxpbmUgaW4gb3MuZnNkZWNvZGUoZ2RiX3ZlcnNpb24pLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIHByaW50KCIgIiAqIDQgKyBsaW5lKQogICAgIHJ1bl91bml0dGVzdChQcmV0dHlQcmludFRlc3RzLAogICAgICAgICAgICAgICAgICBQeUxpc3RUZXN0cywKICAgICAgICAgICAgICAgICAgU3RhY2tOYXZpZ2F0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkgYi9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKaW5kZXggOTU4MDU0YS4uNGU5MjExNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQpAQCAtMSwzICsxLDU1IEBACitpbXBvcnQgZ2MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKKworY2xhc3MgRmluYWxpemF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mcmFtZV9yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgZnJhbWUgY2FuIGJlIHJlc3VycmVjdGVkIGJ5IGEgZ2VuZXJhdG9yJ3MgZmluYWxpemF0aW9uLgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBub25sb2NhbCBmcmFtZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZykKKyAgICAgICAgbmV4dChnKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmcmFtZSkKKyAgICAgICAgZGVsIGZyYW1lCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9yZWZjeWNsZShzZWxmKToKKyAgICAgICAgIyBBIGdlbmVyYXRvciBjYXVnaHQgaW4gYSByZWZjeWNsZSBnZXRzIGZpbmFsaXplZCBhbnl3YXkuCisgICAgICAgIG9sZF9nYXJiYWdlID0gZ2MuZ2FyYmFnZVs6XQorICAgICAgICBmaW5hbGl6ZWQgPSBGYWxzZQorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICBub25sb2NhbCBmaW5hbGl6ZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBnID0geWllbGQKKyAgICAgICAgICAgICAgICB5aWVsZCAxCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbmFsaXplZCA9IFRydWUKKworICAgICAgICBnID0gZ2VuKCkKKyAgICAgICAgbmV4dChnKQorICAgICAgICBnLnNlbmQoZykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHN5cy5nZXRyZWZjb3VudChnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaW5hbGl6ZWQpCisgICAgICAgIGRlbCBnCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaW5hbGl6ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2MuZ2FyYmFnZSwgb2xkX2dhcmJhZ2UpCisKKwogdHV0b3JpYWxfdGVzdHMgPSAiIiIKIExldCdzIHRyeSBhIHNpbXBsZSBnZW5lcmF0b3I6CiAKQEAgLTE3MjksOSArMTc4MSw3IEBACiA+Pj4gZyA9IGYoKQogPj4+IG5leHQoZykKID4+PiBkZWwgZwotPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAotLi4uICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogJ2dlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQnIGluICIKLS4uLiApCis+Pj4gIlJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIgaW4gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCiBUcnVlCiA+Pj4gc3lzLnN0ZGVyciA9IG9sZAogCkBAIC0xODQxLDIyICsxODkxLDIzIEBACiAuLi4gICAgIHN5cy5zdGRlcnIgPSBpby5TdHJpbmdJTygpCiAuLi4gICAgIGNsYXNzIExlYWtlcjoKIC4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotLi4uICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorLi4uICAgICAgICAgICAgIGRlZiBpbnZva2UobWVzc2FnZSk6CisuLi4gICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlKQorLi4uICAgICAgICAgICAgIGludm9rZSgidGVzdCIpCiAuLi4KIC4uLiAgICAgbCA9IExlYWtlcigpCiAuLi4gICAgIGRlbCBsCiAuLi4gICAgIGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCi0uLi4gICAgIGVyci5zdGFydHN3aXRoKAotLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCi0uLi4gICAgICkKLS4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQotLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKKy4uLiAgICAgIkV4Y2VwdGlvbiBpZ25vcmVkIGluIiBpbiBlcnIKKy4uLiAgICAgIlJ1bnRpbWVFcnJvcjogdGVzdCIgaW4gZXJyCisuLi4gICAgICJUcmFjZWJhY2siIGluIGVycgorLi4uICAgICAiaW4gaW52b2tlIiBpbiBlcnIKIC4uLiBmaW5hbGx5OgogLi4uICAgICBzeXMuc3RkZXJyID0gb2xkCiBUcnVlCiBUcnVlCi0xCi0KK1RydWUKK1RydWUKIAogCiBUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLApAQCAtMTg4MSw2ICsxOTMyLDcgQEAKICMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHRlc3RfZ2VuZXJhdG9ycworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9nZW5lcmF0b3JzLCB2ZXJib3NlKQogCiAjIFRoaXMgcGFydCBpc24ndCBuZWVkZWQgZm9yIHJlZ3J0ZXN0LCBidXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCBmZDhiYzU3Li5lOTY3ODk3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTE4OCwxMiArMTg4LDkzIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4pCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX3N5bWxpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZWZpbGVfb25fbGlua19mdW5jKG9zLnN5bWxpbmspCisKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5saW5rKQorCisgICAgZGVmIF90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhzZWxmLCBmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCisKKyAgICAgICAgICAgIGZ1bmModGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjEpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQorICAgICAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVzdGF0X29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorICAgICAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgZnVuYygqdGVzdF9mbnMpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZXN0YXQoKnN0YXRzKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZW9wZW5maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmZpbGVubygpLCBiLmZpbGVubygpKSkKKwogY2xhc3MgVGVzdEdlbmVyaWNUZXN0KEdlbmVyaWNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBJc3N1ZSAxNjg1MjogR2VuZXJpY1Rlc3QgY2FuJ3QgaW5oZXJpdCBmcm9tIHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgIyBmb3IgdGVzdCBkaXNjb3ZlcnkgcHVycG9zZXM7IENvbW1vblRlc3QgaW5oZXJpdHMgZnJvbSBHZW5lcmljVGVzdAogICAgICMgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVycy4KICAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKIAorCiAjIEZvbGxvd2luZyBUZXN0Q2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcnVuIGZyb20gdGVzdF9nZW5lcmljcGF0aC4KICMgSXQgaXMgaW5oZXJpdGVkIGJ5IG90aGVyIHRlc3QgbW9kdWxlcyAobWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpLgogCkBAIC0zMjIsNyArNDAzLDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWQgc3VwcG9ydC5URVNURk5fTk9OQVNDSUkiKQogCi0gICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IDQ4Y2E5NGUuLmJlZWE3NmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMSwzOCArMSw0MCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2tleXdvcmRzLCBnZXRhcmdzX2tleXdvcmRfb25seQordHJ5OgorICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wsIGdldGFyZ3NfSworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGFyZ3NfTCA9IE5vbmUgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQogCi0iIiIKLT4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY291bnRlcnByb3Bvc2FsLiBUaGlzIGFsc28gY2hhbmdlcyBzb21lIG9mCi0+IHRoZSBvdGhlciBmb3JtYXQgY29kZXMgdG8gYmUgYSBsaXR0bGUgbW9yZSByZWd1bGFyLgotPgotPiBDb2RlIEMgdHlwZSBSYW5nZSBjaGVjawotPgotPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCi0+IGggc2lnbmVkIHNob3J0IFNIUlRfTUlOLi5TSFJUX01BWAotPiBCIHVuc2lnbmVkIGNoYXIgbm9uZSAqKgotPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKLT4gayAqIHVuc2lnbmVkIGxvbmcgbm9uZQotPiBJICogdW5zaWduZWQgaW50IDAuLlVJTlRfTUFYCi0KLQotPiBpIGludCBJTlRfTUlOLi5JTlRfTUFYCi0+IGwgbG9uZyBMT05HX01JTi4uTE9OR19NQVgKLQotPiBLICogdW5zaWduZWQgbG9uZyBsb25nIG5vbmUKLT4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKLQotPiBOb3RlczoKLT4KLT4gKiBOZXcgZm9ybWF0IGNvZGVzLgotPgotPiAqKiBDaGFuZ2VkIGZyb20gcHJldmlvdXMgInJhbmdlLWFuZC1hLWhhbGYiIHRvICJub25lIjsgdGhlCi0+IHJhbmdlLWFuZC1hLWhhbGYgY2hlY2tpbmcgd2Fzbid0IHBhcnRpY3VsYXJseSB1c2VmdWwuCi0KLVBsdXMgYSBDIEFQSSBvciB0d28sIGUuZy4gUHlJbnRfQXNMb25nTWFzaygpIC0+Ci11bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCi1sb25nIGxvbmcgKGlmIHRoYXQgZXhpc3RzKS4KLSIiIgorIyA+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgorIyA+IHRoZSBvdGhlciBmb3JtYXQgY29kZXMgdG8gYmUgYSBsaXR0bGUgbW9yZSByZWd1bGFyLgorIyA+CisjID4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKKyMgPgorIyA+IGIgdW5zaWduZWQgY2hhciAwLi5VQ0hBUl9NQVgKKyMgPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKKyMgPiBCIHVuc2lnbmVkIGNoYXIgbm9uZSAqKgorIyA+IEggdW5zaWduZWQgc2hvcnQgbm9uZSAqKgorIyA+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKKyMgPiBJICogdW5zaWduZWQgaW50IDAuLlVJTlRfTUFYCisjCisjCisjID4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAorIyA+IGwgbG9uZyBMT05HX01JTi4uTE9OR19NQVgKKyMKKyMgPiBLICogdW5zaWduZWQgbG9uZyBsb25nIG5vbmUKKyMgPiBMIGxvbmcgbG9uZyBMTE9OR19NSU4uLkxMT05HX01BWAorIworIyA+IE5vdGVzOgorIyA+CisjID4gKiBOZXcgZm9ybWF0IGNvZGVzLgorIyA+CisjID4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQorIyA+IHJhbmdlLWFuZC1hLWhhbGYgY2hlY2tpbmcgd2Fzbid0IHBhcnRpY3VsYXJseSB1c2VmdWwuCisjCisjIFBsdXMgYSBDIEFQSSBvciB0d28sIGUuZy4gUHlJbnRfQXNMb25nTWFzaygpIC0+CisjIHVuc2lnbmVkIGxvbmcgYW5kIFB5SW50X0FzTG9uZ0xvbmdNYXNrKCkgLT4gdW5zaWduZWQKKyMgbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCiAKIExBUkdFID0gMHg3RkZGRkZGRgogVkVSWV9MQVJHRSA9IDB4RkYwMDAwMTIxMjEyMTIxMjEyMTIxMjQyCkBAIC0xODQsNiArMTg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBWRVJZX0xBUkdFKQogCiAKK0B1bml0dGVzdC5za2lwSWYoZ2V0YXJnc19MIGlzIE5vbmUsICdQWV9MT05HX0xPTkcgaXMgbm90IGF2YWlsYWJsZScpCiBjbGFzcyBMb25nTG9uZ19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfTChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTApAQCAtNTM2LDI0ICs1MzksNSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZXRhcmdzX1pfaGFzaChOb25lKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbCi0gICAgICAgIFNpZ25lZF9UZXN0Q2FzZSwKLSAgICAgICAgVW5zaWduZWRfVGVzdENhc2UsCi0gICAgICAgIEJvb2xlYW5fVGVzdENhc2UsCi0gICAgICAgIFR1cGxlX1Rlc3RDYXNlLAotICAgICAgICBLZXl3b3Jkc19UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZE9ubHlfVGVzdENhc2UsCi0gICAgICAgIEJ5dGVzX1Rlc3RDYXNlLAotICAgICAgICBVbmljb2RlX1Rlc3RDYXNlLAotICAgIF0KLSAgICB0cnk6Ci0gICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wsIGdldGFyZ3NfSwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcyAjIFBZX0xPTkdfTE9ORyBub3QgYXZhaWxhYmxlCi0gICAgZWxzZToKLSAgICAgICAgdGVzdHMuYXBwZW5kKExvbmdMb25nX1Rlc3RDYXNlKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3MzFiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2dldHBhc3MucHkKQEAgLTAsMCArMSwxNTUgQEAKK2ltcG9ydCBnZXRwYXNzCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCit0cnk6CisgICAgaW1wb3J0IHRlcm1pb3MKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0ZXJtaW9zID0gTm9uZQordHJ5OgorICAgIGltcG9ydCBwd2QKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwd2QgPSBOb25lCisKK0Btb2NrLnBhdGNoKCdvcy5lbnZpcm9uJykKK2NsYXNzIEdldHBhc3NHZXR1c2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91c2VybmFtZV90YWtlc191c2VybmFtZV9mcm9tX2VudihzZWxmLCBlbnZpcm9uKToKKyAgICAgICAgZXhwZWN0ZWRfbmFtZSA9ICdzb21lX25hbWUnCisgICAgICAgIGVudmlyb24uZ2V0LnJldHVybl92YWx1ZSA9IGV4cGVjdGVkX25hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9uYW1lLCBnZXRwYXNzLmdldHVzZXIoKSkKKworICAgIGRlZiB0ZXN0X3VzZXJuYW1lX3ByaW9yaXRpZXNfb2ZfZW52X3ZhbHVlcyhzZWxmLCBlbnZpcm9uKToKKyAgICAgICAgZW52aXJvbi5nZXQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRwYXNzLmdldHVzZXIoKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6ICMgaW4gY2FzZSB0aGVyZSdzIG5vIHB3ZCBtb2R1bGUKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGVudmlyb24uZ2V0LmNhbGxfYXJnc19saXN0LAorICAgICAgICAgICAgW21vY2suY2FsbCh4KSBmb3IgeCBpbiAoJ0xPR05BTUUnLCAnVVNFUicsICdMTkFNRScsICdVU0VSTkFNRScpXSkKKworICAgIGRlZiB0ZXN0X3VzZXJuYW1lX2ZhbGxzX2JhY2tfdG9fcHdkKHNlbGYsIGVudmlyb24pOgorICAgICAgICBleHBlY3RlZF9uYW1lID0gJ3NvbWVfbmFtZScKKyAgICAgICAgZW52aXJvbi5nZXQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICBpZiBwd2Q6CisgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmdldHVpZCcpIGFzIHVpZCwgXAorICAgICAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdwd2QuZ2V0cHd1aWQnKSBhcyBnZXRwdzoKKyAgICAgICAgICAgICAgICB1aWQucmV0dXJuX3ZhbHVlID0gNDIKKyAgICAgICAgICAgICAgICBnZXRwdy5yZXR1cm5fdmFsdWUgPSBbZXhwZWN0ZWRfbmFtZV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRwYXNzLmdldHVzZXIoKSkKKyAgICAgICAgICAgICAgICBnZXRwdy5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0MikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBnZXRwYXNzLmdldHVzZXIpCisKKworY2xhc3MgR2V0cGFzc1Jhd2lucHV0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9mbHVzaGVzX3N0cmVhbV9hZnRlcl9wcm9tcHQoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDE3MDMKKyAgICAgICAgc3RyZWFtID0gbW9jay5Nb2NrKHNwZWM9U3RyaW5nSU8pCisgICAgICAgIGlucHV0ID0gU3RyaW5nSU8oJ2lucHV0X3N0cmluZycpCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dCgnc29tZV9wcm9tcHQnLCBzdHJlYW0sIGlucHV0PWlucHV0KQorICAgICAgICBzdHJlYW0uZmx1c2guYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQorCisgICAgZGVmIHRlc3RfdXNlc19zdGRlcnJfYXNfZGVmYXVsdChzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygnaW5wdXRfc3RyaW5nJykKKyAgICAgICAgcHJvbXB0ID0gJ3NvbWVfcHJvbXB0JworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ3N5cy5zdGRlcnInKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQocHJvbXB0LCBpbnB1dD1pbnB1dCkKKyAgICAgICAgICAgIHN0ZGVyci53cml0ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChwcm9tcHQpCisKKyAgICBAbW9jay5wYXRjaCgnc3lzLnN0ZGluJykKKyAgICBkZWYgdGVzdF91c2VzX3N0ZGluX2FzX2RlZmF1bHRfaW5wdXQoc2VsZiwgbW9ja19pbnB1dCk6CisgICAgICAgIG1vY2tfaW5wdXQucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gJ2lucHV0X3N0cmluZycKKyAgICAgICAgZ2V0cGFzcy5fcmF3X2lucHV0KHN0cmVhbT1TdHJpbmdJTygpKQorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JhaXNlc19vbl9lbXB0eV9pbnB1dChzZWxmKToKKyAgICAgICAgaW5wdXQgPSBTdHJpbmdJTygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGdldHBhc3MuX3Jhd19pbnB1dCwgaW5wdXQ9aW5wdXQpCisKKyAgICBkZWYgdGVzdF90cmltc190cmFpbGluZ19uZXdsaW5lKHNlbGYpOgorICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCd0ZXN0XG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd0ZXN0JywgZ2V0cGFzcy5fcmF3X2lucHV0KGlucHV0PWlucHV0KSkKKworCisjIFNvbWUgb2YgdGhlc2UgdGVzdHMgYXJlIGEgYml0IHdoaXRlLWJveC4gIFRoZSBmdW5jdGlvbmFsIHJlcXVpcmVtZW50IGlzIHRoYXQKKyMgdGhlIHBhc3N3b3JkIGlucHV0IGJlIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIHR0eSwgYW5kIHRoYXQgaXQgbm90IGJlIGVjaG9lZAorIyBvbiB0aGUgc2NyZWVuLCB1bmxlc3Mgd2UgYXJlIGZhbGxpbmcgYmFjayB0byBzdGRlcnIvc3RkaW4uCisKKyMgU29tZSBvZiB0aGVzZSBtaWdodCBydW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgdGVybWlvcywgYnV0IHBsYXkgaXQgc2FmZS4KK0B1bml0dGVzdC5za2lwVW5sZXNzKHRlcm1pb3MsICd0ZXN0cyByZXF1aXJlIHN5c3RlbSB3aXRoIHRlcm1pb3MnKQorY2xhc3MgVW5peEdldHBhc3NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VzZXNfdHR5X2RpcmVjdGx5KHNlbGYpOgorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLm9wZW4nKSBhcyBvcGVuLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uRmlsZUlPJykgYXMgZmlsZWlvLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uVGV4dElPV3JhcHBlcicpIGFzIHRleHRpbzoKKyAgICAgICAgICAgICMgQnkgc2V0dGluZyBvcGVuJ3MgcmV0dXJuIHZhbHVlIHRvIE5vbmUgdGhlIGltcGxlbWVudGF0aW9uIHdpbGwKKyAgICAgICAgICAgICMgc2tpcCBjb2RlIHdlIGRvbid0IGNhcmUgYWJvdXQgaW4gdGhpcyB0ZXN0LiAgV2UgY2FuIG1vY2sgdGhpcyBvdXQKKyAgICAgICAgICAgICMgZnVsbHkgaWYgYW4gYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIHdvcmtzIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgb3Blbi5yZXR1cm5fdmFsdWUgPSBOb25lCisgICAgICAgICAgICBnZXRwYXNzLnVuaXhfZ2V0cGFzcygpCisgICAgICAgICAgICBvcGVuLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCcvZGV2L3R0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLk9fUkRXUiB8IG9zLk9fTk9DVFRZKQorICAgICAgICAgICAgZmlsZWlvLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKG9wZW4ucmV0dXJuX3ZhbHVlLCAndysnKQorICAgICAgICAgICAgdGV4dGlvLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZpbGVpby5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9yZXNldHNfdGVybWlvcyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uVGV4dElPV3JhcHBlcicpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y2dldGF0dHInKSBhcyB0Y2dldGF0dHIsIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCd0ZXJtaW9zLnRjc2V0YXR0cicpIGFzIHRjc2V0YXR0cjoKKyAgICAgICAgICAgIG9wZW4ucmV0dXJuX3ZhbHVlID0gMworICAgICAgICAgICAgZmFrZV9hdHRycyA9IFsyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NV0KKyAgICAgICAgICAgIHRjZ2V0YXR0ci5yZXR1cm5fdmFsdWUgPSBsaXN0KGZha2VfYXR0cnMpCisgICAgICAgICAgICBnZXRwYXNzLnVuaXhfZ2V0cGFzcygpCisgICAgICAgICAgICB0Y3NldGF0dHIuYXNzZXJ0X2NhbGxlZF93aXRoKDMsIG1vY2suQU5ZLCBmYWtlX2F0dHJzKQorCisgICAgZGVmIHRlc3RfZmFsbHNfYmFja190b19mYWxsYmFja19pZl90ZXJtaW9zX3JhaXNlcyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpIGFzIGZpbGVpbywgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLlRleHRJT1dyYXBwZXInKSBhcyB0ZXh0aW8sIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCd0ZXJtaW9zLnRjZ2V0YXR0cicpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y3NldGF0dHInKSBhcyB0Y3NldGF0dHIsIFwKKyAgICAgICAgICAgICAgICBtb2NrLnBhdGNoKCdnZXRwYXNzLmZhbGxiYWNrX2dldHBhc3MnKSBhcyBmYWxsYmFjazoKKyAgICAgICAgICAgIG9wZW4ucmV0dXJuX3ZhbHVlID0gMworICAgICAgICAgICAgZmlsZWlvLnJldHVybl92YWx1ZSA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgdGNzZXRhdHRyLnNpZGVfZWZmZWN0ID0gdGVybWlvcy5lcnJvcgorICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgZmFsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ1Bhc3N3b3JkOiAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGlvLnJldHVybl92YWx1ZSkKKworICAgIGRlZiB0ZXN0X2ZsdXNoZXNfc3RyZWFtX2FmdGVyX2lucHV0KHNlbGYpOgorICAgICAgICAjIGlzc3VlIDcyMDgKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ2lvLkZpbGVJTycpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgnaW8uVGV4dElPV3JhcHBlcicpLCBcCisgICAgICAgICAgICAgICAgbW9jay5wYXRjaCgndGVybWlvcy50Y2dldGF0dHInKSwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3Rlcm1pb3MudGNzZXRhdHRyJyk6CisgICAgICAgICAgICBvcGVuLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgICAgIG1vY2tfc3RyZWFtID0gbW9jay5Nb2NrKHNwZWM9U3RyaW5nSU8pCisgICAgICAgICAgICBnZXRwYXNzLnVuaXhfZ2V0cGFzcyhzdHJlYW09bW9ja19zdHJlYW0pCisgICAgICAgICAgICBtb2NrX3N0cmVhbS5mbHVzaC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgZGVmIHRlc3RfZmFsbHNfYmFja190b19zdGRpbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdvcy5vcGVuJykgYXMgb3Nfb3BlbiwgXAorICAgICAgICAgICAgICAgIG1vY2sucGF0Y2goJ3N5cy5zdGRpbicsIHNwZWM9U3RyaW5nSU8pIGFzIHN0ZGluOgorICAgICAgICAgICAgb3Nfb3Blbi5zaWRlX2VmZmVjdCA9IElPRXJyb3IKKyAgICAgICAgICAgIHN0ZGluLmZpbGVuby5zaWRlX2VmZmVjdCA9IEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhnZXRwYXNzLkdldFBhc3NXYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgZ2V0cGFzcy51bml4X2dldHBhc3MoKQorICAgICAgICAgICAgc3RkaW4ucmVhZGxpbmUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignV2FybmluZycsIHN0ZGVyci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUGFzc3dvcmQ6Jywgc3RkZXJyLmdldHZhbHVlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQppbmRleCBlYjlhZWI1Li5hNWFiOGQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dsb2IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CkBAIC0xNjksNiArMTY5LDI4IEBACiAgICAgICAgIGVxKGdsb2IuZ2xvYignXFxcXCpcXCpcXCcpLCBbXSkKICAgICAgICAgZXEoZ2xvYi5nbG9iKGInXFxcXCpcXCpcXCcpLCBbXSkKIAorICAgIGRlZiBjaGVja19lc2NhcGUoc2VsZiwgYXJnLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5lc2NhcGUoYXJnKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYi5lc2NhcGUob3MuZnNlbmNvZGUoYXJnKSksIG9zLmZzZW5jb2RlKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX2VzY2FwZQorICAgICAgICBjaGVjaygnYWJjJywgJ2FiYycpCisgICAgICAgIGNoZWNrKCdbJywgJ1tbXScpCisgICAgICAgIGNoZWNrKCc/JywgJ1s/XScpCisgICAgICAgIGNoZWNrKCcqJywgJ1sqXScpCisgICAgICAgIGNoZWNrKCdbW18vKj8qL19dXScsICdbW11bW11fL1sqXVs/XVsqXS9fXV0nKQorICAgICAgICBjaGVjaygnL1tbXy8qPyovX11dLycsICcvW1tdW1tdXy9bKl1bP11bKl0vX11dLycpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3QiKQorICAgIGRlZiB0ZXN0X2VzY2FwZV93aW5kb3dzKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfZXNjYXBlCisgICAgICAgIGNoZWNrKCc/Oj8nLCAnPzpbP10nKQorICAgICAgICBjaGVjaygnKjoqJywgJyo6WypdJykKKyAgICAgICAgY2hlY2socidcXD9cYzpcPycsIHInXFw/XGM6XFs/XScpCisgICAgICAgIGNoZWNrKHInXFwqXCpcKicsIHInXFwqXCpcWypdJykKKyAgICAgICAgY2hlY2soJy8vPy9jOi8/JywgJy8vPy9jOi9bP10nKQorICAgICAgICBjaGVjaygnLy8qLyovKicsICcvLyovKi9bKl0nKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEdsb2JUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weSBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDVlYWM5MjEuLmFlYWZjNjUKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMTMxLDYgKzEzMSwxNCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBiJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2V4Y2x1c2l2ZV93cml0ZShzZWxmKToKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGExICogNTApCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAneGInKQorCiAgICAgZGVmIHRlc3RfYnVmZmVyZWRfcmVhZGVyKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3NDcxOiBhIEd6aXBGaWxlIGNhbiBiZSB3cmFwcGVkIGluIGEgQnVmZmVyZWRSZWFkZXIgZm9yCiAgICAgICAgICMgcGVyZm9ybWFuY2UuCkBAIC0yMDYsNiArMjE0LDkgQEAKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3JiJykKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4JykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5teWZpbGVvYmoubW9kZSwgJ3hiJykKIAogICAgIGRlZiB0ZXN0XzE2NDc0ODQoc2VsZik6CiAgICAgICAgIGZvciBtb2RlIGluICgnd2InLCAncmInKToKQEAgLTM4OSw2ICs0MDAsMjAgQEAKICAgICAgICAgICAgIGRhdGFjID0gZ3ppcC5jb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnemlwLmRlY29tcHJlc3MoZGF0YWMpLCBkYXRhKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBkYXRhMSo1MAorICAgICAgICAjIERyb3AgdGhlIENSQyAoNCBieXRlcykgYW5kIGZpbGUgc2l6ZSAoNCBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IGd6aXAuY29tcHJlc3MoZGF0YSlbOi04XQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oZGF0YSkpLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKyAgICAgICAgIyBJbmNvbXBsZXRlIDEwLWJ5dGUgaGVhZGVyLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgyLCAxMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1pby5CeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX3dpdGhfZXh0cmEoc2VsZik6CiAgICAgICAgICMgR3ppcCBkYXRhIHdpdGggYW4gZXh0cmEgZmllbGQKICAgICAgICAgZ3pkYXRhID0gKGInXHgxZlx4OGJceDA4XHgwNFx4YjJceDE3Y1FceDAyXHhmZicKQEAgLTQwMCwzNSArNDI1LDU5IEBACiBjbGFzcyBUZXN0T3BlbihCYXNlVGVzdCk6CiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMSAqIDUwCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCAqIDIpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkKQorCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KICAgICAgICAgdW5jb21wcmVzc2VkID0gZGF0YTEgKiA1MAorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQgKiAyKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAieCIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4IikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMS5kZWNvZGUoImFzY2lpIikgKiA1MAogICAgICAgICB1bmNvbXByZXNzZWRfcmF3ID0gdW5jb21wcmVzc2VkLnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKQEAgLTQ2Myw2ICs1MTIsOCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CmluZGV4IGUzYWI2ZTQuLmY2NjU3YmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTEyLDYgKzEyLDQwIEBACiAKIElTXzY0QklUID0gc3lzLm1heHNpemUgPiAyKiozMgogCitkZWYgbGNnKHgsIGxlbmd0aD0xNik6CisgICAgIiIiTGluZWFyIGNvbmdydWVudGlhbCBnZW5lcmF0b3IiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBieXRlcyhsZW5ndGgpCisgICAgb3V0ID0gYnl0ZWFycmF5KGxlbmd0aCkKKyAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgorICAgICAgICB4ID0gKDIxNDAxMyAqIHggKyAyNTMxMDExKSAmIDB4N2ZmZmZmZmYKKyAgICAgICAgb3V0W2ldID0gKHggPj4gMTYpICYgMHhmZgorICAgIHJldHVybiBieXRlcyhvdXQpCisKK2RlZiBweXNpcGhhc2godWludDY0KToKKyAgICAiIiJDb252ZXJ0IFNpcEhhc2gyNCBvdXRwdXQgdG8gUHlfaGFzaF90CisgICAgIiIiCisgICAgYXNzZXJ0IDAgPD0gdWludDY0IDwgKDEgPDwgNjQpCisgICAgIyBzaW1wbGUgdW5zaWduZWQgdG8gc2lnbmVkIGludDY0CisgICAgaWYgdWludDY0ID4gKDEgPDwgNjMpIC0gMToKKyAgICAgICAgaW50NjQgPSB1aW50NjQgLSAoMSA8PCA2NCkKKyAgICBlbHNlOgorICAgICAgICBpbnQ2NCA9IHVpbnQ2NAorICAgICMgbWFuZ2xlIHVpbnQ2NCB0byB1aW50MzIKKyAgICB1aW50MzIgPSAodWludDY0IF4gdWludDY0ID4+IDMyKSAmIDB4ZmZmZmZmZmYKKyAgICAjIHNpbXBsZSB1bnNpZ25lZCB0byBzaWduZWQgaW50MzIKKyAgICBpZiB1aW50MzIgPiAoMSA8PCAzMSkgLSAxOgorICAgICAgICBpbnQzMiA9IHVpbnQzMiAtICgxIDw8IDMyKQorICAgIGVsc2U6CisgICAgICAgIGludDMyID0gdWludDMyCisgICAgcmV0dXJuIGludDMyLCBpbnQ2NAorCitkZWYgc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoKHRlc3QpOgorICAgICIiIlNraXAgZGVjb3JhdG9yIGZvciB0ZXN0cyB0aGF0IGRlcGVuZCBvbiBTaXBIYXNoMjQgb3IgRk5WIiIiCisgICAgb2sgPSBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSBpbiB7ImZudiIsICJzaXBoYXNoMjQifQorICAgIG1zZyA9ICJSZXF1aXJlcyBTaXBIYXNoMjQgb3IgRk5WIgorICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCisKIAogY2xhc3MgSGFzaEVxdWFsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMzgsNyArMTcyLDcgQEAKICAgICAjIGFuIG9iamVjdCB0byBiZSB0ZXN0ZWQKIAogICAgIGRlZiBnZXRfaGFzaF9jb21tYW5kKHNlbGYsIHJlcHJfKToKLSAgICAgICAgcmV0dXJuICdwcmludChoYXNoKCVzKSknICUgcmVwcl8KKyAgICAgICAgcmV0dXJuICdwcmludChoYXNoKGV2YWwoJXMuZGVjb2RlKCJ1dGYtOCIpKSkpJyAlIHJlcHJfLmVuY29kZSgidXRmLTgiKQogCiAgICAgZGVmIGdldF9oYXNoKHNlbGYsIHJlcHJfLCBzZWVkPU5vbmUpOgogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQpAQCAtMTYxLDEyICsxOTUsNjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChydW4xLCBydW4yKQogCiBjbGFzcyBTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cyhIYXNoUmFuZG9taXphdGlvblRlc3RzKToKKyAgICByZXByXyA9IE5vbmUKKyAgICByZXByX2xvbmcgPSBOb25lCisKKyAgICAjIDMyYml0IGxpdHRsZSwgNjRiaXQgbGl0dGxlLCAzMmJpdCBiaWcsIDY0Yml0IGJpZworICAgIGtub3duX2hhc2hlcyA9IHsKKyAgICAgICAgJ2RqYmEzM3gnOiBbICMgb25seSB1c2VkIGZvciBzbWFsbCBzdHJpbmdzCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFsxOTM0ODU5NjAsIDE5MzQ4NTk2MCwgIDE5MzQ4NTk2MCwgMTkzNDg1OTYwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiYycKKyAgICAgICAgICAgIFstNjc4OTY2MTk2LCA1NzM3NjM0MjYyNjMyMjMzNzIsIC04MjA0ODkzODgsIC00MjgyOTA1ODA0ODI2MDM5NjY1XSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICdzaXBoYXNoMjQnOiBbCisgICAgICAgICAgICAjIE5PVEU6IFB5VUNTMiBsYXlvdXQgZGVwZW5kcyBvbiBlbmRpYW5lc3MKKyAgICAgICAgICAgICMgc2VlZCAwLCAnYWJjJworICAgICAgICAgICAgWzExOTg1ODM1MTgsIDQ1OTYwNjkyMDA3MTAxMzU1MTgsIDExOTg1ODM1MTgsIDQ1OTYwNjkyMDA3MTAxMzU1MThdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjJworICAgICAgICAgICAgWzI3Mzg3Njg4NiwgLTQ1MDE2MTgxNTI1MjQ1NDQxMDYsIDI3Mzg3Njg4NiwgLTQ1MDE2MTgxNTI1MjQ1NDQxMDZdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjZGVmZ2hpamsnCisgICAgICAgICAgICBbLTE3NDUyMTUzMTMsIDQ0MzY3MTk1ODg4OTI4NzY5NzUsIC0xNzQ1MjE1MzEzLCA0NDM2NzE5NTg4ODkyODc2OTc1XSwKKyAgICAgICAgICAgICMgc2VlZCAwLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFs0OTM1NzA4MDYsIDU3NDk5ODY0ODQxODk2MTI3OTAsIC0xMDA2MzgxNTY0LCAtNTkxNTExMTQ1MDE5OTQ2ODU0MF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWy0xNjc3MTEwODE2LCAtMjk0Nzk4MTM0MjIyNzczODE0NCwgLTE4NjAyMDc3OTMsIC00Mjk2Njk5MjE3NjUyNTE2MDE3XSwKKyAgICAgICAgXSwKKyAgICAgICAgJ2Zudic6IFsKKyAgICAgICAgICAgICMgc2VlZCAwLCAnYWJjJworICAgICAgICAgICAgWy0xNjAwOTI1NTMzLCAxNDUzMDc5NzI5MTg4MDk4MjExLCAtMTYwMDkyNTUzMywKKyAgICAgICAgICAgICAxNDUzMDc5NzI5MTg4MDk4MjExXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiYycKKyAgICAgICAgICAgIFstMjA2MDc2Nzk5LCAtNDQxMDkxMTUwMjMwMzg3ODUwOSwgLTEwMjQwMTQ0NTcsCisgICAgICAgICAgICAgLTM1NzAxNTA5Njk0Nzk5OTQxMzBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnYWJjZGVmZ2hpamsnCisgICAgICAgICAgICBbODExMTM2NzUxLCAtNTA0NjIzMDA0OTM3NjExODc0NiwgLTc3MjA4MDUzICwKKyAgICAgICAgICAgICAtNDc3OTAyOTYxNTI4MTAxOTY2Nl0sCisgICAgICAgICAgICAjIHNlZWQgMCwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbNDQ0MDI4MTcsIDg5OTgyOTc1Nzk4NDU5ODc0MzEsIC0xOTU2MjQwMzMxLAorICAgICAgICAgICAgIC03ODI2OTc4ODg2MTQwNDc4ODddLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFstMjgzMDY2MzY1LCAtNDU3NjcyOTg4MzgyNDYwMTU0MywgLTI3MTg3MTQwNywgTm9uZV0sCisgICAgICAgIF0KKyAgICB9CisKKyAgICBkZWYgZ2V0X2V4cGVjdGVkX2hhc2goc2VsZiwgcG9zaXRpb24sIGxlbmd0aCk6CisgICAgICAgIGlmIGxlbmd0aCA8IHN5cy5oYXNoX2luZm8uY3V0b2ZmOgorICAgICAgICAgICAgYWxnb3JpdGhtID0gImRqYmEzM3giCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhbGdvcml0aG0gPSBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobQorICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICAgICAgcGxhdGZvcm0gPSAxIGlmIElTXzY0QklUIGVsc2UgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0KHN5cy5ieXRlb3JkZXIgPT0gJ2JpZycpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IDMgaWYgSVNfNjRCSVQgZWxzZSAyCisgICAgICAgIHJldHVybiBzZWxmLmtub3duX2hhc2hlc1thbGdvcml0aG1dW3Bvc2l0aW9uXVtwbGF0Zm9ybV0KKwogICAgIGRlZiB0ZXN0X251bGxfaGFzaChzZWxmKToKICAgICAgICAgIyBQWVRIT05IQVNIU0VFRD0wIGRpc2FibGVzIHRoZSByYW5kb21pemVkIGhhc2gKLSAgICAgICAgaWYgSVNfNjRCSVQ6Ci0gICAgICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IDE0NTMwNzk3MjkxODgwOTgyMTEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gLTE2MDA5MjU1MzMKKyAgICAgICAga25vd25faGFzaF9vZl9vYmogPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDAsIDMpCiAKICAgICAgICAgIyBSYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdDoKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8pLCBrbm93bl9oYXNoX29mX29iaikKQEAgLTE3NCwzOSArMjU5LDUzIEBACiAgICAgICAgICMgSXQgY2FuIGFsc28gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGUgc2VlZCB0byAwOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByXywgc2VlZD0wKSwga25vd25faGFzaF9vZl9vYmopCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZml4ZWRfaGFzaChzZWxmKToKICAgICAgICAgIyB0ZXN0IGEgZml4ZWQgc2VlZCBmb3IgdGhlIHJhbmRvbWl6ZWQgaGFzaAogICAgICAgICAjIE5vdGUgdGhhdCBhbGwgdHlwZXMgc2hhcmUgdGhlIHNhbWUgdmFsdWVzOgotICAgICAgICBpZiBJU182NEJJVDoKLSAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6Ci0gICAgICAgICAgICAgICAgaCA9IC00NDEwOTExNTAyMzAzODc4NTA5Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGggPSAtMzU3MDE1MDk2OTQ3OTk5NDEzMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKLSAgICAgICAgICAgICAgICBoID0gLTIwNjA3Njc5OQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBoID0gLTEwMjQwMTQ0NTcKKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8sIHNlZWQ9NDIpLCBoKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAorICAgIGRlZiB0ZXN0X2xvbmdfZml4ZWRfaGFzaChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZXByX2xvbmcgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgyLCAxMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl9sb25nLCBzZWVkPTQyKSwgaCkKKworCiBjbGFzcyBTdHJIYXNoUmFuZG9taXphdGlvblRlc3RzKFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcmVwcl8gPSByZXByKCdhYmMnKQorICAgIHJlcHJfbG9uZyA9IHJlcHIoJ2FiY2RlZmdoaWprJykKKyAgICByZXByX3VjczIgPSByZXByKCfDpMO64oiR4oSHJykKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgiIiksIDApCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCisgICAgZGVmIHRlc3RfdWNzMl9zdHJpbmcoc2VsZik6CisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDMsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfdWNzMiwgc2VlZD0wKSwgaCkKKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goNCwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl91Y3MyLCBzZWVkPTQyKSwgaCkKKwogY2xhc3MgQnl0ZXNIYXNoUmFuZG9taXphdGlvblRlc3RzKFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICByZXByXyA9IHJlcHIoYidhYmMnKQorICAgIHJlcHJfbG9uZyA9IHJlcHIoYidhYmNkZWZnaGlqaycpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYiIiKSwgMCkKIAogY2xhc3MgTWVtb3J5dmlld0hhc2hSYW5kb21pemF0aW9uVGVzdHMoU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcmVwcl8gPSAibWVtb3J5dmlldyhiJ2FiYycpIgorICAgIHJlcHJfbG9uZyA9ICJtZW1vcnl2aWV3KGInYWJjZGVmZ2hpamsnKSIKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChtZW1vcnl2aWV3KGIiIikpLCAwKQogCkBAIC0yMjQsNSArMzIzLDIyIEBACiAgICAgcmVwcl8gPSByZXByKGRhdGV0aW1lLnRpbWUoMCkpCiAKIAorY2xhc3MgSGFzaERpc3RyaWJ1dGlvblRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hhc2hfZGlzdHJpYnV0aW9uKHNlbGYpOgorICAgICAgICAjIGNoZWNrIGZvciBoYXNoIGNvbGxpc2lvbgorICAgICAgICBiYXNlID0gImFiY2RlZmdoYWJjZGVmZyIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKGJhc2UpKToKKyAgICAgICAgICAgIHByZWZpeCA9IGJhc2VbOmldCisgICAgICAgICAgICBzMTUgPSBzZXQoKQorICAgICAgICAgICAgczI1NSA9IHNldCgpCisgICAgICAgICAgICBmb3IgYyBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgICAgIGggPSBoYXNoKHByZWZpeCArIGNocihjKSkKKyAgICAgICAgICAgICAgICBzMTUuYWRkKGggJiAweGYpCisgICAgICAgICAgICAgICAgczI1NS5hZGQoaCAmIDB4ZmYpCisgICAgICAgICAgICAjIFNpcEhhc2gyNCBkaXN0cmlidXRpb24gZGVwZW5kcyBvbiBrZXksIHVzdWFsbHkgPiA2MCUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczE1KSwgOCwgcHJlZml4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMjU1KSwgMTI4LCBwcmVmaXgpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKaW5kZXggZjMzODVmNi4uNGE1ZWE3ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQpAQCAtMTgsMTEgKzE4LDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgXzRHLCBiaWdtZW10ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgXzRHLCBiaWdtZW10ZXN0LCBpbXBvcnRfZnJlc2hfbW9kdWxlCiAKICMgV2VyZSB3ZSBjb21waWxlZCAtLXdpdGgtcHlkZWJ1ZyBvciB3aXRoICNkZWZpbmUgUHlfREVCVUc/CiBDT01QSUxFRF9XSVRIX1BZREVCVUcgPSBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKQogCitjX2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgZnJlc2g9WydfaGFzaGxpYiddKQorcHlfaGFzaGxpYiA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ2hhc2hsaWInLCBibG9ja2VkPVsnX2hhc2hsaWInXSkKIAogZGVmIGhleHN0cihzKToKICAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCBieXRlcyksIHJlcHIocykKQEAgLTM2LDcgKzM4LDEwIEBACiBjbGFzcyBIYXNoTGliVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHN1cHBvcnRlZF9oYXNoX25hbWVzID0gKCAnbWQ1JywgJ01ENScsICdzaGExJywgJ1NIQTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMjI0JywgJ1NIQTIyNCcsICdzaGEyNTYnLCAnU0hBMjU2JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTNfMjI0JywgJ3NoYTNfMjU2JywgJ3NoYTNfMzg0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTNfNTEyJywgJ1NIQTNfMjI0JywgJ1NIQTNfMjU2JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NIQTNfMzg0JywgJ1NIQTNfNTEyJyApCiAKICAgICAjIElzc3VlICMxNDY5MzogZmFsbGJhY2sgbW9kdWxlcyBhcmUgYWx3YXlzIGNvbXBpbGVkIHVuZGVyIFBPU0lYCiAgICAgX3dhcm5fb25fZXh0ZW5zaW9uX2ltcG9ydCA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBvciBDT01QSUxFRF9XSVRIX1BZREVCVUcKQEAgLTcyLDI3ICs3NywzNyBAQAogICAgICAgICBpZiBfaGFzaGxpYjoKICAgICAgICAgICAgICMgVGhlc2UgdHdvIGFsZ29yaXRobXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IHdoZW4gdGhpcyBtb2R1bGUKICAgICAgICAgICAgICMgaXMgY29tcGlsZWQuICBJZiBub3QsIHNvbWV0aGluZyB3YXMgY29tcGlsZWQgd3JvbmcuCi0gICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykKLSAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9zaGExJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9tZDUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9zaGExJykpCiAgICAgICAgICAgICBmb3IgYWxnb3JpdGhtLCBjb25zdHJ1Y3RvcnMgaW4gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdC5pdGVtcygpOgogICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0YXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfJythbGdvcml0aG0sIE5vbmUpCiAgICAgICAgICAgICAgICAgaWYgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9ycy5hZGQoY29uc3RydWN0b3IpCiAKKyAgICAgICAgZGVmIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKG5hbWUpOgorICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKGhhc2hsaWIsICJfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yIikobmFtZSkKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbbmFtZV0uYWRkKGNvbnN0cnVjdG9yKQorCiAgICAgICAgIF9tZDUgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfbWQ1JykKICAgICAgICAgaWYgX21kNToKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ21kNSddLmFkZChfbWQ1Lm1kNSkKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdtZDUnKQogICAgICAgICBfc2hhMSA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGExJykKICAgICAgICAgaWYgX3NoYTE6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGExJ10uYWRkKF9zaGExLnNoYTEpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMScpCiAgICAgICAgIF9zaGEyNTYgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMjU2JykKICAgICAgICAgaWYgX3NoYTI1NjoKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTIyNCddLmFkZChfc2hhMjU2LnNoYTIyNCkKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTI1NiddLmFkZChfc2hhMjU2LnNoYTI1NikKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyMjQnKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTI1NicpCiAgICAgICAgIF9zaGE1MTIgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhNTEyJykKICAgICAgICAgaWYgX3NoYTUxMjoKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTM4NCddLmFkZChfc2hhNTEyLnNoYTM4NCkKLSAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTUxMiddLmFkZChfc2hhNTEyLnNoYTUxMikKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzODQnKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTUxMicpCisgICAgICAgIF9zaGEzID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTMnKQorICAgICAgICBpZiBfc2hhMzoKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzXzIyNCcpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhM18yNTYnKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTNfMzg0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzXzUxMicpCiAKICAgICAgICAgc3VwZXIoSGFzaExpYlRlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCiAKQEAgLTEyMSw4ICsxMzYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNobGliLm5ldywgMSkKIAogICAgIGRlZiB0ZXN0X2dldF9idWlsdGluX2NvbnN0cnVjdG9yKHNlbGYpOgotICAgICAgICBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciA9IGhhc2hsaWIuX19kaWN0X19bCi0gICAgICAgICAgICAgICAgJ19fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3InXQorICAgICAgICBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciA9IGdldGF0dHIoaGFzaGxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yJykKKyAgICAgICAgYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZSA9IGdldGF0dHIoaGFzaGxpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAndGVzdCcpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBfbWQ1CkBAIC0xMzAsNiArMTQ3LDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBUaGlzIGZvcmNlcyBhbiBJbXBvcnRFcnJvciBmb3IgImltcG9ydCBfbWQ1IiBzdGF0ZW1lbnRzCiAgICAgICAgIHN5cy5tb2R1bGVzWydfbWQ1J10gPSBOb25lCisgICAgICAgICMgY2xlYXIgdGhlIGNhY2hlCisgICAgICAgIGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUuY2xlYXIoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ21kNScpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0xMzgsMTMgKzE1NywyMyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19tZDUnXQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldF9idWlsdGluX2NvbnN0cnVjdG9yLCAzKQorICAgICAgICBjb25zdHJ1Y3RvciA9IGdldF9idWlsdGluX2NvbnN0cnVjdG9yKCdtZDUnKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbnN0cnVjdG9yLCBfbWQ1Lm1kNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZSksIFsnTUQ1JywgJ21kNSddKQogCiAgICAgZGVmIHRlc3RfaGV4ZGlnZXN0KHNlbGYpOgogICAgICAgICBmb3IgY29ucyBpbiBzZWxmLmhhc2hfY29uc3RydWN0b3JzOgogICAgICAgICAgICAgaCA9IGNvbnMoKQotICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaC5kaWdlc3QoKSwgYnl0ZXMpLCBuYW1lCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaC5kaWdlc3QoKSwgYnl0ZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleHN0cihoLmRpZ2VzdCgpKSwgaC5oZXhkaWdlc3QoKSkKIAorICAgIGRlZiB0ZXN0X25hbWVfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBmb3IgY29ucyBpbiBzZWxmLmhhc2hfY29uc3RydWN0b3JzOgorICAgICAgICAgICAgaCA9IGNvbnMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgubmFtZSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihoLm5hbWUsIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgaGFzaGxpYi5uZXcoaC5uYW1lKS5uYW1lKQorCiAgICAgZGVmIHRlc3RfbGFyZ2VfdXBkYXRlKHNlbGYpOgogICAgICAgICBhYXMgPSBiJ2EnICogMTI4CiAgICAgICAgIGJlZXMgPSBiJ2InICogMTI3CkBAIC0yMDUsNiArMjM0LDEwIEBACiAgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhMjU2JykKICAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGEzODQnKQogICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTUxMicpCisgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhM18yMjQnKQorICAgICAgICBzZWxmLmNoZWNrX25vX3VuaWNvZGUoJ3NoYTNfMjU2JykKKyAgICAgICAgc2VsZi5jaGVja19ub191bmljb2RlKCdzaGEzXzM4NCcpCisgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnc2hhM181MTInKQogCiAgICAgZGVmIGNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKHNlbGYsIG5hbWUsIGJsb2NrX3NpemU9MCwgZGlnZXN0X3NpemU9MCk6CiAgICAgICAgIGNvbnN0cnVjdG9ycyA9IHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbbmFtZV0KQEAgLTIxMyw4ICsyNDYsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5kaWdlc3QoKSksIGRpZ2VzdF9zaXplKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5hbWUubG93ZXIoKSwgbmFtZS5sb3dlcigpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkubG93ZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5uYW1lLCBuYW1lKQorICAgICAgICAgICAgIyBzcGxpdCBmb3Igc2hhM181MTIgLyBfc2hhMy5zaGEzIG9iamVjdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLnNwbGl0KCJfIilbMF0sIHJlcHIobSkpCiAKICAgICBkZWYgdGVzdF9ibG9ja3NpemVfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnbWQ1JywgNjQsIDE2KQpAQCAtMjIzLDYgKzI1NywxMCBAQAogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEyNTYnLCA2NCwgMzIpCiAgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTM4NCcsIDEyOCwgNDgpCiAgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTUxMicsIDEyOCwgNjQpCisgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTNfMjI0JywgTm90SW1wbGVtZW50ZWQsIDI4KQorICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdzaGEzXzI1NicsIE5vdEltcGxlbWVudGVkLCAzMikKKyAgICAgICAgc2VsZi5jaGVja19ibG9ja3NpemVfbmFtZSgnc2hhM18zODQnLCBOb3RJbXBsZW1lbnRlZCwgNDgpCisgICAgICAgIHNlbGYuY2hlY2tfYmxvY2tzaXplX25hbWUoJ3NoYTNfNTEyJywgTm90SW1wbGVtZW50ZWQsIDY0KQogCiAgICAgZGVmIHRlc3RfY2FzZV9tZDVfMChzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnbWQ1JywgYicnLCAnZDQxZDhjZDk4ZjAwYjIwNGU5ODAwOTk4ZWNmODQyN2UnKQpAQCAtMzU4LDYgKzM5NiwxMDggQEAKICAgICAgICAgICAiZTcxODQ4M2QwY2U3Njk2NDRlMmU0MmM3YmMxNWI0NjM4ZTFmOThiMTNiMjA0NDI4NTYzMmE4MDNhZmE5NzNlYiIrCiAgICAgICAgICAgImRlMGZmMjQ0ODc3ZWE2MGE0Y2IwNDMyY2U1NzdjMzFiZWIwMDljNWMyYzQ5YWEyZTRlYWRiMjE3YWQ4Y2MwOWIiKQogCisgICAgIyBTSEEtMyBmYW1pbHkKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjI0XzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjI0JywgYiIiLAorICAgICAgICAgICJGNzE4Mzc1MDJCQThFMTA4MzdCREQ4RDM2NUFEQjg1NTkxODk1NjAyRkM1NTJCNDhCNzM5MEFCRCIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjI0XzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjI0JywgYnl0ZXMuZnJvbWhleCgiQ0MiKSwKKyAgICAgICAgICAiQTlDQUI1OUVCNDBBMTBCMjQ2MjkwRjJENjA4NkUzMkUzNjg5RkFGMUQyNkI0NzBDODk5RjI4MDIiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGJ5dGVzLmZyb21oZXgoIjQxRkIiKSwKKyAgICAgICAgICAiNjE1QkEzNjdBRkRDMzVBQUMzOTdCQzdFQjVENThEMTA2QTczNEIyNDk4NkQ1RDk3OEZFRkQ2MkMiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzIyNF8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGJ5dGVzLmZyb21oZXgoCisgICAgICAgICAgICAiNDMzQzUzMDMxMzE2MjRDMDAyMUQ4NjhBMzA4MjU0NzVFOEQwQkQzMDUyQTAyMjE4MDM5OEY0Q0E0NDIzQjkiKworICAgICAgICAgICAgIjgyMTRCNkJFQUFDMjFDODgwN0EyQzMzRjhDOTNCRDQyQjA5MkNDMUIwNkNFREYzMjI0RDVFRDFFQzI5Nzg0IisKKyAgICAgICAgICAgICI0NDRGMjJFMDhBNTVBQTU4NTQyQjUyNEIwMkNEM0Q1RDVGNjkwN0FGRTcxQzVENzQ2MjIyNEEzRjlEOUU1MyIrCisgICAgICAgICAgICAiRTdFMDg0NkRDQkI0Q0UiKSwKKyAgICAgICAgICAiNjJCMTBGMUI2MjM2RUJDMkRBNzI5NTc3NDJBOEQ0RTQ4RTIxM0I1Rjg5MzQ2MDRCRkQ0RDJDM0EiKQorCisgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcgKyA1LCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjI0X2h1Z2Uoc2VsZiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPT0gXzRHICsgNToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzIyNCcsIGInQScqc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc1OGVmNjAwNTdjOWRkZGI2YTg3NDc3ZTlhY2U1YTI2ZjBkOWRiMDE4ODFjZjliMTBhOWY4YzIyNCcpCisgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzICMgMzItYml0IGFyY2gKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzI1Nl8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzI1NicsIGIiIiwKKyAgICAgICAgICAiQzVEMjQ2MDE4NkY3MjMzQzkyN0U3REIyRENDNzAzQzBFNTAwQjY1M0NBODIyNzNCN0JGQUQ4MDQ1RDg1QTQ3MCIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjU2XzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjU2JywgYnl0ZXMuZnJvbWhleCgiQ0MiKSwKKyAgICAgICAgICAiRUVBRDZEQkZDNzM0MEE1NkNBRURDMDQ0Njk2QTE2ODg3MDU0OUE2QTdGNkY1Njk2MUU4NEE1NEJEOTk3MEI4QSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMjU2XzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMjU2JywgYnl0ZXMuZnJvbWhleCgiNDFGQiIpLAorICAgICAgICAgICJBOEVBQ0VEQTRENDdCMzI4MUE3OTVBRDlFMUVBMjEyMkI0MDdCQUY5QUFCQ0I5RTE4QjU3MTdCNzg3MzUzN0QyIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM18yNTZfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM18yNTYnLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIkNFODdBNTE3M0JGRkQ5MjM5OTIyMTY1OEY4MDFENDVDMjk0RDkwMDZFRTlGM0Y5RDQxOUM4RDQyNzc0OERDNDEiKQorCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMzg0XzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMzg0JywgYiIiLAorICAgICAgICAgICIyQzIzMTQ2QTYzQTI5QUNGOTlFNzNCODhGOEMyNEVBQTdEQzYwQUE3NzE3ODBDQ0MwMDZBRkJGQThGRTI0NzlCIisKKyAgICAgICAgICAiMkREMkIyMTM2MjMzNzQ0MUFDMTJCNTE1OTExOTU3RkYiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIjFCODRFNjJBNDZFNUEyMDE4NjE3NTRBRjVEQzk1QzRBMUE2OUNBRjRBNzk2QUU0MDU2ODAxNjFFMjk1NzI2NDEiKworICAgICAgICAgICJGNUZBMUU4NjQxRDc5NTgzMzZFRTdCMTFDNThGNzNFOSIpCisKKyAgICBkZWYgdGVzdF9jYXNlX3NoYTNfMzg0XzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3NoYTNfMzg0JywgYnl0ZXMuZnJvbWhleCgiNDFGQiIpLAorICAgICAgICAgICI0OTVDQ0UyNzE0Q0Q3MkM4QzUzQzMzNjNEMjJDNThCNTU5NjBGRTI2QkUwQkYzQkJDN0EzMzE2REQ1NjNBRDFEIisKKyAgICAgICAgICAiQjg0MTBFNzVFRUZFQTY1NUUzOUQ0NjcwRUMwQjE3OTIiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzM4NF8zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzM4NCcsIGJ5dGVzLmZyb21oZXgoCisgICAgICAgICAgICAiNDMzQzUzMDMxMzE2MjRDMDAyMUQ4NjhBMzA4MjU0NzVFOEQwQkQzMDUyQTAyMjE4MDM5OEY0Q0E0NDIzQjkiKworICAgICAgICAgICAgIjgyMTRCNkJFQUFDMjFDODgwN0EyQzMzRjhDOTNCRDQyQjA5MkNDMUIwNkNFREYzMjI0RDVFRDFFQzI5Nzg0IisKKyAgICAgICAgICAgICI0NDRGMjJFMDhBNTVBQTU4NTQyQjUyNEIwMkNEM0Q1RDVGNjkwN0FGRTcxQzVENzQ2MjIyNEEzRjlEOUU1MyIrCisgICAgICAgICAgICAiRTdFMDg0NkRDQkI0Q0UiKSwKKyAgICAgICAgICAiMTM1MTE0NTA4REQ2M0UyNzlFNzA5QzI2Rjc4MTdDMDQ4Mjc2NkNERTQ5MTMyRTNFREYyRUVERDg5OTZGNEUzNSIrCisgICAgICAgICAgIjk2RDE4NDEwMEIzODQ4NjgyNDlGMUQ4QjhGREFBMkM5IikKKworCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzUxMl8wKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzUxMicsIGIiIiwKKyAgICAgICAgICAiMEVBQjQyREU0QzNDRUI5MjM1RkM5MUFDRkZFNzQ2QjI5QzI5QThDMzY2QjdDNjBFNEU2N0M0NjZGMzZBNDMwNCIrCisgICAgICAgICAgIkMwMEZBOUNBRjlEODc5NzZCQTQ2OUJDQkUwNjcxM0I0MzVGMDkxRUYyNzY5RkIxNjBDREFCMzNEMzY3MDY4MEUiKQorCisgICAgZGVmIHRlc3RfY2FzZV9zaGEzXzUxMl8xKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdzaGEzXzUxMicsIGJ5dGVzLmZyb21oZXgoIkNDIiksCisgICAgICAgICAgIjg2MzBDMTNDQkQwNjZFQTc0QkJFN0ZFNDY4RkVDMURFRTEwRURDMTI1NEZCNEMxQjdDNUZENjlCNjQ2RTQ0MTYiKworICAgICAgICAgICIwQjhDRTAxRDA1QTA5MDhDQTc5MERGQjA4MEY0QjUxM0JDM0I2MjI1RUNFN0E4MTAzNzE0NDFBNUFDNjY2RUI5IikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBieXRlcy5mcm9taGV4KCI0MUZCIiksCisgICAgICAgICAgIjU1MURBNjIzNkY4Qjk2RkNFOUY5N0YxMTkwRTkwMTMyNEYwQjQ1RTA2REJCQjVDREI4MzU1RDZFRDFEQzM0QjMiKworICAgICAgICAgICJGMEVBRTdEQ0I2ODYyMkZGMjMyRkEzQ0VDRTBENDYxNkNERUIzOTMxRjkzODAzNjYyQTI4REYxQ0Q1MzVCNzMxIikKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2hhM181MTJfMyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnc2hhM181MTInLCBieXRlcy5mcm9taGV4KAorICAgICAgICAgICAgIjQzM0M1MzAzMTMxNjI0QzAwMjFEODY4QTMwODI1NDc1RThEMEJEMzA1MkEwMjIxODAzOThGNENBNDQyM0I5IisKKyAgICAgICAgICAgICI4MjE0QjZCRUFBQzIxQzg4MDdBMkMzM0Y4QzkzQkQ0MkIwOTJDQzFCMDZDRURGMzIyNEQ1RUQxRUMyOTc4NCIrCisgICAgICAgICAgICAiNDQ0RjIyRTA4QTU1QUE1ODU0MkI1MjRCMDJDRDNENUQ1RjY5MDdBRkU3MUM1RDc0NjIyMjRBM0Y5RDlFNTMiKworICAgICAgICAgICAgIkU3RTA4NDZEQ0JCNENFIiksCisgICAgICAgICAgIjUyN0QyOEUzNDFFNkIxNEY0Njg0QURCNEI4MjRDNDk2QzY0ODJFNTExNDk1NjVEM0QxNzIyNjgyODg4NDMwNkIiKworICAgICAgICAgICI1MUQ2MTQ4QTcyNjIyQzJCNzVGNUQzNTEwQjc5OUQ4QkRDMDNFQUVERTQ1MzY3NkE2RUM4RkUwM0ExQUQwRUFCIikKKworCiAgICAgZGVmIHRlc3RfZ2lsKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoaW5ncyB3b3JrIGZpbmUgd2l0aCBhbiBpbnB1dCBsYXJnZXIgdGhhbiB0aGUgc2l6ZSByZXF1aXJlZAogICAgICAgICAjIGZvciBtdWx0aXRocmVhZGVkIG9wZXJhdGlvbiAod2hpY2ggaXMgaGFyZHdpcmVkIHRvIDIwNDgpLgpAQCAtNDA2LDggKzU0Niw4IEBACiAgICAgICAgIGV2ZW50cyA9IFtdCiAgICAgICAgIGZvciB0aHJlYWRudW0gaW4gcmFuZ2UobnVtX3RocmVhZHMpOgogICAgICAgICAgICAgY2h1bmtfc2l6ZSA9IGxlbihkYXRhKSAvLyAoMTAqKnRocmVhZG51bSkKLSAgICAgICAgICAgIGFzc2VydCBjaHVua19zaXplID4gMAotICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgJSBsZW4oc21hbGxlc3RfZGF0YSkgPT0gMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGNodW5rX3NpemUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNodW5rX3NpemUgJSBsZW4oc21hbGxlc3RfZGF0YSksIDApCiAgICAgICAgICAgICBldmVudCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgICAgICBldmVudHMuYXBwZW5kKGV2ZW50KQogICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9aGFzaF9pbl9jaHVua3MsCkBAIC00MTgsOCArNTU4LDk1IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZF9oYXNoLCBoYXNoZXIuaGV4ZGlnZXN0KCkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChIYXNoTGliVGVzdENhc2UpCisKK2NsYXNzIEtERlRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHBia2RmMl90ZXN0X3ZlY3RvcnMgPSBbCisgICAgICAgIChiJ3Bhc3N3b3JkJywgYidzYWx0JywgMSwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkJywgYidzYWx0JywgMiwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkJywgYidzYWx0JywgNDA5NiwgTm9uZSksCisgICAgICAgICMgdG9vIHNsb3csIGl0IHRha2VzIG92ZXIgYSBtaW51dGUgb24gYSBmYXN0IENQVS4KKyAgICAgICAgIyhiJ3Bhc3N3b3JkJywgYidzYWx0JywgMTY3NzcyMTYsIE5vbmUpLAorICAgICAgICAoYidwYXNzd29yZFBBU1NXT1JEcGFzc3dvcmQnLCBiJ3NhbHRTQUxUc2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdCcsCisgICAgICAgICA0MDk2LCAtMSksCisgICAgICAgIChiJ3Bhc3NcMHdvcmQnLCBiJ3NhXDBsdCcsIDQwOTYsIDE2KSwKKyAgICBdCisKKyAgICBwYmtkZjJfcmVzdWx0cyA9IHsKKyAgICAgICAgInNoYTEiOiBbCisgICAgICAgICAgICAjIG9mZmljYWwgdGVzdCB2ZWN0b3JzIGZyb20gUkZDIDYwNzAKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCcwYzYwYzgwZjk2MWYwZTcxZjNhOWI1MjRhZjYwMTIwNjJmZTAzN2E2JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2VhNmMwMTRkYzcyZDZmOGNjZDFlZDkyYWNlMWQ0MWYwZDhkZTg5NTcnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnNGIwMDc5MDFiNzY1NDg5YWJlYWQ0OWQ5MjZmNzIxZDA2NWE0MjljMScpLCBOb25lKSwKKyAgICAgICAgICAgICMoYnl0ZXMuZnJvbWhleCgnZWVmZTNkNjFjZDRkYTRlNGU5OTQ1YjNkNmJhMjE1OGMyNjM0ZTk4NCcpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCczZDJlZWM0ZmU0MWM4NDliODBjOGQ4MzY2MmMwZTQ0YThiMjkxYTk2NGMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZjJmMDcwMzgnKSwgMjUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzU2ZmE2YWE3NTU0ODA5OWRjYzM3ZDdmMDM0MjVlMGMzJyksIE5vbmUpLF0sCisgICAgICAgICJzaGEyNTYiOiBbCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnMTIwZmI2Y2ZmY2Y4YjMyYzQzZTcyMjUyNTZjNGY4MzcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYTg2NTQ4YzkyY2NjMzU0ODA4MDU5ODdjYjcwYmUxN2InKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnYWU0ZDBjOTVhZjZiNDZkMzJkMGFkZmY5MjhmMDZkZDAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMmEzMDNmOGVmM2MyNTFkZmQ2ZTJkODVhOTU0NzRjNDMnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnYzVlNDc4ZDU5Mjg4Yzg0MWFhNTMwZGI2ODQ1YzRjOGQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTYyODkzYTAwMWNlNGUxMWE0OTYzODczYWE5ODEzNGEnKSwgTm9uZSksCisgICAgICAgICAgICAjKGJ5dGVzLmZyb21oZXgoJ2NmODFjNjZmZThjZmMwNGQxZjMxZWNiNjVkYWI0MDg5JworICAgICAgICAgICAgIyAgICAgICAgICAgICAgICdmN2YxNzllODliM2IwYmNiMTdhZDEwZTNhYzZlYmE0NicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCczNDhjODlkYmNiZDMyYjJmMzJkODE0YjgxMTZlODRjZjJiMTcnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMzQ3ZWJjMTgwMDE4MWM0ZTJhMWZiOGRkNTNlMWM2MzU1MThjN2RhYzQ3ZTknKSwgNDApLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzg5YjY5ZDA1MTZmODI5ODkzYzY5NjIyNjY1MGE4Njg3JyksIE5vbmUpLF0sCisgICAgICAgICJzaGE1MTIiOiBbCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnODY3ZjcwY2YxYWRlMDJjZmYzNzUyNTk5YTNhNTNkYzRhZjM0YzdhNjY5ODE1YWU1JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Q1MTM1NTRlMWM4Y2YyNTJjMDJkNDcwYTI4NWEwNTAxYmFkOTk5YmZlOTQzYzA4ZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcwNTAyMzVkN2Q2OGIxZGE1NWU2M2Y3M2I2MGE1N2ZjZScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdlMWQ5YzE2YWE2ODE3MDhhNDVmNWM3YzRlMjE1Y2ViNjZlMDExYTJlOWYwMDQwNzEnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnM2YxOGFlZmRiODY2ZDUzY2Y3NmNhYjI4NjhhMzliOWY3ODQwZWRjZTRmZWY1YTgyJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlNjczMzVjNzdhNjA2OGUwNDExMjc1NGYyN2NjZjRlJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2QxOTdiMWIzM2RiMDE0M2UwMThiMTJmM2QxZDE0NzllNmNkZWJkY2M5N2M1YzBmOCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc3ZjY5MDJlMDcyZjQ1N2I1MTQzZjMwNjAyNjQxYjNkNTVjZDMzNTk4OGNiMzZiODQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnMzc2MDYwZWNkNTMyZTAzOWI3NDJhMjM5NDM0YWYyZDUnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnOGMwNTExZjRjNmU1OTdjNmFjNjMxNWQ4ZjAzNjJlMjI1ZjNjNTAxNDk1YmEyM2I4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzY4YzAwNTE3NGRjNGVlNzExMTViNTlmOWU2MGNkOTUzMmZhMzNlMGY3NWFlZmUzMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcyMjVjNTgzYTE4NmNkODJiZDRkYWVhOTcyNGEzZDNiOCcpLCA2NCksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnOWQ5ZTljNGNkMjFmZTRiZTI0ZDViODI0NGM3NTk2NjUnKSwgTm9uZSksXSwKKyAgICB9CisKKyAgICBkZWYgX3Rlc3RfcGJrZGYyX2htYWMoc2VsZiwgcGJrZGYyKToKKyAgICAgICAgZm9yIGRpZ2VzdF9uYW1lLCByZXN1bHRzIGluIHNlbGYucGJrZGYyX3Jlc3VsdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGZvciBpLCB2ZWN0b3IgaW4gZW51bWVyYXRlKHNlbGYucGJrZGYyX3Rlc3RfdmVjdG9ycyk6CisgICAgICAgICAgICAgICAgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4gPSB2ZWN0b3IKKyAgICAgICAgICAgICAgICBleHBlY3RlZCwgb3ZlcndyaXRlX2RrbGVuID0gcmVzdWx0c1tpXQorICAgICAgICAgICAgICAgIGlmIG92ZXJ3cml0ZV9ka2xlbjoKKyAgICAgICAgICAgICAgICAgICAgZGtsZW4gPSBvdmVyd3JpdGVfZGtsZW4KKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4pKQorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgbWVtb3J5dmlldyhwYXNzd29yZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoc2FsdCksIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBieXRlYXJyYXkocGFzc3dvcmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoc2FsdCksIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIGRrbGVuIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYmtkZjIsIGInc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGJrZGYyLCAnc2hhMScsICdwYXNzJywgJ3NhbHQnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGJrZGYyLCAnc2hhMScsIGIncGFzcycsIGInc2FsdCcsIDEsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3Vuc3VwcG9ydGVkIGhhc2ggdHlwZScpOgorICAgICAgICAgICAgcGJrZGYyKCd1bmtub3duJywgYidwYXNzJywgYidzYWx0JywgMSkKKworICAgIGRlZiB0ZXN0X3Bia2RmMl9obWFjX3B5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Bia2RmMl9obWFjKHB5X2hhc2hsaWIucGJrZGYyX2htYWMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGNfaGFzaGxpYiwgJ3Bia2RmMl9obWFjJyksCisgICAgICAgICAgICAgICAgICAgICAnICAgdGVzdCByZXF1aXJlcyBPcGVuU1NMID4gMS4wJykKKyAgICBkZWYgdGVzdF9wYmtkZjJfaG1hY19jKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3Bia2RmMl9obWFjKGNfaGFzaGxpYi5wYmtkZjJfaG1hYykKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2htYWMucHkgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKaW5kZXggNGNhN2NlYy4uY2RlNTZmZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQpAQCAtMSwxNyArMSwzOSBAQAoraW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGhtYWMKIGltcG9ydCBoYXNobGliCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKKworZGVmIGlnbm9yZV93YXJuaW5nKGZ1bmMpOgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PVBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIHdyYXBwZXIKKworCiBjbGFzcyBUZXN0VmVjdG9yc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21kNV92ZWN0b3JzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIEhNQUMgbW9kdWxlIGFnYWluc3QgdGVzdCB2ZWN0b3JzIGZyb20gdGhlIFJGQy4KIAogICAgICAgICBkZWYgbWQ1dGVzdChrZXksIGRhdGEsIGRpZ2VzdCk6Ci0gICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSkKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaGxpYi5tZDUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtbWQ1IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9J21kNScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtbWQ1IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMTYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKIAogICAgICAgICBtZDV0ZXN0KGIiXHgwYiIgKiAxNiwKICAgICAgICAgICAgICAgICBiIkhpIFRoZXJlIiwKQEAgLTQ2LDYgKzY4LDE2IEBACiAgICAgICAgIGRlZiBzaGF0ZXN0KGtleSwgZGF0YSwgZGlnZXN0KToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaGxpYi5zaGExKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdC51cHBlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsICJobWFjLXNoYTEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAyMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD0nc2hhMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtc2hhMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDIwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCiAKICAgICAgICAgc2hhdGVzdChiIlx4MGIiICogMjAsCiAgICAgICAgICAgICAgICAgYiJIaSBUaGVyZSIsCkBAIC03NiwxMCArMTA4LDIxIEBACiAgICAgICAgICAgICAgICAgIGIiYW5kIExhcmdlciBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiKSwKICAgICAgICAgICAgICAgICAiZThlOTlkMGY0NTIzN2Q3ODZkNmJiYWE3OTY1Yzc4MDhiYmZmMWE5MSIpCiAKLSAgICBkZWYgX3JmYzQyMzFfdGVzdF9jYXNlcyhzZWxmLCBoYXNoZnVuYyk6CisgICAgZGVmIF9yZmM0MjMxX3Rlc3RfY2FzZXMoc2VsZiwgaGFzaGZ1bmMsIGhhc2hfbmFtZSwgZGlnZXN0X3NpemUsIGJsb2NrX3NpemUpOgogICAgICAgICBkZWYgaG1hY3Rlc3Qoa2V5LCBkYXRhLCBoZXhkaWdlc3RzKToKKyAgICAgICAgICAgIGhtYWNfbmFtZSA9ICJobWFjLSIgKyBoYXNoX25hbWUKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaGZ1bmMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkubG93ZXIoKSwgaGV4ZGlnZXN0c1toYXNoZnVuY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgaG1hY19uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCBkaWdlc3Rfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCBibG9ja19zaXplKQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPWhhc2hfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS5sb3dlcigpLCBoZXhkaWdlc3RzW2hhc2hmdW5jXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBobWFjX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCisKIAogICAgICAgICAjIDQuMi4gIFRlc3QgQ2FzZSAxCiAgICAgICAgIGhtYWN0ZXN0KGtleSA9IGInXHgwYicqMjAsCkBAIC0xODksMTYgKzIzMiwxNiBAQAogICAgICAgICAgICAgICAgICB9KQogCiAgICAgZGVmIHRlc3Rfc2hhMjI0X3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTIyNCkKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjI0LCAnc2hhMjI0JywgMjgsIDY0KQogCiAgICAgZGVmIHRlc3Rfc2hhMjU2X3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTI1NikKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjU2LCAnc2hhMjU2JywgMzIsIDY0KQogCiAgICAgZGVmIHRlc3Rfc2hhMzg0X3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTM4NCkKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMzg0LCAnc2hhMzg0JywgNDgsIDEyOCkKIAogICAgIGRlZiB0ZXN0X3NoYTUxMl9yZmM0MjMxKHNlbGYpOgotICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGE1MTIpCisgICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTUxMiwgJ3NoYTUxMicsIDY0LCAxMjgpCiAKICAgICBkZWYgdGVzdF9sZWdhY3lfYmxvY2tfc2l6ZV93YXJuaW5ncyhzZWxmKToKICAgICAgICAgY2xhc3MgTW9ja0NyYXp5SGFzaChvYmplY3QpOgpAQCAtMjIyLDQ2ICsyNjUsNzQgQEAKICAgICAgICAgICAgICAgICBobWFjLkhNQUMoYidhJywgYidiJywgZGlnZXN0bW9kPU1vY2tDcmF6eUhhc2gpCiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCB3YXJuaW5nIGFib3V0IHNtYWxsIGJsb2NrX3NpemUnKQogCisgICAgZGVmIHRlc3Rfd2l0aF9kaWdlc3Rtb2Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAga2V5ID0gYiJceDBiIiAqIDE2CisgICAgICAgICAgICBkYXRhID0gYiJIaSBUaGVyZSIKKyAgICAgICAgICAgIGRpZ2VzdCA9ICI5Mjk0NzI3QTM2MzhCQjFDMTNGNDhFRjgxNThCRkM5RCIKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLnVwcGVyKCksIGRpZ2VzdCkKIAogCiBjbGFzcyBDb25zdHJ1Y3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X25vcm1hbChzZWxmKToKICAgICAgICAgIyBTdGFuZGFyZCBjb25zdHJ1Y3RvciBjYWxsLgogICAgICAgICBmYWlsZWQgPSAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoYiJrZXkiKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwgcmFpc2VkIGV4Y2VwdGlvbi4iKQogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfd2l0aF9zdHJfa2V5KHNlbGYpOgogICAgICAgICAjIFBhc3MgYSBrZXkgb2YgdHlwZSBzdHIsIHdoaWNoIGlzIGFuIGVycm9yLCBiZWNhdXNlIGl0IGV4cGVjdHMgYSBrZXkKICAgICAgICAgIyBvZiB0eXBlIGJ5dGVzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGggPSBobWFjLkhNQUMoImtleSIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF9kb3RfbmV3X3dpdGhfc3RyX2tleShzZWxmKToKICAgICAgICAgIyBQYXNzIGEga2V5IG9mIHR5cGUgc3RyLCB3aGljaCBpcyBhbiBlcnJvciwgYmVjYXVzZSBpdCBleHBlY3RzIGEga2V5CiAgICAgICAgICMgb2YgdHlwZSBieXRlcwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBoID0gaG1hYy5uZXcoImtleSIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF93aXRodGV4dChzZWxmKToKICAgICAgICAgIyBDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dC4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIsIGIiaGFzaCB0aGlzISIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIHRleHQgYXJndW1lbnQgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCisKKyAgICBkZWYgdGVzdF93aXRoX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhieXRlYXJyYXkoYiJrZXkiKSwgYnl0ZWFycmF5KGIiaGFzaCB0aGlzISIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdlc3Rtb2Q9Im1kNSIpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBieXRlYXJyYXkgYXJndW1lbnRzIHJhaXNlZCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9tZW1vcnl2aWV3X21zZyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIsIG1lbW9yeXZpZXcoYiJoYXNoIHRoaXMhIiksIGRpZ2VzdG1vZD0ibWQ1IikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIG1lbW9yeXZpZXcgbXNnIHJhaXNlZCBleGNlcHRpb24uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLCAnMzQzMjViNjM5ZGE0Y2ZkOTU3MzViMzgxZTI4Y2I4NjQnKQogCiAgICAgZGVmIHRlc3Rfd2l0aG1vZHVsZShzZWxmKToKICAgICAgICAgIyBDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhbmQgZGlnZXN0IG1vZHVsZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIsIGIiIiwgaGFzaGxpYi5zaGExKQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvbnN0cnVjdG9yIGNhbGwgd2l0aCBoYXNobGliLnNoYTEgcmFpc2VkIGV4Y2VwdGlvbi4iKQogCiBjbGFzcyBTYW5pdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX21kNShzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIEhNQUMgZGVmYXVsdHMgdG8gTUQ1IGFsZ29yaXRobS4KICAgICAgICAgIyBOT1RFOiB0aGlzIHdoaXRlYm94IHRlc3QgZGVwZW5kcyBvbiB0aGUgaG1hYyBjbGFzcyBpbnRlcm5hbHMKQEAgLTI3MiwxOSArMzQzLDE5IEBACiAgICAgICAgICMgRXhlcmNpc2luZyBhbGwgbWV0aG9kcyBvbmNlLgogICAgICAgICAjIFRoaXMgbXVzdCBub3QgcmFpc2UgYW55IGV4Y2VwdGlvbnMKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiIm15IHNlY3JldCBrZXkiKQorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiIm15IHNlY3JldCBrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgICAgICBoLnVwZGF0ZShiImNvbXB1dGUgdGhlIGhhc2ggb2YgdGhpcyB0ZXh0ISIpCiAgICAgICAgICAgICBkaWcgPSBoLmRpZ2VzdCgpCiAgICAgICAgICAgICBkaWcgPSBoLmhleGRpZ2VzdCgpCiAgICAgICAgICAgICBoMiA9IGguY29weSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgbm9ybWFsIHVzYWdlIG9mIEhNQUMgY2xhc3MuIikKIAogY2xhc3MgQ29weVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiBhdHRyaWJ1dGVzIGFyZSBvZiBzYW1lIHR5cGUuCi0gICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IikKKyAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMS5kaWdlc3RfY29ucyA9PSBoMi5kaWdlc3RfY29ucywKICAgICAgICAgICAgICJkaWdlc3QgY29uc3RydWN0b3JzIGRvbid0IG1hdGNoLiIpCkBAIC0yOTUsNyArMzY2LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlYWxjb3B5KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgdGhlIGNvcHkgbWV0aG9kIGNyZWF0ZWQgYSByZWFsIGNvcHkuCi0gICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IikKKyAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgICMgVXNpbmcgaWQoKSBpbiBjYXNlIHNvbWVib2R5IGhhcyBvdmVycmlkZGVuIF9fZXFfXy9fX25lX18uCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZChoMSkgIT0gaWQoaDIpLCAiTm8gcmVhbCBjb3B5IG9mIHRoZSBITUFDIGluc3RhbmNlLiIpCkBAIC0zMDYsNyArMzc3LDcgQEAKIAogICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgdGhlIGNvcHkgaGFzIHRoZSBzYW1lIGRpZ2VzdHMuCi0gICAgICAgIGgxID0gaG1hYy5ITUFDKGIia2V5IikKKyAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiLCBkaWdlc3Rtb2Q9Im1kNSIpCiAgICAgICAgIGgxLnVwZGF0ZShiInNvbWUgcmFuZG9tIHRleHQiKQogICAgICAgICBoMiA9IGgxLmNvcHkoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLmRpZ2VzdCgpLCBoMi5kaWdlc3QoKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQppbmRleCAzMGRhYzU4Li41ZTlmMzgyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0bWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CkBAIC0xNiw5ICsxNiw4OSBAQAogICAgICAgICAgICAgaHRtbC5lc2NhcGUoJ1wnPHNjcmlwdD4iJmZvbzsiPC9zY3JpcHQ+XCcnLCBGYWxzZSksCiAgICAgICAgICAgICAnXCcmbHQ7c2NyaXB0Jmd0OyImYW1wO2ZvbzsiJmx0Oy9zY3JpcHQmZ3Q7XCcnKQogCisgICAgZGVmIHRlc3RfdW5lc2NhcGUoc2VsZik6CisgICAgICAgIG51bWVyaWNfZm9ybWF0cyA9IFsnJiMlZCcsICcmIyVkOycsICcmI3gleCcsICcmI3gleDsnXQorICAgICAgICBlcnJtc2cgPSAndW5lc2NhcGUoJXIpIHNob3VsZCBoYXZlIHJldHVybmVkICVyJworICAgICAgICBkZWYgY2hlY2sodGV4dCwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLnVuZXNjYXBlKHRleHQpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm1zZyAlICh0ZXh0LCBleHBlY3RlZCkpCisgICAgICAgIGRlZiBjaGVja19udW0obnVtLCBleHBlY3RlZCk6CisgICAgICAgICAgICBmb3IgZm9ybWF0IGluIG51bWVyaWNfZm9ybWF0czoKKyAgICAgICAgICAgICAgICB0ZXh0ID0gZm9ybWF0ICUgbnVtCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodG1sLnVuZXNjYXBlKHRleHQpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz1lcnJtc2cgJSAodGV4dCwgZXhwZWN0ZWQpKQorICAgICAgICAjIGNoZWNrIHRleHQgd2l0aCBubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcworICAgICAgICBjaGVjaygnbm8gY2hhcmFjdGVyIHJlZmVyZW5jZXMnLCAnbm8gY2hhcmFjdGVyIHJlZmVyZW5jZXMnKQorICAgICAgICAjIGNoZWNrICYgZm9sbG93ZWQgYnkgaW52YWxpZCBjaGFycworICAgICAgICBjaGVjaygnJlxuJlx0JiAmJicsICcmXG4mXHQmICYmJykKKyAgICAgICAgIyBjaGVjayAmIGZvbGxvd2VkIGJ5IG51bWJlcnMgYW5kIGxldHRlcnMKKyAgICAgICAgY2hlY2soJyYwICY5ICZhICYwOyAmOTsgJmE7JywgJyYwICY5ICZhICYwOyAmOTsgJmE7JykKKyAgICAgICAgIyBjaGVjayBpbmNvbXBsZXRlIGVudGl0aWVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZworICAgICAgICBmb3IgeCBpbiBbJyYnLCAnJiMnLCAnJiN4JywgJyYjWCcsICcmI3knLCAnJiN4eScsICcmI1h5J106CisgICAgICAgICAgICBjaGVjayh4LCB4KQorICAgICAgICAgICAgY2hlY2soeCsnOycsIHgrJzsnKQorICAgICAgICAjIGNoZWNrIHNldmVyYWwgY29tYmluYXRpb25zIG9mIG51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMsCisgICAgICAgICMgcG9zc2libHkgZm9sbG93ZWQgYnkgZGlmZmVyZW50IGNoYXJhY3RlcnMKKyAgICAgICAgZm9ybWF0cyA9IFsnJiMlZCcsICcmIyUwN2QnLCAnJiMlZDsnLCAnJiMlMDdkOycsCisgICAgICAgICAgICAgICAgICAgJyYjeCV4JywgJyYjeCUwNngnLCAnJiN4JXg7JywgJyYjeCUwNng7JywKKyAgICAgICAgICAgICAgICAgICAnJiN4JVgnLCAnJiN4JTA2WCcsICcmI1gleDsnLCAnJiNYJTA2eDsnXQorICAgICAgICBmb3IgbnVtLCBjaGFyIGluIHppcChbNjUsIDk3LCAzNCwgMzgsIDB4MjYwMywgMHgxMDEyMzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ0EnLCAnYScsICciJywgJyYnLCAnXHUyNjAzJywgJ1xVMDAxMDEyMzQnXSk6CisgICAgICAgICAgICBmb3IgcyBpbiBmb3JtYXRzOgorICAgICAgICAgICAgICAgIGNoZWNrKHMgJSBudW0sIGNoYXIpCisgICAgICAgICAgICAgICAgZm9yIGVuZCBpbiBbJyAnLCAnWCddOgorICAgICAgICAgICAgICAgICAgICBjaGVjaygocytlbmQpICUgbnVtLCBjaGFyK2VuZCkKKyAgICAgICAgIyBjaGVjayBpbnZhbGlkIGNvZGVwb2ludHMKKyAgICAgICAgZm9yIGNwIGluIFsweEQ4MDAsIDB4REIwMCwgMHhEQzAwLCAweERGRkYsIDB4MTEwMDAwXToKKyAgICAgICAgICAgIGNoZWNrX251bShjcCwgJ1x1RkZGRCcpCisgICAgICAgICMgY2hlY2sgbW9yZSBpbnZhbGlkIGNvZGVwb2ludHMKKyAgICAgICAgZm9yIGNwIGluIFsweDEsIDB4YiwgMHhlLCAweDdmLCAweGZmZmUsIDB4ZmZmZiwgMHgxMGZmZmUsIDB4MTBmZmZmXToKKyAgICAgICAgICAgIGNoZWNrX251bShjcCwgJycpCisgICAgICAgICMgY2hlY2sgaW52YWxpZCBudW1iZXJzCisgICAgICAgIGZvciBudW0sIGNoIGluIHppcChbMHgwZCwgMHg4MCwgMHg5NSwgMHg5ZF0sICdcclx1MjBhY1x1MjAyMlx4OWQnKToKKyAgICAgICAgICAgIGNoZWNrX251bShudW0sIGNoKQorICAgICAgICAjIGNoZWNrIHNtYWxsIG51bWJlcnMKKyAgICAgICAgY2hlY2tfbnVtKDAsICdcdUZGRkQnKQorICAgICAgICBjaGVja19udW0oOSwgJ1x0JykKKyAgICAgICAgIyBjaGVjayBhIGJpZyBudW1iZXIKKyAgICAgICAgY2hlY2tfbnVtKDEwMDAwMDAwMDAwMDAwMDAwMDAsICdcdUZGRkQnKQorICAgICAgICAjIGNoZWNrIHRoYXQgbXVsdGlwbGUgdHJhaWxpbmcgc2VtaWNvbG9ucyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkKKyAgICAgICAgZm9yIGUgaW4gWycmcXVvdDs7JywgJyYjMzQ7OycsICcmI3gyMjs7JywgJyYjWDIyOzsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsICciOycpCisgICAgICAgICMgY2hlY2sgdGhhdCBzZW1pY29sb25zIGluIHRoZSBtaWRkbGUgZG9uJ3QgY3JlYXRlIHByb2JsZW1zCisgICAgICAgIGZvciBlIGluIFsnJnF1b3Q7cXVvdDsnLCAnJiMzNDtxdW90OycsICcmI3gyMjtxdW90OycsICcmI1gyMjtxdW90OyddOgorICAgICAgICAgICAgY2hlY2soZSwgJyJxdW90OycpCisgICAgICAgICMgY2hlY2sgdHJpcGxlIGFkamFjZW50IGNoYXJyZWZzCisgICAgICAgIGZvciBlIGluIFsnJnF1b3QnLCAnJiMzNCcsICcmI3gyMicsICcmI1gyMiddOgorICAgICAgICAgICAgY2hlY2soZSozLCAnIiIiJykKKyAgICAgICAgICAgIGNoZWNrKChlKyc7JykqMywgJyIiIicpCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgY2FzZSBpcyByZXNwZWN0ZWQKKyAgICAgICAgZm9yIGUgaW4gWycmYW1wJywgJyZhbXA7JywgJyZBTVAnLCAnJkFNUDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsICcmJykKKyAgICAgICAgZm9yIGUgaW4gWycmQW1wJywgJyZBbXA7J106CisgICAgICAgICAgICBjaGVjayhlLCBlKQorICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLWV4aXN0ZW50IG5hbWVkIGVudGl0aWVzIGFyZSByZXR1cm5lZCB1bmNoYW5nZWQKKyAgICAgICAgY2hlY2soJyZzdmFkaWxmYXJpOycsICcmc3ZhZGlsZmFyaTsnKQorICAgICAgICAjIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYXJlIGluIHRoZSBodG1sNSBzcGVjcworICAgICAgICBjaGVjaygnJm5vdGl0JywgJ8KsaXQnKQorICAgICAgICBjaGVjaygnJm5vdGl0OycsICfCrGl0OycpCisgICAgICAgIGNoZWNrKCcmbm90aW4nLCAnwqxpbicpCisgICAgICAgIGNoZWNrKCcmbm90aW47JywgJ+KIiScpCisgICAgICAgICMgYSBzaW1pbGFyIGV4YW1wbGUgd2l0aCBhIGxvbmcgbmFtZQorICAgICAgICBjaGVjaygnJm5vdFJlYWxseUFuRXhpc3RpbmdOYW1lZENoYXJhY3RlclJlZmVyZW5jZTsnLAorICAgICAgICAgICAgICAnwqxSZWFsbHlBbkV4aXN0aW5nTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2U7JykKKyAgICAgICAgIyBsb25nZXN0IHZhbGlkIG5hbWUKKyAgICAgICAgY2hlY2soJyZDb3VudGVyQ2xvY2t3aXNlQ29udG91ckludGVncmFsOycsICfiiLMnKQorICAgICAgICAjIGNoZWNrIGEgY2hhcnJlZiB0aGF0IG1hcHMgdG8gdHdvIHVuaWNvZGUgY2hhcnMKKyAgICAgICAgY2hlY2soJyZhY0U7JywgJ1x1MjIzRVx1MDMzMycpCisgICAgICAgIGNoZWNrKCcmYWNFJywgJyZhY0UnKQorICAgICAgICAjIHNlZSAjMTI4ODgKKyAgICAgICAgY2hlY2soJyYjMTIzOyAnICogMTA1MCwgJ3sgJyAqIDEwNTApCisgICAgICAgICMgc2VlICMxNTE1NgorICAgICAgICBjaGVjaygnJkVhY3V0ZXJpYyZFYWN1dGU7cmljJmFscGhhY2VudGF1cmkmYWxwaGE7Y2VudGF1cmknLAorICAgICAgICAgICAgICAnw4lyaWPDiXJpYyZhbHBoYWNlbnRhdXJpzrFjZW50YXVyaScpCisgICAgICAgIGNoZWNrKCcmY287JywgJyZjbzsnKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEh0bWxUZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CmluZGV4IGM5NzdhOWQuLjFhNDgwYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKQEAgLTcwLDYgKzcwLDE4IEBACiAgICAgICAgIHNlbGYuYXBwZW5kKCgic3RhcnR0YWdfdGV4dCIsIHNlbGYuZ2V0X3N0YXJ0dGFnX3RleHQoKSkpCiAKIAorY2xhc3MgRXZlbnRDb2xsZWN0b3JDaGFycmVmcyhFdmVudENvbGxlY3Rvcik6CisKKyAgICBkZWYgZ2V0X2V2ZW50cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZXZlbnRzCisKKyAgICBkZWYgaGFuZGxlX2NoYXJyZWYoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuZmFpbCgnVGhpcyBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGggY29udmVydF9jaGFycmVmcz1UcnVlJykKKworICAgIGRlZiBoYW5kbGVfZW50aXR5cmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmZhaWwoJ1RoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZScpCisKKwogY2xhc3MgVGVzdENhc2VCYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgpAQCAtODQsMjYgKzk2LDMwIEBACiAgICAgICAgIHBhcnNlci5jbG9zZSgpCiAgICAgICAgIGV2ZW50cyA9IHBhcnNlci5nZXRfZXZlbnRzKCkKICAgICAgICAgaWYgZXZlbnRzICE9IGV4cGVjdGVkX2V2ZW50czoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjZWl2ZWQgZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgZXZlbnRzXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV4cGVjdGVkX2V2ZW50cykgKworICAgICAgICAgICAgc2VsZi5mYWlsKCJyZWNlaXZlZCBldmVudHMgZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBldmVudHMiICsKKyAgICAgICAgICAgICAgICAgICAgICAiXG5Tb3VyY2U6XG4iICsgcmVwcihzb3VyY2UpICsKKyAgICAgICAgICAgICAgICAgICAgICAiXG5FeHBlY3RlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChleHBlY3RlZF9ldmVudHMpICsKICAgICAgICAgICAgICAgICAgICAgICAiXG5SZWNlaXZlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChldmVudHMpKQogCiAgICAgZGVmIF9ydW5fY2hlY2tfZXh0cmEoc2VsZiwgc291cmNlLCBldmVudHMpOgotICAgICAgICBzZWxmLl9ydW5fY2hlY2soc291cmNlLCBldmVudHMsIEV2ZW50Q29sbGVjdG9yRXh0cmEoKSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHNvdXJjZSwgZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3JFeHRyYShjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKSkKIAogICAgIGRlZiBfcGFyc2VfZXJyb3Ioc2VsZiwgc291cmNlKToKICAgICAgICAgZGVmIHBhcnNlKHNvdXJjZT1zb3VyY2UpOgogICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5nZXRfY29sbGVjdG9yKCkKICAgICAgICAgICAgIHBhcnNlci5mZWVkKHNvdXJjZSkKICAgICAgICAgICAgIHBhcnNlci5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yLCBwYXJzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBwYXJzZSgpCiAKIAogY2xhc3MgSFRNTFBhcnNlclN0cmljdFRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSwgcXVpdGU9RmFsc2UpOgotICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlKQorICAgICAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1UcnVlLCBjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfcHJvY2Vzc2luZ19pbnN0cnVjdGlvbl9vbmx5KHNlbGYpOgogICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjw/cHJvY2Vzc2luZyBpbnN0cnVjdGlvbj4iLCBbCkBAIC0zMzMsNyArMzQ5LDcgQEAKICAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhzLCBbKCJzdGFydHRhZyIsIGVsZW1lbnRfbG93ZXIsIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkYXRhIiwgY29udGVudCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZW5kdGFnIiwgZWxlbWVudF9sb3dlcildLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rvcj1Db2xsZWN0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpKQogCiAgICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6CiAgICAgICAgIGh0bWwgPSAoIjwhLS0gSSdtIGEgdmFsaWQgY29tbWVudCAtLT4iCkBAIC0zNjEsMTEgKzM3Nyw2MCBAQAogICAgICAgICAgICAgICAgICAgICAoJ2NvbW1lbnQnLCAnW2lmIGx0ZSBJRSA3XT5wcmV0dHk/PCFbZW5kaWZdJyldCiAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKIAorICAgIGRlZiB0ZXN0X2NvbnZlcnRfY2hhcnJlZnMoc2VsZik6CisgICAgICAgIGNvbGxlY3RvciA9IGxhbWJkYTogRXZlbnRDb2xsZWN0b3JDaGFycmVmcyhjb252ZXJ0X2NoYXJyZWZzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2xsZWN0b3IoKS5jb252ZXJ0X2NoYXJyZWZzKQorICAgICAgICBjaGFycmVmcyA9IFsnJnF1b3Q7JywgJyYjMzQ7JywgJyYjeDIyOycsICcmcXVvdCcsICcmIzM0JywgJyYjeDIyJ10KKyAgICAgICAgIyBjaGVjayBjaGFycmVmcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSB0ZXh0L2F0dHJpYnV0ZXMKKyAgICAgICAgZXhwZWN0ZWQgPSBbKCdzdGFydHRhZycsICdhJywgWygnaHJlZicsICdmb28iemFyJyldKSwKKyAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJ2EieicpLCAoJ2VuZHRhZycsICdhJyldCisgICAgICAgIGZvciBjaGFycmVmIGluIGNoYXJyZWZzOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8YSBocmVmPSJmb297MH16YXIiPmF7MH16PC9hPicuZm9ybWF0KGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgYXQgdGhlIGJlZ2lubmluZy9lbmQgb2YgdGhlIHRleHQvYXR0cmlidXRlcworICAgICAgICBleHBlY3RlZCA9IFsoJ2RhdGEnLCAnIicpLAorICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ2EnLCBbKCd4JywgJyInKSwgKCd5JywgJyJYJyksICgneicsICdYIicpXSksCisgICAgICAgICAgICAgICAgICAgICgnZGF0YScsICciJyksICgnZW5kdGFnJywgJ2EnKSwgKCdkYXRhJywgJyInKV0KKyAgICAgICAgZm9yIGNoYXJyZWYgaW4gY2hhcnJlZnM6CisgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soJ3swfTxhIHg9InswfSIgeT0iezB9WCIgej0iWHswfSI+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7MH08L2E+ezB9Jy5mb3JtYXQoY2hhcnJlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayBjaGFycmVmcyBpbiA8c2NyaXB0Pi88c3R5bGU+IGVsZW1lbnRzCisgICAgICAgIGZvciBjaGFycmVmIGluIGNoYXJyZWZzOgorICAgICAgICAgICAgdGV4dCA9ICdYJy5qb2luKFtjaGFycmVmXSozKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBbKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnc2NyaXB0JywgW10pLCAoJ2RhdGEnLCB0ZXh0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ3NjcmlwdCcpLCAoJ2RhdGEnLCAnIicpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdzdHlsZScsIFtdKSwgKCdkYXRhJywgdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICdzdHlsZScpLCAoJ2RhdGEnLCAnIicpXQorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCd7MX08c2NyaXB0PnswfTwvc2NyaXB0PnsxfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHN0eWxlPnswfTwvc3R5bGU+ezF9Jy5mb3JtYXQodGV4dCwgY2hhcnJlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIGNvbGxlY3Rvcj1jb2xsZWN0b3IoKSkKKyAgICAgICAgIyBjaGVjayB0cnVuY2F0ZWQgY2hhcnJlZnMgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZQorICAgICAgICBodG1sID0gJyZxdW8gJiMgJiN4JworICAgICAgICBmb3IgeCBpbiByYW5nZSgxLCBsZW4oaHRtbCkpOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKGh0bWxbOnhdLCBbKCdkYXRhJywgaHRtbFs6eF0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgYSBzdHJpbmcgd2l0aCBubyBjaGFycmVmcworICAgICAgICBzZWxmLl9ydW5fY2hlY2soJ25vIGNoYXJyZWZzIGhlcmUnLCBbKCdkYXRhJywgJ25vIGNoYXJyZWZzIGhlcmUnKV0sCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisKIAogY2xhc3MgSFRNTFBhcnNlclRvbGVyYW50VGVzdENhc2UoSFRNTFBhcnNlclN0cmljdFRlc3RDYXNlKToKIAogICAgIGRlZiBnZXRfY29sbGVjdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PUZhbHNlKQorICAgICAgICByZXR1cm4gRXZlbnRDb2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0aW9uX3dhcm5pbmdzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKCkgICMgY29udmVydF9jaGFycmVmcyBub3QgcGFzc2VkIGV4cGxpY2l0bHkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBFdmVudENvbGxlY3RvcihzdHJpY3Q9RmFsc2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3IoKS5lcnJvcigndGVzdCcpCiAKICAgICBkZWYgdGVzdF90b2xlcmFudF9wYXJzaW5nKHNlbGYpOgogICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxodG1sIDxodG1sPnRlPj54dCZhPDxiYzwvYT48L2h0bWw+XG4nCkBAIC01NTgsMTcgKzYyMywxMiBAQAogICAgICAgICBmb3IgaHRtbCwgZXhwZWN0ZWQgaW4gZGF0YToKICAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKIAotICAgIGRlZiB0ZXN0X3VuZXNjYXBlX2Z1bmN0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VuZXNjYXBlX21ldGhvZChzZWxmKToKKyAgICAgICAgZnJvbSBodG1sIGltcG9ydCB1bmVzY2FwZQogICAgICAgICBwID0gc2VsZi5nZXRfY29sbGVjdG9yKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmI2JhZDsnKSwnJiNiYWQ7JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmIzAwMzg7JyksJyYnKQotICAgICAgICAjIHNlZSAjMTI4ODgKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmIzEyMzsgJyAqIDEwNTApLCAneyAnICogMTA1MCkKLSAgICAgICAgIyBzZWUgIzE1MTU2Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJkVhY3V0ZXJpYyZFYWN1dGU7cmljJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyZhbHBoYWNlbnRhdXJpJmFscGhhO2NlbnRhdXJpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnw4lyaWPDiXJpYyZhbHBoYWNlbnRhdXJpzrFjZW50YXVyaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJmNvOycpLCAnJmNvOycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcyA9ICcmcXVvdDsmIzM0OyYjeDIyOyZxdW90JiMzNCYjeDIyJiNiYWQ7JworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKHMpLCB1bmVzY2FwZShzKSkKIAogICAgIGRlZiB0ZXN0X2Jyb2tlbl9jb21tZW50cyhzZWxmKToKICAgICAgICAgaHRtbCA9ICgnPCEgbm90IHJlYWxseSBhIGNvbW1lbnQgPicKQEAgLTYyNCw3ICs2ODQsNyBAQAogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aXRlPUZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2F0dHJfc3ludGF4KHNlbGYpOgogICAgICAgICBvdXRwdXQgPSBbCkBAIC02ODUsNyArNzQ1LDcgQEAKIGNsYXNzIEF0dHJpYnV0ZXNUb2xlcmFudFRlc3RDYXNlKEF0dHJpYnV0ZXNTdHJpY3RUZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9hdHRyX2Z1bmt5X25hbWVzMihzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CmluZGV4IGYzYzI3YzIuLjMxYzBiNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKQEAgLTI3LDggKzI3LDEwIEBACiAgICAgICAgIHNlbGYudGV4dCA9IHRleHQKICAgICAgICAgc2VsZi5maWxlY2xhc3MgPSBmaWxlY2xhc3MKICAgICAgICAgc2VsZi5kYXRhID0gYicnCisgICAgICAgIHNlbGYuc2VuZGFsbF9jYWxscyA9IDAKIAogICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnNlbmRhbGxfY2FsbHMgKz0gMQogICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQogCiAgICAgZGVmIG1ha2VmaWxlKHNlbGYsIG1vZGUsIGJ1ZnNpemU9Tm9uZSk6CkBAIC00NSw3ICs0Nyw3IEBACiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKICAgICAgICAgaWYgc2VsZi5waXBlX3RyaWdnZXIgaW4gZGF0YToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnJuby5FUElQRSwgImdvdGNoYSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKICAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTU5Nyw3ICs1OTksNyBAQAogICAgICAgICAgICAgYiJDb250ZW50LUxlbmd0aCIpCiAgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oImV4YW1wbGUuY29tIikKICAgICAgICAgY29ubi5zb2NrID0gc29jawotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogY29ubi5yZXF1ZXN0KCJQVVQiLCAiL3VybCIsICJib2R5IikpCiAgICAgICAgIHJlc3AgPSBjb25uLmdldHJlc3BvbnNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MDEsIHJlc3Auc3RhdHVzKQpAQCAtNjQzLDYgKzY0NSwyOCBAQAogICAgICAgICByZXNwLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3AuY2xvc2VkKQogCisgICAgZGVmIHRlc3RfZGVsYXllZF9hY2tfb3B0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBOYWdsZS9kZWxheWVkX2FjayBvcHRpbWlzdGFpb24gd29ya3MgY29ycmVjdGx5LgorCisgICAgICAgICMgRm9yIHNtYWxsIHBheWxvYWRzLCBpdCBzaG91bGQgY29hbGVzY2UgdGhlIGJvZHkgd2l0aAorICAgICAgICAjIGhlYWRlcnMsIHJlc3VsdGluZyBpbiBhIHNpbmdsZSBzZW5kYWxsKCkgY2FsbAorICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgYm9keSA9IGIneCcgKiAoY29ubi5tc3MgLSAxKQorICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5zZW5kYWxsX2NhbGxzLCAxKQorCisgICAgICAgICMgRm9yIGxhcmdlIHBheWxvYWRzLCBpdCBzaG91bGQgc2VuZCB0aGUgaGVhZGVycyBhbmQKKyAgICAgICAgIyB0aGVuIHRoZSBib2R5LCByZXN1bHRpbmcgaW4gbW9yZSB0aGFuIG9uZSBzZW5kYWxsKCkKKyAgICAgICAgIyBjYWxsCisgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgY29ubi5zb2NrID0gc29jaworICAgICAgICBib2R5ID0gYid4JyAqIGNvbm4ubXNzCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvJywgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHNvY2suc2VuZGFsbF9jYWxscywgMSkKKwogY2xhc3MgT2ZmbGluZVRlc3QoVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3Jlc3BvbnNlcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbGllbnQucmVzcG9uc2VzW2NsaWVudC5OT1RfRk9VTkRdLCAiTm90IEZvdW5kIikKQEAgLTczMyw3ICs3NTcsNyBAQAogCiAgICAgZGVmIG1ha2Vfc2VydmVyKHNlbGYsIGNlcnRmaWxlKToKICAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgotICAgICAgICByZXR1cm4gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpCisgICAgICAgIHJldHVybiBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgc2ltcGxlIHRlc3QgdG8gY2hlY2sgaXQncyBzdG9yaW5nIHRoZSB0aW1lb3V0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQppbmRleCA5ZGQyNzc4Li5iMmJjZTFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKQEAgLTkyLDYgKzkyLDEzIEBACiAgICAgICAgIGRlZiBkb19LRVlFUlJPUihzZWxmKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTkpCiAKKyAgICAgICAgZGVmIGRvX05PVEZPVU5EKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCkKKworICAgICAgICBkZWYgZG9fRVhQTEFJTkVSUk9SKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDk5OSwgIlNob3J0IE1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgbG9uZyBcbiBleHBsYWluYXRpb24iKQorCiAgICAgICAgIGRlZiBkb19DVVNUT00oc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoOTk5KQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCkBAIC0yMDMsNiArMjEwLDEyIEBACiAgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCiAKKyAgICBkZWYgdGVzdF9yZXR1cm5fZXhwbGFpbl9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnRVhQTEFJTkVSUk9SJywgJy8nKQorICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpKQorCiAgICAgZGVmIHRlc3RfbGF0aW4xX2hlYWRlcihzZWxmKToKICAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnTEFUSU5PTkVIRUFERVInLCAnLycsIGhlYWRlcnM9ewogICAgICAgICAgICAgJ1gtU3BlY2lhbC1JbmNvbWluZyc6ICAgICAgICfDhHJnZXIgbWl0IFVuaWNvZGUnCkBAIC0yMTEsNiArMjI0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldGhlYWRlcignWC1TcGVjaWFsJyksICdEw6RuZ2Vyb3VzIE1pbmQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5yZWFkKCksICfDhHJnZXIgbWl0IFVuaWNvZGUnLmVuY29kZSgndXRmLTgnKSkKIAorICAgIGRlZiB0ZXN0X2Vycm9yX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjA4ODogc3RhbmRhcmQgZXJyb3IgcmVzcG9uc2VzIHNob3VsZCBoYXZlIGEgY29udGVudC1sZW5ndGgKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnTk9URk9VTkQnLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA0MDQpCisgICAgICAgIGRhdGEgPSByZXMucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpLCBsZW4oZGF0YSkpCisKIAogY2xhc3MgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CiAgICAgY2xhc3MgcmVxdWVzdF9oYW5kbGVyKE5vTG9nUmVxdWVzdEhhbmRsZXIsIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKaW5kZXggZGFhOGFmZS4uYmFmZDYyYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQpAQCAtMjAsNiArMjAsNyBAQAogICAgIHNzbCA9IE5vbmUKIAogQ0VSVEZJTEUgPSBOb25lCitDQUZJTEUgPSBOb25lCiAKIAogY2xhc3MgVGVzdEltYXBsaWIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTI1LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAjIE5ha2VkIHNvY2tldHMgcmV0dXJuIGVtcHR5IHN0cmluZ3MuLgogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gcGFydAotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAjIC4uYnV0IFNTTFNvY2tldHMgcmFpc2UgZXhjZXB0aW9ucy4KICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChiJ1xyXG4nKToKQEAgLTM0OCw2ICszNDksMjUgQEAKICAgICBzZXJ2ZXJfY2xhc3MgPSBTZWN1cmVUQ1BTZXJ2ZXIKICAgICBpbWFwX2NsYXNzID0gSU1BUDRfU1NMCiAKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3Rfc3NsX3ZlcmlmaWVkKHNlbGYpOgorICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbF9jb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNzbF9jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICcxMjcuMC4wLjEnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5yZWFwZWRfc2VydmVyKFNpbXBsZUlNQVBIYW5kbGVyKSBhcyBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5pbWFwX2NsYXNzKCpzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0PXNzbF9jb250ZXh0KQorICAgICAgICAgICAgICAgIGNsaWVudC5zaHV0ZG93bigpCisKKyAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgIGNsaWVudCA9IHNlbGYuaW1hcF9jbGFzcygibG9jYWxob3N0Iiwgc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0PXNzbF9jb250ZXh0KQorICAgICAgICAgICAgY2xpZW50LnNodXRkb3duKCkKKwogCiBjbGFzcyBSZW1vdGVJTUFQVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgaG9zdCA9ICdjeXJ1cy5hbmRyZXcuY211LmVkdScKQEAgLTQ2MCwxMSArNDgwLDE1IEBACiAKICAgICBpZiBzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKToKICAgICAgICAgaWYgc3NsOgotICAgICAgICAgICAgZ2xvYmFsIENFUlRGSUxFCisgICAgICAgICAgICBnbG9iYWwgQ0VSVEZJTEUsIENBRklMRQogICAgICAgICAgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Y2VydC5wZW0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQzLnBlbSIpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0VSVEZJTEUpOgogICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQorICAgICAgICAgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5Y2FjZXJ0LnBlbSIpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoQ0FGSUxFKToKKyAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgQ0EgZmlsZSEiKQogICAgICAgICB0ZXN0cy5leHRlbmQoWwogICAgICAgICAgICAgVGhyZWFkZWROZXR3b3JrZWRUZXN0cywgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTCwKICAgICAgICAgICAgIFJlbW90ZUlNQVBUZXN0LCBSZW1vdGVJTUFQX1NTTFRlc3QsIFJlbW90ZUlNQVBfU1RBUlRUTFNUZXN0LApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQppbmRleCBiNTZlZmUzLi43OGY1NzM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcC5weQpAQCAtMSwxNCArMSwyOSBAQAotaW1wb3J0IGltcAordHJ5OgorICAgIGltcG9ydCBfdGhyZWFkCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3RocmVhZCA9IE5vbmUKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncword2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICBpbXBvcnQgaW1wCiAKKworZGVmIHJlcXVpcmVzX2xvYWRfZHluYW1pYyhtZXRoKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gc2tpcCBhIHRlc3QgaWYgbm90IHJ1bm5pbmcgdW5kZXIgQ1B5dGhvbiBvciBsYWNraW5nCisgICAgaW1wLmxvYWRfZHluYW1pYygpLiIiIgorICAgIG1ldGggPSBzdXBwb3J0LmNweXRob25fb25seShtZXRoKQorICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykobWV0aCkKKworCitAdW5pdHRlc3Quc2tpcElmKF90aHJlYWQgaXMgTm9uZSwgJ190aHJlYWQgbW9kdWxlIGlzIHJlcXVpcmVkJykKIGNsYXNzIExvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJWZXJ5IGJhc2ljIHRlc3Qgb2YgaW1wb3J0IGxvY2sgZnVuY3Rpb25zLiIiIgpAQCAtMTUwLDcgKzE2NSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZmlsZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW5hbWVbOi0zXS5lbmRzd2l0aCh0ZW1wX21vZF9uYW1lKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bMF0sICcucHknKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ1UnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ3InKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1syXSwgaW1wLlBZX1NPVVJDRSkKIAogICAgICAgICAgICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZSh0ZW1wX21vZF9uYW1lLCBmaWxlLCBmaWxlbmFtZSwgaW5mbykKQEAgLTIwOCw5ICsyMjMsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX3BhdGgsIG5ld19vcy5wYXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvcmlnX2dldGVudiwgbmV3X29zLmdldGVudikKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfaXNzdWUxNTgyOF9sb2FkX2V4dGVuc2lvbnMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTU4MjggcGlja2VkIHVwIHRoYXQgdGhlIGFkYXB0ZXIgYmV0d2VlbiB0aGUgb2xkIGltcCBBUEkKICAgICAgICAgIyBhbmQgaW1wb3J0bGliIGNvdWxkbid0IGhhbmRsZSBDIGV4dGVuc2lvbnMKQEAgLTIyMiw2ICsyMzUsMjIgQEAKICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGV4YW1wbGUsICp4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5fX25hbWVfXywgZXhhbXBsZSkKIAorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDIxX211bHRpcGxlX21vZHVsZXNfaW5fb25lX2RsbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNjQyMTogbG9hZGluZyBzZXZlcmFsIG1vZHVsZXMgZnJvbSB0aGUgc2FtZSBjb21waWxlZCBmaWxlIGZhaWxzCisgICAgICAgIG0gPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKKyAgICAgICAgZmlsZW9iaiwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uID0gaW1wLmZpbmRfbW9kdWxlKG0pCisgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICBtb2QwID0gaW1wLmxvYWRfZHluYW1pYyhtLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMSA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vJywgcGF0aG5hbWUpCisgICAgICAgIG1vZDIgPSBpbXAubG9hZF9keW5hbWljKCdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicsIHBhdGhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDAuX19uYW1lX18sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMS5fX25hbWVfXywgJ190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QyLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoJ25vbmV4aXN0ZW50JywgcGF0aG5hbWUpCisKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9keW5hbWljX0ltcG9ydEVycm9yX3BhdGgoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE1NTk1NDkgYWRkZWQgYG5hbWVgIGFuZCBgcGF0aGAgYXR0cmlidXRlcyB0byBJbXBvcnRFcnJvcgogICAgICAgICAjIGluIG9yZGVyIHRvIHByb3ZpZGUgYmV0dGVyIGRldGFpbC4gSXNzdWUgIzEwODU0IGltcGxlbWVudGVkIHRob3NlCkBAIC0yMzMsMTQgKzI2MiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIGVyci5leGNlcHRpb24ucGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBlcnIuZXhjZXB0aW9uLm5hbWUpCiAKLSAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGltcCwgJ2xvYWRfZHluYW1pYycpLAotICAgICAgICAgICAgICAgICAgICAgJ2ltcC5sb2FkX2R5bmFtaWMoKSByZXF1aXJlZCcpCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYwogICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlX2V4dGVuc2lvbl9maWxlX2lzX05vbmUoc2VsZik6CiAgICAgICAgICMgV2hlbiBsb2FkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgYW5kIHRoZSBmaWxlIGlzIE5vbmUsIG9wZW4gb25lCiAgICAgICAgICMgb24gdGhlIGJlaGFsZiBvZiBpbXAubG9hZF9keW5hbWljKCkuCiAgICAgICAgICMgSXNzdWUgIzE1OTAyCi0gICAgICAgIG5hbWUgPSAnX2hlYXBxJworICAgICAgICBuYW1lID0gJ190ZXN0aW1wb3J0bXVsdGlwbGUnCiAgICAgICAgIGZvdW5kID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGlmIGZvdW5kWzBdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZm91bmRbMF0uY2xvc2UoKQpAQCAtMjQ4LDYgKzI3NSwxNSBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGltcC5sb2FkX21vZHVsZShuYW1lLCBOb25lLCAqZm91bmRbMTpdKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwKKyAgICAgICAgInRlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZW4gd3JpdGluZyBieXRlY29kZSIpCisgICAgZGVmIHRlc3RfYnVnNzczMihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKCk6CisgICAgICAgICAgICBzb3VyY2UgPSBzdXBwb3J0LlRFU1RGTiArICcucHknCisgICAgICAgICAgICBvcy5ta2Rpcihzb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnXk5vIG1vZHVsZScsCisgICAgICAgICAgICAgICAgaW1wLmZpbmRfbW9kdWxlLCBzdXBwb3J0LlRFU1RGTiwgWyIuIl0pCisKICAgICBkZWYgdGVzdF9tdWx0aXBsZV9jYWxsc190b19nZXRfZGF0YShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTg3NTU6IG1ha2Ugc3VyZSBtdWx0aXBsZSBjYWxscyB0byBnZXRfZGF0YSgpIGNhbiBzdWNjZWVkLgogICAgICAgICBsb2FkZXIgPSBpbXAuX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KCdpbXAnLCBpbXAuX19maWxlX18sCkBAIC0yOTMsMjIgKzMyOSw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgJ2h0bWwnKToKICAgICAgICAgICAgIGltcC5yZWxvYWQocGFyc2VyKQogCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JlcGxhY2VkKHNlbGYpOgotICAgICAgICAjIHNlZSAjMTg2OTgKLSAgICAgICAgZGVmIGNvZGUoKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgndG9wX2xldmVsJykKLSAgICAgICAgICAgIG1vZHVsZS5zcGFtID0gMwotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddID0gbW9kdWxlCi0gICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsndG9wX2xldmVsJzogY29kZX0pCi0gICAgICAgIHdpdGggbW9jazoKLSAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCi0gICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBpbXAucmVsb2FkKG1vZHVsZSkKLSAgICAgICAgICAgICAgICBhY3R1YWwgPSBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbC5zcGFtLCAzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuc3BhbSwgMykKLQogCiBjbGFzcyBQRVAzMTQ3VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIG9mIFBFUCAzMTQ3LiIiIgpAQCAtNDYxLDIwICs0ODEsNSBAQAogICAgICAgICAgICAgb3Mucm1kaXIobmFtZSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbCi0gICAgICAgIEltcG9ydFRlc3RzLAotICAgICAgICBQRVAzMTQ3VGVzdHMsCi0gICAgICAgIFJlbG9hZFRlc3RzLAotICAgICAgICBOdWxsSW1wb3J0ZXJUZXN0cywKLSAgICAgICAgXQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IF90aHJlYWQKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICB0ZXN0cy5hcHBlbmQoTG9ja1Rlc3RzKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQppbmRleCBkZjA4ZTZhLi5iZGExNTQxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weQpAQCAtMSw5ICsxLDggQEAKICMgV2UgaW1wb3J0IGltcG9ydGxpYiAqQVNBUCogaW4gb3JkZXIgdG8gdGVzdCAjMTUzODYKIGltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogZnJvbSBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBpbXBvcnQgX2dldF9zb3VyY2VmaWxlCiBpbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBpbXAKLWZyb20gdGVzdC50ZXN0X2ltcG9ydGxpYi5pbXBvcnRfIGltcG9ydCB1dGlsIGFzIGltcG9ydGxpYl91dGlsCiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KQEAgLTIyLDcgKzIxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgRW52aXJvbm1lbnRWYXJHdWFyZCwgVEVTVEZOLCBjaGVja193YXJuaW5ncywgZm9yZ2V0LCBpc19qeXRob24sCiAgICAgbWFrZV9sZWdhY3lfcHljLCBybXRyZWUsIHJ1bl91bml0dGVzdCwgc3dhcF9hdHRyLCBzd2FwX2l0ZW0sIHRlbXBfdW1hc2ssCi0gICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHkpCisgICAgdW5saW5rLCB1bmxvYWQsIGNyZWF0ZV9lbXB0eV9maWxlLCBjcHl0aG9uX29ubHksIFRFU1RGTl9VTkVOQ09EQUJMRSkKIGZyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogCiAKQEAgLTcwLDggKzY5LDYgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVubG9hZChURVNURk4pCiAKLSAgICBzZXRVcCA9IHRlYXJEb3duCi0KICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgogICAgICAgICAjIEJyaWVmIGRpZ3Jlc3Npb24gdG8gdGVzdCB0aGF0IGltcG9ydCBpcyBjYXNlLXNlbnNpdGl2ZTogIGlmIHdlIGdvdAogICAgICAgICAjIHRoaXMgZmFyLCB3ZSBrbm93IGZvciBzdXJlIHRoYXQgInJhbmRvbSIgZXhpc3RzLgpAQCAtMTI5LDE2ICsxMjYsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAKLSAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCi0gICAgZGVmIHRlc3RfYnVnNzczMihzZWxmKToKLSAgICAgICAgc291cmNlID0gVEVTVEZOICsgJy5weScKLSAgICAgICAgb3MubWtkaXIoc291cmNlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAnXk5vIG1vZHVsZScsCi0gICAgICAgICAgICAgICAgaW1wLmZpbmRfbW9kdWxlLCBURVNURk4sIFsiLiJdKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3Mucm1kaXIoc291cmNlKQotCiAgICAgZGVmIHRlc3RfbW9kdWxlX3dpdGhfbGFyZ2Vfc3RhY2soc2VsZiwgbW9kdWxlPSdsb25nbGlzdCcpOgogICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTU2MTg1OC4KICAgICAgICAgZmlsZW5hbWUgPSBtb2R1bGUgKyAnLnB5JwpAQCAtMTYxLDE2ICsxNDgsMjQgQEAKICAgICAgICAgc3lzLnBhdGguYXBwZW5kKCcnKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogCisgICAgICAgIG5hbWVzcGFjZSA9IHt9CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VfbGVnYWN5X3B5YyhmaWxlbmFtZSkKICAgICAgICAgICAgICMgVGhpcyB1c2VkIHRvIGNyYXNoLgotICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcgKyBtb2R1bGUpCisgICAgICAgICAgICBleGVjKCdpbXBvcnQgJyArIG1vZHVsZSwgTm9uZSwgbmFtZXNwYWNlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgIyBDbGVhbnVwLgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWy0xXQogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ2MnKQogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgJ28nKQogCisgICAgICAgICAgICAjIFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBtb2R1bGUgKHVubG9hZCB0aGUgbW9kdWxlKQorICAgICAgICAgICAgbmFtZXNwYWNlLmNsZWFyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfaW1wb3J0X3N0aWNrcyhzZWxmKToKICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgInciKSBhcyBmOgpAQCAtMjI1LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgiYSA9IDEwXG5iPTIwLy8wXG4iKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wLnJlbG9hZCwgbW9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcG9ydGxpYi5yZWxvYWQsIG1vZCkKICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKQEAgLTI4MCw3ICsyNzUsNyBAQAogICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcAorICAgICAgICAgICAgICAgICAgaW1wb3J0IGltcG9ydGxpYgogICAgICAgICAgICAgc3lzLmFyZ3YuaW5zZXJ0KDAsIEMoKSkKICAgICAgICAgICAgICIiIikpCiAgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vayh0ZXN0Zm4pCkBAIC0yOTEsNyArMjg2LDcgQEAKICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc291cmNlID0gVEVTVEZOICsgIi5weSIKLSAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHRyeToKQEAgLTMyMiw2ICszMTcsMTQgQEAKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJJbXBvcnRFcnJvciIsIHN0ZG91dCkKIAorICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X21lc3NhZ2VfZm9yX25vbmV4aXN0ZW50X21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAiXk5vIG1vZHVsZSBuYW1lZCAnYm9ndXMnIik6CisgICAgICAgICAgICBmcm9tIGJvZ3VzIGltcG9ydCBmb28KKworICAgIGRlZiB0ZXN0X2Zyb21faW1wb3J0X21lc3NhZ2VfZm9yX2V4aXN0aW5nX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEltcG9ydEVycm9yLCAiXmNhbm5vdCBpbXBvcnQgbmFtZSAnYm9ndXMnIik6CisgICAgICAgICAgICBmcm9tIHJlIGltcG9ydCBib2d1cworCiAKIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKIGNsYXNzIEZpbGVQZXJtaXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzMyLDcgKzMzNSw3IEBACiAgICAgZGVmIHRlc3RfY3JlYXRpb25fbW9kZShzZWxmKToKICAgICAgICAgbWFzayA9IDBvMDIyCiAgICAgICAgIHdpdGggdGVtcF91bWFzayhtYXNrKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiX19pbXBvcnRfXyBkaWQgbm90IHJlc3VsdCBpbiBjcmVhdGlvbiBvZiAiCkBAIC0zNTAsNyArMzUzLDcgQEAKICAgICAgICAgIyBwZXJtaXNzaW9ucyBvZiAucHljIHNob3VsZCBtYXRjaCB0aG9zZSBvZiAucHksIHJlZ2FyZGxlc3Mgb2YgbWFzawogICAgICAgICBtb2RlID0gMG82MDAKICAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKSwgX3JlYWR5X3RvX2ltcG9ydCgpIGFzIChuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCiAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCBtb2RlKQogICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKQEAgLTM2NSw3ICszNjgsNyBAQAogICAgIGRlZiB0ZXN0X2NhY2hlZF9yZWFkb25seShzZWxmKToKICAgICAgICAgbW9kZSA9IDBvNDAwCiAgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzAyMiksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CkBAIC00MDUsNyArNDA4LDcgQEAKICAgICAgICAgICAgICAgICBieXRlY29kZV9vbmx5ID0gcGF0aCArICJjIgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9vbmx5ID0gcGF0aCArICJvIgotICAgICAgICAgICAgb3MucmVuYW1lKGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSwgYnl0ZWNvZGVfb25seSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKSwgYnl0ZWNvZGVfb25seSkKICAgICAgICAgICAgIG0gPSBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ueCwgJ3Jld3JpdHRlbicpCiAKQEAgLTQyNyw3ICs0MzAsNyBAQAogIiIiCiAgICAgZGlyX25hbWUgPSBvcy5wYXRoLmFic3BhdGgoVEVTVEZOKQogICAgIGZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihkaXJfbmFtZSwgbW9kdWxlX25hbWUpICsgb3MuZXh0c2VwICsgInB5IgotICAgIGNvbXBpbGVkX25hbWUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9uYW1lKQorICAgIGNvbXBpbGVkX25hbWUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtNDg4LDcgKzQ5MSw3IEBACiAgICAgICAgICAgICBoZWFkZXIgPSBmLnJlYWQoMTIpCiAgICAgICAgICAgICBjb2RlID0gbWFyc2hhbC5sb2FkKGYpCiAgICAgICAgIGNvbnN0YW50cyA9IGxpc3QoY29kZS5jb19jb25zdHMpCi0gICAgICAgIGZvcmVpZ25fY29kZSA9IHRlc3RfbWFpbi5fX2NvZGVfXworICAgICAgICBmb3JlaWduX2NvZGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZS5fX2NvZGVfXwogICAgICAgICBwb3MgPSBjb25zdGFudHMuaW5kZXgoMSkKICAgICAgICAgY29uc3RhbnRzW3Bvc10gPSBmb3JlaWduX2NvZGUKICAgICAgICAgY29kZSA9IHR5cGUoY29kZSkoY29kZS5jb19hcmdjb3VudCwgY29kZS5jb19rd29ubHlhcmdjb3VudCwKQEAgLTYzMCw3ICs2MzMsNyBAQAogY2xhc3MgUHljYWNoZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhlIHZhcmlvdXMgUEVQIDMxNDcgcmVsYXRlZCBiZWhhdmlvcnMuCiAKLSAgICB0YWcgPSBpbXAuZ2V0X3RhZygpCisgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZwogCiAgICAgZGVmIF9jbGVhbihzZWxmKToKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKQEAgLTY3OCwxMCArNjgxLDExIEBACiAgICAgICAgICMgV2l0aCBQRVAgMzE0NyBjYWNoZSBsYXlvdXQsIHJlbW92aW5nIHRoZSBzb3VyY2UgYnV0IGxlYXZpbmcgdGhlIHB5YwogICAgICAgICAjIGZpbGUgZG9lcyBub3Qgc2F0aXNmeSB0aGUgaW1wb3J0LgogICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweWNfZmlsZSkpCiAgICAgICAgIG9zLnJlbW92ZShzZWxmLnNvdXJjZSkKICAgICAgICAgZm9yZ2V0KFRFU1RGTikKKyAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIFRFU1RGTikKIAogICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKQEAgLTcwMyw3ICs3MDcsNyBAQAogICAgIGRlZiB0ZXN0X19fY2FjaGVkX18oc2VsZik6CiAgICAgICAgICMgTW9kdWxlcyBub3cgYWxzbyBoYXZlIGFuIF9fY2FjaGVkX18gdGhhdCBwb2ludHMgdG8gdGhlIHB5YyBmaWxlLgogICAgICAgICBtID0gX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RGTiArICcucHknKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKFRFU1RGTiArICcucHknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgcHljX2ZpbGUpKQogCiAgICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQpAQCAtNzM4LDEwICs3NDIsMTAgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcuZm9vJykKLSAgICAgICAgaW5pdF9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIGluaXRfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGluaXRfcHljKSkKLSAgICAgICAgZm9vX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCisgICAgICAgIGZvb19weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1vZHVsZXNbJ3BlcDMxNDcuZm9vJ10uX19jYWNoZWRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBmb29fcHljKSkKIApAQCAtNzY1LDEwICs3NjksMTAgQEAKICAgICAgICAgdW5sb2FkKCdwZXAzMTQ3JykKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcuZm9vJykKLSAgICAgICAgaW5pdF9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgIGluaXRfcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCiAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGluaXRfcHljKSkKLSAgICAgICAgZm9vX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCisgICAgICAgIGZvb19weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1vZHVsZXNbJ3BlcDMxNDcuZm9vJ10uX19jYWNoZWRfXywKICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBmb29fcHljKSkKIApAQCAtODUyLDcgKzg1Niw2IEBACiAgICAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KICAgICAgICAgc2VsZi5hc3NlcnRJcyhtYWNoaW5lcnkuRmlsZUZpbmRlciwgbW9kLkZpbGVGaW5kZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXMoaW1wLm5ld19tb2R1bGUsIG1vZC5uZXdfbW9kdWxlKQogCiAKIEBjcHl0aG9uX29ubHkKQEAgLTEwMzMsMTEgKzEwMzYsMTQgQEAKICAgICAgICAgIyBhd2F5IGZyb20gdGhlIHRyYWNlYmFjay4KICAgICAgICAgc2VsZi5jcmVhdGVfbW9kdWxlKCJmb28iLCAiIikKICAgICAgICAgaW1wb3J0bGliID0gc3lzLm1vZHVsZXNbJ19mcm96ZW5faW1wb3J0bGliJ10KLSAgICAgICAgb2xkX2xvYWRfbW9kdWxlID0gaW1wb3J0bGliLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZQorICAgICAgICBpZiAnbG9hZF9tb2R1bGUnIGluIHZhcnMoaW1wb3J0bGliLlNvdXJjZUxvYWRlcik6CisgICAgICAgICAgICBvbGRfZXhlY19tb2R1bGUgPSBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvbGRfZXhlY19tb2R1bGUgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZSgqYXJncyk6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoKmFyZ3MpOgogICAgICAgICAgICAgICAgIDEvMAotICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZSA9IGxvYWRfbW9kdWxlCisgICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlID0gZXhlY19tb2R1bGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpbXBvcnQgZm9vCiAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKQEAgLTEwNDYsMTkgKzEwNTIsMjEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlplcm9EaXZpc2lvbkVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RyYWNlYmFjayh0YiwgW19fZmlsZV9fLCAnPGZyb3plbiBpbXBvcnRsaWInLCBfX2ZpbGVfX10pCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmxvYWRfbW9kdWxlID0gb2xkX2xvYWRfbW9kdWxlCisgICAgICAgICAgICBpZiBvbGRfZXhlY19tb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkZWwgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpbXBvcnRsaWIuU291cmNlTG9hZGVyLmV4ZWNfbW9kdWxlID0gb2xkX2V4ZWNfbW9kdWxlCiAKLQotZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHJ1bl91bml0dGVzdChJbXBvcnRUZXN0cywgUHljYWNoZVRlc3RzLCBGaWxlUGVybWlzc2lvblRlc3RzLAotICAgICAgICAgICAgICAgICBQeWNSZXdyaXRpbmdUZXN0cywgUGF0aHNUZXN0cywgUmVsYXRpdmVJbXBvcnRUZXN0cywKLSAgICAgICAgICAgICAgICAgT3ZlcnJpZGluZ0ltcG9ydEJ1aWx0aW5UZXN0cywKLSAgICAgICAgICAgICAgICAgSW1wb3J0bGliQm9vdHN0cmFwVGVzdHMsIEdldFNvdXJjZWZpbGVUZXN0cywKLSAgICAgICAgICAgICAgICAgVGVzdFN5bWJvbGljYWxseUxpbmtlZFBhY2thZ2UsCi0gICAgICAgICAgICAgICAgIEltcG9ydFRyYWNlYmFja1Rlc3RzKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFRFU1RGTl9VTkVOQ09EQUJMRSwgJ25lZWQgVEVTVEZOX1VORU5DT0RBQkxFJykKKyAgICBkZWYgdGVzdF91bmVuY29kYWJsZV9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE2MTk6IFRoZSBQeXRob24gcGFyc2VyIGFuZCB0aGUgaW1wb3J0IG1hY2hpbmVyeSBtdXN0IG5vdAorICAgICAgICAjIGVuY29kZSBmaWxlbmFtZXMsIGVzcGVjaWFsbHkgb24gV2luZG93cworICAgICAgICBweW5hbWUgPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KCcnLCBURVNURk5fVU5FTkNPREFCTEUsICdwYXNzJykKKyAgICAgICAgbmFtZSA9IHB5bmFtZVs6LTNdCisgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCAibW9kID0gX19pbXBvcnRfXyglYSkiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAjIFRlc3QgbmVlZHMgdG8gYmUgYSBwYWNrYWdlLCBzbyB3ZSBjYW4gZG8gcmVsYXRpdmUgaW1wb3J0cy4KLSAgICBmcm9tIHRlc3QudGVzdF9pbXBvcnQgaW1wb3J0IHRlc3RfbWFpbgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyMmQxYS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLWltcG9ydCBzeXMKLWltcG9ydCBpbXAKLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLQotCi10ZXN0X3NyYyA9ICIiIlwKLWRlZiBnZXRfbmFtZSgpOgotICAgIHJldHVybiBfX25hbWVfXwotZGVmIGdldF9maWxlKCk6Ci0gICAgcmV0dXJuIF9fZmlsZV9fCi0iIiIKLQotYWJzaW1wID0gImltcG9ydCBzdWJcbiIKLXJlbGltcCA9ICJmcm9tIC4gaW1wb3J0IHN1YlxuIgotZGVlcHJlbGltcCA9ICJmcm9tIC4uLi4gaW1wb3J0IHN1YlxuIgotZnV0aW1wID0gImZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0XG4iCi0KLXJlbG9hZF9zcmMgPSB0ZXN0X3NyYysiIiJcCi1yZWxvYWRlZCA9IFRydWUKLSIiIgotCi10ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotcmVsb2FkX2NvID0gY29tcGlsZShyZWxvYWRfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi0KLXRlc3QyX29sZGFic19jbyA9IGNvbXBpbGUoYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX25ld2Fic19jbyA9IGNvbXBpbGUoZnV0aW1wICsgYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX25ld3JlbF9jbyA9IGNvbXBpbGUocmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX2RlZXByZWxfY28gPSBjb21waWxlKGRlZXByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfZnV0cmVsX2NvID0gY29tcGlsZShmdXRpbXAgKyByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotCi10ZXN0X3BhdGggPSAiISEhX3Rlc3RfISEhIgotCi0KLWNsYXNzIFRlc3RJbXBvcnRlcjoKLQotICAgIG1vZHVsZXMgPSB7Ci0gICAgICAgICJob29rdGVzdG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIjogKEZhbHNlLCB0ZXN0Ml9vbGRhYnNfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyI6IChGYWxzZSwgdGVzdDJfbmV3YWJzX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiOiAoRmFsc2UsIHRlc3QyX25ld3JlbF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiOiAoVHJ1ZSwgdGVzdDJfZGVlcHJlbF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIjogKEZhbHNlLCB0ZXN0Ml9mdXRyZWxfY28pLAotICAgICAgICAic3ViIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICAgICAgInJlbG9hZG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgfQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9dGVzdF9wYXRoKToKLSAgICAgICAgaWYgcGF0aCAhPSB0ZXN0X3BhdGg6Ci0gICAgICAgICAgICAjIGlmIG91ciBjbGFzcyBpcyBvbiBzeXMucGF0aF9ob29rcywgd2UgbXVzdCByYWlzZQotICAgICAgICAgICAgIyBJbXBvcnRFcnJvciBmb3IgYW55IHBhdGggaXRlbSB0aGF0IHdlIGNhbid0IGhhbmRsZS4KLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpc3BrZywgY29kZSA9IHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSxpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCi0gICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICBpZiBpc3BrZzoKLSAgICAgICAgICAgIG1vZC5fX3BhdGhfXyA9IHNlbGYuX2dldF9fcGF0aF9fKCkKLSAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCi0gICAgICAgIHJldHVybiBtb2QKLQotCi1jbGFzcyBNZXRhSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gW10KLQotY2xhc3MgUGF0aEltcG9ydGVyKFRlc3RJbXBvcnRlcik6Ci0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhdCi0KLQotY2xhc3MgSW1wb3J0QmxvY2tlcjoKLSAgICAiIiJQbGFjZSBhbiBJbXBvcnRCbG9ja2VyIGluc3RhbmNlIG9uIHN5cy5tZXRhX3BhdGggYW5kIHlvdQotICAgIGNhbiBiZSBzdXJlIHRoZSBtb2R1bGVzIHlvdSBzcGVjaWZpZWQgY2FuJ3QgYmUgaW1wb3J0ZWQsIGV2ZW4KLSAgICBpZiBpdCdzIGEgYnVpbHRpbi4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKm5hbWVzdG9ibG9jayk6Ci0gICAgICAgIHNlbGYubmFtZXN0b2Jsb2NrID0gZGljdC5mcm9ta2V5cyhuYW1lc3RvYmxvY2spCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm5hbWVzdG9ibG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIHJldHVybiBOb25lCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkkgZGFyZSB5b3UiKQotCi0KLWNsYXNzIEltcFdyYXBwZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZSBhbmQgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIHN1Ym5hbWUgPSBmdWxsbmFtZS5zcGxpdCgiLiIpWy0xXQotICAgICAgICBpZiBzdWJuYW1lICE9IGZ1bGxuYW1lIGFuZCBzZWxmLnBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIHNlbGYucGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcGF0aCA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBbc2VsZi5wYXRoXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYgPSBpbXAuZmluZF9tb2R1bGUoc3VibmFtZSwgcGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIEltcExvYWRlcihmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpCi0KLQotY2xhc3MgSW1wTG9hZGVyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGZpbGVuYW1lLCBzdHVmZik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuc3R1ZmYgPSBzdHVmZgotCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzZWxmLmZpbGUsIHNlbGYuZmlsZW5hbWUsIHNlbGYuc3R1ZmYpCi0gICAgICAgIGlmIHNlbGYuZmlsZToKLSAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZiAgIyBmb3IgaW50cm9zcGVjdGlvbgotICAgICAgICByZXR1cm4gbW9kCi0KLQotY2xhc3MgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnBhdGggPSBzeXMucGF0aFs6XQotICAgICAgICBzZWxmLm1ldGFfcGF0aCA9IHN5cy5tZXRhX3BhdGhbOl0KLSAgICAgICAgc2VsZi5wYXRoX2hvb2tzID0gc3lzLnBhdGhfaG9va3NbOl0KLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQotICAgICAgICBzZWxmLm1vZHVsZXNfYmVmb3JlID0gc3VwcG9ydC5tb2R1bGVzX3NldHVwKCkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnBhdGgKLSAgICAgICAgc3lzLm1ldGFfcGF0aFs6XSA9IHNlbGYubWV0YV9wYXRoCi0gICAgICAgIHN5cy5wYXRoX2hvb2tzWzpdID0gc2VsZi5wYXRoX2hvb2tzCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgc3VwcG9ydC5tb2R1bGVzX2NsZWFudXAoKnNlbGYubW9kdWxlc19iZWZvcmUpCi0KLQotY2xhc3MgSW1wb3J0SG9va3NUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6Ci0KLSAgICBkZWYgZG9UZXN0SW1wb3J0cyhzZWxmLCBpbXBvcnRlcj1Ob25lKToKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0bW9kdWxlCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3Rtb2R1bGUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiKQotICAgICAgICBpZiBpbXBvcnRlcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0KLSAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCB0ZXN0X2NvKQotICAgICAgICBpbXBvcnQgcmVsb2FkbW9kdWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCBhcyBzdWJlc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3QuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3Quc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IHN1YgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5nZXRfbmFtZSgpLCAic3ViIikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm9sZGFicwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm9sZGFicyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5zdWIsIHN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld2FicwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5zdWIsIHN1YikKLQotICAgIGRlZiB0ZXN0TWV0YVBhdGgoc2VsZik6Ci0gICAgICAgIGkgPSBNZXRhSW1wb3J0ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQotICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoaSkKLQotICAgIGRlZiB0ZXN0UGF0aEhvb2soc2VsZik6Ci0gICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBQYXRoSW1wb3J0ZXIpCi0gICAgICAgIHN5cy5wYXRoLmFwcGVuZCh0ZXN0X3BhdGgpCi0gICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cygpCi0KLSAgICBkZWYgdGVzdEJsb2NrZXIoc2VsZik6Ci0gICAgICAgIG1uYW1lID0gImV4Y2VwdGlvbnMiICAjIGFuIGFyYml0cmFyeSBoYXJtbGVzcyBidWlsdGluIG1vZHVsZQotICAgICAgICBzdXBwb3J0LnVubG9hZChtbmFtZSkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoSW1wb3J0QmxvY2tlcihtbmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBtbmFtZSkKLQotICAgIGRlZiB0ZXN0SW1wV3JhcHBlcihzZWxmKToKLSAgICAgICAgaSA9IEltcFdyYXBwZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQotICAgICAgICBzeXMucGF0aF9ob29rcy5pbnNlcnQoMCwgSW1wV3JhcHBlcikKLSAgICAgICAgbW5hbWVzID0gKAotICAgICAgICAgICAgImNvbG9yc3lzIiwgInVybGxpYi5wYXJzZSIsICJkaXN0dXRpbHMuY29yZSIsICJzeXMiLAotICAgICAgICApCi0gICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6Ci0gICAgICAgICAgICBwYXJlbnQgPSBtbmFtZS5zcGxpdCgiLiIpWzBdCi0gICAgICAgICAgICBmb3IgbiBpbiBsaXN0KHN5cy5tb2R1bGVzKToKLSAgICAgICAgICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocGFyZW50KToKLSAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25dCi0gICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6Ci0gICAgICAgICAgICBtID0gX19pbXBvcnRfXyhtbmFtZSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgWyJfX2R1bW15X18iXSkKLSAgICAgICAgICAgICMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhbmRsZWQgdGhlIGltcG9ydAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobSwgIl9fbG9hZGVyX18iKSkKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSW1wb3J0SG9va3NUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQppbmRleCBjMzk3MTI4Li4xNGJkNWJjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQpAQCAtNCwxNyArNCw2IEBACiBidWlsdGlucy5fX2ltcG9ydF9fIGluc3RlYWQgb2YgaW1wb3J0bGliLl9faW1wb3J0X18uCiAKICIiIgotZnJvbSAuIGltcG9ydCB0ZXN0X21haW4KLQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBhcmdwYXJzZQotCi0gICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0V4ZWN1dGUgdGhlIGltcG9ydGxpYiB0ZXN0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1aXRlJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYicsICctLWJ1aWx0aW4nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndXNlIGJ1aWx0aW5zLl9faW1wb3J0X18oKSBpbnN0ZWFkIG9mIGltcG9ydGxpYicpCi0gICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKLSAgICBpZiBhcmdzLmJ1aWx0aW46Ci0gICAgICAgIHV0aWwudXNpbmdfX19pbXBvcnRfXyA9IFRydWUKKyAgICBmcm9tIC4gaW1wb3J0IHRlc3RfbWFpbgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMmMxN2FjMy4uMjA3MGRhZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQpAQCAtMiw3ICsyLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorY2xhc3MgRmluZGVyVGVzdHMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKIAogICAgICIiIkJhc2ljIHRlc3RzIGZvciBhIGZpbmRlciB0byBwYXNzLiIiIgogCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgIHBhc3MKIAogCi1jbGFzcyBMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgbWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKK2NsYXNzIExvYWRlclRlc3RzKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtODEsMTEgKzgxLDYgQEAKICAgICAgICAgcGFzcwogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKLSAgICAgICAgIiIiSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcywgaXQgc2hvdWxkIGJlIHJldXNlZC4iIiIKLSAgICAgICAgcGFzcwotCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUoc2VsZik6CiAgICAgICAgICIiIklmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMgYW5kIGEgcmVsb2FkIGZhaWxzCiAgICAgICAgIChlLmcuIGEgU3ludGF4RXJyb3IpLCB0aGUgbW9kdWxlIHNob3VsZCBiZSBpbiB0aGUgc3RhdGUgaXQgd2FzIGJlZm9yZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKaW5kZXggZGEwZWYyOC4uOTM0NTYyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDExICsxLDUzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCisKK2NsYXNzIEZpbmRTcGVjVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKKworICAgICIiIlRlc3QgZmluZF9zcGVjKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgQ29tbW9uIGNhc2UuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQub3JpZ2luLCAnYnVpbHQtaW4nKQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vYnQgYmUgaW4gYSBwYWNrYWdlLgorICAgIHRlc3RfbW9kdWxlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZV9vdmVyX21vZHVsZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnaW1wb3J0bGliJworICAgICAgICBhc3NlcnQgbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgdmFsdWUgZm9yICdwYXRoJyBzaG91bGQgYWx3YXlzIHRyaWdnZXIgYSBmYWlsZWQgaW1wb3J0LgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhidWlsdGluX3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQorCitGcm96ZW5fRmluZFNwZWNUZXN0cywgU291cmNlX0ZpbmRTcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kU3BlY1Rlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCkBAIC0xMyw4ICs1NSw5IEBACiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBmb3VuZCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZvdW5kLCAnbG9hZF9tb2R1bGUnKSkKIAogICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgogICAgIHRlc3RfcGFja2FnZSA9IHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQpAQCAtMjQsMjIgKzY3LDE5IEBACiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBhc3NlcnQgJ2ltcG9ydGxpYicgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcwotICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdpbXBvcnRsaWInKQorICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ2ltcG9ydGxpYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKIAogICAgIGRlZiB0ZXN0X2lnbm9yZV9wYXRoKHNlbGYpOgogICAgICAgICAjIFRoZSB2YWx1ZSBmb3IgJ3BhdGgnIHNob3VsZCBhbHdheXMgdHJpZ2dlciBhIGZhaWxlZCBpbXBvcnQuCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3BrZyddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CmluZGV4IDEyYTc5YzYuLmE2MzZmNzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQpAQCAtMSw5ICsxLDkgQEAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGJ1aWx0aW5fdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDggKzEzLDkgQEAKIAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKIAotICAgIHZlcmlmaWNhdGlvbiA9IHsnX19uYW1lX18nOiAnZXJybm8nLCAnX19wYWNrYWdlX18nOiAnJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZmljYXRpb24gPSB7J19fbmFtZV9fJzogJ2Vycm5vJywgJ19fcGFja2FnZV9fJzogJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQogCiAgICAgZGVmIHZlcmlmeShzZWxmLCBtb2R1bGUpOgogICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgbW9kdWxlIG1hdGNoZXMgYWdhaW5zdCB3aGF0IGl0IHNob3VsZCBoYXZlLiIiIgpAQCAtMjMsOCArMjQsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQogICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX25hbWVfXywgc3lzLm1vZHVsZXMpCiAKLSAgICBsb2FkX21vZHVsZSA9IHN0YXRpY21ldGhvZChsYW1iZGEgbmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShuYW1lKSkKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUobmFtZSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgIyBDb21tb24gY2FzZS4KQEAgLTU1LDQ1ICs1Niw1MSBAQAogICAgIGRlZiB0ZXN0X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CiAgICAgICAgICMgVXNpbmcgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYWxyZWFkeSBpbXBvcnRlZCBidXQgbm90IGEgYnVpbHQtaW4gc2hvdWxkCiAgICAgICAgICMgc3RpbGwgZmFpbC4KLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0bGliLCAnX19maWxlX18nKSAgIyBOb3QgYSBidWlsdC1pbi4KKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYnVpbHRpbl9yZWxvYWRfdGVzdCcKKyAgICAgICAgYXNzZXJ0IG1vZHVsZV9uYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobW9kdWxlX25hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSA9IG1vZHVsZQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUoJ2ltcG9ydGxpYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdpbXBvcnRsaWInKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCiAKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgQnVpbHRpbkltcG9ydGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBzb3VyY2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQorICAgICAgICByZXN1bHQgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuaXNfcGFja2FnZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9ub3RfYnVpbHRpbihzZWxmKToKICAgICAgICAgIyBNb2R1bGVzIG5vdCBidWlsdC1pbiBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICBtZXRob2QoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhidWlsdGluX3V0aWwuQkFEX05BTUUpCiAKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0luc3BlY3RMb2FkZXJUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBJbnNwZWN0TG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKaW5kZXggNzZjNTNlNC4uYmIyNTI4ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xLDIyICsxLDI3IEBACi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCisKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAorCisjIFhYWCBmaW5kX3NwZWMgdGVzdHMKKworQHVuaXR0ZXN0LnNraXBJZihleHRfdXRpbC5GSUxFTkFNRSBpcyBOb25lLCAnX3Rlc3RjYXBpIG5vdCBhdmFpbGFibGUnKQogQHV0aWwuY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cwotY2xhc3MgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBFeHRlbnNpb25Nb2R1bGVDYXNlU2Vuc2l0aXZpdHlUZXN0OgogCiAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYpOgogICAgICAgICBnb29kX25hbWUgPSBleHRfdXRpbC5OQU1FCiAgICAgICAgIGJhZF9uYW1lID0gZ29vZF9uYW1lLnVwcGVyKCkKICAgICAgICAgYXNzZXJ0IGdvb2RfbmFtZSAhPSBiYWRfbmFtZQotICAgICAgICBmaW5kZXIgPSBfYm9vdHN0cmFwLkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2Jvb3RzdHJhcC5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCiAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUoYmFkX25hbWUpCiAKICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2ZShzZWxmKToKQEAgLTM3LDE0ICs0MiwxMCBAQAogICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kX21vZHVsZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb2FkZXIsICdsb2FkX21vZHVsZScpKQogCi0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgaWYgZXh0X3V0aWwuRklMRU5BTUUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCkKK0Zyb3plbl9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHksIFNvdXJjZV9FeHRlbnNpb25DYXNlU2Vuc2l0aXZpdHkgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdCwKKyAgICAgICAgbWFjaGluZXJ5PVtmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5XSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKaW5kZXggMzdmNjc3Mi4uZDBjOGJiMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxNyArMSwyMSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHVuaXR0ZXN0CiAKKyMgWFhYIGZpbmRfc3BlYyB0ZXN0cworCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCB0aGUgZmluZGVyIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGltcG9ydGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCisgICAgICAgIGltcG9ydGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcih1dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTKSkKICAgICAgICAgcmV0dXJuIGltcG9ydGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtMjksMTEgKzMzLDkgQEAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmZpbmRfbW9kdWxlKCdhc2RmamtsOycpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKaW5kZXggZTc5MDY3NS4uZDA0ZGZmNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQpAQCAtMSwxMCArMSwxMiBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGV4dF91dGlsCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIAorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIApAQCAtMTMsOCArMTUsOCBAQAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYubG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCiAKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5sb2FkZXIubG9hZF9tb2R1bGUoZnVsbG5hbWUpCkBAIC0zNiw3ICszOCw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHRfdXRpbC5OQU1FLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQogCiAgICAgIyBObyBleHRlbnNpb24gbW9kdWxlIGFzIF9faW5pdF9fIGF2YWlsYWJsZSBmb3IgdGVzdGluZy4KICAgICB0ZXN0X3BhY2thZ2UgPSBOb25lCkBAIC02MSwxNiArNjMsMTUgQEAKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShleHRfdXRpbC5OQU1FKSkKLSAgICAgICAgZm9yIHN1ZmZpeCBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTOgorICAgICAgICBmb3Igc3VmZml4IGluIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUzoKICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3NvbWUnLCAncGF0aCcsICdwa2cnLCAnX19pbml0X18nICsgc3VmZml4KQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoJ3BrZycsIHBhdGgpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdwa2cnLCBwYXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5pc19wYWNrYWdlKCdwa2cnKSkKIAorRnJvemVuX0xvYWRlclRlc3RzLCBTb3VyY2VfTG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTG9hZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KExvYWRlclRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQppbmRleCAxZDk2OWExLi40OWQ2NzM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xLDMyICsxLDMyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Citmcm9tIC4uIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHRlc3RfdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IGNvbGxlY3Rpb25zCi1pbXBvcnQgaW1wCiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBQYXRoSG9va1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFBhdGhIb29rVGVzdHM6CiAKICAgICAiIiJUZXN0IHRoZSBwYXRoIGhvb2sgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgogICAgICMgWFhYIFNob3VsZCBpdCBvbmx5IHN1Y2NlZWQgZm9yIHByZS1leGlzdGluZyBkaXJlY3Rvcmllcz8KICAgICAjIFhYWCBTaG91bGQgaXQgb25seSB3b3JrIGZvciBkaXJlY3RvcmllcyBjb250YWluaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGU/CiAKICAgICBkZWYgaG9vayhzZWxmLCBlbnRyeSk6Ci0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpKGVudHJ5KQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soCisgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpKGVudHJ5KQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBQYXRoIGhvb2sgc2hvdWxkIGhhbmRsZSBhIGRpcmVjdG9yeSB3aGVyZSBhIGtub3duIGV4dGVuc2lvbiBtb2R1bGUKICAgICAgICAgIyBleGlzdHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYuaG9vayh1dGlsLlBBVEgpLCAnZmluZF9tb2R1bGUnKSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXRoSG9va1Rlc3RzKQorRnJvemVuX1BhdGhIb29rc1Rlc3RzLCBTb3VyY2VfUGF0aEhvb2tzVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXRoSG9va1Rlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKaW5kZXggYTI2NmRkOS4uOGQwODlmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3V0aWwucHkKQEAgLTEsNCArMSwzIEBACi1pbXBvcnQgaW1wCiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQppbmRleCBmMGFiZTBlLi5mOWY5N2YzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDE1ICsxLDUyIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKK2Zyb20gLi4gaW1wb3J0IHV0aWwKKworbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKIAogaW1wb3J0IHVuaXR0ZXN0CiAKIAorY2xhc3MgRmluZFNwZWNUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgorCisgICAgIiIiVGVzdCBmaW5kaW5nIGZyb3plbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIGZpbmQoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX3NwZWMobmFtZSwgcGF0aCkKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgJ2Zyb3plbicpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCdfX3BoZWxsb19fJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3BlYykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5maW5kKCdfX3BoZWxsb19fLnNwYW0nLCBbJ19fcGhlbGxvX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3BlYykKKworICAgICMgTm8gZnJvemVuIHBhY2thZ2Ugd2l0aGluIGFub3RoZXIgcGFja2FnZSB0byB0ZXN0IHdpdGguCisgICAgdGVzdF9wYWNrYWdlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIE5vIGVhc3kgd2F5IHRvIHRlc3QuCisgICAgdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQorCisgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZCgnPG5vdCByZWFsPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKK0Zyb3plbl9GaW5kU3BlY1Rlc3RzLCBTb3VyY2VfRmluZFNwZWNUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRTcGVjVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCisKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRpbmcgZnJvemVuIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgZmluZChzZWxmLCBuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtMzUsMTEgKzcyLDkgQEAKICAgICAgICAgbG9hZGVyID0gc2VsZi5maW5kKCc8bm90IHJlYWw+JykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorRnJvemVuX0ZpbmRlclRlc3RzLCBTb3VyY2VfRmluZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKaW5kZXggZjNhOGJmNi4uMmFiYmU5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQpAQCAtMSwxOCArMSw5MyBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotaW1wb3J0IGltcAotaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKKworbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworCitpbXBvcnQgc3lzCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0CitpbXBvcnQgdHlwZXMKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIEV4ZWNNb2R1bGVUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBvcmlnaW49J2Zyb3plbicsCisgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9c2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihtb2R1bGUsICdpbml0aWFsaXplZCcpCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobW9kdWxlLmluaXRpYWxpemVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19zcGVjX18nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fc3BlY19fLm9yaWdpbiwgJ2Zyb3plbicpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBzdGRvdXQuZ2V0dmFsdWUoKQorCisgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJ0hlbGxvIHdvcmxkIVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnX19zcGVjX18nKSkKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19waGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6IG5hbWV9CisgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgorICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRyX3ZhbHVlLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3Ige25hbWV9LnthdHRyfSwge2dpdmVuIXJ9ICE9IHtleHBlY3RlZCFyfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lLCBhdHRyPWF0dHIsIGdpdmVuPWF0dHJfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD12YWx1ZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorCisgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19waGVsbG9fXy5zcGFtJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycpOgorICAgICAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiBuYW1lfQorICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cl92YWx1ZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHtuYW1lfS57YXR0cn0sIHtnaXZlbn0gIT0ge2V4cGVjdGVkIXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUsIGF0dHI9YXR0ciwgZ2l2ZW49YXR0cl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPXZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCAnSGVsbG8gd29ybGQhXG4nKQorCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcihzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9kdWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQorCisgICAgIyBObyB3YXkgdG8gdHJpZ2dlciBhbiBlcnJvciBpbiBhIGZyb3plbiBtb2R1bGUuCisgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQorCisgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5leGVjX21vZHVsZSgnX25vdF9yZWFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ19ub3RfcmVhbCcpCisKK0Zyb3plbl9FeGVjTW9kdWxlVGVzdHMsIFNvdXJjZV9FeGVjTW9kdWxlVGVzdHMgPSB1dGlsLnRlc3RfYm90aChFeGVjTW9kdWxlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKIAogY2xhc3MgTG9hZGVyVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX2hlbGxvX18nLAogICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKQEAgLTIxLDExICs5NiwxMSBAQAogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19fcGhlbGxvX18nKSwgIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXycpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXycpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX19waGVsbG9fXycsCiAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnX19waGVsbG9fXycsCi0gICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbJ19fcGhlbGxvX18nXSwKLSAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAorICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW10sCisgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXyc6IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIGF0dHIsIHZhbHVlIGluIGNoZWNrLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgYXR0cl92YWx1ZSA9IGdldGF0dHIobW9kdWxlLCBhdHRyKQpAQCAtMzgsMTAgKzExMywxMCBAQAogICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19waGVsbG9fXycsICdfX3BoZWxsb19fLnNwYW0nKSwgXAogICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19waGVsbG9fXy5zcGFtJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fLnNwYW0nKQogICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogJ19fcGhlbGxvX18uc3BhbScsCiAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICdfX3BoZWxsb19fJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgogICAgICAgICAgICAgICAgIGF0dHJfdmFsdWUgPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKQEAgLTUzLDE1ICsxMjgsMTUgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUxID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQotICAgICAgICAgICAgbW9kdWxlMiA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgIG1vZHVsZTEgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgIG1vZHVsZTIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlMSwgbW9kdWxlMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIZWxsbyB3b3JsZCFcbkhlbGxvIHdvcmxkIVxuJykKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpOgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9kdWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxtb2R1bGUgJ19faGVsbG9fXycgKGZyb3plbik+IikKIApAQCAtNjksMTMgKzE0NCwxNiBAQAogICAgIHRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSA9IE5vbmUKIAogICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6Ci0gICAgICAgIGFzc2VydCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKKyAgICAgICAgYXNzZXJ0IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdfbm90X3JlYWwnKSBpcyBOb25lCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfbm90X3JlYWwnKQorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19ub3RfcmVhbCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdfbm90X3JlYWwnKQogCitGcm96ZW5fTG9hZGVyVGVzdHMsIFNvdXJjZV9Mb2FkZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1jbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgdGhlIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgRnJvemVuSW1wb3J0ZXIuIiIiCiAKQEAgLTgzLDE1ICsxNjEsMTUgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBvYmplY3QgaXMgZ29vZC4KICAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgY29kZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfY29kZShuYW1lKQotICAgICAgICAgICAgbW9kID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGNvZGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5nZXRfY29kZShuYW1lKQorICAgICAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2QsICdpbml0aWFsaXplZCcpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKIAogICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CiAgICAgICAgICMgU2hvdWxkIGFsd2F5cyByZXR1cm4gTm9uZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9zb3VyY2UoJ19faGVsbG9fXycpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9zb3VyY2UoJ19faGVsbG9fXycpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CkBAIC05OSwyMiArMTc3LDIwIEBACiAgICAgICAgIHRlc3RfZm9yID0gKCgnX19oZWxsb19fJywgRmFsc2UpLCAoJ19fcGhlbGxvX18nLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKCdfX3BoZWxsb19fLnNwYW0nLCBGYWxzZSkpCiAgICAgICAgIGZvciBuYW1lLCBpc19wYWNrYWdlIGluIHRlc3RfZm9yOgotICAgICAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYm9vbChyZXN1bHQpLCBpc19wYWNrYWdlKQogCiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKICAgICAgICAgIyBSYWlzZSBJbXBvcnRFcnJvciBmb3IgbW9kdWxlcyB0aGF0IGFyZSBub3QgZnJvemVuLgogICAgICAgICBmb3IgbWV0aF9uYW1lIGluICgnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsICdpc19wYWNrYWdlJyk6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWV0aF9uYW1lKQorICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgbWV0aF9uYW1lKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgbWV0aG9kKCdpbXBvcnRsaWInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ2ltcG9ydGxpYicpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMsIEluc3BlY3RMb2FkZXJUZXN0cykKK0Zyb3plbl9JTFRlc3RzLCBTb3VyY2VfSUxUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEluc3BlY3RMb2FkZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fbG9hZGVyX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19sb2FkZXJfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGY4MDEwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fbG9hZGVyX18ucHkKQEAgLTAsMCArMSw3MCBAQAorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQoraW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCisKKworY2xhc3MgU3BlY0xvYWRlck1vY2s6CisKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgcmV0dXJuIG1hY2hpbmVyeS5Nb2R1bGVTcGVjKGZ1bGxuYW1lLCBzZWxmKQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTcGVjTG9hZGVyQXR0cmlidXRlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBTcGVjTG9hZGVyTW9jaygpCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKK0Zyb3plbl9TcGVjVGVzdHMsIFNvdXJjZV9TcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU3BlY0xvYWRlckF0dHJpYnV0ZVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworY2xhc3MgTG9hZGVyTW9jazoKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXSA9IHNlbGYubW9kdWxlCisgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorCisKK2NsYXNzIExvYWRlckF0dHJpYnV0ZVRlc3RzOgorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfX19taXNzaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyTW9jaygpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2JsYWgnKSwgdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtsb2FkZXJdKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X19fbG9hZGVyX19faXNfTm9uZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICBsb2FkZXIgPSBMb2FkZXJNb2NrKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCisKK0Zyb3plbl9UZXN0cywgU291cmNlX1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyQXR0cmlidXRlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CmluZGV4IDc4M2NkZTEuLjJlMTk3MjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKQEAgLTksNyArOSw3IEBACiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKIAogCi1jbGFzcyBVc2luZ19fcGFja2FnZV9fKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFVzaW5nX19wYWNrYWdlX186CiAKICAgICAiIiJVc2Ugb2YgX19wYWNrYWdlX18gc3VwZXJjZWRlcyB0aGUgdXNlIG9mIF9fbmFtZV9fL19fcGF0aF9fIHRvIGNhbGN1bGF0ZQogICAgIHdoYXQgcGFja2FnZSBhIG1vZHVsZSBiZWxvbmdzIHRvLiBUaGUgYmFzaWMgYWxnb3JpdGhtIGlzIFtfX3BhY2thZ2VfX106OgpAQCAtMzYsMTAgKzM2LDEwIEBACiAKICAgICBkZWYgdGVzdF91c2luZ19fX3BhY2thZ2VfXyhzZWxmKToKICAgICAgICAgIyBbX19wYWNrYWdlX19dCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5mYWtlJykKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLmZha2UnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz17J19fcGFja2FnZV9fJzogJ3BrZy5mYWtlJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCkBAIC00OSwxMCArNDksMTAgQEAKICAgICAgICAgZ2xvYmFsc18gPSB7J19fbmFtZV9fJzogJ3BrZy5mYWtlJywgJ19fcGF0aF9fJzogW119CiAgICAgICAgIGlmIHBhY2thZ2VfYXNfTm9uZToKICAgICAgICAgICAgIGdsb2JhbHNfWydfX3BhY2thZ2VfXyddID0gTm9uZQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuZmFrZScpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscz0gZ2xvYmFsc18sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cuZmFrZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzPSBnbG9iYWxzXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogCkBAIC02MywxNiArNjMsMjcgQEAKICAgICBkZWYgdGVzdF9iYWRfX3BhY2thZ2VfXyhzZWxmKToKICAgICAgICAgZ2xvYmFscyA9IHsnX19wYWNrYWdlX18nOiAnPG5vdCByZWFsPid9CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQogCiAgICAgZGVmIHRlc3RfYnVua19fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICBnbG9iYWxzID0geydfX3BhY2thZ2VfXyc6IDQyfQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisKK2NsYXNzIFVzaW5nX19wYWNrYWdlX19QRVAzMDIoVXNpbmdfX3BhY2thZ2VfXyk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX21vZHVsZXMKKworRnJvemVuX1VzaW5nUGFja2FnZVBFUDMwMiwgU291cmNlX1VzaW5nUGFja2FnZVBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBVc2luZ19fcGFja2FnZV9fUEVQMzAyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKK2NsYXNzIFVzaW5nX19wYWNrYWdlX19QRVAzMDIoVXNpbmdfX3BhY2thZ2VfXyk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX3NwZWMKKworRnJvemVuX1VzaW5nUGFja2FnZVBFUDQ1MSwgU291cmNlX1VzaW5nUGFja2FnZVBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBVc2luZ19fcGFja2FnZV9fUEVQMzAyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAotQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5Ci1jbGFzcyBTZXR0aW5nX19wYWNrYWdlX18odW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fOgogCiAgICAgIiIiQmVjYXVzZSBfX3BhY2thZ2VfXyBpcyBhIG5ldyBmZWF0dXJlLCBpdCBpcyBub3QgYWx3YXlzIHNldCBieSBhIGxvYWRlci4KICAgICBJbXBvcnQgd2lsbCBzZXQgaXQgYXMgbmVlZGVkIHRvIGhlbHAgd2l0aCB0aGUgdHJhbnNpdGlvbiB0byByZWx5aW5nIG9uCkBAIC04NCwzNiArOTUsMzkgQEAKIAogICAgICIiIgogCisgICAgX19pbXBvcnRfXyA9IGltcG9ydF91dGlsLl9faW1wb3J0X19bMV0KKwogICAgICMgW3RvcC1sZXZlbF0KICAgICBkZWYgdGVzdF90b3BfbGV2ZWwoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWyd0b3BfbGV2ZWwnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCd0b3BfbGV2ZWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAnJykKIAogICAgICMgW3BhY2thZ2VdCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgZGVsIG1vY2tbJ3BrZyddLl9fcGFja2FnZV9fCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICdwa2cnKQogCiAgICAgIyBbc3VibW9kdWxlXQogICAgIGRlZiB0ZXN0X3N1Ym1vZHVsZShzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QnKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWydwa2cubW9kJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBwa2cgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kJykKKyAgICAgICAgICAgICAgICBwa2cgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2QnKQogICAgICAgICAgICAgICAgIG1vZHVsZSA9IGdldGF0dHIocGtnLCAnbW9kJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJ3BrZycpCiAKK2NsYXNzIFNldHRpbmdfX3BhY2thZ2VfX1BFUDMwMihTZXR0aW5nX19wYWNrYWdlX18sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChVc2luZ19fcGFja2FnZV9fLCBTZXR0aW5nX19wYWNrYWdlX18pCitjbGFzcyBTZXR0aW5nX19wYWNrYWdlX19QRVA0NTEoU2V0dGluZ19fcGFja2FnZV9fLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX3NwZWMKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQppbmRleCAzZDRjZDk0Li40MzljMTA1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKQEAgLTEsMjMgKzEsNDEgQEAKLWZyb20gLi4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0bGliX3Rlc3RfdXRpbAotZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCitmcm9tIC4uIGltcG9ydCB1dGlsCitmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKKworZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAorUEtHX05BTUUgPSAnZmluZScKK1NVQk1PRF9OQU1FID0gJ2ZpbmUuYm9ndXMnCiAKLWNsYXNzIEJhZExvYWRlckZpbmRlcjoKLSAgICBiYWQgPSAnZmluZS5ib2d1cycKKworY2xhc3MgQmFkU3BlY0ZpbmRlckxvYWRlcjoKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aCk6Ci0gICAgICAgIGlmIGZ1bGxuYW1lID09IGNscy5iYWQ6Ci0gICAgICAgICAgICByZXR1cm4gY2xzCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgotICAgICAgICBpZiBmdWxsbmFtZSA9PSBjbHMuYmFkOgorICAgIGRlZiBmaW5kX3NwZWMoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lID09IFNVQk1PRF9OQU1FOgorICAgICAgICAgICAgc3BlYyA9IG1hY2hpbmVyeS5Nb2R1bGVTcGVjKGZ1bGxuYW1lLCBjbHMpCisgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBleGVjX21vZHVsZShtb2R1bGUpOgorICAgICAgICBpZiBtb2R1bGUuX19uYW1lX18gPT0gU1VCTU9EX05BTUU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignSSBjYW5ub3QgYmUgbG9hZGVkIScpCiAKIAotY2xhc3MgQVBJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBCYWRMb2FkZXJGaW5kZXI6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGgpOgorICAgICAgICBpZiBmdWxsbmFtZSA9PSBTVUJNT0RfTkFNRToKKyAgICAgICAgICAgIHJldHVybiBjbHMKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKKyAgICAgICAgaWYgZnVsbG5hbWUgPT0gU1VCTU9EX05BTUU6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignSSBjYW5ub3QgYmUgbG9hZGVkIScpCisKKworY2xhc3MgQVBJVGVzdDoKIAogICAgICIiIlRlc3QgQVBJLXNwZWNpZmljIGRldGFpbHMgZm9yIF9faW1wb3J0X18gKGUuZy4gcmFpc2luZyB0aGUgcmlnaHQKICAgICBleGNlcHRpb24gd2hlbiBwYXNzaW5nIGluIGFuIGludCBmb3IgdGhlIG1vZHVsZSBuYW1lKS4iIiIKQEAgLTI1LDQzICs0Myw1MiBAQAogICAgIGRlZiB0ZXN0X25hbWVfcmVxdWlyZXNfcnBhcml0aW9uKHNlbGYpOgogICAgICAgICAjIFJhaXNlIFR5cGVFcnJvciBpZiBhIG5vbi1zdHJpbmcgaXMgcGFzc2VkIGluIGZvciB0aGUgbW9kdWxlIG5hbWUuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwuaW1wb3J0Xyg0MikKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyg0MikKIAogICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2xldmVsKHNlbGYpOgogICAgICAgICAjIFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBhIG5lZ2F0aXZlIGxldmVsIGlzIHNwZWNpZmllZC4KICAgICAgICAgIyBQRVAgMzI4IGRpZCBhd2F5IHdpdGggc3lzLm1vZHVsZSBOb25lIGVudHJpZXMgYW5kIHRoZSBhbWJpZ3VpdHkgb2YKICAgICAgICAgIyBhYnNvbHV0ZS9yZWxhdGl2ZSBpbXBvcnRzLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdvcycsIGdsb2JhbHMoKSwgbGV2ZWw9LTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ29zJywgZ2xvYmFscygpLCBsZXZlbD0tMSkKIAogICAgIGRlZiB0ZXN0X25vbmV4aXN0ZW50X2Zyb21saXN0X2VudHJ5KHNlbGYpOgogICAgICAgICAjIElmIHNvbWV0aGluZyBpbiBmcm9tbGlzdCBkb2Vzbid0IGV4aXN0LCB0aGF0J3Mgb2theS4KICAgICAgICAgIyBpc3N1ZTE1NzE1Ci0gICAgICAgIG1vZCA9IGltcC5uZXdfbW9kdWxlKCdmaW5lJykKKyAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZShQS0dfTkFNRSkKICAgICAgICAgbW9kLl9fcGF0aF9fID0gWydYWFgnXQotICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6Ci0gICAgICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwudW5jYWNoZSgnZmluZScpOgotICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydmaW5lJ10gPSBtb2QKLSAgICAgICAgICAgICAgICB1dGlsLmltcG9ydF8oJ2ZpbmUnLCBmcm9tbGlzdD1bJ25vdCBoZXJlJ10pCisgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLmJhZF9maW5kZXJfbG9hZGVyXSk6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShQS0dfTkFNRSk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbUEtHX05BTUVdID0gbW9kCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKFBLR19OQU1FLCBmcm9tbGlzdD1bJ25vdCBoZXJlJ10pCiAKICAgICBkZWYgdGVzdF9mcm9tbGlzdF9sb2FkX2Vycm9yX3Byb3BhZ2F0ZXMoc2VsZik6CiAgICAgICAgICMgSWYgc29tZXRoaW5nIGluIGZyb21saXN0IHRyaWdnZXJzIGFuIGV4Y2VwdGlvbiBub3QgcmVsYXRlZCB0byBub3QKICAgICAgICAgIyBleGlzdGluZywgbGV0IHRoYXQgZXhjZXB0aW9uIHByb3BhZ2F0ZS4KICAgICAgICAgIyBpc3N1ZTE1MzE2Ci0gICAgICAgIG1vZCA9IGltcC5uZXdfbW9kdWxlKCdmaW5lJykKKyAgICAgICAgbW9kID0gdHlwZXMuTW9kdWxlVHlwZShQS0dfTkFNRSkKICAgICAgICAgbW9kLl9fcGF0aF9fID0gWydYWFgnXQotICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bQmFkTG9hZGVyRmluZGVyXSk6Ci0gICAgICAgICAgICB3aXRoIGltcG9ydGxpYl90ZXN0X3V0aWwudW5jYWNoZSgnZmluZScpOgotICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydmaW5lJ10gPSBtb2QKKyAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuYmFkX2ZpbmRlcl9sb2FkZXJdKToKKyAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKFBLR19OQU1FKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1tQS0dfTkFNRV0gPSBtb2QKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydib2d1cyddKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oUEtHX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bU1VCTU9EX05BTUUucnBhcnRpdGlvbignLicpWy0xXV0pCiAKIAorY2xhc3MgT2xkQVBJVGVzdHMoQVBJVGVzdCk6CisgICAgYmFkX2ZpbmRlcl9sb2FkZXIgPSBCYWRMb2FkZXJGaW5kZXIKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoQVBJVGVzdCkKK0Zyb3plbl9PbGRBUElUZXN0cywgU291cmNlX09sZEFQSVRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE9sZEFQSVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworY2xhc3MgU3BlY0FQSVRlc3RzKEFQSVRlc3QpOgorICAgIGJhZF9maW5kZXJfbG9hZGVyID0gQmFkU3BlY0ZpbmRlckxvYWRlcgorCitGcm96ZW5fU3BlY0FQSVRlc3RzLCBTb3VyY2VfU3BlY0FQSVRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNwZWNBUElUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKaW5kZXggMjA3Mzc4YS4uYzI5MmVlNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2NhY2hpbmcucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBVc2VDYWNoZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBVc2VDYWNoZToKIAogICAgICIiIldoZW4gaXQgY29tZXMgdG8gc3lzLm1vZHVsZXMsIGltcG9ydCBwcmVmZXJzIGl0IG92ZXIgYW55dGhpbmcgZWxzZS4KIApAQCAtMjEsMTIgKzIxLDEzIEBACiAgICAgSW1wb3J0RXJyb3IgaXMgcmFpc2VkIFtOb25lIGluIGNhY2hlXS4KIAogICAgICIiIgorCiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGUoc2VsZik6CiAgICAgICAgICMgW3VzZSBjYWNoZV0KICAgICAgICAgbW9kdWxlX3RvX3VzZSA9ICJzb21lIG1vZHVsZSBmb3VuZCEiCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdzb21lX21vZHVsZScpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ3NvbWVfbW9kdWxlJ10gPSBtb2R1bGVfdG9fdXNlCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzb21lX21vZHVsZScpCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3NvbWVfbW9kdWxlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlX3RvX3VzZSksIGlkKG1vZHVsZSkpCiAKICAgICBkZWYgdGVzdF9Ob25lX2luX2NhY2hlKHNlbGYpOgpAQCAtMzUsOSArMzYsMTkgQEAKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IE5vbmUKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8obmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCiAKK0Zyb3plbl9Vc2VDYWNoZSwgU291cmNlX1VzZUNhY2hlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFVzZUNhY2hlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworY2xhc3MgSW1wb3J0bGliVXNlQ2FjaGUoVXNlQ2FjaGUsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgUGVydGluZW50IG9ubHkgdG8gUEVQIDMwMjsgZXhlY19tb2R1bGUoKSBkb2Vzbid0IHJldHVybiBhIG1vZHVsZS4KKworICAgIF9faW1wb3J0X18gPSBpbXBvcnRfdXRpbC5fX2ltcG9ydF9fWzFdCisKICAgICBkZWYgY3JlYXRlX21vY2soc2VsZiwgKm5hbWVzLCByZXR1cm5fPU5vbmUpOgogICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoKm5hbWVzKQogICAgICAgICBvcmlnaW5hbF9sb2FkID0gbW9jay5sb2FkX21vZHVsZQpAQCAtNDksNDAgKzYwLDMzIEBACiAKICAgICAjIF9faW1wb3J0X18gaW5jb25zaXN0ZW50IGJldHdlZW4gbG9hZGVycyBhbmQgYnVpbHQtaW4gaW1wb3J0IHdoZW4gaXQgY29tZXMKICAgICAjICAgdG8gd2hlbiB0byB1c2UgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcyBhbmQgd2hlbiBub3QgdG8uCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIG9uIHJldHVybl0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdtb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZSksIGlkKHN5cy5tb2R1bGVzWydtb2R1bGUnXSkpCiAKICAgICAjIFNlZSB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcigpIGZvciByZWFzb25pbmcuCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfZm9yX2Fzc2lnbmluZ190b19hdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgdG8gYXR0cmlidXRlXQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQobW9kdWxlLm1vZHVsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZChzeXMubW9kdWxlc1sncGtnLm1vZHVsZSddKSkKIAogICAgICMgU2VlIHRlc3RfdXNpbmdfY2FjaGVfYWZ0ZXJfbG9hZGVyKCkgZm9yIHJlYXNvbmluZy4KLSAgICBAaW1wb3J0X3V0aWwuaW1wb3J0bGliX29ubHkKICAgICBkZWYgdGVzdF91c2luZ19jYWNoZV9mb3JfZnJvbWxpc3Qoc2VsZik6CiAgICAgICAgICMgW2Zyb20gY2FjaGUgZm9yIGZyb21saXN0XQogICAgICAgICB3aXRoIHNlbGYuY3JlYXRlX21vY2soJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZS5tb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc3lzLm1vZHVsZXNbJ3BrZy5tb2R1bGUnXSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNlQ2FjaGUpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQppbmRleCBjMTZjMzM3Li41OGYyNDRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CkBAIC0xLDEwICsxLDEwIEBACiAiIiJUZXN0IHRoYXQgdGhlIHNlbWFudGljcyByZWxhdGluZyB0byB0aGUgJ2Zyb21saXN0JyBhcmd1bWVudCBhcmUgY29ycmVjdC4iIiIKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAotaW1wb3J0IGltcAogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFJldHVyblZhbHVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgUmV0dXJuVmFsdWU6CiAKICAgICAiIiJUaGUgdXNlIG9mIGZyb21saXN0IGluZmx1ZW5jZXMgd2hhdCBpbXBvcnQgcmV0dXJucy4KIApAQCAtMTcsMjAgKzE3LDIzIEBACiAKICAgICBkZWYgdGVzdF9yZXR1cm5fZnJvbV9pbXBvcnQoc2VsZik6CiAgICAgICAgICMgW2ltcG9ydCByZXR1cm5dCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3JldHVybl9mcm9tX2Zyb21faW1wb3J0KHNlbGYpOgogICAgICAgICAjIFtmcm9tIHJldHVybl0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKWFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCiAKK0Zyb3plbl9SZXR1cm5WYWx1ZSwgU291cmNlX1JldHVyblZhbHVlID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFJldHVyblZhbHVlLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWNsYXNzIEhhbmRsaW5nRnJvbWxpc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBIYW5kbGluZ0Zyb21saXN0OgogCiAgICAgIiIiVXNpbmcgZnJvbWxpc3QgdHJpZ2dlcnMgZGlmZmVyZW50IGFjdGlvbnMgYmFzZWQgb24gd2hhdCBpcyBiZWluZyBhc2tlZAogICAgIG9mIGl0LgpAQCAtNDksMTQgKzUyLDE0IEBACiAgICAgICAgICMgW29iamVjdCBjYXNlXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdtb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJywgZnJvbWxpc3Q9WydhdHRyJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdtb2R1bGUnKQogCiAgICAgZGVmIHRlc3Rfbm9uZXhpc3RlbnRfb2JqZWN0KHNlbGYpOgogICAgICAgICAjIFtiYWQgb2JqZWN0XQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdtb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZHVsZScsIGZyb21saXN0PVsnbm9uX2V4aXN0ZW50J10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ25vbl9leGlzdGVudCddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnbW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnbm9uX2V4aXN0ZW50JykpCiAKQEAgLTY0LDcgKzY3LDcgQEAKICAgICAgICAgIyBbbW9kdWxlXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQpAQCAtNzksMTMgKzgyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cubW9kJzogbW9kdWxlX2NvZGV9KSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGV4YzoKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2QnXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZCddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2lfZG9fbm90X2V4aXN0JywgZXhjLmV4Y2VwdGlvbi5uYW1lKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZCcpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZCcsIGZyb21saXN0PVsnJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kJywgZnJvbWxpc3Q9WycnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2QnKQogCiAgICAgZGVmIGJhc2ljX3N0YXJfdGVzdChzZWxmLCBmcm9tbGlzdD1bJyonXSk6CkBAIC05Myw3ICs5Niw3IEBACiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgbW9ja1sncGtnJ10uX19hbGxfXyA9IFsnbW9kdWxlJ10KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1mcm9tbGlzdCkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PWZyb21saXN0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKQEAgLTExMSwxNyArMTE0LDE2IEBACiAgICAgICAgIHdpdGggY29udGV4dCBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBtb2NrWydwa2cnXS5fX2FsbF9fID0gWydtb2R1bGUxJ10KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZTInLCAnKiddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUyJywgJyonXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlMScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZTInKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUxLl9fbmFtZV9fLCAncGtnLm1vZHVsZTEnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZTIuX19uYW1lX18sICdwa2cubW9kdWxlMicpCiAKK0Zyb3plbl9Gcm9tTGlzdCwgU291cmNlX0Zyb21MaXN0ID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEhhbmRsaW5nRnJvbWxpc3QsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUmV0dXJuVmFsdWUsIEhhbmRsaW5nRnJvbWxpc3QpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CmluZGV4IDRkODVmODAuLmRjNDU0MjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIENhbGxpbmdPcmRlcih1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBDYWxsaW5nT3JkZXI6CiAKICAgICAiIiJDYWxscyB0byB0aGUgaW1wb3J0ZXJzIG9uIHN5cy5tZXRhX3BhdGggaGFwcGVuIGluIG9yZGVyIHRoYXQgdGhleSBhcmUKICAgICBzcGVjaWZpZWQgaW4gdGhlIHNlcXVlbmNlLCBzdGFydGluZyB3aXRoIHRoZSBmaXJzdCBpbXBvcnRlcgpAQCAtMTgsMjMgKzE4LDE4IEBACiAgICAgZGVmIHRlc3RfZmlyc3RfY2FsbGVkKHNlbGYpOgogICAgICAgICAjIFtmaXJzdCBjYWxsZWRdCiAgICAgICAgIG1vZCA9ICd0b3BfbGV2ZWwnCi0gICAgICAgIGZpcnN0ID0gdXRpbC5tb2NrX21vZHVsZXMobW9kKQotICAgICAgICBzZWNvbmQgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2QpCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMobW9kKSBhcyBmaXJzdCwgdXRpbC5tb2NrX21vZHVsZXMobW9kKSBhcyBzZWNvbmQ6Ci0gICAgICAgICAgICBmaXJzdC5tb2R1bGVzW21vZF0gPSA0MgotICAgICAgICAgICAgc2Vjb25kLm1vZHVsZXNbbW9kXSA9IC0xMworICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKG1vZCkgYXMgZmlyc3QsIHV0aWwubW9ja19zcGVjKG1vZCkgYXMgc2Vjb25kOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ZpcnN0LCBzZWNvbmRdKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydF91dGlsLmltcG9ydF8obW9kKSwgNDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLl9faW1wb3J0X18obW9kKSwgZmlyc3QubW9kdWxlc1ttb2RdKQogCiAgICAgZGVmIHRlc3RfY29udGludWluZyhzZWxmKToKICAgICAgICAgIyBbY29udGludWluZ10KICAgICAgICAgbW9kX25hbWUgPSAnZm9yX3JlYWwnCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ25vbmV4aXN0ZW50JykgYXMgZmlyc3QsIFwKLSAgICAgICAgICAgICB1dGlsLm1vY2tfbW9kdWxlcyhtb2RfbmFtZSkgYXMgc2Vjb25kOgotICAgICAgICAgICAgZmlyc3QuZmluZF9tb2R1bGUgPSBsYW1iZGEgc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZTogTm9uZQotICAgICAgICAgICAgc2Vjb25kLm1vZHVsZXNbbW9kX25hbWVdID0gNDIKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygnbm9uZXhpc3RlbnQnKSBhcyBmaXJzdCwgXAorICAgICAgICAgICAgIHV0aWwubW9ja19zcGVjKG1vZF9uYW1lKSBhcyBzZWNvbmQ6CisgICAgICAgICAgICBmaXJzdC5maW5kX3NwZWMgPSBsYW1iZGEgc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgcGFyZW50PU5vbmU6IE5vbmUKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtmaXJzdCwgc2Vjb25kXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZF9uYW1lKSwgNDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLl9faW1wb3J0X18obW9kX25hbWUpLCBzZWNvbmQubW9kdWxlc1ttb2RfbmFtZV0pCiAKICAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKICAgICAgICAgIyBSYWlzZSBhbiBJbXBvcnRXYXJuaW5nIGlmIHN5cy5tZXRhX3BhdGggaXMgZW1wdHkuCkBAIC00Niw0MSArNDEsNDIgQEAKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W10pOgogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLl9ib290c3RyYXAuX2ZpbmRfbW9kdWxlKCdub3RoaW5nJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLl9ib290c3RyYXAuX2ZpbmRfc3BlYygnbm90aGluZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgSW1wb3J0V2FybmluZykpCiAKK0Zyb3plbl9DYWxsaW5nT3JkZXIsIFNvdXJjZV9DYWxsaW5nT3JkZXIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbGluZ09yZGVyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWNsYXNzIENhbGxTaWduYXR1cmUodW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBDYWxsU2lnbmF0dXJlOgogCiAgICAgIiIiSWYgdGhlcmUgaXMgbm8gX19wYXRoX18gZW50cnkgb24gdGhlIHBhcmVudCBtb2R1bGUsIHRoZW4gJ3BhdGgnIGlzIE5vbmUKICAgICBbbm8gcGF0aF0uIE90aGVyd2lzZSwgdGhlIHZhbHVlIGZvciBfX3BhdGhfXyBpcyBwYXNzZWQgaW4gZm9yIHRoZSAncGF0aCcKICAgICBhcmd1bWVudCBbcGF0aCBzZXRdLiIiIgogCi0gICAgZGVmIGxvZyhzZWxmLCBmeG4pOgorICAgIGRlZiBsb2dfZmluZGVyKHNlbGYsIGltcG9ydGVyKToKKyAgICAgICAgZnhuID0gZ2V0YXR0cihpbXBvcnRlciwgc2VsZi5maW5kZXJfbmFtZSkKICAgICAgICAgbG9nID0gW10KICAgICAgICAgZGVmIHdyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgICAgIGxvZy5hcHBlbmQoW2FyZ3MsIGt3YXJnc10pCiAgICAgICAgICAgICByZXR1cm4gZnhuKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgcmV0dXJuIGxvZywgd3JhcHBlcgogCi0KICAgICBkZWYgdGVzdF9ub19wYXRoKHNlbGYpOgogICAgICAgICAjIFtubyBwYXRoXQogICAgICAgICBtb2RfbmFtZSA9ICd0b3BfbGV2ZWwnCiAgICAgICAgIGFzc2VydCAnLicgbm90IGluIG1vZF9uYW1lCi0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMobW9kX25hbWUpIGFzIGltcG9ydGVyOgotICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZyhpbXBvcnRlci5maW5kX21vZHVsZSkKLSAgICAgICAgICAgIGltcG9ydGVyLmZpbmRfbW9kdWxlID0gTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKQorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKG1vZF9uYW1lKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2dfZmluZGVyKGltcG9ydGVyKQorICAgICAgICAgICAgc2V0YXR0cihpbXBvcnRlciwgc2VsZi5maW5kZXJfbmFtZSwgTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKSkKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obG9nKSA9PSAxCiAgICAgICAgICAgICAgICAgYXJncyA9IGxvZ1swXVswXQogICAgICAgICAgICAgICAgIGt3YXJncyA9IGxvZ1swXVsxXQogICAgICAgICAgICAgICAgICMgQXNzdW1pbmcgYWxsIGFyZ3VtZW50cyBhcmUgcG9zaXRpb25hbC4KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhcmdzKSwgMikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihrd2FyZ3MpLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnc1swXSwgbW9kX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYXJnc1sxXSkKIApAQCAtOTAsMTIgKzg2LDEyIEBACiAgICAgICAgIG1vZF9uYW1lID0gcGtnX25hbWUgKyAnLm1vZHVsZScKICAgICAgICAgcGF0aCA9IFs0Ml0KICAgICAgICAgYXNzZXJ0ICcuJyBpbiBtb2RfbmFtZQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19uYW1lKycuX19pbml0X18nLCBtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMocGtnX25hbWUrJy5fX2luaXRfXycsIG1vZF9uYW1lKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIGltcG9ydGVyLm1vZHVsZXNbcGtnX25hbWVdLl9fcGF0aF9fID0gcGF0aAotICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZyhpbXBvcnRlci5maW5kX21vZHVsZSkKLSAgICAgICAgICAgIGltcG9ydGVyLmZpbmRfbW9kdWxlID0gTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKQorICAgICAgICAgICAgbG9nLCB3cmFwcGVkX2NhbGwgPSBzZWxmLmxvZ19maW5kZXIoaW1wb3J0ZXIpCisgICAgICAgICAgICBzZXRhdHRyKGltcG9ydGVyLCBzZWxmLmZpbmRlcl9uYW1lLCBNZXRob2RUeXBlKHdyYXBwZWRfY2FsbCwgaW1wb3J0ZXIpKQogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihsb2cpID09IDIKICAgICAgICAgICAgICAgICBhcmdzID0gbG9nWzFdWzBdCiAgICAgICAgICAgICAgICAga3dhcmdzID0gbG9nWzFdWzFdCkBAIC0xMDQsMTIgKzEwMCwyMCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJnc1swXSwgbW9kX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhhcmdzWzFdLCBwYXRoKQogCitjbGFzcyBDYWxsU2lnbmF0dXJlUEVQMzAyKENhbGxTaWduYXR1cmUpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzCisgICAgZmluZGVyX25hbWUgPSAnZmluZF9tb2R1bGUnCiAKK0Zyb3plbl9DYWxsU2lnbmF0dXJlUEVQMzAyLCBTb3VyY2VfQ2FsbFNpZ25hdHVyZVBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBDYWxsU2lnbmF0dXJlUEVQMzAyLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KENhbGxpbmdPcmRlciwgQ2FsbFNpZ25hdHVyZSkKK2NsYXNzIENhbGxTaWduYXR1cmVQRVA0NTEoQ2FsbFNpZ25hdHVyZSk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX3NwZWMKKyAgICBmaW5kZXJfbmFtZSA9ICdmaW5kX3NwZWMnCisKK0Zyb3plbl9DYWxsU2lnbmF0dXJlUEVQNDUxLCBTb3VyY2VfQ2FsbFNpZ25hdHVyZVBFUDQ1MSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBDYWxsU2lnbmF0dXJlUEVQNDUxLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CmluZGV4IGJmYTE4ZGMuLjU1YTVkMTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKQEAgLTYsMzcgKzYsMzcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiAKLWNsYXNzIFBhcmVudE1vZHVsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFBhcmVudE1vZHVsZVRlc3RzOgogCiAgICAgIiIiSW1wb3J0aW5nIGEgc3VibW9kdWxlIHNob3VsZCBpbXBvcnQgdGhlIHBhcmVudCBtb2R1bGVzLiIiIgogCiAgICAgZGVmIHRlc3RfaW1wb3J0X3BhcmVudChzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGtnJywgc3lzLm1vZHVsZXMpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyZW50KHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cubW9kdWxlJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygncGtnLm1vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3JhaXNpbmdfcGFyZW50X2FmdGVyX2ltcG9ydGluZ19jaGlsZChzZWxmKToKICAgICAgICAgZGVmIF9faW5pdF9fKCk6CiAgICAgICAgICAgICBpbXBvcnQgcGtnLm1vZHVsZQogICAgICAgICAgICAgMS8wCi0gICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnLAorICAgICAgICBtb2NrID0gdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnJzogX19pbml0X199KQogICAgICAgICB3aXRoIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdwa2cubW9kdWxlJywgc3lzLm1vZHVsZXMpCiAKQEAgLTQ0LDE3ICs0NCwxNyBAQAogICAgICAgICBkZWYgX19pbml0X18oKToKICAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgbW9kdWxlCiAgICAgICAgICAgICAxLzAKLSAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCisgICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cnOiBfX2luaXRfX30pCiAgICAgICAgIHdpdGggbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6CiAgICAgICAgICAgICAgICAgICAgICMgVGhpcyByYWlzZXMgSW1wb3J0RXJyb3Igb24gdGhlICJmcm9tIC4gaW1wb3J0IG1vZHVsZSIKICAgICAgICAgICAgICAgICAgICAgIyBsaW5lLCBub3Qgc3VyZSB3aHkuCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgIyBYWFggRmFsc2UKICAgICAgICAgICAgICAgICAjc2VsZi5hc3NlcnRJbigncGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQpAQCAtNjMsNyArNjMsNyBAQAogICAgICAgICBkZWYgX19pbml0X18oKToKICAgICAgICAgICAgIGZyb20gLi5zdWJwa2cgaW1wb3J0IG1vZHVsZQogICAgICAgICAgICAgMS8wCi0gICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5zdWJwa2cuX19pbml0X18nLAorICAgICAgICBtb2NrID0gdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cuc3VicGtnLl9faW5pdF9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwa2cuc3VicGtnLm1vZHVsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZy5zdWJwa2cnOiBfX2luaXRfX30pCiAgICAgICAgIHdpdGggbW9jazoKQEAgLTcxLDEwICs3MSwxMCBAQAogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgogICAgICAgICAgICAgICAgICAgICAjIFRoaXMgcmFpc2VzIEltcG9ydEVycm9yIG9uIHRoZSAiZnJvbSAuLnN1YnBrZyBpbXBvcnQgbW9kdWxlIgogICAgICAgICAgICAgICAgICAgICAjIGxpbmUsIG5vdCBzdXJlIHdoeS4KLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLnN1YnBrZycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLnN1YnBrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnLnN1YnBrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuc3VicGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLnN1YnBrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZy5zdWJwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICAjIFhYWCBGYWxzZQogICAgICAgICAgICAgICAgICNzZWxmLmFzc2VydEluKCdwa2cuc3VicGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAjIFRyeSB0byBpbXBvcnQgYSBzdWJtb2R1bGUgZnJvbSBhIG5vbi1wYWNrYWdlIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvci4KICAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHN5cywgJ19fcGF0aF9fJykKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzeXMubm9fc3VibW9kdWxlc19oZXJlJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdzeXMubm9fc3VibW9kdWxlc19oZXJlJykKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9ub3RfcGFja2FnZV9idXRfc2lkZV9lZmZlY3RzKHNlbGYpOgpAQCAtOTMsMjAgKzkzLDE4IEBACiAgICAgICAgIHN1Ym5hbWUgPSBuYW1lICsgJy5iJwogICAgICAgICBkZWYgbW9kdWxlX2luamVjdGlvbigpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbc3VibmFtZV0gPSAndG90YWwgYnVuaycKLSAgICAgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX21vZHVsZXMoJ21vZCcsCisgICAgICAgIG1vY2tfc3BlYyA9IHV0aWwubW9ja19zcGVjKCdtb2QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J21vZCc6IG1vZHVsZV9pbmplY3Rpb259KQotICAgICAgICB3aXRoIG1vY2tfbW9kdWxlcyBhcyBtb2NrOgorICAgICAgICB3aXRoIG1vY2tfc3BlYyBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oc3VibmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKHN1Ym5hbWUpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxvYWQoc3VibmFtZSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXJlbnRNb2R1bGVUZXN0cykKK0Zyb3plbl9QYXJlbnRUZXN0cywgU291cmNlX1BhcmVudFRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhcmVudE1vZHVsZVRlc3RzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQppbmRleCBkODJiN2Y2Li43MTNlNzU0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGF0aC5weQpAQCAtMSw4ICsxLDkgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1mcm9tIGltcG9ydGxpYiBpbXBvcnQgaW1wb3J0X21vZHVsZQogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCisKK2ltcG9ydGxpYiA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogZnJvbSB0eXBlcyBpbXBvcnQgTW9kdWxlVHlwZQpAQCAtMTEsMjUgKzEyLDI1IEBACiBpbXBvcnQgemlwaW1wb3J0CiAKIAotY2xhc3MgRmluZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRmluZGVyVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgUGF0aEZpbmRlci4iIiIKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6Ci0gICAgICAgICMgVGVzdCBOb25lIHJldHVybmVkIHVwb24gbm90IGZpbmRpbmcgYSBzdWl0YWJsZSBmaW5kZXIuCisgICAgICAgICMgVGVzdCBOb25lIHJldHVybmVkIHVwb24gbm90IGZpbmRpbmcgYSBzdWl0YWJsZSBsb2FkZXIuCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpKQogCiAgICAgZGVmIHRlc3Rfc3lzX3BhdGgoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHN5cy5wYXRoIGlzIHVzZWQgd2hlbiAncGF0aCcgaXMgTm9uZS4KICAgICAgICAgIyBJbXBsaWNpdGx5IHRlc3RzIHRoYXQgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaXMgdXNlZC4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHBhdGggPSAnPHRlc3QgcGF0aD4nCi0gICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1bcGF0aF0pOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF9wYXRoKHNlbGYpOgpAQCAtMzcsMjkgKzM4LDI5IEBACiAgICAgICAgICMgSW1wbGljaXRseSB0ZXN0cyB0aGF0IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlzIHVzZWQuCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9KToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2xpc3Qoc2VsZik6CiAgICAgICAgICMgQW4gZW1wdHkgbGlzdCBzaG91bGQgbm90IGNvdW50IGFzIGFza2luZyBmb3Igc3lzLnBhdGguCiAgICAgICAgIG1vZHVsZSA9ICdtb2R1bGUnCiAgICAgICAgIHBhdGggPSAnPHRlc3QgcGF0aD4nCi0gICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2ltcG9ydGVyX2NhY2hlPXtwYXRoOiBpbXBvcnRlcn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1bcGF0aF0pOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUoJ21vZHVsZScsIFtdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUoJ21vZHVsZScsIFtdKSkKIAogICAgIGRlZiB0ZXN0X3BhdGhfaG9va3Moc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHN5cy5wYXRoX2hvb2tzIGlzIHVzZWQuCiAgICAgICAgICMgVGVzdCB0aGF0IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlzIHNldC4KICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCiAgICAgICAgIHBhdGggPSAnPHRlc3QgcGF0aD4nCi0gICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQorICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19zcGVjKG1vZHVsZSkKICAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKHBhdGgsIGltcG9ydGVyPWltcG9ydGVyKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaG9va3M9W2hvb2tdKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwgW3BhdGhdKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aCwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdLCBpbXBvcnRlcikKQEAgLTcyLDcgKzczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtwYXRoX2VudHJ5XSk6CiAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgogICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignYWx3YXlzJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnb3MnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdvcycpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhfZW50cnldKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHdbLTFdLmNhdGVnb3J5LCBJbXBvcnRXYXJuaW5nKSkKQEAgLTgxLDEyICs4MiwxMiBAQAogICAgICAgICAjIFRoZSBlbXB0eSBzdHJpbmcgc2hvdWxkIGNyZWF0ZSBhIGZpbmRlciB1c2luZyB0aGUgY3dkLgogICAgICAgICBwYXRoID0gJycKICAgICAgICAgbW9kdWxlID0gJzx0ZXN0IG1vZHVsZT4nCi0gICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX21vZHVsZXMobW9kdWxlKQotICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2sob3MuY3VyZGlyLCBpbXBvcnRlcj1pbXBvcnRlcikKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCisgICAgICAgIGhvb2sgPSBpbXBvcnRfdXRpbC5tb2NrX3BhdGhfaG9vayhvcy5nZXRjd2QoKSwgaW1wb3J0ZXI9aW1wb3J0ZXIpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aD1bcGF0aF0sIHBhdGhfaG9va3M9W2hvb2tdKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5jdXJkaXIsIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5nZXRjd2QoKSwgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCiAKICAgICBkZWYgdGVzdF9Ob25lX29uX3N5c19wYXRoKHNlbGYpOgogICAgICAgICAjIFB1dHRpbmcgTm9uZSBpbiBzeXMucGF0aFswXSBjYXVzZWQgYW4gaW1wb3J0IHJlZ3Jlc3Npb24gZnJvbSBQeXRob24KQEAgLTk2LDggKzk3LDggQEAKICAgICAgICAgbmV3X3BhdGhfaW1wb3J0ZXJfY2FjaGUgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jb3B5KCkKICAgICAgICAgbmV3X3BhdGhfaW1wb3J0ZXJfY2FjaGUucG9wKE5vbmUsIE5vbmUpCiAgICAgICAgIG5ld19wYXRoX2hvb2tzID0gW3ppcGltcG9ydC56aXBpbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2Jvb3RzdHJhcC5GaWxlRmluZGVyLnBhdGhfaG9vaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpfYm9vdHN0cmFwLl9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2VsZi5pbXBvcnRsaWIuX2Jvb3RzdHJhcC5fZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKSldCiAgICAgICAgIG1pc3NpbmcgPSBvYmplY3QoKQogICAgICAgICBlbWFpbCA9IHN5cy5tb2R1bGVzLnBvcCgnZW1haWwnLCBtaXNzaW5nKQogICAgICAgICB0cnk6CkBAIC0xMDUsMTYgKzEwNiwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPW5ld19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2ltcG9ydGVyX2NhY2hlPW5ld19wYXRoX2ltcG9ydGVyX2NhY2hlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzPW5ld19wYXRoX2hvb2tzKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfbW9kdWxlKCdlbWFpbCcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnZW1haWwnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R1bGUsIE1vZHVsZVR5cGUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBlbWFpbCBpcyBub3QgbWlzc2luZzoKICAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZW1haWwnXSA9IGVtYWlsCiAKK0Zyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weQppbmRleCA0NTY5YzI2Li5iMjE2ZTljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weQpAQCAtNCw3ICs0LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCi1jbGFzcyBSZWxhdGl2ZUltcG9ydHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUmVsYXRpdmVJbXBvcnRzOgogCiAgICAgIiIiUEVQIDMyOCBpbnRyb2R1Y2VkIHJlbGF0aXZlIGltcG9ydHMuIFRoaXMgYWxsb3dzIGZvciBpbXBvcnRzIHRvIG9jY3VyCiAgICAgZnJvbSB3aXRoaW4gYSBwYWNrYWdlIHdpdGhvdXQgaGF2aW5nIHRvIHNwZWNpZnkgdGhlIGFjdHVhbCBwYWNrYWdlIG5hbWUuCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgdW5jYWNoZV9uYW1lcy5hcHBlbmQobmFtZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdW5jYWNoZV9uYW1lcy5hcHBlbmQobmFtZVs6LWxlbignLl9faW5pdF9fJyldKQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCpjcmVhdGUpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCpjcmVhdGUpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6CiAgICAgICAgICAgICAgICAgZm9yIGdsb2JhbF8gaW4gZ2xvYmFsc186CiAgICAgICAgICAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCp1bmNhY2hlX25hbWVzKToKQEAgLTc2LDggKzc2LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kMicKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2QxJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kMiddLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZDInXSwgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZDInKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZDIuYXR0ciwgJ3BrZy5tb2QyJykKQEAgLTg4LDggKzg4LDggQEAKICAgICAgICAgY3JlYXRlID0gJ3BrZy5fX2luaXRfXycsICdwa2cubW9kMicKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2QxJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZDInLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kMicsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kMicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCAncGtnLm1vZDInKQpAQCAtMTAxLDggKzEwMSw4IEBACiAgICAgICAgIGdsb2JhbHNfID0gKHsnX19wYWNrYWdlX18nOiAncGtnJ30sCiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2R1bGUnXSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2R1bGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQpAQCAtMTE0LDggKzExNCw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2R1bGUnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgZ2xvYmFsc18gPSAgKHsnX19wYWNrYWdlX18nOiAncGtnLnN1YnBrZzEnfSwKICAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnLnN1YnBrZzEnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnc3VicGtnMiddLAorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3N1YnBrZzInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ3N1YnBrZzInKSkKQEAgLTE0Miw4ICsxNDIsOCBAQAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZy5wa2cxLnBrZzIucGtnMy5wa2c0LnBrZzUnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKGdsb2JhbHNfWzBdWydfX3BhY2thZ2VfXyddKQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTYpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oZ2xvYmFsc19bMF1bJ19fcGFja2FnZV9fJ10pCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD02KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCkBAIC0xNTMsOSArMTUzLDkgQEAKICAgICAgICAgZ2xvYmFsc18gPSAoeydfX3BhY2thZ2VfXyc6ICdwa2cnfSwKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cnLCAnX19wYXRoX18nOiBbJ2JsYWgnXX0pCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTY0LDE2ICsxNjQsMTYgQEAKICAgICAgICAgY3JlYXRlID0gWyd0b3BfbGV2ZWwnLCAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnXQogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAncGtnJ30sIHsnX19uYW1lX18nOiAncGtnLm1vZHVsZSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X2VtcHR5X25hbWVfd19sZXZlbF8wKHNlbGYpOgogICAgICAgICAjIFtlbXB0eSBuYW1lXQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJykKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJykKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX2RpZmZlcmVudF9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZSB0aGFuIHRoZSBjYWxsZXIuCkBAIC0xODYsOCArMTg2LDggQEAKICAgICAgICAgICAgICAgICAgICAgJ19fcnVucHlfcGtnX18udW5jbGUuY291c2luLm5lcGhldyddCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nKQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygndW5jbGUuY291c2luJywgZ2xvYmFsc18sIHt9LAorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdfX3J1bnB5X3BrZ19fLl9fcnVucHlfcGtnX18nKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCd1bmNsZS5jb3VzaW4nLCBnbG9iYWxzXywge30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ25lcGhldyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdfX3J1bnB5X3BrZ19fLnVuY2xlLmNvdXNpbicpCkBAIC0xOTgsMjAgKzE5OCwxOSBAQAogICAgICAgICBjcmVhdGUgPSBbJ2NyYXNoLl9faW5pdF9fJywgJ2NyYXNoLm1vZCddCiAgICAgICAgIGdsb2JhbHNfID0gW3snX19wYWNrYWdlX18nOiAnY3Jhc2gnLCAnX19uYW1lX18nOiAnY3Jhc2gnfV0KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnY3Jhc2gnKQotICAgICAgICAgICAgbW9kID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kJywgZ2xvYmFsXywge30sIFtdLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdjcmFzaCcpCisgICAgICAgICAgICBtb2QgPSBzZWxmLl9faW1wb3J0X18oJ21vZCcsIGdsb2JhbF8sIHt9LCBbXSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLl9fbmFtZV9fLCAnY3Jhc2gubW9kJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF9ub19nbG9iYWxzKHNlbGYpOgogICAgICAgICAjIE5vIGdsb2JhbHMgZm9yIGEgcmVsYXRpdmUgaW1wb3J0IGlzIGFuIGVycm9yLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3N5cycsIGxldmVsPTEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cycsIGxldmVsPTEpCiAKK0Zyb3plbl9SZWxhdGl2ZUltcG9ydHMsIFNvdXJjZV9SZWxhdGl2ZUltcG9ydHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVsYXRpdmVJbXBvcnRzLCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFJlbGF0aXZlSW1wb3J0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CmluZGV4IDg2YWMwNjUuLmRjYjQ5MGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKQEAgLTEsMjIgKzEsMTQgQEAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKKworZnJvemVuX2ltcG9ydGxpYiwgc291cmNlX2ltcG9ydGxpYiA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKKworaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgdW5pdHRlc3QKIAogCi11c2luZ19fX2ltcG9ydF9fID0gRmFsc2UKLQotCi1kZWYgaW1wb3J0XygqYXJncywgKiprd2FyZ3MpOgotICAgICIiIkRlbGVnYXRlIHRvIGFsbG93IGZvciBpbmplY3RpbmcgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZiBpbXBvcnQuIiIiCi0gICAgaWYgdXNpbmdfX19pbXBvcnRfXzoKLSAgICAgICAgcmV0dXJuIF9faW1wb3J0X18oKmFyZ3MsICoqa3dhcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBpbXBvcnRsaWIuX19pbXBvcnRfXygqYXJncywgKiprd2FyZ3MpCi0KLQotZGVmIGltcG9ydGxpYl9vbmx5KGZ4bik6Ci0gICAgIiIiRGVjb3JhdG9yIHRvIHNraXAgYSB0ZXN0IGlmIHVzaW5nIF9fYnVpbHRpbnNfXy5fX2ltcG9ydF9fLiIiIgotICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYodXNpbmdfX19pbXBvcnRfXywgImltcG9ydGxpYi1zcGVjaWZpYyB0ZXN0IikoZnhuKQorX19pbXBvcnRfXyA9IHN0YXRpY21ldGhvZChidWlsdGlucy5fX2ltcG9ydF9fKSwgc3RhdGljbWV0aG9kKHNvdXJjZV9pbXBvcnRsaWIuX19pbXBvcnRfXykKIAogCiBkZWYgbW9ja19wYXRoX2hvb2soKmVudHJpZXMsIGltcG9ydGVyKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkxMmI2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MDYgKzAsMCBAQAotaW1wb3J0IGltcG9ydGxpYgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotCi1mcm9tIC4uIGltcG9ydCBhYmMgYXMgdGVzdGluZ19hYmMKLWZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW5zcGVjdAotaW1wb3J0IGlvCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHlwZXMKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHdhcm5pbmdzCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlck1vY2soYWJjLlNvdXJjZUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYucGF0aCA9PSBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gJzxtb2R1bGU+JwotCi0KLWNsYXNzIFNvdXJjZUxvYWRlck1vY2soU291cmNlT25seUxvYWRlck1vY2spOgotCi0gICAgc291cmNlX210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPWltcC5nZXRfbWFnaWMoKSk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKLSAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKLSAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQotICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgc2VsZi53cml0dGVuID0ge30KLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQotICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgcGF0aCA9PSBzZWxmLnBhdGgKLSAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQotCi0gICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgotICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQotICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKLQotCi1jbGFzcyBQeUxvYWRlck1vY2soYWJjLlB5TG9hZGVyKToKLQotICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KLSAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fcGFja2FnZV9fLCAiCi0gICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiVGFrZSBhIGRpY3Qgb2YgJ21vZHVsZV9uYW1lOiBwYXRoJyBwYWlyaW5ncy4KLQotICAgICAgICBQYXRocyBzaG91bGQgaGF2ZSBubyBmaWxlIGV4dGVuc2lvbiwgYWxsb3dpbmcgcGFja2FnZXMgdG8gYmUgZGVub3RlZCBieQotICAgICAgICBlbmRpbmcgaW4gJ19faW5pdF9fJy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5tb2R1bGVfcGF0aHMgPSBkYXRhCi0gICAgICAgIHNlbGYucGF0aF90b19tb2R1bGUgPSB7dmFsOmtleSBmb3Iga2V5LHZhbCBpbiBkYXRhLml0ZW1zKCl9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYucGF0aF90b19tb2R1bGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShuYW1lKSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJTaWxlbmNlIGRlcHJlY2F0aW9uIHdhcm5pbmcuIiIiCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBwYXRoID0gc3VwZXIoKS5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgICAgIGFzc2VydCBsZW4odykgPT0gMQotICAgICAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdE1vY2soUHlMb2FkZXJNb2NrKToKLQotICAgICIiIk1vY2sgdGhhdCBtYXRjaGVzIHdoYXQgaXMgc3VnZ2VzdGVkIHRvIGhhdmUgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlCi0gICAgZnJvbSBQeXRob24gMy4xIG9ud2FyZHMuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW2Z1bGxuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFB5UHljTG9hZGVyTW9jayhhYmMuUHlQeWNMb2FkZXIsIFB5TG9hZGVyTW9jayk6Ci0KLSAgICBkZWZhdWx0X210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgYmM9e30pOgotICAgICAgICAiIiJJbml0aWFsaXplIG1vY2suCi0KLSAgICAgICAgJ2JjJyBpcyBhIGRpY3Qga2V5ZWQgb24gYSBtb2R1bGUncyBuYW1lLiBUaGUgdmFsdWUgaXMgZGljdCB3aXRoCi0gICAgICAgIHBvc3NpYmxlIGtleXMgb2YgJ3BhdGgnLCAnbXRpbWUnLCAnbWFnaWMnLCBhbmQgJ2JjJy4gRXhjZXB0IGZvciAncGF0aCcsCi0gICAgICAgIGVhY2ggb2YgdGhvc2Uga2V5cyBjb250cm9sIGlmIGFueSBwYXJ0IG9mIGNyZWF0ZWQgYnl0ZWNvZGUgaXMgdG8KLSAgICAgICAgZGV2aWF0ZSBmcm9tIGRlZmF1bHQgdmFsdWVzLgotCi0gICAgICAgICIiIgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNvdXJjZSkKLSAgICAgICAgc2VsZi5tb2R1bGVfYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLnBhdGhfdG9fYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGggPSB7fQotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBiYy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlW2RhdGFbJ3BhdGgnXV0gPSBuYW1lCi0gICAgICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0gPSBkYXRhWydwYXRoJ10KLSAgICAgICAgICAgIG1hZ2ljID0gZGF0YS5nZXQoJ21hZ2ljJywgaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3dfbG9uZyhkYXRhLmdldCgnbXRpbWUnLCBzZWxmLmRlZmF1bHRfbXRpbWUpKQotICAgICAgICAgICAgc291cmNlX3NpemUgPSBpbXBvcnRsaWIuX3dfbG9uZyhsZW4oc2VsZi5zb3VyY2UpICYgMHhGRkZGRkZGRikKLSAgICAgICAgICAgIGlmICdiYycgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBiYyA9IGRhdGFbJ2JjJ10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYmMgPSBzZWxmLmNvbXBpbGVfYmMobmFtZSkKLSAgICAgICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gbWFnaWMgKyBtdGltZSArIHNvdXJjZV9zaXplICsgYmMKLQotICAgIGRlZiBjb21waWxlX2JjKHNlbGYsIG5hbWUpOgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYubW9kdWxlX3BhdGhzLmdldChuYW1lLCAnPHRlc3Q+Jykgb3IgJzx0ZXN0PicKLSAgICAgICAgY29kZSA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycpCi0gICAgICAgIHJldHVybiBtYXJzaGFsLmR1bXBzKGNvZGUpCi0KLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9tdGltZQotICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfcGF0aHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gYnl0ZWNvZGUKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoIGluIHNlbGYucGF0aF90b19ieXRlY29kZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhdGhfdG9fYnl0ZWNvZGVbcGF0aF0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UobmFtZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAnX19pbml0X18nIGluIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIG5hbWUpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzdXBlcigpLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAotCi1jbGFzcyBQeUxvYWRlclRlc3RzKHRlc3RpbmdfYWJjLkxvYWRlclRlc3RzKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJNb2NrCi0KLSAgICBkZWYgZXFfYXR0cnMoc2VsZiwgb2IsICoqa3dhcmdzKToKLSAgICAgICAgZm9yIGF0dHIsIHZhbCBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihvYiwgYXR0cikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgInt9IGF0dHJpYnV0ZToge30gIT0ge30iLmZvcm1hdChhdHRyLCBmb3VuZCwgdmFsKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8bW9kdWxlPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignJywgJ3BhdGgnLCAndG8nLCAnbW9kdWxlJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189JycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8cGtnPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsIG5hbWUsICdfX2luaXRfXycpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsCi0gICAgICAgICAgICAgICAgX19wYXRoX189W29zLnBhdGguZGlybmFtZShwYXRoKV0sIF9fcGFja2FnZV9fPW5hbWUsCi0gICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAncGtnLm1vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdwa2cnLCAnbW9kJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189J3BrZycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKQotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBsb2FkZWRfbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWRfbW9kdWxlLCBtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCi0gICAgICAgIHJldHVybiBtb2NrLCBuYW1lCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBuYW1lID0gIm1vZCIKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9kdWxlLmJsYWggPSBOb25lCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYmxhaCcpKQotICAgICAgICByZXR1cm4gbW9jawotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICByZXR1cm4gbW9jawotCi0KLWNsYXNzIFB5TG9hZGVyQ29tcGF0VGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgdGhlIHN1Z2dlc3RlZCBjb2RlIHRvIG1ha2UgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlIGZyb20KLSAgICBQeXRob24gMy4xIGZvcndhcmQgd29ya3MuIiIiCi0KLSAgICBtb2NrZXIgPSBQeUxvYWRlckNvbXBhdE1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckludGVyZmFjZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gc291cmNlX3BhdGgoKQotICAgIGRvZXNuJ3QgcmV0dXJuIGEgcGF0aCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgZGVmIHRlc3Rfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgTm8gc291cmNlIHBhdGggc2hvdWxkIGxlYWQgdG8gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHt9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfaXNfTm9uZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJldHVybiB3aGF0IHNvdXJjZV9wYXRoKCkgcmV0dXJucy4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnc291cmNlJykKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9maWxlbmFtZShuYW1lKSwgcGF0aCkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV9ub19zb3VyY2VfcGF0aChzZWxmKToKLSAgICAgICAgIyBnZXRfZmlsZW5hbWUoKSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgc291cmNlX3BhdGggcmV0dXJucyBOb25lLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFB5UHljTG9hZGVyVGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5UHljTG9hZGVyTW9jawotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB2ZXJpZnlfYnl0ZWNvZGUoc2VsZiwgbW9jaywgbmFtZSk6Ci0gICAgICAgIGFzc2VydCBuYW1lIGluIG1vY2subW9kdWxlX3BhdGhzCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCAxKQotICAgICAgICBzb3VyY2Vfc2l6ZSA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzg6MTJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vY2suc291cmNlKSAmIDB4RkZGRkZGRkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLl9yX2xvbmcoc291cmNlX3NpemUpKQotICAgICAgICBiYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzEyOl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYywgbW9jay5jb21waWxlX2JjKG5hbWUpKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X3BhY2thZ2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG1vY2ssIG5hbWUgPSBzdXBlcigpLnRlc3RfbGFja2luZ19wYXJlbnQoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZV9yZXVzZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSgpCi0KLSAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3RfdW5sb2FkYWJsZSgpCi0KLQotY2xhc3MgUHlQeWNMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGZvciB0aGUgaW50ZXJmYWNlIG9mIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lX2NoZWNrKHNlbGYsIHNyY19wYXRoLCBiY19wYXRoLCBleHBlY3QpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogc3JjX3BhdGh9LCB7bmFtZTogeydwYXRoJzogYmNfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIGFzc2VydCBtb2NrLnNvdXJjZV9wYXRoKG5hbWUpID09IHNyY19wYXRoCi0gICAgICAgICAgICBhc3NlcnQgbW9jay5ieXRlY29kZV9wYXRoKG5hbWUpID09IGJjX3BhdGgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIGV4cGVjdCkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdoZW4gc291cmNlIGFuZCBieXRlY29kZSBwYXRocyBwcmVzZW50LCByZXR1cm4gdGhlIHNvdXJjZSBwYXRoLgotICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjaygnc291cmNlX3BhdGgnLCAnYmNfcGF0aCcsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9ub19iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIHNvdXJjZSBidXQgbm8gYmMsIHJldHVybiBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgTm9uZSwgJ3NvdXJjZV9wYXRoJykKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfbm9fc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdpdGggbm90IHNvdXJjZSBidXQgYmMsIHJldHVybiB0aGUgYmMgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soTm9uZSwgJ2JjX3BhdGgnLCAnYmNfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9vcl9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vIHNvdXJjZSBvciBiYywgcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IE5vbmV9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpCi0KLQotY2xhc3MgU2tpcFdyaXRpbmdCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgdGhhdCBieXRlY29kZSBpcyBwcm9wZXJseSBoYW5kbGVkIGJhc2VkIG9uCi0gICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBkb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzTm90KG5hbWUgaW4gbW9jay5tb2R1bGVfYnl0ZWNvZGUsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KFRydWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KEZhbHNlKQotCi0KLWNsYXNzIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcmVnZW5lcmF0ZWQgYXMgZXhwZWN0ZWQuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3RfZGlmZmVyZW50X21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgZGlmZmVyZW50IG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBuZXcgYnl0ZWNvZGUuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYWRfbWFnaWMgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGFzc2VydCBiYWRfbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QuYnl0ZWNvZGUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFnaWMnOiBiYWRfbWFnaWN9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9vbGRfbXRpbWUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgd2l0aCBhbiBvbGRlciBtdGltZSBzaG91bGQgYmUgcmVnZW5lcmF0ZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBvbGRfbXRpbWUgPSBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSAtIDEKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSwKLSAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogJ3BhdGgvdG8vbW9kLmJ5dGVjb2RlJywgJ210aW1lJzogb2xkX210aW1lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtdGltZSA9IGltcG9ydGxpYi5fcl9sb25nKG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzQ6OF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIFB5UHljTG9hZGVyTW9jay5kZWZhdWx0X210aW1lKQotCi0KLWNsYXNzIEJhZEJ5dGVjb2RlRmFpbHVyZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgaW1wb3J0IGZhaWx1cmVzIHdoZW4gdGhlcmUgaXMgbm8gc291cmNlIGFuZCBwYXJ0cyBvZiB0aGUgYnl0ZWNvZGUKLSAgICBpcyBiYWQuIiIiCi0KLSAgICBkZWYgdGVzdF9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgQSBiYWQgbWFnaWMgbnVtYmVyIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiYyA9IHtuYW1lOgotICAgICAgICAgICAgICAgIHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwKLSAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgTWlzc2luZyBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhbiBFT0ZFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJjID0ge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwgJ2JjJzogYicnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1hbGZvcm1lZCBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhIFZhbHVlRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInMTIzNCd9fQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1kZWYgcmFpc2VfSW1wb3J0RXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKLSAgICByYWlzZSBJbXBvcnRFcnJvcgotCi1jbGFzcyBNaXNzaW5nUGF0aHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgc291cmNlIG9yIGJ5dGVjb2RlIHBhdGggZG9lcyBub3QgZXhpc3QgKGVpdGhlcgotICAgIGZyb20gKl9wYXRoIHJldHVybmluZyBOb25lIG9yIHJhaXNpbmcgSW1wb3J0RXJyb3IpLiIiIgotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfTm9uZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBzaG91bGQgYmUgdXNlZCB3aGVuIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZSwgYWxvbmcgd2l0aAotICAgICAgICAjIF9fZmlsZV9fIGJlaW5nIHNldCB0byB0aGUgYnl0ZWNvZGUgcGF0aC4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSAncGF0aC90by9tb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCB7bmFtZTogeydwYXRoJzogYnl0ZWNvZGVfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIGJ5dGVjb2RlX3BhdGgpCi0KLSAgICAjIFRlc3RpbmcgZm9yIGJ5dGVjb2RlX3BhdGggcmV0dXJuaW5nIE5vbmUgaGFuZGxlZCBieSBhbGwgdGVzdHMgd2hlcmUgbm8KLSAgICAjIGJ5dGVjb2RlIGluaXRpYWxseSBleGlzdHMuCi0KLSAgICBkZWYgdGVzdF9hbGxfcGF0aHNfTm9uZShzZWxmKToKLSAgICAgICAgIyBJZiBhbGwgKl9wYXRoIG1ldGhvZHMgcmV0dXJuIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIHNvdXJjZV9wYXRoIHNob3VsZCB0cmlnZ2VyIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7fSwge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZCcpfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV9wYXRoX0ltcG9ydEVycm9yKHNlbGYpOgotICAgICAgICAjIEFuIEltcG9ydEVycm9yIGZyb20gYnl0ZWNvZGVfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIGJhZF9tZXRoID0gdHlwZXMuTWV0aG9kVHlwZShyYWlzZV9JbXBvcnRFcnJvciwgbW9jaykKLSAgICAgICAgbW9jay5ieXRlY29kZV9wYXRoID0gYmFkX21ldGgKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCi0gICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQotICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCi0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKLSAgICAgICAgc2VsZi5jYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKLQotICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKLSAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAotICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCi0gICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCi0gICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLQotCi1jbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgotCi0gICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KLQotICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKLSAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jawotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgotICAgICAgICAjIElmIGFuIElPRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKLSAgICAgICAgZGVmIHJhaXNlX0lPRXJyb3IocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfSU9FcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCi0KLSAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgotICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKLQotICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKLSAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAotICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCi0gICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzeXMubW9kdWxlcykKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Vfc2V0dGluZ3Moc2VsZik6Ci0gICAgICAgICMgX19wYWNrYWdlX18gbmVlZHMgdG8gYmUgc2V0LCB3aGlsZSBfX3BhdGhfXyBpcyBzZXQgb24gaWYgdGhlIG1vZHVsZQotICAgICAgICAjIGlzIGEgcGFja2FnZS4KLSAgICAgICAgIyBUZXN0aW5nIHRoZSB2YWx1ZXMgZm9yIGEgcGFja2FnZSBhcmUgY292ZXJlZCBieSB0ZXN0X2xvYWRfbW9kdWxlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgotICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCi0gICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCi0gICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKLSAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAic3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgdHJ1ZSIpCi1jbGFzcyBTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIncyB1c2Ugb2YgYnl0ZWNvZGUuCi0KLSAgICBTb3VyY2Utb25seSB0ZXN0aW5nIGhhbmRsZWQgYnkgU291cmNlT25seUxvYWRlclRlc3RzLgotCi0gICAgIiIiCi0KLSAgICBsb2FkZXJfbW9jayA9IFNvdXJjZUxvYWRlck1vY2sKLQotICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6Ci0gICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgotICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKLSAgICAgICAgIyBTYW5pdHkgY2hlY2sKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgotICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKLSAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCi0gICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCi0gICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCi0gICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKLSAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCi0KLSAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgSU9FcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KLSAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgotICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgICAgICByYWlzZSBleGMKLSAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCi0KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJwotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLSAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaygibW9kLmZpbGUiKQotICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IExhdGluLTFcbng9J8O8JyIKLSAgICAgICAgYXNzZXJ0IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKSAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICAjIFBFUCAzMDIgc2F5cyB1bml2ZXJzYWwgbmV3bGluZXMgc2hvdWxkIGJlIHVzZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKLQotCi1jbGFzcyBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoZSBjb25jcmV0ZSBhYnN0cmFjdG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuIiIiCi0KLSAgICBjbGFzcyBNZXRhUGF0aEZpbmRlcihhYmMuTWV0YVBhdGhGaW5kZXIpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKLQotICAgIGNsYXNzIFBhdGhFbnRyeUZpbmRlcihhYmMuUGF0aEVudHJ5RmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShfKQotCi0gICAgICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9sb2FkZXIoXykKLQotICAgIGNsYXNzIEZpbmRlcihhYmMuRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBMb2FkZXIoYWJjLkxvYWRlcik6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHN1cGVyKCkubW9kdWxlX3JlcHIobW9kdWxlKQotCi0gICAgY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9kYXRhKF8pCi0KLSAgICBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlciwgYWJjLkluc3BlY3RMb2FkZXIpOgotICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuaXNfcGFja2FnZShfKQotCi0gICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2NvZGUoXykKLQotICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X3NvdXJjZShfKQotCi0gICAgY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZmlsZW5hbWUoXykKLQotICAgIGNsYXNzIFNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyLCBhYmMuU291cmNlTG9hZGVyKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgUHlMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEluc3BlY3RMb2FkZXIsIGFiYy5QeUxvYWRlcik6Ci0gICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuc291cmNlX3BhdGgoXykKLQotICAgIGNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyLCBhYmMuUHlQeWNMb2FkZXIpOgotICAgICAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuYnl0ZWNvZGVfcGF0aChfKQotCi0gICAgICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9tdGltZShfKQotCi0gICAgICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBfLCBfMik6Ci0gICAgICAgICAgICBzdXBlcigpLndyaXRlX2J5dGVjb2RlKF8sIF8yKQotCi0gICAgZGVmIHJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYsIGlucywgKmFyZ3MpOgotICAgICAgICBmb3IgbWV0aG9kX25hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaW5zLCBtZXRob2RfbmFtZSkKLSAgICAgICAgICAgIGFyZ19jb3VudCA9IGxlbihpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG1ldGhvZClbMF0pIC0gMQotICAgICAgICAgICAgYXJncyA9IFsnJ10gKiBhcmdfY291bnQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtZXRob2QoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1zZyA9ICJ7fS57fSBkaWQgbm90IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZy5mb3JtYXQoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgbWV0aG9kX25hbWUpKQotCi0gICAgZGVmIHRlc3RfTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuTG9hZGVyKCksICdsb2FkX21vZHVsZScpCi0KLSAgICAjIFhYWCBtaXNwbGFjZWQ7IHNob3VsZCBiZSBzb21ld2hlcmUgZWxzZQotICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkZpbmRlcigpLCAnZmluZF9tb2R1bGUnKQotCi0gICAgZGVmIHRlc3RfUmVzb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5SZXNvdXJjZUxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9JbnNwZWN0TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuSW5zcGVjdExvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnKQotCi0gICAgZGVmIHRlc3RfRXhlY3V0aW9uTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuRXhlY3V0aW9uTG9hZGVyKCksICdsb2FkX21vZHVsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3BhY2thZ2UnLCAnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCi0KLSAgICBkZWYgdGVzdF9Tb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIGlucyA9IHNlbGYuU291cmNlTG9hZGVyKCkKLSAgICAgICAgIyBSZXF1aXJlZCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCAnZ2V0X2ZpbGVuYW1lJywgJ2dldF9kYXRhJykKLSAgICAgICAgIyBPcHRpb25hbCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCdwYXRoX3N0YXRzJywgJ3NldF9kYXRhJykKLQotICAgIGRlZiB0ZXN0X1B5TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUHlMb2FkZXIoKSwgJ3NvdXJjZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnLCAnaXNfcGFja2FnZScpCi0KLSAgICBkZWYgdGVzdF9QeVB5Y0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5UHljTG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9tdGltZScsICdieXRlY29kZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfYnl0ZWNvZGUnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVyQ29tcGF0VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywgTWlzc2luZ1BhdGhzVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZU9ubHlMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0TWV0aG9kSW1wbFRlc3RzKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDI0MTE3M2YuLmVmZDMxNDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQpAQCAtMSw5ICsxLDEwIEBACiAiIiJUZXN0IGNhc2Utc2Vuc2l0aXZpdHkgKFBFUCAyMzUpLiIiIgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotaW1wb3J0IGltcAorCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKQEAgLTExLDcgKzEyLDcgQEAKIAogCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICAiIiJQRVAgMjM1IGRpY3RhdGVzIHRoYXQgb24gY2FzZS1wcmVzZXJ2aW5nLCBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcwogICAgIHRoYXQgaW1wb3J0cyBhcmUgY2FzZS1zZW5zaXRpdmUgdW5sZXNzIHRoZSBQWVRIT05DQVNFT0sgZW52aXJvbm1lbnQKQEAgLTIwLDEzICsyMSwxMiBAQAogICAgIG5hbWUgPSAnTW9EdUxlJwogICAgIGFzc2VydCBuYW1lICE9IG5hbWUubG93ZXIoKQogCi0gICAgZGVmIGZpbmQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKSkKLSAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCisgICAgZGVmIGZpbmRlcihzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpCiAKICAgICBkZWYgc2Vuc2l0aXZpdHlfdGVzdChzZWxmKToKICAgICAgICAgIiIiTG9vayBmb3IgYSBtb2R1bGUgd2l0aCBtYXRjaGluZyBhbmQgbm9uLW1hdGNoaW5nIHNlbnNpdGl2aXR5LiIiIgpAQCAtMzYsMzUgKzM2LDQ4IEBACiAgICAgICAgIHdpdGggY29udGV4dCBhcyBtYXBwaW5nOgogICAgICAgICAgICAgc2Vuc2l0aXZlX3BhdGggPSBvcy5wYXRoLmpvaW4obWFwcGluZ1snLnJvb3QnXSwgJ3NlbnNpdGl2ZScpCiAgICAgICAgICAgICBpbnNlbnNpdGl2ZV9wYXRoID0gb3MucGF0aC5qb2luKG1hcHBpbmdbJy5yb290J10sICdpbnNlbnNpdGl2ZScpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5maW5kKHNlbnNpdGl2ZV9wYXRoKSwgc2VsZi5maW5kKGluc2Vuc2l0aXZlX3BhdGgpCisgICAgICAgICAgICBzZW5zaXRpdmVfZmluZGVyID0gc2VsZi5maW5kZXIoc2Vuc2l0aXZlX3BhdGgpCisgICAgICAgICAgICBpbnNlbnNpdGl2ZV9maW5kZXIgPSBzZWxmLmZpbmRlcihpbnNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZW5zaXRpdmVfZmluZGVyKSwgc2VsZi5maW5kKGluc2Vuc2l0aXZlX2ZpbmRlcikKIAogICAgIGRlZiB0ZXN0X3NlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi51bnNldCgnUFlUSE9OQ0FTRU9LJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBfYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgorICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIGluIHNlbGYuaW1wb3J0bGliLl9ib290c3RyYXAuX29zLmVudmlyb246CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3MuZW52aXJvbiBjaGFuZ2VzIG5vdCByZWZsZWN0ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19vcy5lbnZpcm9uJykKICAgICAgICAgICAgIHNlbnNpdGl2ZSwgaW5zZW5zaXRpdmUgPSBzZWxmLnNlbnNpdGl2aXR5X3Rlc3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNlbnNpdGl2ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzZW5zaXRpdmUuZ2V0X2ZpbGVuYW1lKHNlbGYubmFtZSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbnNlbnNpdGl2ZSkKIAogICAgIGRlZiB0ZXN0X2luc2Vuc2l0aXZlKHNlbGYpOgogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgogICAgICAgICAgICAgZW52LnNldCgnUFlUSE9OQ0FTRU9LJywgJzEnKQotICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIG5vdCBpbiBfYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgorICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIG5vdCBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbnNpdGl2ZSwgJ2xvYWRfbW9kdWxlJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaW5zZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoaW5zZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgaW5zZW5zaXRpdmUuZ2V0X2ZpbGVuYW1lKHNlbGYubmFtZSkpCiAKK2NsYXNzIENhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIoQ2FzZVNlbnNpdGl2aXR5VGVzdCk6CisgICAgZGVmIGZpbmQoc2VsZiwgZmluZGVyKToKKyAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENhc2VTZW5zaXRpdml0eVRlc3QpCitGcm96ZW5fQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMiwgU291cmNlX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxKENhc2VTZW5zaXRpdml0eVRlc3QpOgorICAgIGRlZiBmaW5kKHNlbGYsIGZpbmRlcik6CisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfc3BlYyhzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiBmb3VuZC5sb2FkZXIgaWYgZm91bmQgaXMgbm90IE5vbmUgZWxzZSBmb3VuZAorCitGcm96ZW5fQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MSwgU291cmNlX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKaW5kZXggZDU5OTY5YS4uOTdjYmYwNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKQEAgLTEsMjQgKzEsMjYgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBpbXBvcnRsaWIuYWJjCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitpbXBvcnRsaWJfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitpbXBvcnRsaWJfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YywgdW5sb2FkCiAKIAotY2xhc3MgU2ltcGxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTaW1wbGVUZXN0KGFiYy5Mb2FkZXJUZXN0cyk6CiAKICAgICAiIiJTaG91bGQgaGF2ZSBubyBpc3N1ZSBpbXBvcnRpbmcgYSBzb3VyY2UgbW9kdWxlIFtiYXNpY10uIEFuZCBpZiB0aGVyZSBpcwogICAgIGEgc3ludGF4IGVycm9yLCBpdCBzaG91bGQgcmFpc2UgYSBTeW50YXhFcnJvciBbc3ludGF4IGVycm9yXS4KQEAgLTI2LDI3ICsyOCwxNyBAQAogICAgICIiIgogCiAgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGVfQVBJKHNlbGYpOgotICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzcGVjaWZpZWQgdGhhdCBhc3N1bWUgc2VsZi5uYW1lIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3Rlck1peGluKGltcG9ydGxpYi5hYmMuTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6IHJldHVybiBmdWxsbmFtZQotICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6IHJldHVybiAnPG1vZHVsZT4nCisgICAgICAgIGNsYXNzIFRlc3RlcihzZWxmLmFiYy5GaWxlTG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiByZXR1cm4gJ2F0dHIgPSA0MicKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIF8pOiByZXR1cm4gRmFsc2UKIAotICAgICAgICBjbGFzcyBUZXN0ZXIoaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLCBUZXN0ZXJNaXhpbik6Ci0gICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKLSAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCi0gICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwotCi0gICAgICAgIG5hbWUgPSAnbW9kX25hbWUnCi0gICAgICAgIGxvYWRlciA9IFRlc3RlcihuYW1lLCAnc29tZV9wYXRoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBsb2FkZXIubG9hZF9tb2R1bGUoTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShsb2FkZXIubmFtZSArICdYWFgnKQorICAgICAgICBsb2FkZXIgPSBUZXN0ZXIoJ2JsYWgnLCAnYmxhaC5weScpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxvYWQsICdibGFoJykKKyAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkgICMgU2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24uCiAKICAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfQVBJKHNlbGYpOgogICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzZXQgdGhlbiBhc3N1bWUgc2VsZi5wYXRoIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICBjbGFzcyBUZXN0ZXIoc2VsZi5hYmMuRmlsZUxvYWRlcik6CiAgICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKICAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwpAQCAtNjQsNyArNTYsNyBAQAogICAgICMgW2Jhc2ljXQogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3RlbXAnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfdGVtcCcsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ190ZW1wJ10sCkBAIC03NCw3ICs2Niw3IEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ19wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdfcGtnJywgc3lzLm1vZHVsZXMpCkBAIC04Nyw3ICs3OSw3IEBACiAKICAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycsICdfcGtnLm1vZCcpYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5tb2QnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZy5tb2QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3BrZy5tb2QnLCBzeXMubW9kdWxlcykKQEAgLTEwMiw3ICs5NCw3IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIG1vZHVsZV9pZCA9IGlkKG1vZHVsZSkKICAgICAgICAgICAgIG1vZHVsZV9kaWN0X2lkID0gaWQobW9kdWxlLl9fZGljdF9fKQpAQCAtMTIyLDEyICsxMTQsMTYgQEAKICAgICAgICAgdmFsdWUgPSAnPHRlc3Q+JwogICAgICAgICBuYW1lID0gJ190ZW1wJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG5hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBvcmlnX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBvcmlnX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG9yaWdfbW9kdWxlKQorICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIob3JpZ19tb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgogICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKQEAgLTEzOCw3ICsxMzQsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1snX3RlbXAnXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJz0nKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgogICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX3RlbXAnLCBzeXMubW9kdWxlcykKQEAgLTE1MSwxNCArMTQ3LDE0IEBACiAgICAgICAgICAgICBmaWxlLndyaXRlKCIjIHRlc3QgZmlsZSBmb3IgaW1wb3J0bGliIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ190ZW1wJyk6Ci0gICAgICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgZmlsZV9wYXRoKQogICAgICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9wYXRoLCBtb2QuX19maWxlX18pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSwKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kLl9fY2FjaGVkX18pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZV9wYXRoKQotICAgICAgICAgICAgcHljYWNoZSA9IG9zLnBhdGguZGlybmFtZShpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSkKKyAgICAgICAgICAgIHB5Y2FjaGUgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCkpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhweWNhY2hlKToKICAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHB5Y2FjaGUpCiAKQEAgLTE2Nyw3ICsxNjMsNyBAQAogICAgICAgICAjIHRydW5jYXRlZCByYXRoZXIgdGhhbiByYWlzZSBhbiBPdmVyZmxvd0Vycm9yLgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBzb3VyY2UgPSBtYXBwaW5nWydfdGVtcCddCi0gICAgICAgICAgICBjb21waWxlZCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCisgICAgICAgICAgICBjb21waWxlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgieCA9IDUiKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTc4LDE2ICsxNzQsMzcgQEAKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGdldGF0dHIoZXJybm8sICdFT1ZFUkZMT1cnLCBOb25lKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIHRvIGxhcmdlIGludGVnZXIgKHt9KSIuZm9ybWF0KGUpKQotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgIyBQRVAgNDUxCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdfdGVtcCcpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcignX3RlbXAnLCBsb2FkZXIpCisgICAgICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUueCwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhjb21waWxlZCkpCisgICAgICAgICAgICBvcy51bmxpbmsoY29tcGlsZWQpCisgICAgICAgICAgICAjIFBFUCAzMDIKKyAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKSAjIFhYWAogICAgICAgICAgICAgIyBTYW5pdHkgY2hlY2tzLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuX19jYWNoZWRfXywgY29tcGlsZWQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC54LCA1KQogICAgICAgICAgICAgIyBUaGUgcHljIGZpbGUgd2FzIGNyZWF0ZWQuCi0gICAgICAgICAgICBvcy5zdGF0KGNvbXBpbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGNvbXBpbGVkKSkKKworICAgIGRlZiB0ZXN0X3VubG9hZGFibGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dvb2QgbmFtZScsIHt9KQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdiYWQgbmFtZScpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2JhZCBuYW1lJywgbG9hZGVyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdiYWQgbmFtZScpCisKK0Zyb3plbl9TaW1wbGVUZXN0LCBTb3VyY2VfU2ltcGxlVGVzdCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTaW1wbGVUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LCBhYmM9aW1wb3J0bGliX2FiYywKKyAgICAgICAgdXRpbD1pbXBvcnRsaWJfdXRpbCkKIAogCi1jbGFzcyBCYWRCeXRlY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFkQnl0ZWNvZGVUZXN0OgogCiAgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgogICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKQEAgLTIwNCw3ICsyMjEsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKICAgICAgICAgaWYgbm90IGRlbF9zb3VyY2U6Ci0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsobWFwcGluZ1tuYW1lXSkKICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBtYWtlX2xlZ2FjeV9weWMobWFwcGluZ1tuYW1lXSkKQEAgLTI5MCwxMCArMzA3LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGInXHgwMFx4MDBceDAwXHgwMCcgKyBiY1s0Ol0pCiAgICAgICAgICAgICB0ZXN0KCdfdGVtcCcsIG1hcHBpbmcsIGJjX3BhdGgpCiAKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MShCYWRCeXRlY29kZVRlc3QpOgogCi1jbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKKyAgICBkZWYgaW1wb3J0XyhzZWxmLCBmaWxlLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKG1vZHVsZV9uYW1lLCBmaWxlKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG1vZHVsZV9uYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihtb2R1bGVfbmFtZSwgbG9hZGVyKQorICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQogCi0gICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMihCYWRCeXRlY29kZVRlc3QpOgorCisgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKKyAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKworCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3Q6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKQEAgLTMzMiw3ICszNjYsOCBAQAogICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCiAKICAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFnaWModGVzdCkKIApAQCAtMzgyLDEzICs0MTcsMTMgQEAKICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyK2InKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUud3JpdGUoemVyb3MpCiAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5pbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgc291cmNlX3RpbWVzdGFtcCkKQEAgLTQwMCw3ICs0MzUsNyBAQAogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICAjIENyZWF0ZSBieXRlY29kZSB0aGF0IHdpbGwgbmVlZCB0byBiZSByZS1jcmVhdGVkLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDApCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ1x4MDBceDAwXHgwMFx4MDAnKQpAQCAtNDA4LDE2ICs0NDMsMzQgQEAKICAgICAgICAgICAgIG9zLmNobW9kKGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIElPRXJyb3IhCisgICAgICAgICAgICAgICAgIyBTaG91bGQgbm90IHJhaXNlIE9TRXJyb3IhCiAgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICMgTWFrZSB3cml0YWJsZSBmb3IgZXZlbnR1YWwgY2xlYW4tdXAuCiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdCwgQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKToKKyAgICBwYXNzCiAKLWNsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKK0Zyb3plbl9Tb3VyY2VCYWRCeXRlY29kZVBFUDQ1MSwgU291cmNlX1NvdXJjZUJhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSwKKyAgICAgICAgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKLSAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKK2NsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMigKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LCBCYWRCeXRlY29kZVRlc3RQRVAzMDIpOgorICAgIHBhc3MKKworRnJvemVuX1NvdXJjZUJhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LAorICAgICAgICBhYmM9aW1wb3J0bGliX2FiYywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKKworCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0OgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLmxvYWRlciA9IGNscy5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgpAQCAtNDcyLDE0ICs1MjUsMjIgQEAKICAgICBkZWYgdGVzdF9ub25fY29kZV9tYXJzaGFsKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X25vbl9jb2RlX21hcnNoYWwoZGVsX3NvdXJjZT1UcnVlKQogCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSk6CisgICAgcGFzcwogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAotICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKLSAgICAgICAgICAgICAgICApCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCitjbGFzcyBTb3VyY2VsZXNzTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMik6CisgICAgcGFzcworCitGcm96ZW5fU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyLCBTb3VyY2VfU291cmNlbGVzc0JhZEJ5dGVjb2RlUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIsIGltcG9ydGxpYj1pbXBvcnRsaWIsCisgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnksIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQppbmRleCA4ZTQ5ODY4Li4zNmZjM2RkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDkgKzEsMTAgQEAKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBlcnJubwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0YXQKQEAgLTM5LDE0ICs0MCwxMSBAQAogICAgICIiIgogCiAgICAgZGVmIGdldF9maW5kZXIoc2VsZiwgcm9vdCk6Ci0gICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMpXQotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIocm9vdCwgKmxvYWRlcl9kZXRhaWxzKQotCi0gICAgZGVmIGltcG9ydF8oc2VsZiwgcm9vdCwgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbmRlcihyb290KS5maW5kX21vZHVsZShtb2R1bGUpCisgICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUyldCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKHJvb3QsICpsb2FkZXJfZGV0YWlscykKIAogICAgIGRlZiBydW5fdGVzdChzZWxmLCB0ZXN0LCBjcmVhdGU9Tm9uZSwgKiwgY29tcGlsZV89Tm9uZSwgdW5saW5rPU5vbmUpOgogICAgICAgICAiIiJUZXN0IHRoZSBmaW5kaW5nIG9mICd0ZXN0JyB3aXRoIHRoZSBjcmVhdGlvbiBvZiBtb2R1bGVzIGxpc3RlZCBpbgpAQCAtMTI0LDggKzEyMiw4IEBACiAKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmdfZm9yX2RpcihzZWxmKToKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIGZyb20gc3lzLnBhdGggbWVhbnMgdG8gc2VhcmNoIGluIHRoZSBjd2QuCi0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogICAgICAgICB3aXRoIG9wZW4oJ21vZC5weScsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6CkBAIC0xMzYsOCArMTM0LDggQEAKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRhdGVfY2FjaGVzKHNlbGYpOgogICAgICAgICAjIGludmFsaWRhdGVfY2FjaGVzKCkgc2hvdWxkIHJlc2V0IHRoZSBtdGltZS4KLSAgICAgICAgZmluZGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAoc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKKyAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCiAgICAgICAgIGZpbmRlci5fcGF0aF9tdGltZSA9IDQyCiAgICAgICAgIGZpbmRlci5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZGVyLl9wYXRoX210aW1lLCAtMSkKQEAgLTE4MSwxMSArMTc5LDI1IEBACiAgICAgICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIoZmlsZV9vYmoubmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIFtdKSwgZmluZGVyLmZpbmRfbG9hZGVyKCdkb2Vzbm90ZXhpc3QnKSkKIAorY2xhc3MgRmluZGVyVGVzdHNQRVA0NTEoRmluZGVyVGVzdHMpOgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKKyAgICBkZWYgaW1wb3J0XyhzZWxmLCByb290LCBtb2R1bGUpOgorICAgICAgICBmb3VuZCA9IHNlbGYuZ2V0X2ZpbmRlcihyb290KS5maW5kX3NwZWMobW9kdWxlKQorICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyIGlmIGZvdW5kIGlzIG5vdCBOb25lIGVsc2UgZm91bmQKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQNDUxLCBTb3VyY2VfRmluZGVyVGVzdHNQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgRmluZGVyVGVzdHNQRVAzMDIoRmluZGVyVGVzdHMpOgorCisgICAgZGVmIGltcG9ydF8oc2VsZiwgcm9vdCwgbW9kdWxlKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbmRlcihyb290KS5maW5kX21vZHVsZShtb2R1bGUpCisKK0Zyb3plbl9GaW5kZXJUZXN0c1BFUDMwMiwgU291cmNlX0ZpbmRlclRlc3RzUEVQMzAyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEZpbmRlclRlc3RzUEVQMzAyLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDZhNzg3OTIuLjkyZGE3NzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKQEAgLTEsMTcgKzEsMTggQEAKK2Zyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBQYXRoSG9va1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGF0aEhvb2tUZXN0OgogCiAgICAgIiIiVGVzdCB0aGUgcGF0aCBob29rIGZvciBzb3VyY2UuIiIiCiAKICAgICBkZWYgcGF0aF9ob29rKHNlbGYpOgotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQorICAgICAgICByZXR1cm4gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2soKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnZHVtbXknKSBhcyBtYXBwaW5nOgpAQCAtMjIsMTEgKzIzLDggQEAKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIHJlcHJlc2VudHMgdGhlIGN3ZC4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi5wYXRoX2hvb2soKSgnJyksICdmaW5kX21vZHVsZScpKQogCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFBhdGhIb29rVGVzdCkKK0Zyb3plbl9QYXRoSG9va1Rlc3QsIFNvdXJjZV9QYXRoSG9va3Rlc3QgPSB1dGlsLnRlc3RfYm90aChQYXRoSG9va1Rlc3QsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CmluZGV4IGJhMDJiNDQuLmFhZjAwNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKQEAgLTEsOSArMSwxMyBAQAorZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCiAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiAjIEJlY2F1c2Ugc3lzLnBhdGggZ2V0cyBlc3NlbnRpYWxseSBibGFua2VkLCBuZWVkIHRvIGhhdmUgdW5pY29kZWRhdGEgYWxyZWFkeQogIyBpbXBvcnRlZCBmb3IgdGhlIHBhcnNlciB0byB1c2UuCiBpbXBvcnQgdW5pY29kZWRhdGEKQEAgLTEzLDcgKzE3LDcgQEAKIENPRElOR19SRSA9IHJlLmNvbXBpbGUocideWyBcdFxmXSojLipjb2RpbmdbOj1dWyBcdF0qKFstXHcuXSspJywgcmUuQVNDSUkpCiAKIAotY2xhc3MgRW5jb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEVuY29kaW5nVGVzdDoKIAogICAgICIiIlBFUCAzMTIwIG1ha2VzIFVURi04IHRoZSBkZWZhdWx0IGVuY29kaW5nIGZvciBzb3VyY2UgY29kZQogICAgIFtkZWZhdWx0IGVuY29kaW5nXS4KQEAgLTM1LDkgKzM5LDkgQEAKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhzZWxmLm1vZHVsZV9uYW1lKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbc2VsZi5tb2R1bGVfbmFtZV0sICd3YicpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShzb3VyY2UpCi0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIoc2VsZi5tb2R1bGVfbmFtZSwKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoc2VsZi5tb2R1bGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSkKLSAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWQobG9hZGVyKQogCiAgICAgZGVmIGNyZWF0ZV9zb3VyY2Uoc2VsZiwgZW5jb2RpbmcpOgogICAgICAgICBlbmNvZGluZ19saW5lID0gIiMgY29kaW5nPXswfSIuZm9ybWF0KGVuY29kaW5nKQpAQCAtODQsOCArODgsMjcgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CiAgICAgICAgICAgICBzZWxmLnJ1bl90ZXN0KHNvdXJjZSkKIAorY2xhc3MgRW5jb2RpbmdUZXN0UEVQNDUxKEVuY29kaW5nVGVzdCk6CiAKLWNsYXNzIExpbmVFbmRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgbG9hZChzZWxmLCBsb2FkZXIpOgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5tb2R1bGVfbmFtZSwgbG9hZGVyKQorICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKK0Zyb3plbl9FbmNvZGluZ1Rlc3RQRVA0NTEsIFNvdXJjZV9FbmNvZGluZ1Rlc3RQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRW5jb2RpbmdUZXN0UEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCitjbGFzcyBFbmNvZGluZ1Rlc3RQRVAzMDIoRW5jb2RpbmdUZXN0KToKKworICAgIGRlZiBsb2FkKHNlbGYsIGxvYWRlcik6CisgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworRnJvemVuX0VuY29kaW5nVGVzdFBFUDMwMiwgU291cmNlX0VuY29kaW5nVGVzdFBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFbmNvZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgTGluZUVuZGluZ1Rlc3Q6CiAKICAgICByIiIiU291cmNlIHdyaXR0ZW4gd2l0aCB0aGUgdGhyZWUgdHlwZXMgb2YgbGluZSBlbmRpbmdzIChcbiwgXHJcbiwgXHIpCiAgICAgbmVlZCB0byBiZSByZWFkYWJsZSBbY3JdW2NybGZdW2xmXS4iIiIKQEAgLTk3LDcgKzEyMCw3IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMobW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1ttb2R1bGVfbmFtZV0sICd3YicpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShzb3VyY2UpCi0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobW9kdWxlX25hbWUsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQogICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKIApAQCAtMTEzLDExICsxMzYsMjUgQEAKICAgICBkZWYgdGVzdF9sZihzZWxmKToKICAgICAgICAgc2VsZi5ydW5fdGVzdChiJ1xuJykKIAorY2xhc3MgTGluZUVuZGluZ1Rlc3RQRVA0NTEoTGluZUVuZGluZ1Rlc3QpOgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChFbmNvZGluZ1Rlc3QsIExpbmVFbmRpbmdUZXN0KQorICAgIGRlZiBsb2FkKHNlbGYsIGxvYWRlcik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoc2VsZi5tb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm1vZHVsZV9uYW1lLCBsb2FkZXIpCisgICAgICAgIGxvYWRlci5leGVjX21vZHVsZShtb2R1bGUpCisgICAgICAgIHJldHVybiBtb2R1bGUKKworRnJvemVuX0xpbmVFbmRpbmdUZXN0UEVQNDUxLCBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTGluZUVuZGluZ1Rlc3RQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKK2NsYXNzIExpbmVFbmRpbmdUZXN0UEVQMzAyKExpbmVFbmRpbmdUZXN0KToKKworICAgIGRlZiBsb2FkKHNlbGYsIGxvYWRlcik6CisgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworRnJvemVuX0xpbmVFbmRpbmdUZXN0UEVQMzAyLCBTb3VyY2VfTGluZUVuZGluZ1Rlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTGluZUVuZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQppbmRleCBhZTY1NjYzLi42M2NkMjVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZXJybm8KIGltcG9ydCBmdW5jdG9vbHMKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKaW5kZXggYzYyMGMzNy4uYmE4ZDYwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkKQEAgLTEsOSArMSwyMSBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQoraW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KK2ltcG9ydCBtYXJzaGFsCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIAorZnJvbSAuIGltcG9ydCB1dGlsCiAKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl9hYmMsIHNvdXJjZV9hYmMgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5hYmMnKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKKyMjIyMjIEluaGVyaXRhbmNlICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBjbGFzcyBJbmhlcml0YW5jZVRlc3RzOgogCiAgICAgIiIiVGVzdCB0aGF0IHRoZSBzcGVjaWZpZWQgY2xhc3MgaXMgYSBzdWJjbGFzcy9zdXBlcmNsYXNzIG9mIHRoZSBleHBlY3RlZApAQCAtMTQsOCArMjYsMTkgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zdXBlcmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYywgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdXBlcmNsYXNzX25hbWVzXQorICAgICAgICBpZiBoYXNhdHRyKHNlbGYsICdzdWJjbGFzc19uYW1lcycpOgorICAgICAgICAgICAgIyBCZWNhdXNlIHRlc3Quc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCkgY3JlYXRlcyBhIG5ldworICAgICAgICAgICAgIyBpbXBvcnRsaWIuX2Jvb3RzdHJhcCBwZXIgbW9kdWxlLCBpbmhlcml0YW5jZSBjaGVja3MgZmFpbCB3aGVuCisgICAgICAgICAgICAjIGNoZWNraW5nIGFjcm9zcyBtb2R1bGUgYm91bmRhcmllcyAoaS5lLiB0aGUgX2Jvb3RzdHJhcCBpbiBhYmMgaXMKKyAgICAgICAgICAgICMgbm90IHRoZSBzYW1lIGFzIHRoZSBvbmUgaW4gbWFjaGluZXJ5KS4gVGhhdCBtZWFucyBzdGVhbGluZyBvbmUgb2YKKyAgICAgICAgICAgICMgdGhlIG1vZHVsZXMgZnJvbSB0aGUgb3RoZXIgdG8gbWFrZSBzdXJlIHRoZSBzYW1lIGluc3RhbmNlIGlzIHVzZWQuCisgICAgICAgICAgICBzZWxmLnN1YmNsYXNzZXMgPSBbZ2V0YXR0cihzZWxmLmFiYy5tYWNoaW5lcnksIGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjbGFzc19uYW1lIGluIHNlbGYuc3ViY2xhc3NfbmFtZXNdCiAgICAgICAgIGFzc2VydCBzZWxmLnN1YmNsYXNzZXMgb3Igc2VsZi5zdXBlcmNsYXNzZXMsIHNlbGYuX19jbGFzc19fCi0gICAgICAgIHNlbGYuX190ZXN0ID0gZ2V0YXR0cihhYmMsIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICB0ZXN0aW5nID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18ucGFydGl0aW9uKCdfJylbMl0KKyAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKHNlbGYuYWJjLCB0ZXN0aW5nKQogCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGV4cGVjdGVkIHN1YmNsYXNzZXMgaW5oZXJpdC4KQEAgLTI5LDc1ICs1Miw3NjEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNlbGYuX190ZXN0LCBzdXBlcmNsYXNzKSwKICAgICAgICAgICAgICAgICJ7MH0gaXMgbm90IGEgc3VwZXJjbGFzcyBvZiB7MX0iLmZvcm1hdChzdXBlcmNsYXNzLCBzZWxmLl9fdGVzdCkpCiAKK2RlZiBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoYmFzZV9jbGFzcyk6CisgICAgZGVmIHNldF9mcm96ZW4obnMpOgorICAgICAgICBuc1snYWJjJ10gPSBmcm96ZW5fYWJjCisgICAgZGVmIHNldF9zb3VyY2UobnMpOgorICAgICAgICBuc1snYWJjJ10gPSBzb3VyY2VfYWJjCiAKLWNsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuRmluZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuUGF0aEZpbmRlciwgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlcl0KLQotCi1jbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuRmlsZUZpbmRlcl0KLQotCi1jbGFzcyBMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5Mb2FkZXJdCi0KLQotY2xhc3MgSW5zcGVjdExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5JbnNwZWN0TG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQotCi0KLWNsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXJdCi0KLQotY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBQeUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlciwgYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotCi0KLWNsYXNzIFB5UHljTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKICAgICBjbGFzc2VzID0gW10KLSAgICBmb3IgY2xhc3NfIGluIGdsb2JhbHMoKS52YWx1ZXMoKToKLSAgICAgICAgaWYgKGluc3BlY3QuaXNjbGFzcyhjbGFzc18pIGFuZAotICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoY2xhc3NfLCB1bml0dGVzdC5UZXN0Q2FzZSkgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIEluaGVyaXRhbmNlVGVzdHMpKToKLSAgICAgICAgICAgIGNsYXNzZXMuYXBwZW5kKGNsYXNzXykKLSAgICBydW5fdW5pdHRlc3QoKmNsYXNzZXMpCisgICAgZm9yIHByZWZpeCwgbnNfc2V0IGluIFsoJ0Zyb3plbicsIHNldF9mcm96ZW4pLCAoJ1NvdXJjZScsIHNldF9zb3VyY2UpXToKKyAgICAgICAgY2xhc3Nlcy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIGJhc2VfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiYXNlX2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9bnNfc2V0KSkKKyAgICByZXR1cm4gY2xhc3NlcworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0ZpbmRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdQYXRoRmluZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAnV2luZG93c1JlZ2lzdHJ5RmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoTWV0YVBhdGhGaW5kZXIpCitGcm96ZW5fTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfTWV0YVBhdGhGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRmlsZUZpbmRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlcikKK0Zyb3plbl9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUGF0aEVudHJ5RmluZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUmVzb3VyY2VMb2FkZXIpCitGcm96ZW5fUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfUmVzb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ0xvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0J1aWx0aW5JbXBvcnRlcicsICdGcm96ZW5JbXBvcnRlcicsICdFeHRlbnNpb25GaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoSW5zcGVjdExvYWRlcikKK0Zyb3plbl9JbnNwZWN0TG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnSW5zcGVjdExvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIpCitGcm96ZW5fRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0V4ZWN1dGlvbkxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEZpbGVMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlcicsICdTb3VyY2VsZXNzRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEZpbGVMb2FkZXIpCitGcm96ZW5fRmlsZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgU291cmNlTG9hZGVyKEluaGVyaXRhbmNlVGVzdHMpOgorICAgIHN1cGVyY2xhc3NfbmFtZXMgPSBbJ1Jlc291cmNlTG9hZGVyJywgJ0V4ZWN1dGlvbkxvYWRlciddCisgICAgc3ViY2xhc3NfbmFtZXMgPSBbJ1NvdXJjZUZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhTb3VyY2VMb2FkZXIpCitGcm96ZW5fU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX1NvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisjIyMjIyBEZWZhdWx0IHJldHVybiB2YWx1ZXMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworZGVmIG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcyk6CisgICAgY2xhc3NlcyA9IFtdCisgICAgZm9yIGtpbmQsIGFiYyBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fYWJjKSwgKCdTb3VyY2UnLCBzb3VyY2VfYWJjKV06CisgICAgICAgIG5hbWUgPSAnXycuam9pbihba2luZCwgYmFzZV9jbGFzcy5fX25hbWVfX10pCisgICAgICAgIGJhc2VfY2xhc3NlcyA9IGJhc2VfY2xhc3MsIGdldGF0dHIoYWJjLCBiYXNlX2NsYXNzLl9fbmFtZV9fKQorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MobmFtZSwgYmFzZV9jbGFzc2VzKSkKKyAgICByZXR1cm4gY2xhc3NlcworCitkZWYgbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoYmFzZV9jbGFzcywgdGVzdF9jbGFzcyk6CisgICAgZnJvemVuX2NsYXNzLCBzb3VyY2VfY2xhc3MgPSBtYWtlX2FiY19zdWJjbGFzc2VzKGJhc2VfY2xhc3MpCisgICAgdGVzdHMgPSBbXQorICAgIGZvciBwcmVmaXgsIGNsYXNzX2luX3Rlc3QgaW4gWygnRnJvemVuJywgZnJvemVuX2NsYXNzKSwgKCdTb3VyY2UnLCBzb3VyY2VfY2xhc3MpXToKKyAgICAgICAgZGVmIHNldF9ucyhucyk6CisgICAgICAgICAgICBuc1snaW5zJ10gPSBjbGFzc19pbl90ZXN0KCkKKyAgICAgICAgdGVzdHMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcygnXycuam9pbihbcHJlZml4LCB0ZXN0X2NsYXNzLl9fbmFtZV9fXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2JvZHk9c2V0X25zKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlcjoKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoKQorCitGcm96ZW5fTVBGLCBTb3VyY2VfTVBGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhNZXRhUGF0aEZpbmRlcikKKworCitjbGFzcyBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBEZWZhdWx0IHNob3VsZCByZXR1cm4gTm9uZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyB0aGUgbWV0aG9kIGlzIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKE1ldGFQYXRoRmluZGVyLCBNZXRhUGF0aEZpbmRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTVBGRGVmYXVsdFRlc3RzLCBTb3VyY2VfTVBGRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBQYXRoRW50cnlGaW5kZXI6CisKKyAgICBkZWYgZmluZF9sb2FkZXIoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5maW5kX2xvYWRlcihmdWxsbmFtZSkKKworRnJvemVuX1BFRiwgU291cmNlX1BFRiA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUGF0aEVudHJ5RmluZGVyKQorCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9maW5kX2xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgW10pLCBzZWxmLmlucy5maW5kX2xvYWRlcignc29tZXRoaW5nJykpCisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgc2VsZi5pbnMuZmluZF9tb2R1bGUoJ3NvbWV0aGluZycpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIGEgbm8tb3AuCisgICAgICAgIHNlbGYuaW5zLmludmFsaWRhdGVfY2FjaGVzKCkKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKFBhdGhFbnRyeUZpbmRlciwgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9QRUZEZWZhdWx0VGVzdHMsIFNvdXJjZV9QRUZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIExvYWRlcjoKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisKK0Zyb3plbl9MLCBTb3VyY2VfTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoTG9hZGVyKQorCisKK2NsYXNzIExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5sb2FkX21vZHVsZSgnc29tZXRoaW5nJykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLm1vZHVsZV9yZXByKG1vZCkKKyAgICAgICAgb3JpZ2luYWxfcmVwciA9IHJlcHIobW9kKQorICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYuaW5zCisgICAgICAgICMgU2hvdWxkIHN0aWxsIHJldHVybiBhIHByb3BlciByZXByLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihtb2QpKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTG9hZGVyLCBMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0xEZWZhdWx0VGVzdHMsIFNvdXJjZUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFJlc291cmNlTG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCisKKworRnJvemVuX1JMLCBTb3VyY2VfUkwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFJlc291cmNlTG9hZGVyKQorCisKK2NsYXNzIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9kYXRhKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuZ2V0X2RhdGEoJy9zb21lL3BhdGgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUmVzb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9STERlZmF1bHRUZXN0cywgU291cmNlX1JMRGVmYXVsdFRlc3RzID0gdGVzdHMKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlcik6CisKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9zb3VyY2UoZnVsbG5hbWUpCisKKworRnJvemVuX0lMLCBTb3VyY2VfSUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEluc3BlY3RMb2FkZXIpCisKKworY2xhc3MgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHM6CisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmlzX3BhY2thZ2UoJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfc291cmNlKCdibGFoJykKKworCit0ZXN0cyA9IG1ha2VfcmV0dXJuX3ZhbHVlX3Rlc3RzKEluc3BlY3RMb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0lMRGVmYXVsdFRlc3RzLCBTb3VyY2VfSUxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisKK0Zyb3plbl9FTCwgU291cmNlX0VMID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhFeGVjdXRpb25Mb2FkZXIpCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZmlsZW5hbWUoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoRXhlY3V0aW9uTG9hZGVyLCBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9FTERlZmF1bHRUZXN0cywgU291cmNlX0VMRGVmYXVsdHNUZXN0cyA9IHRlc3RzCisKKworIyMjIyMgSW5zcGVjdExvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0czoKKworICAgIGRlZiBzb3VyY2VfdG9fbW9kdWxlKHNlbGYsIGRhdGEsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIkhlbHAgd2l0aCBzb3VyY2VfdG9fY29kZSgpIHRlc3RzLiIiIgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGgpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgU2luY2UgY29tcGlsZSgpIGNhbiBoYW5kbGUgc3RyaW5ncywgc28gc2hvdWxkIHNvdXJjZV90b19jb2RlKCkuCisgICAgICAgIHNvdXJjZSA9ICdhdHRyID0gNDInCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc291cmNlX3RvX21vZHVsZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBTaW5jZSBjb21waWxlKCkgY2FuIGhhbmRsZSBieXRlcywgc28gc2hvdWxkIHNvdXJjZV90b19jb2RlKCkuCisgICAgICAgIHNvdXJjZSA9IGInYXR0ciA9IDQyJworICAgICAgICBtb2R1bGUgPSBzZWxmLnNvdXJjZV90b19tb2R1bGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfcGF0aChzZWxmKToKKyAgICAgICAgIyBTcGVjaWZ5aW5nIGEgcGF0aCBzaG91bGQgc2V0IGl0IGZvciB0aGUgY29kZSBvYmplY3QuCisgICAgICAgIHBhdGggPSAncGF0aC90by9zb21ld2hlcmUnCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZSgnJywgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfbm9fcGF0aChzZWxmKToKKyAgICAgICAgIyBOb3Qgc2V0dGluZyBhIHBhdGggc2hvdWxkIHN0aWxsIHdvcmsgYW5kIGJlIHNldCB0byA8c3RyaW5nPiBzaW5jZSB0aGF0CisgICAgICAgICMgaXMgYSBwcmUtZXhpc3RpbmcgcHJhY3RpY2UgYXMgYSBkZWZhdWx0IHRvIGNvbXBpbGUoKS4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisKKworY2xhc3MgRnJvemVuX0lMU291cmNlVG9Db2RlVGVzdHMoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHN1Y2Nlc3MuCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X3NvdXJjZScpIGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9zb3VyY2UnKSBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvZGUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2Vfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHNvdXJjZSB0aGVuIHRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworCitjbGFzcyBGcm96ZW5fSUxHZXRDb2RlVGVzdHMoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxHZXRDb2RlVGVzdHMoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHM6CisKKyAgICAiIiJUZXN0IEluc3BlY3RMb2FkZXIubG9hZF9tb2R1bGUoKS4iIiIKKworICAgIG1vZHVsZV9uYW1lID0gJ2JsYWgnCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5sb2FkKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubG9hZCwgc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiBtb2NrX2dldF9jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfY29kZScpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9JbXBvcnRFcnJvcihzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfY29kZSgpIHJhaXNlcyBJbXBvcnRFcnJvciwgaXQgc2hvdWxkIHByb3BhZ2F0ZS4KKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfZ2V0X2NvZGUoKSBhcyBtb2NrZWRfZ2V0X2NvZGU6CisgICAgICAgICAgICBtb2NrZWRfZ2V0X2NvZGUuc2lkZV9lZmZlY3QgPSBJbXBvcnRFcnJvcgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfY29kZSgpIHJldHVybnMgTm9uZSwgcmFpc2UgSW1wb3J0RXJyb3IuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXR1cm5lZChzZWxmKToKKyAgICAgICAgIyBUaGUgbG9hZGVkIG1vZHVsZSBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhdHRyID0gNDInLCAnPHN0cmluZz4nLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnJldHVybl92YWx1ZSA9IGNvZGUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUsIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdKQorCisKK2NsYXNzIEZyb3plbl9JTExvYWRNb2R1bGVUZXN0cyhJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTExvYWRNb2R1bGVUZXN0cyhJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gU291cmNlX0lMCisKKworIyMjIyMgRXhlY3V0aW9uTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0czoKKworICAgIGRlZiBtb2NrX21ldGhvZHMoc2VsZiwgKiwgZ2V0X3NvdXJjZT1GYWxzZSwgZ2V0X2ZpbGVuYW1lPUZhbHNlKToKKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gTm9uZSwgTm9uZQorICAgICAgICBpZiBnZXRfc291cmNlOgorICAgICAgICAgICAgc291cmNlX21vY2tfY29udGV4dCA9IG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9zb3VyY2UnKQorICAgICAgICBpZiBnZXRfZmlsZW5hbWU6CisgICAgICAgICAgICBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCisgICAgICAgIHJldHVybiBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2JsYWgucHknCisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IHNlbGYubW9ja19tZXRob2RzKAorICAgICAgICAgICAgICAgIGdldF9zb3VyY2U9VHJ1ZSwgZ2V0X2ZpbGVuYW1lPVRydWUpCisgICAgICAgIHdpdGggc291cmNlX21vY2tfY29udGV4dCBhcyBzb3VyY2VfbW9jaywgZmlsZW5hbWVfbW9ja19jb250ZXh0IGFzIG5hbWVfbW9jazoKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrLnJldHVybl92YWx1ZSA9ICdhdHRyID0gNDInCisgICAgICAgICAgICBuYW1lX21vY2sucmV0dXJuX3ZhbHVlID0gcGF0aAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCBwYXRoKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX2lzX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X3NvdXJjZSgpIGlzIE5vbmUgdGhlbiB0aGlzIHNob3VsZCBiZSBOb25lLgorICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBfID0gc2VsZi5tb2NrX21ldGhvZHMoZ2V0X3NvdXJjZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvZGUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2Vfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHNvdXJjZSB0aGVuIHRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgorICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfbm9fcGF0aChzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfZmlsZW5hbWUoKSByYWlzZXMgSW1wb3J0RXJyb3IgdGhlbiBzaW1wbHkgc2tpcCBzZXR0aW5nIHRoZSBwYXRoCisgICAgICAgICMgb24gdGhlIGNvZGUgb2JqZWN0LgorICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBzZWxmLm1vY2tfbWV0aG9kcygKKyAgICAgICAgICAgICAgICBnZXRfc291cmNlPVRydWUsIGdldF9maWxlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgc291cmNlX21vY2ssIGZpbGVuYW1lX21vY2tfY29udGV4dCBhcyBuYW1lX21vY2s6CisgICAgICAgICAgICBzb3VyY2VfbW9jay5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbmFtZV9tb2NrLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJzxzdHJpbmc+JykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworCitjbGFzcyBGcm96ZW5fRUxHZXRDb2RlVGVzdHMoRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fRUwKKworY2xhc3MgU291cmNlX0VMR2V0Q29kZVRlc3RzKEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzID0gU291cmNlX0VMCisKKworIyMjIyMgU291cmNlTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIFNvdXJjZUxvYWRlcjoKKworICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KKyAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fY2FjaGVkX18sIF9fcGFja2FnZV9fLCAiCisgICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoICE9IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCisKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCisgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHJldHVybiAnPG1vZHVsZT4nCisKKworRnJvemVuX1NvdXJjZU9ubHlMLCBTb3VyY2VfU291cmNlT25seUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFNvdXJjZUxvYWRlcikKKworCitjbGFzcyBTb3VyY2VMb2FkZXIoU291cmNlTG9hZGVyKToKKworICAgIHNvdXJjZV9tdGltZSA9IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBtYWdpYz1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwYXRoKQorICAgICAgICBzZWxmLmJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnNvdXJjZV9zaXplID0gbGVuKHNlbGYuc291cmNlKQorICAgICAgICBpZiBtYWdpYyBpcyBOb25lOgorICAgICAgICAgICAgbWFnaWMgPSBzZWxmLnV0aWwuTUFHSUNfTlVNQkVSCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkobWFnaWMpCisgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYuc291cmNlX210aW1lKSkKKyAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5zb3VyY2Vfc2l6ZSkpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzZWxmLnNvdXJjZSwgc2VsZi5wYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgc2VsZi5ieXRlY29kZSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHNlbGYud3JpdHRlbiA9IHt9CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggPT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKKyAgICAgICAgZWxpZiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJ5dGVjb2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisKKyAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCAhPSBzZWxmLnBhdGg6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5zb3VyY2VfbXRpbWUsICdzaXplJzogc2VsZi5zb3VyY2Vfc2l6ZX0KKworICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKKyAgICAgICAgc2VsZi53cml0dGVuW3BhdGhdID0gYnl0ZXMoZGF0YSkKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoCisKKworRnJvemVuX1NMLCBTb3VyY2VfU0wgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFNvdXJjZUxvYWRlcikKK0Zyb3plbl9TTC51dGlsID0gZnJvemVuX3V0aWwKK1NvdXJjZV9TTC51dGlsID0gc291cmNlX3V0aWwKK0Zyb3plbl9TTC5pbml0ID0gZnJvemVuX2luaXQKK1NvdXJjZV9TTC5pbml0ID0gc291cmNlX2luaXQKKworCitjbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzczoKKworICAgIGRlZiBzZXRVcChzZWxmLCAqLCBpc19wYWNrYWdlPVRydWUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5wYWNrYWdlID0gJ3BrZycKKyAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2UsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLnBhY2thZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gJ21vZCcKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2UsICcuJy5qb2luKFsnbW9kJywgJ3B5J10pKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gJy4nLmpvaW4oW3NlbGYucGFja2FnZSwgbW9kdWxlX25hbWVdKQorICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5sb2FkZXJfbW9jayhzZWxmLnBhdGgsICoqa3dhcmdzKQorCisgICAgZGVmIHZlcmlmeV9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzZWxmLnBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIHNlbGYubG9hZGVyKQorICAgICAgICB2YWx1ZXMgPSBtb2R1bGUuXy5zcGxpdCgnOjonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1sxXSwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1syXSwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzNdLCBzZWxmLnBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzRdLCByZXByKHNlbGYubG9hZGVyKSkKKworICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCk6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoc2VsZi5uYW1lKQorICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLnBhdGgKKyAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLmNhY2hlZAorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzZWxmLnBhY2thZ2UKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmLmxvYWRlcgorICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbXQorICAgICAgICBleGVjKGNvZGVfb2JqZWN0LCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisKKworY2xhc3MgU291cmNlT25seUxvYWRlclRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKKworICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIgZm9yIHNvdXJjZS1vbmx5IGxvYWRpbmcuCisKKyAgICBSZWxvYWQgdGVzdGluZyBpcyBzdWJzdW1lZCBieSB0aGUgdGVzdHMgZm9yCisgICAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCisKKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHN0cmluZy4KKyAgICAgICAgIyBJZiBhbiBPU0Vycm9yIGlzIHJhaXNlZCBieSBnZXRfZGF0YSB0aGVuIHJhaXNlIEltcG9ydEVycm9yLgorICAgICAgICBleHBlY3RlZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5zb3VyY2UuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpLCBleHBlY3RlZF9zb3VyY2UpCisgICAgICAgIGRlZiByYWlzZV9PU0Vycm9yKHBhdGgpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmxvYWRlci5nZXRfZGF0YSA9IHJhaXNlX09TRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgc2VsZi5uYW1lKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBQcm9wZXJseSBkZXRlY3Qgd2hlbiBsb2FkaW5nIGEgcGFja2FnZS4KKyAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKKyAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUgKyAnLl9faW5pdF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIGNvZGUgb2JqZWN0IGlzIGNyZWF0ZWQuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKyAgICAgICAgY29kZSA9IHNlbGYubG9hZGVyLnNvdXJjZV90b19jb2RlKHNlbGYubG9hZGVyLnNvdXJjZSwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGUpCisKKyAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAorICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCisgICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Vfc2V0dGluZ3Moc2VsZik6CisgICAgICAgICMgX19wYWNrYWdlX18gbmVlZHMgdG8gYmUgc2V0LCB3aGlsZSBfX3BhdGhfXyBpcyBzZXQgb24gaWYgdGhlIG1vZHVsZQorICAgICAgICAjIGlzIGEgcGFja2FnZS4KKyAgICAgICAgIyBUZXN0aW5nIHRoZSB2YWx1ZXMgZm9yIGEgcGFja2FnZSBhcmUgY292ZXJlZCBieSB0ZXN0X2xvYWRfbW9kdWxlLgorICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgorICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCisgICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCisgICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCisgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxUZXN0cyhTb3VyY2VPbmx5TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9Tb3VyY2VPbmx5TAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsICJzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlIikKK2NsYXNzIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcidzIHVzZSBvZiBieXRlY29kZS4KKworICAgIFNvdXJjZS1vbmx5IHRlc3RpbmcgaGFuZGxlZCBieSBTb3VyY2VPbmx5TG9hZGVyVGVzdHMuCisKKyAgICAiIiIKKworICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6CisgICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX210aW1lKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYubG9hZGVyLnNvdXJjZV9zaXplKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci53cml0dGVuW3NlbGYuY2FjaGVkXSwgYnl0ZXMoZGF0YSkpCisKKyAgICBkZWYgdGVzdF9jb2RlX3dpdGhfZXZlcnl0aGluZyhzZWxmKToKKyAgICAgICAgIyBXaGVuIGV2ZXJ5dGhpbmcgc2hvdWxkIHdvcmsuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6CisgICAgICAgICMgSWYgbm8gYnl0ZWNvZGUgZXhpc3RzIHRoZW4gbW92ZSBvbiB0byB0aGUgc291cmNlLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICMgU2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF90aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgQnl0ZWNvZGUgaXMgb25seSB1c2VkIHdoZW4gdGhlIHRpbWVzdGFtcCBtYXRjaGVzIHRoZSBzb3VyY2UgRVhBQ1RMWS4KKyAgICAgICAgZm9yIHNvdXJjZV9tdGltZSBpbiAoMCwgMik6CisgICAgICAgICAgICBhc3NlcnQgc291cmNlX210aW1lICE9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgb3JpZ2luYWwgPSBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IHNvdXJjZV9tdGltZQorICAgICAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisgICAgICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUgPSBvcmlnaW5hbAorCisgICAgZGVmIHRlc3RfY29kZV9iYWRfbWFnaWMoc2VsZik6CisgICAgICAgICMgU2tpcCBvdmVyIGJ5dGVjb2RlIHdpdGggYSBiYWQgbWFnaWMgbnVtYmVyLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgICMgSWYgYnl0ZWNvZGUgaXMgdXNlZCB0aGVuIEVPRkVycm9yIHdvdWxkIGJlIHJhaXNlZCBieSBtYXJzaGFsLgorICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZSA9IHNlbGYubG9hZGVyLmJ5dGVjb2RlWzg6XQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCwgYnl0ZWNvZGVfd3JpdHRlbj1UcnVlKQorCisgICAgZGVmIHRlc3RfZG9udF93cml0ZV9ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBub3Qgd3JpdHRlbiBpZiBzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlLgorICAgICAgICAjIENhbiBhc3N1bWUgaXQgaXMgZmFsc2UgYWxyZWFkeSB0aGFua3MgdG8gdGhlIHNraXBJZiBjbGFzcyBkZWNvcmF0b3IuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuYnl0ZWNvZGVfcGF0aCA9ICI8ZG9lcyBub3QgZXhpc3Q+IgorICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQorCisgICAgZGVmIHRlc3Rfbm9fc2V0X2RhdGEoc2VsZik6CisgICAgICAgICMgSWYgc2V0X2RhdGEgaXMgbm90IGRlZmluZWQsIG9uZSBjYW4gc3RpbGwgcmVhZCBieXRlY29kZS4KKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBvcmlnaW5hbF9zZXRfZGF0YSA9IHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEgPSBvcmlnaW5hbF9zZXRfZGF0YQorCisgICAgZGVmIHRlc3Rfc2V0X2RhdGFfcmFpc2VzX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgUmFpc2luZyBOb3RJbXBsZW1lbnRlZEVycm9yIG9yIE9TRXJyb3IgaXMgb2theSBmb3Igc2V0X2RhdGEuCisgICAgICAgIGRlZiByYWlzZV9leGNlcHRpb24oZXhjKToKKyAgICAgICAgICAgIGRlZiBjbG9zdXJlKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjCisgICAgICAgICAgICByZXR1cm4gY2xvc3VyZQorCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgc2VsZi5sb2FkZXIuc2V0X2RhdGEgPSByYWlzZV9leGNlcHRpb24oTm90SW1wbGVtZW50ZWRFcnJvcikKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKworY2xhc3MgRnJvemVuX1NMQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbG9hZGVyX21vY2sgPSBGcm96ZW5fU0wKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKworY2xhc3MgU291cmNlU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IFNvdXJjZV9TTAorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzOgorCisgICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2UoKS4iIiIKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGhhdmUgbm8gcHJvYmxlbXMgd2l0aCBVVEYtOCB0ZXh0LgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJworICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCJtb2QuZmlsZSIpCisgICAgICAgIHNvdXJjZSA9ICIjIGNvZGluZzogTGF0aW4tMVxueD0nw7wnIgorICAgICAgICBhc3NlcnQgc291cmNlLmVuY29kZSgnbGF0aW4tMScpICE9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfbmV3bGluZXMoc2VsZik6CisgICAgICAgICMgUEVQIDMwMiBzYXlzIHVuaXZlcnNhbCBuZXdsaW5lcyBzaG91bGQgYmUgdXNlZC4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBzZWxmLlNvdXJjZU9ubHlMb2FkZXJNb2NrKCdtb2QuZmlsZScpCisgICAgICAgIHNvdXJjZSA9ICJ4ID0gNDJcclxueSA9IC0xM1xyXG4iCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBleHBlY3QgPSBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyKE5vbmUsIFRydWUpLmRlY29kZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfc291cmNlKG5hbWUpLCBleHBlY3QpCisKKworY2xhc3MgRnJvemVuX1NvdXJjZU9ubHlMR2V0U291cmNlVGVzdHMoU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBTb3VyY2VPbmx5TG9hZGVyTW9jayA9IEZyb3plbl9Tb3VyY2VPbmx5TAorCitjbGFzcyBTb3VyY2VfU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hcGkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQppbmRleCBiMWE1ODk0Li5jNmMyZDQ3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weQpAQCAtMSwxNCArMSwxNyBAQAogZnJvbSAuIGltcG9ydCB1dGlsCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW1wb3J0bGliCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKK2ltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgSW1wb3J0TW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgSW1wb3J0TW9kdWxlVGVzdHM6CiAKICAgICAiIiJUZXN0IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlLiIiIgogCkBAIC0xNiw3ICsxOSw3IEBACiAgICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSB0b3AtbGV2ZWwgbW9kdWxlLgogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3RvcF9sZXZlbCcpCiAKICAgICBkZWYgdGVzdF9hYnNvbHV0ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKQEAgLTI2LDcgKzI5LDcgQEAKICAgICAgICAgbmFtZSA9ICd7MH0ubW9kJy5mb3JtYXQocGtnX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQogCiAgICAgZGVmIHRlc3Rfc2hhbGxvd19yZWxhdGl2ZV9wYWNrYWdlX2ltcG9ydChzZWxmKToKQEAgLTM4LDE3ICs0MSwxNyBAQAogICAgICAgICByZWxhdGl2ZV9uYW1lID0gJy57MH0nLmZvcm1hdChtb2R1bGVfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBhYnNvbHV0ZV9uYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShwa2dfbmFtZSkKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShyZWxhdGl2ZV9uYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShyZWxhdGl2ZV9uYW1lLCBwa2dfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgYWJzb2x1dGVfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2RlZXBfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6CiAgICAgICAgIG1vZHVsZXMgPSBbJ2EuX19pbml0X18nLCAnYS5iLl9faW5pdF9fJywgJ2EuYyddCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoKm1vZHVsZXMpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhJykKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYS5iJykKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnLi5jJywgJ2EuYicpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EnKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCcuLmMnLCAnYS5iJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ2EuYycpCiAKICAgICBkZWYgdGVzdF9hYnNvbHV0ZV9pbXBvcnRfd2l0aF9wYWNrYWdlKHNlbGYpOgpAQCAtNTksMTUgKzYyLDE1IEBACiAgICAgICAgIG5hbWUgPSAnezB9Lm1vZCcuZm9ybWF0KHBrZ19uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIG5hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUsIHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKHBrZ19uYW1lKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG5hbWUsIHBrZ19uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfaW1wb3J0X3dvX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgUmVsYXRpdmUgaW1wb3J0cyBjYW5ub3QgaGFwcGVuIHdpdGhvdXQgdGhlICdwYWNrYWdlJyBhcmd1bWVudCBiZWluZwogICAgICAgICAjIHNldC4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy5zdXBwb3J0JykKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCcuc3VwcG9ydCcpCiAKIAogICAgIGRlZiB0ZXN0X2xvYWRlZF9vbmNlKHNlbGYpOgpAQCAtNzYsNyArNzksNyBAQAogICAgICAgICAjIG1vZHVsZSBjdXJyZW50bHkgYmVpbmcgaW1wb3J0ZWQuCiAgICAgICAgIGJfbG9hZF9jb3VudCA9IDAKICAgICAgICAgZGVmIGxvYWRfYSgpOgotICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKICAgICAgICAgZGVmIGxvYWRfYigpOgogICAgICAgICAgICAgbm9ubG9jYWwgYl9sb2FkX2NvdW50CiAgICAgICAgICAgICBiX2xvYWRfY291bnQgKz0gMQpAQCAtODQsMTEgKzg3LDE3IEBACiAgICAgICAgIG1vZHVsZXMgPSBbJ2EuX19pbml0X18nLCAnYS5iJ10KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqbW9kdWxlcywgbW9kdWxlX2NvZGU9Y29kZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EuYicpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYl9sb2FkX2NvdW50LCAxKQogCitjbGFzcyBGcm96ZW5fSW1wb3J0TW9kdWxlVGVzdHMoSW1wb3J0TW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKIAotY2xhc3MgRmluZExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFNvdXJjZV9JbXBvcnRNb2R1bGVUZXN0cyhJbXBvcnRNb2R1bGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorCisKK2NsYXNzIEZpbmRMb2FkZXJUZXN0czoKIAogICAgIGNsYXNzIEZha2VNZXRhRmluZGVyOgogICAgICAgICBAc3RhdGljbWV0aG9kCkBAIC05OCwyOSArMTA3LDQzIEBACiAgICAgICAgICMgSWYgYSBtb2R1bGUgd2l0aCBfX2xvYWRlcl9fIGlzIGluIHN5cy5tb2R1bGVzLCB0aGVuIHJldHVybiBpdC4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbG9hZGVyID0gJ2EgbG9hZGVyIScKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gbG9hZGVyCiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgZm91bmQgPSBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgZm91bmQpCiAKICAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfTm9uZShzZWxmKToKICAgICAgICAgIyBJZiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fIGlzIE5vbmUsIHJhaXNlIFZhbHVlRXJyb3IuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc19sb2FkZXJfaXNfbm90X3NldChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAjIElzc3VlICMxNzA5OQorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICMgUmV0dXJuIHRoZSBsb2FkZXIgZm91bmQgb24gc3lzLm1ldGFfcGF0aC4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUpLCBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKICAgICAgICAgIyBTZWFyY2hpbmcgb24gYSBwYXRoIHNob3VsZCB3b3JrLgpAQCAtMTI5LDE0ICsxNTIsMjc1IEBACiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lLCBwYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lLCBwYXRoKSkKIAogICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CiAgICAgICAgICMgTm9uZSBpcyByZXR1cm5lZCB1cG9uIGZhaWx1cmUgdG8gZmluZCBhIGxvYWRlci4KLSAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW1wb3J0bGliLmZpbmRfbG9hZGVyKCduZXZlcmdvaW5ndG9maW5kdGhpc21vZHVsZScpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmluaXQuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisKK2NsYXNzIEZyb3plbl9GaW5kTG9hZGVyVGVzdHMoRmluZExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisKK2NsYXNzIFNvdXJjZV9GaW5kTG9hZGVyVGVzdHMoRmluZExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CiAKIAotY2xhc3MgSW52YWxpZGF0ZUNhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRmluZFNwZWNUZXN0czoKKworICAgIGNsYXNzIEZha2VNZXRhRmluZGVyOgorICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBmaW5kX3NwZWMobmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6IHJldHVybiBuYW1lLCBwYXRoLCB0YXJnZXQKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIGxvYWRlciA9ICdhIGxvYWRlciEnCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIpCisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pbml0LmZpbmRfc3BlYyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc3BlYykKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX3dpdGhvdXRfX19sb2FkZXJfXyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGxvYWRlciA9ICdhIGxvYWRlciEnCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfc3BlY19pc19Ob25lKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IE5vbmUKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5maW5kX3NwZWMobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKG5hbWUsIE5vbmUpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfc3BlY19pc19ub3Rfc2V0KHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fc3BlY19fCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfc3BlYyhuYW1lKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfc3BlYyhuYW1lKSkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3NfcGF0aChzZWxmKToKKyAgICAgICAgIyBTZWFyY2hpbmcgb24gYSBwYXRoIHNob3VsZCB3b3JrLgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICBwYXRoID0gJ3BhdGggdG8gc29tZSBwbGFjZScKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5GYWtlTWV0YUZpbmRlcl0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIHBhdGgsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmZpbmRfc3BlYyhuYW1lLCBwYXRoKSkKKworICAgIGRlZiB0ZXN0X25vdGhpbmcoc2VsZik6CisgICAgICAgICMgTm9uZSBpcyByZXR1cm5lZCB1cG9uIGZhaWx1cmUgdG8gZmluZCBhIGxvYWRlci4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5pbml0LmZpbmRfc3BlYygnbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKKworY2xhc3MgRnJvemVuX0ZpbmRTcGVjVGVzdHMoRmluZFNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworY2xhc3MgU291cmNlX0ZpbmRTcGVjVGVzdHMoRmluZFNwZWNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKKworCitjbGFzcyBSZWxvYWRUZXN0czoKKworICAgICIiIlRlc3QgbW9kdWxlIHJlbG9hZGluZyBmb3IgYnVpbHRpbiBhbmQgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgZm9yIG1vZCBpbiAoJ3Rva2VuaXplJywgJ3RpbWUnLCAnbWFyc2hhbCcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobW9kdWxlPW1vZCk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KG1vZCk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKG1vZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIGRlZiBjb2RlKCk6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICBtb2R1bGUuc3BhbSA9IDMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXSA9IG1vZHVsZQorICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3RvcF9sZXZlbCc6IGNvZGV9KQorICAgICAgICB3aXRoIG1vY2s6CisgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgYWN0dWFsID0gc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwuc3BhbSwgMykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbG9hZGVkLnNwYW0sIDMpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbWlzc2luZ19sb2FkZXIoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5DbGVhbkltcG9ydCgndHlwZXMnKToKKyAgICAgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICAgICAgbG9hZGVyID0gdHlwZXMuX19sb2FkZXJfXworICAgICAgICAgICAgZGVsIHR5cGVzLl9fbG9hZGVyX18KKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZCh0eXBlcykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzWyd0eXBlcyddLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVsb2FkZWQuX19sb2FkZXJfXy5wYXRoLCBsb2FkZXIucGF0aCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9sb2FkZXJfcmVwbGFjZWQoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC5DbGVhbkltcG9ydCgndHlwZXMnKToKKyAgICAgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICAgICAgdHlwZXMuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQodHlwZXMpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocmVsb2FkZWQuX19sb2FkZXJfXywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1sndHlwZXMnXSwgdHlwZXMpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbG9jYXRpb25fY2hhbmdlZChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgICAgICAjIFN0YXJ0IGFzIGEgcGxhaW4gbW9kdWxlLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSArICcucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2ZpbGVfXyc6IHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5zX18nOiBfX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5jcmVhdGVfZW1wdHlfZmlsZShwYXRoKQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBucy5wb3AoJ19fbG9hZGVyX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgICAgICMgQ2hhbmdlIHRvIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19idWlsdGluc19fJzogX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9uYW1lc3BhY2VfY2hhbmdlZChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ3NwYW0nKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgICAgICAjIFN0YXJ0IGFzIGEgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdC5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShiYWRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihiYWRfcGF0aCwgJ3cnKSBhcyBpbml0X2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2ZpbGUud3JpdGUoJ2VnZ3MgPSBOb25lJykKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG5zLnBvcCgnX19wYXRoX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGxvYWRlciwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFtvcy5wYXRoLmRpcm5hbWUoYmFkX3BhdGgpXSkpCisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIE5hbWVzcGFjZUxvYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyLnBhdGgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucywgZXhwZWN0ZWQpCisKKyAgICAgICAgICAgICAgICAgICAgIyBDaGFuZ2UgdG8gYSByZWd1bGFyIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0geydfX25hbWVfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2ZpbGVfXyc6IGluaXRfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nOiBjYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFtvcy5wYXRoLmRpcm5hbWUoaW5pdF9wYXRoKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2RvY19fJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fYnVpbHRpbnNfXyc6IF9fYnVpbHRpbnNfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VnZ3MnOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShiYWRfcGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQobW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMocmVsb2FkZWQpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisKK2NsYXNzIEZyb3plbl9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfUmVsb2FkVGVzdHMoUmVsb2FkVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKworCitjbGFzcyBJbnZhbGlkYXRlQ2FjaGVUZXN0czoKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jYWxsZWQoc2VsZik6CiAgICAgICAgICMgSWYgZGVmaW5lZCB0aGUgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQuCkBAIC0xNTUsNDggKzQzOSw2NSBAQAogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5fX2RlbGl0ZW1fXyhrZXkpKQogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gcGF0aF9pbnMKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLm1ldGFfcGF0aC5yZW1vdmUobWV0YV9pbnMpKQotICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWV0YV9pbnMuY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aF9pbnMuY2FsbGVkKQogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2xhY2tpbmcoc2VsZik6CiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG5vIGlzc3VlcyBpZiB0aGUgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLgogICAgICAgICBrZXkgPSAnZ29iYmxlZGVlZ29vaycKLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IGltcC5OdWxsSW1wb3J0ZXIoJ2FiYycpCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBOb25lCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpICAjIFNob3VsZG4ndCB0cmlnZ2VyIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorCitjbGFzcyBGcm96ZW5fSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gZnJvemVuX2luaXQKKworY2xhc3MgU291cmNlX0ludmFsaWRhdGVDYWNoZVRlc3RzKEludmFsaWRhdGVDYWNoZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CiAKIAogY2xhc3MgRnJvemVuSW1wb3J0bGliVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfbm9fZnJvemVuX2ltcG9ydGxpYihzZWxmKToKICAgICAgICAgIyBTaG91bGQgYmUgYWJsZSB0byBpbXBvcnQgdy9vIF9mcm96ZW5faW1wb3J0bGliIGJlaW5nIGRlZmluZWQuCi0gICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnaW1wb3J0bGliJywgYmxvY2tlZD1bJ19mcm96ZW5faW1wb3J0bGliJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShtb2R1bGUuX19sb2FkZXJfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcikpCisgICAgICAgICMgQ2FuJ3QgZG8gYW4gaXNpbnN0YW5jZSgpIGNoZWNrIHNpbmNlIHNlcGFyYXRlIGNvcGllcyBvZiBpbXBvcnRsaWIKKyAgICAgICAgIyBtYXkgaGF2ZSBiZWVuIHVzZWQgZm9yIGltcG9ydCwgc28ganVzdCBjaGVjayB0aGUgbmFtZSBpcyBub3QgZm9yIHRoZQorICAgICAgICAjIGZyb3plbiBsb2FkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc291cmNlX2luaXQuX19sb2FkZXJfXy5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb3plbkltcG9ydGVyJykKIAogCi1jbGFzcyBTdGFydHVwVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3RhcnR1cFRlc3RzOgogCiAgICAgZGVmIHRlc3RfZXZlcnlvbmVfaGFzX19fbG9hZGVyX18oc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MDk4OiBhbGwgbW9kdWxlcyBzaG91bGQgaGF2ZSBfX2xvYWRlcl9fIGRlZmluZWQuCiAgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKLSAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKLSAgICAgICAgICAgICAgICBlbGlmIGltcC5pc19mcm96ZW4obmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0bGliLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfSBsYWNrcyBhIF9fbG9hZGVyX18gYXR0cmlidXRlJy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX2xvYWRlcl9fLCBOb25lKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChJbXBvcnRNb2R1bGVUZXN0cywKLSAgICAgICAgICAgICAgICAgRmluZExvYWRlclRlc3RzLAotICAgICAgICAgICAgICAgICBJbnZhbGlkYXRlQ2FjaGVUZXN0cywKLSAgICAgICAgICAgICAgICAgRnJvemVuSW1wb3J0bGliVGVzdHMsCi0gICAgICAgICAgICAgICAgIFN0YXJ0dXBUZXN0cykKKyAgICBkZWYgdGVzdF9ldmVyeW9uZV9oYXNfX19zcGVjX18oc2VsZik6CisgICAgICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUobmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG1vZHVsZS5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQorCitjbGFzcyBGcm96ZW5fU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworY2xhc3MgU291cmNlX1N0YXJ0dXBUZXN0cyhTdGFydHVwVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKaW5kZXggYzM3M2IxMS4uZGM5N2JhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CkBAIC0xLDQgKzEsOCBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK2Zyb20gLiBpbXBvcnQgdXRpbAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX2Jvb3RzdHJhcCA9IGZyb3plbl9pbml0Ll9ib290c3RyYXAKK3NvdXJjZV9ib290c3RyYXAgPSBzb3VyY2VfaW5pdC5fYm9vdHN0cmFwCisKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDE0ICsxNyw5IEBACiBlbHNlOgogICAgIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwogCi0KLUxvY2tUeXBlID0gX2Jvb3RzdHJhcC5fTW9kdWxlTG9jawotRGVhZGxvY2tFcnJvciA9IF9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKLQotCiBpZiB0aHJlYWRpbmcgaXMgbm90IE5vbmU6Ci0gICAgY2xhc3MgTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgotICAgICAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZChsYW1iZGE6IExvY2tUeXBlKCJzb21lX2xvY2siKSkKKyAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzOgorICAgICAgICBsb2NrdHlwZSA9IGNsYXNzbWV0aG9kKGxhbWJkYSBjbHM6IGNscy5Mb2NrVHlwZSgic29tZV9sb2NrIikpCiAKICAgICAgICAgIyBfaXNfb3duZWQoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X19pc19vd25lZCA9IE5vbmUKQEAgLTM0LDEzICszMywyMSBAQAogICAgICAgICAjIF9yZWxlYXNlX3NhdmUoKSB1bnN1cHBvcnRlZAogICAgICAgICB0ZXN0X3JlbGVhc2Vfc2F2ZV91bmFjcXVpcmVkID0gTm9uZQogCisgICAgY2xhc3MgRnJvemVuX01vZHVsZUxvY2tBc1JMb2NrVGVzdHMoTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywgbG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICAgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisKKyAgICBjbGFzcyBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKwogZWxzZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIHBhc3MKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcGFzcwogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQotY2xhc3MgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC01NSw3ICs2Miw3IEBACiAKICAgICBkZWYgcnVuX2RlYWRsb2NrX2F2b2lkYW5jZV90ZXN0KHNlbGYsIGNyZWF0ZV9kZWFkbG9jayk6CiAgICAgICAgIE5MT0NLUyA9IDEwCi0gICAgICAgIGxvY2tzID0gW0xvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KKyAgICAgICAgbG9ja3MgPSBbc2VsZi5Mb2NrVHlwZShzdHIoaSkpIGZvciBpIGluIHJhbmdlKE5MT0NLUyldCiAgICAgICAgIHBhaXJzID0gWyhsb2Nrc1tpXSwgbG9ja3NbKGkrMSklTkxPQ0tTXSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgaWYgY3JlYXRlX2RlYWRsb2NrOgogICAgICAgICAgICAgTlRIUkVBRFMgPSBOTE9DS1MKQEAgLTY3LDcgKzc0LDcgQEAKICAgICAgICAgICAgICIiIlRyeSB0byBhY3F1aXJlIHRoZSBsb2NrLiBSZXR1cm4gVHJ1ZSBvbiBzdWNjZXNzLCBGYWxzZSBvbiBkZWFkbG9jay4iIiIKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBsb2NrLmFjcXVpcmUoKQotICAgICAgICAgICAgZXhjZXB0IERlYWRsb2NrRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgc2VsZi5EZWFkbG9ja0Vycm9yOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtOTksMzAgKzEwNiw1MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMuY291bnQoKFRydWUsIEZhbHNlKSksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgVHJ1ZSkpLCBsZW4ocmVzdWx0cykpCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgInRocmVhZHMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorY2xhc3MgRnJvemVuX0RlYWRsb2NrQXZvaWRhbmNlVGVzdHMoRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIExvY2tUeXBlID0gZnJvemVuX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworICAgIERlYWRsb2NrRXJyb3IgPSBmcm96ZW5fYm9vdHN0cmFwLl9EZWFkbG9ja0Vycm9yCiAKLWNsYXNzIExpZmV0aW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBzb3VyY2VfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IHNvdXJjZV9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKKworCitjbGFzcyBMaWZldGltZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbG9ja19saWZldGltZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ4eXp6eSIKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCi0gICAgICAgIGxvY2sgPSBfYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgbG9jayA9IHNlbGYuYm9vdHN0cmFwLl9nZXRfbW9kdWxlX2xvY2sobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQogICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGxvY2spCiAgICAgICAgIGRlbCBsb2NrCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCiAKICAgICBkZWYgdGVzdF9hbGxfbG9ja3Moc2VsZik6CiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKF9ib290c3RyYXAuX21vZHVsZV9sb2NrcyksIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKworY2xhc3MgRnJvemVuX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKworY2xhc3MgU291cmNlX0xpZmV0aW1lVGVzdHMoTGlmZXRpbWVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKIAogCiBAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTGlmZXRpbWVUZXN0cykKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTW9kdWxlTG9ja0FzUkxvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5fTGlmZXRpbWVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VfTGlmZXRpbWVUZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9zcGVjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZWYzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKQEAgLTAsMCArMSw5NjggQEAKK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAorc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCisKK2ltcG9ydCBvcy5wYXRoCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgQ2xlYW5JbXBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworCisKKworY2xhc3MgVGVzdExvYWRlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoPU5vbmUsIGlzX3BhY2thZ2U9Tm9uZSk6CisjICAgICAgICBpZiBwYXRoOgorIyAgICAgICAgICAgIGlmIGlzX3BhY2thZ2U6CisjICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRoLmVuZHN3aXRoKCcucHknKToKKyMgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgJ19faW5pdF9fLnB5JykKKyMgICAgICAgICAgICBlbGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyMgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IHBhdGguZW5kc3dpdGgoJ19faW5pdF9fLnB5JykKKworICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYucGFja2FnZSA9IGlzX3BhY2thZ2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VGVzdExvYWRlciBvYmplY3Q+JworCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICdnZXRfZmlsZW5hbWUnIGFuZCBzZWxmLnBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVuYW1lCisgICAgICAgIGlmIG5hbWUgPT0gJ2lzX3BhY2thZ2UnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lzX3BhY2thZ2UKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKworICAgIGRlZiBfZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYgX2lzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhY2thZ2UKKworCitjbGFzcyBOZXdMb2FkZXIoVGVzdExvYWRlcik6CisKKyAgICBFR0dTID0gMQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIG1vZHVsZS5lZ2dzID0gc2VsZi5FR0dTCisKKworY2xhc3MgTGVnYWN5TG9hZGVyKFRlc3RMb2FkZXIpOgorCisgICAgSEFNID0gLTEKKworICAgIEBmcm96ZW5fdXRpbC5tb2R1bGVfZm9yX2xvYWRlcgorICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBtb2R1bGUuaGFtID0gc2VsZi5IQU0KKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisKK2NsYXNzIE1vZHVsZVNwZWNUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5sb2Nfc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9ub19sb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X2lzX3BhY2thZ2VfZmFsc2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfcGFja2FnZV90cnVlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zcGVjID09IG90aGVyKQorCisgICAgZGVmIHRlc3RfZXF1YWxpdHlfbG9jYXRpb24oc2VsZik6CisgICAgICAgIG90aGVyID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKG5hbWU9c2VsZi5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc19sb2NhdGlvbj1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9c2VsZi5jYWNoZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT0naGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X2luZXF1YWxpdHlfaW5jb21wbGV0ZShzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5zcGVjLCBvdGhlcikKKworICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtLmVnZ3MnLCBzZWxmLmxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMucGFyZW50LCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKCdzcGFtLmVnZ3MnLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5wYXJlbnQsICdzcGFtLmVnZ3MnKQorCisgICAgIyBjYWNoZWQKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zZXQoc2VsZik6CisgICAgICAgIGJlZm9yZSA9IHNlbGYuc3BlYy5jYWNoZWQKKyAgICAgICAgc2VsZi5zcGVjLmNhY2hlZCA9ICd0aGVyZScKKyAgICAgICAgYWZ0ZXIgPSBzZWxmLnNwZWMuY2FjaGVkCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhiZWZvcmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWZ0ZXIsICd0aGVyZScpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfbm9fb3JpZ2luKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfd2l0aF9vcmlnaW5fbm90X2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvY19zcGVjLmNhY2hlZCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlX3Vua25vd25fc3VmZml4KHNlbGYpOgorICAgICAgICBzZWxmLmxvY19zcGVjLm9yaWdpbiA9ICdzcGFtLnNwYW1zcGFtc3BhbScKKworICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9jX3NwZWMuY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZV9taXNzaW5nX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgb3JpZ2luYWwgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNhY2hlZCA9IHNlbGYubG9jX3NwZWMuY2FjaGVkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnID0gb3JpZ2luYWwKKworICAgICAgICBzZWxmLmFzc2VydElzKGNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VsZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmxvY19zcGVjLm9yaWdpbiA9ICdzcGFtLnB5YycKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCAnc3BhbS5weWMnKQorCisKK2NsYXNzIEZyb3plbl9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCisKK2NsYXNzIFNvdXJjZV9Nb2R1bGVTcGVjVGVzdHMoTW9kdWxlU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorCisKK2NsYXNzIE1vZHVsZVNwZWNNZXRob2RzVGVzdHM6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLnBhdGggPSAnc3BhbS5weScKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLnNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYubG9jX3NwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9jX3NwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKworICAgICMgaW5pdF9tb2R1bGVfYXR0cnMKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWydzcGFtJywgJ2hhbSddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoc2VsZi5uYW1lKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHNwZWMub3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzcGVjLm9yaWdpbikpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfbmFtZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCdlZ2dzJykKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfZGlmZmVyZW50X3NwZWMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ2VnZ3MnLCBvYmplY3QoKSkKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2FscmVhZHlfc2V0KHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2hhbS5lZ2dzJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBvYmplY3QoKQorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnaGFtJworICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJ2VnZ3MnXQorICAgICAgICBtb2R1bGUuX19maWxlX18gPSAnaGFtL2VnZ3MvX19pbml0X18ucHknCisgICAgICAgIG1vZHVsZS5fX2NhY2hlZF9fID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZHVsZS5fX2ZpbGVfXykKKyAgICAgICAgb3JpZ2luYWwgPSB2YXJzKG1vZHVsZSkuY29weSgpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJyddCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgb3JpZ2luYWxbJ19fbG9hZGVyX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIG9yaWdpbmFsWydfX3BhY2thZ2VfXyddKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3BhdGhfXywgb3JpZ2luYWxbJ19fcGF0aF9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBvcmlnaW5hbFsnX19maWxlX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywgb3JpZ2luYWxbJ19fY2FjaGVkX18nXSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2ltbXV0YWJsZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gb2JqZWN0KCkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19uYW1lX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3NwZWNfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2NhY2hlZF9fJykpCisKKyAgICAjIGNyZWF0ZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGUoc2VsZik6CisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9sb2FkZXIoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKSgpCisgICAgICAgIGNsYXNzIENyZWF0aW5nTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQsIG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcl9ub3RfaGFuZGxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gQ3JlYXRpbmdMb2FkZXIoKQorICAgICAgICBjcmVhdGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuY3JlYXRlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgIyBleGVjKCkKKworICAgIGRlZiB0ZXN0X2V4ZWMoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICBtb2R1bGUgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorICAgICAgICBzeXMubW9kdWxlc1tzZWxmLm5hbWVdID0gbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdlZ2dzJykpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmVnZ3MsIDEpCisKKyAgICAjIGxvYWQoKQorCisgICAgZGVmIHRlc3RfbG9hZChzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZCwgaW5zdGFsbGVkKQorCisgICAgZGVmIHRlc3RfbG9hZF9yZXBsYWNlZChzZWxmKToKKyAgICAgICAgcmVwbGFjZW1lbnQgPSBvYmplY3QoKQorICAgICAgICBjbGFzcyBSZXBsYWNpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dID0gcmVwbGFjZW1lbnQKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IFJlcGxhY2luZ0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZCwgcmVwbGFjZW1lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCByZXBsYWNlbWVudCkKKworICAgIGRlZiB0ZXN0X2xvYWRfZmFpbGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWlsZWRMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IEZhaWxlZExvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzZWxmLnNwZWMubmFtZSwgc3lzLm1vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9sb2FkX2ZhaWxlZF9yZW1vdmVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWlsZWRMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuc3BlYy5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X2xvYWRfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIGV4aXN0aW5nID0gdHlwZShzeXMpKCdoYW0nKQorICAgICAgICBleGlzdGluZy5jb3VudCA9IDUKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubmFtZV0gPSBleGlzdGluZworICAgICAgICAgICAgYXNzZXJ0IHNlbGYuc3BlYy5uYW1lID09IHNlbGYubmFtZQorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZWdncywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ2hhbScpKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3koc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmhhbSwgLTEpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5X2F0dHJpYnV0ZXNfaW1tdXRhYmxlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBvYmplY3QoKQorICAgICAgICBjbGFzcyBJbW11dGFibGVMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBJbW11dGFibGVMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXSwgbW9kdWxlKQorCisgICAgIyByZWxvYWQoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCBsb2FkZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbW9kaWZpZWQoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLmVnZ3MgPSAyCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9leHRyYV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5hdmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvYWRlZC5hdmFpbGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9pbml0X21vZHVsZV9hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuX19uYW1lX18gPSAnaGFtJworICAgICAgICAgICAgZGVsIGxvYWRlZC5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fcGFja2FnZV9fCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fc3BlY19fCisgICAgICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbGVnYWN5KHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5oYW0sIC0xKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCBsb2FkZWQpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVNwZWNNZXRob2RzVGVzdHMoTW9kdWxlU3BlY01ldGhvZHNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKKworY2xhc3MgU291cmNlX01vZHVsZVNwZWNNZXRob2RzVGVzdHMoTW9kdWxlU3BlY01ldGhvZHNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgTW9kdWxlUmVwclRlc3RzOgorCisgICAgIyBYWFggQWRkIG1vcmUgdGVzdHMgZm9yIHJlcHIobW9kdWxlKSBvbmNlIE1vZHVsZVNwZWMuX21vZHVsZV9yZXByKCkKKyAgICAjIGlzIGluIHBsYWNlPworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm1vZHVsZSA9IHR5cGUob3MpKCdzcGFtJykKKyAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnc3BhbScsIFRlc3RMb2FkZXIoKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX2xvYWRlcl9fX21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxkZWxpY2lvdXMge30+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBzZWxmLm1vZHVsZS5fX2xvYWRlcl9fID0gTG9hZGVyKCkKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8ZGVsaWNpb3VzIHNwYW0+JykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX2xvYWRlcl9fX21vZHVsZV9yZXByX2JhZChzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnaW4gYSBob2xlLCBpbiB0aGUgZ3JvdW5kJworICAgICAgICBzZWxmLnNwZWMub3JpZ2luID0gb3JpZ2luCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9ICh7fSk+Jy5mb3JtYXQoJ3NwYW0nLCBvcmlnaW4pKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBsb2NhdGlvbiA9ICdpbl9hX2dhbGF4eV9mYXJfZmFyX2F3YXkucHknCisgICAgICAgIHNlbGYuc3BlYy5vcmlnaW4gPSBsb2NhdGlvbgorICAgICAgICBzZWxmLnNwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQoJ3NwYW0nLCBsb2NhdGlvbikpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbm9fb3JpZ2luKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbm9fb3JpZ2luX25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9ub19uYW1lKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5tb2R1bGUuX19uYW1lX18KKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQoJz8nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV93aXRoX2ZpbGUoc2VsZik6CisgICAgICAgIGZpbGVuYW1lID0gJ2UvaS9lL2kvby9zcGFtLnB5JworICAgICAgICBzZWxmLm1vZHVsZS5fX2ZpbGVfXyA9IGZpbGVuYW1lCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KCdzcGFtJywgZmlsZW5hbWUpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9ub19maWxlX25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQoJ3NwYW0nKSkKKworCitjbGFzcyBGcm96ZW5fTW9kdWxlUmVwclRlc3RzKE1vZHVsZVJlcHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKKworY2xhc3MgU291cmNlX01vZHVsZVJlcHJUZXN0cyhNb2R1bGVSZXByVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBzb3VyY2VfYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIEZhY3RvcnlUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuZmlsZWxvYWRlciA9IFRlc3RMb2FkZXIoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnBrZ2xvYWRlciA9IFRlc3RMb2FkZXIoc2VsZi5wYXRoLCBUcnVlKQorCisgICAgIyBzcGVjX2Zyb21fbG9hZGVyKCkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfZGVmYXVsdF93aXRoX2JhZF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX29yaWdpbihzZWxmKToKKyAgICAgICAgb3JpZ2luID0gJ3NvbWV3aGVyZSBvdmVyIHRoZSByYWluYm93JworICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1vcmlnaW4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIG9yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX2ZhbHNlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV90cnVlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfb3JpZ2luX2FuZF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnd2hlcmUgdGhlIHN0cmVldHMgaGF2ZSBubyBuYW1lJworICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1vcmlnaW4sIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgb3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3dpdGhfbG9hZGVyX2ZhbHNlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKGlzX3BhY2thZ2U9RmFsc2UpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV93aXRoX2xvYWRlcl90cnVlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKGlzX3BhY2thZ2U9VHJ1ZSkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfZGVmYXVsdF93aXRoX2ZpbGVfbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV9mYWxzZV93aXRoX2ZpbGVsb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV90cnVlX3dpdGhfZmlsZWxvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICAjIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKCkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5IGlzIHNvdXJjZV9tYWNoaW5lcnk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnbm90IHN1cmUgd2h5IHRoaXMgaXMgYnJlYWtpbmcuLi4nKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzcGVjLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLnBhdGgsIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0X3dpdGhvdXRfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHRfYmFkX3N1ZmZpeChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsICdzcGFtLmVnZ3MnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uX25vX2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnPHVua25vd24+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb25fYmFkX2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sICc8dW5rbm93bj4nKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfbm9uZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2VtcHR5KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX25vdF9lbXB0eShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bJ2VnZ3MnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJ2VnZ3MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLnBrZ2xvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLnBrZ2xvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfbm90X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9ub19pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X2JhZF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworCitjbGFzcyBGcm96ZW5fRmFjdG9yeVRlc3RzKEZhY3RvcnlUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworCitjbGFzcyBTb3VyY2VfRmFjdG9yeVRlc3RzKEZhY3RvcnlUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQppbmRleCBlZmM4OTc3Li42MDRlNDRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CkBAIC0xLDIzICsxLDY0IEBACiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAotaW1wb3J0IGltcAorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBNb2R1bGVGb3JMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzOgorCisgICAgc291cmNlID0gInN0cmluZyA9J8O8JyIKKworICAgIGRlZiB0ZXN0X3V0OF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLnNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLCBzZWxmLnNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc291cmNlID0gJyMgY29kaW5nPWxhdGluLTFcbicgKyBzZWxmLnNvdXJjZQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgYXNzZXJ0IHNvdXJjZV9ieXRlcyAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwgc291cmNlKQorCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSAnXHJcbicuam9pbihbc2VsZi5zb3VyY2UsIHNlbGYuc291cmNlXSkKKyAgICAgICAgc291cmNlX2J5dGVzID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJy5qb2luKFtzZWxmLnNvdXJjZSwgc2VsZi5zb3VyY2VdKSkKKworRnJvemVuX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMsIFNvdXJjZV9EZWNvZGVTb3VyY2VCeXRlc1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKKworCitjbGFzcyBNb2R1bGVGb3JMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4iIiIKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtb2R1bGVfZm9yX2xvYWRlcihjbHMsIGZ1bmMpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gY2xzLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoZnVuYykKKworICAgIGRlZiB0ZXN0X3dhcm5pbmcoc2VsZik6CisgICAgICAgICMgU2hvdWxkIHJhaXNlIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyB3aGVuIHVzZWQuCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZXJyb3InLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBmdW5jID0gc2VsZi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGxhbWJkYSB4OiB4KQorCiAgICAgZGVmIHJldHVybl9tb2R1bGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZ4biA9IHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHNlbGYsIG1vZHVsZTogbW9kdWxlKQorICAgICAgICBmeG4gPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKGxhbWJkYSBzZWxmLCBtb2R1bGU6IG1vZHVsZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBuYW1lKQogCiAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihzZWxmLCBuYW1lKToKICAgICAgICAgZGVmIHRvX3dyYXAoc2VsZiwgbW9kdWxlKToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIGZ4biA9IHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIodG9fd3JhcCkKKyAgICAgICAgZnhuID0gc2VsZi5tb2R1bGVfZm9yX2xvYWRlcih0b193cmFwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmeG4oc2VsZiwgbmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzUsMTIgKzc2LDIzIEBACiAKICAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgbW9kdWxlIGlzIHJldXNlZCBpZiBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLgorICAgICAgICBjbGFzcyBGYWtlTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdhLmIuYycpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2EuYi5jJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSA0MgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSA0MgogICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IHNlbGYucmV0dXJuX21vZHVsZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gRmFrZUxvYWRlcigpCisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmV0dXJuZWRfbW9kdWxlLCBzeXMubW9kdWxlc1tuYW1lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfbmV3X21vZHVsZV9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMgaWYgYWRkZWQgYnV0IGFuCkBAIC01Myw3ICsxMDUsNyBAQAogICAgIGRlZiB0ZXN0X3JlbG9hZF9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIGZhaWx1cmUgb24gcmVsb2FkIGxlYXZlcyB0aGUgbW9kdWxlIGluLXBsYWNlLgogICAgICAgICBuYW1lID0gJ2EuYi5jJwotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgc2VsZi5yYWlzZV9leGNlcHRpb24obmFtZSkKQEAgLTYxLDcgKzExMyw3IEBACiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JfYXR0cnMoc2VsZik6CiAgICAgICAgIGRlZiBmeG4oc2VsZiwgbW9kdWxlKTogcGFzcwotICAgICAgICB3cmFwcGVkID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmeG4pCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKQEAgLTg3LDcgKzEzOSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fcGtnID0gaXNfcGFja2FnZQogICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BrZwotICAgICAgICAgICAgQHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyCiAgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAKQEAgLTEwNyw4ICsxNTksMTEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCitGcm96ZW5fTW9kdWxlRm9yTG9hZGVyVGVzdHMsIFNvdXJjZV9Nb2R1bGVGb3JMb2FkZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCi1jbGFzcyBTZXRQYWNrYWdlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRQYWNrYWdlVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2UuIiIiCiAKQEAgLTExNiw3ICsxNzEsNyBAQAogICAgICAgICAiIiJWZXJpZnkgdGhlIG1vZHVsZSBoYXMgdGhlIGV4cGVjdGVkIHZhbHVlIGZvciBfX3BhY2thZ2VfXyBhZnRlcgogICAgICAgICBwYXNzaW5nIHRocm91Z2ggc2V0X3BhY2thZ2UuIiIiCiAgICAgICAgIGZ4biA9IGxhbWJkYTogbW9kdWxlCi0gICAgICAgIHdyYXBwZWQgPSB1dGlsLnNldF9wYWNrYWdlKGZ4bikKKyAgICAgICAgd3JhcHBlZCA9IHNlbGYudXRpbC5zZXRfcGFja2FnZShmeG4pCiAgICAgICAgIHdyYXBwZWQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdCwgbW9kdWxlLl9fcGFja2FnZV9fKQpAQCAtMTI0LDI2ICsxNzksMjYgQEAKICAgICBkZWYgdGVzdF90b3BfbGV2ZWwoc2VsZik6CiAgICAgICAgICMgX19wYWNrYWdlX18gc2hvdWxkIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIGEgdG9wLWxldmVsIG1vZHVsZS4KICAgICAgICAgIyBJbXBsaWNpdGx5IHRlc3RzIHdoZW4gcGFja2FnZSBpcyBzZXQgdG8gTm9uZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZScpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZScpCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAnJykKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBzZXR0aW5nIF9fcGFja2FnZV9fIGZvciBhIHBhY2thZ2UuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdwa2cnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwa2cnKQogICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJzxwYXRoPiddCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3N1Ym1vZHVsZShzZWxmKToKICAgICAgICAgIyBUZXN0IF9fcGFja2FnZV9fIGZvciBhIG1vZHVsZSBpbiBhIHBhY2thZ2UuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdwa2cubW9kJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgncGtnLm1vZCcpCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3NldHRpbmdfaWZfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBfX3BhY2thZ2VfXyBzaG91bGQgYmUgc2V0IGlmIGl0IGlzIG1pc3NpbmcuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2QnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2QnKQogICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJyk6CiAgICAgICAgICAgICBkZWxhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAnJykKQEAgLTE1MSw1OCArMjA2LDIzMCBAQAogICAgIGRlZiB0ZXN0X2xlYXZpbmdfYWxvbmUoc2VsZik6CiAgICAgICAgICMgSWYgX19wYWNrYWdlX18gaXMgc2V0IGFuZCBub3QgTm9uZSB0aGVuIGxlYXZlIGl0IGFsb25lLgogICAgICAgICBmb3IgdmFsdWUgaW4gKFRydWUsIEZhbHNlKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2QnKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kJykKICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHZhbHVlCiAgICAgICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsIHZhbHVlKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9yX2F0dHJzKHNlbGYpOgogICAgICAgICBkZWYgZnhuKG1vZHVsZSk6IHBhc3MKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3cmFwcGVkID0gc2VsZi51dGlsLnNldF9wYWNrYWdlKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKK0Zyb3plbl9TZXRQYWNrYWdlVGVzdHMsIFNvdXJjZV9TZXRQYWNrYWdlVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBTZXRQYWNrYWdlVGVzdHMsIHV0aWw9W2Zyb3plbl91dGlsLCBzb3VyY2VfdXRpbF0pCiAKLWNsYXNzIFJlc29sdmVOYW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRMb2FkZXJUZXN0czoKKworICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIoKS4iIiIKKworICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKyAgICBkZWYgdGVzdF9ub19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHNlbGYuRHVtbXlMb2FkZXIoKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbG9hZGVyLmxvYWRfbW9kdWxlKCdibGFoJykuX19sb2FkZXJfXykKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9pc19Ob25lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3Rfbm90X3Jlc2V0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18gPSA0MgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCitjbGFzcyBGcm96ZW5fU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQGZyb3plbl91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworY2xhc3MgU291cmNlX1NldExvYWRlclRlc3RzKFNldExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEBzb3VyY2VfdXRpbC5zZXRfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlCisKKworY2xhc3MgUmVzb2x2ZU5hbWVUZXN0czoKIAogICAgICIiIlRlc3RzIGltcG9ydGxpYi51dGlsLnJlc29sdmVfbmFtZSgpLiIiIgogCiAgICAgZGVmIHRlc3RfYWJzb2x1dGUoc2VsZik6CiAgICAgICAgICMgYmFjb24KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCB1dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQogCiAgICAgZGVmIHRlc3RfYWJvc2x1dGVfd2l0aGluX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgYmFjb24gaW4gc3BhbQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnYmFjb24nLCAnc3BhbScpKQogCiAgICAgZGVmIHRlc3Rfbm9fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gJycKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnJykKKyAgICAgICAgICAgIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQogCiAgICAgZGVmIHRlc3RfaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuYmFjb24gaW4gc3BhbQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmVnZ3MuYmFjb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3Rfb3RoZXJfcGFja2FnZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0uYmFjb24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnc3BhbS5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbS5lZ2dzJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2VzY2FwZShzZWxmKToKICAgICAgICAgIyAuLmJhY29uIGluIHNwYW0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtJykKKworRnJvemVuX1Jlc29sdmVOYW1lVGVzdHMsIFNvdXJjZV9SZXNvbHZlTmFtZVRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cywKKyAgICAgICAgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCi0gICAgICAgICAgICBNb2R1bGVGb3JMb2FkZXJUZXN0cywKLSAgICAgICAgICAgIFNldFBhY2thZ2VUZXN0cywKLSAgICAgICAgICAgIFJlc29sdmVOYW1lVGVzdHMKLSAgICAgICAgKQorY2xhc3MgTWFnaWNOdW1iZXJUZXN0czoKKworICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgNCBieXRlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi51dGlsLk1BR0lDX05VTUJFUiksIDQpCisKKyAgICBkZWYgdGVzdF9pbmNvcnBvcmF0ZXNfcm4oc2VsZik6CisgICAgICAgICMgVGhlIG1hZ2ljIG51bWJlciB1c2VzIFxyXG4gdG8gY29tZSBvdXQgd3Jvbmcgd2hlbiBzcGxpdHRpbmcgb24gbGluZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnV0aWwuTUFHSUNfTlVNQkVSLmVuZHN3aXRoKGInXHJcbicpKQorCitGcm96ZW5fTWFnaWNOdW1iZXJUZXN0cywgU291cmNlX01hZ2ljTnVtYmVyVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBNYWdpY051bWJlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQorCisKK2NsYXNzIFBFUDMxNDdUZXN0czoKKworICAgICIiIlRlc3RzIG9mIFBFUCAzMTQ3LXJlbGF0ZWQgZnVuY3Rpb25zOiBjYWNoZV9mcm9tX3NvdXJjZSBhbmQgc291cmNlX2Zyb21fY2FjaGUuIiIiCisKKyAgICB0YWcgPSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIG5vdCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIG5vdCBiZSBOb25lJykKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHljIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBUcnVlKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfbm9fY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICAjIE5vIGNhY2hlIHRhZyBtZWFucyBOb3RJbXBsZW1lbnRlZEVycm9yLgorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cy5pbXBsZW1lbnRhdGlvbiwgJ2NhY2hlX3RhZycsIE5vbmUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ3doYXRldmVyLnB5JykKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX25vX2RvdChzZWxmKToKKyAgICAgICAgIyBEaXJlY3Rvcnkgd2l0aCBhIGRvdCwgZmlsZW5hbWUgd2l0aG91dCBkb3QuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2Zvby5iYXInLCAnZmlsZScpCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignZm9vLmJhcicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZXt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX29wdGltaXplZChzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHlvIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHlvJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBGYWxzZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX2N3ZChzZWxmKToKKyAgICAgICAgcGF0aCA9ICdmb28ucHknCisgICAgICAgIGV4cGVjdCA9IG9zLnBhdGguam9pbignX19weWNhY2hlX18nLCAnZm9vLnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX292ZXJyaWRlKHNlbGYpOgorICAgICAgICAjIFdoZW4gZGVidWdfb3ZlcnJpZGUgaXMgbm90IE5vbmUsIGl0IGNhbiBiZSBhbnkgdHJ1ZS1pc2ggb3IgZmFsc2UtaXNoCisgICAgICAgICMgdmFsdWUuCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6LnB5JykKKyAgICAgICAgcGFydGlhbF9leHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmF6Lnt9LnB5Jy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbXSksIHBhcnRpYWxfZXhwZWN0ICsgJ28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBbMTddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsX2V4cGVjdCArICdjJykKKyAgICAgICAgIyBIb3dldmVyIGlmIHRoZSBib29sLWlzaG5lc3MgY2FuJ3QgYmUgZGV0ZXJtaW5lZCwgdGhlIGV4Y2VwdGlvbgorICAgICAgICAjIHByb3BhZ2F0ZXMuCisgICAgICAgIGNsYXNzIEJlYXJpc2g6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6IHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJy9mb28vYmFyL2Jhei5weScsIEJlYXJpc2goKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLnNlcCA9PSAnXFwnIGFuZCBvcy5hbHRzZXAgPT0gJy8nLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZXJlIG9zLmFsdHNlcCBpcyBkZWZpbmVkJykKKyAgICBkZWYgdGVzdF9zZXBfYWx0c2VwX2FuZF9zZXBfY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgV2luZG93cyBwYXRoIGFuZCBQRVAgMzE0NyB3aGVyZSBzZXAgaXMgcmlnaHQgb2YgYWx0c2VwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCdcXGZvb1xcYmFyXFxiYXovcXV4LnB5JywgVHJ1ZSksCisgICAgICAgICAgICAnXFxmb29cXGJhclxcYmF6XFxfX3B5Y2FjaGVfX1xccXV4Lnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgbm90IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgdG8gbm90IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTm9uZScpCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGUoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSBQRVAgMzE0NyBkZWZpbmVkIC5weWMgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvCisgICAgICAgICMgaXRzIHNvdXJjZS4gIFRoaXMgdGVzdHMgdGhlIGdvb2QgcGF0aC4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1eC5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19jYWNoZV90YWcoc2VsZik6CisgICAgICAgICMgSWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lLCByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdibGFoJywgJ19fcHljYWNoZV9fJywgJ3doYXRldmVyLnB5YycpCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIoc3lzLmltcGxlbWVudGF0aW9uLCAnY2FjaGVfdGFnJywgTm9uZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfYmFkX3BhdGgoc2VsZik6CisgICAgICAgICMgV2hlbiB0aGUgcGF0aCB0byBhIHB5YyBmaWxlIGlzIG5vdCBpbiBQRVAgMzE0NyBmb3JtYXQsIGEgVmFsdWVFcnJvcgorICAgICAgICAjIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICcvZm9vL2Jhci9iYXpxdXgucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX3NsYXNoKHNlbGYpOgorICAgICAgICAjIE5vIHNsYXNoZXMgYXQgYWxsIGluIHBhdGggLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwgJ2Zvby5jcHl0aG9uLTMyLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV90b29fZmV3X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIGZldyBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICdfX3B5Y2FjaGVfXy9mb28ucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19tYW55X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIG1hbnkgZG90cyBpbiBmaW5hbCBwYXRoIGNvbXBvbmVudCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJ19fcHljYWNoZV9fL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fX3B5Y2FjaGVfXyhzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIHByb2JsZW0gd2l0aCB0aGUgcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJy9mb28vYmFyL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCitGcm96ZW5fUEVQMzE0N1Rlc3RzLCBTb3VyY2VfUEVQMzE0N1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUEVQMzE0N1Rlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CmluZGV4IGVmMzJmN2QuLmEwZGVlNmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSw5ICsxLDMxIEBACiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCi1pbXBvcnQgaW1wCitmcm9tIGltcG9ydGxpYiBpbXBvcnQgdXRpbAogaW1wb3J0IG9zLnBhdGgKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKKworCitkZWYgaW1wb3J0X2ltcG9ydGxpYihtb2R1bGVfbmFtZSk6CisgICAgIiIiSW1wb3J0IGEgbW9kdWxlIGZyb20gaW1wb3J0bGliIGJvdGggdy8gYW5kIHcvbyBfZnJvemVuX2ltcG9ydGxpYi4iIiIKKyAgICBmcmVzaCA9ICgnaW1wb3J0bGliJywpIGlmICcuJyBpbiBtb2R1bGVfbmFtZSBlbHNlICgpCisgICAgZnJvemVuID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgIHNvdXJjZSA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZShtb2R1bGVfbmFtZSwgZnJlc2g9ZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrZWQ9KCdfZnJvemVuX2ltcG9ydGxpYicsKSkKKyAgICByZXR1cm4gZnJvemVuLCBzb3VyY2UKKworCitkZWYgdGVzdF9ib3RoKHRlc3RfY2xhc3MsICoqa3dhcmdzKToKKyAgICBmcm96ZW5fdGVzdHMgPSB0eXBlcy5uZXdfY2xhc3MoJ0Zyb3plbl8nK3Rlc3RfY2xhc3MuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisgICAgc291cmNlX3Rlc3RzID0gdHlwZXMubmV3X2NsYXNzKCdTb3VyY2VfJyt0ZXN0X2NsYXNzLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpKQorICAgIGZyb3plbl90ZXN0cy5fX21vZHVsZV9fID0gc291cmNlX3Rlc3RzLl9fbW9kdWxlX18gPSB0ZXN0X2NsYXNzLl9fbW9kdWxlX18KKyAgICBmb3IgYXR0ciwgKGZyb3plbl92YWx1ZSwgc291cmNlX3ZhbHVlKSBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgc2V0YXR0cihmcm96ZW5fdGVzdHMsIGF0dHIsIGZyb3plbl92YWx1ZSkKKyAgICAgICAgc2V0YXR0cihzb3VyY2VfdGVzdHMsIGF0dHIsIHNvdXJjZV92YWx1ZSkKKyAgICByZXR1cm4gZnJvemVuX3Rlc3RzLCBzb3VyY2VfdGVzdHMKIAogCiBDQVNFX0lOU0VOU0lUSVZFX0ZTID0gVHJ1ZQpAQCAtODAsOSArMTAyLDkgQEAKICAgICAgICAgICAgIHNldGF0dHIoc3lzLCBhdHRyLCB2YWx1ZSkKIAogCi1jbGFzcyBtb2NrX21vZHVsZXM6CitjbGFzcyBfSW1wb3J0ZXJNb2NrOgogCi0gICAgIiIiQSBtb2NrIGltcG9ydGVyL2xvYWRlci4iIiIKKyAgICAiIiJCYXNlIGNsYXNzIHRvIGhlbHAgd2l0aCBjcmVhdGluZyBpbXBvcnRlciBtb2Nrcy4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbmFtZXMsIG1vZHVsZV9jb2RlPXt9KToKICAgICAgICAgc2VsZi5tb2R1bGVzID0ge30KQEAgLTk4LDcgKzEyMCw3IEBACiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IG5hbWUucnNwbGl0KCcuJywgMSlbMF0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFja2FnZSA9IGltcG9ydF9uYW1lCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShpbXBvcnRfbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoaW1wb3J0X25hbWUpCiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKICAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICc8bW9jayBfX2ZpbGVfXz4nCiAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBwYWNrYWdlCkBAIC0xMTIsNiArMTM0LDE5IEBACiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIG5hbWUpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW25hbWVdCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl91bmNhY2hlID0gdW5jYWNoZSgqc2VsZi5tb2R1bGVzLmtleXMoKSkKKyAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2VudGVyX18oKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CisgICAgICAgIHNlbGYuX3VuY2FjaGUuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKworCitjbGFzcyBtb2NrX21vZHVsZXMoX0ltcG9ydGVyTW9jayk6CisKKyAgICAiIiJJbXBvcnRlciBtb2NrIHVzaW5nIFBFUCAzMDIgQVBJcy4iIiIKKwogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHNlbGYubW9kdWxlczoKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC0xMzEsMTAgKzE2NiwyOCBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KIAotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX3VuY2FjaGUgPSB1bmNhY2hlKCpzZWxmLm1vZHVsZXMua2V5cygpKQotICAgICAgICBzZWxmLl91bmNhY2hlLl9fZW50ZXJfXygpCi0gICAgICAgIHJldHVybiBzZWxmCitjbGFzcyBtb2NrX3NwZWMoX0ltcG9ydGVyTW9jayk6CiAKLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Y19pbmZvKToKLSAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorICAgICIiIkltcG9ydGVyIG1vY2sgdXNpbmcgUEVQIDQ1MSBBUElzLiIiIgorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCBwYXJlbnQ9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaXNfcGFja2FnZSA9IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKQorICAgICAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbigKKyAgICAgICAgICAgICAgICBmdWxsbmFtZSwgbW9kdWxlLl9fZmlsZV9fLCBsb2FkZXI9c2VsZiwKKyAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1nZXRhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJywgTm9uZSkpCisgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgaWYgc3BlYy5uYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVzW3NwZWMubmFtZV0KKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm1vZHVsZV9jb2RlW21vZHVsZS5fX3NwZWNfXy5uYW1lXSgpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQppbmRleCA1Y2JlYzliLi4zNjVmNTkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CkBAIC04LDEwICs4LDE3IEBACiBpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGltcG9ydGxpYgogZnJvbSBvcy5wYXRoIGltcG9ydCBub3JtY2FzZQordHJ5OgorICAgIGZyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBUaHJlYWRQb29sRXhlY3V0b3IgPSBOb25lCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRGlyc09uU3lzUGF0aAotCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGZyb20gdGVzdCBpbXBvcnQgaW5zcGVjdF9mb2RkZXIgYXMgbW9kCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyMiBhcyBtb2QyCiAKQEAgLTEyMCw3ICsxMjcsNiBAQAogICAgIGRlZiB0ZXN0X2dldF9zbG90X21lbWJlcnMoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgiYSIsICJiIikKLQogICAgICAgICB4ID0gQygpCiAgICAgICAgIHguYSA9IDQyCiAgICAgICAgIG1lbWJlcnMgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyh4KSkKQEAgLTQxOCwxNCArNDI0LDE0IEBACiAgICAgICAgICAgICB1bmljb2RlZGF0YS5fX2ZpbGVfX1stNDpdIGluICgiLnB5YyIsICIucHlvIiksCiAgICAgICAgICJ1bmljb2RlZGF0YSBpcyBub3QgYW4gZXh0ZXJuYWwgYmluYXJ5IG1vZHVsZSIpCiAgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9iaW5hcnkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIHVuaWNvZGVkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIHVuaWNvZGVkYXRhKQogCiAgICAgZGVmIHRlc3RfZmluZHNvdXJjZV9jb2RlX2luX2xpbmVjYWNoZShzZWxmKToKICAgICAgICAgbGluZXMgPSBbIng9MSJdCiAgICAgICAgIGNvID0gY29tcGlsZShsaW5lc1swXSwgIl9keW5hbWljYWxseV9jcmVhdGVkX2ZpbGUiLCAiZXhlYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCBjbykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5nZXRzb3VyY2UsIGNvKQogICAgICAgICBsaW5lY2FjaGUuY2FjaGVbY28uY29fZmlsZW5hbWVdID0gKDEsIE5vbmUsIGxpbmVzLCBjby5jb19maWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmZpbmRzb3VyY2UoY28pLCAobGluZXMsMCkpCkBAIC00NjMsMTMgKzQ2OSwxMyBAQAogICAgIEEgYnJva2VuIGRhdGEgZGVzY3JpcHRvci4gU2VlIGJ1ZyAjMTc4NS4KICAgICAiIiIKICAgICBkZWYgX19nZXRfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0X18gZGF0YSBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gZGF0YSBkZXNjcmlwdG9yIikKIAogICAgIGRlZiBfX3NldF9fKCphcmdzKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCiAKICAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBkYXRhIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBkYXRhIGRlc2NyaXB0b3IiKQogCiAKIGNsYXNzIF9Ccm9rZW5NZXRob2REZXNjcmlwdG9yKG9iamVjdCk6CkBAIC00NzcsMTAgKzQ4MywxMCBAQAogICAgIEEgYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yLiBTZWUgYnVnICMxNzg1LgogICAgICIiIgogICAgIGRlZiBfX2dldF9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yIikKIAogICAgIGRlZiBfX2dldGF0dHJfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0YXR0cl9fIG1ldGhvZCBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gbWV0aG9kIGRlc2NyaXB0b3IiKQogCiAKICMgSGVscGVyIGZvciB0ZXN0aW5nIGNsYXNzaWZ5X2NsYXNzX2F0dHJzLgpAQCAtNjUwLDYgKzY1Niw4OCBAQAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShidWlsdGluLCB0eXBlKToKICAgICAgICAgICAgICAgICBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKGJ1aWx0aW4pCiAKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9EeW5hbWljQ2xhc3NBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnaGFtJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzcGFtJworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIFZBKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBoYW0oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdlZ2dzJworICAgICAgICBzaG91bGRfZmluZF9kY2EgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnaGFtJywgJ2RhdGEnLCBWQSwgVkEuX19kaWN0X19bJ2hhbSddKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kX2RjYSwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhWQSkpCisgICAgICAgIHNob3VsZF9maW5kX2dhID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2hhbScsICdkYXRhJywgTWV0YSwgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kX2dhLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKFZBKSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X21ldGFjbGFzc19jbGFzc19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBmaXNoID0gJ3NsYXAnCisgICAgICAgICAgICBkZWYgX19kaXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVzX18nLCAnX19uYW1lX18nLCAnZmlzaCddCisgICAgICAgIGNsYXNzIENsYXNzKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2hvdWxkX2ZpbmQgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnZmlzaCcsICdkYXRhJywgTWV0YSwgJ3NsYXAnKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKENsYXNzKSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ0JPT00nXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nQk9PTSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cihuYW1lKQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNob3VsZF9maW5kID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ0JPT00nLCAnZGF0YScsIE1ldGEsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKENsYXNzKSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X1ZpcnR1YWxBdHRyaWJ1dGVfbXVsdGlfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YTEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ29uZSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdvbmUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEyKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0d28nXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndHdvJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMyhNZXRhMSwgTWV0YTIpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdChzb3J0ZWQoc2V0KFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndGhyZWUnXSArCisgICAgICAgICAgICAgICAgICAgIE1ldGExLl9fZGlyX18oY2xzKSArIE1ldGEyLl9fZGlyX18oY2xzKSkpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndGhyZWUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzMShtZXRhY2xhc3M9TWV0YTEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDbGFzczIoQ2xhc3MxLCBtZXRhY2xhc3M9TWV0YTMpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNob3VsZF9maW5kMSA9IGluc3BlY3QuQXR0cmlidXRlKCdvbmUnLCAnZGF0YScsIE1ldGExLCAxKQorICAgICAgICBzaG91bGRfZmluZDIgPSBpbnNwZWN0LkF0dHJpYnV0ZSgndHdvJywgJ2RhdGEnLCBNZXRhMiwgMikKKyAgICAgICAgc2hvdWxkX2ZpbmQzID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ3RocmVlJywgJ2RhdGEnLCBNZXRhMywgMykKKyAgICAgICAgY2NhID0gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzczIpCisgICAgICAgIGZvciBzZiBpbiAoc2hvdWxkX2ZpbmQxLCBzaG91bGRfZmluZDIsIHNob3VsZF9maW5kMyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNmLCBjY2EpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9jbGFzc19hdHRyc193aXRoX2J1Z2d5X2RpcihzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbmFtZV9fJywgJ21pc3NpbmcnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYXR0cnMgPSBbYVswXSBmb3IgYSBpbiBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKEMpXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtaXNzaW5nJywgYXR0cnMpCisKICAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX2Rlc2NyaXB0b3JzKHNlbGYpOgogICAgICAgICBjbGFzcyBBKG9iamVjdCk6CiAgICAgICAgICAgICBkZCA9IF9Ccm9rZW5EYXRhRGVzY3JpcHRvcigpCkBAIC02OTMsNiArNzgxLDI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgYi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKGIpKQogICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiLCBpbnNwZWN0LmlzbWV0aG9kKSkKIAorICAgIGRlZiB0ZXN0X2dldG1lbWJlcnNfVmlydHVhbEF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhjbHMsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2VnZ3MnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NjcmFtYmxlZCcKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBlZ2dzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2VnZ3MnLCAnc2NyYW1ibGVkJyksIGluc3BlY3QuZ2V0bWVtYmVycyhBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2VnZ3MnLCAnc3BhbScpLCBpbnNwZWN0LmdldG1lbWJlcnMoQSgpKSkKKworICAgIGRlZiB0ZXN0X2dldG1lbWJlcnNfd2l0aF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGF0dHJzID0gW2FbMF0gZm9yIGEgaW4gaW5zcGVjdC5nZXRtZW1iZXJzKEMpXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtaXNzaW5nJywgYXR0cnMpCisKIAogX2dsb2JhbF9yZWYgPSBvYmplY3QoKQogY2xhc3MgVGVzdEdldENsb3N1cmVWYXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEwODAsNiArMTE5MCwxNSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhUaGluZywgJ3gnKSwgVGhpbmcueCkKIAorICAgIGRlZiB0ZXN0X2NsYXNzVmlydHVhbEF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiB4KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl94CisgICAgICAgICAgICBfeCA9IG9iamVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKFRoaW5nLCAneCcpLCBUaGluZy5fX2RpY3RfX1sneCddKQorCiAgICAgZGVmIHRlc3RfaW5oZXJpdGVkX2NsYXNzYXR0cmlidXRlKHNlbGYpOgogICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QpOgogICAgICAgICAgICAgeCA9IG9iamVjdCgpCkBAIC0xNDYxLDcgKzE1ODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIGludCwgInZhcl9rZXl3b3JkIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCi0gICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5fZnVuY3Rpb24oc2VsZik6CisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX3Vuc3VwcG9ydGVkX2J1aWx0aW5zKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6CiAgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZSh0eXBlKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ25vdCBzdXBwb3J0ZWQgYnkgc2lnbmF0dXJlJyk6CkBAIC0xNDcwLDEwICsxNTg5LDEzIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUnKToKICAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgJ21ldGhvZC13cmFwcGVyJwogICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUobWluLl9fY2FsbF9fKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluIGZ1bmN0aW9uJyk6Ci0gICAgICAgICAgICAjIHN1cHBvcnQgZm9yICdtZXRob2Qtd3JhcHBlcicKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKG1pbikKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fYnVpbHRpbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUobWluKSwgTm9uZSkKKyAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUob3Muc3RhdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2lnbmF0dXJlLCBpbnNwZWN0LlNpZ25hdHVyZSkpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fbm9uX2Z1bmN0aW9uKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgY2FsbGFibGUgb2JqZWN0Jyk6CkBAIC0xNzM2LDYgKzE4NTgsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAorICAgICAgICAjIFRlc3Qgd2UgaGFuZGxlIF9fc2lnbmF0dXJlX18gcGFydHdheSBkb3duIHRoZSB3cmFwcGVyIHN0YWNrCisgICAgICAgIGRlZiB3cmFwcGVkX2Zvb19jYWxsKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdyYXBwZWRfZm9vX2NhbGwuX193cmFwcGVkX18gPSBGb28uX19jYWxsX18KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHdyYXBwZWRfZm9vX2NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSk6CkBAIC0xODUwLDYgKzE5ODMsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShXcmFwcGVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKyAgICAgICAgIyB3cmFwcGVyIGxvb3A6CisgICAgICAgIFdyYXBwZWQuX193cmFwcGVkX18gPSBXcmFwcGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBzZWxmLnNpZ25hdHVyZShXcmFwcGVkKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2xhbWJkYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoKGxhbWJkYSBhPTEwOiBhKSksCkBAIC0yMzAxLDYgKzI0MzgsMTAzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYmEsIGJhNCkKIAogCitjbGFzcyBUZXN0VW53cmFwKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3Vud3JhcF9vbmUoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIHdyYXBwZXIgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MjApKGZ1bmMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zcGVjdC51bndyYXAod3JhcHBlciksIGZ1bmMpCisKKyAgICBkZWYgdGVzdF91bndyYXBfc2V2ZXJhbChzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgd3JhcHBlciA9IGZ1bmMKKyAgICAgICAgZm9yIF9fIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMod3JhcHBlcikKKyAgICAgICAgICAgIGRlZiB3cmFwcGVyKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydElzTm90KHdyYXBwZXIuX193cmFwcGVkX18sIGZ1bmMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zcGVjdC51bndyYXAod3JhcHBlciksIGZ1bmMpCisKKyAgICBkZWYgdGVzdF9zdG9wKHNlbGYpOgorICAgICAgICBkZWYgZnVuYzEoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYSArIGIKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jMSkKKyAgICAgICAgZGVmIGZ1bmMyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYzIpCisgICAgICAgIGRlZiB3cmFwcGVyKCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZ1bmMyLnN0b3BfaGVyZSA9IDEKKyAgICAgICAgdW53cmFwcGVkID0gaW5zcGVjdC51bndyYXAod3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcD0obGFtYmRhIGY6IGhhc2F0dHIoZiwgInN0b3BfaGVyZSIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh1bndyYXBwZWQsIGZ1bmMyKQorCisgICAgZGVmIHRlc3RfY3ljbGUoc2VsZik6CisgICAgICAgIGRlZiBmdW5jMSgpOiBwYXNzCisgICAgICAgIGZ1bmMxLl9fd3JhcHBlZF9fID0gZnVuYzEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMxKQorCisgICAgICAgIGRlZiBmdW5jMigpOiBwYXNzCisgICAgICAgIGZ1bmMyLl9fd3JhcHBlZF9fID0gZnVuYzEKKyAgICAgICAgZnVuYzEuX193cmFwcGVkX18gPSBmdW5jMgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMikKKworICAgIGRlZiB0ZXN0X3VuaGFzaGFibGUoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKCk6IHBhc3MKKyAgICAgICAgZnVuYy5fX3dyYXBwZWRfXyA9IE5vbmUKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9faGFzaF9fID0gTm9uZQorICAgICAgICAgICAgX193cmFwcGVkX18gPSBmdW5jCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGluc3BlY3QudW53cmFwKEMoKSkpCisKK2NsYXNzIFRlc3RNYWluKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9vbmx5X3NvdXJjZShzZWxmKToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3VuaXR0ZXN0JykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnaW5zcGVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaXR0ZXN0JykKKyAgICAgICAgbGluZXMgPSBvdXQuZGVjb2RlKCkuc3BsaXRsaW5lcygpCisgICAgICAgICMgaWdub3JlIHRoZSBmaW5hbCBuZXdsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbOi0xXSwgaW5zcGVjdC5nZXRzb3VyY2UobW9kdWxlKS5zcGxpdGxpbmVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKFRocmVhZFBvb2xFeGVjdXRvciBpcyBOb25lLAorICAgICAgICAgICAgJ3RocmVhZHMgcmVxdWlyZWQgdG8gdGVzdCBfX3F1YWxuYW1lX18gZm9yIHNvdXJjZSBmaWxlcycpCisgICAgZGVmIHRlc3RfcXVhbG5hbWVfc291cmNlKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY3VycmVudC5mdXR1cmVzOlRocmVhZFBvb2xFeGVjdXRvcicpCisgICAgICAgIGxpbmVzID0gb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAjIGlnbm9yZSB0aGUgZmluYWwgbmV3bGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzotMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5nZXRzb3VyY2UoVGhyZWFkUG9vbEV4ZWN1dG9yKS5zcGxpdGxpbmVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKKyAgICBkZWYgdGVzdF9idWlsdGlucyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3VuaXR0ZXN0JykKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzJykKKyAgICAgICAgbGluZXMgPSBlcnIuZGVjb2RlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiQ2FuJ3QgZ2V0IGluZm8gZm9yIGJ1aWx0aW4gbW9kdWxlcy4iXSkKKworICAgIGRlZiB0ZXN0X2RldGFpbHMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bml0dGVzdCcsICctLWRldGFpbHMnKQorICAgICAgICBvdXRwdXQgPSBvdXQuZGVjb2RlKCkKKyAgICAgICAgIyBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uIHRoZSBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19uYW1lX18sIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19maWxlX18sIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19jYWNoZWRfXywgb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KAogICAgICAgICBUZXN0RGVjb3JhdG9ycywgVGVzdFJldHJpZXZpbmdTb3VyY2VDb2RlLCBUZXN0T25lbGluZXJzLCBUZXN0QnVnZ3lDYXNlcywKQEAgLTIzMDgsNyArMjU0Miw3IEBACiAgICAgICAgIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucywgVGVzdEdldGNhbGxhcmdzTWV0aG9kcywKICAgICAgICAgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMsIFRlc3RHZXRhdHRyU3RhdGljLCBUZXN0R2V0R2VuZXJhdG9yU3RhdGUsCiAgICAgICAgIFRlc3ROb0VPTCwgVGVzdFNpZ25hdHVyZU9iamVjdCwgVGVzdFNpZ25hdHVyZUJpbmQsIFRlc3RQYXJhbWV0ZXJPYmplY3QsCi0gICAgICAgIFRlc3RCb3VuZEFyZ3VtZW50cywgVGVzdEdldENsb3N1cmVWYXJzCisgICAgICAgIFRlc3RCb3VuZEFyZ3VtZW50cywgVGVzdEdldENsb3N1cmVWYXJzLCBUZXN0VW53cmFwLCBUZXN0TWFpbgogICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9pbnQucHkKaW5kZXggYzE5OGJjYy4uNGUwMDYyMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnQucHkKQEAgLTIyOCw2ICsyMjgsNDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIGJhc2U9MTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBiYXNlPTApCiAKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9saW1pdHMoc2VsZik6CisgICAgICAgICIiIlRlc3RpbmcgdGhlIHN1cHBvcnRlZCBsaW1pdHMgb2YgdGhlIGludCgpIGJhc2UgcGFyYW1ldGVyLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIDUpLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDM3KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgLTkwOSkgICMgQW4gb2xkIG1hZ2ljIHZhbHVlIGJhc2UgZnJvbSBQeXRob24gMi4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIGJhc2U9MC0oMioqMjM0KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIGJhc2U9MioqMjM0KQorICAgICAgICAjIEJhc2VzIDIgdGhyb3VnaCAzNiBhcmUgc3VwcG9ydGVkLgorICAgICAgICBmb3IgYmFzZSBpbiByYW5nZSgyLDM3KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwJywgYmFzZT1iYXNlKSwgMCkKKworICAgIGRlZiB0ZXN0X2ludF9iYXNlX2JhZF90eXBlcyhzZWxmKToKKyAgICAgICAgIiIiTm90IGludGVnZXIgdHlwZXMgYXJlIG5vdCB2YWxpZCBiYXNlczsgaXNzdWUxNjc3Mi4iIiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgNS41KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCA1LjApCisKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9pbmRleGFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15SW5kZXhhYmxlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgICMgQ2hlY2sgb3V0IG9mIHJhbmdlIGJhc2VzLgorICAgICAgICBmb3IgYmFzZSBpbiAyKioxMDAsIC0yKioxMDAsIDEsIDM3OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBpbnQoJzQzJywgYmFzZSkKKworICAgICAgICAjIENoZWNrIGluLXJhbmdlIGJhc2VzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgyKSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDEwKSksIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMzYpKSwgMSArIDM2KioyKQorCiAgICAgZGVmIHRlc3Rfbm9uX251bWVyaWNfaW5wdXRfdHlwZXMoc2VsZik6CiAgICAgICAgICMgVGVzdCBwb3NzaWJsZSBub24tbnVtZXJpYyB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHgsIGluY2x1ZGluZwogICAgICAgICAjIHN1YmNsYXNzZXMgb2YgdGhlIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCBhY2NlcHRlZCB0eXBlcy4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CmluZGV4IDliODkyMDIuLjU3ZjM2NTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pby5weQpAQCAtMTY1LDcgKzE2NSw3IEBACiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IDEKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKIAogY2xhc3MgQ0Nsb3NlRmFpbHVyZUlPKENsb3NlRmFpbHVyZUlPLCBpby5SYXdJT0Jhc2UpOgogICAgIHBhc3MKQEAgLTYwMSw5ICs2MDEsOSBAQAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgZi5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQogCiAgICAgZGVmIHRlc3RfbXVsdGlfY2xvc2Uoc2VsZik6CkBAIC03NjIsNyArNzYyLDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gT1NFcnJvcjogIiksIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CkBAIC03NzgsMjIgKzc3OCwyMiBAQAogICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHJhdy5mbHVzaCA9IGJhZF9mbHVzaAogICAgICAgICBiID0gc2VsZi50cChyYXcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdmbHVzaCcpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdmbHVzaCcpCiAgICAgICAgIGRlZiBiYWRfY2xvc2UoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2Nsb3NlJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2Nsb3NlJykKICAgICAgICAgcmF3LmNsb3NlID0gYmFkX2Nsb3NlCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKICAgICAgICAgYi5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICAgICAgYi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5hcmdzLCAoJ2Nsb3NlJywpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5leGNlcHRpb24uX19jb250ZXh0X18uYXJncywgKCdmbHVzaCcsKSkKQEAgLTgzMyw2ICs4MzMsMTQgQEAKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCBidWZmZXJfc2l6ZT1idWZzaXplMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSwgc2l6ZSArIGJ1ZnNpemUyKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfYnVmZmVyX2ZyZWVpbmcoc2VsZikgOgorICAgICAgICBidWZzaXplID0gNDA5NgorICAgICAgICByYXdpbyA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCBidWZmZXJfc2l6ZT1idWZzaXplKQorICAgICAgICBzaXplID0gc3lzLmdldHNpemVvZihidWZpbykgLSBidWZzaXplCisgICAgICAgIGJ1ZmlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKGJ1ZmlvKSwgc2l6ZSkKIAogY2xhc3MgQnVmZmVyZWRSZWFkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBDb21tb25CdWZmZXJlZFRlc3RzKToKICAgICByZWFkX21vZGUgPSAicmIiCkBAIC0xMDA3LDggKzEwMTUsOCBAQAogICAgIGRlZiB0ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZik6CiAgICAgICAgIHJhd2lvID0gc2VsZi5NaXNiZWhhdmVkUmF3SU8oKGIiYWJjIiwgYiJkIiwgYiJlZmciKSkKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby50ZWxsKQogCiAgICAgZGVmIHRlc3Rfbm9fZXh0cmFuZW91c19yZWFkKHNlbGYpOgogICAgICAgICAjIElzc3VlICM5NTUwOyB3aGVuIHRoZSByYXcgSU8gb2JqZWN0IGhhcyBzYXRpc2ZpZWQgdGhlIHJlYWQgcmVxdWVzdCwKQEAgLTEwNTksMTcgKzEwNjcsMTggQEAKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvKQogICAgICAgICAjIF9weWlvLkJ1ZmZlcmVkUmVhZGVyIHNlZW1zIHRvIGltcGxlbWVudCByZWFkaW5nIGRpZmZlcmVudCwgc28gdGhhdAogICAgICAgICAjIGNoZWNraW5nIHRoaXMgaXMgbm90IHNvIGVhc3kuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnJlYWQsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby5yZWFkLCAxMCkKIAogICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKICAgICAgICAgIyBDIEJ1ZmZlcmVkUmVhZGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZC4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKLSAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCi0gICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQotICAgICAgICBmLmYgPSBmCi0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKLSAgICAgICAgZGVsIGYKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IHNlbGYuRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAidytiIikKKyAgICAgICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQorICAgICAgICAgICAgZi5mID0gZgorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICAgICAgZGVsIGYKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQogCiAgICAgZGVmIHRlc3RfYXJnc19lcnJvcihzZWxmKToKQEAgLTEzMTIsOSArMTMyMSw5IEBACiAgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKICAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygpCiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8uc2VlaywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8udGVsbCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnVmaW8ud3JpdGUsIGIiYWJjZGVmIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8uc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8udGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8ud3JpdGUsIGIiYWJjZGVmIikKIAogICAgIGRlZiB0ZXN0X21heF9idWZmZXJfc2l6ZV9yZW1vdmFsKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CkBAIC0xMzIzLDExICsxMzMyLDExIEBACiAgICAgZGVmIHRlc3Rfd3JpdGVfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuTW9ja1Jhd0lPKCkKICAgICAgICAgZGVmIGJhZF93cml0ZShiKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHJhdy53cml0ZSA9IGJhZF93cml0ZQogICAgICAgICBiID0gc2VsZi50cChyYXcpCiAgICAgICAgIGIud3JpdGUoYidzcGFtJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmNsb3NlZCkKIAogCkBAIC0xMzU4LDEzICsxMzY3LDE0IEBACiAgICAgICAgICMgQyBCdWZmZXJlZFdyaXRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcwogICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCi0gICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQotICAgICAgICBmID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgZi53cml0ZShiIjEyM3h4eCIpCi0gICAgICAgIGYueCA9IGYKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBmLndyaXRlKGIiMTIzeHh4IikKKyAgICAgICAgICAgIGYueCA9IGYKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgICAgIGRlbCBmCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjEyM3h4eCIpCkBAIC0xMzk3LDE0ICsxNDA3LDE0IEBACiAgICAgICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi50cCwgTm90UmVhZGFibGUoKSwgc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi50cCwgTm90UmVhZGFibGUoKSwgc2VsZi5Nb2NrUmF3SU8oKSkKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3dpdGhfbm90X3dyaXRlYWJsZShzZWxmKToKICAgICAgICAgY2xhc3MgTm90V3JpdGVhYmxlKE1vY2tSYXdJTyk6CiAgICAgICAgICAgICBkZWYgd3JpdGFibGUoc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2VsZi50cCwgc2VsZi5Nb2NrUmF3SU8oKSwgTm90V3JpdGVhYmxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYudHAsIHNlbGYuTW9ja1Jhd0lPKCksIE5vdFdyaXRlYWJsZSgpKQogCiAgICAgZGVmIHRlc3RfcmVhZChzZWxmKToKICAgICAgICAgcGFpciA9IHNlbGYudHAoc2VsZi5CeXRlc0lPKGIiYWJjZGVmIiksIHNlbGYuTW9ja1Jhd0lPKCkpCkBAIC0yMTY1LDcgKzIxNzUsNyBAQAogICAgICAgICBpZiBzOgogICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBPU0Vycm9yOiAiKSwgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgIyBTeXN0ZW1hdGljIHRlc3RzIG9mIHRoZSB0ZXh0IEkvTyBBUEkKQEAgLTIyMzcsNyArMjI0Nyw3IEBACiAgICAgICAgIGYuc2VlaygwKQogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCAiXHhmZlxuIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYudGVsbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYudGVsbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcDIpCiAgICAgICAgIGYuY2xvc2UoKQogCkBAIC0yMzQxLDcgKzIzNTEsNyBAQAogICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoVW5SZWFkYWJsZSgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdHh0LnJlYWQpCiAKICAgICBkZWYgdGVzdF9yZWFkX29uZV9ieV9vbmUoc2VsZik6CiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oYiJBQVxyXG5CQiIpKQpAQCAtMjUxNiw5ICsyNTI2LDkgQEAKICAgICBkZWYgdGVzdF9mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKSwgZW5jb2Rpbmc9ImFzY2lpIikKICAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgdHh0LmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHR4dC5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR4dC5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKQEAgLTI1OTksMTQgKzI2MDksMTUgQEAKICAgICAgICAgIyBDIFRleHRJT1dyYXBwZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKICAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbiBnYy5nYXJiYWdlIGluc3RlYWQuCi0gICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKLSAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQotICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQotICAgICAgICB0LnggPSB0Ci0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKLSAgICAgICAgZGVsIHQKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICByYXdpbyA9IGlvLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHJhd2lvKQorICAgICAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICAgICAgdC53cml0ZSgiNDU2ZGVmIikKKyAgICAgICAgICAgIHQueCA9IHQKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKKyAgICAgICAgICAgIGRlbCB0CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjQ1NmRlZiIpCkBAIC0yNzY2LDcgKzI3NzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubW9kZSwgIndiIikKICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIlUiKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJVIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm5hbWUsICAgICAgICAgICAgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIubmFtZSwgICAgIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYnVmZmVyLnJhdy5uYW1lLCBzdXBwb3J0LlRFU1RGTikKQEAgLTI4OTYsNyArMjkwOCw3IEBACiAgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXBfZmRzKQpAQCAtMzA2MiwxNSArMzA3NCwxOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aW8gPSBzZWxmLmlvLm9wZW4odywgKipmZG9wZW5fa3dhcmdzKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKICAgICAgICAgICAgICMgRmlsbCB0aGUgcGlwZSBlbm91Z2ggdGhhdCB0aGUgd3JpdGUgd2lsbCBiZSBibG9ja2luZy4KICAgICAgICAgICAgICMgSXQgd2lsbCBiZSBpbnRlcnJ1cHRlZCBieSB0aGUgdGltZXIgYXJtZWQgYWJvdmUuICBTaW5jZSB0aGUKICAgICAgICAgICAgICMgb3RoZXIgdGhyZWFkIGhhcyByZWFkIG9uZSBieXRlLCB0aGUgbG93LWxldmVsIHdyaXRlIHdpbGwKICAgICAgICAgICAgICMgcmV0dXJuIHdpdGggYSBzdWNjZXNzZnVsIChwYXJ0aWFsKSByZXN1bHQgcmF0aGVyIHRoYW4gYW4gRUlOVFIuCiAgICAgICAgICAgICAjIFRoZSBidWZmZXJlZCBJTyBsYXllciBtdXN0IGNoZWNrIGZvciBwZW5kaW5nIHNpZ25hbAogICAgICAgICAgICAgIyBoYW5kbGVycywgd2hpY2ggaW4gdGhpcyBjYXNlIHdpbGwgaW52b2tlIGFsYXJtX2ludGVycnVwdCgpLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aW8ud3JpdGUsIGl0ZW0gKiAoc3VwcG9ydC5QSVBFX01BWF9TSVpFIC8vIGxlbihpdGVtKSArIDEpKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgIyBXZSBnb3Qgb25lIGJ5dGUsIGdldCBhbm90aGVyIG9uZSBhbmQgY2hlY2sgdGhhdCBpdCBpc24ndCBhCiAgICAgICAgICAgICAjIHJlcGVhdCBvZiB0aGUgZmlyc3Qgb25lLgpAQCAtMzA4NCw3ICszMDk5LDcgQEAKICAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgYmxvY2sgYWdhaW4uCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTMyMTIsNyArMzIyNyw3IEBACiAgICAgICAgICAgICAjIGJ1ZmZlciwgYW5kIGNvdWxkIGJsb2NrIChpbiBjYXNlIG9mIGZhaWx1cmUpLgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHdpby5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVCQURGOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCA1MzFjOWFmLi5lZmU5ZjUxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTgsNyArOCw3IEBACiAKIHRyeToKICAgICB0dHkgPSBvcGVuKCIvZGV2L3R0eSIsICJyYiIpCi1leGNlcHQgSU9FcnJvcjoKK2V4Y2VwdCBPU0Vycm9yOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gb3BlbiAvZGV2L3R0eSIpCiBlbHNlOgogICAgICMgU2tpcCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgaW4gZm9yZWdyb3VuZApAQCAtODYsOCArODYsNiBAQAogICAgICAgICAgICAgb3MuY2xvc2UobWZkKQogICAgICAgICAgICAgb3MuY2xvc2Uoc2ZkKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KElvY3RsVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXBhZGRyZXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKaW5kZXggOTljNTRmMS4uZjNiMTU2NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkKQEAgLTEzMTksNiArMTMxOSwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKAogICAgICAgICAgICAgICAgICcxMjcuNDIuMC4wLzE2JykuaXNfbG9vcGJhY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMjguMC4wLjAnKS5pc19sb29wYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTAwLjY0LjAuMC8xMCcpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykuaXNfZ2xvYmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTkyLjAuMi4xMjgvMjUnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzE5Mi4wLjMuMC8yNCcpLmlzX2dsb2JhbCkKIAogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzAuMC4wLjAnKS5pc191bnNwZWNpZmllZCkKQEAgLTEzODQsNiArMTM5MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjoxJykuaXNfdW5zcGVjaWZpZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCc6Oi8xMjcnKS5pc191bnNwZWNpZmllZCkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDE6OjEvMTI4JykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcyMDA6OjEvMTI4JykuaXNfZ2xvYmFsKQogICAgICAgICAjIHRlc3QgYWRkcmVzc2VzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJ2ZmZmY6OicpLmlzX211bHRpY2FzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygyKioxMjggLSAxKS5pc19tdWx0aWNhc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKaW5kZXggOTEwMWY2Yy4uMTUyZjVmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQpAQCAtNDUsMzEgKzQ1LDIxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCByZXBlYXQKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi1mcm9tIGJ1aWx0aW5zIGltcG9ydCBsZW4gYXMgX2xlbgorZnJvbSBvcGVyYXRvciBpbXBvcnQgbGVuZ3RoX2hpbnQKIAogbiA9IDEwCiAKLWRlZiBsZW4ob2JqKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBfbGVuKG9iaikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IHRoaXMgaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwotICAgICAgICAgICAgcmV0dXJuIG9iai5fX2xlbmd0aF9oaW50X18oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKIAogY2xhc3MgVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnM6CiAKICAgICBkZWYgdGVzdF9pbnZhcmlhbnQoc2VsZik6CiAgICAgICAgIGl0ID0gc2VsZi5pdAogICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZSgxLCBuKzEpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBpKQogICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKIGNsYXNzIFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CiAKQEAgLTc4LDEyICs2OCwxMiBAQAogICAgICAgICAjIGxlbmd0aCBpbW11dGFiaWxpdHkgIGR1cmluZyBpdGVyYXRpb24KIAogICAgICAgICBpdCA9IHNlbGYuaXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbikKICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuLTEpCiAgICAgICAgIHNlbGYubXV0YXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKIAogIyMgLS0tLS0tLSBDb25jcmV0ZSBUeXBlIFRlc3RzIC0tLS0tLS0KIApAQCAtOTIsMTAgKzgyLDYgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuaXQgPSByZXBlYXQoTm9uZSwgbikKIAotICAgIGRlZiB0ZXN0X25vX2xlbl9mb3JfaW5maW5pdGVfcmVwZWF0KHNlbGYpOgotICAgICAgICAjIFRoZSByZXBlYXQoKSBvYmplY3QgY2FuIGFsc28gYmUgaW5maW5pdGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKLQogY2xhc3MgVGVzdFhyYW5nZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTY3LDE0ICsxNTMsMTUgQEAKICAgICAgICAgaXQgPSBpdGVyKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKSAgIyBncm93IHdpdGggYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCisKIAogY2xhc3MgVGVzdExpc3RSZXZlcnNlZChUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xODYsMzIgKzE3Myw0MSBAQAogICAgICAgICBpdCA9IHJldmVyc2VkKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKSAgIyBpZ25vcmUgYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMikgICMgaWdub3JlIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKSAgIyBjb25maXJtIGludmFyaWFudAogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tIENoZWNrIHRvIG1ha2Ugc3VyZSBleGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCBieSBfX2xlbmd0aF9oaW50X18oKQogCiAKIGNsYXNzIEJhZExlbihvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIEJhZExlbmd0aEhpbnQob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIE5vbmVMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwogCiBjbGFzcyBUZXN0TGVuZ3RoSGludEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CmluZGV4IDUxNGE2YjcuLjI2NzJiMDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CkBAIC0xNzI5LDkgKzE3MjksOCBAQAogY2xhc3MgTGVuZ3RoVHJhbnNwYXJlbmN5KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3JlcGVhdChzZWxmKToKLSAgICAgICAgZnJvbSB0ZXN0LnRlc3RfaXRlcmxlbiBpbXBvcnQgbGVuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcGVhdChOb25lLCA1MCkpLCA1MCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgNTApKSwgNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmVwZWF0KE5vbmUpLCAxMiksIDEyKQogCiBjbGFzcyBSZWdyZXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKaW5kZXggZDIzZTI4NS4uMzVjMDJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCBkZWNpbWFsCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CiAKQEAgLTcwLDUgKzcwLDI2IEBACiAgICAgICAgIG1zZyA9ICdlc2NhcGUnCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSAndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyJworICAgICAgICBmb3IgdmFsdWUgaW4gWzEsIDMuMTQsIGInYnl0ZXMnLCBiJ1x4ZmZceDAwJywgW10sIHt9LCBOb25lXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2csIHNlbGYubG9hZHMsIHZhbHVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoQnl0ZXNJTyhiJ1sxLDIsM10nKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ193aXRoX3V0ZjhfYm9tKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg5NTgKKyAgICAgICAgYm9tX2pzb24gPSAiWzEsMiwzXSIuZW5jb2RlKCd1dGYtOC1zaWcnKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZHMoYm9tX2pzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JPTScsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoU3RyaW5nSU8oYm9tX2pzb24pKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgQk9NIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nCisgICAgICAgIGJvbV9pbl9zdHIgPSAnInt9IicuZm9ybWF0KCcnLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYm9tX2luX3N0ciksICdcdWZlZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9pbl9zdHIpKSwgJ1x1ZmVmZicpCisKIGNsYXNzIFRlc3RQeURlY29kZShUZXN0RGVjb2RlLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0RlY29kZShUZXN0RGVjb2RlLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2VudW0ucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjQxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTIwIEBACitmcm9tIGVudW0gaW1wb3J0IEVudW0sIEludEVudW0KK2Zyb20gbWF0aCBpbXBvcnQgaXNuYW4KK2Zyb20gdGVzdC50ZXN0X2pzb24gaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKKworU01BTEwgPSAxCitCSUcgPSAxPDwzMgorSFVHRSA9IDE8PDY0CitSRUFMTFlfSFVHRSA9IDE8PDk2CisKK2NsYXNzIEJpZ051bShJbnRFbnVtKToKKyAgICBzbWFsbCA9IFNNQUxMCisgICAgYmlnID0gQklHCisgICAgaHVnZSA9IEhVR0UKKyAgICByZWFsbHlfaHVnZSA9IFJFQUxMWV9IVUdFCisKK0UgPSAyLjcxODI4MQorUEkgPSAzLjE0MTU5MworVEFVID0gMiAqIFBJCisKK2NsYXNzIEZsb2F0TnVtKGZsb2F0LCBFbnVtKToKKyAgICBlID0gRQorICAgIHBpID0gUEkKKyAgICB0YXUgPSBUQVUKKworSU5GID0gZmxvYXQoJ2luZicpCitORUdfSU5GID0gZmxvYXQoJy1pbmYnKQorTkFOID0gZmxvYXQoJ25hbicpCisKK2NsYXNzIFdpZXJkTnVtKGZsb2F0LCBFbnVtKToKKyAgICBpbmYgPSBJTkYKKyAgICBuZWdfaW5mID0gTkVHX0lORgorICAgIG5hbiA9IE5BTgorCitjbGFzcyBUZXN0RW51bToKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0gaW4gRmxvYXROdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHJlcHIoZW51bS52YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3Rfd2VpcmRfZmxvYXRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSwgZXhwZWN0ZWQgaW4gemlwKFdpZXJkTnVtLCAoJ0luZmluaXR5JywgJy1JbmZpbml0eScsICdOYU4nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIGV4cGVjdGVkKQorICAgICAgICAgICAgaWYgbm90IGlzbmFuKGVudW0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oZmxvYXQoc2VsZi5kdW1wcyhlbnVtKSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpKSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEJpZ051bToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhlbnVtKSwgc3RyKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhlbnVtKSksIGVudW0pCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMobGlzdChCaWdOdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoW1NNQUxMLCBCSUcsIEhVR0UsIFJFQUxMWV9IVUdFXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoQmlnTnVtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoW0UsIFBJLCBUQVVdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChGbG9hdE51bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEZsb2F0TnVtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdbSW5maW5pdHksIC1JbmZpbml0eSwgTmFOXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoV2llcmROdW0pKSlbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoV2llcmROdW0pWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzJdKSkKKworICAgIGRlZiB0ZXN0X2RpY3Rfa2V5cyhzZWxmKToKKyAgICAgICAgcywgYiwgaCwgciA9IEJpZ051bQorICAgICAgICBlLCBwLCB0ID0gRmxvYXROdW0KKyAgICAgICAgaSwgaiwgbiA9IFdpZXJkTnVtCisgICAgICAgIGQgPSB7CisgICAgICAgICAgICBzOid0aW55JywgYjonbGFyZ2UnLCBoOidsYXJnZXInLCByOidsYXJnZXN0JywKKyAgICAgICAgICAgIGU6IkV1bGVyJ3MgbnVtYmVyIiwgcDoncGknLCB0Oid0YXUnLAorICAgICAgICAgICAgaTonSW5maW5pdHknLCBqOictSW5maW5pdHknLCBuOidOYU4nLAorICAgICAgICAgICAgfQorICAgICAgICBuZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoU01BTEwpXSwgJ3RpbnknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3N0cihCSUcpXSwgJ2xhcmdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoSFVHRSldLCAnbGFyZ2VyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoUkVBTExZX0hVR0UpXSwgJ2xhcmdlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoRSldLCAiRXVsZXIncyBudW1iZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kW3JlcHIoUEkpXSwgJ3BpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFRBVSldLCAndGF1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnSW5maW5pdHknXSwgJ0luZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnLUluZmluaXR5J10sICctSW5maW5pdHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydOYU4nXSwgJ05hTicpCisKKyAgICBkZWYgdGVzdF9kaWN0X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgZCA9IGRpY3QoCisgICAgICAgICAgICAgICAgdGlueT1CaWdOdW0uc21hbGwsCisgICAgICAgICAgICAgICAgbGFyZ2U9QmlnTnVtLmJpZywKKyAgICAgICAgICAgICAgICBsYXJnZXI9QmlnTnVtLmh1Z2UsCisgICAgICAgICAgICAgICAgbGFyZ2VzdD1CaWdOdW0ucmVhbGx5X2h1Z2UsCisgICAgICAgICAgICAgICAgZT1GbG9hdE51bS5lLAorICAgICAgICAgICAgICAgIHBpPUZsb2F0TnVtLnBpLAorICAgICAgICAgICAgICAgIHRhdT1GbG9hdE51bS50YXUsCisgICAgICAgICAgICAgICAgaT1XaWVyZE51bS5pbmYsCisgICAgICAgICAgICAgICAgaj1XaWVyZE51bS5uZWdfaW5mLAorICAgICAgICAgICAgICAgIG49V2llcmROdW0ubmFuLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3RpbnknXSwgU01BTEwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlJ10sIEJJRykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnbGFyZ2VyJ10sIEhVR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlc3QnXSwgUkVBTExZX0hVR0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2UnXSwgRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsncGknXSwgUEkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3RhdSddLCBUQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2knXSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydqJ10sIE5FR19JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihuZFsnbiddKSkKKworY2xhc3MgVGVzdFB5RW51bShUZXN0RW51bSwgUHlUZXN0KTogcGFzcworY2xhc3MgVGVzdENFbnVtKFRlc3RFbnVtLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CmluZGV4IDNkZDg3N2EuLjdjYWFmZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gdGVzdC50ZXN0X2pzb24gaW1wb3J0IFB5VGVzdCwgQ1Rlc3QKK2ltcG9ydCByZQogCiAjIDIwMDctMTAtMDUKIEpTT05ET0NTID0gWwpAQCAtMTAwLDYgKzEwMSw5NCBAQAogICAgICAgICAjVGhpcyBpcyBmb3IgcHl0aG9uIGVuY29kZXIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmR1bXBzLCBkYXRhLCBpbmRlbnQ9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X3RydW5jYXRlZF9pbnB1dChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnJywgJ0V4cGVjdGluZyB2YWx1ZScsIDApLAorICAgICAgICAgICAgKCdbJywgJ0V4cGVjdGluZyB2YWx1ZScsIDEpLAorICAgICAgICAgICAgKCdbNDInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAzKSwKKyAgICAgICAgICAgICgnWzQyLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA0KSwKKyAgICAgICAgICAgICgnWyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCdbInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsJywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgneyInLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0iJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSI6JywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTApLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyLCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMTEpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCciJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgICAgICgnInNwYW0nLCAnVW50ZXJtaW5hdGVkIHN0cmluZyBzdGFydGluZyBhdCcsIDApLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gXChjaGFyIHsyfVwpJy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShtc2cpLCBpZHggKyAxLCBpZHgpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1ssJywgJ0V4cGVjdGluZyB2YWx1ZScsIDEpLAorICAgICAgICAgICAgKCd7InNwYW0iOlt9JywgJ0V4cGVjdGluZyB2YWx1ZScsIDkpLAorICAgICAgICAgICAgKCdbNDI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiAic3BhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA0KSwKKyAgICAgICAgICAgICgnWzQyLF0nLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ3sic3BhbSI6WzQyfScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgnWyJdJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIjonLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnWyJzcGFtIixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDgpLAorICAgICAgICAgICAgKCd7OicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3ssJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgnezQyJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxKSwKKyAgICAgICAgICAgICgnW3tdJywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAyKSwKKyAgICAgICAgICAgICgneyJzcGFtIiwnLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgneyJzcGFtIn0nLCAiRXhwZWN0aW5nICc6JyBkZWxpbWl0ZXIiLCA3KSwKKyAgICAgICAgICAgICgnW3sic3BhbSJdJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgOCksCisgICAgICAgICAgICAoJ3sic3BhbSI6fScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnW3sic3BhbSI6XScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiAiaGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgnW3sic3BhbSI6NDJdJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMTEpLAorICAgICAgICAgICAgKCd7InNwYW0iOjQyLH0nLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfZXh0cmFfZGF0YShzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnW11dJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne319JywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgnW10sW10nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCd7fSx7fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgIF0KKyAgICAgICAgdGVzdF9jYXNlcyArPSBbCisgICAgICAgICAgICAoJzQyLCJzcGFtIicsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJyJzcGFtIiw0MicsICdFeHRyYSBkYXRhJywgNiksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSAtIGxpbmUgMSBjb2x1bW4gezJ9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7M30gLSB7NH1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgbGVuKGRhdGEpICsgMSwgaWR4LCBsZW4oZGF0YSkpLAorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9saW5lY29sKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCchJywgMSwgMSwgMCksCisgICAgICAgICAgICAoJyAhJywgMSwgMiwgMSksCisgICAgICAgICAgICAoJ1xuIScsIDIsIDEsIDEpLAorICAgICAgICAgICAgKCdcbiAgXG5cbiAgICAgIScsIDQsIDYsIDEwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbGluZSwgY29sLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ15FeHBlY3RpbmcgdmFsdWU6IGxpbmUgezB9IGNvbHVtbiB7MX0nCisgICAgICAgICAgICAgICAgcicgXChjaGFyIHsyfVwpJCcuZm9ybWF0KGxpbmUsIGNvbCwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQogCiBjbGFzcyBUZXN0UHlGYWlsKFRlc3RGYWlsLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q0ZhaWwoVGVzdEZhaWwsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CmluZGV4IGE0ZDRkMjAuLmUwNzg1NmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKQEAgLTMyLDYgKzMyLDggQEAKICAgICAgICAgZDEgPSBzZWxmLmR1bXBzKGgpCiAgICAgICAgIGQyID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCiAgICAgICAgIGQzID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9J1x0Jywgc29ydF9rZXlzPVRydWUsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGQ0ID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9Miwgc29ydF9rZXlzPVRydWUpCisgICAgICAgIGQ1ID0gc2VsZi5kdW1wcyhoLCBpbmRlbnQ9J1x0Jywgc29ydF9rZXlzPVRydWUpCiAKICAgICAgICAgaDEgPSBzZWxmLmxvYWRzKGQxKQogICAgICAgICBoMiA9IHNlbGYubG9hZHMoZDIpCkBAIC00Miw2ICs0NCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDMsIGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdC5leHBhbmR0YWJzKDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQzLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDQsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ1LCBkMykKIAogICAgIGRlZiB0ZXN0X2luZGVudDAoc2VsZik6CiAgICAgICAgIGggPSB7MzogMX0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weSBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjk5ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3JkLnB5CkBAIC0wLDAgKzEsMTM4IEBACitpbXBvcnQga2V5d29yZAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBmaWxlY21wCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGV4dHdyYXAKKworS0VZV09SRF9GSUxFICAgICAgICAgICAgID0gc3VwcG9ydC5maW5kZmlsZSgna2V5d29yZC5weScpCitHUkFNTUFSX0ZJTEUgICAgICAgICAgICAgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5zcGxpdChfX2ZpbGVfXylbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4uJywgJy4uJywgJ1B5dGhvbicsICdncmFtaW5pdC5jJykKK1RFU1RfUFlfRklMRSAgICAgICAgICAgICA9ICdrZXl3b3JkX3Rlc3QucHknCitHUkFNTUFSX1RFU1RfRklMRSAgICAgICAgPSAnZ3JhbWluaXRfdGVzdC5jJworUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTID0gJ21pbmltYWxfa2V5d29yZC5weScKK05PTkVYSVNURU5UX0ZJTEUgICAgICAgICA9ICdub3RfaGVyZS50eHQnCisKKworY2xhc3MgVGVzdF9pc2tleXdvcmQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RydWVfaXNfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5d29yZC5pc2tleXdvcmQoJ1RydWUnKSkKKworICAgIGRlZiB0ZXN0X3VwcGVyY2FzZV90cnVlX2lzX25vdF9hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ1RSVUUnKSkKKworICAgIGRlZiB0ZXN0X25vbmVfdmFsdWVfaXNfbm90X2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXl3b3JkLmlza2V5d29yZChOb25lKSkKKworICAgICMgVGhpcyBpcyBwcm9iYWJseSBhbiBhY2NpZGVudCBvZiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgYnV0IHNob3VsZCBiZQorICAgICMgcHJlc2VydmVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgIGRlZiB0ZXN0X2NoYW5naW5nX3RoZV9rd2xpc3RfZG9lc19ub3RfYWZmZWN0X2lza2V5d29yZChzZWxmKToKKyAgICAgICAgb2xkbGlzdCA9IGtleXdvcmQua3dsaXN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBrZXl3b3JkLCAna3dsaXN0Jywgb2xkbGlzdCkKKyAgICAgICAga2V5d29yZC5rd2xpc3QgPSBbJ2l0cycsICdhbGwnLCAnZWdncycsICdiZWFucycsICdhbmQnLCAnYScsICdzbGljZSddCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5d29yZC5pc2tleXdvcmQoJ2VnZ3MnKSkKKworCitjbGFzcyBUZXN0S2V5d29yZEdlbmVyYXRpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoc2VsZiwgc291cmNlX2ZpbGUsIGRlc3RfZmlsZSk6CisgICAgICAgIHdpdGggb3Blbihzb3VyY2VfZmlsZSwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgICAgIG5sID0gbGluZXNbMF1bbGVuKGxpbmVzWzBdLnN0cmlwKCkpOl0KKyAgICAgICAgd2l0aCBvcGVuKGRlc3RfZmlsZSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzWzpsaW5lcy5pbmRleChiIiMtLXN0YXJ0IGtleXdvcmRzLS0iICsgbmwpICsgMV0pCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKGxpbmVzW2xpbmVzLmluZGV4KGIiIy0tZW5kIGtleXdvcmRzLS0iICsgbmwpOl0pCisKKyAgICBkZWYgX2dlbmVyYXRlX2tleXdvcmRzKHNlbGYsIGdyYW1tYXJfZmlsZSwgdGFyZ2V0X2tleXdvcmRfcHlfZmlsZSk6CisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWVdPUkRfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9rZXl3b3JkX3B5X2ZpbGVdLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRlcnIgPSBwcm9jLmNvbW11bmljYXRlKClbMV0KKyAgICAgICAgcmV0dXJuIHByb2MucmV0dXJuY29kZSwgc3RkZXJyCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhHUkFNTUFSX0ZJTEUpLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Qgb25seSB3b3JrcyBmcm9tIHNvdXJjZSBidWlsZCBkaXJlY3RvcnknKQorICAgIGRlZiB0ZXN0X3JlYWxfZ3JhbW1hcl9hbmRfa2V5d29yZF9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgYicnKSwgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpKQorCisgICAgZGVmIHRlc3RfZ3JhbW1hcihzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIFRFU1RfUFlfRklMRSkKKyAgICAgICAgd2l0aCBvcGVuKEdSQU1NQVJfVEVTVF9GSUxFLCAndycpIGFzIGZwOgorICAgICAgICAgICAgIyBTb21lIG9mIHRoZXNlIGFyZSBwcm9iYWJseSBpbXBsZW1lbnRhdGlvbiBhY2NpZGVudHMuCisgICAgICAgICAgICBmcC53cml0ZWxpbmVzKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgezIsIDF9LAorICAgICAgICAgICAgICAgICAgICB7MTEsICJlbmNvZGluZ19kZWNsIiwgMCwgMiwgc3RhdGVzXzc5LAorICAgICAgICAgICAgICAgICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCIKKyAgICAgICAgICAgICAgICAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJqZWxsbyJ9LAorICAgICAgICAgICAgICAgICAgICB7MzI2LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJ0dXJuaXAifSwKKyAgICAgICAgICAgICAgICBcdHsxLCAiVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkIgorICAgICAgICAgICAgICAgICAgICB7Mjc4LCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICJjcmF6eSBidXQgbGVnYWwiCisgICAgICAgICAgICAgICAgImFsc28gbGVnYWwiIHsxLCAiCisgICAgICAgICAgICAgICAgICAgIHsxLCAiY29udGludWUifSwKKyAgICAgICAgICAgICAgICAgICB7MSwgImxlbW9uIn0sCisgICAgICAgICAgICAgICAgICAgICB7MSwgInRvbWF0byJ9LAorICAgICAgICAgICAgICAgIHsxLCAid2lnaWkifSwKKyAgICAgICAgICAgICAgICAgICAgezEsICdubyBnb29kJ30KKyAgICAgICAgICAgICAgICAgICAgezI4MywgMH0sCisgICAgICAgICAgICAgICAgICAgIHsxLCAgInRvbyBtYW55IHNwYWNlcyJ9IiIiKSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBHUkFNTUFSX1RFU1RfRklMRSkKKyAgICAgICAgc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoR1JBTU1BUl9URVNUX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbCisgICAgICAgICAgICAiICAgICAgICAnVGhpcyBvbmUgaXMgdGFiIGluZGVudGVkJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2Fsc28gbGVnYWwnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY29udGludWUnLCIsCisgICAgICAgICAgICAiICAgICAgICAnY3JhenkgYnV0IGxlZ2FsJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2plbGxvJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ2xlbW9uJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3RvbWF0bycsIiwKKyAgICAgICAgICAgICIgICAgICAgICd0dXJuaXAnLCIsCisgICAgICAgICAgICAiICAgICAgICAnd2lnaWknLCIsCisgICAgICAgICAgICBdCisgICAgICAgIHdpdGggb3BlbihURVNUX1BZX0ZJTEUpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHN0YXJ0ID0gbGluZXMuaW5kZXgoIiMtLXN0YXJ0IGtleXdvcmRzLS0iKSArIDEKKyAgICAgICAgZW5kID0gbGluZXMuaW5kZXgoIiMtLWVuZCBrZXl3b3Jkcy0tIikKKyAgICAgICAgYWN0dWFsID0gbGluZXNbc3RhcnQ6ZW5kXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9ncmFtbWFyX3Jlc3VsdHNfaW5fbm9fa2V5d29yZHMoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgUFlfRklMRV9XSVRIT1VUX0tFWVdPUkRTKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBiJycpLCBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoVEVTVF9QWV9GSUxFLCBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZHNfcHlfd2l0aG91dF9tYXJrZXJzX3Byb2R1Y2VzX2Vycm9yKHNlbGYpOgorICAgICAgICByYywgc3RkZXJyID0gc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwgb3MuZGV2bnVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2VycycpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2dyYW1tYXJfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKE5PTkVYSVNURU5UX0ZJTEUsIEtFWVdPUkRfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInKD9tcyknICsgTk9ORVhJU1RFTlRfRklMRS5lbmNvZGUoKSkKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfa2V5d29yZHNfcHlfZmlsZV9wcm9kdWNlc19lcnJvcihzZWxmKToKKyAgICAgICAgcmMsIHN0ZGVyciA9IHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsIE5PTkVYSVNURU5UX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoc3RkZXJyLCBiJyg/bXMpJyArIE5PTkVYSVNURU5UX0ZJTEUuZW5jb2RlKCkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CmluZGV4IDA1MDNhN2YuLmU0YTQ0YzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQpAQCAtMTc2LDYgKzE3NiwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBfX2EKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYKCkuZigpLCA0MikKIAorICAgIGRlZiB0ZXN0X2RlZmF1bHRfZXZhbHVhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMTY5NjcKKyAgICAgICAgYSA9IDQyCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBkZWYgZih2PWEsIHg9YiwgKiwgeT1jLCB6PWQpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyLmV4Y2VwdGlvbiksICJuYW1lICdiJyBpcyBub3QgZGVmaW5lZCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBmID0gbGFtYmRhIHY9YSwgeD1iLCAqLCB5PWMsIHo9ZDogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIuZXhjZXB0aW9uKSwgIm5hbWUgJ2InIGlzIG5vdCBkZWZpbmVkIikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KEtleXdvcmRPbmx5QXJnVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKaW5kZXggZTVlNjA1OC4uYmFmZGViYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTk0LDcgKzk0LDcgQEAKICAgICAgICAgY2xpZW50LnNldGJsb2NraW5nKEZhbHNlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHNlcnZlclNvY2tldC5nZXRzb2NrbmFtZSgpWzFdKSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3NbMF0sIGVycm5vLkVJTlBST0dSRVNTKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgI3JhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC0xODUsNiArMTg1LDMzIEBACiAgICAgICAgIGIuY2xvc2UoKQogICAgICAgICBrcS5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgb3Blbl9maWxlID0gb3BlbihfX2ZpbGVfXywgInJiIikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9wZW5fZmlsZS5jbG9zZSkKKyAgICAgICAgZmQgPSBvcGVuX2ZpbGUuZmlsZW5vKCkKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa3F1ZXVlLmZpbGVubygpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa3F1ZXVlLmNsb3NlZCkKKworICAgICAgICAjIHRlc3QgY2xvc2UoKQorICAgICAgICBrcXVldWUuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoa3F1ZXVlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwga3F1ZXVlLmZpbGVubykKKworICAgICAgICAjIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorICAgICAgICBrcXVldWUuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBrcXVldWUuY29udHJvbCwgTm9uZSwgNCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAga3F1ZXVlID0gc2VsZWN0LmtxdWV1ZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChrcXVldWUuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGtxdWV1ZS5maWxlbm8oKSksIEZhbHNlKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0S1F1ZXVlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xhcmdlZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CmluZGV4IDYzZWU2OTcuLjViMjc2ZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5CkBAIC0xNTksNyArMTU5LDcgQEAKICAgICAgICAgICAgICMgU2Vla2luZyBpcyBub3QgZW5vdWdoIG9mIGEgdGVzdDogeW91IG11c3Qgd3JpdGUgYW5kIGZsdXNoLCB0b28hCiAgICAgICAgICAgICBmLndyaXRlKGIneCcpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJmaWxlc3lzdGVtIGRvZXMgbm90IGhhdmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhcmdlZmlsZSBzdXBwb3J0IikKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQppbmRleCA4YzZlNmI4Li5jZTNmODRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CkBAIC0yNiw2ICsyNiw3IEBACiBpbXBvcnQgbG9nZ2luZy5jb25maWcKIAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbmZpZ3BhcnNlcgogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgaW8KQEAgLTU4LDcgKzU5LDkgQEAKICAgICBpbXBvcnQgc210cGQKICAgICBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgdXJscGFyc2UsIHBhcnNlX3FzCiAgICAgZnJvbSBzb2NrZXRzZXJ2ZXIgaW1wb3J0IChUaHJlYWRpbmdVRFBTZXJ2ZXIsIERhdGFncmFtUmVxdWVzdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhTdHJlYW1TZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdVbml4RGF0YWdyYW1TZXJ2ZXIpCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogdHJ5OgpAQCAtNzUsMTMgKzc4LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogCi0KIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIkJhc2UgY2xhc3MgZm9yIGxvZ2dpbmcgdGVzdHMuIiIiCiAKICAgICBsb2dfZm9ybWF0ID0gIiUobmFtZSlzIC0+ICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3Ll0rKSAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFx3Kyk6IChcZCspJCIKICAgICBtZXNzYWdlX251bSA9IDAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkzLDcgKzk1LDggQEAKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcnMgPSBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0ID0gbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KICAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2VycyA9IHNhdmVkX2xvZ2dlcnMgPSBsb2dnZXJfZGljdC5jb3B5KCkKLSAgICAgICAgICAgIHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMgPSBsb2dnaW5nLl9sZXZlbE5hbWVzLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9uYW1lX3RvX2xldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY29weSgpCisgICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX3RvX25hbWUgPSBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jb3B5KCkKICAgICAgICAgICAgIHNlbGYubG9nZ2VyX3N0YXRlcyA9IGxvZ2dlcl9zdGF0ZXMgPSB7fQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2F2ZWRfbG9nZ2VyczoKICAgICAgICAgICAgICAgICBsb2dnZXJfc3RhdGVzW25hbWVdID0gZ2V0YXR0cihzYXZlZF9sb2dnZXJzW25hbWVdLApAQCAtMTM1LDggKzEzOCwxMCBAQAogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLmNsZWFyKCkKLSAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jbGVhcigpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS51cGRhdGUoc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwudXBkYXRlKHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLmNsZWFyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLnVwZGF0ZShzZWxmLnNhdmVkX2hhbmRsZXJzKQogICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlckxpc3RbOl0gPSBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdApAQCAtMTUwLDEyICsxNTUsMTIgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKIAotICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUsIHBhdD1Ob25lKToKICAgICAgICAgIiIiTWF0Y2ggdGhlIGNvbGxlY3RlZCBsb2cgbGluZXMgYWdhaW5zdCB0aGUgcmVndWxhciBleHByZXNzaW9uCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCwgYW5kIGNvbXBhcmUgdGhlIGV4dHJhY3RlZCBncm91cCB2YWx1ZXMgdG8KICAgICAgICAgdGhlIGV4cGVjdGVkX3ZhbHVlcyBsaXN0IG9mIHR1cGxlcy4iIiIKICAgICAgICAgc3RyZWFtID0gc3RyZWFtIG9yIHNlbGYuc3RyZWFtCi0gICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoc2VsZi5leHBlY3RlZF9sb2dfcGF0KQorICAgICAgICBwYXQgPSByZS5jb21waWxlKHBhdCBvciBzZWxmLmV4cGVjdGVkX2xvZ19wYXQpCiAgICAgICAgIGFjdHVhbF9saW5lcyA9IHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKICAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKQEAgLTQzMCw3ICs0MzUsNyBAQAogICAgICIiIlRlc3QgdmFyaW91cyBmaWx0ZXJpbmcgcG9zc2liaWxpdGllcyB3aXRoIGN1c3RvbSBsb2dnaW5nIGxldmVscy4iIiIKIAogICAgICMgU2tpcCB0aGUgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC01NjAsNyArNTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZmFjaWxpdHksIGguTE9HX1VTRVIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgudW5peHNvY2tldCkKICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6ICMgc3lzbG9nZCBtaWdodCBub3QgYmUgYXZhaWxhYmxlCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogIyBzeXNsb2dkIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZvciBtZXRob2QgaW4gKCdHRVQnLCAnUE9TVCcsICdQVVQnKToKICAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAnUFVUJzoKQEAgLTU4NSw2ICs1OTAsNyBAQAogICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UodHJpZXMpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0aW9uX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwNCAqIHJhbmRvbS5yYW5kaW50KDAsIDQpKQpAQCAtNTkyLDYgKzU5OCw5IEBACiAgICAgICAgIGRlbF9jb3VudCA9IDUwMAogICAgICAgICBsb2dfY291bnQgPSA1MDAKIAorICAgICAgICBzZWxmLmhhbmRsZV90aW1lID0gTm9uZQorICAgICAgICBzZWxmLmRlbGV0aW9uX3RpbWUgPSBOb25lCisKICAgICAgICAgZm9yIGRlbGF5IGluIChGYWxzZSwgVHJ1ZSk6CiAgICAgICAgICAgICBmZCwgZm4gPSB0ZW1wZmlsZS5ta3N0ZW1wKCcubG9nJywgJ3Rlc3RfbG9nZ2luZy0zLScpCiAgICAgICAgICAgICBvcy5jbG9zZShmZCkKQEAgLTYwNSw3ICs2MTQsMTQgQEAKICAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShsb2dfY291bnQpOgogICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDA1KQogICAgICAgICAgICAgICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHsnbXNnJzogJ3Rlc3RpbmcnIH0pCi0gICAgICAgICAgICAgICAgICAgIGguaGFuZGxlKHIpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgaC5oYW5kbGUocikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdEZWxldGVkIGF0ICVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3BlbmVkIGF0ICVzJyAlIChzZWxmLmRlbGV0aW9uX3RpbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV90aW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlbW92ZXIuam9pbigpCiAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCkBAIC02NDcsNDEgKzY2Myw2IEBACiAjIC0tIGlmIGl0IHByb3ZlcyB0byBiZSBvZiB3aWRlciB1dGlsaXR5IHRoYW4ganVzdCB0ZXN0X2xvZ2dpbmcKIAogaWYgdGhyZWFkaW5nOgotICAgIGNsYXNzIFRlc3RTTVRQQ2hhbm5lbChzbXRwZC5TTVRQQ2hhbm5lbCk6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGRlcml2ZWQgY2xhc3MgaGFzIGhhZCB0byBiZSBjcmVhdGVkIGJlY2F1c2Ugc210cGQgZG9lcyBub3QKLSAgICAgICAgc3VwcG9ydCB1c2Ugb2YgY3VzdG9tIGNoYW5uZWwgbWFwcywgYWx0aG91Z2ggdGhleSBhcmUgYWxsb3dlZCBieQotICAgICAgICBhc3luY29yZSdzIGRlc2lnbi4gSXNzdWUgIzExOTU5IGhhcyBiZWVuIHJhaXNlZCB0byBhZGRyZXNzIHRoaXMsCi0gICAgICAgIGFuZCBpZiByZXNvbHZlZCBzYXRpc2ZhY3RvcmlseSwgc29tZSBvZiB0aGlzIGNvZGUgY2FuIGJlIHJlbW92ZWQuCi0gICAgICAgICIiIgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBzb2NrbWFwKToKLSAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgc29ja21hcCkKLSAgICAgICAgICAgIHNlbGYuc210cF9zZXJ2ZXIgPSBzZXJ2ZXIKLSAgICAgICAgICAgIHNlbGYuY29ubiA9IGNvbm4KLSAgICAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9saW5lcyA9IFtdCi0gICAgICAgICAgICBzZWxmLnNtdHBfc3RhdGUgPSBzZWxmLkNPTU1BTkQKLSAgICAgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9ICcnCi0gICAgICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQotICAgICAgICAgICAgc2VsZi5yY3B0dG9zID0gW10KLSAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9ICcnCi0gICAgICAgICAgICBzZWxmLmZxZG4gPSBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnBlZXIgPSBjb25uLmdldHBlZXJuYW1lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICMgYSByYWNlIGNvbmRpdGlvbiAgbWF5IG9jY3VyIGlmIHRoZSBvdGhlciBlbmQgaXMgY2xvc2luZwotICAgICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCi0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gIT0gZXJybm8uRU5PVENPTk46Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLnB1c2goJzIyMCAlcyAlcycgJSAoc2VsZi5mcWRuLCBzbXRwZC5fX3ZlcnNpb25fXykpCi0gICAgICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGInXHJcbicpCi0gICAgICAgICAgICBzZWxmLmV4dGVuZGVkX3NtdHAgPSBGYWxzZQotCi0KICAgICBjbGFzcyBUZXN0U01UUFNlcnZlcihzbXRwZC5TTVRQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHRlc3QgU01UUCBzZXJ2ZXIuCkBAIC03MDIsMzcgKzY4MywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLiBUaGlzIGF2b2lkcyBjaGFuZ2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIDptb2Q6YGFzeW5jb3JlYCBtb2R1bGUncyBnbG9iYWwgc3RhdGUuCiAgICAgICAgICIiIgotICAgICAgICBjaGFubmVsX2NsYXNzID0gVGVzdFNNVFBDaGFubmVsCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHIsIGhhbmRsZXIsIHBvbGxfaW50ZXJ2YWwsIHNvY2ttYXApOgotICAgICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5zb2NrbWFwID0gc29ja21hcAotICAgICAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoMCkKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc29jaywgbWFwPXNvY2ttYXApCi0gICAgICAgICAgICAgICAgIyB0cnkgdG8gcmUtdXNlIGEgc2VydmVyIHBvcnQgaWYgcG9zc2libGUKLSAgICAgICAgICAgICAgICBzZWxmLnNldF9yZXVzZV9hZGRyKCkKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmQoYWRkcikKLSAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KLSAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIE5vbmUsIG1hcD1zb2NrbWFwKQorICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQogICAgICAgICAgICAgc2VsZi5faGFuZGxlciA9IGhhbmRsZXIKICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYucG9sbF9pbnRlcnZhbCA9IHBvbGxfaW50ZXJ2YWwKIAotICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBSZWRlZmluZWQgb25seSBiZWNhdXNlIHRoZSBiYXNlIGNsYXNzIGRvZXMgbm90IHBhc3MgaW4gYQotICAgICAgICAgICAgbWFwLCBmb3JjaW5nIHVzZSBvZiBhIGdsb2JhbCBpbiA6bW9kOmBhc3luY29yZWAuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGNoYW5uZWwgPSBzZWxmLmNoYW5uZWxfY2xhc3Moc2VsZiwgY29ubiwgYWRkciwgc2VsZi5zb2NrbWFwKQotCiAgICAgICAgIGRlZiBwcm9jZXNzX21lc3NhZ2Uoc2VsZiwgcGVlciwgbWFpbGZyb20sIHJjcHR0b3MsIGRhdGEpOgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBEZWxlZ2F0ZXMgdG8gdGhlIGhhbmRsZXIgcGFzc2VkIGluIHRvIHRoZSBzZXJ2ZXIncyBjb25zdHJ1Y3Rvci4KQEAgLTc2Myw4ICs3MjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpmdW5jOmBhc3luY29yZS5sb29wYC4KICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AocG9sbF9pbnRlcnZhbCwgbWFwPXNlbGYuc29ja21hcCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5fbWFwKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBPbiBGcmVlQlNEIDgsIGNsb3NpbmcgdGhlIHNlcnZlciByZXBlYXRhYmx5CiAgICAgICAgICAgICAgICAgIyByYWlzZXMgdGhpcyBlcnJvci4gV2Ugc3dhbGxvdyBpdCBpZiB0aGUKICAgICAgICAgICAgICAgICAjIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuCkBAIC04NzEsNyArODI5LDcgQEAKICAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKICAgICAgICAgICAgICAgICBpZiBzZWxmLnNzbGN0eDoKICAgICAgICAgICAgICAgICAgICAgc29jayA9IHNlbGYuc3NsY3R4LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICMgc29ja2V0IGVycm9ycyBhcmUgc2lsZW5jZWQgYnkgdGhlIGNhbGxlciwgcHJpbnQgdGhlbSBoZXJlCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiR290IGFuIGVycm9yOlxuJXNcbiIgJSBlKQogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC05MDgsNiArODY2LDkgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RUQ1BTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9iaW5kKCkKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KIAorICAgIGNsYXNzIFRlc3RVbml4U3RyZWFtU2VydmVyKFRlc3RUQ1BTZXJ2ZXIpOgorICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKICAgICBjbGFzcyBUZXN0VURQU2VydmVyKENvbnRyb2xNaXhpbiwgVGhyZWFkaW5nVURQU2VydmVyKToKICAgICAgICAgIiIiCiAgICAgICAgIEEgVURQIHNlcnZlciB3aGljaCBpcyBjb250cm9sbGFibGUgdXNpbmcgOmNsYXNzOmBDb250cm9sTWl4aW5gLgpAQCAtOTM3LDcgKzg5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoRGVsZWdhdGluZ1VEUFJlcXVlc3RIYW5kbGVyLCBzZWxmKS5maW5pc2goKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnNlcnZlci5fY2xvc2VkOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC05NTUsNiArOTE2LDkgQEAKICAgICAgICAgICAgIHN1cGVyKFRlc3RVRFBTZXJ2ZXIsIHNlbGYpLnNlcnZlcl9jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAKKyAgICBjbGFzcyBUZXN0VW5peERhdGFncmFtU2VydmVyKFRlc3RVRFBTZXJ2ZXIpOgorICAgICAgICBhZGRyZXNzX2ZhbWlseSA9IHNvY2tldC5BRl9VTklYCisKICMgLSBlbmQgb2Ygc2VydmVyX2hlbHBlciBzZWN0aW9uCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCkBAIC05OTMsNyArOTU3LDcgQEAKICAgICAiIiJUZXN0cyBmb3IgdGhlIE1lbW9yeUhhbmRsZXIuIiIiCiAKICAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoXHcrKTogKFxkKykkIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQpAQCAtMTA0Niw3ICsxMDEwLDcgQEAKIAogICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIC5pbmktc3R5bGUgY29uZmlnIGZpbGUuIiIiCiAKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oXHcrKSBcK1wrIChcdyspJCIKIAogICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCiAgICAgY29uZmlnMCA9ICIiIgpAQCAtMTI5NCw2ICsxMjU4LDI0IEBACiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKKyAgICBkZWYgdGVzdF9jb25maWcwX3VzaW5nX2NwX29rKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyBmaWxlIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBmaWxlID0gaW8uU3RyaW5nSU8odGV4dHdyYXAuZGVkZW50KHNlbGYuY29uZmlnMCkpCisgICAgICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZpbGUpCisgICAgICAgICAgICBsb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnKGNwKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICAgICAgIyBXb24ndCBvdXRwdXQgYW55dGhpbmcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICAjIE91dHB1dHMgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCiAgICAgZGVmIHRlc3RfY29uZmlnMV9vayhzZWxmLCBjb25maWc9Y29uZmlnMSk6CiAgICAgICAgICMgQSBjb25maWcgZmlsZSBkZWZpbmluZyBhIHN1Yi1wYXJzZXIgYXMgd2VsbC4KICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CkBAIC0xMzgzLDcgKzEzNjUsNyBAQAogCiAgICAgZGVmIHRlc3RfbG9nZ2VyX2Rpc2FibGluZyhzZWxmKToKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QpCi0gICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKQorICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignc29tZV9wcmlzdGluZV9sb2dnZXInKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5kaXNhYmxlX3Rlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dnZXIuZGlzYWJsZWQpCkBAIC0xMzk2LDE3ICsxMzc4LDIzIEBACiAKICAgICAiIiJUZXN0IGZvciBTb2NrZXRIYW5kbGVyIG9iamVjdHMuIiIiCiAKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RUQ1BTZXJ2ZXIKKyAgICAgICAgYWRkcmVzcyA9ICgnbG9jYWxob3N0JywgMCkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2V0IHVwIGEgVENQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgU29ja2V0SGFuZGxlcgogICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGFkZHIgPSAoJ2xvY2FsaG9zdCcsIDApCi0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdFRDUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9zb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAxKQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IHNlbGYuc2VydmVyX2NsYXNzKHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9zb2NrZXQsIDAuMDEpCiAgICAgICAgIHNlcnZlci5zdGFydCgpCiAgICAgICAgIHNlcnZlci5yZWFkeS53YWl0KCkKLSAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0KQorICAgICAgICBoY2xzID0gbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zb2NrX2hkbHIgPSBoY2xzKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgTm9uZSkKICAgICAgICAgc2VsZi5sb2dfb3V0cHV0ID0gJycKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0pCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLnNvY2tfaGRscikKQEAgLTE0NDYsMzUgKzE0MzQsNjkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvZ19vdXRwdXQsICJzcGFtXG5lZ2dzXG4iKQogCiAgICAgZGVmIHRlc3Rfbm9zZXJ2ZXIoc2VsZik6CisgICAgICAgICMgQXZvaWQgdGltaW5nLXJlbGF0ZWQgZmFpbHVyZXMgZHVlIHRvIFNvY2tldEhhbmRsZXIncyBvd24gaGFyZC13aXJlZAorICAgICAgICAjIG9uZS1zZWNvbmQgdGltZW91dCBvbiBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKSAoaXNzdWUgIzE2MjY0KS4KKyAgICAgICAgc2VsZi5zb2NrX2hkbHIucmV0cnlTdGFydCA9IDIuNQogICAgICAgICAjIEtpbGwgdGhlIHNlcnZlcgogICAgICAgICBzZWxmLnNlcnZlci5zdG9wKDIuMCkKLSAgICAgICAgI1RoZSBsb2dnaW5nIGNhbGwgc2hvdWxkIHRyeSB0byBjb25uZWN0LCB3aGljaCBzaG91bGQgZmFpbAorICAgICAgICAjIFRoZSBsb2dnaW5nIGNhbGwgc2hvdWxkIHRyeSB0byBjb25uZWN0LCB3aGljaCBzaG91bGQgZmFpbAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0RlbGliZXJhdGUgbWlzdGFrZScpCiAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CiAgICAgICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmV4Y2VwdGlvbignTmV2ZXIgc2VudCcpCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXJyb3IoJ05ldmVyIHNlbnQsIGVpdGhlcicpCiAgICAgICAgIG5vdyA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2tfaGRsci5yZXRyeVRpbWUgPiBub3cpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzZWxmLnNvY2tfaGRsci5yZXRyeVRpbWUsIG5vdykKICAgICAgICAgdGltZS5zbGVlcChzZWxmLnNvY2tfaGRsci5yZXRyeVRpbWUgLSBub3cgKyAwLjAwMSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5lcnJvcignTm9yIHRoaXMnKQogCitkZWYgX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKToKKyAgICBmZCwgZm4gPSB0ZW1wZmlsZS5ta3N0ZW1wKHByZWZpeD0ndGVzdF9sb2dnaW5nXycsIHN1ZmZpeD0nLnNvY2snKQorICAgIG9zLmNsb3NlKGZkKQorICAgICMganVzdCBuZWVkIGEgbmFtZSAtIGZpbGUgY2FuJ3QgYmUgcHJlc2VudCwgb3Igd2UnbGwgZ2V0IGFuCisgICAgIyAnYWRkcmVzcyBhbHJlYWR5IGluIHVzZScgZXJyb3IuCisgICAgb3MucmVtb3ZlKGZuKQorICAgIHJldHVybiBmbgorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgVW5peFNvY2tldEhhbmRsZXJUZXN0KFNvY2tldEhhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgd2l0aCB1bml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4U3RyZWFtU2VydmVyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgc2VsZi5hZGRyZXNzID0gX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKQorICAgICAgICBTb2NrZXRIYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBTb2NrZXRIYW5kbGVyVGVzdC50ZWFyRG93bihzZWxmKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5hZGRyZXNzKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgRGF0YWdyYW1IYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBEYXRhZ3JhbUhhbmRsZXIuIiIiCiAKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVRFBTZXJ2ZXIKKyAgICAgICAgYWRkcmVzcyA9ICgnbG9jYWxob3N0JywgMCkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2V0IHVwIGEgVURQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgRGF0YWdyYW1IYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VURQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IHNlbGYuc2VydmVyX2NsYXNzKHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0KQorICAgICAgICBoY2xzID0gbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscygnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBOb25lKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQpAQCAtMTUwOSwyMSArMTUzMSw0NCBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4RGF0YWdyYW1IYW5kbGVyVGVzdChEYXRhZ3JhbUhhbmRsZXJUZXN0KToKKworICAgICIiIlRlc3QgZm9yIERhdGFncmFtSGFuZGxlciB1c2luZyBVbml4IHNvY2tldHMuIiIiCisKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIERhdGFncmFtSGFuZGxlclRlc3Quc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgRGF0YWdyYW1IYW5kbGVyVGVzdC50ZWFyRG93bihzZWxmKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5hZGRyZXNzKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgU3lzTG9nSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogCiAgICAgIiIiVGVzdCBmb3IgU3lzTG9nSGFuZGxlciB1c2luZyBVRFAuIiIiCiAKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVRFBTZXJ2ZXIKKyAgICAgICAgYWRkcmVzcyA9ICgnbG9jYWxob3N0JywgMCkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2V0IHVwIGEgVURQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgU3lzTG9nSGFuZGxlcgogICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGFkZHIgPSAoJ2xvY2FsaG9zdCcsIDApCi0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdFVEUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc2xfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcigoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpKQorICAgICAgICBoY2xzID0gbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBzZWxmLnNsX2hkbHIgPSBoY2xzKCgnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zbF9oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zbF9oZGxyKQpAQCAtMTU2MSw2ICsxNjA2LDIzIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhTeXNMb2dIYW5kbGVyVGVzdChTeXNMb2dIYW5kbGVyVGVzdCk6CisKKyAgICAiIiJUZXN0IGZvciBTeXNMb2dIYW5kbGVyIHdpdGggVW5peCBzb2NrZXRzLiIiIgorCisgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICBzZXJ2ZXJfY2xhc3MgPSBUZXN0VW5peERhdGFncmFtU2VydmVyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgc2VsZi5hZGRyZXNzID0gX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKQorICAgICAgICBTeXNMb2dIYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBTeXNMb2dIYW5kbGVyVGVzdC50ZWFyRG93bihzZWxmKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5hZGRyZXNzKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgSFRUUEhhbmRsZXJUZXN0KEJhc2VUZXN0KToKICAgICAiIiJUZXN0IGZvciBIVFRQSGFuZGxlci4iIiIKIApAQCAtMTc4MSw3ICsxODQzLDcgQEAKICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgICAgICBzID0gc3RyZWFtLmdldHZhbHVlKCkKICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIikgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIiksIDApCiAKICAgICAgICAgICAgICNTZWUgaWYgYW4gZXhwbGljaXQgZmlsZSB1c2VzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgYV9maWxlID0gaW8uU3RyaW5nSU8oKQpAQCAtMTgxOSw3ICsxODgxLDcgQEAKIAogICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCiAKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oXHcrKSBcK1wrIChcdyspJCIKIAogICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCiAgICAgY29uZmlnMCA9IHsKQEAgLTIzOTEsNiArMjQ1MywzMiBAQAogICAgICAgICB9LAogICAgIH0KIAorICAgICMgQXMgY29uZmlnMCwgYnV0IHdpdGggcHJvcGVydGllcworICAgIGNvbmZpZzE0ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnLic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2Zvbyc6ICdiYXInLAorICAgICAgICAgICAgICAgICAgICAndGVybWluYXRvcic6ICchXG4nLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKwogICAgIG91dF9vZl9vcmRlciA9IHsKICAgICAgICAgInZlcnNpb24iOiAxLAogICAgICAgICAiZm9ybWF0dGVycyI6IHsKQEAgLTI2NTgsMTEgKzI3NDYsMjAgQEAKICAgICBkZWYgdGVzdF9jb25maWcxM19mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEzKQogCisgICAgZGVmIHRlc3RfY29uZmlnMTRfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxNCkKKyAgICAgICAgICAgIGggPSBsb2dnaW5nLl9oYW5kbGVyc1snaGFuZDEnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZvbywgJ2JhcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgudGVybWluYXRvciwgJyFcbicpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0V4Y2xhbWF0aW9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRwdXQuZ2V0dmFsdWUoKS5lbmRzd2l0aCgnRXhjbGFtYXRpb24hXG4nKSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ2xpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrJykKLSAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQpOgorICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCwgdmVyaWZ5PU5vbmUpOgogICAgICAgICB0ZXh0ID0gdGV4dC5lbmNvZGUoInV0Zi04IikKICAgICAgICAgIyBBc2sgZm9yIGEgcmFuZG9tbHkgYXNzaWduZWQgcG9ydCAoYnkgdXNpbmcgcG9ydCAwKQotICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDApCisgICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCwgdmVyaWZ5KQogICAgICAgICB0LnN0YXJ0KCkKICAgICAgICAgdC5yZWFkeS53YWl0KCkKICAgICAgICAgIyBOb3cgZ2V0IHRoZSBwb3J0IGFsbG9jYXRlZApAQCAtMjcyMiw2ICsyODE5LDY5IEBACiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0X2xpc3Rlbl92ZXJpZnkoc2VsZik6CisKKyAgICAgICAgZGVmIHZlcmlmeV9mYWlsKHN0dWZmKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGVmIHZlcmlmeV9yZXZlcnNlKHN0dWZmKToKKyAgICAgICAgICAgIHJldHVybiBzdHVmZls6Oi0xXQorCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICB0b19zZW5kID0gdGV4dHdyYXAuZGVkZW50KENvbmZpZ0ZpbGVUZXN0LmNvbmZpZzEpCisgICAgICAgICMgRmlyc3QsIHNwZWNpZnkgYSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdGhhdCB3aWxsIGZhaWwuCisgICAgICAgICMgV2UgZXhwZWN0IHRvIHNlZSBubyBvdXRwdXQsIHNpbmNlIG91ciBjb25maWd1cmF0aW9uCisgICAgICAgICMgbmV2ZXIgdG9vayBlZmZlY3QuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZCwgdmVyaWZ5X2ZhaWwpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCisgICAgICAgICMgTm93LCBwZXJmb3JtIG5vIHZlcmlmaWNhdGlvbi4gT3VyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyBzaG91bGQgdGFrZSBlZmZlY3QuCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kKSAgICAjIG5vIHZlcmlmeSBjYWxsYWJsZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgc3RpbGwgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQgYmVmb3JlLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCisgICAgICAgICMgTm93LCBwZXJmb3JtIHZlcmlmaWNhdGlvbiB3aGljaCB0cmFuc2Zvcm1zIHRoZSBieXRlcy4KKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmRbOjotMV0sIHZlcmlmeV9yZXZlcnNlKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnNScpLAorICAgICAgICAgICAgKCdFUlJPUicsICc2JyksCisgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBzdGlsbCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKICAgICBkZWYgdGVzdF9vdXRfb2Zfb3JkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYub3V0X29mX29yZGVyKQogICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215bW9kdWxlJykuaGFuZGxlcnNbMF0KQEAgLTI3ODEsMTQgKzI5NDEsMTQgQEAKICAgICAgICAgbDIgPSBsb2dnaW5nLmdldExvZ2dlcignZGVmLmdoaScpCiAgICAgICAgIGMxID0gci5nZXRDaGlsZCgneHl6JykKICAgICAgICAgYzIgPSByLmdldENoaWxkKCd1dncueHl6JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd1dncueHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzEsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKICAgICAgICAgYzEgPSBsMS5nZXRDaGlsZCgnZGVmJykKICAgICAgICAgYzIgPSBjMS5nZXRDaGlsZCgnZ2hpJykKICAgICAgICAgYzMgPSBsMS5nZXRDaGlsZCgnZGVmLmdoaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBjMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMSwgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGMzKQogCiAKIGNsYXNzIERlcml2ZWRMb2dSZWNvcmQobG9nZ2luZy5Mb2dSZWNvcmQpOgpAQCAtMjgzMSw3ICsyOTkxLDcgQEAKIAogY2xhc3MgUXVldWVIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAgICAgIyBEbyBub3QgYm90aGVyIHdpdGggYSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTMxMjUsMTMgKzMyODUsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMCAtIHJlbGVhc2UnLCBzZWxmLmNhbGxlZFstMV0pCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fYWNxdWlyZShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9mbHVzaChzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdmbHVzaCcsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnZmx1c2gnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2Nsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2Nsb3NlJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdjbG9zZScsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX3ZhbHVlZXJyb3JfaW5fYWNxdWlyZShzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgVmFsdWVFcnJvcikKQEAgLTMzMzgsNiArMzQ5OCwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcucm9vdC5sZXZlbCwgc2VsZi5vcmlnaW5hbF9sb2dnaW5nX2xldmVsKQogCiAgICAgZGVmIHRlc3RfZmlsZW5hbWUoc2VsZik6CisKKyAgICAgICAgZGVmIGNsZWFudXAoaDEsIGgyLCBmbik6CisgICAgICAgICAgICBoMS5jbG9zZSgpCisgICAgICAgICAgICBoMi5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisKICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0ndGVzdC5sb2cnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvZ2dpbmcucm9vdC5oYW5kbGVycyksIDEpCkBAIC0zMzQ1LDE3ICszNTExLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoYW5kbGVyLCBsb2dnaW5nLkZpbGVIYW5kbGVyKQogCiAgICAgICAgIGV4cGVjdGVkID0gbG9nZ2luZy5GaWxlSGFuZGxlcigndGVzdC5sb2cnLCAnYScpCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChleHBlY3RlZC5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnN0cmVhbS5tb2RlLCBleHBlY3RlZC5zdHJlYW0ubW9kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnN0cmVhbS5uYW1lLCBleHBlY3RlZC5zdHJlYW0ubmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXAsIGhhbmRsZXIsIGV4cGVjdGVkLCAndGVzdC5sb2cnKQogCiAgICAgZGVmIHRlc3RfZmlsZW1vZGUoc2VsZik6CisKKyAgICAgICAgZGVmIGNsZWFudXAoaDEsIGgyLCBmbik6CisgICAgICAgICAgICBoMS5jbG9zZSgpCisgICAgICAgICAgICBoMi5jbG9zZSgpCisgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisKICAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0ndGVzdC5sb2cnLCBmaWxlbW9kZT0nd2InKQogCiAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLnJvb3QuaGFuZGxlcnNbMF0KICAgICAgICAgZXhwZWN0ZWQgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCd0ZXN0LmxvZycsICd3YicpCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChleHBlY3RlZC5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyLnN0cmVhbS5tb2RlLCBleHBlY3RlZC5zdHJlYW0ubW9kZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXAsIGhhbmRsZXIsIGV4cGVjdGVkLCAndGVzdC5sb2cnKQogCiAgICAgZGVmIHRlc3Rfc3RyZWFtKHNlbGYpOgogICAgICAgICBzdHJlYW0gPSBpby5TdHJpbmdJTygpCkBAIC0zODExLDYgKzM5ODMsNjMgQEAKICAgICAgICAgYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbiwgJ1c3JywgZGVsYXk9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X2NvbXB1dGVfcm9sbG92ZXJfZGFpbHlfYXR0aW1lKHNlbGYpOgorICAgICAgICBjdXJyZW50VGltZSA9IDAKKyAgICAgICAgYXRUaW1lID0gZGF0ZXRpbWUudGltZSgxMiwgMCwgMCkKKyAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcigKKyAgICAgICAgICAgIHNlbGYuZm4sIHdoZW49J01JRE5JR0hUJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgdXRjPVRydWUsCisgICAgICAgICAgICBhdFRpbWU9YXRUaW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIoY3VycmVudFRpbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgY3VycmVudFRpbWUgKyAxMiAqIDYwICogNjApCisKKyAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3ZlcihjdXJyZW50VGltZSArIDEzICogNjAgKiA2MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBjdXJyZW50VGltZSArIDM2ICogNjAgKiA2MCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJoLmNsb3NlKCkKKworICAgICNAdW5pdHRlc3Quc2tpcElmKFRydWUsICdUZW1wb3JhcmlseSBza2lwcGVkIHdoaWxlIGZhaWx1cmVzIGludmVzdGlnYXRlZC4nKQorICAgIGRlZiB0ZXN0X2NvbXB1dGVfcm9sbG92ZXJfd2Vla2x5X2F0dGltZShzZWxmKToKKyAgICAgICAgY3VycmVudFRpbWUgPSBpbnQodGltZS50aW1lKCkpCisgICAgICAgIHRvZGF5ID0gY3VycmVudFRpbWUgLSBjdXJyZW50VGltZSAlIDg2NDAwCisKKyAgICAgICAgYXRUaW1lID0gZGF0ZXRpbWUudGltZSgxMiwgMCwgMCkKKworICAgICAgICB3ZGF5ID0gdGltZS5nbXRpbWUodG9kYXkpLnRtX3dkYXkKKyAgICAgICAgZm9yIGRheSBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICAgICAgc2VsZi5mbiwgd2hlbj0nVyVkJyAlIGRheSwgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgdXRjPVRydWUsCisgICAgICAgICAgICAgICAgYXRUaW1lPWF0VGltZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiB3ZGF5ID4gZGF5OgorICAgICAgICAgICAgICAgICAgICAjIFRoZSByb2xsb3ZlciBkYXkgaGFzIGFscmVhZHkgcGFzc2VkIHRoaXMgd2Vlaywgc28gd2UKKyAgICAgICAgICAgICAgICAgICAgIyBnbyBvdmVyIGludG8gbmV4dCB3ZWVrCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKDcgLSB3ZGF5ICsgZGF5KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gKGRheSAtIHdkYXkpCisgICAgICAgICAgICAgICAgIyBBdCB0aGlzIHBvaW50IGV4cGVjdGVkIGlzIGluIGRheXMgZnJvbSBub3csIGNvbnZlcnQgdG8gc2Vjb25kcworICAgICAgICAgICAgICAgIGV4cGVjdGVkICo9IDI0ICogNjAgKiA2MAorICAgICAgICAgICAgICAgICMgQWRkIGluIHRoZSByb2xsb3ZlciB0aW1lCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gMTIgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgIyBBZGQgaW4gYWRqdXN0bWVudCBmb3IgdG9kYXkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCArPSB0b2RheQorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHJoLmNvbXB1dGVSb2xsb3Zlcih0b2RheSkKKyAgICAgICAgICAgICAgICBpZiBhY3R1YWwgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdmYWlsZWQgaW4gdGltZXpvbmU6ICVkJyAlIHRpbWUudGltZXpvbmUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCdsb2NhbCB2YXJzOiAlcycgJSBsb2NhbHMoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgaWYgZGF5ID09IHdkYXk6CisgICAgICAgICAgICAgICAgICAgICMgZ29lcyBpbnRvIGZvbGxvd2luZyB3ZWVrCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDcgKiAyNCAqIDYwICogNjAKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIodG9kYXkgKyAxMyAqIDYwICogNjApCisgICAgICAgICAgICAgICAgaWYgYWN0dWFsICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkIGluIHRpbWV6b25lOiAlZCcgJSB0aW1lLnRpbWV6b25lKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnbG9jYWwgdmFyczogJXMnICUgbG9jYWxzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICByaC5jbG9zZSgpCisKKwogZGVmIHNlY3MoKiprdyk6CiAgICAgcmV0dXJuIGRhdGV0aW1lLnRpbWVkZWx0YSgqKmt3KSAvLyBkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz0xKQogCkBAIC0zODY5LDcgKzQwOTgsNyBAQAogICAgICAgICBoLmhhbmRsZShyKQogICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgIyBOb3cgc2VlIGlmIHRoZSBldmVudCBpcyByZWNvcmRlZAotICAgICAgICBzZWxmLmFzc2VydFRydWUobnVtX3JlY3MgPCB3aW4zMmV2dGxvZy5HZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcyhlbGgpKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobnVtX3JlY3MsIHdpbjMyZXZ0bG9nLkdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzKGVsaCkpCiAgICAgICAgIGZsYWdzID0gd2luMzJldnRsb2cuRVZFTlRMT0dfQkFDS1dBUkRTX1JFQUQgfCBcCiAgICAgICAgICAgICAgICAgd2luMzJldnRsb2cuRVZFTlRMT0dfU0VRVUVOVElBTF9SRUFECiAgICAgICAgIGZvdW5kID0gRmFsc2UKQEAgLTM5MDIsNyArNDEzMSw4IEBACiAgICAgICAgICAgICAgICAgIFNNVFBIYW5kbGVyVGVzdCwgRmlsZUhhbmRsZXJUZXN0LCBSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgTGFzdFJlc29ydFRlc3QsIExvZ1JlY29yZFRlc3QsIEV4Y2VwdGlvblRlc3QsCiAgICAgICAgICAgICAgICAgIFN5c0xvZ0hhbmRsZXJUZXN0LCBIVFRQSGFuZGxlclRlc3QsIE5URXZlbnRMb2dIYW5kbGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdAorICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LCBVbml4U29ja2V0SGFuZGxlclRlc3QsCisgICAgICAgICAgICAgICAgIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0LCBVbml4U3lzTG9nSGFuZGxlclRlc3QKICAgICAgICAgICAgICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKaW5kZXggYmFmMWQ2YS4uNmMzMGZlZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdiaWcnLCBzaWduZWQ9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnbGl0dGxlJywgc2lnbmVkPVRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdiaWcnLCBzaWduZWQ9RmFsc2UpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnYmlnJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwKS50b19ieXRlcygwLCAnYmlnJyksIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSkudG9fYnl0ZXMoNSwgJ2JpZycpLCBiJ1x4MDBceDAwXHgwMFx4MDBceDAxJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbHptYS5weSBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQppbmRleCAxNjBiMGU4Li4zZTczZDdmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sem1hLnB5CkBAIC0zODMsNiArMzgzLDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ3IikgYXMgZjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJ4IikgYXMgZjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKCksICJhIikgYXMgZjoKICAgICAgICAgICAgIHBhc3MKIApAQCAtNDEwLDEzICs0MTIsMjkgQEAKICAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCAiYWIiKToKICAgICAgICAgICAgICAgICBwYXNzCiAKKyAgICBkZWYgdGVzdF9pbml0X3dpdGhfeF9tb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIpOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9pbml0X2JhZF9tb2RlKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgKDMsICJ4IikpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAiIikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4IikKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ4dCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieCsiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInJ4IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJ3eCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAicnQiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtNjk4LDYgKzcxNiwyMCBAQAogICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWls6MTI4XSkpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQogCisgICAgZGVmIHRlc3RfcmVhZF90cnVuY2F0ZWQoc2VsZik6CisgICAgICAgICMgRHJvcCBzdHJlYW0gZm9vdGVyOiBDUkMgKDQgYnl0ZXMpLCBpbmRleCBzaXplICg0IGJ5dGVzKSwKKyAgICAgICAgIyBmbGFncyAoMiBieXRlcykgYW5kIG1hZ2ljIG51bWJlciAoMiBieXRlcykuCisgICAgICAgIHRydW5jYXRlZCA9IENPTVBSRVNTRURfWFpbOi0xMl0KKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkKQorICAgICAgICB3aXRoIExaTUFGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGxlbihJTlBVVCkpLCBJTlBVVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSAxMi1ieXRlIGhlYWRlci4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTIpOgorICAgICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKICAgICBkZWYgdGVzdF9yZWFkX2JhZF9hcmdzKHNlbGYpOgogICAgICAgICBmID0gTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC0xMDQxLDggKzEwNzMsNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgIiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAieCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAicmJ0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCkBAIC0xMDkxLDYgKzExMjEsMTYgQEAKICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKGJpbywgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoKSwgW3RleHRdKQogCisgICAgZGVmIHRlc3RfeF9tb2RlKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5saW5rLCBURVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggbHptYS5vcGVuKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNaXNjZWxsYW5lb3VzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkgYi9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKaW5kZXggZjJlNGM2My4uNzhlMmEzMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQpAQCAtNTk2LDcgKzU5Niw3IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIFRlc3RNYWlsYm94LnNldFVwKHNlbGYpCi0gICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKSBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CisgICAgICAgIGlmIChvcy5uYW1lID09ICdudCcpIG9yIChzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpOgogICAgICAgICAgICAgc2VsZi5fYm94LmNvbG9uID0gJyEnCiAKICAgICBkZWYgYXNzZXJ0TWFpbGJveEVtcHR5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5IGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CmluZGV4IDdlMzdmMzkuLjI1NWViODcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKQEAgLTI0LDM3ICsyNCwxMyBAQAogCiBjbGFzcyBJbnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGUgZnVsbCByYW5nZSBvZiBQeXRob24gaW50cy4KLSAgICAgICAgbiA9IHN5cy5tYXhzaXplCisgICAgICAgICMgVGVzdCBhIHJhbmdlIG9mIFB5dGhvbiBpbnRzIGxhcmdlciB0aGFuIHRoZSBtYWNoaW5lIHdvcmQgc2l6ZS4KKyAgICAgICAgbiA9IHN5cy5tYXhzaXplICoqIDIKICAgICAgICAgd2hpbGUgbjoKICAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgogICAgICAgICAgICAgICAgIHNlbGYuaGVscGVyKGV4cGVjdGVkKQogICAgICAgICAgICAgbiA9IG4gPj4gMQogCi0gICAgZGVmIHRlc3RfaW50NjQoc2VsZik6Ci0gICAgICAgICMgU2ltdWxhdGUgaW50IG1hcnNoYWxpbmcgb24gYSA2NC1iaXQgYm94LiAgVGhpcyBpcyBtb3N0IGludGVyZXN0aW5nIGlmCi0gICAgICAgICMgd2UncmUgcnVubmluZyB0aGUgdGVzdCBvbiBhIDMyLWJpdCBib3gsIG9mIGNvdXJzZS4KLQotICAgICAgICBkZWYgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcodmFsdWUsIG5ieXRlcyk6Ci0gICAgICAgICAgICBiID0gYnl0ZWFycmF5KCkKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5ieXRlcyk6Ci0gICAgICAgICAgICAgICAgYi5hcHBlbmQodmFsdWUgJiAweGZmKQotICAgICAgICAgICAgICAgIHZhbHVlID4+PSA4Ci0gICAgICAgICAgICByZXR1cm4gYgotCi0gICAgICAgIG1heGludDY0ID0gKDEgPDwgNjMpIC0gMQotICAgICAgICBtaW5pbnQ2NCA9IC1tYXhpbnQ2NC0xCi0KLSAgICAgICAgZm9yIGJhc2UgaW4gbWF4aW50NjQsIG1pbmludDY0LCAtbWF4aW50NjQsIC0obWluaW50NjQgPj4gMSk6Ci0gICAgICAgICAgICB3aGlsZSBiYXNlOgotICAgICAgICAgICAgICAgIHMgPSBiJ0knICsgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcoYmFzZSwgOCkKLSAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBnb3QpCi0gICAgICAgICAgICAgICAgaWYgYmFzZSA9PSAtMTogICMgYSBmaXhlZC1wb2ludCBmb3Igc2hpZnRpbmcgcmlnaHQgMQotICAgICAgICAgICAgICAgICAgICBiYXNlID0gMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPj49IDEKLQogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGZvciBiIGluIChUcnVlLCBGYWxzZSk6CiAgICAgICAgICAgICBzZWxmLmhlbHBlcihiKQpAQCAtMjAxLDEwICsxNzcsMTQgQEAKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RfbG9hZHNfcmVjdXJzaW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvYWRzXzJ4X2NvZGUoc2VsZik6CiAgICAgICAgIHMgPSBiJ2MnICsgKGInWCcgKiA0KjQpICsgYid7JyAqIDIqKjIwCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIHMpCiAKKyAgICBkZWYgdGVzdF9sb2Fkc19yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHMgPSBiJ2MnICsgKGInWCcgKiA0KjUpICsgYid7JyAqIDIqKjIwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIHMpCisKICAgICBkZWYgdGVzdF9yZWN1cnNpb25fbGltaXQoc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIGEgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmUuCiAgICAgICAgIGhlYWQgPSBsYXN0ID0gW10KQEAgLTI4MiwxNSArMjYyLDIwIEBACiAKICAgICBkZWYgdGVzdF9iYWRfcmVhZGVyKHNlbGYpOgogICAgICAgICBjbGFzcyBCYWRSZWFkZXIoaW8uQnl0ZXNJTyk6Ci0gICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgICAgICAgICBiID0gc3VwZXIoKS5yZWFkKG4pCisgICAgICAgICAgICBkZWYgcmVhZGludG8oc2VsZiwgYnVmKToKKyAgICAgICAgICAgICAgICBuID0gc3VwZXIoKS5yZWFkaW50byhidWYpCiAgICAgICAgICAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA+IDQ6Ci0gICAgICAgICAgICAgICAgICAgIGIgKz0gYicgJyAqIDEwKio2Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgICAgICAgICAgbiArPSAxMCoqNgorICAgICAgICAgICAgICAgIHJldHVybiBuCiAgICAgICAgIGZvciB2YWx1ZSBpbiAoMS4wLCAxaiwgYicwMTIzNDU2Nzg5JywgJzAxMjM0NTY3ODknKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZFJlYWRlcihtYXJzaGFsLmR1bXBzKHZhbHVlKSkpCiAKKyAgICBkZWYgX3Rlc3RfZW9mKHNlbGYpOgorICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcygoImhlbGxvIiwgImRvbGx5IiwgTm9uZSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgbWFyc2hhbC5sb2FkcywgZGF0YVswOiBpXSkKKwogTEFSR0VfU0laRSA9IDIqKjMxCiBwb2ludGVyX3NpemUgPSA4IGlmIHN5cy5tYXhzaXplID4gMHhGRkZGRkZGRiBlbHNlIDQKIApAQCAtMzM1LDYgKzMyMCwxMjIgQEAKICAgICBkZWYgdGVzdF9ieXRlYXJyYXkoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHNlbGYuY2hlY2tfdW5tYXJzaGFsbGFibGUoYnl0ZWFycmF5KHNpemUpKQogCitkZWYgQ29sbGVjdE9iamVjdElEcyhpZHMsIG9iaik6CisgICAgIiIiQ29sbGVjdCBvYmplY3QgaWRzIHNlZW4gaW4gYSBzdHJ1Y3R1cmUiIiIKKyAgICBpZiBpZChvYmopIGluIGlkczoKKyAgICAgICAgcmV0dXJuCisgICAgaWRzLmFkZChpZChvYmopKQorICAgIGlmIGlzaW5zdGFuY2Uob2JqLCAobGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0KSk6CisgICAgICAgIGZvciBlIGluIG9iajoKKyAgICAgICAgICAgIENvbGxlY3RPYmplY3RJRHMoaWRzLCBlKQorICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIGRpY3QpOgorICAgICAgICBmb3IgaywgdiBpbiBvYmouaXRlbXMoKToKKyAgICAgICAgICAgIENvbGxlY3RPYmplY3RJRHMoaWRzLCBrKQorICAgICAgICAgICAgQ29sbGVjdE9iamVjdElEcyhpZHMsIHYpCisgICAgcmV0dXJuIGxlbihpZHMpCisKK2NsYXNzIEluc3RhbmNpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgorICAgIGludG9iaiA9IDEyMzMyMQorICAgIGZsb2F0b2JqID0gMS4yMzQ1CisgICAgc3Ryb2JqID0gImFiY2RlIiozCisgICAgZGljdG9iaiA9IHsiaGVsbG8iOmZsb2F0b2JqLCAiZ29vZGJ5ZSI6ZmxvYXRvYmosIGZsb2F0b2JqOiJoZWxsbyJ9CisKKyAgICBkZWYgaGVscGVyMyhzZWxmLCByc2FtcGxlLCByZWN1cnNpdmU9RmFsc2UsIHNpbXBsZT1GYWxzZSk6CisgICAgICAgICN3ZSBoYXZlIHR3byBpbnN0YW5jZXMKKyAgICAgICAgc2FtcGxlID0gKHJzYW1wbGUsIHJzYW1wbGUpCisKKyAgICAgICAgbjAgPSBDb2xsZWN0T2JqZWN0SURzKHNldCgpLCBzYW1wbGUpCisKKyAgICAgICAgczMgPSBtYXJzaGFsLmR1bXBzKHNhbXBsZSwgMykKKyAgICAgICAgbjMgPSBDb2xsZWN0T2JqZWN0SURzKHNldCgpLCBtYXJzaGFsLmxvYWRzKHMzKSkKKworICAgICAgICAjc2FtZSBudW1iZXIgb2YgaW5zdGFuY2VzIGdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4zLCBuMCkKKworICAgICAgICBpZiBub3QgcmVjdXJzaXZlOgorICAgICAgICAgICAgI2NhbiBjb21wYXJlIHdpdGggdmVyc2lvbiAyCisgICAgICAgICAgICBzMiA9IG1hcnNoYWwuZHVtcHMoc2FtcGxlLCAyKQorICAgICAgICAgICAgbjIgPSBDb2xsZWN0T2JqZWN0SURzKHNldCgpLCBtYXJzaGFsLmxvYWRzKHMyKSkKKyAgICAgICAgICAgICNvbGQgZm9ybWF0IGdlbmVyYXRlZCBtb3JlIGluc3RhbmNlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKG4yLCBuMCkKKworICAgICAgICAgICAgI2lmIGNvbXBsZXggb2JqZWN0cyBhcmUgaW4gdGhlcmUsIG9sZCBmb3JtYXQgaXMgbGFyZ2VyCisgICAgICAgICAgICBpZiBub3Qgc2ltcGxlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4oczIpLCBsZW4oczMpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oczIpLCBsZW4oczMpKQorCisgICAgZGVmIHRlc3RJbnQoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuaW50b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5pbnRvYmosIHNpbXBsZT1UcnVlKQorCisgICAgZGVmIHRlc3RGbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5mbG9hdG9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuZmxvYXRvYmopCisKKyAgICBkZWYgdGVzdFN0cihzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5zdHJvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLnN0cm9iaikKKworICAgIGRlZiB0ZXN0RGljdChzZWxmKToKKyAgICAgICAgc2VsZi5oZWxwZXIoc2VsZi5kaWN0b2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5kaWN0b2JqKQorCisgICAgZGVmIHRlc3RNb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGNvZGUgPSBmLnJlYWQoKQorICAgICAgICBpZiBfX2ZpbGVfXy5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShjb2RlLCBfX2ZpbGVfXywgImV4ZWMiKQorICAgICAgICBzZWxmLmhlbHBlcihjb2RlKQorICAgICAgICBzZWxmLmhlbHBlcjMoY29kZSkKKworICAgIGRlZiB0ZXN0UmVjdXJzaW9uKHNlbGYpOgorICAgICAgICBkID0gZGljdChzZWxmLmRpY3RvYmopCisgICAgICAgIGRbInNlbGYiXSA9IGQKKyAgICAgICAgc2VsZi5oZWxwZXIzKGQsIHJlY3Vyc2l2ZT1UcnVlKQorICAgICAgICBsID0gW3NlbGYuZGljdG9ial0KKyAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgc2VsZi5oZWxwZXIzKGwsIHJlY3Vyc2l2ZT1UcnVlKQorCitjbGFzcyBDb21wYXRpYmlsaXR5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCB2ZXJzaW9uKToKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGYucmVhZCgpCisgICAgICAgIGlmIF9fZmlsZV9fLmVuZHN3aXRoKCIucHkiKToKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGNvZGUsIF9fZmlsZV9fLCAiZXhlYyIpCisgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKGNvZGUsIHZlcnNpb24pCisgICAgICAgIG1hcnNoYWwubG9hZHMoZGF0YSkKKworICAgIGRlZiB0ZXN0MFRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgwKQorCisgICAgZGVmIHRlc3QxVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDEpCisKKyAgICBkZWYgdGVzdDJUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMikKKworICAgIGRlZiB0ZXN0M1RvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgzKQorCitjbGFzcyBJbnRlcm5pbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgorICAgIHN0cm9iaiA9ICJ0aGlzIGlzIGFuIGludGVybmVkIHN0cmluZyIKKyAgICBzdHJvYmogPSBzeXMuaW50ZXJuKHN0cm9iaikKKworICAgIGRlZiB0ZXN0SW50ZXJuKHNlbGYpOgorICAgICAgICBzID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNlbGYuc3Ryb2JqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBzZWxmLnN0cm9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzKSwgaWQoc2VsZi5zdHJvYmopKQorICAgICAgICBzMiA9IHN5cy5pbnRlcm4ocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChzMiksIGlkKHMpKQorCisgICAgZGVmIHRlc3ROb0ludGVybihzZWxmKToKKyAgICAgICAgcyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzZWxmLnN0cm9iaiwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi5zdHJvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQocyksIGlkKHNlbGYuc3Ryb2JqKSkKKyAgICAgICAgczIgPSBzeXMuaW50ZXJuKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoczIpLCBpZChzKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSW50VGVzdENhc2UsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQppbmRleCBkNjExYTMxLi40ZGU0ZjY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKQEAgLTUyMCwxMiArNTIwLDEyIEBACiAgICAgZGVmIHRlc3RfcmVsYXRpdmVfc2VlayhzZWxmKToKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAzLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTEsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAzLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIDEsIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0aW9fcHJvcGVydGllcyhzZWxmKToKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CmluZGV4IGVlNmIxNWEuLmZmZDRmNTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQorKysgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKQEAgLTM1Miw2ICszNTIsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTFswXSwgYikKIAorICAgIGRlZiB0ZXN0X3JldmVyc2VkKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIGFzbGlzdCA9IGxpc3QocmV2ZXJzZWQobS50b2xpc3QoKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQobSkpLCBhc2xpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQobSkpLCBsaXN0KG1bOjotMV0pKQorCisKICMgVmFyaWF0aW9ucyBvbiBzb3VyY2Ugb2JqZWN0cyBmb3IgdGhlIGJ1ZmZlcjogYnl0ZXMtbGlrZSBvYmplY3RzLCB0aGVuIGFycmF5cwogIyB3aXRoIGl0ZW1zaXplID4gMS4KICMgTk9URTogc3VwcG9ydCBmb3IgbXVsdGktZGltZW5zaW9uYWwgb2JqZWN0cyBpcyB1bmltcGxlbWVudGVkLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5IGIvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CmluZGV4IDg5OWRmOGQuLjZjYTVlMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKQEAgLTEsMTEgKzEsMTIgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXMsIF8yRywgXzRHKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcsIGdjX2NvbGxlY3QpCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc3lzCitpbXBvcnQgd2Vha3JlZgogCiAjIFNraXAgdGVzdCBpZiB3ZSBjYW4ndCBpbXBvcnQgbW1hcC4KIG1tYXAgPSBpbXBvcnRfbW9kdWxlKCdtbWFwJykKQEAgLTI0NSw3ICsyNDYsNyBAQAogCiAgICAgZGVmIHRlc3RfYmFkX2ZpbGVfZGVzYyhzZWxmKToKICAgICAgICAgIyBUcnkgb3BlbmluZyBhIGJhZCBmaWxlIGRlc2NyaXB0b3IuLi4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMobW1hcC5lcnJvciwgbW1hcC5tbWFwLCAtMiwgNDA5NikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbW1hcC5tbWFwLCAtMiwgNDA5NikKIAogICAgIGRlZiB0ZXN0X3RvdWdoZXJfZmluZChzZWxmKToKICAgICAgICAgIyBEbyBhIHRvdWdoZXIgLmZpbmQoKSB0ZXN0LiAgU0YgYnVnIDUxNTk0MyBwb2ludGVkIG91dCB0aGF0LCBpbiAyLjIsCkBAIC02NTUsNyArNjU2LDcgQEAKICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbS5yZXNpemUoMCkgIyB3aWxsIHJhaXNlIFdpbmRvd3NFcnJvcgorICAgICAgICAgICAgbS5yZXNpemUoMCkgIyB3aWxsIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CkBAIC02NzEsNyArNjcyLDcgQEAKICAgICAgICAgIyBwYXJhbWV0ZXJzIHRvIF9nZXRfb3NmaGFuZGxlLgogICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobW1hcC5lcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAocy5maWxlbm8oKSwgMTApCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzLmNsb3NlKCkKQEAgLTY4MiwxNCArNjgzLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGF0IHRoZSBJT0Vycm9yIGdldHMgcGFzc2VkIHRocm91Z2gKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIE9TRXJyb3IgZ2V0cyBwYXNzZWQgdGhyb3VnaAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgogICAgICAgICAgICAgd2l0aCBtbWFwLm1tYXAoLTEsIDEwKSBhcyBtOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgIyBDaGVjayBtbWFwIG9iamVjdHMgYXJlIHdlYWtyZWZhYmxlCisgICAgICAgIG1tID0gbW1hcC5tbWFwKC0xLCAxNikKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihtbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBtbSkKKyAgICAgICAgZGVsIG1tCisgICAgICAgIGdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKIGNsYXNzIExhcmdlTW1hcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTcwNyw3ICs3MTcsNyBAQAogICAgICAgICAgICAgZi5zZWVrKG51bV96ZXJvZXMpCiAgICAgICAgICAgICBmLndyaXRlKHRhaWwpCiAgICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSBsYXJnZWZpbGUgc3VwcG9ydCIpCiAgICAgICAgIHJldHVybiBmCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CmluZGV4IGU1YTI1MjUuLjEyMzAyOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5CkBAIC0xLDYgKzEsOCBAQAogIyBUZXN0IHRoZSBtb2R1bGUgdHlwZQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgZ2NfY29sbGVjdAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAogaW1wb3J0IHN5cwogTW9kdWxlVHlwZSA9IHR5cGUoc3lzKQpAQCAtMzMsNyArMzUsMTIgQEAKICAgICAgICAgZm9vID0gTW9kdWxlVHlwZSgiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6IE5vbmV9KQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX2xvYWRlcl9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX3BhY2thZ2VfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmb28uX19zcGVjX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF9hc2NpaV9kb2NzdHJpbmcoc2VsZik6CiAgICAgICAgICMgQVNDSUkgZG9jc3RyaW5nCkBAIC00MSw3ICs0OCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fbmFtZV9fLCAiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAotICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIn0pCisgICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmV9KQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9kb2NzdHJpbmcoc2VsZik6CiAgICAgICAgICMgVW5pY29kZSBkb2NzdHJpbmcKQEAgLTQ5LDcgKzU4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jXHUxMjM0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2NcdTEyMzQifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF9yZWluaXQoc2VsZik6CiAgICAgICAgICMgUmVpbml0aWFsaXphdGlvbiBzaG91bGQgbm90IHJlcGxhY2UgdGhlIF9fZGljdF9fCkBAIC02MSwxMCArNzIsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kb2NfXywgImZvb2RvYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLmJhciwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLAotICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsICJiYXIiOiA0Mn0pCisgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyLAorICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLCAiX19zcGVjX18iOiBOb25lfSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2RpY3RfXyBpcyBkKQogCi0gICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQogICAgIGRlZiB0ZXN0X2RvbnRfY2xlYXJfZGljdChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgNzE0MC4KICAgICAgICAgZGVmIGYoKToKQEAgLTg5LDYgKzEwMCwxNCBAQAogICAgICAgICBnY19jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXN0cm95ZWQsIFsxXSkKIAorICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6CisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCJmb28iKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgbSkKKyAgICAgICAgZGVsIG0KKyAgICAgICAgZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX21pbmltYWwoc2VsZik6CiAgICAgICAgICMgcmVwcnMgd2hlbiBtb2R1bGVzIGhhdmUgbm8gX19maWxlX18sIF9fbmFtZV9fLCBvciBfX2xvYWRlcl9fCiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQpAQCAtMTEwLDEzICsxMjksMTkgQEAKICAgICAgICAgbS5fX2ZpbGVfXyA9ICcvdG1wL2Zvby5weScKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPG1vZHVsZSAnPycgZnJvbSAnL3RtcC9mb28ucHknPiIpCiAKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2xvYWRlcl9hc19Ob25lKHNlbGYpOgorICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKKyAgICAgICAgYXNzZXJ0IG0uX19sb2FkZXJfXyBpcyBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjxtb2R1bGUgJ2Zvbyc+IikKKwogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfYmFyZV9sb2FkZXJfYnV0X25vX25hbWUoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQogICAgICAgICBkZWwgbS5fX25hbWVfXwogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEJhcmVMb2FkZXIKKyAgICAgICAgbG9hZGVyX3JlcHIgPSByZXByKEJhcmVMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKDxjbGFzcyAndGVzdC50ZXN0X21vZHVsZS5CYXJlTG9hZGVyJz4pPiIpCisgICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKHt9KT4iLmZvcm1hdChsb2FkZXJfcmVwcikpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2Z1bGxfbG9hZGVyX2J1dF9ub19uYW1lKHNlbGYpOgogICAgICAgICAjIG0uX19sb2FkZXJfXy5tb2R1bGVfcmVwcigpIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBtb2R1bGUgaGFzIG5vCkBAIC0xMjYsMTUgKzE1MSwxNyBAQAogICAgICAgICBkZWwgbS5fX25hbWVfXwogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEZ1bGxMb2FkZXIKKyAgICAgICAgbG9hZGVyX3JlcHIgPSByZXByKEZ1bGxMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKDxjbGFzcyAndGVzdC50ZXN0X21vZHVsZS5GdWxsTG9hZGVyJz4pPiIpCisgICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnPycgKHt9KT4iLmZvcm1hdChsb2FkZXJfcmVwcikpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl93aXRoX2JhcmVfbG9hZGVyKHNlbGYpOgogICAgICAgICBtID0gTW9kdWxlVHlwZSgnZm9vJykKICAgICAgICAgIyBZZXMsIGEgY2xhc3Mgbm90IGFuIGluc3RhbmNlLgogICAgICAgICBtLl9fbG9hZGVyX18gPSBCYXJlTG9hZGVyCisgICAgICAgIG1vZHVsZV9yZXByID0gcmVwcihCYXJlTG9hZGVyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcmVwcihtKSwgIjxtb2R1bGUgJ2ZvbycgKDxjbGFzcyAndGVzdC50ZXN0X21vZHVsZS5CYXJlTG9hZGVyJz4pPiIpCisgICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnZm9vJyAoe30pPiIuZm9ybWF0KG1vZHVsZV9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfZnVsbF9sb2FkZXIoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQpAQCAtMTY0LDggKzE5MSwyNSBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfc291cmNlKHNlbGYpOgogICAgICAgICByID0gcmVwcih1bml0dGVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzoyNV0sICI8bW9kdWxlICd1bml0dGVzdCcgZnJvbSAnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy0xMzpdLCAiX19pbml0X18ucHknPiIpCisgICAgICAgIHN0YXJ0c193aXRoID0gIjxtb2R1bGUgJ3VuaXR0ZXN0JyBmcm9tICciCisgICAgICAgIGVuZHNfd2l0aCA9ICJfX2luaXRfXy5weSc+IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOmxlbihzdGFydHNfd2l0aCldLCBzdGFydHNfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAneyFyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHshcn0nLmZvcm1hdChyLCBzdGFydHNfd2l0aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoclstbGVuKGVuZHNfd2l0aCk6XSwgZW5kc193aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGRvZXMgbm90IGVuZCB3aXRoIHshcn0nLmZvcm1hdChyLCBlbmRzX3dpdGgpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2ZpbmFsaXphdGlvbl9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBNb2R1bGUgZ2xvYmFscyBhbmQgYnVpbHRpbnMgc2hvdWxkIHN0aWxsIGJlIGF2YWlsYWJsZSBkdXJpbmcgc2h1dGRvd24KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCAiZnJvbSB0ZXN0IGltcG9ydCBmaW5hbF9hIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCisgICAgICAgIGxpbmVzID0gb3V0LnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsaW5lcyksIHsKKyAgICAgICAgICAgIGIieCA9IGEiLAorICAgICAgICAgICAgYiJ4ID0gYiIsCisgICAgICAgICAgICBiImZpbmFsX2EueCA9IGEiLAorICAgICAgICAgICAgYiJmaW5hbF9iLnggPSBiIiwKKyAgICAgICAgICAgIGIibGVuID0gbGVuIiwKKyAgICAgICAgICAgIGIic2h1dGlsLnJtdHJlZSA9IHJtdHJlZSJ9KQogCiAgICAgIyBmcm96ZW4gYW5kIG5hbWVzcGFjZSBtb2R1bGUgcmVwcnMgYXJlIHRlc3RlZCBpbiBpbXBvcnRsaWIuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CmluZGV4IGZlYjdiZDUuLjkxMTQ4YTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQpAQCAtMTc2LDU3ICsxNzYsMjggQEAKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKIAogY2xhc3MgVGVzdF9TdHJlYW1Xcml0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGlmIGxlbignXFUwMDAxMjM0NScpID09IDI6ICMgVUNTMgotICAgICAgICBkZWYgdGVzdF9nYjE4MDMwKHNlbGYpOgotICAgICAgICAgICAgcz0gaW8uQnl0ZXNJTygpCi0gICAgICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcignZ2IxODAzMCcpKHMpCi0gICAgICAgICAgICBjLndyaXRlKCcxMjMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMV0gKyAnXFUwMDAxMjM0NScgKyAnXHVhYzAwXHUwMGFjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjLnJlc2V0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4OTA3XHg5NTlceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQorICAgIGRlZiB0ZXN0X2diMTgwMzAoc2VsZik6CisgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcignZ2IxODAzMCcpKHMpCisgICAgICAgIGMud3JpdGUoJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCisgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKKyAgICAgICAgYy53cml0ZSgnXHVhYzAwXHUwMGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg4MjdceGNmNVx4ODEwXHg4NTEnKQogCi0gICAgICAgIGRlZiB0ZXN0X3V0Zl84KHNlbGYpOgotICAgICAgICAgICAgcz0gaW8uQnl0ZXNJTygpCi0gICAgICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShzKQotICAgICAgICAgICAgYy53cml0ZSgnMTIzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQotCi0gICAgICAgICAgICAjIFB5dGhvbiB1dGYtOCBjb2RlYyBjYW4ndCBidWZmZXIgc3Vycm9nYXRlIHBhaXJzIHlldC4KLSAgICAgICAgICAgIGlmIDA6Ci0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMV0gKyAnXFUwMDAxMjM0NScgKyAnXHVhYzAwXHUwMGFjJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCi0gICAgICAgICAgICAgICAgYy5yZXNldCgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjXHhlZFx4YTBceDg4JykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1sxXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWNceGVkXHhhMFx4ODhceGVkXHhiZFx4ODUnKQotCi0gICAgZWxzZTogIyBVQ1M0Ci0gICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF91dGZfOChzZWxmKToKKyAgICAgICAgcz0gaW8uQnl0ZXNJTygpCisgICAgICAgIGMgPSBjb2RlY3MuZ2V0d3JpdGVyKCd1dGYtOCcpKHMpCisgICAgICAgIGMud3JpdGUoJzEyMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCisgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKKyAgICAgICAgYy53cml0ZSgnXHVhYzAwXHUwMGFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCisgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnCisgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKIAogICAgIGRlZiB0ZXN0X3N0cmVhbXdyaXRlcl9zdHJ3cml0ZShzZWxmKToKICAgICAgICAgcyA9IGlvLkJ5dGVzSU8oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9yay5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJmNGU3NQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ2ZvcmsnKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYTA0YQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ2ZvcmtzZXJ2ZXInKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzRhZTllCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ3NwYXduJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkgYi9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CmluZGV4IDcwNjdiMTIuLjY2Mzk2MTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9uYW1lc3BhY2VfcGtncy5weQpAQCAtMSw3ICsxLDEwIEBACi1pbXBvcnQgc3lzCiBpbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaW1wb3J0bGliLmFiYworaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CkBAIC0yODYsOSArMjg5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhX3Rlc3QuYXR0ciwgJ2luIG1vZHVsZScpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgqTmFtZXNwYWNlUGFja2FnZVRlc3QuX19zdWJjbGFzc2VzX18oKSkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKaW5kZXggMWQ1MjcxMy4uNzFhNGVjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQpAQCAtMjY2LDcgKzI2Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VydmVyLmhlbHAoKQotICAgICAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5IGIvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CmluZGV4IDI4ZWRlMzQuLmFiMmVlYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdGRhdGEgPSBvcGVuX3VybHJlc291cmNlKFRFU1REQVRBVVJMLCBlbmNvZGluZz0idXRmLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQogICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdGRhdGEuY2xvc2UpCiAgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQppbmRleCBmODA5ODc2Li4yODVlZjYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQpAQCAtMjU2LDYgKzI1Niw0MCBAQAogICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZ3MgKCM0ODA0KQogICAgICAgICAgICAgICAgICAgICBudHBhdGguc2FtZW9wZW5maWxlKC0xLCAtMSkKIAorICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxDOlxcIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJDOi8iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXGM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkKSkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBjdXJyZW50IGZvbGRlciBpc24ndCB0aGUgcm9vdCBmb2xkZXIKKyAgICAgICAgICAgICMgKG9yIGFueSBvdGhlciB2b2x1bWUgcm9vdCkuIFRoZSBkcml2ZS1yZWxhdGl2ZQorICAgICAgICAgICAgIyBsb2NhdGlvbnMgYmVsb3cgY2Fubm90IHRoZW4gcmVmZXIgdG8gbW91bnQgcG9pbnRzCisgICAgICAgICAgICAjCisgICAgICAgICAgICBkcml2ZSwgcGF0aCA9IG50cGF0aC5zcGxpdGRyaXZlKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qob3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShudHBhdGguaXNtb3VudChkcml2ZS5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLnVwcGVyKCkpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIlxcXFxsb2NhbGhvc3RcXGMkXFwiKSkKIAogY2xhc3MgTnRDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhdGhtb2R1bGUgPSBudHBhdGgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQppbmRleCA2Mzg0MzcwLi40Nzg1MTA3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CkBAIC00LDcgKzQsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBpZiBub3QgaGFzYXR0cihvcywgIm9wZW5wdHkiKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gb3BlbnB0eSgpIGF2YWlsYWJsZS4iKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5vcGVucHR5KCkgbm90IGF2YWlsYWJsZS4iKQogCiAKIGNsYXNzIE9wZW5wdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CmluZGV4IGZhNjA4YjkuLmFiNThhOTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMSw4ICsxLDEwIEBACi1pbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorcHlfb3BlcmF0b3IgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ29wZXJhdG9yJywgYmxvY2tlZD1bJ19vcGVyYXRvciddKQorY19vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBmcmVzaD1bJ19vcGVyYXRvciddKQorCiBjbGFzcyBTZXExOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsc3QpOgogICAgICAgICBzZWxmLmxzdCA9IGxzdApAQCAtMzIsOCArMzQsOSBAQAogICAgICAgICByZXR1cm4gb3RoZXIgKiBzZWxmLmxzdAogCiAKLWNsYXNzIE9wZXJhdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZToKICAgICBkZWYgdGVzdF9sdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmx0LCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubHQoMSwgMCkpCkBAIC00NCw2ICs0Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sdCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbGUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmxlKDEsIDApKQpAQCAtNTQsNiArNTgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubGUoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC02Nyw2ICs3Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZXEoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yCkBAIC04MCw2ICs4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5uZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ2UoMSwgMCkpCkBAIC05MCw2ICs5Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuZ2UoMSwgMi4wKSkKIAogICAgIGRlZiB0ZXN0X2d0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ3QsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmd0KDEsIDApKQpAQCAtMTAwLDIyICsxMDgsMjYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5ndCgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfYWJzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFicywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5hYnMoLTEpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygxKSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hZGQsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hZGQoMywgNCkgPT0gNykKIAogICAgIGRlZiB0ZXN0X2JpdHdpc2VfYW5kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYW5kXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuYW5kXygweGYsIDB4YSkgPT0gMHhhKQogCiAgICAgZGVmIHRlc3RfY29uY2F0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbmNhdCgncHknLCAndGhvbicpID09ICdweXRob24nKQpAQCAtMTI1LDEyICsxMzcsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQsIDEzLCAyOSkKIAogICAgIGRlZiB0ZXN0X2NvdW50T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb3VudE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5jb3VudE9mKFsxLCAyLCAxLCAzLCAxLCA0XSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCA1KSA9PSAwKQogCiAgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gWzQsIDMsIDIsIDFdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZGVsaXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhLCBOb25lKQpAQCAtMTM4LDMzICsxNTIsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gWzQsIDIsIDFdKQogCiAgICAgZGVmIHRlc3RfZmxvb3JkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5mbG9vcmRpdiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmZsb29yZGl2KDUsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF90cnVlZGl2KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IudHJ1ZWRpdiwgNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IudHJ1ZWRpdig1LCAyKSA9PSAyLjUpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSByYW5nZSgxMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZXRpdGVtKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIGEsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZXRpdGVtKGEsIDIpID09IDIpCiAKICAgICBkZWYgdGVzdF9pbmRleE9mKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaW5kZXhPZihbNCwgMywgMiwgMV0sIDMpID09IDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIFs0LCAzLCAyLCAxXSwgMCkKIAogICAgIGRlZiB0ZXN0X2ludmVydChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbnZlcnQsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaW52KDQpLCAtNSkKIAogICAgIGRlZiB0ZXN0X2xzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubHNoaWZ0KDUsIDEpID09IDEwKQpAQCAtMTcyLDE2ICsxOTIsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IubHNoaWZ0LCAyLCAtMSkKIAogICAgIGRlZiB0ZXN0X21vZChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tb2QsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubW9kKDUsIDIpID09IDEpCiAKICAgICBkZWYgdGVzdF9tdWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubXVsLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IubXVsKDUsIDIpID09IDEwKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm5lZywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoNSksIC01KQpAQCAtMTkwLDExICsyMTMsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5uZWcoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9vcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5vcl8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5vcl8oMHhhLCAweDUpID09IDB4ZikKIAogICAgIGRlZiB0ZXN0X3BvcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3MsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IucG9zKDUpLCA1KQpAQCAtMjAzLDE0ICsyMjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoLTApLCAwKQogCiAgICAgZGVmIHRlc3RfcG93KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3coMyw1KSwgMyoqNSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX3Bvd19fKDMsNSksIDMqKjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvdywgMSwgMiwgMykKIAogICAgIGRlZiB0ZXN0X3JzaGlmdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIE5vbmUsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IucnNoaWZ0KDUsIDEpID09IDIpCkBAIC0yMTgsMTIgKzI0NCwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5yc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb250YWlucywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5jb250YWlucyhyYW5nZSg0KSwgNSkpCiAKICAgICBkZWYgdGVzdF9zZXRpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBsaXN0KHJhbmdlKDMpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgTm9uZSwgTm9uZSkKQEAgLTIzMiwxMSArMjYwLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLnNldGl0ZW0sIGEsIDQsIDIpCiAKICAgICBkZWYgdGVzdF9zdWIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc3ViLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3Iuc3ViKDUsIDIpID09IDMpCiAKICAgICBkZWYgdGVzdF90cnV0aChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTI0OCwxMSArMjc4LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IudHJ1dGgoW10pKQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV94b3Ioc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IueG9yLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IueG9yKDB4YiwgMHhjKSA9PSAweDcpCiAKICAgICBkZWYgdGVzdF9pcyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfKQpAQCAtMjYwLDYgKzI5Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IuaXNfKGEsYykpCiAKICAgICBkZWYgdGVzdF9pc19ub3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGIgPSAneHl6cGRxJwogICAgICAgICBjID0gYVs6M10gKyBiWzM6XQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmlzX25vdCkKQEAgLTI2Nyw2ICszMDAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuaXNfbm90KGEsYykpCiAKICAgICBkZWYgdGVzdF9hdHRyZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBBKCkKQEAgLTMxNiw2ICszNTAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICgnYXJ0aHVyJywgJ3Rob21hcycsICdqb2huc29uJykpCiAKICAgICBkZWYgdGVzdF9pdGVtZ2V0dGVyKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSAnQUJDREUnCiAgICAgICAgIGYgPSBvcGVyYXRvci5pdGVtZ2V0dGVyKDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ0MnKQpAQCAtMzUwLDEyICszODUsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pdGVtZ2V0dGVyKDIsICd4JywgNSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9tZXRob2RjYWxsZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tZXRob2RjYWxsZXIpCiAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICBkZWYgZm9vKHNlbGYsICphcmdzLCAqKmt3ZHMpOgogICAgICAgICAgICAgICAgIHJldHVybiBhcmdzWzBdICsgYXJnc1sxXQogICAgICAgICAgICAgZGVmIGJhcihzZWxmLCBmPTQyKToKICAgICAgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICAgICAgZGVmIGJheigqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByZXR1cm4ga3dkc1snbmFtZSddLCBrd2RzWydzZWxmJ10KICAgICAgICAgYSA9IEEoKQogICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdmb28nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBmLCBhKQpAQCAtMzY2LDggKzQwNCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIGEsIGEpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JhcicsIGY9NSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCA1KQorICAgICAgICBmID0gb3BlcmF0b3IubWV0aG9kY2FsbGVyKCdiYXonLCBuYW1lPSdzcGFtJywgc2VsZj0nZWdncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdzcGFtJywgJ2VnZ3MnKSkKIAogICAgIGRlZiB0ZXN0X2lucGxhY2Uoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9faWFkZF9fICAgICAoc2VsZiwgb3RoZXIpOiByZXR1cm4gImlhZGQiCiAgICAgICAgICAgICBkZWYgX19pYW5kX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFuZCIKQEAgLTM5NiwzNyArNDM3LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXRydWVkaXYgKGMsIDUpLCAiaXRydWVkaXYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLml4b3IgICAgIChjLCA1KSwgIml4b3IiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmljb25jYXQgIChjLCBjKSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFkZF9fICAgICAoYywgNSksICJpYWRkIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lhbmRfXyAgICAgKGMsIDUpLCAiaWFuZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pZmxvb3JkaXZfXyhjLCA1KSwgImlmbG9vcmRpdiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbHNoaWZ0X18gIChjLCA1KSwgImlsc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW1vZF9fICAgICAoYywgNSksICJpbW9kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ltdWxfXyAgICAgKGMsIDUpLCAiaW11bCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pb3JfXyAgICAgIChjLCA1KSwgImlvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcG93X18gICAgIChjLCA1KSwgImlwb3ciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXJzaGlmdF9fICAoYywgNSksICJpcnNoaWZ0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lzdWJfXyAgICAgKGMsIDUpLCAiaXN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pdHJ1ZWRpdl9fIChjLCA1KSwgIml0cnVlZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l4b3JfXyAgICAgKGMsIDUpLCAiaXhvciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pY29uY2F0X18gIChjLCBjKSwgImlhZGQiKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgaW1wb3J0IHN5cwotICAgIHRlc3RfY2xhc3NlcyA9ICgKLSAgICAgICAgT3BlcmF0b3JUZXN0Q2FzZSwKLSAgICApCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCisgICAgICAgICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHR5cGUoc2VsZi52YWx1ZSkgaXMgdHlwZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi52YWx1ZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCiAKLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgotICAgICAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKLSAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBwcmludChjb3VudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoW10sIDIpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KGl0ZXIoWzEsIDIsIDNdKSksIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKDIpKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKE5vdEltcGxlbWVudGVkKSwgNCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoWChUeXBlRXJyb3IpLCAxMiksIDEyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBvcGVyYXRvci5sZW5ndGhfaGludChYKCJhYmMiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoLTIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKExvb2t1cEVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTG9va3VwRXJyb3IpKQorCisgICAgZGVmIHRlc3RfZHVuZGVyX2lzX29yaWdpbmFsKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCisKKyAgICAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBkaXIob3BlcmF0b3IpIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgoJ18nKV0KKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBvcmlnID0gZ2V0YXR0cihvcGVyYXRvciwgbmFtZSkKKyAgICAgICAgICAgIGR1bmRlciA9IGdldGF0dHIob3BlcmF0b3IsICdfXycgKyBuYW1lLnN0cmlwKCdfJykgKyAnX18nLCBOb25lKQorICAgICAgICAgICAgaWYgZHVuZGVyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZHVuZGVyLCBvcmlnKQorCitjbGFzcyBQeU9wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHB5X29wZXJhdG9yCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfb3BlcmF0b3IsICdyZXF1aXJlcyBfb3BlcmF0b3InKQorY2xhc3MgQ09wZXJhdG9yVGVzdENhc2UoT3BlcmF0b3JUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IGNfb3BlcmF0b3IKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4odmVyYm9zZT1UcnVlKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weSBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKaW5kZXggNzhkZTI3OC4uOTQ3MzAxMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CkBAIC03MzAsNyArNzMwLDcgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9hbmRfbG9uZ19vcHRpb25fc3BsaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgInh5eiIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICd4eXonLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfbG9uZ19vcHRpb25fYXBwZW5kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItLWZvbz1iYXIiLCAiLWIiLCAiMTIzIiwgIi0tZm9vIiwgImJheiJdLApAQCAtNzQwLDE1ICs3NDAsMTUgQEAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fc3BsaXRfb25lX3Bvc2l0aW9uYWxfYXJnKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICJmb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiZm9vIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiYmFyIl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9jb25zdW1lc19zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgIi0tIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogTm9uZX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImZvbyIsICJiYXIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiLS1mb28iLCAiYmFyIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAiLS0iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IFsiYmFyIl19LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCiAKICAgICBkZWYgdGVzdF9zaG9ydF9vcHRpb25fam9pbmVkX2FuZF9zZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hYiIsICItLSIsICItLWZvbyIsICJiYXIiXSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IDYwMWM2YjIuLjFmZmE3ZGEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtMjQsNiArMjQsOSBAQAogaW1wb3J0IHN0YXQKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZnJhY3Rpb25zCitpbXBvcnQgcGlja2xlCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzIsNiArMzUsMTAgQEAKICAgICBpbXBvcnQgcmVzb3VyY2UKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICByZXNvdXJjZSA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIApAQCAtMjU2LDYgKzI2MywxMyBAQAogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCiAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRfYXR0cmlidXRlcyhmbmFtZSkKIAorICAgIGRlZiB0ZXN0X3N0YXRfcmVzdWx0X3BpY2tsZShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gb3Muc3RhdChzZWxmLmZuYW1lKQorICAgICAgICBwID0gcGlja2xlLmR1bXBzKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4MDNjb3NcbnN0YXRfcmVzdWx0XG4nLCBwKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0dmZzJyksICd0ZXN0IG5lZWRzIG9zLnN0YXR2ZnMoKScpCiAgICAgZGVmIHRlc3Rfc3RhdHZmc19hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0yNjMsNyArMjc3LDcgQEAKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgT24gQXRoZU9TLCBnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgotICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLnN0YXR2ZnMoKSBmYWlsZWQgd2l0aCBFTk9TWVMnKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZl9iZnJlZSwgcmVzdWx0WzNdKQpAQCAtMzAwLDYgKzMxNCwyMSBAQAogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3N0YXR2ZnMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCBvcy5zdGF0dmZzKCkiKQorICAgIGRlZiB0ZXN0X3N0YXR2ZnNfcmVzdWx0X3BpY2tsZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gb3Muc3RhdHZmcyhzZWxmLmZuYW1lKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgIyBPbiBBdGhlT1MsIGdsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUworICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9TWVM6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3Muc3RhdHZmcygpIGZhaWxlZCB3aXRoIEVOT1NZUycpCisKKyAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidceDAzY29zXG5zdGF0dmZzX3Jlc3VsdFxuJywgcCkKKyAgICAgICAgdW5waWNrbGVkID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB1bnBpY2tsZWQpCisKICAgICBkZWYgdGVzdF91dGltZV9kaXIoc2VsZik6CiAgICAgICAgIGRlbHRhID0gMTAwMDAwMAogICAgICAgICBzdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCkBAIC00NzgsOSArNTA3LDkgQEAKICAgICAgICAgIyBWZXJpZnkgdGhhdCBhbiBvcGVuIGZpbGUgY2FuIGJlIHN0YXQnZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3Muc3RhdChyImM6XHBhZ2VmaWxlLnN5cyIpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gMjogIyBmaWxlIGRvZXMgbm90IGV4aXN0OyBjYW5ub3QgcnVuIHRlc3QKLSAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgcGFzcyAjIGZpbGUgZG9lcyBub3QgZXhpc3Q7IGNhbm5vdCBydW4gdGVzdAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb3VsZCBub3Qgc3RhdCBwYWdlZmlsZS5zeXMiKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCkBAIC04NzYsNiArOTA1LDE3IEBACiAgICAgICAgIG9zLm1ha2VkaXJzKHBhdGgsIG1vZGU9bW9kZSwgZXhpc3Rfb2s9VHJ1ZSkKICAgICAgICAgb3MudW1hc2sob2xkX21hc2spCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnY2hvd24nKSwgJ3Rlc3QgbmVlZHMgb3MuY2hvd24nKQorICAgIGRlZiB0ZXN0X2Nob3duX3VpZF9naWRfYXJndW1lbnRzX211c3RfYmVfaW5kZXgoc2VsZik6CisgICAgICAgIHN0YXQgPSBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB1aWQgPSBzdGF0LnN0X3VpZAorICAgICAgICBnaWQgPSBzdGF0LnN0X2dpZAorICAgICAgICBmb3IgdmFsdWUgaW4gKC0xLjAsIC0xaiwgZGVjaW1hbC5EZWNpbWFsKC0xKSwgZnJhY3Rpb25zLkZyYWN0aW9uKC0yLCAyKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLmNob3duLCBzdXBwb3J0LlRFU1RGTiwgdmFsdWUsIGdpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MuY2hvd24sIHN1cHBvcnQuVEVTVEZOLCB1aWQsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgdWlkLCBnaWQpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgLTEsIC0xKSkKKwogICAgIGRlZiB0ZXN0X2V4aXN0X29rX3NfaXNnaWRfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCAnZGlyMScpCiAgICAgICAgIFNfSVNHSUQgPSBzdGF0LlNfSVNHSUQKQEAgLTExMzMsMjcgKzExNzMsMjcgQEAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgV2luMzJFcnJvclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVuYW1lLCBzdXBwb3J0LlRFU1RGTiwgc3VwcG9ydC5URVNURk4rIi5iYWsiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCiAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MucmVtb3ZlLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVtb3ZlLCBzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X2NoZGlyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNoZGlyLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfbWtkaXIoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MubWtkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWtkaXIsIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBvcy51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF91dGltZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy51dGltZSwgc3VwcG9ydC5URVNURk4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2NobW9kKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLmNobW9kLCBzdXBwb3J0LlRFU1RGTiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQogCiBjbGFzcyBUZXN0SW52YWxpZEZEKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzaW5nbGVzID0gWyJmY2hkaXIiLCAiZHVwIiwgImZkb3BlbiIsICJmZGF0YXN5bmMiLCAiZnN0YXQiLApAQCAtMTI3OCw0MSArMTMxOCw1NyBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXR1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0dWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXR1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXR1aWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHVpZCwgMTw8MzIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0Z2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGdpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0Z2lkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldGV1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZXVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRldWlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0ZXVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0ZXVpZCwgMTw8MzIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0ZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRlZ2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGVnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGVnaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRlZ2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRlZ2lkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZXVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZXVpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG9zLmVycm9yLCBvcy5zZXRyZXVpZCwgMCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZXVpZCwgMTw8MzIsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAwLCAxPDwzMikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZXVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZXVpZCgpJykKKyAgICBkZWYgdGVzdF9zZXRyZXVpZF9uZWcxKHNlbGYpOgorICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAorICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCisgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBvcyxzeXM7b3Muc2V0cmV1aWQoLTEsLTEpO3N5cy5leGl0KDApJ10pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0cmVnaWQoc2VsZik6CiAgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDAgYW5kIG5vdCBIQVZFX1dIRUVMX0dST1VQOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJlZ2lkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJlZ2lkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJlZ2lkKCknKQorICAgIGRlZiB0ZXN0X3NldHJlZ2lkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZWdpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIlBvc2l4IHNwZWNpZmljIHRlc3RzIikKIGNsYXNzIFBlcDM4M1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNTAyLDYgKzE1NTgsNTIgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyTGlzdGRpclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGxpc3RkaXIgb24gV2luZG93cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBkaXJfbmFtZSA9ICdTVUIlZCcgJSBpCisgICAgICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZGlyX25hbWUpCisgICAgICAgICAgICBmaWxlX25hbWUgPSAnRklMRSVkJyAlIGkKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZmlsZV9uYW1lKQorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlyX3BhdGgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiSSdtICVzIGFuZCBwcm91ZCBvZiBpdC4gQmxhbWUgdGVzdF9vcy5cbiIgJSBmaWxlX3BhdGgpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuZXh0ZW5kKFtkaXJfbmFtZSwgZmlsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzLnNvcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9ub19leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggaXMgbm90IGFuICJleHRlbmRlZCIgcGF0aC4iIiIKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIoc3VwcG9ydC5URVNURk4pKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMpCisgICAgICAgICMgYnl0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikpKSwKKyAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocGF0aCkgZm9yIHBhdGggaW4gc2VsZi5jcmVhdGVkX3BhdGhzXSkKKworICAgIGRlZiB0ZXN0X2xpc3RkaXJfZXh0ZW5kZWRfcGF0aChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aGVuIHRoZSBwYXRoIHN0YXJ0cyB3aXRoICdcXFxcP1xcJy4iIiIKKyAgICAgICAgIyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNtYXhwYXRoCisgICAgICAgICMgdW5pY29kZQorICAgICAgICBwYXRoID0gJ1xcXFw/XFwnICsgb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMpCisgICAgICAgICMgYnl0ZXMKKyAgICAgICAgcGF0aCA9IGInXFxcXD9cXCcgKyBvcy5mc2VuY29kZShvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKSwKKyAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocGF0aCkgZm9yIHBhdGggaW4gc2VsZi5jcmVhdGVkX3BhdGhzXSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKIGNsYXNzIFdpbjMyU3ltbGlua1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmaWxlbGluayA9ICdmaWxlbGlua3Rlc3QnCkBAIC0yMTY2LDYgKzIyNjgsMTk3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKIAogCitjbGFzcyBPU0Vycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgU3RyKHN0cik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMgPSBbXQorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzID0gW10KKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLmFwcGVuZChkZWNvZGVkKQorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLmFwcGVuZChTdHIoZGVjb2RlZCkpCisgICAgICAgIGlmIHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW5jb2RlZCA9IHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmNvZGVkID0gb3MuZnNlbmNvZGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChlbmNvZGVkKQorICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcy5hcHBlbmQobWVtb3J5dmlldyhlbmNvZGVkKSkKKworICAgICAgICBzZWxmLmZpbGVuYW1lcyA9IHNlbGYuYnl0ZXNfZmlsZW5hbWVzICsgc2VsZi51bmljb2RlX2ZpbGVuYW1lcworCisgICAgZGVmIHRlc3Rfb3NlcnJvcl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZnVuY3MgPSBbCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmNoZGlyLCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmNobW9kLCAwbzc3NyksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxzdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLm9wZW4sIG9zLk9fUkRPTkxZKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mucm1kaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc3RhdCwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy51bmxpbmssKSwKKyAgICAgICAgXQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIGZ1bmNzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5yZW5hbWUsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCBiImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZW5hbWUsICJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MucmVwbGFjZSwgImRzdCIpLAorICAgICAgICAgICAgICAgICMgSXNzdWUgIzE2NDE0OiBEb24ndCB0ZXN0IHVuZGVjb2RhYmxlIG5hbWVzIHdpdGggbGlzdGRpcigpCisgICAgICAgICAgICAgICAgIyBiZWNhdXNlIG9mIGEgV2luZG93cyBidWcuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgV2l0aCB0aGUgQU5TSSBjb2RlIHBhZ2UgOTMyLCBvcy5saXN0ZGlyKGInXHhlNycpIHJldHVybiBhbgorICAgICAgICAgICAgICAgICMgZW1wdHkgbGlzdCAoaW5zdGVhZCBvZiBmYWlsaW5nKSwgd2hlcmVhcyBvcy5saXN0ZGlyKGInXHhmZicpCisgICAgICAgICAgICAgICAgIyByYWlzZXMgYSBGaWxlTm90Rm91bmRFcnJvci4gSXQgbG9va3MgbGlrZSBhIFdpbmRvd3MgYnVnOgorICAgICAgICAgICAgICAgICMgYidceGU3JyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIEZpbmRGaXJzdEZpbGVBKGInXHhlNycpCisgICAgICAgICAgICAgICAgIyBmYWlscyB3aXRoIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EICgyKSwgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICMgRVJST1JfUEFUSF9OT1RfRk9VTkQgKDMpLgorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5saXN0ZGlyLCksCisgICAgICAgICAgICApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVwbGFjZSwgImRzdCIpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImNob3duIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaG93biwgMCwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxjaG93biwgMCwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJ0cnVuY2F0ZSIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MudHJ1bmNhdGUsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hmbGFncyIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MuY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2hmbGFncyIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNoZmxhZ3MsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hyb290Iik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaHJvb3QsKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLmxpbmssIGIiZHN0IikpCisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5saW5rLCAiZHN0IikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpc3R4YXR0ciIpOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxpc3R4YXR0ciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuZ2V0eGF0dHIsICJ1c2VyLnRlc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnNldHhhdHRyLCAidXNlci50ZXN0IiwgYid1c2VyJyksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZW1vdmV4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG1vZCIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNobW9kLCAwbzc3NykpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJyZWFkbGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZWFkbGluaywpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5yZWFkbGluaywpKQorCisgICAgICAgIGZvciBmaWxlbmFtZXMsIGZ1bmMsICpmdW5jX2FyZ3MgaW4gZnVuY3M6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmdW5jKG5hbWUsICpmdW5jX2FyZ3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVyci5maWxlbmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiB0aHJvd24gYnkge30iLmZvcm1hdChmdW5jKSkKKworY2xhc3MgQ1BVQ291bnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY3B1X2NvdW50KHNlbGYpOgorICAgICAgICBjcHVzID0gb3MuY3B1X2NvdW50KCkKKyAgICAgICAgaWYgY3B1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcHVzLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoY3B1cywgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFVzIikKKworCitjbGFzcyBGREluaGVyaXRhbmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9zZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICAjIGNsZWFyIEZEX0NMT0VYRUMgZmxhZworICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICBmbGFncyAmPSB+ZmNudGwuRkRfQ0xPRVhFQworICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GRF9DTE9FWEVDKQorCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKyAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3BpcGUnKSwgIm5lZWQgb3MucGlwZSgpIikKKyAgICBkZWYgdGVzdF9waXBlKHNlbGYpOgorICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHJmZCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3ZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHJmZCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZSh3ZmQpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgZmQxID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQxKQorCisgICAgICAgIGZkMiA9IG9zLmR1cChmZDEpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDIpLCBGYWxzZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdkdXAyJyksICJuZWVkIG9zLmR1cDIoKSIpCisgICAgZGVmIHRlc3RfZHVwMihzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKworICAgICAgICAjIGluaGVyaXRhYmxlIGJ5IGRlZmF1bHQKKyAgICAgICAgZmQyID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIGZkMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShmZDIpCisKKyAgICAgICAgIyBmb3JjZSBub24taW5oZXJpdGFibGUKKyAgICAgICAgZmQzID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIGZkMywgaW5oZXJpdGFibGU9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDMpLCBGYWxzZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdvcGVucHR5JyksICJuZWVkIG9zLm9wZW5wdHkoKSIpCisgICAgZGVmIHRlc3Rfb3BlbnB0eShzZWxmKToKKyAgICAgICAgbWFzdGVyX2ZkLCBzbGF2ZV9mZCA9IG9zLm9wZW5wdHkoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIG1hc3Rlcl9mZCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBzbGF2ZV9mZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkKSwgRmFsc2UpCisKKwogQHN1cHBvcnQucmVhcF90aHJlYWRzCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCkBAIC0yMTgzLDYgKzI0NzYsNyBAQAogICAgICAgICBQb3NpeFVpZEdpZFRlc3RzLAogICAgICAgICBQZXAzODNUZXN0cywKICAgICAgICAgV2luMzJLaWxsVGVzdHMsCisgICAgICAgIFdpbjMyTGlzdGRpclRlc3RzLAogICAgICAgICBXaW4zMlN5bWxpbmtUZXN0cywKICAgICAgICAgTm9uTG9jYWxTeW1saW5rVGVzdHMsCiAgICAgICAgIEZTRW5jb2RpbmdUZXN0cywKQEAgLTIxOTUsNyArMjQ4OSwxMCBAQAogICAgICAgICBFeHRlbmRlZEF0dHJpYnV0ZVRlc3RzLAogICAgICAgICBXaW4zMkRlcHJlY2F0ZWRCeXRlc0FQSSwKICAgICAgICAgVGVybXNpemVUZXN0cywKKyAgICAgICAgT1NFcnJvclRlc3RzLAogICAgICAgICBSZW1vdmVEaXJzVGVzdHMsCisgICAgICAgIENQVUNvdW50VGVzdHMsCisgICAgICAgIEZESW5oZXJpdGFuY2VUZXN0cywKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQppbmRleCAzOTA4YTA1Li5jOWUyYTI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBkZWYgcGxheV9zb3VuZF9maWxlKHNlbGYsIGRhdGEsIHJhdGUsIHNzaXplLCBuY2hhbm5lbHMpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpAQCAtMTkwLDcgKzE5MCw3IEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKLSAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBJT0Vycm9yKSBhcyBtc2c6CisgICAgZXhjZXB0IChvc3NhdWRpb2Rldi5lcnJvciwgT1NFcnJvcikgYXMgbXNnOgogICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hOGQ3NDBmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5CkBAIC0wLDAgKzEsMTcyOSBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorVEVTVEZOID0gc3VwcG9ydC5URVNURk4KKwordHJ5OgorICAgIGltcG9ydCBncnAsIHB3ZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdycCA9IHB3ZCA9IE5vbmUKKworCitjbGFzcyBfQmFzZUZsYXZvdXJUZXN0KG9iamVjdCk6CisKKyAgICBkZWYgX2NoZWNrX3BhcnNlX3BhcnRzKHNlbGYsIGFyZywgZXhwZWN0ZWQpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnBhcnNlX3BhcnRzCisgICAgICAgIHNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgYWx0c2VwID0gc2VsZi5mbGF2b3VyLmFsdHNlcAorICAgICAgICBhY3R1YWwgPSBmKFt4LnJlcGxhY2UoJy8nLCBzZXApIGZvciB4IGluIGFyZ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgaWYgYWx0c2VwOgorICAgICAgICAgICAgYWN0dWFsID0gZihbeC5yZXBsYWNlKCcvJywgYWx0c2VwKSBmb3IgeCBpbiBhcmddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHNfY29tbW9uKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX3BhcnNlX3BhcnRzCisgICAgICAgIHNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgIyBVbmFuY2hvcmVkIHBhcnRzCisgICAgICAgIGNoZWNrKFtdLCAgICAgICAgICAgICAgICAgICAoJycsICcnLCBbXSkpCisgICAgICAgIGNoZWNrKFsnYSddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYS8nXSwgICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiJ10sICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgIyBFeHBhbnNpb24KKyAgICAgICAgY2hlY2soWydhL2InXSwgICAgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EvYi8nXSwgICAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiL2MnLCAnZCddLCAgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdiLy9jJywgJ2QnXSwgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiL2MvJywgJ2QnXSwgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgRWxpbWluYXRpbmcgc3RhbmRhbG9uZSBkb3RzCisgICAgICAgIGNoZWNrKFsnLiddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbXSkpCisgICAgICAgIGNoZWNrKFsnLicsICcuJywgJ2InXSwgICAgICAoJycsICcnLCBbJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICcuJywgJ2InXSwgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy4nLCAnLiddLCAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgIyBUaGUgZmlyc3QgcGFydCBpcyBhbmNob3JlZAorICAgICAgICBjaGVjayhbJy9hL2InXSwgICAgICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnL2EnLCAnYiddLCAgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvYS8nLCAnYiddLCAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICAjIElnbm9yaW5nIHBhcnRzIGJlZm9yZSBhbiBhbmNob3JlZCBwYXJ0CisgICAgICAgIGNoZWNrKFsnYScsICcvYicsICdjJ10sICAgICAoJycsIHNlcCwgW3NlcCwgJ2InLCAnYyddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy9iJywgJy9jJ10sICAgICgnJywgc2VwLCBbc2VwLCAnYyddKSkKKworCitjbGFzcyBQb3NpeEZsYXZvdXJUZXN0KF9CYXNlRmxhdm91clRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmbGF2b3VyID0gcGF0aGxpYi5fcG9zaXhfZmxhdm91cgorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHMoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgIyBDb2xsYXBzaW5nIG9mIGV4Y2VzcyBsZWFkaW5nIHNsYXNoZXMsIGV4Y2VwdCBmb3IgdGhlIGRvdWJsZS1zbGFzaAorICAgICAgICAjIHNwZWNpYWwgY2FzZS4KKyAgICAgICAgY2hlY2soWycvL2EnLCAnYiddLCAgICAgICAgICAgICAoJycsICcvLycsIFsnLy8nLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy8vL2EnLCAnYiddLCAgICAgICAgICAgICgnJywgJy8nLCBbJy8nLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy8vLy9hJywgJ2InXSwgICAgICAgICAgICgnJywgJy8nLCBbJy8nLCAnYScsICdiJ10pKQorICAgICAgICAjIFBhdGhzIHdoaWNoIGxvb2sgbGlrZSBOVCBwYXRocyBhcmVuJ3QgdHJlYXRlZCBzcGVjaWFsbHkKKyAgICAgICAgY2hlY2soWydjOmEnXSwgICAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2M6YSddKSkKKyAgICAgICAgY2hlY2soWydjOlxcYSddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2M6XFxhJ10pKQorICAgICAgICBjaGVjayhbJ1xcYSddLCAgICAgICAgICAgICAgICAgICgnJywgJycsIFsnXFxhJ10pKQorCisgICAgZGVmIHRlc3Rfc3BsaXRyb290KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnNwbGl0cm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJycpLCAoJycsICcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYScpLCAoJycsICcnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2EvYicpLCAoJycsICcnLCAnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYS9iLycpLCAoJycsICcnLCAnYS9iLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hJyksICgnJywgJy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hL2InKSwgKCcnLCAnLycsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvYS9iLycpLCAoJycsICcvJywgJ2EvYi8nKSkKKyAgICAgICAgIyBUaGUgcm9vdCBpcyBjb2xsYXBzZWQgd2hlbiB0aGVyZSBhcmUgcmVkdW5kYW50IHNsYXNoZXMKKyAgICAgICAgIyBleGNlcHQgd2hlbiB0aGVyZSBhcmUgZXhhY3RseSB0d28gbGVhZGluZyBzbGFzaGVzLCB3aGljaAorICAgICAgICAjIGlzIGEgc3BlY2lhbCBjYXNlIGluIFBPU0lYLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vYScpLCAoJycsICcvLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy8vYScpLCAoJycsICcvJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvLy9hL2InKSwgKCcnLCAnLycsICdhL2InKSkKKyAgICAgICAgIyBQYXRocyB3aGljaCBsb29rIGxpa2UgTlQgcGF0aHMgYXJlbid0IHRyZWF0ZWQgc3BlY2lhbGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzovYS9iJyksICgnJywgJycsICdjOi9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXC9hL2InKSwgKCcnLCAnJywgJ1xcL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYVxcYicpLCAoJycsICcnLCAnXFxhXFxiJykpCisKKworY2xhc3MgTlRGbGF2b3VyVGVzdChfQmFzZUZsYXZvdXJUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmxhdm91ciA9IHBhdGhsaWIuX3dpbmRvd3NfZmxhdm91cgorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHMoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgIyBGaXJzdCBwYXJ0IGlzIGFuY2hvcmVkCisgICAgICAgIGNoZWNrKFsnYzonXSwgICAgICAgICAgICAgICAgICAgKCdjOicsICcnLCBbJ2M6J10pKQorICAgICAgICBjaGVjayhbJ2M6XFwnXSwgICAgICAgICAgICAgICAgICgnYzonLCAnXFwnLCBbJ2M6XFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFwnXSwgICAgICAgICAgICAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJ10pKQorICAgICAgICBjaGVjayhbJ2M6YSddLCAgICAgICAgICAgICAgICAgICgnYzonLCAnJywgWydjOicsICdhJ10pKQorICAgICAgICBjaGVjayhbJ2M6XFxhJ10sICAgICAgICAgICAgICAgICgnYzonLCAnXFwnLCBbJ2M6XFwnLCAnYSddKSkKKyAgICAgICAgY2hlY2soWydcXGEnXSwgICAgICAgICAgICAgICAgICAoJycsICdcXCcsIFsnXFwnLCAnYSddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWydcXFxcYVxcYiddLCAgICAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJ10pKQorICAgICAgICBjaGVjayhbJ1xcXFxhXFxiXFwnXSwgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXGFcXGJcXGMnXSwgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCcsICdjJ10pKQorICAgICAgICAjIFNlY29uZCBwYXJ0IGlzIGFuY2hvcmVkLCBzbyB0aGF0IHRoZSBmaXJzdCBwYXJ0IGlzIGlnbm9yZWQKKyAgICAgICAgY2hlY2soWydhJywgJ1o6YicsICdjJ10sICAgICAgICAoJ1o6JywgJycsIFsnWjonLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnWjpcXGInLCAnYyddLCAgICAgICgnWjonLCAnXFwnLCBbJ1o6XFwnLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnXFxiJywgJ2MnXSwgICAgICAgICgnJywgJ1xcJywgWydcXCcsICdiJywgJ2MnXSkpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIGNoZWNrKFsnYScsICdcXFxcYlxcYycsICdkJ10sICAgKCdcXFxcYlxcYycsICdcXCcsIFsnXFxcXGJcXGNcXCcsICdkJ10pKQorICAgICAgICAjIENvbGxhcHNpbmcgYW5kIHN0cmlwcGluZyBleGNlc3Mgc2xhc2hlcworICAgICAgICBjaGVjayhbJ2EnLCAnWjpcXFxcYlxcXFxjXFwnLCAnZFxcJ10sICgnWjonLCAnXFwnLCBbJ1o6XFwnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIGNoZWNrKFsnYScsICdcXFxcYlxcY1xcXFwnLCAnZCddLCAoJ1xcXFxiXFxjJywgJ1xcJywgWydcXFxcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgRXh0ZW5kZWQgcGF0aHMKKyAgICAgICAgY2hlY2soWydcXFxcP1xcYzpcXCddLCAgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnXSkpCisgICAgICAgIGNoZWNrKFsnXFxcXD9cXGM6XFxhJ10sICAgICAgICAgKCdcXFxcP1xcYzonLCAnXFwnLCBbJ1xcXFw/XFxjOlxcJywgJ2EnXSkpCisgICAgICAgICMgRXh0ZW5kZWQgVU5DIHBhdGhzIChmb3JtYXQgaXMgIlxcP1xVTkNcc2VydmVyXHNoYXJlIikKKyAgICAgICAgY2hlY2soWydcXFxcP1xcVU5DXFxiXFxjJ10sICAgICAoJ1xcXFw/XFxVTkNcXGJcXGMnLCAnXFwnLCBbJ1xcXFw/XFxVTkNcXGJcXGNcXCddKSkKKyAgICAgICAgY2hlY2soWydcXFxcP1xcVU5DXFxiXFxjXFxkJ10sICAoJ1xcXFw/XFxVTkNcXGJcXGMnLCAnXFwnLCBbJ1xcXFw/XFxVTkNcXGJcXGNcXCcsICdkJ10pKQorCisgICAgZGVmIHRlc3Rfc3BsaXRyb290KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnNwbGl0cm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJycpLCAoJycsICcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYScpLCAoJycsICcnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2FcXGInKSwgKCcnLCAnJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYVxcYicpLCAoJycsICdcXCcsICdhXFxiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzphXFxiJyksICgnYzonLCAnJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcYVxcYicpLCAoJ2M6JywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgIyBSZWR1bmRhbnQgc2xhc2hlcyBpbiB0aGUgcm9vdCBhcmUgY29sbGFwc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxcXGEvYicpLCAoJycsICdcXCcsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcXFxhJyksICgnYzonLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxcXFxcYS9iJyksICgnYzonLCAnXFwnLCAnYS9iJykpCisgICAgICAgICMgVmFsaWQgVU5DIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGInKSwgKCdcXFxcYVxcYicsICdcXCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYlxcJyksICgnXFxcXGFcXGInLCAnXFwnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGJcXGNcXGQnKSwgKCdcXFxcYVxcYicsICdcXCcsICdjXFxkJykpCisgICAgICAgICMgVGhlc2UgYXJlIG5vbi1VTkMgcGF0aHMgKGFjY29yZGluZyB0byBudHBhdGgucHkgYW5kIHRlc3RfbnRwYXRoKQorICAgICAgICAjIEhvd2V2ZXIsIGNvbW1hbmQuY29tIHNheXMgc3VjaCBwYXRocyBhcmUgaW52YWxpZCwgc28gaXQncworICAgICAgICAjIGRpZmZpY3VsdCB0byBrbm93IHdoYXQgdGhlIHJpZ2h0IHNlbWFudGljcyBhcmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcXFxhXFxiJyksICgnJywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYScpLCAoJycsICdcXCcsICdhJykpCisKKworIworIyBUZXN0cyBmb3IgdGhlIHB1cmUgY2xhc3NlcworIworCitjbGFzcyBfQmFzZVB1cmVQYXRoVGVzdChvYmplY3QpOgorCisgICAgIyBrZXlzIGFyZSBjYW5vbmljYWwgcGF0aHMsIHZhbHVlcyBhcmUgbGlzdCBvZiB0dXBsZXMgb2YgYXJndW1lbnRzCisgICAgIyBzdXBwb3NlZCB0byBwcm9kdWNlIGVxdWFsIHBhdGhzCisgICAgZXF1aXZhbGVuY2VzID0geworICAgICAgICAnYS9iJzogWworICAgICAgICAgICAgKCdhJywgJ2InKSwgKCdhLycsICdiJyksICgnYScsICdiLycpLCAoJ2EvJywgJ2IvJyksCisgICAgICAgICAgICAoJ2EvYi8nLCksICgnYS8vYicsKSwgKCdhLy9iLy8nLCksCisgICAgICAgICAgICAjIGVtcHR5IGNvbXBvbmVudHMgZ2V0IHJlbW92ZWQKKyAgICAgICAgICAgICgnJywgJ2EnLCAnYicpLCAoJ2EnLCAnJywgJ2InKSwgKCdhJywgJ2InLCAnJyksCisgICAgICAgICAgICBdLAorICAgICAgICAnL2IvYy9kJzogWworICAgICAgICAgICAgKCdhJywgJy9iL2MnLCAnZCcpLCAoJ2EnLCAnLy8vYi8vYycsICdkLycpLAorICAgICAgICAgICAgKCcvYScsICcvYi9jJywgJ2QnKSwKKyAgICAgICAgICAgICMgZW1wdHkgY29tcG9uZW50cyBnZXQgcmVtb3ZlZAorICAgICAgICAgICAgKCcvJywgJ2InLCAnJywgJ2MvZCcpLCAoJy8nLCAnJywgJ2IvYy9kJyksICgnJywgJy9iL2MvZCcpLAorICAgICAgICAgICAgXSwKKyAgICB9CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuZmxhdm91ciA9IHAuX2ZsYXZvdXIKKyAgICAgICAgc2VsZi5zZXAgPSBzZWxmLmZsYXZvdXIuc2VwCisgICAgICAgIHNlbGYuYWx0c2VwID0gc2VsZi5mbGF2b3VyLmFsdHNlcAorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgUCkKKyAgICAgICAgUCgnYScsICdiJywgJ2MnKQorICAgICAgICBQKCcvYScsICdiJywgJ2MnKQorICAgICAgICBQKCdhL2IvYycpCisgICAgICAgIFAoJy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJykpLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJyksICdiJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoUCgnYScpLCBQKCdiJykpLCBQKCdhL2InKSkKKworICAgIGRlZiB0ZXN0X2pvaW5fY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwcCksIHR5cGUocCkpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYycsICdkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MvZCcpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoUCgnYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJy9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiB0ZXN0X2Rpdl9jb21tb24oc2VsZik6CisgICAgICAgICMgQmFzaWNhbGx5IHRoZSBzYW1lIGFzIGpvaW5wYXRoKCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwcCA9IHAgLyAnYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHBwKSwgdHlwZShwKSkKKyAgICAgICAgcHAgPSBwIC8gJ2MvZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MvZCcpKQorICAgICAgICBwcCA9IHAgLyAnYycgLyAnZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MvZCcpKQorICAgICAgICBwcCA9ICdjJyAvIHAgLyAnZCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYy9hL2IvZCcpKQorICAgICAgICBwcCA9IHAgLyBQKCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgcHAgPSBwLyAnL2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKyAgICBkZWYgX2NoZWNrX3N0cihzZWxmLCBleHBlY3RlZCwgYXJncyk6CisgICAgICAgIHAgPSBzZWxmLmNscygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIGV4cGVjdGVkLnJlcGxhY2UoJy8nLCBzZWxmLnNlcCkpCisKKyAgICBkZWYgdGVzdF9zdHJfY29tbW9uKHNlbGYpOgorICAgICAgICAjIENhbm9uaWNhbGl6ZWQgcGF0aHMgcm91bmR0cmlwCisgICAgICAgIGZvciBwYXRoc3RyIGluICgnYScsICdhL2InLCAnYS9iL2MnLCAnLycsICcvYS9iJywgJy9hL2IvYycpOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc3RyKHBhdGhzdHIsIChwYXRoc3RyLCkpCisgICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciB0aGUgZW1wdHkgcGF0aAorICAgICAgICBzZWxmLl9jaGVja19zdHIoJy4nLCAoJycsKSkKKyAgICAgICAgIyBPdGhlciB0ZXN0cyBmb3Igc3RyKCkgYXJlIGluIHRlc3RfZXF1aXZhbGVuY2VzKCkKKworICAgIGRlZiB0ZXN0X2FzX3Bvc2l4X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIGZvciBwYXRoc3RyIGluICgnYScsICdhL2InLCAnYS9iL2MnLCAnLycsICcvYS9iJywgJy9hL2IvYycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKHBhdGhzdHIpLmFzX3Bvc2l4KCksIHBhdGhzdHIpCisgICAgICAgICMgT3RoZXIgdGVzdHMgZm9yIGFzX3Bvc2l4KCkgYXJlIGluIHRlc3RfZXF1aXZhbGVuY2VzKCkKKworICAgIGRlZiB0ZXN0X2FzX2J5dGVzX2NvbW1vbihzZWxmKToKKyAgICAgICAgc2VwID0gb3MuZnNlbmNvZGUoc2VsZi5zZXApCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKFAoJ2EvYicpKSwgYidhJyArIHNlcCArIGInYicpCisKKyAgICBkZWYgdGVzdF9hc191cmlfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoJ2EnKS5hc191cmkoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgpLmFzX3VyaSgpCisKKyAgICBkZWYgdGVzdF9yZXByX2NvbW1vbihzZWxmKToKKyAgICAgICAgZm9yIHBhdGhzdHIgaW4gKCdhJywgJ2EvYicsICdhL2IvYycsICcvJywgJy9hL2InLCAnL2EvYi9jJyk6CisgICAgICAgICAgICBwID0gc2VsZi5jbHMocGF0aHN0cikKKyAgICAgICAgICAgIGNsc25hbWUgPSBwLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgciA9IHJlcHIocCkKKyAgICAgICAgICAgICMgVGhlIHJlcHIoKSBpcyBpbiB0aGUgZm9ybSBDbGFzc05hbWUoImZvcndhcmQtc2xhc2hlcyBwYXRoIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLnN0YXJ0c3dpdGgoY2xzbmFtZSArICcoJyksIHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aCgnKScpLCByKQorICAgICAgICAgICAgaW5uZXIgPSByW2xlbihjbHNuYW1lKSArIDEgOiAtMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChpbm5lciksIHAuYXNfcG9zaXgoKSkKKyAgICAgICAgICAgICMgVGhlIHJlcHIoKSByb3VuZHRyaXBzCisgICAgICAgICAgICBxID0gZXZhbChyLCBwYXRobGliLl9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhxLl9fY2xhc3NfXywgcC5fX2NsYXNzX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocSksIHIpCisKKyAgICBkZWYgdGVzdF9lcV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKSwgUCgnYScsICdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EvYicpLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwgaW50KQorCisgICAgZGVmIHRlc3RfbWF0Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYScpLm1hdGNoLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYScpLm1hdGNoLCAnLicpCisgICAgICAgICMgU2ltcGxlIHJlbGF0aXZlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2IucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYS9iLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EucHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IvcHknKS5tYXRjaCgnYi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5L2MnKS5tYXRjaCgnYi5weScpKQorICAgICAgICAjIFdpbGNhcmQgcmVsYXRpdmUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYi5weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdhL2IucHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi5weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weWMnKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IuL3B5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5L2MnKS5tYXRjaCgnKi5weScpKQorICAgICAgICAjIE11bHRpLXBhcnQgcmVsYXRpdmUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvZC9hYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvZGFiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2FiL2MucHkvZCcpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgICMgQWJzb2x1dGUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICAjIE11bHRpLXBhcnQgYWJzb2x1dGUgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi5weScpLm1hdGNoKCcvYS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2FiLnB5JykubWF0Y2goJy9hLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iL2MucHknKS5tYXRjaCgnL2EvKi5weScpKQorCisgICAgZGVmIHRlc3Rfb3JkZXJpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICAjIE9yZGVyaW5nIGlzIHR1cGxlLWFsaWtlCisgICAgICAgIGRlZiBhc3NlcnRMZXNzKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYiwgYSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIGEgPSBQKCdhJykKKyAgICAgICAgYiA9IFAoJ2EvYicpCisgICAgICAgIGMgPSBQKCdhYmMnKQorICAgICAgICBkID0gUCgnYicpCisgICAgICAgIGFzc2VydExlc3MoYSwgYikKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGQpCisgICAgICAgIGFzc2VydExlc3MoYiwgYykKKyAgICAgICAgYXNzZXJ0TGVzcyhjLCBkKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgYSA9IFAoJy9hJykKKyAgICAgICAgYiA9IFAoJy9hL2InKQorICAgICAgICBjID0gUCgnL2FiYycpCisgICAgICAgIGQgPSBQKCcvYicpCisgICAgICAgIGFzc2VydExlc3MoYSwgYikKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBjKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGQpCisgICAgICAgIGFzc2VydExlc3MoYiwgYykKKyAgICAgICAgYXNzZXJ0TGVzcyhjLCBkKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBQKCkgPCB7fQorCisgICAgZGVmIHRlc3RfcGFydHNfY29tbW9uKHNlbGYpOgorICAgICAgICAjIGBwYXJ0c2AgcmV0dXJucyBhIHR1cGxlCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcGFydHMgPSBwLnBhcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydHMsICgnYScsICdiJykpCisgICAgICAgICMgVGhlIG9iamVjdCBnZXRzIHJldXNlZAorICAgICAgICBzZWxmLmFzc2VydElzKHBhcnRzLCBwLnBhcnRzKQorICAgICAgICAjIFdoZW4gdGhlIHBhdGggaXMgYWJzb2x1dGUsIHRoZSBhbmNob3IgaXMgYSBzZXBhcmF0ZSBwYXJ0CisgICAgICAgIHAgPSBQKCcvYS9iJykKKyAgICAgICAgcGFydHMgPSBwLnBhcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydHMsIChzZXAsICdhJywgJ2InKSkKKworICAgIGRlZiB0ZXN0X2VxdWl2YWxlbmNlcyhzZWxmKToKKyAgICAgICAgZm9yIGssIHR1cGxlcyBpbiBzZWxmLmVxdWl2YWxlbmNlcy5pdGVtcygpOgorICAgICAgICAgICAgY2Fub24gPSBrLnJlcGxhY2UoJy8nLCBzZWxmLnNlcCkKKyAgICAgICAgICAgIHBvc2l4ID0gay5yZXBsYWNlKHNlbGYuc2VwLCAnLycpCisgICAgICAgICAgICBpZiBjYW5vbiAhPSBwb3NpeDoKKyAgICAgICAgICAgICAgICB0dXBsZXMgPSB0dXBsZXMgKyBbCisgICAgICAgICAgICAgICAgICAgIHR1cGxlKHBhcnQucmVwbGFjZSgnLycsIHNlbGYuc2VwKSBmb3IgcGFydCBpbiB0KQorICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0dXBsZXMKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgIHR1cGxlcy5hcHBlbmQoKHBvc2l4LCApKQorICAgICAgICAgICAgcGNhbm9uID0gc2VsZi5jbHMoY2Fub24pCisgICAgICAgICAgICBmb3IgdCBpbiB0dXBsZXM6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuY2xzKCp0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcGNhbm9uLCAiZmFpbGVkIHdpdGggYXJncyB7fSIuZm9ybWF0KHQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChwKSwgaGFzaChwY2Fub24pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBjYW5vbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYXNfcG9zaXgoKSwgcG9zaXgpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfY29tbW9uKHNlbGYpOgorICAgICAgICAjIFJlbGF0aXZlCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoKSkKKyAgICAgICAgIyBBbmNob3JlZAorICAgICAgICBwID0gUCgnL2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8nKSkKKworICAgIGRlZiB0ZXN0X3BhcmVudHNfY29tbW9uKHNlbGYpOgorICAgICAgICAjIFJlbGF0aXZlCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iL2MnKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsyXSwgUCgnLicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJ2EvYicpLCBQKCdhJyksIFAoJy4nKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbLTFdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbM10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGFyWzBdID0gcAorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIHAgPSBQKCcvYS9iL2MnKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzJdLCBQKCcvJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnL2EvYicpLCBQKCcvYScpLCBQKCcvJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzNdCisKKyAgICBkZWYgdGVzdF9kcml2ZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLmRyaXZlLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuZHJpdmUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLmRyaXZlLCAnJykKKworICAgIGRlZiB0ZXN0X3Jvb3RfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5yb290LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5yb290LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykucm9vdCwgc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5yb290LCBzZXApCisKKyAgICBkZWYgdGVzdF9hbmNob3JfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5hbmNob3IsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLmFuY2hvciwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLmFuY2hvciwgc2VwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5hbmNob3IsIHNlcCkKKworICAgIGRlZiB0ZXN0X25hbWVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IvLicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS5uYW1lLCAnYi5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLm5hbWUsICdiLnB5JykKKworICAgIGRlZiB0ZXN0X3N1ZmZpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLi4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi8uJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS5zdWZmaXgsICcucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5zdWZmaXgsICcucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZy5yYycpLnN1ZmZpeCwgJy5yYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnRhci5neicpLnN1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorCisgICAgZGVmIHRlc3Rfc3VmZml4ZXNfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IvLicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5Jykuc3VmZml4ZXMsIFsnLnB5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZy5yYycpLnN1ZmZpeGVzLCBbJy5yYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZy5yYycpLnN1ZmZpeGVzLCBbJy5yYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IudGFyLmd6Jykuc3VmZml4ZXMsIFsnLnRhcicsICcuZ3onXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4ZXMsIFtdKQorCisgICAgZGVmIHRlc3Rfc3RlbV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJycpLnN0ZW0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuLicpLnN0ZW0sICcuLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN0ZW0sICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGdyYycpLnN0ZW0sICcuaGdyYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGcucmMnKS5zdGVtLCAnLmhnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IudGFyLmd6Jykuc3RlbSwgJ2IudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3RlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKQorCisgICAgZGVmIHRlc3Rfd2l0aF9uYW1lX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdhL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnL2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5Jykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCcvYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnL2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcuJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvJykud2l0aF9uYW1lLCAnZC54bWwnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdWZmaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJy9hL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJy9hL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcuJykud2l0aF9zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvJykud2l0aF9zdWZmaXgsICcuZ3onKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfdG9fY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcC5yZWxhdGl2ZV90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYScpKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYS9iJykpLCBQKCkpCisgICAgICAgICMgV2l0aCBzZXZlcmFsIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhJywgJ2InKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYScpKQorICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvJykpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy9hJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvYS9iJykpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYScpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1bXBlZCA9IHBpY2tsZS5kdW1wcyhwLCBwcm90bykKKyAgICAgICAgICAgIHBwID0gcGlja2xlLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocHAuX19jbGFzc19fLCBwLl9fY2xhc3NfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocHApLCBoYXNoKHApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocHApLCBzdHIocCkpCisKKworY2xhc3MgUHVyZVBvc2l4UGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlB1cmVQb3NpeFBhdGgKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5yb290LCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy8vYS9iJykucm9vdCwgJy8nKQorICAgICAgICAjIFBPU0lYIHNwZWNpYWwgY2FzZSBmb3IgdHdvIGxlYWRpbmcgc2xhc2hlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykucm9vdCwgJy8vJykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgnQS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EnKSwgUCgnLy8vYScpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hJyksIFAoJy8vYScpKQorCisgICAgZGVmIHRlc3RfYXNfdXJpKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuYXNfdXJpKCksICdmaWxlOi8vLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5jJykuYXNfdXJpKCksICdmaWxlOi8vL2EvYi5jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJSNjJykuYXNfdXJpKCksICdmaWxlOi8vL2EvYiUyNSUyM2MnKQorCisgICAgZGVmIHRlc3RfYXNfdXJpX25vbl9hc2NpaShzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmZzZW5jb2RlKCdceGU5JykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlxceGU5IGNhbm5vdCBiZSBlbmNvZGVkIHRvIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iXHhlOScpLmFzX3VyaSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vL2EvYicgKyBxdW90ZV9mcm9tX2J5dGVzKG9zLmZzZW5jb2RlKCdceGU5JykpKQorCisgICAgZGVmIHRlc3RfbWF0Y2goc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ0EucHknKS5tYXRjaCgnYS5QWScpKQorCisgICAgZGVmIHRlc3RfaXNfYWJzb2x1dGUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2InKS5pc19hYnNvbHV0ZSgpKQorCisgICAgZGVmIHRlc3RfaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL2Zvby9iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZGV2L2Nvbi9QUk4vTlVMJykuaXNfcmVzZXJ2ZWQoKSkKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnLy9hJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9hL2InKSkKKyAgICAgICAgcHAgPSBQKCcvYScpLmpvaW5wYXRoKCcvL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2MnKSkKKyAgICAgICAgcHAgPSBQKCcvL2EnKS5qb2lucGF0aCgnL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIHRlc3RfZGl2KHNlbGYpOgorICAgICAgICAjIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBqb2lucGF0aCgpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnLy9hJykKKyAgICAgICAgcHAgPSBwIC8gJ2InCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYS9iJykpCisgICAgICAgIHBwID0gUCgnL2EnKSAvICcvL2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYycpKQorICAgICAgICBwcCA9IFAoJy8vYScpIC8gJy9jJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisKK2NsYXNzIFB1cmVXaW5kb3dzUGF0aFRlc3QoX0Jhc2VQdXJlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aAorCisgICAgZXF1aXZhbGVuY2VzID0gX0Jhc2VQdXJlUGF0aFRlc3QuZXF1aXZhbGVuY2VzLmNvcHkoKQorICAgIGVxdWl2YWxlbmNlcy51cGRhdGUoeworICAgICAgICAnYzphJzogWyAoJ2M6JywgJ2EnKSwgKCdjOicsICdhLycpLCAoJy8nLCAnYzonLCAnYScpIF0sCisgICAgICAgICdjOi9hJzogWworICAgICAgICAgICAgKCdjOi8nLCAnYScpLCAoJ2M6JywgJy8nLCAnYScpLCAoJ2M6JywgJy9hJyksCisgICAgICAgICAgICAoJy96JywgJ2M6LycsICdhJyksICgnLy94L3knLCAnYzovJywgJ2EnKSwKKyAgICAgICAgICAgIF0sCisgICAgICAgICcvL2EvYi8nOiBbICgnLy9hL2InLCkgXSwKKyAgICAgICAgJy8vYS9iL2MnOiBbCisgICAgICAgICAgICAoJy8vYS9iJywgJ2MnKSwgKCcvL2EvYi8nLCAnYycpLAorICAgICAgICAgICAgXSwKKyAgICB9KQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdjOi9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnYzpcXGFcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdcXFxcYVxcYlxcJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdcXFxcYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2IvYy9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksICdcXFxcYVxcYlxcY1xcZCcpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKSwgUCgnYzphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOicsICdhJywgJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdjOmEvYicpLCBQKCdkOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9CJyksIFAoJ0EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ0M6YS9CJyksIFAoJ2M6QS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9Tb21lL1NIQVJFL2EvQicpLCBQKCcvL3NvbUUvc2hhcmUvQS9iJykpCisKKyAgICBkZWYgdGVzdF9hc191cmkoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZV9mcm9tX2J5dGVzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgUCgnL2EvYicpLmFzX3VyaSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCdjOmEvYicpLmFzX3VyaSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuYXNfdXJpKCksICdmaWxlOi8vL2M6LycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLmMnKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYiUjYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IlMjUlMjNjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2JceGU5JykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiVDMyVBOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlLycpLmFzX3VyaSgpLCAnZmlsZTovL3NvbWUvc2hhcmUvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvYS9iLmMnKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iLmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IlI2NceGU5JykuYXNfdXJpKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGU6Ly9zb21lL3NoYXJlL2EvYiUyNSUyM2MlQzMlQTknKQorCisgICAgZGVmIHRlc3RfbWF0Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBBYnNvbHV0ZSBwYXR0ZXJucworICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2Q6L2IucHknKS5tYXRjaCgnYzovKi5weScpKSAgIyB3cm9uZyBkcml2ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6Yi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6Yi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2IucHknKS5tYXRjaCgnYzovKi5weScpKQorICAgICAgICAjIFVOQyBwYXR0ZXJucworICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vc29tZS9zaGFyZS9hLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLy9vdGhlci9zaGFyZS9hLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLy9zb21lL3NoYXJlL2EvYi5weScpLm1hdGNoKCcvL3NvbWUvc2hhcmUvKi5weScpKQorICAgICAgICAjIENhc2UtaW5zZW5zaXRpdml0eQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnQi5weScpLm1hdGNoKCdiLlBZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hL0IuUHknKS5tYXRjaCgnQzovQS8qLnBZJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL1NvbWUvU2hhcmUvQi5QeScpLm1hdGNoKCcvL3NvbUUvc2hhckUvKi5wWScpKQorCisgICAgZGVmIHRlc3Rfb3JkZXJpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICAjIENhc2UtaW5zZW5zaXRpdml0eQorICAgICAgICBkZWYgYXNzZXJ0T3JkZXJlZEVxdWFsKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGIsIGEpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzpBL2InKQorICAgICAgICBxID0gUCgnQzphL0InKQorICAgICAgICBhc3NlcnRPcmRlcmVkRXF1YWwocCwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwIDwgcSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwID4gcSkKKyAgICAgICAgcCA9IFAoJy8vc29tZS9TaGFyZS9BL2InKQorICAgICAgICBxID0gUCgnLy9Tb21lL1NIQVJFL2EvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorCisgICAgZGVmIHRlc3RfcGFydHMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYzphL2InKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdjOicsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJ2M6L2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6XFwnLCAnYScsICdiJykpCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXJ0cyA9IHAucGFydHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0cywgKCdcXFxcYVxcYlxcJywgJ2MnLCAnZCcpKQorCisgICAgZGVmIHRlc3RfcGFyZW50KHNlbGYpOgorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnejphL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCd6OmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6OicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6OicpKQorICAgICAgICBwID0gUCgnejovYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCd6Oi9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnejovJykpCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LCBQKCcvL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCcvL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRzKHNlbGYpOgorICAgICAgICAjIEFuY2hvcmVkCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnejphL2IvJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCd6OmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnejphJyksIFAoJ3o6JyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCd6Oi9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCd6Oi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6Oi9hJyksIFAoJ3o6LycpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorICAgICAgICBwID0gUCgnLy9hL2IvYy9kJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCcvL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCcvL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJy8vYS9iL2MnKSwgUCgnLy9hL2InKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKworICAgIGRlZiB0ZXN0X2RyaXZlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLmRyaXZlLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLycpLmRyaXZlLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykuZHJpdmUsICdcXFxcYVxcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvJykuZHJpdmUsICdcXFxcYVxcYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvYy9kJykuZHJpdmUsICdcXFxcYVxcYicpCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnJvb3QsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLnJvb3QsICdcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2IvJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5yb290LCAnXFwnKQorCisgICAgZGVmIHRlc3RfYW5jaG9yKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLmFuY2hvciwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLmFuY2hvciwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuYW5jaG9yLCAnYzpcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5hbmNob3IsICdcXFxcYVxcYlxcJykKKworICAgIGRlZiB0ZXN0X25hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykubmFtZSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLm5hbWUsICdiLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL015LnB5L1NoYXJlLnBocCcpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLm5hbWUsICdiJykKKworICAgIGRlZiB0ZXN0X3N1ZmZpeChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdWZmaXgsICcucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeCwgJy5yYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IudGFyLmd6Jykuc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL015LnB5L1NoYXJlLnBocC9hL2InKS5zdWZmaXgsICcnKQorCisgICAgZGVmIHRlc3Rfc3VmZml4ZXMoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IucHknKS5zdWZmaXhlcywgWycucHknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3VmZml4ZXMsIFsnLnJjJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXhlcywgWycudGFyJywgJy5neiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKworICAgIGRlZiB0ZXN0X3N0ZW0oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzouJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzouLicpLnN0ZW0sICcuLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphLy5oZ3JjJykuc3RlbSwgJy5oZ3JjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhnLnJjJykuc3RlbSwgJy5oZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IudGFyLmd6Jykuc3RlbSwgJ2IudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdGVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpCisKKyAgICBkZWYgdGVzdF93aXRoX25hbWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdjOmEvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6L2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6L2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzonKS53aXRoX25hbWUsICdkLnhtbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6LycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLy9NeS9TaGFyZScpLndpdGhfbmFtZSwgJ2QueG1sJykKKworICAgIGRlZiB0ZXN0X3dpdGhfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzphL2IuZ3onKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6L2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLy9NeS9TaGFyZScpLndpdGhfc3VmZml4LCAnLmd6JykKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2M6YS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6JykpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6YScpKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzphL2InKSksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdkOicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2M6YS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzphL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYScpKQorICAgICAgICBwID0gUCgnYzovYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6JykpLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi8nKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzovYScpKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzovYS9iJykpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2M6L2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYzovYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2M6YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdkOicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdkOi8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy9jL2EnKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL2EvYicpKSwgUCgnYy9kJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL2EvYi9jJykpLCBQKCdkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL2EvYi9jL2QnKSksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2M6L2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8vei9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy9hL3ovYycpKQorCisgICAgZGVmIHRlc3RfaXNfYWJzb2x1dGUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIFVuZGVyIE5ULCBvbmx5IHBhdGhzIHdpdGggYm90aCBhIGRyaXZlIGFuZCBhIHJvb3QgYXJlIGFic29sdXRlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdjOicpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzphJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdjOmEvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgICMgVU5DIHBhdGhzIGFyZSBhYnNvbHV0ZSBieSBkZWZpbml0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYicpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2IvYycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL2EvYi9jL2QnKS5pc19hYnNvbHV0ZSgpKQorCisgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdDOi9hL2InKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCcveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnQzoveC95JykpCisgICAgICAgICMgSm9pbmluZyB3aXRoIGEgZGlmZmVyZW50IGRyaXZlID0+IHRoZSBmaXJzdCBwYXRoIGlzIGlnbm9yZWQsIGV2ZW4KKyAgICAgICAgIyBpZiB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnRDp4L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdEOngveScpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ0Q6L3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0Q6L3gveScpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJy8vaG9zdC9zaGFyZS94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2hvc3Qvc2hhcmUveC95JykpCisgICAgICAgICMgSm9pbmluZyB3aXRoIHRoZSBzYW1lIGRyaXZlID0+IHRoZSBmaXJzdCBwYXRoIGlzIGFwcGVuZGVkIHRvIGlmCisgICAgICAgICMgdGhlIHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2M6eC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnQzovYS9iL3gveScpKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2M6L3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0M6L3gveScpKQorCisgICAgZGVmIHRlc3RfZGl2KHNlbGYpOgorICAgICAgICAjIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBqb2lucGF0aCgpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnQzovYS9iJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ3gveScsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ3gnIC8gJ3knLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICcveC95JywgUCgnQzoveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICcveCcgLyAneScsIFAoJ0M6L3gveScpKQorICAgICAgICAjIEpvaW5pbmcgd2l0aCBhIGRpZmZlcmVudCBkcml2ZSA9PiB0aGUgZmlyc3QgcGF0aCBpcyBpZ25vcmVkLCBldmVuCisgICAgICAgICMgaWYgdGhlIHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnRDp4L3knLCBQKCdEOngveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnRDonIC8gJ3gveScsIFAoJ0Q6eC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOi94L3knLCBQKCdEOi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6JyAvICcveC95JywgUCgnRDoveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICcvL2hvc3Qvc2hhcmUveC95JywgUCgnLy9ob3N0L3NoYXJlL3gveScpKQorICAgICAgICAjIEpvaW5pbmcgd2l0aCB0aGUgc2FtZSBkcml2ZSA9PiB0aGUgZmlyc3QgcGF0aCBpcyBhcHBlbmRlZCB0byBpZgorICAgICAgICAjIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ2M6eC95JywgUCgnQzovYS9iL3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnYzoveC95JywgUCgnQzoveC95JykpCisKKyAgICBkZWYgdGVzdF9pc19yZXNlcnZlZChzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8nKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvZm9vL2JhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnY29uJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdOVUwnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ05VTC50eHQnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbTEnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbTkuYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYmFyLmNvbTknKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2xwdDEnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2xwdDkuYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYmFyLmxwdDknKS5pc19yZXNlcnZlZCgpKQorICAgICAgICAjIE9ubHkgdGhlIGxhc3QgY29tcG9uZW50IG1hdHRlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnYzovTlVML2Nvbi9iYXonKS5pc19yZXNlcnZlZCgpKQorICAgICAgICAjIFVOQyBwYXRocyBhcmUgbmV2ZXIgcmVzZXJ2ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLy9teS9zaGFyZS9udWwvY29uL2F1eCcpLmlzX3Jlc2VydmVkKCkpCisKKworY2xhc3MgUHVyZVBhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlUGF0aAorCisgICAgZGVmIHRlc3RfY29uY3JldGVfY2xhc3Moc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwKSwKKyAgICAgICAgICAgIHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUHVyZVBvc2l4UGF0aCkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9mbGF2b3Vyc191bmVxdWFsKHNlbGYpOgorICAgICAgICBwID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoKCdhJykKKyAgICAgICAgcSA9IHBhdGhsaWIuUHVyZVdpbmRvd3NQYXRoKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLCBxKQorCisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZsYXZvdXJzX3Vub3JkZXJlZChzZWxmKToKKyAgICAgICAgcCA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aCgnYScpCisgICAgICAgIHEgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCgnYScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPCBxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHAgPD0gcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwID4gcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwID49IHEKKworCisjCisjIFRlc3RzIGZvciB0aGUgY29uY3JldGUgY2xhc3NlcworIworCisjIE1ha2Ugc3VyZSBhbnkgc3ltYm9saWMgbGlua3MgaW4gdGhlIGJhc2UgdGVzdCBwYXRoIGFyZSByZXNvbHZlZAorQkFTRSA9IG9zLnBhdGgucmVhbHBhdGgoVEVTVEZOKQoram9pbiA9IGxhbWJkYSAqeDogb3MucGF0aC5qb2luKEJBU0UsICp4KQorcmVsX2pvaW4gPSBsYW1iZGEgKng6IG9zLnBhdGguam9pbihURVNURk4sICp4KQorCitkZWYgc3ltbGlua19za2lwX3JlYXNvbigpOgorICAgIGlmIG5vdCBwYXRobGliLnN1cHBvcnRzX3N5bWxpbmtzOgorICAgICAgICByZXR1cm4gIm5vIHN5c3RlbSBzdXBwb3J0IGZvciBzeW1saW5rcyIKKyAgICB0cnk6CisgICAgICAgIG9zLnN5bWxpbmsoX19maWxlX18sIEJBU0UpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgcmV0dXJuIHN0cihlKQorICAgIGVsc2U6CisgICAgICAgIHN1cHBvcnQudW5saW5rKEJBU0UpCisgICAgcmV0dXJuIE5vbmUKKworc3ltbGlua19za2lwX3JlYXNvbiA9IHN5bWxpbmtfc2tpcF9yZWFzb24oKQorCitvbmx5X250ID0gdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgIT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgYSBXaW5kb3dzLWNvbXBhdGlibGUgc3lzdGVtJykKK29ubHlfcG9zaXggPSB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBhIFBPU0lYLWNvbXBhdGlibGUgc3lzdGVtJykKK3dpdGhfc3ltbGlua3MgPSB1bml0dGVzdC5za2lwSWYoc3ltbGlua19za2lwX3JlYXNvbiwgc3ltbGlua19za2lwX3JlYXNvbikKKworCitAb25seV9wb3NpeAorY2xhc3MgUG9zaXhQYXRoQXNQdXJlVGVzdChQdXJlUG9zaXhQYXRoVGVzdCk6CisgICAgY2xzID0gcGF0aGxpYi5Qb3NpeFBhdGgKKworQG9ubHlfbnQKK2NsYXNzIFdpbmRvd3NQYXRoQXNQdXJlVGVzdChQdXJlV2luZG93c1BhdGhUZXN0KToKKyAgICBjbHMgPSBwYXRobGliLldpbmRvd3NQYXRoCisKKworY2xhc3MgX0Jhc2VQYXRoVGVzdChvYmplY3QpOgorICAgICIiIlRlc3RzIGZvciB0aGUgRlMtYWNjZXNzaW5nIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgUGF0aCBjbGFzc2VzLiIiIgorCisgICAgIyAoQkFTRSkKKyAgICAjICB8CisgICAgIyAgfC0tIGRpckEvCisgICAgIyAgICAgICB8LS0gbGlua0MgLT4gIi4uL2RpckIiCisgICAgIyAgfC0tIGRpckIvCisgICAgIyAgfCAgICB8LS0gZmlsZUIKKyAgICAjICAgICAgIHwtLSBsaW5rRCAtPiAiLi4vZGlyQiIKKyAgICAjICB8LS0gZGlyQy8KKyAgICAjICB8ICAgIHwtLSBmaWxlQworICAgICMgIHwgICAgfC0tIGZpbGVECisgICAgIyAgfC0tIGZpbGVBCisgICAgIyAgfC0tIGxpbmtBIC0+ICJmaWxlQSIKKyAgICAjICB8LS0gbGlua0IgLT4gImRpckIiCisgICAgIworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBvcy5ta2RpcihCQVNFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgQkFTRSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQScpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJCJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckMnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycsICdkaXJEJykpCisgICAgICAgIHdpdGggb3Blbihqb2luKCdmaWxlQScpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBBXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQicsICdmaWxlQicpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBCXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdmaWxlQycpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBDXG4iKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZGlyQycsICdkaXJEJywgJ2ZpbGVEJyksICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIidGhpcyBpcyBmaWxlIERcbiIpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgIyBSZWxhdGl2ZSBzeW1saW5rcworICAgICAgICAgICAgb3Muc3ltbGluaygnZmlsZUEnLCBqb2luKCdsaW5rQScpKQorICAgICAgICAgICAgb3Muc3ltbGluaygnbm9uLWV4aXN0aW5nJywgam9pbignYnJva2VuTGluaycpKQorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKCdkaXJCJywgam9pbignbGlua0InKSkKKyAgICAgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJy4uJywgJ2RpckInKSwgam9pbignZGlyQScsICdsaW5rQycpKQorICAgICAgICAgICAgIyBUaGlzIG9uZSBnb2VzIHVwd2FyZHMgYnV0IGRvZXNuJ3QgY3JlYXRlIGEgbG9vcAorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignLi4nLCAnZGlyQicpLCBqb2luKCdkaXJCJywgJ2xpbmtEJykpCisKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNzcyCisgICAgICAgIGRlZiBkaXJsaW5rKHNlbGYsIHNyYywgZGVzdCk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1UcnVlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBkaXJsaW5rKHNlbGYsIHNyYywgZGVzdCk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKKworICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIHBhdGhfYSwgcGF0aF9iKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZWZpbGUoc3RyKHBhdGhfYSksIHN0cihwYXRoX2IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlciBhbmQgJXIgZG9uJ3QgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGhfYSwgcGF0aF9iKSkKKworICAgIGRlZiBhc3NlcnRGaWxlTm90Rm91bmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcikgYXMgY206CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKworICAgIGRlZiBfdGVzdF9jd2Qoc2VsZiwgcCk6CisgICAgICAgIHEgPSBzZWxmLmNscyhvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHEpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksIHR5cGUocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscy5jd2QoKQorICAgICAgICBzZWxmLl90ZXN0X2N3ZChwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgZW1wdHkgcGF0aCBwb2ludHMgdG8gJy4nCisgICAgICAgIHAgPSBzZWxmLmNscygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgb3Muc3RhdCgnLicpKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2RpckEnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdmaWxlQScpLmV4aXN0cygpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnbGlua0EnKS5leGlzdHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgKHAgLyAnbGlua0InKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgKHAgLyAnZm9vJykuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy94eXp6eScpLmV4aXN0cygpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb21tb24oc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uVGV4dElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJ0aGlzIGlzIGZpbGUgQVxuIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyYicsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBwYXRocyA9IHNldChpdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2RpckEnLCAnZGlyQicsICdkaXJDJywgJ2ZpbGVBJ10KKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBleHBlY3RlZCArPSBbJ2xpbmtBJywgJ2xpbmtCJywgJ2Jyb2tlbkxpbmsnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfaXRlcmRpcl9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgJ2xpbmtCJykKKyAgICAgICAgcGF0aHMgPSBzZXQocC5pdGVyZGlyKCkpCisgICAgICAgIGV4cGVjdGVkID0geyBQKEJBU0UsICdsaW5rQicsIHEpIGZvciBxIGluIFsnZmlsZUInLCAnbGlua0QnXSB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcmRpcl9ub2RpcihzZWxmKToKKyAgICAgICAgIyBfX2l0ZXJfXyBvbiBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBkaXJlY3RvcnkKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICdmaWxlQScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBuZXh0KHAuaXRlcmRpcigpKQorICAgICAgICAjIEVOT0VOVCBvciBFSU5WQUwgdW5kZXIgV2luZG93cywgRU5PVERJUiBvdGhlcndpc2UKKyAgICAgICAgIyAoc2VlIGlzc3VlICMxMjgwMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sIChlcnJuby5FTk9URElSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVOT0VOVCwgZXJybm8uRUlOVkFMKSkKKworICAgIGRlZiB0ZXN0X2dsb2JfY29tbW9uKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrKGdsb2IsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGdsb2IpLCB7IFAoQkFTRSwgcSkgZm9yIHEgaW4gZXhwZWN0ZWQgfSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIGl0ID0gcC5nbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgIF9jaGVjayhpdCwgWyJmaWxlQSJdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJmaWxlQiIpLCBbXSkKKyAgICAgICAgX2NoZWNrKHAuZ2xvYigiZGlyKi9maWxlKiIpLCBbImRpckIvZmlsZUIiLCAiZGlyQy9maWxlQyJdKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkEiKSwgWydkaXJBJywgJ2ZpbGVBJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnLCAnbGlua0EnXSkKKyAgICAgICAgaWYgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJ10pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQi8qIiksIFsnZGlyQi9maWxlQicsICdkaXJCL2xpbmtEJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaW5rQi9maWxlQicsICdsaW5rQi9saW5rRCddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIiovZmlsZUIiKSwgWydkaXJCL2ZpbGVCJywgJ2xpbmtCL2ZpbGVCJ10pCisKKyAgICBkZWYgdGVzdF9yZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLnJnbG9iKCJmaWxlQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuSXRlcmF0b3IpCisgICAgICAgICMgWFhYIGNhbm5vdCB0ZXN0IGJlY2F1c2Ugb2Ygc3ltbGluayBsb29wcyBpbiB0aGUgdGVzdCBzZXR1cAorICAgICAgICAjX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiKi9maWxlQSIpLCBbIiJdKQorICAgICAgICAjX2NoZWNrKHAucmdsb2IoIiovZmlsZUIiKSwgWyJkaXJCL2ZpbGVCIl0pCisgICAgICAgICNfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJmaWxlQSIsICJkaXJCL2ZpbGVCIl0pCisgICAgICAgICMgTm8gc3ltbGluayBsb29wcyBoZXJlCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoImZpbGUqIiksIFsiZGlyQy9maWxlQyIsICJkaXJDL2RpckQvZmlsZUQiXSkKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoIiovKiIpLCBbImRpckMvZGlyRC9maWxlRCJdKQorCisgICAgZGVmIHRlc3RfZ2xvYl9kb3Rkb3Qoc2VsZik6CisgICAgICAgICMgIi4uIiBpcyBub3Qgc3BlY2lhbCBpbiBnbG9icworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLiIpKSwgeyBQKEJBU0UsICIuLiIpIH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiZGlyQS8uLi9maWxlKiIpKSwgeyBQKEJBU0UsICJkaXJBLy4uL2ZpbGVBIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLi94eXp6eSIpKSwgc2V0KCkpCisKKyAgICBkZWYgX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUoc2VsZiwgcCwgZXhwZWN0ZWQpOgorICAgICAgICBxID0gcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgIyBUaGVzZSBhcmUgYWxsIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBwKQorICAgICAgICBwID0gUChCQVNFLCAnbGlua0EnKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2ZpbGVBJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtDJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2xpbmtEJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgICMgTm93IGNyZWF0ZSBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9Jy1kaXJEJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNodXRpbC5ybXRyZWUsIGQpCisgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKGQpLCBqb2luKCdkaXJBJywgJ2xpbmtYJykpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignZGlyQicpLCBvcy5wYXRoLmpvaW4oZCwgJ2xpbmtZJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtYJywgJ2xpbmtZJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfZG90KHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwczovL2JpdGJ1Y2tldC5vcmcvcGl0cm91L3BhdGhsaWIvaXNzdWUvOS9wYXRocmVzb2x2ZS1mYWlscy1vbi1jb21wbGV4LXN5bWxpbmtzCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmRpcmxpbmsoJy4nLCBqb2luKCcwJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJzAnLCAnMCcpLCBqb2luKCcxJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJzEnLCAnMScpLCBqb2luKCcyJykpCisgICAgICAgIHEgPSBwIC8gJzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5yZXNvbHZlKCksIHApCisKKyAgICBkZWYgdGVzdF93aXRoKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBpdDIgPSBwLml0ZXJkaXIoKQorICAgICAgICBuZXh0KGl0MikKKyAgICAgICAgd2l0aCBwOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIEkvTyBvcGVyYXRpb24gb24gY2xvc2VkIHBhdGgKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGl0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5vcGVuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlc29sdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuYWJzb2x1dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAuX19lbnRlcl9fKQorCisgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgbW9kZSA9IHAuc3RhdCgpLnN0X21vZGUKKyAgICAgICAgIyBDbGVhciB3cml0YWJsZSBiaXQKKyAgICAgICAgbmV3X21vZGUgPSBtb2RlICYgfjBvMjIyCisgICAgICAgIHAuY2htb2QobmV3X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCkuc3RfbW9kZSwgbmV3X21vZGUpCisgICAgICAgICMgU2V0IHdyaXRhYmxlIGJpdAorICAgICAgICBuZXdfbW9kZSA9IG1vZGUgfCAwbzIyMgorICAgICAgICBwLmNobW9kKG5ld19tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLnN0X21vZGUsIG5ld19tb2RlKQorCisgICAgIyBYWFggYWxzbyBuZWVkIGEgdGVzdCBmb3IgbGNobW9kCisKKyAgICBkZWYgdGVzdF9zdGF0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgc3QpCisgICAgICAgICMgQ2hhbmdlIGZpbGUgbW9kZSBieSBmbGlwcGluZyB3cml0ZSBiaXQKKyAgICAgICAgcC5jaG1vZChzdC5zdF9tb2RlIF4gMG8yMjIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLmNobW9kLCBzdC5zdF9tb2RlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3RhdCgpLCBzdCkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfbHN0YXQoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKS8gJ2xpbmtBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIGRlZiB0ZXN0X2xzdGF0X25vc3ltbGluayhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QsIHAubHN0YXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHB3ZCwgInRoZSBwd2QgbW9kdWxlIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9vd25lcihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICB1aWQgPSBwLnN0YXQoKS5zdF91aWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IHB3ZC5nZXRwd3VpZCh1aWQpLnB3X25hbWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAidXNlciAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSB1aWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5vd25lcigpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ3JwLCAidGhlIGdycCBtb2R1bGUgaXMgbmVlZGVkIGZvciB0aGlzIHRlc3QiKQorICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIGdpZCA9IHAuc3RhdCgpLnN0X2dpZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBuYW1lID0gZ3JwLmdldGdyZ2lkKGdpZCkuZ3JfbmFtZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KAorICAgICAgICAgICAgICAgICJncm91cCAlZCBkb2Vzbid0IGhhdmUgYW4gZW50cnkgaW4gdGhlIHN5c3RlbSBkYXRhYmFzZSIgJSBnaWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgcC5ncm91cCgpKQorCisgICAgZGVmIHRlc3RfdW5saW5rKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIHAudW5saW5rKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnVubGluaykKKworICAgIGRlZiB0ZXN0X3JtZGlyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZGlyQScKKyAgICAgICAgZm9yIHEgaW4gcC5pdGVyZGlyKCk6CisgICAgICAgICAgICBxLnVubGluaygpCisgICAgICAgIHAucm1kaXIoKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAudW5saW5rKQorCisgICAgZGVmIHRlc3RfcmVuYW1lKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVuYW1pbmcgdG8gYW5vdGhlciBwYXRoCisgICAgICAgIHEgPSBQIC8gJ2RpckEnIC8gJ2ZpbGVBQScKKyAgICAgICAgcC5yZW5hbWUocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVuYW1pbmcgdG8gYSBzdHIgb2YgYSByZWxhdGl2ZSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZmlsZUFBQScpCisgICAgICAgIHEucmVuYW1lKHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChyKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChxLnN0YXQpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnZmlsZUEnCisgICAgICAgIHNpemUgPSBwLnN0YXQoKS5zdF9zaXplCisgICAgICAgICMgUmVwbGFjaW5nIGEgbm9uLWV4aXN0aW5nIHBhdGgKKyAgICAgICAgcSA9IFAgLyAnZGlyQScgLyAnZmlsZUFBJworICAgICAgICBwLnJlcGxhY2UocSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnN0YXQoKS5zdF9zaXplLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnN0YXQpCisgICAgICAgICMgUmVwbGFjaW5nIGFub3RoZXIgKGV4aXN0aW5nKSBwYXRoCisgICAgICAgIHIgPSByZWxfam9pbignZGlyQicsICdmaWxlQicpCisgICAgICAgIHEucmVwbGFjZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocikuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocS5zdGF0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgcCA9IFAgLyAnbmV3ZmlsZUEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIG9sZF9tdGltZSA9IHN0LnN0X210aW1lCisgICAgICAgIG9sZF9tdGltZV9ucyA9IHN0LnN0X210aW1lX25zCisgICAgICAgICMgUmV3aW5kIHRoZSBtdGltZSBzdWZmaWNpZW50bHkgZmFyIGluIHRoZSBwYXN0IHRvIHdvcmsgYXJvdW5kCisgICAgICAgICMgZmlsZXN5c3RlbS1zcGVjaWZpYyB0aW1lc3RhbXAgZ3JhbnVsYXJpdHkuCisgICAgICAgIG9zLnV0aW1lKHN0cihwKSwgKG9sZF9tdGltZSAtIDEwLCBvbGRfbXRpbWUgLSAxMCkpCisgICAgICAgICMgVGhlIGZpbGUgbXRpbWUgc2hvdWxkIGJlIHJlZnJlc2hlZCBieSBjYWxsaW5nIHRvdWNoKCkgYWdhaW4KKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHN0ID0gcC5zdGF0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWVfbnMsIG9sZF9tdGltZV9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3Quc3RfbXRpbWUsIG9sZF9tdGltZSkKKyAgICAgICAgIyBOb3cgd2l0aCBleGlzdF9vaz1GYWxzZQorICAgICAgICBwID0gUCAvICduZXdmaWxlQicKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmV4aXN0cygpKQorICAgICAgICBwLnRvdWNoKG1vZGU9MG83MDAsIGV4aXN0X29rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcC50b3VjaCwgZXhpc3Rfb2s9RmFsc2UpCisKKyAgICBkZWYgdGVzdF90b3VjaF9ub2NoYW5nZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBwLnRvdWNoKCkKKyAgICAgICAgd2l0aCBwLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ25ld2RpckEnCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC5ta2RpcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUVYSVNUKQorICAgICAgICAjIFhYWCB0ZXN0IGBtb2RlYCBhcmcKKworICAgIGRlZiB0ZXN0X21rZGlyX3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgYSBjaGFpbiBvZiBkaXJlY3RvcmllcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ25ld2RpckInLCAnbmV3ZGlyQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgICMgWFhYIHRlc3QgYG1vZGVgIGFyZworCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9zeW1saW5rX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgdGFyZ2V0ID0gUCAvICdmaWxlQScKKyAgICAgICAgIyBTeW1saW5raW5nIGEgcGF0aCB0YXJnZXQKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgIyBTeW1saW5raW5nIGEgc3RyIHRhcmdldAorICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8oc3RyKHRhcmdldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmsuaXNfZGlyKCkpCisgICAgICAgICMgU3ltbGlua2luZyB0byBhIGRpcmVjdG9yeQorICAgICAgICB0YXJnZXQgPSBQIC8gJ2RpckInCisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluay5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3QobGluay5pdGVyZGlyKCkpKQorCisgICAgZGVmIHRlc3RfaXNfZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2RpckEnKS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2RpcigpKQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbGlua0EnKS5pc19kaXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoUCAvICdsaW5rQicpLmlzX2RpcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUC8gJ2Jyb2tlbkxpbmsnKS5pc19kaXIoKSkKKworICAgIGRlZiB0ZXN0X2lzX2ZpbGUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnZmlsZUEnKS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2ZpbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19maWxlKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfZmlsZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdsaW5rQicpLmlzX2ZpbGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19zeW1saW5rKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfc3ltbGluaygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtCJykuaXNfc3ltbGluaygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQLyAnYnJva2VuTGluaycpLmlzX3N5bWxpbmsoKSkKKworICAgIGRlZiB0ZXN0X2lzX2ZpZm9fZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZmlmbygpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgIm1rZmlmbyIpLCAib3MubWtmaWZvKCkgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X2lzX2ZpZm9fdHJ1ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UsICdteWZpZm8nKQorICAgICAgICBvcy5ta2ZpZm8oc3RyKFApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUC5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2ZpbGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX3NvY2tldF9mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zb2NrZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdkaXJBJykuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfc29ja2V0KCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKSwgIlVuaXggc29ja2V0cyByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfaXNfc29ja2V0X3RydWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFLCAnbXlzb2NrJykKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2suYmluZChzdHIoUCkpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiAiQUZfVU5JWCBwYXRoIHRvbyBsb25nIiBpbiBzdHIoZSk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IGJpbmQgVW5peCBzb2NrZXQ6ICIgKyBzdHIoZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfYmxvY2tfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19ibG9ja19kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19ibG9ja19kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfY2hhcl9kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX3RydWUoc2VsZik6CisgICAgICAgICMgVW5kZXIgVW5peCwgL2Rldi9udWxsIHNob3VsZCBnZW5lcmFsbHkgYmUgYSBjaGFyIGRldmljZQorICAgICAgICBQID0gc2VsZi5jbHMoJy9kZXYvbnVsbCcpCisgICAgICAgIGlmIG5vdCBQLmV4aXN0cygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiL2Rldi9udWxsIHJlcXVpcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLnN0YXQoKSwgcC5zdGF0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJ0c19pbnRlcm5pbmcoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL3Vzci9iaW4vZm9vJykKKyAgICAgICAgcSA9IFAoJy91c3IvbG9jYWwvYmluJykKKyAgICAgICAgIyAndXNyJworICAgICAgICBzZWxmLmFzc2VydElzKHAucGFydHNbMV0sIHEucGFydHNbMV0pCisgICAgICAgICMgJ2JpbicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLnBhcnRzWzJdLCBxLnBhcnRzWzNdKQorCisKK2NsYXNzIFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBhdGgKKworICAgIGRlZiB0ZXN0X2NvbmNyZXRlX2NsYXNzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksCisgICAgICAgICAgICBwYXRobGliLldpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIHBhdGhsaWIuUG9zaXhQYXRoKQorCisgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfZmxhdm91cihzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGF0aGxpYi5Qb3NpeFBhdGgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwYXRobGliLldpbmRvd3NQYXRoKQorCisKK0Bvbmx5X3Bvc2l4CitjbGFzcyBQb3NpeFBhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLlBvc2l4UGF0aAorCisgICAgZGVmIF9jaGVja19zeW1saW5rX2xvb3Aoc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXRoID0gc2VsZi5jbHMoKmFyZ3MpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHByaW50KHBhdGgucmVzb2x2ZSgpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICBvbGRfbWFzayA9IG9zLnVtYXNrKDApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bWFzaywgb2xkX21hc2spCisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ25ld19maWxlJykub3Blbignd2InKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY2NikKKyAgICAgICAgb3MudW1hc2soMG8wMjIpCisgICAgICAgIHdpdGggKHAgLyAnb3RoZXJfbmV3X2ZpbGUnKS5vcGVuKCd3YicpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignb3RoZXJfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjQ0KQorCisgICAgZGVmIHRlc3RfdG91Y2hfbW9kZShzZWxmKToKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW1hc2ssIG9sZF9tYXNrKQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgKHAgLyAnbmV3X2ZpbGUnKS50b3VjaCgpCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCduZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NjYpCisgICAgICAgIG9zLnVtYXNrKDBvMDIyKQorICAgICAgICAocCAvICdvdGhlcl9uZXdfZmlsZScpLnRvdWNoKCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ290aGVyX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY0NCkKKyAgICAgICAgKHAgLyAnbWFza2VkX25ld19maWxlJykudG91Y2gobW9kZT0wbzc1MCkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ21hc2tlZF9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG83NTApCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3Jlc29sdmVfbG9vcChzZWxmKToKKyAgICAgICAgIyBMb29wIGRldGVjdGlvbiBmb3IgYnJva2VuIHN5bWxpbmtzIHVuZGVyIFBPU0lYCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIExvb3BzIHdpdGggcmVsYXRpdmUgc3ltbGlua3MKKyAgICAgICAgb3Muc3ltbGluaygnbGlua1gvaW5zaWRlJywgam9pbignbGlua1gnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWCcpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtZJywgam9pbignbGlua1knKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWScpCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtaLy4uL2xpbmtaJywgam9pbignbGlua1onKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rWicpCisgICAgICAgICMgTG9vcHMgd2l0aCBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2xpbmtVL2luc2lkZScpLCBqb2luKCdsaW5rVScpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtVJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVicpLCBqb2luKCdsaW5rVicpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtWJykKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVy8uLi9saW5rVycpLCBqb2luKCdsaW5rVycpKQorICAgICAgICBzZWxmLl9jaGVja19zeW1saW5rX2xvb3AoQkFTRSwgJ2xpbmtXJykKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBnaXZlbiA9IHNldChwLmdsb2IoIkZJTEVhIikpCisgICAgICAgIGV4cGVjdCA9IHNldCgpIGlmIG5vdCBzdXBwb3J0LmZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoQkFTRSkgZWxzZSBnaXZlbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdpdmVuLCBleHBlY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiRklMRWEqIikpLCBzZXQoKSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBnaXZlbiA9IHNldChwLnJnbG9iKCJGSUxFZCIpKQorICAgICAgICBleHBlY3QgPSBzZXQoKSBpZiBub3Qgc3VwcG9ydC5mc19pc19jYXNlX2luc2Vuc2l0aXZlKEJBU0UpIGVsc2UgZ2l2ZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCoiKSksIHNldCgpKQorCisKK0Bvbmx5X250CitjbGFzcyBXaW5kb3dzUGF0aFRlc3QoX0Jhc2VQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuV2luZG93c1BhdGgKKworICAgIGRlZiB0ZXN0X2dsb2Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIkZJTEVhIikpLCB7IFAoQkFTRSwgImZpbGVBIikgfSkKKworICAgIGRlZiB0ZXN0X3JnbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLnJnbG9iKCJGSUxFZCIpKSwgeyBQKEJBU0UsICJkaXJDL2RpckQvZmlsZUQiKSB9KQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CmluZGV4IDAzMDg0ZTQuLjc0MjUzYjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC0xLDkgKzEsOSBAQAogIyBBIHRlc3Qgc3VpdGUgZm9yIHBkYjsgbm90IHZlcnkgY29tcHJlaGVuc2l2ZSBhdCB0aGUgbW9tZW50LgogCiBpbXBvcnQgZG9jdGVzdAotaW1wb3J0IGltcAogaW1wb3J0IHBkYgogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTIwNSw3ICsyMDUsOCBAQAogICAgIC4uLiAgICAgJ2VuYWJsZSAxJywKICAgICAuLi4gICAgICdjbGVhciAxJywKICAgICAuLi4gICAgICdjb21tYW5kcyAyJywKLSAgICAuLi4gICAgICdwcmludCA0MicsCisgICAgLi4uICAgICAncCAiNDIiJywKKyAgICAuLi4gICAgICdwcmludCgiNDIiLCA3KjYpJywgICAgICMgSXNzdWUgMTg3NjQgKG5vdCBhYm91dCBicmVha3BvaW50cykKICAgICAuLi4gICAgICdlbmQnLAogICAgIC4uLiAgICAgJ2NvbnRpbnVlJywgICMgd2lsbCBzdG9wIGF0IGJyZWFrcG9pbnQgMiAobGluZSA0KQogICAgIC4uLiAgICAgJ2NsZWFyJywgICAgICMgY2xlYXIgYWxsIQpAQCAtMjUyLDExICsyNTMsMTMgQEAKICAgICAoUGRiKSBjbGVhciAxCiAgICAgRGVsZXRlZCBicmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjozCiAgICAgKFBkYikgY29tbWFuZHMgMgotICAgIChjb20pIHByaW50IDQyCisgICAgKGNvbSkgcCAiNDIiCisgICAgKGNvbSkgcHJpbnQoIjQyIiwgNyo2KQogICAgIChjb20pIGVuZAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgMQotICAgIDQyCisgICAgJzQyJworICAgIDQyIDQyCiAgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbigpCiAgICAgLT4gcHJpbnQoMikKICAgICAoUGRiKSBjbGVhcgpAQCAtNDY0LDcgKzQ2Nyw3IEBACiAKIAogIyBNb2R1bGUgZm9yIHRlc3Rpbmcgc2tpcHBpbmcgb2YgbW9kdWxlIHRoYXQgbWFrZXMgYSBjYWxsYmFjawotbW9kID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZV90b19za2lwJykKK21vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZV90b19za2lwJykKIGV4ZWMoJ2RlZiBmb29fcG9ueShjYWxsYmFjayk6IHggPSAxOyBjYWxsYmFjaygpOyByZXR1cm4gTm9uZScsIG1vZC5fX2RpY3RfXykKIAogCkBAIC01OTcsNiArNjAwLDMxMSBAQAogICAgIChQZGIpIGNvbnRpbnVlCiAgICAgIiIiCiAKK2RlZiB0ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudCgpOgorICAgICIiIlRlc3QgdGhhdCBwZGIgc3RvcHMgYWZ0ZXIgYSBuZXh0L3VudGlsL3JldHVybiBpc3N1ZWQgYXQgYSByZXR1cm4gZGVidWcgZXZlbnQuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb25fMigpOgorICAgIC4uLiAgICAgeCA9IDEKKyAgICAuLi4gICAgIHggPSAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIGVuZCA9IDEKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ2JyZWFrIHRlc3RfZnVuY3Rpb25fMicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBicmVhayB0ZXN0X2Z1bmN0aW9uXzIKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT46MQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigyKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4geCA9IDEKKyAgICAoUGRiKSByZXR1cm4KKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigzKXRlc3RfZnVuY3Rpb25fMigpLT5Ob25lCisgICAgLT4geCA9IDIKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHVudGlsCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHJldHVybgorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBlbmQgPSAxCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yKCk6CisgICAgIiIiVGVzdGluZyBza2lwIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzIGZvciAibmV4dCIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IG5leHQoaXQpID09IDAKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpdCA9IHRlc3RfZ2VuKCkKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpLT4xCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJyZXR1cm4iIGNvbW1hbmQKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHlpZWxkIDAKKyAgICAuLi4gICAgIHJldHVybiAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGl0ID0gdGVzdF9nZW4oKQorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgLi4uICAgICAgICAgbmV4dChpdCkKKyAgICAuLi4gICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIC4uLiAgICAgICAgIGFzc2VydCBleC52YWx1ZSA9PSAxCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0cnk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGFzc2VydCBuZXh0KGl0KSA9PSAwCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHJldHVybgorICAgIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDgpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gYXNzZXJ0IGV4LnZhbHVlID09IDEKKyAgICAoUGRiKSBjb250aW51ZQorICAgIGZpbmlzaGVkCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJ1bnRpbCIgY29tbWFuZCBpZiB0YXJnZXQgYnJlYWtwb2luZyBpcyBub3QgcmVhY2hlZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgeWllbGQgMQorICAgIC4uLiAgICAgeWllbGQgMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgICAgIHByaW50KGkpCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwgNCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgdW50aWwgNAorICAgIDAKKyAgICAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpLT4yCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KGkpCisgICAgKFBkYikgY29udGludWUKKyAgICAyCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3AoKToKKyAgICAiIiJUaGUgbmV4dCBjb21tYW5kIG9uIHJldHVybmluZyBmcm9tIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLgorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAuLi4gICAgICAgICBwcmludCgndmFsdWUnLCBpKQorICAgIC4uLiAgICAgeCA9IDEyMworCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnYnJlYWsgdGVzdF9nZW4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgYnJlYWsgdGVzdF9nZW4KKyAgICBCcmVha3BvaW50IDYgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzBdPjoxCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFswXT4oMil0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMAorICAgIChQZGIpIG5leHQKKyAgICB2YWx1ZSAwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMF0+KDMpdGVzdF9nZW4oKQorICAgIC0+IHJldHVybiAxCisgICAgKFBkYikgbmV4dAorICAgIEludGVybmFsIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB4ID0gMTIzCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvcigpOgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgaW4gYSBnZW5lcmF0b3Igd2l0aCBhIHN1Yml0ZXJhdG9yLgorCisgICAgPj4+IGRlZiB0ZXN0X3N1YmdlbmVyYXRvcigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHggPSB5aWVsZCBmcm9tIHRlc3Rfc3ViZ2VuZXJhdG9yKCkKKyAgICAuLi4gICAgIHJldHVybiB4CisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICAgICAgcHJpbnQoJ3ZhbHVlJywgaSkKKyAgICAuLi4gICAgIHggPSAxMjMKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB4ID0geWllbGQgZnJvbSB0ZXN0X3N1YmdlbmVyYXRvcigpCisgICAgKFBkYikgbmV4dAorICAgIHZhbHVlIDAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigzKXRlc3RfZ2VuKCkKKyAgICAtPiByZXR1cm4geAorICAgIChQZGIpIG5leHQKKyAgICBJbnRlcm5hbCBTdG9wSXRlcmF0aW9uOiAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCiAKIGNsYXNzIFBkYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjE3LDYgKzkyNSwzNiBAQAogICAgICAgICBzdGRlcnIgPSBzdGRlcnIgYW5kIGJ5dGVzLmRlY29kZShzdGRlcnIpCiAgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgogCisgICAgZGVmIF9hc3NlcnRfZmluZF9mdW5jdGlvbihzZWxmLCBmaWxlX2NvbnRlbnQsIGZ1bmNfbmFtZSwgZXhwZWN0ZWQpOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSB0ZXh0d3JhcC5kZWRlbnQoZmlsZV9jb250ZW50KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBOb25lIGlmIG5vdCBleHBlY3RlZCBlbHNlICgKKyAgICAgICAgICAgIGV4cGVjdGVkWzBdLCBzdXBwb3J0LlRFU1RGTiwgZXhwZWN0ZWRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3RlZCwgcGRiLmZpbmRfZnVuY3Rpb24oZnVuY19uYW1lLCBzdXBwb3J0LlRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9maW5kX2Z1bmN0aW9uX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKCcnLCAnZm9vJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKAorICAgICAgICAgICAgIiIiXAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIHF1dXgoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFyJywKKyAgICAgICAgICAgICgnYmFyJywgNCksCisgICAgICAgICkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKICAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKaW5kZXggMWNhY2RlYS4uNTAyNTc5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKQEAgLTUsNDQgKzUsMjggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBtYXRoIGltcG9ydCBjb3B5c2lnbgogCi1kZWYgZGlzYXNzZW1ibGUoZnVuYyk6Ci0gICAgZiA9IFN0cmluZ0lPKCkKLSAgICB0bXAgPSBzeXMuc3Rkb3V0Ci0gICAgc3lzLnN0ZG91dCA9IGYKLSAgICB0cnk6Ci0gICAgICAgIGRpcy5kaXMoZnVuYykKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMuc3Rkb3V0ID0gdG1wCi0gICAgcmVzdWx0ID0gZi5nZXR2YWx1ZSgpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIHJlc3VsdAorZnJvbSB0ZXN0LmJ5dGVjb2RlX2hlbHBlciBpbXBvcnQgQnl0ZWNvZGVUZXN0Q2FzZQogCi1kZWYgZGlzX3NpbmdsZShsaW5lKToKLSAgICByZXR1cm4gZGlzYXNzZW1ibGUoY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpKQotCi0KLWNsYXNzIFRlc3RUcmFuZm9ybXModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVGVzdFRyYW5mb3JtcyhCeXRlY29kZVRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3Vub3Qoc2VsZik6CiAgICAgICAgICMgVU5BUllfTk9UIFBPUF9KVU1QX0lGX0ZBTFNFICAtLT4gIFBPUF9KVU1QX0lGX1RSVUUnCiAgICAgICAgIGRlZiB1bm90KHgpOgogICAgICAgICAgICAgaWYgbm90IHggPT0gMjoKICAgICAgICAgICAgICAgICBkZWwgeAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCi0gICAgICAgIGZvciBlbGVtIGluICgnUE9QX0pVTVBfSUZfVFJVRScsKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUodW5vdCwgJ1VOQVJZX05PVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZSh1bm90LCAnUE9QX0pVTVBfSUZfRkFMU0UnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUodW5vdCwgJ1BPUF9KVU1QX0lGX1RSVUUnKQogCiAgICAgZGVmIHRlc3RfZWxpbV9pbnZlcnNpb25fb2ZfaXNfb3JfaW4oc2VsZik6Ci0gICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnbm90IGEgaXMgYicsICcoaXMgbm90KScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaW4gYicsICcobm90IGluKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnKGlzKScsKSwKLSAgICAgICAgICAgICgnbm90IGEgbm90IGluIGInLCAnKGluKScsKSwKKyAgICAgICAgZm9yIGxpbmUsIGNtcF9vcCBpbiAoCisgICAgICAgICAgICAoJ25vdCBhIGlzIGInLCAnaXMgbm90JywpLAorICAgICAgICAgICAgKCdub3QgYSBpbiBiJywgJ25vdCBpbicsKSwKKyAgICAgICAgICAgICgnbm90IGEgaXMgbm90IGInLCAnaXMnLCksCisgICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJ2luJywpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdDT01QQVJFX09QJywgY21wX29wKQogCiAgICAgZGVmIHRlc3RfZ2xvYmFsX2FzX2NvbnN0YW50KHNlbGYpOgogICAgICAgICAjIExPQURfR0xPQkFMIE5vbmUvVHJ1ZS9GYWxzZSAgLS0+ICBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZQpAQCAtNTYsMTcgKzQwLDE0IEBACiAgICAgICAgIGRlZiBoKHgpOgogICAgICAgICAgICAgRmFsc2UKICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgIGZvciBmdW5jLCBuYW1lIGluICgoZiwgJ05vbmUnKSwgKGcsICdUcnVlJyksIChoLCAnRmFsc2UnKSk6Ci0gICAgICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmdW5jKQotICAgICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0dMT0JBTCcsKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICcoJytuYW1lKycpJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgIGZvciBmdW5jLCBlbGVtIGluICgoZiwgTm9uZSksIChnLCBUcnVlKSwgKGgsIEZhbHNlKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZnVuYywgJ0xPQURfR0xPQkFMJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmdW5jLCAnTE9BRF9DT05TVCcsIGVsZW0pCiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAnQWRkaW5nIGEgZG9jc3RyaW5nIG1hZGUgdGhpcyB0ZXN0IGZhaWwgaW4gUHkyLjUuMCcKICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0xPQURfQ09OU1QnLCBkaXNhc3NlbWJsZShmKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9HTE9CQUwnLCBkaXNhc3NlbWJsZShmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0dMT0JBTCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCAnTE9BRF9DT05TVCcsIE5vbmUpCiAKICAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6CiAgICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4CkBAIC03NCwxMSArNTUsMTAgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGxpc3QKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKICAgICAgICAgZm9yIGVsZW0gaW4gKCdMT0FEX0NPTlNUJywgJ1BPUF9KVU1QX0lGX0ZBTFNFJyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCBlbGVtKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0pVTVBfQUJTT0xVVEUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShmLCBlbGVtKQogCiAgICAgZGVmIHRlc3RfcGFja191bnBhY2soc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTg2LDI4ICs2NiwzMCBAQAogICAgICAgICAgICAgKCdhLCBiID0gYSwgYicsICdST1RfVFdPJywpLAogICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsJycsJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdVTlBBQ0tfVFVQTEUnKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl90dXBsZXNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ2EgPSAxLDIsMycsICcoKDEsIDIsIDMpKScpLAotICAgICAgICAgICAgKCcoImEiLCJiIiwiYyIpJywgIigoJ2EnLCAnYicsICdjJykpIiksCi0gICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKLSAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCi0gICAgICAgICAgICAoJygoMSwgMiksIDMsIDQpJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICgnYSA9IDEsMiwzJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICgnYScsICdiJywgJ2MnKSksCisgICAgICAgICAgICAoJ2EsYixjID0gMSwyLDMnLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCcoTm9uZSwgMSwgTm9uZSknLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwnJywnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKIAogICAgICAgICAjIExvbmcgdHVwbGVzIHNob3VsZCBiZSBmb2xkZWQgdG9vLgotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSkpCisgICAgICAgIGNvZGUgPSBjb21waWxlKHJlcHIodHVwbGUocmFuZ2UoMTAwMDApKSksJycsJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfVFVQTEUnKQogICAgICAgICAjIE9uZSBMT0FEX0NPTlNUIGZvciB0aGUgdHVwbGUsIG9uZSBmb3IgdGhlIE5vbmUgcmV0dXJuIHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLmNvdW50KCdMT0FEX0NPTlNUJyksIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1RVUExFJywgYXNtKQorICAgICAgICBsb2FkX2NvbnN0cyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnTE9BRF9DT05TVCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRfY29uc3RzKSwgMikKIAogICAgICAgICAjIEJ1ZyAxMDUzODE5OiAgVHVwbGUgb2YgY29uc3RhbnRzIG1pc2lkZW50aWZpZWQgd2hlbiBwcmVzZW50ZWQgd2l0aDoKICAgICAgICAgIyAuIC4gLiBvcGNvZGVfd2l0aF9hcmcgMTAwICAgdW5hcnlfb3Bjb2RlICAgQlVJTERfVFVQTEUgMSAgLiAuIC4KQEAgLTEyOSwxNCArMTExLDE0IEBACiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9saXN0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKICAgICAgICAgICAgICMgaW4vbm90IGluIGNvbnN0YW50cyB3aXRoIEJVSUxEX0xJU1Qgc2hvdWxkIGJlIGZvbGRlZCB0byBhIHR1cGxlOgotICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAnKDEsIDIsIDMpJyksCi0gICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKLSAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAnKChOb25lLCAxLCBOb25lKSknKSwKLSAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAoMSwgMiwgMykpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbImEiLCJiIiwiYyJdJywgKCdhJywgJ2InLCAnYycpKSwKKyAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAoTm9uZSwgMSwgTm9uZSkpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiBbKDEsIDIpLCAzLCA0XScsICgoMSwgMiksIDMsIDQpKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX0xJU1QnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9MSVNUJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2Zfc2V0c19vZl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKQEAgLTE0NywxOCArMTI5LDkgQEAKICAgICAgICAgICAgICgnYSBub3QgaW4geygxLCAyKSwgMywgNH0nLCBmcm96ZW5zZXQoeygxLCAyKSwgMywgNH0pKSwKICAgICAgICAgICAgICgnYSBpbiB7MSwgMiwgMywgMywgMiwgMX0nLCBmcm96ZW5zZXQoezEsIDIsIDN9KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfU0VUJywgYXNtKQotCi0gICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBmcm96ZW5zZXQgJ2VsZW0nIGlzIGluIHRoZSBkaXNhc3NlbWJseQotICAgICAgICAgICAgIyBUaGUgb3JkZXJpbmcgb2YgdGhlIGVsZW1lbnRzIGluIHJlcHIoIGZyb3plbnNldCApIGlzbid0Ci0gICAgICAgICAgICAjIGd1YXJhbnRlZWQsIHNvIHdlIGp1bXAgdGhyb3VnaCBzb21lIGhvb3BzIHRvIGVuc3VyZSB0aGF0IHdlIGhhdmUKLSAgICAgICAgICAgICMgdGhlIGZyb3plbnNldCB3ZSBleHBlY3Q6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdmcm96ZW5zZXQnLCBhc20pCi0gICAgICAgICAgICAjIEV4dHJhY3QgdGhlIGZyb3plbnNldCBsaXRlcmFsIGZyb20gdGhlIGRpc2Fzc2VtYmx5OgotICAgICAgICAgICAgbSA9IHJlLm1hdGNoKHInLiooZnJvemVuc2V0XCh7Lip9XCkpLionLCBhc20sIHJlLkRPVEFMTCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKG0uZ3JvdXAoMSkpLCBlbGVtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9TRVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSByZXN1bHRpbmcgY29kZSBhY3R1YWxseSB3b3JrczoKICAgICAgICAgZGVmIGYoYSk6CkBAIC0xNzYsOTggKzE0OSwxMDMgQEAKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfYmlub3BzX29uX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdhID0gMiszKzQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCi0gICAgICAgICAgICAoJyJAIio0JywgIignQEBAQCcpIiksICAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2E9ImFiYyIgKyAiZGVmIicsICIoJ2FiY2RlZicpIiksICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCi0gICAgICAgICAgICAoJ2EgPSAzKio0JywgJyg4MSknKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKLSAgICAgICAgICAgICgnYSA9IDMqNCcsICcoMTIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtdWx0aXBseQotICAgICAgICAgICAgKCdhID0gMTMvLzQnLCAnKDMpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGZsb29yIGRpdmlkZQotICAgICAgICAgICAgKCdhID0gMTQlNCcsICcoMiknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbwotICAgICAgICAgICAgKCdhID0gMiszJywgJyg1KScpLCAgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFkZAotICAgICAgICAgICAgKCdhID0gMTMtNCcsICcoOSknKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHN1YnRyYWN0Ci0gICAgICAgICAgICAoJ2EgPSAoMTIsMTMpWzFdJywgJygxMyknKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCi0gICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgJyg1MiknKSwgICAgICAgICAgICAgICAgIyBiaW5hcnkgbHNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyA+PiAyJywgJygzKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcnNoaWZ0Ci0gICAgICAgICAgICAoJ2EgPSAxMyAmIDcnLCAnKDUpJyksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCi0gICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAnKDEwKScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgeG9yCi0gICAgICAgICAgICAoJ2EgPSAxMyB8IDcnLCAnKDE1KScpLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgb3IKKyAgICAgICAgICAgICgnYSA9IDIrMys0JywgOSksICAgICAgICAgICAgICAgICAgICMgY2hhaW5lZCBmb2xkCisgICAgICAgICAgICAoJyJAIio0JywgJ0BAQEAnKSwgICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYT0iYWJjIiArICJkZWYiJywgJ2FiY2RlZicpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcworICAgICAgICAgICAgKCdhID0gMyoqNCcsIDgxKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgcG93ZXIKKyAgICAgICAgICAgICgnYSA9IDMqNCcsIDEyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG11bHRpcGx5CisgICAgICAgICAgICAoJ2EgPSAxMy8vNCcsIDMpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKKyAgICAgICAgICAgICgnYSA9IDE0JTQnLCAyKSwgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IG1vZHVsbworICAgICAgICAgICAgKCdhID0gMiszJywgNSksICAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYWRkCisgICAgICAgICAgICAoJ2EgPSAxMy00JywgOSksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAorICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsIDEzKSwgICAgICAgICAgICAgIyBiaW5hcnkgc3Vic2NyCisgICAgICAgICAgICAoJ2EgPSAxMyA8PCAyJywgNTIpLCAgICAgICAgICAgICAgICAjIGJpbmFyeSBsc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzID4+IDInLCAzKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAorICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgNSksICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgYW5kCisgICAgICAgICAgICAoJ2EgPSAxMyBeIDcnLCAxMCksICAgICAgICAgICAgICAgICAjIGJpbmFyeSB4b3IKKyAgICAgICAgICAgICgnYSA9IDEzIHwgNycsIDE1KSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JJTkFSWV8nKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9MisiYiInKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMiknLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYicpIiwgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnYT0yKyJiIicsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ2InKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFyZ2Ugc2VxdWVuY2VzIGRvIG5vdCByZXN1bHQgZnJvbSBmb2xkaW5nCi0gICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9IngiKjEwMDAnKQotICAgICAgICBzZWxmLmFzc2VydEluKCcoMTAwMCknLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhPSJ4IioxMDAwJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAxMDAwKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X3N1YnNjcl9vbl91bmljb2RlKHNlbGYpOgogICAgICAgICAjIHZhbGlkIGNvZGUgZ2V0IG9wdGltaXplZAotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZm9vIlswXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXHUwMDYxXHVmZmZmIlsxXScpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oIignXFx1ZmZmZicpIiwgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciXFUwMDAxMjM0NWFiY2RlZiJbM10nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2MnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJmb28iWzBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCAnZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQklOQVJZX1NVQlNDUicpCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciXHUwMDYxXHVmZmZmIlsxXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1x1ZmZmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCdCSU5BUllfU1VCU0NSJykKKworICAgICAgICAjIFdpdGggUEVQIDM5Mywgbm9uLUJNUCBjaGFyIGdldCBvcHRpbWl6ZWQKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJcVTAwMDEyMzQ1IlswXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ1xVMDAwMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgICAgICMgaW52YWxpZCBjb2RlIGRvZXNuJ3QgZ2V0IG9wdGltaXplZAogICAgICAgICAjIG91dCBvZiByYW5nZQotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCciZnV1IlsxMF0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCdCSU5BUllfU1VCU0NSJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnImZ1dSJbMTBdJywgJycsICdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQogCiAgICAgZGVmIHRlc3RfZm9sZGluZ19vZl91bmFyeW9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnLTAuNScsICcoLTAuNSknKSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCi0gICAgICAgICAgICAoJy0wLjAnLCAnKC0wLjApJyksICAgICAgICAgICAgICAgICAgICAgIyAtMC4wCi0gICAgICAgICAgICAoJy0oMS4wLTEuMCknLCcoLTAuMCknKSwgICAgICAgICAgICAgICAgIyAtMC4wIGFmdGVyIGZvbGRpbmcKLSAgICAgICAgICAgICgnLTAnLCAnKDApJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCi0gICAgICAgICAgICAoJ34tMicsICcoMSknKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKLSAgICAgICAgICAgICgnKzEnLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IHBvc2l0aXZlCisgICAgICAgICAgICAoJy0wLjUnLCAtMC41KSwgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCisgICAgICAgICAgICAoJy0wLjAnLCAtMC4wKSwgICAgICAgICAgICAgICAgICAgICAjIC0wLjAKKyAgICAgICAgICAgICgnLSgxLjAtMS4wKScsIC0wLjApLCAgICAgICAgICAgICAgICMgLTAuMCBhZnRlciBmb2xkaW5nCisgICAgICAgICAgICAoJy0wJywgMCksICAgICAgICAgICAgICAgICAgICAgICAgICAjIC0wCisgICAgICAgICAgICAoJ34tMicsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICAgICAgKCcrMScsIDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IC0wLjAgd29ya3MgYWZ0ZXIgbWFyc2hhbGluZwogICAgICAgICBkZWYgbmVnemVybygpOgogICAgICAgICAgICAgcmV0dXJuIC0oMS4wLTEuMCkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBkaXNhc3NlbWJsZShuZWd6ZXJvKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlzaWduKDEuMCwgbmVnemVybygpKSA8IDApCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgdW5mb2xkYWJsZXMgYXJlIHNraXBwZWQKLSAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCctImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgbmVnYXRpdmUKLSAgICAgICAgICAgICgnfiJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IGludmVydAorICAgICAgICBmb3IgbGluZSwgZWxlbSwgb3BuYW1lIGluICgKKyAgICAgICAgICAgICgnLSJhYmMiJywgJ2FiYycsICdVTkFSWV9ORUdBVElWRScpLAorICAgICAgICAgICAgKCd+ImFiYyInLCAnYWJjJywgJ1VOQVJZX0lOVkVSVCcpLAogICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1VOQVJZXycsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgb3BuYW1lKQogCiAgICAgZGVmIHRlc3RfZWxpbV9leHRyYV9yZXR1cm4oc2VsZik6CiAgICAgICAgICMgUkVUVVJOIExPQURfQ09OU1QgTm9uZSBSRVRVUk4gIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9DT05TVCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignKE5vbmUpJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdMT0FEX0NPTlNUJywgTm9uZSkKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF90b19yZXR1cm4oc2VsZik6CiAgICAgICAgICMgSlVNUF9GT1JXQVJEIHRvIFJFVFVSTiAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZihjb25kLCB0cnVlX3ZhbHVlLCBmYWxzZV92YWx1ZSk6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZV92YWx1ZSBpZiBjb25kIGVsc2UgZmFsc2VfdmFsdWUKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfQUJTT0xVVEUnKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjEoc2VsZik6CiAgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCkBAIC0yODAsNDggKzI1OCw1MyBAQAogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAogICAgICAgICAgICAgICAgIHJldHVybiA1CiAgICAgICAgICAgICByZXR1cm4gNgotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfRk9SV0FSRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9BQlNPTFVURScpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDYpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMihzZWxmKToKICAgICAgICAgIyBFbGltaW5hdGUgZGVhZCBjb2RlOiBqdW1wcyBpbW1lZGlhdGVseSBhZnRlciByZXR1cm5zIGNhbid0IGJlIHJlYWNoZWQKICAgICAgICAgZGVmIGYoY29uZDEsIGNvbmQyKToKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQogICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBvbmUganVtcCBmb3IgdGhlIHdoaWxlIGxvb3AuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ0pVTVBfQUJTT0xVVEUnKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnSlVNUF9BQlNPTFVURSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAxKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCAyKQogCiAgICAgZGVmIHRlc3RfbWFrZV9mdW5jdGlvbl9kb2VzbnRfYmFpbChzZWxmKToKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgIGRlZiBnKCktPjErMToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByZXR1cm4gZwotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfQUREJywgYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0JJTkFSWV9BREQnKQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRfZm9sZGluZyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTEyNDQ6IGFnZ3Jlc3NpdmUgY29uc3RhbnQgZm9sZGluZy4KICAgICAgICAgZXhwcnMgPSBbCi0gICAgICAgICAgICAiMyAqIC01IiwKLSAgICAgICAgICAgICItMyAqIDUiLAotICAgICAgICAgICAgIjIgKiAoMyAqIDQpIiwKLSAgICAgICAgICAgICIoMiAqIDMpICogNCIsCi0gICAgICAgICAgICAiKC0xLCAyLCAzKSIsCi0gICAgICAgICAgICAiKDEsIC0yLCAzKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSIsCi0gICAgICAgICAgICAiKDEsIDIsIC0zKSAqIDYiLAotICAgICAgICAgICAgImxhbWJkYSB4OiB4IGluIHsoMyAqIC01KSArICgtMSAtIDYpLCAoMSwgLTIsIDMpICogMiwgTm9uZX0iLAorICAgICAgICAgICAgJzMgKiAtNScsCisgICAgICAgICAgICAnLTMgKiA1JywKKyAgICAgICAgICAgICcyICogKDMgKiA0KScsCisgICAgICAgICAgICAnKDIgKiAzKSAqIDQnLAorICAgICAgICAgICAgJygtMSwgMiwgMyknLAorICAgICAgICAgICAgJygxLCAtMiwgMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMyknLAorICAgICAgICAgICAgJygxLCAyLCAtMykgKiA2JywKKyAgICAgICAgICAgICdsYW1iZGEgeDogeCBpbiB7KDMgKiAtNSkgKyAoLTEgLSA2KSwgKDEsIC0yLCAzKSAqIDIsIE5vbmV9JywKICAgICAgICAgXQogICAgICAgICBmb3IgZSBpbiBleHByczoKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOQVJZXycsIGFzbSwgZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20sIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF8nLCBhc20sIGUpCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShlLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnVU5BUllfJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnN0ci5vcG5hbWUuc3RhcnRzd2l0aCgnQklOQVJZXycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JVSUxEXycpKQorCiAKIGNsYXNzIFRlc3RCdWdsZXRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzQzLDcgKzMyNiw3IEBACiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIAogICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgorICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgogICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgY291bnRzID0gW05vbmVdICogNQogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CmluZGV4IDdmMTA0NzIuLmI4NWEyNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjQ3LnB5CkBAIC0xNSwxMiArMTUsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZS5kaWdlc3Rfc2l6ZSBpcyBOb25lIG9yIG1vZHVsZS5kaWdlc3Rfc2l6ZSA+IDApCiAgICAgICAgIHNlbGYuY2hlY2tfb2JqZWN0KG1vZHVsZS5uZXcsIG1vZHVsZS5kaWdlc3Rfc2l6ZSwga2V5KQogCi0gICAgZGVmIGNoZWNrX29iamVjdChzZWxmLCBjbHMsIGRpZ2VzdF9zaXplLCBrZXkpOgorICAgIGRlZiBjaGVja19vYmplY3Qoc2VsZiwgY2xzLCBkaWdlc3Rfc2l6ZSwga2V5LCBkaWdlc3Rtb2Q9Tm9uZSk6CiAgICAgICAgIGlmIGtleSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG9iajEgPSBjbHMoa2V5KQotICAgICAgICAgICAgb2JqMiA9IGNscyhrZXksIGInc3RyaW5nJykKLSAgICAgICAgICAgIGgxID0gY2xzKGtleSwgYidzdHJpbmcnKS5kaWdlc3QoKQotICAgICAgICAgICAgb2JqMyA9IGNscyhrZXkpCisgICAgICAgICAgICBpZiBkaWdlc3Rtb2QgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBkaWdlc3Rtb2QgPSBtZDUKKyAgICAgICAgICAgIG9iajEgPSBjbHMoa2V5LCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQorICAgICAgICAgICAgb2JqMiA9IGNscyhrZXksIGInc3RyaW5nJywgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKKyAgICAgICAgICAgIGgxID0gY2xzKGtleSwgYidzdHJpbmcnLCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKS5kaWdlc3QoKQorICAgICAgICAgICAgb2JqMyA9IGNscyhrZXksIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCiAgICAgICAgICAgICBvYmozLnVwZGF0ZShiJ3N0cmluZycpCiAgICAgICAgICAgICBoMiA9IG9iajMuZGlnZXN0KCkKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNGFlMzg2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLWNsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCi0gICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAotICAgICAgICAgICAgYidcXFx4ZDBceDlmJwotICAgICAgICApCi0KLSAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgotICAgICAgICAjIHNlZSAjMTg4MgotICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQotCi0gICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoKQotCi0gICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgotICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCi0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGMsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCi0KLSAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6Ci0gICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQotCi0gICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgotICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKLSAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAotICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKLQotICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKLQotICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCi0KLSAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgotICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgotICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKLSAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKLSAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKLSAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFBFUDI2M1Rlc3QpCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CmluZGV4IDRiMTZjYmIuLjliYWU2ZGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjc3LnB5CkBAIC05OSwxMCArOTksNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKICAgICAgICAgICAgIGZuKGZpbGVuYW1lKQogICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQotICAgICAgICAjIGxpc3RkaXIgbWF5IGFwcGVuZCBhIHdpbGRjYXJkIHRvIHRoZSBmaWxlbmFtZQotICAgICAgICBpZiBmbiBpcyBvcy5saXN0ZGlyIGFuZCBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGV4Y19maWxlbmFtZSwgXywgd2lsZGNhcmQgPSBleGNfZmlsZW5hbWUucnBhcnRpdGlvbihvcy5zZXApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpbGRjYXJkLCAnKi4qJykKICAgICAgICAgaWYgY2hlY2tfZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19maWxlbmFtZSwgZmlsZW5hbWUsICJGdW5jdGlvbiAnJXMoJWEpIGZhaWxlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlYSIgJQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5IGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKaW5kZXggMzU1ZWZlNy4uOTg4MzAwMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKQEAgLTE5OSwxNCArMTk5LDE0IEBACiAgICAgICAgIGltcG9ydCB0NQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ2ZvbycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmcnLCAndDUnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ19fc3BlY19fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbycsICdzdHJpbmcnLCAndDUnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1LmZvbykpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnc3RyaW5nJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3NwZWNfXycsICdzdHJpbmcnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1LnN0cmluZykpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19zcGVjX18nLCAnc3BhbSddKQogCiAgICAgZGVmIHRlc3RfNihzZWxmKToKICAgICAgICAgaGllciA9IFsKQEAgLTIyMiwxNCArMjIyLDE1IEBACiAgICAgICAgIGltcG9ydCB0NgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDYpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19zcGVjX18nXSkKICAgICAgICAgcyA9ICIiIgogICAgICAgICAgICAgaW1wb3J0IHQ2CiAgICAgICAgICAgICBmcm9tIHQ2IGltcG9ydCAqCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDYpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2FsbF9fJywgJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nLCAnZWdncycsICdoYW0nLCAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJywgJ19fc3BlY19fJywgJ2VnZ3MnLCAnaGFtJywgJ3NwYW0nXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyKCksIFsnZWdncycsICdoYW0nLCAnc2VsZicsICdzcGFtJywgJ3Q2J10pCiAgICAgICAgICAgICAiIiIKICAgICAgICAgc2VsZi5ydW5fY29kZShzKQpAQCAtMjU2LDE4ICsyNTcsMTkgQEAKICAgICAgICAgaW1wb3J0IHQ3IGFzIHRhcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodGFzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKICAgICAgICAgZnJvbSB0NyBpbXBvcnQgc3ViIGFzIHN1YnBhcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIoc3VicGFyKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnX19zcGVjX18nXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCiAgICAgICAgIGZyb20gdDcuc3ViIGltcG9ydCBzdWJzdWIgYXMgc3Vic3Vic3ViCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJzdWJzdWIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ3NwYW0nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ19fc3BlY19fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0nXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3Vic3ViKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQppbmRleCBhODQyNmI1Li4zNzBiMmFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZ2ltcG9ydC5weQpAQCAtNiw3ICs2LDcgQEAKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gaW1wIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZQorZnJvbSBpbXBvcnRsaWIudXRpbCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGNyZWF0ZV9lbXB0eV9maWxlCiAKIGNsYXNzIFRlc3RJbXBvcnQodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9wa2d1dGlsLnB5CmluZGV4IGZkMDY2MTQuLmQ3M2IyMTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTIgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHVubG9hZCwgY2hlY2tfd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHBrZ3V0aWwKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgemlwZmlsZQogCkBAIC0xMDUsNyArMTA1LDcgQEAKICAgICBjbGFzcyBNeVRlc3RMb2FkZXIob2JqZWN0KToKICAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGVtcHR5IG1vZHVsZQotICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSwgaW1wLm5ld19tb2R1bGUoZnVsbG5hbWUpKQorICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSwgdHlwZXMuTW9kdWxlVHlwZShmdWxsbmFtZSkpCiAgICAgICAgICAgICBtb2QuX19maWxlX18gPSAiPCVzPiIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXwogICAgICAgICAgICAgbW9kLl9fbG9hZGVyX18gPSBzZWxmCiAgICAgICAgICAgICAjIE1ha2UgaXQgYSBwYWNrYWdlCkBAIC0yMDAsNiArMjAwLDggQEAKICAgICAgICAgZGlybmFtZSA9IHNlbGYuY3JlYXRlX2luaXQocGtnbmFtZSkKICAgICAgICAgcGF0aGl0ZW0gPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgcGtnbmFtZSkKICAgICAgICAgZnVsbG5hbWUgPSAne30ue30nLmZvcm1hdChwa2duYW1lLCBtb2RuYW1lKQorICAgICAgICBzeXMubW9kdWxlcy5wb3AoZnVsbG5hbWUsIE5vbmUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChwa2duYW1lLCBOb25lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zdWJtb2R1bGUoZGlybmFtZSwgcGtnbmFtZSwgbW9kbmFtZSwgMCkKIApAQCAtMjA4LDkgKzIxMCwxNiBAQAogICAgICAgICAgICAgaW1wb3J0ZXJzID0gbGlzdChpdGVyX2ltcG9ydGVycyhmdWxsbmFtZSkpCiAgICAgICAgICAgICBleHBlY3RlZF9pbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoaXRlbSkKICAgICAgICAgICAgIGZvciBmaW5kZXIgaW4gaW1wb3J0ZXJzOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IGxvYWRlci5sb2FkZXIKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgRm9yIG5vdyB3ZSBzdGlsbCBhbGxvdyByYXcgbG9hZGVycyBmcm9tCisgICAgICAgICAgICAgICAgICAgICMgZmluZF9tb2R1bGUoKS4KKyAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaW5kZXIsIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlcikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRlciwgZXhwZWN0ZWRfaW1wb3J0ZXIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpbmRlci5maW5kX21vZHVsZShmdWxsbmFtZSksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZpbmRlci5maW5kX21vZHVsZShwa2duYW1lKSkKIApAQCAtMjIyLDggKzIzMSwxMSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXJuYW1lKQogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0nXQotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtLmVnZ3MnXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbSddCisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtLmVnZ3MnXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKIAogCiAgICAgZGVmIHRlc3RfbWl4ZWRfbmFtZXNwYWNlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKaW5kZXggOWU4NmIzZC4uYWJiMWQxOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CkBAIC0xLDk0ICsxLDg3IEBACi0jIENvcHlyaWdodCAoQykgMjAwMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBwbGlzdGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBiaW5hc2NpaQoraW1wb3J0IGNvbGxlY3Rpb25zCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KIAorQUxMX0ZPUk1BVFM9KHBsaXN0bGliLkZNVF9YTUwsIHBsaXN0bGliLkZNVF9CSU5BUlkpCiAKLSMgVGhpcyB0ZXN0IGRhdGEgd2FzIGdlbmVyYXRlZCB0aHJvdWdoIENvY29hJ3MgTlNEaWN0aW9uYXJ5IGNsYXNzCi1URVNUREFUQSA9IGIiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/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+Ci0iIiIucmVwbGFjZShiIiAiICogOCwgYiJcdCIpICAjIEFwcGxlIGFzIHdlbGwgYXMgcGxpc3RsaWIucHkgb3V0cHV0IGhhcmQgdGFicworIyBUaGUgdGVzdGRhdGEgaXMgZ2VuZXJhdGVkIHVzaW5nIE1hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQorIyAod2hpY2ggdXNpbmcgUHlPYmpDIHRvIGNvbnRyb2wgdGhlIENvY29hIGNsYXNzZXMgZm9yIGdlbmVyYXRpbmcgcGxpc3RzKQorVEVTVERBVEE9eworICAgIHBsaXN0bGliLkZNVF9YTUw6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lQejRLUENGRVQwTlUKKyAgICAgICAgV1ZCRklIQnNhWE4wSUZCVlFreEpReUFpTFM4dlFYQndiR1V2TDBSVVJDQlFURWxUVkNBeExqQXZMMFZPCisgICAgICAgIElpQWlhSFIwY0RvdkwzZDNkeTVoY0hCc1pTNWpiMjB2UkZSRWN5OVFjbTl3WlhKMGVVeHBjM1F0TVM0dworICAgICAgICBMbVIwWkNJK0NqeHdiR2x6ZENCMlpYSnphVzl1UFNJeExqQWlQZ284WkdsamRENEtDVHhyWlhrK1lVUmgKKyAgICAgICAgZEdVOEwydGxlVDRLQ1R4a1lYUmxQakl3TURRdE1UQXRNalpVTVRBNk16TTZNek5hUEM5a1lYUmxQZ29KCisgICAgICAgIFBHdGxlVDVoUkdsamREd3ZhMlY1UGdvSlBHUnBZM1ErQ2drSlBHdGxlVDVoUm1Gc2MyVldZV3gxWlR3dgorICAgICAgICBhMlY1UGdvSkNUeG1ZV3h6WlM4K0Nna0pQR3RsZVQ1aFZISjFaVlpoYkhWbFBDOXJaWGsrQ2drSlBIUnkKKyAgICAgICAgZFdVdlBnb0pDVHhyWlhrK1lWVnVhV052WkdWV1lXeDFaVHd2YTJWNVBnb0pDVHh6ZEhKcGJtYytUY09rCisgICAgICAgIGMzTnBaeXdnVFdIRG56d3ZjM1J5YVc1blBnb0pDVHhyWlhrK1lXNXZkR2hsY2xOMGNtbHVaend2YTJWNQorICAgICAgICBQZ29KQ1R4emRISnBibWMrSm14ME8yaGxiR3h2SUNaaGJYQTdJQ2RvYVNjZ2RHaGxjbVVoSm1kME96d3YKKyAgICAgICAgYzNSeWFXNW5QZ29KQ1R4clpYaytaR1ZsY0dWeVJHbGpkRHd2YTJWNVBnb0pDVHhrYVdOMFBnb0pDUWs4CisgICAgICAgIGEyVjVQbUU4TDJ0bGVUNEtDUWtKUEdsdWRHVm5aWEkrTVRjOEwybHVkR1ZuWlhJK0Nna0pDVHhyWlhrKworICAgICAgICBZand2YTJWNVBnb0pDUWs4Y21WaGJENHpNaTQxUEM5eVpXRnNQZ29KQ1FrOGEyVjVQbU04TDJ0bGVUNEsKKyAgICAgICAgQ1FrSlBHRnljbUY1UGdvSkNRa0pQR2x1ZEdWblpYSStNVHd2YVc1MFpXZGxjajRLQ1FrSkNUeHBiblJsCisgICAgICAgIFoyVnlQakk4TDJsdWRHVm5aWEkrQ2drSkNRazhjM1J5YVc1blBuUmxlSFE4TDNOMGNtbHVaejRLQ1FrSgorICAgICAgICBQQzloY25KaGVUNEtDUWs4TDJScFkzUStDZ2s4TDJScFkzUStDZ2s4YTJWNVBtRkdiRzloZER3dmEyVjUKKyAgICAgICAgUGdvSlBISmxZV3crTUM0MVBDOXlaV0ZzUGdvSlBHdGxlVDVoVEdsemREd3ZhMlY1UGdvSlBHRnljbUY1CisgICAgICAgIFBnb0pDVHh6ZEhKcGJtYytRVHd2YzNSeWFXNW5QZ29KQ1R4emRISnBibWMrUWp3dmMzUnlhVzVuUGdvSgorICAgICAgICBDVHhwYm5SbFoyVnlQakV5UEM5cGJuUmxaMlZ5UGdvSkNUeHlaV0ZzUGpNeUxqVThMM0psWVd3K0Nna0oKKyAgICAgICAgUEdGeWNtRjVQZ29KQ1FrOGFXNTBaV2RsY2o0eFBDOXBiblJsWjJWeVBnb0pDUWs4YVc1MFpXZGxjajR5CisgICAgICAgIFBDOXBiblJsWjJWeVBnb0pDUWs4YVc1MFpXZGxjajR6UEM5cGJuUmxaMlZ5UGdvSkNUd3ZZWEp5WVhrKworICAgICAgICBDZ2s4TDJGeWNtRjVQZ29KUEd0bGVUNWhVM1J5YVc1blBDOXJaWGsrQ2drOGMzUnlhVzVuUGtSdmIyUmgKKyAgICAgICAgYUR3dmMzUnlhVzVuUGdvSlBHdGxlVDVoYmtWdGNIUjVSR2xqZER3dmEyVjVQZ29KUEdScFkzUXZQZ29KCisgICAgICAgIFBHdGxlVDVoYmtWdGNIUjVUR2x6ZER3dmEyVjVQZ29KUEdGeWNtRjVMejRLQ1R4clpYaytZVzVKYm5ROAorICAgICAgICBMMnRsZVQ0S0NUeHBiblJsWjJWeVBqY3lPRHd2YVc1MFpXZGxjajRLQ1R4clpYaytibVZ6ZEdWa1JHRjAKKyAgICAgICAgWVR3dmEyVjVQZ29KUEdGeWNtRjVQZ29KQ1R4a1lYUmhQZ29KQ1ZCSGVIWmtTRTFuWWpKWloxbHRiSFZaCisgICAgICAgIFdFbzFTVWRrTVdKdGN5dEJRVVZEUVhwNGMySXpVbnBKUnpsdFNVZEtjR0p0Um5sbFUwSnVaRmMxY2dvSgorICAgICAgICBDVkJuUVVKQlowMDRZa2M1TUdONVFuWmFhVUpwWVZjMWFHTnVhMmRhTTFaMVlYbzBRVUZSU1VSUVIzaDIKKyAgICAgICAgWkVoTloySXlXV2RaYld4MVdWaEtOUW9KQ1VsSFpERmliWE1yUVVGRlEwRjZlSE5pTTFKNlNVYzViVWxICisgICAgICAgIFNuQmliVVo1WlZOQ2JtUlhOWEpRWjBGQ1FXZE5PR0pIT1RCamVVSjJXbWxDYVFvSkNXRlhOV2hqYm10bgorICAgICAgICBXak5XZFdGNk5FRkJVVWxFVUVkNGRtUklUV2RpTWxsbldXMXNkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkIKKyAgICAgICAgZW5oellqTlNlZ29KQ1VsSE9XMUpSMHB3WW0xR2VXVlRRbTVrVnpWeVVHZEJRa0ZuVFRoaVJ6a3dZM2xDCisgICAgICAgIGRscHBRbWxoVnpWb1kyNXJaMW96Vm5WaGVqUkJRVkZKUkFvSkNWQkhlSFprU0UxbllqSlpaMWx0YkhWWgorICAgICAgICBXRW8xU1Vka01XSnRjeXRCUVVWRFFYYzlQUW9KQ1R3dlpHRjBZVDRLQ1R3dllYSnlZWGsrQ2drOGEyVjUKKyAgICAgICAgUG5OdmJXVkVZWFJoUEM5clpYaytDZ2s4WkdGMFlUNEtDVkJIU25CaWJVWjVaVk5DYm1SWE5YSlFaejA5CisgICAgICAgIENnazhMMlJoZEdFK0NnazhhMlY1UG5OdmJXVk5iM0psUkdGMFlUd3ZhMlY1UGdvSlBHUmhkR0UrQ2dsUQorICAgICAgICBSM2gyWkVoTloySXlXV2RaYld4MVdWaEtOVWxIWkRGaWJYTXJRVUZGUTBGNmVITmlNMUo2U1VjNWJVbEgKKyAgICAgICAgU25CaWJVWjVaVk5DYm1SWE5YSlFaMEZDUVdkTk9Bb0pZa2M1TUdONVFuWmFhVUpwWVZjMWFHTnVhMmRhCisgICAgICAgIE0xWjFZWG8wUVVGUlNVUlFSM2gyWkVoTloySXlXV2RaYld4MVdWaEtOVWxIWkRGaWJYTXJRVUZGUTBGNgorICAgICAgICBlSE1LQ1dJelVucEpSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjbEJuUVVKQlowMDRZa2M1TUdONVFuWmEKKyAgICAgICAgYVVKcFlWYzFhR051YTJkYU0xWjFZWG8wUVVGUlNVUlFSM2gyQ2dsa1NFMW5ZakpaWjFsdGJIVlpXRW8xCisgICAgICAgIFNVZGtNV0p0Y3l0QlFVVkRRWHA0YzJJelVucEpSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjbEJuUVVKQgorICAgICAgICBaMDA0WWtjNU1Bb0pZM2xDZGxwcFFtbGhWelZvWTI1cloxb3pWblZoZWpSQlFWRkpSRkJIZUhaa1NFMW4KKyAgICAgICAgWWpKWloxbHRiSFZaV0VvMVNVZGtNV0p0Y3l0QlFVVkRRWGM5UFFvSlBDOWtZWFJoUGdvSlBHdGxlVDdECisgICAgICAgIGhXSmxibkpoWVR3dmEyVjVQZ29KUEhOMGNtbHVaejVVYUdGMElIZGhjeUJoSUhWdWFXTnZaR1VnYTJWNQorICAgICAgICBMand2YzNSeWFXNW5QZ284TDJScFkzUStDand2Y0d4cGMzUStDZz09JycnKSwKKyAgICBwbGlzdGxpYi5GTVRfQklOQVJZOiBiaW5hc2NpaS5hMmJfYmFzZTY0KGInJycKKyAgICAgICAgWW5Cc2FYTjBNRERjQVFJREJBVUdCd2dKQ2dzTURRNGlJeWtxS3l3dEx5NHdWV0ZFWVhSbFZXRkVhV04wCisgICAgICAgIFZtRkdiRzloZEZWaFRHbHpkRmRoVTNSeWFXNW5XMkZ1Ulcxd2RIbEVhV04wVzJGdVJXMXdkSGxNYVhOMAorICAgICAgICBWV0Z1U1c1MFdtNWxjM1JsWkVSaGRHRlljMjl0WlVSaGRHRmNjMjl0WlUxdmNtVkVZWFJoWndERkFHSUEKKyAgICAgICAgWlFCdUFISUFZUUJoTTBHY3VYMzBBQUFBMVE4UUVSSVRGQlVXRnhoYllVWmhiSE5sVm1Gc2RXVmFZVlJ5CisgICAgICAgIGRXVldZV3gxWlYxaFZXNXBZMjlrWlZaaGJIVmxYV0Z1YjNSb1pYSlRkSEpwYm1kYVpHVmxjR1Z5UkdsagorICAgICAgICBkQWdKYXdCTkFPUUFjd0J6QUdrQVp3QXNBQ0FBVFFCaEFOOWZFQlU4YUdWc2JHOGdKaUFuYUdrbklIUm8KKyAgICAgICAgWlhKbElUN1RHUm9iSEIwZVVXRlJZbEZqRUJFalFFQkFBQUFBQUFDakh5QWhFQUVRQWxSMFpYaDBJei9nCisgICAgICAgIEFBQUFBQUFBcFNRbEpoMG5VVUZSUWhBTW94OGdLQkFEVmtSdmIyUmhhTkNnRVFMWW9TNVBFUG84Ykc5MAorICAgICAgICBjeUJ2WmlCaWFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUMKKyAgICAgICAgQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1CisgICAgICAgIGF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeQorICAgICAgICBlU0JuZFc1clBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWcKKyAgICAgICAgWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwCisgICAgICAgIGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURUVHhpYVc1aGNua2daM1Z1YXo1ZkVCZFVhR0YwSUhkaAorICAgICAgICBjeUJoSUhWdWFXTnZaR1VnYTJWNUxnQUlBQ0VBSndBdEFEUUFPZ0JDQUU0QVdnQmdBR3NBZEFDQkFKQUEKKyAgICAgICAgbVFDa0FMQUF1d0RKQU5jQTRnRGpBT1FBK3dFVEFSb0JIQUVlQVNBQklnRXJBUzhCTVFFekFUZ0JRUUZICisgICAgICAgIEFVa0JTd0ZOQVZFQlV3RmFBVnNCWEFGZkFXRUNYZ0pzQUFBQUFBQUFBZ0VBQUFBQUFBQUFNUUFBQUFBQQorICAgICAgICBBQUFBQUFBQUFBQUFBb1k9JycnKSwKK30KIAogCiBjbGFzcyBUZXN0UGxpc3RsaWIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTksNyArOTIsNyBAQAogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmKToKKyAgICBkZWYgX2NyZWF0ZShzZWxmLCBmbXQ9Tm9uZSk6CiAgICAgICAgIHBsID0gZGljdCgKICAgICAgICAgICAgIGFTdHJpbmc9IkRvb2RhaCIsCiAgICAgICAgICAgICBhTGlzdD1bIkEiLCAiQiIsIDEyLCAzMi41LCBbMSwgMiwgM11dLApAQCAtMTEyLDkgKzEwNSw5IEBACiAgICAgICAgICAgICAgICAgYUZhbHNlVmFsdWU9RmFsc2UsCiAgICAgICAgICAgICAgICAgZGVlcGVyRGljdD1kaWN0KGE9MTcsIGI9MzIuNSwgYz1bMSwgMiwgInRleHQiXSksCiAgICAgICAgICAgICApLAotICAgICAgICAgICAgc29tZURhdGEgPSBwbGlzdGxpYi5EYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICAgICAgc29tZU1vcmVEYXRhID0gcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKSwKLSAgICAgICAgICAgIG5lc3RlZERhdGEgPSBbcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKV0sCisgICAgICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwLAorICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwXSwKICAgICAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNCwgMTAsIDI2LCAxMCwgMzMsIDMzKSwKICAgICAgICAgICAgIGFuRW1wdHlEaWN0ID0gZGljdCgpLAogICAgICAgICAgICAgYW5FbXB0eUxpc3QgPSBsaXN0KCkKQEAgLTEyOSw0OSArMTIyLDE5MSBAQAogCiAgICAgZGVmIHRlc3RfaW8oc2VsZik6CiAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKGZwKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBwbGlzdGxpYi5sb2FkLCAnZmlsZW5hbWUnKQorCisKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShwbCwgcGxpc3RsaWIuX0ludGVybmFsRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQotICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi5kdW1wcyhwbDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9hcnJheShzZWxmKToKLSAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dXV1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dXV1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX19fX19fX19fQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiB7JzMnOiB7JzQnOiB7JzUnOiB7JzYnOiB7JzcnOiB7JzgnOiB7JzknOiBiJ2FhYWFhYSd9fX19fX19fX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0X21peChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IFt7JzMnOiBbW1tbW3sndGVzdCc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX1dXV1dXX1dfX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dfV19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZyhzZWxmKToKLSAgICAgICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBURVNUREFUQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBmb3IgdXNlX2J1aWx0aW5fdHlwZXMgaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpOgorICAgICAgICAgICAgICAgICAgICBwbCA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorCiAKICAgICBkZWYgdGVzdF9hcHBsZWZvcm1hdHRpbmdmcm9tbGl0ZXJhbChzZWxmKToKLSAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAorICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNpbyhzZWxmKToKLSAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwotICAgICAgICBiID0gQnl0ZXNJTygpCi0gICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgYikKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgYiwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKyAgICBkZWYgdGVzdF9rZXlzb3J0X2J5dGVzaW8oc2VsZik6CisgICAgICAgIHBsID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBwbFsnYiddID0gMQorICAgICAgICBwbFsnYSddID0gMgorICAgICAgICBwbFsnYyddID0gMworCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3Igc29ydF9rZXlzIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cyk6CisgICAgICAgICAgICAgICAgICAgIGIgPSBCeXRlc0lPKCkKKworICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKHBsLCBiLCBmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RfdHlwZT1jb2xsZWN0aW9ucy5PcmRlcmVkRGljdCkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgICAgICAgICAgICAgIGlmIHNvcnRfa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2InLCAnYScsICdjJ10pCisKKyAgICBkZWYgdGVzdF9rZXlzb3J0KHNlbGYpOgorICAgICAgICBwbCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgcGxbJ2InXSA9IDEKKyAgICAgICAgcGxbJ2EnXSA9IDIKKyAgICAgICAgcGxbJ2MnXSA9IDMKKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgZm9yIHNvcnRfa2V5cyBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEsIGRpY3RfdHlwZT1jb2xsZWN0aW9ucy5PcmRlcmVkRGljdCkKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgICAgICAgICAgICAgIGlmIHNvcnRfa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydhJywgJ2InLCAnYyddKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBsMi5rZXlzKCkpLCBbJ2InLCAnYScsICdjJ10pCisKKyAgICBkZWYgdGVzdF9rZXlzX25vX3N0cmluZyhzZWxmKToKKyAgICAgICAgcGwgPSB7IDQyOiAnYU51bWJlcicgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXBzLCBwbCwgZm10PWZtdCkKKworICAgICAgICAgICAgICAgIGIgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXAsIHBsLCBiLCBmbXQ9Zm10KQorCisgICAgZGVmIHRlc3Rfc2tpcGtleXMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgNDI6ICdhTnVtYmVyJywKKyAgICAgICAgICAgICdzbmFrZSc6ICdhV29yZCcsCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKAorICAgICAgICAgICAgICAgICAgICBwbCwgZm10PWZtdCwgc2tpcGtleXM9VHJ1ZSwgc29ydF9rZXlzPUZhbHNlKQorCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeydzbmFrZSc6ICdhV29yZCd9KQorCisgICAgICAgICAgICAgICAgZnAgPSBCeXRlc0lPKCkKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wKAorICAgICAgICAgICAgICAgICAgICBwbCwgZnAsIGZtdD1mbXQsIHNraXBrZXlzPVRydWUsIHNvcnRfa2V5cz1GYWxzZSkKKyAgICAgICAgICAgICAgICBkYXRhID0gZnAuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGZwLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsnc25ha2UnOiAnYVdvcmQnfSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogKDEsIDIpLAorICAgICAgICAgICAgJ3NlY29uZCc6ICgxLCAyKSwKKyAgICAgICAgICAgICd0aGlyZCc6ICgzLCA0KSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICd0aGlyZCc6IFszLCA0XSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QocGwyWydmaXJzdCddLCBwbDJbJ3NlY29uZCddKQorCisgICAgZGVmIHRlc3RfbGlzdF9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICdzZWNvbmQnOiBbMSwgMl0sCisgICAgICAgICAgICAndGhpcmQnOiBbMywgNF0sCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAndGhpcmQnOiBbMywgNF0sCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHBsMlsnZmlyc3QnXSwgcGwyWydzZWNvbmQnXSkKKworICAgIGRlZiB0ZXN0X2RpY3RfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICdzZWNvbmQnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICd0aGlyZCc6IHsnYic6IDIgfSwKKyAgICAgICAgfQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwsIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgeworICAgICAgICAgICAgICAgICAgICAnZmlyc3QnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IHsnYSc6IDF9LAorICAgICAgICAgICAgICAgICAgICAndGhpcmQnOiB7J2InOiAyIH0sCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHBsMlsnZmlyc3QnXSwgcGwyWydzZWNvbmQnXSkKIAogICAgIGRlZiB0ZXN0X2NvbnRyb2xjaGFyYWN0ZXJzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMjgpOgpAQCAtMTc5LDI1ICszMTQsMjcgQEAKICAgICAgICAgICAgIHRlc3RTdHJpbmcgPSAic3RyaW5nIGNvbnRhaW5pbmcgJXMiICUgYwogICAgICAgICAgICAgaWYgaSA+PSAzMiBvciBjIGluICJcclxuXHQiOgogICAgICAgICAgICAgICAgICMgXHIsIFxuIGFuZCBcdCBhcmUgdGhlIG9ubHkgbGVnYWwgY29udHJvbCBjaGFycyBpbiBYTUwKLSAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0U3RyaW5nKQorICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXBzKHRlc3RTdHJpbmcsIGZtdD1wbGlzdGxpYi5GTVRfWE1MKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsaXN0bGliLmR1bXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RTdHJpbmcpCiAKICAgICBkZWYgdGVzdF9ub25kaWN0cm9vdChzZWxmKToKLSAgICAgICAgdGVzdDEgPSAiYWJjIgotICAgICAgICB0ZXN0MiA9IFsxLCAyLCAzLCAiYWJjIl0KLSAgICAgICAgcmVzdWx0MSA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyh0ZXN0MSkpCi0gICAgICAgIHJlc3VsdDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXModGVzdDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QxLCByZXN1bHQxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QyLCByZXN1bHQyKQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgdGVzdDEgPSAiYWJjIgorICAgICAgICAgICAgICAgIHRlc3QyID0gWzEsIDIsIDMsICJhYmMiXQorICAgICAgICAgICAgICAgIHJlc3VsdDEgPSBwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyh0ZXN0MSwgZm10PWZtdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0MiA9IHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKHRlc3QyLCBmbXQ9Zm10KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QxLCByZXN1bHQxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdDIsIHJlc3VsdDIpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkYXJyYXkoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFsiPGtleT5rZXkgaW5zaWRlIGFuIGFycmF5PC9rZXk+IiwKICAgICAgICAgICAgICAgICAgICI8a2V5PmtleSBpbnNpZGUgYW4gYXJyYXkyPC9rZXk+PHJlYWw+MzwvcmVhbD4iLAogICAgICAgICAgICAgICAgICAgIjx0cnVlLz48a2V5PmtleSBpbnNpZGUgYW4gYXJyYXkzPC9rZXk+Il06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxhcnJheT4lczwvYXJyYXk+PC9wbGlzdD4iJWkpLmVuY29kZSgpKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGRpY3Qoc2VsZik6CkBAIC0yMDYsMjIgKzM0MywxMzAgQEAKICAgICAgICAgICAgICAgICAgICI8c3RyaW5nPm1pc3Npbmcga2V5PC9zdHJpbmc+IiwKICAgICAgICAgICAgICAgICAgICI8a2V5PmsxPC9rZXk+PHN0cmluZz52MTwvc3RyaW5nPjxyZWFsPjUuMzwvcmVhbD4iCiAgICAgICAgICAgICAgICAgICAiPGtleT5rMTwva2V5PjxrZXk+azI8L2tleT48c3RyaW5nPmRvdWJsZSBrZXk8L3N0cmluZz4iXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGRpY3Q+JXM8L2RpY3Q+PC9wbGlzdD4iJWkpLmVuY29kZSgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48YXJyYXk+PGRpY3Q+JXM8L2RpY3Q+PC9hcnJheT48L3BsaXN0PiIlaSkuZW5jb2RlKCkpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkaW50ZWdlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8cGxpc3Q+PGludGVnZXI+bm90IGludGVnZXI8L2ludGVnZXI+PC9wbGlzdD4iKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZHJlYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPHBsaXN0PjxpbnRlZ2VyPm5vdCByZWFsPC9pbnRlZ2VyPjwvcGxpc3Q+IikKIAorICAgIGRlZiB0ZXN0X3htbF9lbmNvZGluZ3Moc2VsZik6CisgICAgICAgIGJhc2UgPSBURVNUREFUQVtwbGlzdGxpYi5GTVRfWE1MXQorCisgICAgICAgIGZvciB4bWxfZW5jb2RpbmcsIGVuY29kaW5nLCBib20gaW4gWworICAgICAgICAgICAgICAgICAgICAoYid1dGYtOCcsICd1dGYtOCcsIGNvZGVjcy5CT01fVVRGOCksCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi0xNicsICd1dGYtMTYtbGUnLCBjb2RlY3MuQk9NX1VURjE2X0xFKSwKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTE2JywgJ3V0Zi0xNi1iZScsIGNvZGVjcy5CT01fVVRGMTZfQkUpLAorICAgICAgICAgICAgICAgICAgICAjIEV4cGF0IGRvZXMgbm90IHN1cHBvcnQgVVRGLTMyCisgICAgICAgICAgICAgICAgICAgICMoYid1dGYtMzInLCAndXRmLTMyLWxlJywgY29kZWNzLkJPTV9VVEYzMl9MRSksCisgICAgICAgICAgICAgICAgICAgICMoYid1dGYtMzInLCAndXRmLTMyLWJlJywgY29kZWNzLkJPTV9VVEYzMl9CRSksCisgICAgICAgICAgICAgICAgXToKKworICAgICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoZm10PXBsaXN0bGliLkZNVF9YTUwpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZGF0YSA9IGJhc2UucmVwbGFjZShiJ1VURi04JywgeG1sX2VuY29kaW5nKQorICAgICAgICAgICAgICAgIGRhdGEgPSBib20gKyBkYXRhLmRlY29kZSgndXRmLTgnKS5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisKKworY2xhc3MgVGVzdFBsaXN0bGliRGVwcmVjYXRlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW9fZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgcGxfaW4gPSB7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogeworICAgICAgICAgICAgICAgICdrZXknOiA5LAorICAgICAgICAgICAgICAgICdhbHQnOiAndmFsdWUnLAorICAgICAgICAgICAgICAgICdkYXRhJzogYididWZmZXInLAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHBsX291dCA9IHBsaXN0bGliLl9JbnRlcm5hbERpY3QoeworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHBsaXN0bGliLl9JbnRlcm5hbERpY3QoeworICAgICAgICAgICAgICAgICdrZXknOiA5LAorICAgICAgICAgICAgICAgICdhbHQnOiAndmFsdWUnLAorICAgICAgICAgICAgICAgICdkYXRhJzogcGxpc3RsaWIuRGF0YShiJ2J1ZmZlcicpLAorICAgICAgICAgICAgfSkKKyAgICAgICAgfSkKKworICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsaXN0bGliLndyaXRlUGxpc3QocGxfaW4sIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxfb3V0LCBwbDIpCisKKyAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsX2luLCBmcCkKKworICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpIGFzIGZwOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KGZwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxfb3V0LCBwbDIpCisKKyAgICBkZWYgdGVzdF9ieXRlc19kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiB7CisgICAgICAgICAgICAgICAgJ2tleSc6IDksCisgICAgICAgICAgICAgICAgJ2FsdCc6ICd2YWx1ZScsCisgICAgICAgICAgICAgICAgJ2RhdGEnOiBiJ2J1ZmZlcicsCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGwyLCBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsMiwgcGxpc3RsaWIuX0ludGVybmFsRGljdCgKKyAgICAgICAgICAgIGtleT00MiwKKyAgICAgICAgICAgIHN1Yj1wbGlzdGxpYi5fSW50ZXJuYWxEaWN0KAorICAgICAgICAgICAgICAgIGtleT05LAorICAgICAgICAgICAgICAgIGFsdD0ndmFsdWUnLAorICAgICAgICAgICAgICAgIGRhdGE9cGxpc3RsaWIuRGF0YShiJ2J1ZmZlcicpLAorICAgICAgICAgICAgKQorICAgICAgICApKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCisKKyAgICBkZWYgdGVzdF9kYXRhb2JqZWN0X2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIGluX2RhdGEgPSB7ICdrZXknOiBwbGlzdGxpYi5EYXRhKGInaGVsbG8nKSB9CisgICAgICAgIG91dF9kYXRhID0geyAna2V5JzogYidoZWxsbycgfQorCisgICAgICAgIGJ1ZiA9IHBsaXN0bGliLmR1bXBzKGluX2RhdGEpCisKKyAgICAgICAgY3VyID0gcGxpc3RsaWIubG9hZHMoYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgb3V0X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBpbl9kYXRhKQorCisgICAgICAgIGN1ciA9IHBsaXN0bGliLmxvYWRzKGJ1ZiwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3VyLCBvdXRfZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIGluX2RhdGEpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBjdXIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoYnVmKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGN1ciwgb3V0X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBpbl9kYXRhKQorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGxpc3RsaWIpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFBsaXN0bGliLCBUZXN0UGxpc3RsaWJEZXByZWNhdGVkKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvbGwucHkgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKaW5kZXggZjk4YTI4MC4uYTFlNWMzZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQpAQCAtMSw2ICsxLDcgQEAKICMgVGVzdCBjYXNlIGZvciB0aGUgb3MucG9sbCgpIGZ1bmN0aW9uCiAKIGltcG9ydCBvcworaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCByYW5kb20KIGltcG9ydCBzZWxlY3QKIGltcG9ydCBfdGVzdGNhcGkKQEAgLTE1LDcgKzE2LDcgQEAKIHRyeToKICAgICBzZWxlY3QucG9sbAogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCAtLSBza2lwcGluZyB0ZXN0X3BvbGwiKQorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzZWxlY3QucG9sbCBub3QgZGVmaW5lZCIpCiAKIAogZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgpAQCAtNzYsMTMgKzc3LDExIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZzLCBbTVNHXSAqIE5VTV9QSVBFUykKIAotICAgIGRlZiBwb2xsX3VuaXRfdGVzdHMoc2VsZik6CisgICAgZGVmIHRlc3RfcG9sbF91bml0X3Rlc3RzKHNlbGYpOgogICAgICAgICAjIHJldHVybnMgTlZBTCBmb3IgaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IKLSAgICAgICAgRkQgPSA0MgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jbG9zZShGRCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgIEZELCB3ID0gb3MucGlwZSgpCisgICAgICAgIG9zLmNsb3NlKEZEKQorICAgICAgICBvcy5jbG9zZSh3KQogICAgICAgICBwID0gc2VsZWN0LnBvbGwoKQogICAgICAgICBwLnJlZ2lzdGVyKEZEKQogICAgICAgICByID0gcC5wb2xsKCkKQEAgLTEyNSw3ICsxMjQsOSBAQAogCiAgICAgZGVmIHRlc3RfcG9sbDIoc2VsZik6CiAgICAgICAgIGNtZCA9ICdmb3IgaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5OyBkbyBlY2hvIHRlc3RpbmcuLi47IHNsZWVwIDE7IGRvbmUnCi0gICAgICAgIHAgPSBvcy5wb3BlbihjbWQsICdyJykKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplPTApCisgICAgICAgIHAgPSBwcm9jLnN0ZG91dAogICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKICAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoIHAsIHNlbGVjdC5QT0xMSU4gKQogICAgICAgICBmb3IgdG91dCBpbiAoMCwgMTAwMCwgMjAwMCwgNDAwMCwgODAwMCwgMTYwMDApICsgKC0xLCkqMTA6CkBAIC0xMzUsNyArMTM2LDcgQEAKICAgICAgICAgICAgIGZkLCBmbGFncyA9IGZkbGlzdFswXQogICAgICAgICAgICAgaWYgZmxhZ3MgJiBzZWxlY3QuUE9MTEhVUDoKICAgICAgICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgaWYgbGluZSAhPSAiIjoKKyAgICAgICAgICAgICAgICBpZiBsaW5lICE9IGIiIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvcjogcGlwZSBzZWVtcyB0byBiZSBjbG9zZWQsIGJ1dCBzdGlsbCByZXR1cm5zIGRhdGEnKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKQEAgLTE0Myw2ICsxNDQsNyBAQAogICAgICAgICAgICAgICAgIGxpbmUgPSBwLnJlYWRsaW5lKCkKICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGIndGVzdGluZy4uLlxuJykKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIGZyb20gc2VsZWN0LnBvbGw6ICVzJyAlIGZkbGlzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKaW5kZXggY2JjZTg1Mi4uMzFmOGEzYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKQEAgLTE4LDYgKzE4LDE1IEBACiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIFBPUlQgPSAwCiAKK1NVUFBPUlRTX1NTTCA9IEZhbHNlCitpZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6CisgICAgaW1wb3J0IHNzbAorCisgICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQorICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydDMucGVtIikKKyAgICBDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJweWNhY2VydC5wZW0iKQorcmVxdWlyZXNfc3NsID0gc2tpcFVubGVzcyhTVVBQT1JUU19TU0wsICdTU0wgbm90IHN1cHBvcnRlZCcpCisKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIHdoZW4gTElTVCBhbmQgUkVUUiBjb21tYW5kcyBhcmUgaXNzdWVkCiBMSVNUX1JFU1AgPSBiJzEgMVxyXG4yIDJcclxuMyAzXHJcbjQgNFxyXG41IDVcclxuLlxyXG4nCiBSRVRSX1JFU1AgPSBiIiIiRnJvbTogcG9zdG1hc3RlckBweXRob24ub3JnXApAQCAtMzMsMTEgKzQyLDE1IEBACiAKIGNsYXNzIER1bW15UE9QM0hhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CiAKKyAgICBDQVBBUyA9IHsnVUlETCc6IFtdLCAnSU1QTEVNRU5UQVRJT04nOiBbJ3B5dGhvbi10ZXN0bGliLXBvcC1zZXJ2ZXInXX0KKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQogICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKGIiXHJcbiIpCiAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuIDx0aW1lc3RhbXA+JykKKyAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gRmFsc2UKKyAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBGYWxzZQogCiAgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5pbl9idWZmZXIuYXBwZW5kKGRhdGEpCkBAIC0xMTIsNiArMTI1LDY1IEBACiAgICAgICAgIHNlbGYucHVzaCgnK09LIGNsb3NpbmcuJykKICAgICAgICAgc2VsZi5jbG9zZV93aGVuX2RvbmUoKQogCisgICAgZGVmIF9nZXRfY2FwYXMoc2VsZik6CisgICAgICAgIF9jYXBhcyA9IGRpY3Qoc2VsZi5DQVBBUykKKyAgICAgICAgaWYgbm90IHNlbGYudGxzX2FjdGl2ZSBhbmQgU1VQUE9SVFNfU1NMOgorICAgICAgICAgICAgX2NhcGFzWydTVExTJ10gPSBbXQorICAgICAgICByZXR1cm4gX2NhcGFzCisKKyAgICBkZWYgY21kX2NhcGEoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcrT0sgQ2FwYWJpbGl0eSBsaXN0IGZvbGxvd3MnKQorICAgICAgICBpZiBzZWxmLl9nZXRfY2FwYXMoKToKKyAgICAgICAgICAgIGZvciBjYXAsIHBhcmFtcyBpbiBzZWxmLl9nZXRfY2FwYXMoKS5pdGVtcygpOgorICAgICAgICAgICAgICAgIF9sbiA9IFtjYXBdCisgICAgICAgICAgICAgICAgaWYgcGFyYW1zOgorICAgICAgICAgICAgICAgICAgICBfbG4uZXh0ZW5kKHBhcmFtcykKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJyAnLmpvaW4oX2xuKSkKKyAgICAgICAgc2VsZi5wdXNoKCcuJykKKworICAgIGlmIFNVUFBPUlRTX1NTTDoKKworICAgICAgICBkZWYgY21kX3N0bHMoc2VsZiwgYXJnKToKKyAgICAgICAgICAgIGlmIHNlbGYudGxzX2FjdGl2ZSBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJytPSyBCZWdpbiBUTFMgbmVnb3RpYXRpb24nKQorICAgICAgICAgICAgICAgIHRsc19zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29ja2V0LCBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPUZhbHNlKQorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NoYW5uZWwoKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldCh0bHNfc29jaykKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3Rsc19oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJy1FUlIgQ29tbWFuZCBub3QgcGVybWl0dGVkIHdoZW4gVExTIGFjdGl2ZScpCisKKyAgICAgICAgZGVmIF9kb190bHNfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCisKKyAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfc3RhcnRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5oYW5kbGVfcmVhZChzZWxmKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRU9GRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKIAogY2xhc3MgRHVtbXlQT1AzU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIsIHRocmVhZGluZy5UaHJlYWQpOgogCkBAIC0yMzYsMTkgKzMwOCw0MiBAQAogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCkKICAgICAgICAgc2VsZi5jbGllbnQudWlkbCgnZm9vJykKIAorICAgIGRlZiB0ZXN0X2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdJTVBMRU1FTlRBVElPTicgaW4gY2FwYS5rZXlzKCkpCisKICAgICBkZWYgdGVzdF9xdWl0KHNlbGYpOgogICAgICAgICByZXNwID0gc2VsZi5jbGllbnQucXVpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmNsaWVudC5zb2NrKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmNsaWVudC5maWxlKQogCisgICAgQHJlcXVpcmVzX3NzbAorICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1NUTFMnIGluIGNhcGEua2V5cygpKQogCi1TVVBQT1JUU19TU0wgPSBGYWxzZQotaWYgaGFzYXR0cihwb3BsaWIsICdQT1AzX1NTTCcpOgotICAgIGltcG9ydCBzc2wKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBiJytPSyBCZWdpbiBUTFMgbmVnb3RpYXRpb24nCisgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBleHBlY3RlZCkKIAotICAgIFNVUFBPUlRTX1NTTCA9IFRydWUKLSAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwgImtleWNlcnQucGVtIikKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3Rsc19jb250ZXh0KHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENBRklMRSkKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5DZXJ0aWZpY2F0ZUVycm9yKToKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzKCJsb2NhbGhvc3QiLCBzZWxmLnNlcnZlci5wb3J0LCB0aW1lb3V0PTMpCisgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5zdGxzKGNvbnRleHQ9Y3R4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQorCisKK2lmIFNVUFBPUlRTX1NTTDoKIAogICAgIGNsYXNzIER1bW15UE9QM19TU0xIYW5kbGVyKER1bW15UE9QM0hhbmRsZXIpOgogCkBAIC0yNjAsMzUgKzM1NSwxMyBAQAogICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCiAgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc3NsX3NvY2tldCkKICAgICAgICAgICAgICMgTXVzdCB0cnkgaGFuZHNoYWtlIGJlZm9yZSBjYWxsaW5nIHB1c2goKQotICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi50bHNfc3RhcnRpbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgICAgIHNlbGYuaW5fYnVmZmVyID0gW10KICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIGR1bW15IHBvcDMgc2VydmVyIHJlYWR5LiA8dGltZXN0YW1wPicpCiAKLSAgICAgICAgZGVmIF9kb19zc2xfaGFuZHNoYWtlKHNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9FT0Y6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5fc3NsX2FjY2VwdGluZzoKLSAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfaGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgRHVtbXlQT1AzSGFuZGxlci5oYW5kbGVfcmVhZChzZWxmKQotCi1yZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKIAogQHJlcXVpcmVzX3NzbAogY2xhc3MgVGVzdFBPUDNfU1NMQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CkBAIC0zMDYsMjAgKzM3OSw2MCBAQAogICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG9wbGliLlBPUDNfU1NMLCBzZWxmLnNlcnZlci5ob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAogICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QM19TU0woc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQogICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuY2xpZW50LnNvY2suY29udGV4dCwgY3R4KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGllbnQubm9vcCgpLnN0YXJ0c3dpdGgoYicrT0snKSkKIAorICAgIGRlZiB0ZXN0X3N0bHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHBvcGxpYi5lcnJvcl9wcm90bywgc2VsZi5jbGllbnQuc3RscykKKworICAgIHRlc3Rfc3Rsc19jb250ZXh0ID0gdGVzdF9zdGxzCisKKyAgICBkZWYgdGVzdF9zdGxzX2NhcGEoc2VsZik6CisgICAgICAgIGNhcGEgPSBzZWxmLmNsaWVudC5jYXBhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKKworQHJlcXVpcmVzX3NzbAorY2xhc3MgVGVzdFBPUDNfVExTQ2xhc3MoVGVzdFBPUDNDbGFzcyk6CisgICAgIyByZXBlYXQgcHJldmlvdXMgdGVzdHMgYnkgdXNpbmcgcG9wbGliLlBPUDMuc3RscygpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlQT1AzU2VydmVyKChIT1NULCBQT1JUKSkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgc2VsZi5jbGllbnQuc3RscygpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuY2xpZW50LmZpbGUgaXMgbm90IE5vbmUgYW5kIHNlbGYuY2xpZW50LnNvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisgICAgICAgICAgICBleGNlcHQgcG9wbGliLmVycm9yX3Byb3RvOgorICAgICAgICAgICAgICAgICMgaGFwcGVucyBpbiB0aGUgdGVzdF90b29fbG9uZ19saW5lcyBjYXNlOyB0aGUgb3ZlcmxvbmcKKyAgICAgICAgICAgICAgICAjIHJlc3BvbnNlIHdpbGwgYmUgdHJlYXRlZCBhcyByZXNwb25zZSB0byBRVUlUIGFuZCByYWlzZQorICAgICAgICAgICAgICAgICMgdGhpcyBleGNlcHRpb24KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoKQorCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGInU1RMUycgaW4gY2FwYS5rZXlzKCkpCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMzc3LDcgKzQ5MCw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtUZXN0UE9QM0NsYXNzLCBUZXN0VGltZW91dHMsCi0gICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3NdCisgICAgICAgICAgICAgVGVzdFBPUDNfU1NMQ2xhc3MsIFRlc3RQT1AzX1RMU0NsYXNzXQogICAgIHRocmVhZF9pbmZvID0gdGVzdF9zdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgdHJ5OgogICAgICAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IDAyYmI2YWMuLjFlY2VlYmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtNTgyLDggKzU4MiwxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjI2LDcgKzYyOCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC02ODQsNDEgKzY4NiwzOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpLCAndGVzdCBuZWVkcyBwb3NpeC5nZXRjd2QoKScpCiAgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJwotICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKyAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJwogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKLSMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgotIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/Ci0jICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sIGJlY2F1c2UKKyAgICAgICAgICAgICMgIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLiAgSXMgdGhhdCBvaz8KKyAgICAgICAgICAgICMgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IikKKyAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQogCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wYXRoX2xlbmd0aCA8IDEwMjc6CisgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAotICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCiAKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQotICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdnZXRncm91cGxpc3QnKSwgInRlc3QgbmVlZHMgcG9zaXguZ2V0Z3JvdXBsaXN0KCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocHdkLCAnZ2V0cHd1aWQnKSwgInRlc3QgbmVlZHMgcHdkLmdldHB3dWlkKCkiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQppbmRleCAwZTdkODY2Li40MTI4NDljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpAQCAtMTg2LDYzICsxODYsNiBAQAogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgX2NyZWF0ZV9maWxlKGZpbGVuYW1lKToKLSAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShiJ2ZvbycpCi0KLSAgICBkZWYgdGVzdF9zYW1lZmlsZShzZWxmKToKLSAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVmaWxlKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAicG9zaXhwYXRoLnNhbWVmaWxlIGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKLSAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rcyhzZWxmKToKLSAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQotCi0gICAgICAgIG9zLnN5bWxpbmsodGVzdF9mbjEsIHRlc3RfZm4yKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKLQotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKLQotCi0gICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6Ci0gICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQotICAgICAgICB0ZXN0X2ZucyA9IFt0ZXN0X2ZuXSoyCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKAotICAgICAgICBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICJwb3NpeHBhdGguc2FtZXN0YXQgZG9lcyBub3Qgd29yayBvbiBsaW5rcyBpbiBXaW5kb3dzIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQotICAgIGRlZiB0ZXN0X3NhbWVzdGF0X29uX2xpbmtzKHNlbGYpOgotICAgICAgICB0ZXN0X2ZuMSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCi0gICAgICAgIHRlc3RfZm5zID0gKHRlc3RfZm4xLCB0ZXN0X2ZuMikKLSAgICAgICAgb3Muc3ltbGluaygqdGVzdF9mbnMpCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0gICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKLQotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKLSAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9zaXhwYXRoLnNhbWVzdGF0KCpzdGF0cykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc2FtZXN0YXQpCi0KICAgICBkZWYgdGVzdF9pc21vdW50KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KCIvIiksIFRydWUpCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKQEAgLTU5NSwxMSArNTM4LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLmdldGN3ZGIgPSByZWFsX2dldGN3ZGIKIAotICAgIGRlZiB0ZXN0X3NhbWVvcGVuZmlsZShzZWxmKToKLSAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGEsIG9wZW4oZm5hbWUsICJ3YiIpIGFzIGI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVvcGVuZmlsZShhLmZpbGVubygpLCBiLmZpbGVubygpKSkKLQogCiBjbGFzcyBQb3NpeENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IHBvc2l4cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQppbmRleCBhODUyOThlLi4zZDM2NGM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BwcmludC5weQpAQCAtMSwzICsxLDUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisKIGltcG9ydCBwcHJpbnQKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCB1bml0dGVzdApAQCAtNTMwLDYgKzUzMiw1NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KGRpY3QuZnJvbWtleXMoa2V5cywgMCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICd7JXI6IDAsICVyOiAwfScgJSB0dXBsZShzb3J0ZWQoa2V5cywga2V5PWlkKSkpCiAKKyAgICBkZWYgdGVzdF9zdHJfd3JhcChzZWxmKToKKyAgICAgICAgIyBwcHJpbnQgdHJpZXMgdG8gd3JhcCBzdHJpbmdzIGludGVsbGlnZW50bHkKKyAgICAgICAgZm94ID0gJ3RoZSBxdWljayBicm93biBmb3gganVtcGVkIG92ZXIgYSBsYXp5IGRvZycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChmb3gsIHdpZHRoPTIwKSwgIiIiXAorJ3RoZSBxdWljayBicm93biAnCisnZm94IGp1bXBlZCBvdmVyICcKKydhIGxhenkgZG9nJyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7J2EnOiAxLCAnYic6IGZveCwgJ2MnOiAyfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0yNiksICIiIlwKK3snYSc6IDEsCisgJ2InOiAndGhlIHF1aWNrIGJyb3duICcKKyAgICAgICdmb3gganVtcGVkIG92ZXIgJworICAgICAgJ2EgbGF6eSBkb2cnLAorICdjJzogMn0iIiIpCisgICAgICAgICMgV2l0aCBzb21lIHNwZWNpYWwgY2hhcmFjdGVycworICAgICAgICAjIC0gXG4gYWx3YXlzIHRyaWdnZXJzIGEgbmV3IGxpbmUgaW4gdGhlIHBwcmludAorICAgICAgICAjIC0gXHQgYW5kIFxuIGFyZSBlc2NhcGVkCisgICAgICAgICMgLSBub24tQVNDSUkgaXMgYWxsb3dlZAorICAgICAgICAjIC0gYW4gYXBvc3Ryb3BoZSBkb2Vzbid0IGRpc3J1cHQgdGhlIHBwcmludAorICAgICAgICBzcGVjaWFsID0gIlBvcnRvbnMgZGl4IGJvbnMgXCJ3aGlza3lzXCJcbsOgIGwnYXZvY2F0IGdvdWphdFx0IHF1aSBmdW1haXQgYXUgem9vIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNwZWNpYWwsIHdpZHRoPTIwKSwgIiIiXAorJ1BvcnRvbnMgZGl4IGJvbnMgJworJyJ3aGlza3lzIlxcbicKKyLDoCBsJ2F2b2NhdCAiCisnZ291amF0XFx0IHF1aSAnCisnZnVtYWl0IGF1IHpvbyciIiIpCisgICAgICAgICMgQW4gdW53cmFwcGFibGUgc3RyaW5nIGlzIGZvcm1hdHRlZCBhcyBpdHMgcmVwcgorICAgICAgICB1bndyYXBwYWJsZSA9ICJ4IiAqIDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHVud3JhcHBhYmxlLCB3aWR0aD04MCksIHJlcHIodW53cmFwcGFibGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KCcnKSwgIicnIikKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBwcHJpbnQgaXMgYSB1c2FibGUgcmVwcgorICAgICAgICBzcGVjaWFsICo9IDEwCisgICAgICAgIGZvciB3aWR0aCBpbiByYW5nZSgzLCA0MCk6CisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD13aWR0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbCgiKCIgKyBmb3JtYXR0ZWQgKyAiKSIpLCBzcGVjaWFsKQorCisgICAgZGVmIHRlc3RfY29tcGFjdChzZWxmKToKKyAgICAgICAgbyA9IChbbGlzdChyYW5nZShpICogaSkpIGZvciBpIGluIHJhbmdlKDUpXSArCisgICAgICAgICAgICAgW2xpc3QocmFuZ2UoaSkpIGZvciBpIGluIHJhbmdlKDYpXSkKKyAgICAgICAgZXhwZWN0ZWQgPSAiIiJcCitbW10sIFswXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSwKKyBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsCisgIDE0LCAxNV0sCisgW10sIFswXSwgWzAsIDFdLCBbMCwgMSwgMl0sIFswLCAxLCAyLCAzXSwKKyBbMCwgMSwgMiwgMywgNF1dIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQobywgd2lkdGg9NDgsIGNvbXBhY3Q9VHJ1ZSksIGV4cGVjdGVkKQorCiAKIGNsYXNzIERvdHRlZFByZXR0eVByaW50ZXIocHByaW50LlByZXR0eVByaW50ZXIpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQppbmRleCA5ZDZkYmVhLi43ZWVhMzQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKQEAgLTEsNjIgKzEsNTUgQEAKLSIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLgotIiIiCi0KLSMgSW4gMi42LCB0aGlzIGdpdmVzIHVzIHRoZSBiZWhhdmlvciB3ZSB3YW50LiAgSW4gMy4wLCBpdCBoYXMKLSMgIG5vIGZ1bmN0aW9uLCBidXQgaXQgc3RpbGwgbXVzdCBwYXJzZSBjb3JyZWN0bHkuCi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCi0KIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCi10cnk6Ci0gICAgIyAzLngKLSAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgMi54Ci0gICAgZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBOb3REZWZpbmVkID0gb2JqZWN0KCkKIAogIyBBIGRpc3BhdGNoIHRhYmxlIGFsbCA4IGNvbWJpbmF0aW9ucyBvZiBwcm92aWRpbmcKLSMgIHNlcCwgZW5kLCBhbmQgZmlsZQorIyBzZXAsIGVuZCwgYW5kIGZpbGUuCiAjIEkgdXNlIHRoaXMgbWFjaGluZXJ5IHNvIHRoYXQgSSdtIG5vdCBqdXN0IHBhc3NpbmcgZGVmYXVsdAotIyAgdmFsdWVzIHRvIHByaW50LCBJJ20gZWl0aGVyIHBhc3Npbmcgb3Igbm90IHBhc3NpbmcgaW4gdGhlCi0jICBhcmd1bWVudHMKKyMgdmFsdWVzIHRvIHByaW50LCBJJ20gZWl0aGVyIHBhc3Npbmcgb3Igbm90IHBhc3NpbmcgaW4gdGhlCisjIGFyZ3VtZW50cy4KIGRpc3BhdGNoID0gewogICAgIChGYWxzZSwgRmFsc2UsIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoKmFyZ3MpLAogICAgIChGYWxzZSwgRmFsc2UsIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChGYWxzZSwgVHJ1ZSwgIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgKmFyZ3MpLAogICAgIChGYWxzZSwgVHJ1ZSwgIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChUcnVlLCAgRmFsc2UsIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgKmFyZ3MpLAogICAgIChUcnVlLCAgRmFsc2UsIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGZpbGU9ZmlsZSwgKmFyZ3MpLAogICAgIChUcnVlLCAgVHJ1ZSwgIEZhbHNlKToKLSAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgKmFyZ3MpLAogICAgIChUcnVlLCAgVHJ1ZSwgIFRydWUpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAotICAgIH0KKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCBmaWxlPWZpbGUsICphcmdzKSwKK30KKwogCiAjIENsYXNzIHVzZWQgdG8gdGVzdCBfX3N0cl9fIGFuZCBwcmludAogY2xhc3MgQ2xhc3NXaXRoX19zdHJfXzoKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CiAgICAgICAgIHNlbGYueCA9IHgKKwogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi54CiAKLWNsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAotICAgICAgICAgICAgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkLCBmaWxlPU5vdERlZmluZWQpOgotICAgICAgICAjIENhcHR1cmUgc3lzLnN0ZG91dCBpbiBhIFN0cmluZ0lPLiAgQ2FsbCBwcmludCB3aXRoIGFyZ3MsCi0gICAgICAgICMgIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0Ci0gICAgICAgICMgIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCiAKLSAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsIGFuZCBmaWxlCi0gICAgICAgICMgIGFyZSBkZWZpbmVkCitjbGFzcyBUZXN0UHJpbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgY29ycmVjdCBvcGVyYXRpb24gb2YgdGhlIHByaW50IGZ1bmN0aW9uLiIiIgorCisgICAgZGVmIGNoZWNrKHNlbGYsIGV4cGVjdGVkLCBhcmdzLAorICAgICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6CisgICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKKyAgICAgICAgIyBhbmQgd2l0aCBzZXAsIGVuZCwgYW5kIGZpbGUsIGlmIHRoZXkncmUgZGVmaW5lZC4gIFJlc3VsdAorICAgICAgICAjIG11c3QgbWF0Y2ggZXhwZWN0ZWQuCisKKyAgICAgICAgIyBMb29rIHVwIHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbCwgYmFzZWQgb24gaWYgc2VwLCBlbmQsCisgICAgICAgICMgYW5kIGZpbGUgYXJlIGRlZmluZWQuCiAgICAgICAgIGZuID0gZGlzcGF0Y2hbKHNlcCBpcyBub3QgTm90RGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICAgICAgZW5kIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBmaWxlIGlzIG5vdCBOb3REZWZpbmVkKV0KQEAgLTY5LDcgKzYyLDcgQEAKICAgICBkZWYgdGVzdF9wcmludChzZWxmKToKICAgICAgICAgZGVmIHgoZXhwZWN0ZWQsIGFyZ3MsIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCk6CiAgICAgICAgICAgICAjIFJ1biB0aGUgdGVzdCAyIHdheXM6IG5vdCB1c2luZyBmaWxlLCBhbmQgdXNpbmcKLSAgICAgICAgICAgICMgIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTworICAgICAgICAgICAgIyBmaWxlIGRpcmVjdGVkIHRvIGEgU3RyaW5nSU8uCiAKICAgICAgICAgICAgIHNlbGYuY2hlY2soZXhwZWN0ZWQsIGFyZ3MsIHNlcD1zZXAsIGVuZD1lbmQpCiAKQEAgLTEwMSwxMSArOTQsNiBAQAogICAgICAgICB4KCcqXG4nLCAoQ2xhc3NXaXRoX19zdHJfXygnKicpLCkpCiAgICAgICAgIHgoJ2FiYyAxXG4nLCAoQ2xhc3NXaXRoX19zdHJfXygnYWJjJyksIDEpKQogCi0jICAgICAgICAjIDIueCB1bmljb2RlIHRlc3RzCi0jICAgICAgICB4KHUnMSAyXG4nLCAoJzEnLCB1JzInKSkKLSMgICAgICAgIHgodSd1XDEyMzRcbicsICh1J3VcMTIzNCcsKSkKLSMgICAgICAgIHgodScgIGFiYyAxXG4nLCAoJyAnLCBDbGFzc1dpdGhfX3N0cl9fKHUnYWJjJyksIDEpKQotCiAgICAgICAgICMgZXJyb3JzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcHJpbnQsICcnLCBzZXA9MykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIGVuZD0zKQpAQCAtMTEzLDEyICsxMDEsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3ByaW50X2ZsdXNoKHNlbGYpOgogICAgICAgICAjIG9wZXJhdGlvbiBvZiB0aGUgZmx1c2ggZmxhZwotICAgICAgICBjbGFzcyBmaWxlbGlrZSgpOgorICAgICAgICBjbGFzcyBmaWxlbGlrZToKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gPSAnJwogICAgICAgICAgICAgICAgIHNlbGYuZmx1c2hlZCA9IDAKKwogICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIHN0cik6CiAgICAgICAgICAgICAgICAgc2VsZi53cml0dGVuICs9IHN0cgorCiAgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkICs9IDEKIApAQCAtMTMwLDE1ICsxMjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZsdXNoZWQsIDIpCiAKICAgICAgICAgIyBlbnN1cmUgZXhjZXB0aW9ucyBmcm9tIGZsdXNoIGFyZSBwYXNzZWQgdGhyb3VnaAotICAgICAgICBjbGFzcyBub2ZsdXNoKCk6CisgICAgICAgIGNsYXNzIG5vZmx1c2g6CiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBwYXNzCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBwcmludCwgMSwgZmlsZT1ub2ZsdXNoKCksIGZsdXNoPVRydWUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UHJpbnQpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQppbmRleCBjZDdlYzU4Li4xZmMzYzQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CkBAIC0zLDkgKzMsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBwc3RhdHMKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCiBmcm9tIGRpZmZsaWIgaW1wb3J0IHVuaWZpZWRfZGlmZgogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiAKIGltcG9ydCBwcm9maWxlCiBmcm9tIHRlc3QucHJvZmlsZWUgaW1wb3J0IHRlc3RmdW5jLCB0aW1lcgpAQCAtMTQsOSArMTYsMTMgQEAKIGNsYXNzIFByb2ZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHByb2ZpbGVyY2xhc3MgPSBwcm9maWxlLlByb2ZpbGUKKyAgICBwcm9maWxlcm1vZHVsZSA9IHByb2ZpbGUKICAgICBtZXRob2RuYW1lcyA9IFsncHJpbnRfc3RhdHMnLCAncHJpbnRfY2FsbGVycycsICdwcmludF9jYWxsZWVzJ10KICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gJzowKG1heCknCiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHVubGluayhURVNURk4pCisKICAgICBkZWYgZ2V0X2V4cGVjdGVkX291dHB1dChzZWxmKToKICAgICAgICAgcmV0dXJuIF9Qcm9maWxlT3V0cHV0CiAKQEAgLTc0LDYgKzgwLDE5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuZXhwZWN0ZWRfbWF4X291dHB1dCwgcmVzLAogICAgICAgICAgICAgICAgICJQcm9maWxpbmcgezAhcn0gZGlkbid0IHJlcG9ydCBtYXg6XG57MX0iLmZvcm1hdChzdG10LCByZXMpKQogCisgICAgZGVmIHRlc3RfcnVuKHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW4oImludCgnMScpIikKKyAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW4oImludCgnMScpIiwgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKworICAgIGRlZiB0ZXN0X3J1bmN0eChzZWxmKToKKyAgICAgICAgd2l0aCBzaWxlbnQoKToKKyAgICAgICAgICAgIHNlbGYucHJvZmlsZXJtb2R1bGUucnVuY3R4KCJ0ZXN0ZnVuYygpIiwgZ2xvYmFscygpLCBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPVRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKFRFU1RGTikpCisKIAogZGVmIHJlZ2VuZXJhdGVfZXhwZWN0ZWRfb3V0cHV0KGZpbGVuYW1lLCBjbHMpOgogICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucnN0cmlwKCdjbycpCkBAIC05NSw2ICsxMTQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgbWV0aG9kLCByZXN1bHRzW2krMV0pKQogICAgICAgICBmLndyaXRlKCdcbmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6XG4gICAgbWFpbigpXG4nKQogCitAY29udGV4dG1hbmFnZXIKK2RlZiBzaWxlbnQoKToKKyAgICBzdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICBzeXMuc3Rkb3V0ID0gU3RyaW5nSU8oKQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChQcm9maWxlVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKaW5kZXggMjkyOTdmOC4uODkxNjg2MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wdHkucHkKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgIyNkZWJ1ZygiUmVhZGluZyBmcm9tIG1hc3Rlcl9mZCBub3cgdGhhdCB0aGUgY2hpbGQgaGFzIGV4aXRlZCIpCiAgICAgICAgICAgICAjI3RyeToKICAgICAgICAgICAgICMjICAgIHMxID0gb3MucmVhZChtYXN0ZXJfZmQsIDEwMjQpCi0gICAgICAgICAgICAjI2V4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICMjZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIyAgICBwYXNzCiAgICAgICAgICAgICAjI2Vsc2U6CiAgICAgICAgICAgICAjIyAgICByYWlzZSBUZXN0RmFpbGVkKCJSZWFkIGZyb20gbWFzdGVyX2ZkIGRpZCBub3QgcmFpc2UgZXhjZXB0aW9uIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQppbmRleCBmM2MxYTZhLi4xNTRjMDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CkBAIC0xLDcgKzEsOSBAQAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIApAQCAtMTMsNyArMTUsNyBAQAogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QucHknKQogICAgICAgICBzZWxmLnB5Y19wYXRoID0gc2VsZi5zb3VyY2VfcGF0aCArICdjJwotICAgICAgICBzZWxmLmNhY2hlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKKyAgICAgICAgc2VsZi5jYWNoZV9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5jd2RfZHJpdmUgPSBvcy5wYXRoLnNwbGl0ZHJpdmUob3MuZ2V0Y3dkKCkpWzBdCiAgICAgICAgICMgSW4gdGhlc2UgdGVzdHMgd2UgY29tcHV0ZSByZWxhdGl2ZSBwYXRocy4gIFdoZW4gdXNpbmcgV2luZG93cywgdGhlCiAgICAgICAgICMgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBwYXRoIGFuZCB0aGUgJ3NlbGYuc291cmNlX3BhdGgnIG1pZ2h0IGJlCkBAIC0zNSw2ICszNywyNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAorICAgIGRlZiB0ZXN0X2RvX25vdF9vdmVyd3JpdGVfc3ltbGlua3Moc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIHN5bWxpbmssIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNlbGYucHljX3BhdGggKyAnLmFjdHVhbCcsIHNlbGYucHljX3BhdGgpCisgICAgICAgIGV4Y2VwdCAoTm90SW1wbGVtZW50ZWRFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduZWVkIHRvIGJlIGFibGUgdG8gY3JlYXRlIGEgc3ltbGluayBmb3IgYSBmaWxlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzbGluayhzZWxmLnB5Y19wYXRoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgb3MucGF0aC5leGlzdHMob3MuZGV2bnVsbCkgb3Igb3MucGF0aC5pc2ZpbGUob3MuZGV2bnVsbCksCisgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgb3MuZGV2bnVsbCBhbmQgZm9yIGl0IHRvIGJlIGEgbm9uLXJlZ3VsYXIgZmlsZScpCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9ub25yZWd1bGFyX2ZpbGVzKHNlbGYpOgorICAgICAgICAjIEluIHRoZSBmYWNlIG9mIGEgY2ZpbGUgYXJndW1lbnQgYmVpbmcgYSBub24tcmVndWxhciBmaWxlLCBiYWlsIG91dC4KKyAgICAgICAgIyBJc3N1ZSAjMTcyMjIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIG9zLmRldm51bGwpCisKICAgICBkZWYgdGVzdF9jYWNoZV9wYXRoKHNlbGYpOgogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCkBAIC01NCw4ICs3NiwyMiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5Q29tcGlsZVRlc3RzKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAnbm9uLXJvb3QgdXNlciByZXF1aXJlZCcpCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAnY2Fubm90IGNvbnRyb2wgZGlyZWN0b3J5IHBlcm1pc3Npb25zIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnNfcHJvcGFnYXRlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGV4Y2VwdGlvbnMgcmFpc2VkIHRoYW5rcyB0byBpc3N1ZXMgd2l0aCB3cml0aW5nCisgICAgICAgICMgYnl0ZWNvZGUuCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MjQ0CisgICAgICAgIG1vZGUgPSBvcy5zdGF0KHNlbGYuZGlyZWN0b3J5KQorICAgICAgICBvcy5jaG1vZChzZWxmLmRpcmVjdG9yeSwgc3RhdC5TX0lSRUFEKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoLCBzZWxmLnB5Y19wYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi5kaXJlY3RvcnksIG1vZGUuc3RfbW9kZSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weSBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CmluZGV4IGU4Mzk4OWUuLjg4YWZmODkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5CkBAIC0xNDIsNyArMTQyLDcgQEAKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgncHljbGJyJykKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnYXN0JykKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZG9jdGVzdCcsIGlnbm9yZT0oIlRlc3RSZXN1bHRzIiwgIl9TcG9vZk91dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEb2NUZXN0Q2FzZSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiLCAnX0RvY1Rlc3RTdWl0ZScpKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkaWZmbGliJywgaWdub3JlPSgiTWF0Y2giLCkpCiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JzKHNlbGYpOgpAQCAtMTU4LDcgKzE1OCw3IEBACiAgICAgICAgIGNtKCdyYW5kb20nLCBpZ25vcmU9KCdSYW5kb20nLCkpICAjIGZyb20gX3JhbmRvbSBpbXBvcnQgUmFuZG9tIGFzIENvcmVHZW5lcmF0b3IKICAgICAgICAgY20oJ2NnaScsIGlnbm9yZT0oJ2xvZycsKSkgICAgICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCiAgICAgICAgIGNtKCdwaWNrbGUnKQotICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ2FpZmMnLCBpZ25vcmU9KCdvcGVuZnAnLCAnX2FpZmNfcGFyYW1zJykpICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCiAgICAgICAgIGNtKCdzcmVfcGFyc2UnLCBpZ25vcmU9KCdkdW1wJywpKSAjIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgogICAgICAgICBjbSgncGRiJykKICAgICAgICAgY20oJ3B5ZG9jJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CmluZGV4IDQzZjQxNjMuLmNkZjI4YTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGV4dHdyYXAKQEAgLTI5LDEwICszMCw2IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCi0jIEp1c3QgaW4gY2FzZSBzeXMubW9kdWxlc1sidGVzdCJdIGhhcyB0aGUgb3B0aW9uYWwgYXR0cmlidXRlIF9fbG9hZGVyX18uCi1pZiBoYXNhdHRyKHB5ZG9jX21vZCwgIl9fbG9hZGVyX18iKToKLSAgICBkZWwgcHlkb2NfbW9kLl9fbG9hZGVyX18KLQogaWYgdGVzdC5zdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKICAgICBleHBlY3RlZF9kYXRhX2RvY3N0cmluZ3MgPSAoCiAgICAgICAgICdkaWN0aW9uYXJ5IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMgKGlmIGRlZmluZWQpJywKQEAgLTIxMiw2ICsyMDksNzUgQEAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKIAorZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIERBIGluIG1vZHVsZSAlczoKKworY2xhc3MgREEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIF9fZGljdF9fJXMKKyB8XHgyMFx4MjAKKyB8ICBfX3dlYWtyZWZfXyVzCisgfFx4MjBceDIwCisgfCAgaGFtCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YToKKyB8XHgyMFx4MjAKKyB8ICBoYW0gPSAnc3BhbScKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ2xhc3MgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzcyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIExJRkUgPSA0MgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczIgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczIoQ2xhc3MxKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDbGFzczIKKyB8ICAgICAgQ2xhc3MxCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEzOgorIHxceDIwXHgyMAorIHwgIHRocmVlID0gMworIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEyOgorIHxceDIwXHgyMAorIHwgIHR3byA9IDIKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiA9ICIiIgorSGVscCBvbiBjbGFzcyBDIGluIG1vZHVsZSAlczoKKworY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgaGVyZSA9ICdwcmVzZW50IScKKyIiIi5zdHJpcCgpCisKIGRlZiBydW5fcHlkb2MobW9kdWxlX25hbWUsICphcmdzLCAqKmVudik6CiAgICAgIiIiCiAgICAgUnVucyBweWRvYyBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gUmV0dXJucyB0aGUgc3RyaXBwZWQKQEAgLTQyMSw2ICs0ODcsMzEgQEAKICAgICAgICAgICAgIHN5bm9wc2lzID0gcHlkb2Muc3lub3BzaXMoVEVTVEZOLCB7fSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lub3BzaXMsICdsaW5lIDE6IGhceGU5JykKIAorICAgIGRlZiB0ZXN0X3NwbGl0ZG9jX3dpdGhfZGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIGV4YW1wbGVfc3RyaW5nID0gIkkgQW0gQSBEb2NcblxuXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLnNwbGl0ZG9jKGV4YW1wbGVfc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ0kgQW0gQSBEb2MnLCAnXG5IZXJlIGlzIG15IGRlc2NyaXB0aW9uJykpCisKKyAgICBkZWYgdGVzdF9pc19vYmplY3Rfb3JfbWV0aG9kKHNlbGYpOgorICAgICAgICBkb2MgPSBweWRvYy5Eb2MoKQorICAgICAgICAjIEJvdW5kIE1ldGhvZAorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGRvYy5mYWlsKSkKKyAgICAgICAgIyBNZXRob2QgRGVzY3JpcHRvcgorICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuX2lzX3NvbWVfbWV0aG9kKGludC5fX2FkZF9fKSkKKyAgICAgICAgIyBTdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5faXNfc29tZV9tZXRob2QoIkkgYW0gbm90IGEgbWV0aG9kIikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5fbm90X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB5ZG9jLmlzcGFja2FnZSh0ZXN0X2RpcikpCisKKyAgICBkZWYgdGVzdF9pc19wYWNrYWdlX3doZW5faXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0ZXN0X2RpcjoKKyAgICAgICAgICAgIGluaXRfcGF0aCA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgIG9wZW4oaW5pdF9wYXRoLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKGluaXRfcGF0aCkKKwogICAgIGRlZiB0ZXN0X2FsbG1ldGhvZHMoc2VsZik6CiAgICAgICAgICMgaXNzdWUgMTc0NzY6IGFsbG1ldGhvZHMgd2FzIG5vIGxvbmdlciByZXR1cm5pbmcgdW5ib3VuZCBtZXRob2RzLgogICAgICAgICAjIFRoaXMgdGVzdCBpcyBhIGJpdCBmcmFnaWxlIGluIHRoZSBmYWNlIG9mIGNoYW5nZXMgdG8gb2JqZWN0IGFuZCB0eXBlLApAQCAtNjE1LDYgKzcwNiwxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocHlkb2MuSGVscGVyLmtleXdvcmRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoa2V5d29yZC5rd2xpc3QpKQogCitjbGFzcyBQeWRvY1dpdGhNZXRhQ2xhc3Nlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgREEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzID0gdHVwbGUoJ1xuIHwgICAgICAnICsgcyBpZiBzIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoREEpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgKF9fbmFtZV9fLCkgKyBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5nc1s6Ml0pCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhPbmVNZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdMSUZFJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0xJRkUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4xICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfdmlydHVhbENsYXNzQXR0cmlidXRlV2l0aFR3b01ldGEoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldCgKKyAgICAgICAgICAgICAgICAgICAgWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZhaWwxID0gZmFpbDIgPSBGYWxzZQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MxKQorICAgICAgICBleHBlY3RlZF90ZXh0MSA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjIgJSBfX25hbWVfXworICAgICAgICByZXN1bHQxID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQxICE9IGV4cGVjdGVkX3RleHQxOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dDEsIHJlc3VsdDEpCisgICAgICAgICAgICBmYWlsMSA9IFRydWUKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMikKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDIgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MiA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MiAhPSBleHBlY3RlZF90ZXh0MjoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQyLCByZXN1bHQyKQorICAgICAgICAgICAgZmFpbDIgPSBUcnVlCisgICAgICAgIGlmIGZhaWwxIG9yIGZhaWwyOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJywgJ2hlcmUnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIGhlcmUgPSAncHJlc2VudCEnCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKIEByZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICB0cnk6CkBAIC02MjQsNiArODM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5IGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKaW5kZXggZDM2M2E2YS4uN2QxYTUzYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkKQEAgLTEsMTAgKzEsMTIgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHRpbWUKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB3YXJuaW5ncworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIGZyb20gbWF0aCBpbXBvcnQgbG9nLCBleHAsIHBpLCBmc3VtLCBzaW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC00Niw2ICs0OCw0OCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNlZWQsIDEsIDIsIDMsIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHlwZShzZWxmLmdlbiksIFtdKQogCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5fdXJhbmRvbScpICMgb3MudXJhbmRvbQorICAgIGRlZiB0ZXN0X3NlZWRfd2hlbl9yYW5kb21uZXNzX3NvdXJjZV9ub3RfZm91bmQoc2VsZiwgdXJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uc2VlZCgpIHVzZXMgdGltZS50aW1lKCkgd2hlbiBhbiBvcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGZvdW5kLiBUbyB0ZXN0IHRoaXMgb24gbWFjaGluZXMgd2VyZSBpdAorICAgICAgICAjIGV4aXN0cywgcnVuIHRoZSBhYm92ZSB0ZXN0LCB0ZXN0X3NlZWRhcmdzKCksIGFnYWluIGFmdGVyIG1vY2tpbmcKKyAgICAgICAgIyBvcy51cmFuZG9tKCkgc28gdGhhdCBpdCByYWlzZXMgdGhlIGV4Y2VwdGlvbiBleHBlY3RlZCB3aGVuIHRoZQorICAgICAgICAjIHJhbmRvbW5lc3Mgc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAgIHVyYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgc2VsZi50ZXN0X3NlZWRhcmdzKCkKKworICAgIGRlZiB0ZXN0X3NodWZmbGUoc2VsZik6CisgICAgICAgIHNodWZmbGUgPSBzZWxmLmdlbi5zaHVmZmxlCisgICAgICAgIGxzdCA9IFtdCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdCwgW10pCisgICAgICAgIGxzdCA9IFszN10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbMzddKQorICAgICAgICBzZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgc2h1ZmZsZWRfc2VxcyA9IFtsaXN0KHJhbmdlKG4pKSBmb3IgbiBpbiByYW5nZSgxMCldCisgICAgICAgIGZvciBzaHVmZmxlZF9zZXEgaW4gc2h1ZmZsZWRfc2VxczoKKyAgICAgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfc2VxKQorICAgICAgICBmb3IgKHNlcSwgc2h1ZmZsZWRfc2VxKSBpbiB6aXAoc2Vxcywgc2h1ZmZsZWRfc2Vxcyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCBsZW4oc2h1ZmZsZWRfc2VxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNlcSksIHNldChzaHVmZmxlZF9zZXEpKQorICAgICAgICAjIFRoZSBhYm92ZSB0ZXN0cyBhbGwgd291bGQgcGFzcyBpZiB0aGUgc2h1ZmZsZSB3YXMgYQorICAgICAgICAjIG5vLW9wLiBUaGUgZm9sbG93aW5nIG5vbi1kZXRlcm1pbmlzdGljIHRlc3QgY292ZXJzIHRoYXQuICBJdAorICAgICAgICAjIGFzc2VydHMgdGhhdCB0aGUgc2h1ZmZsZWQgc2VxdWVuY2Ugb2YgMTAwMCBkaXN0aW5jdCBlbGVtZW50cworICAgICAgICAjIG11c3QgYmUgZGlmZmVyZW50IGZyb20gdGhlIG9yaWdpbmFsIG9uZS4gQWx0aG91Z2ggdGhlcmUgaXMKKyAgICAgICAgIyBtYXRoZW1hdGljYWxseSBhIG5vbi16ZXJvIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBjb3VsZAorICAgICAgICAjIGFjdHVhbGx5IGhhcHBlbiBpbiBhIGdlbnVpbmVseSByYW5kb20gc2h1ZmZsZSwgaXQgaXMKKyAgICAgICAgIyBjb21wbGV0ZWx5IG5lZ2xpZ2libGUsIGdpdmVuIHRoYXQgdGhlIG51bWJlciBvZiBwb3NzaWJsZQorICAgICAgICAjIHBlcm11dGF0aW9ucyBvZiAxMDAwIG9iamVjdHMgaXMgMTAwMCEgKGZhY3RvcmlhbCBvZiAxMDAwKSwKKyAgICAgICAgIyB3aGljaCBpcyBjb25zaWRlcmFibHkgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBhdG9tcyBpbiB0aGUKKyAgICAgICAgIyB1bml2ZXJzZS4uLgorICAgICAgICBsc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlZF9sc3QgPSBsaXN0KHJhbmdlKDEwMDApKQorICAgICAgICBzaHVmZmxlKHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxzdCAhPSBzaHVmZmxlZF9sc3QpCisgICAgICAgIHNodWZmbGUobHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKwogICAgIGRlZiB0ZXN0X2Nob2ljZShzZWxmKToKICAgICAgICAgY2hvaWNlID0gc2VsZi5nZW4uY2hvaWNlCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CkBAIC02NSw2ICsxMDksOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odW5pcSksIGspCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pcSA8PSBzZXQocG9wdWxhdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZW4uc2FtcGxlKFtdLCAwKSwgW10pICAjIHRlc3QgZWRnZSBjYXNlIE49PWs9PTAKKyAgICAgICAgIyBFeGNlcHRpb24gcmFpc2VkIGlmIHNpemUgb2Ygc2FtcGxlIGV4Y2VlZHMgdGhhdCBvZiBwb3B1bGF0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnNhbXBsZSwgcG9wdWxhdGlvbiwgTisxKQogCiAgICAgZGVmIHRlc3Rfc2FtcGxlX2Rpc3RyaWJ1dGlvbihzZWxmKToKICAgICAgICAgIyBGb3IgdGhlIGVudGlyZSBhbGxvd2FibGUgcmFuZ2Ugb2YgMCA8PSBrIDw9IE4sIHZhbGlkYXRlIHRoYXQKQEAgLTIwNSw2ICsyNTEsMjUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJhbmdlKHN0YXJ0LHN0b3ApKSwKICAgICAgICAgICAgICAgICBzZXQoW3NlbGYuZ2VuLnJhbmRyYW5nZShzdGFydCxzdG9wKSBmb3IgaSBpbiByYW5nZSgxMDApXSkpCiAKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2Vfbm9udW5pdF9zdGVwKHNlbGYpOgorICAgICAgICByaW50ID0gc2VsZi5nZW4ucmFuZHJhbmdlKDAsIDEwLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJpbnQsICgwLCAyLCA0LCA2LCA4KSkKKyAgICAgICAgcmludCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgwLCAyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJpbnQsIDApCisKKyAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfZXJyb3JzKHNlbGYpOgorICAgICAgICByYWlzZXMgPSBwYXJ0aWFsKHNlbGYuYXNzZXJ0UmFpc2VzLCBWYWx1ZUVycm9yLCBzZWxmLmdlbi5yYW5kcmFuZ2UpCisgICAgICAgICMgRW1wdHkgcmFuZ2UKKyAgICAgICAgcmFpc2VzKDMsIDMpCisgICAgICAgIHJhaXNlcygtNzIxKQorICAgICAgICByYWlzZXMoMCwgMTAwLCAtMTIpCisgICAgICAgICMgTm9uLWludGVnZXIgc3RhcnQvc3RvcAorICAgICAgICByYWlzZXMoMy4xNDE1OSkKKyAgICAgICAgcmFpc2VzKDAsIDIuNzE4MjgpCisgICAgICAgICMgWmVybyBhbmQgbm9uLWludGVnZXIgc3RlcAorICAgICAgICByYWlzZXMoMCwgNDIsIDApCisgICAgICAgIHJhaXNlcygwLCA0MiwgMy4xNDE1OSkKKwogICAgIGRlZiB0ZXN0X2dlbnJhbmRiaXRzKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSByYW5nZXMKICAgICAgICAgZm9yIGsgaW4gcmFuZ2UoMSwgMTAwMCk6CkBAIC0yNzQsNiArMzM5LDE2IEBACiAgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKIAorICAgICAgICAjIExpdHRsZSB0cmljayB0byBtYWtlICJ0dXBsZSh4ICUgKDIqKjMyKSBmb3IgeCBpbiBpbnRlcm5hbHN0YXRlKSIKKyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yLiBJIGNhbm5vdCB0aGluayBvZiBhIHNpbXBsZSB3YXkgdG8gYWNoaWV2ZSB0aGlzLCBzbworICAgICAgICAjIEkgYW0gb3B0aW5nIGZvciB1c2luZyBhIGdlbmVyYXRvciBhcyB0aGUgbWlkZGxlIGFyZ3VtZW50IG9mIHNldHN0YXRlCisgICAgICAgICMgd2hpY2ggYXR0ZW1wdHMgdG8gY2FzdCBhIE5hTiB0byBpbnRlZ2VyLgorICAgICAgICBzdGF0ZV92YWx1ZXMgPSBzZWxmLmdlbi5nZXRzdGF0ZSgpWzFdCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IGxpc3Qoc3RhdGVfdmFsdWVzKQorICAgICAgICBzdGF0ZV92YWx1ZXNbLTFdID0gZmxvYXQoJ25hbicpCisgICAgICAgIHN0YXRlID0gKGludCh4KSBmb3IgeCBpbiBzdGF0ZV92YWx1ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2V0c3RhdGUsICgyLCBzdGF0ZSwgTm9uZSkpCisKICAgICBkZWYgdGVzdF9yZWZlcmVuY2VJbXBsZW1lbnRhdGlvbihzZWxmKToKICAgICAgICAgIyBDb21wYXJlIHRoZSBweXRob24gaW1wbGVtZW50YXRpb24gd2l0aCByZXN1bHRzIGZyb20gdGhlIG9yaWdpbmFsCiAgICAgICAgICMgY29kZS4gIENyZWF0ZSAyMDAwIDUzLWJpdCBwcmVjaXNpb24gcmFuZG9tIGZsb2F0cy4gIENvbXBhcmUgb25seQpAQCAtNDEzLDYgKzQ4OCwzOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrLCBudW1iaXRzKSAgICAgICAgIyBub3RlIHRoZSBzdHJvbmdlciBhc3NlcnRpb24KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTEpKSAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X3JhbmRiZWxvd19vdmVycmlkZW5fcmFuZG9tKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBSYW5kb20uX3JhbmRiZWxvdygpIGNhbiBvbmx5IHVzZSByYW5kb20oKSB3aGVuIHRoZSBidWlsdC1pbiBvbmUKKyAgICAgICAgIyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ1dCBubyBuZXcgZ2V0cmFuZGJpdHMoKSBtZXRob2Qgd2FzIHN1cHBsaWVkLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IHJhbmRvbS5TeXN0ZW1SYW5kb20oKS5yYW5kb20KKyAgICAgICAgbWF4c2l6ZSA9IDE8PHJhbmRvbS5CUEYKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgICMgUG9wdWxhdGlvbiByYW5nZSB0b28gbGFyZ2UgKG4gPj0gbWF4c2l6ZSkKKyAgICAgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobWF4c2l6ZSsxLCBtYXhzaXplID0gbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5nZW4uX3JhbmRiZWxvdyg1NjQwLCBtYXhzaXplID0gbWF4c2l6ZSkKKworICAgICAgICAjIFRoaXMgbWlnaHQgYmUgZ29pbmcgdG9vIGZhciB0byB0ZXN0IGEgc2luZ2xlIGxpbmUsIGJ1dCBiZWNhdXNlIG9mIG91cgorICAgICAgICAjIG5vYmxlIGFpbSBvZiBhY2hpZXZpbmcgMTAwJSB0ZXN0IGNvdmVyYWdlIHdlIG5lZWQgdG8gd3JpdGUgYSBjYXNlIGluCisgICAgICAgICMgd2hpY2ggdGhlIGZvbGxvd2luZyBsaW5lIGluIFJhbmRvbS5fcmFuZGJlbG93KCkgZ2V0cyBleGVjdXRlZDoKKyAgICAgICAgIworICAgICAgICAjIHJlbSA9IG1heHNpemUgJSBuCisgICAgICAgICMgbGltaXQgPSAobWF4c2l6ZSAtIHJlbSkgLyBtYXhzaXplCisgICAgICAgICMgciA9IHJhbmRvbSgpCisgICAgICAgICMgd2hpbGUgciA+PSBsaW1pdDoKKyAgICAgICAgIyAgICAgciA9IHJhbmRvbSgpICMgPD09ICpUaGlzIGxpbmUqIDw9PTwKKyAgICAgICAgIworICAgICAgICAjIFRoZXJlZm9yZSwgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIHdoaWxlIGxvb3AgaXMgZXhlY3V0ZWQgYXQgbGVhc3QKKyAgICAgICAgIyBvbmNlLCB3ZSBuZWVkIHRvIG1vY2sgcmFuZG9tKCkgc28gdGhhdCBpdCByZXR1cm5zIGEgbnVtYmVyIGdyZWF0ZXIKKyAgICAgICAgIyB0aGFuICdsaW1pdCcgdGhlIGZpcnN0IHRpbWUgaXQgZ2V0cyBjYWxsZWQuCisKKyAgICAgICAgbiA9IDQyCisgICAgICAgIGVwc2lsb24gPSAwLjAxCisgICAgICAgIGxpbWl0ID0gKG1heHNpemUgLSAobWF4c2l6ZSAlIG4pKSAvIG1heHNpemUKKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbbGltaXQgKyBlcHNpbG9uLCBsaW1pdCAtIGVwc2lsb25dCisgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3cobiwgbWF4c2l6ZSA9IG1heHNpemUpCisKICAgICBkZWYgdGVzdF9yYW5kcmFuZ2VfYnVnXzE1OTA4OTEoc2VsZik6CiAgICAgICAgIHN0YXJ0ID0gMTAwMDAwMDAwMDAwMAogICAgICAgICBzdG9wID0gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMApAQCAtNTMwLDYgKzYzNywxMDYgQEAKICAgICAgICAgcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSgwLCAxZTE1KQogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTAwKQogCisgICAgZGVmIHRlc3RfZ2FtbWF2YXJpYXRlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBCb3RoIGFscGhhIGFuZCBiZXRhIG11c3QgYmUgPiAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgLTEsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDAsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmRvbS5nYW1tYXZhcmlhdGUsIDEsIC0zKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZnVsbF9jb2RlX2NvdmVyYWdlKHNlbGYsIHJhbmRvbV9tb2NrKToKKyAgICAgICAgIyBUaGVyZSBhcmUgdGhyZWUgZGlmZmVyZW50IHBvc3NpYmlsaXRpZXMgaW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBvZiByYW5kb20uZ2FtbWF2YXJpYXRlKCksIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2YgJ2FscGhhJy4gV2hhdCB3ZQorICAgICAgICAjIGFyZSBnb2luZyB0byBkbyBoZXJlIGlzIHRvIGZpeCB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IHJhbmRvbSgpIHRvCisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBjYXNlcyB0aGF0IHByb3ZpZGUgMTAwJSBsaW5lIGNvdmVyYWdlIG9mIHRoZSBtZXRob2QuCisKKyAgICAgICAgIyAjMTogYWxwaGEgPiAxLjA6IHdlIHdhbnQgdGhlIGZpcnN0IHJhbmRvbSBudW1iZXIgdG8gYmUgb3V0c2lkZSB0aGUKKyAgICAgICAgIyBbMWUtNywgLjk5OTk5OTldIHJhbmdlLCBzbyB0aGF0IHRoZSBjb250aW51ZSBzdGF0ZW1lbnQgZXhlY3V0ZXMKKyAgICAgICAgIyBvbmNlLiBUaGUgdmFsdWVzIG9mIHUxIGFuZCB1MiB3aWxsIGJlIDAuNSBhbmQgMC4zLCByZXNwZWN0aXZlbHkuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNSwgMC4zXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4xLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTMpCisKKyAgICAgICAgIyAjMjogYWxwaGEgPT0gMTogZmlyc3QgcmFuZG9tIG51bWJlciBsZXNzIHRoYW4gMWUtNyB0byB0aGF0IHRoZSBib2R5CisgICAgICAgICMgb2YgdGhlIHdoaWxlIGxvb3AgZXhlY3V0ZXMgb25jZS4gVGhlbiByYW5kb20ucmFuZG9tKCkgcmV0dXJucyAwLjQ1LAorICAgICAgICAjIHdoaWNoIGNhdXNlcyB3aGlsZSB0byBzdG9wIGxvb3BpbmcgYW5kIHRoZSBhbGdvcml0aG0gdG8gdGVybWluYXRlLgorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFsxZS04LCAwLjQ1XQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoMS4wLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHJldHVybmVkX3ZhbHVlLCAyLjUwNzMxNDE2NjEyMzgwMykKKworICAgICAgICAjICMzOiAwIDwgYWxwaGEgPCAxLiBUaGlzIGlzIHRoZSBtb3N0IGNvbXBsZXggcmVnaW9uIG9mIGNvZGUgdG8gY292ZXIsCisgICAgICAgICMgYXMgdGhlcmUgYXJlIG11bHRpcGxlIGlmLWVsc2Ugc3RhdGVtZW50cy4gTGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlCisgICAgICAgICMgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUgdGhlIHZhbHVlcyB0aGF0IHdlIG5lZWQgYWNjb3JkaW5nbHk6CisgICAgICAgICMKKyAgICAgICAgIyB3aGlsZSAxOgorICAgICAgICAjICAgICB1ID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICAjICAgICBwID0gYip1CisgICAgICAgICMgICAgIGlmIHAgPD0gMS4wOiAjIDw9PT0gKEEpCisgICAgICAgICMgICAgICAgICB4ID0gcCAqKiAoMS4wL2FscGhhKQorICAgICAgICAjICAgICBlbHNlOiAjIDw9PT0gKEIpCisgICAgICAgICMgICAgICAgICB4ID0gLV9sb2coKGItcCkvYWxwaGEpCisgICAgICAgICMgICAgIHUxID0gcmFuZG9tKCkKKyAgICAgICAgIyAgICAgaWYgcCA+IDEuMDogIyA8PT09IChDKQorICAgICAgICAjICAgICAgICAgaWYgdTEgPD0geCAqKiAoYWxwaGEgLSAxLjApOiAjIDw9PT0gKEQpCisgICAgICAgICMgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgIyAgICAgZWxpZiB1MSA8PSBfZXhwKC14KTogIyA8PT09IChFKQorICAgICAgICAjICAgICAgICAgYnJlYWsKKyAgICAgICAgIyByZXR1cm4geCAqIGJldGEKKyAgICAgICAgIworICAgICAgICAjIEZpcnN0LCB3ZSB3YW50IChBKSB0byBiZSBUcnVlLiBGb3IgdGhhdCB3ZSBuZWVkIHRoYXQ6CisgICAgICAgICMgYipyYW5kb20oKSA8PSAxLjAKKyAgICAgICAgIyByMSA9IHJhbmRvbSgpIDw9IDEuMCAvIGIKKyAgICAgICAgIworICAgICAgICAjIFdlIG5vdyBnZXQgdG8gdGhlIHNlY29uZCBpZi1lbHNlIGJyYW5jaCwgYW5kIGhlcmUsIHNpbmNlIHAgPD0gMS4wLAorICAgICAgICAjIChDKSBpcyBGYWxzZSBhbmQgd2UgdGFrZSB0aGUgZWxpZiBicmFuY2gsIChFKS4gRm9yIGl0IHRvIGJlIFRydWUsCisgICAgICAgICMgc28gdGhhdCB0aGUgYnJlYWsgaXMgZXhlY3V0ZWQsIHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyByMiA9IHJhbmRvbSgpIDw9IF9leHAoLXgpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKHAgKiogKDEuMC9hbHBoYSkpKQorICAgICAgICAjIHIyIDw9IF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgIF9lID0gcmFuZG9tLl9lCisgICAgICAgIF9leHAgPSByYW5kb20uX2V4cAorICAgICAgICBfbG9nID0gcmFuZG9tLl9sb2cKKyAgICAgICAgYWxwaGEgPSAwLjM1CisgICAgICAgIGJldGEgPSAxLjQ1CisgICAgICAgIGIgPSAoX2UgKyBhbHBoYSkvX2UKKyAgICAgICAgZXBzaWxvbiA9IDAuMDEKKworICAgICAgICByMSA9IDAuODg1OTI5NjQ0MTU2NiAjIDEuMCAvIGIKKyAgICAgICAgcjIgPSAwLjM2Nzg3OTQ0MTE3MTQgIyBfZXhwKC0oKGIqcjEpICoqICgxLjAvYWxwaGEpKSkKKworICAgICAgICAjIFRoZXNlIGZvdXIgInJhbmRvbSIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChBKSBUcnVlLCAoRSkgRmFsc2UgLS0+IFtuZXh0IGl0ZXJhdGlvbiBvZiB3aGlsZV0KKyAgICAgICAgIyAoQSkgVHJ1ZSwgKEUpIFRydWUgLS0+IFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNDQ5OTk5OTk5OTk5NzU0NCkKKworICAgICAgICAjIExldCdzIG5vdyBtYWtlIChBKSBiZSBGYWxzZS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2hlbiB3ZSBnZXQgdG8gdGhlCisgICAgICAgICMgc2Vjb25kIGlmLWVsc2UgJ3AnIGlzIGdyZWF0ZXIgdGhhbiAxLCBzbyAoQykgZXZhbHVhdGVzIHRvIFRydWUuIFdlCisgICAgICAgICMgbm93IGVuY291bnRlciBhIHNlY29uZCBpZiBzdGF0ZW1lbnQsIChEKSwgd2hpY2ggaW4gb3JkZXIgdG8gZXhlY3V0ZQorICAgICAgICAjIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbjoKKyAgICAgICAgIyByMiA8PSB4ICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItcCkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgICMgcjIgPD0gKC1fbG9nKChiLShiKnIxKSkvYWxwaGEpKSAqKiAoYWxwaGEgLSAxLjApCisgICAgICAgIHIxID0gMC44OTU5Mjk2NDQxNTY2ICMgKDEuMCAvIGIpICsgZXBzaWxvbiAtLSBzbyB0aGF0IChBKSBpcyBGYWxzZQorICAgICAgICByMiA9IDAuOTQ0NTQwMDQwODg5ODE0MQorCisgICAgICAgICMgQW5kIHRoZXNlIGZvdXIgdmFsdWVzIHJlc3VsdCBpbiB0aGUgZm9sbG93aW5nIHRyYWNlOgorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChCKSBhbmQgKEMpIFRydWUsIChEKSBUcnVlIFt3aGlsZSBsb29wIGJyZWFrc10KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbcjEsIHIyICsgZXBzaWxvbiwgcjEsIHIyXQorICAgICAgICByZXR1cm5lZF92YWx1ZSA9IHJhbmRvbS5nYW1tYXZhcmlhdGUoYWxwaGEsIGJldGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDEuNTgzMDM0OTU2MTc2MDc4MSkKKworICAgIEB1bml0dGVzdC5tb2NrLnBhdGNoKCdyYW5kb20uUmFuZG9tLmdhbW1hdmFyaWF0ZScpCisgICAgZGVmIHRlc3RfYmV0YXZhcmlhdGVfcmV0dXJuX3plcm8oc2VsZiwgZ2FtbWF2YXJpYXRlX21vY2spOgorICAgICAgICAjIGJldGF2YXJpYXRlKCkgcmV0dXJucyB6ZXJvIHdoZW4gdGhlIEdhbW1hIGRpc3RyaWJ1dGlvbgorICAgICAgICAjIHRoYXQgaXQgdXNlcyBpbnRlcm5hbGx5IHJldHVybnMgdGhpcyBzYW1lIHZhbHVlLgorICAgICAgICBnYW1tYXZhcmlhdGVfbW9jay5yZXR1cm5fdmFsdWUgPSAwLjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLjAsIHJhbmRvbS5iZXRhdmFyaWF0ZSgyLjcxODI4LCAzLjE0MTU5KSkKIAogY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RNYWdpY0NvbnN0YW50cyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CmluZGV4IDJhMTNiZmUuLmQ5ZDRjZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIElOKCkpCiAKICAgICAgICAgIyBUZXN0IHVzZSBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBpbiBzbGljZSBpbmRpY2VzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMTApWzpJKDUpXSksIGxpc3QocmFuZ2UoNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKVs6SSg1KV0sIHJhbmdlKDUpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIHJhbmdlKDAsIDEwKVs6SVgoKV0KQEAgLTM1Myw5ICszNTMsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICgxMywgMjEsIDMpLCAoLTIsIDIsIDIpLCAoMioqNjUsIDIqKjY1KzIpXQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHIpKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCB0ZXN0PXQpOgorICAgICAgICAgICAgICAgICAgICByID0gcmFuZ2UoKnQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHIsIHByb3RvKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCiAKICAgICBkZWYgdGVzdF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKICAgICAgICAgdGVzdGNhc2VzID0gWygxMywpLCAoMCwgMTEpLCAoLTIyLCAxMCksICgyMCwgMywgLTEpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmUucHkKaW5kZXggZjA5MzgxMi4uYTRlMTFjNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CkBAIC0zLDEwICszLDEyIEBACiBpbXBvcnQgaW8KIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE3LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC01Myw2ICs3MSwxNSBAQAogICAgICAgICByZXR1cm4gc3RyKGludF92YWx1ZSArIDEpCiAKICAgICBkZWYgdGVzdF9iYXNpY19yZV9zdWIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCAnYScsICd4eXonKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoJ3knLCBTKCdhJyksIFMoJ3h5eicpKSwgJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYidhJywgYid4eXonKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIEIoYidhJyksIEIoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBieXRlYXJyYXkoYidhJyksIGJ5dGVhcnJheShiJ3h5eicpKSwgYid4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIG1lbW9yeXZpZXcoYidhJyksIG1lbW9yeXZpZXcoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgZm9yIHkgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Yih5LCAnYScsICd4JXN6JyAlIHkpLCAneGF6JykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YigiKD9pKWIrIiwgIngiLCAiYmJiYiBCQkJCIiksICd4IHgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1YihyJ1xkKycsIHNlbGYuYnVtcF9udW0sICcwOC4yIC0yIDIzeDk5eScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICc5LjMgLTMgMjR4MTAweScpCkBAIC0yMTAsMTAgKzIzNywyOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnN1Ym4oImIqIiwgIngiLCAieHl6IiwgMiksICgneHh4eXonLCAyKSkKIAogICAgIGRlZiB0ZXN0X3JlX3NwbGl0KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6IiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJycsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIjoqIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsICI6YTpiOjpjIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gIjphOmI6OmMiLCBTKCI6YTpiOjpjIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIjoiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6OicsICdjJ10pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiOmE6Yjo6YyIsIEIoYiI6YTpiOjpjIiksIGJ5dGVhcnJheShiIjphOmI6OmMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiIjphOmI6OmMiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoYiI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJycsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInYScsIGInYicsIGInYyddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYic6JywgYidhJywgYic6JywgYidiJywgYic6OicsIGInYyddKQorICAgICAgICBmb3IgYSwgYiwgYyBpbiAoIlx4ZTBceGRmXHhlNyIsICJcdTA0MzBcdTA0MzFcdTA0MzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIlxVMDAwMWQ0OWNcVTAwMDFkNDllXFUwMDAxZDRiNSIpOgorICAgICAgICAgICAgc3RyaW5nID0gIjolczolczo6JXMiICUgKGEsIGIsIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwgWycnLCBhLCBiLCAnJywgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsIHN0cmluZyksIFsnJywgYSwgYiwgY10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCIoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsIGEsICc6JywgYiwgJzo6JywgY10pCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKD86OiopIiwgIjphOmI6OmMiKSwgWycnLCAnYScsICdiJywgJ2MnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDopKiIsICI6YTpiOjpjIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWycnLCAnOicsICdhJywgJzonLCAnYicsICc6JywgJ2MnXSkKQEAgLTIzNSwyMiArMjgxLDUzIEBACiAKICAgICBkZWYgdGVzdF9yZV9maW5kYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIjorIiwgImFiYyIpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgImE6Yjo6Yzo6OmQiKSwgWyI6IiwgIjo6IiwgIjo6OiJdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIig6KSg6KikiLCAiYTpiOjpjOjo6ZCIpLCBbKCI6IiwgIiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI6IiwgIjoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6OiIpXSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAiYTpiOjpjOjo6ZCIsIFMoImE6Yjo6Yzo6OmQiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyI6IiwgIjo6IiwgIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKCI6IiwgIiIpLCAoIjoiLCAiOiIpLCAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gKGIiYTpiOjpjOjo6ZCIsIEIoYiJhOmI6OmM6OjpkIiksIGJ5dGVhcnJheShiImE6Yjo6Yzo6OmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhiImE6Yjo6Yzo6OmQiKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIjorIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KykiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiIjoiLCBiIjo6IiwgYiI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKGIiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhiIjoiLCBiIiIpLCAoYiI6IiwgYiI6IiksIChiIjoiLCBiIjo6IildKQorICAgICAgICBmb3IgeCBpbiAoIlx4ZTAiLCAiXHUwNDMwIiwgIlxVMDAwMWQ0OWMiKToKKyAgICAgICAgICAgIHh4ID0geCAqIDIKKyAgICAgICAgICAgIHh4eCA9IHggKiAzCisgICAgICAgICAgICBzdHJpbmcgPSAiYSVzYiVzYyVzZCIgJSAoeCwgeHgsIHh4eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiJXMrIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKykiICUgeCwgc3RyaW5nKSwgW3gsIHh4LCB4eHhdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoJXMpKCVzKikiICUgKHgsIHgpLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHgsICIiKSwgKHgsIHgpLCAoeCwgeHgpXSkKIAogICAgIGRlZiB0ZXN0X2J1Z18xMTc2MTIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbChyIihhfChiKSkiLCAiYWJhIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWygiYSIsICIiKSwoImIiLCAiYiIpLCgiYSIsICIiKV0pCiAKICAgICBkZWYgdGVzdF9yZV9tYXRjaChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsICdhJykuZ3JvdXBzKCksICgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoYSknLCAnYScpLmdyb3VwcygpLCAoJ2EnLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDApLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEpLCAnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSknLCAnYScpLmdyb3VwKDEsIDEpLCAoJ2EnLCAnYScpKQorICAgICAgICBmb3Igc3RyaW5nIGluICdhJywgUygnYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cHMoKSwgKCdhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgc3RyaW5nKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiBiJ2EnLCBCKGInYScpLCBieXRlYXJyYXkoYidhJyksIG1lbW9yeXZpZXcoYidhJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInYScsIHN0cmluZykuZ3JvdXBzKCksICgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXBzKCksIChiJ2EnLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgwKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEpLCBiJ2EnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksIChiJ2EnLCBiJ2EnKSkKKyAgICAgICAgZm9yIGEgaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGEsIGEpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXBzKCksIChhLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDApLCBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgxKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSwgMSksIChhLCBhKSkKIAogICAgICAgICBwYXQgPSByZS5jb21waWxlKCcoKGEpfChiKSkoYyk/JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2EnKS5ncm91cHMoKSwgKCdhJywgJ2EnLCBOb25lLCBOb25lKSkKQEAgLTI3Miw2ICszNDksMzYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2InLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ2FjJykuZ3JvdXAoMSwgJ2IyJywgMyksICgnYScsIE5vbmUsICdjJykpCiAKKyAgICBkZWYgdGVzdF9yZV9mdWxsbWF0Y2goc2VsZik6CisgICAgICAgICMgSXNzdWUgMTYyMDM6IFByb3Bvc2FsOiBhZGQgcmUuZnVsbG1hdGNoKCkgbWV0aG9kLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEiLCAiYSIpLnNwYW4oKSwgKDAsIDEpKQorICAgICAgICBmb3Igc3RyaW5nIGluICJhYiIsIFMoImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3Igc3RyaW5nIGluIGIiYWIiLCBCKGIiYWIiKSwgYnl0ZWFycmF5KGIiYWIiKSwgbWVtb3J5dmlldyhiImFiIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChiciJhfGFiIiwgc3RyaW5nKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgZm9yIGEsIGIgaW4gIlx4ZTBceGRmIiwgIlx1MDQzMFx1MDQzMSIsICJcVTAwMDFkNDljXFUwMDAxZDQ5ZSI6CisgICAgICAgICAgICByID0gciIlc3wlcyIgJSAoYSwgYSArIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyLCBhICsgYikuc3BhbigpLCAoMCwgMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiLio/JCIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8iLCAiYWJjIikuc3BhbigpLCAoMCwgMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYS4qP2IiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYmIiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJheHhiIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImErIiwgImFiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmZ1bGxtYXRjaChyImFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjXFoiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiKD9tKWFiYyQiLCAiYWJjXG4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhYig/PWMpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD88PWIpY2QiLCAiYWJjZCIpLnNwYW4oKSwgKDAsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIig/PWF8YWIpYWIiLCAiYWIiKS5zcGFuKCksICgwLCAyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyImJjIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8kIikuZnVsbG1hdGNoKCJhYmNkIiwgcG9zPTEsIGVuZHBvcz0zKS5zcGFuKCksICgxLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlLmNvbXBpbGUociIuKj8iKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWZfZXhpc3RzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYSknKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoJygnLCAnYScpKQpAQCAtMTA1Myw2ICsxMTYwLDI4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5jb21waWxlKHBhdHRlcm4sIHJlLlMpLmZpbmRhbGwoYid4eXonKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJ3h5eiddLCBtc2c9cGF0dGVybikKIAorICAgIGRlZiB0ZXN0X21hdGNoX3JlcHIoc2VsZik6CisgICAgICAgIGZvciBzdHJpbmcgaW4gJ1thYnJhY2FkYWJyYV0nLCBTKCdbYWJyYWNhZGFicmFdJyk6CisgICAgICAgICAgICBtID0gcmUuc2VhcmNoKHInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPSdhYnJhY2FkYWJyYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG0pLl9fbW9kdWxlX18sIHR5cGUobSkuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAoYidbYWJyYWNhZGFicmFdJywgQihiJ1thYnJhY2FkYWJyYV0nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInW2FicmFjYWRhYnJhXScpLAorICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnl2aWV3KGInW2FicmFjYWRhYnJhXScpKToKKyAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocmInKC4rKSguKj8pXDEnLCBzdHJpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgxLCAxMiksIG1hdGNoPWInYWJyYWNhZGFicmEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShtKS5fX21vZHVsZV9fLCB0eXBlKG0pLl9fcXVhbG5hbWVfXykpCisKKyAgICAgICAgZmlyc3QsIHNlY29uZCA9IGxpc3QocmUuZmluZGl0ZXIoIihhYSl8KGJiKSIsICJhYSBiYiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZmlyc3QpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgwLCAyKSwgbWF0Y2g9J2FhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoZmlyc3QpLl9fcXVhbG5hbWVfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWNvbmQpLCAiPCVzLiVzIG9iamVjdDsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzcGFuPSgzLCA1KSwgbWF0Y2g9J2JiJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZShzZWNvbmQpLl9fbW9kdWxlX18sIHR5cGUoc2Vjb25kKS5fX3F1YWxuYW1lX18pKQorCiAKICAgICBkZWYgdGVzdF9idWdfMjUzNyhzZWxmKToKICAgICAgICAgIyBpc3N1ZSAyNTM3OiBlbXB0eSBzdWJtYXRjaGVzCkBAIC0xMDY0LDYgKzExOTMsODQgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMSksICIiKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5ncm91cCgyKSwgInkiKQogCisKK2NsYXNzIFBhdHRlcm5SZXByVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBjaGVjayhzZWxmLCBwYXR0ZXJuLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZS5jb21waWxlKHBhdHRlcm4pKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgY2hlY2tfZmxhZ3Moc2VsZiwgcGF0dGVybiwgZmxhZ3MsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF93aXRob3V0X2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCdyYW5kb20gcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJykiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0UpIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLkl8cmUuU3xyZS5YLAorICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgIgorICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMfHJlLlZFUkJPU0UpIikKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmxhZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5VLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JfHJlLlN8cmUuVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLklHTk9SRUNBU0V8cmUuRE9UQUxMKSIpCisKKyAgICBkZWYgdGVzdF9pbmxpbmVfZmxhZ3Moc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJyg/aSlwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgnKD9pKXBhdHRlcm4nLCByZS5JR05PUkVDQVNFKSIpCisKKyAgICBkZWYgdGVzdF91bmtub3duX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgMHgxMjMwMDB8cmUuSSwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0V8MHgxMjMwMDApIikKKworICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKGInYnl0ZXMgcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJykiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKGInYnl0ZXMgcGF0dGVybicsIHJlLkEsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoYidieXRlcyBwYXR0ZXJuJywgcmUuQVNDSUkpIikKKworICAgIGRlZiB0ZXN0X3F1b3RlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygncmFuZG9tICJkb3VibGUgcXVvdGVkIiBwYXR0ZXJuJywKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoJ3JhbmRvbSAiZG91YmxlIHF1b3RlZCIgcGF0dGVybicpJycnKQorICAgICAgICBzZWxmLmNoZWNrKCJyYW5kb20gJ3NpbmdsZSBxdW90ZWQnIHBhdHRlcm4iLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgicmFuZG9tICdzaW5nbGUgcXVvdGVkJyBwYXR0ZXJuIiknJycpCisgICAgICAgIHNlbGYuY2hlY2soJycnYm90aCAnc2luZ2xlJyBhbmQgImRvdWJsZSIgcXVvdGVzJycnLAorICAgICAgICAgICAgJycncmUuY29tcGlsZSgnYm90aCBcXCdzaW5nbGVcXCcgYW5kICJkb3VibGUiIHF1b3RlcycpJycnKQorCisgICAgZGVmIHRlc3RfbG9uZ19wYXR0ZXJuKHNlbGYpOgorICAgICAgICBwYXR0ZXJuID0gJ1ZlcnkgJXNwYXR0ZXJuJyAlICgnbG9uZyAnICogMTAwMCkKKyAgICAgICAgciA9IHJlcHIocmUuY29tcGlsZShwYXR0ZXJuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGxlbihyKSwgMzAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjMwXSwgInJlLmNvbXBpbGUoJ1ZlcnkgbG9uZyBsb25nIGxvbiIpCisgICAgICAgIHIgPSByZXByKHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhsZW4ociksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzozMF0sICJyZS5jb21waWxlKCdWZXJ5IGxvbmcgbG9uZyBsb24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTE2Ol0sICIsIHJlLklHTk9SRUNBU0UpIikKKworCitjbGFzcyBJbXBsZW1lbnRhdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvZiB0aGUgcmUgbW9kdWxlLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfb3ZlcmxhcF90YWJsZShzZWxmKToKKyAgICAgICAgZiA9IHNyZV9jb21waWxlLl9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiIiksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImEiKSwgWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2QiKSwgWzAsIDAsIDAsIDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFhYWEiKSwgWzAsIDEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiYWJiYSIpLCBbMCwgMCwgMSwgMiwgMCwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigiYWJjYWJkYWMiKSwgWzAsIDAsIDAsIDEsIDIsIDAsIDEsIDBdKQorCisKIGRlZiBydW5fcmVfdGVzdHMoKToKICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKICAgICBpZiB2ZXJib3NlOgpAQCAtMTE5Myw3ICsxNDAwLDcgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCisgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHJ1bl9yZV90ZXN0cygpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzk4YTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9yZWdydGVzdC5weQpAQCAtMCwwICsxLDI3NSBAQAorIiIiCitUZXN0cyBvZiByZWdydGVzdC5weS4KKyIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBmYXVsdGhhbmRsZXIKK2ltcG9ydCBnZXRvcHQKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgcmVncnRlc3QsIHN1cHBvcnQKKworY2xhc3MgUGFyc2VBcmdzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuIiIiCisKKyAgICBkZWYgY2hlY2tFcnJvcihzZWxmLCBhcmdzLCBtc2cpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyLCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgIHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obXNnLCBlcnIuZ2V0dmFsdWUoKSkKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy0taGVscCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0LCBcCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVuIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLicsIG91dC5nZXR2YWx1ZSgpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIoKSByZXF1aXJlZCIpCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdGltZW91dCcsICc0LjInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy50aW1lb3V0LCA0LjIpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGltZW91dCddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0JywgJ2ZvbyddLCAnaW52YWxpZCBmbG9hdCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS13YWl0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy53YWl0KQorCisgICAgZGVmIHRlc3Rfc2xhdmVhcmdzKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zbGF2ZWFyZ3MnLCAnW1tdLCB7fV0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zbGF2ZWFyZ3MsICdbW10sIHt9XScpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tc2xhdmVhcmdzJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfc3RhcnQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1TJywgJy0tc3RhcnQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctdnZ2J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDEpCisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXZlcmJvc2UnXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMykKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZTIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy13JywgJy0tdmVyYm9zZTInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudmVyYm9zZTIpCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVcnLCAnLS12ZXJib3NlMyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMykKKworICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcScsICctLXF1aWV0JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3Nsb3coc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1vJywgJy0tc2xvdyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5wcmludF9zbG93KQorCisgICAgZGVmIHRlc3RfaGVhZGVyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1oZWFkZXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmhlYWRlcikKKworICAgIGRlZiB0ZXN0X3JhbmRvbWl6ZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXInLCAnLS1yYW5kb21pemUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorCisgICAgZGVmIHRlc3RfcmFuZHNlZWQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXJhbmRzZWVkJywgJzEyMzQ1J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMucmFuZG9tX3NlZWQsIDEyMzQ1KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucmFuZG9taXplKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXJhbmRzZWVkJywgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfZnJvbWZpbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1mJywgJy0tZnJvbWZpbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZm9vJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5mcm9tZmlsZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbycsICctcyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfZXhjbHVkZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXgnLCAnLS1leGNsdWRlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1zJywgJy0tc2luZ2xlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnNpbmdsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJy1mJywgJ2ZvbyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfbWF0Y2goc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1tJywgJy0tbWF0Y2gnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAncGF0dGVybiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWF0Y2hfdGVzdHMsICdwYXR0ZXJuJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfZmFpbGZhc3Qoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1HJywgJy0tZmFpbGZhc3QnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLXYnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnLVcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZmFpbGZhc3QpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnLUcvLS1mYWlsZmFzdCBuZWVkcyBlaXRoZXIgLXYgb3IgLVcnKQorCisgICAgZGVmIHRlc3RfdXNlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctdScsICctLXVzZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdndWksbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWydndWknLCAnbmV0d29yayddKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxub25lLG5ldHdvcmsnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIFsnbmV0d29yayddKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbGlzdChyZWdydGVzdC5SRVNPVVJDRV9OQU1FUykKKyAgICAgICAgICAgICAgICBleHBlY3RlZC5yZW1vdmUoJ2d1aScpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnYWxsLC1ndWknXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9yZXNvdXJjZXMsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgcmVzb3VyY2UnKQorCisgICAgZGVmIHRlc3RfbWVtbGltaXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1NJywgJy0tbWVtbGltaXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNEcnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLm1lbWxpbWl0LCAnNEcnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF90ZXN0ZGlyKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10ZXN0ZGlyJywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRlc3RkaXIsIG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCAnZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tdGVzdGRpciddLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3J1bmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTCcsICctLXJ1bmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnJ1bmxlYWtzKQorCisgICAgZGVmIHRlc3RfaHVudHJsZWFrcyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVInLCAnLS1odW50cmxlYWtzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg1LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzY6J10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgNCwgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc6MyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDMsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjozOmxlYWtzLmxvZyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDYsIDMsICdsZWFrcy5sb2cnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZHMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vOiddLCAnaW52YWxpZCBodW50cmxlYWtzIHZhbHVlJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJzY6Zm9vJ10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwcm9jZXNzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctaicsICctLW11bHRpcHJvY2Vzcyc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICcyJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfbXAsIDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCBpbnQgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctVCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctbCddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnMicsICctTScsICc0RyddLCAiZG9uJ3QgZ28gdG9nZXRoZXIiKQorCisgICAgZGVmIHRlc3RfY292ZXJhZ2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1UJywgJy0tY292ZXJhZ2UnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMudHJhY2UpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUQnLCAnLS1jb3ZlcmRpcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmNvdmVyZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3Rfbm9jb3ZlcmRpcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU4nLCAnLS1ub2NvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobnMuY292ZXJkaXIpCisKKyAgICBkZWYgdGVzdF90aHJlc2hvbGQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGhyZXNob2xkJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzEwMDAnXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRocmVzaG9sZCwgMTAwMCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9ub3dpbmRvd3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1uJywgJy0tbm93aW5kb3dzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLm5vd2luZG93cykKKworICAgIGRlZiB0ZXN0X2ZvcmV2ZXIoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1GJywgJy0tZm9yZXZlcic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mb3JldmVyKQorCisKKyAgICBkZWYgdGVzdF91bnJlY29nbml6ZWRfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0teHh4J10sICd1c2FnZTonKQorCisgICAgZGVmIHRlc3RfbG9uZ19vcHRpb25fX3BhcnRpYWwoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKworICAgIGRlZiB0ZXN0X3R3b19vcHRpb25zKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1xdWlldCcsICctLWV4Y2x1ZGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnF1aWV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5leGNsdWRlKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX3dpdGhfZW1wdHlfc3RyaW5nX3ZhbHVlKHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS1zdGFydCcsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5zdGFydCwgJycpCisKKyAgICBkZWYgdGVzdF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWydmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uX2FuZF9hcmcoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hcmdzLCBbJ2ZvbyddKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKaW5kZXggNTg5ZWNkZC4uYTUwNGJkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQpAQCAtMywxMSArMywxMSBAQAogICBOaWNrIE1hdGhld3NvbgogIiIiCiAKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY3JlYXRlX2VtcHR5X2ZpbGUsIHZlcmJvc2UKQEAgLTI0MSw3ICsyNDEsOCBAQAogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gMiAqIChsZW4oc2VsZi5sb25nbmFtZSkgKyAxKQogICAgICAgICAjIGEgcGF0aCBzZXBhcmF0b3IgKyBgbW9kdWxlX25hbWVgICsgIi5weSIKICAgICAgICAgc291cmNlX3BhdGhfbGVuICs9IGxlbihtb2R1bGVfbmFtZSkgKyAxICsgbGVuKCIucHkiKQotICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSBzb3VyY2VfcGF0aF9sZW4gKyBsZW4oaW1wLmNhY2hlX2Zyb21fc291cmNlKCJ4LnB5IikpIC0gbGVuKCJ4LnB5IikKKyAgICAgICAgY2FjaGVkX3BhdGhfbGVuID0gKHNvdXJjZV9wYXRoX2xlbiArCisgICAgICAgICAgICBsZW4oaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBjYWNoZWRfcGF0aF9sZW4gPj0gMjU4OgogICAgICAgICAgICAgIyBVbmRlciBXaW5kb3dzLCB0aGUgbWF4IHBhdGggbGVuIGlzIDI2MCBpbmNsdWRpbmcgQydzIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAjIE5VTCBjaGFyYWN0ZXIuCkBAIC0yNTIsNiArMjUzLDcgQEAKICAgICAgICAgICAgIHByaW50KCJjYWNoZWRfcGF0aF9sZW4gPSIsIGNhY2hlZF9wYXRoX2xlbikKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQogICAgICAgICBzZWxmLl9jaGVja19wYXRoX2xpbWl0YXRpb25zKHNlbGYucGtnbmFtZSkKICAgICAgICAgY3JlYXRlX2VtcHR5X2ZpbGUob3MucGF0aC5qb2luKHNlbGYuc3VicGtnbmFtZSwgc2VsZi5wa2duYW1lICsgJy5weScpKQogICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKaW5kZXggMGNmNjFjYi4uMDA2MTk4ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CkBAIC0xLDMgKzEsNiBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0aW1lCkBAIC02MSw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKC4xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGltaXRfc2V0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIGlmIGxpbWl0X3NldDoKQEAgLTEyOSw2ICsxMzIsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhZ2VzaXplLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhZ2VzaXplLCAwKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdsaW51eCcsICd0ZXN0IHJlcXVpcmVzIExpbnV4JykKKyAgICBkZWYgdGVzdF9saW51eF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnTVNHUVVFVUUnLCAnTklDRScsICdSVFBSSU8nLCAnUlRUSU1FJywgJ1NJR1BFTkRJTkcnXToKKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5zdXBwcmVzcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGdldGF0dHIocmVzb3VyY2UsICdSTElNSVRfJyArIGF0dHIpLCBpbnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlc291cmNlLCAncHJsaW1pdCcpLCAnbm8gcHJsaW1pdCcpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbGludXhfdmVyc2lvbigyLCA2LCAzNikKKyAgICBkZWYgdGVzdF9wcmxpbWl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJlc291cmNlLnBybGltaXQpCisgICAgICAgIGlmIG9zLmdldGV1aWQoKSAhPSAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yLCByZXNvdXJjZS5wcmxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgcmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9jZXNzTG9va3VwRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIGxpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNvdXJjZS5wcmxpbWl0KDAsIHJlc291cmNlLlJMSU1JVF9BUyksIGxpbWl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTLCBsaW1pdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQpCisKKwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJlc291cmNlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weSBiL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKaW5kZXggMmRkYmEzNC4uZjE5YzRhYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ydW5weS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgIl9fY2FjaGVkX18iOiBOb25lLAogICAgICJfX3BhY2thZ2VfXyI6IE5vbmUsCiAgICAgIl9fZG9jX18iOiBOb25lLAorIyAgICAiX19zcGVjX18iOiBOb25lLCAgIyBYWFggVW5jb21tZW50LgogfQogZXhhbXBsZV9uYW1lc3BhY2UgPSAgewogICAgICJzeXMiOiBzeXMsCkBAIC01Niw3ICs1Nyw3IEBACiAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIjogRmFsc2UsCiAgICAgIm1vZHVsZV9pbl9zeXNfbW9kdWxlcyI6IEZhbHNlLAogICAgICJuZXN0ZWQiOiBkaWN0KGltcGxpY2l0X25hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICAgICB4PTEsIF9fbmFtZV9fPSI8cnVuPiIsIF9fbG9hZGVyX189Tm9uZSksCisgICAgICAgICAgICAgICAgICAgeD0xLCBfX25hbWVfXz0iPHJ1bj4iLCBfX2xvYWRlcl9fPU5vbmUsIF9fc3BlY19fPU5vbmUpLAogfQogZXhhbXBsZV9uYW1lc3BhY2UudXBkYXRlKGltcGxpY2l0X25hbWVzcGFjZSkKIApAQCAtMjQzLDYgKzI0NCw3IEBACiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXSwKKyMgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lLCAgIyBYWFggTmVlZHMgdG8gYmUgc2V0LgogICAgICAgICB9KQogICAgICAgICBpZiBhbHRlcl9zeXM6CiAgICAgICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewpAQCAtMjc5LDYgKzI4MSw3IEBACiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IHBrZ19uYW1lLAorIyAgICAgICAgICAgICJfX3NwZWNfXyI6IE5vbmUsICAjIFhYWCBOZWVkcyB0byBiZSBzZXQuCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC01NzUsMTIgKzU3OCw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsncyddLCAibm9uLUFTQ0lJOiBoXHhlOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgICAgICAgRXhlY3V0aW9uTGF5ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuTW9kdWxlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0Q2FzZQotICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CmluZGV4IDA3MDg4NmQuLmM2YWJmM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQpAQCAtMTk3LDggKzE5Nyw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW10pCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RDYXNlKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5IGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQppbmRleCAyNmNlMDQyLi5iMzI1NTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKQEAgLTcxNSw2ICs3MTUsMTkgQEAKICAgICAgICAgZGVmIGIoKToKICAgICAgICAgICAgIGdsb2JhbCBhCiAKKyAgICBkZWYgdGVzdENsYXNzTmFtZXNwYWNlT3ZlcnJpZGVzQ2xvc3VyZShzZWxmKToKKyAgICAgICAgIyBTZWUgIzE3ODUzLgorICAgICAgICB4ID0gNDIKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgeSA9IHgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChYLnksIDQzKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgbG9jYWxzKClbIngiXSA9IDQzCisgICAgICAgICAgICBkZWwgeAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoWCwgIngiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCA0MikKKwogICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdENlbGxMZWFrKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3OTI3LgpAQCAtNzQzLDEwICs3NTYsNiBAQAogICAgICAgICBkZWwgdGVzdGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZigpKQogCi0gICAgZGVmIHRlc3RfX0NsYXNzX19HbG9iYWwoc2VsZik6Ci0gICAgICAgIHMgPSAiY2xhc3MgWDpcbiAgICBnbG9iYWwgX19jbGFzc19fXG4gICAgZGVmIGYoc2VsZik6IHN1cGVyKCkiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBleGVjLCBzKQotCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoU2NvcGVUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKaW5kZXggZGRiOWEwZi4uOGY5YTFjOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3QucHkKQEAgLTUsNyArNSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJywgJ3Jpc2NvcycpLAorQHVuaXR0ZXN0LnNraXBJZigoc3lzLnBsYXRmb3JtWzozXT09J3dpbicpLAogICAgICAgICAgICAgICAgICAiY2FuJ3QgZWFzaWx5IHRlc3Qgb24gdGhpcyBzeXN0ZW0iKQogY2xhc3MgU2VsZWN0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMiw3ICszMiw3IEBACiAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChbZmRdLCBbXSwgW10sIDApCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhjZXB0aW9uIG5vdCByYWlzZWQiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkgYi9MaWIvdGVzdC90ZXN0X3NlbGVjdG9ycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWU2N2IxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKQEAgLTAsMCArMSw0MzAgQEAKK2ltcG9ydCBlcnJubworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRpbWUgaW1wb3J0IHNsZWVwCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCit0cnk6CisgICAgZnJvbSB0aW1lIGltcG9ydCBtb25vdG9uaWMgYXMgdGltZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gdGltZSBpbXBvcnQgdGltZSBhcyB0aW1lCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKKworaWYgaGFzYXR0cihzb2NrZXQsICdzb2NrZXRwYWlyJyk6CisgICAgc29ja2V0cGFpciA9IHNvY2tldC5zb2NrZXRwYWlyCitlbHNlOgorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bykgYXMgbDoKKyAgICAgICAgICAgIGwuYmluZCgoc3VwcG9ydC5IT1NULCAwKSkKKyAgICAgICAgICAgIGwubGlzdGVuKDMpCisgICAgICAgICAgICBjID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGMuY29ubmVjdChsLmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAgICAgY2FkZHIgPSBjLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBhLCBhZGRyID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNsaWVudAorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyID09IGNhZGRyOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMsIGEKKyAgICAgICAgICAgICAgICAgICAgYS5jbG9zZSgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorCisKK2RlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKKyAgICBtYXRjaCA9IFtdCisgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlYWR5OgorICAgICAgICBpZiBldmVudHMgJiBmbGFnOgorICAgICAgICAgICAgbWF0Y2guYXBwZW5kKGtleS5maWxlb2JqKQorICAgIHJldHVybiBtYXRjaAorCisKK2NsYXNzIEJhc2VTZWxlY3RvclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa2V5LCBzZWxlY3RvcnMuU2VsZWN0b3JLZXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmZpbGVvYmosIHJkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5mZCwgcmQuZmlsZW5vKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmV2ZW50cywgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmRhdGEsICJkYXRhIikKKworICAgICAgICAjIHJlZ2lzdGVyIGFuIHVua25vd24gZXZlbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWdpc3RlciwgMCwgOTk5OTk5KQorCisgICAgICAgICMgcmVnaXN0ZXIgYW4gaW52YWxpZCBGRAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnJlZ2lzdGVyLCAtMTAsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgcmVnaXN0ZXIgdHdpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIHJlZ2lzdGVyIHRoZSBzYW1lIEZELCBidXQgd2l0aCBhIGRpZmZlcmVudCBvYmplY3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMucmVnaXN0ZXIsIHJkLmZpbGVubygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIGFuIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMudW5yZWdpc3RlciwgOTk5OTk5KQorCisgICAgICAgICMgdW5yZWdpc3RlciB0d2ljZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy51bnJlZ2lzdGVyLCByZCkKKworICAgIGRlZiB0ZXN0X21vZGlmeShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyBtb2RpZnkgZXZlbnRzCisgICAgICAgIGtleTIgPSBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5ldmVudHMsIGtleTIuZXZlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIsIHMuZ2V0X2tleShyZCkpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorCisgICAgICAgICMgbW9kaWZ5IGRhdGEKKyAgICAgICAgZDEgPSBvYmplY3QoKQorICAgICAgICBkMiA9IG9iamVjdCgpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQxKQorICAgICAgICBrZXkyID0gcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZXZlbnRzLCBrZXkyLmV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuZGF0YSwga2V5Mi5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIsIHMuZ2V0X2tleShyZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5Mi5kYXRhLCBkMikKKworICAgICAgICAjIG1vZGlmeSB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLm1vZGlmeSwgOTk5OTk5LCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIG1vZGlmeSB1c2UgYSBzaG9ydGN1dAorICAgICAgICBkMyA9IG9iamVjdCgpCisgICAgICAgIHMucmVnaXN0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorICAgICAgICBzLnVucmVnaXN0ZXIgPSB1bml0dGVzdC5tb2NrLk1vY2soKQorCisgICAgICAgIHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHMuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9nZXRfa2V5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgcy5nZXRfa2V5KHJkKSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgOTk5OTk5KQorCisgICAgZGVmIHRlc3RfZ2V0X21hcChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAga2V5cyA9IHMuZ2V0X21hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW10pCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmQsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCBrZXlzW3JkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW3JkLmZpbGVubygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGtleXMudmFsdWVzKCkpLCBba2V5XSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBrZXlzWzk5OTk5OV0KKworICAgICAgICAjIFJlYWQtb25seSBtYXBwaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBrZXlzW3JkXQorCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgd3Jfa2V5ID0gcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHJlc3VsdCA9IHMuc2VsZWN0KCkKKyAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2ZW50cyAmIH4oc2VsZWN0b3JzLkVWRU5UX1JFQUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKHdyX2tleSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0sIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJkLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgd2l0aCBzIGFzIHNlbDoKKyAgICAgICAgICAgIHNlbC5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzZWwucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgaWYgaGFzYXR0cihzLCAnZmlsZW5vJyk6CisgICAgICAgICAgICBmZCA9IHMuZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZkLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZmQsIDApCisKKyAgICBkZWYgdGVzdF9zZWxlY3RvcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBOVU1fU09DS0VUUyA9IDEyCisgICAgICAgIE1TRyA9IGIiIFRoaXMgaXMgYSB0ZXN0LiIKKyAgICAgICAgTVNHX0xFTiA9IGxlbihNU0cpCisgICAgICAgIHJlYWRlcnMgPSBbXQorICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgcjJ3ID0ge30KKyAgICAgICAgdzJyID0ge30KKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fU09DS0VUUyk6CisgICAgICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKyAgICAgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICAgICAgcmVhZGVycy5hcHBlbmQocmQpCisgICAgICAgICAgICB3cml0ZXJzLmFwcGVuZCh3cikKKyAgICAgICAgICAgIHIyd1tyZF0gPSB3cgorICAgICAgICAgICAgdzJyW3dyXSA9IHJkCisKKyAgICAgICAgYnVmcyA9IFtdCisKKyAgICAgICAgd2hpbGUgd3JpdGVyczoKKyAgICAgICAgICAgIHJlYWR5ID0gcy5zZWxlY3QoKQorICAgICAgICAgICAgcmVhZHlfd3JpdGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIGlmIG5vdCByZWFkeV93cml0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gc29ja2V0cyByZWFkeSBmb3Igd3JpdGluZyIpCisgICAgICAgICAgICB3ciA9IHJhbmRvbS5jaG9pY2UocmVhZHlfd3JpdGVycykKKyAgICAgICAgICAgIHdyLnNlbmQoTVNHKQorCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgcmVhZHkgPSBzLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgcmVhZHlfcmVhZGVycyA9IGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICAgICAgaWYgcmVhZHlfcmVhZGVyczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIHRoZXJlIG1pZ2h0IGJlIGEgZGVsYXkgYmV0d2VlbiB0aGUgd3JpdGUgdG8gdGhlIHdyaXRlIGVuZCBhbmQKKyAgICAgICAgICAgICAgICAjIHRoZSByZWFkIGVuZCBpcyByZXBvcnRlZCByZWFkeQorICAgICAgICAgICAgICAgIHNsZWVwKDAuMSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJubyBzb2NrZXRzIHJlYWR5IGZvciByZWFkaW5nIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW3cyclt3cl1dLCByZWFkeV9yZWFkZXJzKQorICAgICAgICAgICAgcmQgPSByZWFkeV9yZWFkZXJzWzBdCisgICAgICAgICAgICBidWYgPSByZC5yZWN2KE1TR19MRU4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCBNU0dfTEVOKQorICAgICAgICAgICAgYnVmcy5hcHBlbmQoYnVmKQorICAgICAgICAgICAgcy51bnJlZ2lzdGVyKHIyd1tyZF0pCisgICAgICAgICAgICBzLnVucmVnaXN0ZXIocmQpCisgICAgICAgICAgICB3cml0ZXJzLnJlbW92ZShyMndbcmRdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fU09DS0VUUykKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorCisgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzLnNlbGVjdCgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KC0xKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyh0aW1lKCkgLSB0LCAwLjUpCisKKyAgICAgICAgcy51bnJlZ2lzdGVyKHdyKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDApKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICB0MCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDEpKQorICAgICAgICB0MSA9IHRpbWUoKQorICAgICAgICBkdCA9IHQxIC0gdDAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuOCA8PSBkdCA8PSAxLjYsIGR0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICJhbGFybSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduYWwuYWxhcm0oKSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9zZWxlY3RfaW50ZXJydXB0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh3ci5jbG9zZSkKKworICAgICAgICBvcmlnX2Fscm1faGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGxhbWJkYSAqYXJnczogTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5zaWduYWwsIHNpZ25hbC5TSUdBTFJNLCBvcmlnX2Fscm1faGFuZGxlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNpZ25hbC5hbGFybSwgMCkKKworICAgICAgICBzaWduYWwuYWxhcm0oMSkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgdCA9IHRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc2VsZWN0KDIpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMi41KQorCisKK2NsYXNzIFNjYWxhYmxlU2VsZWN0b3JNaXhJbjoKKworICAgICMgc2VlIGlzc3VlICMxODk2MyBmb3Igd2h5IGl0J3Mgc2tpcHBlZCBvbiBvbGRlciBPUyBYIHZlcnNpb25zCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyZXNvdXJjZSwgIlRlc3QgbmVlZHMgcmVzb3VyY2UgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hYm92ZV9mZF9zZXRzaXplKHNlbGYpOgorICAgICAgICAjIEEgc2NhbGFibGUgaW1wbGVtZW50YXRpb24gc2hvdWxkIGhhdmUgbm8gcHJvYmxlbSB3aXRoIG1vcmUgdGhhbgorICAgICAgICAjIEZEX1NFVFNJWkUgZmlsZSBkZXNjcmlwdG9ycy4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgdmFsdWUsIHdlIGp1c3QKKyAgICAgICAgIyB0cnkgdG8gc2V0IHRoZSBzb2Z0IFJMSU1JVF9OT0ZJTEUgdG8gdGhlIGhhcmQgUkxJTUlUX05PRklMRSBjZWlsaW5nLgorICAgICAgICBzb2Z0LCBoYXJkID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9OT0ZJTEUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAoaGFyZCwgaGFyZCkpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzb3VyY2Uuc2V0cmxpbWl0LCByZXNvdXJjZS5STElNSVRfTk9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2Z0LCBoYXJkKSkKKyAgICAgICAgICAgIE5VTV9GRFMgPSBoYXJkCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICBOVU1fRkRTID0gc29mdAorCisgICAgICAgICMgZ3VhcmQgZm9yIGFscmVhZHkgYWxsb2NhdGVkIEZEcyAoc3RkaW4sIHN0ZG91dC4uLikKKyAgICAgICAgTlVNX0ZEUyAtPSAzMgorCisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlVNX0ZEUyAvLyAyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZCwgd3IgPSBzb2NrZXRwYWlyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgRkRzLCBza2lwIC0gbm90ZSB0aGF0IHdlIHNob3VsZCBvbmx5IGNhdGNoIEVNRklMRQorICAgICAgICAgICAgICAgICMgaGVyZSwgYnV0IGFwcGFyZW50bHkgKkJTRCBhbmQgU29sYXJpcyBjYW4gZmFpbCB1cG9uIGNvbm5lY3QoKQorICAgICAgICAgICAgICAgICMgb3IgYmluZCgpIHdpdGggRUFERFJOT1RBVkFJTCwgc28gbGV0J3MgYmUgc2FmZQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkZEIGxpbWl0IHJlYWNoZWQiKQorCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAocmQuY2xvc2UpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAod3IuY2xvc2UpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1BDOgorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgY2FuIGJlIHJhaXNlZCBieSBlcG9sbCBpZiB3ZSBnbyBvdmVyCisgICAgICAgICAgICAgICAgICAgICMgZnMuZXBvbGwubWF4X3VzZXJfd2F0Y2hlcyBzeXNjdGwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRkQgbGltaXQgcmVhY2hlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5VTV9GRFMgLy8gMiwgbGVuKHMuc2VsZWN0KCkpKQorCisKK2NsYXNzIERlZmF1bHRTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlKToKKworICAgIFNFTEVDVE9SID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcgorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UpOgorCisgICAgU0VMRUNUT1IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCitjbGFzcyBQb2xsU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IiKQorY2xhc3MgRXBvbGxTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnS3F1ZXVlU2VsZWN0b3InKSwKKyAgICAgICAgICAgICAgICAgICAgICJUZXN0IG5lZWRzIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcikiKQorY2xhc3MgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicsIE5vbmUpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW0RlZmF1bHRTZWxlY3RvclRlc3RDYXNlLCBTZWxlY3RTZWxlY3RvclRlc3RDYXNlLAorICAgICAgICAgICAgIFBvbGxTZWxlY3RvclRlc3RDYXNlLCBFcG9sbFNlbGVjdG9yVGVzdENhc2UsCisgICAgICAgICAgICAgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZV0KKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CmluZGV4IGMwYmNhMmYuLmJmZWY2MjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC04NDgsOCArODQ4LDYgQEAKICAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQogICAgICAgICBzZXRpdGVyID0gaXRlcihzZWxmLnNldCkKLSAgICAgICAgIyBub3RlOiBfX2xlbmd0aF9oaW50X18gaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0aXRlci5fX2xlbmd0aF9oaW50X18oKSwgbGVuKHNlbGYuc2V0KSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQppbmRleCAxM2MxMjY1Li5iZDUxZDg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NoZWx2ZS5weQpAQCAtMTQ4LDYgKzE0OCwxOSBAQAogICAgICAgICBwMiA9IGRbZW5jb2RlZGtleV0KICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwMSwgcDIpICAjIFdyaXRlIGNyZWF0ZXMgbmV3IG9iamVjdCBpbiBzdG9yZQogCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgZDEgPSB7fQorICAgICAgICB3aXRoIHNoZWx2ZS5TaGVsZihkMSwgcHJvdG9jb2w9Miwgd3JpdGViYWNrPUZhbHNlKSBhcyBzOgorICAgICAgICAgICAgc1sna2V5MSddID0gWzEsMiwzLDRdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbJ2tleTEnXSwgWzEsMiwzLDRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxlbiwgcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc1sna2V5MSddCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdDbG9zZWQgc2hlbGYgc2hvdWxkIG5vdCBmaW5kIGEga2V5JykKIAogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKaW5kZXggZGY5NWJkOS4uZGViMTU3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKQEAgLTE4LDcgKzE4LDggQEAKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIGdldF9hcmNoaXZlX2Zvcm1hdHMsIEVycm9yLCB1bnBhY2tfYXJjaGl2ZSwKICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgUmVnaXN0cnlFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBnZXRfdW5wYWNrX2Zvcm1hdHMpCisgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgZ2V0X3VucGFja19mb3JtYXRzLAorICAgICAgICAgICAgICAgICAgICBTYW1lRmlsZUVycm9yKQogaW1wb3J0IHRhcmZpbGUKIGltcG9ydCB3YXJuaW5ncwogCkBAIC03NDIsMTQgKzc0MywxNCBAQAogICAgICAgICBvcy5jaG1vZChyZXN0cmljdGl2ZV9zdWJkaXIsIDBvNjAwKQogCiAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KHNyY19kaXIpLnN0X21vZGUsIG9zLnN0YXQoZHN0X2Rpcikuc3RfbW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzcmNfZGlyKS5zdF9tb2RlLCBvcy5zdGF0KGRzdF9kaXIpLnN0X21vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdwZXJtaXNzaXZlLnR4dCcpKS5zdF9tb2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Jlc3RyaWN0aXZlLnR4dCcpKS5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncmVzdHJpY3RpdmUudHh0JykpLnN0X21vZGUpCiAgICAgICAgIHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QgPSBvcy5wYXRoLmpvaW4oZHN0X2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLnNwbGl0KHJlc3RyaWN0aXZlX3N1YmRpcilbMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHJlc3RyaWN0aXZlX3N1YmRpcl9kc3QpLnN0X21vZGUpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnbGluaycpLCAncmVxdWlyZXMgb3MubGluaycpCkBAIC03NjUsNyArNzY2LDcgQEAKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQpAQCAtNzg1LDcgKzc4Niw3IEBACiAgICAgICAgICAgICAjIHRvIFRFU1RGTi9URVNURk4vY2hlZXNlLCB3aGlsZSBpdCBzaG91bGQgcG9pbnQgYXQKICAgICAgICAgICAgICMgVEVTVEZOL2NoZWVzZS4KICAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2NoZWVzZScsIGRzdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5TYW1lRmlsZUVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQogICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCkBAIC0xMjkzLDYgKzEyOTQsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJ2KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkX2ZpbGUoc3JjX2ZpbGUpLCByZWFkX2ZpbGUoZHN0X2ZpbGUpKQogCisgICAgZGVmIHRlc3RfY29weWZpbGVfc2FtZV9maWxlKHNlbGYpOgorICAgICAgICAjIGNvcHlmaWxlKCkgc2hvdWxkIHJhaXNlIFNhbWVGaWxlRXJyb3IgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24KKyAgICAgICAgIyBhcmUgdGhlIHNhbWUuCisgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzcmNfZmlsZSA9IG9zLnBhdGguam9pbihzcmNfZGlyLCAnZm9vJykKKyAgICAgICAgd3JpdGVfZmlsZShzcmNfZmlsZSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorICAgICAgICAjIEJ1dCBFcnJvciBzaG91bGQgd29yayB0b28sIHRvIHN0YXkgYmFja3dhcmQgY29tcGF0aWJsZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjX2ZpbGUsIHNyY19maWxlKQorCiAgICAgZGVmIHRlc3RfY29weXRyZWVfcmV0dXJuX3ZhbHVlKHNlbGYpOgogICAgICAgICAjIGNvcHl0cmVlIHJldHVybnMgaXRzIGRlc3RpbmF0aW9uIHBhdGguCiAgICAgICAgIHNyY19kaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtMTU4OCw3ICsxNTk5LDcgQEAKICAgICAgICAgICAgIHNlbGYuX2V4aXRlZF93aXRoID0gZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190YgogICAgICAgICAgICAgaWYgc2VsZi5fcmFpc2VfaW5fZXhpdDoKICAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2Fubm90IGNsb3NlIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJDYW5ub3QgY2xvc2UiKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N1cHByZXNzX2F0X2V4aXQKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTE2MDIsMTIgKzE2MTMsMTIgQEAKICAgICBkZWYgdGVzdF93X3NvdXJjZV9vcGVuX2ZhaWxzKHNlbGYpOgogICAgICAgICBkZWYgX29wZW4oZmlsZW5hbWUsIG1vZGU9J3InKToKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAic3JjZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCiAgICAgICAgICAgICBhc3NlcnQgMCAgIyBzaG91bGRuJ3QgcmVhY2ggaGVyZS4KIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogCiAgICAgZGVmIHRlc3Rfd19kZXN0X29wZW5fZmFpbHMoc2VsZik6CiAKQEAgLTE2MTcsMTQgKzE2MjgsMTQgQEAKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09ICdzcmNmaWxlJzoKICAgICAgICAgICAgICAgICByZXR1cm4gc3JjZmlsZQogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ2Rlc3RmaWxlJzoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAogICAgICAgICBzaHV0aWwuY29weWZpbGUoJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3Qgb3BlbiAiZGVzdGZpbGUiJywpKQogCkBAIC0xNjQ2LDcgKzE2NTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX3JhaXNlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIElPRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9leGl0ZWRfd2l0aFswXSBpcyBPU0Vycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzFdLmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdDYW5ub3QgY2xvc2UnLCkpCiAKQEAgLTE2NjQsNyArMTY3NSw3IEBACiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSwgJ3NyY2ZpbGUnLCAnZGVzdGZpbGUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZW50ZXJlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlc3RmaWxlLl9lbnRlcmVkKQpAQCAtMTczNSw5ICsxNzQ2LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U2h1dGlsLCBUZXN0TW92ZSwgVGVzdENvcHlGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zaXplVGVzdHMsIFRlc3RXaGljaCkKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQppbmRleCA5YjRiYTUwLi4zNTMwZDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpZ25hbC5weQpAQCAtMTUsOSArMTUsNiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAotaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyJywgJ3Jpc2NvcycpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDYW4ndCB0ZXN0IHNpZ25hbCBvbiAlcyIgJSBzeXMucGxhdGZvcm0pCi0KIAogY2xhc3MgSGFuZGxlckJDYWxsZWQoRXhjZXB0aW9uKToKICAgICBwYXNzCkBAIC0zNiw3ICszMyw3IEBACiBkZWYgaWdub3JpbmdfZWludHIoX19mdW5jLCAqYXJncywgKiprd2FyZ3MpOgogICAgIHRyeToKICAgICAgICAgcmV0dXJuIF9fZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVJTlRSOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTI3OCw2ICsyNzUsNTcgQEAKIAogICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAKKyAgICBkZWYgdGVzdF93YWtldXBfd3JpdGVfZXJyb3Ioc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MTA1OiB3cml0ZSgpIGVycm9ycyBpbiB0aGUgQyBzaWduYWwgaGFuZGxlciBzaG91bGQgbm90CisgICAgICAgICMgcGFzcyBzaWxlbnRseS4KKyAgICAgICAgIyBVc2UgYSBzdWJwcm9jZXNzIHRvIGhhdmUgb25seSBvbmUgdGhyZWFkLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIGltcG9ydCBmY250bAorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgaW1wb3J0IHNpZ25hbAorICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRlcnIKKworICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIGhhbmRsZXIpCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmxhZ3MgPSBmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMLCAwKQorICAgICAgICBmY250bC5mY250bChyLCBmY250bC5GX1NFVEZMLCBmbGFncyB8IG9zLk9fTk9OQkxPQ0spCisKKyAgICAgICAgIyBTZXQgd2FrZXVwX2ZkIGEgcmVhZC1vbmx5IGZpbGUgZGVzY3JpcHRvciB0byB0cmlnZ2VyIHRoZSBlcnJvcgorICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGVycjoKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDUuMCkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgIyBBbiBpZ25vcmVkIGV4Y2VwdGlvbiBzaG91bGQgaGF2ZSBiZWVuIHByaW50ZWQgb3V0IG9uIHN0ZGVycgorICAgICAgICAgICAgZXJyID0gZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGlmICgnRXhjZXB0aW9uIGlnbm9yZWQgd2hlbiB0cnlpbmcgdG8gd3JpdGUgdG8gdGhlIHNpZ25hbCB3YWtldXAgZmQnCisgICAgICAgICAgICAgICAgbm90IGluIGVycik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXJyKQorICAgICAgICAgICAgaWYgKCdPU0Vycm9yOiBbRXJybm8gJWRdJyAlIGVycm5vLkVCQURGKSBub3QgaW4gZXJyOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJaZXJvRGl2aXNpb25FcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgIiIiCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Mud3JpdGUociwgYid4JykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJPUyBkb2Vzbid0IHJlcG9ydCB3cml0ZSgpIGVycm9yIG9uIHRoZSByZWFkIGVuZCBvZiBhIHBpcGUiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQorCiAgICAgZGVmIHRlc3Rfd2FrZXVwX2ZkX2Vhcmx5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3dha2V1cCgiIiJkZWYgdGVzdCgpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtMzE1LDEwICszNjMsMTAgQEAKICAgICAgICAgICAgICMgV2UgYXR0ZW1wdCB0byBnZXQgYSBzaWduYWwgZHVyaW5nIHRoZSBzZWxlY3QgY2FsbAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW3JlYWRdLCBbXSwgW10sIFRJTUVPVVRfRlVMTCkKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigic2VsZWN0LmVycm9yIG5vdCByYWlzZWQiKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT1NFcnJvciBub3QgcmFpc2VkIikKICAgICAgICAgICAgIGFmdGVyX3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgZHQgPSBhZnRlcl90aW1lIC0gYmVmb3JlX3RpbWUKICAgICAgICAgICAgIGlmIGR0ID49IFRJTUVPVVRfSEFMRjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQppbmRleCBjMjk0YzY1Li5jYjdjMzkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CkBAIC0yMzEsMTEgKzIzMSw3IEBACiAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ3hveG8nXQogICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQogCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMmVteCcsICdyaXNjb3MnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcnMpLCAxKQotICAgICAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKCd4b3hvJywgJ0xpYicsICdzaXRlLXBhY2thZ2VzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1swXSwgd2FudGVkKQotICAgICAgICBlbGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0gPT0gImRhcndpbiIgYW5kCiAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIlBZVEhPTkZSQU1FV09SSyIpKToKICAgICAgICAgICAgICMgT1MgWCBmcmFtZXdvcmsgYnVpbGRzCiAgICAgICAgICAgICBzaXRlLlBSRUZJWEVTID0gWydQeXRob24uZnJhbWV3b3JrJ10KQEAgLTQzMiw1ICs0MjgsMzggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLCAyMDAsIG1zZz0iQ2FuJ3QgZmluZCAiICsgdXJsKQogCiAKK2NsYXNzIFN0YXJ0dXBJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFydHVwX2ltcG9ydHMoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyBjaGVja3Mgd2hpY2ggbW9kdWxlcyBhcmUgbG9hZGVkIGJ5IFB5dGhvbiB3aGVuIGl0CisgICAgICAgICMgaW5pdGlhbGx5IHN0YXJ0cyB1cG9uIHN0YXJ0dXAuCisgICAgICAgIHBvcGVuID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctSScsICctdicsICctYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KHNldChzeXMubW9kdWxlcykpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RkZXJyID0gc3RkZXJyLmRlY29kZSgndXRmLTgnKQorICAgICAgICBtb2R1bGVzID0gZXZhbChzdGRvdXQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc2l0ZScsIG1vZHVsZXMpCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMDUKKyAgICAgICAgcmVfbW9kcyA9IHsncmUnLCAnX3NyZScsICdzcmVfY29tcGlsZScsICdzcmVfY29uc3RhbnRzJywgJ3NyZV9wYXJzZSd9CisgICAgICAgICMgX29zeF9zdXBwb3J0IHVzZXMgdGhlIHJlIG1vZHVsZSBpbiBtYW55IHBsYWNzCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobW9kdWxlcy5pbnRlcnNlY3Rpb24ocmVfbW9kcyksIHN0ZGVycikKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTU0OAorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdsb2NhbGUnLCBtb2R1bGVzLCBzdGRlcnIpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjA5CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjb3B5cmVnJywgbW9kdWxlcywgc3RkZXJyKQorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIxOD4KKyAgICAgICAgY29sbGVjdGlvbl9tb2RzID0geydfY29sbGVjdGlvbnMnLCAnY29sbGVjdGlvbnMnLCAnZnVuY3Rvb2xzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFwcScsICdpdGVydG9vbHMnLCAna2V5d29yZCcsICdvcGVyYXRvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwcmxpYicsICd0eXBlcycsICd3ZWFrcmVmJ30KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihjb2xsZWN0aW9uX21vZHMpLCBzdGRlcnIpCisKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CmluZGV4IDJkZjkyNzEuLjkyMDNkNWUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQpAQCAtNCw4ICs0LDcwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gcGlja2xlIGltcG9ydCBsb2FkcywgZHVtcHMKIAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiAKKworZGVmIGV2YWx1YXRlX3NsaWNlX2luZGV4KGFyZyk6CisgICAgIiIiCisgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhbiBpbnRlZ2VyLCBhbmQgcmFpc2UKKyAgICBUeXBlRXJyb3Igd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICIiIgorICAgIGlmIGhhc2F0dHIoYXJnLCAnX19pbmRleF9fJyk6CisgICAgICAgIHJldHVybiBvcGVyYXRvci5pbmRleChhcmcpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCisgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKQorCitkZWYgc2xpY2VfaW5kaWNlcyhzbGljZSwgbGVuZ3RoKToKKyAgICAiIiIKKyAgICBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzbGljZS5pbmRpY2VzIG1ldGhvZC4KKworICAgICIiIgorICAgICMgQ29tcHV0ZSBzdGVwIGFuZCBsZW5ndGggYXMgaW50ZWdlcnMuCisgICAgbGVuZ3RoID0gb3BlcmF0b3IuaW5kZXgobGVuZ3RoKQorICAgIHN0ZXAgPSAxIGlmIHNsaWNlLnN0ZXAgaXMgTm9uZSBlbHNlIGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0ZXApCisKKyAgICAjIFJhaXNlIFZhbHVlRXJyb3IgZm9yIG5lZ2F0aXZlIGxlbmd0aCBvciB6ZXJvIHN0ZXAuCisgICAgaWYgbGVuZ3RoIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibGVuZ3RoIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKQorICAgIGlmIHN0ZXAgPT0gMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpCisKKyAgICAjIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuCisgICAgbG93ZXIgPSAtMSBpZiBzdGVwIDwgMCBlbHNlIDAKKyAgICB1cHBlciA9IGxlbmd0aCAtIDEgaWYgc3RlcCA8IDAgZWxzZSBsZW5ndGgKKworICAgICMgQ29tcHV0ZSBzdGFydC4KKyAgICBpZiBzbGljZS5zdGFydCBpcyBOb25lOgorICAgICAgICBzdGFydCA9IHVwcGVyIGlmIHN0ZXAgPCAwIGVsc2UgbG93ZXIKKyAgICBlbHNlOgorICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0YXJ0KQorICAgICAgICBzdGFydCA9IG1heChzdGFydCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0YXJ0IDwgMCBlbHNlIG1pbihzdGFydCwgdXBwZXIpCisKKyAgICAjIENvbXB1dGUgc3RvcC4KKyAgICBpZiBzbGljZS5zdG9wIGlzIE5vbmU6CisgICAgICAgIHN0b3AgPSBsb3dlciBpZiBzdGVwIDwgMCBlbHNlIHVwcGVyCisgICAgZWxzZToKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0b3ApCisgICAgICAgIHN0b3AgPSBtYXgoc3RvcCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0b3AgPCAwIGVsc2UgbWluKHN0b3AsIHVwcGVyKQorCisgICAgcmV0dXJuIHN0YXJ0LCBzdG9wLCBzdGVwCisKKworIyBDbGFzcyBwcm92aWRpbmcgYW4gX19pbmRleF9fIG1ldGhvZC4gIFVzZWQgZm9yIHRlc3Rpbmcgc2xpY2UuaW5kaWNlcy4KKworY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKwogY2xhc3MgU2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgpAQCAtNzUsNiArMTM3LDIyIEBACiAgICAgICAgIHMgPSBzbGljZShvYmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0b3AgaXMgb2JqKQogCisgICAgZGVmIGNoZWNrX2luZGljZXMoc2VsZiwgc2xpY2UsIGxlbmd0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHNsaWNlLmluZGljZXMobGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGFjdHVhbCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBlY3RlZCA9IHNsaWNlX2luZGljZXMoc2xpY2UsIGxlbmd0aCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICAgICAgaWYgbGVuZ3RoID49IDAgYW5kIHNsaWNlLnN0ZXAgIT0gMDoKKyAgICAgICAgICAgIGFjdHVhbCA9IHJhbmdlKCpzbGljZS5pbmRpY2VzKGxlbmd0aCkpCisgICAgICAgICAgICBleHBlY3RlZCA9IHJhbmdlKGxlbmd0aClbc2xpY2VdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9pbmRpY2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUgICAgICAgICAgICkuaW5kaWNlcygxMCksICgwLCAxMCwgIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAgMikuaW5kaWNlcygxMCksICgwLCAxMCwgIDIpKQpAQCAtMTA4LDcgKzE4Niw0MSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMCkpWzo6c3lzLm1heHNpemUgLSAxXSwgWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNsaWNlKE5vbmUpLmluZGljZXMsIDE8PDEwMCkKKyAgICAgICAgIyBDaGVjayBhIHZhcmlldHkgb2Ygc3RhcnQsIHN0b3AsIHN0ZXAgYW5kIGxlbmd0aCB2YWx1ZXMsIGluY2x1ZGluZworICAgICAgICAjIHZhbHVlcyBleGNlZWRpbmcgc3lzLm1heHNpemUgKHNlZSBpc3N1ZSAjMTQ3OTQpLgorICAgICAgICB2YWxzID0gW05vbmUsIC0yKioxMDAsIC0yKiozMCwgLTUzLCAtNywgLTEsIDAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBsZW5ndGhzID0gWzAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBmb3Igc2xpY2VfYXJncyBpbiBpdGVydG9vbHMucHJvZHVjdCh2YWxzLCByZXBlYXQ9Myk6CisgICAgICAgICAgICBzID0gc2xpY2UoKnNsaWNlX2FyZ3MpCisgICAgICAgICAgICBmb3IgbGVuZ3RoIGluIGxlbmd0aHM6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHMsIGxlbmd0aCkKKyAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHNsaWNlKDAsIDEwLCAxKSwgLTMpCisKKyAgICAgICAgIyBOZWdhdGl2ZSBsZW5ndGggc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKE5vbmUpLmluZGljZXMoLTEpCisKKyAgICAgICAgIyBaZXJvIHN0ZXAgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAwKS5pbmRpY2VzKDUpCisKKyAgICAgICAgIyBVc2luZyBhIHN0YXJ0LCBzdG9wIG9yIHN0ZXAgb3IgbGVuZ3RoIHRoYXQgY2FuJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4KKyAgICAgICAgIyBpbnRlZ2VyIHNob3VsZCBnaXZlIGEgVHlwZUVycm9yIC4uLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLjAsIDEwLCAxKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLjAsIDEpLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDEuMCkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyg1LjApCisKKyAgICAgICAgIyAuLi4gYnV0IGl0IHNob3VsZCBiZSBmaW5lIHRvIHVzZSBhIGN1c3RvbSBjbGFzcyB0aGF0IHByb3ZpZGVzIGluZGV4LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTXlJbmRleGFibGUoMCksIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgTXlJbmRleGFibGUoMTApLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIE15SW5kZXhhYmxlKDEpKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoTXlJbmRleGFibGUoNSkpLCAoMCwgNSwgMSkpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZV93aXRob3V0X2dldHNsaWNlKHNlbGYpOgogICAgICAgICB0bXAgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CmluZGV4IDhkMWRiYmYuLmU2ZjM5ZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvdXJjZV9hZGRyZXNzLCAoJzEyNy4wLjAuMScsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvY2FsX2hvc3RuYW1lLCAnbG9jYWxob3N0JykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNTI0LDEyICs1MjQsNiBAQAogCiBjbGFzcyBOb25Db25uZWN0aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzbXRwbGliLnNvY2tldCA9IG1vY2tfc29ja2V0Ci0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNtdHBsaWIuc29ja2V0ID0gc29ja2V0Ci0KICAgICBkZWYgdGVzdE5vdENvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBUZXN0IHZhcmlvdXMgb3BlcmF0aW9ucyBvbiBhbiB1bmNvbm5lY3RlZCBTTVRQIG9iamVjdCB0aGF0CiAgICAgICAgICMgc2hvdWxkIHJhaXNlIGV4Y2VwdGlvbnMgKGF0IHByZXNlbnQgdGhlIGF0dGVtcHQgaW4gU01UUC5zZW5kCkBAIC01NDEsMTAgKzUzNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLnNlbmQsICd0ZXN0IG1zZycpCiAKICAgICBkZWYgdGVzdE5vbm51bWVyaWNQb3J0KHNlbGYpOgotICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgc29ja2V0LmVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tbnVtZXJpYyBwb3J0IHJhaXNlcyBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdCIsICJib2d1cyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdDpib2d1cyIpCiAKIApAQCAtODI1LDYgKzgxOSwxNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9jcmVkZW50aWFsc1snY3JhbS1tZDUnXSwgc3RyKGVycikpCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCisgICAgZGVmIHRlc3RBVVRIX211bHRpcGxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSB0cmllZC4KKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIEJPR1VTIFBMQUlOIExPR0lOIENSQU0tTUQ1IikKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorICAgICAgICB0cnk6IHNtdHAubG9naW4oc2ltX2F1dGhbMF0sIHNpbV9hdXRoWzFdKQorICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQQXV0aGVudGljYXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkLCBzdHIoZXJyKSkKKyAgICAgICAgc210cC5jbG9zZSgpCisKICAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKICAgICAgICAgd2l0aCBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0KSBhcyBzbXRwOgogICAgICAgICAgICAgY29kZSwgbWVzc2FnZSA9IHNtdHAubm9vcCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKaW5kZXggODYyMjRlZi4uNTY5NTJhZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQpAQCAtMywyMyArMywzNSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBzbXRwbGliCitpbXBvcnQgc29ja2V0CiAKIHNzbCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic3NsIikKIAogc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCiAKK2RlZiBjaGVja19zc2xfdmVyaWZpeShob3N0LCBwb3J0KToKKyAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSkgYXMgc29jazoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jayA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX2hvc3RuYW1lPWhvc3QpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKwogCiBjbGFzcyBTbXRwVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdGVzdFNlcnZlciA9ICdzbXRwLmdtYWlsLmNvbScKICAgICByZW1vdGVQb3J0ID0gMjUKLSAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKIAogICAgIGRlZiB0ZXN0X2Nvbm5lY3Rfc3RhcnR0bHMoc2VsZik6CiAgICAgICAgIHN1cHBvcnQuZ2V0X2F0dHJpYnV0ZShzbXRwbGliLCAnU01UUF9TU0wnKQorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgogICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0KQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlcnZlci5zdGFydHRscyhjb250ZXh0PXNlbGYuY29udGV4dCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuc3RhcnR0bHMoY29udGV4dD1jb250ZXh0KQogICAgICAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSAnU1RBUlRUTFMgZXh0ZW5zaW9uIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyLic6CiAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LnNraXAoZS5hcmdzWzBdKQpAQCAtMzIsNyArNDQsNyBAQAogY2xhc3MgU210cFNTTFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHRlc3RTZXJ2ZXIgPSAnc210cC5nbWFpbC5jb20nCiAgICAgcmVtb3RlUG9ydCA9IDQ2NQotICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgIGNhbl92ZXJpZnkgPSBjaGVja19zc2xfdmVyaWZpeSh0ZXN0U2VydmVyLCByZW1vdGVQb3J0KQogCiAgICAgZGVmIHRlc3RfY29ubmVjdChzZWxmKToKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCkBAIC00OSw5ICs2MSwxOSBAQAogICAgICAgICAgICAgc2VydmVyLnF1aXQoKQogCiAgICAgZGVmIHRlc3RfY29ubmVjdF91c2luZ19zc2xjb250ZXh0KHNlbGYpOgorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKLSAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQsIGNvbnRleHQ9c2VsZi5jb250ZXh0KQorICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCwgY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgc2VydmVyLmVobG8oKQorICAgICAgICAgICAgc2VydmVyLnF1aXQoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoY2FuX3ZlcmlmeSwgIlNTTCBjZXJ0aWZpY2F0ZSBjYW4ndCBiZSB2ZXJpZmllZCIpCisgICAgZGVmIHRlc3RfY29ubmVjdF91c2luZ19zc2xjb250ZXh0X3ZlcmlmaWVkKHNlbGYpOgorICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKKyAgICAgICAgY29udGV4dCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgorICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCwgY29udGV4dD1jb250ZXh0KQogICAgICAgICAgICAgc2VydmVyLmVobG8oKQogICAgICAgICAgICAgc2VydmVyLnF1aXQoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weSBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CmluZGV4IDEwMDQ2ODguLjVlMGFiZTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc25kaGRyLnB5CkBAIC0xMiw3ICsxMiw3IEBACiAgICAgICAgICAgICAoJ3NuZGhkci5oY29tJywgKCdoY29tJywgMjIwNTAuMCwgMSwgLTEsIDgpKSwKICAgICAgICAgICAgICgnc25kaGRyLnNuZHQnLCAoJ3NuZHQnLCA0NDEwMCwgMSwgNSwgOCkpLAogICAgICAgICAgICAgKCdzbmRoZHIudm9jJywgKCd2b2MnLCAwLCAxLCAtMSwgOCkpLAotICAgICAgICAgICAgKCdzbmRoZHIud2F2JywgKCd3YXYnLCA0NDEwMCwgMiwgLTEsIDE2KSksCisgICAgICAgICAgICAoJ3NuZGhkci53YXYnLCAoJ3dhdicsIDQ0MTAwLCAyLCA1LCAxNikpLAogICAgICAgICApOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBmaW5kZmlsZShmaWxlbmFtZSwgc3ViZGlyPSJzbmRoZHJkYXRhIikKICAgICAgICAgICAgIHdoYXQgPSBzbmRoZHIud2hhdChmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5IGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKaW5kZXggMTI1MTdhZS4uM2M5ZmJmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zb2NrZXQucHkKQEAgLTIsNyArMiw2IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHVuaXR0ZXN0LmNhc2UgaW1wb3J0IF9FeHBlY3RlZEZhaWx1cmUKIAogaW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KQEAgLTI0LDEzICsyMywxMyBAQAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN0cnVjdAogdHJ5OgotICAgIGltcG9ydCBmY250bAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZjbnRsID0gRmFsc2UKLXRyeToKICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgbXVsdGlwcm9jZXNzaW5nID0gRmFsc2UKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXHUxMjM0XHJcbicuZW5jb2RlKCd1dGYtOCcpICMjIHRlc3QgdW5pY29kZSBzdHJpbmcgYW5kIGNhcnJpYWdlIHJldHVybgpAQCAtNDYsNyArNDUsNyBAQAogICAgICIiIkNoZWNrIHdoZXRoZXIgQ0FOIHNvY2tldHMgYXJlIHN1cHBvcnRlZCBvbiB0aGlzIGhvc3QuIiIiCiAgICAgdHJ5OgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIHNvY2tldC5lcnJvciwgT1NFcnJvcik6CisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIGVsc2U6CiAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTIxLDEyICsxMjAsNDIgQEAKICAgICBpbnRlcmZhY2UgPSAndmNhbjAnCiAgICAgYnVmc2l6ZSA9IDEyOAogCisgICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgorCisgICAgc3RydWN0IGNhbl9mcmFtZSB7CisgICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCisgICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCisgICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisgICAgfTsKKyAgICAiIiIKKyAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCisgICAgY2FuX2ZyYW1lX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoY2FuX2ZyYW1lX2ZtdCkKKworICAgICIiIlRoZSBCcm9hZGNhc3QgTWFuYWdlbWVudCBDb21tYW5kIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkCisgICAgaW4gPGxpbnV4L2Nhbi9iY20uaD46CisKKyAgICBzdHJ1Y3QgYmNtX21zZ19oZWFkIHsKKyAgICAgICAgX191MzIgb3Bjb2RlOworICAgICAgICBfX3UzMiBmbGFnczsKKyAgICAgICAgX191MzIgY291bnQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIGl2YWwxLCBpdmFsMjsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7CisgICAgICAgIF9fdTMyIG5mcmFtZXM7CisgICAgICAgIHN0cnVjdCBjYW5fZnJhbWUgZnJhbWVzWzBdOworICAgIH0KKworICAgIGBiY21fbXNnX2hlYWRgIG11c3QgYmUgOCBieXRlcyBhbGlnbmVkIGJlY2F1c2Ugb2YgdGhlIGBmcmFtZXNgIG1lbWJlciAoc2VlCisgICAgYHN0cnVjdCBjYW5fZnJhbWVgIGRlZmluaXRpb24pLiBNdXN0IHVzZSBuYXRpdmUgbm90IHN0YW5kYXJkIHR5cGVzIGZvciBwYWNraW5nLgorICAgICIiIgorICAgIGJjbV9jbWRfbXNnX2ZtdCA9ICJAM0k0bDJJIgorICAgIGJjbV9jbWRfbXNnX2ZtdCArPSAieCIgKiAoc3RydWN0LmNhbGNzaXplKGJjbV9jbWRfbXNnX2ZtdCkgJSA4KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLnMuY2xvc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucy5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25ldHdvcmsgaW50ZXJmYWNlIGAlc2AgZG9lcyBub3QgZXhpc3QnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW50ZXJmYWNlKQogCkBAIC0yNDIsOSArMjcxLDYgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgIyBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIGV4cGVjdGVkIGZhaWx1cmVzCi0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMjk1LDcgKzMyMSw3IEBACiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaS5iaW5kKChzZWxmLmludGVyZmFjZSwpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc2tpcFRlc3Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaGVyZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGluIHRoZQogICAgICAgICAgICAgIyBzZXJ2ZXIgaW5zdGVhZAogICAgICAgICAgICAgcGFzcwpAQCAtNTQzLDExICs1NjksNyBAQAogY2xhc3MgSW5ldDZUZXN0QmFzZShJbmV0VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIElQdjYgc29ja2V0IHRlc3RzLiIiIgogCi0gICAgIyBEb24ndCB1c2UgImxvY2FsaG9zdCIgaGVyZSAtIGl0IG1heSBub3QgaGF2ZSBhbiBJUHY2IGFkZHJlc3MKLSAgICAjIGFzc2lnbmVkIHRvIGl0IGJ5IGRlZmF1bHQgKGUuZy4gaW4gL2V0Yy9ob3N0cyksIGFuZCBpZiBzb21lb25lCi0gICAgIyBoYXMgYXNzaWduZWQgaXQgYW4gSVB2NC1tYXBwZWQgYWRkcmVzcywgdGhlbiBpdCdzIHVubGlrZWx5IHRvCi0gICAgIyB3b3JrIHdpdGggdGhlIGZ1bGwgSVB2NiBBUEkuCi0gICAgaG9zdCA9ICI6OjEiCisgICAgaG9zdCA9IHN1cHBvcnQuSE9TVHY2CiAKIGNsYXNzIFVEUDZUZXN0QmFzZShJbmV0NlRlc3RCYXNlKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBVRFAtb3Zlci1JUHY2IHRlc3RzLiIiIgpAQCAtNjA4LDcgKzYzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4gYXJnc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKmNhbGxhcmdzKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIFhYWDogY2hlY2sgZXJybm8/CiAgICAgICAgICAgICBlcnIgPSBzdHIoZSkKICAgICAgICAgZWxzZToKQEAgLTYyNiw4ICs2NDgsMTcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzKS5zdGFydHN3aXRoKCI8c29ja2V0LnNvY2tldCBvYmplY3QiKSkKKyAgICAgICAgd2l0aCBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmQ9JWknICUgcy5maWxlbm8oKSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZhbWlseT0lcycgJSBzb2NrZXQuQUZfSU5FVCwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R5cGU9JXMnICUgc29ja2V0LlNPQ0tfU1RSRUFNLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncHJvdG89MCcsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdyYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKHMuZ2V0c29ja25hbWUoKSksIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1tjbG9zZWRdJywgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGFkZHInLCByZXByKHMpKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY0NSwxMSArNjc2LDExIEBACiAgICAgZGVmIHRlc3RTb2NrZXRFcnJvcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNvY2tldCBtb2R1bGUgZXhjZXB0aW9ucwogICAgICAgICBtc2cgPSAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uICglcykuIgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZXJyb3InKToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdPU0Vycm9yJyk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKIAogICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgpAQCAtNzEyLDEzICs3NDMsMTMgQEAKICAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKQEAgLTcyNiwxMyArNzU3LDI3IEBACiAgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCiAKKyAgICBkZWYgdGVzdF9ob3N0X3Jlc29sdXRpb24oc2VsZik6CisgICAgICAgIGZvciBhZGRyIGluIFsnMC4xLjEufjEnLCAnMSsuMS4xLjEnLCAnOjoxcScsICc6OjE6OjInLAorICAgICAgICAgICAgICAgICAgICAgJzE6MToxOjE6MToxOjE6MToxJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSwgYWRkcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnlhZGRyLCBhZGRyKQorCisgICAgICAgIGZvciBhZGRyIGluIFtzdXBwb3J0LkhPU1QsICcxMC4wLjAuMScsICcyNTUuMjU1LjI1NS4yNTUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGhvc3RieW5hbWUoYWRkciksIGFkZHIpCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHN1cHBvcnQuSE9TVHY2IGJlY2F1c2UgdGhlcmUncyBhIGNoYW5jZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgIyBhIG1hdGNoaW5nIG5hbWUgZW50cnkgKGUuZy4gJ2lwNi1sb2NhbGhvc3QnKQorICAgICAgICBmb3IgaG9zdCBpbiBbc3VwcG9ydC5IT1NUXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdCwgc29ja2V0LmdldGhvc3RieWFkZHIoaG9zdClbMl0pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5zZXRob3N0bmFtZSgpIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2dldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5nZXRob3N0bmFtZSgpIikKICAgICBkZWYgdGVzdF9zZXRob3N0bmFtZShzZWxmKToKICAgICAgICAgb2xkaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0aG9zdG5hbWUoJ25ldycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBFUk06CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBzaG91bGQgYmUgcnVuIGFzIHJvb3QiKQogICAgICAgICAgICAgZWxzZToKQEAgLTc2Niw4ICs4MTEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuaWZfbmFtZWluZGV4KCkgbm90IGF2YWlsYWJsZS4nKQogICAgIGRlZiB0ZXN0SW52YWxpZEludGVyZmFjZU5hbWVJbmRleChzZWxmKToKICAgICAgICAgIyB0ZXN0IG5vbmV4aXN0ZW50IGludGVyZmFjZSBpbmRleC9uYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKICAgICAgICAgIyB0ZXN0IHdpdGggaW52YWxpZCB2YWx1ZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAnX0RFQURCRUVGJykKQEAgLTc4OSw3ICs4MzQsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgpAQCAtODM2LDE3ICs4ODEsMTcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3RjcCcpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBUcnkgc2FtZSBjYWxsIHdpdGggb3B0aW9uYWwgcHJvdG9jb2wgb21pdHRlZAogICAgICAgICBwb3J0MiA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UpCiAgICAgICAgIGVxKHBvcnQsIHBvcnQyKQogICAgICAgICAjIFRyeSB1ZHAsIGJ1dCBkb24ndCBiYXJmIGlmIGl0IGRvZXNuJ3QgZXhpc3QKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdWRwcG9ydCA9IHNvY2tldC5nZXRzZXJ2YnluYW1lKHNlcnZpY2UsICd1ZHAnKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHVkcHBvcnQgPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBlcSh1ZHBwb3J0LCBwb3J0KQpAQCAtOTAyLDcgKzk0Nyw3IEBACiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQsIGEpCiAKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBmdW5jLGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceDAwXHgwMFx4MDAnLCBmKCcwLjAuMC4wJykpCkBAIC05MzUsOSArOTgwLDE3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgJzo6JykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICMgSVB2NiBtaWdodCBub3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgUEMKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfcHRvbihBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidceDAwJyAqIDE2LCBmKCc6OicpKQpAQCAtOTg2LDcgKzEwMzksNyBAQAogICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgaW5ldF9udG9hIGFzIGYsIGluZXRfbnRvcCwgQUZfSU5FVAogICAgICAgICBnID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVULCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxLjAuMS4wJywgZihiJ1x4MDFceDAwXHgwMVx4MDAnKSkKQEAgLTEwMTMsOSArMTA2NiwxNyBAQAogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsIGInXHgwMCcgKiAxNikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSAxMDAyMjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICMgSVB2NiBtaWdodCBub3QgYmUgaW5zdGFsbGVkIG9uIHRoaXMgUEMKKwogICAgICAgICBmID0gbGFtYmRhIGE6IGluZXRfbnRvcChBRl9JTkVUNiwgYSkKICAgICAgICAgYXNzZXJ0SW52YWxpZCA9IGxhbWJkYSBhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGYsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzo6JywgZihiJ1x4MDAnICogMTYpKQpAQCAtMTA0Myw3ICsxMTA0LDcgQEAKICAgICAgICAgIyBBdCBsZWFzdCBmb3IgZUNvcy4gIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBTLzM5MCB0byBwYXNzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBteV9pcF9hZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUoc29ja2V0LmdldGhvc3RuYW1lKCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBQcm9iYWJseSBuYW1lIGxvb2t1cCB3YXNuJ3Qgc2V0IHVwIHJpZ2h0OyBza2lwIHRoaXMgdGVzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZVswXSwgKCIwLjAuMC4wIiwgbXlfaXBfYWRkciksICclcyBpbnZhbGlkJyAlIG5hbWVbMF0pCkBAIC0xMDcwLDEzICsxMTMxLDE5IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNvY2suc2V0dGltZW91dCgxKQogICAgICAgICBzb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmQsIGIic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2suc2VuZCwgYiJzcGFtIikKIAogICAgIGRlZiB0ZXN0TmV3QXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyB0ZXN0aW5nIC5mYW1pbHksIC50eXBlIGFuZCAucHJvdG9jb2wKKwogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc29jay50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2sucHJvdG8sIDApCiAgICAgICAgIHNvY2suY2xvc2UoKQogCkBAIC0xMTI5LDkgKzExOTYsMTIgQEAKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwKQogICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKICAgICAgICAgIyB0ZXN0IGZhbWlseSBhbmQgc29ja3R5cGUgZmlsdGVycwotICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgZm9yIGZhbWlseSwgXywgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgODAsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmYW1pbHkpLCAnQWRkcmVzc0ZhbWlseS5BRl9JTkVUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHlwZSksICdTb2NrZXRUeXBlLlNPQ0tfU1RSRUFNJykKICAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBmb3IgXywgc29ja3R5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2t0eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCkBAIC0xMTczLDcgKzEyNDMsNyBAQAogCiAgICAgZGVmIHRlc3RfZ2V0bmFtZWluZm8oc2VsZik6CiAgICAgICAgICMgb25seSBJUCBhZGRyZXNzZXMgYXJlIGFsbG93ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrZXQuZ2V0bmFtZWluZm8sICgnbWFpbC5weXRob24ub3JnJywwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLCAoJ21haWwucHl0aG9uLm9yZycsMCksIDApCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBpcyBub3QgZW5hYmxlZCcpCkBAIC0xMjg1LDEwICsxMzU1LDMxIEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5JUFY2X0VOQUJMRUQsICdJUHY2IHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF9mbG93aW5mbyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29ja2V0LmdldG5hbWVpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoJzo6MScsMCwgMHhmZmZmZmZmZiksIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0LkhPU1R2NiwgMCwgMHhmZmZmZmZmZiksIDApCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKCc6OjEnLCAwLCAtMTApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcy5iaW5kLCAoc3VwcG9ydC5IT1NUdjYsIDAsIC0xMCkpCiAKKyAgICBkZWYgdGVzdF9zdHJfZm9yX2VudW1zKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBBRl8qIGFuZCBTT0NLXyogY29uc3RhbnRzIGhhdmUgZW51bS1saWtlIHN0cmluZworICAgICAgICAjIHJlcHJzLgorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHMuZmFtaWx5KSwgJ0FkZHJlc3NGYW1pbHkuQUZfSU5FVCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLnR5cGUpLCAnU29ja2V0VHlwZS5TT0NLX1NUUkVBTScpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywgJ1dpbGwgbm90IHdvcmsgb24gV2luZG93cycpCisgICAgZGVmIHRlc3RfdWtub3duX3NvY2tldF9mYW1pbHlfcmVwcihzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgd2hlbiBjcmVhdGVkIHdpdGggYSBmYW1pbHkgdGhhdCdzIG5vdCBvbmUgb2YgdGhlIGtub3duCisgICAgICAgICMgQUZfKi9TT0NLXyogY29uc3RhbnRzLCBzb2NrZXQuZmFtaWx5IGp1c3QgcmV0dXJucyB0aGUgbnVtYmVyLgorICAgICAgICAjCisgICAgICAgICMgVG8gZG8gdGhpcyB3ZSBmb29sIHNvY2tldC5zb2NrZXQgaW50byBiZWxpZXZpbmcgaXQgYWxyZWFkeSBoYXMgYW4KKyAgICAgICAgIyBvcGVuIGZkIGJlY2F1c2Ugb24gdGhpcyBwYXRoIGl0IGRvZXNuJ3QgYWN0dWFsbHkgdmVyaWZ5IHRoZSBmYW1pbHkgYW5kCisgICAgICAgICMgdHlwZSBhbmQgcG9wdWxhdGVzIHRoZSBzb2NrZXQgb2JqZWN0LgorICAgICAgICAjCisgICAgICAgICMgT24gV2luZG93cyB0aGlzIHRyaWNrIHdvbid0IHdvcmssIHNvIHRoZSB0ZXN0IGlzIHNraXBwZWQuCisgICAgICAgIGZkLCBfID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChmYW1pbHk9NDI0MjQsIHR5cGU9MTMzMzEsIGZpbGVubz1mZCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5mYW1pbHksIDQyNDI0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnR5cGUsIDEzMzMxKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9DQU4sICdTb2NrZXRDYW4gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQmFzaWNDQU5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEyOTgsMTAgKzEzODksMzUgQEAKICAgICAgICAgc29ja2V0LlBGX0NBTgogICAgICAgICBzb2NrZXQuQ0FOX1JBVwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTUNvbnN0YW50cyhzZWxmKToKKyAgICAgICAgc29ja2V0LkNBTl9CQ00KKworICAgICAgICAjIG9wY29kZXMKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU0VUVVAgICAgICMgY3JlYXRlIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX0RFTEVURSAgICAjIHJlbW92ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9SRUFEICAgICAgIyByZWFkIHByb3BlcnRpZXMgb2YgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfU0VORCAgICAgICMgc2VuZCBvbmUgQ0FOIGZyYW1lCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1NFVFVQICAgICAjIGNyZWF0ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfREVMRVRFICAgICMgcmVtb3ZlIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9SRUFEICAgICAgIyByZWFkIHByb3BlcnRpZXMgb2YgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NUQVRVUyAgICAjIHJlcGx5IHRvIFRYX1JFQUQgcmVxdWVzdAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9FWFBJUkVEICAgIyBub3RpZmljYXRpb24gb24gcGVyZm9ybWVkIHRyYW5zbWlzc2lvbnMgKGNvdW50PTApCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX1NUQVRVUyAgICAjIHJlcGx5IHRvIFJYX1JFQUQgcmVxdWVzdAorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9USU1FT1VUICAgIyBjeWNsaWMgbWVzc2FnZSBpcyBhYnNlbnQKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfQ0hBTkdFRCAgICMgdXBkYXRlZCBDQU4gZnJhbWUgKGRldGVjdGVkIGNvbnRlbnQgY2hhbmdlKQorCiAgICAgZGVmIHRlc3RDcmVhdGVTb2NrZXQoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcGFzcwogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdENyZWF0ZUJDTVNvY2tldChzZWxmKToKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX0RHUkFNLCBzb2NrZXQuQ0FOX0JDTSkgYXMgczoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0QmluZEFueShzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6CiAgICAgICAgICAgICBzLmJpbmQoKCcnLCApKQpAQCAtMTMwOSw3ICsxNDI1LDcgQEAKICAgICBkZWYgdGVzdFRvb0xvbmdJbnRlcmZhY2VOYW1lKHNlbGYpOgogICAgICAgICAjIG1vc3Qgc3lzdGVtcyBsaW1pdCBJRk5BTVNJWiB0byAxNiwgdGFrZSAxMDI0IHRvIGJlIHN1cmUKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNvY2tldC5lcnJvciwgJ2ludGVyZmFjZSBuYW1lIHRvbyBsb25nJywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT1NFcnJvciwgJ2ludGVyZmFjZSBuYW1lIHRvbyBsb25nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5iaW5kLCAoJ3gnICogMTAyNCwpKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fUkFXX0xPT1BCQUNLIiksCkBAIC0xMzM0LDE5ICsxNDUwLDggQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9DQU4sICdTb2NrZXRDYW4gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIENBTlRlc3QoVGhyZWFkZWRDQU5Tb2NrZXRUZXN0KToKIAotICAgICIiIlRoZSBDQU4gZnJhbWUgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4gPGxpbnV4L2Nhbi5oPjoKLQotICAgIHN0cnVjdCBjYW5fZnJhbWUgewotICAgICAgICBjYW5pZF90IGNhbl9pZDsgIC8qIDMyIGJpdCBDQU5fSUQgKyBFRkYvUlRSL0VSUiBmbGFncyAqLwotICAgICAgICBfX3U4ICAgIGNhbl9kbGM7IC8qIGRhdGEgbGVuZ3RoIGNvZGU6IDAgLi4gOCAqLwotICAgICAgICBfX3U4ICAgIGRhdGFbOF0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOwotICAgIH07Ci0gICAgIiIiCi0gICAgY2FuX2ZyYW1lX2ZtdCA9ICI9SUIzeDhzIgotCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKICAgICAgICAgVGhyZWFkZWRDQU5Tb2NrZXRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKIApAQCAtMTM5NSw2ICsxNTAwLDQ2IEBACiAgICAgICAgIHNlbGYuY2YyID0gc2VsZi5idWlsZF9jYW5fZnJhbWUoMHgxMiwgYidceDk5XHgyMlx4MzMnKQogICAgICAgICBzZWxmLmNsaS5zZW5kKHNlbGYuY2YyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgX3Rlc3RCQ00oc2VsZik6CisgICAgICAgIGNmLCBhZGRyID0gc2VsZi5jbGkucmVjdmZyb20oc2VsZi5idWZzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2YsIGNmKQorICAgICAgICBjYW5faWQsIGNhbl9kbGMsIGRhdGEgPSBzZWxmLmRpc3NlY3RfY2FuX2ZyYW1lKGNmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FuX2lkLCBjYW5faWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYXRhLCBkYXRhKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJDQU5fQkNNIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5DQU5fQkNNIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgdGVzdEJDTShzZWxmKToKKyAgICAgICAgYmNtID0gc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChiY20uY2xvc2UpCisgICAgICAgIGJjbS5jb25uZWN0KChzZWxmLmludGVyZmFjZSwpKQorICAgICAgICBzZWxmLmNhbl9pZCA9IDB4MTIzCisgICAgICAgIHNlbGYuZGF0YSA9IGJ5dGVzKFsweGMwLCAweGZmLCAweGVlXSkKKyAgICAgICAgc2VsZi5jZiA9IHNlbGYuYnVpbGRfY2FuX2ZyYW1lKHNlbGYuY2FuX2lkLCBzZWxmLmRhdGEpCisgICAgICAgIG9wY29kZSA9IHNvY2tldC5DQU5fQkNNX1RYX1NFTkQKKyAgICAgICAgZmxhZ3MgPSAwCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBpdmFsMV9zZWNvbmRzID0gaXZhbDFfdXNlYyA9IGl2YWwyX3NlY29uZHMgPSBpdmFsMl91c2VjID0gMAorICAgICAgICBiY21fY2FuX2lkID0gMHgwMjIyCisgICAgICAgIG5mcmFtZXMgPSAxCisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5jZikgPT0gMTYKKyAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc2VsZi5iY21fY21kX21zZ19mbXQsCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSwKKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIGNvdW50LAorICAgICAgICAgICAgICAgICAgICBpdmFsMV9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMV91c2VjLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICBpdmFsMl91c2VjLAorICAgICAgICAgICAgICAgICAgICBiY21fY2FuX2lkLAorICAgICAgICAgICAgICAgICAgICBuZnJhbWVzLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgIGhlYWRlcl9wbHVzX2ZyYW1lID0gaGVhZGVyICsgc2VsZi5jZgorICAgICAgICBieXRlc19zZW50ID0gYmNtLnNlbmQoaGVhZGVyX3BsdXNfZnJhbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfc2VudCwgbGVuKGhlYWRlcl9wbHVzX2ZyYW1lKSkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1NPQ0tFVF9SRFMsICdSRFMgc29ja2V0cyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1JEU1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTYwOSw3ICsxNzU0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLCBmaWxlbm8pCiAgICAgICAgICMgY2xpX2Nvbm4gY2Fubm90IGJlIHVzZWQgYW55bW9yZS4uLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jbGlfY29ubi5fY2xvc2VkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKICAgICAgICAgIyAuLi5idXQgd2UgY2FuIGNyZWF0ZSBhbm90aGVyIHNvY2tldCB1c2luZyB0aGUgKHN0aWxsIG9wZW4pCiAgICAgICAgICMgZmlsZSBkZXNjcmlwdG9yCkBAIC0xOTc4LDcgKzIxMjMsNyBAQAogICAgIGRlZiBfdGVzdFNlbmRtc2dFeGNlc3NDbXNnUmVqZWN0KHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJDTVNHX1NQQUNFIik6CiAgICAgICAgICAgICAjIENhbiBvbmx5IHNlbmQgb25lIGl0ZW0KLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW01TR10sIFsoMCwgMCwgYiIiKSwgKDAsIDAsIGIiIildKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY20uZXhjZXB0aW9uLmVycm5vKQogICAgICAgICBzZWxmLnNlbmRUb1NlcnZlcihiImRvbmUiKQpAQCAtMTk4OSw3ICsyMTM0LDcgQEAKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dBZnRlckNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaV9zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNlbmRtc2dUb1NlcnZlciwgW01TR10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuc2VuZG1zZ1RvU2VydmVyLCBbTVNHXSkKIAogCiBjbGFzcyBTZW5kbXNnU3RyZWFtVGVzdHMoU2VuZG1zZ1Rlc3RzKToKQEAgLTIwMzMsNyArMjE3OCw3IEBACiAgICAgQHRlc3RTZW5kbXNnRG9udFdhaXQuY2xpZW50X3NraXAKICAgICBkZWYgX3Rlc3RTZW5kbXNnRG9udFdhaXQoc2VsZik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIoW2IiYSIqNTEyXSwgW10sIHNvY2tldC5NU0dfRE9OVFdBSVQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGNtLmV4Y2VwdGlvbi5lcnJubywKQEAgLTIwNTMsOSArMjE5OCw5IEBACiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfdGVzdFNlbmRtc2dOb0Rlc3RBZGRyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICBbTVNHXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW01TR10sIFtdLCAwLCBOb25lKQogCiAKQEAgLTIxNDEsNyArMjI4Niw3IEBACiAgICAgZGVmIHRlc3RSZWN2bXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IHJlY3Ztc2dbX2ludG9dKCkgZmFpbHMgb24gYSBjbG9zZWQgc29ja2V0LgogICAgICAgICBzZWxmLnNlcnZfc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5kb1JlY3Ztc2csIHNlbGYuc2Vydl9zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmRvUmVjdm1zZywgc2VsZi5zZXJ2X3NvY2ssIDEwMjQpCiAKICAgICBkZWYgX3Rlc3RSZWN2bXNnQWZ0ZXJDbG9zZShzZWxmKToKICAgICAgICAgcGFzcwpAQCAtMjU4Nyw3ICsyNzMyLDcgQEAKICAgICAgICAgIyBjYWxsIGZhaWxzLCBqdXN0IHNlbmQgbXNnIHdpdGggbm8gYW5jaWxsYXJ5IGRhdGEuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddLCBhbmNkYXRhKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgaXQgd2FzIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGZhaWxlZAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuZXJybm8sIGludCkKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddKQpAQCAtMjk2NSw3ICszMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgIGFycmF5LmFycmF5KCJpIiwgW3NlbGYudHJhZmZpY19jbGFzc10pLnRvYnl0ZXMoKSArIGIiXHgwMCIpLAogICAgICAgICAgICAgICAgICAoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QTElNSVQsCiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLmhvcF9saW1pdF0pKV0pCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcigKICAgICAgICAgICAgICAgICBbTVNHXSwKQEAgLTM0MjMsMTAgKzM1NjgsMTAgQEAKICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoc2VsZi50aW1lb3V0KQogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRSZWN2KHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIHNvY2tldC5lcnJvciB3aXRoIGFuCisgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIE9TRXJyb3Igd2l0aCBhbgogICAgICAgICAjIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCiAgICAgICAgIHNlbGYuc2V0QWxhcm0oc2VsZi5hbGFybV90aW1lKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbiwgc29ja2V0LnRpbWVvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5UUikKQEAgLTM0ODMsOSArMzYyOCw5IEBACiAKICAgICBkZWYgY2hlY2tJbnRlcnJ1cHRlZFNlbmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSwgcnVuIGluIGEgbG9vcCwgcmFpc2VzCi0gICAgICAgICMgc29ja2V0LmVycm9yIHdpdGggYW4gZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhCisgICAgICAgICMgT1NFcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQogICAgICAgICAjIHNpZ25hbC4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKICAgICAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKQEAgLTM1ODQsNyArMzcyOSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIHNldHRpbmcgbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2MTAsNyArMzc1NSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIGNyZWF0aW5nIHdpdGggbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2NDAsNyArMzc4NSw3IEBACiAgICAgICAgIHNlbGYuc2Vydi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIGFjY2VwdC4iKQpAQCAtMzY3MCw3ICszODE1LDcgQEAKICAgICAgICAgY29ubi5zZXRibG9ja2luZygwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YobGVuKE1TRykpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0cnlpbmcgdG8gZG8gbm9uLWJsb2NraW5nIHJlY3YuIikKQEAgLTM3NTMsNyArMzg5OCw3IEBACiAgICAgICAgICMgRmlyc3QgcmVhZCByYWlzZXMgYSB0aW1lb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnJlYWRfZmlsZS5yZWFkLCAxKQogICAgICAgICAjIFNlY29uZCByZWFkIGlzIGRpc2FsbG93ZWQKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjdHg6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY3R4OgogICAgICAgICAgICAgc2VsZi5yZWFkX2ZpbGUucmVhZCgxKQogICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiLCBzdHIoY3R4LmV4Y2VwdGlvbikpCiAKQEAgLTM4NDUsNyArMzk5MCw3IEBACiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5yZWFkX2ZpbGUuZmlsZW5vKQogICAgICAgICBzZWxmLmNsaV9jb25uLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLmdldHNvY2tuYW1lKQogCiAgICAgZGVmIF90ZXN0UmVhbENsb3NlKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC0zODgyLDcgKzQwMjcsNyBAQAogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBfcmFpc2VfZWludHIoKToKLSAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQorICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVJTlRSLCAiaW50ZXJydXB0ZWQiKQogCiAgICAgZGVmIF90ZXh0aW93cmFwX21vY2tfc29ja2V0KHNlbGYsIG1vY2ssIGJ1ZmZlcmluZz0tMSk6CiAgICAgICAgIHJhdyA9IHNvY2tldC5Tb2NrZXRJTyhtb2NrLCAiciIpCkBAIC0zOTk0LDcgKzQxMzksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgc2VsZi5yZWFkX21zZykKICAgICAgICAgIyAuLi51bnRpbCB0aGUgZmlsZSBpcyBpdHNlbGYgY2xvc2VkCiAgICAgICAgIHNlbGYucmVhZF9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX2Nvbm4ucmVjdiwgMTAyNCkKIAogICAgIGRlZiBfdGVzdE1ha2VmaWxlQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfZmlsZS53cml0ZShzZWxmLndyaXRlX21zZykKQEAgLTQxNDMsNyArNDI4OCw3IEBACiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQogICAgICAgICBjbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGkuY2xvc2UpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGNsaS5jb25uZWN0KChIT1NULCBwb3J0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVDT05OUkVGVVNFRCkKIApAQCAtNDE1MSw3ICs0Mjk2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCiAgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBwb3J0KSkKIAogICAgICAgICAjIElzc3VlICMxNjI1NzogY3JlYXRlX2Nvbm5lY3Rpb24oKSBjYWxscyBnZXRhZGRyaW5mbygpIGFnYWluc3QKQEAgLTQyOTksNyArNDQ0NCw3IEBACiAgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYuYWNjZXB0KCkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdGltZW91dCBpbnN0ZWFkIG9mIGVycm9yIChUQ1ApIikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBvayA9IFRydWUKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJjYXVnaHQgdW5leHBlY3RlZCBleGNlcHRpb24gKFRDUCkiKQpAQCAtNDM1Niw3ICs0NTAxLDcgQEAKICAgICAgICAgICAgIGZvbyA9IHNlbGYuc2Vydi5yZWN2KDEwMjQpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBlcnJvciAoVURQKSIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChVRFApIikKQEAgLTQzNjYsMTAgKzQ1MTEsMTAgQEAKIGNsYXNzIFRlc3RFeGNlcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0RXhjZXB0aW9uVHJlZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmVycm9yLCBFeGNlcHRpb24pKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuZ2FpZXJyb3IsIHNvY2tldC5lcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBzb2NrZXQuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPU0Vycm9yLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQuaGVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBPU0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LnRpbWVvdXQsIE9TRXJyb3IpKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ0xpbnV4IHNwZWNpZmljIHRlc3QnKQogY2xhc3MgVGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDM5Niw3ICs0NTQxLDcgQEAKICAgICBkZWYgdGVzdE5hbWVPdmVyZmxvdyhzZWxmKToKICAgICAgICAgYWRkcmVzcyA9ICJceDAwIiArICJoIiAqIHNlbGYuVU5JWF9QQVRIX01BWAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgcy5iaW5kLCBhZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcy5iaW5kLCBhZGRyZXNzKQogCiAgICAgZGVmIHRlc3RTdHJOYW1lKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYW4gYWJzdHJhY3QgbmFtZSBjYW4gYmUgcGFzc2VkIGFzIGEgc3RyaW5nLgpAQCAtNDYzOCw3ICs0NzgzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKICAgICAgICAgIyBleGNlcHRpb24gaW5zaWRlIHdpdGggYmxvY2sKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKIAogICAgIGRlZiB0ZXN0Q3JlYXRlQ29ubmVjdGlvbkJhc2Uoc2VsZik6CkBAIC00NjY2LDE5ICs0ODExLDc2IEBACiAgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKLSAgICAgICAgICAgICAgICAgICAgICJTT0NLX0NMT0VYRUMgbm90IGRlZmluZWQiKQotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmNudGwsICJtb2R1bGUgZmNudGwgbm90IGF2YWlsYWJsZSIpCi1jbGFzcyBDbG9leGVjQ29uc3RhbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEluaGVyaXRhbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKICAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDI4KQogICAgIGRlZiB0ZXN0X1NPQ0tfQ0xPRVhFQyhzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQykgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnR5cGUgJiBzb2NrZXQuU09DS19DTE9FWEVDKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjbnRsLmZjbnRsKHMsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5nZXRfaW5oZXJpdGFibGUoKSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBuZXdzb2NrID0gc29jay5kdXAoKQorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG5ld3NvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICAgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICAgICAgZmxhZ3MgJj0gfmZjbnRsLkZEX0NMT0VYRUMKKyAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgICAgIHNvY2suc2V0X2luaGVyaXRhYmxlKFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHNvY2tldC5zb2NrZXRwYWlyKCkiKQorICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHMxLCBzMiA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMxLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoczIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEuZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMyLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIlNPQ0tfTk9OQkxPQ0siKSwKQEAgLTQ4NDcsNyArNTA0OSw3IEBACiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QsCiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdCwKICAgICAgICAgQ29udGV4dE1hbmFnZXJzVGVzdCwKLSAgICAgICAgQ2xvZXhlY0NvbnN0YW50VGVzdCwKKyAgICAgICAgSW5oZXJpdGFuY2VUZXN0LAogICAgICAgICBOb25ibG9ja0NvbnN0YW50VGVzdAogICAgIF0pCiAgICAgdGVzdHMuYXBwZW5kKEJhc2ljU29ja2V0UGFpclRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CmluZGV4IDU5ZDhlNWQuLjA2MTdiMzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CkBAIC0yLDggKzIsOCBAQAogVGVzdCBzdWl0ZSBmb3Igc29ja2V0c2VydmVyLgogIiIiCiAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNpZ25hbApAQCAtMjksNyArMjksNyBAQAogSEFWRV9VTklYX1NPQ0tFVFMgPSBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKQogcmVxdWlyZXNfdW5peF9zb2NrZXRzID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX1VOSVhfU09DS0VUUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVzIFVuaXggc29ja2V0cycpCi1IQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpIGFuZCBvcy5uYW1lICE9ICJvczIiCitIQVZFX0ZPUktJTkcgPSBoYXNhdHRyKG9zLCAiZm9yayIpCiByZXF1aXJlc19mb3JraW5nID0gdW5pdHRlc3Quc2tpcFVubGVzcyhIQVZFX0ZPUktJTkcsICdyZXF1aXJlcyBmb3JraW5nJykKIAogZGVmIHNpZ25hbF9hbGFybShuKToKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgZm9yIGZuIGluIHNlbGYudGVzdF9maWxlczoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYudGVzdF9maWxlc1s6XSA9IFtdCiAKQEAgLTk2LDIxICs5Niw3IEBACiAgICAgICAgICAgICAjIFhYWDogV2UgbmVlZCBhIHdheSB0byB0ZWxsIEFGX1VOSVggdG8gcGljayBpdHMgb3duIG5hbWUKICAgICAgICAgICAgICMgbGlrZSBBRl9JTkVUIHByb3ZpZGVzIHBvcnQ9PTAuCiAgICAgICAgICAgICBkaXIgPSBOb25lCi0gICAgICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgICAgIGRpciA9ICdcc29ja2V0JwogICAgICAgICAgICAgZm4gPSB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSd1bml4X3NvY2tldC4nLCBkaXI9ZGlyKQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgICAgICAjIEFGX1VOSVggc29ja2V0IG5hbWVzIG9uIE9TLzIgcmVxdWlyZSBhIHNwZWNpZmljIHByZWZpeAotICAgICAgICAgICAgICAgICMgd2hpY2ggY2FuJ3QgaW5jbHVkZSBhIGRyaXZlIGxldHRlciBhbmQgbXVzdCBhbHNvIHVzZQotICAgICAgICAgICAgICAgICMgYmFja3NsYXNoZXMgYXMgZGlyZWN0b3J5IHNlcGFyYXRvcnMKLSAgICAgICAgICAgICAgICBpZiBmblsxXSA9PSAnOic6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm5bMjpdCi0gICAgICAgICAgICAgICAgaWYgZm5bMF0gaW4gKG9zLnNlcCwgb3MuYWx0c2VwKToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmblsxOl0KLSAgICAgICAgICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuLnJlcGxhY2Uob3Muc2VwLCBvcy5hbHRzZXApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbi5yZXBsYWNlKG9zLmFsdHNlcCwgb3Muc2VwKQogICAgICAgICAgICAgc2VsZi50ZXN0X2ZpbGVzLmFwcGVuZChmbikKICAgICAgICAgICAgIHJldHVybiBmbgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOWQyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQpAQCAtMCwwICsxLDEzNSBAQAorIyAtKi0gY29kaW5nOiBrb2k4LXIgLSotCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKK2ltcG9ydCBpbXBvcnRsaWIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitjbGFzcyBTb3VyY2VFbmNvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGVwMjYzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIvDJ1M/OIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1x4ZDBceDlmXHhkMFx4YjhceGQxXHg4Mlx4ZDBceGJlXHhkMFx4YmQnCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICJc8CIuZW5jb2RlKCJ1dGYtOCIpLAorICAgICAgICAgICAgYidcXFx4ZDBceDlmJworICAgICAgICApCisKKyAgICBkZWYgdGVzdF9jb21waWxlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg4MgorICAgICAgICBjID0gY29tcGlsZShiIlxuIyBjb2Rpbmc6IHV0Zi04XG51ID0gJ1x4YzNceGIzJ1xuIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ3UnXSwgJ1x4ZjMnKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMzAxKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21waWxlKGIiIyBjb2Rpbmc6IGNwOTMyXG5wcmludCAnXHg5NFx4NGUnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgdjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi50ZXh0LCAicHJpbnQgJ1x1NWU3NCdcbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoKQorCisgICAgZGVmIHRlc3RfaXNzdWU0NjI2KHNlbGYpOgorICAgICAgICBjID0gY29tcGlsZSgiIyBjb2Rpbmc9bGF0aW4tMVxuXHUwMGM2ID0gJ1x1MDBjNiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnXHhjNiddLCAnXHhjNicpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTMyOTcoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCJhLCBiID0gJ1xVMDAwMTAxMEYnLCAnXFxVMDAwMTAxMEYnIiwgImR1bW15IiwgImV4ZWMiKQorICAgICAgICBkID0ge30KKyAgICAgICAgZXhlYyhjLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgZFsnYiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkWydhJ10pLCBsZW4oZFsnYiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaShkWydhJ10pLCBhc2NpaShkWydiJ10pKQorCisgICAgZGVmIHRlc3RfaXNzdWU3ODIwKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IGNoZWNrX2JvbSgpIHJlc3RvcmVzIGFsbCBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIgaWYKKyAgICAgICAgIyBjaGVja19ib20oKSBmYWlscyBpbiBweWRlYnVnIG1vZGU6IGEgYnVmZmVyIHN0YXJ0cyB3aXRoIHRoZSBmaXJzdAorICAgICAgICAjIGJ5dGUgb2YgYSB2YWxpZCBCT00sIGJ1dCBuZXh0IGJ5dGVzIGFyZSBkaWZmZXJlbnQKKworICAgICAgICAjIG9uZSBieXRlIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtMTYtTEUgQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZmZceDIwJykKKworICAgICAgICAjIHR3byBieXRlcyBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTggQk9NCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBldmFsLCBiJ1x4ZWZceGJiXHgyMCcpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZlxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgorICAgICAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnaXNvLTg4NTktMTUnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywKKyAgICAgICAgICAgICAgICAgICAgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdCT00nKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJworICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCisgICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKKworICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQorCisgICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQorCisgICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCisgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgorICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCisKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQorICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQorICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKKworICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQorICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKKyAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKKyAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zc2wucHkgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQppbmRleCAwNmQ0NTk4Li45MmRjMzFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NzbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NzbC5weQpAQCAtNiw2ICs2LDcgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKIGltcG9ydCB0aW1lCitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCBnYwogaW1wb3J0IG9zCiBpbXBvcnQgZXJybm8KQEAgLTE3LDE5ICsxOCwxNSBAQAogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IGZ1bmN0b29scworZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiBzc2wgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNzbCIpCiAKLVBST1RPQ09MUyA9IFsKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjMsCi0gICAgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxCi1dCi1pZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6Ci0gICAgUFJPVE9DT0xTLmFwcGVuZChzc2wuUFJPVE9DT0xfU1NMdjIpCi0KK1BST1RPQ09MUyA9IHNvcnRlZChzc2wuX1BST1RPQ09MX05BTUVTKQogSE9TVCA9IHN1cHBvcnQuSE9TVAogCi1kYXRhX2ZpbGUgPSBsYW1iZGEgbmFtZTogb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG5hbWUpCitkZWYgZGF0YV9maWxlKCpuYW1lKToKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICpuYW1lKQogCiAjIFRoZSBjdXN0b20ga2V5IGFuZCBjZXJ0aWZpY2F0ZSBmaWxlcyB1c2VkIGluIHRlc3Rfc3NsIGFyZSBnZW5lcmF0ZWQKICMgdXNpbmcgTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkuCkBAIC00Nyw2ICs0NCwxNyBAQAogS0VZX1BBU1NXT1JEID0gInNvbWVwYXNzIgogQ0FQQVRIID0gZGF0YV9maWxlKCJjYXBhdGgiKQogQllURVNfQ0FQQVRIID0gb3MuZnNlbmNvZGUoQ0FQQVRIKQorQ0FGSUxFX05FVVJPTklPID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNGUxMjk1YTMuMCIpCitDQUZJTEVfQ0FDRVJUID0gZGF0YV9maWxlKCJjYXBhdGgiLCAiNWVkMzZmOTkuMCIpCisKKworIyBlbXB0eSBDUkwKK0NSTEZJTEUgPSBkYXRhX2ZpbGUoInJldm9jYXRpb24uY3JsIikKKworIyBUd28ga2V5cyBhbmQgY2VydHMgc2lnbmVkIGJ5IHRoZSBzYW1lIENBIChmb3IgU05JIHRlc3RzKQorU0lHTkVEX0NFUlRGSUxFID0gZGF0YV9maWxlKCJrZXljZXJ0My5wZW0iKQorU0lHTkVEX0NFUlRGSUxFMiA9IGRhdGFfZmlsZSgia2V5Y2VydDQucGVtIikKK1NJR05JTkdfQ0EgPSBkYXRhX2ZpbGUoInB5Y2FjZXJ0LnBlbSIpCiAKIFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCA9IGRhdGFfZmlsZSgiaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0iKQogCkBAIC02MCw2ICs2OCw3IEBACiBESEZJTEUgPSBkYXRhX2ZpbGUoImRoNTEyLnBlbSIpCiBCWVRFU19ESEZJTEUgPSBvcy5mc2VuY29kZShESEZJTEUpCiAKKwogZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgogICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTczLDYgKzgyLDIzIEBACiAgICAgIyAwLjkuN2ggb3IgaGlnaGVyCiAgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgNywgOCwgMTUpCiAKK2RlZiBoYXZlX3ZlcmlmeV9mbGFncygpOgorICAgICMgMC45Ljggb3IgaGlnaGVyCisgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgOCwgMCwgMTUpCisKK2RlZiBhc24xdGltZShjZXJ0X3RpbWUpOgorICAgICMgU29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGlnbm9yZSBzZWNvbmRzLCBzZWUgIzE4MjA3CisgICAgIyAwLjkuOC5pCisgICAgaWYgc3NsLl9PUEVOU1NMX0FQSV9WRVJTSU9OID09ICgwLCA5LCA4LCA5LCAxNSk6CisgICAgICAgIGZtdCA9ICIlYiAlZCAlSDolTTolUyAlWSBHTVQiCisgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUoY2VydF90aW1lLCBmbXQpCisgICAgICAgIGR0ID0gZHQucmVwbGFjZShzZWNvbmQ9MCkKKyAgICAgICAgY2VydF90aW1lID0gZHQuc3RyZnRpbWUoZm10KQorICAgICAgICAjICVkIGFkZHMgbGVhZGluZyB6ZXJvIGJ1dCBBU04xX1RJTUVfcHJpbnQoKSB1c2VzIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgaWYgY2VydF90aW1lWzRdID09ICIwIjoKKyAgICAgICAgICAgIGNlcnRfdGltZSA9IGNlcnRfdGltZVs6NF0gKyAiICIgKyBjZXJ0X3RpbWVbNTpdCisKKyAgICByZXR1cm4gY2VydF90aW1lCiAKICMgSXNzdWUgIzk0MTU6IFVidW50dSBoaWphY2tzIHRoZWlyIE9wZW5TU0wgYW5kIGZvcmNlZnVsbHkgZGlzYWJsZXMgU1NMdjIKIGRlZiBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsKGZ1bmMpOgpAQCAtOTAsMTQgKzExNiwxMiBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBmdW5jCiAKK25lZWRzX3NuaSA9IHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLkhBU19TTkksICJTTkkgc3VwcG9ydCBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisKIAogY2xhc3MgQmFzaWNTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6Ci0gICAgICAgICNzc2wuUFJPVE9DT0xfU1NMdjIKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMwotICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1RMU3YxCiAgICAgICAgIHNzbC5DRVJUX05PTkUKICAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUwKICAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQKQEAgLTE3NSw4ICsxOTksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uJyksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdsb2NhbGhvc3QnKSwpKQogICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sICdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEJlZm9yZSddLCAnT2N0ICA4IDIzOjAxOjU2IDIwMTAgR01UJykKKyAgICAgICAgIyBOb3RlIHRoZSBuZXh0IHRocmVlIGFzc2VydHMgd2lsbCBmYWlsIGlmIHRoZSBrZXlzIGFyZSByZWdlbmVyYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEFmdGVyJ10sIGFzbjF0aW1lKCdPY3QgIDUgMjM6MDE6NTYgMjAyMCBHTVQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydub3RCZWZvcmUnXSwgYXNuMXRpbWUoJ09jdCAgOCAyMzowMTo1NiAyMDEwIEdNVCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ3NlcmlhbE51bWJlciddLCAnRDdDNzM4MTkxOUFGQzI0RScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc3ViamVjdCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCkBAIC0xOTQsNiArMjE5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnRE5TJywgJ3Byb2plY3RzLmRldmVsb3Blci5ub2tpYS5jb20nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvamVjdHMuZm9ydW0ubm9raWEuY29tJykpCiAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICMgZXh0cmEgT0NTUCBhbmQgQUlBIGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ09DU1AnXSwgKCdodHRwOi8vb2NzcC52ZXJpc2lnbi5jb20nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY2FJc3N1ZXJzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1haWEudmVyaXNpZ24uY29tL1NWUkludGxHMy5jZXInLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vU1ZSSW50bC1HMy1jcmwudmVyaXNpZ24uY29tL1NWUkludGxHMy5jcmwnLCkpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9jZXJ0X0NWRV8yMDEzXzQyMzgoc2VsZik6CiAgICAgICAgIHAgPSBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydChOVUxMQllURUNFUlQpCkBAIC0yNzYsMTUgKzMwNywxNSBAQAogCiAgICAgZGVmIHRlc3Rfd3JhcHBlZF91bmNvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBNZXRob2RzIG9uIGFuIHVuY29ubmVjdGVkIFNTTFNvY2tldCBwcm9wYWdhdGUgdGhlIG9yaWdpbmFsCi0gICAgICAgICMgc29ja2V0LmVycm9yIHJhaXNlIGJ5IHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCisgICAgICAgICMgT1NFcnJvciByYWlzZSBieSB0aGUgdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0LgogICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKICAgICAgICAgd2l0aCBzc2wud3JhcF9zb2NrZXQocykgYXMgc3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3YsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdmZyb21faW50bywgYnl0ZWFycmF5KGIneCcpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kLCBiJ3gnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5zZW5kdG8sIGIneCcsICgnMC4wLjAuMCcsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdiwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3ZfaW50bywgYnl0ZWFycmF5KGIneCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdmZyb20sIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2ZnJvbV9pbnRvLCBieXRlYXJyYXkoYid4JyksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5zZW5kLCBiJ3gnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3Muc2VuZHRvLCBiJ3gnLCAoJzAuMC4wLjAnLCAwKSkKIAogICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzg1MjQ6IHdoZW4gY3JlYXRpbmcgYW4gU1NMIHNvY2tldCwgdGhlIHRpbWVvdXQgb2YgdGhlCkBAIC0zMDksMTUgKzM0MCwxNSBAQAogICAgICAgICB3aXRoIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT1DRVJURklMRSkgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImNhbid0IGNvbm5lY3QgaW4gc2VydmVyLXNpZGUgbW9kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QsIChIT1NULCA4MDgwKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPUNFUlRGSUxFLCBrZXlmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0KHNvY2ssIGNlcnRmaWxlPVdST05HQ0VSVCwga2V5ZmlsZT1XUk9OR0NFUlQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCkBAIC00ODksMTUgKzUyMCwxMjEgQEAKICAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZik6CisgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhdGhzKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhdGhzLCBzc2wuRGVmYXVsdFZlcmlmeVBhdGhzKQorCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgcGF0aHMgPSBzc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FmaWxlLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMuY2FwYXRoLCBDQVBBVEgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY2VydGlmaWNhdGVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3NsLmVudW1fY2VydGlmaWNhdGVzKCJST09UIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgc3NsLmVudW1fY2VydGlmaWNhdGVzLCAiIikKKworICAgICAgICB0cnVzdF9vaWRzID0gc2V0KCkKKyAgICAgICAgZm9yIHN0b3JlbmFtZSBpbiAoIkNBIiwgIlJPT1QiKToKKyAgICAgICAgICAgIHN0b3JlID0gc3NsLmVudW1fY2VydGlmaWNhdGVzKHN0b3JlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdG9yZSwgbGlzdCkKKyAgICAgICAgICAgIGZvciBlbGVtZW50IGluIHN0b3JlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbGVtZW50KSwgMykKKyAgICAgICAgICAgICAgICBjZXJ0LCBlbmMsIHRydXN0ID0gZWxlbWVudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjZXJ0LCBieXRlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVuYywgeyJ4NTA5X2FzbiIsICJwa2NzXzdfYXNuIn0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRydXN0LCAoc2V0LCBib29sKSkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRydXN0LCBzZXQpOgorICAgICAgICAgICAgICAgICAgICB0cnVzdF9vaWRzLnVwZGF0ZSh0cnVzdCkKKworICAgICAgICBzZXJ2ZXJBdXRoID0gIjEuMy42LjEuNS41LjcuMy4xIgorICAgICAgICBzZWxmLmFzc2VydEluKHNlcnZlckF1dGgsIHRydXN0X29pZHMpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3Mgc3BlY2lmaWMiKQorICAgIGRlZiB0ZXN0X2VudW1fY3JscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NybHMoIkNBIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY3JscykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBzc2wuZW51bV9jcmxzLCAiIikKKworICAgICAgICBjcmxzID0gc3NsLmVudW1fY3JscygiQ0EiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY3JscywgbGlzdCkKKyAgICAgICAgZm9yIGVsZW1lbnQgaW4gY3JsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50LCB0dXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVsZW1lbnQpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVsZW1lbnRbMF0sIGJ5dGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtZW50WzFdLCB7Ing1MDlfYXNuIiwgInBrY3NfN19hc24ifSkKKworCisgICAgZGVmIHRlc3RfYXNuMW9iamVjdChzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSAoMTI5LCAnc2VydmVyQXV0aCcsICdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicsCisgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMScpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwubmlkLCAxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLnNob3J0bmFtZSwgJ3NlcnZlckF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5sb25nbmFtZSwgJ1RMUyBXZWIgU2VydmVyIEF1dGhlbnRpY2F0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwub2lkLCAnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdCwgJ3NlcnZlckF1dGgnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsLCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkLCAtMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAxMDAwMDAiKToKKyAgICAgICAgICAgIHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKDEwMDAwMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb2JqID0gc3NsLl9BU04xT2JqZWN0LmZyb21uaWQoaSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5uaWQsIGludCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLnNob3J0bmFtZSwgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoubG9uZ25hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLm9pZCwgKHN0ciwgdHlwZShOb25lKSkpCisKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnc2VydmVyQXV0aCcpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJzEuMy42LjEuNS41LjcuMy4xJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAidW5rbm93biBvYmplY3QgJ3NlcnZlcmF1dGgnIik6CisgICAgICAgICAgICBzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ3NlcnZlcmF1dGgnKQorCisgICAgZGVmIHRlc3RfcHVycG9zZV9lbnVtKHNlbGYpOgorICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5uaWQsIDEyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5zaG9ydG5hbWUsICdzZXJ2ZXJBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5TRVJWRVJfQVVUSC5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjEnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjInKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCwgdmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm5pZCwgMTMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILnNob3J0bmFtZSwgJ2NsaWVudEF1dGgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxLjMuNi4xLjUuNS43LjMuMicpCisKKwogY2xhc3MgQ29udGV4dFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKLSAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MikKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6CisgICAgICAgICAgICBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuU1NMQ29udGV4dCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlNTTENvbnRleHQsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgNDIpCkBAIC01MzYsNyArNjczLDcgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMgPSAwCiAKLSAgICBkZWYgdGVzdF92ZXJpZnkoc2VsZik6CisgICAgZGVmIHRlc3RfdmVyaWZ5X21vZGUoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgIyBEZWZhdWx0IHZhbHVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQpAQCAtNTUxLDEzICs2ODgsMzIgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IDQyCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX3ZlcmlmeV9mbGFncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJpZnlfZmxhZ3MgbmVlZCBPcGVuU1NMID4gMC45LjgiKQorICAgIGRlZiB0ZXN0X3ZlcmlmeV9mbGFncyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAjIGRlZmF1bHQgdmFsdWUgYnkgT3BlblNTTAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLCBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTikKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfREVGQVVMVAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKyAgICAgICAgIyBzdXBwb3J0cyBhbnkgdmFsdWUKKyAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGIHwgc3NsLlZFUklGWV9YNTA5X1NUUklDVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY3R4LnZlcmlmeV9mbGFncyA9IE5vbmUKKwogICAgIGRlZiB0ZXN0X2xvYWRfY2VydF9jaGFpbihzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAjIENvbWJpbmVkIGtleSBhbmQgY2VydCBpbiBhIHNpbmdsZSBmaWxlCiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUsIGtleWZpbGU9Q0VSVEZJTEUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfY2VydF9jaGFpbiwga2V5ZmlsZT1DRVJURklMRSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oV1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgpAQCAtNjQxLDggKzc5Nyw4IEBACiAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQllURVNfQ0VSVEZJTEUpCiAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPUJZVEVTX0NFUlRGSUxFLCBjYXBhdGg9Tm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIE5vbmUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoV1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgpAQCAtNjUzLDYgKzgwOSw2NCBAQAogICAgICAgICAjIElzc3VlICMxMDk4OTogY3Jhc2ggaWYgdGhlIHNlY29uZCBhcmd1bWVudCB0eXBlIGlzIGludmFsaWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBUcnVlKQogCisgICAgZGVmIHRlc3RfbG9hZF92ZXJpZnlfY2FkYXRhKHNlbGYpOgorICAgICAgICAjIHRlc3QgY2FkYXRhCisgICAgICAgIHdpdGggb3BlbihDQUZJTEVfQ0FDRVJUKSBhcyBmOgorICAgICAgICAgICAgY2FjZXJ0X3BlbSA9IGYucmVhZCgpCisgICAgICAgIGNhY2VydF9kZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQoY2FjZXJ0X3BlbSkKKyAgICAgICAgd2l0aCBvcGVuKENBRklMRV9ORVVST05JTykgYXMgZjoKKyAgICAgICAgICAgIG5ldXJvbmlvX3BlbSA9IGYucmVhZCgpCisgICAgICAgIG5ldXJvbmlvX2RlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChuZXVyb25pb19wZW0pCisKKyAgICAgICAgIyB0ZXN0IFBFTQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAwKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9bmV1cm9uaW9fcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKyAgICAgICAgIyBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19wZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgY29tYmluZWQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9ICJcbiIuam9pbigoY2FjZXJ0X3BlbSwgbmV1cm9uaW9fcGVtKSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y29tYmluZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgd2l0aCBqdW5rIGFyb3VuZCB0aGUgY2VydHMKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9IFsiaGVhZCIsIGNhY2VydF9wZW0sICJvdGhlciIsIG5ldXJvbmlvX3BlbSwgImFnYWluIiwKKyAgICAgICAgICAgICAgICAgICAgbmV1cm9uaW9fcGVtLCAidGFpbCJdCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPSJcbiIuam9pbihjb21iaW5lZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgdGVzdCBERVIKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfZGVyKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1uZXVyb25pb19kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorICAgICAgICAjIGNlcnQgYWxyZWFkeSBpbiBoYXNoIHRhYmxlCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNhY2VydF9kZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgY29tYmluZWQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb21iaW5lZCA9IGIiIi5qb2luKChjYWNlcnRfZGVyLCBuZXVyb25pb19kZXIpKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jb21iaW5lZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisKKyAgICAgICAgIyBlcnJvciBjYXNlcworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgY2FkYXRhPW9iamVjdCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAibm8gc3RhcnQgbGluZSIpOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9ImJyb2tlbiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJub3QgZW5vdWdoIGRhdGEiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWIiYnJva2VuIikKKworCiAgICAgZGVmIHRlc3RfbG9hZF9kaF9wYXJhbXMoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgY3R4LmxvYWRfZGhfcGFyYW1zKERIRklMRSkKQEAgLTcwMCw2ICs5MTQsMTU4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfZWNkaF9jdXJ2ZSwgYiJmb28iKQogCisgICAgQG5lZWRzX3NuaQorICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorCisgICAgICAgICMgc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sgZXhwZWN0cyBhIGNhbGxhYmxlLCBvciBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaywgY3R4KQorCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhOb25lKQorICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soZHVtbXljYWxsYmFjaykKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgUmVmZXJlbmNlIGN5Y2xlcyB0aHJvdWdoIHRoZSBzZXJ2ZXJuYW1lIGNhbGxiYWNrIGFyZSBkZXRlY3RlZAorICAgICAgICAjIGFuZCBjbGVhcmVkLgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGRlZiBkdW1teWNhbGxiYWNrKHNvY2ssIHNlcnZlcm5hbWUsIGN0eCwgY3ljbGU9Y3R4KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGR1bW15Y2FsbGJhY2spCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoY3R4KQorICAgICAgICBkZWwgY3R4LCBkdW1teWNhbGxiYWNrCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jZXJ0X3N0b3JlX3N0YXRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDB9KQorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAwfSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMX0pCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAxLCAnY3JsJzogMCwgJ3g1MDknOiAyfSkKKworICAgIGRlZiB0ZXN0X2dldF9jYV9jZXJ0cyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwgW10pCisgICAgICAgICMgQ0VSVEZJTEUgaXMgbm90IGZsYWdnZWQgYXMgWDUwOXYzIEJhc2ljIENvbnN0cmFpbnRzOiBDQTpUUlVFCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBidXQgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUIGlzIGEgQ0EgY2VydAorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksCisgICAgICAgICAgICBbeydpc3N1ZXInOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuY2FjZXJ0Lm9yZycpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdDQSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICdub3RBZnRlcic6IGFzbjF0aW1lKCdNYXIgMjkgMTI6Mjk6NDkgMjAzMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ25vdEJlZm9yZSc6IGFzbjF0aW1lKCdNYXIgMzAgMTI6Mjk6NDkgMjAwMyBHTVQnKSwKKyAgICAgICAgICAgICAgJ3NlcmlhbE51bWJlcic6ICcwMCcsCisgICAgICAgICAgICAgICdjcmxEaXN0cmlidXRpb25Qb2ludHMnOiAoJ2h0dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybCcsKSwKKyAgICAgICAgICAgICAgJ3N1YmplY3QnOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdSb290IENBJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uYWxVbml0TmFtZScsICdodHRwOi8vd3d3LmNhY2VydC5vcmcnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBIENlcnQgU2lnbmluZyBBdXRob3JpdHknKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdlbWFpbEFkZHJlc3MnLCAnc3VwcG9ydEBjYWNlcnQub3JnJyksKSksCisgICAgICAgICAgICAgICd2ZXJzaW9uJzogM31dKQorCisgICAgICAgIHdpdGggb3BlbihTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpIGFzIGY6CisgICAgICAgICAgICBwZW0gPSBmLnJlYWQoKQorICAgICAgICBkZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQocGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoVHJ1ZSksIFtkZXJdKQorCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cyhzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF9kZWZhdWx0X2NlcnRzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsICdTRVJWRVJfQVVUSCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIHdpdGggb3BlbihTSUdOSU5HX0NBKSBhcyBmOgorICAgICAgICAgICAgY2FkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgY3R4ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoY2FmaWxlPVNJR05JTkdfQ0EsIGNhcGF0aD1DQVBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZGF0YT1jYWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgZGVmIHRlc3RfX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3R4LmNoZWNrX2hvc3RuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChwdXJwb3NlPXNzbC5QdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgIGRlZiB0ZXN0X2NoZWNrX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3R4LmNoZWNrX2hvc3RuYW1lKQorCisgICAgICAgICMgUmVxdWlyZXMgQ0VSVF9SRVFVSVJFRCBvciBDRVJUX09QVElPTkFMCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3R4LmNoZWNrX2hvc3RuYW1lKQorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfT1BUSU9OQUwKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY3R4LmNoZWNrX2hvc3RuYW1lKQorCisgICAgICAgICMgQ2Fubm90IHNldCBDRVJUX05PTkUgd2l0aCBjaGVja19ob3N0bmFtZSBlbmFibGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9OT05FCisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IEZhbHNlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY3R4LmNoZWNrX2hvc3RuYW1lKQorCiAKIGNsYXNzIFNTTEVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC05MDMsNiArMTI2OSwyOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2Nvbm5lY3RfY2FkYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX0NBQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPXBlbSkKKyAgICAgICAgICAgIHdpdGggY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKSBhcyBzOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisKKyAgICAgICAgICAgICMgc2FtZSB3aXRoIERFUgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1kZXIpCisgICAgICAgICAgICB3aXRoIGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkgYXMgczoKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICJudCIsICJDYW4ndCB1c2UgYSBzb2NrZXQgYXMgYSBmaWxlIHVuZGVyIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X21ha2VmaWxlX2Nsb3NlKHNlbGYpOgogICAgICAgICAjIElzc3VlICM1MjM4OiBjcmVhdGluZyBhIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBtYWtlZmlsZSgpIHNob3VsZG4ndApAQCAtMTAxNSw2ICsxNDAzLDM1IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzX2NhcGF0aChzZWxmKToKKyAgICAgICAgIyBjYXBhdGggY2VydHMgYXJlIGxvYWRlZCBvbiByZXF1ZXN0CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FwYXRoPUNBUEFUSCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgICAgIHMgPSBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCisgICAgICAgICAgICBzLmNvbm5lY3QoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGN0eC5nZXRfY2FfY2VydHMoKSksIDEpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X3NldGdldChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb250ZXh0IG9mIGEgY29ubmVjdGVkIHNvY2tldCBjYW4gYmUgcmVwbGFjZWQuCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICBjdHgxID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY3R4MiA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHdpdGggY3R4MS53cmFwX3NvY2tldChzKSBhcyBzczoKKyAgICAgICAgICAgICAgICBzcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MSkKKyAgICAgICAgICAgICAgICBzcy5jb250ZXh0ID0gY3R4MgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuY29udGV4dCwgY3R4MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNzLl9zc2xvYmouY29udGV4dCwgY3R4MikKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTExNDIsNyArMTU1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6IHJlYWQgJXIgKCVzKSwgc2VuZGluZyBiYWNrICVyICglcykuLi5cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChtc2csIGN0eXBlLCBtc2cubG93ZXIoKSwgY3R5cGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobXNnLmxvd2VyKCkpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuY2hhdHR5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9lcnJvcigiVGVzdCBzZXJ2ZXIgZmFpbHVyZTpcbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTEyNTIsNyArMTY2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTM1NiwxOSArMTc3MywxOSBAQAogICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5TU0xFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbnNvY2tldC5lcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHg6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuT1NFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgeC5lcnJubyAhPSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcSU9FcnJvciBpcyAlc1xuIiAlIHN0cih4KSkKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXE9TRXJyb3IgaXMgJXNcbiIgJSBzdHIoeCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJVc2Ugb2YgaW52YWxpZCBjZXJ0IHNob3VsZCBoYXZlIGZhaWxlZCEiKQogCiAgICAgZGVmIHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsIGluZGF0YT1iIkZPT1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzbmlfbmFtZT1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIExhdW5jaCBhIHNlcnZlciwgY29ubmVjdCBhIGNsaWVudCB0byBpdCBhbmQgdHJ5IHZhcmlvdXMgcmVhZHMKICAgICAgICAgYW5kIHdyaXRlcy4KQEAgLTEzNzgsNyArMTc5NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICB3aXRoIGNsaWVudF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgIHdpdGggY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c25pX25hbWUpIGFzIHM6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCiAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBbaW5kYXRhLCBieXRlYXJyYXkoaW5kYXRhKSwgbWVtb3J5dmlldyhpbmRhdGEpXToKICAgICAgICAgICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKQEAgLTE0MDIsNiArMTgyMCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdHMudXBkYXRlKHsKICAgICAgICAgICAgICAgICAgICAgJ2NvbXByZXNzaW9uJzogcy5jb21wcmVzc2lvbigpLAogICAgICAgICAgICAgICAgICAgICAnY2lwaGVyJzogcy5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BlZXJjZXJ0Jzogcy5nZXRwZWVyY2VydCgpLAogICAgICAgICAgICAgICAgICAgICAnY2xpZW50X25wbl9wcm90b2NvbCc6IHMuc2VsZWN0ZWRfbnBuX3Byb3RvY29sKCkKICAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQpAQCAtMTQyNywxMiArMTg0NiwxNSBAQAogICAgICAgICBjbGllbnRfY29udGV4dC5vcHRpb25zID0gc3NsLk9QX0FMTCB8IGNsaWVudF9vcHRpb25zCiAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc2VydmVyX3Byb3RvY29sKQogICAgICAgICBzZXJ2ZXJfY29udGV4dC5vcHRpb25zID0gc3NsLk9QX0FMTCB8IHNlcnZlcl9vcHRpb25zCisKKyAgICAgICAgIyBOT1RFOiB3ZSBtdXN0IGVuYWJsZSAiQUxMIiBjaXBoZXJzIG9uIHRoZSBjbGllbnQsIG90aGVyd2lzZSBhbgorICAgICAgICAjIFNTTHYyMyBjbGllbnQgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2MikKKyAgICAgICAgIyBzdGFydGluZyBmcm9tIE9wZW5TU0wgMS4wLjAgKHNlZSBpc3N1ZSAjODMyMikuCisgICAgICAgIGlmIGNsaWVudF9jb250ZXh0LnByb3RvY29sID09IHNzbC5QUk9UT0NPTF9TU0x2MjM6CisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5zZXRfY2lwaGVycygiQUxMIikKKwogICAgICAgICBmb3IgY3R4IGluIChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQpOgogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gY2VydHNyZXFzCi0gICAgICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMsIG90aGVyd2lzZSBhbiBTU0x2MjMgY2xpZW50Ci0gICAgICAgICAgICAjIHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpIHN0YXJ0aW5nIGZyb20KLSAgICAgICAgICAgICMgT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KLSAgICAgICAgICAgIGN0eC5zZXRfY2lwaGVycygiQUxMIikKICAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQogICAgICAgICB0cnk6CkBAIC0xNDQzLDcgKzE4NjUsNyBAQAogICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3Mgb3IgZS5lcnJubyAhPSBlcnJuby5FQ09OTlJFU0VUOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGVsc2U6CkBAIC0xNDYyLDEwICsxODg0LDExIEBACiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgZm9yIHByb3RvY29sIGluIFBST1RPQ09MUzoKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCi0gICAgICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCi0gICAgICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNvbnRleHQsIGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG9jb2w9c3NsLl9QUk9UT0NPTF9OQU1FU1twcm90b2NvbF0pOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQocHJvdG9jb2wpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PVRydWUpCiAKICAgICAgICAgZGVmIHRlc3RfZ2V0cGVlcmNlcnQoc2VsZik6CiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC0xNDc2LDggKzE4OTksMTQgQEAKICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQogICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2hhdHR5PUZhbHNlKQogICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6Ci0gICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAjIGdldHBlZXJjZXJ0KCkgcmFpc2UgVmFsdWVFcnJvciB3aGlsZSB0aGUgaGFuZHNoYWtlIGlzbid0CisgICAgICAgICAgICAgICAgIyBkb25lLgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHMuZG9faGFuZHNoYWtlKCkKICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQogICAgICAgICAgICAgICAgIGNpcGhlciA9IHMuY2lwaGVyKCkKQEAgLTE0OTksNiArMTkyOCw4NiBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhiZWZvcmUsIGFmdGVyKQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfdmVyaWZ5X2ZsYWdzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmlmeV9mbGFncyBuZWVkIE9wZW5TU0wgPiAwLjkuOCIpCisgICAgICAgIGRlZiB0ZXN0X2NybF9jaGVjayhzZWxmKToKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKworICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCkKKworICAgICAgICAgICAgIyBWRVJJRllfREVGQVVMVCBzaG91bGQgcGFzcworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCisgICAgICAgICAgICAjIFZFUklGWV9DUkxfQ0hFQ0tfTEVBRiB3aXRob3V0IGEgbG9hZGVkIENSTCBmaWxlIGZhaWxzCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9mbGFncyB8PSBzc2wuVkVSSUZZX0NSTF9DSEVDS19MRUFGCisKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaWNhdGUgdmVyaWZ5IGZhaWxlZCIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisKKyAgICAgICAgICAgICMgbm93IGxvYWQgYSBDUkwgZmlsZS4gVGhlIENSTCBmaWxlIGlzIHNpZ25lZCBieSB0aGUgQ0EuCisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDUkxGSUxFKQorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCisKKyAgICAgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorCisgICAgICAgICAgICAjIGNvcnJlY3QgaG9zdG5hbWUgc2hvdWxkIHZlcmlmeQorICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSJsb2NhbGhvc3QiKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCisKKyAgICAgICAgICAgICMgaW5jb3JyZWN0IGhvc3RuYW1lIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0iaW52YWxpZCIpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuQ2VydGlmaWNhdGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAnaW52YWxpZCcgZG9lc24ndCBtYXRjaCAnbG9jYWxob3N0JyIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisKKyAgICAgICAgICAgICMgbWlzc2luZyBzZXJ2ZXJfaG9zdG5hbWUgYXJnIHNob3VsZCBjYXVzZSBhbiBleGNlcHRpb24sIHRvbworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2tfaG9zdG5hbWUgcmVxdWlyZXMgc2VydmVyX2hvc3RuYW1lIik6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LndyYXBfc29ja2V0KHMpCisKICAgICAgICAgZGVmIHRlc3RfZW1wdHlfY2VydChzZWxmKToKICAgICAgICAgICAgICIiIkNvbm5lY3Rpbmcgd2l0aCBhbiBlbXB0eSBjZXJ0IGZpbGUiIiIKICAgICAgICAgICAgIGJhZF9jZXJ0X3Rlc3Qob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLApAQCAtMTUxNyw3ICsyMDI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWRrZXkucGVtIikpCiAKICAgICAgICAgZGVmIHRlc3RfcnVkZV9zaHV0ZG93bihzZWxmKToKLSAgICAgICAgICAgICIiIkEgYnJ1dGFsIHNodXRkb3duIG9mIGFuIFNTTCBzZXJ2ZXIgc2hvdWxkIHJhaXNlIGFuIElPRXJyb3IKKyAgICAgICAgICAgICIiIkEgYnJ1dGFsIHNodXRkb3duIG9mIGFuIFNTTCBzZXJ2ZXIgc2hvdWxkIHJhaXNlIGFuIE9TRXJyb3IKICAgICAgICAgICAgIGluIHRoZSBjbGllbnQgd2hlbiBhdHRlbXB0aW5nIGhhbmRzaGFrZS4KICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgbGlzdGVuZXJfcmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQpAQCAtMTU0NSw3ICsyMDU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJfZ29uZS53YWl0KCkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoYykKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb25uZWN0aW5nIHRvIGNsb3NlZCBTU0wgc29ja2V0IHNob3VsZCBoYXZlIGZhaWxlZCcpCkBAIC0xNTg4LDcgKzIwOTcsNyBAQAogICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKHNzbC5TU0xFcnJvciwgc29ja2V0LmVycm9yKSBhcyB4OgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgICAgICMgdGhpcyBmYWlscyBvbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wgKDAuOS43bCwgZm9yIGluc3RhbmNlKQogICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKApAQCAtMTY0OCw2ICsyMTU3LDQ5IEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjEpCiAKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8xIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjEgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8xKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjEgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19UTFN2MV8xKQorCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxXzEsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgRmFsc2UpCisKKworICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAorICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNzbCwgIlBST1RPQ09MX1RMU3YxXzIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRMUyB2ZXJzaW9uIDEuMiBub3Qgc3VwcG9ydGVkLiIpCisgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3Rsc3YxXzIoc2VsZik6CisgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGEgVExTdjEuMiBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zLgorICAgICAgICAgICAgICAgVGVzdGluZyBhZ2FpbnN0IG9sZGVyIFRMUyB2ZXJzaW9ucy4iIiIKKyAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vcHRpb25zPXNzbC5PUF9OT19TU0x2M3xzc2wuT1BfTk9fU1NMdjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1NTTHYzfHNzbC5PUF9OT19TU0x2MiwpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMikKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBGYWxzZSkKKwogICAgICAgICBkZWYgdGVzdF9zdGFydHRscyhzZWxmKToKICAgICAgICAgICAgICIiIlN3aXRjaGluZyBmcm9tIGNsZWFyIHRleHQgdG8gZW5jcnlwdGVkIGFuZCBiYWNrIGFnYWluLiIiIgogICAgICAgICAgICAgbXNncyA9IChiIm1zZyAxIiwgYiJNU0cgMiIsIGIiU1RBUlRUTFMiLCBiIk1TRyAzIiwgYiJtc2cgNCIsIGIiRU5EVExTIiwgYiJtc2cgNSIsIGIibXNnIDYiKQpAQCAtMTcwOCw3ICsyMjYwLDcgQEAKIAogICAgICAgICBkZWYgdGVzdF9zb2NrZXRzZXJ2ZXIoc2VsZik6CiAgICAgICAgICAgICAiIiJVc2luZyBhIFNvY2tldFNlcnZlciB0byBjcmVhdGUgYW5kIG1hbmFnZSBTU0wgY29ubmVjdGlvbnMuIiIiCi0gICAgICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBDRVJURklMRSkKKyAgICAgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPUNFUlRGSUxFKQogICAgICAgICAgICAgIyB0cnkgdG8gY29ubmVjdAogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ1xuJykKQEAgLTE5NjQsNiArMjUxNiwyMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlbW90ZSwgc3NsLlNTTFNvY2tldCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVlciwgY2xpZW50X2FkZHIpCiAKKyAgICAgICAgZGVmIHRlc3RfZ2V0cGVlcmNlcnRfZW5vdGNvbm4oc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgc29jay5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT1RDT05OKQorCisgICAgICAgIGRlZiB0ZXN0X2RvX2hhbmRzaGFrZV9lbm90Y29ubihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgc29jazoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT1RDT05OKQorCiAgICAgICAgIGRlZiB0ZXN0X2RlZmF1bHRfY2lwaGVycyhzZWxmKToKICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTk3NSw3ICsyNTQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UpIGFzIHNlcnZlcjoKICAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgotICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChPU0Vycm9yLCBzc2wuU1NMRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigibm8gc2hhcmVkIGNpcGhlciIsIHN0cihzZXJ2ZXIuY29ubl9lcnJvcnNbMF0pKQogCkBAIC0yMTA4LDYgKzI2NzQsMTI0IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihzdGF0c1snc2VydmVyX25wbl9wcm90b2NvbHMnXSkgZWxzZSAnbm90aGluZycKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9yZXN1bHQsIGV4cGVjdGVkLCBtc2cgJSAoc2VydmVyX3Jlc3VsdCwgInNlcnZlciIpKQogCisgICAgICAgIGRlZiBzbmlfY29udGV4dHMoc2VsZik6CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUpCisgICAgICAgICAgICBvdGhlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgb3RoZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFMikKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKFNJR05JTkdfQ0EpCisgICAgICAgICAgICByZXR1cm4gc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0CisKKyAgICAgICAgZGVmIGNoZWNrX2NvbW1vbl9uYW1lKHNlbGYsIHN0YXRzLCBuYW1lKToKKyAgICAgICAgICAgIGNlcnQgPSBzdGF0c1sncGVlcmNlcnQnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigoKCdjb21tb25OYW1lJywgbmFtZSksKSwgY2VydFsnc3ViamVjdCddKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgc2VydmVybmFtZV9jYihzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKChzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KSkKKyAgICAgICAgICAgICAgICBpZiBzZXJ2ZXJfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc3NsX3NvY2suY29udGV4dCA9IG90aGVyX2NvbnRleHQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlcnZlcm5hbWVfY2IpCisKKyAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICAjIFRoZSBob3N0bmFtZSB3YXMgZmV0Y2hlZCBwcm9wZXJseSwgYW5kIHRoZSBjZXJ0aWZpY2F0ZSB3YXMKKyAgICAgICAgICAgICMgY2hhbmdlZCBmb3IgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbKCJzdXBlcm1lc3NhZ2UiLCBzZXJ2ZXJfY29udGV4dCldKQorICAgICAgICAgICAgIyBDRVJURklMRTQgd2FzIHNlbGVjdGVkCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbW1vbl9uYW1lKHN0YXRzLCAnZmFrZWhvc3RuYW1lJykKKworICAgICAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICAgICAgIyBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggc2VydmVyX25hbWU9Tm9uZQorICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT1Ob25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWyhOb25lLCBzZXJ2ZXJfY29udGV4dCldKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb21tb25fbmFtZShzdGF0cywgJ2xvY2FsaG9zdCcpCisKKyAgICAgICAgICAgICMgQ2hlY2sgZGlzYWJsaW5nIHRoZSBjYWxsYmFjaworICAgICAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soTm9uZSkKKworICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nbm90ZnVubnknKQorICAgICAgICAgICAgIyBDZXJ0aWZpY2F0ZSBkaWRuJ3QgY2hhbmdlCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbW1vbl9uYW1lKHN0YXRzLCAnbG9jYWxob3N0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtdKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX2FsZXJ0KHNlbGYpOgorICAgICAgICAgICAgIyBSZXR1cm5pbmcgYSBUTFMgYWxlcnQgaXMgcmVmbGVjdGVkIHRvIHRoZSBjb25uZWN0aW5nIGNsaWVudAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2JfcmV0dXJuaW5nX2FsZXJ0KHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3NsLkFMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3JldHVybmluZ19hbGVydCkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdUTFNWMV9BTEVSVF9BQ0NFU1NfREVOSUVEJykKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja19yYWlzaW5nKHNlbGYpOgorICAgICAgICAgICAgIyBSYWlzaW5nIGZhaWxzIHRoZSBjb25uZWN0aW9uIHdpdGggYSBUTFMgaGFuZHNoYWtlIGZhaWx1cmUgYWxlcnQuCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBjYl9yYWlzaW5nKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3JhaXNpbmcpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbSwgXAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnU1NMVjNfQUxFUlRfSEFORFNIQUtFX0ZBSUxVUkUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiWmVyb0RpdmlzaW9uRXJyb3IiLCBzdGRlcnIuZ2V0dmFsdWUoKSkKKworICAgICAgICBAbmVlZHNfc25pCisgICAgICAgIGRlZiB0ZXN0X3NuaV9jYWxsYmFja193cm9uZ19yZXR1cm5fdHlwZShzZWxmKToKKyAgICAgICAgICAgICMgUmV0dXJuaW5nIHRoZSB3cm9uZyByZXR1cm4gdHlwZSB0ZXJtaW5hdGVzIHRoZSBUTFMgY29ubmVjdGlvbgorICAgICAgICAgICAgIyB3aXRoIGFuIGludGVybmFsIGVycm9yIGFsZXJ0LgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQsIG90aGVyX2NvbnRleHQsIGNsaWVudF9jb250ZXh0ID0gc2VsZi5zbmlfY29udGV4dHMoKQorCisgICAgICAgICAgICBkZWYgY2Jfd3JvbmdfcmV0dXJuX3R5cGUoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIHJldHVybiAiZm9vIgorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2Jfd3JvbmdfcmV0dXJuX3R5cGUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbSwgXAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdzdXBlcm1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnVExTVjFfQUxFUlRfSU5URVJOQUxfRVJST1InKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiVHlwZUVycm9yIiwgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZF93cml0ZV9hZnRlcl9jbG9zZV9yYWlzZXNfdmFsdWVycm9yKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjaGF0dHk9RmFsc2UpCisKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVhZCwgMTAyNCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLndyaXRlLCBiJ2hlbGxvJykKKwogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9RmFsc2UpOgogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTIxMjcsMTAgKzI4MTEsMTYgQEAKICAgICAgICAgICAgIChzc2wuT1BFTlNTTF9WRVJTSU9OLCBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8pKQogICAgICAgICBwcmludCgiICAgICAgICAgIHVuZGVyICVzIiAlIHBsYXQpCiAgICAgICAgIHByaW50KCIgICAgICAgICAgSEFTX1NOSSA9ICVyIiAlIHNzbC5IQVNfU05JKQorICAgICAgICBwcmludCgiICAgICAgICAgIE9QX0FMTCA9IDB4JTh4IiAlIHNzbC5PUF9BTEwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50KCIgICAgICAgICAgT1BfTk9fVExTdjFfMSA9IDB4JTh4IiAlIHNzbC5PUF9OT19UTFN2MV8xKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCiAKICAgICBmb3IgZmlsZW5hbWUgaW4gWwogICAgICAgICBDRVJURklMRSwgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJULCBCWVRFU19DRVJURklMRSwKICAgICAgICAgT05MWUNFUlQsIE9OTFlLRVksIEJZVEVTX09OTFlDRVJULCBCWVRFU19PTkxZS0VZLAorICAgICAgICBTSUdORURfQ0VSVEZJTEUsIFNJR05FRF9DRVJURklMRTIsIFNJR05JTkdfQ0EsCiAgICAgICAgIEJBRENFUlQsIEJBREtFWSwgRU1QVFlDRVJUXToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlICVyIiAlIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CmluZGV4IGViM2YwN2EuLmFmNmNlZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXQucHkKQEAgLTEsOSArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQotaW1wb3J0IHN0YXQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGltcG9ydF9mcmVzaF9tb2R1bGUKIAotY2xhc3MgVGVzdEZpbGVtb2RlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2Nfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBmcmVzaD1bJ19zdGF0J10pCitweV9zdGF0ID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnc3RhdCcsIGJsb2NrZWQ9Wydfc3RhdCddKQorCitjbGFzcyBUZXN0RmlsZW1vZGU6CisgICAgc3RhdG1vZCA9IE5vbmUKKwogICAgIGZpbGVfZmxhZ3MgPSB7J1NGX0FQUEVORCcsICdTRl9BUkNISVZFRCcsICdTRl9JTU1VVEFCTEUnLCAnU0ZfTk9VTkxJTksnLAogICAgICAgICAgICAgICAgICAgJ1NGX1NOQVBTSE9UJywgJ1VGX0FQUEVORCcsICdVRl9DT01QUkVTU0VEJywgJ1VGX0hJRERFTicsCiAgICAgICAgICAgICAgICAgICAnVUZfSU1NVVRBQkxFJywgJ1VGX05PRFVNUCcsICdVRl9OT1VOTElOSycsICdVRl9PUEFRVUUnfQpAQCAtNjMsMTcgKzY3LDE3IEBACiAgICAgICAgICAgICBzdF9tb2RlID0gb3MubHN0YXQoZm5hbWUpLnN0X21vZGUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN0X21vZGUgPSBvcy5zdGF0KGZuYW1lKS5zdF9tb2RlCi0gICAgICAgIG1vZGVzdHIgPSBzdGF0LmZpbGVtb2RlKHN0X21vZGUpCisgICAgICAgIG1vZGVzdHIgPSBzZWxmLnN0YXRtb2QuZmlsZW1vZGUoc3RfbW9kZSkKICAgICAgICAgcmV0dXJuIHN0X21vZGUsIG1vZGVzdHIKIAogICAgIGRlZiBhc3NlcnRTX0lTKHNlbGYsIG5hbWUsIG1vZGUpOgogICAgICAgICAjIHRlc3QgZm9ybWF0LCBsc3RyaXAgaXMgZm9yIFNfSUZJRk8KLSAgICAgICAgZm10ID0gZ2V0YXR0cihzdGF0LCAiU19JRiIgKyBuYW1lLmxzdHJpcCgiRiIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JRk1UKG1vZGUpLCBmbXQpCisgICAgICAgIGZtdCA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCAiU19JRiIgKyBuYW1lLmxzdHJpcCgiRiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lGTVQobW9kZSksIGZtdCkKICAgICAgICAgIyB0ZXN0IHRoYXQganVzdCBvbmUgZnVuY3Rpb24gcmV0dXJucyB0cnVlCiAgICAgICAgIHRlc3RuYW1lID0gIlNfSVMiICsgbmFtZQogICAgICAgICBmb3IgZnVuY25hbWUgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBmdW5jbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgZnVuY25hbWUsIE5vbmUpCiAgICAgICAgICAgICBpZiBmdW5jIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgaWYgZnVuY25hbWUgPT0gdGVzdG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZnVuY25hbWUpCkBAIC05MSwzNSArOTUsMzUgQEAKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy1yd3gtLS0tLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYVSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hVKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDcwKQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLXJ3eC0tLScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWEcpCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG8wMDcpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctLS0tLS0tcnd4JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWE8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYTykKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzQ0NCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy1yLS1yLS1yLS0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwgMG80NDQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvNzAwKQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyWzozXSwgJy1ydycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JRk1UKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSUZSRUcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lGTVQoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lGUkVHKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBvcy5ta2RpcihURVNURk4pCkBAIC0xNjUsMjUgKzE2OSwzNCBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuc3RhdF9zdHJ1Y3QuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnBlcm1pc3Npb25fYml0cy5pdGVtcygpOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIG1vZHZhbHVlLCBrZXkpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5maWxlX2ZsYWdzOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R2YWx1ZSwgaW50KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZm9ybWF0czoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdF9mdW5jczoKLSAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGZ1bmMpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKDApLCAwKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEZpbGVtb2RlKQorY2xhc3MgVGVzdEZpbGVtb2RlQ1N0YXQoVGVzdEZpbGVtb2RlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhdG1vZCA9IGNfc3RhdAorCisgICAgZm9ybWF0cyA9IFRlc3RGaWxlbW9kZS5mb3JtYXRzIHwgeydTX0lGRE9PUicsICdTX0lGUE9SVCcsICdTX0lGV0hUJ30KKyAgICBmb3JtYXRfZnVuY3MgPSBUZXN0RmlsZW1vZGUuZm9ybWF0X2Z1bmNzIHwgeydTX0lTRE9PUicsICdTX0lTUE9SVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU19JU1dIVCd9CisKKworY2xhc3MgVGVzdEZpbGVtb2RlUHlTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBweV9zdGF0CisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNTg1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXRpc3RpY3MucHkKQEAgLTAsMCArMSwxNTM0IEBACisiIiJUZXN0IHN1aXRlIGZvciBzdGF0aXN0aWNzIG1vZHVsZSwgaW5jbHVkaW5nIGhlbHBlciBOdW1lcmljVGVzdENhc2UgYW5kCithcHByb3hfZXF1YWwgZnVuY3Rpb24uCisKKyIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZG9jdGVzdAoraW1wb3J0IG1hdGgKK2ltcG9ydCByYW5kb20KK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uCisKKworIyBNb2R1bGUgdG8gYmUgdGVzdGVkLgoraW1wb3J0IHN0YXRpc3RpY3MKKworCisjID09PSBIZWxwZXIgZnVuY3Rpb25zIGFuZCBjbGFzcyA9PT0KKworZGVmIF9jYWxjX2Vycm9ycyhhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcnMgYmV0d2VlbiB0d28gbnVtYmVycy4KKworICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCA3NSkKKyAgICAoMjUsIDAuMjUpCisgICAgPj4+IF9jYWxjX2Vycm9ycygxMDAsIDEwMCkKKyAgICAoMCwgMC4wKQorCisgICAgUmV0dXJucyB0aGUgKGFic29sdXRlIGVycm9yLCByZWxhdGl2ZSBlcnJvcikgYmV0d2VlbiB0aGUgdHdvIGFyZ3VtZW50cy4KKyAgICAiIiIKKyAgICBiYXNlID0gbWF4KGFicyhhY3R1YWwpLCBhYnMoZXhwZWN0ZWQpKQorICAgIGFic19lcnIgPSBhYnMoYWN0dWFsIC0gZXhwZWN0ZWQpCisgICAgcmVsX2VyciA9IGFic19lcnIvYmFzZSBpZiBiYXNlIGVsc2UgZmxvYXQoJ2luZicpCisgICAgcmV0dXJuIChhYnNfZXJyLCByZWxfZXJyKQorCisKK2RlZiBhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTFlLTEyLCByZWw9MWUtNyk6CisgICAgIiIiYXBwcm94X2VxdWFsKHgsIHkgWywgdG9sIFssIHJlbF1dKSA9PiBUcnVlfEZhbHNlCisKKyAgICBSZXR1cm4gVHJ1ZSBpZiBudW1iZXJzIHggYW5kIHkgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwsIHRvIHdpdGhpbiBzb21lCisgICAgbWFyZ2luIG9mIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwKKyAgICB3aWxsIGFsc28gY29tcGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgeCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIHkgaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIGxlc3MgdGhhbgorICAgIGFuIGFic29sdXRlIGVycm9yIHRvbCBvciBhIHJlbGF0aXZlIGVycm9yIHJlbCwgd2hpY2hldmVyIGlzIGJpZ2dlci4KKworICAgIElmIGdpdmVuLCBib3RoIHRvbCBhbmQgcmVsIG11c3QgYmUgZmluaXRlLCBub24tbmVnYXRpdmUgbnVtYmVycy4gSWYgbm90CisgICAgZ2l2ZW4sIGRlZmF1bHQgdmFsdWVzIGFyZSB0b2w9MWUtMTIgYW5kIHJlbD0xZS03LgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxLjI1ODksIDEuMjU4NywgdG9sPTAuMDAwMywgcmVsPTApCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDEsIHJlbD0wKQorICAgIEZhbHNlCisKKyAgICBBYnNvbHV0ZSBlcnJvciBpcyBkZWZpbmVkIGFzIGFicyh4LXkpOyBpZiB0aGF0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgIHRvbCwgeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgUmVsYXRpdmUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoKHgteSkveCkgb3IgYWJzKCh4LXkpL3kpLCB3aGljaGV2ZXIgaXMKKyAgICBzbWFsbGVyLCBwcm92aWRlZCB4IG9yIHkgYXJlIG5vdCB6ZXJvLiBJZiB0aGF0IGZpZ3VyZSBpcyBsZXNzIHRoYW4gb3IKKyAgICBlcXVhbCB0byByZWwsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIENvbXBsZXggbnVtYmVycyBhcmUgbm90IGRpcmVjdGx5IHN1cHBvcnRlZC4gSWYgeW91IHdpc2ggdG8gY29tcGFyZSB0bworICAgIGNvbXBsZXggbnVtYmVycywgZXh0cmFjdCB0aGVpciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgYW5kIGNvbXBhcmUgdGhlbQorICAgIGluZGl2aWR1YWxseS4KKworICAgIE5BTnMgYWx3YXlzIGNvbXBhcmUgdW5lcXVhbCwgZXZlbiB3aXRoIHRoZW1zZWx2ZXMuIEluZmluaXRpZXMgY29tcGFyZQorICAgIGFwcHJveGltYXRlbHkgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHNpZ24gKGJvdGggcG9zaXRpdmUgb3IgYm90aAorICAgIG5lZ2F0aXZlKS4gSW5maW5pdGllcyB3aXRoIGRpZmZlcmVudCBzaWducyBjb21wYXJlIHVuZXF1YWw7IHNvIGRvCisgICAgY29tcGFyaXNvbnMgb2YgaW5maW5pdGllcyB3aXRoIGZpbml0ZSBudW1iZXJzLgorICAgICIiIgorICAgIGlmIHRvbCA8IDAgb3IgcmVsIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXJyb3IgdG9sZXJhbmNlcyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpCisgICAgIyBOQU5zIGFyZSBuZXZlciBlcXVhbCB0byBhbnl0aGluZywgYXBwcm94aW1hdGVseSBvciBvdGhlcndpc2UuCisgICAgaWYgbWF0aC5pc25hbih4KSBvciBtYXRoLmlzbmFuKHkpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIE51bWJlcnMgd2hpY2ggY29tcGFyZSBlcXVhbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICBpZiB4ID09IHk6CisgICAgICAgICMgVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZiB0d28gaW5maW5pdGllcyB3aXRoIHRoZSBzYW1lIHNpZ24uCisgICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgbWF0aC5pc2luZih4KSBvciBtYXRoLmlzaW5mKHkpOgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUgc2lnbiwgb3IKKyAgICAgICAgIyBvbmUgaW5maW5pdHkgYW5kIG9uZSBmaW5pdGUgbnVtYmVyLgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIFR3byBmaW5pdGUgbnVtYmVycy4KKyAgICBhY3R1YWxfZXJyb3IgPSBhYnMoeCAtIHkpCisgICAgYWxsb3dlZF9lcnJvciA9IG1heCh0b2wsIHJlbCptYXgoYWJzKHgpLCBhYnMoeSkpKQorICAgIHJldHVybiBhY3R1YWxfZXJyb3IgPD0gYWxsb3dlZF9lcnJvcgorCisKKyMgVGhpcyBjbGFzcyBleGlzdHMgb25seSBhcyBzb21ld2hlcmUgdG8gc3RpY2sgYSBkb2NzdHJpbmcgY29udGFpbmluZworIyBkb2N0ZXN0cy4gVGhlIGZvbGxvd2luZyBkb2NzdHJpbmcgYW5kIHRlc3RzIHdlcmUgb3JpZ2luYWxseSBpbiBhIHNlcGFyYXRlCisjIG1vZHVsZS4gTm93IHRoYXQgaXQgaGFzIGJlZW4gbWVyZ2VkIGluIGhlcmUsIEkgbmVlZCBzb21ld2hlcmUgdG8gaGFuZyB0aGUuCisjIGRvY3N0cmluZy4gVWx0aW1hdGVseSwgdGhpcyBjbGFzcyB3aWxsIGRpZSwgYW5kIHRoZSBpbmZvcm1hdGlvbiBiZWxvdyB3aWxsCisjIGVpdGhlciBiZWNvbWUgcmVkdW5kYW50LCBvciBiZSBtb3ZlZCBpbnRvIG1vcmUgYXBwcm9wcmlhdGUgcGxhY2VzLgorY2xhc3MgX0RvTm90aGluZzoKKyAgICAiIiIKKyAgICBXaGVuIGRvaW5nIG51bWVyaWMgd29yaywgZXNwZWNpYWxseSB3aXRoIGZsb2F0cywgZXhhY3QgZXF1YWxpdHkgaXMgb2Z0ZW4KKyAgICBub3Qgd2hhdCB5b3Ugd2FudC4gRHVlIHRvIHJvdW5kLW9mZiBlcnJvciwgaXQgaXMgb2Z0ZW4gYSBiYWQgaWRlYSB0byB0cnkKKyAgICB0byBjb21wYXJlIGZsb2F0cyB3aXRoIGVxdWFsaXR5LiBJbnN0ZWFkIHRoZSB1c3VhbCBwcm9jZWR1cmUgaXMgdG8gdGVzdAorICAgIHRoZW0gd2l0aCBzb21lIChob3BlZnVsbHkgc21hbGwhKSBhbGxvd2FuY2UgZm9yIGVycm9yLgorCisgICAgVGhlIGBgYXBwcm94X2VxdWFsYGAgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGVpdGhlciBhbiBhYnNvbHV0ZQorICAgIGVycm9yIHRvbGVyYW5jZSwgb3IgYSByZWxhdGl2ZSBlcnJvciwgb3IgYm90aC4KKworICAgIEFic29sdXRlIGVycm9yIHRvbGVyYW5jZXMgYXJlIHNpbXBsZSwgYnV0IHlvdSBuZWVkIHRvIGtub3cgdGhlIG1hZ25pdHVkZQorICAgIG9mIHRoZSBxdWFudGl0aWVzIGJlaW5nIGNvbXBhcmVkOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDUsIDEyLjM0NiwgdG9sPTFlLTMpCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMykgICMgdG9sIGlzIHRvbyBzbWFsbC4KKyAgICBGYWxzZQorCisgICAgUmVsYXRpdmUgZXJyb3JzIGFyZSBtb3JlIHN1aXRhYmxlIHdoZW4gdGhlIHZhbHVlcyB5b3UgYXJlIGNvbXBhcmluZyBjYW4KKyAgICB2YXJ5IGluIG1hZ25pdHVkZToKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHJlbD0xZS00KQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgYnV0IGEgbmFpdmUgaW1wbGVtZW50YXRpb24gb2YgcmVsYXRpdmUgZXJyb3IgdGVzdGluZyBjYW4gcnVuIGludG8gdHJvdWJsZQorICAgIGFyb3VuZCB6ZXJvLgorCisgICAgSWYgeW91IHN1cHBseSBib3RoIGFuIGFic29sdXRlIHRvbGVyYW5jZSBhbmQgYSByZWxhdGl2ZSBlcnJvciwgdGhlCisgICAgY29tcGFyaXNvbiBzdWNjZWVkcyBpZiBlaXRoZXIgaW5kaXZpZHVhbCB0ZXN0IHN1Y2NlZWRzOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHRvbD0xZS0zLCByZWw9MWUtNCkKKyAgICBUcnVlCisKKyAgICAiIiIKKyAgICBwYXNzCisKKworCisjIFdlIHByZWZlciB0aGlzIGZvciB0ZXN0aW5nIG51bWVyaWMgdmFsdWVzIHRoYXQgbWF5IG5vdCBiZSBleGFjdGx5IGVxdWFsLAorIyBhbmQgYXZvaWQgdXNpbmcgVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwsIGJlY2F1c2UgaXQgc3Vja3MgOi0pCisKK2NsYXNzIE51bWVyaWNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0IGNsYXNzIGZvciBudW1lcmljIHdvcmsuCisKKyAgICBUaGlzIHN1YmNsYXNzZXMgVGVzdENhc2UuIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBtZXRob2QKKyAgICBgYFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsYGAsICBgYGFzc2VydEFwcHJveEVxdWFsYGAgaXMgcHJvdmlkZWQuCisgICAgIiIiCisgICAgIyBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgZXhhY3QgZXF1YWxpdHksIHVubGVzcyBvdmVycmlkZGVuLgorICAgIHRvbCA9IHJlbCA9IDAKKworICAgIGRlZiBhc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbD1Ob25lLCByZWw9Tm9uZSwgbXNnPU5vbmUKKyAgICAgICAgICAgICk6CisgICAgICAgICIiIlRlc3QgcGFzc2VzIGlmIGBgZmlyc3RgYCBhbmQgYGBzZWNvbmRgYCBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgICAgICBUaGlzIHRlc3QgcGFzc2VzIGlmIGBgZmlyc3RgYCBhbmQgYGBzZWNvbmRgYCBhcmUgZXF1YWwgdG8KKyAgICAgICAgd2l0aGluIGBgdG9sYGAsIGFuIGFic29sdXRlIGVycm9yLCBvciBgYHJlbGBgLCBhIHJlbGF0aXZlIGVycm9yLgorCisgICAgICAgIElmIGVpdGhlciBgYHRvbGBgIG9yIGBgcmVsYGAgYXJlIE5vbmUgb3Igbm90IGdpdmVuLCB0aGV5IGRlZmF1bHQgdG8KKyAgICAgICAgdGVzdCBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIG5hbWUgKGJ5IGRlZmF1bHQsIDApLgorCisgICAgICAgIFRoZSBvYmplY3RzIG1heSBiZSBlaXRoZXIgbnVtYmVycywgb3Igc2VxdWVuY2VzIG9mIG51bWJlcnMuIFNlcXVlbmNlcworICAgICAgICBhcmUgdGVzdGVkIGVsZW1lbnQtYnktZWxlbWVudC4KKworICAgICAgICA+Pj4gY2xhc3MgTXlUZXN0KE51bWVyaWNUZXN0Q2FzZSk6CisgICAgICAgIC4uLiAgICAgZGVmIHRlc3RfbnVtYmVyKHNlbGYpOgorICAgICAgICAuLi4gICAgICAgICB4ID0gMS4wLzYKKyAgICAgICAgLi4uICAgICAgICAgeSA9IHN1bShbeF0qNikKKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCh5LCAxLjAsIHRvbD0xZS0xNSkKKyAgICAgICAgLi4uICAgICBkZWYgdGVzdF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgYSA9IFsxLjAwMSwgMS4wMDFlLTEwLCAxLjAwMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgYiA9IFsxLjAsIDFlLTEwLCAxZTEwXQorICAgICAgICAuLi4gICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGEsIGIsIHJlbD0xZS0zKQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8gICMgU3VwcHJlc3MgdGVzdCBydW5uZXIgb3V0cHV0LgorICAgICAgICA+Pj4gc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKE15VGVzdCkKKyAgICAgICAgPj4+IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpKS5ydW4oc3VpdGUpCisgICAgICAgIDx1bml0dGVzdC5ydW5uZXIuVGV4dFRlc3RSZXN1bHQgcnVuPTIgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgdG9sIGlzIE5vbmU6CisgICAgICAgICAgICB0b2wgPSBzZWxmLnRvbAorICAgICAgICBpZiByZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJlbCA9IHNlbGYucmVsCisgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGZpcnN0LCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkgYW5kCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShzZWNvbmQsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X3NlcQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19hcHByb3hfbnVtCisgICAgICAgIGNoZWNrKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9zZXEoc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZyk6CisgICAgICAgIGlmIGxlbihmaXJzdCkgIT0gbGVuKHNlY29uZCk6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICgKKyAgICAgICAgICAgICAgICAic2VxdWVuY2VzIGRpZmZlciBpbiBsZW5ndGg6ICVkIGl0ZW1zICE9ICVkIGl0ZW1zIgorICAgICAgICAgICAgICAgICUgKGxlbihmaXJzdCksIGxlbihzZWNvbmQpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisgICAgICAgIGZvciBpLCAoYSxlKSBpbiBlbnVtZXJhdGUoemlwKGZpcnN0LCBzZWNvbmQpKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2FwcHJveF9udW0oYSwgZSwgdG9sLCByZWwsIG1zZywgaSkKKworICAgIGRlZiBfY2hlY2tfYXBwcm94X251bShzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnLCBpZHg9Tm9uZSk6CisgICAgICAgIGlmIGFwcHJveF9lcXVhbChmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCk6CisgICAgICAgICAgICAjIFRlc3QgcGFzc2VzLiBSZXR1cm4gZWFybHksIHdlIGFyZSBkb25lLgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBPdGhlcndpc2Ugd2UgZmFpbGVkLgorICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCkKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfbWFrZV9zdGRfZXJyX21zZyhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgaWR4KToKKyAgICAgICAgIyBDcmVhdGUgdGhlIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGFwcHJveF9lcXVhbCBmYWlsdXJlcy4KKyAgICAgICAgYXNzZXJ0IGZpcnN0ICE9IHNlY29uZAorICAgICAgICB0ZW1wbGF0ZSA9ICgKKyAgICAgICAgICAgICcgICVyICE9ICVyXG4nCisgICAgICAgICAgICAnICB2YWx1ZXMgZGlmZmVyIGJ5IG1vcmUgdGhhbiB0b2w9JXIgYW5kIHJlbD0lclxuJworICAgICAgICAgICAgJyAgLT4gYWJzb2x1dGUgZXJyb3IgPSAlclxuJworICAgICAgICAgICAgJyAgLT4gcmVsYXRpdmUgZXJyb3IgPSAlcicKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaGVhZGVyID0gJ251bWVyaWMgc2VxdWVuY2VzIGZpcnN0IGRpZmZlciBhdCBpbmRleCAlZC5cbicgJSBpZHgKKyAgICAgICAgICAgIHRlbXBsYXRlID0gaGVhZGVyICsgdGVtcGxhdGUKKyAgICAgICAgIyBDYWxjdWxhdGUgYWN0dWFsIGVycm9yczoKKyAgICAgICAgYWJzX2VyciwgcmVsX2VyciA9IF9jYWxjX2Vycm9ycyhmaXJzdCwgc2Vjb25kKQorICAgICAgICByZXR1cm4gdGVtcGxhdGUgJSAoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGFic19lcnIsIHJlbF9lcnIpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3QgdGhlIGhlbHBlcnMgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyMgLS0tIFRlc3RzIGZvciBhcHByb3hfZXF1YWwgLS0tCisKK2NsYXNzIEFwcHJveEVxdWFsU3ltbWV0cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3Qgc3ltbWV0cnkgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfc3ltbWV0cnkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhcHByb3hfZXF1YWwgdHJlYXRzIHJlbGF0aXZlIGVycm9yIHN5bW1ldHJpY2FsbHkuCisgICAgICAgICMgKGEtYikvYSBpcyB1c3VhbGx5IG5vdCBlcXVhbCB0byAoYS1iKS9iLiBFbnN1cmUgdGhhdCB0aGlzCisgICAgICAgICMgZG9lc24ndCBtYXR0ZXIuCisgICAgICAgICMKKyAgICAgICAgIyAgIE5vdGU6IHRoZSByZWFzb24gZm9yIHRoaXMgdGVzdCBpcyB0aGF0IGFuIGVhcmx5IHZlcnNpb24KKyAgICAgICAgIyAgIG9mIGFwcHJveF9lcXVhbCB3YXMgbm90IHN5bW1ldHJpYy4gQSByZWxhdGl2ZSBlcnJvciB0ZXN0CisgICAgICAgICMgICB3b3VsZCBwYXNzLCBvciBmYWlsLCBkZXBlbmRpbmcgb24gd2hpY2ggdmFsdWUgd2FzIHBhc3NlZAorICAgICAgICAjICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgICAgICAjCisgICAgICAgIGFyZ3MxID0gWzI0NTYsIDM3LjgsIC0xMi40NSwgRGVjaW1hbCgnMi41NCcpLCBGcmFjdGlvbigxNywgNTQpXQorICAgICAgICBhcmdzMiA9IFsyNDU5LCAzNy4yLCAtMTIuNDEsIERlY2ltYWwoJzIuNTknKSwgRnJhY3Rpb24oMTUsIDU0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihhcmdzMSkgPT0gbGVuKGFyZ3MyKQorICAgICAgICBmb3IgYSwgYiBpbiB6aXAoYXJnczEsIGFyZ3MyKToKKyAgICAgICAgICAgIHNlbGYuZG9fcmVsYXRpdmVfc3ltbWV0cnkoYSwgYikKKworICAgIGRlZiBkb19yZWxhdGl2ZV9zeW1tZXRyeShzZWxmLCBhLCBiKToKKyAgICAgICAgYSwgYiA9IG1pbihhLCBiKSwgbWF4KGEsIGIpCisgICAgICAgIGFzc2VydCBhIDwgYgorICAgICAgICBkZWx0YSA9IGIgLSBhICAjIFRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHZhbHVlcy4KKyAgICAgICAgcmVsX2VycjEsIHJlbF9lcnIyID0gYWJzKGRlbHRhL2EpLCBhYnMoZGVsdGEvYikKKyAgICAgICAgIyBDaG9vc2UgYW4gZXJyb3IgbWFyZ2luIGhhbGZ3YXkgYmV0d2VlbiB0aGUgdHdvLgorICAgICAgICByZWwgPSAocmVsX2VycjEgKyByZWxfZXJyMikvMgorICAgICAgICAjIE5vdyBzZWUgdGhhdCB2YWx1ZXMgYSBhbmQgYiBjb21wYXJlIGFwcHJveCBlcXVhbCByZWdhcmRsZXNzIG9mCisgICAgICAgICMgd2hpY2ggaXMgZ2l2ZW4gZmlyc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoYSwgYiwgdG9sPTAsIHJlbD1yZWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGIsIGEsIHRvbD0wLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhcHByb3hfZXF1YWwoYSwgYikgPT0gYXBwcm94X2VxdWFsKGIsIGEpCisgICAgICAgIGFyZ3MgPSBbLTIzLCAtMiwgNSwgMTA3LCA5MzU2OF0KKyAgICAgICAgZGVsdGEgPSAyCisgICAgICAgIGZvciBhIGluIGFyZ3M6CisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gKGludCwgZmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgICAgICB4ID0gdHlwZV8oYSkqMTAwCisgICAgICAgICAgICAgICAgeSA9IHggKyBkZWx0YQorICAgICAgICAgICAgICAgIHIgPSBhYnMoZGVsdGEvbWF4KHgsIHkpKQorICAgICAgICAgICAgICAgICMgVGhlcmUgYXJlIGZpdmUgY2FzZXMgdG8gY2hlY2s6CisgICAgICAgICAgICAgICAgIyAxKSBhY3R1YWwgZXJyb3IgPD0gdG9sLCA8PSByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhKzEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyAyKSBhY3R1YWwgZXJyb3IgPiB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9ci8yKQorICAgICAgICAgICAgICAgICMgMykgYWN0dWFsIGVycm9yIDw9IHRvbCwgPiByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLCByZWw9ci8yKQorICAgICAgICAgICAgICAgICMgNCkgYWN0dWFsIGVycm9yID4gdG9sLCA8PSByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD1yKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPTIqcikKKyAgICAgICAgICAgICAgICAjIDUpIGV4YWN0IGVxdWFsaXR5IHRlc3QKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeCwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9MCwgcmVsPTApCisKKyAgICBkZWYgZG9fc3ltbWV0cnlfdGVzdChzZWxmLCBhLCBiLCB0b2wsIHJlbCk6CisgICAgICAgIHRlbXBsYXRlID0gImFwcHJveF9lcXVhbCBjb21wYXJpc29ucyBkb24ndCBtYXRjaCBmb3IgJXIiCisgICAgICAgIGZsYWcxID0gYXBwcm94X2VxdWFsKGEsIGIsIHRvbCwgcmVsKQorICAgICAgICBmbGFnMiA9IGFwcHJveF9lcXVhbChiLCBhLCB0b2wsIHJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnMSwgZmxhZzIsIHRlbXBsYXRlLmZvcm1hdCgoYSwgYiwgdG9sLCByZWwpKSkKKworCitjbGFzcyBBcHByb3hFcXVhbEV4YWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHRoZSBhcHByb3hfZXF1YWwgZnVuY3Rpb24gd2l0aCBleGFjdGx5IGVxdWFsIHZhbHVlcy4KKyAgICAjIEVxdWFsIHZhbHVlcyBzaG91bGQgY29tcGFyZSBhcyBhcHByb3hpbWF0ZWx5IGVxdWFsLgorICAgICMgVGVzdCBjYXNlcyBmb3IgZXhhY3RseSBlcXVhbCB2YWx1ZXMsIHdoaWNoIHNob3VsZCBjb21wYXJlIGFwcHJveAorICAgICMgZXF1YWwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgdG9sZXJhbmNlcyBnaXZlbi4KKworICAgIGRlZiBkb19leGFjdGx5X2VxdWFsX3Rlc3Qoc2VsZiwgeCwgdG9sLCByZWwpOgorICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoeCwgeCwgdG9sPXRvbCwgcmVsPXJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ2VxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgeCkKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKC14LCAteCwgdG9sPXRvbCwgcmVsPXJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ2VxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgLXgpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIGludCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIGZvciBuIGluIFs0MiwgMTk3NDAsIDE0OTc0LCAyMzAsIDE3OTUsIDcwMDI0NSwgMzY1ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QobiwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBmbG9hdCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIGZvciB4IGluIFswLjQyLCAxLjk3NDAsIDE0OTcuNCwgMjMuMCwgMTc5LjUsIDcwLjAyNDUsIDM2LjU4N106CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIEZyYWN0aW9uIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDIpLCBGKDApLCBGKDUsIDMpLCBGKDksIDcpLCBGKDM1LCAzNiksIEYoMywgNyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZiwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBmb3IgZCBpbiBtYXAoRCwgIjguMiAzMS4yNzQgOTEyLjA0IDE2Ljc0NSAxLjIwNDciLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYWJzb2x1dGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbCB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgbiBpbiBbMTYsIDEwMTMsIDEzNzIsIDExOTgsIDk3MSwgNF06CisgICAgICAgICAgICAjIFRlc3QgYXMgaW50cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgZmxvYXRzLgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3Qobi8xMCwgMC4wMSwgMCkKKyAgICAgICAgICAgICMgVGVzdCBhcyBGcmFjdGlvbnMuCisgICAgICAgICAgICBmID0gRnJhY3Rpb24obiwgMTIzNCkKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAuMDEsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXF1YWwgRGVjaW1hbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRGVjaW1hbCgiMy41NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCgtRGVjaW1hbCgiODEuMzk3MSIpLCBEZWNpbWFsKCIwLjAxIiksIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX3JlbGF0aXZlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbODM0NywgMTAxLjMsIC03OTEwLjI4LCBGcmFjdGlvbig1LCAyMSldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMC4wMSkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRGVjaW1hbCgiMTEuNjgiKSwgMCwgRGVjaW1hbCgiMC4wMSIpKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9ib3RoKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGVxdWFsIHdoZW4gYm90aCB0b2wgYW5kIHJlbCBhcmUgZ2l2ZW4uCisgICAgICAgIGZvciB4IGluIFs0MTAxNywgMTYuNzQyLCAtODEzLjAyLCBGcmFjdGlvbigzLCA4KV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLjEsIDAuMDEpCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KEQoIjcuMiIpLCBEKCIwLjEiKSwgRCgiMC4wMSIpKQorCisKK2NsYXNzIEFwcHJveEVxdWFsVW5lcXVhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVW5lcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlcy4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIHVuZXF1YWwgdmFsdWVzLCB3aXRoIGV4YWN0IGVxdWFsaXR5IHRlc3QuCisKKyAgICBkZWYgZG9fZXhhY3RseV91bmVxdWFsX3Rlc3Qoc2VsZiwgeCk6CisgICAgICAgIGZvciBhIGluICh4LCAteCk6CisgICAgICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoYSwgYSsxLCB0b2w9MCwgcmVsPTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCwgJ2luZXF1YWxpdHkgZmFpbHVyZSBmb3IgeD0lcicgJSBhKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGludCB2YWx1ZXMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIG4gaW4gWzk1MSwgNTcyMzA1LCA0NzgsIDkxNywgMTcyNDBdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChuKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHVuZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciB4IGluIFs5LjUxLCA1NzIzLjA1LCA0Ny44LCA5LjE3LCAxNy4yNF06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHgpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIEZyYWN0aW9ucyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZm9yIGYgaW4gW0YoMSwgNSksIEYoNywgOSksIEYoMTIsIDExKSwgRigxMDEsIDk5MDIzKV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KGYpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHVuZXF1YWwgRGVjaW1hbHMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIzLjE0MTUgMjk4LjEyIDMuNDcgMTguOTk2IDAuMDAyNDUiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChkKQorCisKK2NsYXNzIEFwcHJveEVxdWFsSW5leGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgSW5leGFjdCB0ZXN0IGNhc2VzIGZvciBhcHByb3hfZXJyb3IuCisgICAgIyBUZXN0IGNhc2VzIHdoZW4gY29tcGFyaW5nIHR3byB2YWx1ZXMgdGhhdCBhcmUgbm90IGV4YWN0bHkgZXF1YWwuCisKKyAgICAjID09PSBBYnNvbHV0ZSBlcnJvciB0ZXN0cyA9PT0KKworICAgIGRlZiBkb19hcHByb3hfZXF1YWxfYWJzX3Rlc3Qoc2VsZiwgeCwgZGVsdGEpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJUZXN0IGZhaWx1cmUgZm9yIHg9eyFyfSwgeT17IXJ9IgorICAgICAgICBmb3IgeSBpbiAoeCArIGRlbHRhLCB4IC0gZGVsdGEpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0yKmRlbHRhLCByZWw9MCksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD1kZWx0YS8yLCByZWw9MCksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgbiBpbiBbLTEwNzM3LCAtMTk3NSwgLTcsIC0yLCAwLCAxLCA5LCAzNywgNDIzLCA5ODc0LCAyMzc4OTExMF06CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAxMCkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KG4sIDIpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGZvciB4IGluIFstMjg0LjEyNiwgLTk3LjEsIC0zLjQsIC0yLjE1LCAwLjUsIDEuMCwgNy44LCA0LjIzLCAzODE3LjRdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMS41KQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMC4wMSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDAwMSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBGcmFjdGlvbnMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZGVsdGEgPSBGcmFjdGlvbigxLCAyOSkKKyAgICAgICAgbnVtZXJhdG9ycyA9IFstODQsIC0xNSwgLTIsIC0xLCAwLCAxLCA1LCAxNywgMjMsIDM0LCA3MV0KKyAgICAgICAgZm9yIGYgaW4gKEZyYWN0aW9uKG4sIDI5KSBmb3IgbiBpbiBudW1lcmF0b3JzKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGRlbHRhKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZiwgZmxvYXQoZGVsdGEpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZGVsdGEgPSBEZWNpbWFsKCIwLjAxIikKKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIxLjAgMy41IDM2LjA4IDYxLjc5IDc5MTIuMzY0OCIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChkLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KC1kLCBkZWx0YSkKKworICAgIGRlZiB0ZXN0X2Nyb3NzX3plcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGNhc2Ugb2YgdGhlIHR3byB2YWx1ZXMgaGF2aW5nIG9wcG9zaXRlIHNpZ25zLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDFlLTUsIC0xZS01LCB0b2w9MWUtNCwgcmVsPTApKQorCisgICAgIyA9PT0gUmVsYXRpdmUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHgqKDErZGVsdGEpLCB4KigxLWRlbHRhKSk6CisgICAgICAgICAgICBtc2cgPSB0ZW1wbGF0ZS5mb3JtYXQoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTAsIHJlbD0yKmRlbHRhKSwgbXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTAsIHJlbD1kZWx0YS8yKSwgbXNnKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBpbnRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg2NCwgNDcsIHRvbD0wLCByZWw9MC4zNikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzcpKQorICAgICAgICAjIC0tLQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDQ0OSwgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDgsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKDQ0NywgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBmbG9hdHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTE3OC4zNCwgLTAuMSwgMC4xLCAxLjAsIDM2Ljk3LCAyODQ3LjEzNiwgOTE0NS4wNzRdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoeCwgMC4wMikKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDAwMSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBGcmFjdGlvbnMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGVsdGEgPSBGcmFjdGlvbigzLCA4KQorICAgICAgICBmb3IgZiBpbiBbRigzLCA4NCksIEYoMTcsIDMwKSwgRig0OSwgNTApLCBGKDkyLCA4NSldOgorICAgICAgICAgICAgZm9yIGQgaW4gKGRlbHRhLCBmbG9hdChkZWx0YSkpOgorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KGYsIGQpCisgICAgICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWYsIGQpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBEZWNpbWFscyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMC4wMiAxLjAgNS43IDEzLjY3IDk0LjEzOCA5MTAyNy45MzIxIi5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KGQsIERlY2ltYWwoIjAuMDAxIikpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCgtZCwgRGVjaW1hbCgiMC4wNSIpKQorCisgICAgIyA9PT0gQm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IgdGVzdHMgPT09CisKKyAgICAjIFRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvIGNvbnNpZGVyOgorICAgICMgICAxKSBhY3R1YWwgZXJyb3IgPD0gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKyAgICAjICAgMikgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDMpIGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvcgorICAgICMgICA0KSBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcgorCisgICAgZGVmIGRvX2NoZWNrX2JvdGgoc2VsZiwgYSwgYiwgdG9sLCByZWwsIHRvbF9mbGFnLCByZWxfZmxhZyk6CisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmIHRvbF9mbGFnIGVsc2Ugc2VsZi5hc3NlcnRGYWxzZQorICAgICAgICBjaGVjayhhcHByb3hfZXF1YWwoYSwgYiwgdG9sPXRvbCwgcmVsPTApKQorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiByZWxfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgKHRvbF9mbGFnIG9yIHJlbF9mbGFnKSBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD1yZWwpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgxKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy44ZS00LCBUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoLTcuMzg3LCAtNy4zODYsIDAuMDAyLCAwLjAwMDIsIFRydWUsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDIoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPD0gYWJzb2x1dGUgZXJyb3IgYnV0ID4gcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg3Ljk1NSwgNy45NTIsIDAuMDA0LCAzLjdlLTQsIFRydWUsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IHJlbGF0aXZlIGVycm9yIGJ1dCA+IGFic29sdXRlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwMSwgMy44ZS00LCBGYWxzZSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoNChzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA+IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoMi43OCwgMi43NSwgMC4wMSwgMC4wMDEsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDk3MS40NCwgOTcxLjQ3LCAwLjAyLCAzZS01LCBGYWxzZSwgRmFsc2UpCisKKworY2xhc3MgQXBwcm94RXF1YWxTcGVjaWFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBhcHByb3hfZXF1YWwgd2l0aCBOQU5zIGFuZCBJTkZzIGFuZCB6ZXJvZXMuCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgaW5mID0gdHlwZV8oJ2luZicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDAsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZiwgMSwgMC4wMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKC1pbmYsIC1pbmYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgMTAwMCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICBmb3Igb3RoZXIgaW4gKG5hbiwgdHlwZV8oJ2luZicpLCAxMDAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChuYW4sIG90aGVyKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3plcm9lcyhzZWxmKToKKyAgICAgICAgbnplcm8gPSBtYXRoLmNvcHlzaWduKDAuMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIDAuMCwgdG9sPTAuMSwgcmVsPTAuMSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3plcm9lcyhzZWxmKToKKyAgICAgICAgbnplcm8gPSBEZWNpbWFsKCItMC4wIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChuemVybywgRGVjaW1hbCgwKSwgdG9sPTAuMSwgcmVsPTAuMSkpCisKKworY2xhc3MgVGVzdEFwcHJveEVxdWFsRXJyb3JzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgZXJyb3IgY29uZGl0aW9ucyBvZiBhcHByb3hfZXF1YWwuCisKKyAgICBkZWYgdGVzdF9iYWRfdG9sKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgdG9sIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgLTEsIDAuMSkKKworICAgIGRlZiB0ZXN0X2JhZF9yZWwoc2VsZik6CisgICAgICAgICMgVGVzdCBuZWdhdGl2ZSByZWwgcmFpc2VzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcHByb3hfZXF1YWwsIDEwMCwgMTAwLCAxLCAtMC4xKQorCisKKyMgLS0tIFRlc3RzIGZvciBOdW1lcmljVGVzdENhc2UgLS0tCisKKyMgVGhlIGZvcm1hdHRpbmcgcm91dGluZSB0aGF0IGdlbmVyYXRlcyB0aGUgZXJyb3IgbWVzc2FnZXMgaXMgY29tcGxleCBlbm91Z2gKKyMgdGhhdCBpdCB0b28gbmVlZHMgdGVzdGluZy4KKworY2xhc3MgVGVzdE51bWVyaWNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGUgZXhhY3Qgd29yZGluZyBvZiBOdW1lcmljVGVzdENhc2UgZXJyb3IgbWVzc2FnZXMgaXMgKm5vdCogZ3VhcmFudGVlZCwKKyAgICAjIGJ1dCB3ZSBuZWVkIHRvIGdpdmUgdGhlbSBzb21lIHNvcnQgb2YgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZQorICAgICMgZ2VuZXJhdGVkIGNvcnJlY3RseS4gQXMgYSBjb21wcm9taXNlLCB3ZSBsb29rIGZvciBzcGVjaWZpYyBzdWJzdHJpbmdzCisgICAgIyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBmb3VuZCBldmVuIGlmIHRoZSBvdmVyYWxsIGVycm9yIG1lc3NhZ2UgY2hhbmdlcy4KKworICAgIGRlZiBkb190ZXN0KHNlbGYsIGFyZ3MpOgorICAgICAgICBhY3R1YWxfbXNnID0gTnVtZXJpY1Rlc3RDYXNlLl9tYWtlX3N0ZF9lcnJfbXNnKCphcmdzKQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZ2VuZXJhdGVfc3Vic3RyaW5ncygqYXJncykKKyAgICAgICAgZm9yIHN1YnN0cmluZyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3Vic3RyaW5nLCBhY3R1YWxfbXNnKQorCisgICAgZGVmIHRlc3RfbnVtZXJpY3Rlc3RjYXNlX2lzX3Rlc3RjYXNlKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IE51bWVyaWNUZXN0Q2FzZSBhY3R1YWxseSBpcyBhIFRlc3RDYXNlLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhOdW1lcmljVGVzdENhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19udW1lcmljKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciBudW1lcmljIGNvbXBhcmlzb25zLgorICAgICAgICBhcmdzID0gKDIuNSwgNC4wLCAwLjUsIDAuMjUsIE5vbmUpCisgICAgICAgIHNlbGYuZG9fdGVzdChhcmdzKQorCisgICAgZGVmIHRlc3RfZXJyb3JfbXNnX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciBzZXF1ZW5jZSBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgzLjc1LCA4LjI1LCAxLjI1LCAwLjUsIDcpCisgICAgICAgIHNlbGYuZG9fdGVzdChhcmdzKQorCisgICAgZGVmIGdlbmVyYXRlX3N1YnN0cmluZ3Moc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICIiIlJldHVybiBzdWJzdHJpbmdzIHdlIGV4cGVjdCB0byBzZWUgaW4gZXJyb3IgbWVzc2FnZXMuIiIiCisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgc3Vic3RyaW5ncyA9IFsKKyAgICAgICAgICAgICAgICAndG9sPSVyJyAlIHRvbCwKKyAgICAgICAgICAgICAgICAncmVsPSVyJyAlIHJlbCwKKyAgICAgICAgICAgICAgICAnYWJzb2x1dGUgZXJyb3IgPSAlcicgJSBhYnNfZXJyLAorICAgICAgICAgICAgICAgICdyZWxhdGl2ZSBlcnJvciA9ICVyJyAlIHJlbF9lcnIsCisgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBpZHggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdWJzdHJpbmdzLmFwcGVuZCgnZGlmZmVyIGF0IGluZGV4ICVkJyAlIGlkeCkKKyAgICAgICAgcmV0dXJuIHN1YnN0cmluZ3MKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT0gVGVzdHMgZm9yIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSA9PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgR2xvYmFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHN0YXRpc3RpY3MKKyAgICBleHBlY3RlZF9tZXRhZGF0YSA9IFsiX19kb2NfXyIsICJfX2FsbF9fIl0KKworICAgIGRlZiB0ZXN0X21ldGEoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBtZXRhZGF0YS4KKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5leHBlY3RlZF9tZXRhZGF0YToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLCBtZXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgbm90IHByZXNlbnQiICUgbWV0YSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2FsbChzZWxmKToKKyAgICAgICAgIyBDaGVjayBldmVyeXRoaW5nIGluIF9fYWxsX18gZXhpc3RzIGFuZCBpcyBwdWJsaWMuCisgICAgICAgIG1vZHVsZSA9IHNlbGYubW9kdWxlCisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZS5fX2FsbF9fOgorICAgICAgICAgICAgIyBObyBwcml2YXRlIG5hbWVzIGluIF9fYWxsX186CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5hbWUuc3RhcnRzd2l0aCgiXyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpdmF0ZSBuYW1lICIlcyIgaW4gX19hbGxfXycgJSBuYW1lKQorICAgICAgICAgICAgIyBBbmQgYW55dGhpbmcgaW4gX19hbGxfXyBtdXN0IGV4aXN0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZyBuYW1lICIlcyIgaW4gX19hbGxfXycgJSBuYW1lKQorCisKK2NsYXNzIERvY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9kb2NfdGVzdHMoc2VsZik6CisgICAgICAgIGZhaWxlZCwgdHJpZWQgPSBkb2N0ZXN0LnRlc3Rtb2Qoc3RhdGlzdGljcykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHRyaWVkLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhaWxlZCwgMCkKKworY2xhc3MgU3RhdGlzdGljc0Vycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaGFzX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJybXNnID0gKAorICAgICAgICAgICAgICAgICJFeHBlY3RlZCBTdGF0aXN0aWNzRXJyb3IgdG8gYmUgYSBWYWx1ZUVycm9yLCBidXQgZ290IGEiCisgICAgICAgICAgICAgICAgIiBzdWJjbGFzcyBvZiAlciBpbnN0ZWFkLiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHN0YXRpc3RpY3MsICdTdGF0aXN0aWNzRXJyb3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Moc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGVycm1zZyAlIHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLl9fYmFzZV9fCisgICAgICAgICAgICAgICAgKQorCisKKyMgPT09IFRlc3RzIGZvciBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zID09PQorCitjbGFzcyBFeGFjdFJhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9leGFjdF9yYXRpbyB1dGlsaXR5LgorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiAoLTIwLCAtMywgMCwgNSwgOTksIDEwKioyMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKGkpLCAoaSwgMSkpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbihzZWxmKToKKyAgICAgICAgbnVtZXJhdG9ycyA9ICgtNSwgMSwgMTIsIDM4KQorICAgICAgICBmb3IgbiBpbiBudW1lcmF0b3JzOgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDM3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhmKSwgKG4sIDM3KSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKDAuMTI1KSwgKDEsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKDEuMTI1KSwgKDksIDgpKQorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xMDAsIDEwMCkgZm9yIF8gaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgZm9yIHggaW4gZGF0YToKKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgbnVtL2RlbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWwoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIF9leGFjdF9yYXRpbyA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjAuMTI1IikpLCAoMTI1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiMTIuMzQ1IikpLCAoMTIzNDUsIDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCItMS45OCIpKSwgKC0xOTgsIDEwMCkpCisKKworY2xhc3MgRGVjaW1hbFRvUmF0aW9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgX2RlY2ltYWxfdG9fcmF0aW8gcHJpdmF0ZSBmdW5jdGlvbi4KKworICAgIGRlZiB0ZXN0U3BlY2lhbHNSYWlzZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgTkFOcyBhbmQgSU5GcyByYWlzZSBWYWx1ZUVycm9yLgorICAgICAgICAjIE5vbi1zcGVjaWFsIHZhbHVlcyBhcmUgY292ZXJlZCBieSBfZXhhY3RfcmF0aW8gYWJvdmUuCisgICAgICAgIGZvciBkIGluIChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnc05BTicpLCBEZWNpbWFsKCdJTkYnKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzdGF0aXN0aWNzLl9kZWNpbWFsX3RvX3JhdGlvLCBkKQorCisKKworIyA9PT0gVGVzdHMgZm9yIHB1YmxpYyBmdW5jdGlvbnMgPT09CisKK2NsYXNzIFVuaXZhcmlhdGVDb21tb25NaXhpbjoKKyAgICAjIENvbW1vbiB0ZXN0cyBmb3IgbW9zdCB1bml2YXJpYXRlIGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBkYXRhIGFyZ3VtZW50LgorCisgICAgZGVmIHRlc3Rfbm9fYXJncyhzZWxmKToKKyAgICAgICAgIyBGYWlsIGlmIGdpdmVuIG5vIGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kYXRhKHNlbGYpOgorICAgICAgICAjIEZhaWwgd2hlbiB0aGUgZGF0YSBhcmd1bWVudCAoZmlyc3QgYXJndW1lbnQpIGlzIGVtcHR5LgorICAgICAgICBmb3IgZW1wdHkgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZW1wdHkpCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gaW50IGRhdGEgZm9yIHZhcmlvdXMgdGVzdHMuIiIiCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3Rfbm9faW5wbGFjZV9tb2RpZmljYXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGl0cyBpbnB1dCBkYXRhLgorICAgICAgICBkYXRhID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpICE9IDEgICMgTmVjZXNzYXJ5IHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIGFzc2VydCBkYXRhICE9IHNvcnRlZChkYXRhKQorICAgICAgICBzYXZlZCA9IGRhdGFbOl0KKyAgICAgICAgYXNzZXJ0IGRhdGEgaXMgbm90IHNhdmVkCisgICAgICAgIF8gPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZGF0YSwgc2F2ZWQsICJkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIikKKworICAgIGRlZiB0ZXN0X29yZGVyX2RvZXNudF9tYXR0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBvcmRlciBvZiBkYXRhIHBvaW50cyBkb2Vzbid0IGNoYW5nZSB0aGUgcmVzdWx0LgorCisgICAgICAgICMgQ0FVVElPTjogZHVlIHRvIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycywgdGhlIHJlc3VsdCBhY3R1YWxseQorICAgICAgICAjIG1heSBkZXBlbmQgb24gdGhlIG9yZGVyLiBDb25zaWRlciB0aGlzIHRlc3QgcmVwcmVzZW50aW5nIGFuIGlkZWFsLgorICAgICAgICAjIFRvIGF2b2lkIHRoaXMgdGVzdCBmYWlsaW5nLCBvbmx5IHRlc3Qgd2l0aCBleGFjdCB2YWx1ZXMgc3VjaCBhcyBpbnRzCisgICAgICAgICMgb3IgRnJhY3Rpb25zLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDMsIDMsIDQsIDUsIDZdKjEwMAorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3RfdHlwZV9vZl9kYXRhX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSB0eXBlIG9mIGl0ZXJhYmxlIGRhdGEgZG9lc24ndCBlZmZlY3QgdGhlIHJlc3VsdC4KKyAgICAgICAgY2xhc3MgTXlMaXN0KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdlbmVyYXRvcihkYXRhKToKKyAgICAgICAgICAgIHJldHVybiAob2JqIGZvciBvYmogaW4gZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGxpc3QsIHR1cGxlLCBpdGVyLCBNeUxpc3QsIE15VHVwbGUsIGdlbmVyYXRvcik6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoa2luZChkYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9ucyB3b3JrIHdpdGggcmFuZ2Ugb2JqZWN0cy4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMobGlzdChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ190eXBlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb24gcmFpc2VzIHdoZW4gZ2l2ZW4gZGF0YSBvZiB0aGUgd3JvbmcgdHlwZS4KKworICAgICAgICAjIERvbid0IHJvbGwgdGhlIGZvbGxvd2luZyBpbnRvIGEgbG9vcCBsaWtlIHRoaXM6CisgICAgICAgICMgICBmb3IgYmFkIGluIGxpc3Rfb2ZfYmFkOgorICAgICAgICAjICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoYmFkKQorICAgICAgICAjCisgICAgICAgICMgU2luY2UgYXNzZXJ0UmFpc2VzIGRvZXNuJ3Qgc2hvdyB0aGUgYXJndW1lbnRzIHRoYXQgY2F1c2VkIHRoZSB0ZXN0CisgICAgICAgICMgZmFpbHVyZSwgaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcgdGhlc2UgdGVzdCBmYWlsdXJlcyB3aGVuIHRoZQorICAgICAgICAjIGZvbGxvd2luZyBhcmUgaW4gYSBsb29wLgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoMjMpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoNDIuMCkKKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihvYmplY3QoKSkKKworICAgIGRlZiBjaGVja19mb3JfdHlwZV9lcnJvcihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCAqYXJncykKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9lbGVtZW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoZSB0eXBlIG9mIGRhdGEgZWxlbWVudHMgZG9lc24ndCBhZmZlY3QgdGhlIG51bWVyaWMgcmVzdWx0LgorICAgICAgICAjIFRoaXMgaXMgYSB3ZWFrZXIgdGVzdCB0aGFuIFVuaXZhcmlhdGVUeXBlTWl4aW4udGVzdFR5cGVzQ29uc2VydmVkLAorICAgICAgICAjIGJlY2F1c2UgaXQgY2hlY2tzIHRoZSBudW1lcmljIHJlc3VsdCBieSBlcXVhbGl0eSwgYnV0IG5vdCBieSB0eXBlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIHJhdyA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIE15RmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgIGRhdGEgPSBba2luZCh4KSBmb3IgeCBpbiByYXddCisgICAgICAgICAgICByZXN1bHQgPSB0eXBlKGV4cGVjdGVkKShzZWxmLmZ1bmMoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVW5pdmFyaWF0ZVR5cGVNaXhpbjoKKyAgICAiIiJNaXhpbiBjbGFzcyBmb3IgdHlwZS1jb25zZXJ2aW5nIGZ1bmN0aW9ucy4KKworICAgIFRoaXMgbWl4aW4gY2xhc3MgaG9sZHMgdGVzdChzKSBmb3IgZnVuY3Rpb25zIHdoaWNoIGNvbnNlcnZlIHRoZSB0eXBlIG9mCisgICAgaW5kaXZpZHVhbCBkYXRhIHBvaW50cy4gRS5nLiB0aGUgbWVhbiBvZiBhIGxpc3Qgb2YgRnJhY3Rpb25zIHNob3VsZCBpdHNlbGYKKyAgICBiZSBhIEZyYWN0aW9uLgorCisgICAgTm90IGFsbCB0ZXN0cyB0byBkbyB3aXRoIHR5cGVzIG5lZWQgZ28gaW4gdGhpcyBjbGFzcy4gT25seSB0aG9zZSB0aGF0CisgICAgcmVseSBvbiB0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBzYW1lIHR5cGUgYXMgaXRzIGlucHV0IGRhdGEuCisgICAgIiIiCisgICAgZGVmIHRlc3RfdHlwZXNfY29uc2VydmVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMga2VlcHMgdGhlIHNhbWUgdHlwZSBhcyB0aGVpciBkYXRhIHBvaW50cy4KKyAgICAgICAgIyAoRXhjbHVkZXMgbWl4ZWQgZGF0YSB0eXBlcy4pIFRoaXMgb25seSB0ZXN0cyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuCisgICAgICAgICMgcmVzdWx0LCBub3QgdGhlIHZhbHVlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3N1Yl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3JzdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19wb3dfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3Bvd19fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fYWRkX18ob3RoZXIpKQorICAgICAgICAgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbiwgTXlGbG9hdCk6CisgICAgICAgICAgICBkID0gW2tpbmQoeCkgZm9yIHggaW4gZGF0YV0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJlc3VsdCksIGtpbmQpCisKKworY2xhc3MgVGVzdFN1bShOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVDb21tb25NaXhpbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNhc2VzIGZvciBzdGF0aXN0aWNzLl9zdW0oKSBmdW5jdGlvbi4KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5fc3VtCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kYXRhKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIHRlc3QgZm9yIGVtcHR5IGRhdGEuCisgICAgICAgIGZvciBkYXRhIGluIChbXSwgKCksIGl0ZXIoW10pKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMjMpLCAyMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIuMyksIDIuMykKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFsxLCA1LCAzLCAtNCwgLTgsIDIwLCA0MiwgMV0pLCA2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzQsIDIsIDMsIC04LCA3XSwgMTAwMCksIDEwMDgpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjI1XSoyMCksIDUuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzAuMTI1LCAwLjI1LCAwLjUsIDAuNzVdLCAxLjUpLCAzLjEyNSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFtGcmFjdGlvbigxLCAxMDAwKV0qNTAwKSwgRnJhY3Rpb24oMSwgMikpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIwLjAwMSIpLCBEKCI1LjI0NiIpLCBEKCIxLjcwMiIpLCBEKCItMC4wMjUiKSwKKyAgICAgICAgICAgICAgICBEKCIzLjk3NCIpLCBEKCIyLjMyOCIpLCBEKCI0LjYxNyIpLCBEKCIyLjg0MyIpLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIERlY2ltYWwoIjIwLjY4NiIpKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV93aXRoX21hdGhfZnN1bShzZWxmKToKKyAgICAgICAgIyBDb21wYXJlIHdpdGggdGhlIG1hdGguZnN1bSBmdW5jdGlvbi4KKyAgICAgICAgIyBJZGVhbGx5IHdlIG91Z2h0IHRvIGdldCB0aGUgZXhhY3Qgc2FtZSByZXN1bHQsIGJ1dCBzb21ldGltZXMKKyAgICAgICAgIyB3ZSBkaWZmZXIgYnkgYSB2ZXJ5IHNsaWdodCBhbW91bnQgOi0oCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTEwMCwgMTAwMCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBtYXRoLmZzdW0oZGF0YSksIHJlbD0yZS0xNikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3B0aW9uYWwgc3RhcnQgYXJndW1lbnQgd29ya3MgY29ycmVjdGx5LgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKDEsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzQyLCBzZWxmLmZ1bmMoZGF0YSwgNDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQtMjMsIHNlbGYuZnVuYyhkYXRhLCAtMjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQrMWUyMCwgc2VsZi5mdW5jKGRhdGEsIDFlMjApKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nc19mYWlsKHNlbGYpOgorICAgICAgICAjIFN1bSBvZiBzdHJpbmdzIHNob3VsZCBmYWlsLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIsIDNdLCAnOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCAnOTk5J10pCisKKyAgICBkZWYgdGVzdF9ieXRlc19mYWlsKHNlbGYpOgorICAgICAgICAjIFN1bSBvZiBieXRlcyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgYic5OTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIsIDMsIGInOTk5J10pCisKKyAgICBkZWYgdGVzdF9taXhlZF9zdW0oc2VsZik6CisgICAgICAgICMgTWl4ZWQgc3VtcyBhcmUgYWxsb3dlZC4KKworICAgICAgICAjIENhcmVmdWwgaGVyZTogb3JkZXIgbWF0dGVycy4gQ2FuJ3QgbWl4IEZyYWN0aW9uIGFuZCBEZWNpbWFsIGRpcmVjdGx5LAorICAgICAgICAjIG9ubHkgYWZ0ZXIgdGhleSdyZSBjb252ZXJ0ZWQgdG8gZmxvYXQuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgRnJhY3Rpb24oMSwgMiksIDMuMCwgRGVjaW1hbCgiMC4yNSIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNi43NSkKKworCitjbGFzcyBTdW1JbnRlcm5hbHNUZXN0KE51bWVyaWNUZXN0Q2FzZSk6CisgICAgIyBUZXN0IGludGVybmFscyBvZiB0aGUgc3VtIGZ1bmN0aW9uLgorCisgICAgZGVmIHRlc3RfaWdub3JlX2luc3RhbmNlX2Zsb2F0X21ldGhvZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgX19mbG9hdF9fIG1ldGhvZHMgb24gZGF0YSBpbnN0YW5jZXMgYXJlIGlnbm9yZWQuCisKKyAgICAgICAgIyBQeXRob24gdHlwaWNhbGx5IGNhbGxzIF9fZHVuZGVyX18gbWV0aG9kcyBvbiB0aGUgY2xhc3MsIG5vdCB0aGUKKyAgICAgICAgIyBpbnN0YW5jZS4gVGhlIGBgc3VtYGAgaW1wbGVtZW50YXRpb24gY2FsbHMgX19mbG9hdF9fIGRpcmVjdGx5LiBUbworICAgICAgICAjIGJldHRlciBtYXRjaCB0aGUgYmVoYXZpb3VyIG9mIFB5dGhvbiwgd2UgY2FsbCBpdCBvbmx5IG9uIHRoZSBjbGFzcywKKyAgICAgICAgIyBub3QgdGhlIGluc3RhbmNlLiBUaGlzIHRlc3Qgd2lsbCBmYWlsIGlmIHNvbWVib2R5ICJmaXhlcyIgdGhhdCBjb2RlLgorCisgICAgICAgICMgQ3JlYXRlIGEgZmFrZSBfX2Zsb2F0X18gbWV0aG9kLgorICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3Rlc3QgZmFpbHMnKQorCisgICAgICAgICMgSW5qZWN0IGl0IGludG8gYW4gaW5zdGFuY2UuCisgICAgICAgIGNsYXNzIE15TnVtYmVyKEZyYWN0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgeCA9IE15TnVtYmVyKDMpCisgICAgICAgIHguX19mbG9hdF9fID0gdHlwZXMuTWV0aG9kVHlwZShfX2Zsb2F0X18sIHgpCisKKyAgICAgICAgIyBDaGVjayBpdCB3b3JrcyBhcyBleHBlY3RlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHguX19mbG9hdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHgpLCAzLjApCisgICAgICAgICMgQW5kIG5vdyB0ZXN0IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEuMCwgMi4wLCB4LCA0LjBdKSwgMTAuMCkKKworCitjbGFzcyBTdW1Ub3J0dXJlVGVzdChOdW1lcmljVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RvcnR1cmUoc2VsZik6CisgICAgICAgICMgVGltIFBldGVycycgdG9ydHVyZSB0ZXN0IGZvciBzdW0sIGFuZCB2YXJpYW50cyBvZiBzYW1lLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX3N1bShbMSwgMWUxMDAsIDEsIC0xZTEwMF0qMTAwMDApLCAyMDAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX3N1bShbMWUxMDAsIDEsIDEsIC0xZTEwMF0qMTAwMDApLCAyMDAwMC4wKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKAorICAgICAgICAgICAgc3RhdGlzdGljcy5fc3VtKFsxZS0xMDAsIDEsIDFlLTEwMCwgLTFdKjEwMDAwKSwgMi4wZS05NiwgcmVsPTVlLTE2CisgICAgICAgICAgICApCisKKworY2xhc3MgU3VtU3BlY2lhbFZhbHVlcyhOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGF0IHN1bSB3b3JrcyBjb3JyZWN0bHkgd2l0aCBJRUVFLTc1NCBzcGVjaWFsIHZhbHVlcy4KKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBuYW4gPSB0eXBlXygnbmFuJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgbmFuLCAyXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCB0eXBlXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgY2hlY2tfaW5maW5pdHkoc2VsZiwgeCwgaW5mKToKKyAgICAgICAgIiIiQ2hlY2sgeCBpcyBhbiBpbmZpbml0eSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBzaWduIGFzIGluZi4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgdHlwZShpbmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPiAwLCBpbmYgPiAwKQorICAgICAgICBhc3NlcnQgeCA9PSBpbmYKKworICAgIGRlZiBkb190ZXN0X2luZihzZWxmLCBpbmYpOgorICAgICAgICAjIEFkZGluZyBhIHNpbmdsZSBpbmZpbml0eSBnaXZlcyBpbmZpbml0eS4KKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDNdKQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorICAgICAgICAjIEFkZGluZyB0d28gaW5maW5pdGllcyBvZiB0aGUgc2FtZSBzaWduIGFsc28gZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzLCBpbmYsIDRdKQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorCisgICAgZGVmIHRlc3RfZmxvYXRfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgZm9yIHNpZ24gaW4gKCsxLCAtMSk6CisgICAgICAgICAgICBzZWxmLmRvX3Rlc3RfaW5mKHNpZ24qaW5mKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9pbmYoc2VsZik6CisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X21pc21hdGNoZWRfaW5mcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWRkaW5nIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24gZ2l2ZXMgYSBOQU4uCisgICAgICAgIGluZiA9IGZsb2F0KCdpbmYnKQorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgLWluZiwgNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX21pc21hdGNoZWRfaW5mc190b19uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgRGVjaW1hbCBJTkZzIHdpdGggb3Bwb3NpdGUgc2lnbiByZXR1cm5zIE5BTi4KKyAgICAgICAgaW5mID0gRGVjaW1hbCgnaW5mJykKKyAgICAgICAgZGF0YSA9IFsxLCAyLCBpbmYsIDMsIC1pbmYsIDRdCisgICAgICAgIHdpdGggZGVjaW1hbC5sb2NhbGNvbnRleHQoZGVjaW1hbC5FeHRlbmRlZENvbnRleHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oc3RhdGlzdGljcy5fc3VtKGRhdGEpKSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfbWlzbWF0Y2hlZF9pbmZzX3RvX25hbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGFkZGluZyBEZWNpbWFsIElORnMgd2l0aCBvcHBvc2l0ZSBzaWduIHJhaXNlcyBJbnZhbGlkT3BlcmF0aW9uLgorICAgICAgICBpbmYgPSBEZWNpbWFsKCdpbmYnKQorICAgICAgICBkYXRhID0gWzEsIDIsIGluZiwgMywgLWluZiwgNF0KKyAgICAgICAgd2l0aCBkZWNpbWFsLmxvY2FsY29udGV4dChkZWNpbWFsLkJhc2ljQ29udGV4dCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkZWNpbWFsLkludmFsaWRPcGVyYXRpb24sIHN0YXRpc3RpY3MuX3N1bSwgZGF0YSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfc25hbl9yYWlzZXMoc2VsZik6CisgICAgICAgICMgQWRkaW5nIHNOQU4gc2hvdWxkIHJhaXNlIEludmFsaWRPcGVyYXRpb24uCisgICAgICAgIHNOQU4gPSBEZWNpbWFsKCdzTkFOJykKKyAgICAgICAgZGF0YSA9IFsxLCBzTkFOLCAyXQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkZWNpbWFsLkludmFsaWRPcGVyYXRpb24sIHN0YXRpc3RpY3MuX3N1bSwgZGF0YSkKKworCisjID09PSBUZXN0cyBmb3IgYXZlcmFnZXMgPT09CisKK2NsYXNzIEF2ZXJhZ2VNaXhpbihVbml2YXJpYXRlQ29tbW9uTWl4aW4pOgorICAgICMgTWl4aW4gY2xhc3MgaG9sZGluZyBjb21tb24gdGVzdHMgZm9yIGF2ZXJhZ2VzLgorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIEF2ZXJhZ2Ugb2YgYSBzaW5nbGUgdmFsdWUgaXMgdGhlIHZhbHVlIGl0c2VsZi4KKyAgICAgICAgZm9yIHggaW4gKDIzLCA0Mi41LCAxLjNlMTUsIEZyYWN0aW9uKDE1LCAxOSksIERlY2ltYWwoJzAuMjgnKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbeF0pLCB4KQorCisgICAgZGVmIHRlc3RfcmVwZWF0ZWRfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIFRoZSBhdmVyYWdlIG9mIGEgc2luZ2xlIHJlcGVhdGVkIHZhbHVlIGlzIHRoZSB2YWx1ZSBpdHNlbGYuCisgICAgICAgIGZvciB4IGluICgzLjUsIDE3LCAyLjVlMTUsIEZyYWN0aW9uKDYxLCA2NyksIERlY2ltYWwoJzQuOTcxMicpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgNSwgMTAsIDIwKToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIHgpCisKKworY2xhc3MgVGVzdE1lYW4oTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWFuCisKKyAgICBkZWYgdGVzdF90b3J0dXJlX3BlcChzZWxmKToKKyAgICAgICAgIyAiVG9ydHVyZSBUZXN0IiBmcm9tIFBFUC00NTAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFsxZTEwMCwgMSwgMywgLTFlMTAwXSksIDEpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGludHMuCisgICAgICAgIGRhdGEgPSBbMCwgMSwgMiwgMywgMywgMywgNCwgNSwgNSwgNiwgNywgNywgNywgNywgOCwgOV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuODEyNSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBmbG9hdHMuCisgICAgICAgIGRhdGEgPSBbMTcuMjUsIDE5Ljc1LCAyMC4wLCAyMS41LCAyMS43NSwgMjMuMjUsIDI1LjEyNSwgMjcuNV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDIyLjAxNTYyNSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGludHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMS42MzQiKSwgRCgiMi41MTciKSwgRCgiMy45MTIiKSwgRCgiNC4wNzIiKSwgRCgiNS44MTMiKV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoIjMuNTg5NiIpKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCAyKSwgRigyLCAzKSwgRigzLCA0KSwgRig0LCA1KSwgRig1LCA2KSwgRig2LCA3KSwgRig3LCA4KV0KKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMTQ3OSwgMTk2MCkpCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW5maW5pdGllcy4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDUsIDcsIDldICAjIFVzZSBvbmx5IGludHMsIHRvIGF2b2lkIFR5cGVFcnJvciBsYXRlci4KKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsKToKKyAgICAgICAgICAgIGZvciBzaWduIGluICgxLCAtMSk6CisgICAgICAgICAgICAgICAgaW5mID0ga2luZCgiaW5mIikqc2lnbgorICAgICAgICAgICAgICAgIGRhdGEgPSByYXcgKyBbaW5mXQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzaW5mKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGluZikKKworICAgIGRlZiB0ZXN0X21pc21hdGNoZWRfaW5mcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24uCisgICAgICAgIGRhdGEgPSBbMiwgNCwgNiwgZmxvYXQoJ2luZicpLCAxLCAzLCA1LCBmbG9hdCgnLWluZicpXQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmVzdWx0KSkKKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBOQU5zLgorICAgICAgICByYXcgPSBbMSwgMywgNSwgNywgOV0gICMgVXNlIG9ubHkgaW50cywgdG8gYXZvaWQgVHlwZUVycm9yIGxhdGVyLgorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgaW5mID0ga2luZCgibmFuIikKKyAgICAgICAgICAgIGRhdGEgPSByYXcgKyBbaW5mXQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfYmlnX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgYSBsYXJnZSBjb25zdGFudCB0byBldmVyeSBkYXRhIHBvaW50LgorICAgICAgICBjID0gMWU5CisgICAgICAgIGRhdGEgPSBbMy40LCA0LjUsIDQuOSwgNi43LCA2LjgsIDcuMiwgOC4wLCA4LjEsIDkuNF0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkgKyBjCisgICAgICAgIGFzc2VydCBleHBlY3RlZCAhPSBjCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhbeCtjIGZvciB4IGluIGRhdGFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kb3VibGVkX2RhdGEoc2VsZik6CisgICAgICAgICMgTWVhbiBvZiBbYSxiLGMuLi56XSBzaG91bGQgYmUgc2FtZSBhcyBmb3IgW2EsYSxiLGIsYyxjLi4ueix6XS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMywgNSkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIGFjdHVhbCA9IHNlbGYuZnVuYyhkYXRhKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworCitjbGFzcyBUZXN0TWVkaWFuKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluKToKKyAgICAjIENvbW1vbiB0ZXN0cyBmb3IgbWVkaWFuIGFuZCBhbGwgbWVkaWFuLiogZnVuY3Rpb25zLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW4KKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgICIiIk92ZXJsb2FkIG1ldGhvZCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4iIiIKKyAgICAgICAgZGF0YSA9IHN1cGVyKCkucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgaWYgbGVuKGRhdGEpJTIgIT0gMToKKyAgICAgICAgICAgIGRhdGEuYXBwZW5kKDIpCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnQgZGF0YSBwb2ludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuNSkKKworICAgIGRlZiB0ZXN0X29kZF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdpdGggYW4gb2RkIG51bWJlciBvZiBpbnQgZGF0YSBwb2ludHMuCisgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNSwgNiwgOV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQpCisKKyAgICBkZWYgdGVzdF9vZGRfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDMsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDEsIDIpKQorCisgICAgZGVmIHRlc3Rfb2RkX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcyLjUnKSwgRCgnMy4xJyksIEQoJzQuMicpLCBEKCc1LjcnKSwgRCgnNS44JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCc0LjInKSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjInKSwgRCgnMi41JyksIEQoJzMuMScpLCBEKCc0LjInKSwgRCgnNS43JyksIEQoJzUuOCcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnMy42NScpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5EYXRhVHlwZShOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdCBjb25zZXJ2YXRpb24gb2YgZGF0YSBlbGVtZW50IHR5cGUgZm9yIG1lZGlhbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxNSkpCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHdoaWxlIGRhdGEgPT0gc29ydGVkKGRhdGEpOgorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgcmV0dXJuIGRhdGEKKworCitjbGFzcyBUZXN0TWVkaWFuTG93KFRlc3RNZWRpYW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5fbG93CisKKyAgICBkZWYgdGVzdF9ldmVuX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMykKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMywgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2xvdyB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMScpLCBEKCcyLjInKSwgRCgnMy4zJyksIEQoJzQuNCcpLCBEKCc1LjUnKSwgRCgnNi42JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCczLjMnKSkKKworCitjbGFzcyBUZXN0TWVkaWFuSGlnaChUZXN0TWVkaWFuLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2hpZ2gKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNyksIEYoMiwgNyksIEYoMywgNyksIEYoNCwgNyksIEYoNSwgNyksIEYoNiwgNyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBGKDQsIDcpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9oaWdoIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4xJyksIEQoJzIuMicpLCBEKCczLjMnKSwgRCgnNC40JyksIEQoJzUuNScpLCBEKCc2LjYnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzQuNCcpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5Hcm91cGVkKFRlc3RNZWRpYW4pOgorICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZC4KKyAgICAjIERvZXNuJ3QgY29uc2VydmUgZGF0YSBlbGVtZW50IHR5cGVzLCBzbyBkb24ndCB1c2UgVGVzdE1lZGlhblR5cGUuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9ncm91cGVkCisKKyAgICBkZWYgdGVzdF9vZGRfbnVtYmVyX3JlcGVhdGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuLmdyb3VwZWQgd2l0aCByZXBlYXRlZCBtZWRpYW4gdmFsdWVzLgorICAgICAgICBkYXRhID0gWzEyLCAxMywgMTQsIDE0LCAxNCwgMTUsIDE1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMTQpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsxMiwgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDEzLjg3NSkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzUsIDEwLCAxMCwgMTUsIDIwLCAyMCwgMjAsIDIwLCAyNSwgMjUsIDMwXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCA1KSwgMTkuMzc1KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMTYsIDE4LCAxOCwgMTgsIDE4LCAyMCwgMjAsIDIwLCAyMiwgMjIsIDIyLCAyNCwgMjQsIDI2LCAyOF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMiksIDIwLjY2NjY2NjY3LCB0b2w9MWUtOCkKKworICAgIGRlZiB0ZXN0X2V2ZW5fbnVtYmVyX3JlcGVhdGVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuLmdyb3VwZWQgd2l0aCByZXBlYXRlZCBtZWRpYW4gdmFsdWVzLgorICAgICAgICBkYXRhID0gWzUsIDEwLCAxMCwgMTUsIDIwLCAyMCwgMjAsIDI1LCAyNSwgMzBdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDUpLCAxOS4xNjY2NjY2NywgdG9sPTFlLTgpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsyLCAzLCA0LCA0LCA0LCA1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy44MzMzMzMzMywgdG9sPTFlLTgpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsyLCAzLCAzLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA2LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC41KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbMywgNCwgNCwgNCwgNSwgNSwgNSwgNSwgNiwgNl0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDQuNzUpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRlZF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gQXZlcmFnZU1peGluLgorICAgICAgICAjIFlldCBhZ2FpbiwgZmFpbHVyZSBvZiBtZWRpYW5fZ3JvdXBlZCB0byBjb25zZXJ2ZSB0aGUgZGF0YSB0eXBlCisgICAgICAgICMgY2F1c2VzIG1lIGhlYWRhY2hlcyA6LSgKKyAgICAgICAgZm9yIHggaW4gKDUuMywgNjgsIDQuM2UxNywgRnJhY3Rpb24oMjksIDEwMSksIERlY2ltYWwoJzMyLjk3MTQnKSk6CisgICAgICAgICAgICBmb3IgY291bnQgaW4gKDIsIDUsIDEwLCAyMCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBmbG9hdCh4KSkKKworICAgIGRlZiB0ZXN0X29kZF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDUsIDQpLCBGKDksIDQpLCBGKDEzLCA0KSwgRigxMywgNCksIEYoMTcsIDQpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy4wKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRig1LCA0KSwgRig5LCA0KSwgRigxMywgNCksIEYoMTMsIDQpLCBGKDE3LCA0KSwgRigxNywgNCldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjI1KQorCisgICAgZGVmIHRlc3Rfb2RkX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc2LjUnKSwgRCgnNi41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDYuNzUpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNS41JyksIEQoJzYuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNi41KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzUuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzcuNScpLCBEKCc4LjUnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDcuMCkKKworICAgIGRlZiB0ZXN0X2ludGVydmFsKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2dyb3VwZWQgd2l0aCBpbnRlcnZhbCBhcmd1bWVudC4KKyAgICAgICAgZGF0YSA9IFsyLjI1LCAyLjUsIDIuNSwgMi43NSwgMi43NSwgMy4wLCAzLjAsIDMuMjUsIDMuNSwgMy43NV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMC4yNSksIDIuODc1KQorICAgICAgICBkYXRhID0gWzIuMjUsIDIuNSwgMi41LCAyLjc1LCAyLjc1LCAyLjc1LCAzLjAsIDMuMCwgMy4yNSwgMy41LCAzLjc1XQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAwLjI1KSwgMi44MzMzMzMzMywgdG9sPTFlLTgpCisgICAgICAgIGRhdGEgPSBbMjIwLCAyMjAsIDI0MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyODAsIDI4MCwgMzAwLCAzMjAsIDM0MF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSwgMjApLCAyNjUuMCkKKworCitjbGFzcyBUZXN0TW9kZShOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNhc2VzIGZvciB0aGUgZGlzY3JldGUgdmVyc2lvbiBvZiBtb2RlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tb2RlCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJPdmVybG9hZCBtZXRob2QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uIiIiCisgICAgICAgICMgTWFrZSBzdXJlIHRlc3QgZGF0YSBoYXMgZXhhY3RseSBvbmUgbW9kZS4KKyAgICAgICAgcmV0dXJuIFsxLCAxLCAxLCAxLCAzLCA0LCA3LCA5LCAwLCA4LCAyXQorCisgICAgZGVmIHRlc3RfcmFuZ2VfZGF0YShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSB0ZXN0IGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLgorICAgICAgICBkYXRhID0gcmFuZ2UoMjAsIDUwLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3Rfbm9taW5hbF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIG5vbWluYWwgZGF0YS4KKyAgICAgICAgZGF0YSA9ICdhYmNiZGInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAnYicpCisgICAgICAgIGRhdGEgPSAnZmUgZmkgZm8gZnVtIGZpIGZpJy5zcGxpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAnZmknKQorCisgICAgZGVmIHRlc3RfZGlzY3JldGVfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBkaXNjcmV0ZSBudW1lcmljIGRhdGEuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgZCA9IGRhdGEgKyBbaV0KKyAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkKSwgaSkKKworICAgIGRlZiB0ZXN0X2JpbW9kYWxfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgd2l0aCBiaW1vZGFsIGRhdGEuCisgICAgICAgIGRhdGEgPSBbMSwgMSwgMiwgMiwgMiwgMiwgMywgNCwgNSwgNiwgNiwgNiwgNiwgNywgOCwgOSwgOV0KKyAgICAgICAgYXNzZXJ0IGRhdGEuY291bnQoMikgPT0gZGF0YS5jb3VudCg2KSA9PSA0CisgICAgICAgICMgQ2hlY2sgZm9yIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X3VuaXF1ZV9kYXRhX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIGV4Y2VwdGlvbiB3aGVuIGRhdGEgcG9pbnRzIGFyZSBhbGwgdW5pcXVlLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9ub25lX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IG1vZGUgcmFpc2VzIFR5cGVFcnJvciBpZiBnaXZlbiBOb25lIGFzIGRhdGEuCisKKyAgICAgICAgIyBUaGlzIHRlc3QgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIG1vZGUgdXNlcworICAgICAgICAjIGNvbGxlY3Rpb25zLkNvdW50ZXIsIHdoaWNoIGFjY2VwdHMgTm9uZSBhbmQgcmV0dXJucyBhbiBlbXB0eSBkaWN0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgTm9uZSkKKworCisjID09PSBUZXN0cyBmb3IgdmFyaWFuY2VzIGFuZCBzdGFuZGFyZCBkZXZpYXRpb25zID09PQorCitjbGFzcyBWYXJpYW5jZVN0ZGV2TWl4aW4oVW5pdmFyaWF0ZUNvbW1vbk1peGluKToKKyAgICAjIE1peGluIGNsYXNzIGhvbGRpbmcgY29tbW9uIHRlc3RzIGZvciB2YXJpYW5jZSBhbmQgc3RkIGRldi4KKworICAgICMgU3ViY2xhc3NlcyBzaG91bGQgaW5oZXJpdCBmcm9tIHRoaXMgYmVmb3JlIE51bWVyaWNUZXN0Q2xhc3MsIGluIG9yZGVyCisgICAgIyB0byBzZWUgdGhlIHJlbCBhdHRyaWJ1dGUgYmVsb3cuIFNlZSB0ZXN0U2hpZnREYXRhIGZvciBhbiBleHBsYW5hdGlvbi4KKworICAgIHJlbCA9IDFlLTEyCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgRGV2aWF0aW9uIG9mIGEgc2luZ2xlIHZhbHVlIGlzIHplcm8uCisgICAgICAgIGZvciB4IGluICgxMSwgMTkuOCwgNC42ZTE0LCBGcmFjdGlvbigyMSwgMzQpLCBEZWNpbWFsKCc4LjM5MicpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFt4XSksIDApCisKKyAgICBkZWYgdGVzdF9yZXBlYXRlZF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgVGhlIGRldmlhdGlvbiBvZiBhIHNpbmdsZSByZXBlYXRlZCB2YWx1ZSBpcyB6ZXJvLgorICAgICAgICBmb3IgeCBpbiAoNy4yLCA0OSwgOC4xZTE1LCBGcmFjdGlvbigzLCA3KSwgRGVjaW1hbCgnNjIuNDgwMicpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgMywgNSwgMTUpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMCkKKworICAgIGRlZiB0ZXN0X2RvbWFpbl9lcnJvcl9yZWdyZXNzaW9uKHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBkb21haW4gZXJyb3IgZXhjZXB0aW9uLgorICAgICAgICAjIChUaGFua3MgdG8gR2VyZW15IENvbmRyYS4pCisgICAgICAgIGRhdGEgPSBbMC4xMjM0NTY3ODkwMTIzNDVdKjEwMDAwCisgICAgICAgICMgQWxsIHRoZSBpdGVtcyBhcmUgaWRlbnRpY2FsLCBzbyB2YXJpYW5jZSBzaG91bGQgYmUgZXhhY3RseSB6ZXJvLgorICAgICAgICAjIFdlIGFsbG93IHNvbWUgc21hbGwgcm91bmQtb2ZmIGVycm9yLCBidXQgbm90IG11Y2guCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHJlc3VsdCwgMC4wLCB0b2w9NWUtMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHJlc3VsdCwgMCkgICMgQSBuZWdhdGl2ZSByZXN1bHQgbXVzdCBmYWlsLgorCisgICAgZGVmIHRlc3Rfc2hpZnRfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc2hpZnRpbmcgdGhlIGRhdGEgYnkgYSBjb25zdGFudCBhbW91bnQgZG9lcyBub3QgYWZmZWN0CisgICAgICAgICMgdGhlIHZhcmlhbmNlIG9yIHN0ZGV2LiBPciBhdCBsZWFzdCBub3QgbXVjaC4KKworICAgICAgICAjIER1ZSB0byByb3VuZGluZywgdGhpcyB0ZXN0IHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGlkZWFsLiBXZSBhbGxvdworICAgICAgICAjIHNvbWUgdG9sZXJhbmNlIGF3YXkgZnJvbSAibm8gY2hhbmdlIGF0IGFsbCIgYnkgc2V0dGluZyB0b2wgYW5kL29yIHJlbAorICAgICAgICAjIGF0dHJpYnV0ZXMuIFN1YmNsYXNzZXMgbWF5IHNldCB0aWdodGVyIG9yIGxvb3NlciBlcnJvciB0b2xlcmFuY2VzLgorICAgICAgICByYXcgPSBbMS4wMywgMS4yNywgMS45NCwgMi4wNCwgMi41OCwgMy4xNCwgNC43NSwgNC45OCwgNS40MiwgNi43OF0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICAjIERvbid0IHNldCBzaGlmdCB0b28gaGlnaCwgdGhlIGJpZ2dlciBpdCBpcywgdGhlIG1vcmUgcm91bmRpbmcgZXJyb3IuCisgICAgICAgIHNoaWZ0ID0gMWU1CisgICAgICAgIGRhdGEgPSBbeCArIHNoaWZ0IGZvciB4IGluIHJhd10KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfc2hpZnRfZGF0YV9leGFjdChzZWxmKToKKyAgICAgICAgIyBMaWtlIHRlc3Rfc2hpZnRfZGF0YSwgYnV0IHJlc3VsdCBpcyBhbHdheXMgZXhhY3QuCisgICAgICAgIHJhdyA9IFsxLCAzLCAzLCA0LCA1LCA3LCA5LCAxMCwgMTEsIDE2XQorICAgICAgICBhc3NlcnQgYWxsKHg9PWludCh4KSBmb3IgeCBpbiByYXcpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKHJhdykKKyAgICAgICAgc2hpZnQgPSAxMCoqOQorICAgICAgICBkYXRhID0gW3ggKyBzaGlmdCBmb3IgeCBpbiByYXddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2l0ZXJfbGlzdF9zYW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpdGVyIGRhdGEgYW5kIGxpc3QgZGF0YSBnaXZlIHRoZSBzYW1lIHJlc3VsdC4KKworICAgICAgICAjIFRoaXMgaXMgYW4gZXhwbGljaXQgdGVzdCB0aGF0IGl0ZXJhdG9ycyBhbmQgbGlzdHMgYXJlIHRyZWF0ZWQgdGhlCisgICAgICAgICMgc2FtZTsganVzdGlmaWNhdGlvbiBmb3IgdGhpcyB0ZXN0IG92ZXIgYW5kIGFib3ZlIHRoZSBzaW1pbGFyIHRlc3QKKyAgICAgICAgIyBpbiBVbml2YXJpYXRlQ29tbW9uTWl4aW4gaXMgdGhhdCBhbiBlYXJsaWVyIGRlc2lnbiBoYWQgdmFyaWFuY2UgYW5kCisgICAgICAgICMgZnJpZW5kcyBzd2FwIGJldHdlZW4gb25lLSBhbmQgdHdvLXBhc3MgYWxnb3JpdGhtcywgd2hpY2ggd291bGQKKyAgICAgICAgIyBzb21ldGltZXMgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cy4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMywgOCkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGl0ZXIoZGF0YSkpLCBleHBlY3RlZCkKKworCitjbGFzcyBUZXN0UFZhcmlhbmNlKFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3RzIGZvciBwb3B1bGF0aW9uIHZhcmlhbmNlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5wdmFyaWFuY2UKKworICAgIGRlZiB0ZXN0X2V4YWN0X3VuaWZvcm0oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgdmFyaWFuY2UgYWdhaW5zdCBhbiBleGFjdCByZXN1bHQgZm9yIHVuaWZvcm0gZGF0YS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTAwMDApKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBleHBlY3RlZCA9ICgxMDAwMCoqMiAtIDEpLzEyICAjIEV4YWN0IHZhbHVlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIGludCBkYXRhLgorICAgICAgICBkYXRhID0gWzQsIDcsIDEzLCAxNl0KKyAgICAgICAgZXhhY3QgPSAyMi41CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleGFjdCkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBGcmFjdGlvbiBkYXRhLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDQpLCBGKDEsIDQpLCBGKDMsIDQpLCBGKDcsIDQpXQorICAgICAgICBleGFjdCA9IEYoMywgOCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRnJhY3Rpb24pCisKKyAgICBkZWYgdGVzdF9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHBvcHVsYXRpb24gdmFyaWFuY2Ugd2l0aCBEZWNpbWFsIGRhdGEuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMTIuMSIpLCBEKCIxMi4yIiksIEQoIjEyLjUiKSwgRCgiMTIuOSIpXQorICAgICAgICBleGFjdCA9IEQoJzAuMDk2ODc1JykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRGVjaW1hbCkKKworCitjbGFzcyBUZXN0VmFyaWFuY2UoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdHMgZm9yIHNhbXBsZSB2YXJpYW5jZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MudmFyaWFuY2UKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBWYXJpYW5jZVN0ZGV2TWl4aW4uCisgICAgICAgIGZvciB4IGluICgzNSwgMjQuNywgOC4yZTE1LCBGcmFjdGlvbigxOSwgMzApLCBEZWNpbWFsKCc0LjIwODQnKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBbeF0pCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggaW50IGRhdGEuCisgICAgICAgIGRhdGEgPSBbNCwgNywgMTMsIDE2XQorICAgICAgICBleGFjdCA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleGFjdCkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHNhbXBsZSB2YXJpYW5jZSB3aXRoIEZyYWN0aW9uIGRhdGEuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNCksIEYoMSwgNCksIEYoMywgNCksIEYoNywgNCldCisgICAgICAgIGV4YWN0ID0gRigxLCAyKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBGcmFjdGlvbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggRGVjaW1hbCBkYXRhLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoMiksIEQoMiksIEQoNyksIEQoOSldCisgICAgICAgIGV4YWN0ID0gNCpEKCc5LjUnKS9EKDMpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIERlY2ltYWwpCisKKworY2xhc3MgVGVzdFBTdGRldihWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3IgcG9wdWxhdGlvbiBzdGFuZGFyZCBkZXZpYXRpb24uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnBzdGRldgorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b192YXJpYW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3RkZXYgaXMsIGluIGZhY3QsIHRoZSBzcXVhcmUgcm9vdCBvZiB2YXJpYW5jZS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTcsIDI0KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBtYXRoLnNxcnQoc3RhdGlzdGljcy5wdmFyaWFuY2UoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworCitjbGFzcyBUZXN0U3RkZXYoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdHMgZm9yIHNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24uCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnN0ZGV2CisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgbWV0aG9kIGZyb20gVmFyaWFuY2VTdGRldk1peGluLgorICAgICAgICBmb3IgeCBpbiAoODEsIDIwMy43NCwgMy45ZTE0LCBGcmFjdGlvbig1LCAyMSksIERlY2ltYWwoJzM1LjcxOScpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIFt4XSkKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG9fdmFyaWFuY2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHN0ZGV2IGlzLCBpbiBmYWN0LCB0aGUgc3F1YXJlIHJvb3Qgb2YgdmFyaWFuY2UuCisgICAgICAgIGRhdGEgPSBbcmFuZG9tLnVuaWZvcm0oLTIsIDkpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IG1hdGguc3FydChzdGF0aXN0aWNzLnZhcmlhbmNlKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKworIyA9PT0gUnVuIHRlc3RzID09PQorCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBpZ25vcmUpOgorICAgICIiIlVzZWQgZm9yIGRvY3Rlc3QvdW5pdHRlc3QgaW50ZWdyYXRpb24uIiIiCisgICAgdGVzdHMuYWRkVGVzdHMoZG9jdGVzdC5Eb2NUZXN0U3VpdGUoKSkKKyAgICByZXR1cm4gdGVzdHMKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKaW5kZXggNzhjOWM1Yi4uNzcyY2QwNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CkBAIC0xODIsMjYgKzE4MiwyMyBAQAogICAgIGEgZGF0ZSBiZWZvcmUgMTkwMCBpcyBwYXNzZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgY29udGFpbmluZyAiJXkiCiAgICAgIiIiCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIk9ubHkgYXBwbGllcyB0byBXaW5kb3dzIikKLSAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwX3dpbihzZWxmKToKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIkRvZXNuJ3QgYXBwbHkgb24gV2luZG93cyIpCi0gICAgZGVmIHRlc3RfeV9iZWZvcmVfMTkwMF9ub253aW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAotICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpLCAiOTkiKQorICAgIGRlZiB0ZXN0X3lfYmVmb3JlXzE5MDAoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEzNjc0LCAjMTk2MzQKKyAgICAgICAgdCA9ICgxODk5LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKQorICAgICAgICBpZiAoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIKKyAgICAgICAgb3Igc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoKCJhaXgiLCAic3Vub3MiLCAic29sYXJpcyIpKSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5zdHJmdGltZSgiJXkiLCB0KSwgIjk5IikKIAogICAgIGRlZiB0ZXN0X3lfMTkwMChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwKSksICIwMCIpCiAKICAgICBkZWYgdGVzdF95X2FmdGVyXzE5MDAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMjAxMywgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpLCAiMTMiKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RyZnRpbWVUZXN0LCBZMTkwMFRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CmluZGV4IGM1OTc5ZmMuLjQxYjZlNWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydG9kLnB5CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBGYWxzZSwgImV4cGVjdGVkIFZhbHVlRXJyb3IiCiAKLSAgICBAdGVzdC5zdXBwb3J0LmJpZ21lbXRlc3Qoc2l6ZT10ZXN0LnN1cHBvcnQuXzJHKzEwLCBtZW11c2U9NCwgZHJ5X3J1bj1GYWxzZSkKKyAgICBAdGVzdC5zdXBwb3J0LmJpZ21lbXRlc3Qoc2l6ZT10ZXN0LnN1cHBvcnQuXzJHKzEwLCBtZW11c2U9MywgZHJ5X3J1bj1GYWxzZSkKICAgICBkZWYgdGVzdF9vdmVyc2l6ZWRfZGlnaXRfc3RyaW5ncyhzZWxmLCBtYXhzaXplKToKICAgICAgICAgIyBJbnB1dCBzdHJpbmcgd2hvc2UgbGVuZ3RoIGRvZXNuJ3QgZml0IGluIGFuIElOVC4KICAgICAgICAgcyA9ICIxLiIgKyAiMSIgKiBtYXhzaXplCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CmluZGV4IDUwY2FlMDUuLjAxMDdlZWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0LnB5CkBAIC0xLDQgKzEsNiBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgYWJjCiBpbXBvcnQgYXJyYXkKK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCkBAIC02LDcgKzgsNiBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIElTQklHRU5ESUFOID0gc3lzLmJ5dGVvcmRlciA9PSAiYmlnIgotSVMzMkJJVCA9IHN5cy5tYXhzaXplID09IDB4N2ZmZmZmZmYKIAogaW50ZWdlcl9jb2RlcyA9ICdiJywgJ0InLCAnaCcsICdIJywgJ2knLCAnSScsICdsJywgJ0wnLCAncScsICdRJywgJ24nLCAnTicKIGJ5dGVvcmRlcnMgPSAnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScKQEAgLTQ4OSw3ICs0OTAsNyBAQAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGNsYXNzIEV4cGxvZGluZ0Jvb2wob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICBmb3IgcHJlZml4IGluIHR1cGxlKCI8PiE9IikrKCcnLCk6CiAgICAgICAgICAgICBmYWxzZSA9ICgpLCBbXSwgW10sICcnLCAwCiAgICAgICAgICAgICB0cnVlID0gWzFdLCAndGVzdCcsIDUsIC0xLCAweGZmZmZmZmZmKzEsIDB4ZmZmZmZmZmYvMgpAQCAtNTIwLDEwICs1MjEsMTAgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKHByZWZpeCArICc/JywgRXhwbG9kaW5nQm9vbCgpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgSU9FcnJvcjogc3RydWN0LnBhY2soJXIsICIKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIE9TRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBsb2RpbmdCb29sKCkpIiAlIChwcmVmaXggKyAnPycpKQogCiAgICAgICAgIGZvciBjIGluIFtiJ1x4MDEnLCBiJ1x4N2YnLCBiJ1x4ZmYnLCBiJ1x4MGYnLCBiJ1x4ZjAnXToKQEAgLTUzNiwxMCArNTM3LDYgQEAKICAgICAgICAgaHVnZWNvdW50MiA9ICd7fWJ7fUgnLmZvcm1hdChzeXMubWF4c2l6ZS8vMiwgc3lzLm1heHNpemUvLzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LmNhbGNzaXplLCBodWdlY291bnQyKQogCi0gICAgaWYgSVMzMkJJVDoKLSAgICAgICAgZGVmIHRlc3RfY3Jhc2hlcihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWIiLCAiYSIpCi0KICAgICBkZWYgdGVzdF90cmFpbGluZ19jb3VudGVyKHNlbGYpOgogICAgICAgICBzdG9yZSA9IGFycmF5LmFycmF5KCdiJywgYicgJyoxMDApCiAKQEAgLTU3Niw3ICs1NzMsNyBAQAogICAgICAgICAjIFRoZSBzaXplIG9mICdQeVN0cnVjdE9iamVjdCcKICAgICAgICAgdG90YWxzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnMm4zUCcpCiAgICAgICAgICMgVGhlIHNpemUgdGFrZW4gdXAgYnkgdGhlICdmb3JtYXRjb2RlJyBkeW5hbWljIGFycmF5Ci0gICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AybjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKKyAgICAgICAgdG90YWxzaXplICs9IHN0cnVjdC5jYWxjc2l6ZSgnUDNuMFAnKSAqIChudW1iZXJfb2ZfY29kZXMgKyAxKQogICAgICAgICBzdXBwb3J0LmNoZWNrX3NpemVvZihzZWxmLCBzdHJ1Y3QuU3RydWN0KGZvcm1hdF9zdHIpLCB0b3RhbHNpemUpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKQEAgLTU4NywxNCArNTg0LDg0IEBACiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdCJyAqIDEyMzQsIDEyMzQpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCdmZCcsIDIpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCd4eHh4eHh4eHh4eHh4eCcsIDApCi0gICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxMDBIJywgMTAwKQorICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcxODdzJywgMSkKICAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzIwcCcsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcwcycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcwYycsIDApCiAKKworY2xhc3MgVW5wYWNrSXRlcmF0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0cyBmb3IgaXRlcmF0aXZlIHVucGFja2luZyAoc3RydWN0LlN0cnVjdC5pdGVyX3VucGFjaykuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Qoc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2tfaXRlcmF0b3IoaXQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIGFiYy5JdGVyYWJsZSkKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5pYmNwJykKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiIikKKyAgICAgICAgX2NoZWNrX2l0ZXJhdG9yKGl0KQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYiIxMjM0NTY3IikKKyAgICAgICAgX2NoZWNrX2l0ZXJhdG9yKGl0KQorICAgICAgICAjIFdyb25nIGJ5dGVzIGxlbmd0aAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1Njc4IikKKyAgICAgICAgIyBaZXJvLWxlbmd0aCBzdHJ1Y3QKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvcik6CisgICAgICAgICAgICBzLml0ZXJfdW5wYWNrKGIiIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyIikKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGUoc2VsZik6CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwYjBjMGQwZSwgMTUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKyAgICBkZWYgdGVzdF9hcmJpdHJhcnlfYnVmZmVyKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDExKSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKG1lbW9yeXZpZXcoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfbGVuZ3RoX2hpbnQoc2VsZik6CisgICAgICAgIGxoID0gb3BlcmF0b3IubGVuZ3RoX2hpbnQKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxNikpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMykKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDIpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAxKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAwKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2Z1bmMoc2VsZik6CisgICAgICAgICMgU2FuaXR5IGNoZWNrIGZvciB0aGUgZ2xvYmFsIHN0cnVjdC5pdGVyX3VucGFjaygpCisgICAgICAgIGl0ID0gc3RydWN0Lml0ZXJfdW5wYWNrKCc+SUInLCBieXRlcyhyYW5nZSgxLCAxMSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3RydWN0VGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQppbmRleCBhODllOTU1Li4zNTNkMGVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weQpAQCAtMzgsNyArMzgsNyBAQAogICAgICAgICAjIG9zLnN0YXQoKSBnaXZlcyBhIGNvbXBsaWNhdGVkIHN0cnVjdCBzZXF1ZW5jZS4KICAgICAgICAgc3QgPSBvcy5zdGF0KF9fZmlsZV9fKQogICAgICAgICByZXAgPSByZXByKHN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgob3MubmFtZSArICIuc3RhdF9yZXN1bHQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKCJvcy5zdGF0X3Jlc3VsdCIpKQogICAgICAgICBzZWxmLmFzc2VydEluKCJzdF9tb2RlPSIsIHJlcCkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfaW5vPSIsIHJlcCkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfZGV2PSIsIHJlcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCBmNWE3MGEzLi40NmUwMTJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC0xMSw2ICsxMSw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmUKK2ltcG9ydCBzZWxlY3RvcnMKIGltcG9ydCBzeXNjb25maWcKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHNlbGVjdApAQCAtMTksMTAgKzIwLDYgQEAKIGltcG9ydCB0ZXh0d3JhcAogCiB0cnk6Ci0gICAgaW1wb3J0IHJlc291cmNlCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcmVzb3VyY2UgPSBOb25lCi10cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKQEAgLTE2Miw4ICsxNTksMjggQEAKICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidCREZMJywgb3V0cHV0KQogCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZGluX2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBjYW4gYmUgY2FsbGVkIHdpdGggc3RkaW4gc2V0IHRvIGEgZmlsZQorICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGYuY2xvc2UpCisgICAgICAgIHRmLndyaXRlKGIncGVhcicpCisgICAgICAgIHRmLnNlZWsoMCkKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpLnVwcGVyKCkpIl0sCisgICAgICAgICAgICAgICAgc3RkaW49dGYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQRUFSJywgb3V0cHV0KQorCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X2lucHV0X2FyZyhzZWxmKToKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSBjYW4gYmUgY2FsbGVkIHdpdGggaW5wdXQgc2V0IHRvIGEgc3RyaW5nCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoKS51cHBlcigpKSJdLAorICAgICAgICAgICAgICAgIGlucHV0PWIncGVhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidQRUFSJywgb3V0cHV0KQorCiAgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZG91dF9hcmcoc2VsZik6Ci0gICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gc3RkZXJyIHJlZGlyZWN0ZWQgdG8gc3Rkb3V0CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgcmVmdXNlcyB0byBhY2NlcHQgJ3N0ZG91dCcgYXJndW1lbnQKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjOgogICAgICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInByaW50KCd3aWxsIG5vdCBiZSBydW4nKSJdLApAQCAtMTcxLDYgKzE4OCwyMCBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3Rkb3V0IGFyZyBzdXBwbGllZC4iKQogICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRvdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQogCisgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X3N0ZGluX3dpdGhfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIHJlZnVzZXMgdG8gYWNjZXB0ICdzdGRpbicgd2l0aCAnaW5wdXQnCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ3dpbGwgbm90IGJlIHJ1bicpIl0sCisgICAgICAgICAgICAgICAgICAgIHN0ZGluPXRmLCBpbnB1dD1iJ2hhcmUnKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3RkaW4gYW5kIGlucHV0IGFyZ3Mgc3VwcGxpZWQuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3RkaW4nLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbnB1dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisKICAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfdGltZW91dChzZWxmKToKICAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiB3aXRoIHRpbWVvdXQgYXJnCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZCkgYXMgYzoKQEAgLTg1Myw4ICs4ODQsOSBAQAogICAgICAgICAjCiAgICAgICAgICMgVVRGLTE2IGFuZCBVVEYtMzItQkUgYXJlIHN1ZmZpY2llbnQgdG8gY2hlY2sgYm90aCB3aXRoIEJPTSBhbmQKICAgICAgICAgIyB3aXRob3V0LCBhbmQgVVRGLTE2IGFuZCBVVEYtMzIuCisgICAgICAgIGltcG9ydCBfYm9vdGxvY2FsZQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gWyd1dGYtMTYnLCAndXRmLTMyLWJlJ106Ci0gICAgICAgICAgICBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgIG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZyA9IF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nCiAgICAgICAgICAgICAjIEluZGlyZWN0bHkgdmlhIGlvLlRleHRJT1dyYXBwZXIsIFBvcGVuKCkgZGVmYXVsdHMgdG8KICAgICAgICAgICAgICMgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKSBhbmQgZWFybGllciBpbiBQeXRob24gMy4yIHRvCiAgICAgICAgICAgICAjIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpLgpAQCAtODY1LDcgKzg5Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nKQogICAgICAgICAgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29kZV0KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBnZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgICAgIF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nID0gZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgICAgICAjIFdlIHNldCBzdGRpbiB0byBiZSBub24tTm9uZSBiZWNhdXNlLCBhcyBvZiB0aGlzIHdyaXRpbmcsCiAgICAgICAgICAgICAgICAgIyBhIGRpZmZlcmVudCBjb2RlIHBhdGggaXMgdXNlZCB3aGVuIHRoZSBudW1iZXIgb2YgcGlwZXMgaXMKICAgICAgICAgICAgICAgICAjIHplcm8gb3Igb25lLgpAQCAtODc0LDcgKzkwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiAgICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZShpbnB1dD0nJykKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nID0gb2xkX2dldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICAgICAgX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCAnMVxuMlxuM1xuNCcpCiAKICAgICBkZWYgdGVzdF9ub19sZWFraW5nKHNlbGYpOgpAQCAtOTgyLDggKzEwMTQsNyBAQAogICAgICAgICAjIHZhbHVlIGZvciB0aGF0IGxpbWl0LCBidXQgV2luZG93cyBoYXMgMjA0OCwgc28gd2UgbG9vcAogICAgICAgICAjIDEwMjQgdGltZXMgKGVhY2ggY2FsbCBsZWFrZWQgdHdvIGZkcykuCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMjQpOgotICAgICAgICAgICAgIyBXaW5kb3dzIHJhaXNlcyBJT0Vycm9yLiAgT3RoZXJzIHJhaXNlIE9TRXJyb3IuCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCkBAIC0xMTE0LDQ3ICsxMTQ1LDYgQEAKICAgICAgICAgZmRzX2FmdGVyX2V4Y2VwdGlvbiA9IG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkc19iZWZvcmVfcG9wZW4sIGZkc19hZnRlcl9leGNlcHRpb24pCiAKLQotIyBjb250ZXh0IG1hbmFnZXIKLWNsYXNzIF9TdXBwcmVzc0NvcmVGaWxlcyhvYmplY3QpOgotICAgICIiIlRyeSB0byBwcmV2ZW50IGNvcmUgZmlsZXMgZnJvbSBiZWluZyBjcmVhdGVkLiIiIgotICAgIG9sZF9saW1pdCA9IE5vbmUKLQotICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgICIiIlRyeSB0byBzYXZlIHByZXZpb3VzIHVsaW1pdCwgdGhlbiBzZXQgaXQgdG8gKDAsIDApLiIiIgotICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLm9sZF9saW1pdCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSkKLSAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAotICAgICAgICAgICAgIyBpbiAnRGV2ZWxvcGVyJyBtb2RlIGFuZCB3YXJuIHRoYXQgaXQgd2lsbCBnZXQgdHJpZ2dlcmVkCi0gICAgICAgICAgICAjIHdoZW4gaXQgaXMuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoaXMgY29udGV4dCBtYW5hZ2VyIGlzIHVzZWQgaW4gdGVzdHMKLSAgICAgICAgICAgICMgdGhhdCBtaWdodCB0cmlnZ2VyIHRoZSBuZXh0IG1hbmFnZXIuCi0gICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKLSAgICAgICAgICAgICAgICAgICAgJ2NvbS5hcHBsZS5DcmFzaFJlcG9ydGVyJywgJ0RpYWxvZ1R5cGUnXSwKLSAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKVswXQotICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6Ci0gICAgICAgICAgICAgICAgcHJpbnQoInRoaXMgdGVzdHMgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCAiCi0gICAgICAgICAgICAgICAgICAgICAgInRoYXQgaXMgaW50ZW50aW9uYWwiLCBlbmQ9JycpCi0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJSZXR1cm4gY29yZSBmaWxlIGJlaGF2aW9yIHRvIGRlZmF1bHQuIiIiCi0gICAgICAgIGlmIHNlbGYub2xkX2xpbWl0IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF9saW1pdCkKLSAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotCiBAdW5pdHRlc3Quc2tpcElmKG1zd2luZG93cywgIlBPU0lYIHNwZWNpZmljIHRlc3RzIikKIGNsYXNzIFBPU0lYUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTEyNDMsNyArMTIzMyw3IEBACiAKICAgICBkZWYgdGVzdF9ydW5fYWJvcnQoc2VsZik6CiAgICAgICAgICMgcmV0dXJuY29kZSBoYW5kbGVzIHNpZ25hbCB0ZXJtaW5hdGlvbgotICAgICAgICB3aXRoIF9TdXBwcmVzc0NvcmVGaWxlcygpOgorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgb3M7IG9zLmFib3J0KCknXSkKICAgICAgICAgICAgIHAud2FpdCgpCkBAIC0xMjY2LDcgKzEyNTYsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49cmFpc2VfaXQpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcywKICAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgVmFsdWVFcnJvciBmcm9tIHRoZSBwcmVleGVjX2ZuIikKQEAgLTEzMDYsOSArMTI5NiwxMCBAQAogICAgICAgICAiIiJJc3N1ZTE2MTQwOiBEb24ndCBkb3VibGUgY2xvc2UgcGlwZXMgb24gcHJlZXhlYyBlcnJvci4iIiIKIAogICAgICAgICBkZWYgcmFpc2VfaXQoKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZm9yY2UgdGhlIF9leGVjdXRlX2NoaWxkKCkgZXJycGlwZV9kYXRhIHBhdGguIikKKyAgICAgICAgICAgIHJhaXNlIHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAiZm9yY2UgdGhlIF9leGVjdXRlX2NoaWxkKCkgZXJycGlwZV9kYXRhIHBhdGguIikKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IpOgogICAgICAgICAgICAgc2VsZi5fVGVzdEV4ZWN1dGVDaGlsZFBvcGVuKAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicGFzcyJdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLApAQCAtMTUwNywxNiArMTQ5OCwyOCBAQAogICAgICAgICAjIFRlcm1pbmF0aW5nIGEgZGVhZCBwcm9jZXNzCiAgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQogCisgICAgZGVmIF9zYXZlX2ZkcyhzZWxmLCBzYXZlX2Zkcyk6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGZvciBmZCBpbiBzYXZlX2ZkczoKKyAgICAgICAgICAgIGluaGVyaXRhYmxlID0gb3MuZ2V0X2luaGVyaXRhYmxlKGZkKQorICAgICAgICAgICAgc2F2ZWQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBmZHMuYXBwZW5kKChmZCwgc2F2ZWQsIGluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIGZkcworCisgICAgZGVmIF9yZXN0b3JlX2ZkcyhzZWxmLCBmZHMpOgorICAgICAgICBmb3IgZmQsIHNhdmVkLCBpbmhlcml0YWJsZSBpbiBmZHM6CisgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBmZCwgaW5oZXJpdGFibGU9aW5oZXJpdGFibGUpCisgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKwogICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6CiAgICAgICAgICMgSXNzdWUgIzk5MDU6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAogICAgICAgICAjIHNvbWUgc3RhbmRhcmQgZmRzIGNsb3NlZAogICAgICAgICBzdGRpbiA9IDAKLSAgICAgICAgbmV3ZmRzID0gW10KLSAgICAgICAgZm9yIGEgaW4gZmRzOgotICAgICAgICAgICAgYiA9IG9zLmR1cChhKQotICAgICAgICAgICAgbmV3ZmRzLmFwcGVuZChiKQotICAgICAgICAgICAgaWYgYSA9PSAwOgotICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhmZHMpCisgICAgICAgIGZvciBmZCwgc2F2ZWQsIGluaGVyaXRhYmxlIGluIHNhdmVkX2ZkczoKKyAgICAgICAgICAgIGlmIGZkID09IDA6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBzYXZlZAorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CiAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCkBAIC0xNTMxLDEwICsxNTM0LDcgQEAKICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChvdXQsIGVyciksIChiJ2FwcGxlJywgYidvcmFuZ2UnKSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZvciBiLCBhIGluIHppcChuZXdmZHMsIGZkcyk6Ci0gICAgICAgICAgICAgICAgb3MuZHVwMihiLCBhKQotICAgICAgICAgICAgZm9yIGIgaW4gbmV3ZmRzOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKGIpCisgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9mZF8wKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzBdKQpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKICAgICAgICAgICAgIG9zLmxzZWVrKHRlbXBfZmRzWzFdLCAwLCAwKQogCiAgICAgICAgICAgICAjIG1vdmUgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMgb3V0IG9mIHRoZSB3YXkKLSAgICAgICAgICAgIHNhdmVkX2ZkcyA9IFtvcy5kdXAoZmQpIGZvciBmZCBpbiByYW5nZSgzKV0KKyAgICAgICAgICAgIHNhdmVkX2ZkcyA9IHNlbGYuX3NhdmVfZmRzKHJhbmdlKDMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgZHVwbGljYXRlIHRoZSBmaWxlIG9iamVjdHMgb3ZlciB0aGUgc3RhbmRhcmQgZmQncwogICAgICAgICAgICAgICAgIGZvciBmZCwgdGVtcF9mZCBpbiBlbnVtZXJhdGUodGVtcF9mZHMpOgpAQCAtMTYxMSwxMCArMTYxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj10ZW1wX2Zkc1swXSkKICAgICAgICAgICAgICAgICBwLndhaXQoKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAjIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGZkJ3MgdW5kZXJuZWF0aCBzeXMuc3RkaW4sIGV0Yy4KLSAgICAgICAgICAgICAgICBmb3Igc3RkLCBzYXZlZCBpbiBlbnVtZXJhdGUoc2F2ZWRfZmRzKToKLSAgICAgICAgICAgICAgICAgICAgb3MuZHVwMihzYXZlZCwgc3RkKQotICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICAgICAgICAgIGZvciBmZCBpbiB0ZW1wX2ZkczoKICAgICAgICAgICAgICAgICBvcy5sc2VlayhmZCwgMCwgMCkKQEAgLTE2MzgsNyArMTYzNSw3IEBACiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQogCiAgICAgICAgICAgICAjIHNhdmUgYSBjb3B5IG9mIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzCi0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgdGVtcCBmaWxlcyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzIDAsIDEsIDIKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE2NjQsOSArMTY2MSw3IEBACiAgICAgICAgICAgICAgICAgb3V0ID0gb3MucmVhZChzdGRvdXRfbm8sIDEwMjQpCiAgICAgICAgICAgICAgICAgZXJyID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKG9zLnJlYWQoc3RkZXJyX25vLCAxMDI0KSkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYiJnb3QgU1RESU4iKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiZXJyIikKQEAgLTE2OTgsNDAgKzE2OTMsNDcgQEAKICAgICAgICAgICAgICMgUHVyZSBQeXRob24gaW1wbGVtZW50YXRpb25zIGtlZXBzIHRoZSBtZXNzYWdlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAic3Vycm9nYXRlOlx1RENmZiIpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgIyBfcG9zaXhzdWJwcm9jZXNzIHVzZXMgYSBkZWZhdWx0IG1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJFeGNlcHRpb24gb2NjdXJyZWQgaW4gcHJlZXhlY19mbi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIG9yIFJ1bnRpbWVFcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3Igc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfdW5kZWNvZGFibGVfZW52KHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAoKCd0ZXN0JywgJ2FiY1x1RENGRicpLCAoJ3Rlc3RcdURDRkYnLCAnNDInKSk6CisgICAgICAgICAgICBlbmNvZGVkX3ZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQorCiAgICAgICAgICAgICAjIHRlc3Qgc3RyIHdpdGggc3Vycm9nYXRlcwogICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52KCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKLSAgICAgICAgICAgICMgVXNlIEMgbG9jYWxlIHRvIGdldCBhc2NpaSBmb3IgdGhlIGxvY2FsZSBlbmNvZGluZyB0byBmb3JjZQorICAgICAgICAgICAgIyBVc2UgQyBsb2NhbGUgdG8gZ2V0IEFTQ0lJIGZvciB0aGUgbG9jYWxlIGVuY29kaW5nIHRvIGZvcmNlCiAgICAgICAgICAgICAjIHN1cnJvZ2F0ZS1lc2NhcGluZyBvZiBceEZGIGluIHRoZSBjaGlsZCBwcm9jZXNzOyBvdGhlcndpc2UgaXQgY2FuCiAgICAgICAgICAgICAjIGJlIGRlY29kZWQgYXMtaXMgaWYgdGhlIGRlZmF1bHQgbG9jYWxlIGlzIGxhdGluLTEuCiAgICAgICAgICAgICBlbnZbJ0xDX0FMTCddID0gJ0MnCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4Iik6CisgICAgICAgICAgICAgICAgIyBPbiBBSVgsIHRoZSBDIGxvY2FsZSB1c2VzIHRoZSBMYXRpbjEgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBkZWNvZGVkX3ZhbHVlID0gZW5jb2RlZF92YWx1ZS5kZWNvZGUoImxhdGluMSIsICJzdXJyb2dhdGVlc2NhcGUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE9uIG90aGVyIFVOSVhlcywgdGhlIEMgbG9jYWxlIHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nCisgICAgICAgICAgICAgICAgZGVjb2RlZF92YWx1ZSA9IHZhbHVlCiAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCiAgICAgICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaShkZWNvZGVkX3ZhbHVlKSkKIAogICAgICAgICAgICAgIyB0ZXN0IGJ5dGVzCiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5lbmNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCiAgICAgICAgICAgICBzY3JpcHQgPSAiaW1wb3J0IG9zOyBwcmludChhc2NpaShvcy5nZXRlbnZiKCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGVudltrZXldID0gZW5jb2RlZF92YWx1ZQogICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkoZW5jb2RlZF92YWx1ZSkpCiAKICAgICBkZWYgdGVzdF9ieXRlc19wcm9ncmFtKHNlbGYpOgogICAgICAgICBhYnNfcHJvZ3JhbSA9IG9zLmZzZW5jb2RlKHN5cy5leGVjdXRhYmxlKQpAQCAtMTgzNyw2ICsxODM5LDkgQEAKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCiAgICAgICAgICAgICBvcGVuX2Zkcy5hZGQoZmQpCiAKKyAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgZmRfc3RhdHVzXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPUZhbHNlKQogICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKQEAgLTE4ODEsNiArMTg4Niw4IEBACiAgICAgICAgICAgICBmZHMgPSBvcy5waXBlKCkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzBdKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZHNbMV0pCisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmRzWzBdLCBUcnVlKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1sxXSwgVHJ1ZSkKICAgICAgICAgICAgIG9wZW5fZmRzLnVwZGF0ZShmZHMpCiAKICAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgpAQCAtMTkwMyw2ICsxOTEwLDMyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9RmFsc2UsIHBhc3NfZmRzPShmZCwgKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdvdmVycmlkaW5nIGNsb3NlX2ZkcycsIHN0cihjb250ZXh0Lndhcm5pbmcpKQogCisgICAgZGVmIHRlc3RfcGFzc19mZHNfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNjcmlwdCA9IHN1cHBvcnQuZmluZGZpbGUoImZkX3N0YXR1cy5weSIsIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorCisgICAgICAgIGluaGVyaXRhYmxlLCBub25faW5oZXJpdGFibGUgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBpbmhlcml0YWJsZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBub25faW5oZXJpdGFibGUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSwgVHJ1ZSkKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKG5vbl9pbmhlcml0YWJsZSwgRmFsc2UpCisgICAgICAgIHBhc3NfZmRzID0gKGluaGVyaXRhYmxlLCBub25faW5oZXJpdGFibGUpCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsIHNjcmlwdF0KKyAgICAgICAgYXJncyArPSBsaXN0KG1hcChzdHIsIHBhc3NfZmRzKSkKKworICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHM9cGFzc19mZHMpCisgICAgICAgIG91dHB1dCwgaWdub3JlZCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBmZHMgPSBzZXQobWFwKGludCwgb3V0cHV0LnNwbGl0KGInLCcpKSkKKworICAgICAgICAjIHRoZSBpbmhlcml0YWJsZSBmaWxlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbmhlcml0ZWQsIHNvIGl0cyBpbmhlcml0YWJsZQorICAgICAgICAjIGZsYWcgbXVzdCBiZSBzZXQgaW4gdGhlIGNoaWxkIHByb2Nlc3MgYWZ0ZXIgZm9yaygpIGFuZCBiZWZvcmUgZXhlYygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRzLCBzZXQocGFzc19mZHMpLCAib3V0cHV0PSVhIiAlIG91dHB1dCkKKworICAgICAgICAjIGluaGVyaXRhYmxlIGZsYWcgbXVzdCBub3QgYmUgY2hhbmdlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUpLCBGYWxzZSkKKwogICAgIGRlZiB0ZXN0X3N0ZG91dF9zdGRpbl9hcmVfc2luZ2xlX2lub3V0X2ZkKHNlbGYpOgogICAgICAgICB3aXRoIGlvLm9wZW4ob3MuZGV2bnVsbCwgInIrIikgYXMgaW5vdXQ6CiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLApAQCAtMTk5MCw3ICsyMDIzLDcgQEAKICAgICAgICAgIyBsZXQgc29tZSB0aW1lIGZvciB0aGUgcHJvY2VzcyB0byBleGl0LCBhbmQgY3JlYXRlIGEgbmV3IFBvcGVuOiB0aGlzCiAgICAgICAgICMgc2hvdWxkIHRyaWdnZXIgdGhlIHdhaXQoKSBvZiBwCiAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgYzoKICAgICAgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvYzoKQEAgLTIxNzUsMTUgKzIyMDgsMTYgQEAKICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpLAotICAgICAgICAgICAgICAgICAgICAgInBvbGwgc3lzdGVtIGNhbGwgbm90IHN1cHBvcnRlZCIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCiBjbGFzcyBQcm9jZXNzVGVzdENhc2VOb1BvbGwoUHJvY2Vzc1Rlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgc2VsZi5vcmlnX3NlbGVjdG9yID0gc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvcgorICAgICAgICBzdWJwcm9jZXNzLl9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvciA9IHNlbGYub3JpZ19zZWxlY3RvcgogICAgICAgICBQcm9jZXNzVGVzdENhc2UudGVhckRvd24oc2VsZikKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQppbmRleCA3NjczMTRmLi5hZjlmZmVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IHN5cwogaW1wb3J0IHN1bmF1CiAKQEAgLTQ3LDYgKzQ4LDM0IEBACiAgICAgICAiIiIpCiAKIAorY2xhc3MgU3VuYXVQQ00yNFRlc3QoYXVkaW90ZXN0cy5BdWRpb1dyaXRlVGVzdHMsCisgICAgICAgIGF1ZGlvdGVzdHMuQXVkaW9UZXN0c1dpdGhTb3VyY2VGaWxlLAorICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gc3VuYXUKKyAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20yNC5hdScKKyAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKKyAgICBuY2hhbm5lbHMgPSAyCisgICAgc2FtcHdpZHRoID0gMworICAgIGZyYW1lcmF0ZSA9IDExMDI1CisgICAgbmZyYW1lcyA9IDQ4CisgICAgY29tcHR5cGUgPSAnTk9ORScKKyAgICBjb21wbmFtZSA9ICdub3QgY29tcHJlc3NlZCcKKyAgICBmcmFtZXMgPSBieXRlcy5mcm9taGV4KCIiIlwKKyAgICAgIDAyMkQ2NUZGRUI5RCA0QjVBMEYwMEZBNTQgMzExM0MzMDRFRTJCIDgwRENENjA4NDMwMyBcCisgICAgICBDQkRFQzAwNkIyNjEgNDhBOTk4MDNGMkY4IEJGRTgyNDAxQjA3RCAwMzZCRkJGRTdCNUQgXAorICAgICAgQjg1NzU2RkEzRUM5IEI0QjA1NUYzNTAyQiAyOTk4MzBFQkNCNjIgMUE1Q0E3RTZEOTlBIFwKKyAgICAgIEVERkEzRUU0OTFCRCBDNjI1RUJFMjc4ODQgMEUwNUE5RTBCNkNGIEVGMjkyOUUwMjkyMiBcCisgICAgICA1NzU4RDhFMjcwNjcgRkIzNTU3RTgzRTE2IDEzNzdCRkVGODQwMiBEODJDNUJGNzI3MkEgXAorICAgICAgOTc4RjE2RkI3NzQ1IEY1Rjg2NUZDMTAxMyAwODY2MzVGQjlDNEUgREYzMEZDRkI0MEVFIFwKKyAgICAgIDExN0ZFMEZBMzQzOCAzRUU2QjhGQjVBQzMgQkM3N0EzRkNCMkY0IDY2RDZEQUZGNUYzMiBcCisgICAgICBDRjEzQjkwNDEyNzUgNDMxRDY5MDk3QThDIEMxQkI2MDBFQzc0RSA1MTIwQjkxMkEyQkEgXAorICAgICAgRUVERjY0MTc1NEMwIDgyMDcwMDE2NjRCNyA3RkZGRkYxNDQ1M0YgODAwMDAwMTI5NEU2IFwKKyAgICAgIDQ5OUMxQjBFQjNCMiA1MkI3M0UwREJDQTAgRUZCMkIyMEY1RkQ4IENFM0NEQjBGQkUxMiBcCisgICAgICBFNEI0OUMwQ0VBMkQgNjM0NEE4MEE1QTdDIDA4QzhGRTBBMUZGRSAyQkI5ODYwQjBBMEUgXAorICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKKyAgICAgICIiIikKKworCiBjbGFzcyBTdW5hdVBDTTMyVGVzdChhdWRpb3Rlc3RzLkF1ZGlvV3JpdGVUZXN0cywKICAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUsCiAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk2LDcgKzEyNSw3IEBACiAgICAgICBFNTA0MENCQyA2MTdDMEEzQyAwOEJDMEEzQyAyQzdDMEIzQyA1MTdDMEUzQyA4QTg0MTBGQyBCNjg0MEVCQyA0NTdDMEEzQyBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKaW5kZXggZTA4Y2YwMS4uMmRhM2FjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKQEAgLTEsMTkgKzEsMjYgQEAKICIiIkRvIGEgbWluaW1hbCB0ZXN0IG9mIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZW4ndCBvdGhlcndpc2UgdGVzdGVkLiIiIgotCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIFRlc3RVbnRlc3RlZE1vZHVsZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2F0X2xlYXN0X2ltcG9ydF91bnRlc3RlZF9tb2R1bGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VudGVzdGVkX21vZHVsZXNfY2FuX2JlX2ltcG9ydGVkKHNlbGYpOgorICAgICAgICB1bnRlc3RlZCA9ICgnYmRiJywgJ2VuY29kaW5ncycsICdmb3JtYXR0ZXInLCAnaW1naGRyJywKKyAgICAgICAgICAgICAgICAgICAgJ250dXJsMnBhdGgnLCAndGFibmFubnknKQogICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6Ci0gICAgICAgICAgICBpbXBvcnQgYmRiCi0gICAgICAgICAgICBpbXBvcnQgY2dpdGIKKyAgICAgICAgICAgIGZvciBuYW1lIGluIHVudGVzdGVkOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0ZXN0LnRlc3Rfe30nLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3Q6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCd7fSBoYXMgdGVzdHMgZXZlbiB0aG91Z2ggdGVzdF9zdW5kcnkgY2xhaW1zICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdGhlcndpc2UnLmZvcm1hdChuYW1lKSkKIAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5iY3BwY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY2NvbXBpbGVyCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmN5Z3dpbmNjb21waWxlcgotICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5lbXhjY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuZmlsZWxpc3QKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKICAgICAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLm1zdmNjb21waWxlcgpAQCAtMzksMjggKzQ2LDE0IEBACiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC51cGxvYWQKIAotICAgICAgICAgICAgaW1wb3J0IGVuY29kaW5ncwotICAgICAgICAgICAgaW1wb3J0IGZvcm1hdHRlcgotICAgICAgICAgICAgaW1wb3J0IGdldHBhc3MKICAgICAgICAgICAgIGltcG9ydCBodG1sLmVudGl0aWVzCi0gICAgICAgICAgICBpbXBvcnQgaW1naGRyCi0gICAgICAgICAgICBpbXBvcnQga2V5d29yZAotICAgICAgICAgICAgaW1wb3J0IG1haWxjYXAKLSAgICAgICAgICAgIGltcG9ydCBudHVybDJwYXRoCi0gICAgICAgICAgICBpbXBvcnQgb3MyZW14cGF0aAotICAgICAgICAgICAgaW1wb3J0IHBzdGF0cwotICAgICAgICAgICAgaW1wb3J0IHB5X2NvbXBpbGUKLSAgICAgICAgICAgIGltcG9ydCBzbmRoZHIKLSAgICAgICAgICAgIGltcG9ydCB0YWJuYW5ueQorCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgICAgIyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKKyAgICAgICAgICAgICAgICBpbXBvcnQgdHR5ICAjIE5vdCBhdmFpbGFibGUgb24gV2luZG93cwogICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoInNraXBwaW5nIHR0eSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RVbnRlc3RlZE1vZHVsZXMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkgYi9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CmluZGV4IDFlMjcyZWUuLjM3ZmMyZDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQpAQCAtNDQsNiArNDQsMTEgQEAKIAogY2xhc3MgVGVzdFN1cGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBUaGlzIGZpeGVzIHRoZSBkYW1hZ2UgdGhhdCB0ZXN0X3ZhcmlvdXNfX19jbGFzc19fX3BhdGhvbG9naWVzIGRvZXMuCisgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICBfX2NsYXNzX18gPSBUZXN0U3VwZXIKKwogICAgIGRlZiB0ZXN0X2Jhc2ljc193b3JraW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQoKS5mKCksICdBQkNEJykKIApAQCAtODEsOCArODYsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRSgpLmYoKSwgJ0FFJykKIAotICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKLSAgICBkZWYgdGVzdF9fX2NsYXNzX19fc2V0KHNlbGYpOgorICAgIGRlZiB0ZXN0X3ZhcmlvdXNfX19jbGFzc19fX3BhdGhvbG9naWVzKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSAjMTIzNzAKICAgICAgICAgY2xhc3MgWChBKToKICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgpAQCAtOTEsNiArOTUsMzEgQEAKICAgICAgICAgeCA9IFgoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguZigpLCAnQScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2NsYXNzX18sIDQxMykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHggPSBfX2NsYXNzX18KKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoWC54LCB0eXBlKHNlbGYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZToKKyAgICAgICAgICAgIGV4ZWMoIiIiY2xhc3MgWDoKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgICAgICBfX2NsYXNzX18iIiIsIGdsb2JhbHMoKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlLmV4Y2VwdGlvbiksIE5hbWVFcnJvcikgIyBOb3QgVW5ib3VuZExvY2FsRXJyb3IKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGdsb2JhbCBfX2NsYXNzX18KKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IDQyCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbHMoKVsiX19jbGFzc19fIl0sIDQyKQorICAgICAgICBkZWwgZ2xvYmFscygpWyJfX2NsYXNzX18iXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJfX2NsYXNzX18iLCBYLl9fZGljdF9fKQorICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgbm9ubG9jYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX2NsYXNzX18sIDQyKQogCiAgICAgZGVmIHRlc3RfX19jbGFzc19fX2luc3RhbmNlbWV0aG9kKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSAjMTQ4NTcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQppbmRleCA0ZWRiMWE4Li4xNmI2NjBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CkBAIC0zMDYsNiArMzA2LDcgQEAKICAgICAjIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncwogICAgICMgY2FuX3N5bWxpbmsKICAgICAjIHNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICAjIFN1cHByZXNzQ3Jhc2hSZXBvcnQKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5CmluZGV4IDU5MjZiNjkuLmE5ZDM2MjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5CkBAIC0zMyw3ICszMyw3IEBACiAKID4+PiBOb25lID0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiAKIEl0J3MgYSBzeW50YXggZXJyb3IgdG8gYXNzaWduIHRvIHRoZSBlbXB0eSB0dXBsZS4gIFdoeSBpc24ndCBpdCBhbgogZXJyb3IgdG8gYXNzaWduIHRvIHRoZSBlbXB0eSBsaXN0PyAgSXQgd2lsbCBhbHdheXMgcmFpc2Ugc29tZSBlcnJvciBhdApAQCAtMjMzLDcgKzIzMyw3IEBACiBTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGdlbmVyYXRvciBleHByZXNzaW9uCiA+Pj4gTm9uZSArPSAxCiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci1TeW50YXhFcnJvcjogYXNzaWdubWVudCB0byBrZXl3b3JkCitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGtleXdvcmQKID4+PiBmKCkgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBmdW5jdGlvbiBjYWxsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5cy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5CmluZGV4IGFjZjZkMzYuLmYwYzcxNDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzLnB5CkBAIC02LDYgKzYsOSBAQAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBnYworaW1wb3J0IHN5c2NvbmZpZworaW1wb3J0IHBsYXRmb3JtCiAKICMgY291bnQgdGhlIG51bWJlciBvZiB0ZXN0IHJ1bnMsIHVzZWQgdG8gY3JlYXRlIHVuaXF1ZQogIyBzdHJpbmdzIHRvIGludGVybiBpbiB0ZXN0X2ludGVybigpCkBAIC0yNDgsNyArMjUxLDcgQEAKIAogICAgICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KCVkKQogICAgICAgICAgICAgZigpIiIiKQotICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CiAgICAgICAgICAgICBmb3IgaSBpbiAoNTAsIDEwMDApOgogICAgICAgICAgICAgICAgIHN1YiA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlICUgaV0sCiAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCkBAIC00MjksNyArNDMyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN5cy5pbnRfaW5mby5zaXplb2ZfZGlnaXQpLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGV4dmVyc2lvbiwgaW50KQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5oYXNoX2luZm8pLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzeXMuaGFzaF9pbmZvKSwgOSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHN5cy5oYXNoX2luZm8ubW9kdWx1cywgMioqc3lzLmhhc2hfaW5mby53aWR0aCkKICAgICAgICAgIyBzeXMuaGFzaF9pbmZvLm1vZHVsdXMgc2hvdWxkIGJlIGEgcHJpbWU7IHdlIGRvIGEgcXVpY2sKICAgICAgICAgIyBwcm9iYWJsZSBwcmltYWxpdHkgdGVzdCAoZG9lc24ndCBleGNsdWRlIHRoZSBwb3NzaWJpbGl0eSBvZgpAQCAtNDQ0LDYgKzQ0NywyNiBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5pbmYsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8ubmFuLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLmltYWcsIGludCkKKyAgICAgICAgYWxnbyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlfSEFTSF9BTEdPUklUSE0iKQorICAgICAgICBpZiBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSBpbiB7ImZudiIsICJzaXBoYXNoMjQifToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3lzLmhhc2hfaW5mby5oYXNoX2JpdHMsIHszMiwgNjR9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLnNlZWRfYml0cywgezMyLCA2NCwgMTI4fSkKKworICAgICAgICAgICAgaWYgYWxnbyA9PSAxOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sICJzaXBoYXNoMjQiKQorICAgICAgICAgICAgZWxpZiBhbGdvID09IDI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgImZudiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2Nlc3NvciA9IHBsYXRmb3JtLnByb2Nlc3NvcigpLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBpZiBwcm9jZXNzb3IgaW4geyJzcGFyYyIsICJtaXBzIn06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sICJmbnYiKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmhhc2hfaW5mby5hbGdvcml0aG0sICJzaXBoYXNoMjQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQWV9IQVNIX0VYVEVSTkFMCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsZ28sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN5cy5oYXNoX2luZm8uY3V0b2ZmLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmhhc2hfaW5mby5jdXRvZmYsIDgpCiAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXhzaXplLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMubWF4dW5pY29kZSwgaW50KQpAQCAtNDgxLDcgKzUwNCw3IEBACiAgICAgZGVmIHRlc3RfdGhyZWFkX2luZm8oc2VsZik6CiAgICAgICAgIGluZm8gPSBzeXMudGhyZWFkX2luZm8KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5mbyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5mby5uYW1lLCAoJ250JywgJ29zMicsICdwdGhyZWFkJywgJ3NvbGFyaXMnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLm5hbWUsICgnbnQnLCAncHRocmVhZCcsICdzb2xhcmlzJywgTm9uZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaW5mby5sb2NrLCAoJ3NlbWFwaG9yZScsICdtdXRleCtjb25kJywgTm9uZSkpCiAKICAgICBkZWYgdGVzdF80MzU4MShzZWxmKToKQEAgLTUxNCw3ICs1MzcsNyBAQAogICAgICAgICBhdHRycyA9ICgiZGVidWciLAogICAgICAgICAgICAgICAgICAiaW5zcGVjdCIsICJpbnRlcmFjdGl2ZSIsICJvcHRpbWl6ZSIsICJkb250X3dyaXRlX2J5dGVjb2RlIiwKICAgICAgICAgICAgICAgICAgIm5vX3VzZXJfc2l0ZSIsICJub19zaXRlIiwgImlnbm9yZV9lbnZpcm9ubWVudCIsICJ2ZXJib3NlIiwKLSAgICAgICAgICAgICAgICAgImJ5dGVzX3dhcm5pbmciLCAicXVpZXQiLCAiaGFzaF9yYW5kb21pemF0aW9uIikKKyAgICAgICAgICAgICAgICAgImJ5dGVzX3dhcm5pbmciLCAicXVpZXQiLCAiaGFzaF9yYW5kb21pemF0aW9uIiwgImlzb2xhdGVkIikKICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cnM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzeXMuZmxhZ3MsIGF0dHIpLCBhdHRyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGdldGF0dHIoc3lzLmZsYWdzLCBhdHRyKSksIGludCwgYXR0cikKQEAgLTU0Myw2ICs1NjYsNDIgQEAKICAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInPycpCiAKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiYXNjaWkiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpOiIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQoY2hyKDB4YTIpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInVW5pY29kZUVuY29kZUVycm9yOicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyYiInXHhhMiciLCBlcnIpCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiOnN1cnJvZ2F0ZWVzY2FwZSIKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQoY2hyKDB4ZGNiZCkpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCisgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJ1x4YmQnKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBPUyBzdXBwb3J0IG9mIG5vbi1BU0NJSSBlbmNvZGluZ3MnKQorICAgIGRlZiB0ZXN0X2lvZW5jb2Rpbmdfbm9uYXNjaWkoc2VsZik6CisgICAgICAgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICIiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByaW50KCVhKScgJSB0ZXN0LnN1cHBvcnQuRlNfTk9OQVNDSUldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgb3MuZnNlbmNvZGUodGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJKSkKKwogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmJhc2VfcHJlZml4ICE9IHN5cy5wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAnVGVzdCBpcyBub3QgdmVudi1jb21wYXRpYmxlJykKICAgICBkZWYgdGVzdF9leGVjdXRhYmxlKHNlbGYpOgpAQCAtNjEwLDYgKzY2OSwzNiBAQAogICAgICAgICByZXQsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRJbihiImZyZWUgUHlEaWN0T2JqZWN0cyIsIGVycikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc3lzLCAiZ2V0YWxsb2NhdGVkYmxvY2tzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5nZXRhbGxvY2F0ZWRibG9ja3MgdW5hdmFpbGFibGUgb24gdGhpcyBidWlsZCIpCisgICAgZGVmIHRlc3RfZ2V0YWxsb2NhdGVkYmxvY2tzKHNlbGYpOgorICAgICAgICAjIFNvbWUgc2FuaXR5IGNoZWNrcworICAgICAgICB3aXRoX3B5bWFsbG9jID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX1BZTUFMTE9DJykKKyAgICAgICAgYSA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYSksIGludCkKKyAgICAgICAgaWYgd2l0aF9weW1hbGxvYzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihhLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXaGVuIFdJVEhfUFlNQUxMT0MgaXNuJ3QgYXZhaWxhYmxlLCB3ZSBkb24ndCBrbm93IGFueXRoaW5nCisgICAgICAgICAgICAjIGFib3V0IHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uOiB0aGUgZnVuY3Rpb24gbWlnaHQKKyAgICAgICAgICAgICMgcmV0dXJuIDAgb3Igc29tZXRoaW5nIGdyZWF0ZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChhLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdoaWxlIHdlIGNvdWxkIGltYWdpbmUgYSBQeXRob24gc2Vzc2lvbiB3aGVyZSB0aGUgbnVtYmVyIG9mCisgICAgICAgICAgICAjIG11bHRpcGxlIGJ1ZmZlciBvYmplY3RzIHdvdWxkIGV4Y2VlZCB0aGUgc2hhcmluZyBvZiByZWZlcmVuY2VzLAorICAgICAgICAgICAgIyBpdCBpcyB1bmxpa2VseSB0byBoYXBwZW4gaW4gYSBub3JtYWwgdGVzdCBydW4uCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoYSwgc3lzLmdldHRvdGFscmVmY291bnQoKSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBnZXR0b3RhbHJlZmNvdW50KCkgbm90IGF2YWlsYWJsZQorICAgICAgICAgICAgcGFzcworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYiA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChiLCBhKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgYyA9IHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICAgICAgICBzZWxmLmFzc2VydEluKGMsIHJhbmdlKGIgLSA1MCwgYiArIDUwKSkKKworCiBjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTY1NCw3ICs3NDMsNyBAQAogICAgICAgICBzYW1wbGVzID0gW2InJywgYid1JyoxMDAwMDBdCiAgICAgICAgIGZvciBzYW1wbGUgaW4gc2FtcGxlczoKICAgICAgICAgICAgIHggPSBieXRlYXJyYXkoc2FtcGxlKQotICAgICAgICAgICAgY2hlY2soeCwgdnNpemUoJ2luUCcpICsgeC5fX2FsbG9jX18oKSkKKyAgICAgICAgICAgIGNoZWNrKHgsIHZzaXplKCduMlBpJykgKyB4Ll9fYWxsb2NfXygpKQogICAgICAgICAjIGJ5dGVhcnJheV9pdGVyYXRvcgogICAgICAgICBjaGVjayhpdGVyKGJ5dGVhcnJheSgpKSwgc2l6ZSgnblAnKSkKICAgICAgICAgIyBjZWxsCkBAIC03MzMsNyArODIyLDcgQEAKICAgICAgICAgbmZyZWVzID0gbGVuKHguZl9jb2RlLmNvX2ZyZWV2YXJzKQogICAgICAgICBleHRyYXMgPSB4LmZfY29kZS5jb19zdGFja3NpemUgKyB4LmZfY29kZS5jb19ubG9jYWxzICtcCiAgICAgICAgICAgICAgICAgICBuY2VsbHMgKyBuZnJlZXMgLSAxCi0gICAgICAgIGNoZWNrKHgsIHZzaXplKCcxMlAzaScgKyBDT19NQVhCTE9DS1MqJzNpJyArICdQJyArIGV4dHJhcyonUCcpKQorICAgICAgICBjaGVjayh4LCB2c2l6ZSgnMTNQM2ljJyArIENPX01BWEJMT0NLUyonM2knICsgJ1AnICsgZXh0cmFzKidQJykpCiAgICAgICAgICMgZnVuY3Rpb24KICAgICAgICAgZGVmIGZ1bmMoKTogcGFzcwogICAgICAgICBjaGVjayhmdW5jLCBzaXplKCcxMlAnKSkKQEAgLTc3OSw3ICs4NjgsNyBAQAogICAgICAgICAjIG1lbW9yeXZpZXcKICAgICAgICAgY2hlY2sobWVtb3J5dmlldyhiJycpLCBzaXplKCdQbmluIDJQMm4yaTVQIDNjUG4nKSkKICAgICAgICAgIyBtb2R1bGUKLSAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoJ1BuUCcpKQorICAgICAgICBjaGVjayh1bml0dGVzdCwgc2l6ZSgnUG5QUFAnKSkKICAgICAgICAgIyBOb25lCiAgICAgICAgIGNoZWNrKE5vbmUsIHNpemUoJycpKQogICAgICAgICAjIE5vdEltcGxlbWVudGVkVHlwZQpAQCAtODMzLDExICs5MjIsMTEgQEAKICAgICAgICAgY2hlY2soKDEsMiwzKSwgdnNpemUoJycpICsgMypzZWxmLlApCiAgICAgICAgICMgdHlwZQogICAgICAgICAjIHN0YXRpYyB0eXBlOiBQeVR5cGVPYmplY3QKLSAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSScpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUElQJykKICAgICAgICAgY2hlY2soaW50LCBzKQogICAgICAgICAjIChQeVR5cGVPYmplY3QgKyBQeU51bWJlck1ldGhvZHMgKyBQeU1hcHBpbmdNZXRob2RzICsKICAgICAgICAgIyAgUHlTZXF1ZW5jZU1ldGhvZHMgKyBQeUJ1ZmZlclByb2NzICsgNFApCi0gICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUEknKSArIHN0cnVjdC5jYWxjc2l6ZSgnMzRQIDNQIDEwUCAyUCA0UCcpCisgICAgICAgIHMgPSB2c2l6ZSgnUDJuMTVQbDRQbjlQbjExUElQJykgKyBzdHJ1Y3QuY2FsY3NpemUoJzM0UCAzUCAxMFAgMlAgNFAnKQogICAgICAgICAjIFNlcGFyYXRlIGJsb2NrIGZvciBQeURpY3RLZXlzT2JqZWN0IHdpdGggNCBlbnRyaWVzCiAgICAgICAgIHMgKz0gc3RydWN0LmNhbGNzaXplKCIyblBuIikgKyA0KnN0cnVjdC5jYWxjc2l6ZSgibjJQIikKICAgICAgICAgIyBjbGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQppbmRleCAwM2Y2N2ZkLi44MDRjNDQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c2NvbmZpZy5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCBzaHV0aWwKIGZyb20gY29weSBpbXBvcnQgY29weQogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGNoZWNrX3dhcm5pbmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmspCiAKIGltcG9ydCBzeXNjb25maWcKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6Ci0gICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCiAgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCiAKQEAgLTMwNSwxNCArMzA1LDEzIEBACiAgICAgICAgIGlmICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnIGluIGVudjoKICAgICAgICAgICAgIGRlbCBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnLCAndycpIGFzIGRldm51bGxfZnA6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCkBAIC0zMjUsMjAgKzMyNCwxOSBAQAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnKSBhcyBkZXZfbnVsbDoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKLSAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgc3RkZXJyPWRldl9udWxsLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKIAogICAgIGRlZiB0ZXN0X3NyY2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgSXNzdWVzICMxNTMyMiwgIzE1MzY0LgpAQCAtMzcxLDYgKzM2OSwyNiBAQAogICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNyY2Rpciwgc3JjZGlyMikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIsICdTTycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT192YWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09faW5fdmFycyhzZWxmKToKKyAgICAgICAgdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh2YXJzWydTTyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnNbJ1NPJ10sIHZhcnNbJ0VYVF9TVUZGSVgnXSkKKwogCiBjbGFzcyBNYWtlZmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkgYi9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQppbmRleCA0ZTc2MjFlNS4uYjdmZDJiZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNsb2cucHkKQEAgLTMyLDYgKzMyLDEwIEBACiAgICAgZGVmIHRlc3RfbG9nX3VwdG8oc2VsZik6CiAgICAgICAgIHN5c2xvZy5MT0dfVVBUTyhzeXNsb2cuTE9HX0lORk8pCiAKKyAgICBkZWYgdGVzdF9vcGVubG9nX25vYXJncyhzZWxmKToKKyAgICAgICAgc3lzbG9nLm9wZW5sb2coKQorICAgICAgICBzeXNsb2cuc3lzbG9nKCd0ZXN0IG1lc3NhZ2UgZnJvbSBweXRob24gdGVzdF9zeXNsb2cnKQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCAyMzgxNzVmLi45ZDMxODEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC03LDcgKzcsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgdGFyZmlsZQogCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgc2NyaXB0X2hlbHBlcgogCiAjIENoZWNrIGZvciBvdXIgY29tcHJlc3Npb24gbW9kdWxlcy4KIHRyeToKQEAgLTI3LDExICsyNywxMyBAQAogICAgIHJldHVybiBtZDUoZGF0YSkuaGV4ZGlnZXN0KCkKIAogVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAiLXRhcmRpciIKK3RhcmV4dGRpciA9IFRFTVBESVIgKyAnLWV4dHJhY3QtdGVzdCcKIHRhcm5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCJ0ZXN0dGFyLnRhciIpCiBnemlwbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuZ3oiKQogYnoybmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIuYnoyIikKIHh6bmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhci50YXIueHoiKQogdG1wbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidG1wLnRhciIpCitkb3RsZXNzbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHRhciIpCiAKIG1kNV9yZWd0eXBlID0gIjY1ZjQ3N2M4MThhZDllMTVmN2ZlYWIwYzZkMzc3NDJmIgogbWQ1X3NwYXJzZSA9ICJhNTRmYmM0Y2E0ZjQzOTlhOTBlMWIyNzE2NDAxMmZjNiIKQEAgLTE3MjQsNiArMTcyNiwxNjggQEAKICAgICAgICAgICAgIHRhcmZpbGUuaXRuKDB4MTAwMDAwMDAwMDAsIDYsIHRhcmZpbGUuR05VX0ZPUk1BVCkKIAogCitjbGFzcyBDb21tYW5kTGluZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRhcmZpbGVjbWQoc2VsZiwgKmFyZ3MpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1tJywgJ3RhcmZpbGUnLCAqYXJncykKKyAgICAgICAgcmV0dXJuIG91dC5yZXBsYWNlKG9zLmxpbmVzZXAuZW5jb2RlKCksIGInXG4nKQorCisgICAgZGVmIHRhcmZpbGVjbWRfZmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAndGFyZmlsZScsICphcmdzKQorCisgICAgZGVmIG1ha2Vfc2ltcGxlX3RhcmZpbGUoc2VsZiwgdGFyX25hbWUpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCB0YXJfbmFtZSkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICd3JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgdGFyZGF0YSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICB0Zi5hZGQodGFyZGF0YSwgYXJjbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHRhcmRhdGEpKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10ZXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIGZvciB0YXJfbmFtZSBpbiB0ZXN0dGFybmFtZXM6CisgICAgICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctdCcsIHRhcl9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidpcyBhIHRhciBhcmNoaXZlLlxuJywgb3V0KQorCisgICAgZGVmIHRlc3RfdGVzdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLXQnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodGFyX25hbWU9dGFyX25hbWUpOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbih0YXJfbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVs6NTExXSkKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfbGlzdF9jb21tYW5kKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAncicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1GYWxzZSkKKyAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLWwnLCAnLS1saXN0JzoKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRtcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfdmVyYm9zZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSwgJ3InKSBhcyB0ZjoKKyAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsICctbCcsIHRtcG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfaW52YWxpZF9maWxlKHNlbGYpOgorICAgICAgICB6aXBuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgnemlwZGlyLnppcCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctbCcsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctYycsICctLWNyZWF0ZSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdG1wbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWMnLCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBmaWxlIGNyZWF0ZWQuJywgb3V0KQorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmRfZG90bGVzc19maWxlbmFtZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCBkb3RsZXNzbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGRvdGxlc3NuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZG90bGVzc25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3Rfc3RhcnRlZF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgdGFyX25hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgIi50ZXN0dGFyIikKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCB0YXJfbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyX25hbWUpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmQoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctZScsICctLWV4dHJhY3QnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBzZWxmLm1ha2Vfc2ltcGxlX3RhcmZpbGUodG1wbmFtZSkKKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1lJywgdG1wbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInIGZpbGUgaXMgZXh0cmFjdGVkLicsIG91dCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2RpZmZlcmVudF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQoJy1lJywgdG1wbmFtZSwgJ3NwYW1kaXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRhcmV4dGRpcikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLnRhcmZpbGVjbWRfZmFpbHVyZSgnLWUnLCB6aXBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKGInIGlzIG5vdCBhIHRhciBhcmNoaXZlLicsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKKworCiBjbGFzcyBDb250ZXh0TWFuYWdlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CkBAIC0xNzMyLDIwICsxODk2LDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKICAgICBkZWYgdGVzdF9jbG9zZWQoc2VsZik6Ci0gICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBJT0Vycm9yCisgICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBPU0Vycm9yCiAgICAgICAgICMgaWYgdGhlIFRhckZpbGUgb2JqZWN0IGlzIGFscmVhZHkgY2xvc2VkLgogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSkKICAgICAgICAgdGFyLmNsb3NlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKICAgICAgICAgICAgIHdpdGggdGFyOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IGlmIHRoZSBJT0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KKyAgICAgICAgIyBUZXN0IGlmIHRoZSBPU0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JvbmcgZXhjZXB0aW9uIHJhaXNlZCBpbiBjb250ZXh0IG1hbmFnZXIiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCkBAIC0xODUxLDYgKzIwMTUsOCBAQAogICAgIHN1cHBvcnQudW5saW5rKFRFTVBESVIpCiAgICAgb3MubWFrZWRpcnMoVEVNUERJUikKIAorICAgIGdsb2JhbCB0ZXN0dGFybmFtZXMKKyAgICB0ZXN0dGFybmFtZXMgPSBbdGFybmFtZV0KICAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCiAKQEAgLTE4NTgsNiArMjAyNCw3IEBACiAgICAgZm9yIGMgaW4gR3ppcFRlc3QsIEJ6MlRlc3QsIEx6bWFUZXN0OgogICAgICAgICBpZiBjLm9wZW46CiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhjLnRhcm5hbWUpCisgICAgICAgICAgICB0ZXN0dGFybmFtZXMuYXBwZW5kKGMudGFybmFtZSkKICAgICAgICAgICAgIHdpdGggYy5vcGVuKGMudGFybmFtZSwgIndiIikgYXMgdGFyOgogICAgICAgICAgICAgICAgIHRhci53cml0ZShkYXRhKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RjbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CmluZGV4IDRjZjNmMjguLjY2YzQ5ZmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGNsLnB5CkBAIC0yNTQsNDAgKzI1NCw2IEBACiAgICAgICAgIGZvciBhcmcsIHJlcyBpbiB0ZXN0Y2FzZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KGFyZyksIHJlcywgbXNnPWFyZykKIAotICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdtZXJnZSBpcyBkZXByZWNhdGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIG1lcmdlID0gc2VsZi5pbnRlcnAudGsubWVyZ2UKLSAgICAgICAgICAgIGNhbGwgPSBzZWxmLmludGVycC50ay5jYWxsCi0gICAgICAgICAgICB0ZXN0Y2FzZXMgPSBbCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKCgnYScsKSwgJ2EnKSwKLSAgICAgICAgICAgICAgICAoKDIsKSwgJzInKSwKLSAgICAgICAgICAgICAgICAoKCcnLCksICd7fScpLAotICAgICAgICAgICAgICAgICgneycsICdcXHsnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJ2InLCAnYycpLCAnYSBiIGMnKSwKLSAgICAgICAgICAgICAgICAoKCcgJywgJ1x0JywgJ1xyJywgJ1xuJyksICd7IH0ge1x0fSB7XHJ9IHtcbn0nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJyAnLCAnYycpLCAnYSB7IH0gYycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAn4oKsJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnXFUwMDAxMDRhMicpLCAnYSBcVTAwMDEwNGEyJyksCi0gICAgICAgICAgICAgICAgKCgnYScsIGInXHhlMlx4ODJceGFjJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAoJ2InLCAnYycpKSwgJ2Ege2IgY30nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMiksICdhIDInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMy40KSwgJ2EgMy40JyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgyLCAzLjQpKSwgJ2EgezIgMy40fScpLAotICAgICAgICAgICAgICAgICgoKSwgJycpLAotICAgICAgICAgICAgICAgICgoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwpLCAnezEgMiAzLjR9JyksCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6Ci0gICAgICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgKChjYWxsKCdkaWN0JywgJ2NyZWF0ZScsIDEyLCAnXHUyMGFjJywgYidceGUyXHg4Mlx4YWMnLCAoMy40LCkpLCksCi0gICAgICAgICAgICAgICAgICAgICAnezEyIOKCrCDigqwgMy40fScpLAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGZvciBhcmdzLCByZXMgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVyZ2UoKmFyZ3MpLCByZXMsIG1zZz1hcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBtZXJnZSwgYidceDgwJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgbWVyZ2UsICdcdWRjODAnKQotCiAKIGNsYXNzIEJpZ21lbVRjbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CmluZGV4IGM5ZjJjY2IuLjRmNjFlNDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CkBAIC0xLDEwICsxLDkgQEAKIGltcG9ydCBzb2NrZXQKLWltcG9ydCBzZWxlY3QKK2ltcG9ydCBzZWxlY3RvcnMKIGltcG9ydCB0ZWxuZXRsaWIKIGltcG9ydCB0aW1lCiBpbXBvcnQgY29udGV4dGxpYgogCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKQEAgLTExMiw0MCArMTExLDMzIEBACiAgICAgICAgIHNlbGYuX21lc3NhZ2VzICs9IG91dC5nZXR2YWx1ZSgpCiAgICAgICAgIHJldHVybgogCi1kZWYgbW9ja19zZWxlY3QoKnNfYXJncyk6Ci0gICAgYmxvY2sgPSBGYWxzZQotICAgIGZvciBsIGluIHNfYXJnczoKLSAgICAgICAgZm9yIGZvYiBpbiBsOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmb2IsIFRlbG5ldEFsaWtlKToKLSAgICAgICAgICAgICAgICBibG9jayA9IGZvYi5zb2NrLmJsb2NrCi0gICAgaWYgYmxvY2s6Ci0gICAgICAgIHJldHVybiBbW10sIFtdLCBbXV0KLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gc19hcmdzCi0KLWNsYXNzIE1vY2tQb2xsZXIob2JqZWN0KToKLSAgICB0ZXN0X2Nhc2UgPSBOb25lICAjIFNldCBkdXJpbmcgVGVzdENhc2Ugc2V0VXAuCitjbGFzcyBNb2NrU2VsZWN0b3Ioc2VsZWN0b3JzLkJhc2VTZWxlY3Rvcik6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2ZpbGVfb2JqcyA9IFtdCisgICAgICAgIHNlbGYua2V5cyA9IHt9CiAKLSAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmQsIGV2ZW50bWFzayk6Ci0gICAgICAgIHNlbGYudGVzdF9jYXNlLmFzc2VydFRydWUoaGFzYXR0cihmZCwgJ2ZpbGVubycpLCBmZCkKLSAgICAgICAgc2VsZi50ZXN0X2Nhc2UuYXNzZXJ0RXF1YWwoZXZlbnRtYXNrLCBzZWxlY3QuUE9MTElOfHNlbGVjdC5QT0xMUFJJKQotICAgICAgICBzZWxmLl9maWxlX29ianMuYXBwZW5kKGZkKQorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CiAKLSAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzLnBvcChmaWxlb2JqKQorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICBibG9jayA9IEZhbHNlCi0gICAgICAgIGZvciBmb2IgaW4gc2VsZi5fZmlsZV9vYmpzOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShmb2IsIFRlbG5ldEFsaWtlKToKLSAgICAgICAgICAgICAgICBibG9jayA9IGZvYi5zb2NrLmJsb2NrCisgICAgICAgIGZvciBmaWxlb2JqIGluIHNlbGYua2V5czoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZW9iaiwgVGVsbmV0QWxpa2UpOgorICAgICAgICAgICAgICAgIGJsb2NrID0gZmlsZW9iai5zb2NrLmJsb2NrCisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgYmxvY2s6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB6aXAoc2VsZi5fZmlsZV9vYmpzLCBbc2VsZWN0LlBPTExJTl0qbGVuKHNlbGYuX2ZpbGVfb2JqcykpCisgICAgICAgICAgICByZXR1cm4gWyhrZXksIGtleS5ldmVudHMpIGZvciBrZXkgaW4gc2VsZi5rZXlzLnZhbHVlcygpXQogCi0gICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmQpOgotICAgICAgICBzZWxmLl9maWxlX29ianMucmVtb3ZlKGZkKQorICAgIGRlZiBnZXRfbWFwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzCisKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKIGRlZiB0ZXN0X3NvY2tldChyZWFkcyk6CkBAIC0xNTksNyArMTUxLDcgQEAKICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uID0gb2xkX2Nvbm4KICAgICByZXR1cm4KIAotZGVmIHRlc3RfdGVsbmV0KHJlYWRzPSgpLCBjbHM9VGVsbmV0QWxpa2UsIHVzZV9wb2xsPU5vbmUpOgorZGVmIHRlc3RfdGVsbmV0KHJlYWRzPSgpLCBjbHM9VGVsbmV0QWxpa2UpOgogICAgICcnJyByZXR1cm4gYSB0ZWxuZXRsaWIuVGVsbmV0IG9iamVjdCB0aGF0IHVzZXMgYSBTb2NrZXRTdHViIHdpdGgKICAgICAgICAgcmVhZHMgcXVldWVkIHVwIHRvIGJlIHJlYWQgJycnCiAgICAgZm9yIHggaW4gcmVhZHM6CkBAIC0xNjcsMjkgKzE1OSwxNCBAQAogICAgIHdpdGggdGVzdF9zb2NrZXQocmVhZHMpOgogICAgICAgICB0ZWxuZXQgPSBjbHMoJ2R1bW15JywgMCkKICAgICAgICAgdGVsbmV0Ll9tZXNzYWdlcyA9ICcnICMgZGVidWdsZXZlbCBvdXRwdXQKLSAgICAgICAgaWYgdXNlX3BvbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBpZiB1c2VfcG9sbCBhbmQgbm90IHRlbG5ldC5faGFzX3BvbGw6Ci0gICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NlbGVjdC5wb2xsKCkgcmVxdWlyZWQuJykKLSAgICAgICAgICAgIHRlbG5ldC5faGFzX3BvbGwgPSB1c2VfcG9sbAogICAgIHJldHVybiB0ZWxuZXQKIAotCiBjbGFzcyBFeHBlY3RBbmRSZWFkVGVzdENhc2UoVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5vbGRfc2VsZWN0ID0gc2VsZWN0LnNlbGVjdAotICAgICAgICBzZWxlY3Quc2VsZWN0ID0gbW9ja19zZWxlY3QKLSAgICAgICAgc2VsZi5vbGRfcG9sbCA9IEZhbHNlCi0gICAgICAgIGlmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgotICAgICAgICAgICAgc2VsZi5vbGRfcG9sbCA9IHNlbGVjdC5wb2xsCi0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IE1vY2tQb2xsZXIKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gc2VsZgotCisgICAgICAgIHNlbGYub2xkX3NlbGVjdG9yID0gdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvcgorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gTW9ja1NlbGVjdG9yCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgTW9ja1BvbGxlci50ZXN0X2Nhc2UgPSBOb25lCi0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IHNlbGYub2xkX3BvbGwKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IHNlbGYub2xkX3NlbGVjdAotCisgICAgICAgIHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IgPSBzZWxmLm9sZF9zZWxlY3RvcgogCiBjbGFzcyBSZWFkVGVzdHMoRXhwZWN0QW5kUmVhZFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZWFkX3VudGlsKHNlbGYpOgpAQCAtMjA4LDIyICsxODUsNiBAQAogICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0KQogCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3BvbGwoc2VsZik6Ci0gICAgICAgICIiIlVzZSBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9VHJ1ZSkKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHNlbGVjdCgpIGNhbGwuJykKLSAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCi0KLSAgICBkZWYgdGVzdF9yZWFkX3VudGlsX3dpdGhfc2VsZWN0KHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQucmVhZF91bnRpbCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCiAgICAgZGVmIHRlc3RfcmVhZF9hbGwoc2VsZik6CiAgICAgICAgICIiIgpAQCAtNDI3LDIzICszODgsNiBAQAogICAgICAgICAoXyxfLGRhdGEpID0gdGVsbmV0LmV4cGVjdChbYidtYXRjaCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInJy5qb2luKHdhbnRbOi0xXSkpCiAKLSAgICBkZWYgdGVzdF9leHBlY3Rfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9VHJ1ZSkKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHNlbGVjdCgpIGNhbGwuJykKLSAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfc2VsZWN0KHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnNlbGVjdCgpIHRvIGltcGxlbWVudCB0ZWxuZXQuZXhwZWN0KCkuIiIiCi0gICAgICAgIHdhbnQgPSBbYid4JyAqIDEwLCBiJ21hdGNoJywgYid5JyAqIDEwXQotICAgICAgICB0ZWxuZXQgPSB0ZXN0X3RlbG5ldCh3YW50LCB1c2VfcG9sbD1GYWxzZSkKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIHNlbGVjdC5wb2xsID0gbGFtYmRhICpfOiBzZWxmLmZhaWwoJ3VuZXhwZWN0ZWQgcG9sbCgpIGNhbGwuJykKLSAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChHZW5lcmFsVGVzdHMsIFJlYWRUZXN0cywgV3JpdGVUZXN0cywgT3B0aW9uVGVzdHMsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQppbmRleCA0ZmY1NmI4Li5hYzRkODYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTM2LDcgKzM2LDcgQEAKICMgQ29tbW9uIGZ1bmN0aW9uYWxpdHkuCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIlthLXpBLVowLTlfLV17Nn0kIikKKyAgICBzdHJfY2hlY2sgPSByZS5jb21waWxlKHIiXlthLXowLTlfLV17OH0kIikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKQpAQCAtNjMsNyArNjMsNyBAQAogCiAgICAgICAgIG5iYXNlID0gbmJhc2VbbGVuKHByZSk6bGVuKG5iYXNlKS1sZW4oc3VmKV0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggL15bYS16QS1aMC05Xy1dezZ9JC8iCisgICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIF5bYS16MC05Xy1dezh9JCIKICAgICAgICAgICAgICAgICAgICAgICUgbmJhc2UpCiAKIApAQCAtMTUyLDcgKzE1Miw3IEBACiAgICAgICAgICAgICAgICAgIyB2aWEgYW55IGJ1Z3MgYWJvdmUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgb3MuY2xvc2UocmVhZF9mZCkKICAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlX2ZkKQpAQCAtMTkxLDcgKzE5MSw3IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIG9zLmVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkaXJuYW1lLCBjYW5kKQpAQCAtMzMyLDcgKzMzMiw3IEBACiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCiAgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUob3Muc3RhdChmaWxlLm5hbWUpLnN0X21vZGUpCiAgICAgICAgIGV4cGVjdGVkID0gMG82MDAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CkBAIC0zNTAsNiArMzUwLDcgQEAKICAgICAgICAgICAgIHY9InEiCiAKICAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmlsZS5mZCksIEZhbHNlKQogICAgICAgICBmZCA9ICIlZCIgJSBmaWxlLmZkCiAKICAgICAgICAgdHJ5OgpAQCAtMzY2LDcgKzM2Nyw3IEBACiAgICAgICAgICMgT24gV2luZG93cyBhIHNwYXduKiAvcGF0aC8gd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkbid0IGJlIHF1b3RlZCwKICAgICAgICAgIyBidXQgYW4gYXJnIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aCBkb3VibGUKICAgICAgICAgIyBxdW90ZXMgb24gZWFjaCBlbmQKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgZGVjb3JhdGVkID0gJyIlcyInICUgc3lzLmV4ZWN1dGFibGUKICAgICAgICAgICAgIHRlc3RlciA9ICciJXMiJyAlIHRlc3RlcgogICAgICAgICBlbHNlOgpAQCAtNDc3LDYgKzQ3OCwyMCBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCiAKKyAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2ZShzZWxmKToKKyAgICAgICAgIyBnZXR0ZW1wZGlyIHNob3VsZCBub3QgZmxhdHRlbiBpdHMgY2FzZQorICAgICAgICAjIGV2ZW4gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtCisgICAgICAgIGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCItVGVtcCIpCisgICAgICAgIF90ZW1wZGlyLCB0ZW1wZmlsZS50ZW1wZGlyID0gdGVtcGZpbGUudGVtcGRpciwgTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgICAgICAjIEZha2UgdGhlIGZpcnN0IGVudiB2YXIgd2hpY2ggaXMgY2hlY2tlZCBhcyBhIGNhbmRpZGF0ZQorICAgICAgICAgICAgICAgIGVudlsiVE1QRElSIl0gPSBjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCksIGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0ZW1wZmlsZS50ZW1wZGlyID0gX3RlbXBkaXIKKyAgICAgICAgICAgIHN1cHBvcnQucm1kaXIoY2FzZV9zZW5zaXRpdmVfdGVtcGRpcikKKwogCiBjbGFzcyBUZXN0TWtzdGVtcChCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgbWtzdGVtcCgpLiIiIgpAQCAtNTY2LDcgKzU4MSw3IEBACiAgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQogICAgICAgICAgICAgbW9kZSAmPSAwbzc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKICAgICAgICAgICAgIGV4cGVjdGVkID0gMG83MDAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkgYi9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CmluZGV4IGM4NmY1Y2YuLjFiYmE3N2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQpAQCAtOSw5ICs5LDggQEAKICMKIAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAotZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50Citmcm9tIHRleHR3cmFwIGltcG9ydCBUZXh0V3JhcHBlciwgd3JhcCwgZmlsbCwgZGVkZW50LCBpbmRlbnQsIHNob3J0ZW4KIAogCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDMwLDYgKzQyOSw5MCBAQAogICAgICAgICBzZWxmLmNoZWNrX3dyYXAodGV4dCwgNywgWyJhYSBceGU0XHhlNC0iLCAiXHhlNFx4ZTQiXSkKIAogCitjbGFzcyBNYXhMaW5lc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIEknbSBnbGFkIHRvIGhlYXIgaXQhIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0wKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTMsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCA4MCwgW3NlbGYudGV4dF0sIG1heF9saW5lcz0xKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZSB5b3UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGlzIGZpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkYXk/ICBJJ20iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJnbGFkIHRvIGhlYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJpdCEiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz02KQorCisgICAgZGVmIHRlc3Rfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIHN0cmlwIHNwYWNlcyBiZWZvcmUgcGxhY2Vob2xkZXIKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisgICAgICAgICMgcGxhY2Vob2xkZXIgYXQgdGhlIHN0YXJ0IG9mIGxpbmUKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgNiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgICMgZmluYWwgc3BhY2VzCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQgKyAnICcgKiAxMCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8uLi4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Jy4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICAjIGxvbmcgcGxhY2Vob2xkZXIgYW5kIGluZGVudGF0aW9uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB3cmFwKHNlbGYudGV4dCwgMTYsIGluaXRpYWxfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTEsIHBsYWNlaG9sZGVyPScgW3RydW5jYXRlZF0uLi4nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIiAgICBIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnRfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIiAgW3RydW5jYXRlZF0uLi4iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9JyAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNlcXVlbnRfaW5kZW50PScgICAgJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScgW3RydW5jYXRlZF0uLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCA4MCwgW3NlbGYudGV4dF0sIHBsYWNlaG9sZGVyPScuJyAqIDEwMDApCisKKwogY2xhc3MgTG9uZ1dvcmRUZXN0Q2FzZSAoQmFzZVRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYud3JhcHBlciA9IFRleHRXcmFwcGVyKCkKQEAgLTQ5MCw2ICs1NzMsMTQgQEAKICAgICAgICAgcmVzdWx0ID0gd3JhcChzZWxmLnRleHQsIHdpZHRoPTMwLCBicmVha19sb25nX3dvcmRzPTApCiAgICAgICAgIHNlbGYuY2hlY2socmVzdWx0LCBleHBlY3QpCiAKKyAgICBkZWYgdGVzdF9tYXhfbGluZXNfbG9uZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbJ0RpZCB5b3Ugc2F5ICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJyJzdXBlcmNhbGlmcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FnaWxpc3RpY2V4cCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1suLi5dJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NCkKKwogCiBjbGFzcyBJbmRlbnRUZXN0Q2FzZXMoQmFzZVRlc3RDYXNlKToKIApAQCAtNzc3LDEyICs4NjgsNjIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5kZW50KHRleHQsIHByZWZpeCwgcHJlZGljYXRlKSwgZXhwZWN0KQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChXcmFwVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb25nV29yZFRlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZW50VGVzdENhc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVkZW50VGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXN0Q2FzZSkKK2NsYXNzIFNob3J0ZW5UZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX3Nob3J0ZW4oc2VsZiwgdGV4dCwgd2lkdGgsIGV4cGVjdCwgKiprd2FyZ3MpOgorICAgICAgICByZXN1bHQgPSBzaG9ydGVuKHRleHQsIHdpZHRoLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5jaGVjayhyZXN1bHQsIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgIyBTaW1wbGUgY2FzZToganVzdCB3b3Jkcywgc3BhY2VzLCBhbmQgYSBiaXQgb2YgcHVuY3R1YXRpb24KKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gSSdtIGdsYWQgdG8gaGVhciBpdCEiCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE4LCAiSGVsbG8gdGhlcmUsIFsuLi5dIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSAtIDEsCisgICAgICAgICAgICAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICIKKyAgICAgICAgICAgICJJJ20gZ2xhZCB0byBbLi4uXSIpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgdGV4dCA9ICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gSSdtIGdsYWQgdG8gaGVhciBpdCEiCisKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDE3LCAiSGVsbG8gdGhlcmUsJCQiLCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgaG93JCQiLCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgJCQiLCBwbGFjZWhvbGRlcj0nICQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSwgdGV4dCwgcGxhY2Vob2xkZXI9JyQkJykKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIGxlbih0ZXh0KSAtIDEsCisgICAgICAgICAgICAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICIKKyAgICAgICAgICAgICJJJ20gZ2xhZCB0byBoZWFyJCQiLCBwbGFjZWhvbGRlcj0nJCQnKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oIiIsIDYsICIiKQorCisgICAgZGVmIHRlc3Rfd2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgIyBXaGl0ZXNwYWNlIGNvbGxhcHNpbmcKKyAgICAgICAgdGV4dCA9ICIiIgorICAgICAgICAgICAgVGhpcyBpcyBhICBwYXJhZ3JhcGggdGhhdCAgYWxyZWFkeSBoYXMKKyAgICAgICAgICAgIGxpbmUgYnJlYWtzIGFuZCBcdCB0YWJzIHRvby4iIiIKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKHRleHQsIDYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGFscmVhZHkgaGFzIGxpbmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnJlYWtzIGFuZCB0YWJzIHRvby4iKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgNjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBoYXMgbGluZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmVha3MgYW5kIFsuLi5dIikKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMiwgImhlbGxvIHdvcmxkISIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDExLCAiaGVsbG8gWy4uLl0iKQorICAgICAgICAjIFRoZSBsZWFkaW5nIHNwYWNlIGlzIHRyaW1tZWQgZnJvbSB0aGUgcGxhY2Vob2xkZXIKKyAgICAgICAgIyAoaXQgd291bGQgYmUgdWdseSBvdGhlcndpc2UpLgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4oImhlbGxvICAgICAgd29ybGQhICAiLCAxMCwgIlsuLi5dIikKKworICAgIGRlZiB0ZXN0X3dpZHRoX3Rvb19zbWFsbF9mb3JfcGxhY2Vob2xkZXIoc2VsZik6CisgICAgICAgIHNob3J0ZW4oIngiICogMjAsIHdpZHRoPTgsIHBsYWNlaG9sZGVyPSIoLi4uLi4uKSIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzaG9ydGVuKCJ4IiAqIDIwLCB3aWR0aD04LCBwbGFjZWhvbGRlcj0iKC4uLi4uLi4pIikKKworICAgIGRlZiB0ZXN0X2ZpcnN0X3dvcmRfdG9vX2xvbmdfYnV0X3BsYWNlaG9sZGVyX2ZpdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiSGVsbG9vIiwgNSwgIlsuLi5dIikKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CmluZGV4IGExOTFlMTUuLmY5YTcyMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5CkBAIC02OCw3ICs2OCw3IEBACiAgICAgICAgIHRocmVhZC5zdGFja19zaXplKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLnN0YWNrX3NpemUoKSwgMCwgInN0YWNrX3NpemUgbm90IHJlc2V0IHRvIGRlZmF1bHQiKQogCi0gICAgICAgIGlmIG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4Iik6CisgICAgICAgIGlmIG9zLm5hbWUgbm90IGluICgibnQiLCAicG9zaXgiKToKICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgIHRzc19zdXBwb3J0ZWQgPSBUcnVlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CmluZGV4IDZjMjk2NWIuLjNkOTYxYjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CkBAIC01LDggKzUsOCBAQAogIyBjb21wbGFpbnMgc2V2ZXJhbCB0aW1lcyBhYm91dCBtb2R1bGUgcmFuZG9tIGhhdmluZyBubyBhdHRyaWJ1dGUKICMgcmFuZHJhbmdlLCBhbmQgdGhlbiBQeXRob24gaGFuZ3MuCiAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQppbmRleCAwZWJlYjM5Li5hODQ1NzdjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHN5cwogX3RocmVhZCA9IGltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogdGhyZWFkaW5nID0gaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKK2ltcG9ydCBfdGVzdGNhcGkKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCkBAIC0yMCw2ICsyMSwxNSBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IGxvY2tfdGVzdHMKIAorCisjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcworIyAjMTIzMTYgYW5kICMxMTg3MCksIGFuZCBmb3JrKCkgZnJvbSBhIHdvcmtlciB0aHJlYWQgaXMga25vd24gdG8gdHJpZ2dlcgorIyBwcm9ibGVtcyB3aXRoIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgKGlzc3VlICMzODYzKTogc2tpcCBwcm9ibGVtYXRpYyB0ZXN0cworIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgorcGxhdGZvcm1zX3RvX3NraXAgPSAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ25ldGJzZDUnLAorICAgICAgICAgICAgICAgICAgICAgJ2hwLXV4MTEnKQorCisKICMgQSB0cml2aWFsIG11dGFibGUgY291bnRlci4KIGNsYXNzIENvdW50ZXIob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC05OSw3ICsxMDksNyBAQAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ3dhaXRpbmcgZm9yIGFsbCB0YXNrcyB0byBjb21wbGV0ZScpCiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0LmpvaW4oTlVNVEFTS1MpCisgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0LmlzX2FsaXZlKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHQuaWRlbnQsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuaWRlbnQgaXMgTm9uZSkKQEAgLTQ2Nyw2ICs0NzcsMTI3IEBACiAgICAgICAgICAgICAgICAgcGlkLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHN0YXR1cykKIAorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkKHNlbGYpOgorICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWluLm5hbWUsICdNYWluVGhyZWFkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWluLmlkZW50LCB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5pZGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWluLmlkZW50LCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodGhyZWFkaW5nLm1haW5fdGhyZWFkKCkuaWRlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAidGVzdCBuZWVkcyBvcy5mb3JrKCkiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICd3YWl0cGlkJyksICJ0ZXN0IG5lZWRzIG9zLndhaXRwaWQoKSIpCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWRfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRocmVhZGluZworCisgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICAgICAgICAgIHByaW50KG1haW4ubmFtZSkKKyAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgIiIiCisgICAgICAgIF8sIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorICAgICAgICBkYXRhID0gb3V0LmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgIk1haW5UaHJlYWRcblRydWVcblRydWVcbiIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJ0ZXN0IG5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3dhaXRwaWQnKSwgInRlc3QgbmVlZHMgb3Mud2FpdHBpZCgpIikKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZF9hZnRlcl9mb3JrX2Zyb21fbm9ubWFpbl90aHJlYWQoc2VsZik6CisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zLCB0aHJlYWRpbmcsIHN5cworCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBtYWluID0gdGhyZWFkaW5nLm1haW5fdGhyZWFkKCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5uYW1lKQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLmlkZW50ID09IHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgIyBzdGRvdXQgaXMgZnVsbHkgYnVmZmVyZWQgYmVjYXVzZSBub3QgYSB0dHksCisgICAgICAgICAgICAgICAgICAgICMgd2UgaGF2ZSB0byBmbHVzaCBiZWZvcmUgZXhpdC4KKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChwaWQsIDApCisKKyAgICAgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgICAgIHRoLmpvaW4oKQorICAgICAgICAiIiIKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiVGhyZWFkLTFcblRydWVcblRydWVcbiIpCisKKyAgICBkZWYgdGVzdF90c3RhdGVfbG9jayhzZWxmKToKKyAgICAgICAgIyBUZXN0IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBUaHJlYWQgb2JqZWN0cy4KKyAgICAgICAgc3RhcnRlZCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIGZpbmlzaCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHN0YXJ0ZWQucmVsZWFzZSgpCisgICAgICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICMgVGhlIHRzdGF0ZSBsb2NrIGlzIE5vbmUgdW50aWwgdGhlIHRocmVhZCBpcyBzdGFydGVkCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX3RzdGF0ZV9sb2NrLCBOb25lKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuaXNfYWxpdmUoKSkKKyAgICAgICAgIyBUaGUgdHN0YXRlIGxvY2sgY2FuJ3QgYmUgYWNxdWlyZWQgd2hlbiB0aGUgdGhyZWFkIGlzIHJ1bm5pbmcKKyAgICAgICAgIyAob3Igc3VzcGVuZGVkKS4KKyAgICAgICAgdHN0YXRlX2xvY2sgPSB0Ll90c3RhdGVfbG9jaworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRzdGF0ZV9sb2NrLmFjcXVpcmUodGltZW91dD0wKSwgRmFsc2UpCisgICAgICAgIGZpbmlzaC5yZWxlYXNlKCkKKyAgICAgICAgIyBXaGVuIHRoZSB0aHJlYWQgZW5kcywgdGhlIHN0YXRlX2xvY2sgY2FuIGJlIHN1Y2Nlc3NmdWxseQorICAgICAgICAjIGFjcXVpcmVkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodHN0YXRlX2xvY2suYWNxdWlyZSh0aW1lb3V0PTUpLCBGYWxzZSkKKyAgICAgICAgIyBCdXQgaXNfYWxpdmUoKSBpcyBzdGlsbCBUcnVlOiAgd2UgaG9sZCBfdHN0YXRlX2xvY2sgbm93LCB3aGljaAorICAgICAgICAjIHByZXZlbnRzIGlzX2FsaXZlKCkgZnJvbSBrbm93aW5nIHRoZSB0aHJlYWQncyBlbmQtb2YtbGlmZSBDIGNvZGUKKyAgICAgICAgIyBpcyBkb25lLgorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5pc19hbGl2ZSgpKQorICAgICAgICAjIExldCBpc19hbGl2ZSgpIGZpbmQgb3V0IHRoZSBDIGNvZGUgaXMgZG9uZS4KKyAgICAgICAgdHN0YXRlX2xvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pc19hbGl2ZSgpKQorICAgICAgICAjIEFuZCB2ZXJpZnkgdGhlIHRocmVhZCBkaXNwb3NlZCBvZiBfdHN0YXRlX2xvY2suCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Ll90c3RhdGVfbG9jayBpcyBOb25lKQorCisgICAgZGVmIHRlc3RfcmVwcl9zdG9wcGVkKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0ICJzdG9wcGVkIiBzaG93cyB1cCBpbiByZXByKFRocmVhZCkgYXBwcm9wcmlhdGVseS4KKyAgICAgICAgc3RhcnRlZCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIGZpbmlzaCA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaygpCisgICAgICAgIHN0YXJ0ZWQuYWNxdWlyZSgpCisgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHN0YXJ0ZWQucmVsZWFzZSgpCisgICAgICAgICAgICBmaW5pc2guYWNxdWlyZSgpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic3RhcnRlZCIsIHJlcHIodCkpCisgICAgICAgIGZpbmlzaC5yZWxlYXNlKCkKKyAgICAgICAgIyAic3RvcHBlZCIgc2hvdWxkIGFwcGVhciBpbiB0aGUgcmVwciBpbiBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHRpbWUuCisgICAgICAgICMgSW1wbGVtZW50YXRpb24gZGV0YWlsOiAgYXMgb2YgdGhpcyB3cml0aW5nLCB0aGF0J3MgdHJpdmlhbGx5IHRydWUKKyAgICAgICAgIyBpZiAuam9pbigpIGlzIGNhbGxlZCwgYW5kIGFsbW9zdCB0cml2aWFsbHkgdHJ1ZSBpZiAuaXNfYWxpdmUoKSBpcworICAgICAgICAjIGNhbGxlZC4gIFRoZSBkZXRhaWwgd2UncmUgdGVzdGluZyBoZXJlIGlzIHRoYXQgInN0b3BwZWQiIHNob3dzIHVwCisgICAgICAgICMgImFsbCBvbiBpdHMgb3duIi4KKyAgICAgICAgTE9PS0lOR19GT1IgPSAic3RvcHBlZCIKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNTAwKToKKyAgICAgICAgICAgIGlmIExPT0tJTkdfRk9SIGluIHJlcHIodCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihMT09LSU5HX0ZPUiwgcmVwcih0KSkgIyB3ZSB3YWl0ZWQgYXQgbGVhc3QgNSBzZWNvbmRzCiAKICAgICBkZWYgdGVzdF9Cb3VuZGVkU2VtYXBob3JlX2xpbWl0KHNlbGYpOgogICAgICAgICAjIEJvdW5kZWRTZW1hcGhvcmUgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IgaWYgcmVsZWFzZWQgdG9vIG9mdGVuLgpAQCAtNDg2LDE0ICs2MTcsNTMgQEAKICAgICAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnMucmVsZWFzZSkKIAotY2xhc3MgVGhyZWFkSm9pbk9uU2h1dGRvd24oQmFzZVRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9sb2NhbHNfYXRfZXhpdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk0NjY6IHRocmVhZCBsb2NhbHMgbXVzdCBub3QgYmUgZGVsZXRlZCBiZWZvcmUgZGVzdHJ1Y3RvcnMKKyAgICAgICAgIyBhcmUgY2FsbGVkCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKIAotICAgICMgQmV0d2VlbiBmb3JrKCkgYW5kIGV4ZWMoKSwgb25seSBhc3luYy1zYWZlIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCAoaXNzdWVzCi0gICAgIyAjMTIzMTYgYW5kICMxMTg3MCksIGFuZCBmb3JrKCkgZnJvbSBhIHdvcmtlciB0aHJlYWQgaXMga25vd24gdG8gdHJpZ2dlcgotICAgICMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKLSAgICAjIG9uIHBsYXRmb3JtcyBrbm93biB0byBiZWhhdmUgYmFkbHkuCi0gICAgcGxhdGZvcm1zX3RvX3NraXAgPSAoJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywgJ25ldGJzZDUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdvczJlbXgnLCAnaHAtdXgxMScpCisgICAgICAgICAgICBjbGFzcyBBdGV4aXQ6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJ0aHJlYWRfZGljdC5hdGV4aXQgPSAlciIgJSB0aHJlYWRfZGljdC5hdGV4aXQpCisKKyAgICAgICAgICAgIHRocmVhZF9kaWN0ID0gdGhyZWFkaW5nLmxvY2FsKCkKKyAgICAgICAgICAgIHRocmVhZF9kaWN0LmF0ZXhpdCA9ICJhdGV4aXQiCisKKyAgICAgICAgICAgIGF0ZXhpdCA9IEF0ZXhpdCgpCisgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucnN0cmlwKCksIGIidGhyZWFkX2RpY3QuYXRleGl0ID0gJ2F0ZXhpdCciKQorCisgICAgZGVmIHRlc3Rfd2FybmluZ3NfYXRfZXhpdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk0NjY6IHRyeSB0byBjYWxsIG1vc3QgZGVzdHJ1Y3RvcnMgYXQgUHl0aG9uIHNodXRkb3duIGJlZm9yZQorICAgICAgICAjIGRlc3Ryb3lpbmcgUHl0aG9uIHRocmVhZCBzdGF0ZXMKKyAgICAgICAgZmlsZW5hbWUgPSBfX2ZpbGVfXworICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItV2QiLCAiLWMiLCAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKworICAgICAgICAgICAgZGVmIG9wZW5fc2xlZXAoKToKKyAgICAgICAgICAgICAgICAjIGEgd2FybmluZyB3aWxsIGJlIGVtaXR0ZWQgd2hlbiB0aGUgb3BlbiBmaWxlIHdpbGwgYmUKKyAgICAgICAgICAgICAgICAjIGRlc3Ryb3llZCAod2l0aG91dCBiZWluZyBleHBsaWNpdGx5IGNsb3NlZCkgd2hpbGUgdGhlIGRhZW1vbgorICAgICAgICAgICAgICAgICMgdGhyZWFkIGlzIGRlc3Ryb3llZAorICAgICAgICAgICAgICAgIGZpbGVvYmogPSBvcGVuKCVhLCAncmInKQorICAgICAgICAgICAgICAgIHN0YXJ0X2V2ZW50LnNldCgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg2MC4wKQorCisgICAgICAgICAgICBzdGFydF9ldmVudCA9IHRocmVhZGluZy5FdmVudCgpCisKKyAgICAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PW9wZW5fc2xlZXApCisgICAgICAgICAgICB0aHJlYWQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworICAgICAgICAgICAgIyB3YWl0IHVudGlsIHRoZSB0aHJlYWQgc3RhcnRlZAorICAgICAgICAgICAgc3RhcnRfZXZlbnQud2FpdCgpCisgICAgICAgICIiIiAlIGZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyci5yc3RyaXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiIl5zeXM6MTogUmVzb3VyY2VXYXJuaW5nOiB1bmNsb3NlZCBmaWxlICIpCisKKworY2xhc3MgVGhyZWFkSm9pbk9uU2h1dGRvd24oQmFzZVRlc3RDYXNlKToKIAogICAgIGRlZiBfcnVuX2FuZF9qb2luKHNlbGYsIHNjcmlwdCk6CiAgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CkBAIC01NjYsMTQ0ICs3MzYsOCBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCiAKLSAgICBkZWYgYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNlbGYsIHNjcmlwdCwgZXhwZWN0ZWRfb3V0cHV0KToKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBzY3JpcHQpCi0gICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBleHBlY3RlZF9vdXRwdXQpCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSBpbiBwbGF0Zm9ybXNfdG9fc2tpcCwgImR1ZSB0byBrbm93biBPUyBidWciKQotICAgIGRlZiB0ZXN0XzRfam9pbmluZ19hY3Jvc3NfZm9ya19pbl93b3JrZXJfdGhyZWFkKHNlbGYpOgotICAgICAgICAjIFRoZXJlIHVzZWQgdG8gYmUgYSBwb3NzaWJsZSBkZWFkbG9jayB3aGVuIGZvcmtpbmcgZnJvbSBhIGNoaWxkCi0gICAgICAgICMgdGhyZWFkLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU2NjQzLgotCi0gICAgICAgICMgVGhlIHNjcmlwdCB0YWtlcyB0aGUgZm9sbG93aW5nIHN0ZXBzOgotICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIGluIHRoZSBwYXJlbnQgcHJvY2VzcyBzdGFydHMgYSBuZXcgdGhyZWFkIGFuZCB0aGVuCi0gICAgICAgICMgICB0cmllcyB0byBqb2luIGl0LgotICAgICAgICAjIC0gVGhlIGpvaW4gb3BlcmF0aW9uIGFjcXVpcmVzIHRoZSBMb2NrIGluc2lkZSB0aGUgdGhyZWFkJ3MgX2Jsb2NrCi0gICAgICAgICMgICBDb25kaXRpb24uICAoU2VlIHRocmVhZGluZy5weTpUaHJlYWQuam9pbigpLikKLSAgICAgICAgIyAtIFdlIHN0dWIgb3V0IHRoZSBhY3F1aXJlIG1ldGhvZCBvbiB0aGUgY29uZGl0aW9uIHRvIGZvcmNlIGl0IHRvIHdhaXQKLSAgICAgICAgIyAgIHVudGlsIHRoZSBjaGlsZCB0aHJlYWQgZm9ya3MuICAoU2VlIExPQ0sgQUNRVUlSRUQgSEVSRSkKLSAgICAgICAgIyAtIFRoZSBjaGlsZCB0aHJlYWQgZm9ya3MuICAoU2VlIExPQ0sgSEVMRCBhbmQgV09SS0VSIFRIUkVBRCBGT1JLUwotICAgICAgICAjICAgSEVSRSkKLSAgICAgICAgIyAtIFRoZSBtYWluIHRocmVhZCBvZiB0aGUgcGFyZW50IHByb2Nlc3MgZW50ZXJzIENvbmRpdGlvbi53YWl0KCksCi0gICAgICAgICMgICB3aGljaCByZWxlYXNlcyB0aGUgbG9jayBvbiB0aGUgY2hpbGQgdGhyZWFkLgotICAgICAgICAjIC0gVGhlIGNoaWxkIHByb2Nlc3MgcmV0dXJucy4gIFdpdGhvdXQgdGhlIG5lY2Vzc2FyeSBmaXgsIHdoZW4gdGhlCi0gICAgICAgICMgICBtYWluIHRocmVhZCBvZiB0aGUgY2hpbGQgcHJvY2VzcyAod2hpY2ggdXNlZCB0byBiZSB0aGUgY2hpbGQgdGhyZWFkCi0gICAgICAgICMgICBpbiB0aGUgcGFyZW50IHByb2Nlc3MpIGF0dGVtcHRzIHRvIGV4aXQsIGl0IHdpbGwgdHJ5IHRvIGFjcXVpcmUgdGhlCi0gICAgICAgICMgICBsb2NrIGluIHRoZSBUaHJlYWQuX2Jsb2NrIENvbmRpdGlvbiBvYmplY3QgYW5kIGhhbmcsIGJlY2F1c2UgdGhlCi0gICAgICAgICMgICBsb2NrIHdhcyBoZWxkIGFjcm9zcyB0aGUgZm9yay4KLQotICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKLQotICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBGYWxzZQotICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCi0KLSAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhpcyB0aHJlYWQncyBsb2NrIGlzIGFjcXVpcmVkIGJlZm9yZSBmb3JraW5nIHRvCi0gICAgICAgICAgICAgICAgIyBjcmVhdGUgdGhlIGRlYWRsb2NrLgotICAgICAgICAgICAgICAgIGdsb2JhbCBmaW5pc2hfam9pbgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgIyBMT0NLIEhFTEQ6IE1haW4gdGhyZWFkIGhvbGRzIGxvY2sgYWNyb3NzIHRoaXMgY2FsbC4KLSAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgICAgIGZpbmlzaF9qb2luID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIG9zLndhaXRwaWQoY2hpbGRwaWQsIDApCi0gICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIHNob3VsZCBqdXN0IHJldHVybi4KLQotICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKLQotICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBsb2NrIGFjcXVpcmUgbWV0aG9kLgotICAgICAgICAgICAgIyBUaGlzIGFjcXVpcmVzIHRoZSBsb2NrIGFuZCB0aGVuIHdhaXRzIHVudGlsIHRoZSBjaGlsZCBoYXMgZm9ya2VkCi0gICAgICAgICAgICAjIGJlZm9yZSByZXR1cm5pbmcsIHdoaWNoIHdpbGwgcmVsZWFzZSB0aGUgbG9jayBzb29uIGFmdGVyLiAgSWYKLSAgICAgICAgICAgICMgc29tZW9uZSBlbHNlIHRyaWVzIHRvIGZpeCB0aGlzIHRlc3QgY2FzZSBieSBhY3F1aXJpbmcgdGhpcyBsb2NrCi0gICAgICAgICAgICAjIGJlZm9yZSBmb3JraW5nIGluc3RlYWQgb2YgcmVzZXR0aW5nIGl0LCB0aGUgdGVzdCBjYXNlIHdpbGwKLSAgICAgICAgICAgICMgZGVhZGxvY2sgd2hlbiBpdCBzaG91bGRuJ3QuCi0gICAgICAgICAgICBjb25kaXRpb24gPSB3Ll9ibG9jawotICAgICAgICAgICAgb3JpZ19hY3F1aXJlID0gY29uZGl0aW9uLmFjcXVpcmUKLSAgICAgICAgICAgIGNhbGxfY291bnRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgICAgIGNhbGxfY291bnQgPSAwCi0gICAgICAgICAgICBkZWYgbXlfYWNxdWlyZSgpOgotICAgICAgICAgICAgICAgIGdsb2JhbCBjYWxsX2NvdW50Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKLSAgICAgICAgICAgICAgICBvcmlnX2FjcXVpcmUoKSAgIyBMT0NLIEFDUVVJUkVEIEhFUkUKLSAgICAgICAgICAgICAgICBzdGFydF9mb3JrID0gVHJ1ZQotICAgICAgICAgICAgICAgIGlmIGNhbGxfY291bnQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgbm90IGZpbmlzaF9qb2luOgotICAgICAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgIyBXT1JLRVIgVEhSRUFEIEZPUktTIEhFUkUKLSAgICAgICAgICAgICAgICB3aXRoIGNhbGxfY291bnRfbG9jazoKLSAgICAgICAgICAgICAgICAgICAgY2FsbF9jb3VudCArPSAxCi0gICAgICAgICAgICBjb25kaXRpb24uYWNxdWlyZSA9IG15X2FjcXVpcmUKLQotICAgICAgICAgICAgdy5zdGFydCgpCi0gICAgICAgICAgICB3LmpvaW4oKQotICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiBtYWluJykKLSAgICAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsICJlbmQgb2YgbWFpblxuIikKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNV9jbGVhcl93YWl0ZXJfbG9ja3NfdG9fYXZvaWRfY3Jhc2goc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhIHNwYXduZWQgdGhyZWFkIHRoYXQgZm9ya3MgZG9lc24ndCBzZWdmYXVsdCBvbiBjZXJ0YWluCi0gICAgICAgICMgcGxhdGZvcm1zLCBuYW1lbHkgT1MgWC4gIFRoaXMgdXNlZCB0byBoYXBwZW4gaWYgdGhlcmUgd2FzIGEgd2FpdGVyCi0gICAgICAgICMgbG9jayBpbiB0aGUgdGhyZWFkJ3MgY29uZGl0aW9uIHZhcmlhYmxlJ3Mgd2FpdGVycyBsaXN0LiAgRXZlbiB0aG91Z2gKLSAgICAgICAgIyB3ZSBrbm93IHRoZSBsb2NrIHdpbGwgYmUgaGVsZCBhY3Jvc3MgdGhlIGZvcmssIGl0IGlzIG5vdCBzYWZlIHRvCi0gICAgICAgICMgcmVsZWFzZSBsb2NrcyBoZWxkIGFjcm9zcyBmb3JrcyBvbiBhbGwgcGxhdGZvcm1zLCBzbyByZWxlYXNpbmcgdGhlCi0gICAgICAgICMgd2FpdGVyIGxvY2sgY2F1c2VkIGEgc2VnZmF1bHQgb24gT1MgWC4gIEZ1cnRoZXJtb3JlLCBzaW5jZSBsb2NrcyBvbgotICAgICAgICAjIE9TIFggYXJlIChhcyBvZiB0aGlzIHdyaXRpbmcpIGltcGxlbWVudGVkIHdpdGggYSBtdXRleCArIGNvbmRpdGlvbgotICAgICAgICAjIHZhcmlhYmxlIGluc3RlYWQgb2YgYSBzZW1hcGhvcmUsIHdoaWxlIHdlIGtub3cgdGhhdCB0aGUgUHl0aG9uLWxldmVsCi0gICAgICAgICMgbG9jayB3aWxsIGJlIGFjcXVpcmVkLCB3ZSBjYW4ndCBrbm93IGlmIHRoZSBpbnRlcm5hbCBtdXRleCB3aWxsIGJlCi0gICAgICAgICMgYWNxdWlyZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmsuCi0KLSAgICAgICAgc2NyaXB0ID0gIiIiaWYgVHJ1ZToKLSAgICAgICAgICAgIGltcG9ydCBvcywgdGltZSwgdGhyZWFkaW5nCi0KLSAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBGYWxzZQotCi0gICAgICAgICAgICBkZWYgd29ya2VyKCk6Ci0gICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoZSBtYWluIHRocmVhZCBoYXMgYXR0ZW1wdGVkIHRvIGpvaW4gdGhpcyB0aHJlYWQKLSAgICAgICAgICAgICAgICAjIGJlZm9yZSBjb250aW51aW5nLgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydF9mb3JrOgotICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCi0gICAgICAgICAgICAgICAgY2hpbGRwaWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgotICAgICAgICAgICAgICAgICAgICAjIFBhcmVudCBwcm9jZXNzIGp1c3Qgd2FpdHMgZm9yIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICAoY3BpZCwgcmMpID0gb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNwaWQgPT0gY2hpbGRwaWQKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJjID09IDAKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2VuZCBvZiB3b3JrZXIgdGhyZWFkJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIHcgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD13b3JrZXIpCi0KLSAgICAgICAgICAgICMgU3R1YiBvdXQgdGhlIHByaXZhdGUgY29uZGl0aW9uIHZhcmlhYmxlJ3MgX3JlbGVhc2Vfc2F2ZSBtZXRob2QuCi0gICAgICAgICAgICAjIFRoaXMgcmVsZWFzZXMgdGhlIGNvbmRpdGlvbidzIGxvY2sgYW5kIGZsaXBzIHRoZSBnbG9iYWwgdGhhdAotICAgICAgICAgICAgIyBjYXVzZXMgdGhlIHdvcmtlciB0byBmb3JrLiAgQXQgdGhpcyBwb2ludCwgdGhlIHByb2JsZW1hdGljIHdhaXRlcgotICAgICAgICAgICAgIyBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkIG9uY2UgYnkgdGhlIHdhaXRlciBhbmQgaGFzIGJlZW4gcHV0IG9udG8KLSAgICAgICAgICAgICMgdGhlIHdhaXRlcnMgbGlzdC4KLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCi0gICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSA9IGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlCi0gICAgICAgICAgICBkZWYgbXlfcmVsZWFzZV9zYXZlKCk6Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIHN0YXJ0X2ZvcmsKLSAgICAgICAgICAgICAgICBvcmlnX3JlbGVhc2Vfc2F2ZSgpCi0gICAgICAgICAgICAgICAgIyBXYWl0ZXIgbG9jayBoZWxkIGhlcmUsIGNvbmRpdGlvbiBsb2NrIHJlbGVhc2VkLgotICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCi0gICAgICAgICAgICBjb25kaXRpb24uX3JlbGVhc2Vfc2F2ZSA9IG15X3JlbGVhc2Vfc2F2ZQotCi0gICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIHcuam9pbigpCi0gICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4gdGhyZWFkJykKLSAgICAgICAgICAgICIiIgotICAgICAgICBvdXRwdXQgPSAiZW5kIG9mIHdvcmtlciB0aHJlYWRcbmVuZCBvZiBtYWluIHRocmVhZFxuIgotICAgICAgICBzZWxmLmFzc2VydFNjcmlwdEhhc091dHB1dChzY3JpcHQsIG91dHB1dCkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNl9kYWVtb25fdGhyZWFkcyhzZWxmKToKKyAgICBkZWYgdGVzdF80X2RhZW1vbl90aHJlYWRzKHNlbGYpOgogICAgICAgICAjIENoZWNrIHRoYXQgYSBkYWVtb24gdGhyZWFkIGNhbm5vdCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIgb24gc2h1dGRvd24KICAgICAgICAgIyBieSBtYW5pcHVsYXRpbmcgaW50ZXJuYWwgc3RydWN0dXJlcyB0aGF0IGFyZSBiZWluZyBkaXNwb3NlZCBvZiBpbgogICAgICAgICAjIHRoZSBtYWluIHRocmVhZC4KQEAgLTcxMyw2ICs3NDcsMTAgQEAKICAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGltcG9ydCB0aW1lCiAgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKworICAgICAgICAgICAgIyBpZ25vcmUgInVuY2xvc2VkIGZpbGUgLi4uIiB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsICcnLCBSZXNvdXJjZVdhcm5pbmcpCiAKICAgICAgICAgICAgIHRocmVhZF9oYXNfcnVuID0gc2V0KCkKIApAQCAtNzY5LDYgKzgwNywxMTEgQEAKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKICAgICAgICAgICAgIHQuam9pbigpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAibmVlZHMgb3MuZm9yaygpIikKKyAgICBkZWYgdGVzdF9jbGVhcl90aHJlYWRzX3N0YXRlc19hZnRlcl9mb3JrKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzA5NDogY2hlY2sgdGhhdCB0aHJlYWRzIHN0YXRlcyBhcmUgY2xlYXJlZCBhZnRlciBmb3JrKCkKKworICAgICAgICAjIHN0YXJ0IGEgYnVuY2ggb2YgdGhyZWFkcworICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTYpOgorICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxhbWJkYSA6IHRpbWUuc2xlZXAoMC4zKSkKKyAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgaGF2ZSBiZWVuIGNsZWFyZWQKKyAgICAgICAgICAgIGlmIGxlbihzeXMuX2N1cnJlbnRfZnJhbWVzKCkpID09IDE6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF8sIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzdGF0dXMpCisKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuam9pbigpCisKKworY2xhc3MgU3ViaW50ZXJwVGhyZWFkaW5nVGVzdHMoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbihzZWxmKToKKyAgICAgICAgIyBOb24tZGFlbW9uIHRocmVhZHMgc2hvdWxkIGJlIGpvaW5lZCBhdCBzdWJpbnRlcnByZXRlciBzaHV0ZG93bgorICAgICAgICAjIChpc3N1ZSAjMTg4MDgpCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCByKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHcpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgb3Mud3JpdGUoJWQsIGIieCIpCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKS5zdGFydCgpCisgICAgICAgICAgICAiIiIgJSAodywpCisgICAgICAgIHJldCA9IHRlc3Quc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICAjIFRoZSB0aHJlYWQgd2FzIGpvaW5lZCBwcm9wZXJseS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5yZWFkKHIsIDEpLCBiIngiKQorCisgICAgZGVmIHRlc3RfdGhyZWFkc19qb2luXzIoc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgZGVsYXkgZ2V0cyBpbnRyb2R1Y2VkIGFmdGVyIHRoZSB0aHJlYWQncworICAgICAgICAjIFB5dGhvbiBjb2RlIHJldHVybmVkIGJ1dCBiZWZvcmUgdGhlIHRocmVhZCBzdGF0ZSBpcyBkZWxldGVkLgorICAgICAgICAjIFRvIGFjaGlldmUgdGhpcywgd2UgcmVnaXN0ZXIgYSB0aHJlYWQtbG9jYWwgb2JqZWN0IHdoaWNoIHNsZWVwcworICAgICAgICAjIGEgYml0IHdoZW4gZGVhbGxvY2F0ZWQuCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCByKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHcpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHRocmVhZGluZworICAgICAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAgICAgY2xhc3MgU2xlZXBlcjoKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorCisgICAgICAgICAgICB0bHMgPSB0aHJlYWRpbmcubG9jYWwoKQorCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgICMgU2xlZXAgYSBiaXQgc28gdGhhdCB0aGUgdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbgorICAgICAgICAgICAgICAgICMgUHlfRW5kSW50ZXJwcmV0ZXIgaXMgY2FsbGVkLgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKyAgICAgICAgICAgICAgICB0bHMueCA9IFNsZWVwZXIoKQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSB0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X2RhZW1vbl90aHJlYWRzX2ZhdGFsX2Vycm9yKHNlbGYpOgorICAgICAgICBzdWJpbnRlcnBfY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBkYWVtb24gdGhyZWFkIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbgorICAgICAgICAgICAgICAgICMgUHlfRW5kSW50ZXJwcmV0ZXIgaXMgY2FsbGVkLgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mLCBkYWVtb249VHJ1ZSkuc3RhcnQoKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHNjcmlwdCA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorCisgICAgICAgICAgICBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycCglcikKKyAgICAgICAgICAgICIiIiAlIChzdWJpbnRlcnBfY29kZSwpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgiLWMiLCBzY3JpcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkZhdGFsIFB5dGhvbiBlcnJvcjogUHlfRW5kSW50ZXJwcmV0ZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IHRoZSBsYXN0IHRocmVhZCIsIGVyci5kZWNvZGUoKSkKKwogCiBjbGFzcyBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgogICAgICMgQSBSdW50aW1lRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBpZiBUaHJlYWQuc3RhcnQoKSBpcyBjYWxsZWQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQppbmRleCBmOTc1YTc1Li5iMTAwNGU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CkBAIC04LDcgKzgsNyBAQAogdGhyZWFkID0gaW1wb3J0X21vZHVsZSgnX3RocmVhZCcpCiBpbXBvcnQgdGltZQogCi1pZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybT09J3Jpc2Nvcyc6CitpZiAoc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJyk6CiAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKIAogcHJvY2Vzc19waWQgPSBvcy5nZXRwaWQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CmluZGV4IGQ4ZDYwMjkuLjQ0YmNiOTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWUucHkKQEAgLTM3MSw2ICszNzEsMTQgQEAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHRpbWUsICdtb25vdG9uaWMnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCB0aW1lLm1vbm90b25pYycpCiAgICAgZGVmIHRlc3RfbW9ub3RvbmljKHNlbGYpOgorICAgICAgICAjIG1vbm90b25pYygpIHNob3VsZCBub3QgZ28gYmFja3dhcmQKKyAgICAgICAgdGltZXMgPSBbdGltZS5tb25vdG9uaWMoKSBmb3IgbiBpbiByYW5nZSgxMDApXQorICAgICAgICB0MSA9IHRpbWVzWzBdCisgICAgICAgIGZvciB0MiBpbiB0aW1lc1sxOl06CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh0MiwgdDEsICJ0aW1lcz0lcyIgJSB0aW1lcykKKyAgICAgICAgICAgIHQxID0gdDIKKworICAgICAgICAjIG1vbm90b25pYygpIGluY2x1ZGVzIHRpbWUgZWxhcHNlZCBkdXJpbmcgYSBzbGVlcAogICAgICAgICB0MSA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgdGltZS5zbGVlcCgwLjUpCiAgICAgICAgIHQyID0gdGltZS5tb25vdG9uaWMoKQpAQCAtMzc4LDYgKzM4Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcih0MiwgdDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZHQsIDAuNSwgZGVsdGE9MC4yKQogCisgICAgICAgICMgbW9ub3RvbmljKCkgaXMgYSBtb25vdG9uaWMgYnV0IG5vbiBhZGp1c3RhYmxlIGNsb2NrCiAgICAgICAgIGluZm8gPSB0aW1lLmdldF9jbG9ja19pbmZvKCdtb25vdG9uaWMnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5tb25vdG9uaWMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5hZGp1c3RhYmxlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5IGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CmluZGV4IGRjZjIwMWIuLjcwM2M0M2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgICAgICAgICAgc29jay5jb25uZWN0KCh3aGl0ZWhvbGUpKQogICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVDT05OUkVGVVNFRDoKICAgICAgICAgICAgICAgICBza2lwID0gRmFsc2UKICAgICAgICAgZmluYWxseToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKaW5kZXggNWJjZTJhZi4uOTZlZjk1MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkKQEAgLTE1MCwzMCArMTUwLDc0IEBACiAKIGNsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgZGVmIHNvbWVfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICByYWlzZSBLZXlFcnJvcignYmxhaCcpCisKKyAgICBkZWYgY2hlY2tfdHJhY2ViYWNrX2Zvcm1hdChzZWxmLCBjbGVhbnVwX2Z1bmM9Tm9uZSk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdibGFoJykKKyAgICAgICAgICAgIHNlbGYuc29tZV9leGNlcHRpb24oKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGNsZWFudXBfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIENsZWFyIHRoZSBpbm5lciBmcmFtZXMsIG5vdCB0aGlzIG9uZQorICAgICAgICAgICAgICAgIGNsZWFudXBfZnVuYyh0Yi50Yl9uZXh0KQogICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCiAgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKICAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCiAgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgICAgICMgQ2FsbCBhbGwgX3RiIGFuZCBfZXhjIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHRic3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YikKKyAgICAgICAgICAgIHRiZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YiwgZmlsZT10YmZpbGUpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXhjc3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgZXhjZm10ID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZXhjZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1leGNmaWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVzdCB0cmFjZWJhY2sgc3RyaW5nIikKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IFB5dGhvbiBhbmQgdGhlIHRyYWNlYmFjayBtb2R1bGUgZm9ybWF0IHRoZSBzYW1lIHRoaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrX2ZtdCwgcHl0aG9uX2ZtdCkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfdGIgZnVuYyBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YnN0ZGVyci5nZXR2YWx1ZSgpLCB0YmZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfZXhjIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjc3RkZXJyLmdldHZhbHVlKCksIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNmbXQsIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgaXMgcHJvcGVybHkgaW5kZW50ZWQuCiAgICAgICAgIHRiX2xpbmVzID0gcHl0aG9uX2ZtdC5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGJfbGluZXMpLCAzKQotICAgICAgICBiYW5uZXIsIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgNSkKKyAgICAgICAgYmFubmVyID0gdGJfbGluZXNbMF0KKyAgICAgICAgbG9jYXRpb24sIHNvdXJjZV9saW5lID0gdGJfbGluZXNbLTI6XQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKIAorICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2Zvcm1hdCgpCisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0X3dpdGhfY2xlYXJlZF9mcmFtZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0cmFjZWJhY2sgZm9ybWF0dGluZyBhbHNvIHdvcmtzIHdpdGggYSBjbGVhcigpZWQgZnJhbWUKKyAgICAgICAgZGVmIGNsZWFudXBfdGIodGIpOgorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoY2xlYW51cF90YikKKworICAgIGRlZiB0ZXN0X3N0YWNrX2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgX3N0YWNrIGZ1bmN0aW9ucy4gTm90ZSB3ZSBoYXZlIHRvIHVzZSBfZ2V0ZnJhbWUoMSkgdG8KKyAgICAgICAgIyBjb21wYXJlIHRoZW0gd2l0aG91dCB0aGlzIGZyYW1lIGFwcGVhcmluZyBpbiB0aGUgb3V0cHV0CisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdHN0ZGVycjoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICBzdGZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpLCBmaWxlPXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCBzdGZpbGUuZ2V0dmFsdWUoKSkKKworICAgICAgICBzdGZtdCA9IHRyYWNlYmFjay5mb3JtYXRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0c3RkZXJyLmdldHZhbHVlKCksICIiLmpvaW4oc3RmbXQpKQorCiAKIGNhdXNlX21lc3NhZ2UgPSAoCiAgICAgIlxuVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSAiCkBAIC0zNDQsNiArMzg4LDM2IEBACiAgICAgICAgIHJldHVybiBzLmdldHZhbHVlKCkKIAogCitjbGFzcyBNaXNjVHJhY2ViYWNrQ2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMKKyAgICAjIENoZWNrIG5vbi1wcmludGluZyBmdW5jdGlvbnMgaW4gdHJhY2ViYWNrIG1vZHVsZQorICAgICMKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG1pZGRsZSgpCisgICAgICAgIGRlZiBtaWRkbGUoKToKKyAgICAgICAgICAgIGlubmVyKCkKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBpID0gMQorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0ZXIoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKworICAgICAgICAjIEluaXRpYWwgYXNzZXJ0aW9uOiB0aGVyZSdzIG9uZSBsb2NhbCBpbiB0aGUgaW5uZXIgZnJhbWUuCisgICAgICAgIGlubmVyX2ZyYW1lID0gdGIudGJfbmV4dC50Yl9uZXh0LnRiX25leHQudGJfZnJhbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaW5uZXJfZnJhbWUuZl9sb2NhbHMpLCAxKQorCisgICAgICAgICMgQ2xlYXIgdHJhY2ViYWNrIGZyYW1lcworICAgICAgICB0cmFjZWJhY2suY2xlYXJfZnJhbWVzKHRiKQorCisgICAgICAgICMgTG9jYWwgdmFyaWFibGUgZGljdCBzaG91bGQgbm93IGJlIGVtcHR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lcl9mcmFtZS5mX2xvY2FscyksIDApCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg0ZTMxMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2VtYWxsb2MucHkKQEAgLTAsMCArMSw3OTIgQEAKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZW1hbGxvYworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCitFTVBUWV9TVFJJTkdfU0laRSA9IHN5cy5nZXRzaXplb2YoYicnKQorCitkZWYgZ2V0X2ZyYW1lcyhuZnJhbWUsIGxpbmVub19kZWx0YSk6CisgICAgZnJhbWVzID0gW10KKyAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoMSkKKyAgICBmb3IgaW5kZXggaW4gcmFuZ2UobmZyYW1lKToKKyAgICAgICAgY29kZSA9IGZyYW1lLmZfY29kZQorICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2xpbmVubyArIGxpbmVub19kZWx0YQorICAgICAgICBmcmFtZXMuYXBwZW5kKChjb2RlLmNvX2ZpbGVuYW1lLCBsaW5lbm8pKQorICAgICAgICBsaW5lbm9fZGVsdGEgPSAwCisgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBicmVhaworICAgIHJldHVybiB0dXBsZShmcmFtZXMpCisKK2RlZiBhbGxvY2F0ZV9ieXRlcyhzaXplKToKKyAgICBuZnJhbWUgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkKKyAgICBieXRlc19sZW4gPSAoc2l6ZSAtIEVNUFRZX1NUUklOR19TSVpFKQorICAgIGZyYW1lcyA9IGdldF9mcmFtZXMobmZyYW1lLCAxKQorICAgIGRhdGEgPSBiJ3gnICogYnl0ZXNfbGVuCisgICAgcmV0dXJuIGRhdGEsIHRyYWNlbWFsbG9jLlRyYWNlYmFjayhmcmFtZXMpCisKK2RlZiBjcmVhdGVfc25hcHNob3RzKCk6CisgICAgdHJhY2ViYWNrX2xpbWl0ID0gMgorCisgICAgcmF3X3RyYWNlcyA9IFsKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICg2NiwgKCgnYi5weScsIDEpLCkpLAorCisgICAgICAgICg3LCAoKCc8dW5rbm93bj4nLCAwKSwpKSwKKyAgICBdCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdChyYXdfdHJhY2VzLCB0cmFjZWJhY2tfbGltaXQpCisKKyAgICByYXdfdHJhY2VzMiA9IFsKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKworICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAoNTAwMCwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICg0MDAsICgoJ2MucHknLCA1NzgpLCkpLAorICAgIF0KKyAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdChyYXdfdHJhY2VzMiwgdHJhY2ViYWNrX2xpbWl0KQorCisgICAgcmV0dXJuIChzbmFwc2hvdCwgc25hcHNob3QyKQorCitkZWYgZnJhbWUoZmlsZW5hbWUsIGxpbmVubyk6CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jLl9GcmFtZSgoZmlsZW5hbWUsIGxpbmVubykpCisKK2RlZiB0cmFjZWJhY2soKmZyYW1lcyk6CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jLlRyYWNlYmFjayhmcmFtZXMpCisKK2RlZiB0cmFjZWJhY2tfbGluZW5vKGZpbGVuYW1lLCBsaW5lbm8pOgorICAgIHJldHVybiB0cmFjZWJhY2soKGZpbGVuYW1lLCBsaW5lbm8pKQorCitkZWYgdHJhY2ViYWNrX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICByZXR1cm4gdHJhY2ViYWNrX2xpbmVubyhmaWxlbmFtZSwgMCkKKworCitjbGFzcyBUZXN0VHJhY2VtYWxsb2NFbmFibGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRyYWNlbWFsbG9jIG11c3QgYmUgc3RvcHBlZCBiZWZvcmUgdGhlIHRlc3QiKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeShzZWxmKToKKyAgICAgICAgZGF0YSA9IFthbGxvY2F0ZV9ieXRlcygxMjMpIGZvciBjb3VudCBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZW1hbGxvY19tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplLCAwKQorCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNpemUyID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUyLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplMiwgc2l6ZSkKKworICAgIGRlZiB0ZXN0X2dldF9vYmplY3RfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBvYmpfc2l6ZSA9IDEyMzQ1CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmpfdHJhY2ViYWNrKQorCisgICAgZGVmIHRlc3Rfc2V0X3RyYWNlYmFja19saW1pdChzZWxmKToKKyAgICAgICAgb2JqX3NpemUgPSAxMAorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0cmFjZW1hbGxvYy5zdGFydCwgLTEpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEwKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmoyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZWJhY2spLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9iajJfdHJhY2ViYWNrKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgxKQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZWJhY2spLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjaykKKworCisgICAgZGVmIGZpbmRfdHJhY2Uoc2VsZiwgdHJhY2VzLCB0cmFjZWJhY2spOgorICAgICAgICBmb3IgdHJhY2UgaW4gdHJhY2VzOgorICAgICAgICAgICAgaWYgdHJhY2VbMV0gPT0gdHJhY2ViYWNrLl9mcmFtZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlCisKKyAgICAgICAgc2VsZi5mYWlsKCJ0cmFjZSBub3QgZm91bmQiKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlcyhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisgICAgICAgIHRyYWNlID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqX3RyYWNlYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhY2UsIHR1cGxlKQorICAgICAgICBzaXplLCB0cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIG9ial9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjay5fZnJhbWVzKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLl9nZXRfdHJhY2VzKCksIFtdKQorCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhY2VzX2ludGVybl90cmFjZWJhY2soc2VsZik6CisgICAgICAgICMgZHVtbXkgd3JhcHBlcnMgdG8gZ2V0IG1vcmUgdXNlZnVsIGFuZCBpZGVudGljYWwgZnJhbWVzIGluIHRoZSB0cmFjZWJhY2sKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzMihzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlcyhzaXplKQorICAgICAgICBkZWYgYWxsb2NhdGVfYnl0ZXMzKHNpemUpOgorICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlX2J5dGVzMihzaXplKQorICAgICAgICBkZWYgYWxsb2NhdGVfYnl0ZXM0KHNpemUpOgorICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlX2J5dGVzMyhzaXplKQorCisgICAgICAgICMgRW5zdXJlIHRoYXQgdHdvIGlkZW50aWNhbCB0cmFjZWJhY2tzIGFyZSBub3QgZHVwbGljYXRlZAorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoNCkKKyAgICAgICAgb2JqX3NpemUgPSAxMjMKKyAgICAgICAgb2JqMSwgb2JqMV90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlczQob2JqX3NpemUpCisgICAgICAgIG9iajIsIG9iajJfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXM0KG9ial9zaXplKQorCisgICAgICAgIHRyYWNlcyA9IHRyYWNlbWFsbG9jLl9nZXRfdHJhY2VzKCkKKworICAgICAgICB0cmFjZTEgPSBzZWxmLmZpbmRfdHJhY2UodHJhY2VzLCBvYmoxX3RyYWNlYmFjaykKKyAgICAgICAgdHJhY2UyID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqMl90cmFjZWJhY2spCisgICAgICAgIHNpemUxLCB0cmFjZWJhY2sxID0gdHJhY2UxCisgICAgICAgIHNpemUyLCB0cmFjZWJhY2syID0gdHJhY2UyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrMiwgdHJhY2ViYWNrMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0cmFjZWJhY2syLCB0cmFjZWJhY2sxKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlZF9tZW1vcnkoc2VsZik6CisgICAgICAgICMgUHl0aG9uIGFsbG9jYXRlcyBzb21lIGludGVybmFscyBvYmplY3RzLCBzbyB0aGUgdGVzdCBtdXN0IHRvbGVyYXRlCisgICAgICAgICMgYSBzbWFsbCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGV4cGVjdGVkIHNpemUgYW5kIHRoZSByZWFsIHVzYWdlCisgICAgICAgIG1heF9lcnJvciA9IDIwNDgKKworICAgICAgICAjIGFsbG9jYXRlIG9uZSBvYmplY3QKKyAgICAgICAgb2JqX3NpemUgPSAxMDI0ICogMTAyNAorICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgc2l6ZSwgcGVha19zaXplID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplLCBvYmpfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGVha19zaXplLCBzaXplKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHNpemUgLSBvYmpfc2l6ZSwgbWF4X2Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChwZWFrX3NpemUgLSBzaXplLCBtYXhfZXJyb3IpCisKKyAgICAgICAgIyBkZXN0cm95IHRoZSBvYmplY3QKKyAgICAgICAgb2JqID0gTm9uZQorICAgICAgICBzaXplMiwgcGVha19zaXplMiA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHNpemUyLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplIC0gc2l6ZTIsIG9ial9zaXplIC0gbWF4X2Vycm9yKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChwZWFrX3NpemUyLCBwZWFrX3NpemUpCisKKyAgICAgICAgIyBjbGVhcl90cmFjZXMoKSBtdXN0IHJlc2V0IHRyYWNlZCBtZW1vcnkgY291bnRlcnMKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpLCAoMCwgMCkpCisKKyAgICAgICAgIyBhbGxvY2F0ZSBhbm90aGVyIG9iamVjdAorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgc2l6ZSwgcGVha19zaXplID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzaXplLCBvYmpfc2l6ZSkKKworICAgICAgICAjIHN0b3AoKSBhbHNvIHJlc2V0cyB0cmFjZWQgbWVtb3J5IGNvdW50ZXJzCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCksICgwLCAwKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX3RyYWNlcyhzZWxmKToKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMoMTIzKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyYWNlYmFjaykKKworICAgICAgICB0cmFjZW1hbGxvYy5jbGVhcl90cmFjZXMoKQorICAgICAgICB0cmFjZWJhY2syID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFjZWJhY2syKQorCisgICAgZGVmIHRlc3RfaXNfdHJhY2luZyhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90KHNlbGYpOgorICAgICAgICBvYmosIHNvdXJjZSA9IGFsbG9jYXRlX2J5dGVzKDEyMykKKworICAgICAgICAjIHRha2UgYSBzbmFwc2hvdAorICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorCisgICAgICAgICMgd3JpdGUgb24gZGlzaworICAgICAgICBzbmFwc2hvdC5kdW1wKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgICMgbG9hZCBmcm9tIGRpc2sKKyAgICAgICAgc25hcHNob3QyID0gdHJhY2VtYWxsb2MuU25hcHNob3QubG9hZChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDIudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisKKyAgICAgICAgIyB0cmFjZW1hbGxvYyBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdAorICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdCIpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9zYXZlX2F0dHIoc2VsZik6CisgICAgICAgICMgdGFrZSBhIHNuYXBzaG90IHdpdGggYSBuZXcgYXR0cmlidXRlCisgICAgICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgICAgIHNuYXBzaG90LnRlc3RfYXR0ciA9ICJuZXciCisgICAgICAgIHNuYXBzaG90LmR1bXAoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisKKyAgICAgICAgIyBsb2FkKCkgc2hvdWxkIHJlY3JlYXRlcyB0aGUgYXR0cmlidXRlCisgICAgICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QyLnRlc3RfYXR0ciwgIm5ldyIpCisKKyAgICBkZWYgZm9ya19jaGlsZChzZWxmKToKKyAgICAgICAgaWYgbm90IHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKToKKyAgICAgICAgICAgIHJldHVybiAyCisKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBpZiB0cmFjZWJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAzCisKKyAgICAgICAgIyBldmVyeXRoaW5nIGlzIGZpbmUKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICduZWVkIG9zLmZvcmsoKScpCisgICAgZGVmIHRlc3RfZm9yayhzZWxmKToKKyAgICAgICAgIyBjaGVjayB0aGF0IHRyYWNlbWFsbG9jIGlzIHN0aWxsIHdvcmtpbmcgYWZ0ZXIgZm9yaworICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgaWYgbm90IHBpZDoKKyAgICAgICAgICAgICMgY2hpbGQKKyAgICAgICAgICAgIGV4aXRjb2RlID0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gc2VsZi5mb3JrX2NoaWxkKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoZXhpdGNvZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwaWQyLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5XSUZFWElURUQoc3RhdHVzKSkKKyAgICAgICAgICAgIGV4aXRjb2RlID0gb3MuV0VYSVRTVEFUVVMoc3RhdHVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKworCitjbGFzcyBUZXN0U25hcHNob3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSA0MDAwCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc25hcHNob3Qoc2VsZik6CisgICAgICAgIHJhd190cmFjZXMgPSBbKDUsICgoJ2EucHknLCAyKSwpKV0KKworICAgICAgICB3aXRoIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYXMgc3RhY2s6CisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ2lzX3RyYWNpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPVRydWUpKQorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdnZXRfdHJhY2ViYWNrX2xpbWl0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT01KSkKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnX2dldF90cmFjZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPXJhd190cmFjZXMpKQorCisgICAgICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZWJhY2tfbGltaXQsIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzbmFwc2hvdC50cmFjZXMpLCAxKQorICAgICAgICAgICAgdHJhY2UgPSBzbmFwc2hvdC50cmFjZXNbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2Uuc2l6ZSwgNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRyYWNlLnRyYWNlYmFjayksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnRyYWNlYmFja1swXS5maWxlbmFtZSwgJ2EucHknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS50cmFjZWJhY2tbMF0ubGluZW5vLCAyKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX3RyYWNlcyhzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBmaWx0ZXIxID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiYi5weSIpCisgICAgICAgIGZpbHRlcjIgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImEucHkiLCAyKQorICAgICAgICBmaWx0ZXIzID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhLnB5IiwgNSkKKworICAgICAgICBvcmlnaW5hbF90cmFjZXMgPSBsaXN0KHNuYXBzaG90LnRyYWNlcy5fdHJhY2VzKQorCisgICAgICAgICMgZXhjbHVkZSBiLnB5CisgICAgICAgIHNuYXBzaG90MyA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKGZpbHRlcjEsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDMudHJhY2VzLl90cmFjZXMsIFsKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoNywgKCgnPHVua25vd24+JywgMCksKSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBmaWx0ZXJfdHJhY2VzKCkgbXVzdCBub3QgdG91Y2ggdGhlIG9yaWdpbmFsIHNuYXBzaG90CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QudHJhY2VzLl90cmFjZXMsIG9yaWdpbmFsX3RyYWNlcykKKworICAgICAgICAjIG9ubHkgaW5jbHVkZSB0d28gbGluZXMgb2YgYS5weQorICAgICAgICBzbmFwc2hvdDQgPSBzbmFwc2hvdDMuZmlsdGVyX3RyYWNlcygoZmlsdGVyMiwgZmlsdGVyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3Q0LnRyYWNlcy5fdHJhY2VzLCBbCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICBdKQorCisgICAgICAgICMgTm8gZmlsdGVyOiBqdXN0IGR1cGxpY2F0ZSB0aGUgc25hcHNob3QKKyAgICAgICAgc25hcHNob3Q1ID0gc25hcHNob3QuZmlsdGVyX3RyYWNlcygoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzbmFwc2hvdDUsIHNuYXBzaG90KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHNuYXBzaG90NS50cmFjZXMsIHNuYXBzaG90LnRyYWNlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdDUudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9saW5lKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfbGluZW5vKCc8dW5rbm93bj4nLCAwKQorICAgICAgICB0Yl9hXzIgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgMikKKyAgICAgICAgdGJfYV81ID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDUpCisgICAgICAgIHRiX2JfMSA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCAxKQorICAgICAgICB0Yl9jXzU3OCA9IHRyYWNlYmFja19saW5lbm8oJ2MucHknLCA1NzgpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSBhbmQgbGluZQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfMSwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSBhbmQgbGluZSAoMikKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCA1MDAyLCAyKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9jXzU3OCwgNDAwLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzIsIDMwLCAzKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIGRpZmYgcGVyIGZpbGUgYW5kIGxpbmUKKyAgICAgICAgc3RhdGlzdGljcyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2FfNSwgNTAwMiwgNTAwMCwgMiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2NfNTc4LCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2JfMSwgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiXzAsIDAsIC03LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2FfMiwgMzAsIDAsIDMsIDApLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfZmlsZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCc8dW5rbm93bj4nKQorICAgICAgICB0Yl9hID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdhLnB5JykKKyAgICAgICAgdGJfYiA9IHRyYWNlYmFja19maWxlbmFtZSgnYi5weScpCisgICAgICAgIHRiX2MgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2MucHknKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2IsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSAoMikKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hLCA1MDMyLCA1KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9jLCA0MDAsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZQorICAgICAgICBkaWZmID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9hLCA1MDMyLCA1MDAwLCA1LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYywgNDAwLCA0MDAsIDEsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9iLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfMCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X3RyYWNlYmFjayhzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorCisgICAgICAgICMgc3RhdHMgcGVyIGZpbGUKKyAgICAgICAgdGIxID0gdHJhY2ViYWNrKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkKKyAgICAgICAgdGIyID0gdHJhY2ViYWNrKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkKKyAgICAgICAgdGIzID0gdHJhY2ViYWNrKCgnYi5weScsIDEpKQorICAgICAgICB0YjQgPSB0cmFjZWJhY2soKCc8dW5rbm93bj4nLCAwKSkKKyAgICAgICAgc3RhdHMxID0gc25hcHNob3Quc3RhdGlzdGljcygndHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czEsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjMsIDY2LCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjEsIDMwLCAzKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjQsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMiwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZSAoMikKKyAgICAgICAgdGI1ID0gdHJhY2ViYWNrKCgnYy5weScsIDU3OCkpCisgICAgICAgIHN0YXRzMiA9IHNuYXBzaG90Mi5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMiwgNTAwMiwgMiksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGI1LCA0MDAsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMSwgMzAsIDMpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZQorICAgICAgICBkaWZmID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIyLCA1MDAyLCA1MDAwLCAyLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGI1LCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiMywgMCwgLTY2LCAwLCAtMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiNCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIxLCAzMCwgMCwgMywgMCksCisgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc25hcHNob3Quc3RhdGlzdGljcywgJ3RyYWNlYmFjaycsIGN1bXVsYXRpdmU9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2N1bXVsYXRpdmUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19maWxlbmFtZSgnPHVua25vd24+JykKKyAgICAgICAgdGJfYSA9IHRyYWNlYmFja19maWxlbmFtZSgnYS5weScpCisgICAgICAgIHRiX2IgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2IucHknKQorICAgICAgICB0Yl9hXzIgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgMikKKyAgICAgICAgdGJfYV81ID0gdHJhY2ViYWNrX2xpbmVubygnYS5weScsIDUpCisgICAgICAgIHRiX2JfMSA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCAxKQorICAgICAgICB0Yl9iXzQgPSB0cmFjZWJhY2tfbGluZW5vKCdiLnB5JywgNCkKKworICAgICAgICAjIHBlciBmaWxlCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnZmlsZW5hbWUnLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYiwgOTgsIDUpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHBlciBsaW5lCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0cywgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfMSwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2JfNCwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfNSwgMiwgMSksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF90cmFjZV9mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdHJhY2UgPSBzbmFwc2hvdC50cmFjZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHJhY2UpLCAnYS5weToyOiAxMCBCJykKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2UudHJhY2ViYWNrCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHRyYWNlYmFjayksICdhLnB5OjInKQorICAgICAgICBmcmFtZSA9IHRyYWNlYmFja1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmcmFtZSksICdhLnB5OjInKQorCisgICAgZGVmIHRlc3Rfc3RhdGlzdGljX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHN0YXQgPSBzdGF0c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYi5weToxOiBzaXplPTY2IEIsIGNvdW50PTEsIGF2ZXJhZ2U9NjYgQicpCisKKyAgICBkZWYgdGVzdF9zdGF0aXN0aWNfZGlmZl9mb3JtYXQoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2xpbmVubycpCisgICAgICAgIHN0YXQgPSBzdGF0c1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdGF0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYS5weTo1OiBzaXplPTUwMDIgQiAoKzUwMDAgQiksIGNvdW50PTIgKCsxKSwgYXZlcmFnZT0yNTAxIEInKQorCisKKworY2xhc3MgVGVzdEZpbHRlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSAyMDQ4CisKKyAgICBkZWYgdGVzdF9maWx0ZXJfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGRlZmF1bHQgdmFsdWVzCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5saW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBGYWxzZSkKKworICAgICAgICAjIHRlc3QgY3VzdG9tIHZhbHVlcworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAidGVzdC5weSIsIDEyMywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAidGVzdC5weSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIFRydWUpCisKKyAgICAgICAgIyBwYXJhbWV0ZXJzIHBhc3NlZCBieSBrZXl3b3JkCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlPUZhbHNlLCBmaWxlbmFtZV9wYXR0ZXJuPSJ0ZXN0LnB5IiwgbGluZW5vPTEyMywgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZpbGVuYW1lX3BhdHRlcm4sICJ0ZXN0LnB5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmxpbmVubywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgVHJ1ZSkKKworICAgICAgICAjIHJlYWQtb25seSBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIGYsICJmaWxlbmFtZV9wYXR0ZXJuIiwgImFiYyIpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2goc2VsZik6CisgICAgICAgICMgZmlsdGVyIHdpdGhvdXQgbGluZSBudW1iZXIKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciA+IDAKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImFiYyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciAwCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBkZWYgZm5tYXRjaChpbmNsdXNpdmUsIGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKFRydWUsICJhYmMiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiMTIzNTYiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiPHVua25vd24+IiwgImFiYyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChGYWxzZSwgImFiYyIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICIxMjM1NiIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICI8dW5rbm93bj4iLCAiYWJjIikpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfZmlsZW5hbWVfam9rZXIoc2VsZik6CisgICAgICAgIGRlZiBmbm1hdGNoKGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGZpbHRlciA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIDApCisKKyAgICAgICAgIyBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJyonKSkKKworICAgICAgICAjIG5vICoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnYWJjZCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdkZWYnKSkKKworICAgICAgICAjIGEqCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYSonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2IqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2FiY2QqJykpCisKKyAgICAgICAgIyBhKmIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhKmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2RjeCcsICdhKmN4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJiJywgJ2EqYycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2RjZScsICdhKmN4JykpCisKKyAgICAgICAgIyBhKmIqYworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjZGUnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2JkZWZlZycsICdhKmJkKmVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjZGQnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNiZGVmZWYnLCAnYSpiZCplZycpKQorCisgICAgICAgICMgcmVwbGFjZSAucHljIGFuZCAucHlvIHN1ZmZpeCB3aXRoIC5weQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weW8nLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5YycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FCQycsICdBQmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFlPJywgJ2EucHknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjYXNlIHNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FCY0RlJywgJ0FiKmRFJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHknLCAnYS5QWUMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgbm9ybWFsaXplIGFsdGVybmF0ZSBzZXBhcmF0b3IgIi8iIHRvIHRoZSBzdGFuZGFyZCBzZXBhcmF0b3IgIlwiCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYicsIHInYVxiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYlxjJywgcidhXGIvYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2IvYycsIHInYVxiXGMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlIHNlcGFyYXRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iJywgcidhXGInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2JcYycsIHInYVxiL2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYi9jJywgcidhXGJcYycpKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX3RyYWNlKHNlbGYpOgorICAgICAgICB0MSA9ICgoImEucHkiLCAyKSwgKCJiLnB5IiwgMykpCisgICAgICAgIHQyID0gKCgiYi5weSIsIDQpLCAoImIucHkiLCA1KSkKKyAgICAgICAgdDMgPSAoKCJjLnB5IiwgNSksICgnPHVua25vd24+JywgMCkpCisgICAgICAgIHVua25vd24gPSAoKCc8dW5rbm93bj4nLCAwKSwpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYi5weSIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisKK2NsYXNzIFRlc3RDb21tYW5kTGluZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW52X3ZhcihzZWxmKToKKyAgICAgICAgIyBub3QgdHJhY2luZyBieSBkZWZhdWx0CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidGYWxzZScpCisKKyAgICAgICAgIyBQWVRIT04qIGVudmlyb25tZW50IHZhcmlhYmxlcyBtdXN0IGJlIGlnbm9yZWQgd2hlbiAtRSBvcHRpb24gaXMKKyAgICAgICAgIyBwcmVzZW50CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgICAgICAjIHRyYWNpbmcgYXQgc3RhcnR1cAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMScpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidUcnVlJykKKworICAgICAgICAjIHN0YXJ0IGFuZCBzZXQgdGhlIG51bWJlciBvZiBmcmFtZXMKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXQoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgUFlUSE9OVFJBQ0VNQUxMT0M9JzEwJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJzEwJykKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfaW52YWxpZChzZWxmKToKKyAgICAgICAgZm9yIG5mcmFtZSBpbiAoLTEsIDAsIDIqKjMwKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICctYycsICdwYXNzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTlRSQUNFTUFMTE9DPXN0cihuZnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInUFlUSE9OVFJBQ0VNQUxMT0M6IGludmFsaWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIG9mIGZyYW1lcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyKQorCisgICAgZGVmIHRlc3Rfc3lzX3hvcHRpb25zKHNlbGYpOgorICAgICAgICBmb3IgeG9wdGlvbnMsIG5mcmFtZSBpbiAoCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jJywgMSksCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jPTEnLCAxKSwKKyAgICAgICAgICAgICgndHJhY2VtYWxsb2M9MTUnLCAxNSksCisgICAgICAgICk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh4b3B0aW9ucz14b3B0aW9ucywgbmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXQoKSknCisgICAgICAgICAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLVgnLCB4b3B0aW9ucywgJy1jJywgY29kZSkKKyAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgc3RyKG5mcmFtZSkuZW5jb2RlKCdhc2NpaScpKQorCisgICAgZGVmIHRlc3Rfc3lzX3hvcHRpb25zX2ludmFsaWQoc2VsZik6CisgICAgICAgIGZvciBuZnJhbWUgaW4gKC0xLCAwLCAyKiozMCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBhcmdzID0gKCctWCcsICd0cmFjZW1hbGxvYz0lcycgJSBuZnJhbWUsICctYycsICdwYXNzJykKKyAgICAgICAgICAgICAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCphcmdzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInLVggdHJhY2VtYWxsb2M9TkZSQU1FOiBpbnZhbGlkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBmcmFtZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRlc3RUcmFjZW1hbGxvY0VuYWJsZWQsCisgICAgICAgIFRlc3RTbmFwc2hvdCwKKyAgICAgICAgVGVzdEZpbHRlcnMsCisgICAgICAgIFRlc3RDb21tYW5kTGluZSwKKyAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CmluZGV4IDNlZTRjNmIuLmVjMTA3NTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMiw2ICsyLDcgQEAKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX3dpdGhfbG9jYWxlCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwpAQCAtMTA3Nyw5ICsxMDc4LDE5IEBACiAgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIG5zMi54ID0gInNwYW0iCiAgICAgICAgIG5zMi5feSA9IDUKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJuYW1lc3BhY2Uodz0zLCB4PTEsIHk9MikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIm5hbWVzcGFjZShfeT01LCB4PSdzcGFtJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgIntuYW1lfSh3PTMsIHg9MSwgeT0yKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCAie25hbWV9KF95PTUsIHg9J3NwYW0nKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisKKyAgICBkZWYgdGVzdF9lcXVhbChzZWxmKToKKyAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHg9MSkKKyAgICAgICAgbnMyID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKKyAgICAgICAgbnMyLnggPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMxLCBuczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMyLCB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKICAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGE9MSwgYj0yKQpAQCAtMTExNywxMSArMTEyOCwxMiBAQAogICAgICAgICBuczEuc3BhbSA9IG5zMQogICAgICAgICBuczIuc3BhbSA9IG5zMwogICAgICAgICBuczMuc3BhbSA9IG5zMgorICAgICAgICBuYW1lID0gIm5hbWVzcGFjZSIKKyAgICAgICAgcmVwcjEgPSAie25hbWV9KGM9J2Nvb2tpZScsIHNwYW09e25hbWV9KC4uLikpIi5mb3JtYXQobmFtZT1uYW1lKQorICAgICAgICByZXByMiA9ICJ7bmFtZX0oc3BhbT17bmFtZX0oc3BhbT17bmFtZX0oLi4uKSwgeD0xKSkiLmZvcm1hdChuYW1lPW5hbWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzcGFjZShjPSdjb29raWUnLCBzcGFtPW5hbWVzcGFjZSguLi4pKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2UoLi4uKSwgeD0xKSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgcmVwcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCByZXByMikKIAogICAgIGRlZiB0ZXN0X2FzX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHNwYW09J3NwYW1zcGFtc3BhbScpCkBAIC0xMTQ0LDYgKzExNTYsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHNwYW0pLCBTcGFtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc3BhbSksIHsnaGFtJzogOCwgJ2VnZ3MnOiA5fSkKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgbnMgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoYnJlYWtmYXN0PSJzcGFtIiwgbHVuY2g9InNwYW0iKQorCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcG5hbWUgPSAicHJvdG9jb2wge30iLmZvcm1hdChwcm90b2NvbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuc19waWNrbGVkID0gcGlja2xlLmR1bXBzKG5zLCBwcm90b2NvbCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocG5hbWUpIGZyb20gZQorICAgICAgICAgICAgbnNfcm91bmR0cmlwID0gcGlja2xlLmxvYWRzKG5zX3BpY2tsZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIG5zX3JvdW5kdHJpcCwgcG5hbWUpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUeXBlc1Rlc3RzLCBNYXBwaW5nUHJveHlUZXN0cywgQ2xhc3NDcmVhdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91Y24ucHkgYi9MaWIvdGVzdC90ZXN0X3Vjbi5weQppbmRleCAyZTYzNzQ1Li41OWJkZTc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Vjbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Vjbi5weQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RkYXRhID0gc3VwcG9ydC5vcGVuX3VybHJlc291cmNlKHVybCwgZW5jb2Rpbmc9InV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIHVybCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3RkYXRhLmNsb3NlKQogICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCA1MDJkMzkzLi41NzVjNGE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC03LDYgKzcsNyBAQAogIiIiIyIKIGltcG9ydCBfc3RyaW5nCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTMxLDYgKzMyLDE2IEBACiAgICAgICAgIHJldHVybiBOb25lCiBjb2RlY3MucmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQogCitkZWYgZHVwbGljYXRlX3N0cmluZyh0ZXh0KToKKyAgICAiIiIKKyAgICBUcnkgdG8gZ2V0IGEgZnJlc2ggY2xvbmUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0OgorICAgIG5ldyBvYmplY3Qgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgorCisgICAgVGhpcyBpcyBhIGJlc3QtZWZmb3J0OiBsYXRpbjEgc2luZ2xlIGxldHRlcnMgYW5kIHRoZSBlbXB0eQorICAgIHN0cmluZyAoJycpIGFyZSBzaW5nbGV0b25zIGFuZCBjYW5ub3QgYmUgY2xvbmVkLgorICAgICIiIgorICAgIHJldHVybiB0ZXh0LmVuY29kZSgpLmRlY29kZSgpCisKIGNsYXNzIFVuaWNvZGVUZXN0KHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVXNlclN0cmluZ1Rlc3QsCiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVUZXN0LApAQCAtODYzLDExICs4NzQsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpkfScuZm9ybWF0KEcoJ2RhdGEnKSksICdHKGRhdGEpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezAhc30nLmZvcm1hdChHKCdkYXRhJykpLCAnc3RyaW5nIGlzIGRhdGEnKQogCi0gICAgICAgIG1zZyA9ICdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMgZGVwcmVjYXRlZCcKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKChtc2csIERlcHJlY2F0aW9uV2FybmluZykpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6XjEwfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMHN9Jy5mb3JtYXQsIEUoJ2RhdGEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnezA6PjE1c30nLmZvcm1hdCwgRygnZGF0YScpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInswOmRhdGU6ICVZLSVtLSVkfSIuZm9ybWF0KEkoeWVhcj0yMDA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoPTgsCkBAIC05MDMsNyArOTEyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswIi5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7MC59Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC59Ii5mb3JtYXQsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICJ7MFt9Ii5mb3JtYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFt9Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MFt9Ii5mb3JtYXQsIFtdKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgICAiezBdfSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAuW119Ii5mb3JtYXQsIDApCkBAIC05NTUsNiArOTY0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSI6IDV9KSwgIjUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3t9XX0iLmZvcm1hdCh7Int9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe119Ii5mb3JtYXQoeyJ7IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbfV19Ii5mb3JtYXQoeyJ9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbW119Ii5mb3JtYXQoeyJbIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbIV19Ii5mb3JtYXQoeyIhIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXt9Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXtifSIuZm9ybWF0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIntbfSIuZm9ybWF0LCA0MikKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIweHs6MHs6ZH1YfSIuZm9ybWF0KDB4MCwxNiksICIweDAwMDAwMDAwMDAwMDAwMDAiKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0X21hcChzZWxmKToKQEAgLTExMDgsNiArMTEyNiwzOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclLjFzJyAlICJhXHhlOVx1MjBhYyIsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4ycycgJSAiYVx4ZTlcdTIwYWMiLCAnYVx4ZTknKQogCisgICAgZGVmIHRlc3RfZm9ybWF0dGluZ193aXRoX2VudW0oc2VsZik6CisgICAgICAgICMgaXNzdWUxODc4MAorICAgICAgICBpbXBvcnQgZW51bQorICAgICAgICBjbGFzcyBGbG9hdChmbG9hdCwgZW51bS5FbnVtKToKKyAgICAgICAgICAgIFBJID0gMy4xNDE1OTI2CisgICAgICAgIGNsYXNzIEludChlbnVtLkludEVudW0pOgorICAgICAgICAgICAgSURFUyA9IDE1CisgICAgICAgIGNsYXNzIFN0cihzdHIsIGVudW0uRW51bSk6CisgICAgICAgICAgICBBQkMgPSAnYWJjJworICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBmb3JtYXR0aW5nIHN0cmluZ3MuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiJXMsICVzIiAlIChTdHIuQUJDLCBTdHIuQUJDKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU3RyLkFCQywgU3RyLkFCQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcywgJWQsICVpLCAldSwgJWYsICU1LjJmIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAoU3RyLkFCQywgU3RyLkFCQywKKyAgICAgICAgICAgICAgICAgICAgICAgICBJbnQuSURFUywgSW50LklERVMsIEludC5JREVTLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0LlBJLCBGbG9hdC5QSSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMsIDE1LCAxNSwgMTUsIDMuMTQxNTkzLCAgMy4xNCcpCisKKyAgICAgICAgIyBmb3JtYXR0aW5nIGpvYnMgZGVsZWdhdGVkIGZyb20gdGhlIHN0cmluZyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6U3RyLkFCQ30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLlN0ci5BQkMuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylzLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLkludC5JREVTLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28paS4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4xNS4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWQuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbyl1Li4uJyAlIHsnZm9vJzpJbnQuSURFUywgJ2RlZic6RmxvYXQuUEl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4xNS4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWYuLi4nICUgeydmb28nOkZsb2F0LlBJLCdkZWYnOjEyM30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjMuMTQxNTkzLi4uJykKKwogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfaHVnZV9wcmVjaXNpb24oc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBJTlRfTUFYCkBAIC0xNzgzLDEwICsxODMzLDEwIEBACiAgICAgICAgICMgMC0xMjcKICAgICAgICAgcyA9IGJ5dGVzKHJhbmdlKDEyOCkpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoCi0gICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywKKyAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLCAnY3AyNzMnLAogICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKICAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCi0gICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLAorICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwMTEyNScsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfMycsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywgJ2lzbzg4NTlfNicsCiAgICAgICAgICAgICAnaXNvODg1OV83JywgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCkBAIC0xODExLDEwICsxODYxLDEwIEBACiAgICAgICAgICMgMTI4LTI1NQogICAgICAgICBzID0gYnl0ZXMocmFuZ2UoMTI4LCAyNTYpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAotICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCisgICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywgJ2NwMjczJywKICAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCiAgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDExMjUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMTAnLCAnaXNvODg1OV8xMycsICdpc284ODU5XzE0JywgJ2lzbzg4NTlfMTUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfMicsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywKICAgICAgICAgICAgICdpc284ODU5XzknLCAna29pOF9yJywgJ2xhdGluXzEnLApAQCAtMjAwNSw5ICsyMDU1LDEwIEBACiAgICAgIyBUZXN0IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkKICAgICBkZWYgdGVzdF9mcm9tX2Zvcm1hdChzZWxmKToKICAgICAgICAgc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjdHlwZXMnKQotICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgKHB5dGhvbmFwaSwgcHlfb2JqZWN0LAorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgKAorICAgICAgICAgICAgcHl0aG9uYXBpLCBweV9vYmplY3QsIHNpemVvZiwKICAgICAgICAgICAgIGNfaW50LCBjX2xvbmcsIGNfbG9uZ2xvbmcsIGNfc3NpemVfdCwKLSAgICAgICAgICAgIGNfdWludCwgY191bG9uZywgY191bG9uZ2xvbmcsIGNfc2l6ZV90KQorICAgICAgICAgICAgY191aW50LCBjX3Vsb25nLCBjX3Vsb25nbG9uZywgY19zaXplX3QsIGNfdm9pZF9wKQogICAgICAgICBuYW1lID0gIlB5VW5pY29kZV9Gcm9tRm9ybWF0IgogICAgICAgICBfUHlVbmljb2RlX0Zyb21Gb3JtYXQgPSBnZXRhdHRyKHB5dGhvbmFwaSwgbmFtZSkKICAgICAgICAgX1B5VW5pY29kZV9Gcm9tRm9ybWF0LnJlc3R5cGUgPSBweV9vYmplY3QKQEAgLTIwMTgsOSArMjA2OSwxMyBAQAogICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gYXJncykKICAgICAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0Zyb21Gb3JtYXQoZm9ybWF0LCAqY2FyZ3MpCiAKKyAgICAgICAgZGVmIGNoZWNrX2Zvcm1hdChleHBlY3RlZCwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoZm9ybWF0LCAqYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHRleHQpCisKICAgICAgICAgIyBhc2NpaSBmb3JtYXQsIG5vbi1hc2NpaSBhcmd1bWVudAotICAgICAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoYidhc2NpaVx4N2Y9JVUnLCAndW5pY29kZVx4ZTknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdhc2NpaVx4N2Y9dW5pY29kZVx4ZTknKQorICAgICAgICBjaGVja19mb3JtYXQoJ2FzY2lpXHg3Zj11bmljb2RlXHhlOScsCisgICAgICAgICAgICAgICAgICAgICBiJ2FzY2lpXHg3Zj0lVScsICd1bmljb2RlXHhlOScpCiAKICAgICAgICAgIyBub24tYXNjaWkgZm9ybWF0LCBhc2NpaSBhcmd1bWVudDogZW5zdXJlIHRoYXQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkKICAgICAgICAgIyByYWlzZXMgYW4gZXJyb3IKQEAgLTIwMzAsNjQgKzIwODUsMjA1IEBACiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdCwgYid1bmljb2RlXHhlOT0lcycsICdhc2NpaScpCiAKICAgICAgICAgIyB0ZXN0ICIlYyIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHhhYmNkKSksICdcdWFiY2QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWMnLCBjX2ludCgweDEwZmZmZikpLCAnXFUwMDEwZmZmZicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXHVhYmNkJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWMnLCBjX2ludCgweGFiY2QpKQorICAgICAgICBjaGVja19mb3JtYXQoJ1xVMDAxMGZmZmYnLAorICAgICAgICAgICAgICAgICAgICAgYiclYycsIGNfaW50KDB4MTBmZmZmKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yKToKICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWMnLCBjX2ludCgweDExMDAwMCkpCiAgICAgICAgICMgSXNzdWUgIzE4MTgzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJWMnLCBjX2ludCgweDEwMDAwKSwgY19pbnQoMHgxMDAwMDApKSwKLSAgICAgICAgICAgICdcVTAwMDEwMDAwXFUwMDEwMDAwMCcpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnXFUwMDAxMDAwMFxVMDAxMDAwMDAnLAorICAgICAgICAgICAgICAgICAgICAgYiclYyVjJywgY19pbnQoMHgxMDAwMCksIGNfaW50KDB4MTAwMDAwKSkKIAogICAgICAgICAjIHRlc3QgIiUiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclJyksICclJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlJyksICclJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlcycpLCAnJXMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInWyUlXScpLCAnWyVdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUlJXMnLCBiJ2FiYycpLCAnJWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJScsCisgICAgICAgICAgICAgICAgICAgICBiJyUnKQorICAgICAgICBjaGVja19mb3JtYXQoJyUnLAorICAgICAgICAgICAgICAgICAgICAgYiclJScpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclJXMnKQorICAgICAgICBjaGVja19mb3JtYXQoJ1slXScsCisgICAgICAgICAgICAgICAgICAgICBiJ1slJV0nKQorICAgICAgICBjaGVja19mb3JtYXQoJyVhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclJSVzJywgYidhYmMnKQorCisgICAgICAgICMgdHJ1bmNhdGVkIHN0cmluZworICAgICAgICBjaGVja19mb3JtYXQoJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM3MnLCBiJ2FiY2RlZicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNXMnLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVBJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1xcdTIwIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJS41QScsICdcdTIwYWNBQkNERUYnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcdTIwYWNBQkMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJVInLCAnXHUyMGFjQUJDJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQSIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1InLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1MnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1UnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1YnLCAnXHUyMGFjQUJDREVGJywgTm9uZSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmNbXHVmZmZkJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS41VicsIE5vbmUsICdhYmNbXHUyMGFjXScuZW5jb2RlKCd1dGY4JykpCisKKyAgICAgICAgIyBmb2xsb3dpbmcgdGVzdHMgY29tZXMgZnJvbSAjNzMzMAorICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVTCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVTJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yUycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJTJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4UicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNSJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM1InLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVBCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICAnYWJjJyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JThBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0nYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuM0EnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgJ2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4zQScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJXMKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNXMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4ycycsIGInYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4ycycsIGInYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVVCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVVJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJVJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAxMjMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPTEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjJWJywgTm9uZSwgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgMTIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgTm9uZSwgYicxMjMnKQogCiAgICAgICAgICMgdGVzdCBpbnRlZ2VyIGZvcm1hdHMgKCVpLCAlZCwgJXUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMDNpJywgY19pbnQoMTApKSwgJzAxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclMC40aScsIGNfaW50KDEwKSksICcwMDEwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVpJywgY19pbnQoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclbGknLCBjX2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclbGxpJywgY19sb25nbG9uZygtMTIzKSksICctMTIzJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyV6aScsIGNfc3NpemVfdCgtMTIzKSksICctMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcwMTAnLAorICAgICAgICAgICAgICAgICAgICAgYiclMDNpJywgY19pbnQoMTApKQorICAgICAgICBjaGVja19mb3JtYXQoJzAwMTAnLAorICAgICAgICAgICAgICAgICAgICAgYiclMC40aScsIGNfaW50KDEwKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWknLCBjX2ludCgtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxpJywgY19sb25nKC0xMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJy0xMjMnLAorICAgICAgICAgICAgICAgICAgICAgYiclbGxpJywgY19sb25nbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJXppJywgY19zc2l6ZV90KC0xMjMpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclZCcsIGNfaW50KC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxkJywgY19sb25nKC0xMjMpKSwgJy0xMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWxsZCcsIGNfbG9uZ2xvbmcoLTEyMykpLCAnLTEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclemQnLCBjX3NzaXplX3QoLTEyMykpLCAnLTEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVkJywgY19pbnQoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsZCcsIGNfbG9uZygtMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCctMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsZCcsIGNfbG9uZ2xvbmcoLTEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnLTEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6ZCcsIGNfc3NpemVfdCgtMTIzKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXUnLCBjX3VpbnQoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJWx1JywgY191bG9uZygxMjMpKSwgJzEyMycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclbGx1JywgY191bG9uZ2xvbmcoMTIzKSksICcxMjMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJXp1JywgY19zaXplX3QoMTIzKSksICcxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJywKKyAgICAgICAgICAgICAgICAgICAgIGInJWx1JywgY191bG9uZygxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyVsbHUnLCBjX3Vsb25nbG9uZygxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycsCisgICAgICAgICAgICAgICAgICAgICBiJyV6dScsIGNfc2l6ZV90KDEyMykpCisKKyAgICAgICAgIyB0ZXN0IGxvbmcgb3V0cHV0CisgICAgICAgIG1pbl9sb25nbG9uZyA9IC0oMiAqKiAoOCAqIHNpemVvZihjX2xvbmdsb25nKSAtIDEpKQorICAgICAgICBtYXhfbG9uZ2xvbmcgPSAtbWluX2xvbmdsb25nIC0gMQorICAgICAgICBjaGVja19mb3JtYXQoc3RyKG1pbl9sb25nbG9uZyksCisgICAgICAgICAgICAgICAgICAgICBiJyVsbGQnLCBjX2xvbmdsb25nKG1pbl9sb25nbG9uZykpCisgICAgICAgIGNoZWNrX2Zvcm1hdChzdHIobWF4X2xvbmdsb25nKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsZCcsIGNfbG9uZ2xvbmcobWF4X2xvbmdsb25nKSkKKyAgICAgICAgbWF4X3Vsb25nbG9uZyA9IDIgKiogKDggKiBzaXplb2YoY191bG9uZ2xvbmcpKSAtIDEKKyAgICAgICAgY2hlY2tfZm9ybWF0KHN0cihtYXhfdWxvbmdsb25nKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJWxsdScsIGNfdWxvbmdsb25nKG1heF91bG9uZ2xvbmcpKQorICAgICAgICBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVwJywgY192b2lkX3AoLTEpKQorCisgICAgICAgICMgdGVzdCBwYWRkaW5nICh3aWR0aCBhbmQvb3IgcHJlY2lzaW9uKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUwMTBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODBpJywgY19pbnQoMTIzKSkKKworICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAsICcwJyksCisgICAgICAgICAgICAgICAgICAgICBiJyUwMTB1JywgY191aW50KDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclLjEwMHUnLCBjX3VpbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODB1JywgY191aW50KDEyMykpCisKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclMDEweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCisgICAgICAgICAgICAgICAgICAgICBiJyUxMDB4JywgY19pbnQoMHgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclLjEwMHgnLCBjX2ludCgweDEyMykpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCg4MCwgJzAnKS5yanVzdCgxMDApLAorICAgICAgICAgICAgICAgICAgICAgYiclMTAwLjgweCcsIGNfaW50KDB4MTIzKSkKIAogICAgICAgICAjIHRlc3QgJUEKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJSVBOiVBJywgJ2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCByIiVBOidhYmNceGU5XHVhYmNkXFUwMDEwZmZmZiciKQorICAgICAgICBjaGVja19mb3JtYXQociIlQTonYWJjXHhlOVx1YWJjZFxVMDAxMGZmZmYnIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJSVBOiVBJywgJ2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJykKIAogICAgICAgICAjIHRlc3QgJVYKLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsICdhYmMnLCBiJ3h5eicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgJ3JlcHI9YWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdyZXByPWFiYycsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQogCiAgICAgICAgICMgVGVzdCBzdHJpbmcgZGVjb2RlIGZyb20gcGFyYW1ldGVyIG9mICVzIHVzaW5nIHV0Zi04LgogICAgICAgICAjIGInXHhlNFx4YmFceGJhXHhlNlx4YjBceDkxJyBpcyB1dGYtOCBlbmNvZGVkIGJ5dGUgc2VxdWVuY2Ugb2YKICAgICAgICAgIyAnXHU0ZWJhXHU2YzExJwotICAgICAgICB0ZXh0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoYidyZXByPSVWJywgTm9uZSwgYidceGU0XHhiYVx4YmFceGU2XHhiMFx4OTEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPVx1NGViYVx1NmMxMScpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgncmVwcj1cdTRlYmFcdTZjMTEnLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVWJywgTm9uZSwgYidceGU0XHhiYVx4YmFceGU2XHhiMFx4OTEnKQogCiAgICAgICAgICNUZXN0IHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KLSAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGIncmVwcj0lVicsIE5vbmUsIGInYWJjXHhmZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgJ3JlcHI9YWJjXHVmZmZkJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdyZXByPWFiY1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQogCiAgICAgICAgICMgbm90IHN1cHBvcnRlZDogY29weSB0aGUgcmF3IGZvcm1hdCBzdHJpbmcuIHRoZXNlIHRlc3RzIGFyZSBqdXN0IGhlcmUKICAgICAgICAgIyB0byBjaGVjayBmb3IgY3Jhc2hzIGFuZCBzaG91bGQgbm90IGJlIGNvbnNpZGVyZWQgYXMgc3BlY2lmaWNhdGlvbnMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUxJXMnLCBiJ2FiYycpLCAnJXMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJTFhYmMnKSwgJyUxYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyUraScsIGNfaW50KDEwKSksICclK2knKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJS4lcycsIGInYWJjJyksICclLiVzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCclcycsCisgICAgICAgICAgICAgICAgICAgICBiJyUxJXMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJTFhYmMnLAorICAgICAgICAgICAgICAgICAgICAgYiclMWFiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnJStpJywKKyAgICAgICAgICAgICAgICAgICAgIGInJStpJywgY19pbnQoMTApKQorICAgICAgICBjaGVja19mb3JtYXQoJyUuJXMnLAorICAgICAgICAgICAgICAgICAgICAgYiclLiVzJywgYidhYmMnKQogCiAgICAgIyBUZXN0IFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkKICAgICBkZWYgdGVzdF9hc3dpZGVjaGFyKHNlbGYpOgpAQCAtMjIxMSw2ICsyNDA3LDgwIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhYmMsIGFiY2RlZikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFiY2RlZi5kZWNvZGUoJ3VuaWNvZGVfaW50ZXJuYWwnKSwgdGV4dCkKIAorICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3NjE1CisgICAgICAgIE4gPSAxMAorICAgICAgICBhc2NpaSA9ICdhJyAqIE4KKyAgICAgICAgYXNjaWkyID0gJ3onICogTgorICAgICAgICBsYXRpbiA9ICdceDgwJyAqIE4KKyAgICAgICAgbGF0aW4yID0gJ1x4ZmYnICogTgorICAgICAgICBibXAgPSAnXHUwMTAwJyAqIE4KKyAgICAgICAgYm1wMiA9ICdcdWZmZmYnICogTgorICAgICAgICBhc3RyYWwgPSAnXFUwMDEwMDAwMCcgKiBOCisgICAgICAgIGFzdHJhbDIgPSAnXFUwMDEwZmZmZicgKiBOCisgICAgICAgIHN0cmluZ3MgPSAoCisgICAgICAgICAgICBhc2NpaSwgYXNjaWkyLAorICAgICAgICAgICAgbGF0aW4sIGxhdGluMiwKKyAgICAgICAgICAgIGJtcCwgYm1wMiwKKyAgICAgICAgICAgIGFzdHJhbCwgYXN0cmFsMikKKyAgICAgICAgZm9yIHRleHQxLCB0ZXh0MiBpbiBpdGVydG9vbHMuY29tYmluYXRpb25zKHN0cmluZ3MsIDIpOgorICAgICAgICAgICAgZXF1YWwgPSAodGV4dDEgaXMgdGV4dDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxID09IHRleHQyLCBlcXVhbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dDEgIT0gdGV4dDIsIG5vdCBlcXVhbCkKKworICAgICAgICAgICAgaWYgZXF1YWw6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRleHQxIDw9IHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA+PSB0ZXh0MikKKworICAgICAgICAgICAgICAgICMgdGV4dDEgaXMgdGV4dDI6IGR1cGxpY2F0ZSBzdHJpbmdzIHRvIHNraXAgdGhlICJzdHIxID09IHN0cjIiCisgICAgICAgICAgICAgICAgIyBvcHRpbWl6YXRpb24gaW4gdW5pY29kZV9jb21wYXJlX2VxKCkgYW5kIHJlYWxseSBjb21wYXJlCisgICAgICAgICAgICAgICAgIyBjaGFyYWN0ZXIgcGVyIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgIGNvcHkxID0gZHVwbGljYXRlX3N0cmluZyh0ZXh0MSkKKyAgICAgICAgICAgICAgICBjb3B5MiA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjb3B5MSwgY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPT0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb3B5MSAhPSBjb3B5MikKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5MSA8PSBjb3B5MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTIgPj0gY29weTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXNjaWkyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNjaWkgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYm1wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNjaWkgPCBhc3RyYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXNjaWkyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA8IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBsYXRpbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPj0gYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShibXAgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShibXAgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJtcCA8IGJtcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBhc3RyYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPj0gYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPj0gbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wID49IGJtcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wID49IGFzdHJhbCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA8IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA8IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA8IGJtcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3RyYWwgPCBhc3RyYWwyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsID49IGJtcDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN0cmFsID49IGFzdHJhbDIpCisKIAogY2xhc3MgU3RyaW5nTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZm9ybWF0dGVyX3BhcnNlcihzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CmluZGV4IDk5YWEwMDMuLjcwN2IzMGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQpAQCAtMjEsNyArMjEsNyBAQAogY2xhc3MgVW5pY29kZU1ldGhvZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdiZjdhNzhmMWE1MzI0MjFiNTAzMzYwMDEwMmUyM2E5MjA0NGRiYmE5JworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnZTc0ZTg3OGRlNzFiNmU3ODBmZmFjMjcxNzg1YzNjYjU4ZjYyNTFmMycKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jaGVja3N1bShzZWxmKToKICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCkBAIC04MCw3ICs4MCw3IEBACiBjbGFzcyBVbmljb2RlRnVuY3Rpb25zVGVzdChVbmljb2RlRGF0YWJhc2VUZXN0KToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICcxN2ZlMmYxMmI3ODhlNGZmZjU0NzliNDY5YzQ0MDRiYjZlY2Y4NDFmJworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnZjBiNzRkMjY3NzYzMzFjYzdiZGMzYTQ2OThmMDM3ZDczZjJjZWUyYicKICAgICBkZWYgdGVzdF9mdW5jdGlvbl9jaGVja3N1bShzZWxmKToKICAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgIGggPSBoYXNobGliLnNoYTEoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQppbmRleCA3YTM0YTA1Li45NGY2NDBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYi5weQpAQCAtMTYsNiArMTYsNyBAQAogZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQogaW1wb3J0IGNvbGxlY3Rpb25zCiAKKwogZGVmIGhleGVzY2FwZShjaGFyKToKICAgICAiIiJFc2NhcGUgY2hhciBhcyBSRkMgMjM5NiBzcGVjaWZpZXMiIiIKICAgICBoZXhfcmVwciA9IGhleChvcmQoY2hhcikpWzI6XS51cHBlcigpCkBAIC0yMzgsNyArMjM5LDcgQEAKICAgICAgICAgc2VsZi5jaGVja19yZWFkKGIiMS4xIikKIAogICAgIGRlZiB0ZXN0X3JlYWRfYm9ndXMoc2VsZik6Ci0gICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBJT0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgorICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgT1NFcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycnSFRUUC8xLjEgNDAxIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkCiBEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAogU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQpAQCAtMjQ2LDEyICsyNDcsMTIgQEAKIENvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKICcnJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB1cmxvcGVuLCAiaHR0cDovL3B5dGhvbi5vcmcvIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkX3JlZGlyZWN0KHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDMwMiBGb3VuZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI2NiwxOSArMjY3LDIwIEBACiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfc29ja2V0KHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSByYWlzZXMgSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgZG9lcyBub3Qgc2VuZCBhbnkKKyAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIE9TRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CiAgICAgICAgICMgZGF0YS4gKCMxNjgwMjMwKQogICAgICAgICBzZWxmLmZha2VodHRwKGInJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9zb21ldGhpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9zb21ldGhpbmciKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X21pc3NpbmdfbG9jYWxmaWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yICMxMDgzNgotICAgICAgICAjIDMuMyAtIFVSTEVycm9yIGlzIG5vdCBjYXB0dXJlZCwgZXhwbGljaXQgSU9FcnJvciBpcyByYWlzZWQuCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yKSBhcyBlOgogICAgICAgICAgICAgdXJsb3BlbignZmlsZTovL2xvY2FsaG9zdC9hL2ZpbGUvd2hpY2gvZG9lc25vdC9leGlzdHMucHknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24uZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmV4Y2VwdGlvbi5yZWFzb24pCiAKICAgICBkZWYgdGVzdF9maWxlX25vdGV4aXN0cyhzZWxmKToKICAgICAgICAgZmQsIHRtcF9maWxlID0gdGVtcGZpbGUubWtzdGVtcCgpCkBAIC0yOTEsMjAgKzI5MywyMSBAQAogICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgICAgICBvcy51bmxpbmsodG1wX2ZpbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHModG1wX2ZpbGUpKQotICAgICAgICAjIDMuMyAtIElPRXJyb3IgaW5zdGVhZCBvZiBVUkxFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcik6CiAgICAgICAgICAgICB1cmxvcGVuKHRtcF9maWxldXJsKQogCiAgICAgZGVmIHRlc3RfZnRwX25vaG9zdChzZWxmKToKICAgICAgICAgdGVzdF9mdHBfdXJsID0gJ2Z0cDovLy9wYXRoJwotICAgICAgICAjIDMuMyAtIElPRXJyb3IgaW5zdGVhZCBvZiBVUkxFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4odGVzdF9mdHBfdXJsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZnRwX25vbmV4aXN0aW5nKHNlbGYpOgotICAgICAgICAjIDMuMyAtIElPRXJyb3IgaW5zdGVhZCBvZiBVUkxFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2Z0cDovL2xvY2FsaG9zdC9hL2ZpbGUvd2hpY2gvZG9lc25vdC9leGlzdHMucHknKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAKICAgICBkZWYgdGVzdF91c2VycGFzc19pbnVybChzZWxmKToKQEAgLTM0MSw2ICszNDQsNzkgQEAKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJyxEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lcigpCiAKK2NsYXNzIHVybG9wZW5fRGF0YVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVybG9wZW4oKSBvcGVuaW5nIGEgZGF0YSBVUkwuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgdGV4dCBjb250YWluaW5nIFVSTCBzcGVjaWFsLSBhbmQgdW5pY29kZS1jaGFyYWN0ZXJzCisgICAgICAgIHNlbGYudGV4dCA9ICJ0ZXN0IGRhdGEgVVJMcyA6OywlPSYgXHUwMGY2IFx1MDBjNCAiCisgICAgICAgICMgMngxIHBpeGVsIFJHQiBQTkcgaW1hZ2Ugd2l0aCBvbmUgYmxhY2sgYW5kIG9uZSB3aGl0ZSBwaXhlbAorICAgICAgICBzZWxmLmltYWdlID0gKAorICAgICAgICAgICAgYidceDg5UE5HXHJcblx4MWFcblx4MDBceDAwXHgwMFxySUhEUlx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFx4MDAnCisgICAgICAgICAgICBiJ1x4MDFceDA4XHgwMlx4MDBceDAwXHgwMHtAXHhlOFx4ZGRceDAwXHgwMFx4MDBceDAxc1JHQlx4MDBceGFlJworICAgICAgICAgICAgYidceGNlXHgxY1x4ZTlceDAwXHgwMFx4MDBceDBmSURBVFx4MDhceGQ3Y2BgYFx4ZjhceGZmXHhmZj9ceDAwJworICAgICAgICAgICAgYidceDA2XHgwMVx4MDJceGZlXG5vL1x4MWVceDAwXHgwMFx4MDBceDAwSUVORFx4YWVCYFx4ODInKQorCisgICAgICAgIHNlbGYudGV4dF91cmwgPSAoCisgICAgICAgICAgICAiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgsdGVzdCUyMGRhdGElMjBVUkxzJTIwJTNBJTNCJTJDJTI1JTMiCisgICAgICAgICAgICAiRCUyNiUyMCVDMyVCNiUyMCVDMyU4NCUyMCIpCisgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0ID0gKAorICAgICAgICAgICAgImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PUlTTy04ODU5LTE7YmFzZTY0LGRHVnpkQ0JrWVhSaElGVlNUSE1nT2pzIgorICAgICAgICAgICAgInNKVDBtSVBZZ3hDQSUzRCIpCisgICAgICAgICMgYmFzZTY0IGVuY29kZWQgZGF0YSBVUkwgdGhhdCBjb250YWlucyBpZ25vcmFibGUgc3BhY2VzLAorICAgICAgICAjIHN1Y2ggYXMgIlxuIiwgIiAiLCAiJTBBIiwgYW5kICIlMjAiLgorICAgICAgICBzZWxmLmltYWdlX3VybCA9ICgKKyAgICAgICAgICAgICJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFJQUFBQUJDQUlBQUFCN1xuIgorICAgICAgICAgICAgIlFPamRBQUFBQVhOU1IwSUFyczRjNlFBQUFBOUpSRUZVQ05kaiUwQVlHQmclMkJQLy9Qd0FHQVFMJTJCQ204ICIKKyAgICAgICAgICAgICJ2SGdBQUFBQkpSVTVFcmtKZ2dnJTNEJTNEJTBBJTIwIikKKworICAgICAgICBzZWxmLnRleHRfdXJsX3Jlc3AgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHNlbGYudGV4dF91cmwpCisgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKAorICAgICAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQpCisgICAgICAgIHNlbGYuaW1hZ2VfdXJsX3Jlc3AgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHNlbGYuaW1hZ2VfdXJsKQorCisgICAgZGVmIHRlc3RfaW50ZXJmYWNlKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBvYmplY3QgcmV0dXJuZWQgYnkgdXJsb3BlbigpIGhhcyB0aGUgc3BlY2lmaWVkIG1ldGhvZHMKKyAgICAgICAgZm9yIGF0dHIgaW4gKCJyZWFkIiwgInJlYWRsaW5lIiwgInJlYWRsaW5lcyIsCisgICAgICAgICAgICAgICAgICAgICAiY2xvc2UiLCAiaW5mbyIsICJnZXR1cmwiLCAiZ2V0Y29kZSIsICJfX2l0ZXJfXyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2VsZi50ZXh0X3VybF9yZXNwLCBhdHRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5IHVybG9wZW4oKSBsYWNrcyAlcyBhdHRyaWJ1dGUiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyKQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGV4dF91cmxfcmVzcC5pbmZvKCksIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmluZm8oKS5nZXRfcGFyYW1zKCksCisgICAgICAgICAgICBbKCd0ZXh0L3BsYWluJywgJycpLCAoJ2NoYXJzZXQnLCAnSVNPLTg4NTktMScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmltYWdlX3VybF9yZXNwLmluZm8oKVsnY29udGVudC1sZW5ndGgnXSwKKyAgICAgICAgICAgIHN0cihsZW4oc2VsZi5pbWFnZSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImRhdGE6LCIpLmluZm8oKS5nZXRfcGFyYW1zKCksCisgICAgICAgICAgICBbKCd0ZXh0L3BsYWluJywgJycpLCAoJ2NoYXJzZXQnLCAnVVMtQVNDSUknKV0pCisKKyAgICBkZWYgdGVzdF9nZXR1cmwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9yZXNwLmdldHVybCgpLCBzZWxmLnRleHRfdXJsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuZ2V0dXJsKCksCisgICAgICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmltYWdlX3VybF9yZXNwLmdldHVybCgpLCBzZWxmLmltYWdlX3VybCkKKworICAgIGRlZiB0ZXN0X3JlYWRfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX3Jlc3AucmVhZCgpLmRlY29kZSgKKyAgICAgICAgICAgIGRpY3Qoc2VsZi50ZXh0X3VybF9yZXNwLmluZm8oKS5nZXRfcGFyYW1zKCkpWydjaGFyc2V0J10pLCBzZWxmLnRleHQpCisKKyAgICBkZWYgdGVzdF9yZWFkX3RleHRfYmFzZTY0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AucmVhZCgpLmRlY29kZSgKKyAgICAgICAgICAgIGRpY3Qoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5pbmZvKCkuZ2V0X3BhcmFtcygpKVsnY2hhcnNldCddKSwKKyAgICAgICAgICAgIHNlbGYudGV4dCkKKworICAgIGRlZiB0ZXN0X3JlYWRfaW1hZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5pbWFnZV91cmxfcmVzcC5yZWFkKCksIHNlbGYuaW1hZ2UpCisKKyAgICBkZWYgdGVzdF9taXNzaW5nX2NvbW1hKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sJ2RhdGE6dGV4dC9wbGFpbicpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2Jhc2U2NF9kYXRhKHNlbGYpOgorICAgICAgICAjIG1pc3NpbmcgcGFkZGluZyBjaGFyYWN0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcix1cmxsaWIucmVxdWVzdC51cmxvcGVuLCdkYXRhOjtiYXNlNjQsQ2c9JykKKwogY2xhc3MgdXJscmV0cmlldmVfRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IHVybGxpYi51cmxyZXRyaWV2ZSgpIG9uIGxvY2FsIGZpbGVzIiIiCiAKQEAgLTEyOTEsNiArMTM2Nyw3IEBACiAjICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHAuZnRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKICMgICAgICAgICBmdHAuY2xvc2UoKQogCisKIGNsYXNzIFJlcXVlc3RUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVW5pdCB0ZXN0cyBmb3IgdXJsbGliLnJlcXVlc3QuUmVxdWVzdC4iIiIKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CmluZGV4IDMzZjkwZjQuLmRiZDFjNjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKQEAgLTExLDYgKzExLDcgQEAKICMgVGhlIHByb3h5IGJ5cGFzcyBtZXRob2QgaW1wb3J0ZWQgYmVsb3cgaGFzIGxvZ2ljIHNwZWNpZmljIHRvIHRoZSBPU1gKICMgcHJveHkgY29uZmlnIGRhdGEgc3RydWN0dXJlIGJ1dCBpcyB0ZXN0YWJsZSBvbiBhbGwgcGxhdGZvcm1zLgogZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgT3BlbmVyRGlyZWN0b3IsIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYKK2Zyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQogaW1wb3J0IHVybGxpYi5lcnJvcgogCiAjIFhYWApAQCAtMTE4LDYgKzExOSwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXEuZ2V0X2hlYWRlcigiTm90LXRoZXJlIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLmdldF9oZWFkZXIoIk5vdC10aGVyZSIsICJkZWZhdWx0IiksICJkZWZhdWx0IikKIAorICAgICAgICByZXEucmVtb3ZlX2hlYWRlcigiU3BhbS1lZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXEuaGFzX2hlYWRlcigiU3BhbS1lZ2dzIikpCisKKyAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIsICJFZ2dzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcS5oYXNfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpKQorCisgICAgICAgIHJlcS5yZW1vdmVfaGVhZGVyKCJVbnJlZGlyZWN0ZWQtc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVxLmhhc19oZWFkZXIoIlVucmVkaXJlY3RlZC1zcGFtIikpCisKIAogICAgIGRlZiB0ZXN0X3Bhc3N3b3JkX21hbmFnZXIoc2VsZik6CiAgICAgICAgIG1nciA9IHVybGxpYi5yZXF1ZXN0LkhUVFBQYXNzd29yZE1ncigpCkBAIC0yODMsNiArMjkzLDcgQEAKICAgICAgICAgc2VsZi5yZXFfaGVhZGVycyA9IFtdCiAgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKICAgICAgICAgc2VsZi5yYWlzZV9vbl9lbmRoZWFkZXJzID0gRmFsc2UKKyAgICAgICAgc2VsZi5zb2NrID0gTm9uZQogICAgICAgICBzZWxmLl90dW5uZWxfaGVhZGVycyA9IHt9CiAKICAgICBkZWYgX19jYWxsX18oc2VsZiwgaG9zdCwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgpAQCAtMzEwLDggKzMyMSw3IEBACiAgICAgICAgIGlmIGJvZHk6CiAgICAgICAgICAgICBzZWxmLmRhdGEgPSBib2R5CiAgICAgICAgIGlmIHNlbGYucmFpc2Vfb25fZW5kaGVhZGVyczoKLSAgICAgICAgICAgIGltcG9ydCBzb2NrZXQKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICBkZWYgZ2V0cmVzcG9uc2Uoc2VsZik6CiAgICAgICAgIHJldHVybiBNb2NrSFRUUFJlc3BvbnNlKE1vY2tGaWxlKCksIHt9LCAyMDAsICJPSyIpCiAKQEAgLTU5NiwyNyArNjA2LDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnc1sxXSBpcyBOb25lIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoYXJnc1sxXSwgTW9ja1Jlc3BvbnNlKSkKIAotICAgIGRlZiB0ZXN0X21ldGhvZF9kZXByZWNhdGlvbnMoc2VsZik6Ci0gICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKQotCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmFkZF9kYXRhKCJkYXRhIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X2RhdGEoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5oYXNfZGF0YSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9ob3N0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X3NlbGVjdG9yKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuaXNfdW52ZXJpZmlhYmxlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X29yaWdpbl9yZXFfaG9zdCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF90eXBlKCkKLQotCiBkZWYgc2FuZXBhdGhuYW1lMnVybChwYXRoKToKICAgICB0cnk6CiAgICAgICAgIHBhdGguZW5jb2RlKCJ1dGYtOCIpCkBAIC04MTEsNyArODAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiRm9vIiwgImJhciIpLCAoIlNwYW0iLCAiZWdncyIpXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHR0cC5kYXRhLCBkYXRhKQogCi0gICAgICAgICMgY2hlY2sgc29ja2V0LmVycm9yIGNvbnZlcnRlZCB0byBVUkxFcnJvcgorICAgICAgICAjIGNoZWNrIE9TRXJyb3IgY29udmVydGVkIHRvIFVSTEVycm9yCiAgICAgICAgIGh0dHAucmFpc2Vfb25fZW5kaGVhZGVycyA9IFRydWUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yLCBoLmRvX29wZW4sIGh0dHAsIHJlcSkKIApAQCAtOTE2LDYgKzkwNSwzNiBAQAogICAgICAgICAgICAgcF9kc19yZXEgPSBoLmRvX3JlcXVlc3RfKGRzX3JlcSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocF9kc19yZXEudW5yZWRpcmVjdGVkX2hkcnNbIkhvc3QiXSwiZXhhbXBsZS5jb20iKQogCisgICAgZGVmIHRlc3RfZnVsbF91cmxfc2V0dGVyKHNlbGYpOgorICAgICAgICAjIENoZWNrcyB0byBlbnN1cmUgdGhhdCBjb21wb25lbnRzIGFyZSBzZXQgY29ycmVjdGx5IGFmdGVyIHNldHRpbmcgdGhlCisgICAgICAgICMgZnVsbF91cmwgb2YgYSBSZXF1ZXN0IG9iamVjdAorCisgICAgICAgIHVybHMgPSBbCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXIjYmF6JywKKyAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhciZzcGFtPWVnZ3MjYmFzaCcsCisgICAgICAgICAgICAnaHR0cDovL2V4YW1wbGUuY29tJywKKyAgICAgICAgXQorCisgICAgICAgICMgdGVzdGluZyBhIHJldXNhYmxlIHJlcXVlc3QgaW5zdGFuY2UsIGJ1dCB0aGUgdXJsIHBhcmFtZXRlciBpcworICAgICAgICAjIHJlcXVpcmVkLCBzbyBqdXN0IHVzZSBhIGR1bW15IG9uZSB0byBpbnN0YW50aWF0ZQorICAgICAgICByID0gUmVxdWVzdCgnaHR0cDovL2V4YW1wbGUuY29tJykKKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgci5mdWxsX3VybCA9IHVybAorICAgICAgICAgICAgcGFyc2VkID0gdXJscGFyc2UodXJsKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuZ2V0X2Z1bGxfdXJsKCksIHVybCkKKyAgICAgICAgICAgICMgZnVsbF91cmwgc2V0dGVyIHVzZXMgc3BsaXR0YWcgdG8gc3BsaXQgaW50byBjb21wb25lbnRzLgorICAgICAgICAgICAgIyBzcGxpdHRhZyBzZXRzIHRoZSBmcmFnbWVudCBhcyBOb25lIHdoaWxlIHVybHBhcnNlIHNldHMgaXQgdG8gJycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5mcmFnbWVudCBvciAnJywgcGFyc2VkLmZyYWdtZW50KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxwYXJzZShyLmdldF9mdWxsX3VybCgpKS5xdWVyeSwgcGFyc2VkLnF1ZXJ5KQorCisgICAgZGVmIHRlc3RfZnVsbF91cmxfZGVsZXRlcihzZWxmKToKKyAgICAgICAgciA9IFJlcXVlc3QoJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20nKQorICAgICAgICBkZWwgci5mdWxsX3VybAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyLmZ1bGxfdXJsKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyLmZyYWdtZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIuc2VsZWN0b3IsICcnKQorCiAgICAgZGVmIHRlc3RfZml4cGF0aF9pbl93ZWlyZHVybHMoc2VsZik6CiAgICAgICAgICMgSXNzdWU0NDkzOiB1cmxsaWIyIHRvIHN1cHBseSAnLycgd2hlbiB0byB1cmxzIHdoZXJlIHBhdGggZG9lcyBub3QKICAgICAgICAgIyBzdGFydCB3aXRoJy8nCkBAIC0xNDE1LDYgKzE0MzQsMjEgQEAKICAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgTXlIVFRQSGFuZGxlcikKICAgICAgICAgc2VsZi5vcGVuZXJfaGFzX2hhbmRsZXIobywgTXlPdGhlckhUVFBIYW5kbGVyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgbmV0d29yayBhY2Nlc3MnKQorICAgIGRlZiB0ZXN0X2lzc3VlMTY0NjQoc2VsZik6CisgICAgICAgIG9wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcigpCisgICAgICAgIHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHJlcXVlc3QuZGF0YSkKKworICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0LCAiMSIuZW5jb2RlKCJ1cy1hc2NpaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMSIsIHJlcXVlc3QuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMSIsIHJlcXVlc3QuZ2V0X2hlYWRlcigiQ29udGVudC1sZW5ndGgiKSkKKworICAgICAgICBvcGVuZXIub3BlbihyZXF1ZXN0LCAiMTIzNDU2Nzg5MCIuZW5jb2RlKCJ1cy1hc2NpaSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDU2Nzg5MCIsIHJlcXVlc3QuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTAiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKICAgICBkZWYgdGVzdF9IVFRQRXJyb3JfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgSXNzdWUgMTMyMTEgcmV2ZWFscyB0aGF0IEhUVFBFcnJvciBkaWRuJ3QgaW1wbGVtZW50IHRoZSBVUkxFcnJvcgpAQCAtMTQyNiwyMyArMTQ2MCwzMSBAQAogICAgICAgICBlcnIgPSB1cmxsaWIuZXJyb3IuSFRUUEVycm9yKHVybCwgY29kZSwgbXNnLCBoZHJzLCBmcCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAncmVhc29uJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnJlYXNvbiwgJ3NvbWV0aGluZyBiYWQgaGFwcGVuZWQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdoZHJzJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmhkcnMsICdDb250ZW50LUxlbmd0aDogNDInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnIsICdoZWFkZXJzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmhlYWRlcnMsICdDb250ZW50LUxlbmd0aDogNDInKQogICAgICAgICBleHBlY3RlZF9lcnJtc2cgPSAnSFRUUCBFcnJvciAlczogJXMnICUgKGVyci5jb2RlLCBlcnIubXNnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCBleHBlY3RlZF9lcnJtc2cpCiAKLQogY2xhc3MgUmVxdWVzdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBQdXRSZXF1ZXN0KFJlcXVlc3QpOgorICAgICAgICBtZXRob2Q9J1BVVCcKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5nZXQgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQogICAgICAgICBzZWxmLnBvc3QgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiWC1UZXN0IjogInRlc3QifSkKKyAgICAgICAgc2VsZi5oZWFkID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwgbWV0aG9kPSdIRUFEJykKKyAgICAgICAgc2VsZi5wdXQgPSBzZWxmLlB1dFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCisgICAgICAgIHNlbGYuZm9yY2VfcG9zdCA9IHNlbGYuUHV0UmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKKyAgICAgICAgICAgIG1ldGhvZD0iUE9TVCIpCiAKICAgICBkZWYgdGVzdF9tZXRob2Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLnBvc3QuZ2V0X21ldGhvZCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJHRVQiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkhFQUQiLCBzZWxmLmhlYWQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQVVQiLCBzZWxmLnB1dC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLmZvcmNlX3Bvc3QuZ2V0X21ldGhvZCgpKQogCiAgICAgZGVmIHRlc3RfZGF0YShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmdldC5kYXRhKQpAQCAtMTQ1MSw2ICsxNDkzLDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmdldC5kYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQogCisgICAgIyBpc3N1ZSAxNjQ2NAorICAgICMgaWYgd2UgY2hhbmdlIGRhdGEgd2UgbmVlZCB0byByZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyCisgICAgIyAoY2F1c2UgaXQncyBtb3N0IHByb2JhYmx5IGNhbGN1bGF0ZWQgZm9yIHByZXZpb3VzIHZhbHVlKQorICAgIGRlZiB0ZXN0X3NldHRpbmdfZGF0YV9zaG91bGRfcmVtb3ZlX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICBzZWxmLmdldC5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0Miwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgIHNlbGYuZ2V0LmRhdGEgPSAic3BhbSIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKworICAgICMgaXNzdWUgMTc0ODUgc2FtZSBmb3IgZGVsZXRpbmcgZGF0YS4KKyAgICBkZWYgdGVzdF9kZWxldGluZ19kYXRhX3Nob3VsZF9yZW1vdmVfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIHNlbGYuZ2V0LmRhdGEgPSAnZm9vJworICAgICAgICBzZWxmLmdldC5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdKQorICAgICAgICBkZWwgc2VsZi5nZXQuZGF0YQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorCiAgICAgZGVmIHRlc3RfZ2V0X2Z1bGxfdXJsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0LmdldF9mdWxsX3VybCgpKQpAQCAtMTQ5MiwyMSArMTU1MywxMyBAQAogICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2Z1bGxfdXJsKCksIHVybCkKIAotICAgIGRlZiB0ZXN0X0hUVFBFcnJvcl9pbnRlcmZhY2VfY2FsbChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIElzc3VlIDE1NzAxIC0gSFRUUEVycm9yIGludGVyZmFjZSBoYXMgaW5mbyBtZXRob2QgYXZhaWxhYmxlIGZyb20gVVJMRXJyb3IKLSAgICAgICAgIiIiCi0gICAgICAgIGVyciA9IHVybGxpYi5yZXF1ZXN0LkhUVFBFcnJvcihtc2c9InNvbWV0aGluZyBiYWQgaGFwcGVuZWQiLCB1cmw9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZT1Ob25lLCBoZHJzPSdDb250ZW50LUxlbmd0aDo0MicsIGZwPU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ3JlYXNvbicpKQotICAgICAgICBhc3NlcnQgaGFzYXR0cihlcnIsICdyZWFzb24nKQotICAgICAgICBhc3NlcnQgaGFzYXR0cihlcnIsICdpbmZvJykKLSAgICAgICAgYXNzZXJ0IGNhbGxhYmxlKGVyci5pbmZvKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlcnIuaW5mbygpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyLmluZm8gY2FsbCBmYWlsZWQuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuaW5mbygpLCAiQ29udGVudC1MZW5ndGg6NDIiKQorICAgIGRlZiB0ZXN0X3VybF9mdWxsdXJsX2dldF9mdWxsX3VybChzZWxmKToKKyAgICAgICAgdXJscyA9IFsnaHR0cDovL2RvY3MucHl0aG9uLm9yZycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91cmxsaWIyLmh0bWwjT0snLAorICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvP3FzPXF1ZXJ5I2ZyYWdtZW50PXRydWUnIF0KKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfZnVsbF91cmwoKSwgcmVxLmZ1bGxfdXJsKQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3VybGxpYjIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQppbmRleCA5MTEyZTUwLi4wODI1MGMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CkBAIC05LDcgKzksMTAgQEAKIGltcG9ydCBoYXNobGliCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKLQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCiAKIGhlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCiAjIFNlbGYtc2lnbmVkIGNlcnQgZmlsZSBmb3IgJ2xvY2FsaG9zdCcKQEAgLTE3LDYgKzIwLDcgQEAKICMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciAnZmFrZWhvc3RuYW1lJwogQ0VSVF9mYWtlaG9zdG5hbWUgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ2tleWNlcnQyLnBlbScpCiAKKwogIyBMb29wYmFjayBodHRwIHNlcnZlciBpbmZyYXN0cnVjdHVyZQogCiBjbGFzcyBMb29wYmFja0h0dHBTZXJ2ZXIoaHR0cC5zZXJ2ZXIuSFRUUFNlcnZlcik6CkBAIC0zODksMTQgKzM5MywxNCBAQAogICAgICAgICBoYW5kbGVyLnBvcnQgPSBwb3J0CiAgICAgICAgIHJldHVybiBoYW5kbGVyCiAKLSAgICBkZWYgc3RhcnRfaHR0cHNfc2VydmVyKHNlbGYsIHJlc3BvbnNlcz1Ob25lLCBjZXJ0ZmlsZT1DRVJUX2xvY2FsaG9zdCk6CisgICAgZGVmIHN0YXJ0X2h0dHBzX3NlcnZlcihzZWxmLCByZXNwb25zZXM9Tm9uZSwgKiprd2FyZ3MpOgogICAgICAgICBpZiBub3QgaGFzYXR0cih1cmxsaWIucmVxdWVzdCwgJ0hUVFBTSGFuZGxlcicpOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnc3NsIHN1cHBvcnQgcmVxdWlyZWQnKQogICAgICAgICBmcm9tIHRlc3Quc3NsX3NlcnZlcnMgaW1wb3J0IG1ha2VfaHR0cHNfc2VydmVyCiAgICAgICAgIGlmIHJlc3BvbnNlcyBpcyBOb25lOgogICAgICAgICAgICAgcmVzcG9uc2VzID0gWygyMDAsIFtdLCBiIndlIGNhcmUgYSBiaXQiKV0KICAgICAgICAgaGFuZGxlciA9IEdldFJlcXVlc3RIYW5kbGVyKHJlc3BvbnNlcykKLSAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGU9Y2VydGZpbGUsIGhhbmRsZXJfY2xhc3M9aGFuZGxlcikKKyAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgaGFuZGxlcl9jbGFzcz1oYW5kbGVyLCAqKmt3YXJncykKICAgICAgICAgaGFuZGxlci5wb3J0ID0gc2VydmVyLnBvcnQKICAgICAgICAgcmV0dXJuIGhhbmRsZXIKIApAQCAtNDg2LDYgKzQ5MCwyMSBAQAogICAgICAgICAgICAgc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcy9iaXphcnJlIiAlIGhhbmRsZXIucG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRlZmF1bHQ9VHJ1ZSkKIAorICAgIGRlZiB0ZXN0X2h0dHBzX3NuaShzZWxmKToKKyAgICAgICAgaWYgc3NsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzc2wgbW9kdWxlIHJlcXVpcmVkIikKKyAgICAgICAgaWYgbm90IHNzbC5IQVNfU05JOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU05JIHN1cHBvcnQgcmVxdWlyZWQgaW4gT3BlblNTTCIpCisgICAgICAgIHNuaV9uYW1lID0gTm9uZQorICAgICAgICBkZWYgY2Jfc25pKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIHNuaV9uYW1lCisgICAgICAgICAgICBzbmlfbmFtZSA9IHNlcnZlcl9uYW1lCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2Jfc25pKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9odHRwc19zZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjZXJ0ZmlsZT1DRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcyIgJSBoYW5kbGVyLnBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25pX25hbWUsICJsb2NhbGhvc3QiKQorCiAgICAgZGVmIHRlc3Rfc2VuZGluZ19oZWFkZXJzKHNlbGYpOgogICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoKQogICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vbG9jYWxob3N0OiVzLyIgJSBoYW5kbGVyLnBvcnQsCkBAIC01MzIsNyArNTUxLDcgQEAKICAgICAgICAgIyBzbyB3ZSBydW4gdGhlIHRlc3Qgb25seSB3aGVuIC11bmV0d29yay8tdWFsbCBpcyBzcGVjaWZpZWQgdG8KICAgICAgICAgIyBtaXRpZ2F0ZSB0aGUgcHJvYmxlbSBhIGJpdCAoc2VlICMxNzU2NCkKICAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2l2ZW4gdGhhdCBib3RoIFZlcmlTaWduIGFuZCB2YXJpb3VzIElTUHMgaGF2ZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBwYXN0IG9yIGFyZSBwcmVzZW50bHkgaGlqYWNraW5nIHZhcmlvdXMgaW52YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiBuYW1lIHJlcXVlc3RzIGluIGFuIGF0dGVtcHQgdG8gYm9vc3QgdHJhZmZpYwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CmluZGV4IDdmM2M5M2EuLmZiYTNjZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKQEAgLTE2NCw2ICsxNjQsMTQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAogICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yL2dsb3NzYXJ5Lmh0bWwjZ2xvc3NhcnkiKQogCisgICAgZGVmIHRlc3RfcmVkaXJlY3RfdXJsX3dpdGhmcmFnKHNlbGYpOgorICAgICAgICByZWRpcmVjdF91cmxfd2l0aF9mcmFnID0gImh0dHA6Ly9iaXRseS5jb20vdXJsbGlicmVkaXJlY3R0ZXN0IgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHJlZGlyZWN0X3VybF93aXRoX2ZyYWcpOgorICAgICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdChyZWRpcmVjdF91cmxfd2l0aF9mcmFnKQorICAgICAgICAgICAgcmVzID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKKyAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L2dsb3NzYXJ5Lmh0bWwjdGVybS1nbG9iYWwtaW50ZXJwcmV0ZXItbG9jayIpCisKICAgICBkZWYgdGVzdF9jdXN0b21faGVhZGVycyhzZWxmKToKICAgICAgICAgdXJsID0gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKQEAgLTIxNiw3ICsyMjQsNyBAQAogICAgICAgICAgICAgICAgIGRlYnVnKHVybCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYgPSB1cmxvcGVuKHVybCwgcmVxLCBUSU1FT1VUKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGVycikKICAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfZXJyOgogICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gKCJEaWRuJ3QgZ2V0IGV4cGVjdGVkIGVycm9yKHMpICVzIGZvciAlcyAlcywgZ290ICVzOiAlcyIgJQpAQCAtMzMwLDM1ICszMzgsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLmZwLnJhdy5fc29jay5nZXR0aW1lb3V0KCksIDYwKQogCiAKLUB1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgInJlcXVpcmVzIFNTTCBzdXBwb3J0IikKLWNsYXNzIEhUVFBTVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3Rfc25pKHNlbGYpOgotICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IGRpc2FibGVkIC0gdGVzdCBzZXJ2ZXIgbmVlZGVkIikKLSAgICAgICAgIyBDaGVja3MgdGhhdCBTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uIHdvcmtzLCBpZiBzdXBwb3J0ZWQgYnkgdGhlCi0gICAgICAgICMgT3BlblNTTCBsaW5rZWQgdG8uCi0gICAgICAgICMgVGhlIHNzbCBtb2R1bGUgaXRzZWxmIGRvZXNuJ3QgaGF2ZSBzZXJ2ZXItc2lkZSBzdXBwb3J0IGZvciBTTkksCi0gICAgICAgICMgc28gd2UgcmVseSBvbiBhIHRoaXJkLXBhcnR5IHRlc3Qgc2l0ZS4KLSAgICAgICAgZXhwZWN0X3NuaSA9IHNzbC5IQVNfU05JCi0gICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoIlhYWCIpOgotICAgICAgICAgICAgdSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oIlhYWCIpCi0gICAgICAgICAgICBjb250ZW50cyA9IHUucmVhZGFsbCgpCi0gICAgICAgICAgICBpZiBleHBlY3Rfc25pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJHcmVhdCIsIGNvbnRlbnRzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJVbmZvcnR1bmF0ZWx5IiwgY29udGVudHMpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJHcmVhdCIsIGNvbnRlbnRzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJVbmZvcnR1bmF0ZWx5IiwgY29udGVudHMpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEF1dGhUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyTmV0d29ya1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlU29ja2V0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKaW5kZXggMjBlZmNhNi4uYjY4ODhmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKQEAgLTEyNCwxNiArMTI0LDE1IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB3aXRoIHNvbWUgb3ZlcnplYWxvdXMgRE5TIHByb3ZpZGVycyBzdWNoIGFzIE9wZW5ETlMKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIHNob3VsZCBub3QgcmVzb2x2ZSBmb3IgdGVzdCB0byB3b3JrIiAlIGJvZ3VzX2RvbWFpbikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTRiBwYXRjaCA4MDk5MTU6ICBJbiBTZXAgMjAwMywgVmVyaVNpZ24gc3RhcnRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhpZ2hqYWNraW5nIGludmFsaWQgLmNvbSBhbmQgLm5ldCBhZGRyZXNzZXMgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93biBzaXRlLiAgVGhpcyB0ZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnRlZCBmYWlsaW5nIHRoZW4uICBPbmUgaG9wZXMgdGhlIC5pbnZhbGlkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgZG9tYWluIHdpbGwgYmUgc3BhcmVkIHRvIHNlcnZlIGl0cyBkZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgcHVycG9zZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1cmxsaWIudXJsb3BlbiwgImh0dHA6Ly93d3cuc2FkZmxranNhc2FkZi5jb20vIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3BlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKKyAgICAgICAgZmFpbHVyZV9leHBsYW5hdGlvbiA9ICgnb3BlbmluZyBhbiBpbnZhbGlkIFVSTCBkaWQgbm90IHJhaXNlIE9TRXJyb3I7ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FuIGJlIGNhdXNlZCBieSBhIGJyb2tlbiBETlMgc2VydmVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKGUuZy4gcmV0dXJucyA0MDQgb3IgaGlqYWNrcyBwYWdlKScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPWZhaWx1cmVfZXhwbGFuYXRpb24pOgorICAgICAgICAgICAgIyBTRiBwYXRjaCA4MDk5MTU6ICBJbiBTZXAgMjAwMywgVmVyaVNpZ24gc3RhcnRlZCBoaWdoamFja2luZworICAgICAgICAgICAgIyBpbnZhbGlkIC5jb20gYW5kIC5uZXQgYWRkcmVzc2VzIHRvIGJvb3N0IHRyYWZmaWMgdG8gdGhlaXIgb3duCisgICAgICAgICAgICAjIHNpdGUuICBUaGlzIHRlc3Qgc3RhcnRlZCBmYWlsaW5nIHRoZW4uICBPbmUgaG9wZXMgdGhlIC5pbnZhbGlkCisgICAgICAgICAgICAjIGRvbWFpbiB3aWxsIGJlIHNwYXJlZCB0byBzZXJ2ZSBpdHMgZGVmaW5lZCBwdXJwb3NlLgorICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3NhZGZsa2pzYXNmLmkubnZhbGkuZC8iKQogCiAKIGNsYXNzIHVybHJldHJpZXZlTmV0d29ya1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CmluZGV4IDM3OGE0MjcuLmM5MzhmMDkgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQpAQCAtODQ3LDYgKzg0NywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhdGgsICc4NjMtMTIzNCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocDEucGFyYW1zLCAncGhvbmUtY29udGV4dD0rMS05MTQtNTU1JykKIAorICAgIGRlZiB0ZXN0X3Vud3JhcChzZWxmKToKKyAgICAgICAgdXJsID0gdXJsbGliLnBhcnNlLnVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsLCAndHlwZTovL2hvc3QvcGF0aCcpCisKKyAgICBkZWYgdGVzdF9RdW90ZXJfcmVwcihzZWxmKToKKyAgICAgICAgcXVvdGVyID0gdXJsbGliLnBhcnNlLlF1b3Rlcih1cmxsaWIucGFyc2UuX0FMV0FZU19TQUZFKQorICAgICAgICBzZWxmLmFzc2VydEluKCdRdW90ZXInLCByZXByKHF1b3RlcikpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFVybFBhcnNlVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQppbmRleCAxMzdjNDQ1Li4yY2E5OTI5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKQEAgLTQ1LDcgKzQ1LDggQEAKICAgICAgICAgIyBUZXN0IF9fcmVwcl9fCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUwKSwgc3RyKGQwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUxKSwgcmVwcihkMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1MiksIHJlcHIoZDIpKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlcHIodTIpLCAoInsnb25lJzogMSwgJ3R3byc6IDJ9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7J3R3byc6IDIsICdvbmUnOiAxfSIpKQogCiAgICAgICAgICMgVGVzdCByaWNoIGNvbXBhcmlzb24gYW5kIF9fbGVuX18KICAgICAgICAgYWxsID0gW2QwLCBkMSwgZDIsIHUsIHUwLCB1MSwgdTIsIHV1LCB1dTAsIHV1MSwgdXUyXQpAQCAtODksOSArOTAsOSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG0yYSwgbTIpCiAKICAgICAgICAgIyBUZXN0IGtleXMsIGl0ZW1zLCB2YWx1ZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5rZXlzKCksIGQyLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5pdGVtcygpLCBkMi5pdGVtcygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodTIudmFsdWVzKCkpLCBsaXN0KGQyLnZhbHVlcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodTIua2V5cygpKSwgc29ydGVkKGQyLmtleXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLml0ZW1zKCkpLCBzb3J0ZWQoZDIuaXRlbXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLnZhbHVlcygpKSwgc29ydGVkKGQyLnZhbHVlcygpKSkKIAogICAgICAgICAjIFRlc3QgImluIi4KICAgICAgICAgZm9yIGkgaW4gdTIua2V5cygpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF92ZW52LnB5IGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CmluZGV4IDBmYWU4OGIuLmViMjI1ZmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKQEAgLTUsNiArNSw3IEBACiBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogIiIiCiAKK2ltcG9ydCBlbnN1cmVwaXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKQEAgLTEyLDkgKzEzLDE4IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoY2FwdHVyZWRfc3Rkb3V0LCBjYXB0dXJlZF9zdGRlcnIsIHJ1bl91bml0dGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3N5bWxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbl9zeW1saW5rLCBFbnZpcm9ubWVudFZhckd1YXJkKQoraW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB2ZW52Cit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworc2tpcEluVmVudiA9IHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlIGluIGEgdmVudicpCisKIAogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIHZlbnYgdGVzdHMuIiIiCkBAIC04Myw4ICs5Myw3IEBACiAgICAgICAgICAgICBwcmludCgnICAgICVyJyAlIG9zLmxpc3RkaXIoYmQpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pLCAnRmlsZSAlciBzaG91bGQgZXhpc3QuJyAlIGZuKQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlICcKLSAgICAgICAgICAgICAgICAgICAgICdpbiBhIHZlbnYnKQorICAgIEBza2lwSW5WZW52CiAgICAgZGVmIHRlc3RfcHJlZml4ZXMoc2VsZik6CiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoYXQgdGhlIHByZWZpeCB2YWx1ZXMgYXJlIGFzIGV4cGVjdGVkLgpAQCAtMTA5LDEzICsxMTgsNjggQEAKICAgICAgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBleHBlY3RlZC5lbmNvZGUoKSkKIAorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBFTlZfU1VCRElSUyA9ICgKKyAgICAgICAgICAgICgnU2NyaXB0cycsKSwKKyAgICAgICAgICAgICgnSW5jbHVkZScsKSwKKyAgICAgICAgICAgICgnTGliJywpLAorICAgICAgICAgICAgKCdMaWInLCAnc2l0ZS1wYWNrYWdlcycpLAorICAgICAgICApCisgICAgZWxzZToKKyAgICAgICAgRU5WX1NVQkRJUlMgPSAoCisgICAgICAgICAgICAoJ2JpbicsKSwKKyAgICAgICAgICAgICgnaW5jbHVkZScsKSwKKyAgICAgICAgICAgICgnbGliJywpLAorICAgICAgICAgICAgKCdsaWInLCAncHl0aG9uJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0pLAorICAgICAgICAgICAgKCdsaWInLCAncHl0aG9uJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sICdzaXRlLXBhY2thZ2VzJyksCisgICAgICAgICkKKworICAgIGRlZiBjcmVhdGVfY29udGVudHMoc2VsZiwgcGF0aHMsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBzb21lIGZpbGVzIGluIHRoZSBlbnZpcm9ubWVudCB3aGljaCBhcmUgdW5yZWxhdGVkCisgICAgICAgIHRvIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIHN1YmRpcnMgaW4gcGF0aHM6CisgICAgICAgICAgICBkID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2RpciwgKnN1YmRpcnMpCisgICAgICAgICAgICBvcy5ta2RpcihkKQorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oZCwgZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShiJ1N0aWxsIGhlcmU/JykKKwogICAgIGRlZiB0ZXN0X292ZXJ3cml0ZV9leGlzdGluZyhzZWxmKToKICAgICAgICAgIiIiCi0gICAgICAgIFRlc3QgY29udHJvbCBvZiBvdmVyd3JpdGluZyBhbiBleGlzdGluZyBlbnZpcm9ubWVudCBkaXJlY3RvcnkuCisgICAgICAgIFRlc3QgY3JlYXRpbmcgZW52aXJvbm1lbnQgaW4gYW4gZXhpc3RpbmcgZGlyZWN0b3J5LgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5jcmVhdGVfY29udGVudHMoc2VsZi5FTlZfU1VCRElSUywgJ2ZvbycpCisgICAgICAgIHZlbnYuY3JlYXRlKHNlbGYuZW52X2RpcikKKyAgICAgICAgZm9yIHN1YmRpcnMgaW4gc2VsZi5FTlZfU1VCRElSUzoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2RpciwgKihzdWJkaXJzICsgKCdmb28nLCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZuKSkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiJ1N0aWxsIGhlcmU/JykKKwogICAgICAgICBidWlsZGVyID0gdmVudi5FbnZCdWlsZGVyKGNsZWFyPVRydWUpCiAgICAgICAgIGJ1aWxkZXIuY3JlYXRlKHNlbGYuZW52X2RpcikKKyAgICAgICAgZm9yIHN1YmRpcnMgaW4gc2VsZi5FTlZfU1VCRElSUzoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2RpciwgKihzdWJkaXJzICsgKCdmb28nLCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisKKyAgICBkZWYgY2xlYXJfZGlyZWN0b3J5KHNlbGYsIHBhdGgpOgorICAgICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGZuKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZm4pIG9yIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZm4pOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZm4pCisKKyAgICBkZWYgdGVzdF91bm92ZXJ3cml0YWJsZV9mYWlscyhzZWxmKToKKyAgICAgICAgI2NyZWF0ZSBhIGZpbGUgY2xhc2hpbmcgd2l0aCBkaXJlY3RvcmllcyBpbiB0aGUgZW52IGRpcgorICAgICAgICBmb3IgcGF0aHMgaW4gc2VsZi5FTlZfU1VCRElSU1s6M106CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihzZWxmLmVudl9kaXIsICpwYXRocykKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwgdmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfZGlyZWN0b3J5KHNlbGYuZW52X2RpcikKIAogICAgIGRlZiB0ZXN0X3VwZ3JhZGUoc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTYyLDggKzIyNiw3IEBACiAgICAgIyBydW4gdGhlIHRlc3QsIHRoZSBweXZlbnYuY2ZnIGluIHRoZSB2ZW52IGNyZWF0ZWQgaW4gdGhlIHRlc3Qgd2lsbAogICAgICMgcG9pbnQgdG8gdGhlIHZlbnYgYmVpbmcgdXNlZCB0byBydW4gdGhlIHRlc3QsIGFuZCB3ZSBsb3NlIHRoZSBsaW5rCiAgICAgIyB0byB0aGUgc291cmNlIGJ1aWxkIC0gc28gUHl0aG9uIGNhbid0IGluaXRpYWxpc2UgcHJvcGVybHkuCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucHJlZml4ICE9IHN5cy5iYXNlX3ByZWZpeCwgJ1Rlc3Qgbm90IGFwcHJvcHJpYXRlICcKLSAgICAgICAgICAgICAgICAgICAgICdpbiBhIHZlbnYnKQorICAgIEBza2lwSW5WZW52CiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgc3lzLmV4ZWN1dGFibGUgdmFsdWUgaXMgYXMgZXhwZWN0ZWQuCkBAIC0xOTIsOCArMjU1LDEwMyBAQAogICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBlbnZweS5lbmNvZGUoKSkKIAorCitAc2tpcEluVmVudgorY2xhc3MgRW5zdXJlUGlwVGVzdChCYXNlVGVzdCk6CisgICAgIiIiVGVzdCB2ZW52IG1vZHVsZSBpbnN0YWxsYXRpb24gb2YgcGlwLiIiIgorICAgIGRlZiBhc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoc2VsZik6CisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICB0cnlfaW1wb3J0ID0gJ3RyeTpcbiBpbXBvcnQgcGlwXG5leGNlcHQgSW1wb3J0RXJyb3I6XG4gcHJpbnQoIk9LIiknCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgdHJ5X2ltcG9ydF0KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgIk9LIikKKworCisgICAgZGVmIHRlc3Rfbm9fcGlwX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfbm9fcGlwKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIsIHdpdGhfcGlwPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCisKKyAgICAjIFRlbXBvcmFyeSBza2lwIGZvciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAncGlwIG5lZWRzIFNTTCBzdXBwb3J0JykKKyAgICBkZWYgdGVzdF93aXRoX3BpcChzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmVudl9kaXIpCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CisgICAgICAgICAgICAjIHBpcCdzIGNyb3NzLXZlcnNpb24gY29tcGF0aWJpbGl0eSBtYXkgdHJpZ2dlciBkZXByZWNhdGlvbgorICAgICAgICAgICAgIyB3YXJuaW5ncyBpbiBjdXJyZW50IHZlcnNpb25zIG9mIFB5dGhvbi4gRW5zdXJlIHJlbGF0ZWQKKyAgICAgICAgICAgICMgZW52aXJvbm1lbnQgc2V0dGluZ3MgZG9uJ3QgY2F1c2UgdmVudiB0byBmYWlsLgorICAgICAgICAgICAgZW52dmFyc1siUFlUSE9OV0FSTklOR1MiXSA9ICJlIgorICAgICAgICAgICAgIyBwaXAgZG9lc24ndCBpZ25vcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoZW4gcnVubmluZyBpbgorICAgICAgICAgICAgIyBpc29sYXRlZCBtb2RlLCBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBhY3RpdmUgdmlydHVhbGVudiBoZXJlLAorICAgICAgICAgICAgIyB3ZSdyZSByZWx5aW5nIG9uIHRoZSBuYXRpdmUgdmVudiBzdXBwb3J0IGluIDMuMysKKyAgICAgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNCBmb3IgZGV0YWlscworICAgICAgICAgICAgZGVsIGVudnZhcnNbIlBJUF9SRVFVSVJFX1ZJUlRVQUxFTlYiXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZSh2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyLCB3aXRoX3BpcD1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIFRoZSBvdXRwdXQgdGhpcyBwcm9kdWNlcyBjYW4gYmUgYSBsaXR0bGUgaGFyZCB0byByZWFkLCBidXQKKyAgICAgICAgICAgICAgICAjIGxlYXN0IGl0IGhhcyBhbGwgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICBkZXRhaWxzID0gZXhjLm91dHB1dC5kZWNvZGUoZXJyb3JzPSJyZXBsYWNlIikKKyAgICAgICAgICAgICAgICBtc2cgPSAie31cblxuKipTdWJwcm9jZXNzIE91dHB1dCoqXG57fSIuZm9ybWF0KGV4YywgZGV0YWlscykKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnKQorICAgICAgICAjIEVuc3VyZSBwaXAgaXMgYXZhaWxhYmxlIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICBjbWQgPSBbZW52cHksICctSW0nLCAncGlwJywgJy0tdmVyc2lvbiddCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgZXhwZWN0ZWRfdmVyc2lvbiA9ICJwaXAge30iLmZvcm1hdChlbnN1cmVwaXAudmVyc2lvbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dFs6bGVuKGV4cGVjdGVkX3ZlcnNpb24pXSwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAgICAgZW52X2RpciA9IG9zLmZzZW5jb2RlKHNlbGYuZW52X2RpcikuZGVjb2RlKCJsYXRpbi0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnZfZGlyLCBvdXQpCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MjgKKyAgICAgICAgIyBDaGVjayB0aGUgcHJpdmF0ZSB1bmluc3RhbGwgY29tbWFuZCBwcm92aWRlZCBmb3IgdGhlIFdpbmRvd3MKKyAgICAgICAgIyBpbnN0YWxsZXJzIHdvcmtzIChhdCBsZWFzdCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQpCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1JbScsICdlbnN1cmVwaXAuX3VuaW5zdGFsbCddCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CisgICAgICAgICAgICAjIHBpcCBkb2Vzbid0IGlnbm9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hlbiBydW5uaW5nIGluCisgICAgICAgICAgICAjIGlzb2xhdGVkIG1vZGUsIGFuZCB3ZSBkb24ndCBoYXZlIGFuIGFjdGl2ZSB2aXJ0dWFsZW52IGhlcmUsCisgICAgICAgICAgICAjIHdlJ3JlIHJlbHlpbmcgb24gdGhlIG5hdGl2ZSB2ZW52IHN1cHBvcnQgaW4gMy4zKworICAgICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzM0IGZvciBkZXRhaWxzCisgICAgICAgICAgICBkZWwgZW52dmFyc1siUElQX1JFUVVJUkVfVklSVFVBTEVOViJdCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgIyBCZWluZyBmYWlybHkgc3BlY2lmaWMgcmVnYXJkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgZm9yIHRoZQorICAgICAgICAjIGluaXRpYWwgYnVuZGxpbmcgcGhhc2UgaW4gUHl0aG9uIDMuNC4gSWYgdGhlIG91dHB1dCBjaGFuZ2VzIGluCisgICAgICAgICMgZnV0dXJlIHBpcCB2ZXJzaW9ucywgdGhpcyB0ZXN0IGNhbiBsaWtlbHkgYmUgcmVsYXhlZCBmdXJ0aGVyLgorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydEluKCJTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgcGlwIiwgb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgc2V0dXB0b29scyIsIG91dCkKKyAgICAgICAgIyBDaGVjayBwaXAgaXMgbm93IGdvbmUgZnJvbSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChCYXNpY1Rlc3QpCisgICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCwgRW5zdXJlUGlwVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0My5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKaW5kZXggYmQwNmM4ZC4uZjZhMDY1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC03LDE1ICs3LDExIEBACiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgogCi10cnk6Ci0gICAgb3MuZm9yawotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiKQoraWYgbm90IGhhc2F0dHIob3MsICdmb3JrJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQiKQogCi10cnk6Ci0gICAgb3Mud2FpdDMKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ3dhaXQzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLndhaXQzIG5vdCBkZWZpbmVkIikKIAogY2xhc3MgV2FpdDNUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKaW5kZXggOWY2ZDc3NS4uODc0NjNhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC0zMzAsNiArMzMwLDE5IEBACiAgICAgICAgICAgICB3YXJuaW5nX3Rlc3RzLl9fbmFtZV9fID0gbW9kdWxlX25hbWUKICAgICAgICAgICAgIHN5cy5hcmd2ID0gYXJndgogCisgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF9ub25fYXNjaWlfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCisgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5tb2R1bGUucmVzZXR3YXJuaW5ncygpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiYWx3YXlzIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gKCJub25hc2NpaVx4ZTlcdTIwYWMiLCAic3Vycm9nYXRlXHVkYzgwIik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5mc2VuY29kZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm5fZXhwbGljaXQoInRleHQiLCBVc2VyV2FybmluZywgZmlsZW5hbWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5maWxlbmFtZSwgZmlsZW5hbWUpCisKICAgICBkZWYgdGVzdF93YXJuX2V4cGxpY2l0X3R5cGVfZXJyb3JzKHNlbGYpOgogICAgICAgICAjIHdhcm5fZXhwbGljaXQoKSBzaG91bGQgZXJyb3Igb3V0IGdyYWNlZnVsbHkgaWYgaXQgaXMgZ2l2ZW4gb2JqZWN0cwogICAgICAgICAjIG9mIHRoZSB3cm9uZyB0eXBlcy4KQEAgLTc4Nyw2ICs4MDAsMjUgQEAKICAgICAgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRjb2RlLCAwKQogCitjbGFzcyBGaW5hbGl6YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9maW5hbGl6YXRpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5NDIxOiB3YXJuaW5ncy53YXJuKCkgc2hvdWxkIG5vdCBjcmFzaAorICAgICAgICAjIGR1cmluZyBQeXRob24gZmluYWxpemF0aW9uCisgICAgICAgIGNvZGUgPSAiIiIKK2ltcG9ydCB3YXJuaW5ncword2FybiA9IHdhcm5pbmdzLndhcm4KKworY2xhc3MgQToKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgd2FybigidGVzdCIpCisKK2E9QSgpCisgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgICMgbm90ZTogIl9fbWFpbl9fIiBmaWxlbmFtZSBpcyBub3QgY29ycmVjdCwgaXQgc2hvdWxkIGJlIHRoZSBuYW1lCisgICAgICAgICMgb2YgdGhlIHNjcmlwdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYidfX21haW5fXzo3OiBVc2VyV2FybmluZzogdGVzdCcpCisKIAogZGVmIHNldFVwTW9kdWxlKCk6CiAgICAgcHlfd2FybmluZ3Mub25jZXJlZ2lzdHJ5LmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQppbmRleCA1YmUxMjUxLi41NDljYTg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dhdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93YXZlLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBzeXMKIGltcG9ydCB3YXZlCiAKQEAgLTQ2LDEzICs0Nyw3IEBACiAgICAgICBFNEI1MENFQiA2MzQ0MEE1QSAwOENBMEExRiAyQkJBMEIwQiA1MTQ2MEU0NyA4QkNCMTEzQyBCNkY1MEVFQSA0NDE1MEE1OSBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQotCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBXYXZlUENNMjRUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLApAQCAtODIsNyArNzcsNyBAQAogICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMyhmcmFtZXMpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMykKIAogCiBjbGFzcyBXYXZlUENNMzJUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLApAQCAtMTEyLDEyICsxMDcsNyBAQAogICAgICAgNTE0ODZGODAwRTQ0RTE5MCA4QkNDNjQ4MDExM0IwNTgwIEI2RjRFQzAwMEVFQjM2MzAgNDQxMzE3ODAwQTVCNDhBMCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDQoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQppbmRleCA4NWFiNzE3Li5jY2NiNTE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CkBAIC03LDExICs3LDE1IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKIAogIyBVc2VkIGluIFJlZmVyZW5jZXNUZXN0Q2FzZS50ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoKSAuCiByZWZfZnJvbV9kZWwgPSBOb25lCiAKKyMgVXNlZCBieSBGaW5hbGl6ZVRlc3RDYXNlIGFzIGEgZ2xvYmFsIHRoYXQgbWF5IGJlIHJlcGxhY2VkIGJ5IE5vbmUKKyMgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc2h1dHMgZG93bi4KK19nbG9iYWxfdmFyID0gJ2Zvb2JhcicKKwogY2xhc3MgQzoKICAgICBkZWYgbWV0aG9kKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC00Nyw2ICs1MSwxMSBAQAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuYXJnKQorICAgIGRlZiBzb21lX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKyAgICBkZWYgb3RoZXJfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNQorCiAKIGNsYXNzIFJlZkN5Y2xlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTc5NCw2ICs4MDMsMzAgQEAKICAgICAgICAgZGVsIHJvb3QKICAgICAgICAgZ2MuY29sbGVjdCgpCiAKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYxLl9fY2FsbGJhY2tfXywgY2FsbGJhY2spCisKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZjIuX19jYWxsYmFja19fKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYXR0cmlidXRlX2FmdGVyX2RlbGV0aW9uKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKHgsIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlZi5fX2NhbGxiYWNrX18pCisgICAgICAgIGRlbCB4CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9zZXRfY2FsbGJhY2tfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhIHJlZjogTm9uZQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoeCwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcmVmMS5fX2NhbGxiYWNrX18gPSBsYW1iZGEgcmVmOiBOb25lCisKIAogY2xhc3MgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlKFRlc3RCYXNlKToKIApAQCAtODk4LDYgKzkzMSwxNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQogCiAKK2NsYXNzIFdlYWtNZXRob2RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBPYmplY3Qgc3ViY2xhc3Mgb3ZlcnJpZGluZyBgc29tZV9tZXRob2RgLiIiIgorICAgICAgICBjbGFzcyBDKE9iamVjdCk6CisgICAgICAgICAgICBkZWYgc29tZV9tZXRob2Qoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDYKKyAgICAgICAgcmV0dXJuIEMKKworICAgIGRlZiB0ZXN0X2FsaXZlKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHdlYWtyZWYuUmVmZXJlbmNlVHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIoKSwgdHlwZShvLnNvbWVfbWV0aG9kKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCkuX19zZWxmX18sIG8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fZnVuY19fLCBvLnNvbWVfbWV0aG9kLl9fZnVuY19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIoKSgpLCA0KQorCisgICAgZGVmIHRlc3Rfb2JqZWN0X2RlYWQoc2VsZik6CisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9tZXRob2RfZGVhZChzZWxmKToKKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gb2JqZWN0IGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgbworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIEMuc29tZV9tZXRob2QgPSBPYmplY3Quc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3doZW5fbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgICMgVGVzdCBjYWxsYmFjayBiZWhhdmlvdXIgd2hlbiBtZXRob2QgZGllcyBmaXJzdC4KKyAgICAgICAgQyA9IHNlbGYuX3N1YmNsYXNzKCkKKyAgICAgICAgY2FsbHMgPSBbXQorICAgICAgICBkZWYgY2IoYXJnKToKKyAgICAgICAgICAgIGNhbGxzLmFwcGVuZChhcmcpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCwgY2IpCisgICAgICAgIGRlbCBDLnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisgICAgICAgICMgQ2FsbGJhY2sgaXMgb25seSBjYWxsZWQgb25jZS4KKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X25vX2N5Y2xlcyhzZWxmKToKKyAgICAgICAgIyBBIFdlYWtNZXRob2QgZG9lc24ndCBjcmVhdGUgYW55IHJlZmVyZW5jZSBjeWNsZSB0byBpdHNlbGYuCisgICAgICAgIG8gPSBPYmplY3QoMSkKKyAgICAgICAgZGVmIGNiKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHIpCisgICAgICAgIGRlbCByCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBkZWYgX2VxKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgPT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSAhPSBiKQorICAgICAgICBkZWYgX25lKGEsIGIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgIT0gYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSA9PSBiKQorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5vdGhlcl9tZXRob2QpCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgT2JqZWN0cyBlcXVhbCwgc2FtZSBtZXRob2QKKyAgICAgICAgX2VxKGEsIGIpCisgICAgICAgIF9lcShjLCBkKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgX25lKGEsIGMpCisgICAgICAgIF9uZShhLCBkKQorICAgICAgICBfbmUoYiwgYykKKyAgICAgICAgX25lKGIsIGQpCisgICAgICAgICMgT2JqZWN0cyB1bmVxdWFsLCBzYW1lIG9yIGRpZmZlcmVudCBtZXRob2QKKyAgICAgICAgeiA9IE9iamVjdCgyKQorICAgICAgICBlID0gd2Vha3JlZi5XZWFrTWV0aG9kKHouc29tZV9tZXRob2QpCisgICAgICAgIGYgPSB3ZWFrcmVmLldlYWtNZXRob2Qoei5vdGhlcl9tZXRob2QpCisgICAgICAgIF9uZShhLCBlKQorICAgICAgICBfbmUoYSwgZikKKyAgICAgICAgX25lKGIsIGUpCisgICAgICAgIF9uZShiLCBmKQorICAgICAgICBkZWwgeCwgeSwgegorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgIyBEZWFkIFdlYWtNZXRob2RzIGNvbXBhcmUgYnkgaWRlbnRpdHkKKyAgICAgICAgcmVmcyA9IGEsIGIsIGMsIGQsIGUsIGYKKyAgICAgICAgZm9yIHEgaW4gcmVmczoKKyAgICAgICAgICAgIGZvciByIGluIHJlZnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxID09IHIsIHEgaXMgcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEgIT0gciwgcSBpcyBub3QgcikKKworICAgIGRlZiB0ZXN0X2hhc2hpbmcoc2VsZik6CisgICAgICAgICMgQWxpdmUgV2Vha01ldGhvZHMgYXJlIGhhc2hhYmxlIGlmIHRoZSB1bmRlcmx5aW5nIG9iamVjdCBpcworICAgICAgICAjIGhhc2hhYmxlLgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHkgPSBPYmplY3QoMSkKKyAgICAgICAgYSA9IHdlYWtyZWYuV2Vha01ldGhvZCh4LnNvbWVfbWV0aG9kKQorICAgICAgICBiID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkuc29tZV9tZXRob2QpCisgICAgICAgIGMgPSB3ZWFrcmVmLldlYWtNZXRob2QoeS5vdGhlcl9tZXRob2QpCisgICAgICAgICMgU2luY2UgV2Vha01ldGhvZCBvYmplY3RzIGFyZSBlcXVhbCwgdGhlIGhhc2hlcyBzaG91bGQgYmUgZXF1YWwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGFzaChiKSkKKyAgICAgICAgaGEgPSBoYXNoKGEpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyByZXRhaW4gdGhlaXIgb2xkIGhhc2ggdmFsdWUKKyAgICAgICAgZGVsIHgsIHkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChhKSwgaGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChiKSwgaGEpCisgICAgICAgICMgSWYgaXQgd2Fzbid0IGhhc2hlZCB3aGVuIGFsaXZlLCBhIGRlYWQgV2Vha01ldGhvZCBjYW5ub3QgYmUgaGFzaGVkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIGMpCisKKwogY2xhc3MgTWFwcGluZ1Rlc3RDYXNlKFRlc3RCYXNlKToKIAogICAgIENPVU5UID0gMTAKQEAgLTEzODUsNiArMTU1MiwxNTEgQEAKICAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX19yZWYuY29weSgpCiAKKworY2xhc3MgRmluYWxpemVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBjbGFzcyBBOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KHNlbGYpOgorICAgICAgICAjIHdlIGNyZWF0ZSBubyByZWYtY3ljbGVzIHNvIGluIENQeXRob24gbm8gZ2Mgc2hvdWxkIGJlIG5lZWRlZAorICAgICAgICBpZiBzeXMuaW1wbGVtZW50YXRpb24ubmFtZSAhPSAnY3B5dGhvbic6CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfZmluYWxpemUoc2VsZik6CisgICAgICAgIGRlZiBhZGQoeCx5LHopOgorICAgICAgICAgICAgcmVzLmFwcGVuZCh4ICsgeSArIHopCisgICAgICAgICAgICByZXR1cm4geCArIHkgKyB6CisKKyAgICAgICAgYSA9IHNlbGYuQSgpCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIHo9ODkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzKSwgeyd6Jzo4OX0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMTk5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgNjcsIDQzLCA4OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIChhLCBhZGQsICg2Nyw0Myw4OSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbXSkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIHg9NjcsIHk9NDMsIHo9ODkpCisgICAgICAgIGRlbCBhCisgICAgICAgIHNlbGYuX2NvbGxlY3RfaWZfbmVjZXNzYXJ5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZGV0YWNoKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGl2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbMTk5XSkKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKworICAgICAgICBmMSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YxJykKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMicpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjMnKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y0JykKKyAgICAgICAgZjUgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmNScpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgZmluYWxpemVycyBjYW4ga2VlcCB0aGVtc2VsdmVzIGFsaXZlCisgICAgICAgIGRlbCBmMSwgZjQKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuYWxpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMy5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmFsaXZlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmNS5kZXRhY2goKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmNS5hbGl2ZSkKKworICAgICAgICBmNSgpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IHVucmVnaXN0ZXJlZAorICAgICAgICByZXMuYXBwZW5kKCdBJykKKyAgICAgICAgZjMoKSAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjMuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0InKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZAorICAgICAgICByZXMuYXBwZW5kKCdDJykKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2Y0JykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyLmFsaXZlKQorICAgICAgICByZXMuYXBwZW5kKCdEJykKKyAgICAgICAgZjIoKSAgICAgICAgICAgICAgICAgICAgICAgIyBub3RoaW5nIGJlY2F1c2UgcHJldmlvdXNseSBjYWxsZWQgYnkgZ2MKKworICAgICAgICBleHBlY3RlZCA9IFsnQScsICdmMycsICdCJywgJ0MnLCAnZjQnLCAnZjInLCAnZjEnLCAnRCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2FsbF9mcmVlZChzZWxmKToKKyAgICAgICAgIyB3ZSB3YW50IGEgd2Vha3JlZmFibGUgc3ViY2xhc3Mgb2Ygd2Vha3JlZi5maW5hbGl6ZQorICAgICAgICBjbGFzcyBNeUZpbmFsaXplcih3ZWFrcmVmLmZpbmFsaXplKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBhID0gc2VsZi5BKCkKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICByZXMuYXBwZW5kKDEyMykKKyAgICAgICAgZiA9IE15RmluYWxpemVyKGEsIGNhbGxiYWNrKQorCisgICAgICAgIHdyX2NhbGxiYWNrID0gd2Vha3JlZi5yZWYoY2FsbGJhY2spCisgICAgICAgIHdyX2YgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICBkZWwgY2FsbGJhY2ssIGYKKworICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9jYWxsYmFjaygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cl9mKCkpCisKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyX2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxMjNdKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHJ1bl9pbl9jaGlsZChjbHMpOgorICAgICAgICBkZWYgZXJyb3IoKToKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGF0ZXhpdCBmaW5hbGl6ZXIgZnJvbSBpbnNpZGUgYSBmaW5hbGl6ZXIgY2FsbGVkCisgICAgICAgICAgICAjIGF0IGV4aXQuICBUaGlzIHNob3VsZCBiZSB0aGUgbmV4dCB0byBiZSBydW4uCisgICAgICAgICAgICBnMSA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2cxJykKKyAgICAgICAgICAgIHByaW50KCdmMyBlcnJvcicpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIGNscyBzaG91bGQgc3RheSBhbGl2ZSB0aWxsIGF0ZXhpdCBjYWxsYmFja3MgcnVuCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZjEnLCBfZ2xvYmFsX3ZhcikKKyAgICAgICAgZjIgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMicsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMyA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBlcnJvcikKKyAgICAgICAgZjQgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmNCcsIF9nbG9iYWxfdmFyKQorCisgICAgICAgIGFzc2VydCBmMS5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBmMi5hdGV4aXQgPSBGYWxzZQorICAgICAgICBhc3NlcnQgZjMuYXRleGl0ID09IFRydWUKKyAgICAgICAgYXNzZXJ0IGY0LmF0ZXhpdCA9PSBUcnVlCisKKyAgICBkZWYgdGVzdF9hdGV4aXQoc2VsZik6CisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC50ZXN0X3dlYWtyZWYgaW1wb3J0IEZpbmFsaXplVGVzdENhc2U7JysKKyAgICAgICAgICAgICAgICAnRmluYWxpemVUZXN0Q2FzZS5ydW5faW5fY2hpbGQoKScpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBwcm9nKQorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCdhc2NpaScpLnNwbGl0bGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgWydmNCBmb29iYXInLCAnZjMgZXJyb3InLCAnZzEnLCAnZjEgZm9vYmFyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ1plcm9EaXZpc2lvbkVycm9yJyBpbiBlcnIpCisKKwogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IHdlYWtyZWYucnN0CiAKID4+PiBpbXBvcnQgd2Vha3JlZgpAQCAtMTQ3MywxMCArMTc4NSwxMiBAQAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBSZWZlcmVuY2VzVGVzdENhc2UsCisgICAgICAgIFdlYWtNZXRob2RUZXN0Q2FzZSwKICAgICAgICAgTWFwcGluZ1Rlc3RDYXNlLAogICAgICAgICBXZWFrVmFsdWVEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFdlYWtLZXlEaWN0aW9uYXJ5VGVzdENhc2UsCiAgICAgICAgIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZSwKKyAgICAgICAgRmluYWxpemVUZXN0Q2FzZSwKICAgICAgICAgKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3Qoc3lzLm1vZHVsZXNbX19uYW1lX19dKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CmluZGV4IGNiNGNkZTkuLmVmNGNlNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5CkBAIC04LDcgKzgsNyBAQAogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgbWFjaGluZQogCiAjIERvIHRoaXMgZmlyc3Qgc28gdGVzdCB3aWxsIGJlIHNraXBwZWQgaWYgbW9kdWxlIGRvZXNuJ3QgZXhpc3QKLXN1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJykKK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnd2lucmVnJywgcmVxdWlyZWRfb249Wyd3aW4nXSkKICMgTm93IGltcG9ydCBldmVyeXRoaW5nCiBmcm9tIHdpbnJlZyBpbXBvcnQgKgogCkBAIC01NywxMyArNTcsMTMgQEAKICAgICBkZWYgZGVsZXRlX3RyZWUoc2VsZiwgcm9vdCwgc3Via2V5KToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaGtleSA9IE9wZW5LZXkocm9vdCwgc3Via2V5LCBLRVlfQUxMX0FDQ0VTUykKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIHN1YmtleSBkb2VzIG5vdCBleGlzdAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3Vic3Via2V5ID0gRW51bUtleShoa2V5LCAwKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgbm8gbW9yZSBzdWJrZXlzCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHNlbGYuZGVsZXRlX3RyZWUoaGtleSwgc3Vic3Via2V5KQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgICAgICBRdWVyeUluZm9LZXkoaW50X3N1Yl9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIENsb3NlS2V5KCkgZnVuY3Rpb24gZG9lcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBjbG9zZSB0aGUgYWN0dWFsIGtleSEiKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgLi4uIGFuZCBjbG9zZSB0aGF0IGtleSB0aGF0IHdheSA6LSkKICAgICAgICAgaW50X2tleSA9IGludChrZXkpCkBAIC0xMDksNyArMTA5LDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfa2V5KQogICAgICAgICAgICAgc2VsZi5mYWlsKCJJdCBhcHBlYXJzIHRoZSBrZXkuQ2xvc2UoKSBmdW5jdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgImRvZXMgbm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsIE9wZW5LZXk9T3BlbktleSk6CkBAIC0xMjYsNyArMTI2LDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gRW51bVZhbHVlKHN1Yl9rZXksIGluZGV4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSBpbiB0ZXN0X2RhdGEsIFRydWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGlkbid0IHJlYWQgYmFjayB0aGUgY29ycmVjdCB0ZXN0IGRhdGEiKQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIEVudW1LZXkoa2V5LCAxKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJXYXMgYWJsZSB0byBnZXQgYSBzZWNvbmQga2V5IHdoZW4gSSBvbmx5IGhhdmUgb25lISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBrZXkuQ2xvc2UoKQpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAjIFNob3VsZG50IGJlIGFibGUgdG8gZGVsZXRlIGl0IHR3aWNlIQogICAgICAgICAgICAgRGVsZXRlS2V5KGtleSwgc3Via2V5c3RyKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEZWxldGluZyB0aGUga2V5IHR3aWNlIHN1Y2NlZWRlZCIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAga2V5LkNsb3NlKCkKICAgICAgICAgRGVsZXRlS2V5KHJvb3Rfa2V5LCB0ZXN0X2tleV9uYW1lKQpAQCAtMTc5LDcgKzE3OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkNvdWxkIG9wZW4gdGhlIG5vbi1leGlzdGVudCBrZXkiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIFVzZSB0aGlzIGVycm9yIG5hbWUgdGhpcyB0aW1lCiAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKQEAgLTIzMCw3ICsyMzAsNyBAQAogCiAgICAgZGVmIHRlc3RfaW5leGlzdGFudF9yZW1vdGVfcmVnaXN0cnkoc2VsZik6CiAgICAgICAgIGNvbm5lY3QgPSBsYW1iZGE6IENvbm5lY3RSZWdpc3RyeSgiYWJjZGVmZ2hpamtsIiwgSEtFWV9DVVJSRU5UX1VTRVIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY29ubmVjdCkKIAogICAgIGRlZiB0ZXN0RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKHNlbGYpOgogICAgICAgICByID0gRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKCIld2luZGlyJVxcdGVzdCIpCkBAIC0yNDIsOCArMjQyLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBDb25uZWN0UmVnaXN0cnkoTm9uZSwgSEtFWV9MT0NBTF9NQUNISU5FKSBhcyBoOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCi0gICAgICAgICAgICAgICAgcmFpc2UgV2luZG93c0Vycm9yCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCiAKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKQEAgLTQwNyw3ICs0MDcsNyBAQAogICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcGVuX2ZhaWwpCiAKICAgICAgICAgICAgICMgTm93IGV4cGxpY2l0bHkgb3BlbiB0aGUgNjQtYml0IHZlcnNpb24gb2YgdGhlIGtleQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCkBAIC00NDcsNyArNDQ3LDcgQEAKICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfNjRLRVkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIDMyLWJpdCBrZXkgaXMgYWN0dWFsbHkgdGhlcmUKICAgICAgICAgICAgIHdpdGggT3BlbktleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQppbmRleCAyNzU5Nzg3Li5kOGE2MTdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKQEAgLTIyLDcgKzIyLDcgQEAKICAgICAgICAga2V5ID0gd2lucmVnLk9wZW5LZXlFeCh3aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgIkFwcEV2ZW50c1xTY2hlbWVzXEFwcHNcLkRlZmF1bHRcezB9XC5EZWZhdWx0Ii5mb3JtYXQoc291bmQpKQogICAgICAgICByZXR1cm4gd2lucmVnLkVudW1WYWx1ZShrZXksIDApWzFdICE9ICIiCi0gICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIGNsYXNzIEJlZXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggN2JkOGEyYy4uODk5NzFmMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTEwLDYgKzEwLDcgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiAKQEAgLTI0MCw3ICsyNDEsNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MLCBFVC5mcm9tc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlBJLCBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MUGFyc2VyLCBFVC5YTUxUcmVlQnVpbGRlcikKIAogICAgIGRlZiB0ZXN0X3NpbXBsZW9wcyhzZWxmKToKICAgICAgICAgIyBCYXNpYyBtZXRob2Qgc2FuaXR5IGNoZWNrcy4KQEAgLTQzMywxNSArNDMzLDYgQEAKICAgICAgICAgICAgICAgICAnICAgPGVtcHR5LWVsZW1lbnQgLz5cbicKICAgICAgICAgICAgICAgICAnPC9yb290PicpCiAKLSAgICAgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKSAjIDEuMiBjb21wYXRpYmlsaXR5Ci0gICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgIHNlbGYuc2VyaWFsaXplX2NoZWNrKHBhcnNlci5jbG9zZSgpLAotICAgICAgICAgICAgICAgICc8cm9vdD5cbicKLSAgICAgICAgICAgICAgICAnICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+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+PC95PmM8L3RhZz4nKQorCiAKIGNsYXNzIFBhcnNlRXJyb3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdWJjbGFzcyhzZWxmKToKQEAgLTIzMjYsOCArMjQ4OCwxMSBAQAogCiAgICAgIyBUZXN0IHRoYXQgdGhlIEMgYWNjZWxlcmF0b3Igd2FzIG5vdCBpbXBvcnRlZCBmb3IgcHlFVAogICAgIGRlZiB0ZXN0X2NvcnJlY3RfaW1wb3J0X3B5RVQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlFVC5FbGVtZW50Ll9fbW9kdWxlX18sICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuU3ViRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5FbGVtZW50Ll9faW5pdF9fLCB0eXBlcy5GdW5jdGlvblR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShweUVULlhNTFBhcnNlci5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTIzOTcsNiArMjU2Miw3IEBACiAgICAgICAgIEVsZW1lbnRJdGVyVGVzdCwKICAgICAgICAgVHJlZUJ1aWxkZXJUZXN0LAogICAgICAgICBYTUxQYXJzZXJUZXN0LAorICAgICAgICBYTUxQdWxsUGFyc2VyVGVzdCwKICAgICAgICAgQnVnc1Rlc3QsCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggYmNhYTcyNC4uYjNmZjdhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cywgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBjRVQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLApAQCAtMzMsMTQgKzM0LDIyIEBACiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoY0VULCAncmVxdWlyZXMgX2VsZW1lbnR0cmVlJykKK0BzdXBwb3J0LmNweXRob25fb25seQogY2xhc3MgVGVzdEFjY2VsZXJhdG9ySW1wb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBpbXBvcnRlZCwgYXMgZXhwZWN0ZWQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVQoc2VsZik6CisgICAgICAgICMgU3ViRWxlbWVudCBpcyBhIGZ1bmN0aW9uIHNvIGl0IHJldGFpbnMgX2VsZW1lbnR0cmVlIGFzIGl0cyBtb2R1bGUuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9jRVRfYWxpYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY0VUX2FsaWFzLlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ19lbGVtZW50dHJlZScpCiAKKyAgICBkZWYgdGVzdF9wYXJzZXJfY29tZXNfZnJvbV9DKHNlbGYpOgorICAgICAgICAjIFRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbiBQeXRob24gY29kZSBpcyB0eXBlcy5GdW5jdGlvblR5cGUsCisgICAgICAgICMgd2hpbGUgdGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluc2lkZSBfZWxlbWVudHRyZWUgaXMKKyAgICAgICAgIyA8Y2xhc3MgJ3dyYXBwZXJfZGVzY3JpcHRvcic+CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShjRVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBAc3VwcG9ydC5jcHl0aG9uX29ubHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggY2M1MjI1OS4uOTliM2VkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTE1LDYgKzE1LDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogdHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUKK3RyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQpAQCAtMjE2LDcgKzIyMCw3IEBACiAgICAgICAgICAgICB4bWxycGMuY2xpZW50LlNlcnZlclByb3h5KCdodHRwczovL2xvY2FsaG9zdDo5OTk5JykuYmFkX2Z1bmN0aW9uKCkKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc19zc2wsICJ4bWxycGMgY2xpZW50J3MgZXJyb3Igd2l0aCBTU0wgc3VwcG9ydCIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc19zc2wpCiAKIGNsYXNzIEhlbHBlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM3Niw2ICszODAsMTEgQEAKICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2Rpdic6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nCiAKKyAgICAgICAgY2xhc3MgRml4dHVyZToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBnZXREYXRhKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICc0MicKKwogICAgIGRlZiBteV9mdW5jdGlvbigpOgogICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC00MDcsNyArNDE2LDggQEAKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihwb3cpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihteV9mdW5jdGlvbikKLSAgICAgICAgc2Vydi5yZWdpc3Rlcl9pbnN0YW5jZShUZXN0SW5zdGFuY2VDbGFzcygpKQorICAgICAgICB0ZXN0SW5zdGFuY2UgPSBUZXN0SW5zdGFuY2VDbGFzcygpCisgICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UodGVzdEluc3RhbmNlLCBhbGxvd19kb3R0ZWRfbmFtZXM9VHJ1ZSkKICAgICAgICAgZXZ0LnNldCgpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtNTAwLDcgKzUxMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgIyBJZ25vcmUgT1NFcnJvcnMgaGVyZS4KICAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKIAogICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CkBAIC01MTUsNyArNTI1LDcgQEAKICAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKS5teV9mdW5jdGlvbigpCi0gICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCkBAIC01NTMsNyArNTYzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTY2LDcgKzU3Niw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoc3RhcnRfc3RyaW5nLCBlbmRfc3RyaW5nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfc3RyaW5nICsgZW5kX3N0cmluZykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC01ODcsMTIgKzU5NywxMyBAQAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24xKHNlbGYpOgogICAgICAgICBleHBlY3RlZF9tZXRob2RzID0gc2V0KFsncG93JywgJ2RpdicsICdteV9mdW5jdGlvbicsICdhZGQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLm1ldGhvZFNpZ25hdHVyZScsICdzeXN0ZW0ubXVsdGljYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZpeHR1cmUnXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBtZXRoID0gcC5zeXN0ZW0ubGlzdE1ldGhvZHMoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQobWV0aCksIGV4cGVjdGVkX21ldGhvZHMpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjA1LDcgKzYxNiw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MTksNyArNjMwLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYzMiw3ICs2NDMsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZzaWcgPSBwLnN5c3RlbS5tZXRob2RTaWduYXR1cmUoJ2RpdicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdnNpZywgJ3NpZ25hdHVyZXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjQ5LDcgKzY2MCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFkZF9yZXN1bHQsIDIrMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93X3Jlc3VsdCwgNioqOCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2X3Jlc3VsdCwgMTI3Ly80MikKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02NzAsNyArNjgxLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCiAgICAgICAgICAgICAgICAgJzxjbGFzcyBcJ0V4Y2VwdGlvblwnPjptZXRob2QgInRoaXNfaXNfbm90X2V4aXN0cyIgJwogICAgICAgICAgICAgICAgICdpcyBub3Qgc3VwcG9ydGVkJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02ODYsNiArNjk3LDEyIEBACiAgICAgICAgICMgVGhpcyBhdm9pZHMgd2FpdGluZyBmb3IgdGhlIHNvY2tldCB0aW1lb3V0LgogICAgICAgICBzZWxmLnRlc3Rfc2ltcGxlMSgpCiAKKyAgICBkZWYgdGVzdF9hbGxvd19kb3R0ZWRfbmFtZXNfdHJ1ZShzZWxmKToKKyAgICAgICAgIyBYWFggYWxzbyBuZWVkIGFsbG93X2RvdHRlZF9uYW1lc19mYWxzZSB0ZXN0LgorICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKKyAgICAgICAgZGF0YSA9IHNlcnZlci5GaXh0dXJlLmdldERhdGEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICc0MicpCisKICAgICBkZWYgdGVzdF91bmljb2RlX2hvc3Qoc2VsZik6CiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovLyVzOiVkL1JQQzIiICUgKEFERFIsIFBPUlQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5hZGQoImEiLCAiXHhlOSIpLCAiYVx4ZTkiKQpAQCAtNzkzLDYgKzgxMCw3IEBACiAKICNBIHRlc3QgY2FzZSB0aGF0IHZlcmlmaWVzIHRoYXQgZ3ppcCBlbmNvZGluZyB3b3JrcyBpbiBib3RoIGRpcmVjdGlvbnMKICMoZm9yIGEgcmVxdWVzdCBhbmQgdGhlIHJlc3BvbnNlKQorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgogICAgICNhIHJlcXVlc3QgaGFuZGxlciB0aGF0IHN1cHBvcnRzIGtlZXAtYWxpdmUgYW5kIGxvZ3MgcmVxdWVzdHMgaW50byBhCiAgICAgI2NsYXNzIHZhcmlhYmxlCkBAIC05MjMsNyArOTQxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtOTM2LDcgKzk1NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgcC5wb3coNiw4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKSBhbmQgaGFzYXR0cihlLCAiaGVhZGVycyIpOgogICAgICAgICAgICAgICAgICMgVGhlIHR3byBzZXJ2ZXItc2lkZSBlcnJvciBoZWFkZXJzIHNob3VsZG4ndCBiZSBzZW50IGJhY2sgaW4gdGhpcyBjYXNlCkBAIC05NTYsNyArOTc0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CiAgICAgICAgICAgICAgICAgIyBXZSBzaG91bGQgZ2V0IGVycm9yIGluZm8gaW4gdGhlIHJlc3BvbnNlCkBAIC0xMDg0LDIzICsxMTAyLDEzIEBACiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCi0gICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZV0KLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIpCi0gICAgdHJ5OgotICAgICAgICBpbXBvcnQgZ3ppcAotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBTZXJ2ZXJUZXN0Q2FzZSkKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgI2d6aXAgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJ1aWxkCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNlcnZlclByb3h5VGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChGYWlsaW5nU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChDR0lIYW5kbGVyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLAorICAgICAgICAgICAgQmluYXJ5VGVzdENhc2UsIEZhdWx0VGVzdENhc2UsIFVzZUJ1aWx0aW5UeXBlc1Rlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlU2VydmVyVGVzdENhc2UsIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSwKKyAgICAgICAgICAgIEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMiwgR3ppcFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgTXVsdGlQYXRoU2VydmVyVGVzdENhc2UsIFNlcnZlclByb3h5VGVzdENhc2UsIEZhaWxpbmdTZXJ2ZXJUZXN0Q2FzZSwKKyAgICAgICAgICAgIENHSUhhbmRsZXJUZXN0Q2FzZSkKIAotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp4bWxycGNfdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQppbmRleCBkZmI1ZjlhLi4wMGFjYTE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CkBAIC05LDMyICs5LDcgQEAKIAogaW1wb3J0IHhtbHJwYy5jbGllbnQgYXMgeG1scnBjbGliCiAKLWNsYXNzIEN1cnJlbnRUaW1lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9jdXJyZW50X3RpbWUoc2VsZik6Ci0gICAgICAgICMgR2V0IHRoZSBjdXJyZW50IHRpbWUgZnJvbSB4bWxycGMuY29tLiAgVGhpcyBjb2RlIGV4ZXJjaXNlcwotICAgICAgICAjIHRoZSBtaW5pbWFsIEhUVFAgZnVuY3Rpb25hbGl0eSBpbiB4bWxycGNsaWIuCi0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRpbWUueG1scnBjLmNvbSBpcyB1bnJlbGlhYmxlIikKLSAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vdGltZS54bWxycGMuY29tL1JQQzIiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0MCA9IHNlcnZlci5jdXJyZW50VGltZS5nZXRDdXJyZW50VGltZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAjIFBlcmZvcm0gYSBtaW5pbWFsIHNhbml0eSBjaGVjayBvbiB0aGUgcmVzdWx0LCBqdXN0IHRvIGJlIHN1cmUKLSAgICAgICAgIyB0aGUgcmVxdWVzdCBtZWFucyB3aGF0IHdlIHRoaW5rIGl0IG1lYW5zLgotICAgICAgICB0MSA9IHhtbHJwY2xpYi5EYXRlVGltZSgpCi0KLSAgICAgICAgZHQwID0geG1scnBjbGliLl9kYXRldGltZV90eXBlKHQwLnZhbHVlKQotICAgICAgICBkdDEgPSB4bWxycGNsaWIuX2RhdGV0aW1lX3R5cGUodDEudmFsdWUpCi0gICAgICAgIGlmIGR0MCA+IGR0MToKLSAgICAgICAgICAgIGRlbHRhID0gZHQwIC0gZHQxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWx0YSA9IGR0MSAtIGR0MAotICAgICAgICAjIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHN5c3RlbSB0aW1lIGhlcmUgYW5kIHRoZSBzeXN0ZW0KLSAgICAgICAgIyB0aW1lIG9uIHRoZSBzZXJ2ZXIgc2hvdWxkIG5vdCBiZSB0b28gYmlnLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVsdGEuZGF5cyA8PSAxKQorY2xhc3MgUHl0aG9uQnVpbGRlcnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X3B5dGhvbl9idWlsZGVycyhzZWxmKToKICAgICAgICAgIyBHZXQgdGhlIGxpc3Qgb2YgYnVpbGRlcnMgZnJvbSB0aGUgWE1MUlBDIGJ1aWxkYm90IGludGVyZmFjZSBhdApAQCAtNDIsNyArMTcsNyBAQAogICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly9idWlsZGJvdC5weXRob24ub3JnL2FsbC94bWxycGMvIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYnVpbGRlcnMgPSBzZXJ2ZXIuZ2V0QWxsQnVpbGRlcnMoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZXR3b3JrIGVycm9yOiAlcyIgJSBlKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNlcnZlcignY2xvc2UnKSgpKQpAQCAtNTUsNyArMzAsNyBAQAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ3VycmVudFRpbWVUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5dGhvbkJ1aWxkZXJzVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CmluZGV4IGFkMGMwYjcuLjQ5ZWNjYmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKQEAgLTEsNyArMSw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdGltZQogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0cnVjdApAQCAtMTQsNyArMTQsNyBAQAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgZmluZGZpbGUsIHVubGluaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemxpYiwgcmVxdWlyZXNfYnoyLCByZXF1aXJlc19sem1hLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCwgY2hlY2tfd2FybmluZ3MpCiAKIFRFU1RGTjIgPSBURVNURk4gKyAiMiIKIFRFU1RGTkRJUiA9IFRFU1RGTiArICJkIgpAQCAtMzUsNiArMzUsMTAgQEAKICAgICAgICAgeWllbGQgZgogICAgICAgICB0ZXN0LmFzc2VydEZhbHNlKGYuY2xvc2VkKQogCitkZWYgb3BlblUoemlwZnAsIGZuKToKKyAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJldHVybiB6aXBmcC5vcGVuKGZuLCAnclUnKQorCiBjbGFzcyBBYnN0cmFjdFRlc3RzV2l0aFNvdXJjZUZpbGU6CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKQEAgLTUwNiwxMiArNTEwLDEyIEBACiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9TVE9SRUQKIAogICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9RmFsc2UpIGFzIHppcGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmcC53cml0ZSwgVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKIAogICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0MihzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PUZhbHNlKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCiAKQEAgLTU1Nyw3ICs1NjEsNyBAQAogICAgICAgICAgICAgICAgIGlmIG9zLmFsdHNlcCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdC5leHRlbmQoZm4uc3BsaXQob3MuYWx0c2VwKSkKICAgICAgICAgICAgICAgICBpZiAnX19weWNhY2hlX18nIGluIHBhdGhfc3BsaXQ6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gaW1wLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQorICAgICAgICAgICAgICAgICAgICBmbiA9IGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCkBAIC01OTEsNiArNTk1LDM0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ2VtYWlsL19faW5pdF9fLnB5JywgbmFtZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ2VtYWlsL21pbWUvdGV4dC5weScsIG5hbWVzKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfZmlsdGVyZWRfcHl0aG9uX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGltcG9ydCB0ZXN0CisgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUodGVzdC5fX2ZpbGVfXykKKworICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgorCisgICAgICAgICAgICAjIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IGZvbGRlciBnaXZlcyBlcnJvciBtZXNzYWdlcworICAgICAgICAgICAgIyAob24gdGhlIGJhZHN5bnRheF8uLi4gZmlsZXMpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIHRoZSB3aG9sZSBwYWNrYWdlCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9bGFtYmRhIHdoYXRldmVyOiBGYWxzZSkKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgcmVwb3J0U0lPOgorICAgICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpciwgZmlsdGVyZnVuYz1sYW1iZGEgZm46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQnIG5vdCBpbiBmbikKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiByZXBvcnRTdHI6CisgICAgICAgICAgICAgICAgcHJpbnQocmVwb3J0U3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgbm90IGluIHJlcG9ydFN0cikKKwogICAgIGRlZiB0ZXN0X3dyaXRlX3dpdGhfb3B0aW1pemF0aW9uKHNlbGYpOgogICAgICAgICBpbXBvcnQgZW1haWwKICAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZShlbWFpbC5fX2ZpbGVfXykKQEAgLTYwMCw3ICs2MzIsNyBAQAogICAgICAgICBleHQgPSAnLnB5bycgaWYgb3B0bGV2ZWwgPT0gMSBlbHNlICcucHljJwogCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIFwKLSAgICAgICAgICAgICAgICAgemlwZmlsZS5QeVppcEZpbGUodCwgInciLCBvcHRpbWl6ZT1vcHRsZXZlbCkgYXMgemlwZnA6CisgICAgICAgICAgICAgemlwZmlsZS5QeVppcEZpbGUodCwgInciLCBvcHRpbWl6ZT1vcHRsZXZlbCkgYXMgemlwZnA6CiAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCiAKICAgICAgICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQpAQCAtNjMwLDYgKzY2MiwyNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQogCisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX2RpcmVjdG9yeV9maWx0ZXJlZChzZWxmKToKKyAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMS5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIgKiA0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShURVNURk4yLCBmaWx0ZXJmdW5jPWxhbWJkYSBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGZuLmVuZHN3aXRoKCdtb2QyLnB5JykpCisKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ21vZDEucHknLCBuYW1lcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QyLnB5JywgbmFtZXMpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKKwogICAgIGRlZiB0ZXN0X3dyaXRlX25vbl9weWZpbGUoc2VsZik6CiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CiAgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CkBAIC03MzMsMjUgKzc4NSwyNSBAQAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lc193aW5kb3dzX29ubHkoc2VsZik6CiAgICAgICAgICIiIlRlc3QgY29tYmluYXRpb24gb2YgcGF0aCBmaXhpbmcgYW5kIHdpbmRvd3MgbmFtZSBzYW5pdGl6YXRpb24uIiIiCiAgICAgICAgIHdpbmRvd3NfaGFja25hbWVzID0gWwotICAgICAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy4uXC9mb29cL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInZm9vL1wuLlwvYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Zm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vPy9DOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInYTpiXGM8ZD5lfGYiZz9oKmknLCAnYi9jX2RfZV9mX2dfaF9pJyksCi0gICAgICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKKyAgICAgICAgICAgIChyJy4uXGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLi5cL2Zvb1wvYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidmb29cLy4uL1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpmb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovL2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XG1vdW50cG9pbnRcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocicvLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvL2Nvbmt5Ly9tb3VudHBvaW50L2Zvby9iYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocidcXGNvbmt5XFxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCisgICAgICAgICAgICAocicvLz8vQzovZm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidcXD9cQzpcZm9vXGJhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi8uLi9DOi9mb28vYmFyJywgJ0NfL2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAorICAgICAgICAgICAgKCcuLi8uLi9mb28uLi8uLi9iYS4ucicsICdmb28vYmEuLnInKSwKICAgICAgICAgXQogICAgICAgICBzZWxmLl90ZXN0X2V4dHJhY3RfaGFja2Vyc19hcmNuYW1lcyh3aW5kb3dzX2hhY2tuYW1lcykKIApAQCAtODI3LDYgKzg3OSwxNyBAQAogICAgICAgICAgICAgICAgIGRhdGEgKz0gemlwZnAucmVhZChpbmZvKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkYXRhLCB7YiJmb29iYXIiLCBiImJhcmZvbyJ9KQogCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cignc3BhbS50eHQnLCBiJ2FiYWJhZ2FsYW1hZ2EnKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgbW9kZSBpbiAnVScsICdyVSc6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKCdzcGFtLnR4dCcsIG1vZGUpCisgICAgICAgICAgICAgICAgemlwb3Blbi5jbG9zZSgpCisKICAgICBkZWYgdGVzdF91bml2ZXJzYWxfcmVhZGFoZWFkcyhzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oKQogCkBAIC04MzYsNyArODk5LDcgQEAKIAogICAgICAgICBkYXRhMiA9IGInJwogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAncicpIGFzIHppcGZwLCBcCi0gICAgICAgICAgICAgemlwZnAub3BlbihURVNURk4sICdyVScpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgb3BlblUoemlwZnAsIFRFU1RGTikgYXMgemlwb3BlbjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIHppcG9wZW46CiAgICAgICAgICAgICAgICAgZGF0YTIgKz0gbGluZQogCkBAIC04NzcsMTAgKzk0MCwxMCBAQAogICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX3ZlcnNpb24oc2VsZik6CiAgICAgICAgICMgRmlsZSBoYXMgYW4gZXh0cmFjdF92ZXJzaW9uIG9mIDEyMAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNHhceDAwXHgwMFx4MDBceDAwXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNicKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhQS1x4MDFceDAyeFx4MDN4XHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMC9ceDAwXHgwMFx4MDBceDFmXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKQpAQCAtOTEzLDcgKzk3Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKSBhcyB6ZjoKICAgICAgICAgICAgICAgICB6Zi53cml0ZXN0cihmaWxlbmFtZSwgY29udGVudCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdDb3VsZCBub3QgYXBwZW5kIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgemlwIGZpbGUuJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKQEAgLTk4NSw3ICsxMDQ4LDcgQEAKICAgICAgICAgZnAuc2VlaygwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZmlsZS5pc196aXBmaWxlKGZwKSkKIAotICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19PU0Vycm9yKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCiAgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgogICAgICAgICAjIGJ1ZyAjNDAzODcxLgpAQCAtOTk3LDcgKzEwNjAsNyBAQAogICAgICAgICAjIGl0IGlzIGlnbm9yZWQsIGJ1dCB0aGUgdXNlciBzaG91bGQgYmUgc3VmZmljaWVudGx5IGFubm95ZWQgYnkKICAgICAgICAgIyB0aGUgbWVzc2FnZSBvbiB0aGUgb3V0cHV0IHRoYXQgcmVncmVzc2lvbiB3aWxsIGJlIG5vdGljZWQKICAgICAgICAgIyBxdWlja2x5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCiAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlX3JhaXNlc19CYWRaaXBGaWxlKHNlbGYpOgogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKQEAgLTEwNjYsMTEgKzExMjksMTEgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF9jb21wcmVzc2lvbihzZWxmKToKICAgICAgICAgIyBkYXRhIGlzIGRlY2xhcmVkIGFzIHNocnVuaywgYnV0IGFjdHVhbGx5IGRlZmxhdGVkCiAgICAgICAgIGRhdGEgPSAoYidQS1x4MDNceDA0Llx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJwotICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCi0gICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgICAgICAgICAgYidceDAwXHgwMlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAweFx4MDNceDAwUEtceDAxJworICAgICAgICAgICAgICAgIGInXHgwMi5ceDAzLlx4MDBceDAwXHgwMFx4MDFceDAwXHhlNENceGExQFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAnCisgICAgICAgICAgICAgICAgYicvXHgwMFx4MDBceDAwIVx4MDBceDAwXHgwMFx4MDBceDAwJykKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyhkYXRhKSwgJ3InKSBhcyB6aXBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgemlwZi5vcGVuLCAneCcpCiAKQEAgLTExODQsNyArMTI0Nyw3IEBACiAgICAgZGVmIHRlc3Rfb3Blbl9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE3MTA3MDM6IENoZWNrIHRoYXQgb3BlbmluZyBhIGZpbGUgd2l0aCBsZXNzIHRoYW4gMjIgYnl0ZXMKICAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBGaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCi0gICAgICAgICMgSU9FcnJvcikKKyAgICAgICAgIyBPU0Vycm9yKQogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKQEAgLTEyMzIsNTcgKzEyOTUsNTcgQEAKIGNsYXNzIFN0b3JlZEJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX1NUT1JFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXDAwM1wwMDRcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6cicKLSAgICAgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCi0gICAgICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCi0gICAgICAgICAgICBiJ0tcMDAxXDAwMlwwMjRcMDAzXDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OicKLSAgICAgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKLSAgICAgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCi0gICAgICAgICAgICBiJ2xlUEtcMDA1XDAwNlwwXDBcMFwwXDAwMVwwXDAwMVwwMDAzXDAwMCcKLSAgICAgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKKyAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCisgICAgICAgIGInXDI1M1wzNzdcZlwwXDBcMFxmXDBcMFwwXDAwNVwwXDBcMDAwYWYnCisgICAgICAgIGInaWxlaGVsbG8sQXdvcmxkUCcKKyAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCisgICAgICAgIGInclwyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDBcMCcKKyAgICAgICAgYidcMFwwXDBcMFwwXDBcMFwyMDBcMDAxXDBcMFwwXDAwMGFmaScKKyAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCisgICAgICAgIGInXDBcMC9cMFwwXDBcMFwwJykKIAogQHJlcXVpcmVzX3psaWIKIGNsYXNzIERlZmxhdGVCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9ERUZMQVRFRAogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCi0gICAgICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCi0gICAgICAgICAgICBiJ31ceDBjPUZBS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDUnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCi0gICAgICAgICAgICBiJ1x4MDFceDAwM1x4MDBceDAwXHgwMDNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMFx4MDBceDA4XHgwMG59XHgwYz1GQScKKyAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx4Y2JIXHhjZFx4YzlceGM5VyhceGNmL1x4Y2FJXHhjOVx4YTAnCisgICAgICAgIGInPVx4MTNceDAwUEtceDAxXHgwMlx4MTRceDAzXHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbicKKyAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgwMGFmaWxlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCcKKyAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQogCiBAcmVxdWlyZXNfYnoyCiBjbGFzcyBCemlwMkJhZENyY1Rlc3RzKEFic3RyYWN0QmFkQ3JjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX0JaSVAyCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlQlpoOTFBWSZTWVx4ZDRceGE4XHhjYScKLSAgICAgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKLSAgICAgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKLSAgICAgICAgICAgIGInXHg4Ylx4YjkiXHg5YyhIalRlP1x4ODBQS1x4MDFceDAyXHgxNCcKLSAgICAgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbGVQSycKLSAgICAgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRThceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCisgICAgICAgIGInXHg3Zlx4MDBceDAwXHgwZlx4MTFceDgwQFx4MDBceDA2RFx4OTBceDgwIFx4MDAgXHhhNScKKyAgICAgICAgYidQXHhkOSFceDAzXHgwM1x4MTNceDEzXHgxM1x4ODlceGE5XHhhOVx4YzJ1NTpceDlmJworICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCisgICAgICAgIGInXHgwM1x4MTRceDAzXHgwMFx4MDBceDBjXHgwMG51XHgwYz1GQUtFOCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCisgICAgICAgIGInXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMFx4MDBbXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2x6bWEKIGNsYXNzIEx6bWFCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAgICAgemlwX3dpdGhfYmFkX2NyYyA9ICgKLSAgICAgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKLSAgICAgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCi0gICAgICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJwotICAgICAgICAgICAgYidceDAxXHgwMlx4MTRceDAzXHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJwotICAgICAgICAgICAgYidlUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwJwotICAgICAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDNceDAwXHgwMFx4MGVceDAwbnVceDBjPUZBJworICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCisgICAgICAgIGInaWxlXHRceDA0XHgwNVx4MDBdXHgwMFx4MDBceDAwXHgwNFx4MDA0XHgxOUknCisgICAgICAgIGInXHhlZVx4OGRceGU5XHgxN1x4ODk6M2BcdHEhLjhceDAwUEsnCisgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWwnCisgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKKyAgICAgICAgYidceDAwPlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogCiBjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTI5MSwyMiArMTM1NCwyMiBAQAogICAgIFpJUCBmaWxlLiIiIgogCiAgICAgZGF0YSA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKLSAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCi0gICAgYidceDE4XHhlMFx4YThyXHhiM1p9TGdceGJjXHhhZVx4Zjl8XHg5Ylx4MTlceGU0XHg4Ylx4YmFceGJiKVx4OGNceGIwXHhkYmwnCi0gICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCi0gICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCi0gICAgYidceDAwXHgwMFx4MDBceDAwdGVzdC50eHRQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDA2XHgwMCcKLSAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJworICAgICAgICBiJ1x4MDBceDAwXHgwOFx4MDBceDAwXHgwMHRlc3QudHh0XHhmYVx4MTBceGEwZ2x5fFx4ZmEtXHhjNVx4YzA9XHhmOXknCisgICAgICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJworICAgICAgICBiJ1BLXHgwMVx4MDJceDE0XHgwMFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDFhXHgwMFx4MDBceDAwXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMCBceDAwXHhiNlx4ODEnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCisgICAgICAgIGInXHgwMFx4MDBMXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKICAgICBkYXRhMiA9ICgKLSAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCi0gICAgYidceDAwXHgwMFx4MDRceDAwXHgxNVx4MDB6ZXJvVVRcdFx4MDBceDAzXHhkNlx4OGJceDkyR1x4ZGFceDhiXHg5MkdVeFx4MDQnCi0gICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJwotICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKLSAgICBiJ1x4MTRceDAwXHRceDAwXHgwOFx4MDBceGNmfTM4eHVceGFhXHhiMlx4MTRceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJwotICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJwotICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJwotICAgIGInXHgwMFx4MDFceDAwP1x4MDBceDAwXHgwMFtceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDInCisgICAgICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JworICAgICAgICBiJ1x4MDBceGU4XHgwM1x4ZThceDAzXHhjNzxNXHhiNWFceGNlWFx4YTNZJlx4OGJ7b0VceGQ3XHg5ZFx4OGNceDk4XHgwMlx4YzAnCisgICAgICAgIGInUEtceDA3XHgwOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMFBLXHgwMVx4MDJceDE3XHgwMycKKyAgICAgICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKKyAgICAgICAgYidceDA0XHgwMFxyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwXHgwMFx4MDBceDAwemUnCisgICAgICAgIGIncm9VVFx4MDVceDAwXHgwM1x4ZDZceDhiXHg5MkdVeFx4MDBceDAwUEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxJworICAgICAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKIAogICAgIHBsYWluID0gYid6aXBmaWxlLnB5IGVuY3J5cHRpb24gdGVzdCcKICAgICBwbGFpbjIgPSBiJ1x4MDAnKjUxMgpAQCAtMTU2NSw3ICsxNjI4LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICB6aXBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKIApAQCAtMTU3OSw3ICsxNjQyLDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGInJwogICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQpAQCAtMTYwNCw3ICsxNjY3LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgYidcbicpCkBAIC0xNjE5LDcgKzE2ODIsNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHppcGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyBiJ1xuJykKQEAgLTE2MzQsNyArMTY5Nyw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIGZwKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQogCkBAIC0xNjY4LDYgKzE3MzEsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKaW5kZXggYThmYjdhYi4uNDk4ZDQ2NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlLgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PVRydWUpCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBJdCB3aWxsIGNvbnRhaW4gZW5vdWdoIGNvcGllcyBvZiBzZWxmLmRhdGEgdG8gcmVhY2ggYWJvdXQgNkdCIG9mCiAgICAgICAgICMgcmF3IGRhdGEgdG8gc3RvcmUuCkBAIC05Miw3ICs5Miw3IEBACiAgICAgZGVmIHRlc3RNb3JlVGhhbjY0a0ZpbGVzKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBtb3JlIHRoYW4gNjRrIGZpbGVzIGNhbiBiZSBhZGRlZCB0byBhbiBhcmNoaXZlLAogICAgICAgICAjIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjYW4gYmUgcmVhZCBwcm9wZXJseSBieSBaaXBGaWxlCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciLCBhbGxvd1ppcDY0PUZhbHNlKQogICAgICAgICB6aXBmLmRlYnVnID0gMTAwCiAgICAgICAgIG51bWZpbGVzID0gKDEgPDwgMTYpICogMy8vMgogICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CmluZGV4IGY3Y2I4YjkuLjNmMTYwNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5CkBAIC0xLDEzICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBtYXJzaGFsCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzdHJ1Y3QKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRob29rcyBpbXBvcnQgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UsIHRlc3Rfc3JjLCB0ZXN0X2NvCiAKIGZyb20gemlwZmlsZSBpbXBvcnQgWmlwRmlsZSwgWmlwSW5mbywgWklQX1NUT1JFRCwgWklQX0RFRkxBVEVECiAKQEAgLTE3LDYgKzE2LDE0IEBACiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IGlvCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZXh0cmFjdF90YiwgZXh0cmFjdF9zdGFjaywgcHJpbnRfdGIKKwordGVzdF9zcmMgPSAiIiJcCitkZWYgZ2V0X25hbWUoKToKKyAgICByZXR1cm4gX19uYW1lX18KK2RlZiBnZXRfZmlsZSgpOgorICAgIHJldHVybiBfX2ZpbGVfXworIiIiCit0ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQogcmFpc2Vfc3JjID0gJ2RlZiBkb19yYWlzZSgpOiByYWlzZSBUeXBlRXJyb3JcbicKIAogZGVmIG1ha2VfcHljKGNvLCBtdGltZSwgc2l6ZSk6CkBAIC0yNyw3ICszNCw4IEBACiAgICAgICAgICAgICBtdGltZSA9IGludChtdGltZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG10aW1lID0gaW50KC0weDEwMDAwMDAwMCArIGludChtdGltZSkpCi0gICAgcHljID0gaW1wLmdldF9tYWdpYygpICsgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEKKyAgICBweWMgPSAoaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSICsKKyAgICAgICAgc3RydWN0LnBhY2soIjxpaSIsIGludChtdGltZSksIHNpemUgJiAweEZGRkZGRkZGKSArIGRhdGEpCiAgICAgcmV0dXJuIHB5YwogCiBkZWYgbW9kdWxlX3BhdGhfdG9fZG90dGVkX25hbWUocGF0aCk6CkBAIC00MiwxMCArNTAsMjcgQEAKIFRFU1RQQUNLMiA9ICJ6aXB0ZXN0cGFja2FnZTIiCiBURU1QX1pJUCA9IG9zLnBhdGguYWJzcGF0aCgianVuazk1MTQyLnppcCIpCiAKLXB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKFRFU1RNT0QgKyAnLnB5JykKK3B5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQogcHljX2V4dCA9ICgnLnB5YycgaWYgX19kZWJ1Z19fIGVsc2UgJy5weW8nKQogCiAKK2NsYXNzIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCisgICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc2VsZi5tb2R1bGVzX2JlZm9yZSA9IHN1cHBvcnQubW9kdWxlc19zZXR1cCgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5wYXRoCisgICAgICAgIHN5cy5tZXRhX3BhdGhbOl0gPSBzZWxmLm1ldGFfcGF0aAorICAgICAgICBzeXMucGF0aF9ob29rc1s6XSA9IHNlbGYucGF0aF9ob29rcworICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCisgICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQorCisKIGNsYXNzIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKIAogICAgIGNvbXByZXNzaW9uID0gWklQX1NUT1JFRApAQCAtMTk2LDYgKzIyMSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJzcGFtIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtMjQ1LDYgKzI3MSw3IEBACiAgICAgICAgICAgICBmb3IgbmFtZSwgKG10aW1lLCBkYXRhKSBpbiBmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhuYW1lLCB0aW1lLmxvY2FsdGltZShtdGltZSkpCiAgICAgICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KKyAgICAgICAgICAgICAgICB6aW5mby5jb21tZW50ID0gYiJlZ2dzIgogICAgICAgICAgICAgICAgIHoud3JpdGVzdHIoemluZm8sIGRhdGEpCiAgICAgICAgICAgICB6LmNsb3NlKCkKIApAQCAtNDU5LDcgKzQ4Niw3IEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmxvYWRfbW9kdWxlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9jb2RlLCAnYWJjJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHouZ2V0X2RhdGEsICdhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvciwgei5nZXRfc291cmNlLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmlzX3BhY2thZ2UsICdhYmMnKQogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKaW5kZXggZjdmMzM5OC4uODRiYTVlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CkBAIC0yMjcsMTMgKzIyNywxNSBAQAogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbihzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHNjcmlwdF9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgInRlc3RfemlwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCAnX19tYWluX18ucHknKQogICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQogICAgICAgICAgICAgZGF0YSA9IGtpbGxfcHl0aG9uKHApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgICAgICMgYmRiL3BkYiBhcHBsaWVzIG5vcm1jYXNlIHRvIGl0cyBmaWxlbmFtZSBiZWZvcmUgZGlzcGxheWluZworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvcy5wYXRoLm5vcm1jYXNlKHJ1bl9uYW1lLmVuY29kZSgndXRmLTgnKSksIGRhdGEpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weSBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKaW5kZXggOTJlYmQ5NS4uYWZlNTBkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQorKysgYi9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAKICAgICB0cnk6CiAgICAgICAgIG9zLndyaXRlKGZkLCBiImJsYXQiKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBTdWNjZXNzIC0tIGNvdWxkIG5vdCB3cml0ZSB0byBmZC4KICAgICAgICAgc3lzLmV4aXQoMCkKICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3RleHR3cmFwLnB5IGIvTGliL3RleHR3cmFwLnB5CmluZGV4IDcwMjRkNGQuLjI0ODkxODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXh0d3JhcC5weQorKysgYi9MaWIvdGV4dHdyYXAucHkKQEAgLTcsNyArNyw3IEBACiAKIGltcG9ydCByZQogCi1fX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCddCitfX2FsbF9fID0gWydUZXh0V3JhcHBlcicsICd3cmFwJywgJ2ZpbGwnLCAnZGVkZW50JywgJ2luZGVudCcsICdzaG9ydGVuJ10KIAogIyBIYXJkY29kZSB0aGUgcmVjb2duaXplZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gdGhlIFVTLUFTQ0lJCiAjIHdoaXRlc3BhY2UgY2hhcmFjdGVycy4gIFRoZSBtYWluIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpcyB0aGF0IGluCkBAIC02Miw2ICs2MiwxMCBAQAogICAgICAgICBjb21wb3VuZCB3b3Jkcy4KICAgICAgIGRyb3Bfd2hpdGVzcGFjZSAoZGVmYXVsdDogdHJ1ZSkKICAgICAgICAgRHJvcCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbGluZXMuCisgICAgICBtYXhfbGluZXMgKGRlZmF1bHQ6IE5vbmUpCisgICAgICAgIFRydW5jYXRlIHdyYXBwZWQgbGluZXMuCisgICAgICBwbGFjZWhvbGRlciAoZGVmYXVsdDogJyBbLi4uXScpCisgICAgICAgIEFwcGVuZCB0byB0aGUgbGFzdCBsaW5lIG9mIHRydW5jYXRlZCB0ZXh0LgogICAgICIiIgogCiAgICAgdW5pY29kZV93aGl0ZXNwYWNlX3RyYW5zID0ge30KQEAgLTEwNCw3ICsxMDgsMTAgQEAKICAgICAgICAgICAgICAgICAgYnJlYWtfbG9uZ193b3Jkcz1UcnVlLAogICAgICAgICAgICAgICAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwKICAgICAgICAgICAgICAgICAgYnJlYWtfb25faHlwaGVucz1UcnVlLAotICAgICAgICAgICAgICAgICB0YWJzaXplPTgpOgorICAgICAgICAgICAgICAgICB0YWJzaXplPTgsCisgICAgICAgICAgICAgICAgICosCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz1Ob25lLAorICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFsuLi5dJyk6CiAgICAgICAgIHNlbGYud2lkdGggPSB3aWR0aAogICAgICAgICBzZWxmLmluaXRpYWxfaW5kZW50ID0gaW5pdGlhbF9pbmRlbnQKICAgICAgICAgc2VsZi5zdWJzZXF1ZW50X2luZGVudCA9IHN1YnNlcXVlbnRfaW5kZW50CkBAIC0xMTUsNiArMTIyLDggQEAKICAgICAgICAgc2VsZi5kcm9wX3doaXRlc3BhY2UgPSBkcm9wX3doaXRlc3BhY2UKICAgICAgICAgc2VsZi5icmVha19vbl9oeXBoZW5zID0gYnJlYWtfb25faHlwaGVucwogICAgICAgICBzZWxmLnRhYnNpemUgPSB0YWJzaXplCisgICAgICAgIHNlbGYubWF4X2xpbmVzID0gbWF4X2xpbmVzCisgICAgICAgIHNlbGYucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcgogCiAKICAgICAjIC0tIFByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjIzLDYgKzIzMiwxMyBAQAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIHNlbGYud2lkdGggPD0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgd2lkdGggJXIgKG11c3QgYmUgPiAwKSIgJSBzZWxmLndpZHRoKQorICAgICAgICBpZiBzZWxmLm1heF9saW5lcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYubWF4X2xpbmVzID4gMToKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSBzZWxmLnN1YnNlcXVlbnRfaW5kZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZGVudCA9IHNlbGYuaW5pdGlhbF9pbmRlbnQKKyAgICAgICAgICAgIGlmIGxlbihpbmRlbnQpICsgbGVuKHNlbGYucGxhY2Vob2xkZXIubHN0cmlwKCkpID4gc2VsZi53aWR0aDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwbGFjZWhvbGRlciB0b28gbGFyZ2UgZm9yIG1heCB3aWR0aCIpCiAKICAgICAgICAgIyBBcnJhbmdlIGluIHJldmVyc2Ugb3JkZXIgc28gaXRlbXMgY2FuIGJlIGVmZmljaWVudGx5IHBvcHBlZAogICAgICAgICAjIGZyb20gYSBzdGFjayBvZiBjaHVja3MuCkBAIC0yNjUsMTggKzI4MSw0NyBAQAogICAgICAgICAgICAgIyBmaXQgb24gKmFueSogbGluZSAobm90IGp1c3QgdGhpcyBvbmUpLgogICAgICAgICAgICAgaWYgY2h1bmtzIGFuZCBsZW4oY2h1bmtzWy0xXSkgPiB3aWR0aDoKICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfbG9uZ193b3JkKGNodW5rcywgY3VyX2xpbmUsIGN1cl9sZW4sIHdpZHRoKQorICAgICAgICAgICAgICAgIGN1cl9sZW4gPSBzdW0obWFwKGxlbiwgY3VyX2xpbmUpKQogCiAgICAgICAgICAgICAjIElmIHRoZSBsYXN0IGNodW5rIG9uIHRoaXMgbGluZSBpcyBhbGwgd2hpdGVzcGFjZSwgZHJvcCBpdC4KICAgICAgICAgICAgIGlmIHNlbGYuZHJvcF93aGl0ZXNwYWNlIGFuZCBjdXJfbGluZSBhbmQgY3VyX2xpbmVbLTFdLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICAgICAgY3VyX2xlbiAtPSBsZW4oY3VyX2xpbmVbLTFdKQogICAgICAgICAgICAgICAgIGRlbCBjdXJfbGluZVstMV0KIAotICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbiBsaXN0Ci0gICAgICAgICAgICAjIG9mIGFsbCBsaW5lcyAocmV0dXJuIHZhbHVlKS4KICAgICAgICAgICAgIGlmIGN1cl9saW5lOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICBpZiAoc2VsZi5tYXhfbGluZXMgaXMgTm9uZSBvcgorICAgICAgICAgICAgICAgICAgICBsZW4obGluZXMpICsgMSA8IHNlbGYubWF4X2xpbmVzIG9yCisgICAgICAgICAgICAgICAgICAgIChub3QgY2h1bmtzIG9yCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmRyb3Bfd2hpdGVzcGFjZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIGxlbihjaHVua3MpID09IDEgYW5kCisgICAgICAgICAgICAgICAgICAgICBub3QgY2h1bmtzWzBdLnN0cmlwKCkpIGFuZCBjdXJfbGVuIDw9IHdpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgIyBDb252ZXJ0IGN1cnJlbnQgbGluZSBiYWNrIHRvIGEgc3RyaW5nIGFuZCBzdG9yZSBpdCBpbgorICAgICAgICAgICAgICAgICAgICAjIGxpc3Qgb2YgYWxsIGxpbmVzIChyZXR1cm4gdmFsdWUpLgorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgY3VyX2xpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyX2xpbmVbLTFdLnN0cmlwKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xlbiArIGxlbihzZWxmLnBsYWNlaG9sZGVyKSA8PSB3aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2xpbmUuYXBwZW5kKHNlbGYucGxhY2Vob2xkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGVuIC09IGxlbihjdXJfbGluZVstMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwgY3VyX2xpbmVbLTFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2xpbmUgPSBsaW5lc1stMV0ucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuKHByZXZfbGluZSkgKyBsZW4oc2VsZi5wbGFjZWhvbGRlcikgPD0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1stMV0gPSBwcmV2X2xpbmUgKyBzZWxmLnBsYWNlaG9sZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgc2VsZi5wbGFjZWhvbGRlci5sc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICByZXR1cm4gbGluZXMKIAorICAgIGRlZiBfc3BsaXRfY2h1bmtzKHNlbGYsIHRleHQpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXQodGV4dCkKIAogICAgICMgLS0gUHVibGljIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI4OSw4ICszMzQsNyBAQAogICAgICAgICBhbmQgYWxsIG90aGVyIHdoaXRlc3BhY2UgY2hhcmFjdGVycyAoaW5jbHVkaW5nIG5ld2xpbmUpIGFyZQogICAgICAgICBjb252ZXJ0ZWQgdG8gc3BhY2UuCiAgICAgICAgICIiIgotICAgICAgICB0ZXh0ID0gc2VsZi5fbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0KQotICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdCh0ZXh0KQorICAgICAgICBjaHVua3MgPSBzZWxmLl9zcGxpdF9jaHVua3ModGV4dCkKICAgICAgICAgaWYgc2VsZi5maXhfc2VudGVuY2VfZW5kaW5nczoKICAgICAgICAgICAgIHNlbGYuX2ZpeF9zZW50ZW5jZV9lbmRpbmdzKGNodW5rcykKICAgICAgICAgcmV0dXJuIHNlbGYuX3dyYXBfY2h1bmtzKGNodW5rcykKQEAgLTMzMiw2ICszNzYsMjEgQEAKICAgICB3ID0gVGV4dFdyYXBwZXIod2lkdGg9d2lkdGgsICoqa3dhcmdzKQogICAgIHJldHVybiB3LmZpbGwodGV4dCkKIAorZGVmIHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKToKKyAgICAiIiJDb2xsYXBzZSBhbmQgdHJ1bmNhdGUgdGhlIGdpdmVuIHRleHQgdG8gZml0IGluIHRoZSBnaXZlbiB3aWR0aC4KKworICAgIFRoZSB0ZXh0IGZpcnN0IGhhcyBpdHMgd2hpdGVzcGFjZSBjb2xsYXBzZWQuICBJZiBpdCB0aGVuIGZpdHMgaW4KKyAgICB0aGUgKndpZHRoKiwgaXQgaXMgcmV0dXJuZWQgYXMgaXMuICBPdGhlcndpc2UsIGFzIG1hbnkgd29yZHMKKyAgICBhcyBwb3NzaWJsZSBhcmUgam9pbmVkIGFuZCB0aGVuIHRoZSBwbGFjZWhvbGRlciBpcyBhcHBlbmRlZDo6CisKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMikKKyAgICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgICAgPj4+IHRleHR3cmFwLnNob3J0ZW4oIkhlbGxvICB3b3JsZCEiLCB3aWR0aD0xMSkKKyAgICAgICAgJ0hlbGxvIFsuLi5dJworICAgICIiIgorICAgIHcgPSBUZXh0V3JhcHBlcih3aWR0aD13aWR0aCwgbWF4X2xpbmVzPTEsICoqa3dhcmdzKQorICAgIHJldHVybiB3LmZpbGwoJyAnLmpvaW4odGV4dC5zdHJpcCgpLnNwbGl0KCkpKQorCiAKICMgLS0gTG9vc2VseSByZWxhdGVkIGZ1bmN0aW9uYWxpdHkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9MaWIvdGhyZWFkaW5nLnB5IGIvTGliL3RocmVhZGluZy5weQppbmRleCA2MjVjOWI5Li5kOTA3Yzg5IDEwMDY0NAotLS0gYS9MaWIvdGhyZWFkaW5nLnB5CisrKyBiL0xpYi90aHJlYWRpbmcucHkKQEAgLTEwLDYgKzEwLDExIEBACiAgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YyBhcyBfZm9ybWF0X2V4YwogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZSBhcyBfaXNsaWNlCit0cnk6CisgICAgZnJvbSBfY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlIGFzIF9kZXF1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlIGFzIF9kZXF1ZQogCiAjIE5vdGUgcmVnYXJkaW5nIFBFUCA4IGNvbXBsaWFudCBuYW1lcwogIyAgVGhpcyB0aHJlYWRpbmcgbW9kZWwgd2FzIG9yaWdpbmFsbHkgaW5zcGlyZWQgYnkgSmF2YSwgYW5kIGluaGVyaXRlZApAQCAtMjgsNiArMzMsNyBAQAogIyBSZW5hbWUgc29tZSBzdHVmZiBzbyAiZnJvbSB0aHJlYWRpbmcgaW1wb3J0ICoiIGlzIHNhZmUKIF9zdGFydF9uZXdfdGhyZWFkID0gX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkCiBfYWxsb2NhdGVfbG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jaworX3NldF9zZW50aW5lbCA9IF90aHJlYWQuX3NldF9zZW50aW5lbAogZ2V0X2lkZW50ID0gX3RocmVhZC5nZXRfaWRlbnQKIFRocmVhZEVycm9yID0gX3RocmVhZC5lcnJvcgogdHJ5OgpAQCAtMTMyLDcgKzEzOCw3IEBACiAgICAgICAgICIiIgogICAgICAgICBtZSA9IGdldF9pZGVudCgpCiAgICAgICAgIGlmIHNlbGYuX293bmVyID09IG1lOgotICAgICAgICAgICAgc2VsZi5fY291bnQgPSBzZWxmLl9jb3VudCArIDEKKyAgICAgICAgICAgIHNlbGYuX2NvdW50ICs9IDEKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIHJjID0gc2VsZi5fYmxvY2suYWNxdWlyZShibG9ja2luZywgdGltZW91dCkKICAgICAgICAgaWYgcmM6CkBAIC0yMjQsNyArMjMwLDcgQEAKICAgICAgICAgICAgIHNlbGYuX2lzX293bmVkID0gbG9jay5faXNfb3duZWQKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLl93YWl0ZXJzID0gW10KKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IF9kZXF1ZSgpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fbG9jay5fX2VudGVyX18oKQpAQCAtMzMyLDE0ICszMzgsMTQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLl9pc19vd25lZCgpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2siKQotICAgICAgICBfX3dhaXRlcnMgPSBzZWxmLl93YWl0ZXJzCi0gICAgICAgIHdhaXRlcnMgPSBfX3dhaXRlcnNbOm5dCi0gICAgICAgIGlmIG5vdCB3YWl0ZXJzOgorICAgICAgICBhbGxfd2FpdGVycyA9IHNlbGYuX3dhaXRlcnMKKyAgICAgICAgd2FpdGVyc190b19ub3RpZnkgPSBfZGVxdWUoX2lzbGljZShhbGxfd2FpdGVycywgbikpCisgICAgICAgIGlmIG5vdCB3YWl0ZXJzX3RvX25vdGlmeToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyc190b19ub3RpZnk6CiAgICAgICAgICAgICB3YWl0ZXIucmVsZWFzZSgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgX193YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICAgICAgYWxsX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIApAQCAtNDE0LDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLndhaXQodGltZW91dCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSAtIDEKKyAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCiAgICAgICAgICAgICAgICAgcmMgPSBUcnVlCiAgICAgICAgIHJldHVybiByYwogCkBAIC00MjgsNyArNDM0LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9jb25kOgotICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSArIDEKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlICs9IDEKICAgICAgICAgICAgIHNlbGYuX2NvbmQubm90aWZ5KCkKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CkBAIC03MjMsMTUgKzcyOSwxMyBAQAogX2NvdW50ZXIgPSAwCiBkZWYgX25ld25hbWUodGVtcGxhdGU9IlRocmVhZC0lZCIpOgogICAgIGdsb2JhbCBfY291bnRlcgotICAgIF9jb3VudGVyID0gX2NvdW50ZXIgKyAxCisgICAgX2NvdW50ZXIgKz0gMQogICAgIHJldHVybiB0ZW1wbGF0ZSAlIF9jb3VudGVyCiAKICMgQWN0aXZlIHRocmVhZCBhZG1pbmlzdHJhdGlvbgogX2FjdGl2ZV9saW1ib19sb2NrID0gX2FsbG9jYXRlX2xvY2soKQogX2FjdGl2ZSA9IHt9ICAgICMgbWFwcyB0aHJlYWQgaWQgdG8gVGhyZWFkIG9iamVjdAogX2xpbWJvID0ge30KLQotIyBGb3IgZGVidWcgYW5kIGxlYWsgdGVzdGluZwogX2RhbmdsaW5nID0gV2Vha1NldCgpCiAKICMgTWFpbiBjbGFzcyBmb3IgdGhyZWFkcwpAQCAtNzkwLDI4ICs3OTQsMzUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gY3VycmVudF90aHJlYWQoKS5kYWVtb24KICAgICAgICAgc2VsZi5faWRlbnQgPSBOb25lCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkID0gRXZlbnQoKQotICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fYmxvY2sgPSBDb25kaXRpb24oTG9jaygpKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZWQgPSBUcnVlCiAgICAgICAgICMgc3lzLnN0ZGVyciBpcyBub3Qgc3RvcmVkIGluIHRoZSBjbGFzcyBsaWtlCiAgICAgICAgICMgc3lzLmV4Y19pbmZvIHNpbmNlIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gaW5zdGFuY2VzCiAgICAgICAgIHNlbGYuX3N0ZGVyciA9IF9zeXMuc3RkZXJyCisgICAgICAgICMgRm9yIGRlYnVnZ2luZyBhbmQgX2FmdGVyX2ZvcmsoKQogICAgICAgICBfZGFuZ2xpbmcuYWRkKHNlbGYpCiAKLSAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZiwgaXNfYWxpdmUpOgogICAgICAgICAjIHByaXZhdGUhICBDYWxsZWQgYnkgX2FmdGVyX2ZvcmsoKSB0byByZXNldCBvdXIgaW50ZXJuYWwgbG9ja3MgYXMKICAgICAgICAgIyB0aGV5IG1heSBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGxlYWRpbmcgdG8gYSBkZWFkbG9jayBvciBjcmFzaC4KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2Jsb2NrJyk6ICAjIER1bW15VGhyZWFkIGRlbGV0ZXMgX2Jsb2NrCi0gICAgICAgICAgICBzZWxmLl9ibG9jay5fX2luaXRfXygpCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKKyAgICAgICAgaWYgaXNfYWxpdmU6CisgICAgICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgdGhyZWFkIGlzbid0IGFsaXZlIGFmdGVyIGZvcms6IGl0IGRvZXNuJ3QgaGF2ZSBhIHRzdGF0ZQorICAgICAgICAgICAgIyBhbnltb3JlLgorICAgICAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCIKICAgICAgICAgc3RhdHVzID0gImluaXRpYWwiCiAgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CiAgICAgICAgICAgICBzdGF0dXMgPSAic3RhcnRlZCIKLSAgICAgICAgaWYgc2VsZi5fc3RvcHBlZDoKKyAgICAgICAgc2VsZi5pc19hbGl2ZSgpICMgZWFzeSB3YXkgdG8gZ2V0IC5faXNfc3RvcHBlZCBzZXQgd2hlbiBhcHByb3ByaWF0ZQorICAgICAgICBpZiBzZWxmLl9pc19zdG9wcGVkOgogICAgICAgICAgICAgc3RhdHVzID0gInN0b3BwZWQiCiAgICAgICAgIGlmIHNlbGYuX2RhZW1vbmljOgogICAgICAgICAgICAgc3RhdHVzICs9ICIgZGFlbW9uIgpAQCAtODg0LDkgKzg5NSwxOCBAQAogICAgIGRlZiBfc2V0X2lkZW50KHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudCA9IGdldF9pZGVudCgpCiAKKyAgICBkZWYgX3NldF90c3RhdGVfbG9jayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCBhIGxvY2sgb2JqZWN0IHdoaWNoIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIGludGVycHJldGVyIHdoZW4KKyAgICAgICAgdGhlIHVuZGVybHlpbmcgdGhyZWFkIHN0YXRlIChzZWUgcHlzdGF0ZS5oKSBnZXRzIGRlbGV0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IF9zZXRfc2VudGluZWwoKQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jay5hY3F1aXJlKCkKKwogICAgIGRlZiBfYm9vdHN0cmFwX2lubmVyKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQorICAgICAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgogICAgICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgpAQCAtOTQxLDcgKzk2MSw2IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgd2l0aCBfYWN0aXZlX2xpbWJvX2xvY2s6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIGRvbid0IGNhbGwgc2VsZi5fZGVsZXRlKCkgYmVjYXVzZSBpdCBhbHNvCiAgICAgICAgICAgICAgICAgICAgICMgZ3JhYnMgX2FjdGl2ZV9saW1ib19sb2NrLgpAQCAtOTUwLDEwICs5NjksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9zdG9wKHNlbGYpOgotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5fc3RvcHBlZCA9IFRydWUKLSAgICAgICAgc2VsZi5fYmxvY2subm90aWZ5X2FsbCgpCi0gICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICAjIEFmdGVyIGNhbGxpbmcgLl9zdG9wKCksIC5pc19hbGl2ZSgpIHJldHVybnMgRmFsc2UgYW5kIC5qb2luKCkgcmV0dXJucworICAgICAgICAjIGltbWVkaWF0ZWx5LiAgLl90c3RhdGVfbG9jayBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBjYWxsaW5nIC5fc3RvcCgpLgorICAgICAgICAjCisgICAgICAgICMgTm9ybWFsIGNhc2U6ICBDIGNvZGUgYXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZQorICAgICAgICAjIChyZWxlYXNlX3NlbnRpbmVsIGluIF90aHJlYWRtb2R1bGUuYykgcmVsZWFzZXMgLl90c3RhdGVfbG9jaywgYW5kCisgICAgICAgICMgdGhhdCdzIGRldGVjdGVkIGJ5IG91ciAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCksIGNhbGxlZCBieSAuam9pbigpCisgICAgICAgICMgYW5kIC5pc19hbGl2ZSgpLiAgQW55IG51bWJlciBvZiB0aHJlYWRzIF9tYXlfIGNhbGwgLl9zdG9wKCkKKyAgICAgICAgIyBzaW11bHRhbmVvdXNseSAoZm9yIGV4YW1wbGUsIGlmIG11bHRpcGxlIHRocmVhZHMgYXJlIGJsb2NrZWQgaW4KKyAgICAgICAgIyAuam9pbigpIGNhbGxzKSwgYW5kIHRoZXkncmUgbm90IHNlcmlhbGl6ZWQuICBUaGF0J3MgaGFybWxlc3MgLQorICAgICAgICAjIHRoZXknbGwganVzdCBtYWtlIHJlZHVuZGFudCByZWJpbmRpbmdzIG9mIC5faXNfc3RvcHBlZCBhbmQKKyAgICAgICAgIyAuX3RzdGF0ZV9sb2NrLiAgT2JzY3VyZTogIHdlIHJlYmluZCAuX3RzdGF0ZV9sb2NrIGxhc3Qgc28gdGhhdCB0aGUKKyAgICAgICAgIyAiYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQiIGluIC5fd2FpdF9mb3JfdHN0YXRlX2xvY2soKSBhbHdheXMgd29ya3MKKyAgICAgICAgIyAodGhlIGFzc2VydCBpcyBleGVjdXRlZCBvbmx5IGlmIC5fdHN0YXRlX2xvY2sgaXMgTm9uZSkuCisgICAgICAgICMKKyAgICAgICAgIyBTcGVjaWFsIGNhc2U6ICBfbWFpbl90aHJlYWQgcmVsZWFzZXMgLl90c3RhdGVfbG9jayB2aWEgdGhpcworICAgICAgICAjIG1vZHVsZSdzIF9zaHV0ZG93bigpIGZ1bmN0aW9uLgorICAgICAgICBsb2NrID0gc2VsZi5fdHN0YXRlX2xvY2sKKyAgICAgICAgaWYgbG9jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFzc2VydCBub3QgbG9jay5sb2NrZWQoKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gVHJ1ZQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IE5vbmUKIAogICAgIGRlZiBfZGVsZXRlKHNlbGYpOgogICAgICAgICAiUmVtb3ZlIGN1cnJlbnQgdGhyZWFkIGZyb20gdGhlIGRpY3Qgb2YgY3VycmVudGx5IHJ1bm5pbmcgdGhyZWFkcy4iCkBAIC0xMDIxLDIwICsxMDU3LDI2IEBACiAgICAgICAgIGlmIHNlbGYgaXMgY3VycmVudF90aHJlYWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IGpvaW4gY3VycmVudCB0aHJlYWQiKQogCi0gICAgICAgIHNlbGYuX2Jsb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Jsb2NrLndhaXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBkZWFkbGluZSA9IF90aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3BwZWQ6Ci0gICAgICAgICAgICAgICAgICAgIGRlbGF5ID0gZGVhZGxpbmUgLSBfdGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIGRlbGF5IDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KGRlbGF5KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fYmxvY2sucmVsZWFzZSgpCisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGJlaGF2aW9yIG9mIGEgbmVnYXRpdmUgdGltZW91dCBpc24ndCBkb2N1bWVudGVkLCBidXQKKyAgICAgICAgICAgICMgaGlzdG9yaWNhbGx5IC5qb2luKHRpbWVvdXQ9eCkgZm9yIHg8MCBoYXMgYWN0ZWQgYXMgaWYgdGltZW91dD0wCisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayh0aW1lb3V0PW1heCh0aW1lb3V0LCAwKSkKKworICAgIGRlZiBfd2FpdF9mb3JfdHN0YXRlX2xvY2soc2VsZiwgYmxvY2s9VHJ1ZSwgdGltZW91dD0tMSk6CisgICAgICAgICMgSXNzdWUgIzE4ODA4OiB3YWl0IGZvciB0aGUgdGhyZWFkIHN0YXRlIHRvIGJlIGdvbmUuCisgICAgICAgICMgQXQgdGhlIGVuZCBvZiB0aGUgdGhyZWFkJ3MgbGlmZSwgYWZ0ZXIgYWxsIGtub3dsZWRnZSBvZiB0aGUgdGhyZWFkCisgICAgICAgICMgaXMgcmVtb3ZlZCBmcm9tIEMgZGF0YSBzdHJ1Y3R1cmVzLCBDIGNvZGUgcmVsZWFzZXMgb3VyIF90c3RhdGVfbG9jay4KKyAgICAgICAgIyBUaGlzIG1ldGhvZCBwYXNzZXMgaXRzIGFyZ3VtZW50cyB0byBfdHN0YXRlX2xvY2suYXF1aXJlKCkuCisgICAgICAgICMgSWYgdGhlIGxvY2sgaXMgYWNxdWlyZWQsIHRoZSBDIGNvZGUgaXMgZG9uZSwgYW5kIHNlbGYuX3N0b3AoKSBpcworICAgICAgICAjIGNhbGxlZC4gIFRoYXQgc2V0cyAuX2lzX3N0b3BwZWQgdG8gVHJ1ZSwgYW5kIC5fdHN0YXRlX2xvY2sgdG8gTm9uZS4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgTm9uZTogICMgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQgdGhlIEMgY29kZSBpcyBkb25lCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5faXNfc3RvcHBlZAorICAgICAgICBlbGlmIGxvY2suYWNxdWlyZShibG9jaywgdGltZW91dCk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5fc3RvcCgpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgbmFtZShzZWxmKToKQEAgLTEwNzMsNyArMTExNSwxMCBAQAogCiAgICAgICAgICIiIgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSBub3QgY2FsbGVkIgotICAgICAgICByZXR1cm4gc2VsZi5fc3RhcnRlZC5pc19zZXQoKSBhbmQgbm90IHNlbGYuX3N0b3BwZWQKKyAgICAgICAgaWYgc2VsZi5faXNfc3RvcHBlZCBvciBub3Qgc2VsZi5fc3RhcnRlZC5pc19zZXQoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jayhGYWxzZSkKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9pc19zdG9wcGVkCiAKICAgICBpc0FsaXZlID0gaXNfYWxpdmUKIApAQCAtMTE0OSwyNSArMTE5NCwxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iTWFpblRocmVhZCIsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgogCi0gICAgZGVmIF9leGl0ZnVuYyhzZWxmKToKLSAgICAgICAgc2VsZi5fc3RvcCgpCi0gICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICB3aGlsZSB0OgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICBzZWxmLl9kZWxldGUoKQotCi1kZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6Ci0gICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6Ci0gICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHQKLSAgICByZXR1cm4gTm9uZQotCiAKICMgRHVtbXkgdGhyZWFkIGNsYXNzIHRvIHJlcHJlc2VudCB0aHJlYWRzIG5vdCBzdGFydGVkIGhlcmUuCiAjIFRoZXNlIGFyZW4ndCBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIHRoZXkgZGllLCBub3IgY2FuIHRoZXkgYmUgd2FpdGVkIGZvci4KQEAgLTExODIsMTEgKzEyMTQsNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9X25ld25hbWUoIkR1bW15LSVkIiksIGRhZW1vbj1UcnVlKQogCi0gICAgICAgICMgVGhyZWFkLl9ibG9jayBjb25zdW1lcyBhbiBPUy1sZXZlbCBsb2NraW5nIHByaW1pdGl2ZSwgd2hpY2gKLSAgICAgICAgIyBjYW4gbmV2ZXIgYmUgdXNlZCBieSBhIF9EdW1teVRocmVhZC4gIFNpbmNlIGEgX0R1bW15VGhyZWFkCi0gICAgICAgICMgaW5zdGFuY2UgaXMgaW1tb3J0YWwsIHRoYXQncyBiYWQsIHNvIHJlbGVhc2UgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgZGVsIHNlbGYuX2Jsb2NrCi0KICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKQEAgLTEyNDgsNyArMTI3NSw0MCBAQAogIyBhbmQgbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRoZSBpbnRlcnByZXRlcgogIyAoUHlfTWFpbikgYXMgdGhyZWFkaW5nLl9zaHV0ZG93bi4KIAotX3NodXRkb3duID0gX01haW5UaHJlYWQoKS5fZXhpdGZ1bmMKK19tYWluX3RocmVhZCA9IF9NYWluVGhyZWFkKCkKKworZGVmIF9zaHV0ZG93bigpOgorICAgICMgT2JzY3VyZTogIG90aGVyIHRocmVhZHMgbWF5IGJlIHdhaXRpbmcgdG8gam9pbiBfbWFpbl90aHJlYWQuICBUaGF0J3MKKyAgICAjIGR1YmlvdXMsIGJ1dCBzb21lIGNvZGUgZG9lcyBpdC4gIFdlIGNhbid0IHdhaXQgZm9yIEMgY29kZSB0byByZWxlYXNlCisgICAgIyB0aGUgbWFpbiB0aHJlYWQncyB0c3RhdGVfbG9jayAtIHRoYXQgd29uJ3QgaGFwcGVuIHVudGlsIHRoZSBpbnRlcnByZXRlcgorICAgICMgaXMgbmVhcmx5IGRlYWQuICBTbyB3ZSByZWxlYXNlIGl0IGhlcmUuICBOb3RlIHRoYXQganVzdCBjYWxsaW5nIF9zdG9wKCkKKyAgICAjIGlzbid0IGVub3VnaDogIG90aGVyIHRocmVhZHMgbWF5IGFscmVhZHkgYmUgd2FpdGluZyBvbiBfdHN0YXRlX2xvY2suCisgICAgdGxvY2sgPSBfbWFpbl90aHJlYWQuX3RzdGF0ZV9sb2NrCisgICAgIyBUaGUgbWFpbiB0aHJlYWQgaXNuJ3QgZmluaXNoZWQgeWV0LCBzbyBpdHMgdGhyZWFkIHN0YXRlIGxvY2sgY2FuJ3QgaGF2ZQorICAgICMgYmVlbiByZWxlYXNlZC4KKyAgICBhc3NlcnQgdGxvY2sgaXMgbm90IE5vbmUKKyAgICBhc3NlcnQgdGxvY2subG9ja2VkKCkKKyAgICB0bG9jay5yZWxlYXNlKCkKKyAgICBfbWFpbl90aHJlYWQuX3N0b3AoKQorICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIHdoaWxlIHQ6CisgICAgICAgIHQuam9pbigpCisgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIF9tYWluX3RocmVhZC5fZGVsZXRlKCkKKworZGVmIF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpOgorICAgIGZvciB0IGluIGVudW1lcmF0ZSgpOgorICAgICAgICBpZiBub3QgdC5kYWVtb24gYW5kIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1haW5fdGhyZWFkKCk6CisgICAgIiIiUmV0dXJuIHRoZSBtYWluIHRocmVhZCBvYmplY3QuCisKKyAgICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUKKyAgICBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQuCisgICAgIiIiCisgICAgcmV0dXJuIF9tYWluX3RocmVhZAogCiAjIGdldCB0aHJlYWQtbG9jYWwgaW1wbGVtZW50YXRpb24sIGVpdGhlciBmcm9tIHRoZSB0aHJlYWQKICMgbW9kdWxlLCBvciBmcm9tIHRoZSBweXRob24gZmFsbGJhY2sKQEAgLTEyNjYsMjUgKzEzMjYsMzEgQEAKIAogICAgICMgUmVzZXQgX2FjdGl2ZV9saW1ib19sb2NrLCBpbiBjYXNlIHdlIGZvcmtlZCB3aGlsZSB0aGUgbG9jayB3YXMgaGVsZAogICAgICMgYnkgYW5vdGhlciAobm9uLWZvcmtlZCkgdGhyZWFkLiAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3NDkwMAotICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2sKKyAgICBnbG9iYWwgX2FjdGl2ZV9saW1ib19sb2NrLCBfbWFpbl90aHJlYWQKICAgICBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiAKICAgICAjIGZvcmsoKSBvbmx5IGNvcGllZCB0aGUgY3VycmVudCB0aHJlYWQ7IGNsZWFyIHJlZmVyZW5jZXMgdG8gb3RoZXJzLgogICAgIG5ld19hY3RpdmUgPSB7fQogICAgIGN1cnJlbnQgPSBjdXJyZW50X3RocmVhZCgpCisgICAgX21haW5fdGhyZWFkID0gY3VycmVudAogICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICBmb3IgdGhyZWFkIGluIF9lbnVtZXJhdGUoKToKKyAgICAgICAgIyBEYW5nbGluZyB0aHJlYWQgaW5zdGFuY2VzIG11c3Qgc3RpbGwgaGF2ZSB0aGVpciBsb2NrcyByZXNldCwKKyAgICAgICAgIyBiZWNhdXNlIHNvbWVvbmUgbWF5IGpvaW4oKSB0aGVtLgorICAgICAgICB0aHJlYWRzID0gc2V0KF9lbnVtZXJhdGUoKSkKKyAgICAgICAgdGhyZWFkcy51cGRhdGUoX2RhbmdsaW5nKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAjIEFueSBsb2NrL2NvbmRpdGlvbiB2YXJpYWJsZSBtYXkgYmUgY3VycmVudGx5IGxvY2tlZCBvciBpbiBhbgogICAgICAgICAgICAgIyBpbnZhbGlkIHN0YXRlLCBzbyB3ZSByZWluaXRpYWxpemUgdGhlbS4KLSAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQogICAgICAgICAgICAgaWYgdGhyZWFkIGlzIGN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBhY3RpdmUgdGhyZWFkLiBXZSByZXNldCB0aGUgaWRlbnQgdG8KICAgICAgICAgICAgICAgICAjIGl0cyBuZXcgdmFsdWUgc2luY2UgaXQgY2FuIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKFRydWUpCiAgICAgICAgICAgICAgICAgaWRlbnQgPSBnZXRfaWRlbnQoKQogICAgICAgICAgICAgICAgIHRocmVhZC5faWRlbnQgPSBpZGVudAogICAgICAgICAgICAgICAgIG5ld19hY3RpdmVbaWRlbnRdID0gdGhyZWFkCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQWxsIHRoZSBvdGhlcnMgYXJlIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKEZhbHNlKQogICAgICAgICAgICAgICAgIHRocmVhZC5fc3RvcCgpCiAKICAgICAgICAgX2xpbWJvLmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90aW1laXQucHkgYi9MaWIvdGltZWl0LnB5CmluZGV4IDRmN2QyOGYuLmVhZDIwMzAgMTAwNjQ0Ci0tLSBhL0xpYi90aW1laXQucHkKKysrIGIvTGliL3RpbWVpdC5weQpAQCAtMzEsMzggKzMxLDI5IEBACiBJZiAtbiBpcyBub3QgZ2l2ZW4sIGEgc3VpdGFibGUgbnVtYmVyIG9mIGxvb3BzIGlzIGNhbGN1bGF0ZWQgYnkgdHJ5aW5nCiBzdWNjZXNzaXZlIHBvd2VycyBvZiAxMCB1bnRpbCB0aGUgdG90YWwgdGltZSBpcyBhdCBsZWFzdCAwLjIgc2Vjb25kcy4KIAotVGhlIGRpZmZlcmVuY2UgaW4gZGVmYXVsdCB0aW1lciBmdW5jdGlvbiBpcyBiZWNhdXNlIG9uIFdpbmRvd3MsCi1jbG9jaygpIGhhcyBtaWNyb3NlY29uZCBncmFudWxhcml0eSBidXQgdGltZSgpJ3MgZ3JhbnVsYXJpdHkgaXMgMS82MHRoCi1vZiBhIHNlY29uZDsgb24gVW5peCwgY2xvY2soKSBoYXMgMS8xMDB0aCBvZiBhIHNlY29uZCBncmFudWxhcml0eSBhbmQKLXRpbWUoKSBpcyBtdWNoIG1vcmUgcHJlY2lzZS4gIE9uIGVpdGhlciBwbGF0Zm9ybSwgdGhlIGRlZmF1bHQgdGltZXIKLWZ1bmN0aW9ucyBtZWFzdXJlIHdhbGwgY2xvY2sgdGltZSwgbm90IHRoZSBDUFUgdGltZS4gIFRoaXMgbWVhbnMgdGhhdAotb3RoZXIgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIHNhbWUgY29tcHV0ZXIgbWF5IGludGVyZmVyZSB3aXRoIHRoZQotdGltaW5nLiAgVGhlIGJlc3QgdGhpbmcgdG8gZG8gd2hlbiBhY2N1cmF0ZSB0aW1pbmcgaXMgbmVjZXNzYXJ5IGlzIHRvCi1yZXBlYXQgdGhlIHRpbWluZyBhIGZldyB0aW1lcyBhbmQgdXNlIHRoZSBiZXN0IHRpbWUuICBUaGUgLXIgb3B0aW9uIGlzCi1nb29kIGZvciB0aGlzOyB0aGUgZGVmYXVsdCBvZiAzIHJlcGV0aXRpb25zIGlzIHByb2JhYmx5IGVub3VnaCBpbiBtb3N0Ci1jYXNlcy4gIE9uIFVuaXgsIHlvdSBjYW4gdXNlIGNsb2NrKCkgdG8gbWVhc3VyZSBDUFUgdGltZS4KLQogTm90ZTogdGhlcmUgaXMgYSBjZXJ0YWluIGJhc2VsaW5lIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBleGVjdXRpbmcgYQotcGFzcyBzdGF0ZW1lbnQuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5IHRvIGhpZGUgaXQsIGJ1dCB5b3Ugc2hvdWxkCi1iZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUgbWVhc3VyZWQgYnkgaW52b2tpbmcgdGhlCi1wcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgorcGFzcyBzdGF0ZW1lbnQuICBJdCBkaWZmZXJzIGJldHdlZW4gdmVyc2lvbnMuICBUaGUgY29kZSBoZXJlIGRvZXNuJ3QgdHJ5Cit0byBoaWRlIGl0LCBidXQgeW91IHNob3VsZCBiZSBhd2FyZSBvZiBpdC4gIFRoZSBiYXNlbGluZSBvdmVyaGVhZCBjYW4gYmUKK21lYXN1cmVkIGJ5IGludm9raW5nIHRoZSBwcm9ncmFtIHdpdGhvdXQgYXJndW1lbnRzLgogCi1UaGUgYmFzZWxpbmUgb3ZlcmhlYWQgZGlmZmVycyBiZXR3ZWVuIFB5dGhvbiB2ZXJzaW9ucyEgIEFsc28sIHRvCi1mYWlybHkgY29tcGFyZSBvbGRlciBQeXRob24gdmVyc2lvbnMgdG8gUHl0aG9uIDIuMywgeW91IG1heSB3YW50IHRvCi11c2UgcHl0aG9uIC1PIGZvciB0aGUgb2xkZXIgdmVyc2lvbnMgdG8gYXZvaWQgdGltaW5nIFNFVF9MSU5FTk8KLWluc3RydWN0aW9ucy4KK0NsYXNzZXM6CisKKyAgICBUaW1lcgorCitGdW5jdGlvbnM6CisKKyAgICB0aW1laXQoc3RyaW5nLCBzdHJpbmcpIC0+IGZsb2F0CisgICAgcmVwZWF0KHN0cmluZywgc3RyaW5nKSAtPiBsaXN0CisgICAgZGVmYXVsdF90aW1lcigpIC0+IGZsb2F0CisKICIiIgogCiBpbXBvcnQgZ2MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi10cnk6Ci0gICAgaW1wb3J0IGl0ZXJ0b29scwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgTXVzdCBiZSBhbiBvbGRlciBQeXRob24gdmVyc2lvbiAoc2VlIHRpbWVpdCgpIGJlbG93KQotICAgIGl0ZXJ0b29scyA9IE5vbmUKK2ltcG9ydCBpdGVydG9vbHMKIAotX19hbGxfXyA9IFsiVGltZXIiXQorX19hbGxfXyA9IFsiVGltZXIiLCAidGltZWl0IiwgInJlcGVhdCIsICJkZWZhdWx0X3RpbWVyIl0KIAogZHVtbXlfc3JjX25hbWUgPSAiPHRpbWVpdC1zcmM+IgogZGVmYXVsdF9udW1iZXIgPSAxMDAwMDAwCkBAIC0xODAsMTAgKzE3MSw3IEBACiAgICAgICAgIHRvIG9uZSBtaWxsaW9uLiAgVGhlIG1haW4gc3RhdGVtZW50LCB0aGUgc2V0dXAgc3RhdGVtZW50IGFuZAogICAgICAgICB0aGUgdGltZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGl0ZXJ0b29sczoKLSAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdCA9IFtOb25lXSAqIG51bWJlcgorICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoTm9uZSwgbnVtYmVyKQogICAgICAgICBnY29sZCA9IGdjLmlzZW5hYmxlZCgpCiAgICAgICAgIGdjLmRpc2FibGUoKQogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weSBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CmluZGV4IDljYjIyODQuLjIyYTQxYWMgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5CisrKyBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CkBAIC0yMTgxLDQ1ICsyMTgxLDYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ludm9rZScpCiAKLQotIyBJbmRpY2VzOgotIyBYWFggSSBkb24ndCBsaWtlIHRoZXNlIC0tIHRha2UgdGhlbSBhd2F5Ci1kZWYgQXRFbmQoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0RW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdlbmQnCi0KLQotZGVmIEF0SW5zZXJ0KCphcmdzKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0SW5zZXJ0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcyA9ICdpbnNlcnQnCi0gICAgZm9yIGEgaW4gYXJnczoKLSAgICAgICAgaWYgYTogcyA9IHMgKyAoJyAnICsgYSkKLSAgICByZXR1cm4gcwotCi0KLWRlZiBBdFNlbEZpcnN0KCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdFNlbEZpcnN0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdzZWwuZmlyc3QnCi0KLQotZGVmIEF0U2VsTGFzdCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRTZWxMYXN0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgcmV0dXJuICdzZWwubGFzdCcKLQotCi1kZWYgQXQoeCwgeT1Ob25lKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0IHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCi0gICAgaWYgeSBpcyBOb25lOgotICAgICAgICByZXR1cm4gJ0AlcicgJSAoeCwpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICdAJXIsJXInICUgKHgsIHkpCi0KLQogY2xhc3MgQ2FudmFzKFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJDYW52YXMgd2lkZ2V0IHRvIGRpc3BsYXkgZ3JhcGhpY2FsIGVsZW1lbnRzIGxpa2UgbGluZXMgb3IgdGV4dC4iIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CkBAIC0yOTUwLDExICsyOTExLDExIEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICd0ZXh0JywgY25mLCBrdykKLSAgICBkZWYgYmJveChzZWxmLCAqYXJncyk6CisgICAgZGVmIGJib3goc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJSZXR1cm4gYSB0dXBsZSBvZiAoeCx5LHdpZHRoLGhlaWdodCkgd2hpY2ggZ2l2ZXMgdGhlIGJvdW5kaW5nCi0gICAgICAgIGJveCBvZiB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGluZGV4IGluIEFSR1MuIiIiCisgICAgICAgIGJveCBvZiB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIGdpdmVuIGluZGV4LiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cygKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ2Jib3gnKSArIGFyZ3MpKSBvciBOb25lCisgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdiYm94JywgaW5kZXgpKSBvciBOb25lCiAgICAgZGVmIHRrX3RleHRTZWxlY3RUbyhzZWxmLCBpbmRleCk6CiAgICAgICAgIHNlbGYudGsuY2FsbCgndGtfdGV4dFNlbGVjdFRvJywgc2VsZi5fdywgaW5kZXgpCiAgICAgZGVmIHRrX3RleHRCYWNrc3BhY2Uoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5IGIvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQppbmRleCAzZmZiMjUyLi5hNzFhZmIyIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CisrKyBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKQEAgLTE2Niw3ICsxNjYsNyBAQAogICAgICAgICBkaXIsIHBhdCA9IHNlbGYuZ2V0X2ZpbHRlcigpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLm1hc3Rlci5iZWxsKCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzYWJzKGRpcik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9IE5vbmUKICAgICAgICAgICAgIGlmIHB3ZDoKICAgICAgICAgICAgICAgICBkaXIgPSBvcy5wYXRoLmpvaW4ocHdkLCBkaXIpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKaW5kZXggMmM0Y2IwNS4uNGRlNjUzMSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQpAQCAtNjMwLDggKzYzMCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpZGdldC5iYm94KCdlbmQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsICdub2luZGV4JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCwgJzEuMScsICdlbmQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpZGdldC5iYm94KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpZGdldC5iYm94LCAnMS4xJywgJ2VuZCcpCiAKIAogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFBpeGVsU2l6ZVRlc3RzLCBTdGFuZGFyZE9wdGlvbnNUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90b2tlbi5weSBiL0xpYi90b2tlbi5weQppbmRleCAzMWZhZTBhLi43NDcwYzhjIDEwMDc1NQotLS0gYS9MaWIvdG9rZW4ucHkKKysrIGIvTGliL3Rva2VuLnB5CkBAIC05Myw3ICs5Myw3IEBACiAgICAgICAgIG91dEZpbGVOYW1lID0gYXJnc1sxXQogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKGluRmlsZU5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIGxpbmVzID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAjIGxvYWQgdGhlIG91dHB1dCBza2VsZXRvbiBmcm9tIHRoZSB0YXJnZXQ6CiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4ob3V0RmlsZU5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCgyKQogICAgIGZvcm1hdCA9IGZwLnJlYWQoKS5zcGxpdCgiXG4iKQpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgZm9ybWF0W3N0YXJ0OmVuZF0gPSBsaW5lcwogICAgIHRyeToKICAgICAgICAgZnAgPSBvcGVuKG91dEZpbGVOYW1lLCAndycpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiSS9PIGVycm9yOiAlc1xuIiAlIHN0cihlcnIpKQogICAgICAgICBzeXMuZXhpdCg0KQogICAgIGZwLndyaXRlKCJcbiIuam9pbihmb3JtYXQpKQpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuaXplLnB5IGIvTGliL3Rva2VuaXplLnB5CmluZGV4IGQwNjA5ZTguLmY2MTRhZWIgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbml6ZS5weQorKysgYi9MaWIvdG9rZW5pemUucHkKQEAgLTY3MCw3ICs2NzAsNyBAQAogICAgICAgICBlcnJvcihlcnIuYXJnc1swXSwgZmlsZW5hbWUsIChsaW5lLCBjb2x1bW4pKQogICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlcnI6CiAgICAgICAgIGVycm9yKGVyciwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgZXJyb3IoZXJyKQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgcHJpbnQoImludGVycnVwdGVkXG4iKQpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlLnB5IGIvTGliL3RyYWNlLnB5CmluZGV4IGMwOWIzNjUuLjA5ZmU5ZWUgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZS5weQorKysgYi9MaWIvdHJhY2UucHkKQEAgLTIzOCw3ICsyMzgsNyBAQAogICAgICAgICAgICAgICAgIGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMgPSBcCiAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZChvcGVuKHNlbGYuaW5maWxlLCAncmInKSkKICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZShzZWxmLl9fY2xhc3NfXyhjb3VudHMsIGNhbGxlZGZ1bmNzLCBjYWxsZXJzKSkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCgoIlNraXBwaW5nIGNvdW50cyBmaWxlICVyOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5pbmZpbGUsIGVycikpLCBmaWxlPXN5cy5zdGRlcnIpCiAKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKChzZWxmLmNvdW50cywgc2VsZi5jYWxsZWRmdW5jcywgc2VsZi5jYWxsZXJzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuKHNlbGYub3V0ZmlsZSwgJ3diJyksIDEpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkNhbid0IHNhdmUgY291bnRzIGZpbGVzIGJlY2F1c2UgJXMiICUgZXJyLCBmaWxlPXN5cy5zdGRlcnIpCiAKICAgICBkZWYgd3JpdGVfcmVzdWx0c19maWxlKHNlbGYsIHBhdGgsIGxpbmVzLCBsbm90YWIsIGxpbmVzX2hpdCwgZW5jb2Rpbmc9Tm9uZSk6CkBAIC0zNTYsNyArMzU2LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvdXRmaWxlID0gb3BlbihwYXRoLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCgidHJhY2U6IENvdWxkIG5vdCBvcGVuICVyIGZvciB3cml0aW5nOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSBza2lwcGluZyIgJSAocGF0aCwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHJldHVybiAwLCAwCkBAIC00MzcsNyArNDM3LDcgQEAKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGVuYW1lKSBhcyBmOgogICAgICAgICAgICAgcHJvZyA9IGYucmVhZCgpCiAgICAgICAgICAgICBlbmNvZGluZyA9IGYuZW5jb2RpbmcKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBwcmludCgoIk5vdCBwcmludGluZyBjb3ZlcmFnZSBkYXRhIGZvciAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgcmV0dXJuIHt9CkBAIC04MDIsNyArODAyLDcgQEAKICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IE5vbmUsCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB0LnJ1bmN0eChjb2RlLCBnbG9icywgZ2xvYnMpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgX2Vycl9leGl0KCJDYW5ub3QgcnVuIGZpbGUgJXIgYmVjYXVzZTogJXMiICUgKHN5cy5hcmd2WzBdLCBlcnIpKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90cmFjZWJhY2sucHkgYi9MaWIvdHJhY2ViYWNrLnB5CmluZGV4IGIxM2JmZTIuLjNiMmNhZTcgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZWJhY2sucHkKKysrIGIvTGliL3RyYWNlYmFjay5weQpAQCAtMiwyNiArMiwzMiBAQAogCiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgc3lzCitpbXBvcnQgb3BlcmF0b3IKIAogX19hbGxfXyA9IFsnZXh0cmFjdF9zdGFjaycsICdleHRyYWN0X3RiJywgJ2Zvcm1hdF9leGNlcHRpb24nLAogICAgICAgICAgICAnZm9ybWF0X2V4Y2VwdGlvbl9vbmx5JywgJ2Zvcm1hdF9saXN0JywgJ2Zvcm1hdF9zdGFjaycsCiAgICAgICAgICAgICdmb3JtYXRfdGInLCAncHJpbnRfZXhjJywgJ2Zvcm1hdF9leGMnLCAncHJpbnRfZXhjZXB0aW9uJywKLSAgICAgICAgICAgJ3ByaW50X2xhc3QnLCAncHJpbnRfc3RhY2snLCAncHJpbnRfdGInXQorICAgICAgICAgICAncHJpbnRfbGFzdCcsICdwcmludF9zdGFjaycsICdwcmludF90YicsCisgICAgICAgICAgICdjbGVhcl9mcmFtZXMnXQogCi1kZWYgX3ByaW50KGZpbGUsIHN0cj0nJywgdGVybWluYXRvcj0nXG4nKToKLSAgICBmaWxlLndyaXRlKHN0cit0ZXJtaW5hdG9yKQorIworIyBGb3JtYXR0aW5nIGFuZCBwcmludGluZyBsaXN0cyBvZiB0cmFjZWJhY2sgbGluZXMuCisjCiAKK2RlZiBfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCk6CisgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gZXh0cmFjdGVkX2xpc3Q6CisgICAgICAgIGl0ZW0gPSAnICBGaWxlICJ7fSIsIGxpbmUge30sIGluIHt9XG4nLmZvcm1hdChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgaXRlbSA9IGl0ZW0gKyAnICAgIHt9XG4nLmZvcm1hdChsaW5lLnN0cmlwKCkpCisgICAgICAgIHlpZWxkIGl0ZW0KIAogZGVmIHByaW50X2xpc3QoZXh0cmFjdGVkX2xpc3QsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgdGhlIGxpc3Qgb2YgdHVwbGVzIGFzIHJldHVybmVkIGJ5IGV4dHJhY3RfdGIoKSBvcgogICAgIGV4dHJhY3Rfc3RhY2soKSBhcyBhIGZvcm1hdHRlZCBzdGFjayB0cmFjZSB0byB0aGUgZ2l2ZW4gZmlsZS4iIiIKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gZXh0cmFjdGVkX2xpc3Q6Ci0gICAgICAgIF9wcmludChmaWxlLAotICAgICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsbGluZW5vLG5hbWUpKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsICcgICAgJXMnICUgbGluZS5zdHJpcCgpKQorICAgIGZvciBpdGVtIGluIF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KToKKyAgICAgICAgcHJpbnQoaXRlbSwgZmlsZT1maWxlLCBlbmQ9IiIpCiAKIGRlZiBmb3JtYXRfbGlzdChleHRyYWN0ZWRfbGlzdCk6CiAgICAgIiIiRm9ybWF0IGEgbGlzdCBvZiB0cmFjZWJhY2sgZW50cnkgdHVwbGVzIGZvciBwcmludGluZy4KQEAgLTMzLDE0ICszOSw0NCBAQAogICAgIHRoZSBzdHJpbmdzIG1heSBjb250YWluIGludGVybmFsIG5ld2xpbmVzIGFzIHdlbGwsIGZvciB0aG9zZSBpdGVtcwogICAgIHdob3NlIHNvdXJjZSB0ZXh0IGxpbmUgaXMgbm90IE5vbmUuCiAgICAgIiIiCi0gICAgbGlzdCA9IFtdCi0gICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUgaW4gZXh0cmFjdGVkX2xpc3Q6Ci0gICAgICAgIGl0ZW0gPSAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzXG4nICUgKGZpbGVuYW1lLGxpbmVubyxuYW1lKQotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgaXRlbSA9IGl0ZW0gKyAnICAgICVzXG4nICUgbGluZS5zdHJpcCgpCi0gICAgICAgIGxpc3QuYXBwZW5kKGl0ZW0pCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZm9ybWF0X2xpc3RfaXRlcihleHRyYWN0ZWRfbGlzdCkpCiAKKyMKKyMgUHJpbnRpbmcgYW5kIEV4dHJhY3RpbmcgVHJhY2ViYWNrcy4KKyMKKworIyBleHRyYWN0b3IgdGFrZXMgY3VyciBhbmQgbmVlZHMgdG8gcmV0dXJuIGEgdHVwbGUgb2Y6CisjIC0gRnJhbWUgb2JqZWN0CisjIC0gTGluZSBudW1iZXIKKyMgLSBOZXh0IGl0ZW0gKHNhbWUgdHlwZSBhcyBjdXJyKQorIyBJbiBwcmFjdGljZSwgY3VyciBpcyBlaXRoZXIgYSB0cmFjZWJhY2sgb3IgYSBmcmFtZS4KK2RlZiBfZXh0cmFjdF90Yl9vcl9zdGFja19pdGVyKGN1cnIsIGxpbWl0LCBleHRyYWN0b3IpOgorICAgIGlmIGxpbWl0IGlzIE5vbmU6CisgICAgICAgIGxpbWl0ID0gZ2V0YXR0cihzeXMsICd0cmFjZWJhY2tsaW1pdCcsIE5vbmUpCisKKyAgICBuID0gMAorICAgIHdoaWxlIGN1cnIgaXMgbm90IE5vbmUgYW5kIChsaW1pdCBpcyBOb25lIG9yIG4gPCBsaW1pdCk6CisgICAgICAgIGYsIGxpbmVubywgbmV4dF9pdGVtID0gZXh0cmFjdG9yKGN1cnIpCisgICAgICAgIGNvID0gZi5mX2NvZGUKKyAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQorICAgICAgICBuYW1lID0gY28uY29fbmFtZQorCisgICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQorICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCisKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSBOb25lCisKKyAgICAgICAgeWllbGQgKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUpCisgICAgICAgIGN1cnIgPSBuZXh0X2l0ZW0KKyAgICAgICAgbiArPSAxCisKK2RlZiBfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdCk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgdGIsIGxpbWl0LAorICAgICAgICAgICAgICAgIG9wZXJhdG9yLmF0dHJnZXR0ZXIoInRiX2ZyYW1lIiwgInRiX2xpbmVubyIsICJ0Yl9uZXh0IikpCiAKIGRlZiBwcmludF90Yih0YiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCB1cCB0byAnbGltaXQnIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSB0aGUgdHJhY2ViYWNrICd0YicuCkBAIC01MCwyOSArODYsMTEgQEAKICAgICAnZmlsZScgc2hvdWxkIGJlIGFuIG9wZW4gZmlsZSBvciBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggYSB3cml0ZSgpCiAgICAgbWV0aG9kLgogICAgICIiIgotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIG4gPSAwCi0gICAgd2hpbGUgdGIgaXMgbm90IE5vbmUgYW5kIChsaW1pdCBpcyBOb25lIG9yIG4gPCBsaW1pdCk6Ci0gICAgICAgIGYgPSB0Yi50Yl9mcmFtZQotICAgICAgICBsaW5lbm8gPSB0Yi50Yl9saW5lbm8KLSAgICAgICAgY28gPSBmLmZfY29kZQotICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCi0gICAgICAgIG5hbWUgPSBjby5jb19uYW1lCi0gICAgICAgIF9wcmludChmaWxlLAotICAgICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiAlcycgJSAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSkpCi0gICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCi0gICAgICAgIGlmIGxpbmU6IF9wcmludChmaWxlLCAnICAgICcgKyBsaW5lLnN0cmlwKCkpCi0gICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICBuID0gbisxCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdD1saW1pdCksIGZpbGU9ZmlsZSkKIAogZGVmIGZvcm1hdF90Yih0YiwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiQSBzaG9ydGhhbmQgZm9yICdmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdCkpJy4iIiIKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF90Yih0YiwgbGltaXQpKQorICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdD1saW1pdCkpCiAKIGRlZiBleHRyYWN0X3RiKHRiLCBsaW1pdD1Ob25lKToKICAgICAiIiJSZXR1cm4gbGlzdCBvZiB1cCB0byBsaW1pdCBwcmUtcHJvY2Vzc2VkIGVudHJpZXMgZnJvbSB0cmFjZWJhY2suCkBAIC04NSwyNiArMTAzLDExIEBACiAgICAgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBzdHJpcHBlZDsgaWYgdGhlIHNvdXJjZSBpcyBub3QKICAgICBhdmFpbGFibGUgaXQgaXMgTm9uZS4KICAgICAiIiIKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgdGIgaXMgbm90IE5vbmUgYW5kIChsaW1pdCBpcyBOb25lIG9yIG4gPCBsaW1pdCk6Ci0gICAgICAgIGYgPSB0Yi50Yl9mcmFtZQotICAgICAgICBsaW5lbm8gPSB0Yi50Yl9saW5lbm8KLSAgICAgICAgY28gPSBmLmZfY29kZQotICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCi0gICAgICAgIG5hbWUgPSBjby5jb19uYW1lCi0gICAgICAgIGxpbmVjYWNoZS5jaGVja2NhY2hlKGZpbGVuYW1lKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCi0gICAgICAgIGlmIGxpbmU6IGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgZWxzZTogbGluZSA9IE5vbmUKLSAgICAgICAgbGlzdC5hcHBlbmQoKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUpKQotICAgICAgICB0YiA9IHRiLnRiX25leHQKLSAgICAgICAgbiA9IG4rMQotICAgIHJldHVybiBsaXN0CisgICAgcmV0dXJuIGxpc3QoX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQ9bGltaXQpKQogCisjCisjIEV4Y2VwdGlvbiBmb3JtYXR0aW5nIGFuZCBvdXRwdXQuCisjCiAKIF9jYXVzZV9tZXNzYWdlID0gKAogICAgICJcblRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2UgIgpAQCAtMTMyLDkgKzEzNSwyMyBAQAogICAgIGl0cy5hcHBlbmQoWyhleGMsIGN1c3RvbV90YiBvciBleGMuX190cmFjZWJhY2tfXyldKQogICAgICMgaXRlcnRvb2xzLmNoYWluIGlzIGluIGFuIGV4dGVuc2lvbiBtb2R1bGUgYW5kIG1heSBiZSB1bmF2YWlsYWJsZQogICAgIGZvciBpdCBpbiBpdHM6Ci0gICAgICAgIGZvciB4IGluIGl0OgotICAgICAgICAgICAgeWllbGQgeAorICAgICAgICB5aWVsZCBmcm9tIGl0CiAKK2RlZiBfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbik6CisgICAgaWYgY2hhaW46CisgICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKKyAgICBlbHNlOgorICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCisKKyAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgICMgVGhpcyBpcyBhIGNhdXNlL2NvbnRleHQgbWVzc2FnZSBsaW5lCisgICAgICAgICAgICB5aWVsZCB2YWx1ZSArICdcbicKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIHRiOgorICAgICAgICAgICAgeWllbGQgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2Zvcm1hdF9saXN0X2l0ZXIoX2V4dHJhY3RfdGJfaXRlcih0YiwgbGltaXQ9bGltaXQpKQorICAgICAgICB5aWVsZCBmcm9tIF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcih0eXBlKHZhbHVlKSwgdmFsdWUpCiAKIGRlZiBwcmludF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJQcmludCBleGNlcHRpb24gdXAgdG8gJ2xpbWl0JyBzdGFjayB0cmFjZSBlbnRyaWVzIGZyb20gJ3RiJyB0byAnZmlsZScuCkBAIC0xNDksMjAgKzE2Niw4IEBACiAgICAgIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGlmIGNoYWluOgotICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCi0gICAgZWxzZToKLSAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQotICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsIHZhbHVlKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgdGI6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonKQotICAgICAgICAgICAgcHJpbnRfdGIodGIsIGxpbWl0LCBmaWxlKQotICAgICAgICBsaW5lcyA9IGZvcm1hdF9leGNlcHRpb25fb25seSh0eXBlKHZhbHVlKSwgdmFsdWUpCi0gICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICAgICAgX3ByaW50KGZpbGUsIGxpbmUsICcnKQorICAgIGZvciBsaW5lIGluIF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKToKKyAgICAgICAgcHJpbnQobGluZSwgZmlsZT1maWxlLCBlbmQ9IiIpCiAKIGRlZiBmb3JtYXRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkZvcm1hdCBhIHN0YWNrIHRyYWNlIGFuZCB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgpAQCAtMTczLDIwICsxNzgsNyBAQAogICAgIHRoZXNlIGxpbmVzIGFyZSBjb25jYXRlbmF0ZWQgYW5kIHByaW50ZWQsIGV4YWN0bHkgdGhlIHNhbWUgdGV4dCBpcwogICAgIHByaW50ZWQgYXMgZG9lcyBwcmludF9leGNlcHRpb24oKS4KICAgICAiIiIKLSAgICBsaXN0ID0gW10KLSAgICBpZiBjaGFpbjoKLSAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQotICAgIGVsc2U6Ci0gICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KLSAgICBmb3IgdmFsdWUsIHRiIGluIHZhbHVlczoKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHZhbHVlICsgJ1xuJykKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHRiOgotICAgICAgICAgICAgbGlzdC5hcHBlbmQoJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicpCi0gICAgICAgICAgICBsaXN0LmV4dGVuZChmb3JtYXRfdGIodGIsIGxpbWl0KSkKLSAgICAgICAgbGlzdC5leHRlbmQoZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUodmFsdWUpLCB2YWx1ZSkpCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZm9ybWF0X2V4Y2VwdGlvbl9pdGVyKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBjaGFpbikpCiAKIGRlZiBmb3JtYXRfZXhjZXB0aW9uX29ubHkoZXR5cGUsIHZhbHVlKToKICAgICAiIiJGb3JtYXQgdGhlIGV4Y2VwdGlvbiBwYXJ0IG9mIGEgdHJhY2ViYWNrLgpAQCAtMjA0LDEwICsxOTYsMTQgQEAKICAgICBzdHJpbmcgaW4gdGhlIGxpc3QuCiAKICAgICAiIiIKKyAgICByZXR1cm4gbGlzdChfZm9ybWF0X2V4Y2VwdGlvbl9vbmx5X2l0ZXIoZXR5cGUsIHZhbHVlKSkKKworZGVmIF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcihldHlwZSwgdmFsdWUpOgogICAgICMgR3JhY2VmdWxseSBoYW5kbGUgKHRoZSB3YXkgUHl0aG9uIDIuNCBhbmQgZWFybGllciBkaWQpIHRoZSBjYXNlIG9mCiAgICAgIyBiZWluZyBjYWxsZWQgd2l0aCAoTm9uZSwgTm9uZSkuCiAgICAgaWYgZXR5cGUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIFtfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKGV0eXBlLCB2YWx1ZSldCisgICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKQorICAgICAgICByZXR1cm4KIAogICAgIHN0eXBlID0gZXR5cGUuX19uYW1lX18KICAgICBzbW9kID0gZXR5cGUuX19tb2R1bGVfXwpAQCAtMjE1LDI2ICsyMTEsMjYgQEAKICAgICAgICAgc3R5cGUgPSBzbW9kICsgJy4nICsgc3R5cGUKIAogICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV0eXBlLCBTeW50YXhFcnJvcik6Ci0gICAgICAgIHJldHVybiBbX2Zvcm1hdF9maW5hbF9leGNfbGluZShzdHlwZSwgdmFsdWUpXQorICAgICAgICB5aWVsZCBfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuCiAKICAgICAjIEl0IHdhcyBhIHN5bnRheCBlcnJvcjsgc2hvdyBleGFjdGx5IHdoZXJlIHRoZSBwcm9ibGVtIHdhcyBmb3VuZC4KLSAgICBsaW5lcyA9IFtdCiAgICAgZmlsZW5hbWUgPSB2YWx1ZS5maWxlbmFtZSBvciAiPHN0cmluZz4iCiAgICAgbGluZW5vID0gc3RyKHZhbHVlLmxpbmVubykgb3IgJz8nCi0gICAgbGluZXMuYXBwZW5kKCcgIEZpbGUgIiVzIiwgbGluZSAlc1xuJyAlIChmaWxlbmFtZSwgbGluZW5vKSkKKyAgICB5aWVsZCAnICBGaWxlICJ7fSIsIGxpbmUge31cbicuZm9ybWF0KGZpbGVuYW1lLCBsaW5lbm8pCisKICAgICBiYWRsaW5lID0gdmFsdWUudGV4dAogICAgIG9mZnNldCA9IHZhbHVlLm9mZnNldAogICAgIGlmIGJhZGxpbmUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzXG4nICUgYmFkbGluZS5zdHJpcCgpKQorICAgICAgICB5aWVsZCAnICAgIHt9XG4nLmZvcm1hdChiYWRsaW5lLnN0cmlwKCkpCiAgICAgICAgIGlmIG9mZnNldCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSBiYWRsaW5lLnJzdHJpcCgnXG4nKVs6b2Zmc2V0XS5sc3RyaXAoKQogICAgICAgICAgICAgIyBub24tc3BhY2Ugd2hpdGVzcGFjZSAobGlrZXMgdGFicykgbXVzdCBiZSBrZXB0IGZvciBhbGlnbm1lbnQKICAgICAgICAgICAgIGNhcmV0c3BhY2UgPSAoKGMuaXNzcGFjZSgpIGFuZCBjIG9yICcgJykgZm9yIGMgaW4gY2FyZXRzcGFjZSkKICAgICAgICAgICAgICMgb25seSB0aHJlZSBzcGFjZXMgdG8gYWNjb3VudCBmb3Igb2Zmc2V0MSA9PSBwb3MgMAotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQorICAgICAgICAgICAgeWllbGQgJyAgIHt9XlxuJy5mb3JtYXQoJycuam9pbihjYXJldHNwYWNlKSkKICAgICBtc2cgPSB2YWx1ZS5tc2cgb3IgIjxubyBkZXRhaWwgYXZhaWxhYmxlPiIKLSAgICBsaW5lcy5hcHBlbmQoIiVzOiAlc1xuIiAlIChzdHlwZSwgbXNnKSkKLSAgICByZXR1cm4gbGluZXMKKyAgICB5aWVsZCAie306IHt9XG4iLmZvcm1hdChzdHlwZSwgbXNnKQogCiBkZWYgX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpOgogICAgIHZhbHVlc3RyID0gX3NvbWVfc3RyKHZhbHVlKQpAQCAtMjUwLDM4ICsyNDYsMzQgQEAKICAgICBleGNlcHQ6CiAgICAgICAgIHJldHVybiAnPHVucHJpbnRhYmxlICVzIG9iamVjdD4nICUgdHlwZSh2YWx1ZSkuX19uYW1lX18KIAotCiBkZWYgcHJpbnRfZXhjKGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQsIGZpbGUpJy4iIiIKLSAgICBpZiBmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgdHJ5OgotICAgICAgICBldHlwZSwgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgcHJpbnRfZXhjZXB0aW9uKGV0eXBlLCB2YWx1ZSwgdGIsIGxpbWl0LCBmaWxlLCBjaGFpbikKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICBwcmludF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgZmlsZT1maWxlLCBjaGFpbj1jaGFpbikKIAogZGVmIGZvcm1hdF9leGMobGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiTGlrZSBwcmludF9leGMoKSBidXQgcmV0dXJuIGEgc3RyaW5nLiIiIgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHJldHVybiAnJy5qb2luKAotICAgICAgICAgICAgZm9ybWF0X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGV0eXBlID0gdmFsdWUgPSB0YiA9IE5vbmUKLQorICAgIHJldHVybiAiIi5qb2luKGZvcm1hdF9leGNlcHRpb24oKnN5cy5leGNfaW5mbygpLCBsaW1pdD1saW1pdCwgY2hhaW49Y2hhaW4pKQogCiBkZWYgcHJpbnRfbGFzdChsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yICdwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwKICAgICBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLCBsaW1pdCwgZmlsZSknLiIiIgogICAgIGlmIG5vdCBoYXNhdHRyKHN5cywgImxhc3RfdHlwZSIpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBsYXN0IGV4Y2VwdGlvbiIpCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHByaW50X2V4Y2VwdGlvbihzeXMubGFzdF90eXBlLCBzeXMubGFzdF92YWx1ZSwgc3lzLmxhc3RfdHJhY2ViYWNrLAogICAgICAgICAgICAgICAgICAgICBsaW1pdCwgZmlsZSwgY2hhaW4pCiAKKyMKKyMgUHJpbnRpbmcgYW5kIEV4dHJhY3RpbmcgU3RhY2tzLgorIworCitkZWYgX2V4dHJhY3Rfc3RhY2tfaXRlcihmLCBsaW1pdD1Ob25lKToKKyAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKKyAgICAgICAgICAgICAgICBmLCBsaW1pdCwgbGFtYmRhIGY6IChmLCBmLmZfbGluZW5vLCBmLmZfYmFjaykpCisKK2RlZiBfZ2V0X3N0YWNrKGYpOgorICAgIGlmIGYgaXMgTm9uZToKKyAgICAgICAgZiA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9iYWNrCisgICAgcmV0dXJuIGYKIAogZGVmIHByaW50X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCBhIHN0YWNrIHRyYWNlIGZyb20gaXRzIGludm9jYXRpb24gcG9pbnQuCkBAIC0yOTAsMjEgKzI4MiwxMSBAQAogICAgIHN0YWNrIGZyYW1lIGF0IHdoaWNoIHRvIHN0YXJ0LiBUaGUgb3B0aW9uYWwgJ2xpbWl0JyBhbmQgJ2ZpbGUnCiAgICAgYXJndW1lbnRzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgcHJpbnRfZXhjZXB0aW9uKCkuCiAgICAgIiIiCi0gICAgaWYgZiBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcgotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBmID0gc3lzLmV4Y19pbmZvKClbMl0udGJfZnJhbWUuZl9iYWNrCi0gICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSwgZmlsZSkKKyAgICBwcmludF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpLCBmaWxlPWZpbGUpCiAKIGRlZiBmb3JtYXRfc3RhY2soZj1Ob25lLCBsaW1pdD1Ob25lKToKICAgICAiIiJTaG9ydGhhbmQgZm9yICdmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSknLiIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSkKKyAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCiAKIGRlZiBleHRyYWN0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiRXh0cmFjdCB0aGUgcmF3IHRyYWNlYmFjayBmcm9tIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLgpAQCAtMzE1LDI3ICsyOTcsMTYgQEAKICAgICBsaW5lIG51bWJlciwgZnVuY3Rpb24gbmFtZSwgdGV4dCksIGFuZCB0aGUgZW50cmllcyBhcmUgaW4gb3JkZXIKICAgICBmcm9tIG9sZGVzdCB0byBuZXdlc3Qgc3RhY2sgZnJhbWUuCiAgICAgIiIiCi0gICAgaWYgZiBpcyBOb25lOgorICAgIHN0YWNrID0gbGlzdChfZXh0cmFjdF9zdGFja19pdGVyKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSkKKyAgICBzdGFjay5yZXZlcnNlKCkKKyAgICByZXR1cm4gc3RhY2sKKworZGVmIGNsZWFyX2ZyYW1lcyh0Yik6CisgICAgIkNsZWFyIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBpbiB0aGUgZnJhbWVzIG9mIGEgdHJhY2ViYWNrLiIKKyAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbGlzdCA9IFtdCi0gICAgbiA9IDAKLSAgICB3aGlsZSBmIGlzIG5vdCBOb25lIGFuZCAobGltaXQgaXMgTm9uZSBvciBuIDwgbGltaXQpOgotICAgICAgICBsaW5lbm8gPSBmLmZfbGluZW5vCi0gICAgICAgIGNvID0gZi5mX2NvZGUKLSAgICAgICAgZmlsZW5hbWUgPSBjby5jb19maWxlbmFtZQotICAgICAgICBuYW1lID0gY28uY29fbmFtZQotICAgICAgICBsaW5lY2FjaGUuY2hlY2tjYWNoZShmaWxlbmFtZSkKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sIGYuZl9nbG9iYWxzKQotICAgICAgICBpZiBsaW5lOiBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGVsc2U6IGxpbmUgPSBOb25lCi0gICAgICAgIGxpc3QuYXBwZW5kKChmaWxlbmFtZSwgbGluZW5vLCBuYW1lLCBsaW5lKSkKLSAgICAgICAgZiA9IGYuZl9iYWNrCi0gICAgICAgIG4gPSBuKzEKLSAgICBsaXN0LnJldmVyc2UoKQotICAgIHJldHVybiBsaXN0CisgICAgICAgICAgICB0Yi50Yl9mcmFtZS5jbGVhcigpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXhjZXB0aW9uIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgc3RpbGwgZXhlY3V0aW5nLgorICAgICAgICAgICAgcGFzcworICAgICAgICB0YiA9IHRiLnRiX25leHQKZGlmZiAtLWdpdCBhL0xpYi90cmFjZW1hbGxvYy5weSBiL0xpYi90cmFjZW1hbGxvYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZmNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3RyYWNlbWFsbG9jLnB5CkBAIC0wLDAgKzEsNDU5IEBACitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBTZXF1ZW5jZQorZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHRvdGFsX29yZGVyaW5nCitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBwaWNrbGUKKworIyBJbXBvcnQgdHlwZXMgYW5kIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDCitmcm9tIF90cmFjZW1hbGxvYyBpbXBvcnQgKgorZnJvbSBfdHJhY2VtYWxsb2MgaW1wb3J0IF9nZXRfb2JqZWN0X3RyYWNlYmFjaywgX2dldF90cmFjZXMKKworCitkZWYgX2Zvcm1hdF9zaXplKHNpemUsIHNpZ24pOgorICAgIGZvciB1bml0IGluICgnQicsICdLaUInLCAnTWlCJywgJ0dpQicsICdUaUInKToKKyAgICAgICAgaWYgYWJzKHNpemUpIDwgMTAwIGFuZCB1bml0ICE9ICdCJzoKKyAgICAgICAgICAgICMgMyBkaWdpdHMgKHh4LnggVU5JVCkKKyAgICAgICAgICAgIGlmIHNpZ246CisgICAgICAgICAgICAgICAgcmV0dXJuICIlKy4xZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIlLjFmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICBpZiBhYnMoc2l6ZSkgPCAxMCAqIDEwMjQgb3IgdW5pdCA9PSAnVGlCJzoKKyAgICAgICAgICAgICMgNCBvciA1IGRpZ2l0cyAoeHh4eCBVTklUKQorICAgICAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUrLjBmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUuMGYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgIHNpemUgLz0gMTAyNAorCisKK2NsYXNzIFN0YXRpc3RpYzoKKyAgICAiIiIKKyAgICBTdGF0aXN0aWMgZGlmZmVyZW5jZSBvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYmV0d2VlbiB0d28gU25hcHNob3QgaW5zdGFuY2UuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ3RyYWNlYmFjaycsICdzaXplJywgJ2NvdW50JykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZWJhY2ssIHNpemUsIGNvdW50KToKKyAgICAgICAgc2VsZi50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKyAgICAgICAgc2VsZi5zaXplID0gc2l6ZQorICAgICAgICBzZWxmLmNvdW50ID0gY291bnQKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuY291bnQpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi50cmFjZWJhY2sgPT0gb3RoZXIudHJhY2ViYWNrCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuc2l6ZSA9PSBvdGhlci5zaXplCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnQgPT0gb3RoZXIuY291bnQpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICgiJXM6IHNpemU9JXMsIGNvdW50PSVpIgorICAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50KSkKKyAgICAgICAgaWYgc2VsZi5jb3VudDoKKyAgICAgICAgICAgIGF2ZXJhZ2UgPSBzZWxmLnNpemUgLyBzZWxmLmNvdW50CisgICAgICAgICAgICB0ZXh0ICs9ICIsIGF2ZXJhZ2U9JXMiICUgX2Zvcm1hdF9zaXplKGF2ZXJhZ2UsIEZhbHNlKQorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8U3RhdGlzdGljIHRyYWNlYmFjaz0lciBzaXplPSVpIGNvdW50PSVpPicKKyAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLmNvdW50KSkKKworICAgIGRlZiBfc29ydF9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5zaXplLCBzZWxmLmNvdW50LCBzZWxmLnRyYWNlYmFjaykKKworCitjbGFzcyBTdGF0aXN0aWNEaWZmOgorICAgICIiIgorICAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIGFuIG9sZCBhbmQgYSBuZXcKKyAgICBTbmFwc2hvdCBpbnN0YW5jZS4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoJ3RyYWNlYmFjaycsICdzaXplJywgJ3NpemVfZGlmZicsICdjb3VudCcsICdjb3VudF9kaWZmJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZWJhY2ssIHNpemUsIHNpemVfZGlmZiwgY291bnQsIGNvdW50X2RpZmYpOgorICAgICAgICBzZWxmLnRyYWNlYmFjayA9IHRyYWNlYmFjaworICAgICAgICBzZWxmLnNpemUgPSBzaXplCisgICAgICAgIHNlbGYuc2l6ZV9kaWZmID0gc2l6ZV9kaWZmCisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorICAgICAgICBzZWxmLmNvdW50X2RpZmYgPSBjb3VudF9kaWZmCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLnNpemVfZGlmZiwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsIHNlbGYuY291bnRfZGlmZikpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnRyYWNlYmFjayA9PSBvdGhlci50cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5zaXplID09IG90aGVyLnNpemUKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5zaXplX2RpZmYgPT0gb3RoZXIuc2l6ZV9kaWZmCisgICAgICAgICAgICAgICAgYW5kIHNlbGYuY291bnQgPT0gb3RoZXIuY291bnQKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5jb3VudF9kaWZmID09IG90aGVyLmNvdW50X2RpZmYpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgdGV4dCA9ICgiJXM6IHNpemU9JXMgKCVzKSwgY291bnQ9JWkgKCUraSkiCisgICAgICAgICAgICAgICAgJSAoc2VsZi50cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpLAorICAgICAgICAgICAgICAgICAgIF9mb3JtYXRfc2l6ZShzZWxmLnNpemVfZGlmZiwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwKKyAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50X2RpZmYpKQorICAgICAgICBpZiBzZWxmLmNvdW50OgorICAgICAgICAgICAgYXZlcmFnZSA9IHNlbGYuc2l6ZSAvIHNlbGYuY291bnQKKyAgICAgICAgICAgIHRleHQgKz0gIiwgYXZlcmFnZT0lcyIgJSBfZm9ybWF0X3NpemUoYXZlcmFnZSwgRmFsc2UpCisgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzxTdGF0aXN0aWNEaWZmIHRyYWNlYmFjaz0lciBzaXplPSVpICglK2kpIGNvdW50PSVpICglK2kpPicKKyAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywgc2VsZi5zaXplLCBzZWxmLnNpemVfZGlmZiwKKyAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LCBzZWxmLmNvdW50X2RpZmYpKQorCisgICAgZGVmIF9zb3J0X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIChhYnMoc2VsZi5zaXplX2RpZmYpLCBzZWxmLnNpemUsCisgICAgICAgICAgICAgICAgYWJzKHNlbGYuY291bnRfZGlmZiksIHNlbGYuY291bnQsCisgICAgICAgICAgICAgICAgc2VsZi50cmFjZWJhY2spCisKKworZGVmIF9jb21wYXJlX2dyb3VwZWRfc3RhdHMob2xkX2dyb3VwLCBuZXdfZ3JvdXApOgorICAgIHN0YXRpc3RpY3MgPSBbXQorICAgIGZvciB0cmFjZWJhY2ssIHN0YXQgaW4gbmV3X2dyb3VwLml0ZW1zKCk6CisgICAgICAgIHByZXZpb3VzID0gb2xkX2dyb3VwLnBvcCh0cmFjZWJhY2ssIE5vbmUpCisgICAgICAgIGlmIHByZXZpb3VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RhdCA9IFN0YXRpc3RpY0RpZmYodHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSwgc3RhdC5zaXplIC0gcHJldmlvdXMuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50LCBzdGF0LmNvdW50IC0gcHJldmlvdXMuY291bnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplLCBzdGF0LnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCwgc3RhdC5jb3VudCkKKyAgICAgICAgc3RhdGlzdGljcy5hcHBlbmQoc3RhdCkKKworICAgIGZvciB0cmFjZWJhY2ssIHN0YXQgaW4gb2xkX2dyb3VwLml0ZW1zKCk6CisgICAgICAgIHN0YXQgPSBTdGF0aXN0aWNEaWZmKHRyYWNlYmFjaywgMCwgLXN0YXQuc2l6ZSwgMCwgLXN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworCitAdG90YWxfb3JkZXJpbmcKK2NsYXNzIEZyYW1lOgorICAgICIiIgorICAgIEZyYW1lIG9mIGEgdHJhY2ViYWNrLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgiX2ZyYW1lIiwpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgorICAgICAgICBzZWxmLl9mcmFtZSA9IGZyYW1lCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9mcmFtZVswXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGxpbmVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYW1lWzFdCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZSA9PSBvdGhlci5fZnJhbWUpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZSA8IG90aGVyLl9mcmFtZSkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZnJhbWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlczolcyIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPEZyYW1lIGZpbGVuYW1lPSVyIGxpbmVubz0lcj4iICUgKHNlbGYuZmlsZW5hbWUsIHNlbGYubGluZW5vKQorCisKK0B0b3RhbF9vcmRlcmluZworY2xhc3MgVHJhY2ViYWNrKFNlcXVlbmNlKToKKyAgICAiIiIKKyAgICBTZXF1ZW5jZSBvZiBGcmFtZSBpbnN0YW5jZXMgc29ydGVkIGZyb20gdGhlIG1vc3QgcmVjZW50IGZyYW1lCisgICAgdG8gdGhlIG9sZGVzdCBmcmFtZS4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl9mcmFtZXMiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZXMpOgorICAgICAgICBTZXF1ZW5jZS5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLl9mcmFtZXMgPSBmcmFtZXMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2ZyYW1lcykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHRyYWNlID0gc2VsZi5fZnJhbWVzW2luZGV4XQorICAgICAgICByZXR1cm4gRnJhbWUodHJhY2UpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgcmV0dXJuIGZyYW1lLl9mcmFtZSBpbiBzZWxmLl9mcmFtZXMKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZnJhbWVzKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzID09IG90aGVyLl9mcmFtZXMpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9mcmFtZXMgPCBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzdHIoc2VsZlswXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2ViYWNrICVyPiIgJSAodHVwbGUoc2VsZiksKQorCisKK2RlZiBnZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopOgorICAgICIiIgorICAgIEdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0ICpvYmoqIHdhcyBhbGxvY2F0ZWQuCisgICAgUmV0dXJuIGEgVHJhY2ViYWNrIGluc3RhbmNlLgorCisgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBub3QgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IKKyAgICBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBvYmplY3QuCisgICAgIiIiCisgICAgZnJhbWVzID0gX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICBpZiBmcmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soZnJhbWVzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVHJhY2U6CisgICAgIiIiCisgICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfdHJhY2UiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHNlbGYuX3RyYWNlID0gdHJhY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhY2VbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFjZWJhY2soc2VsZik6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soc2VsZi5fdHJhY2VbMV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZSA9PSBvdGhlci5fdHJhY2UpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3RyYWNlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChzZWxmLnRyYWNlYmFjaywgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCI8VHJhY2Ugc2l6ZT0lcywgdHJhY2ViYWNrPSVyPiIKKyAgICAgICAgICAgICAgICAlIChfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksIHNlbGYudHJhY2ViYWNrKSkKKworCitjbGFzcyBfVHJhY2VzKFNlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2VzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5fdHJhY2VzID0gdHJhY2VzCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl90cmFjZXMpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICB0cmFjZSA9IHNlbGYuX3RyYWNlc1tpbmRleF0KKyAgICAgICAgcmV0dXJuIFRyYWNlKHRyYWNlKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgIHJldHVybiB0cmFjZS5fdHJhY2UgaW4gc2VsZi5fdHJhY2VzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZXMgPT0gb3RoZXIuX3RyYWNlcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8VHJhY2VzIGxlbj0lcz4iICUgbGVuKHNlbGYpCisKKworZGVmIF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAgIGZpbGVuYW1lID0gb3MucGF0aC5ub3JtY2FzZShmaWxlbmFtZSkKKyAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCgoJy5weWMnLCAnLnB5bycpKToKKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZVs6LTFdCisgICAgcmV0dXJuIGZpbGVuYW1lCisKKworY2xhc3MgRmlsdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbmNsdXNpdmUsIGZpbGVuYW1lX3BhdHRlcm4sCisgICAgICAgICAgICAgICAgIGxpbmVubz1Ob25lLCBhbGxfZnJhbWVzPUZhbHNlKToKKyAgICAgICAgc2VsZi5pbmNsdXNpdmUgPSBpbmNsdXNpdmUKKyAgICAgICAgc2VsZi5fZmlsZW5hbWVfcGF0dGVybiA9IF9ub3JtYWxpemVfZmlsZW5hbWUoZmlsZW5hbWVfcGF0dGVybikKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgc2VsZi5hbGxfZnJhbWVzID0gYWxsX2ZyYW1lcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZpbGVuYW1lX3BhdHRlcm4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuCisKKyAgICBkZWYgX19tYXRjaF9mcmFtZShzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgZmlsZW5hbWUgPSBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKQorICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoKGZpbGVuYW1lLCBzZWxmLl9maWxlbmFtZV9wYXR0ZXJuKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLmxpbmVubyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAobGluZW5vID09IHNlbGYubGluZW5vKQorCisgICAgZGVmIF9tYXRjaF9mcmFtZShzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKSBeIChub3Qgc2VsZi5pbmNsdXNpdmUpCisKKyAgICBkZWYgX21hdGNoX3RyYWNlYmFjayhzZWxmLCB0cmFjZWJhY2spOgorICAgICAgICBpZiBzZWxmLmFsbF9mcmFtZXM6CisgICAgICAgICAgICBpZiBhbnkoc2VsZi5fX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8gaW4gdHJhY2ViYWNrKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmNsdXNpdmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIChub3Qgc2VsZi5pbmNsdXNpdmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdHJhY2ViYWNrWzBdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykKKworCitjbGFzcyBTbmFwc2hvdDoKKyAgICAiIiIKKyAgICBTbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlcywgdHJhY2ViYWNrX2xpbWl0KToKKyAgICAgICAgc2VsZi50cmFjZXMgPSBfVHJhY2VzKHRyYWNlcykKKyAgICAgICAgc2VsZi50cmFjZWJhY2tfbGltaXQgPSB0cmFjZWJhY2tfbGltaXQKKworICAgIGRlZiBkdW1wKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIFdyaXRlIHRoZSBzbmFwc2hvdCBpbnRvIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBwaWNrbGUuZHVtcChzZWxmLCBmcCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGxvYWQoZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCBhIHNuYXBzaG90IGZyb20gYSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZChmcCkKKworICAgIGRlZiBfZmlsdGVyX3RyYWNlKHNlbGYsIGluY2x1ZGVfZmlsdGVycywgZXhjbHVkZV9maWx0ZXJzLCB0cmFjZSk6CisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlWzFdCisgICAgICAgIGlmIGluY2x1ZGVfZmlsdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBhbnkodHJhY2VfZmlsdGVyLl9tYXRjaF90cmFjZWJhY2sodHJhY2ViYWNrKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGluY2x1ZGVfZmlsdGVycyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGV4Y2x1ZGVfZmlsdGVyczoKKyAgICAgICAgICAgIGlmIGFueShub3QgdHJhY2VfZmlsdGVyLl9tYXRjaF90cmFjZWJhY2sodHJhY2ViYWNrKQorICAgICAgICAgICAgICAgICAgIGZvciB0cmFjZV9maWx0ZXIgaW4gZXhjbHVkZV9maWx0ZXJzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBmaWx0ZXJfdHJhY2VzKHNlbGYsIGZpbHRlcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IFNuYXBzaG90IGluc3RhbmNlIHdpdGggYSBmaWx0ZXJlZCB0cmFjZXMgc2VxdWVuY2UsIGZpbHRlcnMKKyAgICAgICAgaXMgYSBsaXN0IG9mIEZpbHRlciBpbnN0YW5jZXMuICBJZiBmaWx0ZXJzIGlzIGFuIGVtcHR5IGxpc3QsIHJldHVybiBhCisgICAgICAgIG5ldyBTbmFwc2hvdCBpbnN0YW5jZSB3aXRoIGEgY29weSBvZiB0aGUgdHJhY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlsdGVyczoKKyAgICAgICAgICAgIGluY2x1ZGVfZmlsdGVycyA9IFtdCisgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMgPSBbXQorICAgICAgICAgICAgZm9yIHRyYWNlX2ZpbHRlciBpbiBmaWx0ZXJzOgorICAgICAgICAgICAgICAgIGlmIHRyYWNlX2ZpbHRlci5pbmNsdXNpdmU6CisgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZmlsdGVycy5hcHBlbmQodHJhY2VfZmlsdGVyKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycy5hcHBlbmQodHJhY2VfZmlsdGVyKQorICAgICAgICAgICAgbmV3X3RyYWNlcyA9IFt0cmFjZSBmb3IgdHJhY2UgaW4gc2VsZi50cmFjZXMuX3RyYWNlcworICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9maWx0ZXJfdHJhY2UoaW5jbHVkZV9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2UpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmV3X3RyYWNlcyA9IHNlbGYudHJhY2VzLl90cmFjZXMuY29weSgpCisgICAgICAgIHJldHVybiBTbmFwc2hvdChuZXdfdHJhY2VzLCBzZWxmLnRyYWNlYmFja19saW1pdCkKKworICAgIGRlZiBfZ3JvdXBfYnkoc2VsZiwga2V5X3R5cGUsIGN1bXVsYXRpdmUpOgorICAgICAgICBpZiBrZXlfdHlwZSBub3QgaW4gKCd0cmFjZWJhY2snLCAnZmlsZW5hbWUnLCAnbGluZW5vJyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGtleV90eXBlOiAlciIgJSAoa2V5X3R5cGUsKSkKKyAgICAgICAgaWYgY3VtdWxhdGl2ZSBhbmQga2V5X3R5cGUgbm90IGluICgnbGluZW5vJywgJ2ZpbGVuYW1lJyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjdW11bGF0aXZlIG1vZGUgY2Fubm90IGJ5IHVzZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBrZXkgdHlwZSAlciIgJSBrZXlfdHlwZSkKKworICAgICAgICBzdGF0cyA9IHt9CisgICAgICAgIHRyYWNlYmFja3MgPSB7fQorICAgICAgICBpZiBub3QgY3VtdWxhdGl2ZToKKyAgICAgICAgICAgIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzOgorICAgICAgICAgICAgICAgIHNpemUsIHRyYWNlX3RyYWNlYmFjayA9IHRyYWNlCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tzW3RyYWNlX3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIGtleV90eXBlID09ICd0cmFjZWJhY2snOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gdHJhY2VfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgIGVsaWYga2V5X3R5cGUgPT0gJ2xpbmVubyc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSB0cmFjZV90cmFjZWJhY2tbOjFdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6ICMga2V5X3R5cGUgPT0gJ2ZpbGVuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9ICgodHJhY2VfdHJhY2ViYWNrWzBdWzBdLCAwKSwpCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IFRyYWNlYmFjayhmcmFtZXMpCisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFja3NbdHJhY2VfdHJhY2ViYWNrXSA9IHRyYWNlYmFjaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHN0YXRzW3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICAgICAgc3RhdC5zaXplICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCArPSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzdGF0c1t0cmFjZWJhY2tdID0gU3RhdGlzdGljKHRyYWNlYmFjaywgc2l6ZSwgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzCisgICAgICAgICAgICBmb3IgdHJhY2UgaW4gc2VsZi50cmFjZXMuX3RyYWNlczoKKyAgICAgICAgICAgICAgICBzaXplLCB0cmFjZV90cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICAgICAgICAgIGZvciBmcmFtZSBpbiB0cmFjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja3NbZnJhbWVdCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtleV90eXBlID09ICdsaW5lbm8nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IChmcmFtZSwpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOiAjIGtleV90eXBlID09ICdmaWxlbmFtZSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKChmcmFtZVswXSwgMCksKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gVHJhY2ViYWNrKGZyYW1lcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFja3NbZnJhbWVdID0gdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQgPSBzdGF0c1t0cmFjZWJhY2tdCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5jb3VudCArPSAxCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzW3RyYWNlYmFja10gPSBTdGF0aXN0aWModHJhY2ViYWNrLCBzaXplLCAxKQorICAgICAgICByZXR1cm4gc3RhdHMKKworICAgIGRlZiBzdGF0aXN0aWNzKHNlbGYsIGtleV90eXBlLCBjdW11bGF0aXZlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIEdyb3VwIHN0YXRpc3RpY3MgYnkga2V5X3R5cGUuIFJldHVybiBhIHNvcnRlZCBsaXN0IG9mIFN0YXRpc3RpYworICAgICAgICBpbnN0YW5jZXMuCisgICAgICAgICIiIgorICAgICAgICBncm91cGVkID0gc2VsZi5fZ3JvdXBfYnkoa2V5X3R5cGUsIGN1bXVsYXRpdmUpCisgICAgICAgIHN0YXRpc3RpY3MgPSBsaXN0KGdyb3VwZWQudmFsdWVzKCkpCisgICAgICAgIHN0YXRpc3RpY3Muc29ydChyZXZlcnNlPVRydWUsIGtleT1TdGF0aXN0aWMuX3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gc3RhdGlzdGljcworCisgICAgZGVmIGNvbXBhcmVfdG8oc2VsZiwgb2xkX3NuYXBzaG90LCBrZXlfdHlwZSwgY3VtdWxhdGl2ZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlIHRoZSBkaWZmZXJlbmNlcyB3aXRoIGFuIG9sZCBzbmFwc2hvdCBvbGRfc25hcHNob3QuIEdldAorICAgICAgICBzdGF0aXN0aWNzIGFzIGEgc29ydGVkIGxpc3Qgb2YgU3RhdGlzdGljRGlmZiBpbnN0YW5jZXMsIGdyb3VwZWQgYnkKKyAgICAgICAgZ3JvdXBfYnkuCisgICAgICAgICIiIgorICAgICAgICBuZXdfZ3JvdXAgPSBzZWxmLl9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgb2xkX2dyb3VwID0gb2xkX3NuYXBzaG90Ll9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgc3RhdGlzdGljcyA9IF9jb21wYXJlX2dyb3VwZWRfc3RhdHMob2xkX2dyb3VwLCBuZXdfZ3JvdXApCisgICAgICAgIHN0YXRpc3RpY3Muc29ydChyZXZlcnNlPVRydWUsIGtleT1TdGF0aXN0aWNEaWZmLl9zb3J0X2tleSkKKyAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3MKKworCitkZWYgdGFrZV9zbmFwc2hvdCgpOgorICAgICIiIgorICAgIFRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLgorICAgICIiIgorICAgIGlmIG5vdCBpc190cmFjaW5nKCk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigidGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QiKQorICAgIHRyYWNlcyA9IF9nZXRfdHJhY2VzKCkKKyAgICB0cmFjZWJhY2tfbGltaXQgPSBnZXRfdHJhY2ViYWNrX2xpbWl0KCkKKyAgICByZXR1cm4gU25hcHNob3QodHJhY2VzLCB0cmFjZWJhY2tfbGltaXQpCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlLnB5IGIvTGliL3R1cnRsZS5weQppbmRleCBjNmViZmE1Li5hYjdiNmJhIDEwMDY0NAotLS0gYS9MaWIvdHVydGxlLnB5CisrKyBiL0xpYi90dXJ0bGUucHkKQEAgLTM4NDMsMTggKzM4NDMsMTggQEAKICAgICAgICAga2V5ID0gIlR1cnRsZS4iK21ldGhvZG5hbWUKICAgICAgICAgZG9jc2RpY3Rba2V5XSA9IGV2YWwoa2V5KS5fX2RvY19fCiAKLSAgICBmID0gb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKQotICAgIGtleXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gZG9jc2RpY3Qua2V5cygpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKLSAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKLSAgICBmb3Iga2V5IGluIGtleXNbOi0xXToKKyAgICB3aXRoIG9wZW4oIiVzLnB5IiAlIGZpbGVuYW1lLCJ3IikgYXMgZjoKKyAgICAgICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKKyAgICAgICAgZi53cml0ZSgnZG9jc2RpY3QgPSB7XG5cbicpCisgICAgICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGtleSA9IGtleXNbLTFdCiAgICAgICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCi0gICAga2V5ID0ga2V5c1stMV0KLSAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQotICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBmLndyaXRlKCJ9XG4iKQotICAgIGYuY2xvc2UoKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiJcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGYud3JpdGUoIn1cbiIpCisgICAgICAgIGYuY2xvc2UoKQogCiBkZWYgcmVhZF9kb2NzdHJpbmdzKGxhbmcpOgogICAgICIiIlJlYWQgaW4gZG9jc3RyaW5ncyBmcm9tIGxhbmctc3BlY2lmaWMgZG9jc3RyaW5nIGRpY3Rpb25hcnkuCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9fX21haW5fXy5weSBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CmluZGV4IGNiZjNhZWIuLmExNDY4NGMgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CkBAIC02LDcgKzYsNyBAQAogZnJvbSBpZGxlbGliLlBlcmNvbGF0b3IgaW1wb3J0IFBlcmNvbGF0b3IKIGZyb20gaWRsZWxpYi5Db2xvckRlbGVnYXRvciBpbXBvcnQgQ29sb3JEZWxlZ2F0b3IKIGZyb20gaWRsZWxpYi50ZXh0VmlldyBpbXBvcnQgdmlld19maWxlICMgVGV4dFZpZXdlcgotZnJvbSBpbXAgaW1wb3J0IHJlbG9hZAorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHJlbG9hZAogCiBpbXBvcnQgdHVydGxlCiBpbXBvcnQgdGltZQpkaWZmIC0tZ2l0IGEvTGliL3R5cGVzLnB5IGIvTGliL3R5cGVzLnB5CmluZGV4IGNmZDA5ZWEuLjdlNGZlYzIgMTAwNjQ0Ci0tLSBhL0xpYi90eXBlcy5weQorKysgYi9MaWIvdHlwZXMucHkKQEAgLTk5LDMgKzk5LDYwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBhIChub24tc3RyaWN0KSBzdWJjbGFzcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAib2YgdGhlIG1ldGFjbGFzc2VzIG9mIGFsbCBpdHMgYmFzZXMiKQogICAgIHJldHVybiB3aW5uZXIKKworY2xhc3MgRHluYW1pY0NsYXNzQXR0cmlidXRlOgorICAgICIiIlJvdXRlIGF0dHJpYnV0ZSBhY2Nlc3Mgb24gYSBjbGFzcyB0byBfX2dldGF0dHJfXy4KKworICAgIFRoaXMgaXMgYSBkZXNjcmlwdG9yLCB1c2VkIHRvIGRlZmluZSBhdHRyaWJ1dGVzIHRoYXQgYWN0IGRpZmZlcmVudGx5IHdoZW4KKyAgICBhY2Nlc3NlZCB0aHJvdWdoIGFuIGluc3RhbmNlIGFuZCB0aHJvdWdoIGEgY2xhc3MuICBJbnN0YW5jZSBhY2Nlc3MgcmVtYWlucworICAgIG5vcm1hbCwgYnV0IGFjY2VzcyB0byBhbiBhdHRyaWJ1dGUgdGhyb3VnaCBhIGNsYXNzIHdpbGwgYmUgcm91dGVkIHRvIHRoZQorICAgIGNsYXNzJ3MgX19nZXRhdHRyX18gbWV0aG9kOyB0aGlzIGlzIGRvbmUgYnkgcmFpc2luZyBBdHRyaWJ1dGVFcnJvci4KKworICAgIFRoaXMgYWxsb3dzIG9uZSB0byBoYXZlIHByb3BlcnRpZXMgYWN0aXZlIG9uIGFuIGluc3RhbmNlLCBhbmQgaGF2ZSB2aXJ0dWFsCisgICAgYXR0cmlidXRlcyBvbiB0aGUgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIChzZWUgRW51bSBmb3IgYW4gZXhhbXBsZSkuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmdldD1Ob25lLCBmc2V0PU5vbmUsIGZkZWw9Tm9uZSwgZG9jPU5vbmUpOgorICAgICAgICBzZWxmLmZnZXQgPSBmZ2V0CisgICAgICAgIHNlbGYuZnNldCA9IGZzZXQKKyAgICAgICAgc2VsZi5mZGVsID0gZmRlbAorICAgICAgICAjIG5leHQgdHdvIGxpbmVzIG1ha2UgRHluYW1pY0NsYXNzQXR0cmlidXRlIGFjdCB0aGUgc2FtZSBhcyBwcm9wZXJ0eQorICAgICAgICBzZWxmLl9fZG9jX18gPSBkb2Mgb3IgZmdldC5fX2RvY19fCisgICAgICAgIHNlbGYub3ZlcndyaXRlX2RvYyA9IGRvYyBpcyBOb25lCisgICAgICAgICMgc3VwcG9ydCBmb3IgYWJzdHJhY3QgbWV0aG9kcworICAgICAgICBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gYm9vbChnZXRhdHRyKGZnZXQsICdfX2lzYWJzdHJhY3RtZXRob2RfXycsIEZhbHNlKSkKKworICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcmNsYXNzPU5vbmUpOgorICAgICAgICBpZiBpbnN0YW5jZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fX2lzYWJzdHJhY3RtZXRob2RfXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoKQorICAgICAgICBlbGlmIHNlbGYuZmdldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoInVucmVhZGFibGUgYXR0cmlidXRlIikKKyAgICAgICAgcmV0dXJuIHNlbGYuZmdldChpbnN0YW5jZSkKKworICAgIGRlZiBfX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSk6CisgICAgICAgIGlmIHNlbGYuZnNldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImNhbid0IHNldCBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZzZXQoaW5zdGFuY2UsIHZhbHVlKQorCisgICAgZGVmIF9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpOgorICAgICAgICBpZiBzZWxmLmZkZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJjYW4ndCBkZWxldGUgYXR0cmlidXRlIikKKyAgICAgICAgc2VsZi5mZGVsKGluc3RhbmNlKQorCisgICAgZGVmIGdldHRlcihzZWxmLCBmZ2V0KToKKyAgICAgICAgZmRvYyA9IGZnZXQuX19kb2NfXyBpZiBzZWxmLm92ZXJ3cml0ZV9kb2MgZWxzZSBOb25lCisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoZmdldCwgc2VsZi5mc2V0LCBzZWxmLmZkZWwsIGZkb2Mgb3Igc2VsZi5fX2RvY19fKQorICAgICAgICByZXN1bHQub3ZlcndyaXRlX2RvYyA9IHNlbGYub3ZlcndyaXRlX2RvYworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgc2V0dGVyKHNlbGYsIGZzZXQpOgorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKHNlbGYuZmdldCwgZnNldCwgc2VsZi5mZGVsLCBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBkZWxldGVyKHNlbGYsIGZkZWwpOgorICAgICAgICByZXN1bHQgPSB0eXBlKHNlbGYpKHNlbGYuZmdldCwgc2VsZi5mc2V0LCBmZGVsLCBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC9fX21haW5fXy5weQppbmRleCA3OThlYmMwLi4yNjYzMTc4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CkBAIC0xMyw3ICsxMyw2IEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLWZyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtLCBVU0FHRV9BU19NQUlOCi1UZXN0UHJvZ3JhbS5VU0FHRSA9IFVTQUdFX0FTX01BSU4KK2Zyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtCiAKIG1haW4obW9kdWxlPU5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvY2FzZS5weSBiL0xpYi91bml0dGVzdC9jYXNlLnB5CmluZGV4IGY1NmFmNTUuLjdlZDkzMmYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC9jYXNlLnB5CkBAIC0zLDE0ICszLDE2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBwcHJpbnQKIGltcG9ydCByZQogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCiAKIGZyb20gLiBpbXBvcnQgcmVzdWx0CiBmcm9tIC51dGlsIGltcG9ydCAoc3RyY2xhc3MsIHNhZmVfcmVwciwgX2NvdW50X2RpZmZfYWxsX3B1cnBvc2UsCi0gICAgICAgICAgICAgICAgICAgX2NvdW50X2RpZmZfaGFzaGFibGUpCisgICAgICAgICAgICAgICAgICAgX2NvdW50X2RpZmZfaGFzaGFibGUsIF9jb21tb25fc2hvcnRlbl9yZXByKQogCiBfX3VuaXR0ZXN0ID0gVHJ1ZQogCkBAIC0yNiwxNyArMjgsMTEgQEAKICAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KICAgICAiIiIKIAotY2xhc3MgX0V4cGVjdGVkRmFpbHVyZShFeGNlcHRpb24pOgorY2xhc3MgX1Nob3VsZFN0b3AoRXhjZXB0aW9uKToKICAgICAiIiIKLSAgICBSYWlzZSB0aGlzIHdoZW4gYSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuCi0KLSAgICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICBUaGUgdGVzdCBzaG91bGQgc3RvcC4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbyk6Ci0gICAgICAgIHN1cGVyKF9FeHBlY3RlZEZhaWx1cmUsIHNlbGYpLl9faW5pdF9fKCkKLSAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCi0KIGNsYXNzIF9VbmV4cGVjdGVkU3VjY2VzcyhFeGNlcHRpb24pOgogICAgICIiIgogICAgIFRoZSB0ZXN0IHdhcyBzdXBwb3NlZCB0byBmYWlsLCBidXQgaXQgZGlkbid0IQpAQCAtNDQsMTMgKzQwLDQwIEBACiAKIAogY2xhc3MgX091dGNvbWUob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi5leHBlY3RpbmdfZmFpbHVyZSA9IEZhbHNlCisgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0CisgICAgICAgIHNlbGYucmVzdWx0X3N1cHBvcnRzX3N1YnRlc3RzID0gaGFzYXR0cihyZXN1bHQsICJhZGRTdWJUZXN0IikKICAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQotICAgICAgICBzZWxmLnNraXBwZWQgPSBOb25lCi0gICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuc2tpcHBlZCA9IFtdCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlID0gTm9uZQogICAgICAgICBzZWxmLmVycm9ycyA9IFtdCi0gICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQorCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgdGVzdFBhcnRFeGVjdXRvcihzZWxmLCB0ZXN0X2Nhc2UsIGlzVGVzdD1GYWxzZSk6CisgICAgICAgIG9sZF9zdWNjZXNzID0gc2VsZi5zdWNjZXNzCisgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5za2lwcGVkLmFwcGVuZCgodGVzdF9jYXNlLCBzdHIoZSkpKQorICAgICAgICBleGNlcHQgX1Nob3VsZFN0b3A6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIHNlbGYuZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmUgPSBleGNfaW5mbworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBleGNfaW5mbykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzZWxmLnJlc3VsdF9zdXBwb3J0c19zdWJ0ZXN0cyBhbmQgc2VsZi5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdF9jYXNlLCBOb25lKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IHNlbGYuc3VjY2VzcyBhbmQgb2xkX3N1Y2Nlc3MKIAogCiBkZWYgX2lkKG9iaik6CkBAIC04OCwyMiArMTExLDI2IEBACiAgICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKICAgICByZXR1cm4gX2lkCiAKLQotZGVmIGV4cGVjdGVkRmFpbHVyZShmdW5jKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByYWlzZSBfRXhwZWN0ZWRGYWlsdXJlKHN5cy5leGNfaW5mbygpKQotICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MKLSAgICByZXR1cm4gd3JhcHBlcgorZGVmIGV4cGVjdGVkRmFpbHVyZSh0ZXN0X2l0ZW0pOgorICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18gPSBUcnVlCisgICAgcmV0dXJuIHRlc3RfaXRlbQogCiAKLWNsYXNzIF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dChvYmplY3QpOgorY2xhc3MgX0Jhc2VUZXN0Q2FzZUNvbnRleHQ6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKToKKyAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKKworICAgIGRlZiBfcmFpc2VGYWlsdXJlKHNlbGYsIHN0YW5kYXJkTXNnKToKKyAgICAgICAgbXNnID0gc2VsZi50ZXN0X2Nhc2UuX2Zvcm1hdE1lc3NhZ2Uoc2VsZi5tc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLnRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4cGVjdGVkLCB0ZXN0X2Nhc2UsIGNhbGxhYmxlX29iaj1Ob25lLAogICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleD1Ob25lKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQogICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKICAgICAgICAgc2VsZi50ZXN0X2Nhc2UgPSB0ZXN0X2Nhc2UKICAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lOgpAQCAtMTE4LDEwICsxNDUsNiBAQAogICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4ID0gZXhwZWN0ZWRfcmVnZXgKICAgICAgICAgc2VsZi5tc2cgPSBOb25lCiAKLSAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6Ci0gICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KICAgICBkZWYgaGFuZGxlKHNlbGYsIG5hbWUsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIElmIGNhbGxhYmxlX29iaiBpcyBOb25lLCBhc3NlcnRSYWlzZXMvV2FybnMgaXMgYmVpbmcgdXNlZCBhcyBhCkBAIC0xMzUsNyArMTU4LDYgQEAKICAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCiAKIAotCiBjbGFzcyBfQXNzZXJ0UmFpc2VzQ29udGV4dChfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQpOgogICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydFJhaXNlcyogbWV0aG9kcy4iIiIKIApAQCAtMjE3LDYgKzIzOSw3NCBAQAogICAgICAgICAgICAgc2VsZi5fcmFpc2VGYWlsdXJlKCJ7fSBub3QgdHJpZ2dlcmVkIi5mb3JtYXQoZXhjX25hbWUpKQogCiAKKworX0xvZ2dpbmdXYXRjaGVyID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0xvZ2dpbmdXYXRjaGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJyZWNvcmRzIiwgIm91dHB1dCJdKQorCisKK2NsYXNzIF9DYXB0dXJpbmdIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgIiIiCisgICAgQSBsb2dnaW5nIGhhbmRsZXIgY2FwdHVyaW5nIGFsbCAocmF3IGFuZCBmb3JtYXR0ZWQpIGxvZ2dpbmcgb3V0cHV0LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBsb2dnaW5nLkhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gX0xvZ2dpbmdXYXRjaGVyKFtdLCBbXSkKKworICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgc2VsZi53YXRjaGVyLnJlY29yZHMuYXBwZW5kKHJlY29yZCkKKyAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBzZWxmLndhdGNoZXIub3V0cHV0LmFwcGVuZChtc2cpCisKKworCitjbGFzcyBfQXNzZXJ0TG9nc0NvbnRleHQoX0Jhc2VUZXN0Q2FzZUNvbnRleHQpOgorICAgICIiIkEgY29udGV4dCBtYW5hZ2VyIHVzZWQgdG8gaW1wbGVtZW50IFRlc3RDYXNlLmFzc2VydExvZ3MoKS4iIiIKKworICAgIExPR0dJTkdfRk9STUFUID0gIiUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jYXNlLCBsb2dnZXJfbmFtZSwgbGV2ZWwpOgorICAgICAgICBfQmFzZVRlc3RDYXNlQ29udGV4dC5fX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UpCisgICAgICAgIHNlbGYubG9nZ2VyX25hbWUgPSBsb2dnZXJfbmFtZQorICAgICAgICBpZiBsZXZlbDoKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLl9uYW1lVG9MZXZlbC5nZXQobGV2ZWwsIGxldmVsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5sZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICBzZWxmLm1zZyA9IE5vbmUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5sb2dnZXJfbmFtZSwgbG9nZ2luZy5Mb2dnZXIpOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBzZWxmLmxvZ2dlcl9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2dnZXIgPSBzZWxmLmxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHNlbGYubG9nZ2VyX25hbWUpCisgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKHNlbGYuTE9HR0lOR19GT1JNQVQpCisgICAgICAgIGhhbmRsZXIgPSBfQ2FwdHVyaW5nSGFuZGxlcigpCisgICAgICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgc2VsZi53YXRjaGVyID0gaGFuZGxlci53YXRjaGVyCisgICAgICAgIHNlbGYub2xkX2hhbmRsZXJzID0gbG9nZ2VyLmhhbmRsZXJzWzpdCisgICAgICAgIHNlbGYub2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgICAgIHNlbGYub2xkX3Byb3BhZ2F0ZSA9IGxvZ2dlci5wcm9wYWdhdGUKKyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW2hhbmRsZXJdCisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChzZWxmLmxldmVsKQorICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgcmV0dXJuIGhhbmRsZXIud2F0Y2hlcgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi5sb2dnZXIuaGFuZGxlcnMgPSBzZWxmLm9sZF9oYW5kbGVycworICAgICAgICBzZWxmLmxvZ2dlci5wcm9wYWdhdGUgPSBzZWxmLm9sZF9wcm9wYWdhdGUKKyAgICAgICAgc2VsZi5sb2dnZXIuc2V0TGV2ZWwoc2VsZi5vbGRfbGV2ZWwpCisgICAgICAgIGlmIGV4Y190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBsZXQgdW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIGxlbihzZWxmLndhdGNoZXIucmVjb3JkcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgKKyAgICAgICAgICAgICAgICAibm8gbG9ncyBvZiBsZXZlbCB7fSBvciBoaWdoZXIgdHJpZ2dlcmVkIG9uIHt9IgorICAgICAgICAgICAgICAgIC5mb3JtYXQobG9nZ2luZy5nZXRMZXZlbE5hbWUoc2VsZi5sZXZlbCksIHNlbGYubG9nZ2VyLm5hbWUpKQorCisKIGNsYXNzIFRlc3RDYXNlKG9iamVjdCk6CiAgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgogCkBAIC0yNzAsNyArMzYwLDcgQEAKICAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBOb25lCisgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSAnTm8gdGVzdCcKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKQEAgLTI4Myw2ICszNzMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwogICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBOb25lCiAKICAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQogICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bApAQCAtMzcwLDQ0ICs0NjEsODAgQEAKICAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAogICAgICAgICAgICAgICAgKHN0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCiAKLSAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCByZWFzb24pOgorICAgIGRlZiBfYWRkU2tpcChzZWxmLCByZXN1bHQsIHRlc3RfY2FzZSwgcmVhc29uKToKICAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCiAgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgICAgIGFkZFNraXAodGVzdF9jYXNlLCByZWFzb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRTa2lwIG1ldGhvZCwgc2tpcHMgbm90IHJlcG9ydGVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcsIDIpCi0gICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3ModGVzdF9jYXNlKQogCi0gICAgZGVmIF9leGVjdXRlVGVzdFBhcnQoc2VsZiwgZnVuY3Rpb24sIG91dGNvbWUsIGlzVGVzdD1GYWxzZSk6CisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgc3ViVGVzdChzZWxmLCBtc2c9Tm9uZSwgKipwYXJhbXMpOgorICAgICAgICAiIiJSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB3aWxsIHJldHVybiB0aGUgZW5jbG9zZWQgYmxvY2sKKyAgICAgICAgb2YgY29kZSBpbiBhIHN1YnRlc3QgaWRlbnRpZmllZCBieSB0aGUgb3B0aW9uYWwgbWVzc2FnZSBhbmQKKyAgICAgICAga2V5d29yZCBwYXJhbWV0ZXJzLiAgQSBmYWlsdXJlIGluIHRoZSBzdWJ0ZXN0IG1hcmtzIHRoZSB0ZXN0CisgICAgICAgIGNhc2UgYXMgZmFpbGVkIGJ1dCByZXN1bWVzIGV4ZWN1dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NlZAorICAgICAgICBibG9jaywgYWxsb3dpbmcgZnVydGhlciB0ZXN0IGNvZGUgdG8gYmUgZXhlY3V0ZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHM6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHBhcmVudCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgaWYgcGFyZW50IGlzIE5vbmU6CisgICAgICAgICAgICBwYXJhbXNfbWFwID0gY29sbGVjdGlvbnMuQ2hhaW5NYXAocGFyYW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IHBhcmVudC5wYXJhbXMubmV3X2NoaWxkKHBhcmFtcykKKyAgICAgICAgc2VsZi5fc3VidGVzdCA9IF9TdWJUZXN0KHNlbGYsIG1zZywgcGFyYW1zX21hcCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuY3Rpb24oKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLnNraXBwZWQgPSBzdHIoZSkKLSAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBpZiBpc1Rlc3Q6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKGV4Y19pbmZvKQotICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZmFpbHVyZXMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQotICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgd2l0aCBzZWxmLl9vdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZi5fc3VidGVzdCwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fb3V0Y29tZS5zdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX291dGNvbWUucmVzdWx0CisgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIG5vdCBOb25lIGFuZCByZXN1bHQuZmFpbGZhc3Q6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9TaG91bGRTdG9wCisgICAgICAgICAgICBlbGlmIHNlbGYuX291dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaXMgZXhwZWN0aW5nIGEgZmFpbHVyZSwgd2UgcmVhbGx5IHdhbnQgdG8KKyAgICAgICAgICAgICAgICAjIHN0b3Agbm93IGFuZCByZWdpc3RlciB0aGUgZXhwZWN0ZWQgZmFpbHVyZS4KKyAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3VidGVzdCA9IHBhcmVudAorCisgICAgZGVmIF9mZWVkRXJyb3JzVG9SZXN1bHQoc2VsZiwgcmVzdWx0LCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXhjX2luZm8gaW4gZXJyb3JzOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0ZXN0LCBfU3ViVGVzdCk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdC50ZXN0X2Nhc2UsIHRlc3QsIGV4Y19pbmZvKQorICAgICAgICAgICAgZWxpZiBleGNfaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGV4Y19pbmZvWzBdLCBzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm8pCisKKyAgICBkZWYgX2FkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCByZXN1bHQsIGV4Y19pbmZvKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlID0gcmVzdWx0LmFkZEV4cGVjdGVkRmFpbHVyZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRFeHBlY3RlZEZhaWx1cmUgbWV0aG9kLCByZXBvcnRpbmcgYXMgcGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCByZXN1bHQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAjIFdlIG5lZWQgdG8gcGFzcyBhbiBhY3R1YWwgZXhjZXB0aW9uIGFuZCB0cmFjZWJhY2sgdG8gYWRkRmFpbHVyZSwKKyAgICAgICAgICAgICMgb3RoZXJ3aXNlIHRoZSBsZWdhY3kgcmVzdWx0IGNhbiBjaG9rZS4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MgZnJvbSBOb25lCisgICAgICAgICAgICBleGNlcHQgX1VuZXhwZWN0ZWRTdWNjZXNzOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHNlbGYsIHN5cy5leGNfaW5mbygpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZikKIAogICAgIGRlZiBydW4oc2VsZiwgcmVzdWx0PU5vbmUpOgogICAgICAgICBvcmlnX3Jlc3VsdCA9IHJlc3VsdApAQCAtNDI2LDQ2ICs1NTMsMzggQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQotICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2VsZiwgc2tpcF93aHkpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQogICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGV4cGVjdGluZ19mYWlsdXJlID0gZ2V0YXR0cih0ZXN0TWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdW5pdHRlc3RfZXhwZWN0aW5nX2ZhaWx1cmVfXyIsIEZhbHNlKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUoKQotICAgICAgICAgICAgc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBvdXRjb21lCisgICAgICAgICAgICBvdXRjb21lID0gX091dGNvbWUocmVzdWx0KQorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IG91dGNvbWUKIAotICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYuc2V0VXAsIG91dGNvbWUpCisgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldFVwKCkKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQodGVzdE1ldGhvZCwgb3V0Y29tZSwgaXNUZXN0PVRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYudGVhckRvd24sIG91dGNvbWUpCisgICAgICAgICAgICAgICAgb3V0Y29tZS5leHBlY3RpbmdfZmFpbHVyZSA9IGV4cGVjdGluZ19mYWlsdXJlCisgICAgICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCiAKICAgICAgICAgICAgIHNlbGYuZG9DbGVhbnVwcygpCisgICAgICAgICAgICBmb3IgdGVzdCwgcmVhc29uIGluIG91dGNvbWUuc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgdGVzdCwgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5fZmVlZEVycm9yc1RvUmVzdWx0KHJlc3VsdCwgb3V0Y29tZS5lcnJvcnMpCiAgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5za2lwcGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgb3V0Y29tZS5za2lwcGVkKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmVycm9yczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkRXhwZWN0ZWRGYWlsdXJlKHJlc3VsdCwgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcykKLQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRVbmV4cGVjdGVkU3VjY2VzcyhyZXN1bHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQpAQCAtNDc3LDExICs1OTYsMTEgQEAKICAgICBkZWYgZG9DbGVhbnVwcyhzZWxmKToKICAgICAgICAgIiIiRXhlY3V0ZSBhbGwgY2xlYW51cCBmdW5jdGlvbnMuIE5vcm1hbGx5IGNhbGxlZCBmb3IgeW91IGFmdGVyCiAgICAgICAgIHRlYXJEb3duLiIiIgotICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgb3IgX091dGNvbWUoKQorICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZSBvciBfT3V0Y29tZSgpCiAgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgogICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgpCi0gICAgICAgICAgICBwYXJ0ID0gbGFtYmRhOiBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQocGFydCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgICAjIHJldHVybiB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgICAjIGV2ZW4gdGhvdWdoIHdlIG5vIGxvbmdlciB1cyBpdCBpbnRlcm5hbGx5CkBAIC02MDAsNiArNzE5LDI4IEBACiAgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGNhbGxhYmxlX29iaikKICAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRXYXJucycsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKQogCisgICAgZGVmIGFzc2VydExvZ3Moc2VsZiwgbG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhIGxvZyBtZXNzYWdlIG9mIGxldmVsICpsZXZlbCogb3IgaGlnaGVyIGlzIGVtaXR0ZWQKKyAgICAgICAgb24gKmxvZ2dlcl9uYW1lKiBvciBpdHMgY2hpbGRyZW4uICBJZiBvbWl0dGVkLCAqbGV2ZWwqIGRlZmF1bHRzIHRvCisgICAgICAgIElORk8gYW5kICpsb2dnZXIqIGRlZmF1bHRzIHRvIHRoZSByb290IGxvZ2dlci4KKworICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGFuZCB3aWxsIHlpZWxkCisgICAgICAgIGEgcmVjb3JkaW5nIG9iamVjdCB3aXRoIHR3byBhdHRyaWJ1dGVzOiBgb3V0cHV0YCBhbmQgYHJlY29yZHNgLgorICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIsIHRoZSBgb3V0cHV0YCBhdHRyaWJ1dGUgd2lsbAorICAgICAgICBiZSBhIGxpc3Qgb2YgdGhlIG1hdGNoaW5nIGZvcm1hdHRlZCBsb2cgbWVzc2FnZXMgYW5kIHRoZQorICAgICAgICBgcmVjb3Jkc2AgYXR0cmlidXRlIHdpbGwgYmUgYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIExvZ1JlY29yZAorICAgICAgICBvYmplY3RzLgorCisgICAgICAgIEV4YW1wbGU6OgorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJywgbGV2ZWw9J0lORk8nKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX0Fzc2VydExvZ3NDb250ZXh0KHNlbGYsIGxvZ2dlciwgbGV2ZWwpCisKICAgICBkZWYgX2dldEFzc2VydEVxdWFsaXR5RnVuYyhzZWxmLCBmaXJzdCwgc2Vjb25kKToKICAgICAgICAgIiIiR2V0IGEgZGV0YWlsZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhlIHR5cGVzIG9mIHRoZSB0d28gYXJncy4KIApAQCAtNjI5LDcgKzc3MCw3IEBACiAgICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgogICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCiAgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNlY29uZCkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIApAQCAtNzY0LDE0ICs5MDUsOSBAQAogICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgogICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKLSAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQotICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKLSAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCi0gICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKLSAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgIChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwpICsKKyAgICAgICAgICAgICAgICAgICAgX2NvbW1vbl9zaG9ydGVuX3JlcHIoc2VxMSwgc2VxMikpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtOTI5LDcgKzEwNjUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZDIsIGRpY3QsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCiAKICAgICAgICAgaWYgZDEgIT0gZDI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGQxLCBkMikKICAgICAgICAgICAgIGRpZmYgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKQEAgLTEwMTMsOCArMTE0OSw3IEBACiAgICAgICAgICAgICBpZiBsZW4oZmlyc3RsaW5lcykgPT0gMSBhbmQgZmlyc3Quc3RyaXAoJ1xyXG4nKSA9PSBmaXJzdDoKICAgICAgICAgICAgICAgICBmaXJzdGxpbmVzID0gW2ZpcnN0ICsgJ1xuJ10KICAgICAgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IFtzZWNvbmQgKyAnXG4nXQotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCwgVHJ1ZSkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgZGlmZiA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmlyc3RsaW5lcywgc2Vjb25kbGluZXMpKQogICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCiAgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKQEAgLTEyMTIsMyArMTM0NywzOSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyaXB0aW9uCiAgICAgICAgIGRvYyA9IHNlbGYuX3Rlc3RGdW5jLl9fZG9jX18KICAgICAgICAgcmV0dXJuIGRvYyBhbmQgZG9jLnNwbGl0KCJcbiIpWzBdLnN0cmlwKCkgb3IgTm9uZQorCisKK2NsYXNzIF9TdWJUZXN0KFRlc3RDYXNlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0X2Nhc2UsIG1lc3NhZ2UsIHBhcmFtcyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9tZXNzYWdlID0gbWVzc2FnZQorICAgICAgICBzZWxmLnRlc3RfY2FzZSA9IHRlc3RfY2FzZQorICAgICAgICBzZWxmLnBhcmFtcyA9IHBhcmFtcworICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24gPSB0ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN1YnRlc3RzIGNhbm5vdCBiZSBydW4gZGlyZWN0bHkiKQorCisgICAgZGVmIF9zdWJEZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcGFydHMgPSBbXQorICAgICAgICBpZiBzZWxmLl9tZXNzYWdlOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCJbe31dIi5mb3JtYXQoc2VsZi5fbWVzc2FnZSkpCisgICAgICAgIGlmIHNlbGYucGFyYW1zOgorICAgICAgICAgICAgcGFyYW1zX2Rlc2MgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgInt9PXshcn0iLmZvcm1hdChrLCB2KQorICAgICAgICAgICAgICAgIGZvciAoaywgdikgaW4gc29ydGVkKHNlbGYucGFyYW1zLml0ZW1zKCkpKQorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCIoe30pIi5mb3JtYXQocGFyYW1zX2Rlc2MpKQorICAgICAgICByZXR1cm4gIiAiLmpvaW4ocGFydHMpIG9yICcoPHN1YnRlc3Q+KScKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSB7fSIuZm9ybWF0KHNlbGYudGVzdF9jYXNlLmlkKCksIHNlbGYuX3N1YkRlc2NyaXB0aW9uKCkpCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSBzdWJ0ZXN0LCBvciBOb25lIGlmIG5vCisgICAgICAgIGRlc2NyaXB0aW9uIGhhcyBiZWVuIHByb3ZpZGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGVzdF9jYXNlLnNob3J0RGVzY3JpcHRpb24oKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30ge30iLmZvcm1hdChzZWxmLnRlc3RfY2FzZSwgc2VsZi5fc3ViRGVzY3JpcHRpb24oKSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CmluZGV4IDlhYjI2YzEuLjgwOGM1MGUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtMzQsNiArMzQsMTQgQEAKICAgICBUZXN0Q2xhc3MgPSB0eXBlKGNsYXNzbmFtZSwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCiAgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQogCitkZWYgX21ha2Vfc2tpcHBlZF90ZXN0KG1ldGhvZG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcyk6CisgICAgQGNhc2Uuc2tpcChzdHIoZXhjZXB0aW9uKSkKKyAgICBkZWYgdGVzdFNraXBwZWQoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBhdHRycyA9IHttZXRob2RuYW1lOiB0ZXN0U2tpcHBlZH0KKyAgICBUZXN0Q2xhc3MgPSB0eXBlKCJNb2R1bGVTa2lwcGVkIiwgKGNhc2UuVGVzdENhc2UsKSwgYXR0cnMpCisgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKFRlc3RDbGFzcyhtZXRob2RuYW1lKSwpKQorCiBkZWYgX2p5dGhvbl9hd2FyZV9zcGxpdGV4dChwYXRoKToKICAgICBpZiBwYXRoLmxvd2VyKCkuZW5kc3dpdGgoJyRweS5jbGFzcycpOgogICAgICAgICByZXR1cm4gcGF0aFs6LTldCkBAIC01Myw4ICs2MSw5IEBACiAgICAgZGVmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0ZXN0Q2FzZUNsYXNzIiIiCiAgICAgICAgIGlmIGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc3VpdGUuVGVzdFN1aXRlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSBUZXN0U3VpdGUuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0U3VpdGUuIE1heWJlIHlvdSBtZWFudCB0byBkZXJpdmUgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RDYXNlPyIpCiAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKICAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKICAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQpAQCAtMTY5LDYgKzE3OCw5IEBACiAgICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CiAgICAgICAgIHBhY2thZ2VzIGNhbiBjb250aW51ZSBkaXNjb3ZlcnkgdGhlbXNlbHZlcy4gdG9wX2xldmVsX2RpciBpcyBzdG9yZWQgc28KICAgICAgICAgbG9hZF90ZXN0cyBkb2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhpcyBhcmd1bWVudCBpbiB0byBsb2FkZXIuZGlzY292ZXIoKS4KKworICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGV4ZWN1dGlvbgorICAgICAgICBvcmRlciBldmVuIG9uIGZpbGVzeXN0ZW1zIHdpdGggbm9uLWFscGhhYmV0aWNhbCBvcmRlcmluZyBsaWtlIGV4dDMvNC4KICAgICAgICAgIiIiCiAgICAgICAgIHNldF9pbXBsaWNpdF90b3AgPSBGYWxzZQogICAgICAgICBpZiB0b3BfbGV2ZWxfZGlyIGlzIE5vbmUgYW5kIHNlbGYuX3RvcF9sZXZlbF9kaXIgaXMgbm90IE5vbmU6CkBAIC0xODksNiArMjAxLDggQEAKICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbF9kaXIKIAogICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IEZhbHNlCisgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCisgICAgICAgIHRlc3RzID0gW10KICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKSk6CiAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKQogICAgICAgICAgICAgaWYgc3RhcnRfZGlyICE9IHRvcF9sZXZlbF9kaXI6CkBAIC0yMDIsMTUgKzIxNiw1MiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1vZHVsZXNbc3RhcnRfZGlyXQogICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgodGhlX21vZHVsZS5fX2ZpbGVfXykpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBuYW1lc3BhY2UgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IHRoZV9tb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBzcGVjIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiB0aGVfbW9kdWxlLl9fcGF0aF9fOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IHNldF9pbXBsaWNpdF90b3AgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGF0aC5zdGFydHN3aXRoKHRvcF9sZXZlbF9kaXIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aC5zcGxpdCh0aGVfbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCIuIiwgb3MucGF0aC5zZXApKVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfdGVzdHMocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHRoZV9tb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBidWlsdGluIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW4gbm90IHVzZSBidWlsdGluIG1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBkb3R0ZWQgbW9kdWxlIG5hbWVzJykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvblwndCBrbm93IGhvdyB0byBkaXNjb3ZlciBmcm9tIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0aGVfbW9kdWxlKSkgZnJvbSBOb25lCisKICAgICAgICAgICAgICAgICBpZiBzZXRfaW1wbGljaXRfdG9wOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19uYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCiAKICAgICAgICAgaWYgaXNfbm90X2ltcG9ydGFibGU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignU3RhcnQgZGlyZWN0b3J5IGlzIG5vdCBpbXBvcnRhYmxlOiAlcicgJSBzdGFydF9kaXIpCiAKLSAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgaWYgbm90IGlzX25hbWVzcGFjZToKKyAgICAgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCiAKICAgICBkZWYgX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgpAQCAtMjQzLDkgKzI5NCw5IEBACiAgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1hdGNoaW5nIHN0cmF0ZWd5CiAgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCiAKLSAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9RmFsc2UpOgogICAgICAgICAiIiJVc2VkIGJ5IGRpc2NvdmVyeS4gWWllbGRzIHRlc3Qgc3VpdGVzIGl0IGxvYWRzLiIiIgotICAgICAgICBwYXRocyA9IG9zLmxpc3RkaXIoc3RhcnRfZGlyKQorICAgICAgICBwYXRocyA9IHNvcnRlZChvcy5saXN0ZGlyKHN0YXJ0X2RpcikpCiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfZGlyLCBwYXRoKQpAQCAtMjU5LDYgKzMxMCw4IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBjYXNlLlNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX3NraXBwZWRfdGVzdChuYW1lLCBlLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yNzQsNyArMzI3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZyAlIChtb2RfbmFtZSwgbW9kdWxlX2RpciwgZXhwZWN0ZWRfZGlyKSkKICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgaWYgKG5vdCBuYW1lc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSkpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgbG9hZF90ZXN0cyA9IE5vbmUKQEAgLTI5MSw4ICszNDUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZT1uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgcGF0dGVybikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tYWluLnB5IGIvTGliL3VuaXR0ZXN0L21haW4ucHkKaW5kZXggZWFkNjQ5My4uMTgwZGY4NiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L21haW4ucHkKKysrIGIvTGliL3VuaXR0ZXN0L21haW4ucHkKQEAgLTEsNyArMSw3IEBACiAiIiJVbml0dGVzdCBtYWluIHByb2dyYW0iIiIKIAogaW1wb3J0IHN5cwotaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBvcwogCiBmcm9tIC4gaW1wb3J0IGxvYWRlciwgcnVubmVyCkBAIC05LDUzICs5LDIwIEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLUZBSUxGQVNUICAgICA9ICIgIC1mLCAtLWZhaWxmYXN0ICAgU3RvcCBvbiBmaXJzdCBmYWlsdXJlXG4iCi1DQVRDSEJSRUFLICAgPSAiICAtYywgLS1jYXRjaCAgICAgIENhdGNoIGNvbnRyb2wtQyBhbmQgZGlzcGxheSByZXN1bHRzXG4iCi1CVUZGRVJPVVRQVVQgPSAiICAtYiwgLS1idWZmZXIgICAgIEJ1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdCBydW5zXG4iCi0KLVVTQUdFX0FTX01BSU4gPSAiIiJcCi1Vc2FnZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdHNdCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01BSU5fRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQotICAlKHByb2dOYW1lKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKLSAgJShwcm9nTmFtZSlzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCi0KLVt0ZXN0c10gY2FuIGJlIGEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgY2xhc3NlcyBhbmQgdGVzdAotbWV0aG9kcy4KLQotQWx0ZXJuYXRpdmUgVXNhZ2U6ICUocHJvZ05hbWUpcyBkaXNjb3ZlciBbb3B0aW9uc10KLQotT3B0aW9uczoKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzICAtcyBkaXJlY3RvcnkgICAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQotICAtcCBwYXR0ZXJuICAgICAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQotICAtdCBkaXJlY3RvcnkgICAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdCB0bwotICAgICAgICAgICAgICAgICAgIHN0YXJ0IGRpcmVjdG9yeSkKLQotRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcAotbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LgorICAlKHByb2cpcyB0ZXN0X21vZHVsZSAgICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKKyAgJShwcm9nKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKKyAgJShwcm9nKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKICIiIgogCi1VU0FHRV9GUk9NX01PRFVMRSA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0XSBbLi4uXQotCi1PcHRpb25zOgotICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCi0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitNT0RVTEVfRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCi0gICUocHJvZ05hbWUpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgICAgICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCisgICUocHJvZylzICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKKyAgJShwcm9nKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCisgICUocHJvZylzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgLSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCisgICUocHJvZylzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCiAiIiIKIAogZGVmIF9jb252ZXJ0X25hbWUobmFtZSk6CkBAIC04MiwxMCArNDksMTEgQEAKICAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKICAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KICAgICAiIiIKLSAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCi0KICAgICAjIGRlZmF1bHRzIGZvciB0ZXN0aW5nCisgICAgbW9kdWxlPU5vbmUKKyAgICB2ZXJib3NpdHkgPSAxCiAgICAgZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gcHJvZ05hbWUgPSB3YXJuaW5ncyA9IE5vbmUKKyAgICBfZGlzY292ZXJ5X3BhcnNlciA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLAogICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPU5vbmUsIHRlc3RMb2FkZXI9bG9hZGVyLmRlZmF1bHRUZXN0TG9hZGVyLApAQCAtMTI3LDQ0ICs5NSw0NyBAQAogICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgogICAgICAgICBpZiBtc2c6CiAgICAgICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHVzYWdlID0geydwcm9nTmFtZSc6IHNlbGYucHJvZ05hbWUsICdjYXRjaGJyZWFrJzogJycsICdmYWlsZmFzdCc6ICcnLAotICAgICAgICAgICAgICAgICAnYnVmZmVyJzogJyd9Ci0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnZmFpbGZhc3QnXSA9IEZBSUxGQVNUCi0gICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydjYXRjaGJyZWFrJ10gPSBDQVRDSEJSRUFLCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2J1ZmZlciddID0gQlVGRkVST1VUUFVUCi0gICAgICAgIHByaW50KHNlbGYuVVNBR0UgJSB1c2FnZSkKKyAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBzZWxmLl9wcmludF9oZWxwKCkKICAgICAgICAgc3lzLmV4aXQoMikKIAorICAgIGRlZiBfcHJpbnRfaGVscChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQoc2VsZi5fbWFpbl9wYXJzZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgICAgIHByaW50KE1BSU5fRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKyAgICAgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTU9EVUxFX0VYQU1QTEVTICUgeydwcm9nJzogc2VsZi5wcm9nTmFtZX0pCisKICAgICBkZWYgcGFyc2VBcmdzKHNlbGYsIGFyZ3YpOgotICAgICAgICBpZiAoKGxlbihhcmd2KSA+IDEgYW5kIGFyZ3ZbMV0ubG93ZXIoKSA9PSAnZGlzY292ZXInKSBvcgotICAgICAgICAgICAgKGxlbihhcmd2KSA9PSAxIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lKSk6Ci0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3Zlcic6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMjpdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRlc3RzOgorICAgICAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKKyAgICAgICAgICAgICAgICAjIHRlc3QgZGlzY292ZXJ5LgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShbXSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21haW5fcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0sIHNlbGYpCiAKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0T3B0UGFyc2VyKCkKLSAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQotICAgICAgICBzZWxmLl9zZXRBdHRyaWJ1dGVzRnJvbU9wdGlvbnMob3B0aW9ucykKLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5tb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKLSAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuIFRoaXMgbWVhbnMgLWMgLyAtYiAvIC12IC8gLWYgb3B0aW9ucyB3aWxsCi0gICAgICAgICAgICAjIGJlIGhhbmRsZWQgdHdpY2UsIHdoaWNoIGlzIGhhcm1sZXNzIGJ1dCBub3QgaWRlYWwuCi0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsxOl0pCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgotICAgICAgICAgICAgIyBjcmVhdGVUZXN0cyB3aWxsIGxvYWQgdGVzdHMgZnJvbSBzZWxmLm1vZHVsZQotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCi0gICAgICAgIGVsaWYgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoYXJncykKKyAgICAgICAgaWYgc2VsZi50ZXN0czoKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoc2VsZi50ZXN0cykKICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgICAgICAgIyB0byBzdXBwb3J0IHB5dGhvbiAtbSB1bml0dGVzdCAuLi4KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6CisgICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCisgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuZGVmYXVsdFRlc3QsIHN0cik6CiAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IChzZWxmLmRlZmF1bHRUZXN0LCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gbGlzdChzZWxmLmRlZmF1bHRUZXN0KQogICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKIAogICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKQEAgLTE3NCw3NiArMTQ1LDg0IEBACiAgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKIAotICAgIGRlZiBfZ2V0T3B0UGFyc2VyKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3B0cGFyc2UKLSAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3F1aWV0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUXVpZXQgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2luaXRBcmdQYXJzZXJzKHNlbGYpOgorICAgICAgICBwYXJlbnRfcGFyc2VyID0gc2VsZi5fZ2V0UGFyZW50QXJnUGFyc2VyKCkKKyAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIgPSBzZWxmLl9nZXRNYWluQXJnUGFyc2VyKHBhcmVudF9wYXJzZXIpCisgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgPSBzZWxmLl9nZXREaXNjb3ZlcnlBcmdQYXJzZXIocGFyZW50X3BhcnNlcikKIAotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0ICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTdG9wIG9uIGZpcnN0IGZhaWwgb3IgZXJyb3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmJ1ZmZlciAhPSBGYWxzZToKLSAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgZGVmIF9nZXRQYXJlbnRBcmdQYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2l0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnKQorCisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicpCisgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNhdGNoJywgZGVzdD0nY2F0Y2hicmVhaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicpCisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWZmZXInLCBkZXN0PSdidWZmZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJykKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKwogICAgICAgICByZXR1cm4gcGFyc2VyCiAKLSAgICBkZWYgX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhzZWxmLCBvcHRpb25zKToKLSAgICAgICAgIyBvbmx5IHNldCBvcHRpb25zIGZyb20gdGhlIHBhcnNpbmcgaGVyZQotICAgICAgICAjIGlmIHRoZXkgd2VyZW4ndCBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IKLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IG9wdGlvbnMuZmFpbGZhc3QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJlYWsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gb3B0aW9ucy5idWZmZXIKKyAgICBkZWYgX2dldE1haW5BcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwID0gc2VsZi5fcHJpbnRfaGVscAogCi0gICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgotICAgICAgICBlbGlmIG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDAKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGVzdHMnLCBuYXJncz0nKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzZXMgYW5kIHRlc3QgbWV0aG9kcy4nKQogCi0gICAgZGVmIF9hZGREaXNjb3ZlcnlPcHRpb25zKHNlbGYsIHBhcnNlcik6Ci0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywgZGVmYXVsdD0ndGVzdCoucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdG9wLWxldmVsLWRpcmVjdG9yeScsIGRlc3Q9J3RvcCcsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0cyB0byBzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9nZXREaXNjb3ZlcnlBcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdGb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuJykKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgZm9yIGFyZyBpbiAoJ3N0YXJ0JywgJ3BhdHRlcm4nLCAndG9wJyk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KGFyZywgbmFyZ3M9Jz8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgICAgIHJldHVybiBwYXJzZXIKIAogICAgIGRlZiBfZG9fZGlzY292ZXJ5KHNlbGYsIGFyZ3YsIExvYWRlcj1Ob25lKToKLSAgICAgICAgaWYgTG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBMb2FkZXIgPSBsYW1iZGE6IHNlbGYudGVzdExvYWRlcgorICAgICAgICBzZWxmLnN0YXJ0ID0gJy4nCisgICAgICAgIHNlbGYucGF0dGVybiA9ICd0ZXN0Ki5weScKKyAgICAgICAgc2VsZi50b3AgPSBOb25lCisgICAgICAgIGlmIGFyZ3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIGZvciB0ZXN0aW5nCisgICAgICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wYXJzZV9hcmdzKGFyZ3YsIHNlbGYpCiAKLSAgICAgICAgIyBoYW5kbGUgY29tbWFuZCBsaW5lIGFyZ3MgZm9yIHRlc3QgZGlzY292ZXJ5Ci0gICAgICAgIHNlbGYucHJvZ05hbWUgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBzZWxmLl9hZGREaXNjb3ZlcnlPcHRpb25zKHBhcnNlcikKLQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMzoKLSAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KCkKLQotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gemlwKCgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKSwgYXJncyk6Ci0gICAgICAgICAgICBzZXRhdHRyKG9wdGlvbnMsIG5hbWUsIHZhbHVlKQotCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIHN0YXJ0X2RpciA9IG9wdGlvbnMuc3RhcnQKLSAgICAgICAgcGF0dGVybiA9IG9wdGlvbnMucGF0dGVybgotICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3B0aW9ucy50b3AKLQotICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQotICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKQorICAgICAgICBsb2FkZXIgPSBzZWxmLnRlc3RMb2FkZXIgaWYgTG9hZGVyIGlzIE5vbmUgZWxzZSBMb2FkZXIoKQorICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc2VsZi5zdGFydCwgc2VsZi5wYXR0ZXJuLCBzZWxmLnRvcCkKIAogICAgIGRlZiBydW5UZXN0cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21vY2sucHkgYi9MaWIvdW5pdHRlc3QvbW9jay5weQppbmRleCAwNzM4NjlhLi5kYzVjMDMzIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvbW9jay5weQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBzeXMKLWZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzLCBwYXJ0aWFsCiAKIAogQmFzZUV4Y2VwdGlvbnMgPSAoQmFzZUV4Y2VwdGlvbiwpCkBAIC02Niw1NSArNjYsNDUgQEAKICkKIAogCi1kZWYgX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgaW5zdGFuY2U6CitkZWYgX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGFzX2luc3RhbmNlLCBlYXRfc2VsZik6CisgICAgIiIiCisgICAgR2l2ZW4gYW4gYXJiaXRyYXJ5LCBwb3NzaWJseSBjYWxsYWJsZSBvYmplY3QsIHRyeSB0byBjcmVhdGUgYSBzdWl0YWJsZQorICAgIHNpZ25hdHVyZSBvYmplY3QuCisgICAgUmV0dXJuIGEgKHJlZHVjZWQgZnVuYywgc2lnbmF0dXJlKSB0dXBsZSwgb3IgTm9uZS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgYXNfaW5zdGFuY2U6CisgICAgICAgICMgSWYgaXQncyBhIHR5cGUgYW5kIHNob3VsZCBiZSBtb2RlbGxlZCBhcyBhIHR5cGUsIHVzZSBfX2luaXRfXy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYyA9IGZ1bmMuX19pbml0X18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNraXBmaXJzdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgU2tpcCB0aGUgYHNlbGZgIGFyZ3VtZW50IGluIF9faW5pdF9fCisgICAgICAgIGVhdF9zZWxmID0gVHJ1ZQogICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoZnVuYywgRnVuY3Rpb25UeXBlcyk6Ci0gICAgICAgICMgZm9yIGNsYXNzZXMgd2hlcmUgaW5zdGFuY2UgaXMgVHJ1ZSB3ZSBlbmQgdXAgaGVyZSB0b28KKyAgICAgICAgIyBJZiB3ZSByZWFsbHkgd2FudCB0byBtb2RlbCBhbiBpbnN0YW5jZSBvZiB0aGUgcGFzc2VkIHR5cGUsCisgICAgICAgICMgX19jYWxsX18gc2hvdWxkIGJlIGxvb2tlZCB1cCwgbm90IF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2NhbGxfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBlYXRfc2VsZjoKKyAgICAgICAgc2lnX2Z1bmMgPSBwYXJ0aWFsKGZ1bmMsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgc2lnX2Z1bmMgPSBmdW5jCiAgICAgdHJ5OgotICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhmdW5jKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICMgQyBmdW5jdGlvbiAvIG1ldGhvZCwgcG9zc2libHkgaW5oZXJpdGVkIG9iamVjdCgpLl9faW5pdF9fCi0gICAgICAgIHJldHVybgotCi0gICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHksIGt3b25seWRlZiwgYW5uID0gYXJnc3BlYwotCi0KLSAgICAjIGluc3RhbmNlIG1ldGhvZHMgYW5kIGNsYXNzbWV0aG9kcyBuZWVkIHRvIGxvc2UgdGhlIHNlbGYgYXJndW1lbnQKLSAgICBpZiBnZXRhdHRyKGZ1bmMsICdfX3NlbGZfXycsIE5vbmUpIGlzIG5vdCBOb25lOgotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLSAgICBpZiBza2lwZmlyc3Q6Ci0gICAgICAgICMgdGhpcyBjb25kaXRpb24gYW5kIHRoZSBhYm92ZSBvbmUgYXJlIG5ldmVyIGJvdGggVHJ1ZSAtIHdoeT8KLSAgICAgICAgcmVnYXJncyA9IHJlZ2FyZ3NbMTpdCi0KLSAgICBzaWduYXR1cmUgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgIHJlZ2FyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKLSAgICAgICAga3dvbmx5LCBrd29ubHlkZWYsIGFubiwgZm9ybWF0dmFsdWU9bGFtYmRhIHZhbHVlOiAiIikKLSAgICByZXR1cm4gc2lnbmF0dXJlWzE6LTFdLCBmdW5jCisgICAgICAgIHJldHVybiBmdW5jLCBpbnNwZWN0LnNpZ25hdHVyZShzaWdfZnVuYykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgIyBDZXJ0YWluIGNhbGxhYmxlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGluc3BlY3Quc2lnbmF0dXJlKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBkZWYgX2NoZWNrX3NpZ25hdHVyZShmdW5jLCBtb2NrLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBub3QgX2NhbGxhYmxlKGZ1bmMpOgorICAgIHNpZyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChmdW5jLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQorICAgIGlmIHNpZyBpcyBOb25lOgogICAgICAgICByZXR1cm4KLQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUoZnVuYywgc2tpcGZpcnN0LCBpbnN0YW5jZSkKLSAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc2lnbmF0dXJlLCBmdW5jID0gcmVzdWx0Ci0KLSAgICAjIGNhbid0IHVzZSBzZWxmIGJlY2F1c2UgInNlbGYiIGlzIGNvbW1vbiBhcyBhbiBhcmd1bWVudCBuYW1lCi0gICAgIyB1bmZvcnR1bmF0ZWx5IGV2ZW4gbm90IGluIHRoZSBmaXJzdCBwbGFjZQotICAgIHNyYyA9ICJsYW1iZGEgX21vY2tfc2VsZiwgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gc2lnCisgICAgZGVmIGNoZWNrc2lnKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAgICAgdHlwZShtb2NrKS5fbW9ja19jaGVja19zaWcgPSBjaGVja3NpZwogCkBAIC0xNjYsMTUgKzE1NiwxMiBAQAogICAgICAgICByZXR1cm4KIAogICAgIHNraXBmaXJzdCA9IGlzaW5zdGFuY2Uob3JpZ2luYWwsIHR5cGUpCi0gICAgcmVzdWx0ID0gX2dldHNpZ25hdHVyZShvcmlnaW5hbCwgc2tpcGZpcnN0LCBpbnN0YW5jZSkKKyAgICByZXN1bHQgPSBfZ2V0X3NpZ25hdHVyZV9vYmplY3Qob3JpZ2luYWwsIGluc3RhbmNlLCBza2lwZmlyc3QpCiAgICAgaWYgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICMgd2FzIGEgQyBmdW5jdGlvbiAoZS5nLiBvYmplY3QoKS5fX2luaXRfXyApIHRoYXQgY2FuJ3QgYmUgbW9ja2VkCiAgICAgICAgIHJldHVybgotCi0gICAgc2lnbmF0dXJlLCBmdW5jID0gcmVzdWx0Ci0KLSAgICBzcmMgPSAibGFtYmRhICVzOiBOb25lIiAlIHNpZ25hdHVyZQotICAgIGNoZWNrc2lnID0gZXZhbChzcmMsIHt9KQorICAgIGZ1bmMsIHNpZyA9IHJlc3VsdAorICAgIGRlZiBjaGVja3NpZygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzaWcuYmluZCgqYXJncywgKiprd2FyZ3MpCiAgICAgX2NvcHlfZnVuY19kZXRhaWxzKGZ1bmMsIGNoZWNrc2lnKQogCiAgICAgbmFtZSA9IG9yaWdpbmFsLl9fbmFtZV9fCkBAIC0zNjgsNyArMzU1LDcgQEAKICAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgICBzZWxmLCBzcGVjPU5vbmUsIHdyYXBzPU5vbmUsIG5hbWU9Tm9uZSwgc3BlY19zZXQ9Tm9uZSwKICAgICAgICAgICAgIHBhcmVudD1Ob25lLCBfc3BlY19zdGF0ZT1Ob25lLCBfbmV3X25hbWU9JycsIF9uZXdfcGFyZW50PU5vbmUsCi0gICAgICAgICAgICAqKmt3YXJncworICAgICAgICAgICAgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsIF9lYXRfc2VsZj1Ob25lLCAqKmt3YXJncwogICAgICAgICApOgogICAgICAgICBpZiBfbmV3X3BhcmVudCBpcyBOb25lOgogICAgICAgICAgICAgX25ld19wYXJlbnQgPSBwYXJlbnQKQEAgLTM4Miw4ICszNjksMTAgQEAKICAgICAgICAgaWYgc3BlY19zZXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzcGVjID0gc3BlY19zZXQKICAgICAgICAgICAgIHNwZWNfc2V0ID0gVHJ1ZQorICAgICAgICBpZiBfZWF0X3NlbGYgaXMgTm9uZToKKyAgICAgICAgICAgIF9lYXRfc2VsZiA9IHBhcmVudCBpcyBub3QgTm9uZQogCi0gICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCisgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQsIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCiAKICAgICAgICAgX19kaWN0X19bJ19tb2NrX2NoaWxkcmVuJ10gPSB7fQogICAgICAgICBfX2RpY3RfX1snX21vY2tfd3JhcHMnXSA9IHdyYXBzCkBAIC00MjgsMjAgKzQxNywyNiBAQAogICAgICAgICBzZWxmLl9tb2NrX2FkZF9zcGVjKHNwZWMsIHNwZWNfc2V0KQogCiAKLSAgICBkZWYgX21vY2tfYWRkX3NwZWMoc2VsZiwgc3BlYywgc3BlY19zZXQpOgorICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgIF9lYXRfc2VsZj1GYWxzZSk6CiAgICAgICAgIF9zcGVjX2NsYXNzID0gTm9uZQorICAgICAgICBfc3BlY19zaWduYXR1cmUgPSBOb25lCiAKICAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZSBhbmQgbm90IF9pc19saXN0KHNwZWMpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzcGVjLCB0eXBlKToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IHNwZWMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgX3NwZWNfY2xhc3MgPSBfZ2V0X2NsYXNzKHNwZWMpCisgICAgICAgICAgICByZXMgPSBfZ2V0X3NpZ25hdHVyZV9vYmplY3Qoc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZSwgX2VhdF9zZWxmKQorICAgICAgICAgICAgX3NwZWNfc2lnbmF0dXJlID0gcmVzIGFuZCByZXNbMV0KIAogICAgICAgICAgICAgc3BlYyA9IGRpcihzcGVjKQogCiAgICAgICAgIF9fZGljdF9fID0gc2VsZi5fX2RpY3RfXwogICAgICAgICBfX2RpY3RfX1snX3NwZWNfY2xhc3MnXSA9IF9zcGVjX2NsYXNzCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19zZXQnXSA9IHNwZWNfc2V0CisgICAgICAgIF9fZGljdF9fWydfc3BlY19zaWduYXR1cmUnXSA9IF9zcGVjX3NpZ25hdHVyZQogICAgICAgICBfX2RpY3RfX1snX21vY2tfbWV0aG9kcyddID0gc3BlYwogCiAKQEAgLTY5NSw3ICs2OTAsNiBAQAogICAgICAgICBzZWxmLl9tb2NrX2NoaWxkcmVuW25hbWVdID0gX2RlbGV0ZWQKIAogCi0KICAgICBkZWYgX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKHNlbGYsIGFyZ3MsIGt3YXJncyk6CiAgICAgICAgIG5hbWUgPSBzZWxmLl9tb2NrX25hbWUgb3IgJ21vY2snCiAgICAgICAgIHJldHVybiBfZm9ybWF0X2NhbGxfc2lnbmF0dXJlKG5hbWUsIGFyZ3MsIGt3YXJncykKQEAgLTcxMSw2ICs3MDUsMjggQEAKICAgICAgICAgcmV0dXJuIG1lc3NhZ2UgJSAoZXhwZWN0ZWRfc3RyaW5nLCBhY3R1YWxfc3RyaW5nKQogCiAKKyAgICBkZWYgX2NhbGxfbWF0Y2hlcihzZWxmLCBfY2FsbCk6CisgICAgICAgICIiIgorICAgICAgICBHaXZlbiBhIGNhbGwgKG9yIHNpbXBseSBhIChhcmdzLCBrd2FyZ3MpIHR1cGxlKSwgcmV0dXJuIGEKKyAgICAgICAgY29tcGFyaXNvbiBrZXkgc3VpdGFibGUgZm9yIG1hdGNoaW5nIHdpdGggb3RoZXIgY2FsbHMuCisgICAgICAgIFRoaXMgaXMgYSBiZXN0IGVmZm9ydCBtZXRob2Qgd2hpY2ggcmVsaWVzIG9uIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlLAorICAgICAgICBpZiBhdmFpbGFibGUsIG9yIGZhbGxzIGJhY2sgb24gdGhlIGFyZ3VtZW50cyB0aGVtc2VsdmVzLgorICAgICAgICAiIiIKKyAgICAgICAgc2lnID0gc2VsZi5fc3BlY19zaWduYXR1cmUKKyAgICAgICAgaWYgc2lnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbGVuKF9jYWxsKSA9PSAyOgorICAgICAgICAgICAgICAgIG5hbWUgPSAnJworICAgICAgICAgICAgICAgIGFyZ3MsIGt3YXJncyA9IF9jYWxsCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG5hbWUsIGFyZ3MsIGt3YXJncyA9IF9jYWxsCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUsIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gZS53aXRoX3RyYWNlYmFjayhOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIF9jYWxsCisKKwogICAgIGRlZiBhc3NlcnRfY2FsbGVkX3dpdGgoX21vY2tfc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiYXNzZXJ0IHRoYXQgdGhlIG1vY2sgd2FzIGNhbGxlZCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzLgogCkBAIC03MjEsOSArNzM3LDE0IEBACiAgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2Zvcm1hdF9tb2NrX2NhbGxfc2lnbmF0dXJlKGFyZ3MsIGt3YXJncykKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdFeHBlY3RlZCBjYWxsOiAlc1xuTm90IGNhbGxlZCcgJSAoZXhwZWN0ZWQsKSkKIAotICAgICAgICBpZiBzZWxmLmNhbGxfYXJncyAhPSAoYXJncywga3dhcmdzKToKKyAgICAgICAgZGVmIF9lcnJvcl9tZXNzYWdlKCk6CiAgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRfbW9ja19mYWlsdXJlX21lc3NhZ2UoYXJncywga3dhcmdzKQotICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IobXNnKQorICAgICAgICAgICAgcmV0dXJuIG1zZworICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2NhbGxfbWF0Y2hlcigoYXJncywga3dhcmdzKSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5fY2FsbF9tYXRjaGVyKHNlbGYuY2FsbF9hcmdzKQorICAgICAgICBpZiBleHBlY3RlZCAhPSBhY3R1YWw6CisgICAgICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihfZXJyb3JfbWVzc2FnZSgpKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChfbW9ja19zZWxmLCAqYXJncywgKiprd2FyZ3MpOgpAQCAtNzQ3LDE4ICs3NjgsMjEgQEAKIAogICAgICAgICBJZiBgYW55X29yZGVyYCBpcyBUcnVlIHRoZW4gdGhlIGNhbGxzIGNhbiBiZSBpbiBhbnkgb3JkZXIsIGJ1dAogICAgICAgICB0aGV5IG11c3QgYWxsIGFwcGVhciBpbiBgbW9ja19jYWxsc2AuIiIiCisgICAgICAgIGV4cGVjdGVkID0gW3NlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBjYWxsc10KKyAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQorICAgICAgICBhbGxfY2FsbHMgPSBfQ2FsbExpc3Qoc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIHNlbGYubW9ja19jYWxscykKICAgICAgICAgaWYgbm90IGFueV9vcmRlcjoKLSAgICAgICAgICAgIGlmIGNhbGxzIG5vdCBpbiBzZWxmLm1vY2tfY2FsbHM6CisgICAgICAgICAgICBpZiBleHBlY3RlZCBub3QgaW4gYWxsX2NhbGxzOgogICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAogICAgICAgICAgICAgICAgICAgICAnQ2FsbHMgbm90IGZvdW5kLlxuRXhwZWN0ZWQ6ICVyXG4nCiAgICAgICAgICAgICAgICAgICAgICdBY3R1YWw6ICVyJyAlIChjYWxscywgc2VsZi5tb2NrX2NhbGxzKQotICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApIGZyb20gY2F1c2UKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGFsbF9jYWxscyA9IGxpc3Qoc2VsZi5tb2NrX2NhbGxzKQorICAgICAgICBhbGxfY2FsbHMgPSBsaXN0KGFsbF9jYWxscykKIAogICAgICAgICBub3RfZm91bmQgPSBbXQotICAgICAgICBmb3Iga2FsbCBpbiBjYWxsczoKKyAgICAgICAgZm9yIGthbGwgaW4gZXhwZWN0ZWQ6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYWxsX2NhbGxzLnJlbW92ZShrYWxsKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CkBAIC03NjYsNyArNzkwLDcgQEAKICAgICAgICAgaWYgbm90X2ZvdW5kOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgJyVyIG5vdCBhbGwgZm91bmQgaW4gY2FsbCBsaXN0JyAlICh0dXBsZShub3RfZm91bmQpLCkKLSAgICAgICAgICAgICkKKyAgICAgICAgICAgICkgZnJvbSBjYXVzZQogCiAKICAgICBkZWYgYXNzZXJ0X2FueV9jYWxsKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC03NzUsMTIgKzc5OSwxNCBAQAogICAgICAgICBUaGUgYXNzZXJ0IHBhc3NlcyBpZiB0aGUgbW9jayBoYXMgKmV2ZXIqIGJlZW4gY2FsbGVkLCB1bmxpa2UKICAgICAgICAgYGFzc2VydF9jYWxsZWRfd2l0aGAgYW5kIGBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGAgdGhhdCBvbmx5IHBhc3MgaWYKICAgICAgICAgdGhlIGNhbGwgaXMgdGhlIG1vc3QgcmVjZW50IG9uZS4iIiIKLSAgICAgICAga2FsbCA9IGNhbGwoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBpZiBrYWxsIG5vdCBpbiBzZWxmLmNhbGxfYXJnc19saXN0OgorICAgICAgICBleHBlY3RlZCA9IHNlbGYuX2NhbGxfbWF0Y2hlcigoYXJncywga3dhcmdzKSkKKyAgICAgICAgYWN0dWFsID0gW3NlbGYuX2NhbGxfbWF0Y2hlcihjKSBmb3IgYyBpbiBzZWxmLmNhbGxfYXJnc19saXN0XQorICAgICAgICBpZiBleHBlY3RlZCBub3QgaW4gYWN0dWFsOgorICAgICAgICAgICAgY2F1c2UgPSBleHBlY3RlZCBpZiBpc2luc3RhbmNlKGV4cGVjdGVkLCBFeGNlcHRpb24pIGVsc2UgTm9uZQogICAgICAgICAgICAgZXhwZWN0ZWRfc3RyaW5nID0gc2VsZi5fZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoYXJncywga3dhcmdzKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgJyVzIGNhbGwgbm90IGZvdW5kJyAlIGV4cGVjdGVkX3N0cmluZwotICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBfZ2V0X2NoaWxkX21vY2soc2VsZiwgKiprdyk6CkBAIC04NTAsMTEgKzg3NiwxMiBAQAogICAgICAgICBzZWxmID0gX21vY2tfc2VsZgogICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKICAgICAgICAgc2VsZi5jYWxsX2NvdW50ICs9IDEKLSAgICAgICAgc2VsZi5jYWxsX2FyZ3MgPSBfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpCi0gICAgICAgIHNlbGYuY2FsbF9hcmdzX2xpc3QuYXBwZW5kKF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkpCi0KICAgICAgICAgX25ld19uYW1lID0gc2VsZi5fbW9ja19uZXdfbmFtZQogICAgICAgICBfbmV3X3BhcmVudCA9IHNlbGYuX21vY2tfbmV3X3BhcmVudAorCisgICAgICAgIF9jYWxsID0gX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKQorICAgICAgICBzZWxmLmNhbGxfYXJncyA9IF9jYWxsCisgICAgICAgIHNlbGYuY2FsbF9hcmdzX2xpc3QuYXBwZW5kKF9jYWxsKQogICAgICAgICBzZWxmLm1vY2tfY2FsbHMuYXBwZW5kKF9DYWxsKCgnJywgYXJncywga3dhcmdzKSkpCiAKICAgICAgICAgc2VlbiA9IHNldCgpCkBAIC05MDksOCArOTM2LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICAgICAgICAgIHJldF92YWwgPSBlZmZlY3QoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgaWYgcmV0X3ZhbCBpcyBERUZBVUxUOgotICAgICAgICAgICAgICAgIHJldF92YWwgPSBzZWxmLnJldHVybl92YWx1ZQogCiAgICAgICAgIGlmIChzZWxmLl9tb2NrX3dyYXBzIGlzIG5vdCBOb25lIGFuZAogICAgICAgICAgICAgIHNlbGYuX21vY2tfcmV0dXJuX3ZhbHVlIGlzIERFRkFVTFQpOgpAQCAtMjAzMCw2ICsyMDU1LDggQEAKICAgICBlbGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgIyBOb25lIHdlIG1vY2sgd2l0aCBhIG5vcm1hbCBtb2NrIHdpdGhvdXQgYSBzcGVjCiAgICAgICAgIF9rd2FyZ3MgPSB7fQorICAgIGlmIF9rd2FyZ3MgYW5kIGluc3RhbmNlOgorICAgICAgICBfa3dhcmdzWydfc3BlY19hc19pbnN0YW5jZSddID0gVHJ1ZQogCiAgICAgX2t3YXJncy51cGRhdGUoa3dhcmdzKQogCkBAIC0yMDk2LDEwICsyMTIzLDEyIEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIEZ1bmN0aW9uVHlwZXMpOgogICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vY2subW9jawogCi0gICAgICAgICAgICBuZXcgPSBNYWdpY01vY2socGFyZW50PXBhcmVudCwgbmFtZT1lbnRyeSwgX25ld19uYW1lPWVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdfcGFyZW50PXBhcmVudCwgKiprd2FyZ3MpCi0gICAgICAgICAgICBtb2NrLl9tb2NrX2NoaWxkcmVuW2VudHJ5XSA9IG5ldwogICAgICAgICAgICAgc2tpcGZpcnN0ID0gX211c3Rfc2tpcChzcGVjLCBlbnRyeSwgaXNfdHlwZSkKKyAgICAgICAgICAgIGt3YXJnc1snX2VhdF9zZWxmJ10gPSBza2lwZmlyc3QKKyAgICAgICAgICAgIG5ldyA9IE1hZ2ljTW9jayhwYXJlbnQ9cGFyZW50LCBuYW1lPWVudHJ5LCBfbmV3X25hbWU9ZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ld19wYXJlbnQ9cGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgICAgICAgICAgbW9jay5fbW9ja19jaGlsZHJlbltlbnRyeV0gPSBuZXcKICAgICAgICAgICAgIF9jaGVja19zaWduYXR1cmUob3JpZ2luYWwsIG5ldywgc2tpcGZpcnN0PXNraXBmaXJzdCkKIAogICAgICAgICAjIHNvIGZ1bmN0aW9ucyBjcmVhdGVkIHdpdGggX3NldF9zaWduYXR1cmUgYmVjb21lIGluc3RhbmNlIGF0dHJpYnV0ZXMsCkBAIC0yMTEzLDYgKzIxNDIsMTAgQEAKIAogCiBkZWYgX211c3Rfc2tpcChzcGVjLCBlbnRyeSwgaXNfdHlwZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHdoZXRoZXIgd2Ugc2hvdWxkIHNraXAgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHNwZWMncyBgZW50cnlgCisgICAgYXR0cmlidXRlLgorICAgICIiIgogICAgIGlmIG5vdCBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICBpZiBlbnRyeSBpbiBnZXRhdHRyKHNwZWMsICdfX2RpY3RfXycsIHt9KToKICAgICAgICAgICAgICMgaW5zdGFuY2UgYXR0cmlidXRlIC0gc2hvdWxkbid0IHNraXAKQEAgLTIxMjUsNyArMjE1OCwxMiBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIChzdGF0aWNtZXRob2QsIGNsYXNzbWV0aG9kKSk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIGlzX3R5cGUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGdldGF0dHIocmVzdWx0LCAnX19nZXRfXycsIE5vbmUpLCBNZXRob2RXcmFwcGVyVHlwZXMpOgorICAgICAgICAgICAgIyBOb3JtYWwgbWV0aG9kID0+IHNraXAgaWYgbG9va2VkIHVwIG9uIHR5cGUKKyAgICAgICAgICAgICMgKGlmIGxvb2tlZCB1cCBvbiBpbnN0YW5jZSwgc2VsZiBpcyBhbHJlYWR5IHNraXBwZWQpCisgICAgICAgICAgICByZXR1cm4gaXNfdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAjIHNob3VsZG4ndCBnZXQgaGVyZSB1bmxlc3MgZnVuY3Rpb24gaXMgYSBkeW5hbWljYWxseSBwcm92aWRlZCBhdHRyaWJ1dGUKICAgICAjIFhYWFggdW50ZXN0ZWQgYmVoYXZpb3VyCkBAIC0yMTU5LDkgKzIxOTcsMzEgQEAKICAgICB0eXBlKEFOWS5fX2VxX18pLAogKQogCitNZXRob2RXcmFwcGVyVHlwZXMgPSAoCisgICAgdHlwZShBTlkuX19lcV9fLl9fZ2V0X18pLAorKQorCiAKIGZpbGVfc3BlYyA9IE5vbmUKIAorZGVmIF9pdGVyYXRlX3JlYWRfZGF0YShyZWFkX2RhdGEpOgorICAgICMgSGVscGVyIGZvciBtb2NrX29wZW46CisgICAgIyBSZXRyaWV2ZSBsaW5lcyBmcm9tIHJlYWRfZGF0YSB2aWEgYSBnZW5lcmF0b3Igc28gdGhhdCBzZXBhcmF0ZSBjYWxscyB0bworICAgICMgcmVhZGxpbmUsIHJlYWQsIGFuZCByZWFkbGluZXMgYXJlIHByb3Blcmx5IGludGVybGVhdmVkCisgICAgZGF0YV9hc19saXN0ID0gWyd7fVxuJy5mb3JtYXQobCkgZm9yIGwgaW4gcmVhZF9kYXRhLnNwbGl0KCdcbicpXQorCisgICAgaWYgZGF0YV9hc19saXN0Wy0xXSA9PSAnXG4nOgorICAgICAgICAjIElmIHRoZSBsYXN0IGxpbmUgZW5kZWQgaW4gYSBuZXdsaW5lLCB0aGUgbGlzdCBjb21wcmVoZW5zaW9uIHdpbGwgaGF2ZSBhbgorICAgICAgICAjIGV4dHJhIGVudHJ5IHRoYXQncyBqdXN0IGEgbmV3bGluZS4gIFJlbW92ZSB0aGlzLgorICAgICAgICBkYXRhX2FzX2xpc3QgPSBkYXRhX2FzX2xpc3RbOi0xXQorICAgIGVsc2U6CisgICAgICAgICMgSWYgdGhlcmUgd2Fzbid0IGFuIGV4dHJhIG5ld2xpbmUgYnkgaXRzZWxmLCB0aGVuIHRoZSBmaWxlIGJlaW5nCisgICAgICAgICMgZW11bGF0ZWQgZG9lc24ndCBoYXZlIGEgbmV3bGluZSB0byBlbmQgdGhlIGxhc3QgbGluZSAgcmVtb3ZlIHRoZQorICAgICAgICAjIG5ld2xpbmUgdGhhdCBvdXIgbmFpdmUgZm9ybWF0KCkgYWRkZWQKKyAgICAgICAgZGF0YV9hc19saXN0Wy0xXSA9IGRhdGFfYXNfbGlzdFstMV1bOi0xXQorCisgICAgZm9yIGxpbmUgaW4gZGF0YV9hc19saXN0OgorICAgICAgICB5aWVsZCBsaW5lCiAKIGRlZiBtb2NrX29wZW4obW9jaz1Ob25lLCByZWFkX2RhdGE9JycpOgogICAgICIiIgpAQCAtMjE3Miw5ICsyMjMyLDI3IEBACiAgICAgZGVmYXVsdCkgdGhlbiBhIGBNYWdpY01vY2tgIHdpbGwgYmUgY3JlYXRlZCBmb3IgeW91LCB3aXRoIHRoZSBBUEkgbGltaXRlZAogICAgIHRvIG1ldGhvZHMgb3IgYXR0cmlidXRlcyBhdmFpbGFibGUgb24gc3RhbmRhcmQgZmlsZSBoYW5kbGVzLgogCi0gICAgYHJlYWRfZGF0YWAgaXMgYSBzdHJpbmcgZm9yIHRoZSBgcmVhZGAgbWV0aG9kIG9mIHRoZSBmaWxlIGhhbmRsZSB0byByZXR1cm4uCi0gICAgVGhpcyBpcyBhbiBlbXB0eSBzdHJpbmcgYnkgZGVmYXVsdC4KKyAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGByZWFkYCBtZXRob2RkbGluZWAsIGFuZCBgcmVhZGxpbmVzYCBvZiB0aGUKKyAgICBmaWxlIGhhbmRsZSB0byByZXR1cm4uICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgogICAgICIiIgorICAgIGRlZiBfcmVhZGxpbmVzX3NpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlCisgICAgICAgIHJldHVybiBsaXN0KF9kYXRhKQorCisgICAgZGVmIF9yZWFkX3NpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oX2RhdGEpCisKKyAgICBkZWYgX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHlpZWxkIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUKKyAgICAgICAgZm9yIGxpbmUgaW4gX2RhdGE6CisgICAgICAgICAgICB5aWVsZCBsaW5lCisKKwogICAgIGdsb2JhbCBmaWxlX3NwZWMKICAgICBpZiBmaWxlX3NwZWMgaXMgTm9uZToKICAgICAgICAgaW1wb3J0IF9pbwpAQCAtMjE4NCw5ICsyMjYyLDE4IEBACiAgICAgICAgIG1vY2sgPSBNYWdpY01vY2sobmFtZT0nb3BlbicsIHNwZWM9b3BlbikKIAogICAgIGhhbmRsZSA9IE1hZ2ljTW9jayhzcGVjPWZpbGVfc3BlYykKLSAgICBoYW5kbGUud3JpdGUucmV0dXJuX3ZhbHVlID0gTm9uZQogICAgIGhhbmRsZS5fX2VudGVyX18ucmV0dXJuX3ZhbHVlID0gaGFuZGxlCi0gICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gcmVhZF9kYXRhCisKKyAgICBfZGF0YSA9IF9pdGVyYXRlX3JlYWRfZGF0YShyZWFkX2RhdGEpCisKKyAgICBoYW5kbGUud3JpdGUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlID0gTm9uZQorCisgICAgaGFuZGxlLnJlYWQuc2lkZV9lZmZlY3QgPSBfcmVhZF9zaWRlX2VmZmVjdAorICAgIGhhbmRsZS5yZWFkbGluZS5zaWRlX2VmZmVjdCA9IF9yZWFkbGluZV9zaWRlX2VmZmVjdCgpCisgICAgaGFuZGxlLnJlYWRsaW5lcy5zaWRlX2VmZmVjdCA9IF9yZWFkbGluZXNfc2lkZV9lZmZlY3QKIAogICAgIG1vY2sucmV0dXJuX3ZhbHVlID0gaGFuZGxlCiAgICAgcmV0dXJuIG1vY2sKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CmluZGV4IDk3ZTU0MjYuLmYzZjRiNjcgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9yZXN1bHQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQpAQCAtMTIxLDYgKzEyMSwyMiBAQAogICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQogICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCiAKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgYXQgdGhlIGVuZCBvZiBhIHN1YnRlc3QuCisgICAgICAgICdlcnInIGlzIE5vbmUgaWYgdGhlIHN1YnRlc3QgZW5kZWQgc3VjY2Vzc2Z1bGx5LCBvdGhlcndpc2UgaXQncyBhCisgICAgICAgIHR1cGxlIG9mIHZhbHVlcyBhcyByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBzdWNjZXNzZnVsIHN1YnRlc3RzLCBidXQKKyAgICAgICAgIyBtb3JlIHNvcGhpc3RpY2F0ZWQgdGVzdCByZXN1bHRzIG1pZ2h0IHdhbnQgdG8gcmVjb3JkIHRoZW0uCisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoZXJyWzBdLCB0ZXN0LmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IHNlbGYuZmFpbHVyZXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyb3JzID0gc2VsZi5lcnJvcnMKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHN1YnRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKKyAgICAgICAgICAgIHNlbGYuX21pcnJvck91dHB1dCA9IFRydWUKKwogICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgogICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgogICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3Qvc3VpdGUucHkgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKaW5kZXggY2RlNWQzOC4uY2E4Mjc2NSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQpAQCAtMTYsNiArMTYsOCBAQAogY2xhc3MgQmFzZVRlc3RTdWl0ZShvYmplY3QpOgogICAgICIiIkEgc2ltcGxlIHRlc3Qgc3VpdGUgdGhhdCBkb2Vzbid0IHByb3ZpZGUgY2xhc3Mgb3IgbW9kdWxlIHNoYXJlZCBmaXh0dXJlcy4KICAgICAiIiIKKyAgICBfY2xlYW51cCA9IFRydWUKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cz0oKSk6CiAgICAgICAgIHNlbGYuX3Rlc3RzID0gW10KICAgICAgICAgc2VsZi5hZGRUZXN0cyh0ZXN0cykKQEAgLTU3LDEyICs1OSwyMiBAQAogICAgICAgICAgICAgc2VsZi5hZGRUZXN0KHRlc3QpCiAKICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgICAgICBpZiBzZWxmLl9jbGVhbnVwOgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZVRlc3RBdEluZGV4KGluZGV4KQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKKyAgICBkZWYgX3JlbW92ZVRlc3RBdEluZGV4KHNlbGYsIGluZGV4KToKKyAgICAgICAgIiIiU3RvcCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBUZXN0Q2FzZSBhdCBpbmRleC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fdGVzdHNbaW5kZXhdID0gTm9uZQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBzdXBwb3J0IGZvciBzdWl0ZSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBoYXZlIG92ZXJyaWRlbiBzZWxmLl90ZXN0CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQogCkBAIC04Nyw3ICs5OSw3IEBACiAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCAnX3Rlc3RSdW5FbnRlcmVkJywgRmFsc2UpIGlzIEZhbHNlOgogICAgICAgICAgICAgcmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCA9IHRvcExldmVsID0gVHJ1ZQogCi0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogCkBAIC0xMDYsNiArMTE4LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGVzdC5kZWJ1ZygpCiAKKyAgICAgICAgICAgIGlmIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlVGVzdEF0SW5kZXgoaW5kZXgpCisKICAgICAgICAgaWYgdG9wTGV2ZWw6CiAgICAgICAgICAgICBzZWxmLl90ZWFyRG93blByZXZpb3VzQ2xhc3MoTm9uZSwgcmVzdWx0KQogICAgICAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQwNTkxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHBhdHRlcm4gPSBwYXR0ZXJuIG9yICJ0ZXN0XyoucHkiCisgICAgIyBXZSBhcmUgaW5zaWRlIHVuaXR0ZXN0LnRlc3QsIHNvIHRoZSB0b3AtbGV2ZWwgaXMgdHdvIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh0aGlzX2RpcikpCisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2xldmVsX2RpcikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQppbmRleCBkYmU0ZGRjLi4wMmU4ZjNhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlcyBhbmQgJXM6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQogCiAKLWNsYXNzIExvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CitjbGFzcyBfQmFzZUxvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGxvZwogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCisgICAgICAgIHN1cGVyKCkuc3RhcnRUZXN0UnVuKCkKIAogICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3QnKQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKKyAgICAgICAgc3VwZXIoKS5zdG9wVGVzdFJ1bigpCiAKICAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEZhaWx1cmUnKQpAQCAtNjgsNyArNjgsNyBAQAogCiAgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU3VjY2VzcygqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWNjZXNzKCphcmdzKQogCiAgICAgZGVmIGFkZEVycm9yKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXJyb3InKQpAQCAtNzYsMTUgKzc2LDM5IEBACiAKICAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFNraXAoKmFyZ3MpCiAKICAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXhwZWN0ZWRGYWlsdXJlJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKIAogICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisKKworY2xhc3MgTGVnYWN5TG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgbGVnYWN5IFRlc3RSZXN1bHQgaW1wbGVtZW50YXRpb24sIHdpdGhvdXQgYW4gYWRkU3ViVGVzdCBtZXRob2QsCisgICAgd2hpY2ggcmVjb3JkcyBpdHMgbWV0aG9kIGNhbGxzLgorICAgICIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKworY2xhc3MgTG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgVGVzdFJlc3VsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCByZWNvcmRzIGl0cyBtZXRob2QgY2FsbHMuCisgICAgIiIiCisKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICBpZiBlcnIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RTdWNjZXNzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RGYWlsdXJlJykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIGVycikKIAogCiBjbGFzcyBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CmluZGV4IDc5MzFjYWQuLmFmMDhkNWEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKQEAgLTM2MSwzICszNjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeInJlZ2V4IiBkb2VzIG5vdCBtYXRjaCAiZm9vIiQnLCAnXm9vcHMkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIgOiBvb3BzJCddKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQppbmRleCA3NTUzMmY0Li4wYmYxYTIyIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKQEAgLTI4MiwzICsyODIsNyBAQAogICAgICJpZiB0aHJlYWRzIGhhdmUgYmVlbiB1c2VkIikKIGNsYXNzIFRlc3RCcmVha1NpZ25hbERlZmF1bHQoVGVzdEJyZWFrKToKICAgICBpbnRfaGFuZGxlciA9IHNpZ25hbC5TSUdfREZMCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQppbmRleCBiOGNiMGM3Li40YjkzMTc5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CkBAIC0xLDggKzEsMTAgQEAKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHBwcmludAogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgd2Vha3JlZgogaW1wb3J0IGluc3BlY3QKQEAgLTEzLDkgKzE1LDE1IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSAuc3VwcG9ydCBpbXBvcnQgKAotICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsCisgICAgVGVzdEVxdWFsaXR5LCBUZXN0SGFzaGluZywgTG9nZ2luZ1Jlc3VsdCwgTGVnYWN5TG9nZ2luZ1Jlc3VsdCwKICAgICBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgogKQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNhcHR1cmVkX3N0ZGVycgorCisKK2xvZ19mb28gPSBsb2dnaW5nLmdldExvZ2dlcignZm9vJykKK2xvZ19mb29iYXIgPSBsb2dnaW5nLmdldExvZ2dlcignZm9vLmJhcicpCitsb2dfcXV1eCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdxdXV4JykKIAogCiBjbGFzcyBUZXN0KG9iamVjdCk6CkBAIC0yOTcsNiArMzA1LDk4IEBACiAKICAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKIAorICAgIGRlZiBfY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMoc2VsZiwgcmVzdWx0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIFsxLCAyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzIsIDNdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGo9aik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgKiBqID09IDY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCisgICAgICAgICAgICAgICAgMSAvIDAKKworICAgICAgICAjIE9yZGVyIGlzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICMgaT0xID0+IHN1YnRlc3QgZmFpbHVyZQorICAgICAgICAjIGk9Miwgaj0yID0+IHN1YnRlc3Qgc3VjY2VzcworICAgICAgICAjIGk9Miwgaj0zID0+IHN1YnRlc3QgZXJyb3IKKyAgICAgICAgIyBpPTMsIGo9MiA9PiBzdWJ0ZXN0IGVycm9yCisgICAgICAgICMgaT0zLCBqPTMgPT4gc3VidGVzdCBzdWNjZXNzCisgICAgICAgICMgdG9wbGV2ZWwgPT4gZXJyb3IKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkX2V2ZW50cykKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdhZGRTdWJUZXN0RmFpbHVyZScsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0U3VjY2VzcycsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19sZWdhY3koc2VsZik6CisgICAgICAgICMgV2l0aCBhIGxlZ2FjeSByZXN1bHQgb2JqZWN0ICh3aXRob3V0IGEgYWRkU3ViVGVzdCBtZXRob2QpLAorICAgICAgICAjIHRleHQgZXhlY3V0aW9uIHN0b3BzIGFmdGVyIHRoZSBmaXJzdCBzdWJ0ZXN0IGZhaWx1cmUuCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExlZ2FjeUxvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhzZWxmLCByZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDJdOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzIsIDNdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGo9aik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICAjIFRoZSA2IHN1YnRlc3Qgc3VjY2Vzc2VzIGFyZSBpbmRpdmlkdWFsbHkgcmVjb3JkZWQsIGluIGFkZGl0aW9uCisgICAgICAgICMgdG8gdGhlIHdob2xlIHRlc3Qgc3VjY2Vzcy4KKyAgICAgICAgZXhwZWN0ZWQgPSAoWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93biddCisgICAgICAgICAgICAgICAgICAgICsgNiAqIFsnYWRkU3ViVGVzdFN1Y2Nlc3MnXQorICAgICAgICAgICAgICAgICAgICArIFsnYWRkU3VjY2VzcycsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCwgb25seSB0aGUgd2hvbGUgdGVzdCBzdWNjZXNzIGlzIHJlY29yZGVkLgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMZWdhY3lMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPTEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9Mik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKICAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KICAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bwogICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgpAQCAtNzI5LDE4ICs4MjksMTggQEAKIAogICAgICAgICAjIHNldCBhIGxvd2VyIHRocmVzaG9sZCB2YWx1ZSBhbmQgYWRkIGEgY2xlYW51cCB0byByZXN0b3JlIGl0CiAgICAgICAgIG9sZF90aHJlc2hvbGQgPSBzZWxmLl9kaWZmVGhyZXNob2xkCi0gICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAyKio4CisgICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAyKio1CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ19kaWZmVGhyZXNob2xkJywgb2xkX3RocmVzaG9sZCkpCiAKICAgICAgICAgIyB1bmRlciB0aGUgdGhyZXNob2xkOiBkaWZmIG1hcmtlciAoXikgaW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBzID0gJ3gnICogKDIqKjcpCisgICAgICAgIHMgPSAneCcgKiAoMioqNCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2InKQogICAgICAgICBzZWxmLmFzc2VydEluKCdeJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKIAogICAgICAgICAjIG92ZXIgdGhlIHRocmVzaG9sZDogZGlmZiBub3QgdXNlZCBhbmQgbWFya2VyICheKSBub3QgaW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBzID0gJ3gnICogKDIqKjkpCisgICAgICAgIHMgPSAneCcgKiAoMioqNikKICAgICAgICAgIyBpZiB0aGUgcGF0aCB0aGF0IHVzZXMgZGlmZmxpYiBpcyB0YWtlbiwgX3RydW5jYXRlTWVzc2FnZSB3aWxsIGJlCiAgICAgICAgICMgY2FsbGVkIC0tIHJlcGxhY2UgaXQgd2l0aCBleHBsb2RpbmdUcnVuY2F0aW9uIHRvIHZlcmlmeSB0aGF0IHRoaXMKICAgICAgICAgIyBkb2Vzbid0IGhhcHBlbgpAQCAtNzU3LDYgKzg1NywzNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAnJXIgIT0gJXInICUgKHMxLCBzMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKIAorICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWxfc2hvcnRlbihzZWxmKToKKyAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAorICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAorICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMAorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQorCisgICAgICAgIHMgPSAneCcgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJywgcyArICdiJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4WzM1IGNoYXJzXScgKyAneCcgKiA2MQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYScgIT0gJyVzYiciICUgKGMsIGMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCisKKyAgICAgICAgcCA9ICd5JyAqIDUwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScgKyBwLCBzICsgJ2InICsgcAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4Wzg1IGNoYXJzXXh4eHh4eHh4eHh4JworICAgICAgICAjcHJpbnQoKQorICAgICAgICAjcHJpbnQoc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJXMnICE9ICclc2IlcyciICUgKGMsIHAsIGMsIHApKQorCisgICAgICAgIHAgPSAneScgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJyArIHAsIHMgKyAnYicgKyBwCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEsIHMyKQorICAgICAgICBjID0gJ3h4eHhbOTEgY2hhcnNdeHh4eHgnCisgICAgICAgIGQgPSAneScgKiA0MCArICdbNTYgY2hhcnNdeXl5eScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIiclc2ElcycgIT0gJyVzYiVzJyIgJSAoYywgZCwgYywgZCkpCisKICAgICBkZWYgdGVzdEFzc2VydENvdW50RXF1YWwoc2VsZik6CiAgICAgICAgIGEgPSBvYmplY3QoKQogICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsIDIsIDNdLCBbMywgMiwgMV0pCkBAIC0xMTU5LDYgKzEyOTAsOTQgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgIm8rIik6CiAgICAgICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImJhcnoiKQogCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgYXNzZXJ0Tm9TdGRlcnIoc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgYnVmOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYuZ2V0dmFsdWUoKSwgIiIpCisKKyAgICBkZWYgYXNzZXJ0TG9nUmVjb3JkcyhzZWxmLCByZWNvcmRzLCBtYXRjaGVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVjb3JkcyksIGxlbihtYXRjaGVzKSkKKyAgICAgICAgZm9yIHJlYywgbWF0Y2ggaW4gemlwKHJlY29yZHMsIG1hdGNoZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlYywgbG9nZ2luZy5Mb2dSZWNvcmQpCisgICAgICAgICAgICBmb3IgaywgdiBpbiBtYXRjaC5pdGVtcygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihyZWMsIGspLCB2KQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRGVmYXVsdHMoc2VsZik6CisgICAgICAgICMgZGVmYXVsdHM6IHJvb3QgbG9nZ2VyLCBsZXZlbCBJTkZPCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsIFt7J25hbWUnOiAnZm9vJ31dKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzVHdvTWF0Y2hpbmdNZXNzYWdlcyhzZWxmKToKKyAgICAgICAgIyBTYW1lLCBidXQgd2l0aCB0d28gbWF0Y2hpbmcgbG9nIG1lc3NhZ2VzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgICAgIGxvZ19xdXV4Lndhcm5pbmcoIjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSIsICJXQVJOSU5HOnF1dXg6MyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJ30sIHsnbmFtZSc6ICdxdXV4J31dKQorCisgICAgZGVmIGNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKHNlbGYsIGxldmVsKToKKyAgICAgICAgIyBDaGVjayBsZXZlbCBmaWx0ZXJpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD1sZXZlbCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby53YXJuaW5nKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmVycm9yKCIyIikKKyAgICAgICAgICAgICAgICBsb2dfcXV1eC5jcml0aWNhbCgiMyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJFUlJPUjpmb28uYmFyOjIiLCAiQ1JJVElDQUw6cXV1eDozIl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28uYmFyJ30sIHsnbmFtZSc6ICdxdXV4J31dKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzUGVyTGV2ZWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwobG9nZ2luZy5FUlJPUikKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMZXZlbCgnRVJST1InKQorCisgICAgZGVmIGNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcihzZWxmLCBsb2dnZXIpOgorICAgICAgICAjIENoZWNrIHBlci1sb2dnZXIgZml0ZXJpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsZXZlbD0nREVCVUcnKSBhcyBvdXRlcl9jbToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncyhsb2dnZXIsIGxldmVsPSdERUJVRycpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vLmluZm8oIjEiKQorICAgICAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgICAgICAgICAgbG9nX3F1dXgud2FybmluZygiMyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiSU5GTzpmb286MSIsICJERUJVRzpmb28uYmFyOjIiXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExvZ1JlY29yZHMoY20ucmVjb3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vJ30sIHsnbmFtZSc6ICdmb28uYmFyJ31dKQorICAgICAgICAgICAgIyBUaGUgb3V0ZXIgY2F0Y2hhbGwgY2F1Z2h0IHRoZSBxdXV4IGxvZworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRlcl9jbS5vdXRwdXQsIFsiV0FSTklORzpxdXV4OjMiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1BlckxvZ2dlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIobG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpKQorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcignZm9vJykKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVOb0xvZ3Moc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbm8gbG9ncworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTGV2ZWxUb29IaWdoKHNlbGYpOgorICAgICAgICAjIEZhaWx1cmUgZHVlIHRvIGxldmVsIHRvbyBoaWdoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPSdXQVJOSU5HJyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisKKyAgICBkZWYgdGVzdEFzc2VydExvZ3NGYWlsdXJlTWlzbWF0Y2hpbmdMb2dnZXIoc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbWlzbWF0Y2hpbmcgbG9nZ2VyIChhbmQgdGhlIGxvZ2dlZCBtZXNzYWdlIGlzCisgICAgICAgICMgcGFzc2VkIHRocm91Z2gpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdxdXV4JywgbGV2ZWw9J0VSUk9SJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ2ZvbycpOgorICAgICAgICAgICAgICAgICAgICBsb2dfcXV1eC5lcnJvcigiMSIpCisKICAgICBkZWYgdGVzdERlcHJlY2F0ZWRNZXRob2ROYW1lcyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgZGVwcmVjYXRlZCBtZXRob2RzIHJhaXNlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBTZWUgIzk0MjQuCkBAIC0xMzEzLDMgKzE1MzIsNyBAQAogICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgogICAgICAgICAgICAgZGVsIGNhc2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3IoKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQppbmRleCBjY2M3ZGIyLi42YjdiMTI4IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQpAQCAtMSwxMiArMSwxNSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IGJ1aWx0aW5zCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogaW1wb3J0IHVuaXR0ZXN0CiAKIAogY2xhc3MgVGVzdGFibGVUZXN0UHJvZ3JhbSh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6Ci0gICAgbW9kdWxlID0gJ19fbWFpbl9fJworICAgIG1vZHVsZSA9IE5vbmUKICAgICBleGl0ID0gVHJ1ZQogICAgIGRlZmF1bHRUZXN0ID0gZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gTm9uZQogICAgIHZlcmJvc2l0eSA9IDEKQEAgLTQ2LDkgKzQ5LDkgQEAKICAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKICAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgogCi0gICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0MS5weScsICd0ZXN0Mi5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKKyAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QyLnB5JywgJ3Rlc3QxLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAogICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5mb28nLCAndGVzdC1ub3QtYS1tb2R1bGUucHknLCAnYW5vdGhlcl9kaXInXSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3QzLnB5JywgJ3Rlc3Q0LnB5JywgXV0KKyAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3Q0LnB5JywgJ3Rlc3QzLnB5JywgXV0KICAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBwYXRoOiBwYXRoX2xpc3RzLnBvcCgwKQogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9saXN0ZGlyKQogCkBAIC03MCw2ICs3Myw4IEBACiAgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbAogICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKHRvcF9sZXZlbCwgJ3Rlc3QqLnB5JykpCiAKKyAgICAgICAgIyBUaGUgdGVzdCBzdWl0ZXMgZm91bmQgc2hvdWxkIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBmb3IgcmVsaWFibGUKKyAgICAgICAgIyBleGVjdXRpb24gb3JkZXIuCiAgICAgICAgIGV4cGVjdGVkID0gW25hbWUgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MScsICd0ZXN0MicpXQogICAgICAgICBleHBlY3RlZC5leHRlbmQoWygndGVzdF9kaXIuJXMnICUgbmFtZSkgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KQEAgLTEzMiw2ICsxMzcsNyBAQAogICAgICAgICAjIGFuZCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0X2RpcmVjdG9yeTIgcGFja2FnZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnbG9hZF90ZXN0cycsICd0ZXN0X2RpcmVjdG9yeTInICsgJyBtb2R1bGUgdGVzdHMnXSkKKyAgICAgICAgIyBUaGUgdGVzdCBtb2R1bGUgcGF0aHMgc2hvdWxkIGJlIHNvcnRlZCBmb3IgcmVsaWFibGUgZXhlY3V0aW9uIG9yZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLnBhdGhzLCBbJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddKQogCiAgICAgICAgICMgbG9hZF90ZXN0cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdpdGggbG9hZGVyLCB0ZXN0cyBhbmQgcGF0dGVybgpAQCAtMTY5LDcgKzE3NSw3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQogCiAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQotICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgogICAgICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgICAgICByZXR1cm4gWyd0ZXN0cyddCiAgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCkBAIC0xODQsMTEgKzE5MCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZpbmRfdGVzdHNfYXJncywgWyhzdGFydF9kaXIsICdwYXR0ZXJuJyldKQogICAgICAgICBzZWxmLmFzc2VydEluKHRvcF9sZXZlbF9kaXIsIHN5cy5wYXRoKQogCi0gICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCisgICAgZGVmIHNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cyhzZWxmLCBmYWtlZmlsZSk6CiAgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCi0gICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFtmYWtlZmlsZV0KICAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgXzogVHJ1ZQogICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KQEAgLTE5OCw2ICsyMDIsMTEgQEAKICAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlc190aGF0X2ZhaWxfdG9faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5JykKKwogICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCkBAIC0yMDYsNjIgKzIxNSw3NCBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIHRlc3QudGVzdF90aGlzX2RvZXNfbm90X2V4aXN0KCkKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlX3RoYXRfcmFpc2VzX1NraXBUZXN0X29uX2ltcG9ydChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgZGVmIF9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdza2lwcGVyb28nKQorICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gX2dldF9tb2R1bGVfZnJvbV9uYW1lCisKKyAgICAgICAgc2VsZi5zZXR1cF9pbXBvcnRfaXNzdWVfdGVzdHMoJ3Rlc3Rfc2tpcF9kdW1teS5weScpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKKwogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19wYXJzZUFyZ3Moc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKIAogICAgICAgICBhcmdzID0gW10KLSAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKLSAgICAgICAgICAgIGFyZ3MuZXh0ZW5kKGFyZ3YpCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBhcmdzLmFwcGVuZAogICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbJ3NvbWV0aGluZycsICdkaXNjb3ZlciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCiAKKyAgICAgICAgYXJnc1s6XSA9IFtdCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJywgJ2ZvbycsICdiYXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbJ2ZvbycsICdiYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbWydmb28nLCAnYmFyJ11dKQogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2Rpc2NvdmVyX2J5X2RlZmF1bHQoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCiAKLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIFtdKQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uYnVmZmVyLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmNhdGNoYnJlYWssIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uZmFpbGZhc3QsIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2Rpc2NvdmVyX2J5X2RlZmF1bHRfd2l0aF9vcHRpb25zKHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCi0gICAgICAgIHByb2dyYW0ubW9kdWxlID0gTm9uZQogCi0gICAgICAgIGFyZ3MgPSBbJ3NvbWV0aGluZycsICctdicsICctYicsICctdicsICctYycsICctZiddCi0gICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKLSAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKLSAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmd2LCBhcmdzWzE6XSkKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5Ci0gICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKGFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKyAgICAgICAgYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJy12JywgJy1iJywgJy12JywgJy1jJywgJy1mJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmJ1ZmZlciwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmNhdGNoYnJlYWssIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5mYWlsZmFzdCwgVHJ1ZSkKIAogCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV90b29fbWFueV9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIGNsYXNzIFN0b3AoRXhjZXB0aW9uKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZGVmIHVzYWdlRXhpdCgpOgotICAgICAgICAgICAgcmFpc2UgU3RvcAotCiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS51c2FnZUV4aXQgPSB1c2FnZUV4aXQKICAgICAgICAgcHJvZ3JhbS50ZXN0TG9hZGVyID0gTm9uZQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3RvcCk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncwogICAgICAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3VzYWdlOicsIHN0ZGVyci5nZXR2YWx1ZSgpKQogCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3VzZXNfZGVmYXVsdF9sb2FkZXIoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBvYmplY3QuX19uZXdfXyh1bml0dGVzdC5UZXN0UHJvZ3JhbSkKKyAgICAgICAgcHJvZ3JhbS5faW5pdEFyZ1BhcnNlcnMoKQogCiAgICAgICAgIGNsYXNzIExvYWRlcihvYmplY3QpOgogICAgICAgICAgICAgYXJncyA9IFtdCkBAIC00MTcsNyArNDM4LDcgQEAKICAgICAgICAgZXhwZWN0ZWRQYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZSh1bml0dGVzdC50ZXN0Ll9fZmlsZV9fKSkKIAogICAgICAgICBzZWxmLndhc1J1biA9IEZhbHNlCi0gICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4pOgorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CiAgICAgICAgICAgICBzZWxmLndhc1J1biA9IFRydWUKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhcnRfZGlyLCBleHBlY3RlZFBhdGgpCiAgICAgICAgICAgICByZXR1cm4gdGVzdHMKQEAgLTQyNyw1ICs0NDgsNzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIHRlc3RzKQogCiAKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfcGF0aF9idWlsdGluX21vZHVsZXMoc2VsZik6CisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBfOiBbJ3Rlc3RfdGhpc19kb2VzX25vdF9leGlzdC5weSddCisgICAgICAgIGlzZmlsZSA9IG9zLnBhdGguaXNmaWxlCisgICAgICAgIGlzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIF86IEZhbHNlCisgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBkZWYgcmVzdG9yZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBpc2RpcgorICAgICAgICAgICAgb3MubGlzdGRpciA9IGxpc3RkaXIKKyAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBsb2FkZXIuZGlzY292ZXIoJ3N5cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0NhbiBub3QgdXNlIGJ1aWx0aW4gbW9kdWxlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzIGRvdHRlZCBtb2R1bGUgbmFtZXMnKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX25hbWVzcGFjZV9wYWNrYWdlcyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgb3JpZ19pbXBvcnQgPSBfX2ltcG9ydF9fCisgICAgICAgIHBhY2thZ2UgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwYWNrYWdlJykKKyAgICAgICAgcGFja2FnZS5fX3BhdGhfXyA9IFsnL2EnLCAnL2InXQorICAgICAgICBwYWNrYWdlLl9fc3BlY19fID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKAorICAgICAgICAgICBsb2FkZXI9Tm9uZSwKKyAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9WycvYScsICcvYiddCisgICAgICAgICkKKworICAgICAgICBkZWYgX2ltcG9ydChwYWNrYWdlbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3BhY2thZ2VuYW1lXSA9IHBhY2thZ2UKKyAgICAgICAgICAgIHJldHVybiBwYWNrYWdlCisKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBvcmlnX2ltcG9ydAorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKKyAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IF9pbXBvcnQKKworICAgICAgICBfZmluZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybikpCisgICAgICAgICAgICByZXR1cm4gWyclcy90ZXN0cycgJSBzdGFydF9kaXJdCisKKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHN1aXRlID0gbG9hZGVyLmRpc2NvdmVyKCdwYWNrYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwgWycvYS90ZXN0cycsICcvYi90ZXN0cyddKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2ZhaWxlZF9kaXNjb3Zlcnkoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBwYWNrYWdlID0gdHlwZXMuTW9kdWxlVHlwZSgncGFja2FnZScpCisgICAgICAgIG9yaWdfaW1wb3J0ID0gX19pbXBvcnRfXworCisgICAgICAgIGRlZiBfaW1wb3J0KHBhY2thZ2VuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbcGFja2FnZW5hbWVdID0gcGFja2FnZQorICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2UKKworICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IG9yaWdfaW1wb3J0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gX2ltcG9ydAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGxvYWRlci5kaXNjb3ZlcigncGFja2FnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvblwndCBrbm93IGhvdyB0byBkaXNjb3ZlciBmcm9tIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChwYWNrYWdlKSkKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CmluZGV4IDljZTVlZTMuLmQ3ZmUwN2EgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKQEAgLTE0MiwzICsxNDIsNyBAQAogICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUsIGRlc2NyaXB0aW9uPWRlc2MpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSwgInRoaXMgdGVzdHMgZm9vIikKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQppbmRleCBmY2QyZTA3Li5iNjJhMWI1IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQpAQCAtMTMwNiwzICsxMzA2LDcgQEAKICAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgogICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIuc3VpdGVDbGFzcywgdW5pdHRlc3QuVGVzdFN1aXRlKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKaW5kZXggOGE0YjNmYS4uMzI5NDI5OCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQpAQCAtMiw2ICsyLDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTY0LDYgKzY1LDQxIEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAogICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQogCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKAorICAgICAgICAgICAgICAgIFtzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0X1Rlc3RQcm9ncmFtLkZvb0JhcildKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdFRlc3Rfd2l0aF9zdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZmFrZXRlc3QnXQorICAgICAgICBydW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRlc3Q9J3VuaXR0ZXN0LnRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQorICAgICAgICBzeXMuYXJndiA9IG9sZF9hcmd2CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1bml0dGVzdC50ZXN0JywpLCBwcm9ncmFtLnRlc3ROYW1lcykKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0X3dpdGhfaXRlcmFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gdGVzdAorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgb2xkX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICBzeXMuYXJndiA9IFsnZmFrZXRlc3QnXQorICAgICAgICBydW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0LlRlc3RQcm9ncmFtKAorICAgICAgICAgICAgdGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsCisgICAgICAgICAgICBkZWZhdWx0VGVzdD1bJ3VuaXR0ZXN0LnRlc3QnLCAndW5pdHRlc3QudGVzdDInXSwKKyAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsndW5pdHRlc3QudGVzdCcsICd1bml0dGVzdC50ZXN0MiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnRlc3ROYW1lcykKIAogICAgIGRlZiB0ZXN0X05vbkV4aXQoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5tYWluKGV4aXQ9RmFsc2UsCkBAIC0xNTEsMjAgKzE4NywzOCBAQAogICAgICAgICAgICAgaWYgYXR0ciA9PSAnY2F0Y2gnIGFuZCBub3QgaGFzSW5zdGFsbEhhbmRsZXI6CiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBOb25lKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBGYWxzZSkKKworICAgICAgICAgICAgZmFsc2UgPSBbXQorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBmYWxzZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgZmFsc2UpCisKKyAgICAgICAgICAgIHRydWUgPSBbNDJdCisgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIHRydWUpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIHRydWUpCisKICAgICAgICAgICAgIHNob3J0X29wdCA9ICctJXMnICUgYXJnWzBdCiAgICAgICAgICAgICBsb25nX29wdCA9ICctLSVzJyAlIGFyZwogICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgogICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKLQogICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHByb2dyYW0sIGF0dHIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgVHJ1ZSkKIAotICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgotICAgICAgICAgICAgICAgIG5vdF9ub25lID0gb2JqZWN0KCkKLSAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIG5vdF9ub25lKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgRmFsc2UpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKIAotICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgbm90X25vbmUpCisgICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBUcnVlKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCiAKICAgICBkZWYgdGVzdFdhcm5pbmcoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhlIHdhcm5pbmdzIGFyZ3VtZW50IiIiCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CmluZGV4IDdkNDA3MjUuLjQ4OWZlMTcgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcmVzdWx0LnB5CkBAIC0yMjcsNiArMjI3LDQwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZm9ybWF0dGVkX2V4Yywgc3RyKQogCisgICAgZGVmIHRlc3RfYWRkU3ViVGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgc3VidGVzdAorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgICAgICAgICAgc3VidGVzdCA9IHNlbGYuX3N1YnRlc3QKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgICAgIyBSZWdpc3RlciBhbiBlcnJvciBieSBoYW5kICh0byBjaGVjayB0aGUgQVBJKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkU3ViVGVzdCh0ZXN0LCBzdWJ0ZXN0LCBleGNfaW5mb190dXBsZSkKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgdHJpZ2dlciBhIGZhaWx1cmUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIikKKworICAgICAgICBzdWJ0ZXN0ID0gTm9uZQorICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXN0X2Nhc2UsIHN1YnRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgZm9ybWF0dGVkX2V4YykKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJzb21lIHJlY29nbml6YWJsZSBmYWlsdXJlIiwgZm9ybWF0dGVkX2V4YykKKwogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgogICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjM0LDYgKzI2OCwzNyBAQAogICAgICAgICAgICAgICAgICd0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKwogICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KScpCiAKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdzb21lIG1lc3NhZ2UnKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RSZXN1bHQpIFtzb21lIG1lc3NhZ2VdJykKKworICAgIGRlZiB0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZ0FuZFBhcmFtcyAnCisgICAgICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpICg8c3VidGVzdD4pJykKKworICAgIGRlZiB0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYmFyPTIpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0R2V0TmVzdGVkU3ViVGVzdERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKScpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CkBAIC0yNDcsNiArMzEyLDE4IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAogICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyAnCisgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSlcbicKKyAgICAgICAgICAgICAgICAnVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4nKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KICAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCkBAIC0yNTksNiArMzM2LDIxIEBACiAgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJwogICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorICAgICAgICBUaGUgc2Vjb25kIGxpbmUgb2YgdGhlIGRvY3N0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KE5vbmUsIFRydWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xLCBiYXI9Mik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICgndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCisKICAgICBkZWYgdGVzdFN0YWNrRnJhbWVUcmltbWluZyhzZWxmKToKICAgICAgICAgY2xhc3MgRnJhbWUob2JqZWN0KToKICAgICAgICAgICAgIGNsYXNzIHRiX2ZyYW1lKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcnVubmVyLnB5CmluZGV4IGUyMmU2YmMuLmVmMWMxYWY5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpAQCAtNSw2ICs1LDcgQEAKIGltcG9ydCBzdWJwcm9jZXNzCiAKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5jYXNlIGltcG9ydCBfT3V0Y29tZQogCiBmcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0LCBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bgogCkBAIC00MiwxMiArNDMsOCBAQAogICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBjbGFzcyBNb2NrT3V0Y29tZShvYmplY3QpOgotICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKLSAgICAgICAgICAgIGVycm9ycyA9IFtdCi0KICAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQotICAgICAgICB0ZXN0Ll9vdXRjb21lRm9yRG9DbGVhbnVwcyA9IE1vY2tPdXRjb21lCisgICAgICAgIG91dGNvbWUgPSB0ZXN0Ll9vdXRjb21lID0gX091dGNvbWUoKQogCiAgICAgICAgIGV4YzEgPSBFeGNlcHRpb24oJ2ZvbycpCiAgICAgICAgIGV4YzIgPSBFeGNlcHRpb24oJ2JhcicpCkBAIC02MSw5ICs1OCwxMCBAQAogICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0LmRvQ2xlYW51cHMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2NrT3V0Y29tZS5zdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG91dGNvbWUuc3VjY2VzcykKIAotICAgICAgICAoVHlwZTEsIGluc3RhbmNlMSwgXyksIChUeXBlMiwgaW5zdGFuY2UyLCBfKSA9IHJldmVyc2VkKE1vY2tPdXRjb21lLmVycm9ycykKKyAgICAgICAgKChfLCAoVHlwZTEsIGluc3RhbmNlMSwgXykpLAorICAgICAgICAgKF8sIChUeXBlMiwgaW5zdGFuY2UyLCBfKSkpID0gcmV2ZXJzZWQob3V0Y29tZS5lcnJvcnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUxLCBpbnN0YW5jZTEpLCAoRXhjZXB0aW9uLCBleGMxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoVHlwZTIsIGluc3RhbmNlMiksIChFeGNlcHRpb24sIGV4YzIpKQogCkBAIC0zNDEsMyArMzM5LDcgQEAKICAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoZikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bm5lci5zdHJlYW0uc3RyZWFtIGlzIGYpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKaW5kZXggYjhkNWFhNC4uMzkyZjk1ZSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTQ5NCwxNCArNDk0LDEzIEBACiAgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCiAgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQogCi0gICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHN1aXRlLmFkZFRlc3QoX3N1aXRlKQotCiAgICAgICAgIG1lc3NhZ2VzID0gKCdzZXRVcE1vZHVsZScsICd0ZWFyRG93bk1vZHVsZScsICdzZXRVcENsYXNzJywgJ3RlYXJEb3duQ2xhc3MnLCAndGVzdF9zb21ldGhpbmcnKQogICAgICAgICBmb3IgcGhhc2UsIG1zZyBpbiBlbnVtZXJhdGUobWVzc2FnZXMpOgorICAgICAgICAgICAgX3N1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbX3N1aXRlXSkKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZyk6CiAgICAgICAgICAgICAgICAgc3VpdGUuZGVidWcoKQogCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQppbmRleCA5NTIyNDBlLi5lMThjYWE0IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKQEAgLTI5LDYgKzI5LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQogCisgICAgZGVmIHRlc3Rfc2tpcHBpbmdfc3VidGVzdHMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9za2lwX21lKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGE9MSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGI9Mik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDEiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIDIiKQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMyIpCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X3NraXBfbWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3N0YXJ0VGVzdCcsICdhZGRTa2lwJywgJ2FkZFNraXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRTa2lwJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMykKKyAgICAgICAgc3VidGVzdCwgbXNnID0gcmVzdWx0LnNraXBwZWRbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICJza2lwIDEiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VidGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3VidGVzdCwgdGVzdCkKKyAgICAgICAgc3VidGVzdCwgbXNnID0gcmVzdWx0LnNraXBwZWRbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csICJza2lwIDIiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VidGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3VidGVzdCwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZFsyXSwgKHRlc3QsICJza2lwIDMiKSkKKwogICAgIGRlZiB0ZXN0X3NraXBwaW5nX2RlY29yYXRvcnMoc2VsZik6CiAgICAgICAgIG9wX3RhYmxlID0gKCh1bml0dGVzdC5za2lwVW5sZXNzLCBGYWxzZSwgVHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICh1bml0dGVzdC5za2lwSWYsIFRydWUsIEZhbHNlKSkKQEAgLTk1LDYgKzEyMCwzMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAorICAgIGRlZiB0ZXN0X2V4cGVjdGVkX2ZhaWx1cmVfc3VidGVzdHMoc2VsZik6CisgICAgICAgICMgQSBmYWlsdXJlIGluIGFueSBzdWJ0ZXN0IGNvdW50cyBhcyB0aGUgZXhwZWN0ZWQgZmFpbHVyZSBvZiB0aGUKKyAgICAgICAgIyB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGVscCBtZSEiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgZG9lc24ndCBnZXQgZXhlY3V0ZWQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJzaG91bGRuJ3QgY29tZSBoZXJlIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKwogICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2VzcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKQEAgLTExMCw2ICsxNjAsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudW5leHBlY3RlZFN1Y2Nlc3NlcywgW3Rlc3RdKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKIAorICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2Vzc19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgIyBTdWNjZXNzIGluIGFsbCBzdWJ0ZXN0cyBjb3VudHMgYXMgdGhlIHVuZXhwZWN0ZWQgc3VjY2VzcyBvZgorICAgICAgICAjIHRoZSB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgU28gZG9lcyB0aGlzIG9uZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdFN1Y2Nlc3MnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKICAgICBkZWYgdGVzdF9za2lwX2RvZXNudF9ydW5fc2V0dXAoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICB3YXNTZXRVcCA9IEZhbHNlCkBAIC0xNDcsMyArMjIxLDcgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQogICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQppbmRleCAyZGI5NzhkLi41NGNlYzZlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKQEAgLTEsNiArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIAoraW1wb3J0IGdjCiBpbXBvcnQgc3lzCitpbXBvcnQgd2Vha3JlZgogZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgVGVzdEVxdWFsaXR5CiAKIApAQCAtMzAwLDcgKzMwMiw1NCBAQAogICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKICAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKIAorICAgIGRlZiB0ZXN0X3JlbW92ZV90ZXN0X2F0X2luZGV4KHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKIAorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuX3Rlc3RzID0gWzEsIDIsIDNdCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIE5vbmUsIDNdLCBzdWl0ZS5fdGVzdHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleF9ub3RfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IE5vbmUKKworICAgICAgICAjIGlmIF9yZW1vdmVBdEluZGV4IHJhaXNlcyBmb3Igbm9uaXRlcmFibGVzIHRoaXMgbmV4dCBsaW5lIHdpbGwgYnJlYWsKKyAgICAgICAgc3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4KDIpCisKKyAgICBkZWYgYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bihzZWxmLCBUZXN0U3VpdGVDbGFzcyk6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0X25vdGhpbmcnKQorICAgICAgICB3cmVmID0gd2Vha3JlZi5yZWYodGVzdCkKKworICAgICAgICBzdWl0ZSA9IFRlc3RTdWl0ZUNsYXNzKFt3cmVmKCldKQorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorCisgICAgICAgIGRlbCB0ZXN0CisKKyAgICAgICAgIyBmb3IgdGhlIGJlbmVmaXQgb2Ygbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JlZigpKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX0Jhc2VUZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5CYXNlVGVzdFN1aXRlKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSkKIAogICAgIGRlZiB0ZXN0X2Jhc2V0ZXN0c3VpdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzYzLDYgKzQxMiw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzYzM2EKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay9fX21haW5fXy5weQpAQCAtMCwwICsxLDE4IEBACitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICMgdG9wIGxldmVsIGRpcmVjdG9yeSBjYWNoZWQgb24gbG9hZGVyIGluc3RhbmNlCisgICAgdGhpc19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcGF0dGVybiA9IHBhdHRlcm4gb3IgInRlc3QqLnB5IgorICAgICMgV2UgYXJlIGluc2lkZSB1bml0dGVzdC50ZXN0LnRlc3Rtb2NrLCBzbyB0aGUgdG9wLWxldmVsIGlzIHRocmVlIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUodGhpc19kaXIpKSkKKyAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wX2xldmVsX2Rpcj10b3BfbGV2ZWxfZGlyKQorICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCisgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQppbmRleCA3YjJkZDAwLi41MzkwYTRlIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CkBAIC0xNDUsMyArMTQ1LDcgQEAKICAgICAgICAgbW9jay53aWJibGUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay53aWJibGUsICdzb21lJywgICdhcmdzJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGhlbHBlcnMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQppbmRleCBhMzYyYTJmLi4xZGJjMGI2IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weQpAQCAtMzM3LDkgKzMzNywxMCBAQAogCiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKLSAgICAgICAgZm9yIHNwZWMgaW4gKFNvbWVDbGFzcywgU29tZUNsYXNzKCkpOgotICAgICAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhzcGVjKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhTb21lQ2xhc3MpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoU29tZUNsYXNzKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX3NvbWVjbGFzc19tb2NrKG1vY2spCiAKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9hdXRvc3BlY19yZXR1cm5fdmFsdWUoc2VsZik6CkBAIC01NzYsMTAgKzU3NywxMCBAQAogCiAgICAgZGVmIHRlc3Rfc3BlY19pbmhlcml0YW5jZV9mb3JfY2xhc3NlcyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgYShzZWxmKToKKyAgICAgICAgICAgIGRlZiBhKHNlbGYsIHgpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGNsYXNzIEJhcihvYmplY3QpOgotICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBmKHNlbGYsIHkpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgY2xhc3NfbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhGb28pCkBAIC01ODcsMjYgKzU4OCwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydElzTm90KGNsYXNzX21vY2ssIGNsYXNzX21vY2soKSkKIAogICAgICAgICBmb3IgdGhpc19tb2NrIGluIGNsYXNzX21vY2ssIGNsYXNzX21vY2soKToKLSAgICAgICAgICAgIHRoaXNfbW9jay5hKCkKLSAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRoaXNfbW9jay5hLCAnZm9vJykKKyAgICAgICAgICAgIHRoaXNfbW9jay5hKHg9NSkKKyAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCh4PTUpCisgICAgICAgICAgICB0aGlzX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGhpc19tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCB0aGlzX21vY2ssICdiJykKIAogICAgICAgICBpbnN0YW5jZV9tb2NrID0gY3JlYXRlX2F1dG9zcGVjKEZvbygpKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nKQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEoNSkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCg1KQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKHg9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrLmEsICdmb28nLCAnYmFyJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2ssICdiJykKIAogICAgICAgICAjIFRoZSByZXR1cm4gdmFsdWUgaXNuJ3QgaXNuJ3QgY2FsbGFibGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZV9tb2NrKQogCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZi5hc3NlcnRfY2FsbGVkX3dpdGgoeT02KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jay5CYXIsICdnJykKIAotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYoKQotICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mKDYpCisgICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCh5PTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLkJhcigpLCAnZycpCiAKIApAQCAtNjYzLDEyICs2NjgsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEsIDIpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIGI9MikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIpCiAKICAgICAgICAgZi5mID0gZgogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jay5mKQogICAgICAgICBtb2NrLmYoMywgNCkKICAgICAgICAgbW9jay5mLmFzc2VydF9jYWxsZWRfd2l0aCgzLCA0KQorICAgICAgICBtb2NrLmYuYXNzZXJ0X2NhbGxlZF93aXRoKGE9MywgYj00KQogCiAKICAgICBkZWYgdGVzdF9za2lwX2F0dHJpYnV0ZWVycm9ycyhzZWxmKToKQEAgLTcwNCw5ICs3MTIsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQogICAgICAgICBtb2NrKDEpCiAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLCAyKQogCiAgICAgICAgIG1vY2soNCwgNSkKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoNCwgNSkKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT00LCBiPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwgYT01LCBiPTQpCiAKIAogICAgIGRlZiB0ZXN0X2NsYXNzX3dpdGhfbm9faW5pdChzZWxmKToKQEAgLTcxOSwyNCArNzMxLDI3IEBACiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfY2FsbGFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIENhbGxhYmxlKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGEpOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKQotICAgICAgICBtb2NrKCkKLSAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCisgICAgICAgIG1vY2soMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKHg9MSwgeT0yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2ssICdhJykKIAotICAgICAgICBpbnN0YW5jZSA9IG1vY2soKQorICAgICAgICBpbnN0YW5jZSA9IG1vY2soMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnN0YW5jZSkKICAgICAgICAgaW5zdGFuY2UoYT0nYScpCisgICAgICAgIGluc3RhbmNlLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoYT0nYScpCiAgICAgICAgIGluc3RhbmNlKCdhJykKICAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKCdhJykKKyAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF93aXRoKGE9J2EnKQogCi0gICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUoKSkKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSgxLCAyKSkKICAgICAgICAgbW9jayhhPSdhJykKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPSdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrKQpAQCAtNzc5LDcgKzc5NCwxMSBAQAogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBhID0gY3JlYXRlX2F1dG9zcGVjKEZvbykKKyAgICAgICAgYS5mKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAgICAgICAgIGEuZihzZWxmPTEwKQorICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQogICAgICAgICBhLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGY9MTApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1vY2sucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQppbmRleCBjZWY1NDA1Li4yMGNjNjU0IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weQpAQCAtMjUsNiArMjUsMTggQEAKICAgICBfX25leHRfXyA9IG5leHQKIAogCitjbGFzcyBTb21ldGhpbmcob2JqZWN0KToKKyAgICBkZWYgbWV0aChzZWxmLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY21ldGgoY2xzLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNtZXRoKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTI3Myw2ICsyODUsNDMgQEAKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMywgYT0nZmlzaCcsIGI9J25vdGhpbmcnKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfY2FsbGVkX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9tZXRob2Rfc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhtb2NrKToKKyAgICAgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nKCkubWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLmNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5jbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9U29tZXRoaW5nLnNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5zbWV0aCkKKyAgICAgICAgX2NoZWNrKG1vY2spCisKKwogICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCiAgICAgICAgIG1vY2soKQpAQCAtMjk3LDYgKzM0NiwyOSBAQAogICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfb25jZV93aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChlPTgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS5leGNlcHRpb24uX19jYXVzZV9fLCBUeXBlRXJyb3IpCisgICAgICAgICMgTW9jayBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgPT4gYWx3YXlzIGZhaWxzCisgICAgICAgIG1vY2soNCwgNSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICA0LCA1LCA2KQorCisKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfYWNjZXNzX3JldHVybnNfbW9ja3Moc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgc29tZXRoaW5nID0gbW9jay5zb21ldGhpbmcKQEAgLTk5NSw2ICsxMDY3LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9oYXNfY2FsbHNfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrKDQsIDUsIGM9NiwgZD03KQorICAgICAgICBtb2NrKDEwLCAxMSwgYz0xMikKKyAgICAgICAgY2FsbHMgPSBbCisgICAgICAgICAgICAoJycsICgxLCAyLCAzKSwge30pLAorICAgICAgICAgICAgKCcnLCAoNCwgNSwgNiksIHsnZCc6IDd9KSwKKyAgICAgICAgICAgICgoMTAsIDExLCAxMiksIHt9KSwKKyAgICAgICAgICAgIF0KKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgIyBSZXZlcnNlZCBvcmRlcgorICAgICAgICBjYWxscyA9IGxpc3QocmV2ZXJzZWQoY2FsbHMpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscykKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbMTpdLCBhbnlfb3JkZXI9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0sIGFueV9vcmRlcj1UcnVlKQorCisKICAgICBkZWYgdGVzdF9hc3NlcnRfYW55X2NhbGwoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgbW9jaygxLCAyKQpAQCAtMTAyMSw2ICsxMTI2LDI2IEBACiAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2FueV9jYWxsX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jayg0LCA1LCBjPTYsIGQ9NykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoMSwgMiwgMykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT0xLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoNCwgNSwgNiwgNykKKyAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoYT00LCBiPTUsIGM9NiwgZD03KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfYW55X2NhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2FueV9jYWxsKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKworCiAgICAgZGVmIHRlc3RfbW9ja19jYWxsc19jcmVhdGVfYXV0b3NwZWMoc2VsZik6CiAgICAgICAgIGRlZiBmKGEsIGIpOgogICAgICAgICAgICAgcGFzcwpAQCAtMTE3NywyMCArMTMwMiw2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubWV0aG9kX2NhbGxzLCBbXSkKIAogCi0gICAgZGVmIHRlc3RfYXR0cmlidXRlX2RlbGV0aW9uKHNlbGYpOgotICAgICAgICAjIHRoaXMgYmVoYXZpb3VyIGlzbid0ICp1c2VmdWwqLCBidXQgYXQgbGVhc3QgaXQncyBub3cgdGVzdGVkLi4uCi0gICAgICAgIGZvciBLbGFzcyBpbiBNb2NrLCBNYWdpY01vY2ssIE5vbkNhbGxhYmxlTWFnaWNNb2NrLCBOb25DYWxsYWJsZU1vY2s6Ci0gICAgICAgICAgICBtID0gS2xhc3MoKQotICAgICAgICAgICAgb3JpZ2luYWwgPSBtLmZvbwotICAgICAgICAgICAgbS5mb28gPSAzCi0gICAgICAgICAgICBkZWwgbS5mb28KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb28sIG9yaWdpbmFsKQotCi0gICAgICAgICAgICBuZXcgPSBtLmZvbyA9IE1vY2soKQotICAgICAgICAgICAgZGVsIG0uZm9vCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZm9vLCBuZXcpCi0KLQogICAgIGRlZiB0ZXN0X21vY2tfcGFyZW50cyhzZWxmKToKICAgICAgICAgZm9yIEtsYXNzIGluIE1vY2ssIE1hZ2ljTW9jazoKICAgICAgICAgICAgIG0gPSBLbGFzcygpCkBAIC0xMjU0LDcgKzEzNjUsOCBAQAogCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZGVsZXRpb24oc2VsZik6Ci0gICAgICAgIGZvciBtb2NrIGluIE1vY2soKSwgTWFnaWNNb2NrKCk6CisgICAgICAgIGZvciBtb2NrIGluIChNb2NrKCksIE1hZ2ljTW9jaygpLCBOb25DYWxsYWJsZU1hZ2ljTW9jaygpLAorICAgICAgICAgICAgICAgICAgICAgTm9uQ2FsbGFibGVNb2NrKCkpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9jaywgJ20nKSkKIAogICAgICAgICAgICAgZGVsIG1vY2subQpAQCAtMTI3NCw2ICsxMzg2LDUgQEAKICAgICAgICAgICAgIG1vY2suZm9vCiAKIAotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CmluZGV4IGMxMDkxYjQuLmMxYmMzNGYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKQEAgLTE3ODAsNiArMTc4MCw1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MucGF0aCwgcGF0aCkKIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CmluZGV4IDBhMGNmYWQuLmY1NGUwNTEgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CkBAIC0xNzIsNSArMTcyLDg4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKIAogCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlYWRsaW5lIHdpbGwgcmV0dXJuIGFsbCB0aGUgbGluZXMgZnJvbSB0aGUgZmFrZSBmaWxlCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMiA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZTMgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMiwgJ2JhclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMywgJ2JhelxuJykKKworICAgICAgICAjIENoZWNrIHRoYXQgd2UgcHJvcGVybHkgZW11bGF0ZSBhIGZpbGUgdGhhdCBkb2Vzbid0IGVuZCBpbiBhIG5ld2xpbmUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVtdWxhdGluZyBhIGZpbGUgdGhhdCBlbmRzIGluIGEgbmV3bGluZSBjaGFyYWN0ZXIgd29ya3MKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmb29cbicsICdiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgICMgVGVzdCB0aGF0IGZpbGVzIHdpdGhvdXQgYSBmaW5hbCBuZXdsaW5lIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkKKyAgICAgICAgIyBlbXVsYXRlZAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJheicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JheiddKQorCisKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fcmVhZF93aXRoX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIEF0IG9uZSBwb2ludCBjYWxsaW5nIHJlYWQgd2l0aCBhbiBhcmd1bWVudCB3YXMgYnJva2VuCisgICAgICAgICMgZm9yIG1vY2tzIHJldHVybmVkIGJ5IG1vY2tfb3BlbgorICAgICAgICBzb21lX2RhdGEgPSAnZm9vXG5iYXJcbmJheicKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9c29tZV9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2soKS5yZWFkKDEwKSwgc29tZV9kYXRhKQorCisKKyAgICBkZWYgdGVzdF9pbnRlcmxlYXZlZF9yZWFkcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyByZWFkLCByZWFkbGluZSwgYW5kIHJlYWRsaW5lcyBwdWxscyBkYXRhCisgICAgICAgICMgc2VxdWVudGlhbGx5IGZyb20gdGhlIGRhdGEgd2UgcHJlbG9hZCB3aXRoCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICByZXN0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUxLCAnZm9vXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3QsIFsnYmFyXG4nLCAnYmF6XG4nXSkKKworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJhelxuJykKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgaCA9IG9wZW4oJ2JhcicpCisgICAgICAgICAgICBsaW5lMSA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgcmVzdCA9IGgucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdCwgJ2JhclxuYmF6XG4nKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX3JldHVybl92YWx1ZXMoc2VsZik6CisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb28nKQorICAgICAgICBoYW5kbGUgPSBtb2NrKCkKKworICAgICAgICBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUgPSAnYmFyJworICAgICAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gJ2JhcicKKyAgICAgICAgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgPSBbJ2JhciddCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZCgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lcygpLCBbJ2JhciddKQorCisgICAgICAgICMgY2FsbCByZXBlYXRlZGx5IHRvIGNoZWNrIHRoYXQgYSBTdG9wSXRlcmF0aW9uIGlzIG5vdCBwcm9wYWdhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKworCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3V0aWwucHkgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQppbmRleCBjY2RmMGI4Li5hZWU0OThmIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdXRpbC5weQorKysgYi9MaWIvdW5pdHRlc3QvdXRpbC5weQpAQCAtMSwxMCArMSw0NyBAQAogIiIiVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucy4iIiIKIAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgT3JkZXJlZERpY3QKK2Zyb20gb3MucGF0aCBpbXBvcnQgY29tbW9ucHJlZml4CiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKIF9NQVhfTEVOR1RIID0gODAKK19QTEFDRUhPTERFUl9MRU4gPSAxMgorX01JTl9CRUdJTl9MRU4gPSA1CitfTUlOX0VORF9MRU4gPSA1CitfTUlOX0NPTU1PTl9MRU4gPSA1CitfTUlOX0RJRkZfTEVOID0gX01BWF9MRU5HVEggLSBcCisgICAgICAgICAgICAgICAoX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsKKyAgICAgICAgICAgICAgICBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9FTkRfTEVOKQorYXNzZXJ0IF9NSU5fRElGRl9MRU4gPj0gMAorCitkZWYgX3Nob3J0ZW4ocywgcHJlZml4bGVuLCBzdWZmaXhsZW4pOgorICAgIHNraXAgPSBsZW4ocykgLSBwcmVmaXhsZW4gLSBzdWZmaXhsZW4KKyAgICBpZiBza2lwID4gX1BMQUNFSE9MREVSX0xFTjoKKyAgICAgICAgcyA9ICclc1slZCBjaGFyc10lcycgJSAoc1s6cHJlZml4bGVuXSwgc2tpcCwgc1tsZW4ocykgLSBzdWZmaXhsZW46XSkKKyAgICByZXR1cm4gcworCitkZWYgX2NvbW1vbl9zaG9ydGVuX3JlcHIoKmFyZ3MpOgorICAgIGFyZ3MgPSB0dXBsZShtYXAoc2FmZV9yZXByLCBhcmdzKSkKKyAgICBtYXhsZW4gPSBtYXgobWFwKGxlbiwgYXJncykpCisgICAgaWYgbWF4bGVuIDw9IF9NQVhfTEVOR1RIOgorICAgICAgICByZXR1cm4gYXJncworCisgICAgcHJlZml4ID0gY29tbW9ucHJlZml4KGFyZ3MpCisgICAgcHJlZml4bGVuID0gbGVuKHByZWZpeCkKKworICAgIGNvbW1vbl9sZW4gPSBfTUFYX0xFTkdUSCAtIFwKKyAgICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbiArIF9NSU5fQkVHSU5fTEVOICsgX1BMQUNFSE9MREVSX0xFTikKKyAgICBpZiBjb21tb25fbGVuID4gX01JTl9DT01NT05fTEVOOgorICAgICAgICBhc3NlcnQgX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOICsgX01JTl9DT01NT05fTEVOICsgXAorICAgICAgICAgICAgICAgKG1heGxlbiAtIHByZWZpeGxlbikgPCBfTUFYX0xFTkdUSAorICAgICAgICBwcmVmaXggPSBfc2hvcnRlbihwcmVmaXgsIF9NSU5fQkVHSU5fTEVOLCBjb21tb25fbGVuKQorICAgICAgICByZXR1cm4gdHVwbGUocHJlZml4ICsgc1twcmVmaXhsZW46XSBmb3IgcyBpbiBhcmdzKQorCisgICAgcHJlZml4ID0gX3Nob3J0ZW4ocHJlZml4LCBfTUlOX0JFR0lOX0xFTiwgX01JTl9DT01NT05fTEVOKQorICAgIHJldHVybiB0dXBsZShwcmVmaXggKyBfc2hvcnRlbihzW3ByZWZpeGxlbjpdLCBfTUlOX0RJRkZfTEVOLCBfTUlOX0VORF9MRU4pCisgICAgICAgICAgICAgICAgIGZvciBzIGluIGFyZ3MpCisKIGRlZiBzYWZlX3JlcHIob2JqLCBzaG9ydD1GYWxzZSk6CiAgICAgdHJ5OgogICAgICAgICByZXN1bHQgPSByZXByKG9iaikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvZXJyb3IucHkgYi9MaWIvdXJsbGliL2Vycm9yLnB5CmluZGV4IGI3MTJlYmIuLjQ1YjcxNjkgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvZXJyb3IucHkKKysrIGIvTGliL3VybGxpYi9lcnJvci5weQpAQCAtMSw2ICsxLDYgQEAKICIiIkV4Y2VwdGlvbiBjbGFzc2VzIHJhaXNlZCBieSB1cmxsaWIuCiAKLVRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBJT0Vycm9yLiAgSXQKK1RoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBpcyBVUkxFcnJvciwgd2hpY2ggaW5oZXJpdHMgZnJvbSBPU0Vycm9yLiAgSXQKIGRvZXNuJ3QgZGVmaW5lIGFueSBiZWhhdmlvciBvZiBpdHMgb3duLCBidXQgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbAogZXhjZXB0aW9ucyBkZWZpbmVkIGluIHRoaXMgcGFja2FnZS4KIApAQCAtMTcsMTEgKzE3LDExIEBACiAKIAogIyBkbyB0aGVzZSBlcnJvciBjbGFzc2VzIG1ha2Ugc2Vuc2U/Ci0jIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIElPRXJyb3Igc3R1ZmYgaXMgb3ZlcnJpZGRlbi4gIHdlIGp1c3Qgd2FudCB0byBiZQorIyBtYWtlIHN1cmUgYWxsIG9mIHRoZSBPU0Vycm9yIHN0dWZmIGlzIG92ZXJyaWRkZW4uICB3ZSBqdXN0IHdhbnQgdG8gYmUKICMgc3VidHlwZXMuCiAKLWNsYXNzIFVSTEVycm9yKElPRXJyb3IpOgotICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBJT0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKK2NsYXNzIFVSTEVycm9yKE9TRXJyb3IpOgorICAgICMgVVJMRXJyb3IgaXMgYSBzdWItdHlwZSBvZiBPU0Vycm9yLCBidXQgaXQgZG9lc24ndCBzaGFyZSBhbnkgb2YKICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbi4gIG5lZWQgdG8gb3ZlcnJpZGUgX19pbml0X18gYW5kIF9fc3RyX18uCiAgICAgIyBJdCBzZXRzIHNlbGYuYXJncyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIEVudmlyb25tZW50RXJyb3IKICAgICAjIHN1YmNsYXNzZXMsIGJ1dCBhcmdzIGRvZXNuJ3QgaGF2ZSB0aGUgdHlwaWNhbCBmb3JtYXQgd2l0aCBlcnJubyBpbgpAQCAtNjEsOSArNjEsMTMgQEAKICAgICBkZWYgcmVhc29uKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5tc2cKIAotICAgIGRlZiBpbmZvKHNlbGYpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoZWFkZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5oZHJzCiAKKyAgICBAaGVhZGVycy5zZXR0ZXIKKyAgICBkZWYgaGVhZGVycyhzZWxmLCBoZWFkZXJzKToKKyAgICAgICAgc2VsZi5oZHJzID0gaGVhZGVycwogCiAjIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBkb3dubG9hZGVkIHNpemUgZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGgKIGNsYXNzIENvbnRlbnRUb29TaG9ydEVycm9yKFVSTEVycm9yKToKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcGFyc2UucHkgYi9MaWIvdXJsbGliL3BhcnNlLnB5CmluZGV4IDlhMmRmNDEuLjUzMjhiOWQgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcGFyc2UucHkKKysrIGIvTGliL3VybGxpYi9wYXJzZS5weQpAQCAtODQ2LDcgKzg0Niw2IEBACiAgICAgIiIic3BsaXR0eXBlKCd0eXBlOm9wYXF1ZXN0cmluZycpIC0tPiAndHlwZScsICdvcGFxdWVzdHJpbmcnLiIiIgogICAgIGdsb2JhbCBfdHlwZXByb2cKICAgICBpZiBfdHlwZXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF90eXBlcHJvZyA9IHJlLmNvbXBpbGUoJ14oW14vOl0rKTonKQogCiAgICAgbWF0Y2ggPSBfdHlwZXByb2cubWF0Y2godXJsKQpAQCAtODYwLDcgKzg1OSw2IEBACiAgICAgIiIic3BsaXRob3N0KCcvL2hvc3RbOnBvcnRdL3BhdGgnKSAtLT4gJ2hvc3RbOnBvcnRdJywgJy9wYXRoJy4iIiIKICAgICBnbG9iYWwgX2hvc3Rwcm9nCiAgICAgaWYgX2hvc3Rwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfaG9zdHByb2cgPSByZS5jb21waWxlKCdeLy8oW14vP10qKSguKikkJykKIAogICAgIG1hdGNoID0gX2hvc3Rwcm9nLm1hdGNoKHVybCkKQEAgLTg3Nyw3ICs4NzUsNiBAQAogICAgICIiInNwbGl0dXNlcigndXNlcls6cGFzc3dkXUBob3N0Wzpwb3J0XScpIC0tPiAndXNlcls6cGFzc3dkXScsICdob3N0Wzpwb3J0XScuIiIiCiAgICAgZ2xvYmFsIF91c2VycHJvZwogICAgIGlmIF91c2VycHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3VzZXJwcm9nID0gcmUuY29tcGlsZSgnXiguKilAKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfdXNlcnByb2cubWF0Y2goaG9zdCkKQEAgLTg4OSw3ICs4ODYsNiBAQAogICAgICIiInNwbGl0cGFzc3dkKCd1c2VyOnBhc3N3ZCcpIC0+ICd1c2VyJywgJ3Bhc3N3ZCcuIiIiCiAgICAgZ2xvYmFsIF9wYXNzd2Rwcm9nCiAgICAgaWYgX3Bhc3N3ZHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9wYXNzd2Rwcm9nID0gcmUuY29tcGlsZSgnXihbXjpdKik6KC4qKSQnLHJlLlMpCiAKICAgICBtYXRjaCA9IF9wYXNzd2Rwcm9nLm1hdGNoKHVzZXIpCkBAIC05MDIsNyArODk4LDYgQEAKICAgICAiIiJzcGxpdHBvcnQoJ2hvc3Q6cG9ydCcpIC0tPiAnaG9zdCcsICdwb3J0Jy4iIiIKICAgICBnbG9iYWwgX3BvcnRwcm9nCiAgICAgaWYgX3BvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfcG9ydHByb2cgPSByZS5jb21waWxlKCdeKC4qKTooWzAtOV0rKSQnKQogCiAgICAgbWF0Y2ggPSBfcG9ydHByb2cubWF0Y2goaG9zdCkKQEAgLTkxNyw3ICs5MTIsNiBAQAogICAgIFJldHVybiBOb25lIGlmICc6JyBidXQgbm90IGEgdmFsaWQgbnVtYmVyLiIiIgogICAgIGdsb2JhbCBfbnBvcnRwcm9nCiAgICAgaWYgX25wb3J0cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX25wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOiguKikkJykKIAogICAgIG1hdGNoID0gX25wb3J0cHJvZy5tYXRjaChob3N0KQpAQCAtOTM2LDcgKzkzMCw2IEBACiAgICAgIiIic3BsaXRxdWVyeSgnL3BhdGg/cXVlcnknKSAtLT4gJy9wYXRoJywgJ3F1ZXJ5Jy4iIiIKICAgICBnbG9iYWwgX3F1ZXJ5cHJvZwogICAgIGlmIF9xdWVyeXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9xdWVyeXByb2cgPSByZS5jb21waWxlKCdeKC4qKVw/KFteP10qKSQnKQogCiAgICAgbWF0Y2ggPSBfcXVlcnlwcm9nLm1hdGNoKHVybCkKQEAgLTk0OCw3ICs5NDEsNiBAQAogICAgICIiInNwbGl0dGFnKCcvcGF0aCN0YWcnKSAtLT4gJy9wYXRoJywgJ3RhZycuIiIiCiAgICAgZ2xvYmFsIF90YWdwcm9nCiAgICAgaWYgX3RhZ3Byb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF90YWdwcm9nID0gcmUuY29tcGlsZSgnXiguKikjKFteI10qKSQnKQogCiAgICAgbWF0Y2ggPSBfdGFncHJvZy5tYXRjaCh1cmwpCkBAIC05NjYsNyArOTU4LDYgQEAKICAgICAiIiJzcGxpdHZhbHVlKCdhdHRyPXZhbHVlJykgLS0+ICdhdHRyJywgJ3ZhbHVlJy4iIiIKICAgICBnbG9iYWwgX3ZhbHVlcHJvZwogICAgIGlmIF92YWx1ZXByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF92YWx1ZXByb2cgPSByZS5jb21waWxlKCdeKFtePV0qKT0oLiopJCcpCiAKICAgICBtYXRjaCA9IF92YWx1ZXByb2cubWF0Y2goYXR0cikKZGlmZiAtLWdpdCBhL0xpYi91cmxsaWIvcmVxdWVzdC5weSBiL0xpYi91cmxsaWIvcmVxdWVzdC5weQppbmRleCBhNzQ0NWQxLi41OTk1Y2JlIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3JlcXVlc3QucHkKKysrIGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CkBAIC0xOCw3ICsxOCw3IEBACiB1cmxsaWIuICBwYXNzIHRoZSB1cmwgYW5kIG9wdGlvbmFsbHkgZGF0YSB0byBwb3N0IHRvIGFuIEhUVFAgVVJMLCBhbmQKIGdldCBhIGZpbGUtbGlrZSBvYmplY3QgYmFjay4gIE9uZSBkaWZmZXJlbmNlIGlzIHRoYXQgeW91IGNhbiBhbHNvIHBhc3MKIGEgUmVxdWVzdCBpbnN0YW5jZSBpbnN0ZWFkIG9mIFVSTC4gIFJhaXNlcyBhIFVSTEVycm9yIChzdWJjbGFzcyBvZgotSU9FcnJvcik7IGZvciBIVFRQIGVycm9ycywgcmFpc2VzIGFuIEhUVFBFcnJvciwgd2hpY2ggY2FuIGFsc28gYmUKK09TRXJyb3IpOyBmb3IgSFRUUCBlcnJvcnMsIHJhaXNlcyBhbiBIVFRQRXJyb3IsIHdoaWNoIGNhbiBhbHNvIGJlCiB0cmVhdGVkIGFzIGEgdmFsaWQgcmVzcG9uc2UuCiAKIGJ1aWxkX29wZW5lciAtLSBGdW5jdGlvbiB0aGF0IGNyZWF0ZXMgYSBuZXcgT3BlbmVyRGlyZWN0b3IgaW5zdGFuY2UuCkBAIC0xMDMsNyArMTAzLDggQEAKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCAoCiAgICAgdXJscGFyc2UsIHVybHNwbGl0LCB1cmxqb2luLCB1bndyYXAsIHF1b3RlLCB1bnF1b3RlLAogICAgIHNwbGl0dHlwZSwgc3BsaXRob3N0LCBzcGxpdHBvcnQsIHNwbGl0dXNlciwgc3BsaXRwYXNzd2QsCi0gICAgc3BsaXRhdHRyLCBzcGxpdHF1ZXJ5LCBzcGxpdHZhbHVlLCBzcGxpdHRhZywgdG9fYnl0ZXMsIHVybHVucGFyc2UpCisgICAgc3BsaXRhdHRyLCBzcGxpdHF1ZXJ5LCBzcGxpdHZhbHVlLCBzcGxpdHRhZywgdG9fYnl0ZXMsCisgICAgdW5xdW90ZV90b19ieXRlcywgdXJsdW5wYXJzZSkKIGZyb20gdXJsbGliLnJlc3BvbnNlIGltcG9ydCBhZGRpbmZvdXJsLCBhZGRjbG9zZWhvb2sKIAogIyBjaGVjayBmb3IgU1NMCkBAIC0xMjEsNyArMTIyLDcgQEAKICAgICAnSFRUUFBhc3N3b3JkTWdyJywgJ0hUVFBQYXNzd29yZE1ncldpdGhEZWZhdWx0UmVhbG0nLAogICAgICdBYnN0cmFjdEJhc2ljQXV0aEhhbmRsZXInLCAnSFRUUEJhc2ljQXV0aEhhbmRsZXInLCAnUHJveHlCYXNpY0F1dGhIYW5kbGVyJywKICAgICAnQWJzdHJhY3REaWdlc3RBdXRoSGFuZGxlcicsICdIVFRQRGlnZXN0QXV0aEhhbmRsZXInLCAnUHJveHlEaWdlc3RBdXRoSGFuZGxlcicsCi0gICAgJ0hUVFBIYW5kbGVyJywgJ0ZpbGVIYW5kbGVyJywgJ0ZUUEhhbmRsZXInLCAnQ2FjaGVGVFBIYW5kbGVyJywKKyAgICAnSFRUUEhhbmRsZXInLCAnRmlsZUhhbmRsZXInLCAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLCAnRGF0YUhhbmRsZXInLAogICAgICdVbmtub3duSGFuZGxlcicsICdIVFRQRXJyb3JQcm9jZXNzb3InLAogICAgICMgRnVuY3Rpb25zCiAgICAgJ3VybG9wZW4nLCAnaW5zdGFsbF9vcGVuZXInLCAnYnVpbGRfb3BlbmVyJywKQEAgLTE0MCwxMyArMTQxLDkgQEAKICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGVmYXVsdDoKICAgICAgICAgaWYgbm90IF9oYXZlX3NzbDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NTTCBzdXBwb3J0IG5vdCBhdmFpbGFibGUnKQotICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgotICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKLSAgICAgICAgaWYgY2FmaWxlIG9yIGNhcGF0aDoKLSAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZSwgY2FwYXRoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPWNhZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGF0aD1jYXBhdGgpCiAgICAgICAgIGh0dHBzX2hhbmRsZXIgPSBIVFRQU0hhbmRsZXIoY29udGV4dD1jb250ZXh0LCBjaGVja19ob3N0bmFtZT1UcnVlKQogICAgICAgICBvcGVuZXIgPSBidWlsZF9vcGVuZXIoaHR0cHNfaGFuZGxlcikKICAgICBlbGlmIF9vcGVuZXIgaXMgTm9uZToKQEAgLTIyNyw3ICsyMjQsNyBAQAogICAgIGZvciB0ZW1wX2ZpbGUgaW4gX3VybF90ZW1wZmlsZXM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wX2ZpbGUpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlbCBfdXJsX3RlbXBmaWxlc1s6XQpAQCAtMjU4LDI0ICsyNTUsNjAgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkYXRhPU5vbmUsIGhlYWRlcnM9e30sCiAgICAgICAgICAgICAgICAgIG9yaWdpbl9yZXFfaG9zdD1Ob25lLCB1bnZlcmlmaWFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKLSAgICAgICAgIyB1bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKSAtLT4gJ3R5cGU6Ly9ob3N0L3BhdGgnCi0gICAgICAgIHNlbGYuZnVsbF91cmwgPSB1bndyYXAodXJsKQotICAgICAgICBzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5mdWxsX3VybCkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmZ1bGxfdXJsID0gdXJsCiAgICAgICAgIHNlbGYuaGVhZGVycyA9IHt9CisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMgPSB7fQorICAgICAgICBzZWxmLl9kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICAgICAgIHNlbGYuX3R1bm5lbF9ob3N0ID0gTm9uZQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkKLSAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CiAgICAgICAgIGlmIG9yaWdpbl9yZXFfaG9zdCBpcyBOb25lOgogICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0ID0gcmVxdWVzdF9ob3N0KHNlbGYpCiAgICAgICAgIHNlbGYub3JpZ2luX3JlcV9ob3N0ID0gb3JpZ2luX3JlcV9ob3N0CiAgICAgICAgIHNlbGYudW52ZXJpZmlhYmxlID0gdW52ZXJpZmlhYmxlCi0gICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisgICAgICAgIGlmIG1ldGhvZDoKKyAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnVsbF91cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gJ3t9I3t9Jy5mb3JtYXQoc2VsZi5fZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBzZWxmLl9mdWxsX3VybAorCisgICAgQGZ1bGxfdXJsLnNldHRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmLCB1cmwpOgorICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSB1bndyYXAodXJsKQorICAgICAgICBzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCA9IHNwbGl0dGFnKHNlbGYuX2Z1bGxfdXJsKQogICAgICAgICBzZWxmLl9wYXJzZSgpCiAKKyAgICBAZnVsbF91cmwuZGVsZXRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSBOb25lCisgICAgICAgIHNlbGYuZnJhZ21lbnQgPSBOb25lCisgICAgICAgIHNlbGYuc2VsZWN0b3IgPSAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhCisKKyAgICBAZGF0YS5zZXR0ZXIKKyAgICBkZWYgZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YSAhPSBzZWxmLl9kYXRhOgorICAgICAgICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKKyAgICAgICAgICAgICMgaXNzdWUgMTY0NjQKKyAgICAgICAgICAgICMgaWYgd2UgY2hhbmdlIGRhdGEgd2UgbmVlZCB0byByZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyCisgICAgICAgICAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgICAgICAgICBpZiBzZWxmLmhhc19oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIik6CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpCisKKyAgICBAZGF0YS5kZWxldGVyCisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKwogICAgIGRlZiBfcGFyc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLmZ1bGxfdXJsKQorICAgICAgICBzZWxmLnR5cGUsIHJlc3QgPSBzcGxpdHR5cGUoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIGlmIHNlbGYudHlwZSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB1cmwgdHlwZTogJXIiICUgc2VsZi5mdWxsX3VybCkKICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnNlbGVjdG9yID0gc3BsaXRob3N0KHJlc3QpCkBAIC0yODQsNjIgKzMxNywxMSBAQAogCiAgICAgZGVmIGdldF9tZXRob2Qoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kLiIiIgotICAgICAgICBpZiBzZWxmLm1ldGhvZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1ldGhvZAotICAgICAgICBlbGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAiUE9TVCIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiR0VUIgorICAgICAgICBkZWZhdWx0X21ldGhvZCA9ICJQT1NUIiBpZiBzZWxmLmRhdGEgaXMgbm90IE5vbmUgZWxzZSAiR0VUIgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAnbWV0aG9kJywgZGVmYXVsdF9tZXRob2QpCiAKICAgICBkZWYgZ2V0X2Z1bGxfdXJsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZyYWdtZW50OgotICAgICAgICAgICAgcmV0dXJuICclcyMlcycgJSAoc2VsZi5mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCi0KLSAgICAjIEJlZ2luIGRlcHJlY2F0ZWQgbWV0aG9kcwotCi0gICAgZGVmIGFkZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5hZGRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQotCi0gICAgZGVmIGhhc19kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5oYXNfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSBpcyBub3QgTm9uZQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQotCi0gICAgZGVmIGdldF90eXBlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfdHlwZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHlwZQotCi0gICAgZGVmIGdldF9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfaG9zdCBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuaG9zdAotCi0gICAgZGVmIGdldF9zZWxlY3RvcihzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X3NlbGVjdG9yIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RvcgotCi0gICAgZGVmIGlzX3VudmVyaWZpYWJsZShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi51bnZlcmlmaWFibGUKLQotICAgIGRlZiBnZXRfb3JpZ2luX3JlcV9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5vcmlnaW5fcmVxX2hvc3QKLQotICAgICMgRW5kIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgICAgICByZXR1cm4gc2VsZi5mdWxsX3VybAogCiAgICAgZGVmIHNldF9wcm94eShzZWxmLCBob3N0LCB0eXBlKToKICAgICAgICAgaWYgc2VsZi50eXBlID09ICdodHRwcycgYW5kIG5vdCBzZWxmLl90dW5uZWxfaG9zdDoKQEAgLTM2OSw2ICszNTEsMTAgQEAKICAgICAgICAgICAgIGhlYWRlcl9uYW1lLAogICAgICAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycy5nZXQoaGVhZGVyX25hbWUsIGRlZmF1bHQpKQogCisgICAgZGVmIHJlbW92ZV9oZWFkZXIoc2VsZiwgaGVhZGVyX25hbWUpOgorICAgICAgICBzZWxmLmhlYWRlcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLnBvcChoZWFkZXJfbmFtZSwgTm9uZSkKKwogICAgIGRlZiBoZWFkZXJfaXRlbXMoc2VsZik6CiAgICAgICAgIGhkcnMgPSBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmNvcHkoKQogICAgICAgICBoZHJzLnVwZGF0ZShzZWxmLmhlYWRlcnMpCkBAIC01MzEsNyArNTE3LDggQEAKICAgICBvcGVuZXIgPSBPcGVuZXJEaXJlY3RvcigpCiAgICAgZGVmYXVsdF9jbGFzc2VzID0gW1Byb3h5SGFuZGxlciwgVW5rbm93bkhhbmRsZXIsIEhUVFBIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICBIVFRQRGVmYXVsdEVycm9ySGFuZGxlciwgSFRUUFJlZGlyZWN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3Nvcl0KKyAgICAgICAgICAgICAgICAgICAgICAgRlRQSGFuZGxlciwgRmlsZUhhbmRsZXIsIEhUVFBFcnJvclByb2Nlc3NvciwKKyAgICAgICAgICAgICAgICAgICAgICAgRGF0YUhhbmRsZXJdCiAgICAgaWYgaGFzYXR0cihodHRwLmNsaWVudCwgIkhUVFBTQ29ubmVjdGlvbiIpOgogICAgICAgICBkZWZhdWx0X2NsYXNzZXMuYXBwZW5kKEhUVFBTSGFuZGxlcikKICAgICBza2lwID0gc2V0KCkKQEAgLTEyNDYsMTEgKzEyMzMsMTcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoLnJlcXVlc3QocmVxLmdldF9tZXRob2QoKSwgcmVxLnNlbGVjdG9yLCByZXEuZGF0YSwgaGVhZGVycykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6ICMgdGltZW91dCBlcnJvcgogICAgICAgICAgICAgaC5jbG9zZSgpCiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICAjIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCB1cyBhICdDb25uZWN0aW9uOiBjbG9zZScgaGVhZGVyLAorICAgICAgICAgICAgIyBIVFRQQ29ubmVjdGlvbiBhc3N1bWVzIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGxlZnQgb3Blbi4gTWFudWFsbHkKKyAgICAgICAgICAgICMgbWFyayB0aGUgc29ja2V0IHRvIGJlIGNsb3NlZCB3aGVuIHRoaXMgcmVzcG9uc2Ugb2JqZWN0IGdvZXMgYXdheS4KKyAgICAgICAgICAgIGlmIGguc29jazoKKyAgICAgICAgICAgICAgICBoLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGguc29jayA9IE5vbmUKIAogICAgICAgICByLnVybCA9IHJlcS5nZXRfZnVsbF91cmwoKQogICAgICAgICAjIFRoaXMgbGluZSByZXBsYWNlcyB0aGUgLm1zZyBhdHRyaWJ1dGUgb2YgdGhlIEhUVFBSZXNwb25zZQpAQCAtMTQ0NSw3ICsxNDM4LDcgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBob3N0ID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKG1zZykKICAgICAgICAgcGF0aCwgYXR0cnMgPSBzcGxpdGF0dHIocmVxLnNlbGVjdG9yKQogICAgICAgICBkaXJzID0gcGF0aC5zcGxpdCgnLycpCkBAIC0xNTMxLDYgKzE1MjQsMzYgQEAKICAgICAgICAgc2VsZi5jYWNoZS5jbGVhcigpCiAgICAgICAgIHNlbGYudGltZW91dC5jbGVhcigpCiAKK2NsYXNzIERhdGFIYW5kbGVyKEJhc2VIYW5kbGVyKToKKyAgICBkZWYgZGF0YV9vcGVuKHNlbGYsIHJlcSk6CisgICAgICAgICMgZGF0YSBVUkxzIGFzIHNwZWNpZmllZCBpbiBSRkMgMjM5Ny4KKyAgICAgICAgIworICAgICAgICAjIGlnbm9yZXMgUE9TVGVkIGRhdGEKKyAgICAgICAgIworICAgICAgICAjIHN5bnRheDoKKyAgICAgICAgIyBkYXRhdXJsICAgOj0gImRhdGE6IiBbIG1lZGlhdHlwZSBdIFsgIjtiYXNlNjQiIF0gIiwiIGRhdGEKKyAgICAgICAgIyBtZWRpYXR5cGUgOj0gWyB0eXBlICIvIiBzdWJ0eXBlIF0gKiggIjsiIHBhcmFtZXRlciApCisgICAgICAgICMgZGF0YSAgICAgIDo9ICp1cmxjaGFyCisgICAgICAgICMgcGFyYW1ldGVyIDo9IGF0dHJpYnV0ZSAiPSIgdmFsdWUKKyAgICAgICAgdXJsID0gcmVxLmZ1bGxfdXJsCisKKyAgICAgICAgc2NoZW1lLCBkYXRhID0gdXJsLnNwbGl0KCI6IiwxKQorICAgICAgICBtZWRpYXR5cGUsIGRhdGEgPSBkYXRhLnNwbGl0KCIsIiwxKQorCisgICAgICAgICMgZXZlbiBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTHMgbWlnaHQgYmUgcXVvdGVkIHNvIHVucXVvdGUgaW4gYW55IGNhc2U6CisgICAgICAgIGRhdGEgPSB1bnF1b3RlX3RvX2J5dGVzKGRhdGEpCisgICAgICAgIGlmIG1lZGlhdHlwZS5lbmRzd2l0aCgiO2Jhc2U2NCIpOgorICAgICAgICAgICAgZGF0YSA9IGJhc2U2NC5kZWNvZGVieXRlcyhkYXRhKQorICAgICAgICAgICAgbWVkaWF0eXBlID0gbWVkaWF0eXBlWzotN10KKworICAgICAgICBpZiBub3QgbWVkaWF0eXBlOgorICAgICAgICAgICAgbWVkaWF0eXBlID0gInRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSIKKworICAgICAgICBoZWFkZXJzID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiQ29udGVudC10eXBlOiAlc1xuQ29udGVudC1sZW5ndGg6ICVkXG4iICUKKyAgICAgICAgICAgIChtZWRpYXR5cGUsIGxlbihkYXRhKSkpCisKKyAgICAgICAgcmV0dXJuIGFkZGluZm91cmwoaW8uQnl0ZXNJTyhkYXRhKSwgaGVhZGVycywgdXJsKQorCiAKICMgQ29kZSBtb3ZlIGZyb20gdGhlIG9sZCB1cmxsaWIgbW9kdWxlCiAKQEAgLTE2NTQsMjAgKzE2NzcsMjAgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBuYW1lKSh1cmwpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpKHVybCwgZGF0YSkKLSAgICAgICAgZXhjZXB0IEhUVFBFcnJvcjoKKyAgICAgICAgZXhjZXB0IChIVFRQRXJyb3IsIFVSTEVycm9yKToKICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKIAogICAgIGRlZiBvcGVuX3Vua25vd24oc2VsZiwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZS4iIiIKICAgICAgICAgdHlwZSwgdXJsID0gc3BsaXR0eXBlKGZ1bGx1cmwpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3VybCBlcnJvcicsICd1bmtub3duIHVybCB0eXBlJywgdHlwZSkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigndXJsIGVycm9yJywgJ3Vua25vd24gdXJsIHR5cGUnLCB0eXBlKQogCiAgICAgZGVmIG9wZW5fdW5rbm93bl9wcm94eShzZWxmLCBwcm94eSwgZnVsbHVybCwgZGF0YT1Ob25lKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZS4iIiIKICAgICAgICAgdHlwZSwgdXJsID0gc3BsaXR0eXBlKGZ1bGx1cmwpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoJ3VybCBlcnJvcicsICdpbnZhbGlkIHByb3h5IGZvciAlcycgJSB0eXBlLCBwcm94eSkKKyAgICAgICAgcmFpc2UgT1NFcnJvcigndXJsIGVycm9yJywgJ2ludmFsaWQgcHJveHkgZm9yICVzJyAlIHR5cGUsIHByb3h5KQogCiAgICAgIyBFeHRlcm5hbCBpbnRlcmZhY2UKICAgICBkZWYgcmV0cmlldmUoc2VsZiwgdXJsLCBmaWxlbmFtZT1Ob25lLCByZXBvcnRob29rPU5vbmUsIGRhdGE9Tm9uZSk6CkBAIC0xNjgzLDcgKzE3MDYsNyBAQAogICAgICAgICAgICAgICAgIGhkcnMgPSBmcC5pbmZvKCkKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHVybDJwYXRobmFtZShzcGxpdGhvc3QodXJsMSlbMV0pLCBoZHJzCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBmcCA9IHNlbGYub3Blbih1cmwsIGRhdGEpCiAgICAgICAgIHRyeToKQEAgLTE3NzYsNyArMTc5OSw3IEBACiAgICAgICAgICAgICAgICAgaWYgcHJveHlfYnlwYXNzKHJlYWxob3N0KToKICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHJlYWxob3N0CiAKLSAgICAgICAgaWYgbm90IGhvc3Q6IHJhaXNlIElPRXJyb3IoJ2h0dHAgZXJyb3InLCAnbm8gaG9zdCBnaXZlbicpCisgICAgICAgIGlmIG5vdCBob3N0OiByYWlzZSBPU0Vycm9yKCdodHRwIGVycm9yJywgJ25vIGhvc3QgZ2l2ZW4nKQogCiAgICAgICAgIGlmIHByb3h5X3Bhc3N3ZDoKICAgICAgICAgICAgIHByb3h5X3Bhc3N3ZCA9IHVucXVvdGUocHJveHlfcGFzc3dkKQpAQCAtMTg0OSw3ICsxODcyLDcgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuaHR0cF9lcnJvcl9kZWZhdWx0KHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycykKIAogICAgIGRlZiBodHRwX2Vycm9yX2RlZmF1bHQoc2VsZiwgdXJsLCBmcCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzKToKLSAgICAgICAgIiIiRGVmYXVsdCBlcnJvciBoYW5kbGVyOiBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2UgSU9FcnJvci4iIiIKKyAgICAgICAgIiIiRGVmYXVsdCBlcnJvciBoYW5kbGVyOiBjbG9zZSB0aGUgY29ubmVjdGlvbiBhbmQgcmFpc2UgT1NFcnJvci4iIiIKICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICByYWlzZSBIVFRQRXJyb3IodXJsLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMsIE5vbmUpCiAKQEAgLTE5NzYsNyArMTk5OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIFt0eXBlLCBkYXRhXSA9IHVybC5zcGxpdCgnLCcsIDEpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZGF0YSBlcnJvcicsICdiYWQgZGF0YSBVUkwnKQogICAgICAgICBpZiBub3QgdHlwZToKICAgICAgICAgICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJwogICAgICAgICBzZW1pID0gdHlwZS5yZmluZCgnOycpCkBAIC0yNDI1LDcgKzI0NDgsNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG9ubHkpCiAgICAgICAgICAgICAgICAgICAgIGhvc3RJUCA9IGlwMm51bShob3N0SVApCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgYmFzZSA9IGlwMm51bShtLmdyb3VwKDEpKQpAQCAtMjUxMSw3ICsyNTM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXNbJ2h0dHBzJ10gPSAnaHR0cHM6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snZnRwJ10gPSAnZnRwOi8vJXMnICUgcHJveHlTZXJ2ZXIKICAgICAgICAgICAgIGludGVybmV0U2V0dGluZ3MuQ2xvc2UoKQotICAgICAgICBleGNlcHQgKFdpbmRvd3NFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgIyBFaXRoZXIgcmVnaXN0cnkga2V5IG5vdCBmb3VuZCBldGMsIG9yIHRoZSB2YWx1ZSBpbiBhbgogICAgICAgICAgICAgIyB1bmV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgICAgICMgcHJveGllcyBhbHJlYWR5IHNldCB1cCB0byBiZSBlbXB0eSBzbyBub3RoaW5nIHRvIGRvCkBAIC0yNTQxLDcgKzI1NjQsNyBAQAogICAgICAgICAgICAgcHJveHlPdmVycmlkZSA9IHN0cih3aW5yZWcuUXVlcnlWYWx1ZUV4KGludGVybmV0U2V0dGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm94eU92ZXJyaWRlJylbMF0pCiAgICAgICAgICAgICAjIF5eXl4gUmV0dXJuZWQgYXMgVW5pY29kZSBidXQgcHJvYmxlbXMgaWYgbm90IGNvbnZlcnRlZCB0byBBU0NJSQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIGlmIG5vdCBwcm94eUVuYWJsZSBvciBub3QgcHJveHlPdmVycmlkZToKICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yNTUyLDEzICsyNTc1LDEzIEBACiAgICAgICAgICAgICBhZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGFkZHIgIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChhZGRyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnFkbiA9IHNvY2tldC5nZXRmcWRuKHJhd0hvc3QpCiAgICAgICAgICAgICBpZiBmcWRuICE9IHJhd0hvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdC5hcHBlbmQoZnFkbikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgbWFrZSBhIGNoZWNrIHZhbHVlIGxpc3QgZnJvbSB0aGUgcmVnaXN0cnkgZW50cnk6IHJlcGxhY2UgdGhlCiAgICAgICAgICMgJzxsb2NhbD4nIHN0cmluZyBieSB0aGUgbG9jYWxob3N0IGVudHJ5IGFuZCB0aGUgY29ycmVzcG9uZGluZwpkaWZmIC0tZ2l0IGEvTGliL3V1aWQucHkgYi9MaWIvdXVpZC5weQppbmRleCBkNWMzMTYwLi4zODVmYjliIDEwMDY0NAotLS0gYS9MaWIvdXVpZC5weQorKysgYi9MaWIvdXVpZC5weQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IDE2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2J5dGVzIGlzIG5vdCBhIDE2LWNoYXIgc3RyaW5nJykKICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ5dGVzLCBieXRlc18pLCByZXByKGJ5dGVzKQotICAgICAgICAgICAgaW50ID0gaW50XygoJyUwMngnKjE2KSAlIHR1cGxlKGJ5dGVzKSwgMTYpCisgICAgICAgICAgICBpbnQgPSBpbnRfLmZyb21fYnl0ZXMoYnl0ZXMsIGJ5dGVvcmRlcj0nYmlnJykKICAgICAgICAgaWYgZmllbGRzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gNjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmaWVsZHMgaXMgbm90IGEgNi10dXBsZScpCkBAIC0zMzcsNyArMzM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkYXNoZXMuIFRoZXNlIHNob3VsZCBiZSBpZ25vcmVkIGluIGZhdm9yIG9mIGEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZWFsIE1BQyBhZGRyZXNzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKICAgICByZXR1cm4gTm9uZQogCkBAIC0zNzksNyArMzc5LDcgQEAKICAgICBmb3IgZGlyIGluIGRpcnM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBpcGUgPSBvcy5wb3Blbihvcy5wYXRoLmpvaW4oZGlyLCAnaXBjb25maWcnKSArICcgL2FsbCcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBwaXBlOgpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvX19pbml0X18ucHkgYi9MaWIvdmVudi9fX2luaXRfXy5weQppbmRleCAzNjA2MzcwLi4zYjVmNWZhIDEwMDY0NAotLS0gYS9MaWIvdmVudi9fX2luaXRfXy5weQorKysgYi9MaWIvdmVudi9fX2luaXRfXy5weQpAQCAtMjQsMTAgKzI0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgIC0tdXBncmFkZSAgICAgICAgICAgICBVcGdyYWRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgdG8gdXNlIHRoaXMgdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgb2YgUHl0aG9uLCBhc3N1bWluZyBQeXRob24gaGFzIGJlZW4gdXBncmFkZWQgaW4tcGxhY2UuCisgIC0td2l0aG91dC1waXAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50IChwaXAgaXMgYm9vdHN0cmFwcGVkIGJ5IGRlZmF1bHQpCiAiIiIKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgdHlwZXMKQEAgLTU2LDE0ICs1OSwxNyBAQAogICAgIDpwYXJhbSBzeW1saW5rczogSWYgVHJ1ZSwgYXR0ZW1wdCB0byBzeW1saW5rIHJhdGhlciB0aGFuIGNvcHkgZmlsZXMgaW50bwogICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudC4KICAgICA6cGFyYW0gdXBncmFkZTogSWYgVHJ1ZSwgdXBncmFkZSBhbiBleGlzdGluZyB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgIDpwYXJhbSB3aXRoX3BpcDogSWYgVHJ1ZSwgZW5zdXJlIHBpcCBpcyBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50CiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLAotICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSk6CisgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSk6CiAgICAgICAgIHNlbGYuc3lzdGVtX3NpdGVfcGFja2FnZXMgPSBzeXN0ZW1fc2l0ZV9wYWNrYWdlcwogICAgICAgICBzZWxmLmNsZWFyID0gY2xlYXIKICAgICAgICAgc2VsZi5zeW1saW5rcyA9IHN5bWxpbmtzCiAgICAgICAgIHNlbGYudXBncmFkZSA9IHVwZ3JhZGUKKyAgICAgICAgc2VsZi53aXRoX3BpcCA9IHdpdGhfcGlwCiAKICAgICBkZWYgY3JlYXRlKHNlbGYsIGVudl9kaXIpOgogICAgICAgICAiIiIKQEAgLTc2LDEwICs4MiwyMCBAQAogICAgICAgICBjb250ZXh0ID0gc2VsZi5lbnN1cmVfZGlyZWN0b3JpZXMoZW52X2RpcikKICAgICAgICAgc2VsZi5jcmVhdGVfY29uZmlndXJhdGlvbihjb250ZXh0KQogICAgICAgICBzZWxmLnNldHVwX3B5dGhvbihjb250ZXh0KQorICAgICAgICBpZiBzZWxmLndpdGhfcGlwOgorICAgICAgICAgICAgc2VsZi5fc2V0dXBfcGlwKGNvbnRleHQpCiAgICAgICAgIGlmIG5vdCBzZWxmLnVwZ3JhZGU6CiAgICAgICAgICAgICBzZWxmLnNldHVwX3NjcmlwdHMoY29udGV4dCkKICAgICAgICAgICAgIHNlbGYucG9zdF9zZXR1cChjb250ZXh0KQogCisgICAgZGVmIGNsZWFyX2RpcmVjdG9yeShzZWxmLCBwYXRoKToKKyAgICAgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIocGF0aCk6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihwYXRoLCBmbikKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZuKSBvciBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZuKToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGZuKQorCiAgICAgZGVmIGVuc3VyZV9kaXJlY3RvcmllcyhzZWxmLCBlbnZfZGlyKToKICAgICAgICAgIiIiCiAgICAgICAgIENyZWF0ZSB0aGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBlbnZpcm9ubWVudC4KQEAgLTkxLDExICsxMDcsMTEgQEAKICAgICAgICAgZGVmIGNyZWF0ZV9pZl9uZWVkZWQoZCk6CiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZCk6CiAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnMoZCkKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2xpbmsoZCkgb3Igb3MucGF0aC5pc2ZpbGUoZCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJXInICUgZCkKIAotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhlbnZfZGlyKSBhbmQgbm90IChzZWxmLmNsZWFyIG9yIHNlbGYudXBncmFkZSk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdEaXJlY3RvcnkgZXhpc3RzOiAlcycgJSBlbnZfZGlyKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhlbnZfZGlyKSBhbmQgc2VsZi5jbGVhcjoKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZW52X2RpcikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfZGlyZWN0b3J5KGVudl9kaXIpCiAgICAgICAgIGNvbnRleHQgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKQogICAgICAgICBjb250ZXh0LmVudl9kaXIgPSBlbnZfZGlyCiAgICAgICAgIGNvbnRleHQuZW52X25hbWUgPSBvcy5wYXRoLnNwbGl0KGVudl9kaXIpWzFdCkBAIC0yMTYsNiArMjMyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShzcmMsIGRzdCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKIAorICAgIGRlZiBfc2V0dXBfcGlwKHNlbGYsIGNvbnRleHQpOgorICAgICAgICAiIiJJbnN0YWxscyBvciB1cGdyYWRlcyBwaXAgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IiIiCisgICAgICAgICMgV2UgcnVuIGVuc3VyZXBpcCBpbiBpc29sYXRlZCBtb2RlIHRvIGF2b2lkIHNpZGUgZWZmZWN0cyBmcm9tCisgICAgICAgICMgZW52aXJvbm1lbnQgdmFycywgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBhbnl0aGluZyBlbHNlCisgICAgICAgICMgaW50ZW5kZWQgZm9yIHRoZSBnbG9iYWwgUHl0aG9uIGVudmlyb25tZW50CisgICAgICAgIGNtZCA9IFtjb250ZXh0LmVudl9leGUsICctSW0nLCAnZW5zdXJlcGlwJywgJy0tdXBncmFkZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy0tZGVmYXVsdC1waXAnXQorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChjbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKwogICAgIGRlZiBzZXR1cF9zY3JpcHRzKHNlbGYsIGNvbnRleHQpOgogICAgICAgICAiIiIKICAgICAgICAgU2V0IHVwIHNjcmlwdHMgaW50byB0aGUgY3JlYXRlZCBlbnZpcm9ubWVudCBmcm9tIGEgZGlyZWN0b3J5LgpAQCAtMjUzLDcgKzI3OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBwcm9jZXNzZWQuCiAgICAgICAgICIiIgogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfRElSX18nLCBjb250ZXh0LmVudl9kaXIpCi0gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9OQU1FX18nLCBjb250ZXh0LnByb21wdCkKKyAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX05BTUVfXycsIGNvbnRleHQuZW52X25hbWUpCisgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9QUk9NUFRfXycsIGNvbnRleHQucHJvbXB0KQogICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfQklOX05BTUVfXycsIGNvbnRleHQuYmluX25hbWUpCiAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9QWVRIT05fXycsIGNvbnRleHQuZW52X2V4ZSkKICAgICAgICAgcmV0dXJuIHRleHQKQEAgLTMwOCw3ICszMzQsOCBAQAogICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weW1vZGUoc3JjZmlsZSwgZHN0ZmlsZSkKIAogCi1kZWYgY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpOgorZGVmIGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSk6CiAgICAgIiIiCiAgICAgQ3JlYXRlIGEgdmlydHVhbCBlbnZpcm9ubWVudCBpbiBhIGRpcmVjdG9yeS4KIApAQCAtMzI0LDkgKzM1MSwxMSBAQAogICAgICAgICAgICAgICAgICAgcmFpc2VkLgogICAgIDpwYXJhbSBzeW1saW5rczogSWYgVHJ1ZSwgYXR0ZW1wdCB0byBzeW1saW5rIHJhdGhlciB0aGFuIGNvcHkgZmlsZXMgaW50bwogICAgICAgICAgICAgICAgICAgICAgdmlydHVhbCBlbnZpcm9ubWVudC4KKyAgICA6cGFyYW0gd2l0aF9waXA6IElmIFRydWUsIGVuc3VyZSBwaXAgaXMgaW5zdGFsbGVkIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudAogICAgICIiIgogICAgIGJ1aWxkZXIgPSBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPXN5c3RlbV9zaXRlX3BhY2thZ2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1jbGVhciwgc3ltbGlua3M9c3ltbGlua3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9Y2xlYXIsIHN5bWxpbmtzPXN5bWxpbmtzLCB3aXRoX3BpcD13aXRoX3BpcCkKICAgICBidWlsZGVyLmNyZWF0ZShlbnZfZGlyKQogCiBkZWYgbWFpbihhcmdzPU5vbmUpOgpAQCAtMzYwLDI4ICszODksNDAgQEAKICAgICAgICAgICAgIHVzZV9zeW1saW5rcyA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB1c2Vfc3ltbGlua3MgPSBUcnVlCi0gICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3ltbGlua3MnLCBkZWZhdWx0PXVzZV9zeW1saW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdzeW1saW5rcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJ5IHRvIHVzZSBzeW1saW5rcyByYXRoZXIgdGhhbiBjb3BpZXMsICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHN5bWxpbmtzIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zeW1saW5rcycsIGRlZmF1bHQ9dXNlX3N5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0nc3ltbGlua3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJ5IHRvIHVzZSBzeW1saW5rcyByYXRoZXIgdGhhbiBjb3BpZXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gc3ltbGlua3MgYXJlIG5vdCB0aGUgZGVmYXVsdCBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1jb3BpZXMnLCBkZWZhdWx0PW5vdCB1c2Vfc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVzdD0nc3ltbGlua3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVHJ5IHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2ZW4gd2hlbiBzeW1saW5rcyBhcmUgdGhlIGRlZmF1bHQgZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWNsZWFyJywgZGVmYXVsdD1GYWxzZSwgYWN0aW9uPSdzdG9yZV90cnVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjbGVhcicsIGhlbHA9J0RlbGV0ZSB0aGUgZW52aXJvbm1lbnQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyZWN0b3J5IGlmIGl0IGFscmVhZHkgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhpc3RzLiBJZiBub3Qgc3BlY2lmaWVkIGFuZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgZGlyZWN0b3J5IGV4aXN0cywgYW4gZXJyb3InCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgcmFpc2VkLicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY2xlYXInLCBoZWxwPSdEZWxldGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbnZpcm9ubWVudCBkaXJlY3RvcnkgaWYgaXQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxyZWFkeSBleGlzdHMsIGJlZm9yZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbnZpcm9ubWVudCBjcmVhdGlvbi4nKQogICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXVwZ3JhZGUnLCBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VwZ3JhZGUnLCBoZWxwPSdVcGdyYWRlIHRoZSBlbnZpcm9ubWVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gdXNlIHRoaXMgdmVyc2lvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZiBQeXRob24sIGFzc3VtaW5nIFB5dGhvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgYmVlbiB1cGdyYWRlZCBpbi1wbGFjZS4nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXdpdGhvdXQtcGlwJywgZGVzdD0nd2l0aF9waXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9VHJ1ZSwgYWN0aW9uPSdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlydHVhbCBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnkgZGVmYXVsdCknKQogICAgICAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJncykKICAgICAgICAgaWYgb3B0aW9ucy51cGdyYWRlIGFuZCBvcHRpb25zLmNsZWFyOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigneW91IGNhbm5vdCBzdXBwbHkgLS11cGdyYWRlIGFuZCAtLWNsZWFyIHRvZ2V0aGVyLicpCiAgICAgICAgIGJ1aWxkZXIgPSBFbnZCdWlsZGVyKHN5c3RlbV9zaXRlX3BhY2thZ2VzPW9wdGlvbnMuc3lzdGVtX3NpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPW9wdGlvbnMuY2xlYXIsIHN5bWxpbmtzPW9wdGlvbnMuc3ltbGlua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGU9b3B0aW9ucy51cGdyYWRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1vcHRpb25zLmNsZWFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1vcHRpb25zLnN5bWxpbmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlPW9wdGlvbnMudXBncmFkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aF9waXA9b3B0aW9ucy53aXRoX3BpcCkKICAgICAgICAgZm9yIGQgaW4gb3B0aW9ucy5kaXJzOgogICAgICAgICAgICAgYnVpbGRlci5jcmVhdGUoZCkKIApkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9udC9BY3RpdmF0ZS5wczEgYi9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMQppbmRleCAxYzVlZjk4Li5iMTVkZWNiIDEwMDY0NAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMQorKysgYi9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMQpAQCAtMSwyNSArMSw0MCBAQAorZnVuY3Rpb24gZ2xvYmFsOmRlYWN0aXZhdGUgKFtzd2l0Y2hdJE5vbkRlc3RydWN0aXZlKSB7DQorICAgICMgUmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlcw0KKyAgICBpZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCisgICAgICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FIGVudjpQWVRIT05IT01FDQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCkgew0KKyAgICAgICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6VklSVFVBTF9FTlYpIHsNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpWSVJUVUFMX0VOVg0KKyAgICB9DQorDQorICAgIGlmICghJE5vbkRlc3RydWN0aXZlKSB7DQorICAgICAgICAjIFNlbGYgZGVzdHJ1Y3QhDQorICAgICAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpkZWFjdGl2YXRlDQorICAgIH0NCit9DQorDQorZGVhY3RpdmF0ZSAtbm9uZGVzdHJ1Y3RpdmUNCisKICRlbnY6VklSVFVBTF9FTlY9Il9fVkVOVl9ESVJfXyINCiANCi0jIFJldmVydCB0byBvcmlnaW5hbCB2YWx1ZXMNCi1pZiAoVGVzdC1QYXRoIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQpIHsNCi0gICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQotICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSBlbnY6UFlUSE9OSE9NRQ0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUNCi19DQotDQotaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BBVEgpIHsNCi0gICAgY29weS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCBlbnY6UEFUSA0KLSAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCi19DQotDQogIyBTZXQgdGhlIHByb21wdCB0byBpbmNsdWRlIHRoZSBlbnYgbmFtZQ0KKyMgTWFrZSBzdXJlIF9PTERfVklSVFVBTF9QUk9NUFQgaXMgZ2xvYmFsDQorZnVuY3Rpb24gZ2xvYmFsOl9PTERfVklSVFVBTF9QUk9NUFQgeyIifQ0KIGNvcHktaXRlbSBmdW5jdGlvbjpwcm9tcHQgZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KLWZ1bmN0aW9uIHByb21wdCB7DQotICAgIFdyaXRlLUhvc3QgLU5vTmV3bGluZSAtRm9yZWdyb3VuZENvbG9yIEdyZWVuICdbX19WRU5WX05BTUVfX10nDQorZnVuY3Rpb24gZ2xvYmFsOnByb21wdCB7DQorICAgIFdyaXRlLUhvc3QgLU5vTmV3bGluZSAtRm9yZWdyb3VuZENvbG9yIEdyZWVuICdfX1ZFTlZfUFJPTVBUX18nDQogICAgIF9PTERfVklSVFVBTF9QUk9NUFQNCiB9DQogDQpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9udC9EZWFjdGl2YXRlLnBzMSBiL0xpYi92ZW52L3NjcmlwdHMvbnQvRGVhY3RpdmF0ZS5wczEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMWU5NmIuLjAwMDAwMDAKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9udC9EZWFjdGl2YXRlLnBzMQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgUmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlcw0KLWlmIChUZXN0LVBhdGggZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCkgew0KLSAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCi0gICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FIGVudjpQWVRIT05IT01FDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQ0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIIGVudjpQQVRIDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpWSVJUVUFMX0VOVikgew0KLSAgICByZW1vdmUtaXRlbSBlbnY6VklSVFVBTF9FTlYNCi19DQpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9udC9hY3RpdmF0ZS5iYXQgYi9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdAppbmRleCAzY2ViZTI2Li45ZWFiMTQ3IDEwMDY0NAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdAorKysgYi9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdApAQCAtMTQsNyArMTQsNyBAQAogKQ0KIA0KIHNldCAiX09MRF9WSVJUVUFMX1BST01QVD0lUFJPTVBUJSINCi1zZXQgIlBST01QVD1fX1ZFTlZfTkFNRV9fJVBST01QVCUiDQorc2V0ICJQUk9NUFQ9X19WRU5WX1BST01QVF9fJVBST01QVCUiDQogDQogaWYgZGVmaW5lZCBQWVRIT05IT01FICgNCiAgICAgc2V0ICJfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRT0lUFlUSE9OSE9NRSUiDQpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZSBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKaW5kZXggYzI0MTQ1MC4uN2JiZmZkOSAxMDA2NDQKLS0tIGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCkBAIC01NCw4ICs1NCw4IEBACiAKIGlmIFsgLXogIiRWSVJUVUFMX0VOVl9ESVNBQkxFX1BST01QVCIgXSA7IHRoZW4KICAgICBfT0xEX1ZJUlRVQUxfUFMxPSIkUFMxIgotICAgIGlmIFsgInhfX1ZFTlZfTkFNRV9fIiAhPSB4IF0gOyB0aGVuCi0JUFMxPSJfX1ZFTlZfTkFNRV9fJFBTMSIKKyAgICBpZiBbICJ4X19WRU5WX1BST01QVF9fIiAhPSB4IF0gOyB0aGVuCisJUFMxPSJfX1ZFTlZfUFJPTVBUX18kUFMxIgogICAgIGVsc2UKICAgICBpZiBbICJgYmFzZW5hbWUgXCIkVklSVFVBTF9FTlZcImAiID0gIl9fIiBdIDsgdGhlbgogICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgQXNwZW4gbWFnaWMgZGlyZWN0b3JpZXMKZGlmZiAtLWdpdCBhL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5jc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlkNzllMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuY3NoCkBAIC0wLDAgKzEsMzcgQEAKKyMgVGhpcyBmaWxlIG11c3QgYmUgdXNlZCB3aXRoICJzb3VyY2UgYmluL2FjdGl2YXRlLmNzaCIgKmZyb20gY3NoKi4KKyMgWW91IGNhbm5vdCBydW4gaXQgZGlyZWN0bHkuCisjIENyZWF0ZWQgYnkgRGF2aWRlIERpIEJsYXNpIDxkYXZpZGVkYkBnbWFpbC5jb20+LgorIyBQb3J0ZWQgdG8gUHl0aG9uIDMuMyB2ZW52IGJ5IEFuZHJldyBTdmV0bG92IDxhbmRyZXcuc3ZldGxvdkBnbWFpbC5jb20+CisKK2FsaWFzIGRlYWN0aXZhdGUgJ3Rlc3QgJD9fT0xEX1ZJUlRVQUxfUEFUSCAhPSAwICYmIHNldGVudiBQQVRIICIkX09MRF9WSVJUVUFMX1BBVEgiICYmIHVuc2V0IF9PTERfVklSVFVBTF9QQVRIOyByZWhhc2g7IHRlc3QgJD9fT0xEX1ZJUlRVQUxfUFJPTVBUICE9IDAgJiYgc2V0IHByb21wdD0iJF9PTERfVklSVFVBTF9QUk9NUFQiICYmIHVuc2V0IF9PTERfVklSVFVBTF9QUk9NUFQ7IHVuc2V0ZW52IFZJUlRVQUxfRU5WOyB0ZXN0ICJcIToqIiAhPSAibm9uZGVzdHJ1Y3RpdmUiICYmIHVuYWxpYXMgZGVhY3RpdmF0ZScKKworIyBVbnNldCBpcnJlbGF2ZW50IHZhcmlhYmxlcy4KK2RlYWN0aXZhdGUgbm9uZGVzdHJ1Y3RpdmUKKworc2V0ZW52IFZJUlRVQUxfRU5WICJfX1ZFTlZfRElSX18iCisKK3NldCBfT0xEX1ZJUlRVQUxfUEFUSD0iJFBBVEgiCitzZXRlbnYgUEFUSCAiJFZJUlRVQUxfRU5WL19fVkVOVl9CSU5fTkFNRV9fOiRQQVRIIgorCisKK3NldCBfT0xEX1ZJUlRVQUxfUFJPTVBUPSIkcHJvbXB0IgorCitpZiAoISAiJD9WSVJUVUFMX0VOVl9ESVNBQkxFX1BST01QVCIpIHRoZW4KKyAgICBpZiAoIl9fVkVOVl9OQU1FX18iICE9ICIiKSB0aGVuCisgICAgICAgIHNldCBlbnZfbmFtZSA9ICJfX1ZFTlZfTkFNRV9fIgorICAgIGVsc2UKKyAgICAgICAgaWYgKGBiYXNlbmFtZSAiVklSVFVBTF9FTlYiYCA9PSAiX18iKSB0aGVuCisgICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgQXNwZW4gbWFnaWMgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly93d3cuemV0YWRldi5jb20vc29mdHdhcmUvYXNwZW4vCisgICAgICAgICAgICBzZXQgZW52X25hbWUgPSBgYmFzZW5hbWUgXGBkaXJuYW1lICIkVklSVFVBTF9FTlYiXGBgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldCBlbnZfbmFtZSA9IGBiYXNlbmFtZSAiJFZJUlRVQUxfRU5WImAKKyAgICAgICAgZW5kaWYKKyAgICBlbmRpZgorICAgIHNldCBwcm9tcHQgPSAiWyRlbnZfbmFtZV0gJHByb21wdCIKKyAgICB1bnNldCBlbnZfbmFtZQorZW5kaWYKKworYWxpYXMgcHlkb2MgcHl0aG9uIC1tIHB5ZG9jCisKK3JlaGFzaApkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5maXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MzkxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmZpc2gKQEAgLTAsMCArMSw3NCBAQAorIyBUaGlzIGZpbGUgbXVzdCBiZSB1c2VkIHdpdGggIi4gYmluL2FjdGl2YXRlLmZpc2giICpmcm9tIGZpc2gqIChodHRwOi8vZmlzaHNoZWxsLm9yZykKKyMgeW91IGNhbm5vdCBydW4gaXQgZGlyZWN0bHkKKworZnVuY3Rpb24gZGVhY3RpdmF0ZSAgLWQgIkV4aXQgdmlydHVhbGVudiBhbmQgcmV0dXJuIHRvIG5vcm1hbCBzaGVsbCBlbnZpcm9ubWVudCIKKyAgICAjIHJlc2V0IG9sZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICBpZiB0ZXN0IC1uICIkX09MRF9WSVJUVUFMX1BBVEgiCisgICAgICAgIHNldCAtZ3ggUEFUSCAkX09MRF9WSVJUVUFMX1BBVEgKKyAgICAgICAgc2V0IC1lIF9PTERfVklSVFVBTF9QQVRICisgICAgZW5kCisgICAgaWYgdGVzdCAtbiAiJF9PTERfVklSVFVBTF9QWVRIT05IT01FIgorICAgICAgICBzZXQgLWd4IFBZVEhPTkhPTUUgJF9PTERfVklSVFVBTF9QWVRIT05IT01FCisgICAgICAgIHNldCAtZSBfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQorICAgIGVuZAorCisgICAgaWYgdGVzdCAtbiAiJF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUiCisgICAgICAgIGZ1bmN0aW9ucyAtZSBmaXNoX3Byb21wdAorICAgICAgICBzZXQgLWUgX09MRF9GSVNIX1BST01QVF9PVkVSUklERQorICAgICAgICAuICggYmVnaW4KKyAgICAgICAgICAgICAgICBwcmludGYgImZ1bmN0aW9uIGZpc2hfcHJvbXB0XG5cdCMiCisgICAgICAgICAgICAgICAgZnVuY3Rpb25zIF9vbGRfZmlzaF9wcm9tcHQKKyAgICAgICAgICAgIGVuZCB8IHBzdWIgKQorICAgICAgICBmdW5jdGlvbnMgLWUgX29sZF9maXNoX3Byb21wdAorICAgIGVuZAorCisgICAgc2V0IC1lIFZJUlRVQUxfRU5WCisgICAgaWYgdGVzdCAiJGFyZ3ZbMV0iICE9ICJub25kZXN0cnVjdGl2ZSIKKyAgICAgICAgIyBTZWxmIGRlc3RydWN0IQorICAgICAgICBmdW5jdGlvbnMgLWUgZGVhY3RpdmF0ZQorICAgIGVuZAorZW5kCisKKyMgdW5zZXQgaXJyZWxhdmVudCB2YXJpYWJsZXMKK2RlYWN0aXZhdGUgbm9uZGVzdHJ1Y3RpdmUKKworc2V0IC1neCBWSVJUVUFMX0VOViAiX19WRU5WX0RJUl9fIgorCitzZXQgLWd4IF9PTERfVklSVFVBTF9QQVRIICRQQVRICitzZXQgLWd4IFBBVEggIiRWSVJUVUFMX0VOVi9fX1ZFTlZfQklOX05BTUVfXyIgJFBBVEgKKworIyB1bnNldCBQWVRIT05IT01FIGlmIHNldAoraWYgc2V0IC1xIFBZVEhPTkhPTUUKKyAgICBzZXQgLWd4IF9PTERfVklSVFVBTF9QWVRIT05IT01FICRQWVRIT05IT01FCisgICAgc2V0IC1lIFBZVEhPTkhPTUUKK2VuZAorCitpZiB0ZXN0IC16ICIkVklSVFVBTF9FTlZfRElTQUJMRV9QUk9NUFQiCisgICAgIyBmaXNoIHVzZXMgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGFuIGVudiB2YXIgdG8gZ2VuZXJhdGUgdGhlIHByb21wdC4KKworICAgICMgc2F2ZSB0aGUgY3VycmVudCBmaXNoX3Byb21wdCBmdW5jdGlvbiBhcyB0aGUgZnVuY3Rpb24gX29sZF9maXNoX3Byb21wdAorICAgIC4gKCBiZWdpbgorICAgICAgICAgICAgcHJpbnRmICJmdW5jdGlvbiBfb2xkX2Zpc2hfcHJvbXB0XG5cdCMiCisgICAgICAgICAgICBmdW5jdGlvbnMgZmlzaF9wcm9tcHQKKyAgICAgICAgZW5kIHwgcHN1YiApCisKKyAgICAjIHdpdGggdGhlIG9yaWdpbmFsIHByb21wdCBmdW5jdGlvbiByZW5hbWVkLCB3ZSBjYW4gb3ZlcnJpZGUgd2l0aCBvdXIgb3duLgorICAgIGZ1bmN0aW9uIGZpc2hfcHJvbXB0CisgICAgICAgICMgUHJvbXB0IG92ZXJyaWRlPworICAgICAgICBpZiB0ZXN0IC1uICJfX1ZFTlZfUFJPTVBUX18iCisgICAgICAgICAgICBwcmludGYgIiVzJXMlcyIgIl9fVkVOVl9QUk9NUFRfXyIgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVuZAorICAgICAgICAjIC4uLk90aGVyd2lzZSwgcHJlcGVuZCBlbnYKKyAgICAgICAgc2V0IC1sIF9jaGVja2Jhc2UgKGJhc2VuYW1lICIkVklSVFVBTF9FTlYiKQorICAgICAgICBpZiB0ZXN0ICRfY2hlY2tiYXNlID0gIl9fIgorICAgICAgICAgICAgIyBzcGVjaWFsIGNhc2UgZm9yIEFzcGVuIG1hZ2ljIGRpcmVjdG9yaWVzCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnpldGFkZXYuY29tL3NvZnR3YXJlL2FzcGVuLworICAgICAgICAgICAgcHJpbnRmICIlc1slc10lcyAlcyIgKHNldF9jb2xvciAtYiBibHVlIHdoaXRlKSAoYmFzZW5hbWUgKGRpcm5hbWUgIiRWSVJUVUFMX0VOViIpKSAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByaW50ZiAiJXMoJXMpJXMlcyIgKHNldF9jb2xvciAtYiBibHVlIHdoaXRlKSAoYmFzZW5hbWUgIiRWSVJUVUFMX0VOViIpIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBzZXQgLWd4IF9PTERfRklTSF9QUk9NUFRfT1ZFUlJJREUgIiRWSVJUVUFMX0VOViIKK2VuZApkaWZmIC0tZ2l0IGEvTGliL3dhcm5pbmdzLnB5IGIvTGliL3dhcm5pbmdzLnB5CmluZGV4IGVkYmJiNWUuLmE0MjdlMzUgMTAwNjQ0Ci0tLSBhL0xpYi93YXJuaW5ncy5weQorKysgYi9MaWIvd2FybmluZ3MucHkKQEAgLTEsOSArMSw1IEBACiAiIiJQeXRob24gcGFydCBvZiB0aGUgd2FybmluZ3Mgc3Vic3lzdGVtLiIiIgogCi0jIE5vdGU6IGZ1bmN0aW9uIGxldmVsIGltcG9ydHMgc2hvdWxkICpub3QqIGJlIHVzZWQKLSMgaW4gdGhpcyBtb2R1bGUgYXMgaXQgbWF5IGNhdXNlIGltcG9ydCBsb2NrIGRlYWRsb2NrLgotIyBTZWUgYnVnIDY4MzY1OC4KLWltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBzeXMKIAogX19hbGxfXyA9IFsid2FybiIsICJzaG93d2FybmluZyIsICJmb3JtYXR3YXJuaW5nIiwgImZpbHRlcndhcm5pbmdzIiwKQEAgLTE2LDExICsxMiwxMiBAQAogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgogICAgIHRyeToKICAgICAgICAgZmlsZS53cml0ZShmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lKSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIHRoZSBmaWxlIChwcm9iYWJseSBzdGRlcnIpIGlzIGludmFsaWQgLSB0aGlzIHdhcm5pbmcgZ2V0cyBsb3N0LgogCiBkZWYgZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZT1Ob25lKToKICAgICAiIiJGdW5jdGlvbiB0byBmb3JtYXQgYSB3YXJuaW5nIHRoZSBzdGFuZGFyZCB3YXkuIiIiCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIHMgPSAgIiVzOiVzOiAlczogJXNcbiIgJSAoZmlsZW5hbWUsIGxpbmVubywgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCiAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pIGlmIGxpbmUgaXMgTm9uZSBlbHNlIGxpbmUKICAgICBpZiBsaW5lOgpAQCAtMjMzLDYgKzIzMCw3IEBACiAKICAgICAjIFByaW1lIHRoZSBsaW5lY2FjaGUgZm9yIGZvcm1hdHRpbmcsIGluIGNhc2UgdGhlCiAgICAgIyAiZmlsZSIgaXMgYWN0dWFsbHkgaW4gYSB6aXBmaWxlIG9yIHNvbWV0aGluZy4KKyAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgbGluZWNhY2hlLmdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscykKIAogICAgIGlmIGFjdGlvbiA9PSAiZXJyb3IiOgpkaWZmIC0tZ2l0IGEvTGliL3dhdmUucHkgYi9MaWIvd2F2ZS5weQppbmRleCA0YTIyMzQ1Li5iNTYzOTVlIDEwMDY0NAotLS0gYS9MaWIvd2F2ZS5weQorKysgYi9MaWIvd2F2ZS5weQpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBsaW5lYXIgc2FtcGxlcykKICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIGxpbmVhciBzYW1wbGVzKQotICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgIGdldG1hcmtlcnMoKSAgICAtLSByZXR1cm5zIE5vbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC04MiwxNSArODIsMTQgQEAKIAogX2FycmF5X2ZtdHMgPSBOb25lLCAnYicsICdoJywgTm9uZSwgJ2knCiAKK2ltcG9ydCBhdWRpb29wCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBmcm9tIGNodW5rIGltcG9ydCBDaHVuaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQogCi1kZWYgX2J5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCitfd2F2ZV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfd2F2ZV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQogCiBjbGFzcyBXYXZlX3JlYWQ6CiAgICAgIiIiVmFyaWFibGVzIHVzZWQgaW4gdGhpcyBjbGFzczoKQEAgLTE2OSw2ICsxNjgsMTMgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTIwNyw5ICsyMTMsOSBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY29tcG5hbWUKIAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLCBcCi0gICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIzMiwyOSArMjM4LDkgQEAKICAgICAgICAgICAgIHNlbGYuX2RhdGFfc2Vla19uZWVkZWQgPSAwCiAgICAgICAgIGlmIG5mcmFtZXMgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiJycKLSAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoIGluICgyLCA0KSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICMgdW5mb3J0dW5hdGVseSB0aGUgZnJvbWZpbGUoKSBtZXRob2QgZG9lcyBub3QgdGFrZQotICAgICAgICAgICAgIyBzb21ldGhpbmcgdGhhdCBvbmx5IGxvb2tzIGxpa2UgYSBmaWxlIG9iamVjdCwgc28KLSAgICAgICAgICAgICMgd2UgaGF2ZSB0byByZWFjaCBpbnRvIHRoZSBpbm5hcmRzIG9mIHRoZSBjaHVuayBvYmplY3QKLSAgICAgICAgICAgIGltcG9ydCBhcnJheQotICAgICAgICAgICAgY2h1bmsgPSBzZWxmLl9kYXRhX2NodW5rCi0gICAgICAgICAgICBkYXRhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSkKLSAgICAgICAgICAgIGFzc2VydCBkYXRhLml0ZW1zaXplID09IHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgbml0ZW1zID0gbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscwotICAgICAgICAgICAgaWYgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoID4gY2h1bmsuY2h1bmtzaXplIC0gY2h1bmsuc2l6ZV9yZWFkOgotICAgICAgICAgICAgICAgIG5pdGVtcyA9IChjaHVuay5jaHVua3NpemUgLSBjaHVuay5zaXplX3JlYWQpIC8vIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgZGF0YS5mcm9tZmlsZShjaHVuay5maWxlLmZpbGUsIG5pdGVtcykKLSAgICAgICAgICAgICMgInRlbGwiIGRhdGEgY2h1bmsgaG93IG11Y2ggd2FzIHJlYWQKLSAgICAgICAgICAgIGNodW5rLnNpemVfcmVhZCA9IGNodW5rLnNpemVfcmVhZCArIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICAgICAgIyBkbyB0aGUgc2FtZSBmb3IgdGhlIG91dGVybW9zdCBjaHVuawotICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5maWxlCi0gICAgICAgICAgICBjaHVuay5zaXplX3JlYWQgPSBjaHVuay5zaXplX3JlYWQgKyBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCi0gICAgICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPT0gMyBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICAgICBkYXRhID0gX2J5dGVzd2FwMyhkYXRhKQorICAgICAgICBkYXRhID0gc2VsZi5fZGF0YV9jaHVuay5yZWFkKG5mcmFtZXMgKiBzZWxmLl9mcmFtZXNpemUpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0IGFuZCBkYXRhOgogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2NvbnZlcnQoZGF0YSkKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSBzZWxmLl9zb3VuZHBvcyArIGxlbihkYXRhKSAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQpAQCAtMzI4LDYgKzMxNCwxMiBAQAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTQwMiw4ICszOTQsOCBAQAogICAgIGRlZiBnZXRwYXJhbXMoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9uY2hhbm5lbHMgb3Igbm90IHNlbGYuX3NhbXB3aWR0aCBvciBub3Qgc2VsZi5fZnJhbWVyYXRlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ25vdCBhbGwgcGFyYW1ldGVycyBzZXQnKQotICAgICAgICByZXR1cm4gc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwgXAotICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUKKyAgICAgICAgcmV0dXJuIF93YXZlX3BhcmFtcyhzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLAorICAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzLCBzZWxmLl9jb21wdHlwZSwgc2VsZi5fY29tcG5hbWUpCiAKICAgICBkZWYgc2V0bWFyayhzZWxmLCBpZCwgcG9zLCBuYW1lKToKICAgICAgICAgcmFpc2UgRXJyb3IoJ3NldG1hcmsoKSBub3Qgc3VwcG9ydGVkJykKQEAgLTQxOCwyNCArNDEwLDE2IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbihsZW4oZGF0YSkpCiAgICAgICAgIG5mcmFtZXMgPSBsZW4oZGF0YSkgLy8gKHNlbGYuX3NhbXB3aWR0aCAqIHNlbGYuX25jaGFubmVscykKICAgICAgICAgaWYgc2VsZi5fY29udmVydDoKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb252ZXJ0KGRhdGEpCi0gICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCBpbiAoMiwgNCkgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShfYXJyYXlfZm10c1tzZWxmLl9zYW1wd2lkdGhdKQotICAgICAgICAgICAgYS5mcm9tYnl0ZXMoZGF0YSkKLSAgICAgICAgICAgIGRhdGEgPSBhCi0gICAgICAgICAgICBhc3NlcnQgZGF0YS5pdGVtc2l6ZSA9PSBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuYnl0ZXN3YXAoKQotICAgICAgICAgICAgZGF0YS50b2ZpbGUoc2VsZi5fZmlsZSkKLSAgICAgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuID0gc2VsZi5fZGF0YXdyaXR0ZW4gKyBsZW4oZGF0YSkgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCA9PSAzIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgICAgIGRhdGEgPSBfYnl0ZXN3YXAzKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCi0gICAgICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IHNlbGYuX2RhdGF3cml0dGVuICsgbGVuKGRhdGEpCisgICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCAhPSAxIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgorICAgICAgICAgICAgZGF0YSA9IGF1ZGlvb3AuYnl0ZXN3YXAoZGF0YSwgc2VsZi5fc2FtcHdpZHRoKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuX2RhdGF3cml0dGVuICs9IGxlbihkYXRhKQogICAgICAgICBzZWxmLl9uZnJhbWVzd3JpdHRlbiA9IHNlbGYuX25mcmFtZXN3cml0dGVuICsgbmZyYW1lcwogCiAgICAgZGVmIHdyaXRlZnJhbWVzKHNlbGYsIGRhdGEpOgpAQCAtNDc2LDE0ICs0NjAsMTggQEAKICAgICAgICAgaWYgbm90IHNlbGYuX25mcmFtZXM6CiAgICAgICAgICAgICBzZWxmLl9uZnJhbWVzID0gaW5pdGxlbmd0aCAvLyAoc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoKQogICAgICAgICBzZWxmLl9kYXRhbGVuZ3RoID0gc2VsZi5fbmZyYW1lcyAqIHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aAotICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9mb3JtX2xlbmd0aF9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IE5vbmUKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHJ1Y3QucGFjaygnPEw0czRzTEhITExISDRzJywKICAgICAgICAgICAgIDM2ICsgc2VsZi5fZGF0YWxlbmd0aCwgYidXQVZFJywgYidmbXQgJywgMTYsCiAgICAgICAgICAgICBXQVZFX0ZPUk1BVF9QQ00sIHNlbGYuX25jaGFubmVscywgc2VsZi5fZnJhbWVyYXRlLAogICAgICAgICAgICAgc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fZnJhbWVyYXRlICogc2VsZi5fc2FtcHdpZHRoLAogICAgICAgICAgICAgc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoLAogICAgICAgICAgICAgc2VsZi5fc2FtcHdpZHRoICogOCwgYidkYXRhJykpCi0gICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIGlmIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxMJywgc2VsZi5fZGF0YWxlbmd0aCkpCiAgICAgICAgIHNlbGYuX2hlYWRlcndyaXR0ZW4gPSBUcnVlCiAKZGlmZiAtLWdpdCBhL0xpYi93ZWFrcmVmLnB5IGIvTGliL3dlYWtyZWYucHkKaW5kZXggZmNiNmI3NC4uZjZhNDBjYSAxMDA2NDQKLS0tIGEvTGliL3dlYWtyZWYucHkKKysrIGIvTGliL3dlYWtyZWYucHkKQEAgLTIxLDEzICsyMSw2OSBAQAogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldCwgX0l0ZXJhdGlvbkd1YXJkCiAKIGltcG9ydCBjb2xsZWN0aW9ucyAgIyBJbXBvcnQgYWZ0ZXIgX3dlYWtyZWYgdG8gYXZvaWQgY2lyY3VsYXIgaW1wb3J0LgoraW1wb3J0IHN5cworaW1wb3J0IGl0ZXJ0b29scwogCiBQcm94eVR5cGVzID0gKFByb3h5VHlwZSwgQ2FsbGFibGVQcm94eVR5cGUpCiAKIF9fYWxsX18gPSBbInJlZiIsICJwcm94eSIsICJnZXR3ZWFrcmVmY291bnQiLCAiZ2V0d2Vha3JlZnMiLAogICAgICAgICAgICAiV2Vha0tleURpY3Rpb25hcnkiLCAiUmVmZXJlbmNlVHlwZSIsICJQcm94eVR5cGUiLAogICAgICAgICAgICAiQ2FsbGFibGVQcm94eVR5cGUiLCAiUHJveHlUeXBlcyIsICJXZWFrVmFsdWVEaWN0aW9uYXJ5IiwKLSAgICAgICAgICAgIldlYWtTZXQiXQorICAgICAgICAgICAiV2Vha1NldCIsICJXZWFrTWV0aG9kIiwgImZpbmFsaXplIl0KKworCitjbGFzcyBXZWFrTWV0aG9kKHJlZik6CisgICAgIiIiCisgICAgQSBjdXN0b20gYHdlYWtyZWYucmVmYCBzdWJjbGFzcyB3aGljaCBzaW11bGF0ZXMgYSB3ZWFrIHJlZmVyZW5jZSB0bworICAgIGEgYm91bmQgbWV0aG9kLCB3b3JraW5nIGFyb3VuZCB0aGUgbGlmZXRpbWUgcHJvYmxlbSBvZiBib3VuZCBtZXRob2RzLgorICAgICIiIgorCisgICAgX19zbG90c19fID0gIl9mdW5jX3JlZiIsICJfbWV0aF90eXBlIiwgIl9hbGl2ZSIsICJfX3dlYWtyZWZfXyIKKworICAgIGRlZiBfX25ld19fKGNscywgbWV0aCwgY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IG1ldGguX19zZWxmX18KKyAgICAgICAgICAgIGZ1bmMgPSBtZXRoLl9fZnVuY19fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYm91bmQgbWV0aG9kLCBub3Qge30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKG1ldGgpKSkgZnJvbSBOb25lCisgICAgICAgIGRlZiBfY2IoYXJnKToKKyAgICAgICAgICAgICMgVGhlIHNlbGYtd2Vha3JlZiB0cmljayBpcyBuZWVkZWQgdG8gYXZvaWQgY3JlYXRpbmcgYSByZWZlcmVuY2UKKyAgICAgICAgICAgICMgY3ljbGUuCisgICAgICAgICAgICBzZWxmID0gc2VsZl93cigpCisgICAgICAgICAgICBpZiBzZWxmLl9hbGl2ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHNlbGYpCisgICAgICAgIHNlbGYgPSByZWYuX19uZXdfXyhjbHMsIG9iaiwgX2NiKQorICAgICAgICBzZWxmLl9mdW5jX3JlZiA9IHJlZihmdW5jLCBfY2IpCisgICAgICAgIHNlbGYuX21ldGhfdHlwZSA9IHR5cGUobWV0aCkKKyAgICAgICAgc2VsZi5fYWxpdmUgPSBUcnVlCisgICAgICAgIHNlbGZfd3IgPSByZWYoc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgb2JqID0gc3VwZXIoKS5fX2NhbGxfXygpCisgICAgICAgIGZ1bmMgPSBzZWxmLl9mdW5jX3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBOb25lIG9yIGZ1bmMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9tZXRoX3R5cGUoZnVuYywgb2JqKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFdlYWtNZXRob2QpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsaXZlIG9yIG5vdCBvdGhlci5fYWxpdmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKyAgICAgICAgICAgIHJldHVybiByZWYuX19lcV9fKHNlbGYsIG90aGVyKSBhbmQgc2VsZi5fZnVuY19yZWYgPT0gb3RoZXIuX2Z1bmNfcmVmCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIFdlYWtNZXRob2QpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsaXZlIG9yIG5vdCBvdGhlci5fYWxpdmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYgaXMgbm90IG90aGVyCisgICAgICAgICAgICByZXR1cm4gcmVmLl9fbmVfXyhzZWxmLCBvdGhlcikgb3Igc2VsZi5fZnVuY19yZWYgIT0gb3RoZXIuX2Z1bmNfcmVmCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBfX2hhc2hfXyA9IHJlZi5fX2hhc2hfXwogCiAKIGNsYXNzIFdlYWtWYWx1ZURpY3Rpb25hcnkoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgpAQCAtMTUzLDggKzIwOSw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgotICAgICAgICAgICAgZm9yIHdyIGluIHNlbGYuZGF0YS52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB3cgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmRhdGEudmFsdWVzKCkKIAogICAgIGRlZiB2YWx1ZXMoc2VsZik6CiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgpAQCAtMzgzLDMgKzQzOCwxNDAgQEAKICAgICAgICAgICAgICAgICBkW3JlZihrZXksIHNlbGYuX3JlbW92ZSldID0gdmFsdWUKICAgICAgICAgaWYgbGVuKGt3YXJncyk6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShrd2FyZ3MpCisKKworY2xhc3MgZmluYWxpemU6CisgICAgIiIiQ2xhc3MgZm9yIGZpbmFsaXphdGlvbiBvZiB3ZWFrcmVmYWJsZSBvYmplY3RzCisKKyAgICBmaW5hbGl6ZShvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncykgcmV0dXJucyBhIGNhbGxhYmxlIGZpbmFsaXplcgorICAgIG9iamVjdCB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIG9iaiBpcyBnYXJiYWdlIGNvbGxlY3RlZC4gVGhlCisgICAgZmlyc3QgdGltZSB0aGUgZmluYWxpemVyIGlzIGNhbGxlZCBpdCBldmFsdWF0ZXMgZnVuYygqYXJnLCAqKmt3YXJncykKKyAgICBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LiBBZnRlciB0aGlzIHRoZSBmaW5hbGl6ZXIgaXMgZGVhZCwgYW5kCisgICAgY2FsbGluZyBpdCBqdXN0IHJldHVybnMgTm9uZS4KKworICAgIFdoZW4gdGhlIHByb2dyYW0gZXhpdHMgYW55IHJlbWFpbmluZyBmaW5hbGl6ZXJzIGZvciB3aGljaCB0aGUKKyAgICBhdGV4aXQgYXR0cmlidXRlIGlzIHRydWUgd2lsbCBiZSBydW4gaW4gcmV2ZXJzZSBvcmRlciBvZiBjcmVhdGlvbi4KKyAgICBCeSBkZWZhdWx0IGF0ZXhpdCBpcyB0cnVlLgorICAgICIiIgorCisgICAgIyBGaW5hbGl6ZXIgb2JqZWN0cyBkb24ndCBoYXZlIGFueSBzdGF0ZSBvZiB0aGVpciBvd24uICBUaGV5IGFyZQorICAgICMganVzdCB1c2VkIGFzIGtleXMgdG8gbG9va3VwIF9JbmZvIG9iamVjdHMgaW4gdGhlIHJlZ2lzdHJ5LiAgVGhpcworICAgICMgZW5zdXJlcyB0aGF0IHRoZXkgY2Fubm90IGJlIHBhcnQgb2YgYSByZWYtY3ljbGUuCisKKyAgICBfX3Nsb3RzX18gPSAoKQorICAgIF9yZWdpc3RyeSA9IHt9CisgICAgX3NodXRkb3duID0gRmFsc2UKKyAgICBfaW5kZXhfaXRlciA9IGl0ZXJ0b29scy5jb3VudCgpCisgICAgX2RpcnR5ID0gRmFsc2UKKyAgICBfcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdCA9IEZhbHNlCisKKyAgICBjbGFzcyBfSW5mbzoKKyAgICAgICAgX19zbG90c19fID0gKCJ3ZWFrcmVmIiwgImZ1bmMiLCAiYXJncyIsICJrd2FyZ3MiLCAiYXRleGl0IiwgImluZGV4IikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWdpc3RlcmVkX3dpdGhfYXRleGl0OgorICAgICAgICAgICAgIyBXZSBtYXkgcmVnaXN0ZXIgdGhlIGV4aXQgZnVuY3Rpb24gbW9yZSB0aGFuIG9uY2UgYmVjYXVzZQorICAgICAgICAgICAgIyBvZiBhIHRocmVhZCByYWNlLCBidXQgdGhhdCBpcyBoYXJtbGVzcworICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKHNlbGYuX2V4aXRmdW5jKQorICAgICAgICAgICAgZmluYWxpemUuX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQgPSBUcnVlCisgICAgICAgIGluZm8gPSBzZWxmLl9JbmZvKCkKKyAgICAgICAgaW5mby53ZWFrcmVmID0gcmVmKG9iaiwgc2VsZikKKyAgICAgICAgaW5mby5mdW5jID0gZnVuYworICAgICAgICBpbmZvLmFyZ3MgPSBhcmdzCisgICAgICAgIGluZm8ua3dhcmdzID0ga3dhcmdzIG9yIE5vbmUKKyAgICAgICAgaW5mby5hdGV4aXQgPSBUcnVlCisgICAgICAgIGluZm8uaW5kZXggPSBuZXh0KHNlbGYuX2luZGV4X2l0ZXIpCisgICAgICAgIHNlbGYuX3JlZ2lzdHJ5W3NlbGZdID0gaW5mbworICAgICAgICBmaW5hbGl6ZS5fZGlydHkgPSBUcnVlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgXz1Ob25lKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiBtYXJrIGFzIGRlYWQgYW5kIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkucG9wKHNlbGYsIE5vbmUpCisgICAgICAgIGlmIGluZm8gYW5kIG5vdCBzZWxmLl9zaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybiBpbmZvLmZ1bmMoKmluZm8uYXJncywgKiooaW5mby5rd2FyZ3Mgb3Ige30pKQorCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiBtYXJrIGFzIGRlYWQgYW5kIHJldHVybiAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIHNlbGYuX3JlZ2lzdHJ5LnBvcChzZWxmLCBOb25lKToKKyAgICAgICAgICAgIHJldHVybiAob2JqLCBpbmZvLmZ1bmMsIGluZm8uYXJncywgaW5mby5rd2FyZ3Mgb3Ige30pCisKKyAgICBkZWYgcGVlayhzZWxmKToKKyAgICAgICAgIiIiSWYgYWxpdmUgdGhlbiByZXR1cm4gKG9iaiwgZnVuYywgYXJncywga3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIChvYmosIGluZm8uZnVuYywgaW5mby5hcmdzLCBpbmZvLmt3YXJncyBvciB7fSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhbGl2ZShzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBmaW5hbGl6ZXIgaXMgYWxpdmUiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYgaW4gc2VsZi5fcmVnaXN0cnkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBhdGV4aXQoc2VsZik6CisgICAgICAgICIiIldoZXRoZXIgZmluYWxpemVyIHNob3VsZCBiZSBjYWxsZWQgYXQgZXhpdCIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIHJldHVybiBib29sKGluZm8pIGFuZCBpbmZvLmF0ZXhpdAorCisgICAgQGF0ZXhpdC5zZXR0ZXIKKyAgICBkZWYgYXRleGl0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBpZiBpbmZvOgorICAgICAgICAgICAgaW5mby5hdGV4aXQgPSBib29sKHZhbHVlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0IGF0ICUjeDsgZGVhZD4nICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgb2JqZWN0IGF0ICUjeDsgZm9yICVyIGF0ICUjeD4nICUgXAorICAgICAgICAgICAgICAgICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBpZChzZWxmKSwgdHlwZShvYmopLl9fbmFtZV9fLCBpZChvYmopKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9zZWxlY3RfZm9yX2V4aXQoY2xzKToKKyAgICAgICAgIyBSZXR1cm4gbGl2ZSBmaW5hbGl6ZXJzIG1hcmtlZCBmb3IgZXhpdCwgb2xkZXN0IGZpcnN0CisgICAgICAgIEwgPSBbKGYsaSkgZm9yIChmLGkpIGluIGNscy5fcmVnaXN0cnkuaXRlbXMoKSBpZiBpLmF0ZXhpdF0KKyAgICAgICAgTC5zb3J0KGtleT1sYW1iZGEgaXRlbTppdGVtWzFdLmluZGV4KQorICAgICAgICByZXR1cm4gW2YgZm9yIChmLGkpIGluIExdCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2V4aXRmdW5jKGNscyk6CisgICAgICAgICMgQXQgc2h1dGRvd24gaW52b2tlIGZpbmFsaXplcnMgZm9yIHdoaWNoIGF0ZXhpdCBpcyB0cnVlLgorICAgICAgICAjIFRoaXMgaXMgY2FsbGVkIG9uY2UgYWxsIG90aGVyIG5vbi1kYWVtb25pYyB0aHJlYWRzIGhhdmUgYmVlbgorICAgICAgICAjIGpvaW5lZC4KKyAgICAgICAgcmVlbmFibGVfZ2MgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBjbHMuX3JlZ2lzdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBnYworICAgICAgICAgICAgICAgIGlmIGdjLmlzZW5hYmxlZCgpOgorICAgICAgICAgICAgICAgICAgICByZWVuYWJsZV9nYyA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCisgICAgICAgICAgICAgICAgcGVuZGluZyA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBpZiBwZW5kaW5nIGlzIE5vbmUgb3IgZmluYWxpemUuX2RpcnR5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZyA9IGNscy5fc2VsZWN0X2Zvcl9leGl0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplLl9kaXJ0eSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwZW5kaW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZiA9IHBlbmRpbmcucG9wKCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBnYyBpcyBkaXNhYmxlZCwgc28gKGFzc3VtaW5nIG5vIGRhZW1vbmljCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRocmVhZHMpIHRoZSBmb2xsb3dpbmcgaXMgdGhlIG9ubHkgbGluZSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGZ1bmN0aW9uIHdoaWNoIG1pZ2h0IHRyaWdnZXIgY3JlYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICMgb2YgYSBuZXcgZmluYWxpemVyCisgICAgICAgICAgICAgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGYgbm90IGluIGNscy5fcmVnaXN0cnkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgcHJldmVudCBhbnkgbW9yZSBmaW5hbGl6ZXJzIGZyb20gZXhlY3V0aW5nIGR1cmluZyBzaHV0ZG93bgorICAgICAgICAgICAgZmluYWxpemUuX3NodXRkb3duID0gVHJ1ZQorICAgICAgICAgICAgaWYgcmVlbmFibGVfZ2M6CisgICAgICAgICAgICAgICAgZ2MuZW5hYmxlKCkKZGlmZiAtLWdpdCBhL0xpYi93ZWJicm93c2VyLnB5IGIvTGliL3dlYmJyb3dzZXIucHkKaW5kZXggOTQ1ZWRhNC4uMjcxNGJkMSAxMDA2NDQKLS0tIGEvTGliL3dlYmJyb3dzZXIucHkKKysrIGIvTGliL3dlYmJyb3dzZXIucHkKQEAgLTUsNiArNSw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN1YnByb2Nlc3MKQEAgLTgzLDcgKzg0LDcgQEAKIAogICAgICIiIgogICAgIGNtZCA9IGJyb3dzZXIuc3BsaXQoKVswXQotICAgIGlmIG5vdCBfaXNjb21tYW5kKGNtZCk6CisgICAgaWYgbm90IHNodXRpbC53aGljaChjbWQpOgogICAgICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY21kKQogICAgIHRyeToKQEAgLTEwMiwzOCArMTAzLDYgQEAKICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAKIAotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAid2luIjoKLSAgICBkZWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICBjbWQgPSBjbWQubG93ZXIoKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpIGFuZCBjbWQuZW5kc3dpdGgoKCIuZXhlIiwgIi5iYXQiKSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgZXh0IGluICIuZXhlIiwgIi5iYXQiOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kICsgZXh0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLWVsc2U6Ci0gICAgZGVmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKToKLSAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KGNtZClbc3RhdC5TVF9NT0RFXQotICAgICAgICAgICAgaWYgbW9kZSAmIHN0YXQuU19JWFVTUiBvciBtb2RlICYgc3RhdC5TX0lYR1JQIG9yIG1vZGUgJiBzdGF0LlNfSVhPVEg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLWRlZiBfaXNjb21tYW5kKGNtZCk6Ci0gICAgIiIiUmV0dXJuIFRydWUgaWYgY21kIGlzIGV4ZWN1dGFibGUgb3IgY2FuIGJlIGZvdW5kIG9uIHRoZSBleGVjdXRhYmxlCi0gICAgc2VhcmNoIHBhdGguIiIiCi0gICAgaWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHBhdGggPSBvcy5lbnZpcm9uLmdldCgiUEFUSCIpCi0gICAgaWYgbm90IHBhdGg6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIGZvciBkIGluIHBhdGguc3BsaXQob3MucGF0aHNlcCk6Ci0gICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbihkLCBjbWQpCi0gICAgICAgIGlmIF9pc2V4ZWN1dGFibGUoZXhlKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLQogIyBHZW5lcmFsIHBhcmVudCBjbGFzc2VzCiAKIGNsYXNzIEJhc2VCcm93c2VyKG9iamVjdCk6CkBAIC00MTgsMTEgKzM4NywxMSBAQAogICAgICAgICAgICAgIyBuZWVkIHRvIFBJTkcgZWFjaCBvbmUgdW50aWwgd2UgZmluZCBvbmUgdGhhdCdzIGxpdmUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoZm4pCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBubyBnb29kOyBhdHRlbXB0IHRvIGNsZWFuIGl0IG91dCwgYnV0IGRvbid0IGZhaWw6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHMKQEAgLTQ1MywyMiArNDIyLDIyIEBACiBkZWYgcmVnaXN0ZXJfWF9icm93c2VycygpOgogCiAgICAgIyB1c2UgeGRnLW9wZW4gaWYgYXJvdW5kCi0gICAgaWYgX2lzY29tbWFuZCgieGRnLW9wZW4iKToKKyAgICBpZiBzaHV0aWwud2hpY2goInhkZy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4ZGctb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJ4ZGctb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBHTk9NRTMgYnJvd3NlcgotICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImd2ZnMtb3BlbiIpOgorICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgiZ3Zmcy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJndmZzLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigiZ3Zmcy1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEdOT01FIGJyb3dzZXIKLSAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJnbm9tZS1vcGVuIik6CisgICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJnbm9tZS1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJnbm9tZS1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoImdub21lLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgS0RFIGJyb3dzZXIKLSAgICBpZiAiS0RFX0ZVTExfU0VTU0lPTiIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgia2ZtY2xpZW50Iik6CisgICAgaWYgIktERV9GVUxMX1NFU1NJT04iIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgia2ZtY2xpZW50Iik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm1jbGllbnQiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtY2xpZW50IikpCiAKLSAgICBpZiBfaXNjb21tYW5kKCJ4LXd3dy1icm93c2VyIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ4LXd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4LXd3dy1icm93c2VyIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIngtd3d3LWJyb3dzZXIiKSkKIAogICAgICMgVGhlIE1vemlsbGEvTmV0c2NhcGUgYnJvd3NlcnMKQEAgLTQ3NiwzOSArNDQ1LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICJtb3ppbGxhLWZpcmViaXJkIiwgImZpcmViaXJkIiwKICAgICAgICAgICAgICAgICAgICAgImljZXdlYXNlbCIsICJpY2VhcGUiLAogICAgICAgICAgICAgICAgICAgICAic2VhbW9ua2V5IiwgIm1vemlsbGEiLCAibmV0c2NhcGUiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgTW96aWxsYShicm93c2VyKSkKIAogICAgICMgS29ucXVlcm9yL2tmbSwgdGhlIEtERSBicm93c2VyLgotICAgIGlmIF9pc2NvbW1hbmQoImtmbSIpOgorICAgIGlmIHNodXRpbC53aGljaCgia2ZtIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm0iLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtIikpCi0gICAgZWxpZiBfaXNjb21tYW5kKCJrb25xdWVyb3IiKToKKyAgICBlbGlmIHNodXRpbC53aGljaCgia29ucXVlcm9yIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrb25xdWVyb3IiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia29ucXVlcm9yIikpCiAKICAgICAjIEdub21lJ3MgR2FsZW9uIGFuZCBFcGlwaGFueQogICAgIGZvciBicm93c2VyIGluICgiZ2FsZW9uIiwgImVwaXBoYW55Iik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEdhbGVvbihicm93c2VyKSkKIAogICAgICMgU2tpcHN0b25lLCBhbm90aGVyIEd0ay9Nb3ppbGxhIGJhc2VkIGJyb3dzZXIKLSAgICBpZiBfaXNjb21tYW5kKCJza2lwc3RvbmUiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInNraXBzdG9uZSIpOgogICAgICAgICByZWdpc3Rlcigic2tpcHN0b25lIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoInNraXBzdG9uZSIpKQogCiAgICAgIyBHb29nbGUgQ2hyb21lL0Nocm9taXVtIGJyb3dzZXJzCiAgICAgZm9yIGJyb3dzZXIgaW4gKCJnb29nbGUtY2hyb21lIiwgImNocm9tZSIsICJjaHJvbWl1bSIsICJjaHJvbWl1bS1icm93c2VyIik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIENocm9tZShicm93c2VyKSkKIAogICAgICMgT3BlcmEsIHF1aXRlIHBvcHVsYXIKLSAgICBpZiBfaXNjb21tYW5kKCJvcGVyYSIpOgorICAgIGlmIHNodXRpbC53aGljaCgib3BlcmEiKToKICAgICAgICAgcmVnaXN0ZXIoIm9wZXJhIiwgTm9uZSwgT3BlcmEoIm9wZXJhIikpCiAKICAgICAjIE5leHQsIE1vc2FpYyAtLSBvbGQgYnV0IHN0aWxsIGluIHVzZS4KLSAgICBpZiBfaXNjb21tYW5kKCJtb3NhaWMiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIm1vc2FpYyIpOgogICAgICAgICByZWdpc3RlcigibW9zYWljIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIm1vc2FpYyIpKQogCiAgICAgIyBHcmFpbCwgdGhlIFB5dGhvbiBicm93c2VyLiBEb2VzIGFueWJvZHkgc3RpbGwgdXNlIGl0PwotICAgIGlmIF9pc2NvbW1hbmQoImdyYWlsIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJncmFpbCIpOgogICAgICAgICByZWdpc3RlcigiZ3JhaWwiLCBHcmFpbCwgTm9uZSkKIAogIyBQcmVmZXIgWCBicm93c2VycyBpZiBwcmVzZW50CkBAIC01MTcsMTggKzQ4NiwxOCBAQAogCiAjIEFsc28gdHJ5IGNvbnNvbGUgYnJvd3NlcnMKIGlmIG9zLmVudmlyb24uZ2V0KCJURVJNIik6Ci0gICAgaWYgX2lzY29tbWFuZCgid3d3LWJyb3dzZXIiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ3d3ctYnJvd3NlciIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3d3ctYnJvd3NlciIpKQogICAgICMgVGhlIExpbmtzL2VsaW5rcyBicm93c2VycyA8aHR0cDovL2FydGF4Lmthcmxpbi5tZmYuY3VuaS5jei9+bWlrdWxhcy9saW5rcy8+Ci0gICAgaWYgX2lzY29tbWFuZCgibGlua3MiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJsaW5rcyIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJsaW5rcyIpKQotICAgIGlmIF9pc2NvbW1hbmQoImVsaW5rcyIpOgorICAgIGlmIHNodXRpbC53aGljaCgiZWxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJlbGlua3MiLCBOb25lLCBFbGlua3MoImVsaW5rcyIpKQogICAgICMgVGhlIEx5bnggYnJvd3NlciA8aHR0cDovL2x5bnguaXNjLm9yZy8+LCA8aHR0cDovL2x5bnguYnJvd3Nlci5vcmcvPgotICAgIGlmIF9pc2NvbW1hbmQoImx5bngiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImx5bngiKToKICAgICAgICAgcmVnaXN0ZXIoImx5bngiLCBOb25lLCBHZW5lcmljQnJvd3NlcigibHlueCIpKQogICAgICMgVGhlIHczbSBicm93c2VyIDxodHRwOi8vdzNtLnNvdXJjZWZvcmdlLm5ldC8+Ci0gICAgaWYgX2lzY29tbWFuZCgidzNtIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ3M20iKToKICAgICAgICAgcmVnaXN0ZXIoInczbSIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3M20iKSkKIAogIwpAQCAtNTQwLDcgKzUwOSw3IEBACiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUodXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgW0Vycm9yIDIyXSBObyBhcHBsaWNhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICMgZmlsZSBmb3IgdGhpcyBvcGVyYXRpb246ICc8VVJMPicKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTU1OCw3ICs1MjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5ldCBFeHBsb3JlclxcSUVYUExPUkUuRVhFIikKICAgICBmb3IgYnJvd3NlciBpbiAoImZpcmVmb3giLCAiZmlyZWJpcmQiLCAic2VhbW9ua2V5IiwgIm1vemlsbGEiLAogICAgICAgICAgICAgICAgICAgICAibmV0c2NhcGUiLCAib3BlcmEiLCBpZXhwbG9yZSk6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKGJyb3dzZXIpKQogCiAjCkBAIC02NDQsMTcgKzYxMyw2IEBACiAgICAgcmVnaXN0ZXIoIk1hY09TWCIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnZGVmYXVsdCcpLCAtMSkKIAogCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE9TLzIKLSMKLQotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAib3MyIiBhbmQgX2lzY29tbWFuZCgibmV0c2NhcGUiKToKLSAgICBfdHJ5b3JkZXIgPSBbXQotICAgIF9icm93c2VycyA9IHt9Ci0gICAgcmVnaXN0ZXIoIm9zMm5ldHNjYXBlIiwgTm9uZSwKLSAgICAgICAgICAgICBHZW5lcmljQnJvd3NlcihbInN0YXJ0IiwgIm5ldHNjYXBlIiwgIiVzIl0pLCAtMSkKLQotCiAjIE9LLCBub3cgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSBvcmRlcnMgZm9yIGVhY2gKICMgcGxhdGZvcm0gYXJlLCBhbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZW0gd2l0aCB0aGUgQlJPV1NFUiB2YXJpYWJsZS4KIGlmICJCUk9XU0VSIiBpbiBvcy5lbnZpcm9uOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5IGIvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CmluZGV4IGYwNzRhYjkuLjgxZTJkZjcgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQorKysgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKQEAgLTkwNSwxMSArOTA1LDggQEAKICAgICAgICAgYnVpbGRlciA9IEV4cGF0QnVpbGRlcigpCiAKICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZpbGUpCiAgICAgcmV0dXJuIHJlc3VsdApAQCAtOTM5LDExICs5MzYsOCBAQAogICAgICAgICBidWlsZGVyID0gRnJhZ21lbnRCdWlsZGVyKGNvbnRleHQpCiAKICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKICAgICAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZwKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IGJ1aWxkZXIucGFyc2VGaWxlKGZpbGUpCiAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKaW5kZXggNmNjMWI0NC4uNzNlNDkxZSAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CkBAIC03MSw4ICs3MSw4IEBACiAjIEByZXR1cm4gVGhlIGV4cGFuZGVkIHJlc291cmNlLiAgSWYgdGhlIHBhcnNlIG1vZGUgaXMgInhtbCIsIHRoaXMKICMgICAgaXMgYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAidGV4dCIsIHRoaXMKICMgICAgaXMgYSBVbmljb2RlIHN0cmluZy4gIElmIHRoZSBsb2FkZXIgZmFpbHMsIGl0IGNhbiByZXR1cm4gTm9uZQotIyAgICBvciByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbi4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBsb2FkZXIgZmFpbHMgdG8gbG9hZCB0aGUgcmVzb3VyY2UuCisjICAgIG9yIHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KIAogZGVmIGRlZmF1bHRfbG9hZGVyKGhyZWYsIHBhcnNlLCBlbmNvZGluZz1Ob25lKToKICAgICBpZiBwYXJzZSA9PSAieG1sIjoKQEAgLTk1LDcgKzk1LDcgQEAKICMgICAgIHRoYXQgaW1wbGVtZW50cyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgPGI+ZGVmYXVsdF9sb2FkZXI8L2I+LgogIyBAdGhyb3dzIEZhdGFsSW5jbHVkZUVycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBpbmNsdWRlIGEgZ2l2ZW4KICMgICAgIHJlc291cmNlLCBvciBpZiB0aGUgdHJlZSBjb250YWlucyBtYWxmb3JtZWQgWEluY2x1ZGUgZWxlbWVudHMuCi0jIEB0aHJvd3MgSU9FcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgYSBnaXZlbiByZXNvdXJjZS4KIAogZGVmIGluY2x1ZGUoZWxlbSwgbG9hZGVyPU5vbmUpOgogICAgIGlmIGxvYWRlciBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKaW5kZXggZTcwMTVjNy4uZDkxNGRkYiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CkBAIC0xMDUsMTQgKzEwNSwxMiBAQAogZGVmIHByZXBhcmVfc3RhcihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgogICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZWxlbQogICAgIHJldHVybiBzZWxlY3QKIAogZGVmIHByZXBhcmVfc2VsZihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgotICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHlpZWxkIGZyb20gcmVzdWx0CiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9kZXNjZW5kYW50KG5leHQsIHRva2VuKToKQEAgLTE3Niw3ICsxNzQsNyBAQAogICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgPT0gdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpAQCAtMTg0LDcgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5maW5kKHRhZykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXC0/XGQrJCIsIHByZWRpY2F0ZVswXSk6CiAgICAgICAgICMgW3RhZz0ndmFsdWUnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgdmFsdWUgPSBwcmVkaWNhdGVbLTFdCkBAIC0xOTgsNyArMTk2LDEwIEBACiAgICAgaWYgc2lnbmF0dXJlID09ICItIiBvciBzaWduYXR1cmUgPT0gIi0oKSIgb3Igc2lnbmF0dXJlID09ICItKCktIjoKICAgICAgICAgIyBbaW5kZXhdIG9yIFtsYXN0KCldIG9yIFtsYXN0KCktaW5kZXhdCiAgICAgICAgIGlmIHNpZ25hdHVyZSA9PSAiLSI6CisgICAgICAgICAgICAjIFtpbmRleF0KICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVswXSkgLSAxCisgICAgICAgICAgICBpZiBpbmRleCA8IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlhQYXRoIHBvc2l0aW9uID49IDEgZXhwZWN0ZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcHJlZGljYXRlWzBdICE9ICJsYXN0IjoKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgZnVuY3Rpb24iKQpAQCAtMjA3LDYgKzIwOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVsyXSkgLSAxCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBleHByZXNzaW9uIikKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA+IC0yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggb2Zmc2V0IGZyb20gbGFzdCgpIG11c3QgYmUgbmVnYXRpdmUiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpbmRleCA9IC0xCiAgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CmluZGV4IGE4ZTU3MjkuLmNhYjQxNWMgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQpAQCAtMSwyOCArMSw0NyBAQAorIiIiTGlnaHR3ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbi4KKworIFhNTCBpcyBhbiBpbmhlcmVudGx5IGhpZXJhcmNoaWNhbCBkYXRhIGZvcm1hdCwgYW5kIHRoZSBtb3N0IG5hdHVyYWwgd2F5IHRvCisgcmVwcmVzZW50IGl0IGlzIHdpdGggYSB0cmVlLiAgVGhpcyBtb2R1bGUgaGFzIHR3byBjbGFzc2VzIGZvciB0aGlzIHB1cnBvc2U6CisKKyAgICAxLiBFbGVtZW50VHJlZSByZXByZXNlbnRzIHRoZSB3aG9sZSBYTUwgZG9jdW1lbnQgYXMgYSB0cmVlIGFuZAorCisgICAgMi4gRWxlbWVudCByZXByZXNlbnRzIGEgc2luZ2xlIG5vZGUgaW4gdGhpcyB0cmVlLgorCisgSW50ZXJhY3Rpb25zIHdpdGggdGhlIHdob2xlIGRvY3VtZW50IChyZWFkaW5nIGFuZCB3cml0aW5nIHRvL2Zyb20gZmlsZXMpIGFyZQorIHVzdWFsbHkgZG9uZSBvbiB0aGUgRWxlbWVudFRyZWUgbGV2ZWwuICBJbnRlcmFjdGlvbnMgd2l0aCBhIHNpbmdsZSBYTUwgZWxlbWVudAorIGFuZCBpdHMgc3ViLWVsZW1lbnRzIGFyZSBkb25lIG9uIHRoZSBFbGVtZW50IGxldmVsLgorCisgRWxlbWVudCBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QgZGVzaWduZWQgdG8gc3RvcmUgaGllcmFyY2hpY2FsIGRhdGEKKyBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gSXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhCisgZGljdGlvbmFyeS4gIEVhY2ggRWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CisKKyAgICAndGFnJyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyBuYW1lLgorCisgICAgJ2F0dHJpYnV0ZXMnIC0gYSBQeXRob24gZGljdGlvbmFyeSBzdG9yaW5nIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4KKworICAgICd0ZXh0JyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyB0ZXh0IGNvbnRlbnQuCisKKyAgICAndGFpbCcgLSBhbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyB0ZXh0IGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZy4KKworICAgIEFuZCBhIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cyBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2UuCisKKyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSBFbGVtZW50IGNvbnN0cnVjdG9yLAorIG9yIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24uCisKKyBZb3UgY2FuIGFsc28gdXNlIHRoZSBFbGVtZW50VHJlZSBjbGFzcyB0byB3cmFwIGFuIGVsZW1lbnQgc3RydWN0dXJlCisgYW5kIGNvbnZlcnQgaXQgdG8gYW5kIGZyb20gWE1MLgorCisiIiIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRUcmVlLnB5IDM0NDAgMjAwOC0wNy0xOCAxNDo0NTowMVogZnJlZHJpayAkCi0jCi0jIGxpZ2h0LXdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCi0jCi0jIGhpc3RvcnkgKHNpbmNlIDEuMi42KToKLSMgMjAwNS0xMS0xMiBmbCAgIGFkZGVkIHRvc3RyaW5nbGlzdC9mcm9tc3RyaW5nbGlzdCBoZWxwZXJzCi0jIDIwMDYtMDctMDUgZmwgICBtZXJnZWQgaW4gc2VsZWN0ZWQgY2hhbmdlcyBmcm9tIHRoZSAxLjMgc2FuZGJveAotIyAyMDA2LTA3LTA1IGZsICAgcmVtb3ZlZCBzdXBwb3J0IGZvciAyLjEgYW5kIGVhcmxpZXIKLSMgMjAwNy0wNi0yMSBmbCAgIGFkZGVkIGRlcHJlY2F0aW9uL2Z1dHVyZSB3YXJuaW5ncwotIyAyMDA3LTA4LTI1IGZsICAgYWRkZWQgZG9jdHlwZSBob29rLCBhZGRlZCBwYXJzZXIgdmVyc2lvbiBhdHRyaWJ1dGUgZXRjCi0jIDIwMDctMDgtMjYgZmwgICBhZGRlZCBuZXcgc2VyaWFsaXplciBjb2RlIChiZXR0ZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBldGMpCi0jIDIwMDctMDgtMjcgZmwgICB3YXJuIGZvciBicm9rZW4gL3RhZyBzZWFyY2hlcyBvbiB0cmVlIGxldmVsCi0jIDIwMDctMDktMDIgZmwgICBhZGRlZCBodG1sL3RleHQgbWV0aG9kcyB0byBzZXJpYWxpemVyIChleHBlcmltZW50YWwpCi0jIDIwMDctMDktMDUgZmwgICBhZGRlZCBtZXRob2QgYXJndW1lbnQgdG8gdG9zdHJpbmcvdG9zdHJpbmdsaXN0Ci0jIDIwMDctMDktMDYgZmwgICBpbXByb3ZlZCBlcnJvciBoYW5kbGluZwotIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcnRleHQsIGl0ZXJmaW5kOyBhc3NvcnRlZCBjbGVhbnVwcwotIyAyMDA3LTEyLTE1IGZsICAgYWRkZWQgQzE0TiBob29rcywgY29weSBtZXRob2QgKGV4cGVyaW1lbnRhbCkKLSMKICMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIGZyZWRyaWtAcHl0aG9ud2FyZS5jb20KICMgaHR0cDovL3d3dy5weXRob253YXJlLmNvbQotIwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwpAQCAtNTEsOSArNzAsNiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCi0KIF9fYWxsX18gPSBbCiAgICAgIyBwdWJsaWMgc3ltYm9scwogICAgICJDb21tZW50IiwKQEAgLTY5LDM0ICs4NSwxMiBAQAogICAgICJUcmVlQnVpbGRlciIsCiAgICAgIlZFUlNJT04iLAogICAgICJYTUwiLCAiWE1MSUQiLAotICAgICJYTUxQYXJzZXIiLCAiWE1MVHJlZUJ1aWxkZXIiLAorICAgICJYTUxQYXJzZXIiLAogICAgICJyZWdpc3Rlcl9uYW1lc3BhY2UiLAogICAgIF0KIAogVkVSU0lPTiA9ICIxLjMuMCIKIAotIyMKLSMgVGhlIDxiPkVsZW1lbnQ8L2I+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+IikKICAgICAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHdyaXRlKCIgLz4iKQpAQCAtMTAwMiw3ICs5NTUsNyBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKLWRlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTEwNjYsMTggKzEwMTksMTkgQEAKICMgICAiYzE0biI6IF9zZXJpYWxpemVfYzE0biwKIH0KIAotIyMKLSMgUmVnaXN0ZXJzIGEgbmFtZXNwYWNlIHByZWZpeC4gIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkKLSMgZXhpc3RpbmcgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkKLSMgd2lsbCBiZSByZW1vdmVkLgotIwotIyBAcGFyYW0gcHJlZml4IE5hbWVzcGFjZSBwcmVmaXguCi0jIEBwYXJhbSB1cmkgTmFtZXNwYWNlIHVyaS4gIFRhZ3MgYW5kIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2UKLSMgICAgIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIGlmIGF0IGFsbCBwb3NzaWJsZS4KLSMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIHRoZSBwcmVmaXggaXMgcmVzZXJ2ZWQsIG9yIGlzIG90aGVyd2lzZQotIyAgICAgaW52YWxpZC4KIAogZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6CisgICAgIiIiUmVnaXN0ZXIgYSBuYW1lc3BhY2UgcHJlZml4LgorCisgICAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueSBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlCisgICAgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJIHdpbGwgYmUgcmVtb3ZlZC4KKworICAgICpwcmVmaXgqIGlzIHRoZSBuYW1lc3BhY2UgcHJlZml4LCAqdXJpKiBpcyBhIG5hbWVzcGFjZSB1cmkuIFRhZ3MgYW5kCisgICAgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZSB3aWxsIGJlIHNlcmlhbGl6ZWQgd2l0aCBwcmVmaXggaWYgcG9zc2libGUuCisKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZCBpZiBwcmVmaXggaXMgcmVzZXJ2ZWQgb3IgaXMgaW52YWxpZC4KKworICAgICIiIgogICAgIGlmIHJlLm1hdGNoKCJuc1xkKyQiLCBwcmVmaXgpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcmVmaXggZm9ybWF0IHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UiKQogICAgIGZvciBrLCB2IGluIGxpc3QoX25hbWVzcGFjZV9tYXAuaXRlbXMoKSk6CkBAIC0xMTUzLDQwICsxMTA3LDI3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCi0jIHN1YmVsZW1lbnRzLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCB0aGUgcmV0dXJuIHR5cGUgaXMgYSBzdHJpbmc7Ci0jIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGVzIGFycmF5LgotIwotIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0jIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0jICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotIyBAcmV0dXJuIEFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzdHJpbmcKK2RlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAiIiJHZW5lcmF0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgWE1MIGVsZW1lbnQuCiAKLWRlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CisgICAgQWxsIHN1YmVsZW1lbnRzIGFyZSBpbmNsdWRlZC4gIElmIGVuY29kaW5nIGlzICJ1bmljb2RlIiwgYSBzdHJpbmcKKyAgICBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIGEgYnl0ZXN0cmluZyBpcyByZXR1cm5lZC4KKworICAgICplbGVtZW50KiBpcyBhbiBFbGVtZW50IGluc3RhbmNlLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIG91dHB1dAorICAgIGVuY29kaW5nIGRlZmF1bHRpbmcgdG8gVVMtQVNDSUksICptZXRob2QqIGlzIGFuIG9wdGlvbmFsIG91dHB1dCB3aGljaCBjYW4KKyAgICBiZSBvbmUgb2YgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCIsICJ0ZXh0IiBvciAiYzE0biIuCisKKyAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKworICAgICIiIgogICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkgaWYgZW5jb2RpbmcgPT0gJ3VuaWNvZGUnIGVsc2UgaW8uQnl0ZXNJTygpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBzdHJlYW0uZ2V0dmFsdWUoKQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQSBzZXF1ZW5jZSBvYmplY3QgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCi0jIEBkZWZyZXR1cm4gc2VxdWVuY2UKLSMgQHNpbmNlIDEuMwotCiBjbGFzcyBfTGlzdERhdGFTdHJlYW0oaW8uQnVmZmVyZWRJT0Jhc2UpOgotICAgICIiIiBBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UKLSAgICAiIiIKKyAgICAiIiJBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CiAKQEAgLTEyMDIsMjIgKzExNDMsMjUgQEAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxzdCkKIAotZGVmIHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CitkZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKICAgICBsc3QgPSBbXQogICAgIHN0cmVhbSA9IF9MaXN0RGF0YVN0cmVhbShsc3QpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBsc3QKIAotIyMKLSMgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcwotIyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCi0jIDxwPgotIyBUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzCi0jIHZlcnNpb24sIGl0J3Mgd3JpdHRlbiBhcyBhbiBvcmRpbmFyeSBYTUwgZmlsZS4KLSMKLSMgQHBhcmFtIGVsZW0gQW4gZWxlbWVudCB0cmVlIG9yIGFuIGluZGl2aWR1YWwgZWxlbWVudC4KIAogZGVmIGR1bXAoZWxlbSk6CisgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KKworICAgICplbGVtKiBpcyBlaXRoZXIgYW4gRWxlbWVudFRyZWUsIG9yIGEgc2luZ2xlIEVsZW1lbnQuICBUaGUgZXhhY3Qgb3V0cHV0CisgICAgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuCisgICAgb3JkaW5hcnkgWE1MIGZpbGUuCisKKyAgICAiIiIKICAgICAjIGRlYnVnZ2luZwogICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW0sIEVsZW1lbnRUcmVlKToKICAgICAgICAgZWxlbSA9IEVsZW1lbnRUcmVlKGVsZW0pCkBAIC0xMjI5LDE0NCArMTE3MywxNjkgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgcGFyc2luZwogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlLgotIwotIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudFRyZWUgaW5zdGFuY2UKIAogZGVmIHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwKKyAgICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UgZGVmYXVsdGluZyB0byBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm4gYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICB0cmVlID0gRWxlbWVudFRyZWUoKQogICAgIHRyZWUucGFyc2Uoc291cmNlLCBwYXJzZXIpCiAgICAgcmV0dXJuIHRyZWUKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LCBhbmQgcmVwb3J0cwotIyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gZXZlbnRzIEEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5ICJlbmQiCi0jICAgICBldmVudHMgYXJlIHJlcG9ydGVkLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBIChldmVudCwgZWxlbSkgaXRlcmF0b3IuCiAKIGRlZiBpdGVycGFyc2Uoc291cmNlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIkluY3JlbWVudGFsbHkgcGFyc2UgWE1MIGRvY3VtZW50IGludG8gRWxlbWVudFRyZWUuCisKKyAgICBUaGlzIGNsYXNzIGFsc28gcmVwb3J0cyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIgYmFzZWQgb24gdGhlCisgICAgKmV2ZW50cyogaXQgaXMgaW5pdGlhbGl6ZWQgd2l0aC4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncworICAgICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZCAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldAorICAgIGRldGFpbGVkIG5hbWVzcGFjZSBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5CisgICAgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwgKmV2ZW50cyogaXMKKyAgICBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuCisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyAoZXZlbnQsIGVsZW0pIHBhaXJzLgorCisgICAgIiIiCiAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIHJldHVybiBfSXRlclBhcnNlSXRlcmF0b3Ioc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlKQogCisKK2NsYXNzIFhNTFB1bGxQYXJzZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzPU5vbmUsICosIF9wYXJzZXI9Tm9uZSk6CisgICAgICAgICMgVGhlIF9wYXJzZXIgYXJndW1lbnQgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtdXN0IG5vdCBiZSByZWxpZWQKKyAgICAgICAgIyB1cG9uIGluIHVzZXIgY29kZS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzc0MSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICMgX2VsZW1lbnR0cmVlLmMgZXhwZWN0cyBhIGxpc3QsIG5vdCBhIGRlcXVlCisgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZSA9IFtdCisgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAgICAgICBzZWxmLl9wYXJzZXIgPSBfcGFyc2VyIG9yIFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKKyAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZworICAgICAgICBpZiBldmVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIGV2ZW50cyA9ICgiZW5kIiwpCisgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50c19xdWV1ZSwgZXZlbnRzKQorCisgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKKyAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmZWVkKCkgY2FsbGVkIGFmdGVyIGVuZCBvZiBzdHJlYW0iKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZS5hcHBlbmQoZXhjKQorCisgICAgZGVmIF9jbG9zZV9hbmRfcmV0dXJuX3Jvb3Qoc2VsZik6CisgICAgICAgICMgaXRlcnBhcnNlIG5lZWRzIHRoaXMgdG8gc2V0IGl0cyByb290IGF0dHJpYnV0ZSBwcm9wZXJseSA6KAorICAgICAgICByb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQorICAgICAgICByZXR1cm4gcm9vdAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlci4KKworICAgICAgICBVbmxpa2UgWE1MUGFyc2VyLCBkb2VzIG5vdCByZXR1cm4gdGhlIHJvb3QgZWxlbWVudC4gVXNlCisgICAgICAgIHJlYWRfZXZlbnRzKCkgdG8gY29uc3VtZSBlbGVtZW50cyBmcm9tIFhNTFB1bGxQYXJzZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQorCisgICAgZGVmIHJlYWRfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgY3VycmVudGx5IGF2YWlsYWJsZSAoZXZlbnQsIGVsZW0pIHBhaXJzLgorCisgICAgICAgIEV2ZW50cyBhcmUgY29uc3VtZWQgZnJvbSB0aGUgaW50ZXJuYWwgZXZlbnQgcXVldWUgYXMgdGhleSBhcmUKKyAgICAgICAgcmV0cmlldmVkIGZyb20gdGhlIGl0ZXJhdG9yLgorICAgICAgICAiIiIKKyAgICAgICAgZXZlbnRzID0gc2VsZi5fZXZlbnRzX3F1ZXVlCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpbmRleCA9IHNlbGYuX2luZGV4CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXZlbnQgPSBldmVudHNbc2VsZi5faW5kZXhdCisgICAgICAgICAgICAgICAgIyBBdm9pZCByZXRhaW5pbmcgcmVmZXJlbmNlcyB0byBwYXN0IGV2ZW50cworICAgICAgICAgICAgICAgIGV2ZW50c1tzZWxmLl9pbmRleF0gPSBOb25lCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaW5kZXggKz0gMQorICAgICAgICAgICAgIyBDb21wYWN0IHRoZSBsaXN0IGluIGEgTygxKSBhbW9ydGl6ZWQgZmFzaGlvbgorICAgICAgICAgICAgIyBBcyBub3RlZCBhYm92ZSwgX2VsZW1lbnRyZWUuYyBuZWVkcyBhIGxpc3QsIG5vdCBhIGRlcXVlCisgICAgICAgICAgICBpZiBpbmRleCAqIDIgPj0gbGVuKGV2ZW50cyk6CisgICAgICAgICAgICAgICAgZXZlbnRzWzppbmRleF0gPSBbXQorICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IGluZGV4CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV2ZW50LCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHJhaXNlIGV2ZW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHlpZWxkIGV2ZW50CisKKwogY2xhc3MgX0l0ZXJQYXJzZUl0ZXJhdG9yOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgZXZlbnRzLCBwYXJzZXIsIGNsb3NlX3NvdXJjZT1GYWxzZSk6CisgICAgICAgICMgVXNlIHRoZSBpbnRlcm5hbCwgdW5kb2N1bWVudGVkIF9wYXJzZXIgYXJndW1lbnQgZm9yIG5vdzsgV2hlbiB0aGUKKyAgICAgICAgIyBwYXJzZXIgYXJndW1lbnQgb2YgaXRlcnBhcnNlIGlzIHJlbW92ZWQsIHRoaXMgY2FuIGJlIGtpbGxlZC4KKyAgICAgICAgc2VsZi5fcGFyc2VyID0gWE1MUHVsbFBhcnNlcihldmVudHM9ZXZlbnRzLCBfcGFyc2VyPXBhcnNlcikKICAgICAgICAgc2VsZi5fZmlsZSA9IHNvdXJjZQogICAgICAgICBzZWxmLl9jbG9zZV9maWxlID0gY2xvc2Vfc291cmNlCi0gICAgICAgIHNlbGYuX2V2ZW50cyA9IFtdCi0gICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCi0gICAgICAgICMgd2lyZSB1cCB0aGUgcGFyc2VyIGZvciBldmVudCByZXBvcnRpbmcKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyLl9wYXJzZXIKLSAgICAgICAgYXBwZW5kID0gc2VsZi5fZXZlbnRzLmFwcGVuZAotICAgICAgICBpZiBldmVudHMgaXMgTm9uZToKLSAgICAgICAgICAgIGV2ZW50cyA9IFsiZW5kIl0KLSAgICAgICAgZm9yIGV2ZW50IGluIGV2ZW50czoKLSAgICAgICAgICAgIGlmIGV2ZW50ID09ICJzdGFydCI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQotICAgICAgICAgICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgYXR0cmliX2luLCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ9c2VsZi5fcGFyc2VyLl9zdGFydF9saXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9wYXJzZXIuX3N0YXJ0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgotICAgICAgICAgICAgZWxpZiBldmVudCA9PSAiZW5kIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZD1zZWxmLl9wYXJzZXIuX2VuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIGVuZCh0YWcpKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJzdGFydC1ucyI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCB1cmksIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgKHByZWZpeCBvciAiIiwgdXJpIG9yICIiKSkpCi0gICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJlbmQtbnMiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHByZWZpeCwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBOb25lKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZXZlbnQgJXIiICUgZXZlbnQpCiAKICAgICBkZWYgX19uZXh0X18oc2VsZik6CiAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYuX2V2ZW50c1tzZWxmLl9pbmRleF0KLSAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCArPSAxCi0gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0KLSAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGlmIHNlbGYuX2Vycm9yOgotICAgICAgICAgICAgICAgIGUgPSBzZWxmLl9lcnJvcgotICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQotICAgICAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuX3BhcnNlci5yZWFkX2V2ZW50cygpOgorICAgICAgICAgICAgICAgIHJldHVybiBldmVudAorICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyLl9wYXJzZXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlcgotICAgICAgICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XQotICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNiAqIDEwMjQpCiAgICAgICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IGV4YworICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQogCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGNhbgotIyBiZSB1c2VkIHRvIGVtYmVkICJYTUwgbGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgotIwotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgWE1MKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVtYmVkICJYTUwgTGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEsICpwYXJzZXIqIGlzIGFuCisgICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKICAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LCBhbmQgYWxzbyByZXR1cm5zCi0jIGEgZGljdGlvbmFyeSB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgotIwotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyBhbiBFbGVtZW50IGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCi0jIEBkZWZyZXR1cm4gKEVsZW1lbnQsIGRpY3Rpb25hcnkpCiAKIGRlZiBYTUxJRCh0ZXh0LCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50IGZvciBpdHMgSURzLgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEsICpwYXJzZXIqIGlzIGFuCisgICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIChFbGVtZW50LCBkaWN0KSB0dXBsZSwgaW4gd2hpY2ggdGhlCisgICAgZGljdCBtYXBzIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQpAQCAtMTM3OCwyNyArMTM0NywxOCBAQAogICAgICAgICAgICAgaWRzW2lkXSA9IGVsZW0KICAgICByZXR1cm4gdHJlZSwgaWRzCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFNhbWUgYXMge0BsaW5rICNYTUx9LgotIwotIyBAZGVmIGZyb21zdHJpbmcodGV4dCkKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAotCisjIFBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudC4gIEFsaWFzIGZvciBYTUwoKS4KIGZyb21zdHJpbmcgPSBYTUwKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KLSMKLSMgQHBhcmFtIHNlcXVlbmNlIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIFhNTCBkYXRhIGZyYWdtZW50cy4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0jIEBzaW5jZSAxLjMKLQogZGVmIGZyb21zdHJpbmdsaXN0KHNlcXVlbmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KKworICAgICpzZXF1ZW5jZSogaXMgYSBsaXN0IG9mIG90aGVyIHNlcXVlbmNlLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIKKyAgICBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIGZvciB0ZXh0IGluIHNlcXVlbmNlOgpAQCAtMTQwNywxOSArMTM2NywyMCBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIEdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4gIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlCi0jIG9mIHtAbGluayAjVHJlZUJ1aWxkZXIuc3RhcnR9LCB7QGxpbmsgI1RyZWVCdWlsZGVyLmRhdGF9LCBhbmQge0BsaW5rCi0jICNUcmVlQnVpbGRlci5lbmR9IG1ldGhvZCBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLgotIyA8cD4KLSMgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwKLSMgcGFyc2VyLCBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuCi0jCi0jIEBwYXJhbSBlbGVtZW50X2ZhY3RvcnkgT3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5Ci0jICAgIGlzIGNhbGxlZCB0byBjcmVhdGUgbmV3IEVsZW1lbnQgaW5zdGFuY2VzLCBhcyBuZWNlc3NhcnkuCiAKIGNsYXNzIFRyZWVCdWlsZGVyOgorICAgICIiIkdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4KIAorICAgIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlIG9mIHN0YXJ0LCBkYXRhLCBhbmQgZW5kIG1ldGhvZAorICAgIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuCisKKyAgICBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTAorICAgIHBhcnNlciwgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LgorCisgICAgKmVsZW1lbnRfZmFjdG9yeSogaXMgYW4gb3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5IHdoaWNoIGlzIGNhbGxlZAorICAgIHRvIGNyZWF0ZSBuZXcgRWxlbWVudCBpbnN0YW5jZXMsIGFzIG5lY2Vzc2FyeS4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50X2ZhY3Rvcnk9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2RhdGEgPSBbXSAjIGRhdGEgY29sbGVjdG9yCiAgICAgICAgIHNlbGYuX2VsZW0gPSBbXSAjIGVsZW1lbnQgc3RhY2sKQEAgLTE0MjksMTQgKzEzOTAsOCBAQAogICAgICAgICAgICAgZWxlbWVudF9mYWN0b3J5ID0gRWxlbWVudAogICAgICAgICBzZWxmLl9mYWN0b3J5ID0gZWxlbWVudF9mYWN0b3J5CiAKLSAgICAjIwotICAgICMgRmx1c2hlcyB0aGUgYnVpbGRlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbnQKLSAgICAjIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZsdXNoIGJ1aWxkZXIgYnVmZmVycyBhbmQgcmV0dXJuIHRvcGxldmVsIGRvY3VtZW50IEVsZW1lbnQuIiIiCiAgICAgICAgIGFzc2VydCBsZW4oc2VsZi5fZWxlbSkgPT0gMCwgIm1pc3NpbmcgZW5kIHRhZ3MiCiAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0IGlzIG5vdCBOb25lLCAibWlzc2luZyB0b3BsZXZlbCBlbGVtZW50IgogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdApAQCAtMTQ1MywyNCArMTQwOCwxNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0LnRleHQgPSB0ZXh0CiAgICAgICAgICAgICBzZWxmLl9kYXRhID0gW10KIAotICAgICMjCi0gICAgIyBBZGRzIHRleHQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZGF0YSBBIHN0cmluZy4gIFRoaXMgc2hvdWxkIGJlIGVpdGhlciBhbiA4LWJpdCBzdHJpbmcKLSAgICAjICAgIGNvbnRhaW5pbmcgQVNDSUkgdGV4dCwgb3IgYSBVbmljb2RlIHN0cmluZy4KLQogICAgIGRlZiBkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJBZGQgdGV4dCB0byBjdXJyZW50IGVsZW1lbnQuIiIiCiAgICAgICAgIHNlbGYuX2RhdGEuYXBwZW5kKGRhdGEpCiAKLSAgICAjIwotICAgICMgT3BlbnMgYSBuZXcgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0gICAgIyBAcGFyYW0gYXR0cmliIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSAgICAjIEByZXR1cm4gVGhlIG9wZW5lZCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgICIiIk9wZW4gbmV3IGVsZW1lbnQgYW5kIHJldHVybiBpdC4KKworICAgICAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLCAqYXR0cnMqIGlzIGEgZGljdCBjb250YWluaW5nIGVsZW1lbnQKKyAgICAgICAgYXR0cmlidXRlcy4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZmx1c2goKQogICAgICAgICBzZWxmLl9sYXN0ID0gZWxlbSA9IHNlbGYuX2ZhY3RvcnkodGFnLCBhdHRycykKICAgICAgICAgaWYgc2VsZi5fZWxlbToKQEAgLTE0NzksMTQgKzE0MjcsMTIgQEAKICAgICAgICAgc2VsZi5fdGFpbCA9IDAKICAgICAgICAgcmV0dXJuIGVsZW0KIAotICAgICMjCi0gICAgIyBDbG9zZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0gICAgIyBAcmV0dXJuIFRoZSBjbG9zZWQgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJDbG9zZSBhbmQgcmV0dXJuIGN1cnJlbnQgRWxlbWVudC4KKworICAgICAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mbHVzaCgpCiAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9lbGVtLnBvcCgpCiAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0LnRhZyA9PSB0YWcsXApAQCAtMTQ5NSwyMCArMTQ0MSwxOCBAQAogICAgICAgICBzZWxmLl90YWlsID0gMQogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdAogCi0jIwotIyBFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZQotIyA8Yj5leHBhdDwvYj4gcGFyc2VyLgotIwotIyBAa2V5cGFyYW0gdGFyZ2V0IFRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUgYnVpbGRlciB1c2VzIGFuCi0jICAgICBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQge0BsaW5rICNUcmVlQnVpbGRlcn0gY2xhc3MuCi0jIEBrZXlwYXJhbSBodG1sIFByZWRlZmluZSBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQKLSMgICAgIGJ5IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgZW5jb2RpbmcuICBJZiBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcwotIyAgICAgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCi0jIEBzZWUgI0VsZW1lbnRUcmVlCi0jIEBzZWUgI1RyZWVCdWlsZGVyCiAKKyMgYWxzbyBzZWUgRWxlbWVudFRyZWUgYW5kIFRyZWVCdWlsZGVyCiBjbGFzcyBYTUxQYXJzZXI6CisgICAgIiIiRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhIGJhc2VkIG9uIHRoZSBleHBhdCBwYXJzZXIuCisKKyAgICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcyAobm90IHN1cHBvcnRlZCBjdXJyZW50bHkpLAorICAgICp0YXJnZXQqIGlzIGFuIG9wdGlvbmFsIHRhcmdldCBvYmplY3Qgd2hpY2ggZGVmYXVsdHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgc3RhbmRhcmQgVHJlZUJ1aWxkZXIgY2xhc3MsICplbmNvZGluZyogaXMgYW4gb3B0aW9uYWwgZW5jb2Rpbmcgc3RyaW5nCisgICAgd2hpY2ggaWYgZ2l2ZW4sIG92ZXJyaWRlcyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZToKKyAgICBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzCisKKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKToKICAgICAgICAgdHJ5OgpAQCAtMTU0MSwxOSArMTQ4NSwxMCBAQAogICAgICAgICAgICAgcGFyc2VyLkNvbW1lbnRIYW5kbGVyID0gdGFyZ2V0LmNvbW1lbnQKICAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsICdwaScpOgogICAgICAgICAgICAgcGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSB0YXJnZXQucGkKLSAgICAgICAgIyBsZXQgZXhwYXQgZG8gdGhlIGJ1ZmZlcmluZywgaWYgc3VwcG9ydGVkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAjIHVzZSBuZXctc3R5bGUgYXR0cmlidXRlIGhhbmRsaW5nLCBpZiBzdXBwb3J0ZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgIGlmIGhhc2F0dHIodGFyZ2V0LCAnc3RhcnQnKToKLSAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuX3N0YXJ0X2xpc3QKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICAjIENvbmZpZ3VyZSBweWV4cGF0OiBidWZmZXJpbmcsIG5ldy1zdHlsZSBhdHRyaWJ1dGUgaGFuZGxpbmcuCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQogICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogICAgICAgICBzZWxmLmVudGl0eSA9IHt9CiAgICAgICAgIHRyeToKQEAgLTE1NjEsNiArMTQ5NiwzOSBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzICMgdW5rbm93bgogCisgICAgZGVmIF9zZXRldmVudHMoc2VsZiwgZXZlbnRzX3F1ZXVlLCBldmVudHNfdG9fcmVwb3J0KToKKyAgICAgICAgIyBJbnRlcm5hbCBBUEkgZm9yIFhNTFB1bGxQYXJzZXIKKyAgICAgICAgIyBldmVudHNfdG9fcmVwb3J0OiBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBkdXJpbmcgcGFyc2luZyAoc2FtZSBhcworICAgICAgICAjIHRoZSAqZXZlbnRzKiBvZiBYTUxQdWxsUGFyc2VyJ3MgY29uc3RydWN0b3IuCisgICAgICAgICMgZXZlbnRzX3F1ZXVlOiBhIGxpc3Qgb2YgYWN0dWFsIHBhcnNpbmcgZXZlbnRzIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQKKyAgICAgICAgIyBieSB0aGUgdW5kZXJseWluZyBwYXJzZXIuCisgICAgICAgICMKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyCisgICAgICAgIGFwcGVuZCA9IGV2ZW50c19xdWV1ZS5hcHBlbmQKKyAgICAgICAgZm9yIGV2ZW50X25hbWUgaW4gZXZlbnRzX3RvX3JlcG9ydDoKKyAgICAgICAgICAgIGlmIGV2ZW50X25hbWUgPT0gInN0YXJ0IjoKKyAgICAgICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9zdGFydCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gImVuZCI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZD1zZWxmLl9lbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBlbmQodGFnKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJzdGFydC1ucyI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCB1cmksIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAiZW5kLW5zIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBOb25lKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZXZlbnQgJXIiICUgZXZlbnRfbmFtZSkKKwogICAgIGRlZiBfcmFpc2VlcnJvcihzZWxmLCB2YWx1ZSk6CiAgICAgICAgIGVyciA9IFBhcnNlRXJyb3IodmFsdWUpCiAgICAgICAgIGVyci5jb2RlID0gdmFsdWUuY29kZQpAQCAtMTU3OCwyMSArMTU0NiwxNiBAQAogICAgICAgICAgICAgc2VsZi5fbmFtZXNba2V5XSA9IG5hbWUKICAgICAgICAgcmV0dXJuIG5hbWUKIAotICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgorICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyX2xpc3QpOgorICAgICAgICAjIEhhbmRsZXIgZm9yIGV4cGF0J3MgU3RhcnRFbGVtZW50SGFuZGxlci4gU2luY2Ugb3JkZXJlZF9hdHRyaWJ1dGVzCisgICAgICAgICMgaXMgc2V0LCB0aGUgYXR0cmlidXRlcyBhcmUgcmVwb3J0ZWQgYXMgYSBsaXN0IG9mIGFsdGVybmF0aW5nCisgICAgICAgICMgYXR0cmlidXRlIG5hbWUsdmFsdWUuCiAgICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCiAgICAgICAgIHRhZyA9IGZpeG5hbWUodGFnKQogICAgICAgICBhdHRyaWIgPSB7fQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRyaWJfaW4uaXRlbXMoKToKLSAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGtleSldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQotCi0gICAgZGVmIF9zdGFydF9saXN0KHNlbGYsIHRhZywgYXR0cmliX2luKToKLSAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKLSAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCi0gICAgICAgIGF0dHJpYiA9IHt9Ci0gICAgICAgIGlmIGF0dHJpYl9pbjoKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyaWJfaW4pLCAyKToKLSAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyaWJfaW5baV0pXSA9IGF0dHJpYl9pbltpKzFdCisgICAgICAgIGlmIGF0dHJfbGlzdDoKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyX2xpc3QpLCAyKToKKyAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyX2xpc3RbaV0pXSA9IGF0dHJfbGlzdFtpKzFdCiAgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfZW5kKHNlbGYsIHRhZyk6CkBAIC0xNjUwLDE1ICsxNjEzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQogICAgICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAKLSAgICAjIwotICAgICMgKERlcHJlY2F0ZWQpIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLgotICAgICMKLSAgICAjIEBwYXJhbSBuYW1lIERvY3R5cGUgbmFtZS4KLSAgICAjIEBwYXJhbSBwdWJpZCBQdWJsaWMgaWRlbnRpZmllci4KLSAgICAjIEBwYXJhbSBzeXN0ZW0gU3lzdGVtIGlkZW50aWZpZXIuCi0KICAgICBkZWYgZG9jdHlwZShzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtKToKLSAgICAgICAgIiIiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuIiIiCisgICAgICAgICIiIihEZXByZWNhdGVkKSAgSGFuZGxlIGRvY3R5cGUgZGVjbGFyYXRpb24KKworICAgICAgICAqbmFtZSogaXMgdGhlIERvY3R5cGUgbmFtZSwgKnB1YmlkKiBpcyB0aGUgcHVibGljIGlkZW50aWZpZXIsCisgICAgICAgIGFuZCAqc3lzdGVtKiBpcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuICBEZWZpbmUgZG9jdHlwZSgpICIKICAgICAgICAgICAgICJtZXRob2Qgb24gdGhlIFRyZWVCdWlsZGVyIHRhcmdldC4iLApAQCAtMTY2OCwyNCArMTYyOSwxNSBAQAogICAgICMgc2VudGluZWwsIGlmIGRvY3R5cGUgaXMgcmVkZWZpbmVkIGluIGEgc3ViY2xhc3MKICAgICBfX2RvY3R5cGUgPSBkb2N0eXBlCiAKLSAgICAjIwotICAgICMgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLgotICAgICMKLSAgICAjIEBwYXJhbSBkYXRhIEVuY29kZWQgZGF0YS4KLQogICAgIGRlZiBmZWVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJGZWVkIGVuY29kZWQgZGF0YSB0byBwYXJzZXIuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKGRhdGEsIDApCiAgICAgICAgIGV4Y2VwdCBzZWxmLl9lcnJvciBhcyB2OgogICAgICAgICAgICAgc2VsZi5fcmFpc2VlcnJvcih2KQogCi0gICAgIyMKLSAgICAjIEZpbmlzaGVzIGZlZWRpbmcgZGF0YSB0byB0aGUgcGFyc2VyLgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gZWxlbWVudCBzdHJ1Y3R1cmUuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmluaXNoIGZlZWRpbmcgZGF0YSB0byBwYXJzZXIgYW5kIHJldHVybiBlbGVtZW50IHN0cnVjdHVyZS4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIiIsIDEpICMgZW5kIG9mIGRhdGEKICAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CkBAIC0xNzA0LDEwMyArMTY1NiwxMiBAQAogCiAjIEltcG9ydCB0aGUgQyBhY2NlbGVyYXRvcnMKIHRyeToKKyAgICAjIEVsZW1lbnQgaXMgZ29pbmcgdG8gYmUgc2hhZG93ZWQgYnkgdGhlIEMgaW1wbGVtZW50YXRpb24uIFdlIG5lZWQgdG8ga2VlcAorICAgICMgdGhlIFB5dGhvbiB2ZXJzaW9uIG9mIGl0IGFjY2Vzc2libGUgZm9yIHNvbWUgImNyZWF0aXZlIiBieSBleHRlcm5hbCBjb2RlCisgICAgIyAoc2VlIHRlc3RzKQorICAgIF9FbGVtZW50X1B5ID0gRWxlbWVudAorCiAgICAgIyBFbGVtZW50LCBTdWJFbGVtZW50LCBQYXJzZUVycm9yLCBUcmVlQnVpbGRlciwgWE1MUGFyc2VyCiAgICAgZnJvbSBfZWxlbWVudHRyZWUgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCi1lbHNlOgotICAgICMgT3ZlcndyaXRlICdFbGVtZW50VHJlZS5wYXJzZScgYW5kICdpdGVycGFyc2UnIHRvIHVzZSB0aGUgQyBYTUxQYXJzZXIKLQotICAgIGNsYXNzIEVsZW1lbnRUcmVlKEVsZW1lbnRUcmVlKToKLSAgICAgICAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOgotICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgJ3JlYWQnKToKLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgJ3JiJykKLSAgICAgICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgcGFyc2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlKHNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBpZiBjbG9zZV9zb3VyY2U6Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCi0KLSAgICBjbGFzcyBpdGVycGFyc2U6Ci0gICAgICAgICIiIlBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LgotCi0gICAgICAgIFJlcG9ydHMgd2hhdOKAmXMgZ29pbmcgb24gdG8gdGhlIHVzZXIuICdzb3VyY2UnIGlzIGEgZmlsZW5hbWUgb3IgZmlsZQotICAgICAgICBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4gJ2V2ZW50cycgaXMgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4KLSAgICAgICAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZAotICAgICAgICAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKLSAgICAgICAgaW5mb3JtYXRpb24pLiBJZiAnZXZlbnRzJyBpcyBvbWl0dGVkLCBvbmx5ICJlbmQiIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCi0gICAgICAgICdwYXJzZXInIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKLSAgICAgICAgWE1MUGFyc2VyIHBhcnNlciBpcyB1c2VkLiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZwotICAgICAgICAoZXZlbnQsIGVsZW0pIHBhaXJzLgotICAgICAgICAiIiIKLQotICAgICAgICByb290ID0gTm9uZQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZXZlbnRzPU5vbmUsIHBhcnNlcj1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZmlsZSwgJ3JlYWQnKToKLSAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZQotICAgICAgICAgICAgc2VsZi5fZXZlbnRzID0gW10KLSAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQotICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCi0gICAgICAgICAgICBzZWxmLl9wYXJzZXIuX3NldGV2ZW50cyhzZWxmLl9ldmVudHMsIGV2ZW50cykKLQotICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYuX2V2ZW50c1tzZWxmLl9pbmRleF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBzZWxmLl9lcnJvcgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NCkKLSAgICAgICAgICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBleGMKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSMgY29tcGF0aWJpbGl0eQotWE1MVHJlZUJ1aWxkZXIgPSBYTUxQYXJzZXIKLQotIyB3b3JrYXJvdW5kIGNpcmN1bGFyIGltcG9ydC4KLXRyeToKLSAgICBmcm9tIEVsZW1lbnRDMTROIGltcG9ydCBfc2VyaWFsaXplX2MxNG4KLSAgICBfc2VyaWFsaXplWyJjMTRuIl0gPSBfc2VyaWFsaXplX2MxNG4KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIveG1scnBjL2NsaWVudC5weSBiL0xpYi94bWxycGMvY2xpZW50LnB5CmluZGV4IDBmOTUyMmEuLjllMGYwNjkgMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGMvY2xpZW50LnB5CisrKyBiL0xpYi94bWxycGMvY2xpZW50LnB5CkBAIC0xMDQ1LDcgKzEwNDUsNyBAQAogICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0icmIiLCBmaWxlb2JqPWYpCiAgICAgdHJ5OgogICAgICAgICBkZWNvZGVkID0gZ3pmLnJlYWQoKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGRhdGEiKQogICAgIGYuY2xvc2UoKQogICAgIGd6Zi5jbG9zZSgpCkBAIC0xMTMwLDggKzExMzAsOSBAQAogICAgICAgICBmb3IgaSBpbiAoMCwgMSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2luZ2xlX3JlcXVlc3QoaG9zdCwgaGFuZGxlciwgcmVxdWVzdF9ib2R5LCB2ZXJib3NlKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGkgb3IgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVTRVQsIGVycm5vLkVDT05OQUJPUlRFRCwgZXJybm8uRVBJUEUpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRVBJUEUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZXhjZXB0IGh0dHAuY2xpZW50LkJhZFN0YXR1c0xpbmU6ICNjbG9zZSBhZnRlciB3ZSBzZW50IHJlcXVlc3QKICAgICAgICAgICAgICAgICBpZiBpOgpAQCAtMTM4NSw3ICsxMzg2LDcgQEAKICAgICAgICAgIyBnZXQgdGhlIHVybAogICAgICAgICB0eXBlLCB1cmkgPSB1cmxsaWIucGFyc2Uuc3BsaXR0eXBlKHVyaSkKICAgICAgICAgaWYgdHlwZSBub3QgaW4gKCJodHRwIiwgImh0dHBzIik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bnN1cHBvcnRlZCBYTUwtUlBDIHByb3RvY29sIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInVuc3VwcG9ydGVkIFhNTC1SUEMgcHJvdG9jb2wiKQogICAgICAgICBzZWxmLl9faG9zdCwgc2VsZi5fX2hhbmRsZXIgPSB1cmxsaWIucGFyc2Uuc3BsaXRob3N0KHVyaSkKICAgICAgICAgaWYgbm90IHNlbGYuX19oYW5kbGVyOgogICAgICAgICAgICAgc2VsZi5fX2hhbmRsZXIgPSAiL1JQQzIiCmRpZmYgLS1naXQgYS9MaWIveG1scnBjL3NlcnZlci5weSBiL0xpYi94bWxycGMvc2VydmVyLnB5CmluZGV4IDc4Y2E0ZTAuLmQ5MTQyODIgMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGMvc2VydmVyLnB5CisrKyBiL0xpYi94bWxycGMvc2VydmVyLnB5CkBAIC01ODQsMTMgKzU4NCw2IEBACiAgICAgICAgIFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgYWxsb3dfbm9uZSwgZW5jb2RpbmcsIHVzZV9idWlsdGluX3R5cGVzKQogICAgICAgICBzb2NrZXRzZXJ2ZXIuVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIHJlcXVlc3RIYW5kbGVyLCBiaW5kX2FuZF9hY3RpdmF0ZSkKIAotICAgICAgICAjIFtCdWcgIzEyMjI3OTBdIElmIHBvc3NpYmxlLCBzZXQgY2xvc2Utb24tZXhlYyBmbGFnOyBpZiBhCi0gICAgICAgICMgbWV0aG9kIHNwYXducyBhIHN1YnByb2Nlc3MsIHRoZSBzdWJwcm9jZXNzIHNob3VsZG4ndCBoYXZlCi0gICAgICAgICMgdGhlIGxpc3RlbmluZyBzb2NrZXQgb3Blbi4KLSAgICAgICAgaWYgZmNudGwgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoZmNudGwsICdGRF9DTE9FWEVDJyk6Ci0gICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfR0VURkQpCi0gICAgICAgICAgICBmbGFncyB8PSBmY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBmY250bC5mY250bChzZWxmLmZpbGVubygpLCBmY250bC5GX1NFVEZELCBmbGFncykKIAogY2xhc3MgTXVsdGlQYXRoWE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlcik6CiAgICAgIiIiTXVsdGlwYXRoIFhNTC1SUEMgU2VydmVyCmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IDkyYzk4YWIuLmZhZDUyYTIgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHN0YXQKQEAgLTE2NCw3ICsxNjQsNyBAQAogICAgIHRyeToKICAgICAgICAgaWYgX0VuZFJlY0RhdGEoZnApOgogICAgICAgICAgICAgcmV0dXJuIFRydWUgICAgICAgICAjIGZpbGUgaGFzIGNvcnJlY3QgbWFnaWMgbnVtYmVyCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gRmFsc2UKIApAQCAtMTgwLDcgKzE4MCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jaGVja196aXBmaWxlKGZwKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgcmV0dXJuIHJlc3VsdAogCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGZwaW4uc2VlayhvZmZzZXQgLSBzaXplRW5kQ2VudERpcjY0TG9jYXRvciwgMikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBJZiB0aGUgc2VlayBmYWlscywgdGhlIGZpbGUgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIGEgWklQNjQKICAgICAgICAgIyBlbmQtb2YtYXJjaGl2ZSByZWNvcmQsIHNvIGp1c3QgcmV0dXJuIHRoZSBlbmQgcmVjb3JkIHdlIHdlcmUgZ2l2ZW4uCiAgICAgICAgIHJldHVybiBlbmRyZWMKQEAgLTIxMSw4ICsyMTEsOCBAQAogICAgIGlmIGxlbihkYXRhKSAhPSBzaXplRW5kQ2VudERpcjY0OgogICAgICAgICByZXR1cm4gZW5kcmVjCiAgICAgc2lnLCBzeiwgY3JlYXRlX3ZlcnNpb24sIHJlYWRfdmVyc2lvbiwgZGlza19udW0sIGRpc2tfZGlyLCBcCi0gICAgICAgICAgICBkaXJjb3VudCwgZGlyY291bnQyLCBkaXJzaXplLCBkaXJvZmZzZXQgPSBcCi0gICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmU2NCwgZGF0YSkKKyAgICAgICAgZGlyY291bnQsIGRpcmNvdW50MiwgZGlyc2l6ZSwgZGlyb2Zmc2V0ID0gXAorICAgICAgICBzdHJ1Y3QudW5wYWNrKHN0cnVjdEVuZEFyY2hpdmU2NCwgZGF0YSkKICAgICBpZiBzaWcgIT0gc3RyaW5nRW5kQXJjaGl2ZTY0OgogICAgICAgICByZXR1cm4gZW5kcmVjCiAKQEAgLTI0Miw3ICsyNDIsNyBAQAogICAgICMgZmlsZSBpZiB0aGlzIGlzIHRoZSBjYXNlKS4KICAgICB0cnk6CiAgICAgICAgIGZwaW4uc2Vlaygtc2l6ZUVuZENlbnREaXIsIDIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAgICAgZGF0YSA9IGZwaW4ucmVhZCgpCiAgICAgaWYgKGxlbihkYXRhKSA9PSBzaXplRW5kQ2VudERpciBhbmQKQEAgLTI5MiwyNiArMjkyLDI2IEBACiAgICAgIiIiQ2xhc3Mgd2l0aCBhdHRyaWJ1dGVzIGRlc2NyaWJpbmcgZWFjaCBmaWxlIGluIHRoZSBaSVAgYXJjaGl2ZS4iIiIKIAogICAgIF9fc2xvdHNfXyA9ICgKLSAgICAgICAgICAgICdvcmlnX2ZpbGVuYW1lJywKLSAgICAgICAgICAgICdmaWxlbmFtZScsCi0gICAgICAgICAgICAnZGF0ZV90aW1lJywKLSAgICAgICAgICAgICdjb21wcmVzc190eXBlJywKLSAgICAgICAgICAgICdjb21tZW50JywKLSAgICAgICAgICAgICdleHRyYScsCi0gICAgICAgICAgICAnY3JlYXRlX3N5c3RlbScsCi0gICAgICAgICAgICAnY3JlYXRlX3ZlcnNpb24nLAotICAgICAgICAgICAgJ2V4dHJhY3RfdmVyc2lvbicsCi0gICAgICAgICAgICAncmVzZXJ2ZWQnLAotICAgICAgICAgICAgJ2ZsYWdfYml0cycsCi0gICAgICAgICAgICAndm9sdW1lJywKLSAgICAgICAgICAgICdpbnRlcm5hbF9hdHRyJywKLSAgICAgICAgICAgICdleHRlcm5hbF9hdHRyJywKLSAgICAgICAgICAgICdoZWFkZXJfb2Zmc2V0JywKLSAgICAgICAgICAgICdDUkMnLAotICAgICAgICAgICAgJ2NvbXByZXNzX3NpemUnLAotICAgICAgICAgICAgJ2ZpbGVfc2l6ZScsCi0gICAgICAgICAgICAnX3Jhd190aW1lJywKLSAgICAgICAgKQorICAgICAgICAnb3JpZ19maWxlbmFtZScsCisgICAgICAgICdmaWxlbmFtZScsCisgICAgICAgICdkYXRlX3RpbWUnLAorICAgICAgICAnY29tcHJlc3NfdHlwZScsCisgICAgICAgICdjb21tZW50JywKKyAgICAgICAgJ2V4dHJhJywKKyAgICAgICAgJ2NyZWF0ZV9zeXN0ZW0nLAorICAgICAgICAnY3JlYXRlX3ZlcnNpb24nLAorICAgICAgICAnZXh0cmFjdF92ZXJzaW9uJywKKyAgICAgICAgJ3Jlc2VydmVkJywKKyAgICAgICAgJ2ZsYWdfYml0cycsCisgICAgICAgICd2b2x1bWUnLAorICAgICAgICAnaW50ZXJuYWxfYXR0cicsCisgICAgICAgICdleHRlcm5hbF9hdHRyJywKKyAgICAgICAgJ2hlYWRlcl9vZmZzZXQnLAorICAgICAgICAnQ1JDJywKKyAgICAgICAgJ2NvbXByZXNzX3NpemUnLAorICAgICAgICAnZmlsZV9zaXplJywKKyAgICAgICAgJ19yYXdfdGltZScsCisgICAgKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPSJOb05hbWUiLCBkYXRlX3RpbWU9KDE5ODAsMSwxLDAsMCwwKSk6CiAgICAgICAgIHNlbGYub3JpZ19maWxlbmFtZSA9IGZpbGVuYW1lICAgIyBPcmlnaW5hbCBmaWxlIG5hbWUgaW4gYXJjaGl2ZQpAQCAtMzc2LDcgKzM3Niw3IEBACiAgICAgICAgIGlmIHppcDY0OgogICAgICAgICAgICAgZm10ID0gJzxISFFRJwogICAgICAgICAgICAgZXh0cmEgPSBleHRyYSArIHN0cnVjdC5wYWNrKGZtdCwKLSAgICAgICAgICAgICAgICAgICAgMSwgc3RydWN0LmNhbGNzaXplKGZtdCktNCwgZmlsZV9zaXplLCBjb21wcmVzc19zaXplKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHN0cnVjdC5jYWxjc2l6ZShmbXQpLTQsIGZpbGVfc2l6ZSwgY29tcHJlc3Nfc2l6ZSkKICAgICAgICAgaWYgZmlsZV9zaXplID4gWklQNjRfTElNSVQgb3IgY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgaWYgbm90IHppcDY0OgogICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgiRmlsZXNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKQEAgLTM5NSwxMCArMzk1LDEwIEBACiAgICAgICAgIHNlbGYuY3JlYXRlX3ZlcnNpb24gPSBtYXgobWluX3ZlcnNpb24sIHNlbGYuY3JlYXRlX3ZlcnNpb24pCiAgICAgICAgIGZpbGVuYW1lLCBmbGFnX2JpdHMgPSBzZWxmLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgaGVhZGVyID0gc3RydWN0LnBhY2soc3RydWN0RmlsZUhlYWRlciwgc3RyaW5nRmlsZUhlYWRlciwKLSAgICAgICAgICAgICAgICAgc2VsZi5leHRyYWN0X3ZlcnNpb24sIHNlbGYucmVzZXJ2ZWQsIGZsYWdfYml0cywKLSAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLCBDUkMsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leHRyYWN0X3ZlcnNpb24sIHNlbGYucmVzZXJ2ZWQsIGZsYWdfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLCBDUkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhKSkKICAgICAgICAgcmV0dXJuIGhlYWRlciArIGZpbGVuYW1lICsgZXh0cmEKIAogICAgIGRlZiBfZW5jb2RlRmlsZW5hbWVGbGFncyhzZWxmKToKQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgIGRlZiBfaW5pdChzZWxmKToKICAgICAgICAgcHJvcHMgPSBsem1hLl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoeydpZCc6IGx6bWEuRklMVEVSX0xaTUExfSkKICAgICAgICAgc2VsZi5fY29tcCA9IGx6bWEuTFpNQUNvbXByZXNzb3IobHptYS5GT1JNQVRfUkFXLCBmaWx0ZXJzPVsKLSAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsIHByb3BzKQorICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLCBwcm9wcykKICAgICAgICAgXSkKICAgICAgICAgcmV0dXJuIHN0cnVjdC5wYWNrKCc8QkJIJywgOSwgNCwgbGVuKHByb3BzKSkgKyBwcm9wcwogCkBAIC01NDMsOCArNTQzLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCiAKICAgICAgICAgICAgIHNlbGYuX2RlY29tcCA9IGx6bWEuTFpNQURlY29tcHJlc3Nvcihsem1hLkZPUk1BVF9SQVcsIGZpbHRlcnM9WwotICAgICAgICAgICAgICAgICAgICBsem1hLl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMobHptYS5GSUxURVJfTFpNQTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZFs0OjQgKyBwc2l6ZV0pCisgICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkWzQ6NCArIHBzaXplXSkKICAgICAgICAgICAgIF0pCiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fdW5jb25zdW1lZFs0ICsgcHNpemU6XQogICAgICAgICAgICAgZGVsIHNlbGYuX3VuY29uc3VtZWQKQEAgLTU4MCwxNSArNTgwLDE1IEBACiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfREVGTEFURUQ6CiAgICAgICAgIGlmIG5vdCB6bGliOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSB6bGliIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiKQogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0JaSVAyOgogICAgICAgICBpZiBub3QgYnoyOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBiejIgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBiejIgbW9kdWxlIikKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9MWk1BOgogICAgICAgICBpZiBub3QgbHptYToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgbHptYSBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGx6bWEgbW9kdWxlIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRoYXQgY29tcHJlc3Npb24gbWV0aG9kIGlzIG5vdCBzdXBwb3J0ZWQiKQogCkBAIC01OTYsNyArNTk2LDcgQEAKIGRlZiBfZ2V0X2NvbXByZXNzb3IoY29tcHJlc3NfdHlwZSk6CiAgICAgaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfREVGTEFURUQ6CiAgICAgICAgIHJldHVybiB6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9ERUZBVUxUX0NPTVBSRVNTSU9OLAotICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemxpYi5ERUZMQVRFRCwgLTE1KQogICAgIGVsaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfQlpJUDI6CiAgICAgICAgIHJldHVybiBiejIuQloyQ29tcHJlc3NvcigpCiAgICAgZWxpZiBjb21wcmVzc190eXBlID09IFpJUF9MWk1BOgpAQCAtODM2LDggKzgzNiw4IEBACiAgICAgICAgICAgICBuID0gbWF4KG4sIHNlbGYuTUlOX1JFQURfU0laRSkKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhkYXRhLCBuKQogICAgICAgICAgICAgc2VsZi5fZW9mID0gKHNlbGYuX2RlY29tcHJlc3Nvci5lb2Ygb3IKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA8PSAwIGFuZAotICAgICAgICAgICAgICAgICAgICBub3Qgc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IDw9IDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCiAgICAgICAgICAgICBpZiBzZWxmLl9lb2Y6CiAgICAgICAgICAgICAgICAgZGF0YSArPSBzZWxmLl9kZWNvbXByZXNzb3IuZmx1c2goKQogICAgICAgICBlbHNlOgpAQCAtODc2LDcgKzg3Niw3IEBACiBjbGFzcyBaaXBGaWxlOgogICAgICIiIiBDbGFzcyB3aXRoIG1ldGhvZHMgdG8gb3BlbiwgcmVhZCwgd3JpdGUsIGNsb3NlLCBsaXN0IHppcCBmaWxlcy4KIAotICAgIHogPSBaaXBGaWxlKGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKQorICAgIHogPSBaaXBGaWxlKGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCiAKICAgICBmaWxlOiBFaXRoZXIgdGhlIHBhdGggdG8gdGhlIGZpbGUsIG9yIGEgZmlsZS1saWtlIG9iamVjdC4KICAgICAgICAgICBJZiBpdCBpcyBhIHBhdGgsIHRoZSBmaWxlIHdpbGwgYmUgb3BlbmVkIGFuZCBjbG9zZWQgYnkgWmlwRmlsZS4KQEAgLTg5Miw3ICs4OTIsNyBAQAogICAgIGZwID0gTm9uZSAgICAgICAgICAgICAgICAgICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0CiAgICAgX3dpbmRvd3NfaWxsZWdhbF9uYW1lX3RyYW5zX3RhYmxlID0gTm9uZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PUZhbHNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbW9kZT0iciIsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSk6CiAgICAgICAgICIiIk9wZW4gdGhlIFpJUCBmaWxlIHdpdGggbW9kZSByZWFkICJyIiwgd3JpdGUgInciIG9yIGFwcGVuZCAiYSIuIiIiCiAgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJ3IiwgImEiKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignWmlwRmlsZSgpIHJlcXVpcmVzIG1vZGUgInIiLCAidyIsIG9yICJhIicpCkBAIC05MTcsNyArOTE3LDcgQEAKICAgICAgICAgICAgIG1vZGVEaWN0ID0geydyJyA6ICdyYicsICd3JzogJ3diJywgJ2EnIDogJ3IrYid9CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IGlvLm9wZW4oZmlsZSwgbW9kZURpY3RbbW9kZV0pCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gJ2EnOgogICAgICAgICAgICAgICAgICAgICBtb2RlID0ga2V5ID0gJ3cnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQpAQCAtOTY4LDcgKzk2OCw3IEBACiAgICAgICAgIGZwID0gc2VsZi5mcAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBlbmRyZWM6CiAgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKQEAgLTEwMTYsOCArMTAxNiw4IEBACiAgICAgICAgICAgICB4LmNvbW1lbnQgPSBmcC5yZWFkKGNlbnRkaXJbX0NEX0NPTU1FTlRfTEVOR1RIXSkKICAgICAgICAgICAgIHguaGVhZGVyX29mZnNldCA9IGNlbnRkaXJbX0NEX0xPQ0FMX0hFQURFUl9PRkZTRVRdCiAgICAgICAgICAgICAoeC5jcmVhdGVfdmVyc2lvbiwgeC5jcmVhdGVfc3lzdGVtLCB4LmV4dHJhY3RfdmVyc2lvbiwgeC5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAotICAgICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KKyAgICAgICAgICAgICB4LmZsYWdfYml0cywgeC5jb21wcmVzc190eXBlLCB0LCBkLAorICAgICAgICAgICAgIHguQ1JDLCB4LmNvbXByZXNzX3NpemUsIHguZmlsZV9zaXplKSA9IGNlbnRkaXJbMToxMl0KICAgICAgICAgICAgIGlmIHguZXh0cmFjdF92ZXJzaW9uID4gTUFYX0VYVFJBQ1RfVkVSU0lPTjoKICAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJ6aXAgZmlsZSB2ZXJzaW9uICUuMWYiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4LmV4dHJhY3RfdmVyc2lvbiAvIDEwKSkKQEAgLTEwMjUsNyArMTAyNSw3IEBACiAgICAgICAgICAgICAjIENvbnZlcnQgZGF0ZS90aW1lIGNvZGUgdG8gKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbiwgc2VjKQogICAgICAgICAgICAgeC5fcmF3X3RpbWUgPSB0CiAgICAgICAgICAgICB4LmRhdGVfdGltZSA9ICggKGQ+PjkpKzE5ODAsIChkPj41KSYweEYsIGQmMHgxRiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Pj4xMSwgKHQ+PjUpJjB4M0YsICh0JjB4MUYpICogMiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQogCiAgICAgICAgICAgICB4Ll9kZWNvZGVFeHRyYSgpCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSB4LmhlYWRlcl9vZmZzZXQgKyBjb25jYXQKQEAgLTExMDMsNyArMTEwMyw3IEBACiAgICAgICAgIGlmIGxlbihjb21tZW50KSA+PSBaSVBfTUFYX0NPTU1FTlQ6CiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgIHByaW50KCdBcmNoaXZlIGNvbW1lbnQgaXMgdG9vIGxvbmc7IHRydW5jYXRpbmcgdG8gJWQgYnl0ZXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAlIFpJUF9NQVhfQ09NTUVOVCkKKyAgICAgICAgICAgICAgICAgICAgICAlIFpJUF9NQVhfQ09NTUVOVCkKICAgICAgICAgICAgIGNvbW1lbnQgPSBjb21tZW50WzpaSVBfTUFYX0NPTU1FTlRdCiAgICAgICAgIHNlbGYuX2NvbW1lbnQgPSBjb21tZW50CiAgICAgICAgIHNlbGYuX2RpZE1vZGlmeSA9IFRydWUKQEAgLTExMTcsMTEgKzExMTcsMTUgQEAKICAgICAgICAgIiIiUmV0dXJuIGZpbGUtbGlrZSBvYmplY3QgZm9yICduYW1lJy4iIiIKICAgICAgICAgaWYgbW9kZSBub3QgaW4gKCJyIiwgIlUiLCAiclUiKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignb3BlbigpIHJlcXVpcmVzIG1vZGUgInIiLCAiVSIsIG9yICJyVSInKQorICAgICAgICBpZiAnVScgaW4gbW9kZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgcHdkIGFuZCBub3QgaXNpbnN0YW5jZShwd2QsIGJ5dGVzKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicHdkOiBleHBlY3RlZCBieXRlcywgZ290ICVzIiAlIHR5cGUocHdkKSkKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byByZWFkIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byByZWFkIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICAjIE9ubHkgb3BlbiBhIG5ldyBmaWxlIGZvciBpbnN0YW5jZXMgd2hlcmUgd2Ugd2VyZSBub3QKICAgICAgICAgIyBnaXZlbiBhIGZpbGUgb2JqZWN0IGluIHRoZSBjb25zdHJ1Y3RvcgpAQCAtMTI5NCw3ICsxMjk4LDcgQEAKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignd3JpdGUoKSByZXF1aXJlcyBtb2RlICJ3IiBvciAiYSInKQogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAgICAgICAgIF9jaGVja19jb21wcmVzc2lvbih6aW5mby5jb21wcmVzc190eXBlKQogICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVDoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgpAQCAtMTMwMiwxNCArMTMwNiwxNCBAQAogICAgICAgICBpZiB6aW5mby5oZWFkZXJfb2Zmc2V0ID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3daaXA2NDoKICAgICAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgIlppcGZpbGUgc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQorICAgICAgICAgICAgICAgICAgICAiWmlwZmlsZSBzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgZmlsZW5hbWUsIGFyY25hbWU9Tm9uZSwgY29tcHJlc3NfdHlwZT1Ob25lKToKICAgICAgICAgIiIiUHV0IHRoZSBieXRlcyBmcm9tIGZpbGVuYW1lIGludG8gdGhlIGFyY2hpdmUgdW5kZXIgdGhlIG5hbWUKICAgICAgICAgYXJjbmFtZS4iIiIKICAgICAgICAgaWYgbm90IHNlbGYuZnA6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQogCiAgICAgICAgIHN0ID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgaXNkaXIgPSBzdGF0LlNfSVNESVIoc3Quc3RfbW9kZSkKQEAgLTEzNTYsNyArMTM2MCw3IEBACiAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID0gY29tcHJlc3Nfc2l6ZSA9IDAKICAgICAgICAgICAgICMgQ29tcHJlc3NlZCBzaXplIGNhbiBiZSBsYXJnZXIgdGhhbiB1bmNvbXByZXNzZWQgc2l6ZQogICAgICAgICAgICAgemlwNjQgPSBzZWxmLl9hbGxvd1ppcDY0IGFuZCBcCi0gICAgICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSAqIDEuMDUgPiBaSVA2NF9MSU1JVAorICAgICAgICAgICAgICAgIHppbmZvLmZpbGVfc2l6ZSAqIDEuMDUgPiBaSVA2NF9MSU1JVAogICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aW5mby5GaWxlSGVhZGVyKHppcDY0KSkKICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IDAKICAgICAgICAgICAgIHdoaWxlIDE6CkBAIC0xNDEwLDcgKzE0MTQsNyBAQAogCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICB6aW5mby5maWxlX3NpemUgPSBsZW4oZGF0YSkgICAgICAgICAgICAjIFVuY29tcHJlc3NlZCBzaXplCiAgICAgICAgIHppbmZvLmhlYWRlcl9vZmZzZXQgPSBzZWxmLmZwLnRlbGwoKSAgICAjIFN0YXJ0IG9mIGhlYWRlciBkYXRhCkBAIC0xNDMwLDcgKzE0MzQsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IHppbmZvLmZpbGVfc2l6ZQogICAgICAgICB6aXA2NCA9IHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIFwKLSAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVAogICAgICAgICBpZiB6aXA2NCBhbmQgbm90IHNlbGYuX2FsbG93WmlwNjQ6CiAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCiAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCkBAIC0xNDM5LDcgKzE0NDMsNyBAQAogICAgICAgICAgICAgIyBXcml0ZSBDUkMgYW5kIGZpbGUgc2l6ZXMgYWZ0ZXIgdGhlIGZpbGUgZGF0YQogICAgICAgICAgICAgZm10ID0gJzxMUVEnIGlmIHppcDY0IGVsc2UgJzxMTEwnCiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHN0cnVjdC5wYWNrKGZtdCwgemluZm8uQ1JDLCB6aW5mby5jb21wcmVzc19zaXplLAotICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKICAgICAgICAgc2VsZi5mcC5mbHVzaCgpCiAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQogICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KQEAgLTE0NjUsNyArMTQ2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGRvc3RpbWUgPSBkdFszXSA8PCAxMSB8IGR0WzRdIDw8IDUgfCAoZHRbNV0gLy8gMikKICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBbXQogICAgICAgICAgICAgICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgICAgICAgICBvciB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5hcHBlbmQoemluZm8uZmlsZV9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmNvbXByZXNzX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUgPSAweGZmZmZmZmZmCkBAIC0xNDg1LDggKzE0ODksOCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBleHRyYToKICAgICAgICAgICAgICAgICAgICAgICAgICMgQXBwZW5kIGEgWklQNjQgZmllbGQgdG8gdGhlIGV4dHJhJ3MKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2RhdGEgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxISCcgKyAnUScqbGVuKGV4dHJhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOCpsZW4oZXh0cmEpLCAqZXh0cmEpICsgZXh0cmFfZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgOCpsZW4oZXh0cmEpLCAqZXh0cmEpICsgZXh0cmFfZGF0YQogCiAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fdmVyc2lvbiA9IFpJUDY0X1ZFUlNJT04KIApAQCAtMTUwMCwyMSArMTUwNCwyMSBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZmxhZ19iaXRzID0gemluZm8uX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQogICAgICAgICAgICAgICAgICAgICAgICAgY2VudGRpciA9IHN0cnVjdC5wYWNrKHN0cnVjdENlbnRyYWxEaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IERlcHJlY2F0aW9uV2FybmluZzoKICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KChzdHJ1Y3RDZW50cmFsRGlyLCBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oemluZm8uZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShjZW50ZGlyKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKGZpbGVuYW1lKQpAQCAtMTUzMSwyMiArMTUzNSwyMiBAQAogICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA+IFpJUDY0X0xJTUlUKToKICAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHdyaXRlIHRoZSBaSVA2NCBlbmQtb2YtYXJjaGl2ZSByZWNvcmRzCiAgICAgICAgICAgICAgICAgICAgIHppcDY0ZW5kcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQsIDQ1LCA0NSwgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRlbmRyZWMpCiAKICAgICAgICAgICAgICAgICAgICAgemlwNjRsb2NyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvciwgMCwgcG9zMiwgMSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aXA2NGxvY3JlYykKICAgICAgICAgICAgICAgICAgICAgY2VudERpckNvdW50ID0gbWluKGNlbnREaXJDb3VudCwgMHhGRkZGKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA9IG1pbihjZW50RGlyU2l6ZSwgMHhGRkZGRkZGRikKICAgICAgICAgICAgICAgICAgICAgY2VudERpck9mZnNldCA9IG1pbihjZW50RGlyT2Zmc2V0LCAweEZGRkZGRkZGKQogCiAgICAgICAgICAgICAgICAgZW5kcmVjID0gc3RydWN0LnBhY2soc3RydWN0RW5kQXJjaGl2ZSwgc3RyaW5nRW5kQXJjaGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQsIGxlbihzZWxmLl9jb21tZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCwgbGVuKHNlbGYuX2NvbW1lbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoZW5kcmVjKQogICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoc2VsZi5fY29tbWVudCkKICAgICAgICAgICAgICAgICBzZWxmLmZwLmZsdXNoKCkKQEAgLTE1NjEsMTIgKzE1NjUsMTIgQEAKICAgICAiIiJDbGFzcyB0byBjcmVhdGUgWklQIGFyY2hpdmVzIHdpdGggUHl0aG9uIGxpYnJhcnkgZmlsZXMgYW5kIHBhY2thZ2VzLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELAotICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PUZhbHNlLCBvcHRpbWl6ZT0tMSk6CisgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSwgb3B0aW1pemU9LTEpOgogICAgICAgICBaaXBGaWxlLl9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9bW9kZSwgY29tcHJlc3Npb249Y29tcHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1hbGxvd1ppcDY0KQogICAgICAgICBzZWxmLl9vcHRpbWl6ZSA9IG9wdGltaXplCiAKLSAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIpOgorICAgIGRlZiB3cml0ZXB5KHNlbGYsIHBhdGhuYW1lLCBiYXNlbmFtZT0iIiwgZmlsdGVyZnVuYz1Ob25lKToKICAgICAgICAgIiIiQWRkIGFsbCBmaWxlcyBmcm9tICJwYXRobmFtZSIgdG8gdGhlIFpJUCBhcmNoaXZlLgogCiAgICAgICAgIElmIHBhdGhuYW1lIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIHNlYXJjaCB0aGUgZGlyZWN0b3J5IGFuZApAQCAtMTU3Nyw3ICsxNTgxLDE0IEBACiAgICAgICAgIGFyY2hpdmUuICBBZGRlZCBtb2R1bGVzIGFyZSBhbHdheXMgbW9kdWxlLnB5byBvciBtb2R1bGUucHljLgogICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGNvbXBpbGUgdGhlIG1vZHVsZS5weSBpbnRvIG1vZHVsZS5weWMgaWYKICAgICAgICAgbmVjZXNzYXJ5LgorICAgICAgICBJZiBmaWx0ZXJmdW5jKHBhdGhuYW1lKSBpcyBnaXZlbiwgaXQgaXMgY2FsbGVkIHdpdGggZXZlcnkgYXJndW1lbnQuCisgICAgICAgIFdoZW4gaXQgaXMgRmFsc2UsIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBpcyBza2lwcGVkLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aG5hbWUpOgorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBsYWJlbCA9ICdwYXRoJyBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKSBlbHNlICdmaWxlJworICAgICAgICAgICAgICAgIHByaW50KCclcyAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSAobGFiZWwsIHBhdGhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKToKICAgICAgICAgICAgIGluaXRuYW1lID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCAiX19pbml0X18ucHkiKQpAQCAtMTYwMiwxMCArMTYxMywxNSBAQAogICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsICJfX2luaXRfXy5weSIpKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBwYWNrYWdlIGRpcmVjdG9yeSwgYWRkIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZXB5KHBhdGgsIGJhc2VuYW1lKSAgIyBSZWN1cnNpdmUgY2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZnVuYz1maWx0ZXJmdW5jKSAgIyBSZWN1cnNpdmUgY2FsbAogICAgICAgICAgICAgICAgICAgICBlbGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaWxlICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhbMDotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmciLCBhcmNuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShmbmFtZSwgYXJjbmFtZSkKQEAgLTE2MTcsMTUgKzE2MzMsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaWxlICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhbMDotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmciLCBhcmNuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShmbmFtZSwgYXJjbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHBhdGhuYW1lWy0zOl0gIT0gIi5weSI6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJykKKyAgICAgICAgICAgICAgICAgICAgJ0ZpbGVzIGFkZGVkIHdpdGggd3JpdGVweSgpIG11c3QgZW5kIHdpdGggIi5weSInKQogICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aG5hbWVbMDotM10sIGJhc2VuYW1lKQogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIGZpbGUiLCBhcmNuYW1lKQpAQCAtMTY1Miw4ICsxNjcyLDggQEAKICAgICAgICAgZmlsZV9weSAgPSBwYXRobmFtZSArICIucHkiCiAgICAgICAgIGZpbGVfcHljID0gcGF0aG5hbWUgKyAiLnB5YyIKICAgICAgICAgZmlsZV9weW8gPSBwYXRobmFtZSArICIucHlvIgotICAgICAgICBweWNhY2hlX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBUcnVlKQotICAgICAgICBweWNhY2hlX3B5byA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKKyAgICAgICAgcHljYWNoZV9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBUcnVlKQorICAgICAgICBweWNhY2hlX3B5byA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIEZhbHNlKQogICAgICAgICBpZiBzZWxmLl9vcHRpbWl6ZSA9PSAtMToKICAgICAgICAgICAgICMgbGVnYWN5IG1vZGU6IHVzZSB3aGF0ZXZlciBmaWxlIGlzIHByZXNlbnQKICAgICAgICAgICAgIGlmIChvcy5wYXRoLmlzZmlsZShmaWxlX3B5bykgYW5kCkBAIC0xNzY0LDEwICsxNzg0LDEwIEBACiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgZm9yIG5tIGluIG9zLmxpc3RkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvWmlwKHpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCiAgICAgICAgICAgICAjIGVsc2U6IGlnbm9yZQogCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycsIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemY6CisgICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycpIGFzIHpmOgogICAgICAgICAgICAgZm9yIHNyYyBpbiBhcmdzWzI6XToKICAgICAgICAgICAgICAgICBhZGRUb1ppcCh6Ziwgc3JjLCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCiAKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggNTZjNzY5YS4uMGE2YjU0NCAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTgsNyArOCw3IEBACiBhbiBJbnN0YWxsZXIgcGFja2FnZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24gcGx1cyBvdGhlciBmaWxlcyBpbiBgYHJlc291cmNlc2BgIAogYW5kIGBgc2NyaXB0c2BgIGFuZCBwbGFjZWQgdGhhdCBvbiBhIGBgLmRtZ2BgIGRpc2sgaW1hZ2UuCiAKLUFzIG9mIFB5dGhvbiAzLjMuMCwgUFNGIHByYWN0aWNlIGlzIHRvIGJ1aWxkIHR3byBpbnN0YWxsZXIgdmFyaWFudHMKK0ZvciBQeXRob24gMy40LjAsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCiBmb3IgZWFjaCByZWxlYXNlLgogCiAxLiAgMzItYml0LW9ubHksIGkzODYgYW5kIFBQQyB1bml2ZXJzYWwsIGNhcGFibGUgb24gcnVubmluZyBvbiBhbGwgbWFjaGluZXMKQEAgLTIyLDggKzIyLDggQEAKICAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogTkN1cnNlcyA1LjkgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTAzNykKLSAgICAgICAgKiBTUUxpdGUgMy43LjEzCi0gICAgICAgICogWFogNS4wLjMKKyAgICAgICAgKiBTUUxpdGUgMy44LjEKKyAgICAgICAgKiBYWiA1LjAuNQogCiAgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIApAQCAtNTYsMTQgKzU2LDE0IEBACiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIE5DdXJzZXMgNS45IChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTUwMzcpCi0gICAgICAgICogU1FMaXRlIDMuNy4xMwotICAgICAgICAqIFhaIDUuMC4zCisgICAgICAgICogU1FMaXRlIDMuOC4xCisgICAgICAgICogWFogNS4wLjUKIAogICAgIC0gdXNlcyBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbnMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKICAgICAgICAgKiByZWFkbGluZSBtb2R1bGUgbGlua3Mgd2l0aCBBcHBsZSBCU0QgZWRpdGxpbmUgKGxpYmVkaXQpCiAKLSAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuOSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuMTUgKG9yIGxhdGVyKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCiAKICAgICAtIHJlY29tbWVuZGVkIGJ1aWxkIGVudmlyb25tZW50OgogCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCBmZDVkNWMzLi5mMDEyNTg3IDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTE5Myw3ICsxOTMsOCBAQAogCiAgICAgTFRfMTBfNSA9IGJvb2woREVQVEFSR0VUIDwgJzEwLjUnKQogCi0gICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgorIyAgIERpc2FibGUgZm9yIG5vdworICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDUpKToKICAgICAgICAgcmVzdWx0LmV4dGVuZChbCiAgICAgICAgICAgZGljdCgKICAgICAgICAgICAgICAgbmFtZT0iVGNsIDguNS4xNSIsCkBAIC0yMzcsOSArMjM4LDkgQEAKICAgICBpZiBnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgMyk6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IlhaIDUuMC4zIiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotNS4wLjMudGFyLmd6IiwKLSAgICAgICAgICAgICAgY2hlY2tzdW09J2ZlZmU1MmY5ZWNkNTIxZGUyYThjZTM4YzIxYTI3NTc0JywKKyAgICAgICAgICAgICAgbmFtZT0iWFogNS4wLjUiLAorICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly90dWthYW5pLm9yZy94ei94ei01LjAuNS50YXIuZ3oiLAorICAgICAgICAgICAgICBjaGVja3N1bT0nMTlkOTI0ZTA2NmI2ZmZmMGJjOWQxOTgxYjRlNTMxOTYnLAogICAgICAgICAgICAgICBjb25maWd1cmVfcHJlPVsKICAgICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nJywKICAgICAgICAgICAgICAgXQpAQCAtMjgyLDkgKzI4Myw5IEBACiAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNy4xMyIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnL3NxbGl0ZS1hdXRvY29uZi0zMDcxMzAwLnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSdjOTdkZjQwM2U4YTNkNWI2N2JiNDA4ZmNkNmFhYmQ4ZScsCisgICAgICAgICAgICAgIG5hbWU9IlNRTGl0ZSAzLjguMSIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnLzIwMTMvc3FsaXRlLWF1dG9jb25mLTMwODAxMDAudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzhiNWEwYTAyZGZjYjBjN2RhZjkwODU2YTVjZmQ0ODVhJywKICAgICAgICAgICAgICAgZXh0cmFfY2ZsYWdzPSgnLU9zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURTUUxJVEVfRU5BQkxFX0ZUUzQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICctRFNRTElURV9FTkFCTEVfRlRTM19QQVJFTlRIRVNJUyAnCkBAIC0zNjQsNiArMzY1LDcgQEAKICMgSW5zdHJ1Y3Rpb25zIGZvciBidWlsZGluZyBwYWNrYWdlcyBpbnNpZGUgdGhlIC5tcGtnLgogZGVmIHBrZ19yZWNpcGVzKCk6CiAgICAgdW5zZWxlY3RlZF9mb3JfcHl0aG9uMyA9ICgnc2VsZWN0ZWQnLCAndW5zZWxlY3RlZCcpW1BZVEhPTl8zXQorICAgIHVuc2VsZWN0ZWRfZm9yX2x0X3B5dGhvbjM0ID0gKCdzZWxlY3RlZCcsICd1bnNlbGVjdGVkJylbZ2V0VmVyc2lvblR1cGxlKCkgPCAoMywgNCldCiAgICAgcmVzdWx0ID0gWwogICAgICAgICBkaWN0KAogICAgICAgICAgICAgbmFtZT0iUHl0aG9uRnJhbWV3b3JrIiwKQEAgLTQzMiwxMCArNDM0LDI3IEBACiAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCiAgICAgICAgICAgICBzb3VyY2U9Ii9lbXB0eS1kaXIiLAogICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCi0gICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAorICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfbHRfcHl0aG9uMzQsCiAgICAgICAgICksCiAgICAgXQogCisgICAgaWYgZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpOgorICAgICAgICByZXN1bHQuYXBwZW5kKAorICAgICAgICAgICAgZGljdCgKKyAgICAgICAgICAgICAgICBuYW1lPSJQeXRob25JbnN0YWxsUGlwIiwKKyAgICAgICAgICAgICAgICBsb25nX25hbWU9Ikluc3RhbGwgb3IgdXBncmFkZSBwaXAiLAorICAgICAgICAgICAgICAgIHJlYWRtZT0iIiJcCisgICAgICAgICAgICAgICAgICAgIFRoaXMgcGFja2FnZSBpbnN0YWxscyAob3IgdXBncmFkZXMgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIHBpcCwgYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuCisgICAgICAgICAgICAgICAgICAgICIiIiwKKyAgICAgICAgICAgICAgICBwb3N0ZmxpZ2h0PSJzY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIiwKKyAgICAgICAgICAgICAgICB0b3BkaXI9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yayIsCisgICAgICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKKyAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICBzZWxlY3RlZD0nc2VsZWN0ZWQnLAorICAgICAgICAgICAgKQorICAgICAgICApCisKICAgICBpZiBERVBUQVJHRVQgPCAnMTAuNCcgYW5kIG5vdCBQWVRIT05fMzoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAgICAgICAgIGRpY3QoCkBAIC00NTMsNiArNDcyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxlY3RlZD11bnNlbGVjdGVkX2Zvcl9weXRob24zLAogICAgICAgICAgICAgKQogICAgICAgICApCisKICAgICByZXR1cm4gcmVzdWx0CiAKIGRlZiBmYXRhbChtc2cpOgpAQCAtNTY3LDIwICs1ODcsNiBAQAogICAgICAgICAgICAgICAgICUgZnJhbWV3b3Jrc1snVGsnXSwKICAgICAgICAgICAgIF0KIAotICAgICMgRm9yIDEwLjYrIGJ1aWxkcywgd2UgYnVpbGQgdHdvIHZlcnNpb25zIG9mIF90a2ludGVyOgotICAgICMgICAgLSB0aGUgdHJhZGl0aW9uYWwgdmVyc2lvbiAocmVuYW1lZCB0byBfdGtpbnRlcl9saWJyYXJ5LnNvKSBsaW5rZWQKLSAgICAjICAgICAgIHdpdGggL0xpYnJhcnkvRnJhbWV3b3Jrcy97VGNsLFRrfS5mcmFtZXdvcmsKLSAgICAjICAgIC0gdGhlIGRlZmF1bHQgdmVyc2lvbiBsaW5rZWQgd2l0aCBvdXIgYnVpbHRpbiBjb3BpZXMgb2YgVGNsIGFuZCBUawotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgRVhQRUNURURfU0hBUkVEX0xJQlNbJ190a2ludGVyX2xpYnJhcnkuc28nXSA9IFwKLSAgICAgICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddCi0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlci5zbyddID0gWwotICAgICAgICAgICAgICAgICIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvJXMvbGliL2xpYnRjbCVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RjbCddKSwKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0ayVzLmR5bGliIgotICAgICAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGZyYW1ld29ya3NbJ1RrJ10pLAotICAgICAgICAgICAgICAgIF0KLQogICAgICMgUmVtb3ZlIGluaGVyaXRlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hpY2ggbWlnaHQgaW5mbHVlbmNlIGJ1aWxkCiAgICAgZW52aXJvbl92YXJfcHJlZml4ZXMgPSBbJ0NQQVRIJywgJ0NfSU5DTFVERV8nLCAnRFlMRF8nLCAnTEFORycsICdMQ18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdMRF8nLCAnTElCUkFSWV8nLCAnUEFUSCcsICdQWVRIT04nXQpAQCAtOTU1LDM0ICs5NjEsMTkgQEAKICAgICBydW5Db21tYW5kKCIlcyAtQyAtLWVuYWJsZS1mcmFtZXdvcmsgLS1lbmFibGUtdW5pdmVyc2Fsc2RrPSVzICIKICAgICAgICAgICAgICAgICItLXdpdGgtdW5pdmVyc2FsLWFyY2hzPSVzICIKICAgICAgICAgICAgICAgICIlcyAiCisgICAgICAgICAgICAgICAiJXMgIgogICAgICAgICAgICAgICAgIkxERkxBR1M9Jy1nIC1MJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9saWInICIKICAgICAgICAgICAgICAgICJDRkxBR1M9Jy1nIC1JJXMvbGlicmFyaWVzL3Vzci9sb2NhbC9pbmNsdWRlJyAyPiYxIiUoCiAgICAgICAgIHNoZWxsUXVvdGUob3MucGF0aC5qb2luKFNSQ0RJUiwgJ2NvbmZpZ3VyZScpKSwgc2hlbGxRdW90ZShTREtQQVRIKSwKICAgICAgICAgVU5JVkVSU0FMQVJDSFMsCiAgICAgICAgICgnICcsICctLXdpdGgtY29tcHV0ZWQtZ290b3MgJylbUFlUSE9OXzNdLAorICAgICAgICAoJyAnLCAnLS13aXRob3V0LWVuc3VyZXBpcCAnKVtnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCldLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKIAogICAgIHByaW50KCJSdW5uaW5nIG1ha2UiKQogICAgIHJ1bkNvbW1hbmQoIm1ha2UiKQogCi0gICAgIyBGb3IgZGVwbG95bWVudCB0YXJnZXRzIG9mIDEwLjYgYW5kIGhpZ2hlciwgd2UgYnVpbGQgb3VyIG93biB2ZXJzaW9uCi0gICAgIyBvZiBUY2wgYW5kIENvY29hIEFxdWEgVGsgbGlicyBiZWNhdXNlIHRoZSBBcHBsZS1zdXBwbGllZCBUayA4LjUgaXMKLSAgICAjIG91dC1vZi1kYXRlIGFuZCBoYXMgY3JpdGljYWwgYnVncy4gIFNhdmUgdGhlIF90a2ludGVyLnNvIHRoYXQgd2FzCi0gICAgIyBsaW5rZWQgd2l0aCAvTGlicmFyeS9GcmFtZXdvcmtzL3tUY2ssVGt9LmZyYW1ld29yayBhbmQgYnVpbGQKLSAgICAjIGFub3RoZXIgX3RraW50ZXIuc28gbGlua2VkIHdpdGggb3VyIGJ1aWx0aW4gVGNsIGFuZCBUayBsaWJzLgotICAgIGlmIChERVBUQVJHRVQgPiAnMTAuNScpIGFuZCAoZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDQpKToKLSAgICAgICAgcnVuQ29tbWFuZCgiZmluZCBidWlsZCAtbmFtZSAnX3RraW50ZXIuc28nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgLWV4ZWNkaXIgbXYgJ3t9JyBfdGtpbnRlcl9saWJyYXJ5LnNvIFw7IikKLSAgICAgICAgcHJpbnQoIlJ1bm5pbmcgbWFrZSB0byBidWlsZCBidWlsdGluIF90a2ludGVyIikKLSAgICAgICAgcnVuQ29tbWFuZCgibWFrZSBUQ0xUS19JTkNMVURFUz0nLUklcy9saWJyYXJpZXMvdXNyL2xvY2FsL2luY2x1ZGUnICIKLSAgICAgICAgICAgICAgICAiVENMVEtfTElCUz0nLUwlcy9saWJyYXJpZXMvdXNyL2xvY2FsL2xpYiAtbHRjbDguNSAtbHRrOC41JyIlKAotICAgICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSwKLSAgICAgICAgICAgIHNoZWxsUXVvdGUoV09SS0RJUilbMTotMV0pKQotICAgICAgICAjIG1ha2UgYSBjb3B5IHdoaWNoIHdpbGwgYmUgbW92ZWQgdG8gbGliLXRraW50ZXIgbGF0ZXIKLSAgICAgICAgcnVuQ29tbWFuZCgiZmluZCBidWlsZCAtbmFtZSAnX3RraW50ZXIuc28nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgLWV4ZWNkaXIgY3AgLXAgJ3t9JyBfdGtpbnRlcl9idWlsdGluLnNvIFw7IikKLQogICAgIHByaW50KCJSdW5uaW5nIG1ha2UgaW5zdGFsbCIpCiAgICAgcnVuQ29tbWFuZCgibWFrZSBpbnN0YWxsIERFU1RESVI9JXMiJSgKICAgICAgICAgc2hlbGxRdW90ZShyb290RGlyKSkpCkBAIC0xMDA3LDI3ICs5OTgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbi5mcmFtZXdvcmsnLCAnVmVyc2lvbnMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLCAnbGliJywgJ3B5dGhvbiVzJyUodmVyc2lvbiwpKQogCi0gICAgIyBJZiB3ZSBtYWRlIG11bHRpcGxlIHZlcnNpb25zIG9mIF90a2ludGVyLCBtb3ZlIHRoZW0gdG8KLSAgICAjIHRoZWlyIG93biBkaXJlY3RvcmllcyB1bmRlciBweXRob24gbGliLiAgVGhpcyBhbGxvd3MKLSAgICAjIHVzZXJzIHRvIHNlbGVjdCB3aGljaCB0byBpbXBvcnQgYnkgbWFuaXB1bGF0aW5nIHN5cy5wYXRoCi0gICAgIyBkaXJlY3RseSBvciB3aXRoIFBZVEhPTlBBVEguCi0KLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIFRLSU5URVJTID0gWydidWlsdGluJywgJ2xpYnJhcnknXQotICAgICAgICB0a2ludGVyX21vdmVzID0gWygnX3RraW50ZXJfJyArIHRrbiArICcuc28nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aF90b19saWIsICdsaWItdGtpbnRlcicsIHRrbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRrbiBpbiBUS0lOVEVSU10KLSAgICAgICAgIyBDcmVhdGUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzIHVuZGVyIGxpYi10a2ludGVyLgotICAgICAgICAjIFRoZSBwZXJtaXNzaW9ucyBhbmQgdWlkL2dpZCB3aWxsIGJlIGZpeGVkIHVwIG5leHQuCi0gICAgICAgIGZvciB0a20gaW4gdGtpbnRlcl9tb3ZlczoKLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRrbVsxXSkKLQogICAgIHByaW50KCJGaXggZmlsZSBtb2RlcyIpCiAgICAgZnJtRGlyID0gb3MucGF0aC5qb2luKHJvb3REaXIsICdMaWJyYXJ5JywgJ0ZyYW1ld29ya3MnLCAnUHl0aG9uLmZyYW1ld29yaycpCiAgICAgZ2lkID0gZ3JwLmdldGdybmFtKCdhZG1pbicpLmdyX2dpZAogCiAgICAgc2hhcmVkX2xpYl9lcnJvciA9IEZhbHNlCi0gICAgbW92ZXNfbGlzdCA9IFtdCiAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhmcm1EaXIpOgogICAgICAgICBmb3IgZG4gaW4gZGlybmFtZXM6CiAgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oZGlycGF0aCwgZG4pLCBTVEFUXzBvNzc1KQpAQCAtMTA1MywyNSArMTAyOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNsLCBwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9saWJfZXJyb3IgPSBUcnVlCiAKLSAgICAgICAgICAgICMgSWYgdGhpcyBpcyBhIF90a2ludGVyIHZhcmlhbnQsIG1vdmUgaXQgdG8gaXRzIG93biBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgbm93IHRoYXQgd2UgaGF2ZSBmaXhlZCBpdHMgcGVybWlzc2lvbnMgYW5kIGNoZWNrZWQgdGhhdCBpdAotICAgICAgICAgICAgIyB3YXMgbGlua2VkIHByb3Blcmx5LiAgVGhlIGRpcmVjdG9yeSB3YXMgY3JlYXRlZCBlYXJsaWVyLgotICAgICAgICAgICAgIyBUaGUgZmlsZXMgYXJlIG1vdmVkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiB3YWxrZWQKLSAgICAgICAgICAgICMgc2luY2UgdGhlIHNoYXJlZCBsaWJyYXJ5IGNoZWNraW5nIGRlcGVuZHMgb24gdGhlIGZpbGVzCi0gICAgICAgICAgICAjIGhhdmluZyB1bmlxdWUgbmFtZXMuCi0gICAgICAgICAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgICAgICAgICAgZm9yIHRrbSBpbiB0a2ludGVyX21vdmVzOgotICAgICAgICAgICAgICAgICAgICBpZiBmbiA9PSB0a21bMF06Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3Zlc19saXN0LmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCwgb3MucGF0aC5qb2luKHRrbVsxXSwgJ190a2ludGVyLnNvJykpKQotCiAgICAgaWYgc2hhcmVkX2xpYl9lcnJvcjoKICAgICAgICAgZmF0YWwoIlVuZXhwZWN0ZWQgc2hhcmVkIGxpYnJhcnkgZXJyb3JzLiIpCiAKLSAgICAjIE5vdyBkbyB0aGUgbW92ZXMuCi0gICAgZm9yIG1sIGluIG1vdmVzX2xpc3Q6Ci0gICAgICAgIHNodXRpbC5tb3ZlKG1sWzBdLCBtbFsxXSkKLQogICAgIGlmIFBZVEhPTl8zOgogICAgICAgICBMRFZFUlNJT049Tm9uZQogICAgICAgICBWRVJTSU9OPU5vbmUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dAppbmRleCAyMTJkOTYzLi5lMDYxYTA2IDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CkBAIC0yOCw2ICsyOCwzNiBAQAogZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24gYWJvdXQgc3VwcG9ydGVkIGFuZCByZWNvbW1lbmRlZCB2ZXJzaW9ucyBvZgogVGNsL1RrIGZvciB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIGFuZCBvZiBNYWMgT1MgWC4KIAorICAgICAgICAgICAgICAqKk5FVyogQXMgb2YgUHl0aG9uIDMuNC4wYjE6CisKK05ldyBJbnN0YWxsYXRpb24gT3B0aW9ucyBhbmQgRGVmYXVsdHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFB5dGhvbiBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGFuIG9wdGlvbiB0byBhdXRvbWF0aWNhbGx5IGluc3RhbGwKK29yIHVwZ3JhZGUgcGlwLCBhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4KK1RoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgbm8gSW50ZXJuZXQgYWNjZXNzIGlzIHJlcXVpcmVkLgorSWYgeW91IGRvIG5vdCB3YW50IHRoZSBpbnN0YWxsZXIgdG8gZG8gdGhpcywgc2VsZWN0IHRoZSAiQ3VzdG9taXplIgorb3B0aW9uIGF0IHRoZSAiSW5zdGFsbGF0aW9uIFR5cGUiIHN0ZXAgYW5kIHVuY2hlY2sgdGhlICJJbnN0YWxsIG9yCit1Z3ByYWRlIHBpcCIgb3B0aW9uLgorCitUbyBtYWtlIGl0IGVhc2llciB0byB1c2Ugc2NyaXB0cyBpbnN0YWxsZWQgYnkgdGhpcmQtcGFydHkgUHl0aG9uCitwYWNrYWdlcywgd2l0aCBwaXAgb3IgYnkgb3RoZXIgbWVhbnMsIHRoZSAiU2hlbGwgcHJvZmlsZSB1cGRhdGVyIgorb3B0aW9uIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFzIGhhcyBiZWVuIHRoZSBjYXNlIHdpdGggUHl0aG9uCisyLjcueCBpbnN0YWxsZXJzLiBZb3UgY2FuIGFsc28gdHVybiB0aGlzIG9wdGlvbiBvZmYgYnkgc2VsZWN0aW5nCisiQ3VzdG9taXplIiBhbmQgdW5jaGVja2luZyB0aGUgIlNoZWxsIHByb2ZpbGUgdXBkYXRlciIgb3B0aW9uLiBZb3UKK2NhbiBhbHNvIHVwZGF0ZSB5b3VyIHNoZWxsIHByb2ZpbGUgbGF0ZXIgYnkgbGF1bmNoaW5nIHRoZSAiVXBkYXRlCitTaGVsbCBQcm9maWxlIiBjb21tYW5kIGZvdW5kIGluIHRoZSAvQXBwbGljYXRpb25zL1B5dGhvbiAkVkVSU0lPTgorZm9sZGVyLiAgWW91IG1heSBuZWVkIHRvIHN0YXJ0IGEgbmV3IHRlcm1pbmFsIHdpbmRvdyBmb3IgdGhlCitjaGFuZ2VzIHRvIHRha2UgZWZmZWN0LgorCitQeXRob24ub3JnIFB5dGhvbiAkVkVSU0lPTiBhbmQgMi43LnggdmVyc2lvbnMgY2FuIGJvdGggYmUgaW5zdGFsbGVkIGFuZAord2lsbCBub3QgY29uZmxpY3QuIENvbW1hbmQgbmFtZXMgZm9yIFB5dGhvbiAzIGNvbnRhaW4gYSAzIGluIHRoZW0sCitweXRob24zIChvciBweXRob24kVkVSU0lPTiksIGlkbGUzIChvciBpZGxlJFZFUlNJT04pLCBwaXAzIChvciBwaXAkVkVSU0lPTiksIGV0Yy4KK1B5dGhvbiAyLjcgY29tbWFuZCBuYW1lcyBjb250YWluIGEgMiBvciBubyBkaWdpdDogcHl0aG9uMiAob3IKK3B5dGhvbjIuNyBvciBweXRob24pLCBpZGxlMiAob3IgaWRsZTIuNyBvciBpZGxlKSwgZXRjLiBJZiB5b3Ugd2FudCB0bwordXNlIHBpcCB3aXRoIFB5dGhvbiAyLjcueCwgeW91IHdpbGwgbmVlZCB0byBkb3dubG9hZCBhbmQgaW5zdGFsbCBhCitzZXBhcmF0ZSBjb3B5IG9mIGl0IGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4CisoaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaSkuCiAKIFVzaW5nIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gb24gT1MgWAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgppbmRleCAyMzlkNzZlLi44ODZlYmZlIDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKQEAgLTEsNSArMSw1IEBACiB7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjExODdcY29jb2FzdWJydGY0MDAKLVxjb2NvYXNjcmVlbmZvbnRzMXtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CitcY29jb2FzY3JlZW5mb250czF7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7XGYxXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQU01UO30KIHtcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KIFxwYXBlcncxMTkwNVxwYXBlcmgxNjgzN1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTY0MFx2aWV3aDEwNjIwXHZpZXdraW5kMAogXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MApAQCAtMTYsMTMgKzE2LDE3IEBACiBcYiBJRExFCiBcYjAgIGFuZCBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8gUHl0aG9uIHByb2dyYW1zLlwKIFwKLVNlZSB0aGUgUmVhZE1lIGZpbGUgYW5kIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCi1cCiAKLVxiIE5PVEU6IAotXGIwIFRoaXMgcGFja2FnZSB3aWxsIG5vdCB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGJ5IGRlZmF1bHQuICBEb3VibGUtY2xpY2sgCi1cYiBVcGRhdGUgU2hlbGwgUHJvZmlsZQotXGIwICBhdCBhbnkgdGltZSB0byBtYWtlICRGVUxMX1ZFUlNJT04gdGhlIGRlZmF1bHQgUHl0aG9uIDMgdmVyc2lvbi4gIFRoaXMgdmVyc2lvbiBjYW4gY28tZXhpc3Qgd2l0aCBvdGhlciBpbnN0YWxsZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDMgYW5kIFB5dGhvbiAyLlwKK1xiIE5FVyBmb3IgUHl0aG9uIDMuNDogCitcYjAgVGhpcyBwYWNrYWdlIG5vdyB1cGRhdGVzIHlvdXIgc2hlbGwgcHJvZmlsZSBieSBkZWZhdWx0IHRvIG1ha2UgJEZVTExfVkVSU0lPTiB0aGUgZGVmYXVsdCBQeXRob24gMyB2ZXJzaW9uLiAgVGhpcyB2ZXJzaW9uIGNhbiBjby1leGlzdCB3aXRoIG90aGVyIGluc3RhbGxlZCB2ZXJzaW9ucyBvZiBQeXRob24gMyBhbmQgUHl0aG9uIDIuICBUaGlzIHBhY2thZ2UgYWxzbyBpbnN0YWxscyBhIHZlcnNpb24gb2YgCitcZjEgcGlwCitcZjAgLCB0aGUgcmVjb21tZW5kZWQgdG9vbCBmb3IgaW5zdGFsbGluZyBhbmQgbWFuYWdpbmcgUHl0aG9uIHBhY2thZ2VzLiAgIFR5cGVcCitcCisJCitcZjEgcGlwMy40IC0taGVscAorXGYwIFwKK1wKK2ZvciBhbiBvdmVydmlldy4gIFNlZSB0aGUgUmVhZE1lIGZpbGUgYW5kIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCiBcCiAKIFxiIElNUE9SVEFOVDoKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2I5N2M0NwotLS0gL2Rldi9udWxsCisrKyBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwCkBAIC0wLDAgKzEsNjUgQEAKKyMhL2Jpbi9zaAorIworIyBJbnN0YWxsL3VwZ3JhZGUgcGlwLgorIworCitQWVZFUj0iQFBZVkVSQCIKK1BZTUFKT1I9IjMiCitGV0s9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8ke1BZVkVSfSIKK1JFTEZXS0JJTj0iLi4vLi4vLi4ke0ZXS30vYmluIgorCit1bWFzayAwMjIKKworIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1tIGVuc3VyZXBpcCAtLXVwZ3JhZGUKKworIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1XaSBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vY29tcGlsZWFsbC5weSIgXAorICAgIC1mIC14IGJhZHN5bnRheCBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIKKworIiR7RldLfS9iaW4vcHl0aG9uJHtQWVZFUn0iIC1XaSAtTyBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vY29tcGlsZWFsbC5weSIgXAorICAgIC1mIC14IGJhZHN5bnRheCBcCisgICAgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIKKworY2hncnAgLVIgYWRtaW4gIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIgIiR7RldLfS9iaW4iCitjaG1vZCAtUiBnK3cgIiR7RldLfS9saWIvcHl0aG9uJHtQWVZFUn0vc2l0ZS1wYWNrYWdlcyIgIiR7RldLfS9iaW4iCisKKyMgV2UgZG8gbm90IGtub3cgaWYgdGhlIHVzZXIgc2VsZWN0ZWQgdGhlIFB5dGhvbiBjb21tYW5kLWxpbmUgdG9vbHMKKyMgcGFja2FnZSB0aGF0IGluc3RhbGxzIHN5bWxpbmtzIHRvIC91c3IvbG9jYWwvYmluLiAgU28gd2UgYXNzdW1lCisjIHRoYXQgdGhlIGNvbW1hbmQtbGluZSB0b29scyBwYWNrYWdlIGhhcyBhbHJlYWR5IGNvbXBsZXRlZCBvciB3YXMKKyMgbm90IHNlbGVjdGVkIGFuZCB3ZSB3aWxsIG9ubHkgaW5zdGFsbCAvdXNyL2xvY2FsL2JpbiBzeW1saW5rcyBmb3IKKyMgcGlwIGV0IGFsIGlmIHRoZXJlIGFyZSAvdXNyL2xvY2FsL2Jpbi9weXRob24qIHN5bWxpbmtzIHRvIG91cgorIyBmcmFtZXdvcmsgYmluIGRpcmVjdG9yeS4KKworaWYgWyAtZCAvdXNyL2xvY2FsL2JpbiBdIDsgdGhlbgorICAgICgKKyAgICAgICAgY2QgL3Vzci9sb2NhbC9iaW4KKyAgICAgICAgIyBDcmVhdGUgcGlweC55IGFuZCBlYXN5X2luc3RhbGwteC55IGxpbmtzIGlmIC91c3IvbG9jYWwvYmluL3B5dGhvbngueQorICAgICAgICAjICAgaXMgbGlua2VkIHRvIHRoaXMgZnJhbWV3b3JrIHZlcnNpb24KKyAgICAgICAgaWYgWyAiJChyZWFkbGluayAtbiAuL3B5dGhvbiR7UFlWRVJ9KSIgPSAiJHtSRUxGV0tCSU59L3B5dGhvbiR7UFlWRVJ9IiBdIDsgdGhlbgorICAgICAgICAgICAgZm9yIGZuIGluICJwaXAke1BZVkVSfSIgImVhc3lfaW5zdGFsbC0ke1BZVkVSfSIgOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBpZiBbIC1lICIke1JFTEZXS0JJTn0vJHtmbn0iIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHJtIC1mIC4vJHtmbn0KKyAgICAgICAgICAgICAgICAgICAgbG4gLXMgIiR7UkVMRldLQklOfS8ke2ZufSIgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNoZ3JwIC1oIGFkbWluICIuLyR7Zm59IgorICAgICAgICAgICAgICAgICAgICBjaG1vZCAtaCBnK3cgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICAgICAgIyBDcmVhdGUgcGlweCBsaW5rIGlmIC91c3IvbG9jYWwvYmluL3B5dGhvbnggaXMgbGlua2VkIHRvIHRoaXMgdmVyc2lvbgorICAgICAgICBpZiBbICIkKHJlYWRsaW5rIC1uIC4vcHl0aG9uJHtQWU1BSk9SfSkiID0gIiR7UkVMRldLQklOfS9weXRob24ke1BZTUFKT1J9IiBdIDsgdGhlbgorICAgICAgICAgICAgZm9yIGZuIGluICJwaXAke1BZTUFKT1J9IiA7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgIGlmIFsgLWUgIiR7UkVMRldLQklOfS8ke2ZufSIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcm0gLWYgLi8ke2ZufQorICAgICAgICAgICAgICAgICAgICBsbiAtcyAiJHtSRUxGV0tCSU59LyR7Zm59IiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgY2hncnAgLWggYWRtaW4gIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgIGNobW9kIC1oIGcrdyAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICkKK2ZpCitleGl0IDAKZGlmZiAtLWdpdCBhL01hYy9NYWtlZmlsZS5pbiBiL01hYy9NYWtlZmlsZS5pbgppbmRleCA1Y2I2NjRkLi4wM2VjNzM4IDEwMDY0NAotLS0gYS9NYWMvTWFrZWZpbGUuaW4KKysrIGIvTWFjL01ha2VmaWxlLmluCkBAIC0zLDkgKzMsMTMgQEAKICMgY29tbWFuZGxpbmUgaW4gdGhhdCBjYXNlLgogCiBWRVJTSU9OPUBWRVJTSU9OQAorQUJJRkxBR1M9QEFCSUZMQUdTQAorTERWRVJTSU9OPUBMRFZFUlNJT05ACitFTlNVUkVQSVA9QEVOU1VSRVBJUEAKIGJ1aWxkZGlyID0gLi4KIHNyY2Rpcj1Ac3JjZGlyQAogcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBMSUJERVNUPSQocHJlZml4KS9saWIvcHl0aG9uJChWRVJTSU9OKQogUlVOU0hBUkVEPUBSVU5TSEFSRURACiBCVUlMREVYRT1AQlVJTERFWEVFWFRACkBAIC0yMyw3ICsyNyw3IEBACiAKIAogIyBUaGVzZSBhcmUgbm9ybWFsbHkgZ2xpbXBzZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0Ci1iaW5kaXI9JChwcmVmaXgpL2JpbgorQklORElSPQkJQGJpbmRpckAKIFBZVEhPTkFQUFNESVI9QEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYQC8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQogQVBQSU5TVEFMTERJUj0kKHByZWZpeCkvUmVzb3VyY2VzL1B5dGhvbi5hcHAKIApAQCAtNDYsMTkgKzUwLDcgQEAKIEFQUFNVQkRJUlM9TWFjT1MgUmVzb3VyY2VzCiBjb21waWxlYWxsPSQoc3JjZGlyKS8uLi9MaWIvY29tcGlsZWFsbC5weQogCi1pbnN0YWxsYXBwczogaW5zdGFsbF9QeXRob24gaW5zdGFsbF9weXRob253IGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCi0KLWluc3RhbGxfcHl0aG9udzogcHl0aG9udwotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTikiCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zIgotCWxuIC1zZiBweXRob253JChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMiCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIC1vdXRwdXQgJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253Ci0JbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIC1vdXRwdXQgJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTiktMzIgcHl0aG9udwotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMtMzIiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbjMtMzIiCi1lbmRpZgoraW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCiAKICMKICMgSW5zdGFsbCB1bml4IHRvb2xzIGluIC91c3IvbG9jYWwvYmluLiBUaGVzZSBhcmUganVzdCBhbGlhc2VzIGZvciB0aGUgCkBAIC02OCwyMSArNjAsNDkgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uMyBweXRob253MyBpZGxlMyBweWRvYzMgcHl0aG9uMy1jb25maWcgXAotCQkgIHB5dGhvbiQoVkVSU0lPTikgcHl0aG9udyQoVkVSU0lPTikgaWRsZSQoVkVSU0lPTikgXAotCQkgIHB5ZG9jJChWRVJTSU9OKSBweXRob24kKFZFUlNJT04pLWNvbmZpZyAydG8zIFwKLQkJICAydG8zLSQoVkVSU0lPTikgcHl2ZW52IHB5dmVudi0kKFZFUlNJT04pIDtcCisJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJZm9yIGZuIGluIFwKKwkJCTJ0bzMgXAorCQkJaWRsZTMgXAorCQkJcHlkb2MzIFwKKwkJCXB5dGhvbjMgXAorCQkJcHl0aG9uMy1jb25maWcgXAorCQkJcHl2ZW52IFwKKwkJCTsgXAogCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKKwkJcm0gLWYgJCR7Zm59IDsgXAorCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAogCWRvbmUKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlmb3IgZm4gaW4gcHl0aG9uMy0zMiBweXRob253My0zMiBcCi0JCSAgcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253JChWRVJTSU9OKS0zMiA7XAotCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKLQlkb25lCi1lbmRpZgotCisJLWlmIHRlc3QgIngkKFZFUlNJT04pIiAhPSAieCQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKFZFUlNJT04pLWNvbmZpZyBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24zLTMyIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXBpcDMgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQogCiAjCiAjIExpa2UgaW5zdGFsbHVuaXh0b29scywgYnV0IG9ubHkgaW5zdGFsbCBsaW5rcyB0byB0aGUgdmVyc2lvbmVkIGJpbmFyaWVzLgpAQCAtOTEsMjAgKzExMSw1NSBAQAogCWlmIFsgISAtZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIF07IHRoZW4gIFwKIAkJJChJTlNUQUxMKSAtZCAtbSAkKERJUk1PREUpICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgO1wKIAlmaQotCWZvciBmbiBpbiBweXRob24kKFZFUlNJT04pIHB5dGhvbnckKFZFUlNJT04pIGlkbGUkKFZFUlNJT04pIFwKLQkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgMnRvMy0kKFZFUlNJT04pIHB5dmVudi0kKFZFUlNJT04pIDtcCisJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJZm9yIGZuIGluIFwKKwkJCTJ0bzMtJChWRVJTSU9OKSBcCisJCQlpZGxlJChWRVJTSU9OKSBcCisJCQlweWRvYyQoVkVSU0lPTikgXAorCQkJcHl0aG9uJChWRVJTSU9OKSBcCisJCQlweXRob24kKExEVkVSU0lPTiktY29uZmlnIFwKKwkJCXB5dmVudi0kKFZFUlNJT04pIFwKKwkJCTsgXAogCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKKwkJcm0gLWYgJCR7Zm59IDtcCisJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCiAJZG9uZQotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWZvciBmbiBpbiBweXRob24kKFZFUlNJT04pLTMyIHB5dGhvbnckKFZFUlNJT04pLTMyIDtcCi0JZG8gXAotCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAotCWRvbmUKLWVuZGlmCisJLWlmIHRlc3QgIngkKFZFUlNJT04pIiAhPSAieCQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKExEVkVSU0lPTikgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChWRVJTSU9OKS0zMiBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQllYXN5X2luc3RhbGwtJChWRVJTSU9OKSBcCisJCQkJcGlwJChWRVJTSU9OKSBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCiAKIHB5dGhvbnc6ICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgTWFrZWZpbGUKLQkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyAtSS4uIC1JJChzcmNkaXIpLy4uL0luY2x1ZGUgLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQorCSQoQ0MpICQoTERGTEFHUykgLURQWVRIT05GUkFNRVdPUks9JyIkKFBZVEhPTkZSQU1FV09SSykiJyAtbyAkQCBcCisJCSQoc3JjZGlyKS9Ub29scy9weXRob253LmMgLUkuLiAtSSQoc3JjZGlyKS8uLi9JbmNsdWRlIFwKKwkJLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQogCiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyOgogCWNkIFB5dGhvbkxhdW5jaGVyICYmIG1ha2UgaW5zdGFsbCBERVNURElSPSQoREVTVERJUikKZGlmZiAtLWdpdCBhL01hYy9SRUFETUUgYi9NYWMvUkVBRE1FCmluZGV4IDkwMWEzMjQuLjYxNjM0ZTkgMTAwNjQ0Ci0tLSBhL01hYy9SRUFETUUKKysrIGIvTWFjL1JFQURNRQpAQCAtNyw3ICs3LDcgQEAKICAgICBSb25hbGQgT3Vzc29yZW4gKDIwMTAtMDQpLAogICAgIE5lZCBEZWlseSAoMjAxMi0wNikKIAotOlZlcnNpb246IDMuMy4wCis6VmVyc2lvbjogMy40LjAKIAogVGhpcyBkb2N1bWVudCBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHNvbWUgTWFjIE9TIFggc3BlY2lmaWMgZmVhdHVyZXMgaW4KIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgpAQCAtOTksNiArOTksOCBAQAogCiAgICogYGBpbnRlbGBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgCiAKKyAgKiBgYGludGVsLTMyYGA6IGBgaTM4NmBgCisKICAgKiBgYDMyLWJpdGBgOiAgIGBgcHBjYGAsIGBgaTM4NmBgCiAKICAgKiBgYDMtd2F5YGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAKQEAgLTEyNSw3ICsxMjcsNyBAQAogCiAgICogMTAuNyBhbmQgMTAuOCBTREtzIHdpdGggWGNvZGUgNCBzdXBwb3J0IGBgaW50ZWxgYCBvbmx5CiAKLVRoZSBtYWtlZmlsZSBmb3IgYSBmcmFtZXdvcmsgYnVpbGQgd2lsbCBhbHNvIGluc3RhbGwgYGBweXRob24zLjMtMzJgYAorVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGFsc28gaW5zdGFsbCBgYHB5dGhvbjMuNC0zMmBgCiBiaW5hcmllcyB3aGVuIHRoZSB1bml2ZXJzYWwgYXJjaGl0ZWN0dXJlIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAzMi1iaXQKIGFyY2hpdGVjdHVyZSAodGhhdCBpcywgZm9yIGFsbCBmbGF2b3JzIGJ1dCBgYDY0LWJpdGBgKS4KIApAQCAtMTQ5LDcgKzE1MSw3IEBACiBub3QgYXV0b21hdGljYWxseSBjYXJyeSB0aHJvdWdoIHRvIHN1YnByb2Nlc3NlcyBsYXVuY2hlZCBieSBwcm9ncmFtcyBhbmQgdGVzdHMKIHVuZGVyIHRoYXQgUHl0aG9uLiAgSWYgeW91IHdhbnQgdG8gZW5zdXJlIHRoYXQgUHl0aG9uIGludGVycHJldGVycyBsYXVuY2hlZCBpbgogc3VicHJvY2Vzc2VzIGFsc28gcnVuIGluIDMyLWJpdC1tb2RlIGlmIHRoZSBtYWluIGludGVycHJldGVyIGRvZXMsIHVzZQotYSBgYHB5dGhvbjMuMy0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCithIGBgcHl0aG9uMy40LTMyYGAgYmluYXJ5IGFuZCB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmV4ZWN1dGFibGVgYCBhcyB0aGUKIGBgc3VicHJvY2Vzc2BgIGBgUG9wZW5gYCBleGVjdXRhYmxlIHZhbHVlLgogCiAKQEAgLTE2OSw3ICsxNzEsNyBAQAogCiBBIHNlY29uZCByZWFzb24gZm9yIHVzaW5nIGZyYW1ld29ya3MgaXMgdGhhdCB0aGV5IHB1dCBQeXRob24tcmVsYXRlZCBpdGVtcyBpbgogb25seSB0d28gcGxhY2VzOiAiL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmsiIGFuZCAKLSIvQXBwbGljYXRpb25zL1B5dGhvbiA8VkVSU0lPTj4iIHdoZXJlIGBgPFZFUlNJT04+YGAgY2FuIGJlIGUuZy4gIjMuMyIsCisiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjQiLAogIjIuNyIsIGV0Yy4gIFRoaXMgc2ltcGxpZmllcyBtYXR0ZXJzIGZvciB1c2VycyBpbnN0YWxsaW5nCiBQeXRob24gZnJvbSBhIGJpbmFyeSBkaXN0cmlidXRpb24gaWYgdGhleSB3YW50IHRvIGdldCByaWQgb2YgaXQgYWdhaW4uIE1vcmVvdmVyLAogZHVlIHRvIHRoZSB3YXkgZnJhbWV3b3JrcyB3b3JrLCBhIHVzZXIgd2l0aG91dCBhZG1pbiBwcml2aWxlZ2VzIGNhbiBpbnN0YWxsIGEKZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjNhY2U0Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIiIiU3VpdGUgSGVscCBJbmRleGluZyBUb29sIFN1aXRlOiBTcGVjaWFsIGV2ZW50cyB0aGF0IGp1c3QgdGhlIEhlbHAgSW5kZXhpbmcgVG9vbCBzdXBwb3J0cy4KLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdISVQgJwotCi1jbGFzcyBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzOgotCi0gICAgZGVmIHR1cm5fYW5jaG9yX2luZGV4aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIGFuY2hvciBpbmRleGluZzogVHVybnMgYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZi4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0QW5jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF90dXJuX3JlbW90ZV9yb290ID0gewotICAgICAgICAnd2l0aF9yb290X3VybCcgOiAnclVSTCcsCi0gICAgfQotCi0gICAgZGVmIHR1cm5fcmVtb3RlX3Jvb3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gcmVtb3RlIHJvb3Q6IFR1cm4gdXNhZ2Ugb2YgcmVtb3RlIHJvb3QgZm9yIGNvbnRlbnQgb24gdGhlIHdlYiBvbiBvciBvZmYuIElmIHR1cm5pbmcgXHhkMm9uXHhkMywgc3VwcGx5IGEgc3RyaW5nIGFzIHNlY29uZCBwYXJhbWV0ZXIuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIHJlbW90ZSByb290IG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcm9vdF91cmw6IFRoZSByZW1vdGUgcm9vdCB0byB1c2UsIGluIHRoZSBmb3JtIG9mIFx4ZDJodHRwOi8vd3d3LmFwcGxlLmNvbS9oZWxwL1x4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RSZW0nCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgdXNlX3Rva2VuaXplcihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidXNlIHRva2VuaXplcjogVGVsbHMgdGhlIGluZGV4aW5nIHRvb2wgd2hpY2ggdG9rZW5pemVyIHRvIHVzZS4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFNwZWNpZnkgXHhkMkVuZ2xpc2hceGQzLCBceGQyRXVyb3BlYW5ceGQzLCBceGQySmFwYW5lc2VceGQzLCBceGQyS29yZWFuXHhkMywgb3IgXHhkMlNpbXBsZVx4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3VUb2snCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFwcGxpY2F0aW9uIGNsYXNzICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLWNsYXNzIF9Qcm9wX2lkbGVTdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImlkbGVTdGF0dXMgLSAgIiIiCi0gICAgd2hpY2ggPSAnc0lkbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2lkbGVTdGF0dXMnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci19Ci0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc0lkbCcgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmFlNzAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgTWlzY2VsbGFuZW91cyBTdGFuZGFyZHM6IFVzZWZ1bCBldmVudHMgdGhhdCBhcmVuXHhkNXQgaW4gYW55IG90aGVyIHN1aXRlCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnbWlzYycKLQotY2xhc3MgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzOgotCi0gICAgZGVmIHJldmVydChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicmV2ZXJ0OiBSZXZlcnQgYW4gb2JqZWN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHZlcnNpb24KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IG9iamVjdCB0byByZXZlcnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAncnZydCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZmVlMC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0iIiJTdWl0ZSBSZXF1aXJlZCBTdWl0ZTogVGVybXMgdGhhdCBldmVyeSBhcHBsaWNhdGlvbiBzaG91bGQgc3VwcG9ydAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ3JlcWQnCi0KLWZyb20gU3RkU3VpdGVzLlJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBSZXF1aXJlZF9TdWl0ZV9FdmVudHMoUmVxdWlyZWRfU3VpdGVfRXZlbnRzKToKLQotICAgIHBhc3MKLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwYjYzYS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1mcm9tIFN0ZFN1aXRlcy5TdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzKFN0YW5kYXJkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBfYXJnbWFwX2Nsb3NlID0gewotICAgICAgICAnc2F2aW5nJyA6ICdzYXZvJywKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgfQotCi0gICAgZGVmIGNsb3NlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJjbG9zZTogQ2xvc2UgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0cyB0byBjbG9zZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHNhdmluZzogc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5nCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY2xvcycKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0gICAgICAgIGFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdzYXZvJywgX0VudW1fc2F2bykKLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBkYXRhX3NpemUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImRhdGEgc2l6ZTogUmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIHNpemUgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCi0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdkc2l6JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGdldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZ2V0OiBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogVGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdnZXRkJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9tYWtlID0gewotICAgICAgICAnbmV3JyA6ICdrb2NsJywKLSAgICAgICAgJ2F0JyA6ICdpbnNoJywKLSAgICAgICAgJ3dpdGhfZGF0YScgOiAnZGF0YScsCi0gICAgICAgICd3aXRoX3Byb3BlcnRpZXMnIDogJ3ByZHQnLAotICAgIH0KLQotICAgIGRlZiBtYWtlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm1ha2U6IE1ha2UgYSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IG5ldzogdGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGF0OiB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9kYXRhOiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvcGVydGllczogdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IE9iamVjdCBzcGVjaWZpZXIgZm9yIHRoZSBuZXcgZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY3JlbCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tYWtlKQotICAgICAgICBpZiBfbm9fb2JqZWN0IGlzIG5vdCBOb25lOiByYWlzZSBUeXBlRXJyb3IoJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnKQotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBvcGVuLiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ29kb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgcHJpbnRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gcHJpbnQuIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAncGRvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2F2ZSA9IHsKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgICAgICdhcycgOiAnZmx0cCcsCi0gICAgfQotCi0gICAgZGVmIHNhdmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNhdmU6IHNhdmUgYSBzZXQgb2Ygb2JqZWN0cwotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBzYXZlLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0KHMpCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXM6IHRoZSBmaWxlIHR5cGUgb2YgdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2F2ZScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zYXZlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2V0ID0gewotICAgICAgICAndG8nIDogJ2RhdGEnLAotICAgIH0KLQotICAgIGRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNldDogU2V0IGFuIG9iamVjdFx4ZDVzIGRhdGEKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2V0ZCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLSMgICAgICAgIGVsZW1lbnQgJ2N3aW4nIGFzIFsnaW5keCcsICduYW1lJywgJ3JlbGUnXQotIyAgICAgICAgZWxlbWVudCAnZG9jdScgYXMgWyduYW1lJ10KLQotY2xhc3Mgd2luZG93KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIid2luZG93IC0gQSBXaW5kb3cgIiIiCi0gICAgd2FudCA9ICdjd2luJwotY2xhc3MgX1Byb3BfYm91bmRzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJib3VuZHMgLSB0aGUgYm91bmRhcnkgcmVjdGFuZ2xlIGZvciB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BibmQnCi0gICAgd2FudCA9ICdxZHJ0JwotY2xhc3MgX1Byb3BfY2xvc2VhYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJjbG9zZWFibGUgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIGNsb3NlIGJveD8gIiIiCi0gICAgd2hpY2ggPSAnaGNsYicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9mbG9hdGluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiZmxvYXRpbmcgLSBEb2VzIHRoZSB3aW5kb3cgZmxvYXQ/ICIiIgotICAgIHdoaWNoID0gJ2lzZmwnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfaW5kZXgoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BpZHgnCi0gICAgd2FudCA9ICdsb25nJwotY2xhc3MgX1Byb3BfbW9kYWwoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGFsIC0gSXMgdGhlIHdpbmRvdyBtb2RhbD8gIiIiCi0gICAgd2hpY2ggPSAncG1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJuYW1lIC0gdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncG5hbScKLSAgICB3YW50ID0gJ2l0eHQnCi1jbGFzcyBfUHJvcF9wb3NpdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicG9zaXRpb24gLSB1cHBlciBsZWZ0IGNvb3JkaW5hdGVzIG9mIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwcG9zJwotICAgIHdhbnQgPSAnUURwdCcKLWNsYXNzIF9Qcm9wX3Jlc2l6YWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicmVzaXphYmxlIC0gSXMgdGhlIHdpbmRvdyByZXNpemFibGU/ICIiIgotICAgIHdoaWNoID0gJ3Byc3onCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdGl0bGVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ0aXRsZWQgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIHRpdGxlIGJhcj8gIiIiCi0gICAgd2hpY2ggPSAncHRpdCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF92aXNpYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ2aXNpYmxlIC0gaXMgdGhlIHdpbmRvdyB2aXNpYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwdmlzJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21hYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tYWJsZSAtIElzIHRoZSB3aW5kb3cgem9vbWFibGU/ICIiIgotICAgIHdoaWNoID0gJ2lzem0nCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tZWQgLSBJcyB0aGUgd2luZG93IHpvb21lZD8gIiIiCi0gICAgd2hpY2ggPSAncHp1bScKLSAgICB3YW50ID0gJ2Jvb2wnCi0KLWNsYXNzIGRvY3VtZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiZG9jdW1lbnQgLSBBIERvY3VtZW50ICIiIgotICAgIHdhbnQgPSAnZG9jdScKLWNsYXNzIF9Qcm9wX21vZGlmaWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RpZmllZCAtIEhhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPyAiIiIKLSAgICB3aGljaCA9ICdpbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci0gICAgJ2RvY3VtZW50JyA6IGRvY3VtZW50LAotICAgICd3aW5kb3cnIDogd2luZG93LAotfQotd2luZG93Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotd2luZG93Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2JvdW5kcycgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ2Nsb3NlYWJsZScgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2Zsb2F0aW5nJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpbmRleCcgOiBfUHJvcF9pbmRleCwKLSAgICAnbW9kYWwnIDogX1Byb3BfbW9kYWwsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLSAgICAncG9zaXRpb24nIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Jlc2l6YWJsZScgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3RpdGxlZCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3Zpc2libGUnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAnem9vbWFibGUnIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3pvb21lZCcgOiBfUHJvcF96b29tZWQsCi19Ci13aW5kb3cuX3ByaXZlbGVtZGljdCA9IHsKLX0KLWRvY3VtZW50Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotZG9jdW1lbnQuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnbW9kaWZpZWQnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLX0KLWRvY3VtZW50Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1fRW51bV9zYXZvID0gewotICAgICd5ZXMnIDogJ3llcyAnLCAgICAgIyBTYXZlIG9iamVjdHMgbm93Ci0gICAgJ25vJyA6ICdubyAgJywgICAgICAjIERvIG5vdCBzYXZlIG9iamVjdHMKLSAgICAnYXNrJyA6ICdhc2sgJywgICAgICMgQXNrIHRoZSB1c2VyIHdoZXRoZXIgdG8gc2F2ZQotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2hjbGInIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdpbW9kJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICdpc2ZsJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpc3ptJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICdwYm5kJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAncGlkeCcgOiBfUHJvcF9pbmRleCwKLSAgICAncG1vZCcgOiBfUHJvcF9tb2RhbCwKLSAgICAncG5hbScgOiBfUHJvcF9uYW1lLAotICAgICdwcG9zJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdwcnN6JyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAncHRpdCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3B2aXMnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAncHp1bScgOiBfUHJvcF96b29tZWQsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc2F2bycgOiBfRW51bV9zYXZvLAotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5ZGY1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIgotUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi0iIiIKLWltcG9ydCBhZXRvb2xzCi1FcnJvciA9IGFldG9vbHMuRXJyb3IKLWltcG9ydCBTdGFuZGFyZF9TdWl0ZQotaW1wb3J0IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZQotaW1wb3J0IG9kZHNfYW5kX2VuZHMKLWltcG9ydCBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcwotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi0KLQotX2NvZGVfdG9fbW9kdWxlID0gewotICAgICdDb1JlJyA6IFN0YW5kYXJkX1N1aXRlLAotICAgICdISVQgJyA6IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSwKLSAgICAnT2RkcycgOiBvZGRzX2FuZF9lbmRzLAotICAgICdtaXNjJyA6IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLAotICAgICdyZXFkJyA6IFJlcXVpcmVkX1N1aXRlLAotfQotCi0KLQotX2NvZGVfdG9fZnVsbG5hbWUgPSB7Ci0gICAgJ0NvUmUnIDogKCdIZWxwSW5kZXhpbmdUb29sLlN0YW5kYXJkX1N1aXRlJywgJ1N0YW5kYXJkX1N1aXRlJyksCi0gICAgJ0hJVCAnIDogKCdIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScsICdIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnKSwKLSAgICAnT2RkcycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wub2Rkc19hbmRfZW5kcycsICdvZGRzX2FuZF9lbmRzJyksCi0gICAgJ21pc2MnIDogKCdIZWxwSW5kZXhpbmdUb29sLk1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJywgJ01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJyksCi0gICAgJ3JlcWQnIDogKCdIZWxwSW5kZXhpbmdUb29sLlJlcXVpcmVkX1N1aXRlJywgJ1JlcXVpcmVkX1N1aXRlJyksCi19Ci0KLWZyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWZyb20gSGVscF9JbmRleGluZ19Ub29sX1N1aXRlIGltcG9ydCAqCi1mcm9tIG9kZHNfYW5kX2VuZHMgaW1wb3J0ICoKLWZyb20gTWlzY2VsbGFuZW91c19TdGFuZGFyZHMgaW1wb3J0ICoKLWZyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLQotZGVmIGdldGJhc2VjbGFzc2VzKHYpOgotICAgIGlmIG5vdCBnZXRhdHRyKHYsICdfcHJvcGRpY3QnLCBOb25lKToKLSAgICAgICAgdi5fcHJvcGRpY3QgPSB7fQotICAgICAgICB2Ll9lbGVtZGljdCA9IHt9Ci0gICAgICAgIGZvciBzdXBlcmNsYXNzbmFtZSBpbiBnZXRhdHRyKHYsICdfc3VwZXJjbGFzc25hbWVzJywgW10pOgotICAgICAgICAgICAgc3VwZXJjbGFzcyA9IGV2YWwoc3VwZXJjbGFzc25hbWUpCi0gICAgICAgICAgICBnZXRiYXNlY2xhc3NlcyhzdXBlcmNsYXNzKQotICAgICAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19wcm9wZGljdCcsIHt9KSkKLSAgICAgICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfZWxlbWRpY3QnLCB7fSkpCi0gICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdnByb3BkaWN0Jywge30pKQotICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZlbGVtZGljdCcsIHt9KSkKLQotaW1wb3J0IFN0ZFN1aXRlcwotCi0jCi0jIFNldCBwcm9wZXJ0eSBhbmQgZWxlbWVudCBkaWN0aW9uYXJpZXMgbm93IHRoYXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGRlZmluZWQKLSMKLWdldGJhc2VjbGFzc2VzKHdpbmRvdykKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotZ2V0YmFzZWNsYXNzZXMoZG9jdW1lbnQpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi0KLWNsYXNzIEhlbHBJbmRleGluZ1Rvb2woU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAotICAgICAgICBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzLAotICAgICAgICBvZGRzX2FuZF9lbmRzX0V2ZW50cywKLSAgICAgICAgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzLAotICAgICAgICBSZXF1aXJlZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIGFldG9vbHMuVGFsa1RvKToKLSAgICBfc2lnbmF0dXJlID0gJ2hpdGknCi0KLSAgICBfbW9kdWxlTmFtZSA9ICdIZWxwSW5kZXhpbmdUb29sJwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlY2I5NS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIG9kZHMgYW5kIGVuZHM6IFRoaW5ncyB0aGF0IHNob3VsZCBiZSBpbiBzb21lIHN0YW5kYXJkIHN1aXRlLCBidXQgYXJlblx4ZDV0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnT2RkcycKLQotY2xhc3Mgb2Rkc19hbmRfZW5kc19FdmVudHM6Ci0KLSAgICBkZWYgc2VsZWN0KHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNlbGVjdDogU2VsZWN0IHRoZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIHNlbGVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdzbGN0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUgYi9NYWMvVG9vbHMvRG9jL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZDUzZC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gYnVpbGQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIGEgZm9ybSB0aGF0Ci1pcyBzdWl0YWJsZSBmb3IgYWNjZXNzIHdpdGggQXBwbGUgSGVscCBWaWV3ZXIuIFRoaXMgd2lsbCBlbmFibGUgdGhlCi0iUHl0aG9uIERvY3VtZW50YXRpb24iIG1lbnUgZW50cmllcyBpbiB0aGUgTWFjUHl0aG9uIElERSBIZWxwIG1lbnUuCi0KLVVuZm9ydHVuYXRlbHkgdGhlIHByb2NlZHVyZSB0byBidWlsZCB0aGUgZG9jcyBpcyBub3QgdmVyeSBzdHJlYW1saW5lZC4KLQotRmlyc3QsIGVkaXQgc2V0dXAucHkuIEF0IHRoZSB0b3AsIGVkaXQgTUFKT1JfVkVSU0lPTiBhbmQgTUlOT1JfVkVSU0lPTiwKLWFuZCBjaGVjayB0aGF0IERFU1RESVIgbWFrZXMgc2Vuc2UuIFRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5zdGFsbGVkCi1pbnNpZGUgUHl0aG9uSURFLmFwcC4KLQotSW4gRG9jQnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zLCBzZXQgc2VsZi5kb3dubG9hZCB0byBUcnVlIGlmIHlvdSB3YW50IHRvCi1kb3dubG9hZCB0aGUgZG9jcy4gU2V0IGl0IHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBkb2NzIGZyb20KLXRoZSBzb3VyY2UgdHJlZSwgYnV0IHRoaXMgcmVxdWlyZXMgTGFUZXggYW5kIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuCi1Eb2FibGUsIGJ1dCBub3QgZWFzeS4KLQotU2Vjb25kLCBpZiB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgZG9jcyB5b3UgbWF5IG5lZWQgdG8gZG8gYSBjb3VwbGUKLW1vcmUgZWRpdHMuIFRoZSB3YXkgdGhlIGRvY3MgYXJlIHBhY2thZ2VkIHdpbGwgb2Z0ZW4gY2hhbmdlIGJldHdlZW4KLW1ham9yIHJlbGVhc2VzLiBGaWRkbGUgRG9jQnVpbGQuZG93bmxvYWREb2NzIHRvIG1ha2UgaXQgZG8gdGhlIHJpZ2h0Ci10aGluZyAoZG93bmxvYWQgdGhlIGRvY3MgZnJvbSBweXRob24ub3JnLCB1bnBhY2sgdGhlbSwgcmVuYW1lIHRoZQotZGlyZWN0b3J5IHRvICJidWlsZC9odG1sIikuCi0KLUFmdGVyIHRoZXNlIGVkaXRzIHlvdSBzaG91bGQgYmUgcmVhZHkgdG8gcm9sbC4gInB5dGhvbncgc2V0dXAucHkgYnVpbGQiCi1zaG91bGQgZG93bmxvYWQgYW5kIHVucGFjayAob3IgYnVpbGQpIHRoZSBkb2NzLiBOZXh0LCBpdCB3aWxsIGRvIHNvbWUKLW1hZ2ljIHRvIG1ha2UgdGhlIGRvY3MgaW5kZXhhYmxlLiBGaW5hbGx5LCBpdCB3aWxsIHJ1biB0aGUgQXBwbGUgSGVscAotSW5kZXhpbmcgVG9vbC4gKFRoaXMgbGFzdCBzdGVwIGlzIHRoZSByZWFzb24geW91IG11c3QgdXNlICJweXRob253IiBhcwotb3Bwb3NlZCB0byAicHl0aG9uIikuIFVzdWFsbHkgaXQgd2lsbCB0aW1lIG91dCB3aGlsZSB3YWl0aW5nIGZvciBBSElUIHRvCi1kbyBpdHMgd29yay4gV2FpdCB1bnRpbCBBSElUIGlzIGRvbmUuCi0KLU5vdyB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCB3aXRoICJweXRob24gc2V0dXAucHkgaW5zdGFsbCIuCi0KLUFmdGVyIHRoaXMgaXMgZG9uZSB0ZXN0IHlvdXIgd29yay4gRmlyZSB1cCBQeXRob25JREUsIGFuZCBjaGVjayB0aGF0Ci1IZWxwLT5QeXRob24gRG9jdW1lbnRhdGlvbiBicmluZ3MgdXAgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIEhlbHAgVmlld2VyLgotQWxzbyBvcGVuIGFuIElERSBlZGl0IHdpbmRvdywgdHlwZSBzb21ldGhpbmcgbGlrZSAiaW1wb3J0IHN5cyIsIHNlbGVjdAotImltcG9ydCIsIGFuZCB1c2UgSGVscC0+TG9va3VwIGluIFB5dGhvbiBEb2N1bWVudGF0aW9uIHRvIGNoZWNrIHRoYXQgdGhlCi1pbmRleCBoYXMgYmVlbiBnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weSBiL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTE1MmMuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0jIEJ1aWxkIGFuZCBpbnN0YWxsIGFuIEFwcGxlIEhlbHAgVmlld2VyIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUHl0aG9uCi0jIGRvY3VtZW50YXRpb24gaW50byB0aGUgZnJhbWV3b3JrLgotIyBDb2RlIGJ5IEJpbGwgRmFuY2hlciwgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgYnkgSmFjayBKYW5zZW4uCi0jCi0jIFlvdSBtdXN0IHJ1biB0aGlzIGFzIGEgdHdvLXN0ZXAgcHJvY2VzcwotIyAxLiBweXRob24gc2V0dXBEb2NzLnB5IGJ1aWxkCi0jIDIuIFdhaXQgZm9yIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2gKLSMgMy4gcHl0aG9uIHNldHVwRG9jcy5weSBpbnN0YWxsCi0jCi0jIFRvIGRvOgotIyAtIHRlc3Qgd2hldGhlciB0aGUgZG9jcyBhcmUgYXZhaWxhYmxlIGxvY2FsbHkgYmVmb3JlIGRvd25sb2FkaW5nCi0jIC0gZml4IGJ1aWxkRG9jc0Zyb21Tb3VyY2UKLSMgLSBHZXQgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uIGZyb20gc3lzLnZlcnNpb24sIGZhbGxiYWNrIHRvIDIuMi4xCi0jIC0gU2VlIGlmIHdlIGNhbiBzb21laG93IGRldGVjdCB0aGF0IEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBpcyBmaW5pc2hlZAotIyAtIGRhdGFfZmlsZXMgdG8gc2V0dXAoKSBkb2Vzbid0IHNlZW0gdGhlIHJpZ2h0IHdheSB0byBwYXNzIHRoZSBhcmd1bWVudHMKLSMKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgY29weV9maWxlCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnLCBkZXBfdXRpbAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QKLWltcG9ydCBIZWxwSW5kZXhpbmdUb29sCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCB0aW1lCi0KLU1BSk9SX1ZFUlNJT049JzIuNCcKLU1JTk9SX1ZFUlNJT049JzIuNC4xJwotREVTVERJUj0nL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tJXMvUHl0aG9uSURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9QeXRob25Eb2N1bWVudGF0aW9uJyAlIE1BSk9SX1ZFUlNJT04KLQotY2xhc3MgRG9jQnVpbGQoYnVpbGQpOgotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBOb25lCi0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5kb3dubG9hZCA9IDEKLSAgICAgICAgc2VsZi5kb2NfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT04gIyBPbmx5IG5lZWRlZCBpZiBkb3dubG9hZCBpcyB0cnVlCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2h0bWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdodG1sJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnUHl0aG9uRG9jdW1lbnRhdGlvbicpCi0KLSAgICBkZWYgc3Bhd24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzcGF3bihhcmdzLCAxLCAgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0KLSAgICBkZWYgZG93bmxvYWREb2NzKHNlbGYpOgotICAgICAgICB3b3JrZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgIyBYWFggTm90ZTogdGhlIG5leHQgc3RyaW5ncyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCi0gICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi9kb2MvJXMvaHRtbC0lcy50YXIuYnoyJyAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5kb2NfdmVyc2lvbixzZWxmLmRvY192ZXJzaW9uKQotICAgICAgICB0YXJmaWxlID0gJ2h0bWwtJXMudGFyLmJ6MicgJSBzZWxmLmRvY192ZXJzaW9uCi0gICAgICAgIGRpcm5hbWUgPSAnUHl0aG9uLURvY3MtJXMnICUgc2VsZi5kb2NfdmVyc2lvbgotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzOiBhbHJlYWR5IGV4aXN0cywgcGxlYXNlIHJlbW92ZSBhbmQgdHJ5IGFnYWluJyAlIHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLnNwYXduKCdjdXJsJywnLU8nLCB1cmwpCi0gICAgICAgIHNlbGYuc3Bhd24oJ3RhcicsICcteGpmJywgdGFyZmlsZSkKLSAgICAgICAgb3MucmVuYW1lKGRpcm5hbWUsICdodG1sJykKLSAgICAgICAgb3MuY2hkaXIod29ya2RpcikKLSMjICAgICAgICBwcmludCAiKiogUGxlYXNlIHVucGFjayAlcyIgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCB0YXJmaWxlKQotIyMgICAgICAgIHByaW50ICIqKiBVbnBhY2sgdGhlIGZpbGVzIGludG8gJXMiICUgc2VsZi5idWlsZF9odG1sCi0jIyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBkb2NzIG1hbnVhbGx5IgotCi0gICAgZGVmIGJ1aWxkRG9jc0Zyb21Tb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNyY2RpciA9ICcuLi8uLi8uLicKLSAgICAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ0RvYycpCi0gICAgICAgIGh0bWxkaXIgPSBvcy5wYXRoLmpvaW4oZG9jZGlyLCAnaHRtbCcpCi0gICAgICAgIHNwYXduKCgnbWFrZScsJy0tZGlyZWN0b3J5JywgZG9jZGlyLCAnaHRtbCcpLCAxLCBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9odG1sKQotICAgICAgICBjb3B5X3RyZWUoaHRtbGRpciwgc2VsZi5idWlsZF9odG1sKQotCi0gICAgZGVmIGVuc3VyZUh0bWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgaWYgc2VsZi5kb3dubG9hZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvd25sb2FkRG9jcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREb2NzRnJvbVNvdXJjZSgpCi0KLSAgICBkZWYgaGFja0luZGV4KHNlbGYpOgotICAgICAgICBpbmRfaHRtbCA9ICdpbmRleC5odG1sJwotICAgICAgICAjcHJpbnQgJ3NlbGYuYnVpbGRfZGVzdCA9Jywgc2VsZi5idWlsZF9kZXN0Ci0gICAgICAgIGhhY2tlZEluZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBpbmRfaHRtbCksJ3cnKQotICAgICAgICBvcmlnSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsaW5kX2h0bWwpKQotICAgICAgICByID0gcmUuY29tcGlsZSgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uKjwvc3R5bGU+JywgcmUuRE9UQUxMKQotICAgICAgICBoYWNrZWRJbmRleC53cml0ZShyLnN1YignPE1FVEEgTkFNRT0iQXBwbGVUaXRsZSIgQ09OVEVOVD0iUHl0aG9uIERvY3VtZW50YXRpb24iPicsb3JpZ0luZGV4LnJlYWQoKSkpCi0KLSAgICBkZWYgaGFja0ZpbGUoc2VsZixkLGYpOgotICAgICAgICBvcmlnUGF0aCA9IG9zLnBhdGguam9pbihkLGYpCi0gICAgICAgIGFzc2VydChvcmlnUGF0aFs6bGVuKHNlbGYuYnVpbGRfaHRtbCldID09IHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3V0UGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGRbbGVuKHNlbGYuYnVpbGRfaHRtbCkrMTpdLCBmKQotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihvcmlnUGF0aCk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChvdXRQYXRoKQotICAgICAgICBlbGlmIGV4dCA9PSAnLmh0bWwnOgotICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOiBwcmludCgnaGFja2luZyAlcyB0byAlcycgJSAob3JpZ1BhdGgsb3V0UGF0aCkpCi0gICAgICAgICAgICBoYWNrZWRGaWxlID0gZmlsZShvdXRQYXRoLCAndycpCi0gICAgICAgICAgICBvcmlnRmlsZSA9IGZpbGUob3JpZ1BhdGgsJ3InKQotICAgICAgICAgICAgaGFja2VkRmlsZS53cml0ZShzZWxmLnIuc3ViKCc8ZGw+PGR0PjxkZD4nLCBvcmlnRmlsZS5yZWFkKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weV9maWxlKG9yaWdQYXRoLCBvdXRQYXRoKQotCi0gICAgZGVmIGhhY2tIdG1sKHNlbGYpOgotICAgICAgICBzZWxmLnIgPSByZS5jb21waWxlKCc8ZGw+PGRkPicpCi0gICAgICAgIG9zLndhbGsoc2VsZi5idWlsZF9odG1sLCBzZWxmLnZpc2l0LCBOb25lKQotCi0gICAgZGVmIHZpc2l0KHNlbGYsIGR1bW15LCBkaXJuYW1lLCBmaWxlbmFtZXMpOgotICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICBzZWxmLmhhY2tGaWxlKGRpcm5hbWUsIGYpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gJy9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAnCi0gICAgICAgIHNlbGYuc3Bhd24oJ29wZW4nLCAnLWEnLCBhcHAgLCBzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIHByaW50KCJQbGVhc2Ugd2FpdCB1bnRpbCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgZmluaXNoZXMgYmVmb3JlIGluc3RhbGxpbmciKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9IEhlbHBJbmRleGluZ1Rvb2wuSGVscEluZGV4aW5nVG9vbChzdGFydD0xKQotICAgICAgICBhcHAub3BlbihDYXJib24uRmlsZS5GU1NwZWMoc2VsZi5idWlsZF9kZXN0KSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIHN0YXJ0Li4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLmVuc3VyZUh0bWwoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHNvdXJjZSBmb2xkZXIgZm9yIGRvY3VtZW50YXRpb24uIikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBpZiBkZXBfdXRpbC5uZXdlcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLCdpbmRleC5odG1sJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsJ2luZGV4Lmh0bWwnKSk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgICAgICBzZWxmLmhhY2tIdG1sKCkKLSAgICAgICAgICAgIHNlbGYuaGFja0luZGV4KCkKLSAgICAgICAgICAgIHNlbGYubWFrZUhlbHBJbmRleCgpCi0KLWNsYXNzIEFIVkRvY0luc3RhbGwoQ29tbWFuZCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBBcHBsZSBIZWxwIFZpZXdlciBodG1sIGZpbGVzIgotICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2luc3RhbGwtZG9jPScsICdkJywKLSAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gaW5zdGFsbCBIVE1MIHRyZWUnKSwKLSAgICAgICAgICAgICAoJ3Jvb3Q9JywgTm9uZSwKLSAgICAgICAgICAgICAiaW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5IiksCi0gICAgICAgICAgICBdCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBOb25lCi0gICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQotICAgICAgICBzZWxmLnJvb3QgPSBOb25lCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLAotICAgICAgICAgICAgICAgICgncHJlZml4JywgJ3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JykpCi0jICAgICAgICAgICAgICAgaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKQotICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBidWlsZF9jbWQuYnVpbGRfZGVzdAotICAgICAgICBpZiBzZWxmLmluc3RhbGxfZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gb3MucGF0aC5qb2luKHNlbGYucHJlZml4LCBERVNURElSKQotICAgICAgICBwcmludCgnSU5TVEFMTCcsIHNlbGYuYnVpbGRfZGVzdCwgJy0+Jywgc2VsZi5pbnN0YWxsX2RvYykKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIEluc3RhbGxlciIpCi0gICAgICAgIGluc3Rsb2MgPSBzZWxmLmluc3RhbGxfZG9jCi0gICAgICAgIGlmIHNlbGYucm9vdDoKLSAgICAgICAgICAgIGluc3Rsb2MgPSBjaGFuZ2Vfcm9vdChzZWxmLnJvb3QsIGluc3Rsb2MpCi0gICAgICAgIHNlbGYubWtwYXRoKGluc3Rsb2MpCi0gICAgICAgIGNvcHlfdHJlZShzZWxmLmJ1aWxkX2Rlc3QsIGluc3Rsb2MpCi0gICAgICAgIHByaW50KCJJbnN0YWxsYXRpb24gY29tcGxldGUiKQotCi1kZWYgbXVuZ2VWZXJzaW9uKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgaSA9IGZpbGUoaW5maWxlLCdyJykKLSAgICBvID0gZmlsZShvdXRmaWxlLCd3JykKLSAgICBvLndyaXRlKHJlLnN1YignXCRcKFZFUlNJT05cKScsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJyksaS5yZWFkKCkpKQotICAgIGkuY2xvc2UoKQotICAgIG8uY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgICMgdHVybiBvZmYgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIG1vZHVsZXMgYXJlIGltcG9ydGVkCi0jIyAgICAgIGltcG9ydCB3YXJuaW5ncwotIyMgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIixjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgc2V0dXAobmFtZSA9ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHZlcnNpb24gPSAnJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCi0gICAgICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRhJzpBSFZEb2NJbnN0YWxsLCAnYnVpbGQnOkRvY0J1aWxkfSwKLSAgICAgICAgICAgIGRhdGFfZmlsZXMgPSBbJ2R1bW15J10sCi0gICAgICAgICAgICApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weSBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CmluZGV4IDZjYzEzMGYuLmY1Njc5ZDMgMTAwNjQ0Ci0tLSBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CisrKyBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CkBAIC0yNzAsNyArMjcwLDcgQEAKIGRlbCBfX2xvYWQKICIiIgogCi1NQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdvczInLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKK01BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCiAgICAgJ3dpbjMyYXBpJywgJ2NlJywgJ193aW5yZWcnLCAnbnR1cmwycGF0aCcsICdzaXRlY3VzdG9taXplJywKICAgICAnb3JnLnB5dGhvbi5jb3JlJywgJ3Jpc2NvcycsICdyaXNjb3NlbnZpcm9uJywgJ3Jpc2Nvc3BhdGgnCiBdCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkgYi9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExZDk3NgotLS0gL2Rldi9udWxsCisrKyBiL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQpAQCAtMCwwICsxLDk0IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKK2Zyb20gQ29jb2EgaW1wb3J0IE5TTXV0YWJsZURpY3Rpb25hcnksIE5TTXV0YWJsZUFycmF5LCBOU1N0cmluZywgTlNEYXRlCitmcm9tIENvY29hIGltcG9ydCBOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24sIE5TUHJvcGVydHlMaXN0T3BlblN0ZXBGb3JtYXQKK2Zyb20gQ29jb2EgaW1wb3J0IE5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3YxXzAsIE5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzAKK2Zyb20gQ29jb2EgaW1wb3J0IENGVVVJRENyZWF0ZUZyb21TdHJpbmcsIE5TTnVsbCwgTlNVVUlELCBDRlByb3BlcnR5TGlzdENyZWF0ZURhdGEKK2Zyb20gQ29jb2EgaW1wb3J0IE5TVVJMCisKK2ltcG9ydCBkYXRldGltZQorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2ltcG9ydCBiaW5hc2NpaQorCitGT1JNQVRTPVsKKyMgICAgKCdvcGVuc3RlcCcsIE5TUHJvcGVydHlMaXN0T3BlblN0ZXBGb3JtYXQpLAorICAgICgncGxpc3RsaWIuRk1UX1hNTCcsIE5TUHJvcGVydHlMaXN0WE1MRm9ybWF0X3YxXzApLAorICAgICgncGxpc3RsaWIuRk1UX0JJTkFSWScsIE5TUHJvcGVydHlMaXN0QmluYXJ5Rm9ybWF0X3YxXzApLAorXQorCitkZWYgbnNzdHIodmFsdWUpOgorICAgIHJldHVybiBOU1N0cmluZy5hbGxvYygpLmluaXRXaXRoU3RyaW5nXyh2YWx1ZSkKKworCitkZWYgbWFpbigpOgorICAgIHBsID0gT3JkZXJlZERpY3QoKQorCisgICAgc2Vjb25kcyA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMDQsIDEwLCAyNiwgMTAsIDMzLCAzMywgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lKGRhdGV0aW1lLnRpbWVkZWx0YSgwKSkpLnRpbWVzdGFtcCgpCisgICAgcGxbbnNzdHIoJ2FEYXRlJyldID0gTlNEYXRlLmRhdGVXaXRoVGltZUludGVydmFsU2luY2UxOTcwXyhzZWNvbmRzKQorCisgICAgcGxbbnNzdHIoJ2FEaWN0JyldID0gZCA9IE9yZGVyZWREaWN0KCkKKyAgICBkW25zc3RyKCdhRmFsc2VWYWx1ZScpXSA9IEZhbHNlCisgICAgZFtuc3N0cignYVRydWVWYWx1ZScpXSA9IFRydWUKKyAgICBkW25zc3RyKCdhVW5pY29kZVZhbHVlJyldID0gIk1ceGU0c3NpZywgTWFceGRmIgorICAgIGRbbnNzdHIoJ2Fub3RoZXJTdHJpbmcnKV0gPSAiPGhlbGxvICYgJ2hpJyB0aGVyZSE+IgorICAgIGRbbnNzdHIoJ2RlZXBlckRpY3QnKV0gPSBkZCA9IE9yZGVyZWREaWN0KCkKKyAgICBkZFtuc3N0cignYScpXSA9IDE3CisgICAgZGRbbnNzdHIoJ2InKV0gPSAzMi41CisgICAgZGRbbnNzdHIoJ2MnKV0gPSBhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZCgxKQorICAgIGEuYXBwZW5kKDIpCisgICAgYS5hcHBlbmQobnNzdHIoJ3RleHQnKSkKKworICAgIHBsW25zc3RyKCdhRmxvYXQnKV0gPSAwLjUKKworICAgIHBsW25zc3RyKCdhTGlzdCcpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKG5zc3RyKCdBJykpCisgICAgYS5hcHBlbmQobnNzdHIoJ0InKSkKKyAgICBhLmFwcGVuZCgxMikKKyAgICBhLmFwcGVuZCgzMi41KQorICAgIGFhID0gTlNNdXRhYmxlQXJyYXkuYWxsb2MoKS5pbml0KCkKKyAgICBhLmFwcGVuZChhYSkKKyAgICBhYS5hcHBlbmQoMSkKKyAgICBhYS5hcHBlbmQoMikKKyAgICBhYS5hcHBlbmQoMykKKworICAgIHBsW25zc3RyKCdhU3RyaW5nJyldID0gbnNzdHIoJ0Rvb2RhaCcpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eURpY3QnKV0gPSBOU011dGFibGVEaWN0aW9uYXJ5LmFsbG9jKCkuaW5pdCgpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eUxpc3QnKV0gPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorCisgICAgcGxbbnNzdHIoJ2FuSW50JyldID0gNzI4CisKKyAgICBwbFtuc3N0cignbmVzdGVkRGF0YScpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKGInJyc8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzJycnKQorCisKKyAgICBwbFtuc3N0cignc29tZURhdGEnKV0gPSBiJzxiaW5hcnkgZ3Vuaz4nCisKKyAgICBwbFtuc3N0cignc29tZU1vcmVEYXRhJyldID0gYicnJzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDMnJycKKworICAgIHBsW25zc3RyKCdceGM1YmVucmFhJyldID0gbnNzdHIoIlRoYXQgd2FzIGEgdW5pY29kZSBrZXkuIikKKworICAgIHByaW50KCJURVNUREFUQT17IikKKyAgICBmb3IgZm10X25hbWUsIGZtdF9rZXkgaW4gRk9STUFUUzoKKyAgICAgICAgZGF0YSwgZXJyb3IgPSBOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24uZGF0YVdpdGhQcm9wZXJ0eUxpc3RfZm9ybWF0X29wdGlvbnNfZXJyb3JfKAorICAgICAgICAgICAgcGwsIGZtdF9rZXksIDAsIE5vbmUpCisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJDYW5ub3Qgc2VyaWFsaXplIiwgZm10X25hbWUsIGVycm9yKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiICAgICVzOiBiaW5hc2NpaS5hMmJfYmFzZTY0KGInJydcbiAgICAgICAgJXMnJycpLCIlKGZtdF9uYW1lLCBfZW5jb2RlX2Jhc2U2NChieXRlcyhkYXRhKSkuZGVjb2RlKCdhc2NpaScpWzotMV0pKQorCisgICAgcHJpbnQoIn0iKQorICAgIHByaW50KCkKKworZGVmIF9lbmNvZGVfYmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NjApOgorICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMworICAgIHBpZWNlcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKKyAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KKyAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKKyAgICByZXR1cm4gYicgICAgICAgICcuam9pbihwaWVjZXMpCisKK21haW4oKQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCmluZGV4IGE2YWE5NzUuLmY4NDNhYTUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnByZS5pbgorKysgYi9NYWtlZmlsZS5wcmUuaW4KQEAgLTEyNyw3ICsxMjcsNiBAQAogIyBTeW1ib2xzIHVzZWQgZm9yIHVzaW5nIHNoYXJlZCBsaWJyYXJpZXMKIFNITElCX1NVRkZJWD0JQFNITElCX1NVRkZJWEAKIEVYVF9TVUZGSVg9CUBFWFRfU1VGRklYQAotU089CQkkKFNITElCX1NVRkZJWCkKIExEU0hBUkVEPQlATERTSEFSRURAICQoUFlfTERGTEFHUykKIEJMRFNIQVJFRD0JQEJMRFNIQVJFREAgJChQWV9MREZMQUdTKQogTERDWFhTSEFSRUQ9CUBMRENYWFNIQVJFREAKQEAgLTE0OSwxMiArMTQ4LDIxIEBACiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9QENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRACiBARVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVEBleHBvcnQgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiAKKyMgT3B0aW9uIHRvIGluc3RhbGwgdG8gc3RyaXAgYmluYXJpZXMKK1NUUklQRkxBRz0tcworCisjIEZsYWdzIHRvIGxpcG8gdG8gcHJvZHVjZSBhIDMyLWJpdC1vbmx5IHVuaXZlcnNhbCBleGVjdXRhYmxlCitMSVBPXzMyQklUX0ZMQUdTPUBMSVBPXzMyQklUX0ZMQUdTQAorCiAjIE9wdGlvbnMgdG8gZW5hYmxlIHByZWJpbmRpbmcgKGZvciBmYXN0IHN0YXJ0dXAgcHJpb3IgdG8gTWFjIE9TIFggMTAuMykKIE9USEVSX0xJQlRPT0xfT1BUPUBPVEhFUl9MSUJUT09MX09QVEAKIAogIyBFbnZpcm9ubWVudCB0byBydW4gc2hhcmVkIHB5dGhvbiB3aXRob3V0IGluc3RhbGxlZCBsaWJyYXJpZXMKIFJVTlNIQVJFRD0gICAgICAgQFJVTlNIQVJFREAKIAorIyBlbnN1cmVwaXAgb3B0aW9ucworRU5TVVJFUElQPSAgICAgIEBFTlNVUkVQSVBACisKICMgTW9kZXMgZm9yIGRpcmVjdG9yaWVzLCBleGVjdXRhYmxlcyBhbmQgZGF0YSBmaWxlcyBjcmVhdGVkIGJ5IHRoZQogIyBpbnN0YWxsIHByb2Nlc3MuICBEZWZhdWx0IHRvIHVzZXItb25seS13cml0YWJsZSBmb3IgYWxsIGZpbGUgdHlwZXMuCiBESVJNT0RFPQk3NTUKQEAgLTIxNiw2ICsyMjQsMTIgQEAKIFBST0ZJTEVfVEFTSz0JJChzcmNkaXIpL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weSAtbiAyIC0td2l0aC1nYyAtLXdpdGgtc3lzY2hlY2sKICNQUk9GSUxFX1RBU0s9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQogCisjIHJlcG9ydCBmaWxlcyBmb3IgZ2NvdiAvIGxjb3YgY292ZXJhZ2UgcmVwb3J0CitDT1ZFUkFHRV9JTkZPPQkkKGFic19idWlsZGRpcikvY292ZXJhZ2UuaW5mbworQ09WRVJBR0VfUkVQT1JUPSQoYWJzX2J1aWxkZGlyKS9sY292LXJlcG9ydAorQ09WRVJBR0VfUkVQT1JUX09QVElPTlM9LS1uby1icmFuY2gtY292ZXJhZ2UgLS10aXRsZSAiQ1B5dGhvbiBsY292IHJlcG9ydCIKKworCiAjID09PSBEZWZpbml0aW9ucyBhZGRlZCBieSBtYWtlc2V0dXAgPT09CiAKIApAQCAtMzYxLDYgKzM3NSw3IEBACiAJCVB5dGhvbi9weWFyZW5hLm8gXAogCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUHl0aG9uL3B5ZnBlLm8gXAorCQlQeXRob24vcHloYXNoLm8gXAogCQlQeXRob24vcHltYXRoLm8gXAogCQlQeXRob24vcHlzdGF0ZS5vIFwKIAkJUHl0aG9uL3B5dGhvbnJ1bi5vIFwKQEAgLTQ0NCw3ICs0NTksNyBAQAogCiAjIERlZmF1bHQgdGFyZ2V0CiBhbGw6CQlidWlsZF9hbGwKLWJ1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZAorYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMgZ2RiaG9va3MgTW9kdWxlcy9fdGVzdGVtYmVkIHB5dGhvbi1jb25maWcKIAogIyBDb21waWxlIGEgYmluYXJ5IHdpdGggZ2NjIHByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbi4KIHByb2ZpbGUtb3B0OgpAQCAtNDY4LDExICs0ODMsNTQgQEAKIGJ1aWxkX2FsbF91c2VfcHJvZmlsZToKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIC1mcHJvZmlsZS1jb3JyZWN0aW9uIgogCisjIENvbXBpbGUgYW5kIHJ1biB3aXRoIGdjb3YKKy5QSE9OWT1jb3ZlcmFnZSBjb3ZlcmFnZS1sY292IGNvdmVyYWdlLXJlcG9ydAogY292ZXJhZ2U6CiAJQGVjaG8gIkJ1aWxkaW5nIHdpdGggc3VwcG9ydCBmb3IgY292ZXJhZ2UgY2hlY2tpbmc6IgotCSQoTUFLRSkgY2xlYW4KKwkkKE1BS0UpIGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1PMCAtcGcgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIiBMSUJTPSIkKExJQlMpIC1sZ2NvdiIKIAorY292ZXJhZ2UtbGNvdjoKKwlAZWNobyAiQ3JlYXRpbmcgQ292ZXJhZ2UgSFRNTCByZXBvcnQgd2l0aCBMQ09WOiIKKwlAcm0gLWYgJChDT1ZFUkFHRV9JTkZPKQorCUBybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCisJQGxjb3YgLS1jYXB0dXJlIC0tZGlyZWN0b3J5ICQoYWJzX2J1aWxkZGlyKSBcCisJICAgIC0tYmFzZS1kaXJlY3RvcnkgJChyZWFscGF0aCAkKGFic19idWlsZGRpcikpIFwKKwkgICAgLS1wYXRoICQocmVhbHBhdGggJChhYnNfc3JjZGlyKSkgXAorCSAgICAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfSU5GTykKKwk6ICMgcmVtb3ZlIDNyZCBwYXJ0eSBtb2R1bGVzIGFuZCBzeXN0ZW0gaGVhZGVycworCUBsY292IC0tcmVtb3ZlICQoQ09WRVJBR0VfSU5GTykgXAorCSAgICAnKi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpKi8qJyBcCisJICAgICcqL01vZHVsZXMvX3NoYTMva2VjY2FrLyonIFwKKwkgICAgJyovTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy8qJyBcCisJICAgICcqL01vZHVsZXMvZXhwYXQvKicgXAorCSAgICAnKi9Nb2R1bGVzL3psaWIvKicgXAorCSAgICAnKi9JbmNsdWRlLyonIFwKKwkgICAgJy91c3IvaW5jbHVkZS8qJyBcCisJICAgICcvdXNyL2xvY2FsL2luY2x1ZGUvKicgXAorCSAgICAtLW91dHB1dC1maWxlICQoQ09WRVJBR0VfSU5GTykKKwlAZ2VuaHRtbCAkKENPVkVSQUdFX0lORk8pIC0tb3V0cHV0LWRpcmVjdG9yeSAkKENPVkVSQUdFX1JFUE9SVCkgXAorCSAgICAkKENPVkVSQUdFX1JFUE9SVF9PUFRJT05TKQorCUBlY2hvCisJQGVjaG8gImxjb3YgcmVwb3J0IGF0ICQoQ09WRVJBR0VfUkVQT1JUKS9pbmRleC5odG1sIgorCUBlY2hvCisKK2NvdmVyYWdlLXJlcG9ydDoKKwk6ICMgZm9yY2UgcmVidWlsZGluZyBvZiBwYXJzZXIgYW5kIGltcG9ydGxpYgorCUB0b3VjaCAkKEdSQU1NQVJfSU5QVVQpCisJQHRvdWNoICQoc3JjZGlyKS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKKwk6ICMgYnVpbGQgd2l0aCBjb3ZlcmFnZSBpbmZvCisJJChNQUtFKSBjb3ZlcmFnZQorCTogIyBydW4gdGVzdHMsIGlnbm9yZSBmYWlsdXJlcworCSQoVEVTVFJVTk5FUikgJChURVNUT1BUUykgfHwgdHJ1ZQorCTogIyBidWlsZCBsY292IHJlcG9ydAorCSQoTUFLRSkgY292ZXJhZ2UtbGNvdgorCisjIFJ1biAiQXJndW1lbnQgQ2xpbmljIiBvdmVyIGFsbCBzb3VyY2UgZmlsZXMKKyMgKGRlcGVuZHMgb24gcHl0aG9uIGhhdmluZyBhbHJlYWR5IGJlZW4gYnVpbHQpCisuUEhPTlk9Y2xpbmljCitjbGluaWM6ICQoQlVJTERQWVRIT04pCisJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLi9Ub29scy9jbGluaWMvY2xpbmljLnB5IC0tbWFrZQogCiAjIEJ1aWxkIHRoZSBpbnRlcnByZXRlcgogJChCVUlMRFBZVEhPTik6CU1vZHVsZXMvcHl0aG9uLm8gJChMSUJSQVJZKSAkKExETElCUkFSWSkgJChQWTNMSUJSQVJZKQpAQCAtNjQ2LDYgKzcwNCw4IEBACiBNb2R1bGVzL190ZXN0ZW1iZWQubzogJChzcmNkaXIpL01vZHVsZXMvX3Rlc3RlbWJlZC5jCiAJJChNQUlOQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIC1vICRAICQoc3JjZGlyKS9Nb2R1bGVzL190ZXN0ZW1iZWQuYwogCitNb2R1bGVzL19zcmUubzogJChzcmNkaXIpL01vZHVsZXMvX3NyZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3NyZS5oICQoc3JjZGlyKS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaCAkKHNyY2RpcikvTW9kdWxlcy9zcmVfbGliLmgKKwogTW9kdWxlcy9wb3NpeG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5jICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmgKIAogTW9kdWxlcy9ncnBtb2R1bGUubzogJChzcmNkaXIpL01vZHVsZXMvZ3JwbW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaApAQCAtNzEzLDI3ICs3NzMsMzEgQEAKIAkJCQkkKHNyY2RpcikvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCiAKIEJZVEVTVFJfREVQUyA9IFwKLQkJJChzcmNkaXIpL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY3R5cGUuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9lcS5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAogCi1VTklDT0RFX0RFUFMgPSAkKEJZVEVTVFJfREVQUykgXAorVU5JQ09ERV9ERVBTID0gXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAogCkBAIC03NTEsOSArODE1LDYgQEAKIAogUHl0aG9uL2NldmFsLm86ICQoT1BDT0RFVEFSR0VUU19IKSAkKHNyY2RpcikvUHl0aG9uL2NldmFsX2dpbC5oCiAKLVB5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5vOiAkKHNyY2RpcikvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMgXAotCQkJCSQoQllURVNUUl9ERVBTKQotCiBQeXRob24vZnJvemVuLm86IFB5dGhvbi9pbXBvcnRsaWIuaAogCiBPYmplY3RzL3R5cGVvYmplY3QubzogT2JqZWN0cy90eXBlc2xvdHMuaW5jCkBAIC04MjMsNiArODg0LDcgQEAKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlkZWJ1Zy5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHllcnJvcnMuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5ZnBlLmggXAorCQkkKHNyY2RpcikvSW5jbHVkZS9weWhhc2guaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5bWF0aC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlnZXRvcHQuaCBcCiAJCSQoc3JjZGlyKS9JbmNsdWRlL3B5bWFjcm8uaCBcCkBAIC05MDAsMTYgKzk2MiwzOCBAQAogCiBRVUlDS1RFU1RPUFRTPQkkKFRFU1RPUFRTKSAteCB0ZXN0X3N1YnByb2Nlc3MgdGVzdF9pbyB0ZXN0X2xpYjJ0bzMgXAogCQl0ZXN0X211bHRpYnl0ZWNvZGVjIHRlc3RfdXJsbGliMl9sb2NhbG5ldCB0ZXN0X2l0ZXJ0b29scyBcCi0JCXRlc3RfbXVsdGlwcm9jZXNzaW5nIHRlc3RfbWFpbGJveCB0ZXN0X3NvY2tldCB0ZXN0X3BvbGwgXAorCQl0ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrIHRlc3RfbXVsdGlwcm9jZXNzaW5nX3NwYXduIFwKKwkJdGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciBcCisJCXRlc3RfbWFpbGJveCB0ZXN0X3NvY2tldCB0ZXN0X3BvbGwgXAogCQl0ZXN0X3NlbGVjdCB0ZXN0X3ppcGZpbGUgdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMKIHF1aWNrdGVzdDoJYWxsIHBsYXRmb3JtCiAJCSQoVEVTVFJVTk5FUikgJChRVUlDS1RFU1RPUFRTKQogCiAKLWluc3RhbGw6IGFsdGluc3RhbGwgYmluaW5zdGFsbCBtYW5pbnN0YWxsCitpbnN0YWxsOiBARlJBTUVXT1JLSU5TVEFMTEZJUlNUQCBjb21tb25pbnN0YWxsIGJpbmluc3RhbGwgbWFuaW5zdGFsbCBARlJBTUVXT1JLSU5TVEFMTExBU1RACisJaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNhc2UgJChFTlNVUkVQSVApIGluIFwKKwkJCXVwZ3JhZGUpIGVuc3VyZXBpcD0iLS11cGdyYWRlIiA7OyBcCisJCQlpbnN0YWxsfCopIGVuc3VyZXBpcD0iIiA7OyBcCisJCWVzYWM7IFwKKwkJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gZW5zdXJlcGlwIFwKKwkJCSQkZW5zdXJlcGlwIC0tcm9vdD0kKERFU1RESVIpLyA7IFwKKwlmaQogCi1hbHRpbnN0YWxsOglARlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUQCBhbHRiaW5pbnN0YWxsIGxpYmluc3RhbGwgaW5jbGluc3RhbGwgbGliYWluc3RhbGwgXAotICAgICAgICAgICAgICAgIHNoYXJlZGluc3RhbGwgb2xkc2hhcmVkaW5zdGFsbCBhbHRtYW5pbnN0YWxsIEBGUkFNRVdPUktBTFRJTlNUQUxMTEFTVEAKK2FsdGluc3RhbGw6IGNvbW1vbmluc3RhbGwKKwlpZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2FzZSAkKEVOU1VSRVBJUCkgaW4gXAorCQkJdXBncmFkZSkgZW5zdXJlcGlwPSItLWFsdGluc3RhbGwgLS11cGdyYWRlIiA7OyBcCisJCQlpbnN0YWxsfCopIGVuc3VyZXBpcD0iLS1hbHRpbnN0YWxsIiA7OyBcCisJCWVzYWM7IFwKKwkJJChSVU5TSEFSRUQpICQoUFlUSE9OX0ZPUl9CVUlMRCkgLW0gZW5zdXJlcGlwIFwKKwkJCSQkZW5zdXJlcGlwIC0tcm9vdD0kKERFU1RESVIpLyA7IFwKKwlmaQorCitjb21tb25pbnN0YWxsOiAgQEZSQU1FV09SS0FMVElOU1RBTExGSVJTVEAgXAorCQlhbHRiaW5pbnN0YWxsIGxpYmluc3RhbGwgaW5jbGluc3RhbGwgbGliYWluc3RhbGwgXAorCQlzaGFyZWRpbnN0YWxsIG9sZHNoYXJlZGluc3RhbGwgYWx0bWFuaW5zdGFsbCBcCisJCUBGUkFNRVdPUktBTFRJTlNUQUxMTEFTVEAKIAogIyBJbnN0YWxsIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBieSBTZXR1cAogREVTVERJUlM9CSQoZXhlY19wcmVmaXgpICQoTElCRElSKSAkKEJJTkxJQkRFU1QpICQoREVTVFNIQVJFRCkKQEAgLTkzNCw3ICsxMDE4LDcgQEAKIAogIyBJbnN0YWxsIHRoZSBpbnRlcnByZXRlciB3aXRoICQoVkVSU0lPTikgYWZmaXhlZAogIyBUaGlzIGdvZXMgaW50byAkKGV4ZWNfcHJlZml4KQotYWx0YmluaW5zdGFsbDogJChCVUlMRFBZVEhPTikKK2FsdGJpbmluc3RhbGw6ICQoQlVJTERQWVRIT04pIEBGUkFNRVdPUktQWVRIT05XQAogCUBmb3IgaSBpbiAkKEJJTkRJUikgJChMSUJESVIpOyBcCiAJZG8gXAogCQlpZiB0ZXN0ICEgLWQgJChERVNURElSKSQkaTsgdGhlbiBcCkBAIC05NDMsMTQgKzEwMjcsMTggQEAKIAkJZWxzZQl0cnVlOyBcCiAJCWZpOyBcCiAJZG9uZQotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEJVSUxEUFlUSE9OKSAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKSQoRVhFKQorCWlmIHRlc3QgIiQoUFlUSE9ORlJBTUVXT1JLRElSKSIgPSAibm8tZnJhbWV3b3JrIiA7IHRoZW4gXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJChCVUlMRFBZVEhPTikgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSk7IFwKKwllbHNlIFwKKwkJJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBNYWMvcHl0aG9udyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKSQoRVhFKTsgXAorCWZpCiAJLWlmIHRlc3QgIiQoVkVSU0lPTikiICE9ICIkKExEVkVSU0lPTikiOyB0aGVuIFwKIAkJaWYgdGVzdCAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSkgLW8gLWggJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCiAJCXRoZW4gcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpOyBcCiAJCWZpOyBcCiAJCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSBweXRob24kKExEVkVSU0lPTikkKEVYRSkgcHl0aG9uJChWRVJTSU9OKSQoRVhFKSk7IFwKIAlmaQotCWlmIHRlc3QgLWYgJChMRExJQlJBUlkpOyB0aGVuIFwKKwlpZiB0ZXN0IC1mICQoTERMSUJSQVJZKSAmJiB0ZXN0ICIkKFBZVEhPTkZSQU1FV09SS0RJUikiID0gIm5vLWZyYW1ld29yayIgOyB0aGVuIFwKIAkJaWYgdGVzdCAtbiAiJChETExMSUJSQVJZKSIgOyB0aGVuIFwKIAkJCSQoSU5TVEFMTF9TSEFSRUQpICQoRExMTElCUkFSWSkgJChERVNURElSKSQoQklORElSKTsgXAogCQllbHNlIFwKQEAgLTk2NCw2ICsxMDUyLDEyIEBACiAJCWZpOyBcCiAJZWxzZQl0cnVlOyBcCiAJZmkKKwlpZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiIDsgdGhlbiBcCisJCXJtIC1mICQoREVTVERJUikkKEJJTkRJUilweXRob24kKFZFUlNJT04pLTMyJChFWEUpOyBcCisJCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSBcCisJCQktb3V0cHV0ICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKSBcCisJCQkkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKKwlmaQogCiBiaW5pbnN0YWxsOiBhbHRiaW5pbnN0YWxsCiAJLWlmIHRlc3QgLWYgJChERVNURElSKSQoQklORElSKS9weXRob24zJChFWEUpIC1vIC1oICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMyQoRVhFKTsgXApAQCAtOTg5LDYgKzEwODMsMTAgQEAKIAkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgMnRvMy0kKFZFUlNJT04pIDJ0bzMpCiAJLXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl2ZW52CiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5dmVudi0kKFZFUlNJT04pIHB5dmVudikKKwlpZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiIDsgdGhlbiBcCisJCXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uMy0zMiQoRVhFKTsgXAorCQkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgcHl0aG9uJChWRVJTSU9OKS0zMiQoRVhFKSBweXRob24zLTMyJChFWEUpKSBcCisJZmkKIAogIyBJbnN0YWxsIHRoZSB2ZXJzaW9uZWQgbWFudWFsIHBhZ2UKIGFsdG1hbmluc3RhbGw6CkBAIC0xMDQwLDggKzExMzgsMTEgQEAKIAkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQgXAogICAgICAgICAgICAgICAgIHRlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZSBcCiAgICAgICAgICAgICAgICAgdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdCBcCisJCWFzeW5jaW8gXAorCQl0ZXN0L3Rlc3RfYXN5bmNpbyBcCiAJCWNvbGxlY3Rpb25zIGNvbmN1cnJlbnQgY29uY3VycmVudC9mdXR1cmVzIGVuY29kaW5ncyBcCiAJCWVtYWlsIGVtYWlsL21pbWUgdGVzdC90ZXN0X2VtYWlsIHRlc3QvdGVzdF9lbWFpbC9kYXRhIFwKKwkJZW5zdXJlcGlwIGVuc3VyZXBpcC9fYnVuZGxlZCBcCiAJCWh0bWwganNvbiB0ZXN0L3Rlc3RfanNvbiBodHRwIGRibSB4bWxycGMgXAogCQlzcWxpdGUzIHNxbGl0ZTMvdGVzdCBcCiAJCWxvZ2dpbmcgY3N2IHdzZ2lyZWYgdXJsbGliIFwKQEAgLTExNTksMTAgKzEyNjAsMTkgQEAKIAlmaTsgXAogCWNkICQoc3JjZGlyKS9MaWIvJChQTEFURElSKTsgJChSVU5TSEFSRUQpIC4vcmVnZW4KIAotcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorcHl0aG9uLWNvbmZpZzogJChzcmNkaXIpL01pc2MvcHl0aG9uLWNvbmZpZy5pbiBNaXNjL3B5dGhvbi1jb25maWcuc2gKIAkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgogCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKLQlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcKKwlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcucHkKKwkjIFJlcGxhY2UgbWFrZWZpbGUgY29tcGF0LiB2YXJpYWJsZSByZWZlcmVuY2VzIHdpdGggc2hlbGwgc2NyaXB0IGNvbXBhdC4gb25lczsgJChWQVIpIC0+ICR7VkFSfQorCXNlZCAtZSAncyxcJCQoXChbQS1aYS16MC05X10qXCkpLFwkJFx7XDFcfSxnJyA8IE1pc2MvcHl0aG9uLWNvbmZpZy5zaCA+cHl0aG9uLWNvbmZpZworCSMgT24gRGFyd2luLCBhbHdheXMgdXNlIHRoZSBweXRob24gdmVyc2lvbiBvZiB0aGUgc2NyaXB0LCB0aGUgc2hlbGwKKwkjIHZlcnNpb24gZG9lc24ndCB1c2UgdGhlIGNvbXBpbGVyIGN1c3RvbWl6YXRpb25zIHRoYXQgYXJlIHByb3ZpZGVkCisJIyBpbiBweXRob24gKF9vc3hfc3VwcG9ydC5weSkuCisJaWYgdGVzdCBgdW5hbWUgLXNgID0gRGFyd2luOyB0aGVuIFwKKwkJY3AgcHl0aG9uLWNvbmZpZy5weSBweXRob24tY29uZmlnOyBcCisJZmkKKwogCiAjIEluc3RhbGwgdGhlIGluY2x1ZGUgZmlsZXMKIElOQ0xESVJTVE9NQUtFPSQoSU5DTFVERURJUikgJChDT05GSU5DTFVERURJUikgJChJTkNMVURFUFkpICQoQ09ORklOQ0xVREVQWSkKQEAgLTEyMjAsOCArMTMzMCw4IEBACiAJJChJTlNUQUxMX0RBVEEpIE1pc2MvcHl0aG9uLnBjICQoREVTVERJUikkKExJQlBDKS9weXRob24tJChWRVJTSU9OKS5wYwogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9Nb2R1bGVzL21ha2VzZXR1cCAkKERFU1RESVIpJChMSUJQTCkvbWFrZXNldHVwCiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKKwkkKElOU1RBTExfU0NSSVBUKSBweXRob24tY29uZmlnLnB5ICQoREVTVERJUikkKExJQlBMKS9weXRob24tY29uZmlnLnB5CiAJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKS1jb25maWcKLQlybSBweXRob24tY29uZmlnCiAJQGlmIFsgLXMgTW9kdWxlcy9weXRob24uZXhwIC1hIFwKIAkJImBlY2hvICQoTUFDSERFUCkgfCBzZWQgJ3MvXlwoLi4uXCkuKi9cMS8nYCIgPSAiYWl4IiBdOyB0aGVuIFwKIAkJZWNobzsgZWNobyAiSW5zdGFsbGluZyBzdXBwb3J0IGZpbGVzIGZvciBidWlsZGluZyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMgb24gQUlYOiI7IFwKQEAgLTEzMDMsNyArMTQxMywxNCBAQAogZnJhbWV3b3JraW5zdGFsbGFwcHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHMgREVTVERJUj0iJChERVNURElSKSIKIAotIyBUaGlzIGluc3RhbGwgdGhlIHVuaXggcHl0aG9uIGFuZCBweXRob253IHRvb2xzIGluIC91c3IvbG9jYWwvYmluCisjIEJ1aWxkIHRoZSBib290c3RyYXAgZXhlY3V0YWJsZSB0aGF0IHdpbGwgc3Bhd24gdGhlIGludGVycHJldGVyIGluc2lkZQorIyBhbiBhcHAgYnVuZGxlIHdpdGhpbiB0aGUgZnJhbWV3b3JrLiAgVGhpcyBhbGxvd3MgdGhlIGludGVycHJldGVyIHRvCisjIHJ1biBPUyBYIEdVSSBBUElzLgorZnJhbWV3b3JrcHl0aG9udzoKKwljZCBNYWMgJiYgJChNQUtFKSBweXRob253CisKKyMgVGhpcyBpbnN0YWxscyB0aGUgcHl0aG9uKiBhbmQgb3RoZXIgYmluIHN5bWxpbmtzIGluICRwcmVmaXgvYmluIG9yIGluCisjIGEgYmluIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgZnJhbWV3b3JrIHJvb3QKIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCkBAIC0xNDAxLDYgKzE1MTgsOCBAQAogCiBwcm9maWxlLXJlbW92YWw6CiAJZmluZCAuIC1uYW1lICcqLmdjPz8nIC1leGVjIHJtIC1mIHt9ICc7JworCXJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlybSAtcmYgJChDT1ZFUkFHRV9SRVBPUlQpCiAKIGNsb2JiZXI6IGNsZWFuIHByb2ZpbGUtcmVtb3ZhbAogCS1ybSAtZiAkKEJVSUxEUFlUSE9OKSAkKFBHRU4pICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoRExMTElCUkFSWSkgXApAQCAtMTQwOCw2ICsxNTI3LDcgQEAKIAkJY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgcHljb25maWcuaCBNb2R1bGVzL2NvbmZpZy5jCiAJLXJtIC1yZiBidWlsZCBwbGF0Zm9ybQogCS1ybSAtcmYgJChQWVRIT05GUkFNRVdPUktESVIpCisJLXJtIC1mIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZwogCiAjIE1ha2UgdGhpbmdzIGV4dHJhIGNsZWFuLCBiZWZvcmUgbWFraW5nIGEgZGlzdHJpYnV0aW9uOgogIyByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcywgZXZlbiBNYWtlZmlsZVsucHJlXQpAQCAtMTQ3OSw3ICsxNTk5LDcgQEAKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbCBmcmFtZXdvcmtpbnN0YWxsZnJhbWV3b3JrIGZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUKIC5QSE9OWTogZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzCiAuUEhPTlk6IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHMgcmVjaGVjayBhdXRvY29uZiBjbGVhbiBjbG9iYmVyIGRpc3RjbGVhbgotLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsCisuUEhPTlk6IHNtZWxseSBmdW5ueSBwYXRjaGNoZWNrIHRvdWNoIGFsdG1hbmluc3RhbGwgY29tbW9uaW5zdGFsbAogLlBIT05ZOiBnZGJob29rcwogCiAjIElGIFlPVSBQVVQgQU5ZVEhJTkcgSEVSRSBJVCBXSUxMIEdPIEFXQVkKZGlmZiAtLWdpdCBhL01pc2MvQUNLUyBiL01pc2MvQUNLUwppbmRleCAyYzk1N2UzLi41ZTYwZjliIDEwMDY0NAotLS0gYS9NaXNjL0FDS1MKKysrIGIvTWlzYy9BQ0tTCkBAIC01Niw2ICs1Niw3IEBACiBEb25vdmFuIEJhYXJkYQogQXJuZSBCYWJlbmhhdXNlcmhlaWRlCiBBdHRpbGEgQmFibworTWF0dCBCYWNobWFubgogTWFyY2luIEJhY2hyeQogQWxmb25zbyBCYWNpZXJvCiBEd2F5bmUgQmFpbGV5CkBAIC0xMjIsNiArMTIzLDcgQEAKIE1pY2hhZWwgQmlydHdlbGwKIFN0dWFydCBCaXNob3AKIFJveSBCaXhsZXIKK0RhbmllbCBCbGFjawogSm9uYXRoYW4gQmxhY2sKIFJlbmF1ZCBCbGFuY2gKIE1pa2UgQmxhbmQKQEAgLTEzOSw2ICsxNDEsNyBAQAogRm9yZXN0IEJvbmQKIEdyZWdvcnkgQm9uZAogTWF0aWFzIEJvcmRlc2UKK0pvbmFzIEJvcmdzdHLDtm0KIEp1cmplbiBCb3MKIFBldGVyIEJvc2NoCiBEYW4gQm9zd2VsbApAQCAtMTUzLDggKzE1NiwxMCBAQAogQ2hyaXN0b3BoZXIgQnJhbm5vbgogVGVycmVuY2UgQnJhbm5vbgogR2VybcOhbiBNLiBCcmF2bworU3ZlbiBCcmF1Y2gKIEVyaWsgQnJheQogQnJpYW4gQnJhemlsCitEZW1pYW4gQnJlY2h0CiBEYXZlIEJyZW5uYW4KIFRvbSBCcmlkZ21hbgogQW50aG9ueSBCcmlnZ3MKQEAgLTE3MSw5ICsxNzYsMTEgQEAKIEZyYW5jaXNjbyBNYXJ0w61uIEJydWd1w6kKIElhbiBCcnVudGxldHQKIEZsb3JpcyBCcnV5bm9vZ2hlCitNYXR0IEJyeWFudAogU3RhbiBCdWJyb3Vza2kKIEVyaWsgZGUgQnVlZ2VyCiBKYW4tSGVpbiBCw7xocm1hbgorTGFycyBCdWl0aW5jawogRGljayBCdWx0ZXJtYW4KIEJpbGwgQnVtZ2FybmVyCiBKaW1teSBCdXJnZXR0CkBAIC0xOTMsNiArMjAwLDcgQEAKIE1pa2UgQ2FybHRvbgogUGllcnJlIENhcnJpZXIKIFRlcnJ5IENhcnJvbGwKK0Vkd2FyZCBDYXRtdXIKIExvcmVuem8gTS4gQ2F0dWNjaQogRG9ubiBDYXZlCiBDaGFybGVzIENhemFib24KQEAgLTIyNyw2ICsyMzUsNyBAQAogQ3JhaWcgQ2l0cm8KIEdpbGxlcyBDaXZhcmlvCiBDaHJpcyBDbGFyaworTGF1cmllIENsYXJrLU1pY2hhbGVrCiBNaWtlIENsYXJrc29uCiBBbmRyZXcgQ2xlZ2cKIEJyYWQgQ2xlbWVudHMKQEAgLTMxOSwxMSArMzI4LDEzIEBACiBKb2huIER1Qm9pcwogUGF1bCBEdWJvaXMKIEphY3F1ZXMgRHVjYXNzZQorQW5kcmVpIERvcmlhbiBEdW1hCiBHcmFoYW0gRHVtcGxldG9uCiBRdWlubiBEdW5rYW4KIFJvYmluIER1bm4KIEx1a2UgRHVuc3RhbgogVmlyZ2lsIER1cHJhcworQnJ1bm8gRHVwdWlzCiBBbmR5IER1c3RtYW4KIEdhcnkgRHV6YW4KIEV1Z2VuZSBEdnVyZWNoZW5za2kKQEAgLTMzMiw2ICszNDMsNyBAQAogV2FsdGVyIETDtnJ3YWxkCiBIYW5zIEVja2FyZHQKIFJvZG9scGhvIEVja2hhcmR0CitVbHJpY2ggRWNraGFyZHQKIERhdmlkIEVkZWxzb2huCiBKb2huIEVkbW9uZHMKIEdyYW50IEVkd2FyZHMKQEAgLTM0Niw2ICszNTgsNyBAQAogRGF2aWQgRWx5CiBKZWZmIEVwbGVyCiBUb20gRXBwZXJseQorR8O2a2NlbiBFcmFzbGFuCiBTdG9mZmVsIEVyYXNtdXMKIErDvHJnZW4gQS4gRXJoYXJkCiBNaWNoYWVsIEVybnN0CkBAIC00MzAsNiArNDQzLDcgQEAKIFRob21hcyBHZWxsZWt1bQogR2FicmllbCBHZW5lbGxpbmEKIENocmlzdG9zIEdlb3JnaW91CitFbGF6YXIgR2Vyc2h1bmkKIEJlbiBHZXJ0emZpZWxkCiBOYWRpbSBHaGF6bmF2aQogRGludSBHaGVybWFuCkBAIC00NDEsNiArNDU1LDcgQEAKIE1hdHQgR2l1Y2EKIFdpbSBHbGVubgogTWljaGFlbCBHb2RlcmJhdWVyCitKZXJvZW4gVmFuIEdvZXkKIENocmlzdG9waCBHb2hsa2UKIFRpbSBHb2xkZW4KIEd1aWxoZXJtZSBHb27Dp2FsdmVzCkBAIC00NTksNiArNDc0LDcgQEAKIERhZyBHcnVuZWF1CiBGaWxpcCBHcnVzemN6ecWEc2tpCiBUaG9tYXMgR3VldHRsZXIKK0FudWogR3VwdGEKIE1pY2hhZWwgR3VyYXZhZ2UKIExhcnMgR3VzdMOkYmVsCiBUaG9tYXMgR8O8dHRsZXIKQEAgLTQ2OSw2ICs0ODUsNyBAQAogUmFzbXVzIEhhaG4KIFBldGVyIEhhaWdodAogVsOhY2xhdiBIYWlzbWFuCitaYmlnbmlldyBIYWxhcwogV2Fsa2VyIEhhbGUgSVYKIEJvYiBIYWxsZXkKIEplc3NlIEhhbGxpbwpAQCAtNDk0LDYgKzUxMSw3IEBACiBSeWNoYXJkZSBIYXdrZXMKIEJlbiBIYXlkZW4KIEpvY2hlbiBIYXllaworVGltIEhlYW5leQogSGVucmlrIEhlaW1idWVyZ2VyCiBDaHJpc3RpYW4gSGVpbWVzCiBUaG9tYXMgSGVsbGVyCkBAIC01OTgsNiArNjE2LDcgQEAKIEZyZWRyaWsgSm9oYW5zc29uCiBHcmVnb3J5IEsuIEpvaG5zb24KIEtlbnQgSm9obnNvbgorTWljaGFlbCBKb2huc29uCiBTaW1vbiBKb2huc3RvbgogTWF0dCBKb2luZXIKIFRob21hcyBKb2xsYW5zCkBAIC02MTcsNiArNjM2LDcgQEAKIFNhcmFoIEsuCiBTdW5ueSBLCiBCb2h1c2xhdiBLYWJyZGEKK0FsZXhleSBLYWNoYXlldgogQm9iIEthaG4KIEt1cnQgQi4gS2Fpc2VyCiBUYW1pdG8gS2FqaXlhbWEKQEAgLTYzOCw2ICs2NTgsNyBAQAogTWFnbnVzIEtlc3NsZXIKIExhd3JlbmNlIEtlc3RlbG9vdAogVml2ZWsgS2hlcmEKK0RoaXJ1IEtob2xpYQogTWFkcyBLaWlsZXJpY2gKIEphc29uIEtpbGxlbgogSmFuIEtpbQpAQCAtNjkzLDcgKzcxNCw5IEBACiBFcm5vIEt1dXNlbGEKIFJvc3MgTGFnZXJ3YWxsCiBDYW1lcm9uIExhaXJkCitEYXZpZCBMYW0KIFRob21hcyBMYW1iCitWYWxlcmllIExhbWJlcnQKIEplYW4tQmFwdGlzdGUgIkppYmEiIExhbXkKIFJvbmFuIExhbXkKIFRvcnN0ZW4gTGFuZHNjaG9mZgpAQCAtNzMwLDkgKzc1MywxMSBAQAogTWF0ZXVzeiBMZW5pawogSm9obiBMZW50b24KIEtvc3R5YW50eW4gTGVzY2hlbmtvCitCZW5ubyBMZXNsaWUKIENocmlzdG9waGVyIFR1ciBMZXNuaWV3c2tpLUxhYXMKIEFsYWluIExldWZyb3kKIE1hcmsgTGV2aW5zb24KK01hcmsgTGV2aXR0CiBXaWxsaWFtIExld2lzCiBBa2lyYSBMaQogWHVhbmppIExpCkBAIC03NTYsMTQgKzc4MSwxNyBAQAogQW5uZSBMb3JkCiBUb20gTG9yZWRvCiBKdXN0aW4gTG92ZQorTmVkIEphY2tzb24gTG92ZWx5CiBKYXNvbiBMb3dlCiBUb255IExvd25kcwogUmF5IExveXphZ2EKK0thbmctSGFvIChLZW5ueSkgTHUKIEx1a2FzIEx1ZWcKIExvcmVuIEx1a2UKIEZyZWRyaWsgTHVuZGgKIFpob25neXVlIEx1bwogTWFyayBMdXR6CitUYXJhcyBMeWFwdW4KIEppbSBMeW5jaAogTWlrYWVsIEx5bmd2aWcKIE1hcnRpbiB2b24gTMO2d2lzCkBAIC03NzQsOSArODAyLDEzIEBACiBUaW0gTWFjS2VuemllCiBOaWNrIE1hY2xhcmVuCiBEb24gTWFjTWlsbGVuCitUb21hc3ogTWHEh2tvd2lhawogU3RldmUgTWFqZXdza2kKK01hcmVrIE1hamtvd3NraQogR3J6ZWdvcnogTWFrYXJld2ljegogRGF2aWQgTWFsY29sbQorR3JlZyBNYWxjb2xtCitXaWxsaWFtIE1hbGxhcmQKIEtlbiBNYW5oZWltZXIKIFZsYWRpbWlyIE1hcmFuZ296b3YKIENvbGluIE1hcmMKQEAgLTc5OSw3ICs4MzEsOSBAQAogRGlldGVyIE1hdXJlcgogRGFuaWVsIE1heQogTWFkaXNvbiBNYXkKK0x1Y2FzIE1heXN0cmUKIEFybmF1ZCBNYXppbgorTWF0dCBNY0NsdXJlCiBSZWJlY2NhIE1jQ3JlYXJ5CiBLaXJrIE1jRG9uYWxkCiBDaHJpcyBNY0Rvbm91Z2gKQEAgLTgzOSw2ICs4NzMsNyBAQAogRGFtaWVuIE1pbGxlcgogSmFzb24gVi4gTWlsbGVyCiBKYXkgVC4gTWlsbGVyCitLYXRpZSBNaWxsZXIKIFJvbWFuIE1pbG5lcgogSnVsaWVuIE1pb3R0ZQogQW5kcmlpIFYuIE1pc2hrb3Zza3lpCkBAIC04NDgsNiArODgzLDcgQEAKIEZsb3JpYW4gTWxhZGl0c2NoCiBEb3VnIE1vZW4KIFRoZSBEcmFnb24gRGUgTW9uc3luZQorQmFzdGllbiBNb250YWduZQogU2tpcCBNb250YW5hcm8KIFBldGVyIE1vb2R5CiBQYXVsIE1vb3JlCkBAIC04NTUsNiArODkxLDcgQEAKIEJlbiBNb3JnYW4KIERlcmVrIE1vcnIKIEphbWVzIEEgTW9ycmlzb24KK01hcnRpbiBNb3JyaXNvbgogRGVyZWsgTWNUYXZpc2ggTW91bmNlCiBBbGVzc2FuZHJvIE1vdXJhCiBQYWJsbyBNb3V6bwpAQCAtODY5LDYgKzkwNiw3IEBACiBMb3VpcyBNdW5ybwogUi4gRGF2aWQgTXVycmF5CiBNYXR0aSBNw6RraQorSsO2cmcgTcO8bGxlcgogRGFsZSBOYWdhdGEKIEpvaG4gTmFnbGUKIFRha2FoaXJvIE5ha2F5YW1hCkBAIC05MzEsNiArOTY5LDcgQEAKIFRvZGQgUi4gUGFsbWVyCiBKdWFuIERhdmlkIEliw6HDsWV6IFBhbG9tYXIKIEphbiBQYWx1cworTWF0aGlhcyBQYW56ZW5iw7ZjawogTS4gUGFwaWxsb24KIFBldGVyIFBhcmVudGUKIEFsZXhhbmRyZSBQYXJlbnRlYXUKQEAgLTkzOSw2ICs5NzgsNyBAQAogSGVpa2tpIFBhcnRhbmVuCiBIYXJyaSBQYXNhbmVuCiBHYcOrbCBQYXNncmltYXVkCitBc2hpc2ggTml0aW4gUGF0aWwKIFJhbmR5IFBhdXNjaAogU2FtdWVsZSBQZWRyb25pCiBKdXN0aW4gUGVlbApAQCAtOTU3LDggKzk5NywxMCBAQAogQmVuamFtaW4gUGV0ZXJzb24KIEpvZSBQZXRlcnNvbgogQ2hyaXMgUGV0cmlsbGkKK1JvdW1lbiBQZXRyb3YKIEJqb3JuIFBldHRlcnNlbgogSnVzdGluIEQuIFBldHRpdAorRXNhIFBldWhhCiBSb25ueSBQZmFubnNjaG1pZHQKIEdlb2ZmIFBoaWxicmljawogR2F2cmllIFBoaWxpcHNvbgpAQCAtOTcyLDEyICsxMDE0LDE1IEBACiBGcmFuw6dvaXMgUGluYXJkCiBUb20gUGluY2tuZXkKIFphY2ggUGluY3VzCitaZXJvIFBpcmFldXMKIE1pY2hhZWwgUGlvdHJvd3NraQogQW50b2luZSBQaXRyb3UKIEplYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogT2xlZyBQbGFraG90bnl1awogUmVtaSBQb2ludGVsCitBcmllbCBQb2xpYWsKIEd1aWxoZXJtZSBQb2xvCitJbGxpYSBQb2xvc3VraGluCiBNaWNoYWVsIFBvbXJhbmluZwogTWFydGluIFBvb2wKIEl1c3RpbiBQb3AKQEAgLTk4OCwxOCArMTAzMywyMiBAQAogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCiBKeXJraSBQdWxsaWFpbmVuCiBTdGV2ZSBQdXJjZWxsCiBFZHVhcmRvIFDDqXJlegogRmVybmFuZG8gUMOpcmV6CiBQaWVycmUgUXVlbnRlbAogQnJpYW4gUXVpbmxhbgorS2V2aW4gSmluZyBRaXUKIEFuZGVycyBRdmlzdAogVGhvbWFzIFJhY2hlbAorUmFtIFJhY2h1bQogSsOpcsO0bWUgUmFkaXgKIEJ1cnRvbiBSYWRvbnMKIEplZmYgUmFtbmFuaQogQnJvZGllIFJhbworU2Vua28gUmFzaWMKIEFudHRpIFJhc2luZW4KIFNyaWRoYXIgUmF0bmFrdW1hcgogWXNqIFJheQpAQCAtMTAzMSw3ICsxMDgwLDcgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKIERhdmlkZSBSaXp6bwogQW50aG9ueSBSb2FjaApAQCAtMTE2MCw2ICsxMjA5LDcgQEAKIEtyYWdlbiBTaXRha2VyCiBNaWNoYWVsIFNsb2FuCiBOaWNrIFNsb2FuCitWw6FjbGF2IMWgbWlsYXVlcgogQ2hyaXN0b3BoZXIgU21pdGgKIEVyaWMgVi4gU21pdGgKIEdyZWdvcnkgUC4gU21pdGgKQEAgLTExOTgsNiArMTI0OCw3IEBACiBTZXJoaXkgU3RvcmNoYWthCiBLZW4gU3RveAogRGFuIFN0cm9tYmVyZworRG9uYWxkIFN0dWZmdAogRGFuaWVsIFN0dXR6YmFjaAogQW5kcmVhcyBTdMO8aHJrCiBDb2xpbiBTdQpAQCAtMTIxNCw2ICsxMjY1LDcgQEAKIFDDqXRlciBTemFiw7MKIEFtaXIgU3pla2VseQogQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMKK0hpZGVha2kgVGFrYWhhc2hpCiBJbmRyYSBUYWxpcAogTmVpbCBUYWxsaW0KIEdlb2ZmIFRhbHZvbGEKQEAgLTEyMjUsNiArMTI3Nyw3IEBACiBNb250eSBUYXlsb3IKIEFuYXRvbHkgVGVjaHRvbmlrCiBNaWtoYWlsIFRlcmVraG92CitWaWN0b3IgVGVycsOzbgogUmljaGFyZCBNLiBUZXcKIFRvYmlhcyBUaGVsZW4KIEbDqXZyeSBUaGliYXVsdApAQCAtMTIzMiw2ICsxMjg1LDcgQEAKIE5pY29sYXMgTS4gVGhpw6lyeQogSmFtZXMgVGhvbWFzCiBSb2JpbiBUaG9tYXMKK0JyaWFuIFRob3JuZQogU3RlcGhlbiBUaG9ybmUKIEplcmVteSBUaHVyZ29vZAogRXJpYyBUaWVkZW1hbm4KQEAgLTEzMTEsNiArMTM2NSw3IEBACiBSb2RyaWdvIFN0ZWlubXVsbGVyIFdhbmRlcmxleQogS2UgV2FuZwogR3JlZyBXYXJkCitUb20gV2FyZGlsbAogWmFjaGFyeSBXYXJlCiBKb25hcyBXYWduZXIKIEJhcnJ5IFdhcnNhdwpAQCAtMTMzNiw2ICsxMzkxLDcgQEAKIEZlbGl4IFdpZW1hbm4KIEdlcnJ5IFdpZW5lcgogRnJhbmsgV2llcnpiaWNraQorU2FudG9zbyBXaWpheWEKIEJyeWNlICJab29rbyIgV2lsY294LU8nSGVhcm4KIFRpbW90aHkgV2lsZAogSmFrdWIgV2lsawpAQCAtMTM2OCw2ICsxNDI0LDcgQEAKIEdvcmRvbiBXb3JsZXkKIERhcnJlbiBXb3JyYWxsCiBUaG9tYXMgV291dGVycworRGFuaWVsIFdvem5pYWsKIEhlaWtvIFd1bmRyYW0KIERvdWcgV3lhdHQKIFJvYmVydCBYaWFvCkBAIC0xMzgwLDYgKzE0MzcsNyBAQAogRGFubnkgWW9vCiBSb3J5IFlvcmtlCiBHZW9yZ2UgWW9zaGlkYQorS2F6dWhpcm8gWW9zaGlkYQogTWFzYXp1bWkgWW9zaGlrYXdhCiBBcm5hdWQgWXNtYWwKIEJlcm5hcmQgWXVlCmRpZmYgLS1naXQgYS9NaXNjL0hJU1RPUlkgYi9NaXNjL0hJU1RPUlkKaW5kZXggMDFjNjM1Yi4uNDI4MDc2NCAxMDA2NDQKLS0tIGEvTWlzYy9ISVNUT1JZCisrKyBiL01pc2MvSElTVE9SWQpAQCAtMywxMyArMyw0MTEwIEBACiAKIFRoaXMgZmlsZSBjb250YWlucyB0aGUgcmVsZWFzZSBtZXNzYWdlcyBmb3IgcHJldmlvdXMgUHl0aG9uIHJlbGVhc2VzLgogQXMgeW91IHJlYWQgb24geW91IGdvIGJhY2sgdG8gdGhlIGRhcmsgYWdlcyBvZiBQeXRob24ncyBoaXN0b3J5LgotKE5vdGU6IG5ld3MgYWJvdXQgMi41YzIgYW5kIGxhdGVyIDIuNSByZWxlYXNlcyBpcyBpbiB0aGUgTWlzYy9ORVdTCi1maWxlIG9mIHRoZSByZWxlYXNlMjUtbWFpbnQgYnJhbmNoLikKIAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAorV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjktU2VwLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjA0NjogRml4IGxvYWRpbmcgc291cmNlbGVzcyBsZWdhY3kgLnB5byBmaWxlcy4KKworLSBJc3N1ZSAjMTYwNjA6IEZpeCByZWZjb3VudGluZyBidWcgd2hlbiBfX3RydW5jX18gcmV0dXJucyBhbiBvYmplY3QKKyAgd2hvc2UgX19pbnRfXyBnaXZlcyBhIG5vbi1pbnRlZ2VyLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2MDEyOiBGaXggYSByZWdyZXNzaW9uIGluIHB5ZXhwYXQuIFRoZSBwYXJzZXIncyBVc2VGb3JlaWduRFREKCkKKyAgbWV0aG9kIGRvZXNuJ3QgcmVxdWlyZSBhbiBhcmd1bWVudCBhZ2Fpbi4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBSZWxlYXNlIENhbmRpZGF0ZSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjMtU2VwLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTkwMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIFB5VW5pY29kZV9UcmFuc2xhdGVDaGFybWFwKCkuCisKKy0gSXNzdWUgIzE1OTI2OiBGaXggY3Jhc2ggYWZ0ZXIgbXVsdGlwbGUgcmVpbml0aWFsaXphdGlvbnMgb2YgdGhlIGludGVycHJldGVyLgorCistIElzc3VlICMxNTg5NTogRml4IEZJTEUgcG9pbnRlciBsZWFrIGluIG9uZSBlcnJvciBicmFuY2ggb2YKKyAgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MoKSB3aGVuIGZpbGVuYW1lIHBvaW50cyB0byBhIHB5Yy9weW8gZmlsZSwgY2xvc2VpdAorICBpcyBmYWxzZSBhbiBhbmQgc2V0X21haW5fbG9hZGVyKCkgZmFpbHMuCisKKy0gRml4ZXMgZm9yIGEgZmV3IGNyYXNoIGFuZCBtZW1vcnkgbGVhayByZWdyZXNzaW9ucyBmb3VuZCBieSBDb3Zlcml0eS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTg4MjogQ2hhbmdlIF9kZWNpbWFsIHRvIGFjY2VwdCBhbnkgY29lZmZpY2llbnQgdHVwbGUgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5maW5pdGllcy4gVGhpcyBpcyBkb25lIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICB3aXRoIGRlY2ltYWwucHk6IEluZmluaXR5IGNvZWZmaWNpZW50cyBhcmUgdW5kZWZpbmVkIGluIF9kZWNpbWFsCisgIChpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHNwZWNpZmljYXRpb24pLgorCistIElzc3VlICMxNTkyNTogRml4IGEgcmVncmVzc2lvbiBpbiBlbWFpbC51dGlsIHdoZXJlIHRoZSBwYXJzZWRhdGUoKSBhbmQKKyAgcGFyc2VkYXRlX3R6KCkgZnVuY3Rpb25zIGRpZCBub3QgcmV0dXJuIE5vbmUgYW55bW9yZSB3aGVuIHRoZSBhcmd1bWVudCBjb3VsZAorICBub3QgYmUgcGFyc2VkLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5NzM6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIGNvbXBhcmluZyBkYXRldGltZSB0aW1lem9uZQorICBvYmplY3RzLgorCistIElzc3VlICMxNTk3NzogRml4IG1lbW9yeSBsZWFrIGluIE1vZHVsZXMvX3NzbC5jIHdoZW4gdGhlIGZ1bmN0aW9uCisgIF9zZXRfbnBuX3Byb3RvY29scygpIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcywgdGhhbmtzIHRvIERhbmllbCBTb21tZXJtYW5uLgorCistIElzc3VlICMxNTk2OTogZmF1bHRoYW5kbGVyIG1vZHVsZTogcmVuYW1lIGR1bXBfdHJhY2ViYWNrc19sYXRlcigpIHRvCisgIGR1bXBfdHJhY2ViYWNrX2xhdGVyKCkgYW5kIGNhbmNlbF9kdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBjYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKS4KKworLSBfZGVjaW1hbCBtb2R1bGU6IHVzZSBvbmx5IEMgODkgc3R5bGUgY29tbWVudHMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTM5OTI6IFRoZSB0cmFzaGNhbiBtZWNoYW5pc20gaXMgbm93IHRocmVhZC1zYWZlLiAgVGhpcyBlbGltaW5hdGVzCisgIHNwb3JhZGljIGNyYXNoZXMgaW4gbXVsdGktdGhyZWFkIHByb2dyYW1zIHdoZW4gc2V2ZXJhbCBsb25nIGRlYWxsb2NhdG9yCisgIGNoYWlucyByYW4gY29uY3VycmVudGx5IGFuZCBpbnZvbHZlZCBzdWJjbGFzc2VzIG9mIGJ1aWx0LWluIGNvbnRhaW5lcgorICB0eXBlcy4KKworLSBJc3N1ZSAjMTU3ODQ6IE1vZGlmeSBPU0Vycm9yLl9fc3RyX18oKSB0byBiZXR0ZXIgZGlzdGluZ3Vpc2ggYmV0d2VlbgorICBlcnJubyBlcnJvciBudW1iZXJzIGFuZCBXaW5kb3dzIGVycm9yIG51bWJlcnMuCisKKy0gSXNzdWUgIzE1NzgxOiBGaXggdHdvIHNtYWxsIHJhY2UgY29uZGl0aW9ucyBpbiBpbXBvcnQncyBtb2R1bGUgbG9ja2luZy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTg0NzogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSwgd2hpY2ggZGlkIG5vdCBhY2NlcHQgdHVwbGVzCisgIGFzIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCisKKy0gSXNzdWUgIzE1ODI4OiBSZXN0b3JlIHN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucyBpbiBpbXAubG9hZF9tb2R1bGUoKS4KKworLSBJc3N1ZSAjMTUzNDA6IEZpeCBpbXBvcnRpbmcgdGhlIHJhbmRvbSBtb2R1bGUgd2hlbiAvZGV2L3VyYW5kb20gY2Fubm90CisgIGJlIG9wZW5lZC4gIFRoaXMgd2FzIGEgcmVncmVzc2lvbiBjYXVzZWQgYnkgdGhlIGhhc2ggcmFuZG9taXphdGlvbiBwYXRjaC4KKworLSBJc3N1ZSAjMTA2NTA6IERlcHJlY2F0ZSB0aGUgd2F0Y2hleHAgcGFyYW1ldGVyIG9mIHRoZSBEZWNpbWFsLnF1YW50aXplKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxNTc4NTogTW9kaWZ5IHdpbmRvdy5nZXRfd2NoKCkgQVBJIG9mIHRoZSBjdXJzZXMgbW9kdWxlOiByZXR1cm4KKyAgYSBjaGFyYWN0ZXIgZm9yIG1vc3Qga2V5cywgYW5kIGFuIGludGVnZXIgZm9yIHNwZWNpYWwga2V5cywgaW5zdGVhZCBvZgorICBhbHdheXMgcmV0dXJuaW5nIGFuIGludGVnZXIuIFNvIGl0IGlzIG5vdyBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCBzcGVjaWFsCisgIGtleXMgbGlrZSBrZXlwYWQga2V5cy4KKworLSBJc3N1ZSAjMTQyMjM6IEZpeCB3aW5kb3cuYWRkY2goKSBvZiB0aGUgY3Vyc2VzIG1vZHVsZSBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCisgIGxpa2UgY3Vyc2VzLkFDU19ITElORTogdGhlIFB5dGhvbiBmdW5jdGlvbiBhZGRjaChpbnQpIGFuZCBhZGRjaChieXRlcykgaXMgbm93CisgIGNhbGxpbmcgdGhlIEMgZnVuY3Rpb24gd2FkZGNoKCkvbXZ3YWRkY2goKSAoYXMgaXQgd2FzIGRvbmUgaW4gUHl0aG9uIDMuMiksCisgIGluc3RlYWQgb2Ygd2FkZF93Y2goKS9tdndhZGRfd2NoKCkuIFRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goc3RyKSBpcyBzdGlsbAorICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpIGlmIHRoZSBQeXRob24gY3Vyc2VzIGlzIGxpbmtlZAorICB0byBsaWJuY3Vyc2Vzdy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE1ODIyOiBSZWFsbHkgZW5zdXJlIDJ0bzMgZ3JhbW1hciBwaWNrbGVzIGFyZSBwcm9wZXJseSBpbnN0YWxsZWQKKyAgKHJlcGxhY2VzIGZpeGVzIGZvciBJc3N1ZSAjMTU2NDUpLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1ODE0OiBUaGUgbWVtb3J5dmlldyBlbmhhbmNlbWVudHMgaW4gMy4zLjAgYWNjaWRlbnRhbGx5IHBlcm1pdHRlZAorICB0aGUgaGFzaGluZyBvZiBtdWx0aS1kaW1lbnNpb25hbCBtZW1vcnZpZXdzIGFuZCBtZW1vcnl2aWV3cyB3aXRoIG11bHRpLWJ5dGUKKyAgaXRlbSBmb3JtYXRzLiBUaGUgaW50ZW5kZWQgcmVzdHJpY3Rpb25zIGhhdmUgbm93IGJlZW4gZG9jdW1lbnRlZCAtIHRoZXkKKyAgd2lsbCBiZSBjb3JyZWN0bHkgZW5mb3JjZWQgaW4gMy4zLjEKKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBSZWxlYXNlIENhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMjUtQXVnLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTU3MzogbWVtb3J5dmlldyBjb21wYXJpc29ucyBhcmUgbm93IHBlcmZvcm1lZCBieSB2YWx1ZSB3aXRoIGZ1bGwKKyAgc3VwcG9ydCBmb3IgYW55IHZhbGlkIHN0cnVjdCBtb2R1bGUgZm9ybWF0IGRlZmluaXRpb24uCisKKy0gSXNzdWUgIzE1MzE2OiBXaGVuIGFuIGl0ZW0gaW4gdGhlIGZyb21saXN0IGZvciBfX2ltcG9ydF9fIGRvZXNuJ3QgZXhpc3QsCisgIGRvbid0IHJhaXNlIGFuIGVycm9yLCBidXQgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhcyBwYXJ0IG9mIGFuIGltcG9ydCBkbworICBsZXQgdGhhdCBwcm9wYWdhdGUuCisKKy0gSXNzdWUgIzE1Nzc4OiBlbnN1cmUgdGhhdCBzdHIoSW1wb3J0RXJyb3IobXNnKSkgcmV0dXJucyBhIHN0cgorICBldmVuIHdoZW4gbXNnIGlzbid0IGEgc3RyLgorCistIElzc3VlICMyMDUxOiBTb3VyY2UgZmlsZSBwZXJtaXNzaW9uIGJpdHMgYXJlIG9uY2UgYWdhaW4gY29ycmVjdGx5CisgIGNvcGllZCB0byB0aGUgY2FjaGVkIGJ5dGVjb2RlIGZpbGUuIChUaGUgbWlncmF0aW9uIHRvIGltcG9ydGxpYgorICByZWludHJvZHVjZWQgdGhpcyBwcm9ibGVtIGJlY2F1c2UgdGhlc2Ugd2FzIG5vIHJlZ3Jlc3Npb24gdGVzdC4gQSB0ZXN0CisgIGhhcyBiZWVuIGFkZGVkIGFzIHBhcnQgb2YgdGhpcyBwYXRjaCkKKworLSBJc3N1ZSAjMTU3NjE6IEZpeCBjcmFzaCB3aGVuIFBZVEhPTkVYRUNVVEFCTEUgaXMgc2V0IG9uIE1hYyBPUyBYLgorCistIElzc3VlICMxNTcyNjogRml4IGluY29ycmVjdCBib3VuZHMgY2hlY2tpbmcgaW4gUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1NjA0OiBVcGRhdGUgdXNlcyBvZiBQeU9iamVjdF9Jc1RydWUoKSB0byBjaGVjayBmb3IgYW5kIGhhbmRsZQorICBlcnJvcnMgY29ycmVjdGx5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ4NDY6IGltcG9ydGxpYi5GaWxlRmluZGVyIG5vdyBoYW5kbGVzIHRoZSBjYXNlIHdoZXJlIHRoZQorICBkaXJlY3RvcnkgYmVpbmcgc2VhcmNoZWQgaXMgcmVtb3ZlZCBhZnRlciBhIHByZXZpb3VzIGltcG9ydCBhdHRlbXB0CisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTMzNzA6IEVuc3VyZSB0aGF0IGN0eXBlcyB3b3JrcyBvbiBNYWMgT1MgWCB3aGVuIFB5dGhvbiBpcworICBjb21waWxlZCB1c2luZyB0aGUgY2xhbmcgY29tcGlsZXIKKworLSBJc3N1ZSAjMTMwNzI6IFRoZSBhcnJheSBtb2R1bGUncyAndScgZm9ybWF0IGNvZGUgaXMgbm93IGRlcHJlY2F0ZWQgYW5kCisgIHdpbGwgYmUgcmVtb3ZlZCBpbiBQeXRob24gNC4wLgorCistIElzc3VlICMxNTU0NDogRml4IERlY2ltYWwuX19mbG9hdF9fIHRvIHdvcmsgd2l0aCBwYXlsb2FkLWNhcnJ5aW5nIE5hTnMuCisKKy0gSXNzdWUgIzE1MjQ5OiBCeXRlc0dlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMgRnJvbSBsaW5lcyAod2hlbgorICByZXF1ZXN0ZWQpIGV2ZW4gaWYgdGhlIGJvZHkgY29udGFpbnMgdW5kZWNvZGFibGUgYnl0ZXMuCisKKy0gSXNzdWUgIzE1Nzc3OiBGaXggYSByZWZsZWFrIGluIF9wb3NpeHN1YnByb2Nlc3MuCisKKy0gSXNzdWUgIyM2NjUxOTQ6IFVwZGF0ZSBlbWFpbC51dGlscy5sb2NhbHRpbWUgdG8gdXNlIGRhdGV0aW1lLmFzdGltZXpvbmUgYW5kCisgIGNvcnJlY3RseSBoYW5kbGUgaGlzdG9yaWMgY2hhbmdlcyBpbiBVVEMgb2Zmc2V0cy4KKworLSBJc3N1ZSAjMTUxOTk6IEZpeCBKYXZhU2NyaXB0J3MgZGVmYXVsdCBNSU1FIHR5cGUgdG8gYXBwbGljYXRpb24vamF2YXNjcmlwdC4KKyAgUGF0Y2ggYnkgQm9odXNsYXYgS2FicmRhLgorCistIElzc3VlICMxMjY0MzogY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUgbm93IHJlc3BlY3RzIHN5cy5leGNlcHRob29rIHdoZW4KKyAgZGlzcGxheWluZyBleGNlcHRpb25zIChQYXRjaCBieSBBYXJvbiBJbGVzKQorCistIElzc3VlICMxMzU3OTogc3RyaW5nLkZvcm1hdHRlciBub3cgdW5kZXJzdGFuZHMgdGhlICdhJyBjb252ZXJzaW9uIHNwZWNpZmllci4KKworLSBJc3N1ZSAjMTU3OTM6IFN0YWNrIGNvcnJ1cHRpb24gaW4gc3NsLlJBTkRfZWdkKCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NTk1OiBGaXggc3VicHJvY2Vzcy5Qb3Blbih1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgZm9yIGNlcnRhaW4gbG9jYWxlcyAodXRmLTE2IGFuZCB1dGYtMzIgZmFtaWx5KS4gUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1NDc3OiBJbiBjbWF0aCBhbmQgbWF0aCBtb2R1bGVzLCBhZGQgd29ya2Fyb3VuZCBmb3IgcGxhdGZvcm1zIHdob3NlCisgIHN5c3RlbS1zdXBwbGllZCBsb2cxcCBmdW5jdGlvbiBkb2Vzbid0IHJlc3BlY3Qgc2lnbnMgb2YgemVyb3MuCisKKy0gSXNzdWUgIzE1NzE1OiBpbXBvcnRsaWIuX19pbXBvcnRfXygpIHdpbGwgc2lsZW5jZSBhbiBJbXBvcnRFcnJvciB3aGVuIHRoZSB1c2UKKyAgb2YgZnJvbWxpc3QgbGVhZHMgdG8gYSBmYWlsZWQgaW1wb3J0LgorCistIElzc3VlICMxNDY2OTogRml4IHBpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIGFuZCBzb2NrZXRzIG9uIE1hY09TWAorICBieSBzZW5kaW5nL3JlY2VpdmluZyBhbiBhY2tub3dsZWRnbWVudCBhZnRlciBmaWxlIGRlc2NyaXB0b3IgdHJhbnNmZXIuCisgIFRlc3RQaWNrbGluZ0Nvbm5lY3Rpb24gaGFzIGJlZW4gcmVlbmFibGVkIGZvciBNYWNPU1guCisKKy0gSXNzdWUgIzExMDYyOiBGaXggYWRkaW5nIGEgbWVzc2FnZSBmcm9tIGZpbGUgdG8gQmFieWwgbWFpbGJveC4KKworLSBJc3N1ZSAjMTU2NDY6IFByZXZlbnQgZXF1aXZhbGVudCBvZiBhIGZvcmsgYm9tYiB3aGVuIHVzaW5nCisgIG11bHRpcHJvY2Vzc2luZyBvbiBXaW5kb3dzIHdpdGhvdXQgdGhlICJpZiBfX25hbWVfXyA9PSAnX19tYWluX18nIgorICBpZGlvbS4KKworLSBJc3N1ZSAjMTU2Nzg6IEZpeCBJRExFIG1lbnVzIHdoZW4gc3RhcnRlZCBmcm9tIE9TIFggY29tbWFuZCBsaW5lCisgICgzLjMuMGIyIHJlZ3Jlc3Npb24pLgorCitDIEFQSQorLS0tLS0KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0Njc0OiBBZGQgYSBkaXNjdXNzaW9uIG9mIHRoZSBqc29uIG1vZHVsZSdzIHN0YW5kYXJkIGNvbXBsaWFuY2UuCisgIFBhdGNoIGJ5IENocmlzIFJlYmVydC4KKworLSBDcmVhdGUgYSAnQ29uY3VycmVudCBFeGVjdXRpb24nIHNlY3Rpb24gaW4gdGhlIGRvY3MsIGFuZCBzcGxpdCB1cCB0aGUKKyAgJ09wdGlvbmFsIE9wZXJhdGluZyBTeXN0ZW0gU2VydmljZXMnIHNlY3Rpb24gdG8gdXNlIGEgbW9yZSB1c2VyLWNlbnRyaWMKKyAgY2xhc3NpZmljYXRpb24gc2NoZW1lIChzcGxpdHRpbmcgdGhlbSBhY3Jvc3MgdGhlIG5ldyBDRSBzZWN0aW9uLCBJUEMgYW5kCisgIHRleHQgcHJvY2Vzc2luZykuIE9wZXJhdGluZyBzeXN0ZW0gbGltaXRhdG9ucyBjYW4gYmUgcmVmbGVjdGVkIHdpdGgKKyAgdGhlIFNwaGlueCBgYDpwbGF0Zm9ybTpgYCB0YWcsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhcyBwYXJ0IG9mIHRoZSBUYWJsZSBvZgorICBDb250ZW50cy4KKworLSBJc3N1ZSAjNDk2NjogQnJpbmcgdGhlIHNlcXVlbmNlIGRvY3MgdXAgdG8gZGF0ZSBmb3IgdGhlIFB5M2sgdHJhbnNpdGlvbgorICBhbmQgdGhlIG1hbnkgbGFuZ3VhZ2UgZW5oYW5jZW1lbnRzIHNpbmNlIHRoZXkgd2VyZSBvcmlnaW5hbCB3cml0dGVuCisKKy0gVGhlICJwYXRoIGltcG9ydGVyIiBtaXNub21lciBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIEVyaWMgU25vdydzCisgIG1vcmUtYXdrd2FyZC1idXQtYXQtbGVhc3Qtbm90LXdyb25nIHN1Z2dlc3Rpb24gb2YgInBhdGggYmFzZWQgZmluZGVyIiBpbgorICB0aGUgaW1wb3J0IHN5c3RlbSByZWZlcmVuY2UgZG9jcworCistIElzc3VlICMxNTY0MDogRG9jdW1lbnQgaW1wb3J0bGliLmFiYy5GaW5kZXIgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTU2MzA6IEFkZCBhbiBleGFtcGxlIGZvciAiY29udGludWUiIHN0bXQgaW4gdGhlIHR1dG9yaWFsLiBQYXRjaCBieQorICBEYW5pZWwgRWxsaXMuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxNTc0NzogWkZTIGFsd2F5cyByZXR1cm5zIEVPUE5PVFNVUFAgd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUKKyAgVUZfSU1NVVRBQkxFIGZsYWcgKHZpYSBlaXRoZXIgY2hmbGFncyBvciBsY2hmbGFncyk7IHJlZmFjdG9yIGFmZmVjdGVkCisgIHRlc3RzIGluIHRlc3RfcG9zaXgucHkgdG8gYWNjb3VudCBmb3IgdGhpcy4KKworLSBJc3N1ZSAjMTUyODU6IFJlZmFjdG9yIHRoZSBhcHByb2FjaCBmb3IgdGVzdGluZyBjb25uZWN0IHRpbWVvdXRzIHVzaW5nCisgIHR3byBleHRlcm5hbCBob3N0cyB0aGF0IGhhdmUgYmVlbiBjb25maWd1cmVkIHNwZWNpZmljYWxseSBmb3IgdGhpcyB0eXBlCisgIG9mIHRlc3QuCisKKy0gSXNzdWUgIzE1NzQzOiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kIHVzYWdlIGluIHVybGxpYiB0ZXN0cy4gUGF0Y2ggYnkKKyAgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTU2MTU6IEFkZCBzb21lIHRlc3RzIGZvciB0aGUganNvbiBtb2R1bGUncyBoYW5kbGluZyBvZiBpbnZhbGlkCisgIGlucHV0IGRhdGEuICBQYXRjaCBieSBLdXNoYWwgRGFzLgorCitCdWlsZAorLS0tLS0KKworLSBPdXRwdXQgbGliIGZpbGVzIGZvciBQR08gYnVpbGQgaW50byBQR08gZGlyZWN0b3J5LgorCistIFBpY2sgdXAgMzItYml0IGxhdW5jaGVyIGZyb20gUEdPIGRpcmVjdG9yeSBvbiA2NC1iaXQgUEdPIGJ1aWxkLgorCistIERyb3AgUENccHl0aG9uX250LmggYXMgaXQncyBub3QgdXNlZC4gQWRkIGlucHV0IGRlcGVuZGVuY3kgb24gY3VzdG9tCisgIGJ1aWxkIHN0ZXAuCisKKy0gSXNzdWUgIzE1NTExOiBEcm9wIGV4cGxpY2l0IGRlcGVuZGVuY3kgb24gcHl0aG9ueHkubGliIGZyb20gX2RlY2ltYWwKKyAgYW1kNjQgY29uZmlndXJhdGlvbi4KKworLSBBZGQgbWlzc2luZyBQR0kvUEdPIGNvbmZpZ3VyYXRpb25zIGZvciBweXdsYXVuY2hlci4KKworLSBJc3N1ZSAjMTU2NDU6IEVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMTItQXVnLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTU2ODogRml4IHRoZSByZXR1cm4gdmFsdWUgb2YgInlpZWxkIGZyb20iIHdoZW4gU3RvcEl0ZXJhdGlvbiBpcworICByYWlzZWQgYnkgYSBjdXN0b20gaXRlcmF0b3IuCisKKy0gSXNzdWUgIzEzMTE5OiBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyIGFyZSBub3cgdXNpbmcgIlxyXG4iIG5ld2xpbmUgb24KKyAgV2luZG93cywgYXMgUHl0aG9uIDIuCisKKy0gSXNzdWUgIzE1NTM0OiBGaXggdGhlIGZhc3Qtc2VhcmNoIGZ1bmN0aW9uIGZvciBub24tQVNDSUkgVW5pY29kZSBzdHJpbmdzLgorCistIElzc3VlICMxNTUwODogRml4IHRoZSBkb2NzdHJpbmcgZm9yIF9faW1wb3J0X18gdG8gaGF2ZSB0aGUgcHJvcGVyIGRlZmF1bHQKKyAgdmFsdWUgb2YgMCBmb3IgJ2xldmVsJyBhbmQgdG8gbm90IG1lbnRpb24gbmVnYXRpdmUgbGV2ZWxzIHNpbmNlIHRoZXkgYXJlIG5vdAorICBzdXBwb3J0ZWQuCisKKy0gSXNzdWUgIzE1NDI1OiBFbGltaW5hdGVkIHRyYWNlYmFjayBub2lzZSBmcm9tIG1vcmUgc2l0dWF0aW9ucyBpbnZvbHZpbmcKKyAgaW1wb3J0bGliLgorCistIElzc3VlICMxNDU3ODogU3VwcG9ydCBtb2R1bGVzIHJlZ2lzdGVyZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkgYWdhaW4uCisKKy0gSXNzdWUgIzE1NDY2OiBTdG9wIHVzaW5nIFRZUEVfSU5UNjQgaW4gbWFyc2hhbCwgdG8gbWFrZSBpbXBvcnRsaWIuaCAoYW5kIG90aGVyCisgIGJ5dGUgY29kZSBmaWxlcykgZXF1YWwgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJpdCBzeXN0ZW1zLgorCistIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgZXhjZXB0aW9uIGFyZ3MgYXNzaWdubWVudCB0bworICAiQmFzZUV4Y2VwdGlvbi5fX25ld19fIiB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCisKKy0gSXNzdWUgIzEyODM0OiBGaXggUHlCdWZmZXJfVG9Db250aWd1b3VzKCkgZm9yIG5vbi1jb250aWd1b3VzIGFycmF5cy4KKworLSBJc3N1ZSAjMTU0NTY6IEZpeCBjb2RlIF9fc2l6ZW9mX18gYWZ0ZXIgIzEyMzk5IGNoYW5nZS4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDA0OiBSZWZsZWFrIGluIFB5TWV0aG9kT2JqZWN0IHJlcHIuCisKKy0gSXNzdWUgIzE1Mzk0OiBBbiBpc3N1ZSBpbiBQeU1vZHVsZV9DcmVhdGUgdGhhdCBjYXVzZWQgcmVmZXJlbmNlcyB0byBiZSBsZWFrZWQKKyAgb24gc29tZSBlcnJvciBwYXRocyBoYXMgYmVlbiBmaXhlZC4gIFBhdGNoIGJ5IEp1bGlhIExhd2FsbC4KKworLSBJc3N1ZSAjMTUzNjg6IEFuIGlzc3VlIHRoYXQgY2F1c2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24gdG8gYmUgbm9uLWRldGVybWluaXN0aWMKKyAgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MjAyOiBDb25zaXN0ZW50bHkgdXNlIHRoZSBuYW1lICJmb2xsb3dfc3ltbGlua3MiIGZvciBuZXcgcGFyYW1ldGVycworICBpbiBvcyBhbmQgc2h1dGlsIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTUzMTQ6IF9fbWFpbl9fLl9fbG9hZGVyX18gaXMgbm93IHNldCBjb3JyZWN0bHkgZHVyaW5nIGludGVycHJldGVyCisgIHN0YXJ0dXAuCisKKy0gSXNzdWUgIzE1MTExOiBXaGVuIGEgbW9kdWxlIGltcG9ydGVkIHVzaW5nICdmcm9tIGltcG9ydCcgaGFzIGFuIEltcG9ydEVycm9yCisgIGluc2lkZSBpdHNlbGYsIGRvbid0IG1hc2sgdGhhdCBmYWN0IGJlaGluZCBhIGdlbmVyaWMgSW1wb3J0RXJyb3IgZm9yIHRoZQorICBtb2R1bGUgaXRzZWxmLgorCistIElzc3VlICMxNTI5MzogQWRkIEdDIHN1cHBvcnQgdG8gdGhlIEFTVCBiYXNlIG5vZGUgdHlwZS4KKworLSBJc3N1ZSAjMTUyOTE6IEZpeCBhIG1lbW9yeSBsZWFrIHdoZXJlIEFTVCBub2RlcyB3aGVyZSBub3QgcHJvcGVybHkKKyAgZGVhbGxvY2F0ZWQuCisKKy0gSXNzdWUgIzE1MTEwOiBGaXggdGhlIHRyYWNlYmFja3MgZ2VuZXJhdGVkIGJ5ICJpbXBvcnQgeHh4IiB0byBub3Qgc2hvdyB0aGUKKyAgaW1wb3J0bGliIHN0YWNrIGZyYW1lcy4KKworLSBJc3N1ZSAjMTUwMjA6IFRoZSBwcm9ncmFtIG5hbWUgdXNlZCB0byBzZWFyY2ggZm9yIFB5dGhvbidzIHBhdGggaXMgbm93CisgICJweXRob24zIiB1bmRlciBVbml4LCBub3QgInB5dGhvbiIuCisKKy0gSXNzdWUgIzE1MDMzOiBGaXggdGhlIGV4aXQgc3RhdHVzIGJ1ZyB3aGVuIG1vZHVsZXMgaW52b2tlZCB1c2luZyAtbSBzd2l0aCwKKyAgcmV0dXJuIHRoZSBwcm9wZXIgZmFpbHVyZSByZXR1cm4gdmFsdWUgKDEpLiBQYXRjaCBjb250cmlidXRlZCBieSBKZWZmIEtudXBwLgorCistIElzc3VlICMxNTIyOTogQW4gT1NFcnJvciBzdWJjbGFzcyB3aG9zZSBfX2luaXRfXyBkb2Vzbid0IGNhbGwgYmFjaworICBPU0Vycm9yLl9faW5pdF9fIGNvdWxkIHByb2R1Y2UgaW5jb21wbGV0ZSBpbnN0YW5jZXMsIGxlYWRpbmcgdG8gY3Jhc2hlcyB3aGVuCisgIGNhbGxpbmcgc3RyKCkgb24gdGhlbS4KKworLSBJc3N1ZSAxNTMwNzogVmlydHVhbCBlbnZpcm9ubWVudHMgbm93IHVzZSBzeW1saW5rcyB3aXRoIGZyYW1ld29yayBidWlsZHMgb24KKyAgTWFjIE9TIFgsIGxpa2Ugb3RoZXIgUE9TSVggYnVpbGRzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE1NDI0OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBhcnJheSBvYmplY3RzLiAgUGF0Y2ggYnkKKyAgTHVkd2lnIEjDpGhuZS4KKworLSBJc3N1ZSAjMTU1NzY6IEFsbG93IGV4dGVuc2lvbiBtb2R1bGVzIHRvIGFjdCBhcyBhIHBhY2thZ2UncyBfX2luaXRfXyBtb2R1bGUuCisKKy0gSXNzdWUgIzE1NTAyOiBIYXZlIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIHdvcmsgb24gc3lzLm1ldGFfcGF0aCBpbnN0ZWFkCisgIG9mIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLgorCistIElzc3VlICMxNTE2MzogUHlkb2Mgc2hvdWxkbid0IGxpc3QgX19sb2FkZXJfXyBhcyBtb2R1bGUgZGF0YS4KKworLSBJc3N1ZSAjMTU0NzE6IERvIG5vdCB1c2UgbXV0YWJsZSBvYmplY3RzIGFzIGRlZmF1bHRzIGZvcgorICBpbXBvcnRsaWIuX19pbXBvcnRfXygpLgorCistIElzc3VlICMxNTU1OTogVG8gYXZvaWQgYSBwcm9ibGVtYXRpYyBmYWlsdXJlIG1vZGUgd2hlbiBwYXNzZWQgdG8gdGhlIGJ5dGVzCisgIGNvbnN0cnVjdG9yLCBvYmplY3RzIGluIHRoZSBpcGFkZHJlc3MgbW9kdWxlIG5vIGxvbmdlciBpbXBsZW1lbnQgX19pbmRleF9fCisgICh0aGV5IHN0aWxsIGltcGxlbWVudCBfX2ludF9fIGFzIGFwcHJvcHJpYXRlKQorCistIElzc3VlICMxNTU0NjogRml4IGhhbmRsaW5nIG9mIHBhdGhvbG9naWNhbCBpbnB1dCBkYXRhIGluIHRoZSBwZWVrKCkgYW5kCisgIHJlYWQxKCkgbWV0aG9kcyBvZiB0aGUgQloyRmlsZSwgR3ppcEZpbGUgYW5kIExaTUFGaWxlIGNsYXNzZXMuCisKKy0gSXNzdWUgIzEzMDUyOiBGaXggSURMRSBjcmFzaGluZyB3aGVuIHJlcGxhY2Ugc3RyaW5nIGluIFNlYXJjaC9SZXBsYWNlIGRpYWxvZworICBlbmRlZCB3aXRoICdcJy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEyNjU1OiBJbnN0ZWFkIG9mIHJlcXVpcmluZyBhIGN1c3RvbSB0eXBlLCBvcy5zY2hlZF9nZXRhZmZpbml0eSBhbmQKKyAgb3Muc2NoZWRfc2V0YWZmaW5pdHkgbm93IHVzZSByZWd1bGFyIHNldHMgb2YgaW50ZWdlcnMgdG8gcmVwcmVzZW50IHRoZSBDUFVzIGEKKyAgcHJvY2VzcyBpcyByZXN0cmljdGVkIHRvLgorCistIElzc3VlICMxNTUzODogRml4IGNvbXBpbGF0aW9uIG9mIHRoZSBnZXRuYW1laW5mbygpIC8gZ2V0YWRkcmluZm8oKSBlbXVsYXRpb24KKyAgY29kZS4gIFBhdGNoIGJ5IFBoaWxpcHAgSGFnZW1laXN0ZXIuCisKKy0gSXNzdWUgIzE1NTE5OiBQcm9wZXJseSBleHBvc2UgV2luZG93c1JlZ2lzdHJ5RmluZGVyIGluIGltcG9ydGxpYiAoYW5kIHVzZSB0aGUKKyAgY29ycmVjdCB0ZXJtIGZvciBpdCkuIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWMgU25vdy4KKworLSBJc3N1ZSAjMTU1MDI6IEJyaW5nIHRoZSBpbXBvcnRsaWIgQUJDcyBpbnRvIGxpbmUgd2l0aCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUKKyAgaW1wb3J0IHByb3RvY29scyBnaXZlbiBQRVAgNDIwLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NDk5OiBMYXVuY2hpbmcgYSB3ZWJicm93c2VyIGluIFVuaXggdXNlZCB0byBzbGVlcCBmb3IgYSBmZXcgc2Vjb25kcy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgQW50b24gQmFya292c2t5LgorCistIElzc3VlICMxNTQ2MzogVGhlIGZhdWx0aGFuZGxlciBtb2R1bGUgdHJ1bmNhdGVzIHN0cmluZ3MgdG8gNTAwIGNoYXJhY3RlcnMsCisgIGluc3RlYWQgb2YgMTAwLCB0byBiZSBhYmxlIHRvIGRpc3BsYXkgbG9uZyBmaWxlIHBhdGhzLgorCistIElzc3VlICM2MDU2OiBNYWtlIG11bHRpcHJvY2Vzc2luZyB1c2Ugc2V0YmxvY2tpbmcoVHJ1ZSkgb24gdGhlIHNvY2tldHMgaXQKKyAgdXNlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IEogRGVyZWsgV2lsc29uLgorCistIElzc3VlICMxNTM2NDogRml4IHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJykgdG8gYmUgYW4gYWJzb2x1dGUgcGF0aC4KKworLSBJc3N1ZSAjMTUwNDE6IFVwZGF0ZSAic2VlIGFsc28iIGxpc3QgaW4gdGtpbnRlciBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxNTQxMzogb3MudGltZXMoKSBoYWQgZGlzYXBwZWFyZWQgdW5kZXIgV2luZG93cy4KKworLSBJc3N1ZSAjMTU0MDI6IEFuIGlzc3VlIGluIHRoZSBzdHJ1Y3QgbW9kdWxlIHRoYXQgY2F1c2VkIHN5cy5nZXRzaXplb2YgdG8KKyAgcmV0dXJuIGluY29ycmVjdCByZXN1bHRzIGZvciBzdHJ1Y3QuU3RydWN0IGluc3RhbmNlcyBoYXMgYmVlbiBmaXhlZC4gIEluaXRpYWwKKyAgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyMzI6IFdoZW4gbWFuZ2xlX2Zyb20gaXMgVHJ1ZSwgZW1haWwuR2VuZXJhdG9yIG5vdyBjb3JyZWN0bHkgbWFuZ2xlcworICBsaW5lcyB0aGF0IHN0YXJ0IHdpdGggJ0Zyb20gJyB0aGF0IG9jY3VyIGluIGEgTUlNRSBwcmVhbWJsZSBvciBlcGlsb2d1ZS4KKworLSBJc3N1ZSAjMTUwOTQ6IEluY29ycmVjdGx5IHBsYWNlZCAjZW5kaWYgaW4gX3RraW50ZXIuYy4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEzOTIyOiBhcmdwYXJzZSBubyBsb25nZXIgaW5jb3JyZWN0bHkgc3RyaXBzICctLSdzIHRoYXQgYXBwZWFyIGFmdGVyCisgIHRoZSBmaXJzdCBvbmUuCisKKy0gSXNzdWUgIzEyMzUzOiBhcmdwYXJzZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgbnVsbCBhcmd1bWVudCB2YWx1ZXMuCisKKy0gSXNzdWUgIzEwMDE3LCBpc3N1ZSAjMTQ5OTg6IEZpeCBUeXBlRXJyb3IgdXNpbmcgcHByaW50IG9uIGRpY3Rpb25hcmllcyB3aXRoCisgIHVzZXItZGVmaW5lZCB0eXBlcyBhcyBrZXlzIG9yIG90aGVyIHVub3JkZXJhYmxlIGtleXMuCisKKy0gSXNzdWUgIzE1Mzk3OiBpbnNwZWN0LmdldG1vZHVsZW5hbWUoKSBpcyBub3cgYmFzZWQgZGlyZWN0bHkgb24gaW1wb3J0bGliIHZpYSBhCisgIG5ldyBpbXBvcnRsaWIubWFjaGluZXJ5LmFsbF9zdWZmaXhlcygpIEFQSS4KKworLSBJc3N1ZSAjMTQ2MzU6IHRlbG5ldGxpYiB3aWxsIHVzZSBwb2xsKCkgcmF0aGVyIHRoYW4gc2VsZWN0KCkgd2hlbiBwb3NzaWJsZSB0bworICBhdm9pZCBmYWlsaW5nIGR1ZSB0byB0aGUgc2VsZWN0KCkgZmlsZSBkZXNjcmlwdG9yIGxpbWl0LgorCistIElzc3VlICMxNTE4MDogQ2xhcmlmeSBwb3NpeHBhdGguam9pbigpIGVycm9yIG1lc3NhZ2Ugd2hlbiBtaXhpbmcgc3RyICYgYnl0ZXMuCisKKy0gSXNzdWUgIzE1MzQzOiBwa2d1dGlsIG5vdyBpbmNsdWRlcyBhbiBpdGVyX2ltcG9ydGVyX21vZHVsZXMgaW1wbGVtZW50YXRpb24gZm9yCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciAoc2ltaWxhciB0byB0aGUgd2F5IGl0IGFscmVhZHkgaGFuZGxlZAorICB6aXBpbXBvcnQuemlwaW1wb3J0ZXIpLgorCistIElzc3VlICMxNTMxNDogcnVucHkgbm93IHNldHMgX19tYWluX18uX19sb2FkZXJfXyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE1MzU3OiBUaGUgaW1wb3J0IGVtdWxhdGlvbiBpbiBwa2d1dGlsIGlzIG5vdyBkZXByZWNhdGVkLiBwa2d1dGlsIHVzZXMKKyAgaW1wb3J0bGliIGludGVybmFsbHkgcmF0aGVyIHRoYW4gdGhlIGVtdWxhdGlvbi4KKworLSBJc3N1ZSAjMTUyMzM6IFB5dGhvbiBub3cgZ3VhcmFudGVlcyB0aGF0IGNhbGxhYmxlcyByZWdpc3RlcmVkIHdpdGggdGhlIGF0ZXhpdAorICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaW4gYSBkZXRlcm1pbmlzdGljIG9yZGVyLgorCistIElzc3VlICMxNTIzODogc2h1dGlsLmNvcHlzdGF0IG5vdyBjb3BpZXMgTGludXggImV4dGVuZGVkIGF0dHJpYnV0ZXMiLgorCistIElzc3VlICMxNTIzMDogcnVucHkucnVuX3BhdGggbm93IGNvcnJlY3RseSBzZXRzIF9fcGFja2FnZV9fIGFzIGRlc2NyaWJlZCBpbgorICB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTUzMTU6IFN1cHBvcnQgVlMgMjAxMCBpbiBkaXN0dXRpbHMgY3lnd2luY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1Mjk0OiBGaXggYSByZWdyZXNzaW9uIGluIHBrZ3V0aWwuZXh0ZW5kX3BhdGgoKSdzIGhhbmRsaW5nIG9mIG5lc3RlZAorICBuYW1lc3BhY2UgcGFja2FnZXMuCisKKy0gSXNzdWUgIzE1MDU2OiBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKSBhbmQgc291cmNlX2Zyb21fY2FjaGUoKSByYWlzZQorICBOb3RJbXBsZW1lbnRlZEVycm9yIHdoZW4gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBzZXQgdG8gTm9uZS4KKworLSBJc3N1ZSAjMTUyNTY6IEdyYW1tYXRpY2FsIG1pc3Rha2UgaW4gZXhjZXB0aW9uIHJhaXNlZCBieSBpbXAuZmluZF9tb2R1bGUoKS4KKworLSBJc3N1ZSAjNTkzMTogd3NnaXJlZiBlbnZpcm9uIHZhcmlhYmxlIFNFUlZFUl9TT0ZUV0FSRSB3aWxsIHNwZWNpZnkgYW4KKyAgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdGVybSBsaWtlIENQeXRob24sIEp5dGhvbiBpbnN0ZWFkIG9mIGdlbmVyaWMgIlB5dGhvbiIuCisKKy0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgb2Jzb2xldGUgYXJndW1lbnQgIm1heF9idWZmZXJfc2l6ZSIgb2YgQnVmZmVyZWRXcml0ZXIgYW5kCisgIEJ1ZmZlcmVkUldQYWlyLCBmcm9tIHRoZSBpbyBtb2R1bGUuCisKKy0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgb2Jzb2xldGUgYXJndW1lbnQgInZlcnNpb24iIG9mIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLgorCistIElzc3VlICMxNDgxNDogSW1wbGVtZW50IG1vcmUgY29uc2lzdGVudCBvcmRlcmluZyBhbmQgc29ydGluZyBiZWhhdmlvdXIgZm9yCisgIGlwYWRkcmVzcyBvYmplY3RzLgorCistIElzc3VlICMxNDgxNDogaXBhZGRyZXNzIG5ldHdvcmsgb2JqZWN0cyBjb3JyZWN0bHkgcmV0dXJuIE5vdEltcGxlbWVudGVkIHdoZW4KKyAgY29tcGFyZWQgdG8gYXJiaXRyYXJ5IG9iamVjdHMgaW5zdGVhZCBvZiByYWlzaW5nIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTQ5OTA6IENvcnJlY3RseSBmYWlsIHdpdGggU3ludGF4RXJyb3Igb24gaW52YWxpZCBlbmNvZGluZyBkZWNsYXJhdGlvbi4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBub3cgcHJvdmlkZXMgbW9yZSBpbmZvcm1hdGl2ZSBlcnJvciBtZXNzYWdlcyB3aGVuCisgIGNvbnN0cnVjdGluZyBpbnN0YW5jZXMgZGlyZWN0bHkgKGNoYW5nZXMgcGVybWl0dGVkIGR1cmluZyBiZXRhIGR1ZSB0bworICBwcm92aXNpb25hbCBBUEkgc3RhdHVzKS4KKworLSBJc3N1ZSAjMTUyNDc6IEZpbGVJTyBub3cgcmFpc2VzIGFuIGVycm9yIHdoZW4gZ2l2ZW4gYSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRpbmcKKyAgdG8gYSBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE1MjYxOiBTdG9wIG9zLnN0YXQoZmQpIGNyYXNoaW5nIG9uIFdpbmRvd3Mgd2hlbiBmZCBub3Qgb3Blbi4KKworLSBJc3N1ZSAjMTUxNjY6IEltcGxlbWVudCBpbXAuZ2V0X3RhZygpIHVzaW5nIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcuCisKKy0gSXNzdWUgIzE1MjEwOiBDYXRjaCBLZXlFcnJvciB3aGVuIGltcG9ydGxpYi5fX2luaXRfXyBjYW4ndCBmaW5kCisgIF9mcm96ZW5faW1wb3J0bGliIGluIHN5cy5tb2R1bGVzLCBub3QgSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE1MDMwOiBpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyIG5vdyBzdXBwb3J0cyB0aGUgbmV3IHNvdXJjZSBzaXplCisgIGhlYWRlciBmaWVsZCBpbiAucHljIGZpbGVzLgorCistIElzc3VlICM1MzQ2OiBQcmVzZXJ2ZSBwZXJtaXNzaW9ucyBvZiBtYm94LCBNTURGIGFuZCBCYWJ5bCBtYWlsYm94IGZpbGVzIG9uCisgIGZsdXNoKCkuCisKKy0gSXNzdWUgIzEwNTcxOiBGaXggdGhlICItLXNpZ24iIG9wdGlvbiBvZiBkaXN0dXRpbHMnIHVwbG9hZCBjb21tYW5kLiAgUGF0Y2ggYnkKKyAgSmFrdWIgV2lsay4KKworLSBJc3N1ZSAjOTU1OTogSWYgbWVzc2FnZXMgd2VyZSBvbmx5IGFkZGVkLCBhIG5ldyBmaWxlIGlzIG5vIGxvbmdlciBjcmVhdGVkIGFuZAorICByZW5hbWVkIG92ZXIgdGhlIG9sZCBmaWxlIHdoZW4gZmx1c2goKSBpcyBjYWxsZWQgb24gYW4gbWJveCwgTU1ERiBvciBCYWJ5bAorICBtYWlsYm94LgorCistIElzc3VlIDEwOTI0OiBGaXhlZCBjcnlwdC5ta3NhbHQoKSB0byB1c2UgYSBSTkcgdGhhdCBpcyBzdWl0YWJsZSBmb3IKKyAgY3J5cHRvZ3JhcGhpYyBwdXJwb3NlLgorCistIElzc3VlICMxNTE4NDogRW5zdXJlIGNvbnNpc3RlbnQgcmVzdWx0cyBvZiBPUyBYIGNvbmZpZ3VyYXRpb24gdGFpbG9yaW5nIGZvcgorICB1bml2ZXJzYWwgYnVpbGRzIGJ5IGZhY3RvcmluZyBvdXQgY29tbW9uIE9TIFgtc3BlY2lmaWMgY3VzdG9taXphdGlvbnMgZnJvbQorICBzeXNjb25maWcsIGRpc3R1dGlscy5zeXNjb25maWcsIGRpc3R1dGlscy51dGlsLCBhbmQgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIKKyAgaW50byBhIG5ldyBtb2R1bGUgX29zeF9zdXBwb3J0LgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTU2MTA6IFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4KCkgbm93IHVzZXMgYSAnbGV2ZWwnIG9mIDAgaW5zdGVhZCBvZiAtMS4KKworLSBJc3N1ZXMgIzE1MTY5LCAjMTQ1OTk6IFN0cmlwIG91dCB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZgorICBpbXAuc291cmNlX2Zyb21fY2FjaGUoKSB1c2VkIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGFuZAorICB1c2VkIHRoZSBQeXRob24gY29kZSBpbnN0ZWFkLiBMZWFkcyB0byBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgpIHRvIG5vdAorICB0cnkgdG8gaW5mZXIgdGhlIHNvdXJjZSBwYXRoIGZyb20gdGhlIGJ5dGVjb2RlIHBhdGggYXMKKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgZG9lcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1Njc2OiBOb3cgIm1tYXAiIGNoZWNrIGZvciBlbXB0eSBmaWxlcyBiZWZvcmUgZG9pbmcgdGhlCisgIG9mZnNldCBjaGVjay4gIFBhdGNoIGJ5IFN0ZXZlbiBXaWxsaXMuCisKKy0gSXNzdWUgIzY0OTM6IEFuIGlzc3VlIGluIGN0eXBlcyBvbiBXaW5kb3dzIHRoYXQgY2F1c2VkIHN0cnVjdHVyZSBiaXRmaWVsZHMKKyAgb2YgdHlwZSBjdHlwZXMuY191aW50MzIgYW5kIHdpZHRoIDMyIHRvIGluY29ycmVjdGx5IGJlIHNldCBoYXMgYmVlbiBmaXhlZC4KKworLSBJc3N1ZSAjMTUxOTQ6IFVwZGF0ZSBsaWJmZmkgdG8gdGhlIDMuMC4xMSByZWxlYXNlLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU0NTg6IHB5dGhvbi1jb25maWcgZ2V0cyBhIG5ldyBvcHRpb24gLS1jb25maWdkaXIgdG8gcHJpbnQgdGhlICRMSUJQTAorICB2YWx1ZS4KKworLSBNb3ZlIGltcG9ydGxpYi50ZXN0LmJlbmNobWFyayB0byBUb29scy9pbXBvcnRiZW5jaC4KKworLSBJc3N1ZSAjMTI2MDU6IFRoZSBnZGIgaG9va3MgZm9yIGRlYnVnZ2luZyBDUHl0aG9uICh3aXRoaW4gVG9vbHMvZ2RiKSBoYXZlIGJlZW4KKyAgZW5oYW5jZWQgdG8gc2hvdyBpbmZvcm1hdGlvbiBvbiBtb3JlIEMgZnJhbWVzIHJlbGV2YW50IHRvIENQeXRob24gd2l0aGluIHRoZQorICAicHktYnQiIGFuZCAicHktYnQtZnVsbCIgY29tbWFuZHM6CisKKyAgKiBDIGZyYW1lcyB0aGF0IGFyZSB3YWl0aW5nIG9uIHRoZSBHSUwKKyAgKiBDIGZyYW1lcyB0aGF0IGFyZSBnYXJiYWdlLWNvbGxlY3RpbmcKKyAgKiBDIGZyYW1lcyB0aGF0IGFyZSBkdWUgdG8gdGhlIGludm9jYXRpb24gb2YgYSBQeUNGdW5jdGlvbgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDQ0OiBVc2UgcHJvcGVyIHNwZWxsaW5nIGZvciBub24tQVNDSUkgY29udHJpYnV0b3IgbmFtZXMuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTI5NTogUmVvcmdhbml6ZSBhbmQgcmV3cml0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgaW1wb3J0IHN5c3RlbS4KKworLSBJc3N1ZSAjMTUyMzA6IENsZWFybHkgZG9jdW1lbnQgc29tZSBvZiB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIHJ1bnB5IG1vZHVsZSBhbmQKKyAgbnVkZ2UgcmVhZGVycyB0b3dhcmRzIGltcG9ydGxpYiB3aGVuIGFwcHJvcHJpYXRlLgorCistIElzc3VlICMxNTA1MzogQ29weSBQeXRob24gMy4zIGltcG9ydCBsb2NrIGNoYW5nZSBub3RpY2UgdG8gYWxsIHJlbGV2YW50CisgIGZ1bmN0aW9ucyBpbiBpbXAgaW5zdGVhZCBvZiBqdXN0IGF0IHRoZSB0b3Agb2YgdGhlIHJlbGV2YW50IHNlY3Rpb24uCisKKy0gSXNzdWUgIzE1Mjg4OiBMaW5rIHRvIHRoZSB0ZXJtICJsb2FkZXIiIGluIG5vdGVzIGluIHBrZ3V0aWwgYWJvdXQgaG93IHRoaW5ncworICB3b24ndCB3b3JrIGFzIGV4cGVjdGVkIGluIFB5dGhvbiAzLjMgYW5kIG1hcmsgdGhlIHJlcXVpc2l0ZSBmdW5jdGlvbnMgYXMKKyAgImNoYW5nZWQiIHNpbmNlIHRoZXkgd2lsbCBubyBsb25nZXIgd29yayB3aXRoIG1vZHVsZXMgZGlyZWN0bHkgaW1wb3J0ZWQgYnkKKyAgaW1wb3J0IGl0c2VsZi4KKworLSBJc3N1ZSAjMTM1NTc6IENsYXJpZnkgZWZmZWN0IG9mIGdpdmluZyB0d28gZGlmZmVyZW50IG5hbWVzcGFjZXMgdG8gZXhlYyBvcgorICBleGVjZmlsZSgpLgorCistIElzc3VlICMxNTI1MDogRG9jdW1lbnQgdGhhdCBmaWxlY21wLmRpcmNtcCBjb21wYXJlcyBmaWxlcyBzaGFsbG93bHkuIFBhdGNoCisgIGNvbnRyaWJ1dGVkIGJ5IENocmlzIEplcmRvbmVrLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU0Njc6IE1vdmUgaGVscGVycyBmb3IgX19zaXplb2ZfXyB0ZXN0cyBpbnRvIHRlc3Rfc3VwcG9ydC4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MzIwOiBNYWtlIGl0ZXJhdGluZyB0aGUgbGlzdCBvZiB0ZXN0cyB0aHJlYWQtc2FmZSB3aGVuIHJ1bm5pbmcgdGVzdHMKKyAgaW4gbXVsdGlwcm9jZXNzIG1vZGUuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTE2ODogTW92ZSBpbXBvcnRsaWIudGVzdCB0byB0ZXN0LnRlc3RfaW1wb3J0bGliLgorCistIElzc3VlICMxNTA5MTogUmVhY3RpdmF0ZSBhIHRlc3Qgb24gVU5JWCB3aGljaCB3YXMgZmFpbGluZyB0aGFua3MgdG8gYQorICBmb3Jnb3R0ZW4gaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgY2FsbC4KKworLSBJc3N1ZSAjMTUyMzA6IEFkb3B0ZWQgYSBtb3JlIHN5c3RlbWF0aWMgYXBwcm9hY2ggaW4gdGhlIHJ1bnB5IHRlc3RzLgorCistIElzc3VlICMxNTMwMDogRW5zdXJlIHRoZSB0ZW1wb3JhcnkgdGVzdCB3b3JraW5nIGRpcmVjdG9yaWVzIGFyZSBpbiB0aGUgc2FtZQorICBwYXJlbnQgZm9sZGVyIHdoZW4gcnVubmluZyB0ZXN0cyBpbiBtdWx0aXByb2Nlc3MgbW9kZSBmcm9tIGEgUHl0aG9uIGJ1aWxkLgorICBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUyODQ6IFNraXAge3NlbmQscmVjdn1tc2cgdGVzdHMgaW4gdGVzdF9zb2NrZXQgd2hlbiBJUHY2IGlzIG5vdAorICBlbmFibGVkLiBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCisKKy0gSXNzdWUgIzE1Mjc3OiBGaXggYSByZXNvdXJjZSBsZWFrIGluIHN1cHBvcnQucHkgd2hlbiBJUHY2IGlzIGRpc2FibGVkLiAgUGF0Y2gKKyAgYnkgQnJpYW4gQnJhemlsLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTE3MTU6IEZpeCBtdWx0aWFyY2ggZGV0ZWN0aW9uIHdpdGhvdXQgaGF2aW5nIERlYmlhbiBkZXZlbG9wbWVudCB0b29scworICAoZHBrZy1kZXYpIGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTUwMzc6IEJ1aWxkIE9TIFggaW5zdGFsbGVycyB3aXRoIGxvY2FsIGNvcHkgb2YgbmN1cnNlcyA1LjkgbGlicmFyaWVzCisgIHRvIGF2b2lkIGN1cnNlcy51bmdldF93Y2ggYnVnIHByZXNlbnQgaW4gb2xkZXIgdmVyc2lvbnMgb2YgbmN1cnNlcyBzdWNoIGFzCisgIHRob3NlIHNoaXBwZWQgd2l0aCBPUyBYLgorCistIElzc3VlICMxNTU2MDogRml4IGJ1aWxkaW5nIF9zcWxpdGUzIGV4dGVuc2lvbiBvbiBPUyBYIHdpdGggYW4gU0RLLiAgQWxzbywgZm9yCisgIE9TIFggaW5zdGFsbGVycywgZW5zdXJlIGNvbnNpc3RlbnQgc3FsaXRlMyBiZWhhdmlvciBhbmQgZmVhdHVyZSBhdmFpbGFiaWxpdHkKKyAgYnkgYnVpbGRpbmcgYSBsb2NhbCBjb3B5IG9mIGxpYnNxbGl0ZTMgcmF0aGVyIHRoYW4gZGVwZW5kaW5nIG9uIHRoZSB3aWRlIHJhbmdlCisgIG9mIHZlcnNpb25zIHN1cHBsaWVkIHdpdGggdmFyaW91cyBPUyBYIHJlbGVhc2VzLgorCistIElzc3VlICM4ODQ3OiBEaXNhYmxlIENPTURBVCBmb2xkaW5nIGluIFdpbmRvd3MgUEdPIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTQwMTg6IEZpeCBPUyBYIFRjbC9UayBmcmFtZXdvcmsgY2hlY2tpbmcgd2hlbiB1c2luZyBPUyBYIFNES3MuCisKKy0gSXNzdWUgIzE1NDMxOiBBZGQgX2ZyZWV6ZV9pbXBvcnRsaWIgcHJvamVjdCB0byByZWdlbmVyYXRlIGltcG9ydGxpYi5oIG9uCisgIFdpbmRvd3MuIFBhdGNoIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3Nvbi4KKworLSBJc3N1ZSAjMTQxOTc6IEZvciBPUyBYIGZyYW1ld29yayBidWlsZHMsIGVuc3VyZSBsaW5rcyB0byB0aGUgc2hhcmVkIGxpYnJhcnkKKyAgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgcHJvcGVyIEFCSSBzdWZmaXguCisKKy0gSXNzdWUgIzE0MzMwOiBGb3IgY3Jvc3MgYnVpbGRzLCBkb24ndCB1c2UgaG9zdCBweXRob24sIHVzZSBob3N0IHNlYXJjaCBwYXRocworICBmb3IgaG9zdCBjb21waWxlci4KKworLSBJc3N1ZSAjMTUyMzU6IEFsbG93IEJlcmtsZXkgREIgdmVyc2lvbnMgdXAgdG8gNS4zIHRvIGJ1aWxkIHRoZSBkYm0gbW9kdWxlLgorCistIElzc3VlICMxNTI2ODogU2VhcmNoIGN1cnNlcy5oIGluIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI3LUp1bi0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBGaXggYSAobW9zdCBsaWtlbHkpIHZlcnkgcmFyZSBtZW1vcnkgbGVhayB3aGVuIGNhbGxpbmcgbWFpbigpIGFuZCBub3QgYmVpbmcKKyAgYWJsZSB0byBkZWNvZGUgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE0ODE1OiBVc2UgUHlfc3NpemVfdCBpbnN0ZWFkIG9mIGxvbmcgZm9yIHRoZSBvYmplY3QgaGFzaCwgdG8KKyAgcHJlc2VydmUgYWxsIDY0IGJpdHMgb2YgaGFzaCBvbiBXaW42NC4KKworLSBJc3N1ZSAjMTIyNjg6IEZpbGUgcmVhZGxpbmUsIHJlYWRsaW5lcyBhbmQgcmVhZCgpIG9yIHJlYWRhbGwoKSBtZXRob2RzCisgIG5vIGxvbmdlciBsb3NlIGRhdGEgd2hlbiBhbiB1bmRlcmx5aW5nIHJlYWQgc3lzdGVtIGNhbGwgaXMgaW50ZXJydXB0ZWQuCisgIElPRXJyb3IgaXMgbm8gbG9uZ2VyIHJhaXNlZCBkdWUgdG8gYSByZWFkIHN5c3RlbSBjYWxsIHJldHVybmluZyBFSU5UUgorICBmcm9tIHdpdGhpbiB0aGVzZSBtZXRob2RzLgorCistIElzc3VlICMxMTYyNjogQWRkIF9TaXplVCBmdW5jdGlvbnMgdG8gc3RhYmxlIEFCSS4KKworLSBJc3N1ZSAjMTUxNDY6IEFkZCBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMuIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTUxNDI6IEZpeCByZWZlcmVuY2UgbGVhayB3aGVuIGRlYWxsb2NhdGluZyBpbnN0YW5jZXMgb2YgdHlwZXMKKyAgY3JlYXRlZCB1c2luZyBQeVR5cGVfRnJvbVNwZWMoKS4KKworLSBJc3N1ZSAjMTUwNDI6IEFkZCBQeVN0YXRlX0FkZE1vZHVsZSBhbmQgUHlTdGF0ZV9SZW1vdmVNb2R1bGUuIEFkZCB2ZXJzaW9uCisgIGd1YXJkIGZvciBQeV9MSU1JVEVEX0FQSSBhZGRpdGlvbnMuIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTAwNTM6IERvbid0IGNsb3NlIEZEcyB3aGVuIEZpbGVJTy5fX2luaXRfXyBmYWlscy4gTG9vc2VseSBiYXNlZCBvbgorICB0aGUgd29yayBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTUwOTY6IFJlbW92ZWQgc3VwcG9ydCBmb3IgdXInJyBhcyB0aGUgcmF3IG5vdGF0aW9uIGlzbid0CisgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMi54J3MgcmF3IHVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTM3ODM6IEdlbmVyYXRvciBvYmplY3RzIG5vdyB1c2UgdGhlIGlkZW50aWZpZXIgQVBJcyBpbnRlcm5hbGx5CisKKy0gSXNzdWUgIzE0ODc0OiBSZXN0b3JlIGNoYXJtYXAgZGVjb2Rpbmcgc3BlZWQgdG8gcHJlLVBFUCAzOTMgbGV2ZWxzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAyNjogdXRmLTE2IGVuY29kaW5nIGlzIG5vdyBzaWduaWZpY2FudGx5IGZhc3RlciAodXAgdG8gMTB4KS4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTEwMjI6IG9wZW4oKSBhbmQgaW8uVGV4dElPV3JhcHBlciBhcmUgbm93IGNhbGxpbmcKKyAgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKSBpbnN0ZWFkIG9mIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisgIGluIHRleHQgbW9kZSBpZiB0aGUgZW5jb2RpbmcgaXMgbm90IHNwZWNpZmllZC4gRG9uJ3QgY2hhbmdlIHRlbXBvcmFyeSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nIHVzaW5nIGxvY2FsZS5zZXRsb2NhbGUoKSwgdXNlIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZworICBpbnN0ZWFkIG9mIHRoZSB1c2VyIHByZWZlcnJlZCBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTQ2NzM6IEFkZCBFcmljIFNub3cncyBzeXMuaW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MDM4OiBPcHRpbWl6ZSBweXRob24gTG9ja3Mgb24gV2luZG93cy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICM5ODAzOiBEb24ndCBjbG9zZSBJRExFIG9uIHNhdmluZyBpZiBicmVha3BvaW50IGlzIG9wZW4uCisgIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjI4ODogQ29uc2lkZXIgJzAnIGFuZCAnMC4wJyBhcyB2YWxpZCBpbml0aWFsdmFsdWUKKyAgZm9yIHRraW50ZXIgU2ltcGxlRGlhbG9nLgorCistIElzc3VlICMxNTUxMjogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgcGFyc2VyLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQ2OTogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgZGVxdWUgb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0ODk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIEJ5dGVzSU8gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0ODc6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGJ1ZmZlcmVkIEkvTyBvYmplY3RzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTUxNDogQ29ycmVjdCBfX3NpemVvZl9fIHN1cHBvcnQgZm9yIGNwdV9zZXQuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MTg3OiBCdWdmaXg6IHJlbW92ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgdGVzdF9zaHV0aWwgd2FzIGxlYXZpbmcKKyAgYmVoaW5kLgorCistIElzc3VlICMxNTE3NzogQWRkZWQgZGlyX2ZkIHBhcmFtZXRlciB0byBvcy5md2FsaygpLgorCistIElzc3VlICMxNTE3NjogQ2xhcmlmaWVkIGJlaGF2aW9yLCBkb2N1bWVudGF0aW9uLCBhbmQgaW1wbGVtZW50YXRpb24KKyAgb2Ygb3MubGlzdGRpcigpLgorCistIElzc3VlICMxNTA2MTogUmUtaW1wbGVtZW50ZWQgaG1hYy5jb21wYXJlX2RpZ2VzdCgpIGluIEMgdG8gcHJldmVudCBmdXJ0aGVyCisgIHRpbWluZyBhbmFseXNpcyBhbmQgdG8gc3VwcG9ydCBhbGwgYnVmZmVyIHByb3RvY29sIGF3YXJlIG9iamVjdHMgYXMgd2VsbCBhcworICBBU0NJSSBvbmx5IHN0ciBpbnN0YW5jZXMgc2FmZWx5LgorCistIElzc3VlICMxNTE2NDogQ2hhbmdlIHJldHVybiB2YWx1ZSBvZiBwbGF0Zm9ybS51bmFtZSgpIGZyb20gYQorICBwbGFpbiB0dXBsZSB0byBhIGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUuCisKKy0gU3VwcG9ydCBNYWdlaWEgTGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE2Nzg6IFN1cHBvcnQgQXJjaCBsaW51eCBpbiB0aGUgcGxhdGZvcm0gbW9kdWxlLgorCistIElzc3VlICMxNTExODogQ2hhbmdlIHJldHVybiB2YWx1ZSBvZiBvcy51bmFtZSgpIGFuZCBvcy50aW1lcygpIGZyb20KKyAgcGxhaW4gdHVwbGVzIHRvIGltbXV0YWJsZSBpdGVyYWJsZSBvYmplY3RzIHdpdGggbmFtZWQgYXR0cmlidXRlcworICAoc3RydWN0c2VxIG9iamVjdHMpLgorCistIFNwZWVkIHVwIF9kZWNpbWFsIGJ5IGFub3RoZXIgMTAtMTUlIGJ5IGNhY2hpbmcgdGhlIHRocmVhZCBsb2NhbCBjb250ZXh0CisgIHRoYXQgd2FzIGxhc3QgYWNjZXNzZWQuIEluIHRoZSBwaSBiZW5jaG1hcmsgKDY0LWJpdCBwbGF0Zm9ybSwgcHJlYz05KSwKKyAgX2RlY2ltYWwgaXMgbm93IG9ubHkgMS41eCBzbG93ZXIgdGhhbiBmbG9hdC4KKworLSBSZW1vdmUgdGhlIHBhY2thZ2luZyBtb2R1bGUsIHdoaWNoIGlzIG5vdCByZWFkeSBmb3IgcHJpbWUgdGltZS4KKworLSBJc3N1ZSAjMTUxNTQ6IEFkZCAiZGlyX2ZkIiBwYXJhbWV0ZXIgdG8gb3Mucm1kaXIsIHJlbW92ZSAicm1kaXIiCisgIHBhcmFtZXRlciBmcm9tIG9zLnJlbW92ZSAvIG9zLnVubGluay4KKworLSBJc3N1ZSAjNDQ4OTogQWRkIGEgc2h1dGlsLnJtdHJlZSB0aGF0IGlzbid0IHN1c2NlcHRpYmxlIHRvIHN5bWxpbmsgYXR0YWNrcy4KKyAgSXQgaXMgdXNlZCBhdXRvbWF0aWNhbGx5IG9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRoZSBuZWNlc3Nhcnkgb3Mub3BlbmF0KCkKKyAgYW5kIG9zLnVubGlua2F0KCkgZnVuY3Rpb25zLiBNYWluIGNvZGUgYnkgTWFydGluIHZvbiBMw7Z3aXMuCisKKy0gSXNzdWUgIzE1MTU2OiBIVE1MUGFyc2VyIG5vdyB1c2VzIHRoZSBuZXcgImh0bWwuZW50aXRpZXMuaHRtbDUiIGRpY3Rpb25hcnkuCisKKy0gSXNzdWUgIzExMTEzOiBhZGQgYSBuZXcgImh0bWw1IiBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIG5hbWVkIGNoYXJhY3RlcgorICByZWZlcmVuY2VzIGRlZmluZWQgYnkgdGhlIEhUTUw1IHN0YW5kYXJkIGFuZCB0aGUgZXF1aXZhbGVudCBVbmljb2RlCisgIGNoYXJhY3RlcihzKSB0byB0aGUgaHRtbC5lbnRpdGllcyBtb2R1bGUuCisKKy0gSXNzdWUgIzE1MTE0OiB0aGUgc3RyaWN0IG1vZGUgb2YgSFRNTFBhcnNlciBhbmQgdGhlIEhUTUxQYXJzZUVycm9yIGV4Y2VwdGlvbgorICBhcmUgZGVwcmVjYXRlZCBub3cgdGhhdCB0aGUgcGFyc2VyIGlzIGFibGUgdG8gcGFyc2UgaW52YWxpZCBtYXJrdXAuCisKKy0gSXNzdWUgIzM2NjU6IFx1IGFuZCBcVSBlc2NhcGVzIGFyZSBub3cgc3VwcG9ydGVkIGluIHVuaWNvZGUgcmVndWxhcgorICBleHByZXNzaW9ucy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MTUzOiBBZGRlZCBpbnNwZWN0LmdldGdlbmVyYXRvcmxvY2FscyB0byBzaW1wbGlmeSB3aGl0ZSBib3gKKyAgdGVzdGluZyBvZiBnZW5lcmF0b3Igc3RhdGUgdXBkYXRlcworCistIElzc3VlICMxMzA2MjogQWRkZWQgaW5zcGVjdC5nZXRjbG9zdXJldmFycyB0byBzaW1wbGlmeSB0ZXN0aW5nIHN0YXRlZnVsCisgIGNsb3N1cmVzCisKKy0gSXNzdWUgIzExMDI0OiBGaXhlcyBhbmQgYWRkaXRpb25hbCB0ZXN0cyBmb3IgVGltZTJJbnRlcm5hbGRhdGUuCisKKy0gSXNzdWUgIzE0NjI2OiBMYXJnZSByZWZhY3RvcmluZyBvZiBmdW5jdGlvbnMgLyBwYXJhbWV0ZXJzIGluIHRoZSBvcyBtb2R1bGUuCisgIE1hbnkgZnVuY3Rpb25zIG5vdyBzdXBwb3J0ICJkaXJfZmQiIGFuZCAiZm9sbG93X3N5bWxpbmtzIiBwYXJhbWV0ZXJzOworICBzb21lIGFsc28gc3VwcG9ydCBhY2NlcHRpbmcgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgaW4gcGxhY2Ugb2YgYSBwYXRoCisgIHN0cmluZy4gIEFkZGVkIG9zLnN1cHBvcnRfKiBjb2xsZWN0aW9ucyBhcyBMQllMIGhlbHBlcnMuICBSZW1vdmVkIG1hbnkKKyAgZnVuY3Rpb25zIG9ubHkgcHJldmlvdXNseSBzZWVuIGluIDMuMyBhbHBoYSByZWxlYXNlcyAob2Z0ZW4gc3RhcnRpbmcgd2l0aAorICAiZiIgb3IgImwiLCBvciBlbmRpbmcgd2l0aCAiYXQiKS4gIE9yaWdpbmFsbHkgc3VnZ2VzdGVkIGJ5IFNlcmhpeSBTdG9yY2hha2E7CisgIGltcGxlbWVudGVkIGJ5IExhcnJ5IEhhc3RpbmdzLgorCistIElzc3VlICMxNTAwODogSW1wbGVtZW50IFBFUCAzNjIgIlNpZ25hdHVyZSBPYmplY3RzIi4KKyAgUGF0Y2ggYnkgWXVyeSBTZWxpdmFub3YuCisKKy0gSXNzdWU6ICMxNTEzODogYmFzZTY0LnVybHNhZmVfe2VuLGRlfWNvZGUoKSBhcmUgbm93IDMtNHggZmFzdGVyLgorCistIElzc3VlICM0NDQ1ODI6IEFkZCBzaHV0aWwud2hpY2gsIGZvciBmaW5kaW5nIHByb2dyYW1zIG9uIHRoZSBzeXN0ZW0gcGF0aC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRXJpayBEZW1haW5lLCB3aXRoIGxhdGVyIGl0ZXJhdGlvbnMgYnkgSmFuIEtpbGxpYW4KKyAgYW5kIEJyaWFuIEN1cnRpbi4KKworLSBJc3N1ZSAjMTQ4Mzc6IFNTTCBlcnJvcnMgbm93IGhhdmUgYGBsaWJyYXJ5YGAgYW5kIGBgcmVhc29uYGAgYXR0cmlidXRlcworICBkZXNjcmliaW5nIHByZWNpc2VseSB3aGF0IGhhcHBlbmVkIGFuZCBpbiB3aGljaCBPcGVuU1NMIHN1Ym1vZHVsZS4gIFRoZQorICBzdHIoKSBvZiBhIFNTTEVycm9yIGlzIGFsc28gZW5oYW5jZWQgYWNjb3JkaW5nbHkuCisKKy0gSXNzdWUgIzk1Mjc6IGRhdGV0aW1lLmFzdGltZXpvbmUoKSBtZXRob2Qgd2lsbCBub3cgc3VwcGx5IGEgY2xhc3MKKyAgdGltZXpvbmUgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgc3lzdGVtIGxvY2FsIHRpbWV6b25lIHdoZW4KKyAgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLgorCistIElzc3VlICMxNDY1MzogZW1haWwudXRpbHMubWt0aW1lX3R6KCkgbm8gbG9uZ2VyIHJlbGllcyBvbiBzeXN0ZW0KKyAgbWt0aW1lKCkgd2hlbiB0aW1lem9uZSBvZmZlc3QgaXMgc3VwcGxpZWQuCisKKy0gSXNzdWUgIzE0Njg0OiB6bGliLmNvbXByZXNzb2JqKCkgYW5kIHpsaWIuZGVjb21wcmVzc29iaigpIG5vdyBzdXBwb3J0IHRoZSB1c2UKKyAgb2YgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJpZXMuIE9yaWdpbmFsIHBhdGNoIGJ5IFNhbSBSdXNoaW5nLgorCistIEZpeCBHemlwRmlsZSdzIGhhbmRsaW5nIG9mIGZpbGVuYW1lcyBnaXZlbiBhcyBieXRlcyBvYmplY3RzLgorCistIElzc3VlICMxNDc3MjogUmV0dXJuIGRlc3RpbmF0aW9uIHZhbHVlcyBmcm9tIHNvbWUgc2h1dGlsIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTUwNjQ6IEltcGxlbWVudCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgZm9yIG11bHRpcHJvY2Vzc2luZyB0eXBlcworCistIElzc3VlICMxNTEwMTogTWFrZSBwb29sIGZpbmFsaXplciBhdm9pZCBqb2luaW5nIGN1cnJlbnQgdGhyZWFkLgorCistIElzc3VlICMxNDY1NzogVGhlIGZyb3plbiBpbnN0YW5jZSBvZiBpbXBvcnRsaWIgdXNlZCBmb3IgYm9vdHN0cmFwIGlzIG5vdworICBhbHNvIHRoZSBtb2R1bGUgaW1wb3J0ZWQgYXMgaW1wb3J0bGliLl9ib290c3RyYXAuCisKKy0gSXNzdWUgIzE0MDU1OiBBZGQgX19zaXplb2ZfXyBzdXBwb3J0IHRvIF9lbGVtZW50dHJlZS4KKworLSBJc3N1ZSAjMTUwNTQ6IEEgYnVnIGluIHRva2VuaXplLnRva2VuaXplIHRoYXQgY2F1c2VkIHN0cmluZyBsaXRlcmFscworICB3aXRoICdiJyBwcmVmaXhlcyB0byBiZSBpbmNvcnJlY3RseSB0b2tlbml6ZWQgaGFzIGJlZW4gZml4ZWQuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MDA2OiBBbGxvdyBlcXVhbGl0eSBjb21wYXJpc29uIGJldHdlZW4gbmFpdmUgYW5kIGF3YXJlCisgIHRpbWUgb3IgZGF0ZXRpbWUgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ5ODI6IERvY3VtZW50IHRoYXQgcGtndXRpbCdzIGl0ZXJhdGlvbiBmdW5jdGlvbnMgcmVxdWlyZSB0aGUKKyAgbm9uLXN0YW5kYXJkIGl0ZXJfbW9kdWxlcygpIG1ldGhvZCB0byBiZSBkZWZpbmVkIGJ5IGFuIGltcG9ydGVyIChzb21ldGhpbmcKKyAgdGhlIGltcG9ydGxpYiBpbXBvcnRlcnMgZG8gbm90IGRlZmluZSkuCisKKy0gSXNzdWUgIzE1MDM2OiBNYWlsYm94IG5vIGxvbmdlciB0aHJvd3MgYW4gZXJyb3IgaWYgYSBmbHVzaCBpcyBkb25lCisgIGJldHdlZW4gb3BlcmF0aW9ucyB3aGVuIHJlbW92aW5nIG9yIGNoYW5naW5nIG11bHRpcGxlIGl0ZW1zIGluIG1ib3gsCisgIE1NREYsIG9yIEJhYnlsIG1haWxib3hlcy4KKworLSBJc3N1ZSAjMTQwNTk6IEltcGxlbWVudCBtdWx0aXByb2Nlc3NpbmcuQmFycmllci4KKworLSBJc3N1ZSAjMTUwNjE6IFRoZSBpbmFwcHJvcHJpYXRlbHkgbmFtZWQgaG1hYy5zZWN1cmVfY29tcGFyZSBoYXMgYmVlbgorICByZW5hbWVkIHRvIGhtYWMuY29tcGFyZV9kaWdlc3QsIHJlc3RyaWN0ZWQgdG8gb3BlcmF0aW5nIG9uIGJ5dGVzIGlucHV0cworICBvbmx5IGFuZCBoYWQgaXRzIGRvY3VtZW50YXRpb24gdXBkYXRlZCB0byBtb3JlIGFjY3VyYXRlbHkgcmVmbGVjdCBib3RoIGl0cworICBpbnRlbnQgYW5kIGl0cyBsaW1pdGF0aW9ucworCistIElzc3VlICMxMzg0MTogTWFrZSBjaGlsZCBwcm9jZXNzZXMgZXhpdCB1c2luZyBzeXMuZXhpdCgpIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0OTM2OiBjdXJzZXNfcGFuZWwgd2FzIGNvbnZlcnRlZCB0byBQRVAgMzEyMSBhbmQgUEVQIDM4NCBBUEkuCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTY2NzU0NjogT24gcGxhdGZvcm1zIHN1cHBvcnRpbmcgdG1fem9uZSBhbmQgdG1fZ210b2ZmIGZpZWxkcworICBpbiBzdHJ1Y3QgdG0sIHRpbWUuc3RydWN0X3RpbWUgb2JqZWN0cyByZXR1cm5lZCBieSB0aW1lLmdtdGltZSgpLAorICB0aW1lLmxvY2FsdGltZSgpIGFuZCB0aW1lLnN0cnB0aW1lKCkgZnVuY3Rpb25zIG5vdyBoYXZlIHRtX3pvbmUgYW5kCisgIHRtX2dtdG9mZiBhdHRyaWJ1dGVzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUGF1bCBCb2RkaWUuCisKKy0gUmVuYW1lIGFkanVzdGVkIGF0dHJpYnV0ZSB0byBhZGp1c3RhYmxlIGluIHRpbWUuZ2V0X2Nsb2NrX2luZm8oKSByZXN1bHQuCisKKy0gSXNzdWUgIzM1MTg6IFJlbW92ZSByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGVudCBCYXNlTWFuYWdlci5mcm9tX2FkZHJlc3MoKQorICBtZXRob2QuCisKKy0gSXNzdWUgIzEzODU3OiBBZGRlZCB0ZXh0d3JhcC5pbmRlbnQoKSBmdW5jdGlvbiAoaW5pdGlhbCBwYXRjaCBieSBFenJhCisgIEJlcmNoKQorCistIElzc3VlICMyNzM2OiBBZGRlZCBkYXRldGltZS50aW1lc3RhbXAoKSBtZXRob2QuCisKKy0gSXNzdWUgIzEzODU0OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBwcm9wZXJseSBoYW5kbGUgbm9uLWludGVnZXIKKyAgbm9uLXN0cmluZyBhcmd1bWVudCB0byBTeXN0ZW1FeGl0LgorCistIElzc3VlICMxMjE1NzogTWFrZSBwb29sLm1hcCgpIGVtcHR5IGl0ZXJhYmxlcyBjb3JyZWN0bHkuICBJbml0aWFsCisgIHBhdGNoIGJ5IG1vdWFkLgorCistIElzc3VlICMxMTgyMzogZGlzYXNzZW1ibHkgbm93IHNob3dzIGFyZ3VtZW50IGNvdW50cyBvbiBjYWxscyB3aXRoIGtleXdvcmQgYXJncy4KKworLSBJc3N1ZSAjMTQ3MTE6IG9zLnN0YXRfZmxvYXRfdGltZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkLgorCistIExaTUFGaWxlIG5vdyBhY2NlcHRzIHRoZSBtb2RlcyAicmIiLyJ3YiIvImFiIiBhcyBzeW5vbnltcyBvZiAiciIvInciLyJhIi4KKworLSBUaGUgYnoyIGFuZCBsem1hIG1vZHVsZXMgbm93IGVhY2ggY29udGFpbiBhbiBvcGVuKCkgZnVuY3Rpb24sIGFsbG93aW5nCisgIGNvbXByZXNzZWQgZmlsZXMgdG8gcmVhZGlseSBiZSBvcGVuZWQgaW4gdGV4dCBtb2RlIGFzIHdlbGwgYXMgYmluYXJ5IG1vZGUuCisKKy0gQloyRmlsZS5fX2luaXRfXygpIGFuZCBMWk1BRmlsZS5fX2luaXRfXygpIG5vdyBhY2NlcHQgYSBmaWxlIG9iamVjdCBhcyB0aGVpcgorICBmaXJzdCBhcmd1bWVudCwgcmF0aGVyIHRoYW4gcmVxdWlyaW5nIGEgc2VwYXJhdGUgImZpbGVvYmoiIGFyZ3VtZW50LgorCistIGd6aXAub3BlbigpIG5vdyBhY2NlcHRzIGZpbGUgb2JqZWN0cyBhcyB3ZWxsIGFzIGZpbGVuYW1lcy4KKworLSBJc3N1ZSAjMTQ5OTI6IG9zLm1ha2VkaXJzKHBhdGgsIGV4aXN0X29rPVRydWUpIHdvdWxkIHJhaXNlIGFuIE9TRXJyb3IKKyAgd2hlbiB0aGUgcGF0aCBleGlzdGVkIGFuZCBoYWQgdGhlIFNfSVNHSUQgbW9kZSBiaXQgc2V0IHdoZW4gaXQgd2FzCisgIG5vdCBleHBsaWNpdGx5IGFza2VkIGZvci4gIFRoaXMgaXMgbm8gbG9uZ2VyIGFuIGV4Y2VwdGlvbiBhcyBta2RpcgorICBjYW5ub3QgY29udHJvbCBpZiB0aGUgT1Mgc2V0cyB0aGF0IGJpdCBmb3IgaXQgb3Igbm90LgorCistIElzc3VlICMxNDk4OTogTWFrZSB0aGUgQ0dJIGVuYWJsZSBvcHRpb24gdG8gaHR0cC5zZXJ2ZXIgYXZhaWxhYmxlIHZpYSBjb21tYW5kCisgIGxpbmUuCisKKy0gSXNzdWUgIzE0OTg3OiBBZGQgYSBtaXNzaW5nIGltcG9ydCBzdGF0ZW1lbnQgdG8gaW5zcGVjdC4KKworLSBJc3N1ZSAjMTA3OTogZW1haWwuaGVhZGVyLmRlY29kZV9oZWFkZXIgbm93IGNvcnJlY3RseSBwYXJzZXMgYWxsIHRoZSBleGFtcGxlcworICBpbiBSRkMyMDQ3LiAgVGhlcmUgaXMgYSBuZWNlc3NhcnkgdmlzaWJsZSBiZWhhdmlvciBjaGFuZ2U6IHRoZSBsZWFkaW5nIGFuZC9vcgorICB0cmFpbGluZyB3aGl0ZXNwYWNlIG9uIEFTQ0lJIHBhcnRzIGlzIG5vdyBwcmVzZXJ2ZWQuCisKKy0gSXNzdWUgIzE0OTY5OiBCZXR0ZXIgaGFuZGxpbmcgb2YgZXhjZXB0aW9uIGNoYWluaW5nIGluIGNvbnRleHRsaWIuRXhpdFN0YWNrCisKKy0gSXNzdWUgIzE0OTYyOiBVcGRhdGUgdGV4dCBjb2xvcmluZyBpbiBJRExFIHNoZWxsIHdpbmRvdyBhZnRlciBjaGFuZ2luZworICBvcHRpb25zLiAgUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE0OTYzOiBDb252ZXJ0IGNvbnRleHRsaWIuRXhpdFN0YWNrLl9fZXhpdF9fIHRvIHVzZSBhbiBpdGVyYXRpdmUKKyAgYWxnb3JpdGhtIChQYXRjaCBieSBBbG9uIEhvcmV2KQorCistIElzc3VlICMxNDc4NTogQWRkIHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIHRvIGhlbHAgZGVidWcgbG93LWxldmVsIG1lbW9yeQorICBhbGxvY2F0aW9uIGlzc3VlcworCistIElzc3VlICMxNDQ0MzogRW5zdXJlIHRoYXQgLnB5IGZpbGVzIGFyZSBieXRlLWNvbXBpbGVkIHdpdGggdGhlIGNvcnJlY3QgUHl0aG9uCisgIGV4ZWN1dGFibGUgd2l0aGluIGJkaXN0X3JwbSBldmVuIG9uIG9sZGVyIHZlcnNpb25zIG9mIFJQTQorCitDLUFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTM3ODM6IEluYWR2ZXJ0ZW50IGFkZGl0aW9ucyB0byB0aGUgcHVibGljIEMgQVBJIGluIHRoZSBQRVAgMzgwCisgIGltcGxlbWVudGF0aW9uIGhhdmUgZWl0aGVyIGJlZW4gcmVtb3ZlZCBvciBtYXJrZWQgYXMgcHJpdmF0ZSBpbnRlcmZhY2VzLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTUwMDA6IFN1cHBvcnQgdGhlICJ1bmlxdWUiIHgzMiBhcmNoaXRlY3R1cmUgaW4gX3Bvc2l4c3VicHJvY2Vzcy5jLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDgxOiBEb2N1bWVudCBQeVN0YXRlX0ZpbmRNb2R1bGUuCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEFkZGVkIGZpcnN0IGRyYWZ0IG9mIGlwYWRkcmVzcyBtb2R1bGUgQVBJIHJlZmVyZW5jZQorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQ3Njk6IHRlc3RfY2FwaSBub3cgaGFzIFNraXBpdGVtVGVzdCwgd2hpY2ggY2xldmVybHkgY2hlY2tzCisgIGZvciAicGFyaXR5IiBiZXR3ZWVuIFB5QXJnX1BhcnNlVHVwbGUoKSBhbmQgdGhlIFB5dGhvbi9nZXRhcmdzLmMgc3RhdGljCisgIGZ1bmN0aW9uIHNraXBpdGVtKCkgZm9yIGFsbCBwb3NzaWJsZSAiZm9ybWF0IHVuaXRzIi4KKworLSB0ZXN0X25udHBsaWIgbm93IHRvbGVyYXRlcyBiZWluZyBydW4gZnJvbSBiZWhpbmQgTk5UUCBnYXRld2F5cyB0aGF0IGFkZAorICAiWC1BbnRpdmlydXMiIGhlYWRlcnMgdG8gYXJ0aWNsZXMKKworLSBJc3N1ZSAjMTUwNDM6IHRlc3RfZ2RiIGlzIG5vdyBza2lwcGVkIGVudGlyZWx5IGlmIGdkYiBzZWN1cml0eSBzZXR0aW5ncworICBibG9jayBsb2FkaW5nIG9mIHRoZSBnZGIgaG9va3MKKworLSBJc3N1ZSAjMTQ5NjM6IEFkZCB0ZXN0IGNhc2VzIGZvciBleGNlcHRpb24gaGFuZGxpbmcgYmVoYXZpb3VyCisgIGluIGNvbnRleHRsaWIuRXhpdFN0YWNrIChJbml0aWFsIHBhdGNoIGJ5IEFsb24gSG9yZXYpCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMzU5MDogSW1wcm92ZSBzdXBwb3J0IGZvciBPUyBYIFhjb2RlIDQ6CisgICAgKiBUcnkgdG8gYXZvaWQgYnVpbGRpbmcgUHl0aG9uIG9yIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggcHJvYmxlbWF0aWMKKyAgICAgIGxsdm0tZ2NjIGNvbXBpbGVyLgorICAgICogU2luY2UgWGNvZGUgNCByZW1vdmVzIHBwYyBzdXBwb3J0LCBleHRlbnNpb24gbW9kdWxlIGJ1aWxkcyBub3cKKyAgICAgIGNoZWNrIGZvciBwcGMgY29tcGlsZXIgc3VwcG9ydCBhbmQgYXV0b21hdGljYWxseSByZW1vdmUgcHBjIGFuZAorICAgICAgcHBjNjQgYXJjaHMgd2hlbiBub3QgYXZhaWxhYmxlLgorICAgICogU2luY2UgWGNvZGUgNCBubyBsb25nZXIgaW5zdGFsbCBTREtzIGluIGRlZmF1bHQgbG9jYXRpb25zLAorICAgICAgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93IHJldmVydCB0byB1c2luZyBpbnN0YWxsZWQgaGVhZGVycworICAgICAgYW5kIGxpYnMgaWYgdGhlIFNESyB1c2VkIHRvIGJ1aWxkIHRoZSBpbnRlcnByZXRlciBpcyBub3QKKyAgICAgIGF2YWlsYWJsZS4KKyAgICAqIFVwZGF0ZSAuL2NvbmZpZ3VyZSB0byB1c2UgYmV0dGVyIGRlZmF1bHRzIGZvciB1bml2ZXJzYWwgYnVpbGRzOworICAgICAgaW4gcGFydGljdWxhciwgLS1lbmFibGUtdW5pdmVyc2Fsc2RrPXllcyB1c2VzIHRoZSBYY29kZSBkZWZhdWx0CisgICAgICBTREsgYW5kIC0td2l0aC11bml2ZXJzYWwtYXJjaHMgbm93IGRlZmF1bHRzIHRvICJpbnRlbCIgaWYgcHBjCisgICAgICBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxNDIyNTogRml4IFVuaWNvZGUgc3VwcG9ydCBmb3IgY3Vyc2VzICgjMTI1NjcpIG9uIE9TIFgKKworLSBJc3N1ZSAjMTQ5Mjg6IEZpeCBpbXBvcnRsaWIgYm9vdHN0cmFwIGlzc3VlcyBieSB1c2luZyBhIGN1c3RvbSBleGVjdXRhYmxlCisgIChNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliKSB0byBidWlsZCBQeXRob24vaW1wb3J0bGliLmguCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDMxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ4MzU6IE1ha2UgcGxpc3RsaWIgb3V0cHV0IGVtcHR5IGFycmF5cyAmIGRpY3RzIGxpa2UgT1MgWC4KKyAgUGF0Y2ggYnkgU2lkbmV5IFNhbiBNYXJ0w61uLgorCistIElzc3VlICMxNDc0NDogVXNlIHRoZSBuZXcgX1B5VW5pY29kZVdyaXRlciBpbnRlcm5hbCBBUEkgdG8gc3BlZWQgdXAKKyAgc3RyJWFyZ3MgYW5kIHN0ci5mb3JtYXQoYXJncykuCisKKy0gSXNzdWUgIzE0OTMwOiBNYWtlIG1lbW9yeXZpZXcgb2JqZWN0cyB3ZWFrcmVmYWJsZS4KKworLSBJc3N1ZSAjMTQ3NzU6IEZpeCBhIHBvdGVudGlhbCBxdWFkcmF0aWMgZGljdCBidWlsZC11cCBkdWUgdG8gdGhlIGdhcmJhZ2UKKyAgY29sbGVjdG9yIHJlcGVhdGVkbHkgdHJ5aW5nIHRvIHVudHJhY2sgZGljdHMuCisKKy0gSXNzdWUgIzE0ODU3OiBmaXggcmVncmVzc2lvbiBpbiByZWZlcmVuY2VzIHRvIFBFUCAzMTM1IGltcGxpY2l0IF9fY2xhc3NfXworICBjbG9zdXJlIHZhcmlhYmxlIChSZW9wZW5zIGlzc3VlICMxMjM3MCkKKworLSBJc3N1ZSAjMTQ3MTIgKFBFUCA0MDUpOiBWaXJ0dWFsIGVudmlyb25tZW50cy4gSW1wbGVtZW50ZWQgYnkgVmluYXkgU2FqaXAuCisKKy0gSXNzdWUgIzE0NjYwIChQRVAgNDIwKTogTmFtZXNwYWNlIHBhY2thZ2VzLiBJbXBsZW1lbnRlZCBieSBFcmljIFNtaXRoLgorCistIElzc3VlICMxNDQ5NDogRml4IF9fZnV0dXJlX18ucHkgYW5kIGl0cyBkb2N1bWVudGF0aW9uIHRvIG5vdGUgdGhhdAorICBhYnNvbHV0ZSBpbXBvcnRzIGFyZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBpbiAzLjAgaW5zdGVhZCBvZiAyLjcuCisgIFBhdGNoIGJ5IFN2ZW4gTWFybmFjaC4KKworLSBJc3N1ZSAjOTI2MDogQSBmaW5lci1ncmFpbmVkIGltcG9ydCBsb2NrLiAgTW9zdCBvZiB0aGUgaW1wb3J0IHNlcXVlbmNlCisgIG5vdyB1c2VzIHBlci1tb2R1bGUgbG9ja3MgcmF0aGVyIHRoYW4gdGhlIGdsb2JhbCBpbXBvcnQgbG9jaywgZWxpbWluYXRpbmcKKyAgd2VsbC1rbm93biBpc3N1ZXMgd2l0aCB0aHJlYWRzIGFuZCBpbXBvcnRzLgorCistIElzc3VlICMxNDYyNDogVVRGLTE2IGRlY29kaW5nIGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIgb24gdmFyaW91cyBpbnB1dHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gYXNkbF9zZXEgYW5kIGFzZGxfaW50X3NlcSBhcmUgbm93IFB5X3NzaXplX3Qgc2l6ZWQuCisKKy0gSXNzdWUgIzE0MTMzIChQRVAgNDE1KTogSW1wbGVtZW50IHN1cHByZXNzaW9uIG9mIF9fY29udGV4dF9fIGRpc3BsYXkgd2l0aCBhbgorICBhdHRyaWJ1dGUgb24gQmFzZUV4Y2VwdGlvbi4gVGhpcyByZXBsYWNlcyB0aGUgb3JpZ2luYWwgbWVjaGFuaXNtIG9mIFBFUCA0MDkuCisKKy0gSXNzdWUgIzE0NDE3OiBNdXRhdGluZyBhIGRpY3QgZHVyaW5nIGxvb2t1cCBub3cgcmVzdGFydHMgdGhlIGxvb2t1cCBpbnN0ZWFkCisgIG9mIHJhaXNpbmcgYSBSdW50aW1lRXJyb3IgKHVuZG9lcyBpc3N1ZSAjMTQyMDUpLgorCistIElzc3VlICMxNDczODogU3BlZWQtdXAgVVRGLTggZGVjb2Rpbmcgb24gbm9uLUFTQ0lJIGRhdGEuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNDcwMDogRml4IHR3byBicm9rZW4gYW5kIHVuZGVmaW5lZC1iZWhhdmlvdXItaW5kdWNpbmcgb3ZlcmZsb3cgY2hlY2tzCisgIGluIG9sZC1zdHlsZSBzdHJpbmcgZm9ybWF0dGluZy4KKworLSBJc3N1ZSAjMTQ3MDU6IFRoZSBQeUFyZ19QYXJzZSgpIGZhbWlseSBvZiBmdW5jdGlvbnMgbm93IHN1cHBvcnQgdGhlICdwJyBmb3JtYXQKKyAgdW5pdCwgd2hpY2ggYWNjZXB0cyBhICJib29sZWFuIHByZWRpY2F0ZSIgYXJndW1lbnQuICBJdCBjb252ZXJ0cyBhbnkgUHl0aG9uCisgIHZhbHVlIGludG8gYW4gaW50ZWdlci0tMCBpZiBpdCBpcyAiZmFsc2UiLCBhbmQgMSBvdGhlcndpc2UuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTA6IFVzZSBtb25vdG9uaWMgY2xvY2sgaW5zdGVhZCBvZiBzeXN0ZW0gY2xvY2sgaW4gdGhlIHNjaGVkLAorICBzdWJwcm9jZXNzIGFuZCB0cmFjZSBtb2R1bGVzLgorCistIElzc3VlICMxNDk1ODogQ2hhbmdlIElETEUgc3lzdGF4IGhpZ2hsaWdodGluZyB0byByZWNvZ25pemUgYWxsIHN0cmluZyBhbmQKKyAgYnl0ZSBsaXRlcmFscyBzdXBwb3J0ZWQgaW4gUHl0aG9uIDMuMy4KKworLSBJc3N1ZSAjMTA5OTc6IFByZXZlbnQgYSBkdXBsaWNhdGUgZW50cnkgaW4gSURMRSdzICJSZWNlbnQgRmlsZXMiIG1lbnUuCisKKy0gSXNzdWUgIzE0NDQzOiBUZWxsIHJwbWJ1aWxkIHRvIHVzZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIFB5dGhvbiBpbgorICBiZGlzdF9ycG0uIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwuCisKKy0gSXNzdWUgIzE0OTI5OiBTdG9wIElkbGUgMy54IGZyb20gY2xvc2luZyBvbiBVbmljb2RlIGRlY29kZSBlcnJvcnMgd2hlbgorICBncmVwcGluZy4gUGF0Y2ggYnkgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzEyNTE1OiBlbWFpbCBub3cgcmVnaXN0ZXJzIGEgZGVmZWN0IGlmIGl0IGdldHMgdG8gRU9GIHdoaWxlIHBhcnNpbmcKKyAgYSBNSU1FIHBhcnQgd2l0aG91dCBzZWVpbmcgdGhlIGNsb3NpbmcgTUlNRSBib3VuZGFyeS4KKworLSBJc3N1ZSAjMTI1MTA6IEF0dGVtcHRpbmcgdG8gZ2V0IGludmFsaWQgdG9vbHRpcCBubyBsb25nZXIgY2xvc2VzIElkbGUuCisgIE90aGVyIHRvb2x0aXBzcyBoYXZlIGJlZW4gY29ycmVjdGVkIG9yIGltcHJvdmVkIGFuZCB0aGUgbnVtYmVyIG9mIHRlc3RzCisgIGhhcyBiZWVuIHRyaXBsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNjcyNTY4OiBlbWFpbCBub3cgYWx3YXlzIGRlY29kZXMgYmFzZTY0IHBheWxvYWRzLCBhZGRpbmcgcGFkZGluZyBhbmQKKyAgaWdub3Jpbmcgbm9uLWJhc2U2NC1hbHBoYWJldCBjaGFyYWN0ZXJzIGlmIG5lZWRlZCwgYW5kIHJlZ2lzdGVyaW5nIGRlZmVjdHMKKyAgZm9yIGFueSBzdWNoIHByb2JsZW1zLgorCistIElzc3VlICMxNDkyNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCB3aGVuIHRoZSBwYXJzZXIgZGVjaWRlcyB0aGF0IHRoZXJlCisgIGlzIGEgbWlzc2luZyBoZWFkZXIvYm9keSBzZXBhcmF0b3IgbGluZS4gIE1hbGZvcm1lZEhlYWRlckRlZmVjdCwgd2hpY2ggdGhlCisgIGV4aXN0aW5nIGNvZGUgd291bGQgbmV2ZXIgYWN0dWFsbHkgZ2VuZXJhdGUsIGlzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzEwMzY1OiBGaWxlIG9wZW4gZGlhbG9nIG5vdyB3b3JrcyBpbnN0ZWFkIG9mIGNyYXNoaW5nIGV2ZW4gd2hlbgorICB0aGUgcGFyZW50IHdpbmRvdyBpcyBjbG9zZWQgYmVmb3JlIHRoZSBkaWFsb2cuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICM4NzM5OiBVcGRhdGVkIHNtdHBkIHRvIHN1cHBvcnQgUkZDIDUzMjEsIGFuZCBhZGRlZCBzdXBwb3J0IGZvciB0aGUKKyAgUkZDIDE4NzAgU0laRSBleHRlbnNpb24uCisKKy0gSXNzdWUgIzY2NTE5NDogQWRkZWQgYSBsb2NhbHRpbWUgZnVuY3Rpb24gdG8gZW1haWwudXRpbHMgdG8gcHJvdmlkZSBhbgorICBhd2FyZSBsb2NhbCBkYXRldGltZSBmb3IgdXNlIGluIHNldHRpbmcgRGF0ZSBoZWFkZXJzLgorCistIElzc3VlICMxMjU4NjogQWRkZWQgbmV3IHByb3Zpc2lvbmFsIHBvbGljaWVzIHRoYXQgaW1wbGVtZW50IGNvbnZlbmllbnQKKyAgdW5pY29kZSBzdXBwb3J0IGZvciBlbWFpbCBoZWFkZXJzLiAgU2VlIFdoYXQncyBOZXcgZm9yIGRldGFpbHMuCisKKy0gSXNzdWUgIzE0NzMxOiBSZWZhY3RvcmVkIGVtYWlsIFBvbGljeSBmcmFtZXdvcmsgdG8gc3VwcG9ydCBmdWxsIGJhY2t3YXJkCisgIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4yIGJ5IGRlZmF1bHQgeWV0IGFsbG93IGZvciB0aGUgaW50cm9kdWN0aW9uIG9mCisgIG5ldyBmZWF0dXJlcyB0aHJvdWdoIG5ldyBwb2xpY2llcy4gIE5vdGUgdGhhdCBQb2xpY3kubXVzdF9iZV83Yml0IGlzIHJlbmFtZWQKKyAgdG8gY3RlX3R5cGUuCisKKy0gSXNzdWUgIzE0ODc2OiBVc2UgdXNlci1zZWxlY3RlZCBmb250IGZvciBoaWdobGlnaHQgY29uZmlndXJhdGlvbi4KKworLSBJc3N1ZSAjMTQ5MjA6IEZpeCB0aGUgaGVscCh1cmxsaWIucGFyc2UpIGZhaWx1cmUgb24gbG9jYWxlIEMgb24gdGVybWluYWxzLgorICBIYXZlIGFzY2lpIGNoYXJhY3RlcnMgaW4gaGVscC4KKworLSBJc3N1ZSAjMTQ1NDg6IE1ha2UgbXVsdGlwcm9jZXNzaW5nIGZpbmFsaXplcnMgY2hlY2sgcGlkIGJlZm9yZQorICBydW5uaW5nIHRvIGNvcGUgd2l0aCBwb3NzaWJpbGl0eSBvZiBnYyBydW5uaW5nIGp1c3QgYWZ0ZXIgZm9yay4KKworLSBJc3N1ZSAjMTQ4NjM6IFVwZGF0ZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiBvcy5mZG9wZW4oKSB0byByZWZsZWN0IHRoZQorICBmYWN0IHRoYXQgaXQncyBvbmx5IGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBvcGVuKCkgYW55bW9yZS4KKworLSBJc3N1ZSAjMTQwMzY6IEFkZCBhbiBhZGRpdGlvbmFsIGNoZWNrIHRvIHZhbGlkYXRlIHRoYXQgcG9ydCBpbiB1cmxwYXJzZSBkb2VzCisgIG5vdCBnbyBpbiBpbGxlZ2FsIHJhbmdlIGFuZCByZXR1cm5zIE5vbmUuCisKKy0gSXNzdWUgIzE0ODYyOiBBZGQgbWlzc2luZyBuYW1lcyB0byBvcy5fX2FsbF9fCisKKy0gSXNzdWUgIzE0ODc1OiBVc2UgZmxvYXQoJ2luZicpIGluc3RlYWQgb2YgZmxvYXQoJzFlNjY2NjYnKSBpbiB0aGUganNvbiBtb2R1bGUuCisKKy0gSXNzdWUgIzEzNTg1OiBBZGRlZCBjb250ZXh0bGliLkV4aXRTdGFjaworCistIFBFUCAzMTQ0LCBJc3N1ZSAjMTQ4MTQ6IEFkZGVkIHRoZSBpcGFkZHJlc3MgbW9kdWxlCisKKy0gSXNzdWUgIzE0NDI2OiBDb3JyZWN0IHRoZSBEYXRlIGZvcm1hdCBpbiBFeHBpcmVzIGF0dHJpYnV0ZSBvZiBTZXQtQ29va2llCisgIEhlYWRlciBpbiBDb29raWUucHkuCisKKy0gSXNzdWUgIzE0NTg4OiBUaGUgdHlwZXMgbW9kdWxlIG5vdyBwcm92aWRlIG5ld19jbGFzcygpIGFuZCBwcmVwYXJlX2NsYXNzKCkKKyAgZnVuY3Rpb25zIHRvIHN1cHBvcnQgUEVQIDMxMTUgY29tcGxpYW50IGR5bmFtaWMgY2xhc3MgY3JlYXRpb24uIFBhdGNoIGJ5CisgIERhbmllbCBVcmJhbiBhbmQgTmljayBDb2dobGFuLgorCistIElzc3VlICMxMzE1MjogQWxsb3cgdG8gc3BlY2lmeSBhIGN1c3RvbSB0YWJzaXplIGZvciBleHBhbmRpbmcgdGFicyBpbgorICB0ZXh0d3JhcC4gUGF0Y2ggYnkgSm9obiBGZXVlcnN0ZWluLgorCistIElzc3VlICMxNDcyMTogU2VuZCB0aGUgY29ycmVjdCAnQ29udGVudC1sZW5ndGg6IDAnIGhlYWRlciB3aGVuIHRoZSBib2R5IGlzIGFuCisgIGVtcHR5IHN0cmluZyAnJy4gSW5pdGlhbCBQYXRjaCBjb250cmlidXRlZCBieSBBcnZlIEtudWRzZW4uCisKKy0gSXNzdWUgIzE0MDcyOiBGaXggcGFyc2luZyBvZiAndGVsJyBVUklzIGluIHVybHBhcnNlIGJ5IG1ha2luZyB0aGUgY2hlY2sgZm9yCisgIHBvcnRzIHN0cmljdGVyLgorCistIElzc3VlICM5Mzc0OiBHZW5lcmljIHBhcnNpbmcgb2YgcXVlcnkgYW5kIGZyYWdtZW50IHBvcnRpb25zIG9mIHVybCBmb3IgYW55CisgIHNjaGVtZS4gU3VwcG9ydGVkIGJvdGggYnkgUkZDMzk4NiBhbmQgUkZDMjM5Ni4KKworLSBJc3N1ZSAjMTQ3OTg6IEZpeCB0aGUgZnVuY3Rpb25zIGluIHB5Y2xiciB0byByYWlzZSBhbiBJbXBvcnRFcnJvcgorICB3aGVuIHRoZSBmaXJzdCBwYXJ0IG9mIGEgZG90dGVkIG5hbWUgaXMgbm90IGEgcGFja2FnZS4gUGF0Y2ggYnkKKyAgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzEyMDk4OiBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyBub3cgc3RhcnRzIGNoaWxkIHByb2Nlc3NlcworICB1c2luZyB0aGUgc2FtZSBzeXMuZmxhZ3MgYXMgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgU2VyZ2V5IE1lemVudHNldi4KKworLSBJc3N1ZSAjMTMwMzE6IFNtYWxsIHNwZWVkLXVwIGZvciB0YXJmaWxlIHdoZW4gdW56aXBwaW5nIHRhcmZpbGVzLgorICBQYXRjaCBieSBKdXN0aW4gUGVlbC4KKworLSBJc3N1ZSAjMTQ3ODA6IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBub3cgaGFzIGEgYGBjYWRlZmF1bHRgYCBhcmd1bWVudAorICB0byB1c2UgdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUgc3RvcmUuICBJbml0aWFsIHBhdGNoIGJ5IEphbWVzIE9ha2xleS4KKworLSBJc3N1ZSAjMTQ4Mjk6IEZpeCBiaXNlY3QgYW5kIHJhbmdlKCkgaW5kZXhpbmcgd2l0aCBsYXJnZSBpbmRpY2VzCisgICg+PSAyICoqIDMyKSB1bmRlciA2NC1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTQ3MzI6IFRoZSBfY3N2IG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgIFBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTQ4MDk6IEFkZCBIVFRQIHN0YXR1cyBjb2RlcyBpbnRyb2R1Y2VkIGJ5IFJGQyA2NTg1IHRvIGh0dHAuc2VydmVyCisgIGFuZCBodHRwLmNsaWVudC4gUGF0Y2ggYnkgRXVuZ0p1biBZaS4KKworLSBJc3N1ZSAjMTQ3Nzc6IHRraW50ZXIgbWF5IHJldHVybiB1bmRlY29kZWQgVVRGLTggYnl0ZXMgYXMgYSBzdHJpbmcgd2hlbgorICBhY2Nlc3NpbmcgdGhlIFRrIGNsaXBib2FyZC4gIE1vZGlmeSBjbGlwYm9hZF9nZXQoKSB0byBmaXJzdCByZXF1ZXN0IHR5cGUKKyAgVVRGOF9TVFJJTkcgd2hlbiBubyBzcGVjaWZpYyB0eXBlIGlzIHJlcXVlc3RlZCBpbiBhbiBYMTEgd2luZG93aW5nCisgIGVudmlyb25tZW50LCBmYWxsaW5nIGJhY2sgdG8gdGhlIGN1cnJlbnQgZGVmYXVsdCB0eXBlIFNUUklORyBpZiB0aGF0IGZhaWxzLgorICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTQ3NzM6IEZpeCBvcy5md2FsaygpIGZhaWxpbmcgb24gZGFuZ2xpbmcgc3ltbGlua3MuCisKKy0gSXNzdWUgIzEyNTQxOiBCZSBsZW5pZW50IHdpdGggcXVvdGVzIGFyb3VuZCBSZWFsbSBmaWVsZCBvZiBIVFRQIEJhc2ljCisgIEF1dGhlbnRhdGlvbiBpbiB1cmxsaWIyLgorCistIElzc3VlICMxNDgwNzogbW92ZSB1bmRvY3VtZW50ZWQgdGFyZmlsZS5maWxlbW9kZSgpIHRvIHN0YXQuZmlsZW1vZGUoKSBhbmQgYWRkCisgIGRvYyBlbnRyeS4gQWRkIHRhcmZpbGUuZmlsZW1vZGUgYWxpYXMgd2l0aCBkZXByZWNhdGlvbiB3YXJuaW5nLgorCistIElzc3VlICMxMzgxNTogVGFyRmlsZS5leHRyYWN0ZmlsZSgpIG5vdyByZXR1cm5zIGlvLkJ1ZmZlcmVkUmVhZGVyIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NTMyOiBBZGQgYSBzZWN1cmVfY29tcGFyZSgpIGhlbHBlciB0byB0aGUgaG1hYyBtb2R1bGUsIHRvIG1pdGlnYXRlCisgIHRpbWluZyBhdHRhY2tzLiBQYXRjaCBieSBKb24gT2JlcmhlaWRlLgorCistIEFkZCBpbXBvcnRsaWIudXRpbC5yZXNvbHZlX25hbWUoKS4KKworLSBJc3N1ZSAjMTQzNjY6IFN1cHBvcnQgbHptYSBjb21wcmVzc2lvbiBpbiB6aXAgZmlsZXMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEzOTU5OiBJbnRyb2R1Y2UgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgYW5kIGRvY3VtZW50CisgIGltcC5maW5kX21vZHVsZS9sb2FkX21vZHVsZSBhcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxNDA4Mjogc2h1dGlsLmNvcHkyKCkgbm93IGNvcGllcyBleHRlbmRlZCBhdHRyaWJ1dGVzLCBpZiBwb3NzaWJsZS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk1OTogTWFrZSBpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIubG9hZF9tb2R1bGUoKS9nZXRfZmlsZW5hbWUoKSBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkgaGF2ZSB0aGVpciBzaW5nbGUKKyAgYXJndW1lbnQgYmUgb3B0aW9uYWwuIEFsbG93cyBmb3IgdGhlIHJlcGxhY2VtZW50IChhbmQgdGh1cyBkZXByZWNhdGlvbikgb2YKKyAgaW1wLmxvYWRfc291cmNlKCkvbG9hZF9wYWNrYWdlKCkvbG9hZF9jb21waWxlZCgpLgorCistIElzc3VlICMxMzk1OTogaW1wLmdldF9zdWZmaXhlcygpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIHRoZSBuZXcKKyAgYXR0cmlidXRlcyBvbiBpbXBvcnRsaWIubWFjaGluZXJ5OiBTT1VSQ0VfU1VGRklYRVMsIERFQlVHX0JZVEVDT0RFX1NVRkZJWEVTLAorICBPUFRJTUlaRURfQllURUNPREVfU1VGRklYRVMsIEJZVEVDT0RFX1NVRkZJWEVTLCBhbmQgRVhURU5TSU9OX1NVRkZJWEVTLiBUaGlzCisgIGxlZCB0byBhbiBpbmRpcmVjdCBkZXByZWNhdGlvbiBvZiBpbnNwZWN0LmdldG1vZHVsZWluZm8oKS4KKworLSBJc3N1ZSAjMTQ2NjI6IFByZXZlbnQgc2h1dGlsIGZhaWx1cmVzIG9uIE9TIFggd2hlbiBkZXN0aW5hdGlvbiBkb2VzIG5vdAorICBzdXBwb3J0IGNoZmxhZyBvcGVyYXRpb25zLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDE1NzogRml4IHRpbWUuc3RycHRpbWUgZmFpbGluZyB3aXRob3V0IGEgeWVhciBvbiBGZWJydWFyeSAyOXRoLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE0NzUzOiBNYWtlIG11bHRpcHJvY2Vzc2luZydzIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIHRpbWVvdXRzCisgIHRoZSBzYW1lIGFzIGl0IHdhcyBpbiBQeXRob24gMy4yLgorCistIElzc3VlICMxNDU4MzogRml4IGltcG9ydGxpYiBidWcgd2hlbiBhIHBhY2thZ2UncyBfX2luaXRfXy5weSB3b3VsZCBmaXJzdAorICBpbXBvcnQgb25lIG9mIGl0cyBtb2R1bGVzIHRoZW4gcmFpc2UgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzE0NzQxOiBGaXggbWlzc2luZyBzdXBwb3J0IGZvciBFbGxpcHNpcyAoJy4uLicpIGluIHBhcnNlciBtb2R1bGUuCisKKy0gSXNzdWUgIzE0Njk3OiBGaXggbWlzc2luZyBzdXBwb3J0IGZvciBzZXQgZGlzcGxheXMgYW5kIHNldCBjb21wcmVoZW5zaW9ucyBpbgorICBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDcwMTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgJ3JhaXNlIC4uLiBmcm9tJyBpbiBwYXJzZXIgbW9kdWxlLgorCistIEFkZCBzdXBwb3J0IGZvciB0aW1lb3V0cyB0byB0aGUgYWNxdWlyZSgpIG1ldGhvZHMgb2YKKyAgbXVsdGlwcm9jZXNzaW5nJ3MgbG9jay9zZW1hcGhvcmUvY29uZGl0aW9uIHByb3hpZXMuCisKKy0gSXNzdWUgIzEzOTg5OiBBZGQgc3VwcG9ydCBmb3IgdGV4dCBtb2RlIHRvIGd6aXAub3BlbigpLgorCistIElzc3VlICMxNDEyNzogVGhlIG9zLnN0YXQoKSByZXN1bHQgb2JqZWN0IG5vdyBwcm92aWRlcyB0aHJlZSBhZGRpdGlvbmFsCisgIGZpZWxkczogc3RfY3RpbWVfbnMsIHN0X210aW1lX25zLCBhbmQgc3RfYXRpbWVfbnMsIHByb3ZpZGluZyB0aG9zZSB0aW1lcyBhcyBhbgorICBpbnRlZ2VyIHdpdGggbmFub3NlY29uZCByZXNvbHV0aW9uLiAgVGhlIGZ1bmN0aW9ucyBvcy51dGltZSgpLCBvcy5sdXRpbWVzKCksCisgIGFuZCBvcy5mdXRpbWVzKCkgbm93IGFjY2VwdCBhIG5ldyBwYXJhbWV0ZXIsIG5zLCB3aGljaCBhY2NlcHRzIG10aW1lIGFuZCBhdGltZQorICBhcyBpbnRlZ2VycyB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4KKworLSBJc3N1ZSAjMTQxMjcgYW5kICMxMDE0ODogc2h1dGlsLmNvcHlzdGF0IG5vdyBwcmVzZXJ2ZXMgZXhhY3QgbXRpbWUgYW5kIGF0aW1lCisgIG9uIGZpbGVzeXN0ZW1zIHByb3ZpZGluZyBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY5NTogQnJpbmcgVG9vbHMvcGFyc2VyL3VucGFyc2UucHkgc3VwcG9ydCB1cCB0byBkYXRlIHdpdGgKKyAgdGhlIFB5dGhvbiAzLjMgR3JhbW1hci4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE0NDcyOiBVcGRhdGUgLmdpdGlnbm9yZS4gUGF0Y2ggYnkgTWF0ZWogQ2VwbC4KKworLSBVcGdyYWRlIFdpbmRvd3MgbGlicmFyeSB2ZXJzaW9uczogYnppcCAxLjAuNiwgT3BlblNTTCAxLjAuMWMuCisKKy0gSXNzdWUgIzE0NjkzOiBVbmRlciBub24tV2luZG93cyBwbGF0Zm9ybXMsIGhhc2hsaWIncyBmYWxsYmFjayBtb2R1bGVzIGFyZQorICBhbHdheXMgY29tcGlsZWQsIGV2ZW4gaWYgT3BlblNTTCBpcyBwcmVzZW50IGF0IGJ1aWxkIHRpbWUuCisKKy0gSXNzdWUgIzEzMjEwOiBXaW5kb3dzIGJ1aWxkIG5vdyB1c2VzIFZTMjAxMCwgcG9ydGVkIGZyb20gVlMyMDA4LgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0NTg4OiBUaGUgbGFuZ3VhZ2UgcmVmZXJlbmNlIG5vdyBhY2N1cmF0ZWx5IGRvY3VtZW50cyB0aGUgUHl0aG9uIDMKKyAgY2xhc3MgZGVmaW5pdGlvbiBwcm9jZXNzLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4uCisKKy0gSXNzdWUgIzE0OTQzOiBDb3JyZWN0IGEgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZSBmb3Igd2lucmVnLk9wZW5LZXkKKyAgYW5kIGNvcnJlY3RseSBsaXN0IHRoZSBhcmd1bWVudCBuYW1lcyBpbiB0aGUgZnVuY3Rpb24ncyBleHBsYW5hdGlvbi4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDEtTWF5LTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY5OTogRml4IGNhbGxpbmcgdGhlIGNsYXNzbWV0aG9kIGRlc2NyaXB0b3IgZGlyZWN0bHkuCisKKy0gSXNzdWUgIzE0NDMzOiBQcmV2ZW50IG1zdmNydCBjcmFzaCBpbiBpbnRlcmFjdGl2ZSBwcm9tcHQgd2hlbiBzdGRpbiBpcyBjbG9zZWQuCisKKy0gSXNzdWUgIzE0NTIxOiBNYWtlIHJlc3VsdCBvZiBmbG9hdCgnbmFuJykgYW5kIGZsb2F0KCctbmFuJykgbW9yZSBjb25zaXN0ZW50CisgIGFjcm9zcyBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE0NjQ2OiBfX2ltcG9ydF9fKCkgc2V0cyBfX2xvYWRlcl9fIGlmIHRoZSBsb2FkZXIgZGlkIG5vdC4KKworLSBJc3N1ZSAjMTQ2MDU6IE5vIGxvbmdlciBoYXZlIGltcGxpY2l0IGVudHJpZXMgaW4gc3lzLm1ldGFfcGF0aC4gSWYKKyAgc3lzLm1ldGFfcGF0aCBpcyBmb3VuZCB0byBiZSBlbXB0eSwgcmFpc2UgSW1wb3J0V2FybmluZy4KKworLSBJc3N1ZSAjMTQ2MDU6IE5vIGxvbmdlciBoYXZlIGltcGxpY2l0IGVudHJpZXMgaW4gc3lzLnBhdGhfaG9va3MuIElmCisgIHN5cy5wYXRoX2hvb2tzIGlzIGZvdW5kIHRvIGJlIGVtcHR5LCBhIHdhcm5pbmcgd2lsbCBiZSByYWlzZWQuIE5vbmUgaXMgbm93CisgIGluc2VydGVkIGludG8gc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUgaWYgbm8gZmluZGVyIHdhcyBkaXNjb3ZlcmVkLiBUaGlzIGFsc28KKyAgbWVhbnMgaW1wLk51bGxJbXBvcnRlciBpcyBubyBsb25nZXIgaW1wbGljaXRseSB1c2VkLgorCistIElzc3VlICMxMzkwMzogSW1wbGVtZW50IFBFUCA0MTIuIEluZGl2aWR1YWwgZGljdGlvbmFyeSBpbnN0YW5jZXMgY2FuIG5vdyBzaGFyZQorICB0aGVpciBrZXlzIHdpdGggb3RoZXIgZGljdGlvbmFyaWVzLiBDbGFzc2VzIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgdG8gc2hhcmUKKyAgdGhlaXIgaW5zdGFuY2UgZGljdGlvbmFyeSBrZXlzIGZvciBpbXByb3ZlZCBtZW1vcnkgYW5kIHBlcmZvcm1hbmNlLgorCistIElzc3VlICMxMTYwMyAoYWdhaW4pOiBTZXR0aW5nIF9fcmVwcl9fIHRvIF9fc3RyX18gbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvcgorICB3aGVuIHJlcHIoKSBvciBzdHIoKSBpcyBjYWxsZWQgb24gc3VjaCBhbiBvYmplY3QuCisKKy0gSXNzdWUgIzE0NjU4OiBGaXggYmluZGluZyBhIHNwZWNpYWwgbWV0aG9kIHRvIGEgYnVpbHRpbiBpbXBsZW1lbnRhdGlvbiBvZiBhCisgIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBkaWZmZXJlbnQgbmFtZS4KKworLSBJc3N1ZSAjMTQ2MzA6IEZpeCBhIG1lbW9yeSBhY2Nlc3MgYnVnIGZvciBpbnN0YW5jZXMgb2YgYSBzdWJjbGFzcyBvZiBpbnQKKyAgd2l0aCB2YWx1ZSAwLgorCistIElzc3VlICMxNDMzOTogU3BlZWQgaW1wcm92ZW1lbnRzIHRvIGJpbiwgb2N0IGFuZCBoZXggZnVuY3Rpb25zLiAgUGF0Y2ggYnkKKyAgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQwOTg6IE5ldyBmdW5jdGlvbnMgUHlFcnJfR2V0RXhjSW5mbyBhbmQgUHlFcnJfU2V0RXhjSW5mby4KKyAgUGF0Y2ggYnkgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTQzODU6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgYSBjdXN0b20gdHlwZSBmb3IgdGhlIF9fYnVpbHRpbnNfXworICBuYW1lc3BhY2UsIGluc3RlYWQgb2YgYSBkaWN0LiBJdCBjYW4gYmUgdXNlZCBmb3Igc2FuZGJveGluZyBmb3IgZXhhbXBsZS4KKyAgUmFpc2UgYWxzbyBhIE5hbWVFcnJvciBpbnN0ZWFkIG9mIEltcG9ydEVycm9yIGlmIF9fYnVpbGRfY2xhc3NfXyBuYW1lIGlmIG5vdAorICBmb3VuZCBpbiBfX2J1aWx0aW5zX18uCisKKy0gSXNzdWUgIzEyNTk5OiBCZSBtb3JlIHN0cmljdCBpbiBhY2NlcHRpbmcgTm9uZSBjb21wYXJlZCB0byBhIGZhbHNlLWxpa2UKKyAgb2JqZWN0IGZvciBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlciBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLgorCistIElzc3VlICMxNDYxMjogRml4IGp1bXBpbmcgYXJvdW5kIHdpdGggYmxvY2tzIGJ5IHNldHRpbmcgZl9saW5lbm8uCisKKy0gSXNzdWUgIzE0NTkyOiBBdHRlbXB0aW5nIGEgcmVsYXRpdmUgaW1wb3J0IHcvbyBfX3BhY2thZ2VfXyBvciBfX25hbWVfXyBzZXQgaW4KKyAgZ2xvYmFscyByYWlzZXMgYSBLZXlFcnJvci4KKworLSBJc3N1ZSAjMTQ2MDc6IEZpeCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIHdoaWNoIHN0YXJ0ZWQgd2l0aCBgYF9fYGAuCisKKy0gSXNzdWUgIzEwODU0OiBUaGUgSW1wb3J0RXJyb3IgcmFpc2VkIHdoZW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSBvbiBXaW5kb3dzCisgIGZhaWxzIHRvIGltcG9ydCBub3cgdXNlcyB0aGUgbmV3IHBhdGggYW5kIG5hbWUgYXR0cmlidXRlcyBmcm9tCisgIElzc3VlICMxNTU5NTQ5LgorCistIElzc3VlICMxMzg4OTogQ2hlY2sgYW5kIChpZiBuZWNlc3NhcnkpIHNldCBGUFUgY29udHJvbCB3b3JkIGJlZm9yZSBjYWxsaW5nCisgIGFueSBvZiB0aGUgZHRvYS5jIHN0cmluZyA8LT4gZmxvYXQgY29udmVyc2lvbiBmdW5jdGlvbnMsIG9uIE1TVkMgYnVpbGRzIG9mCisgIFB5dGhvbi4gIFRoaXMgZml4ZXMgaXNzdWVzIHdoZW4gZW1iZWRkaW5nIFB5dGhvbiBpbiBhIERlbHBoaSBhcHAuCisKKy0gX19pbXBvcnRfXygpIG5vdyBtYXRjaGVzIFBFUCAzMjggYW5kIGRvY3VtZW50YXRpb24gYnkgZGVmYXVsdGluZyAnaW5kZXgnIHRvIDAKKyAgaW5zdGVhZCBvZiAtMSBhbmQgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgbmVnYXRpdmUgdmFsdWVzLgorCistIElzc3VlICMyMzc3OiBNYWtlIGltcG9ydGxpYiB0aGUgaW1wbGVtZW50YXRpb24gb2YgX19pbXBvcnRfXygpLgorCistIElzc3VlICMxNTU5NTQ5OiBJbXBvcnRFcnJvciBub3cgaGFzICduYW1lJyBhbmQgJ3BhdGgnIGF0dHJpYnV0ZXMgdGhhdCBhcmUgc2V0CisgIHVzaW5nIGtleXdvcmQgYXJndW1lbnRzIHRvIGl0cyBjb25zdHJ1Y3Rvci4gVGhleSBhcmUgY3VycmVudGx5IG5vdCBzZXQgYnkKKyAgaW1wb3J0IGFzIHRoZXkgYXJlIG1lYW50IGZvciB1c2UgYnkgaW1wb3J0bGliLgorCistIElzc3VlICMxNDQ3NDogU2F2ZSBhbmQgcmVzdG9yZSBleGNlcHRpb24gc3RhdGUgaW4gdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoKQorICB3aGlsZSB3cml0aW5nIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHRocmVhZCBsZWF2ZXMgYSB1bmhhbmRsZWQgZXhjZXB0aW9uLgorCistIElzc3VlICMxMzAxOTogRml4IHBvdGVudGlhbCByZWZlcmVuY2UgbGVha3MgaW4gYnl0ZWFycmF5LmV4dGVuZCgpLiAgUGF0Y2gKKyAgYnkgU3VtYW4gU2FoYS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDc2ODogb3MucGF0aC5leHBhbmR1c2VyKCd+L2EnKSBkb2Vzbid0IHdvcmtzIGNvcnJlY3RseSB3aGVuIEhPTUUgaXMgJy8nLgorCistIElzc3VlICMxNDM3MTogU3VwcG9ydCBiemlwMiBpbiB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEzMTgzOiBGaXggcGRiIHNraXBwaW5nIGZyYW1lcyBhZnRlciBoaXR0aW5nIGEgYnJlYWtwb2ludCBhbmQgcnVubmluZworICBzdGVwLiAgUGF0Y2ggYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzE0Njk2OiBGaXggcGFyc2VyIG1vZHVsZSB0byB1bmRlcnN0YW5kICdub25sb2NhbCcgZGVjbGFyYXRpb25zLgorCistIElzc3VlICMxMDk0MTogRml4IGltYXBsaWIuSW50ZXJuYWxkYXRlMnR1cGxlIHRvIHByb2R1Y2UgY29ycmVjdCByZXN1bHQgbmVhcgorICB0aGUgRFNUIHRyYW5zaXRpb24uICBQYXRjaCBieSBKb2UgUGV0ZXJzb24uCisKKy0gSXNzdWUgIzkxNTQ6IEZpeCBwYXJzZXIgbW9kdWxlIHRvIHVuZGVyc3RhbmQgZnVuY3Rpb24gYW5ub3RhdGlvbnMuCisKKy0gSXNzdWUgIzYwODU6IEluIGh0dHAuc2VydmVyLnB5IFNpbXBsZUhUVFBTZXJ2ZXIuYWRkcmVzc19zdHJpbmcgcmV0dXJucyB0aGUKKyAgY2xpZW50IGlwIGFkZHJlc3MgaW5zdGVhZCBjbGllbnQgaG9zdG5hbWUuIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTQzMDk6IERlcHJlY2F0ZSB0aW1lLmNsb2NrKCksIHVzZSB0aW1lLnBlcmZfY291bnRlcigpIG9yCisgIHRpbWUucHJvY2Vzc190aW1lKCkgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTQ0Mjg6IEltcGxlbWVudCB0aGUgUEVQIDQxOC4gQWRkIHRpbWUuZ2V0X2Nsb2NrX2luZm8oKSwKKyAgdGltZS5wZXJmX2NvdW50ZXIoKSBhbmQgdGltZS5wcm9jZXNzX3RpbWUoKSBmdW5jdGlvbnMsIGFuZCByZW5hbWUKKyAgdGltZS5zdGVhZHkoKSB0byB0aW1lLm1vbm90b25pYygpLgorCistIElzc3VlICMxNDY0NjogaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIoKSBub3cgc2V0cyBfX2xvYWRlcl9fIGFuZAorICBfX3BhY2thZ2VfXyAod2hlbiBwb3NzaWJsZSkuCisKKy0gSXNzdWUgIzE0NjY0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIEB1bml0dGVzdC5za2lwe0lmLFVubGVzc30gb24gYQorICB0ZXN0IGNsYXNzIHRoYXQgZG9lc24ndCBpbmhlcml0IGZyb20gVGVzdENhc2UgKGkuZS4gYSBtaXhpbikuCisKKy0gSXNzdWUgIzQ4OTI6IG11bHRpcHJvY2Vzc2luZyBDb25uZWN0aW9ucyBjYW4gbm93IGJlIHRyYW5zZmVycmVkIG92ZXIKKyAgbXVsdGlwcm9jZXNzaW5nIENvbm5lY3Rpb25zLiAgUGF0Y2ggYnkgUmljaGFyZCBPdWRrZXJrIChzYnQpLgorCistIElzc3VlICMxNDE2MDogVGFyRmlsZS5leHRyYWN0ZmlsZSgpIGZhaWxlZCB0byByZXNvbHZlIHN5bWJvbGljIGxpbmtzIHdoZW4KKyAgdGhlIGxpbmtzIHdlcmUgbm90IGxvY2F0ZWQgaW4gYW4gYXJjaGl2ZSBzdWJkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE0NjM4OiBweWRvYyBub3cgdHJlYXRzIG5vbi1zdHJpbmcgX19uYW1lX18gdmFsdWVzIGFzIGlmIHRoZXkKKyAgd2VyZSBtaXNzaW5nLCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEzNjg0OiBGaXggaHR0cGxpYiB0dW5uZWwgaXNzdWUgb2YgaW5maW5pdGUgbG9vcHMgZm9yIGNlcnRhaW4gc2l0ZXMKKyAgd2hpY2ggc2VuZCBFT0Ygd2l0aG91dCB0cmFpbGluZyBcclxuLgorCistIElzc3VlICMxNDYwNTogQWRkIGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlciwgaW1wb3J0bGliLm1hY2hpbmVyeS4oRmlsZUZpbmRlciwKKyAgU291cmNlRmlsZUxvYWRlciwgU291cmNlbGVzc0ZpbGVMb2FkZXIsIEV4dGVuc2lvbkZpbGVMb2FkZXIpLgorCistIElzc3VlICMxMzk1OTogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkvc291cmNlX2Zyb21fY2FjaGUoKSBub3cgZm9sbG93CisgIG9zLnBhdGguam9pbigpL3NwbGl0KCkgc2VtYW50aWNzIGZvciBwYXRoIG1hbmlwdWxhdGlvbiBpbnN0ZWFkIG9mIGl0cyBwcmlvciwKKyAgY3VzdG9tIHNlbWFudGljcyBvZiBjYXJpbmcgdGhlIHJpZ2h0LW1vc3QgcGF0aCBzZXBhcmF0b3IgZm9yd2FyZCBpbiBwYXRoCisgIGpvaW5pbmcuCisKKy0gSXNzdWUgIzIxOTM6IEFsbG93ICI6IiBjaGFyYWN0ZXIgaW4gQ29va2llIE5BTUUgdmFsdWVzLgorCistIElzc3VlICMxNDYyOTogdG9rZW5pemVyLmRldGVjdF9lbmNvZGluZyB3aWxsIHNwZWNpZnkgdGhlIGZpbGVuYW1lIGluIHRoZQorICBTeW50YXhFcnJvciBleGNlcHRpb24gaWYgZm91bmQgYXQgcmVhZGxpbmUuX19zZWxmX18ubmFtZS4KKworLSBJc3N1ZSAjMTQ2Mjk6IFJhaXNlIFN5bnRheEVycm9yIGluIHRva2VuaXplci5kZXRlY3RfZW5jb2RpbmcgaWYgdGhlCisgIGZpcnN0IHR3byBsaW5lcyBoYXZlIG5vbi1VVEYtOCBjaGFyYWN0ZXJzIHdpdGhvdXQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0MzA4OiBGaXggYW4gZXhjZXB0aW9uIHdoZW4gYSAiZHVtbXkiIHRocmVhZCBpcyBpbiB0aGUgdGhyZWFkaW5nCisgIG1vZHVsZSdzIGFjdGl2ZSBsaXN0IGFmdGVyIGEgZm9yaygpLgorCistIElzc3VlICMxMTc1MDogVGhlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBzY2F0dGVyZWQgaW4gdGhlIF9zdWJwcm9jZXNzIGFuZAorICBfbXVsdGlwcm9jZXNzaW5nLndpbjMyIG1vZHVsZXMgbm93IGxpdmUgaW4gYSBzaW5nbGUgbW9kdWxlICJfd2luYXBpIi4KKyAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDA4NzogbXVsdGlwcm9jZXNzaW5nOiBhZGQgQ29uZGl0aW9uLndhaXRfZm9yKCkuIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQ1Mzg6IEhUTUxQYXJzZXIgY2FuIG5vdyBwYXJzZSBjb3JyZWN0bHkgc3RhcnQgdGFncyB0aGF0IGNvbnRhaW4KKyAgYSBiYXJlICcvJy4KKworLSBJc3N1ZSAjMTQ0NTI6IFN5c0xvZ0hhbmRsZXIgbm8gbG9uZ2VyIGluc2VydHMgYSBVVEYtOCBCT00gaW50byB0aGUgbWVzc2FnZS4KKworLSBJc3N1ZSAjMTQzODY6IEV4cG9zZSB0aGUgZGljdF9wcm94eSBpbnRlcm5hbCB0eXBlIGFzIHR5cGVzLk1hcHBpbmdQcm94eVR5cGUuCisKKy0gSXNzdWUgIzEzOTU5OiBNYWtlIGltcC5yZWxvYWQoKSBhbHdheXMgdXNlIGEgbW9kdWxlJ3MgX19sb2FkZXJfXyB0byBwZXJmb3JtCisgIHRoZSByZWxvYWQuCisKKy0gSXNzdWUgIzEzOTU5OiBBZGQgaW1wLnB5IGFuZCByZW5hbWUgdGhlIGJ1aWx0LWluIG1vZHVsZSB0byBfaW1wLCBhbGxvd2luZyBmb3IKKyAgcmUtaW1wbGVtZW50aW5nIHBhcnRzIG9mIHRoZSBtb2R1bGUgaW4gcHVyZSBQeXRob24uCisKKy0gSXNzdWUgIzEzNDk2OiBGaXggcG90ZW50aWFsIG92ZXJmbG93IGluIGJpc2VjdC5iaXNlY3QgYWxnb3JpdGhtIHdoZW4gYXBwbGllZAorICB0byBhIGNvbGxlY3Rpb24gb2Ygc2l6ZSA+IHN5cy5tYXhzaXplIC8gMi4KKworLSBIYXZlIGltcG9ydGxpYiB0YWtlIGFkdmFudGFnZSBvZiBJbXBvcnRFcnJvcidzIG5ldyAnbmFtZScgYW5kICdwYXRoJworICBhdHRyaWJ1dGVzLgorCistIElzc3VlICMxNDM5OTogemlwZmlsZSBub3cgcmVjb2duaXplcyB0aGF0IHRoZSBhcmNoaXZlIGhhcyBiZWVuIG1vZGlmaWVkIGV2ZW4KKyAgaWYgb25seSB0aGUgY29tbWVudCBpcyBjaGFuZ2VkLiAgSW4gYWRkaXRpb24sIHRoZSBUeXBlRXJyb3IgdGhhdCByZXN1bHRzIGZyb20KKyAgdHJ5aW5nIHRvIHNldCBhIG5vbi1iaW5hcnkgdmFsdWUgYXMgYSBjb21tZW50IGlzIG5vdyByYWlzZWQgYXQgdGhlIHRpbWUKKyAgdGhlIGNvbW1lbnQgaXMgc2V0IHJhdGhlciB0aGFuIGF0IHRoZSB0aW1lIHRoZSB6aXBmaWxlIGlzIHdyaXR0ZW4uCisKKy0gdHJhY2UuQ292ZXJhZ2VSZXN1bHRzLmlzX2lnbm9yZWRfZmlsZW5hbWUoKSBub3cgaWdub3JlcyBhbnkgbmFtZSB0aGF0IHN0YXJ0cworICB3aXRoICI8IiBhbmQgZW5kcyB3aXRoICI+IiBpbnN0ZWFkIG9mIHNwZWNpYWwtY2FzaW5nICI8c3RyaW5nPiIgYW5kCisgICI8ZG9jdGVzdCAiLgorCistIElzc3VlICMxMjUzNzogVGhlIG1haWxib3ggbW9kdWxlIG5vIGxvbmdlciBkZXBlbmRzIG9uIGtub3dsZWRnZSBvZiBpbnRlcm5hbAorICBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIHRoZSBlbWFpbCBwYWNrYWdlIE1lc3NhZ2Ugb2JqZWN0LgorCistIElzc3VlICM3OTc4OiBzb2NrZXRzZXJ2ZXIgbm93IHJlc3RhcnRzIHRoZSBzZWxlY3QoKSBjYWxsIHdoZW4gRUlOVFIgaXMKKyAgcmV0dXJuZWQuICBUaGlzIGF2b2lkcyBjcmFzaGluZyB0aGUgc2VydmVyIGxvb3Agd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZC4KKyAgUGF0Y2ggYnkgSmVyenkgS296ZXJhLgorCistIElzc3VlICMxNDUyMjogQXZvaWQgZHVwbGljYXRpbmcgc29ja2V0IGhhbmRsZXMgaW4gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uCisgIFBhdGNoIGJ5IHNidC4KKworLSBEb24ndCBQeV9ERUNSRUYgTlVMTCB2YXJpYWJsZSBpbiBpby5JbmNyZW1lbnRhbE5ld2xpbmVEZWNvZGVyLgorCistIElzc3VlICM4NTE1OiBTZXQgX19maWxlX18gd2hlbiBydW4gZmlsZSBpbiBJRExFLgorICBJbml0aWFsIHBhdGNoIGJ5IEJydWNlIEZyZWRlcmlrc2VuLgorCistIElzc3VlICMxNDQ5NjogRml4IHdyb25nIG5hbWUgaW4gaWRsZWxpYi90YWJiZWRwYWdlcy5weS4KKyAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICMzMDMzOiBBZGQgZGlzcGxheW9mIHBhcmFtZXRlciB0byB0a2ludGVyIGZvbnQuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxNDQ4MjogUmFpc2UgYSBWYWx1ZUVycm9yLCBub3QgYSBOYW1lRXJyb3IsIHdoZW4gdHJ5aW5nIHRvIGNyZWF0ZQorICBhIG11bHRpcHJvY2Vzc2luZyBDbGllbnQgb3IgTGlzdGVuZXIgd2l0aCBhbiBBRl9VTklYIHR5cGUgYWRkcmVzcyB1bmRlcgorICBXaW5kb3dzLiAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICM4MDIzMTA6IEdlbmVyYXRlIGFsd2F5cyB1bmlxdWUgdGtpbnRlciBmb250IG5hbWVzIGlmIG5vdCBkaXJlY3RseSBwYXNzZWQuCisKKy0gSXNzdWUgIzE0MTUxOiBSYWlzZSBhIFZhbHVlRXJyb3IsIG5vdCBhIE5hbWVFcnJvciwgd2hlbiB0cnlpbmcgdG8gY3JlYXRlCisgIGEgbXVsdGlwcm9jZXNzaW5nIENsaWVudCBvciBMaXN0ZW5lciB3aXRoIGFuIEFGX1BJUEUgdHlwZSBhZGRyZXNzIHVuZGVyCisgIG5vbi1XaW5kb3dzIHBsYXRmb3Jtcy4gIFBhdGNoIGJ5IFBvcGEgQ2xhdWRpdS4KKworLSBJc3N1ZSAjMTQ0OTM6IFVzZSBndmZzLW9wZW4gb3IgeGRnLW9wZW4gaW4gd2ViYnJvd3Nlci4KKworQnVpbGQKKy0tLS0tCisKKy0gIm1ha2UgdG91Y2giIHdpbGwgbm93IHRvdWNoIGdlbmVyYXRlZCBmaWxlcyB0aGF0IGFyZSBjaGVja2VkIGludG8gTWVyY3VyaWFsLAorICBhZnRlciBhICJoZyB1cGRhdGUiIHdoaWNoIGZhaWxlZCB0byBicmluZyB0aGUgdGltZXN0YW1wcyBpbnRvIHRoZSByaWdodCBvcmRlci4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0MDI2OiBJbiB0ZXN0X2NtZF9saW5lX3NjcmlwdCwgY2hlY2sgdGhhdCBzeXMuYXJndiBpcyBwb3B1bGF0ZWQKKyAgY29ycmVjdGx5IGZvciB0aGUgdmFyaW91cyBpbnZvY2F0aW9uIGFwcHJvYWNoZXMgKFBhdGNoIGJ5IEphc29uIFllbykKKworLSBJc3N1ZSAjMTQwMzI6IEZpeCBpbmNvcnJlY3QgdmFyaWFibGUgbmFtZSBpbiB0ZXN0X2NtZF9saW5lX3NjcmlwdCBkZWJ1Z2dpbmcKKyAgbWVzc2FnZSAoUGF0Y2ggYnkgSmFzb24gWWVvKQorCistIElzc3VlICMxNDU4OTogVXBkYXRlIGNlcnRpZmljYXRlIGNoYWluIGZvciBzaGEyNTYudGJzLWludGVybmV0LmNvbSwgZml4aW5nCisgIGEgdGVzdCBmYWlsdXJlIGluIHRlc3Rfc3NsLgorCistIElzc3VlICMxNDM1NTogUmVncnRlc3Qgbm93IHN1cHBvcnRzIHRoZSBzdGFuZGFyZCB1bml0dGVzdCB0ZXN0IGxvYWRpbmcsIGFuZAorICB3aWxsIHVzZSBpdCBpZiBhIHRlc3QgZmlsZSBjb250YWlucyBubyBgdGVzdF9tYWluYCBtZXRob2QuCisKK1Rvb2xzIC8gRGVtb3MKKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMzU2MTogVGhlIFdpbmRvd3MgaW5zdGFsbGVyIG5vdyBoYXMgYW4gb3B0aW9uLCBvZmYgYnkgZGVmYXVsdCwgZm9yCisgIHBsYWNpbmcgdGhlIFB5dGhvbiBpbnN0YWxsYXRpb24gaW50byB0aGUgc3lzdGVtICJQYXRoIiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworLSBJc3N1ZSAjMTMxNjU6IHN0cmluZ2JlbmNoIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIFRvb2xzL3N0cmluZ2JlbmNoIGZvbGRlci4KKyAgSXQgdXNlZCB0byBsaXZlIGluIGl0cyBvd24gU1ZOIHByb2plY3QuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLUFwci0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTY4MzM2ODogb2JqZWN0Ll9fbmV3X18gYW5kIG9iamVjdC5fX2luaXRfXyByYWlzZSBhIFR5cGVFcnJvciBpZiB0aGV5CisgIGFyZSBwYXNzZWQgYXJndW1lbnRzIGFuZCB0aGVpciBjb21wbGVtZW50YXJ5IG1ldGhvZCBpcyBub3Qgb3ZlcnJpZGRlbi4KKworLSBJc3N1ZSAjMTQzNzg6IEZpeCBjb21waWxpbmcgYXN0LkltcG9ydEZyb20gbm9kZXMgd2l0aCBhICJfX2Z1dHVyZV9fIiBzdHJpbmcgYXMKKyAgdGhlIG1vZHVsZSBuYW1lIHRoYXQgd2FzIG5vdCBpbnRlcm5lZC4KKworLSBJc3N1ZSAjMTQzMzE6IFVzZSBzaWduaWZpY2FudGx5IGxlc3Mgc3RhY2sgc3BhY2Ugd2hlbiBpbXBvcnRpbmcgbW9kdWxlcyBieQorICBhbGxvY2F0aW5nIHBhdGggYnVmZmVycyBvbiB0aGUgaGVhcCBpbnN0ZWFkIG9mIHRoZSBzdGFjay4KKworLSBJc3N1ZSAjMTQzMzQ6IFByZXZlbnQgaW4gYSBzZWdmYXVsdCBpbiB0eXBlLl9fZ2V0YXR0cmlidXRlX18gd2hlbiBpdCB3YXMgbm90CisgIHBhc3NlZCBzdHJpbmdzLgorCistIElzc3VlICMxNDY5NjI5OiBBbGxvdyBjeWNsZXMgdGhyb3VnaCBhbiBvYmplY3QncyBfX2RpY3RfXyBzbG90IHRvIGJlCisgIGNvbGxlY3RlZC4gKEZvciBleGFtcGxlIGlmIGBgeC5fX2RpY3RfXyBpcyB4YGApLgorCistIElzc3VlICMxNDIwNTogZGljdCBsb29rdXAgcmFpc2VzIGEgUnVudGltZUVycm9yIGlmIHRoZSBkaWN0IGlzIG1vZGlmaWVkCisgIGR1cmluZyBhIGxvb2t1cC4KKworLSBJc3N1ZSAjMTQyMjA6IFdoZW4gYSBnZW5lcmF0b3IgaXMgZGVsZWdhdGluZyB0byBhbm90aGVyIGl0ZXJhdG9yIHdpdGggdGhlCisgIHlpZWxkIGZyb20gc3ludGF4LCBpdCBuZWVkcyB0byBoYXZlIGl0cyBgYGdpX3J1bm5pbmdgYCBmbGFnIHNldCB0byBUcnVlLgorCistIElzc3VlICMxNDQzNTogUmVtb3ZlIGRlZGljYXRlZCBibG9jayBhbGxvY2F0b3IgZnJvbSBmbG9hdG9iamVjdC5jIGFuZCByZWx5CisgIG9uIHRoZSBQeU9iamVjdF9NYWxsb2MoKSBhcGkgbGlrZSBhbGwgb3RoZXIgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ0NzE6IEZpeCBhIHBvc3NpYmxlIGJ1ZmZlciBvdmVycnVuIGluIHRoZSB3aW5yZWcgbW9kdWxlLgorCistIElzc3VlICMxNDI4ODogQWxsb3cgdGhlIHNlcmlhbGl6YXRpb24gb2YgYnVpbHRpbiBpdGVyYXRvcnMKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNDMwMDogVW5kZXIgV2luZG93cywgc29ja2V0cyBjcmVhdGVkIHVzaW5nIHNvY2tldC5kdXAoKSBub3cgYWxsb3cKKyAgb3ZlcmxhcHBlZCBJL08uICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzODcyOiBzb2NrZXQuZGV0YWNoKCkgbm93IG1hcmtzIHRoZSBzb2NrZXQgY2xvc2VkIChhcyBtaXJyb3JlZAorICBpbiB0aGUgc29ja2V0IHJlcHIoKSkuICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjMTQ0MDY6IEZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZW4gdXNpbmcgYGBjb25jdXJyZW50LmZ1dHVyZXMud2FpdCgKKyAgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRClgYC4gIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICM1MTM2OiBkZXByZWNhdGUgb2xkLCB1bnVzZWQgZnVuY3Rpb25zIGZyb20gdGtpbnRlci4KKworLSBJc3N1ZSAjMTQ0MDk6IElETEUgbm93IHByb3Blcmx5IGV4ZWN1dGVzIGNvbW1hbmRzIGluIHRoZSBTaGVsbCB3aW5kb3cKKyAgd2hlbiBpdCBjYW5ub3QgcmVhZCB0aGUgbm9ybWFsIGNvbmZpZyBmaWxlcyBvbiBzdGFydHVwIGFuZAorICBoYXMgdG8gdXNlIHRoZSBidWlsdC1pbiBkZWZhdWx0IGtleSBiaW5kaW5ncy4KKyAgVGhlcmUgd2FzIHByZXZpb3VzbHkgYSBidWcgaW4gb25lIG9mIHRoZSBkZWZhdWx0cy4KKworLSBJc3N1ZSAjMTQ0MTY6IHN5c2xvZyBub3cgZGVmaW5lcyB0aGUgTE9HX09ERUxBWSBhbmQgTE9HX0FVVEhQUklWIGNvbnN0YW50cworICBpZiB0aGV5IGFyZSBkZWZpbmVkIGluIDxzeXNsb2cuaD4uCisKKy0gSURMRSBjYW4gYmUgbGF1bmNoZWQgYXMgcHl0aG9uIC1tIGlkbGVsaWIKKworLSBJc3N1ZSAjMTQyOTU6IEFkZCB1bml0dGVzdC5tb2NrCisKKy0gSXNzdWUgIzc2NTI6IEFkZCAtLXdpdGgtc3lzdGVtLWxpYm1wZGVjIG9wdGlvbiB0byBjb25maWd1cmUgZm9yIGxpbmtpbmcKKyAgdGhlIF9kZWNpbWFsIG1vZHVsZSBhZ2FpbnN0IGFuIGluc3RhbGxlZCBsaWJtcGRlYy4KKworLSBJc3N1ZSAjMTQzODA6IE1JTUVUZXh0IG5vdyBkZWZhdWx0cyB0byB1dGYtOCB3aGVuIHBhc3NlZCBub24tQVNDSUkgdW5pY29kZQorICB3aXRoIG5vIGNoYXJzZXQgc3BlY2lmaWVkLgorCistIElzc3VlICMxMDM0MDogYXN5bmNvcmUgLSBwcm9wZXJseSBoYW5kbGUgRUlOVkFMIGluIGRpc3BhdGNoZXIgY29uc3RydWN0b3Igb24KKyAgT1NYOyBhdm9pZCB0byBjYWxsIGhhbmRsZV9jb25uZWN0IGluIGNhc2Ugb2YgYSBkaXNjb25uZWN0ZWQgc29ja2V0IHdoaWNoCisgIHdhcyBub3QgbWVhbnQgdG8gY29ubmVjdC4KKworLSBJc3N1ZSAjMTQyMDQ6IFRoZSBzc2wgbW9kdWxlIG5vdyBoYXMgc3VwcG9ydCBmb3IgdGhlIE5leHQgUHJvdG9jb2wKKyAgTmVnb3RpYXRpb24gZXh0ZW5zaW9uLCBpZiBhdmFpbGFibGUgaW4gdGhlIHVuZGVybHlpbmcgT3BlblNTTCBsaWJyYXJ5LgorICBQYXRjaCBieSBDb2xpbiBNYXJjLgorCistIElzc3VlICMzMDM1OiBVbnVzZWQgZnVuY3Rpb25zIGZyb20gdGtpbnRlciBhcmUgbWFya2VkIGFzIHBlbmRpbmcgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTI3NTc6IEZpeCB0aGUgc2tpcHBpbmcgb2YgZG9jdGVzdHMgd2hlbiBweXRob24gaXMgcnVuIHdpdGggLU9PIHNvCisgIHRoYXQgaXQgd29ya3MgaW4gdW5pdHRlc3QncyB2ZXJib3NlIG1vZGUgYXMgd2VsbCBhcyBub24tdmVyYm9zZSBtb2RlLgorCistIElzc3VlICM3NjUyOiBJbnRlZ3JhdGUgdGhlIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgbGlibXBkZWMgbGlicmFyeSB0byBzcGVlZAorICB1cCB0aGUgZGVjaW1hbCBtb2R1bGUuIFBlcmZvcm1hbmNlIGdhaW5zIG9mIHRoZSBuZXcgQyBpbXBsZW1lbnRhdGlvbiBhcmUKKyAgYmV0d2VlbiAxMHggYW5kIDEwMHgsIGRlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24uCisKKy0gSXNzdWUgIzM1NzM6IElETEUgaGFuZ3Mgd2hlbiBwYXNzaW5nIGludmFsaWQgY29tbWFuZCBsaW5lIGFyZ3MKKyAgKGRpcmVjdG9yeShpZXMpIGluc3RlYWQgb2YgZmlsZShzKSkgKFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvKQorCistIElzc3VlICMxNDI2OTogU01UUEQgbm93IGNvbmZvcm1zIHRvIHRoZSBSRkMgYW5kIHJlcXVpcmVzIGEgSEVMTyBjb21tYW5kCisgIGJlZm9yZSBNQUlMLCBSQ1BULCBvciBEQVRBLgorCistIElzc3VlICMxMzY5NDogYXN5bmNocm9ub3VzIGNvbm5lY3QgaW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBkb2VzIG5vdCBzZXQgYWRkcgorICBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzE0MzQ0OiBmaXhlZCB0aGUgcmVwciBvZiBlbWFpbC5wb2xpY3kgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTE2ODY6IEFkZGVkIG1pc3NpbmcgZW50cmllcyB0byBlbWFpbCBwYWNrYWdlIF9fYWxsX18gbGlzdHMKKyAgKG1vc3RseSB0aGUgbmV3IEJ5dGVzIGNsYXNzZXMpLgorCistIElzc3VlICMxNDMzNTogbXVsdGlwcm9jZXNzaW5nJ3MgY3VzdG9tIFBpY2tsZXIgc3ViY2xhc3Mgbm93IGluaGVyaXRzIGZyb20KKyAgdGhlIEMtYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24uICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEwNDg0OiBGaXggdGhlIENHSUhUVFBTZXJ2ZXIncyBQQVRIX0lORk8gaGFuZGxpbmcgcHJvYmxlbS4KKworLSBJc3N1ZSAjMTExOTk6IEZpeCB0aGUgd2l0aCB1cmxsaWIgd2hpY2ggaGFuZ3Mgb24gcGFydGljdWxhciBmdHAgdXJscy4KKworLSBJbXByb3ZlIHRoZSBtZW1vcnkgdXRpbGl6YXRpb24gYW5kIHNwZWVkIG9mIGZ1bmN0b29scy5scnVfY2FjaGUuCisKKy0gSXNzdWUgIzE0MjIyOiBVc2UgdGhlIG5ldyB0aW1lLnN0ZWFkeSgpIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGltZS50aW1lKCkgZm9yCisgIHRpbWVvdXQgaW4gcXVldWUgYW5kIHRocmVhZGluZyBtb2R1bGVzIHRvIG5vdCBiZSBhZmZlY3RlZCBvZiBzeXN0ZW0gdGltZQorICB1cGRhdGUuCisKKy0gSXNzdWUgIzEzMjQ4OiBSZW1vdmUgbGliMnRvMy5weXRyZWUuQmFzZS5nZXRfcHJlZml4L3NldF9wcmVmaXguCisKKy0gSXNzdWUgIzE0MjM0OiBDVkUtMjAxMi0wODc2OiBSYW5kb21pemUgaGFzaGVzIG9mIHhtbCBhdHRyaWJ1dGVzIGluIHRoZSBoYXNoCisgIHRhYmxlIGludGVybmFsIHRvIHRoZSBweWV4cGF0IG1vZHVsZSdzIGNvcHkgb2YgdGhlIGV4cGF0IGxpYnJhcnkgdG8gYXZvaWQgYQorICBkZW5pYWwgb2Ygc2VydmljZSBkdWUgdG8gaGFzaCBjb2xsaXNpb25zLiAgUGF0Y2ggYnkgRGF2aWQgTWFsY29sbSB3aXRoIHNvbWUKKyAgbW9kaWZpY2F0aW9ucyBieSB0aGUgZXhwYXQgcHJvamVjdC4KKworLSBJc3N1ZSAjMTQyMDA6IElkbGUgc2hlbGwgY3Jhc2ggb24gcHJpbnRpbmcgbm9uLUJNUCB1bmljb2RlIGNoYXJhY3Rlci4KKworLSBJc3N1ZSAjMTI4MTg6IGZvcm1hdCBhZGRyZXNzIG5vIGxvbmdlciBuZWVkbGVzc2x5IFwgZXNjYXBlcyAoKXMgaW4gbmFtZXMgd2hlbgorICB0aGUgbmFtZSBlbmRzIHVwIGJlaW5nIHF1b3RlZC4KKworLSBJc3N1ZSAjMTQwNjI6IEJ5dGVzR2VuZXJhdG9yIG5vdyBjb3JyZWN0bHkgZm9sZHMgSGVhZGVyIG9iamVjdHMsCisgIGluY2x1ZGluZyB1c2luZyBsaW5lc2VwIHdoZW4gZm9sZGluZy4KKworLSBJc3N1ZSAjMTM4Mzk6IFdoZW4gaW52b2tlZCBvbiB0aGUgY29tbWFuZC1saW5lLCB0aGUgcHN0YXRzIG1vZHVsZSBub3cKKyAgYWNjZXB0cyBzZXZlcmFsIGZpbGVuYW1lcyBvZiBwcm9maWxlIHN0YXQgZmlsZXMgYW5kIG1lcmdlcyB0aGVtIGFsbC4KKyAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzE0MjkxOiBFbWFpbCBub3cgZGVmYXVsdHMgdG8gdXRmLTggZm9yIG5vbi1BU0NJSSB1bmljb2RlIGhlYWRlcnMKKyAgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGVycm9yLiAgVGhpcyBmaXhlcyBhIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gMi43LgorCistIElzc3VlICM5ODk3MTI6IFN1cHBvcnQgdXNpbmcgVGsgd2l0aG91dCBhIG1haW5sb29wLgorCistIElzc3VlICM1MjE5OiBQcmV2ZW50IGV2ZW50IGhhbmRsZXIgY2FzY2FkZSBpbiBJRExFLgorCistIElzc3VlICMzODM1OiBSZWZ1c2UgdG8gdXNlIHVudGhyZWFkZWQgVGNsIGluIHRocmVhZGVkIFB5dGhvbi4KKworLSBJc3N1ZSAjMjg0MzogQWRkIG5ldyBUayBBUEkgdG8gVGtpbnRlci4KKworLSBJc3N1ZSAjMTQxODQ6IEluY3JlYXNlIHRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHNlY29uZGFyeSB0aHJlYWRzIG9uCisgIE1hYyBPUyBYIHRvIGF2b2lkIGludGVycHJldGVyIGNyYXNoZXMgd2hlbiB1c2luZyB0aHJlYWRzIG9uIDEwLjcuCisKKy0gSXNzdWUgIzE0MTgwOiBkYXRldGltZS5kYXRlLmZyb210aW1lc3RhbXAoKSwKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpIGFuZCBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKCkKKyAgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIGlmIGxvY2FsdGltZSgpIG9yIGdtdGltZSgpIGZhaWxlZC4KKworLSBJc3N1ZSAjMTQxODA6IHRpbWUuY3RpbWUoKSwgZ210aW1lKCksIHRpbWUubG9jYWx0aW1lKCksCisgIGRhdGV0aW1lLmRhdGUuZnJvbXRpbWVzdGFtcCgpLCBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kCisgIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IsIGluc3RlYWQgb2YKKyAgYSBWYWx1ZUVycm9yLCBpZiB0aGUgdGltZXN0YW1wIGRvZXMgbm90IGZpdCBpbiB0aW1lX3QuCisKKy0gSXNzdWUgIzE0MTgwOiBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kCisgIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKSBub3cgcm91bmQgbWljcm9zZWNvbmRzIHRvd2FyZHMgemVybworICBpbnN0ZWFkIG9mIHJvdW5kaW5nIHRvIG5lYXJlc3Qgd2l0aCB0aWVzIGdvaW5nIGF3YXkgZnJvbSB6ZXJvLgorCistIElzc3VlICMxMDU0MzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IHdpdGggSnl0aG9uIGJ5dGVjb2RlIGZpbGVzLgorCistIElzc3VlICMxMTc4ODYzOiBTZXBhcmF0ZSBpbml0aWFsaXNhdGlvbiBmcm9tIHNldHRpbmcgd2hlbiBpbml0aWFsaXppbmcKKyAgVGtpbnRlci5WYXJpYWJsZXM7IGhhcm1vbml6ZSBleGNlcHRpb25zIHRvIFZhbHVlRXJyb3I7IG9ubHkgZGVsZXRlIHZhcmlhYmxlcworICB0aGF0IGhhdmUgbm90IGJlZW4gZGVsZXRlZDsgYXNzZXJ0IHRoYXQgdmFyaWFibGUgbmFtZXMgYXJlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE0MTA0OiBJbXBsZW1lbnQgdGltZS5tb25vdG9uaWMoKSBvbiBNYWMgT1MgWCwgcGF0Y2ggd3JpdHRlbiBieQorICBOaWNob2xhcyBSaWxleS4KKworLSBJc3N1ZSAjMTMzOTQ6IHRoZSBhaWZjIG1vZHVsZSBub3cgdXNlcyB3YXJuaW5ncy53YXJuKCkgdG8gc2lnbmFsIHdhcm5pbmdzLgorCistIElzc3VlICMxNDI1MjogRml4IHN1YnByb2Nlc3MuUG9wZW4udGVybWluYXRlKCkgdG8gbm90IHJhaXNlIGFuIGVycm9yIHVuZGVyCisgIFdpbmRvd3Mgd2hlbiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgYWxyZWFkeSBleGl0ZWQuCisKKy0gSXNzdWUgIzE0MjIzOiBjdXJzZXMuYWRkY2goKSBpcyBubyBtb3JlIGxpbWl0ZWQgdG8gdGhlIHJhbmdlIDAtMjU1IHdoZW4gdGhlCisgIFB5dGhvbiBjdXJzZXMgaXMgbm90IGxpbmtlZCB0byBsaWJuY3Vyc2Vzdy4gSXQgd2FzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkCisgIGluIFB5dGhvbiAzLjNhMS4KKworLSBJc3N1ZSAjMTQxNjg6IENoZWNrIGZvciBwcmVzZW5jZSBvZiBFbGVtZW50Ll9hdHRycyBpbiBtaW5pZG9tIGJlZm9yZQorICBhY2Nlc3NpbmcgaXQuCisKKy0gSXNzdWUgIzEyMzI4OiBGaXggbXVsdGlwcm9jZXNzaW5nJ3MgdXNlIG9mIG92ZXJsYXBwZWQgSS9PIG9uIFdpbmRvd3MuCisgIEFsc28sIGFkZCBhIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLndhaXQocmxpc3QsIHRpbWVvdXQ9Tm9uZSkgZnVuY3Rpb24KKyAgZm9yIHBvbGxpbmcgbXVsdGlwbGUgb2JqZWN0cyBhdCBvbmNlLiAgUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDAwNzogQWNjZXB0IGluY29tcGxldGUgVHJlZUJ1aWxkZXIgb2JqZWN0cyAobWlzc2luZyBzdGFydCwgZW5kLAorICBkYXRhIG9yIGNsb3NlIG1ldGhvZCkgZm9yIHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gYXMgd2VsbC4KKyAgRHJvcCB0aGUgbm8tb3AgVHJlZUJ1aWxkZXIoKS54bWwoKSBtZXRob2QgZnJvbSB0aGUgQyBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTQyMTA6IHBkYiBub3cgaGFzIHRhYi1jb21wbGV0aW9uIG5vdCBvbmx5IGZvciBjb21tYW5kIG5hbWVzLCBidXQKKyAgYWxzbyBmb3IgdGhlaXIgYXJndW1lbnRzLCB3aGVyZXZlciBwb3NzaWJsZS4KKworLSBJc3N1ZSAjMTQzMTA6IFNvY2tldHMgY2FuIG5vdyBiZSB3aXRoIG90aGVyIHByb2Nlc3NlcyBvbiBXaW5kb3dzIHVzaW5nCisgIHRoZSBhcGkgc29ja2V0LnNvY2tldC5zaGFyZSgpIGFuZCBzb2NrZXQuZnJvbXNoYXJlKCkuCisKKy0gSXNzdWUgIzEwNTc2OiBUaGUgZ2MgbW9kdWxlIG5vdyBoYXMgYSAnY2FsbGJhY2tzJyBtZW1iZXIgdGhhdCB3aWxsIGdldAorICBjYWxsZWQgd2hlbiBnYXJiYWdlIGNvbGxlY3Rpb24gdGFrZXMgcGxhY2UuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDU1NzogRml4IGV4dGVuc2lvbnMgYnVpbGQgb24gSFAtVVguIFBhdGNoIGJ5IEFkaSBSb2liYW4uCisKKy0gSXNzdWUgIzE0Mzg3OiBEbyBub3QgaW5jbHVkZSBhY2N1LmggZnJvbSBQeXRob24uaC4KKworLSBJc3N1ZSAjMTQzNTk6IE9ubHkgdXNlIE9fQ0xPRVhFQyBpbiBfcG9zaXhtb2R1bGUuYyBpZiBpdCBpcyBkZWZpbmVkLgorICBCYXNlZCBvbiBwYXRjaCBmcm9tIEhlcnbDqSBDb2F0YW5oYXkuCisKKy0gSXNzdWUgIzE0MzIxOiBEbyBub3QgcnVuIHBnZW4gZHVyaW5nIHRoZSBidWlsZCBpZiBmaWxlcyBhcmUgdXAgdG8gZGF0ZS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDAzNDogYWRkZWQgdGhlIGFyZ3BhcnNlIHR1dG9yaWFsLgorCistIElzc3VlICMxNDMyNDogRml4IGNvbmZpZ3VyZSB0ZXN0cyBmb3IgY3Jvc3MgYnVpbGRzLgorCistIElzc3VlICMxNDMyNzogQ2FsbCBBQ19DQU5PTklDQUxfSE9TVCBpbiBjb25maWd1cmUuYWMgYW5kIGNoZWNrIGluCisgIGNvbmZpZy57Z3Vlc3Msc3VifS4gRG9uJ3QgdXNlIHVuYW1lIGNhbGxzIGZvciBjcm9zcyBidWlsZHMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM5MDQxOiBBbiBpc3N1ZSBpbiBjdHlwZXMuY19sb25nZG91YmxlLCBjdHlwZXMuY19kb3VibGUsIGFuZAorICBjdHlwZXMuY19mbG9hdCB0aGF0IGNhdXNlZCBhbiBpbmNvcnJlY3QgZXhjZXB0aW9uIHRvIGJlIHJldHVybmVkIGluIHRoZQorICBjYXNlIG9mIG92ZXJmbG93IGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNDIxMjogVGhlIHJlIG1vZHVsZSBkaWRuJ3QgcmV0YWluIGEgcmVmZXJlbmNlIHRvIGJ1ZmZlcnMgaXQgd2FzCisgIHNjYW5uaW5nLCByZXN1bHRpbmcgaW4gc2VnZmF1bHRzLgorCistIElzc3VlICMxNDI1OTogVGhlIGZpbmRpdGVyKCkgbWV0aG9kIG9mIHJlIG9iamVjdHMgZGlkIG5vdCB0YWtlIGFueQorICBrZXl3b3JkIGFyZ3VtZW50cywgY29udHJhcnkgdG8gdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEwMTQyOiBTdXBwb3J0IGZvciBTRUVLX0hPTEUvU0VFS19EQVRBIChmb3IgZXhhbXBsZSwgdW5kZXIgWkZTKS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NDQyOiBBZGQgbWlzc2luZyBlcnJubyBpbXBvcnQgaW4gdGVzdF9zbXRwbGliLgorCistIElzc3VlICM4MzE1OiAocGFydGlhbCBmaXgpIHB5dGhvbiAtbSB1bml0dGVzdCB0ZXN0LnRlc3RfZW1haWwgbm93IHdvcmtzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwNS1NYXItMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MTcyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBtYXJzaGFsbGluZyBhIGJ1ZmZlci1saWtlIG9iamVjdAorICAob3RoZXIgdGhhbiBhIGJ5dGVzIG9iamVjdCkuCisKKy0gSXNzdWUgIzEzNTIxOiBkaWN0LnNldGRlZmF1bHQoKSBub3cgZG9lcyBvbmx5IG9uZSBsb29rdXAgZm9yIHRoZSBnaXZlbiBrZXksCisgIG1ha2luZyBpdCAiYXRvbWljIiBmb3IgbWFueSBwdXJwb3Nlcy4gIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gUEVQIDQwOSwgSXNzdWUgIzYyMTA6ICJyYWlzZSBYIGZyb20gTm9uZSIgaXMgbm93IHN1cHBvcnRlZCBhcyBhIG1lYW5zIG9mCisgIHN1cHByZXNzaW5nIHRoZSBkaXNwbGF5IG9mIHRoZSBjaGFpbmVkIGV4Y2VwdGlvbiBjb250ZXh0LiBUaGUgY2hhaW5lZAorICBjb250ZXh0IHN0aWxsIHJlbWFpbnMgYXZhaWxhYmxlIGFzIHRoZSBfX2NvbnRleHRfXyBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzEwMTgxOiBOZXcgbWVtb3J5dmlldyBpbXBsZW1lbnRhdGlvbiBmaXhlcyBtdWx0aXBsZSBvd25lcnNoaXAKKyAgYW5kIGxpZmV0aW1lIGlzc3VlcyBvZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUHlfYnVmZmVyIG1lbWJlcnMgKCM5OTkwKQorICBhcyB3ZWxsIGFzIGNyYXNoZXMgKCM4MzA1LCAjNzQzMykuIE1hbnkgbmV3IGZlYXR1cmVzIGhhdmUgYmVlbiBhZGRlZAorICAoU2VlIHdoYXRzbmV3LzMuMyksIGFuZCB0aGUgZG9jdW1lbnRhdGlvbiBoYXMgYmVlbiB1cGRhdGVkIGV4dGVuc2l2ZWx5LgorICBUaGUgbmRhcnJheSB0ZXN0IG9iamVjdCBmcm9tIF90ZXN0YnVmZmVyLmMgaW1wbGVtZW50cyBhbGwgYXNwZWN0cyBvZgorICBQRVAtMzExOCwgc28gZnVydGhlciBkZXZlbG9wbWVudCB0b3dhcmRzIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbgorICBvZiB0aGUgUEVQIGNhbiBwcm9jZWVkIGluIGEgdGVzdC1kcml2ZW4gbWFubmVyLgorCisgIFRoYW5rcyB0byBOaWNrIENvZ2hsYW4sIEFudG9pbmUgUGl0cm91IGFuZCBQYXVsaSBWaXJ0YW5lbiBmb3IgcmV2aWV3CisgIGFuZCBtYW55IGlkZWFzLgorCistIElzc3VlICMxMjgzNDogRml4IGluY29ycmVjdCByZXN1bHRzIG9mIG1lbW9yeXZpZXcudG9ieXRlcygpIGZvcgorICBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzUyMzE6IEludHJvZHVjZSBtZW1vcnl2aWV3LmNhc3QoKSBtZXRob2QgdGhhdCBhbGxvd3MgY2hhbmdpbmcKKyAgZm9ybWF0IGFuZCBzaGFwZSB3aXRob3V0IG1ha2luZyBhIGNvcHkgb2YgdGhlIHVuZGVybHlpbmcgbWVtb3J5LgorCistIElzc3VlICMxNDA4NDogRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUgd2l0aCBhCisgIGJhZCBlbmNvZGluZy4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSB0byBVbmljb2RlIDYuMS4KKworLSBJc3N1ZSAjMTQwNDA6IFJlbW92ZSByYXJlbHkgdXNlZCBmaWxlIG5hbWUgc3VmZml4ZXMgZm9yIEMgZXh0ZW5zaW9ucworICAodW5kZXIgUE9TSVggbWFpbmx5KS4KKworLSBJc3N1ZSAjMTQwNTE6IEFsbG93IGFyYml0cmFyeSBhdHRyaWJ1dGVzIHRvIGJlIHNldCBvZiBjbGFzc21ldGhvZCBhbmQKKyAgc3RhdGljbWV0aG9kLgorCistIElzc3VlICMxMzcwMzogb0NFUlQtMjAxMS0wMDM6IFJhbmRvbWl6ZSBoYXNoZXMgb2Ygc3RyIGFuZCBieXRlcyB0byBwcm90ZWN0CisgIGFnYWluc3QgZGVuaWFsIG9mIHNlcnZpY2UgYXR0YWNrcyBkdWUgdG8gaGFzaCBjb2xsaXNpb25zIHdpdGhpbiB0aGUgZGljdCBhbmQKKyAgc2V0IHR5cGVzLiAgUGF0Y2ggYnkgRGF2aWQgTWFsY29sbSwgYmFzZWQgb24gd29yayBieSBWaWN0b3IgU3Rpbm5lci4KKworLSBJc3N1ZSAjMTMwMjA6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIHdoZW4gYWxsb2NhdGluZyBhIHN0cnVjdHNlcXVlbmNlIG9iamVjdAorICBmYWlscy4gIFBhdGNoIGJ5IFN1bWFuIFNhaGEuCisKKy0gSXNzdWUgIzEzOTA4OiBSZWFkeSB0eXBlcyByZXR1cm5lZCBmcm9tIFB5VHlwZV9Gcm9tU3BlYy4KKworLSBJc3N1ZSAjMTEyMzU6IEZpeCBPdmVyZmxvd0Vycm9yIHdoZW4gdHJ5aW5nIHRvIGltcG9ydCBhIHNvdXJjZSBmaWxlIHdob3NlCisgIG1vZGlmaWNhdGlvbiB0aW1lIGRvZXNuJ3QgZml0IGluIGEgMzItYml0IHRpbWVzdGFtcC4KKworLSBJc3N1ZSAjMTI3MDU6IEEgU3ludGF4RXJyb3IgZXhjZXB0aW9uIGlzIG5vdyByYWlzZWQgd2hlbiBhdHRlbXB0aW5nIHRvCisgIGNvbXBpbGUgbXVsdGlwbGUgc3RhdGVtZW50cyBhcyBhIHNpbmdsZSBpbnRlcmFjdGl2ZSBzdGF0ZW1lbnQuCisKKy0gRml4IHRoZSBidWlsdGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlIHRvIHN0b3JlIHRoZSBpbml0IGZ1bmN0aW9uIGZvcgorICBmdXR1cmUgcmVpbml0aWFsaXphdGlvbi4KKworLSBJc3N1ZSAjODA1MjogVGhlIHBvc2l4IHN1YnByb2Nlc3MgbW9kdWxlIHdvdWxkIHRha2UgYSBsb25nIHRpbWUgY2xvc2luZworICBhbGwgcG9zc2libGUgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgY2hpbGQgcHJvY2VzcyByYXRoZXIgdGhhbiBqdXN0IG9wZW4KKyAgZmlsZSBkZXNjcmlwdG9ycy4gIEl0IG5vdyBjbG9zZXMgb25seSB0aGUgb3BlbiBmZHMgaWYgcG9zc2libGUgZm9yIHRoZQorICBkZWZhdWx0IGNsb3NlX2Zkcz1UcnVlIGJlaGF2aW9yLgorCistIElzc3VlICMxMzYyOTogUmVudW1iZXIgdGhlIHRva2VucyBpbiB0b2tlbi5oIHNvIHRoYXQgdGhleSBtYXRjaCB0aGUgaW5kZXhlcworICBpbnRvIF9QeVBhcnNlcl9Ub2tlbk5hbWVzLgorCistIElzc3VlICMxMzc1MjogQWRkIGEgY2FzZWZvbGQoKSBtZXRob2QgdG8gc3RyLgorCistIElzc3VlICMxMzc2MTogQWRkIGEgImZsdXNoIiBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSBwcmludCgpIGZ1bmN0aW9uLAorICB1c2VkIHRvIGVuc3VyZSBmbHVzaGluZyB0aGUgb3V0cHV0IHN0cmVhbS4KKworLSBJc3N1ZSAjMTM2NDU6IHB5YyBmaWxlcyBub3cgY29udGFpbiB0aGUgc2l6ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UKKyAgY29kZSwgdG8gYXZvaWQgdGltZXN0YW1wIGNvbGxpc2lvbnMgKGVzcGVjaWFsbHkgb24gZmlsZXN5c3RlbXMgd2l0aCBhIGxvdworICB0aW1lc3RhbXAgcmVzb2x1dGlvbikgd2hlbiBjaGVja2luZyBmb3IgZnJlc2huZXNzIG9mIHRoZSBieXRlY29kZS4KKworLSBQRVAgMzgwLCBJc3N1ZSAjMTE2ODI6IEFkZCAieWllbGQgZnJvbSA8eD4iIHRvIHN1cHBvcnQgZWFzeSBkZWxlZ2F0aW9uIHRvCisgIHN1YmdlbmVyYXRvcnMgKGluaXRpYWwgcGF0Y2ggYnkgR3JlZyBFd2luZywgaW50ZWdyYXRpb24gaW50byAzLjMgYnkKKyAgUmVuYXVkIEJsYW5jaCwgUnlhbiBLZWxseSwgWmJpZ25pZXcgSsSZZHJ6ZWpld3NraS1Tem1layBhbmQgTmljayBDb2dobGFuKQorCistIElzc3VlICMxMzc0ODogUmF3IGJ5dGVzIGxpdGVyYWxzIGNhbiBub3cgYmUgd3JpdHRlbiB3aXRoIHRoZSBgYHJiYGAgcHJlZml4CisgIGFzIHdlbGwgYXMgYGBicmBgLgorCistIElzc3VlICMxMjczNjogVXNlIGZ1bGwgdW5pY29kZSBjYXNlIG1hcHBpbmdzIGZvciB1cHBlciwgbG93ZXIsIGFuZCB0aXRsZSBjYXNlLgorCistIElzc3VlICMxMjc2MDogQWRkIGEgY3JlYXRlIG1vZGUgdG8gb3BlbigpLiBQYXRjaCBieSBEYXZpZCBUb3duc2hlbmQuCisKKy0gSXNzdWUgIzEzNzM4OiBTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiBieXRlcy5sb3dlcigpIGFuZCBieXRlcy51cHBlcigpLgorCistIElzc3VlICMxMzU3NzogQnVpbHQtaW4gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIG5vdyBoYXZlIGEgX19xdWFsbmFtZV9fLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzY2OTU6IEZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHJ1bnMgbm93IGNsZWFyIHRoZSBmcmVlbGlzdCBvZiBzZXQKKyAgb2JqZWN0cy4gIEluaXRpYWwgcGF0Y2ggYnkgTWF0dGhpYXMgVHJvZmZhZXMuCisKKy0gRml4IE9TRXJyb3IuX19pbml0X18gYW5kIE9TRXJyb3IuX19uZXdfXyBzbyB0aGF0IGVhY2ggb2YgdGhlbSBjYW4gYmUKKyAgb3ZlcnJpZGVuIGFuZCB0YWtlIGFkZGl0aW9uYWwgYXJndW1lbnRzIChmb2xsb3d1cCB0byBpc3N1ZSAjMTI1NTUpLgorCistIEZpeCB0aGUgZml4IGZvciBpc3N1ZSAjMTIxNDk6IGl0IHdhcyBpbmNvcnJlY3QsIGFsdGhvdWdoIGl0IGhhZCB0aGUgc2lkZQorICBlZmZlY3Qgb2YgYXBwZWFyaW5nIHRvIHJlc29sdmUgdGhlIGlzc3VlLiAgVGhhbmtzIHRvIE1hcmsgU2hhbm5vbiBmb3IKKyAgbm90aWNpbmcuCisKKy0gSXNzdWUgIzEzNTA1OiBQaWNrbGUgYnl0ZXMgb2JqZWN0cyBpbiBhIHdheSB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aAorICBQeXRob24gMiB3aGVuIHVzaW5nIHByb3RvY29scyA8PSAyLgorCistIElzc3VlICMxMTE0NzogRml4IGFuIHVudXNlZCBhcmd1bWVudCBpbiBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSLiAgKEZpeAorICBnaXZlbiBieSBDYW1wYmVsbCBCYXJ0b24pLgorCistIElzc3VlICMxMzUwMzogVXNlIGEgbW9yZSBlZmZpY2llbnQgcmVkdWN0aW9uIGZvcm1hdCBmb3IgYnl0ZWFycmF5cyB3aXRoCisgIHBpY2tsZSBwcm90b2NvbCA+PSAzLiAgVGhlIG9sZCByZWR1Y3Rpb24gZm9ybWF0IGlzIGtlcHQgd2l0aCBvbGRlciBwcm90b2NvbHMKKyAgaW4gb3JkZXIgdG8gYWxsb3cgdW5waWNrbGluZyB1bmRlciBQeXRob24gMi4gIFBhdGNoIGJ5IElybWVuIGRlIEpvbmcuCisKKy0gSXNzdWUgIzcxMTE6IFB5dGhvbiBjYW4gbm93IGJlIHJ1biB3aXRob3V0IGEgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIKKyAgc3RyZWFtLiAgSXQgd2FzIGFscmVhZHkgdGhlIGNhc2Ugd2l0aCBQeXRob24gMi4gIEhvd2V2ZXIsIHRoZSBjb3JyZXNwb25kaW5nCisgIHN5cyBtb2R1bGUgZW50cmllcyBhcmUgbm93IHNldCB0byBOb25lIChpbnN0ZWFkIG9mIGFuIHVudXNhYmxlIGZpbGUgb2JqZWN0KS4KKworLSBJc3N1ZSAjMTE4NDk6IEVuc3VyZSB0aGF0IGZyZWUoKWQgbWVtb3J5IGFyZW5hcyBhcmUgcmVhbGx5IHJlbGVhc2VkCisgIG9uIFBPU0lYIHN5c3RlbXMgc3VwcG9ydGluZyBhbm9ueW1vdXMgbWVtb3J5IG1hcHBpbmdzLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMzQ1MjogUHlVbmljb2RlX0VuY29kZURlY2ltYWwoKSBkb2Vzbid0IHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMKKyAgZGlmZmVyZW50IHRoYW4gInN0cmljdCIgYW55bW9yZS4gVGhlIGNhbGxlciB3YXMgdW5hYmxlIHRvIGNvbXB1dGUgdGhlCisgIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXI6IGl0IGRlcGVuZHMgb24gdGhlIGVycm9yIGhhbmRsZXIuCisKKy0gUEVQIDMxNTUgLyBpc3N1ZSAjMTM0NDg6IFF1YWxpZmllZCBuYW1lIGZvciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzEzNDM2OiBGaXggYSBib2d1cyBlcnJvciBtZXNzYWdlIHdoZW4gYW4gQVNUIG9iamVjdCB3YXMgcGFzc2VkCisgIGFuIGludmFsaWQgaW50ZWdlciB2YWx1ZS4KKworLSBJc3N1ZSAjMTM0MTE6IG1lbW9yeXZpZXcgb2JqZWN0cyBhcmUgbm93IGhhc2hhYmxlIHdoZW4gdGhlIHVuZGVybHlpbmcKKyAgb2JqZWN0IGlzIGhhc2hhYmxlLgorCistIElzc3VlICMxMzMzODogSGFuZGxlIGFsbCBlbnVtZXJhdGlvbnMgaW4gX1B5X0FOTk9UQVRFX01FTU9SWV9PUkRFUgorICB0byBhbGxvdyBjb21waWxpbmcgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCAtV3N3aXRjaC1lbnVtIG9uIGdjYy4KKyAgSW5pdGlhbCBwYXRjaCBieSBGbG9yaXMgQnJ1eW5vb2doZS4KKworLSBJc3N1ZSAjMTAyMjc6IEFkZCBhbiBhbGxvY2F0aW9uIGNhY2hlIGZvciBhIHNpbmdsZSBzbGljZSBvYmplY3QuICBQYXRjaCBieQorICBTdGVmYW4gQmVobmVsLgorCistIElzc3VlICMxMzM5MzogQnVmZmVyZWRSZWFkZXIucmVhZDEoKSBub3cgYXNrcyB0aGUgZnVsbCByZXF1ZXN0ZWQgc2l6ZSB0bworICB0aGUgcmF3IHN0cmVhbSBpbnN0ZWFkIG9mIGxpbWl0aW5nIGl0c2VsZiB0byB0aGUgYnVmZmVyIHNpemUuCisKKy0gSXNzdWUgIzEzMzkyOiBXcml0aW5nIGEgcHljIGZpbGUgc2hvdWxkIG5vdyBiZSBhdG9taWMgdW5kZXIgV2luZG93cyBhcyB3ZWxsLgorCistIElzc3VlICMxMzMzMzogVGhlIFVURi03IGRlY29kZXIgbm93IGFjY2VwdHMgbG9uZSBzdXJyb2dhdGVzICh0aGUgZW5jb2RlcgorICBhbHJlYWR5IGFjY2VwdHMgdGhlbSkuCisKKy0gSXNzdWUgIzEzMzg5OiBGdWxsIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXNzZXMgbm93IGNsZWFyIHRoZSBmcmVlbGlzdHMgZm9yCisgIGxpc3QgYW5kIGRpY3Qgb2JqZWN0cy4gIFRoZXkgYWxyZWFkeSBjbGVhcmVkIG90aGVyIGZyZWVsaXN0cyBpbiB0aGUKKyAgaW50ZXJwcmV0ZXIuCisKKy0gSXNzdWUgIzEzMzI3OiBSZW1vdmUgdGhlIG5lZWQgZm9yIGFuIGV4cGxpY2l0IE5vbmUgYXMgdGhlIHNlY29uZCBhcmd1bWVudAorICB0byBvcy51dGltZSwgb3MubHV0aW1lcywgb3MuZnV0aW1lcywgb3MuZnV0aW1lbnMsIG9zLmZ1dGltZXNhdCwgaW4KKyAgb3JkZXIgdG8gdXBkYXRlIHRvIHRoZSBjdXJyZW50IHRpbWUuIEFsc28gYWRkZWQga2V5d29yZCBhcmd1bWVudAorICBoYW5kbGluZyB0byBvcy51dGltZW5zYXQgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBuZWVkIGZvciBleHBsaWNpdCBOb25lLgorCistIElzc3VlICMxMzM1MDogU2ltcGxpZnkgc29tZSBDIGNvZGUgYnkgcmVwbGFjaW5nIG1vc3QgdXNhZ2VzIG9mCisgIFB5VW5pY29kZV9Gb3JtYXQgYnkgUHlVbmljb2RlX0Zyb21Gb3JtYXQuCisKKy0gSXNzdWUgIzEzMzQyOiBpbnB1dCgpIHVzZWQgdG8gaWdub3JlIHN5cy5zdGRpbidzIGFuZCBzeXMuc3Rkb3V0J3MgdW5pY29kZQorICBlcnJvciBoYW5kbGVyIGluIGludGVyYWN0aXZlIG1vZGUgKHdoZW4gY2FsbGluZyBpbnRvIFB5T1NfUmVhZGxpbmUoKSkuCisKKy0gSXNzdWUgIzk4OTY6IEFkZCBzdGFydCwgc3RvcCwgYW5kIHN0ZXAgYXR0cmlidXRlcyB0byByYW5nZSBvYmplY3RzLgorCistIElzc3VlICMxMzM0MzogRml4IGEgU3lzdGVtRXJyb3Igd2hlbiBhIGxhbWJkYSBleHByZXNzaW9uIHVzZXMgYSBnbG9iYWwKKyAgdmFyaWFibGUgaW4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQ6IGBgbGFtYmRhICosCisgIGFyZz1HTE9CQUxfTkFNRTogTm9uZWBgCisKKy0gSXNzdWUgIzEyNzk3OiBBZGRlZCBjdXN0b20gb3BlbmVyIHBhcmFtZXRlciB0byBidWlsdGluIG9wZW4oKSBhbmQKKyAgRmlsZUlPLm9wZW4oKS4KKworLSBJc3N1ZSAjMTA1MTk6IEF2b2lkIHVubmVjZXNzYXJ5IHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscyBpbgorICBzZXRvYmplY3QuYy4KKworLSBJc3N1ZSAjMTAzNjM6IERlYWxsb2NhdGUgZ2xvYmFsIGxvY2tzIGluIFB5X0ZpbmFsaXplKCkuCisKKy0gSXNzdWUgIzEzMDE4OiBGaXggcmVmZXJlbmNlIGxlYWtzIGluIGVycm9yIHBhdGhzIGluIGRpY3RvYmplY3QuYy4KKyAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTMyMDE6IERlZmluZSAnPT0nIGFuZCAnIT0nIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0cyBiYXNlZCBvbgorICB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoZXkgZGVmaW5lIChpbnN0ZWFkIG9mIGNvbXBhcmluZyBiYXNlZCBvbgorICBvYmplY3QgaWRlbnRpdHkpLgorCistIElzc3VlICMxMjk0MjMyOiBJbiBhIGZldyBjYXNlcyBpbnZvbHZpbmcgbWV0YWNsYXNzIGluaGVyaXRhbmNlLCB0aGUKKyAgaW50ZXJwcmV0ZXIgd291bGQgc29tZXRpbWVzIGludm9rZSB0aGUgd3JvbmcgbWV0YWNsYXNzIHdoZW4gYnVpbGRpbmcgYSBuZXcKKyAgY2xhc3Mgb2JqZWN0LiBUaGVzZSBjYXNlcyBub3cgYmVoYXZlIGNvcnJlY3RseS4gUGF0Y2ggYnkgRGFuaWVsIFVyYmFuLgorCistIElzc3VlICMxMjc1MzogQWRkIHN1cHBvcnQgZm9yIFVuaWNvZGUgbmFtZSBhbGlhc2VzIGFuZCBuYW1lZCBzZXF1ZW5jZXMuCisgIEJvdGggYGB1bmljb2RlZGF0YS5sb29rdXAoKWBgIGFuZCAnXE57Li4ufScgbm93IHJlc29sdmUgYWxpYXNlcywKKyAgYW5kIGBgdW5pY29kZWRhdGEubG9va3VwKClgYCByZXNvbHZlcyBuYW1lZCBzZXF1ZW5jZXMgdG9vLgorCistIElzc3VlICMxMjE3MDogVGhlIGNvdW50KCksIGZpbmQoKSwgcmZpbmQoKSwgaW5kZXgoKSBhbmQgcmluZGV4KCkgbWV0aG9kcworICBvZiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgbm93IGFjY2VwdCBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1CisgIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50LiAgUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEyNjA0OiBWVFJBQ0UgbWFjcm8gZXhwYW5kZWQgdG8gbm8tb3AgaW4gX3NyZS5jIHRvIGF2b2lkIGNvbXBpbGVyCisgIHdhcm5pbmdzLiBQYXRjaCBieSBKb3NoIFRyaXBsZXR0IGFuZCBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTIyODE6IFJld3JpdGUgdGhlIE1CQ1MgY29kZWMgdG8gaGFuZGxlIGNvcnJlY3RseSByZXBsYWNlIGFuZCBpZ25vcmUKKyAgZXJyb3IgaGFuZGxlcnMgb24gYWxsIFdpbmRvd3MgdmVyc2lvbnMuIFRoZSBNQkNTIGNvZGVjIGlzIG5vdyBzdXBwb3J0aW5nIGFsbAorICBlcnJvciBoYW5kbGVycywgaW5zdGVhZCBvZiBvbmx5IHJlcGxhY2UgdG8gZW5jb2RlIGFuZCBpZ25vcmUgdG8gZGVjb2RlLgorCistIElzc3VlICMxMzE4ODogV2hlbiBjYWxsZWQgd2l0aG91dCBhbiBleHBsaWNpdCB0cmFjZWJhY2sgYXJndW1lbnQsCisgIGdlbmVyYXRvci50aHJvdygpIG5vdyBnZXRzIHRoZSB0cmFjZWJhY2sgZnJvbSB0aGUgcGFzc2VkIGV4Y2VwdGlvbidzCisgIGBgX190cmFjZWJhY2tfX2BgIGF0dHJpYnV0ZS4gIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMzE0NjogV3JpdGluZyBhIHB5YyBmaWxlIGlzIG5vdyBhdG9taWMgdW5kZXIgUE9TSVguCisKKy0gSXNzdWUgIzc4MzM6IEV4dGVuc2lvbiBtb2R1bGVzIGJ1aWx0IHVzaW5nIGRpc3R1dGlscyBvbiBXaW5kb3dzIHdpbGwgbm8KKyAgbG9uZ2VyIGluY2x1ZGUgYSAibWFuaWZlc3QiIHRvIHByZXZlbnQgdGhlbSBmYWlsaW5nIGF0IGltcG9ydCB0aW1lIGluIHNvbWUKKyAgZW1iZWRkZWQgc2l0dWF0aW9ucy4KKworLSBQRVAgMzE1MSAvIGlzc3VlICMxMjU1NTogcmV3b3JraW5nIHRoZSBPUyBhbmQgSU8gZXhjZXB0aW9uIGhpZXJhcmNoeS4KKworLSBJc3N1ZSAjMTM1NjA6IEFkZCBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKCksIFB5VW5pY29kZV9EZWNvZGVMb2NhbGVBbmRTaXplKCkKKyAgYW5kIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoKSBmdW5jdGlvbnMgdG8gdGhlIEMgQVBJIHRvIGRlY29kZS9lbmNvZGUgZnJvbS90bworICB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcuCisKKy0gQWRkIGludGVybmFsIEFQSSBmb3Igc3RhdGljIHN0cmluZ3MgKF9QeV9pZGVudGlmaWVyIGV0IGFsLikuCisKKy0gSXNzdWUgIzEzMDYzOiB0aGUgV2luZG93cyBlcnJvciBFUlJPUl9OT19EQVRBIChudW1iZXJlZCAyMzIgYW5kIGRlc2NyaWJlZAorICBhcyAiVGhlIHBpcGUgaXMgYmVpbmcgY2xvc2VkIikgaXMgbm93IG1hcHBlZCB0byBQT1NJWCBlcnJubyBFUElQRQorICAocHJldmlvdXNseSBFSU5WQUwpLgorCistIElzc3VlICMxMjkxMTogRml4IG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIGNhbGN1bGF0aW5nIHRoZSByZXByKCkgb2YgaHVnZQorICB0dXBsZXMgb3IgbGlzdHMuCisKKy0gUEVQIDM5MzogZmxleGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBUaGFua3MgdG8gVG9yc3RlbiBCZWNrZXIgZm9yIHRoZQorICBpbml0aWFsIGltcGxlbWVudGF0aW9uLCBhbmQgVmljdG9yIFN0aW5uZXIgZm9yIHZhcmlvdXMgYnVnIGZpeGVzLgorCistIElzc3VlICMxNDA4MTogVGhlICdzZXAnIGFuZCAnbWF4c3BsaXQnIHBhcmFtZXRlciB0byBzdHIuc3BsaXQsIGJ5dGVzLnNwbGl0LAorICBhbmQgYnl0ZWFycmF5LnNwbGl0IG1heSBub3cgYmUgcGFzc2VkIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxMzAxMjogVGhlICdrZWVwZW5kcycgcGFyYW1ldGVyIHRvIHN0ci5zcGxpdGxpbmVzIG1heSBub3cgYmUgcGFzc2VkCisgIGFzIGEga2V5d29yZCBhcmd1bWVudDogICJteV9zdHJpbmcuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSIuICBUaGUgc2FtZQorICBjaGFuZ2UgYWxzbyBhcHBsaWVzIHRvIGJ5dGVzLnNwbGl0bGluZXMgYW5kIGJ5dGVhcnJheS5zcGxpdGxpbmVzLgorCistIElzc3VlICM3NzMyOiBEb24ndCBvcGVuIGEgZGlyZWN0b3J5IGFzIGEgZmlsZSBhbnltb3JlIHdoaWxlIGltcG9ydGluZyBhCisgIG1vZHVsZS4gSWdub3JlIHRoZSBkaXJlY290cnkgaWYgaXRzIG5hbWUgbWF0Y2hzIHRoZSBtb2R1bGUgbmFtZSAoZS5nLgorICAiX19pbml0X18ucHkiKSBhbmQgcmFpc2UgYSBJbXBvcnRFcnJvciBpbnN0ZWFkLgorCistIElzc3VlICMxMzAyMTogTWlzc2luZyBkZWNyZWYgb24gYW4gZXJyb3IgcGF0aC4gIFRoYW5rcyB0byBTdW1hbiBTYWhhIGZvcgorICBmaW5kaW5nIHRoZSBidWcgYW5kIHByb3ZpZGluZyBhIHBhdGNoLgorCistIElzc3VlICMxMjk3MzogRml4IG92ZXJmbG93IGNoZWNrcyB0aGF0IHJlbGllZCBvbiB1bmRlZmluZWQgYmVoYXZpb3VyIGluCisgIGxpc3RfcmVwZWF0IChsaXN0b2JqZWN0LmMpIGFuZCBpc2xpY2VfbmV4dCAoaXRlcnRvb2xzbW9kdWxlLmMpLiAgVGhlc2UgYnVncworICBjYXVzZWQgdGVzdCBmYWlsdXJlcyB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZiBDbGFuZy4KKworLSBJc3N1ZSAjMTI5MDQ6IG9zLnV0aW1lLCBvcy5mdXRpbWVzLCBvcy5sdXRpbWVzLCBhbmQgb3MuZnV0aW1lc2F0IG5vdyB3cml0ZQorICBhdGltZSBhbmQgbXRpbWUgd2l0aCBuYW5vc2Vjb25kIHByZWNpc2lvbiBvbiBtb2Rlcm4gUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgwMjogdGhlIFdpbmRvd3MgZXJyb3IgRVJST1JfRElSRUNUT1JZIChudW1iZXJlZCAyNjcpIGlzIG5vdworICBtYXBwZWQgdG8gUE9TSVggZXJybm8gRU5PVERJUiAocHJldmlvdXNseSBFSU5WQUwpLgorCistIElzc3VlICM5MjAwOiBUaGUgc3RyLmlzKiBtZXRob2RzIG5vdyB3b3JrIHdpdGggc3RyaW5ncyB0aGF0IGNvbnRhaW4gbm9uLUJNUAorICBjaGFyYWN0ZXJzIGV2ZW4gaW4gbmFycm93IFVuaWNvZGUgYnVpbGRzLgorCistIElzc3VlICMxMjc5MTogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBlYXJseSB3aGVuIGEgZ2VuZXJhdG9yIGV4aXRzIHdpdGgKKyAgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxMjc3MzogTWFrZSBfX2RvY19fIG11dGFibGUgb24gdXNlci1kZWZpbmVkIGNsYXNzZXMuCisKKy0gSXNzdWUgIzEyNzY2OiBSYWlzZSBhIFZhbHVlRXJyb3Igd2hlbiBjcmVhdGluZyBhIGNsYXNzIHdpdGggYSBjbGFzcyB2YXJpYWJsZQorICB0aGF0IGNvbmZsaWN0cyB3aXRoIGEgbmFtZSBpbiBfX3Nsb3RzX18uCisKKy0gSXNzdWUgIzEyMjY2OiBGaXggc3RyLmNhcGl0YWxpemUoKSB0byBjb3JyZWN0bHkgdXBwZXJjYXNlL2xvd2VyY2FzZQorICB0aXRsZWNhc2VkIGFuZCBjYXNlZCBub24tbGV0dGVyIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzEyNzMyOiBJbiBuYXJyb3cgdW5pY29kZSBidWlsZHMsIGFsbG93IFVuaWNvZGUgaWRlbnRpZmllcnMgd2hpY2ggZmFsbAorICBvdXRzaWRlIHRoZSBCTVAuCisKKy0gSXNzdWUgIzEyNTc1OiBWYWxpZGF0ZSB1c2VyLWdlbmVyYXRlZCBBU1QgYmVmb3JlIGl0IGlzIGNvbXBpbGVkLgorCistIE1ha2UgdHlwZShOb25lKSwgdHlwZShFbGxpcHNpcyksIGFuZCB0eXBlKE5vdEltcGxlbWVudGVkKSBjYWxsYWJsZS4gVGhleQorICByZXR1cm4gdGhlIHJlc3BlY3RpdmUgc2luZ2xldG9uIGluc3RhbmNlcy4KKworLSBGb3JiaWQgc3VtbWluZyBieXRlcyB3aXRoIHN1bSgpLgorCistIFZlcmlmeSB0aGUgdHlwZXMgb2YgQVNUIHN0cmluZ3MgYW5kIGlkZW50aWZpZXJzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIGJlZm9yZQorICBjb21waWxpbmcgdGhlbS4KKworLSBJc3N1ZSAjMTI2NDc6IFRoZSBOb25lIG9iamVjdCBub3cgaGFzIGEgX19ib29sX18oKSBtZXRob2QgdGhhdCByZXR1cm5zIEZhbHNlLgorICBGb3JtZXJseSwgYm9vbChOb25lKSByZXR1cm5lZCBGYWxzZSBvbmx5IGJlY2F1c2Ugb2Ygc3BlY2lhbCBjYXNlIGxvZ2ljCisgIGluIFB5T2JqZWN0X0lzVHJ1ZSgpLgorCistIElzc3VlICMxMjU3OTogc3RyLmZvcm1hdF9tYXAoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB1c2VkIG9uIGEKKyAgZm9ybWF0IHN0cmluZyB0aGF0IGNvbnRhaW5zIHBvc2l0aW9uYWwgZmllbGRzLiBJbml0aWFsIHBhdGNoIGJ5CisgIEp1bGlhbiBCZXJtYW4uCisKKy0gSXNzdWUgIzEwMjcxOiBBbGxvdyB3YXJuaW5ncy5zaG93d2FybmluZygpIGJlIGFueSBjYWxsYWJsZS4KKworLSBJc3N1ZSAjMTE2Mjc6IEZpeCBzZWdmYXVsdCB3aGVuIF9fbmV3X18gb24gYSBleGNlcHRpb24gcmV0dXJucyBhCisgIG5vbi1leGNlcHRpb24gY2xhc3MuCisKKy0gSXNzdWUgIzEyMTQ5OiBVcGRhdGUgdGhlIG1ldGhvZCBjYWNoZSBhZnRlciBhIHR5cGUncyBkaWN0aW9uYXJ5IGdldHMKKyAgY2xlYXJlZCBieSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IuICBUaGlzIGZpeGVzIGEgc2VnZmF1bHQgd2hlbiBhbiBpbnN0YW5jZQorICBhbmQgaXRzIHR5cGUgZ2V0IGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZSwgYW5kIHRoZSBpbnN0YW5jZSdzCisgIGRlYWxsb2NhdG9yIGNhbGxzIG9uZSBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgdHlwZSAoZS5nLiB3aGVuIHN1YmNsYXNzaW5nCisgIElPQmFzZSkuICBEaWFnbm9zaXMgYW5kIHBhdGNoIGJ5IERhdmlkZSBSaXp6by4KKworLSBJc3N1ZSAjOTYxMSwgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgorCistIElzc3VlICM5NjQyOiBVbmlmb3JtaXplIHRoZSB0ZXN0cyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBtYmNzIGNvZGVjLCBhZGQKKyAgYSBuZXcgSEFWRV9NQkNTIGRlZmluZS4KKworLSBJc3N1ZSAjOTY0MjogRml4IGZpbGVzeXN0ZW0gZW5jb2RpbmcgaW5pdGlhbGl6YXRpb246IHVzZSB0aGUgQU5TSSBjb2RlIHBhZ2UKKyAgb24gV2luZG93cyBpZiB0aGUgbWJjcyBjb2RlYyBpcyBub3QgYXZhaWxhYmxlLCBhbmQgZmFpbCB3aXRoIGEgZmF0YWwgZXJyb3IgaWYKKyAgd2UgY2Fubm90IGdldCB0aGUgbG9jYWxlIGVuY29kaW5nIChpZiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub3QgYXZhaWxhYmxlKQorICBpbnN0ZWFkIG9mIHVzaW5nIFVURi04LgorCistIFdoZW4gYSBnZW5lcmF0b3IgeWllbGRzLCBkbyBub3QgcmV0YWluIHRoZSBjYWxsZXIncyBleGNlcHRpb24gc3RhdGUgb24gdGhlCisgIGdlbmVyYXRvci4KKworLSBJc3N1ZSAjMTI0NzU6IFByZXZlbnQgZ2VuZXJhdG9ycyBmcm9tIGxlYWtpbmcgdGhlaXIgZXhjZXB0aW9uIHN0YXRlIGludG8gdGhlCisgIGNhbGxlcidzIGZyYW1lIGFzIHRoZXkgcmV0dXJuIGZvciB0aGUgbGFzdCB0aW1lLgorCistIElzc3VlICMxMjI5MTogWW91IGNhbiBub3cgbG9hZCBtdWx0aXBsZSBtYXJzaGFsbGVkIG9iamVjdHMgZnJvbSBhIHN0cmVhbSwKKyAgd2l0aCBvdGhlciBkYXRhIGludGVybGVhdmVkIGJldHdlZW4gbWFyc2hhbGxlZCBvYmplY3RzLgorCistIElzc3VlICMxMjM1NjogV2hlbiByZXF1aXJlZCBwb3NpdGlvbmFsIG9yIGtleXdvcmQtb25seSBhcmd1bWVudHMgYXJlIG5vdAorICBnaXZlbiwgcHJvZHVjZSBhIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIG5hbWUocykgb2YgdGhlCisgIG1pc3NpbmcgYXJndW1lbnRzLgorCistIElzc3VlICMxMjM3MDogRml4IHN1cGVyIHdpdGggbm8gYXJndW1lbnRzIHdoZW4gX19jbGFzc19fIGlzIG92ZXJyaWRlbiBpbiB0aGUKKyAgY2xhc3MgYm9keS4KKworLSBJc3N1ZSAjMTIwODQ6IG9zLnN0YXQgb24gV2luZG93cyBub3cgd29ya3MgcHJvcGVybHkgd2l0aCByZWxhdGl2ZSBzeW1ib2xpYworICBsaW5rcyB3aGVuIGNhbGxlZCBmcm9tIGFueSBkaXJlY3RvcnkuCisKKy0gTG9vc2VuIHR5cGUgcmVzdHJpY3Rpb25zIG9uIHRoZSBfX2Rpcl9fIG1ldGhvZC4gX19kaXJfXyBjYW4gbm93IHJldHVybiBhbnkKKyAgc2VxdWVuY2UsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGlzdCBhbmQgc29ydGVkIGJ5IGRpcigpLgorCistIElzc3VlICMxMjI2NTogTWFrZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBieSBwYXNzaW5nIGFuIGludmFsaWQgc2V0IG9mCisgIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIG1vcmUgaW5mb3JtYXRpdmUuCisKKy0gSXNzdWUgIzEyMjI1OiBTdGlsbCBhbGxvdyBQeXRob24gdG8gYnVpbGQgaWYgUHl0aG9uIGlzIG5vdCBpbiBpdHMgaGcgcmVwbyBvcgorICBtZXJjdXJpYWwgaXMgbm90IGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE5NTogbXlfZmdldHMoKSBub3cgYWx3YXlzIGNsZWFycyBlcnJvcnMgYmVmb3JlIGNhbGxpbmcgZmdldHMoKS4gRml4CisgIHRoZSBmb2xsb3dpbmcgY2FzZTogc3lzLnN0ZGluLnJlYWQoKSBzdG9wcGVkIHdpdGggQ1RSTCtkIChlbmQgb2YgZmlsZSksCisgIHJhd19pbnB1dCgpIGludGVycnVwdGVkIGJ5IENUUkwrYy4KKworLSBJc3N1ZSAjMTIyMTY6IEFsbG93IHVuZXhwZWN0ZWQgRU9GIGVycm9ycyB0byBoYXBwZW4gb24gYW55IGxpbmUgb2YgdGhlIGZpbGUuCisKKy0gSXNzdWUgIzEyMTk5OiBUaGUgVHJ5RXhjZXB0IGFuZCBUcnlGaW5hbGx5IGFuZCBBU1Qgbm9kZXMgaGF2ZSBiZWVuIHVuaWZpZWQKKyAgaW50byBhIFRyeSBub2RlLgorCistIElzc3VlICM5NjcwOiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCBhbmQgRnJlZUJTRCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgYSBjcmFzaCBpbnN0ZWFkIG9mIGEKKyAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLgorICAocGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjEwNjogVGhlIHVzZSBvZiB0aGUgbXVsdGlwbGUtd2l0aCBzaG9ydGhhbmQgc3ludGF4IGlzIG5vdyByZWZsZWN0ZWQKKyAgaW4gdGhlIEFTVC4KKworLSBJc3N1ZSAjMTIxOTA6IFRyeSB0byB1c2UgdGhlIHNhbWUgZmlsZW5hbWUgb2JqZWN0IHdoZW4gY29tcGlsaW5nIHVubWFyc2hhbGxpbmcKKyAgYSBjb2RlIG9iamVjdHMgaW4gdGhlIHNhbWUgZmlsZS4KKworLSBJc3N1ZSAjMTIxNjY6IE1vdmUgaW1wbGVtZW50YXRpb25zIG9mIGRpcigpIHNwZWNpYWxpemVkIGZvciB2YXJpb3VzIHR5cGVzIGludG8KKyAgdGhlIF9fZGlyX18oKSBtZXRob2RzIG9mIHRob3NlIHR5cGVzLgorCistIElzc3VlICM1NzE1OiBJbiBzb2NrZXRzZXJ2ZXIsIGNsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIENvcnJlY3QgbG9va3VwIG9mIF9fZGlyX18gb24gb2JqZWN0cy4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhdXNlcyBlcnJvcnMKKyAgYmVzaWRlcyBBdHRyaWJ1dGVFcnJvciBmb3VuZCBvbiBsb29rdXAgdG8gYmUgcHJvcGFnYXRlZC4KKworLSBJc3N1ZSAjMTIwNjA6IFVzZSBzaWdfYXRvbWljX3QgdHlwZSBhbmQgdm9sYXRpbGUga2V5d29yZCBpbiB0aGUgc2lnbmFsCisgIG1vZHVsZS4gUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE3NDY2NTY6IEFkZGVkIHRoZSBpZl9uYW1laW5kZXgsIGlmX2luZGV4dG9uYW1lLCBpZl9uYW1ldG9pbmRleAorICBtZXRob2RzIHRvIHRoZSBzb2NrZXQgbW9kdWxlLgorCistIElzc3VlICMxMjA0NDogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbiB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KKyAgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gZW5kIHdoZW4gZXhpdGluZyB0aGUgY29udGV4dCB0byBhdm9pZCB1bmludGVudGlvbmFsbHkKKyAgbGVhdmluZyB6b21iaWUgcHJvY2Vzc2VzIGFyb3VuZC4KKworLSBJc3N1ZSAjMTE5NTogRml4IGlucHV0KCkgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgQ1RSTCtkIGFuZCB0aGVuIENUUkwrYywKKyAgY2xlYXIgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBhZnRlciBDVFJMK2QuCisKKy0gSXNzdWUgIzE4NTY6IEF2b2lkIGNyYXNoZXMgYW5kIGxvY2t1cHMgd2hlbiBkYWVtb24gdGhyZWFkcyBydW4gd2hpbGUgdGhlCisgIGludGVycHJldGVyIGlzIHNodXR0aW5nIGRvd247IGluc3RlYWQsIHRoZXNlIHRocmVhZHMgYXJlIG5vdyBraWxsZWQgd2hlbgorICB0aGV5IHRyeSB0byB0YWtlIHRoZSBHSUwuCisKKy0gSXNzdWUgIzk3NTY6IFdoZW4gY2FsbGluZyBhIG1ldGhvZCBkZXNjcmlwdG9yIG9yIGEgc2xvdCB3cmFwcGVyIGRlc2NyaXB0b3IsCisgIHRoZSBjaGVjayBvZiB0aGUgb2JqZWN0IHR5cGUgZG9lc24ndCByZWFkIHRoZSBfX2NsYXNzX18gYXR0cmlidXRlIGFueW1vcmUuCisgIEZpeCBhIGNyYXNoIGlmIGEgY2xhc3Mgb3ZlcnJpZGUgaXRzIF9fY2xhc3NfXyBhdHRyaWJ1dGUgKGUuZy4gYSBwcm94eSBvZiB0aGUKKyAgc3RyIHR5cGUpLiBQYXRjaCB3cml0dGVuIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTA1MTc6IEFmdGVyIGZvcmsoKSwgcmVpbml0aWFsaXplIHRoZSBUTFMgdXNlZCBieSB0aGUgUHlHSUxTdGF0ZV8qCisgIEFQSXMsIHRvIGF2b2lkIGEgY3Jhc2ggd2l0aCB0aGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBpbiBSSEVMIDUuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEwOTE0OiBJbml0aWFsaXplIGNvcnJlY3RseSB0aGUgZmlsZXN5c3RlbSBjb2RlYyB3aGVuIGNyZWF0aW5nIGEgbmV3CisgIHN1YmludGVycHJldGVyIHRvIGZpeCBhIGJvb3RzdHJhcCBpc3N1ZSB3aXRoIGNvZGVjcyBpbXBsZW1lbnRlZCBpbiBQeXRob24sIGFzCisgIHRoZSBJU08tODg1OS0xNSBjb2RlYy4KKworLSBJc3N1ZSAjMTE5MTg6IE9TLzIgYW5kIFZNUyBhcmUgbm8gbW9yZSBzdXBwb3J0ZWQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZgorICBtYWludGFpbmVyLgorCistIElzc3VlICM2NzgwOiBmaXggc3RhcnRzL2VuZHN3aXRoIGVycm9yIG1lc3NhZ2UgdG8gbWVudGlvbiB0aGF0IHR1cGxlcyBhcmUKKyAgYWNjZXB0ZWQgdG9vLgorCistIElzc3VlICM1MDU3OiBmaXggYSBidWcgaW4gdGhlIHBlZXBob2xlciB0aGF0IGxlZCB0byBub24tcG9ydGFibGUgcHljIGZpbGVzCisgIGJldHdlZW4gbmFycm93IGFuZCB3aWRlIGJ1aWxkcyB3aGlsZSBvcHRpbWl6aW5nIEJJTkFSWV9TVUJTQ1Igb24gbm9uLUJNUAorICBjaGFycyAoZS5nLiAiXFUwMDAxMjM0NSJbMF0pLgorCistIElzc3VlICMxMTg0NTogRml4IHR5cG8gaW4gcmFuZ2VvYmplY3QuYyB0aGF0IGNhdXNlZCBhIGNyYXNoIGluCisgIGNvbXB1dGVfc2xpY2VfaW5kaWNlcy4gIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjNTY3MzogQWRkZWQgYSBgdGltZW91dGAga2V5d29yZCBhcmd1bWVudCB0byBzdWJwcm9jZXNzLlBvcGVuLndhaXQsCisgIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGVkLCBzdWJwcm9jZXNzLmNhbGwsIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCwgYW5kCisgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LiAgSWYgdGhlIGJsb2NraW5nIG9wZXJhdGlvbiB0YWtlcyBtb3JlIHRoYW4gYHRpbWVvdXRgCisgIHNlY29uZHMsIHRoZSBgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTE2NTA6IFB5T1NfU3RkaW9SZWFkbGluZSgpIHJldHJpZXMgZmdldHMoKSBpZiBpdCB3YXMgaW50ZXJydXB0ZWQKKyAgKEVJTlRSKSwgZm9yIGV4YW1wbGUgaWYgdGhlIHByb2dyYW0gaXMgc3RvcHBlZCB3aXRoIENUUkwreiBvbiBNYWMgT1MgWC4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTMxOTogSW5jbHVkZSB0aGUgZmlsZW5hbWUgaW4gIk5vbi1VVEY4IGNvZGUgLi4uIiBzeW50YXggZXJyb3IuCisKKy0gSXNzdWUgIzEwNzg1OiBTdG9yZSB0aGUgZmlsZW5hbWUgYXMgVW5pY29kZSBpbiB0aGUgUHl0aG9uIHBhcnNlci4KKworLSBJc3N1ZSAjMTE2MTk6IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSgpIGRvZXNuJ3QgZW5jb2RlIHRoZSBwYXRoIHRvIGJ5dGVzCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEwOTk4OiBSZW1vdmUgbWVudGlvbnMgb2YgLVEsIHN5cy5mbGFncy5kaXZpc2lvbl93YXJuaW5nIGFuZAorICBQeV9EaXZpc2lvbldhcm5pbmdGbGFnIGxlZnQgb3ZlciBmcm9tIFB5dGhvbiAyLgorCistIElzc3VlICMxMTI0NDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IHBlZXBob2xlciBjaGVjayB0aGF0IHdhcyBwcmV2ZW50aW5nCisgIG5lZ2F0aXZlIHplcm9zIGZyb20gYmVpbmcgY29uc3RhbnQtZm9sZGVkIHByb3Blcmx5LgorCistIElzc3VlICMxMTM5NTogaW8uRmlsZUlPKCkud3JpdGUoKSBjbGFtcHMgdGhlIGRhdGEgbGVuZ3RoIHRvIDMyLDc2NyBieXRlcyBvbgorICBXaW5kb3dzIGlmIHRoZSBmaWxlIGlzIGEgVFRZIHRvIHdvcmthcm91bmQgYSBXaW5kb3dzIGJ1Zy4gVGhlIFdpbmRvd3MgY29uc29sZQorICByZXR1cm5zIGFuIGVycm9yICgxMjogbm90IGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZgorICBzdGRvdXQgbW9kZSBpcyBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLgorCistIElzc3VlICMxMTMyMDogZml4IGJvZ3VzIG1lbW9yeSBtYW5hZ2VtZW50IGluIE1vZHVsZXMvZ2V0cGF0aC5jLCBsZWFkaW5nIHRvCisgIGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjYWxsaW5nIFB5X1NldFBhdGgoKS4KKworLSBJc3N1ZSAjMTE0MzI6IEEgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHN1YnByb2Nlc3MuUG9wZW4gb24gcG9zaXggc3lzdGVtcyB3aXRoCisgIDMuMi4wIHdoZXJlIHRoZSBzdGRvdXQgb3Igc3RkZXJyIGZpbGUgZGVzY3JpcHRvciBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc3RkaW4KKyAgZmlsZSBkZXNjcmlwdG9yIHdvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4gd2ViYnJvd3Nlci5vcGVuIHdvdWxkIGZhaWwuIGZpeGVkLgorCistIElzc3VlICM5ODU2OiBDaGFuZ2Ugb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nCisgIHRvIGJlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBJbiAzLjIgaXQgd2FzIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KKyAgSW4gMy40IGl0IHdpbGwgYmUgYSBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExMjQ0OiBUaGUgcGVlcGhvbGUgb3B0aW1pemVyIGlzIG5vdyBhYmxlIHRvIGNvbnN0YW50LWZvbGQKKyAgYXJiaXRyYXJpbHkgY29tcGxleCBleHByZXNzaW9ucy4gIFRoaXMgYWxzbyBmaXhlcyBhIDMuMiByZWdyZXNzaW9uIHdoZXJlCisgIG9wZXJhdGlvbnMgaW52b2x2aW5nIG5lZ2F0aXZlIG51bWJlcnMgd2VyZSBub3QgY29uc3RhbnQtZm9sZGVkLgorCistIElzc3VlICMxMTQ1MDogRG9uJ3QgdHJ1bmNhdGUgaGcgdmVyc2lvbiBpbmZvIGluIFB5X0dldEJ1aWxkSW5mbygpIHdoZW4KKyAgdGhlcmUgYXJlIG1hbnkgdGFncyAoZS5nLiB3aGVuIHVzaW5nIG1xKS4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTEzMzU6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gbGlzdC5zb3J0IHdoZW4gdGhlIGtleSBmdW5jdGlvbgorICB0aHJvd3MgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM4OTIzOiBXaGVuIGEgc3RyaW5nIGlzIGVuY29kZWQgdG8gVVRGLTggaW4gc3RyaWN0IG1vZGUsIHRoZSByZXN1bHQgaXMKKyAgY2FjaGVkIGludG8gdGhlIG9iamVjdC4gRXhhbXBsZXM6IHN0ci5lbmNvZGUoKSwgc3RyLmVuY29kZSgndXRmLTgnKSwKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGFuZCBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHVuaWNvZGUsICJ1dGYtOCIsCisgIE5VTEwpLgorCistIElzc3VlICMxMDgzMTogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBzdXBwb3J0cyAlbGksICVsbGkgYW5kICV6aSBmb3JtYXRzLgorCistIElzc3VlICMxMDgyOTogUmVmYWN0b3IgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSwgdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIHRvIHBhcnNlCisgIHRoZSBmb3JtYXQgc3RyaW5nIGluIHRoZSAzIHN0ZXBzLCBmaXggY3Jhc2hzIG9uIGludmFsaWQgZm9ybWF0IHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzMDA3OiB3aGljaGRiIHNob3VsZCByZWNvZ25pemUgZ2RibSAxLjkgbWFnaWMgbnVtYmVycy4KKworLSBJc3N1ZSAjMTEyNDY6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVYiKSB0byBkZWNvZGUgdGhlIGJ5dGUgc3RyaW5nIGZyb20KKyAgVVRGLTggKHdpdGggcmVwbGFjZSBlcnJvciBoYW5kbGVyKSBpbnN0ZWFkIG9mIElTTy04ODU5LTEgKGluIHN0cmljdCBtb2RlKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBSYXkgQWxsZW4uCisKKy0gSXNzdWUgIzExMjg2OiBSYWlzZSBhIFZhbHVlRXJyb3IgZnJvbSBjYWxsaW5nIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyIHdpdGgKKyAgYSBidWZmZXIgc3RydWN0IGhhdmluZyBhIE5VTEwgZGF0YSBwb2ludGVyLgorCistIElzc3VlICMxMTI3MjogT24gV2luZG93cywgaW5wdXQoKSBzdHJpcHMgJ1xyJyAoYW5kIG5vdCBvbmx5ICdcbicpLCBhbmQKKyAgc3lzLnN0ZGluIHVzZXMgdW5pdmVyc2FsIG5ld2xpbmUgKHJlcGxhY2UgJ1xyXG4nIGJ5ICdcbicpLgorCistIElzc3VlICMxMTgyODogc3RhcnRzd2l0aCBhbmQgZW5kc3dpdGggbm93IGFjY2VwdCBOb25lIGFzIHNsaWNlIGluZGV4LgorICBQYXRjaCBieSBUb3JzdGVuIEJlY2tlci4KKworLSBJc3N1ZSAjMTA4MzA6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoIiVjIikgZm9yIG5vbi1CTVAgY2hhcmFjdGVycyBvbgorICBuYXJyb3cgYnVpbGQuCisKKy0gSXNzdWUgIzExMTY4OiBSZW1vdmUgZmlsZW5hbWUgZGVidWcgdmFyaWFibGUgZnJvbSBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKyAgSXQgZW5jb2RlZCB0aGUgVW5pY29kZSBmaWxlbmFtZSB0byBVVEYtOCwgYnV0IHRoZSBlbmNvZGluZyBmYWlscyBvbgorICB1bmRlY29kYWJsZSBmaWxlbmFtZSAob24gc3Vycm9nYXRlIGNoYXJhY3RlcnMpIHdoaWNoIHJhaXNlcyBhbiB1bmV4cGVjdGVkCisgIFVuaWNvZGVFbmNvZGVFcnJvciBvbiByZWN1cnNpb24gbGltaXQuCisKKy0gSXNzdWUgIzExMTg3OiBSZW1vdmUgYm9vdHN0cmFwIGNvZGUgKHVzZSBBU0NJSSkgb2YKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygpLCBpdCB3YXMgcmVwbGFjZWQgYnkgYSBiZXR0ZXIgZmFsbGJhY2sgKHVzZSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nKSBpbiBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCkuCisKKy0gQ2hlY2sgZm9yIE5VTEwgcmVzdWx0IGluIFB5VHlwZV9Gcm9tU3BlYy4KKworLSBJc3N1ZSAjMTA1MTY6IE5ldyBjb3B5KCkgYW5kIGNsZWFyKCkgbWV0aG9kcyBmb3IgbGlzdHMgYW5kIGJ5dGVhcnJheXMuCisKKy0gSXNzdWUgIzExMzg2OiBieXRlYXJyYXkucG9wKCkgbm93IHRocm93cyBJbmRleEVycm9yIHdoZW4gdGhlIGJ5dGVhcnJheSBpcworICBlbXB0eSwgaW5zdGVhZCBvZiBPdmVyZmxvd0Vycm9yLgorCistIElzc3VlICMxMjM4MDogVGhlIHJqdXN0LCBsanVzdCBhbmQgY2VudGVyIG1ldGhvZHMgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheQorICBub3cgYWNjZXB0IGEgYnl0ZWFycmF5IGFyZ3VtZW50LgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MTk1OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCB3ZWFrcmVmLldlYWtTZXQgaW5zdGFuY2VzIHRvIGluY29ycmVjdGx5CisgIHJldHVybiBUcnVlIGZvciBhIFdlYWtTZXQgaW5zdGFuY2UgJ2EnIGluIGJvdGggJ2EgPCBhJyBhbmQgJ2EgPiBhJyBoYXMgYmVlbgorICBmaXhlZC4KKworLSBJc3N1ZSAjMTQxNjY6IFBpY2tsZXIgb2JqZWN0cyBub3cgaGF2ZSBhbiBvcHRpb25hbCBgYGRpc3BhdGNoX3RhYmxlYGAKKyAgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0byBzZXQgY3VzdG9tIHBlci1waWNrbGVyIHJlZHVjdGlvbiBmdW5jdGlvbnMuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQxNzc6IG1hcnNoYWwubG9hZHMoKSBub3cgcmFpc2VzIFR5cGVFcnJvciB3aGVuIGdpdmVuIGFuIHVuaWNvZGUKKyAgc3RyaW5nLiAgUGF0Y2ggYnkgR3VpbGhlcm1lIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzNTUwOiBSZW1vdmUgdGhlIGRlYnVnIG1hY2hpbmVyeSBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlOiByZW1vdmUKKyAgdmVyYm9zZSBhcmd1bWVudHMgZnJvbSBhbGwgdGhyZWFkaW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTQxNTk6IEZpeCB0aGUgbGVuKCkgb2Ygd2VhayBjb250YWluZXJzIChXZWFrU2V0LCBXZWFrS2V5RGljdGlvbmFyeSwKKyAgV2Vha1ZhbHVlRGljdGlvbmFyeSkgdG8gcmV0dXJuIGEgYmV0dGVyIGFwcHJveGltYXRpb24gd2hlbiBzb21lIG9iamVjdHMKKyAgYXJlIGRlYWQgb3IgZHlpbmcuICBNb3Jlb3ZlciwgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdyBPKDEpIHJhdGhlciB0aGFuCisgIE8obikuCisKKy0gSXNzdWUgIzEzMTI1OiBTaWxlbmNlIHNwdXJpb3VzIHRlc3RfbGliMnRvMyBvdXRwdXQgd2hlbiBpbiBub24tdmVyYm9zZSBtb2RlLgorICBQYXRjaCBieSBNaWtoYWlsIE5vdmlrb3YuCisKKy0gSXNzdWUgIzExODQxOiBGaXggY29tcGFyaXNvbiBidWcgd2l0aCAncmMnIHZlcnNpb25zIGluIHBhY2thZ2luZy52ZXJzaW9uLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMzQ0NzogQWRkIGEgdGVzdCBmaWxlIHRvIGhvc3QgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYnVncyBpbiB0aGUKKyAgc2NyaXB0cyBmb3VuZCBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCistIElzc3VlICM2ODg0OiBGaXggbG9uZy1zdGFuZGluZyBidWdzIHdpdGggTUFOSUZFU1QuaW4gcGFyc2luZyBpbiBkaXN0dXRpbHMKKyAgb24gV2luZG93cy4gIEFsc28gZml4ZWQgaW4gcGFja2FnaW5nLgorCistIElzc3VlICM4MDMzOiBzcWxpdGUzOiBGaXggNjQtYml0IGludGVnZXIgaGFuZGxpbmcgaW4gdXNlciBmdW5jdGlvbnMKKyAgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuIEluaXRpYWwgcGF0Y2ggYnkgUGhpbGlwcGUgRGV2YWxrZW5lZXIuCisKKy0gSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgc2xhc2hlcyBpbiB0aGUgc3RhcnQgdGFnLgorCistIElzc3VlICMxMzY0MTogRGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoZSBiYXNlNjQgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxNDA0MzogU3BlZWQgdXAgaW1wb3J0bGliJ3MgX0ZpbGVGaW5kZXIgYnkgYXQgbGVhc3QgOHgsIGFuZCBhZGQgYQorICBuZXcgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE0MDAxOiBDVkUtMjAxMi0wODQ1OiB4bWxycGM6IEZpeCBhbiBlbmRsZXNzIGxvb3AgaW4KKyAgU2ltcGxlWE1MUlBDU2VydmVyIHVwb24gbWFsZm9ybWVkIFBPU1QgcmVxdWVzdC4KKworLSBJc3N1ZSAjMTM5NjE6IE1vdmUgaW1wb3J0bGliIG92ZXIgdG8gdXNpbmcgb3MucmVwbGFjZSgpIGZvciBhdG9taWMgcmVuYW1pbmcuCisKKy0gRG8gYXdheSB3aXRoIGFtYmlndW91cyBsZXZlbCB2YWx1ZXMgKGFzIHN1Z2dlc3RlZCBieSBQRVAgMzI4KSBpbgorICBpbXBvcnRsaWIuX19pbXBvcnRfXygpIGJ5IHJhaXNpbmcgVmFsdWVFcnJvciB3aGVuIGxldmVsIDwgMC4KKworLSBJc3N1ZSAjMjQ4OTogcHR5LnNwYXduIGNvdWxkIGNvbnN1bWUgMTAwJSBjcHUgd2hlbiBpdCBlbmNvdW50ZXJlZCBhbiBFT0YuCisKKy0gSXNzdWUgIzEzMDE0OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKS4KKworLSBJc3N1ZSAjMTM3Nzc6IEFkZCBQRl9TWVNURU0gc29ja2V0cyBvbiBPUyBYLgorICBQYXRjaCBieSBNaWNoYWVsIEdvZGVyYmF1ZXIuCisKKy0gSXNzdWUgIzEzMDE1OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBkZWZhdWx0ZGljdC5fX3JlcHJfXy4KKyAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTMyNjExMzogZGlzdHV0aWxzJyBhbmQgcGFja2FnaW5nJ3MgYnVpbGRfZXh0IGNvbW1hbmRzIG9wdGlvbiBub3cKKyAgY29ycmVjdGx5IHBhcnNlcyBtdWx0aXBsZSB2YWx1ZXMgKHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIG9yIGNvbW1hcykgZ2l2ZW4KKyAgdG8gdGhlaXIgLS1saWJyYXJpZXMgb3B0aW9uLgorCistIElzc3VlICMxMDI4Nzogbm50cGxpYiBub3cgcXVlcmllcyB0aGUgc2VydmVyJ3MgQ0FQQUJJTElUSUVTIGZpcnN0IGJlZm9yZQorICBzZW5kaW5nIE1PREUgUkVBREVSLCBhbmQgb25seSBzZW5kcyBpdCBpZiBub3QgYWxyZWFkeSBpbiBSRUFERVIgbW9kZS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk5MzogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGVuZCB0YWdzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkzMDogbGliMnRvMyBub3cgc3VwcG9ydHMgd3JpdGluZyBjb252ZXJ0ZWQgb3V0cHV0IGZpbGVzIHRvIGFub3RoZXIKKyAgZGlyZWN0b3J5IHRyZWUgYXMgd2VsbCBhcyBjb3B5aW5nIHVuY2hhbmdlZCBmaWxlcyBhbmQgYWx0ZXJpbmcgdGhlIGZpbGUKKyAgc3VmZml4LgorCistIElzc3VlICM5NzUwOiBGaXggc3FsaXRlMy5Db25uZWN0aW9uLml0ZXJkdW1wIG9uIHRhYmxlcyBhbmQgZmllbGRzCisgIHdpdGggYSBuYW1lIHRoYXQgaXMgYSBrZXl3b3JkIG9yIGNvbnRhaW5zIHF1b3Rlcy4gUGF0Y2ggYnkgTWFya28KKyAgS29odGFsYS4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBhZ2FpbiBhZnRlcgorICBhdXRoZW50aWNhdGluZyAoc2luY2UgdGhlIHJlc3VsdCBtYXkgY2hhbmdlLCBhY2NvcmRpbmcgdG8gUkZDIDQ2NDMpLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCisgIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjMTM1OTA6IE9uIE9TIFggMTAuNyBhbmQgMTAuNiB3aXRoIFhjb2RlIDQuMiwgYnVpbGRpbmcKKyAgRGlzdHV0aWxzLWJhc2VkIHBhY2thZ2VzIHdpdGggQyBleHRlbnNpb24gbW9kdWxlcyBtYXkgZmFpbCBiZWNhdXNlCisgIEFwcGxlIGhhcyByZW1vdmVkIGdjYy00LjIsIHRoZSB2ZXJzaW9uIHVzZWQgdG8gYnVpbGQgcHl0aG9uLm9yZworICA2NC1iaXQvMzItYml0IFB5dGhvbnMuICBJZiB0aGUgdXNlciBkb2VzIG5vdCBleHBsaWNpdGx5IG92ZXJyaWRlCisgIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgYnkgc2V0dGluZyB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsCisgIERpc3R1dGlscyB3aWxsIG5vdyBhdHRlbXB0IHRvIGNvbXBpbGUgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBjbGFuZworICBpZiBnY2MtNC4yIGlzIHJlcXVpcmVkIGJ1dCBub3QgZm91bmQuIEFsc28gYXMgYSBjb252ZW5pZW5jZSwgaWYKKyAgdGhlIHVzZXIgZG9lcyBleHBsaWNpdGx5IHNldCBDQywgc3Vic3RpdHV0ZSBpdHMgdmFsdWUgYXMgdGhlIGRlZmF1bHQKKyAgY29tcGlsZXIgaW4gdGhlIERpc3R1dGlscyBMRFNIQVJFRCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBPUyBYLgorICAoTm90ZSwgdGhlIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgUHl0aG9ucyB1c2UgZ2NjLTQuMCBhbmQgdGhlIDEwLjR1CisgIFNESywgbmVpdGhlciBvZiB3aGljaCBhcmUgYXZhaWxhYmxlIGluIFhjb2RlIDQuICBUaGlzIGNoYW5nZSBkb2VzIG5vdAorICBhdHRlbXB0IHRvIG92ZXJyaWRlIHNldHRpbmdzIHRvIHN1cHBvcnQgdGhlaXIgdXNlIHdpdGggWGNvZGUgNC4pCisKKy0gSXNzdWUgIzEzOTYwOiBIVE1MUGFyc2VyIGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBicm9rZW4gY29tbWVudHMgd2hlbgorICBzdHJpY3Q9RmFsc2UuCisKKy0gSXNzdWUgIzEzOTIxOiBVbmRvY3VtZW50IGFuZCBjbGVhbiB1cCBzcWxpdGUzLk9wdGltaXplZFVuaWNvZGUsCisgIHdoaWNoIGlzIG9ic29sZXRlIGluIFB5dGhvbiAzLnguIEl0J3Mgbm93IGFsaWFzZWQgdG8gc3RyIGZvcgorICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworLSBXaGVuICcnIGlzIGEgcGF0aCAoZS5nLiBpbiBzeXMucGF0aCksIG1ha2Ugc3VyZSBfX2ZpbGVfXyB1c2VzIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IGluc3RlYWQgb2YgJycgaW4gaW1wb3J0bGliLgorCistIElzc3VlICMxMzYwOTogQWRkIHR3byBmdW5jdGlvbnMgdG8gcXVlcnkgdGhlIHRlcm1pbmFsIHNpemU6CisgIG9zLmdldF90ZXJtaW5hbF9zaXplIChsb3cgbGV2ZWwpIGFuZCBzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemUgKGhpZ2ggbGV2ZWwpLgorICBQYXRjaCBieSBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrLgorCistIElzc3VlICMxMzg0NTogT24gV2luZG93cywgdGltZS50aW1lKCkgbm93IHVzZXMgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKQorICBpbnN0ZWFkIG9mIGZ0aW1lKCkgdG8gaGF2ZSBhIHJlc29sdXRpb24gb2YgMTAwIG5zIGluc3RlYWQgb2YgMSBtcyAodGhlIGNsb2NrCisgIGFjY3VyYWN5IGlzIGJldHdlZW4gMC41IG1zIGFuZCAxNSBtcykuCisKKy0gSXNzdWUgIzEzODQ2OiBBZGQgdGltZS5tb25vdG9uaWMoKSwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICM4MTg0OiBtdWx0aXByb2Nlc3Npbmc6IE9uIFdpbmRvd3MsIGRvbid0IHNldCBTT19SRVVTRUFERFIgb24KKyAgQ29ubmVjdGlvbiBzb2NrZXRzLCBhbmQgc2V0IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFIG9uIG5hbWVkIHBpcGVzLCB0bworICBtYWtlIHN1cmUgdHdvIGxpc3RlbmVycyBjYW4ndCBiaW5kIHRvIHRoZSBzYW1lIHNvY2tldC9waXBlIChvciBhbnkgZXhpc3RpbmcKKyAgc29ja2V0L3BpcGUpLgorCistIElzc3VlICMxMDgxMTogRml4IHJlY3Vyc2l2ZSB1c2FnZSBvZiBjdXJzb3JzLiBJbnN0ZWFkIG9mIGNyYXNoaW5nLAorICByYWlzZSBhIFByb2dyYW1taW5nRXJyb3Igbm93LgorCistIElzc3VlICMxMDg4MTogRml4IHRlc3Rfc2l0ZSBmYWlsdXJlIHdpdGggT1MgWCBmcmFtZXdvcmsgYnVpbGRzLgorCistIElzc3VlICM5NjQ0Mzc6IE1ha2UgSURMRSBoZWxwIHdpbmRvdyBub24tbW9kYWwuCisgIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM3MzQ6IEFkZCBvcy5md2FsaygpLCBhIGRpcmVjdG9yeSB3YWxraW5nIGZ1bmN0aW9uIHlpZWxkaW5nIGZpbGUKKyAgZGVzY3JpcHRvcnMuCisKKy0gSXNzdWUgIzI5NDU6IE1ha2UgdGhlIGRpc3R1dGlscyB1cGxvYWQgY29tbWFuZCBhd2FyZSBvZiBiZGlzdF9ycG0gcHJvZHVjdHMuCisKKy0gSXNzdWUgIzEzNzEyOiBweXNldHVwIGNyZWF0ZSBzaG91bGQgbm90IGNvbnZlcnQgcGFja2FnZV9kYXRhIHRvIGV4dHJhX2ZpbGVzLgorCistIElzc3VlICMxMTgwNTogcGFja2FnZV9kYXRhIGluIHNldHVwLmNmZyBzaG91bGQgYWxsb3cgbW9yZSB0aGFuIG9uZSB2YWx1ZS4KKworLSBJc3N1ZSAjMTM5MzM6IElETEUgYXV0by1jb21wbGV0ZSBkaWQgbm90IHdvcmsgd2l0aCBzb21lIGltcG9ydGVkCisgIG1vZHVsZSwgbGlrZSBoYXNobGliLiAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIElzc3VlICMxMzkwMTogUHJldmVudCB0ZXN0X2Rpc3R1dGlscyBmYWlsdXJlcyBvbiBPUyBYIHdpdGggLS1lbmFibGUtc2hhcmVkLgorCistIElzc3VlICMxMzY3NjogSGFuZGxlIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB6ZXJvcyBjb3JyZWN0bHkgaW4gc3FsaXRlMy4KKworLSBJc3N1ZSAjMTM1MDY6IEFkZCAnJyB0byBwYXRoIGZvciBJRExFIFNoZWxsIHdoZW4gc3RhcnRlZCBhbmQgcmVzdGFydGVkIHdpdGggUmVzdGFydCBTaGVsbC4KKyAgT3JpZ2luYWwgcGF0Y2hlcyBieSBNYXJjbyBTY2F0YWdsaW5pIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODgyODogQWRkIG5ldyBmdW5jdGlvbiBvcy5yZXBsYWNlKCksIGZvciBjcm9zcy1wbGF0Zm9ybSByZW5hbWluZworICB3aXRoIG92ZXJ3cml0aW5nLgorCistIElzc3VlICMxMzg0ODogb3BlbigpIGFuZCB0aGUgRmlsZUlPIGNvbnN0cnVjdG9yIG5vdyBjaGVjayBmb3IgTlVMCisgIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgbmFtZS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM4MDY6IFRoZSBzaXplIGNoZWNrIGluIGF1ZGlvb3AgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMgd2FzIHRvbworICBzdHJpY3QgYW5kIGNvdWxkIHJlamVjdCB2YWxpZCBjb21wcmVzc2VkIGRhdGEuICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgorCistIElzc3VlICMxMzgxMjogV2hlbiBhIG11bHRpcHJvY2Vzc2luZyBQcm9jZXNzIGNoaWxkIHJhaXNlcyBhbiBleGNlcHRpb24sCisgIGZsdXNoIHN0ZGVyciBhZnRlciBwcmludGluZyB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTM4ODU6IENWRS0yMDExLTMzODk6IHRoZSBfc3NsIG1vZHVsZSB3b3VsZCBhbHdheXMgZGlzYWJsZSB0aGUgQ0JDCisgIElWIGF0dGFjayBjb3VudGVybWVhc3VyZS4KKworLSBJc3N1ZSAjMTM4NDc6IHRpbWUubG9jYWx0aW1lKCkgYW5kIHRpbWUuZ210aW1lKCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZAorICBvZiBWYWx1ZUVycm9yIG9uIGZhaWx1cmUuIHRpbWUuY3RpbWUoKSBhbmQgdGltZS5hc2N0aW1lKCkgbm93IHJhaXNlcyBhbgorICBPU0Vycm9yIGlmIGxvY2FsdGltZSgpIGZhaWxlZC4gdGltZS5jbG9jaygpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIHByb2Nlc3NvciB0aW1lIHVzZWQgaXMgbm90IGF2YWlsYWJsZSBvciBpdHMgdmFsdWUgY2Fubm90IGJlIHJlcHJlc2VudGVkCisKKy0gSXNzdWUgIzEzODYyOiBGaXggc3B1cmlvdXMgZmFpbHVyZSBpbiB0ZXN0X3psaWIgZHVlIHRvIHJ1bnRpbWUvY29tcGlsZSB0aW1lCisgIG1pbm9yIHZlcnNpb25zIG5vdCBtYXRjaGluZy4KKworLSBJc3N1ZSAjMTI4MDQ6IEZpeCB0ZXN0X3NvY2tldCBhbmQgdGVzdF91cmxsaWIybmV0IGZhaWx1cmVzIHdoZW4gcnVubmluZyB0ZXN0cworICBvbiBhIHN5c3RlbSB3aXRob3V0IGludGVybmV0IGFjY2Vzcy4KKworLSBJc3N1ZSAjMTM3NzI6IEluIG9zLnN5bWxpbmsoKSB1bmRlciBXaW5kb3dzLCBkbyBub3QgdHJ5IHRvIGd1ZXNzIHRoZSBsaW5rCisgIHRhcmdldCdzIHR5cGUgKGZpbGUgb3IgZGlyZWN0b3J5KS4gIFRoZSBkZXRlY3Rpb24gd2FzIGJ1Z2d5IGFuZCBtYWRlIHRoZQorICBjYWxsIG5vbi1hdG9taWMgKHRoZXJlZm9yZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMpLgorCistIElzc3VlICM2NjMxOiBEaXNhbGxvdyByZWxhdGl2ZSBmaWxlIHBhdGhzIGluIHVybGxpYiB1cmxvcGVuIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEzNzIyOiBBdm9pZCBzaWxlbmNpbmcgSW1wb3J0RXJyb3JzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb2RlY3MKKyAgcmVnaXN0cnkuCisKKy0gSXNzdWUgIzEzNzgxOiBGaXggR3ppcEZpbGUgYnVnIHRoYXQgY2F1c2VkIGFuIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQgd2hlbgorICBvcGVuaW5nIGZvciB3cml0aW5nIHVzaW5nIGEgZmlsZW9iaiByZXR1cm5lZCBieSBvcy5mZG9wZW4oKS4KKworLSBJc3N1ZSAjMTM4MDM6IFVuZGVyIFNvbGFyaXMsIGRpc3R1dGlscyBkb2Vzbid0IGluY2x1ZGUgYml0bmVzcworICBpbiB0aGUgZGlyZWN0b3J5IG5hbWUuCisKKy0gSXNzdWUgIzEwMjc4OiBBZGQgdGltZS53YWxsY2xvY2soKSBmdW5jdGlvbiwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICMxMzgwOTogRml4IHJlZ3Jlc3Npb24gd2hlcmUgYnoyIG1vZHVsZSB3b3VsZG4ndCB3b3JrIHdoZW4gdGhyZWFkcyBhcmUKKyAgZGlzYWJsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLgorCistIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KKyAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCisgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KKworLSBJc3N1ZSAjMTM3MjY6IEZpeCB0aGUgYW1iaWd1b3VzIC1TIGZsYWcgaW4gcmVncnRlc3QuIEl0IGlzIC1vLy0tc2xvdyBmb3Igc2xvdworICB0ZXN0cy4KKworLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisgIFRoZSBoYW5nIHdvdWxkIG9jY3VyIHdoZW4gcmV0cmlldmluZyB0aGUgcmVzdWx0IG9mIGEgc2NoZWR1bGVkIGZ1dHVyZSBhZnRlcgorICB0aGUgZXhlY3V0b3IgaGFkIGJlZW4gc2h1dCBkb3duLgorCistIElzc3VlICMxMzUwMjogdGhyZWFkaW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBFdmVudC53YWl0KCkgdGhhdCBtYWRlIGl0CisgIHJldHVybiBGYWxzZSB3aGVuIHRoZSBldmVudCB3YXMgc2V0IGFuZCBjbGVhcmVkIHJpZ2h0IGFmdGVyLgorCistIElzc3VlICM5OTkzOiBXaGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBvbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsCisgIGFuZCB0aGUgc291cmNlIGlzIGEgc3ltbGluaywgc2h1dGlsLm1vdmUoKSBub3cgcmVjcmVhdGVzIGEgc3ltbGluayBvbiB0aGUKKyAgZGVzdGluYXRpb24gaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBmaWxlIGNvbnRlbnRzLiAgUGF0Y2ggYnkgSm9uYXRoYW4gTmllaG9mCisgIGFuZCBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEyOTI2OiBGaXggYSBidWcgaW4gdGFyZmlsZSdzIGxpbmsgZXh0cmFjdGlvbi4KKworLSBJc3N1ZSAjMTM2OTY6IEZpeCB0aGUgMzAyIFJlbGF0aXZlIFVSTCBSZWRpcmVjdGlvbiBwcm9ibGVtLgorCistIElzc3VlICMxMzYzNjogV2VhayBjaXBoZXJzIGFyZSBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgc3NsIG1vZHVsZQorICAoZXhjZXB0IHdoZW4gU1NMdjIgaXMgZXhwbGljaXRseSBhc2tlZCBmb3IpLgorCistIElzc3VlICMxMjcxNTogQWRkIGFuIG9wdGlvbmFsIHN5bWxpbmtzIGFyZ3VtZW50IHRvIHNodXRpbCBmdW5jdGlvbnMKKyAgKGNvcHlmaWxlLCBjb3B5bW9kZSwgY29weXN0YXQsIGNvcHksIGNvcHkyKS4gIFdoZW4gdGhhdCBwYXJhbWV0ZXIgaXMKKyAgdHJ1ZSwgc3ltbGlua3MgYXJlbid0IGRlcmVmZXJlbmNlZCBhbmQgdGhlIG9wZXJhdGlvbiBpbnN0ZWFkIGFjdHMgb24gdGhlCisgIHN5bWxpbmsgaXRzZWxmIChvciBjcmVhdGVzIG9uZSwgaWYgcmVsZXZhbnQpLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIEFkZCBhIGZsYWdzIHBhcmFtZXRlciB0byBzZWxlY3QuZXBvbGwuCisKKy0gSXNzdWUgIzEzNjI2OiBBZGQgc3VwcG9ydCBmb3IgU1NMIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUKKyAgU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG1ldGhvZCBhbmQgdGhlIHNzbC5PUF9TSU5HTEVfREhfVVNFIG9wdGlvbi4KKworLSBJc3N1ZSAjMTEwMDY6IERvbid0IGlzc3VlIGxvdyBsZXZlbCB3YXJuaW5nIGluIHN1YnByb2Nlc3Mgd2hlbiBwaXBlMigpIGZhaWxzLgorCistIElzc3VlICMxMzYyMDogU3VwcG9ydCBmb3IgQ2hyb21lIGJyb3dzZXIgaW4gd2ViYnJvd3Nlci4gIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IEFybmF1ZCBDYWxtZXR0ZXMuCisKKy0gSXNzdWUgIzExODI5OiBGaXggY29kZSBleGVjdXRpb24gaG9sZXMgaW4gaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IKKyAgbWV0YWNsYXNzZXMgd2l0aCBtZXRhY2xhc3Nlcy4gUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMjcwODogQWRkIHN0YXJtYXAoKSBhbmQgc3Rhcm1hcF9hc3luYygpIG1ldGhvZHMgKHNpbWlsYXIgdG8KKyAgaXRlcnRvb2xzLnN0YXJtYXAoKSkgdG8gbXVsdGlwcm9jZXNzaW5nLlBvb2wuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE3ODU6IEZpeCBpbnNwZWN0IGFuZCBweWRvYyB3aXRoIG1pc2JlaGF2aW5nIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxMzYzNzogImEyYiIgZnVuY3Rpb25zIGluIHRoZSBiaW5hc2NpaSBtb2R1bGUgbm93IGFjY2VwdCBBU0NJSS1vbmx5CisgIHVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTM2MzQ6IEFkZCBzdXBwb3J0IGZvciBxdWVyeWluZyBhbmQgZGlzYWJsaW5nIFNTTCBjb21wcmVzc2lvbi4KKworLSBJc3N1ZSAjMTM2Mjc6IEFkZCBzdXBwb3J0IGZvciBTU0wgRWxsaXB0aWMgQ3VydmUtYmFzZWQgRGlmZmllLUhlbGxtYW4KKyAga2V5IGV4Y2hhbmdlLCB0aHJvdWdoIHRoZSBTU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlKCkgbWV0aG9kIGFuZCB0aGUKKyAgc3NsLk9QX1NJTkdMRV9FQ0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzEzNjM1OiBBZGQgc3NsLk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgc28gdGhhdCBTU0wgc2VydmVycworICBjaG9vc2UgdGhlIGNpcGhlciBiYXNlZCBvbiB0aGVpciBvd24gcHJlZmVyZW5jZXMsIHJhdGhlciB0aGFuIG9uIHRoZQorICBjbGllbnQncy4KKworLSBJc3N1ZSAjMTE4MTM6IEZpeCBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGZvciBtb2R1bGVzLiBQYXRjaCBieSBBbmRyZWFzCisgIFN0w7xocmsuCisKKy0gSXNzdWUgIzc1MDI6IEZpeCBlcXVhbGl0eSBjb21wYXJpc29uIGZvciBEb2NUZXN0Q2FzZSBpbnN0YW5jZXMuICBQYXRjaCBieQorICBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxMTg3MDogdGhyZWFkaW5nOiBQcm9wZXJseSByZWluaXRpYWxpemUgdGhyZWFkcyBpbnRlcm5hbCBsb2NrcyBhbmQKKyAgY29uZGl0aW9uIHZhcmlhYmxlcyB0byBhdm9pZCBkZWFkbG9ja3MgaW4gY2hpbGQgcHJvY2Vzc2VzLgorCistIElzc3VlICM4MDM1OiB1cmxsaWI6IEZpeCBhIGJ1ZyB3aGVyZSB0aGUgY2xpZW50IGNvdWxkIHJlbWFpbiBzdHVjayBhZnRlciBhCisgIHJlZGlyZWN0aW9uIG9yIGFuIGVycm9yLgorCistIElzc3VlICMxMzU2MDogb3Muc3RyZXJyb3IoKSBub3cgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZgorICBVVEYtOC4KKworLSBJc3N1ZSAjODM3MzogVGhlIGZpbGVzeXN0ZW0gcGF0aCBvZiBBRl9VTklYIHNvY2tldHMgbm93IHVzZXMgdGhlIGZpbGVzeXN0ZW0KKyAgZW5jb2RpbmcgYW5kIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciwgcmF0aGVyIHRoYW4gVVRGLTguICBQYXRjaAorICBieSBEYXZpZCBXYXRzb24uCisKKy0gSXNzdWUgIzEwMzUwOiBSZWFkIGFuZCBzYXZlIGVycm5vIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQKKyAgb3ZlcndyaXRlIGl0LiAgT3JpZ2luYWwgcGF0Y2ggYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTE2MTA6IEludHJvZHVjZSBhIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZGVjbGFyZSBhYnN0cmFjdCBwcm9wZXJ0aWVzLgorCistIElzc3VlICMxMzU5MTogQSBidWcgaW4gaW1wb3J0bGliIGhhcyBiZWVuIGZpeGVkIHRoYXQgY2F1c2VkIGltcG9ydF9tb2R1bGUKKyAgdG8gbG9hZCBhIG1vZHVsZSB0d2ljZS4KKworLSBJc3N1ZSAjNDYyNTogSWYgSURMRSBjYW5ub3Qgd3JpdGUgdG8gaXRzIHJlY2VudCBmaWxlIG9yIGJyZWFrcG9pbnQgZmlsZXMsCisgIGRpc3BsYXkgYSBtZXNzYWdlIHBvcHVwIGFuZCBjb250aW51ZSByYXRoZXIgdGhhbiBjcmFzaC4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMzQ0OSBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbWV0aG9kIGhhcyBhIG5ldyAiYmxvY2tpbmciIHBhcmFtZXRlciB3aGljaAorICB3aGVuIHNldCB0byBGYWxzZSBtYWtlcyBydW4oKSBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKKyAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4uICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBJc3N1ZSAjODY4NCBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY2FuIGJlIHNhZmVseSB1c2VkIGluIG11bHRpLXRocmVhZGVkCisgIGVudmlyb25tZW50cy4gIFBhdGNoIGJ5IEpvc2lhaCBDYXJsc29uIGFuZCBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBBbGlhcyByZXNvdXJjZS5lcnJvciB0byBPU0Vycm9yIGFsYSBQRVAgMzE1MS4KKworLSBJc3N1ZSAjNTY4OTogQWRkIHN1cHBvcnQgZm9yIGx6bWEgY29tcHJlc3Npb24gdG8gdGhlIHRhcmZpbGUgbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogVHVybiAzLjIncyBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIGludG8gMy4zJ3MKKyAgRGVwcmVjYXRpb25XYXJuaW5nLiAgSXQgY292ZXJzICdjZ2kuZXNjYXBlJywgJ2ltcG9ydGxpYi5hYmMuUHlMb2FkZXInLAorICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAorICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCisKKy0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKyAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzg2NDE6IFVwZGF0ZSBJRExFIDMgc3ludGF4IGNvbG9yaW5nIHRvIHJlY29nbml6ZSBiIi4uIiBhbmQgbm90IHUiLi4iLgorICBQYXRjaCBieSBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaAorICBieSBKb24gS3Vobi4KKworLSB0YXJmaWxlLnB5OiBDb3JyZWN0bHkgZGV0ZWN0IGJ6aXAyIGNvbXByZXNzZWQgc3RyZWFtcyB3aXRoIGJsb2Nrc2l6ZXMKKyAgb3RoZXIgdGhhbiA5MDBrLgorCistIElzc3VlICMxMzQzOTogRml4IG1hbnkgZXJyb3JzIGluIHR1cnRsZSBkb2NzdHJpbmdzLgorCistIElzc3VlICM2NzE1OiBBZGQgYSBtb2R1bGUgJ2x6bWEnIGZvciBjb21wcmVzc2lvbiB1c2luZyB0aGUgTFpNQSBhbGdvcml0aG0uCisgIFRoYW5rcyB0byBQZXIgw5h5dmluZCBLYXJsc2VuIGZvciB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTM0ODc6IE1ha2UgaW5zcGVjdC5nZXRtb2R1bGUgcm9idXN0IGFnYWluc3QgY2hhbmdlcyBkb25lIHRvCisgIHN5cy5tb2R1bGVzIHdoaWxlIGl0IGlzIGl0ZXJhdGluZyBvdmVyIGl0LgorCistIElzc3VlICMxMjYxODogRml4IGEgYnVnIHRoYXQgcHJldmVudGVkIHB5X2NvbXBpbGUgZnJvbSBjcmVhdGluZyBieXRlCisgIGNvbXBpbGVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEluaXRpYWwgcGF0Y2ggYnkgU2pvZXJkIGRlIFZyaWVzLgorCistIElzc3VlICMxMzQ0NDogV2hlbiBzdGRvdXQgaGFzIGJlZW4gY2xvc2VkIGV4cGxpY2l0bHksIHdlIHNob3VsZCBub3QgYXR0ZW1wdAorICB0byBmbHVzaCBpdCBhdCBzaHV0ZG93biBhbmQgcHJpbnQgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEyNTY3OiBUaGUgY3Vyc2VzIG1vZHVsZSB1c2VzIFVuaWNvZGUgZnVuY3Rpb25zIGZvciBVbmljb2RlIGFyZ3VtZW50cworICB3aGVuIGl0IGlzIGxpbmtlZCB0byB0aGUgbmN1cnNlcyBsaWJyYXJ5LiBJdCBlbmNvZGVzIGFsc28gVW5pY29kZSBzdHJpbmdzIHRvCisgIHRoZSBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOC4KKworLSBJc3N1ZSAjMTI4NTY6IEVuc3VyZSBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdGhlIHBhcmVudCdzIHJhbmRvbQorICBzZWVkIGZvciBmaWxlbmFtZSBnZW5lcmF0aW9uIGluIHRoZSB0ZW1wZmlsZSBtb2R1bGUuICBQYXRjaCBieSBCcmlhbgorICBIYXJyaW5nLgorCistIElzc3VlICM5OTU3OiBTcG9vbGVkVGVtcG9yYXJ5RmlsZS50cnVuY2F0ZSgpIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsIHNpemUKKyAgcGFyYW1ldGVyLCBhcyBvdGhlciBmaWxlLWxpa2Ugb2JqZWN0cy4gIFBhdGNoIGJ5IFJ5YW4gS2VsbHkuCisKKy0gSXNzdWUgIzEzNDU4OiBGaXggYSBtZW1vcnkgbGVhayBpbiB0aGUgc3NsIG1vZHVsZSB3aGVuIGRlY29kaW5nIGEKKyAgY2VydGlmaWNhdGUgd2l0aCBhIHN1YmplY3RBbHROYW1lLiAgUGF0Y2ggYnkgUm9iZXJ0IFhpYW8uCisKKy0gSXNzdWUgIzEzNDE1OiBvcy51bnNldGVudigpIGRvZXNuJ3QgaWdub3JlIGVycm9ycyBhbnltb3JlLgorCistIElzc3VlICMxMzI0NTogc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNvbnN0cnVjdG9yJ3MgdGltZWZ1bmMgYW5kCisgIGRlbGF5ZnVuY3QgcGFyYW1ldGVycyBhcmUgbm93IG9wdGlvbmFsLgorICBzY2hlZHVsZXIuZW50ZXIgYW5kIHNjaGVkdWxlci5lbnRlcmFicyBtZXRob2RzIGdhaW5lZCBhIG5ldyBrd2FyZ3MgcGFyYW1ldGVyLgorICBQYXRjaCBjb250cmlidXRlZCBieSBDaHJpcyBDbGFyay4KKworLSBJc3N1ZSAjMTIzMjg6IFVuZGVyIFdpbmRvd3MsIHJlZmFjdG9yIGhhbmRsaW5nIG9mIEN0cmwtQyBldmVudHMgYW5kCisgIG1ha2UgX211bHRpcHJvY2Vzc2luZy53aW4zMi5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGludGVycnVwdGlibGUgd2hlbgorICB0aGUgd2FpdF9mbGFnIHBhcmFtZXRlciBpcyBmYWxzZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTMzMjI6IEZpeCBCdWZmZXJlZFdyaXRlci53cml0ZSgpIHRvIGVuc3VyZSB0aGF0IEJsb2NraW5nSU9FcnJvciBpcworICByYWlzZWQgd2hlbiB0aGUgd3JhcHBlZCByYXcgZmlsZSBpcyBub24tYmxvY2tpbmcgYW5kIHRoZSB3cml0ZSB3b3VsZCBibG9jay4KKyAgUHJldmlvdXMgY29kZSBhc3N1bWVkIHRoYXQgdGhlIHJhdyB3cml0ZSgpIHdvdWxkIHJhaXNlIEJsb2NraW5nSU9FcnJvciwgYnV0CisgIFJhd0lPQmFzZS53cml0ZSgpIGlzIGRlZmluZWQgdG8gcmV0dXJuZWQgTm9uZSB3aGVuIHRoZSBjYWxsIHdvdWxkIGJsb2NrLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzU4OiBIVE1MUGFyc2VyIG5vdyBjYWxscyBoYW5kbGVfZGF0YSBvbmx5IG9uY2UgZm9yIGVhY2ggQ0RBVEEuCisKKy0gSXNzdWUgIzQxNDc6IG1pbmlkb20ncyB0b3ByZXR0eXhtbCBubyBsb25nZXIgYWRkcyB3aGl0ZXNwYWNlIGFyb3VuZCBhIHRleHQKKyAgbm9kZSB3aGVuIGl0IGlzIHRoZSBvbmx5IGNoaWxkIG9mIGFuIGVsZW1lbnQuICBJbml0aWFsIHBhdGNoIGJ5IERhbgorICBLZW5pZ3NiZXJnLgorCistIElzc3VlICMxMzM3NDogVGhlIFdpbmRvd3MgYnl0ZXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdGhlIG9zIG1vZHVsZS4gVXNlCisgIFVuaWNvZGUgZmlsZW5hbWVzIGluc3RlYWQgb2YgYnl0ZXMgZmlsZW5hbWVzIHRvIG5vdCBkZXBlbmQgb24gdGhlIEFOU0kgY29kZQorICBwYWdlIGFueW1vcmUgYW5kIHRvIHN1cHBvcnQgYW55IGZpbGVuYW1lLgorCistIElzc3VlICMxMzI5NzogVXNlIGJ5dGVzIHR5cGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBiaW5hcnkgZGF0YSB0aHJvdWdoIFhNTFJQQy4KKworLSBJc3N1ZSAjNjM5NzogU3VwcG9ydCAiL2Rldi9wb2xsIiBwb2xsaW5nIG9iamVjdHMgaW4gc2VsZWN0IG1vZHVsZSwKKyAgdW5kZXIgU29sYXJpcyAmIGRlcml2YXRpdmVzLgorCistIElzc3VlcyAjMTc0NTc2MSwgIzc1NTY3MCwgIzEzMzU3LCAjMTI2MjksICMxMjAwMzEzOiBIVE1MUGFyc2VyIG5vdyBjb3JyZWN0bHkKKyAgaGFuZGxlcyBub24tdmFsaWQgYXR0cmlidXRlcywgaW5jbHVkaW5nIGFkamFjZW50IGFuZCB1bnF1b3RlZCBhdHRyaWJ1dGVzLgorCistIElzc3VlICMxMzE5MzogRml4IGRpc3R1dGlscy5maWxlbGlzdC5GaWxlTGlzdCBhbmQgcGFja2FnaW5nLm1hbmlmZXN0Lk1hbmlmZXN0CisgIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEzMzg0OiBSZW1vdmUgdW5uZWNlc3NhcnkgX19mdXR1cmVfXyBpbXBvcnQgaW4gTGliL3JhbmRvbS5weQorCistIElzc3VlICMxMzE0OTogU3BlZWQgdXAgYXBwZW5kLW9ubHkgU3RyaW5nSU8gb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNzM6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXQoKSBjb3VsZCBzb21ldGltZXMgYmxvY2sgaW5kZWZpbml0ZWx5CisgIHdoZW4gY2FsbGVkIHdpdGggYSB0aW1lb3V0LiAgUGF0Y2ggYnkgQXJuYXVkIFlzbWFsLgorCistIElzc3VlICMxMzI1NDogRml4IE1haWxkaXIgaW5pdGlhbGl6YXRpb24gc28gdGhhdCBtYWlsZGlyIGNvbnRlbnRzCisgIGFyZSByZWFkIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMzA2NzogbG9jYWxlLnNldGxvY2FsZSgpIG5vdyByYWlzZXMgVHlwZUVycm9yIGlmIHRoZSBzZWNvbmQKKyAgYXJndW1lbnQgaXMgYW4gaW52YWxpZCBpdGVyYWJsZS4gSXRzIGRvY3VtZW50YXRpb24gYW5kIGRvY3N0cmluZworICB3ZXJlIGFsc28gdXBkYXRlZC4gSW5pdGlhbCBwYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzE0MDogRml4IHRoZSBkYWVtb25fdGhyZWFkcyBhdHRyaWJ1dGUgb2YgVGhyZWFkaW5nTWl4SW4uCisKKy0gSXNzdWUgIzEzMzM5OiBGaXggY29tcGlsZSBlcnJvciBpbiBwb3NpeG1vZHVsZS5jIGR1ZSB0byBtaXNzaW5nIHNlbWljb2xvbi4KKyAgVGhhbmtzIHRvIFJvYmVydCBYaWFvLgorCistIEJ5dGUgY29tcGlsYXRpb24gaW4gcGFja2FnaW5nIGlzIG5vdyBpc29sYXRlZCBmcm9tIHRoZSBjYWxsaW5nIFB5dGhvbiAtQiBvcgorICAtTyBvcHRpb25zLCBpbnN0ZWFkIG9mIGJlaW5nIGRpc2FsbG93ZWQgdW5kZXIgLUIgb3IgYnVnZ3kgdW5kZXIgLU8uCisKKy0gSXNzdWUgIzEwNTcwOiBjdXJzZXMucHV0cCgpIGFuZCBjdXJzZXMudHBhcm0oKSBhcmUgbm93IGV4cGVjdGluZyBhIGJ5dGUKKyAgc3RyaW5nLCBpbnN0ZWFkIG9mIGEgVW5pY29kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzMjk1OiBodHRwLnNlcnZlciBub3cgcHJvZHVjZXMgdmFsaWQgSFRNTCA0LjAxIHN0cmljdC4KKworLSBJc3N1ZSAjMjg5MjogcHJlc2VydmUgaXRlcnBhcnNlIGV2ZW50cyBpbiBjYXNlIG9mIFN5bnRheEVycm9yLgorCistIElzc3VlICMxMzI4NzogdXJsbGliLnJlcXVlc3QgYW5kIHVybGxpYi5lcnJvciBub3cgY29udGFpbnMgYW4gX19hbGxfXworICBhdHRyaWJ1dGUgdG8gZXhwb3NlIG9ubHkgcmVsZXZhbnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLiAgUGF0Y2ggYnkgRmxvcmVudAorICBYaWNsdW5hLgorCistIElzc3VlICM2NzA2NjQ6IEZpeCBIVE1MUGFyc2VyIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGNvbnRlbnQgb2YKKyAgYGA8c2NyaXB0Pi4uLjwvc2NyaXB0PmBgIGFuZCBgYDxzdHlsZT4uLi48L3N0eWxlPmBgLgorCistIElzc3VlICMxMDgxNzogRml4IHVybHJldHJpZXZlIGZ1bmN0aW9uIHRvIHJhaXNlIENvbnRlbnRUb29TaG9ydEVycm9yIGV2ZW4KKyAgd2hlbiByZXBvcnRob29rIGlzIE5vbmUuIFBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzEzMjk2OiBGaXggSURMRSB0byBjbGVhciBjb21waWxlIF9fZnV0dXJlX18gZmxhZ3Mgb24gc2hlbGwgcmVzdGFydC4KKyAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIEZpeCB0aGUgeG1scnBjLmNsaWVudCB1c2VyIGFnZW50IHRvIHJldHVybiBzb21ldGhpbmcgc2ltaWxhciB0bworICB1cmxsaWIucmVxdWVzdCB1c2VyIGFnZW50OiAiUHl0aG9uLXhtbHJwYy8zLjMiLgorCistIElzc3VlICMxMzI5MzogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gbWFyc2hhbCBieXRlcyB1c2luZworICB4bWxycGMuY2xpZW50LgorCistIElzc3VlICMxMzI5MTogTmFtZUVycm9yIGluIHhtbHJwYyBwYWNrYWdlLgorCistIElzc3VlICMxMzI1ODogVXNlIGNhbGxhYmxlKCkgYnVpbHQtaW4gaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCisKKy0gSXNzdWUgIzEzMjczOiBmaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgSFRNTFBhcnNlciB0byBwcm9wZXJseSBkZXRlY3Qgc29tZQorICB0YWdzIHdoZW4gc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMTE4MzogQWRkIGZpbmVyLWdyYWluZWQgZXhjZXB0aW9ucyB0byB0aGUgc3NsIG1vZHVsZSwgc28gdGhhdAorICB5b3UgZG9uJ3QgaGF2ZSB0byBpbnNwZWN0IHRoZSBleGNlcHRpb24ncyBhdHRyaWJ1dGVzIGluIHRoZSBjb21tb24gY2FzZS4KKworLSBJc3N1ZSAjMTMyMTY6IEFkZCBjcDY1MDAxIGNvZGVjLCB0aGUgV2luZG93cyBVVEYtOCAoQ1BfVVRGOCkuCisKKy0gSXNzdWUgIzEzMjI2OiBBZGQgUlRMRF94eHggY29uc3RhbnRzIHRvIHRoZSBvcyBtb2R1bGUuIFRoZXNlIGNvbnN0YW50cyBjYW4gYmUKKyAgdXNlZCB3aXRoIHN5cy5zZXRkbG9wZW5mbGFncygpLgorCistIElzc3VlICMxMDI3ODogQWRkIGNsb2NrX2dldHJlcygpLCBjbG9ja19nZXR0aW1lKCkgYW5kIENMT0NLX3h4eCBjb25zdGFudHMgdG8KKyAgdGhlIHRpbWUgbW9kdWxlLiB0aW1lLmNsb2NrX2dldHRpbWUodGltZS5DTE9DS19NT05PVE9OSUMpIHByb3ZpZGVzIGEKKyAgbW9ub3RvbmljIGNsb2NrCisKKy0gSXNzdWUgIzEwMzMyOiBtdWx0aXByb2Nlc3Npbmc6IGZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZW4gYSBQb29sIGlzIGNsb3NlZAorICBiZWZvcmUgYWxsIHRhc2tzIGhhdmUgY29tcGxldGVkLgorCistIElzc3VlICMxMzI1NTogd3JvbmcgZG9jc3RyaW5ncyBpbiBhcnJheSBtb2R1bGUuCisKKy0gSXNzdWUgIzg1NDA6IFJlbW92ZSBkZXByZWNhdGVkIENvbnRleHQuX2NsYW1wIGF0dHJpYnV0ZSBpbiBEZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzU6IEFkZGVkIERlcHJlY2F0aW9uV2FybmluZyB0byBsb2dnaW5nLndhcm4oKSBtZXRob2QgYW5kIGZ1bmN0aW9uLgorCistIElzc3VlICM5MTY4OiBub3cgc210cGQgaXMgYWJsZSB0byBiaW5kIHByaXZpbGVnZWQgcG9ydC4KKworLSBJc3N1ZSAjMTI1Mjk6IGZpeCBjZ2kucGFyc2VfaGVhZGVyIGlzc3VlIG9uIHN0cmluZ3Mgd2l0aCBkb3VibGUtcXVvdGVzIGFuZAorICBzZW1pY29sb25zIHRvZ2V0aGVyLiBQYXRjaCBieSBCZW4gRGFybmVsbCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMjI3OiBmdW5jdG9vbHMubHJ1X2NhY2hlKCkgbm93IGhhcyBhIG9wdGlvbiB0byBkaXN0aW5ndWlzaAorICBjYWxscyB3aXRoIGRpZmZlcmVudCBhcmd1bWVudCB0eXBlcy4KKworLSBJc3N1ZSAjNjA5MDogemlwZmlsZSByYWlzZXMgYSBWYWx1ZUVycm9yIHdoZW4gYSBkb2N1bWVudCB3aXRoIGEgdGltZXN0YW1wCisgIGVhcmxpZXIgdGhhbiAxOTgwIGlzIHByb3ZpZGVkLiBQYXRjaCBjb250cmlidXRlZCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTMxNTA6IHN5c2NvbmZpZyBubyBsb25nZXIgcGFyc2VzIHRoZSBNYWtlZmlsZSBhbmQgY29uZmlnLmggZmlsZXMKKyAgd2hlbiBpbXBvcnRlZCwgaW5zdGVhZCBkb2luZyBpdCBhdCBidWlsZCB0aW1lLiAgVGhpcyBtYWtlcyBpbXBvcnRpbmcKKyAgc3lzY29uZmlnIGZhc3RlciBhbmQgcmVkdWNlcyBQeXRob24gc3RhcnR1cCB0aW1lIGJ5IDIwJS4KKworLSBJc3N1ZSAjMTI0NDg6IHNtdHBsaWIgbm93IGZsdXNoZXMgc3Rkb3V0IHdoaWxlIHJ1bm5pbmcgYGBweXRob24gLW0gc210cGxpYmBgCisgIGluIG9yZGVyIHRvIGRpc3BsYXkgdGhlIHByb21wdCBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzEyNDU0OiBUaGUgbWFpbGJveCBtb2R1bGUgaXMgbm93IHVzaW5nIEFTQ0lJLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUKKyAgZW5jb2RpbmcsIHRvIHJlYWQgYW5kIHdyaXRlIC5taF9zZXF1ZW5jZXMgZmlsZXMuCisKKy0gSXNzdWUgIzEzMTk0OiB6bGliLmNvbXByZXNzb2JqKCkuY29weSgpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKS5jb3B5KCkgYXJlCisgIG5vdyBhdmFpbGFibGUgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTY3MzAwNzogdXJsbGliLnJlcXVlc3Qgbm93IHN1cHBvcnRzIEhFQUQgcmVxdWVzdCB2aWEgbmV3IG1ldGhvZCBhcmd1bWVudC4KKyAgUGF0Y2ggY29udHJpYnV0aW9ucyBieSBEYXZpZCBTdGFuZWssIFBhdHJpY2sgV2VzdGVyaG9mZiBhbmQgRXppbyBNZWxvdHRpLgorCistIElzc3VlICMxMjM4NjogcGFja2FnaW5nIGRvZXMgbm90IGZhaWwgYW55bW9yZSB3aGVuIHdyaXRpbmcgdGhlIFJFU09VUkNFUworICBmaWxlLgorCistIElzc3VlICMxMzE1ODogRml4IGRlY29kaW5nIGFuZCBlbmNvZGluZyBvZiBHTlUgdGFyIHNwZWNpZmljIGJhc2UtMjU2IG51bWJlcgorICBmaWVsZHMgaW4gdGFyZmlsZS4KKworLSBJc3N1ZSAjMTMwMjU6IG1pbWV0eXBlcyBpcyBub3cgcmVhZGluZyBNSU1FIHR5cGVzIHVzaW5nIHRoZSBVVEYtOCBlbmNvZGluZywKKyAgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nLgorCistIElzc3VlICMxMDY1MzogT24gV2luZG93cywgdXNlIHN0cmZ0aW1lKCkgaW5zdGVhZCBvZiB3Y3NmdGltZSgpIGJlY2F1c2UKKyAgd2NzZnRpbWUoKSBkb2Vzbid0IGZvcm1hdCB0aW1lIHpvbmUgY29ycmVjdGx5LgorCistIElzc3VlICMxMzE1MDogVGhlIHRva2VuaXplIG1vZHVsZSBkb2Vzbid0IGNvbXBpbGUgbGFyZ2UgcmVndWxhciBleHByZXNzaW9ucworICBhdCBzdGFydHVwIGFueW1vcmUuCisKKy0gSXNzdWUgIzExMTcxOiBGaXggZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUgd2hlbiBQeXRob24gd2FzCisgIGNvbmZpZ3VyZWQgd2l0aCBkaWZmZXJlbnQgcHJlZml4IGFuZCBleGVjLXByZWZpeC4KKworLSBJc3N1ZSAjMTEyNTQ6IFRlYWNoIGRpc3R1dGlscyBhbmQgcGFja2FnaW5nIHRvIGNvbXBpbGUgLnB5YyBhbmQgLnB5byBmaWxlcyBpbgorICBQRVAgMzE0Ny1jb21wbGlhbnQgX19weWNhY2hlX18gZGlyZWN0b3JpZXMuCisKKy0gSXNzdWUgIzczNjc6IEZpeCBwa2d1dGlsLndhbGtfcGF0aHMgdG8gc2tpcCBkaXJlY3RvcmllcyB3aG9zZQorICBjb250ZW50cyBjYW5ub3QgYmUgcmVhZC4KKworLSBJc3N1ZSAjMzE2MzogVGhlIHN0cnVjdCBtb2R1bGUgZ2V0cyBuZXcgZm9ybWF0IGNoYXJhY3RlcnMgJ24nIGFuZCAnTicKKyAgc3VwcG9ydGluZyBDIGludGVnZXIgdHlwZXMgYGBzc2l6ZV90YGAgYW5kIGBgc2l6ZV90YGAsIHJlc3BlY3RpdmVseS4KKworLSBJc3N1ZSAjMTMwOTk6IEZpeCBzcWxpdGUzLkN1cnNvci5sYXN0cm93aWQgdW5kZXIgYSBUdXJraXNoIGxvY2FsZS4KKyAgUmVwb3J0ZWQgYW5kIGRpYWdub3NlZCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTMwODc6IEJ1ZmZlcmVkUmVhZGVyLnNlZWsoKSBub3cgYWx3YXlzIHJhaXNlcyBVbnN1cHBvcnRlZE9wZXJhdGlvbgorICBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIHVuc2Vla2FibGUsIGV2ZW4gaWYgdGhlIHNlZWsgY291bGQgYmUKKyAgc2F0aXNmaWVkIHVzaW5nIHRoZSBpbnRlcm5hbCBidWZmZXIuICBQYXRjaCBieSBKb2huIE8nQ29ubm9yLgorCistIElzc3VlICM3Njg5OiBBbGxvdyBwaWNrbGluZyBvZiBkeW5hbWljYWxseSBjcmVhdGVkIGNsYXNzZXMgd2hlbiB0aGVpcgorICBtZXRhY2xhc3MgaXMgcmVnaXN0ZXJlZCB3aXRoIGNvcHlyZWcuICBQYXRjaCBieSBOaWNvbGFzIE0uIFRoacOpcnkgYW5kIENyYWlnCisgIENpdHJvLgorCistIElzc3VlICMxMzAzNDogV2hlbiBkZWNvZGluZyBzb21lIFNTTCBjZXJ0aWZpY2F0ZXMsIHRoZSBzdWJqZWN0QWx0TmFtZQorICBleHRlbnNpb24gY291bGQgYmUgdW5yZXBvcnRlZC4KKworLSBJc3N1ZSAjOTg3MTogUHJldmVudCBJRExFIDMgY3Jhc2ggd2hlbiBnaXZlbiBieXRlIHN0aW5ncworICB3aXRoIGludmFsaWQgaGV4IGVzY2FwZSBzZXF1ZW5jZXMsIGxpa2UgYidceDAnLgorICAoT3JpZ2luYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLikKKworLSBJc3N1ZSAjMTIzMDY6IEV4cG9zZSB0aGUgcnVudGltZSB2ZXJzaW9uIG9mIHRoZSB6bGliIEMgbGlicmFyeSBhcyBhIGNvbnN0YW50LAorICBaTElCX1JVTlRJTUVfVkVSU0lPTiwgaW4gdGhlIHpsaWIgbW9kdWxlLiBQYXRjaCBieSBUb3JzdGVuIExhbmRzY2hvZmYuCisKKy0gSXNzdWUgIzEyOTU5OiBBZGQgY29sbGVjdGlvbnMuQ2hhaW5NYXAgdG8gY29sbGVjdGlvbnMuX19hbGxfXy4KKworLSBJc3N1ZSAjODkzMzogZGlzdHV0aWxzJyBQS0ctSU5GTyBmaWxlcyBhbmQgcGFja2FnaW5nJ3MgTUVUQURBVEEgZmlsZXMgd2lsbAorICBub3cgY29ycmVjdGx5IHJlcG9ydCBNZXRhZGF0YS1WZXJzaW9uOiAxLjEgaW5zdGVhZCBvZiAxLjAgaWYgYSBDbGFzc2lmaWVyIG9yCisgIERvd25sb2FkLVVSTCBmaWVsZCBpcyBwcmVzZW50LgorCistIElzc3VlICMxMjU2NzogQWRkIGN1cnNlcy51bmdldF93Y2goKSBmdW5jdGlvbi4gUHVzaCBhIGNoYXJhY3RlciBzbyB0aGUgbmV4dAorICBnZXRfd2NoKCkgd2lsbCByZXR1cm4gaXQuCisKKy0gSXNzdWUgIzk1NjE6IGRpc3R1dGlscyBhbmQgcGFja2FnaW5nIG5vdyB3cml0ZXMgZWdnLWluZm8gZmlsZXMgdXNpbmcgVVRGLTgsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjODI4NjogVGhlIGRpc3R1dGlscyBjb21tYW5kIHNkaXN0IHdpbGwgcHJpbnQgYSB3YXJuaW5nIG1lc3NhZ2UgaW5zdGVhZAorICBvZiBjcmFzaGluZyB3aGVuIGFuIGludmFsaWQgcGF0aCBpcyBnaXZlbiBpbiB0aGUgbWFuaWZlc3QgdGVtcGxhdGUuCisKKy0gSXNzdWUgIzEyODQxOiB0YXJmaWxlIHVubmVjZXNzYXJpbHkgY2hlY2tlZCB0aGUgZXhpc3RlbmNlIG9mIG51bWVyaWNhbCB1c2VyCisgIGFuZCBncm91cCBpZHMgb24gZXh0cmFjdGlvbi4gSWYgb25lIG9mIHRoZW0gZGlkIG5vdCBleGlzdCB0aGUgcmVzcGVjdGl2ZSBpZAorICBvZiB0aGUgY3VycmVudCB1c2VyIChpLmUuIHJvb3QpIHdhcyB1c2VkIGZvciB0aGUgZmlsZSBhbmQgb3duZXJzaGlwCisgIGluZm9ybWF0aW9uIHdhcyBsb3N0LgorCistIElzc3VlICMxMjg4ODogRml4IGEgYnVnIGluIEhUTUxQYXJzZXIudW5lc2NhcGUgdGhhdCBwcmV2ZW50ZWQgaXQgdG8gZXNjYXBlCisgIG1vcmUgdGhhbiAxMjggZW50aXRpZXMuICBQYXRjaCBieSBQZXRlciBPdHRlbi4KKworLSBJc3N1ZSAjMTI4Nzg6IEV4cG9zZSBhIF9fZGljdF9fIGF0dHJpYnV0ZSBvbiBpby5JT0Jhc2UgYW5kIGl0cyBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjYzNjogSURMRSByZWFkcyB0aGUgY29kaW5nIGNvb2tpZSB3aGVuIGV4ZWN1dGluZyBhIFB5dGhvbiBzY3JpcHQuCisKKy0gSXNzdWUgIzEyNDk0OiBPbiBlcnJvciwgY2FsbCgpLCBjaGVja19jYWxsKCksIGNoZWNrX291dHB1dCgpIGFuZAorICBnZXRzdGF0dXNvdXRwdXQoKSBmdW5jdGlvbnMgb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vdyBraWxsIHRoZSBwcm9jZXNzLAorICByZWFkIGl0cyBzdGF0dXMgKHRvIGF2b2lkIHpvbWJpcykgYW5kIGNsb3NlIHBpcGVzLgorCistIElzc3VlICMxMjcyMDogRXhwb3NlIGxvdy1sZXZlbCBMaW51eCBleHRlbmRlZCBmaWxlIGF0dHJpYnV0ZSBmdW5jdGlvbnMgaW4gb3MuCisKKy0gSXNzdWUgIzEwOTQ2OiBUaGUgZGlzdHV0aWxzIGNvbW1hbmRzIGJkaXN0X2R1bWIsIGJkaXN0X3dpbmluc3QgYW5kIGJkaXN0X21zaQorICBub3cgcmVzcGVjdCBhIC0tc2tpcC1idWlsZCBvcHRpb24gZ2l2ZW4gdG8gYmRpc3QuICBUaGUgcGFja2FnaW5nIGNvbW1hbmRzCisgIHdlcmUgZml4ZWQgdG9vLgorCistIElzc3VlICMxMjg0NzogRml4IGEgY3Jhc2ggd2l0aCBuZWdhdGl2ZSBQVVQgYW5kIExPTkdfQklOUFVUIGFyZ3VtZW50cyBpbgorICB0aGUgQyBwaWNrbGUgaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzExNTY0OiBBdm9pZCBjcmFzaGVzIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBodWdlIG9iamVjdHMgb3IgY29udGFpbmVycworICAobW9yZSB0aGFuIDIqKjMxIGl0ZW1zKS4gIEluc3RlYWQsIGluIG1vc3QgY2FzZXMsIGFuIE92ZXJmbG93RXJyb3IgaXMgcmFpc2VkLgorCistIElzc3VlICMxMjI4NzogRml4IGEgc3RhY2sgY29ycnVwdGlvbiBpbiBvc3NhdWRpb2RldiBtb2R1bGUgd2hlbiB0aGUgRkQgaXMKKyAgZ3JlYXRlciB0aGFuIEZEX1NFVFNJWkUuCisKKy0gSXNzdWUgIzEyODM5OiBGaXggY3Jhc2ggaW4gemxpYiBtb2R1bGUgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2guCisgIEZpeCBieSBSaWNoYXJkIE0uIFRldy4KKworLSBJc3N1ZSAjOTkyMzogVGhlIG1haWxjYXAgbW9kdWxlIG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUgcGxhdGZvcm0gcGF0aAorICBzZXBhcmF0b3IgZm9yIHRoZSBNQUlMQ0FQIGVudmlyb25tZW50IHZhcmlhYmxlIG9uIG5vbi1QT1NJWCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzEyODM1OiBGb2xsb3cgdXAgdG8gIzY1NjAgdGhhdCB1bmNvbmRpdGlvbmFsbHkgcHJldmVudHMgdXNlIG9mIHRoZQorICB1bmVuY3J5cHRlZCBzZW5kbXNnL3JlY3Ztc2cgQVBJcyBvbiBTU0wgd3JhcHBlZCBzb2NrZXRzLiBQYXRjaCBieSBEYXZpZAorICBXYXRzb24uCisKKy0gSXNzdWUgIzEyODAzOiBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpIG5vdyBhY2NlcHRzIGEgcGFzc3dvcmQgYXJndW1lbnQKKyAgdG8gYmUgdXNlZCBpZiB0aGUgcHJpdmF0ZSBrZXkgaXMgZW5jcnlwdGVkLiAgUGF0Y2ggYnkgQWRhbSBTaW1wa2lucy4KKworLSBJc3N1ZSAjMTE2NTc6IEZpeCBzZW5kaW5nIGZpbGUgZGVzY3JpcHRvcnMgb3ZlciAyNTUgb3ZlciBhIG11bHRpcHJvY2Vzc2luZworICBQaXBlLgorCistIElzc3VlICMxMjgxMTogdGFibmFubnkuY2hlY2soKSBub3cgcHJvbXB0bHkgY2xvc2VzIGNoZWNrZWQgZmlsZXMuIFBhdGNoIGJ5CisgIEFudGhvbnkgQnJpZ2dzLgorCistIElzc3VlICM2NTYwOiBUaGUgc2VuZG1zZy9yZWN2bXNnIEFQSSBpcyBub3cgZXhwb3NlZCBieSB0aGUgc29ja2V0IG1vZHVsZQorICB3aGVuIHByb3ZpZGVkIGJ5IHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtLCBzdXBwb3J0aW5nIHByb2Nlc3Npbmcgb2YKKyAgYW5jaWxsYXJ5IGRhdGEgaW4gcHVyZSBQeXRob24gY29kZS4gUGF0Y2ggYnkgRGF2aWQgV2F0c29uIGFuZCBIZWlrbyBXdW5kcmFtLgorCistIElzc3VlICMxMjMyNjogT24gTGludXgsIHN5cy5wbGF0Zm9ybSBkb2Vzbid0IGNvbnRhaW4gdGhlIG1ham9yIHZlcnNpb24KKyAgYW55bW9yZS4gSXQgaXMgbm93IGFsd2F5cyAnbGludXgnLCBpbnN0ZWFkIG9mICdsaW51eDInIG9yICdsaW51eDMnIGRlcGVuZGluZworICBvbiB0aGUgTGludXggdmVyc2lvbiB1c2VkIHRvIGJ1aWxkIFB5dGhvbi4KKworLSBJc3N1ZSAjMTIyMTM6IEZpeCBhIGJ1ZmZlcmluZyBidWcgd2l0aCBpbnRlcmxlYXZlZCByZWFkcyBhbmQgd3JpdGVzIHRoYXQKKyAgY291bGQgYXBwZWFyIG9uIEJ1ZmZlcmVkUmFuZG9tIHN0cmVhbXMuCisKKy0gSXNzdWUgIzEyNzc4OiBSZWR1Y2UgbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4gSlNPTi1lbmNvZGluZyBhIGxhcmdlCisgIGNvbnRhaW5lciBvZiBtYW55IHNtYWxsIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyNjUwOiBGaXggYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBhIHN1YnByb2Nlc3MuUG9wZW4gY291bGQgbGVhaworICByZXNvdXJjZXMgKEZEL3pvbWJpZSkgd2hlbiBraWxsZWQgYXQgdGhlIHdyb25nIHRpbWUuCisKKy0gSXNzdWUgIzEyNzQ0OiBGaXggaW5lZmZpY2llbnQgcmVwcmVzZW50YXRpb24gb2YgaW50ZWdlcnMgYmV0d2VlbiAyKiozMSBhbmQKKyAgMioqNjMgb24gc3lzdGVtcyB3aXRoIGEgNjQtYml0IEMgImxvbmciLgorCistIElzc3VlICMxMjY0NjogQWRkIGFuICdlb2YnIGF0dHJpYnV0ZSB0byB6bGliLkRlY29tcHJlc3MsIHRvIG1ha2UgaXQgZWFzaWVyIHRvCisgIGRldGVjdCB0cnVuY2F0ZWQgaW5wdXQgc3RyZWFtcy4KKworLSBJc3N1ZSAjMTE1MTM6IEZpeCBleGNlcHRpb24gaGFuZGxpbmcgYGB0YXJmaWxlLlRhckZpbGUuZ3pvcGVuKClgYCB3aGVuCisgIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuZWQuCisKKy0gSXNzdWUgIzEyNjg3OiBGaXggYSBwb3NzaWJsZSBidWZmZXJpbmcgYnVnIHdoZW4gdW5waWNrbGluZyB0ZXh0IG1vZGUKKyAgKHByb3RvY29sIDAsIG1vc3RseSkgcGlja2xlcy4KKworLSBJc3N1ZSAjMTAwODc6IEZpeCB0aGUgaHRtbCBvdXRwdXQgZm9ybWF0IG9mIHRoZSBjYWxlbmRhciBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNTQwOiBQcmV2ZW50IHpvbWJpZSBJRExFIHByb2Nlc3NlcyBvbiBXaW5kb3dzIGR1ZSB0byBjaGFuZ2VzCisgIGluIG9zLmtpbGwoKS4KKworLSBJc3N1ZSAjMTMxMjE6IGFkZCBzdXBwb3J0IGZvciBpbnBsYWNlIG1hdGggb3BlcmF0b3JzIHRvIGNvbGxlY3Rpb25zLkNvdW50ZXIuCisKKy0gQWRkIHN1cHBvcnQgZm9yIHVuYXJ5IHBsdXMgYW5kIHVuYXJ5IG1pbnVzIHRvIGNvbGxlY3Rpb25zLkNvdW50ZXIuCisKKy0gSXNzdWUgIzEyNjgzOiB1cmxwYXJzZSB1cGRhdGVkIHRvIGluY2x1ZGUgc3ZuIGFzIHNjaGVtZXMgdGhhdCB1c2VzIHJlbGF0aXZlCisgIHBhdGhzLiAoc3ZuIGZyb20gMS41IG9ud2FyZHMgc3VwcG9ydCByZWxhdGl2ZSBwYXRoKS4KKworLSBJc3N1ZSAjMTI2NTU6IEV4cG9zZSBmdW5jdGlvbnMgZnJvbSBzY2hlZC5oIGluIHRoZSBvcyBtb2R1bGU6IHNjaGVkX3lpZWxkKCksCisgIHNjaGVkX3NldHNjaGVkdWxlcigpLCBzY2hlZF9nZXRzY2hlZHVsZXIoKSwgc2NoZWRfc2V0cGFyYW0oKSwKKyAgc2NoZWRfZ2V0X21pbl9wcmlvcml0eSgpLCBzY2hlZF9nZXRfbWF4X3ByaW9yaXR5KCksIHNjaGVkX3JyX2dldF9pbnRlcnZhbCgpLAorICBzY2hlZF9nZXRhZmZpbml0eSgpLCBzY2hlZF9zZXRhZmZpbml0eSgpLgorCistIEFkZCBUaHJlYWRFcnJvciB0byB0aHJlYWRpbmcuX19hbGxfXy4KKworLSBJc3N1ZXMgIzExMTA0LCAjODY4ODogRml4IHRoZSBiZWhhdmlvciBvZiBkaXN0dXRpbHMnIHNkaXN0IGNvbW1hbmQgd2l0aAorICBtYW51YWxseS1tYWludGFpbmVkIE1BTklGRVNUIGZpbGVzLgorCistIElzc3VlICMxMTI4MTogc210cGxpYi5TVE1QIGdldHMgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyLCB3aGljaCBhZGRzIHRoZQorICBhYmlsaXR5IHRvIGJpbmQgdG8gc3BlY2lmaWMgc291cmNlIGFkZHJlc3Mgb24gYSBtYWNoaW5lIHdpdGggbXVsdGlwbGUKKyAgaW50ZXJmYWNlcy4gUGF0Y2ggYnkgUGF1bG8gU2NhcmRpbmUuCisKKy0gSXNzdWUgIzEyNDY0OiB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkuY2xlYW51cCgpIHNob3VsZCBub3QgZm9sbG93CisgIHN5bWxpbmtzOiBmaXggaXQuIFBhdGNoIGJ5IFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICM4ODg3OiAicHlkb2Mgc29tZWJ1aWx0aW4uc29tZW1ldGhvZCIgKG9yIGhlbHAoJ3NvbWVidWlsdGluLnNvbWVtZXRob2QnKQorICBpbiBQeXRob24gY29kZSkgbm93IGZpbmRzIHRoZSBkb2Mgb2YgdGhlIG1ldGhvZC4KKworLSBJc3N1ZSAjMTA5Njg6IFJlbW92ZSBpbmRpcmVjdGlvbiBpbiB0aHJlYWRpbmcuICBUaGUgcHVibGljIG5hbWVzIChFdmVudCwKKyAgQ29uZGl0aW9uLCBldGMuKSB1c2VkIHRvIGJlIGZhY3RvcnkgZnVuY3Rpb25zIHJldHVybmluZyBpbnN0YW5jZXMgb2YgaGlkZGVuCisgIGNsYXNzZXMgKF9FdmVudCwgX0NvbmRpdGlvbiwgZXRjLiksIGJlY2F1c2UgKGlmIEd1aWRvIHJlY2FsbHMgY29ycmVjdGx5KSB0aGlzCisgIGNvZGUgcHJlLWRhdGVzIHRoZSBhYmlsaXR5IHRvIHN1YmNsYXNzIGV4dGVuc2lvbiB0eXBlcy4gIEl0IGlzIG5vdyBwb3NzaWJsZQorICB0byBpbmhlcml0IGZyb20gdGhlc2UgY2xhc3NlcyB3aXRob3V0IGhhdmluZyB0byBpbXBvcnQgdGhlIHByaXZhdGUKKyAgdW5kZXJzY29yZWQgbmFtZXMgbGlrZSBtdWx0aXByb2Nlc3NpbmcgZGlkLgorCistIElzc3VlICM5NzIzOiBBZGQgc2hsZXgucXVvdGUgZnVuY3Rpb25zLCB0byBlc2NhcGUgZmlsZW5hbWVzIGFuZCBjb21tYW5kCisgIGxpbmVzLgorCistIElzc3VlICMxMjYwMzogRml4IHB5ZG9jLnN5bm9wc2lzKCkgb24gZmlsZXMgd2l0aCBub24tbmVnYXRpdmUgc3RfbXRpbWUuCisKKy0gSXNzdWUgIzEyNTE0OiBVc2UgdHJ5L2ZpbmFsbHkgdG8gYXNzdXJlIHRoZSB0aW1laXQgbW9kdWxlIHJlc3RvcmVzIGdhcmJhZ2UKKyAgY29sbGVjdGlvbnMgd2hlbiBpdCBpcyBkb25lLgorCistIElzc3VlICMxMjYwNzogSW4gc3VicHJvY2VzcywgZml4IGlzc3VlIHdoZXJlIGlmIHN0ZGluLCBzdGRvdXQgb3Igc3RkZXJyIGlzCisgIGdpdmVuIGFzIGEgbG93IGZkLCBpdCBnZXRzIG92ZXJ3cml0dGVuLgorCistIElzc3VlICMxMjU5MDogSURMRSBlZGl0b3Igd2luZG93IG5vdyBhbHdheXMgZGlzcGxheXMgdGhlIGZpcnN0IGxpbmUKKyAgd2hlbiBvcGVuaW5nIGEgbG9uZyBmaWxlLiAgV2l0aCBUayA4LjUsIHRoZSBmaXJzdCBsaW5lIHdhcyBoaWRkZW4uCisKKy0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlcykKKyAgQ29ubmVjdGlvbjpjbG9zZSBoZWFkZXIuCisKKy0gSXNzdWUgIzEyMTAyOiBEb2N1bWVudCB0aGF0IGJ1ZmZlcmVkIGZpbGVzIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgYmVpbmcgdXNlZAorICB3aXRoIG1tYXAuIFBhdGNoIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCisKKy0gSXNzdWUgIzEyNTYwOiBCdWlsZCBsaWJweXRob24uc28gb24gT3BlbkJTRC4gUGF0Y2ggYnkgU3RlZmFuIFNwZXJsaW5nLgorCistIElzc3VlICMxODEzOiBGaXggY29kZWMgbG9va3VwIHVuZGVyIFR1cmtpc2ggbG9jYWxlcy4KKworLSBJc3N1ZSAjMTI1OTE6IEltcHJvdmUgc3VwcG9ydCBvZiAidW5pdmVyc2FsIG5ld2xpbmVzIiBpbiB0aGUgc3VicHJvY2VzcworICBtb2R1bGU6IHRoZSBwaXBlZCBzdHJlYW1zIGNhbiBub3cgYmUgcHJvcGVybHkgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8uCisKKy0gSXNzdWUgIzEyNTkxOiBBbGxvdyBpby5UZXh0SU9XcmFwcGVyIHRvIHdvcmsgd2l0aCByYXcgSU8gb2JqZWN0cyAod2l0aG91dAorICBhIHJlYWQxKCkgbWV0aG9kKSwgYW5kIGFkZCBhICp3cml0ZV90aHJvdWdoKiBwYXJhbWV0ZXIgdG8gbWFuZGF0ZQorICB1bmJ1ZmZlcmVkIHdyaXRlcy4KKworLSBJc3N1ZSAjMTA4ODM6IEZpeCBzb2NrZXQgbGVha3MgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB1c2luZyBGVFAuCisKKy0gSXNzdWUgIzEyNTkyOiBNYWtlIFB5dGhvbiBidWlsZCBvbiBPcGVuQlNEIDUgKGFuZCBmdXR1cmUgbWFqb3IgcmVsZWFzZXMpLgorCistIElzc3VlICMxMjM3MjogUE9TSVggc2VtYXBob3JlcyBhcmUgYnJva2VuIG9uIEFJWDogZG9uJ3QgdXNlIHRoZW0uCisKKy0gSXNzdWUgIzEyNTUxOiBQcm92aWRlIGEgZ2V0X2NoYW5uZWxfYmluZGluZygpIG1ldGhvZCBvbiBTU0wgc29ja2V0cyBzbyBhcworICB0byBnZXQgY2hhbm5lbCBiaW5kaW5nIGRhdGEgZm9yIHRoZSBjdXJyZW50IFNTTCBzZXNzaW9uIChvbmx5IHRoZQorICAidGxzLXVuaXF1ZSIgY2hhbm5lbCBiaW5kaW5nIGlzIGltcGxlbWVudGVkKS4gIFRoaXMgYWxsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbgorICBvZiBjZXJ0YWluIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXMgc3VjaCBhcyBTQ1JBTS1TSEEtMS1QTFVTLiAgUGF0Y2ggYnkKKyAgSmFjZWsgS29uaWVjem55LgorCistIElzc3VlICM2NjUxOTQ6IGVtYWlsLnV0aWxzIG5vdyBoYXMgZm9ybWF0X2RhdGV0aW1lIGFuZCBwYXJzZWRhdGVfdG9fZGF0ZXRpbWUKKyAgZnVuY3Rpb25zLCBhbGxvd2luZyBmb3Igcm91bmQgdHJpcHBpbmcgb2YgUkZDMjgyMiBmb3JtYXQgZGF0ZXMuCisKKy0gSXNzdWUgIzEyNTcxOiBBZGQgYSBwbGF0LWxpbnV4MyBkaXJlY3RvcnkgbWlycm9yaW5nIHRoZSBwbGF0LWxpbnV4MgorICBkaXJlY3RvcnksIHNvIHRoYXQgImltcG9ydCBETEZDTiIgYW5kIG90aGVyIHNpbWlsYXIgaW1wb3J0cyB3b3JrIG9uCisgIExpbnV4IDMuMC4KKworLSBJc3N1ZSAjNzQ4NDogc210cGxpYiBubyBsb25nZXIgcHV0cyA8PiBhcm91bmQgYWRkcmVzc2VzIGluIFZSRlkgYW5kIEVYUE4KKyAgY29tbWFuZHM7IHRoZXkgYXJlbid0IHJlcXVpcmVkIGFuZCBpbiBmYWN0IHBvc3RmaXggZG9lc24ndCBzdXBwb3J0IHRoYXQgZm9ybS4KKworLSBJc3N1ZSAjMTIyNzM6IFJlbW92ZSBhc3QuX192ZXJzaW9uX18uIEFTVCBjaGFuZ2VzIGNhbiBiZSBhY2NvdW50ZWQgZm9yIGJ5CisgIGNoZWNraW5nIHN5cy52ZXJzaW9uX2luZm8gb3Igc3lzLl9tZXJjdXJpYWwuCisKKy0gU2lsZW5jZSBzcHVyaW91cyAiYnJva2VuIHBpcGUiIHRyYWNlYmFja3Mgd2hlbiBzaHV0dGluZyBkb3duIGEKKyAgUHJvY2Vzc1Bvb2xFeGVjdXRvci4KKworLSBGaXggcG90ZW50aWFsIHJlc291cmNlIGxlYWtzIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yCisgIGJ5IGpvaW5pbmcgYWxsIHF1ZXVlcyBhbmQgcHJvY2Vzc2VzIHdoZW4gc2h1dGRvd24oKSBpcyBjYWxsZWQuCisKKy0gSXNzdWUgIzExNjAzOiBGaXggYSBjcmFzaCB3aGVuIF9fc3RyX18gaXMgcmVib3VuZCBhcyBfX3JlcHJfXy4gIFBhdGNoIGJ5CisgIEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTEzMjE6IEZpeCBhIGNyYXNoIHdpdGggbXVsdGlwbGUgaW1wb3J0cyBvZiB0aGUgX3BpY2tsZSBtb2R1bGUgd2hlbgorICBlbWJlZGRpbmcgUHl0aG9uLiAgUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICM2NzU1OiBBZGQgZ2V0X3djaCgpIG1ldGhvZCB0byBjdXJzZXMud2luZG93IGNsYXNzLiBQYXRjaCBieSBJw7FpZ28KKyAgU2VybmEuCisKKy0gQWRkIGNnaS5jbG9zZWxvZygpIGZ1bmN0aW9uIHRvIGNsb3NlIHRoZSBsb2cgZmlsZS4KKworLSBJc3N1ZSAjMTI1MDI6IGFzeW5jb3JlOiBmaXggcG9sbGluZyBsb29wIHdpdGggQUZfVU5JWCBzb2NrZXRzLgorCistIElzc3VlICM0Mzc2OiBjdHlwZXMgbm93IHN1cHBvcnRzIG5lc3RlZCBzdHJ1Y3R1cmVzIGluIGEgZW5kaWFuIGRpZmZlcmVudCB0aGFuCisgIHRoZSBwYXJlbnQgc3RydWN0dXJlLiBQYXRjaCBieSBWbGFkIFJpc2N1dGlhLgorCistIFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHNldCB0aGUgX0NIVU5LX1NJWkUgYXR0cmlidXRlIG9mIGEKKyAgVGV4dElPV3JhcHBlciB0byBhIGh1Z2UgdmFsdWUsIG5vdCBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzEyNTA0OiBDbG9zZSBmaWxlIGhhbmRsZXMgaW4gYSB0aW1lbHkgbWFubmVyIGluIHBhY2thZ2luZy5kYXRhYmFzZS4KKyAgVGhpcyBmaXhlcyBhIGJ1ZyB3aXRoIHRoZSByZW1vdmUgKHVuaW5zdGFsbCkgZmVhdHVyZSBvbiBXaW5kb3dzLgorCistIElzc3VlcyAjMTIxNjkgYW5kICMxMDUxMDogRmFjdG9yIG91dCBjb2RlIHVzZWQgYnkgdmFyaW91cyBwYWNrYWdpbmcgY29tbWFuZHMKKyAgdG8gbWFrZSBIVFRQIFBPU1QgcmVxdWVzdHMsIGFuZCBtYWtlIHN1cmUgaXQgdXNlcyBDUkxGLgorCistIElzc3VlICMxMjAxNjogTXVsdGlieXRlIENKSyBkZWNvZGVycyBub3cgcmVzeW5jaHJvbml6ZSBmYXN0ZXIuIFRoZXkgb25seQorICBpZ25vcmUgdGhlIGZpcnN0IGJ5dGUgb2YgYW4gaW52YWxpZCBieXRlIHNlcXVlbmNlLiBGb3IgZXhhbXBsZSwKKyAgYidceGZmXG4nLmRlY29kZSgnZ2IyMzEyJywgJ3JlcGxhY2UnKSBnaXZlcyAnXHVmZmZkXG4nIGluc3RlYWQgb2YgJ1x1ZmZmZCcuCisKKy0gSXNzdWUgIzEyNDU5OiB0aW1lLnNsZWVwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHNsZWVwIGxlbmd0aCBpcworICBuZWdhdGl2ZSwgaW5zdGVhZCBvZiBhbiBpbmZpbml0ZSBzbGVlcCBvbiBXaW5kb3dzIG9yIHJhaXNpbmcgYW4gSU9FcnJvciBvbgorICBMaW51eCBmb3IgZXhhbXBsZSwgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgb24gYWxsIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI0NTE6IHB5ZG9jOiBodG1sX2dldGZpbGUoKSBub3cgdXNlcyB0b2tlbml6ZS5vcGVuKCkgdG8gc3VwcG9ydAorICBQeXRob24gc2NyaXB0cyB1c2luZyBhIGVuY29kaW5nIGRpZmZlcmVudCB0aGFuIFVURi04IChyZWFkIHRoZSBjb2RpbmcgY29va2llCisgIG9mIHRoZSBzY3JpcHQpLgorCistIElzc3VlICMxMjQ5Mzogc3VicHJvY2VzczogUG9wZW4uY29tbXVuaWNhdGUoKSBub3cgYWxzbyBoYW5kbGVzIEVJTlRSIGVycm9ycworICBpZiB0aGUgcHJvY2VzcyBoYXMgb25seSBvbmUgcGlwZS4KKworLSBJc3N1ZSAjMTI0Njc6IHdhcm5pbmdzOiBmaXggYSByYWNlIGNvbmRpdGlvbiBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBhdAorICBzaHV0ZG93biwgaWYgZ2xvYmFscygpWydfX2ZpbGVfXyddIGlzIE5vbmUuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaW1wb3J0ZmlsZSgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcnVucHk6IHJ1bl9wYXRoKCkgbm93IG9wZW5zIHRoZSBQeXRob24gc2NyaXB0IGluIGJpbmFyeSBtb2RlLAorICBpbnN0ZWFkIG9mIHRleHQgbW9kZSB1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nLCB0byBzdXBwb3J0IG90aGVyIGVuY29kaW5ncworICB0aGFuIFVURi04IChzY3JpcHRzIHVzaW5nIHRoZSBjb2RpbmcgY29va2llKS4KKworLSBJc3N1ZSAjMTI0NTE6IHhtbC5kb20ucHVsbGRvbTogcGFyc2UoKSBub3cgb3BlbnMgZmlsZXMgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZAorICBvZiB0aGUgdGV4dCBtb2RlICh1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nKSB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyMTQ3OiBBZGp1c3QgdGhlIG5ldy1pbi0zLjIgc210cGxpYi5zZW5kX21lc3NhZ2UgbWV0aG9kIGZvciBiZXR0ZXIKKyAgY29uZm9ybWFuY2UgdG8gdGhlIFJGQ3M6ICBjb3JyZWN0bHkgaGFuZGxlIFNlbmRlciBhbmQgUmVzZW50LSBoZWFkZXJzLgorCistIElzc3VlICMxMjM1MjogRml4IGEgZGVhZGxvY2sgaW4gbXVsdGlwcm9jZXNzaW5nLkhlYXAgd2hlbiBhIGJsb2NrIGlzIGZyZWVkIGJ5CisgIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGlsZSB0aGUgSGVhcCBsb2NrIGlzIGhlbGQuCisKKy0gSXNzdWUgIzEyNDYyOiB0aW1lLnNsZWVwKCkgbm93IGltbWVkaWF0ZWx5IGNhbGxzIHRoZSAoUHl0aG9uKSBzaWduYWwgaGFuZGxlcgorICBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dAorICBpbnN0cnVjdGlvbi4KKworLSBJc3N1ZSAjMTI0NDI6IG5ldyBzaHV0aWwuZGlza191c2FnZSBmdW5jdGlvbiwgcHJvdmlkaW5nIHRvdGFsLCB1c2VkIGFuZCBmcmVlCisgIGRpc2sgc3BhY2Ugc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTI0NTE6IFRoZSBYSW5jbHVkZSBkZWZhdWx0IGxvYWRlciBvZiB4bWwuZXRyZWUgbm93IGRlY29kZXMgZmlsZXMgZnJvbQorICBVVEYtOCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIEl0IG5vdworICBhbHNvIG9wZW5zIFhNTCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpbiBiaW5hcnkgbW9kZSBpbnN0ZWFkIG9mIHRoZSB0ZXh0IG1vZGUKKyAgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogZG9jdGVzdC5kZWJ1Z19zY3JpcHQoKSBkb2Vzbid0IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlCisgIGFueW1vcmUgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcHlkb2Muc3lub3BzaXMoKSBub3cgcmVhZHMgdGhlIGVuY29kaW5nIGNvb2tpZSBpZiBhdmFpbGFibGUsCisgIHRvIHJlYWQgdGhlIFB5dGhvbiBzY3JpcHQgZnJvbSB0aGUgcmlnaHQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzEyNDUxOiBkaXN0dXRpbHMgbm93IG9wZW5zIHRoZSBzZXR1cCBzY3JpcHQgaW4gYmluYXJ5IG1vZGUgdG8gcmVhZCB0aGUKKyAgZW5jb2RpbmcgY29va2llLCBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQgaW4gVVRGLTguCisKKy0gSXNzdWUgIzk1MTY6IE9uIE1hYyBPUyBYLCBjaGFuZ2UgRGlzdHV0aWxzIHRvIG5vIGxvbmdlciBnbG9iYWxseSBhdHRlbXB0IHRvCisgIGNoZWNrIG9yIHNldCB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUKKyAgaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIFRoaXMgY291bGQgY2F1c2UgZmFpbHVyZXMgaW4gbm9uLURpc3R1dGlscyBzdWJwcm9jZXNzZXMKKyAgYW5kIHdhcyB1bnJlbGlhYmxlIHNpbmNlIHRlc3RzIG9yIHVzZXIgcHJvZ3JhbXMgY291bGQgbW9kaWZ5IHRoZSBpbnRlcnByZXRlcgorICBlbnZpcm9ubWVudCBhZnRlciBEaXN0dXRpbHMgc2V0IGl0LiAgSW5zdGVhZCwgaGF2ZSBEaXN0dXRpbHMgc2V0IHRoZQorICBkZXBsb3ltZW50IHRhcmdldCBvbmx5IGluIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGJ1aWxkIHN1YnByb2Nlc3MuICBJdCBpcworICBzdGlsbCBwb3NzaWJsZSB0byBnbG9iYWxseSBvdmVycmlkZSB0aGUgZGVmYXVsdCBieSBzZXR0aW5nCisgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBiZWZvcmUgbGF1bmNoaW5nIHRoZSBpbnRlcnByZXRlcjsgaXRzIHZhbHVlIG11c3QgYmUKKyAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIHZhbHVlIHdpdGggd2hpY2ggdGhlIGludGVycHJldGVyCisgIHdhcyBidWlsdC4gIEFsc28sIGltcGxlbWVudCB0aGUgc2FtZSBoYW5kbGluZyBpbiBwYWNrYWdpbmcuCisKKy0gSXNzdWUgIzEyNDIyOiBJbiB0aGUgY29weSBtb2R1bGUsIGRvbid0IHN0b3JlIG9iamVjdHMgdGhhdCBhcmUgdGhlaXIgb3duIGNvcHkKKyAgaW4gdGhlIG1lbW8gZGljdC4KKworLSBJc3N1ZSAjMTIzMDM6IEFkZCBzaWd3YWl0aW5mbygpIGFuZCBzaWd0aW1lZHdhaXQoKSB0byB0aGUgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTI0MDQ6IFJlbW92ZSBDODkgaW5jb21wYXRpYmxlIGNvZGUgZnJvbSBtbWFwIG1vZHVsZS4gUGF0Y2ggYnkgQWtpcmEKKyAgS2l0YWRhLgorCistIElzc3VlICMxODc0OiBlbWFpbCBub3cgZGV0ZWN0cyBhbmQgcmVwb3J0cyBhcyBhIGRlZmVjdCB0aGUgcHJlc2VuY2Ugb2YKKyAgYW55IENURSBvdGhlciB0aGFuIDdiaXQsIDhiaXQsIG9yIGJpbmFyeSBvbiBhIG11bHRpcGFydC4KKworLSBJc3N1ZSAjMTIzODM6IEZpeCBzdWJwcm9jZXNzIG1vZHVsZSB3aXRoIGVudj17fTogZG9uJ3QgY29weSB0aGUgZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzLCBzdGFydCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50LgorCistIElzc3VlICMxMTYzNzogRml4IHN1cHBvcnQgZm9yIGltcG9ydGluZyBwYWNrYWdpbmcgc2V0dXAgaG9va3MgZnJvbSB0aGUKKyAgcHJvamVjdCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzY3NzE6IE1vdmVkIHRoZSBjdXJzZXMud3JhcHBlciBmdW5jdGlvbiBmcm9tIHRoZSBzaW5nbGUtZnVuY3Rpb24KKyAgd3JhcHBlciBtb2R1bGUgaW50byBfX2luaXRfXywgZWxpbWluYXRpbmcgdGhlIG1vZHVsZS4gIFNpbmNlIF9faW5pdF9fIHdhcworICBhbHJlYWR5IGltcG9ydGluZyB0aGUgZnVuY3Rpb24gdG8gY3Vyc2VzLndyYXBwZXIsIHRoZXJlIGlzIG5vIEFQSSBjaGFuZ2UuCisKKy0gSXNzdWUgIzExNTg0OiBlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlciBubyBsb25nZXIgZmFpbHMgaWYgdGhlIGhlYWRlcgorICBwYXNzZWQgdG8gaXQgaXMgYSBIZWFkZXIgb2JqZWN0LCBhbmQgSGVhZGVyL21ha2VfaGVhZGVyIG5vIGxvbmdlciBmYWlsCisgIGlmIGdpdmVuIGJpbmFyeSB1bmtub3duLThiaXQgaW5wdXQuCisKKy0gSXNzdWUgIzExNzAwOiBtYWlsYm94IHByb3h5IG9iamVjdCBjbG9zZSBtZXRob2RzIGNhbiBub3cgYmUgY2FsbGVkIG11bHRpcGxlCisgIHRpbWVzIHdpdGhvdXQgZXJyb3IuCisKKy0gSXNzdWUgIzExNzY3OiBDb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG1haWxib3gncyBfX2dldGl0ZW1fXyBtZXRob2QuCisKKy0gSXNzdWUgIzEyMTMzOiBBYnN0cmFjdEhUVFBIYW5kbGVyLmRvX29wZW4oKSBvZiB1cmxsaWIucmVxdWVzdCBjbG9zZXMgdGhlIEhUVFAKKyAgY29ubmVjdGlvbiBpZiBpdHMgZ2V0cmVzcG9uc2UoKSBtZXRob2QgZmFpbHMgd2l0aCBhIHNvY2tldCBlcnJvci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzEyMjQwOiBBbGxvdyBtdWx0aXBsZSBzZXR1cCBob29rcyBpbiBwYWNrYWdpbmcncyBzZXR1cC5jZmcgZmlsZXMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgQnJheS4KKworLSBJc3N1ZSAjOTI4NDogQWxsb3cgaW5zcGVjdC5maW5kc291cmNlKCkgdG8gZmluZCB0aGUgc291cmNlIG9mIGRvY3Rlc3QKKyAgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTU5NTogRml4IGFzc29ydGVkIGJ1Z3MgaW4gcGFja2FnaW5nLnV0aWwuY2ZnX3RvX2FyZ3MsIGEKKyAgY29tcGF0aWJpbGl0eSBoZWxwZXIgZm9yIHRoZSBkaXN0dXRpbHMtcGFja2FnaW5nIHRyYW5zaXRpb24uICBPcmlnaW5hbCBwYXRjaAorICBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzEyMjg3OiBJbiBvc3NhdWRpb2RldiwgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzbid0IGNsb3NlZCBpbiBzZXZlcmFsCisgIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEyMDA5OiBGaXhlZCByZWdyZXNzaW9uIGluIG5ldHJjIGZpbGUgY29tbWVudCBoYW5kbGluZy4KKworLSBJc3N1ZSAjMTIyNDY6IFdhcm4gYW5kIGZhaWwgd2hlbiB0cnlpbmcgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHByb2plY3QgZnJvbQorICBhbiB1bmluc3RhbGxlZCBQeXRob24gKGJ1aWx0IGluIGEgc291cmNlIGNoZWNrb3V0KS4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFRzaGVwYW5nIExla2hvbmtob2JlLgorCistIElzc3VlICMxMDY5NDogemlwZmlsZSBub3cgaWdub3JlcyBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgYSB6aXBmaWxlLgorCistIElzc3VlICMxMjI4MzogRml4ZWQgcmVncmVzc2lvbiBpbiBzbXRwbGliIHF1b3Rpbmcgb2YgbGVhZGluZyBkb3RzIGluIERBVEEuCisKKy0gSXNzdWUgIzEwNDI0OiBBcmdwYXJzZSBub3cgaW5jbHVkZXMgdGhlIG5hbWVzIG9mIHRoZSBtaXNzaW5nIHJlcXVpcmVkCisgIGFyZ3VtZW50cyBpbiB0aGUgbWlzc2luZyBhcmd1bWVudHMgZXJyb3IgbWVzc2FnZS4KKworLSBJc3N1ZSAjMTIxNjg6IFN5c0xvZ0hhbmRsZXIgbm93IGFsbG93cyBOVUwgdGVybWluYXRpb24gdG8gYmUgY29udHJvbGxlZCB1c2luZworICBhIG5ldyAnYXBwZW5kX251bCcgYXR0cmlidXRlIG9uIHRoZSBoYW5kbGVyLgorCistIElzc3VlICMxMTU4MzogU3BlZWQgdXAgb3MucGF0aC5pc2RpciBvbiBXaW5kb3dzIGJ5IHVzaW5nIEdldEZpbGVBdHRyaWJ1dGVzCisgIGluc3RlYWQgb2Ygb3Muc3RhdC4KKworLSBJc3N1ZSAjMTIwMjE6IE1ha2UgbW1hcCdzIHJlYWQoKSBtZXRob2QgYXJndW1lbnQgb3B0aW9uYWwuIFBhdGNoIGJ5IFBldHJpCisgIExlaHRpbmVuLgorCistIElzc3VlICM5MjA1OiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvciBub3cgZGV0ZWN0cyBraWxsZWQKKyAgY2hpbGRyZW4gYW5kIHJhaXNlcyBCcm9rZW5Qcm9jZXNzUG9vbCBpbiBzdWNoIGEgc2l0dWF0aW9uLiAgUHJldmlvdXNseSBpdAorICB3b3VsZCByZWxpYWJseSBmcmVlemUvZGVhZGxvY2suCisKKy0gSXNzdWUgIzEyMDQwOiBFeHBvc2UgYSBuZXcgYXR0cmlidXRlIGBgc2VudGluZWxgYCBvbiBpbnN0YW5jZXMgb2YKKyAgYGBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2BgLiAgQWxzbywgZml4IFByb2Nlc3Muam9pbigpIHRvIG5vdCB1c2UgcG9sbGluZworICBhbnltb3JlLCB3aGVuIGdpdmVuIGEgdGltZW91dC4KKworLSBJc3N1ZSAjMTE4OTM6IFJlbW92ZSBvYnNvbGV0ZSBpbnRlcm5hbCB3cmFwcGVyIGNsYXNzIGBgU1NMRmFrZUZpbGVgYCBpbiB0aGUKKyAgc210cGxpYiBtb2R1bGUuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxMjA4MDogRml4IGEgRGVjaW1hbC5wb3dlcigpIGNhc2UgdGhhdCB0b29rIGFuIHVucmVhc29uYWJseSBsb25nIHRpbWUKKyAgdG8gY29tcHV0ZS4KKworLSBJc3N1ZSAjMTIyMjE6IFJlbW92ZSBfX3ZlcnNpb25fXyBhdHRyaWJ1dGVzIGZyb20gcHlleHBhdCwgcGlja2xlLCB0YXJmaWxlLAorICBweWRvYywgdGtpbnRlciwgYW5kIHhtbC5wYXJzZXJzLmV4cGF0LiBUaGlzIHdlcmUgdXNlbGVzcyB2ZXJzaW9uIGNvbnN0YW50cworICBsZWZ0IG92ZXIgZnJvbSB0aGUgTWVyY3VyaWFsIHRyYW5zaXRpb24KKworLSBOYW1lZCB0dXBsZXMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggdmFycygpLgorCistIElzc3VlICMxMjA4NTogRml4IGFuIGF0dHJpYnV0ZSBlcnJvciBpbiBzdWJwcm9jZXNzLlBvcGVuIGRlc3RydWN0b3IgaWYgdGhlCisgIGNvbnN0cnVjdG9yIGhhcyBmYWlsZWQsIGUuZy4gYmVjYXVzZSBvZiBhbiB1bmRlY2xhcmVkIGtleXdvcmQgYXJndW1lbnQuIFBhdGNoCisgIHdyaXR0ZW4gYnkgT2xlZyBPc2hteWFuLgorCistIElzc3VlICMxMjAyODogTWFrZSB0aHJlYWRpbmcuX2dldF9pZGVudCgpIHB1YmxpYywgcmVuYW1lIGl0IHRvCisgIHRocmVhZGluZy5nZXRfaWRlbnQoKSBhbmQgZG9jdW1lbnQgaXQuIFRoaXMgZnVuY3Rpb24gd2FzIGFscmVhZHkgdXNlZCB1c2luZworICBfdGhyZWFkLmdldF9pZGVudCgpLgorCistIElzc3VlICMxMjE3MTogSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0KCkgb2YgQ0pLIGNvZGVjcyAobXVsdGlieXRlY29kZWMpIGNhbGxzCisgIGVuY3Jlc2V0KCkgaW5zdGVhZCBvZiBkZWNyZXNldCgpLgorCistIElzc3VlICMxMjIxODogUmVtb3ZlZCB3c2dpcmVmLmVnZy1pbmZvLgorCistIElzc3VlICMxMjE5NjogQWRkIHBpcGUyKCkgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjOTg1MDY0OiBNYWtlIHBsaXN0bGliIG1vcmUgcmVzaWxpZW50IHRvIGZhdWx0eSBpbnB1dCBwbGlzdHMuCisgIFBhdGNoIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxNjI1OiBCWjJGaWxlIGFuZCBiejIuZGVjb21wcmVzcygpIG5vdyBzdXBwb3J0IG11bHRpLXN0cmVhbSBmaWxlcy4KKyAgSW5pdGlhbCBwYXRjaCBieSBOaXIgQWlkZXMuCisKKy0gSXNzdWUgIzEyMTc1OiBCdWZmZXJlZFJlYWRlci5yZWFkKC0xKSBub3cgY2FsbHMgcmF3LnJlYWRhbGwoKSBpZiBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyBvbmx5IHJlYWRzIHRoZSBmaWxlIHBvc2l0aW9uIGFuZCBzaXplCisgIG9uY2UuCisKKy0gSXNzdWUgIzEyMTc1OiBSYXdJT0Jhc2UucmVhZGFsbCgpIG5vdyByZXR1cm5zIE5vbmUgaWYgcmVhZCgpIHJldHVybnMgTm9uZS4KKworLSBJc3N1ZSAjMTIxNzU6IEZpbGVJTy5yZWFkYWxsKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBJT0Vycm9yCisgIGlmIHRoZSBmaWxlIGlzIGNsb3NlZC4KKworLSBJc3N1ZSAjMTExMDk6IE5ldyBzZXJ2aWNlX2FjdGlvbiBtZXRob2QgZm9yIEJhc2VTZXJ2ZXIsIHVzZWQgYnkgRm9ya2luZ01peEluCisgIGNsYXNzIGZvciBjbGVhbnVwLiBJbml0aWFsIFBhdGNoIGJ5IEp1c3RpbiBXYXJrZW50aW4uCisKKy0gSXNzdWUgIzEyMDQ1OiBBdm9pZCBkdXBsaWNhdGUgZXhlY3V0aW9uIG9mIGNvbW1hbmQgaW4KKyAgY3R5cGVzLnV0aWwuX2dldF9zb25hbWUoKS4gIFBhdGNoIGJ5IFNpamluIEpvc2VwaC4KKworLSBJc3N1ZSAjMTA4MTg6IFJlbW92ZSB0aGUgVGsgR1VJIGFuZCB0aGUgc2VydmUoKSBmdW5jdGlvbiBvZiB0aGUgcHlkb2MgbW9kdWxlLAorICBweWRvYyAtZyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIgYW5kIGl0IGhhcyBhIG5ldyBlbmhhbmNlZCB3ZWIKKyAgc2VydmVyLgorCistIElzc3VlICMxNDQxNTMwOiBJbiBpbWFwbGliLCByZWFkIHRoZSBkYXRhIGluIG9uZSBjaHVuayB0byBzcGVlZCB1cCBsYXJnZQorICByZWFkcyBhbmQgc2ltcGxpZnkgY29kZS4KKworLSBJc3N1ZSAjMTIwNzA6IEZpeCB0aGUgTWFrZWZpbGUgcGFyc2VyIG9mIHRoZSBzeXNjb25maWcgbW9kdWxlIHRvIGhhbmRsZQorICBjb3JyZWN0bHkgcmVmZXJlbmNlcyB0byAiYm9ndXMgdmFyaWFibGUiIChlLmcuICJwcmVmaXg9JC9vcHQvcHl0aG9uIikuCisKKy0gSXNzdWUgIzEyMTAwOiBEb24ndCByZXNldCBpbmNyZW1lbnRhbCBlbmNvZGVycyBvZiBDSksgY29kZWNzIGF0IGVhY2ggY2FsbCB0bworICB0aGVpciBlbmNvZGUoKSBtZXRob2QgYW55bW9yZSwgYnV0IGNvbnRpbnVlIHRvIGNhbGwgdGhlIHJlc2V0KCkgbWV0aG9kIGlmIHRoZQorICBmaW5hbCBhcmd1bWVudCBpcyBUcnVlLgorCistIElzc3VlICMxMjA0OTogQWRkIFJBTkRfYnl0ZXMoKSBhbmQgUkFORF9wc2V1ZG9fYnl0ZXMoKSBmdW5jdGlvbnMgdG8gdGhlIHNzbAorICBtb2R1bGUuCisKKy0gSXNzdWUgIzY1MDE6IG9zLmRldmljZV9lbmNvZGluZygpIHJldHVybnMgTm9uZSBvbiBXaW5kb3dzIGlmIHRoZSBhcHBsaWNhdGlvbgorICBoYXMgbm8gY29uc29sZS4KKworLSBJc3N1ZSAjMTIxMDU6IEFkZCBPX0NMT0VYRUMgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNzk6IERlY2ltYWwoJ0luZmluaXR5JykuZm1hKERlY2ltYWwoJzAnKSwgKDMuOTEyMjQzMTgxMjY3ODZlKzE5KzBqKSkKKyAgbm93IHJhaXNlcyBUeXBlRXJyb3IgKHJlZmxlY3RpbmcgdGhlIGludmFsaWQgdHlwZSBvZiB0aGUgM3JkIGFyZ3VtZW50KSByYXRoZXIKKyAgdGhhbiBEZWNpbWFsLkludmFsaWRPcGVyYXRpb24uCisKKy0gSXNzdWUgIzEyMTI0OiB6aXBpbXBvcnQgZG9lc24ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHpsaWIuZGVjb21wcmVzcygpIGFueW1vcmUKKyAgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZS4KKworLSBBZGQgdGhlIHBhY2thZ2luZyBtb2R1bGUsIGFuIGltcHJvdmVkIGZvcmsgb2YgZGlzdHV0aWxzIChhbHNvIGtub3duIGFzCisgIGRpc3R1dGlsczIpLgorCistIElzc3VlICMxMjA2NTogY29ubmVjdF9leCgpIG9uIGFuIFNTTCBzb2NrZXQgbm93IHJldHVybnMgdGhlIG9yaWdpbmFsIGVycm5vCisgIHdoZW4gdGhlIHNvY2tldCdzIHRpbWVvdXQgZXhwaXJlcyAoaXQgdXNlZCB0byByZXR1cm4gTm9uZSkuCisKKy0gSXNzdWUgIzg4MDk6IFRoZSBTTVRQX1NTTCBjb25zdHJ1Y3RvciBhbmQgU01UUC5zdGFydHRscygpIG5vdyBzdXBwb3J0CisgIHBhc3NpbmcgYSBgYGNvbnRleHRgYCBhcmd1bWVudCBwb2ludGluZyB0byBhbiBzc2wuU1NMQ29udGV4dCBpbnN0YW5jZS4KKyAgUGF0Y2ggYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMTA4ODogZG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBGNSB0byBydW4gYSBzY3JpcHQgaW4gSURMRSBvbiBNYWNPU1gKKyAgd2l0aCBUayA4LjUuCisKKy0gSXNzdWUgIzk1MTY6IElzc3VlICM5NTE2OiBhdm9pZCBlcnJvcnMgaW4gc3lzY29uZmlnIHdoZW4gTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgIGlzIHNldCBpbiBzaGVsbC4KKworLSBJc3N1ZSAjODY1MDogTWFrZSB6bGliIG1vZHVsZSA2NC1iaXQgY2xlYW4uIGNvbXByZXNzKCksIGRlY29tcHJlc3MoKSBhbmQKKyAgdGhlaXIgaW5jcmVtZW50YWwgY291bnRlcnBhcnRzIG5vdyByYWlzZSBPdmVyZmxvd0Vycm9yIGlmIGdpdmVuIGFuIGlucHV0CisgIGxhcmdlciB0aGFuIDRHQiwgaW5zdGVhZCBvZiBzaWxlbnRseSB0cnVuY2F0aW5nIHRoZSBpbnB1dCBhbmQgcmV0dXJuaW5nCisgIGFuIGluY29ycmVjdCByZXN1bHQuCisKKy0gSXNzdWUgIzEyMDUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGNsZWFycyB0aGUgdW5jb25zdW1lZF90YWlsCisgIGF0dHJpYnV0ZSB3aGVuIGNhbGxlZCB3aXRob3V0IGEgbWF4X2xlbmd0aCBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTIwNjI6IEZpeCBhIGZsdXNoaW5nIGJ1ZyB3aGVuIGRvaW5nIGEgY2VydGFpbiB0eXBlIG9mIEkvTyBzZXF1ZW5jZQorICBvbiBhIGZpbGUgb3BlbmVkIGluIHJlYWQrd3JpdGUgbW9kZSAobmFtZWx5OiByZWFkaW5nLCBzZWVraW5nIGEgYml0IGZvcndhcmQsCisgIHdyaXRpbmcsIHRoZW4gc2Vla2luZyBiZWZvcmUgdGhlIHByZXZpb3VzIHdyaXRlIGJ1dCBzdGlsbCB3aXRoaW4gYnVmZmVyZWQKKyAgZGF0YSwgYW5kIHdyaXRpbmcgYWdhaW4pLgorCistIElzc3VlICM5OTcxOiBXcml0ZSBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyZWRSZWFkZXIucmVhZGludG8oKS4KKyAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjMTAyODogVGsgcmV0dXJucyBpbnZhbGlkIFVuaWNvZGUgbnVsbCBpbiAlQTogVW5pY29kZURlY29kZUVycm9yLgorICBXaXRoIFRrIDwgOC41IF90a2ludGVyLmM6UHl0aG9uQ21kKCkgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciwgY2F1c2VkCisgIElETEUgdG8gZXhpdC4gIENvbnZlcnRlZCB0byB2YWxpZCBVbmljb2RlIG51bGwgaW4gUHl0aG9uQ21kKCkuCisKKy0gSXNzdWUgIzExNzk5OiB1cmxsaWIucmVxdWVzdCBBdXRoZW50aWNhdGlvbiBIYW5kbGVycyB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvcgorICB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIHVuc3VwcG9ydGVkIEF1dGhlbnRpY2F0aW9uIFNjaGVtZS4gUGF0Y2ggY29udHJpYnV0ZWQKKyAgYnkgWXV2YWwgR3JlZW5maWVsZC4KKworLSBJc3N1ZSAjMTA0MTksICM2MDExOiBidWlsZF9zY3JpcHRzIGNvbW1hbmQgb2YgZGlzdHV0aWxzIGhhbmRsZXMgY29ycmVjdGx5CisgIG5vbi1BU0NJSSBwYXRoIChwYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSkuIE9wZW4gYW5kIHdyaXRlIHRoZSBzY3JpcHQgaW4KKyAgYmluYXJ5IG1vZGUsIGJ1dCBlbnN1cmUgdGhhdCB0aGUgc2hlYmFuZyBpcyBkZWNvZGFibGUgZnJvbSBVVEYtOCBhbmQgZnJvbSB0aGUKKyAgZW5jb2Rpbmcgb2YgdGhlIHNjcmlwdC4KKworLSBJc3N1ZSAjODQ5ODogSW4gc29ja2V0LmFjY2VwdCgpLCBhbGxvdyB0byBzcGVjaWZ5IDAgYXMgYSBiYWNrbG9nIHZhbHVlIGluCisgIG9yZGVyIHRvIGFjY2VwdCBleGFjdGx5IG9uZSBjb25uZWN0aW9uLiAgUGF0Y2ggYnkgRGFuaWVsIEV2ZXJzLgorCistIElzc3VlICMxMjAxMTogc2lnbmFsLnNpZ25hbCgpIGFuZCBzaWduYWwuc2lnaW50ZXJydXB0KCkgcmFpc2UgYW4gT1NFcnJvciwKKyAgaW5zdGVhZCBvZiBhIFJ1bnRpbWVFcnJvcjogT1NFcnJvciBoYXMgYW4gZXJybm8gYXR0cmlidXRlLgorCistIElzc3VlICMzNzA5OiBhZGQgYSBmbHVzaF9oZWFkZXJzIG1ldGhvZCB0byBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCB3aGljaAorICBtYW5hZ2VzIHRoZSBzZW5kaW5nIG9mIGhlYWRlcnMgdG8gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hpbmcgdGhlIGludGVybmFsCisgIGhlYWRlcnMgYnVmZmVyLiBQYXRjaCBjb250cmlidXRpb24gYnkgQW5kcmV3IFNjaGFhZgorCistIElzc3VlICMxMTc0MzogUmV3cml0ZSBtdWx0aXByb2Nlc3NpbmcgY29ubmVjdGlvbiBjbGFzc2VzIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMTE2NDogU3RvcCB0cnlpbmcgdG8gdXNlIF94bWxwbHVzIGluIHRoZSB4bWwgbW9kdWxlLgorCistIElzc3VlICMxMTg4ODogQWRkIGxvZzIgZnVuY3Rpb24gdG8gbWF0aCBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgTWFyaworICBEaWNraW5zb24uCisKKy0gSXNzdWUgIzEyMDEyOiBzc2wuUFJPVE9DT0xfU1NMdjIgYmVjb21lcyBvcHRpb25hbC4KKworLSBJc3N1ZSAjODQwNzogVGhlIHNpZ25hbCBoYW5kbGVyIHdyaXRlcyB0aGUgc2lnbmFsIG51bWJlciBhcyBhIHNpbmdsZSBieXRlCisgIGluc3RlYWQgb2YgYSBudWwgYnl0ZSBpbnRvIHRoZSB3YWtldXAgZmlsZSBkZXNjcmlwdG9yLiBTbyBpdCBpcyBwb3NzaWJsZSB0bworICB3YWl0IG1vcmUgdGhhbiBvbmUgc2lnbmFsIGFuZCBrbm93IHdoaWNoIHNpZ25hbHMgd2VyZSByYWlzZWQuCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBwdGhyZWFkX2tpbGwoKSwgc2lncGVuZGluZygpIGFuZCBzaWd3YWl0KCkgZnVuY3Rpb25zIHRvIHRoZQorICBzaWduYWwgbW9kdWxlLgorCistIElzc3VlICMxMTkyNzogU01UUF9TU0wgbm93IHVzZXMgcG9ydCA0NjUgYnkgZGVmYXVsdCBhcyBkb2N1bWVudGVkLiAgUGF0Y2gKKyAgYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMjAwMjogZnRwbGliJ3MgYWJvcnQoKSBtZXRob2QgcmFpc2VzIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTE5MTY6IEFkZCBhIG51bWJlciBvZiBNYWNPU1ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gdGhlIGVycm5vIG1vZHVsZS4KKyAgUGF0Y2ggYnkgUGllcnJlIENhcnJpZXIuCisKKy0gSXNzdWUgIzExOTk5OiBmaXhlZCBzcG9yYWRpYyBzeW5jIGZhaWx1cmUgbWFpbGJveC5NYWlsZGlyIGR1ZSB0byBpdHMgdHJ5aW5nIHRvCisgIGRldGVjdCBtdGltZSBjaGFuZ2VzIGJ5IGNvbXBhcmluZyB0byB0aGUgc3lzdGVtIGNsb2NrIGluc3RlYWQgb2YgdG8gdGhlCisgIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBtdGltZS4KKworLSBJc3N1ZSAjMTEwNzI6IGFkZGVkIE1MU0QgY29tbWFuZCAoUkZDLTM2NTkpIHN1cHBvcnQgdG8gZnRwbGliLgorCistIElzc3VlICM4ODA4OiBUaGUgSU1BUDRfU1NMIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgcGFzc2luZyBhbiBTU0xDb250ZXh0CisgIHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZSBjaGFubmVsLiAgUGF0Y2ggYnkgU2lqaW4KKyAgSm9zZXBoLgorCistIG50cGF0aC5zYW1lZmlsZSBmYWlsZWQgdG8gbm90aWNlIHRoYXQgImEudHh0IiBhbmQgIkEuVFhUIiByZWZlciB0byB0aGUgc2FtZQorICBmaWxlIG9uIFdpbmRvd3MgWFAuIEFzIG5vdGljZWQgaW4gaXNzdWUgIzEwNjg0LgorCistIElzc3VlICMxMjAwMDogV2hlbiBhIFNTTCBjZXJ0aWZpY2F0ZSBoYXMgYSBzdWJqZWN0QWx0TmFtZSB3aXRob3V0IGFueQorICBkTlNOYW1lIGVudHJ5LCBzc2wubWF0Y2hfaG9zdG5hbWUoKSBzaG91bGQgdXNlIHRoZSBzdWJqZWN0J3MgY29tbW9uTmFtZS4KKyAgUGF0Y2ggYnkgTmljb2xhcyBCYXJlaWwuCisKKy0gSXNzdWUgIzEwNzc1OiBhc3NlcnRSYWlzZXMsIGFzc2VydFJhaXNlc1JlZ2V4LCBhc3NlcnRXYXJucywgYW5kCisgIGFzc2VydFdhcm5zUmVnZXggbm93IGFjY2VwdCBhIGtleXdvcmQgYXJndW1lbnQgJ21zZycgd2hlbiB1c2VkIGFzIGNvbnRleHQKKyAgbWFuYWdlcnMuICBJbml0aWFsIHBhdGNoIGJ5IFdpbnN0b24gRXdlcnQuCisKKy0gSXNzdWUgIzEwNjg0OiBzaHV0aWwubW92ZSB1c2VkIHRvIGRlbGV0ZSBhIGZvbGRlciBvbiBjYXNlIGluc2Vuc2l0aXZlCisgIGZpbGVzeXN0ZW1zIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZSB3aGVyZSB0aGUgc2FtZSBleGNlcHQKKyAgZm9yIHRoZSBjYXNlLgorCistIElzc3VlICMxMTY0Nzogb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIgbm93IHN1cHBvcnQKKyAgbW9yZSB0aGFuIG9uZSBjYWxsIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHVzZWQgYXMgYSBkZWNvcmF0b3IuIEluaXRpYWwgcGF0Y2gKKyAgYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTE5MzA6IFJlbW92ZWQgZGVwcmVjYXRlZCB0aW1lLmFjY2VwdDJkeWVhciB2YXJpYWJsZS4KKyAgUmVtb3ZlZCB5ZWFyID49IDEwMDAgcmVzdHJpY3Rpb24gZnJvbSBkYXRldGltZS5zdHJmdGltZS4KKworLSBsb2dnaW5nOiBkb24ndCBkZWZpbmUgUXVldWVMaXN0ZW5lciBpZiBQeXRob24gaGFzIG5vIHRocmVhZCBzdXBwb3J0LgorCistIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgbm93IHdvcmtzIHdpdGggY29sbGVjdGlvbnMuSGFzaGFibGUoKS4KKworLSBJc3N1ZSAjMTEyNzc6IG1tYXAubW1hcCgpIGNhbGxzIGZjbnRsKGZkLCBGX0ZVTExGU1lOQykgb24gTWFjIE9TIFggdG8gZ2V0CisgIGFyb3VuZCBhIG1tYXAgYnVnIHdpdGggc3BhcnNlIGZpbGVzLiBQYXRjaCB3cml0dGVuIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBzaWduYWwucHRocmVhZF9zaWdtYXNrKCkgZnVuY3Rpb24gdG8gZmV0Y2ggYW5kL29yIGNoYW5nZSB0aGUKKyAgc2lnbmFsIG1hc2sgb2YgdGhlIGNhbGxpbmcgdGhyZWFkLgorCistIElzc3VlICMxMTg1ODogY29uZmlncGFyc2VyLkV4dGVuZGVkSW50ZXJwb2xhdGlvbiBleHBlY3RlZCBsb3dlci1jYXNlIHNlY3Rpb24KKyAgbmFtZXMuCisKKy0gSXNzdWUgIzExMzI0OiBDb25maWdQYXJzZXIoaW50ZXJwb2xhdGlvbj1Ob25lKSBub3cgd29ya3MgY29ycmVjdGx5LgorCistIElzc3VlICMxMTgxMTogc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKSBpcyBub3cgSVB2Ni1jb21wYXRpYmxlLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTc2MzogZG9uJ3QgdXNlIGRpZmZsaWIgaW4gVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWwgaWYgdGhlCisgIHN0cmluZ3MgYXJlIHRvbyBsb25nLgorCistIElzc3VlICMxMTIzNjogZ2V0cGFzcy5nZXRwYXNzIHJlc3BvbmRzIHRvIGN0cmwtYyBvciBjdHJsLXogb24gdGVybWluYWwuCisKKy0gSXNzdWUgIzExODU2OiBTcGVlZCB1cCBwYXJzaW5nIG9mIEpTT04gbnVtYmVycy4KKworLSBJc3N1ZSAjMTEwMDU6IHRocmVhZGluZy5STG9jaygpLl9yZWxlYXNlX3NhdmUoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KKworLSBJc3N1ZSAjMTEyNTg6IFNwZWVkIHVwIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHVuZGVyIExpbnV4IGJ5IGEgZmFjdG9yCisgIG9mIDUgdG8gMTAuICBJbml0aWFsIHBhdGNoIGJ5IEpvbmFzIEguCisKKy0gSXNzdWUgIzExMzgyOiBUcml2aWFsIHN5c3RlbSBjYWxscywgc3VjaCBhcyBkdXAoKSBvciBwaXBlKCksIG5lZWRuJ3QKKyAgcmVsZWFzZSB0aGUgR0lMLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTIyMzogQWRkIHRocmVhZGluZy5faW5mbygpIGZ1bmN0aW9uIHByb3ZpZGluZyBpbmZvcm1hdGlvbnMgYWJvdXQKKyAgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTE3MzE6IHNpbXBsaWZ5L2VuaGFuY2UgZW1haWwgcGFyc2VyL2dlbmVyYXRvciBBUEkgYnkgaW50cm9kdWNpbmcKKyAgcG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNzY4OiBUaGUgc2lnbmFsIGhhbmRsZXIgb2YgdGhlIHNpZ25hbCBtb2R1bGUgb25seSBjYWxscworICBQeV9BZGRQZW5kaW5nQ2FsbCgpIGZvciB0aGUgZmlyc3Qgc2lnbmFsIHRvIGZpeCBhIGRlYWRsb2NrIG9uIHJlZW50cmFudCBvcgorICBwYXJhbGxlbCBjYWxscy4gUHlFcnJfU2V0SW50ZXJydXB0KCkgd3JpdGVzIGFsc28gaW50byB0aGUgd2FrZSB1cCBmaWxlLgorCistIElzc3VlICMxMTQ5MjogZml4IHNldmVyYWwgaXNzdWVzIHdpdGggaGVhZGVyIGZvbGRpbmcgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCisKKy0gSXNzdWUgIzExODUyOiBBZGQgbWlzc2luZyBpbXBvcnRzIGFuZCB1cGRhdGUgdGVzdHMuCisKKy0gSXNzdWUgIzExODc1OiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCdzIF9fcmVkdWNlX18gd2FzIHRlbXBvcmFyaWx5CisgIG11dGF0aW5nIHRoZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IHdvcmtpbmcgb24gYSBjb3B5LgorCistIElzc3VlICMxMTQ2NzogRml4IHVybHBhcnNlIGJlaGF2aW9yIHdoZW4gaGFuZGxpbmcgdXJscyB3aGljaCBjb250YWlucyBzY2hlbWUKKyAgc3BlY2lmaWMgcGFydCBvbmx5IGRpZ2l0cy4gUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gY29sbGVjdGlvbnMuQ291bnRlcigpLmNvcHkoKSBub3cgd29ya3MgY29ycmVjdGx5IGZvciBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMTQ3NDogRml4IHRoZSBidWcgd2l0aCB1cmwycGF0aG5hbWUoKSBoYW5kbGluZyBvZiAnL0N8Lycgb24gV2luZG93cy4KKyAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gSXNzdWUgIzExNjg0OiBjb21wbGV0ZSBlbWFpbC5wYXJzZXIgYnl0ZXMgQVBJIGJ5IGFkZGluZyBCeXRlc0hlYWRlclBhcnNlci4KKworLSBUaGUgYnoyIG1vZHVsZSBub3cgaGFuZGxlcyA0R2lCKyBpbnB1dCBidWZmZXJzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjOTIzMzogRml4IGpzb24ubG9hZHMoJ3t9JykgdG8gcmV0dXJuIGEgZGljdCAoaW5zdGVhZCBvZiBhIGxpc3QpLCB3aGVuCisgIF9qc29uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExODMwOiBSZW1vdmUgdW5uZWNlc3NhcnkgaW50cm9zcGVjdGlvbiBjb2RlIGluIHRoZSBkZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE3MDM6IHVybGxpYjIuZ2V0dXJsKCkgZG9lcyBub3QgcmV0dXJuIGNvcnJlY3QgdXJsIHdoZW4gdGhlIG9yaWdpbmFsCisgIHVybCBjb250YWlucyAjZnJhZ21lbnQuCisKKy0gSXNzdWUgIzEwMDE5OiBGaXhlZCByZWdyZXNzaW9uIGluIGpzb24gbW9kdWxlIHdoZXJlIGFuIGluZGVudCBvZiAwIHN0b3BwZWQKKyAgYWRkaW5nIG5ld2xpbmVzIGFuZCBhY3RlZCBpbnN0ZWFkIGxpa2UgJ05vbmUnLgorCistIElzc3VlICMxMTE4NjogcHlkb2MgaWdub3JlcyBhIG1vZHVsZSBpZiBpdHMgbmFtZSBjb250YWlucyBhIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXIgaW4gdGhlIGluZGV4IG9mIG1vZHVsZXMuCisKKy0gSXNzdWUgIzExODE1OiBVc2UgYSBsaWdodC13ZWlnaHQgU2ltcGxlUXVldWUgZm9yIHRoZSByZXN1bHQgcXVldWUgaW4KKyAgY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzUxNjI6IFRyZWF0IHNlcnZpY2VzIGxpa2UgZnJvemVuIGV4ZWN1dGFibGVzIHRvIGFsbG93IGNoaWxkIHNwYXduaW5nCisgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb24gV2luZG93cy4KKworLSBsb2dnaW5nLmJhc2ljQ29uZmlnIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAnaGFuZGxlcnMnIGFyZ3VtZW50IHRha2luZyBhbgorICBpdGVyYWJsZSBvZiBoYW5kbGVycyB0byBiZSBhZGRlZCB0byB0aGUgcm9vdCBsb2dnZXIuIEFkZGl0aW9uYWwgcGFyYW1ldGVyCisgIGNoZWNrcyB3ZXJlIGFsc28gYWRkZWQgdG8gYmFzaWNDb25maWcuCisKKy0gSXNzdWUgIzExODE0OiBGaXggbGlrZWx5IHR5cG8gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wuX3Rlcm1pbmF0ZSgpLgorCistIElzc3VlICMxMTc0NzogRml4IHJhbmdlIGZvcm1hdHRpbmcgaW4gZGlmZmxpYi5jb250ZXh0X2RpZmYoKSBhbmQKKyAgZGlmZmxpYi51bmlmaWVkX2RpZmYoKS4KKworLSBJc3N1ZSAjODQyODogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wgd2hlbiB0ZXJtaW5hdGluZworICB3b3JrZXIgcHJvY2Vzc2VzOiBuZXcgcHJvY2Vzc2VzIHdvdWxkIGJlIHNwYXduZWQgd2hpbGUgdGhlIHBvb2wgaXMgYmVpbmcKKyAgc2h1dCBkb3duLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMyNjUwOiByZS5lc2NhcGUoKSBubyBsb25nZXIgZXNjYXBlcyB0aGUgJ18nLgorCistIElzc3VlICMxMTc1Nzogc2VsZWN0LnNlbGVjdCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgdGltZW91dAorICBpcyBwYXNzZWQgKHByZXZpb3VzbHksIGEgc2VsZWN0LmVycm9yIHdpdGggRUlOVkFMIHdvdWxkIGJlIHJhaXNlZCkuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzczMTE6IGZpeCBodG1sLnBhcnNlciB0byBhY2NlcHQgbm9uLUFTQ0lJIGF0dHJpYnV0ZSB2YWx1ZXMuCisKKy0gSXNzdWUgIzExNjA1OiBlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyIHdhcyBpbmNvcnJlY3RseSBjb252ZXJ0aW5nCisgIG11bHRpcGFydCBzdWJwYXJ0cyB3aXRoIGFuIDgtYml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZQorICBieXRlcy4KKworLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogIGl0IG5vdyBoYXMgYQorICBjaGFyc2V0IHBhcmFtZXRlciB0aGF0IGRlZmF1bHRzIHRvIHV0Zi04IGFuZCBpcyB1c2VkIGFzIHRoZSBjaGFyc2V0IGZvciBSRkMKKyAgMjA0NyBlbmNvZGluZyB3aGVuIHRoZSByZWFsbmFtZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTA5NjM6IEVuc3VyZSB0aGF0IHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSBuZXZlciByYWlzZXMgRVBJUEUuCisKKy0gSXNzdWUgIzEwNzkxOiBJbXBsZW1lbnQgbWlzc2luZyBtZXRob2QgR3ppcEZpbGUucmVhZDEoKSwgYWxsb3dpbmcgR3ppcEZpbGUKKyAgdG8gYmUgd3JhcHBlZCBpbiBhIFRleHRJT1dyYXBwZXIuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNzA3OiBBZGRlZCBhIGZhc3QgQyB2ZXJzaW9uIG9mIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkuCisgIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExNjg4OiBBZGQgc3FsaXRlMy5Db25uZWN0aW9uLnNldF90cmFjZV9jYWxsYmFjaygpLiAgUGF0Y2ggYnkKKyAgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMTc0NjogRml4IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkgdG8gYWNjZXB0IGVsbGlwdGljIGN1cnZlCisgIHByaXZhdGUga2V5cy4KKworLSBJc3N1ZSAjNTg2MzogUmV3cml0ZSBCWjJGaWxlIGluIHB1cmUgUHl0aG9uLCBhbmQgYWxsb3cgaXQgdG8gYWNjZXB0CisgIGZpbGUtbGlrZSBvYmplY3RzIHVzaW5nIGEgbmV3IGBgZmlsZW9iamBgIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiAgUGF0Y2ggYnkKKyAgTmFkZWVtIFZhd2RhLgorCistIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNhbWVFbGVtZW50cyBoYXMgYmVlbiByZW1vdmVkLgorCistIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgaW5pdGZzZW5jb2RpbmcoKSB3YXMgbm90CisgIGNhbGxlZCB5ZXQ6IGRldGVjdCBib290c3RyYXAgKHN0YXJ0dXApIGlzc3VlcyBlYXJsaWVyLgorCistIElzc3VlICMxMTM5MzogQWRkIHRoZSBuZXcgZmF1bHRoYW5kbGVyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE2MTg6IEZpeCB0aGUgdGltZW91dCBsb2dpYyBpbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCkgdW5kZXIgV2luZG93cy4KKworLSBSZW1vdmVkIHRoZSAnc3RyaWN0JyBhcmd1bWVudCB0byBlbWFpbC5wYXJzZXIuUGFyc2VyLCB3aGljaCBoYXMgYmVlbgorICBkZXByZWNhdGVkIHNpbmNlIFB5dGhvbiAyLjQuCisKKy0gSXNzdWUgIzExMjU2OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncyBvbiBmdW5jdGlvbnMgdGhhdCB0YWtlIG9ubHkga2V5d29yZAorICBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzExNjk2OiBGaXggSUQgZ2VuZXJhdGlvbiBpbiBtc2lsaWIuCisKKy0gaXRlcnRvb2xzLmFjY3VtdWxhdGUgbm93IHN1cHBvcnRzIGFuIG9wdGlvbmFsICpmdW5jKiBhcmd1bWVudCBmb3IKKyAgYSB1c2VyLXN1cHBsaWVkIGJpbmFyeSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTE2OTI6IFJlbW92ZSB1bm5lY2Vzc2FyeSBkZW1vIGZ1bmN0aW9ucyBpbiBzdWJwcm9jZXNzIG1vZHVsZS4KKworLSBJc3N1ZSAjOTY5NjogRml4IGV4Y2VwdGlvbiBpbmNvcnJlY3RseSByYWlzZWQgYnkgeGRybGliLlBhY2tlci5wYWNrX2ludCB3aGVuCisgIHRyeWluZyB0byBwYWNrIGEgbmVnYXRpdmUgKGluLXJhbmdlKSBpbnRlZ2VyLgorCistIElzc3VlICMxMTY3NTogbXVsdGlwcm9jZXNzaW5nLltSYXddQXJyYXkgb2JqZWN0cyBjcmVhdGVkIGZyb20gYW4gaW50ZWdlciBzaXplCisgIGFyZSBub3cgemVyb2VkIG9uIGNyZWF0aW9uLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgc3BlY2lmaWVkIGJ5IHRoZQorICBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM3NjM5OiBGaXggc2hvcnQgZmlsZSBuYW1lIGdlbmVyYXRpb24gaW4gYmRpc3RfbXNpCisKKy0gSXNzdWUgIzExNjU5OiBGaXggUmVzb3VyY2VXYXJuaW5nIGluIHRlc3Rfc3VicHJvY2VzcyBpbnRyb2R1Y2VkIGJ5ICMxMTQ1OS4KKyAgUGF0Y2ggYnkgQmVuIEhheWRlbi4KKworLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKKyAgY29uY3VycmVudC5mdXR1cmVzLgorCistIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKKyAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCisgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KKworLSBJc3N1ZSAjODc1NDogSGF2ZSBpbXBvcnRsaWIgdXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzExNTkxOiBQcmV2ZW50ICJpbXBvcnQgc2l0ZSIgZnJvbSBtb2RpZnlpbmcgc3lzLnBhdGggd2hlbiBweXRob24KKyAgd2FzIHN0YXJ0ZWQgd2l0aCAtUy4KKworLSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgbm93IGFkZHMgYSBfc291cmNlIGF0dHJpYnV0ZSB0byB0aGUgZ2VuZXJhdGVkCisgIGNsYXNzLiAgVGhpcyBtYWtlIHRoZSBzb3VyY2UgbW9yZSBhY2Nlc3NpYmxlIHRoYW4gdGhlIG91dGRhdGVkCisgICJ2ZXJib3NlIiBvcHRpb24gd2hpY2ggcHJpbnRzIHRvIHN0ZG91dCBidXQgZG9lc24ndCBtYWtlIHRoZSBzb3VyY2UKKyAgc3RyaW5nIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTEzNzE6IE1hcmsgZ2V0b3B0IGVycm9yIG1lc3NhZ2VzIGFzIGxvY2FsaXphYmxlLiAgUGF0Y2ggYnkgRmlsaXAKKyAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTEzMzM6IEFkZCBfX3Nsb3RzX18gdG8gY29sbGVjdGlvbnMgQUJDcy4KKworLSBJc3N1ZSAjMTE2Mjg6IGNtcF90b19rZXkgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCB1c2UgX19zbG90c19fLgorCistIElzc3VlICMxMTY2NjogbGV0IGhlbHAoKSBkaXNwbGF5IG5hbWVkIHR1cGxlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMKKyAgdGhhdCBzdGFydCB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLgorCistIElzc3VlICMxMTY2MjogTWFrZSB1cmxsaWIgYW5kIHVybGxpYjIgaWdub3JlIHJlZGlyZWN0aW9ucyBpZiB0aGUKKyAgc2NoZW1lIGlzIG5vdCBIVFRQLCBIVFRQUyBvciBGVFAgKENWRS0yMDExLTE1MjEpLgorCistIElzc3VlICM1NTM3OiBGaXggdGltZTJpc296KCkgYW5kIHRpbWUybmV0c2NhcGUoKSBmdW5jdGlvbnMgb2YKKyAgaHR0cGxpYi5jb29raWVqYXIgZm9yIGV4cGlyYXRpb24geWVhciBncmVhdGVyIHRoYW4gMjAzOCBvbiAzMi1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjNDM5MTogVXNlIHByb3BlciBnZXR0ZXh0IHBsdXJhbCBmb3JtcyBpbiBvcHRwYXJzZS4KKworLSBJc3N1ZSAjMTExMjc6IFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBhIHNvY2tldCBvYmplY3QuCisKKy0gSXNzdWUgIzExNTYzOiBDb25uZWN0aW9uOmNsb3NlIGhlYWRlciBpcyBzZW50IGJ5IHJlcXVlc3RzIHVzaW5nIFVSTE9wZW5lcgorICBjbGFzcyB3aGljaCBoZWxwcyBpbiBjbG9zaW5nIG9mIHNvY2tldHMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBvdmVyLiBQYXRjaAorICBjb250cmlidXRpb25zIGJ5IEplZmYgTWNOZWlsIGFuZCBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNDU5OiBBIGBgYnVmc2l6ZWBgIHZhbHVlIG9mIDAgaW4gc3VicHJvY2Vzcy5Qb3BlbigpIHJlYWxseSBjcmVhdGVzCisgIHVuYnVmZmVyZWQgcGlwZXMsIHN1Y2ggdGhhdCBzZWxlY3QoKSB3b3JrcyBwcm9wZXJseSBvbiB0aGVtLgorCistIElzc3VlICM1NDIxOiBGaXggbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHdoZW4gb25lIG9mIHNvY2tldC5zZW5kdG8oKSdzCisgIGFyZ3VtZW50cyBoYXMgdGhlIHdyb25nIHR5cGUuICBQYXRjaCBieSBOaWtpdGEgVmV0b3Noa2luLgorCistIElzc3VlICMxMDgxMjogQWRkIHNvbWUgZXh0cmEgcG9zaXggZnVuY3Rpb25zIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEwOTc5OiB1bml0dGVzdCBzdGRvdXQgYnVmZmVyaW5nIG5vdyB3b3JrcyB3aXRoIGNsYXNzIGFuZCBtb2R1bGUKKyAgc2V0dXAgYW5kIHRlYXJkb3duLgorCistIElzc3VlICMxMTU3NzogZml4IFJlc291cmNlV2FybmluZyB0cmlnZ2VyZWQgYnkgaW1wcm92ZWQgYmluaGV4IHRlc3QgY292ZXJhZ2UKKworLSBJc3N1ZSAjMTEyNDM6IGZpeCB0aGUgcGFyYW1ldGVyIHF1ZXJ5aW5nIG1ldGhvZHMgb2YgTWVzc2FnZSB0byB3b3JrIGlmCisgIHRoZSBoZWFkZXJzIGNvbnRhaW4gdW4tZW5jb2RlZCBub24tQVNDSUkgZGF0YS4KKworLSBJc3N1ZSAjMTE0MDE6IGZpeCBoYW5kbGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWU7IHRoaXMgZml4ZXMgYSByZWdyZXNzaW9uCisgIHJlbGF0aXZlIHRvIFB5dGhvbjIgYW5kIHRoZSByZXN1bHQgaXMgbm93IHRoZSBzYW1lIGFzIGl0IHdhcyBpbiBQeXRob24yLgorCistIElzc3VlICM5Mjk4OiBiYXNlNjQgYm9kaWVzIHdlcmVuJ3QgYmVpbmcgZm9sZGVkIHRvIGxpbmUgbGVuZ3RocyBsZXNzIHRoYW4gNzgsCisgIHdoaWNoIHdhcyBhIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMi4gIFVubGlrZSBQeXRob24yLCB0aGUgbGFzdCBsaW5lCisgIG9mIHRoZSBmb2xkZWQgYm9keSBub3cgZW5kcyB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLgorCistIElzc3VlICMxMTU2MDogc2h1dGlsLnVucGFja19hcmNoaXZlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZm9ybWF0CisgIHBhcmFtZXRlci4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICM1ODcwOiBBZGQgYHN1YnByb2Nlc3MuREVWTlVMTGAgY29uc3RhbnQuCisKKy0gSXNzdWUgIzExMTMzOiBmaXggdHdvIGNhc2VzIHdoZXJlIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgY2FuIHRyaWdnZXIgY29kZQorICBleGVjdXRpb24uIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTE1Njk6IHVzZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzeXNjdGwgY29tbWFuZCBpbiBtdWx0aXByb2Nlc3NpbmcgdG8KKyAgZW5zdXJlIHRoYXQgaXQgd2lsbCBiZSBmb3VuZCByZWdhcmRsZXNzIG9mIHRoZSBzaGVsbCBQQVRILiBUaGlzIGVuc3VyZXMKKyAgdGhhdCBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50IHdvcmtzIG9uIGRlZmF1bHQgaW5zdGFsbHMgb2YgTWFjT1NYLgorCistIElzc3VlICMxMTUwMTogZGlzdXRpbHMuYXJjaGl2ZV91dGlscy5tYWtlX3ppcGZpbGUgbm8gbG9uZ2VyIGZhaWxzIGlmIHpsaWIgaXMKKyAgbm90IGluc3RhbGxlZC4gSW5zdGVhZCwgdGhlIHppcGZpbGUuWklQX1NUT1JFRCBjb21wcmVzc2lvbiBpcyB1c2VkIHRvIGNyZWF0ZQorICB0aGUgWmlwRmlsZS4gUGF0Y2ggYnkgTmF0YWxpYSBCLiBCaWRhcnQuCisKKy0gSXNzdWUgIzExMjg5OiBgc210cC5TTVRQYCBjbGFzcyBpcyBub3cgYSBjb250ZXh0IG1hbmFnZXIgc28gaXQgY2FuIGJlIHVzZWQKKyAgaW4gYSBgd2l0aGAgc3RhdGVtZW50LiAgQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYS4KKworLSBJc3N1ZSAjMTE1NTQ6IEZpeGVkIHN1cHBvcnQgZm9yIEphcGFuZXNlIGNvZGVjczsgcHJldmlvdXNseSB0aGUgYm9keSBvdXRwdXQKKyAgZW5jb2Rpbmcgd2FzIG5vdCBkb25lIGlmIGV1Yy1qcCBvciBzaGlmdC1qaXMgd2FzIHNwZWNpZmllZCBhcyB0aGUgY2hhcnNldC4KKworLSBJc3N1ZSAjMTE1MDk6IFNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBmaWxlaW5wdXQuCisgIFBhdGNoIGJ5IERlbnZlciBDb25leWJlYXJlIGF0IFB5Q29uIDIwMTEgU3ByaW50cy4KKworLSBJc3N1ZSAjMTE0MDc6IGBUZXN0Q2FzZS5ydW5gIHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3QgdXNlZCBvciBjcmVhdGVkLgorICBDb250cmlidXRlZCBieSBKYW5hdGhhbiBIYXJ0bGV5LgorCistIElzc3VlICMxMTUwMDogRml4ZWQgYSBidWcgaW4gdGhlIE9TIFggcHJveHkgYnlwYXNzIGNvZGUgZm9yIGZ1bGx5IHF1YWxpZmllZAorICBJUCBhZGRyZXNzZXMgaW4gdGhlIHByb3h5IGV4Y2VwdGlvbiBsaXN0LgorCistIElzc3VlICMxMTQ5MTogZGJtLmVycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgd2hlbiBkYm0ub3BlbiBpcyBjYWxsZWQgd2l0aAorICB0aGUgIm4iIGFzIHRoZSBmbGFnIGFyZ3VtZW50IGFuZCB0aGUgZmlsZSBleGlzdHMuIFRoZSBiZWhhdmlvciBtYXRjaGVzCisgIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBnZW5lcmFsIGxvZ2ljLgorCistIElzc3VlICMxMTYyNDc3OiBQb3N0ZWwgUHJpbmNpcGxlIGFkanVzdG1lbnQgdG8gZW1haWwgZGF0ZSBwYXJzaW5nOiBoYW5kbGUgdGhlCisgIGZhY3QgdGhhdCBzb21lIG5vbi1jb21wbGlhbnQgTVVBcyB1c2UgJy4nIGluc3RlYWQgb2YgJzonIGluIHRpbWUgc3BlY3MuCisKKy0gSXNzdWUgIzExMTMxOiBGaXggc2lnbiBvZiB6ZXJvIGluIGRlY2ltYWwuRGVjaW1hbCBwbHVzIGFuZCBtaW51cworICBvcGVyYXRpb25zIHdoZW4gdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk9VTkRfRkxPT1IuCisKKy0gSXNzdWUgIzk5MzU6IFNwZWVkIHVwIHBpY2tsaW5nIG9mIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3Nlcy4KKworLSBJc3N1ZSAjNTYyMjogRml4IGN1cnNlcy53cmFwcGVyIHRvIHJhaXNlIGNvcnJlY3QgZXhjZXB0aW9uIGlmIGN1cnNlcworICBpbml0aWFsaXphdGlvbiBmYWlscy4KKworLSBJc3N1ZSAjMTE0MDg6IEluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSwgb25seSBjYWxsIGdldHRpbWVvZmRheSgpIHdoZW4KKyAgcmVhbGx5IG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEzOTE6IFdyaXRpbmcgdG8gYSBtbWFwIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAgYGBtbWFwLlBST1RfUkVBRHxtbWFwLlBST1RfRVhFQ2BgIHdvdWxkIHNlZ2ZhdWx0IGluc3RlYWQgb2YgcmFpc2luZyBhCisgIFR5cGVFcnJvci4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTc5NTogYWRkIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCBzdXBwb3J0IGZvciBubnRwbGliLk5OVFAgY2xhc3MuCisKKy0gSXNzdWUgIzExMzA2OiBtYWlsYm94IGluIGNlcnRhaW4gY2FzZXMgYWRhcHRzIHRvIGFuIGluYWJpbGl0eSB0byBvcGVuCisgIGNlcnRhaW4gZmlsZXMgaW4gcmVhZC13cml0ZSBtb2RlLiAgUHJldmlvdXNseSBpdCBkZXRlY3RlZCB0aGlzIGJ5CisgIGNoZWNraW5nIGZvciBFQUNDRVMsIG5vdyBpdCBhbHNvIGNoZWNrcyBmb3IgRVJPRlMuCisKKy0gSXNzdWUgIzExMjY1OiBhc3luY29yZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgRVBJUEUsIEVCQURGIGFuZCBFQUdBSU4gZXJyb3JzCisgIG9uIGFjY2VwdCgpLCBzZW5kKCkgYW5kIHJlY3YoKS4KKworLSBJc3N1ZSAjMTEzNzc6IERlcHJlY2F0ZSBwbGF0Zm9ybS5wb3BlbigpIGFuZCByZWltcGxlbWVudCBpdCB3aXRoIG9zLnBvcGVuKCkuCisKKy0gSXNzdWUgIzg1MTM6IE9uIFVOSVgsIHN1YnByb2Nlc3Mgc3VwcG9ydHMgYnl0ZXMgY29tbWFuZCBzdHJpbmcuCisKKy0gSXNzdWUgIzEwODY2OiBBZGQgc29ja2V0LnNldGhvc3RuYW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMTE0MDogTG9jay5yZWxlYXNlKCkgbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvciB3aGVuIGF0dGVtcHRpbmcKKyAgdG8gcmVsZWFzZSBhbiB1bmFjcXVpcmVkIGxvY2ssIGFzIGNsYWltZWQgaW4gdGhlIHRocmVhZGluZyBkb2N1bWVudGF0aW9uLgorICBUaGUgX3RocmVhZC5lcnJvciBleGNlcHRpb24gaXMgbm93IGFuIGFsaWFzIG9mIFJ1bnRpbWVFcnJvci4gIFBhdGNoIGJ5CisgIEZpbGlwIEdydXN6Y3p5xYRza2kuICBQYXRjaCBmb3IgX2R1bW15X3RocmVhZCBieSBBeW1lcmljIEF1Z3VzdGluLgorCistIElzc3VlICM4NTk0OiBmdHBsaWIgbm93IHByb3ZpZGVzIGEgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIHRvIHNwZWNpZnkgd2hpY2gKKyAgKGFkZHJlc3MsIHBvcnQpIHRvIGJpbmQgdG8gYmVmb3JlIGNvbm5lY3RpbmcuCisKKy0gSXNzdWUgIzExMzI2OiBBZGQgdGhlIG1pc3NpbmcgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uIGZvciBTU0wgc29ja2V0cywKKyAgYW5kIG1ha2UgaXQgd29yayBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3RzLgorCistIElzc3VlICMxMTI5NzogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwKCkuCisKKy0gSXNzdWUgIzEwNzU1OiBBZGQgdGhlIHBvc2l4LmZsaXN0ZGlyKCkgZnVuY3Rpb24uICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNDc2MTogQWRkIHRoZSBgYCphdCgpYGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyAob3BlbmF0KCksIGV0Yy4pIHRvIHRoZQorICBwb3NpeCBtb2R1bGUuICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNzMyMjogVHJ5aW5nIHRvIHJlYWQgZnJvbSBhIHNvY2tldCdzIGZpbGUtbGlrZSBvYmplY3QgYWZ0ZXIgYSB0aW1lb3V0CisgIG9jY3VycmVkIG5vdyByYWlzZXMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBsb3NpbmcgZGF0YS4KKworLSBJc3N1ZSAjMTEyOTE6IHBvcGxpYi5QT1Agbm8gbG9uZ2VyIHN1cHByZXNzZXMgZXJyb3JzIG9uIHF1aXQoKS4KKworLSBJc3N1ZSAjMTExNzc6IGFzeW5jb3JlJ3MgY3JlYXRlX3NvY2tldCgpIGFyZ3VtZW50cyBjYW4gbm93IGJlIG9taXR0ZWQuCisKKy0gSXNzdWUgIzYwNjQ6IEFkZCBhIGBgZGFlbW9uYGAga2V5d29yZCBhcmd1bWVudCB0byB0aGUgdGhyZWFkaW5nLlRocmVhZAorICBhbmQgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MgY29uc3RydWN0b3JzIGluIG9yZGVyIHRvIG92ZXJyaWRlIHRoZQorICBkZWZhdWx0IGJlaGF2aW91ciBvZiBpbmhlcml0aW5nIHRoZSBkYWVtb25pYyBwcm9wZXJ0eSBmcm9tIHRoZSBjdXJyZW50CisgIHRocmVhZC9wcm9jZXNzLgorCistIElzc3VlICMxMDk1NjogQnVmZmVyZWQgSS9PIGNsYXNzZXMgcmV0cnkgcmVhZGluZyBvciB3cml0aW5nIGFmdGVyIGEgc2lnbmFsCisgIGhhcyBhcnJpdmVkIGFuZCB0aGUgaGFuZGxlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisKKy0gSXNzdWUgIzEwNzg0OiBOZXcgb3MuZ2V0cHJpb3JpdHkoKSBhbmQgb3Muc2V0cHJpb3JpdHkoKSBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzExMTE0OiBGaXggY2F0YXN0cm9waGljIHBlcmZvcm1hbmNlIG9mIHRlbGwoKSBvbiB0ZXh0IGZpbGVzICh1cAorICB0byAxMDAweCBmYXN0ZXIgaW4gc29tZSBjYXNlcykuICBJdCBpcyBzdGlsbCBvbmUgdG8gdHdvIG9yZGVyIG9mIG1hZ25pdHVkZXMKKyAgc2xvd2VyIHRoYW4gYmluYXJ5IHRlbGwoKS4KKworLSBJc3N1ZSAjMTA4ODI6IEFkZCBvcy5zZW5kZmlsZSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTA4Njg6IEFsbG93IHVzYWdlIG9mIHRoZSByZWdpc3RlciBtZXRob2Qgb2YgYW4gQUJDIGFzIGEgY2xhc3MKKyAgZGVjb3JhdG9yLgorCistIElzc3VlICMxMTIyNDogRml4ZWQgYSByZWdyZXNzaW9uIGluIHRhcmZpbGUgdGhhdCBhZmZlY3RlZCB0aGUgZmlsZS1saWtlCisgIG9iamVjdHMgcmV0dXJuZWQgYnkgVGFyRmlsZS5leHRyYWN0ZmlsZSgpIHJlZ2FyZGluZyBwZXJmb3JtYW5jZSwgbWVtb3J5CisgIGNvbnN1bXB0aW9uIGFuZCBmYWlsdXJlcyB3aXRoIHRoZSBzdHJlYW0gaW50ZXJmYWNlLgorCistIElzc3VlICMxMDkyNDogQWRkaW5nIHNhbHQgYW5kIE1vZHVsYXIgQ3J5cHQgRm9ybWF0IHRvIGNyeXB0IGxpYnJhcnkuCisgIE1vdmVkIG9sZCBDIHdyYXBwZXIgdG8gX2NyeXB0LCBhbmQgYWRkZWQgYSBQeXRob24gd3JhcHBlciB3aXRoCisgIGVuaGFuY2VkIHNhbHQgZ2VuZXJhdGlvbiBhbmQgc2ltcGxlciBBUEkgZm9yIHBhc3N3b3JkIGdlbmVyYXRpb24uCisKKy0gSXNzdWUgIzExMDc0OiBNYWtlICd0b2tlbml6ZScgc28gaXQgY2FuIGJlIHJlbG9hZGVkLgorCistIElzc3VlICMxMTA4NTogTW92ZWQgY29sbGVjdGlvbnMgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGludG8gYSBzZXBhcmF0ZQorICBtb2R1bGUgY2FsbGVkIGNvbGxlY3Rpb25zLmFiYywgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIHVzZWQgYnkgaW1wb3J0bGliLmFiYy4KKyAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgbmFtZXMgYXJlIGltcG9ydGVkIGludG8gdGhlIGNvbGxlY3Rpb25zCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjNDY4MTogQWxsb3cgbW1hcCgpIHRvIHdvcmsgb24gZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyBsYXJnZXIgdGhhbgorICA0R0IsIGV2ZW4gb24gMzItYml0IGJ1aWxkcy4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwsIGFkYXB0ZWQgZm9yCisgIDMyLWJpdCBXaW5kb3dzLgorCistIElzc3VlICMxMTE2OTogY29tcGlsZWFsbCBtb2R1bGUgdXNlcyByZXByKCkgdG8gZm9ybWF0IGZpbGVuYW1lcyBhbmQgcGF0aHMgdG8KKyAgZXNjYXBlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCBzaG93IHNwYWNlcy4KKworLSBJc3N1ZSAjMTEwODk6IEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBsaW1pdGluZyB0aGUgdXNlIG9mIENvbmZpZ1BhcnNlcigpCisgIHdpdGggbGFyZ2UgY29uZmlnIGZpbGVzLgorCistIElzc3VlICMxMDI3NjogRml4IHRoZSByZXN1bHRzIG9mIHpsaWIuY3JjMzIoKSBhbmQgemxpYi5hZGxlcjMyKCkgb24gYnVmZmVycworICBsYXJnZXIgdGhhbiA0R0IuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzg4OiBBZGRlZCBhIGNsZWFyKCkgbWV0aG9kIHRvIE11dGFibGVTZXF1ZW5jZQorCistIElzc3VlICMxMTE3NDogQWRkIGFyZ3BhcnNlLk1ldGF2YXJUeXBlSGVscEZvcm1hdHRlciwgd2hpY2ggdXNlcyB0eXBlIG5hbWVzCisgIGZvciB0aGUgbmFtZXMgb2Ygb3B0aW9uYWwgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDg6IFJhaXNlIGFuIGVhcmx5IGVycm9yIGlmIGFyZ3BhcnNlIG5hcmdzIGFuZCBtZXRhdmFyIGRvbid0IG1hdGNoLgorCistIElzc3VlICM4OTgyOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYXJncGFyc2UgTmFtZXNwYWNlIG9iamVjdC4KKworLSBJc3N1ZSAjOTM0MzogRG9jdW1lbnQgdGhhdCBhcmdwYXJzZSBwYXJlbnQgcGFyc2VycyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCisgIHRoZWlyIGNoaWxkcmVuLgorCistIElzc3VlICM5MDI2OiBGaXggb3JkZXIgb2YgYXJncGFyc2Ugc3ViLWNvbW1hbmRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDc6IEZpeCBmb3JtYXR0aW5nIGZvciB0dXBsZXMgaW4gYXJncGFyc2UgdHlwZT0gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzEyMTkxOiBBZGRlZCBzaHV0aWwuY2hvd24oKSB0byBjaGFuZ2UgdXNlciBhbmQvb3IgZ3JvdXAgb3duZXIgb2YgYQorICBnaXZlbiBwYXRoIGFsc28gc3BlY2lmeWluZyB0aGVpciBuYW1lcy4KKworLSBJc3N1ZSAjMTM5ODg6IFRoZSBfZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IgaXMgdXNlZCB3aGVuZXZlciBhdmFpbGFibGUuCisgIE5vdyB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGJlY29tZXMgYSBkZXByZWNhdGVkIGFsaWFzIHRvIEVsZW1lbnRUcmVlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjNjgwNzogUnVuIG1zaXN1cHBvcnQubWFrIGVhcmxpZXIuCisKKy0gSXNzdWUgIzEwNTgwOiBNaW5vciBncmFtbWFyIGNoYW5nZSBpbiBXaW5kb3dzIGluc3RhbGxlci4KKworLSBJc3N1ZSAjMTMzMjY6IENsZWFuIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvcnJlY3RseSBvbiBPcGVuQlNELgorCistIFBFUCAzOTM6IHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC13aWRlLXVuaWNvZGUgaXMgcmVtb3ZlZC4KKworLSBJc3N1ZSAjMTI4NTI6IFNldCBfWE9QRU5fU09VUkNFIHRvIDcwMCwgaW5zdGVhZCBvZiA2MDAsIHRvIGdldCBQT1NJWCAyMDA4CisgIGZ1bmN0aW9ucyBvbiBPcGVuQlNEIChlLmcuIGZkb3BlbmRpcikuCisKKy0gSXNzdWUgIzExODYzOiBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IHN5c3RlbXMgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yCisgIChmb2xsb3dpbmcgUEVQIDExKS4gIFRoZXNlIHN5c3RlbXMgYXJlIHN5c3RlbXMgdXNpbmcgTWFjaCBDIFRocmVhZHMsCisgIFN1bk9TIGxpZ2h0d2VpZ2h0IHByb2Nlc3NlcywgR05VIHB0aCB0aHJlYWRzIGFuZCBJUklYIHRocmVhZHMuCisKKy0gSXNzdWUgIzg3NDY6IENvcnJlY3QgZmF1bHR5IGNvbmZpZ3VyZSBjaGVja3Mgc28gdGhhdCBvcy5jaGZsYWdzKCkgYW5kCisgIG9zLmxjaGZsYWdzKCkgYXJlIG9uY2UgYWdhaW4gYnVpbHQgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlc2UKKyAgZnVuY3Rpb25zIChCU0QgYW5kIE9TIFgpLiAgQWxzbyBhZGQgbmV3IHN0YXQgZmlsZSBmbGFncyBmb3IgT1MgWAorICAoVUZfSElEREVOIGFuZCBVRl9DT01QUkVTU0VEKS4KKworLSBJc3N1ZSAjMTA2NDU6IEluc3RhbGxpbmcgUHl0aG9uIG5vIGxvbmdlciBjcmVhdGVzIGEKKyAgUHl0aG9uLVguWS5aLXB5WC5ZLmVnZy1pbmZvIGZpbGUgaW4gdGhlIGxpYi1keW5sb2FkIGRpcmVjdG9yeS4KKworLSBEbyBub3QgYWNjaWRlbnRhbGx5IGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHNxbGl0ZS5oIHR3aWNlIHdoZW4KKyAgYnVpbGRpbmcgc3FsaXRlMy4KKworLSBJc3N1ZSAjMTEyMTc6IEZvciA2NC1iaXQvMzItYml0IE1hYyBPUyBYIHVuaXZlcnNhbCBmcmFtZXdvcmsgYnVpbGRzLAorICBlbnN1cmUgIm1ha2UgaW5zdGFsbCIgY3JlYXRlcyBzeW1saW5rcyBpbiAtLXByZWZpeCBiaW4gZm9yIHRoZSAiLTMyIgorICBmaWxlcyBpbiB0aGUgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkgbGlrZSB0aGUgaW5zdGFsbGVyIGRvZXMuCisKKy0gSXNzdWUgIzExMzQ3OiBVc2UgLS1uby1hcy1uZWVkZWQgd2hlbiBsaW5raW5nIGxpYnB5dGhvbjMuc28uCisKKy0gSXNzdWUgIzExNDExOiBGaXggJ21ha2UgREVTVERJUj0nIHdpdGggYSByZWxhdGl2ZSBkZXN0aW5hdGlvbi4KKworLSBJc3N1ZSAjMTEyNjg6IFByZXZlbnQgTWFjIE9TIFggSW5zdGFsbGVyIGZhaWx1cmUgaWYgRG9jdW1lbnRhdGlvbgorICBwYWNrYWdlIGhhZCBwcmV2aW91c2x5IGJlZW4gaW5zdGFsbGVkLgorCistIElzc3VlICMxMTQ5NTogT1NGIHN1cHBvcnQgaXMgZWxpbWluYXRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMi4KKworCitJRExFCistLS0tCisKKy0gSXNzdWUgIzExNzE4OiBJRExFJ3Mgb3BlbiBtb2R1bGUgZGlhbG9nIGNvdWxkbid0IGZpbmQgdGhlIF9faW5pdF9fLnB5CisgIGZpbGUgaW4gYSBwYWNrYWdlLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwNTM6IHBhdGNoY2hlY2sucHkgKCJtYWtlIHBhdGNoY2hlY2siKSBub3cgd29ya3Mgd2l0aCBNUSBwYXRjaGVzLgorICBQYXRjaCBieSBGcmFuY2lzY28gTWFydMOtbiBCcnVndcOpLgorCistIElzc3VlICMxMzkzMDogMnRvMyBpcyBub3cgYWJsZSB0byB3cml0ZSBpdHMgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4gIFNlZSBpdHMgbmV3IC1vLCAtVyBhbmQgLS1hZGQtc3VmZml4IG9wdGlvbnMuICBUaGlzIG1ha2VzIGl0IG1vcmUKKyAgdXNlZnVsIGluIG1hbnkgYXV0b21hdGVkIGNvZGUgdHJhbnNsYXRpb24gd29ya2Zsb3dzLgorCistIElzc3VlICMxMzYyODogcHl0aG9uLWdkYi5weSBpcyBub3cgYWJsZSB0byByZXRyaWV2ZSBtb3JlIGZyYW1lcyBpbiB0aGUgUHl0aG9uCisgIHRyYWNlYmFjayBpZiBQeXRob24gaXMgb3B0aW1pemVkLgorCistIElzc3VlICMxMTk5NjogbGlicHl0aG9uIChnZGIpLCByZXBsYWNlICJweS1idCIgY29tbWFuZCBieSAicHktYnQtZnVsbCIgYW5kCisgIGFkZCBhIHNtYXJ0ZXIgInB5LWJ0IiBjb21tYW5kIHByaW50aW5nIGEgY2xhc3NpYyBQeXRob24gdHJhY2ViYWNrLgorCistIElzc3VlICMxMTE3OTogTWFrZSBjY2JlbmNoIHdvcmsgdW5kZXIgUHl0aG9uIDMuMSBhbmQgMi43IGFnYWluLgorCistIElzc3VlICMxMDYzOTogcmVpbmRlbnQucHkgbm8gbG9uZ2VyIGNvbnZlcnRzIG5ld2xpbmVzIGFuZCB3aWxsIHJhaXNlCisgIGFuIGVycm9yIGlmIGF0dGVtcHRpbmcgdG8gY29udmVydCBhIGZpbGUgd2l0aCBtaXhlZCBuZXdsaW5lcy4KKyAgIi0tbmV3bGluZSIgb3B0aW9uIGFkZGVkIHRvIHNwZWNpZnkgbmV3IGxpbmUgY2hhcmFjdGVyLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTM4NDA6IFRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkIGJ5IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcgorICB3aGVuIGdpdmVuIGEgVW5pY29kZSBzdHJpbmcgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzk5NzU6IHNvY2tldDogRml4IGluY29ycmVjdCB1c2Ugb2YgZmxvd2luZm8gYW5kIHNjb3BlX2lkLiBQYXRjaCBieQorICBWaWxtb3MgTmViZWhhai4KKworLSBJc3N1ZSAjNzc3Nzogc29ja2V0OiBBZGQgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUEZfUkRTKSBzdXBwb3J0LgorCistIElzc3VlICMxMzE1OTogRmlsZUlPIGFuZCBCWjJDb21wcmVzc29yL0JaMkRlY29tcHJlc3NvciBub3cgdXNlIGEgbGluZWFyLXRpbWUKKyAgYnVmZmVyIGdyb3d0aCBzdHJhdGVneSBpbnN0ZWFkIG9mIGEgcXVhZHJhdGljLXRpbWUgb25lLgorCistIElzc3VlICMxMDE0MTogc29ja2V0OiBBZGQgU29ja2V0Q0FOIChQRl9DQU4pIHN1cHBvcnQuIEluaXRpYWwgcGF0Y2ggYnkKKyAgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcy4KKworLSBJc3N1ZSAjMTMwNzA6IEZpeCBhIGNyYXNoIHdoZW4gYSBUZXh0SU9XcmFwcGVyIGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZQorICB3b3VsZCBiZSBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIHJlZmVyZW5jZSB0byBpdHMgdW5kZXJseWluZyBCdWZmZXJlZFJXUGFpcidzCisgIHdyaXRlciBnb3QgY2xlYXJlZCBieSB0aGUgR0MuCisKKy0gSXNzdWUgIzEyODgxOiBjdHlwZXM6IEZpeCBzZWdmYXVsdCB3aXRoIGxhcmdlIHN0cnVjdHVyZSBmaWVsZCBuYW1lcy4KKworLSBJc3N1ZSAjMTMwNTg6IG9zc2F1ZGlvZGV2OiBmaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBvbiBlcnJvci4gUGF0Y2ggYnkKKyAgVGhvbWFzIEphcm9zY2guCisKKy0gSXNzdWUgIzEzMDEzOiBjdHlwZXM6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIFB5Q0FycmF5VHlwZV9mcm9tX2N0eXBlLgorICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTMwMjI6IEZpeDogX211bHRpcHJvY2Vzc2luZy5yZWN2ZmQoKSBkb2Vzbid0IGNoZWNrIHRoYXQKKyAgZmlsZSBkZXNjcmlwdG9yIHdhcyBhY3R1YWxseSByZWNlaXZlZC4KKworLSBJc3N1ZSAjMTE3MjcxMTogQWRkICdsb25nIGxvbmcnIHN1cHBvcnQgdG8gdGhlIGFycmF5IG1vZHVsZS4KKyAgSW5pdGlhbCBwYXRjaCBieSBPcmVuIFRpcm9zaCBhbmQgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzEyNDgzOiBjdHlwZXM6IEZpeCBhIGNyYXNoIHdoZW4gdGhlIGRlc3RydWN0aW9uIG9mIGEgY2FsbGJhY2sKKyAgb2JqZWN0IHRyaWdnZXJzIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKworLSBJc3N1ZSAjMTI5NTA6IEZpeCBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgaW4gbXVsdGlwcm9jZXNzaW5nLCB1bmRlcgorICBPcGVuSW5kaWFuYS9JbGx1bW9zLgorCistIElzc3VlICMxMjc2NDogRml4IGEgY3Jhc2ggaW4gY3R5cGVzIHdoZW4gdGhlIG5hbWUgb2YgYSBTdHJ1Y3R1cmUgZmllbGQgaXMgbm90CisgIGEgc3RyaW5nLgorCistIElzc3VlICMxMTI0MTogc3ViY2xhc3NlcyBvZiBjdHlwZXMuQXJyYXkgY2FuIG5vdyBiZSBzdWJjbGFzc2VkLgorCistIElzc3VlICM5NjUxOiBGaXggYSBjcmFzaCB3aGVuIGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcigwKSB3YXMgcGFzc2VkIHRvCisgIHNvbWUgZnVuY3Rpb25zIGxpa2UgZmlsZS53cml0ZSgpLgorCistIElzc3VlICMxMDMwOTogRGVmaW5lIF9HTlVfU09VUkNFIHNvIHRoYXQgbXJlbWFwKCkgZ2V0cyB0aGUgcHJvcGVyCisgIHNpZ25hdHVyZS4gIFdpdGhvdXQgdGhpcywgYXJjaGl0ZWN0dXJlcyB3aGVyZSBzaXplb2Ygdm9pZCogIT0gc2l6ZW9mIGludCBhcmUKKyAgYnJva2VuLiAgUGF0Y2ggZ2l2ZW4gYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTIwNTE6IEZpeCBzZWdmYXVsdCBpbiBqc29uLmR1bXBzKCkgd2hpbGUgZW5jb2RpbmcgaGlnaGx5LW5lc3RlZAorICBvYmplY3RzIHVzaW5nIHRoZSBDIGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDE3OiBGaXggc2VnZmF1bHQgaW4ganNvbi5sb2FkcygpIHdoaWxlIGRlY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxODM4OiBQcmV2ZW50IHNlZ2ZhdWx0IGluIGN0eXBlcywgd2hlbiBfYXNfcGFyYW1ldGVyXyBvbiBhIGNsYXNzIGlzIHNldAorICB0byBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxMTY4OTogRml4IGEgdmFyaWFibGUgc2NvcGluZyBlcnJvciBpbiBhbiBzcWxpdGUzIHRlc3QKKworLSBJc3N1ZSAjMTM3ODY6IFJlbW92ZSB1bmltcGxlbWVudGVkICd0cmFjZScgbG9uZyBvcHRpb24gZnJvbSByZWdydGVzdC5weS4KKworLSBJc3N1ZSAjMTM3MjU6IEZpeCByZWdydGVzdCB0byByZWNvZ25pemUgdGhlIGRvY3VtZW50ZWQgLWQgZmxhZy4KKyAgUGF0Y2ggYnkgRXJubyBUdWtpYS4KKworLSBJc3N1ZSAjMTMzMDQ6IFNraXAgdGVzdCBjYXNlIGlmIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXNhYmxlZCAoLXMgb3IKKyAgUFlUSE9OTk9VU0VSU0lURSkuICAoUGF0Y2ggYnkgQ2FybCBNZXllcikKKworLSBJc3N1ZSAjNTY2MTogQWRkIGEgdGVzdCBmb3IgRUNPTk5SRVNFVC9FUElQRSBoYW5kbGluZyB0byB0ZXN0X2FzeW5jb3JlLiBQYXRjaAorICBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTMyMTg6IEZpeCB0ZXN0X3NzbCBmYWlsdXJlcyBvbiBEZWJpYW4vVWJ1bnR1LgorCistIFJlLWVuYWJsZSBsaWIydG8zJ3MgdGVzdF9wYXJzZXIucHkgdGVzdHMsIHRob3VnaCB3aXRoIGFuIGV4cGVjdGVkIGZhaWx1cmUKKyAgKHNlZSBpc3N1ZSAxMzEyNSkuCisKKy0gSXNzdWUgIzEyNjU2OiBBZGQgdGVzdHMgZm9yIElQdjYgYW5kIFVuaXggc29ja2V0cyB0byB0ZXN0X2FzeW5jb3JlLgorCistIElzc3VlICM2NDg0OiBBZGQgdW5pdCB0ZXN0cyBmb3IgbWFpbGNhcCBtb2R1bGUgKHBhdGNoIGJ5IEdyZWdvcnkgTm9maSkKKworLSBJc3N1ZSAjMTE2NTE6IEltcHJvdmUgdGhlIE1ha2VmaWxlIHRlc3QgdGFyZ2V0cyB0byBydW4gbW9yZSBvZiB0aGUgdGVzdCBzdWl0ZQorICBtb3JlIHF1aWNrbHkuIFRoZSAtLW11bHRpcHJvY2VzcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgcmVkdWNpbmcKKyAgdGhlIGFtb3VudCBvZiB0aW1lIG5lZWRlZCB0byBydW4gdGhlIHRlc3RzLiAibWFrZSB0ZXN0IiBhbmQgIm1ha2UgcXVpY2t0ZXN0IgorICBub3cgaW5jbHVkZSBzb21lIHJlc291cmNlLWludGVuc2l2ZSB0ZXN0cywgYnV0IG5vIGxvbmdlciBydW4gdGhlIHRlc3Qgc3VpdGUKKyAgdHdpY2UgdG8gY2hlY2sgZm9yIGJ1Z3MgaW4gLnB5YyBnZW5lcmF0aW9uLiBUb29scy9zY3JpcHRzL3J1bl90ZXN0LnB5IHByb3ZpZGVzCisgIGFuIGVhc3kgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5IHRvIHJ1biB0ZXN0IHN1aXRlIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIHBhY2thZ2luZyBtb2R1bGUgY2FuIG5vdyBydW4gZnJvbSBhbgorICBpbnN0YWxsZWQgUHl0aG9uLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIGxpYjJ0bzMgY2FuIG5vdyBydW4gZnJvbSBhbiBpbnN0YWxsZWQKKyAgUHl0aG9uLgorCistIElzc3VlICMxMjYyNjogSW4gcmVncnRlc3QsIGFsbG93IHRvIGZpbHRlciB0ZXN0cyB1c2luZyBhIGdsb2IgZmlsdGVyCisgIHdpdGggdGhlIGBgLW1gYCAob3IgYGAtLW1hdGNoYGApIG9wdGlvbi4gIFRoaXMgd29ya3Mgd2l0aCBhbGwgdGVzdCBjYXNlcworICB1c2luZyB0aGUgdW5pdHRlc3QgbW9kdWxlLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCBsb25nIHRlc3Qgc3VpdGVzCisgIHN1Y2ggYXMgdGVzdF9pbyBvciB0ZXN0X3N1YnByb2Nlc3MuCisKKy0gSXNzdWUgIzEyNjI0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gZmFpbCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSB3aGVuCisgIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlIChgYC12YGAgb3IgYGAtV2BgKSwgYnkgdXNpbmcgdGhlIGBgLS1mYWlsZmFzdGBgCisgIChvciBgYC1HYGApIG9wdGlvbiB0byByZWdydGVzdC4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjU4NzogQ29ycmVjdCBmYXVsdHkgdGVzdCBmaWxlIGFuZCByZWZlcmVuY2UgaW4gdGVzdF90b2tlbml6ZS4KKyAgKFBhdGNoIGJ5IFJvYmVydCBYaWFvKQorCistIElzc3VlICMxMjU3MzogQWRkIHJlc291cmNlIGNoZWNrcyBmb3IgZGFuZ2xpbmcgVGhyZWFkIGFuZCBQcm9jZXNzIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyNTQ5OiBDb3JyZWN0IHRlc3RfcGxhdGZvcm0gdG8gbm90IGZhaWwgd2hlbiBPUyBYIHJldHVybnMgJ3g4Nl82NCcKKyAgYXMgdGhlIHByb2Nlc3NvciB0eXBlIG9uIHNvbWUgTWFjIHN5c3RlbXMuCisKKy0gU2tpcCBuZXR3b3JrIHRlc3RzIHdoZW4gZ2V0YWRkcmluZm8oKSByZXR1cm5zIEVBSV9BR0FJTiwgbWVhbmluZyBhIHRlbXBvcmFyeQorICBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbi4KKworLSBJc3N1ZSAjMTE4MTI6IFNvbHZlIHRyYW5zaWVudCBzb2NrZXQgZmFpbHVyZSB0byBjb25uZWN0IHRvICdsb2NhbGhvc3QnCisgIGluIHRlc3RfdGVsbmV0bGliLnB5LgorCistIFNvbHZlZCBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0ZXN0X3RlbG5ldGxpYi5weS4gUmVsYXRlZCB0byBpc3N1ZSAjMTE4MTIuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3JvYm90cGFyc2VyIHdoZW4gbXVlYmxlc21vcmFsZWRhLmNvbSBpcyBmbGFreSBhbmQKKyAgYW4gb3ZlcnplYWxvdXMgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVkaXJlY3RzIHRvIGEgcGxhY2Vob2xkZXIKKyAgV2ViIHNpdGUuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3VybGxpYm5ldC50ZXN0X2JhZF9hZGRyZXNzIHdoZW4gc29tZSBvdmVyemVhbG91cworICBETlMgc2VydmljZSAoZS5nLiBPcGVuRE5TKSByZXNvbHZlcyBhIG5vbi1leGlzdGVudCBkb21haW4gbmFtZS4gIFRoZSB0ZXN0CisgIGlzIG5vdyBza2lwcGVkIGluc3RlYWQuCisKKy0gSXNzdWUgIzEyNDQwOiBXaGVuIHRlc3Rpbmcgd2hldGhlciBzb21lIGJpdHMgaW4gU1NMQ29udGV4dC5vcHRpb25zIGNhbiBiZQorICByZXNldCwgY2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgaGVhZGVycyBQeXRob24gd2FzIGNvbXBpbGVkIGFnYWluc3QsCisgIHJhdGhlciB0aGFuIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeS4KKworLSBJc3N1ZSAjMTE1MTI6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBjZ2l0YiBtb2R1bGUuIFBhdGNoIGJ5IFJvYmJpZSBDbGVtb25zLgorCistIElzc3VlICMxMjQ5NzogSW5zdGFsbCB0ZXN0L2RhdGEgdG8gcHJldmVudCBmYWlsdXJlcyBvZiB0aGUgdmFyaW91cyBjb2RlY21hcHMKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyNDk2OiBJbnN0YWxsIHRlc3QvY2FwYXRoIGRpcmVjdG9yeSB0byBwcmV2ZW50IHRlc3RfY29ubmVjdF9jYXBhdGgKKyAgdGVzdGNhc2UgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTI0Njk6IFJ1biB3YWtldXAgYW5kIHBlbmRpbmcgc2lnbmFsIHRlc3RzIGluIGEgc3VicHJvY2VzcyB0byBydW4gdGhlCisgIHRlc3QgaW4gYSBmcmVzaCBwcm9jZXNzIHdpdGggb25seSBvbmUgdGhyZWFkIGFuZCB0byBub3QgY2hhbmdlIHNpZ25hbAorICBoYW5kbGluZyBvZiB0aGUgcGFyZW50IHByb2Nlc3MuCisKKy0gSXNzdWUgIzg3MTY6IEF2b2lkIGNyYXNoZXMgY2F1c2VkIGJ5IEFxdWEgVGsgb24gT1NYIHdoZW4gYXR0ZW1wdGluZyB0byBydW4KKyAgdGVzdF90ayBvciB0ZXN0X3R0a19ndWlvbmx5IHVuZGVyIGEgdXNlcm5hbWUgdGhhdCBpcyBub3QgY3VycmVudGx5IGxvZ2dlZAorICBpbiB0byB0aGUgY29uc29sZSB3aW5kb3dzZXJ2ZXIgKGFzIG1heSBiZSB0aGUgY2FzZSB1bmRlciBidWlsZGJvdCBvciBzc2gpLgorCistIElzc3VlICMxMjQwNzogRXhwbGljaXRseSBza2lwIHRlc3RfY2FwaS5FbWJlZGRpbmdUZXN0IHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEyNDAwOiByZWdydGVzdCAtVyBkb2Vzbid0IHJlcnVuIHRoZSB0ZXN0cyB0d2ljZSBhbnltb3JlLCBidXQgY2FwdHVyZXMKKyAgdGhlIG91dHB1dCBhbmQgZGlzcGxheXMgaXQgb24gZmFpbHVyZSBpbnN0ZWFkLiByZWdydGVzdCAtdiBkb2Vzbid0IHByaW50IHRoZQorICBlcnJvciB0d2ljZSBhbnltb3JlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLgorCistIElzc3VlICMxMjE0MTogSW5zdGFsbCBjb3BpZXMgb2YgdGVtcGxhdGUgQyBtb2R1bGUgZmlsZSBzbyB0aGF0CisgIHRlc3RfYnVpbGRfZXh0IG9mIHRlc3RfZGlzdHV0aWxzIGFuZCB0ZXN0X2NvbW1hbmRfYnVpbGRfZXh0IG9mCisgIHRlc3RfcGFja2FnaW5nIGFyZSBubyBsb25nZXIgc2lsZW50bHkgc2tpcHBlZCB3aGVuCisgIHJ1biBvdXRzaWRlIG9mIGEgYnVpbGQgZGlyZWN0b3J5LgorCistIElzc3VlICM4NzQ2OiBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3Igb3MuY2hmbGFncygpIGFuZCBvcy5sY2hmbGFncygpLgorICBQYXRjaCBieSBHYXJyZXR0IENvb3Blci4KKworLSBJc3N1ZSAjMTA3MzY6IEZpeCB0ZXN0X3R0ayB0ZXN0X3dpZGdldHMgZmFpbHVyZXMgd2l0aCBDb2NvYSBUayA4LjUuOQorICAyLjggKyAgb24gTWFjIE9TIFguICAoUGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjA1NzogQWRkIHRlc3RzIGZvciBJU08gMjAyMiBjb2RlY3MgKGlzbzIwMjJfanAsIGlzbzIwMjJfanBfMiwKKyAgaXNvMjAyMl9rcikuCisKKy0gSXNzdWUgIzEyMDk2OiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0ZXN0X3RocmVhZGluZy50ZXN0X3dhaXRmb3IoKS4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExNjE0OiBpbXBvcnQgX19oZWxsb19fIHByaW50cyAiSGVsbG8gV29ybGQhIi4gUGF0Y2ggd3JpdHRlbiBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzU3MjM6IEltcHJvdmUganNvbiB0ZXN0cyB0byBiZSBleGVjdXRlZCB3aXRoIGFuZCB3aXRob3V0IGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDQxOiBNYWtlIHRlc3Rfd2FpdDMgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzExODczOiBDaGFuZ2UgcmVnZXggaW4gdGVzdF9jb21waWxlYWxsIHRvIGZpeCBvY2Nhc2lvbmFsIGZhaWx1cmVzIHdoZW4KKyAgd2hlbiB0aGUgcmFuZG9tbHkgZ2VuZXJhdGVkIHRlbXBvcmFyeSBwYXRoIGhhcHBlbmVkIHRvIG1hdGNoIHRoZSByZWdleC4KKworLSBJc3N1ZSAjMTE5NTg6IEZpeCBGVFAgdGVzdHMgZm9yIElQdjYsIGJpbmQgdG8gIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0Ii4KKyAgUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjODQwNywgIzExODU5OiBGaXggdGVzdHMgb2YgdGVzdF9pbyB1c2luZyB0aHJlYWRzIGFuZCBhbiBhbGFybTogdXNlCisgIHB0aHJlYWRfc2lnbWFzaygpIHRvIGVuc3VyZSB0aGF0IHRoZSBTSUdBTFJNIHNpZ25hbCBpcyByZWNlaXZlZCBieSB0aGUgbWFpbgorICB0aHJlYWQuCisKKy0gSXNzdWUgIzExODExOiBGYWN0b3Igb3V0IGRldGVjdGlvbiBvZiBJUHY2IHN1cHBvcnQgb24gdGhlIGN1cnJlbnQgaG9zdAorICBhbmQgbWFrZSBpdCBhdmFpbGFibGUgYXMgYGB0ZXN0LnN1cHBvcnQuSVBWNl9FTkFCTEVEYGAuICBQYXRjaCBieQorICBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEwOTE0OiBBZGQgYSBtaW5pbWFsIGVtYmVkZGluZyB0ZXN0IHRvIHRlc3RfY2FwaS4KKworLSBJc3N1ZSAjMTEyMjM6IFNraXAgdGVzdF9sb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgYW5kCisgIHRlc3RfcmxvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oKSBvZiB0ZXN0X3RocmVhZHNpZ25hbHMgaWYgYSB0aHJlYWQgbG9jayBpcworICBpbXBsZW1lbnRlZCB1c2luZyBhIFBPU0lYIG11dGV4IGFuZCBhIFBPU0lYIGNvbmRpdGlvbiB2YXJpYWJsZS4gQSBQT1NJWAorICBjb25kaXRpb24gdmFyaWFibGUgY2Fubm90IGJlIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsIChlLmcuIG9uIExpbnV4LCB0aGUKKyAgZnV0ZXggc3lzdGVtIGNhbGwgaXMgcmVzdGFydGVkKS4KKworLSBJc3N1ZSAjMTE3OTA6IEZpeCBzcG9yYWRpYyBmYWlsdXJlcyBpbiB0ZXN0X211bHRpcHJvY2Vzc2luZy5XaXRoUHJvY2Vzc2VzVGVzdENvbmRpdGlvbi4KKworLSBGaXggcG9zc2libGUgImZpbGUgYWxyZWFkeSBleGlzdHMiIGVycm9yIHdoZW4gcnVubmluZyB0aGUgdGVzdHMgaW4gcGFyYWxsZWwuCisKKy0gSXNzdWUgIzExNzE5OiBGaXggbWVzc2FnZSBhYm91dCB1bmV4cGVjdGVkIHRlc3RfbXNpbGliIHNraXAgb24gbm9uLVdpbmRvd3MKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNzI3OiBBZGQgYSAtLXRpbWVvdXQgb3B0aW9uIHRvIHJlZ3J0ZXN0OiBpZiBhIHRlc3QgdGFrZXMgbW9yZSB0aGFuCisgIFRJTUVPVVQgc2Vjb25kcywgZHVtcHMgdGhlIHRyYWNlYmFjayBvZiBhbGwgdGhyZWFkcyBhbmQgZXhpdHMuCisKKy0gSXNzdWUgIzExNjUzOiBmaXggLVcgd2l0aCAtaiBpbiByZWdydGVzdC4KKworLSBUaGUgZW1haWwgdGVzdCBzdWl0ZSBub3cgbGl2ZXMgaW4gdGhlIExpYi90ZXN0L3Rlc3RfZW1haWwgcGFja2FnZS4gIFRoZSB0ZXN0CisgIGhhcm5lc3MgY29kZSBoYXMgYWxzbyBiZWVuIG1vZGVybml6ZWQgdG8gYWxsb3cgdXNlIG9mIG5ldyB1bml0dGVzdCBmZWF0dXJlcy4KKworLSByZWdydGVzdCBub3cgZGlzY292ZXJzIHRlc3QgcGFja2FnZXMgYXMgd2VsbCBhcyB0ZXN0IG1vZHVsZXMuCisKKy0gSXNzdWUgIzExNTc3OiBpbXByb3ZlIHRlc3QgY292ZXJhZ2Ugb2YgYmluaGV4LnB5LiBQYXRjaCBieSBBcmthZHkgS29wbHlhcm92LgorCistIE5ldyB0ZXN0X2NyYXNoZXJzIGFkZGVkIHRvIGV4ZXJjaXNlIHRoZSBzY3JpcHRzIGluIHRoZSBMaWIvdGVzdC9jcmFzaGVycworICBkaXJlY3RvcnkgYW5kIGNvbmZpcm0gdGhleSBmYWlsIGFzIGV4cGVjdGVkCisKKy0gSXNzdWUgIzExNTc4OiBhZGRlZCB0ZXN0IGZvciB0aGUgdGltZWl0IG1vZHVsZS4gIFBhdGNoIGJ5IE1pY2hhZWwgSGVucnkuCisKKy0gSXNzdWUgIzExNTAzOiBpbXByb3ZlIHRlc3QgY292ZXJhZ2Ugb2YgcG9zaXhwYXRoLnB5LiBQYXRjaCBieSBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weSwgaW5jcmVhc2VzIGdyYW51bGFyaXR5IG9mCisgIHN0cmluZy5Gb3JtYXR0ZXIgdGVzdHMuIEluaXRpYWwgcGF0Y2ggYnkgQWxpY2lhIEFybGVuLgorCistIElzc3VlICMxMTU0ODogSW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoZSBzaHV0aWwgbW9kdWxlLiBQYXRjaCBieQorICBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExNTU0OiBSZWFjdGl2YXRlZCB0ZXN0X2VtYWlsX2NvZGVjcy4KKworLSBJc3N1ZSAjMTE1MDU6IGltcHJvdmVzIHRlc3QgY292ZXJhZ2Ugb2Ygc3RyaW5nLnB5LiBQYXRjaCBieSBBbGljaWEKKyAgQXJsZW4KKworLSBJc3N1ZSAjMTE0OTA6IHRlc3Rfc3VicHJvY2Vzczp0ZXN0X2xlYWtpbmdfZmRzX29uX2Vycm9yIG5vIGxvbmdlciBnaXZlcyBhCisgIGZhbHNlIHBvc2l0aXZlIGlmIHRoZSBsYXN0IGRpcmVjdG9yeSBpbiB0aGUgcGF0aCBpcyBpbmFjY2Vzc2libGUuCisKKy0gSXNzdWUgIzExMjIzOiBGaXggdGVzdF90aHJlYWRzaWduYWxzIHRvIGZhaWwsIG5vdCBoYW5nLCB3aGVuIHRoZQorICBub24tc2VtYXBob3JlIGltcGxlbWVudGF0aW9uIG9mIGxvY2tzIGlzIHVzZWQgdW5kZXIgUE9TSVguCisKKy0gSXNzdWUgIzEwOTExOiBBZGQgdGVzdHMgb24gQ0dJIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgUGllcnJlIFF1ZW50ZWwuCisKKy0gSXNzdWUgIzk5MzE6IEZpeCBoYW5ncyBpbiBHVUkgdGVzdHMgdW5kZXIgV2luZG93cyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMuCisgIFBhdGNoIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxMDUxMjogUHJvcGVybHkgY2xvc2Ugc29ja2V0cyB1bmRlciB0ZXN0LnRlc3RfY2dpLgorCistIElzc3VlICMxMDk5MjogTWFrZSB0ZXN0cyBwYXNzIHVuZGVyIGNvdmVyYWdlLgorCistIElzc3VlICMxMDgyNjogUHJldmVudCBzcG9yYWRpYyBmYWlsdXJlIGluIHRlc3Rfc3VicHJvY2VzcyBvbiBTb2xhcmlzIGR1ZQorICB0byBvcGVuIGRvb3IgZmlsZXMuCisKKy0gSXNzdWUgIzEwOTkwOiBQcmV2ZW50IHRlc3RzIGZyb20gY2xvYmJlcmluZyBhIHNldCB0cmFjZSBmdW5jdGlvbi4KKworQy1BUEkKKy0tLS0tCisKKy0gQWRkIFB5T2JqZWN0X0dlbmVyaWNHZXREaWN0IGFuZCBQeU9iamVjdF9HZW5lcmlTZXREaWN0LiBUaGV5IGFyZSBnZW5lcmljCisgIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIGdldHRlciBhbmQgc2V0dGVyIG9mIGEgYGBfX2RpY3RfX2BgIGRlc2NyaXB0b3Igb2YgQworICB0eXBlcy4KKworLSBJc3N1ZSAjMTM3Mjc6IEFkZCAzIG1hY3JvcyB0byBhY2Nlc3MgUHlEYXRlVGltZV9EZWx0YSBtZW1iZXJzOgorICBQeURhdGVUaW1lX0RFTFRBX0dFVF9EQVlTLCBQeURhdGVUaW1lX0RFTFRBX0dFVF9TRUNPTkRTLAorICBQeURhdGVUaW1lX0RFTFRBX0dFVF9NSUNST1NFQ09ORFMuCisKKy0gSXNzdWUgIzEwNTQyOiBBZGQgNCBtYWNyb3MgdG8gd29yayB3aXRoIHN1cnJvZ2F0ZXM6IFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0lTX0hJR0hfU1VSUk9HQVRFLCBQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUsCisgIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTLgorCistIElzc3VlICMxMjcyNDogQWRkIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRCBtYWNybyBmb3IgcmV0dXJuaW5nIE5vdEltcGxlbWVudGVkLgorCistIFBZX1BBVENITEVWRUxfUkVWSVNJT04gaGFzIGJlZW4gcmVtb3ZlZCwgc2luY2UgaXQncyBtZWFuaW5nbGVzcyB3aXRoCisgIE1lcmN1cmlhbC4KKworLSBJc3N1ZSAjMTIxNzM6IFRoZSBmaXJzdCBhcmd1bWVudCBvZiBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbCBpcyBub3cgYGNvbnN0CisgIGNoYXIgKmAgaW5zdGVhZCBvZiBgY2hhciAqYC4KKworLSBJc3N1ZSAjMTIzODA6IFB5QXJnX1BhcnNlVHVwbGUgbm93IGFjY2VwdHMgYSBieXRlYXJyYXkgZm9yIHRoZSAnYycgZm9ybWF0LgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWVzICMxMzQ5MSBhbmQgIzEzOTk1OiBGaXggbWFueSBlcnJvcnMgaW4gc3FsaXRlMyBkb2N1bWVudGF0aW9uLgorICBJbml0aWFsIHBhdGNoIGZvciAjMTM0OTEgYnkgSm9oYW5uZXMgVm9nZWwuCisKKy0gSXNzdWUgIzEzNDAyOiBEb2N1bWVudCBhYnNvbHV0ZW5lc3Mgb2Ygc3lzLmV4ZWN1dGFibGUuCisKKy0gSXNzdWUgIzEzODgzOiBQWVRIT05DQVNFT0sgYWxzbyB3b3JrcyBvbiBPUyBYLgorCistIElzc3VlICM5MDIxOiBBZGQgYW4gaW50cm9kdWN0aW9uIHRvIHRoZSBjb3B5IG1vZHVsZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM2MDA1OiBFeGFtcGxlcyBpbiB0aGUgc29ja2V0IGxpYnJhcnkgZG9jdW1lbnRhdGlvbiB1c2Ugc2VuZGFsbCwgd2hlcmUKKyAgcmVsZXZhbnQsIGluc3RlYWQgc2VuZCBtZXRob2QuCisKKy0gSXNzdWUgIzEyNzk4OiBVcGRhdGVkIHRoZSBtaW1ldHlwZXMgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTI5NDk6IERvY3VtZW50IHRoZSBrd29ubHlhcmdjb3VudCBhcmd1bWVudCBmb3IgdGhlIFB5Q29kZV9OZXcKKyAgQyBBUEkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzEzNTEzOiBGaXggaW8uSU9CYXNlIGRvY3VtZW50YXRpb24gdG8gY29ycmVjdGx5IGxpbmsgdG8gdGhlCisgIGlvLklPQmFzZS5yZWFkbGluZSBtZXRob2QgaW5zdGVhZCBvZiB0aGUgcmVhZGxpbmUgbW9kdWxlLgorCistIElzc3VlICMxMzIzNzogUmVvcmdhbmlzZSBzdWJwcm9jZXNzIGRvY3VtZW50YXRpb24gdG8gZW1waGFzaXNlIGNvbnZlbmllbmNlCisgIGZ1bmN0aW9ucyBhbmQgdGhlIG1vc3QgY29tbW9ubHkgbmVlZGVkIGFyZ3VtZW50cyB0byBQb3Blbi4KKworLSBJc3N1ZSAjMTMxNDE6IERlbW9uc3RyYXRlIHJlY29tbWVuZGVkIHN0eWxlIGZvciBzb2NrZXRzZXJ2ZXIgZXhhbXBsZXMuCisKKy0gSXNzdWUgIzExODE4OiBGaXggdGVtcGZpbGUgZXhhbXBsZXMgZm9yIFB5dGhvbiAzLgorCisKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMj8KID09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvTWlzYy9ORVdTIGIvTWlzYy9ORVdTCmluZGV4IDYyM2UxZmUuLjU4YzRlZWMgMTAwNjQ0Ci0tLSBhL01pc2MvTkVXUworKysgYi9NaXNjL05FV1MKQEAgLTIsMTAgKzIsMTAgQEAKIFB5dGhvbiBOZXdzCiArKysrKysrKysrKwogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNCByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotKk5vdCB5ZXQgcmVsZWFzZWQsIHNlZSBzZWN0aW9ucyBiZWxvdyBmb3IgY2hhbmdlcyByZWxlYXNlZCBpbiAzLjMuMyoKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMS0wNQogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE4LDIxICsxOCw2MCBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxOTkwODogcGF0aGxpYiBub3cgam9pbnMgcmVsYXRpdmUgV2luZG93cyBwYXRocyBjb3JyZWN0bHkgd2hlbiBhIGRyaXZlCisgIGlzIHByZXNlbnQuICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTkyOTY6IFNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBpbiBkYm1fb3BlbgorCiAtIElzc3VlICMxOTgzOTogRml4IHJlZ3Jlc3Npb24gaW4gYnoyIG1vZHVsZSdzIGhhbmRsaW5nIG9mIG5vbi1iemlwMiBkYXRhIGF0CiAgIEVPRiwgYW5kIGFuYWxvZ291cyBidWcgaW4gbHptYSBtb2R1bGUuCiAKKy0gSXNzdWUgIzE5ODgxOiBGaXggcGlja2xpbmcgYnVnIHdoZXJlIGNwaWNrbGUgd291bGQgZW1pdCBiYWQgcGlja2xlIGRhdGEgZm9yCisgIGxhcmdlIGJ5dGVzIHN0cmluZyAoaS5lLiwgd2l0aCBzaXplIGdyZWF0ZXIgdGhhbiAyKiozMi0xKS4KKwogLSBJc3N1ZSAjMTkxMzg6IGRvY3Rlc3QncyBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBub3cgYWxsb3dzIGEgbWF0Y2ggd2hlbgogICBubyBleGNlcHRpb24gZGV0YWlsIGV4aXN0cyAobm8gY29sb24gZm9sbG93aW5nIHRoZSBleGNlcHRpb24ncyBuYW1lLCBvcgogICBhIGNvbG9uIGRvZXMgZm9sbG93IGJ1dCBubyB0ZXh0IGZvbGxvd3MgdGhlIGNvbG9uKS4KIAorLSBJc3N1ZSAjMTk4Mjc6IE9uIFVOSVgsIHNldGJsb2NraW5nKCkgYW5kIHNldHRpbWVvdXQoKSBtZXRob2RzIG9mCisgIHNvY2tldC5zb2NrZXQgY2FuIG5vdyBhdm9pZCBhIHNlY29uZCBzeXNjYWxsIGlmIHRoZSBpb2N0bCgpIGZ1bmN0aW9uIGNhbiBiZQorICB1c2VkLCBvciBpZiB0aGUgbm9uLWJsb2NraW5nIGZsYWcgb2YgdGhlIHNvY2tldCBpcyB1bmNoYW5nZWQuCisKKy0gSXNzdWUgIzE5Nzg1OiBzbXRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4NDogcG9wbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4Mzogbm50cGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjMTk3ODI6IGltYXBsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKIC0gSXNzdWUgIzE5ODM0OiBTdXBwb3J0IHVucGlja2xpbmcgb2YgZXhjZXB0aW9ucyBwaWNrbGVkIGJ5IFB5dGhvbiAyLgogCistIElzc3VlICMxOTc4MTogZnRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTUwOTogQWRkIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgdG8gbWF0Y2ggdGhlIHBlZXIncyBjZXJ0aWZpY2F0ZQorICB3aXRoIHNlcnZlcl9ob3N0bmFtZSBvbiBoYW5kc2hha2UuCisKIC0gSXNzdWUgIzE1Nzk4OiBGaXhlZCBzdWJwcm9jZXNzLlBvcGVuKCkgdG8gbm8gbG9uZ2VyIGZhaWwgaWYgZmlsZQogICBkZXNjcmlwdG9yIDAsIDEgb3IgMiBpcyBjbG9zZWQuCiAKKy0gSXNzdWUgIzE3ODk3OiBPcHRpbWl6ZWQgdW5waWNrbGUgcHJlZmV0Y2hpbmcuCisKKy0gSXNzdWUgIzM2OTM6IE1ha2UgdGhlIGVycm9yIG1lc3NhZ2UgbW9yZSBoZWxwZnVsIHdoZW4gdGhlIGFycmF5LmFycmF5KCkKKyAgY29uc3RydWN0b3IgaXMgZ2l2ZW4gYSBzdHIuIE1vdmUgdGhlIGFycmF5IG1vZHVsZSB0eXBlY29kZSBkb2N1bWVudGF0aW9uIHRvCisgIHRoZSBkb2NzdHJpbmcgb2YgdGhlIGNvbnN0cnVjdG9yLgorCiAtIElzc3VlICMxOTA4ODogRml4ZWQgaW5jb3JyZWN0IGNhY2hpbmcgb2YgdGhlIGNvcHlyZWcgbW9kdWxlIGluCiAgIG9iamVjdC5fX3JlZHVjZV9fKCkgYW5kIG9iamVjdC5fX3JlZHVjZV9leF9fKCkuCiAKKy0gSXNzdWUgIzE5Njk4OiBSZW1vdmVkIGV4ZWNfbW9kdWxlKCkgbWV0aG9kcyBmcm9tCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyLgorCiAtIEZpeGVkIF9waWNrbGUuVW5waWNrbGVyIHRvIG5vdCBmYWlsIHdoZW4gbG9hZGluZyBlbXB0eSBzdHJpbmdzIGFzCiAgIHBlcnNpc3RlbnQgSURzLgogCkBAIC00Miw2ICs4MSwxMCBAQAogLSBJc3N1ZSAjNjQ3NzogQWRkZWQgc3VwcG9ydCBmb3IgcGlja2xpbmcgdGhlIHR5cGVzIG9mIGJ1aWx0LWluIHNpbmdsZXRvbnMKICAgKGkuZS4sIEVsbGlwc2lzLCBOb3RJbXBsZW1lbnRlZCwgTm9uZSkuCiAKKy0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBzZXRzIE9QX05PX0NPTVBSRVNTSU9OIHRvIHByZXZlbnQgQ1JJTUUuCisKKy0gSXNzdWUgIzE5ODAyOiBBZGQgc29ja2V0LlNPX1BSSU9SSVRZLgorCiAtIElzc3VlICMxMTUwODogRml4ZWQgdXVpZC5nZXRub2RlKCkgYW5kIHV1aWQudXVpZDEoKSBvbiBlbnZpcm9ubWVudCB3aXRoCiAgIHZpcnR1YWwgaW50ZXJmYWNlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgS2VudCBGcmF6aWVyLgogCkBAIC01MCw0NyArOTMsNiBAQAogLSBJc3N1ZSAjMTk1NDU6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIHN0cmF5ICUgdG8KICAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCiAKLS0gSXNzdWUgIzE5NjMzOiBGaXhlZCB3cml0aW5nIG5vdCBjb21wcmVzc2VkIDE2LSBhbmQgMzItYml0IHdhdmUgZmlsZXMgb24KLSAgYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE5NDQ5OiBpbiBjc3YncyB3cml0ZXJvdywgaGFuZGxlIG5vbi1zdHJpbmcga2V5cyB3aGVuIGdlbmVyYXRpbmcgdGhlCi0gIGVycm9yIG1lc3NhZ2UgdGhhdCBjZXJ0YWluIGtleXMgYXJlIG5vdCBpbiB0aGUgJ2ZpZWxkbmFtZXMnIGxpc3QuCi0KLS0gRml4IHRlc3Quc3VwcG9ydC5iaW5kX3BvcnQoKSB0byBub3QgY2F1c2UgYW4gZXJyb3Igd2hlbiBQeXRob24gd2FzIGNvbXBpbGVkCi0gIG9uIGEgc3lzdGVtIHdpdGggU09fUkVVU0VQT1JUIGRlZmluZWQgaW4gdGhlIGhlYWRlcnMgYnV0IHJ1biBvbiBhIHN5c3RlbQotICB3aXRoIGFuIE9TIGtlcm5lbCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhhdCByZWFzb25hYmx5IG5ldyBzb2NrZXQgb3B0aW9uLgotCi0tIEZpeCBjb21waWxhdGlvbiBlcnJvciB1bmRlciBnY2Mgb2YgdGhlIGN0eXBlcyBtb2R1bGUgYnVuZGxlZCBsaWJmZmkgZm9yIGFybS4KLQotLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KLQotLSBJc3N1ZSAjMTM2NzQ6IFByZXZlbnRlZCB0aW1lLnN0cmZ0aW1lIGZyb20gY3Jhc2hpbmcgb24gV2luZG93cyB3aGVuIGdpdmVuCi0gIGEgeWVhciBiZWZvcmUgMTkwMCBhbmQgYSBmb3JtYXQgb2YgJXkuCi0KLS0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNjI4NjogUmVzdG9yZSB1c2Ugb2YgdXJsbGliIG92ZXIgaHR0cCBhbGxvd2luZyB1c2UKLSAgb2YgaHR0cF9wcm94eSBmb3IgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kLCBhIGZlYXR1cmUgYWNjaWRlbnRhbGx5IGxvc3QKLSAgaW4gdGhlIHJvbGxiYWNrIG9mIGRpc3R1dGlsczIuCi0KLS0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNzQ1NzogUmVzdG9yZSB0aGUgcmVhZF9wa2dfZmlsZSBtZXRob2QgdG8KLSAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGEgYWNjaWRlbnRhbGx5IHJlbW92ZWQgaW4gdGhlIHVuZG8gb2YKLSAgZGlzdHV0aWxzMi4KLQotLSBJc3N1ZSAjMTU3NTAyMDogRml4ZWQgc3VwcG9ydCBvZiAyNC1iaXQgd2F2ZSBmaWxlcyBvbiBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTk0ODA6IEhUTUxQYXJzZXIgbm93IGFjY2VwdHMgYWxsIHZhbGlkIHN0YXJ0LXRhZyBuYW1lcyBhcyBkZWZpbmVkCi0gIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZC4KLQotLSBJc3N1ZSAjNjE1NzogRml4ZWQgdGtpbnRlci5UZXh0LmRlYnVnKCkuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotLSBJc3N1ZSAjNjE2MDogVGhlIGJib3goKSBtZXRob2Qgb2YgdGtpbnRlci5TcGluYm94IG5vdyByZXR1cm5zIGEgdHVwbGUgb2YKLSAgaW50ZWdlcnMgaW5zdGVhZCBvZiBhIHN0cmluZy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi0tIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKLSAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KLQotLSBJc3N1ZSAjMTkyODY6IERpcmVjdG9yaWVzIGluIGBgcGFja2FnZV9kYXRhYGAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bwotICB0aGUgZmlsZWxpc3QsIHByZXZlbnRpbmcgZmFpbHVyZSBvdXRsaW5lZCBpbiB0aGUgdGlja2V0LgotCiBUZXN0cwogLS0tLS0KIApAQCAtOTksMTYgKzEwMSwxMiBAQAogLSBJc3N1ZSAjMTk1ODg6IEZpeGVkIHRlc3RzIGluIHRlc3RfcmFuZG9tIHRoYXQgd2VyZSBzaWxlbnRseSBza2lwcGVkIG1vc3QKICAgb2YgdGhlIHRpbWUuICBQYXRjaCBieSBKdWxpYW4gR2luZGkuCiAKLS0gSXNzdWUgIzE5NTk2OiBTZXQgdW50ZXN0YWJsZSB0ZXN0cyBpbiB0ZXN0X2ltcG9ydGxpYiB0byBOb25lIHRvIGF2b2lkCi0gIHJlcG9ydGluZyBzdWNjZXNzIG9uIGVtcHR5IHRlc3RzLgorQnVpbGQKKy0tLS0tCiAKLS0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXwotICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCi0gIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgd2l0aGluIGEgdW5pdHRlc3QgVGVzdENhc2UuCi0KLS0gSXNzdWUgIzE4NzAyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KLQotLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKy0gSXNzdWUgIzE5Nzg4OiBraWxsX3B5dGhvbihfZCkuZXhlIGlzIG5vdyBydW4gYXMgYSBQcmVCdWlsZEV2ZW50IG9uIHRoZQorICBweXRob25jb3JlIHN1Yi1wcm9qZWN0LiAgVGhpcyBzaG91bGQgcHJldmVudCBidWlsZCBlcnJvcnMgZHVlIGEgcHJldmlvdXMKKyAgYnVpbGQncyBweXRob24oX2QpLmV4ZSBzdGlsbCBydW5uaW5nLgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCkBAIC0xMjAsMTM2ICsxMTgsMjg2IEBACiAKIC0gSXNzdWUgIzE5Nzk1OiBJbXByb3ZlZCBtYXJrdXAgb2YgVHJ1ZS9GYWxzZSBjb25zdGFudHMuCiAKLS0gSXNzdWUgIzE4MzI2OiBDbGFyaWZ5IHRoYXQgbGlzdC5zb3J0J3MgYXJndW1lbnRzIGFyZSBrZXl3b3JkLW9ubHkuICBBbHNvLAotICBhdHRlbXB0IHRvIHJlZHVjZSBjb25mdXNpb24gaW4gdGhlIGdsb3NzYXJ5IGJ5IG5vdCBzYXlpbmcgdGhlcmUgYXJlCi0gIGRpZmZlcmVudCAidHlwZXMiIG9mIGFyZ3VtZW50cyBhbmQgcGFyYW1ldGVycy4KIAotQnVpbGQKLS0tLS0tCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBCZXRhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLS0gSXNzdWUgIzE5Nzg4OiBraWxsX3B5dGhvbihfZCkuZXhlIGlzIG5vdyBydW4gYXMgYSBQcmVCdWlsZEV2ZW50IG9uIHRoZQotICBweXRob25jb3JlIHN1Yi1wcm9qZWN0LiAgVGhpcyBzaG91bGQgcHJldmVudCBidWlsZCBlcnJvcnMgZHVlIGEgcHJldmlvdXMKLSAgYnVpbGQncyBweXRob24oX2QpLmV4ZSBzdGlsbCBydW5uaW5nLgotCi0tIEFkZCB3b3JrYXJvdW5kIGZvciBWUyAyMDEwIG5tYWtlIGNsZWFuIGlzc3VlLiBWUyAyMDEwIGRvZXNuJ3Qgc2V0IHVwIFBBVEgKLSAgZm9yIG5tYWtlLmV4ZSBjb3JyZWN0bHkuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjM/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTctTm92LTIwMTMqCi0KLU5vIGNoYW5nZXMgZnJvbSByZWxlYXNlIGNhbmRpZGF0ZSAyLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4zIHJlbGVhc2UgY2FuZGlkYXRlIDI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxMS1Ob3YtMjAxMyoKLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMxOTIyNzogQW55IHJlLXNlZWRpbmcgb2YgdGhlIE9wZW5TU0wgUk5HIG9uIGZvcmsgaGFzIGJlZW4gcmVtb3ZlZDsKLSAgdGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBPcGVuU1NMIGl0c2VsZiBvciBieSB0aGUgYXBwbGljYXRpb24uCi0KLS0gSXNzdWUgIzE5NDM1OiBGaXggZGlyZWN0b3J5IHRyYXZlcnNhbCBhdHRhY2sgb24gQ0dJSHR0cFJlcXVlc3RIYW5kbGVyLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTg5NjQ6IEZpeCB0ZXN0X3RjbCB3aGVuIHJ1biB3aXRoIFRjbC9UayB2ZXJzaW9ucyAgPCA4LjUuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNTY2MzogUmV2ZXJ0IE9TIFggaW5zdGFsbGVyIGJ1aWx0LWluIFRjbC9UayBzdXBwb3J0IGZvciAzLjMuMy4KLSAgU29tZSB0aGlyZC1wYXJ0eSBwcm9qZWN0cywgc3VjaCBhcyBNYXRwbG90bGliIGFuZCBQSUwvUGlsbG93LAotICBkZXBlbmRlZCBvbiBiZWluZyBhYmxlIHRvIGJ1aWxkIHdpdGggVGNsIGFuZCBUayBmcmFtZXdvcmtzIGluCi0gIC9MaWJyYXJ5L0ZyYW1ld29ya3MuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjMgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LU9jdC0yMDEzKgorUmVsZWFzZSBkYXRlOiAyMDEzLTExLTI0CiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIFVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIGluIG1vcmUgcGxhY2VzIGluIGltcG9ydCwgZXNwZWNpYWxseQorICBleGNlcHRpb25zLgorCistIElzc3VlICMxOTYxOTogc3RyLmVuY29kZSwgYnl0ZXMuZGVjb2RlIGFuZCBieXRlYXJyYXkuZGVjb2RlIG5vdyB1c2UgYW4KKyAgaW50ZXJuYWwgQVBJIHRvIHRocm93IExvb2t1cEVycm9yIGZvciBrbm93biBub24tdGV4dCBlbmNvZGluZ3MsIHJhdGhlcgorICB0aGFuIGF0dGVtcHRpbmcgdGhlIGVuY29kaW5nIG9yIGRlY29kaW5nIG9wZXJhdGlvbiBhbmQgdGhlbiB0aHJvd2luZyBhCisgIFR5cGVFcnJvciBmb3IgYW4gdW5leHBlY3RlZCBvdXRwdXQgdHlwZS4gKFRoZSBsYXR0ZXIgbWVjaGFuaXNtIHJlbWFpbnMKKyAgaW4gcGxhY2UgZm9yIHRoaXJkIHBhcnR5IG5vbi10ZXh0IGVuY29kaW5ncykKKworLSBJc3N1ZSAjMTkxODM6IEltcGxlbWVudCBQRVAgNDU2ICdzZWN1cmUgYW5kIGludGVyY2hhbmdlYWJsZSBoYXNoIGFsZ29yaXRobScuCisgIFB5dGhvbiBub3cgdXNlcyBTaXBIYXNoMjQgb24gYWxsIG1ham9yIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4OTI6IFRoZSB1dGYtMTYqIGFuZCB1dGYtMzIqIGVuY29kZXJzIG5vIGxvbmdlciBhbGxvdyBzdXJyb2dhdGUgY29kZQorICBwb2ludHMgKFUrRDgwMC1VK0RGRkYpIHRvIGJlIGVuY29kZWQuICBUaGUgdXRmLTMyKiBkZWNvZGVycyBubyBsb25nZXIgZGVjb2RlCisgIGJ5dGUgc2VxdWVuY2VzIHRoYXQgY29ycmVzcG9uZCB0byBzdXJyb2dhdGUgY29kZSBwb2ludHMuICBUaGUgc3Vycm9nYXRlcGFzcworICBlcnJvciBoYW5kbGVyIG5vdyB3b3JrcyB3aXRoIHRoZSB1dGYtMTYqIGFuZCB1dGYtMzIqIGNvZGVjcy4gIEJhc2VkIG9uCisgIHBhdGNoZXMgYnkgVmljdG9yIFN0aW5uZXIgYW5kIEthbmctSGFvIChLZW5ueSkgTHUuCisKKy0gSXNzdWUgIzE3ODA2OiBBZGRlZCBrZXl3b3JkLWFyZ3VtZW50IHN1cHBvcnQgZm9yICJ0YWJzaXplIiB0bworICBzdHIvYnl0ZXMuZXhwYW5kdGFicygpLgorCistIElzc3VlICMxNzgyODogT3V0cHV0IHR5cGUgZXJyb3JzIGluIHN0ci5lbmNvZGUoKSwgYnl0ZXMuZGVjb2RlKCkgYW5kCisgIGJ5dGVhcnJheS5kZWNvZGUoKSBub3cgZGlyZWN0IHVzZXJzIHRvIGNvZGVjcy5lbmNvZGUoKSBvciBjb2RlY3MuZGVjb2RlKCkKKyAgYXMgYXBwcm9wcmlhdGUuCisKKy0gSXNzdWUgIzE3ODI4OiBUaGUgaW50ZXJwcmV0ZXIgbm93IGF0dGVtcHRzIHRvIGNoYWluIGVycm9ycyB0aGF0IG9jY3VyIGluCisgIGNvZGVjIHByb2Nlc3Npbmcgd2l0aCBhIHJlcGxhY2VtZW50IGV4Y2VwdGlvbiBvZiB0aGUgc2FtZSB0eXBlIHRoYXQKKyAgaW5jbHVkZXMgdGhlIGNvZGVjIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IGVuc3VyZXMgaXQgb25seSBkb2VzIHRoaXMKKyAgd2hlbiB0aGUgY3JlYXRpb24gb2YgdGhlIHJlcGxhY2VtZW50IGV4Y2VwdGlvbiB3b24ndCBsb3NlIGFueSBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTk0NjY6IENsZWFyIHRoZSBmcmFtZXMgb2YgZGFlbW9uIHRocmVhZHMgZWFybGllciBkdXJpbmcgdGhlCisgIFB5dGhvbiBzaHV0ZG93biB0byBjYWxsIG9iamVjdHMgZGVzdHJ1Y3RvcnMuIFNvICJ1bmNsb3NlZCBmaWxlIiByZXNvdXJjZQorICB3YXJuaW5ncyBhcmUgbm93IGNvcnJldGx5IGVtaXR0ZWQgZm9yIGRhZW1vbiB0aHJlYWRzLgorCistIElzc3VlICMxOTUxNDogRGVkdXBsaWNhdGUgc29tZSBfUHlfSURFTlRJRklFUiBkZWNsYXJhdGlvbnMuCisgIFBhdGNoIGJ5IEFuZHJlaSBEb3JpYW4gRHVtYS4KKworLSBJc3N1ZSAjMTc5MzY6IEZpeCBPKG4qKjIpIGJlaGF2aW91ciB3aGVuIGFkZGluZyBvciByZW1vdmluZyBtYW55IHN1YmNsYXNzZXMKKyAgb2YgYSBnaXZlbiB0eXBlLgorCistIElzc3VlICMxOTQyODogemlwaW1wb3J0IG5vdyBoYW5kbGVzIGVycm9ycyB3aGVuIHJlYWRpbmcgdHJ1bmNhdGVkIG9yIGludmFsaWQKKyAgWklQIGFyY2hpdmUuCisKKy0gSXNzdWUgIzE4NDA4OiBBZGQgYSBuZXcgUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoKSBmdW5jdGlvbiB0byBoYW5kbGUKKyAgZXhjZXB0aW9ucyB3aGVuIG1lcmdpbmcgZmFzdCBsb2NhbHMgaW50byBmX2xvY2FscyBvZiBhIGZyYW1lLgorICBQeUV2YWxfR2V0TG9jYWxzKCkgbm93IHJhaXNlcyBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMIG9uIGZhaWx1cmUuCisKKy0gSXNzdWUgIzE5MzY5OiBPcHRpbWl6ZWQgdGhlIHVzYWdlIG9mIF9fbGVuZ3RoX2hpbnRfXygpLgorCiAtIElzc3VlICMxODYwMzogRW5zdXJlIHRoYXQgUHlPU19teXN0cmljbXAgYW5kIFB5T1NfbXlzdHJuaWNtcCBhcmUgaW4gdGhlCiAgIFB5dGhvbiBleGVjdXRhYmxlIGFuZCBub3QgcmVtb3ZlZCBieSB0aGUgbGlua2VyJ3Mgb3B0aW1pemVyLgogCi0tIElzc3VlICMxOTI3OTogVVRGLTcgZGVjb2RlciBubyBtb3JlIHByb2R1Y2VzIGlsbGVnYWwgc3RyaW5ncy4KLQotLSBGaXggbWFjcm8gZXhwYW5zaW9uIG9mIF9QeUVycl9PQ0NVUlJFRCgpLCBhbmQgbWFrZSBzdXJlIHRvIHVzZSBpdCBpbiBhdAotICBsZWFzdCBvbmUgcGxhY2Ugc28gYXMgdG8gYXZvaWQgcmVncmVzc2lvbnMuCi0KLS0gSXNzdWUgIzE5MDE0OiBtZW1vcnl2aWV3LmNhc3QoKSBpcyBub3cgYWxsb3dlZCBvbiB6ZXJvLWxlbmd0aCB2aWV3cy4KLQotLSBJc3N1ZSAjMTkwOTg6IFByZXZlbnQgb3ZlcmZsb3cgaW4gdGhlIGNvbXBpbGVyIHdoZW4gdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyBzZXQKLSAgYWJzdXJkbHkgaGlnaC4KLQotLSBJc3N1ZSAjMTg5NDI6IHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIG91dHB1dCB3YXMgZGFtYWdlZCBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxODY2NzogQWRkIG1pc3NpbmcgIkhBVkVfRkNIT1dOQVQiIHN5bWJvbCB0byBwb3NpeC5faGF2ZV9mdW5jdGlvbnMuCi0KLS0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCi0gIGZhaWxzLgotCi0tIElzc3VlICMxNjc0MTogRml4IGFuIGVycm9yIHJlcG9ydGluZyBpbiBpbnQoKS4KLQotLSBJc3N1ZSAjMTc4OTk6IEZpeCByYXJlIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG9zLmxpc3RkaXIoKS4KLQotLSBJc3N1ZSAjMTg1NTI6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBQeUFyZW5hX0FkZFB5T2JqZWN0KCkgaW4KLSAgb2JqMmFzdF9vYmplY3QoKS4KLQotLSBJc3N1ZSAjMTg1NjA6IEZpeCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHN1bSgpLgotCi0tIElzc3VlICMxNTkwNTogRml4IHRoZW9yZXRpY2FsIGJ1ZmZlciBvdmVyZmxvdyBpbiBoYW5kbGluZyBvZiBzeXMuYXJndlswXSwKLSAgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBpZiB0aGUgb3BlcmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBvYmV5IE1BWFBBVEhMRU4uCi0KLS0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KLQotLSBJc3N1ZSAjMTc4NzI6IEZpeCBhIHNlZ2ZhdWx0IGluIG1hcnNoYWwubG9hZCgpIHdoZW4gaW5wdXQgc3RyZWFtIHJldHVybnMKLSAgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4KLQotLSBJc3N1ZSAjMTg0MjY6IEZpeCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gQyBleHRlbnNpb24gaW1wb3J0IHdoZW4KLSAgUHlNb2R1bGVfR2V0RGVmKCkgcmV0dXJucyBhbiBlcnJvci4KLQotLSBJc3N1ZSAjMTgzMjg6IFJlb3JkZXIgb3BzIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlKigpIGZ1bmN0aW9ucy4gTm93IHRoZQotICB0c3RhdGUgaXMgZmlyc3QgcmVtb3ZlZCBmcm9tIFRMUyBhbmQgdGhlbiBkZWFsbG9jYXRlZC4KLQotLSBJc3N1ZSAjMTgxODQ6IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgYW5kIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIG5vdyByYWlzZQotICBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gYXJndW1lbnQgb2YgJWMgZm9ybWF0IGlzIG91dCBvZiByYW5nZS4KLQotLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKLSAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgotCi0tIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCi0gIGNvZGVwb2ludHMuCi0KLS0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCi0KLS0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCi0gIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KLQotLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCi0gIGJyYWNrZXRzLgotCi0tIElzc3VlICMxNzk4MzogUmFpc2UgYSBTeW50YXhFcnJvciBmb3IgYSBgYGdsb2JhbCBfX2NsYXNzX19gYCBzdGF0ZW1lbnQgaW4gYQotICBjbGFzcyBib2R5LgotCi0tIElzc3VlICMxNzkyNzogRnJhbWUgb2JqZWN0cyBrZXB0IGFyZ3VtZW50cyBhbGl2ZSBpZiB0aGV5IGhhZCBiZWVuIGNvcGllZCBpbnRvCi0gIGEgY2VsbCwgZXZlbiBpZiB0aGUgY2VsbCB3YXMgY2xlYXJlZC4KKy0gSXNzdWUgIzE5MzA2OiBBZGQgZXh0cmEgaGludHMgdG8gdGhlIGZhdWx0aGFuZGxlciBtb2R1bGUncyBzdGFjaworICBkdW1wcyB0aGF0IHRoZXNlIGFyZSAidXBzaWRlIGRvd24iLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE5Mzk1OiBSYWlzZSBhbiBleGNlcHRpb24gd2hlbiBhdHRlbXB0aW5nIHRvIHBpY2tsZSBhIGJ6MiBvciBsem1hCi0gIGNvbXByZXNzb3IvZGVjb21wcmVzc29yIG9iamVjdCwgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBwaWNrbGUgdGhhdCB3b3VsZAotICBjYXVzZSBhIHNlZ2ZhdWx0IHdoZW4gbG9hZGVkIGFuZCB1c2VkLgorLSBJc3N1ZSAjMzE1ODogZG9jdGVzdCBjYW4gbm93IGZpbmQgZG9jdGVzdHMgaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzCisgIHdyaXR0ZW4gaW4gQy4KKworLSBJc3N1ZSAjMTM0Nzc6IEFkZGVkIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gdGhlIHRhcmZpbGUgbW9kdWxlLgorICBPcmlnaW5hbCBwYXRjaCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxOTY3NDogaW5zcGVjdC5zaWduYXR1cmUoKSBub3cgcHJvZHVjZXMgYSBjb3JyZWN0IHNpZ25hdHVyZQorICBmb3Igc29tZSBidWlsdGlucy4KKworLSBJc3N1ZSAjMTk3MjI6IEFkZGVkIG9wY29kZS5zdGFja19lZmZlY3QoKSwgd2hpY2gKKyAgY29tcHV0ZXMgdGhlIHN0YWNrIGVmZmVjdCBvZiBieXRlY29kZSBpbnN0cnVjdGlvbnMuCisKKy0gSXNzdWUgIzE5NzM1OiBJbXBsZW1lbnQgcHJpdmF0ZSBmdW5jdGlvbiBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpIHRvCisgIGNyZWF0ZSBTU0xDb250ZXh0IG9iamVjdHMgaW4gUHl0aG9uJ3Mgc3RkbGliIG1vZHVsZS4gSXQgcHJvdmlkZXMgYSBzaW5nbGUKKyAgY29uZmlndXJhdGlvbiBwb2ludCBhbmQgbWFrZXMgdXNlIG9mIFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKCkuCisKKy0gSXNzdWUgIzE2MjAzOiBBZGQgcmUuZnVsbG1hdGNoKCkgZnVuY3Rpb24gYW5kIHJlZ2V4LmZ1bGxtYXRjaCgpIG1ldGhvZCwKKyAgd2hpY2ggYW5jaG9yIHRoZSBwYXR0ZXJuIGF0IGJvdGggZW5kcyBvZiB0aGUgc3RyaW5nIHRvIG1hdGNoLgorICBPcmlnaW5hbCBwYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzEzNTkyOiBJbXByb3ZlZCB0aGUgcmVwciBmb3IgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0cy4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgSHVnbyBMb3BlcyBUYXZhcmVzLgorCistIElzc3VlICMxOTY0MTogQWRkZWQgdGhlIGF1ZGlvb3AuYnl0ZXN3YXAoKSBmdW5jdGlvbiB0byBjb252ZXJ0IGJpZy1lbmRpYW4KKyAgc2FtcGxlcyB0byBsaXR0bGUtZW5kaWFuIGFuZCB2aWNlIHZlcnNhLgorCistIElzc3VlICMxNTIwNDogRGVwcmVjYXRlZCB0aGUgJ1UnIG1vZGUgaW4gZmlsZS1saWtlIG9iamVjdHMuCisKKy0gSXNzdWUgIzE3ODEwOiBJbXBsZW1lbnQgUEVQIDMxNTQsIHBpY2tsZSBwcm90b2NvbCA0LgorCistIElzc3VlICMxOTY2ODogQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNwMTEyNSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTk2ODk6IEFkZCBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpIGZhY3RvcnkgZnVuY3Rpb24uIEl0IGNyZWF0ZXMKKyAgYSBuZXcgU1NMQ29udGV4dCBvYmplY3Qgd2l0aCBzZWN1cmUgZGVmYXVsdCBzZXR0aW5ncy4KKworLSBJc3N1ZSAjMTk3Mjc6IG9zLnV0aW1lKC4uLiwgTm9uZSkgaXMgbm93IHBvdGVudGlhbGx5IG1vcmUgcHJlY2lzZQorICB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxNzIwMTogWklQNjQgZXh0ZW5zaW9ucyBub3cgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gIFBhdGNoIGJ5CisgIFdpbGxpYW0gTWFsbGFyZC4KKworLSBJc3N1ZSAjMTkyOTI6IEFkZCBTU0xDb250ZXh0LmxvYWRfZGVmYXVsdF9jZXJ0cygpIHRvIGxvYWQgZGVmYXVsdCByb290IENBCisgIGNlcnRpZmljYXRlcyBmcm9tIGRlZmF1bHQgc3RvcmVzIG9yIHN5c3RlbSBzdG9yZXMuIEJ5IGRlZmF1bHQgdGhlIG1ldGhvZAorICBsb2FkcyBDQSBjZXJ0cyBmb3IgYXV0aGVudGljYXRpb24gb2Ygc2VydmVyIGNlcnRzLgorCistIElzc3VlICMxOTY3MzogQWRkIHBhdGhsaWIgdG8gdGhlIHN0ZGxpYiBhcyBhIHByb3Zpc2lvbmFsIG1vZHVsZSAoUEVQIDQyOCkuCisKKy0gSXNzdWUgIzE2NTk2OiBwZGIgaW4gYSBnZW5lcmF0b3Igbm93IHByb3Blcmx5IHNraXBzIG92ZXIgeWllbGQgYW5kCisgIHlpZWxkIGZyb20gcmF0aGVyIHRoYW4gc3RlcHBpbmcgb3V0IG9mIHRoZSBnZW5lcmF0b3IgaW50byBpdHMKKyAgY2FsbGVyLiAgKFRoaXMgaXMgZXNzZW50aWFsIGZvciBzdGVwcGluZyB0aHJvdWdoIGFzeW5jaW8gY29yb3V0aW5lcy4pCisKKy0gSXNzdWUgIzE3OTE2OiBBZGRlZCBkaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2soKSBhbmQKKyAgZGlzLkJ5dGVjb2RlLmN1cnJlbnRfb2Zmc2V0IHRvIGVhc2lseSBkaXNwbGF5ICJjdXJyZW50IGluc3RydWN0aW9uIgorICBtYXJrZXJzIGluIHRoZSBuZXcgZGlzYXNzZW1ibHkgQVBJIChQYXRjaCBieSBDbGF1ZGl1IFBvcGEpLgorCistIElzc3VlICMxOTU1MjogdmVudiBub3cgc3VwcG9ydHMgYm9vdHN0cmFwcGluZyBwaXAgaW50byB2aXJ0dWFsIGVudmlyb25tZW50cworCistIElzc3VlICMxNzEzNDogRmluYWxpemUgaW50ZXJmYWNlIHRvIFdpbmRvd3MnIGNlcnRpZmljYXRlIHN0b3JlLiBDZXJ0IGFuZAorICBDUkwgZW51bWVyYXRpb24gYXJlIG5vdyB0d28gZnVuY3Rpb25zLiBlbnVtX2NlcnRpZmljYXRlcygpIGFsc28gcmV0dXJucworICBwdXJwb3NlIGZsYWdzIGFzIHNldCBvZiBPSURzLgorCistIElzc3VlICMxOTU1NTogUmVzdG9yZSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksIChhbmQgdGhlIGRpc3R1dGlscworICBlcXVpdmFsZW50KSB3aXRoIGEgRGVwcmVjYXRpb25XYXJuaW5nIHBvaW50aW5nIHBlb3BsZSBhdCAkRVhUX1NVRkZJWC4KKworLSBJc3N1ZSAjODgxMzogQWRkIFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzIHRvIGNoYW5nZSB0aGUgdmVyaWZpY2F0aW9uIGZsYWdzCisgIG9mIHRoZSBjb250ZXh0IGluIG9yZGVyIHRvIGVuYWJsZSBjZXJ0aWZpY2F0aW9uIHJldm9jYXRpb24gbGlzdCAoQ1JMKQorICBjaGVja3Mgb3Igc3RyaWN0IFg1MDkgcnVsZXMuCisKKy0gSXNzdWUgIzE4Mjk0OiBGaXggdGhlIHpsaWIgbW9kdWxlIHRvIG1ha2UgaXQgNjQtYml0IHNhZmUuCisKKy0gSXNzdWUgIzE5NjgyOiBGaXggY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIG9sZCB2ZXJzaW9uIG9mIE9wZW5TU0wgdGhhdAorICB3YXMgaW50cm9kdWNlZCBieSBJc3N1ZSAjMTgzNzkuCisKKy0gSXNzdWUgIzE0NDU1OiBwbGlzdGxpYiBub3cgc3VwcG9ydHMgYmluYXJ5IHBsaXN0cyBhbmQgaGFzIGFuIHVwZGF0ZWQgQVBJLgorCistIElzc3VlICMxOTYzMzogRml4ZWQgd3JpdGluZyBub3QgY29tcHJlc3NlZCAxNi0gYW5kIDMyLWJpdCB3YXZlIGZpbGVzIG9uCisgIGJpZy1lbmRpYW4gcGxhdGZvcm1zLgorCistIElzc3VlICMxODM3OTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgcmV0dXJucyBDQSBpc3N1ZXIgQUlBIGZpZWxkcywgT0NTUAorICBhbmQgQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMuCisKKy0gSXNzdWUgIzE4MTM4OiBJbXBsZW1lbnQgY2FkYXRhIGFyZ3VtZW50IG9mIFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb24oKQorICB0byBsb2FkIENBIGNlcnRpZmljYXRlcyBhbmQgQ1JMIGZyb20gbWVtb3J5LiBJdCBzdXBwb3J0cyBQRU0gYW5kIERFUgorICBlbmNvZGVkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE4Nzc1OiBBZGQgbmFtZSBhbmQgYmxvY2tfc2l6ZSBhdHRyaWJ1dGUgdG8gSE1BQyBvYmplY3QuIFRoZXkgbm93CisgIHByb3ZpZGUgdGhlIHNhbWUgQVBJIGVsZW1lbnRzIGFzIG5vbi1rZXllZCBjcnlwdG9ncmFwaGljIGhhc2ggZnVuY3Rpb25zLgorCistIElzc3VlICMxNzI3NjogTUQ1IGFzIGRlZmF1bHQgZGlnZXN0bW9kIGZvciBITUFDIGlzIGRlcHJlY2F0ZWQuIFRoZSBITUFDCisgIG1vZHVsZSBzdXBwb3J0cyBkaWdlc3Rtb2QgbmFtZXMsIGUuZy4gaG1hYy5ITUFDKCdzaGExJykuCisKKy0gSXNzdWUgIzE5NDQ5OiBpbiBjc3YncyB3cml0ZXJvdywgaGFuZGxlIG5vbi1zdHJpbmcga2V5cyB3aGVuIGdlbmVyYXRpbmcgdGhlCisgIGVycm9yIG1lc3NhZ2UgdGhhdCBjZXJ0YWluIGtleXMgYXJlIG5vdCBpbiB0aGUgJ2ZpZWxkbmFtZXMnIGxpc3QuCisKKy0gSXNzdWUgIzEzNjMzOiBBZGRlZCBhIG5ldyBjb252ZXJ0X2NoYXJyZWZzIGtleXdvcmQgYXJnIHRvIEhUTUxQYXJzZXIgdGhhdCwKKyAgd2hlbiBUcnVlLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGFsbCBjaGFyYWN0ZXIgcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjMjkyNzogQWRkZWQgdGhlIHVuZXNjYXBlKCkgZnVuY3Rpb24gdG8gdGhlIGh0bWwgbW9kdWxlLgorCistIElzc3VlICM4NDAyOiBBZGRlZCB0aGUgZXNjYXBlKCkgZnVuY3Rpb24gdG8gdGhlIGdsb2IgbW9kdWxlLgorCistIElzc3VlICMxNzYxODogQWRkIEJhc2U4NSBhbmQgQXNjaWk4NSBlbmNvZGluZy9kZWNvZGluZyB0byB0aGUgYmFzZTY0IG1vZHVsZS4KKworLSBJc3N1ZSAjMTk2MzQ6IHRpbWUuc3RyZnRpbWUoIiV5Iikgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3Igb24gQUlYIHdoZW4gZ2l2ZW4gYQorICB5ZWFyIGJlZm9yZSAxOTAwLgorCistIEZpeCB0ZXN0LnN1cHBvcnQuYmluZF9wb3J0KCkgdG8gbm90IGNhdXNlIGFuIGVycm9yIHdoZW4gUHl0aG9uIHdhcyBjb21waWxlZAorICBvbiBhIHN5c3RlbSB3aXRoIFNPX1JFVVNFUE9SVCBkZWZpbmVkIGluIHRoZSBoZWFkZXJzIGJ1dCBydW4gb24gYSBzeXN0ZW0KKyAgd2l0aCBhbiBPUyBrZXJuZWwgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHRoYXQgcmVhc29uYWJseSBuZXcgc29ja2V0IG9wdGlvbi4KKworLSBGaXggY29tcGlsYXRpb24gZXJyb3IgdW5kZXIgZ2NjIG9mIHRoZSBjdHlwZXMgbW9kdWxlIGJ1bmRsZWQgbGliZmZpIGZvciBhcm0uCisKKy0gSXNzdWUgIzE5NDQ4OiBBZGQgcHJpdmF0ZSBBUEkgdG8gU1NMIG1vZHVsZSB0byBsb29rdXAgQVNOLjEgb2JqZWN0cyBieSBPSUQsCisgIE5JRCwgc2hvcnQgbmFtZSBhbmQgbG9uZyBuYW1lLgorCistIElzc3VlICMxOTI4MjogZGJtLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuIChJbml0YWwKKyAgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQorCistIElzc3VlICM4MzExOiBBZGRlZCBzdXBwb3J0IGZvciB3cml0aW5nIGFueSBieXRlcy1saWtlIG9iamVjdHMgaW4gdGhlIGFpZmMsCisgIHN1bmF1LCBhbmQgd2F2ZSBtb2R1bGVzLgorCistIElzc3VlICM1MjAyOiBBZGRlZCBzdXBwb3J0IGZvciB1bnNlZWthYmxlIGZpbGVzIGluIHRoZSB3YXZlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTk1NDQgYW5kIElzc3VlICMxMTgwOiBSZXN0b3JlIGdsb2JhbCBvcHRpb24gdG8gaWdub3JlCisgIH4vLnB5ZGlzdHV0aWxzLmNmZyBpbiBEaXN0dXRpbHMsIGFjY2lkZW50YWxseSByZW1vdmVkIGluIGJhY2tvdXQgb2YKKyAgZGlzdHV0aWxzMiBjaGFuZ2VzLgorCistIElzc3VlICMxOTUyMzogQ2xvc2VkIEZpbGVIYW5kbGVyIGxlYWsgd2hpY2ggb2NjdXJyZWQgd2hlbiBkZWxheSB3YXMgc2V0LgorCistIElzc3VlICMxOTU0NCBhbmQgIzY1MTY6IFJlc3RvcmUgc3VwcG9ydCBmb3IgLS11c2VyIGFuZCAtLWdyb3VwIHBhcmFtZXRlcnMgdG8KKyAgc2Rpc3QgY29tbWFuZCBhY2NpZGVudGFsbHkgcm9sbGVkIGJhY2sgYXMgcGFydCBvZiB0aGUgZGlzdHV0aWxzMiByb2xsYmFjay4KKworLSBJc3N1ZSAjMTM2NzQ6IFByZXZlbnRlZCB0aW1lLnN0cmZ0aW1lIGZyb20gY3Jhc2hpbmcgb24gV2luZG93cyB3aGVuIGdpdmVuCisgIGEgeWVhciBiZWZvcmUgMTkwMCBhbmQgYSBmb3JtYXQgb2YgJXkuCisKKy0gSXNzdWUgIzE5NDA2OiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZW5zdXJlcGlwIG1vZHVsZSAocGFydCBvZiBQRVAgNDUzKS4KKyAgUGF0Y2ggYnkgRG9uYWxkIFN0dWZmdCBhbmQgTmljayBDb2dobGFuLgorCistIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzYyODY6IFJlc3RvcmUgdXNlIG9mIHVybGxpYiBvdmVyIGh0dHAgYWxsb3dpbmcgdXNlCisgIG9mIGh0dHBfcHJveHkgZm9yIERpc3R1dGlscyB1cGxvYWQgY29tbWFuZCwgYSBmZWF0dXJlIGFjY2lkZW50YWxseSBsb3N0CisgIGluIHRoZSByb2xsYmFjayBvZiBkaXN0dXRpbHMyLgorCistIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzc0NTc6IFJlc3RvcmUgdGhlIHJlYWRfcGtnX2ZpbGUgbWV0aG9kIHRvCisgIGRpc3R1dGlscy5kaXN0LkRpc3RyaWJ1dGlvbk1ldGFkYXRhIGFjY2lkZW50YWxseSByZW1vdmVkIGluIHRoZSB1bmRvIG9mCisgIGRpc3R1dGlsczIuCisKKy0gSXNzdWUgIzE2Njg1OiBBZGRlZCBzdXBwb3J0IGZvciBhbnkgYnl0ZXMtbGlrZSBvYmplY3RzIGluIHRoZSBhdWRpb29wIG1vZHVsZS4KKyAgUmVtb3ZlZCBzdXBwb3J0IGZvciBzdHJpbmdzLgorCistIElzc3VlICM3MTcxOiBBZGQgV2luZG93cyBpbXBsZW1lbnRhdGlvbiBvZiBgYGluZXRfbnRvcGBgIGFuZCBgYGluZXRfcHRvbmBgCisgIHRvIHNvY2tldCBtb2R1bGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxOTI2MTogQWRkZWQgc3VwcG9ydCBmb3Igd3JpdGluZyAyNC1iaXQgc2FtcGxlcyBpbiB0aGUgc3VuYXUgbW9kdWxlLgorCistIElzc3VlICMxMDk3Nzk3OiBBZGRlZCBDUDI3MyBlbmNvZGluZywgdXNlZCBvbiBJQk0gbWFpbmZyYW1lcyBpbgorICBHZXJtYW55IGFuZCBBdXN0cmlhLiAgTWFwcGluZyBwcm92aWRlZCBieSBNaWNoYWVsIEJpZXJlbmZlbGQuCisKKy0gSXNzdWUgIzE1NzUwMjA6IEZpeGVkIHN1cHBvcnQgb2YgMjQtYml0IHdhdmUgZmlsZXMgb24gYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE5Mzc4OiBGaXhlZCBhIG51bWJlciBvZiBjYXNlcyBpbiB0aGUgZGlzIG1vZHVsZSB3aGVyZSB0aGUgbmV3CisgICJmaWxlIiBwYXJhbWV0ZXIgd2FzIG5vdCBiZWluZyBob25vdXJlZCBjb3JyZWN0bHkKKworLSBJc3N1ZSAjMTkzNzg6IFJlbW92ZWQgdGhlICJkaXMuQnl0ZWNvZGUuc2hvd19pbmZvIiBtZXRob2QKKworLSBJc3N1ZSAjMTkzNzg6IFJlbmFtZWQgdGhlICJkaXMuQnl0ZWNvZGUuZGlzcGxheV9jb2RlIiBtZXRob2QgdG8KKyAgImRpcy5CeXRlY29kZS5kaXMiIGFuZCBjb252ZXJ0ZWQgaXQgdG8gcmV0dXJuaW5nIGEgc3RyaW5nIHJhdGhlciB0aGFuCisgIHByaW50aW5nIG91dHB1dC4KKworLSBJc3N1ZSAjMTkzNzg6IHRoZSAibGluZV9vZmZzZXQiIHBhcmFtZXRlciBpbiB0aGUgbmV3ICJkaXMuZ2V0X2luc3RydWN0aW9ucyIKKyAgQVBJIGhhcyBiZWVuIHJlbmFtZWQgdG8gImZpcnN0X2xpbmUiIChhbmQgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHVzYWdlCisgIGNoYW5nZWQgYWNjb3JkaW5nbHkpLiBUaGlzIHNob3VsZCByZWR1Y2UgY29uZnVzaW9uIHdpdGggdGhlIG1vcmUgY29tbW9uIHVzZQorICBvZiAib2Zmc2V0IiBpbiB0aGUgZGlzIGRvY3MgdG8gcmVmZXIgdG8gYnl0ZWNvZGUgb2Zmc2V0cy4KKworLSBJc3N1ZSAjMTg2Nzg6IENvcnJlY3RlZCBzcHdkIHN0cnVjdCBtZW1iZXIgbmFtZXMgaW4gc3B3ZCBtb2R1bGU6CisgIHNwX25hbS0+c3BfbmFtcCwgYW5kIHNwX3B3ZC0+c3BfcHdkcC4gIFRoZSBvbGQgbmFtZXMgYXJlIGtlcHQgYXMgZXh0cmEKKyAgc3RydWN0c2VxIG1lbWJlcnMsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCistIElzc3VlICM2MTU3OiBGaXhlZCB0a2ludGVyLlRleHQuZGVidWcoKS4gIHRraW50ZXIuVGV4dC5iYm94KCkgbm93IHJhaXNlcworICBUeXBlRXJyb3IgaW5zdGVhZCBvZiBUY2xFcnJvciBvbiB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLiAgT3JpZ2luYWwgcGF0Y2gKKyAgYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzEwMTk3OiBSZXdvcmsgc3VicHJvY2Vzcy5nZXRbc3RhdHVzXW91dHB1dCB0byB1c2Ugc3VicHJvY2VzcworICBmdW5jdGlvbmFsaXR5IGFuZCB0aHVzIHRvIHdvcmsgb24gV2luZG93cy4gUGF0Y2ggYnkgTmljayBDb2dobGFuCisKKy0gSXNzdWUgIzYxNjA6IFRoZSBiYm94KCkgbWV0aG9kIG9mIHRraW50ZXIuU3BpbmJveCBub3cgcmV0dXJucyBhIHR1cGxlIG9mCisgIGludGVnZXJzIGluc3RlYWQgb2YgYSBzdHJpbmcuICBCYXNlZCBvbiBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTk0MDM6IGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0IGlzIG5vdyByZWVudHJhbnQKKworLSBJc3N1ZSAjMTkyODY6IERpcmVjdG9yaWVzIGluIGBgcGFja2FnZV9kYXRhYGAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bworICB0aGUgZmlsZWxpc3QsIHByZXZlbnRpbmcgZmFpbHVyZSBvdXRsaW5lZCBpbiB0aGUgdGlja2V0LgorCistIElzc3VlICMxOTQ4MDogSFRNTFBhcnNlciBub3cgYWNjZXB0cyBhbGwgdmFsaWQgc3RhcnQtdGFnIG5hbWVzIGFzIGRlZmluZWQKKyAgYnkgdGhlIEhUTUw1IHN0YW5kYXJkLgorCistIElzc3VlICMxNTExNDogVGhlIGh0bWwucGFyc2VyIG1vZHVsZSBub3cgcmFpc2VzIGEgRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gdGhlCisgIHN0cmljdCBhcmd1bWVudCBvZiBIVE1MUGFyc2VyIG9yIHRoZSBIVE1MUGFyc2VyLmVycm9yIG1ldGhvZCBhcmUgdXNlZC4KKworLSBJc3N1ZSAjMTk0MTA6IFVuZG8gdGhlIHNwZWNpYWwtY2FzaW5nIHJlbW92YWwgb2YgJycgZm9yCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci4KKworLSBJc3N1ZSAjMTk0MjQ6IEZpeCB0aGUgd2FybmluZ3MgbW9kdWxlIHRvIGFjY2VwdCBmaWxlbmFtZSBjb250YWluaW5nIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxOTQzNTogRml4IGRpcmVjdG9yeSB0cmF2ZXJzYWwgYXR0YWNrIG9uIENHSUh0dHBSZXF1ZXN0SGFuZGxlci4KKworLSBJc3N1ZSAjMTkyMjc6IFJlbW92ZSBwdGhyZWFkX2F0Zm9yaygpIGhhbmRsZXIuIFRoZSBoYW5kbGVyIHdhcyBhZGRlZCB0bworICBzb2x2ZSAjMTg3NDcgYnV0IGhhcyBjYXVzZWQgaXNzdWVzLgorCistIElzc3VlICMxOTQyMDogRml4IHJlZmVyZW5jZSBsZWFrIGluIG1vZHVsZSBpbml0YWxpemF0aW9uIGNvZGUgb2YKKyAgX2hhc2hvcGVuc3NsLmMKKworLSBJc3N1ZSAjMTkzMjk6IE9wdGltaXplZCBjb21waWxpbmcgY2hhcnNldHMgaW4gcmVndWxhciBleHByZXNzaW9ucy4KIAogLSBJc3N1ZSAjMTkyMjc6IFRyeSB0byBmaXggZGVhZGxvY2tzIGNhdXNlZCBieSByZS1zZWVkaW5nIHRoZW4gT3BlblNTTAogICBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igb24gZm9yaygpLgpAQCAtMjcyLDEyICs0MjAsMzAgQEAKIC0gSXNzdWUgIzE2MDM5OiBDVkUtMjAxMy0xNzUyOiBDaGFuZ2UgdXNlIG9mIHJlYWRsaW5lIGluIGltYXBsaWIgbW9kdWxlIHRvIGxpbWl0CiAgIGxpbmUgbGVuZ3RoLiAgUGF0Y2ggYnkgRW1pbCBMaW5kLgogCistIElzc3VlICMxOTMzMDogdGhlIHVubmVjZXNzYXJ5IHdyYXBwZXIgZnVuY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlCisgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgbmV3IGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0IGFuZAorICBjb250ZXh0bGliLnN1cHByZXNzIGNvbnRleHQgbWFuYWdlcnMsIHdoaWNoIGFsc28gZW5zdXJlcyB0aGV5IHByb3ZpZGUKKyAgcmVhc29uYWJsZSBoZWxwKCkgb3V0cHV0IG9uIGluc3RhbmNlcworCiAtIElzc3VlICMxOTM5MzogRml4IHN5bXRhYmxlLnN5bXRhYmxlIGZ1bmN0aW9uIHRvIG5vdCBiZSBjb25mdXNlZCB3aGVuIHRoZXJlIGFyZQogICBmdW5jdGlvbnMgb3IgY2xhc3NlcyBuYW1lZCAidG9wIi4KIAorLSBJc3N1ZSAjMTg2ODU6IFJlc3RvcmUgcmUgcGVyZm9ybWFuY2UgdG8gcHJlLVBFUCAzOTMgbGV2ZWxzLgorCiAtIElzc3VlICMxOTMzOTogdGVsbmV0bGliIG1vZHVsZSBpcyBub3cgdXNpbmcgdGltZS5tb25vdG9uaWMoKSB3aGVuIGF2YWlsYWJsZQogICB0byBjb21wdXRlIHRpbWVvdXQuCiAKKy0gSXNzdWUgIzE5Mzk5OiBmaXggc3BvcmFkaWMgdGVzdF9zdWJwcm9jZXNzIGZhaWx1cmUuCisKKy0gSXNzdWUgIzEzMjM0OiBGaXggb3MubGlzdGRpciB0byB3b3JrIHdpdGggZXh0ZW5kZWQgcGF0aHMgb24gV2luZG93cy4KKyAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gSXNzdWUgIzE5Mzc1OiBUaGUgc2l0ZSBtb2R1bGUgYWRkaW5nIGEgInNpdGUtcHl0aG9uIiBkaXJlY3RvcnkgdG8gc3lzLnBhdGgsCisgIGlmIGl0IGV4aXN0cywgaXMgbm93IGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE5Mzc5OiBMYXppbHkgaW1wb3J0IGxpbmVjYWNoZSBpbiB0aGUgd2FybmluZ3MgbW9kdWxlLCB0byBtYWtlCisgIHN0YXJ0dXAgd2l0aCB3YXJuaW5ncyBmYXN0ZXIgdW50aWwgYSB3YXJuaW5nIGdldHMgcHJpbnRlZC4KKwogLSBJc3N1ZSAjMTkyODg6IEZpeGVkIHRoZSAiaW4iIG9wZXJhdG9yIG9mIGRibS5nbnUgZGF0YWJhc2VzIGZvciBzdHJpbmcKICAgYXJndW1lbnQuICBPcmlnaW5hbCBwYXRjaCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcy4KIApAQCAtMjg2LDUyICs0NTIsMjk5IEBACiAKIC0gSXNzdWUgIzE5MzI3OiBGaXhlZCB0aGUgd29ya2luZyBvZiByZWd1bGFyIGV4cHJlc3Npb25zIHdpdGggdG9vIGJpZyBjaGFyc2V0LgogCistIElzc3VlICMxNzQwMDogTmV3ICdpc19nbG9iYWwnIGF0dHJpYnV0ZSBmb3IgaXBhZGRyZXNzIHRvIHRlbGwgaWYgYW4gYWRkcmVzcworICBpcyBhbGxvY2F0ZWQgYnkgSUFOQSBmb3IgZ2xvYmFsIG9yIHByaXZhdGUgbmV0d29ya3MuCisKIC0gSXNzdWUgIzE5MzUwOiBJbmNyZWFzaW5nIHRoZSB0ZXN0IGNvdmVyYWdlIG9mIG1hY3VybDJwYXRoLiBQYXRjaCBieSBDb2xpbgogICBXaWxsaWFtcy4KIAorLSBJc3N1ZSAjMTkzNjU6IE9wdGltaXplZCB0aGUgcGFyc2luZyBvZiBsb25nIHJlcGxhY2VtZW50IHN0cmluZyBpbiByZS5zdWIqKCkKKyAgZnVuY3Rpb25zLgorCiAtIElzc3VlICMxOTM1MjogRml4IHVuaXR0ZXN0IGRpc2NvdmVyeSB3aGVuIGEgbW9kdWxlIGNhbiBiZSByZWFjaGVkCiAgIHRocm91Z2ggc2V2ZXJhbCBwYXRocyAoZS5nLiB1bmRlciBEZWJpYW4vVWJ1bnR1IHdpdGggdmlydHVhbGVudikuCiAKIC0gSXNzdWUgIzE1MjA3OiBGaXggbWltZXR5cGVzIHRvIHJlYWQgZnJvbSBjb3JyZWN0IHBhcnQgb2YgV2luZG93cyByZWdpc3RyeQogICBPcmlnaW5hbCBwYXRjaCBieSBEYXZlIENoYW1iZXJzCiAKKy0gSXNzdWUgIzE2NTk1OiBBZGQgcHJsaW1pdCgpIHRvIHJlc291cmNlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkzMjQ6IEV4cG9zZSBMaW51eC1zcGVjaWZpYyBjb25zdGFudHMgaW4gcmVzb3VyY2UgbW9kdWxlLgorCistIElzc3VlICMxNzQwMDogaXBhZGRyZXNzIHNob3VsZCBtYWtlIGl0IGVhc3kgdG8gaWRlbnRpZnkgcmZjNjU5OCBhZGRyZXNzZXMuCisKKy0gTG9hZCBTU0wncyBlcnJvciBzdHJpbmdzIGluIGhhc2hsaWIuCisKKy0gSXNzdWUgIzE4NTI3OiBVcGdyYWRlIGludGVybmFsIGNvcHkgb2YgemxpYiB0byAxLjIuOC4KKworLSBJc3N1ZSAjMTkyNzQ6IEFkZCBhIGZpbHRlcmZ1bmMgcGFyYW1ldGVyIHRvIFB5WmlwRmlsZS53cml0ZXB5LgorCiAtIElzc3VlICM4OTY0OiBmaXggcGxhdGZvcm0uX3N5c192ZXJzaW9uIHRvIGhhbmRsZSBJcm9uUHl0aG9uIDIuNisuCiAgIFBhdGNoIGJ5IE1hcnRpbiBNYXR1c2lhay4KIAorLSBJc3N1ZSAjMTk0MTM6IFJlc3RvcmUgcHJlLTMuMyByZWxvYWQoKSBzZW1hbnRpY3Mgb2YgcmUtZmluZGluZyBtb2R1bGVzLgorCistIElzc3VlICMxODk1ODogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBqc29uLmxvYWQocykgd2hpbGUgcGFzc2luZyBhIHN0cmluZworICB0aGF0IHN0YXJ0cyB3aXRoIGEgVVRGLTggQk9NLgorCistIElzc3VlICMxOTMwNzogSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBqc29uLmxvYWQocykgd2hpbGUgcGFzc2luZyBvYmplY3RzCisgIG9mIHRoZSB3cm9uZyB0eXBlLgorCiAtIElzc3VlICMxNjAzODogQ1ZFLTIwMTMtMTc1MjogZnRwbGliOiBMaW1pdCBhbW91bnQgb2YgZGF0YSByZWFkIGJ5CiAgIGxpbWl0aW5nIHRoZSBjYWxsIHRvIHJlYWRsaW5lKCkuICBPcmlnaW5hbCBwYXRjaCBieSBNaWNoYcWCCiAgIEphc3RyesSZYnNraSBhbmQgR2lhbXBhb2xvIFJvZG9sYS4KIAorLSBJc3N1ZSAjMTcwODc6IEltcHJvdmVkIHRoZSByZXByIGZvciByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2ggb2JqZWN0cy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE5NjY0OiB0ZXN0X3VzZXJkaWN0J3MgcmVwciB0ZXN0IG5vIGxvbmdlciBkZXBlbmRzIG9uIHRoZSBvcmRlcgorICBvZiBkaWN0IGVsZW1lbnRzLgorCistIElzc3VlICMxOTQ0MDogQ2xlYW4gdXAgdGVzdF9jYXBpIGJ5IHJlbW92aW5nIGFuIHVubmVjZXNzYXJ5IF9fZnV0dXJlX18KKyAgaW1wb3J0LCBjb252ZXJ0aW5nIGZyb20gdGVzdF9tYWluIHRvIHVuaXR0ZXN0Lm1haW4sIGFuZCBydW5uaW5nIHRoZQorICBfdGVzdGNhcGkgbW9kdWxlIHRlc3RzIGFzIHN1YlRlc3RzIG9mIGEgdW5pdHRlc3QgVGVzdENhc2UgbWV0aG9kLgorCistIElzc3VlICMxOTM3ODogdGhlIG1haW4gZGlzIG1vZHVsZSB0ZXN0cyBhcmUgbm93IHJ1biB3aXRoIGJvdGggc3Rkb3V0CisgIHJlZGlyZWN0aW9uICphbmQqIHBhc3NpbmcgYW4gZXhwbGljaXQgZmlsZSBwYXJhbWV0ZXIKKworLSBJc3N1ZSAjMTkzNzg6IHJlbW92ZWQgdGhlIG5vdC1hY3R1YWxseS1oZWxwZnVsIGFzc2VydEluc3RydWN0aW9uTWF0Y2hlcworICBhbmQgYXNzZXJ0Qnl0ZWNvZGVFeGFjdGx5TWF0Y2hlcyBoZWxwZXJzIGZyb20gYnl0ZWNvZGVfaGVscGVyCisKKy0gSXNzdWUgIzE4NzAyOiBBbGwgc2tpcHBlZCB0ZXN0cyBub3cgcmVwb3J0ZWQgYXMgc2tpcHBlZC4KKworLSBJc3N1ZSAjMTk0Mzk6IGludGVycHJldGVyIGVtYmVkZGluZyB0ZXN0cyBhcmUgbm93IGV4ZWN1dGVkIG9uIFdpbmRvd3MKKyAgKFBhdGNoIGJ5IFphY2hhcnkgV2FyZSkKKworLSBJc3N1ZSAjMTkwODU6IEFkZGVkIGJhc2ljIHRlc3RzIGZvciBhbGwgdGtpbnRlciB3aWRnZXQgb3B0aW9ucy4KKworLSBJc3N1ZSAxOTM4NDogRml4IHRlc3RfcHlfY29tcGlsZSBmb3Igcm9vdCB1c2VyLCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTgzMjY6IENsYXJpZnkgdGhhdCBsaXN0LnNvcnQncyBhcmd1bWVudHMgYXJlIGtleXdvcmQtb25seS4gIEFsc28sCisgIGF0dGVtcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpbiB0aGUgZ2xvc3NhcnkgYnkgbm90IHNheWluZyB0aGVyZSBhcmUKKyAgZGlmZmVyZW50ICJ0eXBlcyIgb2YgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTkzNTg6ICJtYWtlIGNsaW5pYyIgbm93IHJ1bnMgdGhlIEFyZ3VtZW50IENsaW5pYyBwcmVwcm9jZXNzb3IKKyAgb3ZlciBhbGwgQ1B5dGhvbiBzb3VyY2UgZmlsZXMuCisKKy0gVXBkYXRlIFNRTGl0ZSB0byAzLjguMSwgeHogdG8gNS4wLjUsIGFuZCBUY2wvVGsgdG8gOC42LjEgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTY2MzI6IEVuYWJsZSBERVAgYW5kIEFTTFIgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTc3OTE6IERyb3AgUFJFRklYIGFuZCBFWEVDX1BSRUZJWCBkZWZpbml0aW9ucyBmcm9tIFBDL3B5Y29uZmlnLmgKKworLSBBZGQgd29ya2Fyb3VuZCBmb3IgVlMgMjAxMCBubWFrZSBjbGVhbiBpc3N1ZS4gVlMgMjAxMCBkb2Vzbid0IHNldCB1cCBQQVRICisgIGZvciBubWFrZS5leGUgY29ycmVjdGx5LgorCistIElzc3VlICMxOTU1MDogSW1wbGVtZW50IFdpbmRvd3MgaW5zdGFsbGVyIGNoYW5nZXMgb2YgUEVQIDQ1MyAoZW5zdXJlcGlwKS4KKworLSBJc3N1ZSAjMTk1MjA6IEZpeCBjb21waWxlciB3YXJuaW5nIGluIHRoZSBfc2hhMyBtb2R1bGUgb24gMzJiaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCisgIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KKworLSBJc3N1ZSAjMTU3OTI6IENvcnJlY3QgYnVpbGQgb3B0aW9ucyBvbiBXaW42NC4gUGF0Y2ggYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMxOTM3MzogQXBwbHkgdXBzdHJlYW0gY2hhbmdlIHRvIFRrIDguNS4xNSBmaXhpbmcgT1MgWCAxMC45CisgIHNjcmVlbiByZWZyZXNoIHByb2JsZW0gZm9yIE9TIFggaW5zdGFsbGVyIGJ1aWxkLgorCistIElzc3VlICMxOTY0OTogT24gT1MgWCwgdGhlIHNhbWUgc2V0IG9mIGZpbGUgbmFtZXMgYXJlIG5vdyBpbnN0YWxsZWQKKyAgaW4gYmluIGRpcmVjdG9yaWVzIGZvciBhbGwgY29uZmlndXJhdGlvbnM6IG5vbi1mcmFtZXdvcmsgdnMgZnJhbWV3b3JrLAorICBhbmQgc2luZ2xlIGFyY2ggdnMgdW5pdmVyc2FsIGJ1aWxkcy4gIHB5dGhvbngueS0zMiBpcyBub3cgYWx3YXlzCisgIGluc3RhbGxlZCBmb3IgNjQtYml0LzMyLWJpdCB1bml2ZXJzYWwgYnVpbGRzLiAgVGhlIG9ic29sZXRlIGFuZAorICB1bmRvY3VtZW50ZWQgcHl0aG9udyogc3ltbGlua3MgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQgYW55d2hlcmUuCisKKy0gSXNzdWUgIzE5NTUzOiBQRVAgNDUzIC0gIm1ha2UgaW5zdGFsbCIgYW5kICJtYWtlIGFsdGluc3RhbGwiIG5vdyBpbnN0YWxsIG9yCisgIHVwZ3JhZGUgcGlwIGJ5IGRlZmF1bHQsIHVzaW5nIHRoZSBidW5kbGVkIHBpcCBwcm92aWRlZCBieSB0aGUgbmV3IGVuc3VyZXBpcAorICBtb2R1bGUuICBBIG5ldyBjb25maWd1cmUgb3B0aW9uLCAtLXdpdGgtZW5zdXJlcGlwWz11cGdyYWRlfGluc3RhbGx8bm9dLCBpcworICBhdmFpbGFibGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZW5zdXJlcGlwICItLXVwZ3JhZGUiIG9wdGlvbi4gIFRoZSBvcHRpb24KKyAgY2FuIGFsc28gYmUgc2V0IHdpdGggIm1ha2UgW2FsdF1pbnN0YWxsIEVOU1VSRVBJUD1bdXBncmFkZXxpbnN0YWxsXG5vXSIuCisKKy0gSXNzdWUgIzE5NTUxOiBQRVAgNDUzIC0gdGhlIE9TIFggaW5zdGFsbGVyIG5vdyBpbnN0YWxscyBwaXAgYnkgZGVmYXVsdC4KKworLSBVcGRhdGUgdGhpcmQtcGFydHkgbGlicmFyaWVzIGZvciBPUyBYIGluc3RhbGxlcnM6CisgICAgeHogNS4wLjMgLT4gNS4wLjUKKyAgICBTUUxpdGUgMy43LjEzIC0+IDMuOC4xCisKKy0gSXNzdWUgIzE1NjYzOiBSZXZlcnQgT1MgWCBpbnN0YWxsZXIgYnVpbHQtaW4gVGNsL1RrIHN1cHBvcnQgZm9yIDMuNC4wYjEuCisgIFNvbWUgdGhpcmQtcGFydHkgcHJvamVjdHMsIHN1Y2ggYXMgTWF0cGxvdGxpYiBhbmQgUElML1BpbGxvdywKKyAgZGVwZW5kZWQgb24gYmVpbmcgYWJsZSB0byBidWlsZCB3aXRoIFRjbCBhbmQgVGsgZnJhbWV3b3JrcyBpbgorICAvTGlicmFyeS9GcmFtZXdvcmtzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTk3MzA6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgYWxsIHRoZSBleGlzdGluZyBQeUFyZworICAiZm9ybWF0IHVuaXRzIiBhcyBsZWdhY3kgY29udmVydGVycywgYXMgd2VsbCBhcyB0d28gbmV3IGZlYXR1cmVzOgorICAic2VsZiBjb252ZXJ0ZXJzIiBhbmQgdGhlICJ2ZXJzaW9uIiBkaXJlY3RpdmUuCisKKy0gSXNzdWUgIzE5NTUyOiBweXZlbnYgbm93IGJvb3RzdHJhcHMgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMgYnkKKyAgZGVmYXVsdCAocGFzcyAtLXdpdGhvdXQtcGlwIHRvIHJlcXVlc3QgdGhlIG9sZCBiZWhhdmlvdXIpCisKKy0gSXNzdWUgIzE5MzkwOiBBcmd1bWVudCBDbGluaWMgbm8gbG9uZ2VyIGFjY2VwdHMgbWFsZm9ybWVkIFB5dGhvbgorICBhbmQgQyBpZHMuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMTAtMjAKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE5MzAxOiBHaXZlIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBsaWNpdGx5IG1hcmtlZCBnbG9iYWwgYQorICBnbG9iYWwgcXVhbG5hbWUuCisKKy0gSXNzdWUgIzE5Mjc5OiBVVEYtNyBkZWNvZGVyIG5vIGxvbmdlciBwcm9kdWNlcyBpbGxlZ2FsIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE2NjEyOiBBZGQgIkFyZ3VtZW50IENsaW5pYyIsIGEgY29tcGlsZS10aW1lIHByZXByb2Nlc3NvciBmb3IKKyAgQyBmaWxlcyB0byBnZW5lcmF0ZSBhcmd1bWVudCBwYXJzaW5nIGNvZGUuICAoU2VlIFBFUCA0MzYuKQorCistIElzc3VlICMxODgxMDogU2hpZnQgc3RhdCBjYWxscyBpbiBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgc3VjaCB0aGF0CisgIHRoZSBjb2RlIGlzIG9wdGltaXN0aWMgdGhhdCBpZiBzb21ldGhpbmcgZXhpc3RzIGluIGEgZGlyZWN0b3J5IG5hbWVkIGV4YWN0bHkKKyAgbGlrZSB0aGUgcG9zc2libGUgcGFja2FnZSBiZWluZyBzZWFyY2hlZCBmb3IgdGhhdCBpdCdzIGluIGFjdHVhbGl0eSBhCisgIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTg0MTY6IGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlciBub3cgdHJlYXRzICcnIGFzIHRoZSBjd2QgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBubyBsb25nZXIgc3BlY2lhbC1jYXNlcyAnJyB0byAnLicuIFRoaXMgbGVhZHMKKyAgdG8gbW9kdWxlcyBpbXBvcnRlZCBmcm9tIGN3ZCB0byBub3cgcG9zc2VzcyBhbiBhYnNvbHV0ZSBmaWxlIHBhdGggZm9yCisgIF9fZmlsZV9fICh0aGlzIGRvZXMgbm90IGFmZmVjdCBtb2R1bGVzIHNwZWNpZmllZCBieSBwYXRoIG9uIHRoZSBDTEkgYnV0IGl0CisgIGRvZXMgYWZmZWN0IC1tL3J1bnB5KS4gSXQgYWxzbyBhbGxvd3MgRmlsZUZpbmRlciB0byBiZSBtb3JlIGNvbnNpc3RlbnQgYnkgbm90CisgIGhhdmluZyBhbiBlZGdlIGNhc2UuCisKKy0gSXNzdWUgIzQ1NTU6IEFsbCBleHBvcnRlZCBDIHN5bWJvbHMgYXJlIG5vdyBwcmVmaXhlZCB3aXRoIGVpdGhlcgorICAiUHkiIG9yICJfUHkiLgorCistIElzc3VlICMxOTIxOTogU3BlZWQgdXAgbWFyc2hhbC5sb2FkcygpLCBhbmQgbWFrZSBweWMgZmlsZXMgc2xpZ2h0bHkKKyAgKDUlIHRvIDEwJSkgc21hbGxlci4KKworLSBJc3N1ZSAjMTkyMjE6IFVwZ3JhZGUgVW5pY29kZSBkYXRhYmFzZSB0byB2ZXJzaW9uIDYuMy4wLgorCistIElzc3VlICMxNjc0MjogVGhlIHJlc3VsdCBvZiB0aGUgQyBjYWxsYmFjayBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIG11c3QKKyAgbm93IGJlIGEgc3RyaW5nIGFsbG9jYXRlZCBieSBQeU1lbV9SYXdNYWxsb2MoKSBvciBQeU1lbV9SYXdSZWFsbG9jKCkgKG9yIE5VTEwKKyAgaWYgYW4gZXJyb3Igb2NjdXJyZWQpLCBpbnN0ZWFkIG9mIGEgc3RyaW5nIGFsbG9jYXRlZCBieSBQeU1lbV9NYWxsb2MoKSBvcgorICBQeU1lbV9SZWFsbG9jKCkuCisKKy0gSXNzdWUgIzE5MTk5OiBSZW1vdmUgYGBQeVRocmVhZFN0YXRlLnRpY2tfY291bnRlcmBgIGZpZWxkCisKKy0gRml4IG1hY3JvIGV4cGFuc2lvbiBvZiBfUHlFcnJfT0NDVVJSRUQoKSwgYW5kIG1ha2Ugc3VyZSB0byB1c2UgaXQgaW4gYXQKKyAgbGVhc3Qgb25lIHBsYWNlIHNvIGFzIHRvIGF2b2lkIHJlZ3Jlc3Npb25zLgorCistIElzc3VlICMxOTA4NzogSW1wcm92ZSBieXRlYXJyYXkgYWxsb2NhdGlvbiBpbiBvcmRlciB0byBhbGxvdyBjaGVhcCBwb3BwaW5nCisgIG9mIGRhdGEgYXQgdGhlIGZyb250IChzbGljZSBkZWxldGlvbikuCisKKy0gSXNzdWUgIzE5MDE0OiBtZW1vcnl2aWV3LmNhc3QoKSBpcyBub3cgYWxsb3dlZCBvbiB6ZXJvLWxlbmd0aCB2aWV3cy4KKworLSBJc3N1ZSAjMTg2OTA6IG1lbW9yeXZpZXcgaXMgbm93IGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoCisgIGNvbGxlY3Rpb25zLmFiYy5TZXF1ZW5jZQorCistIElzc3VlICMxOTA3ODogbWVtb3J5dmlldyBub3cgY29ycmVjdGx5IHN1cHBvcnRzIHRoZSByZXZlcnNlZCBidWlsdGluCisgIChQYXRjaCBieSBDbGF1ZGl1IFBvcGEpCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTc0NTc6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vdyB3b3JrcyB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcy4KKyAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCiAtIElzc3VlICMxODIzNTogRml4IHRoZSBzeXNjb25maWcgdmFyaWFibGVzIExEU0hBUkVEIGFuZCBCTERTSEFSRUQgdW5kZXIgQUlYLgogICBQYXRjaCBieSBEYXZpZCBFZGVsc29obi4KIAorLSBJc3N1ZSAjMTg2MDY6IEFkZCB0aGUgbmV3ICJzdGF0aXN0aWNzIiBtb2R1bGUgKFBFUCA0NTApLiAgQ29udHJpYnV0ZWQKKyAgYnkgU3RldmVuIEQnQXByYW5vLgorCistIElzc3VlICMxMjg2NjogVGhlIGF1ZGlvb3AgbW9kdWxlIG5vdyBzdXBwb3J0cyAyNC1iaXQgc2FtcGxlcy4KKworLSBJc3N1ZSAjMTkyNTQ6IFByb3ZpZGUgYW4gb3B0aW1pemVkIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwYmtkZjJfaG1hYy4KKworLSBJc3N1ZXMgIzE5MjAxLCAjMTkyMjIsICMxOTIyMzogQWRkICJ4IiBtb2RlIChleGNsdXNpdmUgY3JlYXRpb24pIGluIG9wZW5pbmcKKyAgZmlsZSB0byBiejIsIGd6aXAgYW5kIGx6bWEgbW9kdWxlcy4gUGF0Y2hlcyBieSBUaW0gSGVhbmV5IGFuZCBWYWpyYXNreSBLb2suCisKKy0gRml4IGEgcmVmZXJlbmNlIGNvdW50IGxlYWsgaW4gX3NyZS4KKworLSBJc3N1ZSAjMTkyNjI6IEluaXRpYWwgY2hlY2sgaW4gb2YgdGhlICdhc3luY2lvJyBwYWNrYWdlIChhLmsuYS4gVHVsaXAsCisgIGEuay5hLiBQRVAgMzE1NikuICBUaGVyZSBhcmUgbm8gZG9jcyB5ZXQsIGFuZCB0aGUgUEVQIGlzIHNsaWdodGx5CisgIG91dCBvZiBkYXRlIHdpdGggdGhlIGNvZGUuICBUaGlzIG1vZHVsZSB3aWxsIGhhdmUgKnByb3Zpc2lvbmFsKiBzdGF0dXMKKyAgaW4gUHl0aG9uIDMuNC4KKwogLSBJc3N1ZSAjMTkyNzY6IEZpeGVkIHRoZSB3YXZlIG1vZHVsZSBvbiA2NC1iaXQgYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCiAKKy0gSXNzdWUgIzE5MjY2OiBSZW5hbWUgdGhlIG5ldy1pbi0zLjQgYGBjb250ZXh0bGliLmlnbm9yZWBgIGNvbnRleHQgbWFuYWdlcgorICB0byBgYGNvbnRleHRsaWIuc3VwcHJlc3NgYCBpbiBvcmRlciB0byBiZSBtb3JlIGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZworICBkZXNjcmlwdGlvbnMgb2YgdGhhdCBvcGVyYXRpb24gZWxzZXdoZXJlIGluIHRoZSBsYW5ndWFnZSBhbmQgc3RhbmRhcmQKKyAgbGlicmFyeSBkb2N1bWVudGF0aW9uIChQYXRjaCBieSBaZXJvIFBpcmFldXMpLgorCistIElzc3VlICMxODg5MTogQ29tcGxldGVkIHRoZSBuZXcgZW1haWwgcGFja2FnZSAocHJvdmlzaW9uYWwpIEFQSSBhZGRpdGlvbnMKKyAgYnkgYWRkaW5nIG5ldyBjbGFzc2VzIEVtYWlsTWVzc2FnZSwgTUlNRVBhcnQsIGFuZCBDb250ZW50TWFuYWdlci4KKworLSBJc3N1ZSAjMTgyODE6IFVudXNlZCBzdGF0IGNvbnN0YW50cyByZW1vdmVkIGZyb20gYHRhcmZpbGVgLgorCistIElzc3VlICMxODQ2ODogVGhlIHJlLnNwbGl0LCByZS5maW5kYWxsLCBhbmQgcmUuc3ViIGZ1bmN0aW9ucyBhbmQgdGhlIGdyb3VwKCkKKyAgYW5kIGdyb3VwcygpIG1ldGhvZHMgb2YgbWF0Y2ggb2JqZWN0IG5vdyBhbHdheXMgcmV0dXJuIGEgc3RyaW5nIG9yIGEgYnl0ZXMKKyAgb2JqZWN0LgorCistIElzc3VlICMxODcyNTogVGhlIHRleHR3cmFwIG1vZHVsZSBub3cgc3VwcG9ydHMgdHJ1bmNhdGluZyBtdWx0aWxpbmUgdGV4dC4KKwogLSBJc3N1ZSAjMTg3NzY6IGF0ZXhpdCBjYWxsYmFja3Mgbm93IGRpc3BsYXkgdGhlaXIgZnVsbCB0cmFjZWJhY2sgd2hlbiB0aGV5CiAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAogLSBJc3N1ZSAjMTc4Mjc6IEFkZCB0aGUgbWlzc2luZyBkb2N1bWVudGF0aW9uIGZvciBgYGNvZGVjcy5lbmNvZGVgYCBhbmQKICAgYGBjb2RlY3MuZGVjb2RlYGAuCiAKLS0gSXNzdWUgIzE4NDU4OiBQcmV2ZW50IGNyYXNoZXMgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBsaWJlZGl0LiAgSXRzIHJlYWRsaW5lCi0gIGVtdWxhdGlvbiBoYXMgY2hhbmdlZCBmcm9tIDAtYmFzZWQgaW5kZXhpbmcgdG8gMS1iYXNlZCBsaWtlIGdudSByZWFkbGluZS4KLSAgT3JpZ2luYWwgcGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuLgorLSBJc3N1ZSAjMTkyMTg6IFJlbmFtZSBjb2xsZWN0aW9ucy5hYmMgdG8gX2NvbGxlY3Rpb25zX2FiYyBpbiBvcmRlciB0bworICBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KIAotLSBJc3N1ZSAjMTg5MTk6IElmIHRoZSBjbG9zZSgpIG1ldGhvZCBvZiBhIHdyaXRlciBpbiB0aGUgc3VuYXUgb3Igd2F2ZSBtb2R1bGUKLSAgZmFpbGVkLCBzZWNvbmQgaW52b2NhdGlvbiBvZiBjbG9zZSgpIGFuZCBkZXN0cnVjdG9yIG5vIG1vcmUgcmFpc2UgYW4KLSAgZXhjZXB0aW9uLgorLSBJc3N1ZSAjMTg1ODI6IEFkZCAncGJrZGYyX2htYWMnIHRvIHRoZSBoYXNobGliIG1vZHVsZS4gSXQgaW1wbGVtZW50cyBQS0NTIzUKKyAgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zIHdpdGggSE1BQyBhcyBwc2V1ZG9yYW5kb20gZnVuY3Rpb24uCiAKIC0gSXNzdWUgIzE5MTMxOiBUaGUgYWlmYyBtb2R1bGUgbm93IGNvcnJlY3RseSByZWFkcyBhbmQgd3JpdGVzIHNhbXB3aWR0aCBvZgogICBjb21wcmVzc2VkIHN0cmVhbXMuCiAKKy0gSXNzdWUgIzE5MjA5OiBSZW1vdmUgaW1wb3J0IG9mIGNvcHlyZWcgZnJvbSB0aGUgb3MgbW9kdWxlIHRvIHNwZWVkIHVwCisgIGludGVycHJldGVyIHN0YXJ0dXAuIHN0YXRfcmVzdWx0IGFuZCBzdGF0dmZzX3Jlc3VsdCBhcmUgbm93IGhhcmQtY29kZWQgdG8KKyAgcmVzaWRlIGluIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzE5MjA1OiBEb24ndCBpbXBvcnQgdGhlICdyZScgbW9kdWxlIGluIHNpdGUgYW5kIHN5c2NvbmZpZyBtb2R1bGUgdG8KKyAgdG8gc3BlZWQgdXAgaW50ZXJwcmV0ZXIgc3RhcnQuCisKKy0gSXNzdWUgIzk1NDg6IEFkZCBhIG1pbmltYWwgIl9ib290bG9jYWxlIiBtb2R1bGUgdGhhdCBpcyBpbXBvcnRlZCBieSB0aGUKKyAgX2lvIG1vZHVsZSBpbnN0ZWFkIG9mIHRoZSBmdWxsIGxvY2FsZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NzY0OiByZW1vdmUgdGhlICdwcmludCcgYWxpYXMgZm9yIHRoZSBQREIgJ3AnIGNvbW1hbmQgc28gdGhhdCBpdCBubworICBsb25nZXIgc2hhZG93cyB0aGUgcHJpbnQgZnVuY3Rpb24uCisKIC0gSXNzdWUgIzE5MTU4OiAgYSByYXJlIHJhY2UgaW4gQm91bmRlZFNlbWFwaG9yZSBjb3VsZCBhbGxvdyAucmVsZWFzZSgpIHRvbwogICBvZnRlbi4KIAorLSBJc3N1ZSAjMTU4MDU6IEFkZCBjb250ZXh0bGliLnJlZGlyZWN0X3N0ZG91dCgpLgorCistIElzc3VlICMxODcxNjogRGVwcmVjYXRlIHRoZSBmb3JtYXR0ZXIgbW9kdWxlLgorCistIElzc3VlICMxMDcxMjogMnRvMyBoYXMgYSBuZXcgImFzc2VydHMiIGZpeGVyIHRoYXQgcmVwbGFjZXMgZGVwcmVjYXRlZCBuYW1lcworICBvZiB1bml0dGVzdCBtZXRob2RzIChlLmcuIGZhaWxVbmxlc3NFcXVhbCAtPiBhc3NlcnRFcXVhbCkuCisKIC0gSXNzdWUgIzE4MDM3OiAydG8zIG5vdyBlc2NhcGVzICdcdScgYW5kICdcVScgaW4gbmF0aXZlIHN0cmluZ3MuCiAKKy0gSXNzdWUgIzE3ODM5OiBiYXNlNjQuZGVjb2RlYnl0ZXMgYW5kIGJhc2U2NC5lbmNvZGVieXRlcyBub3cgYWNjZXB0IGFueQorICBvYmplY3QgdGhhdCBleHBvcnRzIGEgMSBkaW1lbnNpb25hbCBhcnJheSBvZiBieXRlcyAodGhpcyBtZWFucyB0aGUgc2FtZQorICBpcyBub3cgYWxzbyB0cnVlIGZvciBiYXNlNjRfY29kZWMpCisKKy0gSXNzdWUgIzE5MTMyOiBUaGUgcHByaW50IG1vZHVsZSBub3cgc3VwcG9ydHMgY29tcGFjdCBtb2RlLgorCiAtIElzc3VlICMxOTEzNzogVGhlIHBwcmludCBtb2R1bGUgbm93IGNvcnJlY3RseSBmb3JtYXRzIGluc3RhbmNlcyBvZiBzZXQgYW5kCiAgIGZyb3plbnNldCBzdWJjbGFzc2VzLgogCistIElzc3VlICMxMDA0MjogZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nIG5vdyBjb3JyZWN0bHkgaGFuZGxlcworICBOb3RJbXBsZW1lbnRlZCBiZWluZyByZXR1cm5lZCBieSB0aGUgdW5kZXJseWluZyBjb21wYXJpc29uIGZ1bmN0aW9uIChQYXRjaAorICBieSBLYXRpZSBNaWxsZXIpCisKIC0gSXNzdWUgIzE5MDkyOiBjb250ZXh0bGliLkV4aXRTdGFjayBub3cgY29ycmVjdGx5IHJlcmFpc2VzIGV4Y2VwdGlvbnMKICAgZnJvbSB0aGUgX19leGl0X18gY2FsbGJhY2tzIG9mIGlubmVyIGNvbnRleHQgbWFuYWdlcnMgKFBhdGNoIGJ5IEhydm9qZQogICBOaWvFoWnEhykKQEAgLTMzOSwxNSArNzUyLDg5IEBACiAtIElzc3VlICMxMjY0MTogQXZvaWQgcGFzc2luZyAiLW1uby1jeWd3aW4iIHRvIHRoZSBtaW5ndzMyIGNvbXBpbGVyLCBleGNlcHQKICAgd2hlbiBuZWNlc3NhcnkuICBQYXRjaCBieSBPc2NhciBCZW5qYW1pbi4KIAotLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KLSAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4gIEFuZCB0aGUgZmFsbGJhY2sgcGF0aCBkaWQKLSAgbm90IGltcGxlbWVudCB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdGhlIHB1cmUgcHl0aG9uIGNvZGUuCistIElzc3VlICM1ODQ1OiBJbiBzaXRlLnB5LCBvbmx5IGxvYWQgcmVhZGxpbmUgaGlzdG9yeSBmcm9tIH4vLnB5dGhvbl9oaXN0b3J5CisgIGlmIG5vIGhpc3RvcnkgaGFzIGJlZW4gcmVhZCBhbHJlYWR5LiAgVGhpcyBhdm9pZHMgZG91YmxlIHdyaXRlcyB0byB0aGUKKyAgaGlzdG9yeSBmaWxlIGF0IHNodXRkb3duLgogCiAtIFByb3Blcmx5IGluaXRpYWxpemUgYWxsIGZpZWxkcyBvZiBhIFNTTCBvYmplY3QgYWZ0ZXIgYWxsb2NhdGlvbi4KIAorLSBJc3N1ZSAjMTkwOTU6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIHRoZQorICBTU0wgaGFuZHNoYWtlIGhhc24ndCBiZWVuIGRvbmUuCisKIC0gSXNzdWUgIzQzNjY6IEZpeCBidWlsZGluZyBleHRlbnNpb25zIG9uIGFsbCBwbGF0Zm9ybXMgd2hlbiAtLWVuYWJsZS1zaGFyZWQKICAgaXMgdXNlZC4KIAorLSBJc3N1ZSAjMTkwMzA6IEZpeGVkIGBpbnNwZWN0LmdldG1lbWJlcnNgIGFuZCBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRyc2AKKyAgdG8gYXR0ZW1wdCBhY3RpdmF0aW5nIGRlc2NyaXB0b3JzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gYSBfX2RpY3RfXyBzZWFyY2gKKyAgZm9yIGZhdWx0eSBkZXNjcmlwdG9ycy4gIGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzYCBubyBsb25nZXIgcmV0dXJucworICBBdHRyaWJ1dGVzIHdob3NlIGhvbWUgY2xhc3MgaXMgTm9uZS4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE3NzI2NzM6IFRoZSB0eXBlIG9mIGBjaGFyKmAgYXJndW1lbnRzIG5vdyBjaGFuZ2VkIHRvIGBjb25zdCBjaGFyKmAuCisKKy0gSXNzdWUgIzE2MTI5OiBBZGRlZCBhIGBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nYCBwcmUtaW5pdGlhbGl6YXRpb24gQVBJCisgIHRvIGFsbG93IGVtYmVkZGluZyBhcHBsaWNhdGlvbnMgbGlrZSBCbGVuZGVyIHRvIGZvcmNlIGEgcGFydGljdWxhcgorICBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlciBmb3IgdGhlIHN0YW5kYXJkIElPIHN0cmVhbXMgKGluaXRpYWwgcGF0Y2ggYnkKKyAgQmFzdGllbiBNb250YWduZSkKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE5Mjc1OiBGaXggdGVzdF9zaXRlIG9uIEFNRDY0IFNub3cgTGVvcGFyZAorCistIElzc3VlICMxNDQwNzogRml4IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfY29uY3VycmVudF9mdXR1cmVzLgorCistIElzc3VlICMxODkxOTogVW5pZmllZCBhbmQgZXh0ZW5kZWQgdGVzdHMgZm9yIGF1ZGlvIG1vZHVsZXM6IGFpZmMsIHN1bmF1IGFuZAorICB3YXZlLgorCistIElzc3VlICMxODcxNDogQWRkZWQgdGVzdHMgZm9yIGBgcGRiLmZpbmRfZnVuY3Rpb24oKWBgLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjMTg5NzI6IE1vZGVybml6ZSBlbWFpbCBleGFtcGxlcyBhbmQgdXNlIHRoZSBhcmdwYXJzZSBtb2R1bGUgaW4gdGhlbS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE5MTMwOiBDb3JyZWN0IFBDYnVpbGQvcmVhZG1lLnR4dCwgUHl0aG9uIDMuMyBhbmQgMy40IHJlcXVpcmUgVlMgMjAxMC4KKworLSBJc3N1ZSAjMTU2NjM6IFVwZGF0ZSBPUyBYIDEwLjYrIGluc3RhbGxlciB0byB1c2UgVGNsL1RrIDguNS4xNS4KKworLSBJc3N1ZSAjMTQ0OTk6IEZpeCBzZXZlcmFsIHByb2JsZW1zIHdpdGggT1MgWCB1bml2ZXJzYWwgYnVpbGQgc3VwcG9ydDoKKyAgICAxLiBwcGMgYXJjaCBkZXRlY3Rpb24gZm9yIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIGJyb2tlIHdpdGggWGNvZGUgNQorICAgIDIuIHBwYyBhcmNoIGRldGVjdGlvbiBpbiBjb25maWd1cmUgZGlkIG5vdCB3b3JrIG9uIE9TIFggMTAuNAorICAgIDMuIC1zeXNyb290IGFuZCAtYXJjaCBmbGFncyB3ZXJlIHVubmVjZXNzYXJpbHkgZHVwbGljYXRlZAorICAgIDQuIHRoZXJlIHdhcyBubyBvYnZpb3VzIHdheSB0byBjb25maWd1cmUgYW4gaW50ZWwtMzIgb25seSBidWlsZC4KKworLSBJc3N1ZSAjMTkwMTk6IENoYW5nZSB0aGUgT1MgWCBpbnN0YWxsZXIgYnVpbGQgc2NyaXB0IHRvIHVzZSBDRkxBR1MgaW5zdGVhZAorICBvZiBPUFQgZm9yIHNwZWNpYWwgYnVpbGQgb3B0aW9ucy4gIEJ5IHNldHRpbmcgT1BULCBzb21lIGNvbXBpbGVyLXNwZWNpZmljCisgIG9wdGlvbnMgbGlrZSAtZndyYXB2IHdlcmUgb3ZlcnJpZGRlbiBhbmQgdGh1cyBub3QgdXNlZCwgd2hpY2ggY291bGQgcmVzdWx0CisgIGluIGJyb2tlbiBpbnRlcnByZXRlcnMgd2hlbiBidWlsZGluZyB3aXRoIGNsYW5nLgorCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCBBbHBoYSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDEzLTA5LTI5CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxODgxODogVGhlICJlbmNvZGluZ25hbWUiIHBhcnQgb2YgUFlUSE9OSU9FTkNPRElORyBpcyBub3cgb3B0aW9uYWwuCisKKy0gSXNzdWUgIzE5MDk4OiBQcmV2ZW50IG92ZXJmbG93IGluIHRoZSBjb21waWxlciB3aGVuIHRoZSByZWN1cnNpb24gbGltaXQgaXMgc2V0CisgIGFic3VyZGx5IGhpZ2guCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg5Mjk6IGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKClgIG5vdyBjb3JyZWN0bHkgZmluZHMgY2xhc3MKKyAgYXR0cmlidXRlcyByZXR1cm5lZCBieSBgZGlyKClgIHRoYXQgYXJlIGxvY2F0ZWQgaW4gdGhlIG1ldGFjbGFzcy4KKwogLSBJc3N1ZSAjMTg5NTA6IEZpeCBtaXNjZWxsYW5lb3VzIGJ1Z3MgaW4gdGhlIHN1bmF1IG1vZHVsZS4KICAgQXVfcmVhZC5yZWFkZnJhbWVzKCkgbm93IHVwZGF0ZXMgY3VycmVudCBmaWxlIHBvc2l0aW9uIGFuZCByZWFkcyBjb3JyZWN0CiAgIG51bWJlciBvZiBmcmFtZXMgZnJvbSBtdWx0aWNoYW5uZWwgc3RyZWFtLiAgQXVfd3JpdGUud3JpdGVmcmFtZXNyYXcoKSBub3cKQEAgLTM1NSwxNyArODQyLDI5IEBACiAgIGludGVnZXIgKGFzIGluIFB5dGhvbiAyKS4gIEF1X3JlYWQgYW5kIEF1X3dyaXRlIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBmaWxlCiAgIG9iamVjdCBpZiBzdGFydCBmaWxlIHBvc2l0aW9uIGlzIG5vdCBhIHplcm8uCiAKKy0gSXNzdWUgIzE4NTk0OiBUaGUgZmFzdCBwYXRoIGZvciBjb2xsZWN0aW9ucy5Db3VudGVyKCkgd2FzIG5ldmVyIHRha2VuCisgIGR1ZSB0byBhbiBvdmVyLXJlc3RyaWN0aXZlIHR5cGUgY2hlY2suCisKIC0gSXNzdWUgIzE5MDUzOiBaaXBFeHRGaWxlLnJlYWQxKCkgd2l0aCBub24temVybyBhcmd1bWVudCBubyBtb3JlIHJldHVybnMgZW1wdHkKICAgYnl0ZXMgdW50aWwgZW5kIG9mIGRhdGEuCiAKLS0gSXNzdWUgIzE5MDI4OiBGaXhlZCB0a2ludGVyLlRrYXBwLm1lcmdlKCkgZm9yIG5vbi1zdHJpbmcgYXJndW1lbnRzLgorLSBsb2dnaW5nOiBhZGRlZCBzdXBwb3J0IGZvciBVbml4IGRvbWFpbiBzb2NrZXRzIHRvIFNvY2tldEhhbmRsZXIgYW5kCisgIERhdGFncmFtSGFuZGxlci4KKworLSBJc3N1ZSAjMTg5OTY6IFRlc3RDYXNlLmFzc2VydEVxdWFsKCkgbm93IG1vcmUgY2xldmVybHkgc2hvcnRlbiBkaWZmZXJpbmcKKyAgc3RyaW5ncyBpbiBlcnJvciByZXBvcnQuCisKKy0gSXNzdWUgIzE5MDM0OiByZXByKCkgZm9yIHRraW50ZXIuVGNsX09iaiBub3cgZXhwb3NlcyBzdHJpbmcgcmVwZXJlc2VudGF0aW9uLgorCistIElzc3VlICMxODk3ODogYGB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0YGAgbm93IGFsbG93cyB0aGUgbWV0aG9kIHRvIGJlCisgIGluZGljYXRlZCBvbiB0aGUgY2xhc3MgYW5kIG5vIGxvbmdlciBzZXRzIGl0IHRvIE5vbmUgaW4gYGBfX2luaXRfX2BgLgorCistIElzc3VlICMxODYyNjogdGhlIGluc3BlY3QgbW9kdWxlIG5vdyBvZmZlcnMgYSBiYXNpYyBjb21tYW5kIGxpbmUKKyAgaW50cm9zcGVjdGlvbiBpbnRlcmZhY2UgKEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhKQogCiAtIElzc3VlICMzMDE1OiBGaXhlZCB0a2ludGVyIHdpdGggd2FudG9iamVjdD1GYWxzZS4gIEFueSBUY2wgY29tbWFuZCBjYWxsCiAgIHJldHVybmVkIGVtcHR5IHN0cmluZy4KIAotLSBJc3N1ZSAjMTgwNTA6IEZpeGVkIGFuIGluY29tcGF0aWJpbGl0eSBvZiB0aGUgcmUgbW9kdWxlIHdpdGggUHl0aG9uIDMuMy4wCi0gIGJpbmFyaWVzLgotCiAtIElzc3VlICMxOTAzNzogVGhlIG1haWxib3ggbW9kdWxlIG5vdyBtYWtlcyBhbGwgY2hhbmdlcyB0byBtYWlsZGlyIGZpbGVzCiAgIGJlZm9yZSBtb3ZpbmcgdGhlbSBpbnRvIHBsYWNlLCB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2l0aCBvdGhlciBwcm9ncmFtcwogICB0aGF0IG1heSBiZSBhY2Nlc3NpbmcgdGhlIG1haWxkaXIgZGlyZWN0b3J5LgpAQCAtMzc5LDYgKzg3OCwxMiBAQAogLSBJc3N1ZSAjMTg4NzM6IFRoZSB0b2tlbml6ZSBtb2R1bGUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nCiAgIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KIAorLSBJc3N1ZSAjMTc3NjQ6IEVuYWJsZSBodHRwLnNlcnZlciB0byBiaW5kIHRvIGEgdXNlciBzcGVjaWZpZWQgbmV0d29yaworICBpbnRlcmZhY2UuICBQYXRjaCBjb250cmlidXRlZCBieSBNYWx0ZSBTd2FydC4KKworLSBJc3N1ZSAjMTg5Mzc6IEFkZCBhbiBhc3NlcnRMb2dzKCkgY29udGV4dCBtYW5hZ2VyIHRvIHVuaXR0ZXN0LlRlc3RDYXNlCisgIHRvIGVuc3VyZSB0aGF0IGEgYmxvY2sgb2YgY29kZSBlbWl0cyBhIG1lc3NhZ2UgdXNpbmcgdGhlIGxvZ2dpbmcgbW9kdWxlLgorCiAtIElzc3VlICMxNzMyNDogRml4IGh0dHAuc2VydmVyJ3MgcmVxdWVzdCBoYW5kbGluZyBjYXNlIG9uIHRyYWlsaW5nICcvJy4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgVmFqcmFza3kgS29rLgogCkBAIC0zODksMzMgKzg5NCwxNjkgQEAKICAgaWYgYWxsIG5lY2Vzc2FyeSBmdW5jdGlvbnMgYXJlIGFscmVhZHkgZm91bmQgaW4gbGlidXVpZC4KICAgUGF0Y2ggYnkgRXZnZW55IFNvbG9ndWJvdi4KIAorLSBUaGUgOmVudnZhcjpgUFlUSE9ORkFVTFRIQU5ETEVSYCBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3cgb25seSBlbmFibGVzIHRoZQorICBmYXVsdGhhbmRsZXIgbW9kdWxlIGlmIHRoZSB2YXJpYWJsZSBpcyBub24tZW1wdHkuIFNhbWUgYmVoYXZpb3VyIHRoYW4gb3RoZXIKKyAgdmFyaWFibGVzIGxpa2UgOmVudnZhcjpgUFlUSE9ORE9OVFdSSVRFQllURUNPREVgLgorCistIElzc3VlICMxNTY1NTI1OiBOZXcgZnVuY3Rpb24gYGB0cmFjZWJhY2suY2xlYXJfZnJhbWVzYGAgd2lsbCBjbGVhcgorICB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIGFsbCB0aGUgc3RhY2sgZnJhbWVzIHJlZmVyZW5jZWQgYnkgYSB0cmFjZWJhY2sKKyAgb2JqZWN0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg5NTI6IEZpeCByZWdyZXNzaW9uIGluIHN1cHBvcnQgZGF0YSBkb3dubG9hZHMgaW50cm9kdWNlZCB3aGVuCisgIHRlc3Quc3VwcG9ydCB3YXMgY29udmVydGVkIHRvIGEgcGFja2FnZS4gUmVncmVzc2lvbiBub3RpY2VkIGJ5IFphY2hhcnkKKyAgV2FyZS4KKworSURMRQorLS0tLQorCistIElzc3VlICMxODg3MzogSURMRSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50CisgIGxpbmVzLgorCistIElzc3VlICMxODk4ODogVGhlICJUYWIiIGtleSBub3cgd29ya3Mgd2hlbiBhIHdvcmQgaXMgYWxyZWFkeSBhdXRvY29tcGxldGVkLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE3MDAzOiBVbmlmaWVkIHRoZSBzaXplIGFyZ3VtZW50IG5hbWVzIGluIHRoZSBpbyBtb2R1bGUgd2l0aCBjb21tb24KKyAgcHJhY3RpY2UuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxODU5NjogU3VwcG9ydCB0aGUgdXNlIG9mIGFkZHJlc3Mgc2FuaXR5IGNoZWNraW5nIGluIHJlY2VudCB2ZXJzaW9ucworICBvZiBjbGFuZyBhbmQgR0NDIGJ5IGFwcHJvcHJpYXRlbHkgbWFya2luZyBrbm93biBmYWxzZSBhbGFybXMgaW4gdGhlIHNtYWxsCisgIG9iamVjdCBhbGxvY2F0b3IuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IERoaXJ1IEtob2xpYS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4ODczOiAydG8zIGFuZCB0aGUgZmluZG5vY29kaW5nLnB5IHNjcmlwdCBub3cgZGV0ZWN0IFB5dGhvbiBzb3VyY2UKKyAgY29kZSBlbmNvZGluZyBvbmx5IGluIGNvbW1lbnQgbGluZXMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0wOS0wOQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg5NDI6IHN5cy5fZGVidWdtYWxsb2NzdGF0cygpIG91dHB1dCB3YXMgZGFtYWdlZCBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODc4MDogJS1mb3JtYXR0aW5nIG5vdyBwcmludHMgdmFsdWUgaW5zdGVhZCBvZiBzdHIgZm9yCisgIGludCBzdWJjbGFzc2VzIHdoZW4gdXNpbmcgJWQsICVpLCBhbmQgJXUgY29kZXMuCisKKy0gSXNzdWUgIzE4NTcxOiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUEVQIDQ0NjogZmlsZSBkZXNjcmlwdG9ycyBhbmQgZmlsZQorICBoYW5kbGVzIGFyZSBub3cgY3JlYXRlZCBub24taW5oZXJpdGFibGU7IGFkZCBmdW5jdGlvbnMKKyAgb3MuZ2V0L3NldF9pbmhlcml0YWJsZSgpLCBvcy5nZXQvc2V0X2hhbmRsZV9pbmhlcml0YWJsZSgpIGFuZAorICBzb2NrZXQuc29ja2V0LmdldC9zZXRfaW5oZXJpdGFibGUoKS4KKworLSBJc3N1ZSAjMTE2MTk6IFRoZSBwYXJzZXIgYW5kIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvIG5vdCBlbmNvZGUgVW5pY29kZQorICBmaWxlbmFtZXMgYW55bW9yZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODgwODogTm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBub3cgYXV0b21hdGljYWxseSBqb2luZWQgd2hlbgorICBhIHN1Yi1pbnRlcnByZXRlciBpcyBzaHV0ZG93biAoaXQgd291bGQgcHJldmlvdXNseSBkdW1wIGEgZmF0YWwgZXJyb3IpLgorCistIFJlbW92ZSBzdXBwb3J0aW5nIGZvciBjb21waWxpbmcgb24gc3lzdGVtcyB3aXRob3V0IGdldGN3ZCgpLgorCistIElzc3VlICMxODc3NDogUmVtb3ZlIGxhc3QgYml0cyBvZiBHTlUgUFRIIHRocmVhZCBjb2RlIGFuZCB0aHJlYWRfcHRoLmguCisKKy0gSXNzdWUgIzE4NzcxOiBBZGQgb3B0aW1pemF0aW9uIHRvIHNldCBvYmplY3QgbG9va3VwcyB0byByZWR1Y2UgdGhlIGNvc3QKKyAgb2YgaGFzaCBjb2xsaXNpb25zLiAgVGhlIGNvcmUgaWRlYSBpcyB0byBpbnNwZWN0IGEgc2Vjb25kIGtleS9oYXNoIHBhaXIKKyAgZm9yIGVhY2ggY2FjaGUgbGluZSByZXRyaWV2ZWQuCisKKy0gSXNzdWUgIzE2MTA1OiBXaGVuIGEgc2lnbmFsIGhhbmRsZXIgZmFpbHMgdG8gd3JpdGUgdG8gdGhlIGZpbGUgZGVzY3JpcHRvcgorICByZWdpc3RlcmVkIHdpdGggYGBzaWduYWwuc2V0X3dha2V1cF9mZCgpYGAsIHJlcG9ydCBhbiBleGNlcHRpb24gaW5zdGVhZAorICBvZiBpZ25vcmluZyB0aGUgZXJyb3IuCisKKy0gSXNzdWUgIzE4NzIyOiBSZW1vdmUgdXNlcyBvZiB0aGUgInJlZ2lzdGVyIiBrZXl3b3JkIGluIEMgY29kZS4KKworLSBJc3N1ZSAjMTg2Njc6IEFkZCBtaXNzaW5nICJIQVZFX0ZDSE9XTkFUIiBzeW1ib2wgdG8gcG9zaXguX2hhdmVfZnVuY3Rpb25zLgorCistIElzc3VlICMxNjQ5OTogQWRkIGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIGlzb2xhdGVkIG1vZGUuCisKKy0gSXNzdWUgIzE1MzAxOiBQYXJzaW5nIGZkLCB1aWQsIGFuZCBnaWQgcGFyYW1ldGVycyBmb3IgYnVpbHRpbnMKKyAgaW4gTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGlzIG5vdyBmYXIgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzE4MzY4OiBQeU9TX1N0ZGlvUmVhZGxpbmUoKSBubyBsb25nZXIgbGVha3MgbWVtb3J5IHdoZW4gcmVhbGxvYygpCisgIGZhaWwuCisKKy0gSXNzdWUgIzE3OTM0OiBBZGQgYSBjbGVhcigpIG1ldGhvZCB0byBmcmFtZSBvYmplY3RzLCB0byBoZWxwIGNsZWFuIHVwCisgIGV4cGVuc2l2ZSBkZXRhaWxzIChsb2NhbCB2YXJpYWJsZXMpIGFuZCBicmVhayByZWZlcmVuY2UgY3ljbGVzLgorCistIElzc3VlICMxODc4MDogJS1mb3JtYXR0aW5nIGNvZGVzICVkLCAlaSwgYW5kICV1IG5vdyB0cmVhdCBpbnQtc3ViY2xhc3NlcworICBhcyBpbnQgKGRpc3BsYXlzIHZhbHVlIG9mIGludC1zdWJjbGFzcyBpbnN0ZWFkIG9mIHN0cihpbnQtc3ViY2xhc3MpICkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTg4MDg6IFRocmVhZC5qb2luKCkgbm93IHdhaXRzIGZvciB0aGUgdW5kZXJseWluZyB0aHJlYWQgc3RhdGUgdG8KKyAgYmUgZGVzdHJveWVkIGJlZm9yZSByZXR1cm5pbmcuICBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgYWJvcnRzIGluCisgIFB5X0VuZEludGVycHJldGVyKCkgd2hlbiBzb21lIG5vbi1kYWVtb24gdGhyZWFkcyBhcmUgc3RpbGwgcnVubmluZy4KKworLSBJc3N1ZSAjMTg0NTg6IFByZXZlbnQgY3Jhc2hlcyB3aXRoIG5ld2VyIHZlcnNpb25zIG9mIGxpYmVkaXQuICBJdHMgcmVhZGxpbmUKKyAgZW11bGF0aW9uIGhhcyBjaGFuZ2VkIGZyb20gMC1iYXNlZCBpbmRleGluZyB0byAxLWJhc2VkIGxpa2UgZ251IHJlYWRsaW5lLgorCistIElzc3VlICMxODg1MjogSGFuZGxlIGNhc2Ugb2YgYGByZWFkbGluZS5fX2RvY19fYGAgYmVpbmcgYGBOb25lYGAgaW4gdGhlIG5ldworICByZWFkbGluZSBhY3RpdmF0aW9uIGNvZGUgaW4gYGBzaXRlLnB5YGAuCisKIC0gSXNzdWUgIzE4NjcyOiBGaXhlZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgUHlfc3NpemVfdCBpbiBkZWJ1Z2dpbmcgb3V0cHV0IGluCiAgIHRoZSBfc3JlIG1vZHVsZS4KIAogLSBJc3N1ZSAjMTg4MzA6IGluc3BlY3QuZ2V0Y2xhc3N0cmVlKCkgbm8gbW9yZSBwcm9kdWNlcyBkdXBsaWNhdGVkIGVudHJpZXMgZXZlbgogICB3aGVuIGlucHV0IGxpc3QgY29udGFpbnMgZHVwbGljYXRlcy4KIAorLSBJc3N1ZSAjMTg4Nzg6IHN1bmF1Lm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuICBCYXNlZCBvbgorICBwYXRjaGVzIGJ5IENsYXVkaXUgUG9wYSBhbmQgUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxODkwOTogRml4IF90a2ludGVyLnRrYXBwLmludGVycGFkZHIoKSBvbiBXaW5kb3dzIDY0LWJpdCwgZG9uJ3QgY2FzdAogICA2NC1iaXQgcG9pbnRlciB0byBsb25nICgzMiBiaXRzKS4KIAogLSBJc3N1ZSAjMTg4NzY6IFRoZSBGaWxlSU8ubW9kZSBhdHRyaWJ1dGUgbm93IGJldHRlciByZWZsZWN0cyB0aGUgYWN0dWFsIG1vZGUKICAgdW5kZXIgd2hpY2ggdGhlIGZpbGUgd2FzIG9wZW5lZC4gIFBhdGNoIGJ5IEVyaWsgQnJheS4KIAorLSBJc3N1ZSAjMTY4NTM6IEFkZCBuZXcgc2VsZWN0b3JzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg4ODI6IEFkZCB0aHJlYWRpbmcubWFpbl90aHJlYWQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTg5MDE6IFRoZSBzdW5hdSBnZXRwYXJhbXMgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbgorICBhIHBsYWluIHR1cGxlLiAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxNzQ4NzogVGhlIHJlc3VsdCBvZiB0aGUgd2F2ZSBnZXRwYXJhbXMgbWV0aG9kIG5vdyBpcyBwaWNrbGVhYmxlIGFnYWluLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE4NzU2OiBvcy51cmFuZG9tKCkgbm93IHVzZXMgYSBsYXppbHktb3BlbmVkIHBlcnNpc3RlbnQgZmlsZQorICBkZXNjcmlwdG9yLCBzbyBhcyB0byBhdm9pZCB1c2luZyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBydW4gaW4KKyAgcGFyYWxsZWwgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgorCiAtIElzc3VlICMxODQxODogQWZ0ZXIgZm9yaygpLCByZWluaXQgYWxsIHRocmVhZHMgc3RhdGVzLCBub3Qgb25seSBhY3RpdmUgb25lcy4KICAgUGF0Y2ggYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMuCiAKKy0gSXNzdWUgIzE3OTc0OiBTd2l0Y2ggdW5pdHRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKKy0gSXNzdWUgIzExNzk4OiBUZXN0U3VpdGUgbm93IGRyb3BzIHJlZmVyZW5jZXMgdG8gb3duIHRlc3RzIGFmdGVyIGV4ZWN1dGlvbi4KKwogLSBJc3N1ZSAjMTY2MTE6IGh0dHAuY29va2llIG5vdyBjb3JyZWN0bHkgcGFyc2VzIHRoZSAnc2VjdXJlJyBhbmQgJ2h0dHBvbmx5JwogICBjb29raWUgZmxhZ3MuCiAKIC0gSXNzdWUgIzExOTczOiBGaXggYSBwcm9ibGVtIGluIGtldmVudC4gVGhlIGZsYWdzIGFuZCBmZmxhZ3MgZmllbGRzIGFyZSBub3cKICAgcHJvcGVybHkgaGFuZGxlZCBhcyB1bnNpZ25lZC4KIAorLSBJc3N1ZSAjMTg4MDc6IGBgcHl2ZW52YGAgbm93IHRha2VzIGEgLS1jb3BpZXMgYXJndW1lbnQgYWxsb3dpbmcgY29waWVzCisgIGluc3RlYWQgb2Ygc3ltbGlua3MgZXZlbiB3aGVyZSBzeW1saW5rcyBhcmUgYXZhaWxhYmxlIGFuZCB0aGUgZGVmYXVsdC4KKworLSBJc3N1ZSAjMTg1Mzg6IGBgcHl0aG9uIC1tIGRpc2BgIG5vdyB1c2VzIGFyZ3BhcnNlIGZvciBhcmd1bWVudCBwcm9jZXNzaW5nLgorICBQYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxODM5NDogQ2xvc2UgY2dpLkZpZWxkU3RvcmFnZSdzIG9wdGlvbmFsIGZpbGUuCisKIC0gSXNzdWUgIzE3NzAyOiBPbiBlcnJvciwgb3MuZW52aXJvbmIgbm93IHJlbW92ZXMgc3VwcHJlc3MgdGhlIGV4Y2VwdCBjb250ZXh0CiAgIHdoZW4gcmFpc2luZyBhIG5ldyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBrZXkuCiAKLS0gSXNzdWUgIzE4NzU1OiBGaXhlZCB0aGUgbG9hZGVyIHVzZWQgaW4gaW1wIHRvIGFsbG93IGdldF9kYXRhKCkgdG8gYmUgY2FsbGVkCi0gIG11bHRpcGxlIHRpbWVzLgotCiAtIElzc3VlICMxNjgwOTogRml4ZWQgc29tZSB0a2ludGVyIGluY29tcGFiaWxpdGllcyB3aXRoIFRjbC9UayA4LjYuCiAKIC0gSXNzdWUgIzE2ODA5OiBUa2ludGVyJ3Mgc3BsaXRsaXN0KCkgYW5kIHNwbGl0KCkgbWV0aG9kcyBub3cgYWNjZXB0IFRjbF9PYmoKQEAgLTQyNCw2ICsxMDY1LDkgQEAKIC0gSXNzdWUgIzE4MzI0OiBzZXRfcGF5bG9hZCBub3cgY29ycmVjdGx5IGhhbmRsZXMgYmluYXJ5IGlucHV0LiAgVGhpcyBhbHNvCiAgIHN1cGVyc2VkZXMgdGhlIHByZXZpb3VzIGZpeGVzIGZvciAjMTQzNjAsICMxNzE3LCBhbmQgIzE2NTY0LgogCistIElzc3VlICMxODc5NDogQWRkIGEgZmlsZW5vKCkgbWV0aG9kIGFuZCBhIGNsb3NlZCBhdHRyaWJ1dGUgdG8gc2VsZWN0LmRldnBvbGwKKyAgb2JqZWN0cy4KKwogLSBJc3N1ZSAjMTcxMTk6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gcHJvY2Vzc2luZyBsYXJnZSBzdHJpbmdzIGFuZCB0dXBsZXMKICAgaW4gdGhlIHRraW50ZXIgbW9kdWxlLgogCkBAIC00MzQsOSArMTA3OCw2IEBACiAtIElzc3VlICM4ODY1OiBDb25jdXJyZW50IGludm9jYXRpb24gb2Ygc2VsZWN0LnBvbGwucG9sbCgpIG5vdyByYWlzZXMgYQogICBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLiAgUGF0Y2ggYnkgQ2hyaXN0aWFuIFNjaHViZXJ0LgogCi0tIElzc3VlICMxMzQ2MTogRml4IGEgY3Jhc2ggaW4gdGhlIFRleHRJT1dyYXBwZXIudGVsbCBtZXRob2Qgb24gNjQtYml0Ci0gIHBsYXRmb3Jtcy4gIFBhdGNoIGJ5IFlvZ2VzaCBDaGF1ZGhhcmkuCi0KIC0gSXNzdWUgIzE4Nzc3OiBUaGUgc3NsIG1vZHVsZSBub3cgdXNlcyB0aGUgbmV3IENSWVBUT19USFJFQURJRCBBUEkgb2YKICAgT3BlblNTTCAxLjAuMCsgaW5zdGVhZCBvZiB0aGUgZGVwcmVjYXRlZCBDUllQVE8gaWQgY2FsbGJhY2sgZnVuY3Rpb24uCiAKQEAgLTQ1MSw1MCArMTA5Miw2MDEgQEAKICAgc3RyaW5ncyBmb3IgYGByZmM4MjJOYW1lYGAgKGVtYWlsKSwgYGBkTlNOYW1lYGAgKEROUykgYW5kCiAgIGBgdW5pZm9ybVJlc291cmNlSWRlbnRpZmllcmBgIChVUkkpLgogCistIElzc3VlICMxODcwMTogUmVtb3ZlIHN1cHBvcnQgb2Ygb2xkIENQeXRob24gdmVyc2lvbnMgKDwzLjApIGZyb20gQyBjb2RlLgorCiAtIElzc3VlICMxODc1NjogSW1wcm92ZSBlcnJvciByZXBvcnRpbmcgaW4gb3MudXJhbmRvbSgpIHdoZW4gdGhlIGZhaWx1cmUKICAgaXMgZHVlIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gL2Rldi91cmFuZG9tIG5vdCBleGlzdGluZyAoZm9yIGV4YW1wbGUsCiAgIGV4aGF1c3RpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBsaW1pdCkuCiAKKy0gSXNzdWUgIzE4NjczOiBBZGQgT19UTVBGSUxFIHRvIG9zIG1vZHVsZS4gT19UTVBGSUxFIHJlcXVpcmVzIExpbnV4IGtlcm5lbAorICAzLjExIG9yIG5ld2VyLiBJdCdzIG9ubHkgZGVmaW5lZCBvbiBzeXN0ZW0gd2l0aCAzLjExIHVhcGkgaGVhZGVycywgdG9vLgorCistIElzc3VlICMxODUzMjogQ2hhbmdlIHRoZSBidWlsdGluIGhhc2ggYWxnb3JpdGhtcycgbmFtZXMgdG8gbG93ZXIgY2FzZSBuYW1lcworICBhcyBwcm9taXNlZCBieSBoYXNobGliJ3MgZG9jdW1lbnRhdGlvbi4KKwogLSBJc3N1ZSAjMTg0MDU6IEltcHJvdmUgdGhlIGVudHJvcHkgb2YgY3J5cHQubWtzYWx0KCkuCiAKKy0gSXNzdWUgIzEyMDE1OiBUaGUgdGVtcGZpbGUgbW9kdWxlIG5vdyB1c2VzIGEgc3VmZml4IG9mIDggcmFuZG9tIGNoYXJhY3RlcnMKKyAgaW5zdGVhZCBvZiA2LCB0byByZWR1Y2UgdGhlIHJpc2sgb2YgZmlsZW5hbWUgY29sbGlzaW9uLiBUaGUgZW50cm9weSB3YXMKKyAgcmVkdWNlZCB3aGVuIHVwcGVyY2FzZSBsZXR0ZXJzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBjaGFyc2V0IHVzZWQgdG8gZ2VuZXJhdGUKKyAgcmFuZG9tIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE4NTg1OiBBZGQgOmZ1bmM6YHRleHR3cmFwLnNob3J0ZW5gIHRvIGNvbGxhcHNlIGFuZCB0cnVuY2F0ZSBhCisgIHBpZWNlIG9mIHRleHQgdG8gYSBnaXZlbiBsZW5ndGguCisKKy0gSXNzdWUgIzE4NTk4OiBUd2VhayBleGNlcHRpb24gbWVzc2FnZSBmb3IgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSB0bworICBpbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSB3aGVuIGEga2V5IGFyZ3VtZW50IGlzIG1pc3NpbmcuCisKIC0gSXNzdWUgIzE5MTUxOiBGaXggZG9jc3RyaW5nIGFuZCB1c2Ugb2YgX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkgdG8KICAgcmVmbGVjdCAyLXR1cGxlcy4KIAorLSBJc3N1ZSAjMTkxNTI6IEFkZCBFeHRlbnNpb25GaWxlTG9hZGVyLmdldF9maWxlbmFtZSgpLgorCiAtIElzc3VlICMxODY3NjogQ2hhbmdlICdwb3NpdGl2ZScgdG8gJ25vbi1uZWdhdGl2ZScgaW4gcXVldWUucHkgcHV0IGFuZCBnZXQKICAgZG9jc3RyaW5ncyBhbmQgVmFsdWVFcnJvciBtZXNzYWdlcy4gUGF0Y2ggYnkgWmhvbmd5dWUgTHVvCiAKLS0gSXNzdWUgIzE4NjgxOiBGaXggYSBOYW1lRXJyb3IgaW4gaW1wLnJlbG9hZCgpIChub3RpY2VkIGJ5IFdlaXpoYW8gTGkpLgorLSBGaXggcmVmY291bnRpbmcgaXNzdWUgd2l0aCBleHRlbnNpb24gdHlwZXMgaW4gdGtpbnRlci4KIAogLSBJc3N1ZSAjODExMjogeGxtcnBjLnNlcnZlcidzIERvY1hNTFJQQ1NlcnZlciBzZXJ2ZXIgbm8gbG9uZ2VyIHJhaXNlcyBhbiBlcnJvcgogICBpZiBtZXRob2RzIGhhdmUgYW5ub3RhdGlvbnM7IGl0IG5vdyBjb3JyZWN0bHkgZGlzcGxheXMgdGhlIGFubm90YXRpb25zLgogCistIElzc3VlICMxODYwMDogQWRkZWQgcG9saWN5IGFyZ3VtZW50IHRvIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmcsCisgIGFuZCBhc19ieXRlcyBhbmQgX19ieXRlc19fIG1ldGhvZHMgdG8gTWVzc2FnZS4KKworLSBJc3N1ZSAjMTg2NzE6IE91dHB1dCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gbG9nZ2luZyBleGNlcHRpb25zIG9jY3VyLgorCistIElzc3VlICMxODYyMTogUHJldmVudCB0aGUgc2l0ZSBtb2R1bGUncyBwYXRjaGVkIGJ1aWx0aW5zIGZyb20ga2VlcGluZworICB0b28gbWFueSByZWZlcmVuY2VzIGFsaXZlIGZvciB0b28gbG9uZy4KKworLSBJc3N1ZSAjNDg4NTogQWRkIHdlYWtyZWYgc3VwcG9ydCB0byBtbWFwIG9iamVjdHMuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzg4NjA6IEZpeGVkIHJvdW5kaW5nIGluIHRpbWVkZWx0YSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KKyAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCisgIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCisKKy0gSXNzdWUgIzE4OTIwOiBhcmdwYXJzZSdzIGRlZmF1bHQgZGVzdGluYXRpb24gZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiAoLXYsCisgIC0tdmVyc2lvbikgaGFzIGFsc28gYmVlbiBjaGFuZ2VkIHRvIHN0ZG91dCwgdG8gbWF0Y2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg2MjM6IEZhY3RvciBvdXQgdGhlIF9TdXBwcmVzc0NvcmVGaWxlcyBjb250ZXh0IG1hbmFnZXIgaW50bworICB0ZXN0LnN1cHBvcnQuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgorCistIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0CisgIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCisgIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCisgIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCisKKy0gSXNzdWUgIzE2Nzk5OiBTd2l0Y2hlZCBmcm9tIGdldG9wdCB0byBhcmdwYXJzZSBzdHlsZSBpbiByZWdydGVzdCdzIGFyZ3VtZW50CisgIHBhcnNpbmcuICBBZGRlZCBtb3JlIHRlc3RzIGZvciByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuCisKKy0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCisgIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCisgIHZlcnNpb25zLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzQzOiBGaXggcmVmZXJlbmNlcyB0byBub24tZXhpc3RhbnQgIlN0cmluZ0lPIiBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NzgzOiBSZW1vdmVkIGV4aXN0aW5nIG1lbnRpb25zIG9mIFB5dGhvbiBsb25nIHR5cGUgaW4gZG9jc3RyaW5ncywKKyAgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbW1lbnRzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTU4NDogUHJvdmlkZSBjb25maWd1cmUgb3B0aW9ucyB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBwYXRocyBmb3IKKyAgVGNsIGFuZCBUayB3aGVuIGJ1aWxkaW5nIF90a2ludGVyLgorCistIElzc3VlICMxNTY2MzogVGNsL1RrIDguNS4xNCBpcyBub3cgaW5jbHVkZWQgd2l0aCB0aGUgT1MgWCAxMC42KyA2NC0vMzItYml0CisgIGluc3RhbGxlci4gIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YKKyAgVGNsL1RrIDguNSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbXMgaW4gdGhlIEFwcGxlLXN1cHBsaWVkIFRjbC9UayA4LjUKKyAgc2hpcHBlZCBpbiBPUyBYIDEwLjYgYW5kIGxhdGVyIHJlbGVhc2VzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg5MjI6IE5vdyBUaGUgTGliL3NtdHBkLnB5IGFuZCBUb29scy9pMThuL21zZ2ZtdC5weSBzY3JpcHRzIHdyaXRlCisgIHRoZWlyIHZlcnNpb24gc3RyaW5ncyB0byBzdGRvdXQsIGFuZCBub3QgdG8gc2RlcnIuCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDgtMDMKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE2NzQxOiBGaXggYW4gZXJyb3IgcmVwb3J0aW5nIGluIGludCgpLgorCistIElzc3VlICMxNzg5OTogRml4IHJhcmUgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gb3MubGlzdGRpcigpLgorCistIElzc3VlICMxMDI0MTogQ2xlYXIgZXh0ZW5zaW9uIG1vZHVsZSBkaWN0IGNvcGllcyBhdCBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgUGF0Y2ggYnkgTmVpbCBTY2hlbWVuYXVlciwgbWluaW1hbGx5IG1vZGlmaWVkLgorCistIElzc3VlICM5MDM1OiBpc21vdW50IG5vdyByZWNvZ25pc2VzIHZvbHVtZXMgbW91bnRlZCBiZWxvdyBhIGRyaXZlIHJvb3QKKyAgb24gV2luZG93cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSXNzdWUgIzE4MjE0OiBJbXByb3ZlIGZpbmFsaXphdGlvbiBvZiBQeXRob24gbW9kdWxlcyB0byBhdm9pZCBzZXR0aW5nCisgIHRoZWlyIGdsb2JhbHMgdG8gTm9uZSwgaW4gbW9zdCBjYXNlcy4KKworLSBJc3N1ZSAjMTgxMTI6IFBFUCA0NDIgaW1wbGVtZW50YXRpb24gKHNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbikuCisKKy0gSXNzdWUgIzE4NTUyOiBDaGVjayByZXR1cm4gdmFsdWUgb2YgUHlBcmVuYV9BZGRQeU9iamVjdCgpIGluCisgIG9iajJhc3Rfb2JqZWN0KCkuCisKKy0gSXNzdWUgIzE4NTYwOiBGaXggcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBzdW0oKS4KKworLSBJc3N1ZSAjMTg1MjA6IEFkZCBhIG5ldyBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigpIGZ1bmN0aW9uLCBzYW1lIHRoYW4KKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgpIGV4Y2VwdCB0aGF0IGl0IGhhcyBhIHJldHVybiB2YWx1ZSAoMCBvbiBzdWNjZXNzLAorICAtMSBvbiBlcnJvcikuCisKKy0gSXNzdWUgIzE1OTA1OiBGaXggdGhlb3JldGljYWwgYnVmZmVyIG92ZXJmbG93IGluIGhhbmRsaW5nIG9mIHN5cy5hcmd2WzBdLAorICBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGlmIHRoZSBvcGVyYXRpb24gc3lzdGVtIGRvZXMgbm90IG9iZXkgTUFYUEFUSExFTi4KKworLSBJc3N1ZSAjMTg0MDg6IEZpeCBtYW55IHZhcmlvdXMgYnVncyBpbiBjb2RlIGhhbmRsaW5nIGVycm9ycywgZXNwZWNpYWxseQorICBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIChNZW1vcnlFcnJvcikuCisKKy0gSXNzdWUgIzE4MzQ0OiBGaXggcG90ZW50aWFsIHJlZi1sZWFrcyBpbiBfYnVmZmVyZWRyZWFkZXJfcmVhZF9hbGwoKS4KKworLSBJc3N1ZSAjMTgzNDI6IFVzZSB0aGUgcmVwciBvZiBhIG1vZHVsZSBuYW1lIHdoZW4gYW4gaW1wb3J0IGZhaWxzIHdoZW4gdXNpbmcKKyAgYGBmcm9tIC4uLiBpbXBvcnQgLi4uYGAuCisKKy0gSXNzdWUgIzE3ODcyOiBGaXggYSBzZWdmYXVsdCBpbiBtYXJzaGFsLmxvYWQoKSB3aGVuIGlucHV0IHN0cmVhbSByZXR1cm5zCisgIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzE4MzM4OiBgcHl0aG9uIC0tdmVyc2lvbmAgbm93IHByaW50cyB2ZXJzaW9uIHN0cmluZyB0byBzdGRvdXQsIGFuZAorICBub3QgdG8gc3RkZXJyLiAgUGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgTWljaGFlbCBEaWNrZW5zLgorCistIElzc3VlICMxODQyNjogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBDIGV4dGVuc2lvbiBpbXBvcnQgd2hlbgorICBQeU1vZHVsZV9HZXREZWYoKSByZXR1cm5zIGFuIGVycm9yLgorCistIElzc3VlICMxNzIwNjogT24gV2luZG93cywgaW5jcmVhc2UgdGhlIHN0YWNrIHNpemUgZnJvbSAyIE1CIHRvIDQuMiBNQiB0byBmaXgKKyAgYSBzdGFjayBvdmVyZmxvdyBpbiB0aGUgbWFyc2hhbCBtb2R1bGUgKGZpeCBhIGNyYXNoIGluIHRlc3RfbWFyc2hhbCkuCisgIFBhdGNoIHdyaXR0ZW4gYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMzMzI5OiBJbXBsZW1lbnQgdGhlIFBFUCA0NDU6IEFkZCBuZXcgQVBJcyB0byBjdXN0b21pemUgUHl0aG9uIG1lbW9yeQorICBhbGxvY2F0b3JzLgorCistIElzc3VlICMxODMyODogUmVvcmRlciBvcHMgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGUqKCkgZnVuY3Rpb25zLiBOb3cgdGhlCisgIHRzdGF0ZSBpcyBmaXJzdCByZW1vdmVkIGZyb20gVExTIGFuZCB0aGVuIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxMzQ4MzogVXNlIFZpcnR1YWxBbGxvYyBpbiBvYm1hbGxvYyBvbiBXaW5kb3dzLgorCistIElzc3VlICMxODE4NDogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBhbmQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgbm93IHJhaXNlCisgIE92ZXJmbG93RXJyb3Igd2hlbiBhbiBhcmd1bWVudCBvZiAlYyBmb3JtYXQgaXMgb3V0IG9mIHJhbmdlLgorCistIElzc3VlICMxODExMTogVGhlIG1pbigpIGFuZCBtYXgoKSBmdW5jdGlvbnMgbm93IHN1cHBvcnQgYSBkZWZhdWx0IGFyZ3VtZW50CisgIHRvIGJlIHJldHVybmVkIGluc3RlYWQgb2YgcmFpc2luZyBhIFZhbHVlRXJyb3Igb24gYW4gZW1wdHkgc2VxdWVuY2UuCisgIChDb250cmlidXRlZCBieSBKdWxpYW4gQmVybWFuLikKKworLSBJc3N1ZSAjMTgxMzc6IERldGVjdCBpbnRlZ2VyIG92ZXJmbG93IG9uIHByZWNpc2lvbiBpbiBmbG9hdC5fX2Zvcm1hdF9fKCkKKyAgYW5kIGNvbXBsZXguX19mb3JtYXRfXygpLgorCistIElzc3VlICMxODE4MzogRml4IHZhcmlvdXMgdW5pY29kZSBvcGVyYXRpb25zIG9uIHN0cmluZ3Mgd2l0aCBsYXJnZSB1bmljb2RlCisgIGNvZGVwb2ludHMuCisKKy0gSXNzdWUgIzE4MTgwOiBGaXggcmVmIGxlYWsgaW4gX1B5SW1wb3J0X0dldER5bkxvYWRXaW5kb3dzKCkuCisKKy0gSXNzdWUgIzE4MDM4OiBTeW50YXhFcnJvciByYWlzZWQgZHVyaW5nIGNvbXBpbGF0aW9uIHNvdXJjZXMgd2l0aCBpbGxlZ2FsCisgIGVuY29kaW5nIG5vdyBhbHdheXMgY29udGFpbnMgYW4gZW5jb2RpbmcgbmFtZS4KKworLSBJc3N1ZSAjMTc5MzE6IFJlc29sdmUgY29uZnVzaW9uIG9uIFdpbmRvd3MgYmV0d2VlbiBwaWRzIGFuZCBwcm9jZXNzCisgIGhhbmRsZXMuCisKKy0gVHdlYWsgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBvciBzaXplIHZhbHVlIGluIGEgYnl0ZWNvZGUKKyAgZmlsZSBpcyB0cnVuY2F0ZWQuCisKKy0gSXNzdWUgIzE3OTMyOiBGaXggYW4gaW50ZWdlciBvdmVyZmxvdyBpc3N1ZSBvbiBXaW5kb3dzIDY0LWJpdCBpbiBpdGVyYXRvcnM6CisgIGNoYW5nZSB0aGUgQyB0eXBlIG9mIHNlcWl0ZXJvYmplY3QuaXRfaW5kZXggZnJvbSBsb25nIHRvIFB5X3NzaXplX3QuCisKKy0gSXNzdWUgIzE4MDY1OiBEb24ndCBzZXQgX19wYXRoX18gdG8gdGhlIHBhY2thZ2UgbmFtZSBmb3IgZnJvemVuIHBhY2thZ2VzLgorCistIElzc3VlICMxODA4ODogV2hlbiByZWxvYWRpbmcgYSBtb2R1bGUsIHVuY29uZGl0aW9uYWxseSByZXNldCBhbGwgcmVsZXZhbnQKKyAgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlIChlLmcuIF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywgX19maWxlX18sCisgIF9fY2FjaGVkX18pLgorCistIElzc3VlICMxNzkzNzogVHJ5IGhhcmRlciB0byBjb2xsZWN0IGN5Y2xpYyBnYXJiYWdlIGF0IHNodXRkb3duLgorCistIElzc3VlICMxMjM3MDogUHJldmVudCBjbGFzcyBib2RpZXMgZnJvbSBpbnRlcmZlcmluZyB3aXRoIHRoZSBfX2NsYXNzX18KKyAgY2xvc3VyZS4KKworLSBJc3N1ZSAjMTc2NDQ6IEZpeCBhIGNyYXNoIGluIHN0ci5mb3JtYXQgd2hlbiBjdXJseSBicmFjZXMgYXJlIHVzZWQgaW4gc3F1YXJlCisgIGJyYWNrZXRzLgorCistIElzc3VlICMxNzIzNzogRml4IGNyYXNoIGluIHRoZSBBU0NJSSBkZWNvZGVyIG9uIG02OGsuCisKKy0gSXNzdWUgIzE3OTI3OiBGcmFtZSBvYmplY3RzIGtlcHQgYXJndW1lbnRzIGFsaXZlIGlmIHRoZXkgaGFkIGJlZW4KKyAgY29waWVkIGludG8gYSBjZWxsLCBldmVuIGlmIHRoZSBjZWxsIHdhcyBjbGVhcmVkLgorCistIElzc3VlICMxNTQ1NDYzOiBBdCBzaHV0ZG93biwgZGVmZXIgZmluYWxpemF0aW9uIG9mIGNvZGVjIG1vZHVsZXMgc28KKyAgdGhhdCBzdGRlcnIgcmVtYWlucyB1c2FibGUuCisKKy0gSXNzdWUgIzczMzA6IEltcGxlbWVudCB3aWR0aCBhbmQgcHJlY2lzaW9uIChleDogIiU1LjNzIikgZm9yIHRoZSBmb3JtYXQKKyAgc3RyaW5nIG9mIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCkgZnVuY3Rpb24sIG9yaWdpbmFsIHBhdGNoIHdyaXR0ZW4gYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTU0NTQ2MzogR2xvYmFsIHZhcmlhYmxlcyBjYXVnaHQgaW4gcmVmZXJlbmNlIGN5Y2xlcyBhcmUgbm93CisgIGdhcmJhZ2UtY29sbGVjdGVkIGF0IHNodXRkb3duLgorCistIElzc3VlICMxNzA5NDogQ2xlYXIgc3RhbGUgdGhyZWFkIHN0YXRlcyBhZnRlciBmb3JrKCkuICBOb3RlIHRoYXQgdGhpcworICBpcyBhIHBvdGVudGlhbGx5IGRpc3J1cHRpdmUgY2hhbmdlIHNpbmNlIGl0IG1heSByZWxlYXNlIHNvbWUgc3lzdGVtCisgIHJlc291cmNlcyB3aGljaCB3b3VsZCBvdGhlcndpc2UgcmVtYWluIHBlcnBldHVhbGx5IGFsaXZlIChlLmcuIGRhdGFiYXNlCisgIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsIHN0b3JhZ2UpLgorCistIElzc3VlICMxNzQwODogQXZvaWQgdXNpbmcgYW4gb2Jzb2xldGUgaW5zdGFuY2Ugb2YgdGhlIGNvcHlyZWcgbW9kdWxlIHdoZW4KKyAgdGhlIGludGVycHJldGVyIGlzIHNodXRkb3duIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4uCisKKy0gSXNzdWUgIzU4NDU6IEVuYWJsZSB0YWItY29tcGxldGlvbiBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgYnkKKyAgZGVmYXVsdCwgdGhhbmtzIHRvIGEgbmV3IHN5cy5fX2ludGVyYWN0aXZlaG9va19fLgorCistIElzc3VlICMxNzExNSwxNzExNjogTW9kdWxlIGluaXRpYWxpemF0aW9uIG5vdyBpbmNsdWRlcyBzZXR0aW5nIF9fcGFja2FnZV9fIGFuZAorICBfX2xvYWRlcl9fIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworLSBJc3N1ZSAjMTc4NTM6IEVuc3VyZSBsb2NhbHMgb2YgYSBjbGFzcyB0aGF0IHNoYWRvdyBmcmVlIHZhcmlhYmxlcyBhbHdheXMgd2luCisgIG92ZXIgdGhlIGNsb3N1cmVzLgorCistIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKKyAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgorCistIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxODY5ODogRW5zdXJlIGltcG9ydGxpYi5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorCistIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAorICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCisKKy0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KKyAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgorICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KKworLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQorICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCisKKy0gSXNzdWUgIzE3NzIyOiBXaGVuIGxvb2tpbmcgdXAgX19yb3VuZF9fLCByZXNvbHZlIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxNjA2MTogU3BlZWQgdXAgc3RyLnJlcGxhY2UoKSBmb3IgcmVwbGFjaW5nIDEtY2hhcmFjdGVyIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KKyAgbWV0aG9kLgorCistIElzc3VlICMxNzY0MzogQWRkIF9fY2FsbGJhY2tfXyBhdHRyaWJ1dGUgdG8gd2Vha3JlZi5yZWYuCisKKy0gSXNzdWUgIzE2NDQ3OiBGaXhlZCBwb3RlbnRpYWwgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gc2V0dGluZyBfX25hbWVfXyBvbiBhCisgIGNsYXNzLgorCistIElzc3VlICMxNzY2OTogRml4IGNyYXNoIGludm9sdmluZyBmaW5hbGl6YXRpb24gb2YgZ2VuZXJhdG9ycyB1c2luZyB5aWVsZCBmcm9tLgorCistIElzc3VlICMxNDQzOTogUHl0aG9uIG5vdyBwcmludHMgdGhlIHRyYWNlYmFjayBvbiBydW5weSBmYWlsdXJlIGF0IHN0YXJ0dXAuCisKKy0gSXNzdWUgIzE3NDY5OiBGaXggX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpIGFuZCBzeXMuZ2V0YWxsb2NhdGVkYmxvY2tzKCkKKyAgd2hlbiBydW5uaW5nIG9uIHZhbGdyaW5kLgorCistIElzc3VlICMxNzYxOTogTWFrZSBpbnB1dCgpIGNoZWNrIGZvciBDdHJsLUMgY29ycmVjdGx5IG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3MzU3OiBBZGQgbWlzc2luZyB2ZXJib3NpdHkgbWVzc2FnZXMgZm9yIC12Ly12diB0aGF0IHdlcmUgbG9zdCBkdXJpbmcKKyAgdGhlIGltcG9ydGxpYiB0cmFuc2l0aW9uLgorCistIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTczMjM6IFRoZSAiW1ggcmVmcywgWSBibG9ja3NdIiBwcmludGVkIGJ5IGRlYnVnIGJ1aWxkcyBoYXMgYmVlbgorICBkaXNhYmxlZCBieSBkZWZhdWx0LiAgSXQgY2FuIGJlIHJlLWVuYWJsZWQgd2l0aCB0aGUgYC1YIHNob3dyZWZjb3VudGAgb3B0aW9uLgorCistIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgorCistIElzc3VlICMxNzI3NTogQ29ycmVjdGVkIGNsYXNzIG5hbWUgaW4gaW5pdCBlcnJvciBtZXNzYWdlcyBvZiB0aGUgQyB2ZXJzaW9uIG9mCisgIEJ1ZmZlcmVkV3JpdGVyIGFuZCBCdWZmZXJlZFJhbmRvbS4KKworLSBJc3N1ZSAjNzk2MzogRml4ZWQgbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHRoYXQgaXNzdWVkIHdoZW4gb2JqZWN0IGlzCisgIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjODc0NTogU21hbGwgc3BlZWQgdXAgemlwaW1wb3J0IG9uIFdpbmRvd3MuIFBhdGNoIGJ5IENhdGFsaW4gSWFjb2IuCisKKy0gSXNzdWUgIzUzMDg6IFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBtYXJzaGFsbGluZyB0b28gbGFyZ2Ugb2JqZWN0IChhIHNlcXVlbmNlCisgIHdpdGggc2l6ZSA+PSAyKiozMSksIGluc3RlYWQgb2YgcHJvZHVjaW5nIGlsbGVnYWwgbWFyc2hhbCBkYXRhLgorCistIElzc3VlICMxMjk4MzogQnl0ZXMgbGl0ZXJhbHMgd2l0aCBpbnZhbGlkIFx4IGVzY2FwZSBub3cgcmFpc2UgYSBTeW50YXhFcnJvcgorICBhbmQgYSBmdWxsIHRyYWNlYmFjayBpbmNsdWRpbmcgbGluZSBudW1iZXIuCisKKy0gSXNzdWUgIzE2OTY3OiBJbiBmdW5jdGlvbiBkZWZpbml0aW9uLCBldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHRzIGJlZm9yZQorICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE3MTczOiBSZW1vdmUgdXNlcyBvZiBsb2NhbGUtZGVwZW5kZW50IEMgZnVuY3Rpb25zIChpc2FscGhhKCkgZXRjLikKKyAgaW4gdGhlIGludGVycHJldGVyLgorCistIElzc3VlICMxNzEzNzogV2hlbiBhbiBVbmljb2RlIHN0cmluZyBpcyByZXNpemVkLCB0aGUgaW50ZXJuYWwgd2lkZSBjaGFyYWN0ZXIKKyAgc3RyaW5nICh3c3RyKSBmb3JtYXQgaXMgbm93IGNsZWFyZWQuCisKKy0gSXNzdWUgIzE3MDQzOiBUaGUgdW5pY29kZS1pbnRlcm5hbCBkZWNvZGVyIG5vIGxvbmdlciByZWFkIHBhc3QgdGhlIGVuZCBvZgorICBpbnB1dCBidWZmZXIuCisKKy0gSXNzdWUgIzE3MDk4OiBBbGwgbW9kdWxlcyBub3cgaGF2ZSBfX2xvYWRlcl9fIHNldCBldmVuIGlmIHRoZXkgcHJlLWV4aXN0IHRoZQorICBib290c3RyYXBwaW5nIG9mIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTY5Nzk6IEZpeCBlcnJvciBoYW5kbGluZyBidWdzIGluIHRoZSB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBiYXNlIGFyZ3VtZW50IHRvIHRoZSBpbnQgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMKKyAgZmxvYXRzLCBvciBvdGhlciBub24taW50ZWdlciBvYmplY3RzIHdpdGggYW4gX19pbnRfXyBtZXRob2QuICBPYmplY3RzCisgIHdpdGggYW4gX19pbmRleF9fIG1ldGhvZCBhcmUgbm93IGFjY2VwdGVkLgorCistIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscworICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KKworLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQorICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKKyAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgorCistIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgorICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcworICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKKyAgRGF2aWQgUHJpdGNoYXJkLgorCistIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCisgIGNsZWFyZWQuCisKKy0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQorICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCisgIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KKworLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKKyAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCisgIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgorCistIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCisgIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgorCistIElzc3VlICMxMTkzOTogU2V0IHRoZSBzdF9kZXYgYXR0cmlidXRlIG9mIHN0YXRfcmVzdWx0IHRvIGFsbG93IFdpbmRvd3MgdG8KKyAgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG9zLnBhdGguc2FtZWZpbGUvc2FtZW9wZW5maWxlL3NhbWVzdGF0IGltcGxlbWVudGF0aW9ucworICB1c2VkIGJ5IG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBpbnQoKSBjb25zdHJ1Y3RvcidzIHNlY29uZCBhcmd1bWVudCAoYmFzZSkgbm8gbG9uZ2VyCisgIGFjY2VwdHMgbm9uIGludGVnZXIgdmFsdWVzLiAgQ29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvciBpbiBQeXRob24gMi4KKworLSBJc3N1ZSAjMTQ0NzA6IFJlbW92ZSB3OXhwb3BlbiBzdXBwb3J0IHBlciBQRVAgMTEuCisKKy0gSXNzdWUgIzk4NTY6IFJlcGxhY2UgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIHJhaXNpbmcgVHlwZUVycm9yCisgIGluIG9iamVjdC5fX2Zvcm1hdF9fLiBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzE2NTk3OiBJbiBidWZmZXJlZCBhbmQgdGV4dCBJTywgY2FsbCBjbG9zZSgpIG9uIHRoZSB1bmRlcmx5aW5nIHN0cmVhbQorICBpZiBpbnZva2luZyBmbHVzaCgpIGZhaWxzLgorCistIElzc3VlICMxNjcyMjogSW4gdGhlIGJ5dGVzKCkgY29uc3RydWN0b3IsIHRyeSB0byBjYWxsIF9fYnl0ZXNfXyBvbiB0aGUKKyAgYXJndW1lbnQgYmVmb3JlIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTY0MjE6IGxvYWRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBzaGFyZWQgb2JqZWN0IGlzIG5vdworICBoYW5kbGVkIGNvcnJlY3RseSAocHJldmlvdXNseSwgdGhlIGZpcnN0IG1vZHVsZSBsb2FkZWQgZnJvbSB0aGF0IGZpbGUKKyAgd2FzIHNpbGVudGx5IHJldHVybmVkKS4gUGF0Y2ggYnkgVsOhY2xhdiDFoG1pbGF1ZXIuCisKKy0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCisgIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAorICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KKworLSBJc3N1ZSAjMTY0OTU6IFJlbW92ZSBleHRyYW5lb3VzIE5VTEwgZW5jb2RpbmcgY2hlY2sgZnJvbSBieXRlc19kZWNvZGUoKS4KKworLSBJc3N1ZSAjMTY2MTk6IENyZWF0ZSBOYW1lQ29uc3RhbnQgQVNUIGNsYXNzIHRvIHJlcHJlc2VudCBOb25lLCBUcnVlLCBhbmQgRmFsc2UKKyAgbGl0ZXJhbHMuIEFzIGEgcmVzdWx0LCB0aGVzZSBjb25zdGFudHMgYXJlIG5ldmVyIGxvYWRlZCBhdCBydW50aW1lIGZyb20KKyAgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE2NDU1OiBPbiBGcmVlQlNEIGFuZCBTb2xhcmlzLCBpZiB0aGUgbG9jYWxlIGlzIEMsIHRoZQorICBBU0NJSS9zdXJyb2dhdGVlc2NhcGUgY29kZWMgaXMgbm93IHVzZWQsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8KKyAgZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGlzIGNoYW5nZSBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgd2l0aAorICBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGJlY2F1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMgYW5ub3VuY2VzIGFuCisgIEFTQ0lJIGxvY2FsZSBlbmNvZGluZywgd2hlcmVhcyB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBpcyB1c2VkIGluIHByYWN0aWNlLgorCistIElzc3VlICMxNjU2MjogT3B0aW1pemUgZGljdCBlcXVhbGl0eSB0ZXN0aW5nLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1ODg6IFNpbGVuY2UgdW51c2VkLWJ1dC1zZXQgd2FybmluZ3MgaW4gUHl0aG9uL3RocmVhZF9wdGhyZWFkCisKKy0gSXNzdWUgIzE2NTkyOiBzdHJpbmdsaWJfYnl0ZXNfam9pbiBkb2Vzbid0IHJhaXNlIE1lbW9yeUVycm9yIG9uIGFsbG9jYXRpb24KKyAgZmFpbHVyZS4KKworLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgorCistIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKKyAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCisKKy0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQorICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KKworLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAorICBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI5MDogQSBmbG9hdCByZXR1cm4gdmFsdWUgZnJvbSB0aGUgX19jb21wbGV4X18gc3BlY2lhbCBtZXRob2QgaXMgbm8KKyAgbG9uZ2VyIGFjY2VwdGVkIGluIHRoZSBjb21wbGV4KCkgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE2NDE2OiBPbiBNYWMgT1MgWCwgb3BlcmF0aW5nIHN5c3RlbSBkYXRhIGFyZSBub3cgYWx3YXlzCisgIGVuY29kZWQvZGVjb2RlZCB0by9mcm9tIFVURi04L3N1cnJvZ2F0ZWVzY2FwZSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlIGVuY29kaW5nCisgICh3aGljaCBtYXkgYmUgQVNDSUkgaWYgbm8gbG9jYWxlIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIHRvIGF2b2lkCisgIGluY29uc2lzdGVuY2llcyB3aXRoIG9zLmZzZW5jb2RlKCkgYW5kIG9zLmZzZGVjb2RlKCkgZnVuY3Rpb25zIHdoaWNoIGFyZQorICBhbHJlYWR5IHVzaW5nIFVURi04L3N1cnJvZ2F0ZWVzY2FwZS4KKworLSBJc3N1ZSAjMTY0NTM6IEZpeCBlcXVhbGl0eSB0ZXN0aW5nIG9mIGRlYWQgd2Vha3JlZiBvYmplY3RzLgorCistIElzc3VlICM5NTM1OiBGaXggcGVuZGluZyBzaWduYWxzIHRoYXQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCBub3QgeWV0CisgIGhhbmRsZWQgYnkgUHl0aG9uIHRvIG5vdCBwZXJzaXN0IGFmdGVyIG9zLmZvcmsoKSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTQ3OTQ6IEZpeCBzbGljZS5pbmRpY2VzIHRvIHJldHVybiBjb3JyZWN0IHJlc3VsdHMgZm9yIGh1Z2UgdmFsdWVzLAorICByYXRoZXIgdGhhbiByYWlzaW5nIE92ZXJmbG93RXJyb3IuCisKKy0gSXNzdWUgIzE1MDAxOiBmaXggc2VnZmF1bHQgb24gImRlbCBzeXMubW9kdWxlc1snX19tYWluX18nXSIuIFBhdGNoIGJ5IFZpY3RvcgorICBTdGlubmVyLgorCistIElzc3VlICM4MjcxOiB0aGUgdXRmLTggZGVjb2RlciBub3cgb3V0cHV0cyB0aGUgY29ycmVjdCBudW1iZXIgb2YgVStGRkZECisgIGNoYXJhY3RlcnMgd2hlbiB1c2VkIHdpdGggdGhlICdyZXBsYWNlJyBlcnJvciBoYW5kbGVyIG9uIGludmFsaWQgdXRmLTgKKyAgc2VxdWVuY2VzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSwgdGVzdHMgYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICM1NzY1OiBBcHBseSBhIGhhcmQgcmVjdXJzaW9uIGxpbWl0IGluIHRoZSBjb21waWxlciBpbnN0ZWFkIG9mCisgIGJsb3dpbmcgdGhlIHN0YWNrIGFuZCBzZWdmYXVsdGluZy4gSW5pdGlhbCBwYXRjaCBieSBBbmRyZWEgR3JpZmZpbmkuCisKKy0gSXNzdWUgIzE2NDAyOiBXaGVuIHNsaWNpbmcgYSByYW5nZSwgZml4IHNoYWRvd2luZyBvZiBleGNlcHRpb25zIGZyb20KKyAgX19pbmRleF9fLgorCistIElzc3VlICMxNjMzNjogZml4IGlucHV0IGNoZWNraW5nIGluIHRoZSBzdXJyb2dhdGVwYXNzIGVycm9yIGhhbmRsZXIuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzg0MDE6IGFzc2lnbmluZyBhbiBpbnQgdG8gYSBieXRlYXJyYXkgc2xpY2UgKGUuZy4gYlszOjRdID0gNSkgbm93CisgIHJhaXNlcyBhbiBlcnJvci4KKworLSBJc3N1ZSAjNzMxNzogRGlzcGxheSBmdWxsIHRyYWNlYmFja3Mgd2hlbiBhbiBlcnJvciBvY2N1cnMgYXN5bmNocm9ub3VzbHkuCisgIFBhdGNoIGJ5IEFsb24gSG9yZXYgd2l0aCB1cGRhdGUgYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjMwOTogTWFrZSBQWVRIT05QQVRIPSIiIGJlaGF2aW9yIHRoZSBzYW1lIGFzIGlmIFBZVEhPTlBBVEgKKyAgbm90IHNldCBhdCBhbGwuCisKKy0gSXNzdWUgIzEwMTg5OiBJbXByb3ZlIHRoZSBlcnJvciByZXBvcnRpbmcgb2YgU3ludGF4RXJyb3JzIHJlbGF0ZWQgdG8gZ2xvYmFsCisgIGFuZCBub25sb2NhbCBzdGF0ZW1lbnRzLgorCistIEZpeCBzZWdmYXVsdHMgb24gc2V0dGluZyBfX3F1YWxuYW1lX18gb24gYnVpbHRpbiB0eXBlcyBhbmQgYXR0ZW1wdGluZyB0bworICBkZWxldGUgaXQgb24gYW55IHR5cGUuCisKKy0gSXNzdWUgIzE0NjI1OiBSZXdyaXRlIHRoZSBVVEYtMzIgZGVjb2Rlci4gSXQgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM0NTogRml4IGFuIGluZmluaXRlIGxvb3Agd2hlbiBgYGZyb21rZXlzYGAgb24gYSBkaWN0IHN1YmNsYXNzCisgIHJlY2VpdmVkIGEgbm9uZW1wdHkgZGljdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTYyNzE6IEZpeCBzdHJhbmdlIGJ1Z3MgdGhhdCByZXN1bHRlZCBmcm9tIF9fcXVhbG5hbWVfXyBhcHBlYXJpbmcgaW4gYQorICBjbGFzcydzIF9fZGljdF9fIGFuZCBvbiB0eXBlLgorCistIElzc3VlICMxMjgwNTogTWFrZSBieXRlcy5qb2luIGFuZCBieXRlYXJyYXkuam9pbiBmYXN0ZXIgd2hlbiB0aGUgc2VwYXJhdG9yCisgIGlzIGVtcHR5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCisgIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgorCistIElzc3VlICMxNTk1ODogYnl0ZXMuam9pbiBhbmQgYnl0ZWFycmF5LmpvaW4gbm93IGFjY2VwdCBhcmJpdHJhcnkgYnVmZmVyCisgIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0NzgzOiBJbXByb3ZlIGludCgpIGRvY3N0cmluZyBhbmQgc3dpdGNoIGRvY3N0cmluZ3MgZm9yIHN0cigpLAorICByYW5nZSgpLCBhbmQgc2xpY2UoKSB0byB1c2UgbXVsdGktbGluZSBzaWduYXR1cmVzLgorCistIElzc3VlICMxNjE2MDogU3ViY2xhc3Mgc3VwcG9ydCBub3cgd29ya3MgZm9yIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KKworLSBVcGdyYWRlIFVuaWNvZGUgZGF0YSAoVUNEKSB0byB2ZXJzaW9uIDYuMi4KKworLSBJc3N1ZSAjMTUzNzk6IEZpeCBwYXNzaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBhcyBpbnRlZ2VycyBmb3IgdGhlIGNoYXJtYXAKKyAgZGVjb2RlciAoYWxyZWFkeSB3b3JraW5nIGFzIHVuaWNvZGUgc3RyaW5ncykuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE0NDogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBoYW5kbGluZyBwb2ludGVycyBhcyBpbnRlZ2VyCisgIHZhbHVlcywgYnkgdXNpbmcgYFB5X3VpbnRwdHJfdGAgaW5zdGVhZCBvZiBgc2l6ZV90YC4gIFBhdGNoIGJ5IFNlcmhpeQorICBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1OTY1OiBFeHBsaWNpdGx5IGNhc3QgYEFUX0ZEQ1dEYCBhcyAoaW50KS4gIFJlcXVpcmVkIG9uIFNvbGFyaXMgMTAKKyAgKHdoaWNoIGRlZmluZXMgYEFUX0ZEQ1dEYCBhcyBgYDB4ZmZkMTk1NTNgYCksIGhhcm1sZXNzIG9uIG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTU4Mzk6IENvbnZlcnQgU3lzdGVtRXJyb3JzIGluIGBzdXBlcigpYCB0byBSdW50aW1lRXJyb3JzLgorCistIElzc3VlICMxNTQ0ODogQnVmZmVyZWQgSU8gbm93IGZyZWVzIHRoZSBidWZmZXIgd2hlbiBjbG9zZWQsIGluc3RlYWQKKyAgb2Ygd2hlbiBkZWFsbG9jYXRpbmcuCisKKy0gSXNzdWUgIzE1ODQ2OiBGaXggU3lzdGVtRXJyb3Igd2hpY2ggaGFwcGVuZWQgd2hlbiB1c2luZyBgYXN0LnBhcnNlKClgIGluIGFuCisgIGV4Y2VwdGlvbiBoYW5kbGVyIG9uIGNvZGUgd2l0aCBzeW50YXggZXJyb3JzLgorCistIElzc3VlICMxNTg5NzogemlwaW1wb3J0LmMgZG9lc24ndCBjaGVjayByZXR1cm4gdmFsdWUgb2YgZnNlZWsoKS4KKyAgUGF0Y2ggYnkgRmVsaXBlIENydXouCisKKy0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQorICBzdWJzY3JpcHRhYmxlLgorCistIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgcHJvcGFnYXRlIEltcG9ydEVycm9yIHdoZW4gcmFpc2VkIGFzIGEKKyAgc2lkZS1lZmZlY3Qgb2YgYSBtb2R1bGUgdHJpZ2dlcmVkIGZyb20gdXNpbmcgZnJvbWxpc3QuCisKKy0gSXNzdWUgIzE1MDIyOiBBZGQgcGlja2xlIGFuZCBjb21wYXJpc29uIHN1cHBvcnQgdG8gdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzQzMzE6IEFkZGVkIGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kIChJbml0aWFsIHBhdGNoIGJ5IEFsb24gSG9yZXYpCisKKy0gSXNzdWUgIzEzNDYxOiBGaXggYSBjcmFzaCBpbiB0aGUgVGV4dElPV3JhcHBlci50ZWxsIG1ldGhvZCBvbiA2NC1iaXQKKyAgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaS4KKworLSBJc3N1ZSAjMTg2ODE6IEZpeCBhIE5hbWVFcnJvciBpbiBpbXBvcnRsaWIucmVsb2FkKCkgKG5vdGljZWQgYnkgV2VpemhhbyBMaSkuCisKKy0gSXNzdWUgIzE0MzIzOiBFeHBhbmRlZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUKKyAgUkdCIC0tIFlJUSBjb252ZXJzaW9ucyBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLgorCiAtIElzc3VlICMxNzk5ODogRml4IGFuIGludGVybmFsIGVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBlbmdpbmUuCiAKIC0gSXNzdWUgIzE3NTU3OiBGaXggb3MuZ2V0Z3JvdXBzKCkgdG8gd29yayB3aXRoIHRoZSBtb2RpZmllZCBiZWhhdmlvciBvZgogICBnZXRncm91cHMoMikgb24gT1MgWCAxMC44LiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0ZXVzeiBMZW5pay4KIAorLSBJc3N1ZSAjMTg2MDg6IEF2b2lkIGtlZXBpbmcgYSBzdHJvbmcgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbGUgbW9kdWxlCisgIGluc2lkZSB0aGUgX2lvIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg2MTk6IEZpeCBhdGV4aXQgbGVha2luZyBjYWxsYmFja3MgcmVnaXN0ZXJlZCBmcm9tIHN1Yi1pbnRlcnByZXRlcnMsCisgIGFuZCBtYWtlIGl0IEdDLWF3YXJlLgorCistIElzc3VlICMxNTY5OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgdXNlcyBQRVAgMzEyMS1zdHlsZSBtb2R1bGUKKyAgaW5pdGlhbGl6YXRpb24sIHNvIGFzIHRvIHJlY2xhaW0gYWxsb2NhdGVkIHJlc291cmNlcyAoUHl0aG9uIGNhbGxiYWNrcykKKyAgYXQgc2h1dGRvd24uICBPcmlnaW5hbCBwYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE3NjE2OiB3YXZlLm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisKIC0gSXNzdWUgIzE4NTk5OiBGaXggbmFtZSBhdHRyaWJ1dGUgb2YgX3NoYTEuc2hhMSgpIG9iamVjdC4gSXQgbm93IHJldHVybnMKICAgJ1NIQTEnIGluc3RlYWQgb2YgJ1NIQScuCiAKKy0gSXNzdWUgIzEzMjY2OiBBZGRlZCBpbnNwZWN0LnVud3JhcCB0byBlYXNpbHkgdW5yYXZlbCBfX3dyYXBwZWRfXyBjaGFpbnMKKyAgKGluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFVyYmFuIGFuZCBBYXJvbiBJbGVzKQorCiAtIElzc3VlICMxODU2MTogU2tpcCBuYW1lIGluIGN0eXBlcycgX2J1aWxkX2NhbGxhcmdzKCkgaWYgbmFtZSBpcyBOVUxMLgogCiAtIElzc3VlICMxODU1OTogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBlcnJvciBpbiBfcGlja2xlIG1vZHVsZQogCi0tIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBhIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgY2FsbCBpbgotICBjdHlwZXMnIFVfc2V0KCkuCistIElzc3VlICMxODU1NjogQ2hlY2sgdGhlIHJldHVybiB0eXBlIG9mIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgaW4gY3R5cGUncworICBVX3NldCgpLgorCistIElzc3VlICMxNzgxODogYWlmYy5nZXRwYXJhbXMgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlLgogCiAtIElzc3VlICMxODU0OTogRWxpbWluYXRlIGRlYWQgY29kZSBpbiBzb2NrZXRfbnRvaGwoKQogCistIElzc3VlICMxODUzMDogUmVtb3ZlIGFkZGl0aW9uYWwgc3RhdCBjYWxsIGZyb20gcG9zaXhwYXRoLmlzbW91bnQuCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCiAtIElzc3VlICMxODUxNDogRml4IHVucmVhY2hhYmxlIFB5X0RFQ1JFRigpIGNhbGwgaW4gUHlDRGF0YV9Gcm9tQmFzZU9iaigpCiAKKy0gSXNzdWUgIzkxNzc6IENhbGxpbmcgcmVhZCgpIG9yIHdyaXRlKCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yLCBub3QKKyAgQXR0cmlidXRlRXJyb3IsIG9uIGEgY2xvc2VkIFNTTCBzb2NrZXQuICBQYXRjaCBieSBTZW5rbyBSYXNpYy4KKwogLSBJc3N1ZSAjMTg1MTM6IEZpeCBiZWhhdmlvdXIgb2YgY21hdGgucmVjdCB3LnIudC4gc2lnbmVkIHplcm9zIG9uIE9TIFggMTAuOCArCiAgIGdjYy4KIAorLSBJc3N1ZSAjMTg0Nzk6IENoYW5nZWQgdmVudiBBY3RpdmF0ZS5wczEgdG8gbWFrZSBkZWFjdGl2YXRlIGEgZnVuY3Rpb24sIGFuZAorICByZW1vdmVkIERlYWN0aXZhdGUucHMxLgorCiAtIElzc3VlICMxODQ4MDogQWRkIG1pc3NpbmcgY2FsbCB0byBQeVR5cGVfUmVhZHkgdG8gdGhlIF9lbGVtZW50dHJlZSBleHRlbnNpb24uCiAKIC0gSXNzdWUgIzE3Nzc4OiBGaXggdGVzdCBkaXNjb3ZlcnkgZm9yIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAoUGF0Y2ggYnkKICAgWmFjaGFyeSBXYXJlLikKIAorLSBJc3N1ZSAjMTgzOTM6IFRoZSBwcml2YXRlIG1vZHVsZSBfZ2VzdGFsdCBhbmQgcHJpdmF0ZSBmdW5jdGlvbnMKKyAgcGxhdGZvcm0uX21hY192ZXJfZ2VzdGFsdCwgcGxhdGZvcm0uX21hY192ZXJfbG9va3VwIGFuZAorICBwbGF0Zm9ybS5fYmNkMnN0ciBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIHB1YmxpYworICBpbnRlcmZhY2Ugb2YgdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTc0ODI6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciAoYW5kIGZ1bmN0b29scy53cmFwcykgbm93IHNldCB0aGUKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIGNvcnJlY3RseSBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIGhhcyBhCisgIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZSBzZXQuCisKIC0gSXNzdWUgIzE4NDMxOiBUaGUgbmV3IGVtYWlsIGhlYWRlciBwYXJzZXIgbm93IGRlY29kZXMgUkZDMjA0NyBlbmNvZGVkIHdvcmRzCiAgIGluIHN0cnVjdHVyZWQgaGVhZGVycy4KIApAQCAtNTA4LDExICsxNzAwLDE4IEBACiAtIElzc3VlICMxODEwMTogVGNsLnNwbGl0KCkgbm93IHByb2Nlc3Mgc3RyaW5ncyBuZXN0ZWQgaW4gYSB0dXBsZSBhcyBpdAogICBkbyB3aXRoIGJ5dGUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTgxMTY6IGdldHBhc3Mgd2FzIGFsd2F5cyBnZXR0aW5nIGFuIGVycm9yIHdoZW4gdGVzdGluZyAvZGV2L3R0eSwKKyAgYW5kIHRodXMgd2FzIGFsd2F5cyBmYWxsaW5nIGJhY2sgdG8gc3RkaW4uICBJdCBhbHNvIGxlYWtlZCBhbiBvcGVuIGZpbGUKKyAgd2hlbiBpdCBkaWQgc28uICBCb3RoIG9mIHRoZXNlIGlzc3VlcyBhcmUgbm93IGZpeGVkLgorCiAtIElzc3VlICMxNzE5ODogRml4IGEgTmFtZUVycm9yIGluIHRoZSBkYm0gbW9kdWxlLiAgUGF0Y2ggYnkgVmFsZW50aW5hCiAgIE11a2hhbWVkemhhbm92YS4KIAogLSBJc3N1ZSAjMTgwMTM6IEZpeCBjZ2kuRmllbGRTdG9yYWdlIHRvIHBhcnNlIHRoZSBXM0Mgc2FtcGxlIGZvcm0uCiAKKy0gSXNzdWUgIzE4MDIwOiBpbXByb3ZlIGh0bWwuZXNjYXBlIHNwZWVkIGJ5IGFuIG9yZGVyIG9mIG1hZ25pdHVkZS4KKyAgUGF0Y2ggYnkgTWF0dCBCcnlhbnQuCisKIC0gSXNzdWUgIzE4MzQ3OiBFbGVtZW50VHJlZSdzIGh0bWwgc2VyaWFsaXplciBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mCiAgIGNsb3NpbmcgdGFncy4KIApAQCAtNTI3LDYgKzE3MjYsOSBAQAogLSBJc3N1ZSAjMTgzMzk6IE5lZ2F0aXZlIGludHMga2V5cyBpbiB1bnBpY2tsZXIubWVtbyBkaWN0IG5vIGxvbmdlciBjYXVzZSBhCiAgIHNlZ2ZhdWx0IGluc2lkZSB0aGUgX3BpY2tsZSBDIGV4dGVuc2lvbi4KIAorLSBJc3N1ZSAxODI0MDogVGhlIEhNQUMgbW9kdWxlIGlzIG5vIGxvbmdlciByZXN0cmljdGVkIHRvIGJ5dGVzIGFuZCBhY2NlcHRzCisgIGFueSBieXRlcy1saWtlIG9iamVjdCwgZS5nLiBtZW1vcnl2aWV3LiBPcmlnaW5hbCBwYXRjaCBieSBKb25hcyBCb3Jnc3Ryw7ZtLgorCiAtIElzc3VlICMxODIyNDogUmVtb3ZlZCBweWRvYyBzY3JpcHQgZnJvbSBjcmVhdGVkIHZlbnYsIGFzIGl0IGNhdXNlcyBwcm9ibGVtcwogICBvbiBXaW5kb3dzIGFuZCBhZGRzIG5vIHZhbHVlIG92ZXIgYW5kIGFib3ZlIHB5dGhvbiAtbSBweWRvYyAuLi4KIApAQCAtNTM3LDMxICsxNzM5LDkyIEBACiAtIElzc3VlICMxNDM2MDogZW5jb2RlX3F1b3ByaSBjYW4gbm93IGJlIHN1Y2Nlc3NmdWxseSB1c2VkIGFzIGFuIGVuY29kZXIKICAgd2hlbiBjb25zdHJ1Y3RpbmcgYSBNSU1FQXBwbGljYXRpb24gb2JqZWN0LgogCistIElzc3VlICMxMTM5MDogQWRkIC1vIGFuZCAtZiBjb21tYW5kIGxpbmUgb3B0aW9ucyB0byB0aGUgZG9jdGVzdCBDTEkgdG8KKyAgc3BlY2lmeSBkb2N0ZXN0IG9wdGlvbnMgKGFuZCBjb252ZXJ0IGl0IHRvIHVzaW5nIGFyZ3BhcnNlKS4KKwogLSBJc3N1ZSAjMTgxMzU6IHNzbC5TU0xTb2NrZXQud3JpdGUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgdGhlIGlucHV0CiAgIHN0cmluZyBpbiBsb25nZXIgdGhhbiAyIGdpZ2FieXRlcywgYW5kIHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbigpCiAgIHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIHBhc3N3b3JkIGlzIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLiBUaGUgc3NsCiAgIG1vZHVsZSBkb2VzIG5vdCBzdXBwb3J0IHBhcnRpYWwgd3JpdGUuCiAKKy0gSXNzdWUgIzExMDE2OiBBZGQgQyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3RhdCBtb2R1bGUgYXMgX3N0YXQuCisKIC0gSXNzdWUgIzE4MjQ4OiBGaXggbGliZmZpIGJ1aWxkIG9uIEFJWC4KIAogLSBJc3N1ZSAjMTgyNTk6IERlY2xhcmUgc2V0aG9zdG5hbWUgaW4gc29ja2V0bW9kdWxlLmMgZm9yIEFJWAogCistIElzc3VlICMxODE0NzogQWRkIGRpYWdub3N0aWMgZnVuY3Rpb25zIHRvIHNzbC5TU0xDb250ZXh0KCkuIGdldF9jYV9saXN0KCkKKyAgbGlzdHMgYWxsIGxvYWRlZCBDQSBjZXJ0aWZpY2F0ZXMgYW5kIGNlcnRfc3RvcmVfc3RhdHMoKSByZXR1cm5zIGFtb3VudCBvZgorICBsb2FkZWQgWC41MDkgY2VydHMsIFguNTA5IENBIGNlcnRzIGFuZCBDUkxzLgorCiAtIElzc3VlICMxODE2NzogY2dpLkZpZWxkU3RvcmFnZSBubyBsb25nZXIgZmFpbHMgdG8gaGFuZGxlIG11bHRpcGFydC9mb3JtLWRhdGEKICAgd2hlbiBcclxuIGFwcGVhcnMgYXQgZW5kIG9mIDY1NTM1IGJ5dGVzIHdpdGhvdXQgb3RoZXIgbmV3bGluZXMuCiAKKy0gSXNzdWUgIzE4MDc2OiBJbnRyb2R1Y2UgaW1wb3J0bGliLnV0aWwuZGVjb2RlX3NvdXJjZSgpLgorLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCisgIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KKworLSBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5nZXRfc291cmNlKCkgbm8gbG9uZ2VyIGNoYW5nZXMgU3ludGF4RXJyb3Igb3IKKyAgVW5pY29kZURlY29kZUVycm9yIGludG8gSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE4MDU4LCAxODA1NzogTWFrZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UgbG9hZGVyIG1lZXQgdGhlCisgIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlciBBQkMsIGFsbG93aW5nIGZvciBuYW1lc3BhY2UgcGFja2FnZXMgdG8gd29yayB3aXRoCisgIHJ1bnB5LgorCistIElzc3VlICMxNzE3NzogVGhlIGltcCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4KKwogLSBzdWJwcm9jZXNzOiBQcmV2ZW50IGEgcG9zc2libGUgZG91YmxlIGNsb3NlIG9mIHBhcmVudCBwaXBlIGZkcyB3aGVuIHRoZQogICBzdWJwcm9jZXNzIGV4ZWMgcnVucyBpbnRvIGFuIGVycm9yLiAgUHJldmVudCBhIHJlZ3VsYXIgbXVsdGktY2xvc2Ugb2YgdGhlCiAgIC9kZXYvbnVsbCBmZCB3aGVuIGFueSBvZiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgd2FzIHNldCB0byBERVZOVUxMLgogCistIElzc3VlICMxODE5NDogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kCisgIHNvdXJjZV9mcm9tX2NhY2hlKCkgd2hpbGUgZG9jdW1lbnRpbmcgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGluIGltcCBhcworICBkZXByZWNhdGVkLgorCistIElzc3VlICMxNzkwNzogRG9jdW1lbnQgaW1wLm5ld19tb2R1bGUoKSBhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZgorICB0eXBlcy5Nb2R1bGVUeXBlLgorCistIElzc3VlICMxODE5MjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiBhbmQgZG9jdW1lbnQgYXMgZGVwcmVjYXRlZAorICBpbXAuZ2V0X21hZ2ljKCkuCisKKy0gSXNzdWUgIzE4MTQ5OiBBZGQgZmlsZWNtcC5jbGVhcl9jYWNoZSgpIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBmaWxlY21wIGNhY2hlLgorICBQYXRjaCBieSBNYXJrIExldml0dAorCistIElzc3VlICMxODE5MzogQWRkIGltcG9ydGxpYi5yZWxvYWQoKS4KKworLSBJc3N1ZSAjMTgxNTc6IFN0b3AgdXNpbmcgaW1wLmxvYWRfbW9kdWxlKCkgaW4gcHlkb2MuCisKIC0gSXNzdWUgIzE2MTAyOiBNYWtlIHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCiAKKy0gSXNzdWUgIzE3MTM0OiBBZGQgc3NsLmVudW1fY2VydF9zdG9yZSgpIGFzIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0IHN0b3JlLgorCistIElzc3VlICMxODE0MzogSW1wbGVtZW50IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSBpbiBvcmRlciB0byBkZWJ1ZworICB0aGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIGNhZmlsZSBhbmQgY2FwYXRoLgorCistIElzc3VlICMxNzMxNDogTW92ZSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvdmVyIHRvIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTE5NTk6IFNNVFBTZXJ2ZXIgYW5kIFNNVFBDaGFubmVsIG5vdyB0YWtlIGFuIG9wdGlvbmFsIG1hcCwgdXNlIG9mCisgIHdoaWNoIGF2b2lkcyBhZmZlY3RpbmcgZ2xvYmFsIHN0YXRlLgorCiAtIElzc3VlICMxODEwOTogb3MudW5hbWUoKSBub3cgZGVjb2RlcyBmaWVsZHMgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLCBhbmQKICAgc29ja2V0LmdldGhvc3RuYW1lKCkgbm93IGRlY29kZXMgdGhlIGhvc3RuYW1lIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywKICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcgaW4gc3RyaWN0IG1vZGUuCiAKKy0gSXNzdWUgIzE4MDg5OiBJbXBsZW1lbnQgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlLgorCistIElzc3VlICMxODA4ODogSW50cm9kdWNlIGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzIGZvciBzZXR0aW5nCisgIG1vZHVsZSBhdHRyaWJ1dGVzLiBMZWFkcyB0byB0aGUgcGVuZGluZyBkZXByZWNhdGlvbiBvZgorICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKwogLSBJc3N1ZSAjMTc0MDM6IHVybGxpYi5wYXJzZS5yb2JvdHBhcnNlciBub3JtYWxpemVzIHRoZSB1cmxzIGJlZm9yZSBhZGRpbmcgdG8KICAgcnVsZWxpbmUuIFRoaXMgaGVscHMgaW4gaGFuZGxpbmcgY2VydGFpbiB0eXBlcyBpbnZhbGlkIHVybHMgaW4gYSBjb25zZXJ2YXRpdmUKLSAgbWFubmVyLgorICBtYW5uZXIuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxODA3MDogSGF2ZSBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIHNldCBhdHRyaWJ1dGVzCisgIHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBwcm9wZXJseSBzdXBwb3J0IHJlbG9hZGluZy4KKworLSBBZGRlZCBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZCB0byByZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdG8gcHJvdmlkZSB0aGUKKyAgcHJvcGVyIG1vZHVsZSBvYmplY3QgdG8gbG9hZC4KIAogLSBJc3N1ZSAjMTgwMjU6IEZpeGVkIGEgc2VnZmF1bHQgaW4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG8oKSB3aGVuIHJhdwogICBzdHJlYW0ncyByZWFkKCkgcmV0dXJucyBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgpAQCAtNTcwLDMxICsxODMzLDIwNCBAQAogICBub24tYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZSBpbnB1dCBzdHJpbmcgdG8gY29uZm9ybSBhIGRvY3N0cmluZy4KICAgVXBkYXRlZCB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24uCiAKLS0gSXNzdWUgIzEzNzcyOiBSZXN0b3JlZCBkaXJlY3RvcnkgZGV0ZWN0aW9uIG9mIHRhcmdldHMgaW4gYGBvcy5zeW1saW5rYGAgb24KLSAgV2luZG93cywgd2hpY2ggd2FzIHRlbXBvcmFyaWx5IHJlbW92ZWQgaW4gUHl0aG9uIDMuMi4zIGR1ZSB0byBhbiBpbmNvbXBsZXRlCi0gIGltcGxlbWVudGF0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gbm93IHdvcmtzIGV2ZW4gaWYgdGhlIHN5bWxpbmsgaXMgY3JlYXRlZAotICBpbiBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorLSBJc3N1ZSAjMTgwNzI6IEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZ2V0X2NvZGUoKSBhbmQKKyAgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2NvZGUoKS4KKworLSBJc3N1ZSAjODI0MDogU2V0IHRoZSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUiBmbGFnIG9uIFNTTAorICBzb2NrZXRzLgorCistIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKKyAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KIAogLSBJc3N1ZSAjMTY5ODY6IEVsZW1lbnRUcmVlIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGEgc3RyaW5nIGlucHV0IG5vdCBvbmx5IHdoZW4KICAgYW4gaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIFVURi04IG9yIFVTLUFTQ0lJLgogCistIElzc3VlICMxNzk5Njogc29ja2V0IG1vZHVsZSBub3cgZXhwb3NlcyBBRl9MSU5LIGNvbnN0YW50IG9uIEJTRCBhbmQgT1NYLgorCistIElzc3VlICMxNzkwMDogQWxsb3dlZCBwaWNrbGluZyBvZiByZWN1cnNpdmUgT3JkZXJlZERpY3RzLiAgRGVjcmVhc2VkIHBpY2tsZWQKKyAgc2l6ZSBhbmQgcGlja2xpbmcgdGltZS4KKworLSBJc3N1ZSAjMTc5MTQ6IEFkZCBvcy5jcHVfY291bnQoKS4gUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaSwgYmFzZWQgb24gYW4KKyAgaW5pdGlhbCBwYXRjaCBieSBUcmVudCBOZWxzb24uCisKIC0gSXNzdWUgIzE3ODEyOiBGaXhlZCBxdWFkcmF0aWMgY29tcGxleGl0eSBvZiBiYXNlNjQuYjMyZW5jb2RlKCkuCisgIE9wdGltaXplIGJhc2U2NC5iMzJlbmNvZGUoKSBhbmQgYmFzZTY0LmIzMmRlY29kZSgpIChzcGVlZCB1cCB0byAzeCkuCiAKIC0gSXNzdWUgIzE3OTgwOiBGaXggcG9zc2libGUgYWJ1c2Ugb2Ygc3NsLm1hdGNoX2hvc3RuYW1lKCkgZm9yIGRlbmlhbCBvZgogICBzZXJ2aWNlIHVzaW5nIGNlcnRpZmljYXRlcyB3aXRoIG1hbnkgd2lsZGNhcmRzIChDVkUtMjAxMy0yMDk5KS4KIAorLSBJc3N1ZSAjMTU3NTg6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIHNvIGl0IG5vIGxvbmdlciBoYXMgTyhuKioyKSBjb21wbGV4aXR5LgorCistIElzc3VlICMxNDU5NjogVGhlIHN0cnVjdC5TdHJ1Y3QoKSBvYmplY3RzIG5vdyB1c2UgbW9yZSBjb21wYWN0IGltcGxlbWVudGF0aW9uLgorCiAtIElzc3VlICMxNzk4MTogQ2xvc2VkIHNvY2tldCBvbiBlcnJvciBpbiBTeXNMb2dIYW5kbGVyLgogCistIElzc3VlICMxNzk2NDogRml4IG9zLnN5c2NvbmYoKTogdGhlIHJldHVybiB0eXBlIG9mIHRoZSBDIHN5c2NvbmYoKSBmdW5jdGlvbgorICBpcyBsb25nLCBub3QgaW50LgorCiAtIEZpeCB0eXBvcyBpbiB0aGUgbXVsdGlwcm9jZXNzaW5nIG1vZHVsZS4KIAogLSBJc3N1ZSAjMTc3NTQ6IE1ha2UgY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5KCkgaW5kZXBlbmRlbnQgb2YgdGhlIGxvY2FsZS4KIAogLSBJc3N1ZSAjMTc5Njg6IEZpeCBtZW1vcnkgbGVhayBpbiBvcy5saXN0eGF0dHIoKS4KIAotLSBJc3N1ZSAjMTcyNjk6IFdvcmthcm91bmQgZm9yIHNvY2tldC5nZXRhZGRyaW5mbyBjcmFzaCBvbiBNYWNPUyBYCi0gIHdpdGggcG9ydCBOb25lIG9yICIwIiBhbmQgZmxhZ3MgQUlfTlVNRVJJQ1NFUlYuCistIElzc3VlICMxNzYwNjogRml4ZWQgc3VwcG9ydCBvZiBlbmNvZGVkIGJ5dGUgc3RyaW5ncyBpbiB0aGUgWE1MR2VuZXJhdG9yCisgIGNoYXJhY3RlcnMoKSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIG1ldGhvZHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZWJhc3RpYW4KKyAgT3J0aXogVmFzcXVlei4KIAotLSBJc3N1ZSAjMTg2OTg6IEVuc3VyZSBpbXAucmVsb2FkKCkgcmV0dXJucyB0aGUgbW9kdWxlIG91dCBvZiBzeXMubW9kdWxlcy4KKy0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCisgIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgorCistIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQorICBjb2RlY3Mub3BlbigpLgorCistIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIG5vIG1vcmUgY29udGludWVzIGZyb20gd2hlcmUKKyAgaXQgbGVmdCBvZmYuICBQYXRjaCBieSBNaWNoYWVsIEJpcnR3ZWxsLgorCistIElzc3VlICMxNzI4OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgcGxheXMgbmljZXIgd2l0aCBleHRlcm5hbCBtb2R1bGVzCisgIG9yIGFwcGxpY2F0aW9ucyBjaGFuZ2luZyB0aGUgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyBnbG9iYWwKKyAgdmFyaWFibGUuICBJbml0aWFsIHBhdGNoIGJ5IEJyYWRsZXkgRnJvZWhsZS4KKworLSBJc3N1ZSAjMTIxODE6IHNlbGVjdCBtb2R1bGU6IEZpeCBzdHJ1Y3Qga2V2ZW50IGRlZmluaXRpb24gb24gT3BlbkJTRCA2NC1iaXQKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBGZWRlcmljbyBTY2h3aW5kdC4KKworLSBJc3N1ZSAjMTE4MTY6IG11bHRpcGxlIGltcHJvdmVtZW50cyB0byB0aGUgZGlzIG1vZHVsZTogZ2V0X2luc3RydWN0aW9ucworICBnZW5lcmF0b3IsIGFiaWxpdHkgdG8gcmVkaXJlY3Qgb3V0cHV0IHRvIGEgZmlsZSwgQnl0ZWNvZGUgYW5kIEluc3RydWN0aW9uCisgIGFic3RyYWN0aW9ucy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLCBSeWFuIEtlbGx5IGFuZCBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTM4MzE6IEVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsCisgIHRyYWNlYmFjayByYWlzZWQgd2hlbiBwb29sIHRhc2sgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU1Mjg6IEFkZCB3ZWFrcmVmLmZpbmFsaXplIHRvIHN1cHBvcnQgZmluYWxpemF0aW9uIHVzaW5nCisgIHdlYWtyZWYgY2FsbGJhY2tzLgorCistIElzc3VlICMxNDE3MzogQXZvaWQgY3Jhc2hpbmcgd2hlbiByZWFkaW5nIGEgc2lnbmFsIGhhbmRsZXIgZHVyaW5nCisgIGludGVycHJldGVyIHNodXRkb3duLgorCistIElzc3VlICMxNTkwMjogRml4IGltcC5sb2FkX21vZHVsZSgpIGFjY2VwdGluZyBOb25lIGFzIGEgZmlsZSB3aGVuIGxvYWRpbmcgYW4KKyAgZXh0ZW5zaW9uIG1vZHVsZS4KKworLSBJc3N1ZSAjMTM3MjE6IFNTTFNvY2tldC5nZXRwZWVyY2VydCgpIGFuZCBTU0xTb2NrZXQuZG9faGFuZHNoYWtlKCkgbm93CisgIHJhaXNlIGFuIE9TRXJyb3Igd2l0aCBFTk9UQ09OTiwgaW5zdGVhZCBvZiBhbiBBdHRyaWJ1dGVFcnJvciwgd2hlbiB0aGUKKyAgU1NMU29ja2V0IGlzIG5vdCBjb25uZWN0ZWQuCisKKy0gSXNzdWUgIzE0Njc5OiBhZGQgYW4gX19hbGxfXyAodGhhdCBjb250YWlucyBvbmx5IEhUTUxQYXJzZXIpIHRvIGh0bWwucGFyc2VyLgorCistIElzc3VlICMxNzgwMjogRml4IGFuIFVuYm91bmRMb2NhbEVycm9yIGluIGh0bWwucGFyc2VyLiAgSW5pdGlhbCB0ZXN0cyBieQorICBUaG9tYXMgQmFybG93LgorCistIElzc3VlICMxNzM1ODogTW9kdWxlcyBsb2FkZWQgYnkgaW1wLmxvYWRfc291cmNlKCkgYW5kIGxvYWRfY29tcGlsZWQoKSAoYW5kIGJ5CisgIGV4dGVudGlvbiBsb2FkX21vZHVsZSgpKSBub3cgaGF2ZSBhIGJldHRlciBjaGFuY2Ugb2Ygd29ya2luZyB3aGVuIHJlbG9hZGVkLgorCistIElzc3VlICMxNzgwNDogTmV3IGZ1bmN0aW9uIGBgc3RydWN0Lml0ZXJfdW5wYWNrYGAgYWxsb3dzIGZvciBzdHJlYW1pbmcKKyAgc3RydWN0IHVucGFja2luZy4KKworLSBJc3N1ZSAjMTc4MzA6IFdoZW4ga2V5d29yZC5weSBpcyB1c2VkIHRvIHVwZGF0ZSBhIGtleXdvcmQgZmlsZSwgaXQgbm93CisgIHByZXNlcnZlcyB0aGUgbGluZSBlbmRpbmdzIG9mIHRoZSBvcmlnaW5hbCBmaWxlLgorCistIElzc3VlICMxNzI3MjogTWFraW5nIHRoZSB1cmxsaWIucmVxdWVzdCdzIFJlcXVlc3QuZnVsbF91cmwgYSBkZXNjcmlwdG9yLgorICBGaXhlcyBidWdzIHdpdGggYXNzaWdubWVudCB0byBmdWxsX3VybC4gUGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMTczNTM6IFBsaXN0bGliIGVtaXR0ZWQgZW1wdHkgZGF0YSB0YWdzIHdpdGggZGVlcGx5IG5lc3RlZCBkYXRhc3RydWN0dXJlcworCistIElzc3VlICMxMTcxNDogVXNlICd3aXRoJyBzdGF0ZW1lbnRzIHRvIGFzc3VyZSBhIFNlbWFwaG9yZSByZWxlYXNlcyBhCisgIGNvbmRpdGlvbiB2YXJpYWJsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBSYWNoZWwuCisKKy0gSXNzdWUgIzE2NjI0OiBgc3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuIGBpbnB1dGAgYXJndW1lbnQsCisgIGFsbG93aW5nIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4gdG8gYmUgcHJvdmlkZWQgYXMgYSAoYnl0ZSkgc3RyaW5nLgorICBQYXRjaCBieSBaYWNrIFdlaW5iZXJnLgorCistIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCisgIFVuaXggZG9tYWluIHNvY2tldHMuCisKKy0gSXNzdWUgIzE2Njk0OiBBZGQgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlcmF0b3IgbW9kdWxlLgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzExMTgyOiByZW1vdmUgdGhlIHVudXNlZCBhbmQgdW5kb2N1bWVudGVkIHB5ZG9jLlNjYW5uZXIgY2xhc3MuCisgIFBhdGNoIGJ5IE1hcnRpbiBNb3JyaXNvbi4KKworLSBJc3N1ZSAjMTc3NDE6IEFkZCBFbGVtZW50VHJlZS5JbmNyZW1lbnRhbFBhcnNlciwgYW4gZXZlbnQtZHJpdmVuIHBhcnNlcgorICBmb3Igbm9uLWJsb2NraW5nIGFwcGxpY2F0aW9ucy4KKworLSBJc3N1ZSAjMTc1NTU6IEZpeCBGb3JrQXdhcmVUaHJlYWRMb2NrIHNvIHRoYXQgc2l6ZSBvZiBhZnRlciBmb3JrCisgIHJlZ2lzdHJ5IGRvZXMgbm90IGdyb3cgZXhwb25lbnRpYWxseSB3aXRoIGdlbmVyYXRpb24gb2YgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTc3MDc6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSdzIGdldCgpIG1ldGhvZCBkb2VzIG5vdCBibG9jayBmb3Igc2hvcnQKKyAgdGltZW91dHMuCisKKy0gSXN1c2UgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQorICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxsYmFja3MgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaWYgZW1wdHkgcGF0aCBhcmd1bWVudCBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNzcxMDogRml4IHBpY2tsZSByYWlzaW5nIGEgU3lzdGVtRXJyb3Igb24gYm9ndXMgaW5wdXQuCisKKy0gSXNzdWUgIzE3MzQxOiBJbmNsdWRlIHRoZSBpbnZhbGlkIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gcmUgYWJvdXQKKyAgaW52YWxpZCBncm91cCBuYW1lcy4KKworLSBJc3N1ZSAjMTc3MDI6IG9zLmVudmlyb24gbm93IHJhaXNlcyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudAorICB2YXJpYWJsZSBuYW1lIChzdHIgb24gVU5JWCksIGluc3RlYWQgb2YgdXNpbmcgdGhlIGVuY29kZWQgbmFtZSAoYnl0ZXMgb24KKyAgVU5JWCkuCisKKy0gSXNzdWUgIzE2MTYzOiBNYWtlIHRoZSBpbXBvcnRsaWIgYmFzZWQgdmVyc2lvbiBvZiBwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzCisgIHdvcmsgZm9yIHN1Ym1vZHVsZXMuIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY4MDQ6IEZpeCBhIGJ1ZyBpbiB0aGUgJ3NpdGUnIG1vZHVsZSB0aGF0IGNhdXNlZCBydW5uaW5nCisgICdweXRob24gLVMgLW0gc2l0ZScgdG8gaW5jb3JyZWN0bHkgdGhyb3cgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNTQ4MDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIGFuZCB1bnVzZWQgVFlQRV9JTlQ2NCBjb2RlIGZyb20gbWFyc2hhbC4KKyAgSW5pdGlhbCBwYXRjaCBieSBEYW5pZWwgUml0aS4KKworLSBJc3N1ZSAjMjExODogU01UUEV4Y2VwdGlvbiBpcyBub3cgYSBzdWJjbGFzcyBvZiBJT0Vycm9yLgorCistIElzc3VlICMxNzAxNjogR2V0IHJpZCBvZiBwb3NzaWJsZSBwb2ludGVyIHdyYXBhcm91bmRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cworICBpbiB0aGUgcmUgbW9kdWxlLiAgUGF0Y2ggYnkgTmlja29sYWkgWmVsZG92aWNoLgorCistIElzc3VlICMxNjY1ODogYWRkIG1pc3NpbmcgcmV0dXJuIHRvIEhUVFBDb25uZWN0aW9uLnNlbmQoKQorICBQYXRjaCBieSBKZWZmIEtudXBwLgorCistIElzc3VlICM5NTU2OiBBbGxvd2VkIHNwZWNpZnlpbmcgYSB0aW1lLW9mLWRheSBmb3IgYSBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIKKyAgdG8gcm90YXRlLgorCistIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCisgIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNzQ4NzogVGhlIHdhdmUgZ2V0cGFyYW1zIG1ldGhvZCBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUgcmF0aGVyIHRoYW4KKyAgYSBwbGFpbiB0dXBsZS4KKworLSBJc3N1ZSAjMTc2NzU6IHNvY2tldCByZXByKCkgcHJvdmlkZXMgbG9jYWwgYW5kIHJlbW90ZSBhZGRyZXNzZXMgKGlmIGFueSkuCisgIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnCisKKy0gSXNzdWUgIzE3MDkzOiBNYWtlIHRoZSBBQkNzIGluIGltcG9ydGxpYi5hYmMgcHJvdmlkZSBkZWZhdWx0IHZhbHVlcyBvciByYWlzZQorICByZWFzb25hYmxlIGV4Y2VwdGlvbnMgZm9yIHRoZWlyIG1ldGhvZHMgdG8gbWFrZSB0aGVtIG1vcmUgYW1lbmFibGUgdG8gc3VwZXIoKQorICBjYWxscy4KKworLSBJc3N1ZSAjMTc1NjY6IE1ha2UgaW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHIoKSBvcHRpb25hbCBpbnN0ZWFkIG9mIGFuCisgIGFic3RyYWN0bWV0aG9kIGFuZCByYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igc28gYXMgdG8gYmUgaWdub3JlZCBieSBkZWZhdWx0LgorCistIElzc3VlICMxNzY3ODogUmVtb3ZlIHRoZSB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgaW4gaHR0cC9jb29raWVqYXIucHkuCisgIENoYW5naW5nIHRoZSB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgorCistIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgorCistIElzc3VlICMxNjQ3NTogU3VwcG9ydCBvYmplY3QgaW5zdGFuY2luZywgcmVjdXJzaW9uIGFuZCBpbnRlcm5lZCBzdHJpbmdzCisgIGluIG1hcnNoYWwKKworLSBJc3N1ZSAjMTc1MDI6IFByb2Nlc3MgREVGQVVMVCB2YWx1ZXMgaW4gbW9jayBzaWRlX2VmZmVjdCB0aGF0IHJldHVybnMgaXRlcmF0b3IuCisKKy0gSXNzdWUgIzE2Nzk1OiBPbiB0aGUgYXN0LmFyZ3VtZW50cyBvYmplY3QsIHVuaWZ5IHZhcmFyZyB3aXRoIHZhcmFyZ2Fubm90YXRpb24KKyAgYW5kIGt3YXJnIGFuZCBrd2FyZ2Fubm90YXRpb24uIENoYW5nZSB0aGUgY29sdW1uIG9mZnNldCBvZiBhc3QuQXR0cmlidXRlIHRvIGJlCisgIGF0IHRoZSBhdHRyaWJ1dGUgbmFtZS4KKworLSBJc3N1ZSAjMTc0MzQ6IFByb3Blcmx5IHJhaXNlIGEgU3ludGF4RXJyb3Igd2hlbiBhIHN0cmluZyBvY2N1cnMgYmV0d2VlbiBmdXR1cmUKKyAgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTcxMTc6IEltcG9ydCBhbmQgQGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXIgbm93IHNldCBfX2xvYWRlcl9fIHdoZW4KKyAgaXQgaGFzIGEgdmFsdWUgb2YgTm9uZSBvciB0aGUgYXR0cmlidXRlIGRvZXNuJ3QgZXhpc3QuCisKKy0gSXNzdWUgIzE3MDMyOiBUaGUgImdsb2JhbCIgaW4gdGhlICJOYW1lRXJyb3I6IGdsb2JhbCBuYW1lICd4JyBpcyBub3QgZGVmaW5lZCIKKyAgZXJyb3IgbWVzc2FnZSBoYXMgYmVlbiByZW1vdmVkLiAgUGF0Y2ggYnkgUmFtIFJhY2h1bS4KIAogLSBJc3N1ZSAjMTgwODA6IFdoZW4gYnVpbGRpbmcgYSBDIGV4dGVuc2lvbiBtb2R1bGUgb24gT1MgWCwgaWYgdGhlIGNvbXBpbGVyCiAgIGlzIG92ZXJyaWRlbiB3aXRoIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdXNlIHRoZSBuZXcgY29tcGlsZXIgYXMKQEAgLTYwNCwzMSArMjA0MCw3MTggQEAKIC0gSXNzdWUgIzE4MTEzOiBGaXhlZCBhIHJlZmNvdW50IGxlYWsgaW4gdGhlIGN1cnNlcy5wYW5lbCBtb2R1bGUncwogICBzZXRfdXNlcnB0cigpIG1ldGhvZC4gIFJlcG9ydGVkIGJ5IEF0c3VvIElzaGltb3RvLgogCi0tIElzc3VlICMxODg0OTogRml4ZWQgYSBXaW5kb3dzLXNwZWNpZmljIHRlbXBmaWxlIGJ1ZyB3aGVyZSBjb2xsaXNpb24gd2l0aCBhbgotICBleGlzdGluZyBkaXJlY3RvcnkgY2F1c2VkIG1rc3RlbXAgYW5kIHJlbGF0ZWQgQVBJcyB0byBmYWlsIGluc3RlYWQgb2YKLSAgcmV0cnlpbmcuIFJlcG9ydCBhbmQgZml4IGJ5IFZsYWQgU2hjaGVyYmluYS4KKy0gSW1wbGVtZW50IFBFUCA0NDMgIlNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyIuCiAKLS0gSXNzdWUgIzE5NDAwOiBQcmV2ZW50IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGQgZmFpbHVyZXMgd2l0aCBYY29kZSA1IG9uIE9TIFgKLSAgMTAuOCsgd2hlbiB1c2luZyBhIHVuaXZlcnNhbCBQeXRob24gdGhhdCBpbmNsdWRlZCBhIFBQQyBhcmNoaXRlY3R1cmUsCi0gIHN1Y2ggYXMgd2l0aCBhIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgYmluYXJ5IGluc3RhbGxlci4KKy0gSW1wbGVtZW50IFBFUCA0MzUgIkFkZGluZyBhbiBFbnVtIHR5cGUgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5Ii4KIAotQyBBUEkKLS0tLS0tCistIElzc3VlICMxNTU5NjogRmFzdGVyIHBpY2tsaW5nIG9mIHVuaWNvZGUgc3RyaW5ncy4KIAotLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyB3aXRoIGEgaGVscGVyIGZ1bmN0aW9uIGluIGltcG9ydGxpYiB1c2VkCi0gIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKy0gSXNzdWUgIzE3NTcyOiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hpbGUgcGFzc2luZyBiYWQgZGlyZWN0aXZlcyB0bworICB0aW1lLnN0cnB0aW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTc0MzU6IHRocmVhZGluZy5UaW1lcidzIF9faW5pdF9fIG1ldGhvZCBubyBsb25nZXIgdXNlcyBtdXRhYmxlCisgIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgYXJncyBhbmQga3dhcmdzIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE3NTI2OiBmaXggYW4gSW5kZXhFcnJvciByYWlzZWQgd2hpbGUgcGFzc2luZyBjb2RlIHdpdGhvdXQgZmlsZW5hbWUgdG8KKyAgaW5zcGVjdC5maW5kc291cmNlKCkuICBJbml0aWFsIHBhdGNoIGJ5IFR5bGVyIERveWxlLgorCistIElzc3VlICMxNzU0MDogQWRkZWQgc3R5bGUgdG8gZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYnkgZGljdC4KKworLSBJc3N1ZSAjMTY2OTI6IFRoZSBzc2wgbW9kdWxlIG5vdyBzdXBwb3J0cyBUTFMgMS4xIGFuZCBUTFMgMS4yLiAgSW5pdGlhbAorICBwYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxNzAyNTogbXVsdGlwcm9jZXNzaW5nOiBSZWR1Y2UgUXVldWUgYW5kIFNpbXBsZVF1ZXVlIGNvbnRlbnRpb24uCisKKy0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCisgIGljZXdlYXNlbCwgaWNlYXBlLgorCistIElzc3VlICMxNzE1MDogcHByaW50IG5vdyB1c2VzIGxpbmUgY29udGludWF0aW9ucyB0byB3cmFwIGxvbmcgc3RyaW5nCisgIGxpdGVyYWxzLgorCistIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKKyAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQorICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCisgIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgorCistIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bworICBmaWxlQ29uZmlnKCkuCisKKy0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQorICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCisKKy0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKKyAgKENUUkwrYykuCisKKy0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KKyAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCisgIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KKworLSBJc3N1ZSAjMTY5OTc6IHVuaXR0ZXN0LlRlc3RDYXNlIG5vdyBwcm92aWRlcyBhIHN1YlRlc3QoKSBjb250ZXh0IG1hbmFnZXIKKyAgdG8gcHJvY2VkdXJhbGx5IGdlbmVyYXRlLCBpbiBhbiBlYXN5IHdheSwgc21hbGwgdGVzdCBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzE3NDg1OiBBbHNvIGRlbGV0ZSB0aGUgUmVxdWVzdCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgdGhlIGRhdGEKKyAgYXR0cmlidXRlIGlzIGRlbGV0ZWQuICAoRm9sbG93IG9uIHRvIGlzc3VlIDE2NDY0KS4KKworLSBJc3N1ZSAjMTU5Mjc6IENWUyBub3cgY29ycmVjdGx5IHBhcnNlcyBlc2NhcGVkIG5ld2xpbmVzIGFuZCBjYXJyaWFnZQorICB3aGVuIHBhcnNpbmcgd2l0aCBxdW90aW5nIHR1cm5lZCBvZmYuCisKKy0gSXNzdWUgIzE3NDY3OiBhZGQgcmVhZGxpbmUgYW5kIHJlYWRsaW5lcyBzdXBwb3J0IHRvIG1vY2tfb3BlbiBpbgorICB1bml0dGVzdC5tb2NrLgorCistIElzc3VlICMxNzE5MjogVXBkYXRlIHRoZSBjdHlwZXMgbW9kdWxlJ3MgbGliZmZpIHRvIHYzLjAuMTMuICBUaGlzCisgIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzdGFjayBtaXNhbGlnbm1lbnQgaXNzdWUgb24geDg2IGFuZCBpc3N1ZXMgb24KKyAgc29tZSBtb3JlIHJlY2VudCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzg4NjI6IEZpeGVkIGN1cnNlcyBjbGVhbnVwIHdoZW4gZ2V0a2V5IGlzIGludGVycnB1dGVkIGJ5IGEgc2lnbmFsLgorCistIElzc3VlICMxNzQ0MzogaW1hcGxpYi5JTUFQNF9zdHJlYW0gd2FzIHVzaW5nIHRoZSBkZWZhdWx0IHVuYnVmZmVyZWQgSU8KKyAgaW4gc3VicHJvY2VzcywgYnV0IHRoZSBpbWFwIGNvZGUgYXNzdW1lcyBidWZmZXJlZCBJTy4gIEluIFB5dGhvbjIgdGhpcworICB3b3JrZWQgYnkgYWNjaWRlbnQuICBJTUFQNF9zdHJlYW0gbm93IGV4cGxpY2l0bHkgdXNlcyBidWZmZXJlZCBJTy4KKworLSBJc3N1ZSAjMTc0NzY6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB1bmRvY3VtZW50ZWQgcHlkb2MKKyAgJ2FsbG1ldGhvZHMnOyBpdCB3YXMgbWlzc2luZyB1bmJvdW5kIG1ldGhvZHMgb24gdGhlIGNsYXNzLgorCistIElzc3VlICMxNzQ3NDogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgb2YgUmVxdWVzdCBjbGFzcy4KKworLSBJc3N1ZSAjMTY3MDk6IHVuaXR0ZXN0IGRpc2NvdmVyIG9yZGVyIGlzIG5vLWxvbmdlciBmaWxlc3lzdGVtIHNwZWNpZmljLiBQYXRjaAorICBieSBKZWZmIFJhbW5hbmkuCisKKy0gVXNlIHRoZSBIVFRQUyBQeVBJIHVybCBmb3IgdXBsb2FkLCBvdmVycmlkaW5nIGFueSBwbGFpbiBIVFRQIFVSTCBpbiBweXBpcmMuCisKKy0gSXNzdWUgIzUwMjQ6IHNuZGhkci53aGljaGhkciBub3cgcmV0dXJucyB0aGUgZnJhbWUgY291bnQgZm9yIFdBViBmaWxlcworICByYXRoZXIgdGhhbiAtMS4KKworLSBJc3N1ZSAjMTc0NjA6IFJlbW92ZSB0aGUgc3RyaWN0IGFyZ3VtZW50IG9mIEhUVFBDb25uZWN0aW9uIGFuZCByZW1vdmluZyB0aGUKKyAgRGVwcmVjYXRpb25XYXJuaW5nIGJlaW5nIGlzc3VlZCBmcm9tIDMuMiBvbndhcmRzLgorCistIElzc3VlICMxNjg4MDogRG8gbm90IGFzc3VtZSBfaW1wLmxvYWRfZHluYW1pYygpIGlzIGRlZmluZWQgaW4gdGhlIGltcCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2Mzg5OiBGaXhlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uIDMuMSBpbiB0aGUKKyAgY2FjaGluZyBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIEFkZGVkIG1pc3NpbmcgRmVlZFBhcnNlciBhbmQgQnl0ZXNGZWVkUGFyc2VyIHRvIGVtYWlsLnBhcnNlci5fX2FsbF9fLgorCistIElzc3VlICMxNzQzMTogRml4IG1pc3NpbmcgaW1wb3J0IG9mIEJ5dGVzRmVlZFBhcnNlciBpbiBlbWFpbC5wYXJzZXIuCisKKy0gSXNzdWUgIzEyOTIxOiBodHRwLnNlcnZlcidzIHNlbmRfZXJyb3IgdGFrZXMgYW4gZXhwbGFpbiBhcmd1bWVudCB0byBzZW5kIG1vcmUKKyAgaW5mb3JtYXRpb24gaW4gcmVzcG9uc2UuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IEthcmwuCisKKy0gSXNzdWUgIzE3NDE0OiBBZGQgdGltZWl0LCByZXBlYXQsIGFuZCBkZWZhdWx0X3RpbWVyIHRvIHRpbWVpdC5fX2FsbF9fLgorCistIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAorICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgorCistIElzc3VlICMxNzA5OTogSGF2ZSBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByYWlzZSBWYWx1ZUVycm9yIHdoZW4gX19sb2FkZXJfXworICBpcyBub3Qgc2V0LCBoYXJtb25pemluZyB3aXRoIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIE5vbmUuCisKKy0gRXhwb3NlIHRoZSBPX1BBVEggY29uc3RhbnQgaW4gdGhlIG9zIG1vZHVsZSBpZiBpdCBpcyBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE3MzY4OiBGaXggYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgUHl0aG9uIEpTT04gZGVjb2RlciB0aGF0IGNhdXNlZAorICBhIGZhaWx1cmUgd2hpbGUgZGVjb2RpbmcgZW1wdHkgb2JqZWN0IGxpdGVyYWxzIHdoZW4gb2JqZWN0X3BhaXJzX2hvb2sgd2FzCisgIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTczODU6IEZpeCBxdWFkcmF0aWMgYmVoYXZpb3IgaW4gdGhyZWFkaW5nLkNvbmRpdGlvbi4gIFRoZSBGSUZPCisgIHF1ZXVlIG5vdyB1c2VzIGEgZGVxdWUgaW5zdGVhZCBvZiBhIGxpc3QuCisKKy0gSXNzdWUgIzE1ODA2OiBBZGQgY29udGV4dGxpYi5pZ25vcmUoKS4gIFRoaXMgY3JlYXRlcyBhIGNvbnRleHQgbWFuYWdlciB0bworICBpZ25vcmUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMsIHJlcGxhY2luZyB0aGUgImV4Y2VwdCBTb21lRXhjZXB0aW9uOiBwYXNzIiBpZGlvbS4KKworLSBJc3N1ZSAjMTQ2NDU6IFRoZSBlbWFpbCBnZW5lcmF0b3IgY2xhc3NlcyBub3cgcHJvZHVjZSBvdXRwdXQgdXNpbmcgdGhlCisgIHNwZWNpZmllZCBsaW5lc2VwIHRocm91Z2hvdXQuICBQcmV2aW91c2x5IGlmIHRoZSBwcm9sb2csIGVwaWxvZywgb3IKKyAgYm9keSB3ZXJlIHN0b3JlZCB3aXRoIGEgZGlmZmVyZW50IGxpbmVzZXAsIHRoYXQgbGluZXNlcCB3YXMgdXNlZC4gIFRoaXMKKyAgZml4IGNvcnJlY3RzIGFuIFJGQyBub24tY29tcGxpYW5jZSBpc3N1ZSB3aXRoIHNtdHBsaWIuc2VuZF9tZXNzYWdlLgorCistIElzc3VlICMxNzI3ODogRml4IGEgY3Jhc2ggaW4gaGVhcHEuaGVhcHB1c2goKSBhbmQgaGVhcHEuaGVhcHBvcCgpIHdoZW4KKyAgdGhlIGxpc3QgaXMgYmVpbmcgcmVzaXplZCBjb25jdXJyZW50bHkuCisKKy0gSXNzdWUgIzE2OTYyOiBVc2UgZ2V0ZGVudHM2NCBpbnN0ZWFkIG9mIHRoZSBvYnNvbGV0ZSBnZXRkZW50cyBzeXNjYWxsCisgIGluIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBvbiBMaW51eC4KKworLSBJc3N1ZSAjMTY5MzU6IHVuaXR0ZXN0IG5vdyBjb3VudHMgdGhlIG1vZHVsZSBhcyBza2lwcGVkIGlmIGl0IHJhaXNlcyBTa2lwVGVzdCwKKyAgaW5zdGVhZCBvZiBjb3VudGluZyBpdCBhcyBhbiBlcnJvci4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTcwMTg6IE1ha2UgUHJvY2Vzcy5qb2luKCkgcmV0cnkgaWYgb3Mud2FpdHBpZCgpIGZhaWxzIHdpdGggRUlOVFIuCisKKy0gSXNzdWUgIzE3MjIzOiBhcnJheSBtb2R1bGU6IEZpeCBhIGNyYXNoZXIgd2hlbiBjb252ZXJ0aW5nIGFuIGFycmF5IGNvbnRhaW5pbmcKKyAgaW52YWxpZCBjaGFyYWN0ZXJzIChvdXRzaWRlIHJhbmdlIFtVKzAwMDA7IFUrMTBmZmZmXSkgdG8gVW5pY29kZToKKyAgcmVwcihhcnJheSksIHN0cihhcnJheSkgYW5kIGFycmF5LnRvdW5pY29kZSgpLiBQYXRjaCB3cml0dGVuIGJ5IE1hbnVlbCBKYWNvYi4KKworLSBJc3N1ZSAjMTcxOTc6IHByb2ZpbGUvY1Byb2ZpbGUgbW9kdWxlcyByZWZhY3RvcmVkIHNvIHRoYXQgY29kZSBvZiBydW4oKSBhbmQKKyAgcnVuY3R4KCkgdXRpbGl0eSBmdW5jdGlvbnMgaXMgbm90IGR1cGxpY2F0ZWQgaW4gYm90aCBtb2R1bGVzLgorCistIElzc3VlICMxNDcyMDogc3FsaXRlMzogQ29udmVydCBkYXRldGltZSBtaWNyb3NlY29uZHMgY29ycmVjdGx5LgorICBQYXRjaCBieSBMb3dlIFRoaWRlcm1hbi4KKworLSBJc3N1ZSAjMTUxMzI6IEFsbG93IGEgbGlzdCBmb3IgdGhlIGRlZmF1bHRUZXN0IGFyZ3VtZW50IG9mCisgIHVuaXR0ZXN0LlRlc3RQcm9ncmFtLiBQYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZworICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgorCistIElzc3VlICM2NjIzOiBBZGRlZCBleHBsaWNpdCBEZXByZWNhdGlvbldhcm5pbmcgZm9yIGZ0cGxpYi5uZXRyYywgd2hpY2ggaGFzCisgIGJlZW4gZGVwcmVjYXRlZCBhbmQgdW5kb2N1bWVudGVkIGZvciBhIGxvbmcgdGltZS4KKworLSBJc3N1ZSAjMTM3MDA6IEZpeCBieXRlL3N0cmluZyBoYW5kbGluZyBpbiBpbWFwbGliIGF1dGhlbnRpY2F0aW9uIHdoZW4gYW4KKyAgYXV0aG9iamVjdCBpcyBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEzMTUzOiBUa2ludGVyIGZ1bmN0aW9ucyBub3cgcmFpc2UgVGNsRXJyb3IgaW5zdGVhZCBvZiBWYWx1ZUVycm9yIHdoZW4KKyAgYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbnMgbm9uLUJNUCBjaGFyYWN0ZXIuCisKKy0gSXNzdWUgIzk2Njk6IFByb3RlY3QgcmUgYWdhaW5zdCBpbmZpbml0ZSBsb29wcyBvbiB6ZXJvLXdpZHRoIG1hdGNoaW5nIGluCisgIG5vbi1ncmVlZHkgcmVwZWF0LiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxMzE2OTogVGhlIG1heGltYWwgcmVwZXRpdGlvbiBudW1iZXIgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24gaGFzIGJlZW4KKyAgaW5jcmVhc2VkIGZyb20gNjU1MzQgdG8gMjE0NzQ4MzY0NyAob24gMzItYml0IHBsYXRmb3JtKSBvciA0Mjk0OTY3Mjk0IChvbgorICA2NC1iaXQpLgorCistIElzc3VlICMxNzE0MzogRml4IGEgbWlzc2luZyBpbXBvcnQgaW4gdGhlIHRyYWNlIG1vZHVsZS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTUyMjA6IGVtYWlsLmZlZWRwYXJzZXIncyBsaW5lIHNwbGl0dGluZyBhbGdvcml0aG0gaXMgbm93IHNpbXBsZXIgYW5kCisgIGZhc3Rlci4KKworLSBJc3N1ZSAjMTY3NDM6IEZpeCBtbWFwIG92ZXJmbG93IGNoZWNrIG9uIDMyIGJpdCBXaW5kb3dzLgorCistIElzc3VlICMxNjk5Njogd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc2h1dGlsLndoaWNoKCkgdG8gZmluZCBhCisgIHdlYi1icm93c2VyIG9uIHRoZSBleGVjdXRhYmxlIHNlYXJjaCBwYXRoLgorCistIElzc3VlICMxNjgwMDogdGVtcGZpbGUuZ2V0dGVtcGRpcigpIG5vIGxvbmdlciBsZWZ0IHRlbXBvcmFyeSBmaWxlcyB3aGVuCisgIHRoZSBkaXNrIGlzIGZ1bGwuICBPcmlnaW5hbCBwYXRjaCBieSBBbWlyIFN6ZWtlbHkuCisKKy0gSXNzdWUgIzE3MTkyOiBJbXBvcnQgbGliZmZpLTMuMC4xMi4KKworLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCisgIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgorCistIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgorCistIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCisKKy0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgorCistIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCisgIFswLCAyKm1hdGgucGldLgorCistIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgorCistIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKKyAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMzc3Mzogc3FsaXRlMy5jb25uZWN0KCkgZ2V0cyBhIG5ldyBgdXJpYCBwYXJhbWV0ZXIgdG8gcGFzcyB0aGUKKyAgZmlsZW5hbWUgYXMgYSBVUkksIGFsbG93aW5nIHRvIHBhc3MgY3VzdG9tIG9wdGlvbnMuCisKKy0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgorICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KKworLSBJc3N1ZSAjMTAzNTU6IEluIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNsYXNzIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZAorICBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIGZvciB1bnJvbGxlZCBmaWxlcy4gIE9ic29sZXRlZCBhbmQgbmV2ZXIKKyAgd29ya2luZyBvbiBQeXRob24gMyB4cmVhZGxpbmUgbWV0aG9kIG5vdyByZW1vdmVkLgorCistIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KKyAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCisgIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgorICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCisgIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCisKKy0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KKyAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCisKKy0gSXNzdWUgIzE1MzU5OiBBZGQgQ0FOX0JDTSBwcm90b2NvbCBzdXBwb3J0IHRvIHRoZSBzb2NrZXQgbW9kdWxlLiBQYXRjaCBieQorICBCcmlhbiBUaG9ybmUuCisKKy0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgorICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgorCistIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAorICBwb2xpY2llcy4KKworLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCisKKy0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgcGVybWlzc2l2ZSBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCisgIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgorCistIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgorICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBub3cgYWNjZXB0cyBieXRlcyBhbmQKKyAgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KKworLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKKyAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KKworLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgorCistIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCisgIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgorICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KKworLSBJc3N1ZSAjMTcwMTU6IFdoZW4gaXQgaGFzIGEgc3BlYywgYSBNb2NrIG9iamVjdCBub3cgaW5zcGVjdHMgaXRzIHNpZ25hdHVyZQorICB3aGVuIG1hdGNoaW5nIGNhbGxzLCBzbyB0aGF0IGFyZ3VtZW50cyBjYW4gYmUgbWF0Y2hlZCBwb3NpdGlvbmFsbHkgb3IKKyAgYnkgbmFtZS4KKworLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKKyAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgorCistIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQorICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCisKKy0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCisgIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgorCistIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgorICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQorICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgorCistIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCisgIGlzIG5hbWVkIGBgc2VsZmBgLgorCistIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAorICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCisKKy0gSGF2ZSBweV9jb21waWxlIHVzZSBpbXBvcnRsaWIgYXMgbXVjaCBhcyBwb3NzaWJsZSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uLgorICBDb2RlIG5vdyByYWlzZXMgRmlsZUV4aXN0c0Vycm9yIGlmIHRoZSBmaWxlIHBhdGggdG8gYmUgdXNlZCBmb3IgdGhlCisgIGJ5dGUtY29tcGlsZWQgZmlsZSBpcyBhIHN5bWxpbmsgb3Igbm9uLXJlZ3VsYXIgZmlsZSBhcyBhIHdhcm5pbmcgdGhhdCBpbXBvcnQKKyAgd2lsbCBub3Qga2VlcCB0aGUgZmlsZSBwYXRoIHR5cGUgaWYgaXQgd3JpdGVzIHRvIHRoYXQgcGF0aC4KKworLSBJc3N1ZSAjMTgwMDIyOiBIYXZlIHNpdGUuYWRkcGFja2FnZSgpIGNvbnNpZGVyIGFscmVhZHkga25vd24gcGF0aHMgZXZlbiB3aGVuCisgIG5vbmUgYXJlIGV4cGxpY2l0bHkgcGFzc2VkIGluLiBCdWcgcmVwb3J0IGFuZCBmaXggYnkgS2lyaWxsLgorCistIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQorICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKKyAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgorCistIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQorICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCisKKy0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKKyAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KKworLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQorICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAorICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTE1OTA1MTogR3ppcEZpbGUgbm93IHJhaXNlcyBFT0ZFcnJvciB3aGVuIHJlYWRpbmcgYSBjb3JydXB0ZWQgZmlsZQorICB3aXRoIHRydW5jYXRlZCBoZWFkZXIgb3IgZm9vdGVyLgorCistIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQorICBkZXNjcmlwdG9yIGFyZ3VtZW50LgorCistIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKKyAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgorCistIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCisgIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCisKKy0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCisgIDQgR2lCLgorCistIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKKyAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KKworLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KKworLSBJc3N1ZSAjMTUwMzE6IFJlZmFjdG9yIHNvbWUgLnB5YyBtYW5hZ2VtZW50IGNvZGUgdG8gY3V0IGRvd24gb24gY29kZQorICBkdXBsaWNhdGlvbi4gVGhhbmtzIHRvIFJvbmFuIExhbXkgZm9yIHRoZSByZXBvcnQgYW5kIHRha2luZyBhbiBpbml0aWFsIHN0YWIKKyAgYXQgdGhlIHByb2JsZW0uCisKKy0gSXNzdWUgIzE2Mzk4OiBPcHRpbWl6ZSBkZXF1ZS5yb3RhdGUoKSBzbyB0aGF0IGl0IG9ubHkgbW92ZXMgcG9pbnRlcnMKKyAgYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIHVuZGVybHlpbmcgZGF0YSB3aXRoIGluY3JlZnMgYW5kIGRlY3JlZnMuCisKKy0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KKworLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCisgIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCisgIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0CisgIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KKworLSBmY250bDogYWRkIEZfRFVQRkRfQ0xPRVhFQyBjb25zdGFudCwgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yNCsuCisKKy0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCisgIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KKworLSBJc3N1ZSAjODEwOTogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkksIHRoYW5rcworICB0byBhIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuICBQYXRjaCBieSBEYW5pZWwKKyAgQmxhY2suCisKKy0gSXNzdWUgIzE2ODYwOiBJbiB0ZW1wZmlsZSwgdXNlIE9fQ0xPRVhFQyB3aGVuIGF2YWlsYWJsZSB0byBzZXQgdGhlCisgIGNsb3NlLW9uLWV4ZWMgZmxhZyBhdG9taWNhbGx5LgorCistIElzc3VlICMxNjY3NDogcmFuZG9tLmdldHJhbmRiaXRzKCkgaXMgbm93IDIwLTQwJSBmYXN0ZXIgZm9yIHNtYWxsIGludGVnZXJzLgorCistIElzc3VlICMxNjAwOTogSlNPTiBlcnJvciBtZXNzYWdlcyBub3cgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uLgorCistIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKKyAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KKworLSBJc3N1ZSAjMTY4MzM6IEluIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLCBkbyBub3QgY29uY2F0ZW5hdGUgdGhlIHJlcXVlc3QKKyAgaGVhZGVycyBhbmQgYm9keSB3aGVuIHRoZSBwYXlsb2FkIGV4Y2VlZHMgMTYgS0IsIHNpbmNlIGl0IGNhbiBjb25zdW1lIG1vcmUKKyAgbWVtb3J5IGZvciBubyBiZW5lZml0LiAgUGF0Y2ggYnkgQmVubm8gTGVzbGllLgorCistIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgorICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKKyAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCisgIG9yZGVyIGFzIHdlbGwuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKKyAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgorICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgorCistIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgorCistIElzc3VlICMxNjc4NzogSW5jcmVhc2UgYXN5bmNvcmUgYW5kIGFzeW5jaGF0IGRlZmF1bHQgb3V0cHV0IGJ1ZmZlcnMgc2l6ZSwgdG8KKyAgZGVjcmVhc2UgQ1BVIHVzYWdlIGFuZCBpbmNyZWFzZSB0aHJvdWdocHV0LgorCistIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCisgIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxNjQ4NjogTWFrZSBhaWZjIGZpbGVzIGFjdCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCistIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKKyAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCisKKy0gSXNzdWUgIzE2NjQwOiBSdW4gbGVzcyBjb2RlIHVuZGVyIGEgbG9jayBpbiBzY2hlZCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKKyAgdGhyZWFkcy4KKworLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKKyAgbW9kaWZpYWJsZS4KKworLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKKyAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Nzg4OiBBZGQgc2FtZXN0YXQgdG8gTGliL250cGF0aC5weQorCistIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQorICBwYXRoLgorCistIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCisgIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgorCistIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgorICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKKworLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQorICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93CisgIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKKyAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCisKKy0gSXNzdWUgIzExMTc1OiBhcmdwYXJzZS5GaWxlVHlwZSBub3cgYWNjZXB0cyBlbmNvZGluZyBhbmQgZXJyb3JzCisgIGFyZ3VtZW50cy4gUGF0Y2ggYnkgTHVjYXMgTWF5c3RyZS4KKworLSBJc3N1ZSAjMTY0ODg6IGVwb2xsKCkgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgYHdpdGhgIHN0YXRlbWVudC4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KKyAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCisgIFJ1bmRzdGVpbi4KKworLSBBZGQgYWJjLkFCQyBjbGFzcyB0byB1c2UgaW5oZXJpdGFuY2UgcmF0aGVyIHRoYW4gYSBkaXJlY3QgaW52b2NhdGlvbiBvZgorICBBQkNNZXRhIG1ldGFjbGFzcy4gUGF0Y2ggYnkgQnJ1bm8gRHVwdWlzLgorCistIEV4cG9zZSB0aGUgVENQX0ZBU1RPUEVOIGFuZCBNU0dfRkFTVE9QRU4gZmxhZ3MgaW4gc29ja2V0IHdoZW4gdGhleSdyZQorICBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzE1NzAxOiBBZGQgYSAuaGVhZGVycyBhdHRyaWJ1dGUgdG8gdXJsbGliLmVycm9yLkhUVFBFcnJvci4gUGF0Y2gKKyAgY29udHJpYnV0ZWQgYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQorICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgorICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKKyAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKKy0gSXNzdWUgIzEzMzkwOiBOZXcgZnVuY3Rpb24gOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAgcmV0dXJucyB0aGUKKyAgbnVtYmVyIG9mIG1lbW9yeSBibG9ja3MgY3VycmVudGx5IGFsbG9jYXRlZC4KKworLSBJc3N1ZSAjMTY2Mjg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGN0eXBlcy5yZXNpemUoKS4KKworLSBJc3N1ZSAjMTM2MTQ6IEZpeCBzZXR1cC5weSByZWdpc3RlciBmYWlsdXJlIHdpdGggaW52YWxpZCByc3QgaW4gZGVzY3JpcHRpb24uCisgIFBhdGNoIGJ5IEp1bGllbiBDb3VydGVhdSBhbmQgUGllcnJlIFBhdWwgTGVmZWJ2cmUuCisKKy0gSXNzdWUgIzEzNTEyOiBDcmVhdGUgfi8ucHlwaXJjIHNlY3VyZWx5IChDVkUtMjAxMS00OTQ0KS4gIEluaXRpYWwgcGF0Y2ggYnkKKyAgUGhpbGlwIEplbnZleSwgdGVzdGVkIGJ5IE1hZ2VpYSBhbmQgRGViaWFuLgorCistIElzc3VlICM3NzE5OiBNYWtlIGRpc3R1dGlscyBpZ25vcmUgYGAubmZzKmBgIGZpbGVzIGluc3RlYWQgb2YgY2hva2luZyBsYXRlcgorICBvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2lsZW50R2hvc3QgYW5kIEplZmYgUmFtbmFuaS4KKworLSBJc3N1ZSAjMTMxMjA6IEFsbG93IHRvIGNhbGwgcGRiLnNldF90cmFjZSgpIGZyb20gdGhyZWFkLgorICBQYXRjaCBieSBJbHlhIFNhbmRsZXIuCisKKy0gSXNzdWUgIzE2NTg1OiBNYWtlIENKSyBlbmNvZGVycyBzdXBwb3J0IGVycm9yIGhhbmRsZXJzIHRoYXQgcmV0dXJuIGJ5dGVzIHBlcgorICBQRVAgMzgzLgorCistIElzc3VlICMxMDE4MjogVGhlIHJlIG1vZHVsZSBkb2Vzbid0IHRydW5jYXRlIGluZGljZXMgdG8gMzIgYml0cyBhbnltb3JlLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjMzMzogdXNlICgiLCIsICI6ICIpIGFzIGRlZmF1bHQgc2VwYXJhdG9yIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZAorICB0byBhdm9pZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKKyAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKKyAgcGFzc2VkIGVudW1lcmF0ZSgpLgorCistIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAorICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjQyMzogdXJsbGliLnJlcXVlc3Qgbm93IGhhcyBzdXBwb3J0IGZvciBgYGRhdGE6YGAgVVJMcy4gIFBhdGNoIGJ5CisgIE1hdGhpYXMgUGFuemVuYsO2Y2suCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuc3RscygpIHRvIHN3aXRjaCBhIGNsZWFyLXRleHQgUE9QMyBzZXNzaW9uIGludG8KKyAgYW4gZW5jcnlwdGVkIFBPUDMgc2Vzc2lvbiwgb24gc3VwcG9ydGVkIHNlcnZlcnMuICBQYXRjaCBieSBMb3JlbnpvIENhdHVjY2kuCisKKy0gSXNzdWUgIzQ0NzM6IEFkZCBhIFBPUDMuY2FwYSgpIG1ldGhvZCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQKKyAgYnkgdGhlIFBPUDMgc2VydmVyLiAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICM0NDczOiBFbnN1cmUgdGhlIHNvY2tldCBpcyBzaHV0ZG93biBjbGVhbmx5IGluIFBPUDMuY2xvc2UoKS4KKyAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICMxNjUyMjogYWRkZWQgRkFJTF9GQVNUIGZsYWcgdG8gZG9jdGVzdC4KKworLSBJc3N1ZSAjMTU2Mjc6IEFkZCB0aGUgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLnNvdXJjZV90b19jb2RlKCkgbWV0aG9kLgorCistIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCisgIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0NjMxOiBBZGQgYSBuZXcgOmNsYXNzOmB3ZWFrcmVmLldlYWtNZXRob2RgIHRvIHNpbXVsYXRlIHdlYWsKKyAgcmVmZXJlbmNlcyB0byBib3VuZCBtZXRob2RzLgorCistIElzc3VlICMxNjQ2OTogRml4IGV4Y2VwdGlvbnMgZnJvbSBmbG9hdCAtPiBGcmFjdGlvbiBhbmQgRGVjaW1hbCAtPiBGcmFjdGlvbgorICBjb252ZXJzaW9ucyBmb3Igc3BlY2lhbCB2YWx1ZXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRob3NlIGZvciBmbG9hdCAtPiBpbnQKKyAgYW5kIERlY2ltYWwgLT4gaW50LiAgUGF0Y2ggYnkgQWxleGV5IEthY2hheWV2LgorCistIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTI0Mjg6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0b29scy5wYXJ0aWFsKCkuCisgIFBhdGNoIGJ5IEJyaWFuIFRob3JuZS4KKworLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKKyAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KKworLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKKyAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KKworLSBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm93IHJhaXNlcyBpdHMgb3duIFN1YnByb2Nlc3NFcnJvciBpbnN0ZWFkIG9mIGEKKyAgUnVudGltZUVycm9yIGluIHZhcmlvdXMgZXJyb3Igc2l0dWF0aW9ucyB3aGljaCBzaG91bGQgbm90IG5vcm1hbGx5IGhhcHBlbi4KKworLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycworICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KKworLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90CisgIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgorCistIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcworICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAorICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KKworLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQorICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KKyAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgorICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCisKKy0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKKyAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCisKKy0gSXNzdWUgIzE1NjQxOiBDbGVhbiB1cCBkZXByZWNhdGVkIGNsYXNzZXMgZnJvbSBpbXBvcnRsaWIKKyAgUGF0Y2ggYnkgVGFyYXMgTHlhcHVuLgorCistIElzc3VlICMxNjM1MDogemxpYi5kZWNvbXByZXNzb2JqKCkuZGVjb21wcmVzcygpIG5vdyBhY2N1bXVsYXRlcyBkYXRhIGZyb20KKyAgc3VjY2Vzc2l2ZSBjYWxscyBhZnRlciBFT0YgaW4gdW51c2VkX2RhdGEsIGluc3RlYWQgb2Ygb25seSBzYXZpbmcgdGhlIGFyZ3VtZW50CisgIHRvIHRoZSBsYXN0IGNhbGwuIGRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG5vdyBjb3JyZWN0bHkgc2V0cyB1bnVzZWRfZGF0YSBhbmQKKyAgdW5jb25zdW1lZF90YWlsLiBBIGJ1ZyBpbiB0aGUgaGFuZGxpbmcgb2YgTWVtb3J5RXJyb3Igd2hlbiBzZXR0aW5nIHRoZQorICB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlIGhhcyBhbHNvIGJlZW4gZml4ZWQuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyNzU5OiBzcmVfcGFyc2Ugbm93IHJhaXNlcyBhIHByb3BlciBlcnJvciB3aGVuIHRoZSBuYW1lIG9mIHRoZSBncm91cAorICBpcyBtaXNzaW5nLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjE1MjogZml4IHRva2VuaXplIHRvIGlnbm9yZSB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgd2hlbgorICBubyBuZXdsaW5lIGlzIGZvdW5kLiAgUGF0Y2ggYnkgTmVkIEJhdGNoZWxkZXIuCisKKy0gSXNzdWUgIzE2Mjg0OiBQcmV2ZW50IGtlZXBpbmcgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byB3b3JrZXIgZnVuY3Rpb25zCisgIGluIGNvbmN1cnJlbnQuZnV0dXJlcyBUaHJlYWRQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzE2MjMwOiBGaXggYSBjcmFzaCBpbiBzZWxlY3Quc2VsZWN0KCkgd2hlbiBvbmUgdGhlIGxpc3RzIGNoYW5nZXMKKyAgc2l6ZSB3aGlsZSBpdGVyYXRlZCBvbi4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjI4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgd2hlcmUgYSBsaXN0IGNoYW5nZXMgc2l6ZQorICB3aGlsZSBpdCBpcyBiZWluZyBlbmNvZGVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNTE6IE5ldyBmdW5jdGlvbiBnYy5nZXRfc3RhdHMoKSByZXR1cm5zIHBlci1nZW5lcmF0aW9uIGNvbGxlY3Rpb24KKyAgc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTQ4OTc6IEVuaGFuY2UgZXJyb3IgbWVzc2FnZXMgb2Ygc3RydWN0LnBhY2sgYW5kCisgIHN0cnVjdC5wYWNrX2ludG8uIFBhdGNoIGJ5IE1hdHRpIE3DpGtpLgorCistIElzc3VlICMxNjMxNjogbWltZXR5cGVzIG5vdyByZWNvZ25pemVzIHRoZSAueHogYW5kIC50eHogKC50YXIueHopIGV4dGVuc2lvbnMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKKyAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KKyAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgorCistIElzc3VlICMxNjMwNTogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IG9jY3VycmluZyB3aGVuIGludGVycnVwdGluZworICBtYXRoLmZhY3RvcmlhbC4KKworLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCisgIGV4dGVuc2lvbnMgaW4gdmVudnMuCisKKy0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisKKy0gSXNzdWUgIzE2MzAxOiBGaXggdGhlIGxvY2FsaG9zdCB2ZXJpZmljYXRpb24gaW4gdXJsbGliL3JlcXVlc3QucHkgZm9yIGZpbGU6Ly8KKyAgdXJscy4KKworLSBJc3N1ZSAjMTYyNTA6IEZpeCB0aGUgaW52b2NhdGlvbnMgb2YgVVJMRXJyb3Igd2hpY2ggaGFkIG1pc3BsYWNlZCBmaWxlbmFtZQorICBhdHRyaWJ1dGUgZm9yIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTA4MzY6IEZpeCBleGNlcHRpb24gcmFpc2VkIHdoZW4gZmlsZSBub3QgZm91bmQgaW4gdXJscmV0cmlldmUKKyAgSW5pdGlhbCBwYXRjaCBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgorCistIElzc3VlICMxMjY5MjogRml4IHJlc291cmNlIGxlYWsgaW4gdXJsbGliLnJlcXVlc3Qgd2hlbiB0YWxraW5nIHRvIGFuIEhUVFAKKyAgc2VydmVyIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIgaW4gaXRzIHJlc3BvbnNlcy4KKworLSBJc3N1ZSAjMTIwMzQ6IEZpeCBib2d1cyBjYWNoaW5nIG9mIHJlc3VsdCBpbiBjaGVja19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuCisgIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgYGx6bWEuTFpNQUZpbGVgLgorCistIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCisgIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgorCistIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCisgIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCisKKy0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCisgIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KKworLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQorCistIElzc3VlICMxNjA4ODogQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcidzIHNlbmRfZXJyb3IgbWV0aG9kIGluY2x1ZGVzIGEKKyAgQ29udGVudC1MZW5ndGggaGVhZGVyIGluIGl0J3MgcmVzcG9uc2Ugbm93LiBQYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTYxMTQ6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgcHJvdmlkZXMgYSBtaXNsZWFkaW5nIGVycm9yCisgIG1lc3NhZ2Ugc3RhdGluZyB0aGF0IGFyZ3NbMF0gZGlkIG5vdCBleGlzdCB3aGVuIGVpdGhlciB0aGUgY3dkIG9yIGV4ZWN1dGFibGUKKyAga2V5d29yZCBhcmd1bWVudHMgc3BlY2lmaWVkIGEgcGF0aCB0aGF0IGRpZCBub3QgZXhpc3QuCisKKy0gSXNzdWUgIzE2MTY5OiBGaXggY3R5cGVzLldpbkVycm9yKCkncyBjb25mdXNpb24gYmV0d2VlbiBlcnJubyBhbmQgd2luZXJyb3IuCisKKy0gSXNzdWUgIzE0OTI3MDQ6IHNodXRpbC5jb3B5ZmlsZSgpIHJhaXNlcyBhIGRpc3RpbmN0IFNhbWVGaWxlRXJyb3Igbm93IGlmCisgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxMzg5NjogTWFrZSBzaGVsZiBpbnN0YW5jZXMgd29yayB3aXRoICd3aXRoJyBhcyBjb250ZXh0IG1hbmFnZXJzLgorICBPcmlnaW5hbCBwYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxNTQxNzogQWRkIHN1cHBvcnQgZm9yIGNzaCBhbmQgZmlzaCBpbiB2ZW52IGFjdGl2YXRpb24gc2NyaXB0cy4KKworLSBJc3N1ZSAjMTQzNzc6IEVsZW1lbnRUcmVlLndyaXRlIGFuZCBzb21lIG9mIHRoZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIGhhdmUKKyAgYSBuZXcgcGFyYW1ldGVyIC0gKnNob3J0X2VtcHR5X2VsZW1lbnRzKi4gSXQgY29udHJvbHMgaG93IGVsZW1lbnRzIHdpdGggbm8KKyAgY29udGVudHMgYXJlIGVtaXR0ZWQuCisKKy0gSXNzdWUgIzE2MDg5OiBBbGxvdyBFbGVtZW50VHJlZS5UcmVlQnVpbGRlciB0byB3b3JrIGFnYWluIHdpdGggYSBub24tRWxlbWVudAorICBlbGVtZW50X2ZhY3RvcnkgKGZpeGVzIGEgcmVncmVzc2lvbiBpbiBTaW1wbGVUQUwpLgorCistIElzc3VlICM5NjUwOiBMaXN0IGNvbW1vbmx5IHVzZWQgZm9ybWF0IGNvZGVzIGluIHRpbWUuc3RyZnRpbWUgYW5kCisgIHRpbWUuc3RycHRpbWUgZG9jc3R0aW5ncy4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pa2UgSG95LgorCistIElzc3VlICMxNjAzNDogRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGluIHRoZSBuZXcgYGJ6Mi5CWjJGaWxlYAorICBpbXBsZW1lbnRhdGlvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBgcHR5LnNwYXduKClgIG5vdyByZXR1cm5zIHRoZSBjaGlsZCBwcm9jZXNzIHN0YXR1cyByZXR1cm5lZCBieSBgb3Mud2FpdHBpZCgpYC4KKworLSBJc3N1ZSAjMTU3NTY6IGBzdWJwcm9jZXNzLnBvbGwoKWAgbm93IHByb3Blcmx5IGhhbmRsZXMgYGVycm5vLkVDSElMRGAgdG8KKyAgcmV0dXJuIGEgcmV0dXJuY29kZSBvZiAwIHdoZW4gdGhlIGNoaWxkIGhhcyBhbHJlYWR5IGV4aXRlZCBvciBjYW5ub3QgYmUgd2FpdGVkCisgIG9uLgorCistIElzc3VlICMxNTMyMzogSW1wcm92ZSBmYWlsdXJlIG1lc3NhZ2Ugb2YgYE1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKWAuCisKKy0gSXNzdWUgIzE2MDY0OiBgYHVuaXR0ZXN0IC1tYGAgY2xhaW1zIGV4ZWN1dGFibGUgaXMgInB5dGhvbiIsIG5vdCAicHl0aG9uMyIuCisKKy0gSXNzdWUgIzEyMzc2OiBQYXNzIG9uIHBhcmFtZXRlcnMgaW4gYFRleHRUZXN0UmVzdWx0Ll9faW5pdF9fKClgIHN1cGVyIGNhbGwuCisKKy0gSXNzdWUgIzE1MjIyOiBJbnNlcnQgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UgaW4gbWJveCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE2MDEzOiBGaXggYGNzdi5SZWFkZXJgIHBhcnNpbmcgaXNzdWUgd2l0aCBlbmRpbmcgcXVvdGUgY2hhcmFjdGVycy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0MjE6IEZpeCBhbiBPdmVyZmxvd0Vycm9yIGluIGBDYWxlbmRhci5pdGVybW9udGhkYXRlcygpYCBhZnRlcgorICBgZGF0ZXRpbWUuTUFYWUVBUmAuICBQYXRjaCBieSBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxNjExMjogcGxhdGZvcm0uYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGNvcnJlY3RseSBlc2NhcGUgYXJndW1lbnQgdG8KKyAgL3Vzci9iaW4vZmlsZS4gIFBhdGNoIGJ5IERhdmlkIEJlbmphbWluLgorCistIElzc3VlICMxNTk3MDogYHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgbm93IHNlcmlhbGl6ZXMgY29ycmVjdGx5IHRoZSBlbXB0eSBIVE1MCisgIGVsZW1lbnRzICdtZXRhJyBhbmQgJ3BhcmFtJy4KKworLSBJc3N1ZSAjMTU4NDI6IFRoZSBgU29ja2V0SU8ue3JlYWRhYmxlLHdyaXRhYmxlLHNlZWthYmxlfWAgbWV0aG9kcyBub3cgcmFpc2UKKyAgVmFsdWVFcnJvciB3aGVuIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1ODc2OiBGaXggYSByZWZsZWFrIGluIHRoZSBgY3Vyc2VzYCBtb2R1bGU6IHdpbmRvdy5lbmNvZGluZy4KKworLSBJc3N1ZSAjMTU4ODE6IEZpeCBgYXRleGl0YCBob29rIGluIGBtdWx0aXByb2Nlc3NpbmdgLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXMKKyAgTWNEb25vdWdoLgorCistIElzc3VlICMxNTg0MTogVGhlIHJlYWRhYmxlKCksIHdyaXRhYmxlKCkgYW5kIHNlZWthYmxlKCkgbWV0aG9kcyBvZgorICBgaW8uQnl0ZXNJT2AgYW5kIGBpby5TdHJpbmdJT2Agb2JqZWN0cyBub3cgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBvYmplY3QKKyAgaGFzIGJlZW4gY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KKworLSBJc3N1ZSAjMTU0NDc6IFVzZSBgc3VicHJvY2Vzcy5ERVZOVUxMYCBpbiB3ZWJicm93c2VyLCBpbnN0ZWFkIG9mIG9wZW5pbmcKKyAgYG9zLmRldm51bGxgIGV4cGxpY2l0bHkgYW5kIGxlYXZpbmcgaXQgb3Blbi4KKworLSBJc3N1ZSAjMTU1MDk6IGB3ZWJicm93c2VyLlVuaXhCcm93c2VyYCBubyBsb25nZXIgcGFzc2VzIGVtcHR5IGFyZ3VtZW50cyB0bworICBQb3BlbiB3aGVuIGBgJWFjdGlvbmBgIHN1YnN0aXR1dGlvbnMgcHJvZHVjZSBlbXB0eSBzdHJpbmdzLgorCistIElzc3VlICMxMjc3NiwgaXNzdWUgIzExODM5OiBDYWxsIGBhcmdwYXJzZWAgdHlwZSBmdW5jdGlvbiAoc3BlY2lmaWVkIGJ5CisgIGFkZF9hcmd1bWVudCkgb25seSBvbmNlLiBCZWZvcmUsIHRoZSB0eXBlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdHdpY2UgaW4gdGhlCisgIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgd2FzIHNwZWNpZmllZCBhbmQgdGhlIGFyZ3VtZW50IHdhcyBnaXZlbiBhcyB3ZWxsLiAgVGhpcworICB3YXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBmb3IgdGhlIEZpbGVUeXBlIHR5cGUsIGFzIGEgZGVmYXVsdCBmaWxlIHdvdWxkCisgIGFsd2F5cyBiZSBvcGVuZWQsIGV2ZW4gaWYgYSBmaWxlIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjMTU5MDY6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UgY2F1c2VkIGJ5IHRoZSBwcmVjZWRpbmcgY2hhbmdlLAorICB3aGVuIGBgYWN0aW9uPSdhcHBlbmQnYGAsIGBgdHlwZT0nc3RyJ2BgIGFuZCBgYGRlZmF1bHQ9W11gYC4KKworLSBJc3N1ZSAjMTYxMTM6IEFkZGVkIHNoYTMgbW9kdWxlIGJhc2VkIG9uIHRoZSBLZWNjYWsgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uCisgIDMuMi4gVGhlIGBoYXNobGliYCBtb2R1bGUgaGFzIGZvdXIgYWRkaXRpb25hbCBoYXNoIGFsZ29yaXRobXM6IGBzaGEzXzIyNGAsCisgIGBzaGEzXzI1NmAsIGBzaGEzXzM4NGAgYW5kIGBzaGEzXzUxMmAuIEFzIHBhcnQgb2YgdGhlIHBhdGNoIHNvbWUgY29tbW9uCisgIGNvZGUgd2FzIG1vdmVkIGZyb20gX2hhc2hvcGVuc3NsLmMgdG8gaGFzaGxpYi5oLgorCistIGN0eXBlcy5jYWxsX2NvbW1ldGhvZCB3YXMgcmVtb3ZlZCwgc2luY2UgaXRzIG9ubHkgdXNhZ2Ugd2FzIGluIHRoZSBkZWZ1bmN0CisgIHNhbXBsZXMgZGlyZWN0b3J5LgorCistIElzc3VlICMxNjY5MjogQWRkZWQgVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0IGZvciB0aGUgc3NsIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE2ODMyOiBhZGQgYWJjLmdldF9jYWNoZV90b2tlbigpIHRvIGV4cG9zZSBjYWNoZSB2YWxpZGl0eSBjaGVja2luZworICBzdXBwb3J0IGluIEFCQ01ldGEuCiAKIElETEUKIC0tLS0KIAotLSBJc3N1ZSAjMTg4NzM6IElETEUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudAotICBsaW5lcy4KLQotLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KLQotLSBJc3N1ZSAjMTg0ODk6IEFkZCB0ZXN0cyBmb3IgU2VhcmNoRW5naW5lLiBPcmlnaW5hbCBwYXRjaCBieSBQaGlsIFdlYnN0ZXIuCi0KIC0gSXNzdWUgIzE4NDI5OiBGb3JtYXQgLyBGb3JtYXQgUGFyYWdyYXBoLCBub3cgd29ya3Mgd2hlbiBjb21tZW50IGJsb2NrcwogICBhcmUgc2VsZWN0ZWQuIEFzIHdpdGggdGV4dCBibG9ja3MsIHRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBzZWxlY3Rpb24KICAgb25seSBpbmNsdWRlcyBjb21wbGV0ZSBsaW5lcy4KQEAgLTY2MCwzOCArMjc4Myw3MyBAQAogCiAtIElzc3VlICMxNDE0NjogSGlnaGxpZ2h0IHNvdXJjZSBsaW5lIHdoaWxlIGRlYnVnZ2luZyBvbiBXaW5kb3dzLgogCistIElzc3VlICMxNzgzODogQWxsb3cgc3lzLnN0ZGluIHRvIGJlIHJlYXNzaWduZWQuCisKKy0gSXNzdWUgIzEzNDk1OiBBdm9pZCBsb2FkaW5nIHRoZSBjb2xvciBkZWxlZ2F0b3IgdHdpY2UgaW4gSURMRS4KKworLSBJc3N1ZSAjMTc3OTg6IEFsbG93IElETEUgdG8gZWRpdCBuZXcgZmlsZXMgd2hlbiBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLgorCistIElzc3VlICMxNDczNTogVXBkYXRlIElETEUgZG9jcyB0byBvbWl0ICJDb250cm9sLXogb24gV2luZG93cyIuCisKIC0gSXNzdWUgIzE3NTMyOiBBbHdheXMgaW5jbHVkZSBPcHRpb25zIG1lbnUgZm9yIElETEUgb24gT1MgWC4KICAgUGF0Y2ggYnkgR3VpbGhlcm1lIFNpbcO1ZXMuCiAKKy0gSXNzdWUgIzE3NTg1OiBGaXhlZCBJRExFIHJlZ3Jlc3Npb24uIE5vdyBjbG9zZXMgd2hlbiB1c2luZyBleGl0KCkgb3IgcXVpdCgpLgorCistIElzc3VlICMxNzY1NzogU2hvdyBmdWxsIFRrIHZlcnNpb24gaW4gSURMRSdzIGFib3V0IGRpYWxvZy4KKyAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE3NjEzOiBQcmV2ZW50IHRyYWNlYmFjayB3aGVuIHJlbW92aW5nIHN5bnRheCBjb2xvcml6ZXIgaW4gSURMRS4KKworLSBJc3N1ZSAjMTIwNzU4OTogQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgcGF0Y2ggZm9yIHJpZ2h0LWNsaWNrIG1lbnUgaW4gSURMRS4KKworLSBJc3N1ZSAjMTY4ODc6IElETEUgbm93IGFjY2VwdHMgQ2FuY2VsIGluIHRhYmlmeS91bnRhYmlmeSBkaWFsb2cgYm94LgorCistIElzc3VlICMxNzYyNTogSW4gSURMRSwgY2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCisKKy0gSXNzdWUgIzE0MjU0OiBJRExFIG5vdyBoYW5kbGVzIHJlYWRsaW5lIGNvcnJlY3RseSBhY3Jvc3Mgc2hlbGwgcmVzdGFydHMuCisKKy0gSXNzdWUgIzE3NjE0OiBJRExFIG5vIGxvbmdlciByYWlzZXMgZXhjZXB0aW9uIHdoZW4gcXVpY2tseSBjbG9zaW5nIGEgZmlsZS4KKworLSBJc3N1ZSAjNjY5ODogSURMRSBub3cgb3BlbnMganVzdCBhbiBlZGl0b3Igd2luZG93IHdoZW4gY29uZmlndXJlZCB0byBkbyBzby4KKworLSBJc3N1ZSAjODkwMDogVXNpbmcga2V5Ym9hcmQgc2hvcnRjdXRzIGluIElETEUgdG8gb3BlbiBhIGZpbGUgbm8gbG9uZ2VyCisgIHJhaXNlcyBhbiBleGNlcHRpb24uCisKKy0gSXNzdWUgIzY2NDk6IEZpeGVkIG1pc3NpbmcgZXhpdCBzdGF0dXMgaW4gSURMRS4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE3MTE0OiBJRExFIG5vdyB1c2VzIG5vbi1zdHJpY3QgY29uZmlnIHBhcnNlci4KKworLSBJc3N1ZSAjOTI5MDogSW4gSURMRSB0aGUgc3lzLnN0ZCogc3RyZWFtcyBub3cgaW1wbGVtZW50IGlvLlRleHRJT0Jhc2UKKyAgaW50ZXJmYWNlIGFuZCBzdXBwb3J0IGFsbCBtYW5kYXRvcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KKworLSBJc3N1ZSAjNTA2NjogVXBkYXRlIElETEUgZG9jcy4gUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE2ODI5OiBJRExFIHByaW50aW5nIG5vIGxvbmdlciBmYWlscyBpZiB0aGVyZSBhcmUgc3BhY2VzIG9yIG90aGVyCisgIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZmlsZSBwYXRoLgorCistIElzc3VlICMxNjQ5MTogSURMRSBub3cgcHJpbnRzIGNoYWluZWQgZXhjZXB0aW9uIHRyYWNlYmFja3MuCisKKy0gSXNzdWUgIzE2ODE5OiBJRExFIG1ldGhvZCBjb21wbGV0aW9uIG5vdyBjb3JyZWN0bHkgd29ya3MgZm9yIGJ5dGVzIGxpdGVyYWxzLgorCistIElzc3VlICMxNjUwNDogSURMRSBub3cgY2F0Y2hlcyBTeW50YXhFcnJvcnMgcmFpc2VkIGJ5IHRva2VuaXplci4gUGF0Y2ggYnkKKyAgUm9nZXIgU2Vyd3kuCisKKy0gSXNzdWUgIzE2NTExOiBVc2UgZGVmYXVsdCBJRExFIHdpZHRoIGFuZCBoZWlnaHQgaWYgY29uZmlnIHBhcmFtIGlzIG5vdCB2YWxpZC4KKyAgUGF0Y2ggU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTIwNzU4OTogQWRkIEN1dC9Db3B5L1Bhc3RlIGl0ZW1zIHRvIElETEUgcmlnaHQgY2xpY2sgQ29udGV4dCBNZW51CisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjEyMzogSURMRSAtIGRlcHJlY2F0ZSBydW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKwogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCi0KLS0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCi0gIHdhdmUuCi0KLS0gSXNzdWUgIzE4OTUyOiBGaXggcmVncmVzc2lvbiBpbiBzdXBwb3J0IGRhdGEgZG93bmxvYWRzIGludHJvZHVjZWQgd2hlbgotICB0ZXN0LnN1cHBvcnQgd2FzIGNvbnZlcnRlZCB0byBhIHBhY2thZ2UuIFJlZ3Jlc3Npb24gbm90aWNlZCBieSBaYWNoYXJ5Ci0gIFdhcmUuCi0KLS0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgotCi0tIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0Ci0gIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCi0gIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCi0gIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCi0KLS0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCi0gIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCi0gIHZlcnNpb25zLgotCiAtIElzc3VlICMxNjY2MzE4OiBBZGQgYSB0ZXN0IHRoYXQgc2h1dGlsLmNvcHl0cmVlKCkgcmV0YWlucyBkaXJlY3RvcnkKICAgcGVybWlzc2lvbnMuICBQYXRjaCBieSBDYXRoZXJpbmUgRGV2bGluLgogCi0tIElzc3VlICMxODM1NzogYWRkIHRlc3RzIGZvciBkaWN0dmlldyBzZXQgZGlmZmVyZW5jZS4KLSAgUGF0Y2ggYnkgRnJhc2VyIFR3ZWVkYWxlLgotCiAtIElzc3VlICMxODI3MzogbW92ZSB0aGUgdGVzdHMgaW4gTGliL3Rlc3QvanNvbl90ZXN0cyB0byBMaWIvdGVzdC90ZXN0X2pzb24KICAgYW5kIG1ha2UgdGhlbSBkaXNjb3ZlcmFibGUgYnkgdW5pdHRlc3QuICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKQEAgLTcyMywyODUgKzI4ODEsMTMgQEAKIAogLSBJc3N1ZSAjMTExODU6IEZpeCB0ZXN0X3dhaXQ0IHVuZGVyIEFJWC4gIFBhdGNoIGJ5IFPDqWJhc3RpZW4gU2FibMOpLgogCi0tIElzc3VlICMxNzY5MTogdGVzdF91bml2bmV3bGluZXMgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCi0gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKy0gSXNzdWUgIzE4MjA3OiBGaXggdGVzdF9zc2wgZm9yIHNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCB0aGF0IGlnbm9yZSBzZWNvbmRzCisgIGluIEFTTjFfVElNRSBmaWVsZHMuCiAKIC0gSXNzdWUgIzE4MDk0OiB0ZXN0X3V1aWQgbm8gbW9yZSByZXBvcnRzIHNraXBwZWQgdGVzdHMgYXMgcGFzc2VkLgogCi0tIElzc3VlICMxMTk5NTogdGVzdF9weWRvYyBkb2Vzbid0IGltcG9ydCBhbGwgc3lzLnBhdGggbW9kdWxlcyBhbnltb3JlLgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE5MzkyOiBEb2N1bWVudCB0aGF0IGBpbXAucmVsb2FkKClgIG5vdyBhbHNvIHJlcXVpcmVzIGBfX2xvYWRlcl9fYCB0bwotICBiZSBzZXQgb24gdGhlIG1vZHVsZSBiZWluZyByZWxvYWRlZC4KLQotLSBJc3N1ZSAjMTg3NTg6IEZpeGVkIGFuZCBpbXByb3ZlZCBjcm9zcy1yZWZlcmVuY2VzLgotCi0tIElzc3VlICMxODc0MzogRml4IHJlZmVyZW5jZXMgdG8gbm9uLWV4aXN0YW50ICJTdHJpbmdJTyIgbW9kdWxlLgotCi0tIElzc3VlICMxODc4MzogUmVtb3ZlZCBleGlzdGluZyBtZW50aW9ucyBvZiBQeXRob24gbG9uZyB0eXBlIGluIGRvY3N0cmluZ3MsCi0gIGVycm9yIG1lc3NhZ2VzIGFuZCBjb21tZW50cy4KLQotLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgotCi0tIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgotICBvYmplY3QncyBjdXN0b20gYF9faGFzaF9fKClgIG1ldGhvZC4KLQotLSBJc3N1ZSAjMTc5NTM6IE1lbnRpb24gdGhhdCB5b3Ugc2hvdWxkbid0IHJlcGxhY2Ugc3lzLm1vZHVsZXMgYW5kIGRlbGV0aW5nIGtleQotICBpdGVtcyB3aWxsIGNhdXNlIFB5dGhvbiB0byBub3QgYmUgaGFwcHkuCi0KLS0gSXNzdWUgIzE3ODQ0OiBBZGQgbGlua3MgdG8gZW5jb2RlcnMgYW5kIGRlY29kZXJzIGZvciBieXRlcy10by1ieXRlcyBjb2RlY3MuCi0KLS0gSXNzdWUgIzE0MDk3OiBpbXByb3ZlIHRoZSAiaW50cm9kdWN0aW9uIiBwYWdlIG9mIHRoZSB0dXRvcmlhbC4KLQotLSBJc3N1ZSAjMTc5Nzc6IFRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgY2FkZWZhdWx0IGFyZ3VtZW50J3MgZGVmYXVsdCB2YWx1ZQotICBpbiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgaXMgZml4ZWQgdG8gbWF0Y2ggdGhlIGNvZGUuCi0KLVRvb2xzL0RlbW9zCi0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxODg3MzogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGRldGVjdCBQeXRob24gc291cmNlCi0gIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50IGxpbmVzLgotCi0tIElzc3VlICMxODgxNzogRml4IGEgcmVzb3VyY2Ugd2FybmluZyBpbiBMaWIvYWlmYy5weSBkZW1vLgotCi0tIElzc3VlICMxODQzOTogTWFrZSBwYXRjaGNoZWNrIHdvcmsgb24gV2luZG93cyBmb3IgQUNLUywgTkVXUy4KLQotLSBJc3N1ZSAjMTg0NDg6IEZpeCBhIHR5cG8gaW4gVG9vbHMvZGVtby9laWZmZWwucHkuCi0KLS0gSXNzdWUgIzE4NDU3OiBGaXhlZCBzYXZpbmcgb2YgZm9ybXVsYXMgYW5kIGNvbXBsZXggbnVtYmVycyBpbgotICBUb29scy9kZW1vL3NzMS5weS4KLQotLSBJc3N1ZSAjMTg0NDk6IE1ha2UgVG9vbHMvZGVtby9zczEucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4gIFBhdGNoIGJ5Ci0gIEbDqXZyeSBUaGliYXVsdC4KLQotLSBJc3N1ZSAjMTUyMzk6IE1ha2UgbWtzdHJpbmdwcmVwLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCi0KLS0gSXNzdWUgIzEyOTkwOiBUaGUgIlB5dGhvbiBMYXVuY2hlciIgb24gT1NYIGNvdWxkIG5vdCBsYXVuY2ggcHl0aG9uIHNjcmlwdHMKLSAgdGhhdCBoYXZlIHBhdGhzIHRoYXQgaW5jbHVkZSB3aWRlIGNoYXJhY3RlcnMuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxOTM1NjogQXZvaWQgdXNpbmcgYSBDIHZhcmlhYmxlZCBuYW1lZCAiX3NlbGYiLCBpdCdzIGEgcmVzZXJ2ZWQKLSAgd29yZCBpbiBzb21lIEMgY29tcGlsZXJzLgotCi0tIElzc3VlICMxOTEzMDogQ29ycmVjdCBQQ2J1aWxkL3JlYWRtZS50eHQsIFB5dGhvbiAzLjMgYW5kIDMuNCByZXF1aXJlIFZTIDIwMTAuCi0KLS0gSXNzdWUgIzE2MDY3OiBBZGQgZGVzY3JpcHRpb24gaW50byBNU0kgZmlsZSB0byByZXBsYWNlIGluc3RhbGxlcidzIHRlbXBvcmFyeSBuYW1lLgotCi0tIElzc3VlICMxODI1NjogQ29tcGlsYXRpb24gZml4IGZvciByZWNlbnQgQUlYIHJlbGVhc2VzLiAgUGF0Y2ggYnkKLSAgRGF2aWQgRWRlbHNvaG4uCi0KLS0gSXNzdWUgIzE1MTcyOiBEb2N1bWVudCBOQVNNIDIuMTArIGFzIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBPcGVuU1NMIDEuMC4xCi0gIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE1ODQ6IFByb3ZpZGUgb3B0aW9ucyB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBwYXRocyBmb3IKLSAgVGNsIGFuZCBUayB3aGVuIGJ1aWxkaW5nIF90a2ludGVyLgotCi0tIElzc3VlICMxNTY2MzogVGNsL1RrIDguNS4xNSBpcyBub3cgaW5jbHVkZWQgd2l0aCB0aGUgT1MgWCAxMC42KwotICA2NC1iaXQvMzItYml0IGluc3RhbGxlciBmb3IgMTAuNisuICBJdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5Ci0gIHRvIGluc3RhbGwgYSB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mIFRjbC9UayA4LjUgdG8gd29yayBhcm91bmQgdGhlCi0gIHByb2JsZW1zIGluIHRoZSBBcHBsZS1zdXBwbGllZCBUY2wvVGsgOC41IHNoaXBwZWQgaW4gT1MgWCAxMC42Ci0gIGFuZCBsYXRlciByZWxlYXNlcy4KLQotLSBJc3N1ZSAjMTkwMTk6IENoYW5nZSB0aGUgT1MgWCBpbnN0YWxsZXIgYnVpbGQgc2NyaXB0IHRvIHVzZSBDRkxBR1MgaW5zdGVhZAotICBvZiBPUFQgZm9yIHNwZWNpYWwgYnVpbGQgb3B0aW9ucy4gIEJ5IHNldHRpbmcgT1BULCBzb21lIGNvbXBpbGVyLXNwZWNpZmljCi0gIG9wdGlvbnMgbGlrZSAtZndyYXB2IHdlcmUgb3ZlcnJpZGRlbiBhbmQgdGh1cyBub3QgdXNlZCwgd2hpY2ggY291bGQgcmVzdWx0Ci0gIGluIGJyb2tlbiBpbnRlcnByZXRlcnMgd2hlbiBidWlsZGluZyB3aXRoIGNsYW5nLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4yPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDEzLU1heS0yMDEzKgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTcyMzc6IEZpeCBjcmFzaCBpbiB0aGUgQVNDSUkgZGVjb2RlciBvbiBtNjhrLgotCi0tIElzc3VlICMxNzQwODogQXZvaWQgdXNpbmcgYW4gb2Jzb2xldGUgaW5zdGFuY2Ugb2YgdGhlIGNvcHlyZWcgbW9kdWxlIHdoZW4KLSAgdGhlIGludGVycHJldGVyIGlzIHNodXRkb3duIGFuZCB0aGVuIHN0YXJ0ZWQgYWdhaW4uCi0KLS0gSXNzdWUgIzE3ODYzOiBJbiB0aGUgaW50ZXJhY3RpdmUgY29uc29sZSwgZG9uJ3QgbG9vcCBmb3JldmVyIGlmIHRoZSBlbmNvZGluZwotICBjYW4ndCBiZSBmZXRjaGVkIGZyb20gc3RkaW4uCi0KLS0gSXNzdWUgIzE3ODY3OiBSYWlzZSBhbiBJbXBvcnRFcnJvciBpZiBfX2ltcG9ydF9fIGlzIG5vdCBmb3VuZCBpbiBfX2J1aWx0aW5zX18uCi0KLS0gSXNzdWUgIzE3ODU3OiBQcmV2ZW50IGJ1aWxkIGZhaWx1cmVzIHdpdGggcHJlLTMuNS4wIHZlcnNpb25zIG9mIHNxbGl0ZTMsCi0gIHN1Y2ggYXMgd2FzIHNoaXBwZWQgd2l0aCBDZW50b3MgNSBhbmQgTWFjIE9TIFggMTAuNC4KLQotLSBJc3N1ZSAjMTc0MTM6IHN5cy5zZXR0cmFjZSBjYWxsYmFja3Mgd2VyZSBiZWluZyBwYXNzZWQgYSBzdHJpbmcgaW5zdGVhZCBvZiBhbgotICBleGNlcHRpb24gaW5zdGFuY2UgZm9yIHRoZSAndmFsdWUnIGVsZW1lbnQgb2YgdGhlIGFyZyB0dXBsZSBpZiB0aGUgZXhjZXB0aW9uCi0gIG9yaWdpbmF0ZWQgZnJvbSBDIGNvZGU7IG5vdyBhbiBleGNlcHRpb24gaW5zdGFuY2UgaXMgYWx3YXlzIHByb3ZpZGVkLgotCi0tIElzc3VlICMxNzc4MjogRml4IHVuZGVmaW5lZCBiZWhhdmlvdXIgb24gcGxhdGZvcm1zIHdoZXJlCi0gIGBgc3RydWN0IHRpbWVzcGVjYGAncyAidHZfbnNlYyIgbWVtYmVyIGlzIG5vdCBhIEMgbG9uZy4KLQotLSBJc3N1ZSAjMTc3MTU6IEZpeCBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSByYWlzaW5nIGFuIGV4Y2VwdGlvbiBpbiBhIF9fdHJ1bmNfXwotICBtZXRob2QuCi0KLS0gSXNzdWUgIzE2NDQ3OiBGaXhlZCBwb3RlbnRpYWwgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gc2V0dGluZyBfX25hbWVfXyBvbiBhCi0gIGNsYXNzLgotCi0tIElzc3VlICMxNzY2OTogRml4IGNyYXNoIGludm9sdmluZyBmaW5hbGl6YXRpb24gb2YgZ2VuZXJhdG9ycyB1c2luZyB5aWVsZCBmcm9tLgotCi0tIElzc3VlICMxNzYxOTogTWFrZSBpbnB1dCgpIGNoZWNrIGZvciBDdHJsLUMgY29ycmVjdGx5IG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE3NjEwOiBEb24ndCByZWx5IG9uIG5vbi1zdGFuZGFyZCBiZWhhdmlvciBvZiB0aGUgQyBxc29ydCgpIGZ1bmN0aW9uLgotCi0tIElzc3VlICMxNzM1NzogQWRkIG1pc3NpbmcgdmVyYm9zaXR5IG91dHB1dCB3aGVuIHVzaW5nIC12Ly12di4KLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMxNzYwNjogRml4ZWQgc3VwcG9ydCBvZiBlbmNvZGVkIGJ5dGUgc3RyaW5ncyBpbiB0aGUgWE1MR2VuZXJhdG9yCi0gIGNoYXJhY3RlcnMoKSBhbmQgaWdub3JhYmxlV2hpdGVzcGFjZSgpIG1ldGhvZHMuICBPcmlnaW5hbCBwYXRjaCBieSBTZWJhc3RpYW4KLSAgT3J0aXogVmFzcXVlei4KLQotLSBJc3N1ZSAjMTc3MzI6IElnbm9yZSBkaXN0dXRpbHMuY2ZnIG9wdGlvbnMgcGVydGFpbmluZyB0byBpbnN0YWxsIHBhdGhzIGlmIGEKLSAgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBhY3RpdmUuCi0KLS0gSXNzdWUgIzExNTkwNTE6IEJhY2sgb3V0IGEgZml4IGZvciBoYW5kbGluZyBjb3JydXB0ZWQgZ3ppcCBmaWxlcyB0aGF0Ci0gIGJyb2tlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi0tIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQotICBjb2RlY3Mub3BlbigpLgotCi0tIElzc3VlICMxNjYwMTogUmVzdGFydGluZyBpdGVyYXRpb24gb3ZlciB0YXJmaWxlIG5vIG1vcmUgY29udGludWVzIGZyb20gd2hlcmUKLSAgaXQgbGVmdCBvZmYuICBQYXRjaCBieSBNaWNoYWVsIEJpcnR3ZWxsLgotCi0tIElzc3VlICMxNzI4OTogVGhlIHJlYWRsaW5lIG1vZHVsZSBub3cgcGxheXMgbmljZXIgd2l0aCBleHRlcm5hbCBtb2R1bGVzCi0gIG9yIGFwcGxpY2F0aW9ucyBjaGFuZ2luZyB0aGUgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyBnbG9iYWwKLSAgdmFyaWFibGUuICBJbml0aWFsIHBhdGNoIGJ5IEJyYWRsZXkgRnJvZWhsZS4KLQotLSBJc3N1ZSAjMTIxODE6IHNlbGVjdCBtb2R1bGU6IEZpeCBzdHJ1Y3Qga2V2ZW50IGRlZmluaXRpb24gb24gT3BlbkJTRCA2NC1iaXQKLSAgcGxhdGZvcm1zLiBQYXRjaCBieSBGZWRlcmljbyBTY2h3aW5kdC4KLQotLSBJc3N1ZSAjMTQxNzM6IEF2b2lkIGNyYXNoaW5nIHdoZW4gcmVhZGluZyBhIHNpZ25hbCBoYW5kbGVyIGR1cmluZwotICBpbnRlcnByZXRlciBzaHV0ZG93bi4KLQotLSBJc3N1ZSAjMTYzMTY6IG1pbWV0eXBlcyBub3cgcmVjb2duaXplcyB0aGUgLnh6IGFuZCAudHh6ICgudGFyLnh6KSBleHRlbnNpb25zLgotCi0tIElzc3VlICMxNTkwMjogRml4IGltcC5sb2FkX21vZHVsZSgpIGFjY2VwdGluZyBOb25lIGFzIGEgZmlsZSB3aGVuIGxvYWRpbmcgYW4KLSAgZXh0ZW5zaW9uIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTc4MDI6IEZpeCBhbiBVbmJvdW5kTG9jYWxFcnJvciBpbiBodG1sLnBhcnNlci4gIEluaXRpYWwgdGVzdHMgYnkKLSAgVGhvbWFzIEJhcmxvdy4KLQotLSBJc3N1ZSAjMTU1MzU6IEZpeCBuYW1lZHR1cGxlIHBpY2tsZXMgd2hpY2ggd2VyZSBwaWNraW5nIHVwIHRoZSBPcmRlcmVkRGljdAotICBpbnN0ZWFkIG9mIGp1c3QgdGhlIHVuZGVybHlpbmcgdHVwbGUuCi0KLS0gSXNzdWUgIzE3MTkyOiBSZXN0b3JlIHRoZSBwYXRjaCBmb3IgSXNzdWUgIzExNzI5IHdoaWNoIHdhcyBvbW1pdHRlZCBpbgotICAzLjMuMSB3aGVuIHVwZGF0aW5nIHRoZSBidW5kbGVkIHZlcnNpb24gb2YgbGliZmZpIHVzZWQgYnkgY3R5cGVzLiAgVXBkYXRlCi0gIG1hbnkgbGliZmZpIGZpbGVzIHRoYXQgd2VyZSBtaXNzZWQgaW4gMy4zLjEncyB1cGRhdGUgdG8gbGliZmZpLTMuMC4xMy4KLQotLSBJc3N1ZSAjMTczNTg6IE1vZHVsZXMgbG9hZGVkIGJ5IGltcC5sb2FkX3NvdXJjZSgpIGFuZCBsb2FkX2NvbXBpbGVkKCkgKGFuZCBieQotICBleHRlbnRpb24gbG9hZF9tb2R1bGUoKSkgbm93IGhhdmUgYSBiZXR0ZXIgY2hhbmNlIG9mIHdvcmtpbmcgd2hlbiByZWxvYWRlZC4KLQotLSBJc3N1ZSAjMTczNTM6IFBsaXN0bGliIGVtaXR0ZWQgZW1wdHkgZGF0YSB0YWdzIHdpdGggZGVlcGx5IG5lc3RlZCBkYXRhc3RydWN0dXJlcwotCi0tIElzc3VlICMxMTcxNDogVXNlICd3aXRoJyBzdGF0ZW1lbnRzIHRvIGFzc3VyZSBhIFNlbWFwaG9yZSByZWxlYXNlcyBhCi0gIGNvbmRpdGlvbiB2YXJpYWJsZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFRob21hcyBSYWNoZWwuCi0KLS0gSXNzdWUgIzE3Nzk1OiBSZXZlcnRlZCBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZSBpbiBTeXNMb2dIYW5kbGVyIHdpdGgKLSAgVW5peCBkb21haW4gc29ja2V0cy4KLQotLSBJc3N1ZSAjMTc1NTU6IEZpeCBGb3JrQXdhcmVUaHJlYWRMb2NrIHNvIHRoYXQgc2l6ZSBvZiBhZnRlciBmb3JrCi0gIHJlZ2lzdHJ5IGRvZXMgbm90IGdyb3cgZXhwb25lbnRpYWxseSB3aXRoIGdlbmVyYXRpb24gb2YgcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTc3MDc6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSdzIGdldCgpIG1ldGhvZCBkb2VzIG5vdCBibG9jayBmb3Igc2hvcnQKLSAgdGltZW91dHMuCi0KLS0gSXN1c2UgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQotICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxsYmFja3MgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgaWYgZW1wdHkgcGF0aCBhcmd1bWVudCBpcyBzcGVjaWZpZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNzcxMDogRml4IHBpY2tsZSByYWlzaW5nIGEgU3lzdGVtRXJyb3Igb24gYm9ndXMgaW5wdXQuCi0KLS0gSXNzdWUgIzE3MzQxOiBJbmNsdWRlIHRoZSBpbnZhbGlkIG5hbWUgaW4gdGhlIGVycm9yIG1lc3NhZ2VzIGZyb20gcmUgYWJvdXQKLSAgaW52YWxpZCBncm91cCBuYW1lcy4KLQotLSBJc3N1ZSAjMTc3MDI6IG9zLmVudmlyb24gbm93IHJhaXNlcyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBlbnZpcm9ubWVudAotICB2YXJpYWJsZSBuYW1lIChzdHIgb24gVU5JWCksIGluc3RlYWQgb2YgdXNpbmcgdGhlIGVuY29kZWQgbmFtZSAoYnl0ZXMgb24KLSAgVU5JWCkuCi0KLS0gSXNzdWUgIzE2MTYzOiBNYWtlIHRoZSBpbXBvcnRsaWIgYmFzZWQgdmVyc2lvbiBvZiBwa2d1dGlsLml0ZXJfaW1wb3J0ZXJzCi0gIHdvcmsgZm9yIHN1Ym1vZHVsZXMuIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY4MDQ6IEZpeCBhIGJ1ZyBpbiB0aGUgJ3NpdGUnIG1vZHVsZSB0aGF0IGNhdXNlZCBydW5uaW5nCi0gICdweXRob24gLVMgLW0gc2l0ZScgdG8gaW5jb3JyZWN0bHkgdGhyb3cgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICMxNzAxNjogR2V0IHJpZCBvZiBwb3NzaWJsZSBwb2ludGVyIHdyYXBhcm91bmRzIGFuZCBpbnRlZ2VyIG92ZXJmbG93cwotICBpbiB0aGUgcmUgbW9kdWxlLiAgUGF0Y2ggYnkgTmlja29sYWkgWmVsZG92aWNoLgotCi0tIElzc3VlICMxNjY1ODogYWRkIG1pc3NpbmcgcmV0dXJuIHRvIEhUVFBDb25uZWN0aW9uLnNlbmQoKQotICBQYXRjaCBieSBKZWZmIEtudXBwLgotCi0tIElzc3VlICMxNDk3MTogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm8gbG9uZ2VyIGdldHMgY29uZnVzZWQgd2hlbiBhIGZ1bmN0aW9uCi0gIGhhcyBhIGRpZmZlcmVudCBfX25hbWVfXyB0aGFuIGl0cyBuYW1lIGluIHRoZSBUZXN0Q2FzZSBjbGFzcyBkaWN0aW9uYXJ5LgotCi0tIElzc3VlICMxNzY3ODogRml4IERlcHJlY2F0aW9uV2FybmluZyBpbiB0aGUgaHR0cC9jb29raWVqYXIucHkgYnkgY2hhbmdpbmcgdGhlCi0gIHVzYWdlIG9mIGdldF9vcmlnaW5fcmVxX2hvc3QoKSB0byBvcmlnaW5fcmVxX2hvc3QuCi0KLS0gSXNzdWUgIzE3NjY2OiBGaXggcmVhZGluZyBnemlwIGZpbGVzIHdpdGggYW4gZXh0cmEgZmllbGQuCi0KLS0gSXNzdWUgIzE3NTAyOiBQcm9jZXNzIERFRkFVTFQgdmFsdWVzIGluIG1vY2sgc2lkZV9lZmZlY3QgdGhhdCByZXR1cm5zIGl0ZXJhdG9yLgotICBQYXRjaCBieSBNaWNoYWVsIEZvb3JkLgotCi0tIElzc3VlICMxNzU3MjogQXZvaWQgY2hhaW5lZCBleGNlcHRpb25zIHdoaWxlIHBhc3NpbmcgYmFkIGRpcmVjdGl2ZXMgdG8KLSAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCi0KLS0gSXNzdWUgIzE3NDM1OiB0aHJlYWRpbmcuVGltZXIncyBfX2luaXRfXyBtZXRob2Qgbm8gbG9uZ2VyIHVzZXMgbXV0YWJsZQotICBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGFyZ3MgYW5kIGt3YXJncyBwYXJhbWV0ZXJzLgotCi0tIElzc3VlICMxNzUyNjogZml4IGFuIEluZGV4RXJyb3IgcmFpc2VkIHdoaWxlIHBhc3NpbmcgY29kZSB3aXRob3V0IGZpbGVuYW1lIHRvCi0gIGluc3BlY3QuZmluZHNvdXJjZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBUeWxlciBEb3lsZS4KLQotLSBJc3N1ZSAjMTY1NTA6IFVwZGF0ZSB0aGUgb3Bjb2RlIGRlc2NyaXB0aW9ucyBvZiBwaWNrbGV0b29scyB0byB1c2UgdW5zaWduZWQKLSAgaW50ZWdlcnMgd2hlcmUgYXBwcm9wcmlhdGUuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTc4Mzg6IEFsbG93IHN5cy5zdGRpbiB0byBiZSByZWFzc2lnbmVkLgotCi0tIElzc3VlICMxMzQ5NTogQXZvaWQgbG9hZGluZyB0aGUgY29sb3IgZGVsZWdhdG9yIHR3aWNlIGluIElETEUuCi0KLS0gSXNzdWUgIzE3Nzk4OiBBbGxvdyBJRExFIHRvIGVkaXQgbmV3IGZpbGVzIHdoZW4gc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS4KLQotLSBJc3N1ZSAjMTQ3MzU6IFVwZGF0ZSBJRExFIGRvY3MgdG8gb21pdCAiQ29udHJvbC16IG9uIFdpbmRvd3MiLgotCi0tIElzc3VlICMxNzU4NTogRml4ZWQgSURMRSByZWdyZXNzaW9uLiBOb3cgY2xvc2VzIHdoZW4gdXNpbmcgZXhpdCgpIG9yIHF1aXQoKS4KLQotLSBJc3N1ZSAjMTc2NTc6IFNob3cgZnVsbCBUayB2ZXJzaW9uIGluIElETEUncyBhYm91dCBkaWFsb2cuCi0gIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgotCi0tIElzc3VlICMxNzYxMzogUHJldmVudCB0cmFjZWJhY2sgd2hlbiByZW1vdmluZyBzeW50YXggY29sb3JpemVyIGluIElETEUuCi0KLS0gSXNzdWUgIzEyMDc1ODk6IEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHBhdGNoIGZvciByaWdodC1jbGljayBtZW51IGluIElETEUuCi0KLS0gSXNzdWUgIzE2ODg3OiBJRExFIG5vdyBhY2NlcHRzIENhbmNlbCBpbiB0YWJpZnkvdW50YWJpZnkgZGlhbG9nIGJveC4KLQotLSBJc3N1ZSAjMTc2MjU6IEluIElETEUsIGNsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgotCi0tIElzc3VlICMxNDI1NDogSURMRSBub3cgaGFuZGxlcyByZWFkbGluZSBjb3JyZWN0bHkgYWNyb3NzIHNoZWxsIHJlc3RhcnRzLgotCi0tIElzc3VlICMxNzYxNDogSURMRSBubyBsb25nZXIgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIHF1aWNrbHkgY2xvc2luZyBhIGZpbGUuCi0KLS0gSXNzdWUgIzY2OTg6IElETEUgbm93IG9wZW5zIGp1c3QgYW4gZWRpdG9yIHdpbmRvdyB3aGVuIGNvbmZpZ3VyZWQgdG8gZG8gc28uCi0KLS0gSXNzdWUgIzg5MDA6IFVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBJRExFIHRvIG9wZW4gYSBmaWxlIG5vIGxvbmdlcgotICByYWlzZXMgYW4gZXhjZXB0aW9uLgotCi0tIElzc3VlICM2NjQ5OiBGaXhlZCBtaXNzaW5nIGV4aXQgc3RhdHVzIGluIElETEUuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzE3OTkyOiBBZGQgdGltZW91dHMgdG8gYXN5bmNvcmUgYW5kIGFzeW5jaGF0IHRlc3RzIHNvIHRoYXQgdGhleSB3b24ndAorICBhY2NpZGVudGFsbHkgaGFuZy4KIAogLSBJc3N1ZSAjMTc4MzM6IEZpeCB0ZXN0X2dkYiBmYWlsdXJlcyBzZWVuIG9uIG1hY2hpbmVzIHdoZXJlIGRlYnVnIHN5bWJvbHMKICAgZm9yIGdsaWJjIGFyZSBhdmFpbGFibGUgKHNlZW4gb24gUFBDNjQgTGludXgpLgpAQCAtMTAwOSw2ICsyODk1LDkgQEAKIC0gSXNzdWUgIzc4NTU6IEFkZCB0ZXN0cyBmb3IgY3R5cGVzL3dpbnJlZyBmb3IgaXNzdWVzIGZvdW5kIGluIElyb25QeXRob24uCiAgIEluaXRpYWwgcGF0Y2ggYnkgRGlubyBWaWVobGFuZC4KIAorLSBJc3N1ZSAjMTEwNzg6IHRlc3RfX19hbGxfXyBub3cgY2hlY2tzIGZvciBkdXBsaWNhdGVzIGluIF9fYWxsX18uCisgIEluaXRpYWwgcGF0Y2ggYnkgUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxNzcxMjogRml4IHRlc3RfZ2RiIGZhaWx1cmVzIG9uIFVidW50dSAxMy4wNC4KIAogLSBJc3N1ZSAjMTc4MzU6IEZpeCB0ZXN0X2lvIHdoZW4gdGhlIGRlZmF1bHQgT1MgcGlwZSBidWZmZXIgc2l6ZSBpcyBsYXJnZXIKQEAgLTEwMjAsNiArMjkwOSw5IEBACiAtIElzc3VlICMxMjgyMDogYWRkIHRlc3RzIGZvciB0aGUgeG1sLmRvbS5taW5pY29tcGF0IG1vZHVsZS4KICAgUGF0Y2ggYnkgSm9obiBDaGFuZGxlciBhbmQgUGhpbCBDb25uZWxsLgogCistIElzc3VlICMxNzY5MTogdGVzdF91bml2bmV3bGluZXMgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCisgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKwogLSBJc3N1ZSAjMTc3OTA6IHRlc3Rfc2V0IG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgogICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCiAKQEAgLTEwMzgsNzE1ICsyOTMwLDcgQEAKIC0gSXNzdWUgIzE3NjkyOiB0ZXN0X3NxbGl0ZSBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KICAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCi0tIElzc3VlICMxNzg0MzogUmVtb3ZlZCBiejIgdGVzdCBkYXRhIGZpbGUgdGhhdCB3YXMgdHJpZ2dlcmluZyBmYWxzZS1wb3NpdGl2ZQotICB2aXJ1cyB3YXJuaW5ncyB3aXRoIGNlcnRhaW4gYW50aXZpcnVzIHNvZnR3YXJlLgotCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE1OTQwOiBTcGVjaWZ5IGVmZmVjdCBvZiBsb2NhbGUgb24gdGltZSBmdW5jdGlvbnMuCi0KLS0gSXNzdWUgIzY2OTY6IGFkZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgUHJvZmlsZSBvYmplY3RzLCBhbmQgaW1wcm92ZQotICBwcm9maWxlL2NQcm9maWxlIGRvY3MuICBQYXRjaCBieSBUb20gUGluY2tuZXkuCi0KLS0gSXNzdWUgIzE3OTE1OiBGaXggaW50ZXJvcGVyYWJpbGl0eSBvZiB4bWwuc2F4IHdpdGggZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5Ci0gIGNvZGVjcy5vcGVuKCkuCi0KLUJ1aWxkCi0tLS0tLQotCi0tIElzc3VlICMxNzU0NzogSW4gY29uZmlndXJlLCBleHBsaWNpdGx5IHBhc3MgLVdmb3JtYXQgZm9yIHRoZSBiZW5lZml0IGZvciBHQ0MKLSAgNC44LgotCi0tIElzc3VlICMxNzk2MjogQnVpbGQgd2l0aCBPcGVuU1NMIDEuMC4xZSBvbiBXaW5kb3dzLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4xPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA3LUFwci0yMDEzKgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTc1NTA6IEZpeCB0aGUgLS1lbmFibGUtcHJvZmlsaW5nIGNvbmZpZ3VyZSBzd2l0Y2guCi0KLUlETEUKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc2MjU6IEluIElETEUsIGNsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4xIHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyNC1NYXItMjAxMyoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3MzI4OiBGaXggcG9zc2libGUgcmVmbGVhayBpbiBkaWN0LnNldGRlZmF1bHQuCi0KLS0gSXNzdWUgIzE3MjIzOiBGaXggUHlVbmljb2RlX0Zyb21Vbmljb2RlKCkgZm9yIHN0cmluZyBvZiAxIGNoYXJhY3RlciBvdXRzaWRlCi0gIHRoZSByYW5nZSBVKzAwMDAtVSsxMGZmZmYuCi0KLS0gSXNzdWUgIzE2OTIzMzU6IE1vdmUgaW5pdGlhbCBhcmdzIGFzc2lnbm1lbnQgdG8KLSAgQmFzZUV4Y2VwdGlvbi5fX25ld19fIHRvIGhlbHAgcGlja2xpbmcgb2YgbmFpdmUgc3ViY2xhc3Nlcy4KLQotLSBJc3N1ZSAjMTcyNzU6IENvcnJlY3RlZCBjbGFzcyBuYW1lIGluIGluaXQgZXJyb3IgbWVzc2FnZXMgb2YgdGhlIEMgdmVyc2lvbiBvZgotICBCdWZmZXJlZFdyaXRlciBhbmQgQnVmZmVyZWRSYW5kb20uCi0KLS0gSXNzdWUgIzc5NjM6IEZpeGVkIG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB0aGF0IGlzc3VlZCB3aGVuIG9iamVjdCBpcwotICBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzUzMDg6IFJhaXNlIFZhbHVlRXJyb3Igd2hlbiBtYXJzaGFsbGluZyB0b28gbGFyZ2Ugb2JqZWN0IChhIHNlcXVlbmNlCi0gIHdpdGggc2l6ZSA+PSAyKiozMSksIGluc3RlYWQgb2YgcHJvZHVjaW5nIGlsbGVnYWwgbWFyc2hhbCBkYXRhLgotCi0tIElzc3VlICMxMjk4MzogQnl0ZXMgbGl0ZXJhbHMgd2l0aCBpbnZhbGlkIFx4IGVzY2FwZSBub3cgcmFpc2UgYSBTeW50YXhFcnJvcgotICBhbmQgYSBmdWxsIHRyYWNlYmFjayBpbmNsdWRpbmcgbGluZSBudW1iZXIuCi0KLS0gSXNzdWUgIzE3MTczOiBSZW1vdmUgdXNlcyBvZiBsb2NhbGUtZGVwZW5kZW50IEMgZnVuY3Rpb25zIChpc2FscGhhKCkgZXRjLikKLSAgaW4gdGhlIGludGVycHJldGVyLgotCi0tIElzc3VlICMxNzEzNzogV2hlbiBhbiBVbmljb2RlIHN0cmluZyBpcyByZXNpemVkLCB0aGUgaW50ZXJuYWwgd2lkZSBjaGFyYWN0ZXIKLSAgc3RyaW5nICh3c3RyKSBmb3JtYXQgaXMgbm93IGNsZWFyZWQuCi0KLS0gSXNzdWUgIzE3MDQzOiBUaGUgdW5pY29kZS1pbnRlcm5hbCBkZWNvZGVyIG5vIGxvbmdlciByZWFkIHBhc3QgdGhlIGVuZCBvZgotICBpbnB1dCBidWZmZXIuCi0KLS0gSXNzdWUgIzE3MDk4OiBBbGwgbW9kdWxlcyBub3cgaGF2ZSBfX2xvYWRlcl9fIHNldCBldmVuIGlmIHRoZXkgcHJlLWV4aXN0IHRoZQotICBib290c3RyYXBwaW5nIG9mIGltcG9ydGxpYi4KLQotLSBJc3N1ZSAjMTY5Nzk6IEZpeCBlcnJvciBoYW5kbGluZyBidWdzIGluIHRoZSB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KLQotLSBJc3N1ZSAjMTAxNTY6IEluIHRoZSBpbnRlcnByZXRlcidzIGluaXRpYWxpemF0aW9uIHBoYXNlLCB1bmljb2RlIGdsb2JhbHMKLSAgYXJlIG5vdyBpbml0aWFsaXplZCBkeW5hbWljYWxseSBhcyBuZWVkZWQuCi0KLS0gSXNzdWUgIzE2OTgwOiBGaXggcHJvY2Vzc2luZyBvZiBlc2NhcGVkIG5vbi1hc2NpaSBieXRlcyBpbiB0aGUKLSAgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCi0KLS0gSXNzdWUgIzE2OTc1OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVnIGluIHRoZSBlc2NhcGUtZGVjb2RlIGJ5dGVzIGRlY29kZXIuCi0KLS0gSXNzdWUgIzE0ODUwOiBOb3cgYSBjaGFybWFwIGRlY29kZXIgdHJlYXRzIFUrRkZGRSBhcyAidW5kZWZpbmVkIG1hcHBpbmciCi0gIGluIGFueSBtYXBwaW5nLCBub3Qgb25seSBpbiBhIHN0cmluZy4KLQotLSBJc3N1ZSAjMTY3MzA6IGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBub3cgbm8gbG9uZ2VycyByYWlzZXMgYW4KLSAgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIHBvcHVsYXRlIGl0cyBjYWNoZSBhbmQgaXQgZmluZHMgb3V0IHRoZSBkaXJlY3RvcnkgaXMKLSAgdW5yZWFkYWJsZSBvciBoYXMgdHVybmVkIGludG8gYSBmaWxlLiBSZXBvcnRlZCBhbmQgZGlhZ25vc2VkIGJ5Ci0gIERhdmlkIFByaXRjaGFyZC4KLQotLSBJc3N1ZSAjMTY5MDY6IEZpeCBhIGxvZ2ljIGVycm9yIHRoYXQgcHJldmVudGVkIG1vc3Qgc3RhdGljIHN0cmluZ3MgZnJvbSBiZWluZwotICBjbGVhcmVkLgotCi0tIElzc3VlICMxMTQ2MTogRml4IHRoZSBpbmNyZW1lbnRhbCBVVEYtMTYgZGVjb2Rlci4gT3JpZ2luYWwgcGF0Y2ggYnkKLSAgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCi0KLS0gSXNzdWUgIzE2ODU2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSBjYWxsaW5nIHJlcHIoKSBvbiBhIGRpY3Qgd2l0aAotICBhIGtleSB3aG9zZSByZXByIHJhaXNlIGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjMTYzNjc6IEZpeCBGaWxlSU8ucmVhZGFsbCgpIG9uIFdpbmRvd3MgZm9yIGZpbGVzIGxhcmdlciB0aGFuIDIgR0IuCi0KLS0gSXNzdWUgIzE2NDU1OiBPbiBGcmVlQlNEIGFuZCBTb2xhcmlzLCBpZiB0aGUgbG9jYWxlIGlzIEMsIHRoZQotICBBU0NJSS9zdXJyb2dhdGVlc2NhcGUgY29kZWMgaXMgbm93IHVzZWQsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8KLSAgZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGlzIGNoYW5nZSBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgd2l0aAotICBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGJlY2F1c2UgdGhlc2Ugb3BlcmF0aW5nIHN5c3RlbXMgYW5ub3VuY2VzIGFuCi0gIEFTQ0lJIGxvY2FsZSBlbmNvZGluZywgd2hlcmVhcyB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBpcyB1c2VkIGluIHByYWN0aWNlLgotCi0tIElzc3VlICMxNjc2MTogQ2FsbGluZyBpbnQoKSB3aXRoIGJhc2UgYXJndW1lbnQgb25seSBub3cgcmFpc2VzIFR5cGVFcnJvci4KLQotLSBJc3N1ZSAjMTY3NTk6IFN1cHBvcnQgdGhlIGZ1bGwgRFdPUkQgKHVuc2lnbmVkIGxvbmcpIHJhbmdlIGluIFJlZzJQeQotICB3aGVuIHJldHJpZXZpbmcgYSBSRUdfRFdPUkQgdmFsdWUuIFRoaXMgY29ycmVjdHMgZnVuY3Rpb25zIGxpa2UKLSAgd2lucmVnLlF1ZXJ5VmFsdWVFeCB0aGF0IG1heSBoYXZlIGJlZW4gcmV0dXJuaW5nIHRydW5jYXRlZCB2YWx1ZXMuCi0KLS0gSXNzdWUgIzE0NDIwOiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBQeTJSZWcKLSAgd2hlbiBwYXNzZWQgYSBSRUdfRFdPUkQgdmFsdWUuIEZpeGVzIE92ZXJmbG93RXJyb3IgaW4gd2lucmVnLlNldFZhbHVlRXguCi0KLS0gSXNzdWUgIzE2NTk3OiBJbiBidWZmZXJlZCBhbmQgdGV4dCBJTywgY2FsbCBjbG9zZSgpIG9uIHRoZSB1bmRlcmx5aW5nIHN0cmVhbQotICBpZiBpbnZva2luZyBmbHVzaCgpIGZhaWxzLgotCi0tIElzc3VlICMxNjcyMjogSW4gdGhlIGJ5dGVzKCkgY29uc3RydWN0b3IsIHRyeSB0byBjYWxsIF9fYnl0ZXNfXyBvbiB0aGUKLSAgYXJndW1lbnQgYmVmb3JlIF9faW5kZXhfXy4KLQotLSBJc3N1ZSAjMTY2MDI6IFdoZW4gYSB3ZWFrcmVmJ3MgdGFyZ2V0IHdhcyBwYXJ0IG9mIGEgbG9uZyBkZWFsbG9jYXRpb24KLSAgY2hhaW4sIHRoZSBvYmplY3QgY291bGQgcmVtYWluIHJlYWNoYWJsZSB0aHJvdWdoIGl0cyB3ZWFrcmVmIGV2ZW4gdGhvdWdoCi0gIGl0cyByZWZjb3VudCBoYWQgZHJvcHBlZCB0byB6ZXJvLgotCi0tIElzc3VlICMxNjQxNjogT24gTWFjIE9TIFgsIG9wZXJhdGluZyBzeXN0ZW0gZGF0YSBhcmUgbm93IGFsd2F5cwotICBlbmNvZGVkL2RlY29kZWQgdG8vZnJvbSBVVEYtOC9zdXJyb2dhdGVlc2NhcGUsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZwotICAod2hpY2ggbWF5IGJlIEFTQ0lJIGlmIG5vIGxvY2FsZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLCB0byBhdm9pZAotICBpbmNvbnNpc3RlbmNpZXMgd2l0aCBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGZ1bmN0aW9ucyB3aGljaCBhcmUKLSAgYWxyZWFkeSB1c2luZyBVVEYtOC9zdXJyb2dhdGVlc2NhcGUuCi0KLS0gSXNzdWUgIzE2NTg4OiBTaWxlbmNlIHVudXNlZC1idXQtc2V0IHdhcm5pbmdzIGluIFB5dGhvbi90aHJlYWRfcHRocmVhZAotCi0tIElzc3VlICMxNjU0NjogRml4OiBhc3QuWWllbGRGcm9tIGFyZ3VtZW50IGlzIG5vdyBtYW5kYXRvcnkuCi0KLS0gSXNzdWUgIzE2NTE0OiBGaXggcmVncmVzc2lvbiBjYXVzaW5nIGEgdHJhY2ViYWNrIHdoZW4gc3lzLnBhdGhbMF0gaXMgTm9uZQotICAoYWN0dWFsbHksIGFueSBub24tc3RyaW5nIG9yIG5vbi1ieXRlcyB0eXBlKS4KLQotLSBJc3N1ZSAjMTYzMDY6IEZpeCBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcyB3aGVuIHVua25vd24gY29tbWFuZCBsaW5lCi0gIHBhcmFtZXRlcnMgd2hlcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlci4gIFBhdGNoIGJ5IEhpZXUgTmd1eWVuLgotCi0tIElzc3VlICMxNjIxNTogRml4IHBvdGVudGlhbCBkb3VibGUgbWVtb3J5IGZyZWUgaW4gc3RyLnJlcGxhY2UoKS4gIFBhdGNoCi0gIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NDUzOiBGaXggZXF1YWxpdHkgdGVzdGluZyBvZiBkZWFkIHdlYWtyZWYgb2JqZWN0cy4KLQotLSBJc3N1ZSAjOTUzNTogRml4IHBlbmRpbmcgc2lnbmFscyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBidXQgbm90IHlldAotICBoYW5kbGVkIGJ5IFB5dGhvbiB0byBub3QgcGVyc2lzdCBhZnRlciBvcy5mb3JrKCkgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCi0KLS0gSXNzdWUgIzE1MDAxOiBmaXggc2VnZmF1bHQgb24gImRlbCBzeXMubW9kdWxlc1snX19tYWluX18nXSIuIFBhdGNoIGJ5IFZpY3RvcgotICBTdGlubmVyLgotCi0tIElzc3VlICM4MjcxOiB0aGUgdXRmLTggZGVjb2RlciBub3cgb3V0cHV0cyB0aGUgY29ycmVjdCBudW1iZXIgb2YgVStGRkZECi0gIGNoYXJhY3RlcnMgd2hlbiB1c2VkIHdpdGggdGhlICdyZXBsYWNlJyBlcnJvciBoYW5kbGVyIG9uIGludmFsaWQgdXRmLTgKLSAgc2VxdWVuY2VzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSwgdGVzdHMgYnkgRXppbyBNZWxvdHRpLgotCi0tIElzc3VlICM1NzY1OiBBcHBseSBhIGhhcmQgcmVjdXJzaW9uIGxpbWl0IGluIHRoZSBjb21waWxlciBpbnN0ZWFkIG9mCi0gIGJsb3dpbmcgdGhlIHN0YWNrIGFuZCBzZWdmYXVsdGluZy4gSW5pdGlhbCBwYXRjaCBieSBBbmRyZWEgR3JpZmZpbmkuCi0KLS0gSXNzdWUgIzE2NDAyOiBXaGVuIHNsaWNpbmcgYSByYW5nZSwgZml4IHNoYWRvd2luZyBvZiBleGNlcHRpb25zIGZyb20KLSAgX19pbmRleF9fLgotCi0tIElzc3VlICMxNjMzNjogZml4IGlucHV0IGNoZWNraW5nIGluIHRoZSBzdXJyb2dhdGVwYXNzIGVycm9yIGhhbmRsZXIuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzg0MDE6IGFzc2lnbmluZyBhbiBpbnQgdG8gYSBieXRlYXJyYXkgc2xpY2UgKGUuZy4gYlszOjRdID0gNSkgbm93Ci0gIHJhaXNlcyBhbiBlcnJvci4KLQotLSBGaXggc2VnZmF1bHRzIG9uIHNldHRpbmcgX19xdWFsbmFtZV9fIG9uIGJ1aWx0aW4gdHlwZXMgYW5kIGF0dGVtcHRpbmcgdG8KLSAgZGVsZXRlIGl0IG9uIGFueSB0eXBlLgotCi0tIElzc3VlICMxNjM0NTogRml4IGFuIGluZmluaXRlIGxvb3Agd2hlbiBgYGZyb21rZXlzYGAgb24gYSBkaWN0IHN1YmNsYXNzCi0gIHJlY2VpdmVkIGEgbm9uZW1wdHkgZGljdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvci4KLQotLSBJc3N1ZSAjMTYyNzE6IEZpeCBzdHJhbmdlIGJ1Z3MgdGhhdCByZXN1bHRlZCBmcm9tIF9fcXVhbG5hbWVfXyBhcHBlYXJpbmcgaW4gYQotICBjbGFzcydzIF9fZGljdF9fIGFuZCBvbiB0eXBlLgotCi0tIElzc3VlICM2MDc0OiBFbnN1cmUgY2FjaGVkIGJ5dGVjb2RlIGZpbGVzIGNhbiBhbHdheXMgYmUgdXBkYXRlZCBieSB0aGUKLSAgdXNlciB0aGF0IGNyZWF0ZWQgdGhlbSwgZXZlbiB3aGVuIHRoZSBzb3VyY2UgZmlsZSBpcyByZWFkLW9ubHkuCi0KLS0gSXNzdWUgIzE0NzgzOiBJbXByb3ZlIGludCgpIGRvY3N0cmluZyBhbmQgc3dpdGNoIGRvY3N0cmluZ3MgZm9yIHN0cigpLAotICByYW5nZSgpLCBhbmQgc2xpY2UoKSB0byB1c2UgbXVsdGktbGluZSBzaWduYXR1cmVzLgotCi0tIElzc3VlICMxNjE2MDogU3ViY2xhc3Mgc3VwcG9ydCBub3cgd29ya3MgZm9yIHR5cGVzLlNpbXBsZU5hbWVzcGFjZS4KLQotLSBJc3N1ZSAjMTUzNzk6IEZpeCBwYXNzaW5nIG9mIG5vbi1CTVAgY2hhcmFjdGVycyBhcyBpbnRlZ2VycyBmb3IgdGhlIGNoYXJtYXAKLSAgZGVjb2RlciAoYWxyZWFkeSB3b3JraW5nIGFzIHVuaWNvZGUgc3RyaW5ncykuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTE0NDogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBoYW5kbGluZyBwb2ludGVycyBhcyBpbnRlZ2VyCi0gIHZhbHVlcywgYnkgdXNpbmcgYFB5X3VpbnRwdHJfdGAgaW5zdGVhZCBvZiBgc2l6ZV90YC4gIFBhdGNoIGJ5IFNlcmhpeQotICBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1OTY1OiBFeHBsaWNpdGx5IGNhc3QgYEFUX0ZEQ1dEYCBhcyAoaW50KS4gIFJlcXVpcmVkIG9uIFNvbGFyaXMgMTAKLSAgKHdoaWNoIGRlZmluZXMgYEFUX0ZEQ1dEYCBhcyBgYDB4ZmZkMTk1NTNgYCksIGhhcm1sZXNzIG9uIG90aGVyIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTU4Mzk6IENvbnZlcnQgU3lzdGVtRXJyb3JzIGluIGBzdXBlcigpYCB0byBSdW50aW1lRXJyb3JzLgotCi0tIElzc3VlICMxNTg0NjogRml4IFN5c3RlbUVycm9yIHdoaWNoIGhhcHBlbmVkIHdoZW4gdXNpbmcgYGFzdC5wYXJzZSgpYCBpbiBhbgotICBleGNlcHRpb24gaGFuZGxlciBvbiBjb2RlIHdpdGggc3ludGF4IGVycm9ycy4KLQotLSBJc3N1ZSAjMTU4MDE6IE1ha2Ugc3VyZSBtYXBwaW5ncyBwYXNzZWQgdG8gJyUnIGZvcm1hdHRpbmcgYXJlIGFjdHVhbGx5Ci0gIHN1YnNjcmlwdGFibGUuCi0KLS0gSXNzdWUgIzE1MTExOiBfX2ltcG9ydF9fIHNob3VsZCBsZXQgSW1wb3J0RXJyb3IgcHJvcGFnYXRlIHdoZW4gYSBtb2R1bGUgdGhhdAotICBpcyBpbXBvcnRlZCBhcyBhIHNpZGUtZWZmZWN0IG9mIHVzaW5nIGZyb21saXN0IHRyaWVzIHRvIGltcG9ydCBhIG1vZHVsZQotICB0aGF0IGNhbm5vdCBiZSBmb3VuZC4KLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMxNzU0MDogQWRkZWQgc3R5bGUgdG8gZm9ybWF0dGVyIGNvbmZpZ3VyYXRpb24gYnkgZGljdC4KLQotLSBJc3N1ZSAjMTc1MzY6IEFkZCB0byB3ZWJicm93c2VyJ3MgYnJvd3NlciBsaXN0OiB3d3ctYnJvd3NlciwgeC13d3ctYnJvd3NlciwKLSAgaWNld2Vhc2VsLCBpY2VhcGUuCi0KLS0gSXNzdWUgIzE3NDg4OiBDaGFuZ2UgdGhlIHN1YnByb2Nlc3MuUG9wZW4gYnVmc2l6ZSBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZQotICBmcm9tIHVuYnVmZmVyZWQgKDApIHRvIGJ1ZmZlcmluZyAoLTEpIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBleGlzdGluZyBjb2RlCi0gIGV4cGVjdHMgYW5kIG1hdGNoIHRoZSBiZWhhdmlvciBvZiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgaW4gUHl0aG9uIDIgdG8gYXZvaWQKLSAgaW50cm9kdWNpbmcgaGFyZCB0byB0cmFjayBkb3duIGJ1Z3MuCi0KLS0gSXNzdWUgIzE3NTIxOiBDb3JyZWN0ZWQgbm9uLWVuYWJsaW5nIG9mIGxvZ2dlciBmb2xsb3dpbmcgdHdvIGNhbGxzIHRvCi0gIGZpbGVDb25maWcoKS4KLQotLSBJc3N1ZSAjMTc1MDg6IENvcnJlY3RlZCBNZW1vcnlIYW5kbGVyIGNvbmZpZ3VyYXRpb24gaW4gZGljdENvbmZpZygpIHdoZXJlCi0gIHRoZSB0YXJnZXQgaGFuZGxlciB3YXNuJ3QgY29uZmlndXJlZCBmaXJzdC4KLQotLSBJc3N1ZSAjMTcyMDk6IGN1cnNlcy53aW5kb3cuZ2V0X3djaCgpIG5vdyBoYW5kbGVzIGNvcnJlY3RseSBLZXlib2FyZEludGVycnVwdAotICAoQ1RSTCtjKS4KLQotLSBJc3N1ZSAjNTcxMzogc210cGxpYiBub3cgaGFuZGxlcyA0MjEgKGNsb3NpbmcgY29ubmVjdGlvbikgZXJyb3IgY29kZXMgd2hlbgotICBzZW5kaW5nIG1haWwgYnkgY2xvc2luZyB0aGUgc29ja2V0IGFuZCByZXBvcnRpbmcgdGhlIDQyMSBlcnJvciBjb2RlIHZpYSB0aGUKLSAgZXhjZXB0aW9uIGFwcHJvcHJpYXRlIHRvIHRoZSBjb21tYW5kIHRoYXQgcmVjZWl2ZWQgdGhlIGVycm9yIHJlc3BvbnNlLgotCi0tIElzc3VlICMxNzE5MjogVXBkYXRlIHRoZSBjdHlwZXMgbW9kdWxlJ3MgbGliZmZpIHRvIHYzLjAuMTMuICBUaGlzCi0gIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBzdGFjayBtaXNhbGlnbm1lbnQgaXNzdWUgb24geDg2IGFuZCBpc3N1ZXMgb24KLSAgc29tZSBtb3JlIHJlY2VudCBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzg4NjI6IEZpeGVkIGN1cnNlcyBjbGVhbnVwIHdoZW4gZ2V0a2V5IGlzIGludGVycnB1dGVkIGJ5IGEgc2lnbmFsLgotCi0tIElzc3VlICMxNzQ0MzogaW1hcGxpYi5JTUFQNF9zdHJlYW0gd2FzIHVzaW5nIHRoZSBkZWZhdWx0IHVuYnVmZmVyZWQgSU8KLSAgaW4gc3VicHJvY2VzcywgYnV0IHRoZSBpbWFwIGNvZGUgYXNzdW1lcyBidWZmZXJlZCBJTy4gIEluIFB5dGhvbjIgdGhpcwotICB3b3JrZWQgYnkgYWNjaWRlbnQuICBJTUFQNF9zdHJlYW0gbm93IGV4cGxpY2l0bHkgdXNlcyBidWZmZXJlZCBJTy4KLQotLSBJc3N1ZSAjMTc0NzY6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB1bmRvY3VtZW50ZWQgcHlkb2MKLSAgJ2FsbG1ldGhvZHMnOyBpdCB3YXMgbWlzc2luZyB1bmJvdW5kIG1ldGhvZHMgb24gdGhlIGNsYXNzLgotCi0tIElzc3VlICMxNjg4MDogRG8gbm90IGFzc3VtZSBfaW1wLmxvYWRfZHluYW1pYygpIGlzIGRlZmluZWQgaW4gdGhlIGltcCBtb2R1bGUuCi0KLS0gSXNzdWUgIzE2Mzg5OiBGaXhlZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uIDMuMSBpbiB0aGUKLSAgY2FjaGluZyBvZiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLgotCi0tIElzc3VlICMxNzQzMTogRml4IG1pc3NpbmcgaW1wb3J0IG9mIEJ5dGVzRmVlZFBhcnNlciBpbiBlbWFpbC5wYXJzZXIuCi0KLS0gSXNzdWUgIzEyODUwODY6IEdldCByaWQgb2YgdGhlIHJlZmNvdW50aW5nIGhhY2sgYW5kIHNwZWVkIHVwCi0gIHVybGxpYi5wYXJzZS51bnF1b3RlKCkgYW5kIHVybGxpYi5wYXJzZS51bnF1b3RlX3RvX2J5dGVzKCkuCi0KLS0gSXNzdWUgIzE3MzY4OiBGaXggYW4gb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgUHl0aG9uIEpTT04gZGVjb2RlciB0aGF0IGNhdXNlZAotICBhIGZhaWx1cmUgd2hpbGUgZGVjb2RpbmcgZW1wdHkgb2JqZWN0IGxpdGVyYWxzIHdoZW4gb2JqZWN0X3BhaXJzX2hvb2sgd2FzCi0gIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTQ2NDU6IFRoZSBlbWFpbCBnZW5lcmF0b3IgY2xhc3NlcyBub3cgcHJvZHVjZSBvdXRwdXQgdXNpbmcgdGhlCi0gIHNwZWNpZmllZCBsaW5lc2VwIHRocm91Z2hvdXQuICBQcmV2aW91c2x5IGlmIHRoZSBwcm9sb2csIGVwaWxvZywgb3IKLSAgYm9keSB3ZXJlIHN0b3JlZCB3aXRoIGEgZGlmZmVyZW50IGxpbmVzZXAsIHRoYXQgbGluZXNlcCB3YXMgdXNlZC4gIFRoaXMKLSAgZml4IGNvcnJlY3RzIGFuIFJGQyBub24tY29tcGxpYW5jZSBpc3N1ZSB3aXRoIHNtdHBsaWIuc2VuZF9tZXNzYWdlLgotCi0tIElzc3VlICMxNzI3ODogRml4IGEgY3Jhc2ggaW4gaGVhcHEuaGVhcHB1c2goKSBhbmQgaGVhcHEuaGVhcHBvcCgpIHdoZW4KLSAgdGhlIGxpc3QgaXMgYmVpbmcgcmVzaXplZCBjb25jdXJyZW50bHkuCi0KLS0gSXNzdWUgIzE2OTYyOiBVc2UgZ2V0ZGVudHM2NCBpbnN0ZWFkIG9mIHRoZSBvYnNvbGV0ZSBnZXRkZW50cyBzeXNjYWxsCi0gIGluIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBvbiBMaW51eC4KLQotLSBJc3N1ZSAjMTcwMTg6IE1ha2UgUHJvY2Vzcy5qb2luKCkgcmV0cnkgaWYgb3Mud2FpdHBpZCgpIGZhaWxzIHdpdGggRUlOVFIuCi0KLS0gSXNzdWUgIzE3MjIzOiBhcnJheSBtb2R1bGU6IEZpeCBhIGNyYXNoZXIgd2hlbiBjb252ZXJ0aW5nIGFuIGFycmF5IGNvbnRhaW5pbmcKLSAgaW52YWxpZCBjaGFyYWN0ZXJzIChvdXRzaWRlIHJhbmdlIFtVKzAwMDA7IFUrMTBmZmZmXSkgdG8gVW5pY29kZToKLSAgcmVwcihhcnJheSksIHN0cihhcnJheSkgYW5kIGFycmF5LnRvdW5pY29kZSgpLiBQYXRjaCB3cml0dGVuIGJ5IE1hbnVlbCBKYWNvYi4KLQotLSBJc3N1ZSAjMTQ3MjA6IHNxbGl0ZTM6IENvbnZlcnQgZGF0ZXRpbWUgbWljcm9zZWNvbmRzIGNvcnJlY3RseS4KLSAgUGF0Y2ggYnkgTG93ZSBUaGlkZXJtYW4uCi0KLS0gSXNzdWUgIzE3MjI1OiBKU09OIGRlY29kZXIgbm93IGNvdW50cyBjb2x1bW5zIGluIHRoZSBmaXJzdCBsaW5lIHN0YXJ0aW5nCi0gIHdpdGggMSwgYXMgaW4gb3RoZXIgbGluZXMuCi0KLS0gSXNzdWUgIzEzNzAwOiBGaXggYnl0ZS9zdHJpbmcgaGFuZGxpbmcgaW4gaW1hcGxpYiBhdXRoZW50aWNhdGlvbiB3aGVuIGFuCi0gIGF1dGhvYmplY3QgaXMgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxMzE1MzogVGtpbnRlciBmdW5jdGlvbnMgbm93IHJhaXNlIFRjbEVycm9yIGluc3RlYWQgb2YgVmFsdWVFcnJvciB3aGVuCi0gIGEgc3RyaW5nIGFyZ3VtZW50IGNvbnRhaW5zIG5vbi1CTVAgY2hhcmFjdGVyLgotCi0tIElzc3VlICM5NjY5OiBQcm90ZWN0IHJlIGFnYWluc3QgaW5maW5pdGUgbG9vcHMgb24gemVyby13aWR0aCBtYXRjaGluZyBpbgotICBub24tZ3JlZWR5IHJlcGVhdC4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTMxNjk6IFRoZSBtYXhpbWFsIHJlcGV0aXRpb24gbnVtYmVyIGluIGEgcmVndWxhciBleHByZXNzaW9uIGhhcyBiZWVuCi0gIGluY3JlYXNlZCBmcm9tIDY1NTM0IHRvIDIxNDc0ODM2NDcgKG9uIDMyLWJpdCBwbGF0Zm9ybSkgb3IgNDI5NDk2NzI5NCAob24KLSAgNjQtYml0KS4KLQotLSBJc3N1ZSAjMTcxNDM6IEZpeCBhIG1pc3NpbmcgaW1wb3J0IGluIHRoZSB0cmFjZSBtb2R1bGUuICBJbml0aWFsIHBhdGNoIGJ5Ci0gIEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2NzQzOiBGaXggbW1hcCBvdmVyZmxvdyBjaGVjayBvbiAzMiBiaXQgV2luZG93cy4KLQotLSBJc3N1ZSAjMTY4MDA6IHRlbXBmaWxlLmdldHRlbXBkaXIoKSBubyBsb25nZXIgbGVmdCB0ZW1wb3JhcnkgZmlsZXMgd2hlbgotICB0aGUgZGlzayBpcyBmdWxsLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQW1pciBTemVrZWx5LgotCi0tIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKLSAgZW1haWwuZW5jb2RlcnMuZW5jb2RlXzdvcjhiaXQgd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCi0KLS0gSXNzdWUgIzE3MDUyOiB1bml0dGVzdCBkaXNjb3Zlcnkgc2hvdWxkIHVzZSBzZWxmLnRlc3RMb2FkZXIuCi0KLS0gSXNzdWUgIzQ1OTE6IFVpZCBhbmQgZ2lkIHZhbHVlcyBsYXJnZXIgdGhhbiAyKiozMSBhcmUgc3VwcG9ydGVkIG5vdy4KLQotLSBJc3N1ZSAjMTcxNDE6IHJhbmRvbS52b25taXNlc3ZhcmlhdGUoKSBubyBtb3JlIGhhbmdzIGZvciBsYXJnZSBrYXBwYXMuCi0KLS0gSXNzdWUgIzE3MTQ5OiBGaXggcmFuZG9tLnZvbm1pc2VzdmFyaWF0ZSB0byBhbHdheXMgcmV0dXJuIHJlc3VsdHMgaW4KLSAgWzAsIDIqbWF0aC5waV0uCi0KLS0gSXNzdWUgIzE0NzA1NDg6IFhNTEdlbmVyYXRvciBub3cgd29ya3Mgd2l0aCBiaW5hcnkgb3V0cHV0IHN0cmVhbXMuCi0KLS0gSXNzdWUgIzY5NzU6IG9zLnBhdGgucmVhbHBhdGgoKSBub3cgY29ycmVjdGx5IHJlc29sdmVzIG11bHRpcGxlIG5lc3RlZAotICBzeW1saW5rcyBvbiBQT1NJWCBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE2NTY0OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdGhlIG9wZXJhdGlvbiBvZgotICBlbWFpbC5lbmNvZGVycy5lbmNvZGVfbm9vcCB3aGVuIHVzZWQgd2l0aCBiaW5hcnkgZGF0YS4KLQotLSBJc3N1ZSAjMTAzNTU6IEluIFNwb29sZWRUZW1wb3JhcnlGaWxlIGNsYXNzIG1vZGUsIG5hbWUsIGVuY29kaW5nIGFuZAotICBuZXdsaW5lcyBwcm9wZXJ0aWVzIG5vdyB3b3JrIGZvciB1bnJvbGxlZCBmaWxlcy4gIE9ic29sZXRlZCBhbmQgbmV2ZXIKLSAgd29ya2luZyBvbiBQeXRob24gMyB4cmVhZGxpbmUgbWV0aG9kIG5vdyByZW1vdmVkLgotCi0tIElzc3VlICMxNjY4NjogRml4ZWQgYSBsb3Qgb2YgYnVncyBpbiBhdWRpb29wIG1vZHVsZS4gIEZpeGVkIGNyYXNoZXMgaW4KLSAgYXZncHAoKSwgbWF4cHAoKSBhbmQgcmF0ZWN2KCkuICBGaXhlZCBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGFkZCgpLCBiaWFzKCksCi0gIGFuZCByYXRlY3YoKS4gIHJldmVyc2UoKSwgbGluMmxpbigpIGFuZCByYXRlY3YoKSBubyBtb3JlIGxvc2UgcHJlY2lzaW9uIGZvcgotICAzMi1iaXQgc2FtcGxlcy4gIG1heCgpIGFuZCBybXMoKSBubyBtb3JlIHJldHVybnMgYSBuZWdhdGl2ZSByZXN1bHQgYW5kCi0gIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zIG5vdyB3b3JrIGNvcnJlY3RseSB3aXRoIDMyLWJpdCBzYW1wbGUgLTB4ODAwMDAwMDAuCi0KLS0gSXNzdWUgIzE3MDczOiBGaXggc29tZSBpbnRlZ2VyIG92ZXJmbG93cyBpbiBzcWxpdGUzIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTY3MjM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIG5vIGxvbmdlciBtYXJrZWQgY2xvc2VkIHdoZW4gdGhlIGNvbm5lY3Rpb24KLSAgaXMgYXV0b21hdGljYWxseSBjbG9zZWQuCi0KLS0gSXNzdWUgIzE2OTQ4OiBGaXggcXVvdGVkIHByaW50YWJsZSBib2R5IGVuY29kaW5nIGZvciBub24tbGF0aW4xIGNoYXJhY3RlcgotICBzZXRzIGluIHRoZSBlbWFpbCBwYWNrYWdlLgotCi0tIElzc3VlICMxNjgxMTogRml4IGZvbGRpbmcgb2YgaGVhZGVycyB3aXRoIG5vIHZhbHVlIGluIHRoZSBwcm92aXNpb25hbCBlbWFpbAotICBwb2xpY2llcy4KLQotLSBJc3N1ZSAjMTcxMzI6IFVwZGF0ZSBzeW1ib2wgZm9yICJ5aWVsZCBmcm9tIiBncmFtbWFyIGNoYW5nZXMuCi0KLS0gSXNzdWUgIzE3MDc2OiBNYWtlIGNvcHlpbmcgb2YgeGF0dHJzIG1vcmUgcGVybWlzc2l2ZSBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCi0gIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgotCi0tIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgotICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuICBJdCBub3cgYWNjZXB0cyBieXRlcyBhbmQKLSAgc3RyaW5ncyBsYXJnZXIgdGhhbiAyIEdpQi4KLQotLSBJc3N1ZSAjNjA4MzogRml4IG11bHRpcGxlIHNlZ21lbnRhdGlvbiBmYXVsdHMgb2NjdXJlZCB3aGVuIFB5QXJnX1BhcnNlVHVwbGUKLSAgcGFyc2VzIG5lc3RlZCBtdXRhdGluZyBzZXF1ZW5jZS4KLQotLSBJc3N1ZSAjNTI4OTogRml4IGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSBvbiBTb2xhcmlzLgotCi0tIElzc3VlICMxNzEwNjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGluIGlvLlRleHRJT1dyYXBwZXIgd2hlbiBhbiB1bmRlcmx5aW5nCi0gIHN0cmVhbSBvciBhIGRlY29kZXIgcHJvZHVjZXMgZGF0YSBvZiBhbiB1bmV4cGVjdGVkIHR5cGUgKGkuZS4gd2hlbgotICBpby5UZXh0SU9XcmFwcGVyIGluaXRpYWxpemVkIHdpdGggdGV4dCBzdHJlYW0gb3IgdXNlIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjKS4KLQotLSBJc3N1ZSAjMTU2MzM6IGh0dHBsaWIuSFRUUFJlc3BvbnNlIGlzIG5vdyBtYXJrIGNsb3NlZCB3aGVuIHRoZSBzZXJ2ZXIKLSAgc2VuZHMgbGVzcyB0aGFuIHRoZSBhZHZlcnRpc2VkIENvbnRlbnQtTGVuZ3RoLgotCi0tIElzc3VlICMxMjI2ODogVGhlIGlvIG1vZHVsZSBmaWxlIG9iamVjdCB3cml0ZSBtZXRob2RzIG5vIGxvbmdlciBhYm9ydCBlYXJseQotICB3aGVuIG9uZSBvZiBpdHMgd3JpdGUgc3lzdGVtIGNhbGxzIGlzIGludGVycnVwdGVkIChFSU5UUikuCi0KLS0gSXNzdWUgIzY5NzI6IFRoZSB6aXBmaWxlIG1vZHVsZSBubyBsb25nZXIgb3ZlcndyaXRlcyBmaWxlcyBvdXRzaWRlIG9mCi0gIGl0cyBkZXN0aW5hdGlvbiBwYXRoIHdoZW4gZXh0cmFjdGluZyBtYWxpY2lvdXMgemlwIGZpbGVzLgotCi0tIElzc3VlICM0ODQ0OiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwRmlsZSB3aGVuIG9wZW5zIGEgWklQIGZpbGUgd2l0aCBhbgotICBpbmNvbXBsZXRlICJFbmQgb2YgQ2VudHJhbCBEaXJlY3RvcnkiIHJlY29yZC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEd1aWxoZXJtZQotICBQb2xvIGFuZCBBbGFuIE1jSW50eXJlLgotCi0tIElzc3VlICMxNzA3MTogU2lnbmF0dXJlLmJpbmQoKSBub3cgd29ya3Mgd2hlbiBvbmUgb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzCi0gIGlzIG5hbWVkIGBgc2VsZmBgLgotCi0tIElzc3VlICMxMjAwNDogRml4IGFuIGludGVybmFsIGVycm9yIGluIFB5WmlwRmlsZSB3aGVuIHdyaXRpbmcgYW4gaW52YWxpZAotICBQeXRob24gZmlsZS4gIFBhdGNoIGJ5IEJlbiBNb3JnYW4uCi0KLS0gSXNzdWUgIzE2MDIxMzM6IG9uIE1hYyBPUyBYIGEgc2hhcmVkIGxpYnJhcnkgYnVpbGQgKGBgLS1lbmFibGUtc2hhcmVkYGApCi0gIG5vdyBmaWxscyB0aGUgYGBvcy5lbnZpcm9uYGAgdmFyaWFibGUgY29ycmVjdGx5LgotCi0tIElzc3VlICMxNTUwNTogYHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyYCBubyBsb25nZXIgYXNzdW1lcyBTSUdJTlQgaGFuZGxlciBpcwotICBzZXQgdG8gYSBjYWxsYWJsZSBvYmplY3QuCi0KLS0gSXNzdWUgIzEzNDU0OiBGaXggYSBjcmFzaCB3aGVuIGRlbGV0aW5nIGFuIGl0ZXJhdG9yIGNyZWF0ZWQgYnkgaXRlcnRvb2xzLnRlZSgpCi0gIGlmIGFsbCBvdGhlciBpdGVyYXRvcnMgd2VyZSB2ZXJ5IGFkdmFuY2VkIGJlZm9yZS4KLQotLSBJc3N1ZSAjMTI0MTE6IEZpeCB0byBjZ2kucGFyc2VfbXVsdGlwYXJ0IHRvIGNvcnJlY3RseSB1c2UgYnl0ZXMgYm91bmRhcmllcwotICBhbmQgYnl0ZXMgZGF0YS4gUGF0Y2ggYnkgSm9uYXMgV2FnbmVyLgotCi0tIElzc3VlICMxNjk1Nzogc2h1dGlsLndoaWNoKCkgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgYmFyZSBmaWxlIG5hbWUgaW4gdGhlCi0gIGN1cnJlbnQgZGlyZWN0b3J5IG9uIFVuaXggYW5kIG5vIGxvbmdlciBzZWFyY2hlcyBhIHJlbGF0aXZlIGZpbGUgcGF0aCB3aXRoCi0gIGEgZGlyZWN0b3J5IHBhcnQgaW4gUEFUSCBkaXJlY3Rvcmllcy4gIFBhdGNoIGJ5IFRob21hcyBLbHV5dmVyLgotCi0tIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCi0gIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQotICBkZXNjcmlwdG9yIGFyZ3VtZW50LgotCi0tIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKLSAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgotCi0tIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCi0gIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCi0KLS0gSXNzdWUgIzEwNTI3OiBVc2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgZm9yIG11bHRpcHJvY2Vzc2luZyBwaXBlcy4KLQotLSBJc3N1ZSAjOTcyMDogemlwZmlsZSBub3cgd3JpdGVzIGNvcnJlY3QgbG9jYWwgaGVhZGVycyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4KLSAgNCBHaUIuCi0KLS0gSXNzdWUgIzE2OTU1OiBGaXggdGhlIHBvbGwoKSBtZXRob2QgZm9yIG11bHRpcHJvY2Vzc2luZydzIHNvY2tldAotICBjb25uZWN0aW9ucyBvbiBXaW5kb3dzLgotCi0tIFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoKSBub3cgcHJvcGVybHkgY2xvc2VzIHRoZSBpbnB1dCBmaWxlLgotCi0tIElzc3VlICMxNjkwMDogSXNzdWUgYSBSZXNvdXJjZVdhcm5pbmcgd2hlbiBhbiBzc2wgc29ja2V0IGlzIGxlZnQgdW5jbG9zZWQuCi0KLS0gSXNzdWUgIzEzODk5OiBcQSwgXFosIGFuZCBcQiBub3cgY29ycmVjdGx5IG1hdGNoIHRoZSBBLCBaLCBhbmQgQiBsaXRlcmFscwotICB3aGVuIHVzZWQgaW5zaWRlIGNoYXJhY3RlciBjbGFzc2VzIChlLmcuICdbXEFdJykuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzE1NTQ1OiBGaXggcmVncmVzc2lvbiBpbiBzcWxpdGUzJ3MgaXRlcmR1bXAgbWV0aG9kIHdoZXJlIGl0IHdhcwotICBmYWlsaW5nIGlmIHRoZSBjb25uZWN0aW9uIHVzZWQgYSByb3cgZmFjdG9yeSAoc3VjaCBhcyBzcWxpdGUzLlJvdykgdGhhdAotICBwcm9kdWNlZCB1bnNvcnRhYmxlIG9iamVjdHMuIChSZWdyZXNzaW9uIHdhcyBpbnRyb2R1Y2VkIGJ5IGZpeCBmb3IgOTc1MCkuCi0KLS0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCi0gIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KLQotLSBJc3N1ZSAjMTY4Mjg6IEZpeCBlcnJvciBpbmNvcnJlY3RseSByYWlzZWQgYnkgYnoyLmNvbXByZXNzKGInJykgYW5kCi0gIGJ6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzKGInJykuIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFBhY2ttYW4uCi0KLS0gSXNzdWUgIzE2NTQxOiB0a19zZXRQYWxldHRlKCkgbm93IHdvcmtzIHdpdGgga2V5d29yZCBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBwYXJzZXIucG9waXRlbSgpYCBubyBsb25nZXIgcmFpc2VzIFZhbHVlRXJyb3IuCi0gIFRoaXMgbWFrZXMgYHBhcnNlci5jbGVhbigpYCB3b3JrIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ3NlY3Rpb24nXSA9IHt9YGAgbm93IHByZXNlcnZlcwotICBzZWN0aW9uIG9yZGVyIHdpdGhpbiB0aGUgcGFyc2VyLiBUaGlzIG1ha2VzIGBwYXJzZXIudXBkYXRlKClgIHByZXNlcnZlIHNlY3Rpb24KLSAgb3JkZXIgYXMgd2VsbC4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYGBwYXJzZXJbJ0RFRkFVTFQnXSA9IHt9YGAgbm93IGNvcnJlY3RseQotICBjbGVhcnMgcHJldmlvdXMgdmFsdWVzIHN0b3JlZCBpbiB0aGUgZGVmYXVsdCBzZWN0aW9uLiBTYW1lIGdvZXMgZm9yCi0gIGBgcGFyc2VyLnVwZGF0ZSh7J0RFRkFVTFQnOiB7fX0pYGAuCi0KLS0gSXNzdWUgIzk1ODY6IFJlZGVmaW5lIFNFTV9GQUlMRUQgb24gTWFjT1NYIHRvIGtlZXAgY29tcGlsZXIgaGFwcHkuCi0KLS0gSXNzdWUgIzEwNTI3OiBtYWtlIG11bHRpcHJvY2Vzc2luZyB1c2UgcG9sbCgpIGluc3RlYWQgb2Ygc2VsZWN0KCkgaWYgYXZhaWxhYmxlLgotCi0tIElzc3VlICMxNjY4ODogTm93IHJlZ2V4ZXMgY29udGFpbmVkIGJhY2tyZWZlcmVuY2VzIGNvcnJlY3RseSB3b3JrIHdpdGgKLSAgbm9uLUFTQ0lJIHN0cmluZ3MuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzE2NDg1OiBOb3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGlmIGZpbGUgaGVhZGVyIHBhdGNoaW5nIGZhaWxlZAotICBvbiBjbG9zaW5nIGFuIGFpZmMgZmlsZS4KLQotLSBJc3N1ZSAjMTYxNjU6IHNjaGVkLnNjaGVkdWxlci5ydW4oKSBubyBsb25nZXIgYmxvY2tzIGEgc2NoZWR1bGVyIGZvciBvdGhlcgotICB0aHJlYWRzLgotCi0tIElzc3VlICMxNjY0MTogRGVmYXVsdCB2YWx1ZXMgb2Ygc2NoZWQuc2NoZWR1bGVyLmVudGVyKCkgYXJlIG5vIGxvbmdlcgotICBtb2RpZmlhYmxlLgotCi0tIElzc3VlICMxNjYxODogTWFrZSBnbG9iLmdsb2IgbWF0Y2ggY29uc2lzdGVudGx5IGFjcm9zcyBzdHJpbmdzIGFuZCBieXRlcwotICByZWdhcmRpbmcgbGVhZGluZyBkb3RzLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY3MTM6IFBhcnNpbmcgb2YgJ3RlbCcgdXJscyB1c2luZyB1cmxwYXJzZSBzZXBhcmF0ZXMgcGFyYW1zIGZyb20KLSAgcGF0aC4KLQotLSBJc3N1ZSAjMTY0NDM6IEFkZCBkb2NzdHJpbmdzIHRvIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgotICBQYXRjaCBieSBBbnRvbiBLYXN5YW5vdi4KLQotLSBJc3N1ZSAjMTU3MDE6IEZpeCBIVFRQRXJyb3IgaW5mbyBtZXRob2QgY2FsbCB0byByZXR1cm4gdGhlIGhlYWRlcnMgaW5mb3JtYXRpb24uCi0KLS0gSXNzdWUgIzE2NzUyOiBBZGQgYSBtaXNzaW5nIGltcG9ydCB0byBtb2R1bGVmaW5kZXIuIFBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2NjQ2OiBmdHBsaWIuRlRQLm1ha2Vwb3J0KCkgbWlnaHQgbG9zZSBzb2NrZXQgZXJyb3IgZGV0YWlscy4KLSAgKHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EpCi0KLS0gSXNzdWUgIzE2NjI2OiBGaXggaW5maW5pdGUgcmVjdXJzaW9uIGluIGdsb2IuZ2xvYigpIG9uIFdpbmRvd3Mgd2hlbiB0aGUKLSAgcGF0dGVybiBjb250YWlucyBhIHdpbGRjYXJkIGluIHRoZSBkcml2ZSBvciBVTkMgcGF0aC4gIFBhdGNoIGJ5IFNlcmhpeQotICBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NzgzOiBFeGNlcHQgZm9yIHRoZSBudW1iZXIgbWV0aG9kcywgdGhlIEMgdmVyc2lvbiBvZiBkZWNpbWFsIG5vdwotICBzdXBwb3J0cyBhbGwgTm9uZSBkZWZhdWx0IHZhbHVlcyBwcmVzZW50IGluIGRlY2ltYWwucHkuIFRoZXNlIHZhbHVlcyB3ZXJlCi0gIGxhcmdlbHkgdW5kb2N1bWVudGVkLgotCi0tIElzc3VlICMxNjI5ODogSW4gSFRUUFJlc3BvbnNlLnJlYWQoKSwgY2xvc2UgdGhlIHNvY2tldCB3aGVuIHRoZXJlIGlzIG5vCi0gIENvbnRlbnQtTGVuZ3RoIGFuZCB0aGUgaW5jb21pbmcgc3RyZWFtIGlzIGZpbmlzaGVkLiAgUGF0Y2ggYnkgRXJhbgotICBSdW5kc3RlaW4uCi0KLS0gSXNzdWUgIzE1ODcyOiBGaXggMy4zIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSB0aGUgbmV3IGZkLWJhc2VkIHNodXRpbC5ybXRyZWUKLSAgdGhhdCBjYXVzZWQgaXQgdG8gbm90IGlnbm9yZSBjZXJ0YWluIGVycm9ycyB3aGVuIGlnbm9yZV9lcnJvcnMgd2FzIHNldC4KLSAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYSBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYyNDg6IERpc2FibGUgY29kZSBleGVjdXRpb24gZnJvbSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IGJ5Ci0gIHRraW50ZXIgd2hlbiB0aGUgLUUgZmxhZyBpcyBwYXNzZWQgdG8gUHl0aG9uLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgotCi0tIElzc3VlICMxNjYyODogRml4IGEgbWVtb3J5IGxlYWsgaW4gY3R5cGVzLnJlc2l6ZSgpLgotCi0tIElzc3VlICMxMzYxNDogRml4IHNldHVwLnB5IHJlZ2lzdGVyIGZhaWx1cmUgd2l0aCBpbnZhbGlkIHJzdCBpbiBkZXNjcmlwdGlvbi4KLSAgUGF0Y2ggYnkgSnVsaWVuIENvdXJ0ZWF1IGFuZCBQaWVycmUgUGF1bCBMZWZlYnZyZS4KLQotLSBJc3N1ZSAjMTM1MTI6IENyZWF0ZSB+Ly5weXBpcmMgc2VjdXJlbHkgKENWRS0yMDExLTQ5NDQpLiAgSW5pdGlhbCBwYXRjaCBieQotICBQaGlsaXAgSmVudmV5LCB0ZXN0ZWQgYnkgTWFnZWlhIGFuZCBEZWJpYW4uCi0KLS0gSXNzdWUgIzc3MTk6IE1ha2UgZGlzdHV0aWxzIGlnbm9yZSBgYC5uZnMqYGAgZmlsZXMgaW5zdGVhZCBvZiBjaG9raW5nIGxhdGVyCi0gIG9uLiAgSW5pdGlhbCBwYXRjaCBieSBTaWxlbnRHaG9zdCBhbmQgSmVmZiBSYW1uYW5pLgotCi0tIElzc3VlICMxMzEyMDogQWxsb3cgdG8gY2FsbCBwZGIuc2V0X3RyYWNlKCkgZnJvbSB0aHJlYWQuCi0gIFBhdGNoIGJ5IElseWEgU2FuZGxlci4KLQotLSBJc3N1ZSAjMTY1ODU6IE1ha2UgQ0pLIGVuY29kZXJzIHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZXR1cm4gYnl0ZXMgcGVyCi0gIFBFUCAzODMuCi0KLS0gSXNzdWUgIzEwMTgyOiBUaGUgcmUgbW9kdWxlIGRvZXNuJ3QgdHJ1bmNhdGUgaW5kaWNlcyB0byAzMiBiaXRzIGFueW1vcmUuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NTczOiBJbiAydG8zLCB0cmVhdCBlbnVtZXJhdGUoKSBsaWtlIGEgY29uc3VtaW5nIGNhbGwsIHNvIHN1cGVyZmx1b3VzCi0gIGxpc3QoKSBjYWxscyBhcmVuJ3QgYWRkZWQgdG8gZmlsdGVyKCksIG1hcCgpLCBhbmQgemlwKCkgd2hpY2ggYXJlIGRpcmVjdGx5Ci0gIHBhc3NlZCBlbnVtZXJhdGUoKS4KLQotLSBJc3N1ZSAjMTI4NDg6IFRoZSBwdXJlIFB5dGhvbiBwaWNrbGUgaW1wbGVtZW50YXRpb24gbm93IHRyZWF0cyBvYmplY3QKLSAgbGVuZ3RocyBhcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMsIGxpa2UgdGhlIEMgaW1wbGVtZW50YXRpb24gZG9lcy4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY0MDg6IEZpeCBmaWxlIGRlc2NyaXB0b3JzIG5vdCBiZWluZyBjbG9zZWQgaW4gZXJyb3IgY29uZGl0aW9ucwotICBpbiB0aGUgemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ4MTogbXVsdGlwcm9jZXNzaW5nIG5vIGxvbmdlciBsZWFrcyBwcm9jZXNzIGhhbmRsZXMgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTYxNDA6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgZG91YmxlIGNsb3NlcyBpdHMgY2hpbGQKLSAgc3VicHJvY2Vzcy5QSVBFIHBhcmVudCBmaWxlIGRlc2NyaXB0b3JzIG9uIGNoaWxkIGVycm9yIHByaW9yIHRvIGV4ZWMoKS4KLQotLSBSZW1vdmUgYSBiYXJlIHByaW50IHRvIHN0ZG91dCBmcm9tIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSB0aGF0IGNvdWxkIGhhdmUKLSAgaGFwcGVuZWQgaWYgdGhlIGNoaWxkIHByb2Nlc3Mgd3JvdGUgZ2FyYmFnZSB0byBpdHMgcHJlLWV4ZWMgZXJyb3IgcGlwZS4KLQotLSBJc3N1ZSAjMTYzMjc6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBubyBsb25nZXIgbGVha3MgZmlsZSBkZXNjcmlwdG9ycwotICB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGVzIHRvIHRoZSBjaGlsZCB3aGVuIGZvcmsoKSBmYWlscy4KLQotLSBJc3N1ZSAjMTQzOTY6IEhhbmRsZSB0aGUgb2RkIHJhcmUgY2FzZSBvZiB3YWl0cGlkIHJldHVybmluZyAwIHdoZW4gbm90Ci0gIGV4cGVjdGVkIGluIHN1YnByb2Nlc3MuUG9wZW4ud2FpdCgpLgotCi0tIElzc3VlICMxNjQxMTogRml4IGEgYnVnIHdoZXJlIHpsaWIuZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbWlnaHQgdHJ5IHRvIGFjY2VzcwotICBwcmV2aW91c2x5LWZyZWVkIG1lbW9yeS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYzNTc6IGZpeCBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgU1NMU29ja2V0IGNyZWF0ZWQgdGhyb3VnaAotICBTU0xDb250ZXh0LndyYXBfc29ja2V0KCkuICBPcmlnaW5hbCBwYXRjaCBieSBKZWZmIE1jTmVpbC4KLQotLSBJc3N1ZSAjMTY0MDk6IFRoZSByZXBvcnRob29rIGNhbGxiYWNrIG1hZGUgYnkgdGhlIGxlZ2FjeQotICB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSBBUEkgbm93IHByb3Blcmx5IHN1cHBsaWVzIGEgY29uc3RhbnQgbm9uLXplcm8KLSAgYmxvY2tfc2l6ZSBhcyBpdCBkaWQgaW4gUHl0aG9uIDMuMiBhbmQgMi43LiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZgotICB1cmxsaWIucmVxdWVzdC5VUkxvcGVuZXIucmV0cmlldmUuCi0KLS0gSXNzdWUgIzE2NDMxOiBVc2UgdGhlIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBjb25zdHJ1Y3RpbmcgYSBEZWNpbWFsIHN1YnR5cGUKLSAgZnJvbSBhIERlY2ltYWwgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzE2MzUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGFjY3VtdWxhdGVzIGRhdGEgZnJvbQotICBzdWNjZXNzaXZlIGNhbGxzIGFmdGVyIEVPRiBpbiB1bnVzZWRfZGF0YSwgaW5zdGVhZCBvZiBvbmx5IHNhdmluZyB0aGUgYXJndW1lbnQKLSAgdG8gdGhlIGxhc3QgY2FsbC4gZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbm93IGNvcnJlY3RseSBzZXRzIHVudXNlZF9kYXRhIGFuZAotICB1bmNvbnN1bWVkX3RhaWwuIEEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBNZW1vcnlFcnJvciB3aGVuIHNldHRpbmcgdGhlCi0gIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUgaGFzIGFsc28gYmVlbiBmaXhlZC4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTI3NTk6IHNyZV9wYXJzZSBub3cgcmFpc2VzIGEgcHJvcGVyIGVycm9yIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwCi0gIGlzIG1pc3NpbmcuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MTUyOiBmaXggdG9rZW5pemUgdG8gaWdub3JlIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGVuCi0gIG5vIG5ld2xpbmUgaXMgZm91bmQuICBQYXRjaCBieSBOZWQgQmF0Y2hlbGRlci4KLQotLSBJc3N1ZSAjMTYyMzA6IEZpeCBhIGNyYXNoIGluIHNlbGVjdC5zZWxlY3QoKSB3aGVuIG9uZSB0aGUgbGlzdHMgY2hhbmdlcwotICBzaXplIHdoaWxlIGl0ZXJhdGVkIG9uLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYyMjg6IEZpeCBhIGNyYXNoIGluIHRoZSBqc29uIG1vZHVsZSB3aGVyZSBhIGxpc3QgY2hhbmdlcyBzaXplCi0gIHdoaWxlIGl0IGlzIGJlaW5nIGVuY29kZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNDg5NzogRW5oYW5jZSBlcnJvciBtZXNzYWdlcyBvZiBzdHJ1Y3QucGFjayBhbmQKLSAgc3RydWN0LnBhY2tfaW50by4gUGF0Y2ggYnkgTWF0dGkgTcOka2kuCi0KLS0gSXNzdWUgIzEyODkwOiBjZ2l0YiBubyBsb25nZXIgcHJpbnRzIHNwdXJpb3VzIDxwPiB0YWdzIGluIHRleHQKLSAgbW9kZSB3aGVuIHRoZSBsb2dkaXIgb3B0aW9uIGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTYzMDc6IEZpeCBtdWx0aXByb2Nlc3NpbmcuUG9vbC5tYXBfYXN5bmMgbm90IGNhbGxpbmcgaXRzIGNhbGxiYWNrcy4KLSAgUGF0Y2ggYnkgSmFubmUgS2FyaWxhLgotCi0tIElzc3VlICMxNjI1MDogRml4IFVSTEVycm9yIGludm9jYXRpb24gd2l0aCBwcm9wZXIgYXJncy4KLQotLSBJc3N1ZSAjMTYxMTY6IEZpeCBpbmNsdWRlIGFuZCBsaWJyYXJ5IHBhdGhzIHRvIGJlIGNvcnJlY3Qgd2hlbiBidWlsZGluZyBDCi0gIGV4dGVuc2lvbnMgaW4gdmVudnMuCi0KLS0gSXNzdWUgIzE2MjQ1OiBGaXggdGhlIHZhbHVlIG9mIGEgZmV3IGVudGl0aWVzIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCi0KLS0gSXNzdWUgIzE0Mzk4OiBGaXggc2l6ZSB0cnVuY2F0aW9uIGFuZCBvdmVyZmxvdyBidWdzIGluIHRoZSBiejIgbW9kdWxlLgotCi0tIElzc3VlICMxNjIyMDogd3NnaXJlZiBub3cgYWx3YXlzIGNhbGxzIGNsb3NlKCkgb24gYW4gaXRlcmFibGUgcmVzcG9uc2UuCi0gIFBhdGNoIGJ5IEJyZW50IFR1YmJzLgotCi0tIElzc3VlICMxNjI3MDogdXJsbGliIG1heSBoYW5nIHdoZW4gdXNlZCBmb3IgcmV0cmlldmluZyBmaWxlcyB2aWEgRlRQIGJ5IHVzaW5nCi0gIGEgY29udGV4dCBtYW5hZ2VyLiAgUGF0Y2ggYnkgR2lhbXBhb2xvIFJvZG9sYScuCi0KLS0gSXNzdWUgIzE2NDYxOiBXYXZlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gZGVhbCB3aXRoIDRHQiB3YXYgZmlsZXMsCi0gIGFuZCBzYW1wbGUgcmF0ZSBvZiA0NDEwMCBIei4KLQotLSBJc3N1ZSAjMTYxNzY6IFByb3Blcmx5IGlkZW50aWZ5IFdpbmRvd3MgOCB2aWEgcGxhdGZvcm0ucGxhdGZvcm0oKQotCi0tIElzc3VlICMxNjExNDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBwcm92aWRlcyBhIG1pc2xlYWRpbmcgZXJyb3IKLSAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgYXJnc1swXSBkaWQgbm90IGV4aXN0IHdoZW4gZWl0aGVyIHRoZSBjd2Qgb3IgZXhlY3V0YWJsZQotICBrZXl3b3JkIGFyZ3VtZW50cyBzcGVjaWZpZWQgYSBwYXRoIHRoYXQgZGlkIG5vdCBleGlzdC4KLQotLSBJc3N1ZSAjMTYxNjk6IEZpeCBjdHlwZXMuV2luRXJyb3IoKSdzIGNvbmZ1c2lvbiBiZXR3ZWVuIGVycm5vIGFuZCB3aW5lcnJvci4KLQotLSBJc3N1ZSAjMTYwNzY6IE1hZGUgX2VsZW1lbnR0cmVlLkVsZW1lbnQgcGlja2xlYWJsZSBpbiBhIHdheSB0aGF0IGlzIGNvbXBhdGlibGUKLSAgd2l0aCB0aGUgUHl0aG9uIEVsZW1lbnQuIFBpY2tsaW5nL3VucGlja2xpbmcgb2YgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQKLSAgd29ya3MgYWdhaW4gLSB0aGlzIHdhcyBhIHRlbXBvcmFyeSByZWdyZXNzaW9uIGZyb20gMy4yIHdoZXJlIHRoZSBieS1kZWZhdWx0Ci0gIGltcG9ydGVkIF9lbGVtZW50dHJlZSBoYWQgbm8gcGlja2xpbmcgY2FwYWJpbGl0eS4KLQotLSBJc3N1ZSAjMTYwODk6IEFsbG93IEVsZW1lbnRUcmVlLlRyZWVCdWlsZGVyIHRvIHdvcmsgYWdhaW4gd2l0aCBhIG5vbi1FbGVtZW50Ci0gIGVsZW1lbnRfZmFjdG9yeSAoZml4ZXMgYSByZWdyZXNzaW9uIGluIFNpbXBsZVRBTCkuCi0KLS0gSXNzdWUgIzE2OTEzOiBGaXggRWxlbWVudC5pdGVydGV4dCgpJ3MgaGFuZGxpbmcgb2YgdGV4dCB3aXRoIFhNTCBlbnRpdGllcy4sCi0KLS0gSXNzdWUgIzE2MDM0OiBGaXggcGVyZm9ybWFuY2UgcmVncmVzc2lvbnMgaW4gdGhlIG5ldyBgYnoyLkJaMkZpbGVgCi0gIGltcGxlbWVudGF0aW9uLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjExMjogcGxhdGZvcm0uYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGNvcnJlY3RseSBlc2NhcGUgYXJndW1lbnQgdG8KLSAgL3Vzci9iaW4vZmlsZS4gIFBhdGNoIGJ5IERhdmlkIEJlbmphbWluLgotCi0tIElzc3VlICMxNTc1NjogYHN1YnByb2Nlc3MucG9sbCgpYCBub3cgcHJvcGVybHkgaGFuZGxlcyBgZXJybm8uRUNISUxEYCB0bwotICByZXR1cm4gYSByZXR1cm5jb2RlIG9mIDAgd2hlbiB0aGUgY2hpbGQgaGFzIGFscmVhZHkgZXhpdGVkIG9yIGNhbm5vdCBiZSB3YWl0ZWQKLSAgb24uCi0KLS0gSXNzdWUgIzE1MzIzOiBJbXByb3ZlIGZhaWx1cmUgbWVzc2FnZSBvZiBgTW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpYC4KLQotLSBJc3N1ZSAjMTYwNjQ6IGBgdW5pdHRlc3QgLW1gYCBjbGFpbXMgZXhlY3V0YWJsZSBpcyAicHl0aG9uIiwgbm90ICJweXRob24zIi4KLQotLSBJc3N1ZSAjMTIzNzY6IFBhc3Mgb24gcGFyYW1ldGVycyBpbiBgVGV4dFRlc3RSZXN1bHQuX19pbml0X18oKWAgc3VwZXIgY2FsbC4KLQotLSBJc3N1ZSAjMTUyMjI6IEluc2VydCBibGFuayBsaW5lIGFmdGVyIGVhY2ggbWVzc2FnZSBpbiBtYm94IG1haWxib3hlcy4KLQotLSBJc3N1ZSAjMTYwMTM6IEZpeCBgY3N2LlJlYWRlcmAgcGFyc2luZyBpc3N1ZSB3aXRoIGVuZGluZyBxdW90ZSBjaGFyYWN0ZXJzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTQyMTogRml4IGFuIE92ZXJmbG93RXJyb3IgaW4gYENhbGVuZGFyLml0ZXJtb250aGRhdGVzKClgIGFmdGVyCi0gIGBkYXRldGltZS5NQVhZRUFSYC4gIFBhdGNoIGJ5IEPDqWRyaWMgS3JpZXIuCi0KLS0gSXNzdWUgIzE1OTcwOiBgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCBub3cgc2VyaWFsaXplcyBjb3JyZWN0bHkgdGhlIGVtcHR5IEhUTUwKLSAgZWxlbWVudHMgJ21ldGEnIGFuZCAncGFyYW0nLgotCi0tIElzc3VlICMxNTg0MjogVGhlIGBTb2NrZXRJTy57cmVhZGFibGUsd3JpdGFibGUsc2Vla2FibGV9YCBtZXRob2RzIG5vdyByYWlzZQotICBWYWx1ZUVycm9yIHdoZW4gdGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KLQotLSBJc3N1ZSAjMTU4NzY6IEZpeCBhIHJlZmxlYWsgaW4gdGhlIGBjdXJzZXNgIG1vZHVsZTogd2luZG93LmVuY29kaW5nLgotCi0tIElzc3VlICMxNTg4MTogRml4IGBhdGV4aXRgIGhvb2sgaW4gYG11bHRpcHJvY2Vzc2luZ2AuICBPcmlnaW5hbCBwYXRjaCBieSBDaHJpcwotICBNY0Rvbm91Z2guCi0KLS0gSXNzdWUgIzE1ODQxOiBUaGUgcmVhZGFibGUoKSwgd3JpdGFibGUoKSBhbmQgc2Vla2FibGUoKSBtZXRob2RzIG9mCi0gIGBpby5CeXRlc0lPYCBhbmQgYGlvLlN0cmluZ0lPYCBvYmplY3RzIG5vdyByYWlzZSBWYWx1ZUVycm9yIHdoZW4gdGhlIG9iamVjdAotICBoYXMgYmVlbiBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgotCi0tIElzc3VlICMxNTQ0NzogVXNlIGBzdWJwcm9jZXNzLkRFVk5VTExgIGluIHdlYmJyb3dzZXIsIGluc3RlYWQgb2Ygb3BlbmluZwotICBgb3MuZGV2bnVsbGAgZXhwbGljaXRseSBhbmQgbGVhdmluZyBpdCBvcGVuLgotCi0tIElzc3VlICMxNTUwOTogYHdlYmJyb3dzZXIuVW5peEJyb3dzZXJgIG5vIGxvbmdlciBwYXNzZXMgZW1wdHkgYXJndW1lbnRzIHRvCi0gIFBvcGVuIHdoZW4gYGAlYWN0aW9uYGAgc3Vic3RpdHV0aW9ucyBwcm9kdWNlIGVtcHR5IHN0cmluZ3MuCi0KLS0gSXNzdWUgIzEyNzc2LCBpc3N1ZSAjMTE4Mzk6IENhbGwgYGFyZ3BhcnNlYCB0eXBlIGZ1bmN0aW9uIChzcGVjaWZpZWQgYnkKLSAgYWRkX2FyZ3VtZW50KSBvbmx5IG9uY2UuICBCZWZvcmUsIHRoZSB0eXBlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdHdpY2UgaW4gdGhlCi0gIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgd2FzIHNwZWNpZmllZCBhbmQgdGhlIGFyZ3VtZW50IHdhcyBnaXZlbiBhcyB3ZWxsLiAgVGhpcwotICB3YXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBmb3IgdGhlIEZpbGVUeXBlIHR5cGUsIGFzIGEgZGVmYXVsdCBmaWxlIHdvdWxkCi0gIGFsd2F5cyBiZSBvcGVuZWQsIGV2ZW4gaWYgYSBmaWxlIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLQotLSBJc3N1ZSAjMTU5MDY6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYGFyZ3BhcnNlYCBjYXVzZWQgYnkgdGhlIHByZWNlZGluZyBjaGFuZ2UsCi0gIHdoZW4gYGBhY3Rpb249J2FwcGVuZCdgYCwgYGB0eXBlPSdzdHInYGAgYW5kIGBgZGVmYXVsdD1bXWBgLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3MTE0OiBJRExFIG5vdyB1c2VzIG5vbi1zdHJpY3QgY29uZmlnIHBhcnNlci4KLQotLSBJc3N1ZSAjOTI5MDogSW4gSURMRSB0aGUgc3lzLnN0ZCogc3RyZWFtcyBub3cgaW1wbGVtZW50IGlvLlRleHRJT0Jhc2UKLSAgaW50ZXJmYWNlIGFuZCBzdXBwb3J0IGFsbCBtYW5kYXRvcnkgbWV0aG9kcyBhbmQgcHJvcGVydGllcy4KLQotLSBJc3N1ZSAjMTY4Mjk6IElETEUgcHJpbnRpbmcgbm8gbG9uZ2VyIGZhaWxzIGlmIHRoZXJlIGFyZSBzcGFjZXMgb3Igb3RoZXIKLSAgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIHRoZSBmaWxlIHBhdGguCi0KLS0gSXNzdWUgIzE2NDkxOiBJRExFIG5vdyBwcmludHMgY2hhaW5lZCBleGNlcHRpb24gdHJhY2ViYWNrcy4KLQotLSBJc3N1ZSAjMTY4MTk6IElETEUgbWV0aG9kIGNvbXBsZXRpb24gbm93IGNvcnJlY3RseSB3b3JrcyBmb3IgYnl0ZXMgbGl0ZXJhbHMuCi0KLS0gSXNzdWUgIzE2NTA0OiBJRExFIG5vdyBjYXRjaGVzIFN5bnRheEVycm9ycyByYWlzZWQgYnkgdG9rZW5pemVyLiBQYXRjaCBieQotICBSb2dlciBTZXJ3eS4KLQotLSBJc3N1ZSAjMTY1MTE6IFVzZSBkZWZhdWx0IElETEUgd2lkdGggYW5kIGhlaWdodCBpZiBjb25maWcgcGFyYW0gaXMgbm90IHZhbGlkLgotICBQYXRjaCBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMjA3NTg5OiBBZGQgQ3V0L0NvcHkvUGFzdGUgaXRlbXMgdG8gSURMRSByaWdodCBjbGljayBDb250ZXh0IE1lbnUKLSAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCi0KLVRlc3RzCi0tLS0tLQorLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KIAogLSBJc3N1ZSAjMTc0NDg6IHRlc3Rfc2F4IG5vdyBza2lwcyBpZiB0aGVyZSBhcmUgbm8geG1sIHBhcnNlcnMgYXZhaWxhYmxlCiAgIGluc3RlYWQgb2YgcmFpc2luZyBhbiBJbXBvcnRFcnJvci4KQEAgLTE3NjUsOCArMjk0OSwxNSBAQAogCiAtIElzc3VlICMxMzg5ODogdGVzdF9zc2wgbm8gbG9uZ2VyIHByaW50cyBhIHNwdXJpb3VzIHN0YWNrIHRyYWNlIG9uIFVidW50dS4KIAorLSBJc3N1ZSAjMTcyODM6IFNoYXJlIGNvZGUgYmV0d2VlbiBgX19tYWluX18ucHlgIGFuZCBgcmVncnRlc3QucHlgIGluCisgIGBMaWIvdGVzdGAuCisKIC0gSXNzdWUgIzE3MjQ5OiBjb252ZXJ0IGEgdGVzdCBpbiB0ZXN0X2NhcGkgdG8gdXNlIHVuaXR0ZXN0IGFuZCByZWFwIHRocmVhZHMuCiAKKy0gSXNzdWUgIzE3MTA3OiBUZXN0IGNsaWVudC1zaWRlIFNOSSBzdXBwb3J0IGluIHVybGxpYi5yZXF1ZXN0IHRoYW5rcyB0bworICB0aGUgbmV3IHNlcnZlci1zaWRlIFNOSSBzdXBwb3J0IGluIHRoZSBzc2wgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQorICBEYW5pZWwgQmxhY2suCisKIC0gSXNzdWUgIzE3MDQxOiBGaXggdGVzdGluZyB3aGVuIFB5dGhvbiBpcyBjb25maWd1cmVkIHdpdGggdGhlCiAgIC0td2l0aG91dC1kb2Mtc3RyaW5ncy4KIApAQCAtMTc3NCw2ICsyOTY1LDggQEAKIAogLSBJc3N1ZSAjMTU1Mzk6IEFkZGVkIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIFRvb2xzL3NjcmlwdHMvcGluZGVudC5weS4KIAorLSBJc3N1ZSAjMTY4MzY6IEVuYWJsZSBJUHY2IHN1cHBvcnQgZXZlbiBpZiBJUHY2IGlzIGRpc2FibGVkIG9uIHRoZSBidWlsZCBob3N0LgorCiAtIElzc3VlICMxNzQ3OTogdGVzdF9pbyBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KICAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCkBAIC0xODMzLDYgKzMwMjYsMTEgQEAKIAogLSBJc3N1ZSAjMTY3NDg6IHRlc3RfaGVhcHEgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAKKy0gSXNzdWUgIzEwNjQ2OiBUZXN0cyByZWFycmFuZ2VkIGZvciBvcy5zYW1lZmlsZS9zYW1lc3RhdCB0byBjaGVjayBmb3Igbm90CisgIGp1c3Qgc3ltbGlua3MgYnV0IGFsc28gaGFyZCBsaW5rcy4KKworLSBJc3N1ZSAjMTUzMDI6IFN3aXRjaCByZWdydGVzdCBmcm9tIHVzaW5nIGdldG9wdCB0byB1c2luZyBhcmdwYXJzZS4KKwogLSBJc3N1ZSAjMTUzMjQ6IEZpeCByZWdydGVzdCBwYXJzaW5nIG9mIC0tZnJvbWZpbGUsIC0tbWF0Y2gsIGFuZCAtLXJhbmRvbWl6ZQogICBvcHRpb25zLgogCkBAIC0xODQyLDYgKzMwNDAsOSBAQAogLSBJc3N1ZSAjMTY2NjQ6IEFkZCByZWdyZXNzaW9uIHRlc3RzIGZvciBnbG9iJ3MgYmVoYXZpb3VyIGNvbmNlcm5pbmcgZW50cmllcwogICBzdGFydGluZyB3aXRoIGEgIi4iLiAgUGF0Y2ggYnkgU2ViYXN0aWFuIEtyZWZ0LgogCistIElzc3VlICMxMzM5MDogVGhlIGBgLVJgYCBvcHRpb24gdG8gcmVncnRlc3Qgbm93IGFsc28gY2hlY2tzIGZvciBtZW1vcnkKKyAgYWxsb2NhdGlvbiBsZWFrcywgdXNpbmcgOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAuCisKIC0gSXNzdWUgIzE2NTU5OiBBZGQgbW9yZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlLCBpbmNsdWRpbmcgc29tZSBmcm9tIHRoZQogICBvZmZpY2lhbCB0ZXN0IHN1aXRlIGF0IGpzb24ub3JnLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIApAQCAtMTg2MCw3ICszMDYxLDcgQEAKIC0gSXNzdWUgIzE1ODAyOiBGaXggdGVzdCBsb2dpYyBpbiBgVGVzdE1haWxkaXIudGVzdF9jcmVhdGVfdG1wKClgLiBQYXRjaCBieQogICBTZXJoaXkgU3RvcmNoYWthLgogCi0tIElzc3VlICMxNTU1NzogQWRkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIGB3ZWJicm93c2VyYCBtb2R1bGUsIHRoYW5rcyB0byBBbnRvbgorLSBJc3N1ZSAjMTU1NTc6IEFkZGVkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIHdlYmJyb3dzZXIgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KICAgQmFya292c2t5LgogCiAtIElzc3VlICMxNjY5ODogU2tpcCBwb3NpeCB0ZXN0X2dldGdyb3VwcyB3aGVuIGJ1aWx0IHdpdGggT1MgWApAQCAtMTg2OSw2ICszMDcwLDMwIEBACiBCdWlsZAogLS0tLS0KIAorLSBJc3N1ZSAjMTYwNjc6IEFkZCBkZXNjcmlwdGlvbiBpbnRvIE1TSSBmaWxlIHRvIHJlcGxhY2UgaW5zdGFsbGVyJ3MKKyAgdGVtcG9yYXJ5IG5hbWUuCisKKy0gSXNzdWUgIzE4MjU3OiBGaXggcmVhZGxpbmsgdXNhZ2UgaW4gcHl0aG9uLWNvbmZpZy4gIEluc3RhbGwgdGhlIHB5dGhvbgorICB2ZXJzaW9uIGFnYWluIG9uIERhcndpbi4KKworLSBJc3N1ZSAjMTg0ODE6IEFkZCBDIGNvdmVyYWdlIHJlcG9ydGluZyB3aXRoIGdjb3YgYW5kIGxjb3YuIEEgbmV3IG1ha2UgdGFyZ2V0CisgICJjb3ZlcmFnZS1yZXBvcnQiIGNyZWF0ZXMgYW4gaW5zdHJ1bWVudGVkIFB5dGhvbiBidWlsZCwgcnVucyB1bml0IHRlc3RzCisgIGFuZCBjcmVhdGVzIGEgSFRNTC4gVGhlIHJlcG9ydCBjYW4gYmUgdXBkYXRlZCB3aXRoICJtYWtlIGNvdmVyYWdlLWxjb3YiLgorCistIElzc3VlICMxNzg0NTogQ2xhcmlmaWVkIHRoZSBtZXNzYWdlIHByaW50ZWQgd2hlbiBzb21lIG1vZHVsZSBhcmUgbm90IGJ1aWx0LgorCistIElzc3VlICMxODI1NjogQ29tcGlsYXRpb24gZml4IGZvciByZWNlbnQgQUlYIHJlbGVhc2VzLiAgUGF0Y2ggYnkKKyAgRGF2aWQgRWRlbHNvaG4uCisKKy0gSXNzdWUgIzE3NTQ3OiBJbiBjb25maWd1cmUsIGV4cGxpY2l0bHkgcGFzcyAtV2Zvcm1hdCBmb3IgdGhlIGJlbmVmaXQgZm9yIEdDQworICA0LjguCisKKy0gSXNzdWUgIzE1MTcyOiBEb2N1bWVudCBOQVNNIDIuMTArIGFzIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBPcGVuU1NMIDEuMC4xCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3NTkxOiBVc2UgbG93ZXJjYXNlIGZpbGVuYW1lcyB3aGVuIGluY2x1ZGluZyBXaW5kb3dzIGhlYWRlciBmaWxlcy4KKyAgUGF0Y2ggYnkgUm91bWVuIFBldHJvdi4KKwogLSBJc3N1ZSAjMTc1NTA6IEZpeCB0aGUgLS1lbmFibGUtcHJvZmlsaW5nIGNvbmZpZ3VyZSBzd2l0Y2guCiAKIC0gSXNzdWUgIzE3NDI1OiBCdWlsZCB3aXRoIG9wZW5zc2wgMS4wLjFkIG9uIFdpbmRvd3MuCkBAIC0xODg0LDYgKzMxMDksMTAgQEAKIAogLSBJc3N1ZSAjMzcxODogVXNlIEFDX0FSR19WQVIgdG8gc2V0IE1BQ0hERVAgaW4gY29uZmlndXJlLmFjLgogCistIElzc3VlICMxNjIzNTogSW1wbGVtZW50IHB5dGhvbi1jb25maWcgYXMgYSBzaGVsbCBzY3JpcHQuCisKKy0gSXNzdWUgIzE2NzY5OiBSZW1vdmUgb3V0ZGF0ZWQgVmlzdWFsIFN0dWRpbyBwcm9qZWN0cy4KKwogLSBJc3N1ZSAjMTcwMzE6IEZpeCBydW5uaW5nIHJlZ2VuIGluIGNyb3NzIGJ1aWxkcy4KIAogLSBJc3N1ZSAjMzc1NDogZml4IHR5cG8gaW4gcHRocmVhZCBBQ19DQUNIRV9WQUwuCkBAIC0xODkxLDEyICszMTIwLDE0IEBACiAtIElzc3VlICMxNTQ4NDogRml4IF9QWVRIT05fUFJPSkVDVF9CQVNFIGZvciBzcmNkaXIgIT0gYnVpbGRkaXIgYnVpbGRzOwogICB1c2UgX1BZVEhPTl9QUk9KRUNUX0JBU0UgaW4gZGlzdHV0aWxzL3N5c2NvbmZpZy5weS4KIAorLSBEcm9wIHN1cHBvcnQgZm9yIFdpbmRvd3MgMjAwMC4KKwogLSBJc3N1ZSAjMTcwMjk6IExldCBoMnB5IHNlYXJjaCB0aGUgbXVsdGlhcmNoIHN5c3RlbSBpbmNsdWRlIGRpcmVjdG9yeS4KIAogLSBJc3N1ZSAjMTY5NTM6IEZpeCBzb2NrZXQgbW9kdWxlIGNvbXBpbGF0aW9uIG9uIHBsYXRmb3JtcyB3aXRoCiAgIEhBVkVfQlJPS0VOX1BPTEwuIFBhdGNoIGJ5IEplZmZyZXkgQXJtc3Ryb25nLgogCi0tIElzc3VlICMxNjgzNjogRW5hYmxlIElQdjYgc3VwcG9ydCBldmVuIGlmIElQdjYgaXMgZGlzYWJsZWQgb24gdGhlIGJ1aWxkIGhvc3QuCistIElzc3VlICMxNjMyMDogUmVtb3ZlIHJlZHVuZGFudCBNYWtlZmlsZSBkZXBlbmRlbmNpZXMgZm9yIHN0cmluZ3MgYW5kIGJ5dGVzLgogCiAtIENyb3NzIGNvbXBpbGluZyBuZWVkcyBob3N0IGFuZCBidWlsZCBzZXR0aW5ncy4gY29uZmlndXJlIG5vIGxvbmdlcgogICBjcmVhdGVzIGEgYnJva2VuIFBZVEhPTl9GT1JfQlVJTEQgdmFyaWFibGUgd2hlbiAtLWJ1aWxkIGlzIG1pc3NpbmcuCkBAIC0xOTE4LDYgKzMxNDksOCBAQAogLSBJc3N1ZSAjMTU5MjM6IEZpeCBhIG1pc3Rha2UgaW4gYGBhc2RsX2MucHlgYCB0aGF0IHJlc3VsdGVkIGluIGEgVHlwZUVycm9yCiAgIGFmdGVyIDI4MDFiZjg3NWEyNCAoc2VlICMxNTgwMSkuCiAKKy0gSXNzdWUgIzE2MTM1OiBSZW1vdmUgT1MvMiBzdXBwb3J0LgorCiAtIElzc3VlICMxNTgxOTogTWFrZSBzdXJlIHdlIGNhbiBidWlsZCBQeXRob24gb3V0LW9mLXRyZWUgZnJvbSBhIHJlYWQtb25seQogICBzb3VyY2UgZGlyZWN0b3J5LiAgKFNvbWV3aGF0IHJlbGF0ZWQgdG8gaXNzdWUgIzk4NjAuKQogCkBAIC0xOTMwLDExICszMTYzLDU0IEBACiBDLUFQSQogLS0tLS0KIAorLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyBpbiBhIGZ1bmN0aW9uIGluIGltcG9ydGxpYiBwcm92aWRlZCB0byBoZWxwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKworLSBJc3N1ZSAjOTM2OTogVGhlIHR5cGVzIG9mIGBjaGFyKmAgYXJndW1lbnRzIG9mIFB5T2JqZWN0X0NhbGxGdW5jdGlvbigpIGFuZAorICBQeU9iamVjdF9DYWxsTWV0aG9kKCkgbm93IGNoYW5nZWQgdG8gYGNvbnN0IGNoYXIqYC4gIEJhc2VkIG9uIHBhdGNoZXMgYnkKKyAgSsO2cmcgTcO8bGxlciBhbmQgTGFycyBCdWl0aW5jay4KKworLSBJc3N1ZSAjMTcyMDY6IFB5X0NMRUFSKCksIFB5X0RFQ1JFRigpLCBQeV9YSU5DUkVGKCkgYW5kIFB5X1hERUNSRUYoKSBub3cKKyAgZXhwYW5kIHRoZWlyIGFyZ3VtZW50cyBvbmNlIGluc3RlYWQgb2YgbXVsdGlwbGUgdGltZXMuICBQYXRjaCB3cml0dGVuIGJ5IElsbGlhCisgIFBvbG9zdWtoaW4uCisKKy0gSXNzdWUgIzE3NTIyOiBBZGQgdGhlIFB5R0lMU3RhdGVfQ2hlY2soKSBBUEkuCisKKy0gSXNzdWUgIzE3MzI3OiBBZGQgUHlEaWN0X1NldERlZmF1bHQuCisKIC0gSXNzdWUgIzE2ODgxOiBGaXggUHlfQVJSQVlfTEVOR1RIIG1hY3JvIGZvciBHQ0MgPCAzLjEuCiAKKy0gSXNzdWUgIzE2NTA1OiBSZW1vdmUgdW51c2VkIFB5X1RQRkxBR1NfSU5UX1NVQkNMQVNTLgorCistIElzc3VlICMxNjA4NjogUHlUeXBlT2JqZWN0LnRwX2ZsYWdzIGFuZCBQeVR5cGVfU3BlYy5mbGFncyBhcmUgbm93IHVuc2lnbmVkCisgICh1bnNpZ25lZCBsb25nIGFuZCB1bnNpZ25lZCBpbnQpIHRvIGF2b2lkIGFuIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAorICBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgKCgxIDw8IDMxKS4gUHlUeXBlX0dldEZsYWdzKCkgcmVzdWx0IHR5cGUgaXMKKyAgbm93IHVuc2lnbmVkIHRvbyAodW5zaWduZWQgbG9uZywgaW5zdGVhZCBvZiBsb25nKS4KKworLSBJc3N1ZSAjMTYxNjY6IEFkZCBQWV9MSVRUTEVfRU5ESUFOIGFuZCBQWV9CSUdfRU5ESUFOIG1hY3JvcyBhbmQgdW5pZmllZAorICBlbmRpYW5uZXNzIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcuCisKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMTc3MDE6IEltcHJvdmluZyBzdHJmdGltZSBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICMxODQ0MDogQ2xhcmlmeSB0aGF0IGBoYXNoKClgIGNhbiB0cnVuY2F0ZSB0aGUgdmFsdWUgcmV0dXJuZWQgZnJvbSBhbgorICBvYmplY3QncyBjdXN0b20gYF9faGFzaF9fKClgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTc4NDQ6IEFkZCBsaW5rcyB0byBlbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcy4KKworLSBJc3N1ZSAjMTQwOTc6IGltcHJvdmUgdGhlICJpbnRyb2R1Y3Rpb24iIHBhZ2Ugb2YgdGhlIHR1dG9yaWFsLgorCistIElzc3VlICMxNzk3NzogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBjYWRlZmF1bHQgYXJndW1lbnQncyBkZWZhdWx0IHZhbHVlCisgIGluIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKSBpcyBmaXhlZCB0byBtYXRjaCB0aGUgY29kZS4KKworLSBJc3N1ZSAjNjY5NjogYWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBQcm9maWxlIG9iamVjdHMsIGFuZCBpbXByb3ZlCisgIHByb2ZpbGUvY1Byb2ZpbGUgZG9jcy4gIFBhdGNoIGJ5IFRvbSBQaW5ja25leS4KKworLSBJc3N1ZSAjMTU5NDA6IFNwZWNpZnkgZWZmZWN0IG9mIGxvY2FsZSBvbiB0aW1lIGZ1bmN0aW9ucy4KKwogLSBJc3N1ZSAxNzUzODogRG9jdW1lbnQgWE1MIHZ1bG5lcmFiaWx0aWVzCiAKIC0gSXNzdWUgIzE2NjQyOiBzY2hlZC5zY2hlZHVsZXIgdGltZWZ1bmMgaW5pdGlhbCBkZWZhdWx0IGlzIHRpbWUubW9ub3RvbmljLgpAQCAtMTk3OSw4ICszMjU1LDggQEAKIAogLSBJc3N1ZSAjMTM1Mzg6IEltcHJvdmUgc3RyKCkgYW5kIG9iamVjdC5fX3N0cl9fKCkgZG9jdW1lbnRhdGlvbi4KIAotLSBJc3N1ZSAjMTY0ODk6IE1ha2UgaXQgY2xlYXJlciB0aGF0IGltcG9ydGxpYi5maW5kX2xvYWRlcigpIHJlcXVpcmVzIGFueSBhbmQKLSAgYWxsIHBhY2thZ2VzIHRvIGJlIHNlcGFyYXRlbHkgaW1wb3J0ZWQuCistIElzc3VlICMxNjQ4OTogTWFrZSBpdCBjbGVhcmVyIHRoYXQgaW1wb3J0bGliLmZpbmRfbG9hZGVyKCkgbmVlZHMgcGFyZW50CisgIHBhY2thZ2VzIHRvIGJlIGV4cGxpY2l0bHkgaW1wb3J0ZWQuCiAKIC0gSXNzdWUgIzE2NDAwOiBVcGRhdGUgdGhlIGRlc2NyaXB0aW9uIG9mIHdoaWNoIHZlcnNpb25zIG9mIGEgZ2l2ZW4gcGFja2FnZQogICBQeVBJIGRpc3BsYXlzLgpAQCAtMjAwMyw2ICszMjc5LDkgQEAKIC0gSXNzdWUgIzE2MTE1OiBJbXByb3ZlIHN1YnByb2Nlc3MuUG9wZW4oKSBkb2N1bWVudGF0aW9uIGFyb3VuZCBhcmdzLCBzaGVsbCwKICAgYW5kIGV4ZWN1dGFibGUgYXJndW1lbnRzLgogCistIElzc3VlICMxMzQ5ODogQ2xhcmlmeSBkb2NzIG9mIG9zLm1ha2VkaXJzKCkncyBleGlzdF9vayBhcmd1bWVudC4gIERvbmUgd2l0aAorICBncmVhdCBuYXRpdmUtc3BlYWtlciBoZWxwIGZyb20gUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxNTUzMzogQ2xhcmlmeSBkb2NzIGFuZCBhZGQgdGVzdHMgZm9yIGBzdWJwcm9jZXNzLlBvcGVuKClgJ3MgY3dkCiAgIGFyZ3VtZW50LgogCkBAIC0yMDIzLDYgKzMzMDIsMjcgQEAKIFRvb2xzL0RlbW9zCiAtLS0tLS0tLS0tLQogCistIElzc3VlICMxODgxNzogRml4IGEgcmVzb3VyY2Ugd2FybmluZyBpbiBMaWIvYWlmYy5weSBkZW1vLiAgUGF0Y2ggYnkKKyAgVmFqcmFza3kgS29rLgorCistIElzc3VlICMxODQzOTogTWFrZSBwYXRjaGNoZWNrIHdvcmsgb24gV2luZG93cyBmb3IgQUNLUywgTkVXUy4KKworLSBJc3N1ZSAjMTg0NDg6IEZpeCBhIHR5cG8gaW4gVG9vbHMvZGVtby9laWZmZWwucHkuCisKKy0gSXNzdWUgIzE4NDU3OiBGaXhlZCBzYXZpbmcgb2YgZm9ybXVsYXMgYW5kIGNvbXBsZXggbnVtYmVycyBpbgorICBUb29scy9kZW1vL3NzMS5weS4KKworLSBJc3N1ZSAjMTg0NDk6IE1ha2UgVG9vbHMvZGVtby9zczEucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4gIFBhdGNoIGJ5CisgIEbDqXZyeSBUaGliYXVsdC4KKworLSBJc3N1ZSAjMTI5OTA6IFRoZSAiUHl0aG9uIExhdW5jaGVyIiBvbiBPU1ggY291bGQgbm90IGxhdW5jaCBweXRob24gc2NyaXB0cworICB0aGF0IGhhdmUgcGF0aHMgdGhhdCBpbmNsdWRlIHdpZGUgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTUyMzk6IE1ha2UgbWtzdHJpbmdwcmVwLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCisKKy0gSXNzdWUgIzE3MDI4OiBBbGxvd2VkIFB5dGhvbiBhcmd1bWVudHMgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIFdpbmRvd3MKKyAgbGF1bmNoZXIuCisKIC0gSXNzdWUgIzE3MTU2OiBweWdldHRleHQucHkgbm93IHVzZXMgYW4gZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGUgYW5kIGNvcnJlY3RseQogICB3cml0ZXMgYW5kIGVzY2FwZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMuCiAKQEAgLTIwMzEsOSArMzMzMSwxOCBAQAogICBpbXByb3BlciBpbmRlbnRhdGlvbi4gIHBpbmRlbnQucHkgbm93IHdvcmtzIHdpdGggY29udGludWVkIGxpbmVzIGJyb2tlbiBhZnRlcgogICAiY2xhc3MiIG9yICJkZWYiIGtleXdvcmRzIGFuZCB3aXRoIGNvbnRpbnVhdGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGxpbmUuCiAKLS0gSXNzdWUgIzE1Mzc4OiBGaXggVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5LiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKy0gSXNzdWUgIzExNzk3OiBBZGQgYSAydG8zIGZpeGVyIHRoYXQgbWFwcyByZWxvYWQoKSB0byBpbXAucmVsb2FkKCkuCiAKLS0gSXNzdWUgIzE2NDc2OiBGaXgganNvbi50b29sIHRvIGF2b2lkIGluY2x1ZGluZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorLSBJc3N1ZSAjMTA5NjY6IFJlbW92ZSB0aGUgY29uY2VwdCBvZiB1bmV4cGVjdGVkIHNraXBwZWQgdGVzdHMuCisKKy0gSXNzdWUgIzk4OTM6IFJlbW92ZWQgdGhlIE1pc2MvVmltIGRpcmVjdG9yeS4KKworLSBSZW1vdmVkIHRoZSBNaXNjL1RleHRNYXRlIGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTYyNDU6IEFkZCB0aGUgVG9vbHMvc2NyaXB0cy9wYXJzZV9odG1sNV9lbnRpdGllcy5weSBzY3JpcHQgdG8gcGFyc2UKKyAgdGhlIGxpc3Qgb2YgSFRNTDUgZW50aXRpZXMgYW5kIHVwZGF0ZSB0aGUgaHRtbC5lbnRpdGllcy5odG1sNSBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxNTM3ODogRml4IFRvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCiAKIC0gSXNzdWUgIzE2NTQ5OiBNYWtlIGpzb24udG9vbCB3b3JrIGFnYWluIG9uIFB5dGhvbiAzIGFuZCBhZGQgdGVzdHMuCiAgIEluaXRpYWwgcGF0Y2ggYnkgQmVya2VyIFBla3NhZyBhbmQgU2VyaGl5IFN0b3JjaGFrYS4KQEAgLTIwNDEsNiArMzM1MCwxMiBAQAogLSBJc3N1ZSAjMTMzMDE6IHVzZSBhc3QubGl0ZXJhbF9ldmFsKCkgaW5zdGVhZCBvZiBldmFsKCkgaW4gVG9vbHMvaTE4bi9tc2dmbXQucHkKICAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAorV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMxODU2OTogVGhlIGluc3RhbGxlciBub3cgYWRkcyAucHkgdG8gdGhlIFBBVEhFWFQgdmFyaWFibGUgd2hlbiBleHRlbnNpb25zCisgIGFyZSByZWdpc3RlcmVkLiBQYXRjaCBieSBQYXVsIE1vb3JlLgorCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMTI4LDYgKzM0NDMsOSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxNzE1ODogQWRkICdzeW1ib2xzJyB0byBoZWxwKCkgd2VsY29tZSBtZXNzYWdlOyBjbGFyaWZ5CisgICdtb2R1bGVzIHNwYW0nIG1lc3NhZ2VzLgorCiAtIElzc3VlICMxNTg0NzogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSwgd2hpY2ggZGlkIG5vdCBhY2NlcHQgdHVwbGVzIGFzCiAgIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCiAKQEAgLTIyMDMsNiArMzUyMSw4IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzEzMjQ4OiByZW1vdmVkIGRlcHJlY2F0ZWQgYW5kIHVuZG9jdW1lbnRlZCBkaWZmbGliLmlzYmp1bmssIGlzYnBvcHVsYXIuCisKIC0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMgY29tcGlsZWQKICAgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyLgogCkBAIC0yNjE4LDYgKzM5MzgsMTAgQEAKIC0gSXNzdWUgIzE1MjUwOiBEb2N1bWVudCB0aGF0IGBmaWxlY21wLmRpcmNtcCgpYCBjb21wYXJlcyBmaWxlcyBzaGFsbG93bHkuIFBhdGNoCiAgIGNvbnRyaWJ1dGVkIGJ5IENocmlzIEplcmRvbmVrLgogCistIElzc3VlICMxNTQ0MjogRXhwb3NlIHRoZSBkZWZhdWx0IGxpc3Qgb2YgZGlyZWN0b3JpZXMgaWdub3JlZCBieQorICBgZmlsZWNtcC5kaXJjbXAoKWAgYXMgYSBtb2R1bGUgYXR0cmlidXRlLCBhbmQgZXhwYW5kIHRoZSBsaXN0IHRvIG1vcmUgbW9kZXJuCisgIHZhbHVlcy4KKwogVGVzdHMKIC0tLS0tCiAKQEAgLTI3MzAsOSArNDA1NCw2IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKLS0gSXNzdWUgIzE2MzA1OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyaW5nIHdoZW4gaW50ZXJydXB0aW5nCi0gIG1hdGguZmFjdG9yaWFsLgotCiAtIElzc3VlICMxMjI4ODogQ29uc2lkZXIgJzAnIGFuZCAnMC4wJyBhcyB2YWxpZCBpbml0aWFsdmFsdWUKICAgZm9yIHRraW50ZXIgU2ltcGxlRGlhbG9nLgogCkBAIC00NDI3LDcgKzU3NDgsNyBAQAogLSBJc3N1ZSAjMTM1ODk6IEZpeCBzb21lIHNlcmlhbGl6YXRpb24gcHJpbWl0aXZlcyBpbiB0aGUgYWlmYyBtb2R1bGUuCiAgIFBhdGNoIGJ5IE9sZWcgUGxha2hvdG55dWsuCiAKLS0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyBgYHVzZXI6cGFzc3dvcmRgYCBkdXJpbmcgQmFzaWMKKy0gSXNzdWUgIzEzNjQyOiBVbnF1b3RlIGJlZm9yZSBiNjRlbmNvZGluZyB1c2VyOnBhc3N3b3JkIGR1cmluZyBCYXNpYwogICBBdXRoZW50aWNhdGlvbi4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSm9vbmFzIEt1b3JpbGVodG8uCiAKIC0gSXNzdWUgIzEyMzY0OiBGaXggYSBoYW5nIGluIGNvbmN1cnJlbnQuZnV0dXJlcy5Qcm9jZXNzUG9vbEV4ZWN1dG9yLgpAQCAtNDg4Niw4ICs2MjA3LDggQEAKIC0gSXNzdWUgIzEyNjA3OiBJbiBzdWJwcm9jZXNzLCBmaXggaXNzdWUgd2hlcmUgaWYgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIgaXMKICAgZ2l2ZW4gYXMgYSBsb3cgZmQsIGl0IGdldHMgb3ZlcndyaXR0ZW4uCiAKLS0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlKQotICBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCiAKIC0gSXNzdWUgIzEyNTYwOiBCdWlsZCBsaWJweXRob24uc28gb24gT3BlbkJTRC4gUGF0Y2ggYnkgU3RlZmFuIFNwZXJsaW5nLgogCkBAIC01NDQ1LDYgKzY3NjYsOSBAQAogLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKICAgY29uY3VycmVudC5mdXR1cmVzLgogCistIElzc3VlICM1ODQ1OiBBdXRvbWF0aWNhbGx5IHJlYWQgcmVhZGxpbmUgY29uZmlndXJhdGlvbiB0byBlbmFibGUgY29tcGxldGlvbgorICBpbiBpbnRlcmFjdGl2ZSBtb2RlLgorCiAtIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKICAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCiAgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FIGIvTWlzYy9SRUFETUUKaW5kZXggMTE4ZjZjNy4uZTc3ODBhMiAxMDA2NDQKLS0tIGEvTWlzYy9SRUFETUUKKysrIGIvTWlzYy9SRUFETUUKQEAgLTIyLDkgKzIyLDcgQEAKIFJFQURNRS5jb3Zlcml0eSAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgQ292ZXJpdHkncyBQcmV2ZW50IG9uIFB5dGhvbgogUkVBRE1FLnZhbGdyaW5kICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKIFJQTSAgICAgICAgICAgICAgICAgICAgIChPbGQpIHRvb2xzIHRvIGJ1aWxkIFJQTXMKLXN2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIFNwZWNpYWxCdWlsZHMudHh0ICAgICAgIERlc2NyaWJlcyBleHRyYSBzeW1ib2xzIHlvdSBjYW4gc2V0IGZvciBkZWJ1ZyBidWlsZHMKLVRleHRNYXRlICAgICAgICAgICAgICAgIEEgVGV4dE1hdGUgYnVuZGxlIGZvciBQeXRob24gZGV2ZWxvcG1lbnQKK3N2bm1hcC50eHQgICAgICAgICAgICAgIE1hcCBvZiBvbGQgU1ZOIHJldnMgYW5kIGJyYW5jaGVzIHRvIGhnIGNoYW5nZXNldCBpZHMKIHZhbGdyaW5kLXB5dGhvbi5zdXBwICAgIFZhbGdyaW5kIHN1cHByZXNzaW9uIGZpbGUsIHNlZSBSRUFETUUudmFsZ3JpbmQKIHZncmluZGVmcyAgICAgICAgICAgICAgIFB5dGhvbiBjb25maWd1cmF0aW9uIGZvciB2Z3JpbmQgKGEgZ2VuZXJpYyBwcmV0dHkgcHJpbnRlcikKLVZpbSAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkZXZlbG9wbWVudCB1dGlsaXRpZXMgZm9yIHRoZSBWaW0gZWRpdG9yCmRpZmYgLS1naXQgYS9NaXNjL1JQTS9weXRob24tMy4zLnNwZWMgYi9NaXNjL1JQTS9weXRob24tMy40LnNwZWMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjCnJlbmFtZSB0byBNaXNjL1JQTS9weXRob24tMy40LnNwZWMKaW5kZXggYjhiNTdlMi4uMTZlMDA5YyAxMDA2NDQKLS0tIGEvTWlzYy9SUE0vcHl0aG9uLTMuMy5zcGVjCisrKyBiL01pc2MvUlBNL3B5dGhvbi0zLjQuc3BlYwpAQCAtMzksOCArMzksOCBAQAogCiAlZGVmaW5lIG5hbWUgcHl0aG9uCiAjLS1zdGFydCBjb25zdGFudHMtLQotJWRlZmluZSB2ZXJzaW9uIDMuMy4zCi0lZGVmaW5lIGxpYnZlcnMgMy4zCislZGVmaW5lIHZlcnNpb24gMy40LjBiMQorJWRlZmluZSBsaWJ2ZXJzIDMuNAogIy0tZW5kIGNvbnN0YW50cy0tCiAlZGVmaW5lIHJlbGVhc2UgMXB5ZG90b3JnCiAlZGVmaW5lIF9fcHJlZml4IC91c3IKQEAgLTgzLDggKzgzLDcgQEAKIGxpYnJhcmllcywgYXMgd2VsbCBhcyB0byB2YXJpb3VzIHdpbmRvdyBzeXN0ZW1zLCBhbmQgaXMgZXh0ZW5zaWJsZSBpbiBDIG9yCiBDKysuIEl0IGlzIGFsc28gdXNhYmxlIGFzIGFuIGV4dGVuc2lvbiBsYW5ndWFnZSBmb3IgYXBwbGljYXRpb25zIHRoYXQgbmVlZAogYSBwcm9ncmFtbWFibGUgaW50ZXJmYWNlLiAgRmluYWxseSwgUHl0aG9uIGlzIHBvcnRhYmxlOiBpdCBydW5zIG9uIG1hbnkKLWJyYW5kcyBvZiBVTklYLCBvbiBQQ3MgdW5kZXIgV2luZG93cywgTVMtRE9TLCBhbmQgT1MvMiwgYW5kIG9uIHRoZQotTWFjLgorYnJhbmRzIG9mIFVOSVgsIG9uIFBDcyB1bmRlciBXaW5kb3dzLCBNUy1ET1MsIGFuZCBvbiB0aGUgTWFjLgogCiAlcGFja2FnZSBkZXZlbAogU3VtbWFyeTogVGhlIGxpYnJhcmllcyBhbmQgaGVhZGVyIGZpbGVzIG5lZWRlZCBmb3IgUHl0aG9uIGV4dGVuc2lvbiBkZXZlbG9wbWVudC4KZGlmZiAtLWdpdCBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CmluZGV4IGY4NjllN2MuLjY0NmFjMjMgMTAwNjQ0Ci0tLSBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKKysrIGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dApAQCAtMTA1LDcgKzEwNSw5IEBACiBwWy0yKlM6LVNdCiAgICAgTnVtYmVyIG9mIGJ5dGVzIG9yaWdpbmFsbHkgYXNrZWQgZm9yLiAgVGhpcyBpcyBhIHNpemVfdCwgYmlnLWVuZGlhbiAoZWFzaWVyCiAgICAgdG8gcmVhZCBpbiBhIG1lbW9yeSBkdW1wKS4KLXBbLVM6MF0KK3BbLVNdCisgICAgQVBJIElELiAgU2VlIFBFUCA0NDUuICBUaGlzIGlzIGEgY2hhcmFjdGVyLCBidXQgc2VlbXMgdW5kb2N1bWVudGVkLgorcFstUysxOjBdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIHVuZGVyLSB3cml0ZXMgYW5kIHJlYWRzLgogcFswOk5dCiAgICAgVGhlIHJlcXVlc3RlZCBtZW1vcnksIGZpbGxlZCB3aXRoIGNvcGllcyBvZiBDTEVBTkJZVEUsIHVzZWQgdG8gY2F0Y2gKZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZmFkYTguLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/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+PSAtNSkgJiYgKGl2YWwgPCAyNTcgKyA1KSkgeworICAgICAgICBwID0gZ2V0X3NtYWxsX2ludChpdmFsKTsKKyAgICAgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBpZiAobWF5YmUpCisgICAgICAgIHJldHVybiBwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xPTkdfTE9ORyBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKKy8qIHRhaW50ZWQgc2lua3MKKyAqCisgKiBDb3Zlcml0eSBjb25zaWRlcnMgYXJndiwgZW52aXJvbiwgcmVhZCgpIGRhdGEgZXRjIGFzIHRhaW5lZC4KKyAqLworCitQeU9iamVjdCAqUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFB5dGhvbi9maWxldXRpbHMuYyAqLword2NoYXJfdCAqX1B5X2NoYXIyd2NoYXIoY29uc3QgY2hhciogYXJnLCBzaXplX3QgKnNpemUpCit7CisgICB3Y2hhcl90ICp3OworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhhcmcpOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhzaXplKTsKKyAgIHJldHVybiB3OworfQorCisvKiBQYXJzZXIvcGdlbm1haW4uYyAqLworZ3JhbW1hciAqZ2V0Z3JhbW1hcihjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBncmFtbWFyICpnOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIGc7Cit9CisKKy8qIFB5dGhvbi9tYXJzaGFsLmMgKi8KKworc3RhdGljIFB5X3NzaXplX3Qgcl9zdHJpbmcoY2hhciAqcywgUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfc3RyaW5nX2FyZ3VtZW50X18ocyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHJfbG9uZyhSRklMRSAqcCkKK3sKKyAgICBsb25nIGw7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisKKyAgICByX3N0cmluZygoY2hhciAqKWJ1ZmZlciwgNCwgcCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX3N0cmluZ19zYW5pdGl6ZV9jb250ZW50X18oYnVmZmVyKTsKKyAgICBsID0gKGxvbmcpYnVmZmVyOworICAgIHJldHVybiBsOworfQorCisvKiBDb3Zlcml0eSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhhdCBmZG9wZW5kaXIoKSBtYXkgdGFrZSBvd25lcnNoaXAgb2YgZmQuICovCisKK0RJUiAqZmRvcGVuZGlyKGludCBmZCkgeworICAgIERJUiAqZDsKKyAgICBpZiAoZCkgeworICAgICAgICBfX2NvdmVyaXR5X2Nsb3NlX18oZmQpOworICAgIH0KKyAgICByZXR1cm4gZDsKK30KKwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLmluIGIvTWlzYy9weXRob24tY29uZmlnLmluCmluZGV4IGFjM2EyYzcuLjBiOWI1ZGMgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KQEAgLTEsNiArMSw4IEBACiAjIUBFWEVOQU1FQAogIyAtKi0gcHl0aG9uIC0qLQogCisjIEtlZXAgdGhpcyBzY3JpcHQgaW4gc3luYyB3aXRoIHB5dGhvbi1jb25maWcuc2guaW4KKwogaW1wb3J0IGdldG9wdAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4gYi9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVhM2RiZQotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLWNvbmZpZy5zaC5pbgpAQCAtMCwwICsxLDExMSBAQAorIyEvYmluL3NoCisKKyMgS2VlcCB0aGlzIHNjcmlwdCBpbiBzeW5jIHdpdGggcHl0aG9uLWNvbmZpZy5pbgorCitleGl0X3dpdGhfdXNhZ2UgKCkKK3sKKyAgICBlY2hvICJVc2FnZTogJDAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0taGVscHwtLWFiaWZsYWdzfC0tY29uZmlnZGlyIgorICAgIGV4aXQgJDEKK30KKworaWYgWyAiJDEiID0gIiIgXSA7IHRoZW4KKyAgICBleGl0X3dpdGhfdXNhZ2UgMQorZmkKKworIyBSZXR1cm5zIHRoZSBhY3R1YWwgcHJlZml4IHdoZXJlIHRoaXMgc2NyaXB0IHdhcyBpbnN0YWxsZWQgdG8uCitpbnN0YWxsZWRfcHJlZml4ICgpCit7CisgICAgUkVTVUxUPSQoZGlybmFtZSAkKGNkICQoZGlybmFtZSAiJDEiKSAmJiBwd2QgLVApKQorICAgIGlmIHdoaWNoIHJlYWRsaW5rID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgICAgaWYgcmVhZGxpbmsgLWYgIiRSRVNVTFQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIFJFU1VMVD0kKHJlYWRsaW5rIC1mICIkUkVTVUxUIikKKyAgICAgICAgZmkKKyAgICBmaQorICAgIGVjaG8gJFJFU1VMVAorfQorCitwcmVmaXhfYnVpbGQ9IkBwcmVmaXhAIgorcHJlZml4X3JlYWw9JChpbnN0YWxsZWRfcHJlZml4ICIkMCIpCisKKyMgVXNlIHNlZCB0byBmaXggcGF0aHMgZnJvbSB0aGVpciBidWlsdC10byBsb2NhdGlvbnMgdG8gdGhlaXIgaW5zdGFsbGVkLXRvCisjIGxvY2F0aW9ucy4KK3ByZWZpeD0kKGVjaG8gIiRwcmVmaXhfYnVpbGQiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitleGVjX3ByZWZpeF9idWlsZD0iQGV4ZWNfcHJlZml4QCIKK2V4ZWNfcHJlZml4PSQoZWNobyAiJGV4ZWNfcHJlZml4X2J1aWxkIiB8IHNlZCAicyMkZXhlY19wcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitpbmNsdWRlZGlyPSQoZWNobyAiQGluY2x1ZGVkaXJAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorbGliZGlyPSQoZWNobyAiQGxpYmRpckAiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitDRkxBR1M9JChlY2hvICJAQ0ZMQUdTQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK1ZFUlNJT049IkBWRVJTSU9OQCIKK0xJQk09IkBMSUJNQCIKK0xJQkM9IkBMSUJDQCIKK1NZU0xJQlM9IiRMSUJNICRMSUJDIgorQUJJRkxBR1M9IkBBQklGTEFHU0AiCitMSUJTPSJATElCU0AgJFNZU0xJQlMgLWxweXRob24ke1ZFUlNJT059JHtBQklGTEFHU30iCitCQVNFQ0ZMQUdTPSJAQkFTRUNGTEFHU0AiCitMRExJQlJBUlk9IkBMRExJQlJBUllAIgorTElOS0ZPUlNIQVJFRD0iQExJTktGT1JTSEFSRURAIgorT1BUPSJAT1BUQCIKK1BZX0VOQUJMRV9TSEFSRUQ9IkBQWV9FTkFCTEVfU0hBUkVEQCIKK0xEVkVSU0lPTj0iQExEVkVSU0lPTkAiCitMSUJERVNUPSR7cHJlZml4fS9saWIvcHl0aG9uJHtWRVJTSU9OfQorTElCUEw9JChlY2hvICJATElCUExAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorU089IkBTT0AiCitQWVRIT05GUkFNRVdPUks9IkBQWVRIT05GUkFNRVdPUktAIgorSU5DRElSPSItSSRpbmNsdWRlZGlyL3B5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKK1BMQVRJTkNESVI9Ii1JJGluY2x1ZGVkaXIvcHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorCisjIFNjYW4gZm9yIC0taGVscCBvciB1bmtub3duIGFyZ3VtZW50LgorZm9yIEFSRyBpbiAkKgorZG8KKyAgICBjYXNlICRBUkcgaW4KKyAgICAgICAgLS1oZWxwKQorICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlIDAKKyAgICAgICAgOzsKKyAgICAgICAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0tYWJpZmxhZ3N8LS1jb25maWdkaXIpCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UgMQorICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworZm9yIEFSRyBpbiAiJEAiCitkbworICAgIGNhc2UgIiRBUkciIGluCisgICAgICAgIC0tcHJlZml4KQorICAgICAgICAgICAgZWNobyAiJHByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRleGVjX3ByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1pbmNsdWRlcykKKyAgICAgICAgICAgIGVjaG8gIiRJTkNESVIgJFBMQVRJTkNESVIiCisgICAgICAgIDs7CisgICAgICAgIC0tY2ZsYWdzKQorICAgICAgICAgICAgZWNobyAiJElOQ0RJUiAkUExBVElOQ0RJUiAkQkFTRUNGTEFHUyAkQ0ZMQUdTICRPUFQiCisgICAgICAgIDs7CisgICAgICAgIC0tbGlicykKKyAgICAgICAgICAgIGVjaG8gIiRMSUJTIgorICAgICAgICA7OworICAgICAgICAtLWxkZmxhZ3MpCisgICAgICAgICAgICBMSU5LRk9SU0hBUkVEVVNFRD0KKyAgICAgICAgICAgIGlmIFsgLXogIiRQWVRIT05GUkFNRVdPUksiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgTElOS0ZPUlNIQVJFRFVTRUQ9JExJTktGT1JTSEFSRUQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBMSUJQTFVTRUQ9CisgICAgICAgICAgICBpZiBbICIkUFlfRU5BQkxFX1NIQVJFRCIgPSAiMCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBMSUJQTFVTRUQ9Ii1MJExJQlBMIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTFVTRUQgLUwkbGliZGlyICRMSUJTICRMSU5LRk9SU0hBUkVEVVNFRCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leHRlbnNpb24tc3VmZml4KQorICAgICAgICAgICAgZWNobyAiJFNPIgorICAgICAgICA7OworICAgICAgICAtLWFiaWZsYWdzKQorICAgICAgICAgICAgZWNobyAiJEFCSUZMQUdTIgorICAgICAgICA7OworICAgICAgICAtLWNvbmZpZ2RpcikKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTCIKKyAgICAgICAgOzsKK2VzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLXdpbmc1LndwciBiL01pc2MvcHl0aG9uLXdpbmc1LndwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFhZTYzCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24td2luZzUud3ByCkBAIC0wLDAgKzEsMTggQEAKKyMhd2luZworIyF2ZXJzaW9uPTUuMAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdpbmcgSURFIHByb2plY3QgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworW3Byb2plY3QgYXR0cmlidXRlc10KK3Byb2ouZGlyZWN0b3J5LWxpc3QgPSBbeydkaXJsb2MnOiBsb2MoJy4uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZXMnOiBbdScuaGcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL3VuaXR0ZXN0L19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi91bml0dGVzdC90ZXN0L19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWlsZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdEb2MvYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInOiAnKicsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWN1cnNpdmUnOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dhdGNoX2Zvcl9jaGFuZ2VzJzogVHJ1ZX1dCitwcm9qLmZpbGUtdHlwZSA9ICdzaGFyZWQnCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi5tYW4gYi9NaXNjL3B5dGhvbi5tYW4KaW5kZXggYmNiM2VjOC4uNTJhZWRlZSAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24ubWFuCisrKyBiL01pc2MvcHl0aG9uLm1hbgpAQCAtMjYsMTEgKzI2LDE0IEBACiAuQiBcLWkKIF0KIFsKLS5CIFwtbQotLkkgbW9kdWxlLW5hbWUKKy5CIFwtSQogXQogLmJyCiAgICAgICAgWworLkIgXC1tCisuSSBtb2R1bGUtbmFtZQorXQorWwogLkIgXC1xCiBdCiBbCkBAIC0xMzksNiArMTQyLDEzIEBACiB1c2VmdWwgdG8gaW5zcGVjdCBnbG9iYWwgdmFyaWFibGVzIG9yIGEgc3RhY2sgdHJhY2Ugd2hlbiBhIHNjcmlwdAogcmFpc2VzIGFuIGV4Y2VwdGlvbi4KIC5UUAorLkIgXC1JCitSdW4gUHl0aG9uIGluIGlzb2xhdGVkIG1vZGUuIFRoaXMgYWxzbyBpbXBsaWVzIFxmQlwtRVxmUCBhbmQgXGZCXC1TXGZQLiBJbgoraXNvbGF0ZWQgbW9kZSBzeXMucGF0aCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHTigJlzIGRpcmVjdG9yeSBub3IgdGhlIHVzZXLigJlzCitzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeS4gQWxsIFBZVEhPTiogZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBpZ25vcmVkLCB0b28uCitGdXJ0aGVyIHJlc3RyaWN0aW9ucyBtYXkgYmUgaW1wb3NlZCB0byBwcmV2ZW50IHRoZSB1c2VyIGZyb20gaW5qZWN0aW5nCittYWxpY2lvdXMgY29kZS4KKy5UUAogLkJJICJcLW0gIiBtb2R1bGUtbmFtZQogU2VhcmNoZXMgCiAuSSBzeXMucGF0aCAKZGlmZiAtLWdpdCBhL01vZHVsZXMvU2V0dXAuZGlzdCBiL01vZHVsZXMvU2V0dXAuZGlzdAppbmRleCBmNDVkZTVjLi4wMWZiODVmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL1NldHVwLmRpc3QKKysrIGIvTW9kdWxlcy9TZXR1cC5kaXN0CkBAIC0xMDIsNyArMTAyLDcgQEAKICMgdmFyaW91cyByZWFzb25zOyB0aGVyZWZvcmUgdGhleSBhcmUgbGlzdGVkIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUKICMgbm9ybWFsIG9yZGVyLgogCi0jIFRoaXMgb25seSBjb250YWlucyB0aGUgbWluaW1hbCBzZXQgb2YgbW9kdWxlcyByZXF1aXJlZCB0byBydW4gdGhlIAorIyBUaGlzIG9ubHkgY29udGFpbnMgdGhlIG1pbmltYWwgc2V0IG9mIG1vZHVsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZQogIyBzZXR1cC5weSBzY3JpcHQgaW4gdGhlIHJvb3Qgb2YgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZS4KIAogcG9zaXggcG9zaXhtb2R1bGUuYwkJIyBwb3NpeCAoVU5JWCkgc3lzdGVtIGNhbGxzCkBAIC0xMTMsOSArMTEzLDExIEBACiBfY29kZWNzIF9jb2RlY3Ntb2R1bGUuYwkJIyBhY2Nlc3MgdG8gdGhlIGJ1aWx0aW4gY29kZWNzIGFuZCBjb2RlYyByZWdpc3RyeQogX3dlYWtyZWYgX3dlYWtyZWYuYwkJIyB3ZWFrIHJlZmVyZW5jZXMKIF9mdW5jdG9vbHMgX2Z1bmN0b29sc21vZHVsZS5jICAgIyBUb29scyBmb3Igd29ya2luZyB3aXRoIGZ1bmN0aW9ucyBhbmQgY2FsbGFibGUgb2JqZWN0cwotb3BlcmF0b3Igb3BlcmF0b3IuYwkgICAgICAgICMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcworX29wZXJhdG9yIF9vcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCiBfY29sbGVjdGlvbnMgX2NvbGxlY3Rpb25zbW9kdWxlLmMgIyBDb250YWluZXIgdHlwZXMKLWl0ZXJ0b29scyBpdGVydG9vbHNtb2R1bGUuYyAgICAjIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nIAoraXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcKK2F0ZXhpdCBhdGV4aXRtb2R1bGUuYyAgICAgICMgUmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGJlIHJ1biBhdCBpbnRlcnByZXRlci1zaHV0ZG93bgorX3N0YXQgX3N0YXQuYwkJCSMgc3RhdC5oIGludGVyZmFjZQogCiAjIGFjY2VzcyB0byBJU08gQyBsb2NhbGUgc3VwcG9ydAogX2xvY2FsZSBfbG9jYWxlbW9kdWxlLmMgICMgLWxpbnRsCkBAIC0xMzAsMTIgKzEzMiwxNSBAQAogIyBmYXVsdGhhbmRsZXIgbW9kdWxlCiBmYXVsdGhhbmRsZXIgZmF1bHRoYW5kbGVyLmMKIAorIyBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbgorX3RyYWNlbWFsbG9jIF90cmFjZW1hbGxvYy5jIGhhc2h0YWJsZS5jCisKICMgVGhlIHJlc3Qgb2YgdGhlIG1vZHVsZXMgbGlzdGVkIGluIHRoaXMgZmlsZSBhcmUgYWxsIGNvbW1lbnRlZCBvdXQgYnkKICMgZGVmYXVsdC4gIFVzdWFsbHkgdGhleSBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGJ1aWx0IGFzIGR5bmFtaWNhbGx5CiAjIGxvYWRlZCBtb2R1bGVzIGJ5IHRoZSBuZXcgc2V0dXAucHkgc2NyaXB0IGFkZGVkIGluIFB5dGhvbiAyLjEuICBJZgotIyB5b3UncmUgb24gYSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcsIHdhbnQgdG8gCi0jIGNvbXBpbGUgbW9kdWxlcyBzdGF0aWNhbGx5IGludG8gdGhlIFB5dGhvbiBiaW5hcnksIG9yIG5lZWQgdG8gCi0jIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUgCisjIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZywgd2FudCB0bworIyBjb21waWxlIG1vZHVsZXMgc3RhdGljYWxseSBpbnRvIHRoZSBQeXRob24gYmluYXJ5LCBvciBuZWVkIHRvCisjIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUKICMgYXBwcm9wcmlhdGUgbGluZXMgYmVsb3cuCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTcwLDcgKzE3NSw2IEBACiAjX3dlYWtyZWYgX3dlYWtyZWYuYwkjIGJhc2ljIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQKICNfdGVzdGNhcGkgX3Rlc3RjYXBpbW9kdWxlLmMgICAgIyBQeXRob24gQyBBUEkgdGVzdCBtb2R1bGUKICNfcmFuZG9tIF9yYW5kb21tb2R1bGUuYwkjIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0jYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCiAjX2VsZW1lbnR0cmVlIC1JJChzcmNkaXIpL01vZHVsZXMvZXhwYXQgLURIQVZFX0VYUEFUX0NPTkZJR19IIC1EVVNFX1BZRVhQQVRfQ0FQSSBfZWxlbWVudHRyZWUuYwkjIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAjX3BpY2tsZSBfcGlja2xlLmMJIyBwaWNrbGUgYWNjZWxlcmF0b3IKICNfZGF0ZXRpbWUgX2RhdGV0aW1lbW9kdWxlLmMJIyBkYXRldGltZSBhY2NlbGVyYXRvcgpAQCAtMTg1LDcgKzE4OSw3IEBACiAjIHN1cHBvcnRlZC4uLikKIAogI2ZjbnRsIGZjbnRsbW9kdWxlLmMJIyBmY250bCgyKSBhbmQgaW9jdGwoMikKLSNzcHdkIHNwd2Rtb2R1bGUuYwkJIyBzcHdkKDMpIAorI3Nwd2Qgc3B3ZG1vZHVsZS5jCQkjIHNwd2QoMykKICNncnAgZ3JwbW9kdWxlLmMJCSMgZ3JwKDMpCiAjc2VsZWN0IHNlbGVjdG1vZHVsZS5jCSMgc2VsZWN0KDIpOyBub3Qgb24gYW5jaWVudCBTeXN0ZW0gVgogCkBAIC0zMDEsNyArMzA1LDcgQEAKIAogI19jdXJzZXMgX2N1cnNlc21vZHVsZS5jIC1sY3Vyc2VzIC1sdGVybWNhcAogIyBXcmFwcGVyIGZvciB0aGUgcGFuZWwgbGlicmFyeSB0aGF0J3MgcGFydCBvZiBuY3Vyc2VzIGFuZCBTWVNWIGN1cnNlcy4KLSNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcyAKKyNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcwogCiAKICMgTW9kdWxlcyB0aGF0IHByb3ZpZGUgcGVyc2lzdGVudCBkaWN0aW9uYXJ5LWxpa2Ugc2VtYW50aWNzLiAgWW91IHdpbGwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKaW5kZXggZmFjYThjZi4uMDJiNTVkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKQEAgLTYsNiArNiw4IEBACiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlICJQeXRob24uaCIKIAorX1B5X0lERU5USUZJRVIoaW5zZXJ0KTsKKwogc3RhdGljIFB5X3NzaXplX3QKIGludGVybmFsX2Jpc2VjdF9yaWdodChQeU9iamVjdCAqbGlzdCwgUHlPYmplY3QgKml0ZW0sIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGkpCiB7CkBAIC05MCw4ICs5Miw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwotCiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQobGlzdCwgJlB5SWRfaW5zZXJ0LCAibk8iLCBpbmRleCwgaXRlbSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTk1LDcgKzE5NSw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGxpc3QsICZQeUlkX2luc2VydCwgIm5PIiwgaW5kZXgsIGl0ZW0pOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2J6Mm1vZHVsZS5jIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKaW5kZXggM2Y3YTZjZi4uZmQwNWRlMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYnoybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgUkVMRUFTRV9MT0NLKG9iaikKICNlbmRpZgogCi0jZGVmaW5lIE1JTihYLCBZKSAoKChYKSA8IChZKSkgPyAoWCkgOiAoWSkpCi0KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTE0OSw3ICsxNDcsNyBAQAogICAgIGMtPmJ6cy5uZXh0X2luID0gZGF0YTsKICAgICBjLT5ienMuYXZhaWxfaW4gPSAwOwogICAgIGMtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCk7Ci0gICAgYy0+YnpzLmF2YWlsX291dCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KTsKKyAgICBjLT5ienMuYXZhaWxfb3V0ID0gU01BTExDSFVOSzsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGNoYXIgKnRoaXNfb3V0OwogICAgICAgICBpbnQgYnplcnJvcjsKQEAgLTE1Nyw3ICsxNTUsNyBAQAogICAgICAgICAvKiBPbiBhIDY0LWJpdCBzeXN0ZW0sIGxlbiBtaWdodCBub3QgZml0IGluIGF2YWlsX2luIChhbiB1bnNpZ25lZCBpbnQpLgogICAgICAgICAgICBEbyBjb21wcmVzc2lvbiBpbiBjaHVua3Mgb2Ygbm8gbW9yZSB0aGFuIFVJTlRfTUFYIGJ5dGVzIGVhY2guICovCiAgICAgICAgIGlmIChjLT5ienMuYXZhaWxfaW4gPT0gMCAmJiBsZW4gPiAwKSB7Ci0gICAgICAgICAgICBjLT5ienMuYXZhaWxfaW4gPSBNSU4obGVuLCBVSU5UX01BWCk7CisgICAgICAgICAgICBjLT5ienMuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KVB5X01JTihsZW4sIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGxlbiAtPSBjLT5ienMuYXZhaWxfaW47CiAgICAgICAgIH0KIApAQCAtMTczLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAgICAgYy0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGRhdGFfc2l6ZTsKICAgICAgICAgICAgICAgICBidWZmZXJfbGVmdCA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSAtIGRhdGFfc2l6ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBNSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSAodW5zaWduZWQgaW50KVB5X01JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOwogICAgICAgICB9CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMjU4LDYgKzI1NiwyNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCoKK0JaMl9NYWxsb2Modm9pZCogY3R4LCBpbnQgaXRlbXMsIGludCBzaXplKQoreworICAgIGlmIChpdGVtcyA8IDAgfHwgc2l6ZSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICgoc2l6ZV90KWl0ZW1zID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAvIChzaXplX3Qpc2l6ZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogUHlNZW1fTWFsbG9jKCkgY2Fubm90IGJlIHVzZWQ6IGNvbXByZXNzKCkgYW5kIGRlY29tcHJlc3MoKQorICAgICAgIHJlbGVhc2UgdGhlIEdJTCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK0JaMl9GcmVlKHZvaWQqIGN0eCwgdm9pZCAqcHRyKQoreworICAgIFB5TWVtX1Jhd0ZyZWUocHRyKTsKK30KKwogc3RhdGljIGludAogQloyQ29tcHJlc3Nvcl9pbml0KEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewpAQCAtMjgwLDYgKzI5Niw5IEBACiAgICAgfQogI2VuZGlmCiAKKyAgICBzZWxmLT5ienMub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT5ienMuYnphbGxvYyA9IEJaMl9NYWxsb2M7CisgICAgc2VsZi0+YnpzLmJ6ZnJlZSA9IEJaMl9GcmVlOwogICAgIGJ6ZXJyb3IgPSBCWjJfYnpDb21wcmVzc0luaXQoJnNlbGYtPmJ6cywgY29tcHJlc3NsZXZlbCwgMCwgMCk7CiAgICAgaWYgKGNhdGNoX2J6Ml9lcnJvcihiemVycm9yKSkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTM3OSwxMCArMzk4LDEwIEBACiAgICAgZC0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgRG8gZGVjb21wcmVzc2lvbiBpbiBjaHVua3Mgb2Ygbm8gbW9yZSB0aGFuIFVJTlRfTUFYIGJ5dGVzIGVhY2guICovCi0gICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgIGQtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBkLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtNDA4LDcgKzQyNyw3IEBACiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfaW4gPT0gMCkgewogICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBsZW4gLT0gZC0+YnpzLmF2YWlsX2luOwogICAgICAgICB9CiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfb3V0ID09IDApIHsKQEAgLTQxOSw3ICs0MzgsNyBAQAogICAgICAgICAgICAgICAgIGQtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gKHVuc2lnbmVkIGludClQeV9NSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZGF0YV9zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jIGIvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMKaW5kZXggNDAwMzdiMS4uMGIwOTNhYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMKQEAgLTE4OSw5ICsxODksOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciBjOwotICAgICAgICByZWdpc3RlciBjaGFyICpwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgY2hhciBjOworICAgICAgICBjaGFyICpwID0gUHlCeXRlc19BU19TVFJJTkcodik7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jIGIvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYwppbmRleCBjNmM3OTgzLi4zMTBlNjcyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKQEAgLTMsMzAgKzMsMzIgQEAKIAogLyogY29sbGVjdGlvbnMgbW9kdWxlIGltcGxlbWVudGF0aW9uIG9mIGEgZGVxdWUoKSBkYXRhdHlwZQogICAgV3JpdHRlbiBhbmQgbWFpbnRhaW5lZCBieSBSYXltb25kIEQuIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+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+aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgfQpAQCAtMTc0Miw3ICsxODE2LDcgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYm91bmRfZ2V0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtYXBwaW5nLCAiZ2V0Iik7CisgICAgICAgIGJvdW5kX2dldCA9IF9QeU9iamVjdF9HZXRBdHRySWQobWFwcGluZywgJlB5SWRfZ2V0KTsKICAgICAgICAgaWYgKGJvdW5kX2dldCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jc3YuYyBiL01vZHVsZXMvX2Nzdi5jCmluZGV4IDQ4YTVjZjguLjE4M2E5YTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Nzdi5jCisrKyBiL01vZHVsZXMvX2Nzdi5jCkBAIC01MSw3ICs1MSw3IEBACiB0eXBlZGVmIGVudW0gewogICAgIFNUQVJUX1JFQ09SRCwgU1RBUlRfRklFTEQsIEVTQ0FQRURfQ0hBUiwgSU5fRklFTEQsCiAgICAgSU5fUVVPVEVEX0ZJRUxELCBFU0NBUEVfSU5fUVVPVEVEX0ZJRUxELCBRVU9URV9JTl9RVU9URURfRklFTEQsCi0gICAgRUFUX0NSTkwKKyAgICBFQVRfQ1JOTCxBRlRFUl9FU0NBUEVEX0NSTkwKIH0gUGFyc2VyU3RhdGU7CiAKIHR5cGVkZWYgZW51bSB7CkBAIC01NDYsNyArNTQ2LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGZpZWxkID0gdG1wOwogICAgIH0KLSAgICBQeUxpc3RfQXBwZW5kKHNlbGYtPmZpZWxkcywgZmllbGQpOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPmZpZWxkcywgZmllbGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoZmllbGQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFB5X0RFQ1JFRihmaWVsZCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC02NDQsNiArNjQ3LDEyIEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFU0NBUEVEX0NIQVI6CisgICAgICAgIGlmIChjID09ICdcbicgfHwgYz09J1xyJykgeworICAgICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzZWxmLT5zdGF0ZSA9IEFGVEVSX0VTQ0FQRURfQ1JOTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGlmIChjID09ICdcMCcpCiAgICAgICAgICAgICBjID0gJ1xuJzsKICAgICAgICAgaWYgKHBhcnNlX2FkZF9jaGFyKHNlbGYsIGMpIDwgMCkKQEAgLTY1MSw2ICs2NjAsMTEgQEAKICAgICAgICAgc2VsZi0+c3RhdGUgPSBJTl9GSUVMRDsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIEFGVEVSX0VTQ0FQRURfQ1JOTDoKKyAgICAgICAgaWYgKGMgPT0gJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKmZhbGx0aHJ1Ki8KKwogICAgIGNhc2UgSU5fRklFTEQ6CiAgICAgICAgIC8qIGluIHVucXVvdGVkIGZpZWxkICovCiAgICAgICAgIGlmIChjID09ICdcbicgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1wwJykgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKaW5kZXggN2QwZDI1OC4uODIwYTYwNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCkBAIC0yNzgsOCArMjc4LDEwIEBACiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgbGVuICs9IHN0cmxlbihwcmVmaXgpOwogICAgIHJlc3VsdCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAocHJlZml4KQogICAgICAgICBzdHJjcHkocmVzdWx0LCBwcmVmaXgpOwogICAgIGVsc2UKQEAgLTQyOCwxMyArNDMwLDcgQEAKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0ID0gUHlUeXBlX3N0Z2RpY3QodHlwZSk7CiAgICAgYXNzZXJ0IChkaWN0KTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfGk6ZnJvbV9idWZmZXIiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98bjpmcm9tX2J1ZmZlciIsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJm9mZnNldCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46ZnJvbV9idWZmZXIiLCAmb2JqLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoLTEgPT0gUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcihvYmosICZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTQ0NywxMSArNDQzLDcgQEAKICAgICB9CiAgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXJfbGVuIC0gb2Zmc2V0KSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAiQnVmZmVyIHNpemUgdG9vIHNtYWxsICglZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICVkIGJ5dGVzKSIsCi0jZWxzZQogICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJXpkIGluc3RlYWQgb2YgYXQgbGVhc3QgJXpkIGJ5dGVzKSIsCi0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC00NjIsNyArNDU0LDYgQEAKIAogICAgIFB5X0lOQ1JFRihvYmopOwogICAgIGlmICgtMSA9PSBLZWVwUmVmKChDRGF0YU9iamVjdCAqKXJlc3VsdCwgLTEsIG9iaikpIHsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDg0LDEzICs0NzUsNyBAQAogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKICAgICBhc3NlcnQgKGRpY3QpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98aTpmcm9tX2J1ZmZlciIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xuOmZyb21fYnVmZmVyIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmb2Zmc2V0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpmcm9tX2J1ZmZlciIsICZvYmosICZvZmZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICgtMSA9PSBQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCoqKSZidWZmZXIsICZidWZmZXJfbGVuKSkKQEAgLTUwNCwxMSArNDg5LDcgQEAKIAogICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyX2xlbiAtIG9mZnNldCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJWQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlZCBieXRlcykiLAotI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCV6ZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICV6ZCBieXRlcykiLAotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTMyNiw5ICsxMzA3LDExIEBACiAgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIHN0Z2RpY3QtPm5kaW0gPSBpdGVtZGljdC0+bmRpbSArIDE7Ci0gICAgc3RnZGljdC0+c2hhcGUgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5X3NzaXplX3QgKikgKiBzdGdkaWN0LT5uZGltKTsKLSAgICBpZiAoc3RnZGljdC0+c2hhcGUgPT0gTlVMTCkKKyAgICBzdGdkaWN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCkgKiBzdGdkaWN0LT5uZGltKTsKKyAgICBpZiAoc3RnZGljdC0+c2hhcGUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBzdGdkaWN0LT5zaGFwZVswXSA9IGxlbmd0aDsKICAgICBtZW1tb3ZlKCZzdGdkaWN0LT5zaGFwZVsxXSwgaXRlbWRpY3QtPnNoYXBlLAogICAgICAgICBzaXplb2YoUHlfc3NpemVfdCkgKiAoc3RnZGljdC0+bmRpbSAtIDEpKTsKQEAgLTEzNTksNyArMTM0Miw4IEBACiAgICAgaWYgKC0xID09IFB5RGljdF9VcGRhdGUoKFB5T2JqZWN0ICopc3RnZGljdCwgcmVzdWx0LT50cF9kaWN0KSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBQeV9ERUNSRUYocmVzdWx0LT50cF9kaWN0KTsKLSAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilzdGdkaWN0OworICAgIHJlc3VsdC0+dHBfZGljdCA9IChQeU9iamVjdCAqKXN0Z2RpY3Q7ICAvKiBzdGVhbCB0aGUgcmVmZXJlbmNlICovCisgICAgc3RnZGljdCA9IE5VTEw7CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGNoYXJhY3RlciBhcnJheXMuCiAgICAgICAgQSBwZXJtYW5lbnQgYW5ub3lhbmNlOiBjaGFyIGFycmF5cyBhcmUgYWxzbyBzdHJpbmdzIQpAQCAtMjI2MSw2ICsyMjQ1LDEwIEBACiAgICAgICAgYXJndHlwZXMgd291bGQgYmUgYSBjdHlwZXMgdHlwZSkuCiAgICAgKi8KICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIlh7fSIpOworICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoKFB5T2JqZWN0ICopc3RnZGljdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBzdGdkaWN0LT5mbGFncyB8PSBUWVBFRkxBR19JU1BPSU5URVI7CiAKICAgICAvKiBjcmVhdGUgdGhlIG5ldyBpbnN0YW5jZSAod2hpY2ggaXMgYSBjbGFzcywKQEAgLTIzNDMsNiArMjMzMSw4IEBACiAgICAgaWYgKHNlbGYtPmJfb2JqZWN0cyA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChzZWxmLT5iX2xlbmd0aCkgewogICAgICAgICAgICAgc2VsZi0+Yl9vYmplY3RzID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgaWYgKHNlbGYtPmJfb2JqZWN0cyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICAgICAgc2VsZi0+Yl9vYmplY3RzID0gUHlfTm9uZTsKQEAgLTIzNTQsNyArMjM0NCwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEdldEtlZXBlZE9iamVjdHMoQ0RhdGFPYmplY3QgKnRhcmdldCkKIHsKLSAgICByZXR1cm4gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KS0+Yl9vYmplY3RzOworICAgIENEYXRhT2JqZWN0ICpjb250YWluZXI7CisgICAgY29udGFpbmVyID0gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KTsKKyAgICBpZiAoY29udGFpbmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBjb250YWluZXItPmJfb2JqZWN0czsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI0MTEsNiArMjQwNSwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgb2IgPSBQeUNEYXRhX0dldENvbnRhaW5lcih0YXJnZXQpOworICAgIGlmIChvYiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrZWVwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBpZiAob2ItPmJfb2JqZWN0cyA9PSBOVUxMIHx8ICFQeURpY3RfQ2hlY2tFeGFjdChvYi0+Yl9vYmplY3RzKSkgewogICAgICAgICBQeV9YREVDUkVGKG9iLT5iX29iamVjdHMpOwogICAgICAgICBvYi0+Yl9vYmplY3RzID0ga2VlcDsgLyogcmVmY291bnQgY29uc3VtZWQgKi8KQEAgLTI3OTcsNiArMjc5NSw5IEBACiAgICAgICAgICAgICAvKiBYWFggKi87CiAKICAgICAgICAgdmFsdWUgPSBHZXRLZWVwZWRPYmplY3RzKHNyYyk7CisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KQEAgLTI4MjAsNiArMjgyMSw5IEBACiAgICAgICAgICoodm9pZCAqKilwdHIgPSBzcmMtPmJfcHRyOwogCiAgICAgICAgIGtlZXAgPSBHZXRLZWVwZWRPYmplY3RzKHNyYyk7CisgICAgICAgIGlmIChrZWVwID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgICAgICAvKgogICAgICAgICAgIFdlIGFyZSBhc3NpZ25pbmcgYW4gYXJyYXkgb2JqZWN0IHRvIGEgZmllbGQgd2hpY2ggcmVwcmVzZW50cwogICAgICAgICAgIGEgcG9pbnRlci4gVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGNvbnZlcnRpbmcgYW4gYXJyYXkKQEAgLTQwNTAsOCArNDA1NCw4IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKLSAgICAgICAgaW50IHJlcyA9IF9pbml0X3Bvc19hcmdzKHNlbGYsIFB5X1RZUEUoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBrd2RzLCAwKTsKKyAgICAgICAgUHlfc3NpemVfdCByZXMgPSBfaW5pdF9wb3NfYXJncyhzZWxmLCBQeV9UWVBFKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3ZHMsIDApOwogICAgICAgICBpZiAocmVzID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAocmVzIDwgUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgewpAQCAtNDIyMiw3ICs0MjI2LDcgQEAKICAgICAgICAgICAgIGkgKz0gc2VsZi0+Yl9sZW5ndGg7CiAgICAgICAgIHJldHVybiBBcnJheV9pdGVtKG15c2VsZiwgaSk7CiAgICAgfQotICAgIGVsc2UgaWYgUHlTbGljZV9DaGVjayhpdGVtKSB7CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgewogICAgICAgICBTdGdEaWN0T2JqZWN0ICpzdGdkaWN0LCAqaXRlbWRpY3Q7CiAgICAgICAgIFB5T2JqZWN0ICpwcm90bzsKICAgICAgICAgUHlPYmplY3QgKm5wOwpAQCAtNDI5OCw2ICs0MzAyLDEwIEBACiAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47CiAgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykgewogICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBBcnJheV9pdGVtKG15c2VsZiwgY3VyKTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobnApOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKG5wLCBpLCB2KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbnA7CkBAIC00ODEyLDYgKzQ4MjAsOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBrZWVwID0gR2V0S2VlcGVkT2JqZWN0cyhkc3QpOworICAgIGlmIChrZWVwID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIFB5X0lOQ1JFRihrZWVwKTsKICAgICByZXR1cm4gS2VlcFJlZihzZWxmLCAwLCBrZWVwKTsKIH0KQEAgLTUyMTgsOSArNTIyOSwxNCBAQAogICAgICAqLwogICAgIGlmIChDRGF0YU9iamVjdF9DaGVjayhzcmMpKSB7CiAgICAgICAgIENEYXRhT2JqZWN0ICpvYmogPSAoQ0RhdGFPYmplY3QgKilzcmM7CisgICAgICAgIENEYXRhT2JqZWN0ICpjb250YWluZXI7CisKICAgICAgICAgLyogUHlDRGF0YV9HZXRDb250YWluZXIgd2lsbCBpbml0aWFsaXplIHNyYy5iX29iamVjdHMsIHdlIG5lZWQKICAgICAgICAgICAgdGhpcyBzbyBpdCBjYW4gYmUgc2hhcmVkICovCi0gICAgICAgIFB5Q0RhdGFfR2V0Q29udGFpbmVyKG9iaik7CisgICAgICAgIGNvbnRhaW5lciA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKG9iaik7CisgICAgICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworCiAgICAgICAgIC8qIEJ1dCB3ZSBuZWVkIGEgZGljdGlvbmFyeSEgKi8KICAgICAgICAgaWYgKG9iai0+Yl9vYmplY3RzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihQeV9Ob25lKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwppbmRleCBhM2QyMzIxLi5lYzhmZDEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCkBAIC05OCwyMCArOTgsMzcgQEAKICAgICBQeU9iamVjdCAqcHlfZ2xvYmFscyA9IDA7CiAgICAgUHlDb2RlT2JqZWN0ICpweV9jb2RlID0gMDsKICAgICBQeUZyYW1lT2JqZWN0ICpweV9mcmFtZSA9IDA7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisKKyAgICAvKiAoU2F2ZSBhbmQpIENsZWFyIHRoZSBjdXJyZW50IGV4Y2VwdGlvbi4gUHl0aG9uIGZ1bmN0aW9ucyBtdXN0IG5vdCBiZQorICAgICAgIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQuIENhbGxpbmcgUHl0aG9uIGZ1bmN0aW9ucyBoYXBwZW5zIHdoZW4KKyAgICAgICB0aGUgY29kZWMgb2YgdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgaXMgaW1wbGVtZW50ZWQgaW4gcHVyZSBQeXRob24uICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOwogCiAgICAgcHlfZ2xvYmFscyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoIXB5X2dsb2JhbHMpIGdvdG8gYmFkOworICAgIGlmICghcHlfZ2xvYmFscykKKyAgICAgICAgZ290byBiYWQ7CiAgICAgcHlfY29kZSA9IFB5Q29kZV9OZXdFbXB0eShmaWxlbmFtZSwgZnVuY25hbWUsIGxpbmVubyk7Ci0gICAgaWYgKCFweV9jb2RlKSBnb3RvIGJhZDsKKyAgICBpZiAoIXB5X2NvZGUpCisgICAgICAgIGdvdG8gYmFkOwogICAgIHB5X2ZyYW1lID0gUHlGcmFtZV9OZXcoCiAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0KCksIC8qUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCovCiAgICAgICAgIHB5X2NvZGUsICAgICAgICAgICAgIC8qUHlDb2RlT2JqZWN0ICpjb2RlLCovCiAgICAgICAgIHB5X2dsb2JhbHMsICAgICAgICAgIC8qUHlPYmplY3QgKmdsb2JhbHMsKi8KICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgLypQeU9iamVjdCAqbG9jYWxzKi8KICAgICAgICAgKTsKLSAgICBpZiAoIXB5X2ZyYW1lKSBnb3RvIGJhZDsKKyAgICBpZiAoIXB5X2ZyYW1lKQorICAgICAgICBnb3RvIGJhZDsKICAgICBweV9mcmFtZS0+Zl9saW5lbm8gPSBsaW5lbm87CisKKyAgICBQeUVycl9SZXN0b3JlKGV4Y2VwdGlvbiwgdmFsdWUsIHRiKTsKICAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKKworICAgIFB5X0RFQ1JFRihweV9nbG9iYWxzKTsKKyAgICBQeV9ERUNSRUYocHlfY29kZSk7CisgICAgUHlfREVDUkVGKHB5X2ZyYW1lKTsKKyAgICByZXR1cm47CisKICAgYmFkOgogICAgIFB5X1hERUNSRUYocHlfZ2xvYmFscyk7CiAgICAgUHlfWERFQ1JFRihweV9jb2RlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKaW5kZXggMDllYjY1My4uNzQxMTlhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKQEAgLTI2MSwxOCArMjYxLDE4IEBACiAgICAgICAgICAgIHRvIGEgdmlydHVhbCBhZGRyZXNzIGZvciB3aGljaCBpdCBkb2VzIG5vdAogICAgICAgICAgICBoYXZlIHRoZSBhcHByb3ByaWF0ZSBhY2Nlc3MuICovCiAgICAgICAgIGlmIChwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMF0gPT0gMCkKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHJlYWRpbmcgJXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhY2Nlc3MgdmlvbGF0aW9uIHdyaXRpbmcgJXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHByLT5FeGNlcHRpb25JbmZvcm1hdGlvblsxXSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fQlJFQUtQT0lOVDoKICAgICAgICAgLyogQSBicmVha3BvaW50IHdhcyBlbmNvdW50ZXJlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBicmVha3BvaW50IGVuY291bnRlcmVkIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yODIsMTQgKzI4MiwxNCBAQAogICAgICAgICAgICBhbGlnbm1lbnQuIEZvciBleGFtcGxlLCAxNi1iaXQgdmFsdWVzIG11c3QgYmUKICAgICAgICAgICAgYWxpZ25lZCBvbiAyLWJ5dGUgYm91bmRhcmllcywgMzItYml0IHZhbHVlcyBvbgogICAgICAgICAgICA0LWJ5dGUgYm91bmRhcmllcywgYW5kIHNvIG9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGRhdGF0eXBlIG1pc2FsaWdubWVudCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX1NJTkdMRV9TVEVQOgogICAgICAgICAvKiBBIHRyYWNlIHRyYXAgb3Igb3RoZXIgc2luZ2xlLWluc3RydWN0aW9uIG1lY2hhbmlzbQogICAgICAgICAgICBzaWduYWxlZCB0aGF0IG9uZSBpbnN0cnVjdGlvbiBoYXMgYmVlbiBleGVjdXRlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzaW5nbGUgc3RlcCIpOwogICAgICAgICBicmVhazsKIApAQCAtMjk3LDcgKzI5Nyw3IEBACiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGFjY2VzcyBhbiBhcnJheSBlbGVtZW50CiAgICAgICAgICAgIHRoYXQgaXMgb3V0IG9mIGJvdW5kcywgYW5kIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlCiAgICAgICAgICAgIHN1cHBvcnRzIGJvdW5kcyBjaGVja2luZy4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBhcnJheSBib3VuZHMgZXhjZWVkZWQiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMwNiwyOCArMzA2LDI4IEBACiAgICAgICAgICAgIGlzIGRlbm9ybWFsLiBBIGRlbm9ybWFsIHZhbHVlIGlzIG9uZSB0aGF0IGlzIHRvbwogICAgICAgICAgICBzbWFsbCB0byByZXByZXNlbnQgYXMgYSBzdGFuZGFyZCBmbG9hdGluZy1wb2ludAogICAgICAgICAgICB2YWx1ZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdGluZy1wb2ludCBvcGVyYW5kIGRlbm9ybWFsIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX0RJVklERV9CWV9aRVJPOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYSBmbG9hdGluZy1wb2ludAogICAgICAgICAgICB2YWx1ZSBieSBhIGZsb2F0aW5nLXBvaW50IGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCBkaXZpZGUgYnkgemVybyIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTkVYQUNUX1JFU1VMVDoKICAgICAgICAgLyogVGhlIHJlc3VsdCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBjYW5ub3QgYmUKICAgICAgICAgICAgcmVwcmVzZW50ZWQgZXhhY3RseSBhcyBhIGRlY2ltYWwgZnJhY3Rpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgaW5leGFjdCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9JTlZBTElEX09QRVJBVElPTjoKICAgICAgICAgLyogVGhpcyBleGNlcHRpb24gcmVwcmVzZW50cyBhbnkgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgZXhjZXB0aW9uIG5vdCBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgaW52YWxpZCBvcGVyYXRpb24iKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTMzNSwyMSArMzM1LDIxIEBACiAgICAgICAgIC8qIFRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcwogICAgICAgICAgICBncmVhdGVyIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZQogICAgICAgICAgICBjb3JyZXNwb25kaW5nIHR5cGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfU1RBQ0tfQ0hFQ0s6CiAgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3Zlci91bmRlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9TVEFDS19PVkVSRkxPVzoKICAgICAgICAgLyogVGhlIHN0YWNrIG92ZXJmbG93ZWQgb3IgdW5kZXJmbG93ZWQgYXMgdGhlIHJlc3VsdAogICAgICAgICAgICBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBzdGFjayBvdmVyZmxvdyIpOwogICAgICAgICBicmVhazsKIApAQCAtMzU3LDIxICszNTcsMjEgQEAKICAgICAgICAgLyogVGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uIGlzIGxlc3MKICAgICAgICAgICAgdGhhbiB0aGUgbWFnbml0dWRlIGFsbG93ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgdHlwZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBmbG9hdCB1bmRlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9JTlRfRElWSURFX0JZX1pFUk86CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGRpdmlkZSBhbiBpbnRlZ2VyIHZhbHVlIGJ5CiAgICAgICAgICAgIGFuIGludGVnZXIgZGl2aXNvciBvZiB6ZXJvLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgZGl2aWRlIGJ5IHplcm8iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9JTlRfT1ZFUkZMT1c6CiAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYW4gaW50ZWdlciBvcGVyYXRpb24gY2F1c2VkIGEgY2FycnkKICAgICAgICAgICAgb3V0IG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgcmVzdWx0LiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGludGVnZXIgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM3OSwxNCArMzc5LDE0IEBACiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGV4ZWN1dGUgYW4gaW5zdHJ1Y3Rpb24KICAgICAgICAgICAgd2hvc2Ugb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoZSBjdXJyZW50CiAgICAgICAgICAgIG1hY2hpbmUgbW9kZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBwcml2aWxlZGdlZCBpbnN0cnVjdGlvbiIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX05PTkNPTlRJTlVBQkxFX0VYQ0VQVElPTjoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gY29udGludWUgZXhlY3V0aW9uIGFmdGVyIGEKICAgICAgICAgICAgbm9uY29udGludWFibGUgZXhjZXB0aW9uIG9jY3VycmVkLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IG5vY29udGludWFibGUiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTYyMCw2ICs2MjAsOCBAQAogICAgICAgICBhc3NlcnQoZGljdC0+cGFyYW1mdW5jKTsKICAgICAgICAgLyogSWYgaXQgaGFzIGFuIHN0Z2RpY3QsIGl0IGlzIGEgQ0RhdGFPYmplY3QgKi8KICAgICAgICAgY2FyZyA9IGRpY3QtPnBhcmFtZnVuYygoQ0RhdGFPYmplY3QgKilvYmopOworICAgICAgICBpZiAoY2FyZyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBwYS0+ZmZpX3R5cGUgPSBjYXJnLT5wZmZpX3R5cGU7CiAgICAgICAgIG1lbWNweSgmcGEtPnZhbHVlLCAmY2FyZy0+dmFsdWUsIHNpemVvZihwYS0+dmFsdWUpKTsKICAgICAgICAgcGEtPmtlZXAgPSAoUHlPYmplY3QgKiljYXJnOwpAQCAtMTEwNSw5ICsxMTA3LDcgQEAKICAgICAgICAgaWYgKGFyZ3R5cGVzICYmIGFyZ3R5cGVfY291bnQgPiBpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGNvbnZlcnRlciA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHlwZXMsIGkpOwotICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29udmVydGVyLCBhcmcsIE5VTEwpOwogICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIF9jdHlwZXNfZXh0ZW5kX2Vycm9yKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CiAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwpAQCAtMTI3Miw2MiArMTI3Miw2IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLS8qIG9ic29sZXRlLCBzaG91bGQgYmUgcmVtb3ZlZCAqLwotLyogT25seSB1c2VkIGJ5IHNhbXBsZSBjb2RlIChpbiBzYW1wbGVzXFdpbmRvd3NcQ09NLnB5KSAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfY29tbWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBJVW5rbm93biAqcEl1bms7Ci0gICAgaW50IGluZGV4OwotICAgIFB5T2JqZWN0ICphcmd1bWVudHM7Ci0gICAgUFBST0MgKmxwVnRibDsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIENEYXRhT2JqZWN0ICpwY29tOwotICAgIFB5T2JqZWN0ICphcmd0eXBlcyA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk9pTyF8TyEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNvbSwgJmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndHlwZXMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChhcmd0eXBlcyAmJiAoUHlUdXBsZV9HRVRfU0laRShhcmd1bWVudHMpICE9IFB5VHVwbGVfR0VUX1NJWkUoYXJndHlwZXMpKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIk1ldGhvZCB0YWtlcyAlZCBhcmd1bWVudHMgKCVkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGFyZ3R5cGVzKSwgUHlUdXBsZV9HRVRfU0laRShhcmd1bWVudHMpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFDRGF0YU9iamVjdF9DaGVjayhwY29tKSB8fCAocGNvbS0+Yl9zaXplICE9IHNpemVvZih2b2lkICopKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIkNPTSBQb2ludGVyIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShwY29tKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICgoKih2b2lkICoqKShwY29tLT5iX3B0cikpID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhlIENPTSAndGhpcycgcG9pbnRlciBpcyBOVUxMIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHBJdW5rID0gKElVbmtub3duICopKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKTsKLSAgICBscFZ0YmwgPSAoUFBST0MgKikocEl1bmstPmxwVnRibCk7Ci0KLSAgICByZXN1bHQgPSAgX2N0eXBlc19jYWxscHJvYyhscFZ0YmxbaW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLAotI2lmZGVmIE1TX1dJTjMyCi0gICAgICAgICAgICAgICAgICAgICAgICBwSXVuaywKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNGTEFHX0hSRVNVTFQsIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgYXJndHlwZXMsIC8qIHNlbGYtPmFyZ3R5cGVzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLwotICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGNoYXIgY29weV9jb21fcG9pbnRlcl9kb2NbXSA9CiAiQ29weUNvbVBvaW50ZXIoc3JjLCBkc3QpIC0+IEhSRVNVTFQgdmFsdWVcbiI7CiAKQEAgLTE0ODksOSArMTQzMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DRkxBR19DREVDTCwgLyogZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5hcmd0eXBlcyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KLSAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+YXJndHlwZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTgyMiw3ICsxNzY2LDYgQEAKICAgICB7IkZvcm1hdEVycm9yIiwgZm9ybWF0X2Vycm9yLCBNRVRIX1ZBUkFSR1MsIGZvcm1hdF9lcnJvcl9kb2N9LAogICAgIHsiTG9hZExpYnJhcnkiLCBsb2FkX2xpYnJhcnksIE1FVEhfVkFSQVJHUywgbG9hZF9saWJyYXJ5X2RvY30sCiAgICAgeyJGcmVlTGlicmFyeSIsIGZyZWVfbGlicmFyeSwgTUVUSF9WQVJBUkdTLCBmcmVlX2xpYnJhcnlfZG9jfSwKLSAgICB7ImNhbGxfY29tbWV0aG9kIiwgY2FsbF9jb21tZXRob2QsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsiX2NoZWNrX0hSRVNVTFQiLCBjaGVja19ocmVzdWx0LCBNRVRIX1ZBUkFSR1N9LAogI2Vsc2UKICAgICB7ImRsb3BlbiIsIHB5X2RsX29wZW4sIE1FVEhfVkFSQVJHUywKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgppbmRleCBhZGUyOGU1Li4xZjkzMWZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCkBAIC0xNjcsMyArMTY3LDM5IEBACiAgI2VuZGlmICAvKiBXSU4zMiAqLwogIAogICNpZmRlZiBfX09TMl9fCitAQCAtMzM5Myw3ICszMzkzLDcgQEAKKyAgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLworICAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKKyAgIG0tPnNlZy5zaXplID0gdHNpemU7CistICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKKysgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBwZWQpOworICAgbS0+c2VnLm5leHQgPSBzczsKKyAKKyAgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCitAQCAtMzU1Myw3ICszNTUzLDcgQEAKKyAgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKy0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOworKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBfZmxhZyk7CisgICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgIGluaXRfYmlucyhtKTsKKyAgICAgICBpZiAoaXNfZ2xvYmFsKG0pKSAKK0BAIC00NTAyLDcgKzQ1MDIsNyBAQAorICAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOworLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKysgICAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CisgICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgICAgfQorICAgfQorQEAgLTQ1MTcsNyArNDUxNyw3IEBACisgICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CistICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworKyAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKKyAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgIH0KKyAgIHJldHVybiAobXNwYWNlKW07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYwppbmRleCAyNzczOTUzLi5mZTFlNDBkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKQEAgLTMzOTMsNyArMzM5Myw3IEBACiAgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLwogICBtLT5zZWcuYmFzZSA9IHRiYXNlOwogICBtLT5zZWcuc2l6ZSA9IHRzaXplOwotICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKKyAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcHBlZCk7CiAgIG0tPnNlZy5uZXh0ID0gc3M7CiAKICAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KQEAgLTM1NTMsNyArMzU1Myw3IEBACiAgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCiAgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKICAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7Ci0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwX2ZsYWcpOworICAgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcF9mbGFnKTsKICAgICAgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKICAgICAgIGluaXRfYmlucyhtKTsKICAgICAgIGlmIChpc19nbG9iYWwobSkpIApAQCAtNDUwMiw3ICs0NTAyLDcgQEAKICAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CiAgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgewogICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKLSAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIElTX01NQVBQRURfQklUKTsKICAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CiAgICAgfQogICB9CkBAIC00NTE3LDcgKzQ1MTcsNyBAQAogICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKICAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOwotICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOwogICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CiAgIH0KICAgcmV0dXJuIChtc3BhY2UpbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMKaW5kZXggYmY0MjA5My4uOTY4MjZiNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMKQEAgLTM4LDEyICszOCwxMyBAQAogLypAb3V0QCovCWZmaV90eXBlKglhcmcpCiB7CiAvKkAtdXNlZGVmQCovCisJZmZpX3R5cGUqKglwdHI7CiAKIAlpZiAoYXJnID09IE5VTEwgfHwgYXJnLT5lbGVtZW50cyA9PSBOVUxMIHx8CiAJCWFyZy0+c2l6ZSAhPSAwIHx8IGFyZy0+YWxpZ25tZW50ICE9IDApCiAJCXJldHVybiBGRklfQkFEX1RZUEVERUY7CiAKLQlmZmlfdHlwZSoqCXB0ciA9ICYoYXJnLT5lbGVtZW50c1swXSk7CisgICAgcHRyID0gJihhcmctPmVsZW1lbnRzWzBdKTsKIAogCXdoaWxlICgoKnB0cikgIT0gTlVMTCkKIAl7CkBAIC0xMzUsMTYgKzEzNiwxNiBAQAogLypAZGVwZW5kZW50QCovIC8qQG91dEAqLyAvKkBwYXJ0aWFsQCovIGZmaV90eXBlKglydHlwZSwgCiAvKkBkZXBlbmRlbnRAKi8JCQlmZmlfdHlwZSoqCQlhdHlwZXMpCiB7CisJdW5zaWduZWQgaW50CWJ5dGVzCT0gMDsKKwl1bnNpZ25lZCBpbnQJaTsKKwlmZmlfdHlwZSoqCQlwdHI7CisKIAlpZiAoY2lmID09IE5VTEwpCiAJCXJldHVybiBGRklfQkFEX1RZUEVERUY7CiAKIAlpZiAoYWJpIDw9IEZGSV9GSVJTVF9BQkkgfHwgYWJpID4gRkZJX0RFRkFVTFRfQUJJKQogCQlyZXR1cm4gRkZJX0JBRF9BQkk7CiAKLQl1bnNpZ25lZCBpbnQJYnl0ZXMJPSAwOwotCXVuc2lnbmVkIGludAlpOwotCWZmaV90eXBlKioJCXB0cjsKLQogCWNpZi0+YWJpID0gYWJpOwogCWNpZi0+YXJnX3R5cGVzID0gYXR5cGVzOwogCWNpZi0+bmFyZ3MgPSBuYXJnczsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYwppbmRleCAyYWZmYjE0Li5mMjYxMGMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCkBAIC0yMjUsMTQgKzIyNSwxNiBAQAogCQkJLyogTWVyZ2UgdGhlIGZpZWxkcyBvZiBzdHJ1Y3R1cmUuICAqLwogCQkJZm9yIChwdHIgPSB0eXBlLT5lbGVtZW50czsgKnB0ciAhPSBOVUxMOyBwdHIrKykKIAkJCXsKKwkJCQlpbnQgbnVtLCBwb3M7CisKIAkJCQlieXRlX29mZnNldCA9IEFMSUdOKGJ5dGVfb2Zmc2V0LCAoKnB0ciktPmFsaWdubWVudCk7CiAKLQkJCQlpbnQJbnVtID0gY2xhc3NpZnlfYXJndW1lbnQoKnB0ciwgc3ViY2xhc3NlcywgYnl0ZV9vZmZzZXQgJSA4KTsKKwkJCQludW0gPSBjbGFzc2lmeV9hcmd1bWVudCgqcHRyLCBzdWJjbGFzc2VzLCBieXRlX29mZnNldCAlIDgpOwogCiAJCQkJaWYgKG51bSA9PSAwKQogCQkJCQlyZXR1cm4gMDsKIAotCQkJCWludCBwb3MgPSBieXRlX29mZnNldCAvIDg7CisJCQkJcG9zID0gYnl0ZV9vZmZzZXQgLyA4OwogCiAJCQkJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQogCQkJCXsKQEAgLTU4OSwxMSArNTkxLDEyIEBACiAJdm9pZAkJCSgqZnVuKShmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLAogCXZvaWQqCQkJdXNlcl9kYXRhKQogeworCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCoJdHJhbXA7CisKIAlpZiAoY2lmLT5hYmkgIT0gRkZJX1VOSVg2NCkKIAkJcmV0dXJuIEZGSV9CQURfQUJJOwogCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqCXRyYW1wID0KLQkJKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KikmY2xvc3VyZS0+dHJhbXBbMF07CisJdHJhbXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKSZjbG9zdXJlLT50cmFtcFswXTsKIAogCXRyYW1wWzBdID0gMHhiYjQ5OwkJLyogbW92IDxjb2RlPiwgJXIxMQkqLwogCSoodm9pZCogdm9sYXRpbGUqKSZ0cmFtcFsxXSA9IGZmaV9jbG9zdXJlX3VuaXg2NDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCmluZGV4IDI1ZDk5OTYuLmI5NWIwYTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYwpAQCAtNDE3LDYgKzQxNyw4IEBACiAgICAgICAgICAgIHRoYXQpLiBVc2UgJ0InIGZvciBieXRlcy4gKi8KICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJCIik7CiAgICAgfQorICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAjZGVmaW5lIHJlYWxkaWN0ICgoUHlPYmplY3QgKikmc3RnZGljdC0+ZGljdCkKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKQEAgLTQ4Myw3ICs0ODUsNyBAQAogICAgICAgICAgICAgY2hhciAqZmllbGRmbXQgPSBkaWN0LT5mb3JtYXQgPyBkaWN0LT5mb3JtYXQgOiAiQiI7CiAgICAgICAgICAgICBjaGFyICpmaWVsZG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwogICAgICAgICAgICAgY2hhciAqcHRyOwotICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47IAorICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgICAgICAgICBjaGFyICpidWY7CiAKICAgICAgICAgICAgIGlmIChmaWVsZG5hbWUgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jIGIvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKaW5kZXggZjU2MDcwMi4uODdiOWMwNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKKysrIGIvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogewogICAgIGxpc3Rfb2ZfcGFuZWxzICpuZXc7CiAKLSAgICBpZiAoKG5ldyA9IChsaXN0X29mX3BhbmVscyAqKW1hbGxvYyhzaXplb2YobGlzdF9vZl9wYW5lbHMpKSkgPT0gTlVMTCkgeworICAgIGlmICgobmV3ID0gKGxpc3Rfb2ZfcGFuZWxzICopUHlNZW1fTWFsbG9jKHNpemVvZihsaXN0X29mX3BhbmVscykpKSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICB0ZW1wID0gbG9wOwogICAgIGlmICh0ZW1wLT5wbyA9PSBwbykgewogICAgICAgICBsb3AgPSB0ZW1wLT5uZXh0OwotICAgICAgICBmcmVlKHRlbXApOworICAgICAgICBQeU1lbV9GcmVlKHRlbXApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHdoaWxlICh0ZW1wLT5uZXh0ID09IE5VTEwgfHwgdGVtcC0+bmV4dC0+cG8gIT0gcG8pIHsKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgICB9CiAgICAgbiA9IHRlbXAtPm5leHQtPm5leHQ7Ci0gICAgZnJlZSh0ZW1wLT5uZXh0KTsKKyAgICBQeU1lbV9GcmVlKHRlbXAtPm5leHQpOwogICAgIHRlbXAtPm5leHQgPSBuOwogICAgIHJldHVybjsKIH0KQEAgLTUxMyw2ICs1MTMsOCBAQAogICAgICAgICBnb3RvIGZhaWw7CiAKICAgICBpbXBvcnRfY3Vyc2VzKCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIC8qIEZvciBleGNlcHRpb24gX2N1cnNlc19wYW5lbC5lcnJvciAqLwogICAgIF9jdXJzZXNfcGFuZWxzdGF0ZShtKS0+UHlDdXJzZXNFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX2N1cnNlc19wYW5lbC5lcnJvciIsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwppbmRleCAxM2NmY2Y1Li4zNjI2MThmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwpAQCAtMTM0LDYgKzEzNCwxMiBAQAogI2RlZmluZSBTVFJJQ1RfU1lTVl9DVVJTRVMKICNlbmRpZgogCisvKltjbGluaWNdCittb2R1bGUgY3Vyc2VzCitjbGFzcyBjdXJzZXMud2luZG93CitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogLyogRGVmaW5pdGlvbiBvZiBleGNlcHRpb24gY3Vyc2VzLmVycm9yICovCiAKIHN0YXRpYyBQeU9iamVjdCAqUHlDdXJzZXNFcnJvcjsKQEAgLTE2OCwxMCArMTc0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGNhbGwgc3RhcnRfY29sb3IoKSBmaXJzdCIpOyAgICAgICBcCiAgICAgICAgIHJldHVybiAwOyB9CiAKLSNpZm5kZWYgTUlOCi0jZGVmaW5lIE1JTih4LHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0jZW5kaWYKLQogLyogVXRpbGl0eSBGdW5jdGlvbnMgKi8KIAogLyoKQEAgLTUzMyw3ICs1MzUsNyBAQAogICAgIHdvID0gUHlPYmplY3RfTkVXKFB5Q3Vyc2VzV2luZG93T2JqZWN0LCAmUHlDdXJzZXNXaW5kb3dfVHlwZSk7CiAgICAgaWYgKHdvID09IE5VTEwpIHJldHVybiBOVUxMOwogICAgIHdvLT53aW4gPSB3aW47Ci0gICAgd28tPmVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKKyAgICB3by0+ZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKGVuY29kaW5nKTsKICAgICBpZiAod28tPmVuY29kaW5nID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHdvKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTU0Nyw3NCArNTQ5LDE0NCBAQAogewogICAgIGlmICh3by0+d2luICE9IHN0ZHNjcikgZGVsd2luKHdvLT53aW4pOwogICAgIGlmICh3by0+ZW5jb2RpbmcgIT0gTlVMTCkKLSAgICAgICAgZnJlZSh3by0+ZW5jb2RpbmcpOworICAgICAgICBQeU1lbV9GcmVlKHdvLT5lbmNvZGluZyk7CiAgICAgUHlPYmplY3RfREVMKHdvKTsKIH0KIAogLyogQWRkY2gsIEFkZHN0ciwgQWRkbnN0ciAqLwogCisvKltjbGluaWNdCisKK2N1cnNlcy53aW5kb3cuYWRkY2gKKworICAgIFsKKyAgICB4OiBpbnQKKyAgICAgIFgtY29vcmRpbmF0ZS4KKyAgICB5OiBpbnQKKyAgICAgIFktY29vcmRpbmF0ZS4KKyAgICBdCisKKyAgICBjaDogb2JqZWN0CisgICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorCisgICAgWworICAgIGF0dHI6IGxvbmcKKyAgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgXQorICAgIC8KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ci4KKworUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0ciwKK292ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uCitCeSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVyIHBvc2l0aW9uIGFuZCBhdHRyaWJ1dGVzIGFyZSB0aGUKK2N1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSB3aW5kb3cgb2JqZWN0LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX18sCisiYWRkY2goW3gsIHksXSBjaCwgW2F0dHJdKVxuIgorIlBhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIuXG4iCisiXG4iCisiICB4XG4iCisiICAgIFgtY29vcmRpbmF0ZS5cbiIKKyIgIHlcbiIKKyIgICAgWS1jb29yZGluYXRlLlxuIgorIiAgY2hcbiIKKyIgICAgQ2hhcmFjdGVyIHRvIGFkZC5cbiIKKyIgIGF0dHJcbiIKKyIgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci5cbiIKKyJcbiIKKyJQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLFxuIgorIm92ZXJ3cml0aW5nIGFueSBjaGFyYWN0ZXIgcHJldmlvdXNseSBwYWludGVkIGF0IHRoYXQgbG9jYXRpb24uXG4iCisiQnkgZGVmYXVsdCwgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgYXR0cmlidXRlcyBhcmUgdGhlXG4iCisiY3VycmVudCBzZXR0aW5ncyBmb3IgdGhlIHdpbmRvdyBvYmplY3QuIik7CisKKyNkZWZpbmUgQ1VSU0VTX1dJTkRPV19BRERDSF9NRVRIT0RERUYgICAgXAorICAgIHsiYWRkY2giLCAoUHlDRnVuY3Rpb24pY3Vyc2VzX3dpbmRvd19hZGRjaCwgTUVUSF9WQVJBUkdTLCBjdXJzZXNfd2luZG93X2FkZGNoX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1QeUN1cnNlc1dpbmRvd19BZGRDaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB4LCBpbnQgeSwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2N1cnNlc193aW5kb3dfYWRkY2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBydG4sIHgsIHksIHVzZV94eSA9IEZBTFNFOwotICAgIFB5T2JqZWN0ICpjaG9iajsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZ3JvdXBfbGVmdF8xID0gMDsKKyAgICBpbnQgeCA9IDA7CisgICAgaW50IHkgPSAwOworICAgIFB5T2JqZWN0ICpjaDsKKyAgICBpbnQgZ3JvdXBfcmlnaHRfMSA9IDA7CisgICAgbG9uZyBhdHRyID0gMDsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzphZGRjaCIsICZjaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbDphZGRjaCIsICZjaCwgJmF0dHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU86YWRkY2giLCAmeCwgJnksICZjaCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9sZWZ0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPbDphZGRjaCIsICZ4LCAmeSwgJmNoLCAmYXR0cikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJjdXJzZXMud2luZG93LmFkZGNoIHJlcXVpcmVzIDEgdG8gNCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSBjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoc2VsZiwgZ3JvdXBfbGVmdF8xLCB4LCB5LCBjaCwgZ3JvdXBfcmlnaHRfMSwgYXR0cik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBpbnQgZ3JvdXBfbGVmdF8xLCBpbnQgeCwgaW50IHksIFB5T2JqZWN0ICpjaCwgaW50IGdyb3VwX3JpZ2h0XzEsIGxvbmcgYXR0cikKKy8qW2NsaW5pYyBjaGVja3N1bTogNDRlZDk1OGI4OTFjZGU5MTIwNWU1ODRjNzY2ZTA0OGYzOTk5NzE0Zl0qLworeworICAgIFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpjd3NlbGYgPSAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKilzZWxmOworICAgIGludCBjb29yZGluYXRlc19ncm91cCA9IGdyb3VwX2xlZnRfMTsKKyAgICBpbnQgYXR0cl9ncm91cCA9IGdyb3VwX3JpZ2h0XzE7CisgICAgaW50IHJ0bjsKICAgICBpbnQgdHlwZTsKLSAgICBjaHR5cGUgY2g7CisgICAgY2h0eXBlIGNjaDsKICNpZmRlZiBIQVZFX05DVVJTRVNXCiAgICAgY2NoYXJfdCB3Y2g7CiAjZW5kaWYKLSAgICBhdHRyX3QgYXR0ciA9IEFfTk9STUFMOwotICAgIGxvbmcgbGF0dHI7CiAgICAgY29uc3QgY2hhciAqZnVuY25hbWU7CiAKLSAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPO2NoIG9yIGludCIsICZjaG9iaikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9sO2NoIG9yIGludCxhdHRyIiwgJmNob2JqLCAmbGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGF0dHIgPSBsYXR0cjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWlPO3kseCxjaCBvciBpbnQiLCAmeSwgJngsICZjaG9iaikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdXNlX3h5ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWlPbDt5LHgsY2ggb3IgaW50LCBhdHRyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5LCAmeCwgJmNob2JqLCAmbGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGF0dHIgPSBsYXR0cjsKLSAgICAgICAgdXNlX3h5ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFkZGNoIHJlcXVpcmVzIDEgdG8gNCBhcmd1bWVudHMiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghYXR0cl9ncm91cCkKKyAgICAgIGF0dHIgPSBBX05PUk1BTDsKIAogI2lmZGVmIEhBVkVfTkNVUlNFU1cKLSAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChzZWxmLCBjaG9iaiwgJmNoLCAmd2NoKTsKKyAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChjd3NlbGYsIGNoLCAmY2NoLCAmd2NoKTsKICAgICBpZiAodHlwZSA9PSAyKSB7CiAgICAgICAgIGZ1bmNuYW1lID0gImFkZF93Y2giOwogICAgICAgICB3Y2guYXR0ciA9IGF0dHI7Ci0gICAgICAgIGlmICh1c2VfeHkgPT0gVFJVRSkKLSAgICAgICAgICAgIHJ0biA9IG12d2FkZF93Y2goc2VsZi0+d2luLHkseCwgJndjaCk7CisgICAgICAgIGlmIChjb29yZGluYXRlc19ncm91cCkKKyAgICAgICAgICAgIHJ0biA9IG12d2FkZF93Y2goY3dzZWxmLT53aW4seSx4LCAmd2NoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSB3YWRkX3djaChzZWxmLT53aW4sICZ3Y2gpOworICAgICAgICAgICAgcnRuID0gd2FkZF93Y2goY3dzZWxmLT53aW4sICZ3Y2gpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICNlbHNlCi0gICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3Qoc2VsZiwgY2hvYmosICZjaCk7CisgICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3QoY3dzZWxmLCBjaCwgJmNjaCk7CiAjZW5kaWYKICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgIGZ1bmNuYW1lID0gImFkZGNoIjsKLSAgICAgICAgaWYgKHVzZV94eSA9PSBUUlVFKQotICAgICAgICAgICAgcnRuID0gbXZ3YWRkY2goc2VsZi0+d2luLHkseCwgY2ggfCBhdHRyKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVzX2dyb3VwKQorICAgICAgICAgICAgcnRuID0gbXZ3YWRkY2goY3dzZWxmLT53aW4seSx4LCBjY2ggfCBhdHRyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSB3YWRkY2goc2VsZi0+d2luLCBjaCB8IGF0dHIpOworICAgICAgICAgICAgcnRuID0gd2FkZGNoKGN3c2VsZi0+d2luLCBjY2ggfCBhdHRyKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKQEAgLTEyMTIsNyArMTI4NCw3IEBACiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO24iLCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBydG4yID0gd2dldG5zdHIoc2VsZi0+d2luLHJ0bixNSU4obiwgMTAyMykpOworICAgICAgICBydG4yID0gd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKQEAgLTEyMzIsMTEgKzEzMDQsMTEgQEAKICNpZmRlZiBTVFJJQ1RfU1lTVl9DVVJTRVMKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBydG4yID0gd21vdmUoc2VsZi0+d2luLHkseCk9PUVSUiA/IEVSUiA6Ci0gICAgICAgIHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBNSU4obiwgMTAyMykpOworICAgICAgICB3Z2V0bnN0cihzZWxmLT53aW4sIHJ0biwgUHlfTUlOKG4sIDEwMjMpKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICNlbHNlCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcnRuMiA9IG12d2dldG5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIE1JTihuLCAxMDIzKSk7CisgICAgICAgIHJ0bjIgPSBtdndnZXRuc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2VuZGlmCiAgICAgICAgIGJyZWFrOwpAQCAtMTM3NSw3ICsxNDQ3LDcgQEAKICAgICBjYXNlIDE6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO24iLCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLHJ0bixNSU4obiwxMDIzKSk7CisgICAgICAgIHJ0bjIgPSB3aW5uc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTt5LHgiLCZ5LCZ4KSkKQEAgLTEzODUsNyArMTQ1Nyw3IEBACiAgICAgY2FzZSAzOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaTt5LHgsbiIsICZ5LCAmeCwgJm4pKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJ0bjIgPSBtdndpbm5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIE1JTihuLDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IG12d2lubnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgUHlfTUlOKG4sMTAyMykpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5zdHIgcmVxdWlyZXMgMCBvciAzIGFyZ3VtZW50cyIpOwpAQCAtMTY5OSwyNiArMTc3MSwyNCBAQAogICAgIC8qIFdlIGhhdmUgdG8gc2ltdWxhdGUgdGhpcyBieSB3cml0aW5nIHRvIGEgdGVtcG9yYXJ5IEZJTEUqLAogICAgICAgIHRoZW4gcmVhZGluZyBiYWNrLCB0aGVuIHdyaXRpbmcgdG8gdGhlIGFyZ3VtZW50IHN0cmVhbS4gKi8KICAgICBjaGFyIGZuWzEwMF07Ci0gICAgaW50IGZkOwotICAgIEZJTEUgKmZwOwotICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaW50IGZkID0gLTE7CisgICAgRklMRSAqZnAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCiAgICAgc3RyY3B5KGZuLCAiL3RtcC9weS5jdXJzZXMucHV0d2luLlhYWFhYWCIpOwogICAgIGZkID0gbWtzdGVtcChmbik7CiAgICAgaWYgKGZkIDwgMCkKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBleGl0OwogICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICByZXMgPSBQeUN1cnNlc0NoZWNrRVJSKHB1dHdpbihzZWxmLT53aW4sIGZwKSwgInB1dHdpbiIpOwotICAgIGlmIChyZXMgPT0gTlVMTCkgewotICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBmc2VlayhmcCwgMCwgMCk7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgY2hhciBidWZbQlVGU0laXTsKQEAgLTE3MzIsNyArMTgwMiwxMiBAQAogICAgICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZmNsb3NlKGZwKTsKKworZXhpdDoKKyAgICBpZiAoZnAgIT0gTlVMTCkKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICBlbHNlIGlmIChmZCAhPSAtMSkKKyAgICAgICAgY2xvc2UoZmQpOwogICAgIHJlbW92ZShmbik7CiAgICAgcmV0dXJuIHJlczsKIH0KQEAgLTE5NDMsMjAgKzIwMTgsMjAgQEAKICAgICBhc2NpaSA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKHZhbHVlKTsKICAgICBpZiAoYXNjaWkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGVuY29kaW5nID0gc3RyZHVwKFB5Qnl0ZXNfQVNfU1RSSU5HKGFzY2lpKSk7CisgICAgZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKFB5Qnl0ZXNfQVNfU1RSSU5HKGFzY2lpKSk7CiAgICAgUHlfREVDUkVGKGFzY2lpKTsKICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOwogICAgIHNlbGYtPmVuY29kaW5nID0gZW5jb2Rpbmc7CiAgICAgcmV0dXJuIDA7CiB9CiAKIAogc3RhdGljIFB5TWV0aG9kRGVmIFB5Q3Vyc2VzV2luZG93X01ldGhvZHNbXSA9IHsKLSAgICB7ImFkZGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICBDVVJTRVNfV0lORE9XX0FERENIX01FVEhPRERFRgogICAgIHsiYWRkbnN0ciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZE5TdHIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhZGRzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkU3RyLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiYXR0cm9mZiIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJPZmYsIE1FVEhfVkFSQVJHU30sCkBAIC0yMjU3LDEyICsyMzMyLDEzIEBACiBQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJlYW0pCiB7CiAgICAgY2hhciBmblsxMDBdOwotICAgIGludCBmZDsKLSAgICBGSUxFICpmcDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmRhdGE7CiAgICAgc2l6ZV90IGRhdGFsZW47CiAgICAgV0lORE9XICp3aW47CiAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCkBAIC0yMjcwLDQ0ICsyMzQ2LDQ3IEBACiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisKICAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzdHJlYW0sICZQeUlkX3JlYWQsICIiKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImYucmVhZCgpIHJldHVybmVkICUuMTAwcyBpbnN0ZWFkIG9mIGJ5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBkYXRhbGVuID0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKICAgICBpZiAoZndyaXRlKFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCAxLCBkYXRhbGVuLCBmcCkgIT0gZGF0YWxlbikgewogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBQeV9ERUNSRUYoZGF0YSk7CisKICAgICBmc2VlayhmcCwgMCwgMCk7CiAgICAgd2luID0gZ2V0d2luKGZwKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHJlbW92ZShmbik7CiAgICAgaWYgKHdpbiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKyAgICByZXMgPSBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKworZXJyb3I6CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShmcCk7CisgICAgZWxzZSBpZiAoZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKGZkKTsKKyAgICByZW1vdmUoZm4pOworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDE1LDcgKzM0OTQsNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKICAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOwotICAgICAgICAgICAgICAgIGtleV9uMiA9IG1hbGxvYyhzdHJsZW4oa2V5X24pKzEpOworICAgICAgICAgICAgICAgIGtleV9uMiA9IFB5TWVtX01hbGxvYyhzdHJsZW4oa2V5X24pKzEpOwogICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzNCw3ICszNTEzLDcgQEAKICAgICAgICAgICAgICAgICBrZXlfbjIgPSBrZXlfbjsKICAgICAgICAgICAgIFNldERpY3RJbnQoa2V5X24yLGtleSk7CiAgICAgICAgICAgICBpZiAoa2V5X24yICE9IGtleV9uKQotICAgICAgICAgICAgICAgIGZyZWUoa2V5X24yKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGtleV9uMik7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBTZXREaWN0SW50KCJLRVlfTUlOIiwgS0VZX01JTik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwppbmRleCBmYTIzMWQ5Li5iNGQ0ZTJmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKQEAgLTE2LDYgKzE2LDEyIEBACiAjaW5jbHVkZSAiZGF0ZXRpbWUuaCIKICN1bmRlZiBQeV9CVUlMRF9DT1JFCiAKKy8qW2NsaW5pY10KK21vZHVsZSBkYXRldGltZQorY2xhc3MgZGF0ZXRpbWUuZGF0ZXRpbWUKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCiAvKiBXZSByZXF1aXJlIHRoYXQgQyBpbnQgYmUgYXQgbGVhc3QgMzIgYml0cywgYW5kIHVzZSBpbnQgdmlydHVhbGx5CiAgKiBldmVyeXdoZXJlLiAgSW4ganVzdCBhIGZldyBjYXNlcyB3ZSB1c2UgYSB0ZW1wIGxvbmcsIHdoZXJlIGEgUHl0aG9uCiAgKiBBUEkgcmV0dXJucyBhIEMgbG9uZy4gIEluIHN1Y2ggY2FzZXMsIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlCkBAIC0xMDQsNiArMTEwLDExIEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVFpJbmZvVHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgUHlEYXRlVGltZV9UaW1lWm9uZVR5cGU7CiAKK19QeV9JREVOVElGSUVSKGFzX2ludGVnZXJfcmF0aW8pOworX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CitfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOworX1B5X0lERU5USUZJRVIoc3RyZnRpbWUpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIE1hdGggdXRpbGl0aWVzLgogICovCkBAIC0xNDAsMTkgKzE1MSw2IEBACiAgICAgcmV0dXJuIHF1bzsKIH0KIAotLyogUm91bmQgYSBkb3VibGUgdG8gdGhlIG5lYXJlc3QgbG9uZy4gIHx4fCBtdXN0IGJlIHNtYWxsIGVub3VnaCB0byBmaXQKLSAqIGluIGEgQyBsb25nOyB0aGlzIGlzIG5vdCBjaGVja2VkLgotICovCi1zdGF0aWMgbG9uZwotcm91bmRfdG9fbG9uZyhkb3VibGUgeCkKLXsKLSAgICBpZiAoeCA+PSAwLjApCi0gICAgICAgIHggPSBmbG9vcih4ICsgMC41KTsKLSAgICBlbHNlCi0gICAgICAgIHggPSBjZWlsKHggLSAwLjUpOwotICAgIHJldHVybiAobG9uZyl4OwotfQotCiAvKiBOZWFyZXN0IGludGVnZXIgdG8gbSAvIG4gZm9yIGludGVnZXJzIG0gYW5kIG4uIEhhbGYtaW50ZWdlciByZXN1bHRzCiAgKiBhcmUgcm91bmRlZCB0byBldmVuLgogICovCkBAIC02MTUsNyArNjEzLDcgQEAKICAgICAgICAgICAgICAgICBzaXplb2YoX1B5RGF0ZVRpbWVfQmFzZVRpbWUpKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoc2VsZiwgdHlwZSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTYzMCw3ICs2MjgsNyBAQAogICAgICAgICAgICAgICAgIHNpemVvZihfUHlEYXRlVGltZV9CYXNlRGF0ZVRpbWUpKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVQoc2VsZiwgdHlwZSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTEyOTAsOCArMTI4OCw2IEBACiAgICAgICAgICAgICBnb3RvIERvbmU7CiAgICAgICAgIGZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKG5ld2ZtdCkpOwogICAgICAgICBpZiAoZm9ybWF0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKLQogICAgICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0aW1lLCAmUHlJZF9zdHJmdGltZSwgIk9PIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0aW1ldHVwbGUsIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGZvcm1hdCk7CkBAIC0xMzk3LDcgKzEzOTMsNyBAQAogICovCiAKIC8qIENvbnZlcnNpb24gZmFjdG9ycy4gKi8KLXN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX3VzID0gTlVMTDsgICAgICAvKiAxICovCitzdGF0aWMgUHlPYmplY3QgKm9uZSA9IE5VTEw7ICAgICAgLyogMSAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbXMgPSBOVUxMOyAgICAgIC8qIDEwMDAgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX3NlY29uZCA9IE5VTEw7ICAvKiAxMDAwMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9taW51dGUgPSBOVUxMOyAgLyogMWU2ICogNjAgYXMgUHl0aG9uIGludCAqLwpAQCAtMTU3OSw3ICsxNTc1LDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHl1c19pbiA9IE5VTEwsICp0ZW1wLCAqcHl1c19vdXQ7CiAgICAgUHlPYmplY3QgKnJhdGlvID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKIAogICAgIHB5dXNfaW4gPSBkZWx0YV90b19taWNyb3NlY29uZHMoZGVsdGEpOwogICAgIGlmIChweXVzX2luID09IE5VTEwpCkBAIC0xNjc4LDcgKzE2NzMsNiBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpweXVzX2luID0gTlVMTCwgKnRlbXAsICpweXVzX291dDsKICAgICBQeU9iamVjdCAqcmF0aW8gPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKGFzX2ludGVnZXJfcmF0aW8pOwogCiAgICAgcHl1c19pbiA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcyhkZWx0YSk7CiAgICAgaWYgKHB5dXNfaW4gPT0gTlVMTCkKQEAgLTIxMTksNyArMjExMyw3IEBACiAgICAgICAgIGdvdG8gRG9uZQogCiAgICAgaWYgKHVzKSB7Ci0gICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIHVzX3Blcl91cywgJmxlZnRvdmVyX3VzKTsKKyAgICAgICAgeSA9IGFjY3VtKCJtaWNyb3NlY29uZHMiLCB4LCB1cywgb25lLCAmbGVmdG92ZXJfdXMpOwogICAgICAgICBDTEVBTlVQOwogICAgIH0KICAgICBpZiAobXMpIHsKQEAgLTIxNDgsNyArMjE0MiwzMyBAQAogICAgIH0KICAgICBpZiAobGVmdG92ZXJfdXMpIHsKICAgICAgICAgLyogUm91bmQgdG8gbmVhcmVzdCB3aG9sZSAjIG9mIHVzLCBhbmQgYWRkIGludG8geC4gKi8KLSAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBQeUxvbmdfRnJvbUxvbmcocm91bmRfdG9fbG9uZyhsZWZ0b3Zlcl91cykpOworICAgICAgICBkb3VibGUgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGludCB4X2lzX29kZDsKKyAgICAgICAgUHlPYmplY3QgKnRlbXA7CisKKyAgICAgICAgd2hvbGVfdXMgPSByb3VuZChsZWZ0b3Zlcl91cyk7CisgICAgICAgIGlmIChmYWJzKHdob2xlX3VzIC0gbGVmdG92ZXJfdXMpID09IDAuNSkgeworICAgICAgICAgICAgLyogV2UncmUgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIGludGVnZXJzLiAgSW4gb3JkZXIKKyAgICAgICAgICAgICAqIHRvIGRvIHJvdW5kLWhhbGYtdG8tZXZlbiwgd2UgbXVzdCBkZXRlcm1pbmUgd2hldGhlciB4CisgICAgICAgICAgICAgKiBpcyBvZGQuIE5vdGUgdGhhdCB4IGlzIG9kZCB3aGVuIGl0J3MgbGFzdCBiaXQgaXMgMS4gVGhlCisgICAgICAgICAgICAgKiBjb2RlIGJlbG93IHVzZXMgYml0d2lzZSBhbmQgb3BlcmF0aW9uIHRvIGNoZWNrIHRoZSBsYXN0CisgICAgICAgICAgICAgKiBiaXQuICovCisJICAgIHRlbXAgPSBQeU51bWJlcl9BbmQoeCwgb25lKTsgIC8qIHRlbXAgPC0geCAmIDEgKi8KKyAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgeF9pc19vZGQgPSBQeU9iamVjdF9Jc1RydWUodGVtcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgICAgICBpZiAoeF9pc19vZGQgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hvbGVfdXMgPSAyLjAgKiByb3VuZCgobGVmdG92ZXJfdXMgKyB4X2lzX29kZCkgKiAwLjUpIC0geF9pc19vZGQ7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wID0gUHlMb25nX0Zyb21Mb25nKChsb25nKXdob2xlX3VzKTsKKwogICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CiAgICAgICAgICAgICBnb3RvIERvbmU7CkBAIC0yMjM5LDIyICsyMjU5LDE0IEBACiB7CiAgICAgUHlPYmplY3QgKnRvdGFsX3NlY29uZHM7CiAgICAgUHlPYmplY3QgKnRvdGFsX21pY3Jvc2Vjb25kczsKLSAgICBQeU9iamVjdCAqb25lX21pbGxpb247CiAKICAgICB0b3RhbF9taWNyb3NlY29uZHMgPSBkZWx0YV90b19taWNyb3NlY29uZHMoKFB5RGF0ZVRpbWVfRGVsdGEgKilzZWxmKTsKICAgICBpZiAodG90YWxfbWljcm9zZWNvbmRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgb25lX21pbGxpb24gPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMEwpOwotICAgIGlmIChvbmVfbWlsbGlvbiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIG9uZV9taWxsaW9uKTsKKyAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIHVzX3Blcl9zZWNvbmQpOwogCiAgICAgUHlfREVDUkVGKHRvdGFsX21pY3Jvc2Vjb25kcyk7Ci0gICAgUHlfREVDUkVGKG9uZV9taWxsaW9uKTsKICAgICByZXR1cm4gdG90YWxfc2Vjb25kczsKIH0KIApAQCAtMjYzMCw4ICsyNjQyLDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRlX3N0cihQeURhdGVUaW1lX0RhdGUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIigpIik7CiB9CiAKQEAgLTI2NzEsNyArMjY4MSw2IEBACiBkYXRlX2Zvcm1hdChQeURhdGVUaW1lX0RhdGUgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpmb3JtYXQ7Ci0gICAgX1B5X0lERU5USUZJRVIoc3RyZnRpbWUpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTg4LDggKzM1OTcsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRpbWVfc3RyKFB5RGF0ZVRpbWVfVGltZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKCkiKTsKIH0KIApAQCAtNDEzOCwzMSArNDE0NSw3MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm8pOwogfQogCi0vKiBSZXR1cm4gYmVzdCBwb3NzaWJsZSBsb2NhbCB0aW1lIC0tIHRoaXMgaXNuJ3QgY29uc3RyYWluZWQgYnkgdGhlCi0gKiBwcmVjaXNpb24gb2YgYSB0aW1lc3RhbXAuCi0gKi8KKy8qW2NsaW5pY10KKworQGNsYXNzbWV0aG9kCitkYXRldGltZS5kYXRldGltZS5ub3cKKworICAgIHR6OiBvYmplY3QgPSBOb25lCisgICAgICAgIFRpbWV6b25lIG9iamVjdC4KKworUmV0dXJucyBuZXcgZGF0ZXRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRpbWUgbG9jYWwgdG8gdHouCisKK0lmIG5vIHR6IGlzIHNwZWNpZmllZCwgdXNlcyBsb2NhbCB0aW1lem9uZS4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKGRhdGV0aW1lX2RhdGV0aW1lX25vd19fZG9jX18sCisibm93KHR6PU5vbmUpXG4iCisiUmV0dXJucyBuZXcgZGF0ZXRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyBjdXJyZW50IHRpbWUgbG9jYWwgdG8gdHouXG4iCisiXG4iCisiICB0elxuIgorIiAgICBUaW1lem9uZSBvYmplY3QuXG4iCisiXG4iCisiSWYgbm8gdHogaXMgc3BlY2lmaWVkLCB1c2VzIGxvY2FsIHRpbWV6b25lLiIpOworCisjZGVmaW5lIERBVEVUSU1FX0RBVEVUSU1FX05PV19NRVRIT0RERUYgICAgXAorICAgIHsibm93IiwgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX2RhdGV0aW1lX25vdywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN8TUVUSF9DTEFTUywgZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kYXRldGltZV9ub3coUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKK2RhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKFB5VHlwZU9iamVjdCAqY2xzLCBQeU9iamVjdCAqdHopOworCitzdGF0aWMgUHlPYmplY3QgKgorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93KFB5VHlwZU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnR6ID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxPOm5vdyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnR6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKGNscywgdHopOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbChQeVR5cGVPYmplY3QgKmNscywgUHlPYmplY3QgKnR6KQorLypbY2xpbmljIGNoZWNrc3VtOiBjYTNkMjZhNDIzYjNmNjMzYjI2MGM3NjIyZTMwM2YwOTE1YTk2ZjdjXSovCiB7CiAgICAgUHlPYmplY3QgKnNlbGY7Ci0gICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CiAKLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzpub3ciLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR6aW5mbykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA8IDApCisgICAgLyogUmV0dXJuIGJlc3QgcG9zc2libGUgbG9jYWwgdGltZSAtLSB0aGlzIGlzbid0IGNvbnN0cmFpbmVkIGJ5IHRoZQorICAgICAqIHByZWNpc2lvbiBvZiBhIHRpbWVzdGFtcC4KKyAgICAgKi8KKyAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZiA9IGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoY2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7Ci0gICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0emluZm8gIT0gUHlfTm9uZSkgeworICAgIHNlbGYgPSBkYXRldGltZV9iZXN0X3Bvc3NpYmxlKChQeU9iamVjdCAqKWNscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eiA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6KTsKKyAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6ICE9IFB5X05vbmUpIHsKICAgICAgICAgLyogQ29udmVydCBVVEMgdG8gdHppbmZvJ3Mgem9uZS4gKi8KICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSBzZWxmOwotICAgICAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKIAotICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0emluZm8sICZQeUlkX2Zyb211dGMsICJPIiwgc2VsZik7CisgICAgICAgIHNlbGYgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHR6LCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOwogICAgICAgICBQeV9ERUNSRUYodGVtcCk7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwpAQCAtNDE5OSw3ICs0MjQ2LDYgQEAKICAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6aW5mbyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIENvbnZlcnQgVVRDIHRvIHR6aW5mbydzIHpvbmUuICovCiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gc2VsZjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAKICAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHppbmZvLCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOwogICAgICAgICBQeV9ERUNSRUYodGVtcCk7CkBAIC00NDIxLDYgKzQ0NjcsOSBAQAogICAgICAgICAgICAgZGVsdGFfdXMgPSBEQVRFX0dFVF9NSUNST1NFQ09ORChsZWZ0KSAtCiAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX01JQ1JPU0VDT05EKHJpZ2h0KTsKICAgICAgICAgICAgIHJlc3VsdCA9IG5ld19kZWx0YShkZWx0YV9kLCBkZWx0YV9zLCBkZWx0YV91cywgMSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgICAgIGlmIChvZmZkaWZmICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHJlc3VsdDsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBkZWx0YV9zdWJ0cmFjdChyZXN1bHQsIG9mZmRpZmYpOwpAQCAtNDQ4Miw4ICs0NTMxLDYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRldGltZV9zdHIoUHlEYXRlVGltZV9EYXRlVGltZSAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihpc29mb3JtYXQpOwotCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfaXNvZm9ybWF0LCAiKHMpIiwgIiAiKTsKIH0KIApAQCAtNDc0OSw3ICs0Nzk2LDcgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHJlc3VsdCA9IG5ld190aW1lem9uZShkZWx0YSwgbmFtZW8pOwotICAgIFB5X0RFQ1JFRihuYW1lbyk7CisgICAgUHlfWERFQ1JFRihuYW1lbyk7CiAgIGVycm9yOgogICAgIFB5X0RFQ1JFRihkZWx0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3NjIsNyArNDgwOSw2IEBACiAgICAgUHlPYmplY3QgKm9mZnNldDsKICAgICBQeU9iamVjdCAqdGVtcDsKICAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKLSAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKIAogICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOmFzdGltZXpvbmUiLCBrZXl3b3JkcywKQEAgLTQ4NzMsOSArNDkxOSwxNiBAQAogICAgICAgICB0aW1lLnRtX3dkYXkgPSAtMTsKICAgICAgICAgdGltZS50bV9pc2RzdCA9IC0xOwogICAgICAgICB0aW1lc3RhbXAgPSBta3RpbWUoJnRpbWUpOwotICAgICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKLSAgICAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICAgICAgaWYgKHRpbWVzdGFtcCA9PSAodGltZV90KSgtMSkgJiYgdGltZS50bV93ZGF5ID09IC0xKSB7CisgICAgICAgIGlmICh0aW1lc3RhbXAgPT0gKHRpbWVfdCkoLTEpCisjaWZuZGVmIF9BSVgKKyAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLAorICAgICAgICAgICAgICogYnV0IHRtX3dkYXkgY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KKyAgICAgICAgICAgICYmIHRpbWUudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgICAgIC8qIG9uIEFJWCwgdG1fd2RheSBpcyBhbHdheXMgc2V0cywgZXZlbiBvbiBlcnJvciAqLworI2VuZGlmCisgICAgICAgICAgKQorICAgICAgICB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXN0YW1wIG91dCBvZiByYW5nZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00OTg5LDkgKzUwNDIsNyBAQAogCiAgICAgLyogQ2xhc3MgbWV0aG9kczogKi8KIAotICAgIHsibm93IiwgICAgICAgICAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfbm93LAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTIHwgTUVUSF9DTEFTUywKLSAgICAgUHlEb2NfU1RSKCJbdHpdIC0+IG5ldyBkYXRldGltZSB3aXRoIHR6J3MgbG9jYWwgZGF5IGFuZCB0aW1lLiIpfSwKKyAgICBEQVRFVElNRV9EQVRFVElNRV9OT1dfTUVUSE9EREVGCiAKICAgICB7InV0Y25vdyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRhdGV0aW1lX3V0Y25vdywKICAgICAgTUVUSF9OT0FSR1MgfCBNRVRIX0NMQVNTLApAQCAtNTI5OSw4ICs1MzUwLDggQEAKICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogbW9kdWxlIGluaXRpYWxpemF0aW9uICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1JTllFQVIiLCBNSU5ZRUFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUFYWUVBUiIsIE1BWFlFQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1JTllFQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1BWFlFQVIpOwogCiAgICAgUHlfSU5DUkVGKCZQeURhdGVUaW1lX0RhdGVUeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImRhdGUiLCAoUHlPYmplY3QgKikgJlB5RGF0ZVRpbWVfRGF0ZVR5cGUpOwpAQCAtNTM0NCwxMiArNTM5NSwxMiBAQAogICAgIGFzc2VydChESTEwMFkgPT0gMjUgKiBESTRZIC0gMSk7CiAgICAgYXNzZXJ0KERJMTAwWSA9PSBkYXlzX2JlZm9yZV95ZWFyKDEwMCsxKSk7CiAKLSAgICB1c19wZXJfdXMgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDEpOwogICAgIHVzX3Blcl9tcyA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwKTsKICAgICB1c19wZXJfc2Vjb25kID0gUHlMb25nX0Zyb21Mb25nKDEwMDAwMDApOwogICAgIHVzX3Blcl9taW51dGUgPSBQeUxvbmdfRnJvbUxvbmcoNjAwMDAwMDApOwogICAgIHNlY29uZHNfcGVyX2RheSA9IFB5TG9uZ19Gcm9tTG9uZygyNCAqIDM2MDApOwotICAgIGlmICh1c19wZXJfdXMgPT0gTlVMTCB8fCB1c19wZXJfbXMgPT0gTlVMTCB8fCB1c19wZXJfc2Vjb25kID09IE5VTEwgfHwKKyAgICBpZiAob25lID09IE5VTEwgfHwgdXNfcGVyX21zID09IE5VTEwgfHwgdXNfcGVyX3NlY29uZCA9PSBOVUxMIHx8CiAgICAgICAgIHVzX3Blcl9taW51dGUgPT0gTlVMTCB8fCBzZWNvbmRzX3Blcl9kYXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RibW1vZHVsZS5jIGIvTW9kdWxlcy9fZGJtbW9kdWxlLmMKaW5kZXggODNjMDUxYy4uZjlhMGU1ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGJtbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGJtbW9kdWxlLmMKQEAgLTE0LDExICsxNCw3IEBACiAgKi8KICNpZiBkZWZpbmVkKEhBVkVfTkRCTV9IKQogI2luY2x1ZGUgPG5kYm0uaD4KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLXN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAibmRibSI7Ci0jZWxzZQogc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJHTlUgZ2RibSI7ICAvKiBFTVggcG9ydCBvZiBHREJNICovCi0jZW5kaWYKICNlbGlmIGRlZmluZWQoSEFWRV9HREJNX05EQk1fSCkKICNpbmNsdWRlIDxnZGJtL25kYm0uaD4KIHN0YXRpYyBjaGFyICp3aGljaF9kYm0gPSAiR05VIGdkYm0iOwpAQCAtMzIsNiArMjgsMTIgQEAKICNlcnJvciAiTm8gbmRibS5oIGF2YWlsYWJsZSEiCiAjZW5kaWYKIAorLypbY2xpbmljXQorbW9kdWxlIGRibQorY2xhc3MgZGJtLmRibQorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgaW50IGRpX3NpemU7ICAgICAgICAvKiAtMSBtZWFucyByZWNvbXB1dGUgKi8KQEAgLTQ3LDggKzQ5LDE2IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqRGJtRXJyb3I7CiAKKy8qW3B5dGhvbl0KK2NsYXNzIGRibW9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiZGJtb2JqZWN0ICoiCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnZHAnCitbcHl0aG9uXSovCisvKltweXRob24gY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLW5ld2RibW9iamVjdChjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQorbmV3ZGJtb2JqZWN0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBmbGFncywgaW50IG1vZGUpCiB7CiAgICAgZGJtb2JqZWN0ICpkcDsKIApAQCAtNTYsNyArNjYsOCBAQAogICAgIGlmIChkcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkcC0+ZGlfc2l6ZSA9IC0xOwotICAgIGlmICggKGRwLT5kaV9kYm0gPSBkYm1fb3BlbihmaWxlLCBmbGFncywgbW9kZSkpID09IDAgKSB7CisgICAgLyogU2VlIGlzc3VlICMxOTI5NiAqLworICAgIGlmICggKGRwLT5kaV9kYm0gPSBkYm1fb3BlbigoY2hhciAqKWZpbGUsIGZsYWdzLCBtb2RlKSkgPT0gMCApIHsKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKERibUVycm9yKTsKICAgICAgICAgUHlfREVDUkVGKGRwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02Nyw3ICs3OCw3IEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi1kYm1fZGVhbGxvYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwKQorZGJtX2RlYWxsb2MoZGJtb2JqZWN0ICpkcCkKIHsKICAgICBpZiAoIGRwLT5kaV9kYm0gKQogICAgICAgICBkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC05NSw3ICsxMDYsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQorZGJtX3N1YnNjcmlwdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqa2V5KQogewogICAgIGRhdHVtIGRyZWMsIGtyZWM7CiAgICAgUHlfc3NpemVfdCB0bXBfc2l6ZTsKQEAgLTE3MCw3ICsxODEsNyBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9fY2xvc2UocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMTgwLDkgKzE5MSw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0yNTIsMzEgKzI2Myw4MCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9pbnBsYWNlX3JlcGVhdCAqLwogfTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibV9nZXQocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgZGF0dW0ga2V5LCB2YWw7Ci0gICAgUHlPYmplY3QgKmRlZnZhbHVlID0gUHlfTm9uZTsKLSAgICBjaGFyICp0bXBfcHRyOwotICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CisvKltjbGluaWNdCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjfE86Z2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcF9wdHIsICZ0bXBfc2l6ZSwgJmRlZnZhbHVlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAga2V5LmRwdHIgPSB0bXBfcHRyOwotICAgIGtleS5kc2l6ZSA9IHRtcF9zaXplOwotICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKLSAgICB2YWwgPSBkYm1fZmV0Y2goZHAtPmRpX2RibSwga2V5KTsKLSAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihkZWZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBkZWZ2YWx1ZTsKK2RibS5kYm0uZ2V0CisKKyAgICBzZWxmOiBkYm1vYmplY3QKKworICAgIGtleTogc3RyKGxlbmd0aD1UcnVlKQorICAgIFsKKyAgICBkZWZhdWx0OiBvYmplY3QKKyAgICBdCisgICAgLworCitSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihkYm1fZGJtX2dldF9fZG9jX18sCisiZ2V0KGtleSwgW2RlZmF1bHRdKVxuIgorIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4iKTsKKworI2RlZmluZSBEQk1fREJNX0dFVF9NRVRIT0RERUYgICAgXAorICAgIHsiZ2V0IiwgKFB5Q0Z1bmN0aW9uKWRibV9kYm1fZ2V0LCBNRVRIX1ZBUkFSR1MsIGRibV9kYm1fZ2V0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZGJtX2dldF9pbXBsKGRibW9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSwgUHlfc3NpemVfY2xlYW5fdCBrZXlfbGVuZ3RoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX2RibV9nZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBQeV9zc2l6ZV9jbGVhbl90IGtleV9sZW5ndGg7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlID0gTlVMTDsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6Z2V0IiwgJmtleSwgJmtleV9sZW5ndGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNPOmdldCIsICZrZXksICZrZXlfbGVuZ3RoLCAmZGVmYXVsdF92YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImRibS5kYm0uZ2V0IHJlcXVpcmVzIDEgdG8gMiBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXR1cm5fdmFsdWUgPSBkYm1fZGJtX2dldF9pbXBsKChkYm1vYmplY3QgKilzZWxmLCBrZXksIGtleV9sZW5ndGgsIGdyb3VwX3JpZ2h0XzEsIGRlZmF1bHRfdmFsdWUpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zZXRkZWZhdWx0KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX2RibV9nZXRfaW1wbChkYm1vYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXksIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCwgaW50IGdyb3VwX3JpZ2h0XzEsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKQorLypbY2xpbmljIGNoZWNrc3VtOiAyOGNmODkyODgxMWJkZTUxZTUzNWQ2N2FlOThlYTAzOWQ3OWRmNzE3XSovCit7CisgICAgZGF0dW0gZGJtX2tleSwgdmFsOworCisgICAgaWYgKCFncm91cF9yaWdodF8xKQorICAgICAgICBkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKKyAgICBkYm1fa2V5LmRwdHIgPSAoY2hhciAqKWtleTsKKyAgICBkYm1fa2V5LmRzaXplID0ga2V5X2xlbmd0aDsKKyAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CisgICAgdmFsID0gZGJtX2ZldGNoKGRwLT5kaV9kYm0sIGRibV9rZXkpOworICAgIGlmICh2YWwuZHB0ciAhPSBOVUxMKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWwuZHB0ciwgdmFsLmRzaXplKTsKKworICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKKyAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9zZXRkZWZhdWx0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGRhdHVtIGtleSwgdmFsOwogICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IE5VTEw7CkBAIC0zMTcsMTggKzM3NywzMyBAQAogICAgIHJldHVybiBkZWZ2YWx1ZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZW50ZXJfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19leGl0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKKwogc3RhdGljIFB5TWV0aG9kRGVmIGRibV9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX19jbG9zZSwgICAgICAgIE1FVEhfTk9BUkdTLAogICAgICAiY2xvc2UoKVxuQ2xvc2UgdGhlIGRhdGFiYXNlLiJ9LAogICAgIHsia2V5cyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICAgICAgICBNRVRIX05PQVJHUywKICAgICAgImtleXMoKSAtPiBsaXN0XG5SZXR1cm4gYSBsaXN0IG9mIGFsbCBrZXlzIGluIHRoZSBkYXRhYmFzZS4ifSwKLSAgICB7ImdldCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgICAgICAgTUVUSF9WQVJBUkdTLAotICAgICAiZ2V0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgotICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiJ9LAorICAgIERCTV9EQk1fR0VUX01FVEhPRERFRgogICAgIHsic2V0ZGVmYXVsdCIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zZXRkZWZhdWx0LCAgICBNRVRIX1ZBUkFSR1MsCiAgICAgICJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuIgogICAgICAiUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LiAgSWYga2V5XG4iCiAgICAgICJpcyBub3QgaW4gdGhlIGRhdGFiYXNlLCBpdCBpcyBpbnNlcnRlZCB3aXRoIGRlZmF1bHQgYXMgdGhlIHZhbHVlLiJ9LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzY1LDE2ICs0NDAsNjggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLWRibW9wZW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZmxhZ3MgPSAiciI7Ci0gICAgaW50IGlmbGFnczsKLSAgICBpbnQgbW9kZSA9IDA2NjY7CisvKltjbGluaWNdCiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfHNpOm9wZW4iLCAmbmFtZSwgJmZsYWdzLCAmbW9kZSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKK2RibS5vcGVuIGFzIGRibW9wZW4KKworICAgIGZpbGVuYW1lOiBzdHIKKyAgICAgICAgVGhlIGZpbGVuYW1lIHRvIG9wZW4uCisKKyAgICBmbGFnczogc3RyPSJyIgorICAgICAgICBIb3cgdG8gb3BlbiB0aGUgZmlsZS4gICJyIiBmb3IgcmVhZGluZywgInciIGZvciB3cml0aW5nLCBldGMuCisKKyAgICBtb2RlOiBpbnQoZG9jX2RlZmF1bHQ9IjBvNjY2IikgPSAwbzY2NgorICAgICAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGUKKyAgICAgICAgKGUuZy4gb3MuT19SRFdSKS4KKworICAgIC8KKworUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LgorCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihkYm1vcGVuX19kb2NfXywKKyJvcGVuKGZpbGVuYW1lLCBmbGFncz1cJ3JcJywgbW9kZT0wbzY2NilcbiIKKyJSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuXG4iCisiXG4iCisiICBmaWxlbmFtZVxuIgorIiAgICBUaGUgZmlsZW5hbWUgdG8gb3Blbi5cbiIKKyIgIGZsYWdzXG4iCisiICAgIEhvdyB0byBvcGVuIHRoZSBmaWxlLiAgXCJyXCIgZm9yIHJlYWRpbmcsIFwid1wiIGZvciB3cml0aW5nLCBldGMuXG4iCisiICBtb2RlXG4iCisiICAgIElmIGNyZWF0aW5nIGEgbmV3IGZpbGUsIHRoZSBtb2RlIGJpdHMgZm9yIHRoZSBuZXcgZmlsZVxuIgorIiAgICAoZS5nLiBvcy5PX1JEV1IpLiIpOworCisjZGVmaW5lIERCTU9QRU5fTUVUSE9EREVGICAgIFwKKyAgICB7Im9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLCBkYm1vcGVuX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIGNvbnN0IGNoYXIgKmZsYWdzID0gInIiOworICAgIGludCBtb2RlID0gNDM4OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzfHNpOm9wZW4iLAorICAgICAgICAmZmlsZW5hbWUsICZmbGFncywgJm1vZGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGJtb3Blbl9pbXBsKG1vZHVsZSwgZmlsZW5hbWUsIGZsYWdzLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtb3Blbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpmbGFncywgaW50IG1vZGUpCisvKltjbGluaWMgY2hlY2tzdW06IGZiMjY1Zjc1NjQxNTUzY2NkOTYzZjg0YzE0M2IzNWMxMWY5MTIxZmNdKi8KK3sKKyAgICBpbnQgaWZsYWdzOworCiAgICAgaWYgKCBzdHJjbXAoZmxhZ3MsICJyIikgPT0gMCApCiAgICAgICAgIGlmbGFncyA9IE9fUkRPTkxZOwogICAgIGVsc2UgaWYgKCBzdHJjbXAoZmxhZ3MsICJ3IikgPT0gMCApCkBAIC0zOTAsMTMgKzUxNywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImFyZyAyIHRvIG9wZW4gc2hvdWxkIGJlICdyJywgJ3cnLCAnYycsIG9yICduJyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIG5ld2RibW9iamVjdChuYW1lLCBpZmxhZ3MsIG1vZGUpOworICAgIHJldHVybiBuZXdkYm1vYmplY3QoZmlsZW5hbWUsIGlmbGFncywgbW9kZSk7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1tb2R1bGVfbWV0aG9kc1tdID0gewotICAgIHsgIm9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLAotICAgICAgIm9wZW4ocGF0aFssIGZsYWdbLCBtb2RlXV0pIC0+IG1hcHBpbmdcbiIKLSAgICAgICJSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuIn0sCisgICAgREJNT1BFTl9NRVRIT0RERUYKICAgICB7IDAsIDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCmluZGV4IGY0NTg5M2YuLmIzYjY5NzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKKysrIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwpAQCAtMSw2MyArMSwyMiBAQAotLyoKLSAqIEVsZW1lbnRUcmVlCi0gKiAkSWQ6IF9lbGVtZW50dHJlZS5jIDM0NzMgMjAwOS0wMS0xMSAyMjo1Mzo1NVogZnJlZHJpayAkCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisgKiBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KICAqCi0gKiBlbGVtZW50dHJlZSBhY2NlbGVyYXRvcgotICoKLSAqIEhpc3Rvcnk6Ci0gKiAxOTk5LTA2LTIwIGZsICBjcmVhdGVkIChhcyBwYXJ0IG9mIHNnbWxvcCkKLSAqIDIwMDEtMDUtMjkgZmwgIGVmZmRvbSBlZGl0aW9uCi0gKiAyMDAzLTAyLTI3IGZsICBlbGVtZW50dHJlZSBlZGl0aW9uIChhbHBoYSkKLSAqIDIwMDQtMDYtMDMgZmwgIHVwZGF0ZXMgZm9yIGVsZW1lbnR0cmVlIDEuMgotICogMjAwNS0wMS0wNSBmbCAgbWFqb3Igb3B0aW1pemF0aW9uIGVmZm9ydAotICogMjAwNS0wMS0xMSBmbCAgZmlyc3QgcHVibGljIHJlbGVhc2UgKGNFbGVtZW50VHJlZSAwLjgpCi0gKiAyMDA1LTAxLTEyIGZsICBzcGxpdCBlbGVtZW50IG9iamVjdCBpbnRvIGJhc2UgYW5kIGV4dHJhcwotICogMjAwNS0wMS0xMyBmbCAgdXNlIHRhZ2dlZCBwb2ludGVycyBmb3IgdGFpbC90ZXh0IChjRWxlbWVudFRyZWUgMC45KQotICogMjAwNS0wMS0xNyBmbCAgYWRkZWQgdHJlZWJ1aWxkZXIgY2xvc2UgbWV0aG9kCi0gKiAyMDA1LTAxLTE3IGZsICBmaXhlZCBjcmFzaCBpbiBnZXRjaGlsZHJlbgotICogMjAwNS0wMS0xOCBmbCAgcmVtb3ZlZCBvYnNlcnZlciBhcGksIGFkZGVkIGl0ZXJwYXJzZSAoY0VsZW1lbnRUcmVlIDAuOS4zKQotICogMjAwNS0wMS0yMyBmbCAgcmV2aXNlZCBpdGVycGFyc2UgYXBpOyBhZGRlZCBuYW1lc3BhY2UgZXZlbnQgc3VwcG9ydCAoMC45LjgpCi0gKiAyMDA1LTAxLTI2IGZsICBhZGRlZCBWRVJTSU9OIG1vZHVsZSBwcm9wZXJ0eSAoY0VsZW1lbnRUcmVlIDEuMCkKLSAqIDIwMDUtMDEtMjggZmwgIGFkZGVkIHJlbW92ZSBtZXRob2QgKDEuMC4xKQotICogMjAwNS0wMy0wMSBmbCAgYWRkZWQgaXNlbGVtZW50IGZ1bmN0aW9uOyBmaXhlZCBtYWtlZWxlbWVudCBhbGlhc2luZyAoMS4wLjIpCi0gKiAyMDA1LTAzLTEzIGZsICBleHBvcnQgQ29tbWVudCBhbmQgUHJvY2Vzc2luZ0luc3RydWN0aW9uL1BJIGhlbHBlcnMKLSAqIDIwMDUtMDMtMjYgZmwgIGFkZGVkIENvbW1lbnQgYW5kIFBJIHN1cHBvcnQgdG8gWE1MUGFyc2VyCi0gKiAyMDA1LTAzLTI3IGZsICBldmVudCBvcHRpbWl6YXRpb25zOyBjb21wbGFpbiBhYm91dCBib2d1cyBldmVudHMKLSAqIDIwMDUtMDgtMDggZmwgIGZpeGVkIHJlYWQgZXJyb3IgaGFuZGxpbmcgaW4gcGFyc2UKLSAqIDIwMDUtMDgtMTEgZmwgIGFkZGVkIHJ1bnRpbWUgdGVzdCBmb3IgY29weSB3b3JrYXJvdW5kICgxLjAuMykKLSAqIDIwMDUtMTItMTMgZmwgIGFkZGVkIGV4cGF0X2NhcGkgc3VwcG9ydCAoZm9yIHhtbC5ldHJlZSkgKDEuMC40KQotICogMjAwNS0xMi0xNiBmbCAgYWRkZWQgc3VwcG9ydCBmb3Igbm9uLXN0YW5kYXJkIGVuY29kaW5ncwotICogMjAwNi0wMy0wOCBmbCAgZml4ZWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIG51bGwtcmVmcyBhbmQgbGVha3MKLSAqIDIwMDYtMDMtMTIgZmwgIG1lcmdlIGluIDIuNSBzc2l6ZV90IGNoYW5nZXMKLSAqIDIwMDctMDgtMjUgZmwgIGNhbGwgY3VzdG9tIGJ1aWxkZXIncyBjbG9zZSBtZXRob2QgZnJvbSBYTUxQYXJzZXIKLSAqIDIwMDctMDgtMzEgZmwgIGFkZGVkIGl0ZXIsIGV4dGVuZCBmcm9tIEVUIDEuMwotICogMjAwNy0wOS0wMSBmbCAgZml4ZWQgUGFyc2VFcnJvciBleGNlcHRpb24sIHNldHNsaWNlIHNvdXJjZSB0eXBlLCBldGMKLSAqIDIwMDctMDktMDMgZmwgIGZpeGVkIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluc2VydCBpbmRleGVzCi0gKiAyMDA3LTA5LTA0IGZsICBhZGRlZCBpdGVydGV4dCBmcm9tIEVUIDEuMwotICogMjAwNy0wOS0wNiBmbCAgYWRkZWQgcG9zaXRpb24gYXR0cmlidXRlIHRvIFBhcnNlRXJyb3IgZXhjZXB0aW9uCi0gKiAyMDA4LTA2LTA2IGZsICBkZWxheSBlcnJvciByZXBvcnRpbmcgaW4gaXRlcnBhcnNlIChmcm9tIEhydm9qZSBOaWtzaWMpCi0gKgorICogX2VsZW1lbnR0cmVlIC0gQyBhY2NlbGVyYXRvciBmb3IgeG1sLmV0cmVlLkVsZW1lbnRUcmVlCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSBieSBGcmVkcmlrIEx1bmRoLgogICoKICAqIGluZm9AcHl0aG9ud2FyZS5jb20KICAqIGh0dHA6Ly93d3cucHl0aG9ud2FyZS5jb20KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuICovCi0vKiBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4gKi8KLQogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jZGVmaW5lIFZFUlNJT04gIjEuMC42IgotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY29uZmlndXJhdGlvbiAqLwogCi0vKiBMZWF2ZSBkZWZpbmVkIHRvIGluY2x1ZGUgdGhlIGV4cGF0LWJhc2VkIFhNTFBhcnNlciB0eXBlICovCi0jZGVmaW5lIFVTRV9FWFBBVAotCiAvKiBBbiBlbGVtZW50IGNhbiBob2xkIHRoaXMgbWFueSBjaGlsZHJlbiB3aXRob3V0IGV4dHJhIG1lbW9yeQogICAgYWxsb2NhdGlvbnMuICovCiAjZGVmaW5lIFNUQVRJQ19DSElMRFJFTiA0CkBAIC0xMTksMTAgKzc4LDUxIEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0IFhNTFBhcnNlcl9UeXBlOwogCiAKLS8qIGdsdWUgZnVuY3Rpb25zIChzZWUgdGhlIGluaXQgZnVuY3Rpb24gZm9yIGRldGFpbHMpICovCi1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqOwotc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9kZWVwY29weV9vYmo7Ci1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnRwYXRoX29iajsKKy8qIFBlci1tb2R1bGUgc3RhdGU7IFBFUCAzMTIxICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3QgKnBhcnNlZXJyb3Jfb2JqOworICAgIFB5T2JqZWN0ICpkZWVwY29weV9vYmo7CisgICAgUHlPYmplY3QgKmVsZW1lbnRwYXRoX29iajsKK30gZWxlbWVudHRyZWVzdGF0ZTsKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBlbGVtZW50dHJlZW1vZHVsZTsKKworLyogR2l2ZW4gYSBtb2R1bGUgb2JqZWN0IChhc3N1bWVkIHRvIGJlIF9lbGVtZW50dHJlZSksIGdldCBpdHMgcGVyLW1vZHVsZQorICogc3RhdGUuCisgKi8KKyNkZWZpbmUgRVRfU1RBVEUobW9kKSAoKGVsZW1lbnR0cmVlc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobW9kKSkKKworLyogRmluZCB0aGUgbW9kdWxlIGluc3RhbmNlIGltcG9ydGVkIGluIHRoZSBjdXJyZW50bHkgcnVubmluZyBzdWItaW50ZXJwcmV0ZXIKKyAqIGFuZCBnZXQgaXRzIHN0YXRlLgorICovCisjZGVmaW5lIEVUX1NUQVRFX0dMT0JBTCBcCisgICAgKChlbGVtZW50dHJlZXN0YXRlICopIFB5TW9kdWxlX0dldFN0YXRlKFB5U3RhdGVfRmluZE1vZHVsZSgmZWxlbWVudHRyZWVtb2R1bGUpKSkKKworc3RhdGljIGludAorZWxlbWVudHRyZWVfY2xlYXIoUHlPYmplY3QgKm0pCit7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURShtKTsKKyAgICBQeV9DTEVBUihzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5X0NMRUFSKHN0LT5kZWVwY29weV9vYmopOworICAgIFB5X0NMRUFSKHN0LT5lbGVtZW50cGF0aF9vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitlbGVtZW50dHJlZV90cmF2ZXJzZShQeU9iamVjdCAqbSwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCit7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURShtKTsKKyAgICBQeV9WSVNJVChzdC0+cGFyc2VlcnJvcl9vYmopOworICAgIFB5X1ZJU0lUKHN0LT5kZWVwY29weV9vYmopOworICAgIFB5X1ZJU0lUKHN0LT5lbGVtZW50cGF0aF9vYmopOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZWxlbWVudHRyZWVfZnJlZSh2b2lkICptKQoreworICAgIGVsZW1lbnR0cmVlX2NsZWFyKChQeU9iamVjdCAqKW0pOworfQogCiAvKiBoZWxwZXJzICovCiAKQEAgLTEzMCwxMSArMTMwLDExIEBACiBkZWVwY29weShQeU9iamVjdCogb2JqZWN0LCBQeU9iamVjdCogbWVtbykKIHsKICAgICAvKiBkbyBhIGRlZXAgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICovCi0KICAgICBQeU9iamVjdCogYXJnczsKICAgICBQeU9iamVjdCogcmVzdWx0OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCi0gICAgaWYgKCFlbGVtZW50dHJlZV9kZWVwY29weV9vYmopIHsKKyAgICBpZiAoIXN0LT5kZWVwY29weV9vYmopIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgImRlZXBjb3B5IGhlbHBlciBub3QgZm91bmQiCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDIsIG9iamVjdCwgbWVtbyk7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaiwgYXJncyk7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChzdC0+ZGVlcGNvcHlfb2JqLCBhcmdzKTsKICAgICBQeV9ERUNSRUYoYXJncyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIyOSw4ICsyMjksMTAgQEAKIGNyZWF0ZV9leHRyYShFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXR0cmliKQogewogICAgIHNlbGYtPmV4dHJhID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihFbGVtZW50T2JqZWN0RXh0cmEpKTsKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQorICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmICghYXR0cmliKQogICAgICAgICBhdHRyaWIgPSBQeV9Ob25lOwpAQCAtMjgzLDEzICsyODUsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzZWxmLT5leHRyYSA9IE5VTEw7CiAKLSAgICBpZiAoYXR0cmliICE9IFB5X05vbmUgJiYgIWlzX2VtcHR5X2RpY3QoYXR0cmliKSkgewotICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIGF0dHJpYikgPCAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdF9EZWwoc2VsZik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQogICAgIFB5X0lOQ1JFRih0YWcpOwogICAgIHNlbGYtPnRhZyA9IHRhZzsKIApAQCAtMzAzLDYgKzI5OCwxNCBAQAogCiAgICAgQUxMT0Moc2l6ZW9mKEVsZW1lbnRPYmplY3QpLCAiY3JlYXRlIGVsZW1lbnQiKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhzZWxmKTsKKworICAgIGlmIChhdHRyaWIgIT0gUHlfTm9uZSAmJiAhaXNfZW1wdHlfZGljdChhdHRyaWIpKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgYXR0cmliKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIChQeU9iamVjdCopIHNlbGY7CiB9CiAKQEAgLTM1OCw2ICszNjEsNyBAQAogCiAgICAgUHlfREVDUkVGKGF0dHJpYl9zdHIpOwogCisgICAgLyogYXR0cmliIGNhbiBiZSBOVUxMIGlmIFB5RGljdF9OZXcgZmFpbGVkICovCiAgICAgaWYgKGF0dHJpYikKICAgICAgICAgaWYgKFB5RGljdF9VcGRhdGUoYXR0cmliLCBrd2RzKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQzMyw4ICs0MzcsMTAgQEAKICAgICAvKiBtYWtlIHN1cmUgc2VsZi0+Y2hpbGRyZW4gY2FuIGhvbGQgdGhlIGdpdmVuIG51bWJlciBvZiBleHRyYQogICAgICAgIGVsZW1lbnRzLiAgc2V0IGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIGlmIGFsbG9jYXRpb24gZmFpbGVkICovCiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBzaXplID0gc2VsZi0+ZXh0cmEtPmxlbmd0aCArIGV4dHJhOwogCkBAIC01NjEsOCArNTY3LDkgQEAKICAgICBQeU9iamVjdCogYXR0cmliID0gTlVMTDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hT3xPITpTdWJFbGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJkVsZW1lbnRfVHlwZSwgJnBhcmVudCwgJnRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RGljdF9UeXBlLCAmYXR0cmliKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RGljdF9UeXBlLCAmYXR0cmliKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoYXR0cmliKSB7CiAgICAgICAgIC8qIGF0dHJpYiBwYXNzZWQgYXMgcG9zaXRpb25hbCBhcmcgKi8KQEAgLTU4Niw4ICs1OTMsOSBAQAogICAgIH0KIAogICAgIGVsZW0gPSBjcmVhdGVfbmV3X2VsZW1lbnQodGFnLCBhdHRyaWIpOwotCiAgICAgUHlfREVDUkVGKGF0dHJpYik7CisgICAgaWYgKGVsZW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoZWxlbWVudF9hZGRfc3ViZWxlbWVudChwYXJlbnQsIGVsZW0pIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CkBAIC02NDUsNyArNjUzLDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIG1ldGhvZHMgKGluIGFscGhhYmV0aWNhbCBvcmRlcikgKi8KIAogc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9hcHBlbmQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC02ODksOCArNjk2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlbGVtZW50ID0gKEVsZW1lbnRPYmplY3QqKSBjcmVhdGVfbmV3X2VsZW1lbnQoCi0gICAgICAgIHNlbGYtPnRhZywgKHNlbGYtPmV4dHJhKSA/IHNlbGYtPmV4dHJhLT5hdHRyaWIgOiBQeV9Ob25lCi0gICAgICAgICk7CisgICAgICAgIHNlbGYtPnRhZywgKHNlbGYtPmV4dHJhKSA/IHNlbGYtPmV4dHJhLT5hdHRyaWIgOiBQeV9Ob25lKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC03MDMsNyArNzA5LDYgQEAKICAgICBQeV9JTkNSRUYoSk9JTl9PQkooZWxlbWVudC0+dGFpbCkpOwogCiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7Ci0KICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKGVsZW1lbnQsIHNlbGYtPmV4dHJhLT5sZW5ndGgpIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MTUsNyArNzIwLDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmV4dHJhLT5sZW5ndGggPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwotCiAgICAgfQogCiAgICAgcmV0dXJuIChQeU9iamVjdCopIGVsZW1lbnQ7CkBAIC03NzIsNyArNzc2LDYgQEAKICAgICBlbGVtZW50LT50YWlsID0gSk9JTl9TRVQodGFpbCwgSk9JTl9HRVQoc2VsZi0+dGFpbCkpOwogCiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7Ci0KICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKGVsZW1lbnQsIHNlbGYtPmV4dHJhLT5sZW5ndGgpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTc4Niw3ICs3ODksNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+ZXh0cmEtPmxlbmd0aCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0KICAgICB9CiAKICAgICAvKiBhZGQgb2JqZWN0IHRvIG1lbW8gZGljdGlvbmFyeSAoc28gZGVlcGNvcHkgd29uJ3QgdmlzaXQgaXQgYWdhaW4pICovCkBAIC0xMDc5LDYgKzEwODEsNyBAQAogICAgIFB5T2JqZWN0KiB0YWc7CiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmZpbmQiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKQpAQCAtMTA4Nyw3ICsxMDkwLDcgQEAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGZpbmQpOwogICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKICAgICB9CiAKQEAgLTExMTUsNiArMTExOCw3IEBACiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIF9QeV9JREVOVElGSUVSKGZpbmR0ZXh0KTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAiZGVmYXVsdCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpmaW5kdGV4dCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmZGVmYXVsdF92YWx1ZSwgJm5hbWVzcGFjZXMpKQpAQCAtMTEyMiw3ICsxMTI2LDcgQEAKIAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kdGV4dCwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKKyAgICAgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHRhZywgZGVmYXVsdF92YWx1ZSwgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKIAogICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKQEAgLTExMzIsOCArMTEzNiw4IEBACiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKSB7CiAgICAgICAgIEVsZW1lbnRPYmplY3QqIGl0ZW0gPSAoRWxlbWVudE9iamVjdCopIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKEVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSAmJiAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkpIHsKLQorICAgICAgICBpZiAoRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pICYmCisgICAgICAgICAgICAoUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkpIHsKICAgICAgICAgICAgIFB5T2JqZWN0KiB0ZXh0ID0gZWxlbWVudF9nZXRfdGV4dChpdGVtKTsKICAgICAgICAgICAgIGlmICh0ZXh0ID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CkBAIC0xMTU0LDYgKzExNTgsNyBAQAogICAgIFB5T2JqZWN0KiB0YWc7CiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOmZpbmRhbGwiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKQpAQCAtMTE2Miw3ICsxMTY3LDcgQEAKICAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGZpbmRhbGwpOwogICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZGFsbCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZGFsbCwgIk9PTyIsIHNlbGYsIHRhZywgbmFtZXNwYWNlcwogICAgICAgICAgICAgKTsKICAgICB9CiAKQEAgLTExOTQsMTQgKzExOTksMTUgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoaXRlcmZpbmQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJuYW1lc3BhY2VzIiwgMH07CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPOml0ZXJmaW5kIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZuYW1lc3BhY2VzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgIGVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKLSAgICAgICAgKTsKKyAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfaXRlcmZpbmQsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0xMzEyLDggKzEzMTgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJkVsZW1lbnRfVHlwZSwgJmVsZW1lbnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgaWYgKGluZGV4IDwgMCkgewogICAgICAgICBpbmRleCArPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwpAQCAtMTQ1NCw4ICsxNDYyLDEwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpzZXQiLCAma2V5LCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgYXR0cmliID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwogICAgIGlmICghYXR0cmliKQpAQCAtMTU3MCw4ICsxNTgwLDEwIEBACiAgICAgICAgIFB5T2JqZWN0KiByZWN5Y2xlID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QqIHNlcSA9IE5VTEw7CiAKLSAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKLSAgICAgICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKICAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sCiAgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCwKQEAgLTE3ODYsNyArMTc5OCw3IEBACiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRleHQiKSA9PSAwKSB7CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RleHQoc2VsZik7Ci0gICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICBQeV9YSU5DUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQogCkBAIC0xODAxLDggKzE4MTMsMTAgQEAKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGFpbChzZWxmKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXMgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CiAgICAgfQogCkBAIC0xODE5LDEwICsxODMzLDEwIEBACiAgICAgY2hhciAqbmFtZSA9ICIiOwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpCiAgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWVvYmopOwotCi0gICAgaWYgKG5hbWUgPT0gTlVMTCkgeworICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgeworCisgICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+dGFnKTsKICAgICAgICAgc2VsZi0+dGFnID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWcpOwpAQCAtMTgzNSw4ICsxODQ5LDEwIEBACiAgICAgICAgIHNlbGYtPnRhaWwgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRhaWwpOwogICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJhdHRyaWIiKSA9PSAwKSB7Ci0gICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+ZXh0cmEtPmF0dHJpYik7CiAgICAgICAgIHNlbGYtPmV4dHJhLT5hdHRyaWIgPSB2YWx1ZTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwpAQCAtMjE1MiwxNCArMjE2OCw2IEBACiAgICAgaXQgPSBQeU9iamVjdF9HQ19OZXcoRWxlbWVudEl0ZXJPYmplY3QsICZFbGVtZW50SXRlcl9UeXBlKTsKICAgICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIShpdC0+cGFyZW50X3N0YWNrID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQYXJlbnRMb2NhdG9yKSkpKSB7Ci0gICAgICAgIFB5T2JqZWN0X0dDX0RlbChpdCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCA9IE5VTEw7Ci0gICAgaXQtPnBhcmVudF9zdGFjay0+Y2hpbGRfaW5kZXggPSAwOwotICAgIGl0LT5wYXJlbnRfc3RhY2stPm5leHQgPSBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh0YWcpKQogICAgICAgICBzdGFyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIioiKTsKQEAgLTIxNjgsMTcgKzIxNzYsMjcgQEAKIAogICAgIGlmIChzdGFyICYmIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0YWcsIHN0YXIsIFB5X0VRKSA9PSAxKQogICAgICAgICB0YWcgPSBQeV9Ob25lOwotCiAgICAgUHlfWERFQ1JFRihzdGFyKTsKKworICAgIFB5X0lOQ1JFRih0YWcpOwogICAgIGl0LT5zb3VnaHRfdGFnID0gdGFnOwogICAgIGl0LT5yb290X2RvbmUgPSAwOwogICAgIGl0LT5nZXR0ZXh0ID0gZ2V0dGV4dDsKKyAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgaXQtPnJvb3RfZWxlbWVudCA9IHNlbGY7CiAKLSAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgUHlfSU5DUkVGKHRhZyk7Ci0KICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CisKKyAgICBpdC0+cGFyZW50X3N0YWNrID0gUHlPYmplY3RfTWFsbG9jKHNpemVvZihQYXJlbnRMb2NhdG9yKSk7CisgICAgaWYgKGl0LT5wYXJlbnRfc3RhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoaXQpOworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaXQtPnBhcmVudF9zdGFjay0+cGFyZW50ID0gTlVMTDsKKyAgICBpdC0+cGFyZW50X3N0YWNrLT5jaGlsZF9pbmRleCA9IDA7CisgICAgaXQtPnBhcmVudF9zdGFjay0+bmV4dCA9IE5VTEw7CisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CiAKQEAgLTIzNzEsNiArMjM4OSw3IEBACiB7CiAgICAgUHlPYmplY3QqIG5vZGU7CiAgICAgUHlPYmplY3QqIHRoaXM7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKICAgICBpZiAoc2VsZi0+ZGF0YSkgewogICAgICAgICBpZiAoc2VsZi0+dGhpcyA9PSBzZWxmLT5sYXN0KSB7CkBAIC0yNDAxLDcgKzI0MjAsNyBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZWxmLT5yb290KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosCisgICAgICAgICAgICAgICAgc3QtPnBhcnNlZXJyb3Jfb2JqLAogICAgICAgICAgICAgICAgICJtdWx0aXBsZSBlbGVtZW50cyBvbiB0b3AgbGV2ZWwiCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0yNjg4LDEwICsyNzA3LDEyIEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogdGhlIGV4cGF0IGludGVyZmFjZSAqLwogCi0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCi0KICNpbmNsdWRlICJleHBhdC5oIgogI2luY2x1ZGUgInB5ZXhwYXQuaCIKKworLyogVGhlIFB5RXhwYXRfQ0FQSSBzdHJ1Y3R1cmUgaXMgYW4gaW1tdXRhYmxlIGRpc3BhdGNoIHRhYmxlLCBzbyBpdCBjYW4gYmUKKyAqIGNhY2hlZCBnbG9iYWxseSB3aXRob3V0IGJlaW5nIGluIHBlci1tb2R1bGUgc3RhdGUuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlFeHBhdF9DQVBJICpleHBhdF9jYXBpOwogI2RlZmluZSBFWFBBVChmdW5jKSAoZXhwYXRfY2FwaS0+ZnVuYykKIApAQCAtMjc1OCw2ICsyNzc5LDEwIEBACiAgICAgICAgIGlmIChpICE9IHNpemUpIHsKICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gdW5pdmVyc2FsIG5hbWUgKi8KICAgICAgICAgICAgIHRhZyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSsxKTsKKyAgICAgICAgICAgIGlmICh0YWcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHRhZyk7CiAgICAgICAgICAgICBwWzBdID0gJ3snOwogICAgICAgICAgICAgbWVtY3B5KHArMSwgc3RyaW5nLCBzaXplKTsKQEAgLTI3OTcsNiArMjgyMiw3IEBACiBleHBhdF9zZXRfZXJyb3IoZW51bSBYTUxfRXJyb3IgZXJyb3JfY29kZSwgaW50IGxpbmUsIGludCBjb2x1bW4sIGNoYXIgKm1lc3NhZ2UpCiB7CiAgICAgUHlPYmplY3QgKmVycm1zZywgKmVycm9yLCAqcG9zaXRpb24sICpjb2RlOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgZXJybXNnID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzOiBsaW5lICVkLCBjb2x1bW4gJWQiLAogICAgICAgICAgICAgICAgIG1lc3NhZ2UgPyBtZXNzYWdlIDogRVhQQVQoRXJyb3JTdHJpbmcpKGVycm9yX2NvZGUpLApAQCAtMjgwNCw3ICsyODMwLDcgQEAKICAgICBpZiAoZXJybXNnID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLCAiTyIsIGVycm1zZyk7CisgICAgZXJyb3IgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc3QtPnBhcnNlZXJyb3Jfb2JqLCAiTyIsIGVycm1zZyk7CiAgICAgUHlfREVDUkVGKGVycm1zZyk7CiAgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzNCw3ICsyODYwLDcgQEAKICAgICB9CiAgICAgUHlfREVDUkVGKHBvc2l0aW9uKTsKIAotICAgIFB5RXJyX1NldE9iamVjdChlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgZXJyb3IpOworICAgIFB5RXJyX1NldE9iamVjdChzdC0+cGFyc2VlcnJvcl9vYmosIGVycm9yKTsKICAgICBQeV9ERUNSRUYoZXJyb3IpOwogfQogCkBAIC0yODUyLDYgKzI4NzgsOSBAQAogICAgIGlmIChkYXRhX2xlbiA8IDIgfHwgZGF0YV9pblswXSAhPSAnJicpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBrZXkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luICsgMSwgZGF0YV9sZW4gLSAyLCAic3RyaWN0Iik7CiAgICAgaWYgKCFrZXkpCiAgICAgICAgIHJldHVybjsKQEAgLTI4OTIsNiArMjkyMSw5IEBACiAgICAgUHlPYmplY3QqIGF0dHJpYjsKICAgICBpbnQgb2s7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLyogdGFnIG5hbWUgKi8KICAgICB0YWcgPSBtYWtldW5pdmVyc2FsKHNlbGYsIHRhZ19pbik7CiAgICAgaWYgKCF0YWcpCkBAIC0yOTUwLDYgKzI5ODIsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZGF0YSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGRhdGFfaW4sIGRhdGFfbGVuLCAic3RyaWN0Iik7CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47IC8qIHBhcnNlciB3aWxsIGxvb2sgZm9yIGVycm9ycyAqLwpAQCAtMjk3Myw2ICszMDA4LDkgQEAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiByZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpCiAgICAgICAgIC8qIHNob3J0Y3V0ICovCiAgICAgICAgIC8qIHRoZSBzdGFuZGFyZCB0cmVlIGJ1aWxkZXIgZG9lc24ndCBsb29rIGF0IHRoZSBlbmQgdGFnICovCkBAIC0yOTk3LDYgKzMwMzUsOSBAQAogICAgIFB5T2JqZWN0KiBzcHJlZml4ID0gTlVMTDsKICAgICBQeU9iamVjdCogc3VyaSA9IE5VTEw7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHVyaSkKICAgICAgICAgc3VyaSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHVyaSwgc3RybGVuKHVyaSksICJzdHJpY3QiKTsKICAgICBlbHNlCkBAIC0zMDI0LDYgKzMwNjUsOSBAQAogc3RhdGljIHZvaWQKIGV4cGF0X2VuZF9uc19oYW5kbGVyKFhNTFBhcnNlck9iamVjdCogc2VsZiwgY29uc3QgWE1MX0NoYXIqIHByZWZpeF9pbikKIHsKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdHJlZWJ1aWxkZXJfaGFuZGxlX25hbWVzcGFjZSgKICAgICAgICAgKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0LCAwLCBOVUxMLCBOVUxMCiAgICAgICAgICk7CkBAIC0zMDM1LDYgKzMwNzksOSBAQAogICAgIFB5T2JqZWN0KiBjb21tZW50OwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmhhbmRsZV9jb21tZW50KSB7CiAgICAgICAgIGNvbW1lbnQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChjb21tZW50X2luLCBzdHJsZW4oY29tbWVudF9pbiksICJzdHJpY3QiKTsKICAgICAgICAgaWYgKGNvbW1lbnQpIHsKQEAgLTMwNTcsNiArMzEwNCw5IEBACiAgICAgUHlPYmplY3QgKnBhcnNlcl9kb2N0eXBlID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBkb2N0eXBlX25hbWVfb2JqID0gbWFrZXVuaXZlcnNhbChzZWxmLCBkb2N0eXBlX25hbWUpOwogICAgIGlmICghZG9jdHlwZV9uYW1lX29iaikKICAgICAgICAgcmV0dXJuOwpAQCAtMzEyNSw2ICszMTc1LDkgQEAKICAgICBQeU9iamVjdCogZGF0YTsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChzZWxmLT5oYW5kbGVfcGkpIHsKICAgICAgICAgdGFyZ2V0ID0gUHlVbmljb2RlX0RlY29kZVVURjgodGFyZ2V0X2luLCBzdHJsZW4odGFyZ2V0X2luKSwgInN0cmljdCIpOwogICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiwgc3RybGVuKGRhdGFfaW4pLCAic3RyaWN0Iik7CkBAIC0zMjk3LDYgKzMzNTAsNyBAQAogewogICAgIGludCBvazsKIAorICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CiAgICAgb2sgPSBFWFBBVChQYXJzZSkoc2VsZi0+cGFyc2VyLCBkYXRhLCBkYXRhX2xlbiwgZmluYWwpOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC0zMzMxLDExICszMzg1LDE0IEBACiAgICAgaWYgKFRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgewogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgcmV0dXJuIHRyZWVidWlsZGVyX2RvbmUoKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0KTsKLSAgICB9IGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VsZi0+aGFuZGxlX2Nsb3NlKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPmhhbmRsZV9jbG9zZSwgIiIpOwotICAgIH0gZWxzZQorICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTMzNzMsMTAgKzM0MzAsOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCi14bWxwYXJzZXJfcGFyc2UoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3htbHBhcnNlcl9wYXJzZV93aG9sZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewotICAgIC8qIChpbnRlcm5hbCkgcGFyc2UgdW50aWwgZW5kIG9mIGlucHV0IHN0cmVhbSAqLwotCisgICAgLyogKGludGVybmFsKSBwYXJzZSB0aGUgd2hvbGUgaW5wdXQsIHVudGlsIGVuZCBvZiBzdHJlYW0gKi8KICAgICBQeU9iamVjdCogcmVhZGVyOwogICAgIFB5T2JqZWN0KiBidWZmZXI7CiAgICAgUHlPYmplY3QqIHRlbXA7CkBAIC0zNDAzLDcgKzM0NTksNyBAQAogCiAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChidWZmZXIpKSB7CiAgICAgICAgICAgICAvKiBBIHVuaWNvZGUgb2JqZWN0IGlzIGVuY29kZWQgaW50byBieXRlcyB1c2luZyBVVEYtOCAqLwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfU0laRShidWZmZXIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChidWZmZXIpID09IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYnVmZmVyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM0NTcsMTQgKzM1MTMsMTQgQEAKIHhtbHBhcnNlcl9zZXRldmVudHMoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICAvKiBhY3RpdmF0ZSBlbGVtZW50IGV2ZW50IHJlcG9ydGluZyAqLworICAgIFB5X3NzaXplX3QgaSwgc2VxbGVuOworICAgIFRyZWVCdWlsZGVyT2JqZWN0ICp0YXJnZXQ7CiAKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgVHJlZUJ1aWxkZXJPYmplY3QqIHRhcmdldDsKLQotICAgIFB5T2JqZWN0KiBldmVudHM7IC8qIGV2ZW50IGNvbGxlY3RvciAqLwotICAgIFB5T2JqZWN0KiBldmVudF9zZXQgPSBQeV9Ob25lOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8Tzpfc2V0ZXZlbnRzIiwgICZQeUxpc3RfVHlwZSwgJmV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50X3NldCkpCisgICAgUHlPYmplY3QgKmV2ZW50c19xdWV1ZTsKKyAgICBQeU9iamVjdCAqZXZlbnRzX3RvX3JlcG9ydCA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmV2ZW50c19zZXE7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIXxPOl9zZXRldmVudHMiLCAgJlB5TGlzdF9UeXBlLCAmZXZlbnRzX3F1ZXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnRzX3RvX3JlcG9ydCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKQEAgLTM0NzgsOSArMzUzNCw5IEBACiAKICAgICB0YXJnZXQgPSAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQ7CiAKLSAgICBQeV9JTkNSRUYoZXZlbnRzKTsKKyAgICBQeV9JTkNSRUYoZXZlbnRzX3F1ZXVlKTsKICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZXZlbnRzKTsKLSAgICB0YXJnZXQtPmV2ZW50cyA9IGV2ZW50czsKKyAgICB0YXJnZXQtPmV2ZW50cyA9IGV2ZW50c19xdWV1ZTsKIAogICAgIC8qIGNsZWFyIG91dCBleGlzdGluZyBldmVudHMgKi8KICAgICBQeV9DTEVBUih0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaik7CkBAIC0zNDg4LDc1ICszNTQ0LDcxIEBACiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmopOwogICAgIFB5X0NMRUFSKHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaik7CiAKLSAgICBpZiAoZXZlbnRfc2V0ID09IFB5X05vbmUpIHsKKyAgICBpZiAoZXZlbnRzX3RvX3JlcG9ydCA9PSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIGRlZmF1bHQgaXMgImVuZCIgb25seSAqLwogICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZW5kIik7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KIAotICAgIGlmICghUHlUdXBsZV9DaGVjayhldmVudF9zZXQpKSAvKiBGSVhNRTogaGFuZGxlIGFyYml0cmFyeSBzZXF1ZW5jZXMgKi8KLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIShldmVudHNfc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGV2ZW50c190b19yZXBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZlbnRzIG11c3QgYmUgYSBzZXF1ZW5jZSIpKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShldmVudF9zZXQpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QqIGl0ZW0gPSBQeVR1cGxlX0dFVF9JVEVNKGV2ZW50X3NldCwgaSk7Ci0gICAgICAgIGNoYXIqIGV2ZW50OwotICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICBldmVudCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoaXRlbSk7Ci0gICAgICAgICAgICBpZiAoZXZlbnQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9IGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2soaXRlbSkpCi0gICAgICAgICAgICBldmVudCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKGV2ZW50c19zZXEpOworICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICBQeU9iamVjdCAqZXZlbnRfbmFtZV9vYmogPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oZXZlbnRzX3NlcSwgaSk7CisgICAgICAgIGNoYXIgKmV2ZW50X25hbWUgPSBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGV2ZW50X25hbWVfb2JqKSkgeworICAgICAgICAgICAgZXZlbnRfbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZXZlbnRfbmFtZV9vYmopOworICAgICAgICB9IGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2soZXZlbnRfbmFtZV9vYmopKSB7CisgICAgICAgICAgICBldmVudF9uYW1lID0gUHlCeXRlc19BU19TVFJJTkcoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdHJjbXAoZXZlbnQsICJzdGFydCIpID09IDApIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKLSAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfZXZlbnRfb2JqID0gaXRlbTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJlbmQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisKKyAgICAgICAgaWYgKGV2ZW50X25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGV2ZW50c19zZXEpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGV2ZW50cyBzZXF1ZW5jZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJzdGFydCIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CisgICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAiZW5kIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5lbmRfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IGl0ZW07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAic3RhcnQtbnMiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgInN0YXJ0LW5zIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmogPSBpdGVtOworICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKICAgICAgICAgICAgIEVYUEFUKFNldE5hbWVzcGFjZURlY2xIYW5kbGVyKSgKICAgICAgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9zdGFydF9uc19oYW5kbGVyLAogICAgICAgICAgICAgICAgIChYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X2VuZF9uc19oYW5kbGVyCiAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnQsICJlbmQtbnMiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJlbmQtbnMiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOwogICAgICAgICAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmVuZF9uc19ldmVudF9vYmopOwotICAgICAgICAgICAgdGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqID0gaXRlbTsKKyAgICAgICAgICAgIHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaiA9IGV2ZW50X25hbWVfb2JqOwogICAgICAgICAgICAgRVhQQVQoU2V0TmFtZXNwYWNlRGVjbEhhbmRsZXIpKAogICAgICAgICAgICAgICAgIHNlbGYtPnBhcnNlciwKICAgICAgICAgICAgICAgICAoWE1MX1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X3N0YXJ0X25zX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9FbmROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfZW5kX25zX2hhbmRsZXIKICAgICAgICAgICAgICAgICApOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgInVua25vd24gZXZlbnQgJyVzJyIsIGV2ZW50Ci0gICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5rbm93biBldmVudCAnJXMnIiwgZXZlbnRfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KIAorICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKLQotICBlcnJvcjoKLSAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgIFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgImludmFsaWQgZXZlbnQgdHVwbGUiCi0gICAgICAgICk7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB4bWxwYXJzZXJfbWV0aG9kc1tdID0gewogICAgIHsiZmVlZCIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2ZlZWQsIE1FVEhfT30sCiAgICAgeyJjbG9zZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2Nsb3NlLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiX3BhcnNlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfcGFyc2UsIE1FVEhfVkFSQVJHU30sCisgICAgeyJfcGFyc2Vfd2hvbGUiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9wYXJzZV93aG9sZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Il9zZXRldmVudHMiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9zZXRldmVudHMsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJkb2N0eXBlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfZG9jdHlwZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7TlVMTCwgTlVMTH0KQEAgLTM2MjgsOCArMzY4MCw2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLwogfTsKIAotI2VuZGlmCi0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAvKiBweXRob24gbW9kdWxlIGludGVyZmFjZSAqLwogCkBAIC0zNjM5LDIyICszNjg5LDI5IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2VsZW1lbnR0cmVlbW9kdWxlID0gewotICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgICAgICJfZWxlbWVudHRyZWUiLAotICAgICAgICBOVUxMLAotICAgICAgICAtMSwKLSAgICAgICAgX2Z1bmN0aW9ucywKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgTlVMTAorc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBlbGVtZW50dHJlZW1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9lbGVtZW50dHJlZSIsCisgICAgTlVMTCwKKyAgICBzaXplb2YoZWxlbWVudHRyZWVzdGF0ZSksCisgICAgX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIGVsZW1lbnR0cmVlX3RyYXZlcnNlLAorICAgIGVsZW1lbnR0cmVlX2NsZWFyLAorICAgIGVsZW1lbnR0cmVlX2ZyZWUKIH07CiAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX2VsZW1lbnR0cmVlKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm0sICp0ZW1wOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0OworCisgICAgbSA9IFB5U3RhdGVfRmluZE1vZHVsZSgmZWxlbWVudHRyZWVtb2R1bGUpOworICAgIGlmIChtKSB7CisgICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQogCiAgICAgLyogSW5pdGlhbGl6ZSBvYmplY3QgdHlwZXMgKi8KICAgICBpZiAoUHlUeXBlX1JlYWR5KCZFbGVtZW50SXRlcl9UeXBlKSA8IDApCkBAIC0zNjYzLDIxICszNzIwLDIwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJkVsZW1lbnRfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFVTRV9FWFBBVCkKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZYTUxQYXJzZXJfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgogCi0gICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX2VsZW1lbnR0cmVlbW9kdWxlKTsKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZlbGVtZW50dHJlZW1vZHVsZSk7CiAgICAgaWYgKCFtKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdCA9IEVUX1NUQVRFKG0pOwogCiAgICAgaWYgKCEodGVtcCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29weSIpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiZGVlcGNvcHkiKTsKKyAgICBzdC0+ZGVlcGNvcHlfb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiZGVlcGNvcHkiKTsKICAgICBQeV9YREVDUkVGKHRlbXApOwogCi0gICAgaWYgKCEoZWxlbWVudHBhdGhfb2JqID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJ4bWwuZXRyZWUuRWxlbWVudFBhdGgiKSkpCisgICAgaWYgKCEoc3QtPmVsZW1lbnRwYXRoX29iaiA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgieG1sLmV0cmVlLkVsZW1lbnRQYXRoIikpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGxpbmsgYWdhaW5zdCBweWV4cGF0ICovCkBAIC0zNjk3LDExICszNzUzLDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqID0gUHlFcnJfTmV3RXhjZXB0aW9uKAorICAgIHN0LT5wYXJzZWVycm9yX29iaiA9IFB5RXJyX05ld0V4Y2VwdGlvbigKICAgICAgICAgInhtbC5ldHJlZS5FbGVtZW50VHJlZS5QYXJzZUVycm9yIiwgUHlFeGNfU3ludGF4RXJyb3IsIE5VTEwKICAgICAgICAgKTsKLSAgICBQeV9JTkNSRUYoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOwotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGFyc2VFcnJvciIsIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeV9JTkNSRUYoc3QtPnBhcnNlZXJyb3Jfb2JqKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBhcnNlRXJyb3IiLCBzdC0+cGFyc2VlcnJvcl9vYmopOwogCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZFbGVtZW50X1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiRWxlbWVudCIsIChQeU9iamVjdCAqKSZFbGVtZW50X1R5cGUpOwpAQCAtMzcwOSwxMCArMzc2NSw4IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZUcmVlQnVpbGRlcl9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRyZWVCdWlsZGVyIiwgKFB5T2JqZWN0ICopJlRyZWVCdWlsZGVyX1R5cGUpOwogCi0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZYTUxQYXJzZXJfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJYTUxQYXJzZXIiLCAoUHlPYmplY3QgKikmWE1MUGFyc2VyX1R5cGUpOwotI2VuZGlmCiAKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyBiL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwppbmRleCA4ZjA3YTg5Li41N2IxYWMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKKysrIGIvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCkBAIC0xNyw3ICsxNyw3IEBACiAgICBvZiBmcm96ZW4gbW9kdWxlcyBpbnN0ZWFkLCBsZWZ0IGRlbGliZXJhdGVseSBibGFuayBzbyBhcyB0byBhdm9pZAogICAgdW5pbnRlbnRpb25hbCBpbXBvcnQgb2YgYSBzdGFsZSB2ZXJzaW9uIG9mIF9mcm96ZW5faW1wb3J0bGliLiAqLwogCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0gewogICAgIHswLCAwLCAwfSAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjUsNyArMjUsNyBAQAogLyogT24gV2luZG93cywgdGhpcyBsaW5rcyB3aXRoIHRoZSByZWd1bGFyIHB5dGhvblhZLmRsbCwgc28gdGhpcyB2YXJpYWJsZSBjb21lcwogICAgZnJvbSBmcm96ZW4ub2JqLiBJbiB0aGUgTWFrZWZpbGUsIGZyb3plbi5vIGlzIG5vdCBsaW5rZWQgaW50byB0aGlzIGV4ZWN1dGFibGUsCiAgICBzbyB3ZSBkZWZpbmUgdGhlIHZhcmlhYmxlIGhlcmUuICovCi1zdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK2NvbnN0IHN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwogI2VuZGlmCiAKIGNvbnN0IGNoYXIgaGVhZGVyW10gPSAiLyogQXV0by1nZW5lcmF0ZWQgYnkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jICovIjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgaGVhZGVyKTsKLSAgICBmcHJpbnRmKG91dGZpbGUsICJ1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHtcbiIpOworICAgIGZwcmludGYob3V0ZmlsZSwgImNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0ge1xuIik7CiAgICAgZm9yIChuID0gMDsgbiA8IGRhdGFfc2l6ZTsgbiArPSAxNikgewogICAgICAgICBzaXplX3QgaSwgZW5kID0gUHlfTUlOKG4gKyAxNiwgZGF0YV9zaXplKTsKICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiICAgICIpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZ2RibW1vZHVsZS5jIGIvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCmluZGV4IDBiZDU5YzguLjIyOWUxNmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2dkYm1tb2R1bGUuYworKysgYi9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKQEAgLTc5LDcgKzc5LDcgQEAKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKLWRibV9kZWFsbG9jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHApCitkYm1fZGVhbGxvYyhkYm1vYmplY3QgKmRwKQogewogICAgIGlmIChkcC0+ZGlfZGJtKQogICAgICAgICBnZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtMTEyLDcgKzExMiw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc3Vic2NyaXB0KGRibW9iamVjdCAqZHAsIHJlZ2lzdGVyIFB5T2JqZWN0ICprZXkpCitkYm1fc3Vic2NyaXB0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0gZHJlYywga3JlYzsKQEAgLTIzMiw3ICsyMzIsNyBAQAogQ2xvc2VzIHRoZSBkYXRhYmFzZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9jbG9zZShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2Nsb3NlKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGdkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC0yNDcsOSArMjQ3LDkgQEAKIEdldCBhIGxpc3Qgb2YgYWxsIGtleXMgaW4gdGhlIGRhdGFiYXNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2tleXMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9rZXlzKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnYsICppdGVtOworICAgIFB5T2JqZWN0ICp2LCAqaXRlbTsKICAgICBkYXR1bSBrZXksIG5leHRrZXk7CiAgICAgaW50IGVycjsKIApAQCAtMzM3LDkgKzMzNyw5IEBACiByZXR1cm5zIHRoZSBzdGFydGluZyBrZXkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fZmlyc3RrZXkocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9maXJzdGtleShkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OworICAgIFB5T2JqZWN0ICp2OwogICAgIGRhdHVtIGtleTsKIAogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKQEAgLTM2Nyw5ICszNjcsOSBAQAogICAgICAgICAgIGsgPSBkYi5uZXh0a2V5KGspIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fbmV4dGtleShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKK2RibV9uZXh0a2V5KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OworICAgIFB5T2JqZWN0ICp2OwogICAgIGRhdHVtIGtleSwgbmV4dGtleTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyM6bmV4dGtleSIsICZrZXkuZHB0ciwgJmtleS5kc2l6ZSkpCkBAIC0zOTYsNyArMzk2LDcgQEAKIGtlcHQgYW5kIHJldXNlZCBhcyBuZXcgKGtleSx2YWx1ZSkgcGFpcnMgYXJlIGFkZGVkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX3Jlb3JnYW5pemUocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9yZW9yZ2FuaXplKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwogICAgIGVycm5vID0gMDsKQEAgLTQxNyw3ICs0MTcsNyBAQAogYW55IHVud3JpdHRlbiBkYXRhIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGRpc2suIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fc3luYyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX3N5bmMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CiAgICAgZ2RibV9zeW5jKGRwLT5kaV9kYm0pOwpAQCAtNDI1LDYgKzQyNSwyMCBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX19lbnRlcl9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2V4aXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOworICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX2Nsb3NlLCBOVUxMKTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIGRibV9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAoUHlDRnVuY3Rpb24pZGJtX2Nsb3NlLCAgIE1FVEhfTk9BUkdTLCBkYm1fY2xvc2VfX2RvY19ffSwKICAgICB7ImtleXMiLCAgICAgIChQeUNGdW5jdGlvbilkYm1fa2V5cywgICAgTUVUSF9OT0FSR1MsIGRibV9rZXlzX19kb2NfX30sCkBAIC00MzQsNiArNDQ4LDggQEAKICAgICB7InN5bmMiLCAgICAgIChQeUNGdW5jdGlvbilkYm1fc3luYywgICAgTUVUSF9OT0FSR1MsIGRibV9zeW5jX19kb2NfX30sCiAgICAgeyJnZXQiLCAgICAgICAoUHlDRnVuY3Rpb24pZGJtX2dldCwgICAgIE1FVEhfVkFSQVJHUywgZGJtX2dldF9fZG9jX199LAogICAgIHsic2V0ZGVmYXVsdCIsKFB5Q0Z1bmN0aW9uKWRibV9zZXRkZWZhdWx0LE1FVEhfVkFSQVJHUywgZGJtX3NldGRlZmF1bHRfX2RvY19ffSwKKyAgICB7Il9fZW50ZXJfXyIsIGRibV9fZW50ZXJfXywgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHsiX19leGl0X18iLCAgZGJtX19leGl0X18sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2dlc3RhbHQuYyBiL01vZHVsZXMvX2dlc3RhbHQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2QzMDY4My4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19nZXN0YWx0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLUNvcHlyaWdodCAxOTkxLTE5OTcgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0sCi1UaGUgTmV0aGVybGFuZHMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKLUNlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KLQotU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTwotVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQotRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLVdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLU9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTWFjaW50b3NoIEdlc3RhbHQgaW50ZXJmYWNlICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KLQotLyogQ29udmVydCBhIDQtY2hhciBzdHJpbmcgb2JqZWN0IGFyZ3VtZW50IHRvIGFuIE9TVHlwZSB2YWx1ZSAqLwotc3RhdGljIGludAotY29udmVydF90b19PU1R5cGUoUHlPYmplY3QgKnYsIE9TVHlwZSAqcHIpCi17Ci0gICAgdWludDMyX3QgdG1wOwotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHYpIHx8IFB5VW5pY29kZV9HZXRMZW5ndGgodikgIT0gNCkgewotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJPU1R5cGUgYXJnIG11c3QgYmUgc3RyaW5nIG9mIDQgY2hhcnMiKTsKLSAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgbWVtY3B5KChjaGFyICopJnRtcCwgX1B5VW5pY29kZV9Bc1N0cmluZyh2KSwgNCk7Ci0gICAgKnByID0gKE9TVHlwZSludG9obCh0bXApOwotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotZ2VzdGFsdF9nZXN0YWx0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBPU0VyciBpRXJyOwotICAgIE9TVHlwZSBzZWxlY3RvcjsKLSAgICBTSW50MzIgcmVzcG9uc2U7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJiIsIGNvbnZlcnRfdG9fT1NUeXBlLCAmc2VsZWN0b3IpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpRXJyID0gR2VzdGFsdChzZWxlY3RvciwgJnJlc3BvbnNlKTsKLSAgICBpZiAoaUVyciAhPSAwKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJub24temVybyBleGl0IGNvZGUhIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcocmVzcG9uc2UpOwotfQotCi1zdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIGdlc3RhbHRfbWV0aG9kc1tdID0gewotICAgIHsiZ2VzdGFsdCIsIGdlc3RhbHRfZ2VzdGFsdCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7TlVMTCwgTlVMTH0gLyogU2VudGluZWwgKi8KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZ2VzdGFsdG1vZHVsZSA9IHsKLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIl9nZXN0YWx0IiwKLSAgICBOVUxMLAotICAgIC0xLAotICAgIGdlc3RhbHRfbWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCi19OwotCi1QeU1PRElOSVRfRlVOQwotUHlJbml0X19nZXN0YWx0KHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmZ2VzdGFsdG1vZHVsZSk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwppbmRleCAzYWIxYzBjLi42YTJhOWFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCisrKyBiL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKQEAgLTE3LDM2ICsxNywxNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImhhc2hsaWIuaCIKIAotI2lmZGVmIFdJVEhfVEhSRUFECi0jaW5jbHVkZSAicHl0aHJlYWQuaCIKLSAgICAjZGVmaW5lIEVOVEVSX0hBU0hMSUIob2JqKSBcCi0gICAgICAgIGlmICgob2JqKS0+bG9jaykgeyBcCi0gICAgICAgICAgICBpZiAoIVB5VGhyZWFkX2FjcXVpcmVfbG9jaygob2JqKS0+bG9jaywgMCkpIHsgXAotICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgXAotICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jaygob2JqKS0+bG9jaywgMSk7IFwKLSAgICAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUyBcCi0gICAgICAgICAgICB9IFwKLSAgICAgICAgfQotICAgICNkZWZpbmUgTEVBVkVfSEFTSExJQihvYmopIFwKLSAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKLSAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jaygob2JqKS0+bG9jayk7IFwKLSAgICAgICAgfQotI2Vsc2UKLSAgICAjZGVmaW5lIEVOVEVSX0hBU0hMSUIob2JqKQotICAgICNkZWZpbmUgTEVBVkVfSEFTSExJQihvYmopCi0jZW5kaWYKIAogLyogRVZQIGlzIHRoZSBwcmVmZXJyZWQgaW50ZXJmYWNlIHRvIGhhc2hpbmcgaW4gT3BlblNTTCAqLwogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9obWFjLmg+CiAvKiBXZSB1c2UgdGhlIG9iamVjdCBpbnRlcmZhY2UgdG8gZGlzY292ZXIgd2hhdCBoYXNoZXMgT3BlblNTTCBzdXBwb3J0cy4gKi8KICNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KKyNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgogCiAjZGVmaW5lIE1VTkNIX1NJWkUgSU5UX01BWAogCi0vKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQotICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCi0jZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAotCiAjaWZuZGVmIEhBU0hfT0JKX0NPTlNUUlVDVE9SCiAjZGVmaW5lIEhBU0hfT0JKX0NPTlNUUlVDVE9SIDAKICNlbmRpZgpAQCAtNDg5LDYgKzQ2OSwyMjUgQEAKIH0KIAogCisKKyNpZiAoT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAwMDAwICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSE1BQykgXAorICAgICAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1NIQSkpCisKKyNkZWZpbmUgUFlfUEJLREYyX0hNQUMgMQorCisvKiBJbXByb3ZlZCBpbXBsZW1lbnRhdGlvbiBvZiBQS0NTNV9QQktERjJfSE1BQygpCisgKgorICogUEtDUzVfUEJLREYyX0hNQUNfZmFzdCgpIGhhc2hlcyB0aGUgcGFzc3dvcmQgZXhhY3RseSBvbmUgdGltZSBpbnN0ZWFkIG9mCisgKiBgaXRlcmAgdGltZXMuIFRvZGF5ICgyMDEzKSB0aGUgaXRlcmF0aW9uIGNvdW50IGlzIHR5cGljYWxseSAxMDAsMDAwIG9yCisgKiBtb3JlLiBUaGUgaW1wcm92ZWQgYWxnb3JpdGhtIGlzIG5vdCBzdWJqZWN0IHRvIGEgRGVuaWFsLW9mLVNlcnZpY2UKKyAqIHZ1bG5lcmFiaWxpdHkgd2l0aCBvdmVybHkgbGFyZ2UgcGFzc3dvcmRzLgorICoKKyAqIEFsc28gT3BlblNTTCA8IDEuMCBkb24ndCBwcm92aWRlIFBLQ1M1X1BCS0RGMl9ITUFDKCksIG9ubHkKKyAqIFBLQ1M1X1BCS0RGMl9TSEExLgorICovCitzdGF0aWMgaW50CitQS0NTNV9QQktERjJfSE1BQ19mYXN0KGNvbnN0IGNoYXIgKnBhc3MsIGludCBwYXNzbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCBpbnQgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGl0ZXIsIGNvbnN0IEVWUF9NRCAqZGlnZXN0LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQga2V5bGVuLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgdW5zaWduZWQgY2hhciBkaWd0bXBbRVZQX01BWF9NRF9TSVpFXSwgKnAsIGl0bXBbNF07CisgICAgaW50IGNwbGVuLCBqLCBrLCB0a2V5bGVuLCBtZGxlbjsKKyAgICB1bnNpZ25lZCBsb25nIGkgPSAxOworICAgIEhNQUNfQ1RYIGhjdHhfdHBsLCBoY3R4OworCisgICAgbWRsZW4gPSBFVlBfTURfc2l6ZShkaWdlc3QpOworICAgIGlmIChtZGxlbiA8IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgSE1BQ19DVFhfaW5pdCgmaGN0eF90cGwpOworICAgIEhNQUNfQ1RYX2luaXQoJmhjdHgpOworICAgIHAgPSBvdXQ7CisgICAgdGtleWxlbiA9IGtleWxlbjsKKyAgICBpZiAoIUhNQUNfSW5pdF9leCgmaGN0eF90cGwsIHBhc3MsIHBhc3NsZW4sIGRpZ2VzdCwgTlVMTCkpIHsKKyAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgd2hpbGUodGtleWxlbikgeworICAgICAgICBpZih0a2V5bGVuID4gbWRsZW4pCisgICAgICAgICAgICBjcGxlbiA9IG1kbGVuOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjcGxlbiA9IHRrZXlsZW47CisgICAgICAgIC8qIFdlIGFyZSB1bmxpa2VseSB0byBldmVyIHVzZSBtb3JlIHRoYW4gMjU2IGJsb2NrcyAoNTEyMCBiaXRzISkKKyAgICAgICAgICogYnV0IGp1c3QgaW4gY2FzZS4uLgorICAgICAgICAgKi8KKyAgICAgICAgaXRtcFswXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgaXRtcFsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgaXRtcFsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoaSA+PiA4KSAmIDB4ZmYpOworICAgICAgICBpdG1wWzNdID0gKHVuc2lnbmVkIGNoYXIpKGkgJiAweGZmKTsKKyAgICAgICAgaWYgKCFITUFDX0NUWF9jb3B5KCZoY3R4LCAmaGN0eF90cGwpKSB7CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKCZoY3R4LCBzYWx0LCBzYWx0bGVuKQorICAgICAgICAgICAgICAgIHx8ICFITUFDX1VwZGF0ZSgmaGN0eCwgaXRtcCwgNCkKKyAgICAgICAgICAgICAgICB8fCAhSE1BQ19GaW5hbCgmaGN0eCwgZGlndG1wLCBOVUxMKSkgeworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgbWVtY3B5KHAsIGRpZ3RtcCwgY3BsZW4pOworICAgICAgICBmb3IgKGogPSAxOyBqIDwgaXRlcjsgaisrKSB7CisgICAgICAgICAgICBpZiAoIUhNQUNfQ1RYX2NvcHkoJmhjdHgsICZoY3R4X3RwbCkpIHsKKyAgICAgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIUhNQUNfVXBkYXRlKCZoY3R4LCBkaWd0bXAsIG1kbGVuKQorICAgICAgICAgICAgICAgICAgICB8fCAhSE1BQ19GaW5hbCgmaGN0eCwgZGlndG1wLCBOVUxMKSkgeworICAgICAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNwbGVuOyBrKyspIHsKKyAgICAgICAgICAgICAgICBwW2tdIF49IGRpZ3RtcFtrXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0a2V5bGVuLT0gY3BsZW47CisgICAgICAgIGkrKzsKKyAgICAgICAgcCs9IGNwbGVuOworICAgIH0KKyAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgcmV0dXJuIDE7Cit9CisKKy8qIExDT1ZfRVhDTF9TVEFSVCAqLworc3RhdGljIFB5T2JqZWN0ICoKK19zZXRFeGNlcHRpb24oUHlPYmplY3QgKmV4YykKK3sKKyAgICB1bnNpZ25lZCBsb25nIGVycmNvZGU7CisgICAgY29uc3QgY2hhciAqbGliLCAqZnVuYywgKnJlYXNvbjsKKworICAgIGVycmNvZGUgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKCFlcnJjb2RlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsICJ1bmtub3duIHJlYXNvbnMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIEVSUl9jbGVhcl9lcnJvcigpOworCisgICAgbGliID0gRVJSX2xpYl9lcnJvcl9zdHJpbmcoZXJyY29kZSk7CisgICAgZnVuYyA9IEVSUl9mdW5jX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKyAgICByZWFzb24gPSBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhlcnJjb2RlKTsKKworICAgIGlmIChsaWIgJiYgZnVuYykgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzOiAlc10gJXMiLCBsaWIsIGZ1bmMsIHJlYXNvbik7CisgICAgfQorICAgIGVsc2UgaWYgKGxpYikgeworICAgICAgICBQeUVycl9Gb3JtYXQoZXhjLCAiWyVzXSAlcyIsIGxpYiwgcmVhc29uKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhleGMsIHJlYXNvbik7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorLyogTENPVl9FWENMX1NUT1AgKi8KKworUHlEb2NfU1RSVkFSKHBia2RmMl9obWFjX19kb2NfXywKKyJwYmtkZjJfaG1hYyhoYXNoX25hbWUsIHBhc3N3b3JkLCBzYWx0LCBpdGVyYXRpb25zLCBka2xlbj1Ob25lKSAtPiBrZXlcblwKK1xuXAorUGFzc3dvcmQgYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMiAoUEtDUyAjNSB2Mi4wKSB3aXRoIEhNQUMgYXNcblwKK3BzZXVkb3JhbmRvbSBmdW5jdGlvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Bia2RmMl9obWFjKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Imhhc2hfbmFtZSIsICJwYXNzd29yZCIsICJzYWx0IiwgIml0ZXJhdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGtsZW4iLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqa2V5X29iaiA9IE5VTEwsICpka2xlbl9vYmogPSBQeV9Ob25lOworICAgIGNoYXIgKm5hbWUsICprZXk7CisgICAgUHlfYnVmZmVyIHBhc3N3b3JkLCBzYWx0OworICAgIGxvbmcgaXRlcmF0aW9ucywgZGtsZW47CisgICAgaW50IHJldHZhbDsKKyAgICBjb25zdCBFVlBfTUQgKmRpZ2VzdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgInN5KnkqbHxPOnBia2RmMl9obWFjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZuYW1lLCAmcGFzc3dvcmQsICZzYWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpdGVyYXRpb25zLCAmZGtsZW5fb2JqKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBkaWdlc3QgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZShuYW1lKTsKKyAgICBpZiAoZGlnZXN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnN1cHBvcnRlZCBoYXNoIHR5cGUiKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKHBhc3N3b3JkLmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicGFzc3dvcmQgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChzYWx0LmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic2FsdCBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgaWYgKGl0ZXJhdGlvbnMgPCAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbiB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgaWYgKGl0ZXJhdGlvbnMgPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbiB2YWx1ZSBpcyB0b28gZ3JlYXQuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChka2xlbl9vYmogPT0gUHlfTm9uZSkgeworICAgICAgICBka2xlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGtsZW4gPSBQeUxvbmdfQXNMb25nKGRrbGVuX29iaik7CisgICAgICAgIGlmICgoZGtsZW4gPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgfQorICAgIGlmIChka2xlbiA8IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAia2V5IGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAgaWYgKGRrbGVuID4gSU5UX01BWCkgeworICAgICAgICAvKiBJTlRfTUFYIGlzIGFsd2F5cyBzbWFsbGVyIHRoYW4gZGtMZW4gbWF4ICgyXjMyIC0gMSkgKiBoTGVuICovCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleSBsZW5ndGggaXMgdG9vIGdyZWF0LiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBrZXlfb2JqID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBka2xlbik7CisgICAgaWYgKGtleV9vYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisgICAga2V5ID0gUHlCeXRlc19BU19TVFJJTkcoa2V5X29iaik7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0dmFsID0gUEtDUzVfUEJLREYyX0hNQUNfZmFzdCgoY2hhciopcGFzc3dvcmQuYnVmLCAoaW50KXBhc3N3b3JkLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopc2FsdC5idWYsIChpbnQpc2FsdC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25zLCBkaWdlc3QsIGRrbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilrZXkpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldHZhbCkgeworICAgICAgICBQeV9DTEVBUihrZXlfb2JqKTsKKyAgICAgICAgX3NldEV4Y2VwdGlvbihQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgIGVuZDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNzd29yZCk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2FsdCk7CisgICAgcmV0dXJuIGtleV9vYmo7Cit9CisKKyNlbmRpZgorCiAvKiBTdGF0ZSBmb3Igb3VyIGNhbGxiYWNrIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGFjY3VtdWxhdGUgYSByZXN1bHQuICovCiB0eXBlZGVmIHN0cnVjdCBfaW50ZXJuYWxfbmFtZV9tYXBwZXJfc3RhdGUgewogICAgIFB5T2JqZWN0ICpzZXQ7CkBAIC01MTcsOSArNzE2LDkgQEAKICAgICAgICAgc3RhdGUtPmVycm9yID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoUHlTZXRfQWRkKHN0YXRlLT5zZXQsIHB5X25hbWUpICE9IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihweV9uYW1lKTsKICAgICAgICAgICAgIHN0YXRlLT5lcnJvciA9IDE7CiAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHB5X25hbWUpOwogICAgIH0KIH0KIApAQCAtNjEwLDYgKzgwOSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIEVWUF9mdW5jdGlvbnNbXSA9IHsKICAgICB7Im5ldyIsIChQeUNGdW5jdGlvbilFVlBfbmV3LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgRVZQX25ld19fZG9jX199LAorI2lmZGVmIFBZX1BCS0RGMl9ITUFDCisgICAgeyJwYmtkZjJfaG1hYyIsIChQeUNGdW5jdGlvbilwYmtkZjJfaG1hYywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgIHBia2RmMl9obWFjX19kb2NfX30sCisjZW5kaWYKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihtZDUpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTEpLAogI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKQEAgLTY0Myw2ICs4NDYsNyBAQAogICAgIFB5T2JqZWN0ICptLCAqb3BlbnNzbF9tZF9tZXRoX25hbWVzOwogCiAgICAgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHMoKTsKKyAgICBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwogCiAgICAgLyogVE9ETyBidWlsZCBFVlBfZnVuY3Rpb25zIG9wZW5zc2xfKiBlbnRyaWVzIGR5bmFtaWNhbGx5IGJhc2VkCiAgICAgICogb24gd2hhdCBoYXNoZXMgYXJlIHN1cHBvcnRlZCByYXRoZXIgdGhhbiBsaXN0aW5nIG1hbnkKQEAgLTY2NywxMCArODcxLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0jaWYgSEFTSF9PQkpfQ09OU1RSVUNUT1IKLSAgICBQeV9JTkNSRUYoJkVWUHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmRVZQdHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJIQVNIIiwgKFB5T2JqZWN0ICopJkVWUHR5cGUpOwotI2VuZGlmCiAKICAgICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIHVzZWQgYnkgdGhlIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9ycyAqLwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKG1kNSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwppbmRleCBmMzc3ZTljLi45NmFmY2RjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKQEAgLTE2OCw3ICsxNjgsMTAgQEAKIAogICAgIGxhc3RlbHQgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgbi0xKSA7CiAgICAgUHlfSU5DUkVGKGxhc3RlbHQpOwotICAgIFB5TGlzdF9TZXRTbGljZShoZWFwLCBuLTEsIG4sIE5VTEwpOworICAgIGlmIChQeUxpc3RfU2V0U2xpY2UoaGVhcCwgbi0xLCBuLCBOVUxMKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxhc3RlbHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbi0tOwogCiAgICAgaWYgKCFuKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmMgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuYwppbmRleCA0YTdlNzU4Li45ODY2ZmJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYworKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuYwpAQCAtMTI2LDggKzEyNiw3IEBACiAiJ2InICAgICAgIGJpbmFyeSBtb2RlXG4iCiAiJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdClcbiIKICInKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpXG4iCi0iJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWRcbiIKLSIgICAgICAgICAgZm9yIG5ldyBjb2RlKVxuIgorIidVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKVxuIgogIj09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIKICJcbiIKICJUaGUgZGVmYXVsdCBtb2RlIGlzICdydCcgKG9wZW4gZm9yIHJlYWRpbmcgdGV4dCkuIEZvciBiaW5hcnkgcmFuZG9tXG4iCkBAIC0xNDMsNiArMTQyLDEwIEBACiAicmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYVxuIgogInBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLlxuIgogIlxuIgorIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGluIGZ1dHVyZSB2ZXJzaW9uc1xuIgorIm9mIFB5dGhvbi4gIEl0IGhhcyBubyBlZmZlY3QgaW4gUHl0aG9uIDMuICBVc2UgbmV3bGluZSB0byBjb250cm9sXG4iCisidW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUuXG4iCisiXG4iCiAiYnVmZmVyaW5nIGlzIGFuIG9wdGlvbmFsIGludGVnZXIgdXNlZCB0byBzZXQgdGhlIGJ1ZmZlcmluZyBwb2xpY3kuXG4iCiAiUGFzcyAwIHRvIHN3aXRjaCBidWZmZXJpbmcgb2ZmIChvbmx5IGFsbG93ZWQgaW4gYmluYXJ5IG1vZGUpLCAxIHRvIHNlbGVjdFxuIgogImxpbmUgYnVmZmVyaW5nIChvbmx5IHVzYWJsZSBpbiB0ZXh0IG1vZGUpLCBhbmQgYW4gaW50ZWdlciA+IDEgdG8gaW5kaWNhdGVcbiIKQEAgLTMxMCw2ICszMTMsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCB1c2UgVSBhbmQgd3JpdGluZyBtb2RlIGF0IG9uY2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHJlYWRpbmcgPSAxOwogICAgIH0KIApAQCAtNTMzLDYgKzUzOSwzMSBAQAogfQogCiAKK1B5T2JqZWN0ICoKK19QeUlPX2dldF9sb2NhbGVfbW9kdWxlKF9QeUlPX1N0YXRlICpzdGF0ZSkKK3sKKyAgICBQeU9iamVjdCAqbW9kOworICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSAhPSBOVUxMKSB7CisgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYoc3RhdGUtPmxvY2FsZV9tb2R1bGUpKTsKKyAgICAgICAgbW9kID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1Qoc3RhdGUtPmxvY2FsZV9tb2R1bGUpOworICAgICAgICBpZiAobW9kICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgcmV0dXJuIG1vZDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihzdGF0ZS0+bG9jYWxlX21vZHVsZSk7CisgICAgfQorICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2Jvb3Rsb2NhbGUiKTsKKyAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlID0gUHlXZWFrcmVmX05ld1JlZihtb2QsIE5VTEwpOworICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtb2QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1vZDsKK30KKworCiBzdGF0aWMgaW50CiBpb21vZHVsZV90cmF2ZXJzZShQeU9iamVjdCAqbW9kLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykgewogICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX01PRF9TVEFURShtb2QpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmggYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAppbmRleCAwZmU5MGEzLi5iOTBhNjU4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAorKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaApAQCAtNzcsNyArNzcsNyBAQAogICAgbG9uZyB3aXRoICIlbGxkIiBldmVuIHdoZW4gYm90aCBsb25nIGFuZCBsb25nIGxvbmcgaGF2ZSB0aGUgc2FtZQogICAgcHJlY2lzaW9uLiAqLwogCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKIAogLyogV2luZG93cyB1c2VzIGxvbmcgbG9uZyBmb3Igb2Zmc2V0cyAqLwogdHlwZWRlZiBQWV9MT05HX0xPTkcgUHlfb2ZmX3Q7CkBAIC0xMzcsNiArMTM3LDggQEAKICNkZWZpbmUgSU9fTU9EX1NUQVRFKG1vZCkgKChfUHlJT19TdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCiAjZGVmaW5lIElPX1NUQVRFIElPX01PRF9TVEFURShQeVN0YXRlX0ZpbmRNb2R1bGUoJl9QeUlPX01vZHVsZSkpCiAKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoX1B5SU9fU3RhdGUgKik7CisKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlOwogZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2VkOwogZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfZGVjb2RlOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCmluZGV4IDNhZmU3YjEuLmEwNGI0OGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYworKysgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAgICBQeV9idWZmZXIgYnVmOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICpkYXRhOwotICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ3KjpyZWFkaW50byIsICZidWYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTkwLDcgKzE4OSw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRpb2Jhc2VfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjA5LDYgKzIwOSwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC0yMjAsNyArMjMwLDcgQEAKICAgICBpbnQgZGV0YWNoZWQ7CiAgICAgaW50IHJlYWRhYmxlOwogICAgIGludCB3cml0YWJsZTsKLSAgICBpbnQgZGVhbGxvY2F0aW5nOworICAgIGNoYXIgZmluYWxpemluZzsKIAogICAgIC8qIFRydWUgaWYgdGhpcyBpcyBhIHZhbmlsbGEgQnVmZmVyZWQgb2JqZWN0IChyYXRoZXIgdGhhbiBhIHVzZXIgZGVyaXZlZAogICAgICAgIGNsYXNzKSAqYW5kKiB0aGUgcmF3IHN0cmVhbSBpcyBhIHZhbmlsbGEgRmlsZUlPIG9iamVjdC4gKi8KQEAgLTM4NCw4ICszOTQsOCBAQAogc3RhdGljIHZvaWQKIGJ1ZmZlcmVkX2RlYWxsb2MoYnVmZmVyZWQgKnNlbGYpCiB7Ci0gICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKLSAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CisgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CiAgICAgc2VsZi0+b2sgPSAwOwpAQCAtNDI4LDggKzQzOCw2IEBACiBzdGF0aWMgaW50CiBidWZmZXJlZF9jbGVhcihidWZmZXJlZCAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vayA9IDA7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cmF3KTsKICAgICBQeV9DTEVBUihzZWxmLT5kaWN0KTsKQEAgLTUwOCw3ICs1MTYsNyBAQAogICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAKLSAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgaWYgKHNlbGYtPmZpbmFsaXppbmcpIHsKICAgICAgICAgUHlPYmplY3QgKnIgPSBidWZmZXJlZF9kZWFsbG9jX3dhcm4oc2VsZiwgKFB5T2JqZWN0ICopIHNlbGYpOwogICAgICAgICBpZiAocikKICAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKQEAgLTUyNyw2ICs1MzUsMTEgQEAKIAogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2Nsb3NlLCBOVUxMKTsKIAorICAgIGlmIChzZWxmLT5idWZmZXIpIHsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOworICAgIH0KKwogICAgIGlmIChleGMgIT0gTlVMTCkgewogICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CkBAIC02NTgsNiArNjcxLDExIEBACiBfc2V0X0Jsb2NraW5nSU9FcnJvcihjaGFyICptc2csIFB5X3NzaXplX3Qgd3JpdHRlbikKIHsKICAgICBQeU9iamVjdCAqZXJyOworI2lmZGVmIFB5X0RFQlVHCisgICAgLyogaW4gZGVidWcgbW9kZSwgUHlFdmFsX0V2YWxGcmFtZUV4KCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgIGVyciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19CbG9ja2luZ0lPRXJyb3IsICJpc24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgbXNnLCB3cml0dGVuKTsKICAgICBpZiAoZXJyKQpAQCAtMTczOSw2ICsxNzU3LDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmVhZGVyX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0xNzcxLDcgKzE3OTAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkcmVhZGVyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTc5MCw2ICsxODA5LDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcmVhZGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yMTIwLDYgKzIxNDksNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWR3cml0ZXJfbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTIxNTIsNyArMjE4Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWR3cml0ZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yMTcxLDYgKzIyMDEsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWR3cml0ZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTI0MDYsNyArMjQ0Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKiB0cF9mbGFncyAqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKiB0cF9mbGFncyAqLwogICAgIGJ1ZmZlcmVkcndwYWlyX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkcndwYWlyX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkcndwYWlyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjQyNSw2ICsyNDY1LDE2IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcndwYWlyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogDAogCkBAIC0yNTEyLDYgKzI1NjIsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyYW5kb21fbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI1NDQsNyArMjU5NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyYW5kb21fZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0yNTYzLDQgKzI2MTQsMTQgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyYW5kb21faW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9maWxlaW8uYyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCmluZGV4IGYzY2U3NzYuLjBlMWU3MDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2ZpbGVpby5jCisrKyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCkBAIC01MiwxMyArNTIsMTUgQEAKICAgICB1bnNpZ25lZCBpbnQgYXBwZW5kaW5nIDogMTsKICAgICBzaWduZWQgaW50IHNlZWthYmxlIDogMjsgLyogLTEgbWVhbnMgdW5rbm93biAqLwogICAgIHVuc2lnbmVkIGludCBjbG9zZWZkIDogMTsKLSAgICB1bnNpZ25lZCBpbnQgZGVhbGxvY2F0aW5nOiAxOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiB9IGZpbGVpbzsKIAogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGU7CiAKK19QeV9JREVOVElGSUVSKG5hbWUpOworCiAjZGVmaW5lIFB5RmlsZUlPX0NoZWNrKG9wKSAoUHlPYmplY3RfVHlwZUNoZWNrKChvcCksICZQeUZpbGVJT19UeXBlKSkKIAogaW50CkBAIC0xMjksNyArMTMxLDcgQEAKICAgICAgICAgc2VsZi0+ZmQgPSAtMTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICBQeU9iamVjdCAqciA9IGZpbGVpb19kZWFsbG9jX3dhcm4oc2VsZiwgKFB5T2JqZWN0ICopIHNlbGYpOwogICAgICAgICBpZiAocikKICAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKQEAgLTIwNCw2ICsyMDYsOSBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKIAogc3RhdGljIGludAogZmlsZWlvX2luaXQoUHlPYmplY3QgKm9zZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0yMjMsNiArMjI4LDExIEBACiAgICAgaW50IGZkID0gLTE7CiAgICAgaW50IGNsb3NlZmQgPSAxOwogICAgIGludCBmZF9pc19vd24gPSAwOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIGFzc2VydChQeUZpbGVJT19DaGVjayhvc2VsZikpOwogICAgIGlmIChzZWxmLT5mZCA+PSAwKSB7CkBAIC0zNDMsNiArMzUzLDEyIEBACiAgICAgZmxhZ3MgfD0gT19CSU5BUlk7CiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBmbGFncyB8PSBPX05PSU5IRVJJVDsKKyNlbGlmIGRlZmluZWQoT19DTE9FWEVDKQorICAgIGZsYWdzIHw9IE9fQ0xPRVhFQzsKKyNlbmRpZgorCiAgICAgaWYgKGZkID49IDApIHsKICAgICAgICAgaWYgKGNoZWNrX2ZkKGZkKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsMTAgKzM4MiwxOCBAQAogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICAgICAgc2VsZi0+ZmQgPSBvcGVuKG5hbWUsIGZsYWdzLCAwNjY2KTsKKwogICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmZG9iajsKKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICAvKiB0aGUgb3BlbmVyIG1heSBjbGVhciB0aGUgYXRvbWljIGZsYWcgKi8KKyAgICAgICAgICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorCisgICAgICAgICAgICBmZG9iaiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihvcGVuZXIsICJPaSIsIG5hbWVvYmosIGZsYWdzKTsKICAgICAgICAgICAgIGlmIChmZG9iaiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayhmZG9iaikpIHsKQEAgLTM4OCwxNCArNDEyLDE0IEBACiAKICAgICAgICAgZmRfaXNfb3duID0gMTsKICAgICAgICAgaWYgKHNlbGYtPmZkIDwgMCkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgICAgIGlmICh3aWRlbmFtZSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19JT0Vycm9yLCBuYW1lb2JqKTsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBuYW1lKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBuYW1lb2JqKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KKworI2lmbmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmZkLCAwLCBhdG9taWNfZmxhZ193b3JrcykgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyNlbmRpZgogICAgIH0KICAgICBpZiAoZGlyY2hlY2soc2VsZiwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtNDA1LDcgKzQyOSw3IEBACiAgICAgX3NldG1vZGUoc2VsZi0+ZmQsIE9fQklOQVJZKTsKICNlbmRpZgogCi0gICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopc2VsZiwgIm5hbWUiLCBuYW1lb2JqKSA8IDApCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfbmFtZSwgbmFtZW9iaikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKHNlbGYtPmFwcGVuZGluZykgewpAQCAtNDQ5LDcgKzQ3Myw3IEBACiBzdGF0aWMgdm9pZAogZmlsZWlvX2RlYWxsb2MoZmlsZWlvICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7CisgICAgc2VsZi0+ZmluYWxpemluZyA9IDE7CiAgICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CkBAIC01MzUsNyArNTU5LDcgQEAKICAgICAgICAgbGVuID0gcGJ1Zi5sZW47CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQogICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHBidWYuYnVmLCAoaW50KWxlbik7CkBAIC01NTgsMzMgKzU4MiwyNyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qobik7CiB9CiAKKyNpZm5kZWYgSEFWRV9GU1RBVAorCitzdGF0aWMgUHlPYmplY3QgKgorZmlsZWlvX3JlYWRhbGwoZmlsZWlvICpzZWxmKQoreworICAgIF9QeV9JREVOVElGSUVSKHJlYWRhbGwpOworICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopJlB5UmF3SU9CYXNlX1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfcmVhZGFsbCwgIk8iLCBzZWxmKTsKK30KKworI2Vsc2UKKwogc3RhdGljIHNpemVfdAotbmV3X2J1ZmZlcnNpemUoZmlsZWlvICpzZWxmLCBzaXplX3QgY3VycmVudHNpemUKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgICAgICAgICAgICAsIFB5X29mZl90IHBvcywgUHlfb2ZmX3QgZW5kCi0jZW5kaWYKLSAgICAgICAgICAgICAgICkKK25ld19idWZmZXJzaXplKGZpbGVpbyAqc2VsZiwgc2l6ZV90IGN1cnJlbnRzaXplKQogewogICAgIHNpemVfdCBhZGRlbmQ7Ci0jaWZkZWYgSEFWRV9GU1RBVAotICAgIGlmIChlbmQgIT0gKFB5X29mZl90KS0xKSB7Ci0gICAgICAgIC8qIEZpbGVzIGNsYWltaW5nIGEgc2l6ZSBzbWFsbGVyIHRoYW4gU01BTExDSFVOSyBtYXkKLSAgICAgICAgICAgYWN0dWFsbHkgYmUgc3RyZWFtaW5nIHBzZXVkby1maWxlcy4gSW4gdGhpcyBjYXNlLCB3ZQotICAgICAgICAgICBhcHBseSB0aGUgbW9yZSBhZ2dyZXNzaXZlIGFsZ29yaXRobSBiZWxvdy4KLSAgICAgICAgKi8KLSAgICAgICAgaWYgKGVuZCA+PSBTTUFMTENIVU5LICYmIGVuZCA+PSBwb3MgJiYgcG9zID49IDApIHsKLSAgICAgICAgICAgIC8qIEFkZCAxIHNvIGlmIHRoZSBmaWxlIHdlcmUgdG8gZ3JvdyB3ZSdkIG5vdGljZS4gKi8KLSAgICAgICAgICAgIFB5X29mZl90IGJ1ZnNpemUgPSBjdXJyZW50c2l6ZSArIGVuZCAtIHBvcyArIDE7Ci0gICAgICAgICAgICBpZiAoYnVmc2l6ZSA8IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICAgICAgICAgIHJldHVybiAoc2l6ZV90KWJ1ZnNpemU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBZX1NTSVpFX1RfTUFYOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCisKICAgICAvKiBFeHBhbmQgdGhlIGJ1ZmZlciBieSBhbiBhbW91bnQgcHJvcG9ydGlvbmFsIHRvIHRoZSBjdXJyZW50IHNpemUsCiAgICAgICAgZ2l2aW5nIHVzIGFtb3J0aXplZCBsaW5lYXItdGltZSBiZWhhdmlvci4gIEZvciBiaWdnZXIgc2l6ZXMsIHVzZSBhCiAgICAgICAgbGVzcy10aGFuLWRvdWJsZSBncm93dGggZmFjdG9yIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBhbGxvY2F0aW9uLiAqLworICAgIGFzc2VydChjdXJyZW50c2l6ZSA8PSBQWV9TU0laRV9UX01BWCk7CiAgICAgaWYgKGN1cnJlbnRzaXplID4gNjU1MzYpCiAgICAgICAgIGFkZGVuZCA9IGN1cnJlbnRzaXplID4+IDM7CiAgICAgZWxzZQpAQCAtNTk4LDI2ICs2MTYsMTkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmaWxlaW9fcmVhZGFsbChmaWxlaW8gKnNlbGYpCiB7Ci0jaWZkZWYgSEFWRV9GU1RBVAogICAgIHN0cnVjdCBzdGF0IHN0OwogICAgIFB5X29mZl90IHBvcywgZW5kOwotI2VuZGlmCiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBQeV9zc2l6ZV90IHRvdGFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGJ5dGVzX3JlYWQgPSAwOwogICAgIFB5X3NzaXplX3QgbjsKLSAgICBzaXplX3QgbmV3c2l6ZTsKKyAgICBzaXplX3QgYnVmc2l6ZTsKIAogICAgIGlmIChzZWxmLT5mZCA8IDApCiAgICAgICAgIHJldHVybiBlcnJfY2xvc2VkKCk7CiAgICAgaWYgKCFfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogCi0gICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBTTUFMTENIVU5LKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0jaWZkZWYgSEFWRV9GU1RBVAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgcG9zID0gX2xzZWVraTY0KHNlbGYtPmZkLCAwTCwgU0VFS19DVVIpOwogI2Vsc2UKICAgICBwb3MgPSBsc2VlayhzZWxmLT5mZCwgMEwsIFNFRUtfQ1VSKTsKQEAgLTYyNiw0NCArNjM3LDQ2IEBACiAgICAgICAgIGVuZCA9IHN0LnN0X3NpemU7CiAgICAgZWxzZQogICAgICAgICBlbmQgPSAoUHlfb2ZmX3QpLTE7Ci0jZW5kaWYKLSAgICB3aGlsZSAoMSkgewotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICAgICAgbmV3c2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIHRvdGFsLCBwb3MsIGVuZCk7Ci0jZWxzZQotICAgICAgICBuZXdzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgdG90YWwpOwotI2VuZGlmCi0gICAgICAgIGlmIChuZXdzaXplID4gUFlfU1NJWkVfVF9NQVggfHwgbmV3c2l6ZSA8PSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAidW5ib3VuZGVkIHJlYWQgcmV0dXJuZWQgbW9yZSBieXRlcyAiCi0gICAgICAgICAgICAgICAgInRoYW4gYSBQeXRob24gc3RyaW5nIGNhbiBob2xkICIpOwotICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogCi0gICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPCAoUHlfc3NpemVfdCluZXdzaXplKSB7Ci0gICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIG5ld3NpemUpIDwgMCkgewotICAgICAgICAgICAgICAgIGlmICh0b3RhbCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChlbmQgPiAwICYmIGVuZCA+PSBwb3MgJiYgcG9zID49IDAgJiYgZW5kIC0gcG9zIDwgUFlfU1NJWkVfVF9NQVgpIHsKKyAgICAgICAgLyogVGhpcyBpcyBwcm9iYWJseSBhIHJlYWwgZmlsZSwgc28gd2UgdHJ5IHRvIGFsbG9jYXRlIGEKKyAgICAgICAgICAgYnVmZmVyIG9uZSBieXRlIGxhcmdlciB0aGFuIHRoZSByZXN0IG9mIHRoZSBmaWxlLiAgSWYgdGhlCisgICAgICAgICAgIGNhbGN1bGF0aW9uIGlzIHJpZ2h0IHRoZW4gd2Ugc2hvdWxkIGdldCBFT0Ygd2l0aG91dCBoYXZpbmcKKyAgICAgICAgICAgdG8gZW5sYXJnZSB0aGUgYnVmZmVyLiAqLworICAgICAgICBidWZzaXplID0gKHNpemVfdCkoZW5kIC0gcG9zICsgMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmc2l6ZSA9IFNNQUxMQ0hVTks7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZzaXplKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPj0gKFB5X3NzaXplX3QpYnVmc2l6ZSkgeworICAgICAgICAgICAgYnVmc2l6ZSA9IG5ld19idWZmZXJzaXplKHNlbGYsIGJ5dGVzX3JlYWQpOworICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPiBQWV9TU0laRV9UX01BWCB8fCBidWZzaXplIDw9IDApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYm91bmRlZCByZWFkIHJldHVybmVkIG1vcmUgYnl0ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhbiBhIFB5dGhvbiBzdHJpbmcgY2FuIGhvbGQiKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA8IChQeV9zc2l6ZV90KWJ1ZnNpemUpIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIGJ1ZnNpemUpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIG4gPSBuZXdzaXplIC0gdG90YWw7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorICAgICAgICBuID0gYnVmc2l6ZSAtIGJ5dGVzX3JlYWQ7CisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAobiA+IElOVF9NQVgpCiAgICAgICAgICAgICBuID0gSU5UX01BWDsKLSAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsCi0gICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyB0b3RhbCwKLSAgICAgICAgICAgICAgICAgKGludCluKTsKKyAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBieXRlc19yZWFkLCAoaW50KW4pOwogI2Vsc2UKLSAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsCi0gICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyB0b3RhbCwKLSAgICAgICAgICAgICAgICAgbik7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgYnl0ZXNfcmVhZCwgbik7CiAjZW5kaWYKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgaWYgKG4gPT0gMCkKQEAgLTY3Niw3ICs2ODksNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0b3RhbCA+IDApCisgICAgICAgICAgICBpZiAoYnl0ZXNfcmVhZCA+IDApCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CkBAIC02ODYsMjIgKzY5OSwxOSBAQAogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgdG90YWwgKz0gbjsKLSNpZmRlZiBIQVZFX0ZTVEFUCisgICAgICAgIGJ5dGVzX3JlYWQgKz0gbjsKICAgICAgICAgcG9zICs9IG47Ci0jZW5kaWYKICAgICB9CiAKLSAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpID4gdG90YWwpIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0LCB0b3RhbCkgPCAwKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBqdXN0IGluIGNhc2UgKi8KLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgPiBieXRlc19yZWFkKSB7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgYnl0ZXNfcmVhZCkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorI2VuZGlmIC8qIEhBVkVfRlNUQVQgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZWFkKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC03MjIsNyArNzMyLDcgQEAKICAgICAgICAgcmV0dXJuIGZpbGVpb19yZWFkYWxsKHNlbGYpOwogICAgIH0KIAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKHNpemUgPiBJTlRfTUFYKQogICAgICAgICBzaXplID0gSU5UX01BWDsKICNlbmRpZgpAQCAtNzM0LDcgKzc0NCw3IEBACiAgICAgaWYgKF9QeVZlcmlmeV9mZChzZWxmLT5mZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHB0ciwgKGludClzaXplKTsKICNlbHNlCiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIHNpemUpOwpAQCAtNzU1LDcgKzc2NSw3IEBACiAKICAgICBpZiAobiAhPSBzaXplKSB7CiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ5dGVzLCBuKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgICAgICAgICBQeV9DTEVBUihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTc4Miw3ICs3OTIsNyBAQAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgbGVuID0gcGJ1Zi5sZW47Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKGxlbiA+IDMyNzY3ICYmIGlzYXR0eShzZWxmLT5mZCkpIHsKICAgICAgICAgICAgIC8qIElzc3VlICMxMTM5NTogdGhlIFdpbmRvd3MgY29uc29sZSByZXR1cm5zIGFuIGVycm9yICgxMjogbm90CiAgICAgICAgICAgICAgICBlbm91Z2ggc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYgc3Rkb3V0IG1vZGUgaXMKQEAgLTg1NSw3ICs4NjUsNyBAQAogCiAgICAgaWYgKF9QeVZlcmlmeV9mZChmZCkpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHJlcyA9IF9sc2Vla2k2NChmZCwgcG9zLCB3aGVuY2UpOwogI2Vsc2UKICAgICAgICAgcmVzID0gbHNlZWsoZmQsIHBvcywgd2hlbmNlKTsKQEAgLTEwMjgsNyArMTAzOCw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZmlsZWlvX3JlcHIoZmlsZWlvICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcmVzOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKQEAgLTEyMDQsNiArMTIxMywxMSBAQAogICAgIHtOVUxMfSwKIH07CiAKK3N0YXRpYyBQeU1lbWJlckRlZiBmaWxlaW9fbWVtYmVyc1tdID0geworICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGZpbGVpbywgZmluYWxpemluZyksIDB9LAorICAgIHtOVUxMfQorfTsKKwogUHlUeXBlT2JqZWN0IFB5RmlsZUlPX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9pby5GaWxlSU8iLApAQCAtMTIyNSw3ICsxMjM5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgICAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgICAgICAvKiB0cF9mbGFncyAqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBmaWxlaW9fZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZmlsZWlvX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlmaWxlaW9fY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0xMjM0LDcgKzEyNDgsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBmaWxlaW9fbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICBmaWxlaW9fbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICBmaWxlaW9fZ2V0c2V0bGlzdCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLwpAQCAtMTI0NSw0ICsxMjU5LDEzIEBACiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIGZpbGVpb19uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2lvYmFzZS5jIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKaW5kZXggZTM4NDczYS4uMWI3Y2IwZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vaW9iYXNlLmMKKysrIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKQEAgLTEsOSArMSw5IEBACiAvKgogICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJL08gYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGhpZXJhcmNoeQogICAgIGFzIGRlZmluZWQgYnkgUEVQIDMxMTYgLSAiTmV3IEkvTyIKLSAgICAKKwogICAgIENsYXNzZXMgZGVmaW5lZCBoZXJlOiBJT0Jhc2UsIFJhd0lPQmFzZS4KLSAgICAKKwogICAgIFdyaXR0ZW4gYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMgYW5kIEFudG9pbmUgUGl0cm91CiAqLwogCkBAIC0xOSw3ICsxOSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgCisKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiB9IGlvYmFzZTsKQEAgLTYzLDYgKzYzLDggQEAKICNkZWZpbmUgSVNfQ0xPU0VEKHNlbGYpIFwKICAgICBfUHlPYmplY3RfSGFzQXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCkKIAorX1B5X0lERU5USUZJRVIocmVhZCk7CisKIC8qIEludGVybmFsIG1ldGhvZHMgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBpb2Jhc2VfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKQEAgLTE4MCw0MiArMTgyLDQ0IEBACiBpb2Jhc2VfY2xvc2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19JT0Jhc2VfY2xvc2VkKTsKIAogICAgIGlmIChJU19DTE9TRUQoc2VsZikpCiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKLSAgICBfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCwgUHlfVHJ1ZSk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7CisKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQsIFB5X1RydWUpIDwgMCkgeworICAgICAgICBQeV9YREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9YREVDUkVGKHJlcyk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIC8qIEZpbmFsaXphdGlvbiBhbmQgZ2FyYmFnZSBjb2xsZWN0aW9uIHN1cHBvcnQgKi8KIAotaW50Ci1fUHlJT0Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCitzdGF0aWMgdm9pZAoraW9iYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlPYmplY3QgKnRwLCAqdiwgKnRiOwotICAgIGludCBjbG9zZWQgPSAxOwotICAgIGludCBpc196b21iaWU7CisgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKyAgICBpbnQgY2xvc2VkOworICAgIF9QeV9JREVOVElGSUVSKF9maW5hbGl6aW5nKTsKIAotICAgIC8qIElmIF9QeUlPQmFzZV9maW5hbGl6ZSgpIGlzIGNhbGxlZCBmcm9tIGEgZGVzdHJ1Y3Rvciwgd2UgbmVlZCB0bwotICAgICAgIHJlc3VycmVjdCB0aGUgb2JqZWN0IGFzIGNhbGxpbmcgY2xvc2UoKSBjYW4gaW52b2tlIGFyYml0cmFyeSBjb2RlLiAqLwotICAgIGlzX3pvbWJpZSA9IChQeV9SRUZDTlQoc2VsZikgPT0gMCk7Ci0gICAgaWYgKGlzX3pvbWJpZSkgewotICAgICAgICArK1B5X1JFRkNOVChzZWxmKTsKLSAgICB9Ci0gICAgUHlFcnJfRmV0Y2goJnRwLCAmdiwgJnRiKTsKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCiAgICAgLyogSWYgYGNsb3NlZGAgZG9lc24ndCBleGlzdCBvciBjYW4ndCBiZSBldmFsdWF0ZWQgYXMgYm9vbCwgdGhlbiB0aGUKICAgICAgICBvYmplY3QgaXMgcHJvYmFibHkgaW4gYW4gdW51c2FibGUgc3RhdGUsIHNvIGlnbm9yZS4gKi8KICAgICByZXMgPSBQeU9iamVjdF9HZXRBdHRyKHNlbGYsIF9QeUlPX3N0cl9jbG9zZWQpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICBpZiAocmVzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgY2xvc2VkID0gLTE7CisgICAgfQogICAgIGVsc2UgewogICAgICAgICBjbG9zZWQgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CkBAIC0yMjMsNiArMjI3LDEwIEBACiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KICAgICBpZiAoY2xvc2VkID09IDApIHsKKyAgICAgICAgLyogU2lnbmFsIGNsb3NlKCkgdGhhdCBpdCB3YXMgY2FsbGVkIGFzIHBhcnQgb2YgdGhlIG9iamVjdAorICAgICAgICAgICBmaW5hbGl6YXRpb24gcHJvY2Vzcy4gKi8KKyAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX2ZpbmFsaXppbmcsIFB5X1RydWUpKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopIHNlbGYsIF9QeUlPX3N0cl9jbG9zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAvKiBTaWxlbmNpbmcgSS9PIGVycm9ycyBpcyBiYWQsIGJ1dCBwcmludGluZyBzcHVyaW91cyB0cmFjZWJhY2tzIGlzCkBAIC0yMzMsMzEgKzI0MSwyNSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICB9Ci0gICAgUHlFcnJfUmVzdG9yZSh0cCwgdiwgdGIpOwotICAgIGlmIChpc196b21iaWUpIHsKLSAgICAgICAgaWYgKC0tUHlfUkVGQ05UKHNlbGYpICE9IDApIHsKLSAgICAgICAgICAgIC8qIFRoZSBvYmplY3QgbGl2ZXMgYWdhaW4uIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0YWtlbiBmcm9tCi0gICAgICAgICAgICAgICBzbG90X3RwX2RlbCBpbiB0eXBlb2JqZWN0LmMuICovCi0gICAgICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IFB5X1JFRkNOVChzZWxmKTsKLSAgICAgICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgICAgICBQeV9SRUZDTlQoc2VsZikgPSByZWZjbnQ7Ci0gICAgICAgICAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgICAgICAgICAgX1B5X0RFQ19SRUZUT1RBTDsKLSAgICAgICAgICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICAgICAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgICAgICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAotICAgICAgICAgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICAgICAgICAgKiB1bmRvbmUuCi0gICAgICAgICAgICAgKi8KLSNpZmRlZiBDT1VOVF9BTExPQ1MKLSAgICAgICAgICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7Ci0gICAgICAgICAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisKKyAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCisgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKK30KKworaW50CitfUHlJT0Jhc2VfZmluYWxpemUoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IGlzX3pvbWJpZTsKKworICAgIC8qIElmIF9QeUlPQmFzZV9maW5hbGl6ZSgpIGlzIGNhbGxlZCBmcm9tIGEgZGVzdHJ1Y3Rvciwgd2UgbmVlZCB0bworICAgICAgIHJlc3VycmVjdCB0aGUgb2JqZWN0IGFzIGNhbGxpbmcgY2xvc2UoKSBjYW4gaW52b2tlIGFyYml0cmFyeSBjb2RlLiAqLworICAgIGlzX3pvbWJpZSA9IChQeV9SRUZDTlQoc2VsZikgPT0gMCk7CisgICAgaWYgKGlzX3pvbWJpZSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CkBAIC0yNzAsOCArMjcyLDYgQEAKIHN0YXRpYyBpbnQKIGlvYmFzZV9jbGVhcihpb2Jhc2UgKnNlbGYpCiB7Ci0gICAgaWYgKF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQotICAgICAgICByZXR1cm4gLTE7CiAgICAgUHlfQ0xFQVIoc2VsZi0+ZGljdCk7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC00NTUsNyArNDU1LDYgQEAKICAgICBpbnQgaGFzX3BlZWsgPSAwOwogICAgIFB5T2JqZWN0ICpidWZmZXIsICpyZXN1bHQ7CiAgICAgUHlfc3NpemVfdCBvbGRfc2l6ZSA9IC0xOwotICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogICAgIF9QeV9JREVOVElGSUVSKHBlZWspOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyY6cmVhZGxpbmUiLCAmX1B5SU9fQ29udmVydFNzaXplX3QsICZsaW1pdCkpIHsKQEAgLTUzNiw3ICs1MzUsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIG9sZF9zaXplID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoYnVmZmVyKTsKLSAgICAgICAgUHlCeXRlQXJyYXlfUmVzaXplKGJ1ZmZlciwgb2xkX3NpemUgKyBQeUJ5dGVzX0dFVF9TSVpFKGIpKTsKKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KICAgICAgICAgbWVtY3B5KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhidWZmZXIpICsgb2xkX3NpemUsCiAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhiKSwgUHlCeXRlc19HRVRfU0laRShiKSk7CiAKQEAgLTc0MSw3ICs3NDMsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGlvYmFzZV9kb2MsICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWlvYmFzZV90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlpb2Jhc2VfY2xlYXIsICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTc2MCw2ICs3NjIsMTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAoZGVzdHJ1Y3Rvcilpb2Jhc2VfZmluYWxpemUsIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTgzMSwxMiArODQzLDExIEBACiAgICAgaW50IHI7CiAgICAgUHlPYmplY3QgKmNodW5rcyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICAKKwogICAgIGlmIChjaHVua3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKICAgICAgICAgUHlPYmplY3QgKmRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYsICZQeUlkX3JlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaSIsIERFRkFVTFRfQlVGRkVSX1NJWkUpOwogICAgICAgICBpZiAoIWRhdGEpIHsKQEAgLTkwNSw3ICs5MTYsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgIC8qdHBfZmxhZ3MqLwogICAgIHJhd2lvYmFzZV9kb2MsICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTkyNCw0ICs5MzUsMTQgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby90ZXh0aW8uYyBiL01vZHVsZXMvX2lvL3RleHRpby5jCmluZGV4IDYwM2VlNjAuLmZiODlhMTcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL3RleHRpby5jCisrKyBiL01vZHVsZXMvX2lvL3RleHRpby5jCkBAIC0xNzMsNyArMTczLDggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICB0ZXh0aW9iYXNlX2RvYywgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0xOTIsNiArMTkzLDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwogCiAKQEAgLTY5MSw3ICs3MDIsNyBAQAogICAgIGNoYXIgc2Vla2FibGU7CiAgICAgY2hhciBoYXNfcmVhZDE7CiAgICAgY2hhciB0ZWxsaW5nOwotICAgIGNoYXIgZGVhbGxvY2F0aW5nOworICAgIGNoYXIgZmluYWxpemluZzsKICAgICAvKiBTcGVjaWFsaXplZCBlbmNvZGluZyBmdW5jIChzZWUgYmVsb3cpICovCiAgICAgZW5jb2RlZnVuY190IGVuY29kZWZ1bmM7CiAgICAgLyogV2hldGhlciBvciBub3QgaXQncyB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbSAqLwpAQCAtNzU4LDcgKzc2OSw3IEBACiB7CiAgICAgaWYgKCFzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0pIHsKICAgICAgICAgLyogU2tpcCB0aGUgQk9NIGFuZCB1c2UgbmF0aXZlIGJ5dGUgb3JkZXJpbmcgKi8KLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKKyNpZiBQWV9CSUdfRU5ESUFOCiAgICAgICAgIHJldHVybiB1dGYxNmJlX2VuY29kZShzZWxmLCB0ZXh0KTsKICNlbHNlCiAgICAgICAgIHJldHVybiB1dGYxNmxlX2VuY29kZShzZWxmLCB0ZXh0KTsKQEAgLTc4Nyw3ICs3OTgsNyBAQAogewogICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisjaWYgUFlfQklHX0VORElBTgogICAgICAgICByZXR1cm4gdXRmMzJiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gdXRmMzJsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CkBAIC05MDYsMzUgKzkxNywyOSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMICYmIHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlID09IE5VTEwpIHsKLSAgICAgICAgICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJsb2NhbGUiKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gY2F0Y2hfSW1wb3J0RXJyb3I7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZ290byB1c2VfbG9jYWxlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHVzZV9sb2NhbGU6Ci0gICAgICAgICAgICBzZWxmLT5lbmNvZGluZyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICAgICAgc3RhdGUtPmxvY2FsZV9tb2R1bGUsICZQeUlkX2dldHByZWZlcnJlZGVuY29kaW5nLCAiTyIsIFB5X0ZhbHNlKTsKLSAgICAgICAgICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgIGNhdGNoX0ltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgIEltcG9ydGluZyBsb2NhbGUgY2FuIHJhaXNlIGEgSW1wb3J0RXJyb3IgYmVjYXVzZSBvZgotICAgICAgICAgICAgICAgICBfZnVuY3Rvb2xzLCBhbmQgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nIGNhbiByYWlzZSBhCi0gICAgICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCi0gICAgICAgICAgICAgICAgIGR1cmluZyBtb2R1bGUgYnVpbGRpbmcuCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYXNjaWkiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeU9iamVjdCAqbG9jYWxlX21vZHVsZSA9IF9QeUlPX2dldF9sb2NhbGVfbW9kdWxlKHN0YXRlKTsKKyAgICAgICAgaWYgKGxvY2FsZV9tb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gY2F0Y2hfSW1wb3J0RXJyb3I7CisgICAgICAgIHNlbGYtPmVuY29kaW5nID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKKyAgICAgICAgICAgIGxvY2FsZV9tb2R1bGUsICZQeUlkX2dldHByZWZlcnJlZGVuY29kaW5nLCAiTyIsIFB5X0ZhbHNlKTsKKyAgICAgICAgUHlfREVDUkVGKGxvY2FsZV9tb2R1bGUpOworICAgICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgeworICAgICAgICAgIGNhdGNoX0ltcG9ydEVycm9yOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICBJbXBvcnRpbmcgbG9jYWxlIGNhbiByYWlzZSBhIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKKyAgICAgICAgICAgICBfZnVuY3Rvb2xzLCBhbmQgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nIGNhbiByYWlzZSBhCisgICAgICAgICAgICAgSW1wb3J0RXJyb3IgaWYgX2xvY2FsZSBpcyBub3QgYXZhaWxhYmxlLiAgVGhlc2Ugd2lsbCBoYXBwZW4KKyAgICAgICAgICAgICBkdXJpbmcgbW9kdWxlIGJ1aWxkaW5nLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYXNjaWkiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc2VsZi0+ZW5jb2RpbmcpKQotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc2VsZi0+ZW5jb2RpbmcpKQorICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwogICAgIH0KICAgICBpZiAoc2VsZi0+ZW5jb2RpbmcgIT0gTlVMTCkgewogICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+ZW5jb2RpbmcpOwpAQCAtMTExMiw4ICsxMTE3LDYgQEAKIHN0YXRpYyBpbnQKIF90ZXh0aW93cmFwcGVyX2NsZWFyKHRleHRpbyAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+b2sgJiYgX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKICAgICBzZWxmLT5vayA9IDA7CiAgICAgUHlfQ0xFQVIoc2VsZi0+YnVmZmVyKTsKICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CkBAIC0xMTMxLDkgKzExMzQsMTAgQEAKIHN0YXRpYyB2b2lkCiB0ZXh0aW93cmFwcGVyX2RlYWxsb2ModGV4dGlvICpzZWxmKQogewotICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7Ci0gICAgaWYgKF90ZXh0aW93cmFwcGVyX2NsZWFyKHNlbGYpIDwgMCkKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKKyAgICBfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKTsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKilzZWxmKTsKQEAgLTE5MzcsMTAgKzE5NDEsNyBAQAogCiAjZGVmaW5lIENPT0tJRV9CVUZfTEVOICAgICAgKHNpemVvZihQeV9vZmZfdCkgKyAzICogc2l6ZW9mKGludCkgKyBzaXplb2YoY2hhcikpCiAKLSNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKLQotIyBkZWZpbmUgSVNfTElUVExFX0VORElBTiAgIDAKLQorI2lmIFBZX0JJR19FTkRJQU4KIC8qIFdlIHdhbnQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHRvIGFsc28gYmUgdGhlIGxlYXN0CiAgICBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUsIHdoaWNoIG1lYW5zIHRoYXQgaW4gYmlnLWVuZGlhbiBtb2RlIHdlCiAgICBtdXN0IGNvcHkgdGhlIGZpZWxkcyBpbiByZXZlcnNlIG9yZGVyLiAqLwpAQCAtMTk1Miw5ICsxOTUzLDYgQEAKICMgZGVmaW5lIE9GRl9ORUVEX0VPRiAgICAgICAwCiAKICNlbHNlCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAxCi0KIC8qIExpdHRsZS1lbmRpYW4gbW9kZTogdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2Ygc3RhcnRfcG9zIHdpbGwKICAgIG5hdHVyYWxseSBlbmQgdXAgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgdGhlIGNvb2tpZS4gKi8KIApAQCAtMTk3NSw3ICsxOTczLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKF9QeUxvbmdfQXNCeXRlQXJyYXkoY29va2llTG9uZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJU19MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9MSVRUTEVfRU5ESUFOLCAwKSA8IDApIHsKICAgICAgICAgUHlfREVDUkVGKGNvb2tpZUxvbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjAwMSw5ICsxOTk5LDkgQEAKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX0NIQVJTX1RPX1NLSVAsICZjb29raWUtPmNoYXJzX3RvX3NraXAsIHNpemVvZihjb29raWUtPmNoYXJzX3RvX3NraXApKTsKICAgICBtZW1jcHkoYnVmZmVyICsgT0ZGX05FRURfRU9GLCAmY29va2llLT5uZWVkX2VvZiwgc2l6ZW9mKGNvb2tpZS0+bmVlZF9lb2YpKTsKIAotICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheShidWZmZXIsIHNpemVvZihidWZmZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCk7CiB9Ci0jdW5kZWYgSVNfTElUVExFX0VORElBTgogCiBzdGF0aWMgaW50CiBfdGV4dGlvd3JhcHBlcl9kZWNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKQEAgLTIzNTMsNyArMjM1MSw3IEBACiAKICAgICAvKiBOb3RlIG91ciBpbml0aWFsIHN0YXJ0IHBvaW50LiAqLwogICAgIGNvb2tpZS5zdGFydF9wb3MgKz0gc2tpcF9ieXRlczsKLSAgICBjb29raWUuY2hhcnNfdG9fc2tpcCA9IGNoYXJzX3RvX3NraXA7CisgICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBQeV9TQUZFX0RPV05DQVNUKGNoYXJzX3RvX3NraXAsIFB5X3NzaXplX3QsIGludCk7CiAgICAgaWYgKGNoYXJzX3RvX3NraXAgPT0gMCkKICAgICAgICAgZ290byBmaW5hbGx5OwogCkBAIC0yNTc5LDcgKzI1NzcsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEwsICp2YWwsICp0YjsKLSAgICAgICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgICAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX19kZWFsbG9jX3dhcm4sICJPIiwgc2VsZik7CiAgICAgICAgICAgICBpZiAocmVzKQogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjc0MCw2ICsyNzM4LDcgQEAKICAgICB7ImVuY29kaW5nIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgZW5jb2RpbmcpLCBSRUFET05MWX0sCiAgICAgeyJidWZmZXIiLCBUX09CSkVDVCwgb2Zmc2V0b2YodGV4dGlvLCBidWZmZXIpLCBSRUFET05MWX0sCiAgICAgeyJsaW5lX2J1ZmZlcmluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBsaW5lX2J1ZmZlcmluZyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZih0ZXh0aW8sIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTI3NzYsNyArMjc3NSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCiAgICAgdGV4dGlvd3JhcHBlcl9kb2MsICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpdGV4dGlvd3JhcHBlcl90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSl0ZXh0aW93cmFwcGVyX2NsZWFyLCAvKiB0cF9jbGVhciAqLwpAQCAtMjc5NSw0ICsyNzk0LDE0IEBACiAgICAgKGluaXRwcm9jKXRleHRpb3dyYXBwZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19qc29uLmMgYi9Nb2R1bGVzL19qc29uLmMKaW5kZXggOTE2NjY4MC4uMTI1MTAxZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fanNvbi5jCisrKyBiL01vZHVsZXMvX2pzb24uYwpAQCAtMiwyMCArMiw2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiYWNjdS5oIgogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwICYmICFkZWZpbmVkKFB5X1RZUEUpCi0jZGVmaW5lIFB5X1RZUEUob2IpICAgICAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUpCi0jZW5kaWYKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAgJiYgIWRlZmluZWQoUFlfU1NJWkVfVF9NSU4pCi10eXBlZGVmIGludCBQeV9zc2l6ZV90OwotI2RlZmluZSBQWV9TU0laRV9UX01BWCBJTlRfTUFYCi0jZGVmaW5lIFBZX1NTSVpFX1RfTUlOIElOVF9NSU4KLSNkZWZpbmUgUHlJbnRfRnJvbVNzaXplX3QgUHlJbnRfRnJvbUxvbmcKLSNkZWZpbmUgUHlJbnRfQXNTc2l6ZV90IFB5SW50X0FzTG9uZwotI2VuZGlmCi0jaWZuZGVmIFB5X0lTX0ZJTklURQotI2RlZmluZSBQeV9JU19GSU5JVEUoWCkgKCFQeV9JU19JTkZJTklUWShYKSAmJiAhUHlfSVNfTkFOKFgpKQotI2VuZGlmCi0KICNpZmRlZiBfX0dOVUNfXwogI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCiAjZWxzZQpAQCAtMTI5LDMzICsxMTUsMTQgQEAKIHJhaXNlX2Vycm1zZyhjaGFyICptc2csIFB5T2JqZWN0ICpzLCBQeV9zc2l6ZV90IGVuZCk7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfc3RyaW5nKFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaik7Ci1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpOwogc3RhdGljIFB5T2JqZWN0ICoKLV9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpOworZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKTsKIHN0YXRpYyBQeU9iamVjdCAqCiBlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwogCiAjZGVmaW5lIFNfQ0hBUihjKSAoYyA+PSAnICcgJiYgYyA8PSAnficgJiYgYyAhPSAnXFwnICYmIGMgIT0gJyInKQogI2RlZmluZSBJU19XSElURVNQQUNFKGMpICgoKGMpID09ICcgJykgfHwgKChjKSA9PSAnXHQnKSB8fCAoKGMpID09ICdcbicpIHx8ICgoYykgPT0gJ1xyJykpCiAKLXN0YXRpYyBpbnQKLV9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90ICpzaXplX3B0cikKLXsKLSAgICAvKiBQeU9iamVjdCB0byBQeV9zc2l6ZV90IGNvbnZlcnRlciAqLwotICAgICpzaXplX3B0ciA9IFB5TG9uZ19Bc1NzaXplX3Qobyk7Ci0gICAgaWYgKCpzaXplX3B0ciA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLV9jb252ZXJ0UHlJbnRfRnJvbVNzaXplX3QoUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlfc3NpemVfdCB0byBQeU9iamVjdCBjb252ZXJ0ZXIgKi8KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KCpzaXplX3B0cik7Ci19Ci0KIHN0YXRpYyBQeV9zc2l6ZV90CiBhc2NpaV9lc2NhcGVfdW5pY2hhcihQeV9VQ1M0IGMsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgUHlfc3NpemVfdCBjaGFycykKIHsKQEAgLTE3NCwxNCArMTQxLDEzIEBACiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAoYyA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICAgICAgLyogVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyICovCi0gICAgICAgICAgICAgICAgUHlfVUNTNCB2ID0gYyAtIDB4MTAwMDA7Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZDgwMCB8ICgodiA+PiAxMCkgJiAweDNmZik7CisgICAgICAgICAgICAgICAgUHlfVUNTNCB2ID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjKTsKICAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+IDEyKSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+ICA4KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjID4+ICA0KSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gUHlfaGV4ZGlnaXRzWyhjICAgICAgKSAmIDB4Zl07Ci0gICAgICAgICAgICAgICAgYyA9IDB4ZGMwMCB8ICh2ICYgMHgzZmYpOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAxMikgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAgOCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiA+PiAgNCkgJiAweGZdOworICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1sodiAgICAgICkgJiAweGZdOworICAgICAgICAgICAgICAgIGMgPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ1xcJzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICd1JzsKQEAgLTI2OCwxMyArMjM0LDIzIEBACiAgICAgICAgIGlmIChlcnJtc2dfZm4gPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPTyYpIiwgbXNnLCBzLCBfY29udmVydFB5SW50X0Zyb21Tc2l6ZV90LCAmZW5kKTsKKyAgICBweW1zZyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlcnJtc2dfZm4sICIoek9uKSIsIG1zZywgcywgZW5kKTsKICAgICBpZiAocHltc2cpIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIHB5bXNnKTsKICAgICAgICAgUHlfREVDUkVGKHB5bXNnKTsKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkCityYWlzZV9zdG9wX2l0ZXJhdGlvbihQeV9zc2l6ZV90IGlkeCkKK3sKKyAgICBQeU9iamVjdCAqdmFsdWUgPSBQeUxvbmdfRnJvbVNzaXplX3QoaWR4KTsKKyAgICBpZiAodmFsdWUgIT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfU3RvcEl0ZXJhdGlvbiwgdmFsdWUpOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIH0KK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIF9idWlsZF9ydmFsX2luZGV4X3R1cGxlKFB5T2JqZWN0ICpydmFsLCBQeV9zc2l6ZV90IGlkeCkgewogICAgIC8qIHJldHVybiAocnZhbCwgaWR4KSB0dXBsZSwgc3RlYWxpbmcgcmVmZXJlbmNlIHRvIHJ2YWwgKi8KQEAgLTM0NCw3ICszMjAsNyBAQAogICAgIGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHB5c3RyKTsKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocHlzdHIpOwogCi0gICAgaWYgKGVuZCA8IDAgfHwgbGVuIDw9IGVuZCkgeworICAgIGlmIChlbmQgPCAwIHx8IGxlbiA8IGVuZCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVuZCBpcyBvdXQgb2YgYm91bmRzIik7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CkBAIC01MTUsNyArNDkxLDcgQEAKICAgICBQeV9zc2l6ZV90IGVuZDsKICAgICBQeV9zc2l6ZV90IG5leHRfZW5kID0gLTE7CiAgICAgaW50IHN0cmljdCA9IDE7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTyZ8aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCBfY29udmVydFB5SW50X0FzU3NpemVfdCwgJmVuZCwgJnN0cmljdCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9ufGk6c2NhbnN0cmluZyIsICZweXN0ciwgJmVuZCwgJnN0cmljdCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CkBAIC02MzAsMTIgKzYwNiwxMiBAQAogICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KLSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7CisgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbWVtb2tleTsKIAogICAgICAgICAgICAgLyogcmVhZCBrZXkgKi8KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJyInKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJyInKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNjkyLDExICs2NjgsOSBAQAogICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICd9JykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNzA3LDEyICs2ODEsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3RyW2lkeF0gc2hvdWxkIGJlICd9JyAqLwotICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCiAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CiAKICAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKQEAgLTc2NCw4ICs3MzIsOCBAQAogICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8KLSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICddJykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7CisgICAgICAgIHdoaWxlICgxKSB7CiAKICAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gdGVybSAgKi8KICAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV91bmljb2RlKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CkBAIC03ODIsMTEgKzc1MCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJyYXkgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCi0gICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykgeworICAgICAgICAgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnXScpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTc5OSw3ICs3NjUsNyBAQAogCiAgICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpIHNob3VsZCBiZSAnXScgKi8KICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBweXN0ciwgZW5kX2lkeCk7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CkBAIC04NjcsNyArODMzLDcgQEAKICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICctJykgewogICAgICAgICBpZHgrKzsKICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTg4Myw3ICs4NDksNyBAQAogICAgIH0KICAgICAvKiBubyBpbnRlZ2VyIGRpZ2l0cywgZXJyb3IgKi8KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oc3RhcnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk3Niw3ICs5NDIsNyBAQAogICAgIGxlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHB5c3RyKTsKIAogICAgIGlmIChpZHggPj0gbGVuZ3RoKSB7Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKGlkeCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTA3OCw3ICsxMDQ0LDcgQEAKICAgICBQeVNjYW5uZXJPYmplY3QgKnM7CiAgICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7CiAgICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyY6c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaWR4KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT246c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsICZpZHgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CkBAIC0xMjc5LDggKzEyNDUsOCBAQAogCiAgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7CiAgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyY6X2l0ZXJlbmNvZGUiLCBrd2xpc3QsCi0gICAgICAgICZvYmosIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaW5kZW50X2xldmVsKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT246X2l0ZXJlbmNvZGUiLCBrd2xpc3QsCisgICAgICAgICZvYmosICZpbmRlbnRfbGV2ZWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoX1B5QWNjdV9Jbml0KCZhY2MpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzMjYsMTMgKzEyOTIsNDUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2VuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaikKK3sKKyAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUxvbmcgYW5kIFB5TG9uZyBzdWJjbGFzc2VzLgorICAgICAgIENhbGxzIGludCgpIG9uIFB5TG9uZyBzdWJjbGFzc2VzIGluIGNhc2UgdGhlIHN0cigpIHdhcyBjaGFuZ2VkLgorICAgICAgIEFkZGVkIHNwZWNpZmljYWxseSB0byBkZWFsIHdpdGggSW50RW51bS4gIFNlZSBJc3N1ZTE4MjY0LiAqLworICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqbG9uZ29iajsKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3Qob2JqKSkgeworICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb25nb2JqID0gUHlOdW1iZXJfTG9uZyhvYmopOworICAgICAgICBpZiAobG9uZ29iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gY29lcmNlIGludCBzdWJjbGFzcyB0byBpbnQiCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfU3RyKGxvbmdvYmopOworICAgICAgICBQeV9ERUNSRUYobG9uZ29iaik7CisgICAgfQorICAgIHJldHVybiBlbmNvZGVkOworfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCiBlbmNvZGVyX2VuY29kZV9mbG9hdChQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlGbG9hdCAqLworICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5RmxvYXQuCisgICAgICAgTW9kaWZpZWQgdG8gY2FsbCBmbG9hdCgpIG9uIGZsb2F0IHN1YmNsYXNzZXMgaW4gY2FzZSB0aGUgc3ViY2xhc3MKKyAgICAgICBjaGFuZ2VzIHRoZSByZXByLiAgU2VlIElzc3VlMTgyNjQuICAqLworICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqZmxvYXRvYmo7CiAgICAgZG91YmxlIGkgPSBQeUZsb2F0X0FTX0RPVUJMRShvYmopOwogICAgIGlmICghUHlfSVNfRklOSVRFKGkpKSB7CiAgICAgICAgIGlmICghcy0+YWxsb3dfbmFuKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk91dCBvZiByYW5nZSBmbG9hdCB2YWx1ZXMgYXJlIG5vdCBKU09OIGNvbXBsaWFudCIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50IgorICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGkgPiAwKSB7CkBAIC0xMzQ1LDggKzEzNDMsMjQgQEAKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiTmFOIik7CiAgICAgICAgIH0KICAgICB9Ci0gICAgLyogVXNlIGEgYmV0dGVyIGZsb2F0IGZvcm1hdCBoZXJlPyAqLwotICAgIHJldHVybiBQeU9iamVjdF9SZXByKG9iaik7CisgICAgLyogY29lcmNlIGZsb2F0IHN1YmNsYXNzZXMgdG8gZmxvYXQgKHByaW1hcmlseSBmb3IgRW51bSkgKi8KKyAgICBpZiAoUHlGbG9hdF9DaGVja0V4YWN0KG9iaikpIHsKKyAgICAgICAgLyogVXNlIGEgYmV0dGVyIGZsb2F0IGZvcm1hdCBoZXJlPyAqLworICAgICAgICBlbmNvZGVkID0gUHlPYmplY3RfUmVwcihvYmopOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZmxvYXRvYmogPSBQeU51bWJlcl9GbG9hdChvYmopOworICAgICAgICBpZiAoZmxvYXRvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIGNvZXJjZSBmbG9hdCBzdWJjbGFzcyB0byBmbG9hdCIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9SZXByKGZsb2F0b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGZsb2F0b2JqKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY29kZWQ7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMzkwLDcgKzE0MDQsNyBAQAogICAgICAgICByZXR1cm4gX3N0ZWFsX2FjY3VtdWxhdGUoYWNjLCBlbmNvZGVkKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKLSAgICAgICAgUHlPYmplY3QgKmVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQgPSBlbmNvZGVyX2VuY29kZV9sb25nKHMsIG9iaik7CiAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHJldHVybiBfc3RlYWxfYWNjdW11bGF0ZShhY2MsIGVuY29kZWQpOwpAQCAtMTU3NSw5ICsxNTg5LDEwIEBACiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhrZXkpKSB7Ci0gICAgICAgICAgICBrc3RyID0gUHlPYmplY3RfU3RyKGtleSk7Ci0gICAgICAgICAgICBpZiAoa3N0ciA9PSBOVUxMKQorICAgICAgICAgICAga3N0ciA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywga2V5KTsKKyAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoc2tpcGtleXMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKaW5kZXggY2M2ODhiYS4uNDAwYzM0NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMKQEAgLTE0NywyNiArMTQ3LDM0IEBACiAgICAgLyogaG9wZWZ1bGx5LCB0aGUgbG9jYWxlY29udiByZXN1bHQgc3Vydml2ZXMgdGhlIEMgbGlicmFyeSBjYWxscwogICAgICAgIGludm9sdmVkIGhlcmVpbiAqLwogCisjZGVmaW5lIFJFU1VMVChrZXksIG9iailcCisgICAgZG8geyBcCisgICAgICAgIGlmIChvYmogPT0gTlVMTCkgXAorICAgICAgICAgICAgZ290byBmYWlsZWQ7IFwKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwga2V5LCBvYmopIDwgMCkgeyBcCisgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsgXAorICAgICAgICAgICAgZ290byBmYWlsZWQ7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X0RFQ1JFRihvYmopOyBcCisgICAgfSB3aGlsZSAoMCkKKwogI2RlZmluZSBSRVNVTFRfU1RSSU5HKHMpXAotICAgIHggPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKGwtPnMsIE5VTEwpOyAgIFwKLSAgICBpZiAoIXgpIGdvdG8gZmFpbGVkO1wKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICNzLCB4KTtcCi0gICAgUHlfWERFQ1JFRih4KQorICAgIGRvIHsgXAorICAgICAgICB4ID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZShsLT5zLCBOVUxMKTsgXAorICAgICAgICBSRVNVTFQoI3MsIHgpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSRVNVTFRfSU5UKGkpXAotICAgIHggPSBQeUxvbmdfRnJvbUxvbmcobC0+aSk7XAotICAgIGlmICgheCkgZ290byBmYWlsZWQ7XAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgI2ksIHgpO1wKLSAgICBQeV9YREVDUkVGKHgpCisgICAgZG8geyBcCisgICAgICAgIHggPSBQeUxvbmdfRnJvbUxvbmcobC0+aSk7IFwKKyAgICAgICAgUkVTVUxUKCNpLCB4KTsgXAorICAgIH0gd2hpbGUgKDApCiAKICAgICAvKiBOdW1lcmljIGluZm9ybWF0aW9uICovCiAgICAgUkVTVUxUX1NUUklORyhkZWNpbWFsX3BvaW50KTsKICAgICBSRVNVTFRfU1RSSU5HKHRob3VzYW5kc19zZXApOwogICAgIHggPSBjb3B5X2dyb3VwaW5nKGwtPmdyb3VwaW5nKTsKLSAgICBpZiAoIXgpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgImdyb3VwaW5nIiwgeCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKKyAgICBSRVNVTFQoImdyb3VwaW5nIiwgeCk7CiAKICAgICAvKiBNb25ldGFyeSBpbmZvcm1hdGlvbiAqLwogICAgIFJFU1VMVF9TVFJJTkcoaW50X2N1cnJfc3ltYm9sKTsKQEAgLTE3NCwxMCArMTgyLDggQEAKICAgICBSRVNVTFRfU1RSSU5HKG1vbl9kZWNpbWFsX3BvaW50KTsKICAgICBSRVNVTFRfU1RSSU5HKG1vbl90aG91c2FuZHNfc2VwKTsKICAgICB4ID0gY29weV9ncm91cGluZyhsLT5tb25fZ3JvdXBpbmcpOwotICAgIGlmICgheCkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAibW9uX2dyb3VwaW5nIiwgeCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKKyAgICBSRVNVTFQoIm1vbl9ncm91cGluZyIsIHgpOworCiAgICAgUkVTVUxUX1NUUklORyhwb3NpdGl2ZV9zaWduKTsKICAgICBSRVNVTFRfU1RSSU5HKG5lZ2F0aXZlX3NpZ24pOwogICAgIFJFU1VMVF9JTlQoaW50X2ZyYWNfZGlnaXRzKTsKQEAgLTE5Miw3ICsxOTgsNiBAQAogCiAgIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHJlc3VsdCk7Ci0gICAgUHlfWERFQ1JFRih4KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbHNwcm9mLmMgYi9Nb2R1bGVzL19sc3Byb2YuYwppbmRleCBiMGEyMjZiLi44OTQ3ODg5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sc3Byb2YuYworKysgYi9Nb2R1bGVzL19sc3Byb2YuYwpAQCAtMzYsMTIgKzM2LDggQEAKICNlcnJvciAiVGhpcyBtb2R1bGUgcmVxdWlyZXMgZ2V0dGltZW9mZGF5KCkgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zISIKICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZWxzZQogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lcy5oPgotI2VuZGlmCiAKIHN0YXRpYyBQWV9MT05HX0xPTkcKIGhwVGltZXIodm9pZCkKQEAgLTIyNyw3ICsyMjMsNyBAQAogbmV3UHJvZmlsZXJFbnRyeShQcm9maWxlck9iamVjdCAqcE9iaiwgdm9pZCAqa2V5LCBQeU9iamVjdCAqdXNlck9iaikKIHsKICAgICBQcm9maWxlckVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNSw3ICsyMzEsNyBAQAogICAgIHVzZXJPYmogPSBub3JtYWxpemVVc2VyT2JqKHVzZXJPYmopOwogICAgIGlmICh1c2VyT2JqID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZnJlZShzZWxmKTsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmKTsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNjgsNyArMjY0LDcgQEAKIG5ld1N1YkVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCAgUHJvZmlsZXJFbnRyeSAqY2FsbGVyLCBQcm9maWxlckVudHJ5KiBlbnRyeSkKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI4Niw3ICsyODIsNyBAQAogc3RhdGljIGludCBmcmVlU3ViRW50cnkocm90YXRpbmdfbm9kZV90ICpoZWFkZXIsIHZvaWQgKmFyZykKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzdWJlbnRyeSA9IChQcm9maWxlclN1YkVudHJ5KikgaGVhZGVyOwotICAgIGZyZWUoc3ViZW50cnkpOworICAgIFB5TWVtX0ZyZWUoc3ViZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yOTUsNyArMjkxLDcgQEAKICAgICBQcm9maWxlckVudHJ5ICplbnRyeSA9IChQcm9maWxlckVudHJ5KikgaGVhZGVyOwogICAgIFJvdGF0aW5nVHJlZV9FbnVtKGVudHJ5LT5jYWxscywgZnJlZVN1YkVudHJ5LCBOVUxMKTsKICAgICBQeV9ERUNSRUYoZW50cnktPnVzZXJPYmopOwotICAgIGZyZWUoZW50cnkpOworICAgIFB5TWVtX0ZyZWUoZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDUsMTMgKzMwMSwxMyBAQAogICAgIHBPYmotPnByb2ZpbGVyRW50cmllcyA9IEVNUFRZX1JPVEFUSU5HX1RSRUU7CiAgICAgLyogcmVsZWFzZSB0aGUgbWVtb3J5IGhvbGQgYnkgdGhlIFByb2ZpbGVyQ29udGV4dHMgKi8KICAgICBpZiAocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCkgewotICAgICAgICBmcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOworICAgICAgICBQeU1lbV9GcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOwogICAgICAgICBwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKICAgICB9CiAgICAgd2hpbGUgKHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0KSB7CiAgICAgICAgIFByb2ZpbGVyQ29udGV4dCAqYyA9IHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0OwogICAgICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IGMtPnByZXZpb3VzOwotICAgICAgICBmcmVlKGMpOworICAgICAgICBQeU1lbV9GcmVlKGMpOwogICAgIH0KICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IE5VTEw7CiB9CkBAIC0zOTcsNyArMzkzLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogZnJlZSBsaXN0IGV4aGF1c3RlZCwgYWxsb2NhdGUgYSBuZXcgb25lICovCiAgICAgICAgIHBDb250ZXh0ID0gKFByb2ZpbGVyQ29udGV4dCopCi0gICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOworICAgICAgICAgICAgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckNvbnRleHQpKTsKICAgICAgICAgaWYgKHBDb250ZXh0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgICAgIGdvdG8gcmVzdG9yZVB5ZXJyOwpAQCAtNzE2LDcgKzcxMiw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBwQ29udGV4dC0+cHJldmlvdXM7CiAgICAgICAgIGlmIChwQ29udGV4dCkKLSAgICAgICAgICAgIGZyZWUocENvbnRleHQpOworICAgICAgICAgICAgUHlNZW1fRnJlZShwQ29udGV4dCk7CiAgICAgfQogCiB9CkBAIC04ODgsMTAgKzg4NCwxMiBAQAogICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJQcm9maWxlciIsIChQeU9iamVjdCAqKSZQeVByb2ZpbGVyX1R5cGUpOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0c0VudHJ5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfZW50cnlfZGVzYyk7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzU3ViRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c0VudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c1N1YkVudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c0VudHJ5VHlwZSk7CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c1N1YkVudHJ5VHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMgYi9Nb2R1bGVzL19sem1hbW9kdWxlLmMKaW5kZXggNjQzNjE2MC4uMTIxN2VkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbHptYW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwpAQCAtNTEsNiArNTEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgZmx1c2hlZDsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNjAsNiArNjEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgY2hlY2s7CiAgICAgY2hhciBlb2Y7CkBAIC0xMTcsNiArMTE5LDIyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCoKK1B5THptYV9NYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3QgaXRlbXMsIHNpemVfdCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDoKKyAgICAgICB0aGUgR0lMIGlzIG5vdCBoZWxkIHdoZW4gbHptYV9jb2RlKCkgaXMgY2FsbGVkICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorUHlMem1hX0ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCiAjaWYgQlVGU0laIDwgODE5MgogI2RlZmluZSBJTklUSUFMX0JVRkZFUl9TSVpFIDgxOTIKICNlbHNlCkBAIC02NjQsNiArNjgyLDExIEBACiAgICAgICAgIGlmICghdWludDMyX2NvbnZlcnRlcihwcmVzZXRfb2JqLCAmcHJlc2V0KSkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTkzOSw2ICs5NjIsMTEgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYwppbmRleCA5NDYwYzg5Li4xYWFmMzYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCkBAIC0xMCwyNSArMTAsMjMgQEAKICNpbmNsdWRlICJtdWx0aXByb2Nlc3NpbmcuaCIKIAogCi1QeU9iamVjdCAqUHJvY2Vzc0Vycm9yLCAqQnVmZmVyVG9vU2hvcnQ7Ci0KIC8qCiAgKiBGdW5jdGlvbiB3aGljaCByYWlzZXMgZXhjZXB0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcwogICovCiAKIFB5T2JqZWN0ICoKLW1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKQorX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCiB7CiAgICAgc3dpdGNoIChudW0pIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgY2FzZSBNUF9TVEFOREFSRF9FUlJPUjoKICAgICAgICAgaWYgKFR5cGUgPT0gTlVMTCkKLSAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19XaW5kb3dzRXJyb3I7CisgICAgICAgICAgICBUeXBlID0gUHlFeGNfT1NFcnJvcjsKICAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoVHlwZSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTVBfU09DS0VUX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCBXU0FHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UgLyogIU1TX1dJTkRPV1MgKi8KQEAgLTEwMSwxMyArOTksMTUgQEAKIHsKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBidWY7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBsZW5ndGg7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgInkqOnNlbmQiICwgJmhhbmRsZSwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbGVuZ3RoID0gKGludClQeV9NSU4oYnVmLmxlbiwgSU5UX01BWCk7CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGJ1Zi5sZW4sIDApOworICAgIHJldCA9IHNlbmQoKFNPQ0tFVCkgaGFuZGxlLCBidWYuYnVmLCBsZW5ndGgsIDApOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwpAQCAtMTI4LDYgKzEyOCw3IEBACiAgICAgeyJyZWN2IiwgbXVsdGlwcm9jZXNzaW5nX3JlY3YsIE1FVEhfVkFSQVJHUywgIiJ9LAogICAgIHsic2VuZCIsIG11bHRpcHJvY2Vzc2luZ19zZW5kLCBNRVRIX1ZBUkFSR1MsICIifSwKICNlbmRpZgorICAgIHsic2VtX3VubGluayIsIF9QeU1wX3NlbV91bmxpbmssIE1FVEhfVkFSQVJHUywgIiJ9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMTU5LDE5ICsxNjAsMTIgQEAKICAgICBpZiAoIW1vZHVsZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBHZXQgY29weSBvZiBCdWZmZXJUb29TaG9ydCAqLwotICAgIHRlbXAgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIm11bHRpcHJvY2Vzc2luZyIpOwotICAgIGlmICghdGVtcCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgQnVmZmVyVG9vU2hvcnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRlbXAsICJCdWZmZXJUb29TaG9ydCIpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgKGRlZmluZWQoSEFWRV9TRU1fT1BFTikgJiYgIWRlZmluZWQoUE9TSVhfU0VNQVBIT1JFU19OT1RfRU5BQkxFRCkpCi0gICAgLyogQWRkIFNlbUxvY2sgdHlwZSB0byBtb2R1bGUgKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZTZW1Mb2NrVHlwZSkgPCAwKQorICAgIC8qIEFkZCBfUHlNcF9TZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TXBfU2VtTG9ja1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfSU5DUkVGKCZTZW1Mb2NrVHlwZSk7CisgICAgUHlfSU5DUkVGKCZfUHlNcF9TZW1Mb2NrVHlwZSk7CiAgICAgewogICAgICAgICBQeU9iamVjdCAqcHlfc2VtX3ZhbHVlX21heDsKICAgICAgICAgLyogU29tZSBzeXN0ZW1zIGRlZmluZSBTRU1fVkFMVUVfTUFYIGFzIGFuIHVuc2lnbmVkIHZhbHVlIHRoYXQKQEAgLTE4MiwxMCArMTc2LDEwIEBACiAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4ID0gUHlMb25nX0Zyb21Mb25nKFNFTV9WQUxVRV9NQVgpOwogICAgICAgICBpZiAocHlfc2VtX3ZhbHVlX21heCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKFNlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKKyAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoX1B5TXBfU2VtTG9ja1R5cGUudHBfZGljdCwgIlNFTV9WQUxVRV9NQVgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweV9zZW1fdmFsdWVfbWF4KTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZTZW1Mb2NrVHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG1vZHVsZSwgIlNlbUxvY2siLCAoUHlPYmplY3QqKSZfUHlNcF9TZW1Mb2NrVHlwZSk7CiAjZW5kaWYKIAogICAgIC8qIEFkZCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCmluZGV4IGUzZGU5YmEuLjlhZWVhOGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAorKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKQEAgLTkxLDIzICs5MSwxMyBAQAogI2RlZmluZSBNUF9TT0NLRVRfRVJST1IgKC0xMDAyKQogI2RlZmluZSBNUF9FWENFUFRJT05fSEFTX0JFRU5fU0VUICgtMTAwMykKIAotUHlPYmplY3QgKm1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKTsKK1B5T2JqZWN0ICpfUHlNcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSk7CiAKIC8qCiAgKiBFeHRlcm5zIC0gbm90IGFsbCB3aWxsIHJlYWxseSBleGlzdCBvbiBhbGwgcGxhdGZvcm1zCiAgKi8KIAotZXh0ZXJuIFB5T2JqZWN0ICpCdWZmZXJUb29TaG9ydDsKLWV4dGVybiBQeVR5cGVPYmplY3QgU2VtTG9ja1R5cGU7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFBpcGVDb25uZWN0aW9uVHlwZTsKLQotLyoKLSAqIE1pc2NlbGxhbmVvdXMKLSAqLwotCi0jaWZuZGVmIE1JTgotIyAgZGVmaW5lIE1JTih4LCB5KSAoKHgpIDwgKHkpID8geCA6IHkpCi0jICBkZWZpbmUgTUFYKHgsIHkpICgoeCkgPiAoeSkgPyB4IDogeSkKLSNlbmRpZgorZXh0ZXJuIFB5VHlwZU9iamVjdCBfUHlNcF9TZW1Mb2NrVHlwZTsKK2V4dGVybiBQeU9iamVjdCAqX1B5TXBfc2VtX3VubGluayhQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncyk7CiAKICNlbmRpZiAvKiBNVUxUSVBST0NFU1NJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCmluZGV4IDJjMmIwMjAuLmRlODVhOTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYworKysgYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAgICBpbnQgY291bnQ7CiAgICAgaW50IG1heHZhbHVlOwogICAgIGludCBraW5kOworICAgIGNoYXIgKm5hbWU7CiB9IFNlbUxvY2tPYmplY3Q7CiAKICNkZWZpbmUgSVNNSU5FKG8pIChvLT5jb3VudCA+IDAgJiYgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpID09IG8tPmxhc3RfdGlkKQpAQCAtNDMsNyArNDQsNyBAQAogewogICAgIGxvbmcgcHJldmlvdXM7CiAKLSAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3QoaGFuZGxlLCAwKSkgeworICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdEV4KGhhbmRsZSwgMCwgRkFMU0UpKSB7CiAgICAgY2FzZSBXQUlUX09CSkVDVF8wOgogICAgICAgICBpZiAoIVJlbGVhc2VTZW1hcGhvcmUoaGFuZGxlLCAxLCAmcHJldmlvdXMpKQogICAgICAgICAgICAgcmV0dXJuIE1QX1NUQU5EQVJEX0VSUk9SOwpAQCAtOTksNyArMTAwLDcgQEAKICAgICB9CiAKICAgICAvKiBjaGVjayB3aGV0aGVyIHdlIGNhbiBhY3F1aXJlIHdpdGhvdXQgcmVsZWFzaW5nIHRoZSBHSUwgYW5kIGJsb2NraW5nICovCi0gICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi0+aGFuZGxlLCAwKSA9PSBXQUlUX09CSkVDVF8wKSB7CisgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3RFeChzZWxmLT5oYW5kbGUsIDAsIEZBTFNFKSA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgIHNlbGYtPmxhc3RfdGlkID0gR2V0Q3VycmVudFRocmVhZElkKCk7CiAgICAgICAgICsrc2VsZi0+Y291bnQ7CiAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtMTE4LDcgKzExOSw3IEBACiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmIChzaWdpbnRfZXZlbnQgIT0gTlVMTCkKICAgICAgICAgUmVzZXRFdmVudChzaWdpbnRfZXZlbnQpOwotICAgIHJlcyA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMobmhhbmRsZXMsIGhhbmRsZXMsIEZBTFNFLCBmdWxsX21zZWNzKTsKKyAgICByZXMgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzRXgobmhhbmRsZXMsIGhhbmRsZXMsIEZBTFNFLCBmdWxsX21zZWNzLCBGQUxTRSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIC8qIGhhbmRsZSByZXN1bHQgKi8KQEAgLTIwMCw3ICsyMDEsNyBAQAogI2lmbmRlZiBIQVZFX1NFTV9USU1FRFdBSVQKICMgIGRlZmluZSBzZW1fdGltZWR3YWl0KHNlbSxkZWFkbGluZSkgc2VtX3RpbWVkd2FpdF9zYXZlKHNlbSxkZWFkbGluZSxfc2F2ZSkKIAotaW50CitzdGF0aWMgaW50CiBzZW1fdGltZWR3YWl0X3NhdmUoc2VtX3QgKnNlbSwgc3RydWN0IHRpbWVzcGVjICpkZWFkbGluZSwgUHlUaHJlYWRTdGF0ZSAqX3NhdmUpCiB7CiAgICAgaW50IHJlczsKQEAgLTM5Nyw3ICszOTgsOCBAQAogICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uZXdzZW1sb2Nrb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgU0VNX0hBTkRMRSBoYW5kbGUsIGludCBraW5kLCBpbnQgbWF4dmFsdWUpCituZXdzZW1sb2Nrb2JqZWN0KFB5VHlwZU9iamVjdCAqdHlwZSwgU0VNX0hBTkRMRSBoYW5kbGUsIGludCBraW5kLCBpbnQgbWF4dmFsdWUsCisgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUpCiB7CiAgICAgU2VtTG9ja09iamVjdCAqc2VsZjsKIApAQCAtNDA5LDIxICs0MTEsMjIgQEAKICAgICBzZWxmLT5jb3VudCA9IDA7CiAgICAgc2VsZi0+bGFzdF90aWQgPSAwOwogICAgIHNlbGYtPm1heHZhbHVlID0gbWF4dmFsdWU7CisgICAgc2VsZi0+bmFtZSA9IG5hbWU7CiAgICAgcmV0dXJuIChQeU9iamVjdCopc2VsZjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHNlbWxvY2tfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGNoYXIgYnVmZmVyWzI1Nl07CiAgICAgU0VNX0hBTkRMRSBoYW5kbGUgPSBTRU1fRkFJTEVEOwotICAgIGludCBraW5kLCBtYXh2YWx1ZSwgdmFsdWU7CisgICAgaW50IGtpbmQsIG1heHZhbHVlLCB2YWx1ZSwgdW5saW5rOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJraW5kIiwgInZhbHVlIiwgIm1heHZhbHVlIiwgTlVMTH07Ci0gICAgc3RhdGljIGludCBjb3VudGVyID0gMDsKKyAgICBjaGFyICpuYW1lLCAqbmFtZV9jb3B5ID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtpbmQiLCAidmFsdWUiLCAibWF4dmFsdWUiLCAibmFtZSIsICJ1bmxpbmsiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJpaWkiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtpbmQsICZ2YWx1ZSwgJm1heHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaWlpc2kiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtpbmQsICZ2YWx1ZSwgJm1heHZhbHVlLCAmbmFtZSwgJnVubGluaykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKGtpbmQgIT0gUkVDVVJTSVZFX01VVEVYICYmIGtpbmQgIT0gU0VNQVBIT1JFKSB7CkBAIC00MzEsMTggKzQzNCwyMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICIvbXAlbGQtJWQiLCAobG9uZylnZXRwaWQoKSwgY291bnRlcisrKTsKKyAgICBpZiAoIXVubGluaykgeworICAgICAgICBuYW1lX2NvcHkgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisgICAgICAgIGlmIChuYW1lX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgc3RyY3B5KG5hbWVfY29weSwgbmFtZSk7CisgICAgfQogCiAgICAgU0VNX0NMRUFSX0VSUk9SKCk7Ci0gICAgaGFuZGxlID0gU0VNX0NSRUFURShidWZmZXIsIHZhbHVlLCBtYXh2YWx1ZSk7CisgICAgaGFuZGxlID0gU0VNX0NSRUFURShuYW1lLCB2YWx1ZSwgbWF4dmFsdWUpOwogICAgIC8qIE9uIFdpbmRvd3Mgd2Ugc2hvdWxkIGZhaWwgaWYgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0FMUkVBRFlfRVhJU1RTICovCiAgICAgaWYgKGhhbmRsZSA9PSBTRU1fRkFJTEVEIHx8IFNFTV9HRVRfTEFTVF9FUlJPUigpICE9IDApCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIAotICAgIGlmIChTRU1fVU5MSU5LKGJ1ZmZlcikgPCAwKQorICAgIGlmICh1bmxpbmsgJiYgU0VNX1VOTElOSyhuYW1lKSA8IDApCiAgICAgICAgIGdvdG8gZmFpbHVyZTsKIAotICAgIHJlc3VsdCA9IG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSk7CisgICAgcmVzdWx0ID0gbmV3c2VtbG9ja29iamVjdCh0eXBlLCBoYW5kbGUsIGtpbmQsIG1heHZhbHVlLCBuYW1lX2NvcHkpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKQEAgLTQ1MSw3ICs0NTksOCBAQAogICBmYWlsdXJlOgogICAgIGlmIChoYW5kbGUgIT0gU0VNX0ZBSUxFRCkKICAgICAgICAgU0VNX0NMT1NFKGhhbmRsZSk7Ci0gICAgbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgIFB5TWVtX0ZyZWUobmFtZV9jb3B5KTsKKyAgICBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ2MCwxMiArNDY5LDMwIEBACiB7CiAgICAgU0VNX0hBTkRMRSBoYW5kbGU7CiAgICAgaW50IGtpbmQsIG1heHZhbHVlOworICAgIGNoYXIgKm5hbWUsICpuYW1lX2NvcHkgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfU0VNX0hBTkRMRSAiaWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAma2luZCwgJm1heHZhbHVlKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9TRU1fSEFORExFICJpaXoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAma2luZCwgJm1heHZhbHVlLCAmbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSk7CisgICAgaWYgKG5hbWUgIT0gTlVMTCkgeworICAgICAgICBuYW1lX2NvcHkgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMSk7CisgICAgICAgIGlmIChuYW1lX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBzdHJjcHkobmFtZV9jb3B5LCBuYW1lKTsKKyAgICB9CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgaGFuZGxlID0gc2VtX29wZW4obmFtZSwgMCk7CisgICAgICAgIGlmIChoYW5kbGUgPT0gU0VNX0ZBSUxFRCkgeworICAgICAgICAgICAgUHlNZW1fRnJlZShuYW1lX2NvcHkpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCisgICAgcmV0dXJuIG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSwgbmFtZV9jb3B5KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ3Myw2ICs1MDAsNyBAQAogewogICAgIGlmIChzZWxmLT5oYW5kbGUgIT0gU0VNX0ZBSUxFRCkKICAgICAgICAgU0VNX0NMT1NFKHNlbGYtPmhhbmRsZSk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5uYW1lKTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTQ5OCw3ICs1MjYsNyBAQAogI2Vsc2UKICAgICBpbnQgc3ZhbDsKICAgICBpZiAoU0VNX0dFVFZBTFVFKHNlbGYtPmhhbmRsZSwgJnN2YWwpIDwgMCkKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICAvKiBzb21lIHBvc2l4IGltcGxlbWVudGF0aW9ucyB1c2UgbmVnYXRpdmUgbnVtYmVycyB0byBpbmRpY2F0ZQogICAgICAgIHRoZSBudW1iZXIgb2Ygd2FpdGluZyB0aHJlYWRzICovCiAgICAgaWYgKHN2YWwgPCAwKQpAQCAtNTE0LDE2ICs1NDIsMTYgQEAKICAgICBpZiAoc2VtX3RyeXdhaXQoc2VsZi0+aGFuZGxlKSA8IDApIHsKICAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwotICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzZW1fcG9zdChzZWxmLT5oYW5kbGUpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgICAgICByZXR1cm4gX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgfQogI2Vsc2UKICAgICBpbnQgc3ZhbDsKICAgICBpZiAoU0VNX0dFVFZBTFVFKHNlbGYtPmhhbmRsZSwgJnN2YWwpIDwgMCkKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKXN2YWwgPT0gMCk7CiAjZW5kaWYKIH0KQEAgLTU3NCw2ICs2MDIsOCBAQAogICAgICAiIn0sCiAgICAgeyJtYXh2YWx1ZSIsIFRfSU5ULCBvZmZzZXRvZihTZW1Mb2NrT2JqZWN0LCBtYXh2YWx1ZSksIFJFQURPTkxZLAogICAgICAiIn0sCisgICAgeyJuYW1lIiwgVF9TVFJJTkcsIG9mZnNldG9mKFNlbUxvY2tPYmplY3QsIG5hbWUpLCBSRUFET05MWSwKKyAgICAgIiJ9LAogICAgIHtOVUxMfQogfTsKIApAQCAtNTgxLDcgKzYxMSw3IEBACiAgKiBTZW1hcGhvcmUgdHlwZQogICovCiAKLVB5VHlwZU9iamVjdCBTZW1Mb2NrVHlwZSA9IHsKK1B5VHlwZU9iamVjdCBfUHlNcF9TZW1Mb2NrVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrIiwKICAgICAvKiB0cF9iYXNpY3NpemUgICAgICAqLyBzaXplb2YoU2VtTG9ja09iamVjdCksCkBAIC02MjEsMyArNjUxLDIzIEBACiAgICAgLyogdHBfYWxsb2MgICAgICAgICAgKi8gMCwKICAgICAvKiB0cF9uZXcgICAgICAgICAgICAqLyBzZW1sb2NrX25ldywKIH07CisKKy8qCisgKiBGdW5jdGlvbiB0byB1bmxpbmsgc2VtYXBob3JlIG5hbWVzCisgKi8KKworUHlPYmplY3QgKgorX1B5TXBfc2VtX3VubGluayhQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJm5hbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChTRU1fVU5MSU5LKG5hbWUpIDwgMCkgeworICAgICAgICBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5X1JFVFVSTl9OT05FOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fb3Bjb2RlLmMgYi9Nb2R1bGVzL19vcGNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWNmZmUxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fb3Bjb2RlLmMKQEAgLTAsMCArMSwxMTcgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJvcGNvZGUuaCIKKworLypbY2xpbmljXQorbW9kdWxlIF9vcGNvZGUKK1tjbGluaWNdKi8KKy8qW2NsaW5pYyBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisvKltjbGluaWNdCisKK19vcGNvZGUuc3RhY2tfZWZmZWN0IC0+IGludAorCisgIG9wY29kZTogaW50CisKKyAgWworICBvcGFyZzogaW50CisgIF0KKyAgLworCitDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfXywKKyJzdGFja19lZmZlY3Qob3Bjb2RlLCBbb3BhcmddKVxuIgorIkNvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiB0aGUgb3Bjb2RlLiIpOworCisjZGVmaW5lIF9PUENPREVfU1RBQ0tfRUZGRUNUX01FVEhPRERFRiAgICBcCisgICAgeyJzdGFja19lZmZlY3QiLCAoUHlDRnVuY3Rpb24pX29wY29kZV9zdGFja19lZmZlY3QsIE1FVEhfVkFSQVJHUywgX29wY29kZV9zdGFja19lZmZlY3RfX2RvY19ffSwKKworc3RhdGljIGludAorX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgb3Bjb2RlLCBpbnQgZ3JvdXBfcmlnaHRfMSwgaW50IG9wYXJnKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19vcGNvZGVfc3RhY2tfZWZmZWN0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBvcGNvZGU7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIGludCBvcGFyZyA9IDA7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6c3RhY2tfZWZmZWN0IiwgJm9wY29kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTpzdGFja19lZmZlY3QiLCAmb3Bjb2RlLCAmb3BhcmcpKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ3JvdXBfcmlnaHRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJfb3Bjb2RlLnN0YWNrX2VmZmVjdCByZXF1aXJlcyAxIHRvIDIgYXJndW1lbnRzIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgX3JldHVybl92YWx1ZSA9IF9vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwobW9kdWxlLCBvcGNvZGUsIGdyb3VwX3JpZ2h0XzEsIG9wYXJnKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIGludAorX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgb3Bjb2RlLCBpbnQgZ3JvdXBfcmlnaHRfMSwgaW50IG9wYXJnKQorLypbY2xpbmljIGNoZWNrc3VtOiBlODgwZTYyZGM3YjBkZTczNDAzMDI2ZWFmNGY4MDc0YWExMDYzNThiXSovCit7CisgICAgaW50IGVmZmVjdDsKKyAgICBpZiAoSEFTX0FSRyhvcGNvZGUpKSB7ICAgICAgICAKKyAgICAgICAgaWYgKCFncm91cF9yaWdodF8xKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInN0YWNrX2VmZmVjdDogb3Bjb2RlIHJlcXVpcmVzIG9wYXJnIGJ1dCBvcGFyZyB3YXMgbm90IHNwZWNpZmllZCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGdyb3VwX3JpZ2h0XzEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgInN0YWNrX2VmZmVjdDogb3Bjb2RlIGRvZXMgbm90IHBlcm1pdCBvcGFyZyBidXQgb3Bhcmcgd2FzIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVmZmVjdCA9IFB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChvcGNvZGUsIG9wYXJnKTsKKyAgICBpZiAoZWZmZWN0ID09IFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImludmFsaWQgb3Bjb2RlIG9yIG9wYXJnIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBlZmZlY3Q7Cit9CisKKworCisKK3N0YXRpYyBQeU1ldGhvZERlZgorb3Bjb2RlX2Z1bmN0aW9uc1tdID0gIHsKKyAgICBfT1BDT0RFX1NUQUNLX0VGRkVDVF9NRVRIT0RERUYKKyAgICB7TlVMTCwgTlVMTCwgMCwgTlVMTH0KK307CisKKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBvcGNvZGVtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfb3Bjb2RlIiwKKyAgICAiT3Bjb2RlIHN1cHBvcnQgbW9kdWxlLiIsCisgICAgLTEsCisgICAgb3Bjb2RlX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0X19vcGNvZGUodm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZvcGNvZGVtb2R1bGUpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vcGVyYXRvci5jIGIvTW9kdWxlcy9fb3BlcmF0b3IuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBNb2R1bGVzL29wZXJhdG9yLmMKcmVuYW1lIHRvIE1vZHVsZXMvX29wZXJhdG9yLmMKaW5kZXggNTE1NmI2Yi4uZThiZWYwNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vcGVyYXRvci5jCisrKyBiL01vZHVsZXMvX29wZXJhdG9yLmMKQEAgLTIwOCw2ICsyMDgsMzEgQEAKICAgICByZXR1cm4gKHJlc3VsdCA9PSAwKTsKIH0KIAorUHlEb2NfU1RSVkFSKGxlbmd0aF9oaW50X19kb2NfXywKKyJsZW5ndGhfaGludChvYmosIGRlZmF1bHQ9MCkgLT4gaW50XG4iCisiUmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gb2JqLlxuIgorIlRoaXMgaXMgdXNlZnVsIGZvciBwcmVzaXppbmcgY29udGFpbmVycyB3aGVuIGJ1aWxkaW5nIGZyb20gYW5cbiIKKyJpdGVyYWJsZS5cbiIKKyJcbiIKKyJJZiB0aGUgb2JqZWN0IHN1cHBvcnRzIGxlbigpLCB0aGUgcmVzdWx0IHdpbGwgYmVcbiIKKyJleGFjdC4gT3RoZXJ3aXNlLCBpdCBtYXkgb3Zlci0gb3IgdW5kZXItZXN0aW1hdGUgYnkgYW5cbiIKKyJhcmJpdHJhcnkgYW1vdW50LiBUaGUgcmVzdWx0IHdpbGwgYmUgYW4gaW50ZWdlciA+PSAwLiIpOworCitzdGF0aWMgUHlPYmplY3QgKmxlbmd0aF9oaW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5X3NzaXplX3QgZGVmYXVsdHZhbHVlID0gMCwgcmVzOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xuOmxlbmd0aF9oaW50IiwgJm9iaiwgJmRlZmF1bHR2YWx1ZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlcyA9IFB5T2JqZWN0X0xlbmd0aEhpbnQob2JqLCBkZWZhdWx0dmFsdWUpOworICAgIGlmIChyZXMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCisKIFB5RG9jX1NUUlZBUihjb21wYXJlX2RpZ2VzdF9fZG9jX18sCiAiY29tcGFyZV9kaWdlc3QoYSwgYikgLT4gYm9vbFxuIgogIlxuIgpAQCAtMjk3LDE3ICszMjIsMTUgQEAKIC8qIG9wZXJhdG9yIG1ldGhvZHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2RlZmluZSBzcGFtMShPUCxET0MpIHsjT1AsIE9QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwKLSNkZWZpbmUgc3BhbTIoT1AsQUxUT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX1ZBUkFSR1MsIFB5RG9jX1NUUihET0MpfSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgeyNBTFRPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCisjZGVmaW5lIHNwYW0yKE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCiAjZGVmaW5lIHNwYW0xbyhPUCxET0MpIHsjT1AsIE9QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKLSNkZWZpbmUgc3BhbTJvKE9QLEFMVE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsjQUxUT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LAorI2RlZmluZSBzcGFtMm8oT1AsRE9DKSB7I09QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBvcGVyYXRvcl9tZXRob2RzW10gPSB7CiAKIHNwYW0xbyh0cnV0aCwKICAidHJ1dGgoYSkgLS0gUmV0dXJuIFRydWUgaWYgYSBpcyB0cnVlLCBGYWxzZSBvdGhlcndpc2UuIikKLXNwYW0yKGNvbnRhaW5zLF9fY29udGFpbnNfXywKK3NwYW0yKGNvbnRhaW5zLAogICJjb250YWlucyhhLCBiKSAtLSBTYW1lIGFzIGIgaW4gYSAobm90ZSByZXZlcnNlZCBvcGVyYW5kcykuIikKIHNwYW0xKGluZGV4T2YsCiAgImluZGV4T2YoYSwgYikgLS0gUmV0dXJuIHRoZSBmaXJzdCBpbmRleCBvZiBiIGluIGEuIikKQEAgLTMxNiw1NiArMzM5LDU4IEBACiAKIHNwYW0xKGlzXywgImlzXyhhLCBiKSAtLSBTYW1lIGFzIGEgaXMgYi4iKQogc3BhbTEoaXNfbm90LCAiaXNfbm90KGEsIGIpIC0tIFNhbWUgYXMgYSBpcyBub3QgYi4iKQotc3BhbTJvKGluZGV4LCBfX2luZGV4X18sICJpbmRleChhKSAtLSBTYW1lIGFzIGEuX19pbmRleF9fKCkiKQotc3BhbTIoYWRkLF9fYWRkX18sICJhZGQoYSwgYikgLS0gU2FtZSBhcyBhICsgYi4iKQotc3BhbTIoc3ViLF9fc3ViX18sICJzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC0gYi4iKQotc3BhbTIobXVsLF9fbXVsX18sICJtdWwoYSwgYikgLS0gU2FtZSBhcyBhICogYi4iKQotc3BhbTIoZmxvb3JkaXYsX19mbG9vcmRpdl9fLCAiZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vIGIuIikKLXNwYW0yKHRydWVkaXYsX190cnVlZGl2X18sICJ0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvIGIuIikKLXNwYW0yKG1vZCxfX21vZF9fLCAibW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlIGIuIikKLXNwYW0ybyhuZWcsX19uZWdfXywgIm5lZyhhKSAtLSBTYW1lIGFzIC1hLiIpCi1zcGFtMm8ocG9zLF9fcG9zX18sICJwb3MoYSkgLS0gU2FtZSBhcyArYS4iKQotc3BhbTJvKGFicyxfX2Fic19fLCAiYWJzKGEpIC0tIFNhbWUgYXMgYWJzKGEpLiIpCi1zcGFtMm8oaW52LF9faW52X18sICJpbnYoYSkgLS0gU2FtZSBhcyB+YS4iKQotc3BhbTJvKGludmVydCxfX2ludmVydF9fLCAiaW52ZXJ0KGEpIC0tIFNhbWUgYXMgfmEuIikKLXNwYW0yKGxzaGlmdCxfX2xzaGlmdF9fLCAibHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PCBiLiIpCi1zcGFtMihyc2hpZnQsX19yc2hpZnRfXywgInJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj4gYi4iKQotc3BhbTJvKG5vdF8sX19ub3RfXywgIm5vdF8oYSkgLS0gU2FtZSBhcyBub3QgYS4iKQotc3BhbTIoYW5kXyxfX2FuZF9fLCAiYW5kXyhhLCBiKSAtLSBTYW1lIGFzIGEgJiBiLiIpCi1zcGFtMih4b3IsX194b3JfXywgInhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXiBiLiIpCi1zcGFtMihvcl8sX19vcl9fLCAib3JfKGEsIGIpIC0tIFNhbWUgYXMgYSB8IGIuIikKLXNwYW0yKGlhZGQsX19pYWRkX18sICJhID0gaWFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKz0gYi4iKQotc3BhbTIoaXN1YixfX2lzdWJfXywgImEgPSBpc3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtPSBiLiIpCi1zcGFtMihpbXVsLF9faW11bF9fLCAiYSA9IGltdWwoYSwgYikgLS0gU2FtZSBhcyBhICo9IGIuIikKLXNwYW0yKGlmbG9vcmRpdixfX2lmbG9vcmRpdl9fLCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKLXNwYW0yKGl0cnVlZGl2LF9faXRydWVkaXZfXywgImEgPSBpdHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLz0gYiIpCi1zcGFtMihpbW9kLF9faW1vZF9fLCAiYSA9IGltb2QoYSwgYikgLS0gU2FtZSBhcyBhICU9IGIuIikKLXNwYW0yKGlsc2hpZnQsX19pbHNoaWZ0X18sICJhID0gaWxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDw9IGIuIikKLXNwYW0yKGlyc2hpZnQsX19pcnNoaWZ0X18sICJhID0gaXJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj49IGIuIikKLXNwYW0yKGlhbmQsX19pYW5kX18sICJhID0gaWFuZChhLCBiKSAtLSBTYW1lIGFzIGEgJj0gYi4iKQotc3BhbTIoaXhvcixfX2l4b3JfXywgImEgPSBpeG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBePSBiLiIpCi1zcGFtMihpb3IsX19pb3JfXywgImEgPSBpb3IoYSwgYikgLS0gU2FtZSBhcyBhIHw9IGIuIikKLXNwYW0yKGNvbmNhdCxfX2NvbmNhdF9fLAorc3BhbTJvKGluZGV4LCAiaW5kZXgoYSkgLS0gU2FtZSBhcyBhLl9faW5kZXhfXygpIikKK3NwYW0yKGFkZCwgImFkZChhLCBiKSAtLSBTYW1lIGFzIGEgKyBiLiIpCitzcGFtMihzdWIsICJzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC0gYi4iKQorc3BhbTIobXVsLCAibXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqIGIuIikKK3NwYW0yKGZsb29yZGl2LCAiZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vIGIuIikKK3NwYW0yKHRydWVkaXYsICJ0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvIGIuIikKK3NwYW0yKG1vZCwgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCitzcGFtMm8obmVnLCAibmVnKGEpIC0tIFNhbWUgYXMgLWEuIikKK3NwYW0ybyhwb3MsICJwb3MoYSkgLS0gU2FtZSBhcyArYS4iKQorc3BhbTJvKGFicywgImFicyhhKSAtLSBTYW1lIGFzIGFicyhhKS4iKQorc3BhbTJvKGludiwgImludihhKSAtLSBTYW1lIGFzIH5hLiIpCitzcGFtMm8oaW52ZXJ0LCAiaW52ZXJ0KGEpIC0tIFNhbWUgYXMgfmEuIikKK3NwYW0yKGxzaGlmdCwgImxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDwgYi4iKQorc3BhbTIocnNoaWZ0LCAicnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+PiBiLiIpCitzcGFtMm8obm90XywgIm5vdF8oYSkgLS0gU2FtZSBhcyBub3QgYS4iKQorc3BhbTIoYW5kXywgImFuZF8oYSwgYikgLS0gU2FtZSBhcyBhICYgYi4iKQorc3BhbTIoeG9yLCAieG9yKGEsIGIpIC0tIFNhbWUgYXMgYSBeIGIuIikKK3NwYW0yKG9yXywgIm9yXyhhLCBiKSAtLSBTYW1lIGFzIGEgfCBiLiIpCitzcGFtMihpYWRkLCAiYSA9IGlhZGQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIuIikKK3NwYW0yKGlzdWIsICJhID0gaXN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLT0gYi4iKQorc3BhbTIoaW11bCwgImEgPSBpbXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqPSBiLiIpCitzcGFtMihpZmxvb3JkaXYsICJhID0gaWZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLz0gYi4iKQorc3BhbTIoaXRydWVkaXYsICJhID0gaXRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC89IGIiKQorc3BhbTIoaW1vZCwgImEgPSBpbW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlPSBiLiIpCitzcGFtMihpbHNoaWZ0LCAiYSA9IGlsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8PSBiLiIpCitzcGFtMihpcnNoaWZ0LCAiYSA9IGlyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+PSBiLiIpCitzcGFtMihpYW5kLCAiYSA9IGlhbmQoYSwgYikgLS0gU2FtZSBhcyBhICY9IGIuIikKK3NwYW0yKGl4b3IsICJhID0gaXhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXj0gYi4iKQorc3BhbTIoaW9yLCAiYSA9IGlvcihhLCBiKSAtLSBTYW1lIGFzIGEgfD0gYi4iKQorc3BhbTIoY29uY2F0LAogICJjb25jYXQoYSwgYikgLS0gU2FtZSBhcyBhICsgYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIpCi1zcGFtMihpY29uY2F0LF9faWNvbmNhdF9fLAorc3BhbTIoaWNvbmNhdCwKICAiYSA9IGljb25jYXQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iKQotc3BhbTIoZ2V0aXRlbSxfX2dldGl0ZW1fXywKK3NwYW0yKGdldGl0ZW0sCiAgImdldGl0ZW0oYSwgYikgLS0gU2FtZSBhcyBhW2JdLiIpCi1zcGFtMihzZXRpdGVtLF9fc2V0aXRlbV9fLAorc3BhbTIoc2V0aXRlbSwKICAic2V0aXRlbShhLCBiLCBjKSAtLSBTYW1lIGFzIGFbYl0gPSBjLiIpCi1zcGFtMihkZWxpdGVtLF9fZGVsaXRlbV9fLAorc3BhbTIoZGVsaXRlbSwKICAiZGVsaXRlbShhLCBiKSAtLSBTYW1lIGFzIGRlbCBhW2JdLiIpCi1zcGFtMihwb3csX19wb3dfXywgInBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKiogYi4iKQotc3BhbTIoaXBvdyxfX2lwb3dfXywgImEgPSBpcG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKj0gYi4iKQotc3BhbTIobHQsX19sdF9fLCAibHQoYSwgYikgLS0gU2FtZSBhcyBhPGIuIikKLXNwYW0yKGxlLF9fbGVfXywgImxlKGEsIGIpIC0tIFNhbWUgYXMgYTw9Yi4iKQotc3BhbTIoZXEsX19lcV9fLCAiZXEoYSwgYikgLS0gU2FtZSBhcyBhPT1iLiIpCi1zcGFtMihuZSxfX25lX18sICJuZShhLCBiKSAtLSBTYW1lIGFzIGEhPWIuIikKLXNwYW0yKGd0LF9fZ3RfXywgImd0KGEsIGIpIC0tIFNhbWUgYXMgYT5iLiIpCi1zcGFtMihnZSxfX2dlX18sICJnZShhLCBiKSAtLSBTYW1lIGFzIGE+PWIuIikKK3NwYW0yKHBvdywgInBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKiogYi4iKQorc3BhbTIoaXBvdywgImEgPSBpcG93KGEsIGIpIC0tIFNhbWUgYXMgYSAqKj0gYi4iKQorc3BhbTIobHQsICJsdChhLCBiKSAtLSBTYW1lIGFzIGE8Yi4iKQorc3BhbTIobGUsICJsZShhLCBiKSAtLSBTYW1lIGFzIGE8PWIuIikKK3NwYW0yKGVxLCAiZXEoYSwgYikgLS0gU2FtZSBhcyBhPT1iLiIpCitzcGFtMihuZSwgIm5lKGEsIGIpIC0tIFNhbWUgYXMgYSE9Yi4iKQorc3BhbTIoZ3QsICJndChhLCBiKSAtLSBTYW1lIGFzIGE+Yi4iKQorc3BhbTIoZ2UsICJnZShhLCBiKSAtLSBTYW1lIGFzIGE+PWIuIikKIAogICAgIHsiX2NvbXBhcmVfZGlnZXN0IiwgKFB5Q0Z1bmN0aW9uKWNvbXBhcmVfZGlnZXN0LCBNRVRIX1ZBUkFSR1MsCiAgICAgIGNvbXBhcmVfZGlnZXN0X19kb2NfX30sCisgICAgIHsibGVuZ3RoX2hpbnQiLCAoUHlDRnVuY3Rpb24pbGVuZ3RoX2hpbnQsIE1FVEhfVkFSQVJHUywKKyAgICAgbGVuZ3RoX2hpbnRfX2RvY19ffSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogCiB9OwpAQCAtODkyLDEyICs5MTcsMTIgQEAKIH07CiAKIAotLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKCptdXN0KiBiZSBjYWxsZWQgUHlJbml0X29wZXJhdG9yKSAqLworLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKCptdXN0KiBiZSBjYWxsZWQgUHlJbml0X19vcGVyYXRvcikgKi8KIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG9wZXJhdG9ybW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAib3BlcmF0b3IiLAorICAgICJfb3BlcmF0b3IiLAogICAgIG9wZXJhdG9yX2RvYywKICAgICAtMSwKICAgICBvcGVyYXRvcl9tZXRob2RzLApAQCAtOTA4LDcgKzkzMyw3IEBACiB9OwogCiBQeU1PRElOSVRfRlVOQwotUHlJbml0X29wZXJhdG9yKHZvaWQpCitQeUluaXRfX29wZXJhdG9yKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3BpY2tsZS5jIGIvTW9kdWxlcy9fcGlja2xlLmMKaW5kZXggYWU4MDFmNy4uMzMwYjE3ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcGlja2xlLmMKKysrIGIvTW9kdWxlcy9fcGlja2xlLmMKQEAgLTQsOSArNCwzMyBAQAogUHlEb2NfU1RSVkFSKHBpY2tsZV9tb2R1bGVfZG9jLAogIk9wdGltaXplZCBDIGltcGxlbWVudGF0aW9uIGZvciB0aGUgUHl0aG9uIHBpY2tsZSBtb2R1bGUuIik7CiAKKy8qW2NsaW5pY10KK21vZHVsZSBfcGlja2xlCitjbGFzcyBfcGlja2xlLlBpY2tsZXIKK2NsYXNzIF9waWNrbGUuUGlja2xlck1lbW9Qcm94eQorY2xhc3MgX3BpY2tsZS5VbnBpY2tsZXIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5CitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworLypbcHl0aG9uXQorY2xhc3MgUGlja2xlck9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiUGlja2xlck9iamVjdCAqIgorCitjbGFzcyBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0X2NvbnZlcnRlcihzZWxmX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICJQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICoiCisKK2NsYXNzIFVucGlja2xlck9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiVW5waWNrbGVyT2JqZWN0ICoiCisKK2NsYXNzIFVucGlja2xlck1lbW9Qcm94eU9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAiVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICoiCitbcHl0aG9uXSovCisvKltweXRob24gY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogLyogQnVtcCB0aGlzIHdoZW4gbmV3IG9wY29kZXMgYXJlIGFkZGVkIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wuICovCiBlbnVtIHsKLSAgICBISUdIRVNUX1BST1RPQ09MID0gMywKKyAgICBISUdIRVNUX1BST1RPQ09MID0gNCwKICAgICBERUZBVUxUX1BST1RPQ09MID0gMwogfTsKIApAQCAtNzEsMTggKzk1LDIwIEBACiAKICAgICAvKiBQcm90b2NvbCAzIChQeXRob24gMy54KSAqLwogICAgIEJJTkJZVEVTICAgICAgID0gJ0InLAotICAgIFNIT1JUX0JJTkJZVEVTID0gJ0MnCi19OworICAgIFNIT1JUX0JJTkJZVEVTID0gJ0MnLAogCi0vKiBUaGVzZSBhcmVuJ3Qgb3Bjb2RlcyAtLSB0aGV5J3JlIHdheXMgdG8gcGlja2xlIGJvb2xzIGJlZm9yZSBwcm90b2NvbCAyCi0gKiBzbyB0aGF0IHVucGlja2xlcnMgd3JpdHRlbiBiZWZvcmUgYm9vbHMgd2VyZSBpbnRyb2R1Y2VkIHVucGlja2xlIHRoZW0KLSAqIGFzIGludHMsIGJ1dCB1bnBpY2tsZXJzIGFmdGVyIGNhbiByZWNvZ25pemUgdGhhdCBib29scyB3ZXJlIGludGVuZGVkLgotICogTm90ZSB0aGF0IHByb3RvY29sIDIgYWRkZWQgZGlyZWN0IHdheXMgdG8gcGlja2xlIGJvb2xzLgotICovCi0jdW5kZWYgVFJVRQotI2RlZmluZSBUUlVFICAiSTAxXG4iCi0jdW5kZWYgRkFMU0UKLSNkZWZpbmUgRkFMU0UgIkkwMFxuIgorICAgIC8qIFByb3RvY29sIDQgKi8KKyAgICBTSE9SVF9CSU5VTklDT0RFID0gJ1x4OGMnLAorICAgIEJJTlVOSUNPREU4ICAgICAgPSAnXHg4ZCcsCisgICAgQklOQllURVM4ICAgICAgICA9ICdceDhlJywKKyAgICBFTVBUWV9TRVQgICAgICAgID0gJ1x4OGYnLAorICAgIEFERElURU1TICAgICAgICAgPSAnXHg5MCcsCisgICAgRlJPWkVOU0VUICAgICAgICA9ICdceDkxJywKKyAgICBORVdPQkpfRVggICAgICAgID0gJ1x4OTInLAorICAgIFNUQUNLX0dMT0JBTCAgICAgPSAnXHg5MycsCisgICAgTUVNT0laRSAgICAgICAgICA9ICdceDk0JywKKyAgICBGUkFNRSAgICAgICAgICAgID0gJ1x4OTUnCit9OwogCiBlbnVtIHsKICAgIC8qIEtlZXAgaW4gc3luY2ggd2l0aCBwaWNrbGUuUGlja2xlci5fQkFUQ0hTSVpFLiAgVGhpcyBpcyBob3cgbWFueSBlbGVtZW50cwpAQCAtOTgsNDggKzEyNCwyNDYgQEAKICAgICAvKiBJbml0aWFsIHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBvZiBQaWNrbGVyLiAqLwogICAgIFdSSVRFX0JVRl9TSVpFID0gNDA5NiwKIAotICAgIC8qIE1heGltdW0gc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyIG9mIFBpY2tsZXIgd2hlbiBwaWNrbGluZyB0byBhCi0gICAgICAgc3RyZWFtLiAgVGhpcyBpcyBpZ25vcmVkIGZvciBpbi1tZW1vcnkgcGlja2xpbmcuICovCi0gICAgTUFYX1dSSVRFX0JVRl9TSVpFID0gNjQgKiAxMDI0LAotCiAgICAgLyogUHJlZmV0Y2ggc2l6ZSB3aGVuIHVucGlja2xpbmcgKGRpc2FibGVkIG9uIHVucGVla2FibGUgc3RyZWFtcykgKi8KLSAgICBQUkVGRVRDSCA9IDgxOTIgKiAxNgorICAgIFBSRUZFVENIID0gODE5MiAqIDE2LAorCisgICAgRlJBTUVfU0laRV9UQVJHRVQgPSA2NCAqIDEwMjQsCisKKyAgICBGUkFNRV9IRUFERVJfU0laRSA9IDkKIH07CiAKLS8qIEV4Y2VwdGlvbiBjbGFzc2VzIGZvciBwaWNrbGUuIFRoZXNlIHNob3VsZCBvdmVycmlkZSB0aGUgb25lcyBkZWZpbmVkIGluCi0gICBwaWNrbGUucHksIHdoZW4gdGhlIEMtb3B0aW1pemVkIFBpY2tsZXIgYW5kIFVucGlja2xlciBhcmUgdXNlZC4gKi8KLXN0YXRpYyBQeU9iamVjdCAqUGlja2xlRXJyb3IgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICpQaWNrbGluZ0Vycm9yID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqVW5waWNrbGluZ0Vycm9yID0gTlVMTDsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlLCB7dHlwZV9vYmplY3Q6IHBpY2tsaW5nX2Z1bmN0aW9ufSAqLwotc3RhdGljIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZSA9IE5VTEw7Ci0vKiBGb3IgRVhUWzEyNF0gb3Bjb2Rlcy4gKi8KLS8qIGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSwgeyhtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSk6IGNvZGV9ICovCi1zdGF0aWMgUHlPYmplY3QgKmV4dGVuc2lvbl9yZWdpc3RyeSA9IE5VTEw7Ci0vKiBjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSwge2NvZGU6IChtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSl9ICovCi1zdGF0aWMgUHlPYmplY3QgKmludmVydGVkX3JlZ2lzdHJ5ID0gTlVMTDsKLS8qIGNvcHlyZWcuX2V4dGVuc2lvbl9jYWNoZSwge2NvZGU6IG9iamVjdH0gKi8KLXN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9uX2NhY2hlID0gTlVMTDsKKy8qIFN0YXRlIG9mIHRoZSBwaWNrbGUgbW9kdWxlLCBwZXIgUEVQIDMxMjEuICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogRXhjZXB0aW9uIGNsYXNzZXMgZm9yIHBpY2tsZS4gKi8KKyAgICBQeU9iamVjdCAqUGlja2xlRXJyb3I7CisgICAgUHlPYmplY3QgKlBpY2tsaW5nRXJyb3I7CisgICAgUHlPYmplY3QgKlVucGlja2xpbmdFcnJvcjsKKyAgICAKKyAgICAvKiBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlLCB7dHlwZV9vYmplY3Q6IHBpY2tsaW5nX2Z1bmN0aW9ufSAqLworICAgIFB5T2JqZWN0ICpkaXNwYXRjaF90YWJsZTsKIAotLyogX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HLCB7KG9sZG1vZHVsZSwgb2xkbmFtZSk6IChuZXdtb2R1bGUsIG5ld25hbWUpfSAqLwotc3RhdGljIFB5T2JqZWN0ICpuYW1lX21hcHBpbmdfMnRvMyA9IE5VTEw7Ci0vKiBfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORywge29sZG1vZHVsZTogbmV3bW9kdWxlfSAqLwotc3RhdGljIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18ydG8zID0gTlVMTDsKLS8qIFNhbWUsIGJ1dCB3aXRoIFJFVkVSU0VfTkFNRV9NQVBQSU5HIC8gUkVWRVJTRV9JTVBPUlRfTUFQUElORyAqLwotc3RhdGljIFB5T2JqZWN0ICpuYW1lX21hcHBpbmdfM3RvMiA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzN0bzIgPSBOVUxMOworICAgIC8qIEZvciB0aGUgZXh0ZW5zaW9uIG9wY29kZXMgRVhUMSwgRVhUMiBhbmQgRVhUNC4gKi8KIAotLyogWFhYOiBBcmUgdGhlc2UgcmVhbGx5IG5lc2Nlc3Nhcnk/ICovCi0vKiBBcyB0aGUgbmFtZSBzYXlzLCBhbiBlbXB0eSB0dXBsZS4gKi8KLXN0YXRpYyBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSBOVUxMOwotLyogRm9yIGxvb2tpbmcgdXAgbmFtZSBwYWlycyBpbiBjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnkuICovCi1zdGF0aWMgUHlPYmplY3QgKnR3b190dXBsZSA9IE5VTEw7CisgICAgLyogY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB7KG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKTogY29kZX0gKi8KKyAgICBQeU9iamVjdCAqZXh0ZW5zaW9uX3JlZ2lzdHJ5OworICAgIC8qIGNvcHlyZWcuX2V4dGVuc2lvbl9jYWNoZSwge2NvZGU6IG9iamVjdH0gKi8KKyAgICBQeU9iamVjdCAqZXh0ZW5zaW9uX2NhY2hlOworICAgIC8qIGNvcHlyZWcuX2ludmVydGVkX3JlZ2lzdHJ5LCB7Y29kZTogKG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKX0gKi8KKyAgICBQeU9iamVjdCAqaW52ZXJ0ZWRfcmVnaXN0cnk7CisKKyAgICAvKiBJbXBvcnQgbWFwcGluZ3MgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi54ICovCisKKyAgICAvKiBfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcsCisgICAgICAgeyhvbGRtb2R1bGUsIG9sZG5hbWUpOiAobmV3bW9kdWxlLCBuZXduYW1lKX0gKi8KKyAgICBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzJ0bzM7CisgICAgLyogX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcsIHtvbGRtb2R1bGU6IG5ld21vZHVsZX0gKi8KKyAgICBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfMnRvMzsKKyAgICAvKiBTYW1lLCBidXQgd2l0aCBSRVZFUlNFX05BTUVfTUFQUElORyAvIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcgKi8KKyAgICBQeU9iamVjdCAqbmFtZV9tYXBwaW5nXzN0bzI7CisgICAgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzN0bzI7CisKKyAgICAvKiBjb2RlY3MuZW5jb2RlLCB1c2VkIGZvciBzYXZpbmcgYnl0ZXMgaW4gb2xkZXIgcHJvdG9jb2xzICovCisgICAgUHlPYmplY3QgKmNvZGVjc19lbmNvZGU7Cit9IFBpY2tsZVN0YXRlOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBfcGlja2xlIG1vZHVsZSBkZWZpbml0aW9uLiAqLworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfcGlja2xlbW9kdWxlOworCisvKiBHaXZlbiBhIG1vZHVsZSBvYmplY3QsIGdldCBpdHMgcGVyLW1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyBQaWNrbGVTdGF0ZSAqCitfUGlja2xlX0dldFN0YXRlKFB5T2JqZWN0ICptb2R1bGUpCit7CisgICAgcmV0dXJuIChQaWNrbGVTdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG1vZHVsZSk7Cit9CisKKy8qIEZpbmQgdGhlIG1vZHVsZSBpbnN0YW5jZSBpbXBvcnRlZCBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgc3ViLWludGVycHJldGVyCisgICBhbmQgZ2V0IGl0cyBzdGF0ZS4gKi8KK3N0YXRpYyBQaWNrbGVTdGF0ZSAqCitfUGlja2xlX0dldEdsb2JhbFN0YXRlKHZvaWQpCit7CisgICAgcmV0dXJuIF9QaWNrbGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZfcGlja2xlbW9kdWxlKSk7Cit9CisKKy8qIENsZWFyIHRoZSBnaXZlbiBwaWNrbGUgbW9kdWxlIHN0YXRlLiAqLworc3RhdGljIHZvaWQKK19QaWNrbGVfQ2xlYXJTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCit7CisgICAgUHlfQ0xFQVIoc3QtPlBpY2tsZUVycm9yKTsKKyAgICBQeV9DTEVBUihzdC0+UGlja2xpbmdFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPlVucGlja2xpbmdFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPmRpc3BhdGNoX3RhYmxlKTsKKyAgICBQeV9DTEVBUihzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKKyAgICBQeV9DTEVBUihzdC0+ZXh0ZW5zaW9uX2NhY2hlKTsKKyAgICBQeV9DTEVBUihzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpOworICAgIFB5X0NMRUFSKHN0LT5uYW1lX21hcHBpbmdfMnRvMyk7CisgICAgUHlfQ0xFQVIoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpOworICAgIFB5X0NMRUFSKHN0LT5uYW1lX21hcHBpbmdfM3RvMik7CisgICAgUHlfQ0xFQVIoc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpOworICAgIFB5X0NMRUFSKHN0LT5jb2RlY3NfZW5jb2RlKTsKK30KKworLyogSW5pdGlhbGl6ZSB0aGUgZ2l2ZW4gcGlja2xlIG1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyBpbnQKK19QaWNrbGVfSW5pdFN0YXRlKFBpY2tsZVN0YXRlICpzdCkKK3sKKyAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvbXBhdF9waWNrbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb2RlY3MgPSBOVUxMOworCisgICAgY29weXJlZyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29weXJlZyIpOworICAgIGlmICghY29weXJlZykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBzdC0+ZGlzcGF0Y2hfdGFibGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJkaXNwYXRjaF90YWJsZSIpOworICAgIGlmICghc3QtPmRpc3BhdGNoX3RhYmxlKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmRpc3BhdGNoX3RhYmxlKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNvcHlyZWcuZGlzcGF0Y2hfdGFibGUgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5kaXNwYXRjaF90YWJsZSktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX3JlZ2lzdHJ5Iik7CisgICAgaWYgKCFzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnkgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5leHRlbnNpb25fcmVnaXN0cnkpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgc3QtPmludmVydGVkX3JlZ2lzdHJ5ID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfaW52ZXJ0ZWRfcmVnaXN0cnkiKTsKKyAgICBpZiAoIXN0LT5pbnZlcnRlZF9yZWdpc3RyeSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5pbnZlcnRlZF9yZWdpc3RyeSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSBzaG91bGQgYmUgYSBkaWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoc3QtPmludmVydGVkX3JlZ2lzdHJ5KS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5leHRlbnNpb25fY2FjaGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX2NhY2hlIik7CisgICAgaWYgKCFzdC0+ZXh0ZW5zaW9uX2NhY2hlKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmV4dGVuc2lvbl9jYWNoZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5leHRlbnNpb25fY2FjaGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgUHlfQ0xFQVIoY29weXJlZyk7CisKKyAgICAvKiBMb2FkIHRoZSAyLnggLT4gMy54IHN0ZGxpYiBtb2R1bGUgbWFwcGluZyB0YWJsZXMgKi8KKyAgICBjb21wYXRfcGlja2xlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfY29tcGF0X3BpY2tsZSIpOworICAgIGlmICghY29tcGF0X3BpY2tsZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBzdC0+bmFtZV9tYXBwaW5nXzJ0bzMgPSBcCisgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIk5BTUVfTUFQUElORyIpOworICAgIGlmICghc3QtPm5hbWVfbWFwcGluZ18ydG8zKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPm5hbWVfbWFwcGluZ18ydG8zKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLk5BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc3QtPm5hbWVfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJJTVBPUlRfTUFQUElORyIpOworICAgIGlmICghc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW1wb3J0X21hcHBpbmdfMnRvMykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgLyogLi4uIGFuZCB0aGUgMy54IC0+IDIueCBtYXBwaW5nIHRhYmxlcyAqLworICAgIHN0LT5uYW1lX21hcHBpbmdfM3RvMiA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiUkVWRVJTRV9OQU1FX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5uYW1lX21hcHBpbmdfM3RvMikKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5uYW1lX21hcHBpbmdfM3RvMikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoc3QtPm5hbWVfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJSRVZFUlNFX0lNUE9SVF9NQVBQSU5HIik7CisgICAgaWYgKCFzdC0+aW1wb3J0X21hcHBpbmdfM3RvMikKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOworCisgICAgY29kZWNzID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb2RlY3MiKTsKKyAgICBpZiAoY29kZWNzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPmNvZGVjc19lbmNvZGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvZGVjcywgImVuY29kZSIpOworICAgIGlmIChzdC0+Y29kZWNzX2VuY29kZSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhzdC0+Y29kZWNzX2VuY29kZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb2RlY3MuZW5jb2RlIHNob3VsZCBiZSBhIGNhbGxhYmxlLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc3QtPmNvZGVjc19lbmNvZGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgUHlfQ0xFQVIoY29kZWNzKTsKKworICAgIHJldHVybiAwOworCisgIGVycm9yOgorICAgIFB5X0NMRUFSKGNvcHlyZWcpOworICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOworICAgIFB5X0NMRUFSKGNvZGVjcyk7CisgICAgX1BpY2tsZV9DbGVhclN0YXRlKHN0KTsKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIEhlbHBlciBmb3IgY2FsbGluZyBhIGZ1bmN0aW9uIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgcXVpY2tseS4KKworICAgVGhpcyBmdW5jdGlvbiBzdGVhbHMgdGhlIHJlZmVyZW5jZSBvZiB0aGUgZ2l2ZW4gYXJndW1lbnQuICovCitzdGF0aWMgUHlPYmplY3QgKgorX1BpY2tsZV9GYXN0Q2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICphcmdfdHVwbGUgPSBQeVR1cGxlX05ldygxKTsKKworICAgIC8qIE5vdGU6IHRoaXMgZnVuY3Rpb24gdXNlZCB0byByZXVzZSB0aGUgYXJndW1lbnQgdHVwbGUuIFRoaXMgdXNlZCB0byBnaXZlCisgICAgICAgYSBzbGlnaHQgcGVyZm9ybWFuY2UgYm9vc3Qgd2l0aCBvbGRlciBwaWNrbGUgaW1wbGVtZW50YXRpb25zIHdoZXJlIG1hbnkKKyAgICAgICB1bmJ1ZmZlcmVkIHJlYWRzIG9jY3VycmVkICh0aHVzIG5lZWRpbmcgbWFueSBmdW5jdGlvbiBjYWxscykuCisKKyAgICAgICBIb3dldmVyLCB0aGlzIG9wdGltaXphdGlvbiB3YXMgcmVtb3ZlZCBiZWNhdXNlIGl0IHdhcyB0b28gY29tcGxpY2F0ZWQKKyAgICAgICB0byBnZXQgcmlnaHQuIEl0IGFidXNlZCB0aGUgQyBBUEkgZm9yIHR1cGxlcyB0byBtdXRhdGUgdGhlbSB3aGljaCBsZWQKKyAgICAgICB0byBzdWJ0bGUgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBjb25jdXJyZW5jeSBidWdzLiBGdXJ0aGVybW9yZSwgdGhlCisgICAgICAgaW50cm9kdWN0aW9uIG9mIHByb3RvY29sIDQgYW5kIHRoZSBwcmVmZXRjaGluZyBvcHRpbWl6YXRpb24gdmlhIHBlZWsoKQorICAgICAgIHNpZ25pZmljYW50bHkgcmVkdWNlZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9uIGNhbGxzIHdlIGRvLiBUaHVzLCB0aGUKKyAgICAgICBiZW5lZml0cyBiZWNhbWUgbWFyZ2luYWwgYXQgYmVzdC4gKi8KKworICAgIGlmIChhcmdfdHVwbGUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0oYXJnX3R1cGxlLCAwLCBvYmopOworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgYXJnX3R1cGxlLCBOVUxMKTsKKyAgICBQeV9DTEVBUihhcmdfdHVwbGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBzdGF0aWMgaW50CiBzdGFja191bmRlcmZsb3codm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAidW5waWNrbGluZyBzdGFjayB1bmRlcmZsb3ciKTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJ1bnBpY2tsaW5nIHN0YWNrIHVuZGVyZmxvdyIpOwogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMjQwLDggKzQ2NCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogUGRhdGFfcG9wKFBkYXRhICpzZWxmKQogeworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBpZiAoUHlfU0laRShzZWxmKSA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJiYWQgcGlja2xlIGRhdGEiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJiYWQgcGlja2xlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBzZWxmLT5kYXRhWy0tUHlfU0laRShzZWxmKV07CkBAIC0zMjAsNyArNTQ1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xpbmcuICovCiAgICAgUHlPYmplY3QgKnBlcnNfZnVuYzsgICAgICAgIC8qIHBlcnNpc3RlbnRfaWQoKSBtZXRob2QsIGNhbiBiZSBOVUxMICovCiAgICAgUHlPYmplY3QgKmRpc3BhdGNoX3RhYmxlOyAgIC8qIHByaXZhdGUgZGlzcGF0Y2hfdGFibGUsIGNhbiBiZSBOVUxMICovCi0gICAgUHlPYmplY3QgKmFyZzsKIAogICAgIFB5T2JqZWN0ICp3cml0ZTsgICAgICAgICAgICAvKiB3cml0ZSgpIG1ldGhvZCBvZiB0aGUgb3V0cHV0IHN0cmVhbS4gKi8KICAgICBQeU9iamVjdCAqb3V0cHV0X2J1ZmZlcjsgICAgLyogV3JpdGUgaW50byBhIGxvY2FsIGJ5dGVhcnJheSBidWZmZXIgYmVmb3JlCkBAIC0zMjksNyArNTUzLDEyIEBACiAgICAgUHlfc3NpemVfdCBtYXhfb3V0cHV0X2xlbjsgIC8qIEFsbG9jYXRpb24gc2l6ZSBvZiBvdXRwdXRfYnVmZmVyLiAqLwogICAgIGludCBwcm90bzsgICAgICAgICAgICAgICAgICAvKiBQaWNrbGUgcHJvdG9jb2wgbnVtYmVyLCA+PSAwICovCiAgICAgaW50IGJpbjsgICAgICAgICAgICAgICAgICAgIC8qIEJvb2xlYW4sIHRydWUgaWYgcHJvdG8gPiAwICovCi0gICAgUHlfc3NpemVfdCBidWZfc2l6ZTsgICAgICAgICAgICAgICAvKiBTaXplIG9mIHRoZSBjdXJyZW50IGJ1ZmZlcmVkIHBpY2tsZSBkYXRhICovCisgICAgaW50IGZyYW1pbmc7ICAgICAgICAgICAgICAgIC8qIFRydWUgd2hlbiBmcmFtaW5nIGlzIGVuYWJsZWQsIHByb3RvID49IDQgKi8KKyAgICBQeV9zc2l6ZV90IGZyYW1lX3N0YXJ0OyAgICAgLyogUG9zaXRpb24gaW4gb3V0cHV0X2J1ZmZlciB3aGVyZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgdGhlIGN1cnJlbnQgZnJhbWUgYmVnaW5zLiAtMSBpZiB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBubyBmcmFtZSBjdXJyZW50bHkgb3Blbi4gKi8KKworICAgIFB5X3NzaXplX3QgYnVmX3NpemU7ICAgICAgICAvKiBTaXplIG9mIHRoZSBjdXJyZW50IGJ1ZmZlcmVkIHBpY2tsZSBkYXRhICovCiAgICAgaW50IGZhc3Q7ICAgICAgICAgICAgICAgICAgIC8qIEVuYWJsZSBmYXN0IG1vZGUgaWYgc2V0IHRvIGEgdHJ1ZSB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZhc3QgbW9kZSBkaXNhYmxlIHRoZSB1c2FnZSBvZiBtZW1vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVyZWZvcmUgc3BlZWRpbmcgdGhlIHBpY2tsaW5nIHByb2Nlc3MgYnkKQEAgLTM0OSw5ICs1NzgsOSBAQAogICAgIC8qIFRoZSB1bnBpY2tsZXIgbWVtbyBpcyBqdXN0IGFuIGFycmF5IG9mIFB5T2JqZWN0ICpzLiBVc2luZyBhIGRpY3QKICAgICAgICBpcyB1bm5lY2Vzc2FyeSwgc2luY2UgdGhlIGtleXMgYXJlIGNvbnRpZ3VvdXMgaW50cy4gKi8KICAgICBQeU9iamVjdCAqKm1lbW87Ci0gICAgUHlfc3NpemVfdCBtZW1vX3NpemU7CisgICAgUHlfc3NpemVfdCBtZW1vX3NpemU7ICAgICAgIC8qIENhcGFjaXR5IG9mIHRoZSBtZW1vIGFycmF5ICovCisgICAgUHlfc3NpemVfdCBtZW1vX2xlbjsgICAgICAgIC8qIE51bWJlciBvZiBvYmplY3RzIGluIHRoZSBtZW1vICovCiAKLSAgICBQeU9iamVjdCAqYXJnOwogICAgIFB5T2JqZWN0ICpwZXJzX2Z1bmM7ICAgICAgICAvKiBwZXJzaXN0ZW50X2xvYWQoKSBtZXRob2QsIGNhbiBiZSBOVUxMLiAqLwogCiAgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKQEAgLTM2MCw2ICs1ODksNyBAQAogICAgIFB5X3NzaXplX3QgaW5wdXRfbGVuOwogICAgIFB5X3NzaXplX3QgbmV4dF9yZWFkX2lkeDsKICAgICBQeV9zc2l6ZV90IHByZWZldGNoZWRfaWR4OyAgLyogaW5kZXggb2YgZmlyc3QgcHJlZmV0Y2hlZCBieXRlICovCisKICAgICBQeU9iamVjdCAqcmVhZDsgICAgICAgICAgICAgLyogcmVhZCgpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLwogICAgIFB5T2JqZWN0ICpyZWFkbGluZTsgICAgICAgICAvKiByZWFkbGluZSgpIG1ldGhvZCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAqLwogICAgIFB5T2JqZWN0ICpwZWVrOyAgICAgICAgICAgICAvKiBwZWVrKCkgbWV0aG9kIG9mIHRoZSBpbnB1dCBzdHJlYW0sIG9yIE5VTEwgKi8KQEAgLTQzNiw2ICs2NjYsNyBAQAogICAgIG5ldy0+bXRfdGFibGUgPSBQeU1lbV9NQUxMT0Moc2VsZi0+bXRfYWxsb2NhdGVkICogc2l6ZW9mKFB5TWVtb0VudHJ5KSk7CiAgICAgaWYgKG5ldy0+bXRfdGFibGUgPT0gTlVMTCkgewogICAgICAgICBQeU1lbV9GUkVFKG5ldyk7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bXRfYWxsb2NhdGVkOyBpKyspIHsKQEAgLTUyOSw3ICs3NjAsNyBAQAogICAgIG9sZHRhYmxlID0gc2VsZi0+bXRfdGFibGU7CiAgICAgc2VsZi0+bXRfdGFibGUgPSBQeU1lbV9NQUxMT0MobmV3X3NpemUgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKICAgICBpZiAoc2VsZi0+bXRfdGFibGUgPT0gTlVMTCkgewotICAgICAgICBQeU1lbV9GUkVFKG9sZHRhYmxlKTsKKyAgICAgICAgc2VsZi0+bXRfdGFibGUgPSBvbGR0YWJsZTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTYwNSw2MCArODM2LDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIEhlbHBlcnMgZm9yIGNyZWF0aW5nIHRoZSBhcmd1bWVudCB0dXBsZSBwYXNzZWQgdG8gZnVuY3Rpb25zLiBUaGlzIGhhcyB0aGUKLSAgIHBlcmZvcm1hbmNlIGFkdmFudGFnZSBvZiBjYWxsaW5nIFB5VHVwbGVfTmV3KCkgb25seSBvbmNlLgotCi0gICBYWFgoYXZhc3NhbG90dGkpOiBJbmxpbmUgZGlyZWN0bHkgaW4gX1BpY2tsZXJfRmFzdENhbGwoKSBhbmQKLSAgIF9VbnBpY2tsZXJfRmFzdENhbGwoKS4gKi8KLSNkZWZpbmUgQVJHX1RVUChzZWxmLCBvYmopIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKChzZWxmKS0+YXJnIHx8ICgoc2VsZiktPmFyZz1QeVR1cGxlX05ldygxKSkpIHsgIFwKLSAgICAgICAgICAgIFB5X1hERUNSRUYoUHlUdXBsZV9HRVRfSVRFTSgoc2VsZiktPmFyZywgMCkpOyAgIFwKLSAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oKHNlbGYpLT5hcmcsIDAsIChvYmopKTsgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0RFQ1JFRigob2JqKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZSRUVfQVJHX1RVUChzZWxmKSBkbyB7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgoc2VsZiktPmFyZy0+b2JfcmVmY250ID4gMSkgICAgICAgICBcCi0gICAgICAgICAgICBQeV9DTEVBUigoc2VsZiktPmFyZyk7ICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotLyogQSB0ZW1wb3JhcnkgY2xlYW5lciBBUEkgZm9yIGZhc3Qgc2luZ2xlIGFyZ3VtZW50IGZ1bmN0aW9uIGNhbGwuCi0KLSAgIFhYWDogRG9lcyBjYWNoaW5nIHRoZSBhcmd1bWVudCB0dXBsZSBwcm92aWRlcyBhbnkgcmVhbCBwZXJmb3JtYW5jZSBiZW5lZml0cz8KLQotICAgQSBxdWljayBiZW5jaG1hcmssIG9uIGEgMi4wR0h6IEF0aGxvbjY0IDMyMDArIHJ1bm5pbmcgTGludXggMi42LjI0IHdpdGgKLSAgIGdsaWJjIDIuNywgdGVsbHMgbWUgdGhhdCBpdCB0YWtlcyByb3VnaGx5IDIwLDAwMCwwMDAgUHlUdXBsZV9OZXcoMSkgY2FsbHMKLSAgIHdoZW4gdGhlIHR1cGxlIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBmcmVlbGlzdCAoaS5lLCBjYWxsIFB5VHVwbGVfTmV3KCkgdGhlbgotICAgaW1tZWRpYXRlbHkgREVDUkVGIGl0KSBhbmQgMSwyMDAsMDAwIGNhbGxzIHdoZW4gYWxsb2NhdGluZyBicmFuZCBuZXcgdHVwbGVzCi0gICAoaS5lLCBjYWxsIFB5VHVwbGVfTmV3KCkgYW5kIHN0b3JlIHRoZSByZXR1cm5lZCB2YWx1ZSBpbiBhbiBhcnJheSksIHRvIHNhdmUKLSAgIG9uZSBzZWNvbmQgKHdhbGwgY2xvY2sgdGltZSkuIEVpdGhlciB3YXlzLCB0aGUgbG9hZGluZyB0aW1lIGEgcGlja2xlIHN0cmVhbQotICAgbGFyZ2UgZW5vdWdoIHRvIGdlbmVyYXRlIHRoaXMgbnVtYmVyIG9mIGNhbGxzIHdvdWxkIGJlIG1hc3NpdmVseQotICAgb3ZlcndoZWxtZWQgYnkgb3RoZXIgZmFjdG9ycywgbGlrZSBJL08gdGhyb3VnaHB1dCwgdGhlIEdDIHRyYXZlcnNhbCBhbmQKLSAgIG9iamVjdCBhbGxvY2F0aW9uIG92ZXJoZWFkLiBTbywgSSByZWFsbHkgZG91YnQgdGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgYW55Ci0gICByZWFsIGJlbmVmaXRzLgotCi0gICBPbiB0aGUgb3RoZXIgaGFuZCwgb3Byb2ZpbGUgcmVwb3J0cyB0aGF0IHBpY2tsZSBzcGVuZHMgYSBsb3Qgb2YgdGltZSBpbgotICAgdGhlc2UgZnVuY3Rpb25zLiBCdXQsIHRoYXQgaXMgcHJvYmFibHkgbW9yZSByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsCi0gICBvdmVyaGVhZCwgdGhhbiB0aGUgYXJndW1lbnQgdHVwbGUgYWxsb2NhdGlvbi4KLQotICAgWFhYOiBBbmQsIHdoYXQgaXMgdGhlIHJlZmVyZW5jZSBiZWhhdmlvciBvZiB0aGVzZT8gU3RlYWwsIGJvcnJvdz8gQXQgZmlyc3QKLSAgIGdsYW5jZSwgaXQgc2VlbXMgdG8gc3RlYWwgdGhlIHJlZmVyZW5jZSBvZiAnYXJnJyBhbmQgYm9ycm93IHRoZSByZWZlcmVuY2UKLSAgIG9mICdmdW5jJy4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1fUGlja2xlcl9GYXN0Q2FsbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLQotICAgIEFSR19UVVAoc2VsZiwgYXJnKTsKLSAgICBpZiAoc2VsZi0+YXJnKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgc2VsZi0+YXJnLCBOVUxMKTsKLSAgICAgICAgRlJFRV9BUkdfVFVQKHNlbGYpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBzdGF0aWMgaW50CiBfUGlja2xlcl9DbGVhckJ1ZmZlcihQaWNrbGVyT2JqZWN0ICpzZWxmKQpAQCAtNjY5LDE1ICs4NDYsNzEgQEAKICAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b3V0cHV0X2xlbiA9IDA7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK193cml0ZV9zaXplNjQoY2hhciAqb3V0LCBzaXplX3QgdmFsdWUpCit7CisgICAgaW50IGk7CisKKyAgICBhc3NlcnQoc2l6ZW9mKHNpemVfdCkgPD0gOCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpemVfdCk7IGkrKykgeworICAgICAgICBvdXRbaV0gPSAodW5zaWduZWQgY2hhcikoKHZhbHVlID4+ICg4ICogaSkpICYgMHhmZik7CisgICAgfQorICAgIGZvciAoaSA9IHNpemVvZihzaXplX3QpOyBpIDwgODsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9IDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorX1BpY2tsZXJfV3JpdGVGcmFtZUhlYWRlcihQaWNrbGVyT2JqZWN0ICpzZWxmLCBjaGFyICpxZGF0YSwgc2l6ZV90IGZyYW1lX2xlbikKK3sKKyAgICBxZGF0YVswXSA9IEZSQU1FOworICAgIF93cml0ZV9zaXplNjQocWRhdGEgKyAxLCBmcmFtZV9sZW4pOworfQorCitzdGF0aWMgaW50CitfUGlja2xlcl9Db21taXRGcmFtZShQaWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIHNpemVfdCBmcmFtZV9sZW47CisgICAgY2hhciAqcWRhdGE7CisKKyAgICBpZiAoIXNlbGYtPmZyYW1pbmcgfHwgc2VsZi0+ZnJhbWVfc3RhcnQgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGZyYW1lX2xlbiA9IHNlbGYtPm91dHB1dF9sZW4gLSBzZWxmLT5mcmFtZV9zdGFydCAtIEZSQU1FX0hFQURFUl9TSVpFOworICAgIHFkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+b3V0cHV0X2J1ZmZlcikgKyBzZWxmLT5mcmFtZV9zdGFydDsKKyAgICBfUGlja2xlcl9Xcml0ZUZyYW1lSGVhZGVyKHNlbGYsIHFkYXRhLCBmcmFtZV9sZW4pOworICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19QaWNrbGVyX09wY29kZUJvdW5kYXJ5KFBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBmcmFtZV9sZW47CisKKyAgICBpZiAoIXNlbGYtPmZyYW1pbmcgfHwgc2VsZi0+ZnJhbWVfc3RhcnQgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGZyYW1lX2xlbiA9IHNlbGYtPm91dHB1dF9sZW4gLSBzZWxmLT5mcmFtZV9zdGFydCAtIEZSQU1FX0hFQURFUl9TSVpFOworICAgIGlmIChmcmFtZV9sZW4gPj0gRlJBTUVfU0laRV9UQVJHRVQpCisgICAgICAgIHJldHVybiBfUGlja2xlcl9Db21taXRGcmFtZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogX1BpY2tsZXJfR2V0U3RyaW5nKFBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKm91dHB1dF9idWZmZXIgPSBzZWxmLT5vdXRwdXRfYnVmZmVyOwogCiAgICAgYXNzZXJ0KHNlbGYtPm91dHB1dF9idWZmZXIgIT0gTlVMTCk7CisKKyAgICBpZiAoX1BpY2tsZXJfQ29tbWl0RnJhbWUoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgc2VsZi0+b3V0cHV0X2J1ZmZlciA9IE5VTEw7CiAgICAgLyogUmVzaXplIGRvd24gdG8gZXhhY3Qgc2l6ZSAqLwogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJm91dHB1dF9idWZmZXIsIHNlbGYtPm91dHB1dF9sZW4pIDwgMCkKQEAgLTY5Miw2NyArOTI1LDY0IEBACiAKICAgICBhc3NlcnQoc2VsZi0+d3JpdGUgIT0gTlVMTCk7CiAKKyAgICAvKiBUaGlzIHdpbGwgY29tbWl0IHRoZSBmcmFtZSBmaXJzdCAqLwogICAgIG91dHB1dCA9IF9QaWNrbGVyX0dldFN0cmluZyhzZWxmKTsKICAgICBpZiAob3V0cHV0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJlc3VsdCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPndyaXRlLCBvdXRwdXQpOworICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+d3JpdGUsIG91dHB1dCk7CiAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiAocmVzdWx0ID09IE5VTEwpID8gLTEgOiAwOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotX1BpY2tsZXJfV3JpdGUoUGlja2xlck9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBuKQorX1BpY2tsZXJfV3JpdGUoUGlja2xlck9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBkYXRhX2xlbikKIHsKLSAgICBQeV9zc2l6ZV90IGksIHJlcXVpcmVkOworICAgIFB5X3NzaXplX3QgaSwgbiwgcmVxdWlyZWQ7CiAgICAgY2hhciAqYnVmZmVyOworICAgIGludCBuZWVkX25ld19mcmFtZTsKIAogICAgIGFzc2VydChzICE9IE5VTEwpOworICAgIG5lZWRfbmV3X2ZyYW1lID0gKHNlbGYtPmZyYW1pbmcgJiYgc2VsZi0+ZnJhbWVfc3RhcnQgPT0gLTEpOworCisgICAgaWYgKG5lZWRfbmV3X2ZyYW1lKQorICAgICAgICBuID0gZGF0YV9sZW4gKyBGUkFNRV9IRUFERVJfU0laRTsKKyAgICBlbHNlCisgICAgICAgIG4gPSBkYXRhX2xlbjsKIAogICAgIHJlcXVpcmVkID0gc2VsZi0+b3V0cHV0X2xlbiArIG47CiAgICAgaWYgKHJlcXVpcmVkID4gc2VsZi0+bWF4X291dHB1dF9sZW4pIHsKLSAgICAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwgJiYgcmVxdWlyZWQgPiBNQVhfV1JJVEVfQlVGX1NJWkUpIHsKLSAgICAgICAgICAgIC8qIFhYWCBUaGlzIHJlYWxsb2NhdGVzIGEgbmV3IGJ1ZmZlciBldmVyeSB0aW1lLCB3aGljaCBpcyBhIGJpdAotICAgICAgICAgICAgICAgd2FzdGVmdWwuICovCi0gICAgICAgICAgICBpZiAoX1BpY2tsZXJfRmx1c2hUb0ZpbGUoc2VsZikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAvKiBNYWtlIHBsYWNlIGluIGJ1ZmZlciBmb3IgdGhlIHBpY2tsZSBjaHVuayAqLworICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2xlbiA+PSBQWV9TU0laRV9UX01BWCAvIDIgLSBuKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxmLT53cml0ZSAhPSBOVUxMICYmIG4gPiBNQVhfV1JJVEVfQlVGX1NJWkUpIHsKLSAgICAgICAgICAgIC8qIHdlIGFscmVhZHkgZmx1c2hlZCBhYm92ZSwgc28gdGhlIGJ1ZmZlciBpcyBlbXB0eSAqLwotICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICAgICAgICAgIC8qIFhYWCB3ZSBjb3VsZCBzcGFyZSBhbiBpbnRlcm1lZGlhdGUgY29weSBhbmQgcGFzcwotICAgICAgICAgICAgICAgYSBtZW1vcnl2aWV3IGluc3RlYWQgKi8KLSAgICAgICAgICAgIFB5T2JqZWN0ICpvdXRwdXQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIG4pOwotICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICByZXN1bHQgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT53cml0ZSwgb3V0cHV0KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiAocmVzdWx0ID09IE5VTEwpID8gLTEgOiAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHNlbGYtPm91dHB1dF9sZW4gPj0gUFlfU1NJWkVfVF9NQVggLyAyIC0gbikgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSAoc2VsZi0+b3V0cHV0X2xlbiArIG4pIC8gMiAqIDM7Ci0gICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5vdXRwdXRfYnVmZmVyLCBzZWxmLT5tYXhfb3V0cHV0X2xlbikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IChzZWxmLT5vdXRwdXRfbGVuICsgbikgLyAyICogMzsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+b3V0cHV0X2J1ZmZlciwgc2VsZi0+bWF4X291dHB1dF9sZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgYnVmZmVyID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+b3V0cHV0X2J1ZmZlcik7Ci0gICAgaWYgKG4gPCA4KSB7CisgICAgaWYgKG5lZWRfbmV3X2ZyYW1lKSB7CisgICAgICAgIC8qIFNldHVwIG5ldyBmcmFtZSAqLworICAgICAgICBQeV9zc2l6ZV90IGZyYW1lX3N0YXJ0ID0gc2VsZi0+b3V0cHV0X2xlbjsKKyAgICAgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSBmcmFtZV9zdGFydDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEZSQU1FX0hFQURFUl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIC8qIFdyaXRlIGFuIGludmFsaWQgdmFsdWUsIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICAgICAgICAgIGJ1ZmZlcltmcmFtZV9zdGFydCArIGldID0gMHhGRTsKKyAgICAgICAgfQorICAgICAgICBzZWxmLT5vdXRwdXRfbGVuICs9IEZSQU1FX0hFQURFUl9TSVpFOworICAgIH0KKyAgICBpZiAoZGF0YV9sZW4gPCA4KSB7CiAgICAgICAgIC8qIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWVtY3B5IHdoZW4gdGhlIHN0cmluZyBpcyBzaG9ydC4gKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykgewogICAgICAgICAgICAgYnVmZmVyW3NlbGYtPm91dHB1dF9sZW4gKyBpXSA9IHNbaV07CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIG1lbWNweShidWZmZXIgKyBzZWxmLT5vdXRwdXRfbGVuLCBzLCBuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNlbGYtPm91dHB1dF9sZW4sIHMsIGRhdGFfbGVuKTsKICAgICB9Ci0gICAgc2VsZi0+b3V0cHV0X2xlbiArPSBuOwotICAgIHJldHVybiBuOworICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gZGF0YV9sZW47CisgICAgcmV0dXJuIGRhdGFfbGVuOwogfQogCiBzdGF0aWMgUGlja2xlck9iamVjdCAqCkBAIC03NjYsMjUgKzk5NiwyMyBAQAogCiAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKICAgICBzZWxmLT5kaXNwYXRjaF90YWJsZSA9IE5VTEw7Ci0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT53cml0ZSA9IE5VTEw7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIHNlbGYtPmJpbiA9IDA7CisgICAgc2VsZi0+ZnJhbWluZyA9IDA7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKICAgICBzZWxmLT5mYXN0ID0gMDsKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKICAgICBzZWxmLT5mYXN0X21lbW8gPSBOVUxMOwotCi0gICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwotICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSBXUklURV9CVUZfU0laRTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKworICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuKTsKLSAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CisKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMIHx8IHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc5MiwzNCArMTAyMCwyOSBAQAogfQogCiBzdGF0aWMgaW50Ci1fUGlja2xlcl9TZXRQcm90b2NvbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcHJvdG9fb2JqLAotICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzX29iaikKK19QaWNrbGVyX1NldFByb3RvY29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQogewotICAgIGxvbmcgcHJvdG8gPSAwOwotICAgIGludCBmaXhfaW1wb3J0czsKKyAgICBsb25nIHByb3RvOwogCi0gICAgaWYgKHByb3RvX29iaiA9PSBOVUxMIHx8IHByb3RvX29iaiA9PSBQeV9Ob25lKQorICAgIGlmIChwcm90b2NvbCA9PSBOVUxMIHx8IHByb3RvY29sID09IFB5X05vbmUpIHsKICAgICAgICAgcHJvdG8gPSBERUZBVUxUX1BST1RPQ09MOworICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcHJvdG8gPSBQeUxvbmdfQXNMb25nKHByb3RvX29iaik7Ci0gICAgICAgIGlmIChwcm90byA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBwcm90byA9IFB5TG9uZ19Bc0xvbmcocHJvdG9jb2wpOworICAgICAgICBpZiAocHJvdG8gPCAwKSB7CisgICAgICAgICAgICBpZiAocHJvdG8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBwcm90byA9IEhJR0hFU1RfUFJPVE9DT0w7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHJvdG8gPiBISUdIRVNUX1BST1RPQ09MKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInBpY2tsZSBwcm90b2NvbCBtdXN0IGJlIDw9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBISUdIRVNUX1BST1RPQ09MKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAocHJvdG8gPCAwKQotICAgICAgICBwcm90byA9IEhJR0hFU1RfUFJPVE9DT0w7Ci0gICAgaWYgKHByb3RvID4gSElHSEVTVF9QUk9UT0NPTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInBpY2tsZSBwcm90b2NvbCBtdXN0IGJlIDw9ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEhJR0hFU1RfUFJPVE9DT0wpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzX29iaik7Ci0gICAgaWYgKGZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBzZWxmLT5wcm90byA9IHByb3RvOworICAgIHNlbGYtPnByb3RvID0gKGludClwcm90bzsKICAgICBzZWxmLT5iaW4gPSBwcm90byA+IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0cyAmJiBwcm90byA8IDM7Ci0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtODQxLDIwICsxMDY0LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotLyogU2VlIGRvY3VtZW50YXRpb24gZm9yIF9QaWNrbGVyX0Zhc3RDYWxsKCkuICovCi1zdGF0aWMgUHlPYmplY3QgKgotX1VucGlja2xlcl9GYXN0Q2FsbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgQVJHX1RVUChzZWxmLCBhcmcpOwotICAgIGlmIChzZWxmLT5hcmcpIHsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBzZWxmLT5hcmcsIE5VTEwpOwotICAgICAgICBGUkVFX0FSR19UVVAoc2VsZik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGlucHV0IG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuIFRoaXMgdGFrZXMgaXRzCiAgICBvd24gcmVmZXJlbmNlIHRvIGBpbnB1dGAuICovCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtODc0LDE4ICsxMDgzLDIxIEBACiBzdGF0aWMgaW50CiBfVW5waWNrbGVyX1NraXBDb25zdW1lZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlfc3NpemVfdCBjb25zdW1lZCA9IHNlbGYtPm5leHRfcmVhZF9pZHggLSBzZWxmLT5wcmVmZXRjaGVkX2lkeDsKKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOworICAgIFB5T2JqZWN0ICpyOwogCi0gICAgaWYgKGNvbnN1bWVkID4gMCkgewotICAgICAgICBQeU9iamVjdCAqcjsKLSAgICAgICAgYXNzZXJ0KHNlbGYtPnBlZWspOyAgLyogb3RoZXJ3aXNlIHdlIGRpZCBzb21ldGhpbmcgd3JvbmcgKi8KLSAgICAgICAgLyogVGhpcyBtYWtlcyBhbiB1c2VsZXNzIGNvcHkuLi4gKi8KLSAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yZWFkLCAibiIsIGNvbnN1bWVkKTsKLSAgICAgICAgaWYgKHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKHIpOwotICAgICAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPm5leHRfcmVhZF9pZHg7Ci0gICAgfQorICAgIGNvbnN1bWVkID0gc2VsZi0+bmV4dF9yZWFkX2lkeCAtIHNlbGYtPnByZWZldGNoZWRfaWR4OworICAgIGlmIChjb25zdW1lZCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFzc2VydChzZWxmLT5wZWVrKTsgIC8qIG90aGVyd2lzZSB3ZSBkaWQgc29tZXRoaW5nIHdyb25nICovCisgICAgLyogVGhpcyBtYWtlcyBhbiB1c2VsZXNzIGNvcHkuLi4gKi8KKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJlYWQsICJuIiwgY29uc3VtZWQpOworICAgIGlmIChyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9ERUNSRUYocik7CisKKyAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPm5leHRfcmVhZF9pZHg7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTkwOSw1NiArMTEyMSw1MSBAQAogX1VucGlja2xlcl9SZWFkRnJvbUZpbGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IG4pCiB7CiAgICAgUHlPYmplY3QgKmRhdGE7Ci0gICAgUHlfc3NpemVfdCByZWFkX3NpemUsIHByZWZldGNoZWRfc2l6ZSA9IDA7CisgICAgUHlfc3NpemVfdCByZWFkX3NpemU7CiAKICAgICBhc3NlcnQoc2VsZi0+cmVhZCAhPSBOVUxMKTsKIAogICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChuID09IFJFQURfV0hPTEVfTElORSkKKyAgICBpZiAobiA9PSBSRUFEX1dIT0xFX0xJTkUpIHsKKyAgICAgICAgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgIGRhdGEgPSBQeU9iamVjdF9DYWxsKHNlbGYtPnJlYWRsaW5lLCBlbXB0eV90dXBsZSwgTlVMTCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICpsZW4gPSBQeUxvbmdfRnJvbVNzaXplX3Qobik7Ci0gICAgICAgIGlmIChsZW4gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZGF0YSA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cmVhZCwgbGVuKTsKKyAgICAgICAgUHlfREVDUkVGKGVtcHR5X3R1cGxlKTsKICAgICB9Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogUHJlZmV0Y2ggc29tZSBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvaW50ZXIsIGlmIHBvc3NpYmxlICovCi0gICAgaWYgKHNlbGYtPnBlZWspIHsKLSAgICAgICAgUHlPYmplY3QgKmxlbiwgKnByZWZldGNoZWQ7Ci0gICAgICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChQUkVGRVRDSCk7Ci0gICAgICAgIGlmIChsZW4gPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHByZWZldGNoZWQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPnBlZWssIGxlbik7Ci0gICAgICAgIGlmIChwcmVmZXRjaGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IpKSB7CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpsZW47CisgICAgICAgIC8qIFByZWZldGNoIHNvbWUgZGF0YSB3aXRob3V0IGFkdmFuY2luZyB0aGUgZmlsZSBwb2ludGVyLCBpZiBwb3NzaWJsZSAqLworICAgICAgICBpZiAoc2VsZi0+cGVlayAmJiBuIDwgUFJFRkVUQ0gpIHsKKyAgICAgICAgICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChQUkVGRVRDSCk7CisgICAgICAgICAgICBpZiAobGVuID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZGF0YSA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVlaywgbGVuKTsKKyAgICAgICAgICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAvKiBwZWVrKCkgaXMgcHJvYmFibHkgbm90IHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gZmlsZSBvYmplY3QgKi8KICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnBlZWspOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVhZF9zaXplID0gX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dChzZWxmLCBkYXRhKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobiA8PSByZWFkX3NpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2socHJlZmV0Y2hlZCkpOwotICAgICAgICAgICAgcHJlZmV0Y2hlZF9zaXplID0gUHlCeXRlc19HRVRfU0laRShwcmVmZXRjaGVkKTsKLSAgICAgICAgICAgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsKCZkYXRhLCBwcmVmZXRjaGVkKTsKLSAgICAgICAgICAgIGlmIChkYXRhID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKKyAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBkYXRhID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5yZWFkLCBsZW4pOwogICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZWFkX3NpemUgPSBfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHNlbGYsIGRhdGEpIC0gcHJlZmV0Y2hlZF9zaXplOworICAgIHJlYWRfc2l6ZSA9IF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQoc2VsZiwgZGF0YSk7CiAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gcmVhZF9zaXplOwogICAgIHJldHVybiByZWFkX3NpemU7CiB9CiAKQEAgLTEwMDYsOCArMTIxMywxMCBAQAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdWx0KQogewogICAgIGNoYXIgKmlucHV0X2xpbmUgPSBQeU1lbV9SZWFsbG9jKHNlbGYtPmlucHV0X2xpbmUsIGxlbiArIDEpOwotICAgIGlmIChpbnB1dF9saW5lID09IE5VTEwpCisgICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWVtY3B5KGlucHV0X2xpbmUsIGxpbmUsIGxlbik7CiAgICAgaW5wdXRfbGluZVtsZW5dID0gJ1wwJzsKQEAgLTEwOTYsNyArMTMwNSwxMiBAQAogICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgb2xkX2l0ZW0gPSBzZWxmLT5tZW1vW2lkeF07CiAgICAgc2VsZi0+bWVtb1tpZHhdID0gdmFsdWU7Ci0gICAgUHlfWERFQ1JFRihvbGRfaXRlbSk7CisgICAgaWYgKG9sZF9pdGVtICE9IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9pdGVtKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlbGYtPm1lbW9fbGVuKys7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTA0LDggKzEzMTgsMTAgQEAKIF9VbnBpY2tsZXJfTmV3TWVtbyhQeV9zc2l6ZV90IG5ld19zaXplKQogewogICAgIFB5T2JqZWN0ICoqbWVtbyA9IFB5TWVtX01BTExPQyhuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgaWYgKG1lbW8gPT0gTlVMTCkKKyAgICBpZiAobWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBtZW1zZXQobWVtbywgMCwgbmV3X3NpemUgKiBzaXplb2YoUHlPYmplY3QgKikpOwogICAgIHJldHVybiBtZW1vOwogfQpAQCAtMTEzNiwyMSArMTM1Miw2IEBACiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOwotICAgIGlmIChzZWxmLT5zdGFjayA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7Ci0KLSAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKLSAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKICAgICBzZWxmLT5pbnB1dF9idWZmZXIgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwpAQCAtMTE2Nyw2ICsxMzY4LDE2IEBACiAgICAgc2VsZi0+bWFya3Nfc2l6ZSA9IDA7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKKyAgICBtZW1zZXQoJnNlbGYtPmJ1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOworICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOworICAgIHNlbGYtPm1lbW9fbGVuID0gMDsKKyAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CisgICAgc2VsZi0+c3RhY2sgPSAoUGRhdGEgKilQZGF0YV9OZXcoKTsKKworICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwgfHwgc2VsZi0+c3RhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMTIxMyw4ICsxNDI0LDggQEAKICAgICBpZiAoZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOwogCi0gICAgc2VsZi0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOwotICAgIHNlbGYtPmVycm9ycyA9IHN0cmR1cChlcnJvcnMpOworICAgIHNlbGYtPmVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChlbmNvZGluZyk7CisgICAgc2VsZi0+ZXJyb3JzID0gX1B5TWVtX1N0cmR1cChlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMIHx8IHNlbGYtPmVycm9ycyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTcsNyArMTQ2OCw4IEBACiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW8gaWQgdG9vIGxhcmdlIGZvciBMT05HX0JJTkdFVCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0xMjc0LDEyOCArMTQ4NiwxNzUgQEAKIHN0YXRpYyBpbnQKIG1lbW9fcHV0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlfc3NpemVfdCB4OwogICAgIGNoYXIgcGRhdGFbMzBdOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIGludCBzdGF0dXMgPSAwOworICAgIFB5X3NzaXplX3QgaWR4OworCisgICAgY29uc3QgY2hhciBtZW1vaXplX29wID0gTUVNT0laRTsKIAogICAgIGlmIChzZWxmLT5mYXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOwotICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCB4KSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWR4ID0gUHlNZW1vVGFibGVfU2l6ZShzZWxmLT5tZW1vKTsKKyAgICBpZiAoUHlNZW1vVGFibGVfU2V0KHNlbGYtPm1lbW8sIG9iaiwgaWR4KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICghc2VsZi0+YmluKSB7CisgICAgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtZW1vaXplX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmICghc2VsZi0+YmluKSB7CiAgICAgICAgIHBkYXRhWzBdID0gUFVUOwogICAgICAgICBQeU9TX3NucHJpbnRmKHBkYXRhICsgMSwgc2l6ZW9mKHBkYXRhKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHgpOworICAgICAgICAgICAgICAgICAgICAgICIlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBpZHgpOwogICAgICAgICBsZW4gPSBzdHJsZW4ocGRhdGEpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHggPCAyNTYpIHsKKyAgICAgICAgaWYgKGlkeCA8IDI1NikgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBCSU5QVVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKXg7CisgICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKWlkeDsKICAgICAgICAgICAgIGxlbiA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoeCA8PSAweGZmZmZmZmZmTCkgeworICAgICAgICBlbHNlIGlmIChpZHggPD0gMHhmZmZmZmZmZkwpIHsKICAgICAgICAgICAgIHBkYXRhWzBdID0gTE9OR19CSU5QVVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKGlkeCAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChpZHggPj4gMjQpICYgMHhmZik7CiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW8gaWQgdG9vIGxhcmdlIGZvciBMT05HX0JJTlBVVCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotCiAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBsZW4pIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKDApIHsKLSAgZXJyb3I6Ci0gICAgICAgIHN0YXR1cyA9IC0xOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aGljaG1vZHVsZShQeU9iamVjdCAqZ2xvYmFsLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCitnZXRhdHRyaWJ1dGUoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsIGludCBhbGxvd19xdWFsbmFtZSkgeworICAgIFB5T2JqZWN0ICpkb3R0ZWRfcGF0aDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9kb3QsICIuIik7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9sb2NhbHMsICI8bG9jYWxzPiIpOworCisgICAgZG90dGVkX3BhdGggPSBQeVVuaWNvZGVfU3BsaXQobmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfZG90KSwgLTEpOworICAgIGlmIChkb3R0ZWRfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBhc3NlcnQoUHlfU0laRShkb3R0ZWRfcGF0aCkgPj0gMSk7CisgICAgaWYgKCFhbGxvd19xdWFsbmFtZSAmJiBQeV9TSVpFKGRvdHRlZF9wYXRoKSA+IDEpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBxdWFsaWZpZWQgYXR0cmlidXRlICVSIG9uICVSOyIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgcHJvdG9jb2xzID49IDQgdG8gZW5hYmxlIHN1cHBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihvYmopOworICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKGRvdHRlZF9wYXRoKTsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpzdWJwYXRoID0gUHlMaXN0X0dFVF9JVEVNKGRvdHRlZF9wYXRoLCBpKTsKKyAgICAgICAgUHlPYmplY3QgKnRtcDsKKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5VW5pY29kZV9SaWNoQ29tcGFyZSgKKyAgICAgICAgICAgIHN1YnBhdGgsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xvY2FscyksIFB5X0VRKTsKKyAgICAgICAgaW50IGlzX2VxdWFsID0gKHJlc3VsdCA9PSBQeV9UcnVlKTsKKyAgICAgICAgYXNzZXJ0KFB5Qm9vbF9DaGVjayhyZXN1bHQpKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIGlmIChpc19lcXVhbCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlICVSIG9uICVSIiwgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBzdWJwYXRoKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYXR0cmlidXRlICVSIG9uICVSIiwgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBvYmogPSB0bXA7CisgICAgfQorICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3doaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKQogewotICAgIFB5X3NzaXplX3QgaSwgajsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm1vZHVsZV9zdHIgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbWFpbl9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKICAgICBQeU9iamVjdCAqbW9kdWxlc19kaWN0OwogICAgIFB5T2JqZWN0ICptb2R1bGU7CiAgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IGksIGo7CisgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CisgICAgX1B5X0lERU5USUZJRVIobW9kdWxlcyk7CisgICAgX1B5X0lERU5USUZJRVIoX19tYWluX18pOwogCi0gICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkgewotICAgICAgICBtb2R1bGVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbW9kdWxlX18iKTsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKKyAgICBtb2R1bGVfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZ2xvYmFsLCAmUHlJZF9fX21vZHVsZV9fKTsKKworICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgbWFpbl9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgaWYgKG1haW5fc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtb2R1bGVfbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIoZ2xvYmFsLCBtb2R1bGVfc3RyKTsKLQotICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAotICAgICAgIF9fbW9kdWxlX18gY2FuIGJlIE5vbmUuIElmIGl0IGlzIHNvLCB0aGVuIHNlYXJjaCBzeXMubW9kdWxlcwotICAgICAgIGZvciB0aGUgbW9kdWxlIG9mIGdsb2JhbC4gICovCi0gICAgaWYgKG1vZHVsZV9uYW1lID09IFB5X05vbmUpIHsKLSAgICAgICAgUHlfREVDUkVGKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgZ290byBzZWFyY2g7Ci0gICAgfQotCi0gICAgaWYgKG1vZHVsZV9uYW1lKSB7Ci0gICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKLSAgICB9Ci0gICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBJbiBzb21lIHJhcmUgY2FzZXMgKGUuZy4sIGJvdW5kIG1ldGhvZHMgb2YgZXh0ZW5zaW9uIHR5cGVzKSwKKyAgICAgICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzIGZvcgorICAgICAgICAgICB0aGUgbW9kdWxlIG9mIGdsb2JhbC4gKi8KKyAgICAgICAgaWYgKG1vZHVsZV9uYW1lICE9IFB5X05vbmUpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CisgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKKyAgICB9CisgICAgYXNzZXJ0KG1vZHVsZV9uYW1lID09IE5VTEwpOwogCi0gIHNlYXJjaDoKLSAgICBtb2R1bGVzX2RpY3QgPSBQeVN5c19HZXRPYmplY3QoIm1vZHVsZXMiKTsKLSAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpCisgICAgbW9kdWxlc19kaWN0ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX21vZHVsZXMpOworICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMubW9kdWxlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpID0gMDsKLSAgICBtb2R1bGVfbmFtZSA9IE5VTEw7CiAgICAgd2hpbGUgKChqID0gUHlEaWN0X05leHQobW9kdWxlc19kaWN0LCAmaSwgJm1vZHVsZV9uYW1lLCAmbW9kdWxlKSkpIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChtb2R1bGVfbmFtZSwgbWFpbl9zdHIsIFB5X0VRKSA9PSAxKQorICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgbW9kdWxlX25hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbWFpbl9fKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG9iaiA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIG9iaiA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBhbGxvd19xdWFsbmFtZSk7CiAgICAgICAgIGlmIChvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9iaiAhPSBnbG9iYWwpIHsKKyAgICAgICAgaWYgKG9iaiA9PSBnbG9iYWwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwogICAgICAgICB9Ci0KICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qIElmIG5vIG1vZHVsZSBpcyBmb3VuZCwgdXNlIF9fbWFpbl9fLiAqLwotICAgIGlmICghaikgewotICAgICAgICBtb2R1bGVfbmFtZSA9IG1haW5fc3RyOwotICAgIH0KLQorICAgIG1vZHVsZV9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOwogICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CiAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwogfQpAQCAtMTQyNCw3ICsxNjgzLDcgQEAKICAgICAgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKG9iaik7CiAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoUHlEaWN0X0dldEl0ZW0oc2VsZi0+ZmFzdF9tZW1vLCBrZXkpKSB7CisgICAgICAgIGlmIChQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzZWxmLT5mYXN0X21lbW8sIGtleSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhc3QgbW9kZTogY2FuJ3QgcGlja2xlIGN5Y2xpYyBvYmplY3RzICIKQEAgLTE0MzMsNiArMTY5Miw5IEBACiAgICAgICAgICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAtMTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZmFzdF9tZW1vLCBrZXksIFB5X05vbmUpIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAtMTsKQEAgLTE0NzIsNDYgKzE3MzQsNTggQEAKIHN0YXRpYyBpbnQKIHNhdmVfYm9vbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpidWZbMl0gPSB7IEZBTFNFLCBUUlVFIH07Ci0gICAgY29uc3QgY2hhciBsZW5bMl0gPSB7c2l6ZW9mKEZBTFNFKSAtIDEsIHNpemVvZihUUlVFKSAtIDF9OwotICAgIGludCBwID0gKG9iaiA9PSBQeV9UcnVlKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgYm9vbF9vcCA9IHAgPyBORVdUUlVFIDogTkVXRkFMU0U7CisgICAgICAgIGNvbnN0IGNoYXIgYm9vbF9vcCA9IChvYmogPT0gUHlfVHJ1ZSkgPyBORVdUUlVFIDogTkVXRkFMU0U7CiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYm9vbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBlbHNlIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBidWZbcF0sIGxlbltwXSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogVGhlc2UgYXJlbid0IG9wY29kZXMgLS0gdGhleSdyZSB3YXlzIHRvIHBpY2tsZSBib29scyBiZWZvcmUgcHJvdG9jb2wgMgorICAgICAgICAgKiBzbyB0aGF0IHVucGlja2xlcnMgd3JpdHRlbiBiZWZvcmUgYm9vbHMgd2VyZSBpbnRyb2R1Y2VkIHVucGlja2xlIHRoZW0KKyAgICAgICAgICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCisgICAgICAgICAqIE5vdGUgdGhhdCBwcm90b2NvbCAyIGFkZGVkIGRpcmVjdCB3YXlzIHRvIHBpY2tsZSBib29scy4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIgKmJvb2xfc3RyID0gKG9iaiA9PSBQeV9UcnVlKSA/ICJJMDFcbiIgOiAiSTAwXG4iOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgYm9vbF9zdHIsIHN0cmxlbihib29sX3N0cikpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfaW50KFBpY2tsZXJPYmplY3QgKnNlbGYsIGxvbmcgeCkKK3NhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIGNoYXIgcGRhdGFbMzJdOwotICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKyAgICBQeU9iamVjdCAqcmVwciA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGxvbmcgdmFsOworICAgIGludCBzdGF0dXMgPSAwOwogCi0gICAgaWYgKCFzZWxmLT5iaW4KLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgfHwgeCA+IDB4N2ZmZmZmZmZMIHx8IHggPCAtMHg4MDAwMDAwMEwKLSNlbmRpZgotICAgICAgICApIHsKLSAgICAgICAgLyogVGV4dC1tb2RlIHBpY2tsZSwgb3IgbG9uZyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgNC1ieXRlCi0gICAgICAgICAqIHNpZ25lZCBCSU5JTlQgZm9ybWF0OiAgc3RvcmUgYXMgYSBzdHJpbmcuCi0gICAgICAgICAqLwotICAgICAgICBwZGF0YVswXSA9IExPTkc7ICAgICAgICAvKiB1c2UgTE9ORyBmb3IgY29uc2lzdGVuY3kgd2l0aCBwaWNrbGUucHkgKi8KLSAgICAgICAgUHlPU19zbnByaW50ZihwZGF0YSArIDEsIHNpemVvZihwZGF0YSkgLSAxLCAiJWxkTFxuIiwgeCk7Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgc3RybGVuKHBkYXRhKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIGNvbnN0IGNoYXIgbG9uZ19vcCA9IExPTkc7CisKKyAgICB2YWw9IFB5TG9uZ19Bc0xvbmcob2JqKTsKKyAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgLyogb3V0IG9mIHJhbmdlIGZvciBpbnQgcGlja2xpbmcgKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIEJpbmFyeSBwaWNrbGUgYW5kIHggZml0cyBpbiBhIHNpZ25lZCA0LWJ5dGUgaW50LiAqLwotICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDgpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICBlbHNlIGlmIChzZWxmLT5iaW4gJiYKKyAgICAgICAgICAgICAoc2l6ZW9mKGxvbmcpIDw9IDQgfHwKKyAgICAgICAgICAgICAgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gKC0weDdmZmZmZmZmTCAtIDEpKSkpIHsKKyAgICAgICAgLyogcmVzdWx0IGZpdHMgaW4gYSBzaWduZWQgNC1ieXRlIGludGVnZXIuIAorCisgICAgICAgICAgIE5vdGU6IHdlIGNhbid0IHVzZSAtMHg4MDAwMDAwMEwgaW4gdGhlIGFib3ZlIGNvbmRpdGlvbiBiZWNhdXNlIHNvbWUKKyAgICAgICAgICAgY29tcGlsZXJzIChlLmcuLCBNU1ZDKSB3aWxsIHByb21vdGUgMHg4MDAwMDAwMEwgdG8gYW4gdW5zaWduZWQgdHlwZQorICAgICAgICAgICBiZWZvcmUgYXBwbHlpbmcgdGhlIHVuYXJ5IG1pbnVzIHdoZW4gc2l6ZW9mKGxvbmcpIDw9IDQuIFRoZQorICAgICAgICAgICByZXN1bHRpbmcgdmFsdWUgc3RheXMgdW5zaWduZWQgd2hpY2ggaXMgY29tbW9ubHkgbm90IHdoYXQgd2Ugd2FudCwKKyAgICAgICAgICAgc28gTVNWQyBoYXBwaWx5IHdhcm5zIHVzIGFib3V0IGl0LiAgSG93ZXZlciwgdGhhdCByZXN1bHQgd291bGQgaGF2ZQorICAgICAgICAgICBiZWVuIGZpbmUgYmVjYXVzZSB3ZSBndWFyZCBmb3Igc2l6ZW9mKGxvbmcpIDw9IDQgd2hpY2ggdHVybnMgdGhlCisgICAgICAgICAgIGNvbmRpdGlvbiB0cnVlIGluIHRoYXQgcGFydGljdWxhciBjYXNlLiAqLworICAgICAgICBjaGFyIHBkYXRhWzMyXTsKKyAgICAgICAgUHlfc3NpemVfdCBsZW4gPSAwOworCisgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKHZhbCAmIDB4ZmYpOworICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsID4+IDgpICYgMHhmZik7CisgICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWwgPj4gMTYpICYgMHhmZik7CisgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWwgPj4gMjQpICYgMHhmZik7CiAKICAgICAgICAgaWYgKChwZGF0YVs0XSA9PSAwKSAmJiAocGRhdGFbM10gPT0gMCkpIHsKICAgICAgICAgICAgIGlmIChwZGF0YVsyXSA9PSAwKSB7CkBAIC0xNTMwLDMxICsxODA0LDEwIEBACiAKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBsZW4pIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotc2F2ZV9sb25nKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnJlcHIgPSBOVUxMOwotICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICBsb25nIHZhbCA9IFB5TG9uZ19Bc0xvbmcob2JqKTsKLSAgICBpbnQgc3RhdHVzID0gMDsKLQotICAgIGNvbnN0IGNoYXIgbG9uZ19vcCA9IExPTkc7Ci0KLSAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgLyogb3V0IG9mIHJhbmdlIGZvciBpbnQgcGlja2xpbmcgKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICB9Ci0gICAgZWxzZQotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICBpZiAodmFsIDw9IDB4N2ZmZmZmZmZMICYmIHZhbCA+PSAtMHg4MDAwMDAwMEwpCi0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiBzYXZlX2ludChzZWxmLCB2YWwpOwotCiAgICAgaWYgKHNlbGYtPnByb3RvID49IDIpIHsKICAgICAgICAgLyogTGluZWFyLXRpbWUgcGlja2xpbmcuICovCiAgICAgICAgIHNpemVfdCBuYml0czsKQEAgLTE3MTksNDAgKzE5NzIsMjUgQEAKICAgICAgICAgICAgUHl0aG9uIDIgKmFuZCogdGhlIGFwcHJvcHJpYXRlICdieXRlcycgb2JqZWN0IHdoZW4gdW5waWNrbGVkCiAgICAgICAgICAgIHVzaW5nIFB5dGhvbiAzLiBBZ2FpbiB0aGlzIGlzIGEgaGFjayBhbmQgd2UgZG9uJ3QgbmVlZCB0byBkbyB0aGlzCiAgICAgICAgICAgIHdpdGggbmV3ZXIgcHJvdG9jb2xzLiAqLwotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKmNvZGVjc19lbmNvZGUgPSBOVUxMOwogICAgICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlID0gTlVMTDsKICAgICAgICAgaW50IHN0YXR1czsKIAotICAgICAgICBpZiAoY29kZWNzX2VuY29kZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNzX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29kZWNzIik7Ci0gICAgICAgICAgICBpZiAoY29kZWNzX21vZHVsZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY29kZWNzX2VuY29kZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29kZWNzX21vZHVsZSwgImVuY29kZSIpOwotICAgICAgICAgICAgUHlfREVDUkVGKGNvZGVjc19tb2R1bGUpOwotICAgICAgICAgICAgaWYgKGNvZGVjc19lbmNvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCiAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKG9iaikgPT0gMCkgewogICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oKSkiLCAoUHlPYmplY3QqKSZQeUJ5dGVzX1R5cGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpsYXRpbjEgPSBOVUxMOworICAgICAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgICAgICAgICAgUHlPYmplY3QgKnVuaWNvZGVfc3RyID0KICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0Iik7CisgICAgICAgICAgICBfUHlfSURFTlRJRklFUihsYXRpbjEpOworCiAgICAgICAgICAgICBpZiAodW5pY29kZV9zdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAobGF0aW4xID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygibGF0aW4xIik7Ci0gICAgICAgICAgICAgICAgaWYgKGxhdGluMSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPTykpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNzX2VuY29kZSwgdW5pY29kZV9zdHIsIGxhdGluMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3NfZW5jb2RlLCB1bmljb2RlX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbGF0aW4xKSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZV9zdHIpOwogICAgICAgICB9CiAKQEAgLTE3NjYsMTQgKzIwMDQsMTQgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgY2hhciBoZWFkZXJbNV07CisgICAgICAgIGNoYXIgaGVhZGVyWzldOwogICAgICAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShvYmopOwogICAgICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgaWYgKHNpemUgPCAyNTYpIHsKKyAgICAgICAgaWYgKHNpemUgPD0gMHhmZikgewogICAgICAgICAgICAgaGVhZGVyWzBdID0gU0hPUlRfQklOQllURVM7CiAgICAgICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcilzaXplOwogICAgICAgICAgICAgbGVuID0gMjsKQEAgLTE3ODYsNiArMjAyNCwxMSBAQAogICAgICAgICAgICAgaGVhZGVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOwogICAgICAgICAgICAgbGVuID0gNTsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBoZWFkZXJbMF0gPSBCSU5CWVRFUzg7CisgICAgICAgICAgICBfd3JpdGVfc2l6ZTY0KGhlYWRlciArIDEsIHNpemUpOworICAgICAgICAgICAgbGVuID0gOTsKKyAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgYnl0ZXMgb2JqZWN0IGxhcmdlciB0aGFuIDQgR2lCIik7CkBAIC0xODczLDYzICsyMTE2LDEwNiBAQAogfQogCiBzdGF0aWMgaW50Ci1zYXZlX3VuaWNvZGUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3dyaXRlX3V0ZjgoUGlja2xlck9iamVjdCAqc2VsZiwgY2hhciAqZGF0YSwgUHlfc3NpemVfdCBzaXplKQogewotICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICBQeU9iamVjdCAqZW5jb2RlZCA9IE5VTEw7CisgICAgY2hhciBoZWFkZXJbOV07CisgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpZiAoc2VsZi0+YmluKSB7Ci0gICAgICAgIGNoYXIgcGRhdGFbNV07Ci0KLSAgICAgICAgZW5jb2RlZCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcob2JqLCAidXRmLTgiLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLQotICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKHNpemUgPiAweGZmZmZmZmZmTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBzdHJpbmcgbGFyZ2VyIHRoYW4gNCBHaUIiKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7ICAgICAgICAgIC8qIHN0cmluZyB0b28gbGFyZ2UgKi8KLSAgICAgICAgfQotCi0gICAgICAgIHBkYXRhWzBdID0gQklOVU5JQ09ERTsKLSAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikoc2l6ZSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiA4KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMjQpICYgMHhmZik7Ci0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCA1KSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoc2l6ZSA8PSAweGZmICYmIHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgaGVhZGVyWzBdID0gU0hPUlRfQklOVU5JQ09ERTsKKyAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKKyAgICAgICAgbGVuID0gMjsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSA8PSAweGZmZmZmZmZmVUwpIHsKKyAgICAgICAgaGVhZGVyWzBdID0gQklOVU5JQ09ERTsKKyAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpKHNpemUgJiAweGZmKTsKKyAgICAgICAgaGVhZGVyWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDgpICYgMHhmZik7CisgICAgICAgIGhlYWRlclszXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgaGVhZGVyWzRdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDI0KSAmIDB4ZmYpOworICAgICAgICBsZW4gPSA1OworICAgIH0KKyAgICBlbHNlIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgIGhlYWRlclswXSA9IEJJTlVOSUNPREU4OworICAgICAgICBfd3JpdGVfc2l6ZTY0KGhlYWRlciArIDEsIHNpemUpOworICAgICAgICBsZW4gPSA5OwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIHN0cmluZyBsYXJnZXIgdGhhbiA0R2lCIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCBsZW4pIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBkYXRhLCBzaXplKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit3cml0ZV91bmljb2RlX2JpbmFyeShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICplbmNvZGVkID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgY2hhciAqZGF0YTsKKyAgICBpbnQgcjsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZGF0YSA9IFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKG9iaiwgJnNpemUpOworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIHJldHVybiB3cml0ZV91dGY4KHNlbGYsIGRhdGEsIHNpemUpOworCisgICAgLyogSXNzdWUgIzgzODM6IGZvciBzdHJpbmdzIHdpdGggbG9uZSBzdXJyb2dhdGVzLCBmYWxsYmFjayBvbiB0aGUKKyAgICAgICAic3Vycm9nYXRlcGFzcyIgZXJyb3IgaGFuZGxlci4gKi8KKyAgICBQeUVycl9DbGVhcigpOworICAgIGVuY29kZWQgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKG9iaiwgInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKTsKKyAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByID0gd3JpdGVfdXRmOChzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKTsKKyAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQKK3NhdmVfdW5pY29kZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIGlmIChzZWxmLT5iaW4pIHsKKyAgICAgICAgaWYgKHdyaXRlX3VuaWNvZGVfYmluYXJ5KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7CisgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICAgICAgY29uc3QgY2hhciB1bmljb2RlX29wID0gVU5JQ09ERTsKIAogICAgICAgICBlbmNvZGVkID0gcmF3X3VuaWNvZGVfZXNjYXBlKG9iaik7CiAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZ1bmljb2RlX29wLCAxKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogCiAgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpOwotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwogCiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJldHVybiAtMTsKIAotICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICByZXR1cm4gMDsKLQotICBlcnJvcjoKLSAgICBQeV9YREVDUkVGKGVuY29kZWQpOwotICAgIHJldHVybiAtMTsKIH0KIAogLyogQSBoZWxwZXIgZm9yIHNhdmVfdHVwbGUuICBQdXNoIHRoZSBsZW4gZWxlbWVudHMgaW4gdHVwbGUgdCBvbiB0aGUgc3RhY2suICovCkBAIC0yNTU3LDM0ICsyODQzLDI1MiBAQAogfQogCiBzdGF0aWMgaW50CitzYXZlX3NldChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICppdGVtOworICAgIGludCBpOworICAgIFB5X3NzaXplX3Qgc2V0X3NpemUsIHBwb3MgPSAwOworICAgIFB5X2hhc2hfdCBoYXNoOworCisgICAgY29uc3QgY2hhciBlbXB0eV9zZXRfb3AgPSBFTVBUWV9TRVQ7CisgICAgY29uc3QgY2hhciBtYXJrX29wID0gTUFSSzsKKyAgICBjb25zdCBjaGFyIGFkZGl0ZW1zX29wID0gQURESVRFTVM7CisKKyAgICBpZiAoc2VsZi0+cHJvdG8gPCA0KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZTsKKyAgICAgICAgaW50IHN0YXR1czsKKworICAgICAgICBpdGVtcyA9IFB5U2VxdWVuY2VfTGlzdChvYmopOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE8pKSIsIChQeU9iamVjdCopJlB5U2V0X1R5cGUsIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgaWYgKHJlZHVjZV92YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgLyogc2F2ZV9yZWR1Y2UoKSB3aWxsIG1lbW9pemUgdGhlIG9iamVjdCBhdXRvbWF0aWNhbGx5LiAqLworICAgICAgICBzdGF0dXMgPSBzYXZlX3JlZHVjZShzZWxmLCByZWR1Y2VfdmFsdWUsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihyZWR1Y2VfdmFsdWUpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZW1wdHlfc2V0X29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc2V0X3NpemUgPSBQeVNldF9HRVRfU0laRShvYmopOworICAgIGlmIChzZXRfc2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gMDsgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgIC8qIFdyaXRlIGluIGJhdGNoZXMgb2YgQkFUQ0hTSVpFLiAqLworICAgIGRvIHsKKyAgICAgICAgaSA9IDA7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbWFya19vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShvYmosICZwcG9zLCAmaXRlbSwgJmhhc2gpKSB7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBpdGVtLCAwKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCsraSA9PSBCQVRDSFNJWkUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZhZGRpdGVtc19vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoUHlTZXRfR0VUX1NJWkUob2JqKSAhPSBzZXRfc2l6ZSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAic2V0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChpID09IEJBVENIU0laRSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc2F2ZV9mcm96ZW5zZXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlcjsKKworICAgIGNvbnN0IGNoYXIgbWFya19vcCA9IE1BUks7CisgICAgY29uc3QgY2hhciBmcm96ZW5zZXRfb3AgPSBGUk9aRU5TRVQ7CisKKyAgICBpZiAoc2VsZi0+ZmFzdCAmJiAhZmFzdF9zYXZlX2VudGVyKHNlbGYsIG9iaikpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChzZWxmLT5wcm90byA8IDQpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOworICAgICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOworICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9MaXN0KG9iaik7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oTykpIiwgKFB5T2JqZWN0KikmUHlGcm96ZW5TZXRfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIC8qIHNhdmVfcmVkdWNlKCkgd2lsbCBtZW1vaXplIHRoZSBvYmplY3QgYXV0b21hdGljYWxseS4gKi8KKyAgICAgICAgc3RhdHVzID0gc2F2ZV9yZWR1Y2Uoc2VsZiwgcmVkdWNlX3ZhbHVlLCBvYmopOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKKyAgICBpZiAoaXRlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yICg7OykgeworICAgICAgICBQeU9iamVjdCAqaXRlbTsKKworICAgICAgICBpdGVtID0gUHlJdGVyX05leHQoaXRlcik7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChzYXZlKHNlbGYsIGl0ZW0sIDApIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisgICAgUHlfREVDUkVGKGl0ZXIpOworCisgICAgLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgc3RhY2ssIGFuZCBmZXRjaCB0aGUgb2JqZWN0IGJhY2sgZnJvbSB0aGUgbWVtby4gKi8KKyAgICBpZiAoUHlNZW1vVGFibGVfR2V0KHNlbGYtPm1lbW8sIG9iaikpIHsKKyAgICAgICAgY29uc3QgY2hhciBwb3BfbWFya19vcCA9IFBPUF9NQVJLOworCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmcG9wX21hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKG1lbW9fZ2V0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmZyb3plbnNldF9vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZml4X2ltcG9ydHMoUHlPYmplY3QgKiptb2R1bGVfbmFtZSwgUHlPYmplY3QgKipnbG9iYWxfbmFtZSkKK3sKKyAgICBQeU9iamVjdCAqa2V5OworICAgIFB5T2JqZWN0ICppdGVtOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5uYW1lX21hcHBpbmdfM3RvMiwga2V5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgICBQeU9iamVjdCAqZml4ZWRfbW9kdWxlX25hbWU7CisgICAgICAgIFB5T2JqZWN0ICpmaXhlZF9nbG9iYWxfbmFtZTsKKworICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soaXRlbSkgfHwgUHlUdXBsZV9HRVRfU0laRShpdGVtKSAhPSAyKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgMi10dXBsZXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGZpeGVkX21vZHVsZV9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAwKTsKKyAgICAgICAgZml4ZWRfZ2xvYmFsX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDEpOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhmaXhlZF9tb2R1bGVfbmFtZSkgfHwKKyAgICAgICAgICAgICFQeVVuaWNvZGVfQ2hlY2soZml4ZWRfZ2xvYmFsX25hbWUpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgcGFpcnMgb2Ygc3RyLCBub3QgKCUuMjAwcywgJS4yMDBzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShmaXhlZF9tb2R1bGVfbmFtZSktPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShmaXhlZF9nbG9iYWxfbmFtZSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgUHlfQ0xFQVIoKm1vZHVsZV9uYW1lKTsKKyAgICAgICAgUHlfQ0xFQVIoKmdsb2JhbF9uYW1lKTsKKyAgICAgICAgUHlfSU5DUkVGKGZpeGVkX21vZHVsZV9uYW1lKTsKKyAgICAgICAgUHlfSU5DUkVGKGZpeGVkX2dsb2JhbF9uYW1lKTsKKyAgICAgICAgKm1vZHVsZV9uYW1lID0gZml4ZWRfbW9kdWxlX25hbWU7CisgICAgICAgICpnbG9iYWxfbmFtZSA9IGZpeGVkX2dsb2JhbF9uYW1lOworICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIsICptb2R1bGVfbmFtZSk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHN0cmluZ3MsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKCptb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgKm1vZHVsZV9uYW1lID0gaXRlbTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIHNhdmVfZ2xvYmFsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqbmFtZV9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2xzOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBpbnQgc3RhdHVzID0gMDsKKyAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19xdWFsbmFtZV9fKTsKIAogICAgIGNvbnN0IGNoYXIgZ2xvYmFsX29wID0gR0xPQkFMOwogCi0gICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKLSAgICAgICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQogICAgIGlmIChuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKICAgICAgICAgZ2xvYmFsX25hbWUgPSBuYW1lOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsX25hbWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZV9zdHIpOwotICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3F1YWxuYW1lX18pOworICAgICAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fbmFtZV9fKTsKKyAgICAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgZ2xvYmFsX25hbWUpOworICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTI1OTgsMjEgKzMxMDIsMjEgQEAKICAgICAgICBleHRyYSBwYXJhbWV0ZXJzIG9mIF9faW1wb3J0X18gdG8gZml4IHRoYXQuICovCiAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0KG1vZHVsZV9uYW1lKTsKICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGltcG9ydCBvZiBtb2R1bGUgJVIgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgIGNscyA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTLiVTIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGF0dHJpYnV0ZSBsb29rdXAgJVMgb24gJVMgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIG9iaiwgZ2xvYmFsX25hbWUsIG1vZHVsZV9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNscyAhPSBvYmopIHsKICAgICAgICAgUHlfREVDUkVGKGNscyk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBpdCdzIG5vdCB0aGUgc2FtZSBvYmplY3QgYXMgJVMuJVMiLAogICAgICAgICAgICAgICAgICAgICAgb2JqLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjYyMywxOCArMzEyNywyNyBAQAogICAgICAgICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGluIHRoZSBleHRlbnNpb24gcmVnaXN0cnksIGFuZCBpZgogICAgICAgICAgKiBzbyBnZW5lcmF0ZSBhbiBFWFQgb3Bjb2RlLgogICAgICAgICAgKi8KKyAgICAgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9rZXk7CiAgICAgICAgIFB5T2JqZWN0ICpjb2RlX29iajsgICAgICAvKiBleHRlbnNpb24gY29kZSBhcyBQeXRob24gb2JqZWN0ICovCiAgICAgICAgIGxvbmcgY29kZTsgICAgICAgICAgICAgICAvKiBleHRlbnNpb24gY29kZSBhcyBDIHZhbHVlICovCiAgICAgICAgIGNoYXIgcGRhdGFbNV07CiAgICAgICAgIFB5X3NzaXplX3QgbjsKIAotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR3b190dXBsZSwgMCwgbW9kdWxlX25hbWUpOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR3b190dXBsZSwgMSwgZ2xvYmFsX25hbWUpOwotICAgICAgICBjb2RlX29iaiA9IFB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbl9yZWdpc3RyeSwgdHdvX3R1cGxlKTsKKyAgICAgICAgZXh0ZW5zaW9uX2tleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBpZiAoZXh0ZW5zaW9uX2tleSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGNvZGVfb2JqID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25fa2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGV4dGVuc2lvbl9rZXkpOwogICAgICAgICAvKiBUaGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBleHRlbnNpb24gcmVnaXN0cnkuCiAgICAgICAgICAgIFRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5IGNvZGUgcGF0aC4gKi8KLSAgICAgICAgaWYgKGNvZGVfb2JqID09IE5VTEwpCisgICAgICAgIGlmIChjb2RlX29iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBnb3RvIGdlbl9nbG9iYWw7CisgICAgICAgIH0KIAogICAgICAgICAvKiBYWFg6IHBpY2tsZS5weSBkb2Vzbid0IGNoZWNrIG5laXRoZXIgdGhlIHR5cGUsIG5vciB0aGUgcmFuZ2UKICAgICAgICAgICAgb2YgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBleHRlbnNpb25fcmVnaXN0cnkuIEl0IHNob3VsZCBmb3IKQEAgLTI2NDIsNyArMzE1NSw3IEBACiAKICAgICAgICAgLyogVmVyaWZ5IGNvZGVfb2JqIGhhcyB0aGUgcmlnaHQgdHlwZSBhbmQgdmFsdWUuICovCiAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKGNvZGVfb2JqKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uIGNvZGUgJVIgaXNuJ3QgYW4gaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLCBjb2RlX29iaik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjY1MCw5ICszMTYzLDggQEAKICAgICAgICAgY29kZSA9IFB5TG9uZ19BU19MT05HKGNvZGVfb2JqKTsKICAgICAgICAgaWYgKGNvZGUgPD0gMCB8fCBjb2RlID4gMHg3ZmZmZmZmZkwpIHsKICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uIGNvZGUgJWxkIGlzIG91dCBvZiByYW5nZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgY29kZSk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAiQ2FuJ3QgcGlja2xlICVSOiBleHRlbnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQgaXMgb3V0IG9mIHJhbmdlIiwgb2JqLCBjb2RlKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIApAQCAtMjY4MSwxMjAgKzMxOTMsODQgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQotICAgICAgICAgICBwcm90b2NvbCA8PSAyLCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQotICAgICAgICAgICBleHRlbnNpb24gcmVnaXN0cnkuICovCi0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOwotICAgICAgICBQeU9iamVjdCAqKCp1bmljb2RlX2VuY29kZXIpKFB5T2JqZWN0ICopOwotCiAgIGdlbl9nbG9iYWw6Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZ2xvYmFsX29wLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgY29uc3QgY2hhciBzdGFja19nbG9iYWxfb3AgPSBTVEFDS19HTE9CQUw7CiAKLSAgICAgICAgLyogU2luY2UgUHl0aG9uIDMuMCBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGlkZW50aWZpZXJzLCB3ZSBlbmNvZGUgYm90aAotICAgICAgICAgICB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZSBnbG9iYWwgbmFtZSB1c2luZyBVVEYtOC4gV2UgZG8gc28gb25seSB3aGVuCi0gICAgICAgICAgIHdlIGFyZSB1c2luZyB0aGUgcGlja2xlIHByb3RvY29sIG5ld2VyIHRoYW4gdmVyc2lvbiAzLiBUaGlzIGlzIHRvCi0gICAgICAgICAgIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgVW5waWNrbGVyIHJ1bm5pbmcgb24gUHl0aG9uIDIueC4gKi8KLSAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDMpIHsKLSAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmc7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBtb2R1bGVfbmFtZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBnbG9iYWxfbmFtZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmc3RhY2tfZ2xvYmFsX29wLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nOwotICAgICAgICB9CisgICAgICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQorICAgICAgICAgICAgICAgcHJvdG9jb2wgPCA0LCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQorICAgICAgICAgICAgICAgZXh0ZW5zaW9uIHJlZ2lzdHJ5LiAqLworICAgICAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7CisgICAgICAgICAgICBQeU9iamVjdCAqKCp1bmljb2RlX2VuY29kZXIpKFB5T2JqZWN0ICopOwogCi0gICAgICAgIC8qIEZvciBwcm90b2NvbCA8IDMgYW5kIGlmIHRoZSB1c2VyIGRpZG4ndCByZXF1ZXN0IGFnYWluc3QgZG9pbmcgc28sCi0gICAgICAgICAgIHdlIGNvbnZlcnQgbW9kdWxlIG5hbWVzIHRvIHRoZSBvbGQgMi54IG1vZHVsZSBuYW1lcy4gKi8KLSAgICAgICAgaWYgKHNlbGYtPmZpeF9pbXBvcnRzKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07Ci0KLSAgICAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZnbG9iYWxfb3AsIDEpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18zdG8yLCBrZXkpOwotICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAyLXR1cGxlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKworICAgICAgICAgICAgLyogRm9yIHByb3RvY29sIDwgMyBhbmQgaWYgdGhlIHVzZXIgZGlkbid0IHJlcXVlc3QgYWdhaW5zdCBkb2luZworICAgICAgICAgICAgICAgc28sIHdlIGNvbnZlcnQgbW9kdWxlIG5hbWVzIHRvIHRoZSBvbGQgMi54IG1vZHVsZSBuYW1lcy4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA8IDMgJiYgc2VsZi0+Zml4X2ltcG9ydHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZml4X2ltcG9ydHMoJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9DTEVBUihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIoZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAwKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobW9kdWxlX25hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICFQeVVuaWNvZGVfQ2hlY2soZ2xvYmFsX25hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgcGFpcnMgb2Ygc3RyLCBub3QgKCUuMjAwcywgJS4yMDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1vZHVsZV9uYW1lKS0+dHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZ2xvYmFsX25hbWUpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihpbXBvcnRfbWFwcGluZ18zdG8yLCBtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBzdHJpbmdzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9DTEVBUihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBpdGVtOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICAvKiBTaW5jZSBQeXRob24gMy4wIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgaWRlbnRpZmllcnMsIHdlIGVuY29kZQorICAgICAgICAgICAgICAgYm90aCB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZSBnbG9iYWwgbmFtZSB1c2luZyBVVEYtOC4gV2UgZG8gc28KKyAgICAgICAgICAgICAgIG9ubHkgd2hlbiB3ZSBhcmUgdXNpbmcgdGhlIHBpY2tsZSBwcm90b2NvbCBuZXdlciB0aGFuIHZlcnNpb24KKyAgICAgICAgICAgICAgIDMuIFRoaXMgaXMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBVbnBpY2tsZXIgcnVubmluZworICAgICAgICAgICAgICAgb24gUHl0aG9uIDIueC4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA9PSAzKSB7CisgICAgICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2Rlcihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBtb2R1bGUgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIHNlbGYtPnByb3RvKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLwotICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBtb2R1bGUgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBwcm90b2NvbCAlaSIsIG1vZHVsZV9uYW1lLCBzZWxmLT5wcm90byk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KLSAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2RlcihnbG9iYWxfbmFtZSk7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgZ2xvYmFsIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8pOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLworICAgICAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2RlcihnbG9iYWxfbmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBnbG9iYWwgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAgICAgLyogTWVtb2l6ZSB0aGUgb2JqZWN0LiAqLwogICAgICAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjgxMiwzMCArMzI4OCw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfZWxsaXBzaXMoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Ci0gICAgaW50IHJlczsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXMgPSBzYXZlX2dsb2JhbChzZWxmLCBQeV9FbGxpcHNpcywgc3RyKTsKLSAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci1zYXZlX25vdGltcGxlbWVudGVkKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOb3RJbXBsZW1lbnRlZCIpOwotICAgIGludCByZXM7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgUHlfTm90SW1wbGVtZW50ZWQsIHN0cik7Ci0gICAgUHlfREVDUkVGKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAogc2F2ZV9zaW5nbGV0b25fdHlwZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqc2luZ2xldG9uKQogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CkBAIC0yODc1LDcgKzMzMjcsNyBAQAogICAgIGNvbnN0IGNoYXIgYmlucGVyc2lkX29wID0gQklOUEVSU0lEOwogCiAgICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgcGlkID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgZnVuYywgb2JqKTsKKyAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKGZ1bmMsIG9iaik7CiAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTI5MjMsMTQgKzMzNzUsOSBAQAogZ2V0X2NsYXNzKFB5T2JqZWN0ICpvYmopCiB7CiAgICAgUHlPYmplY3QgKmNsczsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnN0cl9jbGFzczsKKyAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOwogCi0gICAgaWYgKHN0cl9jbGFzcyA9PSBOVUxMKSB7Ci0gICAgICAgIHN0cl9jbGFzcyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKLSAgICAgICAgaWYgKHN0cl9jbGFzcyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGNscyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBzdHJfY2xhc3MpOworICAgIGNscyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2NsYXNzX18pOwogICAgIGlmIChjbHMgPT0gTlVMTCkgewogICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0yOTUyLDE3ICszMzk5LDE4IEBACiAgICAgUHlPYmplY3QgKnN0YXRlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbGlzdGl0ZW1zID0gUHlfTm9uZTsKICAgICBQeU9iamVjdCAqZGljdGl0ZW1zID0gUHlfTm9uZTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgUHlfc3NpemVfdCBzaXplOwotCi0gICAgaW50IHVzZV9uZXdvYmogPSBzZWxmLT5wcm90byA+PSAyOworICAgIGludCB1c2VfbmV3b2JqID0gMCwgdXNlX25ld29ial9leCA9IDA7CiAKICAgICBjb25zdCBjaGFyIHJlZHVjZV9vcCA9IFJFRFVDRTsKICAgICBjb25zdCBjaGFyIGJ1aWxkX29wID0gQlVJTEQ7CiAgICAgY29uc3QgY2hhciBuZXdvYmpfb3AgPSBORVdPQko7CisgICAgY29uc3QgY2hhciBuZXdvYmpfZXhfb3AgPSBORVdPQkpfRVg7CiAKICAgICBzaXplID0gUHlUdXBsZV9TaXplKGFyZ3MpOwogICAgIGlmIChzaXplIDwgMiB8fCBzaXplID4gNSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgInR1cGxlIHJldHVybmVkIGJ5ICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAidHVwbGUgcmV0dXJuZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgIl9fcmVkdWNlX18gbXVzdCBjb250YWluIDIgdGhyb3VnaCA1IGVsZW1lbnRzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yOTcyLDEyICszNDIwLDEyIEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhjYWxsYWJsZSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgImZpcnN0IGl0ZW0gb2YgdGhlIHR1cGxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfX3JlZHVjZV9fIG11c3QgYmUgY2FsbGFibGUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJndHVwKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGEgdHVwbGUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTI5ODgsNyArMzQzNiw3IEBACiAgICAgaWYgKGxpc3RpdGVtcyA9PSBQeV9Ob25lKQogICAgICAgICBsaXN0aXRlbXMgPSBOVUxMOwogICAgIGVsc2UgaWYgKCFQeUl0ZXJfQ2hlY2sobGlzdGl0ZW1zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgImZvdXJ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgImZvdXJ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGFuIGl0ZXJhdG9yLCBub3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShsaXN0aXRlbXMpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjk5Nyw0MCArMzQ0NSw4MSBAQAogICAgIGlmIChkaWN0aXRlbXMgPT0gUHlfTm9uZSkKICAgICAgICAgZGljdGl0ZW1zID0gTlVMTDsKICAgICBlbHNlIGlmICghUHlJdGVyX0NoZWNrKGRpY3RpdGVtcykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJmaWZ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgImZpZnRoIGVsZW1lbnQgb2YgdGhlIHR1cGxlICIKICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfX3JlZHVjZV9fIG11c3QgYmUgYW4gaXRlcmF0b3IsIG5vdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGRpY3RpdGVtcyktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgLyogUHJvdG9jb2wgMiBzcGVjaWFsIGNhc2U6IGlmIGNhbGxhYmxlJ3MgbmFtZSBpcyBfX25ld29ial9fLCB1c2UKLSAgICAgICBORVdPQkouICovCi0gICAgaWYgKHVzZV9uZXdvYmopIHsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpuZXdvYmpfc3RyID0gTlVMTCwgKm5hbWVfc3RyID0gTlVMTDsKKyAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMikgewogICAgICAgICBQeU9iamVjdCAqbmFtZTsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOwogCi0gICAgICAgIGlmIChuZXdvYmpfc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ld29ial9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uZXdvYmpfXyIpOwotICAgICAgICAgICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgICAgIGlmIChuZXdvYmpfc3RyID09IE5VTEwgfHwgbmFtZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBuYW1lID0gUHlPYmplY3RfR2V0QXR0cihjYWxsYWJsZSwgbmFtZV9zdHIpOworICAgICAgICBuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChjYWxsYWJsZSwgJlB5SWRfX19uYW1lX18pOwogICAgICAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB1c2VfbmV3b2JqID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisgICAgICAgICAgICB1c2VfbmV3b2JqX2V4ID0gUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbmV3b2JqX2V4X18pKSA9PSAwOworICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7CiAgICAgICAgICAgICB1c2VfbmV3b2JqID0gUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUobmFtZSwgbmV3b2JqX3N0cikgPT0gMDsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZSgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19uZXdvYmpfXykpID09IDA7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHVzZV9uZXdvYmopIHsKKworICAgIGlmICh1c2VfbmV3b2JqX2V4KSB7CisgICAgICAgIFB5T2JqZWN0ICpjbHM7CisgICAgICAgIFB5T2JqZWN0ICphcmdzOworICAgICAgICBQeU9iamVjdCAqa3dhcmdzOworCisgICAgICAgIGlmIChQeV9TSVpFKGFyZ3R1cCkgIT0gMykgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggb2YgdGhlIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0IGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhhY3RseSAzLCBub3QgJXpkIiwgUHlfU0laRShhcmd0dXApKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGNscyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAwKTsKKyAgICAgICAgaWYgKCFQeVR5cGVfQ2hlY2soY2xzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBjbGFzcywgbm90ICUuMjAwcyIsIFB5X1RZUEUoY2xzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXJncyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAxKTsKKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSB0dXBsZSwgbm90ICUuMjAwcyIsIFB5X1RZUEUoYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGt3YXJncyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAyKTsKKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soa3dhcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcmQgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwgUHlfVFlQRShrd2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYXZlKHNlbGYsIGNscywgMCkgPCAwIHx8CisgICAgICAgICAgICBzYXZlKHNlbGYsIGFyZ3MsIDApIDwgMCB8fAorICAgICAgICAgICAgc2F2ZShzZWxmLCBrd2FyZ3MsIDApIDwgMCB8fAorICAgICAgICAgICAgX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm5ld29ial9leF9vcCwgMSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodXNlX25ld29iaikgewogICAgICAgICBQeU9iamVjdCAqY2xzOwogICAgICAgICBQeU9iamVjdCAqbmV3YXJndHVwOwogICAgICAgICBQeU9iamVjdCAqb2JqX2NsYXNzOwpAQCAtMzAzOCwxMyArMzUyNywxMyBAQAogCiAgICAgICAgIC8qIFNhbml0eSBjaGVja3MuICovCiAgICAgICAgIGlmIChQeV9TSVpFKGFyZ3R1cCkgPCAxKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgIl9fbmV3b2JqX18gYXJnbGlzdCBpcyBlbXB0eSIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAiX19uZXdvYmpfXyBhcmdsaXN0IGlzIGVtcHR5Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAogICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMCk7CiAgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbmV3b2JqX18gYXJncyBpcyBub3QgYSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTMwNTQsNyArMzU0Myw3IEBACiAgICAgICAgICAgICBwID0gb2JqX2NsYXNzICE9IGNsczsgICAgLyogdHJ1ZSBpZmYgYSBwcm9ibGVtICovCiAgICAgICAgICAgICBQeV9ERUNSRUYob2JqX2NsYXNzKTsKICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX25ld29ial9fIGFyZ3MgaGFzIHRoZSB3cm9uZyBjbGFzcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTMxMTQsOCArMzYwMywyMyBAQAogICAgICAgIHRoZSBjYWxsZXIgZG8gbm90IHdhbnQgdG8gbWVtb2l6ZSB0aGUgb2JqZWN0LiBOb3QgcGFydGljdWxhcmx5IHVzZWZ1bCwKICAgICAgICBidXQgdGhhdCBpcyB0byBtaW1pYyB0aGUgYmVoYXZpb3Igc2F2ZV9yZWR1Y2UoKSBpbiBwaWNrbGUucHkgd2hlbgogICAgICAgIG9iaiBpcyBOb25lLiAqLwotICAgIGlmIChvYmogJiYgbWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAob2JqICE9IE5VTEwpIHsKKyAgICAgICAgLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLiAqLworICAgICAgICBpZiAoUHlNZW1vVGFibGVfR2V0KHNlbGYtPm1lbW8sIG9iaikpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgcG9wX29wID0gUE9QOworCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmIChsaXN0aXRlbXMgJiYgYmF0Y2hfbGlzdChzZWxmLCBsaXN0aXRlbXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzE0MCw2ICszNjQ0LDkgQEAKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlID0gTlVMTDsKICAgICBpbnQgc3RhdHVzID0gMDsKIAorICAgIGlmIChfUGlja2xlcl9PcGNvZGVCb3VuZGFyeShzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0zMTY4LDE0ICszNjc1LDYgQEAKICAgICAgICAgc3RhdHVzID0gc2F2ZV9ub25lKHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9Ci0gICAgZWxzZSBpZiAob2JqID09IFB5X0VsbGlwc2lzKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfZWxsaXBzaXMoc2VsZiwgb2JqKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmogPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9ub3RpbXBsZW1lbnRlZChzZWxmLCBvYmopOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQogICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9GYWxzZSB8fCBvYmogPT0gUHlfVHJ1ZSkgewogICAgICAgICBzdGF0dXMgPSBzYXZlX2Jvb2woc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwpAQCAtMzIxMCw2ICszNzA5LDE0IEBACiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZGljdChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5U2V0X1R5cGUpIHsKKyAgICAgICAgc3RhdHVzID0gc2F2ZV9zZXQoc2VsZiwgb2JqKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICZQeUZyb3plblNldF9UeXBlKSB7CisgICAgICAgIHN0YXR1cyA9IHNhdmVfZnJvemVuc2V0KHNlbGYsIG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlMaXN0X1R5cGUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9saXN0KHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMyMjQsMTYgKzM3MzEsNiBAQAogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09ICZQeUZ1bmN0aW9uX1R5cGUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKLSAgICAgICAgaWYgKHN0YXR1cyA8IDAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQaWNrbGVFcnJvcikpIHsKLSAgICAgICAgICAgIC8qIGZhbGwgYmFjayB0byByZWR1Y2UgKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAmUHlDRnVuY3Rpb25fVHlwZSkgewotICAgICAgICBzdGF0dXMgPSBzYXZlX2dsb2JhbChzZWxmLCBvYmosIE5VTEwpOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCkBAIC0zMjQ0LDEyICszNzQxLDIyIEBACiAgICAgICogX19yZWR1Y2VfZXhfXyBtZXRob2QsIG9yIHRoZSBvYmplY3QncyBfX3JlZHVjZV9fIG1ldGhvZC4KICAgICAgKi8KICAgICBpZiAoc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPT0gTlVMTCkgewotICAgICAgICByZWR1Y2VfZnVuYyA9IFB5RGljdF9HZXRJdGVtKGRpc3BhdGNoX3RhYmxlLCAoUHlPYmplY3QgKil0eXBlKTsKLSAgICAgICAgLyogUHlEaWN0X0dldEl0ZW0oKSB1bmxpa2UgUHlPYmplY3RfR2V0SXRlbSgpIGFuZAotICAgICAgICAgICBQeU9iamVjdF9HZXRBdHRyKCkgcmV0dXJucyBhIGJvcnJvd2VkIHJlZiAqLwotICAgICAgICBQeV9YSU5DUkVGKHJlZHVjZV9mdW5jKTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICByZWR1Y2VfZnVuYyA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5kaXNwYXRjaF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKil0eXBlKTsKKyAgICAgICAgaWYgKHJlZHVjZV9mdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKCkgcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZS4KKyAgICAgICAgICAgICAgIEluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgdG8gYmUgY29uc2lzdGVudCB3aXRoCisgICAgICAgICAgICAgICBQeU9iamVjdF9HZXRJdGVtIGFuZCBfUHlPYmplY3RfR2V0QXR0cklkIHVzZWQgYmVsb3cuICovCisgICAgICAgICAgICBQeV9JTkNSRUYocmVkdWNlX2Z1bmMpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRJdGVtKHNlbGYtPmRpc3BhdGNoX3RhYmxlLCAoUHlPYmplY3QgKil0eXBlKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRJdGVtKHNlbGYtPmRpc3BhdGNoX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopdHlwZSk7CiAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTMyNTksMjUgKzM3NjYsMTYgQEAKICAgICB9CiAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHJlZHVjZV9mdW5jLCBvYmopOworICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlX0Zhc3RDYWxsKHJlZHVjZV9mdW5jLCBvYmopOwogICAgIH0KICAgICBlbHNlIGlmIChQeVR5cGVfSXNTdWJ0eXBlKHR5cGUsICZQeVR5cGVfVHlwZSkpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpyZWR1Y2Vfc3RyID0gTlVMTDsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpyZWR1Y2VfZXhfc3RyID0gTlVMTDsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19yZWR1Y2VfXyk7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fcmVkdWNlX2V4X18pOwogCi0gICAgICAgIC8qIENhY2hlIHRoZSBuYW1lIG9mIHRoZSByZWR1Y2UgbWV0aG9kcy4gKi8KLSAgICAgICAgaWYgKHJlZHVjZV9zdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVkdWNlX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JlZHVjZV9fIik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICByZWR1Y2VfZXhfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcmVkdWNlX2V4X18iKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2VfZXhfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQogCiAgICAgICAgIC8qIFhYWDogSWYgdGhlIF9fcmVkdWNlX18gbWV0aG9kIGlzIGRlZmluZWQsIF9fcmVkdWNlX2V4X18gaXMKICAgICAgICAgICAgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIF9fcmVkdWNlX18uIFdoaWxlIHRoaXMgaXMgY29udmVuaWVudCwgdGhpcwpAQCAtMzI4OCwyNiArMzc4NiwzNCBAQAogICAgICAgICAgICBkb24ndCBhY3R1YWxseSBoYXZlIHRvIGNoZWNrIGZvciBhIF9fcmVkdWNlX18gbWV0aG9kLiAqLwogCiAgICAgICAgIC8qIENoZWNrIGZvciBhIF9fcmVkdWNlX2V4X18gbWV0aG9kLiAqLwotICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCByZWR1Y2VfZXhfc3RyKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19yZWR1Y2VfZXhfXyk7CiAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqcHJvdG87CiAgICAgICAgICAgICBwcm90byA9IFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5wcm90byk7CiAgICAgICAgICAgICBpZiAocHJvdG8gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHJlZHVjZV9mdW5jLCBwcm90byk7CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZV9GYXN0Q2FsbChyZWR1Y2VfZnVuYywgcHJvdG8pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KLSAgICAgICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHJlZHVjZV9zdHIpOwotICAgICAgICAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeU9iamVjdF9DYWxsKHJlZHVjZV9mdW5jLCBlbXB0eV90dXBsZSwgTlVMTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgImNhbid0IHBpY2tsZSAnJS4yMDBzJyBvYmplY3Q6ICVSIiwKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCisgICAgICAgICAgICByZWR1Y2VfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3JlZHVjZV9fKTsKKyAgICAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlPYmplY3RfQ2FsbChyZWR1Y2VfZnVuYywgZW1wdHlfdHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW1wdHlfdHVwbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlICclLjIwMHMnIG9iamVjdDogJVIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCBvYmopOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CkBAIC0zMzIzLDcgKzM4MjksOCBAQAogICAgIH0KIAogICAgIGlmICghUHlUdXBsZV9DaGVjayhyZWR1Y2VfdmFsdWUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJfX3JlZHVjZV9fIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIHR1cGxlIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtMzMzNSw2ICszODQyLDcgQEAKICAgICAgICAgc3RhdHVzID0gLTE7CiAgICAgfQogICBkb25lOgorCiAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CiAgICAgUHlfWERFQ1JFRihyZWR1Y2VfZnVuYyk7CiAgICAgUHlfWERFQ1JFRihyZWR1Y2VfdmFsdWUpOwpAQCAtMzM1NSw2ICszODYzLDggQEAKICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpc2VsZi0+cHJvdG87CiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIDIpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDQpCisgICAgICAgICAgICBzZWxmLT5mcmFtaW5nID0gMTsKICAgICB9CiAKICAgICBpZiAoc2F2ZShzZWxmLCBvYmosIDApIDwgMCB8fApAQCAtMzM2NCwxNiArMzg3NCwzNSBAQAogICAgIHJldHVybiAwOwogfQogCi1QeURvY19TVFJWQVIoUGlja2xlcl9jbGVhcl9tZW1vX2RvYywKLSJjbGVhcl9tZW1vKCkgLT4gTm9uZS4gQ2xlYXJzIHRoZSBwaWNrbGVyJ3MgXCJtZW1vXCIuIgorLypbY2xpbmljXQorCitfcGlja2xlLlBpY2tsZXIuY2xlYXJfbWVtbworCisgIHNlbGY6IFBpY2tsZXJPYmplY3QKKworQ2xlYXJzIHRoZSBwaWNrbGVyJ3MgIm1lbW8iLgorCitUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGUKK3BpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlCitwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMgdXNlZnVsIHdoZW4KK3JlLXVzaW5nIHBpY2tsZXJzLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9fX2RvY19fLAorImNsZWFyX21lbW8oKVxuIgorIkNsZWFycyB0aGUgcGlja2xlclwncyBcIm1lbW9cIi5cbiIKICJcbiIKICJUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGVcbiIKICJwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZVxuIgogInBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlblxuIgogInJlLXVzaW5nIHBpY2tsZXJzLiIpOwogCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9DTEVBUl9NRU1PX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhcl9tZW1vIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9fX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLVBpY2tsZXJfY2xlYXJfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmKQorX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW8oUGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogOWMzMmJlN2U3YTE3ZmY4MmE4MWFhZTQwOWQwZDRmNDY5MDMzYTViMl0qLwogewogICAgIGlmIChzZWxmLT5tZW1vKQogICAgICAgICBQeU1lbW9UYWJsZV9DbGVhcihzZWxmLT5tZW1vKTsKQEAgLTMzODEsMjcgKzM5MTAsMzkgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfZHVtcF9kb2MsCi0iZHVtcChvYmopIC0+IE5vbmUuIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4iKTsKKy8qW2NsaW5pY10KKworX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICBzZWxmOiBQaWNrbGVyT2JqZWN0CisgIG9iajogb2JqZWN0CisgIC8KKworV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfXywKKyJkdW1wKG9iailcbiIKKyJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIG9iamVjdCB0byB0aGUgb3BlbiBmaWxlLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9EVU1QX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9kdW1wLCBNRVRIX08sIF9waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QaWNrbGVyX2R1bXAoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1BpY2tsZXJfZHVtcChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorLypbY2xpbmljIGNoZWNrc3VtOiBiNzJhNjllYzk4NzM3ZmFiZjY2ZGFlN2M1YTMyMTAxNzhiZGJkM2U2XSovCiB7Ci0gICAgUHlPYmplY3QgKm9iajsKLQogICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIFBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseSAoaXNzdWUzNjY0KS4KICAgICAgICBEZXZlbG9wZXJzIG9mdGVuIGZvcmdldCB0byBjYWxsIF9faW5pdF9fKCkgaW4gdGhlaXIgc3ViY2xhc3Nlcywgd2hpY2gKICAgICAgICB3b3VsZCB0cmlnZ2VyIGEgc2VnZmF1bHQgd2l0aG91dCB0aGlzIGNoZWNrLiAqLwogICAgIGlmIChzZWxmLT53cml0ZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJQaWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgJXMuX19pbml0X18oKSIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmR1bXAiLCAmb2JqKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoX1BpY2tsZXJfQ2xlYXJCdWZmZXIoc2VsZikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzQxNSwxMCArMzk1Niw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgUGlja2xlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKVBpY2tsZXJfZHVtcCwgTUVUSF9WQVJBUkdTLAotICAgICBQaWNrbGVyX2R1bXBfZG9jfSwKLSAgICB7ImNsZWFyX21lbW8iLCAoUHlDRnVuY3Rpb24pUGlja2xlcl9jbGVhcl9tZW1vLCBNRVRIX05PQVJHUywKLSAgICAgUGlja2xlcl9jbGVhcl9tZW1vX2RvY30sCisgICAgX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSX0NMRUFSX01FTU9fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zNDMxLDcgKzM5NzAsNiBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+d3JpdGUpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9YREVDUkVGKHNlbGYtPmFyZyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5mYXN0X21lbW8pOwogCiAgICAgUHlNZW1vVGFibGVfRGVsKHNlbGYtPm1lbW8pOwpAQCAtMzQ0NSw3ICszOTgzLDYgQEAKICAgICBQeV9WSVNJVChzZWxmLT53cml0ZSk7CiAgICAgUHlfVklTSVQoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9WSVNJVChzZWxmLT5kaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfVklTSVQoc2VsZi0+YXJnKTsKICAgICBQeV9WSVNJVChzZWxmLT5mYXN0X21lbW8pOwogICAgIHJldHVybiAwOwogfQpAQCAtMzQ1Nyw3ICszOTk0LDYgQEAKICAgICBQeV9DTEVBUihzZWxmLT53cml0ZSk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9DTEVBUihzZWxmLT5kaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+YXJnKTsKICAgICBQeV9DTEVBUihzZWxmLT5mYXN0X21lbW8pOwogCiAgICAgaWYgKHNlbGYtPm1lbW8gIT0gTlVMTCkgewpAQCAtMzQ2OSwxNSArNDAwNSw0NSBAQAogfQogCiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2RvYywKLSJQaWNrbGVyKGZpbGUsIHByb3RvY29sPU5vbmUpIgotIlxuIgorLypbY2xpbmljXQorCitfcGlja2xlLlBpY2tsZXIuX19pbml0X18KKworICBzZWxmOiBQaWNrbGVyT2JqZWN0CisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciB3cml0aW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgorCitUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZQorZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUKK2RlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yCitQeXRob24gMy4KKworU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdAorcHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUKK21vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlCitwcm9kdWNlZC4KKworVGhlIGZpbGUgYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlCitieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeQord3JpdGluZywgYSBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0CittZWV0cyB0aGlzIGludGVyZmFjZS4KKworSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMiwKK3NvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX19kb2NfXywKKyJfX2luaXRfXyhmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKVxuIgogIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS5cbiIKICJcbiIKICJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZVxuIgotImdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHRcbiIKLSJwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3JcbiIKLSJQeXRob24gMy4wLlxuIgorImdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlXG4iCisiZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3JcbiIKKyJQeXRob24gMy5cbiIKICJcbiIKICJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0XG4iCiAicHJvdG9jb2wgdmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGVcbiIKQEAgLTM0OTAsMzggKzQwNTYsNTYgQEAKICJtZWV0cyB0aGlzIGludGVyZmFjZS5cbiIKICJcbiIKICJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvblxuIgotIjIueCwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC5cbiIpOworIm1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsXG4iCisic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CiAKLXN0YXRpYyBpbnQKLVBpY2tsZXJfaW5pdChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9fX0lOSVRfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19pbml0X18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCAwfTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqcHJvdG9fb2JqID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98T3A6X19pbml0X18iLCBfa2V5d29yZHMsCisgICAgICAgICZmaWxlLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX1BpY2tsZXJfX19pbml0X19faW1wbCgoUGlja2xlck9iamVjdCAqKXNlbGYsIGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBjaGVja3N1bTogYzk5ZmY0MTdiZDcwM2E3NGFmZmM0YjcwODE2N2U1NmUxMzVlODk2OV0qLworewogICAgIF9QeV9JREVOVElGSUVSKHBlcnNpc3RlbnRfaWQpOwogICAgIF9QeV9JREVOVElGSUVSKGRpc3BhdGNoX3RhYmxlKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POlBpY2tsZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmZpbGUsICZwcm90b19vYmosICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIC8qIEluIGNhc2Ugb2YgbXVsdGlwbGUgX19pbml0X18oKSBjYWxscywgY2xlYXIgcHJldmlvdXMgY29udGVudC4gKi8KICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCkKICAgICAgICAgKHZvaWQpUGlja2xlcl9jbGVhcihzZWxmKTsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChzZWxmLCBwcm90b19vYmosIGZpeF9pbXBvcnRzKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2woc2VsZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShzZWxmLCBmaWxlKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBtZW1vIGFuZCBvdXRwdXRfYnVmZmVyIG1heSBoYXZlIGFscmVhZHkgYmVlbiBjcmVhdGVkIGluIF9QaWNrbGVyX05ldyAqLwogICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpIHsKICAgICAgICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwogICAgICAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHNlbGYtPm91dHB1dF9sZW4gPSAwOwogICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpIHsKQEAgLTM1MjksMTAgKzQxMTMsOSBAQAogICAgICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbik7CiAgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPmZhc3QgPSAwOwogICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IDA7CiAgICAgc2VsZi0+ZmFzdF9tZW1vID0gTlVMTDsKQEAgLTM1NDEsMTUgKzQxMjQsMjggQEAKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKilzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX3BlcnNpc3RlbnRfaWQpOwogICAgICAgICBpZiAoc2VsZi0+cGVyc19mdW5jID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPSBOVUxMOwogICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2Rpc3BhdGNoX3RhYmxlKSkgewogICAgICAgICBzZWxmLT5kaXNwYXRjaF90YWJsZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX2Rpc3BhdGNoX3RhYmxlKTsKICAgICAgICAgaWYgKHNlbGYtPmRpc3BhdGNoX3RhYmxlID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyogV3JhcCB0aGUgQ2xpbmljIGdlbmVyYXRlZCBzaWduYXR1cmUgdG8gc2xvdCBpdCBpbiB0cF9pbml0LiAqLworc3RhdGljIGludAorUGlja2xlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fKHNlbGYsIGFyZ3MsIGt3YXJncyk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTM1NjgsMjIgKzQxNjQsNDggQEAKICAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOyAvKiBQaWNrbGVyIHdob3NlIG1lbW8gdGFibGUgd2UncmUgcHJveHlpbmcuICovCiB9IFBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CiAKLVB5RG9jX1NUUlZBUihwbXBfY2xlYXJfZG9jLAotIm1lbW8uY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uIik7CisvKltjbGluaWNdCitfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkuY2xlYXIKKworICBzZWxmOiBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0CisKK1JlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfXywKKyJjbGVhcigpXG4iCisiUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXIsIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IDUwN2YxMzkzODcyMTk5MmUxNzVhM2U1OGI1YWQwMjYyMDA0NWExY2NdKi8KIHsKICAgICBpZiAoc2VsZi0+cGlja2xlci0+bWVtbykKICAgICAgICAgUHlNZW1vVGFibGVfQ2xlYXIoc2VsZi0+cGlja2xlci0+bWVtbyk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihwbXBfY29weV9kb2MsCi0ibWVtby5jb3B5KCkgLT4gbmV3X21lbW8uICBDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5jb3B5CisKKyAgc2VsZjogUGlja2xlck1lbW9Qcm94eU9iamVjdAorCitDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KClcbiIKKyJDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weSwgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wbXBfY29weShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHkoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogNzNhNTExN2FiMzU0MjkwZWJkYmUwN2JkMGJmNzIzMmQwOTM2YTY5ZF0qLwogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU1lbW9UYWJsZSAqbWVtbzsKQEAgLTM2MjAsMTQgKzQyNDIsMjcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBtcF9yZWR1Y2VfZG9jLAotIm1lbW8uX19yZWR1Y2VfXygpLiBQaWNrbGluZyBzdXBwb3J0LiIpOworLypbY2xpbmljXQorX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5Ll9fcmVkdWNlX18KKworICBzZWxmOiBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0CisKK0ltcGxlbWVudCBwaWNrbGUgc3VwcG9ydC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfXywKKyJfX3JlZHVjZV9fKClcbiIKKyJJbXBsZW1lbnQgcGlja2xlIHN1cHBvcnQuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG1wX3JlZHVjZShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IDQwZjBiZjdhOWIxNjFlNzcxMzA2NzRmMDQ4MWJkYTBhMDE4NGRjY2VdKi8KIHsKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlLCAqZGljdF9hcmdzOwotICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IHBtcF9jb3B5KHNlbGYpOworICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5KHNlbGYpOwogICAgIGlmIChjb250ZW50cyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzY1MCw5ICs0Mjg1LDkgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbGVhciIsICAgICAgKFB5Q0Z1bmN0aW9uKXBtcF9jbGVhciwgIE1FVEhfTk9BUkdTLCAgcG1wX2NsZWFyX2RvY30sCi0gICAgeyJjb3B5IiwgICAgICAgKFB5Q0Z1bmN0aW9uKXBtcF9jb3B5LCAgIE1FVEhfTk9BUkdTLCAgcG1wX2NvcHlfZG9jfSwKLSAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pcG1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCBwbXBfcmVkdWNlX2RvY30sCisgICAgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRgorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRgorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzg2NCw3ICs0NDk5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICBQaWNrbGVyX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX19kb2NfXywgICAgLyp0cF9kb2MqLwogICAgICh0cmF2ZXJzZXByb2MpUGlja2xlcl90cmF2ZXJzZSwgICAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KVBpY2tsZXJfY2xlYXIsICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwpAQCAtMzg3OSw3ICs0NTE0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCi0gICAgKGluaXRwcm9jKVBpY2tsZXJfaW5pdCwgICAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICBQaWNrbGVyX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwpAQCAtMzkwNSw4ICs0NTQwLDkgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBtYXJrZXIoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogeworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBpZiAoc2VsZi0+bnVtX21hcmtzIDwgMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiY291bGQgbm90IGZpbmQgTUFSSyIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgImNvdWxkIG5vdCBmaW5kIE1BUksiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtMzkyMyw3ICs0NTU5LDggQEAKIHN0YXRpYyBpbnQKIGJhZF9yZWFkbGluZSh2b2lkKQogewotICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJwaWNrbGUgZGF0YSB3YXMgdHJ1bmNhdGVkIik7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAicGlja2xlIGRhdGEgd2FzIHRydW5jYXRlZCIpOwogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMzk4NCwxNyArNDYyMSwxNSBAQAogICogYXMgYSBDIFB5X3NzaXplX3QsIG9yIC0xIGlmIGl0J3MgaGlnaGVyIHRoYW4gUFlfU1NJWkVfVF9NQVguCiAgKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1jYWxjX2JpbnNpemUoY2hhciAqYnl0ZXMsIGludCBzaXplKQorY2FsY19iaW5zaXplKGNoYXIgKmJ5dGVzLCBpbnQgbmJ5dGVzKQogewogICAgIHVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKWJ5dGVzOworICAgIGludCBpOwogICAgIHNpemVfdCB4ID0gMDsKIAotICAgIGFzc2VydChzaXplID09IDQpOwotCi0gICAgeCA9ICAoc2l6ZV90KSBzWzBdOwotICAgIHggfD0gKHNpemVfdCkgc1sxXSA8PCA4OwotICAgIHggfD0gKHNpemVfdCkgc1syXSA8PCAxNjsKLSAgICB4IHw9IChzaXplX3QpIHNbM10gPDwgMjQ7CisgICAgZm9yIChpID0gMDsgaSA8IG5ieXRlcyAmJiBpIDwgc2l6ZW9mKHNpemVfdCk7IGkrKykgeworICAgICAgICB4IHw9IChzaXplX3QpIHNbaV0gPDwgKDggKiBpKTsKKyAgICB9CiAKICAgICBpZiAoeCA+IFBZX1NTSVpFX1RfTUFYKQogICAgICAgICByZXR1cm4gLTE7CkBAIC00MDA4LDIxICs0NjQzLDIxIEBACiAgKiBvZiB4LXBsYXRmb3JtIGJ1Z3MuCiAgKi8KIHN0YXRpYyBsb25nCi1jYWxjX2JpbmludChjaGFyICpieXRlcywgaW50IHNpemUpCitjYWxjX2JpbmludChjaGFyICpieXRlcywgaW50IG5ieXRlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKilieXRlczsKLSAgICBpbnQgaSA9IHNpemU7CisgICAgaW50IGk7CiAgICAgbG9uZyB4ID0gMDsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgeCB8PSAobG9uZylzW2ldIDw8IChpICogOCk7CisgICAgZm9yIChpID0gMDsgaSA8IG5ieXRlczsgaSsrKSB7CisgICAgICAgIHggfD0gKGxvbmcpc1tpXSA8PCAoOCAqIGkpOwogICAgIH0KIAogICAgIC8qIFVubGlrZSBCSU5JTlQxIGFuZCBCSU5JTlQyLCBCSU5JTlQgKG1vcmUgYWNjdXJhdGVseSBCSU5JTlQ0KQogICAgICAqIGlzIHNpZ25lZCwgc28gb24gYSBib3ggd2l0aCBsb25ncyBiaWdnZXIgdGhhbiA0IGJ5dGVzIHdlIG5lZWQKICAgICAgKiB0byBleHRlbmQgYSBCSU5JTlQncyBzaWduIGJpdCB0byB0aGUgZnVsbCB3aWR0aC4KICAgICAgKi8KLSAgICBpZiAoU0laRU9GX0xPTkcgPiA0ICYmIHNpemUgPT0gNCkgeworICAgIGlmIChTSVpFT0ZfTE9ORyA+IDQgJiYgbmJ5dGVzID09IDQpIHsKICAgICAgICAgeCB8PSAtKHggJiAoMUwgPDwgMzEpKTsKICAgICB9CiAKQEAgLTQxMjAsOCArNDc1NSw5IEBACiAKICAgICBzaXplID0gY2FsY19iaW5pbnQobmJ5dGVzLCBzaXplKTsKICAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgICAgICAvKiBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlIC0tIHdlIG5ldmVyIHdyaXRlIG9uZSBsaWtlIHRoaXMgKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTQyMDEsMzYgKzQ4MzcsMjQgQEAKIAogICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChsZW4gPCAyKQotICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7Ci0gICAgaWYgKChzID0gc3RyZHVwKHMpKSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KKyAgICAvKiBTdHJpcCB0aGUgbmV3bGluZSAqLworICAgIGxlbi0tOwogICAgIC8qIFN0cmlwIG91dGVybW9zdCBxdW90ZXMgKi8KLSAgICB3aGlsZSAobGVuID4gMCAmJiBzW2xlbiAtIDFdIDw9ICcgJykKLSAgICAgICAgbGVuLS07Ci0gICAgaWYgKGxlbiA+IDEgJiYgc1swXSA9PSAnIicgJiYgc1tsZW4gLSAxXSA9PSAnIicpIHsKLSAgICAgICAgc1tsZW4gLSAxXSA9ICdcMCc7Ci0gICAgICAgIHAgPSBzICsgMTsKLSAgICAgICAgbGVuIC09IDI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGxlbiA+IDEgJiYgc1swXSA9PSAnXCcnICYmIHNbbGVuIC0gMV0gPT0gJ1wnJykgewotICAgICAgICBzW2xlbiAtIDFdID0gJ1wwJzsKKyAgICBpZiAobGVuID49IDIgJiYgc1swXSA9PSBzW2xlbiAtIDFdICYmIChzWzBdID09ICdcJycgfHwgc1swXSA9PSAnIicpKSB7CiAgICAgICAgIHAgPSBzICsgMTsKICAgICAgICAgbGVuIC09IDI7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBmcmVlKHMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImluc2VjdXJlIHN0cmluZyBwaWNrbGUiKTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgU1RSSU5HIG9wY29kZSBhcmd1bWVudCBtdXN0IGJlIHF1b3RlZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChsZW4gPj0gMCk7CiAKICAgICAvKiBVc2UgdGhlIFB5Qnl0ZXMgQVBJIHRvIGRlY29kZSB0aGUgc3RyaW5nLCBzaW5jZSB0aGF0IGlzIHdoYXQgaXMgdXNlZAogICAgICAgIHRvIGVuY29kZSwgYW5kIHRoZW4gY29lcmNlIHRoZSByZXN1bHQgdG8gVW5pY29kZS4gKi8KICAgICBieXRlcyA9IFB5Qnl0ZXNfRGVjb2RlRXNjYXBlKHAsIGxlbiwgTlVMTCwgMCwgTlVMTCk7Ci0gICAgZnJlZShzKTsKICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChieXRlcywgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CkBAIC00MjQzLDI3ICs0ODY3LDI3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IG5ieXRlcykKIHsKICAgICBQeU9iamVjdCAqYnl0ZXM7Ci0gICAgUHlfc3NpemVfdCB4OworICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIG5ieXRlcykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICB4ID0gY2FsY19iaW5zaXplKHMsIDQpOwotICAgIGlmICh4IDwgMCkgeworICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgbmJ5dGVzKTsKKyAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHgpOworCisgICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHNpemUpOwogICAgIGlmIChieXRlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQyNzIsNzQgKzQ4OTYsMjggQEAKIH0KIAogc3RhdGljIGludAotbG9hZF9zaG9ydF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKmJ5dGVzOwotICAgIFB5X3NzaXplX3QgeDsKLSAgICBjaGFyICpzOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgMSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICB4ID0gKHVuc2lnbmVkIGNoYXIpc1swXTsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHgpOwotICAgIGlmIChieXRlcyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBieXRlcywgLTEpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1sb2FkX2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitsb2FkX2NvdW50ZWRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IG5ieXRlcykKIHsKICAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5X3NzaXplX3QgeDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgY2hhciAqczsKIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBuYnl0ZXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgeCA9IGNhbGNfYmluaW50KHMsIDQpOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIG5ieXRlcyk7CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiQklOU1RSSU5HIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0KICAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwotICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgeCwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzdHIsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbG9hZF9zaG9ydF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwotCi0gICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwotICAgIHN0ciA9IFB5VW5pY29kZV9EZWNvZGUocywgeCwgc2VsZi0+ZW5jb2RpbmcsIHNlbGYtPmVycm9ycyk7CisgICAgc3RyID0gUHlVbmljb2RlX0RlY29kZShzLCBzaXplLCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDM2OCwyNSArNDk0NiwyMyBAQAogfQogCiBzdGF0aWMgaW50Ci1sb2FkX2JpbnVuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBpbnQgbmJ5dGVzKQogewogICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgUHlfc3NpemVfdCBzaXplOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNpemUgPSBjYWxjX2JpbnNpemUocywgNCk7CisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICV6ZCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWAotICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0KICAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDQ1OCw2ICs1MDM0LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfZW1wdHlfc2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworCisgICAgaWYgKChzZXQgPSBQeVNldF9OZXcoTlVMTCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9saXN0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqbGlzdDsKQEAgLTQ0OTksNiArNTA4NiwyOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citsb2FkX2Zyb3plbnNldChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKml0ZW1zOworICAgIFB5T2JqZWN0ICpmcm96ZW5zZXQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZW1zID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIGkpOworICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcm96ZW5zZXQgPSBQeUZyb3plblNldF9OZXcoaXRlbXMpOworICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgaWYgKGZyb3plbnNldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBmcm96ZW5zZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbnRpYXRlKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDYwNiw2ICs1MjE2LDcgQEAKICAgICBQeU9iamVjdCAqY2xzcmF3ID0gTlVMTDsKICAgICBQeVR5cGVPYmplY3QgKmNsczsgICAgICAgICAgLyogY2xzcmF3IGNhc3QgdG8gaXRzIHRydWUgdHlwZSAqLwogICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgLyogU3RhY2sgaXMgLi4uIGNscyBhcmd0dXBsZSwgYW5kIHdlIHdhbnQgdG8gY2FsbAogICAgICAqIGNscy5fX25ld19fKGNscywgKmFyZ3R1cGxlKS4KQEAgLTQ2MTQsNyArNTIyNSw4IEBACiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBleHBlY3RlZCBhbiBhcmcgIiAidHVwbGUuIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIk5FV09CSiBleHBlY3RlZCBhbiBhcmcgIiAidHVwbGUuIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCkBAIC00NjIzLDEyICs1MjM1LDEyIEBACiAgICAgaWYgKGNscyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJpc24ndCBhIHR5cGUgb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjbHMtPnRwX25ldyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzIE5VTEwgdHBfbmV3Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtNDY1MCw2ICs1MjYyLDU4IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfbmV3b2JqX2V4KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqY2xzLCAqYXJncywgKmt3YXJnczsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKworICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywga3dhcmdzKTsKKyAgICBpZiAoa3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGFyZ3MpOworICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBjbHMpOworICAgIGlmIChjbHMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGNscyk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLCAKKyAgICAgICAgICAgICAgICAgICAgICJORVdPQkpfRVggY2xhc3MgYXJndW1lbnQgbXVzdCBiZSBhIHR5cGUsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShjbHMpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX25ldyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihjbHMpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJORVdPQkpfRVggY2xhc3MgYXJndW1lbnQgZG9lc24ndCBoYXZlIF9fbmV3X18iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBvYmogPSAoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX25ldygoUHlUeXBlT2JqZWN0ICopY2xzLCBhcmdzLCBrd2FyZ3MpOworICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBvYmosIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9nbG9iYWwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpnbG9iYWwgPSBOVUxMOwpAQCAtNDY4Niw2ICs1MzUwLDMyIEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfc3RhY2tfZ2xvYmFsKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqZ2xvYmFsOworICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKKyAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWU7CisKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGdsb2JhbF9uYW1lKTsKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIG1vZHVsZV9uYW1lKTsKKyAgICBpZiAobW9kdWxlX25hbWUgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrRXhhY3QobW9kdWxlX25hbWUpIHx8CisgICAgICAgIGdsb2JhbF9uYW1lID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVja0V4YWN0KGdsb2JhbF9uYW1lKSkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiU1RBQ0tfR0xPQkFMIHJlcXVpcmVzIHN0ciIpOworICAgICAgICBQeV9YREVDUkVGKGdsb2JhbF9uYW1lKTsKKyAgICAgICAgUHlfWERFQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZ2xvYmFsID0gZmluZF9jbGFzcyhzZWxmLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgIFB5X0RFQ1JFRihnbG9iYWxfbmFtZSk7CisgICAgUHlfREVDUkVGKG1vZHVsZV9uYW1lKTsKKyAgICBpZiAoZ2xvYmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBnbG9iYWwsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9wZXJzaWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpwaWQ7CkBAIC00NzAyLDkgKzUzOTIsOSBAQAogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgLyogVWdoLi4uIHRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfVW5waWNrbGVyX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZQotICAgICAgICAgICByZWZlcmVuY2UgdG8gcGlkIGZpcnN0LiAqLwotICAgICAgICBwaWQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKKyAgICAgICAgLyogVGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9QaWNrbGVfRmFzdENhbGwoKSBzdGVhbHMgdGhlIHJlZmVyZW5jZQorICAgICAgICAgICB0byBwaWQgZmlyc3QuICovCisgICAgICAgIHBpZCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVyc19mdW5jLCBwaWQpOwogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQ3MTIsNyArNTQwMiw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJBIGxvYWQgcGVyc2lzdGVudCBpZCBpbnN0cnVjdGlvbiB3YXMgZW5jb3VudGVyZWQsXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vIHBlcnNpc3RlbnRfbG9hZCBmdW5jdGlvbiB3YXMgc3BlY2lmaWVkLiIpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC00NzI5LDkgKzU0MjAsOSBAQAogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgLyogVWdoLi4uIHRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfVW5waWNrbGVyX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZQorICAgICAgICAvKiBUaGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1BpY2tsZV9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHBpZCBmaXJzdC4gKi8KLSAgICAgICAgcGlkID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CisgICAgICAgIHBpZCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVyc19mdW5jLCBwaWQpOwogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQ3MzksNyArNTQzMCw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJBIGxvYWQgcGVyc2lzdGVudCBpZCBpbnN0cnVjdGlvbiB3YXMgZW5jb3VudGVyZWQsXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vIHBlcnNpc3RlbnRfbG9hZCBmdW5jdGlvbiB3YXMgc3BlY2lmaWVkLiIpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC00ODk1LDYgKzU1ODcsNyBAQAogICAgIFB5T2JqZWN0ICpvYmo7ICAgICAgICAgICAgICAvKiB0aGUgb2JqZWN0IHRvIHB1c2ggKi8KICAgICBQeU9iamVjdCAqcGFpcjsgICAgICAgICAgICAgLyogKG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lKSAqLwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgKmNsYXNzX25hbWU7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgYXNzZXJ0KG5ieXRlcyA9PSAxIHx8IG5ieXRlcyA9PSAyIHx8IG5ieXRlcyA9PSA0KTsKICAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZjb2RlYnl0ZXMsIG5ieXRlcykgPCAwKQpAQCAtNDkwMiw3ICs1NTk1LDcgQEAKICAgICBjb2RlID0gY2FsY19iaW5pbnQoY29kZWJ5dGVzLCBuYnl0ZXMpOwogICAgIGlmIChjb2RlIDw9IDApIHsgICAgICAgICAgICAvKiBub3RlIHRoYXQgMCBpcyBmb3JiaWRkZW4gKi8KICAgICAgICAgLyogQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNDkxMCwyMCArNTYwMywyNiBAQAogICAgIHB5X2NvZGUgPSBQeUxvbmdfRnJvbUxvbmcoY29kZSk7CiAgICAgaWYgKHB5X2NvZGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIG9iaiA9IFB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSk7CisgICAgb2JqID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSk7CiAgICAgaWYgKG9iaiAhPSBOVUxMKSB7CiAgICAgICAgIC8qIEJpbmdvLiAqLwogICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7CiAgICAgICAgIFBEQVRBX0FQUEVORChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICAvKiBMb29rIHVwIHRoZSAobW9kdWxlX25hbWUsIGNsYXNzX25hbWUpIHBhaXIuICovCi0gICAgcGFpciA9IFB5RGljdF9HZXRJdGVtKGludmVydGVkX3JlZ2lzdHJ5LCBweV9jb2RlKTsKKyAgICBwYWlyID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmludmVydGVkX3JlZ2lzdHJ5LCBweV9jb2RlKTsKICAgICBpZiAocGFpciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9uICIKLSAgICAgICAgICAgICAgICAgICAgICJjb2RlICVsZCIsIGNvZGUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvZGUgJWxkIiwgY29kZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvKiBTaW5jZSB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IGlzIG1hbmlwdWxhYmxlIHZpYSBQeXRob24gY29kZSwKQEAgLTQ5NDQsNyArNTY0Myw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogQ2FjaGUgY29kZSAtPiBvYmouICovCi0gICAgY29kZSA9IFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSwgb2JqKTsKKyAgICBjb2RlID0gUHlEaWN0X1NldEl0ZW0oc3QtPmV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSwgb2JqKTsKICAgICBQeV9ERUNSRUYocHlfY29kZSk7CiAgICAgaWYgKGNvZGUgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihvYmopOwpAQCAtNTAyOSw2ICs1NzI4LDE4IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfbWVtb2l6ZShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnZhbHVlOworCisgICAgaWYgKFB5X1NJWkUoc2VsZi0+c3RhY2spIDw9IDApCisgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKKyAgICB2YWx1ZSA9IHNlbGYtPnN0YWNrLT5kYXRhW1B5X1NJWkUoc2VsZi0+c3RhY2spIC0gMV07CisKKyAgICByZXR1cm4gX1VucGlja2xlcl9NZW1vUHV0KHNlbGYsIHNlbGYtPm1lbW9fbGVuLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKIGRvX2FwcGVuZChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgeCkKIHsKICAgICBQeU9iamVjdCAqdmFsdWU7CkBAIC01MDY3LDcgKzU3NzgsNyBAQAogICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgYXBwZW5kX2Z1bmMsIHZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoYXBwZW5kX2Z1bmMsIHZhbHVlKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCBpICsgMSk7CiAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSB4OwpAQCAtNTEwOSw4ICs1ODIwLDEwIEBACiAgICAgaWYgKGxlbiA9PSB4KSAgLyogbm90aGluZyB0byBkbyAqLwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoKGxlbiAtIHgpICUgMiAhPSAwKSB7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICAgICAgLyogQ3VycnVwdCBvciBob3N0aWxlIHBpY2tsZSAtLSB3ZSBuZXZlciB3cml0ZSBvbmUgbGlrZSB0aGlzLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAib2RkIG51bWJlciBvZiBpdGVtcyBmb3IgU0VUSVRFTVMiKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAib2RkIG51bWJlciBvZiBpdGVtcyBmb3IgU0VUSVRFTVMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTE0NCw2ICs1ODU3LDU5IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfYWRkaXRlbXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpzZXQ7CisgICAgUHlfc3NpemVfdCBtYXJrLCBsZW4sIGk7CisKKyAgICBtYXJrID0gIG1hcmtlcihzZWxmKTsKKyAgICBsZW4gPSBQeV9TSVpFKHNlbGYtPnN0YWNrKTsKKyAgICBpZiAobWFyayA+IGxlbiB8fCBtYXJrIDw9IDApCisgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKKyAgICBpZiAobGVuID09IG1hcmspICAvKiBub3RoaW5nIHRvIGRvICovCisgICAgICAgIHJldHVybiAwOworCisgICAgc2V0ID0gc2VsZi0+c3RhY2stPmRhdGFbbWFyayAtIDFdOworCisgICAgaWYgKFB5U2V0X0NoZWNrKHNldCkpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOworICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgIGl0ZW1zID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIG1hcmspOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBzdGF0dXMgPSBfUHlTZXRfVXBkYXRlKHNldCwgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmFkZF9mdW5jOworICAgICAgICBfUHlfSURFTlRJRklFUihhZGQpOworCisgICAgICAgIGFkZF9mdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZChzZXQsICZQeUlkX2FkZCk7CisgICAgICAgIGlmIChhZGRfZnVuYyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBmb3IgKGkgPSBtYXJrOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlbTsKKworICAgICAgICAgICAgaXRlbSA9IHNlbGYtPnN0YWNrLT5kYXRhW2ldOworICAgICAgICAgICAgcmVzdWx0ID0gX1BpY2tsZV9GYXN0Q2FsbChhZGRfZnVuYywgaXRlbSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgaSArIDEpOworICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0gbWFyazsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICBQeV9TSVpFKHNlbGYtPnN0YWNrKSA9IG1hcms7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIGxvYWRfYnVpbGQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpzdGF0ZSwgKmluc3QsICpzbG90c3RhdGU7CkBAIC01MTc2LDkgKzU5NDIsNyBAQAogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgICAgIC8qIFRoZSBleHBsaWNpdCBfX3NldHN0YXRlX18gaXMgcmVzcG9uc2libGUgZm9yIGV2ZXJ5dGhpbmcuICovCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKLSAgICAgICAgICAgcmVmZXJlbmNlIHRvIHN0YXRlIGZpcnN0LiAqLwotICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNldHN0YXRlLCBzdGF0ZSk7CisgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoc2V0c3RhdGUsIHN0YXRlKTsKICAgICAgICAgUHlfREVDUkVGKHNldHN0YXRlKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNTIwOSw3ICs1OTczLDggQEAKICAgICAgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogCiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKHN0YXRlKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAic3RhdGUgaXMgbm90IGEgZGljdGlvbmFyeSIpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldEF0dHJJZChpbnN0LCAmUHlJZF9fX2RpY3RfXyk7CkBAIC01MjM4LDcgKzYwMDMsOCBAQAogICAgICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soc2xvdHN0YXRlKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbG90IHN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KQEAgLTUzNDQsMTQgKzYxMTAsMzkgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbnQKK2xvYWRfZnJhbWUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIgKnM7CisgICAgUHlfc3NpemVfdCBmcmFtZV9sZW47CisKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA4KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGZyYW1lX2xlbiA9IGNhbGNfYmluc2l6ZShzLCA4KTsKKyAgICBpZiAoZnJhbWVfbGVuIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJGUkFNRSBsZW5ndGggZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIG9mICV6ZCBieXRlcyIsCisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBmcmFtZV9sZW4pIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogUmV3aW5kIHRvIHN0YXJ0IG9mIGZyYW1lICovCisgICAgc2VsZi0+bmV4dF9yZWFkX2lkeCAtPSBmcmFtZV9sZW47CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb2FkKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeU9iamVjdCAqZXJyOwogICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7CiAgICAgY2hhciAqczsKIAogICAgIHNlbGYtPm51bV9tYXJrcyA9IDA7CisgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSkKICAgICAgICAgUGRhdGFfY2xlYXIoc2VsZi0+c3RhY2ssIDApOwogCkBAIC01Mzc3LDEzICs2MTY4LDE2IEBACiAgICAgICAgIE9QX0FSRyhMT05HNCwgbG9hZF9jb3VudGVkX2xvbmcsIDQpCiAgICAgICAgIE9QKEZMT0FULCBsb2FkX2Zsb2F0KQogICAgICAgICBPUChCSU5GTE9BVCwgbG9hZF9iaW5mbG9hdCkKLSAgICAgICAgT1AoQklOQllURVMsIGxvYWRfYmluYnl0ZXMpCi0gICAgICAgIE9QKFNIT1JUX0JJTkJZVEVTLCBsb2FkX3Nob3J0X2JpbmJ5dGVzKQotICAgICAgICBPUChCSU5TVFJJTkcsIGxvYWRfYmluc3RyaW5nKQotICAgICAgICBPUChTSE9SVF9CSU5TVFJJTkcsIGxvYWRfc2hvcnRfYmluc3RyaW5nKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOQllURVMsIGxvYWRfY291bnRlZF9iaW5ieXRlcywgMSkKKyAgICAgICAgT1BfQVJHKEJJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDQpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUzgsIGxvYWRfY291bnRlZF9iaW5ieXRlcywgOCkKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTlNUUklORywgbG9hZF9jb3VudGVkX2JpbnN0cmluZywgMSkKKyAgICAgICAgT1BfQVJHKEJJTlNUUklORywgbG9hZF9jb3VudGVkX2JpbnN0cmluZywgNCkKICAgICAgICAgT1AoU1RSSU5HLCBsb2FkX3N0cmluZykKICAgICAgICAgT1AoVU5JQ09ERSwgbG9hZF91bmljb2RlKQotICAgICAgICBPUChCSU5VTklDT0RFLCBsb2FkX2JpbnVuaWNvZGUpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgMSkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREUsIGxvYWRfY291bnRlZF9iaW51bmljb2RlLCA0KQorICAgICAgICBPUF9BUkcoQklOVU5JQ09ERTgsIGxvYWRfY291bnRlZF9iaW51bmljb2RlLCA4KQogICAgICAgICBPUF9BUkcoRU1QVFlfVFVQTEUsIGxvYWRfY291bnRlZF90dXBsZSwgMCkKICAgICAgICAgT1BfQVJHKFRVUExFMSwgbG9hZF9jb3VudGVkX3R1cGxlLCAxKQogICAgICAgICBPUF9BUkcoVFVQTEUyLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDIpCkBAIC01MzkzLDEwICs2MTg3LDE1IEBACiAgICAgICAgIE9QKExJU1QsIGxvYWRfbGlzdCkKICAgICAgICAgT1AoRU1QVFlfRElDVCwgbG9hZF9lbXB0eV9kaWN0KQogICAgICAgICBPUChESUNULCBsb2FkX2RpY3QpCisgICAgICAgIE9QKEVNUFRZX1NFVCwgbG9hZF9lbXB0eV9zZXQpCisgICAgICAgIE9QKEFERElURU1TLCBsb2FkX2FkZGl0ZW1zKQorICAgICAgICBPUChGUk9aRU5TRVQsIGxvYWRfZnJvemVuc2V0KQogICAgICAgICBPUChPQkosIGxvYWRfb2JqKQogICAgICAgICBPUChJTlNULCBsb2FkX2luc3QpCiAgICAgICAgIE9QKE5FV09CSiwgbG9hZF9uZXdvYmopCisgICAgICAgIE9QKE5FV09CSl9FWCwgbG9hZF9uZXdvYmpfZXgpCiAgICAgICAgIE9QKEdMT0JBTCwgbG9hZF9nbG9iYWwpCisgICAgICAgIE9QKFNUQUNLX0dMT0JBTCwgbG9hZF9zdGFja19nbG9iYWwpCiAgICAgICAgIE9QKEFQUEVORCwgbG9hZF9hcHBlbmQpCiAgICAgICAgIE9QKEFQUEVORFMsIGxvYWRfYXBwZW5kcykKICAgICAgICAgT1AoQlVJTEQsIGxvYWRfYnVpbGQpCkBAIC01NDA4LDYgKzYyMDcsNyBAQAogICAgICAgICBPUChCSU5QVVQsIGxvYWRfYmlucHV0KQogICAgICAgICBPUChMT05HX0JJTlBVVCwgbG9hZF9sb25nX2JpbnB1dCkKICAgICAgICAgT1AoUFVULCBsb2FkX3B1dCkKKyAgICAgICAgT1AoTUVNT0laRSwgbG9hZF9tZW1vaXplKQogICAgICAgICBPUChQT1AsIGxvYWRfcG9wKQogICAgICAgICBPUChQT1BfTUFSSywgbG9hZF9wb3BfbWFyaykKICAgICAgICAgT1AoU0VUSVRFTSwgbG9hZF9zZXRpdGVtKQpAQCAtNTQxNiw2ICs2MjE2LDcgQEAKICAgICAgICAgT1AoQklOUEVSU0lELCBsb2FkX2JpbnBlcnNpZCkKICAgICAgICAgT1AoUkVEVUNFLCBsb2FkX3JlZHVjZSkKICAgICAgICAgT1AoUFJPVE8sIGxvYWRfcHJvdG8pCisgICAgICAgIE9QKEZSQU1FLCBsb2FkX2ZyYW1lKQogICAgICAgICBPUF9BUkcoRVhUMSwgbG9hZF9leHRlbnNpb24sIDEpCiAgICAgICAgIE9QX0FSRyhFWFQyLCBsb2FkX2V4dGVuc2lvbiwgMikKICAgICAgICAgT1BfQVJHKEVYVDQsIGxvYWRfZXh0ZW5zaW9uLCA0KQpAQCAtNTQyNiw4MSArNjIyNywxMzcgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoc1swXSA9PSAnXDAnKQorICAgICAgICAgICAgaWYgKHNbMF0gPT0gJ1wwJykgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfRU9GRXJyb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxvYWQga2V5LCAnJWMnLiIsIHNbMF0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBhbmQgd2UgYXJlIGRvbmUhICovCiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFg6IEl0IGlzIG5vdCBjbGVhciB3aGF0IHRoaXMgaXMgYWN0dWFsbHkgZm9yLiAqLwotICAgIGlmICgoZXJyID0gUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgaWYgKGVyciA9PSBQeUV4Y19FT0ZFcnJvcikgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19FT0ZFcnJvcik7Ci0gICAgICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9sb2FkX2RvYywKLSJsb2FkKCkgLT4gb2JqZWN0LiBMb2FkIGEgcGlja2xlLiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5VbnBpY2tsZXIubG9hZAorCitMb2FkIGEgcGlja2xlLgorCitSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbiBpbgordGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkCit0aGVyZWluLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9fZG9jX18sCisibG9hZCgpXG4iCisiTG9hZCBhIHBpY2tsZS5cbiIKICJcbiIKICJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbiBpblxuIgogInRoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZFxuIgotInRoZXJlaW4uXG4iKTsKKyJ0aGVyZWluLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX0xPQURfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWQiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfbG9hZCwgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyX2xvYWRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLVVucGlja2xlcl9sb2FkKFVucGlja2xlck9iamVjdCAqc2VsZikKK19waWNrbGVfVW5waWNrbGVyX2xvYWQoUHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgY2hlY2tzdW06IDlhMzBiYTRlNGQ5MjIxZDRkY2Q3MDVlMTQ3MWFiMTFiMmM5ZTNhYzZdKi8KIHsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IChVbnBpY2tsZXJPYmplY3QqKXNlbGY7CisKICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBVbnBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBwcmV2ZW50cwogICAgICAgIHNlZ2ZhdWx0aW5nIGlmIGEgc3ViY2xhc3Mgb3ZlcnJpZGRlbiBfX2luaXRfXyB3aXRoIGEgZnVuY3Rpb24gdGhhdCBkb2VzCiAgICAgICAgbm90IGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkuIEhlcmUsIHdlIHNpbXBseSBlbnN1cmUgdGhhdCBzZWxmLT5yZWFkCiAgICAgICAgaXMgbm90IE5VTEwuICovCi0gICAgaWYgKHNlbGYtPnJlYWQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLAorICAgIGlmICh1bnBpY2tsZXItPnJlYWQgPT0gTlVMTCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlVucGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVucGlja2xlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbG9hZChzZWxmKTsKKyAgICByZXR1cm4gbG9hZCh1bnBpY2tsZXIpOwogfQogCiAvKiBUaGUgbmFtZSBvZiBmaW5kX2NsYXNzKCkgaXMgbWlzbGVhZGluZy4gSW4gbmV3ZXIgcGlja2xlIHByb3RvY29scywgdGhpcwogICAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgbG9hZGluZyBhbnkgZ2xvYmFsIChpLmUuLCBmdW5jdGlvbnMpLCBub3QganVzdAogICAgY2xhc3Nlcy4gVGhlIG5hbWUgaXMga2VwdCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jLAotImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKSAtPiBvYmplY3QuXG4iCisvKltjbGluaWNdCisKK19waWNrbGUuVW5waWNrbGVyLmZpbmRfY2xhc3MKKworICBzZWxmOiBVbnBpY2tsZXJPYmplY3QKKyAgbW9kdWxlX25hbWU6IG9iamVjdAorICBnbG9iYWxfbmFtZTogb2JqZWN0CisgIC8KKworUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZS4KKworSWYgbmVjZXNzYXJ5LCB0aGUgbW9kdWxlIHdpbGwgYmUgaW1wb3J0ZWQuIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXMKK21ldGhvZCAoZS5nLiB0byByZXN0cmljdCB1bnBpY2tsaW5nIG9mIGFyYml0cmFyeSBjbGFzc2VzIGFuZCBmdW5jdGlvbnMpLgorCitUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpcworbmVlZGVkLiAgQm90aCBhcmd1bWVudHMgcGFzc2VkIGFyZSBzdHIgb2JqZWN0cy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfX2RvY19fLAorImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKVxuIgorIlJldHVybiBhbiBvYmplY3QgZnJvbSBhIHNwZWNpZmllZCBtb2R1bGUuXG4iCiAiXG4iCi0iUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZSwgaW1wb3J0aW5nIHRoZSBtb2R1bGUgaWZcbiIKLSJuZWNlc3NhcnkuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdFxuIgotInVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucykuXG4iCisiSWYgbmVjZXNzYXJ5LCB0aGUgbW9kdWxlIHdpbGwgYmUgaW1wb3J0ZWQuIFN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlIHRoaXNcbiIKKyJtZXRob2QgKGUuZy4gdG8gcmVzdHJpY3QgdW5waWNrbGluZyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBhbmQgZnVuY3Rpb25zKS5cbiIKICJcbiIKICJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpc1xuIgotIm5lZWRlZC4gIEJvdGggYXJndW1lbnRzIHBhc3NlZCBhcmUgc3RyIG9iamVjdHMuXG4iKTsKKyJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcywgTUVUSF9WQVJBUkdTLCBfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1VbnBpY2tsZXJfZmluZF9jbGFzcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lOworICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiT086ZmluZF9jbGFzcyIsCisgICAgICAgICZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbCgoVW5waWNrbGVyT2JqZWN0ICopc2VsZiwgbW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJfZmluZF9jbGFzc19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCisvKltjbGluaWMgY2hlY2tzdW06IGI3ZDA1ZDRkZDhhZGM2OThlNTc4MGMxYWMyYmUwZjUwNjJkMzM5MTVdKi8KIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLCAyLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKIAogICAgIC8qIFRyeSB0byBtYXAgdGhlIG9sZCBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLnggdG8gdGhlIG5ldyBvbmVzIHVzZWQgaW4KICAgICAgICBQeXRob24gMy54LiAgV2UgZG8gdGhpcyBvbmx5IHdpdGggb2xkIHBpY2tsZSBwcm90b2NvbHMgYW5kIHdoZW4gdGhlCkBAIC01NTA4LDEzICs2MzY1LDE0IEBACiAgICAgaWYgKHNlbGYtPnByb3RvIDwgMyAmJiBzZWxmLT5maXhfaW1wb3J0cykgewogICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICBQeU9iamVjdCAqaXRlbTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBnbG9iYWwgKGkuZS4sIGEgZnVuY3Rpb24gb3IgYSBjbGFzcykgd2FzIHJlbmFtZWQKICAgICAgICAgICAgb3IgbW92ZWQgdG8gYW5vdGhlciBtb2R1bGUuICovCiAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPm5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKQEAgLTU1NDAsNyArNjM5OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgbW9kdWxlIHdhcyByZW5hbWVkLiAqLwotICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoaW1wb3J0X21hcHBpbmdfMnRvMywgbW9kdWxlX25hbWUpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMsIG1vZHVsZV9uYW1lKTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKQEAgLTU1NTUsOSArNjQxMywxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbW9kdWxlc19kaWN0ID0gUHlTeXNfR2V0T2JqZWN0KCJtb2R1bGVzIik7Ci0gICAgaWYgKG1vZHVsZXNfZGljdCA9PSBOVUxMKQorICAgIG1vZHVsZXNfZGljdCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9tb2R1bGVzKTsKKyAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLm1vZHVsZXMiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgbW9kdWxlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IobW9kdWxlc19kaWN0LCBtb2R1bGVfbmFtZSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CkBAIC01NTY2LDIwICs2NDI2LDE4IEBACiAgICAgICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydChtb2R1bGVfbmFtZSk7CiAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBnbG9iYWwgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBnbG9iYWwgPSBnZXRhdHRyaWJ1dGUobW9kdWxlLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsID0gUHlPYmplY3RfR2V0QXR0cihtb2R1bGUsIGdsb2JhbF9uYW1lKTsKKyAgICAgICAgZ2xvYmFsID0gZ2V0YXR0cmlidXRlKG1vZHVsZSwgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvID49IDQpOwogICAgIH0KICAgICByZXR1cm4gZ2xvYmFsOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIFVucGlja2xlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKVVucGlja2xlcl9sb2FkLCBNRVRIX05PQVJHUywKLSAgICAgVW5waWNrbGVyX2xvYWRfZG9jfSwKLSAgICB7ImZpbmRfY2xhc3MiLCAoUHlDRnVuY3Rpb24pVW5waWNrbGVyX2ZpbmRfY2xhc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jfSwKKyAgICBfUElDS0xFX1VOUElDS0xFUl9MT0FEX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSX0ZJTkRfQ0xBU1NfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC01NTkyLDcgKzY0NTAsNiBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVlayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdGFjayk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYwMSw4ICs2NDU4LDggQEAKICAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+bWFya3MpOwogICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKIAogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7CiB9CkBAIC01NjE1LDcgKzY0NzIsNiBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPnBlZWspOwogICAgIFB5X1ZJU0lUKHNlbGYtPnN0YWNrKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmFyZyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU2MjcsNyArNjQ4Myw2IEBACiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVlayk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhY2spOwogICAgIFB5X0NMRUFSKHNlbGYtPnBlcnNfZnVuYyk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+YXJnKTsKICAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOwpAQCAtNTYzOCwxNyArNjQ5Myw0OSBAQAogICAgIHNlbGYtPm1hcmtzID0gTlVMTDsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZW5jb2RpbmcpOwogICAgIHNlbGYtPmVuY29kaW5nID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVycm9ycyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lcnJvcnMpOwogICAgIHNlbGYtPmVycm9ycyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9kb2MsCi0iVW5waWNrbGVyKGZpbGUsICosIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykiCi0iXG4iCisvKltjbGluaWNdCisKK19waWNrbGUuVW5waWNrbGVyLl9faW5pdF9fCisKKyAgc2VsZjogVW5waWNrbGVyT2JqZWN0CisgIGZpbGU6IG9iamVjdAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorICBlbmNvZGluZzogc3RyID0gJ0FTQ0lJJworICBlcnJvcnM6IHN0ciA9ICdzdHJpY3QnCisKK1RoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3IgcmVhZGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KKworVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubworcHJvdG8gYXJndW1lbnQgaXMgbmVlZGVkLgorCitUaGUgZmlsZS1saWtlIG9iamVjdCBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZAordGhhdCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0CityZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4KK1RodXMgZmlsZS1saWtlIG9iamVjdCBjYW4gYmUgYSBiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkIGZvcgorcmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdAorbWVldHMgdGhpcyBpbnRlcmZhY2UuCisKK09wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKK3doaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0KK2dlbmVyYXRlZCBieSBQeXRob24gMi54LiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgb2xkIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUKKyplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nCitpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kCisnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19fZG9jX18sCisiX19pbml0X18oZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKICJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uXG4iCiAiXG4iCiAiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBub1xuIgpAQCAtNTY2Niw1NyArNjU1Myw2MCBAQAogImdlbmVyYXRlZCBieSBQeXRob24gMi54LiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKICJtYXAgdGhlIG9sZCBQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlXG4iCiAiKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmdcbiIKLSJpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kXG4iCi0iJ3N0cmljdCcsIHJlc3BlY3RpdmVseS5cbiIpOworImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyLng7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZFxuIgorIlwnc3RyaWN0XCcsIHJlc3BlY3RpdmVseS4iKTsKIAotc3RhdGljIGludAotVW5waWNrbGVyX2luaXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSX19fSU5JVF9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2luaXRfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9fX2luaXRfXywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3wkcHNzOl9faW5pdF9fIiwgX2tleXdvcmRzLAorICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19faW1wbCgoVW5waWNrbGVyT2JqZWN0ICopc2VsZiwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBjaGVja3N1bTogYmVkMGQ4YmJlMWM2NDc5NjBjY2M2Zjk5N2IzM2JmMzM5MzVmYTU2Zl0qLworewogICAgIF9QeV9JREVOVElGSUVSKHBlcnNpc3RlbnRfbG9hZCk7CiAKLSAgICAvKiBYWFg6IFRoYXQgaXMgYW4gaG9ycmlibGUgZXJyb3IgbWVzc2FnZS4gQnV0LCBJIGRvbid0IGtub3cgaG93IHRvIGRvCi0gICAgICAgYmV0dGVyLi4uICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIiVzIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgKCV6ZCBnaXZlbikiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBBcmd1bWVudHMgcGFyc2luZyBuZWVkcyB0byBiZSBkb25lIGluIHRoZSBfX2luaXRfXygpIG1ldGhvZCB0byBhbGxvdwotICAgICAgIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBfX2luaXRfXygpIG1ldGhvZCwgd2hpY2ggbWF5IChvciBtYXkKLSAgICAgICBub3QpIHN1cHBvcnQgVW5waWNrbGVyIGFyZ3VtZW50cy4gSG93ZXZlciwgdGhpcyBtZWFucyB3ZSBuZWVkIHRvIGJlCi0gICAgICAgZXh0cmEgY2FyZWZ1bCBpbiB0aGUgb3RoZXIgVW5waWNrbGVyIG1ldGhvZHMsIHNpbmNlIGEgc3ViY2xhc3MgY291bGQKLSAgICAgICBmb3JnZXQgdG8gY2FsbCBVbnBpY2tsZXIuX19pbml0X18oKSB0aHVzIGJyZWFraW5nIG91ciBpbnRlcm5hbAotICAgICAgIGludmFyaWFudHMuICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOlVucGlja2xlciIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICAvKiBJbiBjYXNlIG9mIG11bHRpcGxlIF9faW5pdF9fKCkgY2FsbHMsIGNsZWFyIHByZXZpb3VzIGNvbnRlbnQuICovCiAgICAgaWYgKHNlbGYtPnJlYWQgIT0gTlVMTCkKICAgICAgICAgKHZvaWQpVW5waWNrbGVyX2NsZWFyKHNlbGYpOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRTdHJlYW0oc2VsZiwgZmlsZSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyhzZWxmLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7CisgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0czsKICAgICBpZiAoc2VsZi0+Zml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9wZXJzaXN0ZW50X2xvYWQpKSB7CiAgICAgICAgIHNlbGYtPnBlcnNfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9wZXJzaXN0ZW50X2xvYWQpOwogICAgICAgICBpZiAoc2VsZi0+cGVyc19mdW5jID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHNlbGYtPnBlcnNfZnVuYyA9IE5VTEw7CkBAIC01NzI0LDE2ICs2NjE0LDI3IEBACiAKICAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOwogICAgIGlmIChzZWxmLT5zdGFjayA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc2VsZi0+bWVtb19zaXplID0gMzI7CiAgICAgc2VsZi0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT5tZW1vX3NpemUpOwogICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPnByb3RvID0gMDsKIAorICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKiBXcmFwIHRoZSBDbGluaWMgZ2VuZXJhdGVkIHNpZ25hdHVyZSB0byBzbG90IGl0IGluIHRwX2luaXQuICovCitzdGF0aWMgaW50CitVbnBpY2tsZXJfaW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fKHNlbGYsIGFyZ3MsIGt3YXJncyk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU3NTUsMTEgKzY2NTYsMjQgQEAKICAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKIH0gVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0OwogCi1QeURvY19TVFJWQVIodW1wX2NsZWFyX2RvYywKLSJtZW1vLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworLypbY2xpbmljXQorX3BpY2tsZS5VbnBpY2tsZXJNZW1vUHJveHkuY2xlYXIKKworICBzZWxmOiBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhcl9fZG9jX18sCisiY2xlYXIoKVxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhciIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jbGVhciwgTUVUSF9OT0FSR1MsIF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfY2xlYXIoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXIoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGNoZWNrc3VtOiA0NmZlY2Y0ZTMzYzBjODczMTI0Zjg0NWVkZjZjYzNhMmU5ODY0YmQ1XSovCiB7CiAgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmLT51bnBpY2tsZXIpOwogICAgIHNlbGYtPnVucGlja2xlci0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT51bnBpY2tsZXItPm1lbW9fc2l6ZSk7CkBAIC01NzY4LDExICs2NjgyLDI0IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUih1bXBfY29weV9kb2MsCi0ibWVtby5jb3B5KCkgLT4gbmV3X21lbW8uICBDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5LmNvcHkKKworICBzZWxmOiBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KClcbiIKKyJDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHksIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfY29weShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5KFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogZjg4NTZjNGU4YTMzNTQwODg2ZGZiYjI0NWYyODZhZjMwMDhmYTBhZF0qLwogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqbmV3X21lbW8gPSBQeURpY3RfTmV3KCk7CkBAIC01ODAyLDE1ICs2NzI5LDI4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUih1bXBfcmVkdWNlX2RvYywKLSJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKy8qW2NsaW5pY10KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5Ll9fcmVkdWNlX18KKworICBzZWxmOiBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QKKworSW1wbGVtZW50IHBpY2tsaW5nIHN1cHBvcnQuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfXywKKyJfX3JlZHVjZV9fKClcbiIKKyJJbXBsZW1lbnQgcGlja2xpbmcgc3VwcG9ydC4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRiAgICBcCisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfcmVkdWNlKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogYWI1NTE2YTc3NjU5MTQ0ZTExOTFjN2RkNzBhMGM2Yzc0NTU2NjBiY10qLwogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CiAgICAgUHlPYmplY3QgKmNvbnN0cnVjdG9yX2FyZ3M7Ci0gICAgUHlPYmplY3QgKmNvbnRlbnRzID0gdW1wX2NvcHkoc2VsZik7CisgICAgUHlPYmplY3QgKmNvbnRlbnRzID0gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weShzZWxmKTsKICAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU4MzMsOSArNjc3Myw5IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiB1bnBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbGVhciIsICAgICAgIChQeUNGdW5jdGlvbil1bXBfY2xlYXIsICBNRVRIX05PQVJHUywgIHVtcF9jbGVhcl9kb2N9LAotICAgIHsiY29weSIsICAgICAgICAoUHlDRnVuY3Rpb24pdW1wX2NvcHksICAgTUVUSF9OT0FSR1MsICB1bXBfY29weV9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsICAoUHlDRnVuY3Rpb24pdW1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCB1bXBfcmVkdWNlX2RvY30sCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ09QWV9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNjA1OSw3ICs2OTk5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICBVbnBpY2tsZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLCAgLyp0cF9kb2MqLwogICAgICh0cmF2ZXJzZXByb2MpVW5waWNrbGVyX3RyYXZlcnNlLCAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KVVucGlja2xlcl9jbGVhciwgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwpAQCAtNjA3NCwyMSArNzAxNCw1MyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAoaW5pdHByb2MpVW5waWNrbGVyX2luaXQsICAgICAgICAgICAvKnRwX2luaXQqLworICAgIFVucGlja2xlcl9pbml0LCAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwogICAgIFB5T2JqZWN0X0dDX0RlbCwgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCiB9OwogCi1QeURvY19TVFJWQVIocGlja2xlX2R1bXBfZG9jLAotImR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCAqLCBmaXhfaW1wb3J0cz1UcnVlKSAtPiBOb25lXG4iCisvKltjbGluaWNdCisKK19waWNrbGUuZHVtcAorCisgIG9iajogb2JqZWN0CisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorCitXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLCBidXQgbWF5IGJlIG1vcmUKK2VmZmljaWVudC4KKworVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2wKK3N1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhCitiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLjAuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvbgorc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mCitQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworVGhlIGZpbGUgYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIGJ5dGVzCithcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYQoraW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKworSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bworbWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLngsCitzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9kdW1wX19kb2NfXywKKyJkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuXG4iCiAiXG4iCi0iV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlIG9iamVjdCBmaWxlLiAgVGhpc1xuIgotImlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heSBiZSBtb3JlXG4iCisiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgogImVmZmljaWVudC5cbiIKICJcbiIKLSJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKKyJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbFxuIgogInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCiAiYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgogIlxuIgpAQCAtNjEwMiwzNSArNzA3NCw0NCBAQAogIlxuIgogIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKICJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCxcbiIKLSJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7Cisic28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfZHVtcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKnByb3RvID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7CisgICAgUHlPYmplY3QgKnByb3RvY29sID0gTlVMTDsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOwogCi0gICAgLyogZml4X2ltcG9ydHMgaXMgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpID4gMykgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5kdW1wKCkgdGFrZXMgYXQgbW9zdCAzIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPT3xPJHA6ZHVtcCIsIF9rZXl3b3JkcywKKyAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfZHVtcF9pbXBsKG1vZHVsZSwgb2JqLCBmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PfE9POmR1bXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90bywgJmZpeF9pbXBvcnRzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKLSAgICBwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGNoZWNrc3VtOiBlNDQyNzIxYjE2MDUyZDkyMWI1ZTNmYmQxNDZkMGE2MmU5NGE0NTllXSovCit7CisgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9IF9QaWNrbGVyX05ldygpOworCiAgICAgaWYgKHBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG8sIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShwaWNrbGVyLCBmaWxlKSA8IDApCkBAIC02MTUwLDExICs3MTMxLDMzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfZHVtcHNfZG9jLAotImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzXG4iCi0ib2JqZWN0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLlxuIgorLypbY2xpbmljXQorCitfcGlja2xlLmR1bXBzCisKKyAgb2JqOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKworUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSBieXRlcyBvYmplY3QuCisKK1RoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sOworc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEKK2JhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KKworU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uCitzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YKK1B5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorCitJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAorc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcHNfX2RvY19fLAorImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKICJcbiIKICJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKICJzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYVxuIgpAQCAtNjE2NiwzNSArNzE2OSw0NCBAQAogIlxuIgogIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgogIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgotInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKyJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LiIpOworCisjZGVmaW5lIF9QSUNLTEVfRFVNUFNfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfZHVtcHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2R1bXBzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVfZHVtcHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfZHVtcHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXBzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqb2JqOwotICAgIFB5T2JqZWN0ICpwcm90byA9IE5VTEw7CisgICAgUHlPYmplY3QgKnByb3RvY29sID0gTlVMTDsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3xPJHA6ZHVtcHMiLCBfa2V5d29yZHMsCisgICAgICAgICZvYmosICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfZHVtcHNfaW1wbChtb2R1bGUsIG9iaiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGNoZWNrc3VtOiBkZjYyNjJjNGM0ODdmNTM3ZjQ3YWVjOGExNzA5MzE4MjA0YzFlMTc0XSovCit7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwotICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7CisgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwogCi0gICAgLyogZml4X2ltcG9ydHMgaXMgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpID4gMikgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5kdW1wcygpIHRha2VzIGF0IG1vc3QgMiBwb3NpdGlvbmFsICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAoJXpkIGdpdmVuKSIsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPTzpkdW1wcyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmcHJvdG8sICZmaXhfaW1wb3J0cykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcGlja2xlciA9IF9QaWNrbGVyX05ldygpOwogICAgIGlmIChwaWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvLCBmaXhfaW1wb3J0cykgPCAwKQorICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90b2NvbCwgZml4X2ltcG9ydHMpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChkdW1wKHBpY2tsZXIsIG9iaikgPCAwKQpAQCAtNjIwOSwxNSArNzIyMSw0NiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIocGlja2xlX2xvYWRfZG9jLAotImxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9J0FTQ0lJJywgZXJyb3JzPSdzdHJpY3QnKSAtPiBvYmplY3RcbiIKKy8qW2NsaW5pY10KKworX3BpY2tsZS5sb2FkCisKKyAgZmlsZTogb2JqZWN0CisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisgIGVuY29kaW5nOiBzdHIgPSAnQVNDSUknCisgIGVycm9yczogc3RyID0gJ3N0cmljdCcKKworUmV0dXJuIGEgcmVjb25zdGl0dXRlZCBvYmplY3QgZnJvbSB0aGUgcGlja2xlIGRhdGEgc3RvcmVkIGluIGEgZmlsZS4KKworVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LgorCitUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sCithcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZQoraWdub3JlZC4KKworVGhlIGFyZ3VtZW50IGZpbGUgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhbgoraW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoCittZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYSBiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkCitmb3IgcmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzCitpbnRlcmZhY2UuCisKK09wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycywKK3doaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkCitieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCitQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlIGVuY29kaW5nIGFuZAorZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbgorMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2xvYWRfX2RvY19fLAorImxvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyJSZXR1cm4gYSByZWNvbnN0aXR1dGVkIG9iamVjdCBmcm9tIHRoZSBwaWNrbGUgZGF0YSBzdG9yZWQgaW4gYSBmaWxlLlxuIgogIlxuIgotIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUgYW5kXG4iCi0icmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uICBUaGlzIGlzXG4iCi0iZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlIGVmZmljaWVudC5cbiIKKyJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAsIGJ1dCBtYXkgYmUgbW9yZSBlZmZpY2llbnQuXG4iCiAiXG4iCiAiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgotImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCisiYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCiAiaWdub3JlZC5cbiIKICJcbiIKICJUaGUgYXJndW1lbnQgZmlsZSBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuXG4iCkBAIC02MjMxLDMyICs3Mjc0LDQxIEBACiAiYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZFxuIgogIlB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgZW5jb2RpbmcgYW5kXG4iCiAiZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvblxuIgotIjIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisiMi54OyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJywgcmVzcGVjdGl2ZWx5LiIpOworCisjZGVmaW5lIF9QSUNLTEVfTE9BRF9NRVRIT0RERUYgICAgXAorICAgIHsibG9hZCIsIChQeUNGdW5jdGlvbilfcGlja2xlX2xvYWQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBfcGlja2xlX2xvYWRfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9sb2FkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX2xvYWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6bG9hZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZF9pbXBsKG1vZHVsZSwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLypbY2xpbmljIGNoZWNrc3VtOiBlMTA3OTZmNjc2NWIyMmNlNDhkY2E2OTQwZjExYjM5MzM4NTNjYTM1XSovCit7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZCgpIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpsb2FkIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC02MjY2LDkgKzczMTgsNyBAQAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2RpbmcodW5waWNrbGVyLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKLSAgICBpZiAodW5waWNrbGVyLT5maXhfaW1wb3J0cyA9PSAtMSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAKICAgICByZXN1bHQgPSBsb2FkKHVucGlja2xlcik7CiAgICAgUHlfREVDUkVGKHVucGlja2xlcik7CkBAIC02Mjc5LDE0ICs3MzI5LDM2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfbG9hZHNfZG9jLAotImxvYWRzKGlucHV0LCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpIC0+IG9iamVjdFxuIgotIlxuIgotIlJlYWQgYSBwaWNrbGVkIG9iamVjdCBoaWVyYXJjaHkgZnJvbSBhIGJ5dGVzIG9iamVjdCBhbmQgcmV0dXJuIHRoZVxuIgotInJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpblxuIgorLypbY2xpbmljXQorCitfcGlja2xlLmxvYWRzCisKKyAgZGF0YTogb2JqZWN0CisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisgIGVuY29kaW5nOiBzdHIgPSAnQVNDSUknCisgIGVycm9yczogc3RyID0gJ3N0cmljdCcKKworUmV0dXJuIGEgcmVjb25zdGl0dXRlZCBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlIGRhdGEuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2wKK2FyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlCitpZ25vcmVkLgorCitPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoCithcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAorYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmQKK2Vycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KKzIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoX3BpY2tsZV9sb2Fkc19fZG9jX18sCisibG9hZHMoZGF0YSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9XCdBU0NJSVwnLCBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyJSZXR1cm4gYSByZWNvbnN0aXR1dGVkIG9iamVjdCBmcm9tIHRoZSBnaXZlbiBwaWNrbGUgZGF0YS5cbiIKICJcbiIKICJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sXG4iCi0iYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmVcbiIKKyJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdFwncyByZXByZXNlbnRhdGlvbiBhcmVcbiIKICJpZ25vcmVkLlxuIgogIlxuIgogIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycywgd2hpY2hcbiIKQEAgLTYyOTQsNDQgKzczNjYsNTEgQEAKICJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCiAiUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKICJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCi0iMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKyIyLng7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLCByZXNwZWN0aXZlbHkuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9MT0FEU19NRVRIT0RERUYgICAgXAorICAgIHsibG9hZHMiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfbG9hZHNfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9sb2FkcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9sb2Fkc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2FkcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImlucHV0IiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotICAgIFB5T2JqZWN0ICppbnB1dDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZGF0YSIsICJmaXhfaW1wb3J0cyIsICJlbmNvZGluZyIsICJlcnJvcnMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBpbnQgZml4X2ltcG9ydHMgPSAxOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBjb25zdCBjaGFyICplcnJvcnMgPSAic3RyaWN0IjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98JHBzczpsb2FkcyIsIF9rZXl3b3JkcywKKyAgICAgICAgJmRhdGEsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZHNfaW1wbChtb2R1bGUsIGRhdGEsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9sb2Fkc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpkYXRhLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgY2hlY2tzdW06IDI5ZWU3MjVlZmNiZjUxYTM1MzNjMTljYjgyNjFhOGUyNjdiNzA4MGFdKi8KK3sKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGNoYXIgKmVuY29kaW5nID0gTlVMTDsKLSAgICBjaGFyICplcnJvcnMgPSBOVUxMOwotICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOworICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkcygpIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpsb2FkcyIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wdXQsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dCh1bnBpY2tsZXIsIGlucHV0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQodW5waWNrbGVyLCBkYXRhKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKHVucGlja2xlciwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7Ci0gICAgaWYgKHVucGlja2xlci0+Zml4X2ltcG9ydHMgPT0gLTEpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzOwogCiAgICAgcmVzdWx0ID0gbG9hZCh1bnBpY2tsZXIpOwogICAgIFB5X0RFQ1JFRih1bnBpY2tsZXIpOwpAQCAtNjM0MiwxMzkgKzc0MjEsNjMgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHBpY2tsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJkdW1wIiwgIChQeUNGdW5jdGlvbilwaWNrbGVfZHVtcCwgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBwaWNrbGVfZHVtcF9kb2N9LAotICAgIHsiZHVtcHMiLCAoUHlDRnVuY3Rpb24pcGlja2xlX2R1bXBzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2R1bXBzX2RvY30sCi0gICAgeyJsb2FkIiwgIChQeUNGdW5jdGlvbilwaWNrbGVfbG9hZCwgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBwaWNrbGVfbG9hZF9kb2N9LAotICAgIHsibG9hZHMiLCAoUHlDRnVuY3Rpb24pcGlja2xlX2xvYWRzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgcGlja2xlX2xvYWRzX2RvY30sCisgICAgX1BJQ0tMRV9EVU1QX01FVEhPRERFRgorICAgIF9QSUNLTEVfRFVNUFNfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9MT0FEX01FVEhPRERFRgorICAgIF9QSUNLTEVfTE9BRFNfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCiBzdGF0aWMgaW50Ci1pbml0bW9kdWxlKHZvaWQpCitwaWNrbGVfY2xlYXIoUHlPYmplY3QgKm0pCiB7Ci0gICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpjb21wYXRfcGlja2xlID0gTlVMTDsKLQotICAgIC8qIFhYWDogV2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSB0eXBlcyBvZiB0aGUgZGljdGlvbmFyaWVzIGltcG9ydGVkIGFyZQotICAgICAgIGV4YWN0bHkgUHlEaWN0IG9iamVjdHMuIE90aGVyd2lzZSwgaXQgaXMgcG9zc2libGUgdG8gY3Jhc2ggdGhlIHBpY2tsZQotICAgICAgIHNpbmNlIHdlIHVzZSB0aGUgUHlEaWN0IEFQSSBkaXJlY3RseSB0byBhY2Nlc3MgdGhlc2UgZGljdGlvbmFyaWVzLiAqLwotCi0gICAgY29weXJlZyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29weXJlZyIpOwotICAgIGlmICghY29weXJlZykKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBkaXNwYXRjaF90YWJsZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgImRpc3BhdGNoX3RhYmxlIik7Ci0gICAgaWYgKCFkaXNwYXRjaF90YWJsZSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBleHRlbnNpb25fcmVnaXN0cnkgPSBcCi0gICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgIl9leHRlbnNpb25fcmVnaXN0cnkiKTsKLSAgICBpZiAoIWV4dGVuc2lvbl9yZWdpc3RyeSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpbnZlcnRlZF9yZWdpc3RyeSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29weXJlZywgIl9pbnZlcnRlZF9yZWdpc3RyeSIpOwotICAgIGlmICghaW52ZXJ0ZWRfcmVnaXN0cnkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZXh0ZW5zaW9uX2NhY2hlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9jYWNoZSIpOwotICAgIGlmICghZXh0ZW5zaW9uX2NhY2hlKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKGNvcHlyZWcpOwotCi0gICAgLyogTG9hZCB0aGUgMi54IC0+IDMueCBzdGRsaWIgbW9kdWxlIG1hcHBpbmcgdGFibGVzICovCi0gICAgY29tcGF0X3BpY2tsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2NvbXBhdF9waWNrbGUiKTsKLSAgICBpZiAoIWNvbXBhdF9waWNrbGUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgbmFtZV9tYXBwaW5nXzJ0bzMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJOQU1FX01BUFBJTkciKTsKLSAgICBpZiAoIW5hbWVfbWFwcGluZ18ydG8zKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QobmFtZV9tYXBwaW5nXzJ0bzMpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShuYW1lX21hcHBpbmdfMnRvMyktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBpbXBvcnRfbWFwcGluZ18ydG8zID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJTVBPUlRfTUFQUElORyIpOwotICAgIGlmICghaW1wb3J0X21hcHBpbmdfMnRvMykKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KGltcG9ydF9tYXBwaW5nXzJ0bzMpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgotICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKGltcG9ydF9tYXBwaW5nXzJ0bzMpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgLyogLi4uIGFuZCB0aGUgMy54IC0+IDIueCBtYXBwaW5nIHRhYmxlcyAqLwotICAgIG5hbWVfbWFwcGluZ18zdG8yID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVWRVJTRV9OQU1FX01BUFBJTkciKTsKLSAgICBpZiAoIW5hbWVfbWFwcGluZ18zdG8yKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QobmFtZV9tYXBwaW5nXzN0bzIpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgotICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKG5hbWVfbWFwcGluZ18zdG8yKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGltcG9ydF9tYXBwaW5nXzN0bzIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJFVkVSU0VfSU1QT1JUX01BUFBJTkciKTsKLSAgICBpZiAoIWltcG9ydF9tYXBwaW5nXzN0bzIpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChpbXBvcnRfbWFwcGluZ18zdG8yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgotICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKGltcG9ydF9tYXBwaW5nXzN0bzIpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgUHlfQ0xFQVIoY29tcGF0X3BpY2tsZSk7Ci0KLSAgICBlbXB0eV90dXBsZSA9IFB5VHVwbGVfTmV3KDApOwotICAgIGlmIChlbXB0eV90dXBsZSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIHR3b190dXBsZSA9IFB5VHVwbGVfTmV3KDIpOwotICAgIGlmICh0d29fdHVwbGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICAvKiBXZSB1c2UgdGhpcyB0ZW1wIGNvbnRhaW5lciB3aXRoIG5vIHJlZ2FyZCB0byByZWZjb3VudHMsIG9yIHRvCi0gICAgICoga2VlcGluZyBjb250YWluZWVzIGFsaXZlLiAgRXhlbXB0IGZyb20gR0MsIGJlY2F1c2Ugd2UgZG9uJ3QKLSAgICAgKiB3YW50IGFueXRoaW5nIGxvb2tpbmcgYXQgdHdvX3R1cGxlKCkgYnkgbWFnaWMuCi0gICAgICovCi0gICAgUHlPYmplY3RfR0NfVW5UcmFjayh0d29fdHVwbGUpOwotCisgICAgX1BpY2tsZV9DbGVhclN0YXRlKF9QaWNrbGVfR2V0U3RhdGUobSkpOwogICAgIHJldHVybiAwOworfQogCi0gIGVycm9yOgotICAgIFB5X0NMRUFSKGNvcHlyZWcpOwotICAgIFB5X0NMRUFSKGRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9DTEVBUihleHRlbnNpb25fcmVnaXN0cnkpOwotICAgIFB5X0NMRUFSKGludmVydGVkX3JlZ2lzdHJ5KTsKLSAgICBQeV9DTEVBUihleHRlbnNpb25fY2FjaGUpOwotICAgIFB5X0NMRUFSKGNvbXBhdF9waWNrbGUpOwotICAgIFB5X0NMRUFSKG5hbWVfbWFwcGluZ18ydG8zKTsKLSAgICBQeV9DTEVBUihpbXBvcnRfbWFwcGluZ18ydG8zKTsKLSAgICBQeV9DTEVBUihuYW1lX21hcHBpbmdfM3RvMik7Ci0gICAgUHlfQ0xFQVIoaW1wb3J0X21hcHBpbmdfM3RvMik7Ci0gICAgUHlfQ0xFQVIoZW1wdHlfdHVwbGUpOwotICAgIFB5X0NMRUFSKHR3b190dXBsZSk7Ci0gICAgcmV0dXJuIC0xOworc3RhdGljIGludAorcGlja2xlX3RyYXZlcnNlKFB5T2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldFN0YXRlKG0pOworICAgIFB5X1ZJU0lUKHN0LT5QaWNrbGVFcnJvcik7CisgICAgUHlfVklTSVQoc3QtPlBpY2tsaW5nRXJyb3IpOworICAgIFB5X1ZJU0lUKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIFB5X1ZJU0lUKHN0LT5kaXNwYXRjaF90YWJsZSk7CisgICAgUHlfVklTSVQoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSk7CisgICAgUHlfVklTSVQoc3QtPmV4dGVuc2lvbl9jYWNoZSk7CisgICAgUHlfVklTSVQoc3QtPmludmVydGVkX3JlZ2lzdHJ5KTsKKyAgICBQeV9WSVNJVChzdC0+bmFtZV9tYXBwaW5nXzJ0bzMpOworICAgIFB5X1ZJU0lUKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9WSVNJVChzdC0+bmFtZV9tYXBwaW5nXzN0bzIpOworICAgIFB5X1ZJU0lUKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9WSVNJVChzdC0+Y29kZWNzX2VuY29kZSk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3BpY2tsZW1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIl9waWNrbGUiLAotICAgIHBpY2tsZV9tb2R1bGVfZG9jLAotICAgIC0xLAotICAgIHBpY2tsZV9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKKyAgICAiX3BpY2tsZSIsICAgICAgICAgICAvKiBtX25hbWUgKi8KKyAgICBwaWNrbGVfbW9kdWxlX2RvYywgICAvKiBtX2RvYyAqLworICAgIHNpemVvZihQaWNrbGVTdGF0ZSksIC8qIG1fc2l6ZSAqLworICAgIHBpY2tsZV9tZXRob2RzLCAgICAgIC8qIG1fbWV0aG9kcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgIC8qIG1fcmVsb2FkICovCisgICAgcGlja2xlX3RyYXZlcnNlLCAgICAgLyogbV90cmF2ZXJzZSAqLworICAgIHBpY2tsZV9jbGVhciwgICAgICAgIC8qIG1fY2xlYXIgKi8KKyAgICBOVUxMICAgICAgICAgICAgICAgICAvKiBtX2ZyZWUgKi8KIH07CiAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3BpY2tsZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptOworICAgIFBpY2tsZVN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJl9waWNrbGVtb2R1bGUpOworICAgIGlmIChtKSB7CisgICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIG07CisgICAgfQogCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmVW5waWNrbGVyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDk5LDI3ICs3NTAyLDMyIEBACiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGVyIiwgKFB5T2JqZWN0ICopJlVucGlja2xlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc3QgPSBfUGlja2xlX0dldFN0YXRlKG0pOworCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgZXhjZXB0aW9ucy4gKi8KLSAgICBQaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIGlmIChQaWNrbGVFcnJvciA9PSBOVUxMKQorICAgIHN0LT5QaWNrbGVFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGVFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xlRXJyb3IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUGlja2xpbmdFcnJvciA9IFwKLSAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+UGlja2xpbmdFcnJvciA9IFwKKyAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uKCJfcGlja2xlLlBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+UGlja2xpbmdFcnJvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBVbnBpY2tsaW5nRXJyb3IgPSBcCi0gICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBQaWNrbGVFcnJvciwgTlVMTCk7Ci0gICAgaWYgKFVucGlja2xpbmdFcnJvciA9PSBOVUxMKQorICAgIHN0LT5VbnBpY2tsaW5nRXJyb3IgPSBcCisgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5VbnBpY2tsaW5nRXJyb3IiLCBzdC0+UGlja2xlRXJyb3IsIE5VTEwpOworICAgIGlmIChzdC0+VW5waWNrbGluZ0Vycm9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGlja2xlRXJyb3IiLCBQaWNrbGVFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+UGlja2xlRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsZUVycm9yIiwgc3QtPlBpY2tsZUVycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsaW5nRXJyb3IiLCBQaWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5QaWNrbGluZ0Vycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVW5waWNrbGluZ0Vycm9yIiwgVW5waWNrbGluZ0Vycm9yKSA8IDApCisgICAgUHlfSU5DUkVGKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xpbmdFcnJvciIsIHN0LT5VbnBpY2tsaW5nRXJyb3IpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoaW5pdG1vZHVsZSgpIDwgMCkKKyAgICBpZiAoX1BpY2tsZV9Jbml0U3RhdGUoc3QpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKaW5kZXggMDE5NmNhMi4uYTJkNzAyMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKKysrIGIvTW9kdWxlcy9fcG9zaXhzdWJwcm9jZXNzLmMKQEAgLTM1LDcgKzM1LDcgQEAKICMgZGVmaW5lIEZEX0RJUiAiL3Byb2Mvc2VsZi9mZCIKICNlbmRpZgogCi0jZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBpZiAoKGNhbGwpID09IC0xKSBnb3RvIGVycm9yCisjZGVmaW5lIFBPU0lYX0NBTEwoY2FsbCkgICBkbyB7IGlmICgoY2FsbCkgPT0gLTEpIGdvdG8gZXJyb3I7IH0gd2hpbGUgKDApCiAKIAogLyogTWF4aW11bSBmaWxlIGRlc2NyaXB0b3IsIGluaXRpYWxpemVkIG9uIG1vZHVsZSBsb2FkLiAqLwpAQCAtODcsNyArODcsNyBAQAogICAgIGlmIChzdGF0KCIvZGV2IiwgJmRldl9zdGF0KSAhPSAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoc3RhdChGRF9ESVIsICZkZXZfZmRfc3RhdCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7IAorICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoZGV2X3N0YXQuc3RfZGV2ID09IGRldl9mZF9zdGF0LnN0X2RldikKICAgICAgICAgcmV0dXJuIDA7ICAvKiAvID09IC9kZXYgPT0gL2Rldi9mZCBtZWFucyBpdCBpcyBzdGF0aWMuICNmYWlsICovCiAgICAgcmV0dXJuIDE7CkBAIC0xMzYsNiArMTM2LDI5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK21ha2VfaW5oZXJpdGFibGUoUHlPYmplY3QgKnB5X2Zkc190b19rZWVwLCBpbnQgZXJycGlwZV93cml0ZSkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGxlbjsKKworICAgIGxlbiA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QqIGZkb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHB5X2Zkc190b19rZWVwLCBpKTsKKyAgICAgICAgbG9uZyBmZCA9IFB5TG9uZ19Bc0xvbmcoZmRvYmopOworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworICAgICAgICBhc3NlcnQoMCA8PSBmZCAmJiBmZCA8PSBJTlRfTUFYKTsKKyAgICAgICAgaWYgKGZkID09IGVycnBpcGVfd3JpdGUpIHsKKyAgICAgICAgICAgIC8qIGVycnBpcGVfd3JpdGUgaXMgcGFydCBvZiBweV9mZHNfdG9fa2VlcC4gSXQgbXVzdCBiZSBjbG9zZWQgYXQKKyAgICAgICAgICAgICAgIGV4ZWMoKSwgYnV0IGtlcHQgb3BlbiBpbiB0aGUgY2hpbGQgcHJvY2VzcyB1bnRpbCBleGVjKCkgaXMKKyAgICAgICAgICAgICAgIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKChpbnQpZmQsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIAogLyogQ2xvc2UgYWxsIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIHN0YXJ0X2ZkIGluY2x1c2l2ZSB0bwogICogZW5kX2ZkIGV4Y2x1c2l2ZSBleGNlcHQgZm9yIHRob3NlIGluIHB5X2Zkc190b19rZWVwLiAgSWYgdGhlCkBAIC0yMDUsMTggKzIyOCw4IEBACiAgICAgaW50IGZkX2Rpcl9mZDsKICAgICBpZiAoc3RhcnRfZmQgPj0gZW5kX2ZkKQogICAgICAgICByZXR1cm47Ci0jaWZkZWYgT19DTE9FWEVDCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZIHwgT19DTE9FWEVDLCAwKTsKLSNlbHNlCi0gICAgZmRfZGlyX2ZkID0gb3BlbihGRF9ESVIsIE9fUkRPTkxZLCAwKTsKLSNpZmRlZiBGRF9DTE9FWEVDCi0gICAgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZmRfZGlyX2ZkLCBGX0dFVEZEKTsKLSAgICAgICAgaWYgKG9sZCAhPSAtMSkKLSAgICAgICAgICAgIGZjbnRsKGZkX2Rpcl9mZCwgRl9TRVRGRCwgb2xkIHwgRkRfQ0xPRVhFQyk7Ci0gICAgfQotI2VuZGlmCi0jZW5kaWYKKworICAgIGZkX2Rpcl9mZCA9IF9QeV9vcGVuKEZEX0RJUiwgT19SRE9OTFkpOwogICAgIGlmIChmZF9kaXJfZmQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gd2F5IHRvIGdldCBhIGxpc3Qgb2Ygb3BlbiBmZHMuICovCiAgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOwpAQCAtMzU2LDE2ICszNjksMTYgQEAKICAgICAvKiBCdWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBoZXggaW50ZWdlci4gIFdlIGNhbid0IG1hbGxvYy4gKi8KICAgICBjaGFyIGhleF9lcnJub1tzaXplb2Yoc2F2ZWRfZXJybm8pKjIrMV07CiAKKyAgICBpZiAobWFrZV9pbmhlcml0YWJsZShweV9mZHNfdG9fa2VlcCwgZXJycGlwZV93cml0ZSkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAgICAgLyogQ2xvc2UgcGFyZW50J3MgcGlwZSBlbmRzLiAqLwotICAgIGlmIChwMmN3cml0ZSAhPSAtMSkgeworICAgIGlmIChwMmN3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShwMmN3cml0ZSkpOwotICAgIH0KLSAgICBpZiAoYzJwcmVhZCAhPSAtMSkgeworICAgIGlmIChjMnByZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHJlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGVycnJlYWQgIT0gLTEpIHsKKyAgICBpZiAoZXJycmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJyZWFkKSk7Ci0gICAgfQogICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycGlwZV9yZWFkKSk7CiAKICAgICAvKiBXaGVuIGR1cGluZyBmZHMsIGlmIHRoZXJlIGFyaXNlcyBhIHNpdHVhdGlvbiB3aGVyZSBvbmUgb2YgdGhlIGZkcyBpcwpAQCAtMzc5LDM4ICszOTIsMzQgQEAKICAgICAgICBkdXAyKCkgcmVtb3ZlcyB0aGUgQ0xPRVhFQyBmbGFnIGJ1dCB3ZSBtdXN0IGRvIGl0IG91cnNlbHZlcyBpZiBkdXAyKCkKICAgICAgICB3b3VsZCBiZSBhIG5vLW9wIChpc3N1ZSAjMTA4MDYpLiAqLwogICAgIGlmIChwMmNyZWFkID09IDApIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKHAyY3JlYWQsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwocDJjcmVhZCwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOwotICAgIH0gZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShwMmNyZWFkLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChwMmNyZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGR1cDIocDJjcmVhZCwgMCkpOyAgLyogc3RkaW4gKi8KLSAgICB9CisKICAgICBpZiAoYzJwd3JpdGUgPT0gMSkgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoYzJwd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoYzJwd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGMycHdyaXRlICE9IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGMycHdyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGMycHdyaXRlLCAxKSk7ICAvKiBzdGRvdXQgKi8KLSAgICB9CisKICAgICBpZiAoZXJyd3JpdGUgPT0gMikgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZXJyd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoZXJyd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGVycndyaXRlICE9IC0xKSB7Ci0gICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGVycndyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKyAgICBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkKKyAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGVycndyaXRlLCAyKSk7ICAvKiBzdGRlcnIgKi8KIAogICAgIC8qIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZSBzYW1lIGZkIG1vcmUgdGhhbiAqLwogICAgIC8qIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4gKi8KLSAgICBpZiAocDJjcmVhZCA+IDIpIHsKKyAgICBpZiAocDJjcmVhZCA+IDIpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjcmVhZCkpOwotICAgIH0KLSAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpIHsKKyAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoYzJwd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKSB7CisgICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycndyaXRlKSk7Ci0gICAgfQogCiAgICAgaWYgKGN3ZCkKICAgICAgICAgUE9TSVhfQ0FMTChjaGRpcihjd2QpKTsKQEAgLTQ5Miw3ICs1MDEsNyBAQAogICAgICAgICAvKiBXZSBjYW4ndCBjYWxsIHN0cmVycm9yKHNhdmVkX2Vycm5vKS4gIEl0IGlzIG5vdCBhc3luYyBzaWduYWwgc2FmZS4KICAgICAgICAgICogVGhlIHBhcmVudCBwcm9jZXNzIHdpbGwgbG9vayB0aGUgZXJyb3IgbWVzc2FnZSB1cC4gKi8KICAgICB9IGVsc2UgewotICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiUnVudGltZUVycm9yOjA6IiwgMTUpOworICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCAiU3VicHJvY2Vzc0Vycm9yOjA6IiwgMTgpOwogICAgICAgICB1bnVzZWQgPSB3cml0ZShlcnJwaXBlX3dyaXRlLCBlcnJfbXNnLCBzdHJsZW4oZXJyX21zZykpOwogICAgIH0KICAgICBpZiAodW51c2VkKSByZXR1cm47ICAvKiBzaWxseT8geWVzISBhdm9pZHMgZ2NjIGNvbXBpbGVyIHdhcm5pbmcuICovCkBAIC01NDQsNyArNTUzLDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXNlbmFibGVkKTsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzYWJsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdjX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZ2MiKTsKICAgICAgICAgaWYgKGdjX21vZHVsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MjEsODggKzczMCw2IEBACiBSYWlzZXM6IE9ubHkgb24gYW4gZXJyb3IgaW4gdGhlIHBhcmVudCBwcm9jZXNzLlxuXAogIik7CiAKLVB5RG9jX1NUUlZBUihzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZV9kb2MsCi0iY2xvZXhlY19waXBlKCkgLT4gKHJlYWRfZW5kLCB3cml0ZV9lbmQpXG5cblwKLUNyZWF0ZSBhIHBpcGUgd2hvc2UgZW5kcyBoYXZlIHRoZSBjbG9leGVjIGZsYWcgc2V0OyB3cml0ZV9lbmQgd2lsbCBiZSA+PSAzLiIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotc3VicHJvY2Vzc19jbG9leGVjX3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCi17Ci0gICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzLCBzYXZlZF9lcnJubzsKLSAgICBsb25nIG9sZGZsYWdzOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKLSAgICB7Ci0jZW5kaWYKLSAgICAgICAgLyogV2UgaG9sZCB0aGUgR0lMIHdoaWNoIG9mZmVycyBzb21lIHByb3RlY3Rpb24gZnJvbSBvdGhlciBjb2RlIGNhbGxpbmcKLSAgICAgICAgICogZm9yaygpIGJlZm9yZSB0aGUgQ0xPRVhFQyBmbGFncyBoYXZlIGJlZW4gc2V0IGJ1dCB3ZSBjYW4ndCBndWFyYW50ZWUKLSAgICAgICAgICogYW55dGhpbmcgd2l0aG91dCBwaXBlMigpLiAqLwotICAgICAgICByZXMgPSBwaXBlKGZkcyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1swXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMF0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0KLSAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1sxXSwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVzID09IDApCi0gICAgICAgICAgICByZXMgPSBmY250bChmZHNbMV0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0jaWZkZWYgSEFWRV9QSVBFMgotICAgIH0KLSNlbmRpZgotICAgIGlmIChyZXMgPT0gMCAmJiBmZHNbMV0gPCAzKSB7Ci0gICAgICAgIC8qIFdlIGFsd2F5cyB3YW50IHRoZSB3cml0ZSBlbmQgb2YgdGhlIHBpcGUgdG8gYXZvaWQgZmRzIDAsIDEgYW5kIDIKLSAgICAgICAgICogYXMgb3VyIGNoaWxkIG1heSBjbGFpbSB0aG9zZSBmb3Igc3RkaW8gY29ubmVjdGlvbnMuICovCi0gICAgICAgIGludCB3cml0ZV9mZCA9IGZkc1sxXTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZVszXSA9IHstMSwgLTEsIC0xfTsKLSAgICAgICAgaW50IGZkc190b19jbG9zZV9pZHggPSAwOwotI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQwotICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeCsrXSA9IHdyaXRlX2ZkOwotICAgICAgICB3cml0ZV9mZCA9IGZjbnRsKHdyaXRlX2ZkLCBGX0RVUEZEX0NMT0VYRUMsIDMpOwotICAgICAgICBpZiAod3JpdGVfZmQgPCAwKSAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBGX0RVUEZEX0NMT0VYRUMgLyBvdGhlciBlcnJvciAqLwotI2VuZGlmCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIFVzZSBkdXAgYSBmZXcgdGltZXMgdW50aWwgd2UgZ2V0IGEgZGVzaXJhYmxlIGZkLiAqLwotICAgICAgICAgICAgZm9yICg7IGZkc190b19jbG9zZV9pZHggPCAzOyArK2Zkc190b19jbG9zZV9pZHgpIHsKLSAgICAgICAgICAgICAgICBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeF0gPSB3cml0ZV9mZDsKLSAgICAgICAgICAgICAgICB3cml0ZV9mZCA9IGR1cCh3cml0ZV9mZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHdyaXRlX2ZkID49IDMpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIC8qIFdlIG1heSBkdXAgYSBmZXcgZXh0cmEgdGltZXMgaWYgaXQgcmV0dXJucyBhbiBlcnJvciBidXQKLSAgICAgICAgICAgICAgICAgKiB0aGF0IGlzIG9rYXkuICBSZXBlYXQgY2FsbHMgc2hvdWxkIHJldHVybiB0aGUgc2FtZSBlcnJvci4gKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3cml0ZV9mZCA8IDApIHJlcyA9IHdyaXRlX2ZkOwotICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bCh3cml0ZV9mZCwgRl9HRVRGRCwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXMgPSBmY250bCh3cml0ZV9mZCwgRl9TRVRGRCwgb2xkZmxhZ3MgfCBGRF9DTE9FWEVDKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOwotICAgICAgICAvKiBDbG9zZSBmZHMgd2UgdHJpZWQgZm9yIHRoZSB3cml0ZSBlbmQgdGhhdCB3ZXJlIHRvbyBsb3cuICovCi0gICAgICAgIGZvciAoZmRzX3RvX2Nsb3NlX2lkeD0wOyBmZHNfdG9fY2xvc2VfaWR4IDwgMzsgKytmZHNfdG9fY2xvc2VfaWR4KSB7Ci0gICAgICAgICAgICBpbnQgdGVtcF9mZCA9IGZkc190b19jbG9zZVtmZHNfdG9fY2xvc2VfaWR4XTsKLSAgICAgICAgICAgIHdoaWxlICh0ZW1wX2ZkID49IDAgJiYgY2xvc2UodGVtcF9mZCkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKLSAgICAgICAgfQotICAgICAgICBlcnJubyA9IHNhdmVkX2Vycm5vOyAgLyogcmVwb3J0IGR1cCBvciBmY250bCBlcnJvcnMsIG5vdCBjbG9zZS4gKi8KLSAgICAgICAgZmRzWzFdID0gd3JpdGVfZmQ7Ci0gICAgfSAgLyogZW5kIGlmIHdyaXRlIGZkIHdhcyB0b28gc21hbGwgKi8KLQotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKLX0KLQogLyogbW9kdWxlIGxldmVsIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLApAQCAtODExLDcgKzczOCw2IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0gewogICAgIHsiZm9ya19leGVjIiwgc3VicHJvY2Vzc19mb3JrX2V4ZWMsIE1FVEhfVkFSQVJHUywgc3VicHJvY2Vzc19mb3JrX2V4ZWNfZG9jfSwKLSAgICB7ImNsb2V4ZWNfcGlwZSIsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlLCBNRVRIX05PQVJHUywgc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jfSwKICAgICB7TlVMTCwgTlVMTH0gIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCmluZGV4IDIxYTJiMDkuLjQzNzdlZTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCkBAIC0xNjgsOSArMTY4LDkgQEAKIC8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi8KIC8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWluaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHVuc2lnbmVkIGxvbmcga2V5X2xlbmd0aCkKK2luaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHNpemVfdCBrZXlfbGVuZ3RoKQogewotICAgIHVuc2lnbmVkIGludCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLworICAgIHNpemVfdCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLwogICAgIHVuc2lnbmVkIGxvbmcgKm10OwogCiAgICAgbXQgPSBzZWxmLT5zdGF0ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgIGsgPSAoTj5rZXlfbGVuZ3RoID8gTiA6IGtleV9sZW5ndGgpOwogICAgIGZvciAoOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTY2NDUyNVVMKSkKLSAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi8KKyAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArICh1bnNpZ25lZCBsb25nKWo7IC8qIG5vbiBsaW5lYXIgKi8KICAgICAgICAgbXRbaV0gJj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwogICAgICAgICBpKys7IGorKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIH0KICAgICBmb3IgKGs9Ti0xOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MVVMKSkKLSAgICAgICAgICAgICAgICAgLSBpOyAvKiBub24gbGluZWFyICovCisgICAgICAgICAgICAgICAgIC0gKHVuc2lnbmVkIGxvbmcpaTsgLyogbm9uIGxpbmVhciAqLwogICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCiAgICAgICAgIGkrKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTIwNywxNCArMjA3LDExIEBACiByYW5kb21fc2VlZChSYW5kb21PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOyAgICAgICAgICAgIC8qIGd1aWx0eSB1bnRpbCBwcm92ZWQgaW5ub2NlbnQgKi8KLSAgICBQeU9iamVjdCAqbWFza2xvd2VyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdGhpcnR5dHdvID0gTlVMTDsKICAgICBQeU9iamVjdCAqbiA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyAqbmV3X2tleSwgKmtleSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXltYXg7ICAgICAgICAgICAgICAgLyogIyBvZiBhbGxvY2F0ZWQgc2xvdHMgaW4ga2V5ICovCi0gICAgdW5zaWduZWQgbG9uZyBrZXl1c2VkOyAgICAgICAgICAgICAgLyogIyBvZiB1c2VkIHNsb3RzIGluIGtleSAqLwotICAgIGludCBlcnI7Ci0KKyAgICB1bnNpZ25lZCBsb25nICprZXkgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmtleV9hc19ieXRlcyA9IE5VTEw7CisgICAgc2l6ZV90IGJpdHMsIGtleXVzZWQsIGk7CisgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqYXJnID0gTlVMTDsKIAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNlZWQiLCAwLCAxLCAmYXJnKSkKQEAgLTI0Myw2OSArMjQwLDQ2IEBACiAgICAgaWYgKG4gPT0gTlVMTCkKICAgICAgICAgZ290byBEb25lOwogCi0gICAgLyogTm93IHNwbGl0IG4gaW50byAzMi1iaXQgY2h1bmtzLCBmcm9tIHRoZSByaWdodC4gIEVhY2ggcGllY2UgaXMKLSAgICAgKiBzdG9yZWQgaW50byBrZXksIHdoaWNoIGhhcyBhIGNhcGFjaXR5IG9mIGtleW1heCBjaHVua3MsIG9mIHdoaWNoCi0gICAgICoga2V5dXNlZCBhcmUgZmlsbGVkLiAgQWxhcywgdGhlIHJlcGVhdGVkIHNoaWZ0aW5nIG1ha2VzIHRoaXMgYQotICAgICAqIHF1YWRyYXRpYy10aW1lIGFsZ29yaXRobTsgd2UnZCByZWFsbHkgbGlrZSB0byB1c2UKLSAgICAgKiBfUHlMb25nX0FzQnl0ZUFycmF5IGhlcmUsIGJ1dCB0aGVuIHdlJ2QgaGF2ZSB0byBicmVhayBpbnRvIHRoZQotICAgICAqIGxvbmcgcmVwcmVzZW50YXRpb24gdG8gZmlndXJlIG91dCBob3cgYmlnIGFuIGFycmF5IHdhcyBuZWVkZWQKLSAgICAgKiBpbiBhZHZhbmNlLgotICAgICAqLwotICAgIGtleW1heCA9IDg7ICAgICAgICAgLyogYXJiaXRyYXJ5OyBncm93cyBsYXRlciBpZiBuZWVkZWQgKi8KLSAgICBrZXl1c2VkID0gMDsKLSAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhrZXltYXggKiBzaXplb2YoKmtleSkpOwotICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAvKiBOb3cgc3BsaXQgbiBpbnRvIDMyLWJpdCBjaHVua3MsIGZyb20gdGhlIHJpZ2h0LiAqLworICAgIGJpdHMgPSBfUHlMb25nX051bUJpdHMobik7CisgICAgaWYgKGJpdHMgPT0gKHNpemVfdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIERvbmU7CiAKLSAgICBtYXNrbG93ZXIgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygweGZmZmZmZmZmVSk7Ci0gICAgaWYgKG1hc2tsb3dlciA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgdGhpcnR5dHdvID0gUHlMb25nX0Zyb21Mb25nKDMyTCk7Ci0gICAgaWYgKHRoaXJ0eXR3byA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgd2hpbGUgKChlcnI9UHlPYmplY3RfSXNUcnVlKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqbmV3bjsKLSAgICAgICAgUHlPYmplY3QgKnB5Y2h1bms7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bms7CisgICAgLyogRmlndXJlIG91dCBob3cgbWFueSAzMi1iaXQgY2h1bmtzIHRoaXMgZ2l2ZXMgdXMuICovCisgICAga2V5dXNlZCA9IGJpdHMgPT0gMCA/IDEgOiAoYml0cyAtIDEpIC8gMzIgKyAxOwogCi0gICAgICAgIGlmIChlcnIgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHB5Y2h1bmsgPSBQeU51bWJlcl9BbmQobiwgbWFza2xvd2VyKTsKLSAgICAgICAgaWYgKHB5Y2h1bmsgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgY2h1bmsgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcocHljaHVuayk7Ci0gICAgICAgIFB5X0RFQ1JFRihweWNodW5rKTsKLSAgICAgICAgaWYgKGNodW5rID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIG5ld24gPSBQeU51bWJlcl9Sc2hpZnQobiwgdGhpcnR5dHdvKTsKLSAgICAgICAgaWYgKG5ld24gPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgUHlfREVDUkVGKG4pOwotICAgICAgICBuID0gbmV3bjsKLSAgICAgICAgaWYgKGtleXVzZWQgPj0ga2V5bWF4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJpZ2dlciA9IGtleW1heCA8PCAxOwotICAgICAgICAgICAgaWYgKChiaWdnZXIgPj4gMSkgIT0ga2V5bWF4IHx8Ci0gICAgICAgICAgICAgICAgYmlnZ2VyID4gUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoKmtleSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld19rZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX1JlYWxsb2Moa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnZ2VyICogc2l6ZW9mKCprZXkpKTsKLSAgICAgICAgICAgIGlmIChuZXdfa2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICAgICAga2V5ID0gbmV3X2tleTsKLSAgICAgICAgICAgIGtleW1heCA9IGJpZ2dlcjsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQoa2V5dXNlZCA8IGtleW1heCk7Ci0gICAgICAgIGtleVtrZXl1c2VkKytdID0gY2h1bms7CisgICAgLyogQ29udmVydCBzZWVkIHRvIGJ5dGUgc2VxdWVuY2UuICovCisgICAga2V5X2FzX2J5dGVzID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoKHNpemVfdCk0ICoga2V5dXNlZCk7CisgICAgaWYgKGtleV9hc19ieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9hc19ieXRlcywga2V5dXNlZCAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7IC8qIHVuc2lnbmVkICovCisgICAgaWYgKHJlcyA9PSAtMSkgeworICAgICAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisgICAgICAgIGdvdG8gRG9uZTsKICAgICB9CiAKLSAgICBpZiAoa2V5dXNlZCA9PSAwKQotICAgICAgICBrZXlba2V5dXNlZCsrXSA9IDBVTDsKKyAgICAvKiBGaWxsIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGZyb20gYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBrZXl1c2VkKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBrZXl1c2VkOyBpKyspIHsKKyAgICAgICAga2V5W2ldID0KKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMF0gPDwgMCkgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAxXSA8PCA4KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDJdIDw8IDE2KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDNdIDw8IDI0KTsKKyAgICB9CisgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOwogICAgIHJlc3VsdCA9IGluaXRfYnlfYXJyYXkoc2VsZiwga2V5LCBrZXl1c2VkKTsKIERvbmU6Ci0gICAgUHlfWERFQ1JFRihtYXNrbG93ZXIpOwotICAgIFB5X1hERUNSRUYodGhpcnR5dHdvKTsKICAgICBQeV9YREVDUkVGKG4pOwogICAgIFB5TWVtX0ZyZWUoa2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzg5LDYgKzM2Myw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChrIDw9IDMyKSAgLyogRmFzdCBwYXRoICovCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhnZW5yYW5kX2ludDMyKHNlbGYpID4+ICgzMiAtIGspKTsKKwogICAgIGJ5dGVzID0gKChrIC0gMSkgLyAzMiArIDEpICogNDsKICAgICBieXRlYXJyYXkgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhieXRlcyk7CiAgICAgaWYgKGJ5dGVhcnJheSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2NsZWFudXAucHkgYi9Nb2R1bGVzL19zaGEzL2NsZWFudXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWFiY2IwNAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMvY2xlYW51cC5weQpAQCAtMCwwICsxLDQ5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyICAgQ2hyaXN0aWFuIEhlaW1lcyAoY2hyaXN0aWFuQHB5dGhvbi5vcmcpCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyMKKyMgY2xlYW51cCBLZWNjYWsgc291cmNlcworCitpbXBvcnQgb3MKK2ltcG9ydCByZQorCitDUFAxID0gcmUuY29tcGlsZSgiXi8vKC4qKSIpCitDUFAyID0gcmUuY29tcGlsZSgiXCAvLyguKikiKQorCitTVEFUSUNTID0gKCJ2b2lkICIsICJpbnQgIiwgIkhhc2hSZXR1cm4gIiwgImNvbnN0IFVJTlQ2NCAiLCAiVUlOVDE2ICIpCisKK0hFUkUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKK0tFQ0NBSyA9IG9zLnBhdGguam9pbihIRVJFLCAia2VjY2FrIikKKworZGVmIGdldGZpbGVzKCk6CisgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihLRUNDQUspOgorICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKEtFQ0NBSywgbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobmFtZSk6CisgICAgICAgICAgICB5aWVsZCBuYW1lCisKK2RlZiBjbGVhbnVwKGYpOgorICAgIGJ1ZiA9IFtdCisgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgIyBtYXJrIGFsbCBmdW5jdGlvbnMgYW5kIGdsb2JhbCBkYXRhIGFzIHN0YXRpYworICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoU1RBVElDUyk6CisgICAgICAgICAgICBidWYuYXBwZW5kKCJzdGF0aWMgIiArIGxpbmUpCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAjIHJlbW92ZSBVSU5UNjQgdHlwZWRlZiwgd2UgaGF2ZSBvdXIgb3duCisgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgidHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50Iik6CisgICAgICAgICAgICBidWYuYXBwZW5kKCIvKiAlcyAqL1xuIiAlIGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgcmVtb3ZlICNpbmNsdWRlICJicmdfZW5kaWFuLmgiCisgICAgICAgIGlmICJicmdfZW5kaWFuLmgiIGluIGxpbmU6CisgICAgICAgICAgICBidWYuYXBwZW5kKCIvKiAlcyAqL1xuIiAlIGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICMgdHJhbnNmb3JtIEMrKyBjb21tZW50cyBpbnRvIEFOU0kgQyBjb21tZW50cworICAgICAgICBsaW5lID0gQ1BQMS5zdWIociIvKiBcMSAqLyIsIGxpbmUpCisgICAgICAgIGxpbmUgPSBDUFAyLnN1YihyIiAvKiBcMSAqLyIsIGxpbmUpCisgICAgICAgIGJ1Zi5hcHBlbmQobGluZSkKKyAgICByZXR1cm4gIiIuam9pbihidWYpCisKK2ZvciBuYW1lIGluIGdldGZpbGVzKCk6CisgICAgd2l0aCBvcGVuKG5hbWUpIGFzIGY6CisgICAgICAgIHJlcyA9IGNsZWFudXAoZikKKyAgICB3aXRoIG9wZW4obmFtZSwgInciKSBhcyBmOgorICAgICAgICBmLndyaXRlKHJlcykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLXJ2ay5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjOTAyOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1ydmsubWFjcm9zCkBAIC0wLDAgKzEsNTU1IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IFJvbm55IFZhbiBLZWVyLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKK3N0YXRpYyBjb25zdCBVSU5UMzIgS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyWzIqMjRdID0KK3sKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwODlVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwOGJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDgwODBVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDAwOGJVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwODJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwMGFVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwODJVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDgwMDNVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwOGJVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwOGFVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwODFVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwMDhVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4MDAwMDAwODNVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDgwMDNVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDAwODhVTCwKKyAgICAweDAwMDAwMDAxVUwsICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsICAgIDB4ODAwMDgwODJVTAorfTsKKworI3VuZGVmIHJvdW5kcworCisjZGVmaW5lIHJvdW5kcyBcCit7IFwKKyAgICBVSU5UMzIgRGEwLCBEZTAsIERpMCwgRG8wLCBEdTA7IFwKKyAgICBVSU5UMzIgRGExLCBEZTEsIERpMSwgRG8xLCBEdTE7IFwKKyAgICBVSU5UMzIgQmEsIEJlLCBCaSwgQm8sIEJ1OyBcCisgICAgVUlOVDMyIEFiYTAsIEFiZTAsIEFiaTAsIEFibzAsIEFidTA7IFwKKyAgICBVSU5UMzIgQWJhMSwgQWJlMSwgQWJpMSwgQWJvMSwgQWJ1MTsgXAorICAgIFVJTlQzMiBBZ2EwLCBBZ2UwLCBBZ2kwLCBBZ28wLCBBZ3UwOyBcCisgICAgVUlOVDMyIEFnYTEsIEFnZTEsIEFnaTEsIEFnbzEsIEFndTE7IFwKKyAgICBVSU5UMzIgQWthMCwgQWtlMCwgQWtpMCwgQWtvMCwgQWt1MDsgXAorICAgIFVJTlQzMiBBa2ExLCBBa2UxLCBBa2kxLCBBa28xLCBBa3UxOyBcCisgICAgVUlOVDMyIEFtYTAsIEFtZTAsIEFtaTAsIEFtbzAsIEFtdTA7IFwKKyAgICBVSU5UMzIgQW1hMSwgQW1lMSwgQW1pMSwgQW1vMSwgQW11MTsgXAorICAgIFVJTlQzMiBBc2EwLCBBc2UwLCBBc2kwLCBBc28wLCBBc3UwOyBcCisgICAgVUlOVDMyIEFzYTEsIEFzZTEsIEFzaTEsIEFzbzEsIEFzdTE7IFwKKyAgICBVSU5UMzIgQ3csIEN4LCBDeSwgQ3o7IFwKKyAgICBVSU5UMzIgRWJhMCwgRWJlMCwgRWJpMCwgRWJvMCwgRWJ1MDsgXAorICAgIFVJTlQzMiBFYmExLCBFYmUxLCBFYmkxLCBFYm8xLCBFYnUxOyBcCisgICAgVUlOVDMyIEVnYTAsIEVnZTAsIEVnaTAsIEVnbzAsIEVndTA7IFwKKyAgICBVSU5UMzIgRWdhMSwgRWdlMSwgRWdpMSwgRWdvMSwgRWd1MTsgXAorICAgIFVJTlQzMiBFa2EwLCBFa2UwLCBFa2kwLCBFa28wLCBFa3UwOyBcCisgICAgVUlOVDMyIEVrYTEsIEVrZTEsIEVraTEsIEVrbzEsIEVrdTE7IFwKKyAgICBVSU5UMzIgRW1hMCwgRW1lMCwgRW1pMCwgRW1vMCwgRW11MDsgXAorICAgIFVJTlQzMiBFbWExLCBFbWUxLCBFbWkxLCBFbW8xLCBFbXUxOyBcCisgICAgVUlOVDMyIEVzYTAsIEVzZTAsIEVzaTAsIEVzbzAsIEVzdTA7IFwKKyAgICBVSU5UMzIgRXNhMSwgRXNlMSwgRXNpMSwgRXNvMSwgRXN1MTsgXAorCWNvbnN0IFVJTlQzMiAqIHBSb3VuZENvbnN0YW50cyA9IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50MjsgXAorICAgIFVJTlQzMiBpOyBcCitcCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkgXAorXAorICAgIGZvciggaSA9IDEyOyBpICE9IDA7IC0taSApIHsgXAorCSAgICBDeCA9IEFidTBeQWd1MF5Ba3UwXkFtdTBeQXN1MDsgXAorCSAgICBEdTEgPSBBYmUxXkFnZTFeQWtlMV5BbWUxXkFzZTE7IFwKKwkgICAgRGEwID0gQ3heUk9MMzIoRHUxLCAxKTsgXAorCSAgICBDeiA9IEFidTFeQWd1MV5Ba3UxXkFtdTFeQXN1MTsgXAorCSAgICBEdTAgPSBBYmUwXkFnZTBeQWtlMF5BbWUwXkFzZTA7IFwKKwkgICAgRGExID0gQ3peRHUwOyBcCitcCisJICAgIEN3ID0gQWJpMF5BZ2kwXkFraTBeQW1pMF5Bc2kwOyBcCisJICAgIERvMCA9IEN3XlJPTDMyKEN6LCAxKTsgXAorCSAgICBDeSA9IEFiaTFeQWdpMV5Ba2kxXkFtaTFeQXNpMTsgXAorCSAgICBEbzEgPSBDeV5DeDsgXAorXAorCSAgICBDeCA9IEFiYTBeQWdhMF5Ba2EwXkFtYTBeQXNhMDsgXAorCSAgICBEZTAgPSBDeF5ST0wzMihDeSwgMSk7IFwKKwkgICAgQ3ogPSBBYmExXkFnYTFeQWthMV5BbWExXkFzYTE7IFwKKwkgICAgRGUxID0gQ3peQ3c7IFwKK1wKKwkgICAgQ3kgPSBBYm8xXkFnbzFeQWtvMV5BbW8xXkFzbzE7IFwKKwkgICAgRGkwID0gRHUwXlJPTDMyKEN5LCAxKTsgXAorCSAgICBDdyA9IEFibzBeQWdvMF5Ba28wXkFtbzBeQXNvMDsgXAorCSAgICBEaTEgPSBEdTFeQ3c7IFwKK1wKKwkgICAgRHUwID0gQ3deUk9MMzIoQ3osIDEpOyBcCisJICAgIER1MSA9IEN5XkN4OyBcCitcCisJICAgIEFiYTAgXj0gRGEwOyBcCisJICAgIEJhID0gQWJhMDsgXAorCSAgICBBZ2UwIF49IERlMDsgXAorCSAgICBCZSA9IFJPTDMyKEFnZTAsIDIyKTsgXAorCSAgICBBa2kxIF49IERpMTsgXAorCSAgICBCaSA9IFJPTDMyKEFraTEsIDIyKTsgXAorCSAgICBBbW8xIF49IERvMTsgXAorCSAgICBCbyA9IFJPTDMyKEFtbzEsIDExKTsgXAorCSAgICBBc3UwIF49IER1MDsgXAorCSAgICBCdSA9IFJPTDMyKEFzdTAsIDcpOyBcCisJICAgIEViYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApIF4gKihwUm91bmRDb25zdGFudHMrKyk7IFwKKwkgICAgRWJlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWJpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWJvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWJ1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJvMCBePSBEbzA7IFwKKwkgICAgQmEgPSBST0wzMihBYm8wLCAxNCk7IFwKKwkgICAgQWd1MCBePSBEdTA7IFwKKwkgICAgQmUgPSBST0wzMihBZ3UwLCAxMCk7IFwKKwkgICAgQWthMSBePSBEYTE7IFwKKwkgICAgQmkgPSBST0wzMihBa2ExLCAyKTsgXAorCSAgICBBbWUxIF49IERlMTsgXAorCSAgICBCbyA9IFJPTDMyKEFtZTEsIDIzKTsgXAorCSAgICBBc2kxIF49IERpMTsgXAorCSAgICBCdSA9IFJPTDMyKEFzaTEsIDMxKTsgXAorCSAgICBFZ2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFZ2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFZ2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFZ28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFZ3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmUxIF49IERlMTsgXAorCSAgICBCYSA9IFJPTDMyKEFiZTEsIDEpOyBcCisJICAgIEFnaTAgXj0gRGkwOyBcCisJICAgIEJlID0gUk9MMzIoQWdpMCwgMyk7IFwKKwkgICAgQWtvMSBePSBEbzE7IFwKKwkgICAgQmkgPSBST0wzMihBa28xLCAxMyk7IFwKKwkgICAgQW11MCBePSBEdTA7IFwKKwkgICAgQm8gPSBST0wzMihBbXUwLCA0KTsgXAorCSAgICBBc2EwIF49IERhMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzYTAsIDkpOyBcCisJICAgIEVrYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVrZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVraTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVrbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVrdTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFidTEgXj0gRHUxOyBcCisJICAgIEJhID0gUk9MMzIoQWJ1MSwgMTQpOyBcCisJICAgIEFnYTAgXj0gRGEwOyBcCisJICAgIEJlID0gUk9MMzIoQWdhMCwgMTgpOyBcCisJICAgIEFrZTAgXj0gRGUwOyBcCisJICAgIEJpID0gUk9MMzIoQWtlMCwgNSk7IFwKKwkgICAgQW1pMSBePSBEaTE7IFwKKwkgICAgQm8gPSBST0wzMihBbWkxLCA4KTsgXAorCSAgICBBc28wIF49IERvMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzbzAsIDI4KTsgXAorCSAgICBFbWEwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFbWUwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFbWkwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFbW8wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFbXUwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmkwIF49IERpMDsgXAorCSAgICBCYSA9IFJPTDMyKEFiaTAsIDMxKTsgXAorCSAgICBBZ28xIF49IERvMTsgXAorCSAgICBCZSA9IFJPTDMyKEFnbzEsIDI4KTsgXAorCSAgICBBa3UxIF49IER1MTsgXAorCSAgICBCaSA9IFJPTDMyKEFrdTEsIDIwKTsgXAorCSAgICBBbWExIF49IERhMTsgXAorCSAgICBCbyA9IFJPTDMyKEFtYTEsIDIxKTsgXAorCSAgICBBc2UwIF49IERlMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzZTAsIDEpOyBcCisJICAgIEVzYTAgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVzZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVzaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVzbzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVzdTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFiYTEgXj0gRGExOyBcCisJICAgIEJhID0gQWJhMTsgXAorCSAgICBBZ2UxIF49IERlMTsgXAorCSAgICBCZSA9IFJPTDMyKEFnZTEsIDIyKTsgXAorCSAgICBBa2kwIF49IERpMDsgXAorCSAgICBCaSA9IFJPTDMyKEFraTAsIDIxKTsgXAorCSAgICBBbW8wIF49IERvMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtbzAsIDEwKTsgXAorCSAgICBBc3UxIF49IER1MTsgXAorCSAgICBCdSA9IFJPTDMyKEFzdTEsIDcpOyBcCisJICAgIEViYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEViYTEgXj0gKihwUm91bmRDb25zdGFudHMrKyk7IFwKKwkgICAgRWJlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWJpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWJvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWJ1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJvMSBePSBEbzE7IFwKKwkgICAgQmEgPSBST0wzMihBYm8xLCAxNCk7IFwKKwkgICAgQWd1MSBePSBEdTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ3UxLCAxMCk7IFwKKwkgICAgQWthMCBePSBEYTA7IFwKKwkgICAgQmkgPSBST0wzMihBa2EwLCAxKTsgXAorCSAgICBBbWUwIF49IERlMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtZTAsIDIyKTsgXAorCSAgICBBc2kwIF49IERpMDsgXAorCSAgICBCdSA9IFJPTDMyKEFzaTAsIDMwKTsgXAorCSAgICBFZ2ExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBFZ2UxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBFZ2kxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBFZ28xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBFZ3UxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBBYmUwIF49IERlMDsgXAorCSAgICBCYSA9IEFiZTA7IFwKKwkgICAgQWdpMSBePSBEaTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ2kxLCAzKTsgXAorCSAgICBBa28wIF49IERvMDsgXAorCSAgICBCaSA9IFJPTDMyKEFrbzAsIDEyKTsgXAorCSAgICBBbXUxIF49IER1MTsgXAorCSAgICBCbyA9IFJPTDMyKEFtdTEsIDQpOyBcCisJICAgIEFzYTEgXj0gRGExOyBcCisJICAgIEJ1ID0gUk9MMzIoQXNhMSwgOSk7IFwKKwkgICAgRWthMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRWtlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRWtpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRWtvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRWt1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQWJ1MCBePSBEdTA7IFwKKwkgICAgQmEgPSBST0wzMihBYnUwLCAxMyk7IFwKKwkgICAgQWdhMSBePSBEYTE7IFwKKwkgICAgQmUgPSBST0wzMihBZ2ExLCAxOCk7IFwKKwkgICAgQWtlMSBePSBEZTE7IFwKKwkgICAgQmkgPSBST0wzMihBa2UxLCA1KTsgXAorCSAgICBBbWkwIF49IERpMDsgXAorCSAgICBCbyA9IFJPTDMyKEFtaTAsIDcpOyBcCisJICAgIEFzbzEgXj0gRG8xOyBcCisJICAgIEJ1ID0gUk9MMzIoQXNvMSwgMjgpOyBcCisJICAgIEVtYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEVtZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEVtaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEVtbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEVtdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEFiaTEgXj0gRGkxOyBcCisJICAgIEJhID0gUk9MMzIoQWJpMSwgMzEpOyBcCisJICAgIEFnbzAgXj0gRG8wOyBcCisJICAgIEJlID0gUk9MMzIoQWdvMCwgMjcpOyBcCisJICAgIEFrdTAgXj0gRHUwOyBcCisJICAgIEJpID0gUk9MMzIoQWt1MCwgMTkpOyBcCisJICAgIEFtYTAgXj0gRGEwOyBcCisJICAgIEJvID0gUk9MMzIoQW1hMCwgMjApOyBcCisJICAgIEFzZTEgXj0gRGUxOyBcCisJICAgIEJ1ID0gUk9MMzIoQXNlMSwgMSk7IFwKKwkgICAgRXNhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgRXNlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgRXNpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgRXNvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgRXN1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgQ3ggPSBFYnUwXkVndTBeRWt1MF5FbXUwXkVzdTA7IFwKKwkgICAgRHUxID0gRWJlMV5FZ2UxXkVrZTFeRW1lMV5Fc2UxOyBcCisJICAgIERhMCA9IEN4XlJPTDMyKER1MSwgMSk7IFwKKwkgICAgQ3ogPSBFYnUxXkVndTFeRWt1MV5FbXUxXkVzdTE7IFwKKwkgICAgRHUwID0gRWJlMF5FZ2UwXkVrZTBeRW1lMF5Fc2UwOyBcCisJICAgIERhMSA9IEN6XkR1MDsgXAorXAorCSAgICBDdyA9IEViaTBeRWdpMF5Fa2kwXkVtaTBeRXNpMDsgXAorCSAgICBEbzAgPSBDd15ST0wzMihDeiwgMSk7IFwKKwkgICAgQ3kgPSBFYmkxXkVnaTFeRWtpMV5FbWkxXkVzaTE7IFwKKwkgICAgRG8xID0gQ3leQ3g7IFwKK1wKKwkgICAgQ3ggPSBFYmEwXkVnYTBeRWthMF5FbWEwXkVzYTA7IFwKKwkgICAgRGUwID0gQ3heUk9MMzIoQ3ksIDEpOyBcCisJICAgIEN6ID0gRWJhMV5FZ2ExXkVrYTFeRW1hMV5Fc2ExOyBcCisJICAgIERlMSA9IEN6XkN3OyBcCitcCisJICAgIEN5ID0gRWJvMV5FZ28xXkVrbzFeRW1vMV5Fc28xOyBcCisJICAgIERpMCA9IER1MF5ST0wzMihDeSwgMSk7IFwKKwkgICAgQ3cgPSBFYm8wXkVnbzBeRWtvMF5FbW8wXkVzbzA7IFwKKwkgICAgRGkxID0gRHUxXkN3OyBcCitcCisJICAgIER1MCA9IEN3XlJPTDMyKEN6LCAxKTsgXAorCSAgICBEdTEgPSBDeV5DeDsgXAorXAorCSAgICBFYmEwIF49IERhMDsgXAorCSAgICBCYSA9IEViYTA7IFwKKwkgICAgRWdlMCBePSBEZTA7IFwKKwkgICAgQmUgPSBST0wzMihFZ2UwLCAyMik7IFwKKwkgICAgRWtpMSBePSBEaTE7IFwKKwkgICAgQmkgPSBST0wzMihFa2kxLCAyMik7IFwKKwkgICAgRW1vMSBePSBEbzE7IFwKKwkgICAgQm8gPSBST0wzMihFbW8xLCAxMSk7IFwKKwkgICAgRXN1MCBePSBEdTA7IFwKKwkgICAgQnUgPSBST0wzMihFc3UwLCA3KTsgXAorCSAgICBBYmEwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBYmEwIF49ICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEFiZTAgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFiaTAgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFibzAgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFidTAgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEVibzAgXj0gRG8wOyBcCisJICAgIEJhID0gUk9MMzIoRWJvMCwgMTQpOyBcCisJICAgIEVndTAgXj0gRHUwOyBcCisJICAgIEJlID0gUk9MMzIoRWd1MCwgMTApOyBcCisJICAgIEVrYTEgXj0gRGExOyBcCisJICAgIEJpID0gUk9MMzIoRWthMSwgMik7IFwKKwkgICAgRW1lMSBePSBEZTE7IFwKKwkgICAgQm8gPSBST0wzMihFbWUxLCAyMyk7IFwKKwkgICAgRXNpMSBePSBEaTE7IFwKKwkgICAgQnUgPSBST0wzMihFc2kxLCAzMSk7IFwKKwkgICAgQWdhMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWdlMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQWdpMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQWdvMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQWd1MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJlMSBePSBEZTE7IFwKKwkgICAgQmEgPSBST0wzMihFYmUxLCAxKTsgXAorCSAgICBFZ2kwIF49IERpMDsgXAorCSAgICBCZSA9IFJPTDMyKEVnaTAsIDMpOyBcCisJICAgIEVrbzEgXj0gRG8xOyBcCisJICAgIEJpID0gUk9MMzIoRWtvMSwgMTMpOyBcCisJICAgIEVtdTAgXj0gRHUwOyBcCisJICAgIEJvID0gUk9MMzIoRW11MCwgNCk7IFwKKwkgICAgRXNhMCBePSBEYTA7IFwKKwkgICAgQnUgPSBST0wzMihFc2EwLCA5KTsgXAorCSAgICBBa2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBa2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBa2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBa28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBa3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYnUxIF49IER1MTsgXAorCSAgICBCYSA9IFJPTDMyKEVidTEsIDE0KTsgXAorCSAgICBFZ2EwIF49IERhMDsgXAorCSAgICBCZSA9IFJPTDMyKEVnYTAsIDE4KTsgXAorCSAgICBFa2UwIF49IERlMDsgXAorCSAgICBCaSA9IFJPTDMyKEVrZTAsIDUpOyBcCisJICAgIEVtaTEgXj0gRGkxOyBcCisJICAgIEJvID0gUk9MMzIoRW1pMSwgOCk7IFwKKwkgICAgRXNvMCBePSBEbzA7IFwKKwkgICAgQnUgPSBST0wzMihFc28wLCAyOCk7IFwKKwkgICAgQW1hMCA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQW1lMCA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQW1pMCA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQW1vMCA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQW11MCA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJpMCBePSBEaTA7IFwKKwkgICAgQmEgPSBST0wzMihFYmkwLCAzMSk7IFwKKwkgICAgRWdvMSBePSBEbzE7IFwKKwkgICAgQmUgPSBST0wzMihFZ28xLCAyOCk7IFwKKwkgICAgRWt1MSBePSBEdTE7IFwKKwkgICAgQmkgPSBST0wzMihFa3UxLCAyMCk7IFwKKwkgICAgRW1hMSBePSBEYTE7IFwKKwkgICAgQm8gPSBST0wzMihFbWExLCAyMSk7IFwKKwkgICAgRXNlMCBePSBEZTA7IFwKKwkgICAgQnUgPSBST0wzMihFc2UwLCAxKTsgXAorCSAgICBBc2EwID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBc2UwID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBc2kwID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBc28wID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBc3UwID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYmExIF49IERhMTsgXAorCSAgICBCYSA9IEViYTE7IFwKKwkgICAgRWdlMSBePSBEZTE7IFwKKwkgICAgQmUgPSBST0wzMihFZ2UxLCAyMik7IFwKKwkgICAgRWtpMCBePSBEaTA7IFwKKwkgICAgQmkgPSBST0wzMihFa2kwLCAyMSk7IFwKKwkgICAgRW1vMCBePSBEbzA7IFwKKwkgICAgQm8gPSBST0wzMihFbW8wLCAxMCk7IFwKKwkgICAgRXN1MSBePSBEdTE7IFwKKwkgICAgQnUgPSBST0wzMihFc3UxLCA3KTsgXAorCSAgICBBYmExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBYmExIF49ICoocFJvdW5kQ29uc3RhbnRzKyspOyBcCisJICAgIEFiZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFiaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFibzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFidTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEVibzEgXj0gRG8xOyBcCisJICAgIEJhID0gUk9MMzIoRWJvMSwgMTQpOyBcCisJICAgIEVndTEgXj0gRHUxOyBcCisJICAgIEJlID0gUk9MMzIoRWd1MSwgMTApOyBcCisJICAgIEVrYTAgXj0gRGEwOyBcCisJICAgIEJpID0gUk9MMzIoRWthMCwgMSk7IFwKKwkgICAgRW1lMCBePSBEZTA7IFwKKwkgICAgQm8gPSBST0wzMihFbWUwLCAyMik7IFwKKwkgICAgRXNpMCBePSBEaTA7IFwKKwkgICAgQnUgPSBST0wzMihFc2kwLCAzMCk7IFwKKwkgICAgQWdhMSA9ICAgQmEgXigofkJlKSYgIEJpICk7IFwKKwkgICAgQWdlMSA9ICAgQmUgXigofkJpKSYgIEJvICk7IFwKKwkgICAgQWdpMSA9ICAgQmkgXigofkJvKSYgIEJ1ICk7IFwKKwkgICAgQWdvMSA9ICAgQm8gXigofkJ1KSYgIEJhICk7IFwKKwkgICAgQWd1MSA9ICAgQnUgXigofkJhKSYgIEJlICk7IFwKK1wKKwkgICAgRWJlMCBePSBEZTA7IFwKKwkgICAgQmEgPSBFYmUwOyBcCisJICAgIEVnaTEgXj0gRGkxOyBcCisJICAgIEJlID0gUk9MMzIoRWdpMSwgMyk7IFwKKwkgICAgRWtvMCBePSBEbzA7IFwKKwkgICAgQmkgPSBST0wzMihFa28wLCAxMik7IFwKKwkgICAgRW11MSBePSBEdTE7IFwKKwkgICAgQm8gPSBST0wzMihFbXUxLCA0KTsgXAorCSAgICBFc2ExIF49IERhMTsgXAorCSAgICBCdSA9IFJPTDMyKEVzYTEsIDkpOyBcCisJICAgIEFrYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFrZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFraTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFrbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFrdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCitcCisJICAgIEVidTAgXj0gRHUwOyBcCisJICAgIEJhID0gUk9MMzIoRWJ1MCwgMTMpOyBcCisJICAgIEVnYTEgXj0gRGExOyBcCisJICAgIEJlID0gUk9MMzIoRWdhMSwgMTgpOyBcCisJICAgIEVrZTEgXj0gRGUxOyBcCisJICAgIEJpID0gUk9MMzIoRWtlMSwgNSk7IFwKKwkgICAgRW1pMCBePSBEaTA7IFwKKwkgICAgQm8gPSBST0wzMihFbWkwLCA3KTsgXAorCSAgICBFc28xIF49IERvMTsgXAorCSAgICBCdSA9IFJPTDMyKEVzbzEsIDI4KTsgXAorCSAgICBBbWExID0gICBCYSBeKCh+QmUpJiAgQmkgKTsgXAorCSAgICBBbWUxID0gICBCZSBeKCh+QmkpJiAgQm8gKTsgXAorCSAgICBBbWkxID0gICBCaSBeKCh+Qm8pJiAgQnUgKTsgXAorCSAgICBBbW8xID0gICBCbyBeKCh+QnUpJiAgQmEgKTsgXAorCSAgICBBbXUxID0gICBCdSBeKCh+QmEpJiAgQmUgKTsgXAorXAorCSAgICBFYmkxIF49IERpMTsgXAorCSAgICBCYSA9IFJPTDMyKEViaTEsIDMxKTsgXAorCSAgICBFZ28wIF49IERvMDsgXAorCSAgICBCZSA9IFJPTDMyKEVnbzAsIDI3KTsgXAorCSAgICBFa3UwIF49IER1MDsgXAorCSAgICBCaSA9IFJPTDMyKEVrdTAsIDE5KTsgXAorCSAgICBFbWEwIF49IERhMDsgXAorCSAgICBCbyA9IFJPTDMyKEVtYTAsIDIwKTsgXAorCSAgICBFc2UxIF49IERlMTsgXAorCSAgICBCdSA9IFJPTDMyKEVzZTEsIDEpOyBcCisJICAgIEFzYTEgPSAgIEJhIF4oKH5CZSkmICBCaSApOyBcCisJICAgIEFzZTEgPSAgIEJlIF4oKH5CaSkmICBCbyApOyBcCisJICAgIEFzaTEgPSAgIEJpIF4oKH5CbykmICBCdSApOyBcCisJICAgIEFzbzEgPSAgIEJvIF4oKH5CdSkmICBCYSApOyBcCisJICAgIEFzdTEgPSAgIEJ1IF4oKH5CYSkmICBCZSApOyBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpIFwKK30KKworI2RlZmluZSBjb3B5RnJvbVN0YXRlKFgsIHN0YXRlKSBcCisgICAgWCMjYmEwID0gc3RhdGVbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdOyBcCisgICAgWCMjYmUwID0gc3RhdGVbIDJdOyBcCisgICAgWCMjYmUxID0gc3RhdGVbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdOyBcCisgICAgWCMjYmkxID0gc3RhdGVbIDVdOyBcCisgICAgWCMjYm8wID0gc3RhdGVbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddOyBcCisgICAgWCMjYnUwID0gc3RhdGVbIDhdOyBcCisgICAgWCMjYnUxID0gc3RhdGVbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdOyBcCisgICAgWCMjZ2ExID0gc3RhdGVbMTFdOyBcCisgICAgWCMjZ2UwID0gc3RhdGVbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdOyBcCisgICAgWCMjZ2kwID0gc3RhdGVbMTRdOyBcCisgICAgWCMjZ2kxID0gc3RhdGVbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdOyBcCisgICAgWCMjZ28xID0gc3RhdGVbMTddOyBcCisgICAgWCMjZ3UwID0gc3RhdGVbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldOyBcCisgICAgWCMja2EwID0gc3RhdGVbMjBdOyBcCisgICAgWCMja2ExID0gc3RhdGVbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdOyBcCisgICAgWCMja2UxID0gc3RhdGVbMjNdOyBcCisgICAgWCMja2kwID0gc3RhdGVbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdOyBcCisgICAgWCMja28wID0gc3RhdGVbMjZdOyBcCisgICAgWCMja28xID0gc3RhdGVbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdOyBcCisgICAgWCMja3UxID0gc3RhdGVbMjldOyBcCisgICAgWCMjbWEwID0gc3RhdGVbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdOyBcCisgICAgWCMjbWUwID0gc3RhdGVbMzJdOyBcCisgICAgWCMjbWUxID0gc3RhdGVbMzNdOyBcCisgICAgWCMjbWkwID0gc3RhdGVbMzRdOyBcCisgICAgWCMjbWkxID0gc3RhdGVbMzVdOyBcCisgICAgWCMjbW8wID0gc3RhdGVbMzZdOyBcCisgICAgWCMjbW8xID0gc3RhdGVbMzddOyBcCisgICAgWCMjbXUwID0gc3RhdGVbMzhdOyBcCisgICAgWCMjbXUxID0gc3RhdGVbMzldOyBcCisgICAgWCMjc2EwID0gc3RhdGVbNDBdOyBcCisgICAgWCMjc2ExID0gc3RhdGVbNDFdOyBcCisgICAgWCMjc2UwID0gc3RhdGVbNDJdOyBcCisgICAgWCMjc2UxID0gc3RhdGVbNDNdOyBcCisgICAgWCMjc2kwID0gc3RhdGVbNDRdOyBcCisgICAgWCMjc2kxID0gc3RhdGVbNDVdOyBcCisgICAgWCMjc28wID0gc3RhdGVbNDZdOyBcCisgICAgWCMjc28xID0gc3RhdGVbNDddOyBcCisgICAgWCMjc3UwID0gc3RhdGVbNDhdOyBcCisgICAgWCMjc3UxID0gc3RhdGVbNDldOyBcCisKKyNkZWZpbmUgY29weVRvU3RhdGUoc3RhdGUsIFgpIFwKKyAgICBzdGF0ZVsgMF0gPSBYIyNiYTA7IFwKKyAgICBzdGF0ZVsgMV0gPSBYIyNiYTE7IFwKKyAgICBzdGF0ZVsgMl0gPSBYIyNiZTA7IFwKKyAgICBzdGF0ZVsgM10gPSBYIyNiZTE7IFwKKyAgICBzdGF0ZVsgNF0gPSBYIyNiaTA7IFwKKyAgICBzdGF0ZVsgNV0gPSBYIyNiaTE7IFwKKyAgICBzdGF0ZVsgNl0gPSBYIyNibzA7IFwKKyAgICBzdGF0ZVsgN10gPSBYIyNibzE7IFwKKyAgICBzdGF0ZVsgOF0gPSBYIyNidTA7IFwKKyAgICBzdGF0ZVsgOV0gPSBYIyNidTE7IFwKKyAgICBzdGF0ZVsxMF0gPSBYIyNnYTA7IFwKKyAgICBzdGF0ZVsxMV0gPSBYIyNnYTE7IFwKKyAgICBzdGF0ZVsxMl0gPSBYIyNnZTA7IFwKKyAgICBzdGF0ZVsxM10gPSBYIyNnZTE7IFwKKyAgICBzdGF0ZVsxNF0gPSBYIyNnaTA7IFwKKyAgICBzdGF0ZVsxNV0gPSBYIyNnaTE7IFwKKyAgICBzdGF0ZVsxNl0gPSBYIyNnbzA7IFwKKyAgICBzdGF0ZVsxN10gPSBYIyNnbzE7IFwKKyAgICBzdGF0ZVsxOF0gPSBYIyNndTA7IFwKKyAgICBzdGF0ZVsxOV0gPSBYIyNndTE7IFwKKyAgICBzdGF0ZVsyMF0gPSBYIyNrYTA7IFwKKyAgICBzdGF0ZVsyMV0gPSBYIyNrYTE7IFwKKyAgICBzdGF0ZVsyMl0gPSBYIyNrZTA7IFwKKyAgICBzdGF0ZVsyM10gPSBYIyNrZTE7IFwKKyAgICBzdGF0ZVsyNF0gPSBYIyNraTA7IFwKKyAgICBzdGF0ZVsyNV0gPSBYIyNraTE7IFwKKyAgICBzdGF0ZVsyNl0gPSBYIyNrbzA7IFwKKyAgICBzdGF0ZVsyN10gPSBYIyNrbzE7IFwKKyAgICBzdGF0ZVsyOF0gPSBYIyNrdTA7IFwKKyAgICBzdGF0ZVsyOV0gPSBYIyNrdTE7IFwKKyAgICBzdGF0ZVszMF0gPSBYIyNtYTA7IFwKKyAgICBzdGF0ZVszMV0gPSBYIyNtYTE7IFwKKyAgICBzdGF0ZVszMl0gPSBYIyNtZTA7IFwKKyAgICBzdGF0ZVszM10gPSBYIyNtZTE7IFwKKyAgICBzdGF0ZVszNF0gPSBYIyNtaTA7IFwKKyAgICBzdGF0ZVszNV0gPSBYIyNtaTE7IFwKKyAgICBzdGF0ZVszNl0gPSBYIyNtbzA7IFwKKyAgICBzdGF0ZVszN10gPSBYIyNtbzE7IFwKKyAgICBzdGF0ZVszOF0gPSBYIyNtdTA7IFwKKyAgICBzdGF0ZVszOV0gPSBYIyNtdTE7IFwKKyAgICBzdGF0ZVs0MF0gPSBYIyNzYTA7IFwKKyAgICBzdGF0ZVs0MV0gPSBYIyNzYTE7IFwKKyAgICBzdGF0ZVs0Ml0gPSBYIyNzZTA7IFwKKyAgICBzdGF0ZVs0M10gPSBYIyNzZTE7IFwKKyAgICBzdGF0ZVs0NF0gPSBYIyNzaTA7IFwKKyAgICBzdGF0ZVs0NV0gPSBYIyNzaTE7IFwKKyAgICBzdGF0ZVs0Nl0gPSBYIyNzbzA7IFwKKyAgICBzdGF0ZVs0N10gPSBYIyNzbzE7IFwKKyAgICBzdGF0ZVs0OF0gPSBYIyNzdTA7IFwKKyAgICBzdGF0ZVs0OV0gPSBYIyNzdTE7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLXMxLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczZDYxZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MKQEAgLTAsMCArMSwxMTg3IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFVJTlQzMiBBYmEwLCBBYmUwLCBBYmkwLCBBYm8wLCBBYnUwOyBcCisgICAgVUlOVDMyIEFiYTEsIEFiZTEsIEFiaTEsIEFibzEsIEFidTE7IFwKKyAgICBVSU5UMzIgQWdhMCwgQWdlMCwgQWdpMCwgQWdvMCwgQWd1MDsgXAorICAgIFVJTlQzMiBBZ2ExLCBBZ2UxLCBBZ2kxLCBBZ28xLCBBZ3UxOyBcCisgICAgVUlOVDMyIEFrYTAsIEFrZTAsIEFraTAsIEFrbzAsIEFrdTA7IFwKKyAgICBVSU5UMzIgQWthMSwgQWtlMSwgQWtpMSwgQWtvMSwgQWt1MTsgXAorICAgIFVJTlQzMiBBbWEwLCBBbWUwLCBBbWkwLCBBbW8wLCBBbXUwOyBcCisgICAgVUlOVDMyIEFtYTEsIEFtZTEsIEFtaTEsIEFtbzEsIEFtdTE7IFwKKyAgICBVSU5UMzIgQXNhMCwgQXNlMCwgQXNpMCwgQXNvMCwgQXN1MDsgXAorICAgIFVJTlQzMiBBc2ExLCBBc2UxLCBBc2kxLCBBc28xLCBBc3UxOyBcCisgICAgVUlOVDMyIEJiYTAsIEJiZTAsIEJiaTAsIEJibzAsIEJidTA7IFwKKyAgICBVSU5UMzIgQmJhMSwgQmJlMSwgQmJpMSwgQmJvMSwgQmJ1MTsgXAorICAgIFVJTlQzMiBCZ2EwLCBCZ2UwLCBCZ2kwLCBCZ28wLCBCZ3UwOyBcCisgICAgVUlOVDMyIEJnYTEsIEJnZTEsIEJnaTEsIEJnbzEsIEJndTE7IFwKKyAgICBVSU5UMzIgQmthMCwgQmtlMCwgQmtpMCwgQmtvMCwgQmt1MDsgXAorICAgIFVJTlQzMiBCa2ExLCBCa2UxLCBCa2kxLCBCa28xLCBCa3UxOyBcCisgICAgVUlOVDMyIEJtYTAsIEJtZTAsIEJtaTAsIEJtbzAsIEJtdTA7IFwKKyAgICBVSU5UMzIgQm1hMSwgQm1lMSwgQm1pMSwgQm1vMSwgQm11MTsgXAorICAgIFVJTlQzMiBCc2EwLCBCc2UwLCBCc2kwLCBCc28wLCBCc3UwOyBcCisgICAgVUlOVDMyIEJzYTEsIEJzZTEsIEJzaTEsIEJzbzEsIEJzdTE7IFwKKyAgICBVSU5UMzIgQ2EwLCBDZTAsIENpMCwgQ28wLCBDdTA7IFwKKyAgICBVSU5UMzIgQ2ExLCBDZTEsIENpMSwgQ28xLCBDdTE7IFwKKyAgICBVSU5UMzIgRGEwLCBEZTAsIERpMCwgRG8wLCBEdTA7IFwKKyAgICBVSU5UMzIgRGExLCBEZTEsIERpMSwgRG8xLCBEdTE7IFwKKyAgICBVSU5UMzIgRWJhMCwgRWJlMCwgRWJpMCwgRWJvMCwgRWJ1MDsgXAorICAgIFVJTlQzMiBFYmExLCBFYmUxLCBFYmkxLCBFYm8xLCBFYnUxOyBcCisgICAgVUlOVDMyIEVnYTAsIEVnZTAsIEVnaTAsIEVnbzAsIEVndTA7IFwKKyAgICBVSU5UMzIgRWdhMSwgRWdlMSwgRWdpMSwgRWdvMSwgRWd1MTsgXAorICAgIFVJTlQzMiBFa2EwLCBFa2UwLCBFa2kwLCBFa28wLCBFa3UwOyBcCisgICAgVUlOVDMyIEVrYTEsIEVrZTEsIEVraTEsIEVrbzEsIEVrdTE7IFwKKyAgICBVSU5UMzIgRW1hMCwgRW1lMCwgRW1pMCwgRW1vMCwgRW11MDsgXAorICAgIFVJTlQzMiBFbWExLCBFbWUxLCBFbWkxLCBFbW8xLCBFbXUxOyBcCisgICAgVUlOVDMyIEVzYTAsIEVzZTAsIEVzaTAsIEVzbzAsIEVzdTA7IFwKKyAgICBVSU5UMzIgRXNhMSwgRXNlMSwgRXNpMSwgRXNvMSwgRXN1MTsgXAorCisjZGVmaW5lIHByZXBhcmVUaGV0YSBcCisgICAgQ2EwID0gQWJhMF5BZ2EwXkFrYTBeQW1hMF5Bc2EwOyBcCisgICAgQ2ExID0gQWJhMV5BZ2ExXkFrYTFeQW1hMV5Bc2ExOyBcCisgICAgQ2UwID0gQWJlMF5BZ2UwXkFrZTBeQW1lMF5Bc2UwOyBcCisgICAgQ2UxID0gQWJlMV5BZ2UxXkFrZTFeQW1lMV5Bc2UxOyBcCisgICAgQ2kwID0gQWJpMF5BZ2kwXkFraTBeQW1pMF5Bc2kwOyBcCisgICAgQ2kxID0gQWJpMV5BZ2kxXkFraTFeQW1pMV5Bc2kxOyBcCisgICAgQ28wID0gQWJvMF5BZ28wXkFrbzBeQW1vMF5Bc28wOyBcCisgICAgQ28xID0gQWJvMV5BZ28xXkFrbzFeQW1vMV5Bc28xOyBcCisgICAgQ3UwID0gQWJ1MF5BZ3UwXkFrdTBeQW11MF5Bc3UwOyBcCisgICAgQ3UxID0gQWJ1MV5BZ3UxXkFrdTFeQW11MV5Bc3UxOyBcCisKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oICBCYmUwIHwgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCAgQmJlMSB8ICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCAgQmdlMCB8ICBCZ2kwICk7IFwKKyAgICBDYTAgXj0gRSMjZ2EwOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oICBCZ2kwICYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oICBCZ2EwICYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oICBCZ2UxIHwgIEJnaTEgKTsgXAorICAgIENhMSBePSBFIyNnYTE7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXiggIEJnaTEgJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCAgQmdvMSB8KH5CZ3UxKSk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXiggIEJrZTAgfCAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAofkJrbzApXiggIEJrdTAgfCAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXiggIEJraTEgJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXiggIEJrYTEgJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oICBCbWkwIHwgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApfCAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXiggIEJtZTEgJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAofkJtbzEpXiggIEJtdTEgJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgRSMjc2UwID0gKH5Cc2UwKV4oICBCc2kwIHwgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oICBCc2EwICYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCAgQnNvMSAmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gdXNpbmcgZmFjdG9yIDIgaW50ZXJsZWF2aW5nLCA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDMyLWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSBcCisgICAgRGEwID0gQ3UwXlJPTDMyKENlMSwgMSk7IFwKKyAgICBEYTEgPSBDdTFeQ2UwOyBcCisgICAgRGUwID0gQ2EwXlJPTDMyKENpMSwgMSk7IFwKKyAgICBEZTEgPSBDYTFeQ2kwOyBcCisgICAgRGkwID0gQ2UwXlJPTDMyKENvMSwgMSk7IFwKKyAgICBEaTEgPSBDZTFeQ28wOyBcCisgICAgRG8wID0gQ2kwXlJPTDMyKEN1MSwgMSk7IFwKKyAgICBEbzEgPSBDaTFeQ3UwOyBcCisgICAgRHUwID0gQ28wXlJPTDMyKENhMSwgMSk7IFwKKyAgICBEdTEgPSBDbzFeQ2EwOyBcCitcCisgICAgQSMjYmEwIF49IERhMDsgXAorICAgIEJiYTAgPSBBIyNiYTA7IFwKKyAgICBBIyNnZTAgXj0gRGUwOyBcCisgICAgQmJlMCA9IFJPTDMyKEEjI2dlMCwgMjIpOyBcCisgICAgQSMja2kxIF49IERpMTsgXAorICAgIEJiaTAgPSBST0wzMihBIyNraTEsIDIyKTsgXAorICAgIEEjI21vMSBePSBEbzE7IFwKKyAgICBCYm8wID0gUk9MMzIoQSMjbW8xLCAxMSk7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXiggIEJiZTAgfCAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgRSMjYmUwID0gICBCYmUwIF4oKH5CYmkwKXwgIEJibzAgKTsgXAorICAgIEUjI2JpMCA9ICAgQmJpMCBeKCAgQmJvMCAmICBCYnUwICk7IFwKKyAgICBFIyNibzAgPSAgIEJibzAgXiggIEJidTAgfCAgQmJhMCApOyBcCisgICAgRSMjYnUwID0gICBCYnUwIF4oICBCYmEwICYgIEJiZTAgKTsgXAorXAorICAgIEEjI2JhMSBePSBEYTE7IFwKKyAgICBCYmExID0gQSMjYmExOyBcCisgICAgQSMjZ2UxIF49IERlMTsgXAorICAgIEJiZTEgPSBST0wzMihBIyNnZTEsIDIyKTsgXAorICAgIEEjI2tpMCBePSBEaTA7IFwKKyAgICBCYmkxID0gUk9MMzIoQSMja2kwLCAyMSk7IFwKKyAgICBBIyNtbzAgXj0gRG8wOyBcCisgICAgQmJvMSA9IFJPTDMyKEEjI21vMCwgMTApOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oICBCYmUxIHwgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIEUjI2JlMSA9ICAgQmJlMSBeKCh+QmJpMSl8ICBCYm8xICk7IFwKKyAgICBFIyNiaTEgPSAgIEJiaTEgXiggIEJibzEgJiAgQmJ1MSApOyBcCisgICAgRSMjYm8xID0gICBCYm8xIF4oICBCYnUxIHwgIEJiYTEgKTsgXAorICAgIEUjI2J1MSA9ICAgQmJ1MSBeKCAgQmJhMSAmICBCYmUxICk7IFwKK1wKKyAgICBBIyNibzAgXj0gRG8wOyBcCisgICAgQmdhMCA9IFJPTDMyKEEjI2JvMCwgMTQpOyBcCisgICAgQSMjZ3UwIF49IER1MDsgXAorICAgIEJnZTAgPSBST0wzMihBIyNndTAsIDEwKTsgXAorICAgIEEjI2thMSBePSBEYTE7IFwKKyAgICBCZ2kwID0gUk9MMzIoQSMja2ExLCAyKTsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2EwID0gICBCZ2EwIF4oICBCZ2UwIHwgIEJnaTAgKTsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCAgQmdpMCAmICBCZ28wICk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgRSMjZ28wID0gICBCZ28wIF4oICBCZ3UwIHwgIEJnYTAgKTsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oICBCZ2UxIHwgIEJnaTEgKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCAgQmdpMSAmICBCZ28xICk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIEUjI2d1MSA9ICAgQmd1MSBeKCAgQmdhMSAmICBCZ2UxICk7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgQSMjbXUwIF49IER1MDsgXAorICAgIEJrbzAgPSBST0wzMihBIyNtdTAsIDQpOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBFIyNraTAgPSAgIEJraTAgXigofkJrbzApJiAgQmt1MCApOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKK1wKKyAgICBBIyNiZTAgXj0gRGUwOyBcCisgICAgQmthMSA9IEEjI2JlMDsgXAorICAgIEEjI2dpMSBePSBEaTE7IFwKKyAgICBCa2UxID0gUk9MMzIoQSMjZ2kxLCAzKTsgXAorICAgIEEjI2tvMCBePSBEbzA7IFwKKyAgICBCa2kxID0gUk9MMzIoQSMja28wLCAxMik7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNrYTEgPSAgIEJrYTEgXiggIEJrZTEgfCAgQmtpMSApOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBFIyNrbzEgPSAofkJrbzEpXiggIEJrdTEgfCAgQmthMSApOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCAgQm1lMCAmICBCbWkwICk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXiggIEJtaTAgfCAgQm1vMCApOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBFIyNtdTAgPSAgIEJtdTAgXiggIEJtYTAgfCAgQm1lMCApOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBBIyNtaTAgXj0gRGkwOyBcCisgICAgQm1vMSA9IFJPTDMyKEEjI21pMCwgNyk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oICBCbWUxICYgIEJtaTEgKTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCAgQm1pMSB8ICBCbW8xICk7IFwKKyAgICBFIyNtaTEgPSAgIEJtaTEgXigofkJtbzEpfCAgQm11MSApOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKK1wKKyAgICBBIyNiaTAgXj0gRGkwOyBcCisgICAgQnNhMCA9IFJPTDMyKEEjI2JpMCwgMzEpOyBcCisgICAgQSMjZ28xIF49IERvMTsgXAorICAgIEJzZTAgPSBST0wzMihBIyNnbzEsIDI4KTsgXAorICAgIEEjI2t1MSBePSBEdTE7IFwKKyAgICBCc2kwID0gUk9MMzIoQSMja3UxLCAyMCk7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgRSMjc28wID0gICBCc28wIF4oICBCc3UwIHwgIEJzYTAgKTsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIEUjI3NlMSA9ICh+QnNlMSleKCAgQnNpMSB8ICBCc28xICk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIEUjI3N1MSA9ICAgQnN1MSBeKCAgQnNhMSAmICBCc2UxICk7IFwKK1wKKworI2Vsc2UgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIENhMCA9IEUjI2JhMDsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBDYTEgPSBFIyNiYTE7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCh+QmdlMCkmICBCZ2kwICk7IFwKKyAgICBDYTAgXj0gRSMjZ2EwOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oKH5CZ2kwKSYgIEJnbzAgKTsgXAorICAgIENlMCBePSBFIyNnZTA7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXigofkJnbzApJiAgQmd1MCApOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEEjI21lMCBePSBEZTA7IFwKKyAgICBCZ28xID0gUk9MMzIoQSMjbWUwLCAyMik7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2ExID0gICBCZ2ExIF4oKH5CZ2UxKSYgIEJnaTEgKTsgXAorICAgIENhMSBePSBFIyNnYTE7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgQ2UxIF49IEUjI2dlMTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oKH5CZ3UxKSYgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCh+QmtpMCkmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCh+QmthMCkmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgQSMjbWkxIF49IERpMTsgXAorICAgIEJtbzAgPSBST0wzMihBIyNtaTEsIDgpOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCh+Qm1lMCkmICBCbWkwICk7IFwKKyAgICBDYTAgXj0gRSMjbWEwOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIENlMCBePSBFIyNtZTA7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICAgQm1vMCBeKCh+Qm11MCkmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXigofkJtZTEpJiAgQm1pMSApOyBcCisgICAgQ2ExIF49IEUjI21hMTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCh+Qm1pMSkmICBCbW8xICk7IFwKKyAgICBDZTEgXj0gRSMjbWUxOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCh+Qm1hMSkmICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBDYTAgXj0gRSMjc2EwOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXigofkJzbzApJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBBIyNtYTAgXj0gRGEwOyBcCisgICAgQnNvMSA9IFJPTDMyKEEjI21hMCwgMjApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIENhMSBePSBFIyNzYTE7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oKH5Cc3UxKSYgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgQSMjc3UwIF49IER1MDsgXAorICAgIEJidTAgPSBST0wzMihBIyNzdTAsIDcpOyBcCisgICAgRSMjYmEwID0gICBCYmEwIF4oKH5CYmUwKSYgIEJiaTAgKTsgXAorICAgIEUjI2JhMCBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFtpXTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEEjI3N1MSBePSBEdTE7IFwKKyAgICBCYnUxID0gUk9MMzIoQSMjc3UxLCA3KTsgXAorICAgIEUjI2JhMSA9ICAgQmJhMSBeKCh+QmJlMSkmICBCYmkxICk7IFwKKyAgICBFIyNiYTEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzFbaV07IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgQSMjc2kxIF49IERpMTsgXAorICAgIEJndTAgPSBST0wzMihBIyNzaTEsIDMxKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCh+QmdlMCkmICBCZ2kwICk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXigofkJnaTApJiAgQmdvMCApOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXigofkJnYTApJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCh+QmdlMSkmICBCZ2kxICk7IFwKKyAgICBFIyNnZTEgPSAgIEJnZTEgXigofkJnaTEpJiAgQmdvMSApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oKH5CZ28xKSYgIEJndTEgKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEEjI3NhMCBePSBEYTA7IFwKKyAgICBCa3UwID0gUk9MMzIoQSMjc2EwLCA5KTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCh+QmtlMCkmICBCa2kwICk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICAgQmtvMCBeKCh+Qmt1MCkmICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgQSMjc2ExIF49IERhMTsgXAorICAgIEJrdTEgPSBST0wzMihBIyNzYTEsIDkpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCh+QmtpMSkmICBCa28xICk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCh+QmthMSkmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtYTAgPSAgIEJtYTAgXigofkJtZTApJiAgQm1pMCApOyBcCisgICAgRSMjbWUwID0gICBCbWUwIF4oKH5CbWkwKSYgIEJtbzAgKTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCkmICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgQSMjc28xIF49IERvMTsgXAorICAgIEJtdTEgPSBST0wzMihBIyNzbzEsIDI4KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCh+Qm1lMSkmICBCbWkxICk7IFwKKyAgICBFIyNtZTEgPSAgIEJtZTEgXigofkJtaTEpJiAgQm1vMSApOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICAgQm1vMSBeKCh+Qm11MSkmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEEjI3NlMCBePSBEZTA7IFwKKyAgICBCc3UwID0gUk9MMzIoQSMjc2UwLCAxKTsgXAorICAgIEUjI3NhMCA9ICAgQnNhMCBeKCh+QnNlMCkmICBCc2kwICk7IFwKKyAgICBFIyNzZTAgPSAgIEJzZTAgXigofkJzaTApJiAgQnNvMCApOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXigofkJzYTApJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NhMSA9ICAgQnNhMSBeKCh+QnNlMSkmICBCc2kxICk7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oKH5Cc28xKSYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCitcCisKKyNlbmRpZiAvKiAgVXNlQmViaWdva2ltaXNhICovCisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFsyNF0gPSB7CisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwgfTsKKworY29uc3QgVUlOVDMyIEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDA4OVVMLAorICAgIDB4ODAwMDAwOGJVTCwKKyAgICAweDgwMDA4MDgwVUwsCisgICAgMHgwMDAwMDA4YlVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4MlVMLAorICAgIDB4MDAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDBhVUwsCisgICAgMHgwMDAwODA4MlVMLAorICAgIDB4MDAwMDgwMDNVTCwKKyAgICAweDAwMDA4MDhiVUwsCisgICAgMHg4MDAwMDAwYlVMLAorICAgIDB4ODAwMDAwOGFVTCwKKyAgICAweDgwMDAwMDgxVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwMDhVTCwKKyAgICAweDAwMDAwMDgzVUwsCisgICAgMHg4MDAwODAwM1VMLAorICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDgwMDAwMDg4VUwsCisgICAgMHgwMDAwODAwMFVMLAorICAgIDB4ODAwMDgwODJVTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXV5pbnB1dFszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM11eaW5wdXRbMzNdOyBcCisgICAgWCMjbWkwID0gc3RhdGVbMzRdOyBcCisgICAgWCMjbWkxID0gc3RhdGVbMzVdOyBcCisgICAgWCMjbW8wID0gc3RhdGVbMzZdOyBcCisgICAgWCMjbW8xID0gc3RhdGVbMzddOyBcCisgICAgWCMjbXUwID0gc3RhdGVbMzhdOyBcCisgICAgWCMjbXUxID0gc3RhdGVbMzldOyBcCisgICAgWCMjc2EwID0gc3RhdGVbNDBdOyBcCisgICAgWCMjc2ExID0gc3RhdGVbNDFdOyBcCisgICAgWCMjc2UwID0gc3RhdGVbNDJdOyBcCisgICAgWCMjc2UxID0gc3RhdGVbNDNdOyBcCisgICAgWCMjc2kwID0gc3RhdGVbNDRdOyBcCisgICAgWCMjc2kxID0gc3RhdGVbNDVdOyBcCisgICAgWCMjc28wID0gc3RhdGVbNDZdOyBcCisgICAgWCMjc28xID0gc3RhdGVbNDddOyBcCisgICAgWCMjc3UwID0gc3RhdGVbNDhdOyBcCisgICAgWCMjc3UxID0gc3RhdGVbNDldOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhMCA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JlMSA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2JvMCA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2J1MSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2dlMCA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XTsgXAorICAgIFgjI2dpMSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI2d1MCA9IHN0YXRlWzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXTsgXAorICAgIFgjI2thMSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXTsgXAorICAgIFgjI2tpMCA9IHN0YXRlWzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XTsgXAorICAgIFgjI2tvMSA9IHN0YXRlWzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XTsgXAorICAgIFgjI21hMCA9IHN0YXRlWzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmEwOyBcCisgICAgc3RhdGVbIDFdID0gWCMjYmExOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmUwOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYmUxOyBcCisgICAgc3RhdGVbIDRdID0gWCMjYmkwOyBcCisgICAgc3RhdGVbIDVdID0gWCMjYmkxOyBcCisgICAgc3RhdGVbIDZdID0gWCMjYm8wOyBcCisgICAgc3RhdGVbIDddID0gWCMjYm8xOyBcCisgICAgc3RhdGVbIDhdID0gWCMjYnUwOyBcCisgICAgc3RhdGVbIDldID0gWCMjYnUxOyBcCisgICAgc3RhdGVbMTBdID0gWCMjZ2EwOyBcCisgICAgc3RhdGVbMTFdID0gWCMjZ2ExOyBcCisgICAgc3RhdGVbMTJdID0gWCMjZ2UwOyBcCisgICAgc3RhdGVbMTNdID0gWCMjZ2UxOyBcCisgICAgc3RhdGVbMTRdID0gWCMjZ2kwOyBcCisgICAgc3RhdGVbMTVdID0gWCMjZ2kxOyBcCisgICAgc3RhdGVbMTZdID0gWCMjZ28wOyBcCisgICAgc3RhdGVbMTddID0gWCMjZ28xOyBcCisgICAgc3RhdGVbMThdID0gWCMjZ3UwOyBcCisgICAgc3RhdGVbMTldID0gWCMjZ3UxOyBcCisgICAgc3RhdGVbMjBdID0gWCMja2EwOyBcCisgICAgc3RhdGVbMjFdID0gWCMja2ExOyBcCisgICAgc3RhdGVbMjJdID0gWCMja2UwOyBcCisgICAgc3RhdGVbMjNdID0gWCMja2UxOyBcCisgICAgc3RhdGVbMjRdID0gWCMja2kwOyBcCisgICAgc3RhdGVbMjVdID0gWCMja2kxOyBcCisgICAgc3RhdGVbMjZdID0gWCMja28wOyBcCisgICAgc3RhdGVbMjddID0gWCMja28xOyBcCisgICAgc3RhdGVbMjhdID0gWCMja3UwOyBcCisgICAgc3RhdGVbMjldID0gWCMja3UxOyBcCisgICAgc3RhdGVbMzBdID0gWCMjbWEwOyBcCisgICAgc3RhdGVbMzFdID0gWCMjbWExOyBcCisgICAgc3RhdGVbMzJdID0gWCMjbWUwOyBcCisgICAgc3RhdGVbMzNdID0gWCMjbWUxOyBcCisgICAgc3RhdGVbMzRdID0gWCMjbWkwOyBcCisgICAgc3RhdGVbMzVdID0gWCMjbWkxOyBcCisgICAgc3RhdGVbMzZdID0gWCMjbW8wOyBcCisgICAgc3RhdGVbMzddID0gWCMjbW8xOyBcCisgICAgc3RhdGVbMzhdID0gWCMjbXUwOyBcCisgICAgc3RhdGVbMzldID0gWCMjbXUxOyBcCisgICAgc3RhdGVbNDBdID0gWCMjc2EwOyBcCisgICAgc3RhdGVbNDFdID0gWCMjc2ExOyBcCisgICAgc3RhdGVbNDJdID0gWCMjc2UwOyBcCisgICAgc3RhdGVbNDNdID0gWCMjc2UxOyBcCisgICAgc3RhdGVbNDRdID0gWCMjc2kwOyBcCisgICAgc3RhdGVbNDVdID0gWCMjc2kxOyBcCisgICAgc3RhdGVbNDZdID0gWCMjc28wOyBcCisgICAgc3RhdGVbNDddID0gWCMjc28xOyBcCisgICAgc3RhdGVbNDhdID0gWCMjc3UwOyBcCisgICAgc3RhdGVbNDldID0gWCMjc3UxOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYTAgPSBZIyNiYTA7IFwKKyAgICBYIyNiYTEgPSBZIyNiYTE7IFwKKyAgICBYIyNiZTAgPSBZIyNiZTA7IFwKKyAgICBYIyNiZTEgPSBZIyNiZTE7IFwKKyAgICBYIyNiaTAgPSBZIyNiaTA7IFwKKyAgICBYIyNiaTEgPSBZIyNiaTE7IFwKKyAgICBYIyNibzAgPSBZIyNibzA7IFwKKyAgICBYIyNibzEgPSBZIyNibzE7IFwKKyAgICBYIyNidTAgPSBZIyNidTA7IFwKKyAgICBYIyNidTEgPSBZIyNidTE7IFwKKyAgICBYIyNnYTAgPSBZIyNnYTA7IFwKKyAgICBYIyNnYTEgPSBZIyNnYTE7IFwKKyAgICBYIyNnZTAgPSBZIyNnZTA7IFwKKyAgICBYIyNnZTEgPSBZIyNnZTE7IFwKKyAgICBYIyNnaTAgPSBZIyNnaTA7IFwKKyAgICBYIyNnaTEgPSBZIyNnaTE7IFwKKyAgICBYIyNnbzAgPSBZIyNnbzA7IFwKKyAgICBYIyNnbzEgPSBZIyNnbzE7IFwKKyAgICBYIyNndTAgPSBZIyNndTA7IFwKKyAgICBYIyNndTEgPSBZIyNndTE7IFwKKyAgICBYIyNrYTAgPSBZIyNrYTA7IFwKKyAgICBYIyNrYTEgPSBZIyNrYTE7IFwKKyAgICBYIyNrZTAgPSBZIyNrZTA7IFwKKyAgICBYIyNrZTEgPSBZIyNrZTE7IFwKKyAgICBYIyNraTAgPSBZIyNraTA7IFwKKyAgICBYIyNraTEgPSBZIyNraTE7IFwKKyAgICBYIyNrbzAgPSBZIyNrbzA7IFwKKyAgICBYIyNrbzEgPSBZIyNrbzE7IFwKKyAgICBYIyNrdTAgPSBZIyNrdTA7IFwKKyAgICBYIyNrdTEgPSBZIyNrdTE7IFwKKyAgICBYIyNtYTAgPSBZIyNtYTA7IFwKKyAgICBYIyNtYTEgPSBZIyNtYTE7IFwKKyAgICBYIyNtZTAgPSBZIyNtZTA7IFwKKyAgICBYIyNtZTEgPSBZIyNtZTE7IFwKKyAgICBYIyNtaTAgPSBZIyNtaTA7IFwKKyAgICBYIyNtaTEgPSBZIyNtaTE7IFwKKyAgICBYIyNtbzAgPSBZIyNtbzA7IFwKKyAgICBYIyNtbzEgPSBZIyNtbzE7IFwKKyAgICBYIyNtdTAgPSBZIyNtdTA7IFwKKyAgICBYIyNtdTEgPSBZIyNtdTE7IFwKKyAgICBYIyNzYTAgPSBZIyNzYTA7IFwKKyAgICBYIyNzYTEgPSBZIyNzYTE7IFwKKyAgICBYIyNzZTAgPSBZIyNzZTA7IFwKKyAgICBYIyNzZTEgPSBZIyNzZTE7IFwKKyAgICBYIyNzaTAgPSBZIyNzaTA7IFwKKyAgICBYIyNzaTEgPSBZIyNzaTE7IFwKKyAgICBYIyNzbzAgPSBZIyNzbzA7IFwKKyAgICBYIyNzbzEgPSBZIyNzbzE7IFwKKyAgICBYIyNzdTAgPSBZIyNzdTA7IFwKKyAgICBYIyNzdTEgPSBZIyNzdTE7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLXMyLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMi5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExMTc2MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi1zMi5tYWNyb3MKQEAgLTAsMCArMSwxMTg3IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFVJTlQzMiBBYmEwLCBBYmUwLCBBYmkwLCBBYm8wLCBBYnUwOyBcCisgICAgVUlOVDMyIEFiYTEsIEFiZTEsIEFiaTEsIEFibzEsIEFidTE7IFwKKyAgICBVSU5UMzIgQWdhMCwgQWdlMCwgQWdpMCwgQWdvMCwgQWd1MDsgXAorICAgIFVJTlQzMiBBZ2ExLCBBZ2UxLCBBZ2kxLCBBZ28xLCBBZ3UxOyBcCisgICAgVUlOVDMyIEFrYTAsIEFrZTAsIEFraTAsIEFrbzAsIEFrdTA7IFwKKyAgICBVSU5UMzIgQWthMSwgQWtlMSwgQWtpMSwgQWtvMSwgQWt1MTsgXAorICAgIFVJTlQzMiBBbWEwLCBBbWUwLCBBbWkwLCBBbW8wLCBBbXUwOyBcCisgICAgVUlOVDMyIEFtYTEsIEFtZTEsIEFtaTEsIEFtbzEsIEFtdTE7IFwKKyAgICBVSU5UMzIgQXNhMCwgQXNlMCwgQXNpMCwgQXNvMCwgQXN1MDsgXAorICAgIFVJTlQzMiBBc2ExLCBBc2UxLCBBc2kxLCBBc28xLCBBc3UxOyBcCisgICAgVUlOVDMyIEJiYTAsIEJiZTAsIEJiaTAsIEJibzAsIEJidTA7IFwKKyAgICBVSU5UMzIgQmJhMSwgQmJlMSwgQmJpMSwgQmJvMSwgQmJ1MTsgXAorICAgIFVJTlQzMiBCZ2EwLCBCZ2UwLCBCZ2kwLCBCZ28wLCBCZ3UwOyBcCisgICAgVUlOVDMyIEJnYTEsIEJnZTEsIEJnaTEsIEJnbzEsIEJndTE7IFwKKyAgICBVSU5UMzIgQmthMCwgQmtlMCwgQmtpMCwgQmtvMCwgQmt1MDsgXAorICAgIFVJTlQzMiBCa2ExLCBCa2UxLCBCa2kxLCBCa28xLCBCa3UxOyBcCisgICAgVUlOVDMyIEJtYTAsIEJtZTAsIEJtaTAsIEJtbzAsIEJtdTA7IFwKKyAgICBVSU5UMzIgQm1hMSwgQm1lMSwgQm1pMSwgQm1vMSwgQm11MTsgXAorICAgIFVJTlQzMiBCc2EwLCBCc2UwLCBCc2kwLCBCc28wLCBCc3UwOyBcCisgICAgVUlOVDMyIEJzYTEsIEJzZTEsIEJzaTEsIEJzbzEsIEJzdTE7IFwKKyAgICBVSU5UMzIgQ2EwLCBDZTAsIENpMCwgQ28wLCBDdTA7IFwKKyAgICBVSU5UMzIgQ2ExLCBDZTEsIENpMSwgQ28xLCBDdTE7IFwKKyAgICBVSU5UMzIgRGEwLCBEZTAsIERpMCwgRG8wLCBEdTA7IFwKKyAgICBVSU5UMzIgRGExLCBEZTEsIERpMSwgRG8xLCBEdTE7IFwKKyAgICBVSU5UMzIgRWJhMCwgRWJlMCwgRWJpMCwgRWJvMCwgRWJ1MDsgXAorICAgIFVJTlQzMiBFYmExLCBFYmUxLCBFYmkxLCBFYm8xLCBFYnUxOyBcCisgICAgVUlOVDMyIEVnYTAsIEVnZTAsIEVnaTAsIEVnbzAsIEVndTA7IFwKKyAgICBVSU5UMzIgRWdhMSwgRWdlMSwgRWdpMSwgRWdvMSwgRWd1MTsgXAorICAgIFVJTlQzMiBFa2EwLCBFa2UwLCBFa2kwLCBFa28wLCBFa3UwOyBcCisgICAgVUlOVDMyIEVrYTEsIEVrZTEsIEVraTEsIEVrbzEsIEVrdTE7IFwKKyAgICBVSU5UMzIgRW1hMCwgRW1lMCwgRW1pMCwgRW1vMCwgRW11MDsgXAorICAgIFVJTlQzMiBFbWExLCBFbWUxLCBFbWkxLCBFbW8xLCBFbXUxOyBcCisgICAgVUlOVDMyIEVzYTAsIEVzZTAsIEVzaTAsIEVzbzAsIEVzdTA7IFwKKyAgICBVSU5UMzIgRXNhMSwgRXNlMSwgRXNpMSwgRXNvMSwgRXN1MTsgXAorCisjZGVmaW5lIHByZXBhcmVUaGV0YSBcCisgICAgQ2EwID0gQWJhMF5BZ2EwXkFrYTBeQW1hMF5Bc2EwOyBcCisgICAgQ2ExID0gQWJhMV5BZ2ExXkFrYTFeQW1hMV5Bc2ExOyBcCisgICAgQ2UwID0gQWJlMF5BZ2UwXkFrZTBeQW1lMF5Bc2UwOyBcCisgICAgQ2UxID0gQWJlMV5BZ2UxXkFrZTFeQW1lMV5Bc2UxOyBcCisgICAgQ2kwID0gQWJpMF5BZ2kwXkFraTBeQW1pMF5Bc2kwOyBcCisgICAgQ2kxID0gQWJpMV5BZ2kxXkFraTFeQW1pMV5Bc2kxOyBcCisgICAgQ28wID0gQWJvMF5BZ28wXkFrbzBeQW1vMF5Bc28wOyBcCisgICAgQ28xID0gQWJvMV5BZ28xXkFrbzFeQW1vMV5Bc28xOyBcCisgICAgQ3UwID0gQWJ1MF5BZ3UwXkFrdTBeQW11MF5Bc3UwOyBcCisgICAgQ3UxID0gQWJ1MV5BZ3UxXkFrdTFeQW11MV5Bc3UxOyBcCisKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAobGFuZSBjb21wbGVtZW50aW5nIHBhdHRlcm4gJ2JlYmlnb2tpbWlzYScpICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXiggIEJiZTAgfCAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQ2EwID0gRSMjYmEwOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCl8ICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXiggIEJibzAgJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oICBCYnUwIHwgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCAgQmJhMCAmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oICBCYmUxIHwgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIENhMSA9IEUjI2JhMTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpfCAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oICBCYm8xICYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCAgQmJ1MSB8ICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXiggIEJiYTEgJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXiggIEJnZTAgfCAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXiggIEJnaTAgJiAgQmdvMCApOyBcCisgICAgQ2UwIF49IEUjI2dlMDsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCAgQmd1MCB8ICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oICBCZ2EwICYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCAgQmdpMSAmICBCZ28xICk7IFwKKyAgICBDZTEgXj0gRSMjZ2UxOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCAgQmdvMSB8KH5CZ3UxKSk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXiggIEJnYTEgJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXiggIEJrZTAgfCAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAofkJrbzApXiggIEJrdTAgfCAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oICBCa2UxIHwgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXiggIEJraTEgJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gKH5Ca28xKV4oICBCa3UxIHwgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXiggIEJrYTEgJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oICBCbWUwICYgIEJtaTAgKTsgXAorICAgIENhMCBePSBFIyNtYTA7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXiggIEJtaTAgfCAgQm1vMCApOyBcCisgICAgQ2UwIF49IEUjI21lMDsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApfCAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oICBCbWEwIHwgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCAgQm1lMSAmICBCbWkxICk7IFwKKyAgICBDYTEgXj0gRSMjbWExOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oICBCbWkxIHwgIEJtbzEgKTsgXAorICAgIENlMSBePSBFIyNtZTE7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKXwgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAofkJtbzEpXiggIEJtdTEgJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIENhMCBePSBFIyNzYTA7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgRSMjc2UwID0gKH5Cc2UwKV4oICBCc2kwIHwgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCAgQnN1MCB8ICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oICBCc2EwICYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgQ2ExIF49IEUjI3NhMTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAofkJzZTEpXiggIEJzaTEgfCAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCAgQnNvMSAmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXiggIEJzYTEgJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gdXNpbmcgZmFjdG9yIDIgaW50ZXJsZWF2aW5nLCA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDMyLWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSBcCisgICAgRGEwID0gQ3UwXlJPTDMyKENlMSwgMSk7IFwKKyAgICBEYTEgPSBDdTFeQ2UwOyBcCisgICAgRGUwID0gQ2EwXlJPTDMyKENpMSwgMSk7IFwKKyAgICBEZTEgPSBDYTFeQ2kwOyBcCisgICAgRGkwID0gQ2UwXlJPTDMyKENvMSwgMSk7IFwKKyAgICBEaTEgPSBDZTFeQ28wOyBcCisgICAgRG8wID0gQ2kwXlJPTDMyKEN1MSwgMSk7IFwKKyAgICBEbzEgPSBDaTFeQ3UwOyBcCisgICAgRHUwID0gQ28wXlJPTDMyKENhMSwgMSk7IFwKKyAgICBEdTEgPSBDbzFeQ2EwOyBcCitcCisgICAgQSMjYmEwIF49IERhMDsgXAorICAgIEJiYTAgPSBBIyNiYTA7IFwKKyAgICBBIyNnZTAgXj0gRGUwOyBcCisgICAgQmJlMCA9IFJPTDMyKEEjI2dlMCwgMjIpOyBcCisgICAgQSMja2kxIF49IERpMTsgXAorICAgIEJiaTAgPSBST0wzMihBIyNraTEsIDIyKTsgXAorICAgIEUjI2JhMCA9ICAgQmJhMCBeKCAgQmJlMCB8ICBCYmkwICk7IFwKKyAgICBFIyNiYTAgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c19pbnQyXzBbaV07IFwKKyAgICBBIyNtbzEgXj0gRG8xOyBcCisgICAgQmJvMCA9IFJPTDMyKEEjI21vMSwgMTEpOyBcCisgICAgRSMjYmUwID0gICBCYmUwIF4oKH5CYmkwKXwgIEJibzAgKTsgXAorICAgIEEjI3N1MCBePSBEdTA7IFwKKyAgICBCYnUwID0gUk9MMzIoQSMjc3UwLCA3KTsgXAorICAgIEUjI2JpMCA9ICAgQmJpMCBeKCAgQmJvMCAmICBCYnUwICk7IFwKKyAgICBFIyNibzAgPSAgIEJibzAgXiggIEJidTAgfCAgQmJhMCApOyBcCisgICAgRSMjYnUwID0gICBCYnUwIF4oICBCYmEwICYgIEJiZTAgKTsgXAorXAorICAgIEEjI2JhMSBePSBEYTE7IFwKKyAgICBCYmExID0gQSMjYmExOyBcCisgICAgQSMjZ2UxIF49IERlMTsgXAorICAgIEJiZTEgPSBST0wzMihBIyNnZTEsIDIyKTsgXAorICAgIEEjI2tpMCBePSBEaTA7IFwKKyAgICBCYmkxID0gUk9MMzIoQSMja2kwLCAyMSk7IFwKKyAgICBFIyNiYTEgPSAgIEJiYTEgXiggIEJiZTEgfCAgQmJpMSApOyBcCisgICAgRSMjYmExIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xW2ldOyBcCisgICAgQSMjbW8wIF49IERvMDsgXAorICAgIEJibzEgPSBST0wzMihBIyNtbzAsIDEwKTsgXAorICAgIEUjI2JlMSA9ICAgQmJlMSBeKCh+QmJpMSl8ICBCYm8xICk7IFwKKyAgICBBIyNzdTEgXj0gRHUxOyBcCisgICAgQmJ1MSA9IFJPTDMyKEEjI3N1MSwgNyk7IFwKKyAgICBFIyNiaTEgPSAgIEJiaTEgXiggIEJibzEgJiAgQmJ1MSApOyBcCisgICAgRSMjYm8xID0gICBCYm8xIF4oICBCYnUxIHwgIEJiYTEgKTsgXAorICAgIEUjI2J1MSA9ICAgQmJ1MSBeKCAgQmJhMSAmICBCYmUxICk7IFwKK1wKKyAgICBBIyNibzAgXj0gRG8wOyBcCisgICAgQmdhMCA9IFJPTDMyKEEjI2JvMCwgMTQpOyBcCisgICAgQSMjZ3UwIF49IER1MDsgXAorICAgIEJnZTAgPSBST0wzMihBIyNndTAsIDEwKTsgXAorICAgIEEjI2thMSBePSBEYTE7IFwKKyAgICBCZ2kwID0gUk9MMzIoQSMja2ExLCAyKTsgXAorICAgIEUjI2dhMCA9ICAgQmdhMCBeKCAgQmdlMCB8ICBCZ2kwICk7IFwKKyAgICBBIyNtZTEgXj0gRGUxOyBcCisgICAgQmdvMCA9IFJPTDMyKEEjI21lMSwgMjMpOyBcCisgICAgRSMjZ2UwID0gICBCZ2UwIF4oICBCZ2kwICYgIEJnbzAgKTsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXiggIEJnbzAgfCh+Qmd1MCkpOyBcCisgICAgRSMjZ28wID0gICBCZ28wIF4oICBCZ3UwIHwgIEJnYTAgKTsgXAorICAgIEUjI2d1MCA9ICAgQmd1MCBeKCAgQmdhMCAmICBCZ2UwICk7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCAgQmdlMSB8ICBCZ2kxICk7IFwKKyAgICBBIyNtZTAgXj0gRGUwOyBcCisgICAgQmdvMSA9IFJPTDMyKEEjI21lMCwgMjIpOyBcCisgICAgRSMjZ2UxID0gICBCZ2UxIF4oICBCZ2kxICYgIEJnbzEgKTsgXAorICAgIEEjI3NpMCBePSBEaTA7IFwKKyAgICBCZ3UxID0gUk9MMzIoQSMjc2kwLCAzMCk7IFwKKyAgICBFIyNnaTEgPSAgIEJnaTEgXiggIEJnbzEgfCh+Qmd1MSkpOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oICBCZ3UxIHwgIEJnYTEgKTsgXAorICAgIEUjI2d1MSA9ICAgQmd1MSBeKCAgQmdhMSAmICBCZ2UxICk7IFwKK1wKKyAgICBBIyNiZTEgXj0gRGUxOyBcCisgICAgQmthMCA9IFJPTDMyKEEjI2JlMSwgMSk7IFwKKyAgICBBIyNnaTAgXj0gRGkwOyBcCisgICAgQmtlMCA9IFJPTDMyKEEjI2dpMCwgMyk7IFwKKyAgICBBIyNrbzEgXj0gRG8xOyBcCisgICAgQmtpMCA9IFJPTDMyKEEjI2tvMSwgMTMpOyBcCisgICAgRSMja2EwID0gICBCa2EwIF4oICBCa2UwIHwgIEJraTAgKTsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCAgQmtpMCAmICBCa28wICk7IFwKKyAgICBBIyNzYTAgXj0gRGEwOyBcCisgICAgQmt1MCA9IFJPTDMyKEEjI3NhMCwgOSk7IFwKKyAgICBFIyNraTAgPSAgIEJraTAgXigofkJrbzApJiAgQmt1MCApOyBcCisgICAgRSMja28wID0gKH5Ca28wKV4oICBCa3UwIHwgIEJrYTAgKTsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCAgQmthMCAmICBCa2UwICk7IFwKK1wKKyAgICBBIyNiZTAgXj0gRGUwOyBcCisgICAgQmthMSA9IEEjI2JlMDsgXAorICAgIEEjI2dpMSBePSBEaTE7IFwKKyAgICBCa2UxID0gUk9MMzIoQSMjZ2kxLCAzKTsgXAorICAgIEEjI2tvMCBePSBEbzA7IFwKKyAgICBCa2kxID0gUk9MMzIoQSMja28wLCAxMik7IFwKKyAgICBFIyNrYTEgPSAgIEJrYTEgXiggIEJrZTEgfCAgQmtpMSApOyBcCisgICAgQSMjbXUxIF49IER1MTsgXAorICAgIEJrbzEgPSBST0wzMihBIyNtdTEsIDQpOyBcCisgICAgRSMja2UxID0gICBCa2UxIF4oICBCa2kxICYgIEJrbzEgKTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBFIyNrbzEgPSAofkJrbzEpXiggIEJrdTEgfCAgQmthMSApOyBcCisgICAgRSMja3UxID0gICBCa3UxIF4oICBCa2ExICYgIEJrZTEgKTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oICBCbWUwICYgIEJtaTAgKTsgXAorICAgIEEjI21pMSBePSBEaTE7IFwKKyAgICBCbW8wID0gUk9MMzIoQSMjbWkxLCA4KTsgXAorICAgIEUjI21lMCA9ICAgQm1lMCBeKCAgQm1pMCB8ICBCbW8wICk7IFwKKyAgICBBIyNzbzAgXj0gRG8wOyBcCisgICAgQm11MCA9IFJPTDMyKEEjI3NvMCwgMjgpOyBcCisgICAgRSMjbWkwID0gICBCbWkwIF4oKH5CbW8wKXwgIEJtdTAgKTsgXAorICAgIEUjI21vMCA9ICh+Qm1vMCleKCAgQm11MCAmICBCbWEwICk7IFwKKyAgICBFIyNtdTAgPSAgIEJtdTAgXiggIEJtYTAgfCAgQm1lMCApOyBcCitcCisgICAgQSMjYnUwIF49IER1MDsgXAorICAgIEJtYTEgPSBST0wzMihBIyNidTAsIDEzKTsgXAorICAgIEEjI2dhMSBePSBEYTE7IFwKKyAgICBCbWUxID0gUk9MMzIoQSMjZ2ExLCAxOCk7IFwKKyAgICBBIyNrZTEgXj0gRGUxOyBcCisgICAgQm1pMSA9IFJPTDMyKEEjI2tlMSwgNSk7IFwKKyAgICBFIyNtYTEgPSAgIEJtYTEgXiggIEJtZTEgJiAgQm1pMSApOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oICBCbWkxIHwgIEJtbzEgKTsgXAorICAgIEEjI3NvMSBePSBEbzE7IFwKKyAgICBCbXUxID0gUk9MMzIoQSMjc28xLCAyOCk7IFwKKyAgICBFIyNtaTEgPSAgIEJtaTEgXigofkJtbzEpfCAgQm11MSApOyBcCisgICAgRSMjbW8xID0gKH5CbW8xKV4oICBCbXUxICYgIEJtYTEgKTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCAgQm1hMSB8ICBCbWUxICk7IFwKK1wKKyAgICBBIyNiaTAgXj0gRGkwOyBcCisgICAgQnNhMCA9IFJPTDMyKEEjI2JpMCwgMzEpOyBcCisgICAgQSMjZ28xIF49IERvMTsgXAorICAgIEJzZTAgPSBST0wzMihBIyNnbzEsIDI4KTsgXAorICAgIEEjI2t1MSBePSBEdTE7IFwKKyAgICBCc2kwID0gUk9MMzIoQSMja3UxLCAyMCk7IFwKKyAgICBFIyNzYTAgPSAgIEJzYTAgXigofkJzZTApJiAgQnNpMCApOyBcCisgICAgQSMjbWExIF49IERhMTsgXAorICAgIEJzbzAgPSBST0wzMihBIyNtYTEsIDIxKTsgXAorICAgIEUjI3NlMCA9ICh+QnNlMCleKCAgQnNpMCB8ICBCc28wICk7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXiggIEJzbzAgJiAgQnN1MCApOyBcCisgICAgRSMjc28wID0gICBCc28wIF4oICBCc3UwIHwgIEJzYTAgKTsgXAorICAgIEUjI3N1MCA9ICAgQnN1MCBeKCAgQnNhMCAmICBCc2UwICk7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgQSMjbWEwIF49IERhMDsgXAorICAgIEJzbzEgPSBST0wzMihBIyNtYTAsIDIwKTsgXAorICAgIEUjI3NlMSA9ICh+QnNlMSleKCAgQnNpMSB8ICBCc28xICk7IFwKKyAgICBBIyNzZTEgXj0gRGUxOyBcCisgICAgQnN1MSA9IFJPTDMyKEEjI3NlMSwgMSk7IFwKKyAgICBFIyNzaTEgPSAgIEJzaTEgXiggIEJzbzEgJiAgQnN1MSApOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oICBCc3UxIHwgIEJzYTEgKTsgXAorICAgIEUjI3N1MSA9ICAgQnN1MSBeKCAgQnNhMSAmICBCc2UxICk7IFwKK1wKKworI2Vsc2UgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXigofkJiZTApJiAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQ2EwID0gRSMjYmEwOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBDZTAgPSBFIyNiZTA7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgQ2kwID0gRSMjYmkwOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIENvMCA9IEUjI2JvMDsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKKyAgICBDdTAgPSBFIyNidTA7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oKH5CYmUxKSYgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIENhMSA9IEUjI2JhMTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgQ2UxID0gRSMjYmUxOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIENpMSA9IEUjI2JpMTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBDbzEgPSBFIyNibzE7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCisgICAgQ3UxID0gRSMjYnUxOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgQ2EwIF49IEUjI2dhMDsgXAorICAgIEEjI21lMSBePSBEZTE7IFwKKyAgICBCZ28wID0gUk9MMzIoQSMjbWUxLCAyMyk7IFwKKyAgICBFIyNnZTAgPSAgIEJnZTAgXigofkJnaTApJiAgQmdvMCApOyBcCisgICAgQ2UwIF49IEUjI2dlMDsgXAorICAgIEEjI3NpMSBePSBEaTE7IFwKKyAgICBCZ3UwID0gUk9MMzIoQSMjc2kxLCAzMSk7IFwKKyAgICBFIyNnaTAgPSAgIEJnaTAgXigofkJnbzApJiAgQmd1MCApOyBcCisgICAgQ2kwIF49IEUjI2dpMDsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBDbzAgXj0gRSMjZ28wOyBcCisgICAgRSMjZ3UwID0gICBCZ3UwIF4oKH5CZ2EwKSYgIEJnZTAgKTsgXAorICAgIEN1MCBePSBFIyNndTA7IFwKK1wKKyAgICBBIyNibzEgXj0gRG8xOyBcCisgICAgQmdhMSA9IFJPTDMyKEEjI2JvMSwgMTQpOyBcCisgICAgQSMjZ3UxIF49IER1MTsgXAorICAgIEJnZTEgPSBST0wzMihBIyNndTEsIDEwKTsgXAorICAgIEEjI2thMCBePSBEYTA7IFwKKyAgICBCZ2kxID0gUk9MMzIoQSMja2EwLCAxKTsgXAorICAgIEUjI2dhMSA9ICAgQmdhMSBeKCh+QmdlMSkmICBCZ2kxICk7IFwKKyAgICBDYTEgXj0gRSMjZ2ExOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCh+QmdpMSkmICBCZ28xICk7IFwKKyAgICBDZTEgXj0gRSMjZ2UxOyBcCisgICAgQSMjc2kwIF49IERpMDsgXAorICAgIEJndTEgPSBST0wzMihBIyNzaTAsIDMwKTsgXAorICAgIEUjI2dpMSA9ICAgQmdpMSBeKCh+QmdvMSkmICBCZ3UxICk7IFwKKyAgICBDaTEgXj0gRSMjZ2kxOyBcCisgICAgRSMjZ28xID0gICBCZ28xIF4oKH5CZ3UxKSYgIEJnYTEgKTsgXAorICAgIENvMSBePSBFIyNnbzE7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCisgICAgQ3UxIF49IEUjI2d1MTsgXAorXAorICAgIEEjI2JlMSBePSBEZTE7IFwKKyAgICBCa2EwID0gUk9MMzIoQSMjYmUxLCAxKTsgXAorICAgIEEjI2dpMCBePSBEaTA7IFwKKyAgICBCa2UwID0gUk9MMzIoQSMjZ2kwLCAzKTsgXAorICAgIEEjI2tvMSBePSBEbzE7IFwKKyAgICBCa2kwID0gUk9MMzIoQSMja28xLCAxMyk7IFwKKyAgICBFIyNrYTAgPSAgIEJrYTAgXigofkJrZTApJiAgQmtpMCApOyBcCisgICAgQ2EwIF49IEUjI2thMDsgXAorICAgIEEjI211MCBePSBEdTA7IFwKKyAgICBCa28wID0gUk9MMzIoQSMjbXUwLCA0KTsgXAorICAgIEUjI2tlMCA9ICAgQmtlMCBeKCh+QmtpMCkmICBCa28wICk7IFwKKyAgICBDZTAgXj0gRSMja2UwOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIENpMCBePSBFIyNraTA7IFwKKyAgICBFIyNrbzAgPSAgIEJrbzAgXigofkJrdTApJiAgQmthMCApOyBcCisgICAgQ28wIF49IEUjI2tvMDsgXAorICAgIEUjI2t1MCA9ICAgQmt1MCBeKCh+QmthMCkmICBCa2UwICk7IFwKKyAgICBDdTAgXj0gRSMja3UwOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIENhMSBePSBFIyNrYTE7IFwKKyAgICBBIyNtdTEgXj0gRHUxOyBcCisgICAgQmtvMSA9IFJPTDMyKEEjI211MSwgNCk7IFwKKyAgICBFIyNrZTEgPSAgIEJrZTEgXigofkJraTEpJiAgQmtvMSApOyBcCisgICAgQ2UxIF49IEUjI2tlMTsgXAorICAgIEEjI3NhMSBePSBEYTE7IFwKKyAgICBCa3UxID0gUk9MMzIoQSMjc2ExLCA5KTsgXAorICAgIEUjI2tpMSA9ICAgQmtpMSBeKCh+QmtvMSkmICBCa3UxICk7IFwKKyAgICBDaTEgXj0gRSMja2kxOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIENvMSBePSBFIyNrbzE7IFwKKyAgICBFIyNrdTEgPSAgIEJrdTEgXigofkJrYTEpJiAgQmtlMSApOyBcCisgICAgQ3UxIF49IEUjI2t1MTsgXAorXAorICAgIEEjI2J1MSBePSBEdTE7IFwKKyAgICBCbWEwID0gUk9MMzIoQSMjYnUxLCAxNCk7IFwKKyAgICBBIyNnYTAgXj0gRGEwOyBcCisgICAgQm1lMCA9IFJPTDMyKEEjI2dhMCwgMTgpOyBcCisgICAgQSMja2UwIF49IERlMDsgXAorICAgIEJtaTAgPSBST0wzMihBIyNrZTAsIDUpOyBcCisgICAgRSMjbWEwID0gICBCbWEwIF4oKH5CbWUwKSYgIEJtaTAgKTsgXAorICAgIENhMCBePSBFIyNtYTA7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXigofkJtaTApJiAgQm1vMCApOyBcCisgICAgQ2UwIF49IEUjI21lMDsgXAorICAgIEEjI3NvMCBePSBEbzA7IFwKKyAgICBCbXUwID0gUk9MMzIoQSMjc28wLCAyOCk7IFwKKyAgICBFIyNtaTAgPSAgIEJtaTAgXigofkJtbzApJiAgQm11MCApOyBcCisgICAgQ2kwIF49IEUjI21pMDsgXAorICAgIEUjI21vMCA9ICAgQm1vMCBeKCh+Qm11MCkmICBCbWEwICk7IFwKKyAgICBDbzAgXj0gRSMjbW8wOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorICAgIEN1MCBePSBFIyNtdTA7IFwKK1wKKyAgICBBIyNidTAgXj0gRHUwOyBcCisgICAgQm1hMSA9IFJPTDMyKEEjI2J1MCwgMTMpOyBcCisgICAgQSMjZ2ExIF49IERhMTsgXAorICAgIEJtZTEgPSBST0wzMihBIyNnYTEsIDE4KTsgXAorICAgIEEjI2tlMSBePSBEZTE7IFwKKyAgICBCbWkxID0gUk9MMzIoQSMja2UxLCA1KTsgXAorICAgIEUjI21hMSA9ICAgQm1hMSBeKCh+Qm1lMSkmICBCbWkxICk7IFwKKyAgICBDYTEgXj0gRSMjbWExOyBcCisgICAgQSMjbWkwIF49IERpMDsgXAorICAgIEJtbzEgPSBST0wzMihBIyNtaTAsIDcpOyBcCisgICAgRSMjbWUxID0gICBCbWUxIF4oKH5CbWkxKSYgIEJtbzEgKTsgXAorICAgIENlMSBePSBFIyNtZTE7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIENpMSBePSBFIyNtaTE7IFwKKyAgICBFIyNtbzEgPSAgIEJtbzEgXigofkJtdTEpJiAgQm1hMSApOyBcCisgICAgQ28xIF49IEUjI21vMTsgXAorICAgIEUjI211MSA9ICAgQm11MSBeKCh+Qm1hMSkmICBCbWUxICk7IFwKKyAgICBDdTEgXj0gRSMjbXUxOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIENhMCBePSBFIyNzYTA7IFwKKyAgICBBIyNtYTEgXj0gRGExOyBcCisgICAgQnNvMCA9IFJPTDMyKEEjI21hMSwgMjEpOyBcCisgICAgRSMjc2UwID0gICBCc2UwIF4oKH5Cc2kwKSYgIEJzbzAgKTsgXAorICAgIENlMCBePSBFIyNzZTA7IFwKKyAgICBBIyNzZTAgXj0gRGUwOyBcCisgICAgQnN1MCA9IFJPTDMyKEEjI3NlMCwgMSk7IFwKKyAgICBFIyNzaTAgPSAgIEJzaTAgXigofkJzbzApJiAgQnN1MCApOyBcCisgICAgQ2kwIF49IEUjI3NpMDsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBDbzAgXj0gRSMjc28wOyBcCisgICAgRSMjc3UwID0gICBCc3UwIF4oKH5Cc2EwKSYgIEJzZTAgKTsgXAorICAgIEN1MCBePSBFIyNzdTA7IFwKK1wKKyAgICBBIyNiaTEgXj0gRGkxOyBcCisgICAgQnNhMSA9IFJPTDMyKEEjI2JpMSwgMzEpOyBcCisgICAgQSMjZ28wIF49IERvMDsgXAorICAgIEJzZTEgPSBST0wzMihBIyNnbzAsIDI3KTsgXAorICAgIEEjI2t1MCBePSBEdTA7IFwKKyAgICBCc2kxID0gUk9MMzIoQSMja3UwLCAxOSk7IFwKKyAgICBFIyNzYTEgPSAgIEJzYTEgXigofkJzZTEpJiAgQnNpMSApOyBcCisgICAgQ2ExIF49IEUjI3NhMTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgQ2UxIF49IEUjI3NlMTsgXAorICAgIEEjI3NlMSBePSBEZTE7IFwKKyAgICBCc3UxID0gUk9MMzIoQSMjc2UxLCAxKTsgXAorICAgIEUjI3NpMSA9ICAgQnNpMSBeKCh+QnNvMSkmICBCc3UxICk7IFwKKyAgICBDaTEgXj0gRSMjc2kxOyBcCisgICAgRSMjc28xID0gICBCc28xIF4oKH5Cc3UxKSYgIEJzYTEgKTsgXAorICAgIENvMSBePSBFIyNzbzE7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCisgICAgQ3UxIF49IEUjI3N1MTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIHVzaW5nIGZhY3RvciAyIGludGVybGVhdmluZywgNjQtYml0IGxhbmVzIG1hcHBlZCB0byAzMi1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhMCA9IEN1MF5ST0wzMihDZTEsIDEpOyBcCisgICAgRGExID0gQ3UxXkNlMDsgXAorICAgIERlMCA9IENhMF5ST0wzMihDaTEsIDEpOyBcCisgICAgRGUxID0gQ2ExXkNpMDsgXAorICAgIERpMCA9IENlMF5ST0wzMihDbzEsIDEpOyBcCisgICAgRGkxID0gQ2UxXkNvMDsgXAorICAgIERvMCA9IENpMF5ST0wzMihDdTEsIDEpOyBcCisgICAgRG8xID0gQ2kxXkN1MDsgXAorICAgIER1MCA9IENvMF5ST0wzMihDYTEsIDEpOyBcCisgICAgRHUxID0gQ28xXkNhMDsgXAorXAorICAgIEEjI2JhMCBePSBEYTA7IFwKKyAgICBCYmEwID0gQSMjYmEwOyBcCisgICAgQSMjZ2UwIF49IERlMDsgXAorICAgIEJiZTAgPSBST0wzMihBIyNnZTAsIDIyKTsgXAorICAgIEEjI2tpMSBePSBEaTE7IFwKKyAgICBCYmkwID0gUk9MMzIoQSMja2kxLCAyMik7IFwKKyAgICBFIyNiYTAgPSAgIEJiYTAgXigofkJiZTApJiAgQmJpMCApOyBcCisgICAgRSMjYmEwIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8wW2ldOyBcCisgICAgQSMjbW8xIF49IERvMTsgXAorICAgIEJibzAgPSBST0wzMihBIyNtbzEsIDExKTsgXAorICAgIEUjI2JlMCA9ICAgQmJlMCBeKCh+QmJpMCkmICBCYm8wICk7IFwKKyAgICBBIyNzdTAgXj0gRHUwOyBcCisgICAgQmJ1MCA9IFJPTDMyKEEjI3N1MCwgNyk7IFwKKyAgICBFIyNiaTAgPSAgIEJiaTAgXigofkJibzApJiAgQmJ1MCApOyBcCisgICAgRSMjYm8wID0gICBCYm8wIF4oKH5CYnUwKSYgIEJiYTAgKTsgXAorICAgIEUjI2J1MCA9ICAgQmJ1MCBeKCh+QmJhMCkmICBCYmUwICk7IFwKK1wKKyAgICBBIyNiYTEgXj0gRGExOyBcCisgICAgQmJhMSA9IEEjI2JhMTsgXAorICAgIEEjI2dlMSBePSBEZTE7IFwKKyAgICBCYmUxID0gUk9MMzIoQSMjZ2UxLCAyMik7IFwKKyAgICBBIyNraTAgXj0gRGkwOyBcCisgICAgQmJpMSA9IFJPTDMyKEEjI2tpMCwgMjEpOyBcCisgICAgRSMjYmExID0gICBCYmExIF4oKH5CYmUxKSYgIEJiaTEgKTsgXAorICAgIEUjI2JhMSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMVtpXTsgXAorICAgIEEjI21vMCBePSBEbzA7IFwKKyAgICBCYm8xID0gUk9MMzIoQSMjbW8wLCAxMCk7IFwKKyAgICBFIyNiZTEgPSAgIEJiZTEgXigofkJiaTEpJiAgQmJvMSApOyBcCisgICAgQSMjc3UxIF49IER1MTsgXAorICAgIEJidTEgPSBST0wzMihBIyNzdTEsIDcpOyBcCisgICAgRSMjYmkxID0gICBCYmkxIF4oKH5CYm8xKSYgIEJidTEgKTsgXAorICAgIEUjI2JvMSA9ICAgQmJvMSBeKCh+QmJ1MSkmICBCYmExICk7IFwKKyAgICBFIyNidTEgPSAgIEJidTEgXigofkJiYTEpJiAgQmJlMSApOyBcCitcCisgICAgQSMjYm8wIF49IERvMDsgXAorICAgIEJnYTAgPSBST0wzMihBIyNibzAsIDE0KTsgXAorICAgIEEjI2d1MCBePSBEdTA7IFwKKyAgICBCZ2UwID0gUk9MMzIoQSMjZ3UwLCAxMCk7IFwKKyAgICBBIyNrYTEgXj0gRGExOyBcCisgICAgQmdpMCA9IFJPTDMyKEEjI2thMSwgMik7IFwKKyAgICBFIyNnYTAgPSAgIEJnYTAgXigofkJnZTApJiAgQmdpMCApOyBcCisgICAgQSMjbWUxIF49IERlMTsgXAorICAgIEJnbzAgPSBST0wzMihBIyNtZTEsIDIzKTsgXAorICAgIEUjI2dlMCA9ICAgQmdlMCBeKCh+QmdpMCkmICBCZ28wICk7IFwKKyAgICBBIyNzaTEgXj0gRGkxOyBcCisgICAgQmd1MCA9IFJPTDMyKEEjI3NpMSwgMzEpOyBcCisgICAgRSMjZ2kwID0gICBCZ2kwIF4oKH5CZ28wKSYgIEJndTAgKTsgXAorICAgIEUjI2dvMCA9ICAgQmdvMCBeKCh+Qmd1MCkmICBCZ2EwICk7IFwKKyAgICBFIyNndTAgPSAgIEJndTAgXigofkJnYTApJiAgQmdlMCApOyBcCitcCisgICAgQSMjYm8xIF49IERvMTsgXAorICAgIEJnYTEgPSBST0wzMihBIyNibzEsIDE0KTsgXAorICAgIEEjI2d1MSBePSBEdTE7IFwKKyAgICBCZ2UxID0gUk9MMzIoQSMjZ3UxLCAxMCk7IFwKKyAgICBBIyNrYTAgXj0gRGEwOyBcCisgICAgQmdpMSA9IFJPTDMyKEEjI2thMCwgMSk7IFwKKyAgICBFIyNnYTEgPSAgIEJnYTEgXigofkJnZTEpJiAgQmdpMSApOyBcCisgICAgQSMjbWUwIF49IERlMDsgXAorICAgIEJnbzEgPSBST0wzMihBIyNtZTAsIDIyKTsgXAorICAgIEUjI2dlMSA9ICAgQmdlMSBeKCh+QmdpMSkmICBCZ28xICk7IFwKKyAgICBBIyNzaTAgXj0gRGkwOyBcCisgICAgQmd1MSA9IFJPTDMyKEEjI3NpMCwgMzApOyBcCisgICAgRSMjZ2kxID0gICBCZ2kxIF4oKH5CZ28xKSYgIEJndTEgKTsgXAorICAgIEUjI2dvMSA9ICAgQmdvMSBeKCh+Qmd1MSkmICBCZ2ExICk7IFwKKyAgICBFIyNndTEgPSAgIEJndTEgXigofkJnYTEpJiAgQmdlMSApOyBcCitcCisgICAgQSMjYmUxIF49IERlMTsgXAorICAgIEJrYTAgPSBST0wzMihBIyNiZTEsIDEpOyBcCisgICAgQSMjZ2kwIF49IERpMDsgXAorICAgIEJrZTAgPSBST0wzMihBIyNnaTAsIDMpOyBcCisgICAgQSMja28xIF49IERvMTsgXAorICAgIEJraTAgPSBST0wzMihBIyNrbzEsIDEzKTsgXAorICAgIEUjI2thMCA9ICAgQmthMCBeKCh+QmtlMCkmICBCa2kwICk7IFwKKyAgICBBIyNtdTAgXj0gRHUwOyBcCisgICAgQmtvMCA9IFJPTDMyKEEjI211MCwgNCk7IFwKKyAgICBFIyNrZTAgPSAgIEJrZTAgXigofkJraTApJiAgQmtvMCApOyBcCisgICAgQSMjc2EwIF49IERhMDsgXAorICAgIEJrdTAgPSBST0wzMihBIyNzYTAsIDkpOyBcCisgICAgRSMja2kwID0gICBCa2kwIF4oKH5Ca28wKSYgIEJrdTAgKTsgXAorICAgIEUjI2tvMCA9ICAgQmtvMCBeKCh+Qmt1MCkmICBCa2EwICk7IFwKKyAgICBFIyNrdTAgPSAgIEJrdTAgXigofkJrYTApJiAgQmtlMCApOyBcCitcCisgICAgQSMjYmUwIF49IERlMDsgXAorICAgIEJrYTEgPSBBIyNiZTA7IFwKKyAgICBBIyNnaTEgXj0gRGkxOyBcCisgICAgQmtlMSA9IFJPTDMyKEEjI2dpMSwgMyk7IFwKKyAgICBBIyNrbzAgXj0gRG8wOyBcCisgICAgQmtpMSA9IFJPTDMyKEEjI2tvMCwgMTIpOyBcCisgICAgRSMja2ExID0gICBCa2ExIF4oKH5Ca2UxKSYgIEJraTEgKTsgXAorICAgIEEjI211MSBePSBEdTE7IFwKKyAgICBCa28xID0gUk9MMzIoQSMjbXUxLCA0KTsgXAorICAgIEUjI2tlMSA9ICAgQmtlMSBeKCh+QmtpMSkmICBCa28xICk7IFwKKyAgICBBIyNzYTEgXj0gRGExOyBcCisgICAgQmt1MSA9IFJPTDMyKEEjI3NhMSwgOSk7IFwKKyAgICBFIyNraTEgPSAgIEJraTEgXigofkJrbzEpJiAgQmt1MSApOyBcCisgICAgRSMja28xID0gICBCa28xIF4oKH5Ca3UxKSYgIEJrYTEgKTsgXAorICAgIEUjI2t1MSA9ICAgQmt1MSBeKCh+QmthMSkmICBCa2UxICk7IFwKK1wKKyAgICBBIyNidTEgXj0gRHUxOyBcCisgICAgQm1hMCA9IFJPTDMyKEEjI2J1MSwgMTQpOyBcCisgICAgQSMjZ2EwIF49IERhMDsgXAorICAgIEJtZTAgPSBST0wzMihBIyNnYTAsIDE4KTsgXAorICAgIEEjI2tlMCBePSBEZTA7IFwKKyAgICBCbWkwID0gUk9MMzIoQSMja2UwLCA1KTsgXAorICAgIEUjI21hMCA9ICAgQm1hMCBeKCh+Qm1lMCkmICBCbWkwICk7IFwKKyAgICBBIyNtaTEgXj0gRGkxOyBcCisgICAgQm1vMCA9IFJPTDMyKEEjI21pMSwgOCk7IFwKKyAgICBFIyNtZTAgPSAgIEJtZTAgXigofkJtaTApJiAgQm1vMCApOyBcCisgICAgQSMjc28wIF49IERvMDsgXAorICAgIEJtdTAgPSBST0wzMihBIyNzbzAsIDI4KTsgXAorICAgIEUjI21pMCA9ICAgQm1pMCBeKCh+Qm1vMCkmICBCbXUwICk7IFwKKyAgICBFIyNtbzAgPSAgIEJtbzAgXigofkJtdTApJiAgQm1hMCApOyBcCisgICAgRSMjbXUwID0gICBCbXUwIF4oKH5CbWEwKSYgIEJtZTAgKTsgXAorXAorICAgIEEjI2J1MCBePSBEdTA7IFwKKyAgICBCbWExID0gUk9MMzIoQSMjYnUwLCAxMyk7IFwKKyAgICBBIyNnYTEgXj0gRGExOyBcCisgICAgQm1lMSA9IFJPTDMyKEEjI2dhMSwgMTgpOyBcCisgICAgQSMja2UxIF49IERlMTsgXAorICAgIEJtaTEgPSBST0wzMihBIyNrZTEsIDUpOyBcCisgICAgRSMjbWExID0gICBCbWExIF4oKH5CbWUxKSYgIEJtaTEgKTsgXAorICAgIEEjI21pMCBePSBEaTA7IFwKKyAgICBCbW8xID0gUk9MMzIoQSMjbWkwLCA3KTsgXAorICAgIEUjI21lMSA9ICAgQm1lMSBeKCh+Qm1pMSkmICBCbW8xICk7IFwKKyAgICBBIyNzbzEgXj0gRG8xOyBcCisgICAgQm11MSA9IFJPTDMyKEEjI3NvMSwgMjgpOyBcCisgICAgRSMjbWkxID0gICBCbWkxIF4oKH5CbW8xKSYgIEJtdTEgKTsgXAorICAgIEUjI21vMSA9ICAgQm1vMSBeKCh+Qm11MSkmICBCbWExICk7IFwKKyAgICBFIyNtdTEgPSAgIEJtdTEgXigofkJtYTEpJiAgQm1lMSApOyBcCitcCisgICAgQSMjYmkwIF49IERpMDsgXAorICAgIEJzYTAgPSBST0wzMihBIyNiaTAsIDMxKTsgXAorICAgIEEjI2dvMSBePSBEbzE7IFwKKyAgICBCc2UwID0gUk9MMzIoQSMjZ28xLCAyOCk7IFwKKyAgICBBIyNrdTEgXj0gRHUxOyBcCisgICAgQnNpMCA9IFJPTDMyKEEjI2t1MSwgMjApOyBcCisgICAgRSMjc2EwID0gICBCc2EwIF4oKH5Cc2UwKSYgIEJzaTAgKTsgXAorICAgIEEjI21hMSBePSBEYTE7IFwKKyAgICBCc28wID0gUk9MMzIoQSMjbWExLCAyMSk7IFwKKyAgICBFIyNzZTAgPSAgIEJzZTAgXigofkJzaTApJiAgQnNvMCApOyBcCisgICAgQSMjc2UwIF49IERlMDsgXAorICAgIEJzdTAgPSBST0wzMihBIyNzZTAsIDEpOyBcCisgICAgRSMjc2kwID0gICBCc2kwIF4oKH5Cc28wKSYgIEJzdTAgKTsgXAorICAgIEUjI3NvMCA9ICAgQnNvMCBeKCh+QnN1MCkmICBCc2EwICk7IFwKKyAgICBFIyNzdTAgPSAgIEJzdTAgXigofkJzYTApJiAgQnNlMCApOyBcCitcCisgICAgQSMjYmkxIF49IERpMTsgXAorICAgIEJzYTEgPSBST0wzMihBIyNiaTEsIDMxKTsgXAorICAgIEEjI2dvMCBePSBEbzA7IFwKKyAgICBCc2UxID0gUk9MMzIoQSMjZ28wLCAyNyk7IFwKKyAgICBBIyNrdTAgXj0gRHUwOyBcCisgICAgQnNpMSA9IFJPTDMyKEEjI2t1MCwgMTkpOyBcCisgICAgRSMjc2ExID0gICBCc2ExIF4oKH5Cc2UxKSYgIEJzaTEgKTsgXAorICAgIEEjI21hMCBePSBEYTA7IFwKKyAgICBCc28xID0gUk9MMzIoQSMjbWEwLCAyMCk7IFwKKyAgICBFIyNzZTEgPSAgIEJzZTEgXigofkJzaTEpJiAgQnNvMSApOyBcCisgICAgQSMjc2UxIF49IERlMTsgXAorICAgIEJzdTEgPSBST0wzMihBIyNzZTEsIDEpOyBcCisgICAgRSMjc2kxID0gICBCc2kxIF4oKH5Cc28xKSYgIEJzdTEgKTsgXAorICAgIEUjI3NvMSA9ICAgQnNvMSBeKCh+QnN1MSkmICBCc2ExICk7IFwKKyAgICBFIyNzdTEgPSAgIEJzdTEgXigofkJzYTEpJiAgQnNlMSApOyBcCitcCisKKyNlbmRpZiAvKiAgVXNlQmViaWdva2ltaXNhICovCisKK2NvbnN0IFVJTlQzMiBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzX2ludDJfMFsyNF0gPSB7CisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMVVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMDAwMDFVTCwKKyAgICAweDAwMDAwMDAwVUwgfTsKKworY29uc3QgVUlOVDMyIEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNfaW50Ml8xWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDA4OVVMLAorICAgIDB4ODAwMDAwOGJVTCwKKyAgICAweDgwMDA4MDgwVUwsCisgICAgMHgwMDAwMDA4YlVMLAorICAgIDB4MDAwMDgwMDBVTCwKKyAgICAweDgwMDA4MDg4VUwsCisgICAgMHg4MDAwMDA4MlVMLAorICAgIDB4MDAwMDAwMGJVTCwKKyAgICAweDAwMDAwMDBhVUwsCisgICAgMHgwMDAwODA4MlVMLAorICAgIDB4MDAwMDgwMDNVTCwKKyAgICAweDAwMDA4MDhiVUwsCisgICAgMHg4MDAwMDAwYlVMLAorICAgIDB4ODAwMDAwOGFVTCwKKyAgICAweDgwMDAwMDgxVUwsCisgICAgMHg4MDAwMDA4MVVMLAorICAgIDB4ODAwMDAwMDhVTCwKKyAgICAweDAwMDAwMDgzVUwsCisgICAgMHg4MDAwODAwM1VMLAorICAgIDB4ODAwMDgwODhVTCwKKyAgICAweDgwMDAwMDg4VUwsCisgICAgMHgwMDAwODAwMFVMLAorICAgIDB4ODAwMDgwODJVTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYTAgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmExID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNiZTEgPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYmkwID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNibzAgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjYm8xID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNidTEgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMjZ2EwID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNnZTAgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMjZ2UxID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNnaTEgPSBzdGF0ZVsxNV1eaW5wdXRbMTVdOyBcCisgICAgWCMjZ28wID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XV5pbnB1dFsxN107IFwKKyAgICBYIyNndTAgPSBzdGF0ZVsxOF1eaW5wdXRbMThdOyBcCisgICAgWCMjZ3UxID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXV5pbnB1dFsyMF07IFwKKyAgICBYIyNrYTEgPSBzdGF0ZVsyMV1eaW5wdXRbMjFdOyBcCisgICAgWCMja2UwID0gc3RhdGVbMjJdXmlucHV0WzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXV5pbnB1dFsyM107IFwKKyAgICBYIyNraTAgPSBzdGF0ZVsyNF1eaW5wdXRbMjRdOyBcCisgICAgWCMja2kxID0gc3RhdGVbMjVdXmlucHV0WzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XV5pbnB1dFsyNl07IFwKKyAgICBYIyNrbzEgPSBzdGF0ZVsyN11eaW5wdXRbMjddOyBcCisgICAgWCMja3UwID0gc3RhdGVbMjhdXmlucHV0WzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XV5pbnB1dFsyOV07IFwKKyAgICBYIyNtYTAgPSBzdGF0ZVszMF1eaW5wdXRbMzBdOyBcCisgICAgWCMjbWExID0gc3RhdGVbMzFdXmlucHV0WzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXV5pbnB1dFszMl07IFwKKyAgICBYIyNtZTEgPSBzdGF0ZVszM11eaW5wdXRbMzNdOyBcCisgICAgWCMjbWkwID0gc3RhdGVbMzRdOyBcCisgICAgWCMjbWkxID0gc3RhdGVbMzVdOyBcCisgICAgWCMjbW8wID0gc3RhdGVbMzZdOyBcCisgICAgWCMjbW8xID0gc3RhdGVbMzddOyBcCisgICAgWCMjbXUwID0gc3RhdGVbMzhdOyBcCisgICAgWCMjbXUxID0gc3RhdGVbMzldOyBcCisgICAgWCMjc2EwID0gc3RhdGVbNDBdOyBcCisgICAgWCMjc2ExID0gc3RhdGVbNDFdOyBcCisgICAgWCMjc2UwID0gc3RhdGVbNDJdOyBcCisgICAgWCMjc2UxID0gc3RhdGVbNDNdOyBcCisgICAgWCMjc2kwID0gc3RhdGVbNDRdOyBcCisgICAgWCMjc2kxID0gc3RhdGVbNDVdOyBcCisgICAgWCMjc28wID0gc3RhdGVbNDZdOyBcCisgICAgWCMjc28xID0gc3RhdGVbNDddOyBcCisgICAgWCMjc3UwID0gc3RhdGVbNDhdOyBcCisgICAgWCMjc3UxID0gc3RhdGVbNDldOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhMCA9IHN0YXRlWyAwXTsgXAorICAgIFgjI2JhMSA9IHN0YXRlWyAxXTsgXAorICAgIFgjI2JlMCA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JlMSA9IHN0YXRlWyAzXTsgXAorICAgIFgjI2JpMCA9IHN0YXRlWyA0XTsgXAorICAgIFgjI2JpMSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2JvMCA9IHN0YXRlWyA2XTsgXAorICAgIFgjI2JvMSA9IHN0YXRlWyA3XTsgXAorICAgIFgjI2J1MCA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2J1MSA9IHN0YXRlWyA5XTsgXAorICAgIFgjI2dhMCA9IHN0YXRlWzEwXTsgXAorICAgIFgjI2dhMSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2dlMCA9IHN0YXRlWzEyXTsgXAorICAgIFgjI2dlMSA9IHN0YXRlWzEzXTsgXAorICAgIFgjI2dpMCA9IHN0YXRlWzE0XTsgXAorICAgIFgjI2dpMSA9IHN0YXRlWzE1XTsgXAorICAgIFgjI2dvMCA9IHN0YXRlWzE2XTsgXAorICAgIFgjI2dvMSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI2d1MCA9IHN0YXRlWzE4XTsgXAorICAgIFgjI2d1MSA9IHN0YXRlWzE5XTsgXAorICAgIFgjI2thMCA9IHN0YXRlWzIwXTsgXAorICAgIFgjI2thMSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI2tlMCA9IHN0YXRlWzIyXTsgXAorICAgIFgjI2tlMSA9IHN0YXRlWzIzXTsgXAorICAgIFgjI2tpMCA9IHN0YXRlWzI0XTsgXAorICAgIFgjI2tpMSA9IHN0YXRlWzI1XTsgXAorICAgIFgjI2tvMCA9IHN0YXRlWzI2XTsgXAorICAgIFgjI2tvMSA9IHN0YXRlWzI3XTsgXAorICAgIFgjI2t1MCA9IHN0YXRlWzI4XTsgXAorICAgIFgjI2t1MSA9IHN0YXRlWzI5XTsgXAorICAgIFgjI21hMCA9IHN0YXRlWzMwXTsgXAorICAgIFgjI21hMSA9IHN0YXRlWzMxXTsgXAorICAgIFgjI21lMCA9IHN0YXRlWzMyXTsgXAorICAgIFgjI21lMSA9IHN0YXRlWzMzXTsgXAorICAgIFgjI21pMCA9IHN0YXRlWzM0XTsgXAorICAgIFgjI21pMSA9IHN0YXRlWzM1XTsgXAorICAgIFgjI21vMCA9IHN0YXRlWzM2XTsgXAorICAgIFgjI21vMSA9IHN0YXRlWzM3XTsgXAorICAgIFgjI211MCA9IHN0YXRlWzM4XTsgXAorICAgIFgjI211MSA9IHN0YXRlWzM5XTsgXAorICAgIFgjI3NhMCA9IHN0YXRlWzQwXTsgXAorICAgIFgjI3NhMSA9IHN0YXRlWzQxXTsgXAorICAgIFgjI3NlMCA9IHN0YXRlWzQyXTsgXAorICAgIFgjI3NlMSA9IHN0YXRlWzQzXTsgXAorICAgIFgjI3NpMCA9IHN0YXRlWzQ0XTsgXAorICAgIFgjI3NpMSA9IHN0YXRlWzQ1XTsgXAorICAgIFgjI3NvMCA9IHN0YXRlWzQ2XTsgXAorICAgIFgjI3NvMSA9IHN0YXRlWzQ3XTsgXAorICAgIFgjI3N1MCA9IHN0YXRlWzQ4XTsgXAorICAgIFgjI3N1MSA9IHN0YXRlWzQ5XTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gWCMjYmEwOyBcCisgICAgc3RhdGVbIDFdID0gWCMjYmExOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmUwOyBcCisgICAgc3RhdGVbIDNdID0gWCMjYmUxOyBcCisgICAgc3RhdGVbIDRdID0gWCMjYmkwOyBcCisgICAgc3RhdGVbIDVdID0gWCMjYmkxOyBcCisgICAgc3RhdGVbIDZdID0gWCMjYm8wOyBcCisgICAgc3RhdGVbIDddID0gWCMjYm8xOyBcCisgICAgc3RhdGVbIDhdID0gWCMjYnUwOyBcCisgICAgc3RhdGVbIDldID0gWCMjYnUxOyBcCisgICAgc3RhdGVbMTBdID0gWCMjZ2EwOyBcCisgICAgc3RhdGVbMTFdID0gWCMjZ2ExOyBcCisgICAgc3RhdGVbMTJdID0gWCMjZ2UwOyBcCisgICAgc3RhdGVbMTNdID0gWCMjZ2UxOyBcCisgICAgc3RhdGVbMTRdID0gWCMjZ2kwOyBcCisgICAgc3RhdGVbMTVdID0gWCMjZ2kxOyBcCisgICAgc3RhdGVbMTZdID0gWCMjZ28wOyBcCisgICAgc3RhdGVbMTddID0gWCMjZ28xOyBcCisgICAgc3RhdGVbMThdID0gWCMjZ3UwOyBcCisgICAgc3RhdGVbMTldID0gWCMjZ3UxOyBcCisgICAgc3RhdGVbMjBdID0gWCMja2EwOyBcCisgICAgc3RhdGVbMjFdID0gWCMja2ExOyBcCisgICAgc3RhdGVbMjJdID0gWCMja2UwOyBcCisgICAgc3RhdGVbMjNdID0gWCMja2UxOyBcCisgICAgc3RhdGVbMjRdID0gWCMja2kwOyBcCisgICAgc3RhdGVbMjVdID0gWCMja2kxOyBcCisgICAgc3RhdGVbMjZdID0gWCMja28wOyBcCisgICAgc3RhdGVbMjddID0gWCMja28xOyBcCisgICAgc3RhdGVbMjhdID0gWCMja3UwOyBcCisgICAgc3RhdGVbMjldID0gWCMja3UxOyBcCisgICAgc3RhdGVbMzBdID0gWCMjbWEwOyBcCisgICAgc3RhdGVbMzFdID0gWCMjbWExOyBcCisgICAgc3RhdGVbMzJdID0gWCMjbWUwOyBcCisgICAgc3RhdGVbMzNdID0gWCMjbWUxOyBcCisgICAgc3RhdGVbMzRdID0gWCMjbWkwOyBcCisgICAgc3RhdGVbMzVdID0gWCMjbWkxOyBcCisgICAgc3RhdGVbMzZdID0gWCMjbW8wOyBcCisgICAgc3RhdGVbMzddID0gWCMjbW8xOyBcCisgICAgc3RhdGVbMzhdID0gWCMjbXUwOyBcCisgICAgc3RhdGVbMzldID0gWCMjbXUxOyBcCisgICAgc3RhdGVbNDBdID0gWCMjc2EwOyBcCisgICAgc3RhdGVbNDFdID0gWCMjc2ExOyBcCisgICAgc3RhdGVbNDJdID0gWCMjc2UwOyBcCisgICAgc3RhdGVbNDNdID0gWCMjc2UxOyBcCisgICAgc3RhdGVbNDRdID0gWCMjc2kwOyBcCisgICAgc3RhdGVbNDVdID0gWCMjc2kxOyBcCisgICAgc3RhdGVbNDZdID0gWCMjc28wOyBcCisgICAgc3RhdGVbNDddID0gWCMjc28xOyBcCisgICAgc3RhdGVbNDhdID0gWCMjc3UwOyBcCisgICAgc3RhdGVbNDldID0gWCMjc3UxOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYTAgPSBZIyNiYTA7IFwKKyAgICBYIyNiYTEgPSBZIyNiYTE7IFwKKyAgICBYIyNiZTAgPSBZIyNiZTA7IFwKKyAgICBYIyNiZTEgPSBZIyNiZTE7IFwKKyAgICBYIyNiaTAgPSBZIyNiaTA7IFwKKyAgICBYIyNiaTEgPSBZIyNiaTE7IFwKKyAgICBYIyNibzAgPSBZIyNibzA7IFwKKyAgICBYIyNibzEgPSBZIyNibzE7IFwKKyAgICBYIyNidTAgPSBZIyNidTA7IFwKKyAgICBYIyNidTEgPSBZIyNidTE7IFwKKyAgICBYIyNnYTAgPSBZIyNnYTA7IFwKKyAgICBYIyNnYTEgPSBZIyNnYTE7IFwKKyAgICBYIyNnZTAgPSBZIyNnZTA7IFwKKyAgICBYIyNnZTEgPSBZIyNnZTE7IFwKKyAgICBYIyNnaTAgPSBZIyNnaTA7IFwKKyAgICBYIyNnaTEgPSBZIyNnaTE7IFwKKyAgICBYIyNnbzAgPSBZIyNnbzA7IFwKKyAgICBYIyNnbzEgPSBZIyNnbzE7IFwKKyAgICBYIyNndTAgPSBZIyNndTA7IFwKKyAgICBYIyNndTEgPSBZIyNndTE7IFwKKyAgICBYIyNrYTAgPSBZIyNrYTA7IFwKKyAgICBYIyNrYTEgPSBZIyNrYTE7IFwKKyAgICBYIyNrZTAgPSBZIyNrZTA7IFwKKyAgICBYIyNrZTEgPSBZIyNrZTE7IFwKKyAgICBYIyNraTAgPSBZIyNraTA7IFwKKyAgICBYIyNraTEgPSBZIyNraTE7IFwKKyAgICBYIyNrbzAgPSBZIyNrbzA7IFwKKyAgICBYIyNrbzEgPSBZIyNrbzE7IFwKKyAgICBYIyNrdTAgPSBZIyNrdTA7IFwKKyAgICBYIyNrdTEgPSBZIyNrdTE7IFwKKyAgICBYIyNtYTAgPSBZIyNtYTA7IFwKKyAgICBYIyNtYTEgPSBZIyNtYTE7IFwKKyAgICBYIyNtZTAgPSBZIyNtZTA7IFwKKyAgICBYIyNtZTEgPSBZIyNtZTE7IFwKKyAgICBYIyNtaTAgPSBZIyNtaTA7IFwKKyAgICBYIyNtaTEgPSBZIyNtaTE7IFwKKyAgICBYIyNtbzAgPSBZIyNtbzA7IFwKKyAgICBYIyNtbzEgPSBZIyNtbzE7IFwKKyAgICBYIyNtdTAgPSBZIyNtdTA7IFwKKyAgICBYIyNtdTEgPSBZIyNtdTE7IFwKKyAgICBYIyNzYTAgPSBZIyNzYTA7IFwKKyAgICBYIyNzYTEgPSBZIyNzYTE7IFwKKyAgICBYIyNzZTAgPSBZIyNzZTA7IFwKKyAgICBYIyNzZTEgPSBZIyNzZTE7IFwKKyAgICBYIyNzaTAgPSBZIyNzaTA7IFwKKyAgICBYIyNzaTEgPSBZIyNzaTE7IFwKKyAgICBYIyNzbzAgPSBZIyNzbzA7IFwKKyAgICBYIyNzbzEgPSBZIyNzbzE7IFwKKyAgICBYIyNzdTAgPSBZIyNzdTA7IFwKKyAgICBYIyNzdTEgPSBZIyNzdTE7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTMyLm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFkZTYwMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC0zMi5tYWNyb3MKQEAgLTAsMCArMSwyNiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZmRlZiBVc2VTY2hlZHVsZQorICAgICNpZiAoVXNlU2NoZWR1bGUgPT0gMSkKKyAgICAgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC0zMi1zMS5tYWNyb3MiCisgICAgI2VsaWYgKFVzZVNjaGVkdWxlID09IDIpCisgICAgICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAtMzItczIubWFjcm9zIgorICAgICNlbGlmIChVc2VTY2hlZHVsZSA9PSAzKQorICAgICAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLXJ2ay5tYWNyb3MiCisgICAgI2Vsc2UKKyAgICAgICAgI2Vycm9yICJUaGlzIHNjaGVkdWxlIGlzIG5vdCBzdXBwb3J0ZWQuIgorICAgICNlbmRpZgorI2Vsc2UKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLXMxLm1hY3JvcyIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLTY0Lm1hY3JvcyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC02NC5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMwZjc4OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC02NC5tYWNyb3MKQEAgLTAsMCArMSw3MjggQEAKKy8qCitDb2RlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IEtlY2Nha1Rvb2xzIQorCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjZGVmaW5lIGRlY2xhcmVBQkNERSBcCisgICAgVUlOVDY0IEFiYSwgQWJlLCBBYmksIEFibywgQWJ1OyBcCisgICAgVUlOVDY0IEFnYSwgQWdlLCBBZ2ksIEFnbywgQWd1OyBcCisgICAgVUlOVDY0IEFrYSwgQWtlLCBBa2ksIEFrbywgQWt1OyBcCisgICAgVUlOVDY0IEFtYSwgQW1lLCBBbWksIEFtbywgQW11OyBcCisgICAgVUlOVDY0IEFzYSwgQXNlLCBBc2ksIEFzbywgQXN1OyBcCisgICAgVUlOVDY0IEJiYSwgQmJlLCBCYmksIEJibywgQmJ1OyBcCisgICAgVUlOVDY0IEJnYSwgQmdlLCBCZ2ksIEJnbywgQmd1OyBcCisgICAgVUlOVDY0IEJrYSwgQmtlLCBCa2ksIEJrbywgQmt1OyBcCisgICAgVUlOVDY0IEJtYSwgQm1lLCBCbWksIEJtbywgQm11OyBcCisgICAgVUlOVDY0IEJzYSwgQnNlLCBCc2ksIEJzbywgQnN1OyBcCisgICAgVUlOVDY0IENhLCBDZSwgQ2ksIENvLCBDdTsgXAorICAgIFVJTlQ2NCBEYSwgRGUsIERpLCBEbywgRHU7IFwKKyAgICBVSU5UNjQgRWJhLCBFYmUsIEViaSwgRWJvLCBFYnU7IFwKKyAgICBVSU5UNjQgRWdhLCBFZ2UsIEVnaSwgRWdvLCBFZ3U7IFwKKyAgICBVSU5UNjQgRWthLCBFa2UsIEVraSwgRWtvLCBFa3U7IFwKKyAgICBVSU5UNjQgRW1hLCBFbWUsIEVtaSwgRW1vLCBFbXU7IFwKKyAgICBVSU5UNjQgRXNhLCBFc2UsIEVzaSwgRXNvLCBFc3U7IFwKKworI2RlZmluZSBwcmVwYXJlVGhldGEgXAorICAgIENhID0gQWJhXkFnYV5Ba2FeQW1hXkFzYTsgXAorICAgIENlID0gQWJlXkFnZV5Ba2VeQW1lXkFzZTsgXAorICAgIENpID0gQWJpXkFnaV5Ba2leQW1pXkFzaTsgXAorICAgIENvID0gQWJvXkFnb15Ba29eQW1vXkFzbzsgXAorICAgIEN1ID0gQWJ1XkFndV5Ba3VeQW11XkFzdTsgXAorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kLCB3aXRoIHByZXBhcmUtdGhldGEgKGxhbmUgY29tcGxlbWVudGluZyBwYXR0ZXJuICdiZWJpZ29raW1pc2EnKSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgRGEgPSBDdV5ST0w2NChDZSwgMSk7IFwKKyAgICBEZSA9IENhXlJPTDY0KENpLCAxKTsgXAorICAgIERpID0gQ2VeUk9MNjQoQ28sIDEpOyBcCisgICAgRG8gPSBDaV5ST0w2NChDdSwgMSk7IFwKKyAgICBEdSA9IENvXlJPTDY0KENhLCAxKTsgXAorXAorICAgIEEjI2JhIF49IERhOyBcCisgICAgQmJhID0gQSMjYmE7IFwKKyAgICBBIyNnZSBePSBEZTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBBIyNraSBePSBEaTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBBIyNtbyBePSBEbzsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBBIyNzdSBePSBEdTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiYSA9ICAgQmJhIF4oICBCYmUgfCAgQmJpICk7IFwKKyAgICBFIyNiYSBePSBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldOyBcCisgICAgQ2EgPSBFIyNiYTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSl8ICBCYm8gKTsgXAorICAgIENlID0gRSMjYmU7IFwKKyAgICBFIyNiaSA9ICAgQmJpIF4oICBCYm8gJiAgQmJ1ICk7IFwKKyAgICBDaSA9IEUjI2JpOyBcCisgICAgRSMjYm8gPSAgIEJibyBeKCAgQmJ1IHwgIEJiYSApOyBcCisgICAgQ28gPSBFIyNibzsgXAorICAgIEUjI2J1ID0gICBCYnUgXiggIEJiYSAmICBCYmUgKTsgXAorICAgIEN1ID0gRSMjYnU7IFwKK1wKKyAgICBBIyNibyBePSBEbzsgXAorICAgIEJnYSA9IFJPTDY0KEEjI2JvLCAyOCk7IFwKKyAgICBBIyNndSBePSBEdTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBBIyNrYSBePSBEYTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEEjI21lIF49IERlOyBcCisgICAgQmdvID0gUk9MNjQoQSMjbWUsIDQ1KTsgXAorICAgIEEjI3NpIF49IERpOyBcCisgICAgQmd1ID0gUk9MNjQoQSMjc2ksIDYxKTsgXAorICAgIEUjI2dhID0gICBCZ2EgXiggIEJnZSB8ICBCZ2kgKTsgXAorICAgIENhIF49IEUjI2dhOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCAgQmdpICYgIEJnbyApOyBcCisgICAgQ2UgXj0gRSMjZ2U7IFwKKyAgICBFIyNnaSA9ICAgQmdpIF4oICBCZ28gfCh+Qmd1KSk7IFwKKyAgICBDaSBePSBFIyNnaTsgXAorICAgIEUjI2dvID0gICBCZ28gXiggIEJndSB8ICBCZ2EgKTsgXAorICAgIENvIF49IEUjI2dvOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCAgQmdhICYgIEJnZSApOyBcCisgICAgQ3UgXj0gRSMjZ3U7IFwKK1wKKyAgICBBIyNiZSBePSBEZTsgXAorICAgIEJrYSA9IFJPTDY0KEEjI2JlLCAxKTsgXAorICAgIEEjI2dpIF49IERpOyBcCisgICAgQmtlID0gUk9MNjQoQSMjZ2ksIDYpOyBcCisgICAgQSMja28gXj0gRG87IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgQSMjbXUgXj0gRHU7IFwKKyAgICBCa28gPSBST0w2NChBIyNtdSwgOCk7IFwKKyAgICBBIyNzYSBePSBEYTsgXAorICAgIEJrdSA9IFJPTDY0KEEjI3NhLCAxOCk7IFwKKyAgICBFIyNrYSA9ICAgQmthIF4oICBCa2UgfCAgQmtpICk7IFwKKyAgICBDYSBePSBFIyNrYTsgXAorICAgIEUjI2tlID0gICBCa2UgXiggIEJraSAmICBCa28gKTsgXAorICAgIENlIF49IEUjI2tlOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgQ2kgXj0gRSMja2k7IFwKKyAgICBFIyNrbyA9ICh+QmtvKV4oICBCa3UgfCAgQmthICk7IFwKKyAgICBDbyBePSBFIyNrbzsgXAorICAgIEUjI2t1ID0gICBCa3UgXiggIEJrYSAmICBCa2UgKTsgXAorICAgIEN1IF49IEUjI2t1OyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCAgQm1lICYgIEJtaSApOyBcCisgICAgQ2EgXj0gRSMjbWE7IFwKKyAgICBFIyNtZSA9ICAgQm1lIF4oICBCbWkgfCAgQm1vICk7IFwKKyAgICBDZSBePSBFIyNtZTsgXAorICAgIEUjI21pID0gICBCbWkgXigofkJtbyl8ICBCbXUgKTsgXAorICAgIENpIF49IEUjI21pOyBcCisgICAgRSMjbW8gPSAofkJtbyleKCAgQm11ICYgIEJtYSApOyBcCisgICAgQ28gXj0gRSMjbW87IFwKKyAgICBFIyNtdSA9ICAgQm11IF4oICBCbWEgfCAgQm1lICk7IFwKKyAgICBDdSBePSBFIyNtdTsgXAorXAorICAgIEEjI2JpIF49IERpOyBcCisgICAgQnNhID0gUk9MNjQoQSMjYmksIDYyKTsgXAorICAgIEEjI2dvIF49IERvOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIEEjI2t1IF49IER1OyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEEjI21hIF49IERhOyBcCisgICAgQnNvID0gUk9MNjQoQSMjbWEsIDQxKTsgXAorICAgIEEjI3NlIF49IERlOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2EgPSAgIEJzYSBeKCh+QnNlKSYgIEJzaSApOyBcCisgICAgQ2EgXj0gRSMjc2E7IFwKKyAgICBFIyNzZSA9ICh+QnNlKV4oICBCc2kgfCAgQnNvICk7IFwKKyAgICBDZSBePSBFIyNzZTsgXAorICAgIEUjI3NpID0gICBCc2kgXiggIEJzbyAmICBCc3UgKTsgXAorICAgIENpIF49IEUjI3NpOyBcCisgICAgRSMjc28gPSAgIEJzbyBeKCAgQnN1IHwgIEJzYSApOyBcCisgICAgQ28gXj0gRSMjc287IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oICBCc2EgJiAgQnNlICk7IFwKKyAgICBDdSBePSBFIyNzdTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kIChsYW5lIGNvbXBsZW1lbnRpbmcgcGF0dGVybiAnYmViaWdva2ltaXNhJykgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhID0gQ3VeUk9MNjQoQ2UsIDEpOyBcCisgICAgRGUgPSBDYV5ST0w2NChDaSwgMSk7IFwKKyAgICBEaSA9IENlXlJPTDY0KENvLCAxKTsgXAorICAgIERvID0gQ2leUk9MNjQoQ3UsIDEpOyBcCisgICAgRHUgPSBDb15ST0w2NChDYSwgMSk7IFwKK1wKKyAgICBBIyNiYSBePSBEYTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgQSMjZ2UgXj0gRGU7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2kgXj0gRGk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgQSMjbW8gXj0gRG87IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgQSMjc3UgXj0gRHU7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmEgPSAgIEJiYSBeKCAgQmJlIHwgIEJiaSApOyBcCisgICAgRSMjYmEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSl8ICBCYm8gKTsgXAorICAgIEUjI2JpID0gICBCYmkgXiggIEJibyAmICBCYnUgKTsgXAorICAgIEUjI2JvID0gICBCYm8gXiggIEJidSB8ICBCYmEgKTsgXAorICAgIEUjI2J1ID0gICBCYnUgXiggIEJiYSAmICBCYmUgKTsgXAorXAorICAgIEEjI2JvIF49IERvOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEEjI2d1IF49IER1OyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIEEjI2thIF49IERhOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQSMjbWUgXj0gRGU7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQSMjc2kgXj0gRGk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2EgPSAgIEJnYSBeKCAgQmdlIHwgIEJnaSApOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCAgQmdpICYgIEJnbyApOyBcCisgICAgRSMjZ2kgPSAgIEJnaSBeKCAgQmdvIHwofkJndSkpOyBcCisgICAgRSMjZ28gPSAgIEJnbyBeKCAgQmd1IHwgIEJnYSApOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCAgQmdhICYgIEJnZSApOyBcCitcCisgICAgQSMjYmUgXj0gRGU7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBBIyNnaSBePSBEaTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tvIF49IERvOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI211IF49IER1OyBcCisgICAgQmtvID0gUk9MNjQoQSMjbXUsIDgpOyBcCisgICAgQSMjc2EgXj0gRGE7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2EgPSAgIEJrYSBeKCAgQmtlIHwgIEJraSApOyBcCisgICAgRSMja2UgPSAgIEJrZSBeKCAgQmtpICYgIEJrbyApOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgRSMja28gPSAofkJrbyleKCAgQmt1IHwgIEJrYSApOyBcCisgICAgRSMja3UgPSAgIEJrdSBeKCAgQmthICYgIEJrZSApOyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCAgQm1lICYgIEJtaSApOyBcCisgICAgRSMjbWUgPSAgIEJtZSBeKCAgQm1pIHwgIEJtbyApOyBcCisgICAgRSMjbWkgPSAgIEJtaSBeKCh+Qm1vKXwgIEJtdSApOyBcCisgICAgRSMjbW8gPSAofkJtbyleKCAgQm11ICYgIEJtYSApOyBcCisgICAgRSMjbXUgPSAgIEJtdSBeKCAgQm1hIHwgIEJtZSApOyBcCitcCisgICAgQSMjYmkgXj0gRGk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgQSMjZ28gXj0gRG87IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgQSMja3UgXj0gRHU7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgQSMjbWEgXj0gRGE7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgQSMjc2UgXj0gRGU7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzYSA9ICAgQnNhIF4oKH5Cc2UpJiAgQnNpICk7IFwKKyAgICBFIyNzZSA9ICh+QnNlKV4oICBCc2kgfCAgQnNvICk7IFwKKyAgICBFIyNzaSA9ICAgQnNpIF4oICBCc28gJiAgQnN1ICk7IFwKKyAgICBFIyNzbyA9ICAgQnNvIF4oICBCc3UgfCAgQnNhICk7IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oICBCc2EgJiAgQnNlICk7IFwKK1wKKworI2Vsc2UgLyogIFVzZUJlYmlnb2tpbWlzYSAqLworLyogIC0tLSBDb2RlIGZvciByb3VuZCwgd2l0aCBwcmVwYXJlLXRoZXRhICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGksIEEsIEUpIFwKKyAgICBEYSA9IEN1XlJPTDY0KENlLCAxKTsgXAorICAgIERlID0gQ2FeUk9MNjQoQ2ksIDEpOyBcCisgICAgRGkgPSBDZV5ST0w2NChDbywgMSk7IFwKKyAgICBEbyA9IENpXlJPTDY0KEN1LCAxKTsgXAorICAgIER1ID0gQ29eUk9MNjQoQ2EsIDEpOyBcCitcCisgICAgQSMjYmEgXj0gRGE7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIEEjI2dlIF49IERlOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIEEjI2tpIF49IERpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21vIF49IERvOyBcCisgICAgQmJvID0gUk9MNjQoQSMjbW8sIDIxKTsgXAorICAgIEEjI3N1IF49IER1OyBcCisgICAgQmJ1ID0gUk9MNjQoQSMjc3UsIDE0KTsgXAorICAgIEUjI2JhID0gICBCYmEgXigofkJiZSkmICBCYmkgKTsgXAorICAgIEUjI2JhIF49IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV07IFwKKyAgICBDYSA9IEUjI2JhOyBcCisgICAgRSMjYmUgPSAgIEJiZSBeKCh+QmJpKSYgIEJibyApOyBcCisgICAgQ2UgPSBFIyNiZTsgXAorICAgIEUjI2JpID0gICBCYmkgXigofkJibykmICBCYnUgKTsgXAorICAgIENpID0gRSMjYmk7IFwKKyAgICBFIyNibyA9ICAgQmJvIF4oKH5CYnUpJiAgQmJhICk7IFwKKyAgICBDbyA9IEUjI2JvOyBcCisgICAgRSMjYnUgPSAgIEJidSBeKCh+QmJhKSYgIEJiZSApOyBcCisgICAgQ3UgPSBFIyNidTsgXAorXAorICAgIEEjI2JvIF49IERvOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEEjI2d1IF49IER1OyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIEEjI2thIF49IERhOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQSMjbWUgXj0gRGU7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQSMjc2kgXj0gRGk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2EgPSAgIEJnYSBeKCh+QmdlKSYgIEJnaSApOyBcCisgICAgQ2EgXj0gRSMjZ2E7IFwKKyAgICBFIyNnZSA9ICAgQmdlIF4oKH5CZ2kpJiAgQmdvICk7IFwKKyAgICBDZSBePSBFIyNnZTsgXAorICAgIEUjI2dpID0gICBCZ2kgXigofkJnbykmICBCZ3UgKTsgXAorICAgIENpIF49IEUjI2dpOyBcCisgICAgRSMjZ28gPSAgIEJnbyBeKCh+Qmd1KSYgIEJnYSApOyBcCisgICAgQ28gXj0gRSMjZ287IFwKKyAgICBFIyNndSA9ICAgQmd1IF4oKH5CZ2EpJiAgQmdlICk7IFwKKyAgICBDdSBePSBFIyNndTsgXAorXAorICAgIEEjI2JlIF49IERlOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgQSMjZ2kgXj0gRGk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBBIyNrbyBePSBEbzsgXAorICAgIEJraSA9IFJPTDY0KEEjI2tvLCAyNSk7IFwKKyAgICBBIyNtdSBePSBEdTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEEjI3NhIF49IERhOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIEUjI2thID0gICBCa2EgXigofkJrZSkmICBCa2kgKTsgXAorICAgIENhIF49IEUjI2thOyBcCisgICAgRSMja2UgPSAgIEJrZSBeKCh+QmtpKSYgIEJrbyApOyBcCisgICAgQ2UgXj0gRSMja2U7IFwKKyAgICBFIyNraSA9ICAgQmtpIF4oKH5Ca28pJiAgQmt1ICk7IFwKKyAgICBDaSBePSBFIyNraTsgXAorICAgIEUjI2tvID0gICBCa28gXigofkJrdSkmICBCa2EgKTsgXAorICAgIENvIF49IEUjI2tvOyBcCisgICAgRSMja3UgPSAgIEJrdSBeKCh+QmthKSYgIEJrZSApOyBcCisgICAgQ3UgXj0gRSMja3U7IFwKK1wKKyAgICBBIyNidSBePSBEdTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBBIyNnYSBePSBEYTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBBIyNrZSBePSBEZTsgXAorICAgIEJtaSA9IFJPTDY0KEEjI2tlLCAxMCk7IFwKKyAgICBBIyNtaSBePSBEaTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBBIyNzbyBePSBEbzsgXAorICAgIEJtdSA9IFJPTDY0KEEjI3NvLCA1Nik7IFwKKyAgICBFIyNtYSA9ICAgQm1hIF4oKH5CbWUpJiAgQm1pICk7IFwKKyAgICBDYSBePSBFIyNtYTsgXAorICAgIEUjI21lID0gICBCbWUgXigofkJtaSkmICBCbW8gKTsgXAorICAgIENlIF49IEUjI21lOyBcCisgICAgRSMjbWkgPSAgIEJtaSBeKCh+Qm1vKSYgIEJtdSApOyBcCisgICAgQ2kgXj0gRSMjbWk7IFwKKyAgICBFIyNtbyA9ICAgQm1vIF4oKH5CbXUpJiAgQm1hICk7IFwKKyAgICBDbyBePSBFIyNtbzsgXAorICAgIEUjI211ID0gICBCbXUgXigofkJtYSkmICBCbWUgKTsgXAorICAgIEN1IF49IEUjI211OyBcCitcCisgICAgQSMjYmkgXj0gRGk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgQSMjZ28gXj0gRG87IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgQSMja3UgXj0gRHU7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgQSMjbWEgXj0gRGE7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgQSMjc2UgXj0gRGU7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzYSA9ICAgQnNhIF4oKH5Cc2UpJiAgQnNpICk7IFwKKyAgICBDYSBePSBFIyNzYTsgXAorICAgIEUjI3NlID0gICBCc2UgXigofkJzaSkmICBCc28gKTsgXAorICAgIENlIF49IEUjI3NlOyBcCisgICAgRSMjc2kgPSAgIEJzaSBeKCh+QnNvKSYgIEJzdSApOyBcCisgICAgQ2kgXj0gRSMjc2k7IFwKKyAgICBFIyNzbyA9ICAgQnNvIF4oKH5Cc3UpJiAgQnNhICk7IFwKKyAgICBDbyBePSBFIyNzbzsgXAorICAgIEUjI3N1ID0gICBCc3UgXigofkJzYSkmICBCc2UgKTsgXAorICAgIEN1IF49IEUjI3N1OyBcCitcCisKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgXAorICAgIERhID0gQ3VeUk9MNjQoQ2UsIDEpOyBcCisgICAgRGUgPSBDYV5ST0w2NChDaSwgMSk7IFwKKyAgICBEaSA9IENlXlJPTDY0KENvLCAxKTsgXAorICAgIERvID0gQ2leUk9MNjQoQ3UsIDEpOyBcCisgICAgRHUgPSBDb15ST0w2NChDYSwgMSk7IFwKK1wKKyAgICBBIyNiYSBePSBEYTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgQSMjZ2UgXj0gRGU7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2kgXj0gRGk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgQSMjbW8gXj0gRG87IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgQSMjc3UgXj0gRHU7IFwKKyAgICBCYnUgPSBST0w2NChBIyNzdSwgMTQpOyBcCisgICAgRSMjYmEgPSAgIEJiYSBeKCh+QmJlKSYgIEJiaSApOyBcCisgICAgRSMjYmEgXj0gS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXTsgXAorICAgIEUjI2JlID0gICBCYmUgXigofkJiaSkmICBCYm8gKTsgXAorICAgIEUjI2JpID0gICBCYmkgXigofkJibykmICBCYnUgKTsgXAorICAgIEUjI2JvID0gICBCYm8gXigofkJidSkmICBCYmEgKTsgXAorICAgIEUjI2J1ID0gICBCYnUgXigofkJiYSkmICBCYmUgKTsgXAorXAorICAgIEEjI2JvIF49IERvOyBcCisgICAgQmdhID0gUk9MNjQoQSMjYm8sIDI4KTsgXAorICAgIEEjI2d1IF49IER1OyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIEEjI2thIF49IERhOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQSMjbWUgXj0gRGU7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgQSMjc2kgXj0gRGk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgRSMjZ2EgPSAgIEJnYSBeKCh+QmdlKSYgIEJnaSApOyBcCisgICAgRSMjZ2UgPSAgIEJnZSBeKCh+QmdpKSYgIEJnbyApOyBcCisgICAgRSMjZ2kgPSAgIEJnaSBeKCh+QmdvKSYgIEJndSApOyBcCisgICAgRSMjZ28gPSAgIEJnbyBeKCh+Qmd1KSYgIEJnYSApOyBcCisgICAgRSMjZ3UgPSAgIEJndSBeKCh+QmdhKSYgIEJnZSApOyBcCitcCisgICAgQSMjYmUgXj0gRGU7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBBIyNnaSBePSBEaTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tvIF49IERvOyBcCisgICAgQmtpID0gUk9MNjQoQSMja28sIDI1KTsgXAorICAgIEEjI211IF49IER1OyBcCisgICAgQmtvID0gUk9MNjQoQSMjbXUsIDgpOyBcCisgICAgQSMjc2EgXj0gRGE7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2EgPSAgIEJrYSBeKCh+QmtlKSYgIEJraSApOyBcCisgICAgRSMja2UgPSAgIEJrZSBeKCh+QmtpKSYgIEJrbyApOyBcCisgICAgRSMja2kgPSAgIEJraSBeKCh+QmtvKSYgIEJrdSApOyBcCisgICAgRSMja28gPSAgIEJrbyBeKCh+Qmt1KSYgIEJrYSApOyBcCisgICAgRSMja3UgPSAgIEJrdSBeKCh+QmthKSYgIEJrZSApOyBcCitcCisgICAgQSMjYnUgXj0gRHU7IFwKKyAgICBCbWEgPSBST0w2NChBIyNidSwgMjcpOyBcCisgICAgQSMjZ2EgXj0gRGE7IFwKKyAgICBCbWUgPSBST0w2NChBIyNnYSwgMzYpOyBcCisgICAgQSMja2UgXj0gRGU7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgQSMjbWkgXj0gRGk7IFwKKyAgICBCbW8gPSBST0w2NChBIyNtaSwgMTUpOyBcCisgICAgQSMjc28gXj0gRG87IFwKKyAgICBCbXUgPSBST0w2NChBIyNzbywgNTYpOyBcCisgICAgRSMjbWEgPSAgIEJtYSBeKCh+Qm1lKSYgIEJtaSApOyBcCisgICAgRSMjbWUgPSAgIEJtZSBeKCh+Qm1pKSYgIEJtbyApOyBcCisgICAgRSMjbWkgPSAgIEJtaSBeKCh+Qm1vKSYgIEJtdSApOyBcCisgICAgRSMjbW8gPSAgIEJtbyBeKCh+Qm11KSYgIEJtYSApOyBcCisgICAgRSMjbXUgPSAgIEJtdSBeKCh+Qm1hKSYgIEJtZSApOyBcCitcCisgICAgQSMjYmkgXj0gRGk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgQSMjZ28gXj0gRG87IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgQSMja3UgXj0gRHU7IFwKKyAgICBCc2kgPSBST0w2NChBIyNrdSwgMzkpOyBcCisgICAgQSMjbWEgXj0gRGE7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgQSMjc2UgXj0gRGU7IFwKKyAgICBCc3UgPSBST0w2NChBIyNzZSwgMik7IFwKKyAgICBFIyNzYSA9ICAgQnNhIF4oKH5Cc2UpJiAgQnNpICk7IFwKKyAgICBFIyNzZSA9ICAgQnNlIF4oKH5Cc2kpJiAgQnNvICk7IFwKKyAgICBFIyNzaSA9ICAgQnNpIF4oKH5Cc28pJiAgQnN1ICk7IFwKKyAgICBFIyNzbyA9ICAgQnNvIF4oKH5Cc3UpJiAgQnNhICk7IFwKKyAgICBFIyNzdSA9ICAgQnN1IF4oKH5Cc2EpJiAgQnNlICk7IFwKK1wKKworI2VuZGlmIC8qICBVc2VCZWJpZ29raW1pc2EgKi8KKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBzdGF0ZVsgMF1eaW5wdXRbIDBdOyBcCisgICAgWCMjYmUgPSBzdGF0ZVsgMV1eaW5wdXRbIDFdOyBcCisgICAgWCMjYmkgPSBzdGF0ZVsgMl1eaW5wdXRbIDJdOyBcCisgICAgWCMjYm8gPSBzdGF0ZVsgM11eaW5wdXRbIDNdOyBcCisgICAgWCMjYnUgPSBzdGF0ZVsgNF1eaW5wdXRbIDRdOyBcCisgICAgWCMjZ2EgPSBzdGF0ZVsgNV1eaW5wdXRbIDVdOyBcCisgICAgWCMjZ2UgPSBzdGF0ZVsgNl1eaW5wdXRbIDZdOyBcCisgICAgWCMjZ2kgPSBzdGF0ZVsgN11eaW5wdXRbIDddOyBcCisgICAgWCMjZ28gPSBzdGF0ZVsgOF1eaW5wdXRbIDhdOyBcCisgICAgWCMjZ3UgPSBzdGF0ZVsgOV1eaW5wdXRbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF1eaW5wdXRbMTBdOyBcCisgICAgWCMja2UgPSBzdGF0ZVsxMV1eaW5wdXRbMTFdOyBcCisgICAgWCMja2kgPSBzdGF0ZVsxMl1eaW5wdXRbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwMjRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2t1ID0gc3RhdGVbMTRdXmlucHV0WzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdOyBcCisgICAgWCMjbWkgPSBzdGF0ZVsxN107IFwKKyAgICBYIyNtbyA9IHN0YXRlWzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldOyBcCisgICAgWCMjc2EgPSBzdGF0ZVsyMF07IFwKKyAgICBYIyNzZSA9IHN0YXRlWzIxXTsgXAorICAgIFgjI3NpID0gc3RhdGVbMjJdOyBcCisgICAgWCMjc28gPSBzdGF0ZVsyM107IFwKKyAgICBYIyNzdSA9IHN0YXRlWzI0XTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDg4Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IHN0YXRlWyAwXV5pbnB1dFsgMF07IFwKKyAgICBYIyNiZSA9IHN0YXRlWyAxXV5pbnB1dFsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXV5pbnB1dFsgMl07IFwKKyAgICBYIyNibyA9IHN0YXRlWyAzXV5pbnB1dFsgM107IFwKKyAgICBYIyNidSA9IHN0YXRlWyA0XV5pbnB1dFsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XV5pbnB1dFsgNV07IFwKKyAgICBYIyNnZSA9IHN0YXRlWyA2XV5pbnB1dFsgNl07IFwKKyAgICBYIyNnaSA9IHN0YXRlWyA3XV5pbnB1dFsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XV5pbnB1dFsgOF07IFwKKyAgICBYIyNndSA9IHN0YXRlWyA5XV5pbnB1dFsgOV07IFwKKyAgICBYIyNrYSA9IHN0YXRlWzEwXV5pbnB1dFsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXV5pbnB1dFsxMV07IFwKKyAgICBYIyNraSA9IHN0YXRlWzEyXV5pbnB1dFsxMl07IFwKKyAgICBYIyNrbyA9IHN0YXRlWzEzXV5pbnB1dFsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XV5pbnB1dFsxNF07IFwKKyAgICBYIyNtYSA9IHN0YXRlWzE1XV5pbnB1dFsxNV07IFwKKyAgICBYIyNtZSA9IHN0YXRlWzE2XV5pbnB1dFsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjExNTJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2t1ID0gc3RhdGVbMTRdXmlucHV0WzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI21pID0gc3RhdGVbMTddXmlucHV0WzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEzNDRiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdXmlucHV0WyAwXTsgXAorICAgIFgjI2JlID0gc3RhdGVbIDFdXmlucHV0WyAxXTsgXAorICAgIFgjI2JpID0gc3RhdGVbIDJdXmlucHV0WyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdXmlucHV0WyAzXTsgXAorICAgIFgjI2J1ID0gc3RhdGVbIDRdXmlucHV0WyA0XTsgXAorICAgIFgjI2dhID0gc3RhdGVbIDVdXmlucHV0WyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdXmlucHV0WyA2XTsgXAorICAgIFgjI2dpID0gc3RhdGVbIDddXmlucHV0WyA3XTsgXAorICAgIFgjI2dvID0gc3RhdGVbIDhdXmlucHV0WyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldXmlucHV0WyA5XTsgXAorICAgIFgjI2thID0gc3RhdGVbMTBdXmlucHV0WzEwXTsgXAorICAgIFgjI2tlID0gc3RhdGVbMTFdXmlucHV0WzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdXmlucHV0WzEyXTsgXAorICAgIFgjI2tvID0gc3RhdGVbMTNdXmlucHV0WzEzXTsgXAorICAgIFgjI2t1ID0gc3RhdGVbMTRdXmlucHV0WzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdXmlucHV0WzE1XTsgXAorICAgIFgjI21lID0gc3RhdGVbMTZdXmlucHV0WzE2XTsgXAorICAgIFgjI21pID0gc3RhdGVbMTddXmlucHV0WzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdXmlucHV0WzE4XTsgXAorICAgIFgjI211ID0gc3RhdGVbMTldXmlucHV0WzE5XTsgXAorICAgIFgjI3NhID0gc3RhdGVbMjBdXmlucHV0WzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhID0gc3RhdGVbIDBdOyBcCisgICAgWCMjYmUgPSBzdGF0ZVsgMV07IFwKKyAgICBYIyNiaSA9IHN0YXRlWyAyXTsgXAorICAgIFgjI2JvID0gc3RhdGVbIDNdOyBcCisgICAgWCMjYnUgPSBzdGF0ZVsgNF07IFwKKyAgICBYIyNnYSA9IHN0YXRlWyA1XTsgXAorICAgIFgjI2dlID0gc3RhdGVbIDZdOyBcCisgICAgWCMjZ2kgPSBzdGF0ZVsgN107IFwKKyAgICBYIyNnbyA9IHN0YXRlWyA4XTsgXAorICAgIFgjI2d1ID0gc3RhdGVbIDldOyBcCisgICAgWCMja2EgPSBzdGF0ZVsxMF07IFwKKyAgICBYIyNrZSA9IHN0YXRlWzExXTsgXAorICAgIFgjI2tpID0gc3RhdGVbMTJdOyBcCisgICAgWCMja28gPSBzdGF0ZVsxM107IFwKKyAgICBYIyNrdSA9IHN0YXRlWzE0XTsgXAorICAgIFgjI21hID0gc3RhdGVbMTVdOyBcCisgICAgWCMjbWUgPSBzdGF0ZVsxNl07IFwKKyAgICBYIyNtaSA9IHN0YXRlWzE3XTsgXAorICAgIFgjI21vID0gc3RhdGVbMThdOyBcCisgICAgWCMjbXUgPSBzdGF0ZVsxOV07IFwKKyAgICBYIyNzYSA9IHN0YXRlWzIwXTsgXAorICAgIFgjI3NlID0gc3RhdGVbMjFdOyBcCisgICAgWCMjc2kgPSBzdGF0ZVsyMl07IFwKKyAgICBYIyNzbyA9IHN0YXRlWzIzXTsgXAorICAgIFgjI3N1ID0gc3RhdGVbMjRdOyBcCisKKyNkZWZpbmUgY29weVRvU3RhdGUoc3RhdGUsIFgpIFwKKyAgICBzdGF0ZVsgMF0gPSBYIyNiYTsgXAorICAgIHN0YXRlWyAxXSA9IFgjI2JlOyBcCisgICAgc3RhdGVbIDJdID0gWCMjYmk7IFwKKyAgICBzdGF0ZVsgM10gPSBYIyNibzsgXAorICAgIHN0YXRlWyA0XSA9IFgjI2J1OyBcCisgICAgc3RhdGVbIDVdID0gWCMjZ2E7IFwKKyAgICBzdGF0ZVsgNl0gPSBYIyNnZTsgXAorICAgIHN0YXRlWyA3XSA9IFgjI2dpOyBcCisgICAgc3RhdGVbIDhdID0gWCMjZ287IFwKKyAgICBzdGF0ZVsgOV0gPSBYIyNndTsgXAorICAgIHN0YXRlWzEwXSA9IFgjI2thOyBcCisgICAgc3RhdGVbMTFdID0gWCMja2U7IFwKKyAgICBzdGF0ZVsxMl0gPSBYIyNraTsgXAorICAgIHN0YXRlWzEzXSA9IFgjI2tvOyBcCisgICAgc3RhdGVbMTRdID0gWCMja3U7IFwKKyAgICBzdGF0ZVsxNV0gPSBYIyNtYTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI21lOyBcCisgICAgc3RhdGVbMTddID0gWCMjbWk7IFwKKyAgICBzdGF0ZVsxOF0gPSBYIyNtbzsgXAorICAgIHN0YXRlWzE5XSA9IFgjI211OyBcCisgICAgc3RhdGVbMjBdID0gWCMjc2E7IFwKKyAgICBzdGF0ZVsyMV0gPSBYIyNzZTsgXAorICAgIHN0YXRlWzIyXSA9IFgjI3NpOyBcCisgICAgc3RhdGVbMjNdID0gWCMjc287IFwKKyAgICBzdGF0ZVsyNF0gPSBYIyNzdTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmEgPSBZIyNiYTsgXAorICAgIFgjI2JlID0gWSMjYmU7IFwKKyAgICBYIyNiaSA9IFkjI2JpOyBcCisgICAgWCMjYm8gPSBZIyNibzsgXAorICAgIFgjI2J1ID0gWSMjYnU7IFwKKyAgICBYIyNnYSA9IFkjI2dhOyBcCisgICAgWCMjZ2UgPSBZIyNnZTsgXAorICAgIFgjI2dpID0gWSMjZ2k7IFwKKyAgICBYIyNnbyA9IFkjI2dvOyBcCisgICAgWCMjZ3UgPSBZIyNndTsgXAorICAgIFgjI2thID0gWSMja2E7IFwKKyAgICBYIyNrZSA9IFkjI2tlOyBcCisgICAgWCMja2kgPSBZIyNraTsgXAorICAgIFgjI2tvID0gWSMja287IFwKKyAgICBYIyNrdSA9IFkjI2t1OyBcCisgICAgWCMjbWEgPSBZIyNtYTsgXAorICAgIFgjI21lID0gWSMjbWU7IFwKKyAgICBYIyNtaSA9IFkjI21pOyBcCisgICAgWCMjbW8gPSBZIyNtbzsgXAorICAgIFgjI211ID0gWSMjbXU7IFwKKyAgICBYIyNzYSA9IFkjI3NhOyBcCisgICAgWCMjc2UgPSBZIyNzZTsgXAorICAgIFgjI3NpID0gWSMjc2k7IFwKKyAgICBYIyNzbyA9IFkjI3NvOyBcCisgICAgWCMjc3UgPSBZIyNzdTsgXAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50LXNldC5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludC1zZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWQxZDgwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLWludC1zZXQuaApAQCAtMCwwICsxLDYgQEAKKyNkZWZpbmUgUHJvdmlkZUZhc3Q1NzYKKyNkZWZpbmUgUHJvdmlkZUZhc3Q4MzIKKyNkZWZpbmUgUHJvdmlkZUZhc3QxMDI0CisjZGVmaW5lIFByb3ZpZGVGYXN0MTA4OAorI2RlZmluZSBQcm92aWRlRmFzdDExNTIKKyNkZWZpbmUgUHJvdmlkZUZhc3QxMzQ0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2UyNzEwZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaApAQCAtMCwwICsxLDQ2IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2lmbmRlZiBfS2VjY2FrUGVybXV0YXRpb25JbnRlcmZhY2VfaF8KKyNkZWZpbmUgX0tlY2Nha1Blcm11dGF0aW9uSW50ZXJmYWNlX2hfCisKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50LXNldC5oIgorCitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplKCB2b2lkICk7CitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplU3RhdGUodW5zaWduZWQgY2hhciAqc3RhdGUpOworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb24odW5zaWduZWQgY2hhciAqc3RhdGUpOworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI1NzZiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0ODMyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI4MzJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTAyNGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDg4Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjExNTJiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTM0NGJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIodW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpOworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrRXh0cmFjdDEwMjRiaXRzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgS2VjY2FrRXh0cmFjdChjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxhbmVDb3VudCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLXNldHRpbmdzLmggYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0MzItc2V0dGluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTVjNzgyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLXNldHRpbmdzLmgKQEAgLTAsMCArMSw2IEBACisvKgorI2RlZmluZSBVbnJvbGxpbmcgMgorI2RlZmluZSBVc2VCZWJpZ29raW1pc2EKKyNkZWZpbmUgVXNlSW50ZXJsZWF2ZVRhYmxlcworI2RlZmluZSBVc2VTY2hlZHVsZSAzCisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTJiZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDMyLmMKQEAgLTAsMCArMSw1MjQgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiAjaW5jbHVkZSAiYnJnX2VuZGlhbi5oIiAqLworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1vcHQzMi1zZXR0aW5ncy5oIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVSU5UMzI7CisvKiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgVUlOVDY0OyAqLworCisjaWZkZWYgVXNlSW50ZXJsZWF2ZVRhYmxlcworc3RhdGljIGludCBpbnRlcmxlYXZlVGFibGVzQnVpbHQgPSAwOworc3RhdGljIFVJTlQxNiBpbnRlcmxlYXZlVGFibGVbNjU1MzZdOworc3RhdGljIFVJTlQxNiBkZWludGVybGVhdmVUYWJsZVs2NTUzNl07CisKK3N0YXRpYyB2b2lkIGJ1aWxkSW50ZXJsZWF2ZVRhYmxlcygpCit7CisgICAgVUlOVDMyIGksIGo7CisgICAgVUlOVDE2IHg7CisKKyAgICBpZiAoIWludGVybGVhdmVUYWJsZXNCdWlsdCkgeworICAgICAgICBmb3IoaT0wOyBpPDY1NTM2OyBpKyspIHsKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICAgICAgZm9yKGo9MDsgajwxNjsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKGkgJiAoMSA8PCBqKSkKKyAgICAgICAgICAgICAgICAgICAgeCB8PSAoMSA8PCAoai8yICsgOCooaiUyKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50ZXJsZWF2ZVRhYmxlW2ldID0geDsKKyAgICAgICAgICAgIGRlaW50ZXJsZWF2ZVRhYmxlW3hdID0gKFVJTlQxNilpOworICAgICAgICB9CisgICAgICAgIGludGVybGVhdmVUYWJsZXNCdWlsdCA9IDE7CisgICAgfQorfQorCisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKworI2RlZmluZSB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgaikgXAorICAgIGkjI2ogPSBpbnRlcmxlYXZlVGFibGVbKChjb25zdCBVSU5UMTYqKXNvdXJjZSlbal1dOyBcCisgICAgKChVSU5UOCopZXZlbilbal0gXj0gaSMjaiAmIDB4RkY7IFwKKyAgICAoKFVJTlQ4KilvZGQpW2pdIF49IGkjI2ogPj4gODsKKworI2RlZmluZSBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIGopIFwKKyAgICBkIyNqID0gZGVpbnRlcmxlYXZlVGFibGVbKChldmVuID4+IChqKjgpKSAmIDB4RkYpIF4gKCgob2RkID4+IChqKjgpKSAmIDB4RkYpIDw8IDgpXTsgXAorICAgICgoVUlOVDE2KilkZXN0KVtqXSA9IGQjI2o7CisKKyNlbHNlIC8qICAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKSAqLworCisjZGVmaW5lIHhvcjJieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKGV2ZW4sIG9kZCwgc291cmNlLCBqKSBcCisgICAgaSMjaiA9IGludGVybGVhdmVUYWJsZVtzb3VyY2VbMipqXSBeICgoVUlOVDE2KXNvdXJjZVsyKmorMV0gPDwgOCldOyBcCisgICAgKmV2ZW4gXj0gKGkjI2ogJiAweEZGKSA8PCAoaio4KTsgXAorICAgICpvZGQgXj0gKChpIyNqID4+IDgpICYgMHhGRikgPDwgKGoqOCk7CisKKyNkZWZpbmUgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCBqKSBcCisgICAgZCMjaiA9IGRlaW50ZXJsZWF2ZVRhYmxlWygoZXZlbiA+PiAoaio4KSkgJiAweEZGKSBeICgoKG9kZCA+PiAoaio4KSkgJiAweEZGKSA8PCA4KV07IFwKKyAgICBkZXN0WzIqal0gPSBkIyNqICYgMHhGRjsgXAorICAgIGRlc3RbMipqKzFdID0gZCMjaiA+PiA4OworCisjZW5kaWYgLyogIEVuZGlhbm5lc3MgKi8KKworc3RhdGljIHZvaWQgeG9yOGJ5dGVzSW50b0ludGVybGVhdmVkV29yZHMoVUlOVDMyICpldmVuLCBVSU5UMzIgKm9kZCwgY29uc3QgVUlOVDgqIHNvdXJjZSkKK3sKKyAgICBVSU5UMTYgaTAsIGkxLCBpMiwgaTM7CisKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMCkKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMSkKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMikKKyAgICB4b3IyYnl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhldmVuLCBvZGQsIHNvdXJjZSwgMykKK30KKworI2RlZmluZSB4b3JMYW5lc0ludG9TdGF0ZShsYW5lQ291bnQsIHN0YXRlLCBpbnB1dCkgXAorICAgIHsgXAorICAgICAgICBpbnQgaTsgXAorICAgICAgICBmb3IoaT0wOyBpPChsYW5lQ291bnQpOyBpKyspIFwKKyAgICAgICAgICAgIHhvcjhieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKHN0YXRlK2kqMiwgc3RhdGUraSoyKzEsIGlucHV0K2kqOCk7IFwKKyAgICB9CisKK3N0YXRpYyB2b2lkIHNldEludGVybGVhdmVkV29yZHNJbnRvOGJ5dGVzKFVJTlQ4KiBkZXN0LCBVSU5UMzIgZXZlbiwgVUlOVDMyIG9kZCkKK3sKKyAgICBVSU5UMTYgZDAsIGQxLCBkMiwgZDM7CisKKyAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIDApCisgICAgc2V0SW50ZXJsZWF2ZWRXb3Jkc0ludG8yYnl0ZXMoZGVzdCwgZXZlbiwgb2RkLCAxKQorICAgIHNldEludGVybGVhdmVkV29yZHNJbnRvMmJ5dGVzKGRlc3QsIGV2ZW4sIG9kZCwgMikKKyAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzJieXRlcyhkZXN0LCBldmVuLCBvZGQsIDMpCit9CisKKyNkZWZpbmUgZXh0cmFjdExhbmVzKGxhbmVDb3VudCwgc3RhdGUsIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhkYXRhK2kqOCwgKChVSU5UMzIqKXN0YXRlKVtpKjJdLCAoKFVJTlQzMiopc3RhdGUpW2kqMisxXSk7IFwKKyAgICB9CisKKyNlbHNlIC8qICBObyBpbnRlcmxlYXZpbmcgdGFibGVzICovCisKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorCisvKiAgQ3JlZGl0OiBIZW5yeSBTLiBXYXJyZW4sIEhhY2tlcidzIERlbGlnaHQsIEFkZGlzb24tV2VzbGV5LCAyMDAyICovCisjZGVmaW5lIHhvckludGVybGVhdmVkTEUocmF0ZUluTGFuZXMsIHN0YXRlLCBpbnB1dCkgXAorCXsgXAorCQljb25zdCBVSU5UMzIgKiBwSSA9IChjb25zdCBVSU5UMzIgKilpbnB1dDsgXAorCQlVSU5UMzIgKiBwUyA9IHN0YXRlOyBcCisJCVVJTlQzMiB0LCB4MCwgeDE7IFwKKwkgICAgaW50IGk7IFwKKwkgICAgZm9yIChpID0gKHJhdGVJbkxhbmVzKS0xOyBpID49IDA7IC0taSkgXAorCQl7IFwKKwkJCXgwID0gKihwSSsrKTsgXAorCQkJdCA9ICh4MCBeICh4MCA+PiAgMSkpICYgMHgyMjIyMjIyMlVMOyAgeDAgPSB4MCBeIHQgXiAodCA8PCAgMSk7IFwKKwkJCXQgPSAoeDAgXiAoeDAgPj4gIDIpKSAmIDB4MEMwQzBDMENVTDsgIHgwID0geDAgXiB0IF4gKHQgPDwgIDIpOyBcCisJCQl0ID0gKHgwIF4gKHgwID4+ICA0KSkgJiAweDAwRjAwMEYwVUw7ICB4MCA9IHgwIF4gdCBeICh0IDw8ICA0KTsgXAorCQkJdCA9ICh4MCBeICh4MCA+PiAgOCkpICYgMHgwMDAwRkYwMFVMOyAgeDAgPSB4MCBeIHQgXiAodCA8PCAgOCk7IFwKKyAJCQl4MSA9ICoocEkrKyk7IFwKKwkJCXQgPSAoeDEgXiAoeDEgPj4gIDEpKSAmIDB4MjIyMjIyMjJVTDsgIHgxID0geDEgXiB0IF4gKHQgPDwgIDEpOyBcCisJCQl0ID0gKHgxIF4gKHgxID4+ICAyKSkgJiAweDBDMEMwQzBDVUw7ICB4MSA9IHgxIF4gdCBeICh0IDw8ICAyKTsgXAorCQkJdCA9ICh4MSBeICh4MSA+PiAgNCkpICYgMHgwMEYwMDBGMFVMOyAgeDEgPSB4MSBeIHQgXiAodCA8PCAgNCk7IFwKKwkJCXQgPSAoeDEgXiAoeDEgPj4gIDgpKSAmIDB4MDAwMEZGMDBVTDsgIHgxID0geDEgXiB0IF4gKHQgPDwgIDgpOyBcCisJCQkqKHBTKyspIF49IChVSU5UMTYpeDAgfCAoeDEgPDwgMTYpOyBcCisJCQkqKHBTKyspIF49ICh4MCA+PiAxNikgfCAoeDEgJiAweEZGRkYwMDAwKTsgXAorCQl9IFwKKwl9CisKKyNkZWZpbmUgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpIFwKKyAgICB4b3JJbnRlcmxlYXZlZExFKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KQorCisjZWxzZSAvKiAgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfQklHX0VORElBTikgKi8KKworLyogIENyZWRpdDogSGVucnkgUy4gV2FycmVuLCBIYWNrZXIncyBEZWxpZ2h0LCBBZGRpc29uLVdlc2xleSwgMjAwMiAqLworVUlOVDY0IHRvSW50ZXJsZWF2aW5nKFVJTlQ2NCB4KSAKK3sKKyAgIFVJTlQ2NCB0OworCisgICB0ID0gKHggXiAoeCA+PiAgMSkpICYgMHgyMjIyMjIyMjIyMjIyMjIyVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDEpOworICAgdCA9ICh4IF4gKHggPj4gIDIpKSAmIDB4MEMwQzBDMEMwQzBDMEMwQ1VMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAyKTsKKyAgIHQgPSAoeCBeICh4ID4+ICA0KSkgJiAweDAwRjAwMEYwMDBGMDAwRjBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgNCk7CisgICB0ID0gKHggXiAoeCA+PiAgOCkpICYgMHgwMDAwRkYwMDAwMDBGRjAwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDgpOworICAgdCA9ICh4IF4gKHggPj4gMTYpKSAmIDB4MDAwMDAwMDBGRkZGMDAwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8IDE2KTsKKworICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkIHhvcjhieXRlc0ludG9JbnRlcmxlYXZlZFdvcmRzKFVJTlQzMiogZXZlbkFuZE9kZCwgY29uc3QgVUlOVDgqIHNvdXJjZSkKK3sKKyAgICAvKiAgVGhpcyBjYW4gYmUgb3B0aW1pemVkICovCisgICAgVUlOVDY0IHNvdXJjZVdvcmQgPQorICAgICAgICAoVUlOVDY0KXNvdXJjZVswXQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbMV0pIDw8ICA4KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbMl0pIDw8IDE2KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbM10pIDw8IDI0KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbNF0pIDw8IDMyKQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbNV0pIDw8IDQwKQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbNl0pIDw8IDQ4KQorICAgICAgICBeICgoKFVJTlQ2NClzb3VyY2VbN10pIDw8IDU2KTsKKyAgICBVSU5UNjQgZXZlbkFuZE9kZFdvcmQgPSB0b0ludGVybGVhdmluZyhzb3VyY2VXb3JkKTsKKyAgICBldmVuQW5kT2RkWzBdIF49IChVSU5UMzIpZXZlbkFuZE9kZFdvcmQ7CisgICAgZXZlbkFuZE9kZFsxXSBePSAoVUlOVDMyKShldmVuQW5kT2RkV29yZCA+PiAzMik7Cit9CisKKyNkZWZpbmUgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpIFwKKyAgICB7IFwKKyAgICAgICAgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICB4b3I4Ynl0ZXNJbnRvSW50ZXJsZWF2ZWRXb3JkcyhzdGF0ZStpKjIsIGlucHV0K2kqOCk7IFwKKyAgICB9CisKKyNlbmRpZiAvKiAgRW5kaWFubmVzcyAqLworCisvKiAgQ3JlZGl0OiBIZW5yeSBTLiBXYXJyZW4sIEhhY2tlcidzIERlbGlnaHQsIEFkZGlzb24tV2VzbGV5LCAyMDAyICovCitVSU5UNjQgZnJvbUludGVybGVhdmluZyhVSU5UNjQgeCkKK3sKKyAgIFVJTlQ2NCB0OworCisgICB0ID0gKHggXiAoeCA+PiAxNikpICYgMHgwMDAwMDAwMEZGRkYwMDAwVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgMTYpOworICAgdCA9ICh4IF4gKHggPj4gIDgpKSAmIDB4MDAwMEZGMDAwMDAwRkYwMFVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICA4KTsKKyAgIHQgPSAoeCBeICh4ID4+ICA0KSkgJiAweDAwRjAwMEYwMDBGMDAwRjBVTEw7ICB4ID0geCBeIHQgXiAodCA8PCAgNCk7CisgICB0ID0gKHggXiAoeCA+PiAgMikpICYgMHgwQzBDMEMwQzBDMEMwQzBDVUxMOyAgeCA9IHggXiB0IF4gKHQgPDwgIDIpOworICAgdCA9ICh4IF4gKHggPj4gIDEpKSAmIDB4MjIyMjIyMjIyMjIyMjIyMlVMTDsgIHggPSB4IF4gdCBeICh0IDw8ICAxKTsKKworICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkIHNldEludGVybGVhdmVkV29yZHNJbnRvOGJ5dGVzKFVJTlQ4KiBkZXN0LCBVSU5UMzIqIGV2ZW5BbmRPZGQpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICAoKFVJTlQ2NCopZGVzdClbMF0gPSBmcm9tSW50ZXJsZWF2aW5nKCooVUlOVDY0KilldmVuQW5kT2RkKTsKKyNlbHNlIC8qICAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19CSUdfRU5ESUFOKSAqLworICAgIC8qICBUaGlzIGNhbiBiZSBvcHRpbWl6ZWQgKi8KKyAgICBVSU5UNjQgZXZlbkFuZE9kZFdvcmQgPSAoVUlOVDY0KWV2ZW5BbmRPZGRbMF0gXiAoKFVJTlQ2NClldmVuQW5kT2RkWzFdIDw8IDMyKTsKKyAgICBVSU5UNjQgZGVzdFdvcmQgPSBmcm9tSW50ZXJsZWF2aW5nKGV2ZW5BbmRPZGRXb3JkKTsKKyAgICBkZXN0WzBdID0gZGVzdFdvcmQgJiAweEZGOworICAgIGRlc3RbMV0gPSAoZGVzdFdvcmQgPj4gOCkgJiAweEZGOworICAgIGRlc3RbMl0gPSAoZGVzdFdvcmQgPj4gMTYpICYgMHhGRjsKKyAgICBkZXN0WzNdID0gKGRlc3RXb3JkID4+IDI0KSAmIDB4RkY7CisgICAgZGVzdFs0XSA9IChkZXN0V29yZCA+PiAzMikgJiAweEZGOworICAgIGRlc3RbNV0gPSAoZGVzdFdvcmQgPj4gNDApICYgMHhGRjsKKyAgICBkZXN0WzZdID0gKGRlc3RXb3JkID4+IDQ4KSAmIDB4RkY7CisgICAgZGVzdFs3XSA9IChkZXN0V29yZCA+PiA1NikgJiAweEZGOworI2VuZGlmIC8qICBFbmRpYW5uZXNzICovCit9CisKKyNkZWZpbmUgZXh0cmFjdExhbmVzKGxhbmVDb3VudCwgc3RhdGUsIGRhdGEpIFwKKyAgICB7IFwKKyAgICAgICAgdW5zaWduZWQgaW50IGk7IFwKKyAgICAgICAgZm9yKGk9MDsgaTwobGFuZUNvdW50KTsgaSsrKSBcCisgICAgICAgICAgICBzZXRJbnRlcmxlYXZlZFdvcmRzSW50bzhieXRlcyhkYXRhK2kqOCwgKFVJTlQzMiopc3RhdGUraSoyKTsgXAorICAgIH0KKworI2VuZGlmIC8qICBXaXRoIG9yIHdpdGhvdXQgaW50ZXJsZWF2aW5nIHRhYmxlcyAqLworCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgUk9MMzIoYSwgb2Zmc2V0KSBfcm90bChhLCBvZmZzZXQpCisjZWxpZiAoZGVmaW5lZCAoX19hcm1fXykgJiYgZGVmaW5lZChfX0FSTUNDX1ZFUlNJT04pKQorI2RlZmluZSBST0wzMihhLCBvZmZzZXQpIF9fcm9yKGEsIDMyLShvZmZzZXQpKQorI2Vsc2UKKyNkZWZpbmUgUk9MMzIoYSwgb2Zmc2V0KSAoKCgoVUlOVDMyKWEpIDw8IChvZmZzZXQpKSBeICgoKFVJTlQzMilhKSA+PiAoMzItKG9mZnNldCkpKSkKKyNlbmRpZgorCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MiCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTMyLm1hY3JvcyIKKworI2lmIChVc2VTY2hlZHVsZSA9PSAzKQorCisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisjZXJyb3IgIk5vIGxhbmUgY29tcGxlbWVudGluZyB3aXRoIHNjaGVkdWxlIDMuIgorI2VuZGlmCisKKyNpZiAoVW5yb2xsaW5nICE9IDIpCisjZXJyb3IgIk9ubHkgdW5yb2xsaW5nIDIgaXMgc3VwcG9ydGVkIGJ5IHNjaGVkdWxlIDMuIgorI2VuZGlmCisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcyhVSU5UMzIgKnN0YXRlKQoreworICAgIHJvdW5kcworfQorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUobGFuZUNvdW50LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSg5LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0ODMyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzgzMmJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDEzLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoMTYsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICB4b3JMYW5lc0ludG9TdGF0ZSgxNywgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTE1MmJpdHMoVUlOVDMyICpzdGF0ZSwgY29uc3QgVUlOVDggKmlucHV0KQoreworICAgIHhvckxhbmVzSW50b1N0YXRlKDE4LCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cyhVSU5UMzIgKnN0YXRlLCBjb25zdCBVSU5UOCAqaW5wdXQpCit7CisgICAgeG9yTGFuZXNJbnRvU3RhdGUoMjEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjZWxzZSAvKiAgKFNjaGVkdWxlICE9IDMpICovCisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcyhVSU5UMzIgKnN0YXRlKQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCwgdW5zaWduZWQgaW50IGxhbmVDb3VudCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKGxhbmVDb3VudCwgc3RhdGUsIGlucHV0KQorICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCit9CisKKyNpZmRlZiBQcm92aWRlRmFzdDU3Ngorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDksIHN0YXRlLCBpbnB1dCkKKyAgICBjb3B5RnJvbVN0YXRlKEEsIHN0YXRlKQorICAgIHJvdW5kcworfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDEzLCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwMjRiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDE2LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDE3LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDE4LCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEzNDRiaXRzKFVJTlQzMiAqc3RhdGUsIGNvbnN0IFVJTlQ4ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIHhvckxhbmVzSW50b1N0YXRlKDIxLCBzdGF0ZSwgaW5wdXQpCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKK30KKyNlbmRpZgorCisjZW5kaWYKKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZSgpCit7CisjaWZkZWYgVXNlSW50ZXJsZWF2ZVRhYmxlcworICAgIGJ1aWxkSW50ZXJsZWF2ZVRhYmxlcygpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIEtlY2Nha0luaXRpYWxpemVTdGF0ZSh1bnNpZ25lZCBjaGFyICpzdGF0ZSkKK3sKKyAgICBtZW1zZXQoc3RhdGUsIDAsIDIwMCk7CisjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgKChVSU5UMzIqKXN0YXRlKVsgMl0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbIDNdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWyA0XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsgNV0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMTZdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzE3XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVsyNF0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbMjVdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzM0XSA9IH4oVUlOVDMyKTA7CisgICAgKChVSU5UMzIqKXN0YXRlKVszNV0gPSB+KFVJTlQzMikwOworICAgICgoVUlOVDMyKilzdGF0ZSlbNDBdID0gfihVSU5UMzIpMDsKKyAgICAoKFVJTlQzMiopc3RhdGUpWzQxXSA9IH4oVUlOVDMyKTA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb24odW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisgICAgLyogIFdlIGFzc3VtZSB0aGUgc3RhdGUgaXMgYWx3YXlzIHN0b3JlZCBhcyBpbnRlcmxlYXZlZCAzMi1iaXQgd29yZHMgKi8KKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHMoKFVJTlQzMiopc3RhdGUpOworfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjU3NmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjgzMmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDI0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDI0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwMjRiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDg4Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMTUyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMzQ0Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEzNDRiaXRzKChVSU5UMzIqKXN0YXRlLCBkYXRhKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIodW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoKFVJTlQzMiopc3RhdGUsIGRhdGEsIGxhbmVDb3VudCk7Cit9CisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyAgICBleHRyYWN0TGFuZXMoMTYsIHN0YXRlLCBkYXRhKQorI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICgoVUlOVDMyKilkYXRhKVsgMl0gPSB+KChVSU5UMzIqKWRhdGEpWyAyXTsKKyAgICAoKFVJTlQzMiopZGF0YSlbIDNdID0gfigoVUlOVDMyKilkYXRhKVsgM107CisgICAgKChVSU5UMzIqKWRhdGEpWyA0XSA9IH4oKFVJTlQzMiopZGF0YSlbIDRdOworICAgICgoVUlOVDMyKilkYXRhKVsgNV0gPSB+KChVSU5UMzIqKWRhdGEpWyA1XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbMTZdID0gfigoVUlOVDMyKilkYXRhKVsxNl07CisgICAgKChVSU5UMzIqKWRhdGEpWzE3XSA9IH4oKFVJTlQzMiopZGF0YSlbMTddOworICAgICgoVUlOVDMyKilkYXRhKVsyNF0gPSB+KChVSU5UMzIqKWRhdGEpWzI0XTsKKyAgICAoKFVJTlQzMiopZGF0YSlbMjVdID0gfigoVUlOVDMyKilkYXRhKVsyNV07CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtFeHRyYWN0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0YXRlLCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgbGFuZUNvdW50KQoreworICAgIGV4dHJhY3RMYW5lcyhsYW5lQ291bnQsIHN0YXRlLCBkYXRhKQorI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgIGlmIChsYW5lQ291bnQgPiAxKSB7CisgICAgICAgICgoVUlOVDMyKilkYXRhKVsgMl0gPSB+KChVSU5UMzIqKWRhdGEpWyAyXTsKKyAgICAgICAgKChVSU5UMzIqKWRhdGEpWyAzXSA9IH4oKFVJTlQzMiopZGF0YSlbIDNdOworICAgICAgICBpZiAobGFuZUNvdW50ID4gMikgeworICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWyA0XSA9IH4oKFVJTlQzMiopZGF0YSlbIDRdOworICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWyA1XSA9IH4oKFVJTlQzMiopZGF0YSlbIDVdOworICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDgpIHsKKyAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMTZdID0gfigoVUlOVDMyKilkYXRhKVsxNl07CisgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzE3XSA9IH4oKFVJTlQzMiopZGF0YSlbMTddOworICAgICAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiAxMikgeworICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMjRdID0gfigoVUlOVDMyKilkYXRhKVsyNF07CisgICAgICAgICAgICAgICAgICAgICgoVUlOVDMyKilkYXRhKVsyNV0gPSB+KChVSU5UMzIqKWRhdGEpWzI1XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxhbmVDb3VudCA+IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMzRdID0gfigoVUlOVDMyKilkYXRhKVszNF07CisgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbMzVdID0gfigoVUlOVDMyKilkYXRhKVszNV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMjApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFVJTlQzMiopZGF0YSlbNDBdID0gfigoVUlOVDMyKilkYXRhKVs0MF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChVSU5UMzIqKWRhdGEpWzQxXSA9IH4oKFVJTlQzMiopZGF0YSlbNDFdOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1vcHQ2NC1zZXR0aW5ncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmODNlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQtc2V0dGluZ3MuaApAQCAtMCwwICsxLDkgQEAKKy8qCisjZGVmaW5lIFVucm9sbGluZyAyNAorI2RlZmluZSBVc2VCZWJpZ29raW1pc2EKKyNkZWZpbmUgVXNlU1NFCisjZGVmaW5lIFVzZU9ubHlTSU1ENjQKKyNkZWZpbmUgVXNlTU1YCisjZGVmaW5lIFVzZVNITEQKKyNkZWZpbmUgVXNlWE9QCisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtb3B0NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTliMThiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMKQEAgLTAsMCArMSw1MTAgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiAjaW5jbHVkZSAiYnJnX2VuZGlhbi5oIiAqLworI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1vcHQ2NC1zZXR0aW5ncy5oIgorI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1pbnRlcmZhY2UuaCIKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OworLyogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IFVJTlQ2NDsgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEFMSUdOIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDMyKSkpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBBTElHTiBfX2RlY2xzcGVjKGFsaWduKDMyKSkKKyNlbHNlCisjZGVmaW5lIEFMSUdOCisjZW5kaWYKKworI2lmIGRlZmluZWQoVXNlU1NFKQorICAgICNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKyAgICB0eXBlZGVmIF9fbTEyOGkgVjY0OworICAgIHR5cGVkZWYgX19tMTI4aSBWMTI4OworICAgIHR5cGVkZWYgdW5pb24geworICAgICAgICBWMTI4IHYxMjg7CisgICAgICAgIFVJTlQ2NCB2NjRbMl07CisgICAgfSBWNjQ2NDsKKworICAgICNkZWZpbmUgQU5EbnU2NChhLCBiKSAgICAgICBfbW1fYW5kbm90X3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBMT0FENjQoYSkgICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAgICAgX21tX2xvYWRsX2VwaTY0KChjb25zdCBWNjQgKikmKGEpKQorICAgICNkZWZpbmUgUk9MNjQoYSwgbykgICAgICAgICBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpNjQoYSwgbyksIF9tbV9zcmxpX2VwaTY0KGEsIDY0LShvKSkpCisgICAgI2RlZmluZSBTVE9SRTY0KGEsIGIpICAgICAgIF9tbV9zdG9yZWxfZXBpNjQoKFY2NCAqKSYoYSksIGIpCisgICAgI2RlZmluZSBYT1I2NChhLCBiKSAgICAgICAgIF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIFhPUmVxNjQoYSwgYikgICAgICAgYSA9IF9tbV94b3Jfc2kxMjgoYSwgYikKKyAgICAjZGVmaW5lIFNIVUZGTEVCWVRFUzEyOChhLCBiKSAgIF9tbV9zaHVmZmxlX2VwaTgoYSwgYikKKworICAgICNkZWZpbmUgQU5EbnUxMjgoYSwgYikgICAgICBfbW1fYW5kbm90X3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBMT0FENjQ2NChhLCBiKSAgICAgIF9tbV9zZXRfZXBpNjQoKF9fbTY0KShhKSwgKF9fbTY0KShiKSkKKyAgICAjZGVmaW5lIENPTlNUMTI4KGEpICAgICAgICAgX21tX2xvYWRfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgTE9BRDEyOChhKSAgICAgICAgICBfbW1fbG9hZF9zaTEyOCgoY29uc3QgVjEyOCAqKSYoYSkpCisgICAgI2RlZmluZSBMT0FEMTI4dShhKSAgICAgICAgIF9tbV9sb2FkdV9zaTEyOCgoY29uc3QgVjEyOCAqKSYoYSkpCisgICAgI2RlZmluZSBST0w2NGluMTI4KGEsIG8pICAgIF9tbV9vcl9zaTEyOChfbW1fc2xsaV9lcGk2NChhLCBvKSwgX21tX3NybGlfZXBpNjQoYSwgNjQtKG8pKSkKKyAgICAjZGVmaW5lIFNUT1JFMTI4KGEsIGIpICAgICAgX21tX3N0b3JlX3NpMTI4KChWMTI4ICopJihhKSwgYikKKyAgICAjZGVmaW5lIFhPUjEyOChhLCBiKSAgICAgICAgX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgWE9SZXExMjgoYSwgYikgICAgICBhID0gX21tX3hvcl9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgR0VUNjRMT0xPKGEsIGIpICAgICBfbW1fdW5wYWNrbG9fZXBpNjQoYSwgYikKKyAgICAjZGVmaW5lIEdFVDY0SElISShhLCBiKSAgICAgX21tX3VucGFja2hpX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBDT1BZNjRISTJMTyhhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4RUUpCisgICAgI2RlZmluZSBDT1BZNjRMTzJISShhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4NDQpCisgICAgI2RlZmluZSBaRVJPMTI4KCkgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkKKworICAgICNpZmRlZiBVc2VPbmx5U0lNRDY0CisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zIgorICAgICNlbHNlCitBTElHTiBjb25zdCBVSU5UNjQgcmhvOF81NlsyXSA9IHsweDA2MDUwNDAzMDIwMTAwMDcsIDB4MDgwRjBFMEQwQzBCMEEwOX07CisgICAgI2luY2x1ZGUgIktlY2Nha0YtMTYwMC1zaW1kMTI4Lm1hY3JvcyIKKyAgICAjZW5kaWYKKworICAgICNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAjZXJyb3IgIlVzZUJlYmlnb2tpbWlzYSBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFVzZVNTRSIKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoVXNlWE9QKQorICAgICNpbmNsdWRlIDx4ODZpbnRyaW4uaD4KKyAgICB0eXBlZGVmIF9fbTEyOGkgVjY0OworICAgIHR5cGVkZWYgX19tMTI4aSBWMTI4OworICAgCisgICAgI2RlZmluZSBMT0FENjQoYSkgICAgICAgICAgIF9tbV9sb2FkbF9lcGk2NCgoY29uc3QgVjY0ICopJihhKSkKKyAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAgICAgX21tX2xvYWRsX2VwaTY0KChjb25zdCBWNjQgKikmKGEpKQorICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgICAgICBfbW1fc3RvcmVsX2VwaTY0KChWNjQgKikmKGEpLCBiKQorICAgICNkZWZpbmUgWE9SNjQoYSwgYikgICAgICAgICBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBYT1JlcTY0KGEsIGIpICAgICAgIGEgPSBfbW1feG9yX3NpMTI4KGEsIGIpCisKKyAgICAjZGVmaW5lIEFORG51MTI4KGEsIGIpICAgICAgX21tX2FuZG5vdF9zaTEyOChhLCBiKQorICAgICNkZWZpbmUgTE9BRDY0NjQoYSwgYikgICAgICBfbW1fc2V0X2VwaTY0KChfX202NCkoYSksIChfX202NCkoYikpCisgICAgI2RlZmluZSBDT05TVDEyOChhKSAgICAgICAgIF9tbV9sb2FkX3NpMTI4KChjb25zdCBWMTI4ICopJihhKSkKKyAgICAjZGVmaW5lIExPQUQxMjgoYSkgICAgICAgICAgX21tX2xvYWRfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgTE9BRDEyOHUoYSkgICAgICAgICBfbW1fbG9hZHVfc2kxMjgoKGNvbnN0IFYxMjggKikmKGEpKQorICAgICNkZWZpbmUgU1RPUkUxMjgoYSwgYikgICAgICBfbW1fc3RvcmVfc2kxMjgoKFYxMjggKikmKGEpLCBiKQorICAgICNkZWZpbmUgWE9SMTI4KGEsIGIpICAgICAgICBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBYT1JlcTEyOChhLCBiKSAgICAgIGEgPSBfbW1feG9yX3NpMTI4KGEsIGIpCisgICAgI2RlZmluZSBaRVJPMTI4KCkgICAgICAgICAgIF9tbV9zZXR6ZXJvX3NpMTI4KCkKKworICAgICNkZWZpbmUgU1dBUDY0KGEpICAgICAgICAgICBfbW1fc2h1ZmZsZV9lcGkzMihhLCAweDRFKQorICAgICNkZWZpbmUgR0VUNjRMT0xPKGEsIGIpICAgICBfbW1fdW5wYWNrbG9fZXBpNjQoYSwgYikKKyAgICAjZGVmaW5lIEdFVDY0SElISShhLCBiKSAgICAgX21tX3VucGFja2hpX2VwaTY0KGEsIGIpCisgICAgI2RlZmluZSBHRVQ2NExPSEkoYSwgYikgICAgICgoX19tMTI4aSlfbW1fYmxlbmRfcGQoKF9fbTEyOGQpYSwgKF9fbTEyOGQpYiwgMikpCisgICAgI2RlZmluZSBHRVQ2NEhJTE8oYSwgYikgICAgIFNXQVA2NChHRVQ2NExPSEkoYiwgYSkpCisgICAgI2RlZmluZSBDT1BZNjRISTJMTyhhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4RUUpCisgICAgI2RlZmluZSBDT1BZNjRMTzJISShhKSAgICAgIF9tbV9zaHVmZmxlX2VwaTMyKGEsIDB4NDQpCisgCisgICAgI2RlZmluZSBST0w2NDY0c2FtZShhLCBvKSAgIF9tbV9yb3RpX2VwaTY0KGEsIG8pCisgICAgI2RlZmluZSBST0w2NDY0KGEsIHIxLCByMikgIF9tbV9yb3RfZXBpNjQoYSwgQ09OU1QxMjgoIHJvdF8jI3IxIyNfIyNyMiApKQorQUxJR04gY29uc3QgVUlOVDY0IHJvdF8wXzIwWzJdICA9IHsgMCwgMjB9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF80NF8zWzJdICA9IHs0NCwgIDN9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF80M180NVsyXSA9IHs0MywgNDV9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8yMV82MVsyXSA9IHsyMSwgNjF9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8xNF8yOFsyXSA9IHsxNCwgMjh9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8xXzM2WzJdICA9IHsgMSwgMzZ9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF82XzEwWzJdICA9IHsgNiwgMTB9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8yNV8xNVsyXSA9IHsyNSwgMTV9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF84XzU2WzJdICA9IHsgOCwgNTZ9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8xOF8yN1syXSA9IHsxOCwgMjd9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF82Ml81NVsyXSA9IHs2MiwgNTV9OworQUxJR04gY29uc3QgVUlOVDY0IHJvdF8zOV80MVsyXSA9IHszOSwgNDF9OworCisjaWYgZGVmaW5lZChVc2VTaW11bGF0ZWRYT1ApCisgICAgLyogIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIHdoZW4gWE9QIGlzIG5vdCBhdmFpbGFibGUgKi8KKyAgICAjdW5kZWYgUk9MNjQ2NAorICAgICN1bmRlZiBST0w2NDY0c2FtZQorICAgICNkZWZpbmUgUk9MNjQ2NHNhbWUoYSwgbykgICBfbW1fb3Jfc2kxMjgoX21tX3NsbGlfZXBpNjQoYSwgbyksIF9tbV9zcmxpX2VwaTY0KGEsIDY0LShvKSkpCisgICAgVjEyOCBST0w2NDY0KFYxMjggYSwgaW50IHIwLCBpbnQgcjEpCisgICAgeworICAgICAgICBWMTI4IGEwID0gUk9MNjQoYSwgcjApOworICAgICAgICBWMTI4IGExID0gQ09QWTY0SEkyTE8oUk9MNjQoYSwgcjEpKTsKKyAgICAgICAgcmV0dXJuIEdFVDY0TE9MTyhhMCwgYTEpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgICNpbmNsdWRlICJLZWNjYWtGLTE2MDAteG9wLm1hY3JvcyIKKworICAgICNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAjZXJyb3IgIlVzZUJlYmlnb2tpbWlzYSBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIFVzZVhPUCIKKyAgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoVXNlTU1YKQorICAgICNpbmNsdWRlIDxtbWludHJpbi5oPgorICAgIHR5cGVkZWYgX19tNjQgVjY0OworICAgICNkZWZpbmUgQU5EbnU2NChhLCBiKSAgICAgICBfbW1fYW5kbm90X3NpNjQoYSwgYikKKworICAgICNpZiAoZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikpCisgICAgICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgICooVjY0KikmKGEpCisgICAgICAgICNkZWZpbmUgQ09OU1Q2NChhKSAgICAgICooVjY0KikmKGEpCisgICAgICAgICNkZWZpbmUgU1RPUkU2NChhLCBiKSAgICooVjY0KikmKGEpID0gYgorICAgICNlbHNlCisgICAgICAgICNkZWZpbmUgTE9BRDY0KGEpICAgICAgIChWNjQpYQorICAgICAgICAjZGVmaW5lIENPTlNUNjQoYSkgICAgICAoVjY0KWEKKyAgICAgICAgI2RlZmluZSBTVE9SRTY0KGEsIGIpICAgYSA9IChVSU5UNjQpYgorICAgICNlbmRpZgorICAgICNkZWZpbmUgUk9MNjQoYSwgbykgICAgICAgICBfbW1fb3Jfc2k2NChfbW1fc2xsaV9zaTY0KGEsIG8pLCBfbW1fc3JsaV9zaTY0KGEsIDY0LShvKSkpCisgICAgI2RlZmluZSBYT1I2NChhLCBiKSAgICAgICAgIF9tbV94b3Jfc2k2NChhLCBiKQorICAgICNkZWZpbmUgWE9SZXE2NChhLCBiKSAgICAgICBhID0gX21tX3hvcl9zaTY0KGEsIGIpCisKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXNpbWQ2NC5tYWNyb3MiCisKKyAgICAjaWZkZWYgVXNlQmViaWdva2ltaXNhCisgICAgI2Vycm9yICJVc2VCZWJpZ29raW1pc2EgY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBVc2VNTVgiCisgICAgI2VuZGlmCisjZWxzZQorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgUk9MNjQoYSwgb2Zmc2V0KSBfcm90bDY0KGEsIG9mZnNldCkKKyAgICAjZWxpZiBkZWZpbmVkKFVzZVNITEQpCisgICAgICAjZGVmaW5lIFJPTDY0KHgsTikgKHsgXAorICAgICAgICByZWdpc3RlciBVSU5UNjQgX19vdXQ7IFwKKyAgICAgICAgcmVnaXN0ZXIgVUlOVDY0IF9faW4gPSB4OyBcCisgICAgICAgIF9fYXNtX18gKCJzaGxkICUyLCUwLCUwIiA6ICI9ciIoX19vdXQpIDogIjAiKF9faW4pLCAiaSIoTikpOyBcCisgICAgICAgIF9fb3V0OyBcCisgICAgICB9KQorICAgICNlbHNlCisgICAgI2RlZmluZSBST0w2NChhLCBvZmZzZXQpICgoKChVSU5UNjQpYSkgPDwgb2Zmc2V0KSBeICgoKFVJTlQ2NClhKSA+PiAoNjQtb2Zmc2V0KSkpCisgICAgI2VuZGlmCisKKyAgICAjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLTY0Lm1hY3JvcyIKKyNlbmRpZgorCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MiCisKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3JkcyhVSU5UNjQgKnN0YXRlKQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGUoQSwgc3RhdGUpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCwgdW5zaWduZWQgaW50IGxhbmVDb3VudCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisJdW5zaWduZWQgaW50IGo7CisKKyAgICBmb3Ioaj0wOyBqPGxhbmVDb3VudDsgaisrKQorICAgICAgICBzdGF0ZVtqXSBePSBpbnB1dFtqXTsJCisgICAgY29weUZyb21TdGF0ZShBLCBzdGF0ZSkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorCisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nNTc2Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc4MzJiaXRzKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisgICAgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwODhiaXRzKFVJTlQ2NCAqc3RhdGUsIGNvbnN0IFVJTlQ2NCAqaW5wdXQpCit7CisgICAgZGVjbGFyZUFCQ0RFCisjaWYgKFVucm9sbGluZyAhPSAyNCkKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyNlbmRpZgorCisgICAgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKEEsIHN0YXRlLCBpbnB1dCkKKyAgICByb3VuZHMKKyNpZiBkZWZpbmVkKFVzZU1NWCkKKyAgICBfbW1fZW1wdHkoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKK3N0YXRpYyB2b2lkIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTE1MmJpdHMoVUlOVDY0ICpzdGF0ZSwgY29uc3QgVUlOVDY0ICppbnB1dCkKK3sKKyAgICBkZWNsYXJlQUJDREUKKyNpZiAoVW5yb2xsaW5nICE9IDI0KQorICAgIHVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKyAgICBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoQSwgc3RhdGUsIGlucHV0KQorICAgIHJvdW5kcworI2lmIGRlZmluZWQoVXNlTU1YKQorICAgIF9tbV9lbXB0eSgpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTM0NAorc3RhdGljIHZvaWQgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cyhVSU5UNjQgKnN0YXRlLCBjb25zdCBVSU5UNjQgKmlucHV0KQoreworICAgIGRlY2xhcmVBQkNERQorI2lmIChVbnJvbGxpbmcgIT0gMjQpCisgICAgdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKworICAgIGNvcHlGcm9tU3RhdGVBbmRYb3IxMzQ0Yml0cyhBLCBzdGF0ZSwgaW5wdXQpCisgICAgcm91bmRzCisjaWYgZGVmaW5lZChVc2VNTVgpCisgICAgX21tX2VtcHR5KCk7CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtJbml0aWFsaXplKCkKK3sKK30KKworc3RhdGljIHZvaWQgS2VjY2FrSW5pdGlhbGl6ZVN0YXRlKHVuc2lnbmVkIGNoYXIgKnN0YXRlKQoreworICAgIG1lbXNldChzdGF0ZSwgMCwgMjAwKTsKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICAoKFVJTlQ2NCopc3RhdGUpWyAxXSA9IH4oVUlOVDY0KTA7CisgICAgKChVSU5UNjQqKXN0YXRlKVsgMl0gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbIDhdID0gfihVSU5UNjQpMDsKKyAgICAoKFVJTlQ2NCopc3RhdGUpWzEyXSA9IH4oVUlOVDY0KTA7CisgICAgKChVSU5UNjQqKXN0YXRlKVsxN10gPSB+KFVJTlQ2NCkwOworICAgICgoVUlOVDY0KilzdGF0ZSlbMjBdID0gfihVSU5UNjQpMDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBLZWNjYWtQZXJtdXRhdGlvbih1bnNpZ25lZCBjaGFyICpzdGF0ZSkKK3sKKyAgICAvKiAgV2UgYXNzdW1lIHRoZSBzdGF0ZSBpcyBhbHdheXMgc3RvcmVkIGFzIHdvcmRzICovCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzKChVSU5UNjQqKXN0YXRlKTsKK30KKworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0JJR19FTkRJQU4pCitzdGF0aWMgdm9pZCBmcm9tQnl0ZXNUb1dvcmQoVUlOVDY0ICp3b3JkLCBjb25zdCBVSU5UOCAqYnl0ZXMpCit7CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICAqd29yZCA9IDA7CisgICAgZm9yKGk9MDsgaTwoNjQvOCk7IGkrKykKKyAgICAgICAgKndvcmQgfD0gKFVJTlQ2NCkoYnl0ZXNbaV0pIDw8ICg4KmkpOworfQorI2VuZGlmCisKKworI2lmZGVmIFByb3ZpZGVGYXN0NTc2CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmI1NzZiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3Jpbmc1NzZiaXRzKChVSU5UNjQqKXN0YXRlLCAoY29uc3QgVUlOVDY0KilkYXRhKTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzldOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTw5OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzU3NmJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDgzMgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiODMyYml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nODMyYml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1sxM107CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDEzOyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzgzMmJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEwMjRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDI0Yml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1sxNl07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDE2OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEwMjRiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWZkZWYgUHJvdmlkZUZhc3QxMDg4CitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIxMDg4Yml0cyh1bnNpZ25lZCBjaGFyICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTA4OGJpdHMoKFVJTlQ2NCopc3RhdGUsIChjb25zdCBVSU5UNjQqKWRhdGEpOworI2Vsc2UKKyAgICBVSU5UNjQgZGF0YUFzV29yZHNbMTddOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yKGk9MDsgaTwxNzsgaSsrKQorICAgICAgICBmcm9tQnl0ZXNUb1dvcmQoZGF0YUFzV29yZHMraSwgZGF0YSsoaSo4KSk7CisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMDg4Yml0cygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMpOworI2VuZGlmCit9CisjZW5kaWYKKworI2lmZGVmIFByb3ZpZGVGYXN0MTE1Mgorc3RhdGljIHZvaWQgS2VjY2FrQWJzb3JiMTE1MmJpdHModW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzExNTJiaXRzKChVSU5UNjQqKXN0YXRlLCAoY29uc3QgVUlOVDY0KilkYXRhKTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzE4XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8MTg7IGkrKykKKyAgICAgICAgZnJvbUJ5dGVzVG9Xb3JkKGRhdGFBc1dvcmRzK2ksIGRhdGErKGkqOCkpOworICAgIEtlY2Nha1Blcm11dGF0aW9uT25Xb3Jkc0FmdGVyWG9yaW5nMTE1MmJpdHMoKFVJTlQ2NCopc3RhdGUsIGRhdGFBc1dvcmRzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKK3N0YXRpYyB2b2lkIEtlY2Nha0Fic29yYjEzNDRiaXRzKHVuc2lnbmVkIGNoYXIgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0xJVFRMRV9FTkRJQU4pCisgICAgS2VjY2FrUGVybXV0YXRpb25PbldvcmRzQWZ0ZXJYb3JpbmcxMzQ0Yml0cygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSk7CisjZWxzZQorICAgIFVJTlQ2NCBkYXRhQXNXb3Jkc1syMV07CisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDIxOyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZzEzNDRiaXRzKChVSU5UNjQqKXN0YXRlLCBkYXRhQXNXb3Jkcyk7CisjZW5kaWYKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBLZWNjYWtBYnNvcmIodW5zaWduZWQgY2hhciAqc3RhdGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZygoVUlOVDY0KilzdGF0ZSwgKGNvbnN0IFVJTlQ2NCopZGF0YSwgbGFuZUNvdW50KTsKKyNlbHNlCisgICAgVUlOVDY0IGRhdGFBc1dvcmRzWzI1XTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8bGFuZUNvdW50OyBpKyspCisgICAgICAgIGZyb21CeXRlc1RvV29yZChkYXRhQXNXb3JkcytpLCBkYXRhKyhpKjgpKTsKKyAgICBLZWNjYWtQZXJtdXRhdGlvbk9uV29yZHNBZnRlclhvcmluZygoVUlOVDY0KilzdGF0ZSwgZGF0YUFzV29yZHMsIGxhbmVDb3VudCk7CisjZW5kaWYKK30KKworI2lmIChQTEFURk9STV9CWVRFX09SREVSID09IElTX0JJR19FTkRJQU4pCitzdGF0aWMgdm9pZCBmcm9tV29yZFRvQnl0ZXMoVUlOVDggKmJ5dGVzLCBjb25zdCBVSU5UNjQgd29yZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgIGZvcihpPTA7IGk8KDY0LzgpOyBpKyspCisgICAgICAgIGJ5dGVzW2ldID0gKHdvcmQgPj4gKDgqaSkpICYgMHhGRjsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhjb25zdCB1bnNpZ25lZCBjaGFyICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqZGF0YSkKK3sKKyNpZiAoUExBVEZPUk1fQllURV9PUkRFUiA9PSBJU19MSVRUTEVfRU5ESUFOKQorICAgIG1lbWNweShkYXRhLCBzdGF0ZSwgMTI4KTsKKyNlbHNlCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPDE2OyBpKyspCisgICAgICAgIGZyb21Xb3JkVG9CeXRlcyhkYXRhKyhpKjgpLCAoKGNvbnN0IFVJTlQ2NCopc3RhdGUpW2ldKTsKKyNlbmRpZgorI2lmZGVmIFVzZUJlYmlnb2tpbWlzYQorICAgICgoVUlOVDY0KilkYXRhKVsgMV0gPSB+KChVSU5UNjQqKWRhdGEpWyAxXTsKKyAgICAoKFVJTlQ2NCopZGF0YSlbIDJdID0gfigoVUlOVDY0KilkYXRhKVsgMl07CisgICAgKChVSU5UNjQqKWRhdGEpWyA4XSA9IH4oKFVJTlQ2NCopZGF0YSlbIDhdOworICAgICgoVUlOVDY0KilkYXRhKVsxMl0gPSB+KChVSU5UNjQqKWRhdGEpWzEyXTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIEtlY2Nha0V4dHJhY3QoY29uc3QgdW5zaWduZWQgY2hhciAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsYW5lQ291bnQpCit7CisjaWYgKFBMQVRGT1JNX0JZVEVfT1JERVIgPT0gSVNfTElUVExFX0VORElBTikKKyAgICBtZW1jcHkoZGF0YSwgc3RhdGUsIGxhbmVDb3VudCo4KTsKKyNlbHNlCisgICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBmb3IoaT0wOyBpPGxhbmVDb3VudDsgaSsrKQorICAgICAgICBmcm9tV29yZFRvQnl0ZXMoZGF0YSsoaSo4KSwgKChjb25zdCBVSU5UNjQqKXN0YXRlKVtpXSk7CisjZW5kaWYKKyNpZmRlZiBVc2VCZWJpZ29raW1pc2EKKyAgICBpZiAobGFuZUNvdW50ID4gMSkgeworICAgICAgICAoKFVJTlQ2NCopZGF0YSlbIDFdID0gfigoVUlOVDY0KilkYXRhKVsgMV07CisgICAgICAgIGlmIChsYW5lQ291bnQgPiAyKSB7CisgICAgICAgICAgICAoKFVJTlQ2NCopZGF0YSlbIDJdID0gfigoVUlOVDY0KilkYXRhKVsgMl07CisgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gOCkgeworICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsgOF0gPSB+KChVSU5UNjQqKWRhdGEpWyA4XTsKKyAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgKChVSU5UNjQqKWRhdGEpWzEyXSA9IH4oKFVJTlQ2NCopZGF0YSlbMTJdOworICAgICAgICAgICAgICAgICAgICBpZiAobGFuZUNvdW50ID4gMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsxN10gPSB+KChVSU5UNjQqKWRhdGEpWzE3XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYW5lQ291bnQgPiAyMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoVUlOVDY0KilkYXRhKVsyMF0gPSB+KChVSU5UNjQqKWRhdGEpWzIwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQxMjgubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQxMjgubWFjcm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZTQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtc2ltZDEyOC5tYWNyb3MKQEAgLTAsMCArMSw2NTEgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjZGVmaW5lIGRlY2xhcmVBQkNERSBcCisgICAgVjY0NjQgQWJhZ2UsIEFiZWdpLCBBYmlnbywgQWJvZ3UsIEFidWdhOyBcCisgICAgVjY0NjQgQWthbWUsIEFrZW1pLCBBa2ltbywgQWtvbXUsIEFrdW1hOyBcCisgICAgVjY0NjQgQWJhZSwgQWJpbywgQWdhZSwgQWdpbywgQWthZSwgQWtpbywgQW1hZSwgQW1pbywgQXNhZSwgQXNpbzsgXAorICAgIFY2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFY2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFY2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFY2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFY2NCBBc2EsIEFzZSwgQXNpLCBBc28sIEFzdTsgXAorICAgIFYxMjggQmJhZ2UsIEJiZWdpLCBCYmlnbywgQmJvZ3UsIEJidWdhOyBcCisgICAgVjEyOCBCa2FtZSwgQmtlbWksIEJraW1vLCBCa29tdSwgQmt1bWE7IFwKKyAgICBWNjQgQmJhLCBCYmUsIEJiaSwgQmJvLCBCYnU7IFwKKyAgICBWNjQgQmdhLCBCZ2UsIEJnaSwgQmdvLCBCZ3U7IFwKKyAgICBWNjQgQmthLCBCa2UsIEJraSwgQmtvLCBCa3U7IFwKKyAgICBWNjQgQm1hLCBCbWUsIEJtaSwgQm1vLCBCbXU7IFwKKyAgICBWNjQgQnNhLCBCc2UsIEJzaSwgQnNvLCBCc3U7IFwKKyAgICBWMTI4IENhZSwgQ2VpLCBDaW8sIENvdSwgQ3VhLCBEZWksIERvdTsgXAorICAgIFY2NCBDYSwgQ2UsIENpLCBDbywgQ3U7IFwKKyAgICBWNjQgRGEsIERlLCBEaSwgRG8sIER1OyBcCisgICAgVjY0NjQgRWJhZ2UsIEViZWdpLCBFYmlnbywgRWJvZ3UsIEVidWdhOyBcCisgICAgVjY0NjQgRWthbWUsIEVrZW1pLCBFa2ltbywgRWtvbXUsIEVrdW1hOyBcCisgICAgVjY0IEViYSwgRWJlLCBFYmksIEVibywgRWJ1OyBcCisgICAgVjY0IEVnYSwgRWdlLCBFZ2ksIEVnbywgRWd1OyBcCisgICAgVjY0IEVrYSwgRWtlLCBFa2ksIEVrbywgRWt1OyBcCisgICAgVjY0IEVtYSwgRW1lLCBFbWksIEVtbywgRW11OyBcCisgICAgVjY0IEVzYSwgRXNlLCBFc2ksIEVzbywgRXN1OyBcCisgICAgVjEyOCBaZXJvOworCisjZGVmaW5lIHByZXBhcmVUaGV0YQorCisjZGVmaW5lIGNvbXB1dGVEIFwKKyAgICBDdWEgPSBHRVQ2NExPTE8oQ3UsIENhZSk7IFwKKyAgICBEZWkgPSBYT1IxMjgoQ2FlLCBST0w2NGluMTI4KENpbywgMSkpOyBcCisgICAgRG91ID0gWE9SMTI4KENpbywgUk9MNjRpbjEyOChDdWEsIDEpKTsgXAorICAgIERhID0gWE9SNjQoQ3UsIFJPTDY0aW4xMjgoQ09QWTY0SEkyTE8oQ2FlKSwgMSkpOyBcCisgICAgRGUgPSBEZWk7IFwKKyAgICBEaSA9IENPUFk2NEhJMkxPKERlaSk7IFwKKyAgICBEbyA9IERvdTsgXAorICAgIER1ID0gQ09QWTY0SEkyTE8oRG91KTsKKworLyogIC0tLSBUaGV0YSBSaG8gUGkgQ2hpIElvdGEgUHJlcGFyZS10aGV0YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCBhbmQgMTI4LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgY29tcHV0ZUQgXAorICAgIFwKKyAgICBBIyNiYSA9IExPQUQ2NChBIyNiYWdlLnY2NFswXSk7IFwKKyAgICBYT1JlcTY0KEEjI2JhLCBEYSk7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjZ3UsIER1KTsgXAorICAgIEJnZSA9IFJPTDY0KEEjI2d1LCAyMCk7IFwKKyAgICBCYmFnZSA9IEdFVDY0TE9MTyhCYmEsIEJnZSk7IFwKKyAgICBBIyNnZSA9IExPQUQ2NChBIyNiYWdlLnY2NFsxXSk7IFwKKyAgICBYT1JlcTY0KEEjI2dlLCBEZSk7IFwKKyAgICBCYmUgPSBST0w2NChBIyNnZSwgNDQpOyBcCisgICAgQSMja2EgPSBMT0FENjQoQSMja2FtZS52NjRbMF0pOyBcCisgICAgWE9SZXE2NChBIyNrYSwgRGEpOyBcCisgICAgQmdpID0gUk9MNjQoQSMja2EsIDMpOyBcCisgICAgQmJlZ2kgPSBHRVQ2NExPTE8oQmJlLCBCZ2kpOyBcCisgICAgWE9SZXE2NChBIyNraSwgRGkpOyBcCisgICAgQmJpID0gUk9MNjQoQSMja2ksIDQzKTsgXAorICAgIEEjI21lID0gTE9BRDY0KEEjI2thbWUudjY0WzFdKTsgXAorICAgIFhPUmVxNjQoQSMjbWUsIERlKTsgXAorICAgIEJnbyA9IFJPTDY0KEEjI21lLCA0NSk7IFwKKyAgICBCYmlnbyA9IEdFVDY0TE9MTyhCYmksIEJnbyk7IFwKKyAgICBFIyNiYWdlLnYxMjggPSBYT1IxMjgoQmJhZ2UsIEFORG51MTI4KEJiZWdpLCBCYmlnbykpOyBcCisgICAgWE9SZXExMjgoRSMjYmFnZS52MTI4LCBDT05TVDY0KEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbaV0pKTsgXAorICAgIENhZSA9IEUjI2JhZ2UudjEyODsgXAorICAgIFhPUmVxNjQoQSMjbW8sIERvKTsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBYT1JlcTY0KEEjI3NpLCBEaSk7IFwKKyAgICBCZ3UgPSBST0w2NChBIyNzaSwgNjEpOyBcCisgICAgQmJvZ3UgPSBHRVQ2NExPTE8oQmJvLCBCZ3UpOyBcCisgICAgRSMjYmVnaS52MTI4ID0gWE9SMTI4KEJiZWdpLCBBTkRudTEyOChCYmlnbywgQmJvZ3UpKTsgXAorICAgIENlaSA9IEUjI2JlZ2kudjEyODsgXAorICAgIFhPUmVxNjQoQSMjc3UsIER1KTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBYT1JlcTY0KEEjI2JvLCBEbyk7IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgQmJ1Z2EgPSBHRVQ2NExPTE8oQmJ1LCBCZ2EpOyBcCisgICAgRSMjYmlnby52MTI4ID0gWE9SMTI4KEJiaWdvLCBBTkRudTEyOChCYm9ndSwgQmJ1Z2EpKTsgXAorICAgIEUjI2JpID0gRSMjYmlnby52MTI4OyBcCisgICAgRSMjZ28gPSBHRVQ2NEhJSEkoRSMjYmlnby52MTI4LCBFIyNiaWdvLnYxMjgpOyBcCisgICAgQ2lvID0gRSMjYmlnby52MTI4OyBcCisgICAgRSMjYm9ndS52MTI4ID0gWE9SMTI4KEJib2d1LCBBTkRudTEyOChCYnVnYSwgQmJhZ2UpKTsgXAorICAgIEUjI2JvID0gRSMjYm9ndS52MTI4OyBcCisgICAgRSMjZ3UgPSBHRVQ2NEhJSEkoRSMjYm9ndS52MTI4LCBFIyNib2d1LnYxMjgpOyBcCisgICAgQ291ID0gRSMjYm9ndS52MTI4OyBcCisgICAgRSMjYnVnYS52MTI4ID0gWE9SMTI4KEJidWdhLCBBTkRudTEyOChCYmFnZSwgQmJlZ2kpKTsgXAorICAgIEUjI2J1ID0gRSMjYnVnYS52MTI4OyBcCisgICAgRSMjZ2EgPSBHRVQ2NEhJSEkoRSMjYnVnYS52MTI4LCBFIyNidWdhLnYxMjgpOyBcCisgICAgQ3VhID0gRSMjYnVnYS52MTI4OyBcCitcCisgICAgQSMjYmUgPSBMT0FENjQoQSMjYmVnaS52NjRbMF0pOyBcCisgICAgWE9SZXE2NChBIyNiZSwgRGUpOyBcCisgICAgQmthID0gUk9MNjQoQSMjYmUsIDEpOyBcCisgICAgWE9SZXE2NChBIyNnYSwgRGEpOyBcCisgICAgQm1lID0gUk9MNjQoQSMjZ2EsIDM2KTsgXAorICAgIEJrYW1lID0gR0VUNjRMT0xPKEJrYSwgQm1lKTsgXAorICAgIEEjI2dpID0gTE9BRDY0KEEjI2JlZ2kudjY0WzFdKTsgXAorICAgIFhPUmVxNjQoQSMjZ2ksIERpKTsgXAorICAgIEJrZSA9IFJPTDY0KEEjI2dpLCA2KTsgXAorICAgIEEjI2tlID0gTE9BRDY0KEEjI2tlbWkudjY0WzBdKTsgXAorICAgIFhPUmVxNjQoQSMja2UsIERlKTsgXAorICAgIEJtaSA9IFJPTDY0KEEjI2tlLCAxMCk7IFwKKyAgICBCa2VtaSA9IEdFVDY0TE9MTyhCa2UsIEJtaSk7IFwKKyAgICBYT1JlcTY0KEEjI2tvLCBEbyk7IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgQSMjbWkgPSBMT0FENjQoQSMja2VtaS52NjRbMV0pOyBcCisgICAgWE9SZXE2NChBIyNtaSwgRGkpOyBcCisgICAgQm1vID0gUk9MNjQoQSMjbWksIDE1KTsgXAorICAgIEJraW1vID0gR0VUNjRMT0xPKEJraSwgQm1vKTsgXAorICAgIEUjI2thbWUudjEyOCA9IFhPUjEyOChCa2FtZSwgQU5EbnUxMjgoQmtlbWksIEJraW1vKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEUjI2thbWUudjEyOCk7IFwKKyAgICBCa29tdSA9IEdFVDY0TE9MTyhYT1I2NChBIyNtdSwgRHUpLCBYT1I2NChBIyNzbywgRG8pKTsgXAorICAgIEJrb211ID0gU0hVRkZMRUJZVEVTMTI4KEJrb211LCBDT05TVDEyOChyaG84XzU2KSk7IFwKKyAgICBFIyNrZW1pLnYxMjggPSBYT1IxMjgoQmtlbWksIEFORG51MTI4KEJraW1vLCBCa29tdSkpOyBcCisgICAgWE9SZXExMjgoQ2VpLCBFIyNrZW1pLnYxMjgpOyBcCisgICAgWE9SZXE2NChBIyNzYSwgRGEpOyBcCisgICAgQmt1ID0gUk9MNjQoQSMjc2EsIDE4KTsgXAorICAgIFhPUmVxNjQoQSMjYnUsIER1KTsgXAorICAgIEJtYSA9IFJPTDY0KEEjI2J1LCAyNyk7IFwKKyAgICBCa3VtYSA9IEdFVDY0TE9MTyhCa3UsIEJtYSk7IFwKKyAgICBFIyNraW1vLnYxMjggPSBYT1IxMjgoQmtpbW8sIEFORG51MTI4KEJrb211LCBCa3VtYSkpOyBcCisgICAgRSMja2kgPSBFIyNraW1vLnYxMjg7IFwKKyAgICBFIyNtbyA9IEdFVDY0SElISShFIyNraW1vLnYxMjgsIEUjI2tpbW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIEUjI2tpbW8udjEyOCk7IFwKKyAgICBFIyNrb211LnYxMjggPSBYT1IxMjgoQmtvbXUsIEFORG51MTI4KEJrdW1hLCBCa2FtZSkpOyBcCisgICAgRSMja28gPSBFIyNrb211LnYxMjg7IFwKKyAgICBFIyNtdSA9IEdFVDY0SElISShFIyNrb211LnYxMjgsIEUjI2tvbXUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDb3UsIEUjI2tvbXUudjEyOCk7IFwKKyAgICBFIyNrdW1hLnYxMjggPSBYT1IxMjgoQmt1bWEsIEFORG51MTI4KEJrYW1lLCBCa2VtaSkpOyBcCisgICAgRSMja3UgPSBFIyNrdW1hLnYxMjg7IFwKKyAgICBFIyNtYSA9IEdFVDY0SElISShFIyNrdW1hLnYxMjgsIEUjI2t1bWEudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDdWEsIEUjI2t1bWEudjEyOCk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JpLCBEaSk7IFwKKyAgICBCc2EgPSBST0w2NChBIyNiaSwgNjIpOyBcCisgICAgWE9SZXE2NChBIyNnbywgRG8pOyBcCisgICAgQnNlID0gUk9MNjQoQSMjZ28sIDU1KTsgXAorICAgIFhPUmVxNjQoQSMja3UsIER1KTsgXAorICAgIEJzaSA9IFJPTDY0KEEjI2t1LCAzOSk7IFwKKyAgICBFIyNzYSA9IFhPUjY0KEJzYSwgQU5EbnU2NChCc2UsIEJzaSkpOyBcCisgICAgQ2EgPSBFIyNzYTsgXAorICAgIFhPUmVxNjQoQSMjbWEsIERhKTsgXAorICAgIEJzbyA9IFJPTDY0KEEjI21hLCA0MSk7IFwKKyAgICBFIyNzZSA9IFhPUjY0KEJzZSwgQU5EbnU2NChCc2ksIEJzbykpOyBcCisgICAgQ2UgPSBFIyNzZTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRMT0xPKENhLCBDZSkpOyBcCisgICAgWE9SZXE2NChBIyNzZSwgRGUpOyBcCisgICAgQnN1ID0gUk9MNjQoQSMjc2UsIDIpOyBcCisgICAgRSMjc2kgPSBYT1I2NChCc2ksIEFORG51NjQoQnNvLCBCc3UpKTsgXAorICAgIENpID0gRSMjc2k7IFwKKyAgICBFIyNzbyA9IFhPUjY0KEJzbywgQU5EbnU2NChCc3UsIEJzYSkpOyBcCisgICAgQ28gPSBFIyNzbzsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRMT0xPKENpLCBDbykpOyBcCisgICAgRSMjc3UgPSBYT1I2NChCc3UsIEFORG51NjQoQnNhLCBCc2UpKTsgXAorICAgIEN1ID0gRSMjc3U7IFwKK1wKKyAgICBaZXJvID0gWkVSTzEyOCgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoQ3VhLCBaZXJvKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0TE9MTyhaZXJvLCBDZWkpKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRISUhJKENlaSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBHRVQ2NExPTE8oWmVybywgQ291KSk7IFwKKyAgICBYT1JlcTEyOChDdWEsIEdFVDY0SElISShDb3UsIFplcm8pKTsgXAorICAgIFhPUmVxNjQoQ3UsIEN1YSk7IFwKKworLyogIC0tLSBUaGV0YSBSaG8gUGkgQ2hpIElvdGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGEoaSwgQSwgRSkgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkKKworc3RhdGljIGNvbnN0IFVJTlQ2NCBLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzWzI0XSA9IHsKKyAgICAweDAwMDAwMDAwMDAwMDAwMDFVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDgyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4YVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwMDBVTEwsCisgICAgMHgwMDAwMDAwMDAwMDA4MDhiVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwMVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDgwODFVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4YVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDAwODhVTEwsCisgICAgMHgwMDAwMDAwMDgwMDA4MDA5VUxMLAorICAgIDB4MDAwMDAwMDA4MDAwMDAwYVVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDhiVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4OVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDNVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDAyVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwMDA4MFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwODBVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwOFVMTCB9OworCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I1NzZiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZS52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLnYxMjgsIFgjI2JhZS52MTI4KTsgXAorICAgIENhZSA9IFgjI2JhZS52MTI4OyBcCisgICAgWCMjYmlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8udjEyOCwgWCMjYmlvLnYxMjgpOyBcCisgICAgQ2lvID0gWCMjYmlvLnYxMjg7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZS52MTI4OyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLnYxMjgsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2JhZ2UudjEyOCA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNnaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvLnYxMjg7IFwKKyAgICBYIyNiZWdpLnYxMjggPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpby52MTI4LCBYIyNnaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpby52MTI4KTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IExPQUQxMjgoc3RhdGVbMTBdKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvLnYxMjg7IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8udjEyOCwgWCMja2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8udjEyOCk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxNV0pOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yODMyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLnYxMjgsIFgjI2Jpby52MTI4KTsgXAorICAgIENpbyA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpby52MTI4OyBcCisgICAgWCMjYmVnaS52MTI4ID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8udjEyOCwgWCMjZ2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8udjEyOCk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWUudjEyODsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZS52MTI4LCBYIyNrYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZS52MTI4KTsgXAorICAgIFgjI2tpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gTE9BRDY0KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IExPQUQxMjh1KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtYSA9IFgjI21hZS52MTI4OyBcCisgICAgWCMjbWUgPSBHRVQ2NEhJSEkoWCMjbWFlLnYxMjgsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI2thbWUudjEyOCA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNtaW8udjEyOCA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pby52MTI4OyBcCisgICAgWCMja2VtaS52MTI4ID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8udjEyOCwgWCMjbWlvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8udjEyOCk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjbXUpOyBcCisgICAgWCMjc2FlLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzYSA9IFgjI3NhZS52MTI4OyBcCisgICAgWCMjc2UgPSBHRVQ2NEhJSEkoWCMjc2FlLnYxMjgsIFgjI3NhZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FlLnYxMjgpOyBcCisgICAgWCMjc2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzaSA9IFgjI3Npby52MTI4OyBcCisgICAgWCMjc28gPSBHRVQ2NEhJSEkoWCMjc2lvLnYxMjgsIFgjI3Npby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lvLnYxMjgpOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLnYxMjgsIFgjI2Jpby52MTI4KTsgXAorICAgIENpbyA9IFgjI2Jpby52MTI4OyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3UgPSBYIyNidTsgXAorICAgIFgjI2dhZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpby52MTI4OyBcCisgICAgWCMjYmVnaS52MTI4ID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8udjEyOCwgWCMjZ2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8udjEyOCk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNndSk7IFwKKyAgICBYIyNrYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWUudjEyODsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZS52MTI4LCBYIyNrYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZS52MTI4KTsgXAorICAgIFgjI2tpby52MTI4ID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpby52MTI4OyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLnYxMjgsIFgjI2tpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvLnYxMjgpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMja3UpOyBcCisgICAgWCMjbWFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQxMjh1KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQxMjh1KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTddKSwgTE9BRDY0KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbWkgPSBYIyNtaW8udjEyODsgXAorICAgIFgjI2tlbWkudjEyOCA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLnYxMjgsIFgjI21pby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvLnYxMjgpOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI211KTsgXAorICAgIFgjI3NhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2EgPSBYIyNzYWUudjEyODsgXAorICAgIFgjI3NlID0gR0VUNjRISUhJKFgjI3NhZS52MTI4LCBYIyNzYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3NhZS52MTI4KTsgXAorICAgIFgjI3Npby52MTI4ID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc2kgPSBYIyNzaW8udjEyODsgXAorICAgIFgjI3NvID0gR0VUNjRISUhJKFgjI3Npby52MTI4LCBYIyNzaW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npby52MTI4KTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUudjEyOCwgWCMjYmFlLnYxMjgpOyBcCisgICAgQ2FlID0gWCMjYmFlLnYxMjg7IFwKKyAgICBYIyNiaW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1ID0gWCMjYnU7IFwKKyAgICBYIyNnYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlLnYxMjg7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUudjEyOCwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjYmFnZS52MTI4ID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZS52MTI4KTsgXAorICAgIFgjI2dpby52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWE9SZXE2NChDdSwgWCMjZ3UpOyBcCisgICAgWCMja2FlLnYxMjggPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlLnYxMjg7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUudjEyOCwgWCMja2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUudjEyOCk7IFwKKyAgICBYIyNraW8udjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE0XSksIExPQUQ2NChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2t1KTsgXAorICAgIFgjI21hZS52MTI4ID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE1XSksIExPQUQxMjh1KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWEgPSBYIyNtYWUudjEyODsgXAorICAgIFgjI21lID0gR0VUNjRISUhJKFgjI21hZS52MTI4LCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNrYW1lLnYxMjggPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjbWFlLnYxMjgpOyBcCisgICAgWCMjbWlvLnYxMjggPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbMTddKSwgTE9BRDEyOHUoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtaSA9IFgjI21pby52MTI4OyBcCisgICAgWCMja2VtaS52MTI4ID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8udjEyOCwgWCMjbWlvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8udjEyOCk7IFwKKyAgICBYIyNtdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxOV0pLCBMT0FENjQoaW5wdXRbMTldKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNtdSk7IFwKKyAgICBYIyNzYWUudjEyOCA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzIwXSksIExPQUQ2NChpbnB1dFsyMF0pKTsgXAorICAgIFgjI3NhID0gWCMjc2FlLnYxMjg7IFwKKyAgICBYIyNzZSA9IEdFVDY0SElISShYIyNzYWUudjEyOCwgWCMjc2FlLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYWUudjEyOCk7IFwKKyAgICBYIyNzaW8udjEyOCA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NpID0gWCMjc2lvLnYxMjg7IFwKKyAgICBYIyNzbyA9IEdFVDY0SElISShYIyNzaW8udjEyOCwgWCMjc2lvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaW8udjEyOCk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsgMF0pOyBcCisgICAgWCMjYmEgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZS52MTI4LCBYIyNiYWUudjEyOCk7IFwKKyAgICBDYWUgPSBYIyNiYWUudjEyODsgXAorICAgIFgjI2Jpby52MTI4ID0gTE9BRDEyOChzdGF0ZVsgMl0pOyBcCisgICAgWCMjYmkgPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2Jpby52MTI4LCBYIyNiaW8udjEyOCk7IFwKKyAgICBDaW8gPSBYIyNiaW8udjEyODsgXAorICAgIFgjI2J1ID0gTE9BRDY0KHN0YXRlWyA0XSk7IFwKKyAgICBDdSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsgNV0pOyBcCisgICAgWCMjZ2EgPSBYIyNnYWUudjEyODsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZS52MTI4LCBYIyNnYWUudjEyOCk7IFwKKyAgICBYIyNiYWdlLnYxMjggPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlLnYxMjgpOyBcCisgICAgWCMjZ2lvLnYxMjggPSBMT0FEMTI4dShzdGF0ZVsgN10pOyBcCisgICAgWCMjZ2kgPSBYIyNnaW8udjEyODsgXAorICAgIFgjI2JlZ2kudjEyOCA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLnYxMjgsIFgjI2dpby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvLnYxMjgpOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI2d1KTsgXAorICAgIFgjI2thZS52MTI4ID0gTE9BRDEyOChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2EgPSBYIyNrYWUudjEyODsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZS52MTI4LCBYIyNrYWUudjEyOCk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZS52MTI4KTsgXAorICAgIFgjI2tpby52MTI4ID0gTE9BRDEyOChzdGF0ZVsxMl0pOyBcCisgICAgWCMja2kgPSBYIyNraW8udjEyODsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpby52MTI4LCBYIyNraW8udjEyOCk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpby52MTI4KTsgXAorICAgIFgjI2t1ID0gTE9BRDY0KHN0YXRlWzE0XSk7IFwKKyAgICBYT1JlcTY0KEN1LCBYIyNrdSk7IFwKKyAgICBYIyNtYWUudjEyOCA9IExPQUQxMjh1KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtYSA9IFgjI21hZS52MTI4OyBcCisgICAgWCMjbWUgPSBHRVQ2NEhJSEkoWCMjbWFlLnYxMjgsIFgjI21hZS52MTI4KTsgXAorICAgIFgjI2thbWUudjEyOCA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNtYWUudjEyOCk7IFwKKyAgICBYIyNtaW8udjEyOCA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pby52MTI4OyBcCisgICAgWCMja2VtaS52MTI4ID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8udjEyOCwgWCMjbWlvLnYxMjgpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8udjEyOCk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWE9SZXE2NChDdSwgWCMjbXUpOyBcCisgICAgWCMjc2FlLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYIyNzYSA9IFgjI3NhZS52MTI4OyBcCisgICAgWCMjc2UgPSBHRVQ2NEhJSEkoWCMjc2FlLnYxMjgsIFgjI3NhZS52MTI4KTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FlLnYxMjgpOyBcCisgICAgWCMjc2lvLnYxMjggPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzaSA9IFgjI3Npby52MTI4OyBcCisgICAgWCMjc28gPSBHRVQ2NEhJSEkoWCMjc2lvLnYxMjgsIFgjI3Npby52MTI4KTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lvLnYxMjgpOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3UsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgc3RhdGVbIDBdID0gQSMjYmFnZS52NjRbMF07IFwKKyAgICBzdGF0ZVsgMV0gPSBBIyNiZWdpLnY2NFswXTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDJdLCBYIyNiaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAzXSwgWCMjYm8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgNF0sIFgjI2J1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDVdLCBYIyNnYSk7IFwKKyAgICBzdGF0ZVsgNl0gPSBBIyNiYWdlLnY2NFsxXTsgXAorICAgIHN0YXRlWyA3XSA9IEEjI2JlZ2kudjY0WzFdOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgOF0sIFgjI2dvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDldLCBYIyNndSk7IFwKKyAgICBzdGF0ZVsxMF0gPSBYIyNrYW1lLnY2NFswXTsgXAorICAgIHN0YXRlWzExXSA9IFgjI2tlbWkudjY0WzBdOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMl0sIFgjI2tpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTNdLCBYIyNrbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE0XSwgWCMja3UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNV0sIFgjI21hKTsgXAorICAgIHN0YXRlWzE2XSA9IFgjI2thbWUudjY0WzFdOyBcCisgICAgc3RhdGVbMTddID0gWCMja2VtaS52NjRbMV07IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE4XSwgWCMjbW8pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOV0sIFgjI211KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjBdLCBYIyNzYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIxXSwgWCMjc2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMl0sIFgjI3NpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjNdLCBYIyNzbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzI0XSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weVN0YXRlVmFyaWFibGVzKFgsIFkpIFwKKyAgICBYIyNiYWdlID0gWSMjYmFnZTsgXAorICAgIFgjI2JlZ2kgPSBZIyNiZWdpOyBcCisgICAgWCMjYmkgPSBZIyNiaTsgXAorICAgIFgjI2JvID0gWSMjYm87IFwKKyAgICBYIyNidSA9IFkjI2J1OyBcCisgICAgWCMjZ2EgPSBZIyNnYTsgXAorICAgIFgjI2dvID0gWSMjZ287IFwKKyAgICBYIyNndSA9IFkjI2d1OyBcCisgICAgWCMja2FtZSA9IFkjI2thbWU7IFwKKyAgICBYIyNrZW1pID0gWSMja2VtaTsgXAorICAgIFgjI2tpID0gWSMja2k7IFwKKyAgICBYIyNrbyA9IFkjI2tvOyBcCisgICAgWCMja3UgPSBZIyNrdTsgXAorICAgIFgjI21hID0gWSMjbWE7IFwKKyAgICBYIyNtbyA9IFkjI21vOyBcCisgICAgWCMjbXUgPSBZIyNtdTsgXAorICAgIFgjI3NhID0gWSMjc2E7IFwKKyAgICBYIyNzZSA9IFkjI3NlOyBcCisgICAgWCMjc2kgPSBZIyNzaTsgXAorICAgIFgjI3NvID0gWSMjc287IFwKKyAgICBYIyNzdSA9IFkjI3N1OyBcCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXNpbWQ2NC5tYWNyb3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZhMzBlMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha0YtMTYwMC1zaW1kNjQubWFjcm9zCkBAIC0wLDAgKzEsNTE3IEBACisvKgorQ29kZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBLZWNjYWtUb29scyEKKworVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2RlZmluZSBkZWNsYXJlQUJDREUgXAorICAgIFY2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFY2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFY2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFY2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFY2NCBBc2EsIEFzZSwgQXNpLCBBc28sIEFzdTsgXAorICAgIFY2NCBCYmEsIEJiZSwgQmJpLCBCYm8sIEJidTsgXAorICAgIFY2NCBCZ2EsIEJnZSwgQmdpLCBCZ28sIEJndTsgXAorICAgIFY2NCBCa2EsIEJrZSwgQmtpLCBCa28sIEJrdTsgXAorICAgIFY2NCBCbWEsIEJtZSwgQm1pLCBCbW8sIEJtdTsgXAorICAgIFY2NCBCc2EsIEJzZSwgQnNpLCBCc28sIEJzdTsgXAorICAgIFY2NCBDYSwgQ2UsIENpLCBDbywgQ3U7IFwKKyAgICBWNjQgRGEsIERlLCBEaSwgRG8sIER1OyBcCisgICAgVjY0IEViYSwgRWJlLCBFYmksIEVibywgRWJ1OyBcCisgICAgVjY0IEVnYSwgRWdlLCBFZ2ksIEVnbywgRWd1OyBcCisgICAgVjY0IEVrYSwgRWtlLCBFa2ksIEVrbywgRWt1OyBcCisgICAgVjY0IEVtYSwgRW1lLCBFbWksIEVtbywgRW11OyBcCisgICAgVjY0IEVzYSwgRXNlLCBFc2ksIEVzbywgRXN1OyBcCisKKyNkZWZpbmUgcHJlcGFyZVRoZXRhIFwKKyAgICBDYSA9IFhPUjY0KEFiYSwgWE9SNjQoQWdhLCBYT1I2NChBa2EsIFhPUjY0KEFtYSwgQXNhKSkpKTsgXAorICAgIENlID0gWE9SNjQoQWJlLCBYT1I2NChBZ2UsIFhPUjY0KEFrZSwgWE9SNjQoQW1lLCBBc2UpKSkpOyBcCisgICAgQ2kgPSBYT1I2NChBYmksIFhPUjY0KEFnaSwgWE9SNjQoQWtpLCBYT1I2NChBbWksIEFzaSkpKSk7IFwKKyAgICBDbyA9IFhPUjY0KEFibywgWE9SNjQoQWdvLCBYT1I2NChBa28sIFhPUjY0KEFtbywgQXNvKSkpKTsgXAorICAgIEN1ID0gWE9SNjQoQWJ1LCBYT1I2NChBZ3UsIFhPUjY0KEFrdSwgWE9SNjQoQW11LCBBc3UpKSkpOyBcCisKKy8qICAtLS0gQ29kZSBmb3Igcm91bmQsIHdpdGggcHJlcGFyZS10aGV0YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKSBcCisgICAgRGEgPSBYT1I2NChDdSwgUk9MNjQoQ2UsIDEpKTsgXAorICAgIERlID0gWE9SNjQoQ2EsIFJPTDY0KENpLCAxKSk7IFwKKyAgICBEaSA9IFhPUjY0KENlLCBST0w2NChDbywgMSkpOyBcCisgICAgRG8gPSBYT1I2NChDaSwgUk9MNjQoQ3UsIDEpKTsgXAorICAgIER1ID0gWE9SNjQoQ28sIFJPTDY0KENhLCAxKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JhLCBEYSk7IFwKKyAgICBCYmEgPSBBIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjZ2UsIERlKTsgXAorICAgIEJiZSA9IFJPTDY0KEEjI2dlLCA0NCk7IFwKKyAgICBYT1JlcTY0KEEjI2tpLCBEaSk7IFwKKyAgICBCYmkgPSBST0w2NChBIyNraSwgNDMpOyBcCisgICAgRSMjYmEgPSBYT1I2NChCYmEsIEFORG51NjQoQmJlLCBCYmkpKTsgXAorICAgIFhPUmVxNjQoRSMjYmEsIENPTlNUNjQoS2VjY2FrRjE2MDBSb3VuZENvbnN0YW50c1tpXSkpOyBcCisgICAgQ2EgPSBFIyNiYTsgXAorICAgIFhPUmVxNjQoQSMjbW8sIERvKTsgXAorICAgIEJibyA9IFJPTDY0KEEjI21vLCAyMSk7IFwKKyAgICBFIyNiZSA9IFhPUjY0KEJiZSwgQU5EbnU2NChCYmksIEJibykpOyBcCisgICAgQ2UgPSBFIyNiZTsgXAorICAgIFhPUmVxNjQoQSMjc3UsIER1KTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiaSA9IFhPUjY0KEJiaSwgQU5EbnU2NChCYm8sIEJidSkpOyBcCisgICAgQ2kgPSBFIyNiaTsgXAorICAgIEUjI2JvID0gWE9SNjQoQmJvLCBBTkRudTY0KEJidSwgQmJhKSk7IFwKKyAgICBDbyA9IEUjI2JvOyBcCisgICAgRSMjYnUgPSBYT1I2NChCYnUsIEFORG51NjQoQmJhLCBCYmUpKTsgXAorICAgIEN1ID0gRSMjYnU7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JvLCBEbyk7IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgWE9SZXE2NChBIyNndSwgRHUpOyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIFhPUmVxNjQoQSMja2EsIERhKTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEUjI2dhID0gWE9SNjQoQmdhLCBBTkRudTY0KEJnZSwgQmdpKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNnYSk7IFwKKyAgICBYT1JlcTY0KEEjI21lLCBEZSk7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgRSMjZ2UgPSBYT1I2NChCZ2UsIEFORG51NjQoQmdpLCBCZ28pKTsgXAorICAgIFhPUmVxNjQoQ2UsIEUjI2dlKTsgXAorICAgIFhPUmVxNjQoQSMjc2ksIERpKTsgXAorICAgIEJndSA9IFJPTDY0KEEjI3NpLCA2MSk7IFwKKyAgICBFIyNnaSA9IFhPUjY0KEJnaSwgQU5EbnU2NChCZ28sIEJndSkpOyBcCisgICAgWE9SZXE2NChDaSwgRSMjZ2kpOyBcCisgICAgRSMjZ28gPSBYT1I2NChCZ28sIEFORG51NjQoQmd1LCBCZ2EpKTsgXAorICAgIFhPUmVxNjQoQ28sIEUjI2dvKTsgXAorICAgIEUjI2d1ID0gWE9SNjQoQmd1LCBBTkRudTY0KEJnYSwgQmdlKSk7IFwKKyAgICBYT1JlcTY0KEN1LCBFIyNndSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JlLCBEZSk7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBYT1JlcTY0KEEjI2dpLCBEaSk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBYT1JlcTY0KEEjI2tvLCBEbyk7IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgRSMja2EgPSBYT1I2NChCa2EsIEFORG51NjQoQmtlLCBCa2kpKTsgXAorICAgIFhPUmVxNjQoQ2EsIEUjI2thKTsgXAorICAgIFhPUmVxNjQoQSMjbXUsIER1KTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEUjI2tlID0gWE9SNjQoQmtlLCBBTkRudTY0KEJraSwgQmtvKSk7IFwKKyAgICBYT1JlcTY0KENlLCBFIyNrZSk7IFwKKyAgICBYT1JlcTY0KEEjI3NhLCBEYSk7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2kgPSBYT1I2NChCa2ksIEFORG51NjQoQmtvLCBCa3UpKTsgXAorICAgIFhPUmVxNjQoQ2ksIEUjI2tpKTsgXAorICAgIEUjI2tvID0gWE9SNjQoQmtvLCBBTkRudTY0KEJrdSwgQmthKSk7IFwKKyAgICBYT1JlcTY0KENvLCBFIyNrbyk7IFwKKyAgICBFIyNrdSA9IFhPUjY0KEJrdSwgQU5EbnU2NChCa2EsIEJrZSkpOyBcCisgICAgWE9SZXE2NChDdSwgRSMja3UpOyBcCitcCisgICAgWE9SZXE2NChBIyNidSwgRHUpOyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIFhPUmVxNjQoQSMjZ2EsIERhKTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBYT1JlcTY0KEEjI2tlLCBEZSk7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgRSMjbWEgPSBYT1I2NChCbWEsIEFORG51NjQoQm1lLCBCbWkpKTsgXAorICAgIFhPUmVxNjQoQ2EsIEUjI21hKTsgXAorICAgIFhPUmVxNjQoQSMjbWksIERpKTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBFIyNtZSA9IFhPUjY0KEJtZSwgQU5EbnU2NChCbWksIEJtbykpOyBcCisgICAgWE9SZXE2NChDZSwgRSMjbWUpOyBcCisgICAgWE9SZXE2NChBIyNzbywgRG8pOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21pID0gWE9SNjQoQm1pLCBBTkRudTY0KEJtbywgQm11KSk7IFwKKyAgICBYT1JlcTY0KENpLCBFIyNtaSk7IFwKKyAgICBFIyNtbyA9IFhPUjY0KEJtbywgQU5EbnU2NChCbXUsIEJtYSkpOyBcCisgICAgWE9SZXE2NChDbywgRSMjbW8pOyBcCisgICAgRSMjbXUgPSBYT1I2NChCbXUsIEFORG51NjQoQm1hLCBCbWUpKTsgXAorICAgIFhPUmVxNjQoQ3UsIEUjI211KTsgXAorXAorICAgIFhPUmVxNjQoQSMjYmksIERpKTsgXAorICAgIEJzYSA9IFJPTDY0KEEjI2JpLCA2Mik7IFwKKyAgICBYT1JlcTY0KEEjI2dvLCBEbyk7IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgWE9SZXE2NChBIyNrdSwgRHUpOyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEUjI3NhID0gWE9SNjQoQnNhLCBBTkRudTY0KEJzZSwgQnNpKSk7IFwKKyAgICBYT1JlcTY0KENhLCBFIyNzYSk7IFwKKyAgICBYT1JlcTY0KEEjI21hLCBEYSk7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgRSMjc2UgPSBYT1I2NChCc2UsIEFORG51NjQoQnNpLCBCc28pKTsgXAorICAgIFhPUmVxNjQoQ2UsIEUjI3NlKTsgXAorICAgIFhPUmVxNjQoQSMjc2UsIERlKTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NpID0gWE9SNjQoQnNpLCBBTkRudTY0KEJzbywgQnN1KSk7IFwKKyAgICBYT1JlcTY0KENpLCBFIyNzaSk7IFwKKyAgICBFIyNzbyA9IFhPUjY0KEJzbywgQU5EbnU2NChCc3UsIEJzYSkpOyBcCisgICAgWE9SZXE2NChDbywgRSMjc28pOyBcCisgICAgRSMjc3UgPSBYT1I2NChCc3UsIEFORG51NjQoQnNhLCBCc2UpKTsgXAorICAgIFhPUmVxNjQoQ3UsIEUjI3N1KTsgXAorXAorCisvKiAgLS0tIENvZGUgZm9yIHJvdW5kICovCisvKiAgLS0tIDY0LWJpdCBsYW5lcyBtYXBwZWQgdG8gNjQtYml0IHdvcmRzICovCisjZGVmaW5lIHRoZXRhUmhvUGlDaGlJb3RhKGksIEEsIEUpIFwKKyAgICBEYSA9IFhPUjY0KEN1LCBST0w2NChDZSwgMSkpOyBcCisgICAgRGUgPSBYT1I2NChDYSwgUk9MNjQoQ2ksIDEpKTsgXAorICAgIERpID0gWE9SNjQoQ2UsIFJPTDY0KENvLCAxKSk7IFwKKyAgICBEbyA9IFhPUjY0KENpLCBST0w2NChDdSwgMSkpOyBcCisgICAgRHUgPSBYT1I2NChDbywgUk9MNjQoQ2EsIDEpKTsgXAorXAorICAgIFhPUmVxNjQoQSMjYmEsIERhKTsgXAorICAgIEJiYSA9IEEjI2JhOyBcCisgICAgWE9SZXE2NChBIyNnZSwgRGUpOyBcCisgICAgQmJlID0gUk9MNjQoQSMjZ2UsIDQ0KTsgXAorICAgIFhPUmVxNjQoQSMja2ksIERpKTsgXAorICAgIEJiaSA9IFJPTDY0KEEjI2tpLCA0Myk7IFwKKyAgICBFIyNiYSA9IFhPUjY0KEJiYSwgQU5EbnU2NChCYmUsIEJiaSkpOyBcCisgICAgWE9SZXE2NChFIyNiYSwgQ09OU1Q2NChLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldKSk7IFwKKyAgICBYT1JlcTY0KEEjI21vLCBEbyk7IFwKKyAgICBCYm8gPSBST0w2NChBIyNtbywgMjEpOyBcCisgICAgRSMjYmUgPSBYT1I2NChCYmUsIEFORG51NjQoQmJpLCBCYm8pKTsgXAorICAgIFhPUmVxNjQoQSMjc3UsIER1KTsgXAorICAgIEJidSA9IFJPTDY0KEEjI3N1LCAxNCk7IFwKKyAgICBFIyNiaSA9IFhPUjY0KEJiaSwgQU5EbnU2NChCYm8sIEJidSkpOyBcCisgICAgRSMjYm8gPSBYT1I2NChCYm8sIEFORG51NjQoQmJ1LCBCYmEpKTsgXAorICAgIEUjI2J1ID0gWE9SNjQoQmJ1LCBBTkRudTY0KEJiYSwgQmJlKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JvLCBEbyk7IFwKKyAgICBCZ2EgPSBST0w2NChBIyNibywgMjgpOyBcCisgICAgWE9SZXE2NChBIyNndSwgRHUpOyBcCisgICAgQmdlID0gUk9MNjQoQSMjZ3UsIDIwKTsgXAorICAgIFhPUmVxNjQoQSMja2EsIERhKTsgXAorICAgIEJnaSA9IFJPTDY0KEEjI2thLCAzKTsgXAorICAgIEUjI2dhID0gWE9SNjQoQmdhLCBBTkRudTY0KEJnZSwgQmdpKSk7IFwKKyAgICBYT1JlcTY0KEEjI21lLCBEZSk7IFwKKyAgICBCZ28gPSBST0w2NChBIyNtZSwgNDUpOyBcCisgICAgRSMjZ2UgPSBYT1I2NChCZ2UsIEFORG51NjQoQmdpLCBCZ28pKTsgXAorICAgIFhPUmVxNjQoQSMjc2ksIERpKTsgXAorICAgIEJndSA9IFJPTDY0KEEjI3NpLCA2MSk7IFwKKyAgICBFIyNnaSA9IFhPUjY0KEJnaSwgQU5EbnU2NChCZ28sIEJndSkpOyBcCisgICAgRSMjZ28gPSBYT1I2NChCZ28sIEFORG51NjQoQmd1LCBCZ2EpKTsgXAorICAgIEUjI2d1ID0gWE9SNjQoQmd1LCBBTkRudTY0KEJnYSwgQmdlKSk7IFwKK1wKKyAgICBYT1JlcTY0KEEjI2JlLCBEZSk7IFwKKyAgICBCa2EgPSBST0w2NChBIyNiZSwgMSk7IFwKKyAgICBYT1JlcTY0KEEjI2dpLCBEaSk7IFwKKyAgICBCa2UgPSBST0w2NChBIyNnaSwgNik7IFwKKyAgICBYT1JlcTY0KEEjI2tvLCBEbyk7IFwKKyAgICBCa2kgPSBST0w2NChBIyNrbywgMjUpOyBcCisgICAgRSMja2EgPSBYT1I2NChCa2EsIEFORG51NjQoQmtlLCBCa2kpKTsgXAorICAgIFhPUmVxNjQoQSMjbXUsIER1KTsgXAorICAgIEJrbyA9IFJPTDY0KEEjI211LCA4KTsgXAorICAgIEUjI2tlID0gWE9SNjQoQmtlLCBBTkRudTY0KEJraSwgQmtvKSk7IFwKKyAgICBYT1JlcTY0KEEjI3NhLCBEYSk7IFwKKyAgICBCa3UgPSBST0w2NChBIyNzYSwgMTgpOyBcCisgICAgRSMja2kgPSBYT1I2NChCa2ksIEFORG51NjQoQmtvLCBCa3UpKTsgXAorICAgIEUjI2tvID0gWE9SNjQoQmtvLCBBTkRudTY0KEJrdSwgQmthKSk7IFwKKyAgICBFIyNrdSA9IFhPUjY0KEJrdSwgQU5EbnU2NChCa2EsIEJrZSkpOyBcCitcCisgICAgWE9SZXE2NChBIyNidSwgRHUpOyBcCisgICAgQm1hID0gUk9MNjQoQSMjYnUsIDI3KTsgXAorICAgIFhPUmVxNjQoQSMjZ2EsIERhKTsgXAorICAgIEJtZSA9IFJPTDY0KEEjI2dhLCAzNik7IFwKKyAgICBYT1JlcTY0KEEjI2tlLCBEZSk7IFwKKyAgICBCbWkgPSBST0w2NChBIyNrZSwgMTApOyBcCisgICAgRSMjbWEgPSBYT1I2NChCbWEsIEFORG51NjQoQm1lLCBCbWkpKTsgXAorICAgIFhPUmVxNjQoQSMjbWksIERpKTsgXAorICAgIEJtbyA9IFJPTDY0KEEjI21pLCAxNSk7IFwKKyAgICBFIyNtZSA9IFhPUjY0KEJtZSwgQU5EbnU2NChCbWksIEJtbykpOyBcCisgICAgWE9SZXE2NChBIyNzbywgRG8pOyBcCisgICAgQm11ID0gUk9MNjQoQSMjc28sIDU2KTsgXAorICAgIEUjI21pID0gWE9SNjQoQm1pLCBBTkRudTY0KEJtbywgQm11KSk7IFwKKyAgICBFIyNtbyA9IFhPUjY0KEJtbywgQU5EbnU2NChCbXUsIEJtYSkpOyBcCisgICAgRSMjbXUgPSBYT1I2NChCbXUsIEFORG51NjQoQm1hLCBCbWUpKTsgXAorXAorICAgIFhPUmVxNjQoQSMjYmksIERpKTsgXAorICAgIEJzYSA9IFJPTDY0KEEjI2JpLCA2Mik7IFwKKyAgICBYT1JlcTY0KEEjI2dvLCBEbyk7IFwKKyAgICBCc2UgPSBST0w2NChBIyNnbywgNTUpOyBcCisgICAgWE9SZXE2NChBIyNrdSwgRHUpOyBcCisgICAgQnNpID0gUk9MNjQoQSMja3UsIDM5KTsgXAorICAgIEUjI3NhID0gWE9SNjQoQnNhLCBBTkRudTY0KEJzZSwgQnNpKSk7IFwKKyAgICBYT1JlcTY0KEEjI21hLCBEYSk7IFwKKyAgICBCc28gPSBST0w2NChBIyNtYSwgNDEpOyBcCisgICAgRSMjc2UgPSBYT1I2NChCc2UsIEFORG51NjQoQnNpLCBCc28pKTsgXAorICAgIFhPUmVxNjQoQSMjc2UsIERlKTsgXAorICAgIEJzdSA9IFJPTDY0KEEjI3NlLCAyKTsgXAorICAgIEUjI3NpID0gWE9SNjQoQnNpLCBBTkRudTY0KEJzbywgQnN1KSk7IFwKKyAgICBFIyNzbyA9IFhPUjY0KEJzbywgQU5EbnU2NChCc3UsIEJzYSkpOyBcCisgICAgRSMjc3UgPSBYT1I2NChCc3UsIEFORG51NjQoQnNhLCBCc2UpKTsgXAorXAorCitzdGF0aWMgY29uc3QgVUlOVDY0IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbMjRdID0geworICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwODJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDhhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwMFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwOGJVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDhhVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4OFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDg5VUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwM1VMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDgwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4MFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDA4VUxMIH07CisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjU3NmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFgjI2thID0gTE9BRDY0KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrZSA9IExPQUQ2NChzdGF0ZVsxMV0pOyBcCisgICAgWCMja2kgPSBMT0FENjQoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tvID0gTE9BRDY0KHN0YXRlWzEzXSk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWCMjbWEgPSBMT0FENjQoc3RhdGVbMTVdKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNtaSA9IExPQUQ2NChzdGF0ZVsxN10pOyBcCisgICAgWCMjbW8gPSBMT0FENjQoc3RhdGVbMThdKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNzYSA9IExPQUQ2NChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3I4MzJiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAwXSksIExPQUQ2NChpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAxXSksIExPQUQ2NChpbnB1dFsgMV0pKTsgXAorICAgIFgjI2JpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAyXSksIExPQUQ2NChpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyAzXSksIExPQUQ2NChpbnB1dFsgM10pKTsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIFgjI2dhID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA1XSksIExPQUQ2NChpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dlID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA2XSksIExPQUQ2NChpbnB1dFsgNl0pKTsgXAorICAgIFgjI2dpID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA3XSksIExPQUQ2NChpbnB1dFsgN10pKTsgXAorICAgIFgjI2dvID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA4XSksIExPQUQ2NChpbnB1dFsgOF0pKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2thID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEwXSksIExPQUQ2NChpbnB1dFsxMF0pKTsgXAorICAgIFgjI2tlID0gWE9SNjQoTE9BRDY0KHN0YXRlWzExXSksIExPQUQ2NChpbnB1dFsxMV0pKTsgXAorICAgIFgjI2tpID0gWE9SNjQoTE9BRDY0KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tvID0gTE9BRDY0KHN0YXRlWzEzXSk7IFwKKyAgICBYIyNrdSA9IExPQUQ2NChzdGF0ZVsxNF0pOyBcCisgICAgWCMjbWEgPSBMT0FENjQoc3RhdGVbMTVdKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNtaSA9IExPQUQ2NChzdGF0ZVsxN10pOyBcCisgICAgWCMjbW8gPSBMT0FENjQoc3RhdGVbMThdKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNzYSA9IExPQUQ2NChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMF0pLCBMT0FENjQoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMV0pLCBMT0FENjQoaW5wdXRbIDFdKSk7IFwKKyAgICBYIyNiaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMl0pLCBMT0FENjQoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNibyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgM10pLCBMT0FENjQoaW5wdXRbIDNdKSk7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBYIyNnYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNV0pLCBMT0FENjQoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNl0pLCBMT0FENjQoaW5wdXRbIDZdKSk7IFwKKyAgICBYIyNnaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgN10pLCBMT0FENjQoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOF0pLCBMT0FENjQoaW5wdXRbIDhdKSk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNrYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMF0pLCBMT0FENjQoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMV0pLCBMT0FENjQoaW5wdXRbMTFdKSk7IFwKKyAgICBYIyNraSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNrbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxM10pLCBMT0FENjQoaW5wdXRbMTNdKSk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYIyNtYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNV0pLCBMT0FENjQoaW5wdXRbMTVdKSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTA4OGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTE1MmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmEgPSBYT1I2NChMT0FENjQoc3RhdGVbIDBdKSwgTE9BRDY0KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDFdKSwgTE9BRDY0KGlucHV0WyAxXSkpOyBcCisgICAgWCMjYmkgPSBYT1I2NChMT0FENjQoc3RhdGVbIDJdKSwgTE9BRDY0KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYm8gPSBYT1I2NChMT0FENjQoc3RhdGVbIDNdKSwgTE9BRDY0KGlucHV0WyAzXSkpOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgWCMjZ2EgPSBYT1I2NChMT0FENjQoc3RhdGVbIDVdKSwgTE9BRDY0KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDZdKSwgTE9BRDY0KGlucHV0WyA2XSkpOyBcCisgICAgWCMjZ2kgPSBYT1I2NChMT0FENjQoc3RhdGVbIDddKSwgTE9BRDY0KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ28gPSBYT1I2NChMT0FENjQoc3RhdGVbIDhdKSwgTE9BRDY0KGlucHV0WyA4XSkpOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMja2EgPSBYT1I2NChMT0FENjQoc3RhdGVbMTBdKSwgTE9BRDY0KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTFdKSwgTE9BRDY0KGlucHV0WzExXSkpOyBcCisgICAgWCMja2kgPSBYT1I2NChMT0FENjQoc3RhdGVbMTJdKSwgTE9BRDY0KGlucHV0WzEyXSkpOyBcCisgICAgWCMja28gPSBYT1I2NChMT0FENjQoc3RhdGVbMTNdKSwgTE9BRDY0KGlucHV0WzEzXSkpOyBcCisgICAgWCMja3UgPSBYT1I2NChMT0FENjQoc3RhdGVbMTRdKSwgTE9BRDY0KGlucHV0WzE0XSkpOyBcCisgICAgWCMjbWEgPSBYT1I2NChMT0FENjQoc3RhdGVbMTVdKSwgTE9BRDY0KGlucHV0WzE1XSkpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMjbWkgPSBYT1I2NChMT0FENjQoc3RhdGVbMTddKSwgTE9BRDY0KGlucHV0WzE3XSkpOyBcCisgICAgWCMjbW8gPSBMT0FENjQoc3RhdGVbMThdKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNzYSA9IExPQUQ2NChzdGF0ZVsyMF0pOyBcCisgICAgWCMjc2UgPSBMT0FENjQoc3RhdGVbMjFdKTsgXAorICAgIFgjI3NpID0gTE9BRDY0KHN0YXRlWzIyXSk7IFwKKyAgICBYIyNzbyA9IExPQUQ2NChzdGF0ZVsyM10pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMzQ0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMF0pLCBMT0FENjQoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMV0pLCBMT0FENjQoaW5wdXRbIDFdKSk7IFwKKyAgICBYIyNiaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgMl0pLCBMT0FENjQoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNibyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgM10pLCBMT0FENjQoaW5wdXRbIDNdKSk7IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBYIyNnYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNV0pLCBMT0FENjQoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNl0pLCBMT0FENjQoaW5wdXRbIDZdKSk7IFwKKyAgICBYIyNnaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgN10pLCBMT0FENjQoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOF0pLCBMT0FENjQoaW5wdXRbIDhdKSk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNrYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMF0pLCBMT0FENjQoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMV0pLCBMT0FENjQoaW5wdXRbMTFdKSk7IFwKKyAgICBYIyNraSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxMl0pLCBMT0FENjQoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNrbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxM10pLCBMT0FENjQoaW5wdXRbMTNdKSk7IFwKKyAgICBYIyNrdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNF0pLCBMT0FENjQoaW5wdXRbMTRdKSk7IFwKKyAgICBYIyNtYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNV0pLCBMT0FENjQoaW5wdXRbMTVdKSk7IFwKKyAgICBYIyNtZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNl0pLCBMT0FENjQoaW5wdXRbMTZdKSk7IFwKKyAgICBYIyNtaSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxN10pLCBMT0FENjQoaW5wdXRbMTddKSk7IFwKKyAgICBYIyNtbyA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxOF0pLCBMT0FENjQoaW5wdXRbMThdKSk7IFwKKyAgICBYIyNtdSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxOV0pLCBMT0FENjQoaW5wdXRbMTldKSk7IFwKKyAgICBYIyNzYSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsyMF0pLCBMT0FENjQoaW5wdXRbMjBdKSk7IFwKKyAgICBYIyNzZSA9IExPQUQ2NChzdGF0ZVsyMV0pOyBcCisgICAgWCMjc2kgPSBMT0FENjQoc3RhdGVbMjJdKTsgXAorICAgIFgjI3NvID0gTE9BRDY0KHN0YXRlWzIzXSk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZShYLCBzdGF0ZSkgXAorICAgIFgjI2JhID0gTE9BRDY0KHN0YXRlWyAwXSk7IFwKKyAgICBYIyNiZSA9IExPQUQ2NChzdGF0ZVsgMV0pOyBcCisgICAgWCMjYmkgPSBMT0FENjQoc3RhdGVbIDJdKTsgXAorICAgIFgjI2JvID0gTE9BRDY0KHN0YXRlWyAzXSk7IFwKKyAgICBYIyNidSA9IExPQUQ2NChzdGF0ZVsgNF0pOyBcCisgICAgWCMjZ2EgPSBMT0FENjQoc3RhdGVbIDVdKTsgXAorICAgIFgjI2dlID0gTE9BRDY0KHN0YXRlWyA2XSk7IFwKKyAgICBYIyNnaSA9IExPQUQ2NChzdGF0ZVsgN10pOyBcCisgICAgWCMjZ28gPSBMT0FENjQoc3RhdGVbIDhdKTsgXAorICAgIFgjI2d1ID0gTE9BRDY0KHN0YXRlWyA5XSk7IFwKKyAgICBYIyNrYSA9IExPQUQ2NChzdGF0ZVsxMF0pOyBcCisgICAgWCMja2UgPSBMT0FENjQoc3RhdGVbMTFdKTsgXAorICAgIFgjI2tpID0gTE9BRDY0KHN0YXRlWzEyXSk7IFwKKyAgICBYIyNrbyA9IExPQUQ2NChzdGF0ZVsxM10pOyBcCisgICAgWCMja3UgPSBMT0FENjQoc3RhdGVbMTRdKTsgXAorICAgIFgjI21hID0gTE9BRDY0KHN0YXRlWzE1XSk7IFwKKyAgICBYIyNtZSA9IExPQUQ2NChzdGF0ZVsxNl0pOyBcCisgICAgWCMjbWkgPSBMT0FENjQoc3RhdGVbMTddKTsgXAorICAgIFgjI21vID0gTE9BRDY0KHN0YXRlWzE4XSk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMjc2EgPSBMT0FENjQoc3RhdGVbMjBdKTsgXAorICAgIFgjI3NlID0gTE9BRDY0KHN0YXRlWzIxXSk7IFwKKyAgICBYIyNzaSA9IExPQUQ2NChzdGF0ZVsyMl0pOyBcCisgICAgWCMjc28gPSBMT0FENjQoc3RhdGVbMjNdKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKworI2RlZmluZSBjb3B5VG9TdGF0ZShzdGF0ZSwgWCkgXAorICAgIFNUT1JFNjQoc3RhdGVbIDBdLCBYIyNiYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyAxXSwgWCMjYmUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMl0sIFgjI2JpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDNdLCBYIyNibyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA0XSwgWCMjYnUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgNV0sIFgjI2dhKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDZdLCBYIyNnZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA3XSwgWCMjZ2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgOF0sIFgjI2dvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDldLCBYIyNndSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEwXSwgWCMja2EpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxMV0sIFgjI2tlKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTJdLCBYIyNraSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEzXSwgWCMja28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNF0sIFgjI2t1KTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTVdLCBYIyNtYSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE2XSwgWCMjbWUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxN10sIFgjI21pKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMThdLCBYIyNtbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE5XSwgWCMjbXUpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyMF0sIFgjI3NhKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjFdLCBYIyNzZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzIyXSwgWCMjc2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyM10sIFgjI3NvKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMjRdLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5U3RhdGVWYXJpYWJsZXMoWCwgWSkgXAorICAgIFgjI2JhID0gWSMjYmE7IFwKKyAgICBYIyNiZSA9IFkjI2JlOyBcCisgICAgWCMjYmkgPSBZIyNiaTsgXAorICAgIFgjI2JvID0gWSMjYm87IFwKKyAgICBYIyNidSA9IFkjI2J1OyBcCisgICAgWCMjZ2EgPSBZIyNnYTsgXAorICAgIFgjI2dlID0gWSMjZ2U7IFwKKyAgICBYIyNnaSA9IFkjI2dpOyBcCisgICAgWCMjZ28gPSBZIyNnbzsgXAorICAgIFgjI2d1ID0gWSMjZ3U7IFwKKyAgICBYIyNrYSA9IFkjI2thOyBcCisgICAgWCMja2UgPSBZIyNrZTsgXAorICAgIFgjI2tpID0gWSMja2k7IFwKKyAgICBYIyNrbyA9IFkjI2tvOyBcCisgICAgWCMja3UgPSBZIyNrdTsgXAorICAgIFgjI21hID0gWSMjbWE7IFwKKyAgICBYIyNtZSA9IFkjI21lOyBcCisgICAgWCMjbWkgPSBZIyNtaTsgXAorICAgIFgjI21vID0gWSMjbW87IFwKKyAgICBYIyNtdSA9IFkjI211OyBcCisgICAgWCMjc2EgPSBZIyNzYTsgXAorICAgIFgjI3NlID0gWSMjc2U7IFwKKyAgICBYIyNzaSA9IFkjI3NpOyBcCisgICAgWCMjc28gPSBZIyNzbzsgXAorICAgIFgjI3N1ID0gWSMjc3U7IFwKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAtdW5yb2xsaW5nLm1hY3JvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M2OTRjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXVucm9sbGluZy5tYWNyb3MKQEAgLTAsMCArMSwxMjQgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaWYgKFVucm9sbGluZyA9PSAyNCkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCAwLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDEsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggMiwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCAzLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDQsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggNSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA2LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoIDcsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSggOCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKCA5LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTAsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxMSwgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDEyLCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTMsIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxNCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE1LCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTYsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgxNywgRSwgQSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDE4LCBBLCBFKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMTksIEUsIEEpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YSgyMCwgQSwgRSkgXAorICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKDIxLCBFLCBBKSBcCisgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoMjIsIEEsIEUpIFwKKyAgICB0aGV0YVJob1BpQ2hpSW90YSgyMywgRSwgQSkgXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2VsaWYgKFVucm9sbGluZyA9PSAxMikKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTEyKSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgICwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyAxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgMywgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA0LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDUsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgNiwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKyA3LCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrIDgsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsgOSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzEwLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMTEsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gOCkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTgpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMiwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzMsIEUsIEEpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs0LCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzYsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSs3LCBFLCBBKSBcCisgICAgfSBcCisgICAgY29weVRvU3RhdGUoc3RhdGUsIEEpCisjZWxpZiAoVW5yb2xsaW5nID09IDYpCisjZGVmaW5lIHJvdW5kcyBcCisgICAgcHJlcGFyZVRoZXRhIFwKKyAgICBmb3IoaT0wOyBpPDI0OyBpKz02KSB7IFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSAgLCBBLCBFKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMSwgRSwgQSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzIsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSszLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrNCwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzUsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gNCkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTQpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMiwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzMsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMykKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrPTMpIHsgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpICAsIEEsIEUpIFwKKyAgICAgICAgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSsxLCBFLCBBKSBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkrMiwgQSwgRSkgXAorICAgICAgICBjb3B5U3RhdGVWYXJpYWJsZXMoQSwgRSkgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2VsaWYgKFVucm9sbGluZyA9PSAyKQorI2RlZmluZSByb3VuZHMgXAorICAgIHByZXBhcmVUaGV0YSBcCisgICAgZm9yKGk9MDsgaTwyNDsgaSs9MikgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICwgQSwgRSkgXAorICAgICAgICB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpKzEsIEUsIEEpIFwKKyAgICB9IFwKKyAgICBjb3B5VG9TdGF0ZShzdGF0ZSwgQSkKKyNlbGlmIChVbnJvbGxpbmcgPT0gMSkKKyNkZWZpbmUgcm91bmRzIFwKKyAgICBwcmVwYXJlVGhldGEgXAorICAgIGZvcihpPTA7IGk8MjQ7IGkrKykgeyBcCisgICAgICAgIHRoZXRhUmhvUGlDaGlJb3RhUHJlcGFyZVRoZXRhKGkgICwgQSwgRSkgXAorICAgICAgICBjb3B5U3RhdGVWYXJpYWJsZXMoQSwgRSkgXAorICAgIH0gXAorICAgIGNvcHlUb1N0YXRlKHN0YXRlLCBBKQorI2Vsc2UKKyNlcnJvciAiVW5yb2xsaW5nIGlzIG5vdCBjb3JyZWN0bHkgc3BlY2lmaWVkISIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtGLTE2MDAteG9wLm1hY3JvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjNjOTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrRi0xNjAwLXhvcC5tYWNyb3MKQEAgLTAsMCArMSw1NzMgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjZGVmaW5lIGRlY2xhcmVBQkNERSBcCisgICAgVjEyOCBBYmFnZSwgQWJlZ2ksIEFiaWdvLCBBYm9ndSwgQWJ1Z2E7IFwKKyAgICBWMTI4IEFrYW1lLCBBa2VtaSwgQWtpbW8sIEFrb211LCBBa3VtYTsgXAorICAgIFYxMjggQWJhZSwgQWJpbywgQWdhZSwgQWdpbywgQWthZSwgQWtpbywgQW1hZSwgQW1pbzsgXAorICAgIFY2NCBBYmEsIEFiZSwgQWJpLCBBYm8sIEFidTsgXAorICAgIFY2NCBBZ2EsIEFnZSwgQWdpLCBBZ28sIEFndTsgXAorICAgIFY2NCBBa2EsIEFrZSwgQWtpLCBBa28sIEFrdTsgXAorICAgIFY2NCBBbWEsIEFtZSwgQW1pLCBBbW8sIEFtdTsgXAorICAgIFYxMjggQXNhc2UsIEFzaXNvOyBcCisgICAgVjY0IEFzdTsgXAorICAgIFYxMjggQmJhZ2UsIEJiZWdpLCBCYmlnbywgQmJvZ3UsIEJidWdhOyBcCisgICAgVjEyOCBCa2FtZSwgQmtlbWksIEJraW1vLCBCa29tdSwgQmt1bWE7IFwKKyAgICBWMTI4IEJzYXNlLCBCc2VzaSwgQnNpc28sIEJzb3N1LCBCc3VzYTsgXAorICAgIFYxMjggQ2FlLCBDZWksIENpbywgQ291LCBDdWE7IFwKKyAgICBWMTI4IERhdSwgRGVhLCBEaWUsIERvaSwgRHVvOyBcCisgICAgVjEyOCBEdWEsIERhZSwgRGVpLCBEaW8sIERvdTsgXAorICAgIFYxMjggRWJhZ2UsIEViZWdpLCBFYmlnbywgRWJvZ3UsIEVidWdhOyBcCisgICAgVjEyOCBFa2FtZSwgRWtlbWksIEVraW1vLCBFa29tdSwgRWt1bWE7IFwKKyAgICBWMTI4IEVzYXNlLCBFc2lzbzsgXAorICAgIFY2NCBFc3U7IFwKKyAgICBWMTI4IFplcm87CisKKyNkZWZpbmUgcHJlcGFyZVRoZXRhCisKKyNkZWZpbmUgY29tcHV0ZUQgXAorICAgIEN1YSA9IEdFVDY0TE9MTyhDdWEsIENhZSk7IFwKKyAgICBEZWkgPSBYT1IxMjgoQ2FlLCBST0w2NDY0c2FtZShDaW8sIDEpKTsgXAorICAgIERvdSA9IFhPUjEyOChDaW8sIFJPTDY0NjRzYW1lKEN1YSwgMSkpOyBcCisgICAgQ2VpID0gR0VUNjRISUxPKENhZSwgQ2lvKTsgXAorICAgIERhZSA9IFhPUjEyOChDdWEsIFJPTDY0NjRzYW1lKENlaSwgMSkpOyBcCisgICAgRGF1ID0gR0VUNjRMT0hJKERhZSwgRG91KTsgXAorICAgIERlYSA9IFNXQVA2NChEYWUpOyBcCisgICAgRGllID0gU1dBUDY0KERlaSk7IFwKKyAgICBEb2kgPSBHRVQ2NExPTE8oRG91LCBEaWUpOyBcCisgICAgRHVvID0gU1dBUDY0KERvdSk7CisKKy8qICAtLS0gVGhldGEgUmhvIFBpIENoaSBJb3RhIFByZXBhcmUtdGhldGEgKi8KKy8qICAtLS0gNjQtYml0IGxhbmVzIG1hcHBlZCB0byA2NC1iaXQgYW5kIDEyOC1iaXQgd29yZHMgKi8KKyNkZWZpbmUgdGhldGFSaG9QaUNoaUlvdGFQcmVwYXJlVGhldGEoaSwgQSwgRSkgXAorICAgIGNvbXB1dGVEIFwKKyAgICBcCisgICAgQmJhZ2UgPSBYT1IxMjgoR0VUNjRMT0hJKEEjI2JhZ2UsIEEjI2JvZ3UpLCBEYXUpOyBcCisgICAgQmJhZ2UgPSBST0w2NDY0KEJiYWdlLCAwLCAyMCk7IFwKKyAgICBCYmVnaSA9IFhPUjEyOChHRVQ2NEhJTE8oQSMjYmFnZSwgQSMja2FtZSksIERlYSk7IFwKKyAgICBCYmVnaSA9IFJPTDY0NjQoQmJlZ2ksIDQ0LCAzKTsgXAorICAgIEJiaWdvID0gWE9SMTI4KEdFVDY0TE9ISShBIyNraW1vLCBBIyNrYW1lKSwgRGllKTsgXAorICAgIEJiaWdvID0gUk9MNjQ2NChCYmlnbywgNDMsIDQ1KTsgXAorICAgIEUjI2JhZ2UgPSBYT1IxMjgoQmJhZ2UsIEFORG51MTI4KEJiZWdpLCBCYmlnbykpOyBcCisgICAgWE9SZXExMjgoRSMjYmFnZSwgQ09OU1Q2NChLZWNjYWtGMTYwMFJvdW5kQ29uc3RhbnRzW2ldKSk7IFwKKyAgICBDYWUgPSBFIyNiYWdlOyBcCisgICAgQmJvZ3UgPSBYT1IxMjgoR0VUNjRISUxPKEEjI2tpbW8sIEEjI3Npc28pLCBEb2kpOyBcCisgICAgQmJvZ3UgPSBST0w2NDY0KEJib2d1LCAyMSwgNjEpOyBcCisgICAgRSMjYmVnaSA9IFhPUjEyOChCYmVnaSwgQU5EbnUxMjgoQmJpZ28sIEJib2d1KSk7IFwKKyAgICBDZWkgPSBFIyNiZWdpOyBcCisgICAgQmJ1Z2EgPSBYT1IxMjgoR0VUNjRMT0xPKEEjI3N1LCBBIyNib2d1KSwgRHVvKTsgXAorICAgIEJidWdhID0gUk9MNjQ2NChCYnVnYSwgMTQsIDI4KTsgXAorICAgIEUjI2JpZ28gPSBYT1IxMjgoQmJpZ28sIEFORG51MTI4KEJib2d1LCBCYnVnYSkpOyBcCisgICAgQ2lvID0gRSMjYmlnbzsgXAorICAgIEUjI2JvZ3UgPSBYT1IxMjgoQmJvZ3UsIEFORG51MTI4KEJidWdhLCBCYmFnZSkpOyBcCisgICAgQ291ID0gRSMjYm9ndTsgXAorICAgIEUjI2J1Z2EgPSBYT1IxMjgoQmJ1Z2EsIEFORG51MTI4KEJiYWdlLCBCYmVnaSkpOyBcCisgICAgQ3VhID0gRSMjYnVnYTsgXAorXAorICAgIEJrYW1lID0gWE9SMTI4KEdFVDY0TE9ISShBIyNiZWdpLCBBIyNidWdhKSwgRGVhKTsgXAorICAgIEJrYW1lID0gUk9MNjQ2NChCa2FtZSwgMSwgMzYpOyBcCisgICAgQmtlbWkgPSBYT1IxMjgoR0VUNjRISUxPKEEjI2JlZ2ksIEEjI2tlbWkpLCBEaWUpOyBcCisgICAgQmtlbWkgPSBST0w2NDY0KEJrZW1pLCA2LCAxMCk7IFwKKyAgICBCa2ltbyA9IFhPUjEyOChHRVQ2NExPSEkoQSMja29tdSwgQSMja2VtaSksIERvaSk7IFwKKyAgICBCa2ltbyA9IFJPTDY0NjQoQmtpbW8sIDI1LCAxNSk7IFwKKyAgICBFIyNrYW1lID0gWE9SMTI4KEJrYW1lLCBBTkRudTEyOChCa2VtaSwgQmtpbW8pKTsgXAorICAgIFhPUmVxMTI4KENhZSwgRSMja2FtZSk7IFwKKyAgICBCa29tdSA9IFhPUjEyOChHRVQ2NEhJSEkoQSMja29tdSwgQSMjc2lzbyksIER1byk7IFwKKyAgICBCa29tdSA9IFJPTDY0NjQoQmtvbXUsIDgsIDU2KTsgXAorICAgIEUjI2tlbWkgPSBYT1IxMjgoQmtlbWksIEFORG51MTI4KEJraW1vLCBCa29tdSkpOyBcCisgICAgWE9SZXExMjgoQ2VpLCBFIyNrZW1pKTsgXAorICAgIEJrdW1hID0gWE9SMTI4KEdFVDY0TE9MTyhBIyNzYXNlLCBBIyNidWdhKSwgRGF1KTsgXAorICAgIEJrdW1hID0gUk9MNjQ2NChCa3VtYSwgMTgsIDI3KTsgXAorICAgIEUjI2tpbW8gPSBYT1IxMjgoQmtpbW8sIEFORG51MTI4KEJrb211LCBCa3VtYSkpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBFIyNraW1vKTsgXAorICAgIEUjI2tvbXUgPSBYT1IxMjgoQmtvbXUsIEFORG51MTI4KEJrdW1hLCBCa2FtZSkpOyBcCisgICAgWE9SZXExMjgoQ291LCBFIyNrb211KTsgXAorICAgIEUjI2t1bWEgPSBYT1IxMjgoQmt1bWEsIEFORG51MTI4KEJrYW1lLCBCa2VtaSkpOyBcCisgICAgWE9SZXExMjgoQ3VhLCBFIyNrdW1hKTsgXAorXAorICAgIEJzYXNlID0gWE9SMTI4KEEjI2JpZ28sIFNXQVA2NChEb2kpKTsgXAorICAgIEJzYXNlID0gUk9MNjQ2NChCc2FzZSwgNjIsIDU1KTsgXAorICAgIEJzaXNvID0gWE9SMTI4KEEjI2t1bWEsIFNXQVA2NChEYXUpKTsgXAorICAgIEJzaXNvID0gUk9MNjQ2NChCc2lzbywgMzksIDQxKTsgXAorICAgIEJzdXNhID0gWE9SNjQoQ09QWTY0SEkyTE8oQSMjc2FzZSksIERlaSk7IFwKKyAgICBCc3VzYSA9IFJPTDY0NjRzYW1lKEJzdXNhLCAyKTsgXAorICAgIEJzdXNhID0gR0VUNjRMT0xPKEJzdXNhLCBCc2FzZSk7IFwKKyAgICBCc2VzaSA9IEdFVDY0SElMTyhCc2FzZSwgQnNpc28pOyBcCisgICAgQnNvc3UgPSBHRVQ2NEhJTE8oQnNpc28sIEJzdXNhKTsgXAorICAgIEUjI3Nhc2UgPSBYT1IxMjgoQnNhc2UsIEFORG51MTI4KEJzZXNpLCBCc2lzbykpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBFIyNzYXNlKTsgXAorICAgIEUjI3Npc28gPSBYT1IxMjgoQnNpc28sIEFORG51MTI4KEJzb3N1LCBCc3VzYSkpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBFIyNzaXNvKTsgXAorICAgIEUjI3N1ID0gR0VUNjRMT0xPKFhPUjEyOChCc3VzYSwgQU5EbnUxMjgoQnNhc2UsIEJzZXNpKSksIFplcm8pOyBcCisgICAgWE9SZXExMjgoQ3VhLCBFIyNzdSk7IFwKK1wKKyAgICBaZXJvID0gWkVSTzEyOCgpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoQ3VhLCBaZXJvKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0TE9MTyhaZXJvLCBDZWkpKTsgXAorICAgIFhPUmVxMTI4KENpbywgR0VUNjRISUhJKENlaSwgWmVybykpOyBcCisgICAgWE9SZXExMjgoQ2lvLCBHRVQ2NExPTE8oWmVybywgQ291KSk7IFwKKyAgICBYT1JlcTEyOChDdWEsIEdFVDY0SElISShDb3UsIFplcm8pKTsgXAorCisvKiAgLS0tIFRoZXRhIFJobyBQaSBDaGkgSW90YSAqLworLyogIC0tLSA2NC1iaXQgbGFuZXMgbWFwcGVkIHRvIDY0LWJpdCBhbmQgMTI4LWJpdCB3b3JkcyAqLworI2RlZmluZSB0aGV0YVJob1BpQ2hpSW90YShpLCBBLCBFKSB0aGV0YVJob1BpQ2hpSW90YVByZXBhcmVUaGV0YShpLCBBLCBFKQorCitzdGF0aWMgY29uc3QgVUlOVDY0IEtlY2Nha0YxNjAwUm91bmRDb25zdGFudHNbMjRdID0geworICAgIDB4MDAwMDAwMDAwMDAwMDAwMVVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwODJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDhhVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODAwMFVMTCwKKyAgICAweDAwMDAwMDAwMDAwMDgwOGJVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDAxVUxMLAorICAgIDB4ODAwMDAwMDA4MDAwODA4MVVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDAwMDAwMDhhVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwMDA4OFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDgwMDlVTEwsCisgICAgMHgwMDAwMDAwMDgwMDAwMDBhVUxMLAorICAgIDB4MDAwMDAwMDA4MDAwODA4YlVMTCwKKyAgICAweDgwMDAwMDAwMDAwMDAwOGJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDA4MDg5VUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODAwM1VMTCwKKyAgICAweDgwMDAwMDAwMDAwMDgwMDJVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDgwVUxMLAorICAgIDB4MDAwMDAwMDAwMDAwODAwYVVMTCwKKyAgICAweDgwMDAwMDAwODAwMDAwMGFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDgxVUxMLAorICAgIDB4ODAwMDAwMDAwMDAwODA4MFVMTCwKKyAgICAweDAwMDAwMDAwODAwMDAwMDFVTEwsCisgICAgMHg4MDAwMDAwMDgwMDA4MDA4VUxMIH07CisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjU3NmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IExPQUQ2NChzdGF0ZVsgOV0pOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IExPQUQxMjgoc3RhdGVbMTBdKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gTE9BRDEyOChzdGF0ZVsxMl0pOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gTE9BRDEyOChzdGF0ZVsxNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNrb211ID0gR0VUNjRMT0xPKFgjI2tvLCBYIyNtdSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjbXUpOyBcCisgICAgWCMjc2FzZSA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FzZSk7IFwKKyAgICBYIyNzaXNvID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaXNvKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjgzMmJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQ2NChpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IExPQUQxMjgoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMDI0Yml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlOyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLCBYIyNiYWUpOyBcCisgICAgQ2FlID0gWCMjYmFlOyBcCisgICAgWCMjYmlvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWU7IFwKKyAgICBYIyNidWdhID0gR0VUNjRMT0xPKFgjI2J1LCBYIyNnYSk7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNiYWdlID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNnaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxNF0pLCBMT0FEMTI4KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBMT0FENjQoc3RhdGVbMTZdKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IExPQUQxMjh1KHN0YXRlWzE3XSk7IFwKKyAgICBYIyNtaSA9IFgjI21pbzsgXAorICAgIFgjI2tlbWkgPSBHRVQ2NExPTE8oWCMja2UsIFgjI21pKTsgXAorICAgIFgjI21vID0gR0VUNjRISUhJKFgjI21pbywgWCMjbWlvKTsgXAorICAgIFgjI2tpbW8gPSBHRVQ2NExPTE8oWCMja2ksIFgjI21vKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjbWlvKTsgXAorICAgIFgjI211ID0gTE9BRDY0KHN0YXRlWzE5XSk7IFwKKyAgICBYIyNrb211ID0gR0VUNjRMT0xPKFgjI2tvLCBYIyNtdSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjbXUpOyBcCisgICAgWCMjc2FzZSA9IExPQUQxMjgoc3RhdGVbMjBdKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjc2FzZSk7IFwKKyAgICBYIyNzaXNvID0gTE9BRDEyOChzdGF0ZVsyMl0pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNzaXNvKTsgXAorICAgIFgjI3N1ID0gTE9BRDY0KHN0YXRlWzI0XSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjc3UpOyBcCisKKyNkZWZpbmUgY29weUZyb21TdGF0ZUFuZFhvcjEwODhiaXRzKFgsIHN0YXRlLCBpbnB1dCkgXAorICAgIFgjI2JhZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAwXSksIExPQUQxMjh1KGlucHV0WyAwXSkpOyBcCisgICAgWCMjYmEgPSBYIyNiYWU7IFwKKyAgICBYIyNiZSA9IEdFVDY0SElISShYIyNiYWUsIFgjI2JhZSk7IFwKKyAgICBDYWUgPSBYIyNiYWU7IFwKKyAgICBYIyNiaW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMl0pLCBMT0FEMTI4dShpbnB1dFsgMl0pKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBYT1I2NChMT0FENjQoc3RhdGVbIDRdKSwgTE9BRDY0KGlucHV0WyA0XSkpOyBcCisgICAgQ3VhID0gWCMjYnU7IFwKKyAgICBYIyNnYWUgPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDVdKSwgTE9BRDEyOHUoaW5wdXRbIDVdKSk7IFwKKyAgICBYIyNnYSA9IFgjI2dhZTsgXAorICAgIFgjI2J1Z2EgPSBHRVQ2NExPTE8oWCMjYnUsIFgjI2dhKTsgXAorICAgIFgjI2dlID0gR0VUNjRISUhJKFgjI2dhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2JhZ2UgPSBHRVQ2NExPTE8oWCMjYmEsIFgjI2dlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMjZ2FlKTsgXAorICAgIFgjI2dpbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgN10pLCBMT0FEMTI4dShpbnB1dFsgN10pKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBYT1I2NChMT0FENjQoc3RhdGVbIDldKSwgTE9BRDY0KGlucHV0WyA5XSkpOyBcCisgICAgWCMjYm9ndSA9IEdFVDY0TE9MTyhYIyNibywgWCMjZ3UpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2d1KTsgXAorICAgIFgjI2thZSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEwXSksIExPQUQxMjh1KGlucHV0WzEwXSkpOyBcCisgICAgWCMja2EgPSBYIyNrYWU7IFwKKyAgICBYIyNrZSA9IEdFVDY0SElISShYIyNrYWUsIFgjI2thZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2thZSk7IFwKKyAgICBYIyNraW8gPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMl0pLCBMT0FEMTI4dShpbnB1dFsxMl0pKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzE0XSksIExPQUQxMjgoaW5wdXRbMTRdKSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMja3VtYSk7IFwKKyAgICBYIyNtZSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsxNl0pLCBMT0FENjQoaW5wdXRbMTZdKSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGVBbmRYb3IxMTUyYml0cyhYLCBzdGF0ZSwgaW5wdXQpIFwKKyAgICBYIyNiYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsgMF0pLCBMT0FEMTI4dShpbnB1dFsgMF0pKTsgXAorICAgIFgjI2JhID0gWCMjYmFlOyBcCisgICAgWCMjYmUgPSBHRVQ2NEhJSEkoWCMjYmFlLCBYIyNiYWUpOyBcCisgICAgQ2FlID0gWCMjYmFlOyBcCisgICAgWCMjYmlvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDJdKSwgTE9BRDEyOHUoaW5wdXRbIDJdKSk7IFwKKyAgICBYIyNiaSA9IFgjI2JpbzsgXAorICAgIFgjI2JvID0gR0VUNjRISUhJKFgjI2JpbywgWCMjYmlvKTsgXAorICAgIENpbyA9IFgjI2JpbzsgXAorICAgIFgjI2J1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA0XSksIExPQUQ2NChpbnB1dFsgNF0pKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA1XSksIExPQUQxMjh1KGlucHV0WyA1XSkpOyBcCisgICAgWCMjZ2EgPSBYIyNnYWU7IFwKKyAgICBYIyNidWdhID0gR0VUNjRMT0xPKFgjI2J1LCBYIyNnYSk7IFwKKyAgICBYIyNnZSA9IEdFVDY0SElISShYIyNnYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNiYWdlID0gR0VUNjRMT0xPKFgjI2JhLCBYIyNnZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI2dhZSk7IFwKKyAgICBYIyNnaW8gPSBYT1IxMjgoTE9BRDEyOHUoc3RhdGVbIDddKSwgTE9BRDEyOHUoaW5wdXRbIDddKSk7IFwKKyAgICBYIyNnaSA9IFgjI2dpbzsgXAorICAgIFgjI2JlZ2kgPSBHRVQ2NExPTE8oWCMjYmUsIFgjI2dpKTsgXAorICAgIFgjI2dvID0gR0VUNjRISUhJKFgjI2dpbywgWCMjZ2lvKTsgXAorICAgIFgjI2JpZ28gPSBHRVQ2NExPTE8oWCMjYmksIFgjI2dvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjZ2lvKTsgXAorICAgIFgjI2d1ID0gWE9SNjQoTE9BRDY0KHN0YXRlWyA5XSksIExPQUQ2NChpbnB1dFsgOV0pKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxMF0pLCBMT0FEMTI4dShpbnB1dFsxMF0pKTsgXAorICAgIFgjI2thID0gWCMja2FlOyBcCisgICAgWCMja2UgPSBHRVQ2NEhJSEkoWCMja2FlLCBYIyNrYWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNrYWUpOyBcCisgICAgWCMja2lvID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTJdKSwgTE9BRDEyOHUoaW5wdXRbMTJdKSk7IFwKKyAgICBYIyNraSA9IFgjI2tpbzsgXAorICAgIFgjI2tvID0gR0VUNjRISUhJKFgjI2tpbywgWCMja2lvKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMja2lvKTsgXAorICAgIFgjI2t1bWEgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsxNF0pLCBMT0FEMTI4KGlucHV0WzE0XSkpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI2t1bWEpOyBcCisgICAgWCMjbWUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTZdKSwgTE9BRDY0KGlucHV0WzE2XSkpOyBcCisgICAgWCMja2FtZSA9IEdFVDY0TE9MTyhYIyNrYSwgWCMjbWUpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBHRVQ2NEhJSEkoWCMja3VtYSwgWCMja2FtZSkpOyBcCisgICAgWCMjbWlvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWzE3XSksIExPQUQ2NChpbnB1dFsxN10pKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBMT0FENjQoc3RhdGVbMTldKTsgXAorICAgIFgjI2tvbXUgPSBHRVQ2NExPTE8oWCMja28sIFgjI211KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNtdSk7IFwKKyAgICBYIyNzYXNlID0gTE9BRDEyOChzdGF0ZVsyMF0pOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNzYXNlKTsgXAorICAgIFgjI3Npc28gPSBMT0FEMTI4KHN0YXRlWzIyXSk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI3Npc28pOyBcCisgICAgWCMjc3UgPSBMT0FENjQoc3RhdGVbMjRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNzdSk7IFwKKworI2RlZmluZSBjb3B5RnJvbVN0YXRlQW5kWG9yMTM0NGJpdHMoWCwgc3RhdGUsIGlucHV0KSBcCisgICAgWCMjYmFlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbIDBdKSwgTE9BRDEyOHUoaW5wdXRbIDBdKSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWyAyXSksIExPQUQxMjh1KGlucHV0WyAyXSkpOyBcCisgICAgWCMjYmkgPSBYIyNiaW87IFwKKyAgICBYIyNibyA9IEdFVDY0SElISShYIyNiaW8sIFgjI2Jpbyk7IFwKKyAgICBDaW8gPSBYIyNiaW87IFwKKyAgICBYIyNidSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgNF0pLCBMT0FENjQoaW5wdXRbIDRdKSk7IFwKKyAgICBDdWEgPSBYIyNidTsgXAorICAgIFgjI2dhZSA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsgNV0pLCBMT0FEMTI4dShpbnB1dFsgNV0pKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gWE9SMTI4KExPQUQxMjh1KHN0YXRlWyA3XSksIExPQUQxMjh1KGlucHV0WyA3XSkpOyBcCisgICAgWCMjZ2kgPSBYIyNnaW87IFwKKyAgICBYIyNiZWdpID0gR0VUNjRMT0xPKFgjI2JlLCBYIyNnaSk7IFwKKyAgICBYIyNnbyA9IEdFVDY0SElISShYIyNnaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNiaWdvID0gR0VUNjRMT0xPKFgjI2JpLCBYIyNnbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2dpbyk7IFwKKyAgICBYIyNndSA9IFhPUjY0KExPQUQ2NChzdGF0ZVsgOV0pLCBMT0FENjQoaW5wdXRbIDldKSk7IFwKKyAgICBYIyNib2d1ID0gR0VUNjRMT0xPKFgjI2JvLCBYIyNndSk7IFwKKyAgICBYT1JlcTY0KEN1YSwgWCMjZ3UpOyBcCisgICAgWCMja2FlID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTBdKSwgTE9BRDEyOHUoaW5wdXRbMTBdKSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IFhPUjEyOChMT0FEMTI4KHN0YXRlWzEyXSksIExPQUQxMjh1KGlucHV0WzEyXSkpOyBcCisgICAgWCMja2kgPSBYIyNraW87IFwKKyAgICBYIyNrbyA9IEdFVDY0SElISShYIyNraW8sIFgjI2tpbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI2tpbyk7IFwKKyAgICBYIyNrdW1hID0gWE9SMTI4KExPQUQxMjgoc3RhdGVbMTRdKSwgTE9BRDEyOChpbnB1dFsxNF0pKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gWE9SNjQoTE9BRDY0KHN0YXRlWzE2XSksIExPQUQ2NChpbnB1dFsxNl0pKTsgXAorICAgIFgjI2thbWUgPSBHRVQ2NExPTE8oWCMja2EsIFgjI21lKTsgXAorICAgIFhPUmVxMTI4KENhZSwgR0VUNjRISUhJKFgjI2t1bWEsIFgjI2thbWUpKTsgXAorICAgIFgjI21pbyA9IFhPUjEyOChMT0FEMTI4dShzdGF0ZVsxN10pLCBMT0FEMTI4dShpbnB1dFsxN10pKTsgXAorICAgIFgjI21pID0gWCMjbWlvOyBcCisgICAgWCMja2VtaSA9IEdFVDY0TE9MTyhYIyNrZSwgWCMjbWkpOyBcCisgICAgWCMjbW8gPSBHRVQ2NEhJSEkoWCMjbWlvLCBYIyNtaW8pOyBcCisgICAgWCMja2ltbyA9IEdFVDY0TE9MTyhYIyNraSwgWCMjbW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNtaW8pOyBcCisgICAgWCMjbXUgPSBYT1I2NChMT0FENjQoc3RhdGVbMTldKSwgTE9BRDY0KGlucHV0WzE5XSkpOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBYT1IxMjgoTE9BRDEyOChzdGF0ZVsyMF0pLCBMT0FENjQoaW5wdXRbMjBdKSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlGcm9tU3RhdGUoWCwgc3RhdGUpIFwKKyAgICBYIyNiYWUgPSBMT0FEMTI4KHN0YXRlWyAwXSk7IFwKKyAgICBYIyNiYSA9IFgjI2JhZTsgXAorICAgIFgjI2JlID0gR0VUNjRISUhJKFgjI2JhZSwgWCMjYmFlKTsgXAorICAgIENhZSA9IFgjI2JhZTsgXAorICAgIFgjI2JpbyA9IExPQUQxMjgoc3RhdGVbIDJdKTsgXAorICAgIFgjI2JpID0gWCMjYmlvOyBcCisgICAgWCMjYm8gPSBHRVQ2NEhJSEkoWCMjYmlvLCBYIyNiaW8pOyBcCisgICAgQ2lvID0gWCMjYmlvOyBcCisgICAgWCMjYnUgPSBMT0FENjQoc3RhdGVbIDRdKTsgXAorICAgIEN1YSA9IFgjI2J1OyBcCisgICAgWCMjZ2FlID0gTE9BRDEyOHUoc3RhdGVbIDVdKTsgXAorICAgIFgjI2dhID0gWCMjZ2FlOyBcCisgICAgWCMjYnVnYSA9IEdFVDY0TE9MTyhYIyNidSwgWCMjZ2EpOyBcCisgICAgWCMjZ2UgPSBHRVQ2NEhJSEkoWCMjZ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjYmFnZSA9IEdFVDY0TE9MTyhYIyNiYSwgWCMjZ2UpOyBcCisgICAgWE9SZXExMjgoQ2FlLCBYIyNnYWUpOyBcCisgICAgWCMjZ2lvID0gTE9BRDEyOHUoc3RhdGVbIDddKTsgXAorICAgIFgjI2dpID0gWCMjZ2lvOyBcCisgICAgWCMjYmVnaSA9IEdFVDY0TE9MTyhYIyNiZSwgWCMjZ2kpOyBcCisgICAgWCMjZ28gPSBHRVQ2NEhJSEkoWCMjZ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjYmlnbyA9IEdFVDY0TE9MTyhYIyNiaSwgWCMjZ28pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNnaW8pOyBcCisgICAgWCMjZ3UgPSBMT0FENjQoc3RhdGVbIDldKTsgXAorICAgIFgjI2JvZ3UgPSBHRVQ2NExPTE8oWCMjYm8sIFgjI2d1KTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNndSk7IFwKKyAgICBYIyNrYWUgPSBMT0FEMTI4KHN0YXRlWzEwXSk7IFwKKyAgICBYIyNrYSA9IFgjI2thZTsgXAorICAgIFgjI2tlID0gR0VUNjRISUhJKFgjI2thZSwgWCMja2FlKTsgXAorICAgIFhPUmVxMTI4KENhZSwgWCMja2FlKTsgXAorICAgIFgjI2tpbyA9IExPQUQxMjgoc3RhdGVbMTJdKTsgXAorICAgIFgjI2tpID0gWCMja2lvOyBcCisgICAgWCMja28gPSBHRVQ2NEhJSEkoWCMja2lvLCBYIyNraW8pOyBcCisgICAgWE9SZXExMjgoQ2lvLCBYIyNraW8pOyBcCisgICAgWCMja3VtYSA9IExPQUQxMjgoc3RhdGVbMTRdKTsgXAorICAgIFhPUmVxNjQoQ3VhLCBYIyNrdW1hKTsgXAorICAgIFgjI21lID0gTE9BRDY0KHN0YXRlWzE2XSk7IFwKKyAgICBYIyNrYW1lID0gR0VUNjRMT0xPKFgjI2thLCBYIyNtZSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIEdFVDY0SElISShYIyNrdW1hLCBYIyNrYW1lKSk7IFwKKyAgICBYIyNtaW8gPSBMT0FEMTI4dShzdGF0ZVsxN10pOyBcCisgICAgWCMjbWkgPSBYIyNtaW87IFwKKyAgICBYIyNrZW1pID0gR0VUNjRMT0xPKFgjI2tlLCBYIyNtaSk7IFwKKyAgICBYIyNtbyA9IEdFVDY0SElISShYIyNtaW8sIFgjI21pbyk7IFwKKyAgICBYIyNraW1vID0gR0VUNjRMT0xPKFgjI2tpLCBYIyNtbyk7IFwKKyAgICBYT1JlcTEyOChDaW8sIFgjI21pbyk7IFwKKyAgICBYIyNtdSA9IExPQUQ2NChzdGF0ZVsxOV0pOyBcCisgICAgWCMja29tdSA9IEdFVDY0TE9MTyhYIyNrbywgWCMjbXUpOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI211KTsgXAorICAgIFgjI3Nhc2UgPSBMT0FEMTI4KHN0YXRlWzIwXSk7IFwKKyAgICBYT1JlcTEyOChDYWUsIFgjI3Nhc2UpOyBcCisgICAgWCMjc2lzbyA9IExPQUQxMjgoc3RhdGVbMjJdKTsgXAorICAgIFhPUmVxMTI4KENpbywgWCMjc2lzbyk7IFwKKyAgICBYIyNzdSA9IExPQUQ2NChzdGF0ZVsyNF0pOyBcCisgICAgWE9SZXE2NChDdWEsIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlUb1N0YXRlKHN0YXRlLCBYKSBcCisgICAgU1RPUkU2NChzdGF0ZVsgMF0sIFgjI2JhZ2UpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMV0sIFgjI2JlZ2kpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgMl0sIFgjI2JpZ28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgM10sIFgjI2JvZ3UpOyBcCisgICAgU1RPUkUxMjgoc3RhdGVbIDRdLCBYIyNidWdhKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDZdLCBDT1BZNjRISTJMTyhYIyNiYWdlKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWyA3XSwgQ09QWTY0SEkyTE8oWCMjYmVnaSkpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsgOF0sIENPUFk2NEhJMkxPKFgjI2JpZ28pKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbIDldLCBDT1BZNjRISTJMTyhYIyNib2d1KSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEwXSwgWCMja2FtZSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzExXSwgWCMja2VtaSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEyXSwgWCMja2ltbyk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzEzXSwgWCMja29tdSk7IFwKKyAgICBTVE9SRTEyOChzdGF0ZVsxNF0sIFgjI2t1bWEpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxNl0sIENPUFk2NEhJMkxPKFgjI2thbWUpKTsgXAorICAgIFNUT1JFNjQoc3RhdGVbMTddLCBDT1BZNjRISTJMTyhYIyNrZW1pKSk7IFwKKyAgICBTVE9SRTY0KHN0YXRlWzE4XSwgQ09QWTY0SEkyTE8oWCMja2ltbykpOyBcCisgICAgU1RPUkU2NChzdGF0ZVsxOV0sIENPUFk2NEhJMkxPKFgjI2tvbXUpKTsgXAorICAgIFNUT1JFMTI4KHN0YXRlWzIwXSwgWCMjc2FzZSk7IFwKKyAgICBTVE9SRTEyOChzdGF0ZVsyMl0sIFgjI3Npc28pOyBcCisgICAgU1RPUkU2NChzdGF0ZVsyNF0sIFgjI3N1KTsgXAorCisjZGVmaW5lIGNvcHlTdGF0ZVZhcmlhYmxlcyhYLCBZKSBcCisgICAgWCMjYmFnZSA9IFkjI2JhZ2U7IFwKKyAgICBYIyNiZWdpID0gWSMjYmVnaTsgXAorICAgIFgjI2JpZ28gPSBZIyNiaWdvOyBcCisgICAgWCMjYm9ndSA9IFkjI2JvZ3U7IFwKKyAgICBYIyNidWdhID0gWSMjYnVnYTsgXAorICAgIFgjI2thbWUgPSBZIyNrYW1lOyBcCisgICAgWCMja2VtaSA9IFkjI2tlbWk7IFwKKyAgICBYIyNraW1vID0gWSMja2ltbzsgXAorICAgIFgjI2tvbXUgPSBZIyNrb211OyBcCisgICAgWCMja3VtYSA9IFkjI2t1bWE7IFwKKyAgICBYIyNzYXNlID0gWSMjc2FzZTsgXAorICAgIFgjI3Npc28gPSBZIyNzaXNvOyBcCisgICAgWCMjc3UgPSBZIyNzdTsgXAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk0MDgyYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuYwpAQCAtMCwwICsxLDgzIEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIktlY2Nha05JU1RJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJLZWNjYWtGLTE2MDAtaW50ZXJmYWNlLmgiCisKK3N0YXRpYyBIYXNoUmV0dXJuIEluaXQoaGFzaFN0YXRlICpzdGF0ZSwgaW50IGhhc2hiaXRsZW4pCit7CisgICAgc3dpdGNoKGhhc2hiaXRsZW4pIHsKKyAgICAgICAgY2FzZSAwOiAvKiAgRGVmYXVsdCBwYXJhbWV0ZXJzLCBhcmJpdHJhcnkgbGVuZ3RoIG91dHB1dCAqLworICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCAxMDI0LCA1NzYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjI0OgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCAxMTUyLCA0NDgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjU2OgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCAxMDg4LCA1MTIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzg0OgorICAgICAgICAgICAgSW5pdFNwb25nZSgoc3BvbmdlU3RhdGUqKXN0YXRlLCA4MzIsIDc2OCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1MTI6CisgICAgICAgICAgICBJbml0U3BvbmdlKChzcG9uZ2VTdGF0ZSopc3RhdGUsIDU3NiwgMTAyNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBCQURfSEFTSExFTjsKKyAgICB9CisgICAgc3RhdGUtPmZpeGVkT3V0cHV0TGVuZ3RoID0gaGFzaGJpdGxlbjsKKyAgICByZXR1cm4gU1VDQ0VTUzsKK30KKworc3RhdGljIEhhc2hSZXR1cm4gVXBkYXRlKGhhc2hTdGF0ZSAqc3RhdGUsIGNvbnN0IEJpdFNlcXVlbmNlICpkYXRhLCBEYXRhTGVuZ3RoIGRhdGFiaXRsZW4pCit7CisgICAgaWYgKChkYXRhYml0bGVuICUgOCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIEFic29yYigoc3BvbmdlU3RhdGUqKXN0YXRlLCBkYXRhLCBkYXRhYml0bGVuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgSGFzaFJldHVybiByZXQgPSBBYnNvcmIoKHNwb25nZVN0YXRlKilzdGF0ZSwgZGF0YSwgZGF0YWJpdGxlbiAtIChkYXRhYml0bGVuICUgOCkpOworICAgICAgICBpZiAocmV0ID09IFNVQ0NFU1MpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbGFzdEJ5dGU7IAorICAgICAgICAgICAgLyogIEFsaWduIHRoZSBsYXN0IHBhcnRpYWwgYnl0ZSB0byB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyAqLworICAgICAgICAgICAgbGFzdEJ5dGUgPSBkYXRhW2RhdGFiaXRsZW4vOF0gPj4gKDggLSAoZGF0YWJpdGxlbiAlIDgpKTsKKyAgICAgICAgICAgIHJldHVybiBBYnNvcmIoKHNwb25nZVN0YXRlKilzdGF0ZSwgJmxhc3RCeXRlLCBkYXRhYml0bGVuICUgOCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9Cit9CisKK3N0YXRpYyBIYXNoUmV0dXJuIEZpbmFsKGhhc2hTdGF0ZSAqc3RhdGUsIEJpdFNlcXVlbmNlICpoYXNodmFsKQoreworICAgIHJldHVybiBTcXVlZXplKHN0YXRlLCBoYXNodmFsLCBzdGF0ZS0+Zml4ZWRPdXRwdXRMZW5ndGgpOworfQorCisvKgorc3RhdGljIEhhc2hSZXR1cm4gSGFzaChpbnQgaGFzaGJpdGxlbiwgY29uc3QgQml0U2VxdWVuY2UgKmRhdGEsIERhdGFMZW5ndGggZGF0YWJpdGxlbiwgQml0U2VxdWVuY2UgKmhhc2h2YWwpCit7CisgICAgaGFzaFN0YXRlIHN0YXRlOworICAgIEhhc2hSZXR1cm4gcmVzdWx0OworCisgICAgaWYgKChoYXNoYml0bGVuICE9IDIyNCkgJiYgKGhhc2hiaXRsZW4gIT0gMjU2KSAmJiAoaGFzaGJpdGxlbiAhPSAzODQpICYmIChoYXNoYml0bGVuICE9IDUxMikpCisgICAgICAgIHJldHVybiBCQURfSEFTSExFTjsgKiAgT25seSB0aGUgZm91ciBmaXhlZCBvdXRwdXQgbGVuZ3RocyBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIEFQSSAqCisgICAgcmVzdWx0ID0gSW5pdCgmc3RhdGUsIGhhc2hiaXRsZW4pOworICAgIGlmIChyZXN1bHQgIT0gU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXN1bHQgPSBVcGRhdGUoJnN0YXRlLCBkYXRhLCBkYXRhYml0bGVuKTsKKyAgICBpZiAocmVzdWx0ICE9IFNVQ0NFU1MpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgcmVzdWx0ID0gRmluYWwoJnN0YXRlLCBoYXNodmFsKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorKi8KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrTklTVEludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDQzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKK1RoZSBLZWNjYWsgc3BvbmdlIGZ1bmN0aW9uLCBkZXNpZ25lZCBieSBHdWlkbyBCZXJ0b25pLCBKb2FuIERhZW1lbiwKK01pY2hhw6tsIFBlZXRlcnMgYW5kIEdpbGxlcyBWYW4gQXNzY2hlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZmVlZGJhY2sgb3IKK3F1ZXN0aW9ucywgcGxlYXNlIHJlZmVyIHRvIG91ciB3ZWJzaXRlOiBodHRwOi8va2VjY2FrLm5vZWtlb24ub3JnLworCitJbXBsZW1lbnRhdGlvbiBieSB0aGUgZGVzaWduZXJzLAoraGVyZWJ5IGRlbm90ZWQgYXMgInRoZSBpbXBsZW1lbnRlciIuCisKK1RvIHRoZSBleHRlbnQgcG9zc2libGUgdW5kZXIgbGF3LCB0aGUgaW1wbGVtZW50ZXIgaGFzIHdhaXZlZCBhbGwgY29weXJpZ2h0CithbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgdG8gdGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgZmlsZS4KK2h0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8KKyovCisKKyNpZm5kZWYgX0tlY2Nha05JU1RJbnRlcmZhY2VfaF8KKyNkZWZpbmUgX0tlY2Nha05JU1RJbnRlcmZhY2VfaF8KKworI2luY2x1ZGUgIktlY2Nha1Nwb25nZS5oIgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQml0U2VxdWVuY2U7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBEYXRhTGVuZ3RoOwordHlwZWRlZiBlbnVtIHsgU1VDQ0VTUyA9IDAsIEZBSUwgPSAxLCBCQURfSEFTSExFTiA9IDIgfSBIYXNoUmV0dXJuOworCit0eXBlZGVmIHNwb25nZVN0YXRlIGhhc2hTdGF0ZTsKKworLyoqCisgICogRnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgb2YgdGhlIEtlY2Nha1tyLCBjXSBzcG9uZ2UgZnVuY3Rpb24uCisgICogVGhlIHJhdGUgciBhbmQgY2FwYWNpdHkgYyB2YWx1ZXMgYXJlIGRldGVybWluZWQgZnJvbSBAYSBoYXNoYml0bGVuLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBiZSBpbml0aWFsaXplZC4KKyAgKiBAcGFyYW0gIGhhc2hiaXRsZW4gIFRoZSBkZXNpcmVkIG51bWJlciBvZiBvdXRwdXQgYml0cywgCisgICogICAgICAgICAgICAgICAgICAgICBvciAwIGZvciBLZWNjYWtbXSB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycworICAqICAgICAgICAgICAgICAgICAgICAgYW5kIGFyYml0cmFyaWx5LWxvbmcgb3V0cHV0LgorICAqIEBwcmUgICAgVGhlIHZhbHVlIG9mIGhhc2hiaXRsZW4gbXVzdCBiZSBvbmUgb2YgMCwgMjI0LCAyNTYsIDM4NCBhbmQgNTEyLgorICAqIEByZXR1cm4gU1VDQ0VTUyBpZiBzdWNjZXNzZnVsLCBCQURfSEFTSExFTiBpZiB0aGUgdmFsdWUgb2YgaGFzaGJpdGxlbiBpcyBpbmNvcnJlY3QuCisgICovCitzdGF0aWMgSGFzaFJldHVybiBJbml0KGhhc2hTdGF0ZSAqc3RhdGUsIGludCBoYXNoYml0bGVuKTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGdpdmUgaW5wdXQgZGF0YSBmb3IgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBhYnNvcmIuCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIGluaXRpYWxpemVkIGJ5IEluaXQoKS4KKyAgKiBAcGFyYW0gIGRhdGEgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEuIAorICAqICAgICAgICAgICAgICAgICAgICAgV2hlbiBAYSBkYXRhYml0TGVuIGlzIG5vdCBhIG11bHRpcGxlIG9mIDgsIHRoZSBsYXN0IGJpdHMgb2YgZGF0YSBtdXN0IGJlCisgICogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBsYXN0IGJ5dGUuCisgICogQHBhcmFtICBkYXRhYml0TGVuICBUaGUgbnVtYmVyIG9mIGlucHV0IGJpdHMgcHJvdmlkZWQgaW4gdGhlIGlucHV0IGRhdGEuCisgICogQHByZSAgICBJbiB0aGUgcHJldmlvdXMgY2FsbCB0byBBYnNvcmIoKSwgZGF0YWJpdExlbiB3YXMgYSBtdWx0aXBsZSBvZiA4LgorICAqIEByZXR1cm4gU1VDQ0VTUyBpZiBzdWNjZXNzZnVsLCBGQUlMIG90aGVyd2lzZS4KKyAgKi8KK3N0YXRpYyBIYXNoUmV0dXJuIFVwZGF0ZShoYXNoU3RhdGUgKnN0YXRlLCBjb25zdCBCaXRTZXF1ZW5jZSAqZGF0YSwgRGF0YUxlbmd0aCBkYXRhYml0bGVuKTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIHNxdWVlemUgb3V0cHV0IGRhdGEgZnJvbSB0aGUgc3BvbmdlIGZ1bmN0aW9uLgorICAqIElmIEBhIGhhc2hiaXRsZW4gd2FzIG5vdCAwIGluIHRoZSBjYWxsIHRvIEluaXQoKSwgdGhlIG51bWJlciBvZiBvdXRwdXQgYml0cyBpcyBlcXVhbCB0byBAYSBoYXNoYml0bGVuLgorICAqIElmIEBhIGhhc2hiaXRsZW4gd2FzIDAgaW4gdGhlIGNhbGwgdG8gSW5pdCgpLCB0aGUgb3V0cHV0IGJpdHMgbXVzdCBiZSBleHRyYWN0ZWQgdXNpbmcgdGhlIFNxdWVlemUoKSBmdW5jdGlvbi4KKyAgKiBAcGFyYW0gIHN0YXRlICAgICAgIFBvaW50ZXIgdG8gdGhlIHN0YXRlIG9mIHRoZSBzcG9uZ2UgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgYnkgSW5pdCgpLgorICAqIEBwYXJhbSAgaGFzaHZhbCAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQgZGF0YS4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgRkFJTCBvdGhlcndpc2UuCisgICovCitzdGF0aWMgSGFzaFJldHVybiBGaW5hbChoYXNoU3RhdGUgKnN0YXRlLCBCaXRTZXF1ZW5jZSAqaGFzaHZhbCk7CisvKioKKyAgKiBGdW5jdGlvbiB0byBjb21wdXRlIGEgaGFzaCB1c2luZyB0aGUgS2VjY2FrW3IsIGNdIHNwb25nZSBmdW5jdGlvbi4KKyAgKiBUaGUgcmF0ZSByIGFuZCBjYXBhY2l0eSBjIHZhbHVlcyBhcmUgZGV0ZXJtaW5lZCBmcm9tIEBhIGhhc2hiaXRsZW4uCisgICogQHBhcmFtICBoYXNoYml0bGVuICBUaGUgZGVzaXJlZCBudW1iZXIgb2Ygb3V0cHV0IGJpdHMuCisgICogQHBhcmFtICBkYXRhICAgICAgICBQb2ludGVyIHRvIHRoZSBpbnB1dCBkYXRhLiAKKyAgKiAgICAgICAgICAgICAgICAgICAgIFdoZW4gQGEgZGF0YWJpdExlbiBpcyBub3QgYSBtdWx0aXBsZSBvZiA4LCB0aGUgbGFzdCBiaXRzIG9mIGRhdGEgbXVzdCBiZQorICAqICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBieXRlLgorICAqIEBwYXJhbSAgZGF0YWJpdExlbiAgVGhlIG51bWJlciBvZiBpbnB1dCBiaXRzIHByb3ZpZGVkIGluIHRoZSBpbnB1dCBkYXRhLgorICAqIEBwYXJhbSAgaGFzaHZhbCAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHdoZXJlIHRvIHN0b3JlIHRoZSBvdXRwdXQgZGF0YS4KKyAgKiBAcHJlICAgIFRoZSB2YWx1ZSBvZiBoYXNoYml0bGVuIG11c3QgYmUgb25lIG9mIDIyNCwgMjU2LCAzODQgYW5kIDUxMi4KKyAgKiBAcmV0dXJuIFNVQ0NFU1MgaWYgc3VjY2Vzc2Z1bCwgQkFEX0hBU0hMRU4gaWYgdGhlIHZhbHVlIG9mIGhhc2hiaXRsZW4gaXMgaW5jb3JyZWN0LgorICAqLworLyoKK3N0YXRpYyBIYXNoUmV0dXJuIEhhc2goaW50IGhhc2hiaXRsZW4sIGNvbnN0IEJpdFNlcXVlbmNlICpkYXRhLCBEYXRhTGVuZ3RoIGRhdGFiaXRsZW4sIEJpdFNlcXVlbmNlICpoYXNodmFsKTsKKyovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmMgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2E2YmYwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvS2VjY2FrU3BvbmdlLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCitUaGUgS2VjY2FrIHNwb25nZSBmdW5jdGlvbiwgZGVzaWduZWQgYnkgR3VpZG8gQmVydG9uaSwgSm9hbiBEYWVtZW4sCitNaWNoYcOrbCBQZWV0ZXJzIGFuZCBHaWxsZXMgVmFuIEFzc2NoZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIGZlZWRiYWNrIG9yCitxdWVzdGlvbnMsIHBsZWFzZSByZWZlciB0byBvdXIgd2Vic2l0ZTogaHR0cDovL2tlY2Nhay5ub2VrZW9uLm9yZy8KKworSW1wbGVtZW50YXRpb24gYnkgdGhlIGRlc2lnbmVycywKK2hlcmVieSBkZW5vdGVkIGFzICJ0aGUgaW1wbGVtZW50ZXIiLgorCitUbyB0aGUgZXh0ZW50IHBvc3NpYmxlIHVuZGVyIGxhdywgdGhlIGltcGxlbWVudGVyIGhhcyB3YWl2ZWQgYWxsIGNvcHlyaWdodAorYW5kIHJlbGF0ZWQgb3IgbmVpZ2hib3JpbmcgcmlnaHRzIHRvIHRoZSBzb3VyY2UgY29kZSBpbiB0aGlzIGZpbGUuCitodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9wdWJsaWNkb21haW4vemVyby8xLjAvCisqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiS2VjY2FrU3BvbmdlLmgiCisjaW5jbHVkZSAiS2VjY2FrRi0xNjAwLWludGVyZmFjZS5oIgorI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorI2luY2x1ZGUgImRpc3BsYXlJbnRlcm1lZGlhdGVWYWx1ZXMuaCIKKyNlbmRpZgorCitzdGF0aWMgaW50IEluaXRTcG9uZ2Uoc3BvbmdlU3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGNhcGFjaXR5KQoreworICAgIGlmIChyYXRlK2NhcGFjaXR5ICE9IDE2MDApCisgICAgICAgIHJldHVybiAxOworICAgIGlmICgocmF0ZSA8PSAwKSB8fCAocmF0ZSA+PSAxNjAwKSB8fCAoKHJhdGUgJSA2NCkgIT0gMCkpCisgICAgICAgIHJldHVybiAxOworICAgIEtlY2Nha0luaXRpYWxpemUoKTsKKyAgICBzdGF0ZS0+cmF0ZSA9IHJhdGU7CisgICAgc3RhdGUtPmNhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgc3RhdGUtPmZpeGVkT3V0cHV0TGVuZ3RoID0gMDsKKyAgICBLZWNjYWtJbml0aWFsaXplU3RhdGUoc3RhdGUtPnN0YXRlKTsKKyAgICBtZW1zZXQoc3RhdGUtPmRhdGFRdWV1ZSwgMCwgS2VjY2FrTWF4aW11bVJhdGVJbkJ5dGVzKTsKKyAgICBzdGF0ZS0+Yml0c0luUXVldWUgPSAwOworICAgIHN0YXRlLT5zcXVlZXppbmcgPSAwOworICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nID0gMDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBBYnNvcmJRdWV1ZShzcG9uZ2VTdGF0ZSAqc3RhdGUpCit7CisgICAgLyogIHN0YXRlLT5iaXRzSW5RdWV1ZSBpcyBhc3N1bWVkIHRvIGJlIGVxdWFsIHRvIHN0YXRlLT5yYXRlICovCisgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDU3NgorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSA1NzYpCisgICAgICAgIEtlY2Nha0Fic29yYjU3NmJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlIAorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3Q4MzIKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gODMyKQorICAgICAgICBLZWNjYWtBYnNvcmI4MzJiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KQorICAgICAgICBLZWNjYWtBYnNvcmIxMDI0Yml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgIGVsc2UgCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwODgKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTA4OCkKKyAgICAgICAgS2VjY2FrQWJzb3JiMTA4OGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDExNTIKKyAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTE1MikKKyAgICAgICAgS2VjY2FrQWJzb3JiMTE1MmJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICBlbHNlIAorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMzQ0CisgICAgaWYgKHN0YXRlLT5yYXRlID09IDEzNDQpCisgICAgICAgIEtlY2Nha0Fic29yYjEzNDRiaXRzKHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSk7CisgICAgZWxzZSAKKyNlbmRpZgorICAgICAgICBLZWNjYWtBYnNvcmIoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+cmF0ZS82NCk7CisgICAgc3RhdGUtPmJpdHNJblF1ZXVlID0gMDsKK30KKworc3RhdGljIGludCBBYnNvcmIoc3BvbmdlU3RhdGUgKnN0YXRlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBsb25nIGxvbmcgZGF0YWJpdGxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgaSwgaiwgd2hvbGVCbG9ja3M7CisgICAgdW5zaWduZWQgaW50IHBhcnRpYWxCbG9jaywgcGFydGlhbEJ5dGU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VyRGF0YTsKKworICAgIGlmICgoc3RhdGUtPmJpdHNJblF1ZXVlICUgOCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7IC8qICBPbmx5IHRoZSBsYXN0IGNhbGwgbWF5IGNvbnRhaW4gYSBwYXJ0aWFsIGJ5dGUgKi8KKyAgICBpZiAoc3RhdGUtPnNxdWVlemluZykKKyAgICAgICAgcmV0dXJuIDE7IC8qICBUb28gbGF0ZSBmb3IgYWRkaXRpb25hbCBpbnB1dCAqLworCisgICAgaSA9IDA7CisgICAgd2hpbGUoaSA8IGRhdGFiaXRsZW4pIHsKKyAgICAgICAgaWYgKChzdGF0ZS0+Yml0c0luUXVldWUgPT0gMCkgJiYgKGRhdGFiaXRsZW4gPj0gc3RhdGUtPnJhdGUpICYmIChpIDw9IChkYXRhYml0bGVuLXN0YXRlLT5yYXRlKSkpIHsKKyAgICAgICAgICAgIHdob2xlQmxvY2tzID0gKGRhdGFiaXRsZW4taSkvc3RhdGUtPnJhdGU7CisgICAgICAgICAgICBjdXJEYXRhID0gZGF0YStpLzg7CisjaWZkZWYgUHJvdmlkZUZhc3Q1NzYKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSA1NzYpIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPTU3Ni84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiNTc2Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0ODMyCisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gODMyKSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz04MzIvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjgzMmJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEwMjQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz0xMDI0LzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIxMDI0Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTA4OAorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDEwODgpIHsKKyAgICAgICAgICAgICAgICBmb3Ioaj0wOyBqPHdob2xlQmxvY2tzOyBqKyssIGN1ckRhdGErPTEwODgvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYjEwODhiaXRzKHN0YXRlLT5zdGF0ZSwgY3VyRGF0YSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisjaWZkZWYgUHJvdmlkZUZhc3QxMTUyCisgICAgICAgICAgICBpZiAoc3RhdGUtPnJhdGUgPT0gMTE1MikgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9MTE1Mi84KSB7CisgICAgICAgICAgICAgICAgICAgICNpZmRlZiBLZWNjYWtSZWZlcmVuY2UKKyAgICAgICAgICAgICAgICAgICAgZGlzcGxheUJ5dGVzKDEsICJCbG9jayB0byBiZSBhYnNvcmJlZCIsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzgpOworICAgICAgICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgS2VjY2FrQWJzb3JiMTE1MmJpdHMoc3RhdGUtPnN0YXRlLCBjdXJEYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyNpZmRlZiBQcm92aWRlRmFzdDEzNDQKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMzQ0KSB7CisgICAgICAgICAgICAgICAgZm9yKGo9MDsgajx3aG9sZUJsb2NrczsgaisrLCBjdXJEYXRhKz0xMzQ0LzgpIHsKKyAgICAgICAgICAgICAgICAgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIHRvIGJlIGFic29yYmVkIiwgY3VyRGF0YSwgc3RhdGUtPnJhdGUvOCk7CisgICAgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAgICBLZWNjYWtBYnNvcmIxMzQ0Yml0cyhzdGF0ZS0+c3RhdGUsIGN1ckRhdGEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGZvcihqPTA7IGo8d2hvbGVCbG9ja3M7IGorKywgY3VyRGF0YSs9c3RhdGUtPnJhdGUvOCkgeworICAgICAgICAgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgdG8gYmUgYWJzb3JiZWQiLCBjdXJEYXRhLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIEtlY2Nha0Fic29yYihzdGF0ZS0+c3RhdGUsIGN1ckRhdGEsIHN0YXRlLT5yYXRlLzY0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpICs9IHdob2xlQmxvY2tzKnN0YXRlLT5yYXRlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcGFydGlhbEJsb2NrID0gKHVuc2lnbmVkIGludCkoZGF0YWJpdGxlbiAtIGkpOworICAgICAgICAgICAgaWYgKHBhcnRpYWxCbG9jaytzdGF0ZS0+Yml0c0luUXVldWUgPiBzdGF0ZS0+cmF0ZSkKKyAgICAgICAgICAgICAgICBwYXJ0aWFsQmxvY2sgPSBzdGF0ZS0+cmF0ZS1zdGF0ZS0+Yml0c0luUXVldWU7CisgICAgICAgICAgICBwYXJ0aWFsQnl0ZSA9IHBhcnRpYWxCbG9jayAlIDg7CisgICAgICAgICAgICBwYXJ0aWFsQmxvY2sgLT0gcGFydGlhbEJ5dGU7CisgICAgICAgICAgICBtZW1jcHkoc3RhdGUtPmRhdGFRdWV1ZStzdGF0ZS0+Yml0c0luUXVldWUvOCwgZGF0YStpLzgsIHBhcnRpYWxCbG9jay84KTsKKyAgICAgICAgICAgIHN0YXRlLT5iaXRzSW5RdWV1ZSArPSBwYXJ0aWFsQmxvY2s7CisgICAgICAgICAgICBpICs9IHBhcnRpYWxCbG9jazsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+Yml0c0luUXVldWUgPT0gc3RhdGUtPnJhdGUpCisgICAgICAgICAgICAgICAgQWJzb3JiUXVldWUoc3RhdGUpOworICAgICAgICAgICAgaWYgKHBhcnRpYWxCeXRlID4gMCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgbWFzayA9ICgxIDw8IHBhcnRpYWxCeXRlKS0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5kYXRhUXVldWVbc3RhdGUtPmJpdHNJblF1ZXVlLzhdID0gZGF0YVtpLzhdICYgbWFzazsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+Yml0c0luUXVldWUgKz0gcGFydGlhbEJ5dGU7CisgICAgICAgICAgICAgICAgaSArPSBwYXJ0aWFsQnl0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgUGFkQW5kU3dpdGNoVG9TcXVlZXppbmdQaGFzZShzcG9uZ2VTdGF0ZSAqc3RhdGUpCit7CisgICAgLyogIE5vdGU6IHRoZSBiaXRzIGFyZSBudW1iZXJlZCBmcm9tIDA9TFNCIHRvIDc9TVNCICovCisgICAgaWYgKHN0YXRlLT5iaXRzSW5RdWV1ZSArIDEgPT0gc3RhdGUtPnJhdGUpIHsKKyAgICAgICAgc3RhdGUtPmRhdGFRdWV1ZVtzdGF0ZS0+Yml0c0luUXVldWUvOCBdIHw9IDEgPDwgKHN0YXRlLT5iaXRzSW5RdWV1ZSAlIDgpOworICAgICAgICBBYnNvcmJRdWV1ZShzdGF0ZSk7CisgICAgICAgIG1lbXNldChzdGF0ZS0+ZGF0YVF1ZXVlLCAwLCBzdGF0ZS0+cmF0ZS84KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbXNldChzdGF0ZS0+ZGF0YVF1ZXVlICsgKHN0YXRlLT5iaXRzSW5RdWV1ZSs3KS84LCAwLCBzdGF0ZS0+cmF0ZS84IC0gKHN0YXRlLT5iaXRzSW5RdWV1ZSs3KS84KTsKKyAgICAgICAgc3RhdGUtPmRhdGFRdWV1ZVtzdGF0ZS0+Yml0c0luUXVldWUvOCBdIHw9IDEgPDwgKHN0YXRlLT5iaXRzSW5RdWV1ZSAlIDgpOworICAgIH0KKyAgICBzdGF0ZS0+ZGF0YVF1ZXVlWyhzdGF0ZS0+cmF0ZS0xKS84XSB8PSAxIDw8ICgoc3RhdGUtPnJhdGUtMSkgJSA4KTsKKyAgICBBYnNvcmJRdWV1ZShzdGF0ZSk7CisKKyAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgZGlzcGxheVRleHQoMSwgIi0tLSBTd2l0Y2hpbmcgdG8gc3F1ZWV6aW5nIHBoYXNlIC0tLSIpOworICAgICNlbmRpZgorI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorICAgIGlmIChzdGF0ZS0+cmF0ZSA9PSAxMDI0KSB7CisgICAgICAgIEtlY2Nha0V4dHJhY3QxMDI0Yml0cyhzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUpOworICAgICAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IDEwMjQ7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgS2VjY2FrRXh0cmFjdChzdGF0ZS0+c3RhdGUsIHN0YXRlLT5kYXRhUXVldWUsIHN0YXRlLT5yYXRlLzY0KTsKKyAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgPSBzdGF0ZS0+cmF0ZTsKKyAgICB9CisgICAgI2lmZGVmIEtlY2Nha1JlZmVyZW5jZQorICAgIGRpc3BsYXlCeXRlcygxLCAiQmxvY2sgYXZhaWxhYmxlIGZvciBzcXVlZXppbmciLCBzdGF0ZS0+ZGF0YVF1ZXVlLCBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZy84KTsKKyAgICAjZW5kaWYKKyAgICBzdGF0ZS0+c3F1ZWV6aW5nID0gMTsKK30KKworc3RhdGljIGludCBTcXVlZXplKHNwb25nZVN0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2hhciAqb3V0cHV0LCB1bnNpZ25lZCBsb25nIGxvbmcgb3V0cHV0TGVuZ3RoKQoreworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpOworICAgIHVuc2lnbmVkIGludCBwYXJ0aWFsQmxvY2s7CisKKyAgICBpZiAoIXN0YXRlLT5zcXVlZXppbmcpCisgICAgICAgIFBhZEFuZFN3aXRjaFRvU3F1ZWV6aW5nUGhhc2Uoc3RhdGUpOworICAgIGlmICgob3V0cHV0TGVuZ3RoICUgOCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7IC8qICBPbmx5IG11bHRpcGxlIG9mIDggYml0cyBhcmUgYWxsb3dlZCwgdHJ1bmNhdGlvbiBjYW4gYmUgZG9uZSBhdCB1c2VyIGxldmVsICovCisKKyAgICBpID0gMDsKKyAgICB3aGlsZShpIDwgb3V0cHV0TGVuZ3RoKSB7CisgICAgICAgIGlmIChzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9PSAwKSB7CisgICAgICAgICAgICBLZWNjYWtQZXJtdXRhdGlvbihzdGF0ZS0+c3RhdGUpOworI2lmZGVmIFByb3ZpZGVGYXN0MTAyNAorICAgICAgICAgICAgaWYgKHN0YXRlLT5yYXRlID09IDEwMjQpIHsKKyAgICAgICAgICAgICAgICBLZWNjYWtFeHRyYWN0MTAyNGJpdHMoc3RhdGUtPnN0YXRlLCBzdGF0ZS0+ZGF0YVF1ZXVlKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZyA9IDEwMjQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBLZWNjYWtFeHRyYWN0KHN0YXRlLT5zdGF0ZSwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPnJhdGUvNjQpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iaXRzQXZhaWxhYmxlRm9yU3F1ZWV6aW5nID0gc3RhdGUtPnJhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAjaWZkZWYgS2VjY2FrUmVmZXJlbmNlCisgICAgICAgICAgICBkaXNwbGF5Qnl0ZXMoMSwgIkJsb2NrIGF2YWlsYWJsZSBmb3Igc3F1ZWV6aW5nIiwgc3RhdGUtPmRhdGFRdWV1ZSwgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcvOCk7CisgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgfQorICAgICAgICBwYXJ0aWFsQmxvY2sgPSBzdGF0ZS0+Yml0c0F2YWlsYWJsZUZvclNxdWVlemluZzsKKyAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpcGFydGlhbEJsb2NrID4gb3V0cHV0TGVuZ3RoIC0gaSkKKyAgICAgICAgICAgIHBhcnRpYWxCbG9jayA9ICh1bnNpZ25lZCBpbnQpKG91dHB1dExlbmd0aCAtIGkpOworICAgICAgICBtZW1jcHkob3V0cHV0K2kvOCwgc3RhdGUtPmRhdGFRdWV1ZSsoc3RhdGUtPnJhdGUtc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcpLzgsIHBhcnRpYWxCbG9jay84KTsKKyAgICAgICAgc3RhdGUtPmJpdHNBdmFpbGFibGVGb3JTcXVlZXppbmcgLT0gcGFydGlhbEJsb2NrOworICAgICAgICBpICs9IHBhcnRpYWxCbG9jazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuaCBiL01vZHVsZXMvX3NoYTMva2VjY2FrL0tlY2Nha1Nwb25nZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDVjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9LZWNjYWtTcG9uZ2UuaApAQCAtMCwwICsxLDc2IEBACisvKgorVGhlIEtlY2NhayBzcG9uZ2UgZnVuY3Rpb24sIGRlc2lnbmVkIGJ5IEd1aWRvIEJlcnRvbmksIEpvYW4gRGFlbWVuLAorTWljaGHDq2wgUGVldGVycyBhbmQgR2lsbGVzIFZhbiBBc3NjaGUuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBmZWVkYmFjayBvcgorcXVlc3Rpb25zLCBwbGVhc2UgcmVmZXIgdG8gb3VyIHdlYnNpdGU6IGh0dHA6Ly9rZWNjYWsubm9la2Vvbi5vcmcvCisKK0ltcGxlbWVudGF0aW9uIGJ5IHRoZSBkZXNpZ25lcnMsCitoZXJlYnkgZGVub3RlZCBhcyAidGhlIGltcGxlbWVudGVyIi4KKworVG8gdGhlIGV4dGVudCBwb3NzaWJsZSB1bmRlciBsYXcsIHRoZSBpbXBsZW1lbnRlciBoYXMgd2FpdmVkIGFsbCBjb3B5cmlnaHQKK2FuZCByZWxhdGVkIG9yIG5laWdoYm9yaW5nIHJpZ2h0cyB0byB0aGUgc291cmNlIGNvZGUgaW4gdGhpcyBmaWxlLgoraHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLworKi8KKworI2lmbmRlZiBfS2VjY2FrU3BvbmdlX2hfCisjZGVmaW5lIF9LZWNjYWtTcG9uZ2VfaF8KKworI2RlZmluZSBLZWNjYWtQZXJtdXRhdGlvblNpemUgMTYwMAorI2RlZmluZSBLZWNjYWtQZXJtdXRhdGlvblNpemVJbkJ5dGVzIChLZWNjYWtQZXJtdXRhdGlvblNpemUvOCkKKyNkZWZpbmUgS2VjY2FrTWF4aW11bVJhdGUgMTUzNgorI2RlZmluZSBLZWNjYWtNYXhpbXVtUmF0ZUluQnl0ZXMgKEtlY2Nha01heGltdW1SYXRlLzgpCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBBTElHTiBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCgzMikpKQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgQUxJR04gX19kZWNsc3BlYyhhbGlnbigzMikpCisjZWxzZQorI2RlZmluZSBBTElHTgorI2VuZGlmCisKK0FMSUdOIHR5cGVkZWYgc3RydWN0IHNwb25nZVN0YXRlU3RydWN0IHsKKyAgICBBTElHTiB1bnNpZ25lZCBjaGFyIHN0YXRlW0tlY2Nha1Blcm11dGF0aW9uU2l6ZUluQnl0ZXNdOworICAgIEFMSUdOIHVuc2lnbmVkIGNoYXIgZGF0YVF1ZXVlW0tlY2Nha01heGltdW1SYXRlSW5CeXRlc107CisgICAgdW5zaWduZWQgaW50IHJhdGU7CisgICAgdW5zaWduZWQgaW50IGNhcGFjaXR5OworICAgIHVuc2lnbmVkIGludCBiaXRzSW5RdWV1ZTsKKyAgICB1bnNpZ25lZCBpbnQgZml4ZWRPdXRwdXRMZW5ndGg7CisgICAgaW50IHNxdWVlemluZzsKKyAgICB1bnNpZ25lZCBpbnQgYml0c0F2YWlsYWJsZUZvclNxdWVlemluZzsKK30gc3BvbmdlU3RhdGU7CisKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIG9mIHRoZSBLZWNjYWtbciwgY10gc3BvbmdlIGZ1bmN0aW9uLgorICAqIFRoZSBzcG9uZ2UgZnVuY3Rpb24gaXMgc2V0IHRvIHRoZSBhYnNvcmJpbmcgcGhhc2UuCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIHRvIGJlIGluaXRpYWxpemVkLgorICAqIEBwYXJhbSAgcmF0ZSAgICAgICAgVGhlIHZhbHVlIG9mIHRoZSByYXRlIHIuCisgICogQHBhcmFtICBjYXBhY2l0eSAgICBUaGUgdmFsdWUgb2YgdGhlIGNhcGFjaXR5IGMuCisgICogQHByZSAgICBPbmUgbXVzdCBoYXZlIHIrYz0xNjAwIGFuZCB0aGUgcmF0ZSBhIG11bHRpcGxlIG9mIDY0IGJpdHMgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgKiBAcmV0dXJuIFplcm8gaWYgc3VjY2Vzc2Z1bCwgMSBvdGhlcndpc2UuCisgICovCitzdGF0aWMgaW50IEluaXRTcG9uZ2Uoc3BvbmdlU3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcmF0ZSwgdW5zaWduZWQgaW50IGNhcGFjaXR5KTsKKy8qKgorICAqIEZ1bmN0aW9uIHRvIGdpdmUgaW5wdXQgZGF0YSBmb3IgdGhlIHNwb25nZSBmdW5jdGlvbiB0byBhYnNvcmIuCisgICogQHBhcmFtICBzdGF0ZSAgICAgICBQb2ludGVyIHRvIHRoZSBzdGF0ZSBvZiB0aGUgc3BvbmdlIGZ1bmN0aW9uIGluaXRpYWxpemVkIGJ5IEluaXRTcG9uZ2UoKS4KKyAgKiBAcGFyYW0gIGRhdGEgICAgICAgIFBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEuIAorICAqICAgICAgICAgICAgICAgICAgICAgV2hlbiBAYSBkYXRhYml0TGVuIGlzIG5vdCBhIG11bHRpcGxlIG9mIDgsIHRoZSBsYXN0IGJpdHMgb2YgZGF0YSBtdXN0IGJlCisgICogICAgICAgICAgICAgICAgICAgICBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgbGFzdCBieXRlLgorICAqIEBwYXJhbSAgZGF0YWJpdExlbiAgVGhlIG51bWJlciBvZiBpbnB1dCBiaXRzIHByb3ZpZGVkIGluIHRoZSBpbnB1dCBkYXRhLgorICAqIEBwcmUgICAgSW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gQWJzb3JiKCksIGRhdGFiaXRMZW4gd2FzIGEgbXVsdGlwbGUgb2YgOC4KKyAgKiBAcHJlICAgIFRoZSBzcG9uZ2UgZnVuY3Rpb24gbXVzdCBiZSBpbiB0aGUgYWJzb3JiaW5nIHBoYXNlLAorICAqICAgICAgICAgaS5lLiwgU3F1ZWV6ZSgpIG11c3Qgbm90IGhhdmUgYmVlbiBjYWxsZWQgYmVmb3JlLgorICAqIEByZXR1cm4gWmVybyBpZiBzdWNjZXNzZnVsLCAxIG90aGVyd2lzZS4KKyAgKi8KK3N0YXRpYyBpbnQgQWJzb3JiKHNwb25nZVN0YXRlICpzdGF0ZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgbG9uZyBsb25nIGRhdGFiaXRsZW4pOworLyoqCisgICogRnVuY3Rpb24gdG8gc3F1ZWV6ZSBvdXRwdXQgZGF0YSBmcm9tIHRoZSBzcG9uZ2UgZnVuY3Rpb24uCisgICogSWYgdGhlIHNwb25nZSBmdW5jdGlvbiB3YXMgaW4gdGhlIGFic29yYmluZyBwaGFzZSwgdGhpcyBmdW5jdGlvbiAKKyAgKiBzd2l0Y2hlcyBpdCB0byB0aGUgc3F1ZWV6aW5nIHBoYXNlLgorICAqIEBwYXJhbSAgc3RhdGUgICAgICAgUG9pbnRlciB0byB0aGUgc3RhdGUgb2YgdGhlIHNwb25nZSBmdW5jdGlvbiBpbml0aWFsaXplZCBieSBJbml0U3BvbmdlKCkuCisgICogQHBhcmFtICBvdXRwdXQgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgd2hlcmUgdG8gc3RvcmUgdGhlIG91dHB1dCBkYXRhLgorICAqIEBwYXJhbSAgb3V0cHV0TGVuZ3RoICAgIFRoZSBudW1iZXIgb2Ygb3V0cHV0IGJpdHMgZGVzaXJlZC4KKyAgKiAgICAgICAgICAgICAgICAgICAgIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4LgorICAqIEByZXR1cm4gWmVybyBpZiBzdWNjZXNzZnVsLCAxIG90aGVyd2lzZS4KKyAgKi8KK3N0YXRpYyBpbnQgU3F1ZWV6ZShzcG9uZ2VTdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dHB1dCwgdW5zaWduZWQgbG9uZyBsb25nIG91dHB1dExlbmd0aCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc2hhMy9rZWNjYWsvYnJnX2VuZGlhbi5oIGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvYnJnX2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjcyMjZlYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zaGEzL2tlY2Nhay9icmdfZW5kaWFuLmgKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDgsIEJyaWFuIEdsYWRtYW4sIFdvcmNlc3RlciwgVUsuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyBMSUNFTlNFIFRFUk1TCisKKyBUaGUgcmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlICh3aXRoIG9yIHdpdGhvdXQgY2hhbmdlcykKKyBpcyBhbGxvd2VkIHdpdGhvdXQgdGhlIHBheW1lbnQgb2YgZmVlcyBvciByb3lhbHRpZXMgcHJvdmlkZWQgdGhhdDoKKworICAxLiBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAgICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXI7CisKKyAgMi4gYmluYXJ5IGRpc3RyaWJ1dGlvbnMgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVpciBkb2N1bWVudGF0aW9uOworCisgIDMuIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGlzIG5vdCB1c2VkIHRvIGVuZG9yc2UgcHJvZHVjdHMKKyAgICAgYnVpbHQgdXNpbmcgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworIERJU0NMQUlNRVIKKworIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzIGlzJyB3aXRoIG5vIGV4cGxpY2l0IG9yIGltcGxpZWQgd2FycmFudGllcworIGluIHJlc3BlY3Qgb2YgaXRzIHByb3BlcnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBjb3JyZWN0bmVzcworIGFuZC9vciBmaXRuZXNzIGZvciBwdXJwb3NlLgorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIElzc3VlIERhdGU6IDIwLzEyLzIwMDcKKyBDaGFuZ2VzIGZvciBBUk0gOS85LzIwMTAKKyovCisKKyNpZm5kZWYgX0JSR19FTkRJQU5fSAorI2RlZmluZSBfQlJHX0VORElBTl9ICisKKyNkZWZpbmUgSVNfQklHX0VORElBTiAgICAgIDQzMjEgLyogYnl0ZSAwIGlzIG1vc3Qgc2lnbmlmaWNhbnQgKG1jNjhrKSAqLworI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMTIzNCAvKiBieXRlIDAgaXMgbGVhc3Qgc2lnbmlmaWNhbnQgKGkzODYpICovCisKKyNpZiAwCisvKiBJbmNsdWRlIGZpbGVzIHdoZXJlIGVuZGlhbiBkZWZpbmVzIGFuZCBieXRlc3dhcCBmdW5jdGlvbnMgbWF5IHJlc2lkZSAqLworI2lmIGRlZmluZWQoIF9fc3VuICkKKyMgIGluY2x1ZGUgPHN5cy9pc2FfZGVmcy5oPgorI2VsaWYgZGVmaW5lZCggX19GcmVlQlNEX18gKSB8fCBkZWZpbmVkKCBfX09wZW5CU0RfXyApIHx8IGRlZmluZWQoIF9fTmV0QlNEX18gKQorIyAgaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZCggQlNEICkgJiYgKCBCU0QgPj0gMTk5MTAzICkgfHwgZGVmaW5lZCggX19BUFBMRV9fICkgfHwgXAorICAgICAgZGVmaW5lZCggX19DWUdXSU4zMl9fICkgfHwgZGVmaW5lZCggX19ESkdQUF9fICkgfHwgZGVmaW5lZCggX19vc2ZfXyApCisjICBpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorI2VsaWYgZGVmaW5lZCggX19saW51eF9fICkgfHwgZGVmaW5lZCggX19HTlVDX18gKSB8fCBkZWZpbmVkKCBfX0dOVV9MSUJSQVJZX18gKQorIyAgaWYgIWRlZmluZWQoIF9fTUlOR1czMl9fICkgJiYgIWRlZmluZWQoIF9BSVggKQorIyAgICBpbmNsdWRlIDxlbmRpYW4uaD4KKyMgICAgaWYgIWRlZmluZWQoIF9fQkVPU19fICkKKyMgICAgICBpbmNsdWRlIDxieXRlc3dhcC5oPgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIE5vdyBhdHRlbXB0IHRvIHNldCB0aGUgZGVmaW5lIGZvciBwbGF0Zm9ybSBieXRlIG9yZGVyIHVzaW5nIGFueSAgKi8KKy8qIG9mIHRoZSBmb3VyIGZvcm1zIFNZTUJPTCwgX1NZTUJPTCwgX19TWU1CT0wgJiBfX1NZTUJPTF9fLCB3aGljaCAgKi8KKy8qIHNlZW0gdG8gZW5jb21wYXNzIG1vc3QgZW5kaWFuIHN5bWJvbCBkZWZpbml0aW9ucyAgICAgICAgICAgICAgICAgKi8KKworI2lmIGRlZmluZWQoIEJJR19FTkRJQU4gKSAmJiBkZWZpbmVkKCBMSVRUTEVfRU5ESUFOICkKKyMgIGlmIGRlZmluZWQoIEJZVEVfT1JERVIgKSAmJiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyAgZWxpZiBkZWZpbmVkKCBCWVRFX09SREVSICkgJiYgQllURV9PUkRFUiA9PSBMSVRUTEVfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBCSUdfRU5ESUFOICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbGlmIGRlZmluZWQoIExJVFRMRV9FTkRJQU4gKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKCBfQklHX0VORElBTiApICYmIGRlZmluZWQoIF9MSVRUTEVfRU5ESUFOICkKKyMgIGlmIGRlZmluZWQoIF9CWVRFX09SREVSICkgJiYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorIyAgZWxpZiBkZWZpbmVkKCBfQllURV9PUkRFUiApICYmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBfQklHX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxpZiBkZWZpbmVkKCBfTElUVExFX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmIGRlZmluZWQoIF9fQklHX0VORElBTiApICYmIGRlZmluZWQoIF9fTElUVExFX0VORElBTiApCisjICBpZiBkZWZpbmVkKCBfX0JZVEVfT1JERVIgKSAmJiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjICAgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyMgIGVsaWYgZGVmaW5lZCggX19CWVRFX09SREVSICkgJiYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZCggX19CSUdfRU5ESUFOICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbGlmIGRlZmluZWQoIF9fTElUVExFX0VORElBTiApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2lmIGRlZmluZWQoIF9fQklHX0VORElBTl9fICkgJiYgZGVmaW5lZCggX19MSVRUTEVfRU5ESUFOX18gKQorIyAgaWYgZGVmaW5lZCggX19CWVRFX09SREVSX18gKSAmJiBfX0JZVEVfT1JERVJfXyA9PSBfX0JJR19FTkRJQU5fXworIyAgICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjICBlbGlmIGRlZmluZWQoIF9fQllURV9PUkRFUl9fICkgJiYgX19CWVRFX09SREVSX18gPT0gX19MSVRUTEVfRU5ESUFOX18KKyMgICAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoIF9fQklHX0VORElBTl9fICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0JJR19FTkRJQU4KKyNlbGlmIGRlZmluZWQoIF9fTElUVExFX0VORElBTl9fICkKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisvKiAgaWYgdGhlIHBsYXRmb3JtIGJ5dGUgb3JkZXIgY291bGQgbm90IGJlIGRldGVybWluZWQsIHRoZW4gdHJ5IHRvICovCisvKiAgc2V0IHRoaXMgZGVmaW5lIHVzaW5nIGNvbW1vbiBtYWNoaW5lIGRlZmluZXMgICAgICAgICAgICAgICAgICAgICovCisjaWYgIWRlZmluZWQoUExBVEZPUk1fQllURV9PUkRFUikKKworI2lmICAgZGVmaW5lZCggX19hbHBoYV9fICkgfHwgZGVmaW5lZCggX19hbHBoYSApIHx8IGRlZmluZWQoIGkzODYgKSAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX2kzODZfXyApICB8fCBkZWZpbmVkKCBfTV9JODYgKSAgfHwgZGVmaW5lZCggX01fSVg4NiApICAgIHx8IFwKKyAgICAgIGRlZmluZWQoIF9fT1MyX18gKSAgIHx8IGRlZmluZWQoIHN1bjM4NiApICB8fCBkZWZpbmVkKCBfX1RVUkJPQ19fICkgfHwgXAorICAgICAgZGVmaW5lZCggdmF4ICkgICAgICAgfHwgZGVmaW5lZCggdm1zICkgICAgIHx8IGRlZmluZWQoIFZNUyApICAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX1ZNUyApICAgICB8fCBkZWZpbmVkKCBfTV9YNjQgKQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorCisjZWxpZiBkZWZpbmVkKCBBTUlHQSApICAgfHwgZGVmaW5lZCggYXBwbGVjICkgICAgfHwgZGVmaW5lZCggX19BUzQwMF9fICkgIHx8IFwKKyAgICAgIGRlZmluZWQoIF9DUkFZICkgICB8fCBkZWZpbmVkKCBfX2hwcGEgKSAgICB8fCBkZWZpbmVkKCBfX2hwOTAwMCApICAgfHwgXAorICAgICAgZGVmaW5lZCggaWJtMzcwICkgIHx8IGRlZmluZWQoIG1jNjgwMDAgKSAgIHx8IGRlZmluZWQoIG02OGsgKSAgICAgICB8fCBcCisgICAgICBkZWZpbmVkKCBfX01SQ19fICkgfHwgZGVmaW5lZCggX19NVlNfXyApICAgfHwgZGVmaW5lZCggX19NV0VSS1NfXyApIHx8IFwKKyAgICAgIGRlZmluZWQoIHNwYXJjICkgICB8fCBkZWZpbmVkKCBfX3NwYXJjKSAgICB8fCBkZWZpbmVkKCBTWU1BTlRFQ19DICkgfHwgXAorICAgICAgZGVmaW5lZCggX19WT1NfXyApIHx8IGRlZmluZWQoIF9fVElHQ0NfXyApIHx8IGRlZmluZWQoIF9fVEFOREVNICkgICB8fCBcCisgICAgICBkZWZpbmVkKCBUSElOS19DICkgfHwgZGVmaW5lZCggX19WTUNNU19fICkgfHwgZGVmaW5lZCggX0FJWCApCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisKKyNlbGlmIGRlZmluZWQoX19hcm1fXykKKyMgaWZkZWYgX19CSUdfRU5ESUFOCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjIGVsc2UKKyMgIGRlZmluZSBQTEFURk9STV9CWVRFX09SREVSIElTX0xJVFRMRV9FTkRJQU4KKyMgZW5kaWYKKyNlbGlmIDEgICAgIC8qICoqKiogRURJVCBIRVJFIElGIE5FQ0VTU0FSWSAqKioqICovCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19MSVRUTEVfRU5ESUFOCisjZWxpZiAwICAgICAvKiAqKioqIEVESVQgSEVSRSBJRiBORUNFU1NBUlkgKioqKiAqLworIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfQklHX0VORElBTgorI2Vsc2UKKyMgIGVycm9yIFBsZWFzZSBlZGl0IGxpbmVzIDEzMiBvciAxMzQgaW4gYnJnX2VuZGlhbi5oIHRvIHNldCB0aGUgcGxhdGZvcm0gYnl0ZSBvcmRlcgorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0IGIvTW9kdWxlcy9fc2hhMy9rZWNjYWsvY3J5cHRvX2hhc2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvYS5vdXQKcmVuYW1lIHRvIE1vZHVsZXMvX3NoYTMva2VjY2FrL2NyeXB0b19oYXNoLmgKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jIGIvTW9kdWxlcy9fc2hhMy9zaGEzbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExMjdkMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jCkBAIC0wLDAgKzEsNTkzIEBACisvKiBTSEEzIG1vZHVsZQorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byB0aGUgU0hBMyBhbGdvcml0aG0KKyAqCisgKiBTZWUgYmVsb3cgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBjb2RlIHRoaXMgbW9kdWxlIHdhcworICogYmFzZWQgdXBvbi4gQWRkaXRpb25hbCB3b3JrIHBlcmZvcm1lZCBieToKKyAqCisgKiAgQW5kcmV3IEt1Y2hsaW5nIChhbWtAYW1rLmNhKQorICogIEdyZWcgU3RlaW4gKGdzdGVpbkBseXJhLm9yZykKKyAqICBUcmV2b3IgUGVycmluICh0cmV2cEB0cmV2cC5uZXQpCisgKiAgR3JlZ29yeSBQLiBTbWl0aCAoZ3JlZ0BrcnlwdG8ub3JnKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTIgICBDaHJpc3RpYW4gSGVpbWVzIChjaHJpc3RpYW5AcHl0aG9uLm9yZykKKyAqICBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisgKgorICovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICIuLi9oYXNobGliLmgiCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hBLTMgKEtlY2NhaykKKyAqCisgKiBUaGUgY29kZSBpcyBiYXNlZCBvbiBLZWNjYWtSZWZlcmVuY2VBbmRPcHRpbWl6ZWQtMy4yLnppcCBmcm9tIDI5IE1heSAyMDEyLgorICoKKyAqIFRoZSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaXMgYWx0ZXJlZCBpbiB0aGlzIHBvaW50czoKKyAqICAtIEMrKyBjb21tZW50cyBhcmUgY29udmVydGVkIHRvIEFOU0kgQyBjb21tZW50cy4KKyAqICAtIEFsbCBmdW5jdGlvbnMgYW5kIGdsb2JhbHMgYXJlIGRlY2xhcmVkIHN0YXRpYy4KKyAqICAtIFRoZSB0eXBlZGVmIGZvciBVSU5UNjQgaXMgY29tbWVudGVkIG91dC4KKyAqICAtIEtlY2Nha0YtMTYwMC1vcHRbMzJ8NjRdLXNldHRpbmdzLmggYXJlIGNvbW1lbnRlZCBvdXQKKyAqICAtIFNvbWUgdW51c2VkIGZ1bmN0aW9ucyBhcmUgY29tbWVudGVkIG91dCB0byBzaWxlbmNlIGNvbXBpbGVyIHdhcm5pbmdzLgorICoKKyAqIEluIG9yZGVyIHRvIGF2b2lkIG5hbWUgY2xhc2hlcyB3aXRoIG90aGVyIHNvZnR3YXJlIEkgaGF2ZSB0byBkZWNsYXJlIGFsbAorICogS2VjY2FrIGZ1bmN0aW9ucyBhbmQgZ2xvYmFsIGRhdGEgYXMgc3RhdGljLiBUaGUgQyBjb2RlIGlzIGRpcmVjdGx5CisgKiBpbmNsdWRlZCBpbnRvIHRoaXMgZmlsZSBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIHN0YXRpYyBmdW5jdGlvbnMuCisgKgorICogS2VjY2FrIGNhbiBiZSB0dW5lZCB3aXRoIHNldmVyYWwgcGFyYW1lbnRlcnMuIEkgdHJ5IHRvIGV4cGxhaW4gYWxsIG9wdGlvbnMKKyAqIGFzIGZhciBhcyBJIHVuZGVyc3RhbmQgdGhlbS4gVGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBhbHNvIGNvbnRhaW5zCisgKiBhc3NlbWJsZXIgY29kZSBmb3IgQVJNIHBsYXRmb3JtcyAoTkVPTiBpbnN0cnVjdGlvbnMpLgorICoKKyAqIENvbW1vbgorICogPT09PT09CisgKgorICogT3B0aW9uczoKKyAqICAgVXNlQmViaWdva2ltaXNhLCBVbnJvbGxpbmcKKyAqCisgKiAtIFVucm9sbGluZzogbG9vcCB1bnJvbGxpbmcgKDI0LCAxMiwgOCwgNiwgNCwgMywgMiwgMSkKKyAqIC0gVXNlQmViaWdva2ltaXNhOiBsYW5lIGNvbXBsZW1lbnRpbmcKKyAqCisgKiA2NGJpdCBwbGF0Zm9ybXMKKyAqID09PT09PT09PT09PT09PQorICoKKyAqIEFkZGl0aW9uYWwgb3B0aW9uczoKKyAqICAgVXNlU1NFLCBVc2VPbmx5U0lNRDY0LCBVc2VNTVgsIFVzZVhPUCwgVXNlU0hMRAorICoKKyAqIE9wdGltaXplZCBpbnN0cnVjdGlvbnMgKGRpc2FibGVkIGJ5IGRlZmF1bHQpOgorICogICAtIFVzZVNTRTogdXNlIFN0cmVhbSBTSU1EIGV4dGVuc2lvbnMKKyAqICAgICBvIFVzZU9ubHlTSU1ENjQ6IGxpbWl0IHRvIDY0Yml0IGluc3RydWN0aW9ucywgb3RoZXJ3aXNlIDEyOGJpdAorICogICAgIG8gdy9vIFVzZU9ubHlTSU1ENjQ6IHJlcXVpcmVzIGNvbXBpbGVyIGFndW1lbnQgLW1zc3NlMyBvciAtbXR1bmUKKyAqICAgLSBVc2VNTVg6IHVzZSA2NGJpdCBNTVggaW5zdHJ1Y3Rpb25zCisgKiAgIC0gVXNlWE9QOiB1c2UgQU1EJ3MgZVh0ZW5kZWQgT3BlcmF0aW9ucyAoMTI4Yml0IFNTRSBleHRlbnNpb24pCisgKgorICogT3RoZXI6CisgKiAgIC0gVW5yb2xsaW5nOiBkZWZhdWx0IDI0CisgKiAgIC0gVXNlQmViaWdva2ltaXNhOiBkZWZhdWx0IDEKKyAqCisgKiBXaGVuIG5laXRoZXIgVXNlU1NFLCBVc2VNTVggbm9yIFVzZVhPUCBpcyBjb25maWd1cmVkLCBST0w2NCAocm90YXRlIGxlZnQKKyAqIDY0KSBpcyBpbXBsZW1lbnRlZCBhczoKKyAqICAgLSBXaW5kb3dzOiBfcm90bDY0KCkKKyAqICAgLSBVc2VTSExEOiB1c2Ugc2hsZCAoc2hpZnQgbGVmdCkgYXNtIG9wdGltaXphdGlvbgorICogICAtIG90aGVyd2lzZTogc2hpZnQgYW5kIHhvcgorICoKKyAqIFVzZUJlYmlnb2tpbWlzYSBjYW4ndCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggVXNlU1NFLCBVc2VNTVggb3IKKyAqIFVzZVhPUC4gVXNlT25seVNJTUQ2NCBoYXMgbm8gZWZmZWN0IHVubGVzcyBVc2VTU0UgaXMgc3BlY2lmaWVkLgorICoKKyAqIFRlc3RzIGhhdmUgc2hvd24gdGhhdCBVc2VTU0UgKyBVc2VPbmx5U0lNRDY0IGlzIGFib3V0IHRocmVlIHRvIGZvdXIKKyAqIHRpbWVzIFNMT1dFUiB0aGFuIFVzZUJlYmlnb2tpbWlzYS4gVXNlU1NFIGFuZCBVc2VNTVggYXJlIGFib3V0IHR3byB0aW1lcworICogc2xvd2VyLiAodGVzdGVkIGJ5IENIIGFuZCBBUCkKKyAqCisgKiAzMmJpdCBwbGF0Zm9ybXMKKyAqID09PT09PT09PT09PT09PQorICoKKyAqIEFkZGl0aW9uYWwgb3B0aW9uczoKKyAqICAgVXNlSW50ZXJsZWF2ZVRhYmxlcywgVXNlU2NoZWR1bGUKKyAqCisgKiAgIC0gVW5yb2xsaW5nOiBkZWZhdWx0IDIKKyAqICAgLSBVc2VCZWJpZ29raW1pc2E6IGRlZmF1bHQgbi9hCisgKiAgIC0gVXNlU2NoZWR1bGU6ID8/PywgKDEsIDIsIDM7IGRlZmF1bHQgMykKKyAqICAgLSBVc2VJbnRlcmxlYXZlVGFibGVzOiB1c2UgdHdvIDY0ayBsb29rdXAgdGFibGVzIGZvciAoZGUpaW50ZXJsZWF2aW5nCisgKiAgICAgZGVmYXVsdDogbi9hCisgKgorICogc2NoZWR1bGVzOgorICogICAtIDM6IG5vIFVzZUJlYmlnb2tpbWlzYSwgVW5yb2xsaW5nIG11c3QgYmUgMgorICogICAtIDIgKyAxOiA/Pz8KKyAqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZkZWYgX19zcGFyYworICAvKiBvcHQ2NCB1c2VzIHVuLWFsaWduZWQgbWVtb3J5IGFjY2VzcyB0aGF0IGNhdXNlcyBhIEJVUyBlcnJvciB3aXRoIG1zZworICAgKiAnaW52YWxpZCBhZGRyZXNzIGFsaWdubWVudCcgb24gU1BBUkMuICovCisgICNkZWZpbmUgS2VjY2FrT3B0IDMyCisjZWxpZiBTSVpFT0ZfVk9JRF9QID09IDggJiYgZGVmaW5lZChQWV9VSU5UNjRfVCkKKyAgLyogb3B0NjQgd29ya3Mgb25seSBmb3IgNjRiaXQgcGxhdGZvcm1zIHdpdGggdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBLZWNjYWtPcHQgNjQKKyNlbHNlCisgIC8qIG9wdDMyIGlzIHVzZWQgZm9yIHRoZSByZW1haW5pbmcgMzIgYW5kIDY0Yml0IHBsYXRmb3JtcyAqLworICAjZGVmaW5lIEtlY2Nha09wdCAzMgorI2VuZGlmCisKKyNpZiBLZWNjYWtPcHQgPT0gNjQgJiYgZGVmaW5lZChQWV9VSU5UNjRfVCkKKyAgLyogNjRiaXQgcGxhdGZvcm1zIHdpdGggdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBVbnJvbGxpbmcgMjQKKyAgI2RlZmluZSBVc2VCZWJpZ29raW1pc2EKKyAgdHlwZWRlZiBQWV9VSU5UNjRfVCBVSU5UNjQ7CisjZWxpZiBLZWNjYWtPcHQgPT0gMzIgJiYgZGVmaW5lZChQWV9VSU5UNjRfVCkKKyAgLyogMzJiaXQgcGxhdGZvcm1zIHdpdGggdW5zaWduZWQgaW50NjQgKi8KKyAgI2RlZmluZSBVbnJvbGxpbmcgMgorICAjZGVmaW5lIFVzZVNjaGVkdWxlIDMKKyAgdHlwZWRlZiBQWV9VSU5UNjRfVCBVSU5UNjQ7CisjZWxzZQorICAvKiAzMiBvciA2NGJpdCBwbGF0Zm9ybXMgd2l0aG91dCB1bnNpZ25lZCBpbnQ2NCAqLworICAjZGVmaW5lIFVucm9sbGluZyAyCisgICNkZWZpbmUgVXNlU2NoZWR1bGUgMworICAjZGVmaW5lIFVzZUludGVybGVhdmVUYWJsZXMKKyNlbmRpZgorCisvKiByZXBsYWNlbWVudCBmb3IgYnJnX2VuZGlhbi5oICovCisjZGVmaW5lIElTX0JJR19FTkRJQU4gNDMyMQorI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIDEyMzQKKyNpZiBQWV9CSUdfRU5ESUFOCisjICBkZWZpbmUgUExBVEZPUk1fQllURV9PUkRFUiBJU19CSUdfRU5ESUFOCisjZWxzZQorIyAgZGVmaW5lIFBMQVRGT1JNX0JZVEVfT1JERVIgSVNfTElUVExFX0VORElBTgorI2VuZGlmCisKKy8qIGlubGluZSBhbGwgS2VjY2FrIGRlcGVuZGVuY2llcyAqLworI2luY2x1ZGUgImtlY2Nhay9LZWNjYWtOSVNUSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAia2VjY2FrL0tlY2Nha05JU1RJbnRlcmZhY2UuYyIKKyNpbmNsdWRlICJrZWNjYWsvS2VjY2FrU3BvbmdlLmMiCisjaWYgS2VjY2FrT3B0ID09IDY0CisgICNpbmNsdWRlICJrZWNjYWsvS2VjY2FrRi0xNjAwLW9wdDY0LmMiCisjZWxpZiBLZWNjYWtPcHQgPT0gMzIKKyAgI2luY2x1ZGUgImtlY2Nhay9LZWNjYWtGLTE2MDAtb3B0MzIuYyIKKyNlbmRpZgorCisvKiAjZGVmaW5lIFNIQTNfQkxPQ0tTSVpFIDIwMCAvLyAxNjAwIGJpdHMgICovCisjZGVmaW5lIFNIQTNfTUFYX0RJR0VTVFNJWkUgNjQgLyogNTEyIGJpdHMgKi8KKyNkZWZpbmUgU0hBM19zdGF0ZSBoYXNoU3RhdGUKKyNkZWZpbmUgU0hBM19pbml0IEluaXQKKyNkZWZpbmUgU0hBM19wcm9jZXNzIFVwZGF0ZQorI2RlZmluZSBTSEEzX2RvbmUgRmluYWwKKyNkZWZpbmUgU0hBM19jb3B5c3RhdGUoZGVzdCwgc3JjKSBtZW1jcHkoJihkZXN0KSwgJihzcmMpLCBzaXplb2YoU0hBM19zdGF0ZSkpCisjZGVmaW5lIFNIQTNfY2xlYXJzdGF0ZShzdGF0ZSkgbWVtc2V0KCYoc3RhdGUpLCAwLCBzaXplb2YoU0hBM19zdGF0ZSkpCisKKy8qIFRoZSBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgU0hBMyBpbmZvICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgaW50IGhhc2hiaXRsZW47CisgICAgU0hBM19zdGF0ZSBoYXNoX3N0YXRlOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2s7CisjZW5kaWYKKworfSBTSEEzb2JqZWN0OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFNIQTN0eXBlOworCisKK3N0YXRpYyBTSEEzb2JqZWN0ICoKK25ld1NIQTNvYmplY3QoaW50IGhhc2hiaXRsZW4pCit7CisgICAgU0hBM29iamVjdCAqbmV3b2JqOworCisgICAgLyogY2hlY2sgaGFzaGJpdGxlbiAqLworICAgIHN3aXRjaChoYXNoYml0bGVuKSB7CisgICAgICAgIC8qIHN1cHBvcnRlZCBoYXNoIGxlbmd0aCAqLworICAgICAgICBjYXNlIDIyNDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI1NjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM4NDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDUxMjoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAvKiAgYXJiaXRyYXJpbHktbG9uZyBvdXRwdXQgaXNuJ3Qgc3VwcG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvKiBldmVyeXRoaW5nIGVsc2UgaXMgYW4gZXJyb3IgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiaGFzaGJpdGxlbiBtdXN0IGJlIG9uZSBvZiAyMjQsIDI1NiwgMzg0IG9yIDUxMi4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZXdvYmogPSAoU0hBM29iamVjdCAqKVB5T2JqZWN0X05ldyhTSEEzb2JqZWN0LCAmU0hBM3R5cGUpOworICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3b2JqLT5oYXNoYml0bGVuID0gaGFzaGJpdGxlbjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIG5ld29iai0+bG9jayA9IE5VTEw7CisjZW5kaWYKKyAgICByZXR1cm4gbmV3b2JqOworfQorCisKKy8qIEludGVybmFsIG1ldGhvZHMgZm9yIGEgaGFzaCBvYmplY3QgKi8KKworc3RhdGljIHZvaWQKK1NIQTNfZGVhbGxvYyhTSEEzb2JqZWN0ICpzZWxmKQoreworICAgIFNIQTNfY2xlYXJzdGF0ZShzZWxmLT5oYXNoX3N0YXRlKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGlmIChzZWxmLT5sb2NrKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5sb2NrKTsKKyAgICB9CisjZW5kaWYKKyAgICBQeU9iamVjdF9EZWwoc2VsZik7Cit9CisKKworLyogRXh0ZXJuYWwgbWV0aG9kcyBmb3IgYSBoYXNoIG9iamVjdCAqLworCitQeURvY19TVFJWQVIoU0hBM19jb3B5X19kb2NfXywgIlJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19jb3B5KFNIQTNvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CisgICAgU0hBM29iamVjdCAqbmV3b2JqOworCisgICAgaWYgKChuZXdvYmogPSBuZXdTSEEzb2JqZWN0KHNlbGYtPmhhc2hiaXRsZW4pKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBFTlRFUl9IQVNITElCKHNlbGYpOworICAgIFNIQTNfY29weXN0YXRlKG5ld29iai0+aGFzaF9zdGF0ZSwgc2VsZi0+aGFzaF9zdGF0ZSk7CisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOworfQorCisKK1B5RG9jX1NUUlZBUihTSEEzX2RpZ2VzdF9fZG9jX18sCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgYmluYXJ5IGRhdGEuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2RpZ2VzdChTSEEzb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIHVuc2lnbmVkIGNoYXIgZGlnZXN0W1NIQTNfTUFYX0RJR0VTVFNJWkVdOworICAgIFNIQTNfc3RhdGUgdGVtcDsKKyAgICBIYXNoUmV0dXJuIHJlczsKKworICAgIEVOVEVSX0hBU0hMSUIoc2VsZik7CisgICAgU0hBM19jb3B5c3RhdGUodGVtcCwgc2VsZi0+aGFzaF9zdGF0ZSk7CisgICAgTEVBVkVfSEFTSExJQihzZWxmKTsKKyAgICByZXMgPSBTSEEzX2RvbmUoJnRlbXAsIGRpZ2VzdCk7CisgICAgU0hBM19jbGVhcnN0YXRlKHRlbXApOworICAgIGlmIChyZXMgIT0gU1VDQ0VTUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiaW50ZXJuYWwgZXJyb3IgaW4gU0hBMyBGaW5hbCgpIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKWRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+aGFzaGJpdGxlbiAvIDgpOworfQorCisKK1B5RG9jX1NUUlZBUihTSEEzX2hleGRpZ2VzdF9fZG9jX18sCisiUmV0dXJuIHRoZSBkaWdlc3QgdmFsdWUgYXMgYSBzdHJpbmcgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19oZXhkaWdlc3QoU0hBM29iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFtTSEEzX01BWF9ESUdFU1RTSVpFXTsKKyAgICBTSEEzX3N0YXRlIHRlbXA7CisgICAgSGFzaFJldHVybiByZXM7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKyAgICBQeV9VQ1MxICpoZXhfZGlnZXN0OworICAgIGludCBkaWdlc3RsZW4sIGksIGo7CisKKyAgICAvKiBHZXQgdGhlIHJhdyAoYmluYXJ5KSBkaWdlc3QgdmFsdWUgKi8KKyAgICBFTlRFUl9IQVNITElCKHNlbGYpOworICAgIFNIQTNfY29weXN0YXRlKHRlbXAsIHNlbGYtPmhhc2hfc3RhdGUpOworICAgIExFQVZFX0hBU0hMSUIoc2VsZik7CisgICAgcmVzID0gU0hBM19kb25lKCZ0ZW1wLCBkaWdlc3QpOworICAgIFNIQTNfY2xlYXJzdGF0ZSh0ZW1wKTsKKyAgICBpZiAocmVzICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImludGVybmFsIGVycm9yIGluIFNIQTMgRmluYWwoKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgYSBuZXcgc3RyaW5nICovCisgICAgZGlnZXN0bGVuID0gc2VsZi0+aGFzaGJpdGxlbiAvIDg7CisgICAgcmV0dmFsID0gUHlVbmljb2RlX05ldyhkaWdlc3RsZW4gKiAyLCAxMjcpOworICAgIGlmICghcmV0dmFsKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaGV4X2RpZ2VzdCA9IFB5VW5pY29kZV8xQllURV9EQVRBKHJldHZhbCk7CisKKyAgICAvKiBNYWtlIGhleCB2ZXJzaW9uIG9mIHRoZSBkaWdlc3QgKi8KKyAgICBmb3IoaT1qPTA7IGkgPCBkaWdlc3RsZW47IGkrKykgeworICAgICAgICB1bnNpZ25lZCBjaGFyIGM7CisgICAgICAgIGMgPSAoZGlnZXN0W2ldID4+IDQpICYgMHhmOworICAgICAgICBoZXhfZGlnZXN0W2orK10gPSBQeV9oZXhkaWdpdHNbY107CisgICAgICAgIGMgPSAoZGlnZXN0W2ldICYgMHhmKTsKKyAgICAgICAgaGV4X2RpZ2VzdFtqKytdID0gUHlfaGV4ZGlnaXRzW2NdOworICAgIH0KKyNpZmRlZiBQeV9ERUJVRworICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmV0dmFsLCAxKSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitQeURvY19TVFJWQVIoU0hBM191cGRhdGVfX2RvY19fLAorIlVwZGF0ZSB0aGlzIGhhc2ggb2JqZWN0J3Mgc3RhdGUgd2l0aCB0aGUgcHJvdmlkZWQgc3RyaW5nLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM191cGRhdGUoU0hBM29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9idWZmZXIgYnVmOworICAgIEhhc2hSZXR1cm4gcmVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOnVwZGF0ZSIsICZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEdFVF9CVUZGRVJfVklFV19PUl9FUlJPVVQob2JqLCAmYnVmKTsKKworICAgIC8qIGFkZCBuZXcgZGF0YSwgdGhlIGZ1bmN0aW9uIHRha2VzIHRoZSBsZW5ndGggaW4gYml0cyBub3QgYnl0ZXMgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwgJiYgYnVmLmxlbiA+PSBIQVNITElCX0dJTF9NSU5TSVpFKSB7CisgICAgICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgfQorICAgIC8qIE9uY2UgYSBsb2NrIGV4aXN0cyBhbGwgY29kZSBwYXRocyBtdXN0IGJlIHN5bmNocm9uaXplZC4gV2UgaGF2ZSB0bworICAgICAqIHJlbGVhc2UgdGhlIEdJTCBldmVuIGZvciBzbWFsbCBidWZmZXJzIGFzIGFjcXVpcmluZyB0aGUgbG9jayBtYXkgdGFrZQorICAgICAqIGFuIHVubGltaXRlZCBhbW91bnQgb2YgdGltZSB3aGVuIGFub3RoZXIgdGhyZWFkIHVwZGF0ZXMgdGhpcyBvYmplY3QKKyAgICAgKiB3aXRoIGxvdHMgb2YgZGF0YS4gKi8KKyAgICBpZiAoc2VsZi0+bG9jaykgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrLCAxKTsKKyAgICAgICAgcmVzID0gU0hBM19wcm9jZXNzKCZzZWxmLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5sb2NrKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlcyA9IFNIQTNfcHJvY2Vzcygmc2VsZi0+aGFzaF9zdGF0ZSwgYnVmLmJ1ZiwgYnVmLmxlbiAqIDgpOworICAgIH0KKyNlbHNlCisgICAgcmVzID0gU0hBM19wcm9jZXNzKCZzZWxmLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisjZW5kaWYKKyAgICBMRUFWRV9IQVNITElCKHNlbGYpOworCisgICAgaWYgKHJlcyAhPSBTVUNDRVNTKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3IgaW4gU0hBMyBVcGRhdGUoKSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIFNIQTNfbWV0aG9kc1tdID0geworICAgIHsiY29weSIsICAgICAgKFB5Q0Z1bmN0aW9uKVNIQTNfY29weSwgICAgICBNRVRIX05PQVJHUywKKyAgICAgICAgIFNIQTNfY29weV9fZG9jX199LAorICAgIHsiZGlnZXN0IiwgICAgKFB5Q0Z1bmN0aW9uKVNIQTNfZGlnZXN0LCAgICBNRVRIX05PQVJHUywKKyAgICAgICAgIFNIQTNfZGlnZXN0X19kb2NfX30sCisgICAgeyJoZXhkaWdlc3QiLCAoUHlDRnVuY3Rpb24pU0hBM19oZXhkaWdlc3QsIE1FVEhfTk9BUkdTLAorICAgICAgICAgU0hBM19oZXhkaWdlc3RfX2RvY19ffSwKKyAgICB7InVwZGF0ZSIsICAgIChQeUNGdW5jdGlvbilTSEEzX3VwZGF0ZSwgICAgTUVUSF9WQVJBUkdTLAorICAgICAgICAgU0hBM191cGRhdGVfX2RvY19ffSwKKyAgICB7TlVMTCwgICAgICAgIE5VTEx9ICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitTSEEzX2dldF9ibG9ja19zaXplKFNIQTNvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgLyogSE1BQy1TSEEzIGhhc24ndCBiZWVuIHNwZWNpZmllZCB5ZXQgYW5kIG5vIG9mZmljaWFsIHRlc3QgdmVjdG9ycyBhcmUKKyAgICAgKiBhdmFpbGFibGUuIFRodXMgYmxvY2tfc2l6ZSByZXR1cm5zIE5vdEltcGxlbWVudGVkIHRvIHByZXZlbnQgcGVvcGxlCisgICAgICogZnJvbSB1c2luZyBTSEEzIHdpdGggdGhlIGhtYWMgbW9kdWxlLgorICAgICAqLworICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfZ2V0X25hbWUoU0hBM29iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInNoYTNfJWkiLCBzZWxmLT5oYXNoYml0bGVuKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1NIQTNfZ2V0X2RpZ2VzdF9zaXplKFNIQTNvYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5oYXNoYml0bGVuIC8gOCk7Cit9CisKKworc3RhdGljIFB5R2V0U2V0RGVmIFNIQTNfZ2V0c2V0ZXJzW10gPSB7CisgICAgeyJibG9ja19zaXplIiwgKGdldHRlcilTSEEzX2dldF9ibG9ja19zaXplLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgICB7Im5hbWUiLCAoZ2V0dGVyKVNIQTNfZ2V0X25hbWUsIE5VTEwsIE5VTEwsIE5VTEx9LAorICAgIHsiZGlnZXN0X3NpemUiLCAoZ2V0dGVyKVNIQTNfZ2V0X2RpZ2VzdF9zaXplLCBOVUxMLCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0gIC8qIFNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFNIQTN0eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfc2hhMy5TSEEzIiwgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihTSEEzb2JqZWN0KSwgLyogdHBfc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAvKiAgbWV0aG9kcyAgKi8KKyAgICAoZGVzdHJ1Y3RvcilTSEEzX2RlYWxsb2MsIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgU0hBM19tZXRob2RzLCAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgU0hBM19nZXRzZXRlcnMsICAgICAvKiB0cF9nZXRzZXQgKi8KK307CisKKworLyogY29uc3RydWN0b3IgaGVscGVyICovCitzdGF0aWMgUHlPYmplY3QgKgorU0hBM19mYWN0b3J5KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0LCBjb25zdCBjaGFyICpmbXQsCisgICAgICAgICAgICAgaW50IGhhc2hiaXRsZW4pCit7CisgICAgU0hBM29iamVjdCAqbmV3b2JqID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InN0cmluZyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpkYXRhX29iaiA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICBIYXNoUmV0dXJuIHJlczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgZm10LCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfb2JqKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoZGF0YV9vYmopCisgICAgICAgIEdFVF9CVUZGRVJfVklFV19PUl9FUlJPVVQoZGF0YV9vYmosICZidWYpOworCisgICAgaWYgKChuZXdvYmogPSBuZXdTSEEzb2JqZWN0KGhhc2hiaXRsZW4pKSA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKFNIQTNfaW5pdCgmbmV3b2JqLT5oYXNoX3N0YXRlLCBoYXNoYml0bGVuKSAhPSBTVUNDRVNTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3IgaW4gU0hBMyBVcGRhdGUoKSIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChkYXRhX29iaikgeworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgICAgIGlmIChidWYubGVuID49IEhBU0hMSUJfR0lMX01JTlNJWkUpIHsKKyAgICAgICAgICAgIC8qIGludmFyaWFudDogTmV3IG9iamVjdHMgY2FuJ3QgYmUgYWNjZXNzZWQgYnkgb3RoZXIgY29kZSB5ZXQsCisgICAgICAgICAgICAgKiB0aHVzIGl0J3Mgc2FmZSB0byByZWxlYXNlIHRoZSBHSUwgd2l0aG91dCBsb2NraW5nIHRoZSBvYmplY3QuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIHJlcyA9IFNIQTNfcHJvY2VzcygmbmV3b2JqLT5oYXNoX3N0YXRlLCBidWYuYnVmLCBidWYubGVuICogOCk7CisgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzID0gU0hBM19wcm9jZXNzKCZuZXdvYmotPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4gKiA4KTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgcmVzID0gU0hBM19wcm9jZXNzKCZuZXdvYmotPmhhc2hfc3RhdGUsIGJ1Zi5idWYsIGJ1Zi5sZW4gKiA4KTsKKyNlbmRpZgorICAgICAgICBpZiAocmVzICE9IFNVQ0NFU1MpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yIGluIFNIQTMgVXBkYXRlKCkiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICB9CisKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3b2JqOworCisgIGVycm9yOgorICAgIGlmIChuZXdvYmopIHsKKyAgICAgICAgU0hBM19kZWFsbG9jKG5ld29iaik7CisgICAgfQorICAgIGlmIChkYXRhX29iaikgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKKworfQorCitQeURvY19TVFJWQVIoc2hhM18yMjRfX2RvY19fLAorInNoYTNfMjI0KFtzdHJpbmddKSAtPiBTSEEzIG9iamVjdFxuXAorXG5cCitSZXR1cm4gYSBuZXcgU0hBMyBoYXNoIG9iamVjdCB3aXRoIGEgaGFzaGJpdCBsZW5ndGggb2YgMjggYnl0ZXMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaGEzXzIyNChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgcmV0dXJuIFNIQTNfZmFjdG9yeShhcmdzLCBrd2RpY3QsICJ8TzpzaGEzXzIyNCIsIDIyNCk7Cit9CisKKworUHlEb2NfU1RSVkFSKHNoYTNfMjU2X19kb2NfXywKKyJzaGEzXzI1Nihbc3RyaW5nXSkgLT4gU0hBMyBvYmplY3RcblwKK1xuXAorUmV0dXJuIGEgbmV3IFNIQTMgaGFzaCBvYmplY3Qgd2l0aCBhIGhhc2hiaXQgbGVuZ3RoIG9mIDMyIGJ5dGVzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2hhM18yNTYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkaWN0KQoreworICAgIHJldHVybiBTSEEzX2ZhY3RvcnkoYXJncywga3dkaWN0LCAifE86c2hhM18yNTYiLCAyNTYpOworfQorCitQeURvY19TVFJWQVIoc2hhM18zODRfX2RvY19fLAorInNoYTNfMzg0KFtzdHJpbmddKSAtPiBTSEEzIG9iamVjdFxuXAorXG5cCitSZXR1cm4gYSBuZXcgU0hBMyBoYXNoIG9iamVjdCB3aXRoIGEgaGFzaGJpdCBsZW5ndGggb2YgNDggYnl0ZXMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzaGEzXzM4NChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgcmV0dXJuIFNIQTNfZmFjdG9yeShhcmdzLCBrd2RpY3QsICJ8TzpzaGEzXzM4NCIsIDM4NCk7Cit9CisKK1B5RG9jX1NUUlZBUihzaGEzXzUxMl9fZG9jX18sCisic2hhM181MTIoW3N0cmluZ10pIC0+IFNIQTMgb2JqZWN0XG5cCitcblwKK1JldHVybiBhIG5ldyBTSEEzIGhhc2ggb2JqZWN0IHdpdGggYSBoYXNoYml0IGxlbmd0aCBvZiA2NCBieXRlcy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3NoYTNfNTEyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZGljdCkKK3sKKyAgICByZXR1cm4gU0hBM19mYWN0b3J5KGFyZ3MsIGt3ZGljdCwgInxPOnNoYTNfNTEyIiwgNTEyKTsKK30KKworCisvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZSAqLworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBTSEEzX2Z1bmN0aW9uc1tdID0geworICAgIHsic2hhM18yMjQiLCAoUHlDRnVuY3Rpb24pc2hhM18yMjQsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICAgc2hhM18yMjRfX2RvY19ffSwKKyAgICB7InNoYTNfMjU2IiwgKFB5Q0Z1bmN0aW9uKXNoYTNfMjU2LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgICAgIHNoYTNfMjU2X19kb2NfX30sCisgICAgeyJzaGEzXzM4NCIsIChQeUNGdW5jdGlvbilzaGEzXzM4NCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgICBzaGEzXzM4NF9fZG9jX199LAorICAgIHsic2hhM181MTIiLCAoUHlDRnVuY3Rpb24pc2hhM181MTIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICAgc2hhM181MTJfX2RvY19ffSwKKyAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCit9OworCisKKy8qIEluaXRpYWxpemUgdGhpcyBtb2R1bGUuICovCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9TSEEzbW9kdWxlID0geworICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgICAgICJfc2hhMyIsCisgICAgICAgIE5VTEwsCisgICAgICAgIC0xLAorICAgICAgICBTSEEzX2Z1bmN0aW9ucywKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fc2hhMyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworCisgICAgUHlfVFlQRSgmU0hBM3R5cGUpID0gJlB5VHlwZV9UeXBlOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTN0eXBlKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX1NIQTNtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEEzdHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEzVHlwZSIsIChQeU9iamVjdCAqKSZTSEEzdHlwZSk7CisgICAgcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCmluZGV4IDM2OTMzNjMuLjM2ODlhNGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwppbmRleCA0NTFlYTI0Li41MGM2ZjBhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKIApAQCAtNDIsNiArNDEsOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKKwogc3RhdGljIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9pc29sYXRpb25fbGV2ZWwocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbCk7CiBzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZik7CiAKQEAgLTYwLDcgKzYxLDExIEBACiAKIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX2luaXQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLCAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsIE5VTEwsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsKKyAgICAgICAgImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsCisgICAgICAgICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgInVyaSIsCisgICAgICAgIE5VTEwKKyAgICB9OwogCiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CkBAIC02OCwxMSArNzMsMTQgQEAKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHMgPSAxMDA7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAgICAgaW50IHJjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTEsOCArOTksMTkgQEAKICAgICBQeV9JTkNSRUYoJlB5VW5pY29kZV9UeXBlKTsKICAgICBzZWxmLT50ZXh0X2ZhY3RvcnkgPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZTsKIAorI2lmZGVmIFNRTElURV9PUEVOX1VSSQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IHNxbGl0ZTNfb3Blbl92MihkYXRhYmFzZSwgJnNlbGYtPmRiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSA/IFNRTElURV9PUEVOX1VSSSA6IDApLCBOVUxMKTsKKyNlbHNlCisgICAgaWYgKHVyaSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfTm90U3VwcG9ydGVkRXJyb3IsICJVUklzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmMgPSBzcWxpdGUzX29wZW4oZGF0YWJhc2UsICZzZWxmLT5kYik7CisjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewpAQCAtNTAzLDEwICs1MjIsMTYgQEAKICAgICAgICAgY29uc3QgY2hhciogYnVmZmVyOwogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihweV92YWwsICZidWZmZXIsICZidWZsZW4pICE9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOworICAgICAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHNxbGl0ZTNfcmVzdWx0X2Jsb2IoY29udGV4dCwgYnVmZmVyLCAoaW50KWJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTY3OSw2ICs3MDQsOCBAQAogICAgIFB5T2JqZWN0KiogYWdncmVnYXRlX2luc3RhbmNlOwogICAgIF9QeV9JREVOVElGSUVSKGZpbmFsaXplKTsKICAgICBpbnQgb2s7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnZhbHVlLCAqdGI7CisgICAgaW50IHJlc3RvcmU7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIFB5R0lMU3RhdGVfU1RBVEUgdGhyZWFkc3RhdGU7CkBAIC02OTQsNyArNzIxLDEyIEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgLyogS2VlcCB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpICovCisgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworICAgIHJlc3RvcmUgPSAxOworCiAgICAgZnVuY3Rpb25fcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgqYWdncmVnYXRlX2luc3RhbmNlLCAmUHlJZF9maW5hbGl6ZSwgIiIpOworCiAgICAgUHlfREVDUkVGKCphZ2dyZWdhdGVfaW5zdGFuY2UpOwogCiAgICAgb2sgPSAwOwpAQCAtNzA5LDYgKzc0MSwxNyBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgfQogICAgICAgICBfc3FsaXRlM19yZXN1bHRfZXJyb3IoY29udGV4dCwgInVzZXItZGVmaW5lZCBhZ2dyZWdhdGUncyAnZmluYWxpemUnIG1ldGhvZCByYWlzZWQgZXJyb3IiLCAtMSk7CisjaWYgU1FMSVRFX1ZFUlNJT05fTlVNQkVSIDwgMzAwMzAwMworICAgICAgICAvKiB3aXRoIG9sZCBTUUxpdGUgdmVyc2lvbnMsIF9zcWxpdGUzX3Jlc3VsdF9lcnJvcigpIHNldHMgYSBuZXcgUHl0aG9uCisgICAgICAgICAgIGV4Y2VwdGlvbiwgc28gZG9uJ3QgcmVzdG9yZSB0aGUgcHJldmlvdXMgZXhjZXB0aW9uICovCisgICAgICAgIHJlc3RvcmUgPSAwOworI2VuZGlmCisgICAgfQorCisgICAgaWYgKHJlc3RvcmUpIHsKKyAgICAgICAgLyogUmVzdG9yZSB0aGUgZXhjZXB0aW9uIChpZiBhbnkpIG9mIHRoZSBsYXN0IGNhbGwgdG8gc3RlcCgpLAorICAgICAgICAgICBidXQgY2xlYXIgYWxzbyB0aGUgY3VycmVudCBleGNlcHRpb24gaWYgZmluYWxpemUoKSBmYWlsZWQgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiAgICAgfQogCiBlcnJvcjoKQEAgLTg1OSwyMiArOTAyLDI5IEBACiAKICAgICBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKKwogICAgIHJldCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKXVzZXJfYXJnLCAiaXNzc3MiLCBhY3Rpb24sIGFyZzEsIGFyZzIsIGRibmFtZSwgYWNjZXNzX2F0dGVtcHRfc291cmNlKTsKIAotICAgIGlmICghcmV0KSB7Ci0gICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpIHsKKyAgICBpZiAocmV0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKF9lbmFibGVfY2FsbGJhY2tfdHJhY2ViYWNrcykKICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KIAogICAgICAgICByYyA9IFNRTElURV9ERU5ZOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHJldCkpIHsKICAgICAgICAgICAgIHJjID0gX1B5TG9uZ19Bc0ludChyZXQpOwotICAgICAgICAgICAgaWYgKHJjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBpZiAocmMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIHJjID0gU1FMSVRFX0RFTlk7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByYyA9IFNRTElURV9ERU5ZOwogICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihyZXQpOwpAQCAtMTE4Nyw5ICsxMjM3LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmc3FsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHNlbGYpOwogCkBAIC0xMjA1LDcgKzEyNTQsNiBAQAogICAgIHN0YXRlbWVudC0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgcmMgPSBweXNxbGl0ZV9zdGF0ZW1lbnRfY3JlYXRlKHN0YXRlbWVudCwgc2VsZiwgc3FsKTsKLQogICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgaWYgKHJjID09IFBZU1FMSVRFX1RPT19NVUNIX1NRTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1dhcm5pbmcsICJZb3UgY2FuIG9ubHkgZXhlY3V0ZSBvbmUgc3RhdGVtZW50IGF0IGEgdGltZS4iKTsKQEAgLTEyMTUsMjUgKzEyNjMsMjMgQEAKICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzdGF0ZW1lbnQpOwogICAgICAgICAgICAgX3B5c3FsaXRlX3NldGVycm9yKHNlbGYtPmRiLCBOVUxMKTsKICAgICAgICAgfQotCi0gICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOwotICAgICAgICBpZiAoIXdlYWtyZWYpIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHN0YXRlbWVudCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgewotICAgICAgICAgICAgUHlfQ0xFQVIod2Vha3JlZik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0KLSAgICAgICAgUHlfREVDUkVGKHdlYWtyZWYpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotZXJyb3I6CisgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KilzdGF0ZW1lbnQsIE5VTEwpOworICAgIGlmICh3ZWFrcmVmID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+c3RhdGVtZW50cywgd2Vha3JlZikgIT0gMCkgeworICAgICAgICBQeV9ERUNSRUYod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKwogICAgIHJldHVybiAoUHlPYmplY3QqKXN0YXRlbWVudDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKHN0YXRlbWVudCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGUocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCkBAIC0xMjQxLDcgKzEyODcsNiBAQAogICAgIFB5T2JqZWN0KiBjdXJzb3IgPSAwOwogICAgIFB5T2JqZWN0KiByZXN1bHQgPSAwOwogICAgIFB5T2JqZWN0KiBtZXRob2QgPSAwOwotICAgIF9QeV9JREVOVElGSUVSKGN1cnNvcik7CiAKICAgICBjdXJzb3IgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCopc2VsZiwgJlB5SWRfY3Vyc29yLCAiIik7CiAgICAgaWYgKCFjdXJzb3IpIHsKQEAgLTEyNzEsNyArMTMxNiw2IEBACiAgICAgUHlPYmplY3QqIGN1cnNvciA9IDA7CiAgICAgUHlPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgUHlPYmplY3QqIG1ldGhvZCA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKIAogICAgIGN1cnNvciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KilzZWxmLCAmUHlJZF9jdXJzb3IsICIiKTsKICAgICBpZiAoIWN1cnNvcikgewpAQCAtMTMwMSw3ICsxMzQ1LDYgQEAKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggNDk5OTQxNS4uOGQxMDg5MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImN1cnNvci5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9pdGVybmV4dChweXNxbGl0ZV9DdXJzb3IqIHNlbGYpOwogCkBAIC0zMzksNiArMzM4LDExIEBACiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSA9PSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUodmFsX3N0ciwgbmJ5dGVzKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpIHsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgLyogaW4gZGVidWcgbW9kZSwgdHlwZV9jYWxsKCkgZmFpbHMgd2l0aCBhbiBhc3NlcnRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG5hbWUgPSBzcWxpdGUzX2NvbHVtbl9uYW1lKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2xuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9ICI8dW5rbm93biBjb2x1bW4gbmFtZT4iOwpAQCAtODY3LDEwICs4NzEsMTUgQEAKICAgICB9CiAKICAgICBuZXh0X3Jvd190dXBsZSA9IHNlbGYtPm5leHRfcm93OworICAgIGFzc2VydChuZXh0X3Jvd190dXBsZSAhPSBOVUxMKTsKICAgICBzZWxmLT5uZXh0X3JvdyA9IE5VTEw7CiAKICAgICBpZiAoc2VsZi0+cm93X2ZhY3RvcnkgIT0gUHlfTm9uZSkgewogICAgICAgICBuZXh0X3JvdyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yb3dfZmFjdG9yeSwgIk9PIiwgc2VsZiwgbmV4dF9yb3dfdHVwbGUpOworICAgICAgICBpZiAobmV4dF9yb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvd190dXBsZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKQEAgLTg4Nyw2ICs4OTYsMTIgQEAKIAogICAgICAgICBpZiAocmMgPT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBfcHlzcWxpdGVfZmV0Y2hfb25lX3JvdyhzZWxmKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5uZXh0X3JvdyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5leHRfcm93KTsKKyAgICAgICAgICAgICAgICBfcHlzcWxpdGVfc2V0ZXJyb3Ioc2VsZi0+Y29ubmVjdGlvbi0+ZGIsIE5VTEwpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKaW5kZXggYmVhNmQ2YS4uN2E3ZTg2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwpAQCAtNTAsMTkgKzUwLDI2IEBACiAgICAgICogQy1sZXZlbCwgc28gdGhpcyBjb2RlIGlzIHJlZHVuZGFudCB3aXRoIHRoZSBvbmUgaW4gY29ubmVjdGlvbl9pbml0IGluCiAgICAgICogY29ubmVjdGlvbi5jIGFuZCBtdXN0IGFsd2F5cyBiZSBjb3BpZWQgZnJvbSB0aGVyZSAuLi4gKi8KIAotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZGF0YWJhc2UiLCAidGltZW91dCIsICJkZXRlY3RfdHlwZXMiLCAiaXNvbGF0aW9uX2xldmVsIiwgImNoZWNrX3NhbWVfdGhyZWFkIiwgImZhY3RvcnkiLCAiY2FjaGVkX3N0YXRlbWVudHMiLCBOVUxMLCBOVUxMfTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7CisgICAgICAgICJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLAorICAgICAgICAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsICJ1cmkiLAorICAgICAgICBOVUxMCisgICAgfTsKICAgICBjaGFyKiBkYXRhYmFzZTsKICAgICBpbnQgZGV0ZWN0X3R5cGVzID0gMDsKICAgICBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsOwogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQgPSAxOwogICAgIGludCBjYWNoZWRfc3RhdGVtZW50czsKKyAgICBpbnQgdXJpID0gMDsKICAgICBkb3VibGUgdGltZW91dCA9IDUuMDsKIAogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaSIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLCAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pcCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YWJhc2UsICZ0aW1lb3V0LCAmZGV0ZWN0X3R5cGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzLCAmdXJpKSkKICAgICB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc3LDcgKzg0LDggQEAKIH0KIAogUHlEb2NfU1RSVkFSKG1vZHVsZV9jb25uZWN0X2RvYywKLSJjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgaXNvbGF0aW9uX2xldmVsLCBkZXRlY3RfdHlwZXMsIGZhY3RvcnldKVxuXAorImNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCxcblwKKyAgICAgICAgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKVxuXAogXG5cCiBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlXG5cCiBcIjptZW1vcnk6XCIgdG8gb3BlbiBhIGRhdGFiYXNlIGNvbm5lY3Rpb24gdG8gYSBkYXRhYmFzZSB0aGF0IHJlc2lkZXMgaW5cblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCmluZGV4IGZjNjg4NzQuLmYyYzg1ZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwpAQCAtMjEsNyArMjEsNiBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogCiBpbnQgcHlzcWxpdGVfcHJlcGFyZV9wcm90b2NvbF9pbml0KHB5c3FsaXRlX1ByZXBhcmVQcm90b2NvbCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggYjUwNjU4Yy4uNGE4N2EwNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMjMsNyArMjMsNiBAQAogCiAjaW5jbHVkZSAicm93LmgiCiAjaW5jbHVkZSAiY3Vyc29yLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIHZvaWQgcHlzcWxpdGVfcm93X2RlYWxsb2MocHlzcWxpdGVfUm93KiBzZWxmKQogewpAQCAtNjgsNyArNjcsNyBAQAogewogICAgIGxvbmcgX2lkeDsKICAgICBjaGFyKiBrZXk7Ci0gICAgaW50IG5pdGVtcywgaTsKKyAgICBQeV9zc2l6ZV90IG5pdGVtcywgaTsKICAgICBjaGFyKiBjb21wYXJlX2tleTsKIAogICAgIGNoYXIqIHAxOwpAQCAtODksNyArODgsMTAgQEAKICAgICAgICAgbml0ZW1zID0gUHlUdXBsZV9TaXplKHNlbGYtPmRlc2NyaXB0aW9uKTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspIHsKLSAgICAgICAgICAgIGNvbXBhcmVfa2V5ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhQeVR1cGxlX0dFVF9JVEVNKFB5VHVwbGVfR0VUX0lURU0oc2VsZi0+ZGVzY3JpcHRpb24sIGkpLCAwKSk7CisgICAgICAgICAgICBQeU9iamVjdCAqb2JqOworICAgICAgICAgICAgb2JqID0gUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5kZXNjcmlwdGlvbiwgaSk7CisgICAgICAgICAgICBvYmogPSBQeVR1cGxlX0dFVF9JVEVNKG9iaiwgMCk7CisgICAgICAgICAgICBjb21wYXJlX2tleSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcob2JqKTsKICAgICAgICAgICAgIGlmICghY29tcGFyZV9rZXkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KQEAgLTEyMSwxMCArMTIzLDEyIEBACiAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJObyBpdGVtIHdpdGggdGhhdCBrZXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGlkeCkpIHsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpZHgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAic2xpY2VzIG5vdCBpbXBsZW1lbnRlZCwgeWV0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZSB7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgIkluZGV4IG11c3QgYmUgaW50IG9yIHN0cmluZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmggYi9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMjBmMTYuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogc3FsaXRlY29tcGF0LmggLSBjb21wYXRpYmlsaXR5IG1hY3JvcwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKLSAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKLSAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCi0gKiBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0Ci0gKiBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0gKgotICogMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKLSAqICAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCi0gKiAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKLSAqICAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCi0gKiAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQotICogICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgotICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KLSAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLSNpZm5kZWYgUFlTUUxJVEVfQ09NUEFUX0gKLSNkZWZpbmUgUFlTUUxJVEVfQ09NUEFUX0gKLQotLyogZGVmaW5lIFB5X3NzaXplX3QgZm9yIHByZS0yLjUgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0KLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDAKLXR5cGVkZWYgaW50IFB5X3NzaXplX3Q7Ci10eXBlZGVmIGludCAoKmxlbmZ1bmMpKFB5T2JqZWN0Kik7Ci0jZW5kaWYKLQotCi0vKiBkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3QgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0jaWZuZGVmIFB5RGljdF9DaGVja0V4YWN0Ci0jZGVmaW5lIFB5RGljdF9DaGVja0V4YWN0KG9wKSAoKG9wKS0+b2JfdHlwZSA9PSAmUHlEaWN0X1R5cGUpCi0jZW5kaWYKLQotLyogZGVmaW5lIFB5X0NMRUFSIGZvciBwcmUtMi40IHZlcnNpb25zIG9mIFB5dGhvbiAqLwotI2lmbmRlZiBQeV9DTEVBUgotI2RlZmluZSBQeV9DTEVBUihvcCkJCQkJXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlcCi0gICAgICAgICAgICAgICAgaWYgKG9wKSB7CQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IChQeU9iamVjdCAqKShvcCk7CVwKLSAgICAgICAgICAgICAgICAgICAgICAgIChvcCkgPSBOVUxMOwkJXAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7CQlcCi0gICAgICAgICAgICAgICAgfQkJCQlcCi0gICAgICAgIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmbmRlZiBQeVZhck9iamVjdF9IRUFEX0lOSVQKLSNkZWZpbmUgUHlWYXJPYmplY3RfSEVBRF9JTklUKHR5cGUsIHNpemUpIFwKLSAgICBQeU9iamVjdF9IRUFEX0lOSVQodHlwZSkgc2l6ZSwKLSNlbmRpZgotCi0jaWZuZGVmIFB5X1RZUEUKLSNkZWZpbmUgUHlfVFlQRShvYikgKChvYiktPm9iX3R5cGUpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKaW5kZXggNDcxYTA2Ny4uNjZiNGE1MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIm1pY3JvcHJvdG9jb2xzLmgiCiAjaW5jbHVkZSAicHJlcGFyZV9wcm90b2NvbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogLyogcHJvdG90eXBlcyAqLwogc3RhdGljIGludCBweXNxbGl0ZV9jaGVja19yZW1haW5pbmdfc3FsKGNvbnN0IGNoYXIqIHRhaWwpOwpAQCAtMTMzLDE4ICsxMzIsMjYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5JQ09ERToKICAgICAgICAgICAgIHN0cmluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKHBhcmFtZXRlciwgJmJ1Zmxlbik7Ci0gICAgICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIGJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGlmIChzdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYnVmbGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF90ZXh0KHNlbGYtPnN0LCBwb3MsIHN0cmluZywgKGludClidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9CVUZGRVI6Ci0gICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHBhcmFtZXRlciwgJmJ1ZmZlciwgJmJ1ZmxlbikgPT0gMCkgewotICAgICAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIocGFyYW1ldGVyLCAmYnVmZmVyLCAmYnVmbGVuKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBCTE9CIHRvIGJ1ZmZlciIpOwotICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGJ1ZmxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX2Jsb2Ioc2VsZi0+c3QsIHBvcywgYnVmZmVyLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9VTktOT1dOOgogICAgICAgICAgICAgcmMgPSAtMTsKQEAgLTE3Nyw3ICsxODQsNyBAQAogICAgIGludCBpOwogICAgIGludCByYzsKICAgICBpbnQgbnVtX3BhcmFtc19uZWVkZWQ7Ci0gICAgaW50IG51bV9wYXJhbXM7CisgICAgUHlfc3NpemVfdCBudW1fcGFyYW1zOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIG51bV9wYXJhbXNfbmVlZGVkID0gc3FsaXRlM19iaW5kX3BhcmFtZXRlcl9jb3VudChzZWxmLT5zdCk7CkBAIC0xOTMsNyArMjAwLDkgQEAKICAgICAgICAgICAgIG51bV9wYXJhbXMgPSBQeVNlcXVlbmNlX1NpemUocGFyYW1ldGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG51bV9wYXJhbXMgIT0gbnVtX3BhcmFtc19uZWVkZWQpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiSW5jb3JyZWN0IG51bWJlciBvZiBiaW5kaW5ncyBzdXBwbGllZC4gVGhlIGN1cnJlbnQgc3RhdGVtZW50IHVzZXMgJWQsIGFuZCB0aGVyZSBhcmUgJWQgc3VwcGxpZWQuIiwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJpbmRpbmdzIHN1cHBsaWVkLiBUaGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRlbWVudCB1c2VzICVkLCBhbmQgdGhlcmUgYXJlICV6ZCBzdXBwbGllZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wYXJhbXNfbmVlZGVkLCBudW1fcGFyYW1zKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQ5LDcgKzI1OCw3IEBACiAgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIGJpbmRpbmdfbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfWElOQ1JFRihjdXJyZW50X3BhcmFtKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIChjaGFyKiliaW5kaW5nX25hbWUpOworICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCBiaW5kaW5nX25hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjdXJyZW50X3BhcmFtKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJZb3UgZGlkIG5vdCBzdXBwbHkgYSB2YWx1ZSBmb3IgYmluZGluZyAlZC4iLCBpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCmluZGV4IGQ4OGJjM2YuLjMxMmZlM2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgfQogIyBlbmRpZgogI2VuZGlmCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhQeV9TQUZFX0RPV05DQVNUKHZhbHVlLCBzcWxpdGVfaW50NjQsIGxvbmcpKTsKIH0KIAogc3FsaXRlX2ludDY0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcmUuYyBiL01vZHVsZXMvX3NyZS5jCmluZGV4IDFjNzZkMjQuLjU1YTg2YzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NyZS5jCisrKyBiL01vZHVsZXMvX3NyZS5jCkBAIC00LDI0ICs0LDI1IEBACiAgKiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lCiAgKgogICogcGFydGlhbCBoaXN0b3J5OgotICogMTk5OS0xMC0yNCBmbCAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQotICogMjAwMC0wMy0wNiBmbCAgZmlyc3QgYWxwaGEsIHNvcnQgb2YKLSAqIDIwMDAtMDgtMDEgZmwgIGZpeGVzIGZvciAxLjZiMQotICogMjAwMC0wOC0wNyBmbCAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQotICogMjAwMC0wOS0yMCBmbCAgYWRkZWQgZXhwYW5kIG1ldGhvZAotICogMjAwMS0wMy0yMCBmbCAgbG90cyBvZiBmaXhlcyBmb3IgMi4xYjIKLSAqIDIwMDEtMDQtMTUgZmwgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAotICogMjAwMS0wNC0yOCBmbCAgYWRkZWQgX19jb3B5X18gbWV0aG9kcyAod29yayBpbiBwcm9ncmVzcykKLSAqIDIwMDEtMDUtMTQgZmwgIGZpeGVzIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5Ci0gKiAyMDAxLTA3LTAxIGZsICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCi0gKiAyMDAxLTEwLTE4IGZsICBmaXhlZCBncm91cCByZXNldCBpc3N1ZSAoZnJvbSBNYXR0aGV3IE11ZWxsZXIpCi0gKiAyMDAxLTEwLTIwIGZsICBhZGRlZCBzcGxpdCBwcmltaXRpdmU7IHJlZW5hYmxlIHVuaWNvZGUgZm9yIDEuNi8yLjAvMi4xCi0gKiAyMDAxLTEwLTIxIGZsICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKLSAqIDIwMDEtMTAtMjQgZmwgIGFkZGVkIGZpbmRpdGVyIHByaW1pdGl2ZSAoZm9yIDIuMiBvbmx5KQotICogMjAwMS0xMi0wNyBmbCAgZml4ZWQgbWVtb3J5IGxlYWsgaW4gc3ViL3N1Ym4gKEd1aWRvIHZhbiBSb3NzdW0pCi0gKiAyMDAyLTExLTA5IGZsICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQotICogMjAwMy0wNC0xOCBtdmwgZnVsbHkgc3VwcG9ydCA0LWJ5dGUgY29kZXMKLSAqIDIwMDMtMTAtMTcgZ24gIGltcGxlbWVudGVkIG5vbiByZWN1cnNpdmUgc2NoZW1lCisgKiAxOTk5LTEwLTI0IGZsICAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQorICogMjAwMC0wMy0wNiBmbCAgIGZpcnN0IGFscGhhLCBzb3J0IG9mCisgKiAyMDAwLTA4LTAxIGZsICAgZml4ZXMgZm9yIDEuNmIxCisgKiAyMDAwLTA4LTA3IGZsICAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQorICogMjAwMC0wOS0yMCBmbCAgIGFkZGVkIGV4cGFuZCBtZXRob2QKKyAqIDIwMDEtMDMtMjAgZmwgICBsb3RzIG9mIGZpeGVzIGZvciAyLjFiMgorICogMjAwMS0wNC0xNSBmbCAgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAorICogMjAwMS0wNC0yOCBmbCAgIGFkZGVkIF9fY29weV9fIG1ldGhvZHMgKHdvcmsgaW4gcHJvZ3Jlc3MpCisgKiAyMDAxLTA1LTE0IGZsICAgZml4ZXMgZm9yIDEuNS4yIGNvbXBhdGliaWxpdHkKKyAqIDIwMDEtMDctMDEgZmwgICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCisgKiAyMDAxLTEwLTE4IGZsICAgZml4ZWQgZ3JvdXAgcmVzZXQgaXNzdWUgKGZyb20gTWF0dGhldyBNdWVsbGVyKQorICogMjAwMS0xMC0yMCBmbCAgIGFkZGVkIHNwbGl0IHByaW1pdGl2ZTsgcmVlbmFibGUgdW5pY29kZSBmb3IgMS42LzIuMC8yLjEKKyAqIDIwMDEtMTAtMjEgZmwgICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKKyAqIDIwMDEtMTAtMjQgZmwgICBhZGRlZCBmaW5kaXRlciBwcmltaXRpdmUgKGZvciAyLjIgb25seSkKKyAqIDIwMDEtMTItMDcgZmwgICBmaXhlZCBtZW1vcnkgbGVhayBpbiBzdWIvc3VibiAoR3VpZG8gdmFuIFJvc3N1bSkKKyAqIDIwMDItMTEtMDkgZmwgICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQorICogMjAwMy0wNC0xOCBtdmwgIGZ1bGx5IHN1cHBvcnQgNC1ieXRlIGNvZGVzCisgKiAyMDAzLTEwLTE3IGduICAgaW1wbGVtZW50ZWQgbm9uIHJlY3Vyc2l2ZSBzY2hlbWUKKyAqIDIwMTMtMDItMDQgbXJhYiBhZGRlZCBmdWxsbWF0Y2ggcHJpbWl0aXZlCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDEgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM0LDggKzM1LDYgQEAKICAqIG90aGVyIGNvbXBhdGliaWxpdHkgd29yay4KICAqLwogCi0jaWZuZGVmIFNSRV9SRUNVUlNJVkUKLQogc3RhdGljIGNoYXIgY29weXJpZ2h0W10gPQogICAgICIgU1JFIDIuMi4yIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIGJ5IFNlY3JldCBMYWJzIEFCICI7CiAKQEAgLTQ2LDYgKzQ1LDggQEAKIAogI2luY2x1ZGUgInNyZS5oIgogCisjZGVmaW5lIFNSRV9DT0RFX0JJVFMgKDggKiBzaXplb2YoU1JFX0NPREUpKQorCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogLyogbmFtZSBvZiB0aGlzIG1vZHVsZSwgbWludXMgdGhlIGxlYWRpbmcgdW5kZXJzY29yZSAqLwpAQCAtNTgsOSArNTksNiBAQAogLyogZGVmaW5pbmcgdGhpcyBvbmUgZW5hYmxlcyB0cmFjaW5nICovCiAjdW5kZWYgVkVSQk9TRQogCi0vKiBkZWZpbmluZyB0aGlzIGVuYWJsZXMgdW5pY29kZSBzdXBwb3J0IChkZWZhdWx0IHVuZGVyIDEuNmExIGFuZCBsYXRlcikgKi8KLSNkZWZpbmUgSEFWRV9VTklDT0RFCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvcHRpb25hbCBmZWF0dXJlcyAqLwogCkBAIC03MCwxMCArNjgsNiBAQAogLyogZW5hYmxlcyBjb3B5L2RlZXBjb3B5IGhhbmRsaW5nICh3b3JrIGluIHByb2dyZXNzKSAqLwogI3VuZGVmIFVTRV9CVUlMVElOX0NPUFkKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMTA2MDAwMAotI2RlZmluZSBQeU9iamVjdF9ERUwob3ApIFB5TWVtX0RFTCgob3ApKQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTUwLDkgKzE0NCw2IEBACiAvKiBsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKi8KIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwogICogd2FybmluZ3Mgd2hlbiBjJ3MgdHlwZSBzdXBwb3J0cyBvbmx5IG51bWJlcnMgPCBOKzEgKi8KLSNkZWZpbmUgU1JFX0xPQ19JU19ESUdJVChjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNkaWdpdCgoY2gpKSA6IDApCi0jZGVmaW5lIFNSRV9MT0NfSVNfU1BBQ0UoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzc3BhY2UoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX0xJTkVCUkVBSyhjaCkgKChjaCkgPT0gJ1xuJykKICNkZWZpbmUgU1JFX0xPQ19JU19BTE5VTShjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNhbG51bSgoY2gpKSA6IDApCiAjZGVmaW5lIFNSRV9MT0NfSVNfV09SRChjaCkgKFNSRV9MT0NfSVNfQUxOVU0oKGNoKSkgfHwgKGNoKSA9PSAnXycpCiAKQEAgLTI1NiwxMzgwICsyNDcsMzIgQEAKIAogLyogZ2VuZXJhdGUgOC1iaXQgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHVuc2lnbmVkIGNoYXIKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpICgodW5zaWduZWQgY2hhciopYnVmKVtpbmRleF0KLSNkZWZpbmUgU1JFX0FUIHNyZV9hdAotI2RlZmluZSBTUkVfQ09VTlQgc3JlX2NvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV9jaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV9pbmZvCi0jZGVmaW5lIFNSRV9NQVRDSCBzcmVfbWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX21hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfc2VhcmNoCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzEKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDEKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MxXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotI2RlZmluZSBTUkVfUkVDVVJTSVZFCi0jaW5jbHVkZSAiX3NyZS5jIgotI3VuZGVmIFNSRV9SRUNVUlNJVkUKKy8qIGdlbmVyYXRlIDE2LWJpdCB1bmljb2RlIHZlcnNpb24gKi8KIAotI3VuZGVmIFNSRV9TRUFSQ0gKLSN1bmRlZiBTUkVfTUFUQ0gKLSN1bmRlZiBTUkVfTUFUQ0hfQ09OVEVYVAotI3VuZGVmIFNSRV9JTkZPCi0jdW5kZWYgU1JFX0NIQVJTRVQKLSN1bmRlZiBTUkVfQ09VTlQKLSN1bmRlZiBTUkVfQVQKLSN1bmRlZiBTUkVfQ0hBUgotI3VuZGVmIFNSRV9DSEFSR0VUCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzIKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDIKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MyXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotLyogZ2VuZXJhdGUgOC8xNi8zMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCisvKiBnZW5lcmF0ZSAzMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSNkZWZpbmUgU1JFX0NIQVIgdm9pZAotI2RlZmluZSBTUkVfQ0hBUkdFVChzdGF0ZSwgYnVmLCBpbmRleCkgXAotICAgICgoc3RhdGUtPmNoYXJzaXplPT0xKSA/ICgoUHlfVUNTMSopYnVmKVtpbmRleF0gOiBcCi0gICAgIChzdGF0ZS0+Y2hhcnNpemU9PTIpID8gKChQeV9VQ1MyKilidWYpW2luZGV4XSA6IFwKLSAgICAgKChQeV9VQ1M0KilidWYpW2luZGV4XSkKLSNkZWZpbmUgU1JFX0FUIHNyZV91YXQKLSNkZWZpbmUgU1JFX0NPVU5UIHNyZV91Y291bnQKLSNkZWZpbmUgU1JFX0NIQVJTRVQgc3JlX3VjaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV91aW5mbwotI2RlZmluZSBTUkVfTUFUQ0ggc3JlX3VtYXRjaAotI2RlZmluZSBTUkVfTUFUQ0hfQ09OVEVYVCBzcmVfdW1hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfdXNlYXJjaAotCi0jZW5kaWYgLyogU1JFX1JFQ1VSU0lWRSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLwotCi0vKiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gaXMgY29tcGlsZWQgdHdpY2UsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlcgotICAgc2V0dGluZ3MgKi8KLQotTE9DQUwoaW50KQotU1JFX0FUKFNSRV9TVEFURSogc3RhdGUsIGNoYXIqIHB0ciwgU1JFX0NPREUgYXQpCi17Ci0gICAgLyogY2hlY2sgaWYgcG9pbnRlciBpcyBhdCBnaXZlbiBwb3NpdGlvbiAqLwotCi0gICAgUHlfc3NpemVfdCB0aGlzcCwgdGhhdHA7Ci0KLSAgICBzd2l0Y2ggKGF0KSB7Ci0KLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkc6Ci0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nKTsKLQotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19MSU5FOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcgfHwKLSAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EOgotICAgICAgICByZXR1cm4gKCgodm9pZCopIChwdHIrc3RhdGUtPmNoYXJzaXplKSA9PSBzdGF0ZS0+ZW5kICYmCi0gICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKSB8fAotICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7Ci0KLSAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8Ci0gICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKLQotICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTE9DX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX1VOSV9OT05fQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1MT0NBTChpbnQpCi1TUkVfQ0hBUlNFVChTUkVfQ09ERSogc2V0LCBTUkVfQ09ERSBjaCkKLXsKLSAgICAvKiBjaGVjayBpZiBjaGFyYWN0ZXIgaXMgYSBtZW1iZXIgb2YgdGhlIGdpdmVuIHNldCAqLwotCi0gICAgaW50IG9rID0gMTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3dpdGNoICgqc2V0KyspIHsKLQotICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgotICAgICAgICAgICAgcmV0dXJuICFvazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgaWYgKGNoID09IHNldFswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICBzZXQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgotICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIGlmIChzcmVfY2F0ZWdvcnkoc2V0WzBdLCAoaW50KSBjaCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgaWYgKHNpemVvZihTUkVfQ09ERSkgPT0gMikgewotICAgICAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAoMTYgYml0cyBwZXIgY29kZSB3b3JkKSAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJiAoc2V0W2NoID4+IDRdICYgKDEgPDwgKGNoICYgMTUpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKDMyIGJpdHMgcGVyIGNvZGUgd29yZCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYgKHNldFtjaCA+PiA1XSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSA4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6Ci0gICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLwotICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6Ci0gICAgICAgICAgICBvayA9ICFvazsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6Ci0gICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKLSAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7Ci0KLSAgICAgICAgICAgIGlmIChzaXplb2YoU1JFX0NPREUpID09IDIpIHsKLSAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTI4OwotICAgICAgICAgICAgICAgIGlmIChzZXRbYmxvY2sqMTYgKyAoKGNoICYgMjU1KT4+NCldICYgKDEgPDwgKGNoICYgMTUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCoxNjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwotICAgICAgICAgICAgICAgICAqIHdhcm5pbmdzIHdoZW4gYydzIHR5cGUgc3VwcG9ydHMgb25seSBudW1iZXJzIDwgTisxICovCi0gICAgICAgICAgICAgICAgaWYgKCEoY2ggJiB+NjU1MzUpKQotICAgICAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDY0OwotICAgICAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKLSAgICAgICAgICAgICAgICAgICAgKHNldFtibG9jayo4ICsgKChjaCAmIDI1NSk+PjUpXSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCo4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKLSAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1MT0NBTChQeV9zc2l6ZV90KSBTUkVfTUFUQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pOwotCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX0NPVU5UKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFNSRV9DT0RFIGNocjsKLSAgICBjaGFyKiBwdHIgPSAoY2hhciAqKXN0YXRlLT5wdHI7Ci0gICAgY2hhciogZW5kID0gKGNoYXIgKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qIGFkanVzdCBlbmQgKi8KLSAgICBpZiAobWF4Y291bnQgPCAoZW5kIC0gcHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQotICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudCpzdGF0ZS0+Y2hhcnNpemU7Ci0KLSAgICBzd2l0Y2ggKHBhdHRlcm5bMF0pIHsKLQotICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAvKiByZXBlYXRlZCBzZXQgKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgSU5cbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmCi0gICAgICAgICAgICAgICBTUkVfQ0hBUlNFVChwYXR0ZXJuICsgMiwgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9BTlk6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgIHN0cmluZywgYW5kIGJhY2t0cmFjayBmcm9tIHRoZXJlICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWV9BTExcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICBwdHIgPSBlbmQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybiAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBTVUJQQVRURVJOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKChjaGFyKikgc3RhdGUtPnB0ciA8IGVuZCkgewotICAgICAgICAgICAgaSA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAotICAgICAgICAgICAgICAgKChjaGFyKilzdGF0ZS0+cHRyIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUpKTsKLSAgICAgICAgcmV0dXJuICgoY2hhciopc3RhdGUtPnB0ciAtIHB0cikvc3RhdGUtPmNoYXJzaXplOwotICAgIH0KLQotICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKLSAgICAgICAgICAgKHB0ciAtIChjaGFyKikgc3RhdGUtPnB0cikvc3RhdGUtPmNoYXJzaXplKSk7Ci0gICAgcmV0dXJuIChwdHIgLSAoY2hhciopIHN0YXRlLT5wdHIpL3N0YXRlLT5jaGFyc2l6ZTsKLX0KLQotI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCi1MT0NBTChpbnQpCi1TUkVfSU5GTyhTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICAvKiBjaGVjayBpZiBhbiBTUkVfT1BfSU5GTyBibG9jayBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBTUkVfQ09ERSBvYmplY3RzIHRvIHNraXAgaWYgc3VjY2Vzc2Z1bCwgMAotICAgICAgIGlmIG5vIG1hdGNoICovCi0KLSAgICBjaGFyKiBlbmQgPSBzdGF0ZS0+ZW5kOwotICAgIGNoYXIqIHB0ciA9IHN0YXRlLT5wdHI7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KLSAgICBpZiAocGF0dGVyblszXSAmJiAoZW5kIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBwYXR0ZXJuWzNdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLwotICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7Ci0gICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCi0gICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCBpKSAhPSBwYXR0ZXJuWzcgKyBpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHBhdHRlcm5bMF0gKyAyICogcGF0dGVybls2XTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdHRlcm5bMF07Ci19Ci0jZW5kaWYKLQotLyogVGhlIG1hY3JvcyBiZWxvdyBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHJlY3Vyc2l2ZSBTUkVfTUFUQ0goKQotICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCi0gKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKLSAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KLSAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UgYnV0IHRoZSBjdXJyZW50IFNSRV9NQVRDSCgpCi0gKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkVfTUFUQ0goKSBpcyB0aGUKLSAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKLSAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgotICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFX01BVENIKCkKLSAqICAgZmFpbHVyZSBieSBpdHNlbGYsIGFuZCB0aGUgY2FsbGluZyBTUkVfTUFUQ0goKSB3aWxsIGhhdmUgdG8gZGVhbAotICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKLSAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQotICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0Ci0gKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGFnYWluCi0gKiAgIGluc2lkZSBhIGxvY2FsIGZvci93aGlsZSBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCBiZXR3ZWVuIGVhY2gKLSAqICAgbG9vcCBpdGVyYXRpb24sIHNpbmNlIHRoZSByZWN1cnNpdmUgU1JFX01BVENIKCkgY291bGQgZG8gYW55dGhpbmcsCi0gKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCi0gKi8KLSNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCi0gICAgZG8geyBcCi0gICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKLSAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCi0gICAgZG8geyBcCi0gICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKLSAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotCi0jZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCi0gICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAotICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCi0gICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNGWSh4KSAjeAotCi0jZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAotZG8geyBcCi0gICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAotICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAotICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKLSAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKLSAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAotICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAotICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOyBcCi0gICAgfSBcCi0gICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAotICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCi0gICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCi0gICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAotICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCi0gICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCi0gICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7IFwKLSAgICB9IFwKLSAgICBtZW1jcHkoc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgZGF0YSwgc2l6ZSk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemU7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QT1Aoc3RhdGUsIGRhdGEsIHNpemUsIGRpc2NhcmQpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIHRvICVwIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIG1lbWNweShkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpOyBcCi0gICAgaWYgKGRpc2NhcmQpIFwKLSAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiZGlzY2FyZCBkYXRhIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIERBVEFfUFVTSCh4KSBcCi0gICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSkKLSNkZWZpbmUgREFUQV9QT1AoeCkgXAotICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSwgMSkKLSNkZWZpbmUgREFUQV9QT1BfRElTQ0FSRCh4KSBcCi0gICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZW9mKCooeCkpKQotI2RlZmluZSBEQVRBX0FMTE9DKHQscCkgXAotICAgIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHQsIHApCi0jZGVmaW5lIERBVEFfTE9PS1VQX0FUKHQscCxwb3MpIFwKLSAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSx0LHAscG9zKQotCi0jZGVmaW5lIE1BUktfUFVTSChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBpID0gbGFzdG1hcms7IC8qIGN0eC0+bGFzdG1hcmsgbWF5IGNoYW5nZSBpZiByZWFsbG9jYXRlZCAqLyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgc3RhdGUtPm1hcmssIChpKzEpKnNpemVvZih2b2lkKikpOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1AobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMSk7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBNQVJLX1BPUF9LRUVQKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDApOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1BfRElTQ0FSRChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEpVTVBfTk9ORSAgICAgICAgICAgIDAKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMSAgICAgMQotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8yICAgICAyCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzMgICAgIDMKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMSAgICAgNAotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8yICAgICA1Ci0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzMgICAgIDYKLSNkZWZpbmUgSlVNUF9SRVBFQVQgICAgICAgICAgNwotI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMSAgICA4Ci0jZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8yICAgIDkKLSNkZWZpbmUgSlVNUF9NSU5fUkVQRUFUX09ORSAgMTAKLSNkZWZpbmUgSlVNUF9CUkFOQ0ggICAgICAgICAgMTEKLSNkZWZpbmUgSlVNUF9BU1NFUlQgICAgICAgICAgMTIKLSNkZWZpbmUgSlVNUF9BU1NFUlRfTk9UICAgICAgMTMKLQotI2RlZmluZSBET19KVU1QKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIG5leHRjdHgpOyBcCi0gICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAotICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKLSAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCi0gICAgY3R4ID0gbmV4dGN0eDsgXAotICAgIGdvdG8gZW50cmFuY2U7IFwKLSAgICBqdW1wbGFiZWw6IFwKLSAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgY2hhciogcHRyOwotICAgIFNSRV9DT0RFKiBwYXR0ZXJuOwotICAgIFB5X3NzaXplX3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBsYXN0bWFyazsKLSAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIFNSRV9DT0RFIGNocjsKLSAgICAgICAgU1JFX1JFUEVBVCogcmVwOwotICAgIH0gdTsKLX0gU1JFX01BVENIX0NPTlRFWFQ7Ci0KLS8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKLSAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLwotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9NQVRDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICBjaGFyKiBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOwotICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7Ci0KLSAgICBTUkVfTUFUQ0hfQ09OVEVYVCogY3R4OwotICAgIFNSRV9NQVRDSF9DT05URVhUKiBuZXh0Y3R4OwotCi0gICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKLQotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIGN0eCk7Ci0gICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKLSAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7Ci0gICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOwotCi1lbnRyYW5jZToKLQotICAgIGN0eC0+cHRyID0gKGNoYXIgKilzdGF0ZS0+cHRyOwotCi0gICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgewotICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLwotICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCi0gICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKGVuZCAtIGN0eC0+cHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBjdHgtPnBhdHRlcm5bM10pIHsKLSAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBjaGFycywgIgotICAgICAgICAgICAgICAgICAgICJuZWVkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLAotICAgICAgICAgICAgICAgICAgIChlbmQgLSBjdHgtPnB0cikvc3RhdGUtPmNoYXJzaXplLAotICAgICAgICAgICAgICAgICAgIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOwotICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgKytzaWdjb3VudDsKLSAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCi0gICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKLQotICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgewotCi0gICAgICAgIGNhc2UgU1JFX09QX01BUks6Ci0gICAgICAgICAgICAvKiBzZXQgbWFyayAqLwotICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGlmIChpICYgMSkKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKLSAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQotICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAotICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAotICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLwotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgdGhhdCBpcyBub3QgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIC8qIDxOT1RfTElURVJBTD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSA9PSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6Ci0gICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVQ6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLwotICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoIVNSRV9BVChzdGF0ZSwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIGNhdGVnb3J5ICovCi0gICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q0FURUdPUlkgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhc3JlX2NhdGVnb3J5KGN0eC0+cGF0dGVyblswXSwgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FOWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLwotICAgICAgICAgICAgLyogPEFOWT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KLSAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAgICAgLyogbWF0Y2ggc2V0IG1lbWJlciAob3Igbm9uX21lbWJlcikgKi8KLSAgICAgICAgICAgIC8qIDxJTj4gPHNraXA+IDxzZXQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDEsIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCi0gICAgICAgICAgICAgICAgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybisxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgotICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgotICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCi0gICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgotICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KLSAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgotICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT5wYXR0ZXJuWzJdKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfSU4gJiYKLSAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0JSQU5DSCwganVtcF9icmFuY2gsIGN0eC0+cGF0dGVybisxKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfS0VFUChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUX09ORToKLSAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtYXhpbWl6aW5nIHJlZ2V4cCkgKi8KLQotICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCi0gICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCi0gICAgICAgICAgICAgICB1c2UgdGhlIE1BWF9SRVBFQVQgb3BlcmF0b3IgKi8KLQotICAgICAgICAgICAgLyogPFJFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKLSAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0gICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5jb3VudDsKLQotICAgICAgICAgICAgLyogd2hlbiB3ZSBhcnJpdmUgaGVyZSwgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICAgbWF0Y2hlcywgYW5kIGN0eC0+cHRyIHBvaW50cyB0byB0aGUgdGFpbCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICBzdHJpbmcuICBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLAotICAgICAgICAgICAgICAgYW5kIGJhY2t0cmFjayBpZiBub3QuICovCi0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgc3RhcnRzIHdpdGggYSBsaXRlcmFsLiBza2lwIHBvc2l0aW9ucyB3aGVyZQotICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGNhbm5vdCBwb3NzaWJseSBtYXRjaCAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5jaHIgPSBjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdKzFdOwotICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT51LmNocikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLQotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzIsIGp1bXBfcmVwZWF0X29uZV8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOwotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWluaW1pemluZyByZWdleHApICovCi0KLSAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcwotICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQotICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAotICAgICAgICAgICAgICAgdXNlIHRoZSBNSU5fUkVQRUFUIG9wZXJhdG9yICovCi0KLSAgICAgICAgICAgIC8qIDxNSU5fUkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCi0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9SRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQotICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KLSAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMV0pOwotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWF0Y2ggbWluaW11bSBudW1iZXIgb2YgdGltZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IG1pbmltdW0gbWF0Y2hlcyBvZiByZXBlYXQgKi8KLSAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6Ci0gICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCi0gICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKLSAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCi0gICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLwotCi0gICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAotICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCi0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKLSAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6Ci0gICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KLQotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7Ci0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLQotICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KLSAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAotICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIHAgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogZSA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9JR05PUkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9JR05PUkUgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyKiBwID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGUgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfRVhJU1RTOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfRVhJU1RTICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgLyogPEdST1VQUkVGX0VYSVNUUz4gPGdyb3VwPiA8c2tpcD4gY29kZXllcyA8SlVNUD4gY29kZW5vIC4uLiAqLwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlQ6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgc3VicGF0dGVybiAqLwotICAgICAgICAgICAgLyogPEFTU0VSVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyIDwgc3RhdGUtPmJlZ2lubmluZykKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KLSAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyID49IHN0YXRlLT5iZWdpbm5pbmcpIHsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6Ci0gICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOwotICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKLSAgICAgICAgfQotICAgIH0KLQotZXhpdDoKLSAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7Ci0gICAganVtcCA9IGN0eC0+anVtcDsKLSAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7Ci0gICAgaWYgKGN0eF9wb3MgPT0gLTEpCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0KLSAgICBzd2l0Y2ggKGp1bXApIHsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8yOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8yOwotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzM6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzM7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMjsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8zOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8zOwotICAgICAgICBjYXNlIEpVTVBfQlJBTkNIOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9CUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9icmFuY2g7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMTsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8xOwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXQ7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMTsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8yOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9SRVBFQVRfT05FXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3JlcGVhdF9vbmU7Ci0gICAgICAgIGNhc2UgSlVNUF9BU1NFUlQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydDsKLSAgICAgICAgY2FzZSBKVU1QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVF9OT1RcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnRfbm90OwotICAgICAgICBjYXNlIEpVTVBfTk9ORToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFVFVSTiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIHJldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi19Ci0KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfU0VBUkNIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQotewotICAgIGNoYXIqIHB0ciA9IChjaGFyKilzdGF0ZS0+c3RhcnQ7Ci0gICAgY2hhciogZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBzdGF0dXMgPSAwOwotICAgIFB5X3NzaXplX3QgcHJlZml4X2xlbiA9IDA7Ci0gICAgUHlfc3NpemVfdCBwcmVmaXhfc2tpcCA9IDA7Ci0gICAgU1JFX0NPREUqIHByZWZpeCA9IE5VTEw7Ci0gICAgU1JFX0NPREUqIGNoYXJzZXQgPSBOVUxMOwotICAgIFNSRV9DT0RFKiBvdmVybGFwID0gTlVMTDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotCi0gICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKLSAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KLSAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IDw0PW1heD4gPDU9cHJlZml4IGluZm8+ICAqLwotCi0gICAgICAgIGZsYWdzID0gcGF0dGVyblsyXTsKLQotICAgICAgICBpZiAocGF0dGVyblszXSA+IDEpIHsKLSAgICAgICAgICAgIC8qIGFkanVzdCBlbmQgcG9pbnQgKGJ1dCBtYWtlIHN1cmUgd2UgbGVhdmUgYXQgbGVhc3Qgb25lCi0gICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlcmUsIHNvIGxpdGVyYWwgc2VhcmNoIHdpbGwgd29yaykgKi8KLSAgICAgICAgICAgIGVuZCAtPSAocGF0dGVyblszXS0xKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChlbmQgPD0gcHRyKQotICAgICAgICAgICAgICAgIGVuZCA9IHB0ciArIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX1BSRUZJWCkgewotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeCAqLwotICAgICAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KLSAgICAgICAgICAgIHByZWZpeF9sZW4gPSBwYXR0ZXJuWzVdOwotICAgICAgICAgICAgcHJlZml4X3NraXAgPSBwYXR0ZXJuWzZdOwotICAgICAgICAgICAgcHJlZml4ID0gcGF0dGVybiArIDc7Ci0gICAgICAgICAgICBvdmVybGFwID0gcHJlZml4ICsgcHJlZml4X2xlbiAtIDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBTUkVfSU5GT19DSEFSU0VUKQotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCi0gICAgICAgICAgICAvKiA8Y2hhcnNldD4gKi8KLSAgICAgICAgICAgIGNoYXJzZXQgPSBwYXR0ZXJuICsgNTsKLQotICAgICAgICBwYXR0ZXJuICs9IDEgKyBwYXR0ZXJuWzFdOwotICAgIH0KLQotICAgIFRSQUNFKCgicHJlZml4ID0gJXAgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAotICAgICAgICAgICBwcmVmaXgsIHByZWZpeF9sZW4sIHByZWZpeF9za2lwKSk7Ci0gICAgVFJBQ0UoKCJjaGFyc2V0ID0gJXBcbiIsIGNoYXJzZXQpKTsKLQotI2lmIGRlZmluZWQoVVNFX0ZBU1RfU0VBUkNIKQotICAgIGlmIChwcmVmaXhfbGVuID4gMSkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4LiAgdXNlIHRoZSBvdmVybGFwCi0gICAgICAgICAgIHRhYmxlIHRvIHNraXAgZm9yd2FyZCBhcyBmYXN0IGFzIHdlIHBvc3NpYmx5IGNhbiAqLwotICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgICAgICBlbmQgPSAoY2hhciAqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBwcmVmaXhbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gcHJlZml4X2xlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSBwb3RlbnRpYWwgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyIC0gKHByZWZpeF9sZW4gLSBwcmVmaXhfc2tpcCAtIDEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKLSAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgU1JFX0NPREUgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQotICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCi0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4gKyAyKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hhcnNldCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9DSEFSU0VUKGNoYXJzZXQsIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggQ0hBUlNFVFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgIHdoaWxlIChwdHIgPD0gZW5kKSB7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi0jaWYgIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTNAorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgNAorI2RlZmluZSBTUkUoRikgc3JlX3VjczRfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZmFjdG9yaWVzIGFuZCBkZXN0cnVjdG9ycyAqLwogCiAvKiBzZWUgc3JlLmggZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgaW50KTsKK3N0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgUHlfc3NpemVfdCk7CiBzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9zY2FubmVyKFBhdHRlcm5PYmplY3QqLCBQeU9iamVjdCosIFB5T2JqZWN0KiBrdyk7CiAKLXN0YXRpYyBpbnQKLXNyZV9saXRlcmFsX3RlbXBsYXRlKGludCBjaGFyc2l6ZSwgY2hhciogcHRyLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICAvKiBjaGVjayBpZiBnaXZlbiBzdHJpbmcgaXMgYSBsaXRlcmFsIHRlbXBsYXRlIChpLmUuIG5vIGVzY2FwZXMpICovCi0gICAgc3RydWN0IHsKLSAgICAgICAgaW50IGNoYXJzaXplOwotICAgIH0gc3RhdGUgPSB7Ci0gICAgICAgIGNoYXJzaXplCi0gICAgfTsKLSAgICB3aGlsZSAobGVuLS0gPiAwKSB7Ci0gICAgICAgIGlmIChTUkVfQ0hBUkdFVCgoJnN0YXRlKSwgcHRyLCAwKSA9PSAnXFwnKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHB0ciArPSBjaGFyc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBzcmVfY29kZXNpemUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CkBAIC0xNjY1LDcyICszMDgsNDEgQEAKIAogc3RhdGljIHZvaWQqCiBnZXRzdHJpbmcoUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCogcF9sZW5ndGgsCi0gICAgICAgICAgaW50KiBwX2xvZ2ljYWxfY2hhcnNpemUsIGludCogcF9jaGFyc2l6ZSwKKyAgICAgICAgICBpbnQqIHBfaXNieXRlcywgaW50KiBwX2NoYXJzaXplLAogICAgICAgICAgIFB5X2J1ZmZlciAqdmlldykKIHsKICAgICAvKiBnaXZlbiBhIHB5dGhvbiBvYmplY3QsIHJldHVybiBhIGRhdGEgcG9pbnRlciwgYSBsZW5ndGggKGluCiAgICAgICAgY2hhcmFjdGVycyksIGFuZCBhIGNoYXJhY3RlciBzaXplLiAgcmV0dXJuIE5VTEwgaWYgdGhlIG9iamVjdAogICAgICAgIGlzIG5vdCBhIHN0cmluZyAob3Igbm90IGNvbXBhdGlibGUpICovCiAKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBieXRlczsKLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgdm9pZCogcHRyOwotCiAgICAgLyogVW5pY29kZSBvYmplY3RzIGRvIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJLiBTbywgZ2V0IHRoZSBkYXRhCiAgICAgICAgZGlyZWN0bHkgaW5zdGVhZC4gKi8KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHN0cmluZykpIHsKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJpbmcpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHB0ciA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CiAgICAgICAgICpwX2xlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZyk7CiAgICAgICAgICpwX2NoYXJzaXplID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICAgICAgKnBfbG9naWNhbF9jaGFyc2l6ZSA9IDQ7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgICpwX2lzYnl0ZXMgPSAwOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKICAgICB9CiAKICAgICAvKiBnZXQgcG9pbnRlciB0byBieXRlIHN0cmluZyBidWZmZXIgKi8KLSAgICB2aWV3LT5sZW4gPSAtMTsKLSAgICBidWZmZXIgPSBQeV9UWVBFKHN0cmluZyktPnRwX2FzX2J1ZmZlcjsKLSAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5iZl9nZXRidWZmZXIgfHwKLSAgICAgICAgKCpidWZmZXItPmJmX2dldGJ1ZmZlcikoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogZGV0ZXJtaW5lIGJ1ZmZlciBzaXplICovCi0gICAgYnl0ZXMgPSB2aWV3LT5sZW47Ci0gICAgcHRyID0gdmlldy0+YnVmOworICAgICpwX2xlbmd0aCA9IHZpZXctPmxlbjsKKyAgICAqcF9jaGFyc2l6ZSA9IDE7CisgICAgKnBfaXNieXRlcyA9IDE7CiAKLSAgICBpZiAoYnl0ZXMgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgaGFzIG5lZ2F0aXZlIHNpemUiKTsKLSAgICAgICAgZ290byBlcnI7CisgICAgaWYgKHZpZXctPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQnVmZmVyIGlzIE5VTEwiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKKyAgICAgICAgdmlldy0+YnVmID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0gICAgLyogZGV0ZXJtaW5lIGNoYXJhY3RlciBzaXplICovCi0gICAgc2l6ZSA9IFB5T2JqZWN0X1NpemUoc3RyaW5nKTsKLQotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHN0cmluZykgfHwgYnl0ZXMgPT0gc2l6ZSkKLSAgICAgICAgY2hhcnNpemUgPSAxOwotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIHNpemUgbWlzbWF0Y2giKTsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgfQotCi0gICAgKnBfbGVuZ3RoID0gc2l6ZTsKLSAgICAqcF9jaGFyc2l6ZSA9IGNoYXJzaXplOwotICAgICpwX2xvZ2ljYWxfY2hhcnNpemUgPSBjaGFyc2l6ZTsKLQotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBpcyBOVUxMIik7Ci0gICAgICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLSAgZXJyOgotICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7Ci0gICAgdmlldy0+YnVmID0gTlVMTDsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdmlldy0+YnVmOwogfQogCiBMT0NBTChQeU9iamVjdCopCkBAIC0xNzQwLDcgKzM1Miw3IEBACiAgICAgLyogcHJlcGFyZSBzdGF0ZSBvYmplY3QgKi8KIAogICAgIFB5X3NzaXplX3QgbGVuZ3RoOwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplLCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CiAgICAgdm9pZCogcHRyOwogCiAgICAgbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoU1JFX1NUQVRFKSk7CkBAIC0xNzQ5LDE2ICszNjEsMTYgQEAKICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gLTE7CiAKICAgICBzdGF0ZS0+YnVmZmVyLmJ1ZiA9IE5VTEw7Ci0gICAgcHRyID0gZ2V0c3RyaW5nKHN0cmluZywgJmxlbmd0aCwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnN0YXRlLT5idWZmZXIpOworICAgIHB0ciA9IGdldHN0cmluZyhzdHJpbmcsICZsZW5ndGgsICZpc2J5dGVzLCAmY2hhcnNpemUsICZzdGF0ZS0+YnVmZmVyKTsKICAgICBpZiAoIXB0cikKICAgICAgICAgZ290byBlcnI7CiAKLSAgICBpZiAobG9naWNhbF9jaGFyc2l6ZSA9PSAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPiAxKSB7CisgICAgaWYgKGlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgc3RyaW5nIHBhdHRlcm4gb24gYSBieXRlcy1saWtlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycjsKICAgICB9Ci0gICAgaWYgKGxvZ2ljYWxfY2hhcnNpemUgPiAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgeworICAgIGlmICghaXNieXRlcyAmJiBwYXR0ZXJuLT5pc2J5dGVzID4gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBhIGJ5dGVzIHBhdHRlcm4gb24gYSBzdHJpbmctbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CkBAIC0xNzc1LDcgKzM4Nyw3IEBACiAgICAgZWxzZSBpZiAoZW5kID4gbGVuZ3RoKQogICAgICAgICBlbmQgPSBsZW5ndGg7CiAKLSAgICBzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9IGxvZ2ljYWxfY2hhcnNpemU7CisgICAgc3RhdGUtPmlzYnl0ZXMgPSBpc2J5dGVzOwogICAgIHN0YXRlLT5jaGFyc2l6ZSA9IGNoYXJzaXplOwogCiAgICAgc3RhdGUtPmJlZ2lubmluZyA9IHB0cjsKQEAgLTE4MTYsNiArNDI4LDI0IEBACiAgICAgKCgoY2hhciopKG1lbWJlcikgLSAoY2hhciopKHN0YXRlKS0+YmVnaW5uaW5nKSAvIChzdGF0ZSktPmNoYXJzaXplKQogCiBMT0NBTChQeU9iamVjdCopCitnZXRzbGljZShpbnQgaXNieXRlcywgY29uc3Qgdm9pZCAqcHRyLAorICAgICAgICAgUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCit7CisgICAgaWYgKGlzYnl0ZXMpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChzdHJpbmcpICYmCisgICAgICAgICAgICBzdGFydCA9PSAwICYmIGVuZCA9PSBQeUJ5dGVzX0dFVF9TSVpFKHN0cmluZykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXB0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX1N1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQpOworICAgIH0KK30KKworTE9DQUwoUHlPYmplY3QqKQogc3RhdGVfZ2V0c2xpY2UoU1JFX1NUQVRFKiBzdGF0ZSwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIHN0cmluZywgaW50IGVtcHR5KQogewogICAgIFB5X3NzaXplX3QgaSwgajsKQEAgLTE4MzUsMTEgKzQ2NSwxMSBAQAogICAgICAgICBqID0gU1RBVEVfT0ZGU0VUKHN0YXRlLCBzdGF0ZS0+bWFya1tpbmRleCsxXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBqKTsKKyAgICByZXR1cm4gZ2V0c2xpY2Uoc3RhdGUtPmlzYnl0ZXMsIHN0YXRlLT5iZWdpbm5pbmcsIHN0cmluZywgaSwgaik7CiB9CiAKIHN0YXRpYyB2b2lkCi1wYXR0ZXJuX2Vycm9yKGludCBzdGF0dXMpCitwYXR0ZXJuX2Vycm9yKFB5X3NzaXplX3Qgc3RhdHVzKQogewogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBTUkVfRVJST1JfUkVDVVJTSU9OX0xJTUlUOgpAQCAtMTg2OCwxOSArNDk4LDM5IEBACiB7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIGlmIChzZWxmLT52aWV3LmJ1ZikKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+dmlldyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wYXR0ZXJuKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmdyb3VwaW5kZXgpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aW5kZXhncm91cCk7CiAgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX21hdGNoKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MxX21hdGNoKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDIpCisgICAgICAgIHJldHVybiBzcmVfdWNzMl9tYXRjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfbWF0Y2goc3RhdGUsIHBhdHRlcm4pOworfQorCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX3NlYXJjaChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDEpCisgICAgICAgIHJldHVybiBzcmVfdWNzMV9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMikKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MyX3NlYXJjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9tYXRjaChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQogewogICAgIFNSRV9TVEFURSBzdGF0ZTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKICAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKQEAgLTE4OTgsMTEgKzU0OCw0MSBAQAogCiAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFUQ0hcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CiAKLSAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VtYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RhdGVfZmluaSgmc3RhdGUpOworCisgICAgcmV0dXJuIHBhdHRlcm5fbmV3X21hdGNoKHNlbGYsICZzdGF0ZSwgc3RhdHVzKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcGF0dGVybl9mdWxsbWF0Y2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKK3sKKyAgICBTUkVfU1RBVEUgc3RhdGU7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CisKKyAgICBQeU9iamVjdCogc3RyaW5nOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CisgICAgc3RhdGljIGNoYXIqIGt3bGlzdFtdID0geyAicGF0dGVybiIsICJwb3MiLCAiZW5kcG9zIiwgTlVMTCB9OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiT3xubjpmdWxsbWF0Y2giLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmluZywgJnN0YXJ0LCAmZW5kKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdHJpbmcgPSBzdGF0ZV9pbml0KCZzdGF0ZSwgc2VsZiwgc3RyaW5nLCBzdGFydCwgZW5kKTsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdGF0ZS5tYXRjaF9hbGwgPSAxOworICAgIHN0YXRlLnB0ciA9IHN0YXRlLnN0YXJ0OworCisgICAgVFJBQ0UoKCJ8JXB8JXB8RlVMTE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworCisgICAgc3RhdHVzID0gc3JlX21hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE5MTcsNyArNTk3LDcgQEAKIHBhdHRlcm5fc2VhcmNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBQeU9iamVjdCogc3RyaW5nOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwpAQCAtMTkzMywxMSArNjEzLDcgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIAotICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIApAQCAtMTk5Nyw1OSArNjczLDExIEBACiAjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0Kgotam9pbl9saXN0KFB5T2JqZWN0KiBsaXN0LCBQeU9iamVjdCogc3RyaW5nKQotewotICAgIC8qIGpvaW4gbGlzdCBlbGVtZW50cyAqLwotCi0gICAgUHlPYmplY3QqIGpvaW5lcjsKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgUHlPYmplY3QqIGZ1bmN0aW9uOwotICAgIFB5T2JqZWN0KiBhcmdzOwotI2VuZGlmCi0gICAgUHlPYmplY3QqIHJlc3VsdDsKLQotICAgIGpvaW5lciA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCAwLCAwKTsKLSAgICBpZiAoIWpvaW5lcikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGxpc3QpID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICByZXR1cm4gam9pbmVyOwotICAgIH0KLQotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDEwNjAwMDAKLSAgICBmdW5jdGlvbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoam9pbmVyLCAiam9pbiIpOwotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0gICAgaWYgKCFhcmdzKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBsaXN0KTsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmN0aW9uLCBhcmdzKTsKLSAgICBQeV9ERUNSRUYoYXJncyk7IC8qIGFsc28gcmVtb3ZlcyBsaXN0ICovCi0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKLSNlbHNlCi0gICAgcmVzdWx0ID0gY2FsbCgKLSAgICAgICAgInN0cmluZyIsICJqb2luIiwKLSAgICAgICAgUHlUdXBsZV9QYWNrKDIsIGxpc3QsIGpvaW5lcikKLSAgICAgICAgKTsKLSNlbmRpZgotICAgIFB5X0RFQ1JFRihqb2luZXIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kYWxsKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBpLCBiLCBlOwogCiAgICAgUHlPYmplY3QqIHN0cmluZzsKQEAgLTIwNzgsMTIgKzcwNiw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMDk5LDcgKzcyMiw4IEBACiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIGIgPSBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCk7CiAgICAgICAgICAgICBlID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUucHRyKTsKLSAgICAgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgYiwgZSk7CisgICAgICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgYiwgZSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE0NSw3ICs3NjksNiBAQAogCiB9CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX2ZpbmRpdGVyKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CkBAIC0yMTY3LDcgKzc5MCw2IEBACiAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9Ci0jZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9zcGxpdChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQpAQCAtMjE3NSw3ICs3OTcsNyBAQAogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKICAgICBQeU9iamVjdCogaXRlbTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgdm9pZCogbGFzdDsKQEAgLTIyMDYsMTIgKzgyOCw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMjMxLDcgKzg0OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBnZXQgc2VnbWVudCBiZWZvcmUgdGhpcyBtYXRjaCAqLwotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZSgKKyAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgICAgIHN0cmluZywgU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgbGFzdCksCiAgICAgICAgICAgICBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCkKICAgICAgICAgICAgICk7CkBAIC0yMjYwLDcgKzg3Nyw3IEBACiAgICAgfQogCiAgICAgLyogZ2V0IHNlZ21lbnQgZm9sbG93aW5nIGxhc3QgbWF0Y2ggKGV2ZW4gaWYgZW1wdHkpICovCi0gICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2UoCisgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKICAgICAgICAgc3RyaW5nLCBTVEFURV9PRkZTRVQoJnN0YXRlLCBsYXN0KSwgc3RhdGUuZW5kcG9zCiAgICAgICAgICk7CiAgICAgaWYgKCFpdGVtKQpAQCAtMjI4NiwxNSArOTAzLDE2IEBACiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OworICAgIFB5T2JqZWN0KiBqb2luZXI7CiAgICAgUHlPYmplY3QqIGl0ZW07CiAgICAgUHlPYmplY3QqIGZpbHRlcjsKICAgICBQeU9iamVjdCogYXJnczsKICAgICBQeU9iamVjdCogbWF0Y2g7CiAgICAgdm9pZCogcHRyOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5X3NzaXplX3QgaSwgYiwgZTsKLSAgICBpbnQgbG9naWNhbF9jaGFyc2l6ZSwgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOwogICAgIGludCBmaWx0ZXJfaXNfY2FsbGFibGU7CiAgICAgUHlfYnVmZmVyIHZpZXc7CiAKQEAgLTIzMDcsMTAgKzkyNSwxMyBAQAogICAgICAgICAvKiBpZiBub3QgY2FsbGFibGUsIGNoZWNrIGlmIGl0J3MgYSBsaXRlcmFsIHN0cmluZyAqLwogICAgICAgICBpbnQgbGl0ZXJhbDsKICAgICAgICAgdmlldy5idWYgPSBOVUxMOwotICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgICAgICBwdHIgPSBnZXRzdHJpbmcocHRlbXBsYXRlLCAmbiwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOwogICAgICAgICBiID0gY2hhcnNpemU7CiAgICAgICAgIGlmIChwdHIpIHsKLSAgICAgICAgICAgIGxpdGVyYWwgPSBzcmVfbGl0ZXJhbF90ZW1wbGF0ZShiLCBwdHIsIG4pOworICAgICAgICAgICAgaWYgKGNoYXJzaXplID09IDEpCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IG1lbWNocihwdHIsICdcXCcsIG4pID09IE5VTEw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGl0ZXJhbCA9IFB5VW5pY29kZV9GaW5kQ2hhcihwdGVtcGxhdGUsICdcXCcsIDAsIG4sIDEpID09IC0xOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGxpdGVyYWwgPSAwOwpAQCAtMjM1NCwxMiArOTc1LDcgQEAKIAogICAgICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgICAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTIzNzUsNyArOTkxLDggQEAKIAogICAgICAgICBpZiAoaSA8IGIpIHsKICAgICAgICAgICAgIC8qIGdldCBzZWdtZW50IGJlZm9yZSB0aGlzIG1hdGNoICovCi0gICAgICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZShzdHJpbmcsIGksIGIpOworICAgICAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICBzdHJpbmcsIGksIGIpOwogICAgICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQzMCw3ICsxMDQ3LDggQEAKIAogICAgIC8qIGdldCBzZWdtZW50IGZvbGxvd2luZyBsYXN0IG1hdGNoICovCiAgICAgaWYgKGkgPCBzdGF0ZS5lbmRwb3MpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOworICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBzdGF0ZS5lbmRwb3MpOwogICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzdGF0dXMgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIGl0ZW0pOwpAQCAtMjQ0NCwxMCArMTA2MiwyNSBAQAogICAgIFB5X0RFQ1JFRihmaWx0ZXIpOwogCiAgICAgLyogY29udmVydCBsaXN0IHRvIHNpbmdsZSBzdHJpbmcgKGFsc28gcmVtb3ZlcyBsaXN0KSAqLwotICAgIGl0ZW0gPSBqb2luX2xpc3QobGlzdCwgc3RyaW5nKTsKLQotICAgIGlmICghaXRlbSkKKyAgICBqb2luZXIgPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsIHN0cmluZywgMCwgMCk7CisgICAgaWYgKCFqb2luZXIpIHsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShsaXN0KSA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICAgICAgaXRlbSA9IGpvaW5lcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzdGF0ZS5pc2J5dGVzKQorICAgICAgICAgICAgaXRlbSA9IF9QeUJ5dGVzX0pvaW4oam9pbmVyLCBsaXN0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlbSA9IFB5VW5pY29kZV9Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChzdWJuKQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTm4iLCBpdGVtLCBuKTsKQEAgLTI1NDEsMTAgKzExNzQsOTQgQEAKICNlbmRpZgogfQogCitzdGF0aWMgUHlPYmplY3QgKgorcGF0dGVybl9yZXByKFBhdHRlcm5PYmplY3QgKm9iaikKK3sKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICAgICAgaW50IHZhbHVlOworICAgIH0gZmxhZ19uYW1lc1tdID0geworICAgICAgICB7InJlLlRFTVBMQVRFIiwgU1JFX0ZMQUdfVEVNUExBVEV9LAorICAgICAgICB7InJlLklHTk9SRUNBU0UiLCBTUkVfRkxBR19JR05PUkVDQVNFfSwKKyAgICAgICAgeyJyZS5MT0NBTEUiLCBTUkVfRkxBR19MT0NBTEV9LAorICAgICAgICB7InJlLk1VTFRJTElORSIsIFNSRV9GTEFHX01VTFRJTElORX0sCisgICAgICAgIHsicmUuRE9UQUxMIiwgU1JFX0ZMQUdfRE9UQUxMfSwKKyAgICAgICAgeyJyZS5VTklDT0RFIiwgU1JFX0ZMQUdfVU5JQ09ERX0sCisgICAgICAgIHsicmUuVkVSQk9TRSIsIFNSRV9GTEFHX1ZFUkJPU0V9LAorICAgICAgICB7InJlLkRFQlVHIiwgU1JFX0ZMQUdfREVCVUd9LAorICAgICAgICB7InJlLkFTQ0lJIiwgU1JFX0ZMQUdfQVNDSUl9LAorICAgIH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZsYWdfaXRlbXM7CisgICAgaW50IGk7CisgICAgaW50IGZsYWdzID0gb2JqLT5mbGFnczsKKworICAgIC8qIE9taXQgcmUuVU5JQ09ERSBmb3IgdmFsaWQgc3RyaW5nIHBhdHRlcm5zLiAqLworICAgIGlmIChvYmotPmlzYnl0ZXMgPT0gMCAmJgorICAgICAgICAoZmxhZ3MgJiAoU1JFX0ZMQUdfTE9DQUxFfFNSRV9GTEFHX1VOSUNPREV8U1JFX0ZMQUdfQVNDSUkpKSA9PQorICAgICAgICAgU1JFX0ZMQUdfVU5JQ09ERSkKKyAgICAgICAgZmxhZ3MgJj0gflNSRV9GTEFHX1VOSUNPREU7CisKKyAgICBmbGFnX2l0ZW1zID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoIWZsYWdfaXRlbXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IFB5X0FSUkFZX0xFTkdUSChmbGFnX25hbWVzKTsgaSsrKSB7CisgICAgICAgIGlmIChmbGFncyAmIGZsYWdfbmFtZXNbaV0udmFsdWUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmxhZ19uYW1lc1tpXS5uYW1lKTsKKyAgICAgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisKKyAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBmbGFncyAmPSB+ZmxhZ19uYW1lc1tpXS52YWx1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZmxhZ3MpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiMHgleCIsIGZsYWdzKTsKKyAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGZsYWdfaXRlbXMsIGl0ZW0pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICB9CisKKyAgICBpZiAoUHlMaXN0X1NpemUoZmxhZ19pdGVtcykgPiAwKSB7CisgICAgICAgIFB5T2JqZWN0ICpmbGFnc19yZXN1bHQ7CisgICAgICAgIFB5T2JqZWN0ICpzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygifCIpOworICAgICAgICBpZiAoIXNlcCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgZmxhZ3NfcmVzdWx0ID0gUHlVbmljb2RlX0pvaW4oc2VwLCBmbGFnX2l0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKHNlcCk7CisgICAgICAgIGlmICghZmxhZ3NfcmVzdWx0KQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIsICVTKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai0+cGF0dGVybiwgZmxhZ3NfcmVzdWx0KTsKKyAgICAgICAgUHlfREVDUkVGKGZsYWdzX3Jlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgicmUuY29tcGlsZSglLjIwMFIpIiwgb2JqLT5wYXR0ZXJuKTsKKyAgICB9CisKK2RvbmU6CisgICAgUHlfREVDUkVGKGZsYWdfaXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIFB5RG9jX1NUUlZBUihwYXR0ZXJuX21hdGNoX2RvYywKICJtYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgTWF0Y2hlcyB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmciKTsKIAorUHlEb2NfU1RSVkFSKHBhdHRlcm5fZnVsbG1hdGNoX2RvYywKKyJmdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAorICAgIE1hdGNoZXMgYWdhaW5zdCBhbGwgb2YgdGhlIHN0cmluZyIpOworCiBQeURvY19TVFJWQVIocGF0dGVybl9zZWFyY2hfZG9jLAogInNlYXJjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkgLT4gbWF0Y2ggb2JqZWN0IG9yIE5vbmUuXG5cCiAgICAgU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZ1xuXApAQCAtMjU4MCw2ICsxMjk3LDggQEAKIHN0YXRpYyBQeU1ldGhvZERlZiBwYXR0ZXJuX21ldGhvZHNbXSA9IHsKICAgICB7Im1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX21hdGNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9tYXRjaF9kb2N9LAorICAgIHsiZnVsbG1hdGNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2Z1bGxtYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgICAgIHBhdHRlcm5fZnVsbG1hdGNoX2RvY30sCiAgICAgeyJzZWFyY2giLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc2VhcmNoLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9zZWFyY2hfZG9jfSwKICAgICB7InN1YiIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zdWIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLApAQCAtMjU5MCwxMCArMTMwOSw4IEBACiAgICAgICAgIHBhdHRlcm5fc3BsaXRfZG9jfSwKICAgICB7ImZpbmRhbGwiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZmluZGFsbCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGFsbF9kb2N9LAotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDIwMjAwMDAKICAgICB7ImZpbmRpdGVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRpdGVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKICAgICAgICAgcGF0dGVybl9maW5kaXRlcl9kb2N9LAotI2VuZGlmCiAgICAgeyJzY2FubmVyIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NjYW5uZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfSwKICAgICB7Il9fY29weV9fIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2NvcHksIE1FVEhfTk9BUkdTfSwKICAgICB7Il9fZGVlcGNvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9kZWVwY29weSwgTUVUSF9PfSwKQEAgLTI2MTgsNyArMTMzNSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpcGF0dGVybl9yZXByLCAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCkBAIC0yNjcxLDcgKzEzODgsNiBAQAogICAgIHNlbGYtPnBhdHRlcm4gPSBOVUxMOwogICAgIHNlbGYtPmdyb3VwaW5kZXggPSBOVUxMOwogICAgIHNlbGYtPmluZGV4Z3JvdXAgPSBOVUxMOwotICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKIAogICAgIHNlbGYtPmNvZGVzaXplID0gbjsKIApAQCAtMjY5MiwxNiArMTQwOCwyMCBAQAogICAgIH0KIAogICAgIGlmIChwYXR0ZXJuID09IFB5X05vbmUpIHsKLSAgICAgICAgc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSA9IC0xOwotICAgICAgICBzZWxmLT5jaGFyc2l6ZSA9IC0xOworICAgICAgICBzZWxmLT5pc2J5dGVzID0gLTE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IHBfbGVuZ3RoOwotICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5sb2dpY2FsX2NoYXJzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+Y2hhcnNpemUsICZzZWxmLT52aWV3KSkgeworICAgICAgICBpbnQgY2hhcnNpemU7CisgICAgICAgIFB5X2J1ZmZlciB2aWV3OworICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7CisgICAgICAgIGlmICghZ2V0c3RyaW5nKHBhdHRlcm4sICZwX2xlbmd0aCwgJnNlbGYtPmlzYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZjaGFyc2l6ZSwgJnZpZXcpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAodmlldy5idWYpCisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYocGF0dGVybik7CkBAIC0yNzg3LDcgKzE1MDcsNyBAQAogICAgICAgICBza2lwID0gKmNvZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFZUUkFDRSgoIiVsdSAoc2tpcCB0byAlcClcbiIsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNraXAsIGNvZGUrc2tpcCkpOyAgICAgICAgXAotICAgICAgICBpZiAoc2tpcC1hZGogPiBlbmQtY29kZSkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChza2lwLWFkaiA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKSAgICAgIFwKICAgICAgICAgICAgIEZBSUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb2RlKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKQEAgLTI4MTksOCArMTUzOSw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgb2Zmc2V0ID0gMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9TUkVfQ09ERV9CSVRTOyAvKiAyNTYtYml0IGJpdG1hcCAqLworICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjgyOCw3ICsxNTQ4LDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfQklHQ0hBUlNFVDoKICAgICAgICAgICAgIEdFVF9BUkc7IC8qIE51bWJlciBvZiBibG9ja3MgKi8KICAgICAgICAgICAgIG9mZnNldCA9IDI1Ni9zaXplb2YoU1JFX0NPREUpOyAvKiAyNTYtYnl0ZSB0YWJsZSAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgaWYgKG9mZnNldCA+IChQeV91aW50cHRyX3QpKGVuZCAtIGNvZGUpKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBlYWNoIGJ5dGUgcG9pbnRzIHRvIGEgdmFsaWQgYmxvY2sgKi8KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewpAQCAtMjgzNiw4ICsxNTU2LDggQEAKICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwotICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogMzIvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMzItYnl0ZSBiaXRtYXAgdGltZXMgYXJnICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSBhcmcgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOyAvKiAyNTYtYml0IGJpdG1hcCB0aW1lcyBhcmcgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI5MDAsNyArMTYyMCw3IEBACiAgICAgICAgICAgICAgICBzcmVfbWF0Y2goKSBjb2RlIGlzIHJvYnVzdCBldmVuIGlmIHRoZXkgZG9uJ3QsIGFuZCB0aGUgd29yc3QKICAgICAgICAgICAgICAgIHlvdSBjYW4gZ2V0IGlzIG5vbnNlbnNpY2FsIG1hdGNoIHJlc3VsdHMuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+IDIqZ3JvdXBzKzEpIHsKKyAgICAgICAgICAgIGlmIChhcmcgPiAyICogKHNpemVfdClncm91cHMgKyAxKSB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYXJnPSVkLCBncm91cHM9JWRcbiIsIChpbnQpYXJnLCAoaW50KWdyb3VwcykpOwogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CkBAIC0yOTg4LDExICsxNzA4LDExIEBACiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7IHByZWZpeF9sZW4gPSBhcmc7CiAgICAgICAgICAgICAgICAgICAgIEdFVF9BUkc7CiAgICAgICAgICAgICAgICAgICAgIC8qIEhlcmUgY29tZXMgdGhlIHByZWZpeCBzdHJpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgY29kZSArPSBwcmVmaXhfbGVuOwogICAgICAgICAgICAgICAgICAgICAvKiBBbmQgaGVyZSBjb21lcyB0aGUgb3ZlcmxhcCB0YWJsZSAqLwotICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IG5ld2NvZGUtY29kZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiAoUHlfdWludHB0cl90KShuZXdjb2RlIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgICAgICAgICAvKiBFYWNoIG92ZXJsYXAgdmFsdWUgc2hvdWxkIGJlIDwgcHJlZml4X2xlbiAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJlZml4X2xlbjsgaSsrKSB7CkBAIC0zMDgzLDcgKzE4MDMsNyBAQAogICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRjoKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfSUdOT1JFOgogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTMwOTIsNyArMTgxMiw3IEBACiAgICAgICAgICAgICAgICAnZ3JvdXAnIGlzIGVpdGhlciBhbiBpbnRlZ2VyIGdyb3VwIG51bWJlciBvciBhIGdyb3VwIG5hbWUsCiAgICAgICAgICAgICAgICAndGhlbicgYW5kICdlbHNlJyBhcmUgc3ViLXJlZ2V4ZXMsIGFuZCAnZWxzZScgaXMgb3B0aW9uYWwuICovCiAgICAgICAgICAgICBHRVRfQVJHOwotICAgICAgICAgICAgaWYgKGFyZyA+PSBncm91cHMpCisgICAgICAgICAgICBpZiAoYXJnID49IChzaXplX3QpZ3JvdXBzKQogICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICBHRVRfU0tJUF9BREooMSk7CiAgICAgICAgICAgICBjb2RlLS07IC8qIFRoZSBza2lwIGlzIHJlbGF0aXZlIHRvIHRoZSBmaXJzdCBhcmchICovCkBAIC0zMTIxLDcgKzE4NDEsNyBAQAogICAgICAgICAgICAgICAgdG8gYWxsb3cgYXJiaXRyYXJ5IGp1bXBzIGFueXdoZXJlIGluIHRoZSBjb2RlOyBzbyB3ZSBqdXN0IGxvb2sKICAgICAgICAgICAgICAgIGZvciBhIEpVTVAgb3Bjb2RlIHByZWNlZGluZyBvdXIgc2tpcCB0YXJnZXQuCiAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCBlbmQtY29kZSAmJgorICAgICAgICAgICAgaWYgKHNraXAgPj0gMyAmJiBza2lwLTMgPCAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSAmJgogICAgICAgICAgICAgICAgIGNvZGVbc2tpcC0zXSA9PSBTUkVfT1BfSlVNUCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBWVFJBQ0UoKCJib3RoIHRoZW4gYW5kIGVsc2UgcGFydHMgcHJlc2VudFxuIikpOwpAQCAtMzIwNSw2ICsxOTI1LDEyIEBACiBzdGF0aWMgUHlPYmplY3QqCiBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChNYXRjaE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGRlZikKIHsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICB2b2lkKiBwdHI7CisKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHNlbGYtPmdyb3VwcykgewogICAgICAgICAvKiByYWlzZSBJbmRleEVycm9yIGlmIHdlIHdlcmUgZ2l2ZW4gYSBiYWQgZ3JvdXAgbnVtYmVyICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKQEAgLTMyMjIsOSArMTk0OCwxNCBAQAogICAgICAgICByZXR1cm4gZGVmOwogICAgIH0KIAotICAgIHJldHVybiBQeVNlcXVlbmNlX0dldFNsaWNlKAotICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdCi0gICAgICAgICk7CisgICAgcHRyID0gZ2V0c3RyaW5nKHNlbGYtPnN0cmluZywgJmxlbmd0aCwgJmlzYnl0ZXMsICZjaGFyc2l6ZSwgJnZpZXcpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gZ2V0c2xpY2UoaXNieXRlcywgcHRyLAorICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmluZywgc2VsZi0+bWFya1tpbmRleF0sIHNlbGYtPm1hcmtbaW5kZXgrMV0pOworICAgIGlmIChpc2J5dGVzICYmIHZpZXcuYnVmICE9IE5VTEwpCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0zNjQ0LDYgKzIzNzUsMjIgQEAKICAgICAgICAgcmV0dXJuIG1hdGNoX3JlZ3Moc2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittYXRjaF9yZXByKE1hdGNoT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKmdyb3VwMCA9IG1hdGNoX2dldHNsaWNlX2J5X2luZGV4KHNlbGYsIDAsIFB5X05vbmUpOworICAgIGlmIChncm91cDAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPCVzIG9iamVjdDsgc3Bhbj0oJWQsICVkKSwgbWF0Y2g9JS41MFI+IiwKKyAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsCisgICAgICAgICAgICBzZWxmLT5tYXJrWzBdLCBzZWxmLT5tYXJrWzFdLCBncm91cDApOworICAgIFB5X0RFQ1JFRihncm91cDApOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIG1hdGNoX2dldHNldFtdID0gewogICAgIHsibGFzdGluZGV4IiwgKGdldHRlciltYXRjaF9sYXN0aW5kZXhfZ2V0LCAoc2V0dGVyKU5VTEx9LAogICAgIHsibGFzdGdyb3VwIiwgKGdldHRlciltYXRjaF9sYXN0Z3JvdXBfZ2V0LCAoc2V0dGVyKU5VTEx9LApAQCAtMzY3Miw3ICsyNDE5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpbWF0Y2hfcmVwciwgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMzY5Niw3ICsyNDQzLDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCoKLXBhdHRlcm5fbmV3X21hdGNoKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFNSRV9TVEFURSogc3RhdGUsIGludCBzdGF0dXMpCitwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBQeV9zc2l6ZV90IHN0YXR1cykKIHsKICAgICAvKiBjcmVhdGUgbWF0Y2ggb2JqZWN0IChmcm9tIHN0YXRlIG9iamVjdCkgKi8KIApAQCAtMzc3NSwxNyArMjUyMiwxMyBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBzdGF0ZV9yZXNldChzdGF0ZSk7CiAKICAgICBzdGF0ZS0+cHRyID0gc3RhdGUtPnN0YXJ0OwogCi0gICAgaWYgKHN0YXRlLT5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX21hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV91bWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9tYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM4MDYsMTcgKzI1NDksMTMgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zOTY5LDcgKzI3MDgsNSBAQAogICAgIHJldHVybiBtOwogfQogCi0jZW5kaWYgLyogIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkgKi8KLQogLyogdmltOnRzPTQ6c3c9NDpldAogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggMzc0ZDkzMC4uNmIwZDY3YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTQyLDYgKzQyLDcwIEBACiAKICNlbmRpZgogCisvKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLworI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgorCitzdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOworCisjaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKKyNpbmNsdWRlIDxwb2xsLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKKyNpbmNsdWRlIDxzeXMvcG9sbC5oPgorI2VuZGlmCisKKy8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KKyNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCisjaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgorI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKKyNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKKworLyogU1NMIGVycm9yIG9iamVjdCAqLworc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Oworc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKKworLyogRXJyb3IgbWFwcGluZ3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOworc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7CitzdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKKworc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKKyAgICBjb25zdCBjaGFyICptbmVtb25pYzsKKyAgICBpbnQgbGlicmFyeSwgcmVhc29uOworfTsKK3N0cnVjdCBweV9zc2xfbGlicmFyeV9jb2RlIHsKKyAgICBjb25zdCBjaGFyICpsaWJyYXJ5OworICAgIGludCBjb2RlOworfTsKKworLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCisjaW5jbHVkZSAiX3NzbF9kYXRhLmgiCisKKy8qIE9wZW5zc2wgY29tZXMgd2l0aCBUTFN2MS4xIGFuZCBUTFN2MS4yIGJldHdlZW4gMS4wLjBoIGFuZCAxLjAuMQorICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvbmV3cy9jaGFuZ2Vsb2cuaHRtbAorICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDEwMDAxMDAwTAorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1RMU3YxXzIgMAorI2VuZGlmCisKKy8qIFNOSSBzdXBwb3J0IChjbGllbnQtIGFuZCBzZXJ2ZXItc2lkZSkgYXBwZWFyZWQgaW4gT3BlblNTTCAxLjAuMCBhbmQgMC45LjhmCisgKiBUaGlzIGluY2x1ZGVzIHRoZSBTU0xfc2V0X1NTTF9DVFgoKSBmdW5jdGlvbi4KKyAqLworI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyMgZGVmaW5lIEhBVkVfU05JIDEKKyNlbHNlCisjIGRlZmluZSBIQVZFX1NOSSAwCisjZW5kaWYKKwogZW51bSBweV9zc2xfZXJyb3IgewogICAgIC8qIHRoZXNlIG1pcnJvciBzc2wuaCAqLwogICAgIFBZX1NTTF9FUlJPUl9OT05FLApAQCAtNzUsNTUgKzEzOSwxNCBAQAogI2VuZGlmCiAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMz0xLAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIzLAorI2lmIEhBVkVfVExTdjFfMgorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzEsCisgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8xLAorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMgorI2Vsc2UKICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxCi19OwotCi1zdHJ1Y3QgcHlfc3NsX2Vycm9yX2NvZGUgewotICAgIGNvbnN0IGNoYXIgKm1uZW1vbmljOwotICAgIGludCBsaWJyYXJ5LCByZWFzb247Ci19OwotCi1zdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSB7Ci0gICAgY29uc3QgY2hhciAqbGlicmFyeTsKLSAgICBpbnQgY29kZTsKLX07Ci0KLS8qIEluY2x1ZGUgc3ltYm9scyBmcm9tIF9zb2NrZXQgbW9kdWxlICovCi0jaW5jbHVkZSAic29ja2V0bW9kdWxlLmgiCi0KLXN0YXRpYyBQeVNvY2tldE1vZHVsZV9BUElPYmplY3QgUHlTb2NrZXRNb2R1bGU7Ci0KLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9IKQotI2luY2x1ZGUgPHBvbGwuaD4KLSNlbGlmIGRlZmluZWQoSEFWRV9TWVNfUE9MTF9IKQotI2luY2x1ZGUgPHN5cy9wb2xsLmg+CiAjZW5kaWYKLQotLyogSW5jbHVkZSBPcGVuU1NMIGhlYWRlciBmaWxlcyAqLwotI2luY2x1ZGUgIm9wZW5zc2wvcnNhLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9jcnlwdG8uaCIKLSNpbmNsdWRlICJvcGVuc3NsL3g1MDkuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3g1MDl2My5oIgotI2luY2x1ZGUgIm9wZW5zc2wvcGVtLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9zc2wuaCIKLSNpbmNsdWRlICJvcGVuc3NsL2Vyci5oIgotI2luY2x1ZGUgIm9wZW5zc2wvcmFuZC5oIgotCi0vKiBJbmNsdWRlIGdlbmVyYXRlZCBkYXRhIChlcnJvciBjb2RlcykgKi8KLSNpbmNsdWRlICJfc3NsX2RhdGEuaCIKLQotLyogU1NMIGVycm9yIG9iamVjdCAqLwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFplcm9SZXR1cm5FcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50UmVhZEVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFdhbnRXcml0ZUVycm9yT2JqZWN0Owotc3RhdGljIFB5T2JqZWN0ICpQeVNTTFN5c2NhbGxFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xFT0ZFcnJvck9iamVjdDsKLQotLyogRXJyb3IgbWFwcGluZ3MgKi8KLXN0YXRpYyBQeU9iamVjdCAqZXJyX2NvZGVzX3RvX25hbWVzOwotc3RhdGljIFB5T2JqZWN0ICplcnJfbmFtZXNfdG9fY29kZXM7Ci1zdGF0aWMgUHlPYmplY3QgKmxpYl9jb2Rlc190b19uYW1lczsKK307CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogCkBAIC0xNzUsNiArMTk4LDExIEBACiAjIGRlZmluZSBPUEVOU1NMX05PX0NPTVAKICNlbmRpZgogCisvKiBYNTA5X1ZFUklGWV9QQVJBTSBnb3QgYWRkZWQgdG8gT3BlblNTTCBpbiAwLjkuOCAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwODAwZkwKKyMgZGVmaW5lIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyNlbmRpZgorCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC0xODMsMTQgKzIxMSwyMCBAQAogICAgIGNoYXIgKm5wbl9wcm90b2NvbHM7CiAgICAgaW50IG5wbl9wcm90b2NvbHNfbGVuOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlPYmplY3QgKnNldF9ob3N0bmFtZTsKKyNlbmRpZgorICAgIGludCBjaGVja19ob3N0bmFtZTsKIH0gUHlTU0xDb250ZXh0OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICpTb2NrZXQ7IC8qIHdlYWtyZWYgdG8gc29ja2V0IG9uIHdoaWNoIHdlJ3JlIGxheWVyZWQgKi8KICAgICBTU0wgKnNzbDsKKyAgICBQeVNTTENvbnRleHQgKmN0eDsgLyogd2Vha3JlZiB0byBTU0wgY29udGV4dCAqLwogICAgIFg1MDkgKnBlZXJfY2VydDsKLSAgICBpbnQgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgc2h1dGRvd25fc2Vlbl96ZXJvOworICAgIGNoYXIgaGFuZHNoYWtlX2RvbmU7CiAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZTsKIH0gUHlTU0xTb2NrZXQ7CiAKQEAgLTMxOCwxNCArMzUyLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYl9vYmosIGVycnN0ciwgbGluZW5vKTsKICAgICBlbHNlCiAgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyAoX3NzbC5jOiVkKSIsIGVycnN0ciwgbGluZW5vKTsKLQogICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaW5pdF92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoImlOIiwgc3NsX2Vycm5vLCBtc2cpOworICAgIGlmIChpbml0X3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGVycl92YWx1ZSA9IFB5T2JqZWN0X0NhbGxPYmplY3QodHlwZSwgaW5pdF92YWx1ZSk7CiAgICAgUHlfREVDUkVGKGluaXRfdmFsdWUpOwogICAgIGlmIChlcnJfdmFsdWUgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsOworCiAgICAgaWYgKHJlYXNvbl9vYmogPT0gTlVMTCkKICAgICAgICAgcmVhc29uX29iaiA9IFB5X05vbmU7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoZXJyX3ZhbHVlLCAmUHlJZF9yZWFzb24sIHJlYXNvbl9vYmopKQpAQCAtNDM5LDExICs0NzcsMTMgQEAKICAqLwogCiBzdGF0aWMgUHlTU0xTb2NrZXQgKgotbmV3UHlTU0xTb2NrZXQoU1NMX0NUWCAqY3R4LCBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2ssCituZXdQeVNTTFNvY2tldChQeVNTTENvbnRleHQgKnNzbGN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAogICAgICAgICAgICAgICAgZW51bSBweV9zc2xfc2VydmVyX29yX2NsaWVudCBzb2NrZXRfdHlwZSwKICAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSkKIHsKICAgICBQeVNTTFNvY2tldCAqc2VsZjsKKyAgICBTU0xfQ1RYICpjdHggPSBzc2xjdHgtPmN0eDsKKyAgICBsb25nIG1vZGU7CiAKICAgICBzZWxmID0gUHlPYmplY3RfTmV3KFB5U1NMU29ja2V0LCAmUHlTU0xTb2NrZXRfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKQEAgLTQ1Miw3ICs0OTIsMTAgQEAKICAgICBzZWxmLT5wZWVyX2NlcnQgPSBOVUxMOwogICAgIHNlbGYtPnNzbCA9IE5VTEw7CiAgICAgc2VsZi0+U29ja2V0ID0gTlVMTDsKKyAgICBzZWxmLT5jdHggPSBzc2xjdHg7CiAgICAgc2VsZi0+c2h1dGRvd25fc2Vlbl96ZXJvID0gMDsKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDA7CisgICAgUHlfSU5DUkVGKHNzbGN0eCk7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIFNTTCBlcnJvciBzdGF0ZSBpcyBpbml0aWFsaXplZCAqLwogICAgICh2b2lkKSBFUlJfZ2V0X3N0YXRlKCk7CkBAIC00NjEsMTIgKzUwNCwxNSBAQAogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KGN0eCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgc29jay0+c29ja19mZCk7CisgICAgU1NMX3NldF9hcHBfZGF0YShzZWxmLT5zc2wsc2VsZik7CisgICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIFB5X1NBRkVfRE9XTkNBU1Qoc29jay0+c29ja19mZCwgU09DS0VUX1QsIGludCkpOworICAgIG1vZGUgPSBTU0xfTU9ERV9BQ0NFUFRfTU9WSU5HX1dSSVRFX0JVRkZFUjsKICNpZmRlZiBTU0xfTU9ERV9BVVRPX1JFVFJZCi0gICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisgICAgbW9kZSB8PSBTU0xfTU9ERV9BVVRPX1JFVFJZOwogI2VuZGlmCisgICAgU1NMX3NldF9tb2RlKHNlbGYtPnNzbCwgbW9kZSk7CiAKLSNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjaWYgSEFWRV9TTkkKICAgICBpZiAoc2VydmVyX2hvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFNTTF9zZXRfdGxzZXh0X2hvc3RfbmFtZShzZWxmLT5zc2wsIHNlcnZlcl9ob3N0bmFtZSk7CiAjZW5kaWYKQEAgLTQ4OCw2ICs1MzQsMTAgQEAKIAogICAgIHNlbGYtPnNvY2tldF90eXBlID0gc29ja2V0X3R5cGU7CiAgICAgc2VsZi0+U29ja2V0ID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc29jaywgTlVMTCk7CisgICAgaWYgKHNlbGYtPlNvY2tldCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC01NTQsNiArNjA0LDcgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNlbGYtPnNzbCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBzZWxmLT5oYW5kc2hha2VfZG9uZSA9IDE7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC05MjAsNiArOTcxLDEyNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorX2dldF9haWFfdXJpKFg1MDkgKmNlcnRpZmljYXRlLCBpbnQgbmlkKSB7CisgICAgUHlPYmplY3QgKmxzdCA9IE5VTEwsICpvc3RyID0gTlVMTDsKKyAgICBpbnQgaSwgcmVzdWx0OworICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTUyAqaW5mbzsKKworICAgIGluZm8gPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfaW5mb19hY2Nlc3MsIE5VTEwsIE5VTEwpOworICAgIGlmICgoaW5mbyA9PSBOVUxMKSB8fCAoc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShpbmZvKSA9PSAwKSkgeworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBza19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKGluZm8pOyBpKyspIHsKKyAgICAgICAgQUNDRVNTX0RFU0NSSVBUSU9OICphZCA9IHNrX0FDQ0VTU19ERVNDUklQVElPTl92YWx1ZShpbmZvLCBpKTsKKyAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKworICAgICAgICBpZiAoKE9CSl9vYmoybmlkKGFkLT5tZXRob2QpICE9IG5pZCkgfHwKKyAgICAgICAgICAgICAgICAoYWQtPmxvY2F0aW9uLT50eXBlICE9IEdFTl9VUkkpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB1cmkgPSBhZC0+bG9jYXRpb24tPmQudW5pZm9ybVJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgb3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgIGlmIChvc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihvc3RyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZShpbmZvKTsKKworICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KKworICBmYWlsOgorICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlKGluZm8pOworICAgIFB5X1hERUNSRUYobHN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfY3JsX2RwKFg1MDkgKmNlcnRpZmljYXRlKSB7CisgICAgU1RBQ0tfT0YoRElTVF9QT0lOVCkgKmRwczsKKyAgICBpbnQgaSwgaiwgcmVzdWx0OworICAgIFB5T2JqZWN0ICpsc3Q7CisKKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSIDwgMHgxMDAwMTAwMEwKKyAgICBkcHMgPSBYNTA5X2dldF9leHRfZDJpKGNlcnRpZmljYXRlLCBOSURfY3JsX2Rpc3RyaWJ1dGlvbl9wb2ludHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyNlbHNlCisgICAgLyogQ2FsbHMgeDUwOXYzX2NhY2hlX2V4dGVuc2lvbnMgYW5kIHNldHMgdXAgY3JsZHAgKi8KKyAgICBYNTA5X2NoZWNrX2NhKGNlcnRpZmljYXRlKTsKKyAgICBkcHMgPSBjZXJ0aWZpY2F0ZS0+Y3JsZHA7CisjZW5kaWYKKworICAgIGlmIChkcHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZm9yIChpPTA7IGkgPCBza19ESVNUX1BPSU5UX251bShkcHMpOyBpKyspIHsKKyAgICAgICAgRElTVF9QT0lOVCAqZHA7CisgICAgICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkgKmduczsKKworICAgICAgICBkcCA9IHNrX0RJU1RfUE9JTlRfdmFsdWUoZHBzLCBpKTsKKyAgICAgICAgZ25zID0gZHAtPmRpc3Rwb2ludC0+bmFtZS5mdWxsbmFtZTsKKworICAgICAgICBmb3IgKGo9MDsgaiA8IHNrX0dFTkVSQUxfTkFNRV9udW0oZ25zKTsgaisrKSB7CisgICAgICAgICAgICBHRU5FUkFMX05BTUUgKmduOworICAgICAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvdXJpOworCisgICAgICAgICAgICBnbiA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShnbnMsIGopOworICAgICAgICAgICAgaWYgKGduLT50eXBlICE9IEdFTl9VUkkpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVyaSA9IGduLT5kLnVuaWZvcm1SZXNvdXJjZUlkZW50aWZpZXI7CisgICAgICAgICAgICBvdXJpID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopdXJpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgICAgICBpZiAob3VyaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3VyaSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3VyaSk7CisgICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKIF9kZWNvZGVfY2VydGlmaWNhdGUoWDUwOSAqY2VydGlmaWNhdGUpIHsKIAogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwpAQCAtOTI5LDkgKzExMDAsMTAgQEAKICAgICBQeU9iamVjdCAqaXNzdWVyOwogICAgIFB5T2JqZWN0ICp2ZXJzaW9uOwogICAgIFB5T2JqZWN0ICpzbl9vYmo7CisgICAgUHlPYmplY3QgKm9iajsKICAgICBBU04xX0lOVEVHRVIgKnNlcmlhbE51bWJlcjsKICAgICBjaGFyIGJ1ZlsyMDQ4XTsKLSAgICBpbnQgbGVuOworICAgIGludCBsZW4sIHJlc3VsdDsKICAgICBBU04xX1RJTUUgKm5vdEJlZm9yZSwgKm5vdEFmdGVyOwogICAgIFB5T2JqZWN0ICpwbm90QmVmb3JlLCAqcG5vdEFmdGVyOwogCkBAIC0xMDM3LDYgKzEyMDksNDEgQEAKICAgICAgICAgUHlfREVDUkVGKHBlZXJfYWx0X25hbWVzKTsKICAgICB9CiAKKyAgICAvKiBBdXRob3JpdHkgSW5mb3JtYXRpb24gQWNjZXNzOiBPQ1NQIFVSSXMgKi8KKyAgICBvYmogPSBfZ2V0X2FpYV91cmkoY2VydGlmaWNhdGUsIE5JRF9hZF9PQ1NQKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgIk9DU1AiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvYmogPSBfZ2V0X2FpYV91cmkoY2VydGlmaWNhdGUsIE5JRF9hZF9jYV9pc3N1ZXJzKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9IGVsc2UgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgImNhSXNzdWVycyIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENEUCAoQ1JMIGRpc3RyaWJ1dGlvbiBwb2ludHMpICovCisgICAgb2JqID0gX2dldF9jcmxfZHAoY2VydGlmaWNhdGUpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWwxOworICAgIH0gZWxzZSBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAiY3JsRGlzdHJpYnV0aW9uUG9pbnRzIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCiAgICAgQklPX2ZyZWUoYmlvYnVmKTsKICAgICByZXR1cm4gcmV0dmFsOwogCkBAIC0xMDQ4LDYgKzEyNTUsMjQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK19jZXJ0aWZpY2F0ZV90b19kZXIoWDUwOSAqY2VydGlmaWNhdGUpCit7CisgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKKyAgICBpbnQgbGVuOworICAgIFB5T2JqZWN0ICpyZXR2YWw7CisKKyAgICBieXRlc19idWYgPSBOVUxMOworICAgIGxlbiA9IGkyZF9YNTA5KGNlcnRpZmljYXRlLCAmYnl0ZXNfYnVmKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIC8qIHRoaXMgaXMgYWN0dWFsbHkgYW4gaW1tdXRhYmxlIGJ5dGVzIHNlcXVlbmNlICovCisgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7CisgICAgT1BFTlNTTF9mcmVlKGJ5dGVzX2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3Rlc3RfZGVjb2RlX2NlcnRpZmljYXRlIChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqYXJncykgewpAQCAtMTA5MywzNCArMTMxOCwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5U1NMX3BlZXJjZXJ0KFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICBpbnQgbGVuOwogICAgIGludCB2ZXJpZmljYXRpb247CiAgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHA6cGVlcl9jZXJ0aWZpY2F0ZSIsICZiaW5hcnlfbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKCFzZWxmLT5oYW5kc2hha2VfZG9uZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJoYW5kc2hha2Ugbm90IGRvbmUgeWV0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpZiAoIXNlbGYtPnBlZXJfY2VydCkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAKICAgICBpZiAoYmluYXJ5X21vZGUpIHsKICAgICAgICAgLyogcmV0dXJuIGNlcnQgaW4gREVSLWVuY29kZWQgZm9ybWF0ICovCi0KLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnl0ZXNfYnVmID0gTlVMTDsKLQotICAgICAgICBieXRlc19idWYgPSBOVUxMOwotICAgICAgICBsZW4gPSBpMmRfWDUwOShzZWxmLT5wZWVyX2NlcnQsICZieXRlc19idWYpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgUHlTU0xfU2V0RXJyb3Ioc2VsZiwgbGVuLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgLyogdGhpcyBpcyBhY3R1YWxseSBhbiBpbW11dGFibGUgYnl0ZXMgc2VxdWVuY2UgKi8KLSAgICAgICAgcmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICgoY29uc3QgY2hhciAqKSBieXRlc19idWYsIGxlbik7Ci0gICAgICAgIE9QRU5TU0xfZnJlZShieXRlc19idWYpOwotICAgICAgICByZXR1cm4gcmV0dmFsOwotCisgICAgICAgIHJldHVybiBfY2VydGlmaWNhdGVfdG9fZGVyKHNlbGYtPnBlZXJfY2VydCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdmVyaWZpY2F0aW9uID0gU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoU1NMX2dldF9TU0xfQ1RYKHNlbGYtPnNzbCkpOwogICAgICAgICBpZiAoKHZlcmlmaWNhdGlvbiAmIFNTTF9WRVJJRllfUEVFUikgPT0gMCkKQEAgLTEyMjMsNiArMTQzNyw0MyBAQAogI2VuZGlmCiB9CiAKK3N0YXRpYyBQeVNTTENvbnRleHQgKlB5U1NMX2dldF9jb250ZXh0KFB5U1NMU29ja2V0ICpzZWxmLCB2b2lkICpjbG9zdXJlKSB7CisgICAgUHlfSU5DUkVGKHNlbGYtPmN0eCk7CisgICAgcmV0dXJuIHNlbGYtPmN0eDsKK30KKworc3RhdGljIGludCBQeVNTTF9zZXRfY29udGV4dChQeVNTTFNvY2tldCAqc2VsZiwgUHlPYmplY3QgKnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbG9zdXJlKSB7CisKKyAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHZhbHVlLCAmUHlTU0xDb250ZXh0X1R5cGUpKSB7CisjaWYgIUhBVkVfU05JCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLCAic2V0dGluZyBhIHNvY2tldCdzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYtPmN0eCk7CisgICAgICAgIHNlbGYtPmN0eCA9IChQeVNTTENvbnRleHQgKikgdmFsdWU7CisgICAgICAgIFNTTF9zZXRfU1NMX0NUWChzZWxmLT5zc2wsIHNlbGYtPmN0eC0+Y3R4KTsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJUaGUgdmFsdWUgbXVzdCBiZSBhIFNTTENvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfc2V0X2NvbnRleHRfZG9jLAorIl9zZXR0ZXJfY29udGV4dChjdHgpXG5cCitcCitUaGlzIGNoYW5nZXMgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBTU0xTb2NrZXQuIFRoaXMgaXMgdHlwaWNhbGx5XG5cCit1c2VkIGZyb20gd2l0aGluIGEgY2FsbGJhY2sgZnVuY3Rpb24gc2V0IGJ5IHRoZSBzZXRfc2VydmVybmFtZV9jYWxsYmFja1xuXAorb24gdGhlIFNTTENvbnRleHQgdG8gY2hhbmdlIHRoZSBjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlXG5cCitTU0xTb2NrZXQgYmVmb3JlIHRoZSBjcnlwdG9ncmFwaGljIGV4Y2hhbmdlIGhhbmRzaGFrZSBtZXNzYWdlc1xuIik7CisKKworCiBzdGF0aWMgdm9pZCBQeVNTTF9kZWFsbG9jKFB5U1NMU29ja2V0ICpzZWxmKQogewogICAgIGlmIChzZWxmLT5wZWVyX2NlcnQpICAgICAgICAvKiBQb3NzaWJsZSBub3QgdG8gaGF2ZSBvbmU/ICovCkBAIC0xMjMwLDYgKzE0ODEsNyBAQAogICAgIGlmIChzZWxmLT5zc2wpCiAgICAgICAgIFNTTF9mcmVlKHNlbGYtPnNzbCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5Tb2NrZXQpOworICAgIFB5X1hERUNSRUYoc2VsZi0+Y3R4KTsKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEyODgsOSArMTU0MCwxMSBAQAogICAgIC8qIFNlZSBpZiB0aGUgc29ja2V0IGlzIHJlYWR5ICovCiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGlmICh3cml0aW5nKQotICAgICAgICByYyA9IHNlbGVjdChzLT5zb2NrX2ZkKzEsIE5VTEwsICZmZHMsIE5VTEwsICZ0dik7CisgICAgICAgIHJjID0gc2VsZWN0KFB5X1NBRkVfRE9XTkNBU1Qocy0+c29ja19mZCsxLCBTT0NLRVRfVCwgaW50KSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgJmZkcywgTlVMTCwgJnR2KTsKICAgICBlbHNlCi0gICAgICAgIHJjID0gc2VsZWN0KHMtPnNvY2tfZmQrMSwgJmZkcywgTlVMTCwgTlVMTCwgJnR2KTsKKyAgICAgICAgcmMgPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAorICAgICAgICAgICAgICAgICAgICAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCiAKICNpZmRlZiBIQVZFX1BPTEwKQEAgLTE2NzAsNiArMTkyNCwxMiBAQAogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX0ZJTklTSEVEICovCiAKK3N0YXRpYyBQeUdldFNldERlZiBzc2xfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY29udGV4dCIsIChnZXR0ZXIpIFB5U1NMX2dldF9jb250ZXh0LAorICAgICAgICAgICAgICAgIChzZXR0ZXIpIFB5U1NMX3NldF9jb250ZXh0LCBQeVNTTF9zZXRfY29udGV4dF9kb2N9LAorICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIFB5U1NMTWV0aG9kc1tdID0gewogICAgIHsiZG9faGFuZHNoYWtlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTGRvX2hhbmRzaGFrZSwgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMd3JpdGUsIE1FVEhfVkFSQVJHUywKQEAgLTE3MjQsNiArMTk4NCw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBQeVNTTE1ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgc3NsX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogfTsKIAogCkBAIC0xNzQ3LDYgKzIwMDksMTIgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMSkKICAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfbWV0aG9kKCkpOworI2lmIEhBVkVfVExTdjFfMgorICAgIGVsc2UgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMV8xKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV8xX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMikKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMl9tZXRob2QoKSk7CisjZW5kaWYKICAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDMpCiAgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYzX21ldGhvZCgpKTsKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCkBAIC0xNzgwLDYgKzIwNDgsMTEgQEAKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgc2VsZi0+bnBuX3Byb3RvY29scyA9IE5VTEw7CiAjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBzZWxmLT5zZXRfaG9zdG5hbWUgPSBOVUxMOworI2VuZGlmCisgICAgLyogRG9uJ3QgY2hlY2sgaG9zdCBuYW1lIGJ5IGRlZmF1bHQgKi8KKyAgICBzZWxmLT5jaGVja19ob3N0bmFtZSA9IDA7CiAgICAgLyogRGVmYXVsdHMgKi8KICAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc2VsZi0+Y3R4LCBTU0xfVkVSSUZZX05PTkUsIE5VTEwpOwogICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc2VsZi0+Y3R4LApAQCAtMTc5Myw5ICsyMDY2LDI4IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKK3N0YXRpYyBpbnQKK2NvbnRleHRfdHJhdmVyc2UoUHlTU0xDb250ZXh0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyNpZm5kZWYgT1BFTlNTTF9OT19UTFNFWFQKKyAgICBQeV9WSVNJVChzZWxmLT5zZXRfaG9zdG5hbWUpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NvbnRleHRfY2xlYXIoUHlTU0xDb250ZXh0ICpzZWxmKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X0NMRUFSKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQKIGNvbnRleHRfZGVhbGxvYyhQeVNTTENvbnRleHQgKnNlbGYpCiB7CisgICAgY29udGV4dF9jbGVhcihzZWxmKTsKICAgICBTU0xfQ1RYX2ZyZWUoc2VsZi0+Y3R4KTsKICNpZmRlZiBPUEVOU1NMX05QTl9ORUdPVElBVEVECiAgICAgUHlNZW1fRnJlZShzZWxmLT5ucG5fcHJvdG9jb2xzKTsKQEAgLTE5NDIsMTAgKzIyMzQsNTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIGZvciB2ZXJpZnlfbW9kZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGlmIChtb2RlID09IFNTTF9WRVJJRllfTk9ORSAmJiBzZWxmLT5jaGVja19ob3N0bmFtZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc2V0IHZlcmlmeV9tb2RlIHRvIENFUlRfTk9ORSB3aGVuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSBpcyBlbmFibGVkLiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzZWxmLT5jdHgsIG1vZGUsIE5VTEwpOwogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgSEFWRV9PUEVOU1NMX1ZFUklGWV9QQVJBTQorc3RhdGljIFB5T2JqZWN0ICoKK2dldF92ZXJpZnlfZmxhZ3MoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmbGFncyA9IFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhzdG9yZS0+cGFyYW0pOworICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF92ZXJpZnlfZmxhZ3MoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCB2b2lkICpjKQoreworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBmbGFncywgc2V0LCBjbGVhcjsKKworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiayIsICZuZXdfZmxhZ3MpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZmxhZ3MgPSBYNTA5X1ZFUklGWV9QQVJBTV9nZXRfZmxhZ3Moc3RvcmUtPnBhcmFtKTsKKyAgICBjbGVhciA9IGZsYWdzICYgfm5ld19mbGFnczsKKyAgICBzZXQgPSB+ZmxhZ3MgJiBuZXdfZmxhZ3M7CisgICAgaWYgKGNsZWFyKSB7CisgICAgICAgIGlmICghWDUwOV9WRVJJRllfUEFSQU1fY2xlYXJfZmxhZ3Moc3RvcmUtPnBhcmFtLCBjbGVhcikpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChzZXQpIHsKKyAgICAgICAgaWYgKCFYNTA5X1ZFUklGWV9QQVJBTV9zZXRfZmxhZ3Moc3RvcmUtPnBhcmFtLCBzZXQpKSB7CisgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X29wdGlvbnMoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQogewpAQCAtMTk3NSw2ICsyMzEzLDMwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfY2hlY2tfaG9zdG5hbWUoUHlTU0xDb250ZXh0ICpzZWxmLCB2b2lkICpjKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoc2VsZi0+Y2hlY2tfaG9zdG5hbWUpOworfQorCitzdGF0aWMgaW50CitzZXRfY2hlY2tfaG9zdG5hbWUoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCB2b2lkICpjKQoreworICAgIGludCBjaGVja19ob3N0bmFtZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGFyZywgInAiLCAmY2hlY2tfaG9zdG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKGNoZWNrX2hvc3RuYW1lICYmCisgICAgICAgICAgICBTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZShzZWxmLT5jdHgpID09IFNTTF9WRVJJRllfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjaGVja19ob3N0bmFtZSBuZWVkcyBhIFNTTCBjb250ZXh0IHdpdGggZWl0aGVyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5jaGVja19ob3N0bmFtZSA9IGNoZWNrX2hvc3RuYW1lOworICAgIHJldHVybiAwOworfQorCisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeVRocmVhZFN0YXRlICp0aHJlYWRfc3RhdGU7CiAgICAgUHlPYmplY3QgKmNhbGxhYmxlOwpAQCAtMjAxOSw4ICsyMzgxLDggQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLSAgICBmcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKLSAgICBwd19pbmZvLT5wYXNzd29yZCA9IG1hbGxvYyhzaXplKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8tPnBhc3N3b3JkKTsKKyAgICBwd19pbmZvLT5wYXNzd29yZCA9IFB5TWVtX01hbGxvYyhzaXplKTsKICAgICBpZiAoIXB3X2luZm8tPnBhc3N3b3JkKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gYWxsb2NhdGUgcGFzc3dvcmQgYnVmZmVyIik7CkBAIC0yMTY0LDcyICsyNTI2LDIxMiBAQAogICAgIH0KICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYihzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX2NiKTsKICAgICBTU0xfQ1RYX3NldF9kZWZhdWx0X3Bhc3N3ZF9jYl91c2VyZGF0YShzZWxmLT5jdHgsIG9yaWdfcGFzc3dkX3VzZXJkYXRhKTsKLSAgICBmcmVlKHB3X2luZm8ucGFzc3dvcmQpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby5wYXNzd29yZCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiAKIGVycm9yOgogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9YREVDUkVGKGtleWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2VydGZpbGVfYnl0ZXMpOwogICAgIHJldHVybiBOVUxMOwogfQogCisvKiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24sIHJldHVybnMgLTEgb24gZXJyb3IKKyAqLworc3RhdGljIGludAorX2FkZF9jYV9jZXJ0cyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmRhdGEsIFB5X3NzaXplX3QgbGVuLAorICAgICAgICAgICAgICBpbnQgZmlsZXR5cGUpCit7CisgICAgQklPICpiaW9idWYgPSBOVUxMOworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIGludCByZXR2YWwgPSAwLCBlcnIsIGxvYWRlZCA9IDA7CisKKyAgICBhc3NlcnQoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEgfHwgZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSk7CisKKyAgICBpZiAobGVuIDw9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiRW1wdHkgY2VydGlmaWNhdGUgZGF0YSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmIChsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNlcnRpZmljYXRlIGRhdGEgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBiaW9idWYgPSBCSU9fbmV3X21lbV9idWYoZGF0YSwgKGludClsZW4pOworICAgIGlmIChiaW9idWYgPT0gTlVMTCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoIkNhbid0IGFsbG9jYXRlIGJ1ZmZlciIsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBhc3NlcnQoc3RvcmUgIT0gTlVMTCk7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBYNTA5ICpjZXJ0ID0gTlVMTDsKKyAgICAgICAgaW50IHI7CisKKyAgICAgICAgaWYgKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xKSB7CisgICAgICAgICAgICBjZXJ0ID0gZDJpX1g1MDlfYmlvKGJpb2J1ZiwgTlVMTCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjZXJ0ID0gUEVNX3JlYWRfYmlvX1g1MDkoYmlvYnVmLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmN0eC0+ZGVmYXVsdF9wYXNzd2RfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFja191c2VyZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNlcnQgPT0gTlVMTCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgciA9IFg1MDlfU1RPUkVfYWRkX2NlcnQoc3RvcmUsIGNlcnQpOworICAgICAgICBYNTA5X2ZyZWUoY2VydCk7CisgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgZXJyID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgICAgICAgICAgaWYgKChFUlJfR0VUX0xJQihlcnIpID09IEVSUl9MSUJfWDUwOSkgJiYKKyAgICAgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBYNTA5X1JfQ0VSVF9BTFJFQURZX0lOX0hBU0hfVEFCTEUpKSB7CisgICAgICAgICAgICAgICAgLyogY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICAgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBsb2FkZWQrKzsKKyAgICB9CisKKyAgICBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgaWYgKChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSkgJiYKKyAgICAgICAgICAgIChsb2FkZWQgPiAwKSAmJgorICAgICAgICAgICAgKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9BU04xKSAmJgorICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gQVNOMV9SX0hFQURFUl9UT09fTE9ORykpIHsKKyAgICAgICAgLyogRU9GIEFTTjEgZmlsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgIEVSUl9jbGVhcl9lcnJvcigpOworICAgICAgICByZXR2YWwgPSAwOworICAgIH0gZWxzZSBpZiAoKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9QRU0pICYmCisgICAgICAgICAgICAgICAgICAgKGxvYWRlZCA+IDApICYmCisgICAgICAgICAgICAgICAgICAgKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9QRU0pICYmCisgICAgICAgICAgICAgICAgICAgKEVSUl9HRVRfUkVBU09OKGVycikgPT0gUEVNX1JfTk9fU1RBUlRfTElORSkpIHsKKyAgICAgICAgLyogRU9GIFBFTSBmaWxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHZhbCA9IC0xOworICAgIH0KKworICAgIEJJT19mcmVlKGJpb2J1Zik7CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZF92ZXJpZnlfbG9jYXRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotICAgIGNoYXIgKmt3bGlzdFtdID0geyJjYWZpbGUiLCAiY2FwYXRoIiwgTlVMTH07Ci0gICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMOworICAgIGNoYXIgKmt3bGlzdFtdID0geyJjYWZpbGUiLCAiY2FwYXRoIiwgImNhZGF0YSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpjYWZpbGUgPSBOVUxMLCAqY2FwYXRoID0gTlVMTCwgKmNhZGF0YSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmNhZmlsZV9ieXRlcyA9IE5VTEwsICpjYXBhdGhfYnl0ZXMgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmNhZmlsZV9idWYgPSBOVUxMLCAqY2FwYXRoX2J1ZiA9IE5VTEw7Ci0gICAgaW50IHI7CisgICAgaW50IHIgPSAwLCBvayA9IDE7CiAKICAgICBlcnJubyA9IDA7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywKLSAgICAgICAgInxPTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCi0gICAgICAgICZjYWZpbGUsICZjYXBhdGgpKQorICAgICAgICAifE9PTzpsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCBrd2xpc3QsCisgICAgICAgICZjYWZpbGUsICZjYXBhdGgsICZjYWRhdGEpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmIChjYWZpbGUgPT0gUHlfTm9uZSkKICAgICAgICAgY2FmaWxlID0gTlVMTDsKICAgICBpZiAoY2FwYXRoID09IFB5X05vbmUpCiAgICAgICAgIGNhcGF0aCA9IE5VTEw7Ci0gICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMKSB7CisgICAgaWYgKGNhZGF0YSA9PSBQeV9Ob25lKQorICAgICAgICBjYWRhdGEgPSBOVUxMOworCisgICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMICYmIGNhZGF0YSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIGFuZCBjYXBhdGggY2Fubm90IGJlIGJvdGggb21pdHRlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUsIGNhcGF0aCBhbmQgY2FkYXRhIGNhbm5vdCBiZSBhbGwgb21pdHRlZCIpOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoY2FmaWxlICYmICFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoY2FmaWxlLCAmY2FmaWxlX2J5dGVzKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSBzaG91bGQgYmUgYSB2YWxpZCBmaWxlc3lzdGVtIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjYXBhdGggJiYgIVB5VW5pY29kZV9GU0NvbnZlcnRlcihjYXBhdGgsICZjYXBhdGhfYnl0ZXMpKSB7Ci0gICAgICAgIFB5X1hERUNSRUYoY2FmaWxlX2J5dGVzKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjYXBhdGggc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoY2FmaWxlKQotICAgICAgICBjYWZpbGVfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FmaWxlX2J5dGVzKTsKLSAgICBpZiAoY2FwYXRoKQotICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKLSAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgciA9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNlbGYtPmN0eCwgY2FmaWxlX2J1ZiwgY2FwYXRoX2J1Zik7Ci0gICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIC8qIHZhbGlkYXRhIGNhZGF0YSB0eXBlIGFuZCBsb2FkIGNhZGF0YSAqLworICAgIGlmIChjYWRhdGEpIHsKKyAgICAgICAgUHlfYnVmZmVyIGJ1ZjsKKyAgICAgICAgUHlPYmplY3QgKmNhZGF0YV9hc2NpaSA9IE5VTEw7CisKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihjYWRhdGEsICZidWYsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoJmJ1ZiwgJ0MnKSB8fCBidWYubmRpbSA+IDEpIHsKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYWRhdGEgc2hvdWxkIGJlIGEgY29udGlndW91cyBidWZmZXIgd2l0aCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHNpbmdsZSBkaW1lbnNpb24iKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgciA9IF9hZGRfY2FfY2VydHMoc2VsZiwgYnVmLmJ1ZiwgYnVmLmxlbiwgU1NMX0ZJTEVUWVBFX0FTTjEpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKKyAgICAgICAgICAgIGlmIChyID09IC0xKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBjYWRhdGFfYXNjaWkgPSBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhjYWRhdGEpOworICAgICAgICAgICAgaWYgKGNhZGF0YV9hc2NpaSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhZGF0YSBzaG91bGQgYmUgYSBBU0NJSSBzdHJpbmcgb3IgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcy1saWtlIG9iamVjdCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgUHlfREVDUkVGKGNhZGF0YV9hc2NpaSk7CisgICAgICAgICAgICBpZiAociA9PSAtMSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBsb2FkIGNhZmlsZSBvciBjYXBhdGggKi8KKyAgICBpZiAoY2FmaWxlIHx8IGNhcGF0aCkgeworICAgICAgICBpZiAoY2FmaWxlKQorICAgICAgICAgICAgY2FmaWxlX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhZmlsZV9ieXRlcyk7CisgICAgICAgIGlmIChjYXBhdGgpCisgICAgICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKKyAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKKyAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHIgIT0gMSkgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgaWYgKGVycm5vICE9IDApIHsKKyAgICAgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZ290byBlbmQ7CisKKyAgZXJyb3I6CisgICAgb2sgPSAwOworICBlbmQ6CiAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2FwYXRoX2J5dGVzKTsKLSAgICBpZiAociAhPSAxKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSAwKSB7Ci0gICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICB9CisgICAgaWYgKG9rKSB7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIyMzgsNyArMjc0MCw3IEBACiAgICAgRklMRSAqZjsKICAgICBESCAqZGg7CiAKLSAgICBmID0gX1B5X2ZvcGVuKGZpbGVwYXRoLCAicmIiKTsKKyAgICBmID0gX1B5X2ZvcGVuX29iaihmaWxlcGF0aCwgInJiIik7CiAgICAgaWYgKGYgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgZmlsZXBhdGgpOwpAQCAtMjI4Niw3ICsyNzg4LDcgQEAKICAgICAgICAgICAgICZzb2NrLCAmc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAiaWRuYSIsICZob3N0bmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNpZm5kZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmICFIQVZFX1NOSQogICAgICAgICBQeU1lbV9GcmVlKGhvc3RuYW1lKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzZXJ2ZXJfaG9zdG5hbWUgaXMgbm90IHN1cHBvcnRlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgeW91ciBPcGVuU1NMIGxpYnJhcnkiKTsKQEAgLTIyOTQsNyArMjc5Niw3IEBACiAjZW5kaWYKICAgICB9CiAKLSAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZi0+Y3R4LCBzb2NrLCBzZXJ2ZXJfc2lkZSwKKyAgICByZXMgPSAoUHlPYmplY3QgKikgbmV3UHlTU0xTb2NrZXQoc2VsZiwgc29jaywgc2VydmVyX3NpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RuYW1lKTsKICAgICBpZiAoaG9zdG5hbWUgIT0gTlVMTCkKICAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7CkBAIC0yMzc5LDkgKzI4ODEsMjU5IEBACiB9CiAjZW5kaWYKIAorI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorc3RhdGljIGludAorX3NlcnZlcm5hbWVfY2FsbGJhY2soU1NMICpzLCBpbnQgKmFsLCB2b2lkICphcmdzKQoreworICAgIGludCByZXQ7CisgICAgUHlTU0xDb250ZXh0ICpzc2xfY3R4ID0gKFB5U1NMQ29udGV4dCAqKSBhcmdzOworICAgIFB5U1NMU29ja2V0ICpzc2w7CisgICAgUHlPYmplY3QgKnNlcnZlcm5hbWVfbzsKKyAgICBQeU9iamVjdCAqc2VydmVybmFtZV9pZG5hOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgLyogVGhlIGhpZ2gtbGV2ZWwgc3NsLlNTTFNvY2tldCBvYmplY3QgKi8KKyAgICBQeU9iamVjdCAqc3NsX3NvY2tldDsKKyAgICBjb25zdCBjaGFyICpzZXJ2ZXJuYW1lID0gU1NMX2dldF9zZXJ2ZXJuYW1lKHMsIFRMU0VYVF9OQU1FVFlQRV9ob3N0X25hbWUpOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisKKyAgICBpZiAoc3NsX2N0eC0+c2V0X2hvc3RuYW1lID09IE5VTEwpIHsKKyAgICAgICAgLyogcmVtb3ZlIHJhY2UgY29uZGl0aW9uIGluIHRoaXMgdGhlIGNhbGwgYmFjayB3aGlsZSBpZiByZW1vdmluZyB0aGUKKyAgICAgICAgICogY2FsbGJhY2sgaXMgaW4gcHJvZ3Jlc3MgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgfQorCisgICAgc3NsID0gU1NMX2dldF9hcHBfZGF0YShzKTsKKyAgICBhc3NlcnQoUHlTU0xTb2NrZXRfQ2hlY2soc3NsKSk7CisgICAgc3NsX3NvY2tldCA9IFB5V2Vha3JlZl9HZXRPYmplY3Qoc3NsLT5Tb2NrZXQpOworICAgIFB5X0lOQ1JFRihzc2xfc29ja2V0KTsKKyAgICBpZiAoc3NsX3NvY2tldCA9PSBQeV9Ob25lKSB7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgaWYgKHNlcnZlcm5hbWUgPT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lLCBzc2xfY3R4LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlcnZlcm5hbWVfbyA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhzZXJ2ZXJuYW1lKTsKKyAgICAgICAgaWYgKHNlcnZlcm5hbWVfbyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoKFB5T2JqZWN0ICopIHNzbF9jdHgpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Qoc2VydmVybmFtZV9vLCAiaWRuYSIsIE5VTEwpOworICAgICAgICBpZiAoc2VydmVybmFtZV9pZG5hID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZXJ2ZXJuYW1lX28pOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfbyk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX28pOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHNzbF9jdHgtPnNldF9ob3N0bmFtZSwgc3NsX3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJuYW1lX2lkbmEsIHNzbF9jdHgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9pZG5hKTsKKyAgICB9CisgICAgUHlfREVDUkVGKHNzbF9zb2NrZXQpOworCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzc2xfY3R4LT5zZXRfaG9zdG5hbWUpOworICAgICAgICAqYWwgPSBTU0xfQURfSEFORFNIQUtFX0ZBSUxVUkU7CisgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICAqYWwgPSAoaW50KSBQeUxvbmdfQXNMb25nKHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShyZXN1bHQpOworICAgICAgICAgICAgICAgICphbCA9IFNTTF9BRF9JTlRFUk5BTF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfT0s7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzc2xfc29ja2V0KTsKKyAgICAqYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisgICAgcmV0ID0gU1NMX1RMU0VYVF9FUlJfQUxFUlRfRkFUQUw7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ3N0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYKKworUHlEb2NfU1RSVkFSKFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvYywKKyJzZXRfc2VydmVybmFtZV9jYWxsYmFjayhtZXRob2QpXG5cCitcblwKK1RoaXMgc2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIHNlcnZlciBuYW1lIGlzIHByb3ZpZGVkIGJ5XG5cCit0aGUgU1NML1RMUyBjbGllbnQgaW4gdGhlIFNOSSBleHRlbnNpb24uXG5cCitcblwKK0lmIHRoZSBhcmd1bWVudCBpcyBOb25lIHRoZW4gdGhlIGNhbGxiYWNrIGlzIGRpc2FibGVkLiBUaGUgbWV0aG9kIGlzIGNhbGxlZFxuXAord2l0aCB0aGUgU1NMU29ja2V0LCB0aGUgc2VydmVyIG5hbWUgYXMgYSBzdHJpbmcsIGFuZCB0aGUgU1NMQ29udGV4dCBvYmplY3QuXG5cCitTZWUgUkZDIDYwNjYgZm9yIGRldGFpbHMgb2YgdGhlIFNOSSBleHRlbnNpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXRfc2VydmVybmFtZV9jYWxsYmFjayhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworI2lmIEhBVkVfU05JICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fVExTRVhUKQorICAgIFB5T2JqZWN0ICpjYjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZjYikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyAgICBpZiAoY2IgPT0gUHlfTm9uZSkgeworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIE5VTEwpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFQeUNhbGxhYmxlX0NoZWNrKGNiKSkgeworICAgICAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBOVUxMKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNhbGxhYmxlIG9iamVjdCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfSU5DUkVGKGNiKTsKKyAgICAgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gY2I7CisgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgX3NlcnZlcm5hbWVfY2FsbGJhY2spOworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9hcmcoc2VsZi0+Y3R4LCBzZWxmKTsKKyAgICB9CisgICAgUHlfUkVUVVJOX05PTkU7CisjZWxzZQorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAiVGhlIFRMUyBleHRlbnNpb24gc2VydmVybmFtZSBjYWxsYmFjaywgIgorICAgICAgICAgICAgICAgICAgICAiU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgImlzIG5vdCBpbiB0aGUgY3VycmVudCBPcGVuU1NMIGxpYnJhcnkuIik7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9zdGF0c19kb2MsCisiY2VydF9zdG9yZV9zdGF0cygpIC0+IHsnY3JsJzogaW50LCAneDUwOV9jYSc6IGludCwgJ3g1MDknOiBpbnR9XG5cCitcblwKK1JldHVybnMgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLiBYLjUwOSBjZXJ0aWZpY2F0ZXMgd2l0aCBhXG5cCitDQSBleHRlbnNpb24gYW5kIGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgaW5zaWRlIHRoZSBjb250ZXh0J3MgY2VydFxuXAorc3RvcmUuXG5cCitOT1RFOiBDZXJ0aWZpY2F0ZXMgaW4gYSBjYXBhdGggZGlyZWN0b3J5IGFyZW4ndCBsb2FkZWQgdW5sZXNzIHRoZXkgaGF2ZVxuXAorYmVlbiB1c2VkIGF0IGxlYXN0IG9uY2UuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjZXJ0X3N0b3JlX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZikKK3sKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICBYNTA5X09CSkVDVCAqb2JqOworICAgIGludCB4NTA5ID0gMCwgY3JsID0gMCwgcGtleSA9IDAsIGNhID0gMCwgaTsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZvciAoaSA9IDA7IGkgPCBza19YNTA5X09CSkVDVF9udW0oc3RvcmUtPm9ianMpOyBpKyspIHsKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBzd2l0Y2ggKG9iai0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX1g1MDk6CisgICAgICAgICAgICAgICAgeDUwOSsrOworICAgICAgICAgICAgICAgIGlmIChYNTA5X2NoZWNrX2NhKG9iai0+ZGF0YS54NTA5KSkgeworICAgICAgICAgICAgICAgICAgICBjYSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9DUkw6CisgICAgICAgICAgICAgICAgY3JsKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfUEtFWToKKyAgICAgICAgICAgICAgICBwa2V5Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8qIElnbm9yZSBYNTA5X0xVX0ZBSUwsIFg1MDlfTFVfUkVUUlksIFg1MDlfTFVfUEtFWS4KKyAgICAgICAgICAgICAgICAgKiBBcyBmYXIgYXMgSSBjYW4gdGVsbCB0aGV5IGFyZSBpbnRlcm5hbCBzdGF0ZXMgYW5kIG5ldmVyCisgICAgICAgICAgICAgICAgICogc3RvcmVkIGluIGEgY2VydCBzdG9yZSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJ7c2lzaXNpfSIsICJ4NTA5IiwgeDUwOSwgImNybCIsIGNybCwKKyAgICAgICAgIng1MDlfY2EiLCBjYSk7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfY2FfY2VydHNfZG9jLAorImdldF9jYV9jZXJ0cyhiaW5hcnlfZm9ybT1GYWxzZSkgLT4gbGlzdCBvZiBsb2FkZWQgY2VydGlmaWNhdGVcblwKK1xuXAorUmV0dXJucyBhIGxpc3Qgb2YgZGljdHMgd2l0aCBpbmZvcm1hdGlvbiBvZiBsb2FkZWQgQ0EgY2VydHMuIElmIHRoZVxuXAorb3B0aW9uYWwgYXJndW1lbnQgaXMgVHJ1ZSwgcmV0dXJucyBhIERFUi1lbmNvZGVkIGNvcHkgb2YgdGhlIENBIGNlcnRpZmljYXRlLlxuXAorTk9URTogQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcblwKK2JlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJiaW5hcnlfZm9ybSIsIE5VTEx9OworICAgIFg1MDlfU1RPUkUgKnN0b3JlOworICAgIFB5T2JqZWN0ICpjaSA9IE5VTEwsICpybGlzdCA9IE5VTEw7CisgICAgaW50IGk7CisgICAgaW50IGJpbmFyeV9tb2RlID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8cDpnZXRfY2FfY2VydHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmJpbmFyeV9tb2RlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoKHJsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIFg1MDlfT0JKRUNUICpvYmo7CisgICAgICAgIFg1MDkgKmNlcnQ7CisKKyAgICAgICAgb2JqID0gc2tfWDUwOV9PQkpFQ1RfdmFsdWUoc3RvcmUtPm9ianMsIGkpOworICAgICAgICBpZiAob2JqLT50eXBlICE9IFg1MDlfTFVfWDUwOSkgeworICAgICAgICAgICAgLyogbm90IGEgeDUwOSBjZXJ0ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBDQSBmb3IgYW55IHB1cnBvc2UgKi8KKyAgICAgICAgY2VydCA9IG9iai0+ZGF0YS54NTA5OworICAgICAgICBpZiAoIVg1MDlfY2hlY2tfY2EoY2VydCkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChiaW5hcnlfbW9kZSkgeworICAgICAgICAgICAgY2kgPSBfY2VydGlmaWNhdGVfdG9fZGVyKGNlcnQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2kgPSBfZGVjb2RlX2NlcnRpZmljYXRlKGNlcnQpOworICAgICAgICB9CisgICAgICAgIGlmIChjaSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJsaXN0LCBjaSkgPT0gLTEpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoY2kpOworICAgIH0KKyAgICByZXR1cm4gcmxpc3Q7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihjaSk7CisgICAgUHlfWERFQ1JFRihybGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogc3RhdGljIFB5R2V0U2V0RGVmIGNvbnRleHRfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY2hlY2tfaG9zdG5hbWUiLCAoZ2V0dGVyKSBnZXRfY2hlY2tfaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9jaGVja19ob3N0bmFtZSwgTlVMTH0sCiAgICAgeyJvcHRpb25zIiwgKGdldHRlcikgZ2V0X29wdGlvbnMsCiAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X29wdGlvbnMsIE5VTEx9LAorI2lmZGVmIEhBVkVfT1BFTlNTTF9WRVJJRllfUEFSQU0KKyAgICB7InZlcmlmeV9mbGFncyIsIChnZXR0ZXIpIGdldF92ZXJpZnlfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X2ZsYWdzLCBOVUxMfSwKKyNlbmRpZgogICAgIHsidmVyaWZ5X21vZGUiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X21vZGUsCiAgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF92ZXJpZnlfbW9kZSwgTlVMTH0sCiAgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yNDA4LDYgKzMxNjAsMTIgQEAKICAgICB7InNldF9lY2RoX2N1cnZlIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfZWNkaF9jdXJ2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9PLCBOVUxMfSwKICNlbmRpZgorICAgIHsic2V0X3NlcnZlcm5hbWVfY2FsbGJhY2siLCAoUHlDRnVuY3Rpb24pIHNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsIFB5U1NMX3NldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrX2RvY30sCisgICAgeyJjZXJ0X3N0b3JlX3N0YXRzIiwgKFB5Q0Z1bmN0aW9uKSBjZXJ0X3N0b3JlX3N0YXRzLAorICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgUHlTU0xfZ2V0X3N0YXRzX2RvY30sCisgICAgeyJnZXRfY2FfY2VydHMiLCAoUHlDRnVuY3Rpb24pIGdldF9jYV9jZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgUHlTU0xfZ2V0X2NhX2NlcnRzX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjQzMSwxMCArMzE4OSwxMCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgLyp0cF9mbGFncyovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywgLyp0cF9mbGFncyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgICh0cmF2ZXJzZXByb2MpIGNvbnRleHRfdHJhdmVyc2UsICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAoaW5xdWlyeSkgY29udGV4dF9jbGVhciwgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KQEAgLTI1ODQsNyArMzM0MiwzODQgQEAKICNlbmRpZiAvKiBIQVZFX09QRU5TU0xfUkFORCAqLwogCiAKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfZG9jLAorImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpIC0+IHR1cGxlXG5cCitcblwKK1JldHVybiBzZWFyY2ggcGF0aHMgYW5kIGVudmlyb25tZW50IHZhcnMgdGhhdCBhcmUgdXNlZCBieSBTU0xDb250ZXh0J3NcblwKK3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpIHRvIGxvYWQgZGVmYXVsdCBDQXMuIFRoZSB2YWx1ZXMgYXJlXG5cCisnY2VydF9maWxlX2VudicsICdjZXJ0X2ZpbGUnLCAnY2VydF9kaXJfZW52JywgJ2NlcnRfZGlyJy4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqb2ZpbGVfZW52ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2ZpbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZGlyX2VudiA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9kaXIgPSBOVUxMOworCisjZGVmaW5lIGNvbnZlcnQoaW5mbywgdGFyZ2V0KSB7IFwKKyAgICAgICAgY29uc3QgY2hhciAqdG1wID0gKGluZm8pOyBcCisgICAgICAgIHRhcmdldCA9IE5VTEw7IFwKKyAgICAgICAgaWYgKCF0bXApIHsgUHlfSU5DUkVGKFB5X05vbmUpOyB0YXJnZXQgPSBQeV9Ob25lOyB9IFwKKyAgICAgICAgZWxzZSBpZiAoKHRhcmdldCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQodG1wKSkgPT0gTlVMTCkgeyBcCisgICAgICAgICAgICB0YXJnZXQgPSBQeUJ5dGVzX0Zyb21TdHJpbmcodG1wKTsgfSBcCisgICAgICAgIGlmICghdGFyZ2V0KSBnb3RvIGVycm9yOyBcCisgICAgfSB3aGlsZSgwKQorCisgICAgY29udmVydChYNTA5X2dldF9kZWZhdWx0X2NlcnRfZmlsZV9lbnYoKSwgb2ZpbGVfZW52KTsKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlKCksIG9maWxlKTsKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXJfZW52KCksIG9kaXJfZW52KTsKKyAgICBjb252ZXJ0KFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9kaXIoKSwgb2Rpcik7CisjdW5kZWYgY29udmVydAorCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5OTk4iLCBvZmlsZV9lbnYsIG9maWxlLCBvZGlyX2Vudiwgb2Rpcik7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihvZmlsZV9lbnYpOworICAgIFB5X1hERUNSRUYob2ZpbGUpOworICAgIFB5X1hERUNSRUYob2Rpcl9lbnYpOworICAgIFB5X1hERUNSRUYob2Rpcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2FzbjFvYmoycHkoQVNOMV9PQkpFQ1QgKm9iaikKK3sKKyAgICBpbnQgbmlkOworICAgIGNvbnN0IGNoYXIgKmxuLCAqc247CisgICAgY2hhciBidWZbMTAwXTsKKyAgICBpbnQgYnVmbGVuOworCisgICAgbmlkID0gT0JKX29iajJuaWQob2JqKTsKKyAgICBpZiAobmlkID09IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIlVua25vd24gb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzbiA9IE9CSl9uaWQyc24obmlkKTsKKyAgICBsbiA9IE9CSl9uaWQybG4obmlkKTsKKyAgICBidWZsZW4gPSBPQkpfb2JqMnR4dChidWYsIHNpemVvZihidWYpLCBvYmosIDEpOworICAgIGlmIChidWZsZW4gPCAwKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGJ1ZmxlbikgeworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaXNzcyMiLCBuaWQsIHNuLCBsbiwgYnVmLCBidWZsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpc3NPIiwgbmlkLCBzbiwgbG4sIFB5X05vbmUpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3R4dDJvYmpfZG9jLAorInR4dDJvYmoodHh0LCBuYW1lPUZhbHNlKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNULiBCeSBkZWZhdWx0XG5cCitvYmplY3RzIGFyZSBsb29rZWQgdXAgYnkgT0lELiBXaXRoIG5hbWU9VHJ1ZSBzaG9ydCBhbmQgbG9uZyBuYW1lIGFyZSBhbHNvXG5cCittYXRjaGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitQeVNTTF90eHQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InR4dCIsICJuYW1lIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgY2hhciAqdHh0OworICAgIGludCBuYW1lID0gMDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8cDp0eHQyb2JqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0eHQsICZuYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX3R4dDJvYmoodHh0LCBuYW1lID8gMCA6IDEpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gb2JqZWN0ICclLjEwMHMnIiwgdHh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IGFzbjFvYmoycHkob2JqKTsKKyAgICBBU04xX09CSkVDVF9mcmVlKG9iaik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX25pZDJvYmpfZG9jLAorIm5pZDJvYmoobmlkKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNUIGJ5IE5JRC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorUHlTU0xfbmlkMm9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaW50IG5pZDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm5pZDJvYmoiLCAmbmlkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG5pZCA8IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk5JRCBtdXN0IGJlIHBvc2l0aXZlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX25pZDJvYmoobmlkKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAlaSIsIG5pZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBhc24xb2JqMnB5KG9iaik7CisgICAgQVNOMV9PQkpFQ1RfZnJlZShvYmopOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorCitzdGF0aWMgUHlPYmplY3QqCitjZXJ0RW5jb2RpbmdUeXBlKERXT1JEIGVuY29kaW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKng1MDlfYXNuID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKnBrY3NfN19hc24gPSBOVUxMOworCisgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpIHsKKyAgICAgICAgeDUwOV9hc24gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygieDUwOV9hc24iKTsKKyAgICAgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkgeworICAgICAgICBwa2NzXzdfYXNuID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoInBrY3NfN19hc24iKTsKKyAgICAgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzd2l0Y2goZW5jb2RpbmdUeXBlKSB7CisgICAgY2FzZSBYNTA5X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHg1MDlfYXNuKTsKKyAgICAgICAgcmV0dXJuIHg1MDlfYXNuOworICAgIGNhc2UgUEtDU183X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHBrY3NfN19hc24pOworICAgICAgICByZXR1cm4gcGtjc183X2FzbjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGVuY29kaW5nVHlwZSk7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QqCitwYXJzZUtleVVzYWdlKFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4LCBEV09SRCBmbGFncykKK3sKKyAgICBDRVJUX0VOSEtFWV9VU0FHRSAqdXNhZ2U7CisgICAgRFdPUkQgc2l6ZSwgZXJyb3IsIGk7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKworICAgIGlmICghQ2VydEdldEVuaGFuY2VkS2V5VXNhZ2UocENlcnRDdHgsIGZsYWdzLCBOVUxMLCAmc2l6ZSkpIHsKKyAgICAgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IENSWVBUX0VfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyb3IpOworICAgIH0KKworICAgIHVzYWdlID0gKENFUlRfRU5IS0VZX1VTQUdFKilQeU1lbV9NYWxsb2Moc2l6ZSk7CisgICAgaWYgKHVzYWdlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQorCisgICAgLyogTm93IGdldCB0aGUgYWN0dWFsIGVuaGFuY2VkIHVzYWdlIHByb3BlcnR5ICovCisgICAgaWYgKCFDZXJ0R2V0RW5oYW5jZWRLZXlVc2FnZShwQ2VydEN0eCwgZmxhZ3MsIHVzYWdlLCAmc2l6ZSkpIHsKKyAgICAgICAgUHlNZW1fRnJlZSh1c2FnZSk7CisgICAgICAgIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBDUllQVF9FX05PVF9GT1VORCkgeworICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm9yKTsKKyAgICB9CisgICAgcmV0dmFsID0gUHlTZXRfTmV3KE5VTEwpOworICAgIGlmIChyZXR2YWwgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNhZ2UtPmNVc2FnZUlkZW50aWZpZXI7ICsraSkgeworICAgICAgICBpZiAodXNhZ2UtPnJncHN6VXNhZ2VJZGVudGlmaWVyW2ldKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb2lkOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIG9pZCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHVzYWdlLT5yZ3BzelVzYWdlSWRlbnRpZmllcltpXSk7CisgICAgICAgICAgICBpZiAob2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQocmV0dmFsLCBvaWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG9pZCk7CisgICAgICAgICAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBlcnJvcjoKKyAgICBQeU1lbV9GcmVlKHVzYWdlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jLAorImVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuIHN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZlxuXAorJ0NBJywgJ1JPT1QnIG9yICdNWScuIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUgbW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uXG5cCitUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4gVGhlIHRydXN0IHNldHRpbmcgaXMgZWl0aGVyIGEgc2V0IG9mIE9JRHMgb3IgdGhlXG5cCitib29sZWFuIFRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9lbnVtX2NlcnRpZmljYXRlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDRVJUX0NPTlRFWFQgcENlcnRDdHggPSBOVUxMOworICAgIFB5T2JqZWN0ICprZXl1c2FnZSA9IE5VTEwsICpjZXJ0ID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8czplbnVtX2NlcnRpZmljYXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3RvcmVfbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoU3RvcmUgPSBDZXJ0T3BlblN5c3RlbVN0b3JlKChIQ1JZUFRQUk9WKU5VTEwsIHN0b3JlX25hbWUpOworICAgIGlmIChoU3RvcmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKKyAgICB3aGlsZSAocENlcnRDdHggPSBDZXJ0RW51bUNlcnRpZmljYXRlc0luU3RvcmUoaFN0b3JlLCBwQ2VydEN0eCkpIHsKKyAgICAgICAgY2VydCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIqKXBDZXJ0Q3R4LT5wYkNlcnRFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ2VydEN0eC0+Y2JDZXJ0RW5jb2RlZCk7CisgICAgICAgIGlmICghY2VydCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ2VydEN0eC0+ZHdDZXJ0RW5jb2RpbmdUeXBlKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGtleXVzYWdlID0gcGFyc2VLZXlVc2FnZShwQ2VydEN0eCwgQ0VSVF9GSU5EX1BST1BfT05MWV9FTkhLRVlfVVNBR0VfRkxBRyk7CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5dXNhZ2UpOworICAgICAgICAgICAga2V5dXNhZ2UgPSBwYXJzZUtleVVzYWdlKHBDZXJ0Q3R4LCBDRVJUX0ZJTkRfRVhUX09OTFlfRU5IS0VZX1VTQUdFX0ZMQUcpOworICAgICAgICB9CisgICAgICAgIGlmIChrZXl1c2FnZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygzKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjZXJ0KTsKKyAgICAgICAgY2VydCA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOworICAgICAgICBlbmMgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMiwga2V5dXNhZ2UpOworICAgICAgICBrZXl1c2FnZSA9IE5VTEw7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0dXApOworICAgIH0KKyAgICBpZiAocENlcnRDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDZXJ0aWZpY2F0ZUNvbnRleHQocENlcnRDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY2VydCk7CisgICAgUHlfWERFQ1JFRihlbmMpOworICAgIFB5X1hERUNSRUYoa2V5dXNhZ2UpOworICAgIFB5X1hERUNSRUYodHVwKTsKKworICAgIGlmICghQ2VydENsb3NlU3RvcmUoaFN0b3JlLCAwKSkgeworICAgICAgICAvKiBUaGlzIGVycm9yIGNhc2UgbWlnaHQgc2hhZG93IGFub3RoZXIgZXhjZXB0aW9uLiovCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX2VudW1fY3Jsc19kb2MsCisiZW51bV9jcmxzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIENSTHMgZnJvbSBXaW5kb3dzJyBjZXJ0IHN0b3JlLiBzdG9yZV9uYW1lIG1heSBiZSBvbmUgb2ZcblwKKydDQScsICdST09UJyBvciAnTVknLiBUaGUgc3lzdGVtIG1heSBwcm92aWRlIG1vcmUgY2VydCBzdG9yYWdlcywgdG9vLlxuXAorVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIChieXRlcywgZW5jb2RpbmdfdHlwZSkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1B5U1NMX2VudW1fY3JscyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDUkxfQ09OVEVYVCBwQ3JsQ3R4ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY3JsID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8czplbnVtX2NybHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnN0b3JlX25hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaFN0b3JlID0gQ2VydE9wZW5TeXN0ZW1TdG9yZSgoSENSWVBUUFJPVilOVUxMLCBzdG9yZV9uYW1lKTsKKyAgICBpZiAoaFN0b3JlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHBDcmxDdHggPSBDZXJ0RW51bUNSTHNJblN0b3JlKGhTdG9yZSwgcENybEN0eCkpIHsKKyAgICAgICAgY3JsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciopcENybEN0eC0+cGJDcmxFbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQ3JsQ3R4LT5jYkNybEVuY29kZWQpOworICAgICAgICBpZiAoIWNybCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgoZW5jID0gY2VydEVuY29kaW5nVHlwZShwQ3JsQ3R4LT5kd0NlcnRFbmNvZGluZ1R5cGUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh0dXAgPSBQeVR1cGxlX05ldygyKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAwLCBjcmwpOworICAgICAgICBjcmwgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMSwgZW5jKTsKKyAgICAgICAgZW5jID0gTlVMTDsKKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIHR1cCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodHVwKTsKKyAgICB9CisgICAgaWYgKHBDcmxDdHgpIHsKKyAgICAgICAgLyogbG9vcCBlbmRlZCB3aXRoIGFuIGVycm9yLCBuZWVkIHRvIGNsZWFuIHVwIGNvbnRleHQgbWFudWFsbHkgKi8KKyAgICAgICAgQ2VydEZyZWVDUkxDb250ZXh0KHBDcmxDdHgpOworICAgIH0KKworICAgIC8qIEluIGVycm9yIGNhc2VzIGNlcnQsIGVuYyBhbmQgdHVwIG1heSBub3QgYmUgTlVMTCAqLworICAgIFB5X1hERUNSRUYoY3JsKTsKKyAgICBQeV9YREVDUkVGKGVuYyk7CisgICAgUHlfWERFQ1JFRih0dXApOworCisgICAgaWYgKCFDZXJ0Q2xvc2VTdG9yZShoU3RvcmUsIDApKSB7CisgICAgICAgIC8qIFRoaXMgZXJyb3IgY2FzZSBtaWdodCBzaGFkb3cgYW5vdGhlciBleGNlcHRpb24uKi8KKyAgICAgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogX01TQ19WRVIgKi8KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuICovCiAKQEAgLTI2MDMsNiArMzczOCwxOCBAQAogICAgIHsiUkFORF9zdGF0dXMiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeVNTTF9SQU5EX3N0YXR1cywgTUVUSF9OT0FSR1MsCiAgICAgIFB5U1NMX1JBTkRfc3RhdHVzX2RvY30sCiAjZW5kaWYKKyAgICB7ImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyIsIChQeUNGdW5jdGlvbilQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMsCisgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfZG9jfSwKKyNpZmRlZiBfTVNDX1ZFUgorICAgIHsiZW51bV9jZXJ0aWZpY2F0ZXMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY2VydGlmaWNhdGVzX2RvY30sCisgICAgeyJlbnVtX2NybHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jcmxzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9lbnVtX2NybHNfZG9jfSwKKyNlbmRpZgorICAgIHsidHh0Mm9iaiIsIChQeUNGdW5jdGlvbilQeVNTTF90eHQyb2JqLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF90eHQyb2JqX2RvY30sCisgICAgeyJuaWQyb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX25pZDJvYmosCisgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfbmlkMm9ial9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTI2NjQsNyArMzgxMSw3IEBACiAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkgewogICAgICAgICBfc3NsX2xvY2tzX2NvdW50ID0gQ1JZUFRPX251bV9sb2NrcygpOwogICAgICAgICBfc3NsX2xvY2tzID0gKFB5VGhyZWFkX3R5cGVfbG9jayAqKQotICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeVRocmVhZF90eXBlX2xvY2spICogX3NzbF9sb2Nrc19jb3VudCk7CisgICAgICAgICAgICBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5VGhyZWFkX3R5cGVfbG9jaykgKiBfc3NsX2xvY2tzX2NvdW50KTsKICAgICAgICAgaWYgKF9zc2xfbG9ja3MgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBtZW1zZXQoX3NzbF9sb2NrcywgMCwKQEAgLTI2NzYsNyArMzgyMyw3IEBACiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgIGogPCBpOyAgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhfc3NsX2xvY2tzW2pdKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZnJlZShfc3NsX2xvY2tzKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKF9zc2xfbG9ja3MpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yODMwLDYgKzM5NzcsNjYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfQ0VSVF9PUFRJT05BTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNFUlRfUkVRVUlSRUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9DRVJUX1JFUVVJUkVEKTsKKyAgICAvKiBDUkwgdmVyaWZpY2F0aW9uIGZvciB2ZXJpZmljYXRpb25fZmxhZ3MgKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0RFRkFVTFQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfQ1JMX0NIRUNLX0xFQUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDS3xYNTA5X1ZfRkxBR19DUkxfQ0hFQ0tfQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX1g1MDlfU1RSSUNUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19YNTA5X1NUUklDVCk7CisKKyAgICAvKiBBbGVydCBEZXNjcmlwdGlvbnMgZnJvbSBzc2wuaCAqLworICAgIC8qIG5vdGUgUkVTRVJWRUQgY29uc3RhbnRzIG5vIGxvbmdlciBpbnRlbmRlZCBmb3IgdXNlIGhhdmUgYmVlbiByZW1vdmVkICovCisgICAgLyogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNiAqLworCisjZGVmaW5lIEFERF9BRF9DT05TVEFOVChzKSBcCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMRVJUX0RFU0NSSVBUSU9OXyIjcywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9BRF8jI3MpCisKKyAgICBBRERfQURfQ09OU1RBTlQoQ0xPU0VfTk9USUZZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5FWFBFQ1RFRF9NRVNTQUdFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX1JFQ09SRF9NQUMpOworICAgIEFERF9BRF9DT05TVEFOVChSRUNPUkRfT1ZFUkZMT1cpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPTVBSRVNTSU9OX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChIQU5EU0hBS0VfRkFJTFVSRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0NFUlRJRklDQVRFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfUkVWT0tFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX0VYUElSRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9VTktOT1dOKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSUxMRUdBTF9QQVJBTUVURVIpOworICAgIEFERF9BRF9DT05TVEFOVChVTktOT1dOX0NBKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQUNDRVNTX0RFTklFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ09ERV9FUlJPUik7CisgICAgQUREX0FEX0NPTlNUQU5UKERFQ1JZUFRfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChQUk9UT0NPTF9WRVJTSU9OKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5TVUZGSUNJRU5UX1NFQ1VSSVRZKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSU5URVJOQUxfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChVU0VSX0NBTkNFTExFRCk7CisgICAgQUREX0FEX0NPTlNUQU5UKE5PX1JFTkVHT1RJQVRJT04pOworICAgIC8qIE5vdCBhbGwgY29uc3RhbnRzIGFyZSBpbiBvbGQgT3BlblNTTCB2ZXJzaW9ucyAqLworI2lmZGVmIFNTTF9BRF9VTlNVUFBPUlRFRF9FWFRFTlNJT04KKyAgICBBRERfQURfQ09OU1RBTlQoVU5TVVBQT1JURURfRVhURU5TSU9OKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9DRVJUSUZJQ0FURV9VTk9CVEFJTkFCTEUKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9VTlJFQ09HTklaRURfTkFNRQorICAgIEFERF9BRF9DT05TVEFOVChVTlJFQ09HTklaRURfTkFNRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfU1RBVFVTX1JFU1BPTlNFKTsKKyNlbmRpZgorI2lmZGVmIFNTTF9BRF9CQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRQorICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEVfSEFTSF9WQUxVRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5LTk9XTl9QU0tfSURFTlRJVFkKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9QU0tfSURFTlRJVFkpOworI2VuZGlmCisKKyN1bmRlZiBBRERfQURfQ09OU1RBTlQKIAogICAgIC8qIHByb3RvY29sIHZlcnNpb25zICovCiAjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMgpAQCAtMjg0Miw2ICs0MDQ5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxXzEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxXzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMik7CisjZW5kaWYKIAogICAgIC8qIHByb3RvY29sIG9wdGlvbnMgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfQUxMIiwKQEAgLTI4NDksNiArNDA2MiwxMCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19TU0x2MiIsIFNTTF9PUF9OT19TU0x2Mik7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYzIiwgU1NMX09QX05PX1NTTHYzKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjEiLCBTU0xfT1BfTk9fVExTdjEpOworI2lmIEhBVkVfVExTdjFfMgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MV8xIiwgU1NMX09QX05PX1RMU3YxXzEpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MV8yIiwgU1NMX09QX05PX1RMU3YxXzIpOworI2VuZGlmCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX1NJTkdMRV9ESF9VU0UiLCBTU0xfT1BfU0lOR0xFX0RIX1VTRSk7CkBAIC0yODYwLDcgKzQwNzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9PUF9OT19DT01QUkVTU0lPTik7CiAjZW5kaWYKIAotI2lmZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKKyNpZiBIQVZFX1NOSQogICAgIHIgPSBQeV9UcnVlOwogI2Vsc2UKICAgICByID0gUHlfRmFsc2U7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdGF0LmMgYi9Nb2R1bGVzL19zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMwMWZhOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3N0YXQuYwpAQCAtMCwwICsxLDU2MyBAQAorLyogc3RhdC5oIGludGVyZmFjZQorICoKKyAqIFRoZSBtb2R1bGUgZGVmaW5lcyBhbGwgU19JRiosIFNfSSosIFVGXyosIFNGXyogYW5kIFNUXyogY29uc3RhbnRzIHRvCisgKiBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlcyBhcyB3ZWxsIGFzIGRlZmluZXMgU19JUyooKSBtYWNyb3MgaW4gb3JkZXIgdG8ga2VlcAorICogYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgc3RhdC5weSBtb2R1bGUuCisgKgorICogTmV3IGNvbnN0YW50cyBhbmQgbWFjcm9zIHN1Y2ggYXMgU19JRkRPT1IgLyBTX0lTRE9PUigpIGFyZSBhbHdheXMgZGVmaW5lZAorICogYXMgaW50IDAuCisgKgorICogTk9URTogUE9TSVggb25seSBkZWZpbmVzIHRoZSB2YWx1ZXMgb2YgdGhlIFNfSSogcGVybWlzc2lvbiBiaXRzLgorICoKKyAqLworCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKyNpbmNsdWRlICJQeXRob24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1RZUEVTX0ggKi8KKworI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+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+Zm10ZGVmICE9IE5VTEw7IGNvZGUrKykKKyAgICAgICAgc2l6ZSArPSBzaXplb2YoZm9ybWF0Y29kZSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChzaXplKTsKIH0KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgKi8KIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBzX21ldGhvZHNbXSA9IHsKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIHNfaXRlcl91bnBhY2ssICBNRVRIX08sIHNfaXRlcl91bnBhY2tfX2RvY19ffSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHNfcGFjaywgICAgICAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19fZG9jX199LAogICAgIHsicGFja19pbnRvIiwgICAgICAgc19wYWNrX2ludG8sICAgIE1FVEhfVkFSQVJHUywgc19wYWNrX2ludG9fX2RvY19ffSwKICAgICB7InVucGFjayIsICAgICAgICAgIHNfdW5wYWNrLCAgICAgICBNRVRIX08sIHNfdW5wYWNrX19kb2NfX30sCkBAIC0yMDI2LDkgKzIxODAsMzQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitQeURvY19TVFJWQVIoaXRlcl91bnBhY2tfZG9jLAorIml0ZXJfdW5wYWNrKGZtdCwgYnVmZmVyKSAtPiBpdGVyYXRvcih2MSwgdjIsIC4uLilcblwKK1xuXAorUmV0dXJuIGFuIGl0ZXJhdG9yIHlpZWxkaW5nIHR1cGxlcyB1bnBhY2tlZCBmcm9tIHRoZSBnaXZlbiBieXRlc1xuXAorc291cmNlIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IHN0cmluZywgbGlrZSBhIHJlcGVhdGVkIGludm9jYXRpb24gb2ZcblwKK3VucGFja19mcm9tKCkuICBSZXF1aXJlcyB0aGF0IHRoZSBieXRlcyBsZW5ndGggYmUgYSBtdWx0aXBsZSBvZiB0aGVcblwKK2Zvcm1hdCBzdHJ1Y3Qgc2l6ZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2l0ZXJfdW5wYWNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqc19vYmplY3QsICpmbXQsICppbnB1dCwgKnJlc3VsdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086aXRlcl91bnBhY2siLCAmZm10LCAmaW5wdXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNfb2JqZWN0ID0gY2FjaGVfc3RydWN0KGZtdCk7CisgICAgaWYgKHNfb2JqZWN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IHNfaXRlcl91bnBhY2soc19vYmplY3QsIGlucHV0KTsKKyAgICBQeV9ERUNSRUYoc19vYmplY3QpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW9kdWxlX2Z1bmN0aW9uc1tdID0gewogICAgIHsiX2NsZWFyY2FjaGUiLCAgICAgKFB5Q0Z1bmN0aW9uKWNsZWFyY2FjaGUsICAgICAgICBNRVRIX05PQVJHUywgICAgY2xlYXJjYWNoZV9kb2N9LAogICAgIHsiY2FsY3NpemUiLCAgICAgICAgY2FsY3NpemUsICAgICAgIE1FVEhfTywgY2FsY3NpemVfZG9jfSwKKyAgICB7Iml0ZXJfdW5wYWNrIiwgICAgIGl0ZXJfdW5wYWNrLCAgICBNRVRIX1ZBUkFSR1MsICAgaXRlcl91bnBhY2tfZG9jfSwKICAgICB7InBhY2siLCAgICAgICAgICAgIHBhY2ssICAgICAgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19kb2N9LAogICAgIHsicGFja19pbnRvIiwgICAgICAgcGFja19pbnRvLCAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2ludG9fZG9jfSwKICAgICB7InVucGFjayIsICAgICAgICAgIHVucGFjaywgTUVUSF9WQVJBUkdTLCAgIHVucGFja19kb2N9LApAQCAtMjA5OCwxMyArMjI3NywxMyBAQAogCiAgICAgLyogQ2hlY2sgZW5kaWFuIGFuZCBzd2FwIGluIGZhc3RlciBmdW5jdGlvbnMgKi8KICAgICB7Ci0gICAgICAgIGludCBvbmUgPSAxOwogICAgICAgICBmb3JtYXRkZWYgKm5hdGl2ZSA9IG5hdGl2ZV90YWJsZTsKICAgICAgICAgZm9ybWF0ZGVmICpvdGhlciwgKnB0cjsKLSAgICAgICAgaWYgKChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lKQotICAgICAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG90aGVyID0gYmlnZW5kaWFuX3RhYmxlOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgb3RoZXIgPSBsaWxlbmRpYW5fdGFibGU7CisjZWxzZQorICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNlbmRpZgogICAgICAgICAvKiBTY2FuIHRocm91Z2ggdGhlIG5hdGl2ZSB0YWJsZSwgZmluZCBhIG1hdGNoaW5nCiAgICAgICAgICAgIGVudHJ5IGluIHRoZSBlbmRpYW4gdGFibGUgYW5kIHN3YXAgaW4gdGhlCiAgICAgICAgICAgIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMgd2hlbmV2ZXIgcG9zc2libGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RidWZmZXIuYyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwppbmRleCAzMTY2NjZlLi4wYzZlZjE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKKysrIGIvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogICAgICAgICBpZiAoaW5pdF9zbGljZShiYXNlLCBrZXksIDApIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyX29jY3VycmVkOwogICAgIH0KLSAgICBlbHNlIGlmIFB5VHVwbGVfQ2hlY2soa2V5KSB7CisgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhrZXkpKSB7CiAgICAgICAgIC8qIG11bHRpLWRpbWVuc2lvbmFsIHNsaWNlICovCiAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSA9IGtleTsKICAgICAgICAgUHlfc3NpemVfdCBpLCBuOwpAQCAtMjgzNywzNiArMjgzNywzNiBAQAogICAgIGlmIChzaW1wbGVfZm9ybWF0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX01BWF9ORElNIiwgTkRfTUFYX05ESU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9WQVJFWFBPUlQiLCBORF9WQVJFWFBPUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9XUklUQUJMRSIsIE5EX1dSSVRBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfRk9SVFJBTiIsIE5EX0ZPUlRSQU4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9TQ0FMQVIiLCBORF9TQ0FMQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9QSUwiLCBORF9QSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9HRVRCVUZfRkFJTCIsIE5EX0dFVEJVRl9GQUlMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfR0VUQlVGX1VOREVGSU5FRCIsIE5EX0dFVEJVRl9VTkRFRklORUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9SRURJUkVDVCIsIE5EX1JFRElSRUNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9NQVhfTkRJTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfVkFSRVhQT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9XUklUQUJMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfRk9SVFJBTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfU0NBTEFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9QSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0dFVEJVRl9GQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9HRVRCVUZfVU5ERUZJTkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9SRURJUkVDVCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU0lNUExFIiwgUHlCVUZfU0lNUExFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfV1JJVEFCTEUiLCBQeUJVRl9XUklUQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZPUk1BVCIsIFB5QlVGX0ZPUk1BVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX05EIiwgUHlCVUZfTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVTIiwgUHlCVUZfU1RSSURFUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0lORElSRUNUIiwgUHlCVUZfSU5ESVJFQ1QpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DX0NPTlRJR1VPVVMiLCBQeUJVRl9DX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GX0NPTlRJR1VPVVMiLCBQeUJVRl9GX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9BTllfQ09OVElHVU9VUyIsIFB5QlVGX0FOWV9DT05USUdVT1VTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRlVMTCIsIFB5QlVGX0ZVTEwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GVUxMX1JPIiwgUHlCVUZfRlVMTF9STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1JFQ09SRFMiLCBQeUJVRl9SRUNPUkRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVDT1JEU19STyIsIFB5QlVGX1JFQ09SRFNfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TVFJJREVEIiwgUHlCVUZfU1RSSURFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERURfUk8iLCBQeUJVRl9TVFJJREVEX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ09OVElHIiwgUHlCVUZfQ09OVElHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfQ09OVElHX1JPIiwgUHlCVUZfQ09OVElHX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TSU1QTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1dSSVRBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GT1JNQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX05EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9JTkRJUkVDVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ19DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0FOWV9DT05USUdVT1VTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GVUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9GVUxMX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUNPUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUNPUkRTX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9TVFJJREVEX1JPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DT05USUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NPTlRJR19STyk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVBRCIsIFB5QlVGX1JFQUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9XUklURSIsIFB5QlVGX1dSSVRFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9XUklURSk7CiAKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCmluZGV4IDdkZjNlMTkuLjk2NjJlYjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwpAQCAtNjUsNiArNjUsNjkgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgordGVzdF9zaXplb2ZfY190eXBlcyhQeU9iamVjdCAqc2VsZikKK3sKKyNkZWZpbmUgQ0hFQ0tfU0laRU9GKFRZUEUsIEVYUEVDVEVEKSAgICAgICAgIFwKKyAgICBpZiAoRVhQRUNURUQgIT0gc2l6ZW9mKFRZUEUpKSAgeyAgICAgICAgIFwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFRlc3RFcnJvciwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICJzaXplb2YoJXMpID0gJXUgaW5zdGVhZCBvZiAldSIsIFwKKyAgICAgICAgICAgICNUWVBFLCBzaXplb2YoVFlQRSksIEVYUEVDVEVEKTsgIFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisjZGVmaW5lIElTX1NJR05FRChUWVBFKSAoKChUWVBFKS0xKSA8IChUWVBFKTApCisjZGVmaW5lIENIRUNLX1NJR05ORVNTKFRZUEUsIFNJR05FRCkgICAgICAgICBcCisgICAgaWYgKElTX1NJR05FRChUWVBFKSAhPSBTSUdORUQpIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAiJXMgc2lnbm5lc3MgaXMsIGluc3RlYWQgb2YgJWkiLCAgXAorICAgICAgICAgICAgI1RZUEUsIElTX1NJR05FRChUWVBFKSwgU0lHTkVEKTsgXAorICAgICAgICByZXR1cm4gKFB5T2JqZWN0KilOVUxMOyAgICAgICAgICAgICAgXAorICAgIH0KKworICAgIC8qIGludGVnZXIgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTMSwgMSk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzIsIDIpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1M0LCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MxLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1MyLCAwKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9VQ1M0LCAwKTsKKyNpZmRlZiBIQVZFX0lOVDMyX1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UMzJfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQzMl9ULCA0KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UMzJfVCwgMCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVDY0X1QKKyAgICBDSEVDS19TSVpFT0YoUFlfSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfSU5UNjRfVCwgMSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VJTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX1VJTlQ2NF9ULCA4KTsKKyAgICBDSEVDS19TSUdOTkVTUyhQWV9VSU5UNjRfVCwgMCk7CisjZW5kaWYKKworICAgIC8qIHBvaW50ZXIvc2l6ZSB0eXBlcyAqLworICAgIENIRUNLX1NJWkVPRihzaXplX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhzaXplX3QsIDApOworICAgIENIRUNLX1NJWkVPRihQeV9zc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfc3NpemVfdCwgMSk7CisKKyAgICBDSEVDS19TSVpFT0YoUHlfdWludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfdWludHB0cl90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfaW50cHRyX3QsIHNpemVvZih2b2lkICopKTsKKyAgICBDSEVDS19TSUdOTkVTUyhQeV9pbnRwdHJfdCwgMSk7CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7CisKKyN1bmRlZiBJU19TSUdORUQKKyN1bmRlZiBDSEVDS19TSUdORVNTCisjdW5kZWYgQ0hFQ0tfU0laRU9GCit9CisKKworc3RhdGljIFB5T2JqZWN0KgogdGVzdF9saXN0X2FwaShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCogbGlzdDsKQEAgLTE0MjQsNiArMTQ4NywyMCBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X3dpZGVjaGFyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTFwiXFxVMDAxMTAwMDBcIiwgMSkgZGlkbid0IGZhaWwiKTsKKworICAgIHdpZGUgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgMSk7CisgICAgaWYgKHdpZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlVbmljb2RlX0FTX1VOSUNPREUod2lkZSlbMF0gPSBpbnZhbGlkWzBdOworICAgIGlmIChfUHlVbmljb2RlX1JlYWR5KHdpZGUpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYod2lkZSk7CisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX1JlYWR5KCkgZGlkbid0IGZhaWwiKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjQ3NywxNiArMjU1NCwzMzYgQEAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmwiLCBfUHlMb25nX0Zyb21UaW1lX3Qoc2VjKSwgbnNlYyk7CiB9CiAKK3N0YXRpYyB2b2lkCitzbG90X3RwX2RlbChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihfX3RwX2RlbF9fKTsKKyAgICBQeU9iamVjdCAqZGVsLCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KKyAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOworICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgLyogRXhlY3V0ZSBfX2RlbF9fIG1ldGhvZCwgaWYgYW55LiAqLworICAgIGRlbCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKHNlbGYsICZQeUlkX19fdHBfZGVsX18pOworICAgIGlmIChkZWwgIT0gTlVMTCkgeworICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChkZWwsIE5VTEwpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZGVsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIFB5X0RFQ1JFRihkZWwpOworICAgIH0KKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCisgICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAorICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOworICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQorICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgorICAgICAqIG5ldmVyIGhhcHBlbmVkLgorICAgICAqLworICAgIHsKKyAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7CisgICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKKyAgICB9CisgICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKKyAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KKyAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KKyAgICBfUHlfREVDX1JFRlRPVEFMOworICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0CisgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCisgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCisgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCisgICAgICogdW5kb25lLgorICAgICAqLworI2lmZGVmIENPVU5UX0FMTE9DUworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7CisgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7CisjZW5kaWYKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3dpdGhfdHBfZGVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5VHlwZU9iamVjdCAqdHA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86d2l0aF90cF9kZWwiLCAmb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdHAgPSAoUHlUeXBlT2JqZWN0ICopIG9iajsKKyAgICBpZiAoIVB5VHlwZV9DaGVjayhvYmopIHx8ICFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IRUFQVFlQRSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJoZWFwIHR5cGUgZXhwZWN0ZWQsIGdvdCAlUiIsIG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0cC0+dHBfZGVsID0gc2xvdF90cF9kZWw7CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK190ZXN0X2luY3JlZihQeU9iamVjdCAqb2IpCit7CisgICAgUHlfSU5DUkVGKG9iKTsKKyAgICByZXR1cm4gb2I7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfWElOQ1JFRihfdGVzdF9pbmNyZWYob2JqKSk7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2luY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeV9YREVDUkVGKFB5TG9uZ19Gcm9tTG9uZygwKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfREVDUkVGKFB5TG9uZ19Gcm9tTG9uZygwKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2luY3JlZl9kZWNyZWZfQVBJKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X0luY1JlZihvYik7CisgICAgUHlfRGVjUmVmKG9iaik7CisgICAgUHlfRGVjUmVmKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX2FsbG9jMChQeU9iamVjdCAqc2VsZikKK3sKKyAgICB2b2lkICpwdHI7CisKKyAgICBwdHIgPSBQeU1lbV9NYWxsb2MoMCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJQeU1lbV9NYWxsb2MoMCkgcmV0dXJucyBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB0cik7CisKKyAgICBwdHIgPSBQeU9iamVjdF9NYWxsb2MoMCk7CisgICAgaWYgKHB0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJQeU9iamVjdF9NYWxsb2MoMCkgcmV0dXJucyBOVUxMIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeU9iamVjdF9GcmVlKHB0cik7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworCisgICAgc2l6ZV90IG1hbGxvY19zaXplOworICAgIHZvaWQgKnJlYWxsb2NfcHRyOworICAgIHNpemVfdCByZWFsbG9jX25ld19zaXplOworICAgIHZvaWQgKmZyZWVfcHRyOworfSBhbGxvY19ob29rX3Q7CisKK3N0YXRpYyB2b2lkKiBob29rX21hbGxvYyAodm9pZCogY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OworICAgIGhvb2stPm1hbGxvY19zaXplID0gc2l6ZTsKKyAgICByZXR1cm4gaG9vay0+YWxsb2MubWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkKiBob29rX3JlYWxsb2MgKHZvaWQqIGN0eCwgdm9pZCogcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5yZWFsbG9jX3B0ciA9IHB0cjsKKyAgICBob29rLT5yZWFsbG9jX25ld19zaXplID0gbmV3X3NpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLnJlYWxsb2MoaG9vay0+YWxsb2MuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKworc3RhdGljIHZvaWQgaG9va19mcmVlICh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBhbGxvY19ob29rX3QgKmhvb2sgPSAoYWxsb2NfaG9va190ICopY3R4OworICAgIGhvb2stPmZyZWVfcHRyID0gcHRyOworICAgIGhvb2stPmFsbG9jLmZyZWUoaG9vay0+YWxsb2MuY3R4LCBwdHIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9zZXRhbGxvY2F0b3JzKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbikKK3sKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICplcnJvcl9tc2c7CisgICAgYWxsb2NfaG9va190IGhvb2s7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7CisgICAgc2l6ZV90IHNpemUsIHNpemUyOworICAgIHZvaWQgKnB0ciwgKnB0cjI7CisKKyAgICBob29rLm1hbGxvY19zaXplID0gMDsKKyAgICBob29rLnJlYWxsb2NfcHRyID0gTlVMTDsKKyAgICBob29rLnJlYWxsb2NfbmV3X3NpemUgPSAwOworICAgIGhvb2suZnJlZV9wdHIgPSBOVUxMOworCisgICAgYWxsb2MuY3R4ID0gJmhvb2s7CisgICAgYWxsb2MubWFsbG9jID0gJmhvb2tfbWFsbG9jOworICAgIGFsbG9jLnJlYWxsb2MgPSAmaG9va19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSAmaG9va19mcmVlOworICAgIFB5TWVtX0dldEFsbG9jYXRvcihkb21haW4sICZob29rLmFsbG9jKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoZG9tYWluLCAmYWxsb2MpOworCisgICAgc2l6ZSA9IDQyOworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0ciA9IFB5TWVtX01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBwdHIgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0ciA9IE5VTEw7IGJyZWFrOworICAgIH0KKworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5tYWxsb2Nfc2l6ZSAhPSBzaXplKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJtYWxsb2MgaW52YWxpZCBzaXplIjsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHNpemUyID0gMjAwOworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogcHRyMiA9IFB5TWVtX1Jhd1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogcHRyMiA9IFB5TWVtX1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyMiA9IFB5T2JqZWN0X1JlYWxsb2MocHRyLCBzaXplMik7IGJyZWFrOworICAgIGRlZmF1bHQ6IHB0cjIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyMiA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJyZWFsbG9jIGZhaWxlZCI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaG9vay5yZWFsbG9jX3B0ciAhPSBwdHIKKyAgICAgICAgfHwgaG9vay5yZWFsbG9jX25ld19zaXplICE9IHNpemUyKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJyZWFsbG9jIGludmFsaWQgcGFyYW1ldGVycyI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IFB5TWVtX1Jhd0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogUHlNZW1fRnJlZShwdHIyKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBQeU9iamVjdF9GcmVlKHB0cjIpOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaG9vay5mcmVlX3B0ciAhPSBwdHIyKSB7CisgICAgICAgIGVycm9yX21zZyA9ICJmcmVlIGludmFsaWQgcG9pbnRlciI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmVzID0gUHlfTm9uZTsKKyAgICBnb3RvIGZpbmFsbHk7CisKK2ZhaWw6CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgZXJyb3JfbXNnKTsKKworZmluYWxseToKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0cmF3YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9SQVcpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX01FTSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fT0JKKTsKK30KKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19lbXB0eSwKKyIiCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX25vX3NpZ25hdHVyZSwKKyJUaGlzIGRvY3N0cmluZyBoYXMgbm8gc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSwKKyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSAoYm9vKVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZShzaWcpXG4iCisiVGhpcyBkb2NzdHJpbmcgaGFzIGEgdmFsaWQgc2lnbmF0dXJlLiIKKyk7CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMocGFyYW1ldGVyKVxuIgorIlxuIgorIlxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSBhbmQgc29tZSBleHRyYSBuZXdsaW5lcy4iCispOwogCiBzdGF0aWMgUHlNZXRob2REZWYgVGVzdE1ldGhvZHNbXSA9IHsKICAgICB7InJhaXNlX2V4Y2VwdGlvbiIsICAgICAgICAgcmFpc2VfZXhjZXB0aW9uLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InJhaXNlX21lbW9yeWVycm9yIiwgICAoUHlDRnVuY3Rpb24pcmFpc2VfbWVtb3J5ZXJyb3IsICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2NvbmZpZyIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2NvbmZpZywgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3Rfc2l6ZW9mX2NfdHlwZXMiLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfc2l6ZW9mX2NfdHlwZXMsIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGF0ZXRpbWVfY2FwaSIsICB0ZXN0X2RhdGV0aW1lX2NhcGksICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xpc3RfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xpc3RfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGljdF9pdGVyYXRpb24iLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfZGljdF9pdGVyYXRpb24sTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UiLCAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSxNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfeGluY3JlZl9kb2VzbnRfbGVhayIsKFB5Q0Z1bmN0aW9uKXRlc3RfeGluY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2luY3JlZl9kb2VzbnRfbGVhayIsIChQeUNGdW5jdGlvbil0ZXN0X2luY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWsiLChQeUNGdW5jdGlvbil0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9kZWNyZWZfZG9lc250X2xlYWsiLCAoUHlDRnVuY3Rpb24pdGVzdF9kZWNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9pbmNyZWZfZGVjcmVmX0FQSSIsICAoUHlDRnVuY3Rpb24pdGVzdF9pbmNyZWZfZGVjcmVmX0FQSSwgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYW5kX292ZXJmbG93LAogICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXNfZG91YmxlIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXNfZG91YmxlLE1FVEhfTk9BUkdTfSwKQEAgLTI1NzQsNiArMjk3MSwzMiBAQAogICAgIHsicHl0aW1lX29iamVjdF90b190aW1lX3QiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZV90LCAgTUVUSF9WQVJBUkdTfSwKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZXZhbCIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1ldmFsLCAgTUVUSF9WQVJBUkdTfSwKICAgICB7InB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMiLCB0ZXN0X3B5dGltZV9vYmplY3RfdG9fdGltZXNwZWMsICBNRVRIX1ZBUkFSR1N9LAorICAgIHsid2l0aF90cF9kZWwiLCAgICAgICAgICAgICB3aXRoX3RwX2RlbCwgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGVzdF9weW1lbSIsCisgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5bWVtX2FsbG9jMCwgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW1lbV9hbGxvYzAiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRyYXdhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3B5b2JqZWN0X3NldGFsbG9jYXRvcnMiLAorICAgICAoUHlDRnVuY3Rpb24pdGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJub19kb2NzdHJpbmciLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1N9LAorICAgIHsiZG9jc3RyaW5nX2VtcHR5IiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfZW1wdHl9LAorICAgIHsiZG9jc3RyaW5nX25vX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX25vX3NpZ25hdHVyZX0sCisgICAgeyJkb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTLAorICAgICAgICBkb2NzdHJpbmdfd2l0aF9zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcyIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lc30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0ZW1iZWQuYyBiL01vZHVsZXMvX3Rlc3RlbWJlZC5jCmluZGV4IDUxYjQzOWYuLmEyMWQyNTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Rlc3RlbWJlZC5jCisrKyBiL01vZHVsZXMvX3Rlc3RlbWJlZC5jCkBAIC0xLDcgKzEsMjYgQEAKICNpbmNsdWRlIDxQeXRob24uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCi12b2lkIHByaW50X3N1YmludGVycCh2b2lkKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW1iZWRkZWQgaW50ZXJwcmV0ZXIgdGVzdHMgdGhhdCBuZWVkIGEgY3VzdG9tIGV4ZQorICoKKyAqIEV4ZWN1dGVkIHZpYSAnRW1iZWRkaW5nVGVzdHMnIGluIExpYi90ZXN0L3Rlc3RfY2FwaS5weQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKHZvaWQpCit7CisgICAgLyogSEFDSzogdGhlICIuLyIgYXQgZnJvbnQgYXZvaWRzIGEgc2VhcmNoIGFsb25nIHRoZSBQQVRIIGluCisgICAgICAgTW9kdWxlcy9nZXRwYXRoLmMgKi8KKyAgICBQeV9TZXRQcm9ncmFtTmFtZShMIi4vX3Rlc3RlbWJlZCIpOworICAgIFB5X0luaXRpYWxpemUoKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRlc3QgcmVwZWF0ZWQgaW5pdGFsaXNhdGlvbiBhbmQgc3ViaW50ZXJwcmV0ZXJzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIHByaW50X3N1YmludGVycCh2b2lkKQogewogICAgIC8qIEp1c3Qgb3V0cHV0IHNvbWUgZGVidWcgc3R1ZmYgKi8KICAgICBQeVRocmVhZFN0YXRlICp0cyA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CkBAIC0xNCw3ICszMyw3IEBACiAgICAgKTsKIH0KIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3N0YXRpYyB2b2lkIHRlc3RfcmVwZWF0ZWRfaW5pdF9hbmRfc3ViaW50ZXJwcmV0ZXJzKHZvaWQpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqbWFpbnN0YXRlLCAqc3Vic3RhdGU7CiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTI0LDEwICs0Myw3IEBACiAKICAgICBmb3IgKGk9MDsgaTwzOyBpKyspIHsKICAgICAgICAgcHJpbnRmKCItLS0gUGFzcyAlZCAtLS1cbiIsIGkpOwotICAgICAgICAvKiBIQUNLOiB0aGUgIi4vIiBhdCBmcm9udCBhdm9pZHMgYSBzZWFyY2ggYWxvbmcgdGhlIFBBVEggaW4KLSAgICAgICAgICAgTW9kdWxlcy9nZXRwYXRoLmMgKi8KLSAgICAgICAgUHlfU2V0UHJvZ3JhbU5hbWUoTCIuL190ZXN0ZW1iZWQiKTsKLSAgICAgICAgUHlfSW5pdGlhbGl6ZSgpOworICAgICAgICBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUoKTsKICAgICAgICAgbWFpbnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC01NCw1ICs3MCw3MSBAQAogICAgICAgICBQeUV2YWxfUmVzdG9yZVRocmVhZChtYWluc3RhdGUpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgIH0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUZXN0IGZvcmNpbmcgYSBwYXJ0aWN1bGFyIElPIGVuY29kaW5nCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGNoZWNrX3N0ZGlvX2RldGFpbHMoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKiBlcnJvcnMpCit7CisgICAgLyogT3V0cHV0IGluZm8gZm9yIHRoZSB0ZXN0IGNhc2UgdG8gY2hlY2sgKi8KKyAgICBpZiAoZW5jb2RpbmcpIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlbmNvZGluZzogJXNcbiIsIGVuY29kaW5nKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVuY29kaW5nOiBkZWZhdWx0XG4iKTsKKyAgICB9CisgICAgaWYgKGVycm9ycykgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVycm9yczogJXNcbiIsIGVycm9ycyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHRcbiIpOworICAgIH0KKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAvKiBGb3JjZSB0aGUgZ2l2ZW4gSU8gZW5jb2RpbmcgKi8KKyAgICBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGVuY29kaW5nLCBlcnJvcnMpOworICAgIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSgpOworICAgIFB5UnVuX1NpbXBsZVN0cmluZygKKyAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAicHJpbnQoJ3N0ZGluOiB7MC5lbmNvZGluZ306ezAuZXJyb3JzfScuZm9ybWF0KHN5cy5zdGRpbikpOyIKKyAgICAgICAgInByaW50KCdzdGRvdXQ6IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZG91dCkpOyIKKyAgICAgICAgInByaW50KCdzdGRlcnI6IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZGVycikpOyIKKyAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKSIKKyAgICApOworICAgIFB5X0ZpbmFsaXplKCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKHZvaWQpCit7CisgICAgLyogQ2hlY2sgdmFyaW91cyBjb21iaW5hdGlvbnMgKi8KKyAgICBwcmludGYoIi0tLSBVc2UgZGVmYXVsdHMgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKE5VTEwsIE5VTEwpOworICAgIHByaW50ZigiLS0tIFNldCBlcnJvcnMgb25seSAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoTlVMTCwgInN1cnJvZ2F0ZWVzY2FwZSIpOworICAgIHByaW50ZigiLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscygibGF0aW4tMSIsIE5VTEwpOworICAgIHByaW50ZigiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscygibGF0aW4tMSIsICJzdXJyb2dhdGVlc2NhcGUiKTsKKworICAgIC8qIENoZWNrIGNhbGxpbmcgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gZmFpbHMgKi8KKyAgICBQeV9Jbml0aWFsaXplKCk7CisKKyAgICBpZiAoUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhOVUxMLCBOVUxMKSA9PSAwKSB7CisgICAgICAgIHByaW50ZigiVW5leHBlY3RlZCBzdWNjZXNzIGNhbGxpbmcgUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyIpOworICAgIH0KKyAgICBQeV9GaW5hbGl6ZSgpOworfQorCisvKiBEaWZmZXJlbnQgZW1iZWRkaW5nIHRlc3RzICovCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCisgICAgLyogVE9ETzogQ2hlY2sgdGhlIGFyZ3VtZW50IHN0cmluZyB0byBhbGxvdyBmb3IgbW9yZSB0ZXN0IGNhc2VzICovCisgICAgaWYgKGFyZ2MgPiAxKSB7CisgICAgICAgIC8qIEZvciBub3c6IGFzc3VtZSAiZm9yY2VkX2lvX2VuY29kaW5nICovCisgICAgICAgIHRlc3RfZm9yY2VkX2lvX2VuY29kaW5nKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogUnVuIHRoZSBvcmlnaW5hbCBlbWJlZGRpbmcgdGVzdCBjYXNlIGJ5IGRlZmF1bHQgKi8KKyAgICAgICAgdGVzdF9yZXBlYXRlZF9pbml0X2FuZF9zdWJpbnRlcnByZXRlcnMoKTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYyBiL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYWViNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190ZXN0aW1wb3J0bXVsdGlwbGUuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQyBleHRlbnNpb25zIG1vZHVsZSB0byB0ZXN0IGltcG9ydGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkCisgKiBmaWxlIChpc3N1ZTE2NDIxKS4gVGhpcyBmaWxlIGRlZmluZXMgMyBtb2R1bGVzIChfdGVzdGltcG9ydG1vZHVsZSwKKyAqIGZvbywgYmFyKSwgb25seSB0aGUgZmlyc3Qgb25lIGlzIGNhbGxlZCB0aGUgc2FtZSBhcyB0aGUgY29tcGlsZWQgZmlsZS4KKyAqLworI2luY2x1ZGU8UHl0aG9uLmg+CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3Rlc3RpbXBvcnRtdWx0aXBsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGUiLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl90ZXN0aW1wb3J0bXVsdGlwbGUpOworfQorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9mb29tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2ZvbyIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfZm9vIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28odm9pZCkKK3sKKyAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZfZm9vbW9kdWxlKTsKK30KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfYmFybW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIiLAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2JhciBkb2MiLAorICAgIC0xLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworUHlNT0RJTklUX0ZVTkMgUHlJbml0X190ZXN0aW1wb3J0bXVsdGlwbGVfYmFyKHZvaWQpeworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9iYXJtb2R1bGUpOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCmluZGV4IGQxZGM2MWQuLmFiMGZlYTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCkBAIC0xNyw2ICsxNyw4IEBACiBzdGF0aWMgbG9uZyBuYl90aHJlYWRzID0gMDsKIHN0YXRpYyBQeU9iamVjdCAqc3RyX2RpY3Q7CiAKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CisKIC8qIExvY2sgb2JqZWN0cyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC02OCw3ICs3MCw3IEBACiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICByID0gUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKGxvY2ssIG1pY3Jvc2Vjb25kcywgMSk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICB9IAorICAgICAgICB9CiAKICAgICAgICAgaWYgKHIgPT0gUFlfTE9DS19JTlRSKSB7CiAgICAgICAgICAgICAvKiBSdW4gc2lnbmFsIGhhbmRsZXJzIGlmIHdlIHdlcmUgaW50ZXJydXB0ZWQuICBQcm9wYWdhdGUKQEAgLTI1NSwxNCArMjU3LDE3IEBACiBzdGF0aWMgdm9pZAogcmxvY2tfZGVhbGxvYyhybG9ja29iamVjdCAqc2VsZikKIHsKLSAgICBhc3NlcnQoc2VsZi0+cmxvY2tfbG9jayk7CiAgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLwotICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCi0gICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICAvKiBzZWxmLT5ybG9ja19sb2NrIGNhbiBiZSBOVUxMIGlmIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSBmYWlsZWQKKyAgICAgICBpbiBybG9ja19uZXcoKSAqLworICAgIGlmIChzZWxmLT5ybG9ja19sb2NrICE9IE5VTEwpIHsKKyAgICAgICAgLyogVW5sb2NrIHRoZSBsb2NrIHNvIGl0J3Mgc2FmZSB0byBmcmVlIGl0ICovCisgICAgICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CiAKLSAgICBQeVRocmVhZF9mcmVlX2xvY2soc2VsZi0+cmxvY2tfbG9jayk7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICB9CiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZShzZWxmKTsKIH0KIApAQCAtNDUyLDE1ICs0NTcsMTYgQEAKIAogICAgIHNlbGYgPSAocmxvY2tvYmplY3QgKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CiAgICAgaWYgKHNlbGYgIT0gTlVMTCkgewotICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwotICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICB0eXBlLT50cF9mcmVlKHNlbGYpOwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRocmVhZEVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgbG9jayIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KICAgICAgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgICAgICBzZWxmLT5ybG9ja19vd25lciA9IDA7CiAgICAgICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gMDsKKworICAgICAgICBzZWxmLT5ybG9ja19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAoc2VsZi0+cmxvY2tfbG9jayA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjYW4ndCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgc2VsZiwgTlVMTCk7CiAgICAgaWYgKHdyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwotICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3KCZ3cl9jYWxsYmFja19kZWYsIHdyKTsKKyAgICBzZWxmLT53cl9jYWxsYmFjayA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZ3cl9jYWxsYmFja19kZWYsIHdyLCBOVUxMKTsKICAgICBQeV9ERUNSRUYod3IpOwogICAgIGlmIChzZWxmLT53cl9jYWxsYmFjayA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycjsKQEAgLTEwMDEsNyArMTAwNyw3IEBACiAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKICAgICAgICAgICAgICAgICAiVW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiB0aHJlYWQgc3RhcnRlZCBieSAiKTsKICAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWx1ZSwgJnRiKTsKLSAgICAgICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICAgICAgaWYgKGZpbGUgIT0gTlVMTCAmJiBmaWxlICE9IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KGJvb3QtPmZ1bmMsIGZpbGUsIDApOwogICAgICAgICAgICAgZWxzZQpAQCAtMTE3Miw2ICsxMTc4LDY2IEBACiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCBhbmQgc3BlY2lhbGl6ZWQgcHVycG9zZXMgb25seS5cblwKIEluIG1vc3QgYXBwbGljYXRpb25zIGB0aHJlYWRpbmcuZW51bWVyYXRlKClgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuIik7CiAKK3N0YXRpYyB2b2lkCityZWxlYXNlX3NlbnRpbmVsKHZvaWQgKndyKQoreworICAgIC8qIFRyaWNreTogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUKKyAgICAgICBpcyBiZWluZyBkZWxldGVkLiAgVGhlcmVmb3JlLCBvbmx5IHNpbXBsZSBDIGNvZGUgY2FuIHNhZmVseQorICAgICAgIGV4ZWN1dGUgaGVyZS4gKi8KKyAgICBQeU9iamVjdCAqb2JqID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1Qod3IpOworICAgIGxvY2tvYmplY3QgKmxvY2s7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGFzc2VydChQeV9UWVBFKG9iaikgPT0gJkxvY2t0eXBlKTsKKyAgICAgICAgbG9jayA9IChsb2Nrb2JqZWN0ICopIG9iajsKKyAgICAgICAgaWYgKGxvY2stPmxvY2tlZCkgeworICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGxvY2stPmxvY2tfbG9jayk7CisgICAgICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOworICAgICAgICB9CisgICAgfQorICAgIC8qIERlYWxsb2NhdGluZyBhIHdlYWtyZWYgd2l0aCBhIE5VTEwgY2FsbGJhY2sgb25seSBjYWxscworICAgICAgIFB5T2JqZWN0X0dDX0RlbCgpLCB3aGljaCBjYW4ndCBjYWxsIGFueSBQeXRob24gY29kZS4gKi8KKyAgICBQeV9ERUNSRUYod3IpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGhyZWFkX19zZXRfc2VudGluZWwoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKndyOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisgICAgbG9ja29iamVjdCAqbG9jazsKKworICAgIGlmICh0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgLyogV2UgbXVzdCBzdXBwb3J0IHRoZSByZS1jcmVhdGlvbiBvZiB0aGUgbG9jayBmcm9tIGEKKyAgICAgICAgICAgZm9yaygpZWQgY2hpbGQuICovCisgICAgICAgIGFzc2VydCh0c3RhdGUtPm9uX2RlbGV0ZSA9PSAmcmVsZWFzZV9zZW50aW5lbCk7CisgICAgICAgIHdyID0gKFB5T2JqZWN0ICopIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGE7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9IE5VTEw7CisgICAgICAgIFB5X0RFQ1JFRih3cik7CisgICAgfQorICAgIGxvY2sgPSBuZXdsb2Nrb2JqZWN0KCk7CisgICAgaWYgKGxvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogVGhlIGxvY2sgaXMgb3duZWQgYnkgd2hvZXZlciBjYWxsZWQgX3NldF9zZW50aW5lbCgpLCBidXQgdGhlIHdlYWtyZWYKKyAgICAgICBoYW5ncyB0byB0aGUgdGhyZWFkIHN0YXRlLiAqLworICAgIHdyID0gUHlXZWFrcmVmX05ld1JlZigoUHlPYmplY3QgKikgbG9jaywgTlVMTCk7CisgICAgaWYgKHdyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGxvY2spOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9ICh2b2lkICopIHdyOworICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gJnJlbGVhc2Vfc2VudGluZWw7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBsb2NrOworfQorCitQeURvY19TVFJWQVIoX3NldF9zZW50aW5lbF9kb2MsCisiX3NldF9zZW50aW5lbCgpIC0+IGxvY2tcblwKK1xuXAorU2V0IGEgc2VudGluZWwgbG9jayB0aGF0IHdpbGwgYmUgcmVsZWFzZWQgd2hlbiB0aGUgY3VycmVudCB0aHJlYWRcblwKK3N0YXRlIGlzIGZpbmFsaXplZCAoYWZ0ZXIgaXQgaXMgdW50aWVkIGZyb20gdGhlIGludGVycHJldGVyKS5cblwKK1xuXAorVGhpcyBpcyBhIHByaXZhdGUgQVBJIGZvciB0aGUgdGhyZWFkaW5nIG1vZHVsZS4iKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIHRocmVhZF9zdGFja19zaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTEyNDcsNiArMTMxMyw4IEBACiAgICAgIE1FVEhfTk9BUkdTLCBfY291bnRfZG9jfSwKICAgICB7InN0YWNrX3NpemUiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9zdGFja19zaXplLAogICAgICBNRVRIX1ZBUkFSR1MsIHN0YWNrX3NpemVfZG9jfSwKKyAgICB7Il9zZXRfc2VudGluZWwiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRocmVhZF9fc2V0X3NlbnRpbmVsLAorICAgICBNRVRIX05PQVJHUywgX3NldF9zZW50aW5lbF9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RraW50ZXIuYyBiL01vZHVsZXMvX3RraW50ZXIuYwppbmRleCBlY2FkNTQxLi5lMDIyYTdhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190a2ludGVyLmMKKysrIGIvTW9kdWxlcy9fdGtpbnRlci5jCkBAIC0xMjgsNTIgKzEyOCw2MCBAQAogCiAvKiBUaGUgdGhyZWFkaW5nIHNpdHVhdGlvbiBpcyBjb21wbGljYXRlZC4gIFRjbCBpcyBub3QgdGhyZWFkLXNhZmUsIGV4Y2VwdAogICAgd2hlbiBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtdGhyZWFkcy4KLSAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzIHByb2JsZW1zIHdoZW4KLSAgIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLiAgSG9sZGluZyBpdAotICAgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLiAgVGhlIGZvbGxvd2luZyBmb3VyCi0gICBtYWNyb3MgbWFuaXB1bGF0ZSBib3RoIGxvY2tzIHRvZ2V0aGVyLgorICAgU28gd2UgbmVlZCB0byB1c2UgYSBsb2NrIGFyb3VuZCBhbGwgdXNlcyBvZiBUY2wuICBQcmV2aW91c2x5LCB0aGUKKyAgIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIHdhcyB1c2VkIGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBjYXVzZXMKKyAgIHByb2JsZW1zIHdoZW4gb3RoZXIgUHl0aG9uIHRocmVhZHMgbmVlZCB0byBydW4gd2hpbGUgVGNsIGlzIGJsb2NrZWQKKyAgIHdhaXRpbmcgZm9yIGV2ZW50cy4KIAotICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBhbmQKLSAgIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciBhIGNhbGwgaW50byBUY2wgaXMgbWFkZQotICAgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50IGhhbmRsZXIsIG9yIG90aGVyd2lzZSBhZmZlY3QgdGhlIHN0YXRlIG9mIGEgVGNsCi0gICBpbnRlcnByZXRlci4gIFRoZXNlIGFzc3VtZSB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGhhcyB0aGUgUHl0aG9uCi0gICBpbnRlcnByZXRlciBsb2NrOyBpbnNpZGUgdGhlIGJyYWNrZXRzLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGxvY2sgaGFzIGJlZW4KLSAgIHJlbGVhc2VkIGFuZCB0aGUgbG9jayBmb3IgVGNsIGhhcyBiZWVuIGFjcXVpcmVkLgorICAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhIHNlcGFyYXRlIGxvY2sgZm9yIFRjbCBpcyBpbnRyb2R1Y2VkLgorICAgSG9sZGluZyBpdCBpcyBpbmNvbXBhdGlibGUgd2l0aCBob2xkaW5nIFB5dGhvbidzIGludGVycHJldGVyIGxvY2suCisgICBUaGUgZm9sbG93aW5nIGZvdXIgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KIAotICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbCBsb2NrLgotICAgKEZvciBleGFtcGxlLCB3aGVuIHRyYW5zZmVycmluZyBkYXRhIGZyb20gdGhlIFRjbCBpbnRlcnByZXRlciByZXN1bHQgdG8gYQotICAgUHl0aG9uIHN0cmluZyBvYmplY3QuKSAgVGhpcyBjYW4gYmUgZG9uZSBieSB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlCi0gICB0aGUgRU5URVJfVENMIGJsb2NrOiBFTlRFUl9PVkVSTEFQIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMKLSAgIHRoZSB0aHJlYWQgc3RhdGUpIGJ1dCBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTAotICAgcmVsZWFzZXMgdGhlIFRjbCBsb2NrLgorICAgRU5URVJfVENMIGFuZCBMRUFWRV9UQ0wgYXJlIGJyYWNrZXRzLCBqdXN0IGxpa2UKKyAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kIFB5X0VORF9BTExPV19USFJFQURTLiAgVGhleSBzaG91bGQgYmUKKyAgIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUgdGhhdCBjb3VsZCBjYWxsIGFuIGV2ZW50CisgICBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbCBpbnRlcnByZXRlci4gIFRoZXNlCisgICBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrOworICAgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuIHJlbGVhc2VkCisgICBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKworICAgU29tZXRpbWVzLCBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBib3RoIHRoZSBQeXRob24gbG9jayBhbmQgdGhlIFRjbAorICAgbG9jay4gIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wKKyAgIGludGVycHJldGVyIHJlc3VsdCB0byBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkKKyAgIHVzaW5nIGRpZmZlcmVudCBtYWNyb3MgdG8gY2xvc2UgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUAorICAgcmVhY3F1aXJlcyB0aGUgUHl0aG9uIGxvY2sgKGFuZCByZXN0b3JlcyB0aGUgdGhyZWFkIHN0YXRlKSBidXQKKyAgIGRvZXNuJ3QgcmVsZWFzZSB0aGUgVGNsIGxvY2s7IExFQVZFX09WRVJMQVBfVENMIHJlbGVhc2VzIHRoZSBUY2wKKyAgIGxvY2suCiAKICAgIEJ5IGNvbnRyYXN0LCBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTiBhcmUgdXNlZCBpbiBUY2wgZXZlbnQKLSAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMgYXJlCi0gICBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIgcHJlc3VtYWJseSBuZWVkcwotICAgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IgVGNsIGFuZCBhY3F1aXJlcwotICAgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlIGFwcHJvcHJpYXRlIHRocmVhZCBzdGF0ZSwgYW5kCi0gICBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGFuZCByZS1hY3F1aXJlcyB0aGUgbG9jawotICAgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yIEVOVEVSX1RDTC9MRUFWRV9UQ0wgcGFpcnMgdG8gYmUgY29udGFpbmVkIGluc2lkZQotICAgdGhlIGNvZGUgYmV0d2VlbiBFTlRFUl9QWVRIT04gYW5kIExFQVZFX1BZVEhPTi4KKyAgIGhhbmRsZXJzIHdoZW4gdGhlIGhhbmRsZXIgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIFN1Y2ggZXZlbnQgaGFuZGxlcnMKKyAgIGFyZSBlbnRlcmVkIHdoaWxlIHRoZSBsb2NrIGZvciBUY2wgaXMgaGVsZDsgdGhlIGV2ZW50IGhhbmRsZXIKKyAgIHByZXN1bWFibHkgbmVlZHMgdG8gdXNlIFB5dGhvbi4gIEVOVEVSX1BZVEhPTiByZWxlYXNlcyB0aGUgbG9jayBmb3IKKyAgIFRjbCBhbmQgYWNxdWlyZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrLCByZXN0b3JpbmcgdGhlCisgICBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZCBMRUFWRV9QWVRIT04gcmVsZWFzZXMgdGhlIFB5dGhvbgorICAgaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sgZm9yIFRjbC4gIEl0IGlzIG9rYXkgZm9yCisgICBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUgdGhlIGNvZGUgYmV0d2VlbgorICAgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCiAKLSAgIFRoZXNlIGxvY2tzIGV4cGFuZCB0byBzZXZlcmFsIHN0YXRlbWVudHMgYW5kIGJyYWNrZXRzOyB0aGV5IHNob3VsZCBub3QgYmUKLSAgIHVzZWQgaW4gYnJhbmNoZXMgb2YgaWYgc3RhdGVtZW50cyBhbmQgdGhlIGxpa2UuCisgICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQKKyAgIG5vdCBiZSB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgogCi0gICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsIGludGVycHJldGVyIGlzCi0gICBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrIGFjdGl2aXR5IG11c3QgaGFwcGVuIGluIHRoaXMKLSAgIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZSBtYWlubG9vcCBtdXN0IGJlIGludm9rZWQgaW4gdGhlIHRocmVhZCB0aGF0Ci0gICBjcmVhdGVkIHRoZSBpbnRlcnByZXRlci4gSW52b2tpbmcgY29tbWFuZHMgZnJvbSBvdGhlciB0aHJlYWRzIGlzIHBvc3NpYmxlOwotICAgX3RraW50ZXIgd2lsbCBxdWV1ZSBhbiBldmVudCBmb3IgdGhlIGludGVycHJldGVyIHRocmVhZCwgd2hpY2ggd2lsbCB0aGVuCi0gICBleGVjdXRlIHRoZSBjb21tYW5kIGFuZCBwYXNzIGJhY2sgdGhlIHJlc3VsdC4gSWYgdGhlIG1haW4gdGhyZWFkIGlzIG5vdCBpbiB0aGUKLSAgIG1haW5sb29wLCBhbmQgaW52b2tpbmcgY29tbWFuZHMgY2F1c2VzIGFuIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nCi0gICBidXQgbm90IHByb2Nlc3NpbmcgZXZlbnRzLCB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCisgICBJZiBUY2wgaXMgdGhyZWFkZWQsIHRoaXMgYXBwcm9hY2ggd29uJ3Qgd29yayBhbnltb3JlLiBUaGUgVGNsCisgICBpbnRlcnByZXRlciBpcyBvbmx5IHZhbGlkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIGl0LCBhbmQgYWxsIFRrCisgICBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzIHRocmVhZCwgYWxzby4gVGhhdCBtZWFucyB0aGF0IHRoZQorICAgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdCBjcmVhdGVkIHRoZQorICAgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKKyAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwKKyAgIHRoZW4gZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluCisgICB0aHJlYWQgaXMgbm90IGluIHRoZSBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbgorICAgZXhjZXB0aW9uOyBpZiB0aGUgbWFpbiBsb29wIGlzIHJ1bm5pbmcgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywKKyAgIHRoZSBjb21tYW5kIGludm9jYXRpb24gd2lsbCBibG9jay4KIAotICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QgYmUgc3VmZmljaWVudAotICAgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkgc2ltdWx0YW5lb3VzbHkgZGlzcGF0Y2ggaW4gZGlmZmVyZW50Ci0gICB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMgQVBJLgorICAgSW4gYWRkaXRpb24sIGZvciBhIHRocmVhZGVkIFRjbCwgYSBzaW5nbGUgZ2xvYmFsIHRjbF90c3RhdGUgd29uJ3QKKyAgIGJlIHN1ZmZpY2llbnQgYW55bW9yZSwgc2luY2UgbXVsdGlwbGUgVGNsIGludGVycHJldGVycyBtYXkKKyAgIHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudCB0aHJlYWRzLiBTbyB3ZSB1c2UgdGhlIFRjbCBUTFMKKyAgIEFQSS4KIAogKi8KIApAQCAtMTgyLDcgKzE5MCw4IEBACiAjaWZkZWYgVENMX1RIUkVBRFMKIHN0YXRpYyBUY2xfVGhyZWFkRGF0YUtleSBzdGF0ZV9rZXk7CiB0eXBlZGVmIFB5VGhyZWFkU3RhdGUgKlRocmVhZFNwZWNpZmljRGF0YTsKLSNkZWZpbmUgdGNsX3RzdGF0ZSAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCisjZGVmaW5lIHRjbF90c3RhdGUgXAorICAgICgqKFB5VGhyZWFkU3RhdGUqKilUY2xfR2V0VGhyZWFkRGF0YSgmc3RhdGVfa2V5LCBzaXplb2YoUHlUaHJlYWRTdGF0ZSopKSkKICNlbHNlCiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqdGNsX3RzdGF0ZSA9IE5VTEw7CiAjZW5kaWYKQEAgLTE5Miw3ICsyMDEsOCBAQAogICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9hY3F1aXJlX2xvY2sodGNsX2xvY2ssIDEpOyB0Y2xfdHN0YXRlID0gdHN0YXRlOwogCiAjZGVmaW5lIExFQVZFX1RDTCBcCi0gICAgdGNsX3RzdGF0ZSA9IE5VTEw7IGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQorICAgIHRjbF90c3RhdGUgPSBOVUxMOyBcCisgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlfRU5EX0FMTE9XX1RIUkVBRFN9CiAKICNkZWZpbmUgRU5URVJfT1ZFUkxBUCBcCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKQEAgLTIwMiw3ICsyMTIsOCBAQAogCiAjZGVmaW5lIEVOVEVSX1BZVEhPTiBcCiAgICAgeyBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSB0Y2xfdHN0YXRlOyB0Y2xfdHN0YXRlID0gTlVMTDsgXAotICAgICAgICBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KKyAgICAgICAgaWYodGNsX2xvY2spIFwKKyAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeUV2YWxfUmVzdG9yZVRocmVhZCgodHN0YXRlKSk7IH0KIAogI2RlZmluZSBMRUFWRV9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsgXApAQCAtMjExLDcgKzIyMiw4IEBACiAjZGVmaW5lIENIRUNLX1RDTF9BUFBBUlRNRU5UIFwKICAgICBpZiAoKChUa2FwcE9iamVjdCAqKXNlbGYpLT50aHJlYWRlZCAmJiBcCiAgICAgICAgICgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsgXAotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsaW5nIFRjbCBmcm9tIGRpZmZlcmVudCBhcHBhcnRtZW50Iik7IFwKICAgICAgICAgcmV0dXJuIDA7IFwKICAgICB9CiAKQEAgLTIzMyw3ICsyNDUsNyBAQAogCiAvKioqKiBUa2FwcCBPYmplY3QgRGVjbGFyYXRpb24gKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlOworc3RhdGljIFB5T2JqZWN0ICpUa2FwcF9UeXBlOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMjUzLDcgKzI2NSw2IEBACiAgICAgVGNsX09ialR5cGUgKlN0cmluZ1R5cGU7CiB9IFRrYXBwT2JqZWN0OwogCi0jZGVmaW5lIFRrYXBwX0NoZWNrKHYpIChQeV9UWVBFKHYpID09ICZUa2FwcF9UeXBlKQogI2RlZmluZSBUa2FwcF9JbnRlcnAodikgKCgoVGthcHBPYmplY3QgKikgKHYpKS0+aW50ZXJwKQogI2RlZmluZSBUa2FwcF9SZXN1bHQodikgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAodikpCiAKQEAgLTMyNiwxMTAgKzMzNyw5IEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCi1zdGF0aWMgY2hhciAqCi1Bc1N0cmluZyhQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0bXApCi17Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gUHlCeXRlc19Bc1N0cmluZyh2YWx1ZSk7Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc1VURjgodmFsdWUpOwotICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqdiA9IFB5T2JqZWN0X1N0cih2YWx1ZSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQodG1wLCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHYpOwotICAgIH0KLX0KLQotCiAKICNkZWZpbmUgQVJHU1ogNjQKIAotc3RhdGljIGNoYXIgKgotTWVyZ2UoUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKnRtcCA9IE5VTEw7Ci0gICAgY2hhciAqYXJndlN0b3JlW0FSR1NaXTsKLSAgICBjaGFyICoqYXJndiA9IE5VTEw7Ci0gICAgaW50IGZ2U3RvcmVbQVJHU1pdOwotICAgIGludCAqZnYgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgYXJnYyA9IDAsIGZ2YyA9IDAsIGk7Ci0gICAgY2hhciAqcmVzID0gTlVMTDsKLQotICAgIGlmICghKHRtcCA9IFB5TGlzdF9OZXcoMCkpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGFyZ3YgPSBhcmd2U3RvcmU7Ci0gICAgZnYgPSBmdlN0b3JlOwotCi0gICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgYXJnYyA9IDA7Ci0KLSAgICBlbHNlIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICBhcmdjID0gMTsKLSAgICAgICAgZnZbMF0gPSAwOwotICAgICAgICBpZiAoIShhcmd2WzBdID0gQXNTdHJpbmcoYXJncywgdG1wKSkpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3MpOwotCi0gICAgICAgIGlmIChhcmdjID4gQVJHU1opIHsKLSAgICAgICAgICAgIGlmICghQ0hFQ0tfU0laRShhcmdjLCBzaXplb2YoY2hhciAqKSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInR1cGxlIGlzIHRvbyBsb25nIik7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXJndiA9IChjaGFyICoqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGNoYXIgKikpOwotICAgICAgICAgICAgZnYgPSAoaW50ICopY2thbGxvYygoc2l6ZV90KWFyZ2MgKiBzaXplb2YoaW50KSk7Ci0gICAgICAgICAgICBpZiAoYXJndiA9PSBOVUxMIHx8IGZ2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGkpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IE1lcmdlKHYpKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgYXJnYyA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBmdltpXSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYXJndltpXSA9IEFzU3RyaW5nKHYsIHRtcCkpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICAgICAgZnZjKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzID0gVGNsX01lcmdlKGFyZ2MsIGFyZ3YpOwotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJtZXJnZSBmYWlsZWQiKTsKLQotICBmaW5hbGx5OgotICAgIGZvciAoaSA9IDA7IGkgPCBmdmM7IGkrKykKLSAgICAgICAgaWYgKGZ2W2ldKSB7Ci0gICAgICAgICAgICBja2ZyZWUoYXJndltpXSk7Ci0gICAgICAgIH0KLSAgICBpZiAoYXJndiAhPSBhcmd2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBhcmd2KTsKLSAgICBpZiAoZnYgIT0gZnZTdG9yZSkKLSAgICAgICAgY2tmcmVlKEZSRUVDQVNUIGZ2KTsKLQotICAgIFB5X0RFQ1JFRih0bXApOwotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNDQwLDggKzM1MCw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAKICAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KIAogICAgIGlmIChUY2xfU3BsaXRMaXN0KChUY2xfSW50ZXJwICopTlVMTCwgbGlzdCwgJmFyZ2MsICZhcmd2KSAhPSBUQ0xfT0spIHsKQEAgLTQ3Myw5ICszODIsOSBAQAogICAgIHJldHVybiB2OwogfQogCi0vKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZQotICAgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nIG9iamVjdHMgdGhhdAotICAgbmVlZCB0byBiZSBzcGxpdC4gKi8KKy8qIEluIHNvbWUgY2FzZXMsIFRjbCB3aWxsIHN0aWxsIHJldHVybiBzdHJpbmdzIHRoYXQgYXJlIHN1cHBvc2VkIHRvCisgICBiZSBsaXN0cy4gU3BsaXRPYmogd2Fsa3MgdGhyb3VnaCBhIG5lc3RlZCB0dXBsZSwgZmluZGluZyBzdHJpbmcKKyAgIG9iamVjdHMgdGhhdCBuZWVkIHRvIGJlIHNwbGl0LiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogU3BsaXRPYmooUHlPYmplY3QgKmFyZykKQEAgLTYwNyw5ICs1MTYsMTAgQEAKICAgICBUa2FwcE9iamVjdCAqdjsKICAgICBjaGFyICphcmd2MDsKIAotICAgIHYgPSBQeU9iamVjdF9OZXcoVGthcHBPYmplY3QsICZUa2FwcF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFRrYXBwX1R5cGUpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihUa2FwcF9UeXBlKTsKIAogICAgIHYtPmludGVycCA9IFRjbF9DcmVhdGVJbnRlcnAoKTsKICAgICB2LT53YW50b2JqZWN0cyA9IHdhbnRvYmplY3RzOwpAQCAtNjIwLDcgKzUzMCw4IEBACiAKICNpZm5kZWYgVENMX1RIUkVBRFMKICAgICBpZiAodi0+dGhyZWFkZWQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGNsIGlzIHRocmVhZGVkIGJ1dCBfdGtpbnRlciBpcyBub3QiKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC03NTcsMTYgKzY2OCwxNyBAQAogICAgIFB5T2JqZWN0ICpzdHJpbmc7IC8qIFRoaXMgY2Fubm90IGNhdXNlIGN5Y2xlcy4gKi8KIH0gUHlUY2xPYmplY3Q7CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZTsKLSNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgICAgKCh2KS0+b2JfdHlwZSA9PSAmUHlUY2xPYmplY3RfVHlwZSkKK3N0YXRpYyBQeU9iamVjdCAqUHlUY2xPYmplY3RfVHlwZTsKKyNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgKCh2KS0+b2JfdHlwZSA9PSAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBuZXdQeVRjbE9iamVjdChUY2xfT2JqICphcmcpCiB7CiAgICAgUHlUY2xPYmplY3QgKnNlbGY7Ci0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVRjbE9iamVjdCwgJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsIChQeVR5cGVPYmplY3QgKikgUHlUY2xPYmplY3RfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIFRjbF9JbmNyUmVmQ291bnQoYXJnKTsKICAgICBzZWxmLT52YWx1ZSA9IGFyZzsKICAgICBzZWxmLT5zdHJpbmcgPSBOVUxMOwpAQCAtNzc2LDkgKzY4OCwxMSBAQAogc3RhdGljIHZvaWQKIFB5VGNsT2JqZWN0X2RlYWxsb2MoUHlUY2xPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgVGNsX0RlY3JSZWZDb3VudChzZWxmLT52YWx1ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdHJpbmcpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgY2hhcioKQEAgLTgyMyw4ICs3MzcsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVRjbE9iamVjdF9yZXByKFB5VGNsT2JqZWN0ICpzZWxmKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc2VsZi0+dmFsdWUpOworICAgIFB5T2JqZWN0ICpyZXByLCAqc3RyID0gUHlUY2xPYmplY3Rfc3RyKHNlbGYsIE5VTEwpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0OiAlUj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc3RyKTsKKyAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICByZXR1cm4gcmVwcjsKIH0KIAogI2RlZmluZSBURVNUX0NPTkQoY29uZCkgKChjb25kKSA/IFB5X1RydWUgOiBQeV9GYWxzZSkKQEAgLTg5OCw1MCArODE3LDI1IEBACiAgICAgezB9LAogfTsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQeVRjbE9iamVjdF9UeXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJfdGtpbnRlci5UY2xfT2JqIiwgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jLC8qdHBfZGVhbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByLCAgICAgICAgIC8qdHBfcmVwciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHIsICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlLCAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21lbWJlcnMqLwotICAgIFB5VGNsT2JqZWN0X2dldHNldGxpc3QsICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaW5pdCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uZXcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZnJlZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pc19nYyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgUHlUY2xPYmplY3RfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCAoZGVzdHJ1Y3RvcilQeVRjbE9iamVjdF9kZWFsbG9jfSwKKyAgICB7UHlfdHBfcmVwciwgKHJlcHJmdW5jKVB5VGNsT2JqZWN0X3JlcHJ9LAorICAgIHtQeV90cF9zdHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9zdHJ9LAorICAgIHtQeV90cF9nZXRhdHRybywgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJ9LAorICAgIHtQeV90cF9yaWNoY29tcGFyZSwgUHlUY2xPYmplY3RfcmljaGNvbXBhcmV9LAorICAgIHtQeV90cF9nZXRzZXQsIFB5VGNsT2JqZWN0X2dldHNldGxpc3R9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFB5VGNsT2JqZWN0X1R5cGVfc3BlYyA9IHsKKyAgICAiX3RraW50ZXIuVGNsX09iaiIsCisgICAgc2l6ZW9mKFB5VGNsT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBQeVRjbE9iamVjdF9UeXBlX3Nsb3RzLAorfTsKKworCiBzdGF0aWMgVGNsX09iaioKIEFzT2JqKFB5T2JqZWN0ICp2YWx1ZSkKIHsKQEAgLTEzNTYsNDIgKzEyNTAsNiBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxDYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICAvKiBDb3VsZCBkbyB0aGUgc2FtZSBoZXJlIGFzIGZvciBUa2FwcF9DYWxsKCksIGJ1dCB0aGlzIGlzIG5vdCB1c2VkCi0gICAgICAgbXVjaCwgc28gSSBjYW4ndCBiZSBib3RoZXJlZC4gIFVuZm9ydHVuYXRlbHkgVGNsIGRvZXNuJ3QgZXhwb3J0IGEKLSAgICAgICB3YXkgZm9yIHRoZSB1c2VyIHRvIGRvIHdoYXQgYWxsIGl0cyBHbG9iYWwqIHZhcmlhbnRzIGRvIChzYXZlIGFuZAotICAgICAgIHJlc2V0IHRoZSBzY29wZSBwb2ludGVyLCBjYWxsIHRoZSBsb2NhbCB2ZXJzaW9uLCByZXN0b3JlIHRoZSBzYXZlZAotICAgICAgIHNjb3BlIHBvaW50ZXIpLiAqLwotCi0gICAgY2hhciAqY21kOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsY2FsbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIGNtZCAgPSBNZXJnZShhcmdzKTsKLSAgICBpZiAoY21kKSB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIEVOVEVSX1RDTAotICAgICAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIGNtZCk7Ci0gICAgICAgIEVOVEVSX09WRVJMQVAKLSAgICAgICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgICAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgICAgICBja2ZyZWUoY21kKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogVGthcHBfRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqc2NyaXB0OwpAQCAtMTQxNSwzNCArMTI3Myw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxFdmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzY3JpcHQ7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgaW50IGVycjsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGV2YWwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdsb2JhbGV2YWwiLCAmc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIEVOVEVSX1RDTAotICAgIGVyciA9IFRjbF9HbG9iYWxFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgc2NyaXB0KTsKLSAgICBFTlRFUl9PVkVSTEFQCi0gICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgIExFQVZFX09WRVJMQVBfVENMCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWxGaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpmaWxlTmFtZTsKQEAgLTE1MDIsOCArMTMzMiw3IEBACiAgICAgVGNsX0FkZEVycm9ySW5mbyhUa2FwcF9JbnRlcnAoc2VsZiksIG1zZyk7CiAgICAgTEVBVkVfVENMCiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMTcwMSw3ICsxNTMwLDggQEAKICAgICB0cmVzID0gVGNsX0dldFZhcjJFeChUa2FwcF9JbnRlcnAoc2VsZiksIG5hbWUxLCBuYW1lMiwgZmxhZ3MpOwogICAgIEVOVEVSX09WRVJMQVAKICAgICBpZiAodHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGtpbnRlcl9UY2xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCgoVGthcHBPYmplY3QqKXNlbGYpLT53YW50b2JqZWN0cykgewogICAgICAgICAgICAgcmVzID0gRnJvbU9iaihzZWxmLCB0cmVzKTsKQEAgLTE3NjAsNyArMTU5MCw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfR2xvYmFsVW5zZXRWYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLCBUQ0xfTEVBVkVfRVJSX01TRyB8IFRDTF9HTE9CQUxfT05MWSk7CisgICAgcmV0dXJuIHZhcl9pbnZva2UoVW5zZXRWYXIsIHNlbGYsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOwogfQogCiAKQEAgLTIwMjYsMjcgKzE4NTcsNiBAQAogICAgIHJldHVybiB2OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotVGthcHBfTWVyZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKnM7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJtZXJnZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzID0gTWVyZ2UoYXJncyk7Ci0KLSAgICBpZiAocykgewotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhzKTsKLSAgICAgICAgY2tmcmVlKHMpOwotICAgIH0KLQotICAgIHJldHVybiByZXM7Ci19Ci0KIAogCiAvKiogVGNsIENvbW1hbmQgKiovCkBAIC0yMjMyLDggKzIwNDIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMjI3NCw4ICsyMDgzLDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJjYW4ndCBkZWxldGUgVGNsIGNvbW1hbmQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0yMzc5LDggKzIxODcsNyBAQAogICAgIEVOVEVSX1RDTAogICAgIFRjbF9DcmVhdGVGaWxlSGFuZGxlcih0ZmlsZSwgbWFzaywgRmlsZUhhbmRsZXIsIChDbGllbnREYXRhKSBkYXRhKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDA0LDE1ICsyMjExLDE0IEBACiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUZpbGVIYW5kbGVyKHRmaWxlKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9DUkVBVEVGSUxFSEFORExFUiAqLwogCiAKIC8qKioqIFRrdHQgT2JqZWN0ICh0aW1lciB0b2tlbikgKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa3R0X1R5cGU7CitzdGF0aWMgUHlPYmplY3QgKlRrdHRfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTI0MzcsOCArMjI0Myw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICAgICAgUHlfREVDUkVGKHYpOyAvKiBTZWUgVGt0dF9OZXcoKSAqLwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBUa3R0X21ldGhvZHNbXSA9CkBAIC0yNDUyLDkgKzIyNTcsMTAgQEAKIHsKICAgICBUa3R0T2JqZWN0ICp2OwogCi0gICAgdiA9IFB5T2JqZWN0X05ldyhUa3R0T2JqZWN0LCAmVGt0dF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrdHRPYmplY3QsIChQeVR5cGVPYmplY3QgKikgVGt0dF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGt0dF9UeXBlKTsKIAogICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICB2LT50b2tlbiA9IE5VTEw7CkBAIC0yNDcwLDEwICsyMjc2LDEyIEBACiB7CiAgICAgVGt0dE9iamVjdCAqdiA9IChUa3R0T2JqZWN0ICopc2VsZjsKICAgICBQeU9iamVjdCAqZnVuYyA9IHYtPmZ1bmM7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAKICAgICBQeV9YREVDUkVGKGZ1bmMpOwogCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDg1LDM4ICsyMjkzLDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPmZ1bmMgPT0gTlVMTCA/ICIsIGhhbmRsZXIgZGVsZXRlZCIgOiAiIik7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGt0dF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGt0aW1lcnRva2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa3R0T2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa3R0X0RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICBUa3R0X1JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGt0dF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrdHRfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa3R0X0RlYWxsb2N9LAorICAgIHtQeV90cF9yZXByLCBUa3R0X1JlcHJ9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa3R0X21ldGhvZHN9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFRrdHRfVHlwZV9zcGVjID0geworICAgICJ0a3RpbWVydG9rZW4iLAorICAgIHNpemVvZihUa3R0T2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa3R0X1R5cGVfc2xvdHMsCit9OwogCiAKIC8qKiBUaW1lciBIYW5kbGVyICoqLwpAQCAtMjYzOCw4ICsyNDI4LDcgQEAKICAgICAgICAgZXhjSW5DbWQgPSB2YWxJbkNtZCA9IHRyYkluQ21kID0gTlVMTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI2NjUsOCArMjQ1NCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcXVpdE1haW5Mb29wID0gMTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzE2LDE1ICsyNTA0LDE1IEBACiAgICAgfQogICAgIGlmIChfdGtfZXhpc3RzID09IE5VTEwgfHwgc3RyY21wKF90a19leGlzdHMsICIxIikgIT0gMCkgICAgIHsKICAgICAgICAgaWYgKFRrX0luaXQoaW50ZXJwKSAgICAgICAgICAgICA9PSBUQ0xfRVJST1IpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKICNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCiAgICAgICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3MzgsOCArMjUyNiw3IEBACiAgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzKTsKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3NDgsOCArMjUzNSw3IEBACiAKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+ZGlzcGF0Y2hpbmcgPSAxOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTI3NjAsOSArMjU0Niw3IEBACiAgICAgeyJ3aWxsZGlzcGF0Y2giLCAgICAgICBUa2FwcF9XaWxsRGlzcGF0Y2gsIE1FVEhfTk9BUkdTfSwKICAgICB7IndhbnRvYmplY3RzIiwgICAgICAgICAgICBUa2FwcF9XYW50T2JqZWN0cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNhbGwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9DYWxsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2xvYmFsY2FsbCIsICAgICAgICAgICAgIFRrYXBwX0dsb2JhbENhbGwsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJldmFsIiwgICAgICAgICAgICAgICAgICAgVGthcHBfRXZhbCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbGV2YWwiLCAgICAgICAgICAgICBUa2FwcF9HbG9iYWxFdmFsLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXZhbGZpbGUiLCAgICAgICAgICAgICAgIFRrYXBwX0V2YWxGaWxlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmVjb3JkIiwgICAgICAgICAgICAgICAgIFRrYXBwX1JlY29yZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZGVycm9yaW5mbyIsICAgICAgIFRrYXBwX0FkZEVycm9ySW5mbywgTUVUSF9WQVJBUkdTfSwKQEAgLTI3ODEsNyArMjU2NSw2IEBACiAgICAgeyJleHByYm9vbGVhbiIsICAgICAgICBUa2FwcF9FeHByQm9vbGVhbiwgTUVUSF9WQVJBUkdTfSwKICAgICB7InNwbGl0bGlzdCIsICAgICAgICAgICAgICBUa2FwcF9TcGxpdExpc3QsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJzcGxpdCIsICAgICAgICAgICAgICAgICAgVGthcHBfU3BsaXQsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJtZXJnZSIsICAgICAgICAgICAgICAgICAgVGthcHBfTWVyZ2UsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjcmVhdGVjb21tYW5kIiwgICAgICBUa2FwcF9DcmVhdGVDb21tYW5kLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZGVsZXRlY29tbWFuZCIsICAgICAgVGthcHBfRGVsZXRlQ29tbWFuZCwgTUVUSF9WQVJBUkdTfSwKICNpZmRlZiBIQVZFX0NSRUFURUZJTEVIQU5ETEVSCkBAIC0yODA0LDQ0ICsyNTg3LDI5IEBACiBzdGF0aWMgdm9pZAogVGthcHBfRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKIHsKKyAgICBQeU9iamVjdCAqdHAgPSAoUHlPYmplY3QgKikgUHlfVFlQRShzZWxmKTsKICAgICAvKkNIRUNLX1RDTF9BUFBBUlRNRU5UOyovCiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUludGVycChUa2FwcF9JbnRlcnAoc2VsZikpOwogICAgIExFQVZFX1RDTAogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogICAgIERpc2FibGVFdmVudEhvb2soKTsKIH0KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa2FwcF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGthcHAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa2FwcE9iamVjdCksICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa2FwcF9EZWFsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGthcHBfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrYXBwX1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgVGthcHBfRGVhbGxvY30sCisgICAge1B5X3RwX21ldGhvZHMsIFRrYXBwX21ldGhvZHN9LAorICAgIHswLCAwfQorfTsKKworCitzdGF0aWMgUHlUeXBlX1NwZWMgVGthcHBfVHlwZV9zcGVjID0geworICAgICJ0a2FwcCIsCisgICAgc2l6ZW9mKFRrYXBwT2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa2FwcF9UeXBlX3Nsb3RzLAogfTsKIAogCkBAIC0yOTgxLDcgKzI3NDksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHJldHVybiAoUHlPYmplY3QgKikgVGthcHBfTmV3KHNjcmVlbk5hbWUsIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZSwgd2FudG9iamVjdHMsICAgICB3YW50VGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCB3YW50VGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luYywgdXNlKTsKIH0KIApAQCAtMjk5Nyw4ICsyNzY1LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFRraW50ZXJfYnVzeXdhaXRpbnRlcnZhbCA9IG5ld192YWw7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiBzdGF0aWMgY2hhciBzZXRidXN5d2FpdGludGVydmFsX2RvY1tdID0KQEAgLTMxMzEsMjcgKzI4OTgsNiBAQAogfQogCiAKLS8qIGFsbCBlcnJvcnMgd2lsbCBiZSBjaGVja2VkIGluIG9uZSBmZWxsIHN3b29wIGluIGluaXRfdGtpbnRlcigpICovCi1zdGF0aWMgdm9pZAotaW5zX2xvbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGxvbmcgdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci1zdGF0aWMgdm9pZAotaW5zX3N0cmluZyhQeU9iamVjdCAqZCwgY2hhciAqbmFtZSwgY2hhciAqdmFsKQotewotICAgIFB5T2JqZWN0ICp2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsKTsKLSAgICBpZiAodikgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCBuYW1lLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLX0KLQotCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF90a2ludGVybW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKICAgICAiX3RraW50ZXIiLApAQCAtMzE2Nyw0NSArMjkxMywxMTEgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3RraW50ZXIodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp1ZXhlLCAqY2V4ZTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlRrYXBwX1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgIFB5T2JqZWN0ICptLCAqdWV4ZSwgKmNleGUsICpvOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICB0Y2xfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBpZiAodGNsX2xvY2sgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl90a2ludGVybW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIFRraW50ZXJfVGNsRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbEVycm9yIiwgVGtpbnRlcl9UY2xFcnJvcik7Ci0KLSAgICBpbnNfbG9uZyhkLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpOwotICAgIGluc19sb25nKGQsICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSk7Ci0gICAgaW5zX2xvbmcoZCwgIkVYQ0VQVElPTiIsIFRDTF9FWENFUFRJT04pOwotICAgIGluc19sb25nKGQsICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIlRJTUVSX0VWRU5UUyIsIFRDTF9USU1FUl9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUyk7Ci0gICAgaW5zX2xvbmcoZCwgIkRPTlRfV0FJVCIsIFRDTF9ET05UX1dBSVQpOwotICAgIGluc19zdHJpbmcoZCwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKTsKLQotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUa2FwcFR5cGUiLCAoUHlPYmplY3QgKikmVGthcHBfVHlwZSk7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa3R0X1R5cGUpIDwgMCkgeworICAgIG8gPSBQeUVycl9OZXdFeGNlcHRpb24oIl90a2ludGVyLlRjbEVycm9yIiwgTlVMTCwgTlVMTCk7CisgICAgaWYgKG8gPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYobSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGt0dFR5cGUiLCAoUHlPYmplY3QgKikmVGt0dF9UeXBlKTsKKyAgICBQeV9JTkNSRUYobyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsRXJyb3IiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRraW50ZXJfVGNsRXJyb3IgPSBvOwogCi0gICAgUHlfVFlQRSgmUHlUY2xPYmplY3RfVHlwZSkgPSAmUHlUeXBlX1R5cGU7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRjbF9PYmoiLCAoUHlPYmplY3QgKikmUHlUY2xPYmplY3RfVHlwZSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRUFEQUJMRSIsIFRDTF9SRUFEQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXUklUQUJMRSIsIFRDTF9XUklUQUJMRSkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIldJTkRPV19FVkVOVFMiLCBUQ0xfV0lORE9XX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJGSUxFX0VWRU5UUyIsIFRDTF9GSUxFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklETEVfRVZFTlRTIiwgVENMX0lETEVfRVZFTlRTKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFMTF9FVkVOVFMiLCBUQ0xfQUxMX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRLX1ZFUlNJT04iLCBUS19WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIlRDTF9WRVJTSU9OIiwgVENMX1ZFUlNJT04pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGthcHBfVHlwZV9zcGVjKTsKKyAgICBpZiAobyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRrYXBwVHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGthcHBfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZUa3R0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa3R0VHlwZSIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVGt0dF9UeXBlID0gbzsKKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlB5VGNsT2JqZWN0X1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUY2xfT2JqIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVRjbE9iamVjdF9UeXBlID0gbzsKIAogI2lmZGVmIFRLX0FRVUEKICAgICAvKiBUa19NYWNPU1hTZXR1cFRrTm90aWZpZXIgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIFRjbCdzIHN1YnN5c3RlbXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOWU5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL190cmFjZW1hbGxvYy5jCkBAIC0wLDAgKzEsMTQzMSBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgImhhc2h0YWJsZS5oIgorI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCisjaW5jbHVkZSAicHl0aHJlYWQuaCIKKyNpbmNsdWRlICJvc2RlZnMuaCIKKworLyogVHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyNkZWZpbmUgVFJBQ0VfUkFXX01BTExPQworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCB0cmFjZW1hbGxvY19zdG9wKHZvaWQpOworc3RhdGljIHZvaWQqIHJhd19tYWxsb2Moc2l6ZV90IHNpemUpOworc3RhdGljIHZvaWQgcmF3X2ZyZWUodm9pZCAqcHRyKTsKKworI2lmZGVmIFB5X0RFQlVHCisjICBkZWZpbmUgVFJBQ0VfREVCVUcKKyNlbmRpZgorCisjZGVmaW5lIF9TVFIoVkFMKSAjVkFMCisjZGVmaW5lIFNUUihWQUwpIF9TVFIoVkFMKQorCisvKiBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIHN0cnVjdCB7CisgICAgUHlNZW1BbGxvY2F0b3IgbWVtOworICAgIFB5TWVtQWxsb2NhdG9yIHJhdzsKKyAgICBQeU1lbUFsbG9jYXRvciBvYmo7Cit9IGFsbG9jYXRvcnM7CisKK3N0YXRpYyBzdHJ1Y3QgeworICAgIC8qIE1vZHVsZSBpbml0aWFsaXplZD8KKyAgICAgICBWYXJpYWJsZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworICAgIGVudW0geworICAgICAgICBUUkFDRU1BTExPQ19OT1RfSU5JVElBTElaRUQsCisgICAgICAgIFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVELAorICAgICAgICBUUkFDRU1BTExPQ19GSU5BTElaRUQKKyAgICB9IGluaXRpYWxpemVkOworCisgICAgLyogSXMgdHJhY2VtYWxsb2MgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnM/CisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KKyAgICBpbnQgdHJhY2luZzsKKworICAgIC8qIGxpbWl0IG9mIHRoZSBudW1iZXIgb2YgZnJhbWVzIGluIGEgdHJhY2ViYWNrLCAxIGJ5IGRlZmF1bHQuCisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwuICovCisgICAgaW50IG1heF9uZnJhbWU7Cit9IHRyYWNlbWFsbG9jX2NvbmZpZyA9IHtUUkFDRU1BTExPQ19OT1RfSU5JVElBTElaRUQsIDAsIDF9OworCisjaWYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKSAmJiBkZWZpbmVkKFdJVEhfVEhSRUFEKQorLyogVGhpcyBsb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHRyYWNlbWFsbG9jX2ZyZWUoKSBpcyBjYWxsZWQgd2l0aG91dAorICAgdGhlIEdJTCBoZWxkIGZyb20gUHlNZW1fUmF3RnJlZSgpLiBJdCBjYW5ub3QgYWNxdWlyZSB0aGUgbG9jayBiZWNhdXNlIGl0CisgICB3b3VsZCBpbnRyb2R1Y2UgYSBkZWFkbG9jayBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQoKS4gKi8KK3N0YXRpYyBQeVRocmVhZF90eXBlX2xvY2sgdGFibGVzX2xvY2s7CisjICBkZWZpbmUgVEFCTEVTX0xPQ0soKSBQeVRocmVhZF9hY3F1aXJlX2xvY2sodGFibGVzX2xvY2ssIDEpCisjICBkZWZpbmUgVEFCTEVTX1VOTE9DSygpIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0YWJsZXNfbG9jaykKKyNlbHNlCisgICAvKiB2YXJpYWJsZXMgYXJlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisjICBkZWZpbmUgVEFCTEVTX0xPQ0soKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKQorI2VuZGlmCisKKy8qIFBhY2sgdGhlIGZyYW1lX3Qgc3RydWN0dXJlIHRvIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludCBvbiA2NC1iaXQKKyAgIGFyY2hpdGVjdHVyZXM6IDEyIGJ5dGVzIGluc3RlYWQgb2YgMTYuIFRoaXMgb3B0aW1pemF0aW9uIG1pZ2h0IHByb2R1Y2UKKyAgIFNJR0JVUyBvbiBhcmNoaXRlY3R1cmVzIG5vdCBzdXBwb3J0aW5nIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzZXMgKDY0LWJpdAorICAgSVBTIENQVT8pOiBvbiBzdWNoIGFyY2hpdGVjdHVyZSwgdGhlIHN0cnVjdHVyZSBtdXN0IG5vdCBiZSBwYWNrZWQuICovCisjcHJhZ21hIHBhY2soNCkKK3R5cGVkZWYgc3RydWN0CisjaWZkZWYgX19HTlVDX18KK19fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgaW50IGxpbmVubzsKK30gZnJhbWVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5X3VoYXNoX3QgaGFzaDsKKyAgICBpbnQgbmZyYW1lOworICAgIGZyYW1lX3QgZnJhbWVzWzFdOworfSB0cmFjZWJhY2tfdDsKKworI2RlZmluZSBUUkFDRUJBQ0tfU0laRShORlJBTUUpIFwKKyAgICAgICAgKHNpemVvZih0cmFjZWJhY2tfdCkgKyBzaXplb2YoZnJhbWVfdCkgKiAoTkZSQU1FIC0gMSkpCisKKyNkZWZpbmUgTUFYX05GUkFNRSBcCisgICAgICAgICgoSU5UX01BWCAtIHNpemVvZih0cmFjZWJhY2tfdCkpIC8gc2l6ZW9mKGZyYW1lX3QpICsgMSkKKworc3RhdGljIFB5T2JqZWN0ICp1bmtub3duX2ZpbGVuYW1lID0gTlVMTDsKK3N0YXRpYyB0cmFjZWJhY2tfdCB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CisKKy8qIFRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogU2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIGluIGJ5dGVzICovCisgICAgc2l6ZV90IHNpemU7CisKKyAgICAvKiBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkICovCisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKK30gdHJhY2VfdDsKKworLyogU2l6ZSBpbiBieXRlcyBvZiBjdXJyZW50bHkgdHJhY2VkIG1lbW9yeS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIHNpemVfdCB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKworLyogUGVhayBzaXplIGluIGJ5dGVzIG9mIHRyYWNlZCBtZW1vcnkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBzaXplX3QgdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5ID0gMDsKKworLyogSGFzaCB0YWJsZSB1c2VkIGFzIGEgc2V0IHRvIHRvIGludGVybiBmaWxlbmFtZXM6CisgICBQeU9iamVjdCogPT4gUHlPYmplY3QqLgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IE5VTEw7CisKKy8qIEJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgaW4gdHJhY2ViYWNrX25ldygpLgorICAgUHJvdGVjdGVkIGJ5IHRoZSBHSUwuICovCitzdGF0aWMgdHJhY2ViYWNrX3QgKnRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7CisKKy8qIEhhc2ggdGFibGUgdXNlZCBhcyBhIHNldCB0byBpbnRlcm4gdHJhY2ViYWNrczoKKyAgIHRyYWNlYmFja190KiA9PiB0cmFjZWJhY2tfdCoKKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gTlVMTDsKKworLyogcG9pbnRlciAodm9pZCopID0+IHRyYWNlICh0cmFjZV90KS4KKyAgIFByb3RlY3RlZCBieSBUQUJMRVNfTE9DSygpLiAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfdHJhY2VzID0gTlVMTDsKKworI2lmZGVmIFRSQUNFX0RFQlVHCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInRyYWNlbWFsbG9jOiAiKTsKKyAgICB2YV9zdGFydChhcCwgZm9ybWF0KTsKKyAgICB2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXApOworICAgIHZhX2VuZChhcCk7CisgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIGZmbHVzaChzdGRlcnIpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFRSQUNFX1JBV19NQUxMT0MpCisjZGVmaW5lIFJFRU5UUkFOVF9USFJFQURMT0NBTAorCisvKiBJZiB5b3VyIE9TIGRvZXMgbm90IHByb3ZpZGUgbmF0aXZlIHRocmVhZCBsb2NhbCBzdG9yYWdlLCB5b3UgY2FuIGltcGxlbWVudAorICAgaXQgbWFudWFsbHkgdXNpbmcgYSBsb2NrLiBGdW5jdGlvbnMgb2YgdGhyZWFkLmMgY2Fubm90IGJlIHVzZWQgYmVjYXVzZQorICAgdGhleSB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgd2hpY2ggbGVhZHMgdG8gYSByZWVudHJhbnQgY2FsbC4gKi8KKyNpZiAhKGRlZmluZWQoX1BPU0lYX1RIUkVBRFMpIHx8IGRlZmluZWQoTlRfVEhSRUFEUykpCisjICBlcnJvciAibmVlZCBuYXRpdmUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgKFRMUykiCisjZW5kaWYKKworc3RhdGljIGludCB0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5OworCisvKiBBbnkgbm9uLU5VTEwgcG9pbnRlciBjYW4gYmUgdXNlZCAqLworI2RlZmluZSBSRUVOVFJBTlQgUHlfVHJ1ZQorCitzdGF0aWMgaW50CitnZXRfcmVlbnRyYW50KHZvaWQpCit7CisgICAgdm9pZCAqcHRyID0gUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KTsKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgYXNzZXJ0KHB0ciA9PSBSRUVOVFJBTlQpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3NldF9yZWVudHJhbnQoaW50IHJlZW50cmFudCkKK3sKKyAgICBhc3NlcnQocmVlbnRyYW50ID09IDAgfHwgcmVlbnRyYW50ID09IDEpOworICAgIGlmIChyZWVudHJhbnQpIHsKKyAgICAgICAgYXNzZXJ0KFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSkgPT0gTlVMTCk7CisgICAgICAgIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUVOVFJBTlQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogRklYTUU6IFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoKSBjYW5ub3QgYmUgdXNlZCB0byBzZXQgdGhlIGZsYWcKKyAgICAgICAgICAgdG8gemVybywgYmVjYXVzZSBpdCBkb2VzIG5vdGhpbmcgaWYgdGhlIHZhcmlhYmxlIGhhcyBhbHJlYWR5CisgICAgICAgICAgIGEgdmFsdWUgc2V0LiAqLworICAgICAgICBQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpOworICAgIH0KK30KKworI2Vsc2UKKworLyogV0lUSF9USFJFQUQgbm90IGRlZmluZWQ6IFB5dGhvbiBjb21waWxlZCB3aXRob3V0IHRocmVhZHMsCisgICBvciBUUkFDRV9SQVdfTUFMTE9DIG5vdCBkZWZpbmVkOiB2YXJpYWJsZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIGludCB0cmFjZW1hbGxvY19yZWVudHJhbnQgPSAwOworCitzdGF0aWMgaW50CitnZXRfcmVlbnRyYW50KHZvaWQpCit7CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX3JlZW50cmFudDsKK30KKworc3RhdGljIHZvaWQKK3NldF9yZWVudHJhbnQoaW50IHJlZW50cmFudCkKK3sKKyAgICBhc3NlcnQoIXJlZW50cmFudCB8fCAhZ2V0X3JlZW50cmFudCgpKTsKKyAgICB0cmFjZW1hbGxvY19yZWVudHJhbnQgPSByZWVudHJhbnQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludAoraGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZShjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpCit7CisgICAgaWYgKGtleSAhPSBOVUxMICYmIGVudHJ5LT5rZXkgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIChQeVVuaWNvZGVfQ29tcGFyZSgoUHlPYmplY3QgKilrZXksIChQeU9iamVjdCAqKWVudHJ5LT5rZXkpID09IDApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGtleSA9PSBlbnRyeS0+a2V5OworfQorCitzdGF0aWMgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCBoYXNodGFibGVfYWxsb2MgPSB7bWFsbG9jLCBmcmVlfTsKKworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqCitoYXNodGFibGVfbmV3KHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jKQoreworICAgIHJldHVybiBfUHlfaGFzaHRhYmxlX25ld19mdWxsKGRhdGFfc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmMsIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmaGFzaHRhYmxlX2FsbG9jKTsKK30KKworc3RhdGljIHZvaWQqCityYXdfbWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBhbGxvY2F0b3JzLnJhdy5tYWxsb2MoYWxsb2NhdG9ycy5yYXcuY3R4LCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK3Jhd19mcmVlKHZvaWQgKnB0cikKK3sKKyAgICBhbGxvY2F0b3JzLnJhdy5mcmVlKGFsbG9jYXRvcnMucmF3LmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5X3VoYXNoX3QKK2hhc2h0YWJsZV9oYXNoX3RyYWNlYmFjayhjb25zdCB2b2lkICprZXkpCit7CisgICAgY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjayA9IGtleTsKKyAgICByZXR1cm4gdHJhY2ViYWNrLT5oYXNoOworfQorCitzdGF0aWMgaW50CitoYXNodGFibGVfY29tcGFyZV90cmFjZWJhY2soY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICpoZSkKK3sKKyAgICBjb25zdCB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrMiA9IGhlLT5rZXk7CisgICAgY29uc3QgZnJhbWVfdCAqZnJhbWUxLCAqZnJhbWUyOworICAgIGludCBpOworCisgICAgaWYgKHRyYWNlYmFjazEtPm5mcmFtZSAhPSB0cmFjZWJhY2syLT5uZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChpPTA7IGkgPCB0cmFjZWJhY2sxLT5uZnJhbWU7IGkrKykgeworICAgICAgICBmcmFtZTEgPSAmdHJhY2ViYWNrMS0+ZnJhbWVzW2ldOworICAgICAgICBmcmFtZTIgPSAmdHJhY2ViYWNrMi0+ZnJhbWVzW2ldOworCisgICAgICAgIGlmIChmcmFtZTEtPmxpbmVubyAhPSBmcmFtZTItPmxpbmVubykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChmcmFtZTEtPmZpbGVuYW1lICE9IGZyYW1lMi0+ZmlsZW5hbWUpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ29tcGFyZShmcmFtZTEtPmZpbGVuYW1lLCBmcmFtZTItPmZpbGVuYW1lKSAhPSAwKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZ2V0X2ZyYW1lKFB5RnJhbWVPYmplY3QgKnB5ZnJhbWUsIGZyYW1lX3QgKmZyYW1lKQoreworICAgIFB5Q29kZU9iamVjdCAqY29kZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGZyYW1lLT5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgZnJhbWUtPmxpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihweWZyYW1lKTsKKyAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKKyAgICBpZiAoZnJhbWUtPmxpbmVubyA8IDApCisgICAgICAgIGZyYW1lLT5saW5lbm8gPSAwOworCisgICAgY29kZSA9IHB5ZnJhbWUtPmZfY29kZTsKKyAgICBpZiAoY29kZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGNvZGUgb2JqZWN0IG9mIHRoZSBmcmFtZSIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29kZS0+Y29fZmlsZW5hbWUgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgY29kZSBvYmplY3QiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmlsZW5hbWUgPSBjb2RlLT5jb19maWxlbmFtZTsKKyAgICBhc3NlcnQoZmlsZW5hbWUgIT0gTlVMTCk7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGZpbGVuYW1lKSkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmaWxlbmFtZSBpcyBub3QgYW4gdW5pY29kZSBzdHJpbmciKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUHlVbmljb2RlX0lTX1JFQURZKGZpbGVuYW1lKSkgeworICAgICAgICAvKiBEb24ndCBtYWtlIGEgVW5pY29kZSBzdHJpbmcgcmVhZHkgdG8gYXZvaWQgcmVlbnRyYW50IGNhbGxzCisgICAgICAgICAgIHRvIHRyYWNlbWFsbG9jX21hbGxvYygpIG9yIHRyYWNlbWFsbG9jX3JlYWxsb2MoKSAqLworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmaWxlbmFtZSBpcyBub3QgYSByZWFkeSB1bmljb2RlIHN0cmluZyIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBpbnRlcm4gdGhlIGZpbGVuYW1lICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSh0cmFjZW1hbGxvY19maWxlbmFtZXMsIGZpbGVuYW1lKTsKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IChQeU9iamVjdCAqKWVudHJ5LT5rZXk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiB0cmFjZW1hbGxvY19maWxlbmFtZXMgaXMgcmVzcG9uc2libGUgdG8ga2VlcCBhIHJlZmVyZW5jZQorICAgICAgICAgICB0byB0aGUgZmlsZW5hbWUgKi8KKyAgICAgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKF9QeV9oYXNodGFibGVfc2V0KHRyYWNlbWFsbG9jX2ZpbGVuYW1lcywgZmlsZW5hbWUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBpbnRlcm4gdGhlIGZpbGVuYW1lIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHRoZSB0cmFjZW1hbGxvY19maWxlbmFtZXMgdGFibGUga2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGZpbGVuYW1lICovCisgICAgZnJhbWUtPmZpbGVuYW1lID0gZmlsZW5hbWU7Cit9CisKK3N0YXRpYyBQeV91aGFzaF90Cit0cmFjZWJhY2tfaGFzaCh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrKQoreworICAgIC8qIGNvZGUgYmFzZWQgb24gdHVwbGVoYXNoKCkgb2YgT2JqZWN0cy90dXBsZW9iamVjdC5jICovCisgICAgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgUHlfaGFzaF90IHk7CisgICAgaW50IGxlbiA9IHRyYWNlYmFjay0+bmZyYW1lOworICAgIFB5X3VoYXNoX3QgbXVsdCA9IF9QeUhBU0hfTVVMVElQTElFUjsKKyAgICBmcmFtZV90ICpmcmFtZTsKKworICAgIHggPSAweDM0NTY3OFVMOworICAgIGZyYW1lID0gdHJhY2ViYWNrLT5mcmFtZXM7CisgICAgd2hpbGUgKC0tbGVuID49IDApIHsKKyAgICAgICAgeSA9IFB5T2JqZWN0X0hhc2goZnJhbWUtPmZpbGVuYW1lKTsKKyAgICAgICAgeSBePSBmcmFtZS0+bGluZW5vOworICAgICAgICBmcmFtZSsrOworCisgICAgICAgIHggPSAoeCBeIHkpICogbXVsdDsKKyAgICAgICAgLyogdGhlIGNhc3QgbWlnaHQgdHJ1bmNhdGUgbGVuOyB0aGF0IGRvZXNuJ3QgY2hhbmdlIGhhc2ggc3RhYmlsaXR5ICovCisgICAgICAgIG11bHQgKz0gKFB5X2hhc2hfdCkoODI1MjBVTCArIGxlbiArIGxlbik7CisgICAgfQorICAgIHggKz0gOTc1MzFVTDsKKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlYmFja19nZXRfZnJhbWVzKHRyYWNlYmFja190ICp0cmFjZWJhY2spCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworICAgIFB5RnJhbWVPYmplY3QgKnB5ZnJhbWU7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIHRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisjZWxzZQorICAgIHRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisjZW5kaWYKKyAgICBpZiAodHN0YXRlID09IE5VTEwpIHsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGdldCB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChweWZyYW1lID0gdHN0YXRlLT5mcmFtZTsgcHlmcmFtZSAhPSBOVUxMOyBweWZyYW1lID0gcHlmcmFtZS0+Zl9iYWNrKSB7CisgICAgICAgIHRyYWNlbWFsbG9jX2dldF9mcmFtZShweWZyYW1lLCAmdHJhY2ViYWNrLT5mcmFtZXNbdHJhY2ViYWNrLT5uZnJhbWVdKTsKKyAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5maWxlbmFtZSAhPSBOVUxMKTsKKyAgICAgICAgYXNzZXJ0KHRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXS5saW5lbm8gPj0gMCk7CisgICAgICAgIHRyYWNlYmFjay0+bmZyYW1lKys7CisgICAgICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHRyYWNlYmFja190ICoKK3RyYWNlYmFja19uZXcodm9pZCkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBnZXQgZnJhbWVzICovCisgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2NfdHJhY2ViYWNrOworICAgIHRyYWNlYmFjay0+bmZyYW1lID0gMDsKKyAgICB0cmFjZWJhY2tfZ2V0X2ZyYW1lcyh0cmFjZWJhY2spOworICAgIGlmICh0cmFjZWJhY2stPm5mcmFtZSA9PSAwKQorICAgICAgICByZXR1cm4gJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjazsKKyAgICB0cmFjZWJhY2stPmhhc2ggPSB0cmFjZWJhY2tfaGFzaCh0cmFjZWJhY2spOworCisgICAgLyogaW50ZXJuIHRoZSB0cmFjZWJhY2sgKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MsIHRyYWNlYmFjayk7CisgICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHRyYWNlYmFja190ICpjb3B5OworICAgICAgICBzaXplX3QgdHJhY2ViYWNrX3NpemU7CisKKyAgICAgICAgdHJhY2ViYWNrX3NpemUgPSBUUkFDRUJBQ0tfU0laRSh0cmFjZWJhY2stPm5mcmFtZSk7CisKKyAgICAgICAgY29weSA9IHJhd19tYWxsb2ModHJhY2ViYWNrX3NpemUpOworICAgICAgICBpZiAoY29weSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gaW50ZXJuIHRoZSB0cmFjZWJhY2s6IG1hbGxvYyBmYWlsZWQiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGNvcHksIHRyYWNlYmFjaywgdHJhY2ViYWNrX3NpemUpOworCisgICAgICAgIGlmIChfUHlfaGFzaHRhYmxlX3NldCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCBjb3B5LCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgICAgIHJhd19mcmVlKGNvcHkpOworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgdHJhY2ViYWNrOiBwdXRkYXRhIGZhaWxlZCIpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0cmFjZWJhY2sgPSBjb3B5OworICAgIH0KKyAgICByZXR1cm4gdHJhY2ViYWNrOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19hZGRfdHJhY2Uodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IHJlczsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja19uZXcoKTsKKyAgICBpZiAodHJhY2ViYWNrID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHRyYWNlLnNpemUgPSBzaXplOworICAgIHRyYWNlLnRyYWNlYmFjayA9IHRyYWNlYmFjazsKKworICAgIHJlcyA9IF9QeV9IQVNIVEFCTEVfU0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5IDw9IFBZX1NJWkVfTUFYIC0gc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgKz0gc2l6ZTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPiB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkpCisgICAgICAgICAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5OworICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2Uodm9pZCAqcHRyKQoreworICAgIHRyYWNlX3QgdHJhY2U7CisKKyAgICBpZiAoX1B5X2hhc2h0YWJsZV9wb3AodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsICZ0cmFjZSwgc2l6ZW9mKHRyYWNlKSkpIHsKKyAgICAgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgPj0gdHJhY2Uuc2l6ZSk7CisgICAgICAgIHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnkgLT0gdHJhY2Uuc2l6ZTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgIHZvaWQgKnB0cjsKKworICAgIHB0ciA9IGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIsIHNpemUpIDwgMCkgeworICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgVEFCTEVTX1VOTE9DSygpOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICB2b2lkICpwdHIyOworCisgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworICAgIGlmIChwdHIyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIC8qIGFuIGV4aXN0aW5nIG1lbW9yeSBibG9jayBoYXMgYmVlbiByZXNpemVkICovCisKKyAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgdHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHB0cik7CisKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIyLCBuZXdfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAvKiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuIFRoZSBlcnJvciBjYW5ub3QgYmUgcmVwb3J0ZWQgdG8KKyAgICAgICAgICAgICAgIHRoZSBjYWxsZXIsIGJlY2F1c2UgcmVhbGxvYygpIG1heSBhbHJlYWR5IGhhdmUgc2hyaW5rZWQgdGhlCisgICAgICAgICAgICAgICBtZW1vcnkgYmxvY2sgYW5kIHNvIHJlbW92ZWQgYnl0ZXMuCisKKyAgICAgICAgICAgICAgIFRoaXMgY2FzZSBpcyB2ZXJ5IHVubGlrZWx5OiBhbiBoYXNoIGVudHJ5IGhhcyBqdXN0IGJlZW4KKyAgICAgICAgICAgICAgIHJlbGVhc2VkLCBzbyB0aGUgaGFzaCB0YWJsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgZnJlZSBlbnRyeS4KKworICAgICAgICAgICAgICAgVGhlIEdJTCBhbmQgdGhlIHRhYmxlIGxvY2sgZW5zdXJlcyB0aGF0IG9ubHkgb25lIHRocmVhZCBpcworICAgICAgICAgICAgICAgYWxsb2NhdGluZyBtZW1vcnkuICovCisgICAgICAgICAgICBhc3NlcnQoMCAmJiAic2hvdWxkIG5ldmVyIGhhcHBlbiIpOworICAgICAgICB9CisgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIG5ldyBhbGxvY2F0aW9uICovCisKKyAgICAgICAgVEFCTEVTX0xPQ0soKTsKKyAgICAgICAgaWYgKHRyYWNlbWFsbG9jX2FkZF90cmFjZShwdHIyLCBuZXdfc2l6ZSkgPCAwKSB7CisgICAgICAgICAgICAvKiBGYWlsZWQgdG8gYWxsb2NhdGUgYSB0cmFjZSBmb3IgdGhlIG5ldyBtZW1vcnkgYmxvY2sgKi8KKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgICAgIGFsbG9jLT5mcmVlKGFsbG9jLT5jdHgsIHB0cjIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgVEFCTEVTX1VOTE9DSygpOworICAgIH0KKyAgICByZXR1cm4gcHRyMjsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2ZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworCisgICAgaWYgKHB0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKKyAgICAgLyogR0lMIGNhbm5vdCBiZSBsb2NrZWQgaW4gUHlNZW1fUmF3RnJlZSgpIGJlY2F1c2UgaXQgd291bGQgaW50cm9kdWNlCisgICAgICAgIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCisKKyAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfbWFsbG9jX2dpbCh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfTWFsbG9jKCkgY2FsbHMgUHlNZW1fTWFsbG9jKCkgZm9yCisgICAgICAgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gNTEyIGJ5dGVzLCBkb24ndCB0cmFjZSB0aGUgc2FtZSBtZW1vcnkKKyAgICAgICBhbGxvY2F0aW9uIHR3aWNlLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICBwdHIgPSB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplKTsKKworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yZWFsbG9jX2dpbCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIHZvaWQgKnB0cjI7CisKKyAgICBpZiAoZ2V0X3JlZW50cmFudCgpKSB7CisgICAgICAgIC8qIFJlZW50cmFudCBjYWxsIHRvIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fUmF3UmVhbGxvYygpLgorICAgICAgICAgICBFeGFtcGxlOiBQeU1lbV9SYXdSZWFsbG9jKCkgaXMgY2FsbGVkIGludGVybmFsbHkgYnkgcHltYWxsb2MKKyAgICAgICAgICAgKF9QeU9iamVjdF9NYWxsb2MoKSBhbmQgIF9QeU9iamVjdF9SZWFsbG9jKCkpIHRvIGFsbG9jYXRlIGEgbmV3CisgICAgICAgICAgIGFyZW5hIChuZXdfYXJlbmEoKSkuICovCisgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKworICAgICAgICBwdHIyID0gYWxsb2MtPnJlYWxsb2MoYWxsb2MtPmN0eCwgcHRyLCBuZXdfc2l6ZSk7CisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRyMjsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5T2JqZXRfUmVhbGxvYygpIGNhbGxzIFB5TWVtX1JlYWxsb2MoKSBmb3IKKyAgICAgICBhbGxvY2F0aW9ucyBsYXJnZXIgdGhhbiA1MTIgYnl0ZXMuIERvbid0IHRyYWNlIHRoZSBzYW1lIG1lbW9yeQorICAgICAgIGFsbG9jYXRpb24gdHdpY2UuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworICAgIHB0cjIgPSB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSk7CisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHIyOworfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworc3RhdGljIHZvaWQqCit0cmFjZW1hbGxvY19yYXdfbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbF9zdGF0ZTsKKyNlbmRpZgorICAgIHZvaWQgKnB0cjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworICAgICAgICByZXR1cm4gYWxsb2MtPm1hbGxvYyhhbGxvYy0+Y3R4LCBzaXplKTsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5R0lMU3RhdGVfRW5zdXJlKCkgbWF5IGNhbGwgUHlNZW1fUmF3TWFsbG9jKCkKKyAgICAgICBpbmRpcmVjdGx5IHdoaWNoIHdvdWxkIGNhbGwgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpZiByZWVudHJhbnQgYXJlIG5vdAorICAgICAgIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisgICAgcHRyID0gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSk7CisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbF9zdGF0ZSk7CisjZWxzZQorICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworI2VuZGlmCisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsX3N0YXRlOworI2VuZGlmCisgICAgdm9pZCAqcHRyMjsKKworICAgIGlmIChnZXRfcmVlbnRyYW50KCkpIHsKKyAgICAgICAgLyogUmVlbnRyYW50IGNhbGwgdG8gUHlNZW1fUmF3UmVhbGxvYygpLiAqLworICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisKKyAgICAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworCisgICAgICAgIGlmIChwdHIyICE9IE5VTEwgJiYgcHRyICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgICAgICB0cmFjZW1hbGxvY19yZW1vdmVfdHJhY2UocHRyKTsKKyAgICAgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHRyMjsKKyAgICB9CisKKyAgICAvKiBJZ25vcmUgcmVlbnRyYW50IGNhbGwuIFB5R0lMU3RhdGVfRW5zdXJlKCkgbWF5IGNhbGwgUHlNZW1fUmF3TWFsbG9jKCkKKyAgICAgICBpbmRpcmVjdGx5IHdoaWNoIHdvdWxkIGNhbGwgUHlHSUxTdGF0ZV9FbnN1cmUoKSBpZiByZWVudHJhbnQgY2FsbHMgYXJlCisgICAgICAgbm90IGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGdpbF9zdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsX3N0YXRlKTsKKyNlbHNlCisgICAgcHRyMiA9IHRyYWNlbWFsbG9jX3JlYWxsb2MoY3R4LCBwdHIsIG5ld19zaXplKTsKKyNlbmRpZgorCisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICByZXR1cm4gcHRyMjsKK30KKyNlbmRpZiAgIC8qIFRSQUNFX1JBV19NQUxMT0MgKi8KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfY2xlYXJfZmlsZW5hbWUoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IChQeU9iamVjdCAqKWVudHJ5LT5rZXk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordHJhY2ViYWNrX2ZyZWVfdHJhY2ViYWNrKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrID0gKHRyYWNlYmFja190ICopZW50cnktPmtleTsKKyAgICByYXdfZnJlZSh0cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCisvKiByZWVudHJhbnQgZmxhZyBtdXN0IGJlIHNldCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIEdJTCBtdXN0IGJlIGhlbGQgKi8KK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19jbGVhcl90cmFjZXModm9pZCkKK3sKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIC8qIFRoZSBHSUwgcHJvdGVjdHMgdmFyaWFibGVzIGFnYWludCBjb25jdXJyZW50IGFjY2VzcyAqLworICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICAvKiBEaXNhYmxlIGFsc28gcmVlbnRyYW50IGNhbGxzIHRvIHRyYWNlbWFsbG9jX21hbGxvYygpIHRvIG5vdCBhZGQgYSBuZXcKKyAgICAgICB0cmFjZSB3aGlsZSB3ZSBhcmUgY2xlYXJpbmcgdHJhY2VzICovCisgICAgYXNzZXJ0KGdldF9yZWVudHJhbnQoKSk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID0gMDsKKyAgICB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnkgPSAwOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaCh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2tfZnJlZV90cmFjZWJhY2ssIE5VTEwpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfdHJhY2ViYWNrcyk7CisKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2godHJhY2VtYWxsb2NfZmlsZW5hbWVzLCB0cmFjZW1hbGxvY19jbGVhcl9maWxlbmFtZSwgTlVMTCk7CisgICAgX1B5X2hhc2h0YWJsZV9jbGVhcih0cmFjZW1hbGxvY19maWxlbmFtZXMpOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19pbml0KHZvaWQpCit7CisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9PSBUUkFDRU1BTExPQ19GSU5BTElaRUQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGhhcyBiZWVuIHVubG9hZGVkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID09IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworCisjaWZkZWYgUkVFTlRSQU5UX1RIUkVBRExPQ0FMCisgICAgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9IFB5VGhyZWFkX2NyZWF0ZV9rZXkoKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSA9PSAtMSkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisjZWxzZQorICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayA9PSBOVUxMKSB7CisgICAgICAgIHRhYmxlc19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgICAgICBpZiAodGFibGVzX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImNhbm5vdCBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyA9IGhhc2h0YWJsZV9uZXcoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYylQeU9iamVjdF9IYXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZSk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2tzID0gaGFzaHRhYmxlX25ldygwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyloYXNodGFibGVfaGFzaF90cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jKWhhc2h0YWJsZV9jb21wYXJlX3RyYWNlYmFjayk7CisKKyAgICB0cmFjZW1hbGxvY190cmFjZXMgPSBoYXNodGFibGVfbmV3KHNpemVvZih0cmFjZV90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19maWxlbmFtZXMgPT0gTlVMTCB8fCB0cmFjZW1hbGxvY190cmFjZWJhY2tzID09IE5VTEwKKyAgICAgICAgfHwgdHJhY2VtYWxsb2NfdHJhY2VzID09IE5VTEwpCisgICAgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdW5rbm93bl9maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKyAgICBpZiAodW5rbm93bl9maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnVua25vd25fZmlsZW5hbWUpOworCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLm5mcmFtZSA9IDE7CisgICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrLmZyYW1lc1swXS5saW5lbm8gPSAwOworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5oYXNoID0gdHJhY2ViYWNrX2hhc2goJnRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjayk7CisKKyAgICAvKiBEaXNhYmxlIHRyYWNpbmcgYWxsb2NhdGlvbnMgdW50aWwgaG9va3MgYXJlIGluc3RhbGxlZC4gU2V0CisgICAgICAgYWxzbyB0aGUgcmVlbnRyYW50IGZsYWcgdG8gZGV0ZWN0IGJ1Z3M6IGZhaWwgd2l0aCBhbiBhc3NlcnRpb24gZXJyb3IKKyAgICAgICBpZiBzZXRfcmVlbnRyYW50KDEpIGlzIGNhbGxlZCB3aGlsZSB0cmFjaW5nIGlzIGRpc2FibGVkLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2RlaW5pdCh2b2lkKQoreworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgIT0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQpCisgICAgICAgIHJldHVybjsKKyAgICB0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPSBUUkFDRU1BTExPQ19GSU5BTElaRUQ7CisKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisKKyAgICAvKiBkZXN0cm95IGhhc2ggdGFibGVzICovCisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorICAgIGlmICh0YWJsZXNfbG9jayAhPSBOVUxMKSB7CisgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayh0YWJsZXNfbG9jayk7CisgICAgICAgIHRhYmxlc19sb2NrID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworI2lmZGVmIFJFRU5UUkFOVF9USFJFQURMT0NBTAorICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXkodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisjZW5kaWYKKworICAgIFB5X1hERUNSRUYodW5rbm93bl9maWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3N0YXJ0KGludCBtYXhfbmZyYW1lKQoreworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2luaXQoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykgeworICAgICAgICAvKiBob29rIGFscmVhZHkgaW5zdGFsbGVkOiBkbyBub3RoaW5nICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGFzc2VydCgxIDw9IG1heF9uZnJhbWUgJiYgbWF4X25mcmFtZSA8PSBNQVhfTkZSQU1FKTsKKyAgICB0cmFjZW1hbGxvY19jb25maWcubWF4X25mcmFtZSA9IG1heF9uZnJhbWU7CisKKyAgICAvKiBhbGxvY2F0ZSBhIGJ1ZmZlciB0byBzdG9yZSBhIG5ldyB0cmFjZWJhY2sgKi8KKyAgICBzaXplID0gVFJBQ0VCQUNLX1NJWkUobWF4X25mcmFtZSk7CisgICAgYXNzZXJ0KHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9PSBOVUxMKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2sgPSByYXdfbWFsbG9jKHNpemUpOworICAgIGlmICh0cmFjZW1hbGxvY190cmFjZWJhY2sgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWZkZWYgVFJBQ0VfUkFXX01BTExPQworICAgIGFsbG9jLm1hbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19tYWxsb2M7CisgICAgYWxsb2MucmVhbGxvYyA9IHRyYWNlbWFsbG9jX3Jhd19yZWFsbG9jOworICAgIGFsbG9jLmZyZWUgPSB0cmFjZW1hbGxvY19mcmVlOworCisgICAgYWxsb2MuY3R4ID0gJmFsbG9jYXRvcnMucmF3OworICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2NhdG9ycy5yYXcpOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworI2VuZGlmCisKKyAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19tYWxsb2NfZ2lsOworICAgIGFsbG9jLnJlYWxsb2MgPSB0cmFjZW1hbGxvY19yZWFsbG9jX2dpbDsKKyAgICBhbGxvYy5mcmVlID0gdHJhY2VtYWxsb2NfZnJlZTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm1lbTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jYXRvcnMubWVtKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jKTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLm9iajsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jYXRvcnMub2JqKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgcmVhZHk6IHN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyAqLworICAgIHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nID0gMTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19zdG9wKHZvaWQpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogc3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKyAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDA7CisKKyAgICAvKiBzZXQgdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yIGlmCisgICAgICAgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgLyogdW5yZWdpc3RlciB0aGUgaG9vayBvbiBtZW1vcnkgYWxsb2NhdG9ycyAqLworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKyNlbmRpZgorICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fTUVNLCAmYWxsb2NhdG9ycy5tZW0pOworICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fT0JKLCAmYWxsb2NhdG9ycy5vYmopOworCisgICAgLyogcmVsZWFzZSBtZW1vcnkgKi8KKyAgICB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoKTsKKyAgICByYXdfZnJlZSh0cmFjZW1hbGxvY190cmFjZWJhY2spOworICAgIHRyYWNlbWFsbG9jX3RyYWNlYmFjayA9IE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2xpbmVub19hc19vYmooaW50IGxpbmVubykKK3sKKyAgICBpZiAobGluZW5vID49IDApCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobGluZW5vKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2MsCisgICAgImlzX3RyYWNpbmcoKS0+Ym9vbFxuIgorICAgICJcbiIKKyAgICAiVHJ1ZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyxcbiIKKyAgICAiRmFsc2Ugb3RoZXJ3aXNlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19pc190cmFjaW5nKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzX2RvYywKKyAgICAiY2xlYXJfdHJhY2VzKClcbiIKKyAgICAiXG4iCisgICAgIkNsZWFyIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKCk7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QqCitmcmFtZV90b19weW9iamVjdChmcmFtZV90ICpmcmFtZSkKK3sKKyAgICBQeU9iamVjdCAqZnJhbWVfb2JqLCAqbGluZW5vX29iajsKKworICAgIGZyYW1lX29iaiA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmIChmcmFtZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZnJhbWUtPmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGZyYW1lLT5maWxlbmFtZSA9IFB5X05vbmU7CisgICAgUHlfSU5DUkVGKGZyYW1lLT5maWxlbmFtZSk7CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDAsIGZyYW1lLT5maWxlbmFtZSk7CisKKyAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKKyAgICBsaW5lbm9fb2JqID0gbGluZW5vX2FzX29iaihmcmFtZS0+bGluZW5vKTsKKyAgICBpZiAobGluZW5vX29iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihmcmFtZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZV9vYmosIDEsIGxpbmVub19vYmopOworCisgICAgcmV0dXJuIGZyYW1lX29iajsKK30KKworc3RhdGljIFB5T2JqZWN0KgordHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlYmFja190ICp0cmFjZWJhY2ssIF9QeV9oYXNodGFibGVfdCAqaW50ZXJuX3RhYmxlKQoreworICAgIGludCBpOworICAgIFB5T2JqZWN0ICpmcmFtZXMsICpmcmFtZTsKKworICAgIGlmIChpbnRlcm5fdGFibGUgIT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5X0hBU0hUQUJMRV9HRVQoaW50ZXJuX3RhYmxlLCB0cmFjZWJhY2ssIGZyYW1lcykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIGZyYW1lczsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyYW1lcyA9IFB5VHVwbGVfTmV3KHRyYWNlYmFjay0+bmZyYW1lKTsKKyAgICBpZiAoZnJhbWVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpPTA7IGkgPCB0cmFjZWJhY2stPm5mcmFtZTsgaSsrKSB7CisgICAgICAgIGZyYW1lID0gZnJhbWVfdG9fcHlvYmplY3QoJnRyYWNlYmFjay0+ZnJhbWVzW2ldKTsKKyAgICAgICAgaWYgKGZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShmcmFtZXMsIGksIGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAoaW50ZXJuX3RhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeV9IQVNIVEFCTEVfU0VUKGludGVybl90YWJsZSwgdHJhY2ViYWNrLCBmcmFtZXMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZyYW1lcyk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogaW50ZXJuX3RhYmxlIGtlZXBzIGEgbmV3IHJlZmVyZW5jZSB0byBmcmFtZXMgKi8KKyAgICAgICAgUHlfSU5DUkVGKGZyYW1lcyk7CisgICAgfQorICAgIHJldHVybiBmcmFtZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlX3RvX3B5b2JqZWN0KHRyYWNlX3QgKnRyYWNlLCBfUHlfaGFzaHRhYmxlX3QgKmludGVybl90cmFjZWJhY2tzKQoreworICAgIFB5T2JqZWN0ICp0cmFjZV9vYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICpzaXplLCAqdHJhY2ViYWNrOworCisgICAgdHJhY2Vfb2JqID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKHRyYWNlX29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNpemUgPSBQeUxvbmdfRnJvbVNpemVfdCh0cmFjZS0+c2l6ZSk7CisgICAgaWYgKHNpemUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodHJhY2Vfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHJhY2Vfb2JqLCAwLCBzaXplKTsKKworICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja190b19weW9iamVjdCh0cmFjZS0+dHJhY2ViYWNrLCBpbnRlcm5fdHJhY2ViYWNrcyk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0cmFjZV9vYmopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTSh0cmFjZV9vYmosIDEsIHRyYWNlYmFjayk7CisKKyAgICByZXR1cm4gdHJhY2Vfb2JqOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZXM7CisgICAgX1B5X2hhc2h0YWJsZV90ICp0cmFjZWJhY2tzOworICAgIFB5T2JqZWN0ICpsaXN0OworfSBnZXRfdHJhY2VzX3Q7CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2dldF90cmFjZXNfZmlsbChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgZ2V0X3RyYWNlc190ICpnZXRfdHJhY2VzID0gdXNlcl9kYXRhOworICAgIHRyYWNlX3QgKnRyYWNlOworICAgIFB5T2JqZWN0ICp0cmFjZW1hbGxvY19vYmo7CisgICAgaW50IHJlczsKKworICAgIHRyYWNlID0gKHRyYWNlX3QgKilfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworCisgICAgdHJhY2VtYWxsb2Nfb2JqID0gdHJhY2VfdG9fcHlvYmplY3QodHJhY2UsIGdldF90cmFjZXMtPnRyYWNlYmFja3MpOworICAgIGlmICh0cmFjZW1hbGxvY19vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXMgPSBQeUxpc3RfQXBwZW5kKGdldF90cmFjZXMtPmxpc3QsIHRyYWNlbWFsbG9jX29iaik7CisgICAgUHlfREVDUkVGKHRyYWNlbWFsbG9jX29iaik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX3B5b2JqZWN0X2RlY3JlZl9jYihfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IChQeU9iamVjdCAqKV9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIHJldHVybiAwOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19kb2MsCisgICAgIl9nZXRfdHJhY2VzKCkgLT4gbGlzdFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRyYWNlcyBvZiBhbGwgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLlxuIgorICAgICJSZXR1cm4gYSBsaXN0IG9mIChzaXplOiBpbnQsIHRyYWNlYmFjazogdHVwbGUpIHR1cGxlcy5cbiIKKyAgICAidHJhY2ViYWNrIGlzIGEgdHVwbGUgb2YgKGZpbGVuYW1lOiBzdHIsIGxpbmVubzogaW50KSB0dXBsZXMuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGRpc2FibGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2VzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIGdldF90cmFjZXNfdCBnZXRfdHJhY2VzOworICAgIGludCBlcnI7CisKKyAgICBnZXRfdHJhY2VzLnRyYWNlcyA9IE5VTEw7CisgICAgZ2V0X3RyYWNlcy50cmFjZWJhY2tzID0gTlVMTDsKKyAgICBnZXRfdHJhY2VzLmxpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChnZXRfdHJhY2VzLmxpc3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBnZXRfdHJhY2VzLmxpc3Q7CisKKyAgICAvKiB0aGUgdHJhY2ViYWNrIGhhc2ggdGFibGUgaXMgdXNlZCB0ZW1wb3JhcmlseSB0byBpbnRlcm4gdHJhY2ViYWNrIHR1cGxlCisgICAgICAgb2YgKGZpbGVuYW1lLCBsaW5lbm8pIHR1cGxlcyAqLworICAgIGdldF90cmFjZXMudHJhY2ViYWNrcyA9IGhhc2h0YWJsZV9uZXcoc2l6ZW9mKFB5T2JqZWN0ICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9kaXJlY3QpOworICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlYmFja3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgZ2V0X3RyYWNlcy50cmFjZXMgPSBfUHlfaGFzaHRhYmxlX2NvcHkodHJhY2VtYWxsb2NfdHJhY2VzKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIHNldF9yZWVudHJhbnQoMSk7CisgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9mb3JlYWNoKGdldF90cmFjZXMudHJhY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2ZpbGwsICZnZXRfdHJhY2VzKTsKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBnb3RvIGZpbmFsbHk7CisKK2Vycm9yOgorICAgIFB5X0NMRUFSKGdldF90cmFjZXMubGlzdCk7CisKK2ZpbmFsbHk6CisgICAgaWYgKGdldF90cmFjZXMudHJhY2ViYWNrcyAhPSBOVUxMKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZm9yZWFjaChnZXRfdHJhY2VzLnRyYWNlYmFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VtYWxsb2NfcHlvYmplY3RfZGVjcmVmX2NiLCBOVUxMKTsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGdldF90cmFjZXMudHJhY2ViYWNrcyk7CisgICAgfQorICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlcyAhPSBOVUxMKQorICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZ2V0X3RyYWNlcy50cmFjZXMpOworCisgICAgcmV0dXJuIGdldF90cmFjZXMubGlzdDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF9vYmplY3RfdHJhY2ViYWNrX2RvYywKKyAgICAiX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iailcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0IG9iaiB3YXMgYWxsb2NhdGVkLlxuIgorICAgICJSZXR1cm4gYSB0dXBsZSBvZiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpIHR1cGxlcy5cbiIKKyAgICAiXG4iCisgICAgIlJldHVybiBOb25lIGlmIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgZGlzYWJsZWQgb3IgZGlkIG5vdFxuIgorICAgICJ0cmFjZSB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnR5cGU7CisgICAgdm9pZCAqcHRyOworICAgIHRyYWNlX3QgdHJhY2U7CisgICAgaW50IGZvdW5kOworCisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICB0eXBlID0gUHlfVFlQRShvYmopOworICAgIGlmIChQeVR5cGVfSVNfR0ModHlwZSkpCisgICAgICAgIHB0ciA9ICh2b2lkICopKChjaGFyICopb2JqIC0gc2l6ZW9mKFB5R0NfSGVhZCkpOworICAgIGVsc2UKKyAgICAgICAgcHRyID0gKHZvaWQgKilvYmo7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGZvdW5kID0gX1B5X0hBU0hUQUJMRV9HRVQodHJhY2VtYWxsb2NfdHJhY2VzLCBwdHIsIHRyYWNlKTsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIHJldHVybiB0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2UudHJhY2ViYWNrLCBOVUxMKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX3N0YXJ0X2RvYywKKyAgICAic3RhcnQobmZyYW1lOiBpbnQ9MSlcbiIKKyAgICAiXG4iCisgICAgIlN0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4gU2V0IGFsc28gdGhlIG1heGltdW0gbnVtYmVyIFxuIgorICAgICJvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSB0byBuZnJhbWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX3N0YXJ0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9zc2l6ZV90IG5mcmFtZSA9IDE7CisgICAgaW50IG5mcmFtZV9pbnQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnN0YXJ0IiwgJm5mcmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKG5mcmFtZSA8IDEgfHwgbmZyYW1lID4gTUFYX05GUkFNRSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ0aGUgbnVtYmVyIG9mIGZyYW1lcyBtdXN0IGJlIGluIHJhbmdlIFsxOyAlaV0iLAorICAgICAgICAgICAgICAgICAgICAgKGludClNQVhfTkZSQU1FKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5mcmFtZV9pbnQgPSBQeV9TQUZFX0RPV05DQVNUKG5mcmFtZSwgUHlfc3NpemVfdCwgaW50KTsKKworICAgIGlmICh0cmFjZW1hbGxvY19zdGFydChuZnJhbWVfaW50KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19zdG9wX2RvYywKKyAgICAic3RvcCgpXG4iCisgICAgIlxuIgorICAgICJTdG9wIHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBhbmQgY2xlYXIgdHJhY2VzXG4iCisgICAgIm9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2Nfc3RvcChQeU9iamVjdCAqc2VsZikKK3sKKyAgICB0cmFjZW1hbGxvY19zdG9wKCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0X2RvYywKKyAgICAiZ2V0X3RyYWNlYmFja19saW1pdCgpIC0+IGludFxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBmcmFtZXMgc3RvcmVkIGluIHRoZSB0cmFjZWJhY2tcbiIKKyAgICAib2YgYSB0cmFjZS5cbiIKKyAgICAiXG4iCisgICAgIkJ5IGRlZmF1bHQsIGEgdHJhY2Ugb2YgYW4gYWxsb2NhdGVkIG1lbW9yeSBibG9jayBvbmx5IHN0b3Jlc1xuIgorICAgICJ0aGUgbW9zdCByZWNlbnQgZnJhbWU6IHRoZSBsaW1pdCBpcyAxLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0KFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUpOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeV9kb2MsCisgICAgImdldF90cmFjZW1hbGxvY19tZW1vcnkoKSAtPiBpbnRcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgbWVtb3J5IHVzYWdlIGluIGJ5dGVzIG9mIHRoZSB0cmFjZW1hbGxvYyBtb2R1bGVcbiIKKyAgICAidXNlZCBpbnRlcm5hbGx5IHRvIHRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucy4iKTsKKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeU9iamVjdCAqc2l6ZV9vYmo7CisKKyAgICBzaXplID0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworICAgIHNpemUgKz0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX2ZpbGVuYW1lcyk7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIHNpemUgKz0gX1B5X2hhc2h0YWJsZV9zaXplKHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTiIsIHNpemVfb2JqKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5X2RvYywKKyAgICAiZ2V0X3RyYWNlZF9tZW1vcnkoKSAtPiAoaW50LCBpbnQpXG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIGN1cnJlbnQgc2l6ZSBhbmQgcGVhayBzaXplIG9mIG1lbW9yeSBibG9ja3MgdHJhY2VkXG4iCisgICAgImJ5IHRoZSB0cmFjZW1hbGxvYyBtb2R1bGUgYXMgYSB0dXBsZTogKGN1cnJlbnQ6IGludCwgcGVhazogaW50KS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgordHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnkoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBzaXplLCBwZWFrX3NpemU7CisgICAgUHlPYmplY3QgKnNpemVfb2JqLCAqcGVha19zaXplX29iajsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaSIsIDAsIDApOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBzaXplID0gdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeTsKKyAgICBwZWFrX3NpemUgPSB0cmFjZW1hbGxvY19wZWFrX3RyYWNlZF9tZW1vcnk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgc2l6ZV9vYmogPSBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKKyAgICBwZWFrX3NpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3QocGVha19zaXplKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk4iLCBzaXplX29iaiwgcGVha19zaXplX29iaik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtb2R1bGVfbWV0aG9kc1tdID0geworICAgIHsiaXNfdHJhY2luZyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19pc190cmFjaW5nLAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfaXNfdHJhY2luZ19kb2N9LAorICAgIHsiY2xlYXJfdHJhY2VzIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlc19kb2N9LAorICAgIHsiX2dldF90cmFjZXMiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlcywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZXNfZG9jfSwKKyAgICB7Il9nZXRfb2JqZWN0X3RyYWNlYmFjayIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFjaywKKyAgICAgTUVUSF9PLCB0cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFja19kb2N9LAorICAgIHsic3RhcnQiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2Nfc3RhcnQsCisgICAgICBNRVRIX1ZBUkFSR1MsIHRyYWNlbWFsbG9jX3N0YXJ0X2RvY30sCisgICAgeyJzdG9wIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX3N0b3AsCisgICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2Nfc3RvcF9kb2N9LAorICAgIHsiZ2V0X3RyYWNlYmFja19saW1pdCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19nZXRfdHJhY2ViYWNrX2xpbWl0LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdF9kb2N9LAorICAgIHsiZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSIsIChQeUNGdW5jdGlvbil0cmFjZW1hbGxvY19nZXRfdHJhY2VtYWxsb2NfbWVtb3J5LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeV9kb2N9LAorICAgIHsiZ2V0X3RyYWNlZF9tZW1vcnkiLCAoUHlDRnVuY3Rpb24pdHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnksCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeV9kb2N9LAorCisgICAgLyogc2VudGluZWwgKi8KKyAgICB7TlVMTCwgTlVMTH0KK307CisKK1B5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAorIkRlYnVnIG1vZHVsZSB0byB0cmFjZSBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgbW9kdWxlX2RlZiA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90cmFjZW1hbGxvYyIsCisgICAgbW9kdWxlX2RvYywKKyAgICAwLCAvKiBub24tbmVnYXRpdmUgc2l6ZSB0byBiZSBhYmxlIHRvIHVubG9hZCB0aGUgbW9kdWxlICovCisgICAgbW9kdWxlX21ldGhvZHMsCisgICAgTlVMTCwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3RyYWNlbWFsbG9jKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmbW9kdWxlX2RlZik7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfaW5pdCgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbTsKK30KKworc3RhdGljIGludAorcGFyc2Vfc3lzX3hvcHRpb25zKFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeU9iamVjdCAqdmFsdWVsb25nOworICAgIGxvbmcgbmZyYW1lOworCisgICAgaWYgKHZhbHVlID09IFB5X1RydWUpCisgICAgICAgIHJldHVybiAxOworCisgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpOworICAgIGlmIChQeVVuaWNvZGVfR2V0TGVuZ3RoKHZhbHVlKSA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB2YWx1ZWxvbmcgPSBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QodmFsdWUsIDEwKTsKKyAgICBpZiAodmFsdWVsb25nID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG5mcmFtZSA9IFB5TG9uZ19Bc0xvbmcodmFsdWVsb25nKTsKKyAgICBQeV9ERUNSRUYodmFsdWVsb25nKTsKKyAgICBpZiAobmZyYW1lID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuZnJhbWUgPCAxIHx8IG5mcmFtZSA+IE1BWF9ORlJBTUUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKG5mcmFtZSwgbG9uZywgaW50KTsKK30KKworaW50CitfUHlUcmFjZU1hbGxvY19Jbml0KHZvaWQpCit7CisgICAgY2hhciAqcDsKKyAgICBpbnQgbmZyYW1lOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05UUkFDRU1BTExPQyIpKSAmJiAqcCAhPSAnXDAnKSB7CisgICAgICAgIGNoYXIgKmVuZHB0ciA9IHA7CisgICAgICAgIGxvbmcgdmFsdWU7CisKKyAgICAgICAgdmFsdWUgPSBzdHJ0b2wocCwgJmVuZHB0ciwgMTApOworICAgICAgICBpZiAoKmVuZHB0ciAhPSAnXDAnCisgICAgICAgICAgICB8fCB2YWx1ZSA8IDEKKyAgICAgICAgICAgIHx8IHZhbHVlID4gTUFYX05GUkFNRQorICAgICAgICAgICAgfHwgKGVycm5vID09IEVSQU5HRSAmJiB2YWx1ZSA9PSBVTE9OR19NQVgpKQorICAgICAgICB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQWVRIT05UUkFDRU1BTExPQzogaW52YWxpZCBudW1iZXIgb2YgZnJhbWVzIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBuZnJhbWUgPSAoaW50KXZhbHVlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqa2V5LCAqdmFsdWU7CisKKyAgICAgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOworICAgICAgICBpZiAoeG9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBrZXkgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygidHJhY2VtYWxsb2MiKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoeG9wdGlvbnMsIGtleSk7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICAvKiAtWCB0cmFjZW1hbGxvYyBpcyBub3QgdXNlZCAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBuZnJhbWUgPSBwYXJzZV9zeXNfeG9wdGlvbnModmFsdWUpOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICBpZiAobmZyYW1lIDwgMCkgeworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiLVggdHJhY2VtYWxsb2M9TkZSQU1FOiBpbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cmFjZW1hbGxvY19zdGFydChuZnJhbWUpOworfQorCit2b2lkCitfUHlUcmFjZU1hbGxvY19GaW5pKHZvaWQpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorICAgIHRyYWNlbWFsbG9jX2RlaW5pdCgpOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL193ZWFrcmVmLmMgYi9Nb2R1bGVzL193ZWFrcmVmLmMKaW5kZXggODg5OTViOC4uODBkZTVkYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fd2Vha3JlZi5jCisrKyBiL01vZHVsZXMvX3dlYWtyZWYuYwpAQCAtNCwyNSArNCw1NiBAQAogI2RlZmluZSBHRVRfV0VBS1JFRlNfTElTVFBUUihvKSBcCiAgICAgICAgICgoUHlXZWFrUmVmZXJlbmNlICoqKSBQeU9iamVjdF9HRVRfV0VBS1JFRlNfTElTVFBUUihvKSkKIAorLypbY2xpbmljXQorbW9kdWxlIF93ZWFrcmVmCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KIAotUHlEb2NfU1RSVkFSKHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfXywKLSJnZXR3ZWFrcmVmY291bnQob2JqZWN0KSAtLSByZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXNcbiIKLSJ0byAnb2JqZWN0Jy4iKTsKKy8qW2NsaW5pY10KKworX3dlYWtyZWYuZ2V0d2Vha3JlZmNvdW50IC0+IFB5X3NzaXplX3QKKworICBvYmplY3Q6IG9iamVjdAorICAvCisKK1JldHVybiB0aGUgbnVtYmVyIG9mIHdlYWsgcmVmZXJlbmNlcyB0byAnb2JqZWN0Jy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKF93ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX18sCisiZ2V0d2Vha3JlZmNvdW50KG9iamVjdClcbiIKKyJSZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gXCdvYmplY3RcJy4iKTsKKworI2RlZmluZSBfV0VBS1JFRl9HRVRXRUFLUkVGQ09VTlRfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHdlYWtyZWZjb3VudCIsIChQeUNGdW5jdGlvbilfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQsIE1FVEhfTywgX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfX30sCisKK3N0YXRpYyBQeV9zc2l6ZV90Citfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqZWN0KQorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBfcmV0dXJuX3ZhbHVlOworICAgIF9yZXR1cm5fdmFsdWUgPSBfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChtb2R1bGUsIG9iamVjdCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9yZXR1cm5fdmFsdWUpOwogCi0gICAgaWYgKFB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhQeV9UWVBFKG9iamVjdCkpKSB7Ci0gICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3QgPSBHRVRfV0VBS1JFRlNfTElTVFBUUihvYmplY3QpOworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCi0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tU3NpemVfdChfUHlXZWFrcmVmX0dldFdlYWtyZWZDb3VudCgqbGlzdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKK3N0YXRpYyBQeV9zc2l6ZV90Citfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KQorLypbY2xpbmljIGNoZWNrc3VtOiA0MzZlOGZiZTAyOTc0MzQzNzVmMDM5ZDhjMmQ5ZmMzYTliYmU3NzNjXSovCit7CisgICAgUHlXZWFrUmVmZXJlbmNlICoqbGlzdDsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKCFQeVR5cGVfU1VQUE9SVFNfV0VBS1JFRlMoUHlfVFlQRShvYmplY3QpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgbGlzdCA9IEdFVF9XRUFLUkVGU19MSVNUUFRSKG9iamVjdCk7CisgICAgcmV0dXJuIF9QeVdlYWtyZWZfR2V0V2Vha3JlZkNvdW50KCpsaXN0KTsKIH0KIAogCkBAIC03OCw4ICsxMDksNyBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYKIHdlYWtyZWZfZnVuY3Rpb25zW10gPSAgewotICAgIHsiZ2V0d2Vha3JlZmNvdW50Iiwgd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQsICAgICAgICBNRVRIX08sCi0gICAgIHdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfX30sCisgICAgX1dFQUtSRUZfR0VUV0VBS1JFRkNPVU5UX01FVEhPRERFRgogICAgIHsiZ2V0d2Vha3JlZnMiLCAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmcywgICAgICAgICAgICBNRVRIX08sCiAgICAgIHdlYWtyZWZfZ2V0d2Vha3JlZnNfX2RvY19ffSwKICAgICB7InByb3h5IiwgICAgICAgICAgIHdlYWtyZWZfcHJveHksICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLApAQCAtMTA2LDcgKzEzNiw3IEBACiAgICAgUHlPYmplY3QgKm07CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZ3ZWFrcmVmbW9kdWxlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICBpZiAobSAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRigmX1B5V2Vha3JlZl9SZWZUeXBlKTsKICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJyZWYiLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fd2luYXBpLmMgYi9Nb2R1bGVzL193aW5hcGkuYwppbmRleCBjNTNkNTVhLi43MjRhNDc4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL193aW5hcGkuYworKysgYi9Nb2R1bGVzL193aW5hcGkuYwpAQCAtNjIsNiArNjIsOCBAQAogCiAjZGVmaW5lIFRfSEFORExFIFRfUE9JTlRFUgogCisjZGVmaW5lIERXT1JEX01BWCA0Mjk0OTY3Mjk1VQorCiAvKiBHcmFiIENhbmNlbElvRXggZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwogc3RhdGljIGludCBoYXNfQ2FuY2VsSW9FeCA9IC0xOwogc3RhdGljIEJPT0wgKENBTExCQUNLICpQeV9DYW5jZWxJb0V4KShIQU5ETEUsIExQT1ZFUkxBUFBFRCk7CkBAIC0xMDUsMTcgKzEwNywzNyBAQAogewogICAgIERXT1JEIGJ5dGVzOwogICAgIGludCBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKwogICAgIGlmIChzZWxmLT5wZW5kaW5nKSB7Ci0gICAgICAgIC8qIG1ha2UgaXQgYSBwcm9ncmFtbWluZyBlcnJvciB0byBkZWFsbG9jYXRlIHdoaWxlIG9wZXJhdGlvbgotICAgICAgICAgICBpcyBwZW5kaW5nLCBldmVuIGlmIHdlIGNhbiBzYWZlbHkgY2FuY2VsIGl0ICovCiAgICAgICAgIGlmIChjaGVja19DYW5jZWxJb0V4KCkgJiYKLSAgICAgICAgICAgICAgICBQeV9DYW5jZWxJb0V4KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQpKQotICAgICAgICAgICAgR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmYnl0ZXMsIFRSVUUpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkkvTyBvcGVyYXRpb25zIHN0aWxsIGluIGZsaWdodCB3aGlsZSBkZXN0cm95aW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJPdmVybGFwcGVkIG9iamVjdCwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIik7Ci0gICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShOVUxMKTsKKyAgICAgICAgICAgIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgICAgIEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwgJmJ5dGVzLCBUUlVFKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBpcyBubyBsb25nZXIgcGVuZGluZyAtLSBub3RoaW5nIHRvIGRvLiAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKF9QeV9GaW5hbGl6aW5nID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoZSBvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZyAtLSBnaXZlIGEgd2FybmluZy4gIFRoaXMKKyAgICAgICAgICAgICAgIHdpbGwgcHJvYmFibHkgb25seSBoYXBwZW4gb24gV2luZG93cyBYUC4gKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkkvTyBvcGVyYXRpb25zIHN0aWxsIGluIGZsaWdodCB3aGlsZSBkZXN0cm95aW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3ZlcmxhcHBlZCBvYmplY3QsIHRoZSBwcm9jZXNzIG1heSBjcmFzaCIpOworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBpcyBzdGlsbCBwZW5kaW5nLCBidXQgdGhlIHByb2Nlc3MgaXMKKyAgICAgICAgICAgICAgIHByb2JhYmx5IGFib3V0IHRvIGV4aXQsIHNvIHdlIG5lZWQgbm90IHdvcnJ5IHRvbyBtdWNoCisgICAgICAgICAgICAgICBhYm91dCBtZW1vcnkgbGVha3MuICBMZWFraW5nIHNlbGYgcHJldmVudHMgYSBwb3RlbnRpYWwKKyAgICAgICAgICAgICAgIGNyYXNoLiAgVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBkYWVtb24gdGhyZWFkIGlzIGNsZWFuZWQKKyAgICAgICAgICAgICAgIHVwIGF0IGV4aXQgLS0gc2VlICMxOTU2NS4gIFdlIG9ubHkgZXhwZWN0IHRvIGdldCBoZXJlCisgICAgICAgICAgICAgICBvbiBXaW5kb3dzIFhQLiAqLworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQpOworICAgICAgICAgICAgU2V0TGFzdEVycm9yKGVycik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICB9CisKICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CiAgICAgU2V0TGFzdEVycm9yKGVycik7CiAgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5vYmopCkBAIC0xMTQyLDcgKzExNjQsNyBAQAogICAgIEhBTkRMRSBoYW5kbGU7CiAgICAgUHlfYnVmZmVyIF9idWYsICpidWY7CiAgICAgUHlPYmplY3QgKmJ1Zm9iajsKLSAgICBEV09SRCB3cml0dGVuOworICAgIERXT1JEIGxlbiwgd3JpdHRlbjsKICAgICBCT09MIHJldDsKICAgICBpbnQgdXNlX292ZXJsYXBwZWQgPSAwOwogICAgIERXT1JEIGVycjsKQEAgLTExNzAsNyArMTE5Miw4IEBACiAgICAgfQogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJldCA9IFdyaXRlRmlsZShoYW5kbGUsIGJ1Zi0+YnVmLCBidWYtPmxlbiwgJndyaXR0ZW4sCisgICAgbGVuID0gKERXT1JEKVB5X01JTihidWYtPmxlbiwgRFdPUkRfTUFYKTsKKyAgICByZXQgPSBXcml0ZUZpbGUoaGFuZGxlLCBidWYtPmJ1ZiwgbGVuLCAmd3JpdHRlbiwKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxhcHBlZCA/ICZvdmVybGFwcGVkLT5vdmVybGFwcGVkIDogTlVMTCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCmluZGV4IDk2YzllNWIuLjNiMDEzYWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXJyYXltb2R1bGUuYworKysgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKQEAgLTUxMyw3ICs1MTMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldGFycmF5aXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSkKIHsKLSAgICByZWdpc3RlciBhcnJheW9iamVjdCAqYXA7CisgICAgYXJyYXlvYmplY3QgKmFwOwogICAgIGFzc2VydChhcnJheV9DaGVjayhvcCkpOwogICAgIGFwID0gKGFycmF5b2JqZWN0ICopb3A7CiAgICAgYXNzZXJ0KGk+PTAgJiYgaTxQeV9TSVpFKGFwKSk7CkBAIC05NjgsOCArOTY4LDEzIEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApCiAgICAgICAgICAgICBjb3VudCsrOwpAQCAtOTkwLDggKzk5NSwxMyBAQAogICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKSB7CiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWkpOwpAQCAtMTAxNiw2ICsxMDI2LDggQEAKIAogICAgIGZvciAoaSA9IDAsIGNtcCA9IDAgOyBjbXAgPT0gMCAmJiBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgIH0KQEAgLTEwMjgsOCArMTA0MCwxMyBAQAogICAgIGludCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZixpKTsKKyAgICAgICAgaWYgKHNlbGZpID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgICAgIGlmIChjbXAgPiAwKSB7CiAgICAgICAgICAgICBpZiAoYXJyYXlfYXNzX3NsaWNlKHNlbGYsIGksIGkrMSwKQEAgLTEwNjgsNyArMTA4NSw5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAicG9wIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOworICAgIHYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGFycmF5X2Fzc19zbGljZShzZWxmLCBpLCBpKzEsIChQeU9iamVjdCAqKU5VTEwpICE9IDApIHsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExMTQsMTMgKzExMzMsMjUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9idWZmZXJfaW5mbyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICBQeU9iamVjdCogcmV0dmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTCwgKnY7CisKICAgICByZXR2YWwgPSBQeVR1cGxlX05ldygyKTsKICAgICBpZiAoIXJldHZhbCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMCwgUHlMb25nX0Zyb21Wb2lkUHRyKHNlbGYtPm9iX2l0ZW0pKTsKLSAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMSwgUHlMb25nX0Zyb21Mb25nKChsb25nKShQeV9TSVpFKHNlbGYpKSkpOworICAgIHYgPSBQeUxvbmdfRnJvbVZvaWRQdHIoc2VsZi0+b2JfaXRlbSk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAwLCB2KTsKKworICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpKFB5X1NJWkUoc2VsZikpKTsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDEsIHYpOwogCiAgICAgcmV0dXJuIHJldHZhbDsKIH0KQEAgLTEyMDYsOCArMTIzNyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfcmV2ZXJzZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOwotICAgIHJlZ2lzdGVyIGNoYXIgKnAsICpxOworICAgIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7CisgICAgY2hhciAqcCwgKnE7CiAgICAgLyogbGl0dGxlIGJ1ZmZlciB0byBob2xkIGl0ZW1zIHdoaWxlIHN3YXBwaW5nICovCiAgICAgY2hhciB0bXBbMjU2XTsgICAgICAvKiA4IGlzIHByb2JhYmx5IGVub3VnaCAtLSBidXQgd2h5IHNraW1wICovCiAgICAgYXNzZXJ0KChzaXplX3QpaXRlbXNpemUgPD0gc2l6ZW9mKHRtcCkpOwpAQCAtMTM4NiwxMyArMTQxNywxNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICp2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCB2KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCB2KSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICByZXR1cm4gbGlzdDsKKworZXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIodG9saXN0X2RvYywKQEAgLTE2NjQsMTEgKzE2OTgsOCBAQAogc3RhdGljIGVudW0gbWFjaGluZV9mb3JtYXRfY29kZQogdHlwZWNvZGVfdG9fbWZvcm1hdF9jb2RlKGNoYXIgdHlwZWNvZGUpCiB7Ci0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0gICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAxOwotI2Vsc2UKLSAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IDA7Ci0jZW5kaWYKKyAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IFBZX0JJR19FTkRJQU47CisKICAgICBzaXplX3QgaW50c2l6ZTsKICAgICBpbnQgaXNfc2lnbmVkOwogCkBAIC0yNDg3LDYgKzI1MTgsMjAgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkN8TzphcnJheSIsICZjLCAmaW5pdGlhbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKGluaXRpYWwgJiYgYyAhPSAndScpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhpbml0aWFsKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImNhbm5vdCB1c2UgYSBzdHIgdG8gaW5pdGlhbGl6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGFycmF5IHdpdGggdHlwZWNvZGUgJyVjJyIsIGMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJyYXlfQ2hlY2soaW5pdGlhbCkgJiYKKyAgICAgICAgICAgICAgICAgKChhcnJheW9iamVjdCopaW5pdGlhbCktPm9iX2Rlc2NyLT50eXBlY29kZSA9PSAndScpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW5ub3QgdXNlIGEgdW5pY29kZSBhcnJheSB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemUgYW4gYXJyYXkgd2l0aCB0eXBlY29kZSAnJWMnIiwgYyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmICghKGluaXRpYWwgPT0gTlVMTCB8fCBQeUxpc3RfQ2hlY2soaW5pdGlhbCkKICAgICAgICAgICB8fCBQeUJ5dGVBcnJheV9DaGVjayhpbml0aWFsKQogICAgICAgICAgIHx8IFB5Qnl0ZXNfQ2hlY2soaW5pdGlhbCkKQEAgLTI2MTMsOSArMjY1OCwxOSBAQAogIlRoaXMgbW9kdWxlIGRlZmluZXMgYW4gb2JqZWN0IHR5cGUgd2hpY2ggY2FuIGVmZmljaWVudGx5IHJlcHJlc2VudFxuXAogYW4gYXJyYXkgb2YgYmFzaWMgdmFsdWVzOiBjaGFyYWN0ZXJzLCBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnRcblwKIG51bWJlcnMuICBBcnJheXMgYXJlIHNlcXVlbmNlIHR5cGVzIGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgbGlzdHMsXG5cCi1leGNlcHQgdGhhdCB0aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVtIGlzIGNvbnN0cmFpbmVkLiAgVGhlXG5cCi10eXBlIGlzIHNwZWNpZmllZCBhdCBvYmplY3QgY3JlYXRpb24gdGltZSBieSB1c2luZyBhIHR5cGUgY29kZSwgd2hpY2hcblwKLWlzIGEgc2luZ2xlIGNoYXJhY3Rlci4gIFRoZSBmb2xsb3dpbmcgdHlwZSBjb2RlcyBhcmUgZGVmaW5lZDpcblwKK2V4Y2VwdCB0aGF0IHRoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuXG4iKTsKKworUHlEb2NfU1RSVkFSKGFycmF5dHlwZV9kb2MsCisiYXJyYXkodHlwZWNvZGUgWywgaW5pdGlhbGl6ZXJdKSAtPiBhcnJheVxuXAorXG5cCitSZXR1cm4gYSBuZXcgYXJyYXkgd2hvc2UgaXRlbXMgYXJlIHJlc3RyaWN0ZWQgYnkgdHlwZWNvZGUsIGFuZFxuXAoraW5pdGlhbGl6ZWQgZnJvbSB0aGUgb3B0aW9uYWwgaW5pdGlhbGl6ZXIgdmFsdWUsIHdoaWNoIG11c3QgYmUgYSBsaXN0LFxuXAorc3RyaW5nIG9yIGl0ZXJhYmxlIG92ZXIgZWxlbWVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cCitcblwKK0FycmF5cyByZXByZXNlbnQgYmFzaWMgdmFsdWVzIGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgbGlzdHMsIGV4Y2VwdFxuXAordGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC4gVGhlIHR5cGUgaXMgc3BlY2lmaWVkXG5cCithdCBvYmplY3QgY3JlYXRpb24gdGltZSBieSB1c2luZyBhIHR5cGUgY29kZSwgd2hpY2ggaXMgYSBzaW5nbGUgY2hhcmFjdGVyLlxuXAorVGhlIGZvbGxvd2luZyB0eXBlIGNvZGVzIGFyZSBkZWZpbmVkOlxuXAogXG5cCiAgICAgVHlwZSBjb2RlICAgQyBUeXBlICAgICAgICAgICAgIE1pbmltdW0gc2l6ZSBpbiBieXRlcyBcblwKICAgICAnYicgICAgICAgICBzaWduZWQgaW50ZWdlciAgICAgMSBcblwKQEAgLTI2MzksMjEgKzI2OTQsNiBAQAogQyBjb21waWxlciB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBzdXBwb3J0cyAnbG9uZyBsb25nJywgb3IsIG9uIFdpbmRvd3MsIFxuXAogJ19faW50NjQnLlxuXAogXG5cCi1UaGUgY29uc3RydWN0b3IgaXM6XG5cCi1cblwKLWFycmF5KHR5cGVjb2RlIFssIGluaXRpYWxpemVyXSkgLS0gY3JlYXRlIGEgbmV3IGFycmF5XG5cCi0iKTsKLQotUHlEb2NfU1RSVkFSKGFycmF5dHlwZV9kb2MsCi0iYXJyYXkodHlwZWNvZGUgWywgaW5pdGlhbGl6ZXJdKSAtPiBhcnJheVxuXAotXG5cCi1SZXR1cm4gYSBuZXcgYXJyYXkgd2hvc2UgaXRlbXMgYXJlIHJlc3RyaWN0ZWQgYnkgdHlwZWNvZGUsIGFuZFxuXAotaW5pdGlhbGl6ZWQgZnJvbSB0aGUgb3B0aW9uYWwgaW5pdGlhbGl6ZXIgdmFsdWUsIHdoaWNoIG11c3QgYmUgYSBsaXN0LFxuXAotc3RyaW5nIG9yIGl0ZXJhYmxlIG92ZXIgZWxlbWVudHMgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuXG5cCi1cblwKLUFycmF5cyByZXByZXNlbnQgYmFzaWMgdmFsdWVzIGFuZCBiZWhhdmUgdmVyeSBtdWNoIGxpa2UgbGlzdHMsIGV4Y2VwdFxuXAotdGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC5cblwKLVxuXAogTWV0aG9kczpcblwKIFxuXAogYXBwZW5kKCkgLS0gYXBwZW5kIGEgbmV3IGl0ZW0gdG8gdGhlIGVuZCBvZiB0aGUgYXJyYXlcblwKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCmluZGV4IGY2OGQ4MDQuLjk4ODcwMTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwpAQCAtMTAsOCArMTAsNiBAQAogCiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NsZWFudXApICovCiBzdGF0aWMgUHlPYmplY3QgKmF0ZXhpdF9jbGVhcihQeU9iamVjdCosIFB5T2JqZWN0Kik7Ci0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIChmb3IgYXRleGl0X2NhbGxmdW5jcykgKi8KLXN0YXRpYyB2b2lkIGF0ZXhpdF9jbGVhbnVwKFB5T2JqZWN0Kik7CiAvKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIG1vZHVsZSBvYmplY3QgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlOwogCkBAIC0zMyw2ICszMSwzNSBAQAogI2RlZmluZSBHRVRfQVRFWElUX1NUQVRFKG1vZCkgKChhdGV4aXRtb2R1bGVfc3RhdGUqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCiAKIAorc3RhdGljIHZvaWQKK2F0ZXhpdF9kZWxldGVfY2IoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSwgaW50IGkpCit7CisgICAgYXRleGl0X2NhbGxiYWNrICpjYjsKKworICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOworICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7CisgICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKKyAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOworICAgIFB5TWVtX0ZyZWUoY2IpOworfQorCisvKiBDbGVhciBhbGwgY2FsbGJhY2tzIHdpdGhvdXQgY2FsbGluZyB0aGVtICovCitzdGF0aWMgdm9pZAorYXRleGl0X2NsZWFudXAoYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZSkKK3sKKyAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7CisgICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGlmIChjYiA9PSBOVUxMKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CisgICAgfQorICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKK30KKwogLyogSW5zdGFsbGVkIGludG8gcHl0aG9ucnVuLmMncyBhdGV4aXQgbWVjaGFuaXNtICovCiAKIHN0YXRpYyB2b2lkCkBAIC03OCwzNCArMTA1LDEyIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhdGV4aXRfY2xlYW51cChtb2R1bGUpOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKIAogICAgIGlmIChleGNfdHlwZSkKICAgICAgICAgUHlFcnJfUmVzdG9yZShleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIpOwogfQogCi1zdGF0aWMgdm9pZAotYXRleGl0X2RlbGV0ZV9jYihQeU9iamVjdCAqc2VsZiwgaW50IGkpCi17Ci0gICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotCi0gICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwotICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07Ci0gICAgbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV0gPSBOVUxMOwotICAgIFB5X0RFQ1JFRihjYi0+ZnVuYyk7Ci0gICAgUHlfREVDUkVGKGNiLT5hcmdzKTsKLSAgICBQeV9YREVDUkVGKGNiLT5rd2FyZ3MpOwotICAgIFB5TWVtX0ZyZWUoY2IpOwotfQotCi1zdGF0aWMgdm9pZAotYXRleGl0X2NsZWFudXAoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnIgPSBhdGV4aXRfY2xlYXIoc2VsZiwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKHIpOwotfQotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIE1vZHVsZSBtZXRob2RzLiAqLwogCkBAIC0xOTQsMjEgKzE5OSw1MCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF0ZXhpdF9jbGVhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKKyAgICBhdGV4aXRfY2xlYW51cChHRVRfQVRFWElUX1NUQVRFKHNlbGYpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGF0ZXhpdF9uY2FsbGJhY2tzX19kb2NfXywKKyJfbmNhbGxiYWNrcygpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIGV4aXQgZnVuY3Rpb25zLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXRleGl0X25jYWxsYmFja3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCit7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKLSAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOwotICAgIGludCBpOwogCiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogCisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChtb2RzdGF0ZS0+bmNhbGxiYWNrcyk7Cit9CisKK3N0YXRpYyBpbnQKK2F0ZXhpdF9tX3RyYXZlcnNlKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBpbnQgaTsKKyAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOworCisgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKHNlbGYpOwogICAgIGZvciAoaSA9IDA7IGkgPCBtb2RzdGF0ZS0+bmNhbGxiYWNrczsgaSsrKSB7Ci0gICAgICAgIGNiID0gbW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3NbaV07CisgICAgICAgIGF0ZXhpdF9jYWxsYmFjayAqY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKICAgICAgICAgaWYgKGNiID09IE5VTEwpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICBQeV9WSVNJVChjYi0+ZnVuYyk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5hcmdzKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmt3YXJncyk7CiAgICAgfQotICAgIG1vZHN0YXRlLT5uY2FsbGJhY2tzID0gMDsKLSAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorYXRleGl0X21fY2xlYXIoUHlPYmplY3QgKnNlbGYpCit7CisgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKKyAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOworICAgIHJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMjE2LDYgKzI1MCw3IEBACiB7CiAgICAgYXRleGl0bW9kdWxlX3N0YXRlICptb2RzdGF0ZTsKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUobSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogICAgIFB5TWVtX0ZyZWUobW9kc3RhdGUtPmF0ZXhpdF9jYWxsYmFja3MpOwogfQogCkBAIC0yNDYsNyArMjgxLDcgQEAKICAgICAgICAgaWYgKGVxIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoZXEpCi0gICAgICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKHNlbGYsIGkpOworICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihtb2RzdGF0ZSwgaSk7CiAgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQpAQCAtMjYwLDYgKzI5NSw4IEBACiAgICAgICAgIGF0ZXhpdF91bnJlZ2lzdGVyX19kb2NfX30sCiAgICAgeyJfcnVuX2V4aXRmdW5jcyIsIChQeUNGdW5jdGlvbikgYXRleGl0X3J1bl9leGl0ZnVuY3MsIE1FVEhfTk9BUkdTLAogICAgICAgICBhdGV4aXRfcnVuX2V4aXRmdW5jc19fZG9jX199LAorICAgIHsiX25jYWxsYmFja3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9uY2FsbGJhY2tzLCBNRVRIX05PQVJHUywKKyAgICAgICAgYXRleGl0X25jYWxsYmFja3NfX2RvY19ffSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNzUsMTUgKzMxMiwxNSBAQAogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgYXRleGl0bW9kdWxlID0gewotCVB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLQkiYXRleGl0IiwKLQlhdGV4aXRfX2RvY19fLAotCXNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAotCWF0ZXhpdF9tZXRob2RzLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCShmcmVlZnVuYylhdGV4aXRfZnJlZQorICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiYXRleGl0IiwKKyAgICBhdGV4aXRfX2RvY19fLAorICAgIHNpemVvZihhdGV4aXRtb2R1bGVfc3RhdGUpLAorICAgIGF0ZXhpdF9tZXRob2RzLAorICAgIE5VTEwsCisgICAgYXRleGl0X21fdHJhdmVyc2UsCisgICAgYXRleGl0X21fY2xlYXIsCisgICAgKGZyZWVmdW5jKWF0ZXhpdF9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdWRpb29wLmMgYi9Nb2R1bGVzL2F1ZGlvb3AuYwppbmRleCAzZjA0NzYyLi5hZTNmZjA2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2F1ZGlvb3AuYworKysgYi9Nb2R1bGVzL2F1ZGlvb3AuYwpAQCAtNSwxOCArNSw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKIAotI2lmIFNJWkVPRl9JTlQgPT0gNAotdHlwZWRlZiBpbnQgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBQeV9VSW50MzI7Ci0jZWxzZQotI2lmIFNJWkVPRl9MT05HID09IDQKLXR5cGVkZWYgbG9uZyBQeV9JbnQzMjsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBQeV9VSW50MzI7Ci0jZWxzZQotI2Vycm9yICJObyA0LWJ5dGUgaW50ZWdyYWwgdHlwZSIKLSNlbmRpZgotI2VuZGlmCi0KIHR5cGVkZWYgc2hvcnQgUHlJbnQxNjsKIAogI2lmIGRlZmluZWQoX19DSEFSX1VOU0lHTkVEX18pCkBAIC0zOCw3ICsyNiw3IEBACiAgICAgICAgIHZhbCA9IG1heHZhbDsKICAgICBlbHNlIGlmICh2YWwgPCBtaW52YWwgKyAxKQogICAgICAgICB2YWwgPSBtaW52YWw7Ci0gICAgcmV0dXJuIHZhbDsKKyAgICByZXR1cm4gKGludCl2YWw7CiB9CiAKIApAQCAtMTYxLDkgKzE0OSw2IEBACiAgICAgUHlJbnQxNiAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgdXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMjsKLQogICAgIC8qIHUtbGF3IGludmVydHMgYWxsIGJpdHMgKi8KICAgICAvKiBHZXQgdGhlIHNpZ24gYW5kIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHZhbHVlLiAqLwogICAgIGlmIChwY21fdmFsIDwgMCkgewpAQCAtMjU4LDkgKzI0Myw2IEBACiAgICAgc2hvcnQgICAgICAgICAgIHNlZzsKICAgICB1bnNpZ25lZCBjaGFyICAgYXZhbDsKIAotICAgIC8qIFRoZSBvcmlnaW5hbCBzb3ggY29kZSBkb2VzIHRoaXMgaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb24sIG5vdCBoZXJlICovCi0gICAgcGNtX3ZhbCA9IHBjbV92YWwgPj4gMzsKLQogICAgIC8qIEEtbGF3IHVzaW5nIGV2ZW4gYml0IGludmVyc2lvbiAqLwogICAgIGlmIChwY21fdmFsID49IDApIHsKICAgICAgICAgbWFzayA9IDB4RDU7ICAgICAgICAgICAgLyogc2lnbiAoN3RoKSBiaXQgPSAxICovCkBAIC0zMDUsMTkgKzI4Nyw5MSBAQAogICAgIDE1Mjg5LCAxNjgxOCwgMTg1MDAsIDIwMzUwLCAyMjM4NSwgMjQ2MjMsIDI3MDg2LCAyOTc5NCwgMzI3NjcKIH07CiAKLSNkZWZpbmUgQ0hBUlAoY3AsIGkpICgoc2lnbmVkIGNoYXIgKikoY3AraSkpCi0jZGVmaW5lIFNIT1JUUChjcCwgaSkgKChzaG9ydCAqKShjcCtpKSkKLSNkZWZpbmUgTE9OR1AoY3AsIGkpICgoUHlfSW50MzIgKikoY3AraSkpCisjZGVmaW5lIEdFVElOVFgoVCwgY3AsIGkpICAoKihUICopKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSkpCisjZGVmaW5lIFNFVElOVFgoVCwgY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKihUICopKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSkgPSAoVCkodmFsKTsgXAorICAgIH0gd2hpbGUgKDApCiAKIAorI2RlZmluZSBHRVRJTlQ4KGNwLCBpKSAgICAgICAgICBHRVRJTlRYKHNpZ25lZCBjaGFyLCAoY3ApLCAoaSkpCisjZGVmaW5lIEdFVElOVDE2KGNwLCBpKSAgICAgICAgIEdFVElOVFgoc2hvcnQsIChjcCksIChpKSkKKyNkZWZpbmUgR0VUSU5UMzIoY3AsIGkpICAgICAgICAgR0VUSU5UWChQWV9JTlQzMl9ULCAoY3ApLCAoaSkpCisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgR0VUSU5UMjQoY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSArICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA8PCA4KSArICAgICAgIFwKKyAgICAgICAgKCgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA8PCAxNikgKQorI2Vsc2UKKyNkZWZpbmUgR0VUSU5UMjQoY3AsIGkpICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSArICAgICAgICAgICAgICBcCisgICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA8PCA4KSArICAgICAgIFwKKyAgICAgICAgKCgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA8PCAxNikgKQorI2VuZGlmCisKKworI2RlZmluZSBTRVRJTlQ4KGNwLCBpLCB2YWwpICAgICBTRVRJTlRYKHNpZ25lZCBjaGFyLCAoY3ApLCAoaSksICh2YWwpKQorI2RlZmluZSBTRVRJTlQxNihjcCwgaSwgdmFsKSAgICBTRVRJTlRYKHNob3J0LCAoY3ApLCAoaSksICh2YWwpKQorI2RlZmluZSBTRVRJTlQzMihjcCwgaSwgdmFsKSAgICBTRVRJTlRYKFBZX0lOVDMyX1QsIChjcCksIChpKSwgKHZhbCkpCisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKyNkZWZpbmUgU0VUSU5UMjQoY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdID0gKGludCkodmFsKTsgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA9IChpbnQpKHZhbCkgPj4gODsgICAgIFwKKyAgICAgICAgKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdID0gKGludCkodmFsKSA+PiAxNjsgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNFVElOVDI0KGNwLCBpLCB2YWwpICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVswXSA9IChpbnQpKHZhbCk7ICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMV0gPSAoaW50KSh2YWwpID4+IDg7ICAgICBcCisgICAgICAgICgoc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsyXSA9IChpbnQpKHZhbCkgPj4gMTY7ICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZW5kaWYKKworCisjZGVmaW5lIEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSkgICggICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMSkgPyAoaW50KUdFVElOVDgoKGNwKSwgKGkpKSA6ICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAyKSA/IChpbnQpR0VUSU5UMTYoKGNwKSwgKGkpKSA6ICAgICAgICBcCisgICAgICAgIChzaXplID09IDMpID8gKGludClHRVRJTlQyNCgoY3ApLCAoaSkpIDogICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KUdFVElOVDMyKChjcCksIChpKSkpCisKKyNkZWZpbmUgU0VUUkFXU0FNUExFKHNpemUsIGNwLCBpLCB2YWwpICBkbyB7ICAgIFwKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDgoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDE2KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDI0KChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDMyKChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKKworI2RlZmluZSBHRVRTQU1QTEUzMihzaXplLCBjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChzaXplID09IDEpID8gKGludClHRVRJTlQ4KChjcCksIChpKSkgPDwgMjQgOiAgIFwKKyAgICAgICAgKHNpemUgPT0gMikgPyAoaW50KUdFVElOVDE2KChjcCksIChpKSkgPDwgMTYgOiAgXAorICAgICAgICAoc2l6ZSA9PSAzKSA/IChpbnQpR0VUSU5UMjQoKGNwKSwgKGkpKSA8PCA4IDogICBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClHRVRJTlQzMigoY3ApLCAoaSkpKQorCisjZGVmaW5lIFNFVFNBTVBMRTMyKHNpemUsIGNwLCBpLCB2YWwpICBkbyB7ICAgICBcCisgICAgICAgIGlmIChzaXplID09IDEpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQ4KChjcCksIChpKSwgKHZhbCkgPj4gMjQpOyAgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQxNigoY3ApLCAoaSksICh2YWwpID4+IDE2KTsgICBcCisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQyNCgoY3ApLCAoaSksICh2YWwpID4+IDgpOyAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBTRVRJTlQzMigoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCiAKIHN0YXRpYyBQeU9iamVjdCAqQXVkaW9vcEVycm9yOwogCiBzdGF0aWMgaW50CiBhdWRpb29wX2NoZWNrX3NpemUoaW50IHNpemUpCiB7Ci0gICAgaWYgKHNpemUgIT0gMSAmJiBzaXplICE9IDIgJiYgc2l6ZSAhPSA0KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTaXplIHNob3VsZCBiZSAxLCAyIG9yIDQiKTsKKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNpemUgc2hvdWxkIGJlIDEsIDIsIDMgb3IgNCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZQpAQCAtMzM5LDEyMyArMzkzLDEyOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfZ2V0c2FtcGxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIGludCB2YWw7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2luOmdldHNhbXBsZSIsICZjcCwgJmxlbiwgJnNpemUsICZpKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmluOmdldHNhbXBsZSIsICZ2aWV3LCAmc2l6ZSwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIGkgPCAwIHx8IGkgPj0gbGVuL3NpemUgKSB7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChpIDwgMCB8fCBpID49IHZpZXcubGVuL3NpemUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKjIpOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSo0KTsKKyAgICB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkqc2l6ZSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworCisgIGVycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CiAgICAgdW5zaWduZWQgaW50IGFic3ZhbCwgbWF4ID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptYXgiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bWF4IiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPCAwKSBhYnN2YWwgPSAoLXZhbCk7CiAgICAgICAgIGVsc2UgYWJzdmFsID0gdmFsOwogICAgICAgICBpZiAoYWJzdmFsID4gbWF4KSBtYXggPSBhYnN2YWw7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9taW5tYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CiAgICAgLyogLTEgdHJpY2sgYmVsb3cgaXMgbmVlZGVkIG9uIFdpbmRvd3MgdG8gc3VwcG9ydCAtMHg4MDAwMDAwMCB3aXRob3V0CiAgICAgYSB3YXJuaW5nICovCiAgICAgaW50IG1pbiA9IDB4N2ZmZmZmZmYsIG1heCA9IC0weDdGRkZGRkZGLTE7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptaW5tYXgiLCAmY3AsICZsZW4sICZzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTptaW5tYXgiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBzaXplKSB7Ci0gICAgICAgIGlmIChzaXplID09IDEpIHZhbCA9IChpbnQpICpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikgdmFsID0gKGludCkgKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkgdmFsID0gKGludCkgKkxPTkdQKGNwLCBpKTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgPiBtYXgpIG1heCA9IHZhbDsKICAgICAgICAgaWYgKHZhbCA8IG1pbikgbWluID0gdmFsOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1pbiwgbWF4KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYXZnKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgZG91YmxlIGF2ZyA9IDAuMDsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemUsIGF2ZzsKKyAgICBkb3VibGUgc3VtID0gMC4wOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmF2ZyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTphdmciLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgYXZnICs9IHZhbDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoIGxlbiA9PSAwICkKLSAgICAgICAgdmFsID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkKKyAgICAgICAgc3VtICs9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgaWYgKHZpZXcubGVuID09IDApCisgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQotICAgICAgICB2YWwgPSAoaW50KWZsb29yKGF2ZyAvIChkb3VibGUpKGxlbi9zaXplKSk7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOworICAgICAgICBhdmcgPSAoaW50KWZsb29yKHN1bSAvIChkb3VibGUpKHZpZXcubGVuL3NpemUpKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGF2Zyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX3JtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKICAgICB1bnNpZ25lZCBpbnQgcmVzOwogICAgIGRvdWJsZSBzdW1fc3F1YXJlcyA9IDAuMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpybXMiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6cm1zIiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIHN1bV9zcXVhcmVzICs9IChkb3VibGUpdmFsKihkb3VibGUpdmFsOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICggbGVuID09IDAgKQorICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICBzdW1fc3F1YXJlcyArPSB2YWwqdmFsOworICAgIH0KKyAgICBpZiAodmlldy5sZW4gPT0gMCkKICAgICAgICAgcmVzID0gMDsKICAgICBlbHNlCi0gICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKGxlbi9zaXplKSk7CisgICAgICAgIHJlcyA9ICh1bnNpZ25lZCBpbnQpc3FydChzdW1fc3F1YXJlcyAvIChkb3VibGUpKHZpZXcubGVuL3NpemUpKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzKTsKIH0KIAotc3RhdGljIGRvdWJsZSBfc3VtMihzaG9ydCAqYSwgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQorc3RhdGljIGRvdWJsZSBfc3VtMihjb25zdCBzaG9ydCAqYSwgY29uc3Qgc2hvcnQgKmIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBkb3VibGUgc3VtID0gMC4wOwpAQCAtNTAxLDI5ICs1NjEsMjggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2ZpbmRmaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNob3J0ICpjcDEsICpjcDI7CisgICAgUHlfYnVmZmVyIHZpZXcxOworICAgIFB5X2J1ZmZlciB2aWV3MjsKKyAgICBjb25zdCBzaG9ydCAqY3AxLCAqY3AyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgc3VtX3JpXzIsIHN1bV9haWpfMiwgc3VtX2Fpal9yaSwgcmVzdWx0LCBiZXN0X3Jlc3VsdCwgZmFjdG9yOwogCi0gICAgLyogUGFzc2luZyBhIHNob3J0KiogZm9yIGFuICdzJyBhcmd1bWVudCBpcyBjb3JyZWN0IG9ubHkKLSAgICAgICBpZiB0aGUgc3RyaW5nIGNvbnRlbnRzIGlzIGFsaWduZWQgZm9yIGludGVycHJldGF0aW9uCi0gICAgICAgYXMgc2hvcnRbXS4gRHVlIHRvIHRoZSBkZWZpbml0aW9uIG9mIFB5Qnl0ZXNPYmplY3QsCi0gICAgICAgdGhpcyBpcyBjdXJyZW50bHkgKFB5dGhvbiAyLjYpIHRoZSBjYXNlLiAqLwotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZpdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZjcDEsICZsZW4xLCAoY2hhcioqKSZjcDIsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgfHwgbGVuMiAmIDEgKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqOmZpbmRmaXQiLCAmdmlldzEsICZ2aWV3MikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2aWV3MS5sZW4gJiAxIHx8IHZpZXcyLmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGxlbjEgPj49IDE7Ci0gICAgbGVuMiA+Pj0gMTsKKyAgICBjcDEgPSAoY29uc3Qgc2hvcnQgKil2aWV3MS5idWY7CisgICAgbGVuMSA9IHZpZXcxLmxlbiA+PiAxOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXZpZXcyLmJ1ZjsKKyAgICBsZW4yID0gdmlldzIubGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW4xIDwgbGVuMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiRmlyc3Qgc2FtcGxlIHNob3VsZCBiZSBsb25nZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbjIpOwogICAgIHN1bV9haWpfMiA9IF9zdW0yKGNwMSwgY3AxLCBsZW4yKTsKQEAgLTU1Myw3ICs2MTIsMTQgQEAKIAogICAgIGZhY3RvciA9IF9zdW0yKGNwMStiZXN0X2osIGNwMiwgbGVuMikgLyBzdW1fcmlfMjsKIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihuZikiLCBiZXN0X2osIGZhY3Rvcik7CisKKyAgZXJyb3I6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzEpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcyKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTU2MywyOCArNjI5LDM4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9maW5kZmFjdG9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaG9ydCAqY3AxLCAqY3AyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKKyAgICBQeV9idWZmZXIgdmlldzE7CisgICAgUHlfYnVmZmVyIHZpZXcyOworICAgIGNvbnN0IHNob3J0ICpjcDEsICpjcDI7CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqX3JpLCByZXN1bHQ7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjOmZpbmRmYWN0b3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKikmY3AxLCAmbGVuMSwgKGNoYXIqKikmY3AyLCAmbGVuMikgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIGxlbjEgJiAxIHx8IGxlbjIgJiAxICkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp5KjpmaW5kZmFjdG9yIiwgJnZpZXcxLCAmdmlldzIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmlldzEubGVuICYgMSB8fCB2aWV3Mi5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoIGxlbjEgIT0gbGVuMiApIHsKKyAgICBpZiAodmlldzEubGVuICE9IHZpZXcyLmxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2FtcGxlcyBzaG91bGQgYmUgc2FtZSBzaXplIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBsZW4yID4+PSAxOwotICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbjIpOwotICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuMik7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopdmlldzEuYnVmOworICAgIGNwMiA9IChjb25zdCBzaG9ydCAqKXZpZXcyLmJ1ZjsKKyAgICBsZW4gPSB2aWV3MS5sZW4gPj4gMTsKKyAgICBzdW1fcmlfMiA9IF9zdW0yKGNwMiwgY3AyLCBsZW4pOworICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuKTsKIAogICAgIHJlc3VsdCA9IHN1bV9haWpfcmkgLyBzdW1fcmlfMjsKIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CiAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShyZXN1bHQpOworCisgIGVycm9yOgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcxKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3Mik7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC01OTQsMjQgKzY3MCwyNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfZmluZG1heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2hvcnQgKmNwMTsKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICBjb25zdCBzaG9ydCAqY3AxOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBQeV9zc2l6ZV90IGosIGJlc3RfajsKICAgICBkb3VibGUgYWpfbTEsIGFqX2xtMTsKICAgICBkb3VibGUgcmVzdWx0LCBiZXN0X3Jlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjbjpmaW5kbWF4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Km46ZmluZG1heCIsICZ2aWV3LCAmbGVuMikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2aWV3LmxlbiAmIDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlN0cmluZ3Mgc2hvdWxkIGJlIGV2ZW4tc2l6ZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGxlbjEgPj49IDE7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopdmlldy5idWY7CisgICAgbGVuMSA9IHZpZXcubGVuID4+IDE7CiAKLSAgICBpZiAoIGxlbjIgPCAwIHx8IGxlbjEgPCBsZW4yICkgeworICAgIGlmIChsZW4yIDwgMCB8fCBsZW4xIDwgbGVuMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiSW5wdXQgc2FtcGxlIHNob3VsZCBiZSBsb25nZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgcmVzdWx0ID0gX3N1bTIoY3AxLCBjcDEsIGxlbjIpOwpAQCAtNjMyLDM0ICs3MDksMzkgQEAKIAogICAgIH0KIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoYmVzdF9qKTsKKworICBlcnJvcjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYXZncHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgcHJldnZhbCA9IDAsIHByZXZleHRyZW1ldmFsaWQgPSAwLAorICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCiAgICAgICAgIHByZXZleHRyZW1lID0gMDsKICAgICBkb3VibGUgc3VtID0gMC4wOwogICAgIHVuc2lnbmVkIGludCBhdmc7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmLCBuZXh0cmVtZSA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZncHAiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6YXZncHAiLCAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuIDw9IHNpemUpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHZpZXcubGVuIDw9IHNpemUpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHByZXZ2YWwgPSAoaW50KSpDSEFSUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHByZXZ2YWwgPSAoaW50KSpTSE9SVFAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSBwcmV2dmFsID0gKGludCkqTE9OR1AoY3AsIDApOworICAgIH0KKyAgICBwcmV2dmFsID0gR0VUUkFXU0FNUExFKHNpemUsIHZpZXcuYnVmLCAwKTsKICAgICBwcmV2ZGlmZiA9IDE3OyAvKiBBbnl0aGluZyAhPSAwLCAxICovCi0gICAgZm9yICggaT1zaXplOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gc2l6ZTsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgIT0gcHJldnZhbCkgewogICAgICAgICAgICAgZGlmZiA9IHZhbCA8IHByZXZ2YWw7CiAgICAgICAgICAgICBpZiAocHJldmRpZmYgPT0gIWRpZmYpIHsKQEAgLTY2Nyw3ICs3NDksMTIgQEAKICAgICAgICAgICAgICAgICAqKiBleHRyZW1lIHZhbHVlIGFuZCByZW1lbWJlci4KICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGlmIChwcmV2ZXh0cmVtZXZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1bSArPSBmYWJzKChkb3VibGUpcHJldnZhbCAtIChkb3VibGUpcHJldmV4dHJlbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAocHJldnZhbCA8IHByZXZleHRyZW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IChkb3VibGUpKCh1bnNpZ25lZCBpbnQpcHJldmV4dHJlbWUgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJldnZhbCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1bSArPSAoZG91YmxlKSgodW5zaWduZWQgaW50KXByZXZ2YWwgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJldmV4dHJlbWUpOwogICAgICAgICAgICAgICAgICAgICBuZXh0cmVtZSsrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBwcmV2ZXh0cmVtZXZhbGlkID0gMTsKQEAgLTY4MSwzMyArNzY4LDM0IEBACiAgICAgICAgIGF2ZyA9IDA7CiAgICAgZWxzZQogICAgICAgICBhdmcgPSAodW5zaWduZWQgaW50KShzdW0gLyAoZG91YmxlKW5leHRyZW1lKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYXZnKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbWF4cHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgcHJldnZhbCA9IDAsIHByZXZleHRyZW1ldmFsaWQgPSAwLAorICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZSwgcHJldnZhbCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCiAgICAgICAgIHByZXZleHRyZW1lID0gMDsKICAgICB1bnNpZ25lZCBpbnQgbWF4ID0gMCwgZXh0cmVtZWRpZmY7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOm1heHBwIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOm1heHBwIiwgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbiA8PSBzaXplKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICh2aWV3LmxlbiA8PSBzaXplKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICBwcmV2dmFsID0gKGludCkqQ0hBUlAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSBwcmV2dmFsID0gKGludCkqU0hPUlRQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgcHJldnZhbCA9IChpbnQpKkxPTkdQKGNwLCAwKTsKKyAgICB9CisgICAgcHJldnZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgMCk7CiAgICAgcHJldmRpZmYgPSAxNzsgLyogQW55dGhpbmcgIT0gMCwgMSAqLwotICAgIGZvciAoIGk9c2l6ZTsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IHNpemU7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOwogICAgICAgICBpZiAodmFsICE9IHByZXZ2YWwpIHsKICAgICAgICAgICAgIGRpZmYgPSB2YWwgPCBwcmV2dmFsOwogICAgICAgICAgICAgaWYgKHByZXZkaWZmID09ICFkaWZmKSB7CkBAIC03MzEsNjggKzgxOSw2NyBAQAogICAgICAgICAgICAgcHJldmRpZmYgPSBkaWZmOwogICAgICAgICB9CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhtYXgpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9jcm9zcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKICAgICBpbnQgcHJldnZhbDsKICAgICBQeV9zc2l6ZV90IG5jcm9zczsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpjcm9zcyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjcm9zcyIsICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG5jcm9zcyA9IC0xOwogICAgIHByZXZ2YWwgPSAxNzsgLyogQW55dGhpbmcgPD4gMCwxICovCi0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpID4+IDc7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPj4gMTU7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAzMTsKLSAgICAgICAgdmFsID0gdmFsICYgMTsKLSAgICAgICAgaWYgKCB2YWwgIT0gcHJldnZhbCApIG5jcm9zcysrOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpIDwgMDsKKyAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSBuY3Jvc3MrKzsKICAgICAgICAgcHJldnZhbCA9IHZhbDsKICAgICB9CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuY3Jvc3MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9tdWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKLSAgICBkb3VibGUgZmFjdG9yLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKLSAgICBQeU9iamVjdCAqcnY7CisgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgZG91YmxlIGZhY3RvciwgbWF4dmFsLCBtaW52YWw7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWQ6bXVsIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhY3RvciApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWQ6bXVsIiwgJnZpZXcsICZzaXplLCAmZmFjdG9yKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CiAKICAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwogICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhY3RvcjsKLSAgICAgICAgdmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCl2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIHZhbCAqPSBmYWN0b3I7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGksIChpbnQpdmFsKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC04MDIsNDkgKzg4OSwzOCBAQAogICAgIFB5X2J1ZmZlciBwY3A7CiAgICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDA7Ci0gICAgZG91YmxlIGZhYzEsIGZhYzIsIGZ2YWwsIG1heHZhbCwgbWludmFsOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBpbnQgc2l6ZTsKKyAgICBkb3VibGUgZmFjMSwgZmFjMiwgbWF4dmFsLCBtaW52YWw7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqaWRkOnRvbW9ubyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNwLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWRkOnRvbW9ubyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwY3AsICZzaXplLCAmZmFjMSwgJmZhYzIpKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBjcCA9IHBjcC5idWY7CiAgICAgbGVuID0gcGNwLmxlbjsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgaWYgKCgobGVuIC8gc2l6ZSkgJiAxKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJub3QgYSB3aG9sZSBudW1iZXIgb2YgZnJhbWVzIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKICAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOwogCiAgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8yKTsKLSAgICBpZiAoIHJ2ID09IDAgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBjcCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSoyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsMSA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcCwgaSsxKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AsIGkrMik7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwyID0gKGludCkqTE9OR1AoY3AsIGkrNCk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbDEqZmFjMSArIChkb3VibGUpdmFsMipmYWMyOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkvMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpLzIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpLzIpPSAoUHlfSW50MzIpdmFsMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUqMikgeworICAgICAgICBkb3VibGUgdmFsMSA9IEdFVFJBV1NBTVBMRShzaXplLCBjcCwgaSk7CisgICAgICAgIGRvdWJsZSB2YWwyID0gR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpICsgc2l6ZSk7CisgICAgICAgIGRvdWJsZSB2YWwgPSB2YWwxKmZhYzEgKyB2YWwyKmZhYzI7CisgICAgICAgIHZhbCA9IGZsb29yKGZib3VuZCh2YWwsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRShzaXplLCBuY3AsIGkvMiwgdmFsKTsKICAgICB9CisgIGV4aXQ6CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKICAgICByZXR1cm4gcnY7CiB9CkBAIC04NTIsODkgKzkyOCw3NiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfdG9zdGVyZW8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSwgdmFsMiwgdmFsID0gMDsKLSAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsLCBtaW52YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZGQ6dG9zdGVyZW8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppZGQ6dG9zdGVyZW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUsICZmYWMxLCAmZmFjMikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OwogCiAgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKICAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYLzIpIHsKKyAgICBpZiAodmlldy5sZW4gPiBQWV9TU0laRV9UX01BWC8yKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qMik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuKjIpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLQotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjMTsKLSAgICAgICAgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0KLSAgICAgICAgZnZhbCA9IChkb3VibGUpdmFsKmZhYzI7Ci0gICAgICAgIHZhbDIgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKjIpID0gKHNpZ25lZCBjaGFyKXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSoyKSA9IChzaG9ydCl2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSoyKSA9IChQeV9JbnQzMil2YWwxOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKjIrMSkgPSAoc2lnbmVkIGNoYXIpdmFsMjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKjIrMikgPSAoc2hvcnQpdmFsMjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkqMis0KSA9IChQeV9JbnQzMil2YWwyOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICBpbnQgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpmYWMxLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBpbnQgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKHZhbCpmYWMyLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpKjIsIHZhbDEpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpKjIgKyBzaXplLCB2YWwyKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9hZGQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDEsICpjcDIsICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpOwotICAgIGludCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDAsIG1pbnZhbCwgbWF4dmFsLCBuZXd2YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X2J1ZmZlciB2aWV3MTsKKyAgICBQeV9idWZmZXIgdmlldzI7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemUsIG1pbnZhbCwgbWF4dmFsLCBuZXd2YWw7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyNpOmFkZCIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwMSwgJmxlbjEsICZjcDIsICZsZW4yLCAmc2l6ZSApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuMSwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnkqaTphZGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldzEsICZ2aWV3MiwgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIGxlbjEgIT0gbGVuMiApIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3MS5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKHZpZXcxLmxlbiAhPSB2aWV3Mi5sZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkxlbmd0aHMgc2hvdWxkIGJlIHRoZSBzYW1lIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgbWF4dmFsID0gbWF4dmFsc1tzaXplXTsKICAgICBtaW52YWwgPSBtaW52YWxzW3NpemVdOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbjEpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3MS5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4xOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwxID0gKGludCkqQ0hBUlAoY3AxLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDEgPSAoaW50KSpTSE9SVFAoY3AxLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDEgPSAoaW50KSpMT05HUChjcDEsIGkpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwyID0gKGludCkqQ0hBUlAoY3AyLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbDIgPSAoaW50KSpTSE9SVFAoY3AyLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDIgPSAoaW50KSpMT05HUChjcDIsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3MS5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsMSA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3MS5idWYsIGkpOworICAgICAgICBpbnQgdmFsMiA9IEdFVFJBV1NBTVBMRShzaXplLCB2aWV3Mi5idWYsIGkpOwogCiAgICAgICAgIGlmIChzaXplIDwgNCkgewogICAgICAgICAgICAgbmV3dmFsID0gdmFsMSArIHZhbDI7CkBAIC05NTAsMTI0ICsxMDEzLDE2NSBAQAogICAgICAgICAgICAgbmV3dmFsID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhciluZXd2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpbmV3dmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpbmV3dmFsOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCBpLCBuZXd2YWwpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3MSk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldzIpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYmlhcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaXplLCBiaWFzOwogICAgIHVuc2lnbmVkIGludCB2YWwgPSAwLCBtYXNrOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpiaWFzIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplICwgJmJpYXMpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppaTpiaWFzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplLCAmYmlhcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKICAgICBtYXNrID0gbWFza3Nbc2l6ZV07CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGNoYXIpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIHNob3J0KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKHVuc2lnbmVkIGludCkoUHlfVUludDMyKSpMT05HUChjcCwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IHZpZXcubGVuOyBpICs9IHNpemUpIHsKKyAgICAgICAgaWYgKHNpemUgPT0gMSkKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgodW5zaWduZWQgY2hhciwgdmlldy5idWYsIGkpOworICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKHVuc2lnbmVkIHNob3J0LCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMykKKyAgICAgICAgICAgIHZhbCA9ICgodW5zaWduZWQgaW50KUdFVElOVDI0KHZpZXcuYnVmLCBpKSkgJiAweGZmZmZmZnU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNpemUgPT0gNCk7CisgICAgICAgICAgICB2YWwgPSBHRVRJTlRYKFBZX1VJTlQzMl9ULCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIH0KIAogICAgICAgICB2YWwgKz0gKHVuc2lnbmVkIGludCliaWFzOwogICAgICAgICAvKiB3cmFwIGFyb3VuZCBpbiBjYXNlIG9mIG92ZXJmbG93ICovCiAgICAgICAgIHZhbCAmPSBtYXNrOwogCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodW5zaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHVuc2lnbmVkIHNob3J0KXZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKShQeV9VSW50MzIpdmFsOworICAgICAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICAgICAgU0VUSU5UWCh1bnNpZ25lZCBjaGFyLCBuY3AsIGksIHZhbCk7CisgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gMikKKyAgICAgICAgICAgIFNFVElOVFgodW5zaWduZWQgc2hvcnQsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKQorICAgICAgICAgICAgU0VUSU5UMjQobmNwLCBpLCAoaW50KXZhbCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHNpemUgPT0gNCk7CisgICAgICAgICAgICBTRVRJTlRYKFBZX1VJTlQzMl9ULCBuY3AsIGksIHZhbCk7CisgICAgICAgIH0KICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9yZXZlcnNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpyZXZlcnNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpyZXZlcnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBqID0gbGVuIC0gaSAtIHNpemU7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaikgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICBTRVRSQVdTQU1QTEUoc2l6ZSwgbmNwLCB2aWV3LmxlbiAtIGkgLSBzaXplLCB2YWwpOwogICAgIH0KKyAgZXhpdDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gcnY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2J5dGVzd2FwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9idWZmZXIgdmlldzsKKyAgICB1bnNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzaXplOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpzd2FwYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykKKyAgICAgICAgICAgIG5jcFtpICsgc2l6ZSAtIDEgLSBqXSA9ICgodW5zaWduZWQgY2hhciAqKXZpZXcuYnVmKVtpICsgal07CisgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbGluMmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaSwgajsKLSAgICBpbnQgc2l6ZSwgc2l6ZTIsIHZhbCA9IDA7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaSwgajsKKyAgICBpbnQgc2l6ZSwgc2l6ZTI7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6bGluMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnNpemUyKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaWk6bGluMmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJnNpemUyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyh2aWV3Lmxlbiwgc2l6ZSkpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplMikpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBpZiAobGVuL3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplMikgeworICAgIGlmICh2aWV3Lmxlbi9zaXplID4gUFlfU1NJWkVfVF9NQVgvc2l6ZTIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCAobGVuL3NpemUpKnNpemUyKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKHZpZXcubGVuL3NpemUpKnNpemUyKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTAsIGo9MDsgaSA8IGxlbjsgaSArPSBzaXplLCBqICs9IHNpemUyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgMjQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPDwgMTY7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0KLSAgICAgICAgaWYgKCBzaXplMiA9PSAxICkgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gMiApICpTSE9SVFAobmNwLCBqKSA9IChzaG9ydCkodmFsID4+IDE2KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUyID09IDQgKSAqTE9OR1AobmNwLCBqKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gaiA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplLCBqICs9IHNpemUyKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUyLCBuY3AsIGosIHZhbCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMTA4NSw2ICsxMTg5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX3JhdGVjdihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgY2hhciAqY3AsICpuY3A7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IHNpemUsIG5jaGFubmVscywgaW5yYXRlLCBvdXRyYXRlLCB3ZWlnaHRBLCB3ZWlnaHRCOwpAQCAtMTA5NCwxNSArMTE5OSwxNSBAQAogCiAgICAgd2VpZ2h0QSA9IDE7CiAgICAgd2VpZ2h0QiA9IDA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpaWlPfGlpOnJhdGVjdiIsICZjcCwgJmxlbiwgJnNpemUsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlpaWlPfGlpOnJhdGVjdiIsICZ2aWV3LCAmc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5jaGFubmVscywgJmlucmF0ZSwgJm91dHJhdGUsICZzdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJndlaWdodEEsICZ3ZWlnaHRCKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQyOwogICAgIGlmIChuY2hhbm5lbHMgPCAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICIjIG9mIGNoYW5uZWxzIHNob3VsZCBiZSA+PSAxIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGV4aXQyOwogICAgIH0KICAgICBpZiAoc2l6ZSA+IElOVF9NQVggLyBuY2hhbm5lbHMpIHsKICAgICAgICAgLyogVGhpcyBvdmVyZmxvdyB0ZXN0IGlzIHJpZ29yb3VzbHkgY29ycmVjdCBiZWNhdXNlCkBAIC0xMTEwLDIxICsxMjE1LDIxIEBACiAgICAgICAgICAgIGZyb20gdGhlIGRvY3MgZm9yIHRoZSBlcnJvciBtc2cuICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoICogbmNoYW5uZWxzIHRvbyBiaWcgZm9yIGEgQyBpbnQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQogICAgIGJ5dGVzX3Blcl9mcmFtZSA9IHNpemUgKiBuY2hhbm5lbHM7CiAgICAgaWYgKHdlaWdodEEgPCAxIHx8IHdlaWdodEIgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsCiAgICAgICAgICAgICAid2VpZ2h0QSBzaG91bGQgYmUgPj0gMSwgd2VpZ2h0QiBzaG91bGQgYmUgPj0gMCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9Ci0gICAgaWYgKGxlbiAlIGJ5dGVzX3Blcl9mcmFtZSAhPSAwKSB7CisgICAgaWYgKHZpZXcubGVuICUgYnl0ZXNfcGVyX2ZyYW1lICE9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIm5vdCBhIHdob2xlIG51bWJlciBvZiBmcmFtZXMiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQogICAgIGlmIChpbnJhdGUgPD0gMCB8fCBvdXRyYXRlIDw9IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgInNhbXBsaW5nIHJhdGUgbm90ID4gMCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBleGl0MjsKICAgICB9CiAgICAgLyogZGl2aWRlIGlucmF0ZSBhbmQgb3V0cmF0ZSBieSB0aGVpciBncmVhdGVzdCBjb21tb24gZGl2aXNvciAqLwogICAgIGQgPSBnY2QoaW5yYXRlLCBvdXRyYXRlKTsKQEAgLTExMzgsMTYgKzEyNDMsMTYgQEAKICAgICBpZiAoKHNpemVfdCluY2hhbm5lbHMgPiBQWV9TSVpFX01BWC9zaXplb2YoaW50KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDI7CiAgICAgfQotICAgIHByZXZfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKLSAgICBjdXJfaSA9IChpbnQgKikgbWFsbG9jKG5jaGFubmVscyAqIHNpemVvZihpbnQpKTsKKyAgICBwcmV2X2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CisgICAgY3VyX2kgPSAoaW50ICopIFB5TWVtX01hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKHByZXZfaSA9PSBOVUxMIHx8IGN1cl9pID09IE5VTEwpIHsKICAgICAgICAgKHZvaWQpIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBsZW4gLz0gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLworICAgIGxlbiA9IHZpZXcubGVuIC8gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLwogCiAgICAgaWYgKHN0YXRlID09IFB5X05vbmUpIHsKICAgICAgICAgZCA9IC1vdXRyYXRlOwpAQCAtMTE5Nyw2ICsxMzAyLDcgQEAKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICBuY3AgPSBQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSB2aWV3LmJ1ZjsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgd2hpbGUgKGQgPCAwKSB7CkBAIC0xMjI3LDEyICsxMzMzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoY2hhbiA9IDA7IGNoYW4gPCBuY2hhbm5lbHM7IGNoYW4rKykgewogICAgICAgICAgICAgICAgIHByZXZfaVtjaGFuXSA9IGN1cl9pW2NoYW5dOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKChpbnQpKkNIQVJQKGNwLCAwKSkgPDwgMjQ7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9ICgoaW50KSpTSE9SVFAoY3AsIDApKSA8PCAxNjsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKGludCkqTE9OR1AoY3AsIDApOworICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gR0VUU0FNUExFMzIoc2l6ZSwgY3AsIDApOwogICAgICAgICAgICAgICAgIGNwICs9IHNpemU7CiAgICAgICAgICAgICAgICAgLyogaW1wbGVtZW50cyBhIHNpbXBsZSBkaWdpdGFsIGZpbHRlciAqLwogICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKGludCkoCkBAIC0xMjQ4LDE4NCArMTM0OSwxNzUgQEAKICAgICAgICAgICAgICAgICBjdXJfbyA9IChpbnQpKCgoZG91YmxlKXByZXZfaVtjaGFuXSAqIChkb3VibGUpZCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSljdXJfaVtjaGFuXSAqIChkb3VibGUpKG91dHJhdGUgLSBkKSkgLwogICAgICAgICAgICAgICAgICAgICAoZG91YmxlKW91dHJhdGUpOwotICAgICAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgICAgICpDSEFSUChuY3AsIDApID0gKHNpZ25lZCBjaGFyKShjdXJfbyA+PiAyNCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKQotICAgICAgICAgICAgICAgICAgICAqU0hPUlRQKG5jcCwgMCkgPSAoc2hvcnQpKGN1cl9vID4+IDE2KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDQpCi0gICAgICAgICAgICAgICAgICAgICpMT05HUChuY3AsIDApID0gKFB5X0ludDMyKShjdXJfbyk7CisgICAgICAgICAgICAgICAgU0VUU0FNUExFMzIoc2l6ZSwgbmNwLCAwLCBjdXJfbyk7CiAgICAgICAgICAgICAgICAgbmNwICs9IHNpemU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkIC09IGlucmF0ZTsKICAgICAgICAgfQogICAgIH0KICAgZXhpdDoKLSAgICBpZiAocHJldl9pICE9IE5VTEwpCi0gICAgICAgIGZyZWUocHJldl9pKTsKLSAgICBpZiAoY3VyX2kgIT0gTlVMTCkKLSAgICAgICAgZnJlZShjdXJfaSk7CisgICAgUHlNZW1fRnJlZShwcmV2X2kpOworICAgIFB5TWVtX0ZyZWUoY3VyX2kpOworICBleGl0MjoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBhdWRpb29wX2xpbjJ1bGF3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4ydWxhdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwIDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kmk6bGluMnVsYXciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlldywgJnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnModmlldy5sZW4sIHNpemUpKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4vc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OwotCi0gICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdmlldy5sZW47IGkgKz0gc2l6ZSkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIoc2l6ZSwgdmlldy5idWYsIGkpOworICAgICAgICAqbmNwKysgPSBzdF8xNGxpbmVhcjJ1bGF3KHZhbCA+PiAxOCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfdWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWw7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnVsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTp1bGF3MmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYgKHZpZXcubGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4qc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGN2YWwgPSAqY3ArKzsKLSAgICAgICAgdmFsID0gc3RfdWxhdzJsaW5lYXIxNihjdmFsKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFsKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWw8PDE2KTsKKyAgICBjcCA9IHZpZXcuYnVmOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbipzaXplOyBpICs9IHNpemUpIHsKKyAgICAgICAgaW50IHZhbCA9IHN0X3VsYXcybGluZWFyMTYoKmNwKyspIDw8IDE2OworICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIGksIHZhbCk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfbGluMmFsYXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7Ci0gICAgUHlPYmplY3QgKnJ2OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2l6ZTsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmxpbjJhbGF3IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSppOmxpbjJhbGF3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcsICZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuL3NpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHZpZXcubGVuL3NpemUpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjsgaSArPSBzaXplICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgODsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAxNjsKLQotICAgICAgICAqbmNwKysgPSBzdF9saW5lYXIyYWxhdyh2YWwpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSk7CisgICAgICAgICpuY3ArKyA9IHN0X2xpbmVhcjJhbGF3KHZhbCA+PiAxOSk7CiAgICAgfQorICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYWxhdzJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5X2J1ZmZlciB2aWV3OwogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2l6ZSwgdmFsOwotICAgIFB5T2JqZWN0ICpydjsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmFsYXcybGluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTphbGF3MmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYL3NpemUpIHsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgaWYgKHZpZXcubGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdmlldy5sZW4qc2l6ZSk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKKyAgICBjcCA9IHZpZXcuYnVmOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuKnNpemU7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgY3ZhbCA9ICpjcCsrOwotICAgICAgICB2YWwgPSBzdF9hbGF3MmxpbmVhcjE2KGN2YWwpOwotCi0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFsID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWwpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpKHZhbDw8MTYpOworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbipzaXplOyBpICs9IHNpemUpIHsKKyAgICAgICAgdmFsID0gc3RfYWxhdzJsaW5lYXIxNigqY3ArKykgPDwgMTY7CisgICAgICAgIFNFVFNBTVBMRTMyKHNpemUsIG5jcCwgaSwgdmFsKTsKICAgICB9CisgIGV4aXQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9saW4yYWRwY20oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHNpZ25lZCBjaGFyICpjcDsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwLCBzdGVwLCB2YWxwcmVkLCBkZWx0YSwKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHNpemUsIHN0ZXAsIHZhbHByZWQsIGRlbHRhLAogICAgICAgICBpbmRleCwgc2lnbiwgdnBkaWZmLCBkaWZmOwotICAgIFB5T2JqZWN0ICpydiwgKnN0YXRlLCAqc3RyOworICAgIFB5T2JqZWN0ICpydiA9IE5VTEwsICpzdGF0ZSwgKnN0cjsKICAgICBpbnQgb3V0cHV0YnVmZmVyID0gMCwgYnVmZmVyc3RlcDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaU86bGluMmFkcGNtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZzdGF0ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlPOmxpbjJhZHBjbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJnN0YXRlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi8oc2l6ZSoyKSk7Ci0gICAgaWYgKCBzdHIgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKHZpZXcubGVuLCBzaXplKSkKKyAgICAgICAgZ290byBleGl0OworCisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCB2aWV3Lmxlbi8oc2l6ZSoyKSk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhzdHIpOwogCiAgICAgLyogRGVjb2RlIHN0YXRlLCBzaG91bGQgaGF2ZSAodmFsdWUsIHN0ZXApICovCkBAIC0xNDMzLDIxICsxNTI1LDI0IEBACiAgICAgICAgIC8qIEZpcnN0IHRpbWUsIGl0IHNlZW1zLiBTZXQgZGVmYXVsdHMgKi8KICAgICAgICAgdmFscHJlZCA9IDA7CiAgICAgICAgIGluZGV4ID0gMDsKLSAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSkKKyAgICAgICAgZ290byBleGl0OwogCiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAxOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OworICAgIGZvciAoaSA9IDA7IGkgPCB2aWV3LmxlbjsgaSArPSBzaXplKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMihzaXplLCB2aWV3LmJ1ZiwgaSkgPj4gMTY7CiAKICAgICAgICAgLyogU3RlcCAxIC0gY29tcHV0ZSBkaWZmZXJlbmNlIHdpdGggcHJldmlvdXMgdmFsdWUgKi8KLSAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7Ci0gICAgICAgIHNpZ24gPSAoZGlmZiA8IDApID8gOCA6IDA7Ci0gICAgICAgIGlmICggc2lnbiApIGRpZmYgPSAoLWRpZmYpOworICAgICAgICBpZiAodmFsIDwgdmFscHJlZCkgeworICAgICAgICAgICAgZGlmZiA9IHZhbHByZWQgLSB2YWw7CisgICAgICAgICAgICBzaWduID0gODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRpZmYgPSB2YWwgLSB2YWxwcmVkOworICAgICAgICAgICAgc2lnbiA9IDA7CisgICAgICAgIH0KIAogICAgICAgICAvKiBTdGVwIDIgLSBEaXZpZGUgYW5kIGNsYW1wICovCiAgICAgICAgIC8qIE5vdGU6CkBAIC0xNTA4LDQ4ICsxNjAzLDUzIEBACiAgICAgfQogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwogICAgIFB5X0RFQ1JFRihzdHIpOworICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYWRwY20ybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeV9idWZmZXIgdmlldzsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBQeV9zc2l6ZV90IGksIG91dGxlbjsKICAgICBpbnQgc2l6ZSwgdmFscHJlZCwgc3RlcCwgZGVsdGEsIGluZGV4LCBzaWduLCB2cGRpZmY7Ci0gICAgUHlPYmplY3QgKnJ2LCAqc3RyLCAqc3RhdGU7CisgICAgUHlPYmplY3QgKnJ2ID0gTlVMTCwgKnN0ciwgKnN0YXRlOwogICAgIGludCBpbnB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmFkcGNtMmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KmlPOmFkcGNtMmxpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aWV3LCAmc2l6ZSwgJnN0YXRlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKIAogICAgIC8qIERlY29kZSBzdGF0ZSwgc2hvdWxkIGhhdmUgKHZhbHVlLCBzdGVwKSAqLwogICAgIGlmICggc3RhdGUgPT0gUHlfTm9uZSApIHsKICAgICAgICAgLyogRmlyc3QgdGltZSwgaXQgc2VlbXMuIFNldCBkZWZhdWx0cyAqLwogICAgICAgICB2YWxwcmVkID0gMDsKICAgICAgICAgaW5kZXggPSAwOwotICAgIH0gZWxzZSBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSApCi0gICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKQorICAgICAgICBnb3RvIGV4aXQ7CiAKLSAgICBpZiAobGVuID4gKFBZX1NTSVpFX1RfTUFYLzIpL3NpemUpIHsKKyAgICBpZiAodmlldy5sZW4gPiAoUFlfU1NJWkVfVF9NQVgvMikvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4qc2l6ZSoyKTsKLSAgICBpZiAoIHN0ciA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgb3V0bGVuID0gdmlldy5sZW4qc2l6ZSoyOworICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0bGVuKTsKKyAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSB2aWV3LmJ1ZjsKIAogICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKICAgICBidWZmZXJzdGVwID0gMDsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplKjI7IGkgKz0gc2l6ZSApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpICs9IHNpemUpIHsKICAgICAgICAgLyogU3RlcCAxIC0gZ2V0IHRoZSBkZWx0YSB2YWx1ZSBhbmQgY29tcHV0ZSBuZXh0IGluZGV4ICovCiAgICAgICAgIGlmICggYnVmZmVyc3RlcCApIHsKICAgICAgICAgICAgIGRlbHRhID0gaW5wdXRidWZmZXIgJiAweGY7CkBAIC0xNTk0LDEzICsxNjk0LDEzIEBACiAgICAgICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKIAogICAgICAgICAvKiBTdGVwIDYgLSBPdXRwdXQgdmFsdWUgKi8KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcikodmFscHJlZCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFscHJlZCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFscHJlZDw8MTYpOworICAgICAgICBTRVRTQU1QTEUzMihzaXplLCBuY3AsIGksIHZhbHByZWQgPDwgMTYpOwogICAgIH0KIAogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwogICAgIFB5X0RFQ1JFRihzdHIpOworICBleGl0OgorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBydjsKIH0KIApAQCAtMTYyOSw2ICsxNzI5LDcgQEAKICAgICB7ICJ0b3N0ZXJlbyIsIGF1ZGlvb3BfdG9zdGVyZW8sIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgImdldHNhbXBsZSIsIGF1ZGlvb3BfZ2V0c2FtcGxlLCBNRVRIX1ZBUkFSR1MgfSwKICAgICB7ICJyZXZlcnNlIiwgYXVkaW9vcF9yZXZlcnNlLCBNRVRIX1ZBUkFSR1MgfSwKKyAgICB7ICJieXRlc3dhcCIsIGF1ZGlvb3BfYnl0ZXN3YXAsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgInJhdGVjdiIsIGF1ZGlvb3BfcmF0ZWN2LCBNRVRIX1ZBUkFSR1MgfSwKICAgICB7IDAsICAgICAgICAgIDAgfQogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYmluYXNjaWkuYyBiL01vZHVsZXMvYmluYXNjaWkuYwppbmRleCBhODRiYWRjNy4uMGY0OTcwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtMzYxLDggKzM2MSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CkBAIC00OTEsOCArNDkwLDcgQEAKICAgICAqLwogICAgIGlmIChiaW5fbGVuID4gMCkgewogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgYmluX2xlbikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICAgICAgcnYgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewpAQCAtNTYzLDggKzU2MSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CkBAIC02NDIsOCArNjM5LDcgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGJpbl9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBpZiAocnYpIHsKICAgICAgICAgUHlPYmplY3QgKnJydiA9IFB5X0J1aWxkVmFsdWUoIk9pIiwgcnYsIGRvbmUpOwpAQCAtNzEzLDggKzcwOSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtNzcwLDggKzc2NSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CkBAIC04MzQsNyArODI4LDcgQEAKICAgICAgICAgICAgICBpZiAoIC0tb3V0X2xlbl9sZWZ0IDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0X2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgMipvdXRfbGVuKSA8IDApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgUHlfREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9YREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3V0X2xlbjsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW4tMTsgXApAQCAtODg3LDggKzg4MSw3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChvdXRfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICByZXR1cm4gcnY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKaW5kZXggOWU5ZTk2Yy4uMDEzYzNmYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwpAQCAtMjMsMTggKzIzLDMzIEBACiAgKiBBODQ0ICAgICAgICAgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICBVKzIwMTUgSE9SSVpPTlRBTCBCQVIKICAqLwogCi0jZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIGFzc2kpIFwKLSAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSAoYXNzaSkgPSAweDIwMTQ7IFwKLSAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIChhc3NpKSA9IDB4MjAxNTsgXAotICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgKGFzc2kpID0gMHgwMGI3OyBcCi0gICAgZWxzZSBUUllNQVBfREVDKGdiMjMxMiwgYXNzaSwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCk7IFwKLSAgICBlbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCBhc3NpLCBkYzEsIGRjMik7CisjZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YTQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDBiNyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCkpIHsgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdia2V4dCwgZGVjb2RlZCwgZGMxLCBkYzIpKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEdCS19FTkNPREUoY29kZSwgYXNzaSkgXAotICAgIGlmICgoY29kZSkgPT0gMHgyMDE0KSAoYXNzaSkgPSAweGExYWE7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgyMDE1KSAoYXNzaSkgPSAweGE4NDQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSAoYXNzaSkgPSAweGExYTQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkNfQ09ORChnYmNvbW1vbiwgYXNzaSwgY29kZSkpOworI2RlZmluZSBHQktfRU5DT0RFKGNvZGUsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjb2RlKSA9PSAweDIwMTQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhMWFhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpID09IDB4MjAxNSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTg0NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGExYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGFzc2ksIGNvZGUpKSB7IFwKKyAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogLyoKICAqIEdCMjMxMiBjb2RlYwpAQCAtNDIsMjcgKzU3LDMxIEBACiAKIEVOQ09ERVIoZ2IyMzEyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+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+cGVuZGluZ3NpemUgPSAwOworICAgIHNlbGYtPnBlbmRpbmcgPSBOVUxMOwogICAgIHNlbGYtPmVycm9ycyA9IGludGVybmFsX2Vycm9yX2NhbGxiYWNrKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCmluZGV4IDFiNmVmNTUuLjViOGMyMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaApAQCAtMTAsMTIgKzEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiB1aW50MzJfdAotdHlwZWRlZiB1aW50MzJfdCB1Y3M0X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzNF90OwotI2VuZGlmCi0KICNpZmRlZiB1aW50MTZfdAogdHlwZWRlZiB1aW50MTZfdCB1Y3MyX3QsIERCQ0hBUjsKICNlbHNlCkBAIC0yNywxMyArMjEsMTQgQEAKICAgICBpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIGNbOF07CiAgICAgdWNzMl90IHUyWzRdOwotICAgIHVjczRfdCB1NFsyXTsKKyAgICBQeV9VQ1M0IHU0WzJdOwogfSBNdWx0aWJ5dGVDb2RlY19TdGF0ZTsKIAogdHlwZWRlZiBpbnQgKCptYmNvZGVjX2luaXQpKGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmVuY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CiB0eXBlZGVmIGludCAoKm1iZW5jb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC00NCw3ICszOSw3IEBACiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiB0eXBlZGVmIGludCAoKm1iZGVjb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcpOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJkZWNvZGVyZXNldF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC04MSw4ICs3Niw3IEBACiAjZGVmaW5lIE1BWEVOQ1BFTkRJTkcgICAyCiAjZGVmaW5lIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRCAgICAgICAgICBcCiAgICAgX011bHRpYnl0ZVN0YXRlZnVsQ29kZWNfSEVBRCAgICAgICAgICAgICAgICBcCi0gICAgUHlfVU5JQ09ERSBwZW5kaW5nW01BWEVOQ1BFTkRJTkddOyAgICAgICAgICBcCi0gICAgUHlfc3NpemVfdCBwZW5kaW5nc2l6ZTsKKyAgICBQeU9iamVjdCAqcGVuZGluZzsKIHR5cGVkZWYgc3RydWN0IHsKICAgICBfTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyX0hFQUQKIH0gTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyQ29udGV4dDsKQEAgLTExOCwxNiArMTEyLDE3IEBACiAjZGVmaW5lIE1CRVJSX1RPT1NNQUxMICAgICAgICAgICgtMSkgLyogaW5zdWZmaWNpZW50IG91dHB1dCBidWZmZXIgc3BhY2UgKi8KICNkZWZpbmUgTUJFUlJfVE9PRkVXICAgICAgICAgICAgKC0yKSAvKiBpbmNvbXBsZXRlIGlucHV0IGJ1ZmZlciAqLwogI2RlZmluZSBNQkVSUl9JTlRFUk5BTCAgICAgICAgICAoLTMpIC8qIGludGVybmFsIHJ1bnRpbWUgZXJyb3IgKi8KKyNkZWZpbmUgTUJFUlJfRVhDRVBUSU9OICAgICAgICAgKC00KSAvKiBhbiBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkICovCiAKICNkZWZpbmUgRVJST1JfU1RSSUNUICAgICAgICAgICAgKFB5T2JqZWN0ICopKDEpCiAjZGVmaW5lIEVSUk9SX0lHTk9SRSAgICAgICAgICAgIChQeU9iamVjdCAqKSgyKQogI2RlZmluZSBFUlJPUl9SRVBMQUNFICAgICAgICAgICAoUHlPYmplY3QgKikoMykKICNkZWZpbmUgRVJST1JfSVNDVVNUT00ocCkgICAgICAgKChwKSA8IEVSUk9SX1NUUklDVCB8fCBFUlJPUl9SRVBMQUNFIDwgKHApKQotI2RlZmluZSBFUlJPUl9ERUNSRUYocCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwICE9IE5VTEwgJiYgRVJST1JfSVNDVVNUT00ocCkpIHsgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCk7CisjZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApOwogCiAjZGVmaW5lIE1CRU5DX0ZMVVNIICAgICAgICAgICAgIDB4MDAwMSAvKiBlbmNvZGUgYWxsIGNoYXJhY3RlcnMgZW5jb2RhYmxlICovCiAjZGVmaW5lIE1CRU5DX01BWCAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNICmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKaW5kZXggZjM1YWEzNi4uMGFjMDMxNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCisrKyBiL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYwpAQCAtMiwxMiArMiw2IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBtZW1jcHkoKSAqLwotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCi0jaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCi0KICNkZWZpbmUgWE1MX0JVSUxESU5HX0VYUEFUIDEKIAogI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCkBAIC0yMiw2ICsxNiwxMiBAQAogI2luY2x1ZGUgPGV4cGF0X2NvbmZpZy5oPgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBtZW1jcHkoKSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCisKICNpbmNsdWRlICJhc2NpaS5oIgogI2luY2x1ZGUgImV4cGF0LmgiCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1scm9sZS5jIGIvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKaW5kZXggNDQ3NzJlMi4uOWE4Zjg1ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKQEAgLTIsOCArMiw2IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCiAjaWZkZWYgQ09NUElMRURfRlJPTV9EU1AKICNpbmNsdWRlICJ3aW5jb25maWcuaCIKICNlbGlmIGRlZmluZWQoTUFDT1NfQ0xBU1NJQykKQEAgLTE4LDYgKzE2LDggQEAKICNlbmRpZgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjaW5jbHVkZSAiZXhwYXRfZXh0ZXJuYWwuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInhtbHJvbGUuaCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCmluZGV4IGI5Y2Q3YTQuLmZkNmJmN2EgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWx0b2suYwpAQCAtMiw4ICsyLDYgQEAKICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGZvciBjb3B5aW5nIHBlcm1pc3Npb24uCiAqLwogCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KICNpZmRlZiBDT01QSUxFRF9GUk9NX0RTUAogI2luY2x1ZGUgIndpbmNvbmZpZy5oIgogI2VsaWYgZGVmaW5lZChNQUNPU19DTEFTU0lDKQpAQCAtMTgsNiArMTYsOCBAQAogI2VuZGlmCiAjZW5kaWYgLyogbmRlZiBDT01QSUxFRF9GUk9NX0RTUCAqLwogCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKICNpbmNsdWRlICJleHBhdF9leHRlcm5hbC5oIgogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAieG1sdG9rLmgiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwppbmRleCBjODZhMjdmLi4yN2IxZDU0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCisrKyBiL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKQEAgLTIyLDcgKzIyLDE0IEBACiAjICBkZWZpbmUgRkFVTFRIQU5ETEVSX1VTRVIKICNlbmRpZgogCi0jZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpCisvKiBjYXN0IHNpemVfdCB0byBpbnQgYmVjYXVzZSB3cml0ZSgpIHRha2VzIGFuIGludCBvbiBXaW5kb3dzCisgICAoYW55d2F5LCB0aGUgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiAzMCBjaGFyYWN0ZXJzKSAqLworI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIChpbnQpc3RybGVuKHN0cikpCisKK19QeV9JREVOVElGSUVSKGVuYWJsZSk7CitfUHlfSURFTlRJRklFUihmaWxlbm8pOworX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogI2lmZGVmIEhBVkVfU0lHQUNUSU9OCiB0eXBlZGVmIHN0cnVjdCBzaWdhY3Rpb24gX1B5X3NpZ2hhbmRsZXJfdDsKQEAgLTc5LDkgKzg2LDYgQEAKIHN0YXRpYyB1c2VyX3NpZ25hbF90ICp1c2VyX3NpZ25hbHM7CiAKIC8qIHRoZSBmb2xsb3dpbmcgbWFjcm9zIGNvbWUgZnJvbSBQeXRob246IE1vZHVsZXMvc2lnbmFsbW9kdWxlLmMgKi8KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2VuZGlmCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC0xMzEsMTMgKzEzNSwxMSBAQAogZmF1bHRoYW5kbGVyX2dldF9maWxlbm8oUHlPYmplY3QgKmZpbGUsIGludCAqcF9mZCkKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIF9QeV9JREVOVElGSUVSKGZpbGVubyk7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogICAgIGxvbmcgZmRfbG9uZzsKICAgICBpbnQgZmQ7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMIHx8IGZpbGUgPT0gUHlfTm9uZSkgewotICAgICAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICAgICAgZmlsZSA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICBpZiAoZmlsZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMuc3RkZXJyIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ0OCw3ICs0NTAsNyBAQAogICAgICAgICAvKiBnZXQgdGhlIHRocmVhZCBob2xkaW5nIHRoZSBHSUwsIE5VTEwgaWYgbm8gdGhyZWFkIGhvbGQgdGhlIEdJTCAqLwogICAgICAgICBjdXJyZW50ID0gX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOwogCi0gICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgdGhyZWFkLmhlYWRlcl9sZW4pOworICAgICAgICB3cml0ZSh0aHJlYWQuZmQsIHRocmVhZC5oZWFkZXIsIChpbnQpdGhyZWFkLmhlYWRlcl9sZW4pOwogCiAgICAgICAgIGVycm1zZyA9IF9QeV9EdW1wVHJhY2ViYWNrVGhyZWFkcyh0aHJlYWQuZmQsIHRocmVhZC5pbnRlcnAsIGN1cnJlbnQpOwogICAgICAgICBvayA9IChlcnJtc2cgPT0gTlVMTCk7CkBAIC00NzYsNyArNDc4LDcgQEAKIAogICAgIFB5X0NMRUFSKHRocmVhZC5maWxlKTsKICAgICBpZiAodGhyZWFkLmhlYWRlcikgewotICAgICAgICBmcmVlKHRocmVhZC5oZWFkZXIpOworICAgICAgICBQeU1lbV9GcmVlKHRocmVhZC5oZWFkZXIpOwogICAgICAgICB0aHJlYWQuaGVhZGVyID0gTlVMTDsKICAgICB9CiB9CkBAIC01MDUsNyArNTA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAiVGltZW91dCAoJWx1OiUwMmx1OiUwMmx1KSFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMpOwogCi0gICAgcmV0dXJuIHN0cmR1cChidWZmZXIpOworICAgIHJldHVybiBfUHlNZW1fU3RyZHVwKGJ1ZmZlcik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTU3MSw3ICs1NzMsNyBAQAogICAgIGlmIChQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKGZhdWx0aGFuZGxlcl90aHJlYWQsIE5VTEwpID09IC0xKSB7CiAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0aHJlYWQucnVubmluZyk7CiAgICAgICAgIFB5X0NMRUFSKHRocmVhZC5maWxlKTsKLSAgICAgICAgZnJlZShoZWFkZXIpOworICAgICAgICBQeU1lbV9GcmVlKGhlYWRlcik7CiAgICAgICAgIHRocmVhZC5oZWFkZXIgPSBOVUxMOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBzdGFydCB3YXRjaGRvZyB0aHJlYWQiKTsKQEAgLTczMCw5ICs3MzIsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAodXNlcl9zaWduYWxzID09IE5VTEwpIHsKLSAgICAgICAgdXNlcl9zaWduYWxzID0gY2FsbG9jKE5TSUcsIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CisgICAgICAgIHVzZXJfc2lnbmFscyA9IFB5TWVtX01hbGxvYyhOU0lHICogc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKICAgICAgICAgaWYgKHVzZXJfc2lnbmFscyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIG1lbXNldCh1c2VyX3NpZ25hbHMsIDAsIE5TSUcgKiBzaXplb2YodXNlcl9zaWduYWxfdCkpOwogICAgIH0KICAgICB1c2VyID0gJnVzZXJfc2lnbmFsc1tzaWdudW1dOwogCkBAIC0xMDQ3LDkgKzEwNTAsMTEgQEAKIGZhdWx0aGFuZGxlcl9lbnZfb3B0aW9ucyh2b2lkKQogewogICAgIFB5T2JqZWN0ICp4b3B0aW9ucywgKmtleSwgKm1vZHVsZSwgKnJlczsKLSAgICBfUHlfSURFTlRJRklFUihlbmFibGUpOworICAgIGNoYXIgKnA7CiAKLSAgICBpZiAoIVB5X0dFVEVOVigiUFlUSE9ORkFVTFRIQU5ETEVSIikpIHsKKyAgICBpZiAoISgocCA9IFB5X0dFVEVOVigiUFlUSE9ORkFVTFRIQU5ETEVSIikpICYmICpwICE9ICdcMCcpKSB7CisgICAgICAgIC8qIFBZVEhPTkZBVUxUSEFORExFUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBtaXNzaW5nCisgICAgICAgICAgIG9yIGFuIGVtcHR5IHN0cmluZyAqLwogICAgICAgICBpbnQgaGFzX2tleTsKIAogICAgICAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CkBAIC0xMTM3LDcgKzExNDIsNyBAQAogICAgIGlmICh1c2VyX3NpZ25hbHMgIT0gTlVMTCkgewogICAgICAgICBmb3IgKHNpZ251bT0wOyBzaWdudW0gPCBOU0lHOyBzaWdudW0rKykKICAgICAgICAgICAgIGZhdWx0aGFuZGxlcl91bnJlZ2lzdGVyKCZ1c2VyX3NpZ25hbHNbc2lnbnVtXSwgc2lnbnVtKTsKLSAgICAgICAgZnJlZSh1c2VyX3NpZ25hbHMpOworICAgICAgICBQeU1lbV9GcmVlKHVzZXJfc2lnbmFscyk7CiAgICAgICAgIHVzZXJfc2lnbmFscyA9IE5VTEw7CiAgICAgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMgYi9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKaW5kZXggNjc2OTA5OC4uNzlkMjkyZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9mY250bG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwpAQCAtMzI3LDExICszMjcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVub2JqLCAmc3RhcnRvYmosICZ3aGVuY2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJsb2NrZiBub3Qgc3VwcG9ydGVkIG9uIE9TLzIgKEVNWCkiKTsKLSAgICByZXR1cm4gTlVMTDsKLSNlbHNlCiAjaWZuZGVmIExPQ0tfU0gKICNkZWZpbmUgTE9DS19TSCAgICAgICAgIDEgICAgICAgLyogc2hhcmVkIGxvY2sgKi8KICNkZWZpbmUgTE9DS19FWCAgICAgICAgIDIgICAgICAgLyogZXhjbHVzaXZlIGxvY2sgKi8KQEAgLTM4NSw3ICszODAsNiBAQAogICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7Ci0jZW5kaWYgIC8qIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpICovCiB9CiAKIFB5RG9jX1NUUlZBUihsb2NrZl9kb2MsCkBAIC00MzIsMTg4ICs0MjYsMTc5IEBACiAKIC8qIE1vZHVsZSBpbml0aWFsaXNhdGlvbiAqLwogCi1zdGF0aWMgaW50Ci1pbnMoUHlPYmplY3QqIGQsIGNoYXIqIHN5bWJvbCwgbG9uZyB2YWx1ZSkKLXsKLSAgICBQeU9iamVjdCogdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7Ci0gICAgaWYgKCF2IHx8IFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIHN5bWJvbCwgdikgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQeV9ERUNSRUYodik7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgSU5TKHgpIGlmIChpbnMoZCwgI3gsIChsb25nKXgpKSByZXR1cm4gLTEKIAogc3RhdGljIGludAotYWxsX2lucyhQeU9iamVjdCogZCkKK2FsbF9pbnMoUHlPYmplY3QqIG0pCiB7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19TSCIsIChsb25nKUxPQ0tfU0gpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19FWCIsIChsb25nKUxPQ0tfRVgpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19OQiIsIChsb25nKUxPQ0tfTkIpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiTE9DS19VTiIsIChsb25nKUxPQ0tfVU4pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfRVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfTkIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfVU4pKSByZXR1cm4gLTE7CiAvKiBHTlUgZXh0ZW5zaW9ucywgYXMgb2YgZ2xpYmMgMi4yLjQgKi8KICNpZmRlZiBMT0NLX01BTkQKLSAgICBpZiAoaW5zKGQsICJMT0NLX01BTkQiLCAobG9uZylMT0NLX01BTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfTUFORCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIExPQ0tfUkVBRAotICAgIGlmIChpbnMoZCwgIkxPQ0tfUkVBRCIsIChsb25nKUxPQ0tfUkVBRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19SRUFEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19XUklURQotICAgIGlmIChpbnMoZCwgIkxPQ0tfV1JJVEUiLCAobG9uZylMT0NLX1dSSVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1dSSVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19SVwotICAgIGlmIChpbnMoZCwgIkxPQ0tfUlciLCAobG9uZylMT0NLX1JXKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1JXKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBGX0RVUEZECi0gICAgaWYgKGlucyhkLCAiRl9EVVBGRCIsIChsb25nKUZfRFVQRkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRFVQRkQpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBGX0RVUEZEX0NMT0VYRUMKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9EVVBGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRGRAotICAgIGlmIChpbnMoZCwgIkZfR0VURkQiLCAobG9uZylGX0dFVEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVEZEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRGRAotICAgIGlmIChpbnMoZCwgIkZfU0VURkQiLCAobG9uZylGX1NFVEZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVEZEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRGTAotICAgIGlmIChpbnMoZCwgIkZfR0VURkwiLCAobG9uZylGX0dFVEZMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVEZMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRGTAotICAgIGlmIChpbnMoZCwgIkZfU0VURkwiLCAobG9uZylGX1NFVEZMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVEZMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRMSwotICAgIGlmIChpbnMoZCwgIkZfR0VUTEsiLCAobG9uZylGX0dFVExLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVExLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMSwotICAgIGlmIChpbnMoZCwgIkZfU0VUTEsiLCAobG9uZylGX1NFVExLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMS1cKLSAgICBpZiAoaW5zKGQsICJGX1NFVExLVyIsIChsb25nKUZfU0VUTEtXKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLVykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUT1dOCi0gICAgaWYgKGlucyhkLCAiRl9HRVRPV04iLCAobG9uZylGX0dFVE9XTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRPV04pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVE9XTgotICAgIGlmIChpbnMoZCwgIkZfU0VUT1dOIiwgKGxvbmcpRl9TRVRPV04pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUT1dOKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRTSUcKLSAgICBpZiAoaW5zKGQsICJGX0dFVFNJRyIsIChsb25nKUZfR0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVFNJRykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUU0lHCi0gICAgaWYgKGlucyhkLCAiRl9TRVRTSUciLCAobG9uZylGX1NFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRTSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1JETENLCi0gICAgaWYgKGlucyhkLCAiRl9SRExDSyIsIChsb25nKUZfUkRMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfUkRMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1dSTENLCi0gICAgaWYgKGlucyhkLCAiRl9XUkxDSyIsIChsb25nKUZfV1JMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfV1JMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1VOTENLCi0gICAgaWYgKGlucyhkLCAiRl9VTkxDSyIsIChsb25nKUZfVU5MQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfVU5MQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIExGUyBjb25zdGFudHMgKi8KICNpZmRlZiBGX0dFVExLNjQKLSAgICBpZiAoaW5zKGQsICJGX0dFVExLNjQiLCAobG9uZylGX0dFVExLNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEs2NCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEs2NAotICAgIGlmIChpbnMoZCwgIkZfU0VUTEs2NCIsIChsb25nKUZfU0VUTEs2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMSzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMS1c2NAotICAgIGlmIChpbnMoZCwgIkZfU0VUTEtXNjQiLCAobG9uZylGX1NFVExLVzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLVzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBHTlUgZXh0ZW5zaW9ucywgYXMgb2YgZ2xpYmMgMi4yLjQuICovCiAjaWZkZWYgRkFTWU5DCi0gICAgaWYgKGlucyhkLCAiRkFTWU5DIiwgKGxvbmcpRkFTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGQVNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExFQVNFCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMRUFTRSIsIChsb25nKUZfU0VUTEVBU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEVBU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVExFQVNFCi0gICAgaWYgKGlucyhkLCAiRl9HRVRMRUFTRSIsIChsb25nKUZfR0VUTEVBU0UpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEVBU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX05PVElGWQotICAgIGlmIChpbnMoZCwgIkZfTk9USUZZIiwgKGxvbmcpRl9OT1RJRlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTk9USUZZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAvKiBPbGQgQlNEIGZsb2NrKCkuICovCiAjaWZkZWYgRl9FWExDSwotICAgIGlmIChpbnMoZCwgIkZfRVhMQ0siLCAobG9uZylGX0VYTENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0VYTENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TSExDSwotICAgIGlmIChpbnMoZCwgIkZfU0hMQ0siLCAobG9uZylGX1NITENLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NITENLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIE9TIFggc3BlY2lmaWNzICovCiAjaWZkZWYgRl9GVUxMRlNZTkMKLSAgICBpZiAoaW5zKGQsICJGX0ZVTExGU1lOQyIsIChsb25nKUZfRlVMTEZTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0ZVTExGU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfTk9DQUNIRQotICAgIGlmIChpbnMoZCwgIkZfTk9DQUNIRSIsIChsb25nKUZfTk9DQUNIRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9OT0NBQ0hFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEZvciBGX3tHRVR8U0VUfUZMICovCiAjaWZkZWYgRkRfQ0xPRVhFQwotICAgIGlmIChpbnMoZCwgIkZEX0NMT0VYRUMiLCAobG9uZylGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGRF9DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEZvciBGX05PVElGWSAqLwogI2lmZGVmIEROX0FDQ0VTUwotICAgIGlmIChpbnMoZCwgIkROX0FDQ0VTUyIsIChsb25nKUROX0FDQ0VTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQUNDRVNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fTU9ESUZZCi0gICAgaWYgKGlucyhkLCAiRE5fTU9ESUZZIiwgKGxvbmcpRE5fTU9ESUZZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9NT0RJRlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9DUkVBVEUKLSAgICBpZiAoaW5zKGQsICJETl9DUkVBVEUiLCAobG9uZylETl9DUkVBVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0NSRUFURSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0RFTEVURQotICAgIGlmIChpbnMoZCwgIkROX0RFTEVURSIsIChsb25nKUROX0RFTEVURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fUkVOQU1FCi0gICAgaWYgKGlucyhkLCAiRE5fUkVOQU1FIiwgKGxvbmcpRE5fUkVOQU1FKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9SRU5BTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9BVFRSSUIKLSAgICBpZiAoaW5zKGQsICJETl9BVFRSSUIiLCAobG9uZylETl9BVFRSSUIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX0FUVFJJQikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX01VTFRJU0hPVAotICAgIGlmIChpbnMoZCwgIkROX01VTFRJU0hPVCIsIChsb25nKUROX01VTFRJU0hPVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fTVVMVElTSE9UKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NUUk9QVFNfSAogICAgIC8qIFVuaXggOTggZ3VhcmFudGVlcyB0aGF0IHRoZXNlIGFyZSBpbiBzdHJvcHRzLmguICovCi0gICAgSU5TKElfUFVTSCk7Ci0gICAgSU5TKElfUE9QKTsKLSAgICBJTlMoSV9MT09LKTsKLSAgICBJTlMoSV9GTFVTSCk7Ci0gICAgSU5TKElfRkxVU0hCQU5EKTsKLSAgICBJTlMoSV9TRVRTSUcpOwotICAgIElOUyhJX0dFVFNJRyk7Ci0gICAgSU5TKElfRklORCk7Ci0gICAgSU5TKElfUEVFSyk7Ci0gICAgSU5TKElfU1JET1BUKTsKLSAgICBJTlMoSV9HUkRPUFQpOwotICAgIElOUyhJX05SRUFEKTsKLSAgICBJTlMoSV9GRElOU0VSVCk7Ci0gICAgSU5TKElfU1RSKTsKLSAgICBJTlMoSV9TV1JPUFQpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BVU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUE9QKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0xPT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkxVU0gpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkxVU0hCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRklORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QRUVLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NSRE9QVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HUkRPUFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTlJFQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfRkRJTlNFUlQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1RSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NXUk9QVCkpIHJldHVybiAtMTsKICNpZmRlZiBJX0dXUk9QVAogICAgIC8qIGRlc3BpdGUgdGhlIGNvbW1lbnQgYWJvdmUsIG9sZC1pc2ggZ2xpYmNzIG1pc3MgYSBjb3VwbGUuLi4gKi8KLSAgICBJTlMoSV9HV1JPUFQpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dXUk9QVCkpIHJldHVybiAtMTsKICNlbmRpZgotICAgIElOUyhJX1NFTkRGRCk7Ci0gICAgSU5TKElfUkVDVkZEKTsKLSAgICBJTlMoSV9MSVNUKTsKLSAgICBJTlMoSV9BVE1BUkspOwotICAgIElOUyhJX0NLQkFORCk7Ci0gICAgSU5TKElfR0VUQkFORCk7Ci0gICAgSU5TKElfQ0FOUFVUKTsKLSAgICBJTlMoSV9TRVRDTFRJTUUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFTkRGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9SRUNWRkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTElTVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9BVE1BUkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQ0tCQU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVEJBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfQ0FOUFVUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1NFVENMVElNRSkpIHJldHVybiAtMTsKICNpZmRlZiBJX0dFVENMVElNRQotICAgIElOUyhJX0dFVENMVElNRSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUQ0xUSU1FKSkgcmV0dXJuIC0xOwogI2VuZGlmCi0gICAgSU5TKElfTElOSyk7Ci0gICAgSU5TKElfVU5MSU5LKTsKLSAgICBJTlMoSV9QTElOSyk7Ci0gICAgSU5TKElfUFVOTElOSyk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9VTkxJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUExJTkspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUFVOTElOSykpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgcmV0dXJuIDA7CkBAIC02MzUsNyArNjIwLDcgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfZmNudGwodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQ7CisgICAgUHlPYmplY3QgKm07CiAKICAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgYW5kIGRvY3VtZW50YXRpb24gKi8KICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZmY250bG1vZHVsZSk7CkBAIC02NDMsNyArNjI4LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwotICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIGFsbF9pbnMoZCk7CisgICAgaWYgKGFsbF9pbnMobSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nY21vZHVsZS5jIGIvTW9kdWxlcy9nY21vZHVsZS5jCmluZGV4IGY3ODJkZDAuLmE4NGQ3NTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL2djbW9kdWxlLmMKQEAgLTExOCw3ICsxMTgsNyBAQAogCiAvKgogICAgTk9URTogYWJvdXQgdW50cmFja2luZyBvZiBtdXRhYmxlIG9iamVjdHMuCi0gICAKKwogICAgQ2VydGFpbiB0eXBlcyBvZiBjb250YWluZXIgY2Fubm90IHBhcnRpY2lwYXRlIGluIGEgcmVmZXJlbmNlIGN5Y2xlLCBhbmQKICAgIHNvIGRvIG5vdCBuZWVkIHRvIGJlIHRyYWNrZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBVbnRyYWNraW5nIHRoZXNlCiAgICBvYmplY3RzIHJlZHVjZXMgdGhlIGNvc3Qgb2YgZ2FyYmFnZSBjb2xsZWN0aW9ucy4gSG93ZXZlciwgZGV0ZXJtaW5pbmcKQEAgLTEzNiwxMCArMTM2LDEwIEBACiAgICBub3Qgc3Vydml2ZSB1bnRpbCBnYXJiYWdlIGNvbGxlY3Rpb24uIEl0IGlzIHRoZXJlZm9yZSBub3Qgd29ydGh3aGlsZQogICAgdG8gdW50cmFjayBlbGlnaWJsZSB0dXBsZXMgYXQgY3JlYXRpb24gdGltZS4KIAotICAgSW5zdGVhZCwgYWxsIHR1cGxlcyBleGNlcHQgdGhlIGVtcHR5IHR1cGxlIGFyZSB0cmFja2VkIHdoZW4gY3JlYXRlZC4gCi0gICBEdXJpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGl0IGlzIGRldGVybWluZWQgd2hldGhlciBhbnkgc3Vydml2aW5nIHR1cGxlcyAKLSAgIGNhbiBiZSB1bnRyYWNrZWQuIEEgdHVwbGUgY2FuIGJlIHVudHJhY2tlZCBpZiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZSAKLSAgIGFscmVhZHkgbm90IHRyYWNrZWQuIFR1cGxlcyBhcmUgZXhhbWluZWQgZm9yIHVudHJhY2tpbmcgaW4gYWxsIGdhcmJhZ2UgCisgICBJbnN0ZWFkLCBhbGwgdHVwbGVzIGV4Y2VwdCB0aGUgZW1wdHkgdHVwbGUgYXJlIHRyYWNrZWQgd2hlbiBjcmVhdGVkLgorICAgRHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBpdCBpcyBkZXRlcm1pbmVkIHdoZXRoZXIgYW55IHN1cnZpdmluZyB0dXBsZXMKKyAgIGNhbiBiZSB1bnRyYWNrZWQuIEEgdHVwbGUgY2FuIGJlIHVudHJhY2tlZCBpZiBhbGwgb2YgaXRzIGNvbnRlbnRzIGFyZQorICAgYWxyZWFkeSBub3QgdHJhY2tlZC4gVHVwbGVzIGFyZSBleGFtaW5lZCBmb3IgdW50cmFja2luZyBpbiBhbGwgZ2FyYmFnZQogICAgY29sbGVjdGlvbiBjeWNsZXMuIEl0IG1heSB0YWtlIG1vcmUgdGhhbiBvbmUgY3ljbGUgdG8gdW50cmFjayBhIHR1cGxlLgogCiAgICBEaWN0aW9uYXJpZXMgY29udGFpbmluZyBvbmx5IGltbXV0YWJsZSBvYmplY3RzIGFsc28gZG8gbm90IG5lZWQgdG8gYmUKQEAgLTE1Miw4ICsxNTIsOCBAQAogICAgVGhlIG1vZHVsZSBwcm92aWRlcyB0aGUgcHl0aG9uIGZ1bmN0aW9uIGlzX3RyYWNrZWQob2JqKSwgd2hpY2ggcmV0dXJucwogICAgdGhlIENVUlJFTlQgdHJhY2tpbmcgc3RhdHVzIG9mIHRoZSBvYmplY3QuIFN1YnNlcXVlbnQgZ2FyYmFnZQogICAgY29sbGVjdGlvbnMgbWF5IGNoYW5nZSB0aGUgdHJhY2tpbmcgc3RhdHVzIG9mIHRoZSBvYmplY3QuCi0gICAKLSAgIFVudHJhY2tpbmcgb2YgY2VydGFpbiBjb250YWluZXJzIHdhcyBpbnRyb2R1Y2VkIGluIGlzc3VlICM0Njg4LCBhbmQgCisKKyAgIFVudHJhY2tpbmcgb2YgY2VydGFpbiBjb250YWluZXJzIHdhcyBpbnRyb2R1Y2VkIGluIGlzc3VlICM0Njg4LCBhbmQKICAgIHRoZSBhbGdvcml0aG0gd2FzIHJlZmluZWQgaW4gcmVzcG9uc2UgdG8gaXNzdWUgIzE0Nzc1LgogKi8KIApAQCAtMTY4LDYgKzE2OCwxOCBAQAogc3RhdGljIGludCBkZWJ1ZzsKIHN0YXRpYyBQeU9iamVjdCAqdG1vZCA9IE5VTEw7CiAKKy8qIFJ1bm5pbmcgc3RhdHMgcGVyIGdlbmVyYXRpb24gKi8KK3N0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHsKKyAgICAvKiB0b3RhbCBudW1iZXIgb2YgY29sbGVjdGlvbnMgKi8KKyAgICBQeV9zc2l6ZV90IGNvbGxlY3Rpb25zOworICAgIC8qIHRvdGFsIG51bWJlciBvZiBjb2xsZWN0ZWQgb2JqZWN0cyAqLworICAgIFB5X3NzaXplX3QgY29sbGVjdGVkOworICAgIC8qIHRvdGFsIG51bWJlciBvZiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgKHB1dCBpbnRvIGdjLmdhcmJhZ2UpICovCisgICAgUHlfc3NpemVfdCB1bmNvbGxlY3RhYmxlOworfTsKKworc3RhdGljIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIGdlbmVyYXRpb25fc3RhdHNbTlVNX0dFTkVSQVRJT05TXTsKKwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NfcmVmcyB2YWx1ZXMuCiAKQEAgLTIxMSwxMCArMjIzLDEwIEBACiAjZGVmaW5lIEdDX1JFQUNIQUJMRSAgICAgICAgICAgICAgICAgICAgX1B5R0NfUkVGU19SRUFDSEFCTEUKICNkZWZpbmUgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICBfUHlHQ19SRUZTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFCiAKLSNkZWZpbmUgSVNfVFJBQ0tFRChvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyAhPSBHQ19VTlRSQUNLRUQpCi0jZGVmaW5lIElTX1JFQUNIQUJMRShvKSAoKEFTX0dDKG8pKS0+Z2MuZ2NfcmVmcyA9PSBHQ19SRUFDSEFCTEUpCisjZGVmaW5lIElTX1RSQUNLRUQobykgKF9QeUdDX1JFRlMobykgIT0gR0NfVU5UUkFDS0VEKQorI2RlZmluZSBJU19SRUFDSEFCTEUobykgKF9QeUdDX1JFRlMobykgPT0gR0NfUkVBQ0hBQkxFKQogI2RlZmluZSBJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvKSAoIFwKLSAgICAoQVNfR0MobykpLT5nYy5nY19yZWZzID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKQorICAgIF9QeUdDX1JFRlMobykgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpCiAKIC8qKiogbGlzdCBmdW5jdGlvbnMgKioqLwogCkBAIC0zMjksOCArMzQxLDggQEAKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gY29udGFpbmVycy0+Z2MuZ2NfbmV4dDsKICAgICBmb3IgKDsgZ2MgIT0gY29udGFpbmVyczsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgewotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgPT0gR0NfUkVBQ0hBQkxFKTsKLSAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBQeV9SRUZDTlQoRlJPTV9HQyhnYykpOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID09IEdDX1JFQUNIQUJMRSk7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CiAgICAgICAgIC8qIFB5dGhvbidzIGN5Y2xpYyBnYyBzaG91bGQgbmV2ZXIgc2VlIGFuIGluY29taW5nIHJlZmNvdW50CiAgICAgICAgICAqIG9mIDA6ICBpZiBzb21ldGhpbmcgZGVjcmVmJ2VkIHRvIDAsIGl0IHNob3VsZCBoYXZlIGJlZW4KICAgICAgICAgICogZGVhbGxvY2F0ZWQgaW1tZWRpYXRlbHkgYXQgdGhhdCB0aW1lLgpAQCAtMzQ5LDcgKzM2MSw3IEBACiAgICAgICAgICAqIHNvIHNlcmlvdXMgdGhhdCBtYXliZSB0aGlzIHNob3VsZCBiZSBhIHJlbGVhc2UtYnVpbGQKICAgICAgICAgICogY2hlY2sgaW5zdGVhZCBvZiBhbiBhc3NlcnQ/CiAgICAgICAgICAqLwotICAgICAgICBhc3NlcnQoZ2MtPmdjLmdjX3JlZnMgIT0gMCk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CiAgICAgfQogfQogCkBAIC0zNjQsOSArMzc2LDkgQEAKICAgICAgICAgICogZ2VuZXJhdGlvbiBiZWluZyBjb2xsZWN0ZWQsIHdoaWNoIGNhbiBiZSByZWNvZ25pemVkCiAgICAgICAgICAqIGJlY2F1c2Ugb25seSB0aGV5IGhhdmUgcG9zaXRpdmUgZ2NfcmVmcy4KICAgICAgICAgICovCi0gICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyAhPSAwKTsgLyogZWxzZSByZWZjb3VudCB3YXMgdG9vIHNtYWxsICovCi0gICAgICAgIGlmIChnYy0+Z2MuZ2NfcmVmcyA+IDApCi0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcy0tOworICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpICE9IDApOyAvKiBlbHNlIHJlZmNvdW50IHdhcyB0b28gc21hbGwgKi8KKyAgICAgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGdjKSA+IDApCisgICAgICAgICAgICBfUHlHQ0hlYWRfREVDUkVGKGdjKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zOTUsNyArNDA3LDcgQEAKIHsKICAgICBpZiAoUHlPYmplY3RfSVNfR0Mob3ApKSB7CiAgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBBU19HQyhvcCk7Ci0gICAgICAgIGNvbnN0IFB5X3NzaXplX3QgZ2NfcmVmcyA9IGdjLT5nYy5nY19yZWZzOworICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGdjX3JlZnMgPSBfUHlHQ0hlYWRfUkVGUyhnYyk7CiAKICAgICAgICAgaWYgKGdjX3JlZnMgPT0gMCkgewogICAgICAgICAgICAgLyogVGhpcyBpcyBpbiBtb3ZlX3VucmVhY2hhYmxlJ3MgJ3lvdW5nJyBsaXN0LCBidXQKQEAgLTQwMyw3ICs0MTUsNyBAQAogICAgICAgICAgICAgICogd2UgbmVlZCB0byBkbyBpcyB0ZWxsIG1vdmVfdW5yZWFjaGFibGUgdGhhdCBpdCdzCiAgICAgICAgICAgICAgKiByZWFjaGFibGUuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gMTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoZ2NfcmVmcyA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkgewogICAgICAgICAgICAgLyogVGhpcyBoYWQgZ2NfcmVmcyA9IDAgd2hlbiBtb3ZlX3VucmVhY2hhYmxlIGdvdApAQCAtNDEzLDcgKzQyNSw3IEBACiAgICAgICAgICAgICAgKiBhZ2Fpbi4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCByZWFjaGFibGUpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSAxOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCAxKTsKICAgICAgICAgfQogICAgICAgICAvKiBFbHNlIHRoZXJlJ3Mgbm90aGluZyB0byBkby4KICAgICAgICAgICogSWYgZ2NfcmVmcyA+IDAsIGl0IG11c3QgYmUgaW4gbW92ZV91bnJlYWNoYWJsZSdzICd5b3VuZycKQEAgLTQ1Nyw3ICs0NjksNyBAQAogICAgIHdoaWxlIChnYyAhPSB5b3VuZykgewogICAgICAgICBQeUdDX0hlYWQgKm5leHQ7CiAKLSAgICAgICAgaWYgKGdjLT5nYy5nY19yZWZzKSB7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykpIHsKICAgICAgICAgICAgIC8qIGdjIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGZyb20gb3V0c2lkZSB0aGUKICAgICAgICAgICAgICAqIG9yaWdpbmFsICd5b3VuZycuICBNYXJrIGl0IGFzIHN1Y2gsIGFuZCB0cmF2ZXJzZQogICAgICAgICAgICAgICogaXRzIHBvaW50ZXJzIHRvIGZpbmQgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtYXkKQEAgLTQ2OCw4ICs0ODAsOCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKICAgICAgICAgICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZSA9IFB5X1RZUEUob3ApLT50cF90cmF2ZXJzZTsKLSAgICAgICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyA+IDApOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZ2MpID4gMCk7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgICAgICAodm9pZCkgdHJhdmVyc2Uob3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpc2l0cHJvYyl2aXNpdF9yZWFjaGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKil5b3VuZyk7CkBAIC00ODgsNyArNTAwLDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgbmV4dCA9IGdjLT5nYy5nY19uZXh0OwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCB1bnJlYWNoYWJsZSk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICAgICAgZ2MgPSBuZXh0OwogICAgIH0KQEAgLTUwOCwyMiArNTIwLDE5IEBACiAgICAgfQogfQogCi0vKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaGFzIGEgZmluYWxpemF0aW9uIG1ldGhvZC4gKi8KKy8qIFJldHVybiB0cnVlIGlmIG9iamVjdCBoYXMgYSBwcmUtUEVQIDQ0MiBmaW5hbGl6YXRpb24gbWV0aG9kLiAqLwogc3RhdGljIGludAotaGFzX2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCitoYXNfbGVnYWN5X2ZpbmFsaXplcihQeU9iamVjdCAqb3ApCiB7Ci0gICAgaWYgKFB5R2VuX0NoZWNrRXhhY3Qob3ApKQotICAgICAgICByZXR1cm4gUHlHZW5fTmVlZHNGaW5hbGl6aW5nKChQeUdlbk9iamVjdCAqKW9wKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBvcC0+b2JfdHlwZS0+dHBfZGVsICE9IE5VTEw7CisgICAgcmV0dXJuIG9wLT5vYl90eXBlLT50cF9kZWwgIT0gTlVMTDsKIH0KIAotLyogTW92ZSB0aGUgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSB3aXRoIF9fZGVsX18gbWV0aG9kcyBpbnRvIGBmaW5hbGl6ZXJzYC4KKy8qIE1vdmUgdGhlIG9iamVjdHMgaW4gdW5yZWFjaGFibGUgd2l0aCB0cF9kZWwgc2xvdHMgaW50byBgZmluYWxpemVyc2AuCiAgKiBPYmplY3RzIG1vdmVkIGludG8gYGZpbmFsaXplcnNgIGhhdmUgZ2NfcmVmcyBzZXQgdG8gR0NfUkVBQ0hBQkxFOyB0aGUKICAqIG9iamVjdHMgcmVtYWluaW5nIGluIHVucmVhY2hhYmxlIGFyZSBsZWZ0IGF0IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFLgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqdW5yZWFjaGFibGUsIFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICp1bnJlYWNoYWJsZSwgUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgUHlHQ19IZWFkICpuZXh0OwpAQCAtNTM3LDE0ICs1NDYsMTQgQEAKICAgICAgICAgYXNzZXJ0KElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSk7CiAgICAgICAgIG5leHQgPSBnYy0+Z2MuZ2NfbmV4dDsKIAotICAgICAgICBpZiAoaGFzX2ZpbmFsaXplcihvcCkpIHsKKyAgICAgICAgaWYgKGhhc19sZWdhY3lfZmluYWxpemVyKG9wKSkgewogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCBmaW5hbGl6ZXJzKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogfQogCi0vKiBBIHRyYXZlcnNhbCBjYWxsYmFjayBmb3IgbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlLiAqLworLyogQSB0cmF2ZXJzYWwgY2FsbGJhY2sgZm9yIG1vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUuICovCiBzdGF0aWMgaW50CiB2aXNpdF9tb3ZlKFB5T2JqZWN0ICpvcCwgUHlHQ19IZWFkICp0b2xpc3QpCiB7CkBAIC01NTIsNyArNTYxLDcgQEAKICAgICAgICAgaWYgKElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG9wKSkgewogICAgICAgICAgICAgUHlHQ19IZWFkICpnYyA9IEFTX0dDKG9wKTsKICAgICAgICAgICAgIGdjX2xpc3RfbW92ZShnYywgdG9saXN0KTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfUkVBQ0hBQkxFOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtNTYyLDcgKzU3MSw3IEBACiAgKiBpbnRvIGZpbmFsaXplcnMgc2V0LgogICovCiBzdGF0aWMgdm9pZAotbW92ZV9maW5hbGl6ZXJfcmVhY2hhYmxlKFB5R0NfSGVhZCAqZmluYWxpemVycykKK21vdmVfbGVnYWN5X2ZpbmFsaXplcl9yZWFjaGFibGUoUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQogewogICAgIHRyYXZlcnNlcHJvYyB0cmF2ZXJzZTsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKQEAgLTczNSw3ICs3NDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICBtc2csIFB5X1RZUEUob3ApLT50cF9uYW1lLCBvcCk7CiB9CiAKLS8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIGZpbmFsaXplcnMsIGFuZCBzdHVmZiByZWFjaGFibGUKKy8qIEhhbmRsZSB1bmNvbGxlY3RhYmxlIGdhcmJhZ2UgKGN5Y2xlcyB3aXRoIHRwX2RlbCBzbG90cywgYW5kIHN0dWZmIHJlYWNoYWJsZQogICogb25seSBmcm9tIHN1Y2ggY3ljbGVzKS4KICAqIElmIERFQlVHX1NBVkVBTEwsIGFsbCBvYmplY3RzIGluIGZpbmFsaXplcnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBtb2R1bGUKICAqIGdhcmJhZ2UgbGlzdCAoYSBQeXRob24gbGlzdCksIGVsc2Ugb25seSB0aGUgb2JqZWN0cyBpbiBmaW5hbGl6ZXJzIHdpdGgKQEAgLTc0NSw3ICs3NTQsNyBAQAogICogVGhlIGZpbmFsaXplcnMgbGlzdCBpcyBtYWRlIGVtcHR5IG9uIGEgc3VjY2Vzc2Z1bCByZXR1cm4uCiAgKi8KIHN0YXRpYyBpbnQKLWhhbmRsZV9maW5hbGl6ZXJzKFB5R0NfSGVhZCAqZmluYWxpemVycywgUHlHQ19IZWFkICpvbGQpCitoYW5kbGVfbGVnYWN5X2ZpbmFsaXplcnMoUHlHQ19IZWFkICpmaW5hbGl6ZXJzLCBQeUdDX0hlYWQgKm9sZCkKIHsKICAgICBQeUdDX0hlYWQgKmdjID0gZmluYWxpemVycy0+Z2MuZ2NfbmV4dDsKIApAQCAtNzU3LDcgKzc2Niw3IEBACiAgICAgZm9yICg7IGdjICE9IGZpbmFsaXplcnM7IGdjID0gZ2MtPmdjLmdjX25leHQpIHsKICAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CiAKLSAgICAgICAgaWYgKChkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpIHx8IGhhc19maW5hbGl6ZXIob3ApKSB7CisgICAgICAgIGlmICgoZGVidWcgJiBERUJVR19TQVZFQUxMKSB8fCBoYXNfbGVnYWN5X2ZpbmFsaXplcihvcCkpIHsKICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC03NjcsNiArNzc2LDYyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitmaW5hbGl6ZV9nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUsIFB5R0NfSGVhZCAqb2xkKQoreworICAgIGRlc3RydWN0b3IgZmluYWxpemU7CisgICAgUHlHQ19IZWFkICpnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OworCisgICAgZm9yICg7IGdjICE9IGNvbGxlY3RhYmxlOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOworCisgICAgICAgIGlmICghX1B5R0NIZWFkX0ZJTkFMSVpFRChnYykgJiYKKyAgICAgICAgICAgIFB5VHlwZV9IYXNGZWF0dXJlKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAoZmluYWxpemUgPSBQeV9UWVBFKG9wKS0+dHBfZmluYWxpemUpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfRklOQUxJWkVEKGdjLCAxKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihvcCk7CisgICAgICAgICAgICBmaW5hbGl6ZShvcCk7CisgICAgICAgICAgICBpZiAoUHlfUkVGQ05UKG9wKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgLyogb3Agd2lsbCBiZSBkZXN0cm95ZWQgKi8KKyAgICAgICAgICAgICAgICBnYyA9IGdjLT5nYy5nY19wcmV2OworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyogV2FsayB0aGUgY29sbGVjdGFibGUgbGlzdCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSByZWFsbHkgdW5yZWFjaGFibGUKKyAgIGZyb20gdGhlIG91dHNpZGUgKHNvbWUgb2JqZWN0cyBjb3VsZCBoYXZlIGJlZW4gcmVzdXJyZWN0ZWQgYnkgYQorICAgZmluYWxpemVyKS4gKi8KK3N0YXRpYyBpbnQKK2NoZWNrX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CisgICAgfQorICAgIHN1YnRyYWN0X3JlZnMoY29sbGVjdGFibGUpOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgPj0gMCk7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZXZpdmVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlKQoreworICAgIFB5R0NfSGVhZCAqZ2M7CisgICAgZm9yIChnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OyBnYyAhPSBjb2xsZWN0YWJsZTsKKyAgICAgICAgIGdjID0gZ2MtPmdjLmdjX25leHQpIHsKKyAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOworICAgIH0KK30KKwogLyogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSBjbGVhcmluZyB0aGUgY29udGFpbmVycyBpbnZvbHZlZC4gIFRoaXMgaXMKICAqIHRyaWNreSBidXNpbmVzcyBhcyB0aGUgbGlzdHMgY2FuIGJlIGNoYW5naW5nIGFuZCB3ZSBkb24ndCBrbm93IHdoaWNoCiAgKiBvYmplY3RzIG1heSBiZSBmcmVlZC4gIEl0IGlzIHBvc3NpYmxlIEkgc2NyZXdlZCBzb21ldGhpbmcgdXAgaGVyZS4KQEAgLTc4MCw3ICs4NDUsNiBAQAogICAgICAgICBQeUdDX0hlYWQgKmdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19TQVZFQUxMKSB7CiAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsKICAgICAgICAgfQpAQCAtNzk0LDcgKzg1OCw3IEBACiAgICAgICAgIGlmIChjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dCA9PSBnYykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIHN0aWxsIGFsaXZlLCBtb3ZlIGl0LCBpdCBtYXkgZGllIGxhdGVyICovCiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIG9sZCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTg0MSw3ICs5MDUsOCBAQAogLyogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbi4gIFJlYWQgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUKICAqIGNvbGxlY3Rpb24gcHJvY2VzcyB3b3Jrcy4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1jb2xsZWN0KGludCBnZW5lcmF0aW9uLCBQeV9zc2l6ZV90ICpuX2NvbGxlY3RlZCwgUHlfc3NpemVfdCAqbl91bmNvbGxlY3RhYmxlKQorY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSwKKyAgICAgICAgaW50IG5vZmFpbCkKIHsKICAgICBpbnQgaTsKICAgICBQeV9zc2l6ZV90IG0gPSAwOyAvKiAjIG9iamVjdHMgY29sbGVjdGVkICovCkBAIC04NTIsNiArOTE3LDcgQEAKICAgICBQeUdDX0hlYWQgZmluYWxpemVyczsgIC8qIG9iamVjdHMgd2l0aCwgJiByZWFjaGFibGUgZnJvbSwgX19kZWxfXyAqLwogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgZG91YmxlIHQxID0gMC4wOworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzICpzdGF0cyA9ICZnZW5lcmF0aW9uX3N0YXRzW2dlbmVyYXRpb25dOwogCiAgICAgaWYgKGRlYnVnICYgREVCVUdfU1RBVFMpIHsKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoImdjOiBjb2xsZWN0aW5nIGdlbmVyYXRpb24gJWQuLi5cbiIsCkBAIC05MTUsMTkgKzk4MSwxNSBAQAogICAgIH0KIAogICAgIC8qIEFsbCBvYmplY3RzIGluIHVucmVhY2hhYmxlIGFyZSB0cmFzaCwgYnV0IG9iamVjdHMgcmVhY2hhYmxlIGZyb20KLSAgICAgKiBmaW5hbGl6ZXJzIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLiAgUHl0aG9uIHByb2dyYW1tZXJzIHNob3VsZCB0YWtlCi0gICAgICogY2FyZSBub3QgdG8gY3JlYXRlIHN1Y2ggdGhpbmdzLiAgRm9yIFB5dGhvbiwgZmluYWxpemVycyBtZWFucwotICAgICAqIGluc3RhbmNlIG9iamVjdHMgd2l0aCBfX2RlbF9fIG1ldGhvZHMuICBXZWFrcmVmcyB3aXRoIGNhbGxiYWNrcwotICAgICAqIGNhbiBhbHNvIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGJ1dCB0aGV5IHdpbGwgYmUgZGVhbHQgd2l0aCBieQotICAgICAqIGhhbmRsZV93ZWFrcmVmcygpLgorICAgICAqIGxlZ2FjeSBmaW5hbGl6ZXJzIChlLmcuIHRwX2RlbCkgY2FuJ3Qgc2FmZWx5IGJlIGRlbGV0ZWQuCiAgICAgICovCiAgICAgZ2NfbGlzdF9pbml0KCZmaW5hbGl6ZXJzKTsKLSAgICBtb3ZlX2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7Ci0gICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgZmluYWxpemVyOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7CisgICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgbGVnYWN5IGZpbmFsaXplcjsKICAgICAgKiB1bnJlYWNoYWJsZSBvYmplY3RzIHJlYWNoYWJsZSAqZnJvbSogdGhvc2UgYXJlIGFsc28gdW5jb2xsZWN0YWJsZSwKICAgICAgKiBhbmQgd2UgbW92ZSB0aG9zZSBpbnRvIHRoZSBmaW5hbGl6ZXJzIGxpc3QgdG9vLgogICAgICAqLwotICAgIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CisgICAgbW92ZV9sZWdhY3lfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CiAKICAgICAvKiBDb2xsZWN0IHN0YXRpc3RpY3Mgb24gY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCkBAIC05NDMsMTEgKzEwMDUsMjAgQEAKICAgICAvKiBDbGVhciB3ZWFrcmVmcyBhbmQgaW52b2tlIGNhbGxiYWNrcyBhcyBuZWNlc3NhcnkuICovCiAgICAgbSArPSBoYW5kbGVfd2Vha3JlZnMoJnVucmVhY2hhYmxlLCBvbGQpOwogCi0gICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKLSAgICAgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uICBJdCBtYXkgYWxzbyBjYXVzZSBzb21lIG9iamVjdHMKLSAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgotICAgICAqLwotICAgIGRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICAvKiBDYWxsIHRwX2ZpbmFsaXplIG9uIG9iamVjdHMgd2hpY2ggaGF2ZSBvbmUuICovCisgICAgZmluYWxpemVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisKKyAgICBpZiAoY2hlY2tfZ2FyYmFnZSgmdW5yZWFjaGFibGUpKSB7CisgICAgICAgIHJldml2ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSk7CisgICAgICAgIGdjX2xpc3RfbWVyZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKKyAgICAgICAgICogdGhlIHJlZmVyZW5jZSBjeWNsZXMgdG8gYmUgYnJva2VuLiAgSXQgbWF5IGFsc28gY2F1c2Ugc29tZSBvYmplY3RzCisgICAgICAgICAqIGluIGZpbmFsaXplcnMgdG8gYmUgZnJlZWQuCisgICAgICAgICAqLworICAgICAgICBkZWxldGVfZ2FyYmFnZSgmdW5yZWFjaGFibGUsIG9sZCk7CisgICAgfQogCiAgICAgLyogQ29sbGVjdCBzdGF0aXN0aWNzIG9uIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uICovCkBAIC05NzgsNyArMTA0OSw3IEBACiAgICAgICogcmVhY2hhYmxlIGxpc3Qgb2YgZ2FyYmFnZS4gIFRoZSBwcm9ncmFtbWVyIGhhcyB0byBkZWFsIHdpdGgKICAgICAgKiB0aGlzIGlmIHRoZXkgaW5zaXN0IG9uIGNyZWF0aW5nIHRoaXMgdHlwZSBvZiBzdHJ1Y3R1cmUuCiAgICAgICovCi0gICAgKHZvaWQpaGFuZGxlX2ZpbmFsaXplcnMoJmZpbmFsaXplcnMsIG9sZCk7CisgICAgKHZvaWQpaGFuZGxlX2xlZ2FjeV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOwogCiAgICAgLyogQ2xlYXIgZnJlZSBsaXN0IG9ubHkgZHVyaW5nIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBoaWdoZXN0CiAgICAgICogZ2VuZXJhdGlvbiAqLwpAQCAtOTg3LDE2ICsxMDU4LDI1IEBACiAgICAgfQogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ2Nfc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImdhcmJhZ2UgY29sbGVjdGlvbiIpOwotICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKLSAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICBpZiAobm9mYWlsKSB7CisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGdjX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnY19zdHIpOworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigidW5leHBlY3RlZCBleGNlcHRpb24gZHVyaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiIpOworICAgICAgICB9CiAgICAgfQogCisgICAgLyogVXBkYXRlIHN0YXRzICovCiAgICAgaWYgKG5fY29sbGVjdGVkKQogICAgICAgICAqbl9jb2xsZWN0ZWQgPSBtOwogICAgIGlmIChuX3VuY29sbGVjdGFibGUpCiAgICAgICAgICpuX3VuY29sbGVjdGFibGUgPSBuOworICAgIHN0YXRzLT5jb2xsZWN0aW9ucysrOworICAgIHN0YXRzLT5jb2xsZWN0ZWQgKz0gbTsKKyAgICBzdGF0cy0+dW5jb2xsZWN0YWJsZSArPSBuOwogICAgIHJldHVybiBuK207CiB9CiAKQEAgLTEwNDUsNyArMTEyNSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQsIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZTsKICAgICBpbnZva2VfZ2NfY2FsbGJhY2soInN0YXJ0IiwgZ2VuZXJhdGlvbiwgMCwgMCk7Ci0gICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSk7CisgICAgcmVzdWx0ID0gY29sbGVjdChnZW5lcmF0aW9uLCAmY29sbGVjdGVkLCAmdW5jb2xsZWN0YWJsZSwgMCk7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdG9wIiwgZ2VuZXJhdGlvbiwgY29sbGVjdGVkLCB1bmNvbGxlY3RhYmxlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTM0Myw2ICsxNDIzLDUyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGdjX2dldF9zdGF0c19fZG9jX18sCisiZ2V0X3N0YXRzKCkgLT4gWy4uLl1cbiIKKyJcbiIKKyJSZXR1cm4gYSBsaXN0IG9mIGRpY3Rpb25hcmllcyBjb250YWluaW5nIHBlci1nZW5lcmF0aW9uIHN0YXRpc3RpY3MuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2djX2dldF9zdGF0cyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzIHN0YXRzW05VTV9HRU5FUkFUSU9OU10sICpzdDsKKworICAgIC8qIFRvIGdldCBjb25zaXN0ZW50IHZhbHVlcyBkZXNwaXRlIGFsbG9jYXRpb25zIHdoaWxlIGNvbnN0cnVjdGluZworICAgICAgIHRoZSByZXN1bHQgbGlzdCwgd2UgdXNlIGEgc25hcHNob3Qgb2YgdGhlIHJ1bm5pbmcgc3RhdHMuICovCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIHN0YXRzW2ldID0gZ2VuZXJhdGlvbl9zdGF0c1tpXTsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0dFTkVSQVRJT05TOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKmRpY3Q7CisgICAgICAgIHN0ID0gJnN0YXRzW2ldOworICAgICAgICBkaWN0ID0gUHlfQnVpbGRWYWx1ZSgie3Nuc25zbn0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGlvbnMiLCBzdC0+Y29sbGVjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb2xsZWN0ZWQiLCBzdC0+Y29sbGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5jb2xsZWN0YWJsZSIsIHN0LT51bmNvbGxlY3RhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgZGljdCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogUHlEb2NfU1RSVkFSKGdjX2lzX3RyYWNrZWRfX2RvY19fLAogImlzX3RyYWNrZWQob2JqKSAtPiBib29sXG4iCiAiXG4iCkBAIC0xMzkzLDYgKzE1MTksNyBAQAogICAgIHsiY29sbGVjdCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWdjX2NvbGxlY3QsCiAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgICAgICBnY19jb2xsZWN0X19kb2NfX30sCiAgICAgeyJnZXRfb2JqZWN0cyIsICAgIGdjX2dldF9vYmplY3RzLE1FVEhfTk9BUkdTLCAgZ2NfZ2V0X29iamVjdHNfX2RvY19ffSwKKyAgICB7ImdldF9zdGF0cyIsICAgICAgZ2NfZ2V0X3N0YXRzLCBNRVRIX05PQVJHUywgZ2NfZ2V0X3N0YXRzX19kb2NfX30sCiAgICAgeyJpc190cmFja2VkIiwgICAgIGdjX2lzX3RyYWNrZWQsIE1FVEhfTywgICAgICAgZ2NfaXNfdHJhY2tlZF9fZG9jX199LAogICAgIHsiZ2V0X3JlZmVycmVycyIsICBnY19nZXRfcmVmZXJyZXJzLCBNRVRIX1ZBUkFSR1MsCiAgICAgICAgIGdjX2dldF9yZWZlcnJlcnNfX2RvY19ffSwKQEAgLTE0ODAsOCArMTYwNywyOSBAQAogICAgIHJldHVybiBuOwogfQogCitQeV9zc2l6ZV90CitfUHlHQ19Db2xsZWN0Tm9GYWlsKHZvaWQpCit7CisgICAgUHlfc3NpemVfdCBuOworCisgICAgLyogSWRlYWxseSwgdGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBvbiBpbnRlcnByZXRlciBzaHV0ZG93biwKKyAgICAgICBhbmQgdGhlcmVmb3JlIG5vdCByZWN1cnNpdmVseS4gIFVuZm9ydHVuYXRlbHksIHdoZW4gdGhlcmUgYXJlIGRhZW1vbgorICAgICAgIHRocmVhZHMsIGEgZGFlbW9uIHRocmVhZCBjYW4gc3RhcnQgYSBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgZHVyaW5nIGludGVycHJldGVyIHNodXRkb3duIChhbmQgdGhlbiBuZXZlciBmaW5pc2ggaXQpLgorICAgICAgIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODcxMyNtc2cxOTUxNzggZm9yIGFuIGV4YW1wbGUuCisgICAgICAgKi8KKyAgICBpZiAoY29sbGVjdGluZykKKyAgICAgICAgbiA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIGNvbGxlY3RpbmcgPSAxOworICAgICAgICBuID0gY29sbGVjdChOVU1fR0VORVJBVElPTlMgLSAxLCBOVUxMLCBOVUxMLCAxKTsKKyAgICAgICAgY29sbGVjdGluZyA9IDA7CisgICAgfQorICAgIHJldHVybiBuOworfQorCiB2b2lkCi1fUHlHQ19GaW5pKHZvaWQpCitfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKQogewogICAgIGlmICghKGRlYnVnICYgREVCVUdfU0FWRUFMTCkKICAgICAgICAgJiYgZ2FyYmFnZSAhPSBOVUxMICYmIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSA+IDApIHsKQEAgLTE0OTIsOCArMTY0MCwxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtZXNzYWdlID0gImdjOiAlemQgdW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0ICIgXAogICAgICAgICAgICAgICAgICJzaHV0ZG93bjsgdXNlIGdjLnNldF9kZWJ1ZyhnYy5ERUJVR19VTkNPTExFQ1RBQkxFKSB0byBsaXN0IHRoZW0iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsIDAsIG1lc3NhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkgPCAwKQorICAgICAgICAvKiBQeUVycl9XYXJuRm9ybWF0IGRvZXMgdG9vIG1hbnkgdGhpbmdzIGFuZCB3ZSBhcmUgYXQgc2h1dGRvd24sCisgICAgICAgICAgIHRoZSB3YXJuaW5ncyBtb2R1bGUncyBkZXBlbmRlbmNpZXMgKGUuZy4gbGluZWNhY2hlKSBtYXkgYmUgZ29uZQorICAgICAgICAgICBhbHJlYWR5LiAqLworICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgImdjIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2MiLCBOVUxMLCBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRShnYXJiYWdlKSkpCiAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CiAgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1VOQ09MTEVDVEFCTEUpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTCwgKmJ5dGVzID0gTlVMTDsKQEAgLTE1MDIsNyArMTY1NCw3IEBACiAgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdhcmJhZ2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICIgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICIgICAgICAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpCiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICB9CkBAIC0xNTEwLDcgKzE2NjIsMTMgQEAKICAgICAgICAgICAgIFB5X1hERUNSRUYoYnl0ZXMpOwogICAgICAgICB9CiAgICAgfQorfQorCit2b2lkCitfUHlHQ19GaW5pKHZvaWQpCit7CiAgICAgUHlfQ0xFQVIoY2FsbGJhY2tzKTsKKyAgICBQeV9DTEVBUih0bW9kKTsKIH0KIAogLyogZm9yIGRlYnVnZ2luZyAqLwpAQCAtMTU2OSw3ICsxNzI3LDggQEAKICAgICAgICAgc2l6ZW9mKFB5R0NfSGVhZCkgKyBiYXNpY3NpemUpOwogICAgIGlmIChnID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGctPmdjLmdjX3JlZnMgPSBHQ19VTlRSQUNLRUQ7CisgICAgZy0+Z2MuZ2NfcmVmcyA9IDA7CisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIEdDX1VOVFJBQ0tFRCk7CiAgICAgZ2VuZXJhdGlvbnNbMF0uY291bnQrKzsgLyogbnVtYmVyIG9mIGFsbG9jYXRlZCBHQyBvYmplY3RzICovCiAgICAgaWYgKGdlbmVyYXRpb25zWzBdLmNvdW50ID4gZ2VuZXJhdGlvbnNbMF0udGhyZXNob2xkICYmCiAgICAgICAgIGVuYWJsZWQgJiYKQEAgLTE1OTYsOCArMTc1NSwxNSBAQAogUHlWYXJPYmplY3QgKgogX1B5T2JqZWN0X0dDX05ld1ZhcihQeVR5cGVPYmplY3QgKnRwLCBQeV9zc2l6ZV90IG5pdGVtcykKIHsKLSAgICBjb25zdCBzaXplX3Qgc2l6ZSA9IF9QeU9iamVjdF9WQVJfU0laRSh0cCwgbml0ZW1zKTsKLSAgICBQeVZhck9iamVjdCAqb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeVZhck9iamVjdCAqb3A7CisKKyAgICBpZiAobml0ZW1zIDwgMCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7CisgICAgb3AgPSAoUHlWYXJPYmplY3QgKikgX1B5T2JqZWN0X0dDX01hbGxvYyhzaXplKTsKICAgICBpZiAob3AgIT0gTlVMTCkKICAgICAgICAgb3AgPSBQeU9iamVjdF9JTklUX1ZBUihvcCwgdHAsIG5pdGVtcyk7CiAgICAgcmV0dXJuIG9wOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9nZXRwYXRoLmMgYi9Nb2R1bGVzL2dldHBhdGguYwppbmRleCBmZjE0ZmRkLi45ZTc5YzI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dldHBhdGguYworKysgYi9Nb2R1bGVzL2dldHBhdGguYwpAQCAtMTM0LDggKzEzNCw2IEBACiBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwogc3RhdGljIHdjaGFyX3QgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotc3RhdGljIGludCBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAwOwotc3RhdGljIHdjaGFyX3QgKmxpYl9weXRob24gPSBMImxpYi9weXRob24iIFZFUlNJT047CiAKIHN0YXRpYyB2b2lkCiByZWR1Y2Uod2NoYXJfdCAqZGlyKQpAQCAtMzE3LDcgKzMxNSw4IEBACiAgICBieXRlcyBsb25nLgogKi8KIHN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsIHdjaGFyX3QgKl9wcmVmaXgpCitzZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfcHJlZml4LAorICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKICAgICB3Y2hhcl90ICp2cGF0aDsKQEAgLTM0Niw3ICszNDUsNyBAQAogICAgICAgICAgICAgd2NzbmNweShwcmVmaXgsIGFyZ3YwX3BhdGgsIE1BWFBBVEhMRU4pOwogICAgICAgICAgICAgcHJlZml4W01BWFBBVEhMRU5dID0gTCdcMCc7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIHZwYXRoKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUodnBhdGgpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh2cGF0aCk7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIEwiTGliIik7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIExBTkRNQVJLKTsKICAgICAgICAgICAgIGlmIChpc21vZHVsZShwcmVmaXgpKQpAQCAtMzgzLDcgKzM4Miw4IEBACiAgICBNQVhQQVRITEVOIGJ5dGVzIGxvbmcuCiAqLwogc3RhdGljIGludAotc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfZXhlY19wcmVmaXgpCitzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKl9leGVjX3ByZWZpeCwgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKIApAQCAtNDkzLDEyICs0OTMsMTQgQEAKICAgICBjaGFyIGV4ZWNwYXRoW01BWFBBVEhMRU4rMV07CiAjZW5kaWYKICAgICB3Y2hhcl90ICpfcHl0aG9ucGF0aCwgKl9wcmVmaXgsICpfZXhlY19wcmVmaXg7CisgICAgd2NoYXJfdCAqbGliX3B5dGhvbjsKIAogICAgIF9weXRob25wYXRoID0gX1B5X2NoYXIyd2NoYXIoUFlUSE9OUEFUSCwgTlVMTCk7CiAgICAgX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKFBSRUZJWCwgTlVMTCk7CiAgICAgX2V4ZWNfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoRVhFQ19QUkVGSVgsIE5VTEwpOworICAgIGxpYl9weXRob24gPSBfUHlfY2hhcjJ3Y2hhcigibGliL3B5dGhvbiIgVkVSU0lPTiwgTlVMTCk7CiAKLSAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXgpIHsKKyAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXggfHwgIWxpYl9weXRob24pIHsKICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJVbmFibGUgdG8gZGVjb2RlIHBhdGggdmFyaWFibGVzIGluIGdldHBhdGguYzogIgogICAgICAgICAgICAgIm1lbW9yeSBlcnJvciIpOwpAQCAtNTYyLDggKzU2NCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgIGlmIChwYXRoX2J1ZmZlciAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHBhdGhfYnVmZmVyKTsKKyAgICBQeU1lbV9SYXdGcmVlKHBhdGhfYnVmZmVyKTsKICAgICBpZiAocHJvZ3BhdGhbMF0gIT0gU0VQICYmIHByb2dwYXRoWzBdICE9ICdcMCcpCiAgICAgICAgIGFic29sdXRpemUocHJvZ3BhdGgpOwogICAgIHdjc25jcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwpAQCAtNjA1LDcgKzYwNiw3IEBACiAgICAgICAgICAgICAvKiBVc2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGFzIHRoZSBwcm9ncGF0aCAqLwogICAgICAgICAgICAgd2NzbmNweShhcmd2MF9wYXRoLCB3YnVmLCBNQVhQQVRITEVOKTsKICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHdidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIH0KICNlbmRpZgogCkBAIC02NjcsNyArNjY4LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghKHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgpKSkgeworICAgIHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgsIGxpYl9weXRob24pOworICAgIGlmICghcGZvdW5kKSB7CiAgICAgICAgIGlmICghUHlfRnJvemVuRmxhZykKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBsaWJyYXJpZXMgPHByZWZpeD5cbiIpOwpAQCAtNjkwLDcgKzY5Miw5IEBACiAgICAgemlwX3BhdGhbYnVmc3ogLSA2XSA9IFZFUlNJT05bMF07CiAgICAgemlwX3BhdGhbYnVmc3ogLSA1XSA9IFZFUlNJT05bMl07CiAKLSAgICBpZiAoIShlZm91bmQgPSBzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9leGVjX3ByZWZpeCkpKSB7CisgICAgZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V4ZWNfcHJlZml4LCBsaWJfcHl0aG9uKTsKKyAgICBpZiAoIWVmb3VuZCkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gZGVwZW5kZW50IGxpYnJhcmllcyA8ZXhlY19wcmVmaXg+XG4iKTsKQEAgLTcwNywxMyArNzExLDExIEBACiAgICAgICovCiAgICAgYnVmc3ogPSAwOwogCi0gICAgaWYgKF9ydHB5cGF0aCkgeworICAgIGlmIChfcnRweXBhdGggJiYgX3J0cHlwYXRoWzBdICE9ICdcMCcpIHsKICAgICAgICAgc2l6ZV90IHJ0cHlwYXRoX2xlbjsKICAgICAgICAgcnRweXBhdGggPSBfUHlfY2hhcjJ3Y2hhcihfcnRweXBhdGgsICZydHB5cGF0aF9sZW4pOwogICAgICAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKICAgICAgICAgICAgIGJ1ZnN6ICs9IHJ0cHlwYXRoX2xlbiArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9ydHB5cGF0aCA9IE5VTEw7CiAgICAgfQogCiAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwpAQCAtNzM3LDYwICs3MzksNTUgQEAKICAgICBidWZzeiArPSB3Y3NsZW4oemlwX3BhdGgpICsgMTsKICAgICBidWZzeiArPSB3Y3NsZW4oZXhlY19wcmVmaXgpICsgMTsKIAotICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7Ci0KKyAgICBidWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhidWZzeiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIC8qIFdlIGNhbid0IGV4aXQsIHNvIHByaW50IGEgd2FybmluZyBhbmQgbGltcCBhbG9uZyAqLwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IEwiIiBQWVRIT05QQVRIOworICAgICAgICBQeV9GYXRhbEVycm9yKAorICAgICAgICAgICAgIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBkeW5hbWljIFBZVEhPTlBBVEgiKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KLSAgICAgICAgaWYgKHJ0cHlwYXRoKSB7Ci0gICAgICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7Ci0gICAgICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1ZlswXSA9ICdcMCc7CiAKLSAgICAgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLwotICAgICAgICB3Y3NjYXQoYnVmLCB6aXBfcGF0aCk7CisgICAgLyogUnVuLXRpbWUgdmFsdWUgb2YgJFBZVEhPTlBBVEggZ29lcyBmaXJzdCAqLworICAgIGlmIChydHB5cGF0aCkgeworICAgICAgICB3Y3NjcHkoYnVmLCBydHB5cGF0aCk7CiAgICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCi0gICAgICAgICAqIGR5bmFtaWNhbGx5IGxvY2F0ZWQgcHJlZml4LgotICAgICAgICAgKi8KLSAgICAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChkZWxpbSkgewotICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOwotICAgICAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKLSAgICAgICAgICAgICAgICB3Y3NuY2F0KGJ1ZiwgZGVmcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7Ci0KLSAgICAgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLwotICAgICAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7Ci0KLSAgICAgICAgLyogQW5kIHB1Ymxpc2ggdGhlIHJlc3VsdHMgKi8KLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOwogICAgIH0KKyAgICBlbHNlCisgICAgICAgIGJ1ZlswXSA9ICdcMCc7CisKKyAgICAvKiBOZXh0IGlzIHRoZSBkZWZhdWx0IHppcCBwYXRoICovCisgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIHdjc2NhdChidWYsIGRlbGltaXRlcik7CisKKyAgICAvKiBOZXh0IGdvZXMgbWVyZ2Ugb2YgY29tcGlsZS10aW1lICRQWVRIT05QQVRIIHdpdGgKKyAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KKyAgICAgKi8KKyAgICBkZWZwYXRoID0gX3B5dGhvbnBhdGg7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOworCisgICAgICAgIGlmIChkZWZwYXRoWzBdICE9IFNFUCkgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHNlcGFyYXRvcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZGVsaW0pIHsKKyAgICAgICAgICAgIHNpemVfdCBsZW4gPSBkZWxpbSAtIGRlZnBhdGggKyAxOworICAgICAgICAgICAgc2l6ZV90IGVuZCA9IHdjc2xlbihidWYpICsgbGVuOworICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7CisgICAgICAgICAgICAqKGJ1ZiArIGVuZCkgPSAnXDAnOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVmcGF0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZwYXRoID0gZGVsaW0gKyAxOworICAgIH0KKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogRmluYWxseSwgb24gZ29lcyB0aGUgZGlyZWN0b3J5IGZvciBkeW5hbWljLWxvYWQgbW9kdWxlcyAqLworICAgIHdjc2NhdChidWYsIGV4ZWNfcHJlZml4KTsKKworICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCisgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmOwogCiAgICAgLyogUmVkdWNlIHByZWZpeCBhbmQgZXhlY19wcmVmaXggdG8gdGhlaXIgZXNzZW5jZSwKICAgICAgKiBlLmcuIC91c3IvbG9jYWwvbGliL3B5dGhvbjEuNSBpcyByZWR1Y2VkIHRvIC91c3IvbG9jYWwuCkBAIC04MTgsMTEgKzgxNSwxMSBAQAogICAgIGVsc2UKICAgICAgICAgd2NzbmNweShleGVjX3ByZWZpeCwgX2V4ZWNfcHJlZml4LCBNQVhQQVRITEVOKTsKIAotICAgIFB5TWVtX0ZyZWUoX3B5dGhvbnBhdGgpOwotICAgIFB5TWVtX0ZyZWUoX3ByZWZpeCk7Ci0gICAgUHlNZW1fRnJlZShfZXhlY19wcmVmaXgpOwotICAgIGlmIChydHB5cGF0aCAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHJ0cHlwYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9weXRob25wYXRoKTsKKyAgICBQeU1lbV9SYXdGcmVlKF9wcmVmaXgpOworICAgIFB5TWVtX1Jhd0ZyZWUoX2V4ZWNfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKGxpYl9weXRob24pOworICAgIFB5TWVtX1Jhd0ZyZWUocnRweXBhdGgpOwogfQogCiAKQEAgLTgzMSwxOCArODI4LDE1IEBACiBQeV9TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKnBhdGgpCiB7CiAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQpCi0gICAgICAgICAgICBQeU1lbV9GcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUobW9kdWxlX3NlYXJjaF9wYXRoKTsKICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMDsKICAgICB9CiAgICAgaWYgKHBhdGggIT0gTlVMTCkgewogICAgICAgICBleHRlcm4gd2NoYXJfdCAqUHlfR2V0UHJvZ3JhbU5hbWUodm9pZCk7CiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgZXhlY19wcmVmaXhbMF0gPSBwcmVmaXhbMF0gPSBMJ1wwJzsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUHlNZW1fTWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDE7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX1Jhd01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpCiAgICAgICAgICAgICB3Y3NjcHkobW9kdWxlX3NlYXJjaF9wYXRoLCBwYXRoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dycG1vZHVsZS5jIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwppbmRleCAwNDJjZjA1Li5hODVhMjcxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2dycG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKQEAgLTIxMCw5ICsyMTAsMTQgQEAKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0R3JwVHlwZSwgJnN0cnVjdF9ncm91cF90eXBlX2Rlc2MpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJzdHJ1Y3RfZ3JvdXAiLCAoUHlPYmplY3QgKikgJlN0cnVjdEdycFR5cGUpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RHcnBUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ncm91cF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0cnVjdF9ncm91cCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZTdHJ1Y3RHcnBUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGluaXRpYWxpemVkID0gMTsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaGxpYi5oIGIvTW9kdWxlcy9oYXNobGliLmgKaW5kZXggNDU5OTE0Ni4uNTFjNjhmNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9oYXNobGliLmgKKysrIGIvTW9kdWxlcy9oYXNobGliLmgKQEAgLTI2LDMgKzI2LDM2IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICB9IFwKICAgICB9IHdoaWxlKDApOworCisvKgorICogSGVscGVyIGNvZGUgdG8gc3luY2hyb25pemUgYWNjZXNzIHRvIHRoZSBoYXNoIG9iamVjdCB3aGVuIHRoZSBHSUwgaXMKKyAqIHJlbGVhc2VkIGFyb3VuZCBhIENQVSBjb25zdW1pbmcgaGFzaGxpYiBvcGVyYXRpb24uIEFsbCBjb2RlIHBhdGhzIHRoYXQKKyAqIGFjY2VzcyBhIG11dGFibGUgcGFydCBvZiBvYmogbXVzdCBiZSBlbmNsb3NlZCBpbiBhIEVOVEVSX0hBU0hMSUIgLworICogTEVBVkVfSEFTSExJQiBibG9jayBvciBleHBsaWNpdGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIGxvY2sgaW5zaWRlCisgKiBhIFBZX0JFR0lOIC8gRU5EX0FMTE9XX1RIUkVBRFMgYmxvY2sgaWYgdGhleSB3aXNoIHRvIHJlbGVhc2UgdGhlIEdJTCBmb3IKKyAqIGFuIG9wZXJhdGlvbi4KKyAqLworCisjaWZkZWYgV0lUSF9USFJFQUQKKyNpbmNsdWRlICJweXRocmVhZC5oIgorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKKyAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKKyAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCisgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCisgICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAorICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9CisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAorICAgICAgICB9CisjZWxzZQorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKKyNlbmRpZgorCisvKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQorICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCisjZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5jIGIvTW9kdWxlcy9oYXNodGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjFlZDUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuYwpAQCAtMCwwICsxLDUxOCBAQAorLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoIHRhYmxlIChfUHlfaGFzaHRhYmxlX3QpIGlzIGJhc2VkIG9uIHRoZSBjZnVoYXNoCisgICBwcm9qZWN0OgorICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZnUvCisKKyAgIENvcHlyaWdodCBvZiBjZnVoYXNoOgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRpb24gZGF0ZTogMjAwNS0wNi0yNCAyMToyMjo0MAorICAgQXV0aG9yczogRG9uCisgICBDaGFuZ2UgbG9nOgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUgRG9uIE93ZW5zCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgICBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKworI2RlZmluZSBIQVNIVEFCTEVfTUlOX1NJWkUgMTYKKyNkZWZpbmUgSEFTSFRBQkxFX0hJR0ggMC41MAorI2RlZmluZSBIQVNIVEFCTEVfTE9XIDAuMTAKKyNkZWZpbmUgSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IgMi4wIC8gKEhBU0hUQUJMRV9MT1cgKyBIQVNIVEFCTEVfSElHSCkKKworI2RlZmluZSBCVUNLRVRTX0hFQUQoU0xJU1QpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSEVBRCgmKFNMSVNUKSkpCisjZGVmaW5lIFRBQkxFX0hFQUQoSFQsIEJVQ0tFVCkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9IRUFEKCYoSFQpLT5idWNrZXRzW0JVQ0tFVF0pKQorI2RlZmluZSBFTlRSWV9ORVhUKEVOVFJZKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0lURU1fTkVYVChFTlRSWSkpCisjZGVmaW5lIEhBU0hUQUJMRV9JVEVNX1NJWkUoSFQpIFwKKyAgICAgICAgKHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpICsgKEhUKS0+ZGF0YV9zaXplKQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCBoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpOworCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X2luaXQoX1B5X3NsaXN0X3QgKmxpc3QpCit7CisgICAgbGlzdC0+aGVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfcHJlcGVuZChfUHlfc2xpc3RfdCAqbGlzdCwgX1B5X3NsaXN0X2l0ZW1fdCAqaXRlbSkKK3sKKyAgICBpdGVtLT5uZXh0ID0gbGlzdC0+aGVhZDsKKyAgICBsaXN0LT5oZWFkID0gaXRlbTsKK30KKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9yZW1vdmUoX1B5X3NsaXN0X3QgKmxpc3QsIF9QeV9zbGlzdF9pdGVtX3QgKnByZXZpb3VzLAorICAgICAgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICppdGVtKQoreworICAgIGlmIChwcmV2aW91cyAhPSBOVUxMKQorICAgICAgICBwcmV2aW91cy0+bmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgZWxzZQorICAgICAgICBsaXN0LT5oZWFkID0gaXRlbS0+bmV4dDsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX2ludChjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KWtleTsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KV9QeV9IYXNoUG9pbnRlcigodm9pZCAqKWtleSk7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LT5rZXkgPT0ga2V5OworfQorCisvKiBtYWtlcyBzdXJlIHRoZSByZWFsIHNpemUgb2YgdGhlIGJ1Y2tldHMgYXJyYXkgaXMgYSBwb3dlciBvZiAyICovCitzdGF0aWMgc2l6ZV90Cityb3VuZF9zaXplKHNpemVfdCBzKQoreworICAgIHNpemVfdCBpOworICAgIGlmIChzIDwgSEFTSFRBQkxFX01JTl9TSVpFKQorICAgICAgICByZXR1cm4gSEFTSFRBQkxFX01JTl9TSVpFOworICAgIGkgPSAxOworICAgIHdoaWxlIChpIDwgcykKKyAgICAgICAgaSA8PD0gMTsKKyAgICByZXR1cm4gaTsKK30KKworX1B5X2hhc2h0YWJsZV90ICoKK19QeV9oYXNodGFibGVfbmV3X2Z1bGwoc2l6ZV90IGRhdGFfc2l6ZSwgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqaHQ7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZTsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworCisgICAgaWYgKGFsbG9jYXRvciA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLm1hbGxvYyA9IFB5TWVtX1Jhd01hbGxvYzsKKyAgICAgICAgYWxsb2MuZnJlZSA9IFB5TWVtX1Jhd0ZyZWU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgYWxsb2MgPSAqYWxsb2NhdG9yOworCisgICAgaHQgPSAoX1B5X2hhc2h0YWJsZV90ICopYWxsb2MubWFsbG9jKHNpemVvZihfUHlfaGFzaHRhYmxlX3QpKTsKKyAgICBpZiAoaHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGh0OworCisgICAgaHQtPm51bV9idWNrZXRzID0gcm91bmRfc2l6ZShpbml0X3NpemUpOworICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBodC0+ZGF0YV9zaXplID0gZGF0YV9zaXplOworCisgICAgYnVja2V0c19zaXplID0gaHQtPm51bV9idWNrZXRzICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBodC0+YnVja2V0cyA9IGFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLmZyZWUoaHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPmhhc2hfZnVuYyA9IGhhc2hfZnVuYzsKKyAgICBodC0+Y29tcGFyZV9mdW5jID0gY29tcGFyZV9mdW5jOworICAgIGh0LT5jb3B5X2RhdGFfZnVuYyA9IGNvcHlfZGF0YV9mdW5jOworICAgIGh0LT5mcmVlX2RhdGFfZnVuYyA9IGZyZWVfZGF0YV9mdW5jOworICAgIGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMgPSBnZXRfZGF0YV9zaXplX2Z1bmM7CisgICAgaHQtPmFsbG9jID0gYWxsb2M7CisgICAgcmV0dXJuIGh0OworfQorCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9uZXcoc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIEhBU0hUQUJMRV9NSU5fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmMsIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc2l6ZV90CitfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBzaXplID0gc2l6ZW9mKF9QeV9oYXNodGFibGVfdCk7CisKKyAgICAvKiBidWNrZXRzICovCisgICAgc2l6ZSArPSBodC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopOworCisgICAgLyogZW50cmllcyAqLworICAgIHNpemUgKz0gaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KTsKKworICAgIC8qIGRhdGEgbGlua2VkIGZyb20gZW50cmllcyAqLworICAgIGlmIChodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jKSB7CisgICAgICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgICAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICB2b2lkICpkYXRhOworCisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIHNpemUgKz0gaHQtPmdldF9kYXRhX3NpemVfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KKworI2lmZGVmIFB5X0RFQlVHCit2b2lkCitfUHlfaGFzaHRhYmxlX3ByaW50X3N0YXRzKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGNoYWluX2xlbiwgbWF4X2NoYWluX2xlbiwgdG90YWxfY2hhaW5fbGVuLCBuY2hhaW5zOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGh2OworICAgIGRvdWJsZSBsb2FkOworCisgICAgc2l6ZSA9IF9QeV9oYXNodGFibGVfc2l6ZShodCk7CisKKyAgICBsb2FkID0gKGRvdWJsZSlodC0+ZW50cmllcyAvIGh0LT5udW1fYnVja2V0czsKKworICAgIG1heF9jaGFpbl9sZW4gPSAwOworICAgIHRvdGFsX2NoYWluX2xlbiA9IDA7CisgICAgbmNoYWlucyA9IDA7CisgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgIGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOworICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAgICAgY2hhaW5fbGVuID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgICAgIGNoYWluX2xlbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYWluX2xlbiA+IG1heF9jaGFpbl9sZW4pCisgICAgICAgICAgICAgICAgbWF4X2NoYWluX2xlbiA9IGNoYWluX2xlbjsKKyAgICAgICAgICAgIHRvdGFsX2NoYWluX2xlbiArPSBjaGFpbl9sZW47CisgICAgICAgICAgICBuY2hhaW5zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRmKCJoYXNoIHRhYmxlICVwOiBlbnRyaWVzPSV6dS8lenUgKCUuMGYlJSksICIsCisgICAgICAgICAgIGh0LCBodC0+ZW50cmllcywgaHQtPm51bV9idWNrZXRzLCBsb2FkICogMTAwLjApOworICAgIGlmIChuY2hhaW5zKQorICAgICAgICBwcmludGYoImF2Z19jaGFpbl9sZW49JS4xZiwgIiwgKGRvdWJsZSl0b3RhbF9jaGFpbl9sZW4gLyBuY2hhaW5zKTsKKyAgICBwcmludGYoIm1heF9jaGFpbl9sZW49JXp1LCAlenUga0JcbiIsCisgICAgICAgICAgIG1heF9jaGFpbl9sZW4sIHNpemUgLyAxMDI0KTsKK30KKyNlbmRpZgorCisvKiBHZXQgYW4gZW50cnkuIFJldHVybiBOVUxMIGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuICovCitfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKgorX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5KQoreworICAgIFB5X3VoYXNoX3Qga2V5X2hhc2g7CisgICAgc2l6ZV90IGluZGV4OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGluZGV4KTsgZW50cnkgIT0gTlVMTDsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICBpZiAoZW50cnktPmtleV9oYXNoID09IGtleV9oYXNoICYmIGh0LT5jb21wYXJlX2Z1bmMoa2V5LCBlbnRyeSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQKK19oYXNodGFibGVfcG9wX2VudHJ5KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqcHJldmlvdXM7CisKKyAgICBrZXlfaGFzaCA9IGh0LT5oYXNoX2Z1bmMoa2V5KTsKKyAgICBpbmRleCA9IGtleV9oYXNoICYgKGh0LT5udW1fYnVja2V0cyAtIDEpOworCisgICAgcHJldmlvdXMgPSBOVUxMOworICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpbmRleCk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXlfaGFzaCA9PSBrZXlfaGFzaCAmJiBodC0+Y29tcGFyZV9mdW5jKGtleSwgZW50cnkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHByZXZpb3VzID0gZW50cnk7CisgICAgfQorCisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgX1B5X3NsaXN0X3JlbW92ZSgmaHQtPmJ1Y2tldHNbaW5kZXhdLCAoX1B5X3NsaXN0X2l0ZW1fdCAqKXByZXZpb3VzLAorICAgICAgICAgICAgICAgICAgICAgKF9QeV9zbGlzdF9pdGVtX3QgKillbnRyeSk7CisgICAgaHQtPmVudHJpZXMtLTsKKworICAgIGlmIChkYXRhICE9IE5VTEwpCisgICAgICAgIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKGh0LCBkYXRhLCBkYXRhX3NpemUsIGVudHJ5KTsKKyAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisKKyAgICBpZiAoKGZsb2F0KWh0LT5lbnRyaWVzIC8gKGZsb2F0KWh0LT5udW1fYnVja2V0cyA8IEhBU0hUQUJMRV9MT1cpCisgICAgICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworICAgIHJldHVybiAxOworfQorCisvKiBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGhhc2guIFRoZSBrZXkgbXVzdCBub3QgYmUgcHJlc2VudCBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIG1lbW9yeSBlcnJvci4gKi8KK2ludAorX1B5X2hhc2h0YWJsZV9zZXQoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LAorICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCB8fCBkYXRhX3NpemUgPT0gMCk7CisjaWZuZGVmIE5ERUJVRworICAgIC8qIERvbid0IHdyaXRlIHRoZSBhc3NlcnRpb24gb24gYSBzaW5nbGUgbGluZSBiZWNhdXNlIGl0IGlzIGludGVyZXN0aW5nCisgICAgICAgdG8ga25vdyB0aGUgZHVwbGljYXRlZCBlbnRyeSBpZiB0aGUgYXNzZXJ0aW9uIGZhaWxlZC4gVGhlIGVudHJ5IGNhbgorICAgICAgIGJlIHJlYWQgdXNpbmcgYSBkZWJ1Z2dlci4gKi8KKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KGh0LCBrZXkpOworICAgIGFzc2VydChlbnRyeSA9PSBOVUxMKTsKKyNlbmRpZgorCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIGVudHJ5ID0gaHQtPmFsbG9jLm1hbGxvYyhIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KSk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlbnRyeS0+a2V5ID0gKHZvaWQgKilrZXk7CisgICAgZW50cnktPmtleV9oYXNoID0ga2V5X2hhc2g7CisKKyAgICBhc3NlcnQoZGF0YV9zaXplID09IGh0LT5kYXRhX3NpemUpOworICAgIG1lbWNweShfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpLCBkYXRhLCBkYXRhX3NpemUpOworCisgICAgX1B5X3NsaXN0X3ByZXBlbmQoJmh0LT5idWNrZXRzW2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QqKWVudHJ5KTsKKyAgICBodC0+ZW50cmllcysrOworCisgICAgaWYgKChmbG9hdClodC0+ZW50cmllcyAvIChmbG9hdClodC0+bnVtX2J1Y2tldHMgPiBIQVNIVEFCTEVfSElHSCkKKyAgICAgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdldCBkYXRhIGZyb20gYW4gZW50cnkuIENvcHkgZW50cnkgZGF0YSBpbnRvIGRhdGEgYW5kIHJldHVybiAxIGlmIHRoZSBlbnRyeQorICAgZXhpc3RzLCByZXR1cm4gMCBpZiB0aGUgZW50cnkgZG9lcyBub3QgZXhpc3QuICovCitpbnQKK19QeV9oYXNodGFibGVfZ2V0KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAgYXNzZXJ0KGRhdGEgIT0gTlVMTCk7CisKKyAgICBlbnRyeSA9IF9QeV9oYXNodGFibGVfZ2V0X2VudHJ5KGh0LCBrZXkpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKyAgICBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShodCwgZGF0YSwgZGF0YV9zaXplLCBlbnRyeSk7CisgICAgcmV0dXJuIDE7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9wb3AoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5LCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9zaXplKQoreworICAgIGFzc2VydChkYXRhICE9IE5VTEwpOworICAgIGFzc2VydChodC0+ZnJlZV9kYXRhX2Z1bmMgPT0gTlVMTCk7CisgICAgcmV0dXJuIF9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIGRhdGEsIGRhdGFfc2l6ZSk7Cit9CisKKy8qIERlbGV0ZSBhbiBlbnRyeS4gVGhlIGVudHJ5IG11c3QgZXhpc3QuICovCit2b2lkCitfUHlfaGFzaHRhYmxlX2RlbGV0ZShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXkpCit7CisjaWZuZGVmIE5ERUJVRworICAgIGludCBmb3VuZCA9IF9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIE5VTEwsIDApOworICAgIGFzc2VydChmb3VuZCk7CisjZWxzZQorICAgICh2b2lkKV9oYXNodGFibGVfcG9wX2VudHJ5KGh0LCBrZXksIE5VTEwsIDApOworI2VuZGlmCit9CisKKy8qIFByb3RvdHlwZSBmb3IgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvcmVhY2gKKyAgIGtleS92YWx1ZSBwYWlyIGluIHRoZSBoYXNoIGJ5IGhhc2h0YWJsZV9mb3JlYWNoKCkuICBJdGVyYXRpb24KKyAgIHN0b3BzIGlmIGEgbm9uLXplcm8gdmFsdWUgaXMgcmV0dXJuZWQuICovCitpbnQKK19QeV9oYXNodGFibGVfZm9yZWFjaChfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZ1bmMpIChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworICAgIHNpemVfdCBodjsKKworICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgaW50IHJlcyA9IGZ1bmMoZW50cnksIGFyZyk7CisgICAgICAgICAgICBpZiAocmVzKQorICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZSwgbmV3X3NpemUsIGJ1Y2tldDsKKyAgICBfUHlfc2xpc3RfdCAqb2xkX2J1Y2tldHMgPSBOVUxMOworICAgIHNpemVfdCBvbGRfbnVtX2J1Y2tldHM7CisKKyAgICBuZXdfc2l6ZSA9IHJvdW5kX3NpemUoKHNpemVfdCkoaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfUkVIQVNIX0ZBQ1RPUikpOworICAgIGlmIChuZXdfc2l6ZSA9PSBodC0+bnVtX2J1Y2tldHMpCisgICAgICAgIHJldHVybjsKKworICAgIG9sZF9udW1fYnVja2V0cyA9IGh0LT5udW1fYnVja2V0czsKKworICAgIGJ1Y2tldHNfc2l6ZSA9IG5ld19zaXplICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBvbGRfYnVja2V0cyA9IGh0LT5idWNrZXRzOworICAgIGh0LT5idWNrZXRzID0gaHQtPmFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIC8qIGNhbmNlbCByZWhhc2ggb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAqLworICAgICAgICBodC0+YnVja2V0cyA9IG9sZF9idWNrZXRzIDsKKyAgICAgICAgLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPm51bV9idWNrZXRzID0gbmV3X3NpemU7CisKKyAgICBmb3IgKGJ1Y2tldCA9IDA7IGJ1Y2tldCA8IG9sZF9udW1fYnVja2V0czsgYnVja2V0KyspIHsKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKm5leHQ7CisgICAgICAgIGZvciAoZW50cnkgPSBCVUNLRVRTX0hFQUQob2xkX2J1Y2tldHNbYnVja2V0XSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgeworICAgICAgICAgICAgc2l6ZV90IGVudHJ5X2luZGV4OworCisgICAgICAgICAgICBhc3NlcnQoaHQtPmhhc2hfZnVuYyhlbnRyeS0+a2V5KSA9PSBlbnRyeS0+a2V5X2hhc2gpOworICAgICAgICAgICAgbmV4dCA9IEVOVFJZX05FWFQoZW50cnkpOworICAgICAgICAgICAgZW50cnlfaW5kZXggPSBlbnRyeS0+a2V5X2hhc2ggJiAobmV3X3NpemUgLSAxKTsKKworICAgICAgICAgICAgX1B5X3NsaXN0X3ByZXBlbmQoJmh0LT5idWNrZXRzW2VudHJ5X2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QqKWVudHJ5KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGh0LT5hbGxvYy5mcmVlKG9sZF9idWNrZXRzKTsKK30KKwordm9pZAorX1B5X2hhc2h0YWJsZV9jbGVhcihfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpuZXh0OworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpPTA7IGkgPCBodC0+bnVtX2J1Y2tldHM7IGkrKykgeworICAgICAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaSk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgeworICAgICAgICAgICAgbmV4dCA9IEVOVFJZX05FWFQoZW50cnkpOworICAgICAgICAgICAgaWYgKGh0LT5mcmVlX2RhdGFfZnVuYykKKyAgICAgICAgICAgICAgICBodC0+ZnJlZV9kYXRhX2Z1bmMoX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBX0FTX1ZPSURfUChlbnRyeSkpOworICAgICAgICAgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworICAgICAgICB9CisgICAgICAgIF9QeV9zbGlzdF9pbml0KCZodC0+YnVja2V0c1tpXSk7CisgICAgfQorICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKK30KKwordm9pZAorX1B5X2hhc2h0YWJsZV9kZXN0cm95KF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgaHQtPm51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgX1B5X3NsaXN0X2l0ZW1fdCAqZW50cnkgPSBodC0+YnVja2V0c1tpXS5oZWFkOworICAgICAgICB3aGlsZSAoZW50cnkpIHsKKyAgICAgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKmVudHJ5X25leHQgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgICAgIGlmIChodC0+ZnJlZV9kYXRhX2Z1bmMpCisgICAgICAgICAgICAgICAgaHQtPmZyZWVfZGF0YV9mdW5jKF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpKTsKKyAgICAgICAgICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGVudHJ5ID0gZW50cnlfbmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGh0LT5hbGxvYy5mcmVlKGh0LT5idWNrZXRzKTsKKyAgICBodC0+YWxsb2MuZnJlZShodCk7Cit9CisKKy8qIFJldHVybiBhIGNvcHkgb2YgdGhlIGhhc2ggdGFibGUgKi8KK19QeV9oYXNodGFibGVfdCAqCitfUHlfaGFzaHRhYmxlX2NvcHkoX1B5X2hhc2h0YWJsZV90ICpzcmMpCit7CisgICAgX1B5X2hhc2h0YWJsZV90ICpkc3Q7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgYnVja2V0OworICAgIGludCBlcnI7CisgICAgdm9pZCAqZGF0YSwgKm5ld19kYXRhOworCisgICAgZHN0ID0gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChzcmMtPmRhdGFfc2l6ZSwgc3JjLT5udW1fYnVja2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmhhc2hfZnVuYywgc3JjLT5jb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5jb3B5X2RhdGFfZnVuYywgc3JjLT5mcmVlX2RhdGFfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMtPmdldF9kYXRhX3NpemVfZnVuYywgJnNyYy0+YWxsb2MpOworICAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGJ1Y2tldD0wOyBidWNrZXQgPCBzcmMtPm51bV9idWNrZXRzOyBidWNrZXQrKykgeworICAgICAgICBlbnRyeSA9IFRBQkxFX0hFQUQoc3JjLCBidWNrZXQpOworICAgICAgICBmb3IgKDsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgIGlmIChzcmMtPmNvcHlfZGF0YV9mdW5jKSB7CisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIG5ld19kYXRhID0gc3JjLT5jb3B5X2RhdGFfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X2RhdGEgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gX1B5X2hhc2h0YWJsZV9zZXQoZHN0LCBlbnRyeS0+a2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfZGF0YSwgc3JjLT5kYXRhX3NpemUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRhdGEgPSBfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoZW50cnkpOworICAgICAgICAgICAgICAgIGVyciA9IF9QeV9oYXNodGFibGVfc2V0KGRzdCwgZW50cnktPmtleSwgZGF0YSwgc3JjLT5kYXRhX3NpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZGVzdHJveShkc3QpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBkc3Q7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvaGFzaHRhYmxlLmggYi9Nb2R1bGVzL2hhc2h0YWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzOWU0OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2hhc2h0YWJsZS5oCkBAIC0wLDAgKzEsMTI4IEBACisjaWZuZGVmIFB5X0hBU0hUQUJMRV9ICisjZGVmaW5lIFB5X0hBU0hUQUJMRV9ICisKKy8qIFRoZSB3aG9sZSBBUEkgaXMgcHJpdmF0ZSAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCit0eXBlZGVmIHN0cnVjdCBfUHlfc2xpc3RfaXRlbV9zIHsKKyAgICBzdHJ1Y3QgX1B5X3NsaXN0X2l0ZW1fcyAqbmV4dDsKK30gX1B5X3NsaXN0X2l0ZW1fdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIF9QeV9zbGlzdF9pdGVtX3QgKmhlYWQ7Cit9IF9QeV9zbGlzdF90OworCisjZGVmaW5lIF9QeV9TTElTVF9JVEVNX05FWFQoSVRFTSkgKCgoX1B5X3NsaXN0X2l0ZW1fdCAqKUlURU0pLT5uZXh0KQorCisjZGVmaW5lIF9QeV9TTElTVF9IRUFEKFNMSVNUKSAoKChfUHlfc2xpc3RfdCAqKVNMSVNUKS0+aGVhZCkKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZWQgYnkgX1B5X2hhc2h0YWJsZV90LmJ1Y2tldHMgdG8gbGluayBlbnRyaWVzICovCisgICAgX1B5X3NsaXN0X2l0ZW1fdCBfUHlfc2xpc3RfaXRlbTsKKworICAgIGNvbnN0IHZvaWQgKmtleTsKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworCisgICAgLyogZGF0YSBmb2xsb3dzICovCit9IF9QeV9oYXNodGFibGVfZW50cnlfdDsKKworI2RlZmluZSBfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpIFwKKyAgICAgICAgKChjaGFyICopKEVOVFJZKSArIHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoRU5UUlkpIFwKKyAgICAgICAgKCoodm9pZCAqKilfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfRU5UUllfUkVBRF9EQVRBKFRBQkxFLCBEQVRBLCBEQVRBX1NJWkUsIEVOVFJZKSBcCisgICAgZG8geyBcCisgICAgICAgIGFzc2VydCgoREFUQV9TSVpFKSA9PSAoVEFCTEUpLT5kYXRhX3NpemUpOyBcCisgICAgICAgIG1lbWNweShEQVRBLCBfUFlfSEFTSFRBQkxFX0VOVFJZX0RBVEEoRU5UUlkpLCBEQVRBX1NJWkUpOyBcCisgICAgfSB3aGlsZSAoMCkKKwordHlwZWRlZiBQeV91aGFzaF90ICgqX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMpIChjb25zdCB2b2lkICprZXkpOwordHlwZWRlZiBpbnQgKCpfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYykgKGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICpoZSk7Cit0eXBlZGVmIHZvaWQqICgqX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYykodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHZvaWQgKCpfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jKSh2b2lkICpkYXRhKTsKK3R5cGVkZWYgc2l6ZV90ICgqX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMpKHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKm1hbGxvYykgKHNpemVfdCBzaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKnB0cik7Cit9IF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBzaXplX3QgbnVtX2J1Y2tldHM7CisgICAgc2l6ZV90IGVudHJpZXM7IC8qIFRvdGFsIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSB0YWJsZS4gKi8KKyAgICBfUHlfc2xpc3RfdCAqYnVja2V0czsKKyAgICBzaXplX3QgZGF0YV9zaXplOworCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jOworICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgYWxsb2M7Cit9IF9QeV9oYXNodGFibGVfdDsKKworLyogaGFzaCBhbmQgY29tcGFyZSBmdW5jdGlvbnMgZm9yIGludGVnZXJzIGFuZCBwb2ludGVycyAqLworUHlBUElfRlVOQyhQeV91aGFzaF90KSBfUHlfaGFzaHRhYmxlX2hhc2hfcHRyKGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKFB5X3VoYXNoX3QpIF9QeV9oYXNodGFibGVfaGFzaF9pbnQoY29uc3Qgdm9pZCAqa2V5KTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KGNvbnN0IHZvaWQgKmtleSwgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSk7CisKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfbmV3KAorICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYyk7CitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX25ld19mdWxsKAorICAgIHNpemVfdCBkYXRhX3NpemUsCisgICAgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICBfUHlfaGFzaHRhYmxlX2hhc2hfZnVuYyBoYXNoX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYyBmcmVlX2RhdGFfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2dldF9kYXRhX3NpemVfZnVuYyBnZXRfZGF0YV9zaXplX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKTsKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV90ICopIF9QeV9oYXNodGFibGVfY29weShfUHlfaGFzaHRhYmxlX3QgKnNyYyk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfY2xlYXIoX1B5X2hhc2h0YWJsZV90ICpodCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfZGVzdHJveShfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKwordHlwZWRlZiBpbnQgKCpfUHlfaGFzaHRhYmxlX2ZvcmVhY2hfZnVuYykgKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKmFyZyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2ZvcmVhY2goCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2hfZnVuYyBmdW5jLCB2b2lkICphcmcpOworUHlBUElfRlVOQyhzaXplX3QpIF9QeV9oYXNodGFibGVfc2l6ZShfUHlfaGFzaHRhYmxlX3QgKmh0KTsKKworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX2VudHJ5X3QqKSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9zZXQoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX2dldCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfcG9wKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeV9oYXNodGFibGVfZGVsZXRlKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5KTsKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX1NFVChUQUJMRSwgS0VZLCBEQVRBKSBcCisgICAgX1B5X2hhc2h0YWJsZV9zZXQoVEFCTEUsIEtFWSwgJihEQVRBKSwgc2l6ZW9mKERBVEEpKQorCisjZGVmaW5lIF9QeV9IQVNIVEFCTEVfR0VUKFRBQkxFLCBLRVksIERBVEEpIFwKKyAgICBfUHlfaGFzaHRhYmxlX2dldChUQUJMRSwgS0VZLCAmKERBVEEpLCBzaXplb2YoREFUQSkpCisKKyNlbmRpZiAgIC8qIFB5X0xJTUlURURfQVBJICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBiL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKaW5kZXggMDEyMzE4MS4uOGJlNjJjZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYworKysgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCkBAIC00MDEsNyArNDAxLDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlPYmplY3QgKml0OwotICAgIGludCBudW1yZWFkOworICAgIGludCBudW1yZWFkOyAgLyogMCA8PSBudW1yZWFkIDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICpuZXh0bGluazsKICAgICBQeU9iamVjdCAqKHZhbHVlc1tMSU5LQ0VMTFNdKTsKIH0gdGVlZGF0YW9iamVjdDsKQEAgLTQwOSw3ICs0MDksNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICB0ZWVkYXRhb2JqZWN0ICpkYXRhb2JqOwotICAgIGludCBpbmRleDsKKyAgICBpbnQgaW5kZXg7ICAgIC8qIDAgPD0gaW5kZXggPD0gTElOS0NFTExTICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogfSB0ZWVvYmplY3Q7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFpbi5jIGIvTW9kdWxlcy9tYWluLmMKaW5kZXggM2NmYzljMy4uOTE3MTA3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYWluLmMKKysrIGIvTW9kdWxlcy9tYWluLmMKQEAgLTIyLDE1ICsyMiwxMSBAQAogI2luY2x1ZGUgPGNydGRiZy5oPgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD5cXGxpYiIKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+L0xpYiIKLSNlbHNlCiAjZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4Pi9weXRob25YLlgiCiAjZW5kaWYKLSNlbmRpZgogCiAjaW5jbHVkZSAicHlnZXRvcHQuaCIKIApAQCAtNDcsNyArNDMsNyBAQAogc3RhdGljIGludCAgb3JpZ19hcmdjOwogCiAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwotI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUptOk9xUnNTdHV2Vlc6eFg6PyIKKyNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06T3FSc1N0dXZWVzp4WDo/IgogCiAjZGVmaW5lIFBST0dSQU1fT1BUUyBCQVNFX09QVFMKIApAQCAtNjksNiArNjUsNyBAQAogc3RhdGljIGNoYXIgKnVzYWdlXzIgPSAiXAogLWkgICAgIDogaW5zcGVjdCBpbnRlcmFjdGl2ZWx5IGFmdGVyIHJ1bm5pbmcgc2NyaXB0OyBmb3JjZXMgYSBwcm9tcHQgZXZlblxuXAogICAgICAgICAgaWYgc3RkaW4gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdGVybWluYWw7IGFsc28gUFlUSE9OSU5TUEVDVD14XG5cCistSSAgICAgOiBpc29sYXRlIFB5dGhvbiBmcm9tIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQgKGltcGxpZXMgLUUgYW5kIC1zKVxuXAogLW0gbW9kIDogcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0KVxuXAogLU8gICAgIDogb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlIHNsaWdodGx5OyBhbHNvIFBZVEhPTk9QVElNSVpFPXhcblwKIC1PTyAgICA6IHJlbW92ZSBkb2Mtc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgLU8gb3B0aW1pemF0aW9uc1xuXApAQCAtMTQ2LDcgKzE0Myw3IEBACiB7CiAgICAgY2hhciAqc3RhcnR1cCA9IFB5X0dFVEVOVigiUFlUSE9OU1RBUlRVUCIpOwogICAgIGlmIChzdGFydHVwICE9IE5VTEwgJiYgc3RhcnR1cFswXSAhPSAnXDAnKSB7Ci0gICAgICAgIEZJTEUgKmZwID0gZm9wZW4oc3RhcnR1cCwgInIiKTsKKyAgICAgICAgRklMRSAqZnAgPSBfUHlfZm9wZW4oc3RhcnR1cCwgInIiKTsKICAgICAgICAgaWYgKGZwICE9IE5VTEwpIHsKICAgICAgICAgICAgICh2b2lkKSBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyhmcCwgc3RhcnR1cCwgMCwgY2YpOwogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTE2NSw2ICsxNjIsMzIgQEAKICAgICB9CiB9CiAKK3N0YXRpYyB2b2lkIFJ1bkludGVyYWN0aXZlSG9vayh2b2lkKQoreworICAgIFB5T2JqZWN0ICpzeXMsICpob29rLCAqcmVzdWx0OworICAgIHN5cyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgic3lzIik7CisgICAgaWYgKHN5cyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGhvb2sgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN5cywgIl9faW50ZXJhY3RpdmVob29rX18iKTsKKyAgICBQeV9ERUNSRUYoc3lzKTsKKyAgICBpZiAoaG9vayA9PSBOVUxMKQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGhvb2ssIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoaG9vayk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKyAgICByZXR1cm47CisKK2Vycm9yOgorICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJGYWlsZWQgY2FsbGluZyBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX1xuIik7CisgICAgUHlFcnJfUHJpbnQoKTsKKyAgICBQeUVycl9DbGVhcigpOworfQorCiAKIHN0YXRpYyBpbnQgUnVuTW9kdWxlKHdjaGFyX3QgKm1vZG5hbWUsIGludCBzZXRfYXJndjApCiB7CkBAIC0xNzIsMTcgKzE5NSwyMCBAQAogICAgIHJ1bnB5ID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJydW5weSIpOwogICAgIGlmIChydW5weSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGltcG9ydCBydW5weSBtb2R1bGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJ1bm1vZHVsZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcocnVucHksICJfcnVuX21vZHVsZV9hc19tYWluIik7CiAgICAgaWYgKHJ1bm1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGFjY2VzcyBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vZG5hbWUsIHdjc2xlbihtb2RuYW1lKSk7CiAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgbW9kdWxlIG5hbWUgdG8gdW5pY29kZVxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC0xOTEsNiArMjE3LDcgQEAKICAgICBpZiAocnVuYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgYXJndW1lbnRzIGZvciBydW5weS5fcnVuX21vZHVsZV9hc19tYWluXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfREVDUkVGKHJ1bnB5KTsKICAgICAgICAgUHlfREVDUkVGKHJ1bm1vZHVsZSk7CiAgICAgICAgIFB5X0RFQ1JFRihtb2R1bGUpOwpAQCAtMjM1LDggKzI2MiwxMCBAQAogICAgIC8qIGFyZ3YwIGlzIHVzYWJsZSBhcyBhbiBpbXBvcnQgc291cmNlLCBzbyBwdXQgaXQgaW4gc3lzLnBhdGhbMF0KICAgICAgICBhbmQgaW1wb3J0IF9fbWFpbl9fICovCiAgICAgc3lzX3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKLSAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkKKyAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMucGF0aCIpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBpZiAoUHlMaXN0X1NldEl0ZW0oc3lzX3BhdGgsIDAsIGFyZ3YwKSkgewogICAgICAgICBhcmd2MCA9IE5VTEw7CiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0zNjYsNyArMzk1LDcgQEAKICAgICAgICAgICAgICAgIGNvbW1hbmQgdG8gaW50ZXJwcmV0LiAqLwogCiAgICAgICAgICAgICBsZW4gPSB3Y3NsZW4oX1B5T1Nfb3B0YXJnKSArIDEgKyAxOwotICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CisgICAgICAgICAgICBjb21tYW5kID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbGVuKTsKICAgICAgICAgICAgIGlmIChjb21tYW5kID09IE5VTEwpCiAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSAtYyBhcmd1bWVudCIpOwpAQCAtMzk4LDYgKzQyNywxMiBAQAogICAgICAgICAgICAgUHlfSW50ZXJhY3RpdmVGbGFnKys7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlICdJJzoKKyAgICAgICAgICAgIFB5X0lzb2xhdGVkRmxhZysrOworICAgICAgICAgICAgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSsrOworICAgICAgICAgICAgUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnKys7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAvKiBjYXNlICdKJzogcmVzZXJ2ZWQgZm9yIEp5dGhvbiAqLwogCiAgICAgICAgIGNhc2UgJ08nOgpAQCAtNDc1LDcgKzUxMCw3IEBACiAgICAgICAgIHJldHVybiB1c2FnZSgwLCBhcmd2WzBdKTsKIAogICAgIGlmICh2ZXJzaW9uKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKKyAgICAgICAgcHJpbnRmKCJQeXRob24gJXNcbiIsIFBZX1ZFUlNJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTQ5NSw3ICs1MzAsNyBAQAogICAgICAgICAqd3AgIT0gTCdcMCcpIHsKICAgICAgICAgd2NoYXJfdCAqYnVmLCAqd2FybmluZzsKIAotICAgICAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygod2NzbGVuKHdwKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgdG8gY29weSBQWVRIT05XQVJOSU5HUyIpOwpAQCAtNTA1LDcgKzU0MCw3IEBACiAgICAgICAgICAgICAgd2FybmluZyA9IHdjc3RvayhOVUxMLCBMIiwiKSkgewogICAgICAgICAgICAgUHlTeXNfQWRkV2Fybk9wdGlvbih3YXJuaW5nKTsKICAgICAgICAgfQotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKICAgICB9CiAjZWxzZQogICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OV0FSTklOR1MiKSkgJiYgKnAgIT0gJ1wwJykgewpAQCAtNTE0LDEyICs1NDksMTIgQEAKIAogICAgICAgICAvKiBzZXR0bGUgZm9yIHN0cnRvayBoZXJlIGFzIHRoZXJlJ3Mgbm8gb25lIHN0YW5kYXJkCiAgICAgICAgICAgIEM4OSB3Y3N0b2sgKi8KLSAgICAgICAgYnVmID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHApICsgMSk7CisgICAgICAgIGJ1ZiA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKHN0cmxlbihwKSArIDEpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKICAgICAgICAgc3RyY3B5KGJ1ZiwgcCk7Ci0gICAgICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOwogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgICAgIGZvciAocCA9IHN0cnRvayhidWYsICIsIik7IHAgIT0gTlVMTDsgcCA9IHN0cnRvayhOVUxMLCAiLCIpKSB7CiAjaWZkZWYgX19BUFBMRV9fCkBAIC01MzcsOCArNTcyLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgfQogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgICAgICBmcmVlKG9sZGxvYyk7Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2VuZGlmCiAKQEAgLTYwOCw3ICs2NDMsNyBAQAogICAgICAgICB3Y2hhcl90KiBidWZmZXI7CiAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocCkgKyAxOwogCi0gICAgICAgIGJ1ZmZlciA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBidWZmZXIgPSBQeU1lbV9SYXdNYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9ORVhFQ1VUQUJMRSIpOwpAQCAtNjgyLDcgKzcxNyw3IEBACiAKICAgICBpZiAoY29tbWFuZCkgewogICAgICAgICBzdHMgPSBydW5fY29tbWFuZChjb21tYW5kLCAmY2YpOwotICAgICAgICBmcmVlKGNvbW1hbmQpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGNvbW1hbmQpOwogICAgIH0gZWxzZSBpZiAobW9kdWxlKSB7CiAgICAgICAgIHN0cyA9IChSdW5Nb2R1bGUobW9kdWxlLCAxKSAhPSAwKTsKICAgICB9CkBAIC02OTEsNiArNzI2LDcgQEAKICAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUpIHsKICAgICAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsgLyogZG8gZXhpdCBvbiBTeXN0ZW1FeGl0ICovCiAgICAgICAgICAgICBSdW5TdGFydHVwRmlsZSgmY2YpOworICAgICAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIH0KICAgICAgICAgLyogWFhYICovCiAKQEAgLTc1Niw2ICs3OTIsNyBAQAogICAgIGlmIChQeV9JbnNwZWN0RmxhZyAmJiBzdGRpbl9pc19pbnRlcmFjdGl2ZSAmJgogICAgICAgICAoZmlsZW5hbWUgIT0gTlVMTCB8fCBjb21tYW5kICE9IE5VTEwgfHwgbW9kdWxlICE9IE5VTEwpKSB7CiAgICAgICAgIFB5X0luc3BlY3RGbGFnID0gMDsKKyAgICAgICAgUnVuSW50ZXJhY3RpdmVIb29rKCk7CiAgICAgICAgIC8qIFhYWCAqLwogICAgICAgICBzdHMgPSBQeVJ1bl9BbnlGaWxlRmxhZ3Moc3RkaW4sICI8c3RkaW4+IiwgJmNmKSAhPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvbWQ1bW9kdWxlLmMgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCmluZGV4IDEyZTE4N2MuLjVjYjNkMzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWQ1bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwpAQCAtOTEsMTAgKzkxLDYgQEAKICAgICAgICAoeSlbM10gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICBcCiAgICAgICAgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBNRDUgbWFjcm9zICovCiAKQEAgLTI0NCw5ICsyNDAsOSBAQAogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoTUQ1X0JMT0NLU0laRSAtIG1kNS0+Y3VybGVuKSk7CisgICAgICAgICAgIG4gPSBQeV9NSU4oaW5sZW4sIChQeV9zc2l6ZV90KShNRDVfQkxPQ0tTSVpFIC0gbWQ1LT5jdXJsZW4pKTsKICAgICAgICAgICAgbWVtY3B5KG1kNS0+YnVmICsgbWQ1LT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSBuOworICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSAoTUQ1X0lOVDMyKW47CiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IG47CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IG47CiAgICAgICAgICAgIGlmIChtZDUtPmN1cmxlbiA9PSBNRDVfQkxPQ0tTSVpFKSB7CkBAIC00NDMsNyArNDM5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBNRDVfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiTUQ1IiwgMyk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgibWQ1IiwgMyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzYsOCArNTcyLDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19tZDUodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJk1ENXR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJk1ENXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX21kNW1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfbWQ1bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmTUQ1dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJNRDVUeXBlIiwgKFB5T2JqZWN0ICopJk1ENXR5cGUpOworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwppbmRleCAxMTA3ZWI4Li4zNjZkYWMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL21tYXBtb2R1bGUuYworKysgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwpAQCAtMjAsNiArMjAsNyBAQAogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlIDxQeXRob24uaD4KKyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKIAogI2lmbmRlZiBNU19XSU5ET1dTCiAjZGVmaW5lIFVOSVgKQEAgLTEwOCw2ICsxMDksNyBAQAogICAgIGludCBmZDsKICNlbmRpZgogCisgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIGFjY2Vzc19tb2RlIGFjY2VzczsKIH0gbW1hcF9vYmplY3Q7CiAKQEAgLTEzNCw2ICsxMzYsOCBAQAogICAgIH0KICNlbmRpZiAvKiBVTklYICovCiAKKyAgICBpZiAobV9vYmotPndlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIG1fb2JqKTsKICAgICBQeV9UWVBFKG1fb2JqKS0+dHBfZnJlZSgoUHlPYmplY3QqKW1fb2JqKTsKIH0KIApAQCAtMTAzMiw3ICsxMDM2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YobW1hcF9vYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtbWFwX29iamVjdF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KQEAgLTExOTAsNiArMTE5NCw3IEBACiAgICAgbV9vYmotPmRhdGEgPSBOVUxMOwogICAgIG1fb2JqLT5zaXplID0gKHNpemVfdCkgbWFwX3NpemU7CiAgICAgbV9vYmotPnBvcyA9IChzaXplX3QpIDA7CisgICAgbV9vYmotPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBtX29iai0+ZXhwb3J0cyA9IDA7CiAgICAgbV9vYmotPm9mZnNldCA9IG9mZnNldDsKICAgICBpZiAoZmQgPT0gLTEpIHsKQEAgLTEyMDMsMTggKzEyMDgsMTggQEAKICAgICAgICAgZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUzsKICNlbHNlCiAgICAgICAgIC8qIFNWUjQgbWV0aG9kIHRvIG1hcCBhbm9ueW1vdXMgbWVtb3J5IGlzIHRvIG9wZW4gL2Rldi96ZXJvICovCi0gICAgICAgIGZkID0gZGV2emVybyA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CisgICAgICAgIGZkID0gZGV2emVybyA9IF9QeV9vcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOwogICAgICAgICBpZiAoZGV2emVybyA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG1fb2JqKTsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBtX29iai0+ZmQgPSBkdXAoZmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbV9vYmotPmZkID0gX1B5X2R1cChmZCk7CiAgICAgICAgIGlmIChtX29iai0+ZmQgPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7Ci0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzOTQsNiArMTM5OSw3IEBACiAgICAgLyogc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uICovCiAgICAgbV9vYmotPnBvcyA9IChzaXplX3QpIDA7CiAKKyAgICBtX29iai0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIG1fb2JqLT5leHBvcnRzID0gMDsKICAgICAvKiBzZXQgdGhlIHRhZyBuYW1lICovCiAgICAgaWYgKHRhZ25hbWUgIT0gTlVMTCAmJiAqdGFnbmFtZSAhPSAnXDAnKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKaW5kZXggNTBlMjY2Zi4uYjBhMTZkYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCisrKyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwpAQCAtMTE1LDcgKzExNSw5IEBACiAgICAgICAgb25lIG9wZW4gYXQgYSB0aW1lLiAgVGhpcyBkb2VzICpub3QqIGFmZmVjdCBsYXRlciBJL087IE9TUwogICAgICAgIHByb3ZpZGVzIGEgc3BlY2lhbCBpb2N0bCgpIGZvciBub24tYmxvY2tpbmcgcmVhZC93cml0ZSwgd2hpY2ggaXMKICAgICAgICBleHBvc2VkIHZpYSBvc3Nfbm9uYmxvY2soKSBiZWxvdy4gKi8KLSAgICBpZiAoKGZkID0gb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKSkgPT0gLTEpIHsKKyAgICBmZCA9IF9QeV9vcGVuKGRldmljZW5hbWUsIGltb2RlfE9fTk9OQkxPQ0spOworCisgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBkZXZpY2VuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTc3LDcgKzE3OSw4IEBACiAgICAgICAgICAgICBkZXZpY2VuYW1lID0gIi9kZXYvbWl4ZXIiOwogICAgIH0KIAotICAgIGlmICgoZmQgPSBvcGVuKGRldmljZW5hbWUsIE9fUkRXUikpID09IC0xKSB7CisgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpOworICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI0NSw3ICsyNDgsNyBAQAogICAgIGludCBhcmc7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjcwLDcgKzI3Myw3IEBACiAgICAgaW50IGFyZyA9IDA7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjkwLDcgKzI5Myw3IEBACiAgICAgaW50IHJ2OwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvb3ZlcmxhcHBlZC5jIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1Yzc2ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvb3ZlcmxhcHBlZC5jCkBAIC0wLDAgKzEsMTM3OCBAQAorLyoKKyAqIFN1cHBvcnQgZm9yIG92ZXJsYXBwZWQgSU8KKyAqCisgKiBTb21lIGNvZGUgYm9ycm93ZWQgZnJvbSBNb2R1bGVzL193aW5hcGkuYyBvZiBDUHl0aG9uCisgKi8KKworLyogWFhYIGNoZWNrIG92ZXJmbG93IGFuZCBEV09SRCA8LT4gUHlfc3NpemVfdCBjb252ZXJzaW9ucworICAgQ2hlY2sgaXRlbXNpemUgKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorCisjZGVmaW5lIFdJTkRPV1NfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxtc3dzb2NrLmg+CisKKyNpZiBkZWZpbmVkKE1TX1dJTjMyKSAmJiAhZGVmaW5lZChNU19XSU42NCkKKyMgIGRlZmluZSBGX1BPSU5URVIgImsiCisjICBkZWZpbmUgVF9QT0lOVEVSIFRfVUxPTkcKKyNlbHNlCisjICBkZWZpbmUgRl9QT0lOVEVSICJLIgorIyAgZGVmaW5lIFRfUE9JTlRFUiBUX1VMT05HTE9ORworI2VuZGlmCisKKyNkZWZpbmUgRl9IQU5ETEUgRl9QT0lOVEVSCisjZGVmaW5lIEZfVUxPTkdfUFRSIEZfUE9JTlRFUgorI2RlZmluZSBGX0RXT1JEICJrIgorI2RlZmluZSBGX0JPT0wgImkiCisjZGVmaW5lIEZfVUlOVCAiSSIKKworI2RlZmluZSBUX0hBTkRMRSBUX1BPSU5URVIKKworZW51bSB7VFlQRV9OT05FLCBUWVBFX05PVF9TVEFSVEVELCBUWVBFX1JFQUQsIFRZUEVfV1JJVEUsIFRZUEVfQUNDRVBULAorICAgICAgVFlQRV9DT05ORUNULCBUWVBFX0RJU0NPTk5FQ1QsIFRZUEVfQ09OTkVDVF9OQU1FRF9QSVBFLAorICAgICAgVFlQRV9XQUlUX05BTUVEX1BJUEVfQU5EX0NPTk5FQ1R9OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIE9WRVJMQVBQRUQgb3ZlcmxhcHBlZDsKKyAgICAvKiBGb3IgY29udmVuaWVuY2UsIHdlIHN0b3JlIHRoZSBmaWxlIGhhbmRsZSB0b28gKi8KKyAgICBIQU5ETEUgaGFuZGxlOworICAgIC8qIEVycm9yIHJldHVybmVkIGJ5IGxhc3QgbWV0aG9kIGNhbGwgKi8KKyAgICBEV09SRCBlcnJvcjsKKyAgICAvKiBUeXBlIG9mIG9wZXJhdGlvbiAqLworICAgIERXT1JEIHR5cGU7CisgICAgdW5pb24geworICAgICAgICAvKiBCdWZmZXIgdXNlZCBmb3IgcmVhZGluZyAob3B0aW9uYWwpICovCisgICAgICAgIFB5T2JqZWN0ICpyZWFkX2J1ZmZlcjsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHdyaXRpbmcgKG9wdGlvbmFsKSAqLworICAgICAgICBQeV9idWZmZXIgd3JpdGVfYnVmZmVyOworICAgIH07Cit9IE92ZXJsYXBwZWRPYmplY3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkOworICAgIEhBTkRMRSBJb2NwSGFuZGxlOworICAgIGNoYXIgQWRkcmVzc1sxXTsKK30gV2FpdE5hbWVkUGlwZUFuZENvbm5lY3RDb250ZXh0OworCisvKgorICogTWFwIFdpbmRvd3MgZXJyb3IgY29kZXMgdG8gc3ViY2xhc3NlcyBvZiBPU0Vycm9yCisgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK1NldEZyb21XaW5kb3dzRXJyKERXT1JEIGVycikKK3sKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uX3R5cGU7CisKKyAgICBpZiAoZXJyID09IDApCisgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEOgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19Db25uZWN0aW9uUmVmdXNlZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEOgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19Db25uZWN0aW9uQWJvcnRlZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX09TRXJyb3I7CisgICAgfQorICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihleGNlcHRpb25fdHlwZSwgZXJyKTsKK30KKworLyoKKyAqIFNvbWUgZnVuY3Rpb25zIHNob3VsZCBiZSBsb2FkZWQgYXQgcnVudGltZQorICovCisKK3N0YXRpYyBMUEZOX0FDQ0VQVEVYIFB5X0FjY2VwdEV4ID0gTlVMTDsKK3N0YXRpYyBMUEZOX0NPTk5FQ1RFWCBQeV9Db25uZWN0RXggPSBOVUxMOworc3RhdGljIExQRk5fRElTQ09OTkVDVEVYIFB5X0Rpc2Nvbm5lY3RFeCA9IE5VTEw7CitzdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKlB5X0NhbmNlbElvRXgpKEhBTkRMRSwgTFBPVkVSTEFQUEVEKSA9IE5VTEw7CisKKyNkZWZpbmUgR0VUX1dTQV9QT0lOVEVSKHMsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoU09DS0VUX0VSUk9SICE9IFdTQUlvY3RsKHMsIFNJT19HRVRfRVhURU5TSU9OX0ZVTkNUSU9OX1BPSU5URVIsICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHdWlkIyN4LCBzaXplb2YoR3VpZCMjeCksICZQeV8jI3gsICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQeV8jI3gpLCAmZHdCeXRlcywgTlVMTCwgTlVMTCkpCisKK3N0YXRpYyBpbnQKK2luaXRpYWxpemVfZnVuY3Rpb25fcG9pbnRlcnModm9pZCkKK3sKKyAgICBHVUlEIEd1aWRBY2NlcHRFeCA9IFdTQUlEX0FDQ0VQVEVYOworICAgIEdVSUQgR3VpZENvbm5lY3RFeCA9IFdTQUlEX0NPTk5FQ1RFWDsKKyAgICBHVUlEIEd1aWREaXNjb25uZWN0RXggPSBXU0FJRF9ESVNDT05ORUNURVg7CisgICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKKyAgICBTT0NLRVQgczsKKyAgICBEV09SRCBkd0J5dGVzOworCisgICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworICAgIGlmIChzID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghR0VUX1dTQV9QT0lOVEVSKHMsIEFjY2VwdEV4KSB8fAorICAgICAgICAhR0VUX1dTQV9QT0lOVEVSKHMsIENvbm5lY3RFeCkgfHwKKyAgICAgICAgIUdFVF9XU0FfUE9JTlRFUihzLCBEaXNjb25uZWN0RXgpKQorICAgIHsKKyAgICAgICAgY2xvc2Vzb2NrZXQocyk7CisgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNsb3Nlc29ja2V0KHMpOworCisgICAgLyogT24gV2luWFAgd2Ugd2lsbCBoYXZlIFB5X0NhbmNlbElvRXggPT0gTlVMTCAqLworICAgIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZSgiS0VSTkVMMzIiKTsKKyAgICAqKEZBUlBST0MgKikmUHlfQ2FuY2VsSW9FeCA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwgIkNhbmNlbElvRXgiKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXBsZXRpb24gcG9ydCBzdHVmZgorICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0X2RvYywKKyAgICAiQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChoYW5kbGUsIHBvcnQsIGtleSwgY29uY3VycmVuY3kpIC0+IHBvcnRcblxuIgorICAgICJDcmVhdGUgYSBjb21wbGV0aW9uIHBvcnQgb3IgcmVnaXN0ZXIgYSBoYW5kbGUgd2l0aCBhIHBvcnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0NyZWF0ZUlvQ29tcGxldGlvblBvcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBGaWxlSGFuZGxlOworICAgIEhBTkRMRSBFeGlzdGluZ0NvbXBsZXRpb25Qb3J0OworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5OworICAgIERXT1JEIE51bWJlck9mQ29uY3VycmVudFRocmVhZHM7CisgICAgSEFORExFIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSBGX1VMT05HX1BUUiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUhhbmRsZSwgJkV4aXN0aW5nQ29tcGxldGlvblBvcnQsICZDb21wbGV0aW9uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IENyZWF0ZUlvQ29tcGxldGlvblBvcnQoRmlsZUhhbmRsZSwgRXhpc3RpbmdDb21wbGV0aW9uUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25LZXksIE51bWJlck9mQ29uY3VycmVudFRocmVhZHMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgcmV0KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jLAorICAgICJHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHBvcnQsIG1zZWNzKSAtPiAoZXJyLCBieXRlcywga2V5LCBhZGRyZXNzKVxuXG4iCisgICAgIkdldCBhIG1lc3NhZ2UgZnJvbSBjb21wbGV0aW9uIHBvcnQuICBXYWl0IGZvciB1cCB0byBtc2VjcyBtaWxsaXNlY29uZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydCA9IE5VTEw7CisgICAgRFdPUkQgTnVtYmVyT2ZCeXRlcyA9IDA7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXkgPSAwOworICAgIE9WRVJMQVBQRUQgKk92ZXJsYXBwZWQgPSBOVUxMOworICAgIERXT1JEIE1pbGxpc2Vjb25kczsKKyAgICBEV09SRCBlcnI7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25Qb3J0LCAmTWlsbGlzZWNvbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhDb21wbGV0aW9uUG9ydCwgJk51bWJlck9mQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvbktleSwgJk92ZXJsYXBwZWQsIE1pbGxpc2Vjb25kcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoT3ZlcmxhcHBlZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChlcnIgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0RXT1JEIEZfRFdPUkQgRl9VTE9OR19QVFIgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwgTnVtYmVyT2ZCeXRlcywgQ29tcGxldGlvbktleSwgT3ZlcmxhcHBlZCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2MsCisgICAgIlBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHBvcnQsIGJ5dGVzLCBrZXksIGFkZHJlc3MpIC0+IE5vbmVcblxuIgorICAgICJQb3N0IGEgbWVzc2FnZSB0byBjb21wbGV0aW9uIHBvcnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQ7CisgICAgRFdPUkQgTnVtYmVyT2ZCeXRlczsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleTsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQgRl9VTE9OR19QVFIgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvblBvcnQsICZOdW1iZXJPZkJ5dGVzLCAmQ29tcGxldGlvbktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhDb21wbGV0aW9uUG9ydCwgTnVtYmVyT2ZCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uS2V5LCBPdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEgaGFuZGxlCisgKi8KKworc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgeworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydDsKKyAgICBMUE9WRVJMQVBQRUQgT3ZlcmxhcHBlZDsKK307CisKK3N0YXRpYyBWT0lEIENBTExCQUNLCitQb3N0VG9RdWV1ZUNhbGxiYWNrKFBWT0lEIGxwUGFyYW1ldGVyLCBCT09MIFRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgKnAgPSAoc3RydWN0IFBvc3RDYWxsYmFja0RhdGEqKSBscFBhcmFtZXRlcjsKKworICAgIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHAtPkNvbXBsZXRpb25Qb3J0LCBUaW1lck9yV2FpdEZpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHAtPk92ZXJsYXBwZWQpOworICAgIC8qIGlnbm9yZSBwb3NzaWJsZSBlcnJvciEgKi8KKyAgICBQeU1lbV9GcmVlKHApOworfQorCitQeURvY19TVFJWQVIoCisgICAgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvYywKKyAgICAiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKE9iamVjdCwgQ29tcGxldGlvblBvcnQsIE92ZXJsYXBwZWQsIFRpbWVvdXQpXG4iCisgICAgIiAgICAtPiBXYWl0SGFuZGxlXG5cbiIKKyAgICAiUmVnaXN0ZXIgd2FpdCBmb3IgT2JqZWN0OyB3aGVuIGNvbXBsZXRlIENvbXBsZXRpb25Qb3J0IGlzIG5vdGlmaWVkLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1JlZ2lzdGVyV2FpdFdpdGhRdWV1ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIE5ld1dhaXRPYmplY3Q7CisgICAgSEFORExFIE9iamVjdDsKKyAgICBVTE9ORyBNaWxsaXNlY29uZHM7CisgICAgc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgZGF0YSwgKnBkYXRhOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFIEZfUE9JTlRFUiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS5Db21wbGV0aW9uUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEuT3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcGRhdGEgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhKSk7CisgICAgaWYgKHBkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKworICAgICpwZGF0YSA9IGRhdGE7CisKKyAgICBpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICZOZXdXYWl0T2JqZWN0LCBPYmplY3QsIChXQUlUT1JUSU1FUkNBTExCQUNLKVBvc3RUb1F1ZXVlQ2FsbGJhY2ssCisgICAgICAgICAgICBwZGF0YSwgTWlsbGlzZWNvbmRzLAorICAgICAgICAgICAgV1RfRVhFQ1VURUlOV0FJVFRIUkVBRCB8IFdUX0VYRUNVVEVPTkxZT05DRSkpCisgICAgeworICAgICAgICBQeU1lbV9GcmVlKHBkYXRhKTsKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIH0KKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBOZXdXYWl0T2JqZWN0KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFVucmVnaXN0ZXJXYWl0X2RvYywKKyAgICAiVW5yZWdpc3RlcldhaXQoV2FpdEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlVucmVnaXN0ZXIgd2FpdCBoYW5kbGUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBXYWl0SGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmV2FpdEhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFVucmVnaXN0ZXJXYWl0KFdhaXRIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogRXZlbnQgZnVuY3Rpb25zIC0tIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdHMKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQ3JlYXRlRXZlbnRfZG9jLAorICAgICJDcmVhdGVFdmVudChFdmVudEF0dHJpYnV0ZXMsIE1hbnVhbFJlc2V0LCBJbml0aWFsU3RhdGUsIE5hbWUpIgorICAgICIgLT4gSGFuZGxlXG5cbiIKKyAgICAiQ3JlYXRlIGFuIGV2ZW50LiAgRXZlbnRBdHRyaWJ1dGVzIG11c3QgYmUgTm9uZS5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9DcmVhdGVFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKkV2ZW50QXR0cmlidXRlczsKKyAgICBCT09MIE1hbnVhbFJlc2V0OworICAgIEJPT0wgSW5pdGlhbFN0YXRlOworICAgIFB5X1VOSUNPREUgKk5hbWU7CisgICAgSEFORExFIEV2ZW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiBGX0JPT0wgRl9CT09MICJaIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkV2ZW50QXR0cmlidXRlcywgJk1hbnVhbFJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5pdGlhbFN0YXRlLCAmTmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKEV2ZW50QXR0cmlidXRlcyAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiRXZlbnRBdHRyaWJ1dGVzIG11c3QgYmUgTm9uZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgRXZlbnQgPSBDcmVhdGVFdmVudFcoTlVMTCwgTWFudWFsUmVzZXQsIEluaXRpYWxTdGF0ZSwgTmFtZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChFdmVudCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIEV2ZW50KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFNldEV2ZW50X2RvYywKKyAgICAiU2V0RXZlbnQoSGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiU2V0IGV2ZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1NldEV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgSGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gU2V0RXZlbnQoSGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFJlc2V0RXZlbnRfZG9jLAorICAgICJSZXNldEV2ZW50KEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlJlc2V0IGV2ZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1Jlc2V0RXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBSZXNldEV2ZW50KEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBCaW5kIHNvY2tldCBoYW5kbGUgdG8gbG9jYWwgcG9ydCB3aXRob3V0IGRvaW5nIHNsb3cgZ2V0YWRkcmluZm8oKQorICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBCaW5kTG9jYWxfZG9jLAorICAgICJCaW5kTG9jYWwoaGFuZGxlLCBmYW1pbHkpIC0+IE5vbmVcblxuIgorICAgICJCaW5kIGEgc29ja2V0IGhhbmRsZSB0byBhbiBhcmJpdHJhcnkgbG9jYWwgcG9ydC5cbiIKKyAgICAiZmFtaWx5IHNob3VsZCBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0JpbmRMb2NhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIFNvY2tldDsKKyAgICBpbnQgRmFtaWx5OworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJpIiwgJlNvY2tldCwgJkZhbWlseSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKEZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIGFkZHIuc2luX3BvcnQgPSAwOworICAgICAgICBhZGRyLnNpbl9hZGRyLlNfdW4uU19hZGRyID0gSU5BRERSX0FOWTsKKyAgICAgICAgcmV0ID0gYmluZChTb2NrZXQsIChTT0NLQUREUiopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gU09DS0VUX0VSUk9SOworICAgIH0gZWxzZSBpZiAoRmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGFkZHIuc2luNl9wb3J0ID0gMDsKKyAgICAgICAgYWRkci5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKyAgICAgICAgcmV0ID0gYmluZChTb2NrZXQsIChTT0NLQUREUiopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gU09DS0VUX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZXhwZWN0ZWQgdHVwbGUgb2YgbGVuZ3RoIDIgb3IgNCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBvcy5zdHJlcnJvcigpIC0tIGNvbXBhcmUgX2N0eXBlcy9jYWxscHJvYy5jCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIEZvcm1hdE1lc3NhZ2VfZG9jLAorICAgICJGb3JtYXRNZXNzYWdlKGVycm9yX2NvZGUpIC0+IGVycm9yX21lc3NhZ2VcblxuIgorICAgICJSZXR1cm4gZXJyb3IgbWVzc2FnZSBmb3IgYW4gZXJyb3IgY29kZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfRm9ybWF0TWVzc2FnZShQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBEV09SRCBjb2RlLCBuOworICAgIFdDSEFSICpscE1zZ0J1ZjsKKyAgICBQeU9iamVjdCAqcmVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfRFdPUkQsICZjb2RlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuID0gRm9ybWF0TWVzc2FnZVcoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJMQU5HX0RFRkFVTFQpLAorICAgICAgICAgICAgICAgICAgICAgICAoTFBXU1RSKSAmbHBNc2dCdWYsCisgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChuKSB7CisgICAgICAgIHdoaWxlIChpc3dzcGFjZShscE1zZ0J1ZltuLTFdKSkKKyAgICAgICAgICAgIC0tbjsKKyAgICAgICAgbHBNc2dCdWZbbl0gPSBMJ1wwJzsKKyAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgidSIsIGxwTXNnQnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgidW5rbm93biBlcnJvciBjb2RlICV1IiwgY29kZSk7CisgICAgfQorICAgIExvY2FsRnJlZShscE1zZ0J1Zik7CisgICAgcmV0dXJuIHJlczsKK30KKworCisvKgorICogTWFyayBvcGVyYXRpb24gYXMgY29tcGxldGVkIC0gdXNlZCB3aGVuIHJlYWRpbmcgcHJvZHVjZXMgRVJST1JfQlJPS0VOX1BJUEUKKyAqLworCitzdGF0aWMgdm9pZAorbWFya19hc19jb21wbGV0ZWQoT1ZFUkxBUFBFRCAqb3YpCit7CisgICAgb3YtPkludGVybmFsID0gMDsKKyAgICBpZiAob3YtPmhFdmVudCAhPSBOVUxMKQorICAgICAgICBTZXRFdmVudChvdi0+aEV2ZW50KTsKK30KKworLyoKKyAqIEEgUHl0aG9uIG9iamVjdCB3cmFwcGluZyBhbiBPVkVSTEFQUEVEIHN0cnVjdHVyZSBhbmQgb3RoZXIgdXNlZnVsIGRhdGEKKyAqIGZvciBvdmVybGFwcGVkIEkvTworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2RvYywKKyAgICAiT3ZlcmxhcHBlZCBvYmplY3QiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIE92ZXJsYXBwZWRPYmplY3QgKnNlbGY7CisgICAgSEFORExFIGV2ZW50ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJldmVudCIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInwiIEZfSEFORExFLCBrd2xpc3QsICZldmVudCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGV2ZW50ID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworICAgICAgICBpZiAoZXZlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICB9CisKKyAgICBzZWxmID0gUHlPYmplY3RfTmV3KE92ZXJsYXBwZWRPYmplY3QsIHR5cGUpOworICAgIGlmIChzZWxmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGV2ZW50ICE9IE5VTEwpCisgICAgICAgICAgICBDbG9zZUhhbmRsZShldmVudCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPmhhbmRsZSA9IE5VTEw7CisgICAgc2VsZi0+ZXJyb3IgPSAwOworICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PTkU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBOVUxMOworICAgIG1lbXNldCgmc2VsZi0+b3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKE9WRVJMQVBQRUQpKTsKKyAgICBtZW1zZXQoJnNlbGYtPndyaXRlX2J1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOworICAgIGlmIChldmVudCkKKyAgICAgICAgc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQgPSBldmVudDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworc3RhdGljIHZvaWQKK092ZXJsYXBwZWRfZGVhbGxvYyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIERXT1JEIGJ5dGVzOworICAgIERXT1JEIG9sZGVyciA9IEdldExhc3RFcnJvcigpOworICAgIEJPT0wgd2FpdCA9IEZBTFNFOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCkKKyAgICB7CisgICAgICAgIGlmIChQeV9DYW5jZWxJb0V4ICYmIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkpCisgICAgICAgICAgICB3YWl0ID0gVFJVRTsKKworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJldCA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXMsIHdhaXQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIHN3aXRjaCAocmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgICAgICBjYXNlIEVSUk9SX05PVF9GT1VORDoKKyAgICAgICAgICAgIGNhc2UgRVJST1JfT1BFUkFUSU9OX0FCT1JURUQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiJVIgc3RpbGwgaGFzIHBlbmRpbmcgb3BlcmF0aW9uIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgImRlYWxsb2NhdGlvbiwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIiwgc2VsZik7CisgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50ICE9IE5VTEwpCisgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKKworICAgIGlmIChzZWxmLT53cml0ZV9idWZmZXIub2JqKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworCisgICAgc3dpdGNoIChzZWxmLT50eXBlKSB7CisgICAgICAgIGNhc2UgVFlQRV9SRUFEOgorICAgICAgICBjYXNlIFRZUEVfQUNDRVBUOgorICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZF9idWZmZXIpOworICAgIH0KKyAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgU2V0TGFzdEVycm9yKG9sZGVycik7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2NhbmNlbF9kb2MsCisgICAgImNhbmNlbCgpIC0+IE5vbmVcblxuIgorICAgICJDYW5jZWwgb3ZlcmxhcHBlZCBvcGVyYXRpb24iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfY2FuY2VsKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgQk9PTCByZXQgPSBUUlVFOworCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT1RfU1RBUlRFRAorICAgICAgICB8fCBzZWxmLT50eXBlID09IFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIGlmICghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChQeV9DYW5jZWxJb0V4KQorICAgICAgICAgICAgcmV0ID0gUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gQ2FuY2VsSW8oc2VsZi0+aGFuZGxlKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisKKyAgICAvKiBDYW5jZWxJb0V4IHJldHVybnMgRVJST1JfTk9UX0ZPVU5EIGlmIHRoZSBJL08gY29tcGxldGVkIGluLWJldHdlZW4gKi8KKyAgICBpZiAoIXJldCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT1RfRk9VTkQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfZ2V0cmVzdWx0X2RvYywKKyAgICAiZ2V0cmVzdWx0KHdhaXQ9RmFsc2UpIC0+IHJlc3VsdFxuXG4iCisgICAgIlJldHJpZXZlIHJlc3VsdCBvZiBvcGVyYXRpb24uICBJZiB3YWl0IGlzIHRydWUgdGhlbiBpdCBibG9ja3NcbiIKKyAgICAidW50aWwgdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4gIElmIHdhaXQgaXMgZmFsc2UgYW5kIHRoZVxuIgorICAgICJvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZyB0aGVuIGFuIGVycm9yIGlzIHJhaXNlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfZ2V0cmVzdWx0KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEJPT0wgd2FpdCA9IEZBTFNFOworICAgIERXT1JEIHRyYW5zZmVycmVkID0gMDsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInwiIEZfQk9PTCwgJndhaXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBub3QgeWV0IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PVF9TVEFSVEVEKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGZhaWxlZCB0byBzdGFydCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmdHJhbnNmZXJyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOgorICAgICAgICAgICAgaWYgKHNlbGYtPnJlYWRfYnVmZmVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKworICAgIHN3aXRjaCAoc2VsZi0+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+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBPdmVybGFwcGVkX21ldGhvZHNbXSA9IHsKKyAgICB7ImdldHJlc3VsdCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9nZXRyZXN1bHQsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9nZXRyZXN1bHRfZG9jfSwKKyAgICB7ImNhbmNlbCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9jYW5jZWwsCisgICAgIE1FVEhfTk9BUkdTLCBPdmVybGFwcGVkX2NhbmNlbF9kb2N9LAorICAgIHsiUmVhZEZpbGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfUmVhZEZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2N9LAorICAgIHsiV1NBUmVjdiIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FSZWN2LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2N9LAorICAgIHsiV3JpdGVGaWxlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dyaXRlRmlsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dyaXRlRmlsZV9kb2N9LAorICAgIHsiV1NBU2VuZCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FTZW5kLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2N9LAorICAgIHsiQWNjZXB0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQWNjZXB0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9BY2NlcHRFeF9kb2N9LAorICAgIHsiQ29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2N9LAorICAgIHsiRGlzY29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2N9LAorICAgIHsiQ29ubmVjdE5hbWVkUGlwZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZV9kb2N9LAorICAgIHsiV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QiLAorICAgICAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfV2FpdE5hbWVkUGlwZUFuZENvbm5lY3QsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9XYWl0TmFtZWRQaXBlQW5kQ29ubmVjdF9kb2N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIE92ZXJsYXBwZWRfbWVtYmVyc1tdID0geworICAgIHsiZXJyb3IiLCBUX1VMT05HLAorICAgICBvZmZzZXRvZihPdmVybGFwcGVkT2JqZWN0LCBlcnJvciksCisgICAgIFJFQURPTkxZLCAiRXJyb3IgZnJvbSBsYXN0IG9wZXJhdGlvbiJ9LAorICAgIHsiZXZlbnQiLCBUX0hBTkRMRSwKKyAgICAgb2Zmc2V0b2YoT3ZlcmxhcHBlZE9iamVjdCwgb3ZlcmxhcHBlZCkgKyBvZmZzZXRvZihPVkVSTEFQUEVELCBoRXZlbnQpLAorICAgICBSRUFET05MWSwgIk92ZXJsYXBwZWQgZXZlbnQgaGFuZGxlIn0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgT3ZlcmxhcHBlZF9nZXRzZXRzW10gPSB7CisgICAgeyJhZGRyZXNzIiwgKGdldHRlcilPdmVybGFwcGVkX2dldGFkZHJlc3MsIE5VTEwsCisgICAgICJBZGRyZXNzIG9mIG92ZXJsYXBwZWQgc3RydWN0dXJlIn0sCisgICAgeyJwZW5kaW5nIiwgKGdldHRlcilPdmVybGFwcGVkX2dldHBlbmRpbmcsIE5VTEwsCisgICAgICJXaGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgcGVuZGluZyJ9LAorICAgIHtOVUxMfSwKK307CisKK1B5VHlwZU9iamVjdCBPdmVybGFwcGVkVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCIsCisgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKE92ZXJsYXBwZWRPYmplY3QpLAorICAgIC8qIHRwX2l0ZW1zaXplICAgICAgICovIDAsCisgICAgLyogdHBfZGVhbGxvYyAgICAgICAgKi8gKGRlc3RydWN0b3IpIE92ZXJsYXBwZWRfZGVhbGxvYywKKyAgICAvKiB0cF9wcmludCAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXNlcnZlZCAgICAgICAqLyAwLAorICAgIC8qIHRwX3JlcHIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYXNfbnVtYmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19zZXF1ZW5jZSAgICAqLyAwLAorICAgIC8qIHRwX2FzX21hcHBpbmcgICAgICovIDAsCisgICAgLyogdHBfaGFzaCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jYWxsICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3N0ciAgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX2J1ZmZlciAgICAgICovIDAsCisgICAgLyogdHBfZmxhZ3MgICAgICAgICAgKi8gUHlfVFBGTEFHU19ERUZBVUxULAorICAgIC8qIHRwX2RvYyAgICAgICAgICAgICovICJPVkVSTEFQUEVEIHN0cnVjdHVyZSB3cmFwcGVyIiwKKyAgICAvKiB0cF90cmF2ZXJzZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2NsZWFyICAgICAgICAgICovIDAsCisgICAgLyogdHBfcmljaGNvbXBhcmUgICAgKi8gMCwKKyAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyAwLAorICAgIC8qIHRwX2l0ZXIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfaXRlcm5leHQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9tZXRob2RzICAgICAgICAqLyBPdmVybGFwcGVkX21ldGhvZHMsCisgICAgLyogdHBfbWVtYmVycyAgICAgICAgKi8gT3ZlcmxhcHBlZF9tZW1iZXJzLAorICAgIC8qIHRwX2dldHNldCAgICAgICAgICovIE92ZXJsYXBwZWRfZ2V0c2V0cywKKyAgICAvKiB0cF9iYXNlICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3QgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZGVzY3JfZ2V0ICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZXNjcl9zZXQgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3RvZmZzZXQgICAgICovIDAsCisgICAgLyogdHBfaW5pdCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIE92ZXJsYXBwZWRfbmV3LAorfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIG92ZXJsYXBwZWRfZnVuY3Rpb25zW10gPSB7CisgICAgeyJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0Iiwgb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0LAorICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUlvQ29tcGxldGlvblBvcnRfZG9jfSwKKyAgICB7IkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMsCisgICAgIE1FVEhfVkFSQVJHUywgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2N9LAorICAgIHsiUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzLAorICAgICBNRVRIX1ZBUkFSR1MsIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvY30sCisgICAgeyJGb3JtYXRNZXNzYWdlIiwgb3ZlcmxhcHBlZF9Gb3JtYXRNZXNzYWdlLAorICAgICBNRVRIX1ZBUkFSR1MsIEZvcm1hdE1lc3NhZ2VfZG9jfSwKKyAgICB7IkJpbmRMb2NhbCIsIG92ZXJsYXBwZWRfQmluZExvY2FsLAorICAgICBNRVRIX1ZBUkFSR1MsIEJpbmRMb2NhbF9kb2N9LAorICAgIHsiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlIiwgb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUsCisgICAgIE1FVEhfVkFSQVJHUywgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvY30sCisgICAgeyJVbnJlZ2lzdGVyV2FpdCIsIG92ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQsCisgICAgIE1FVEhfVkFSQVJHUywgVW5yZWdpc3RlcldhaXRfZG9jfSwKKyAgICB7IkNyZWF0ZUV2ZW50Iiwgb3ZlcmxhcHBlZF9DcmVhdGVFdmVudCwKKyAgICAgTUVUSF9WQVJBUkdTLCBDcmVhdGVFdmVudF9kb2N9LAorICAgIHsiU2V0RXZlbnQiLCBvdmVybGFwcGVkX1NldEV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIFNldEV2ZW50X2RvY30sCisgICAgeyJSZXNldEV2ZW50Iiwgb3ZlcmxhcHBlZF9SZXNldEV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIFJlc2V0RXZlbnRfZG9jfSwKKyAgICB7TlVMTH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgb3ZlcmxhcHBlZF9tb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfb3ZlcmxhcHBlZCIsCisgICAgTlVMTCwKKyAgICAtMSwKKyAgICBvdmVybGFwcGVkX2Z1bmN0aW9ucywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCisjZGVmaW5lIFdJTkFQSV9DT05TVEFOVChmbXQsIGNvbikgXAorICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICNjb24sIFB5X0J1aWxkVmFsdWUoZm10LCBjb24pKQorCitQeU1PRElOSVRfRlVOQworUHlJbml0X19vdmVybGFwcGVkKHZvaWQpCit7CisgICAgUHlPYmplY3QgKm0sICpkOworCisgICAgLyogRW5zdXJlIFdTQVN0YXJ0dXAoKSBjYWxsZWQgYmVmb3JlIGluaXRpYWxpemluZyBmdW5jdGlvbiBwb2ludGVycyAqLworICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIl9zb2NrZXQiKTsKKyAgICBpZiAoIW0pCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihtKTsKKworICAgIGlmIChpbml0aWFsaXplX2Z1bmN0aW9uX3BvaW50ZXJzKCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeVR5cGVfUmVhZHkoJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmb3ZlcmxhcHBlZF9tb2R1bGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIk92ZXJsYXBwZWQiLCAoUHlPYmplY3QgKikmT3ZlcmxhcHBlZFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKKworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfSU9fUEVORElORyk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBFUlJPUl9ORVROQU1FX0RFTEVURUQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfU0VNX1RJTUVPVVQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgSU5GSU5JVEUpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0hBTkRMRSwgSU5WQUxJRF9IQU5ETEVfVkFMVUUpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0hBTkRMRSwgTlVMTCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBTT19VUERBVEVfQUNDRVBUX0NPTlRFWFQpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBURl9SRVVTRV9TT0NLRVQpOworCisgICAgcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwppbmRleCBlODZmZTRkLi41MzdhMmU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCisrKyBiL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKQEAgLTgzLDU0ICs4Myw3OCBAQAogICAgICAgICAgICBpbnQgbGluZW5vLCAgICAgICAgICAgICAgICAgIC8qIGluY2x1ZGUgbGluZSBudW1iZXJzPyAgICAgICAgICovCiAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0KSAgICAgICAgICAgICAgLyogaW5jbHVkZSBjb2x1bW4gb2Zmc2V0cz8gICAgICAgKi8KIHsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKnc7CisKICAgICBpZiAobiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIChQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQorCiAgICAgaWYgKElTTk9OVEVSTUlOQUwoVFlQRShuKSkpIHsKICAgICAgICAgaW50IGk7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICBQeU9iamVjdCAqdzsKIAotICAgICAgICB2ID0gbWtzZXEoMSArIE5DSChuKSArIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAodik7CisgICAgICAgIHJlc3VsdCA9IG1rc2VxKDEgKyBOQ0gobikgKyAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKTsKLSAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKLSAgICAgICAgfQotICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCAwLCB3KTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgdyk7CisKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSsrKSB7CiAgICAgICAgICAgICB3ID0gbm9kZTJ0dXBsZShDSElMRChuLCBpKSwgbWtzZXEsIGFkZGVsZW0sIGxpbmVubywgY29sX29mZnNldCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbSh2LCBpKzEsIHcpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCBpKzEsIHcpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIGkrMSwgUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKSk7Ci0gICAgICAgIHJldHVybiAodik7CisgICAgICAgIGlmIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpIHsKKyAgICAgICAgICAgIHcgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpOworICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCBpKzEsIHcpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKElTVEVSTUlOQUwoVFlQRShuKSkpIHsKLSAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IG1rc2VxKDIgKyBsaW5lbm8gKyBjb2xfb2Zmc2V0KTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDAsIFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKSk7Ci0gICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSkpOwotICAgICAgICAgICAgaWYgKGxpbmVubyA9PSAxKQotICAgICAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMiwgUHlMb25nX0Zyb21Mb25nKG4tPm5fbGluZW5vKSk7Ci0gICAgICAgICAgICBpZiAoY29sX29mZnNldCA9PSAxKQotICAgICAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMywgUHlMb25nX0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCkpOworICAgICAgICByZXN1bHQgPSBta3NlcSgyICsgbGluZW5vICsgY29sX29mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhUWVBFKG4pKTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgdyk7CisKKyAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSk7CisgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDEsIHcpOworCisgICAgICAgIGlmIChsaW5lbm8gPT0gMSkgeworICAgICAgICAgICAgdyA9IFB5TG9uZ19Gcm9tTG9uZyhuLT5uX2xpbmVubyk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDIsIHcpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiAocmVzdWx0KTsKKworICAgICAgICBpZiAoY29sX29mZnNldCA9PSAxKSB7CisgICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKG4tPm5fY29sX29mZnNldCk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIDMsIHcpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5yZWNvZ25pemVkIHBhcnNlIHRyZWUgbm9kZSB0eXBlIik7CiAgICAgICAgIHJldHVybiAoKFB5T2JqZWN0KikgTlVMTCk7CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIC8qCiAgKiAgRW5kIG9mIG1hdGVyaWFsIGNvcHlyaWdodGVkIGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KQEAgLTQ1MywzMyArNDc3LDQ2IEBACiBzdGF0aWMgUHlPYmplY3QqCiBwYXJzZXJfY29tcGlsZXN0KFB5U1RfT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQogewotICAgIFB5T2JqZWN0KiAgICAgcmVzID0gMDsKLSAgICBQeUFyZW5hKiAgICAgIGFyZW5hOworICAgIFB5T2JqZWN0KiAgICAgcmVzID0gTlVMTDsKKyAgICBQeUFyZW5hKiAgICAgIGFyZW5hID0gTlVMTDsKICAgICBtb2RfdHkgICAgICAgIG1vZDsKLSAgICBjaGFyKiAgICAgICAgIHN0ciA9ICI8c3ludGF4LXRyZWU+IjsKKyAgICBQeU9iamVjdCogICAgIGZpbGVuYW1lID0gTlVMTDsKICAgICBpbnQgb2s7CiAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsic3QiLCAiZmlsZW5hbWUiLCBOVUxMfTsKIAogICAgIGlmIChzZWxmID09IE5VTEwgfHwgUHlNb2R1bGVfQ2hlY2soc2VsZikpCi0gICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiTyF8czpjb21waWxlc3QiLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5U1RfVHlwZSwgJnNlbGYsICZzdHIpOworICAgICAgICBvayA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgIk8hfE8mOmNvbXBpbGVzdCIsIGtleXdvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlTVF9UeXBlLCAmc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lKTsKICAgICBlbHNlCi0gICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifHM6Y29tcGlsZSIsICZrZXl3b3Jkc1sxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE8mOmNvbXBpbGUiLCAma2V5d29yZHNbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSk7CisgICAgaWYgKCFvaykKKyAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGlmIChvaykgewotICAgICAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7Ci0gICAgICAgIGlmIChhcmVuYSkgewotICAgICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShzZWxmLT5zdF9ub2RlLCAmKHNlbGYtPnN0X2ZsYWdzKSwgc3RyLCBhcmVuYSk7Ci0gICAgICAgICAgIGlmIChtb2QpIHsKLSAgICAgICAgICAgICAgIHJlcyA9IChQeU9iamVjdCAqKVB5QVNUX0NvbXBpbGUobW9kLCBzdHIsICYoc2VsZi0+c3RfZmxhZ3MpLCBhcmVuYSk7Ci0gICAgICAgICAgIH0KLSAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICAgICAgfQorICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxzeW50YXgtdHJlZT4iKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIHJldHVybiAocmVzKTsKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgaWYgKCFhcmVuYSkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KHNlbGYtPnN0X25vZGUsICZzZWxmLT5zdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgYXJlbmEpOworICAgIGlmICghbW9kKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgcmVzID0gKFB5T2JqZWN0ICopUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNlbGYtPnN0X2ZsYWdzLCAtMSwgYXJlbmEpOworZXJyb3I6CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgaWYgKGFyZW5hICE9IE5VTEwpCisgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogCkBAIC04MDksOCArODQ2LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzdHJuID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAoc3RybiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkoc3RybiwgdGVtcF9zdHIsIGxlbiArIDEpOworICAgICAgICAgICAgaWYgKHN0cm4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICghSVNOT05URVJNSU5BTCh0eXBlKSkgewpAQCAtODcwLDcgKzkxMiw3IEBACiAgICAgICAgICAqICBUaGUgdHVwbGUgaXMgc2ltcGxlLCBidXQgaXQgZG9lc24ndCBzdGFydCB3aXRoIGEgc3RhcnQgc3ltYm9sLgogICAgICAgICAgKiAgUmFpc2UgYW4gZXhjZXB0aW9uIG5vdyBhbmQgYmUgZG9uZSB3aXRoIGl0LgogICAgICAgICAgKi8KLSAgICAgICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCJvcyIsIHR1cGxlLAorICAgICAgICB0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIk9zIiwgdHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICJJbGxlZ2FsIHN5bnRheC10cmVlOyBjYW5ub3Qgc3RhcnQgd2l0aCB0ZXJtaW5hbCBzeW1ib2wuIik7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChwYXJzZXJfZXJyb3IsIHR1cGxlKTsKICAgICAgICAgUHlfWERFQ1JFRih0dXBsZSk7CkBAIC05MDYsOCArOTQ4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXMtPm5fc3RyID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgIT0gTlVMTCAmJiB0ZW1wICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jIGIvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCmluZGV4IGYzMjM0YTQuLjJmMjFjZWIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcG9zaXhtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKQEAgLTEsMTUgKzEsMTQgQEAKIAogLyogUE9TSVggbW9kdWxlIGltcGxlbWVudGF0aW9uICovCiAKLS8qIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgZm9yIFdpbmRvd3MgTlQvTVMtV2luIGFuZCBPUy8yLiAgSW4gdGhhdCBjYXNlIHRoZQotICAgbW9kdWxlIGFjdHVhbGx5IGNhbGxzIGl0c2VsZiAnbnQnIG9yICdvczInLCBub3QgJ3Bvc2l4JywgYW5kIGEgZmV3CisvKiBUaGlzIGZpbGUgaXMgYWxzbyB1c2VkIGZvciBXaW5kb3dzIE5UL01TLVdpbi4gIEluIHRoYXQgY2FzZSB0aGUKKyAgIG1vZHVsZSBhY3R1YWxseSBjYWxscyBpdHNlbGYgJ250Jywgbm90ICdwb3NpeCcsIGFuZCBhIGZldwogICAgZnVuY3Rpb25zIGFyZSBlaXRoZXIgdW5pbXBsZW1lbnRlZCBvciBpbXBsZW1lbnRlZCBkaWZmZXJlbnRseS4gIFRoZSBzb3VyY2UKICAgIGFzc3VtZXMgdGhhdCBmb3IgV2luZG93cyBOVCwgdGhlIG1hY3JvICdNU19XSU5ET1dTJyBpcyBkZWZpbmVkIGluZGVwZW5kZW50CiAgICBvZiB0aGUgY29tcGlsZXIgdXNlZC4gIERpZmZlcmVudCBjb21waWxlcnMgZGVmaW5lIHRoZWlyIG93biBmZWF0dXJlCi0gICB0ZXN0IG1hY3JvLCBlLmcuICdfX0JPUkxBTkRDX18nIG9yICdfTVNDX1ZFUicuICBGb3IgT1MvMiwgdGhlIGNvbXBpbGVyCi0gICBpbmRlcGVuZGVudCBtYWNybyBQWU9TX09TMiBzaG91bGQgYmUgZGVmaW5lZC4gIE9uIE9TLzIgdGhlIGRlZmF1bHQKLSAgIGNvbXBpbGVyIGlzIGFzc3VtZWQgdG8gYmUgSUJNJ3MgVmlzdWFsQWdlIEMrKyAoVkFDUFApLiAgUFlDQ19HQ0MgaXMgdXNlZAotICAgYXMgdGhlIGNvbXBpbGVyIHNwZWNpZmljIG1hY3JvIGZvciB0aGUgRU1YIHBvcnQgb2YgZ2NjIHRvIE9TLzIuICovCisgICB0ZXN0IG1hY3JvLCBlLmcuICdfX0JPUkxBTkRDX18nIG9yICdfTVNDX1ZFUicuICovCisKKwogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAvKgpAQCAtNDYsMjIgKzQ1LDYgQEAKIGNvcnJlc3BvbmRpbmcgVW5peCBtYW51YWwgZW50cmllcyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjYWxscy4iKTsKIAogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLSNkZWZpbmUgIElOQ0xfRE9TCi0jZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSAgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lICBJTkNMX05PUE1BUEkKLSNpbmNsdWRlIDxvczIuaD4KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8aW8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotI2luY2x1ZGUgIm9zZGVmcy5oIgotI2VuZGlmCi0KICNpZmRlZiBIQVZFX1NZU19VSU9fSAogI2luY2x1ZGUgPHN5cy91aW8uaD4KICNlbmRpZgpAQCAtMTMyLDYgKzExNSwxOCBAQAogI2luY2x1ZGUgPGRsZmNuLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9faHB1eAorI2luY2x1ZGUgPHN5cy9tcGN0bC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwKKyAgICBkZWZpbmVkKF9fT3BlbkJTRF9fKSAgIHx8IFwKKyAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgIHx8IFwKKyAgICBkZWZpbmVkKF9fTmV0QlNEX18pICAgIHx8IFwKKyAgICBkZWZpbmVkKF9fQVBQTEVfXykKKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjZW5kaWYKKwogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICMgIGRlZmluZSBURVJNU0laRV9VU0VfQ09OSU8KICNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkKQEAgLTE0NiwyOSArMTQxLDE5IEBACiAKIC8qIFZhcmlvdXMgY29tcGlsZXJzIGhhdmUgb25seSBjZXJ0YWluIHBvc2l4IGZ1bmN0aW9ucyAqLwogLyogWFhYIEdvc2ggSSB3aXNoIHRoZXNlIHdlcmUgYWxsIG1vdmVkIGludG8gcHljb25maWcuaCAqLwotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZWxzZQogI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKF9fUU5YX18pICAgICAgICAgICAvKiBXYXRjb20gY29tcGlsZXIgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9PUEVORElSICAgIDEKICNkZWZpbmUgSEFWRV9TWVNURU0gICAgIDEKLSNpZiBkZWZpbmVkKF9fT1MyX18pCi0jZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCi0jZW5kaWYKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZWxzZQogI2lmZGVmIF9fQk9STEFORENfXyAgICAgICAgICAgICAvKiBCb3JsYW5kIGNvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCiAjZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZWxzZQogI2lmZGVmIF9NU0NfVkVSICAgICAgICAgLyogTWljcm9zb2Z0IGNvbXBpbGVyICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VUTE9HSU4gICAxCiAjZGVmaW5lIEhBVkVfU1BBV05WICAgICAxCkBAIC0xNzksOCArMTY0LDggQEAKICNkZWZpbmUgSEFWRV9GU1lOQyAgICAgIDEKICNkZWZpbmUgZnN5bmMgX2NvbW1pdAogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSB8fCBkZWZpbmVkKF9fVk1TKQotLyogRXZlcnl0aGluZyBuZWVkZWQgaXMgZGVmaW5lZCBpbiBQQy9vczJlbXgvcHljb25maWcuaCBvciB2bXMvcHljb25maWcuaCAqLworI2lmIGRlZmluZWQoX19WTVMpCisvKiBFdmVyeXRoaW5nIG5lZWRlZCBpcyBkZWZpbmVkIGluIHZtcy9weWNvbmZpZy5oICovCiAjZWxzZSAgICAgICAgICAgICAgICAgICAvKiBhbGwgb3RoZXIgY29tcGlsZXJzICovCiAvKiBVbml4IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICovCiAjZGVmaW5lIEhBVkVfRVhFQ1YgICAgICAxCkBAIC0xODgsNyArMTczLDYgQEAKICNpZiBkZWZpbmVkKF9fVVNMQ19fKSAmJiBkZWZpbmVkKF9fU0NPX1ZFUlNJT05fXykgICAgICAgLyogU0NPIFVESyBDb21waWxlciAqLwogI2RlZmluZSBIQVZFX0ZPUksxICAgICAgMQogI2VuZGlmCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCkBAIC0yMDAsMTQgKzE4NCwxNiBAQAogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQogI2RlZmluZSBIQVZFX1RUWU5BTUUgICAgMQotI2VuZGlmICAvKiBQWU9TX09TMiAmJiBQWUNDX0dDQyAmJiBfX1ZNUyAqLworI2VuZGlmICAvKiBfX1ZNUyAqLwogI2VuZGlmICAvKiBfTVNDX1ZFUiAqLwogI2VuZGlmICAvKiBfX0JPUkxBTkRDX18gKi8KICNlbmRpZiAgLyogISBfX1dBVENPTUNfXyB8fCBfX1FOWF9fICovCi0jZW5kaWYgLyogISBfX0lCTUNfXyAqLwogCiAKLQorLypbY2xpbmljXQorbW9kdWxlIG9zCitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KIAogI2lmbmRlZiBfTVNDX1ZFUgogCkBAIC0zMzUsMTAgKzMyMSw2IEBACiAjZW5kaWYKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KICNpZm5kZWYgTUFYUEFUSExFTgogI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAogI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCkBAIC0zODAsNyArMzYyLDcgQEAKICN1bmRlZiBTVEFUCiAjdW5kZWYgRlNUQVQKICN1bmRlZiBTVFJVQ1RfU1RBVAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgIGRlZmluZSBTVEFUIHdpbjMyX3N0YXQKICMgICAgICAgZGVmaW5lIExTVEFUIHdpbjMyX2xzdGF0CiAjICAgICAgIGRlZmluZSBGU1RBVCB3aW4zMl9mc3RhdApAQCAtNDAzLDYgKzM4NSw4IEBACiAjZW5kaWYKICNlbmRpZgogCisjZGVmaW5lIERXT1JEX01BWCA0Mjk0OTY3Mjk1VQorCiAKICNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgaW50CkBAIC00MzYsMTA4ICs0MjAsMjEzIEBACiBpbnQKIF9QeV9VaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgdWlkX3QgdWlkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInVpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIHVpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh1aWRfdCl1cmVzdWx0ID09ICh1aWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIHVpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCB1aWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICB1aWQgPSAodWlkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KICAgICAgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh1aWRfdCl1cmVzdWx0ICE9IHVyZXN1bHQpCi0gICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICoodWlkX3QgKilwID0gKHVpZF90KXVyZXN1bHQ7CisgICAgICAgICAgICAobG9uZyl1aWQgIT0gcmVzdWx0KQorICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICB9CisKKyAgICBpZiAob3ZlcmZsb3cgPCAwKQorICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgIC8qCisgICAgICogT2theSwgdGhlIHZhbHVlIG92ZXJmbG93ZWQgYSBzaWduZWQgbG9uZy4gIElmIGl0CisgICAgICogZml0cyBpbiBhbiAqdW5zaWduZWQqIGxvbmcsIGl0IG1heSBzdGlsbCBiZSBva2F5LAorICAgICAqIGFzIHVpZF90IG1heSBiZSB1bnNpZ25lZCBsb25nIG9uIHRoaXMgcGxhdGZvcm0uCisgICAgICovCisgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhpbmRleCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgdWlkID0gKHVpZF90KXVyZXN1bHQ7CisKKyAgICAvKgorICAgICAqIElmIHVpZCA9PSAodWlkX3QpLTEsIHRoZSB1c2VyIGFjdHVhbGx5IHBhc3NlZCBpbiBVTE9OR19NQVgsCisgICAgICogYnV0IHRoaXMgdmFsdWUgd291bGQgZ2V0IGludGVycHJldGVkIGFzICh1aWRfdCktMSAgYnkgY2hvd24KKyAgICAgKiBhbmQgaXRzIHNpYmxpbmdzLiAgIFRoYXQncyBub3Qgd2hhdCB0aGUgdXNlciBtZWFudCEgIFNvIHdlCisgICAgICogdGhyb3cgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIGluc3RlYWQuICAgKFdlIGFscmVhZHkKKyAgICAgKiBoYW5kbGVkIGEgcmVhbCAtMSB3aXRoIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdygpIGFib3ZlLikKKyAgICAgKi8KKyAgICBpZiAodWlkID09ICh1aWRfdCktMSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKworICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KKyAgICBpZiAoc2l6ZW9mKHVpZF90KSA8IHNpemVvZihsb25nKSAmJgorICAgICAgICAodW5zaWduZWQgbG9uZyl1aWQgIT0gdXJlc3VsdCkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitzdWNjZXNzOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CisgICAgKih1aWRfdCAqKXAgPSB1aWQ7CiAgICAgcmV0dXJuIDE7CiAKLU92ZXJmbG93RG93bjoKK3VuZGVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAidXNlciBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAidWlkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKIF9QeV9HaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgZ2lkX3QgZ2lkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImdpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIGdpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChnaWRfdCl1cmVzdWx0ID09IChnaWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIGdpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCBnaWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICBnaWQgPSAoZ2lkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIH0KKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykoZ2lkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpZ2lkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyBnaWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGdpZCA9IChnaWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiBnaWQgPT0gKGdpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAoZ2lkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKGdpZCA9PSAoZ2lkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZihnaWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpZ2lkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICooZ2lkX3QgKilwID0gZ2lkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwotICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgZ290byBmYWlsOwogCi1PdmVyZmxvd1VwOgorb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTU2MCwyNSArNjQ5LDI5IEBACiBfZmRfY29udmVydGVyKFB5T2JqZWN0ICpvLCBpbnQgKnAsIGNvbnN0IGNoYXIgKmFsbG93ZWQpCiB7CiAgICAgaW50IG92ZXJmbG93OwotICAgIGxvbmcgbG9uZ192YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvLCAmb3ZlcmZsb3cpOwotICAgIGlmIChQeUZsb2F0X0NoZWNrKG8pIHx8Ci0gICAgICAgIChsb25nX3ZhbHVlID09IC0xICYmICFvdmVyZmxvdyAmJiBQeUVycl9PY2N1cnJlZCgpKSkgewotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIGxvbmcgbG9uZ192YWx1ZTsKKworICAgIFB5T2JqZWN0ICppbmRleCA9IFB5TnVtYmVyX0luZGV4KG8pOworICAgIGlmIChpbmRleCA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlICVzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQsIFB5X1RZUEUobyktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSAlcywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBhbGxvd2VkLCBQeV9UWVBFKG8pLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCisgICAgbG9uZ192YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhpbmRleCwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIGlmIChvdmVyZmxvdyA+IDAgfHwgbG9uZ192YWx1ZSA+IElOVF9NQVgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJmZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKG92ZXJmbG93IDwgMCB8fCBsb25nX3ZhbHVlIDwgSU5UX01JTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzaWduZWQgaW50ZWdlciBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKwogICAgICpwID0gKGludClsb25nX3ZhbHVlOwogICAgIHJldHVybiAxOwogfQpAQCAtNjI2LDcgKzcxOSw3IEBACiAgKiAgIHBhdGguZnVuY3Rpb25fbmFtZQogICogICAgIElmIG5vbi1OVUxMLCBwYXRoX2NvbnZlcnRlciB3aWxsIHVzZSB0aGF0IGFzIHRoZSBuYW1lCiAgKiAgICAgb2YgdGhlIGZ1bmN0aW9uIGluIGVycm9yIG1lc3NhZ2VzLgotICogICAgIChJZiBwYXRoLmFyZ3VtZW50X25hbWUgaXMgTlVMTCBpdCBvbWl0cyB0aGUgZnVuY3Rpb24gbmFtZS4pCisgKiAgICAgKElmIHBhdGguZnVuY3Rpb25fbmFtZSBpcyBOVUxMIGl0IG9taXRzIHRoZSBmdW5jdGlvbiBuYW1lLikKICAqICAgcGF0aC5hcmd1bWVudF9uYW1lCiAgKiAgICAgSWYgbm9uLU5VTEwsIHBhdGhfY29udmVydGVyIHdpbGwgdXNlIHRoYXQgYXMgdGhlIG5hbWUKICAqICAgICBvZiB0aGUgcGFyYW1ldGVyIGluIGVycm9yIG1lc3NhZ2VzLgpAQCAtNjc4LDggKzc3MSw4IEBACiAgKiBwYXRoX2NsZWFudXAoKS4gIEhvd2V2ZXIgaXQgaXMgc2FmZSB0byBkbyBzby4pCiAgKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICBjaGFyICpmdW5jdGlvbl9uYW1lOwotICAgIGNoYXIgKmFyZ3VtZW50X25hbWU7CisgICAgY29uc3QgY2hhciAqZnVuY3Rpb25fbmFtZTsKKyAgICBjb25zdCBjaGFyICphcmd1bWVudF9uYW1lOwogICAgIGludCBudWxsYWJsZTsKICAgICBpbnQgYWxsb3dfZmQ7CiAgICAgd2NoYXJfdCAqd2lkZTsKQEAgLTY5MCw2ICs3ODMsOSBAQAogICAgIFB5T2JqZWN0ICpjbGVhbnVwOwogfSBwYXRoX3Q7CiAKKyNkZWZpbmUgUEFUSF9UX0lOSVRJQUxJWkUoZnVuY3Rpb25fbmFtZSwgbnVsbGFibGUsIGFsbG93X2ZkKSBcCisgICAge2Z1bmN0aW9uX25hbWUsIE5VTEwsIG51bGxhYmxlLCBhbGxvd19mZCwgTlVMTCwgTlVMTCwgMCwgMCwgTlVMTCwgTlVMTH0KKwogc3RhdGljIHZvaWQKIHBhdGhfY2xlYW51cChwYXRoX3QgKnBhdGgpIHsKICAgICBpZiAocGF0aC0+Y2xlYW51cCkgewpAQCAtNzM4LDE1ICs4MzQsMTQgQEAKICAgICBpZiAodW5pY29kZSkgewogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgd2NoYXJfdCAqd2lkZTsKLSAgICAgICAgbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpOwotICAgICAgICBpZiAobGVuZ3RoID4gMzI3NjcpIHsKLSAgICAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CisKKyAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHVuaWNvZGUsICZsZW5ndGgpOworICAgICAgICBpZiAoIXdpZGUpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0KLSAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pY29kZSk7Ci0gICAgICAgIGlmICghd2lkZSkgeworICAgICAgICBpZiAobGVuZ3RoID4gMzI3NjcpIHsKKyAgICAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtODA0LDcgKzg5OSw3IEBACiAKICAgICBsZW5ndGggPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRIKSB7CisgICAgaWYgKGxlbmd0aCA+IE1BWF9QQVRILTEpIHsKICAgICAgICAgRk9STUFUX0VYQ0VQVElPTihQeUV4Y19WYWx1ZUVycm9yLCAiJXMgdG9vIGxvbmcgZm9yIFdpbmRvd3MiKTsKICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA1LDEwICsxMjAwLDYgQEAKICNlbHNlCiAgICAgY2hhciAqKmU7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIEFQSVJFVCByYzsKLSAgICBjaGFyICAgYnVmZmVyWzEwMjRdOyAvKiBPUy8yIFByb3ZpZGVzIGEgRG9jdW1lbnRlZCBNYXggb2YgMTAyNCBDaGFycyAqLwotI2VuZGlmCiAKICAgICBkID0gUHlEaWN0X05ldygpOwogICAgIGlmIChkID09IE5VTEwpCkBAIC0xMTc3LDIwICsxMjY4LDYgQEAKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgIH0KICNlbmRpZgotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgcmMgPSBEb3NRdWVyeUV4dExJQlBBVEgoYnVmZmVyLCBCRUdJTl9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cGUsIGVudm5hbWUgaXMgTk9UICdCRUdJTl9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkJFR0lOTElCUEFUSCIsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgRU5EX0xJQlBBVEgpOwotICAgIGlmIChyYyA9PSBOT19FUlJPUikgeyAvKiAobm90IGEgdHlwbywgZW52bmFtZSBpcyBOT1QgJ0VORF9MSUJQQVRIJykgKi8KLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoYnVmZmVyKTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkVORExJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSNlbmRpZgogICAgIHJldHVybiBkOwogfQogCkBAIC0xMjAxLDI1ICsxMjc4LDYgQEAKIHsKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogfQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUoY2hhciogbmFtZSkKLXsKLSAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIG5hbWUpOwotfQotCi0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShQeU9iamVjdCogbmFtZSkKLXsKLSAgICBQeU9iamVjdCAqbmFtZV9zdHIsICpyYzsKLSAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG5hbWUpKTsKLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmMgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N0cik7Ci0gICAgUHlfWERFQ1JFRihuYW1lX3N0cik7Ci0gICAgcmV0dXJuIHJjOwotfQogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyMzgsMjQgKzEyOTYsMTMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdpbjMyX2Vycm9yX3VuaWNvZGUoY2hhciogZnVuY3Rpb24sIHdjaGFyX3QqIGZpbGVuYW1lKQotewotICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwotICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7Ci0gICAgaWYgKGZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKGVycm5vLCBmaWxlbmFtZSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJybm8pOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogd2luMzJfZXJyb3Jfb2JqZWN0KGNoYXIqIGZ1bmN0aW9uLCBQeU9iamVjdCogZmlsZW5hbWUpCiB7CiAgICAgLyogWFhYIC0gc2VlIHdpbjMyX2Vycm9yIGZvciBjb21tZW50cyBvbiAnZnVuY3Rpb24nICovCiAgICAgZXJybm8gPSBHZXRMYXN0RXJyb3IoKTsKICAgICBpZiAoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICBlcnJubywKICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwogICAgIGVsc2UKQEAgLTEyNjQsMTA4ICsxMzExLDE3IEBACiAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKLS8qCi0gKiBTb21lIGZ1bmN0aW9ucyByZXR1cm4gV2luMzIgZXJyb3JzLCBvdGhlcnMgb25seSBldmVyIHVzZSBwb3NpeF9lcnJvcgotICogKHRoaXMgaXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggZXhjZXB0aW9ucykKLSAqLwogc3RhdGljIFB5T2JqZWN0ICoKLXBhdGhfcG9zaXhfZXJyb3IoY2hhciAqZnVuY3Rpb25fbmFtZSwgcGF0aF90ICpwYXRoKQotewotICAgIGlmIChwYXRoLT5uYXJyb3cpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgtPm5hcnJvdyk7Ci0gICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKK3BhdGhfZXJyb3IocGF0aF90ICpwYXRoKQogewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aC0+bmFycm93KTsKLSAgICBpZiAocGF0aC0+d2lkZSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoZnVuY3Rpb25fbmFtZSwgcGF0aC0+d2lkZSk7Ci0gICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIE5VTEwpOworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBwYXRoLT5vYmplY3QpOwogI2Vsc2UKLSAgICByZXR1cm4gcGF0aF9wb3NpeF9lcnJvcihmdW5jdGlvbl9uYW1lLCBwYXRoKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgtPm9iamVjdCk7CiAjZW5kaWYKIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICBIZWxwZXIgRnVuY3Rpb24gdG8gVHJpbSBhbmQgRm9ybWF0IE9TLzIgTWVzc2FnZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQKLW9zMl9mb3JtYXRtc2coY2hhciAqbXNnYnVmLCBpbnQgbXNnbGVuLCBjaGFyICpyZWFzb24pCi17Ci0gICAgbXNnYnVmW21zZ2xlbl0gPSAnXDAnOyAvKiBPUy8yIERvZXNuJ3QgR3VhcmFudGVlIGEgVGVybWluYXRvciAqLwotCi0gICAgaWYgKHN0cmxlbihtc2didWYpID4gMCkgeyAvKiBJZiBOb24tRW1wdHkgTXNnLCBUcmltIENSTEYgKi8KLSAgICAgICAgY2hhciAqbGFzdGMgPSAmbXNnYnVmWyBzdHJsZW4obXNnYnVmKS0xIF07Ci0KLSAgICAgICAgd2hpbGUgKGxhc3RjID4gbXNnYnVmICYmIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKmxhc3RjKSkpCi0gICAgICAgICAgICAqbGFzdGMtLSA9ICdcMCc7IC8qIFRyaW0gVHJhaWxpbmcgV2hpdGVzcGFjZSAoQ1JMRikgKi8KLSAgICB9Ci0KLSAgICAvKiBBZGQgT3B0aW9uYWwgUmVhc29uIFRleHQgKi8KLSAgICBpZiAocmVhc29uKSB7Ci0gICAgICAgIHN0cmNhdChtc2didWYsICIgOiAiKTsKLSAgICAgICAgc3RyY2F0KG1zZ2J1ZiwgcmVhc29uKTsKLSAgICB9Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICBEZWNvZGUgYW4gT1MvMiBPcGVyYXRpbmcgU3lzdGVtIEVycm9yIENvZGUKLSAqCi0gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvb2t1cCBhbiBPUy8yIGVycm9yIGNvZGUgYW5kIHJldHVybiBhCi0gKiB0ZXh0IG1lc3NhZ2Ugd2UgY2FuIHVzZSB0byByYWlzZSBhIFB5dGhvbiBleGNlcHRpb24uCi0gKgotICogTm90ZXM6Ci0gKiAgIFRoZSBtZXNzYWdlcyBmb3IgZXJyb3JzIHJldHVybmVkIGZyb20gdGhlIE9TLzIga2VybmVsIHJlc2lkZSBpbgotICogICB0aGUgZmlsZSBPU08wMDEuTVNHIGluIHRoZSBcT1MyIGRpcmVjdG9yeSBoaWVyYXJjaHkuCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgY2hhciAqCi1vczJfc3RyZXJyb3IoY2hhciAqbXNnYnVmLCBpbnQgbXNnYnVmbGVuLCBpbnQgZXJyb3Jjb2RlLCBjaGFyICpyZWFzb24pCi17Ci0gICAgQVBJUkVUIHJjOwotICAgIFVMT05HICBtc2dsZW47Ci0KLSAgICAvKiBSZXRyaWV2ZSBLZXJuZWwtUmVsYXRlZCBFcnJvciBNZXNzYWdlIGZyb20gT1NPMDAxLk1TRyBGaWxlICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zR2V0TWVzc2FnZShOVUxMLCAwLCBtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jjb2RlLCAib3NvMDAxLm1zZyIsICZtc2dsZW4pOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICBpZiAocmMgPT0gTk9fRVJST1IpCi0gICAgICAgIG9zMl9mb3JtYXRtc2cobXNnYnVmLCBtc2dsZW4sIHJlYXNvbik7Ci0gICAgZWxzZQotICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgbXNnYnVmbGVuLAotICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIE9TIGVycm9yICMlZCIsIGVycm9yY29kZSk7Ci0KLSAgICByZXR1cm4gbXNnYnVmOwotfQotCi0vKiBTZXQgYW4gT1MvMi1zcGVjaWZpYyBlcnJvciBhbmQgcmV0dXJuIE5VTEwuICBPUy8yIGtlcm5lbAotICAgZXJyb3JzIGFyZSBub3QgaW4gYSBnbG9iYWwgdmFyaWFibGUgZS5nLiAnZXJybm8nIG5vciBhcmUKLSAgIHRoZXkgY29uZ3J1ZW50IHdpdGggcG9zaXggZXJyb3IgbnVtYmVycy4gKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLW9zMl9lcnJvcihpbnQgY29kZSkKLXsKLSAgICBjaGFyIHRleHRbMTAyNF07Ci0gICAgUHlPYmplY3QgKnY7Ci0KLSAgICBvczJfc3RyZXJyb3IodGV4dCwgc2l6ZW9mKHRleHQpLCBjb2RlLCAiIik7Ci0KLSAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIGNvZGUsIHRleHQpOwotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX09TRXJyb3IsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOyAvKiBTaWduYWwgdG8gUHl0aG9uIHRoYXQgYW4gRXhjZXB0aW9uIGlzIFBlbmRpbmcgKi8KLX0KLQotI2VuZGlmIC8qIE9TMiAqLwogCiAvKiBQT1NJWCBnZW5lcmljIG1ldGhvZHMgKi8KIApAQCAtMTM4OSw2NSArMTM0NSwzMSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfMXN0cihQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LCBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCitwb3NpeF8xc3RyKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgUHlPYmplY3QgKmFyZ3MsIGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3QgY2hhciopKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDEgPSBOVUxMOwotICAgIGNoYXIgKnBhdGgxOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9IGZ1bmNfbmFtZTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoMSA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgxKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gKCpmdW5jKShwYXRoMSk7CisgICAgcmVzID0gKCpmdW5jKShwYXRoLm5hcnJvdyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoMSk7Ci0gICAgUHlfREVDUkVGKG9wYXRoMSk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAogCiAjaWZkZWYgTVNfV0lORE9XUwotc3RhdGljIFB5T2JqZWN0Kgotd2luMzJfMXN0cihQeU9iamVjdCogYXJncywgY2hhciogZnVuYywKLSAgICAgICAgICAgY2hhciogZm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNBKShMUENTVFIpLAotICAgICAgICAgICBjaGFyKiB3Zm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNXKShMUFdTVFIpKQotewotICAgIFB5T2JqZWN0ICp1bmk7Ci0gICAgY29uc3QgY2hhciAqYW5zaTsKLSAgICBCT09MIHJlc3VsdDsKLQotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHdmb3JtYXQsICZ1bmkpKQotICAgIHsKLSAgICAgICAgd2NoYXJfdCAqd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKTsKLSAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJlc3VsdCA9IGZ1bmNXKHdzdHIpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoZnVuYywgdW5pKTsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgUHlFcnJfQ2xlYXIoKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsICZhbnNpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHdpbjMyX3dhcm5fYnl0ZXNfYXBpKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXN1bHQgPSBmdW5jQShhbnNpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuYywgYW5zaSk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotCi19Ci0KIC8qIFRoaXMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHRoZSBDIGxpYnJhcnkncyBjaGRpciBmdW5jdGlvbiwKICAgIGJ1dCBvbmUgdGhhdCBwcm9kdWNlcyBXaW4zMiBlcnJvcnMgaW5zdGVhZCBvZiBET1MgZXJyb3IgY29kZXMuCiAgICBjaGRpciBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIFNldEN1cnJlbnREaXJlY3Rvcnk7IGhvd2V2ZXIsCkBAIC0xNDU2LDE4ICsxMzc4LDE4IEBACiBzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX2NoZGlyKExQQ1NUUiBwYXRoKQogewotICAgIGNoYXIgbmV3X3BhdGhbTUFYX1BBVEgrMV07CisgICAgY2hhciBuZXdfcGF0aFtNQVhfUEFUSF07CiAgICAgaW50IHJlc3VsdDsKICAgICBjaGFyIGVudls0XSA9ICI9eDoiOwogCiAgICAgaWYoIVNldEN1cnJlbnREaXJlY3RvcnlBKHBhdGgpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeUEoTUFYX1BBVEgrMSwgbmV3X3BhdGgpOworICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlBKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIEluIHRoZSBBTlNJIEFQSSwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcGF0aHMgbG9uZ2VyCi0gICAgICAgdGhhbiBNQVhfUEFUSC4gKi8KLSAgICBhc3NlcnQocmVzdWx0IDw9IE1BWF9QQVRIKzEpOworICAgICAgIHRoYW4gTUFYX1BBVEgtMSAobm90IGluY2x1ZGluZyB0aGUgZmluYWwgbnVsbCBjaGFyYWN0ZXIpLiAqLworICAgIGFzc2VydChyZXN1bHQgPCBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKTsKICAgICBpZiAoc3RybmNtcChuZXdfcGF0aCwgIlxcXFwiLCAyKSA9PSAwIHx8CiAgICAgICAgIHN0cm5jbXAobmV3X3BhdGgsICIvLyIsIDIpID09IDApCiAgICAgICAgIC8qIFVOQyBwYXRoLCBub3RoaW5nIHRvIGRvLiAqLwpAQCAtMTQ4MSwyNCArMTQwMywyNCBAQAogc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl93Y2hkaXIoTFBDV1NUUiBwYXRoKQogewotICAgIHdjaGFyX3QgX25ld19wYXRoW01BWF9QQVRIKzFdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CisgICAgd2NoYXJfdCBfbmV3X3BhdGhbTUFYX1BBVEhdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CiAgICAgaW50IHJlc3VsdDsKICAgICB3Y2hhcl90IGVudls0XSA9IEwiPXg6IjsKIAogICAgIGlmKCFTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRIKzEsIG5ld19wYXRoKTsKKyAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpLCBuZXdfcGF0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAocmVzdWx0ID4gTUFYX1BBVEgrMSkgewotICAgICAgICBuZXdfcGF0aCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKSB7CisgICAgICAgIG5ld19wYXRoID0gUHlNZW1fUmF3TWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghbmV3X3BhdGgpIHsKICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcocmVzdWx0LCBuZXdfcGF0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUobmV3X3BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUwOSw3ICsxNDMxLDcgQEAKICAgICBlbnZbMV0gPSBuZXdfcGF0aFswXTsKICAgICByZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnYsIG5ld19wYXRoKTsKICAgICBpZiAobmV3X3BhdGggIT0gX25ld19wYXRoKQotICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtMTUyNCwxMyArMTQ0NiwxMyBAQAogI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCiAKIHN0cnVjdCB3aW4zMl9zdGF0ewotICAgIGludCBzdF9kZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9kZXY7CiAgICAgX19pbnQ2NCBzdF9pbm87CiAgICAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICAgICBpbnQgc3Rfbmxpbms7CiAgICAgaW50IHN0X3VpZDsKICAgICBpbnQgc3RfZ2lkOwotICAgIGludCBzdF9yZGV2OworICAgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICAgICBfX2ludDY0IHN0X3NpemU7CiAgICAgdGltZV90IHN0X2F0aW1lOwogICAgIGludCBzdF9hdGltZV9uc2VjOwpAQCAtMTU4OSw2ICsxNTExLDggQEAKICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwogICAgIHJlc3VsdC0+c3RfbW9kZSA9IGF0dHJpYnV0ZXNfdG9fbW9kZShpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzKTsKICAgICByZXN1bHQtPnN0X3NpemUgPSAoKChfX2ludDY0KWluZm8tPm5GaWxlU2l6ZUhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZVNpemVMb3c7CisgICAgcmVzdWx0LT5zdF9kZXYgPSBpbmZvLT5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKyAgICByZXN1bHQtPnN0X3JkZXYgPSByZXN1bHQtPnN0X2RldjsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0Q3JlYXRpb25UaW1lLCAmcmVzdWx0LT5zdF9jdGltZSwgJnJlc3VsdC0+c3RfY3RpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RXcml0ZVRpbWUsICZyZXN1bHQtPnN0X210aW1lLCAmcmVzdWx0LT5zdF9tdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKQEAgLTE1OTYsOSArMTUyMCw5IEBACiAgICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8tPm5GaWxlSW5kZXhIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVJbmRleExvdzsKICAgICBpZiAocmVwYXJzZV90YWcgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgewogICAgICAgICAvKiBmaXJzdCBjbGVhciB0aGUgU19JRk1UIGJpdHMgKi8KLSAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiAwMTcwMDAwKTsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiBTX0lGTVQpOwogICAgICAgICAvKiBub3cgc2V0IHRoZSBiaXRzIHRoYXQgbWFrZSB0aGlzIGEgc3ltbGluayAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gMDEyMDAwMDsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IFNfSUZMTks7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNjUxLDcgKzE1NzUsNyBAQAogfQogCiAvKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCi1zdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAwOworc3RhdGljIGludCBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gLTE7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiBzdGF0aWMgaW50CkBAIC0xNjYyLDcgKzE1ODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwogCiAgICAgLyogb25seSByZWNoZWNrICovCi0gICAgaWYgKCFoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQorICAgIGlmICgtMSA9PSBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQogICAgIHsKICAgICAgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlVyhMIktFUk5FTDMyIik7CiAgICAgICAgICooRkFSUFJPQyopJlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCkBAIC0xNjg4LDcgKzE2MTIsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgYnVmID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFidWYpIHsKICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX09VVE9GTUVNT1JZKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwpAQCAtMTY5OCwxMiArMTYyMiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1Zl9zaXplLCBWT0xVTUVfTkFNRV9ET1MpOwogCiAgICAgaWYoIXJlc3VsdF9sZW5ndGgpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBpZighQ2xvc2VIYW5kbGUoaGRsKSkgewotICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIApAQCAtMTc5NCw3ICsxNzE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMTg5MCw3ICsxODE0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgICAgICAgICAgY29kZSA9IHdpbjMyX3hzdGF0X2ltcGxfdyh0YXJnZXRfcGF0aCwgcmVzdWx0LCBGQUxTRSk7Ci0gICAgICAgICAgICAgICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQpAQCAtMjI4OSw3ICsyMjEzLDkgQEAKICNlbHNlCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X2lubykpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLCBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhzdC0+c3RfZGV2KSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcoKFBZX0xPTkdfTE9ORylzdC0+c3RfZGV2KSk7CiAjZWxzZQpAQCAtMjQyNCw1MyArMjM1MCwxNTEgQEAKICAgICAgICAgcmVzdWx0ID0gU1RBVChwYXRoLT5uYXJyb3csICZzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIGlmIChyZXN1bHQgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IoInN0YXQiLCBwYXRoKTsKKyAgICBpZiAocmVzdWx0ICE9IDApIHsKKyAgICAgICAgcmV0dXJuIHBhdGhfZXJyb3IocGF0aCk7CisgICAgfQogCiAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKIH0KIAotUHlEb2NfU1RSVkFSKHBvc2l4X3N0YXRfX2RvY19fLAotInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKSAtPiBzdGF0IHJlc3VsdFxuXG5cCi1QZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC5cblwKLVxuXAotcGF0aCBtYXkgYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBhIHN0cmluZyBvciBhcyBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLSAgZGlyX2ZkIG1heSBub3QgYmUgc3VwcG9ydGVkIG9uIHlvdXIgcGxhdGZvcm07IGlmIGl0IGlzIHVuYXZhaWxhYmxlLCB1c2luZ1xuXAotICBpdCB3aWxsIHJhaXNlIGEgTm90SW1wbGVtZW50ZWRFcnJvci5cblwKLUlmIGZvbGxvd19zeW1saW5rcyBpcyBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpY1xuXAotICBsaW5rLCBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1JdCBpcyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuXAotICBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvci4iKTsKKyNpZmRlZiBIQVZFX0ZTVEFUQVQKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfY29udmVydGVyCisjZWxzZQorICAgICNkZWZpbmUgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisKKworLypbcHl0aG9uXQorCitjbGFzcyBwYXRoX3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorCisgICAgdHlwZSA9ICJwYXRoX3QiCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorCisgICAgY29udmVydGVyID0gJ3BhdGhfY29udmVydGVyJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGFsbG93X2ZkPUZhbHNlLCBudWxsYWJsZT1GYWxzZSk6CisgICAgICAgIGRlZiBzdHJpZnkodmFsdWUpOgorICAgICAgICAgICAgcmV0dXJuIHN0cihpbnQoYm9vbCh2YWx1ZSkpKQorCisgICAgICAgICMgcmlnaHQgbm93IHBhdGhfdCBkb2Vzbid0IHN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMuCisgICAgICAgICMgdG8gc3VwcG9ydCBhIGRlZmF1bHQgdmFsdWUsIHlvdSdsbCBuZWVkIHRvIG92ZXJyaWRlIGluaXRpYWxpemUoKS4KKworICAgICAgICBhc3NlcnQgc2VsZi5kZWZhdWx0IGlzIHVuc3BlY2lmaWVkCisKKyAgICAgICAgc2VsZi5udWxsYWJsZSA9IG51bGxhYmxlCisgICAgICAgIHNlbGYuYWxsb3dfZmQgPSBhbGxvd19mZAorCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ1BBVEhfVF9JTklUSUFMSVpFKCJ7fSIsIHt9LCB7fSknLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ubmFtZSwKKyAgICAgICAgICAgIHN0cmlmeShudWxsYWJsZSksCisgICAgICAgICAgICBzdHJpZnkoYWxsb3dfZmQpLAorICAgICAgICAgICAgKQorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIHJldHVybiAicGF0aF9jbGVhbnVwKCYiICsgc2VsZi5uYW1lICsgIik7XG4iCisKKworY2xhc3MgZGlyX2ZkX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKyAgICBjb252ZXJ0ZXIgPSAnT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaW4gKHVuc3BlY2lmaWVkLCBOb25lKToKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ0RFRkFVTFRfRElSX0ZEJworCisKK1tweXRob25dKi8KKy8qW3B5dGhvbiBjaGVja3N1bTogZGEzOWEzZWU1ZTZiNGIwZDMyNTViZmVmOTU2MDE4OTBhZmQ4MDcwOV0qLworCisvKltjbGluaWNdCisKK29zLnN0YXQgLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdzdGF0X3Jlc3VsdCcpCisKKyAgICBwYXRoIDogcGF0aF90KGFsbG93X2ZkPVRydWUpCisgICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0bworICAgICAgICB0aGF0IGRpcmVjdG9yeS4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUKKyAgICAgICAgdGhlIGxpbmsgcG9pbnRzIHRvLgorCitQZXJmb3JtIGEgc3RhdCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKworZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZAorICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhCisgIE5vdEltcGxlbWVudGVkRXJyb3IuCisKK0l0J3MgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXMKKyAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuCisKK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKG9zX3N0YXRfX2RvY19fLAorInN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIlBlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIGV4YW1pbmVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgZGlyX2ZkXG4iCisiICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcbiIKKyIgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0b1xuIgorIiAgICB0aGF0IGRpcmVjdG9yeS5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgICB0aGUgbGluayBwb2ludHMgdG8uXG4iCisiXG4iCisiZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJJdFwncyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuIgorIiAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIik7CisKKyNkZWZpbmUgT1NfU1RBVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhdCIsIChQeUNGdW5jdGlvbilvc19zdGF0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3Nfc3RhdF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3RhdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgic3RhdCIsIDAsIDEpOwogICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJnA6c3RhdCIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0jaWZkZWYgSEFWRV9GU1RBVEFUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8mfCRPJnA6c3RhdCIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc3RhdF9pbXBsKG1vZHVsZSwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCiAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGNoZWNrc3VtOiA4NWE3MWFkNjAyZTg5ZjhlMjgwMTE4ZGE5NzZmNzBjZDJmOWFiZGYxXSovCit7CisgICAgcmV0dXJuIHBvc2l4X2RvX3N0YXQoInN0YXQiLCBwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7Cit9CisKIFB5RG9jX1NUUlZBUihwb3NpeF9sc3RhdF9fZG9jX18sCiAibHN0YXQocGF0aCwgKiwgZGlyX2ZkPU5vbmUpIC0+IHN0YXQgcmVzdWx0XG5cblwKIExpa2Ugc3RhdCgpLCBidXQgZG8gbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy5cblwKQEAgLTI0ODYsNiArMjUxMCw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibHN0YXQiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpsc3RhdCIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9GU1RBVEFUCkBAIC0yNDk1LDQ0ICsyNTIwLDExOSBAQAogI2VuZGlmCiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoImxzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9hY2Nlc3NfX2RvY19fLAotImFjY2VzcyhwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgZWZmZWN0aXZlX2lkcz1GYWxzZSxcCi0gZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cblwKLVVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguICBSZXR1cm5zIFRydWUgaWYgZ3JhbnRlZCxcblwKLUZhbHNlIG90aGVyd2lzZS5cblwKLVxuXAotSWYgZGlyX2ZkIGlzIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcblwKLSAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0IGRpcmVjdG9yeS5cblwKLUlmIGVmZmVjdGl2ZV9pZHMgaXMgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mXG5cCi0gIHRoZSByZWFsIHVpZC9naWQuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZSB0aGVcblwKLSAgbGluayBwb2ludHMgdG8uXG5cCi1kaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuXAotICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG5cCi0gIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1cblwKLU5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuXAotICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXJcblwKLSAgaGFzIHRoZSBzcGVjaWZpZWQgYWNjZXNzIHRvIHRoZSBwYXRoLlxuXAotVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsIG9yIHRoZSBpbmNsdXNpdmUtT1JcblwKLSAgb2YgUl9PSywgV19PSywgYW5kIFhfT0suIik7CisKKyNpZmRlZiBIQVZFX0ZBQ0NFU1NBVAorICAgICNkZWZpbmUgT1NfQUNDRVNTX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF91bmF2YWlsYWJsZQorI2VuZGlmCisvKltjbGluaWNdCitvcy5hY2Nlc3MgLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdUcnVlIGlmIGdyYW50ZWQsIEZhbHNlIG90aGVyd2lzZScpCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICAgICAgUGF0aCB0byBiZSB0ZXN0ZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICBtb2RlOiBpbnQKKyAgICAgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsCisgICAgICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0CisgICAgICAgIGRpcmVjdG9yeS4KKworICAgIGVmZmVjdGl2ZV9pZHM6IGJvb2wgPSBGYWxzZQorICAgICAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2YKKyAgICAgICAgdGhlIHJlYWwgdWlkL2dpZC4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK1VzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguCisKK3twYXJhbWV0ZXJzfQorZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQKKyAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYQorICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXMKKyAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyCisgIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC4KKworW2NsaW5pY10qLworCitQeURvY19TVFJWQVIob3NfYWNjZXNzX19kb2NfXywKKyJhY2Nlc3MocGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsIGVmZmVjdGl2ZV9pZHM9RmFsc2UsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIlVzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguXG4iCisiXG4iCisiICBwYXRoXG4iCisiICAgIFBhdGggdG8gYmUgdGVzdGVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgbW9kZVxuIgorIiAgICBPcGVyYXRpbmctc3lzdGVtIG1vZGUgYml0ZmllbGQuICBDYW4gYmUgRl9PSyB0byB0ZXN0IGV4aXN0ZW5jZSxcbiIKKyIgICAgb3IgdGhlIGluY2x1c2l2ZS1PUiBvZiBSX09LLCBXX09LLCBhbmQgWF9PSy5cbiIKKyIgIGRpcl9mZFxuIgorIiAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG4iCisiICAgIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdFxuIgorIiAgICBkaXJlY3RvcnkuXG4iCisiICBlZmZlY3RpdmVfaWRzXG4iCisiICAgIElmIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZlxuIgorIiAgICB0aGUgcmVhbCB1aWQvZ2lkLlxuIgorIiAgZm9sbG93X3N5bWxpbmtzXG4iCisiICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssXG4iCisiICAgIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGVcbiIKKyIgICAgdGhlIGxpbmsgcG9pbnRzIHRvLlxuIgorIlxuIgorImRpcl9mZCwgZWZmZWN0aXZlX2lkcywgYW5kIGZvbGxvd19zeW1saW5rcyBtYXkgbm90IGJlIGltcGxlbWVudGVkXG4iCisiICBvbiB5b3VyIHBsYXRmb3JtLiAgSWYgdGhleSBhcmUgdW5hdmFpbGFibGUsIHVzaW5nIHRoZW0gd2lsbCByYWlzZSBhXG4iCisiICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuIgorIlxuIgorIk5vdGUgdGhhdCBtb3N0IG9wZXJhdGlvbnMgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLCB0aGVyZWZvcmUgdGhpc1xuIgorIiAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyXG4iCisiICBoYXMgdGhlIHNwZWNpZmllZCBhY2Nlc3MgdG8gdGhlIHBhdGguIik7CisKKyNkZWZpbmUgT1NfQUNDRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJhY2Nlc3MiLCAoUHlDRnVuY3Rpb24pb3NfYWNjZXNzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3NfYWNjZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9hY2Nlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorb3NfYWNjZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwgaW50IGVmZmVjdGl2ZV9pZHMsIGludCBmb2xsb3dfc3ltbGlua3MpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3NfYWNjZXNzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQogewotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgImVmZmVjdGl2ZV9pZHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07Ci0gICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJwYXRoIiwgIm1vZGUiLCAiZGlyX2ZkIiwgImVmZmVjdGl2ZV9pZHMiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgiYWNjZXNzIiwgMCwgMSk7CiAgICAgaW50IG1vZGU7CiAgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwogICAgIGludCBlZmZlY3RpdmVfaWRzID0gMDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8maXwkTyZwcDphY2Nlc3MiLCBfa2V5d29yZHMsCisgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJm1vZGUsIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiwgJmRpcl9mZCwgJmVmZmVjdGl2ZV9pZHMsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3NfYWNjZXNzX2ltcGwobW9kdWxlLCAmcGF0aCwgbW9kZSwgZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBmb2xsb3dfc3ltbGlua3MpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIHBhdGggKi8KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK29zX2FjY2Vzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIHBhdGhfdCAqcGF0aCwgaW50IG1vZGUsIGludCBkaXJfZmQsIGludCBlZmZlY3RpdmVfaWRzLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGNoZWNrc3VtOiA2MzZlODM1YzM2NTYyYTJmYzExYWNhYjc1MzE0NjM0MTI3ZmRmNzY5XSovCit7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0yNTQxLDE3ICsyNjQxLDYgQEAKICAgICBpbnQgcmVzdWx0OwogI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfCRPJnBwOmFjY2VzcyIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAotI2lmZGVmIEhBVkVfRkFDQ0VTU0FUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmVmZmVjdGl2ZV9pZHMsICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogI2lmbmRlZiBIQVZFX0ZBQ0NFU1NBVAogICAgIGlmIChmb2xsb3dfc3ltbGlua3Nfc3BlY2lmaWVkKCJhY2Nlc3MiLCBmb2xsb3dfc3ltbGlua3MpKQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC0yNTY0LDEwICsyNjUzLDEwIEBACiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChwYXRoLndpZGUgIT0gTlVMTCkKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLndpZGUpOworICAgIGlmIChwYXRoLT53aWRlICE9IE5VTEwpCisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC0+d2lkZSk7CiAgICAgZWxzZQotICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgubmFycm93KTsKKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLT5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKgpAQCAtMjU3OSw3ICsyNjY4LDcgQEAKICAgICAgKiAoRGlyZWN0b3JpZXMgY2Fubm90IGJlIHJlYWQtb25seSBvbiBXaW5kb3dzLikKICAgICAqLwogICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygKLSAgICAgICAgKGF0dHIgIT0gMHhGRkZGRkZGRikgJiYKKyAgICAgICAgKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYmCiAgICAgICAgICAgICAoIShtb2RlICYgMikgfHwKICAgICAgICAgICAgICEoYXR0ciAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSB8fAogICAgICAgICAgICAgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSk7CkBAIC0yNTk1LDExICsyNjg0LDExIEBACiAgICAgICAgICAgICBmbGFncyB8PSBBVF9TWU1MSU5LX05PRk9MTE9XOwogICAgICAgICBpZiAoZWZmZWN0aXZlX2lkcykKICAgICAgICAgICAgIGZsYWdzIHw9IEFUX0VBQ0NFU1M7Ci0gICAgICAgIHJlc3VsdCA9IGZhY2Nlc3NhdChkaXJfZmQsIHBhdGgubmFycm93LCBtb2RlLCBmbGFncyk7CisgICAgICAgIHJlc3VsdCA9IGZhY2Nlc3NhdChkaXJfZmQsIHBhdGgtPm5hcnJvdywgbW9kZSwgZmxhZ3MpOwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgubmFycm93LCBtb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgtPm5hcnJvdywgbW9kZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoIXJlc3VsdCk7CiAjZW5kaWYKQEAgLTI2MDcsNyArMjY5Niw2IEBACiAjaWZuZGVmIEhBVkVfRkFDQ0VTU0FUCiBleGl0OgogI2VuZGlmCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCkBAIC0yNjI0LDM1ICsyNzEyLDc2IEBACiAjZGVmaW5lIFhfT0sgMQogI2VuZGlmCiAKKwogI2lmZGVmIEhBVkVfVFRZTkFNRQotUHlEb2NfU1RSVkFSKHBvc2l4X3R0eW5hbWVfX2RvY19fLAotInR0eW5hbWUoZmQpIC0+IHN0cmluZ1xuXG5cCi1SZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gJ2ZkJy4iKTsKKworLypbY2xpbmljXQorb3MudHR5bmFtZSAtPiBEZWNvZGVGU0RlZmF1bHQKKworICAgIGZkOiBpbnQKKyAgICAgICAgSW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgaGFuZGxlLgorCisgICAgLworCitSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gJ2ZkJy4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKG9zX3R0eW5hbWVfX2RvY19fLAorInR0eW5hbWUoZmQpXG4iCisiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB0ZXJtaW5hbCBkZXZpY2UgY29ubmVjdGVkIHRvIFwnZmRcJy5cbiIKKyJcbiIKKyIgIGZkXG4iCisiICAgIEludGVnZXIgZmlsZSBkZXNjcmlwdG9yIGhhbmRsZS4iKTsKKworI2RlZmluZSBPU19UVFlOQU1FX01FVEhPRERFRiAgICBcCisgICAgeyJ0dHluYW1lIiwgKFB5Q0Z1bmN0aW9uKW9zX3R0eW5hbWUsIE1FVEhfVkFSQVJHUywgb3NfdHR5bmFtZV9fZG9jX199LAorCitzdGF0aWMgY2hhciAqCitvc190dHluYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGZkKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3R0eW5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorb3NfdHR5bmFtZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgaWQ7Ci0gICAgY2hhciAqcmV0OworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBmZDsKKyAgICBjaGFyICpfcmV0dXJuX3ZhbHVlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnR0eW5hbWUiLCAmaWQpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgImk6dHR5bmFtZSIsCisgICAgICAgICZmZCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gb3NfdHR5bmFtZV9pbXBsKG1vZHVsZSwgZmQpOworICAgIGlmIChfcmV0dXJuX3ZhbHVlID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBjaGFyICoKK29zX3R0eW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgZmQpCisvKltjbGluaWMgY2hlY2tzdW06IDBmMzY4MTM0ZGMwYTdmMjFmMjUxODVlMmU2YmFjZjc2NzVmYjQ3M2FdKi8KK3sKKyAgICBjaGFyICpyZXQ7CiAKICNpZiBkZWZpbmVkKF9fVk1TKQogICAgIC8qIGZpbGUgZGVzY3JpcHRvciAwIG9ubHksIHRoZSBkZWZhdWx0IGlucHV0IGRldmljZSAoc3RkaW4pICovCi0gICAgaWYgKGlkID09IDApIHsKKyAgICBpZiAoZmQgPT0gMCkgewogICAgICAgICByZXQgPSB0dHluYW1lKCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICByZXQgPSBOVUxMOwogICAgIH0KICNlbHNlCi0gICAgcmV0ID0gdHR5bmFtZShpZCk7CisgICAgcmV0ID0gdHR5bmFtZShmZCk7CiAjZW5kaWYKICAgICBpZiAocmV0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHJldCk7CisgICAgICAgIHBvc2l4X2Vycm9yKCk7CisgICAgcmV0dXJuIHJldDsKIH0KKyNlbHNlCisjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfQ1RFUk1JRApAQCAtMjY5NCw2ICsyODIzLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaGRpciI7CiAjaWZkZWYgSEFWRV9GQ0hESVIKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMjcwOSw4ICsyODM5LDYgQEAKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IHdpbjMyX2NoZGlyKHBhdGgubmFycm93KTsKICAgICByZXN1bHQgPSAhcmVzdWx0OyAvKiBvbiB1bml4LCBzdWNjZXNzID0gMCwgb24gd2luZG93cywgc3VjY2VzcyA9ICEwICovCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJlc3VsdCA9IF9jaGRpcjIocGF0aC5uYXJyb3cpOwogI2Vsc2UKICNpZmRlZiBIQVZFX0ZDSERJUgogICAgIGlmIChwYXRoLmZkICE9IC0xKQpAQCAtMjcyMiw3ICsyODUwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJjaGRpciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTI3ODYsNiArMjkxNCw3IEBACiAjZW5kaWYKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAiY2htb2QiOwogI2lmZGVmIEhBVkVfRkNITU9ECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTI4MTEsNyArMjk0MCw3IEBACiAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC53aWRlKTsKICAgICBlbHNlCiAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aC5uYXJyb3cpOwotICAgIGlmIChhdHRyID09IDB4RkZGRkZGRkYpCisgICAgaWYgKGF0dHIgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCiAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChtb2RlICYgX1NfSVdSSVRFKQpAQCAtMjgyNiw3ICsyOTU1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJjaG1vZCIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCkBAIC0yODgwLDcgKzMwMDksNyBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigiY2htb2QiLCAmcGF0aCk7CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMjkyNCwyMCArMzA1MywyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaG1vZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IGk7CiAgICAgaW50IHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmkpKQorICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNobW9kIjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2htb2QocGF0aCwgaSk7CisgICAgcmVzID0gbGNobW9kKHBhdGgubmFycm93LCBpKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIEhBVkVfTENITU9EICovCkBAIC0yOTY1LDYgKzMwOTcsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImZsYWdzIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaGZsYWdzIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJmt8JGk6Y2hmbGFncyIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbGFncywgJmZvbGxvd19zeW1saW5rcykpCkBAIC0yOTg1LDcgKzMxMTgsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoImNoZmxhZ3MiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0zMDA4LDIyICszMTQxLDI0IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNoZmxhZ3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaGZsYWdzIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mazpsY2hmbGFncyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmZmxhZ3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gbGNoZmxhZ3MocGF0aCwgZmxhZ3MpOworICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgubmFycm93LCBmbGFncyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hGTEFHUyAqLwogCkBAIC0zMDM1LDcgKzMxNzAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2Nocm9vdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHBvc2l4XzFzdHIoYXJncywgIk8mOmNocm9vdCIsIGNocm9vdCk7CisgICAgcmV0dXJuIHBvc2l4XzFzdHIoImNocm9vdCIsIGFyZ3MsICJPJjpjaHJvb3QiLCBjaHJvb3QpOwogfQogI2VuZGlmCiAKQEAgLTMxMTcsNiArMzI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaG93biI7CiAjaWZkZWYgSEFWRV9GQ0hPV04KICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMzE3NCw3ICszMzEwLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJjaG93biIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTMyMjMsMzAgKzMzNTksMzIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2hvd24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOworICAgIHBhdGhfdCBwYXRoOwogICAgIHVpZF90IHVpZDsKICAgICBnaWRfdCBnaWQ7CiAgICAgaW50IHJlczsKKyAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxjaG93biI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJk8mTyY6bGNob3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X1VpZF9Db252ZXJ0ZXIsICZ1aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9HaWRfQ29udmVydGVyLCAmZ2lkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2hvd24ocGF0aCwgdWlkLCBnaWQpOworICAgIHJlcyA9IGxjaG93bihwYXRoLm5hcnJvdywgdWlkLCBnaWQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogI2VuZGlmIC8qIEhBVkVfTENIT1dOICovCiAKIAotI2lmZGVmIEhBVkVfR0VUQ1dECiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZ2V0Y3dkKGludCB1c2VfYnl0ZXMpCiB7CkBAIC0zMjYwLDEyICszMzk4LDEyIEBACiAgICAgICAgIFB5T2JqZWN0ICpyZXNvYmo7CiAgICAgICAgIERXT1JEIGxlbjsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhzaXplb2Ygd2J1Zi8gc2l6ZW9mIHdidWZbMF0sIHdidWYpOworICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgod2J1ZiksIHdidWYpOwogICAgICAgICAvKiBJZiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCwgbGVuIGRvZXMgbm90IGluY2x1ZGUgdGhlCiAgICAgICAgICAgIHRlcm1pbmF0aW5nIFwwLiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCwgbGVuIGluY2x1ZGVzCiAgICAgICAgICAgIHRoZSBzcGFjZSBuZWVkZWQgZm9yIHRoZSB0ZXJtaW5hdG9yLiAqLwotICAgICAgICBpZiAobGVuID49IHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSkgewotICAgICAgICAgICAgd2J1ZjIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgaWYgKGxlbiA+PSBQeV9BUlJBWV9MRU5HVEgod2J1ZikpIHsKKyAgICAgICAgICAgIHdidWYyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgICAgICBpZiAod2J1ZjIpCiAgICAgICAgICAgICAgICAgbGVuID0gR2V0Q3VycmVudERpcmVjdG9yeVcobGVuLCB3YnVmMik7CiAgICAgICAgIH0KQEAgLTMyNzUsMTEgKzM0MTMsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghbGVuKSB7Ci0gICAgICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikgZnJlZSh3YnVmMik7Ci0gICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImdldGN3ZHUiLCBOVUxMKTsKKyAgICAgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKQorICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1ZjIpOworICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICB9CiAgICAgICAgIHJlc29iaiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod2J1ZjIsIGxlbik7Ci0gICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKKyAgICAgICAgaWYgKHdidWYyICE9IHdidWYpCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYyKTsKICAgICAgICAgcmV0dXJuIHJlc29iajsKICAgICB9CiAKQEAgLTMyODgsMTEgKzM0MjgsNyBAQAogI2VuZGlmCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXMgPSBfZ2V0Y3dkMihidWYsIHNpemVvZiBidWYpOwotI2Vsc2UKICAgICByZXMgPSBnZXRjd2QoYnVmLCBzaXplb2YgYnVmKTsKLSNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTMzMjAsNyArMzQ1Niw2IEBACiB7CiAgICAgcmV0dXJuIHBvc2l4X2dldGN3ZCgxKTsKIH0KLSNlbmRpZgogCiAjaWYgKCghZGVmaW5lZChIQVZFX0xJTkspKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpKQogI2RlZmluZSBIQVZFX0xJTksgMQpAQCAtMzM1OSw2ICszNDk0LDggQEAKIAogICAgIG1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3JjKSk7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfE8mTyZwOmxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmc3JjLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZkc3QsCkBAIC0zMzg5LDcgKzM1MjYsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoImxpbmsiLCBkc3Qub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlCkBAIC0zNDA3LDcgKzM1NDQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmc3JjKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtMzQzNyw3MiArMzU3NCwzNSBAQAogICB0aGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgcmVmZXIgdG8gYSBkaXJlY3RvcnkuXG5cCiAgIElmIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1bmF2YWlsYWJsZSwgdXNpbmcgaXQgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLSAgICBwYXRoX3QgcGF0aDsKLSAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKLSNpZmRlZiBIQVZFX0ZET1BFTkRJUgotICAgIGludCBmZCA9IC0xOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCi0KICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKK3N0YXRpYyBQeU9iamVjdCAqCitfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsIE5VTEx9OwogICAgIFB5T2JqZWN0ICp2OwogICAgIEhBTkRMRSBoRmluZEZpbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKICAgICBCT09MIHJlc3VsdDsKICAgICBXSU4zMl9GSU5EX0RBVEEgRmlsZURhdGE7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOyAvKiBPdmVyYWxsb2NhdGUgZm9yIFxcKi4qXDAgKi8KKyAgICBjaGFyIG5hbWVidWZbTUFYX1BBVEgrNF07IC8qIE92ZXJhbGxvY2F0ZSBmb3IgIlwqLioiICovCiAgICAgY2hhciAqYnVmcHRyID0gbmFtZWJ1ZjsKICAgICAvKiBvbmx5IGNsYWltIHRvIGhhdmUgc3BhY2UgZm9yIE1BWF9QQVRIICovCi0gICAgUHlfc3NpemVfdCBsZW4gPSBzaXplb2YobmFtZWJ1ZiktNTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X0FSUkFZX0xFTkdUSChuYW1lYnVmKS00OwogICAgIFB5T2JqZWN0ICpwbyA9IE5VTEw7CiAgICAgd2NoYXJfdCAqd25hbWVidWYgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSNpZm5kZWYgTUFYX1BBVEgKLSNkZWZpbmUgTUFYX1BBVEggICAgQ0NITUFYUEFUSAotI2VuZGlmCi0gICAgY2hhciAqcHQ7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzVdOwotICAgIEhESVIgIGhkaXIgPSAxOwotICAgIFVMT05HIHNyY2hjbnQgPSAxOwotICAgIEZJTEVGSU5EQlVGMyAgIGVwOwotICAgIEFQSVJFVCByYzsKLSNlbHNlCi0gICAgUHlPYmplY3QgKnY7Ci0gICAgRElSICpkaXJwID0gTlVMTDsKLSAgICBzdHJ1Y3QgZGlyZW50ICplcDsKLSAgICBpbnQgcmV0dXJuX3N0cjsgLyogaWYgZmFsc2UsIHJldHVybiBieXRlcyAqLwotI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgcGF0aC5udWxsYWJsZSA9IDE7Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBwYXRoLmFsbG93X2ZkID0gMTsKLSAgICBwYXRoLmZkID0gLTE7Ci0jZW5kaWYKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyY6bGlzdGRpciIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgKLSAgICAgICAgKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFggU2hvdWxkIHJlZG8gdGhpcyBwdXR0aW5nIHRoZSAobm93IGZvdXIpIHZlcnNpb25zIG9mIG9wZW5kaXIKLSAgICAgICBpbiBzZXBhcmF0ZSBmaWxlcyBpbnN0ZWFkIG9mIGhhdmluZyB0aGVtIGFsbCBoZXJlLi4uICovCi0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCi0gICAgaWYgKCFwYXRoLm5hcnJvdykgeworICAgIGlmICghcGF0aC0+bmFycm93KSB7CiAgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOwogICAgICAgICB3Y2hhcl90ICpwb193Y2hhcnM7CiAKLSAgICAgICAgaWYgKCFwYXRoLndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLworICAgICAgICBpZiAoIXBhdGgtPndpZGUpIHsgLyogRGVmYXVsdCBhcmc6ICIuIiAqLwogICAgICAgICAgICAgcG9fd2NoYXJzID0gTCIuIjsKICAgICAgICAgICAgIGxlbiA9IDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLndpZGU7Ci0gICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC53aWRlKTsKKyAgICAgICAgICAgIHBvX3djaGFycyA9IHBhdGgtPndpZGU7CisgICAgICAgICAgICBsZW4gPSB3Y3NsZW4ocGF0aC0+d2lkZSk7CiAgICAgICAgIH0KICAgICAgICAgLyogVGhlICs1IGlzIHNvIHdlIGNhbiBhcHBlbmQgIlxcKi4qXDAiICovCi0gICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHduYW1lYnVmID0gUHlNZW1fTWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghd25hbWVidWYpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGV4aXQ7CkBAIC0zNTEwLDggKzM2MTAsOCBAQAogICAgICAgICB3Y3NjcHkod25hbWVidWYsIHBvX3djaGFycyk7CiAgICAgICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgICAgICB3Y2hhcl90IHdjaCA9IHduYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgICAgIGlmICh3Y2ggIT0gTCcvJyAmJiB3Y2ggIT0gTCdcXCcgJiYgd2NoICE9IEwnOicpCi0gICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gTCdcXCc7CisgICAgICAgICAgICBpZiAod2NoICE9IFNFUCAmJiB3Y2ggIT0gQUxUU0VQICYmIHdjaCAhPSBMJzonKQorICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IFNFUDsKICAgICAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiArIGxlbiwgTCIqLioiKTsKICAgICAgICAgfQogICAgICAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7CkBAIC0zNTI1LDggKzM2MjUsNyBAQAogICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKQogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgICAgICBkbyB7CkBAIC0zNTU1LDE5ICszNjU0LDE5IEBACiAgICAgICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwogICAgICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKIAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBwYXRoLm5hcnJvdyk7Ci0gICAgbGVuID0gcGF0aC5sZW5ndGg7CisgICAgc3RyY3B5KG5hbWVidWYsIHBhdGgtPm5hcnJvdyk7CisgICAgbGVuID0gcGF0aC0+bGVuZ3RoOwogICAgIGlmIChsZW4gPiAwKSB7CiAgICAgICAgIGNoYXIgY2ggPSBuYW1lYnVmW2xlbi0xXTsKLSAgICAgICAgaWYgKGNoICE9IFNFUCAmJiBjaCAhPSBBTFRTRVAgJiYgY2ggIT0gJzonKQotICAgICAgICAgICAgbmFtZWJ1ZltsZW4rK10gPSAnLyc7CisgICAgICAgIGlmIChjaCAhPSAnXFwnICYmIGNoICE9ICcvJyAmJiBjaCAhPSAnOicpCisgICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9ICdcXCc7CiAgICAgICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CiAgICAgfQogCkBAIC0zNTgyLDcgKzM2ODEsNyBAQAogICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCiAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yKCJGaW5kRmlyc3RGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGRvIHsKQEAgLTM2MTAsNyArMzcwOSw3IEBACiAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCiAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcigiRmluZE5leHRGaWxlIiwgbmFtZWJ1Zik7CisgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKQEAgLTM2MjAsODggKzM3MTksMzMgQEAKICAgICAgICAgaWYgKEZpbmRDbG9zZShoRmluZEZpbGUpID09IEZBTFNFKSB7CiAgICAgICAgICAgICBpZiAobGlzdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkZpbmRDbG9zZSIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBpZiAod25hbWVidWYpCi0gICAgICAgIGZyZWUod25hbWVidWYpOwotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgUHlNZW1fRnJlZSh3bmFtZWJ1Zik7CiAKICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIgKi8KIAotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBpZiAocGF0aC5sZW5ndGggPj0gTUFYX1BBVEgpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJwYXRoIHRvbyBsb25nIik7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0gICAgc3RyY3B5KG5hbWVidWYsIHBhdGgubmFycm93KTsKLSAgICBmb3IgKHB0ID0gbmFtZWJ1ZjsgKnB0OyBwdCsrKQotICAgICAgICBpZiAoKnB0ID09IEFMVFNFUCkKLSAgICAgICAgICAgICpwdCA9IFNFUDsKLSAgICBpZiAobmFtZWJ1ZltsZW4tMV0gIT0gU0VQKQotICAgICAgICBuYW1lYnVmW2xlbisrXSA9IFNFUDsKLSAgICBzdHJjcHkobmFtZWJ1ZiArIGxlbiwgIiouKiIpOworI2Vsc2UgIC8qIHRodXMgUE9TSVgsIGllOiBub3QgKE1TX1dJTkRPV1MgYW5kIG5vdCBIQVZFX09QRU5ESVIpICovCiAKLSAgICBpZiAoKGxpc3QgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gZXhpdDsKLSAgICB9Ci0KLSAgICByYyA9IERvc0ZpbmRGaXJzdChuYW1lYnVmLCAgICAgICAgIC8qIFdpbGRjYXJkIFBhdHRlcm4gdG8gTWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAmaGRpciwgICAgICAgICAgIC8qIEhhbmRsZSB0byBVc2UgV2hpbGUgU2VhcmNoIERpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTEVfUkVBRE9OTFkgfCBGSUxFX0hJRERFTiB8IEZJTEVfU1lTVEVNIHwgRklMRV9ESVJFQ1RPUlksCi0gICAgICAgICAgICAgICAgICAgICAgJmVwLCBzaXplb2YoZXApLCAvKiBTdHJ1Y3R1cmUgdG8gUmVjZWl2ZSBEaXJlY3RvcnkgRW50cnkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAmc3JjaGNudCwgICAgICAgIC8qIE1heCBhbmQgQWN0dWFsIENvdW50IG9mIEVudHJpZXMgUGVyIEl0ZXJhdGlvbiAqLwotICAgICAgICAgICAgICAgICAgICAgIEZJTF9TVEFOREFSRCk7ICAgLyogRm9ybWF0IG9mIEVudHJ5IChFQXMgb3IgTm90KSAqLwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIGVycm5vID0gRU5PRU5UOwotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKHBhdGgubmFycm93KTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIGlmIChzcmNoY250ID4gMCkgeyAvKiBJZiBEaXJlY3RvcnkgaXMgTk9UIFRvdGFsbHkgRW1wdHksICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGlmIChlcC5hY2hOYW1lWzBdID09ICcuJwotICAgICAgICAgICAgJiYgKGVwLmFjaE5hbWVbMV0gPT0gJ1wwJyB8fCAoZXAuYWNoTmFtZVsxXSA9PSAnLicgJiYgZXAuYWNoTmFtZVsyXSA9PSAnXDAnKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIFNraXAgT3ZlciAiLiIgYW5kICIuLiIgTmFtZXMgKi8KLQotICAgICAgICAgICAgc3RyY3B5KG5hbWVidWYsIGVwLmFjaE5hbWUpOwotCi0gICAgICAgICAgICAvKiBMZWF2ZSBDYXNlIG9mIE5hbWUgQWxvbmUgLS0gSW4gTmF0aXZlIEZvcm0gKi8KLSAgICAgICAgICAgIC8qIChSZW1vdmVkIEZvcmNlZCBMb3dlcmNhc2luZyBDb2RlKSAqLwotCi0gICAgICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKG5hbWVidWYpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICB9IHdoaWxlIChEb3NGaW5kTmV4dChoZGlyLCAmZXAsIHNpemVvZihlcCksICZzcmNoY250KSA9PSBOT19FUlJPUiAmJiBzcmNoY250ID4gMCk7Ci0gICAgfQotCi1leGl0OgotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KLSAgICByZXR1cm4gbGlzdDsKLSNlbHNlCitzdGF0aWMgUHlPYmplY3QgKgorX3Bvc2l4X2xpc3RkaXIocGF0aF90ICpwYXRoLCBQeU9iamVjdCAqbGlzdCkKK3sKKyAgICBQeU9iamVjdCAqdjsKKyAgICBESVIgKmRpcnAgPSBOVUxMOworICAgIHN0cnVjdCBkaXJlbnQgKmVwOworICAgIGludCByZXR1cm5fc3RyOyAvKiBpZiBmYWxzZSwgcmV0dXJuIGJ5dGVzICovCisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBpbnQgZmQgPSAtMTsKKyNlbmRpZgogCiAgICAgZXJybm8gPSAwOwogI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgaWYgKHBhdGguZmQgIT0gLTEpIHsKKyAgICBpZiAocGF0aC0+ZmQgIT0gLTEpIHsKICAgICAgICAgLyogY2xvc2VkaXIoKSBjbG9zZXMgdGhlIEZELCBzbyB3ZSBkdXBsaWNhdGUgaXQgKi8KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IGR1cChwYXRoLmZkKTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICAgICBmZCA9IF9QeV9kdXAocGF0aC0+ZmQpOwogICAgICAgICBpZiAoZmQgPT0gLTEpIHsKICAgICAgICAgICAgIGxpc3QgPSBwb3NpeF9lcnJvcigpOwogICAgICAgICAgICAgZ290byBleGl0OwpAQCAtMzcxNywxMCArMzc2MSwxMCBAQAogI2VuZGlmCiAgICAgewogICAgICAgICBjaGFyICpuYW1lOwotICAgICAgICBpZiAocGF0aC5uYXJyb3cpIHsKLSAgICAgICAgICAgIG5hbWUgPSBwYXRoLm5hcnJvdzsKKyAgICAgICAgaWYgKHBhdGgtPm5hcnJvdykgeworICAgICAgICAgICAgbmFtZSA9IHBhdGgtPm5hcnJvdzsKICAgICAgICAgICAgIC8qIG9ubHkgcmV0dXJuIGJ5dGVzIGlmIHRoZXkgc3BlY2lmaWVkIGEgYnl0ZXMgb2JqZWN0ICovCi0gICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgub2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm5fc3RyID0gIShQeUJ5dGVzX0NoZWNrKHBhdGgtPm9iamVjdCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgbmFtZSA9ICIuIjsKQEAgLTM3MzMsMTQgKzM3NzcsMTQgQEAKICAgICB9CiAKICAgICBpZiAoZGlycCA9PSBOVUxMKSB7Ci0gICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgIT0gLTEpIHsKICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIH0KLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgaWYgKChsaXN0ID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgewpAQCAtMzc1Niw3ICszODAwLDcgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKCJsaXN0ZGlyIiwgJnBhdGgpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzc4NiwxNyArMzgzMCw0NCBAQAogI2lmZGVmIEhBVkVfRkRPUEVORElSCiAgICAgICAgIGlmIChmZCA+IC0xKQogICAgICAgICAgICAgcmV3aW5kZGlyKGRpcnApOwotI2VuZGlmIC8qIEhBVkVfRkRPUEVORElSICovCisjZW5kaWYKICAgICAgICAgY2xvc2VkaXIoZGlycCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQogICAgIHJldHVybiBsaXN0OworfSAgLyogZW5kIG9mIF9wb3NpeF9saXN0ZGlyICovCisjZW5kaWYgIC8qIHdoaWNoIE9TICovCiAKLSNlbmRpZiAvKiB3aGljaCBPUyAqLwotfSAgLyogZW5kIG9mIHBvc2l4X2xpc3RkaXIgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9saXN0ZGlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOworCisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsaXN0ZGlyIjsKKyAgICBwYXRoLm51bGxhYmxlID0gMTsKKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgIHBhdGguYWxsb3dfZmQgPSAxOworICAgIHBhdGguZmQgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQorICAgIHJldHVybl92YWx1ZSA9IF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpcigmcGF0aCwgbGlzdCk7CisjZWxzZQorICAgIHJldHVybl92YWx1ZSA9IF9wb3NpeF9saXN0ZGlyKCZwYXRoLCBsaXN0KTsKKyNlbmRpZgorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAogI2lmZGVmIE1TX1dJTkRPV1MKIC8qIEEgaGVscGVyIGZ1bmN0aW9uIGZvciBhYnNwYXRoIG9uIHdpbjMyICovCkBAIC0zODA0LDE0ICszODc1LDE0IEBACiBwb3NpeF9fZ2V0ZnVsbHBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIKjJdOworICAgIGNoYXIgb3V0YnVmW01BWF9QQVRIXTsKICAgICBjaGFyICp0ZW1wOwogICAgIFB5T2JqZWN0ICpwbzsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0ZnVsbHBhdGhuYW1lIiwgJnBvKSkKICAgICB7CiAgICAgICAgIHdjaGFyX3QgKndwYXRoOwotICAgICAgICB3Y2hhcl90IHdvdXRidWZbTUFYX1BBVEgqMl0sICp3b3V0YnVmcCA9IHdvdXRidWY7CisgICAgICAgIHdjaGFyX3Qgd291dGJ1ZltNQVhfUEFUSF0sICp3b3V0YnVmcCA9IHdvdXRidWY7CiAgICAgICAgIHdjaGFyX3QgKnd0ZW1wOwogICAgICAgICBEV09SRCByZXN1bHQ7CiAgICAgICAgIFB5T2JqZWN0ICp2OwpAQCAtMzgyMyw3ICszODk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd291dGJ1ZiwgJnd0ZW1wKTsKICAgICAgICAgaWYgKHJlc3VsdCA+IFB5X0FSUkFZX0xFTkdUSCh3b3V0YnVmKSkgewotICAgICAgICAgICAgd291dGJ1ZnAgPSBtYWxsb2MocmVzdWx0ICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgICAgIHdvdXRidWZwID0gUHlNZW1fTWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgICAgICBpZiAoIXdvdXRidWZwKQogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwgcmVzdWx0LCB3b3V0YnVmcCwgJnd0ZW1wKTsKQEAgLTM4MzMsNyArMzkwNCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl9vYmplY3QoIkdldEZ1bGxQYXRoTmFtZVciLCBwbyk7CiAgICAgICAgIGlmICh3b3V0YnVmcCAhPSB3b3V0YnVmKQotICAgICAgICAgICAgZnJlZSh3b3V0YnVmcCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHdvdXRidWZwKTsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKQEAgLTM5MDMsNyArMzk3NCw3IEBACiAgICAgaWYoIWJ1Zl9zaXplKQogICAgICAgICByZXR1cm4gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUiLCBwbyk7CiAKLSAgICB0YXJnZXRfcGF0aCA9ICh3Y2hhcl90ICopbWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIHRhcmdldF9wYXRoID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYoIXRhcmdldF9wYXRoKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIApAQCAtMzkxNywzNiArMzk4OCwxMSBAQAogCiAgICAgdGFyZ2V0X3BhdGhbcmVzdWx0X2xlbmd0aF0gPSAwOwogICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIodGFyZ2V0X3BhdGgsIHJlc3VsdF9sZW5ndGgpOwotICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgIFB5TWVtX0ZyZWUodGFyZ2V0X3BhdGgpOwogICAgIHJldHVybiByZXN1bHQ7CiAKIH0gLyogZW5kIG9mIHBvc2l4X19nZXRmaW5hbHBhdGhuYW1lICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9fZ2V0ZmlsZWluZm9ybWF0aW9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBIQU5ETEUgaEZpbGU7Ci0gICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gaW5mbzsKLSAgICBpbnQgZmQ7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6X2dldGZpbGVpbmZvcm1hdGlvbiIsICZmZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLQotICAgIGhGaWxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7Ci0gICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLQotICAgIGlmICghR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaEZpbGUsICZpbmZvKSkKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgTlVMTCk7Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaWlpIiwgaW5mby5kd1ZvbHVtZVNlcmlhbE51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uRmlsZUluZGV4SGlnaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uRmlsZUluZGV4TG93KTsKLX0KLQogUHlEb2NfU1RSVkFSKHBvc2l4X19pc2Rpcl9fZG9jX18sCiAiUmV0dXJuIHRydWUgaWYgdGhlIHBhdGhuYW1lIHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnkuIik7CiAKQEAgLTM5ODUsNiArNDAzMSw1NSBAQAogICAgIGVsc2UKICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogfQorCitQeURvY19TVFJWQVIocG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lX19kb2NfXywKKyJSZXR1cm4gdm9sdW1lIG1vdW50IHBvaW50IG9mIHRoZSBzcGVjaWZpZWQgcGF0aC4iKTsKKworLyogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIGlzbW91bnQgb24gd2luZG93cyAqLworc3RhdGljIFB5T2JqZWN0ICoKK3Bvc2l4X19nZXR2b2x1bWVwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnBvLCAqcmVzdWx0OworICAgIHdjaGFyX3QgKnBhdGgsICptb3VudHBhdGg9TlVMTDsKKyAgICBzaXplX3QgYnVmbGVuOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0dm9sdW1lcGF0aG5hbWUiLCAmcG8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBwYXRoID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocG8sICZidWZsZW4pOworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ1ZmxlbiArPSAxOworCisgICAgLyogVm9sdW1lIHBhdGggc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiBlbnRpcmUgcGF0aCAqLworICAgIGJ1ZmxlbiA9IFB5X01BWChidWZsZW4sIE1BWF9QQVRIKTsKKworICAgIGlmIChidWZsZW4gPiBEV09SRF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJwYXRoIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1vdW50cGF0aCA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZmxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKG1vdW50cGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRWb2x1bWVQYXRoTmFtZVcocGF0aCwgbW91bnRwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKGJ1Zmxlbiwgc2l6ZV90LCBEV09SRCkpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXN1bHQgPSB3aW4zMl9lcnJvcl9vYmplY3QoIl9nZXR2b2x1bWVwYXRobmFtZSIsIHBvKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vdW50cGF0aCwgd2NzbGVuKG1vdW50cGF0aCkpOworCitleGl0OgorICAgIFB5TWVtX0ZyZWUobW91bnRwYXRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLyogZW5kIG9mIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSAqLworCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiBQeURvY19TVFJWQVIocG9zaXhfbWtkaXJfX2RvY19fLApAQCAtNDAwOSw2ICs0MTA0LDcgQEAKICAgICBpbnQgcmVzdWx0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJta2RpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aSRPJjpta2RpciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAogI2lmZGVmIEhBVkVfTUtESVJBVApAQCAtNDAyOCw3ICs0MTI0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJta2RpciIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZQpAQCAtNDA0NSw3ICs0MTQxLDcgQEAKICNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigibWtkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00MTYzLDYgKzQyNTksOCBAQAogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKICAgICBtZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWU7CiAgICAgc3RyY3B5KGZvcm1hdCwgIk8mTyZ8JE8mTyY6Iik7CiAgICAgc3RyY2F0KGZvcm1hdCwgZnVuY3Rpb25fbmFtZSk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCBmb3JtYXQsIGtleXdvcmRzLApAQCAtNDE5Niw3ICs0Mjk0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KGZ1bmN0aW9uX25hbWUsIGRzdC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00MjExLDcgKzQzMDksNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTQyNzUsNiArNDM3Myw3IEBACiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJtZGlyIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cm1kaXIiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX1VOTElOS0FUCkBAIC00MzAzLDcgKzQ0MDIsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInJtZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDQzMSw2ICs0NTMwLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidW5saW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6dW5saW5rIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9VTkxJTktBVApAQCAtNDQ1OSw3ICs0NTU5LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJ1bmxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00NzYyLDYgKzQ4NjIsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ1dGltZSI7CiAgICAgbWVtc2V0KCZ1dGltZSwgMCwgc2l6ZW9mKHV0aW1lX3QpKTsKICNpZiBVVElNRV9IQVZFX0ZECiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CkBAIC00ODU3LDE4ICs0OTU4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7Ci0gICAgICAgIHdpbjMyX2Vycm9yX29iamVjdCgidXRpbWUiLCBwYXRoLm9iamVjdCk7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCiAgICAgaWYgKHV0aW1lLm5vdykgewotICAgICAgICBTWVNURU1USU1FIG5vdzsKLSAgICAgICAgR2V0U3lzdGVtVGltZSgmbm93KTsKLSAgICAgICAgaWYgKCFTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93LCAmbXRpbWUpIHx8Ci0gICAgICAgICAgICAhU3lzdGVtVGltZVRvRmlsZVRpbWUoJm5vdywgJmF0aW1lKSkgewotICAgICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKyAgICAgICAgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoJm10aW1lKTsKKyAgICAgICAgYXRpbWUgPSBtdGltZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHRpbWVfdF90b19GSUxFX1RJTUUodXRpbWUuYXRpbWVfcywgdXRpbWUuYXRpbWVfbnMsICZhdGltZSk7CkBAIC00ODc5LDcgKzQ5NzUsNyBAQAogICAgICAgICAgICBhcyB0aGF0IG1heSBjb25mdXNlIHRoZSB1c2VyIGludG8gYmVsaWV2aW5nIHRoYXQKICAgICAgICAgICAgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhlIGZpbGUsIHdoZW4gaXQgYWxzbwogICAgICAgICAgICBjb3VsZCBiZSB0aGUgdGltZSBzdGFtcCB0aGF0IGdpdmVzIGEgcHJvYmxlbS4gKi8KLSAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgTlVMTCk7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwpAQCAtNDk2Miw4ICs1MDU4LDEwIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICAgICAqb3V0ID0gUHlNZW1fTWFsbG9jKHNpemUrMSk7Ci0gICAgaWYgKCEqb3V0KQorICAgIGlmICghKm91dCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgbWVtY3B5KCpvdXQsIFB5Qnl0ZXNfQXNTdHJpbmcoYnl0ZXMpLCBzaXplKzEpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgcmV0dXJuIDE7CkBAIC00OTkxLDggKzUwODksMTAgQEAKICAgICB9CiAgICAgZW52YyA9IDA7CiAgICAga2V5cyA9IFB5TWFwcGluZ19LZXlzKGVudik7CisgICAgaWYgKCFrZXlzKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIHZhbHMgPSBQeU1hcHBpbmdfVmFsdWVzKGVudik7Ci0gICAgaWYgKCFrZXlzIHx8ICF2YWxzKQorICAgIGlmICghdmFscykKICAgICAgICAgZ290byBlcnJvcjsKICAgICBpZiAoIVB5TGlzdF9DaGVjayhrZXlzKSB8fCAhUHlMaXN0X0NoZWNrKHZhbHMpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MDEzLDEwICs1MTEzLDYgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIC8qIE9taXQgUHNldWRvLUVudiBWYXJzIHRoYXQgV291bGQgQ29uZnVzZSBQcm9ncmFtcyBpZiBQYXNzZWQgT24gKi8KLSAgICAgICAgaWYgKHN0cmljbXAoaywgIkJFR0lOTElCUEFUSCIpICE9IDAgJiYgc3RyaWNtcChrLCAiRU5ETElCUEFUSCIpICE9IDApIHsKLSNlbmRpZgogICAgICAgICBrID0gUHlCeXRlc19Bc1N0cmluZyhrZXkyKTsKICAgICAgICAgdiA9IFB5Qnl0ZXNfQXNTdHJpbmcodmFsMik7CiAgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoa2V5MikgKyBQeUJ5dGVzX0dFVF9TSVpFKHZhbDIpICsgMjsKQEAgLTUwMzIsOSArNTEyOCw2IEBACiAgICAgICAgIGVudmxpc3RbZW52YysrXSA9IHA7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkyKTsKICAgICAgICAgUHlfREVDUkVGKHZhbDIpOwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIH0KLSNlbmRpZgogICAgIH0KICAgICBQeV9ERUNSRUYodmFscyk7CiAgICAgUHlfREVDUkVGKGtleXMpOwpAQCAtNTE2MCw2ICs1MjUzLDcgQEAKICAgICAgICBsaWtlIHBvc2l4LmVudmlyb24uICovCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImV4ZWN2ZSI7CiAjaWZkZWYgSEFWRV9GRVhFQ1ZFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTUxOTksNyArNTI5Myw3IEBACiAKICAgICAvKiBJZiB3ZSBnZXQgaGVyZSBpdCdzIGRlZmluaXRlbHkgYW4gZXJyb3IgKi8KIAotICAgIHBhdGhfcG9zaXhfZXJyb3IoImV4ZWN2ZSIsICZwYXRoKTsKKyAgICBwYXRoX2Vycm9yKCZwYXRoKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTI3NSwxOCArNTM2OSwxMiBAQAogICAgIH0KICAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbHNlCiAgICAgaWYgKG1vZGUgPT0gX09MRF9QX09WRVJMQVkpCiAgICAgICAgIG1vZGUgPSBfUF9PVkVSTEFZOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNwYXdudmFsID0gX3NwYXdudihtb2RlLCBwYXRoLCBhcmd2bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwogICAgIFB5X0RFQ1JFRihvcGF0aCk7CkBAIC01Mjk0LDExICs1MzgyLDcgQEAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMIiwgKFBZX0xPTkdfTE9ORykgc3Bhd252YWwpOwotI2VuZGlmCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIH0KIAogCkBAIC01Mzc0LDI3ICs1NDU4LDE3IEBACiAgICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKICAgICAgICAgZ290byBmYWlsXzE7CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzcGF3bnZhbCA9IHNwYXdudmUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VuZGlmCiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgICh2b2lkKSBwb3NpeF9lcnJvcigpOwogICAgIGVsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSBTSVpFT0ZfVk9JRF9QCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotI2Vsc2UKLSAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKF9QeV9QQVJTRV9JTlRQVFIsIHNwYXdudmFsKTsKIAogICAgIHdoaWxlICgtLWVudmMgPj0gMCkKICAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwpAQCAtNTQwNiwxODMgKzU0ODAsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLS8qIE9TLzIgc3VwcG9ydHMgc3Bhd252cCAmIHNwYXdudnBlIG5hdGl2ZWx5ICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwX19kb2NfXywKLSJzcGF3bnZwKG1vZGUsIGZpbGUsIGFyZ3MpXG5cblwKLUV4ZWN1dGUgdGhlIHByb2dyYW0gJ2ZpbGUnIGluIGEgbmV3IHByb2Nlc3MsIHVzaW5nIHRoZSBlbnZpcm9ubWVudFxuXAotc2VhcmNoIHBhdGggdG8gZmluZCB0aGUgZmlsZS5cblwKLVxuXAotICAgIG1vZGU6IG1vZGUgb2YgcHJvY2VzcyBjcmVhdGlvblxuXAotICAgIGZpbGU6IGV4ZWN1dGFibGUgZmlsZSBuYW1lXG5cCi0gICAgYXJnczogdHVwbGUgb3IgbGlzdCBvZiBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKLSAgICBQeU9iamVjdCAqYXJndjsKLSAgICBjaGFyICoqYXJndmxpc3Q7Ci0gICAgaW50IG1vZGUsIGksIGFyZ2M7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0KLSAgICAvKiBzcGF3bnZwIGhhcyB0aHJlZSBhcmd1bWVudHM6IChtb2RlLCBwYXRoLCBhcmd2KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpTyZPOnNwYXdudnAiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpIHsKLSAgICAgICAgICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBpKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKLSAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgc3Bhd252YWwgPSBzcGF3bnZwKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0KLSAgICBpZiAoc3Bhd252YWwgPT0gLTEpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotfQotCi0KLVB5RG9jX1NUUlZBUihwb3NpeF9zcGF3bnZwZV9fZG9jX18sCi0ic3Bhd252cGUobW9kZSwgZmlsZSwgYXJncywgZW52KVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2YgYXJndW1lbnRzXG5cCi0gICAgZW52OiBkaWN0aW9uYXJ5IG9mIHN0cmluZ3MgbWFwcGluZyB0byBzdHJpbmdzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9zcGF3bnZwZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3YsICplbnY7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGNoYXIgKiplbnZsaXN0OwotICAgIFB5T2JqZWN0ICpyZXM9TlVMTDsKLSAgICBpbnQgbW9kZTsKLSAgICBQeV9zc2l6ZV90IGFyZ2MsIGksIGVudmM7Ci0gICAgUHlfaW50cHRyX3Qgc3Bhd252YWw7Ci0gICAgUHlPYmplY3QgKigqZ2V0aXRlbSkoUHlPYmplY3QgKiwgUHlfc3NpemVfdCk7Ci0gICAgaW50IGxhc3RhcmcgPSAwOwotCi0gICAgLyogc3Bhd252cGUgaGFzIGZvdXIgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiwgZW52KSwgd2hlcmUKLSAgICAgICBhcmd2IGlzIGEgbGlzdCBvciB0dXBsZSBvZiBzdHJpbmdzIGFuZCBlbnYgaXMgYSBkaWN0aW9uYXJ5Ci0gICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpZXRPTzpzcGF3bnZwZSIsICZtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmFyZ3YsICZlbnYpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7Ci0gICAgaWYgKFB5TGlzdF9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlMaXN0X1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeUxpc3RfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhhcmd2KSkgewotICAgICAgICBhcmdjID0gUHlUdXBsZV9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlUdXBsZV9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGF3bnZwZSgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBpZiAoIVB5TWFwcGluZ19DaGVjayhlbnYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMyBtdXN0IGJlIGEgbWFwcGluZyBvYmplY3QiKTsKLSAgICAgICAgZ290byBmYWlsXzA7Ci0gICAgfQotCi0gICAgYXJndmxpc3QgPSBQeU1lbV9ORVcoY2hhciAqLCBhcmdjKzEpOwotICAgIGlmIChhcmd2bGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIGlmICghZnNjb252ZXJ0X3N0cmR1cCgoKmdldGl0ZW0pKGFyZ3YsIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFyZ3ZsaXN0W2ldKSkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdGFyZyA9IGk7Ci0gICAgICAgICAgICBnb3RvIGZhaWxfMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBsYXN0YXJnID0gYXJnYzsKLSAgICBhcmd2bGlzdFthcmdjXSA9IE5VTEw7Ci0KLSAgICBlbnZsaXN0ID0gcGFyc2VfZW52bGlzdChlbnYsICZlbnZjKTsKLSAgICBpZiAoZW52bGlzdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWxfMTsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2Vsc2UKLSAgICBzcGF3bnZhbCA9IF9zcGF3bnZwZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7Ci0jZW5kaWYKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoImwiLCAobG9uZykgc3Bhd252YWwpOwotCi0gICAgd2hpbGUgKC0tZW52YyA+PSAwKQotICAgICAgICBQeU1lbV9ERUwoZW52bGlzdFtlbnZjXSk7Ci0gICAgUHlNZW1fREVMKGVudmxpc3QpOwotICBmYWlsXzE6Ci0gICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGxhc3RhcmcpOwotICBmYWlsXzA6Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICByZXR1cm4gcmVzOwotfQotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjZW5kaWYgLyogSEFWRV9TUEFXTlYgKi8KIAogCkBAIC02MDg1LDcgKzU5ODIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X29wZW5wdHkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaW50IG1hc3Rlcl9mZCwgc2xhdmVfZmQ7CisgICAgaW50IG1hc3Rlcl9mZCA9IC0xLCBzbGF2ZV9mZCA9IC0xOwogI2lmbmRlZiBIQVZFX09QRU5QVFkKICAgICBjaGFyICogc2xhdmVfbmFtZTsKICNlbmRpZgpAQCAtNjA5OCwzNyArNTk5NSw1NiBAQAogCiAjaWZkZWYgSEFWRV9PUEVOUFRZCiAgICAgaWYgKG9wZW5wdHkoJm1hc3Rlcl9mZCwgJnNsYXZlX2ZkLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKICNlbGlmIGRlZmluZWQoSEFWRV9fR0VUUFRZKQogICAgIHNsYXZlX25hbWUgPSBfZ2V0cHR5KCZtYXN0ZXJfZmQsIE9fUkRXUiwgMDY2NiwgMCk7CiAgICAgaWYgKHNsYXZlX25hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSKTsKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNlbHNlCiAgICAgbWFzdGVyX2ZkID0gb3BlbihERVZfUFRZX0ZJTEUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBtYXN0ZXIgKi8KICAgICBpZiAobWFzdGVyX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICAgICBzaWdfc2F2ZWQgPSBQeU9TX3NldHNpZyhTSUdDSExELCBTSUdfREZMKTsKKwogICAgIC8qIGNoYW5nZSBwZXJtaXNzaW9uIG9mIHNsYXZlICovCiAgICAgaWYgKGdyYW50cHQobWFzdGVyX2ZkKSA8IDApIHsKICAgICAgICAgUHlPU19zZXRzaWcoU0lHQ0hMRCwgc2lnX3NhdmVkKTsKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CiAgICAgfQorCiAgICAgLyogdW5sb2NrIHNsYXZlICovCiAgICAgaWYgKHVubG9ja3B0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7CisKICAgICBzbGF2ZV9uYW1lID0gcHRzbmFtZShtYXN0ZXJfZmQpOyAvKiBnZXQgbmFtZSBvZiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHNsYXZlX2ZkID0gb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gc2xhdmUgKi8KKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKworICAgIHNsYXZlX2ZkID0gX1B5X29wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCiAgICAgaWYgKHNsYXZlX2ZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKKwogI2lmICFkZWZpbmVkKF9fQ1lHV0lOX18pICYmICFkZWZpbmVkKEhBVkVfREVWX1BUQykKICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAicHRlbSIpOyAvKiBwdXNoIHB0ZW0gKi8KICAgICBpb2N0bChzbGF2ZV9mZCwgSV9QVVNILCAibGR0ZXJtIik7IC8qIHB1c2ggbGR0ZXJtICovCkBAIC02MTQwLDYgKzYwNTYsMTYgQEAKIAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgbWFzdGVyX2ZkLCBzbGF2ZV9mZCk7CiAKK3Bvc2l4X2Vycm9yOgorICAgIHBvc2l4X2Vycm9yKCk7CisjaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpIHx8IGRlZmluZWQoSEFWRV9fR0VUUFRZKQorZXJyb3I6CisjZW5kaWYKKyAgICBpZiAobWFzdGVyX2ZkICE9IC0xKQorICAgICAgICBjbG9zZShtYXN0ZXJfZmQpOworICAgIGlmIChzbGF2ZV9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2Uoc2xhdmVfZmQpOworICAgIHJldHVybiBOVUxMOwogfQogI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX0RFVl9QVE1YKSAqLwogCkBAIC02NjMyLDIzICs2NTU4LDggQEAKICAgICBpbnQgc2lnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9JTlRSIHx8IHNpZyA9PSBYQ1BUX1NJR05BTF9CUkVBSykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NTZW5kU2lnbmFsRXhjZXB0aW9uKHBpZCwgc2lnKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZSBpZiAoc2lnID09IFhDUFRfU0lHTkFMX0tJTExQUk9DKSB7Ci0gICAgICAgIEFQSVJFVCByYzsKLSAgICAgICAgaWYgKChyYyA9IERvc0tpbGxQcm9jZXNzKERLUF9QUk9DRVNTLCBwaWQpKSAhPSBOT19FUlJPUikKLSAgICAgICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBOVUxMOyAvKiBVbnJlY29nbml6ZWQgU2lnbmFsIFJlcXVlc3RlZCAqLwotI2Vsc2UKICAgICBpZiAoa2lsbChwaWQsIHNpZykgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotI2VuZGlmCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNjY4NiwxNiArNjU5NywxNyBAQAogd2luMzJfa2lsbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBEV09SRCBwaWQsIHNpZywgZXJyOworICAgIHBpZF90IHBpZDsKKyAgICBEV09SRCBzaWcsIGVycjsKICAgICBIQU5ETEUgaGFuZGxlOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJrazpraWxsIiwgJnBpZCwgJnNpZykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIms6a2lsbCIsICZwaWQsICZzaWcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgY2FuIGJlIHNlbnQgQ1RSTCtDIG9yCiAgICAgICAgQ1RSTCtCUkVBSyBldmVudHMsIHByb3ZpZGVkIHRoZXkgaGFuZGxlIHNhaWQgZXZlbnRzLiAqLwogICAgIGlmIChzaWcgPT0gQ1RSTF9DX0VWRU5UIHx8IHNpZyA9PSBDVFJMX0JSRUFLX0VWRU5UKSB7Ci0gICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCBwaWQpID09IDApIHsKKyAgICAgICAgaWYgKEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudChzaWcsIChEV09SRClwaWQpID09IDApIHsKICAgICAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKICAgICAgICAgfQpAQCAtNjcwNSw3ICs2NjE3LDcgQEAKIAogICAgIC8qIElmIHRoZSBzaWduYWwgaXMgb3V0c2lkZSBvZiB3aGF0IEdlbmVyYXRlQ29uc29sZUN0cmxFdmVudCBjYW4gdXNlLAogICAgICAgIGF0dGVtcHQgdG8gb3BlbiBhbmQgdGVybWluYXRlIHRoZSBwcm9jZXNzLiAqLwotICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIHBpZCk7CisgICAgaGFuZGxlID0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGQUxTRSwgKERXT1JEKXBpZCk7CiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOwogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKQEAgLTcxMTEsNyArNzAyMyw3IEBACiAgICAgUHlfaW50cHRyX3QgcGlkOwogICAgIGludCBzdGF0dXMsIG9wdGlvbnM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBwaWQgPSBfY3dhaXQoJnN0YXR1cywgcGlkLCBvcHRpb25zKTsKQEAgLTcxMjAsNyArNzAzMiw3IEBACiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogCiAgICAgLyogc2hpZnQgdGhlIHN0YXR1cyBsZWZ0IGEgYnl0ZSBzbyB0aGlzIGlzIG1vcmUgbGlrZSB0aGUgUE9TSVggd2FpdHBpZCAqLwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOaSIsIFB5TG9uZ19Gcm9tUGlkKHBpZCksIHN0YXR1cyA8PCA4KTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSICJpIiwgcGlkLCBzdGF0dXMgPDwgOCk7CiB9CiAjZW5kaWYgLyogSEFWRV9XQUlUUElEIHx8IEhBVkVfQ1dBSVQgKi8KIApAQCAtNzE3MSw2ICs3MDgzLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicmVhZGxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpyZWFkbGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAjaWZkZWYgSEFWRV9SRUFETElOS0FUCkBAIC03MTkxLDcgKzcxMDQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAobGVuZ3RoIDwgMCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJyZWFkbGluayIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTcyMjcsOCArNzE0MCw5IEBACiAvKiBHcmFiIENyZWF0ZVN5bWJvbGljTGlua1cgZHluYW1pY2FsbHkgZnJvbSBrZXJuZWwzMiAqLwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rVykoTFBXU1RSLCBMUFdTVFIsIERXT1JEKSA9IE5VTEw7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKShMUFNUUiwgTFBTVFIsIERXT1JEKSA9IE5VTEw7CisKIHN0YXRpYyBpbnQKLWNoZWNrX0NyZWF0ZVN5bWJvbGljTGluaygpCitjaGVja19DcmVhdGVTeW1ib2xpY0xpbmsodm9pZCkKIHsKICAgICBISU5TVEFOQ0UgaEtlcm5lbDMyOwogICAgIC8qIG9ubHkgcmVjaGVjayAqLwpAQCAtNzI0Miw1NSArNzE1Niw1NyBAQAogICAgIHJldHVybiAoUHlfQ3JlYXRlU3ltYm9saWNMaW5rVyAmJiBQeV9DcmVhdGVTeW1ib2xpY0xpbmtBKTsKIH0KIAotdm9pZCBfZGlybmFtZVcoV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lVyhXQ0hBUiAqcGF0aCkKK3sKICAgICBXQ0hBUiAqcHRyOwogCiAgICAgLyogd2FsayB0aGUgcGF0aCBmcm9tIHRoZSBlbmQgdW50aWwgYSBiYWNrc2xhc2ggaXMgZW5jb3VudGVyZWQgKi8KLSAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKQotICAgIHsKLSAgICAgICAgaWYoKnB0ciA9PSAqTCJcXCIgfHwgKnB0ciA9PSAqTCIvIikgeworICAgIGZvcihwdHIgPSBwYXRoICsgd2NzbGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gTCdcXCcgfHwgKnB0ciA9PSBMJy8nKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAgKnB0ciA9IDA7CiB9CiAKLXZvaWQgX2Rpcm5hbWVBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLwotCisvKiBSZW1vdmUgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgcGF0aCAqLworc3RhdGljIHZvaWQKK19kaXJuYW1lQShjaGFyICpwYXRoKQorewogICAgIGNoYXIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyBzdHJsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykgeworICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pIHsKKyAgICAgICAgaWYgKCpwdHIgPT0gJ1xcJyB8fCAqcHRyID09ICcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi1pbnQgX2lzX2Fic1coV0NIQVIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNXKGNvbnN0IFdDSEFSICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09IEwnXFwnIHx8IHBhdGhbMF0gPT0gTCcvJyB8fCBwYXRoWzFdID09IEwnOic7CiAKIH0KIAotaW50IF9pc19hYnNBKGNoYXIgKnBhdGgpIHsKLSAgICAvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCi0KKy8qIElzIHRoaXMgcGF0aCBhYnNvbHV0ZT8gKi8KK3N0YXRpYyBpbnQKK19pc19hYnNBKGNvbnN0IGNoYXIgKnBhdGgpCit7CiAgICAgcmV0dXJuIHBhdGhbMF0gPT0gJ1xcJyB8fCBwYXRoWzBdID09ICcvJyB8fCBwYXRoWzFdID09ICc6JzsKIAogfQogCi12b2lkIF9qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5XKFdDSEFSICpkZXN0X3BhdGgsIGNvbnN0IFdDSEFSICpyb290LCBjb25zdCBXQ0hBUiAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzVyhyZXN0KSkgeworICAgIGlmIChfaXNfYWJzVyhyZXN0KSkgewogICAgICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTcyOTksMTcgKzcyMTUsMTkgQEAKIAogICAgIHdjc2NweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7Ci0gICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAqTCJcXCI7Ci0gICAgICAgIHJvb3RfbGVuICs9IDE7CisgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSBMJ1xcJzsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgd2NzY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLXZvaWQgX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkgewotICAgIC8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCi0gICAgaW50IHJvb3RfbGVuOworLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KK3N0YXRpYyB2b2lkCitfam9pbkEoY2hhciAqZGVzdF9wYXRoLCBjb25zdCBjaGFyICpyb290LCBjb25zdCBjaGFyICpyZXN0KQoreworICAgIHNpemVfdCByb290X2xlbjsKIAotICAgIGlmKF9pc19hYnNBKHJlc3QpKSB7CisgICAgaWYgKF9pc19hYnNBKHJlc3QpKSB7CiAgICAgICAgIHN0cmNweShkZXN0X3BhdGgsIHJlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzMxOSwxNCArNzIzNywxNSBAQAogICAgIHN0cmNweShkZXN0X3BhdGgsIHJvb3QpOwogICAgIGlmKHJvb3RfbGVuKSB7CiAgICAgICAgIGRlc3RfcGF0aFtyb290X2xlbl0gPSAnXFwnOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICByb290X2xlbisrOwogICAgIH0KICAgICBzdHJjcHkoZGVzdF9wYXRoK3Jvb3RfbGVuLCByZXN0KTsKIH0KIAotaW50IF9jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJXKFdDSEFSICpzcmMsIFdDSEFSICpkZXN0KQogewotICAgIC8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCiAgICAgV0lOMzJfRklMRV9BVFRSSUJVVEVfREFUQSBzcmNfaW5mbzsKICAgICBXQ0hBUiBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgV0NIQVIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9IEwiIjsKQEAgLTczNDIsMTggKzcyNjEsMTkgQEAKICAgICApOwogfQogCi1pbnQgX2NoZWNrX2RpckEoY2hhciAqc3JjLCBjaGFyICpkZXN0KQorLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KK3N0YXRpYyBpbnQKK19jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgY2hhciBkZXN0X3BhcmVudFtNQVhfUEFUSF07CiAgICAgY2hhciBzcmNfcmVzb2x2ZWRbTUFYX1BBVEhdID0gIiI7CiAKICAgICAvKiBkZXN0X3BhcmVudCA9IG9zLnBhdGguZGlybmFtZShkZXN0KSAqLwogICAgIHN0cmNweShkZXN0X3BhcmVudCwgZGVzdCk7Ci0gICAgX2Rpcm5hbWVXKGRlc3RfcGFyZW50KTsKKyAgICBfZGlybmFtZUEoZGVzdF9wYXJlbnQpOwogICAgIC8qIHNyY19yZXNvbHZlZCA9IG9zLnBhdGguam9pbihkZXN0X3BhcmVudCwgc3JjKSAqLwotICAgIF9qb2luVyhzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOworICAgIF9qb2luQShzcmNfcmVzb2x2ZWQsIGRlc3RfcGFyZW50LCBzcmMpOwogICAgIHJldHVybiAoCiAgICAgICAgIEdldEZpbGVBdHRyaWJ1dGVzRXhBKHNyY19yZXNvbHZlZCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmc3JjX2luZm8pCiAgICAgICAgICYmIHNyY19pbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkKQEAgLTczNzksOCArNzI5OSwxMCBAQAogI2VuZGlmCiAKICAgICBtZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHNyYykpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gInN5bWxpbmsiOwogICAgIHNyYy5hcmd1bWVudF9uYW1lID0gInNyYyI7CiAgICAgbWVtc2V0KCZkc3QsIDAsIHNpemVvZihkc3QpKTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBkc3QuYXJndW1lbnRfbmFtZSA9ICJkc3QiOwogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNzQzMyw3ICs3MzU1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJzeW1saW5rIiwgc3JjLm9iamVjdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnNyYyk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTc0NDksNyArNzM3MSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigic3ltbGluayIsICZkc3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZzcmMpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC03NjExLDMxICs3NTMzLDcgQEAKIHRpbWVzLiAgVGhlIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBuYW1lZCB0dXBsZSB3aXRoIHRoZXNlIGZpZWxkczpcblwKICAgKHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWUsIGVsYXBzZWRfdGltZSkiKTsKIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLXN0YXRpYyBsb25nCi1zeXN0ZW1fdXB0aW1lKHZvaWQpCi17Ci0gICAgVUxPTkcgICAgIHZhbHVlID0gMDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBEb3NRdWVyeVN5c0luZm8oUVNWX01TX0NPVU5ULCBRU1ZfTVNfQ09VTlQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3RpbWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIC8qIEN1cnJlbnRseSBPbmx5IFVwdGltZSBpcyBQcm92aWRlZCAtLSBPdGhlcnMgTGF0ZXIgKi8KLSAgICByZXR1cm4gYnVpbGRfdGltZXNfcmVzdWx0KAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc191dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19zdGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jdXRpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfY3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlzeXN0ZW1fdXB0aW1lKCkgLyAxMDAwKTsKLX0KLSNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7CkBAIC03NjU3LDcgKzc1NTUsNyBAQAogICAgICAgICAoZG91YmxlKTAsCiAgICAgICAgIChkb3VibGUpMCk7CiB9Ci0jZWxzZSAvKiBOZWl0aGVyIFdpbmRvd3Mgbm9yIE9TLzIgKi8KKyNlbHNlIC8qIE5vdCBXaW5kb3dzICovCiAjZGVmaW5lIE5FRURfVElDS1NfUEVSX1NFQ09ORAogc3RhdGljIGxvbmcgdGlja3NfcGVyX3NlY29uZCA9IC0xOwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc3NzcsNiArNzY3NSwxMCBAQAogCiAvKiBGdW5jdGlvbnMgYWN0aW5nIG9uIGZpbGUgZGVzY3JpcHRvcnMgKi8KIAorI2lmZGVmIE9fQ0xPRVhFQworZXh0ZXJuIGludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VuZGlmCisKIFB5RG9jX1NUUlZBUihwb3NpeF9vcGVuX19kb2NfXywKICJvcGVuKHBhdGgsIGZsYWdzLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSlcblxuXAogT3BlbiBhIGZpbGUgZm9yIGxvdyBsZXZlbCBJTy4gIFJldHVybnMgYSBmaWxlIGhhbmRsZSAoaW50ZWdlcikuXG5cCkBAIC03Nzk2LDggKzc2OTgsMTQgQEAKICAgICBpbnQgZmQ7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZWxpZiAhZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gIm9wZW4iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXxpJE8mOm9wZW4iLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAmZmxhZ3MsICZtb2RlLApAQCAtNzgwOSw2ICs3NzE3LDEyIEBACiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2VuZGlmCisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChwYXRoLndpZGUpCkBAIC03ODI0LDE2ICs3NzM4LDE3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChmZCA9PSAtMSkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgLyogZm9yY2UgdXNlIG9mIHBvc2l4X2Vycm9yIGhlcmUgZm9yIGV4YWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgIGlmIChwYXRoLndpZGUpCi0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9lcnJvcigpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigib3BlbiIsICZwYXRoKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgub2JqZWN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAorI2lmbmRlZiBNU19XSU5ET1dTCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogCiBleGl0OgpAQCAtNzg5MCwxMyArNzgwNSwxNCBAQAogcG9zaXhfZHVwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQ7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZHVwIiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBmZCA9IGR1cChmZCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKIH0KIApAQCAtNzkwNiwxNiArNzgyMiw4MiBAQAogRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvci4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2R1cDIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgaW50IGZkLCBmZDIsIHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmR1cDIiLCAmZmQsICZmZDIpKQorICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmZCIsICJmZDIiLCAiaW5oZXJpdGFibGUiLCBOVUxMfTsKKyAgICBpbnQgZmQsIGZkMjsKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIGludCByZXM7CisjaWYgZGVmaW5lZChIQVZFX0RVUDMpICYmIFwKKyAgICAhKGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpKQorICAgIC8qIGR1cDMoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI3KyBhbmQgZ2xpYmMgMi45ICovCisgICAgaW50IGR1cDNfd29ya3MgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWl8aTpkdXAyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLCAmZmQyLCAmaW5oZXJpdGFibGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmICghX1B5VmVyaWZ5X2ZkX2R1cDIoZmQsIGZkMikpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgLyogQ2hhcmFjdGVyIGZpbGVzIGxpa2UgY29uc29sZSBjYW5ub3QgYmUgbWFrZSBub24taW5oZXJpdGFibGUgKi8KKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoZmQyLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoIWluaGVyaXRhYmxlKQorICAgICAgICByZXMgPSBmY250bChmZCwgRl9EVVAyRkRfQ0xPRVhFQywgZmQyKTsKKyAgICBlbHNlCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNlbHNlCisKKyNpZmRlZiBIQVZFX0RVUDMKKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIGR1cDNfd29ya3MgIT0gMCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDMoZmQsIGZkMiwgT19DTE9FWEVDKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzID09IC0xKQorICAgICAgICAgICAgICAgIGR1cDNfd29ya3MgPSAoZXJybm8gIT0gRU5PU1lTKTsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlIHx8IGR1cDNfd29ya3MgPT0gMCkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisjaWZkZWYgSEFWRV9EVVAzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZgorCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNzk1OSw3ICs3OTQxLDcgQEAKIHBvc2l4X2xzZWVrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQsIGhvdzsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIFBZX0xPTkdfTE9ORyBwb3MsIHJlczsKICNlbHNlCiAgICAgb2ZmX3QgcG9zLCByZXM7CkBAIC03OTg3LDcgKzc5NjksNyBAQAogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIGhvdyk7CiAjZWxzZQogICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIGhvdyk7CkBAIC04MTkzLDcgKzgxNzUsNyBAQAogICAgIH0KICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgbGVuID0gSU5UX01BWDsKICAgICBzaXplID0gd3JpdGUoZmQsIHBidWYuYnVmLCAoaW50KWxlbik7CkBAIC04MjMwLDEyICs4MjEyLDEzIEBACiAgICAgb2ZmX3Qgc2J5dGVzOwogICAgIHN0cnVjdCBzZl9oZHRyIHNmOwogICAgIGludCBmbGFncyA9IDA7Ci0gICAgc2YuaGVhZGVycyA9IE5VTEw7Ci0gICAgc2YudHJhaWxlcnMgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJvdXQiLCAiaW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IiwgImNvdW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlcnMiLCAidHJhaWxlcnMiLCAiZmxhZ3MiLCBOVUxMfTsKIAorICAgIHNmLmhlYWRlcnMgPSBOVUxMOworICAgIHNmLnRyYWlsZXJzID0gTlVMTDsKKwogI2lmZGVmIF9fQVBQTEVfXwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZGljdCwgImlpTyZPJnxPT2k6c2VuZGZpbGUiLAogICAgICAgICBrZXl3b3JkcywgJm91dCwgJmluLCBfcGFyc2Vfb2ZmX3QsICZvZmZzZXQsIF9wYXJzZV9vZmZfdCwgJnNieXRlcywKQEAgLTgzNjgsNyArODM1MSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzICE9IDApIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiZnN0YXQiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAjZW5kaWYKQEAgLTg0MDEsMzUgKzgzODQsNjkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9waXBlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgSEZJTEUgcmVhZCwgd3JpdGU7Ci0gICAgQVBJUkVUIHJjOwotCi0gICAgcmMgPSBEb3NDcmVhdGVQaXBlKCAmcmVhZCwgJndyaXRlLCA0MDk2KTsKLSAgICBpZiAocmMgIT0gTk9fRVJST1IpCi0gICAgICAgIHJldHVybiBvczJfZXJyb3IocmMpOwotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCByZWFkLCB3cml0ZSk7Ci0jZWxzZQotI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaW50IGZkc1syXTsKLSAgICBpbnQgcmVzOwotICAgIHJlcyA9IHBpcGUoZmRzKTsKLSAgICBpZiAocmVzICE9IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZmRzWzBdLCBmZHNbMV0pOwotI2Vsc2UgLyogTVNfV0lORE9XUyAqLworI2lmZGVmIE1TX1dJTkRPV1MKICAgICBIQU5ETEUgcmVhZCwgd3JpdGU7Ci0gICAgaW50IHJlYWRfZmQsIHdyaXRlX2ZkOworICAgIFNFQ1VSSVRZX0FUVFJJQlVURVMgYXR0cjsKICAgICBCT09MIG9rOwotICAgIG9rID0gQ3JlYXRlUGlwZSgmcmVhZCwgJndyaXRlLCBOVUxMLCAwKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoIkNyZWF0ZVBpcGUiLCBOVUxMKTsKLSAgICByZWFkX2ZkID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdClyZWFkLCAwKTsKLSAgICB3cml0ZV9mZCA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3Qpd3JpdGUsIDEpOwotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgcmVhZF9mZCwgd3JpdGVfZmQpOwotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKyNlbHNlCisgICAgaW50IHJlczsKICNlbmRpZgorCisjaWZkZWYgTVNfV0lORE9XUworICAgIGF0dHIubkxlbmd0aCA9IHNpemVvZihhdHRyKTsKKyAgICBhdHRyLmxwU2VjdXJpdHlEZXNjcmlwdG9yID0gTlVMTDsKKyAgICBhdHRyLmJJbmhlcml0SGFuZGxlID0gRkFMU0U7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgb2sgPSBDcmVhdGVQaXBlKCZyZWFkLCAmd3JpdGUsICZhdHRyLCAwKTsKKyAgICBpZiAob2spIHsKKyAgICAgICAgZmRzWzBdID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdClyZWFkLCBfT19SRE9OTFkpOworICAgICAgICBmZHNbMV0gPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXdyaXRlLCBfT19XUk9OTFkpOworICAgICAgICBpZiAoZmRzWzBdID09IC0xIHx8IGZkc1sxXSA9PSAtMSkgeworICAgICAgICAgICAgQ2xvc2VIYW5kbGUocmVhZCk7CisgICAgICAgICAgICBDbG9zZUhhbmRsZSh3cml0ZSk7CisgICAgICAgICAgICBvayA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghb2spCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyNlbHNlCisKKyNpZmRlZiBIQVZFX1BJUEUyCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlcyA9IHBpcGUyKGZkcywgT19DTE9FWEVDKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKHJlcyAhPSAwICYmIGVycm5vID09IEVOT1NZUykKKyAgICB7CisjZW5kaWYKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBwaXBlKGZkcyk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZHNbMF0sIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1swXSk7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzFdKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkc1sxXSwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzBdKTsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisjaWZkZWYgSEFWRV9QSVBFMgorICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHJlcyAhPSAwKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworI2VuZGlmIC8qICFNU19XSU5ET1dTICovCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7CiB9CiAjZW5kaWYgIC8qIEhBVkVfUElQRSAqLwogCkBAIC04NzI4LDYgKzg3NDUsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgImxlbmd0aCIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ0cnVuY2F0ZSI7CiAjaWZkZWYgSEFWRV9GVFJVTkNBVEUKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtODc0NSw3ICs4NzYzLDcgQEAKICAgICAgICAgcmVzID0gdHJ1bmNhdGUocGF0aC5uYXJyb3csIGxlbmd0aCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmVzdWx0ID0gcGF0aF9wb3NpeF9lcnJvcigidHJ1bmNhdGUiLCAmcGF0aCk7CisgICAgICAgIHJlc3VsdCA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgIGVsc2UgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJlc3VsdCA9IFB5X05vbmU7CkBAIC05MTY4LDYgKzkxODYsMTAgQEAKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDgsIFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3QuZl9mbGFnKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCA5LCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0LmZfbmFtZW1heCkpOwogI2VuZGlmCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXR1cm4gdjsKIH0KQEAgLTkyMTcsNiArOTIzOSw3IEBACiAgICAgc3RydWN0IHN0YXR2ZnMgc3Q7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInN0YXR2ZnMiOwogI2lmZGVmIEhBVkVfRlNUQVRWRlMKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtOTI0Myw3ICs5MjY2LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX3Bvc2l4X2Vycm9yKCJzdGF0dmZzIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtOTQ4MCw2ICs5NTAzLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJuYW1lIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInBhdGhjb25mIjsKICNpZmRlZiBIQVZFX0ZQQVRIQ09ORgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC05NTAwLDcgKzk1MjQsNyBAQAogICAgICAgICAgICAgLyogY291bGQgYmUgYSBwYXRoIG9yIG5hbWUgcHJvYmxlbSAqLwogICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9wb3NpeF9lcnJvcigicGF0aGNvbmYiLCAmcGF0aCk7CisgICAgICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcobGltaXQpOwpAQCAtOTY4Miw3ICs5NzA2LDcgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBpbnQgbmFtZTsKICAgICBjaGFyIGJ1ZmZlclsyNTVdOwotICAgIGludCBsZW47CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6Y29uZnN0ciIsIGNvbnZfY29uZnN0cl9jb25mbmFtZSwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk2OTksNyArOTcyMyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoKHVuc2lnbmVkIGludClsZW4gPj0gc2l6ZW9mKGJ1ZmZlcikpIHsKKyAgICBpZiAobGVuID49IHNpemVvZihidWZmZXIpKSB7CiAgICAgICAgIGNoYXIgKmJ1ZiA9IFB5TWVtX01hbGxvYyhsZW4pOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMjI5LDcgKzEwMjUzLDcgQEAKICAgICBpbnQgbmFtZTsKIAogICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpzeXNjb25mIiwgY29udl9zeXNjb25mX2NvbmZuYW1lLCAmbmFtZSkpIHsKLSAgICAgICAgaW50IHZhbHVlOworICAgICAgICBsb25nIHZhbHVlOwogCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgdmFsdWUgPSBzeXNjb25mKG5hbWUpOwpAQCAtMTA1NTksNiArMTA1ODMsOCBAQAogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKKyAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJnZXR4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpnZXR4YXR0ciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCkBAIC0xMDU3NSw3ICsxMDYwMSw3IEBACiAgICAgICAgIHN0YXRpYyBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplc1tdID0gezEyOCwgWEFUVFJfU0laRV9NQVgsIDB9OwogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJnZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmZmVyX3NpemUpOwpAQCAtMTA1OTcsNyArMTA2MjMsNyBAQAogICAgICAgICAgICAgYnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFUkFOR0UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJnZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAKQEAgLTEwNjM2LDYgKzEwNjYyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInNldHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOwogICAgIG1lbXNldCgmdmFsdWUsIDAsIHNpemVvZih2YWx1ZSkpOwpAQCAtMTA2NjMsNyArMTA2OTAsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJzZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTEwNjk3LDcgKzEwNzI0LDkgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJhdHRyaWJ1dGUiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJlbW92ZXhhdHRyIjsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOworICAgIGF0dHJpYnV0ZS5mdW5jdGlvbl9uYW1lID0gInJlbW92ZXhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfCRwOnJlbW92ZXhhdHRyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkcywKQEAgLTEwNzE5LDcgKzEwNzQ4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigicmVtb3ZleGF0dHIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0xMDc1NSw2ICsxMDc4NCw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxpc3R4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgcGF0aC5mZCA9IC0xOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJiRwOmxpc3R4YXR0ciIsIGtleXdvcmRzLApAQCAtMTA3NzMsNyArMTA4MDMsNyBAQAogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgICAvKiBFUkFOR0UgKi8KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImxpc3R4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyID0gUHlNZW1fTUFMTE9DKGJ1ZmZlcl9zaXplKTsKQEAgLTEwNzk3LDcgKzEwODI3LDcgQEAKICAgICAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aF9lcnJvcigibGlzdHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDk3NSwxNCArMTEwMDUsMTQ1IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKSAqLwogCitQeURvY19TVFJWQVIocG9zaXhfY3B1X2NvdW50X19kb2NfXywKKyJjcHVfY291bnQoKSAtPiBpbnRlZ2VyXG5cblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSwgb3IgTm9uZSBpZiB0aGlzIHZhbHVlIGNhbm5vdCBiZVxuXAorZXN0YWJsaXNoZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9jcHVfY291bnQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IG5jcHUgPSAwOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBTWVNURU1fSU5GTyBzeXNpbmZvOworICAgIEdldFN5c3RlbUluZm8oJnN5c2luZm8pOworICAgIG5jcHUgPSBzeXNpbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOworI2VsaWYgZGVmaW5lZChfX2hwdXgpCisgICAgbmNwdSA9IG1wY3RsKE1QQ19HRVROVU1TUFVTLCBOVUxMLCBOVUxMKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19OUFJPQ0VTU09SU19PTkxOKQorICAgIG5jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKyNlbGlmIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19OZXRCU0RfXykgICAgfHwgXAorICAgICAgZGVmaW5lZChfX0FQUExFX18pCisgICAgaW50IG1pYlsyXTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKG5jcHUpOworICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICBtaWJbMV0gPSBIV19OQ1BVOworICAgIGlmIChzeXNjdGwobWliLCAyLCAmbmNwdSwgJmxlbiwgTlVMTCwgMCkgIT0gMCkKKyAgICAgICAgbmNwdSA9IDA7CisjZW5kaWYKKyAgICBpZiAobmNwdSA+PSAxKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG5jcHUpOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihnZXRfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJnZXRfaW5oZXJpdGFibGUoZmQpIC0+IGJvb2xcbiIgXAorICAgICJcbiIgXAorICAgICJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZDsKKyAgICBpbnQgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Z2V0X2luaGVyaXRhYmxlIiwgJmZkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgaW5oZXJpdGFibGUgPSBfUHlfZ2V0X2luaGVyaXRhYmxlKGZkKTsKKyAgICBpZiAoaW5oZXJpdGFibGUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGluaGVyaXRhYmxlKTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgInNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZCwgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOnNldF9pbmhlcml0YWJsZSIsICZmZCwgJmluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCBOVUxMKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisKKyNpZmRlZiBNU19XSU5ET1dTCitQeURvY19TVFJWQVIoZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgImdldF9oYW5kbGVfaW5oZXJpdGFibGUoZmQpIC0+IGJvb2xcbiIgXAorICAgICJcbiIgXAorICAgICJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiOmdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCAmaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCAmZmxhZ3MpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCk7Cit9CisKK1B5RG9jX1NUUlZBUihzZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAic2V0X2hhbmRsZV9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOnNldF9oYW5kbGVfaW5oZXJpdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSloYW5kbGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIGZsYWdzKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmICAgLyogTVNfV0lORE9XUyAqLworCisKIAogc3RhdGljIFB5TWV0aG9kRGVmIHBvc2l4X21ldGhvZHNbXSA9IHsKLSAgICB7ImFjY2VzcyIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfYWNjZXNzX19kb2NfX30sCi0jaWZkZWYgSEFWRV9UVFlOQU1FCi0gICAgeyJ0dHluYW1lIiwgICAgICAgICBwb3NpeF90dHluYW1lLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3R0eW5hbWVfX2RvY19ffSwKLSNlbmRpZgorCisgICAgT1NfU1RBVF9NRVRIT0RERUYKKyAgICBPU19BQ0NFU1NfTUVUSE9EREVGCisgICAgT1NfVFRZTkFNRV9NRVRIT0RERUYKKwogICAgIHsiY2hkaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2NoZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2NoZGlyX19kb2NfX30sCkBAIC0xMTAyMCwxMiArMTExODEsMTAgQEAKICNpZmRlZiBIQVZFX0NURVJNSUQKICAgICB7ImN0ZXJtaWQiLCAgICAgICAgIHBvc2l4X2N0ZXJtaWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9jdGVybWlkX19kb2NfX30sCiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dFVENXRAogICAgIHsiZ2V0Y3dkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF91bmljb2RlLAogICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRjd2RfX2RvY19ffSwKICAgICB7ImdldGN3ZGIiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9nZXRjd2RfYnl0ZXMsCiAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZGJfX2RvY19ffSwKLSNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9MSU5LKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJsaW5rIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfbGluaywKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCkBAIC0xMTA2OCw5ICsxMTIyNyw2IEBACiAgICAgeyJybWRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfcm1kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfcm1kaXJfX2RvY19ffSwKLSAgICB7InN0YXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3N0YXRfX2RvY19ffSwKICAgICB7InN0YXRfZmxvYXRfdGltZXMiLCBzdGF0X2Zsb2F0X3RpbWVzLCBNRVRIX1ZBUkFSR1MsIHN0YXRfZmxvYXRfdGltZXNfX2RvY19ffSwKICNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykKICAgICB7InN5bWxpbmsiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zeW1saW5rLApAQCAtMTExMDUsMTAgKzExMjYxLDYgQEAKICNpZmRlZiBIQVZFX1NQQVdOVgogICAgIHsic3Bhd252IiwgICAgICAgICAgcG9zaXhfc3Bhd252LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudl9fZG9jX199LAogICAgIHsic3Bhd252ZSIsICAgICAgICAgcG9zaXhfc3Bhd252ZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZlX19kb2NfX30sCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICB7InNwYXdudnAiLCAgICAgICAgIHBvc2l4X3NwYXdudnAsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252cF9fZG9jX199LAotICAgIHsic3Bhd252cGUiLCAgICAgICAgcG9zaXhfc3Bhd252cGUsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252cGVfX2RvY19ffSwKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCiAjaWZkZWYgSEFWRV9GT1JLMQogICAgIHsiZm9yazEiLCAgICAgICBwb3NpeF9mb3JrMSwgTUVUSF9OT0FSR1MsIHBvc2l4X2ZvcmsxX19kb2NfX30sCkBAIC0xMTI1Niw3ICsxMTQwOCw4IEBACiAgICAgeyJjbG9zZXJhbmdlIiwgICAgICBwb3NpeF9jbG9zZXJhbmdlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2Nsb3NlcmFuZ2VfX2RvY19ffSwKICAgICB7ImRldmljZV9lbmNvZGluZyIsIGRldmljZV9lbmNvZGluZywgTUVUSF9WQVJBUkdTLCBkZXZpY2VfZW5jb2RpbmdfX2RvY19ffSwKICAgICB7ImR1cCIsICAgICAgICAgICAgIHBvc2l4X2R1cCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9kdXBfX2RvY19ffSwKLSAgICB7ImR1cDIiLCAgICAgICAgICAgIHBvc2l4X2R1cDIsIE1FVEhfVkFSQVJHUywgcG9zaXhfZHVwMl9fZG9jX199LAorICAgIHsiZHVwMiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2R1cDIsCisgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBwb3NpeF9kdXAyX19kb2NfX30sCiAjaWZkZWYgSEFWRV9MT0NLRgogICAgIHsibG9ja2YiLCAgICAgICAgICAgcG9zaXhfbG9ja2YsIE1FVEhfVkFSQVJHUywgcG9zaXhfbG9ja2ZfX2RvY19ffSwKICNlbmRpZgpAQCAtMTEzODcsOSArMTE1NDAsOSBAQAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB7Il9nZXRmdWxscGF0aG5hbWUiLCAgICAgICAgcG9zaXhfX2dldGZ1bGxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7Il9nZXRmaW5hbHBhdGhuYW1lIiwgICAgICAgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCi0gICAgeyJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgICAgIHBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAgeyJfaXNkaXIiLCAgICAgICAgICAgICAgICAgIHBvc2l4X19pc2RpciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9faXNkaXJfX2RvY19ffSwKICAgICB7Il9nZXRkaXNrdXNhZ2UiLCAgICAgICAgICAgd2luMzJfX2dldGRpc2t1c2FnZSwgTUVUSF9WQVJBUkdTLCB3aW4zMl9fZ2V0ZGlza3VzYWdlX19kb2NfX30sCisgICAgeyJfZ2V0dm9sdW1lcGF0aG5hbWUiLCAgICAgIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19ffSwKICNlbmRpZgogI2lmZGVmIEhBVkVfR0VUTE9BREFWRwogICAgIHsiZ2V0bG9hZGF2ZyIsICAgICAgcG9zaXhfZ2V0bG9hZGF2ZywgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGxvYWRhdmdfX2RvY19ffSwKQEAgLTExNDI1LDY5ICsxMTU3OCwyMCBAQAogI2lmIGRlZmluZWQoVEVSTVNJWkVfVVNFX0NPTklPKSB8fCBkZWZpbmVkKFRFUk1TSVpFX1VTRV9JT0NUTCkKICAgICB7ImdldF90ZXJtaW5hbF9zaXplIiwgZ2V0X3Rlcm1pbmFsX3NpemUsIE1FVEhfVkFSQVJHUywgdGVybXNpemVfX2RvY19ffSwKICNlbmRpZgorICAgIHsiY3B1X2NvdW50IiwgKFB5Q0Z1bmN0aW9uKXBvc2l4X2NwdV9jb3VudCwKKyAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9jcHVfY291bnRfX2RvY19ffSwKKyAgICB7ImdldF9pbmhlcml0YWJsZSIsIHBvc2l4X2dldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBnZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKyAgICB7InNldF9pbmhlcml0YWJsZSIsIHBvc2l4X3NldF9pbmhlcml0YWJsZSwgTUVUSF9WQVJBUkdTLCBzZXRfaW5oZXJpdGFibGVfX2RvY19ffSwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgeyJnZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgcG9zaXhfZ2V0X2hhbmRsZV9pbmhlcml0YWJsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBnZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisgICAgeyJzZXRfaGFuZGxlX2luaGVyaXRhYmxlIiwgcG9zaXhfc2V0X2hhbmRsZV9pbmhlcml0YWJsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBzZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfX30sCisjZW5kaWYKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKIAotc3RhdGljIGludAotaW5zKFB5T2JqZWN0ICptb2R1bGUsIGNoYXIgKnN5bWJvbCwgbG9uZyB2YWx1ZSkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobW9kdWxlLCBzeW1ib2wsIHZhbHVlKTsKLX0KLQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0vKiBJbnNlcnQgUGxhdGZvcm0tU3BlY2lmaWMgQ29uc3RhbnQgVmFsdWVzIChTdHJpbmdzICYgTnVtYmVycykgb2YgQ29tbW9uIFVzZSAqLwotc3RhdGljIGludCBpbnNlcnR2YWx1ZXMoUHlPYmplY3QgKm1vZHVsZSkKLXsKLSAgICBBUElSRVQgICAgcmM7Ci0gICAgVUxPTkcgICAgIHZhbHVlc1tRU1ZfTUFYKzFdOwotICAgIFB5T2JqZWN0ICp2OwotICAgIGNoYXIgICAgICp2ZXIsIHRtcFs1MF07Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmMgPSBEb3NRdWVyeVN5c0luZm8oMUwsIFFTVl9NQVgsICZ2YWx1ZXNbMV0sIHNpemVvZihVTE9ORykgKiBRU1ZfTUFYKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJjICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIG9zMl9lcnJvcihyYyk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1lbWluc3RhbGxlZCIsIHZhbHVlc1tRU1ZfVE9UUEhZU01FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtZW1rZXJuZWwiLCAgICB2YWx1ZXNbUVNWX1RPVFJFU01FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtZW12aXJ0dWFsIiwgICB2YWx1ZXNbUVNWX1RPVEFWQUlMTUVNXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1heHBhdGhsZW4iLCAgIHZhbHVlc1tRU1ZfTUFYX1BBVEhfTEVOR1RIXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgIm1heG5hbWVsZW4iLCAgIHZhbHVlc1tRU1ZfTUFYX0NPTVBfTEVOR1RIXSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKG1vZHVsZSwgInJldmlzaW9uIiwgICAgIHZhbHVlc1tRU1ZfVkVSU0lPTl9SRVZJU0lPTl0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJ0aW1lc2xpY2UiLCAgICB2YWx1ZXNbUVNWX01JTl9TTElDRV0pKSByZXR1cm4gLTE7Ci0KLSAgICBzd2l0Y2ggKHZhbHVlc1tRU1ZfVkVSU0lPTl9NSU5PUl0pIHsKLSAgICBjYXNlIDA6ICB2ZXIgPSAiMi4wMCI7IGJyZWFrOwotICAgIGNhc2UgMTA6IHZlciA9ICIyLjEwIjsgYnJlYWs7Ci0gICAgY2FzZSAxMTogdmVyID0gIjIuMTEiOyBicmVhazsKLSAgICBjYXNlIDMwOiB2ZXIgPSAiMy4wMCI7IGJyZWFrOwotICAgIGNhc2UgNDA6IHZlciA9ICI0LjAwIjsgYnJlYWs7Ci0gICAgY2FzZSA1MDogdmVyID0gIjUuMDAiOyBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBQeU9TX3NucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksCi0gICAgICAgICAgICAgICAgICAgICAgIiVkLSVkIiwgdmFsdWVzW1FTVl9WRVJTSU9OX01BSk9SXSwKLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbUVNWX1ZFUlNJT05fTUlOT1JdKTsKLSAgICAgICAgdmVyID0gJnRtcFswXTsKLSAgICB9Ci0KLSAgICAvKiBBZGQgSW5kaWNhdG9yIG9mIHRoZSBWZXJzaW9uIG9mIHRoZSBPcGVyYXRpbmcgU3lzdGVtICovCi0gICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG1vZHVsZSwgInZlcnNpb24iLCB0bXApIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogQWRkIEluZGljYXRvciBvZiBXaGljaCBEcml2ZSB3YXMgVXNlZCB0byBCb290IHRoZSBTeXN0ZW0gKi8KLSAgICB0bXBbMF0gPSAnQScgKyB2YWx1ZXNbUVNWX0JPT1RfRFJJVkVdIC0gMTsKLSAgICB0bXBbMV0gPSAnOic7Ci0gICAgdG1wWzJdID0gJ1wwJzsKLQotICAgIHJldHVybiBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtb2R1bGUsICJib290ZHJpdmUiLCB0bXApOwotfQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKQogc3RhdGljIGludAogZW5hYmxlX3N5bWxpbmsoKQpAQCAtMTE1MTgsNDAxICsxMTYyMiwzODEgQEAKICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLwogCiBzdGF0aWMgaW50Ci1hbGxfaW5zKFB5T2JqZWN0ICpkKQorYWxsX2lucyhQeU9iamVjdCAqbSkKIHsKICNpZmRlZiBGX09LCi0gICAgaWYgKGlucyhkLCAiRl9PSyIsIChsb25nKUZfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBSX09LCi0gICAgaWYgKGlucyhkLCAiUl9PSyIsIChsb25nKVJfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXX09LCi0gICAgaWYgKGlucyhkLCAiV19PSyIsIChsb25nKVdfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBYX09LCi0gICAgaWYgKGlucyhkLCAiWF9PSyIsIChsb25nKVhfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFhfT0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBOR1JPVVBTX01BWAotICAgIGlmIChpbnMoZCwgIk5HUk9VUFNfTUFYIiwgKGxvbmcpTkdST1VQU19NQVgpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5HUk9VUFNfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgVE1QX01BWAotICAgIGlmIChpbnMoZCwgIlRNUF9NQVgiLCAobG9uZylUTVBfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUTVBfTUFYKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV0NPTlRJTlVFRAotICAgIGlmIChpbnMoZCwgIldDT05USU5VRUQiLCAobG9uZylXQ09OVElOVUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXQ09OVElOVUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV05PSEFORwotICAgIGlmIChpbnMoZCwgIldOT0hBTkciLCAobG9uZylXTk9IQU5HKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXTk9IQU5HKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV1VOVFJBQ0VECi0gICAgaWYgKGlucyhkLCAiV1VOVFJBQ0VEIiwgKGxvbmcpV1VOVFJBQ0VEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXVU5UUkFDRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JET05MWQotICAgIGlmIChpbnMoZCwgIk9fUkRPTkxZIiwgKGxvbmcpT19SRE9OTFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkRPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19XUk9OTFkKLSAgICBpZiAoaW5zKGQsICJPX1dST05MWSIsIChsb25nKU9fV1JPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1dST05MWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fUkRXUgotICAgIGlmIChpbnMoZCwgIk9fUkRXUiIsIChsb25nKU9fUkRXUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19SRFdSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OREVMQVkKLSAgICBpZiAoaW5zKGQsICJPX05ERUxBWSIsIChsb25nKU9fTkRFTEFZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05ERUxBWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9OQkxPQ0sKLSAgICBpZiAoaW5zKGQsICJPX05PTkJMT0NLIiwgKGxvbmcpT19OT05CTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT05CTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQVBQRU5ECi0gICAgaWYgKGlucyhkLCAiT19BUFBFTkQiLCAobG9uZylPX0FQUEVORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BUFBFTkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RTWU5DCi0gICAgaWYgKGlucyhkLCAiT19EU1lOQyIsIChsb25nKU9fRFNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRFNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JTWU5DCi0gICAgaWYgKGlucyhkLCAiT19SU1lOQyIsIChsb25nKU9fUlNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUlNZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NZTkMKLSAgICBpZiAoaW5zKGQsICJPX1NZTkMiLCAobG9uZylPX1NZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9DVFRZCi0gICAgaWYgKGlucyhkLCAiT19OT0NUVFkiLCAobG9uZylPX05PQ1RUWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0NUVFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0NSRUFUCi0gICAgaWYgKGlucyhkLCAiT19DUkVBVCIsIChsb25nKU9fQ1JFQVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQ1JFQVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYQ0wKLSAgICBpZiAoaW5zKGQsICJPX0VYQ0wiLCAobG9uZylPX0VYQ0wpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhDTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVFJVTkMKLSAgICBpZiAoaW5zKGQsICJPX1RSVU5DIiwgKGxvbmcpT19UUlVOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UUlVOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQklOQVJZCi0gICAgaWYgKGlucyhkLCAiT19CSU5BUlkiLCAobG9uZylPX0JJTkFSWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19CSU5BUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RFWFQKLSAgICBpZiAoaW5zKGQsICJPX1RFWFQiLCAobG9uZylPX1RFWFQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVEVYVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fWEFUVFIKLSAgICBpZiAoaW5zKGQsICJPX1hBVFRSIiwgKGxvbmcpT19YQVRUUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19YQVRUUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTEFSR0VGSUxFCi0gICAgaWYgKGlucyhkLCAiT19MQVJHRUZJTEUiLCAobG9uZylPX0xBUkdFRklMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19MQVJHRUZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1NITE9DSwotICAgIGlmIChpbnMoZCwgIk9fU0hMT0NLIiwgKGxvbmcpT19TSExPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0hMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWExPQ0sKLSAgICBpZiAoaW5zKGQsICJPX0VYTE9DSyIsIChsb25nKU9fRVhMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhFQwotICAgIGlmIChpbnMoZCwgIk9fRVhFQyIsIChsb25nKU9fRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TRUFSQ0gKLSAgICBpZiAoaW5zKGQsICJPX1NFQVJDSCIsIChsb25nKU9fU0VBUkNIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NFQVJDSCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIE9fUEFUSAorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1BBVEgpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RUWV9JTklUCi0gICAgaWYgKGlucyhkLCAiT19UVFlfSU5JVCIsIChsb25nKU9fVFRZX0lOSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVFRZX0lOSVQpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBPX1RNUEZJTEUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19UTVBGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19QUk9DRVNTCi0gICAgaWYgKGlucyhkLCAiUFJJT19QUk9DRVNTIiwgKGxvbmcpUFJJT19QUk9DRVNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1BST0NFU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1BHUlAKLSAgICBpZiAoaW5zKGQsICJQUklPX1BHUlAiLCAobG9uZylQUklPX1BHUlApKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fUEdSUCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fVVNFUgotICAgIGlmIChpbnMoZCwgIlBSSU9fVVNFUiIsIChsb25nKVBSSU9fVVNFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19VU0VSKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19DTE9FWEVDCi0gICAgaWYgKGlucyhkLCAiT19DTE9FWEVDIiwgKGxvbmcpT19DTE9FWEVDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0FDQ01PREUKLSAgICBpZiAoaW5zKGQsICJPX0FDQ01PREUiLCAobG9uZylPX0FDQ01PREUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQUNDTU9ERSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAKICNpZmRlZiBTRUVLX0hPTEUKLSAgICBpZiAoaW5zKGQsICJTRUVLX0hPTEUiLCAobG9uZylTRUVLX0hPTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNFRUtfSE9MRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNFRUtfREFUQQotICAgIGlmIChpbnMoZCwgIlNFRUtfREFUQSIsIChsb25nKVNFRUtfREFUQSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0VFS19EQVRBKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIE1TIFdpbmRvd3MgKi8KICNpZmRlZiBPX05PSU5IRVJJVAogICAgIC8qIERvbid0IGluaGVyaXQgaW4gY2hpbGQgcHJvY2Vzc2VzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9JTkhFUklUIiwgKGxvbmcpT19OT0lOSEVSSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9JTkhFUklUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgX09fU0hPUlRfTElWRUQKICAgICAvKiBPcHRpbWl6ZSBmb3Igc2hvcnQgbGlmZSAoa2VlcCBpbiBtZW1vcnkpLiAqLwogICAgIC8qIE1TIGZvcmdvdCB0byBkZWZpbmUgdGhpcyBvbmUgd2l0aCBhIG5vbi11bmRlcnNjb3JlIGZvcm0gdG9vLiAqLwotICAgIGlmIChpbnMoZCwgIk9fU0hPUlRfTElWRUQiLCAobG9uZylfT19TSE9SVF9MSVZFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9fU0hPUlRfTElWRUQiLCBfT19TSE9SVF9MSVZFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fVEVNUE9SQVJZCiAgICAgLyogQXV0b21hdGljYWxseSBkZWxldGUgd2hlbiBsYXN0IGhhbmRsZSBpcyBjbG9zZWQuICovCi0gICAgaWYgKGlucyhkLCAiT19URU1QT1JBUlkiLCAobG9uZylPX1RFTVBPUkFSWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19URU1QT1JBUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JBTkRPTQogICAgIC8qIE9wdGltaXplIGZvciByYW5kb20gYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fUkFORE9NIiwgKGxvbmcpT19SQU5ET00pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkFORE9NKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TRVFVRU5USUFMCiAgICAgLyogT3B0aW1pemUgZm9yIHNlcXVlbnRpYWwgYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fU0VRVUVOVElBTCIsIChsb25nKU9fU0VRVUVOVElBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TRVFVRU5USUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKIC8qIEdOVSBleHRlbnNpb25zLiAqLwogI2lmZGVmIE9fQVNZTkMKICAgICAvKiBTZW5kIGEgU0lHSU8gc2lnbmFsIHdoZW5ldmVyIGlucHV0IG9yIG91dHB1dAogICAgICAgIGJlY29tZXMgYXZhaWxhYmxlIG9uIGZpbGUgZGVzY3JpcHRvciAqLwotICAgIGlmIChpbnMoZCwgIk9fQVNZTkMiLCAobG9uZylPX0FTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19ESVJFQ1QKICAgICAvKiBEaXJlY3QgZGlzayBhY2Nlc3MuICovCi0gICAgaWYgKGlucyhkLCAiT19ESVJFQ1QiLCAobG9uZylPX0RJUkVDVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19ESVJFQ1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0RJUkVDVE9SWQogICAgIC8qIE11c3QgYmUgYSBkaXJlY3RvcnkuICAgICAgKi8KLSAgICBpZiAoaW5zKGQsICJPX0RJUkVDVE9SWSIsIChsb25nKU9fRElSRUNUT1JZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RJUkVDVE9SWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTk9GT0xMT1cKICAgICAvKiBEbyBub3QgZm9sbG93IGxpbmtzLiAgICAgICovCi0gICAgaWYgKGlucyhkLCAiT19OT0ZPTExPVyIsIChsb25nKU9fTk9GT0xMT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9GT0xMT1cpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PTElOS1MKICAgICAvKiBGYWlscyBpZiBsaW5rIGNvdW50IG9mIHRoZSBuYW1lZCBmaWxlIGlzIGdyZWF0ZXIgdGhhbiAxICovCi0gICAgaWYgKGlucyhkLCAiT19OT0xJTktTIiwgKGxvbmcpT19OT0xJTktTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PTElOS1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PQVRJTUUKICAgICAvKiBEbyBub3QgdXBkYXRlIHRoZSBhY2Nlc3MgdGltZS4gKi8KLSAgICBpZiAoaW5zKGQsICJPX05PQVRJTUUiLCAobG9uZylPX05PQVRJTUUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9BVElNRSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogVGhlc2UgY29tZSBmcm9tIHN5c2V4aXRzLmggKi8KICNpZmRlZiBFWF9PSwotICAgIGlmIChpbnMoZCwgIkVYX09LIiwgKGxvbmcpRVhfT0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09LICovCiAjaWZkZWYgRVhfVVNBR0UKLSAgICBpZiAoaW5zKGQsICJFWF9VU0FHRSIsIChsb25nKUVYX1VTQUdFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9VU0FHRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9VU0FHRSAqLwogI2lmZGVmIEVYX0RBVEFFUlIKLSAgICBpZiAoaW5zKGQsICJFWF9EQVRBRVJSIiwgKGxvbmcpRVhfREFUQUVSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfREFUQUVSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9EQVRBRVJSICovCiAjaWZkZWYgRVhfTk9JTlBVVAotICAgIGlmIChpbnMoZCwgIkVYX05PSU5QVVQiLCAobG9uZylFWF9OT0lOUFVUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT0lOUFVUKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PSU5QVVQgKi8KICNpZmRlZiBFWF9OT1VTRVIKLSAgICBpZiAoaW5zKGQsICJFWF9OT1VTRVIiLCAobG9uZylFWF9OT1VTRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PVVNFUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1VTRVIgKi8KICNpZmRlZiBFWF9OT0hPU1QKLSAgICBpZiAoaW5zKGQsICJFWF9OT0hPU1QiLCAobG9uZylFWF9OT0hPU1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PSE9TVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT0hPU1QgKi8KICNpZmRlZiBFWF9VTkFWQUlMQUJMRQotICAgIGlmIChpbnMoZCwgIkVYX1VOQVZBSUxBQkxFIiwgKGxvbmcpRVhfVU5BVkFJTEFCTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1VOQVZBSUxBQkxFKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1VOQVZBSUxBQkxFICovCiAjaWZkZWYgRVhfU09GVFdBUkUKLSAgICBpZiAoaW5zKGQsICJFWF9TT0ZUV0FSRSIsIChsb25nKUVYX1NPRlRXQVJFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9TT0ZUV0FSRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9TT0ZUV0FSRSAqLwogI2lmZGVmIEVYX09TRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfT1NFUlIiLCAobG9uZylFWF9PU0VSUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfT1NFUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT1NFUlIgKi8KICNpZmRlZiBFWF9PU0ZJTEUKLSAgICBpZiAoaW5zKGQsICJFWF9PU0ZJTEUiLCAobG9uZylFWF9PU0ZJTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09TRklMRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PU0ZJTEUgKi8KICNpZmRlZiBFWF9DQU5UQ1JFQVQKLSAgICBpZiAoaW5zKGQsICJFWF9DQU5UQ1JFQVQiLCAobG9uZylFWF9DQU5UQ1JFQVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0NBTlRDUkVBVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9DQU5UQ1JFQVQgKi8KICNpZmRlZiBFWF9JT0VSUgotICAgIGlmIChpbnMoZCwgIkVYX0lPRVJSIiwgKGxvbmcpRVhfSU9FUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0lPRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX0lPRVJSICovCiAjaWZkZWYgRVhfVEVNUEZBSUwKLSAgICBpZiAoaW5zKGQsICJFWF9URU1QRkFJTCIsIChsb25nKUVYX1RFTVBGQUlMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9URU1QRkFJTCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9URU1QRkFJTCAqLwogI2lmZGVmIEVYX1BST1RPQ09MCi0gICAgaWYgKGlucyhkLCAiRVhfUFJPVE9DT0wiLCAobG9uZylFWF9QUk9UT0NPTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfUFJPVE9DT0wpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfUFJPVE9DT0wgKi8KICNpZmRlZiBFWF9OT1BFUk0KLSAgICBpZiAoaW5zKGQsICJFWF9OT1BFUk0iLCAobG9uZylFWF9OT1BFUk0pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PUEVSTSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1BFUk0gKi8KICNpZmRlZiBFWF9DT05GSUcKLSAgICBpZiAoaW5zKGQsICJFWF9DT05GSUciLCAobG9uZylFWF9DT05GSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0NPTkZJRykpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9DT05GSUcgKi8KICNpZmRlZiBFWF9OT1RGT1VORAotICAgIGlmIChpbnMoZCwgIkVYX05PVEZPVU5EIiwgKGxvbmcpRVhfTk9URk9VTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PVEZPVU5EICovCiAKICAgICAvKiBzdGF0dmZzICovCiAjaWZkZWYgU1RfUkRPTkxZCi0gICAgaWYgKGlucyhkLCAiU1RfUkRPTkxZIiwgKGxvbmcpU1RfUkRPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9SRE9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogU1RfUkRPTkxZICovCiAjaWZkZWYgU1RfTk9TVUlECi0gICAgaWYgKGlucyhkLCAiU1RfTk9TVUlEIiwgKGxvbmcpU1RfTk9TVUlEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT1NVSUQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogU1RfTk9TVUlEICovCiAKICAgICAvKiBGcmVlQlNEIHNlbmRmaWxlKCkgY29uc3RhbnRzICovCiAjaWZkZWYgU0ZfTk9ESVNLSU8KLSAgICBpZiAoaW5zKGQsICJTRl9OT0RJU0tJTyIsIChsb25nKVNGX05PRElTS0lPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9OT0RJU0tJTykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNGX01OT1dBSVQKLSAgICBpZiAoaW5zKGQsICJTRl9NTk9XQUlUIiwgKGxvbmcpU0ZfTU5PV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfTU5PV0FJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNGX1NZTkMKLSAgICBpZiAoaW5zKGQsICJTRl9TWU5DIiwgKGxvbmcpU0ZfU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciBwb3NpeF9mYWR2aXNlICovCiAjaWZkZWYgUE9TSVhfRkFEVl9OT1JNQUwKLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX05PUk1BTCIsIChsb25nKVBPU0lYX0ZBRFZfTk9STUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX05PUk1BTCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfU0VRVUVOVElBTAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfU0VRVUVOVElBTCIsIChsb25nKVBPU0lYX0ZBRFZfU0VRVUVOVElBTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9TRVFVRU5USUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9SQU5ET00KLSAgICBpZiAoaW5zKGQsICJQT1NJWF9GQURWX1JBTkRPTSIsIChsb25nKVBPU0lYX0ZBRFZfUkFORE9NKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1JBTkRPTSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBPU0lYX0ZBRFZfTk9SRVVTRQotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfTk9SRVVTRSIsIChsb25nKVBPU0lYX0ZBRFZfTk9SRVVTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9TSVhfRkFEVl9OT1JFVVNFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9XSUxMTkVFRAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfV0lMTE5FRUQiLCAobG9uZylQT1NJWF9GQURWX1dJTExORUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1dJTExORUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9ET05UTkVFRAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfRE9OVE5FRUQiLCAobG9uZylQT1NJWF9GQURWX0RPTlRORUVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX0RPTlRORUVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIHdhaXRpZCAqLwogI2lmIGRlZmluZWQoSEFWRV9TWVNfV0FJVF9IKSAmJiBkZWZpbmVkKEhBVkVfV0FJVElEKQotICAgIGlmIChpbnMoZCwgIlBfUElEIiwgKGxvbmcpUF9QSUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9QR0lEIiwgKGxvbmcpUF9QR0lEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfQUxMIiwgKGxvbmcpUF9BTEwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfUElEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQX1BHSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfQUxMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV0VYSVRFRAotICAgIGlmIChpbnMoZCwgIldFWElURUQiLCAobG9uZylXRVhJVEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXRVhJVEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV05PV0FJVAotICAgIGlmIChpbnMoZCwgIldOT1dBSVQiLCAobG9uZylXTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXTk9XQUlUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV1NUT1BQRUQKLSAgICBpZiAoaW5zKGQsICJXU1RPUFBFRCIsIChsb25nKVdTVE9QUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXU1RPUFBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9FWElURUQKLSAgICBpZiAoaW5zKGQsICJDTERfRVhJVEVEIiwgKGxvbmcpQ0xEX0VYSVRFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0VYSVRFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9EVU1QRUQKLSAgICBpZiAoaW5zKGQsICJDTERfRFVNUEVEIiwgKGxvbmcpQ0xEX0RVTVBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0RVTVBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9UUkFQUEVECi0gICAgaWYgKGlucyhkLCAiQ0xEX1RSQVBQRUQiLCAobG9uZylDTERfVFJBUFBFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX1RSQVBQRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBDTERfQ09OVElOVUVECi0gICAgaWYgKGlucyhkLCAiQ0xEX0NPTlRJTlVFRCIsIChsb25nKUNMRF9DT05USU5VRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENMRF9DT05USU5VRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3IgbG9ja2YgKi8KICNpZmRlZiBGX0xPQ0sKLSAgICBpZiAoaW5zKGQsICJGX0xPQ0siLCAobG9uZylGX0xPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVExPQ0sKLSAgICBpZiAoaW5zKGQsICJGX1RMT0NLIiwgKGxvbmcpRl9UTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9UTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVUxPQ0sKLSAgICBpZiAoaW5zKGQsICJGX1VMT0NLIiwgKGxvbmcpRl9VTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9VTE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVEVTVAotICAgIGlmIChpbnMoZCwgIkZfVEVTVCIsIChsb25nKUZfVEVTVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9URVNUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NQQVdOVgotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGlucyhkLCAiUF9XQUlUIiwgKGxvbmcpUF9XQUlUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9XQUlUIiwgKGxvbmcpUF9OT1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9PVkVSTEFZIiwgKGxvbmcpUF9PVkVSTEFZKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVCVUciLCAobG9uZylQX0RFQlVHKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfU0VTU0lPTiIsIChsb25nKVBfU0VTU0lPTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFVEFDSCIsIChsb25nKVBfREVUQUNIKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUE0iLCAobG9uZylQX1BNKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVGQVVMVCIsIChsb25nKVBfREVGQVVMVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX01JTklNSVpFIiwgKGxvbmcpUF9NSU5JTUlaRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX01BWElNSVpFIiwgKGxvbmcpUF9NQVhJTUlaRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0ZVTExTQ1JFRU4iLCAobG9uZylQX0ZVTExTQ1JFRU4pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9XSU5ET1dFRCIsIChsb25nKVBfV0lORE9XRUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9GT1JFR1JPVU5EIiwgKGxvbmcpUF9GT1JFR1JPVU5EKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfQkFDS0dST1VORCIsIChsb25nKVBfQkFDS0dST1VORCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PQ0xPU0UiLCAobG9uZylQX05PQ0xPU0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1NFU1NJT04iLCAobG9uZylQX05PU0VTU0lPTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1FVT1RFIiwgKGxvbmcpUF9RVU9URSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1RJTERFIiwgKGxvbmcpUF9USUxERSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1VOUkVMQVRFRCIsIChsb25nKVBfVU5SRUxBVEVEKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVCVUdERVNDIiwgKGxvbmcpUF9ERUJVR0RFU0MpKSByZXR1cm4gLTE7Ci0jZWxzZQotICAgIGlmIChpbnMoZCwgIlBfV0FJVCIsIChsb25nKV9QX1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVQiLCAobG9uZylfUF9OT1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9PVkVSTEFZIiwgKGxvbmcpX09MRF9QX09WRVJMQVkpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVRPIiwgKGxvbmcpX1BfTk9XQUlUTykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0RFVEFDSCIsIChsb25nKV9QX0RFVEFDSCkpIHJldHVybiAtMTsKLSNlbmRpZgorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9XQUlUIiwgX1BfV0FJVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfTk9XQUlUIiwgX1BfTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9PVkVSTEFZIiwgX09MRF9QX09WRVJMQVkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX05PV0FJVE8iLCBfUF9OT1dBSVRPKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9ERVRBQ0giLCBfUF9ERVRBQ0gpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU0NIRURfSAotICAgIGlmIChpbnMoZCwgIlNDSEVEX09USEVSIiwgKGxvbmcpU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiU0NIRURfRklGTyIsIChsb25nKVNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiU0NIRURfUlIiLCAobG9uZylTQ0hFRF9SUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfT1RIRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX0ZJRk8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDSEVEX1JSKSkgcmV0dXJuIC0xOwogI2lmZGVmIFNDSEVEX1NQT1JBRElDCi0gICAgaWYgKGlucyhkLCAiU0NIRURfU1BPUkFESUMiLCAobG9uZylTQ0hFRF9TUE9SQURJQykgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9TUE9SQURJQykgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfQkFUQ0gKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9CQVRDSCIsIChsb25nKVNDSEVEX0JBVENIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9CQVRDSCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0lETEUKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JRExFIiwgKGxvbmcpU0NIRURfSURMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfSURMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SRVNFVF9PTl9GT1JLIiwgKGxvbmcpU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1NZUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1NZUyIsIChsb25nKVNDSEVEX1NZUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfU1lTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfSUEKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JQSIsIChsb25nKVNDSEVEX0lBKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9JQSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0ZTUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZTUyIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfRlgKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GWCIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDSEVEX0ZYIiwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFVTRV9YQVRUUlMKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9DUkVBVEUiLCAobG9uZylYQVRUUl9DUkVBVEUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfUkVQTEFDRSIsIChsb25nKVhBVFRSX1JFUExBQ0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfU0laRV9NQVgiLCAobG9uZylYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfQ1JFQVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9SRVBMQUNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgUlRMRF9MQVpZCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTEFaWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9MQVpZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT1cKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9HTE9CQUwKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9HTE9CQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfR0xPQkFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9MT0NBTAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0RFTEVURQotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0xPQUQKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT0xPQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9MT0FEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9ERUVQQklORAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIGlmIChpbnNlcnR2YWx1ZXMoZCkpIHJldHVybiAtMTsKLSNlbmRpZgogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTkyMSwxMCArMTIwMDUsNiBAQAogI2RlZmluZSBJTklURlVOQyBQeUluaXRfbnQKICNkZWZpbmUgTU9ETkFNRSAibnQiCiAKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0jZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9vczIKLSNkZWZpbmUgTU9ETkFNRSAib3MyIgotCiAjZWxzZQogI2RlZmluZSBJTklURlVOQyBQeUluaXRfcG9zaXgKICNkZWZpbmUgTU9ETkFNRSAicG9zaXgiCkBAIC0xMjExMiwxOSArMTIxOTIsMjMgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgICAgICB3YWl0aWRfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi53YWl0aWRfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAotICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc3RhdF9yZXN1bHQiOworICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSAib3Muc3RhdF9yZXN1bHQiOyAvKiBzZWUgaXNzdWUgIzE5MjA5ICovCiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzddLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbOF0ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s5XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRSZXN1bHRUeXBlLCAmc3RhdF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdFJlc3VsdFR5cGUsICZzdGF0X3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgc3RydWN0c2VxX25ldyA9IFN0YXRSZXN1bHRUeXBlLnRwX25ldzsKICAgICAgICAgU3RhdFJlc3VsdFR5cGUudHBfbmV3ID0gc3RhdHJlc3VsdF9uZXc7CiAKLSAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnN0YXR2ZnNfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdFZGU1Jlc3VsdFR5cGUsICZzdGF0dmZzX3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gIm9zLnN0YXR2ZnNfcmVzdWx0IjsgLyogc2VlIGlzc3VlICMxOTIwOSAqLworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRWRlNSZXN1bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnNfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2lmZGVmIE5FRURfVElDS1NfUEVSX1NFQ09ORAogIyAgaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX0NMS19UQ0spCiAgICAgICAgIHRpY2tzX3Blcl9zZWNvbmQgPSBzeXNjb25mKF9TQ19DTEtfVENLKTsKQEAgLTEyMTM3LDEyICsxMjIyMSwxNSBAQAogCiAjaWYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKSB8fCBkZWZpbmVkKEhBVkVfU0NIRURfU0VUU0NIRURVTEVSKQogICAgICAgICBzY2hlZF9wYXJhbV9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc2NoZWRfcGFyYW0iOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNjaGVkUGFyYW1UeXBlLCAmc2NoZWRfcGFyYW1fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFNjaGVkUGFyYW1UeXBlLnRwX25ldyA9IHNjaGVkX3BhcmFtX25ldzsKICNlbmRpZgogCiAgICAgICAgIC8qIGluaXRpYWxpemUgVGVybWluYWxTaXplX2luZm8gKi8KLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGVybWluYWxTaXplVHlwZSwgJlRlcm1pbmFsU2l6ZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUZXJtaW5hbFNpemVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlcm1pbmFsU2l6ZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmV2FpdGlkUmVzdWx0VHlwZSk7CkBAIC0xMjE2MCwxMSArMTIyNDcsMTMgQEAKICNlbmRpZgogCiAgICAgdGltZXNfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi50aW1lc19yZXN1bHQiOwotICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKTsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidGltZXNfcmVzdWx0IiwgKFB5T2JqZWN0ICopJlRpbWVzUmVzdWx0VHlwZSk7CiAKICAgICB1bmFtZV9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnVuYW1lX3Jlc3VsdCI7Ci0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ1bmFtZV9yZXN1bHQiLCAoUHlPYmplY3QgKikmVW5hbWVSZXN1bHRUeXBlKTsKIAogI2lmZGVmIF9fQVBQTEVfXwpAQCAtMTIyNDIsNyArMTIzMzEsNiBAQAogICAgIGluaXRpYWxpemVkID0gMTsKIAogICAgIHJldHVybiBtOwotCiB9CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wd2Rtb2R1bGUuYyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKaW5kZXggMjg1ZmQ5Yy4uOTkwOTQwMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCkBAIC0xNjgsMTIgKzE2OCw4IEBACiAgICAgc3RydWN0IHBhc3N3ZCAqcDsKICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmICgocCA9IGdldHB3dWlkKDApKSAhPSBOVUxMKSB7Ci0jZWxzZQogICAgIHNldHB3ZW50KCk7CiAgICAgd2hpbGUgKChwID0gZ2V0cHdlbnQoKSkgIT0gTlVMTCkgewotI2VuZGlmCiAgICAgICAgIFB5T2JqZWN0ICp2ID0gbWtwd2VudChwKTsKICAgICAgICAgaWYgKHYgPT0gTlVMTCB8fCBQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYodik7CkBAIC0yMjAsOCArMjE2LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFB3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RQd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopICZTdHJ1Y3RQd2RUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHlleHBhdC5jIGIvTW9kdWxlcy9weWV4cGF0LmMKaW5kZXggN2U1MWQzNS4uM2Y1MWMxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weWV4cGF0LmMKKysrIGIvTW9kdWxlcy9weWV4cGF0LmMKQEAgLTEwLDYgKzEwLDkgQEAKIAogI2RlZmluZSBGSVhfVFJBQ0UKIAorc3RhdGljIFhNTF9NZW1vcnlfSGFuZGxpbmdfU3VpdGUgRXhwYXRNZW1vcnlIYW5kbGVyID0geworICAgIFB5T2JqZWN0X01hbGxvYywgUHlPYmplY3RfUmVhbGxvYywgUHlPYmplY3RfRnJlZX07CisKIGVudW0gSGFuZGxlclR5cGVzIHsKICAgICBTdGFydEVsZW1lbnQsCiAgICAgRW5kRWxlbWVudCwKQEAgLTQwNCw2ICs0MDcsMTAgQEAKIG15X0NoYXJhY3RlckRhdGFIYW5kbGVyKHZvaWQgKnVzZXJEYXRhLCBjb25zdCBYTUxfQ2hhciAqZGF0YSwgaW50IGxlbikKIHsKICAgICB4bWxwYXJzZW9iamVjdCAqc2VsZiA9ICh4bWxwYXJzZW9iamVjdCAqKSB1c2VyRGF0YTsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpCiAgICAgICAgIGNhbGxfY2hhcmFjdGVyX2hhbmRsZXIoc2VsZiwgZGF0YSwgbGVuKTsKICAgICBlbHNlIHsKQEAgLTQzOCw2ICs0NDUsOSBAQAogICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyLCAqcnYsICphcmdzOwogICAgICAgICBpbnQgaSwgbWF4OwogCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgLyogU2V0IG1heCB0byB0aGUgbnVtYmVyIG9mIHNsb3RzIGZpbGxlZCBpbiBhdHRzW107IG1heC8yIGlzCkBAIC01MjEsNiArNTMxLDggQEAKICAgICBJTklUIFwKIFwKICAgICBpZiAoaGF2ZV9oYW5kbGVyKHNlbGYsIE5BTUUpKSB7IFwKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIFwKKyAgICAgICAgICAgIHJldHVybiBSRVRVUk47IFwKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKSBcCiAgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlIFBBUkFNX0ZPUk1BVCA7XApAQCAtNjM1LDYgKzY0Nyw5IEBACiAgICAgICAgIFB5T2JqZWN0ICpydiA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0ICptb2RlbG9iaiwgKm5hbWVvYmo7CiAKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKGZsdXNoX2NoYXJhY3Rlcl9idWZmZXIoc2VsZikgPCAwKQogICAgICAgICAgICAgZ290byBmaW5hbGx5OwogICAgICAgICBtb2RlbG9iaiA9IGNvbnZfY29udGVudF9tb2RlbChtb2RlbCwgKGNvbnZfc3RyaW5nX3RvX3VuaWNvZGUpKTsKQEAgLTgyMCw3ICs4MzUsOCBAQAogICAgICAgICBzICs9IE1BWF9DSFVOS19TSVpFOwogICAgICAgICBzbGVuIC09IE1BWF9DSFVOS19TSVpFOwogICAgIH0KLSAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIHNsZW4sIGlzRmluYWwpOworICAgIGFzc2VydChNQVhfQ0hVTktfU0laRSA8IElOVF9NQVggJiYgc2xlbiA8IElOVF9NQVgpOworICAgIHJjID0gWE1MX1BhcnNlKHNlbGYtPml0c2VsZiwgcywgKGludClzbGVuLCBpc0ZpbmFsKTsKIAogZG9uZToKICAgICBpZiAodmlldy5idWYgIT0gTlVMTCkKQEAgLTEwMDIsNyArMTAxOCw3IEBACiAgICAgUHlPYmplY3RfR0NfVHJhY2sobmV3X3BhcnNlcik7CiAKICAgICBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gbWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKKyAgICAgICAgbmV3X3BhcnNlci0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19wYXJzZXItPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgaWYgKG5ld19wYXJzZXItPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEwMTksNyArMTAzNSw3IEBACiAgICAgZm9yIChpID0gMDsgaGFuZGxlcl9pbmZvW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogICAgICAgICAvKiBkbyBub3RoaW5nICovOwogCi0gICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBtYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CisgICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogaSk7CiAgICAgaWYgKCFuZXdfcGFyc2VyLT5oYW5kbGVycykgewogICAgICAgICBQeV9ERUNSRUYobmV3X3BhcnNlcik7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTEyNywxNCArMTE0MywxOSBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgdW5zaWduZWQgaW50IGtpbmQ7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIFhNTF9TVEFUVVNfRVJST1I7CisKICAgICBpZiAodGVtcGxhdGVfYnVmZmVyWzFdID09IDApIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdGVtcGxhdGVfYnVmZmVyW2ldID0gaTsKICAgICB9CiAKICAgICB1ID0gUHlVbmljb2RlX0RlY29kZSgoY2hhciopIHRlbXBsYXRlX2J1ZmZlciwgMjU2LCBuYW1lLCAicmVwbGFjZSIpOwotICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKQorICAgIGlmICh1ID09IE5VTEwgfHwgUHlVbmljb2RlX1JFQURZKHUpKSB7CisgICAgICAgIFB5X1hERUNSRUYodSk7CiAgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworICAgIH0KIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KSAhPSAyNTYpIHsKICAgICAgICAgUHlfREVDUkVGKHUpOwpAQCAtMTE4MCwyOCArMTIwMSwyNiBAQAogICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMDsKICAgICBzZWxmLT5uc19wcmVmaXhlcyA9IDA7CiAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwotICAgIGlmIChuYW1lc3BhY2Vfc2VwYXJhdG9yICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZU5TKGVuY29kaW5nLCAqbmFtZXNwYWNlX3NlcGFyYXRvcik7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlKGVuY29kaW5nKTsKLSAgICB9Ci0jaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQotICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQotICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKLSAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCi0gICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKLSAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQucHJlZml4KTsKLSNlbmRpZgogICAgIHNlbGYtPmludGVybiA9IGludGVybjsKICAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7CiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7CisKKyAgICAvKiBuYW1lc3BhY2Vfc2VwYXJhdG9yIGlzIGVpdGhlciBOVUxMIG9yIGNvbnRhaW5zIG9uZSBjaGFyICsgXDAgKi8KKyAgICBzZWxmLT5pdHNlbGYgPSBYTUxfUGFyc2VyQ3JlYXRlX01NKGVuY29kaW5nLCAmRXhwYXRNZW1vcnlIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX3NlcGFyYXRvcik7CiAgICAgaWYgKHNlbGYtPml0c2VsZiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiWE1MX1BhcnNlckNyZWF0ZSBmYWlsZWQiKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisjaWYgKChYTUxfTUFKT1JfVkVSU0lPTiA+PSAyKSAmJiAoWE1MX01JTk9SX1ZFUlNJT04gPj0gMSkpIHx8IGRlZmluZWQoWE1MX0hBU19TRVRfSEFTSF9TQUxUKQorICAgIC8qIFRoaXMgZmVhdHVyZSB3YXMgYWRkZWQgdXBzdHJlYW0gaW4gbGliZXhwYXQgMi4xLjAuICBPdXIgZXhwYXQgY29weQorICAgICAqIGhhcyBhIGJhY2twb3J0IG9mIHRoaXMgZmVhdHVyZSB3aGVyZSB3ZSBhbHNvIGRlZmluZSBYTUxfSEFTX1NFVF9IQVNIX1NBTFQKKyAgICAgKiB0byBpbmRpY2F0ZSB0aGF0IHdlIGNhbiBzdGlsbCB1c2UgaXQuICovCisgICAgWE1MX1NldEhhc2hTYWx0KHNlbGYtPml0c2VsZiwKKyAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpX1B5X0hhc2hTZWNyZXQuZXhwYXQuaGFzaHNhbHQpOworI2VuZGlmCiAgICAgWE1MX1NldFVzZXJEYXRhKHNlbGYtPml0c2VsZiwgKHZvaWQgKilzZWxmKTsKICAgICBYTUxfU2V0VW5rbm93bkVuY29kaW5nSGFuZGxlcihzZWxmLT5pdHNlbGYsCiAgICAgICAgICAgICAgICAgICAoWE1MX1Vua25vd25FbmNvZGluZ0hhbmRsZXIpIFB5VW5rbm93bkVuY29kaW5nSGFuZGxlciwgTlVMTCk7CkBAIC0xMjA5LDcgKzEyMjgsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIHNlbGYtPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIHNlbGYtPmhhbmRsZXJzID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOwogICAgIGlmICghc2VsZi0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTEyMzYsMTEgKzEyNTUsMTEgQEAKICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW2ldID0gTlVMTDsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShzZWxmLT5oYW5kbGVycyk7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+aGFuZGxlcnMpOwogICAgICAgICBzZWxmLT5oYW5kbGVycyA9IE5VTEw7CiAgICAgfQogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwpAQCAtMTQ0MCw3ICsxNDU5LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKGIpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKHNlbGYtPmJ1ZmZlcl9zaXplKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTQ1MSw3ICsxNDcwLDcgQEAKICAgICAgICAgZWxzZSBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTUxMyw5ICsxNTMyLDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAvKiBmcmVlIGV4aXN0aW5nIGJ1ZmZlciAqLwotICAgICAgICBmcmVlKHNlbGYtPmJ1ZmZlcik7CisgICAgICAgIFB5TWVtX0ZyZWUoc2VsZi0+YnVmZmVyKTsKICAgICAgIH0KLSAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhuZXdfYnVmZmVyX3NpemUpOworICAgICAgc2VsZi0+YnVmZmVyID0gUHlNZW1fTWFsbG9jKG5ld19idWZmZXJfc2l6ZSk7CiAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9weXRob24uYyBiL01vZHVsZXMvcHl0aG9uLmMKaW5kZXggZjc4MWQ5YS4uOTgxMWMwMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weXRob24uYworKysgYi9Nb2R1bGVzL3B5dGhvbi5jCkBAIC0yMyw5ICsyMywxMiBAQAogICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOwogICAgIGludCBpLCByZXM7CiAgICAgY2hhciAqb2xkbG9jOworI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgZnBfZXhjZXB0X3QgbTsKKyNlbmRpZgogCi0gICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOwotICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSooYXJnYysxKSk7CisgICAgYXJndl9jb3B5ID0gKHdjaGFyX3QgKiopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiAoYXJnYysxKSk7CisgICAgYXJndl9jb3B5MiA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CiAgICAgICAgIHJldHVybiAxOwpAQCAtMzcsMTcgKzQwLDIxIEBACiAgICAgICogZXhjZXB0aW9ucyBieSBkZWZhdWx0LiAgSGVyZSB3ZSBkaXNhYmxlIHRoZW0uCiAgICAgICovCiAjaWZkZWYgX19GcmVlQlNEX18KLSAgICBmcF9leGNlcHRfdCBtOwotCiAgICAgbSA9IGZwZ2V0bWFzaygpOwogICAgIGZwc2V0bWFzayhtICYgfkZQX1hfT0ZMKTsKICNlbmRpZgotICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisKKyAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKKyAgICBpZiAoIW9sZGxvYykgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZyZWUob2xkbG9jKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmF0YWwgUHl0aG9uIGVycm9yOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCAjJWlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArIDEpOwpAQCAtNTgsMTMgKzY1LDEzIEBACiAgICAgYXJndl9jb3B5MlthcmdjXSA9IGFyZ3ZfY29weVthcmdjXSA9IE5VTEw7CiAKICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgIGZyZWUob2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmVzID0gUHlfTWFpbihhcmdjLCBhcmd2X2NvcHkpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5Mik7CiAgICAgcmV0dXJuIHJlczsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZWFkbGluZS5jIGIvTW9kdWxlcy9yZWFkbGluZS5jCmluZGV4IDA5NmM2ZDEuLjQzZTI1YmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVhZGxpbmUuYworKysgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKQEAgLTYsNiArNiw3IEBACiAKIC8qIFN0YW5kYXJkIGRlZmluaXRpb25zICovCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTc2LDYgKzc3LDU1IEBACiAgICAoc2VlIGlzc3VlICMxNzI4OSBmb3IgdGhlIG1vdGl2YXRpb24pLiAqLwogc3RhdGljIGNoYXIgKmNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnM7CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2s7CisgIFB5T2JqZWN0ICpzdGFydHVwX2hvb2s7CisgIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vazsKKyAgUHlPYmplY3QgKmNvbXBsZXRlcjsKKyAgUHlPYmplY3QgKmJlZ2lkeDsKKyAgUHlPYmplY3QgKmVuZGlkeDsKK30gcmVhZGxpbmVzdGF0ZTsKKworCisjZGVmaW5lIHJlYWRsaW5lX3N0YXRlKG8pICgocmVhZGxpbmVzdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG8pKQorCitzdGF0aWMgaW50CityZWFkbGluZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+Y29tcGxldGVyKTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5iZWdpZHgpOworICAgUHlfQ0xFQVIoc3RhdGUtPmVuZGlkeCk7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcmVhZGxpbmVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIHJlYWRsaW5lc3RhdGUgKnN0YXRlID0gcmVhZGxpbmVfc3RhdGUobSk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5zdGFydHVwX2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5wcmVfaW5wdXRfaG9vayk7CisgICAgUHlfVklTSVQoc3RhdGUtPmNvbXBsZXRlcik7CisgICAgUHlfVklTSVQoc3RhdGUtPmJlZ2lkeCk7CisgICAgUHlfVklTSVQoc3RhdGUtPmVuZGlkeCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZWFkbGluZV9mcmVlKHZvaWQgKm0pCit7CisgICAgcmVhZGxpbmVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CisKK3N0YXRpYyBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZTsKKworI2RlZmluZSByZWFkbGluZXN0YXRlX2dsb2JhbCAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShQeVN0YXRlX0ZpbmRNb2R1bGUoJnJlYWRsaW5lbW9kdWxlKSkpCisKKwogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTg2LDEyICsxMzYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogTWFrZSBhIGNvcHkgLS0gcmxfcGFyc2VfYW5kX2JpbmQoKSBtb2RpZmllcyBpdHMgYXJndW1lbnQgKi8KICAgICAvKiBCZXJuYXJkIEhlcnpvZyAqLwotICAgIGNvcHkgPSBtYWxsb2MoMSArIHN0cmxlbihzKSk7CisgICAgY29weSA9IFB5TWVtX01hbGxvYygxICsgc3RybGVuKHMpKTsKICAgICBpZiAoY29weSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBzdHJjcHkoY29weSwgcyk7CiAgICAgcmxfcGFyc2VfYW5kX2JpbmQoY29weSk7Ci0gICAgZnJlZShjb3B5KTsgLyogRnJlZSB0aGUgY29weSAqLworICAgIFB5TWVtX0ZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjUyLDIzICszMDIsMjEgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb25zIHRvIHNwZWNpZnkgaG9vayBmdW5jdGlvbnMgaW4gUHl0aG9uICovCiAKLXN0YXRpYyBQeU9iamVjdCAqY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKnN0YXJ0dXBfaG9vayA9IE5VTEw7CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCi1zdGF0aWMgUHlPYmplY3QgKnByZV9pbnB1dF9ob29rID0gTlVMTDsKKwogI2VuZGlmCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IHNldF9ob29rKCJjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rIiwKLSAgICAgICAgICAgICAgICAgICAgJmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOworICAgICAgICAgICAgICAgICAgICAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssIGFyZ3MpOwogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogICAgIC8qIFdlIGNhbm5vdCBzZXQgdGhpcyBob29rIGdsb2JhbGx5LCBzaW5jZSBpdCByZXBsYWNlcyB0aGUKICAgICAgICBkZWZhdWx0IGNvbXBsZXRpb24gZGlzcGxheS4gKi8KICAgICBybF9jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID0KLSAgICAgICAgY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CisgICAgICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rID8KICNpZiBkZWZpbmVkKF9STF9GVU5DVElPTl9UWVBFREVGKQogICAgICAgICAocmxfY29tcGRpc3BfZnVuY190ICopb25fY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA6IDA7CiAjZWxzZQpAQCAtMjg5LDcgKzMzNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3N0YXJ0dXBfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmc3RhcnR1cF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInN0YXJ0dXBfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+c3RhcnR1cF9ob29rLCBhcmdzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19zZXRfc3RhcnR1cF9ob29rLApAQCAtMzA2LDcgKzM1NCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3ByZV9pbnB1dF9ob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnByZV9pbnB1dF9ob29rLCBhcmdzKTsKKyAgICByZXR1cm4gc2V0X2hvb2soInByZV9pbnB1dF9ob29rIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5wcmVfaW5wdXRfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3ByZV9pbnB1dF9ob29rLApAQCAtMzIxLDEwICszNjksMTAgQEAKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIHdvcmQgY29tcGxldGVyIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRlciA9IE5VTEw7CiAKLXN0YXRpYyBQeU9iamVjdCAqYmVnaWR4ID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqZW5kaWR4ID0gTlVMTDsKKworCisKIAogCiAvKiBHZXQgdGhlIGNvbXBsZXRpb24gdHlwZSBmb3IgdGhlIHNjb3BlIG9mIHRoZSB0YWItY29tcGxldGlvbiAqLwpAQCAtMzQ0LDggKzM5Miw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2JlZ2lkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihiZWdpZHgpOwotICAgIHJldHVybiBiZWdpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9iZWdpZHgsCkBAIC0zNTgsOCArNDA2LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfZW5kaWR4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmcpCiB7Ci0gICAgUHlfSU5DUkVGKGVuZGlkeCk7Ci0gICAgcmV0dXJuIGVuZGlkeDsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHg7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2VuZGlkeCwKQEAgLTUyNCw3ICs1NzIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJmNvbXBsZXRlciwgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJjb21wbGV0ZXIiLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X2NvbXBsZXRlciwKQEAgLTUzOCwxMSArNTg2LDExIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2NvbXBsZXRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKLSAgICBpZiAoY29tcGxldGVyID09IE5VTEwpIHsKKyAgICBpZiAocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KLSAgICBQeV9JTkNSRUYoY29tcGxldGVyKTsKLSAgICByZXR1cm4gY29tcGxldGVyOworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyKTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcjsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfY29tcGxldGVyLApAQCAtNzQ2LDkgKzc5NCw2IEBACiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaWYgKGZ1bmMgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKLSNlbmRpZgogICAgICAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsIE5VTEwpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTc2NSw5ICs4MTAsNiBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9YREVDUkVGKHIpOwogICAgICAgZG9uZToKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgICAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOwotI2VuZGlmCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CkBAIC03NzYsMTQgKzgxOCwzMCBAQAogc3RhdGljIGludAogb25fc3RhcnR1cF9ob29rKHZvaWQpCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2soc3RhcnR1cF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vayk7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1JlbGVhc2UoZ2lsc3RhdGUpOworI2VuZGlmCisgICAgcmV0dXJuIHI7CiB9CiAKICNpZmRlZiBIQVZFX1JMX1BSRV9JTlBVVF9IT09LCiBzdGF0aWMgaW50CiBvbl9wcmVfaW5wdXRfaG9vayh2b2lkKQogewotICAgIHJldHVybiBvbl9ob29rKHByZV9pbnB1dF9ob29rKTsKKyAgICBpbnQgcjsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworI2VuZGlmCisgICAgciA9IG9uX2hvb2socmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnByZV9pbnB1dF9ob29rKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcjsKIH0KICNlbmRpZgogCkBAIC04MTAsNyArODY4LDcgQEAKICAgICAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKG0sIGksIHMpID09IC0xKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9Ci0gICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLAorICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic09pIiwgbWF0Y2hlc1swXSwgbSwgbWF4X2xlbmd0aCk7CiAKICAgICBQeV9ERUNSRUYobSk7IG09TlVMTDsKQEAgLTg0MCwxMyArODk4LDEzIEBACiBvbl9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBzdGF0ZSkKIHsKICAgICBjaGFyICpyZXN1bHQgPSBOVUxMOwotICAgIGlmIChjb21wbGV0ZXIgIT0gTlVMTCkgeworICAgIGlmIChyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnI7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CiAjZW5kaWYKICAgICAgICAgcmxfYXR0ZW1wdGVkX2NvbXBsZXRpb25fb3ZlciA9IDE7Ci0gICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY29tcGxldGVyLCAic2kiLCB0ZXh0LCBzdGF0ZSk7CisgICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlciwgInNpIiwgdGV4dCwgc3RhdGUpOwogICAgICAgICBpZiAociA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgaWYgKHIgPT0gUHlfTm9uZSkgewpAQCAtODc5LDI0ICs5MzcsMzIgQEAKIHN0YXRpYyBjaGFyICoqCiBmbGV4X2NvbXBsZXRlKGNoYXIgKnRleHQsIGludCBzdGFydCwgaW50IGVuZCkKIHsKKyAgICBjaGFyICoqcmVzdWx0OworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZW5kaWYKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fQVBQRU5EX0NIQVJBQ1RFUgogICAgIHJsX2NvbXBsZXRpb25fYXBwZW5kX2NoYXJhY3RlciA9J1wwJzsKICNlbmRpZgogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQKICAgICBybF9jb21wbGV0aW9uX3N1cHByZXNzX2FwcGVuZCA9IDA7CiAjZW5kaWYKLSAgICBQeV9YREVDUkVGKGJlZ2lkeCk7Ci0gICAgUHlfWERFQ1JFRihlbmRpZHgpOwotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOwotICAgIGVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgZW5kKTsKLSAgICByZXR1cm4gY29tcGxldGlvbl9tYXRjaGVzKHRleHQsICpvbl9jb21wbGV0aW9uKTsKKyAgICBQeV9YREVDUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5iZWdpZHgpOworICAgIFB5X1hERUNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCk7CisgICAgcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgc3RhcnQpOworICAgIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVuZCk7CisgICAgcmVzdWx0ID0gY29tcGxldGlvbl9tYXRjaGVzKHRleHQsICpvbl9jb21wbGV0aW9uKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAKIC8qIEhlbHBlciB0byBpbml0aWFsaXplIEdOVSByZWFkbGluZSBwcm9wZXJseS4gKi8KIAogc3RhdGljIHZvaWQKLXNldHVwX3JlYWRsaW5lKHZvaWQpCitzZXR1cF9yZWFkbGluZShyZWFkbGluZXN0YXRlICptb2Rfc3RhdGUpCiB7CiAjaWZkZWYgU0FWRV9MT0NBTEUKICAgICBjaGFyICpzYXZlZF9sb2NhbGUgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0NUWVBFLCBOVUxMKSk7CkBAIC05MjYsMTAgKzk5Miw2IEBACiAgICAgdXNpbmdfaGlzdG9yeSgpOwogCiAgICAgcmxfcmVhZGxpbmVfbmFtZSA9ICJweXRob24iOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogQWxsb3cgJGlmIHRlcm09IGluIC5pbnB1dHJjIHRvIHdvcmsgKi8KLSAgICBybF90ZXJtaW5hbF9uYW1lID0gZ2V0ZW52KCJURVJNIik7Ci0jZW5kaWYKICAgICAvKiBGb3JjZSByZWJpbmQgb2YgVEFCIHRvIGluc2VydC10YWIgKi8KICAgICBybF9iaW5kX2tleSgnXHQnLCBybF9pbnNlcnQpOwogICAgIC8qIEJpbmQgYm90aCBFU0MtVEFCIGFuZCBFU0MtRVNDIHRvIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uICovCkBAIC05NDgsOCArMTAxMCw4IEBACiAgICAgICAgIHN0cmR1cCgiIFx0XG5gfiFAIyQlXiYqKCktPStbe119XFx8OzonXCIsPD4vPyIpOwogICAgICAgICAvKiBBbGwgbm9uYWxwaGFudW1zIGV4Y2VwdCAnLicgKi8KIAotICAgIGJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7Ci0gICAgZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICBtb2Rfc3RhdGUtPmJlZ2lkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5lbmRpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOwogICAgIC8qIEluaXRpYWxpemUgKGFsbG93cyAuaW5wdXRyYyB0byBvdmVycmlkZSkKICAgICAgKgogICAgICAqIFhYWDogQSBidWcgaW4gdGhlIHJlYWRsaW5lLTIuMiBsaWJyYXJ5IGNhdXNlcyBhIG1lbW9yeSBsZWFrCkBAIC05ODEsNyArMTA0Myw3IEBACiBleHRlcm4gUHlUaHJlYWRTdGF0ZSogX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAKIHN0YXRpYyBjaGFyICoKLXJlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQorcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNvbnN0IGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCiB7CiAgICAgY2hhciAqIG5vdF9kb25lX3JlYWRpbmcgPSAiIjsKICAgICBmZF9zZXQgc2VsZWN0c2V0OwpAQCAtMTA1Niw3ICsxMTE4LDcgQEAKIAogCiBzdGF0aWMgY2hhciAqCi1yZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKK3JlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjb25zdCBjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQogewogICAgIFB5T1Nfc2lnaGFuZGxlcl90IG9sZF9pbnRoYW5kbGVyOwogICAgIGNoYXIgKnA7CkBAIC0xMDgzLDcgKzExNDUsNyBAQAogCiAKIHN0YXRpYyBjaGFyICoKLWNhbGxfcmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitjYWxsX3JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuOwogICAgIGNoYXIgKnAsICpxOwpAQCAtMTExNCw3ICsxMTc2LDcgQEAKIAogICAgIC8qIFdlIGdvdCBhbiBFT0YsIHJldHVybiBhIGVtcHR5IHN0cmluZy4gKi8KICAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgIHAgPSBQeU1lbV9NYWxsb2MoMSk7CisgICAgICAgIHAgPSBQeU1lbV9SYXdNYWxsb2MoMSk7CiAgICAgICAgIGlmIChwICE9IE5VTEwpCiAgICAgICAgICAgICAqcCA9ICdcMCc7CiAgICAgICAgIFJFU1RPUkVfTE9DQUxFKHNhdmVkX2xvY2FsZSkKQEAgLTExNDIsNyArMTIwNCw3IEBACiAgICAgLyogQ29weSB0aGUgbWFsbG9jJ2VkIGJ1ZmZlciBpbnRvIGEgUHlNZW1fTWFsbG9jJ2VkIG9uZSBhbmQKICAgICAgICByZWxlYXNlIHRoZSBvcmlnaW5hbC4gKi8KICAgICBxID0gcDsKLSAgICBwID0gUHlNZW1fTWFsbG9jKG4rMik7CisgICAgcCA9IFB5TWVtX1Jhd01hbGxvYyhuKzIpOwogICAgIGlmIChwICE9IE5VTEwpIHsKICAgICAgICAgc3RybmNweShwLCBxLCBuKTsKICAgICAgICAgcFtuXSA9ICdcbic7CkBAIC0xMTY4LDEyICsxMjMwLDEyIEBACiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgICJyZWFkbGluZSIsCiAgICAgZG9jX21vZHVsZSwKLSAgICAtMSwKKyAgICBzaXplb2YocmVhZGxpbmVzdGF0ZSksCiAgICAgcmVhZGxpbmVfbWV0aG9kcywKICAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgcmVhZGxpbmVfdHJhdmVyc2UsCisgICAgcmVhZGxpbmVfY2xlYXIsCisgICAgcmVhZGxpbmVfZnJlZQogfTsKIAogCkBAIC0xMTgxLDYgKzEyNDMsNyBAQAogUHlJbml0X3JlYWRsaW5lKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm07CisgICAgcmVhZGxpbmVzdGF0ZSAqbW9kX3N0YXRlOwogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKHN0cm5jbXAocmxfbGlicmFyeV92ZXJzaW9uLCBsaWJlZGl0X3ZlcnNpb25fdGFnLCBzdHJsZW4obGliZWRpdF92ZXJzaW9uX3RhZykpID09IDApIHsKQEAgLTExOTcsNyArMTI2MCw4IEBACiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBtb2Rfc3RhdGUgPSAocmVhZGxpbmVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShtKTsKICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID0gY2FsbF9yZWFkbGluZTsKLSAgICBzZXR1cF9yZWFkbGluZSgpOworICAgIHNldHVwX3JlYWRsaW5lKG1vZF9zdGF0ZSk7CiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Jlc291cmNlLmMgYi9Nb2R1bGVzL3Jlc291cmNlLmMKaW5kZXggYjI5NGE4Yy4uYzEyY2UzNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9yZXNvdXJjZS5jCisrKyBiL01vZHVsZXMvcmVzb3VyY2UuYwpAQCAtMTA2LDYgKzEwNiw0NCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBpbnQKK3B5MnJsaW1pdChQeU9iamVjdCAqY3Vyb2JqLCBQeU9iamVjdCAqbWF4b2JqLCBzdHJ1Y3QgcmxpbWl0ICpybF9vdXQpCit7CisjaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZyhjdXJvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJsX291dC0+cmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7CisgICAgaWYgKHJsX291dC0+cmxpbV9tYXggPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisjZWxzZQorICAgIC8qIFRoZSBsaW1pdHMgYXJlIHByb2JhYmx5IGJpZ2dlciB0aGFuIGEgbG9uZyAqLworICAgIHJsX291dC0+cmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJsX291dC0+cmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2VuZGlmCisKKyAgICBybF9vdXQtPnJsaW1fY3VyID0gcmxfb3V0LT5ybGltX2N1ciAmIFJMSU1fSU5GSU5JVFk7CisgICAgcmxfb3V0LT5ybGltX21heCA9IHJsX291dC0+cmxpbV9tYXggJiBSTElNX0lORklOSVRZOworICAgIHJldHVybiAwOworCit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3JsaW1pdDJweShzdHJ1Y3QgcmxpbWl0IHJsKQoreworI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCisgICAgaWYgKHNpemVvZihybC5ybGltX2N1cikgPiBzaXplb2YobG9uZykpIHsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIkxMIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBZX0xPTkdfTE9ORykgcmwucmxpbV9jdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fbWF4KTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibGwiLCAobG9uZykgcmwucmxpbV9jdXIsIChsb25nKSBybC5ybGltX21heCk7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMTI2LDE1ICsxNjQsNyBAQAogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQotI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCi0gICAgaWYgKHNpemVvZihybC5ybGltX2N1cikgPiBzaXplb2YobG9uZykpIHsKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIkxMIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBZX0xPTkdfTE9ORykgcmwucmxpbV9jdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fbWF4KTsKLSAgICB9Ci0jZW5kaWYKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibGwiLCAobG9uZykgcmwucmxpbV9jdXIsIChsb25nKSBybC5ybGltX21heCk7CisgICAgcmV0dXJuIHJsaW1pdDJweShybCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xNjYsMjUgKzE5NiwxMCBAQAogICAgIGN1cm9iaiA9IFB5VHVwbGVfR0VUX0lURU0obGltaXRzLCAwKTsKICAgICBtYXhvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMSk7CiAKLSNpZiAhZGVmaW5lZChIQVZFX0xBUkdFRklMRV9TVVBQT1JUKQotICAgIHJsLnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJnJsKSA8IDApIHsKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBybC5ybGltX21heCA9IFB5TG9uZ19Bc0xvbmcobWF4b2JqKTsKLSAgICBpZiAocmwucmxpbV9tYXggPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGVycm9yOwotI2Vsc2UKLSAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmdMb25nKGN1cm9iaik7Ci0gICAgaWYgKHJsLnJsaW1fY3VyID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBybC5ybGltX21heCA9IFB5TG9uZ19Bc0xvbmdMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbmRpZgorICAgIH0KIAotICAgIHJsLnJsaW1fY3VyID0gcmwucmxpbV9jdXIgJiBSTElNX0lORklOSVRZOwotICAgIHJsLnJsaW1fbWF4ID0gcmwucmxpbV9tYXggJiBSTElNX0lORklOSVRZOwogICAgIGlmIChzZXRybGltaXQocmVzb3VyY2UsICZybCkgPT0gLTEpIHsKICAgICAgICAgaWYgKGVycm5vID09IEVJTlZBTCkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMjA1LDYgKzIyMCw0OCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisjaWZkZWYgSEFWRV9QUkxJTUlUCitzdGF0aWMgUHlPYmplY3QgKgorcmVzb3VyY2VfcHJsaW1pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgc3RydWN0IHJsaW1pdCBvbGRfbGltaXQsIG5ld19saW1pdDsKKyAgICBpbnQgcmVzb3VyY2UsIHJldHZhbDsKKyAgICBwaWRfdCBwaWQ7CisgICAgUHlPYmplY3QgKmN1cm9iaj1OVUxMLCAqbWF4b2JqPU5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaXwoT08pOnBybGltaXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlkLCAmcmVzb3VyY2UsICZjdXJvYmosICZtYXhvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChyZXNvdXJjZSA8IDAgfHwgcmVzb3VyY2UgPj0gUkxJTV9OTElNSVRTKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcmVzb3VyY2Ugc3BlY2lmaWVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChjdXJvYmogIT0gTlVMTCkgeworICAgICAgICBpZiAocHkycmxpbWl0KGN1cm9iaiwgbWF4b2JqLCAmbmV3X2xpbWl0KSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IHBybGltaXQocGlkLCByZXNvdXJjZSwgJm5ld19saW1pdCwgJm9sZF9saW1pdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsIE5VTEwsICZvbGRfbGltaXQpOworICAgIH0KKworICAgIGlmIChyZXR2YWwgPT0gLTEpIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVJTlZBTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImN1cnJlbnQgbGltaXQgZXhjZWVkcyBtYXhpbXVtIGxpbWl0Iik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBybGltaXQycHkob2xkX2xpbWl0KTsKK30KKyNlbmRpZiAvKiBIQVZFX1BSTElNSVQgKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKIHJlc291cmNlX2dldHBhZ2VzaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewpAQCAtMjI5LDYgKzI4Niw5IEBACiByZXNvdXJjZV9tZXRob2RzW10gPSB7CiAgICAgeyJnZXRydXNhZ2UiLCAgICByZXNvdXJjZV9nZXRydXNhZ2UsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHJsaW1pdCIsICAgIHJlc291cmNlX2dldHJsaW1pdCwgICBNRVRIX1ZBUkFSR1N9LAorI2lmZGVmIEhBVkVfUFJMSU1JVAorICAgIHsicHJsaW1pdCIsICAgICAgcmVzb3VyY2VfcHJsaW1pdCwgICAgIE1FVEhfVkFSQVJHU30sCisjZW5kaWYKICAgICB7InNldHJsaW1pdCIsICAgIHJlc291cmNlX3NldHJsaW1pdCwgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0cGFnZXNpemUiLCAgcmVzb3VyY2VfZ2V0cGFnZXNpemUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC0yNjMsODAgKzMyMywxMDUgQEAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwogICAgIFB5X0lOQ1JFRihQeUV4Y19PU0Vycm9yKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgUHlFeGNfT1NFcnJvcik7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RydWN0UlVzYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKTsKKyAgICBpZiAoIWluaXRpYWxpemVkKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RydWN0UlVzYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfcnVzYWdlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIFB5X0lOQ1JFRigmU3RydWN0UlVzYWdlVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJzdHJ1Y3RfcnVzYWdlIiwKICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0KikgJlN0cnVjdFJVc2FnZVR5cGUpOwogCiAgICAgLyogaW5zZXJ0IGNvbnN0YW50cyAqLwogI2lmZGVmIFJMSU1JVF9DUFUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0NQVSIsIFJMSU1JVF9DUFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9DUFUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfRlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0ZTSVpFIiwgUkxJTUlUX0ZTSVpFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfRlNJWkUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfREFUQQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfREFUQSIsIFJMSU1JVF9EQVRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfREFUQSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TVEFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfU1RBQ0siLCBSTElNSVRfU1RBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TVEFDSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9DT1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DT1JFIiwgUkxJTUlUX0NPUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9DT1JFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX05PRklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTk9GSUxFIiwgUkxJTUlUX05PRklMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX05PRklMRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9PRklMRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfT0ZJTEUiLCBSTElNSVRfT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9PRklMRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9WTUVNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9WTUVNIiwgUkxJTUlUX1ZNRU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9WTUVNKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0FTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9BUyIsIFJMSU1JVF9BUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0FTKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX1JTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfUlNTIiwgUkxJTUlUX1JTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1JTUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OUFJPQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTlBST0MiLCBSTElNSVRfTlBST0MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OUFJPQyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9NRU1MT0NLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9NRU1MT0NLIiwgUkxJTUlUX01FTUxPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9NRU1MT0NLKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX1NCU0laRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfU0JTSVpFIiwgUkxJTUlUX1NCU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1NCU0laRSk7CiAjZW5kaWYKIAorLyogTGludXggc3BlY2lmaWMgKi8KKyNpZmRlZiBSTElNSVRfTVNHUVVFVUUKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTVNHUVVFVUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfTklDRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OSUNFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUUFJJTworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFBSSU8pOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfUlRUSU1FCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1JUVElNRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9TSUdQRU5ESU5HCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX1NJR1BFTkRJTkcpOworI2VuZGlmCisKKy8qIHRhcmdldCAqLwogI2lmZGVmIFJVU0FHRV9TRUxGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9TRUxGIiwgUlVTQUdFX1NFTEYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9TRUxGKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX0NISUxEUkVOCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9DSElMRFJFTiIsIFJVU0FHRV9DSElMRFJFTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX0NISUxEUkVOKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX0JPVEgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUlVTQUdFX0JPVEgiLCBSVVNBR0VfQk9USCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX0JPVEgpOwogI2VuZGlmCiAKICNpZmRlZiBSVVNBR0VfVEhSRUFECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9USFJFQUQiLCBSVVNBR0VfVEhSRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfVEhSRUFEKTsKICNlbmRpZgogCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMgYi9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCmluZGV4IDYwM2EyYjYuLjYyOTFhMmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwpAQCAtNDcsMTEgKzQ3LDYgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx1dGlscy5oPgotI2VuZGlmCi0KICNpZmRlZiBNU19XSU5ET1dTCiAjICBkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgogIyAgaW5jbHVkZSA8d2luc29jay5oPgpAQCAtMzA0LDkgKzI5OSw5IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldCA9IFB5VHVwbGVfUGFjaygzLCBpZmRsaXN0LCBvZmRsaXN0LCBlZmRsaXN0KTsKIAotICAgICAgICBQeV9ERUNSRUYoaWZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihvZmRsaXN0KTsKLSAgICAgICAgUHlfREVDUkVGKGVmZGxpc3QpOworICAgICAgICBQeV9YREVDUkVGKGlmZGxpc3QpOworICAgICAgICBQeV9YREVDUkVGKG9mZGxpc3QpOworICAgICAgICBQeV9YREVDUkVGKGVmZGxpc3QpOwogICAgIH0KIAogICBmaW5hbGx5OgpAQCAtNjg5LDYgKzY4NCwxMyBAQAogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IGRldnBvbGxfVHlwZTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK2RldnBvbGxfZXJyX2Nsb3NlZCh2b2lkKQoreworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZGV2cG9sbCBvYmplY3QiKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGludCBkZXZwb2xsX2ZsdXNoKGRldnBvbGxPYmplY3QgKnNlbGYpCiB7CiAgICAgaW50IHNpemUsIG47CkBAIC03MjksNiArNzMxLDkgQEAKICAgICBQeU9iamVjdCAqbzsKICAgICBpbnQgZmQsIGV2ZW50cyA9IFBPTExJTiB8IFBPTExQUkkgfCBQT0xMT1VUOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98aTpyZWdpc3RlciIsICZvLCAmZXZlbnRzKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03OTMsNiArNzk4LDkgQEAKIHsKICAgICBpbnQgZmQ7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciggbyApOwogICAgIGlmIChmZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MjIsNiArODMwLDkgQEAKICAgICBsb25nIHRpbWVvdXQ7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqbnVtMSwgKm51bTI7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvbGwiLCAwLCAxLCAmdG91dCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTAwLDYgKzkxMSw2MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50CitkZXZwb2xsX2ludGVybmFsX2Nsb3NlKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSAwOworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsID49IDApIHsKKyAgICAgICAgaW50IGZkID0gc2VsZi0+ZmRfZGV2cG9sbDsKKyAgICAgICAgc2VsZi0+ZmRfZGV2cG9sbCA9IC0xOworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChjbG9zZShmZCkgPCAwKQorICAgICAgICAgICAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKyAgICByZXR1cm4gc2F2ZV9lcnJubzsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9jbG9zZShkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGVycm5vID0gZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShzZWxmKTsKKyAgICBpZiAoZXJybm8gPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZGV2cG9sbF9jbG9zZV9kb2MsCisiY2xvc2UoKSAtPiBOb25lXG5cCitcblwKK0Nsb3NlIHRoZSBkZXZwb2xsIGZpbGUgZGVzY3JpcHRvci4gRnVydGhlciBvcGVyYXRpb25zIG9uIHRoZSBkZXZwb2xsXG5cCitvYmplY3Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZ2V0X2Nsb3NlZChkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZmlsZW5vKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5mZF9kZXZwb2xsKTsKK30KKworUHlEb2NfU1RSVkFSKGRldnBvbGxfZmlsZW5vX2RvYywKKyJmaWxlbm8oKSAtPiBpbnRcblwKK1xuXAorUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IuIik7CisKIHN0YXRpYyBQeU1ldGhvZERlZiBkZXZwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7InJlZ2lzdGVyIiwgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX3JlZ2lzdGVyLAogICAgICBNRVRIX1ZBUkFSR1MsICBkZXZwb2xsX3JlZ2lzdGVyX2RvY30sCkBAIC05MDksOSArOTc0LDE5IEBACiAgICAgIE1FVEhfTywgICAgICAgIGRldnBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTLCAgZGV2cG9sbF9wb2xsX2RvY30sCisgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9jbG9zZSwgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfY2xvc2VfZG9jfSwKKyAgICB7ImZpbGVubyIsICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX2ZpbGVubywgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfZmlsZW5vX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKK3N0YXRpYyBQeUdldFNldERlZiBkZXZwb2xsX2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpZGV2cG9sbF9nZXRfY2xvc2VkLCBOVUxMLAorICAgICAiVHJ1ZSBpZiB0aGUgZGV2cG9sbCBvYmplY3QgaXMgY2xvc2VkIn0sCisgICAgezB9LAorfTsKKwogc3RhdGljIGRldnBvbGxPYmplY3QgKgogbmV3RGV2UG9sbE9iamVjdCh2b2lkKQogewpAQCAtOTI5LDcgKzEwMDQsNyBAQAogICAgICovCiAgICAgbGltaXRfcmVzdWx0ID0gZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZsaW1pdCk7CiAgICAgaWYgKGxpbWl0X3Jlc3VsdCAhPSAtMSkKLSAgICAgICAgZmRfZGV2cG9sbCA9IG9wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7CisgICAgICAgIGZkX2RldnBvbGwgPSBfUHlfb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxpbWl0X3Jlc3VsdCA9PSAtMSkgewpAQCAtOTY1LDEyICsxMDQwLDggQEAKIHN0YXRpYyB2b2lkCiBkZXZwb2xsX2RlYWxsb2MoZGV2cG9sbE9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgY2xvc2Uoc2VsZi0+ZmRfZGV2cG9sbCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICh2b2lkKWRldnBvbGxfaW50ZXJuYWxfY2xvc2Uoc2VsZik7CiAgICAgUHlNZW1fREVMKHNlbGYtPmZkcyk7Ci0KICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEwMDYsNiArMTA3Nyw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIGRldnBvbGxfbWV0aG9kcywgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZGV2cG9sbF9nZXRzZXRsaXN0LCAgICAgICAgIC8qIHRwX2dldHNldCAqLwogfTsKICNlbmRpZiAgLyogSEFWRV9TWVNfREVWUE9MTF9IICovCiAKQEAgLTEwODksNyArMTE2Miw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHllcG9sbF9lcnJfY2xvc2VkKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBlcG9sbCBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZXBvbGwgb2JqZWN0Iik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTExMjEsNiArMTE5NCw3IEBACiAgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBIQVZFX0VQT0xMX0NSRUFURTEKKyAgICAgICAgZmxhZ3MgfD0gRVBPTExfQ0xPRVhFQzsKICAgICAgICAgaWYgKGZsYWdzKQogICAgICAgICAgICAgc2VsZi0+ZXBmZCA9IGVwb2xsX2NyZWF0ZTEoZmxhZ3MpOwogICAgICAgICBlbHNlCkBAIC0xMTM2LDYgKzEyMTAsMTQgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyNpZm5kZWYgSEFWRV9FUE9MTF9DUkVBVEUxCisgICAgaWYgKGZkID09IC0xICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+ZXBmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIApAQCAtMTM3Nyw3ICsxNDU5LDYgQEAKIAogICAgIGV2cyA9IFB5TWVtX05ldyhzdHJ1Y3QgZXBvbGxfZXZlbnQsIG1heGV2ZW50cyk7CiAgICAgaWYgKGV2cyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTQxNiw2ICsxNDk3LDI0IEBACiBpbiBzZWNvbmRzIChhcyBmbG9hdCkuIC0xIG1ha2VzIHBvbGwgd2FpdCBpbmRlZmluaXRlbHkuXG5cCiBVcCB0byBtYXhldmVudHMgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitweWVwb2xsX2VudGVyKHB5RXBvbGxfT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpZiAoc2VsZi0+ZXBmZCA8IDApCisgICAgICAgIHJldHVybiBweWVwb2xsX2Vycl9jbG9zZWQoKTsKKworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXBvbGxfZXhpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOworCisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCiBzdGF0aWMgUHlNZXRob2REZWYgcHllcG9sbF9tZXRob2RzW10gPSB7CiAgICAgeyJmcm9tZmQiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9mcm9tZmQsCiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfQ0xBU1MsIHB5ZXBvbGxfZnJvbWZkX2RvY30sCkBAIC0xNDMxLDYgKzE1MzAsMTAgQEAKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICBweWVwb2xsX3VucmVnaXN0ZXJfZG9jfSwKICAgICB7InBvbGwiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX3BvbGwsCiAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsICAgICAgcHllcG9sbF9wb2xsX2RvY30sCisgICAgeyJfX2VudGVyX18iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfZW50ZXIsICAgICBNRVRIX05PQVJHUywKKyAgICAgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9leGl0LCAgICAgTUVUSF9WQVJBUkdTLAorICAgICBOVUxMfSwKICAgICB7TlVMTCwgICAgICBOVUxMfSwKIH07CiAKQEAgLTE3NTksNyArMTg2Miw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgoga3F1ZXVlX3F1ZXVlX2Vycl9jbG9zZWQodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGtxdWV1ZSBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQga3F1ZXVlIG9iamVjdCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xODAxLDEzICsxOTA0LDE5IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmtxZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBrcXVldWVfcXVldWVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotCiAgICAgaWYgKChhcmdzICE9IE5VTEwgJiYgUHlPYmplY3RfU2l6ZShhcmdzKSkgfHwKICAgICAgICAgICAgICAgICAgICAgKGt3ZHMgIT0gTlVMTCAmJiBQeU9iamVjdF9TaXplKGt3ZHMpKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIxNzksNyArMjI4OCw3IEBACiAjdW5kZWYgUElQRV9CVUYKICNkZWZpbmUgUElQRV9CVUYgNTEyCiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElQRV9CVUYiLCBQSVBFX0JVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElQRV9CVUYpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfUE9MTCkgJiYgIWRlZmluZWQoSEFWRV9CUk9LRU5fUE9MTCkKQEAgLTIxOTQsMjcgKzIzMDMsMjcgQEAKICNlbmRpZgogICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KCZwb2xsX1R5cGUpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTElOIiwgUE9MTElOKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExQUkkiLCBQT0xMUFJJKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExPVVQiLCBQT0xMT1VUKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExFUlIiLCBQT0xMRVJSKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExIVVAiLCBQT0xMSFVQKTsKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExOVkFMIiwgUE9MTE5WQUwpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMSU4pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUFJJKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE9VVCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExFUlIpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMSFVQKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE5WQUwpOwogCiAjaWZkZWYgUE9MTFJETk9STQotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFJETk9STSIsIFBPTExSRE5PUk0pOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUkROT1JNKTsKICNlbmRpZgogI2lmZGVmIFBPTExSREJBTkQKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExSREJBTkQiLCBQT0xMUkRCQU5EKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFJEQkFORCk7CiAjZW5kaWYKICNpZmRlZiBQT0xMV1JOT1JNCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMV1JOT1JNIiwgUE9MTFdSTk9STSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExXUk5PUk0pOwogI2VuZGlmCiAjaWZkZWYgUE9MTFdSQkFORAotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFdSQkFORCIsIFBPTExXUkJBTkQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMV1JCQU5EKTsKICNlbmRpZgogI2lmZGVmIFBPTExNU0cKLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExNU0ciLCBQT0xMTVNHKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTE1TRyk7CiAjZW5kaWYKICAgICB9CiAjZW5kaWYgLyogSEFWRV9QT0xMICovCkBAIC0yMjMyLDI1ICsyMzQxLDI1IEBACiAgICAgUHlfSU5DUkVGKCZweUVwb2xsX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXBvbGwiLCAoUHlPYmplY3QgKikgJnB5RXBvbGxfVHlwZSk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExJTiIsIEVQT0xMSU4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE9VVCIsIEVQT0xMT1VUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExQUkkiLCBFUE9MTFBSSSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMRVJSIiwgRVBPTExFUlIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEhVUCIsIEVQT0xMSFVQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExFVCIsIEVQT0xMRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMSU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFBSSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExFUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMSFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEVUKTsKICNpZmRlZiBFUE9MTE9ORVNIT1QKICAgICAvKiBLZXJuZWwgMi42LjIrICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMT05FU0hPVCIsIEVQT0xMT05FU0hPVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExPTkVTSE9UKTsKICNlbmRpZgogICAgIC8qIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTF9SREhVUCIsIEVQT0xMUkRIVVApOyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFJETk9STSIsIEVQT0xMUkROT1JNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExSREJBTkQiLCBFUE9MTFJEQkFORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMV1JOT1JNIiwgRVBPTExXUk5PUk0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFdSQkFORCIsIEVQT0xMV1JCQU5EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExNU0ciLCBFUE9MTE1TRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExSRE5PUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUkRCQU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFdSTk9STSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUkJBTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMTVNHKTsKIAogI2lmZGVmIEVQT0xMX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfQ0xPRVhFQyIsIEVQT0xMX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMX0NMT0VYRUMpOwogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9FUE9MTCAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCmluZGV4IGQwZjMxOGQuLmI0NGZlMTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCkBAIC05MiwxMCArOTIsNiBAQAogICAgICAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVs1XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICAgIFwKICAgICAgKHkpWzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVs3XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBTSEExIG1hY3JvcyAqLwogCkBAIC0yMjAsOSArMjE2LDkgQEAKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gU0hBMV9CTE9DS1NJWkU7CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IFNIQTFfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoU0hBMV9CTE9DS1NJWkUgLSBzaGExLT5jdXJsZW4pKTsKKyAgICAgICAgICAgbiA9IFB5X01JTihpbmxlbiwgKFB5X3NzaXplX3QpKFNIQTFfQkxPQ0tTSVpFIC0gc2hhMS0+Y3VybGVuKSk7CiAgICAgICAgICAgIG1lbWNweShzaGExLT5idWYgKyBzaGExLT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSBuOworICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSAoU0hBMV9JTlQzMiluOwogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBuOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOwogICAgICAgICAgICBpZiAoc2hhMS0+Y3VybGVuID09IFNIQTFfQkxPQ0tTSVpFKSB7CkBAIC00MTUsNyArNDExLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEExX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTEiLCA0KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGExIiwgNCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NDgsOCArNTQ0LDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGExKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEExdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEExVHlwZSIsIChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwppbmRleCA5ZjZiNDE2Li5iMDViZmMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKQEAgLTIxLDEzICsyMSw2IEBACiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCiAKLS8qIEVuZGlhbm5lc3MgdGVzdGluZyBhbmQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVGVzdEVuZGlhbm5lc3ModmFyaWFibGUpIHtpbnQgaT0xOyB2YXJpYWJsZT1QQ1RfQklHX0VORElBTjtcCi0gICAgICAgIGlmICgqKChjaGFyKikmaSk9PTEpIHZhcmlhYmxlPVBDVF9MSVRUTEVfRU5ESUFOO30KLQotI2RlZmluZSBQQ1RfTElUVExFX0VORElBTiAxCi0jZGVmaW5lIFBDVF9CSUdfRU5ESUFOIDAKLQogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNIQV9CWVRFOwpAQCAtNTAsNyArNDMsNiBAQAogICAgIFNIQV9JTlQzMiBkaWdlc3RbOF07ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZGlnZXN0ICovCiAgICAgU0hBX0lOVDMyIGNvdW50X2xvLCBjb3VudF9oaTsgICAgICAgLyogNjQtYml0IGJpdCBjb3VudCAqLwogICAgIFNIQV9CWVRFIGRhdGFbU0hBX0JMT0NLU0laRV07ICAgICAgIC8qIFNIQSBkYXRhIGJ1ZmZlciAqLwotICAgIGludCBFbmRpYW5uZXNzOwogICAgIGludCBsb2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVucHJvY2Vzc2VkIGFtb3VudCBpbiBkYXRhICovCiAgICAgaW50IGRpZ2VzdHNpemU7CiB9IFNIQW9iamVjdDsKQEAgLTU4LDEzICs1MCwxMSBAQAogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCi1zdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UMzIgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCwgaW50IEVuZGlhbm5lc3MpCisjaWYgUFlfTElUVExFX0VORElBTgorc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDMyICpidWZmZXIsIGludCBieXRlQ291bnQpCiB7CiAgICAgU0hBX0lOVDMyIHZhbHVlOwogCi0gICAgaWYgKCBFbmRpYW5uZXNzID09IFBDVF9CSUdfRU5ESUFOICkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYnl0ZUNvdW50IC89IHNpemVvZigqYnVmZmVyKTsKICAgICB3aGlsZSAoYnl0ZUNvdW50LS0pIHsKICAgICAgICAgdmFsdWUgPSAqYnVmZmVyOwpAQCAtNzMsMTAgKzYzLDEwIEBACiAgICAgICAgICpidWZmZXIrKyA9ICggdmFsdWUgPDwgMTYgKSB8ICggdmFsdWUgPj4gMTYgKTsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTMxLDcgKzEyMSw5IEBACiAgICAgICAgIFNIQV9JTlQzMiBTWzhdLCBXWzY0XSwgdDAsIHQxOwogCiAgICAgbWVtY3B5KFcsIHNoYV9pbmZvLT5kYXRhLCBzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKLSAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSksIHNoYV9pbmZvLT5FbmRpYW5uZXNzKTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKKyNlbmRpZgogCiAgICAgZm9yIChpID0gMTY7IGkgPCA2NDsgKytpKSB7CiAgICAgICAgICAgICAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOwpAQCAtMjI4LDcgKzIyMCw2IEBACiBzdGF0aWMgdm9pZAogc2hhX2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gMHg2QTA5RTY2N0w7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IDB4QkI2N0FFODVMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSAweDNDNkVGMzcyTDsKQEAgLTI0Niw3ICsyMzcsNiBAQAogc3RhdGljIHZvaWQKIHNoYTIyNF9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IDB4YzEwNTllZDhMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSAweDM2N2NkNTA3TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gMHgzMDcwZGQxN0w7CkBAIC0yODQsNyArMjc0LDcgQEAKICAgICAgICAgbWVtY3B5KCgoU0hBX0JZVEUgKikgc2hhX2luZm8tPmRhdGEpICsgc2hhX2luZm8tPmxvY2FsLCBidWZmZXIsIGkpOwogICAgICAgICBjb3VudCAtPSBpOwogICAgICAgICBidWZmZXIgKz0gaTsKLSAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IGk7CisgICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSAoaW50KWk7CiAgICAgICAgIGlmIChzaGFfaW5mby0+bG9jYWwgPT0gU0hBX0JMT0NLU0laRSkgewogICAgICAgICAgICAgc2hhX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgICAgIH0KQEAgLTI5OSw3ICsyODksNyBAQAogICAgICAgICBzaGFfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICB9CiAgICAgbWVtY3B5KHNoYV9pbmZvLT5kYXRhLCBidWZmZXIsIGNvdW50KTsKLSAgICBzaGFfaW5mby0+bG9jYWwgPSBjb3VudDsKKyAgICBzaGFfaW5mby0+bG9jYWwgPSAoaW50KWNvdW50OwogfQogCiAvKiBmaW5pc2ggY29tcHV0aW5nIHRoZSBTSEEgZGlnZXN0ICovCkBAIC01MTEsOSArNTAxLDkgQEAKIFNIQTI1Nl9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICBpZiAoKChTSEFvYmplY3QgKilzZWxmKS0+ZGlnZXN0c2l6ZSA9PSAzMikKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjU2IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTI1NiIsIDYpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjI0IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTIyNCIsIDYpOwogfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgU0hBX2dldHNldGVyc1tdID0gewpAQCAtNzE2LDExICs3MDYsMjMgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTI1Nih2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMjI0dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMjI0dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9UWVBFKCZTSEEyNTZ0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEyNTZ0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGEyNTZtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTI1Nm1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTIyNHR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjI0VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyMjR0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTI1NnR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjU2VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyNTZ0eXBlKTsKKyAgICByZXR1cm4gbTsKKwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKaW5kZXggNTUzNmZkNS4uNDdjNTdlNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCkBAIC0yMiwxMyArMjIsNiBAQAogCiAjaWZkZWYgUFlfTE9OR19MT05HIC8qIElmIG5vIFBZX0xPTkdfTE9ORywgZG9uJ3QgY29tcGlsZSBhbnl0aGluZyEgKi8KIAotLyogRW5kaWFubmVzcyB0ZXN0aW5nIGFuZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBUZXN0RW5kaWFubmVzcyh2YXJpYWJsZSkge2ludCBpPTE7IHZhcmlhYmxlPVBDVF9CSUdfRU5ESUFOO1wKLSAgICAgICAgaWYgKCooKGNoYXIqKSZpKT09MSkgdmFyaWFibGU9UENUX0xJVFRMRV9FTkRJQU47fQotCi0jZGVmaW5lIFBDVF9MSVRUTEVfRU5ESUFOIDEKLSNkZWZpbmUgUENUX0JJR19FTkRJQU4gMAotCiAvKiBTb21lIHVzZWZ1bCB0eXBlcyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgU0hBX0JZVEU7CkBAIC01Miw3ICs0NSw2IEBACiAgICAgU0hBX0lOVDY0IGRpZ2VzdFs4XTsgICAgICAgICAgICAgICAgLyogTWVzc2FnZSBkaWdlc3QgKi8KICAgICBTSEFfSU5UMzIgY291bnRfbG8sIGNvdW50X2hpOyAgICAgICAvKiA2NC1iaXQgYml0IGNvdW50ICovCiAgICAgU0hBX0JZVEUgZGF0YVtTSEFfQkxPQ0tTSVpFXTsgICAgICAgLyogU0hBIGRhdGEgYnVmZmVyICovCi0gICAgaW50IEVuZGlhbm5lc3M7CiAgICAgaW50IGxvY2FsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5wcm9jZXNzZWQgYW1vdW50IGluIGRhdGEgKi8KICAgICBpbnQgZGlnZXN0c2l6ZTsKIH0gU0hBb2JqZWN0OwpAQCAtNjAsMTMgKzUyLDExIEBACiAvKiBXaGVuIHJ1biBvbiBhIGxpdHRsZS1lbmRpYW4gQ1BVIHdlIG5lZWQgdG8gcGVyZm9ybSBieXRlIHJldmVyc2FsIG9uIGFuCiAgICBhcnJheSBvZiBsb25nd29yZHMuICovCiAKLXN0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQ2NCAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50LCBpbnQgRW5kaWFubmVzcykKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCitzdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UNjQgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCkKIHsKICAgICBTSEFfSU5UNjQgdmFsdWU7CiAKLSAgICBpZiAoIEVuZGlhbm5lc3MgPT0gUENUX0JJR19FTkRJQU4gKQotICAgICAgICByZXR1cm47Ci0KICAgICBieXRlQ291bnQgLz0gc2l6ZW9mKCpidWZmZXIpOwogICAgIHdoaWxlIChieXRlQ291bnQtLSkgewogICAgICAgICB2YWx1ZSA9ICpidWZmZXI7CkBAIC04MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgICAgICBidWZmZXIrKzsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTQxLDcgKzEzMSw5IEBACiAgICAgU0hBX0lOVDY0IFNbOF0sIFdbODBdLCB0MCwgdDE7CiAKICAgICBtZW1jcHkoVywgc2hhX2luZm8tPmRhdGEsIHNpemVvZihzaGFfaW5mby0+ZGF0YSkpOwotICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSwgc2hhX2luZm8tPkVuZGlhbm5lc3MpOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSkpOworI2VuZGlmCiAKICAgICBmb3IgKGkgPSAxNjsgaSA8IDgwOyArK2kpIHsKICAgICAgICAgICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CkBAIC0yNTQsNyArMjQ2LDYgQEAKIHN0YXRpYyB2b2lkCiBzaGE1MTJfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSBQeV9VTEwoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gUHlfVUxMKDB4YmI2N2FlODU4NGNhYTczYik7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IFB5X1VMTCgweDNjNmVmMzcyZmU5NGY4MmIpOwpAQCAtMjcyLDcgKzI2Myw2IEBACiBzdGF0aWMgdm9pZAogc2hhMzg0X2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gUHlfVUxMKDB4Y2JiYjlkNWRjMTA1OWVkOCk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IFB5X1VMTCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSBQeV9VTEwoMHg5MTU5MDE1YTMwNzBkZDE3KTsKQEAgLTMxMCw3ICszMDAsNyBAQAogICAgICAgICBtZW1jcHkoKChTSEFfQllURSAqKSBzaGFfaW5mby0+ZGF0YSkgKyBzaGFfaW5mby0+bG9jYWwsIGJ1ZmZlciwgaSk7CiAgICAgICAgIGNvdW50IC09IGk7CiAgICAgICAgIGJ1ZmZlciArPSBpOwotICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gaTsKKyAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IChpbnQpaTsKICAgICAgICAgaWYgKHNoYV9pbmZvLT5sb2NhbCA9PSBTSEFfQkxPQ0tTSVpFKSB7CiAgICAgICAgICAgICBzaGE1MTJfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICAgICAgfQpAQCAtMzI1LDcgKzMxNSw3IEBACiAgICAgICAgIHNoYTUxMl90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgIH0KICAgICBtZW1jcHkoc2hhX2luZm8tPmRhdGEsIGJ1ZmZlciwgY291bnQpOwotICAgIHNoYV9pbmZvLT5sb2NhbCA9IGNvdW50OworICAgIHNoYV9pbmZvLT5sb2NhbCA9IChpbnQpY291bnQ7CiB9CiAKIC8qIGZpbmlzaCBjb21wdXRpbmcgdGhlIFNIQSBkaWdlc3QgKi8KQEAgLTU3Nyw5ICs1NjcsOSBAQAogU0hBNTEyX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICAgIGlmICgoKFNIQW9iamVjdCAqKXNlbGYpLT5kaWdlc3RzaXplID09IDY0KQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEE1MTIiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhNTEyIiwgNik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEEzODQiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMzg0IiwgNik7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiBTSEFfZ2V0c2V0ZXJzW10gPSB7CkBAIC03ODIsMTMgKzc3MiwyNCBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhNTEyKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEEzODR0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEzODR0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1RZUEUoJlNIQTUxMnR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTUxMnR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTUxMm1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhNTEybW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMzg0dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEzODRUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTM4NHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBNTEydHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEE1MTJUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTUxMnR5cGUpOworICAgIHJldHVybiBtOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCmluZGV4IGZiZTFiYjcuLjlhMGU4ZTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwpAQCAtOSw3ICs5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaWZkZWYgSEFWRV9QUk9DRVNTX0gKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZW5kaWYKQEAgLTM3LDExICszNyw2IEBACiAjZGVmaW5lIFNJR19FUlIgKChQeU9TX3NpZ2hhbmRsZXJfdCkoLTEpKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC03OCwxMCArNzMsNiBAQAogICAgYSB3b3JraW5nIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3MgaW4gYWxsIHRocmVlIGNhc2VzIC0tIHRoZQogICAgaGFuZGxlciBpZ25vcmVzIHNpZ25hbHMgaWYgZ2V0cGlkKCkgaXNuJ3QgdGhlIHNhbWUgYXMgaW4gdGhlIG1haW4KICAgIHRocmVhZC4gIFhYWCBUaGlzIGlzIGEgaGFjay4KLQotICAgR05VIHB0aCBpcyBhIHVzZXItc3BhY2UgdGhyZWFkaW5nIGxpYnJhcnksIGFuZCBhcyBzdWNoLCBhbGwgdGhyZWFkcwotICAgcnVuIHdpdGhpbiB0aGUgc2FtZSBwcm9jZXNzLiBJbiB0aGlzIGNhc2UsIGlmIHRoZSBjdXJyZW50bHkgcnVubmluZwotICAgdGhyZWFkIGlzIG5vdCB0aGUgbWFpbl90aHJlYWQsIHNlbmQgdGhlIHNpZ25hbCB0byB0aGUgbWFpbl90aHJlYWQuCiAqLwogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTE4MCwxNSArMTcxLDMxIEBACiAgICAgcmV0dXJuIFB5RXJyX0NoZWNrU2lnbmFscygpOwogfQogCitzdGF0aWMgaW50CityZXBvcnRfd2FrZXVwX2Vycm9yKHZvaWQgKmRhdGEpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICBlcnJubyA9IChpbnQpIChQeV9pbnRwdHJfdCkgZGF0YTsKKyAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgUHlTeXNfV3JpdGVTdGRlcnIoIkV4Y2VwdGlvbiBpZ25vcmVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbCB3YWtldXAgZmQ6XG4iKTsKKyAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgZXJybm8gPSBzYXZlX2Vycm5vOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogdHJpcF9zaWduYWwoaW50IHNpZ19udW0pCiB7CiAgICAgdW5zaWduZWQgY2hhciBieXRlOworICAgIGludCByYyA9IDA7CiAKICAgICBIYW5kbGVyc1tzaWdfbnVtXS50cmlwcGVkID0gMTsKICAgICBpZiAod2FrZXVwX2ZkICE9IC0xKSB7CiAgICAgICAgIGJ5dGUgPSAodW5zaWduZWQgY2hhcilzaWdfbnVtOwotICAgICAgICB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKTsKKyAgICAgICAgd2hpbGUgKChyYyA9IHdyaXRlKHdha2V1cF9mZCwgJmJ5dGUsIDEpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsKHJlcG9ydF93YWtldXBfZXJyb3IsICh2b2lkICopIChQeV9pbnRwdHJfdCkgZXJybm8pOwogICAgIH0KICAgICBpZiAoaXNfdHJpcHBlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAzLDEzICsyMTAsNiBAQAogewogICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CiAKLSNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFdJVEhfUFRIKQotICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKLSAgICAgICAgcHRoX3JhaXNlKCoocHRoX3QgKikgbWFpbl90aHJlYWQsIHNpZ19udW0pOwotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAvKiBTZWUgTk9URVMgc2VjdGlvbiBhYm92ZSAqLwogICAgIGlmIChnZXRwaWQoKSA9PSBtYWluX3BpZCkKQEAgLTIzMSw3ICsyMzEsNiBAQAogICAgICAqIG1ha2VzIHRoaXMgdHJ1ZS4gIFNlZSBhbHNvIGlzc3VlODM1NC4gKi8KICAgICBQeU9TX3NldHNpZyhzaWdfbnVtLCBzaWduYWxfaGFuZGxlcik7CiAjZW5kaWYKLSAgICB9CiAKICAgICAvKiBJc3N1ZSAjMTAzMTE6IGFzeW5jaHJvbm91c2x5IGV4ZWN1dGluZyBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdAogICAgICAgIG11dGF0ZSBlcnJubyB1bmRlciB0aGUgZmVldCBvZiB1bnN1c3BlY3RpbmcgQyBjb2RlLiAqLwpAQCAtOTgzLDkgKzk4MiwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogI2lmIGRlZmluZWQoSEFWRV9TSUdXQUlUSU5GTykgfHwgZGVmaW5lZChIQVZFX1NJR1RJTUVEV0FJVCkKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTaWdpbmZvVHlwZSwgJnN0cnVjdF9zaWdpbmZvX2Rlc2MpOwotCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNpZ2luZm9UeXBlLCAmc3RydWN0X3NpZ2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3NpZ2luZm8iLCAoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIGluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IDNiZGRhYTUuLjkyZDUyZDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtMTUsNyArMTUsNyBAQAogCiBNb2R1bGUgaW50ZXJmYWNlOgogCi0tIHNvY2tldC5lcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3Igc29ja2V0IHNwZWNpZmljIGVycm9ycworLSBzb2NrZXQuZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIHNvY2tldCBzcGVjaWZpYyBlcnJvcnMsIGFsaWFzIGZvciBPU0Vycm9yCiAtIHNvY2tldC5nYWllcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3IgZ2V0YWRkcmluZm8vZ2V0bmFtZWluZm8gZXJyb3JzLAogICAgIGEgc3ViY2xhc3Mgb2Ygc29ja2V0LmVycm9yCiAtIHNvY2tldC5oZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIGdldGhvc3RieSogZXJyb3JzLApAQCAtOTUsMTggKzk1LDE2IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCi0KIC8qIFNvY2tldCBvYmplY3QgZG9jdW1lbnRhdGlvbiAqLwogUHlEb2NfU1RSVkFSKHNvY2tfZG9jLAotInNvY2tldChbZmFtaWx5WywgdHlwZVssIHByb3RvXV1dKSAtPiBzb2NrZXQgb2JqZWN0XG5cCisic29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkgLT4gc29ja2V0IG9iamVjdFxuXAogXG5cCiBPcGVuIGEgc29ja2V0IG9mIHRoZSBnaXZlbiB0eXBlLiAgVGhlIGZhbWlseSBhcmd1bWVudCBzcGVjaWZpZXMgdGhlXG5cCiBhZGRyZXNzIGZhbWlseTsgaXQgZGVmYXVsdHMgdG8gQUZfSU5FVC4gIFRoZSB0eXBlIGFyZ3VtZW50IHNwZWNpZmllc1xuXAogd2hldGhlciB0aGlzIGlzIGEgc3RyZWFtIChTT0NLX1NUUkVBTSwgdGhpcyBpcyB0aGUgZGVmYXVsdClcblwKIG9yIGRhdGFncmFtIChTT0NLX0RHUkFNKSBzb2NrZXQuICBUaGUgcHJvdG9jb2wgYXJndW1lbnQgZGVmYXVsdHMgdG8gMCxcblwKIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgcHJvdG9jb2wuICBLZXl3b3JkIGFyZ3VtZW50cyBhcmUgYWNjZXB0ZWQuXG5cCitUaGUgc29ja2V0IGlzIGNyZWF0ZWQgYXMgbm9uLWluaGVyaXRhYmxlLlxuXAogXG5cCiBBIHNvY2tldCBvYmplY3QgcmVwcmVzZW50cyBvbmUgZW5kcG9pbnQgb2YgYSBuZXR3b3JrIGNvbm5lY3Rpb24uXG5cCiBcblwKQEAgLTExNyw3ICsxMTUsNyBAQAogY2xvc2UoKSAtLSBjbG9zZSB0aGUgc29ja2V0XG5cCiBjb25uZWN0KGFkZHIpIC0tIGNvbm5lY3QgdGhlIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzXG5cCiBjb25uZWN0X2V4KGFkZHIpIC0tIGNvbm5lY3QsIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2YgYW4gZXhjZXB0aW9uXG5cCi1fZHVwKCkgLS0gcmV0dXJuIGEgbmV3IHNvY2tldCBmZCBkdXBsaWNhdGVkIGZyb20gZmlsZW5vKClcblwKK2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCiBmaWxlbm8oKSAtLSByZXR1cm4gdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3JcblwKIGdldHBlZXJuYW1lKCkgLS0gcmV0dXJuIHJlbW90ZSBhZGRyZXNzIFsqXVxuXAogZ2V0c29ja25hbWUoKSAtLSByZXR1cm4gbG9jYWwgYWRkcmVzc1xuXApAQCAtMjIzLDEzICsyMjEsNiBAQAogI2VuZGlmCiAKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jIGRlZmluZSAgSU5DTF9ET1MKLSMgZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotIyBkZWZpbmUgIElOQ0xfTk9QTUFQSQotIyBpbmNsdWRlIDxvczIuaD4KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChfX3NnaSkgJiYgX0NPTVBJTEVSX1ZFUlNJT04+NzAwICYmICFfU0dJQVBJCiAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgcmVlbnRyYW50IChnZXRob3N0YnlhZGRyX3IgZXRjKQogICAgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCBjb3JyZWN0bHkgaWYgY29tcGlsaW5nIHdpdGgKQEAgLTI4NiwxMiArMjc3LDcgQEAKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAKIC8qIEhlYWRlcnMgbmVlZGVkIGZvciBpbmV0X250b2EoKSBhbmQgaW5ldF9hZGRyKCkgKi8KLSMgaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX1ZBQ1BQKQotIyAgaW5jbHVkZSA8bmV0ZGIuaD4KLXR5cGVkZWYgc2l6ZV90IHNvY2tsZW5fdDsKLSMgZWxzZQogIyAgIGluY2x1ZGUgPGFycGEvaW5ldC5oPgotIyBlbmRpZgogCiAjICBpbmNsdWRlIDxmY250bC5oPgogCkBAIC0zNzEsMjIgKzM1Nyw3IEBACiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTkRPV1MKLS8qIE9uIFdpbmRvd3MgYSBzb2NrZXQgaXMgcmVhbGx5IGEgaGFuZGxlIG5vdCBhbiBmZCAqLwotc3RhdGljIFNPQ0tFVAotZHVwX3NvY2tldChTT0NLRVQgaGFuZGxlKQotewotICAgIFdTQVBST1RPQ09MX0lORk8gaW5mbzsKLQotICAgIGlmIChXU0FEdXBsaWNhdGVTb2NrZXQoaGFuZGxlLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZpbmZvKSkKLSAgICAgICAgcmV0dXJuIElOVkFMSURfU09DS0VUOwotCi0gICAgcmV0dXJuIFdTQVNvY2tldChGUk9NX1BST1RPQ09MX0lORk8sIEZST01fUFJPVE9DT0xfSU5GTywKLSAgICAgICAgICAgICAgICAgICAgIEZST01fUFJPVE9DT0xfSU5GTywgJmluZm8sIDAsIFdTQV9GTEFHX09WRVJMQVBQRUQpOwotfQogI2RlZmluZSBTT0NLRVRDTE9TRSBjbG9zZXNvY2tldAotI2Vsc2UKLS8qIE9uIFVuaXggd2UgY2FuIHVzZSBkdXAgdG8gZHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQqLwotI2RlZmluZSBkdXBfc29ja2V0KGZkKSBkdXAoZmQpCiAjZW5kaWYKIAogI2lmZGVmIE1TX1dJTjMyCkBAIC0zOTUsMTEgKzM2Niw2IEBACiAjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgU09DS0VUQ0xPU0Ugc29jbG9zZQotI2RlZmluZSBOT19EVVAgLyogU29ja2V0cyBhcmUgTm90IEFjdHVhbCBGaWxlIEhhbmRsZXMgdW5kZXIgT1MvMiAqLwotI2VuZGlmCi0KICNpZm5kZWYgU09DS0VUQ0xPU0UKICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2UKICNlbmRpZgpAQCAtNDU5LDYgKzQyNSwxMCBAQAogI2RlZmluZSBJTlZBTElEX1NPQ0tFVCAoLTEpCiAjZW5kaWYKIAorI2lmbmRlZiBJTkFERFJfTk9ORQorI2RlZmluZSBJTkFERFJfTk9ORSAoLTEpCisjZW5kaWYKKwogLyogWFhYIFRoZXJlJ3MgYSBwcm9ibGVtIGhlcmU6ICpzdGF0aWMqIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvc2VkIHRvIGhhdmUKICAgIGEgUHkgcHJlZml4IChvciB1c2UgQ2FwaXRhbGl6ZWRXb3JkcykuICBMYXRlci4uLiAqLwogCkBAIC01MTksNiArNDg5LDExIEBACiAgICAgKGVycm5vID09IGV4cGVjdGVkKQogI2VuZGlmCiAKKyNpZmRlZiBNU19XSU5ET1dTCisvKiBEb2VzIFdTQVNvY2tldCgpIHN1cHBvcnQgdGhlIFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUIGZsYWc/ICovCitzdGF0aWMgaW50IHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAtMTsKKyNlbmRpZgorCiAvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiB0byByYWlzZSBhbiBlcnJvciBhY2NvcmRpbmcgdG8gZXJybm8KICAgIGFuZCByZXR1cm4gYSBOVUxMIHBvaW50ZXIgZnJvbSBhIGZ1bmN0aW9uLiAqLwogCkBAIC01MzQsNDIgKzUwOSw2IEBACiAgICAgICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBlcnJfbm8pOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoc29ja19lcnJubygpICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIEFQSVJFVCByYzsKLSAgICAgICAgVUxPTkcgIG1zZ2xlbjsKLSAgICAgICAgY2hhciBvdXRidWZbMTAwXTsKLSAgICAgICAgaW50IG15ZXJyb3Jjb2RlID0gc29ja19lcnJubygpOwotCi0gICAgICAgIC8qIFJldHJpZXZlIHNvY2tldC1yZWxhdGVkIGVycm9yIG1lc3NhZ2UgZnJvbSBNUFROLk1TRyBmaWxlICovCi0gICAgICAgIHJjID0gRG9zR2V0TWVzc2FnZShOVUxMLCAwLCBvdXRidWYsIHNpemVvZihvdXRidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJvcmNvZGUgLSBTT0NCQVNFRVJSICsgMjYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAibXB0bi5tc2ciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1zZ2xlbik7Ci0gICAgICAgIGlmIChyYyA9PSBOT19FUlJPUikgewotICAgICAgICAgICAgUHlPYmplY3QgKnY7Ci0KLSAgICAgICAgICAgIC8qIE9TLzIgZG9lc24ndCBndWFyYW50ZWUgYSB0ZXJtaW5hdG9yICovCi0gICAgICAgICAgICBvdXRidWZbbXNnbGVuXSA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAoc3RybGVuKG91dGJ1ZikgPiAwKSB7Ci0gICAgICAgICAgICAgICAgLyogSWYgbm9uLWVtcHR5IG1zZywgdHJpbSBDUkxGICovCi0gICAgICAgICAgICAgICAgY2hhciAqbGFzdGMgPSAmb3V0YnVmWyBzdHJsZW4ob3V0YnVmKS0xIF07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxhc3RjID4gb3V0YnVmICYmCi0gICAgICAgICAgICAgICAgICAgICAgIFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKmxhc3RjKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogVHJpbSB0cmFpbGluZyB3aGl0ZXNwYWNlIChDUkxGKSAqLwotICAgICAgICAgICAgICAgICAgICAqbGFzdGMtLSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgdiA9IFB5X0J1aWxkVmFsdWUoIihpcykiLCBteWVycm9yY29kZSwgb3V0YnVmKTsKLSAgICAgICAgICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfT1NFcnJvciwgdik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQogICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiB9CiAKQEAgLTY0Niw4ICs1ODUsOSBAQAogc3RhdGljIGludAogaW50ZXJuYWxfc2V0YmxvY2tpbmcoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBpbnQgYmxvY2spCiB7Ci0jaWZuZGVmIE1TX1dJTkRPV1MKLSAgICBpbnQgZGVsYXlfZmxhZzsKKyNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSBcCisgICAgJiYgISgoZGVmaW5lZChIQVZFX1NZU19JT0NUTF9IKSAmJiBkZWZpbmVkKEZJT05CSU8pKSB8fCBkZWZpbmVkKF9fVk1TKSkKKyAgICBpbnQgZGVsYXlfZmxhZywgbmV3X2RlbGF5X2ZsYWc7CiAjZW5kaWYKICNpZmRlZiBTT0NLX05PTkJMT0NLCiAgICAgaWYgKGJsb2NrKQpAQCAtNjU4LDIwICs1OTgsMTggQEAKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZm5kZWYgTVNfV0lORE9XUwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGJsb2NrID0gIWJsb2NrOwotICAgIGlvY3RsKHMtPnNvY2tfZmQsIEZJT05CSU8sIChjYWRkcl90KSZibG9jaywgc2l6ZW9mKGJsb2NrKSk7Ci0jZWxpZiBkZWZpbmVkKF9fVk1TKQorI2lmIChkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPTkJJTykpIHx8IGRlZmluZWQoX19WTVMpCiAgICAgYmxvY2sgPSAhYmxvY2s7CiAgICAgaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKHVuc2lnbmVkIGludCAqKSZibG9jayk7Ci0jZWxzZSAgLyogIVBZT1NfT1MyICYmICFfX1ZNUyAqLworI2Vsc2UKICAgICBkZWxheV9mbGFnID0gZmNudGwocy0+c29ja19mZCwgRl9HRVRGTCwgMCk7CiAgICAgaWYgKGJsb2NrKQotICAgICAgICBkZWxheV9mbGFnICY9ICh+T19OT05CTE9DSyk7CisgICAgICAgIG5ld19kZWxheV9mbGFnID0gZGVsYXlfZmxhZyAmICh+T19OT05CTE9DSyk7CiAgICAgZWxzZQotICAgICAgICBkZWxheV9mbGFnIHw9IE9fTk9OQkxPQ0s7Ci0gICAgZmNudGwocy0+c29ja19mZCwgRl9TRVRGTCwgZGVsYXlfZmxhZyk7Ci0jZW5kaWYgLyogIVBZT1NfT1MyICovCisgICAgICAgIG5ld19kZWxheV9mbGFnID0gZGVsYXlfZmxhZyB8IE9fTk9OQkxPQ0s7CisgICAgaWYgKG5ld19kZWxheV9mbGFnICE9IGRlbGF5X2ZsYWcpCisgICAgICAgIGZjbnRsKHMtPnNvY2tfZmQsIEZfU0VURkwsIG5ld19kZWxheV9mbGFnKTsKKyNlbmRpZgogI2Vsc2UgLyogTVNfV0lORE9XUyAqLwogICAgIGJsb2NrID0gIWJsb2NrOwogICAgIGlvY3Rsc29ja2V0KHMtPnNvY2tfZmQsIEZJT05CSU8sICh1X2xvbmcqKSZibG9jayk7CkBAIC04NTUsOCArNzkzLDYgQEAKIHsKICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CiAgICAgaW50IGVycm9yOwotICAgIGludCBkMSwgZDIsIGQzLCBkNDsKLSAgICBjaGFyIGNoOwogCiAgICAgbWVtc2V0KCh2b2lkICopIGFkZHJfcmV0LCAnXDAnLCBzaXplb2YoKmFkZHJfcmV0KSk7CiAgICAgaWYgKG5hbWVbMF0gPT0gJ1wwJykgewpAQCAtOTA1LDcgKzg0MSwxMCBAQAogICAgICAgICBmcmVlYWRkcmluZm8ocmVzKTsKICAgICAgICAgcmV0dXJuIHNpejsKICAgICB9Ci0gICAgaWYgKG5hbWVbMF0gPT0gJzwnICYmIHN0cmNtcChuYW1lLCAiPGJyb2FkY2FzdD4iKSA9PSAwKSB7CisgICAgLyogc3BlY2lhbC1jYXNlIGJyb2FkY2FzdCAtIGluZXRfYWRkcigpIGJlbG93IGNhbiByZXR1cm4gSU5BRERSX05PTkUgZm9yCisgICAgICogdGhpcyAqLworICAgIGlmIChzdHJjbXAobmFtZSwgIjI1NS4yNTUuMjU1LjI1NSIpID09IDAgfHwKKyAgICAgICAgc3RyY21wKG5hbWUsICI8YnJvYWRjYXN0PiIpID09IDApIHsKICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW47CiAgICAgICAgIGlmIChhZiAhPSBBRl9JTkVUICYmIGFmICE9IEFGX1VOU1BFQykgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCkBAIC05MjEsMjAgKzg2MCw1MyBAQAogICAgICAgICBzaW4tPnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9CUk9BRENBU1Q7CiAgICAgICAgIHJldHVybiBzaXplb2Yoc2luLT5zaW5fYWRkcik7CiAgICAgfQotICAgIGlmIChzc2NhbmYobmFtZSwgIiVkLiVkLiVkLiVkJWMiLCAmZDEsICZkMiwgJmQzLCAmZDQsICZjaCkgPT0gNCAmJgotICAgICAgICAwIDw9IGQxICYmIGQxIDw9IDI1NSAmJiAwIDw9IGQyICYmIGQyIDw9IDI1NSAmJgotICAgICAgICAwIDw9IGQzICYmIGQzIDw9IDI1NSAmJiAwIDw9IGQ0ICYmIGQ0IDw9IDI1NSkgewotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSAgICAgICAgc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfcmV0OwotICAgICAgICBzaW4tPnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKAotICAgICAgICAgICAgKChsb25nKSBkMSA8PCAyNCkgfCAoKGxvbmcpIGQyIDw8IDE2KSB8Ci0gICAgICAgICAgICAoKGxvbmcpIGQzIDw8IDgpIHwgKChsb25nKSBkNCA8PCAwKSk7Ci0gICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisKKyAgICAvKiBhdm9pZCBhIG5hbWUgcmVzb2x1dGlvbiBpbiBjYXNlIG9mIG51bWVyaWMgYWRkcmVzcyAqLworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisgICAgLyogY2hlY2sgZm9yIGFuIElQdjQgYWRkcmVzcyAqLworICAgIGlmIChhZiA9PSBBRl9VTlNQRUMgfHwgYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVULCBuYW1lLCAmc2luLT5zaW5fYWRkcikgPiAwKSB7CisgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCi0gICAgICAgIHNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKKyAgICAgICAgICAgIHNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKICNlbmRpZgotICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CiAgICAgfQorI2lmZGVmIEVOQUJMRV9JUFY2CisgICAgLyogY2hlY2sgZm9yIGFuIElQdjYgYWRkcmVzcyAtIGlmIHRoZSBhZGRyZXNzIGNvbnRhaW5zIGEgc2NvcGUgSUQsIHdlCisgICAgICogZmFsbGJhY2sgdG8gZ2V0YWRkcmluZm8oKSwgd2hpY2ggY2FuIGhhbmRsZSB0cmFuc2xhdGlvbiBmcm9tIGludGVyZmFjZQorICAgICAqIG5hbWUgdG8gaW50ZXJmYWNlIGluZGV4ICovCisgICAgaWYgKChhZiA9PSBBRl9VTlNQRUMgfHwgYWYgPT0gQUZfSU5FVDYpICYmICFzdHJjaHIobmFtZSwgJyUnKSkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHJfcmV0OworICAgICAgICBtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBuYW1lLCAmc2luLT5zaW42X2FkZHIpID4gMCkgeworICAgICAgICAgICAgc2luLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU09DS0FERFJfU0FfTEVOCisgICAgICAgICAgICBzaW4tPnNpbjZfbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gMTY7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogRU5BQkxFX0lQVjYgKi8KKyNlbHNlIC8qIEhBVkVfSU5FVF9QVE9OICovCisgICAgLyogY2hlY2sgZm9yIGFuIElQdjQgYWRkcmVzcyAqLworICAgIGlmIChhZiA9PSBBRl9JTkVUIHx8IGFmID09IEFGX1VOU1BFQykgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3JldDsKKyAgICAgICAgbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgaWYgKChzaW4tPnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihuYW1lKSkgIT0gSU5BRERSX05PTkUpIHsKKyAgICAgICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgICAgICAgIHNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KKworICAgIC8qIHBlcmZvcm0gYSBuYW1lIHJlc29sdXRpb24gKi8KICAgICBtZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKICAgICBoaW50cy5haV9mYW1pbHkgPSBhZjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xMzI5LDExICsxMzAxLDcgQEAKICAgICAgICAgfQogICAgICAgICBhZGRyLT5zdW5fZmFtaWx5ID0gcy0+c29ja19mYW1pbHk7CiAgICAgICAgIG1lbWNweShhZGRyLT5zdW5fcGF0aCwgcGF0aCwgbGVuKTsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICAqbGVuX3JldCA9IHNpemVvZigqYWRkcik7Ci0jZWxzZQogICAgICAgICAqbGVuX3JldCA9IGxlbiArIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpOwotI2VuZGlmCiAgICAgICAgIHJldHZhbCA9IDE7CiAgICAgdW5peF9vdXQ6CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKQEAgLTE2NTgsNiArMTYyNiw4IEBACiAgICAgY2FzZSBBRl9DQU46CiAgICAgICAgIHN3aXRjaCAocy0+c29ja19wcm90bykgewogICAgICAgICBjYXNlIENBTl9SQVc6CisgICAgICAgIC8qIGZhbGwtdGhyb3VnaCAqLworICAgICAgICBjYXNlIENBTl9CQ006CiAgICAgICAgIHsKICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9jYW4gKmFkZHI7CiAgICAgICAgICAgICBQeU9iamVjdCAqaW50ZXJmYWNlTmFtZTsKQEAgLTIwMTYsNiArMTk4NiwxMSBAQAogICAgIFB5T2JqZWN0ICphZGRyID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKICAgICBpbnQgdGltZW91dDsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgLyogYWNjZXB0NCgpIGlzIGF2YWlsYWJsZSBvbiBMaW51eCAyLjYuMjgrIGFuZCBnbGliYyAyLjEwICovCisgICAgc3RhdGljIGludCBhY2NlcHQ0X3dvcmtzID0gLTE7CisjZW5kaWYKKwogICAgIGlmICghZ2V0c29ja2FkZHJsZW4ocywgJmFkZHJsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwpAQCAtMjAyNCwxMCArMTk5OSwyNCBAQAogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQorCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgeworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgbmV3ZmQgPSBhY2NlcHQ0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ0tfQ0xPRVhFQyk7CisgICAgICAgICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQgJiYgYWNjZXB0NF93b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgICAgIC8qIE9uIExpbnV4IG9sZGVyIHRoYW4gMi42LjI4LCBhY2NlcHQ0KCkgZmFpbHMgd2l0aCBFTk9TWVMgKi8KKyAgICAgICAgICAgICAgICBhY2NlcHQ0X3dvcmtzID0gKGVycm5vICE9IEVOT1NZUyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFjY2VwdDRfd29ya3MgPT0gMCkKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbHNlCiAgICAgICAgIG5ld2ZkID0gYWNjZXB0KHMtPnNvY2tfZmQsIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKKyNlbmRpZgogICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCkBAIC0yMDQwLDYgKzIwMjksMjUgQEAKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzLT5lcnJvcmhhbmRsZXIoKTsKIAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpbmV3ZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICB9CisjZWxzZQorCisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIGlmICghYWNjZXB0NF93b3JrcykKKyNlbmRpZgorICAgIHsKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobmV3ZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKICAgICBzb2NrID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKHNvY2sgPT0gTlVMTCkgewogICAgICAgICBTT0NLRVRDTE9TRShuZXdmZCk7CkBAIC0yMzE0LDggKzIzMjIsOCBAQAogUHlEb2NfU1RSVkFSKGRldGFjaF9kb2MsCiAiZGV0YWNoKClcblwKIFxuXAotQ2xvc2UgdGhlIHNvY2tldCBvYmplY3Qgd2l0aG91dCBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci5cCi1UaGUgb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbCwgYnV0IHRoZSBmaWxlIGRlc2NyaXB0b3JcCitDbG9zZSB0aGUgc29ja2V0IG9iamVjdCB3aXRob3V0IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLlxuXAorVGhlIG9iamVjdCBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwsIGJ1dCB0aGUgZmlsZSBkZXNjcmlwdG9yXG5cCiBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4gIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQuIik7CiAKIHN0YXRpYyBpbnQKQEAgLTI2MTMsOCArMjYyMSwxNSBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCAoaW50KWxlbiwgZmxhZ3MpOworI2Vsc2UKICAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzKTsKKyNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMjgyMCwxNCArMjgzNSwxMSBAQAogICAgIG1lbXNldCgmYWRkcmJ1ZiwgMCwgYWRkcmxlbik7CiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7CiAgICAgaWYgKCF0aW1lb3V0KSB7Ci0jaWZuZGVmIE1TX1dJTkRPV1MKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7Ci0jZWxzZQotICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIChpbnQpbGVuLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICZhZGRyYnVmLCAmYWRkcmxlbik7Ci0jZW5kaWYKICNlbHNlCiAgICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOwpAQCAtMzMwNSwxMiArMzMxNywxNyBAQAogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKKyAgICBpZiAoIXRpbWVvdXQpIHsKICNpZmRlZiBfX1ZNUwogICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzKTsKICNlbHNlCiAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CiAjZW5kaWYKKyAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAodGltZW91dCA9PSAxKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwpAQCAtMzM2MCw2ICszMzc3LDEwIEBACiAgICAgICAgIGlmICghdGltZW91dCkgewogI2lmZGVmIF9fVk1TCiAgICAgICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOworI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorICAgICAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgKGludClsZW4sIGZsYWdzKTsKICNlbHNlCiAgICAgICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwogI2VuZGlmCkBAIC0zNDU0LDggKzM0NzUsMTcgQEAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDEsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpCi0gICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzLCBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHNlbmR0byhzLT5zb2NrX2ZkLCBidWYsIChpbnQpbGVuLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyNlbHNlCisgICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksIGFkZHJsZW4pOworI2VuZGlmCisgICAgfQogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAodGltZW91dCA9PSAxKSB7CkBAIC0zOTQ4LDYgKzM5NzgsMTIgQEAKIAogLyogSW5pdGlhbGl6ZSBhIG5ldyBzb2NrZXQgb2JqZWN0LiAqLwogCisjaWZkZWYgU09DS19DTE9FWEVDCisvKiBzb2NrZXQoKSBhbmQgc29ja2V0cGFpcigpIGZhaWwgd2l0aCBFSU5WQUwgb24gTGludXgga2VybmVsIG9sZGVyCisgKiB0aGFuIDIuNi4yNyBpZiBTT0NLX0NMT0VYRUMgZmxhZyBpcyBzZXQgaW4gdGhlIHNvY2tldCB0eXBlLiAqLworc3RhdGljIGludCBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiAvKkFSR1NVU0VEKi8KIHN0YXRpYyBpbnQKIHNvY2tfaW5pdG9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQpAQCAtMzk1Nyw2ICszOTkzLDEzIEBACiAgICAgU09DS0VUX1QgZmQgPSBJTlZBTElEX1NPQ0tFVDsKICAgICBpbnQgZmFtaWx5ID0gQUZfSU5FVCwgdHlwZSA9IFNPQ0tfU1RSRUFNLCBwcm90byA9IDA7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7ImZhbWlseSIsICJ0eXBlIiwgInByb3RvIiwgImZpbGVubyIsIDB9OworI2lmbmRlZiBNU19XSU5ET1dTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9ICZzb2NrX2Nsb2V4ZWNfd29ya3M7CisjZWxzZQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCisjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInxpaWlPOnNvY2tldCIsIGtleXdvcmRzLApAQCAtNDAwMSwxNCArNDA0NCw3NCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgLyogV2luZG93cyBpbXBsZW1lbnRhdGlvbiAqLworI2lmbmRlZiBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVAorI2RlZmluZSBXU0FfRkxBR19OT19IQU5ETEVfSU5IRVJJVCAweDgwCisjZW5kaWYKKwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICBpZiAoc3VwcG9ydF93c2Ffbm9faW5oZXJpdCkgeworICAgICAgICAgICAgZmQgPSBXU0FTb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBXU0FfRkxBR19PVkVSTEFQUEVEIHwgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQpOworICAgICAgICAgICAgaWYgKGZkID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgICAgICAgICAgLyogV2luZG93cyA3IG9yIFdpbmRvd3MgMjAwOCBSMiB3aXRob3V0IFNQMSBvciB0aGUgaG90Zml4ICovCisgICAgICAgICAgICAgICAgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IDA7CisgICAgICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgewogICAgICAgICAgICAgc2V0X2Vycm9yKCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXN1cHBvcnRfd3NhX25vX2luaGVyaXQpIHsKKyAgICAgICAgICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSlmZCwgSEFORExFX0ZMQUdfSU5IRVJJVCwgMCkpIHsKKyAgICAgICAgICAgICAgICBjbG9zZXNvY2tldChmZCk7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICAvKiBVTklYICovCisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICAgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUgfCBTT0NLX0NMT0VYRUMsIHByb3RvKTsKKyAgICAgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmQgPj0gMCkgeworICAgICAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgfQorICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICAgICAgc2V0X2Vycm9yKCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkgeworICAgICAgICAgICAgU09DS0VUQ0xPU0UoZmQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisjZW5kaWYKICAgICB9CiAgICAgaW5pdF9zb2Nrb2JqZWN0KHMsIGZkLCBmYW1pbHksIHR5cGUsIHByb3RvKTsKIApAQCAtNDU3NCwxNiArNDY3NywzNiBAQAogewogICAgIFNPQ0tFVF9UIGZkLCBuZXdmZDsKICAgICBQeU9iamVjdCAqbmV3ZmRvYmo7Ci0KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgV1NBUFJPVE9DT0xfSU5GTyBpbmZvOworI2VuZGlmCiAKICAgICBmZCA9IFB5TG9uZ19Bc1NvY2tldF90KGZkb2JqKTsKICAgICBpZiAoZmQgPT0gKFNPQ0tFVF9UKSgtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBuZXdmZCA9IGR1cF9zb2NrZXQoZmQpOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGZkLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZpbmZvKSkKKyAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgbmV3ZmQgPSBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgRlJPTV9QUk9UT0NPTF9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKIAorICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSluZXdmZCwgSEFORExFX0ZMQUdfSU5IRVJJVCwgMCkpIHsKKyAgICAgICAgY2xvc2Vzb2NrZXQobmV3ZmQpOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2Vsc2UKKyAgICAvKiBPbiBVTklYLCBkdXAgY2FuIGJlIHVzZWQgdG8gZHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQgKi8KKyAgICBuZXdmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKKwogICAgIG5ld2Zkb2JqID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKG5ld2Zkb2JqID09IE5VTEwpCiAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKQEAgLTQ2MTEsNiArNDczNCwxMiBAQAogICAgIFNPQ0tFVF9UIHN2WzJdOwogICAgIGludCBmYW1pbHksIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGludCByZXQ7CiAKICNpZiBkZWZpbmVkKEFGX1VOSVgpCiAgICAgZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTQ2MjAsOSArNDc0OSwzOCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGlpaTpzb2NrZXRwYWlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwgJnR5cGUsICZwcm90bykpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgLyogQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgZmRzICovCi0gICAgaWYgKHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpIDwgMCkKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90bywgc3YpOworICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAwOworICAgICAgICAgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdik7CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0IDwgMCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc3ZbMF0sIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzdlsxXSwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgczAgPSBuZXdfc29ja29iamVjdChzdlswXSwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAgICAgaWYgKHMwID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKQEAgLTQ2NDQsNyArNDgwMiw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihzb2NrZXRwYWlyX2RvYywKLSJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAorInNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGUgWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAogXG5cCiBDcmVhdGUgYSBwYWlyIG9mIHNvY2tldCBvYmplY3RzIGZyb20gdGhlIHNvY2tldHMgcmV0dXJuZWQgYnkgdGhlIHBsYXRmb3JtXG5cCiBzb2NrZXRwYWlyKCkgZnVuY3Rpb24uXG5cCkBAIC00Nzc4LDkgKzQ5MzYsNiBAQAogc3RhdGljIFB5T2JqZWN0Kgogc29ja2V0X2luZXRfYXRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0jaWZuZGVmIElOQUREUl9OT05FCi0jZGVmaW5lIElOQUREUl9OT05FICgtMSkKLSNlbmRpZgogI2lmZGVmIEhBVkVfSU5FVF9BVE9OCiAgICAgc3RydWN0IGluX2FkZHIgYnVmOwogI2VuZGlmCkBAIC00ODIyLDcgKzQ5NzcsNyBAQAogICAgIC8qIHNwZWNpYWwtY2FzZSB0aGlzIGFkZHJlc3MgYXMgaW5ldF9hZGRyIG1pZ2h0IHJldHVybiBJTkFERFJfTk9ORQogICAgICAqIGZvciB0aGlzICovCiAgICAgaWYgKHN0cmNtcChpcF9hZGRyLCAiMjU1LjI1NS4yNTUuMjU1IikgPT0gMCkgewotICAgICAgICBwYWNrZWRfYWRkciA9IDB4RkZGRkZGRkY7CisgICAgICAgIHBhY2tlZF9hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKICAgICB9IGVsc2UgewogCiAgICAgICAgIHBhY2tlZF9hZGRyID0gaW5ldF9hZGRyKGlwX2FkZHIpOwpAQCAtNDg3MCw3ICs1MDI1LDcgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoaW5ldF9udG9hKHBhY2tlZF9hZGRyKSk7CiB9CiAKLSNpZmRlZiBIQVZFX0lORVRfUFRPTgorI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKIAogUHlEb2NfU1RSVkFSKGluZXRfcHRvbl9kb2MsCiAiaW5ldF9wdG9uKGFmLCBpcCkgLT4gcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nXG5cCkBAIC00ODc4LDYgKzUwMzMsMTAgQEAKIENvbnZlcnQgYW4gSVAgYWRkcmVzcyBmcm9tIHN0cmluZyBmb3JtYXQgdG8gYSBwYWNrZWQgc3RyaW5nIHN1aXRhYmxlXG5cCiBmb3IgdXNlIHdpdGggbG93LWxldmVsIG5ldHdvcmsgZnVuY3Rpb25zLiIpOwogCisjZW5kaWYKKworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfaW5ldF9wdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ4ODUsNyArNTA0NCw3IEBACiAgICAgY2hhciogaXA7CiAgICAgaW50IHJldHZhbDsKICNpZmRlZiBFTkFCTEVfSVBWNgotICAgIGNoYXIgcGFja2VkW01BWChzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSldOworICAgIGNoYXIgcGFja2VkW1B5X01BWChzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSldOwogI2Vsc2UKICAgICBjaGFyIHBhY2tlZFtzaXplb2Yoc3RydWN0IGluX2FkZHIpXTsKICNlbmRpZgpAQCAtNDkyMiwxMiArNTA4MSw1MiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK3N0YXRpYyBQeU9iamVjdCAqCitzb2NrZXRfaW5ldF9wdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgYWY7CisgICAgY2hhciogaXA7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgIElOVCByZXQsIHNpemU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzOmluZXRfcHRvbiIsICZhZiwgJmlwKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzaXplID0gc2l6ZW9mKGFkZHIpOworICAgIHJldCA9IFdTQVN0cmluZ1RvQWRkcmVzc0EoaXAsIGFmLCBOVUxMLCAoTFBTT0NLQUREUikmYWRkciwgJnNpemUpOworCisgICAgaWYgKHJldCkgeworICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSBpZihhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luKikmYWRkcjsKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikmKGFkZHI0LT5zaW5fYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyNC0+c2luX2FkZHIpKTsKKyAgICB9IGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopJihhZGRyLnNpbjZfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkci5zaW42X2FkZHIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwgInVua25vd24gYWRkcmVzcyBmYW1pbHkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKIAogUHlEb2NfU1RSVkFSKGluZXRfbnRvcF9kb2MsCiAiaW5ldF9udG9wKGFmLCBwYWNrZWRfaXApIC0+IHN0cmluZyBmb3JtYXR0ZWQgSVAgYWRkcmVzc1xuXAogXG5cCiBDb252ZXJ0IGEgcGFja2VkIElQIGFkZHJlc3Mgb2YgdGhlIGdpdmVuIGZhbWlseSB0byBzdHJpbmcgZm9ybWF0LiIpOwogCisjZW5kaWYKKworCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfaW5ldF9udG9wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ5MzYsNyArNTEzNSw3IEBACiAgICAgaW50IGxlbjsKICAgICBjb25zdCBjaGFyKiByZXR2YWw7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjaGFyIGlwW01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CisgICAgY2hhciBpcFtQeV9NQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOwogI2Vsc2UKICAgICBjaGFyIGlwW0lORVRfQUREUlNUUkxFTiArIDFdOwogI2VuZGlmCkBAIC00OTgxLDYgKzUxODAsNzAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorCitzdGF0aWMgUHlPYmplY3QgKgorc29ja2V0X2luZXRfbnRvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGFmOworICAgIGNoYXIqIHBhY2tlZDsKKyAgICBpbnQgbGVuOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICBEV09SRCBhZGRybGVuLCByZXQsIHJldGxlbjsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKKyNlbHNlCisgICAgY2hhciBpcFtJTkVUX0FERFJTVFJMRU4gKyAxXTsKKyNlbmRpZgorCisgICAgLyogR3VhcmFudGVlIE5VTC10ZXJtaW5hdGlvbiBmb3IgUHlVbmljb2RlX0Zyb21TdHJpbmcoKSBiZWxvdyAqLworICAgIG1lbXNldCgodm9pZCAqKSAmaXBbMF0sICdcMCcsIHNpemVvZihpcCkpOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpeSM6aW5ldF9udG9wIiwgJmFmLCAmcGFja2VkLCAmbGVuKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBhZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkcjsKKworICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbXNldChhZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgICBhZGRyNC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG1lbWNweSgmKGFkZHI0LT5zaW5fYWRkciksIHBhY2tlZCwgc2l6ZW9mKGFkZHI0LT5zaW5fYWRkcikpOworICAgICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgfSBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikgeworICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBsZW5ndGggb2YgcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBtZW1jcHkoJihhZGRyLnNpbjZfYWRkciksIHBhY2tlZCwgc2l6ZW9mKGFkZHIuc2luNl9hZGRyKSk7CisgICAgICAgIGFkZHJsZW4gPSBzaXplb2YoYWRkcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0bGVuID0gc2l6ZW9mKGlwKTsKKyAgICByZXQgPSBXU0FBZGRyZXNzVG9TdHJpbmdBKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBhZGRybGVuLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAsICZyZXRsZW4pOworCisgICAgaWYgKHJldCkgeworICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhpcCk7CisgICAgfQorfQorCiAjZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KIAogLyogUHl0aG9uIGludGVyZmFjZSB0byBnZXRhZGRyaW5mbyhob3N0LCBwb3J0KS4gKi8KQEAgLTUwMDIsNyArNTI2NSw3IEBACiAgICAgUHlPYmplY3QgKmFsbCA9IChQeU9iamVjdCAqKU5VTEw7CiAgICAgUHlPYmplY3QgKmlkbmEgPSBOVUxMOwogCi0gICAgZmFtaWx5ID0gc29ja3R5cGUgPSBwcm90b2NvbCA9IGZsYWdzID0gMDsKKyAgICBzb2NrdHlwZSA9IHByb3RvY29sID0gZmxhZ3MgPSAwOwogICAgIGZhbWlseSA9IEFGX1VOU1BFQzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xpaWlpOmdldGFkZHJpbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga3duYW1lcywgJmhvYmosICZwb2JqLCAmZmFtaWx5LCAmc29ja3R5cGUsCkBAIC01NDQ3LDcgKzU3MTAsNyBAQAogICAgICBNRVRIX1ZBUkFSR1MsIGluZXRfYXRvbl9kb2N9LAogICAgIHsiaW5ldF9udG9hIiwgICAgICAgICAgICAgICBzb2NrZXRfaW5ldF9udG9hLAogICAgICBNRVRIX1ZBUkFSR1MsIGluZXRfbnRvYV9kb2N9LAotI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisjaWYgZGVmaW5lZChIQVZFX0lORVRfUFRPTikgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIHsiaW5ldF9wdG9uIiwgICAgICAgICAgICAgICBzb2NrZXRfaW5ldF9wdG9uLAogICAgICBNRVRIX1ZBUkFSR1MsIGluZXRfcHRvbl9kb2N9LAogICAgIHsiaW5ldF9udG9wIiwgICAgICAgICAgICAgICBzb2NrZXRfaW5ldF9udG9wLApAQCAtNTUyMiwzMiArNTc4NSw2IEBACiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAKLSNpZmRlZiBQWU9TX09TMgotI2RlZmluZSBPU19JTklUX0RFRklORUQKLQotLyogQWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBmb3IgT1MvMiAqLwotCi1zdGF0aWMgaW50Ci1vc19pbml0KHZvaWQpCi17Ci0jaWZuZGVmIFBZQ0NfR0NDCi0gICAgaW50IHJjID0gc29ja19pbml0KCk7Ci0KLSAgICBpZiAocmMgPT0gMCkgewotICAgICAgICByZXR1cm4gMTsgLyogU3VjY2VzcyAqLwotICAgIH0KLQotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgIk9TLzIgVENQL0lQIEVycm9yIyAlZCIsIHNvY2tfZXJybm8oKSk7Ci0KLSAgICByZXR1cm4gMDsgIC8qIEZhaWx1cmUgKi8KLSNlbHNlCi0gICAgLyogTm8gbmVlZCB0byBpbml0aWFsaXplIHNvY2tldHMgd2l0aCBHQ0MvRU1YICovCi0gICAgcmV0dXJuIDE7IC8qIFN1Y2Nlc3MgKi8KLSNlbmRpZgotfQotCi0jZW5kaWYgLyogUFlPU19PUzIgKi8KLQogCiAjaWZuZGVmIE9TX0lOSVRfREVGSU5FRAogc3RhdGljIGludApAQCAtNTYwNCw2ICs1ODQxLDE2IEBACiAgICAgaWYgKCFvc19pbml0KCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChzdXBwb3J0X3dzYV9ub19pbmhlcml0ID09IC0xKSB7CisgICAgICAgIERXT1JEIHZlcnNpb24gPSBHZXRWZXJzaW9uKCk7CisgICAgICAgIERXT1JEIG1ham9yID0gKERXT1JEKUxPQllURShMT1dPUkQodmVyc2lvbikpOworICAgICAgICBEV09SRCBtaW5vciA9IChEV09SRClISUJZVEUoTE9XT1JEKHZlcnNpb24pKTsKKyAgICAgICAgLyogbmVlZCBXaW5kb3dzIDcgU1AxLCAyMDA4IFIyIFNQMSBvciBsYXRlciAqLworICAgICAgICBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gKG1ham9yID49IDYgJiYgbWlub3IgPj0gMSk7CisgICAgfQorI2VuZGlmCisKICAgICBQeV9UWVBFKCZzb2NrX3R5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnNvY2tldG1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKQEAgLTU2NTcsMTg0ICs1OTA0LDE4NyBAQAogCiAgICAgLyogQWRkcmVzcyBmYW1pbGllcyAod2Ugb25seSBzdXBwb3J0IEFGX0lORVQgYW5kIEFGX1VOSVgpICovCiAjaWZkZWYgQUZfVU5TUEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1VOU1BFQyIsIEFGX1VOU1BFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfVU5TUEVDKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUIiwgQUZfSU5FVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVCk7CiAjaWZkZWYgQUZfSU5FVDYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVDYiLCBBRl9JTkVUNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVDYpOwogI2VuZGlmIC8qIEFGX0lORVQ2ICovCiAjaWYgZGVmaW5lZChBRl9VTklYKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9VTklYIiwgQUZfVU5JWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfVU5JWCk7CiAjZW5kaWYgLyogQUZfVU5JWCAqLwogI2lmZGVmIEFGX0FYMjUKICAgICAvKiBBbWF0ZXVyIFJhZGlvIEFYLjI1ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FYMjUiLCBBRl9BWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BWDI1KTsKICNlbmRpZgogI2lmZGVmIEFGX0lQWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JUFgiLCBBRl9JUFgpOyAvKiBOb3ZlbGwgSVBYICovCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSVBYKTsgLyogTm92ZWxsIElQWCAqLwogI2VuZGlmCiAjaWZkZWYgQUZfQVBQTEVUQUxLCiAgICAgLyogQXBwbGV0YWxrIEREUCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BUFBMRVRBTEsiLCBBRl9BUFBMRVRBTEspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FQUExFVEFMSyk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRST00KICAgICAvKiBBbWF0ZXVyIHJhZGlvIE5ldFJPTSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRST00iLCBBRl9ORVRST00pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVFJPTSk7CiAjZW5kaWYKICNpZmRlZiBBRl9CUklER0UKICAgICAvKiBNdWx0aXByb3RvY29sIGJyaWRnZSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9CUklER0UiLCBBRl9CUklER0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0JSSURHRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9BVE1QVkMKICAgICAvKiBBVE0gUFZDcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BVE1QVkMiLCBBRl9BVE1QVkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FUTVBWQyk7CiAjZW5kaWYKICNpZmRlZiBBRl9BQUw1CiAgICAgLyogUmVzZXJ2ZWQgZm9yIFdlcm5lcidzIEFUTSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BQUw1IiwgQUZfQUFMNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQUFMNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9YMjUKICAgICAvKiBSZXNlcnZlZCBmb3IgWC4yNSBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1gyNSIsIEFGX1gyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfWDI1KTsKICNlbmRpZgogI2lmZGVmIEFGX0lORVQ2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQ2IiwgQUZfSU5FVDYpOyAvKiBJUCB2ZXJzaW9uIDYgKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUNik7IC8qIElQIHZlcnNpb24gNiAqLwogI2VuZGlmCiAjaWZkZWYgQUZfUk9TRQogICAgIC8qIEFtYXRldXIgUmFkaW8gWC4yNSBQTFAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUk9TRSIsIEFGX1JPU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1JPU0UpOwogI2VuZGlmCiAjaWZkZWYgQUZfREVDbmV0CiAgICAgLyogUmVzZXJ2ZWQgZm9yIERFQ25ldCBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0RFQ25ldCIsIEFGX0RFQ25ldCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfREVDbmV0KTsKICNlbmRpZgogI2lmZGVmIEFGX05FVEJFVUkKICAgICAvKiBSZXNlcnZlZCBmb3IgODAyLjJMTEMgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRCRVVJIiwgQUZfTkVUQkVVSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUQkVVSSk7CiAjZW5kaWYKICNpZmRlZiBBRl9TRUNVUklUWQogICAgIC8qIFNlY3VyaXR5IGNhbGxiYWNrIHBzZXVkbyBBRiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TRUNVUklUWSIsIEFGX1NFQ1VSSVRZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TRUNVUklUWSk7CiAjZW5kaWYKICNpZmRlZiBBRl9LRVkKICAgICAvKiBQRl9LRVkga2V5IG1hbmFnZW1lbnQgQVBJICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0tFWSIsIEFGX0tFWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfS0VZKTsKICNlbmRpZgogI2lmZGVmIEFGX05FVExJTksKICAgICAvKiAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUTElOSyIsIEFGX05FVExJTkspOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1JPVVRFIiwgTkVUTElOS19ST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUTElOSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ST1VURSk7CiAjaWZkZWYgTkVUTElOS19TS0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfU0tJUCIsIE5FVExJTktfU0tJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19TS0lQKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfVzEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19XMSIsIE5FVExJTktfVzEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVzEpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVVNFUlNPQ0siLCBORVRMSU5LX1VTRVJTT0NLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19GSVJFV0FMTCIsIE5FVExJTktfRklSRVdBTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVVNFUlNPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfRklSRVdBTEwpOwogI2lmZGVmIE5FVExJTktfVENQRElBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1RDUERJQUciLCBORVRMSU5LX1RDUERJQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVENQRElBRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX05GTE9HCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfTkZMT0ciLCBORVRMSU5LX05GTE9HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX05GTE9HKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfWEZSTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1hGUk0iLCBORVRMSU5LX1hGUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfWEZSTSk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX0FSUEQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19BUlBEIiwgTkVUTElOS19BUlBEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0FSUEQpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19ST1VURTYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ST1VURTYiLCBORVRMSU5LX1JPVVRFNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ST1VURTYpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfSVA2X0ZXIiwgTkVUTElOS19JUDZfRlcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfSVA2X0ZXKTsKICNpZmRlZiBORVRMSU5LX0ROUlRNU0cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ETlJUTVNHIiwgTkVUTElOS19ETlJUTVNHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0ROUlRNU0cpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19UQVBCQVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVEFQQkFTRSIsIE5FVExJTktfVEFQQkFTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19UQVBCQVNFKTsKICNlbmRpZgogI2VuZGlmIC8qIEFGX05FVExJTksgKi8KICNpZmRlZiBBRl9ST1VURQogICAgIC8qIEFsaWFzIHRvIGVtdWxhdGUgNC40QlNEICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JPVVRFIiwgQUZfUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1JPVVRFKTsKKyNlbmRpZgorI2lmZGVmIEFGX0xJTksKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9MSU5LKTsKICNlbmRpZgogI2lmZGVmIEFGX0FTSAogICAgIC8qIEFzaCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BU0giLCBBRl9BU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FTSCk7CiAjZW5kaWYKICNpZmRlZiBBRl9FQ09ORVQKICAgICAvKiBBY29ybiBFY29uZXQgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfRUNPTkVUIiwgQUZfRUNPTkVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9FQ09ORVQpOwogI2VuZGlmCiAjaWZkZWYgQUZfQVRNU1ZDCiAgICAgLyogQVRNIFNWQ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVRNU1ZDIiwgQUZfQVRNU1ZDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BVE1TVkMpOwogI2VuZGlmCiAjaWZkZWYgQUZfU05BCiAgICAgLyogTGludXggU05BIFByb2plY3QgKG51dHRlcnMhKSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TTkEiLCBBRl9TTkEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NOQSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JUkRBCiAgICAgLyogSVJEQSBzb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lSREEiLCBBRl9JUkRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JUkRBKTsKICNlbmRpZgogI2lmZGVmIEFGX1BQUE9YCiAgICAgLyogUFBQb1ggc29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9QUFBPWCIsIEFGX1BQUE9YKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9QUFBPWCk7CiAjZW5kaWYKICNpZmRlZiBBRl9XQU5QSVBFCiAgICAgLyogV2FucGlwZSBBUEkgU29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9XQU5QSVBFIiwgQUZfV0FOUElQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfV0FOUElQRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9MTEMKICAgICAvKiBMaW51eCBMTEMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTExDIiwgQUZfTExDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9MTEMpOwogI2VuZGlmCiAKICNpZmRlZiBVU0VfQkxVRVRPT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0JMVUVUT09USCIsIEFGX0JMVUVUT09USCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fTDJDQVAiLCBCVFBST1RPX0wyQ0FQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19IQ0kiLCBCVFBST1RPX0hDSSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9IQ0kiLCBTT0xfSENJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9CTFVFVE9PVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fTDJDQVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fSENJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSENJKTsKICNpZiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfRklMVEVSIiwgSENJX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX0ZJTFRFUik7CiAjZW5kaWYKICNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKICNpZiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfVElNRV9TVEFNUCIsIEhDSV9USU1FX1NUQU1QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfVElNRV9TVEFNUCk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0RBVEFfRElSIiwgSENJX0RBVEFfRElSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19TQ08iLCBCVFBST1RPX1NDTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX0RBVEFfRElSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX1NDTyk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19SRkNPTU0iLCBCVFBST1RPX1JGQ09NTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19SRkNPTU0pOwogICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJCREFERFJfQU5ZIiwgIjAwOjAwOjAwOjAwOjAwOjAwIik7CiAgICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIkJEQUREUl9MT0NBTCIsICIwMDowMDowMDpGRjpGRjpGRiIpOwogI2VuZGlmCiAKICNpZmRlZiBBRl9DQU4KICAgICAvKiBDb250cm9sbGVyIEFyZWEgTmV0d29yayAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9DQU4iLCBBRl9DQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0NBTik7CiAjZW5kaWYKICNpZmRlZiBQRl9DQU4KICAgICAvKiBDb250cm9sbGVyIEFyZWEgTmV0d29yayAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9DQU4iLCBQRl9DQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX0NBTik7CiAjZW5kaWYKIAogLyogUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAqLwogI2lmZGVmIEFGX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9SRFMiLCBBRl9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1JEUyk7CiAjZW5kaWYKICNpZmRlZiBQRl9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfUkRTIiwgUEZfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9SRFMpOwogI2VuZGlmCiAKIC8qIEtlcm5lbCBldmVudCBtZXNzYWdlcyAqLwogI2lmZGVmIFBGX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9TWVNURU0iLCBQRl9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX1NZU1RFTSk7CiAjZW5kaWYKICNpZmRlZiBBRl9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU1lTVEVNIiwgQUZfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TWVNURU0pOwogI2VuZGlmCiAKICNpZmRlZiBBRl9QQUNLRVQKQEAgLTU4NjYsNDQ3ICs2MTE2LDQ2MyBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xJTlVYX1RJUENfSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9USVBDIiwgQUZfVElQQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfVElQQyk7CiAKICAgICAvKiBmb3IgYWRkcmVzc2VzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9OQU1FU0VRIiwgVElQQ19BRERSX05BTUVTRVEpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfTkFNRSIsIFRJUENfQUREUl9OQU1FKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX0lEIiwgVElQQ19BRERSX0lEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfTkFNRVNFUSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX05BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9JRCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19aT05FX1NDT1BFIiwgVElQQ19aT05FX1NDT1BFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DTFVTVEVSX1NDT1BFIiwgVElQQ19DTFVTVEVSX1NDT1BFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19OT0RFX1NDT1BFIiwgVElQQ19OT0RFX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1pPTkVfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ0xVU1RFUl9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19OT0RFX1NDT1BFKTsKIAogICAgIC8qIGZvciBzZXRzb2Nrb3B0KCkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RJUEMiLCBTT0xfVElQQyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfSU1QT1JUQU5DRSIsIFRJUENfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1JDX0RST1BQQUJMRSIsIFRJUENfU1JDX0RST1BQQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfREVTVF9EUk9QUEFCTEUiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0RFU1RfRFJPUFBBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DT05OX1RJTUVPVVQiLCBUSVBDX0NPTk5fVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1RJUEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TUkNfRFJPUFBBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0RFU1RfRFJPUFBBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NPTk5fVElNRU9VVCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19MT1dfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfTE9XX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX01FRElVTV9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19NRURJVU1fSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfSElHSF9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19ISUdIX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTE9XX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfSElHSF9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpOwogCiAgICAgLyogZm9yIHN1YnNjcmlwdGlvbnMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfUE9SVFMiLCBUSVBDX1NVQl9QT1JUUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX1NFUlZJQ0UiLCBUSVBDX1NVQl9TRVJWSUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9QT1JUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfU0VSVklDRSk7CiAjaWZkZWYgVElQQ19TVUJfQ0FOQ0VMCiAgICAgLyogZG9lc24ndCBzZWVtIHRvIGJlIGF2YWlsYWJsZSBldmVyeXdoZXJlICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX0NBTkNFTCIsIFRJUENfU1VCX0NBTkNFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfQ0FOQ0VMKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1dBSVRfRk9SRVZFUiIsIFRJUENfV0FJVF9GT1JFVkVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19QVUJMSVNIRUQiLCBUSVBDX1BVQkxJU0hFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfV0lUSERSQVdOIiwgVElQQ19XSVRIRFJBV04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQlNDUl9USU1FT1VUIiwgVElQQ19TVUJTQ1JfVElNRU9VVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ0ZHX1NSViIsIFRJUENfQ0ZHX1NSVik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfVE9QX1NSViIsIFRJUENfVE9QX1NSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19XQUlUX0ZPUkVWRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfUFVCTElTSEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1dJVEhEUkFXTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJTQ1JfVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DRkdfU1JWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1RPUF9TUlYpOwogI2VuZGlmCiAKICAgICAvKiBTb2NrZXQgdHlwZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19TVFJFQU0iLCBTT0NLX1NUUkVBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfREdSQU0iLCBTT0NLX0RHUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1NUUkVBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19ER1JBTSk7CiAvKiBXZSBoYXZlIGluY29tcGxldGUgc29ja2V0IHN1cHBvcnQuICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfUkFXIiwgU09DS19SQVcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1NFUVBBQ0tFVCIsIFNPQ0tfU0VRUEFDS0VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19TRVFQQUNLRVQpOwogI2lmIGRlZmluZWQoU09DS19SRE0pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfUkRNIiwgU09DS19SRE0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfUkRNKTsKICNlbmRpZgogI2lmZGVmIFNPQ0tfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX0NMT0VYRUMiLCBTT0NLX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfQ0xPRVhFQyk7CiAjZW5kaWYKICNpZmRlZiBTT0NLX05PTkJMT0NLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfTk9OQkxPQ0siLCBTT0NLX05PTkJMT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX05PTkJMT0NLKTsKICNlbmRpZgogCiAjaWZkZWYgIFNPX0RFQlVHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0RFQlVHIiwgU09fREVCVUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0RFQlVHKTsKICNlbmRpZgogI2lmZGVmICBTT19BQ0NFUFRDT05OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0FDQ0VQVENPTk4iLCBTT19BQ0NFUFRDT05OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19BQ0NFUFRDT05OKTsKICNlbmRpZgogI2lmZGVmICBTT19SRVVTRUFERFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkVVU0VBRERSIiwgU09fUkVVU0VBRERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SRVVTRUFERFIpOwogI2VuZGlmCiAjaWZkZWYgU09fRVhDTFVTSVZFQUREUlVTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19FWENMVVNJVkVBRERSVVNFIiwgU09fRVhDTFVTSVZFQUREUlVTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRVhDTFVTSVZFQUREUlVTRSk7CiAjZW5kaWYKIAogI2lmZGVmICBTT19LRUVQQUxJVkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fS0VFUEFMSVZFIiwgU09fS0VFUEFMSVZFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19LRUVQQUxJVkUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0RPTlRST1VURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19ET05UUk9VVEUiLCBTT19ET05UUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0RPTlRST1VURSk7CiAjZW5kaWYKICNpZmRlZiAgU09fQlJPQURDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0JST0FEQ0FTVCIsIFNPX0JST0FEQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQlJPQURDQVNUKTsKICNlbmRpZgogI2lmZGVmICBTT19VU0VMT09QQkFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19VU0VMT09QQkFDSyIsIFNPX1VTRUxPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19VU0VMT09QQkFDSyk7CiAjZW5kaWYKICNpZmRlZiAgU09fTElOR0VSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0xJTkdFUiIsIFNPX0xJTkdFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fTElOR0VSKTsKICNlbmRpZgogI2lmZGVmICBTT19PT0JJTkxJTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fT09CSU5MSU5FIiwgU09fT09CSU5MSU5FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19PT0JJTkxJTkUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JFVVNFUE9SVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SRVVTRVBPUlQiLCBTT19SRVVTRVBPUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JFVVNFUE9SVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fU05EQlVGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NOREJVRiIsIFNPX1NOREJVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05EQlVGKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZCVUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWQlVGIiwgU09fUkNWQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZCVUYpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NORExPV0FUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NORExPV0FUIiwgU09fU05ETE9XQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NORExPV0FUKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZMT1dBVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZMT1dBVCIsIFNPX1JDVkxPV0FUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZMT1dBVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fU05EVElNRU8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05EVElNRU8iLCBTT19TTkRUSU1FTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05EVElNRU8pOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVlRJTUVPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVlRJTUVPIiwgU09fUkNWVElNRU8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVlRJTUVPKTsKICNlbmRpZgogI2lmZGVmICBTT19FUlJPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19FUlJPUiIsIFNPX0VSUk9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19FUlJPUik7CiAjZW5kaWYKICNpZmRlZiAgU09fVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19UWVBFIiwgU09fVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fVFlQRSk7CiAjZW5kaWYKICNpZmRlZiAgU09fU0VURklCCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NFVEZJQiIsIFNPX1NFVEZJQik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU0VURklCKTsKICNlbmRpZgogI2lmZGVmICBTT19QQVNTQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19QQVNTQ1JFRCIsIFNPX1BBU1NDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QQVNTQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgU09fUEVFUkNSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUEVFUkNSRUQiLCBTT19QRUVSQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUEVFUkNSRUQpOwogI2VuZGlmCiAjaWZkZWYgIExPQ0FMX1BFRVJDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPQ0FMX1BFRVJDUkVEIiwgTE9DQUxfUEVFUkNSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0FMX1BFRVJDUkVEKTsKICNlbmRpZgogI2lmZGVmICBTT19CSU5EVE9ERVZJQ0UKICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19CSU5EVE9ERVZJQ0UpOwogI2VuZGlmCisjaWZkZWYgIFNPX1BSSU9SSVRZCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUFJJT1JJVFkpOworI2VuZGlmCiAKICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgImxpc3RlbiIgKi8KICNpZmRlZiAgU09NQVhDT05OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTUFYQ09OTiIsIFNPTUFYQ09OTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09NQVhDT05OKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTUFYQ09OTiIsIDUpOyAvKiBDb21tb24gdmFsdWUgKi8KICNlbmRpZgogCiAgICAgLyogQW5jaWxsaWFyeSBtZXNzYWdlIHR5cGVzICovCiAjaWZkZWYgIFNDTV9SSUdIVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX1JJR0hUUyIsIFNDTV9SSUdIVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9SSUdIVFMpOwogI2VuZGlmCiAjaWZkZWYgIFNDTV9DUkVERU5USUFMUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fQ1JFREVOVElBTFMiLCBTQ01fQ1JFREVOVElBTFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9DUkVERU5USUFMUyk7CiAjZW5kaWYKICNpZmRlZiAgU0NNX0NSRURTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9DUkVEUyIsIFNDTV9DUkVEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX0NSRURTKTsKICNlbmRpZgogCiAgICAgLyogRmxhZ3MgZm9yIHNlbmQsIHJlY3YgKi8KICNpZmRlZiAgTVNHX09PQgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfT09CIiwgTVNHX09PQik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX09PQik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1BFRUsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1BFRUsiLCBNU0dfUEVFSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1BFRUspOwogI2VuZGlmCiAjaWZkZWYgIE1TR19ET05UUk9VVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0RPTlRST1VURSIsIE1TR19ET05UUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19ET05UUk9VVEUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19ET05UV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRE9OVFdBSVQiLCBNU0dfRE9OVFdBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19ET05UV0FJVCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRU9SIiwgTVNHX0VPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VPUik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1RSVU5DCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19UUlVOQyIsIE1TR19UUlVOQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1RSVU5DKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ1RSVU5DCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DVFJVTkMiLCBNU0dfQ1RSVU5DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ1RSVU5DKTsKICNlbmRpZgogI2lmZGVmICBNU0dfV0FJVEFMTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfV0FJVEFMTCIsIE1TR19XQUlUQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfV0FJVEFMTCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0JUQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0JUQUciLCBNU0dfQlRBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0JUQUcpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FVEFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FVEFHIiwgTVNHX0VUQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FVEFHKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTk9TSUdOQUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX05PU0lHTkFMIiwgTVNHX05PU0lHTkFMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTk9TSUdOQUwpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19OT1RJRklDQVRJT04KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX05PVElGSUNBVElPTiIsIE1TR19OT1RJRklDQVRJT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19OT1RJRklDQVRJT04pOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DTVNHX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NNU0dfQ0xPRVhFQyIsIE1TR19DTVNHX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DTVNHX0NMT0VYRUMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FUlJRVUVVRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRVJSUVVFVUUiLCBNU0dfRVJSUVVFVUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FUlJRVUVVRSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NPTkZJUk0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NPTkZJUk0iLCBNU0dfQ09ORklSTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NPTkZJUk0pOwogI2VuZGlmCiAjaWZkZWYgIE1TR19NT1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19NT1JFIiwgTVNHX01PUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19NT1JFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRU9GCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FT0YiLCBNU0dfRU9GKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRU9GKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQkNBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0JDQVNUIiwgTVNHX0JDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQkNBU1QpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19NQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTUNBU1QiLCBNU0dfTUNBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19NQ0FTVCk7CisjZW5kaWYKKyNpZmRlZiBNU0dfRkFTVE9QRU4KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRkFTVE9QRU4pOwogI2VuZGlmCiAKICAgICAvKiBQcm90b2NvbCBsZXZlbCBhbmQgbnVtYmVycywgdXNhYmxlIGZvciBbZ3NdZXRzb2Nrb3B0ICovCiAjaWZkZWYgIFNPTF9TT0NLRVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1NPQ0tFVCIsIFNPTF9TT0NLRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9TT0NLRVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9JUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVAiLCBTT0xfSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9JUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVAiLCAwKTsKICNlbmRpZgogI2lmZGVmICBTT0xfSVBYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUFgiLCBTT0xfSVBYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSVBYKTsKICNlbmRpZgogI2lmZGVmICBTT0xfQVgyNQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQVgyNSIsIFNPTF9BWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQVgyNSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0FUQUxLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9BVEFMSyIsIFNPTF9BVEFMSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0FUQUxLKTsKICNlbmRpZgogI2lmZGVmICBTT0xfTkVUUk9NCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9ORVRST00iLCBTT0xfTkVUUk9NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfTkVUUk9NKTsKICNlbmRpZgogI2lmZGVmICBTT0xfUk9TRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfUk9TRSIsIFNPTF9ST1NFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfUk9TRSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX1RDUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVENQIiwgU09MX1RDUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1RDUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVENQIiwgNik7CiAjZW5kaWYKICNpZmRlZiAgU09MX1VEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVURQIiwgU09MX1VEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1VEUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVURQIiwgMTcpOwogI2VuZGlmCiAjaWZkZWYgU09MX0NBTl9CQVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9DQU5fQkFTRSIsIFNPTF9DQU5fQkFTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0NBTl9CQVNFKTsKICNlbmRpZgogI2lmZGVmIFNPTF9DQU5fUkFXCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9DQU5fUkFXIiwgU09MX0NBTl9SQVcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXIiwgQ0FOX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0NBTl9SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVcpOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9MSU5VWF9DQU5fSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRUZGX0ZMQUciLCBDQU5fRUZGX0ZMQUcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUlRSX0ZMQUciLCBDQU5fUlRSX0ZMQUcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRVJSX0ZMQUciLCBDQU5fRVJSX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FRkZfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JUUl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRVJSX0ZMQUcpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9TRkZfTUFTSyIsIENBTl9TRkZfTUFTSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FRkZfTUFTSyIsIENBTl9FRkZfTUFTSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FUlJfTUFTSyIsIENBTl9FUlJfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1NGRl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRUZGX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FUlJfTUFTSyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xJTlVYX0NBTl9SQVdfSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0ZJTFRFUiIsIENBTl9SQVdfRklMVEVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19FUlJfRklMVEVSIiwgQ0FOX1JBV19FUlJfRklMVEVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19MT09QQkFDSyIsIENBTl9SQVdfTE9PUEJBQ0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX1JFQ1ZfT1dOX01TR1MiLCBDQU5fUkFXX1JFQ1ZfT1dOX01TR1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0VSUl9GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfUkVDVl9PV05fTVNHUyk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9CQ00pOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NFVFVQIiwgVFhfU0VUVVApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX0RFTEVURSIsIFRYX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfUkVBRCIsIFRYX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NFTkQiLCBUWF9TRU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9TRVRVUCIsIFJYX1NFVFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9ERUxFVEUiLCBSWF9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1JFQUQiLCBSWF9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TVEFUVVMiLCBUWF9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX0VYUElSRUQiLCBUWF9FWFBJUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9TVEFUVVMiLCBSWF9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1RJTUVPVVQiLCBSWF9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9DSEFOR0VEIiwgUlhfQ0hBTkdFRCk7CiAjZW5kaWYKICNpZmRlZiBTT0xfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9SRFMiLCBTT0xfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfUkRTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DQU5DRUxfU0VOVF9UTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ0FOQ0VMX1NFTlRfVE8iLCBSRFNfQ0FOQ0VMX1NFTlRfVE8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DQU5DRUxfU0VOVF9UTyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfR0VUX01SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19HRVRfTVIiLCBSRFNfR0VUX01SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfR0VUX01SKTsKICNlbmRpZgogI2lmZGVmIFJEU19GUkVFX01SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19GUkVFX01SIiwgUkRTX0ZSRUVfTVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19GUkVFX01SKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRUNWRVJSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRUNWRVJSIiwgUkRTX1JFQ1ZFUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRUNWRVJSKTsKICNlbmRpZgogI2lmZGVmIFJEU19DT05HX01PTklUT1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NPTkdfTU9OSVRPUiIsIFJEU19DT05HX01PTklUT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DT05HX01PTklUT1IpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0dFVF9NUl9GT1JfREVTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfR0VUX01SX0ZPUl9ERVNUIiwgUkRTX0dFVF9NUl9GT1JfREVTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0dFVF9NUl9GT1JfREVTVCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQIiwgSVBQUk9UT19JUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQIiwgMCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19IT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSE9QT1BUUyIsIElQUFJPVE9fSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19IT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lDTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QIiwgSVBQUk9UT19JQ01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lDTVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QIiwgMSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JR01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUdNUCIsIElQUFJPVE9fSUdNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JR01QKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0dHUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0dHUCIsIElQUFJPVE9fR0dQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0dHUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY0Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNCIsIElQUFJPVE9fSVBWNCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY0KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY2IiwgSVBQUk9UT19JUFY2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQSVAiLCBJUFBST1RPX0lQSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19UQ1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UQ1AiLCBJUFBST1RPX1RDUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19UQ1ApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UQ1AiLCA2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VHUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VHUCIsIElQUFJPVE9fRUdQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VHUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19QVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19QVVAiLCBJUFBST1RPX1BVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19QVVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVURQIiwgSVBQUk9UT19VRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVURQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVURQIiwgMTcpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSURQIiwgSVBQUk9UT19JRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSURQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0hFTExPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSEVMTE8iLCBJUFBST1RPX0hFTExPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0hFTExPKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX05ECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTkQiLCBJUFBST1RPX05EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX05EKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1RQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVFAiLCBJUFBST1RPX1RQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1RQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY2IiwgSVBQUk9UT19JUFY2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUk9VVElORwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JPVVRJTkciLCBJUFBST1RPX1JPVVRJTkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUk9VVElORyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19GUkFHTUVOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0ZSQUdNRU5UIiwgSVBQUk9UT19GUkFHTUVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19GUkFHTUVOVCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19SU1ZQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUlNWUCIsIElQUFJPVE9fUlNWUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19SU1ZQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0dSRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0dSRSIsIElQUFJPVE9fR1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0dSRSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FU1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FU1AiLCBJUFBST1RPX0VTUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FU1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fQUgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19BSCIsIElQUFJPVE9fQUgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fQUgpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTU9CSUxFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTU9CSUxFIiwgSVBQUk9UT19NT0JJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTU9CSUxFKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lDTVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVBWNiIsIElQUFJPVE9fSUNNUFY2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lDTVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19OT05FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTk9ORSIsIElQUFJPVE9fTk9ORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19OT05FKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0RTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19EU1RPUFRTIiwgSVBQUk9UT19EU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0RTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fWFRQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fWFRQIiwgSVBQUk9UT19YVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fWFRQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VPTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VPTiIsIElQUFJPVE9fRU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VPTik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19QSU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19QSU0iLCBJUFBST1RPX1BJTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19QSU0pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBDT01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBDT01QIiwgSVBQUk9UT19JUENPTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBDT01QKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1ZSUlAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19WUlJQIiwgSVBQUk9UT19WUlJQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1ZSUlApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fU0NUUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1NDVFAiLCBJUFBST1RPX1NDVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fU0NUUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19CSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19CSVAiLCBJUFBST1RPX0JJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19CSVApOwogI2VuZGlmCiAvKiovCiAjaWZkZWYgIElQUFJPVE9fUkFXCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUkFXIiwgSVBQUk9UT19SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUkFXKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUkFXIiwgMjU1KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX01BWCIsIElQUFJPVE9fTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX01BWCk7CiAjZW5kaWYKIAogI2lmZGVmICBTWVNQUk9UT19DT05UUk9MCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNZU1BST1RPX0NPTlRST0wiLCBTWVNQUk9UT19DT05UUk9MKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTWVNQUk9UT19DT05UUk9MKTsKICNlbmRpZgogCiAgICAgLyogU29tZSBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KICNpZmRlZiAgSVBQT1JUX1JFU0VSVkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9SRVNFUlZFRCIsIElQUE9SVF9SRVNFUlZFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQT1JUX1JFU0VSVkVEKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9SRVNFUlZFRCIsIDEwMjQpOwogI2VuZGlmCiAjaWZkZWYgIElQUE9SVF9VU0VSUkVTRVJWRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1VTRVJSRVNFUlZFRCIsIElQUE9SVF9VU0VSUkVTRVJWRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUE9SVF9VU0VSUkVTRVJWRUQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1VTRVJSRVNFUlZFRCIsIDUwMDApOwogI2VuZGlmCiAKICAgICAvKiBTb21lIHJlc2VydmVkIElQIHYuNCBhZGRyZXNzZXMgKi8KICNpZmRlZiAgSU5BRERSX0FOWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQU5ZIiwgSU5BRERSX0FOWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX0FOWSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQU5ZIiwgMHgwMDAwMDAwMCk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX0JST0FEQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQlJPQURDQVNUIiwgSU5BRERSX0JST0FEQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX0JST0FEQ0FTVCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQlJPQURDQVNUIiwgMHhmZmZmZmZmZik7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX0xPT1BCQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9MT09QQkFDSyIsIElOQUREUl9MT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX0xPT1BCQUNLKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9MT09QQkFDSyIsIDB4N0YwMDAwMDEpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9VTlNQRUNfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX1VOU1BFQ19HUk9VUCIsIElOQUREUl9VTlNQRUNfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9VTlNQRUNfR1JPVVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX1VOU1BFQ19HUk9VUCIsIDB4ZTAwMDAwMDApOwogI2VuZGlmCkBAIC02MzE3LDM1NCArNjU4MywzNTMgQEAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FMTEhPU1RTX0dST1VQIiwgMHhlMDAwMDAwMSk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX01BWF9MT0NBTF9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTUFYX0xPQ0FMX0dST1VQIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkFERFJfTUFYX0xPQ0FMX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTUFYX0xPQ0FMX0dST1VQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9NQVhfTE9DQUxfR1JPVVAiLCAweGUwMDAwMGZmKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTk9ORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTk9ORSIsIElOQUREUl9OT05FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTk9ORSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTk9ORSIsIDB4ZmZmZmZmZmYpOwogI2VuZGlmCiAKICAgICAvKiBJUHY0IFtnc11ldHNvY2tvcHQgb3B0aW9ucyAqLwogI2lmZGVmICBJUF9PUFRJT05TCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX09QVElPTlMiLCBJUF9PUFRJT05TKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9PUFRJT05TKTsKICNlbmRpZgogI2lmZGVmICBJUF9IRFJJTkNMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0hEUklOQ0wiLCBJUF9IRFJJTkNMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9IRFJJTkNMKTsKICNlbmRpZgogI2lmZGVmICBJUF9UT1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVE9TIiwgSVBfVE9TKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UT1MpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UVEwiLCBJUF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVk9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVk9QVFMiLCBJUF9SRUNWT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVk9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZSRVRPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZSRVRPUFRTIiwgSVBfUkVDVlJFVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZSRVRPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWRFNUQUREUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWRFNUQUREUiIsIElQX1JFQ1ZEU1RBRERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWRFNUQUREUik7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRVRPUFRTIiwgSVBfUkVUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX0lGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9JRiIsIElQX01VTFRJQ0FTVF9JRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX0lGKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9UVEwiLCBJUF9NVUxUSUNBU1RfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfTE9PUCIsIElQX01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfTE9PUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfQUREX01FTUJFUlNISVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfQUREX01FTUJFUlNISVAiLCBJUF9BRERfTUVNQkVSU0hJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfQUREX01FTUJFUlNISVApOwogI2VuZGlmCiAjaWZkZWYgIElQX0RST1BfTUVNQkVSU0hJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9EUk9QX01FTUJFUlNISVAiLCBJUF9EUk9QX01FTUJFUlNISVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RST1BfTUVNQkVSU0hJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTUFYX01FTUJFUlNISVBTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01BWF9NRU1CRVJTSElQUyIsIElQX01BWF9NRU1CRVJTSElQUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTUFYX01FTUJFUlNISVBTKTsKICNlbmRpZgogI2lmZGVmICBJUF9UUkFOU1BBUkVOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UUkFOU1BBUkVOVCIsIElQX1RSQU5TUEFSRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UUkFOU1BBUkVOVCk7CiAjZW5kaWYKIAogICAgIC8qIElQdjYgW2dzXWV0c29ja29wdCBvcHRpb25zLCBkZWZpbmVkIGluIFJGQzI1NTMgKi8KICNpZmRlZiAgSVBWNl9KT0lOX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSk9JTl9HUk9VUCIsIElQVjZfSk9JTl9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9KT0lOX0dST1VQKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X0xFQVZFX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTEVBVkVfR1JPVVAiLCBJUFY2X0xFQVZFX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0xFQVZFX0dST1VQKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9IT1BTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0hPUFMiLCBJUFY2X01VTFRJQ0FTVF9IT1BTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9IT1BTKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9JRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9JRiIsIElQVjZfTVVMVElDQVNUX0lGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9JRik7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9MT09QIiwgSVBWNl9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfTE9PUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9VTklDQVNUX0hPUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9VTklDQVNUX0hPUFMiLCBJUFY2X1VOSUNBU1RfSE9QUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9VTklDQVNUX0hPUFMpOwogI2VuZGlmCiAgICAgLyogQWRkaXRpb25hbCBJUFY2IHNvY2tldCBvcHRpb25zLCBkZWZpbmVkIGluIFJGQyAzNDkzICovCiAjaWZkZWYgSVBWNl9WNk9OTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9WNk9OTFkiLCBJUFY2X1Y2T05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9WNk9OTFkpOwogI2VuZGlmCiAgICAgLyogQWR2YW5jZWQgSVBWNiBzb2NrZXQgb3B0aW9ucywgZnJvbSBSRkMgMzU0MiAqLwogI2lmZGVmIElQVjZfQ0hFQ0tTVU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9DSEVDS1NVTSIsIElQVjZfQ0hFQ0tTVU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfQ0hFQ0tTVU0pOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9ET05URlJBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0RPTlRGUkFHIiwgSVBWNl9ET05URlJBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9ET05URlJBRyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0RTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9EU1RPUFRTIiwgSVBWNl9EU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0RTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9IT1BMSU1JVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0hPUExJTUlUIiwgSVBWNl9IT1BMSU1JVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9IT1BMSU1JVCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0hPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9IT1BPUFRTIiwgSVBWNl9IT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0hPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9ORVhUSE9QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTkVYVEhPUCIsIElQVjZfTkVYVEhPUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9ORVhUSE9QKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUEFUSE1UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1BBVEhNVFUiLCBJUFY2X1BBVEhNVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUEFUSE1UVSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1BLVElORk8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9QS1RJTkZPIiwgSVBWNl9QS1RJTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1BLVElORk8pOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZEU1RPUFRTIiwgSVBWNl9SRUNWRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZIT1BMSU1JVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZIT1BMSU1JVCIsIElQVjZfUkVDVkhPUExJTUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZIT1BMSU1JVCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZIT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkhPUE9QVFMiLCBJUFY2X1JFQ1ZIT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZIT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlBLVElORk8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUEtUSU5GTyIsIElQVjZfUkVDVlBLVElORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlBLVElORk8pOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUlRIRFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUlRIRFIiLCBJUFY2X1JFQ1ZSVEhEUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUlRIRFIpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWVENMQVNTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlRDTEFTUyIsIElQVjZfUkVDVlRDTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWVENMQVNTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SVEhEUiIsIElQVjZfUlRIRFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFIpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUkRTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SVEhEUkRTVE9QVFMiLCBJUFY2X1JUSERSRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUkRTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUl9UWVBFXzAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SVEhEUl9UWVBFXzAiLCBJUFY2X1JUSERSX1RZUEVfMCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUl9UWVBFXzApOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUEFUSE1UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZQQVRITVRVIiwgSVBWNl9SRUNWUEFUSE1UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUEFUSE1UVSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1RDTEFTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1RDTEFTUyIsIElQVjZfVENMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1RDTEFTUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1VTRV9NSU5fTVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVVNFX01JTl9NVFUiLCBJUFY2X1VTRV9NSU5fTVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1VTRV9NSU5fTVRVKTsKICNlbmRpZgogCiAgICAgLyogVENQIG9wdGlvbnMgKi8KICNpZmRlZiAgVENQX05PREVMQVkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX05PREVMQVkiLCBUQ1BfTk9ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX05PREVMQVkpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9NQVhTRUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX01BWFNFRyIsIFRDUF9NQVhTRUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9NQVhTRUcpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9DT1JLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9DT1JLIiwgVENQX0NPUkspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9DT1JLKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUElETEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBJRExFIiwgVENQX0tFRVBJRExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUElETEUpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQSU5UVkwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBJTlRWTCIsIFRDUF9LRUVQSU5UVkwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQSU5UVkwpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQQ05UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQQ05UIiwgVENQX0tFRVBDTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQQ05UKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfU1lOQ05UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9TWU5DTlQiLCBUQ1BfU1lOQ05UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfU1lOQ05UKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfTElOR0VSMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTElOR0VSMiIsIFRDUF9MSU5HRVIyKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTElOR0VSMik7CiAjZW5kaWYKICNpZmRlZiAgVENQX0RFRkVSX0FDQ0VQVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfREVGRVJfQUNDRVBUIiwgVENQX0RFRkVSX0FDQ0VQVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0RFRkVSX0FDQ0VQVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1dJTkRPV19DTEFNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfV0lORE9XX0NMQU1QIiwgVENQX1dJTkRPV19DTEFNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1dJTkRPV19DTEFNUCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0lORk8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0lORk8iLCBUQ1BfSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0lORk8pOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9RVUlDS0FDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfUVVJQ0tBQ0siLCBUQ1BfUVVJQ0tBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9RVUlDS0FDSyk7CiAjZW5kaWYKLQorI2lmZGVmICBUQ1BfRkFTVE9QRU4KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfRkFTVE9QRU4pOworI2VuZGlmCiAKICAgICAvKiBJUFggb3B0aW9ucyAqLwogI2lmZGVmICBJUFhfVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFhfVFlQRSIsIElQWF9UWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFhfVFlQRSk7CiAjZW5kaWYKIAogLyogUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAqLwogI2lmZGVmIFJEU19DTVNHX1JETUFfQVJHUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX0FSR1MiLCBSRFNfQ01TR19SRE1BX0FSR1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfQVJHUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX0RFU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9ERVNUIiwgUkRTX0NNU0dfUkRNQV9ERVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX0RFU1QpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9NQVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9NQVAiLCBSRFNfQ01TR19SRE1BX01BUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9NQVApOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9TVEFUVVMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9TVEFUVVMiLCBSRFNfQ01TR19SRE1BX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9TVEFUVVMpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9VUERBVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9VUERBVEUiLCBSRFNfQ01TR19SRE1BX1VQREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9VUERBVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfUkVBRFdSSVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1JFQURXUklURSIsIFJEU19SRE1BX1JFQURXUklURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfUkVBRFdSSVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0ZFTkNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0ZFTkNFIiwgUkRTX1JETUFfRkVOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0ZFTkNFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0lOVkFMSURBVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfSU5WQUxJREFURSIsIFJEU19SRE1BX0lOVkFMSURBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0lOVkFMSURBVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfVVNFX09OQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfVVNFX09OQ0UiLCBSRFNfUkRNQV9VU0VfT05DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfVVNFX09OQ0UpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfRE9OVFdBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfRE9OVFdBSVQiLCBSRFNfUkRNQV9ET05UV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfRE9OVFdBSVQpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfTk9USUZZX01FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX05PVElGWV9NRSIsIFJEU19SRE1BX05PVElGWV9NRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfTk9USUZZX01FKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1NJTEVOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9TSUxFTlQiLCBSRFNfUkRNQV9TSUxFTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1NJTEVOVCk7CiAjZW5kaWYKIAogICAgIC8qIGdldHthZGRyLG5hbWV9aW5mbyBwYXJhbWV0ZXJzICovCiAjaWZkZWYgRUFJX0FERFJGQU1JTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0FERFJGQU1JTFkiLCBFQUlfQUREUkZBTUlMWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0FERFJGQU1JTFkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0FHQUlOCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9BR0FJTiIsIEVBSV9BR0FJTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0FHQUlOKTsKICNlbmRpZgogI2lmZGVmIEVBSV9CQURGTEFHUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQkFERkxBR1MiLCBFQUlfQkFERkxBR1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9CQURGTEFHUyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfRkFJTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfRkFJTCIsIEVBSV9GQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfRkFJTCk7CiAjZW5kaWYKICNpZmRlZiBFQUlfRkFNSUxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9GQU1JTFkiLCBFQUlfRkFNSUxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfRkFNSUxZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9NRU1PUlkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX01FTU9SWSIsIEVBSV9NRU1PUlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9NRU1PUlkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX05PREFUQQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTk9EQVRBIiwgRUFJX05PREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX05PREFUQSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTk9OQU1FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9OT05BTUUiLCBFQUlfTk9OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTk9OQU1FKTsKICNlbmRpZgogI2lmZGVmIEVBSV9PVkVSRkxPVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfT1ZFUkZMT1ciLCBFQUlfT1ZFUkZMT1cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9PVkVSRkxPVyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU0VSVklDRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU0VSVklDRSIsIEVBSV9TRVJWSUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU0VSVklDRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU09DS1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NPQ0tUWVBFIiwgRUFJX1NPQ0tUWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU09DS1RZUEUpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU1lTVEVNIiwgRUFJX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NZU1RFTSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfQkFESElOVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0JBREhJTlRTIiwgRUFJX0JBREhJTlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQkFESElOVFMpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1BST1RPQ09MCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9QUk9UT0NPTCIsIEVBSV9QUk9UT0NPTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1BST1RPQ09MKTsKICNlbmRpZgogI2lmZGVmIEVBSV9NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX01BWCIsIEVBSV9NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9NQVgpOwogI2VuZGlmCiAjaWZkZWYgQUlfUEFTU0lWRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9QQVNTSVZFIiwgQUlfUEFTU0lWRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfUEFTU0lWRSk7CiAjZW5kaWYKICNpZmRlZiBBSV9DQU5PTk5BTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfQ0FOT05OQU1FIiwgQUlfQ0FOT05OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9DQU5PTk5BTUUpOwogI2VuZGlmCiAjaWZkZWYgQUlfTlVNRVJJQ0hPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTlVNRVJJQ0hPU1QiLCBBSV9OVU1FUklDSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfTlVNRVJJQ0hPU1QpOwogI2VuZGlmCiAjaWZkZWYgQUlfTlVNRVJJQ1NFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTlVNRVJJQ1NFUlYiLCBBSV9OVU1FUklDU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfTlVNRVJJQ1NFUlYpOwogI2VuZGlmCiAjaWZkZWYgQUlfTUFTSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9NQVNLIiwgQUlfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfTUFTSyk7CiAjZW5kaWYKICNpZmRlZiBBSV9BTEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfQUxMIiwgQUlfQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9BTEwpOwogI2VuZGlmCiAjaWZkZWYgQUlfVjRNQVBQRURfQ0ZHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1Y0TUFQUEVEX0NGRyIsIEFJX1Y0TUFQUEVEX0NGRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfVjRNQVBQRURfQ0ZHKTsKICNlbmRpZgogI2lmZGVmIEFJX0FERFJDT05GSUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfQUREUkNPTkZJRyIsIEFJX0FERFJDT05GSUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0FERFJDT05GSUcpOwogI2VuZGlmCiAjaWZkZWYgQUlfVjRNQVBQRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfVjRNQVBQRUQiLCBBSV9WNE1BUFBFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfVjRNQVBQRUQpOwogI2VuZGlmCiAjaWZkZWYgQUlfREVGQVVMVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9ERUZBVUxUIiwgQUlfREVGQVVMVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfREVGQVVMVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9NQVhIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX01BWEhPU1QiLCBOSV9NQVhIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9NQVhIT1NUKTsKICNlbmRpZgogI2lmZGVmIE5JX01BWFNFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTUFYU0VSViIsIE5JX01BWFNFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX01BWFNFUlYpOwogI2VuZGlmCiAjaWZkZWYgTklfTk9GUUROCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05PRlFETiIsIE5JX05PRlFETik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTk9GUUROKTsKICNlbmRpZgogI2lmZGVmIE5JX05VTUVSSUNIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05VTUVSSUNIT1NUIiwgTklfTlVNRVJJQ0hPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05VTUVSSUNIT1NUKTsKICNlbmRpZgogI2lmZGVmIE5JX05BTUVSRVFECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05BTUVSRVFEIiwgTklfTkFNRVJFUUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05BTUVSRVFEKTsKICNlbmRpZgogI2lmZGVmIE5JX05VTUVSSUNTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05VTUVSSUNTRVJWIiwgTklfTlVNRVJJQ1NFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05VTUVSSUNTRVJWKTsKICNlbmRpZgogI2lmZGVmIE5JX0RHUkFNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX0RHUkFNIiwgTklfREdSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX0RHUkFNKTsKICNlbmRpZgogCiAgICAgLyogc2h1dGRvd24oKSBwYXJhbWV0ZXJzICovCiAjaWZkZWYgU0hVVF9SRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgU0hVVF9SRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9SRCk7CiAjZWxpZiBkZWZpbmVkKFNEX1JFQ0VJVkUpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCBTRF9SRUNFSVZFKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCAwKTsKICNlbmRpZgogI2lmZGVmIFNIVVRfV1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIFNIVVRfV1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfV1IpOwogI2VsaWYgZGVmaW5lZChTRF9TRU5EKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgU0RfU0VORCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgMSk7CiAjZW5kaWYKICNpZmRlZiBTSFVUX1JEV1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRFdSIiwgU0hVVF9SRFdSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1JEV1IpOwogI2VsaWYgZGVmaW5lZChTRF9CT1RIKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEV1IiLCBTRF9CT1RIKTsKICNlbHNlCkBAIC02Njg0LDE0ICs2OTQ5LDE0IEBACiAgICAgICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgbmFtZXNbaV0sIHRtcCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PRkYiLCBSQ1ZBTExfT0ZGKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09OIiwgUkNWQUxMX09OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX1NPQ0tFVExFVkVMT05MWSIsIFJDVkFMTF9TT0NLRVRMRVZFTE9OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9PRkYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9PTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX1NPQ0tFVExFVkVMT05MWSk7CiAjaWZkZWYgUkNWQUxMX0lQTEVWRUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX0lQTEVWRUwiLCBSQ1ZBTExfSVBMRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX0lQTEVWRUwpOwogI2VuZGlmCiAjaWZkZWYgUkNWQUxMX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfTUFYIiwgUkNWQUxMX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX01BWCk7CiAjZW5kaWYKICNlbmRpZiAvKiBfTVNUQ1BJUF8gKi8KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaCBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKaW5kZXggMDQzNTg3OC4uYjgzZjlhZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAorKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCkBAIC04LDcgKzgsNyBAQAogIyAgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICMgZW5kaWYKICMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotIyBpZiAhKGRlZmluZWQoX19DWUdXSU5fXykgfHwgKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19WQUNQUCkpKQorIyBpZiAhZGVmaW5lZChfX0NZR1dJTl9fKQogIyAgaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KICMgZW5kaWYKIApAQCAtODAsNiArODAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jYW4vcmF3Lmg+CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisjaW5jbHVkZSA8bGludXgvY2FuL2JjbS5oPgorI2VuZGlmCisKICNpZmRlZiBIQVZFX1NZU19TWVNfRE9NQUlOX0gKICNpbmNsdWRlIDxzeXMvc3lzX2RvbWFpbi5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYyBiL01vZHVsZXMvc3B3ZG1vZHVsZS5jCmluZGV4IDE5NGFlMTkuLjY4ZWExYjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc3B3ZG1vZHVsZS5jCkBAIC0yNiwyMiArMjYsMjQgQEAKICNpZiBkZWZpbmVkKEhBVkVfR0VUU1BOQU0pIHx8IGRlZmluZWQoSEFWRV9HRVRTUEVOVCkKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgc3RydWN0X3Nwd2RfdHlwZV9maWVsZHNbXSA9IHsKLSAgICB7InNwX25hbSIsICJsb2dpbiBuYW1lIn0sCi0gICAgeyJzcF9wd2QiLCAiZW5jcnlwdGVkIHBhc3N3b3JkIn0sCisgICAgeyJzcF9uYW1wIiwgImxvZ2luIG5hbWUifSwKKyAgICB7InNwX3B3ZHAiLCAiZW5jcnlwdGVkIHBhc3N3b3JkIn0sCiAgICAgeyJzcF9sc3RjaGciLCAiZGF0ZSBvZiBsYXN0IGNoYW5nZSJ9LAogICAgIHsic3BfbWluIiwgIm1pbiAjZGF5cyBiZXR3ZWVuIGNoYW5nZXMifSwKICAgICB7InNwX21heCIsICJtYXggI2RheXMgYmV0d2VlbiBjaGFuZ2VzIn0sCiAgICAgeyJzcF93YXJuIiwgIiNkYXlzIGJlZm9yZSBwdyBleHBpcmVzIHRvIHdhcm4gdXNlciBhYm91dCBpdCJ9LAotICAgIHsic3BfaW5hY3QiLCAiI2RheXMgYWZ0ZXIgcHcgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzIGJsb2NrZWQifSwKLSAgICB7InNwX2V4cGlyZSIsICIjZGF5cyBzaW5jZSAxOTcwLTAxLTAxIHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQifSwKKyAgICB7InNwX2luYWN0IiwgIiNkYXlzIGFmdGVyIHB3IGV4cGlyZXMgdW50aWwgYWNjb3VudCBpcyBkaXNhYmxlZCJ9LAorICAgIHsic3BfZXhwaXJlIiwgIiNkYXlzIHNpbmNlIDE5NzAtMDEtMDEgd2hlbiBhY2NvdW50IGV4cGlyZXMifSwKICAgICB7InNwX2ZsYWciLCAicmVzZXJ2ZWQifSwKKyAgICB7InNwX25hbSIsICJsb2dpbiBuYW1lOyBkZXByZWNhdGVkIn0sIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyAgICB7InNwX3B3ZCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQ7IGRlcHJlY2F0ZWQifSwgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogICAgIHswfQogfTsKIAogUHlEb2NfU1RSVkFSKHN0cnVjdF9zcHdkX19kb2NfXywKICJzcHdkLnN0cnVjdF9zcHdkOiBSZXN1bHRzIGZyb20gZ2V0c3AqKCkgcm91dGluZXMuXG5cblwKIFRoaXMgb2JqZWN0IG1heSBiZSBhY2Nlc3NlZCBlaXRoZXIgYXMgYSA5LXR1cGxlIG9mXG5cCi0gIChzcF9uYW0sc3BfcHdkLHNwX2xzdGNoZyxzcF9taW4sc3BfbWF4LHNwX3dhcm4sc3BfaW5hY3Qsc3BfZXhwaXJlLHNwX2ZsYWcpXG5cCisgIChzcF9uYW1wLHNwX3B3ZHAsc3BfbHN0Y2hnLHNwX21pbixzcF9tYXgsc3Bfd2FybixzcF9pbmFjdCxzcF9leHBpcmUsc3BfZmxhZylcblwKIG9yIHZpYSB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgYXMgbmFtZWQgaW4gdGhlIGFib3ZlIHR1cGxlLiIpOwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIHN0cnVjdF9zcHdkX3R5cGVfZGVzYyA9IHsKQEAgLTg2LDYgKzg4LDggQEAKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2luYWN0KTsKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2V4cGlyZSk7CiAgICAgU0VUSShzZXRJbmRleCsrLCBwLT5zcF9mbGFnKTsKKyAgICBTRVRTKHNldEluZGV4KyssIHAtPnNwX25hbXApOyAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzcF9uYW0gKi8KKyAgICBTRVRTKHNldEluZGV4KyssIHAtPnNwX3B3ZHApOyAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzcF9wd2QgKi8KIAogI3VuZGVmIFNFVFMKICN1bmRlZiBTRVRJCkBAIC0xOTYsOSArMjAwLDExIEBACiAgICAgbT1QeU1vZHVsZV9DcmVhdGUoJnNwd2Rtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFNwd2RUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3Rfc3B3ZF90eXBlX2Rlc2MpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RTcHdkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3Rfc3B3ZF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopICZTdHJ1Y3RTcHdkVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJzdHJ1Y3Rfc3B3ZCIsIChQeU9iamVjdCAqKSAmU3RydWN0U3B3ZFR5cGUpOwogICAgIGluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlLmggYi9Nb2R1bGVzL3NyZS5oCmluZGV4IDBhOGYwY2YuLjYyMWUyZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlLmgKKysrIGIvTW9kdWxlcy9zcmUuaApAQCAtMzEsOSArMzEsNyBAQAogICAgIFB5T2JqZWN0KiBwYXR0ZXJuOyAvKiBwYXR0ZXJuIHNvdXJjZSAob3IgTm9uZSkgKi8KICAgICBpbnQgZmxhZ3M7IC8qIGZsYWdzIHVzZWQgd2hlbiBjb21waWxpbmcgcGF0dGVybiBzb3VyY2UgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCi0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemU7IC8qIHBhdHRlcm4gY2hhcnNpemUgKG9yIC0xKSAqLwotICAgIGludCBjaGFyc2l6ZTsKLSAgICBQeV9idWZmZXIgdmlldzsKKyAgICBpbnQgaXNieXRlczsgLyogcGF0dGVybiB0eXBlICgxIC0gYnl0ZXMsIDAgLSBzdHJpbmcsIC0xIC0gTm9uZSkgKi8KICAgICAvKiBwYXR0ZXJuIGNvZGUgKi8KICAgICBQeV9zc2l6ZV90IGNvZGVzaXplOwogICAgIFNSRV9DT0RFIGNvZGVbMV07CkBAIC03Myw5ICs3MSw4IEBACiAgICAgLyogYXR0cmlidXRlcyBmb3IgdGhlIG1hdGNoIG9iamVjdCAqLwogICAgIFB5T2JqZWN0KiBzdHJpbmc7CiAgICAgUHlfc3NpemVfdCBwb3MsIGVuZHBvczsKLSAgICAvKiBjaGFyYWN0ZXIgc2l6ZSAqLwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplOyAvKiBraW5kIG9mIHRoaW5nOiAxIC0gYnl0ZXMsIDIvNCAtIHVuaWNvZGUgKi8KLSAgICBpbnQgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXM7CisgICAgaW50IGNoYXJzaXplOyAvKiBjaGFyYWN0ZXIgc2l6ZSAqLwogICAgIC8qIHJlZ2lzdGVycyAqLwogICAgIFB5X3NzaXplX3QgbGFzdGluZGV4OwogICAgIFB5X3NzaXplX3QgbGFzdG1hcms7CkBAIC04OSw2ICs4Niw3IEBACiAgICAgU1JFX1JFUEVBVCAqcmVwZWF0OwogICAgIC8qIGhvb2tzICovCiAgICAgU1JFX1RPTE9XRVJfSE9PSyBsb3dlcjsKKyAgICBpbnQgbWF0Y2hfYWxsOwogfSBTUkVfU1RBVEU7CiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oIGIvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKaW5kZXggMTNjODk1OC4uNTk0MGQ1YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKKysrIGIvTW9kdWxlcy9zcmVfY29uc3RhbnRzLmgKQEAgLTgxLDYgKzgxLDggQEAKICNkZWZpbmUgU1JFX0ZMQUdfRE9UQUxMIDE2CiAjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgMzIKICNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSA2NAorI2RlZmluZSBTUkVfRkxBR19ERUJVRyAxMjgKKyNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgMjU2CiAjZGVmaW5lIFNSRV9JTkZPX1BSRUZJWCAxCiAjZGVmaW5lIFNSRV9JTkZPX0xJVEVSQUwgMgogI2RlZmluZSBTUkVfSU5GT19DSEFSU0VUIDQKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlX2xpYi5oIGIvTW9kdWxlcy9zcmVfbGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4NjY5NwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvc3JlX2xpYi5oCkBAIC0wLDAgKzEsMTM0MyBAQAorLyoKKyAqIFNlY3JldCBMYWJzJyBSZWd1bGFyIEV4cHJlc3Npb24gRW5naW5lCisgKgorICogcmVndWxhciBleHByZXNzaW9uIG1hdGNoaW5nIGVuZ2luZQorICoKKyAqIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTZWUgdGhlIF9zcmUuYyBmaWxlIGZvciBpbmZvcm1hdGlvbiBvbiB1c2FnZSBhbmQgcmVkaXN0cmlidXRpb24uCisgKi8KKworLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLworCisvKiBUaGlzIGZpbGUgaXMgaW5jbHVkZWQgdGhyZWUgdGltZXMsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlciBzZXR0aW5ncyAqLworCitMT0NBTChpbnQpCitTUkUoYXQpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DSEFSKiBwdHIsIFNSRV9DT0RFIGF0KQoreworICAgIC8qIGNoZWNrIGlmIHBvaW50ZXIgaXMgYXQgZ2l2ZW4gcG9zaXRpb24gKi8KKworICAgIFB5X3NzaXplX3QgdGhpc3AsIHRoYXRwOworCisgICAgc3dpdGNoIChhdCkgeworCisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HOgorICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19TVFJJTkc6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyk7CisKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfTElORToKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+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+PiA4XTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBibG9jayA9IC0xOworICAgICAgICAgICAgc2V0ICs9IDI1Ni9zaXplb2YoU1JFX0NPREUpOworICAgICAgICAgICAgaWYgKGJsb2NrID49MCAmJgorICAgICAgICAgICAgICAgIChzZXRbKGJsb2NrICogMjU2ICsgKGNoICYgMjU1KSkvU1JFX0NPREVfQklUU10gJgorICAgICAgICAgICAgICAgICAgICAoMXUgPDwgKGNoICYgKFNSRV9DT0RFX0JJVFMtMSkpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IGNvdW50ICogKDI1Ni9TUkVfQ09ERV9CSVRTKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8qIGludGVybmFsIGVycm9yIC0tIHRoZXJlJ3Mgbm90IG11Y2ggd2UgY2FuIGRvIGFib3V0IGl0CisgICAgICAgICAgICAgICBoZXJlLCBzbyBsZXQncyBqdXN0IHByZXRlbmQgaXQgZGlkbid0IG1hdGNoLi4uICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworTE9DQUwoUHlfc3NpemVfdCkgU1JFKG1hdGNoKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybik7CisKK0xPQ0FMKFB5X3NzaXplX3QpCitTUkUoY291bnQpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFNSRV9DT0RFIGNocjsKKyAgICBTUkVfQ0hBUiBjOworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+cHRyOworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgIFB5X3NzaXplX3QgaTsKKworICAgIC8qIGFkanVzdCBlbmQgKi8KKyAgICBpZiAobWF4Y291bnQgPCBlbmQgLSBwdHIgJiYgbWF4Y291bnQgIT0gU1JFX01BWFJFUEVBVCkKKyAgICAgICAgZW5kID0gcHRyICsgbWF4Y291bnQ7CisKKyAgICBzd2l0Y2ggKHBhdHRlcm5bMF0pIHsKKworICAgIGNhc2UgU1JFX09QX0lOOgorICAgICAgICAvKiByZXBlYXRlZCBzZXQgKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgSU5cbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIFNSRShjaGFyc2V0KShwYXR0ZXJuICsgMiwgKnB0cikpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9BTlk6CisgICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0lTX0xJTkVCUkVBSygqcHRyKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6CisgICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0CisgICAgICAgICAgIHN0cmluZywgYW5kIGJhY2t0cmFjayBmcm9tIHRoZXJlICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWV9BTExcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICBwdHIgPSBlbmQ7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICBjID0gKFNSRV9DSEFSKSBjaHI7CisjaWYgU0laRU9GX1NSRV9DSEFSIDwgNAorICAgICAgICBpZiAoKFNSRV9DT0RFKSBjICE9IGNocikKKyAgICAgICAgICAgIDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAqcHRyID09IGMpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcigqcHRyKSA9PSBjaHIpCisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIGMgPSAoU1JFX0NIQVIpIGNocjsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gY2hyKQorICAgICAgICAgICAgcHRyID0gZW5kOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgIT0gYykKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KKyAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKCpwdHIpICE9IGNocikKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybiAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBTVUJQQVRURVJOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgd2hpbGUgKChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIGkgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBwYXR0ZXJuLCBwdHIsCisgICAgICAgICAgICAgICAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIC0gcHRyKSk7CisgICAgICAgIHJldHVybiAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyIC0gcHRyOworICAgIH0KKworICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKKyAgICAgICAgICAgcHRyIC0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cikpOworICAgIHJldHVybiBwdHIgLSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyOworfQorCisjaWYgMCAvKiBub3QgdXNlZCBpbiB0aGlzIHJlbGVhc2UgKi8KK0xPQ0FMKGludCkKK1NSRShpbmZvKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICAvKiBjaGVjayBpZiBhbiBTUkVfT1BfSU5GTyBibG9jayBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgorICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBTUkVfQ09ERSBvYmplY3RzIHRvIHNraXAgaWYgc3VjY2Vzc2Z1bCwgMAorICAgICAgIGlmIG5vIG1hdGNoICovCisKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSKikgc3RhdGUtPmVuZDsKKyAgICBTUkVfQ0hBUiogcHRyID0gKFNSRV9DSEFSKikgc3RhdGUtPnB0cjsKKyAgICBQeV9zc2l6ZV90IGk7CisKKyAgICAvKiBjaGVjayBtaW5pbWFsIGxlbmd0aCAqLworICAgIGlmIChwYXR0ZXJuWzNdICYmIGVuZCAtIHB0ciA8IHBhdHRlcm5bM10pCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY2hlY2sga25vd24gcHJlZml4ICovCisgICAgaWYgKHBhdHRlcm5bMl0gJiBTUkVfSU5GT19QUkVGSVggJiYgcGF0dGVybls1XSA+IDEpIHsKKyAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhdHRlcm5bNV07IGkrKykKKyAgICAgICAgICAgIGlmICgoU1JFX0NPREUpIHB0cltpXSAhPSBwYXR0ZXJuWzcgKyBpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBhdHRlcm5bMF0gKyAyICogcGF0dGVybls2XTsKKyAgICB9CisgICAgcmV0dXJuIHBhdHRlcm5bMF07Cit9CisjZW5kaWYKKworLyogVGhlIG1hY3JvcyBiZWxvdyBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkKKyAqIGNhbGxzIHRoYXQgKmZhaWxlZCogYW5kIGRvICpub3QqIHJldHVybiBpbW1lZGlhdGVseSAoSU9XLCB0aG9zZQorICogdGhhdCB3aWxsIGJhY2t0cmFjaykuIEV4cGxhaW5pbmc6CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIHRydWU6IHRoYXQncyB1c3VhbGx5IGEgc3VjY2VzcworICogICAoYmVzaWRlcyBhdHlwaWNhbCBjYXNlcyBsaWtlIEFTU0VSVF9OT1QpLCB0aGVyZWZvcmUgdGhlcmUncyBubworICogICByZWFzb24gdG8gcmVzdG9yZSBsYXN0bWFyazsKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgZmFsc2UgYnV0IHRoZSBjdXJyZW50IFNSRShtYXRjaCkoKQorICogICBpcyByZXR1cm5pbmcgdG8gdGhlIGNhbGxlcjogSWYgdGhlIGN1cnJlbnQgU1JFKG1hdGNoKSgpIGlzIHRoZQorICogICB0b3AgZnVuY3Rpb24gb2YgdGhlIHJlY3Vyc2lvbiwgcmV0dXJuaW5nIGZhbHNlIHdpbGwgYmUgYSBtYXRjaGluZworICogICBmYWlsdXJlLCBhbmQgaXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgbGFzdG1hcmsgaXMgcG9pbnRpbmcgdG8uCisgKiAgIElmIGl0J3MgKm5vdCogdGhlIHRvcCBmdW5jdGlvbiwgaXQgd2lsbCBiZSBhIHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkKKyAqICAgZmFpbHVyZSBieSBpdHNlbGYsIGFuZCB0aGUgY2FsbGluZyBTUkUobWF0Y2gpKCkgd2lsbCBoYXZlIHRvIGRlYWwKKyAqICAgd2l0aCB0aGUgZmFpbHVyZSBieSB0aGUgc2FtZSBydWxlcyBleHBsYWluZWQgaGVyZSAoaXQgd2lsbCByZXN0b3JlCisgKiAgIGxhc3RtYXJrIGJ5IGl0c2VsZiBpZiBuZWNlc3NhcnkpOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgY29udGludWUgdGhlCisgKiAgIG91dHNpZGUgJ2ZvcicgbG9vcDogbXVzdCBiZSBwcm90ZWN0ZWQgd2hlbiBicmVha2luZywgc2luY2UgdGhlIG5leHQKKyAqICAgT1AgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGFnYWluCisgKiAgIGluc2lkZSBhIGxvY2FsIGZvci93aGlsZSBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCBiZXR3ZWVuIGVhY2gKKyAqICAgbG9vcCBpdGVyYXRpb24sIHNpbmNlIHRoZSByZWN1cnNpdmUgU1JFKG1hdGNoKSgpIGNvdWxkIGRvIGFueXRoaW5nLAorICogICBhbmQgY291bGQgcG90ZW50aWFsbHkgZGVwZW5kIG9uIGxhc3RtYXJrLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBjaGVjayB0aGUgZGlzY3Vzc2lvbiBhdCBTRiBwYXRjaCAjNzEyOTAwLgorICovCisjZGVmaW5lIExBU1RNQVJLX1NBVkUoKSAgICAgXAorICAgIGRvIHsgXAorICAgICAgICBjdHgtPmxhc3RtYXJrID0gc3RhdGUtPmxhc3RtYXJrOyBcCisgICAgICAgIGN0eC0+bGFzdGluZGV4ID0gc3RhdGUtPmxhc3RpbmRleDsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIExBU1RNQVJLX1JFU1RPUkUoKSAgXAorICAgIGRvIHsgXAorICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBjdHgtPmxhc3RtYXJrOyBcCisgICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBjdHgtPmxhc3RpbmRleDsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVUVVJOX0VSUk9SKGkpIGRvIHsgcmV0dXJuIGk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgUkVUVVJOX0ZBSUxVUkUgZG8geyByZXQgPSAwOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKKyNkZWZpbmUgUkVUVVJOX1NVQ0NFU1MgZG8geyByZXQgPSAxOyBnb3RvIGV4aXQ7IH0gd2hpbGUoMCkKKworI2RlZmluZSBSRVRVUk5fT05fRVJST1IoaSkgXAorICAgIGRvIHsgaWYgKGkgPCAwKSBSRVRVUk5fRVJST1IoaSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFJFVFVSTl9PTl9TVUNDRVNTKGkpIFwKKyAgICBkbyB7IFJFVFVSTl9PTl9FUlJPUihpKTsgaWYgKGkgPiAwKSBSRVRVUk5fU1VDQ0VTUzsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVUVVJOX09OX0ZBSUxVUkUoaSkgXAorICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA9PSAwKSBSRVRVUk5fRkFJTFVSRTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTRlkoeCkgI3gKKworI2RlZmluZSBEQVRBX1NUQUNLX0FMTE9DKHN0YXRlLCB0eXBlLCBwdHIpIFwKK2RvIHsgXAorICAgIGFsbG9jX3BvcyA9IHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2U7IFwKKyAgICBUUkFDRSgoImFsbG9jYXRpbmcgJXMgaW4gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBTRlkodHlwZSksIGFsbG9jX3Bvcywgc2l6ZW9mKHR5cGUpKSk7IFwKKyAgICBpZiAoc2l6ZW9mKHR5cGUpID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIGFsbG9jX3BvcykgeyBcCisgICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplb2YodHlwZSkpOyBcCisgICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKKyAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKKyAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7IFwKKyAgICB9IFwKKyAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK2FsbG9jX3Bvcyk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemVvZih0eXBlKTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgdHlwZSwgcHRyLCBwb3MpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgibG9va2luZyB1cCAlcyBhdCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBTRlkodHlwZSksIHBvcykpOyBcCisgICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaytwb3MpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgZGF0YSwgc2l6ZSkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJjb3B5IGRhdGEgaW4gJXAgdG8gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBzaXplKSk7IFwKKyAgICBpZiAoc2l6ZSA+IHN0YXRlLT5kYXRhX3N0YWNrX3NpemUgLSBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlKSB7IFwKKyAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemUpOyBcCisgICAgICAgIGlmIChqIDwgMCkgcmV0dXJuIGo7IFwKKyAgICAgICAgaWYgKGN0eF9wb3MgIT0gLTEpIFwKKyAgICAgICAgICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCBTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7IFwKKyAgICB9IFwKKyAgICBtZW1jcHkoc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgZGF0YSwgc2l6ZSk7IFwKKyAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemU7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QT1Aoc3RhdGUsIGRhdGEsIHNpemUsIGRpc2NhcmQpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiY29weSBkYXRhIHRvICVwIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAorICAgIG1lbWNweShkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpOyBcCisgICAgaWYgKGRpc2NhcmQpIFwKKyAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemUpIFwKK2RvIHsgXAorICAgIFRSQUNFKCgiZGlzY2FyZCBkYXRhIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKKyAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAorICAgICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIERBVEFfUFVTSCh4KSBcCisgICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSkKKyNkZWZpbmUgREFUQV9QT1AoeCkgXAorICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSwgMSkKKyNkZWZpbmUgREFUQV9QT1BfRElTQ0FSRCh4KSBcCisgICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZW9mKCooeCkpKQorI2RlZmluZSBEQVRBX0FMTE9DKHQscCkgXAorICAgIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHQsIHApCisjZGVmaW5lIERBVEFfTE9PS1VQX0FUKHQscCxwb3MpIFwKKyAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSx0LHAscG9zKQorCisjZGVmaW5lIE1BUktfUFVTSChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBpID0gbGFzdG1hcms7IC8qIGN0eC0+bGFzdG1hcmsgbWF5IGNoYW5nZSBpZiByZWFsbG9jYXRlZCAqLyBcCisgICAgICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgc3RhdGUtPm1hcmssIChpKzEpKnNpemVvZih2b2lkKikpOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1AobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMSk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUF9LRUVQKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDApOyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTUFSS19QT1BfRElTQ0FSRChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEpVTVBfTk9ORSAgICAgICAgICAgIDAKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMSAgICAgMQorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8yICAgICAyCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzMgICAgIDMKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMSAgICAgNAorI2RlZmluZSBKVU1QX01JTl9VTlRJTF8yICAgICA1CisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzMgICAgIDYKKyNkZWZpbmUgSlVNUF9SRVBFQVQgICAgICAgICAgNworI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMSAgICA4CisjZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8yICAgIDkKKyNkZWZpbmUgSlVNUF9NSU5fUkVQRUFUX09ORSAgMTAKKyNkZWZpbmUgSlVNUF9CUkFOQ0ggICAgICAgICAgMTEKKyNkZWZpbmUgSlVNUF9BU1NFUlQgICAgICAgICAgMTIKKyNkZWZpbmUgSlVNUF9BU1NFUlRfTk9UICAgICAgMTMKKworI2RlZmluZSBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIG1hdGNoYWxsKSBcCisgICAgREFUQV9BTExPQyhTUkUobWF0Y2hfY29udGV4dCksIG5leHRjdHgpOyBcCisgICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAorICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKKyAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKKyAgICBuZXh0Y3R4LT5tYXRjaF9hbGwgPSBtYXRjaGFsbDsgXAorICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7IFwKKyAgICBjdHggPSBuZXh0Y3R4OyBcCisgICAgZ290byBlbnRyYW5jZTsgXAorICAgIGp1bXBsYWJlbDogXAorICAgIHdoaWxlICgwKSAvKiBnY2MgZG9lc24ndCBsaWtlIGxhYmVscyBhdCBlbmQgb2Ygc2NvcGVzICovIFwKKworI2RlZmluZSBET19KVU1QKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAorICAgIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgY3R4LT5tYXRjaF9hbGwpCisKKyNkZWZpbmUgRE9fSlVNUDAoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuKSBcCisgICAgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCAwKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfc3NpemVfdCBsYXN0X2N0eF9wb3M7CisgICAgUHlfc3NpemVfdCBqdW1wOworICAgIFNSRV9DSEFSKiBwdHI7CisgICAgU1JFX0NPREUqIHBhdHRlcm47CisgICAgUHlfc3NpemVfdCBjb3VudDsKKyAgICBQeV9zc2l6ZV90IGxhc3RtYXJrOworICAgIFB5X3NzaXplX3QgbGFzdGluZGV4OworICAgIHVuaW9uIHsKKyAgICAgICAgU1JFX0NPREUgY2hyOworICAgICAgICBTUkVfUkVQRUFUKiByZXA7CisgICAgfSB1OworICAgIGludCBtYXRjaF9hbGw7Cit9IFNSRShtYXRjaF9jb250ZXh0KTsKKworLyogY2hlY2sgaWYgc3RyaW5nIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uICByZXR1cm5zIDwwIGZvcgorICAgZXJyb3IsIDAgZm9yIGZhaWx1cmUsIGFuZCAxIGZvciBzdWNjZXNzICovCitMT0NBTChQeV9zc2l6ZV90KQorU1JFKG1hdGNoKShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBTUkVfQ0hBUiogZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOworICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGp1bXA7CisgICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7CisKKyAgICBTUkUobWF0Y2hfY29udGV4dCkqIGN0eDsKKyAgICBTUkUobWF0Y2hfY29udGV4dCkqIG5leHRjdHg7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTlRFUlxuIiwgcGF0dGVybiwgc3RhdGUtPnB0cikpOworCisgICAgREFUQV9BTExPQyhTUkUobWF0Y2hfY29udGV4dCksIGN0eCk7CisgICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKKyAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7CisgICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKKyAgICBjdHgtPm1hdGNoX2FsbCA9IHN0YXRlLT5tYXRjaF9hbGw7CisgICAgY3R4X3BvcyA9IGFsbG9jX3BvczsKKworZW50cmFuY2U6CisKKyAgICBjdHgtPnB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5wdHI7CisKKyAgICBpZiAoY3R4LT5wYXR0ZXJuWzBdID09IFNSRV9PUF9JTkZPKSB7CisgICAgICAgIC8qIG9wdGltaXphdGlvbiBpbmZvIGJsb2NrICovCisgICAgICAgIC8qIDxJTkZPPiA8MT1za2lwPiA8Mj1mbGFncz4gPDM9bWluPiAuLi4gKi8KKyAgICAgICAgaWYgKGN0eC0+cGF0dGVyblszXSAmJiAoUHlfdWludHB0cl90KShlbmQgLSBjdHgtPnB0cikgPCBjdHgtPnBhdHRlcm5bM10pIHsKKyAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBjaGFycywgIgorICAgICAgICAgICAgICAgICAgICJuZWVkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLAorICAgICAgICAgICAgICAgICAgIGVuZCAtIGN0eC0+cHRyLCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzNdKSk7CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdICsgMTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgICsrc2lnY291bnQ7CisgICAgICAgIGlmICgoMCA9PSAoc2lnY291bnQgJiAweGZmZikpICYmIFB5RXJyX0NoZWNrU2lnbmFscygpKQorICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTlRFUlJVUFRFRCk7CisKKyAgICAgICAgc3dpdGNoICgqY3R4LT5wYXR0ZXJuKyspIHsKKworICAgICAgICBjYXNlIFNSRV9PUF9NQVJLOgorICAgICAgICAgICAgLyogc2V0IG1hcmsgKi8KKyAgICAgICAgICAgIC8qIDxNQVJLPiA8Z2lkPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFSSyAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBpZiAoaSAmIDEpCisgICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGkvMiArIDE7CisgICAgICAgICAgICBpZiAoaSA+IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgIC8qIHN0YXRlLT5sYXN0bWFyayBpcyB0aGUgaGlnaGVzdCB2YWxpZCBpbmRleCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFyayBhcnJheS4gIElmIGl0IGlzIGluY3JlYXNlZCBieSBtb3JlIHRoYW4gMSwKKyAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJ2ZW5pbmcgbWFya3MgbXVzdCBiZSBzZXQgdG8gTlVMTCB0byBzaWduYWwKKyAgICAgICAgICAgICAgICAgICB0aGF0IHRoZXNlIG1hcmtzIGhhdmUgbm90IGJlZW4gZW5jb3VudGVyZWQuICovCisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBqID0gc3RhdGUtPmxhc3RtYXJrICsgMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IGkpCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrW2orK10gPSBOVUxMOworICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZS0+bWFya1tpXSA9IGN0eC0+cHRyOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgorICAgICAgICAgICAgLyogbWF0Y2ggbGl0ZXJhbCBzdHJpbmcgKi8KKyAgICAgICAgICAgIC8qIDxMSVRFUkFMPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIGN0eC0+cHRyWzBdICE9IGN0eC0+cGF0dGVyblswXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgdGhhdCBpcyBub3QgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIC8qIDxOT1RfTElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgY3R4LT5wdHJbMF0gPT0gY3R4LT5wYXR0ZXJuWzBdKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfU1VDQ0VTUzoKKyAgICAgICAgICAgIC8qIGVuZCBvZiBwYXR0ZXJuICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTVUNDRVNTXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoIWN0eC0+bWF0Y2hfYWxsIHx8IGN0eC0+cHRyID09IHN0YXRlLT5lbmQpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9BVDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIHBvc2l0aW9uICovCisgICAgICAgICAgICAvKiA8QVQ+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmICghU1JFKGF0KShzdGF0ZSwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKKyAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIGNhdGVnb3J5ICovCisgICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q0FURUdPUlkgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhc3JlX2NhdGVnb3J5KGN0eC0+cGF0dGVyblswXSwgY3R4LT5wdHJbMF0pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQU5ZOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKGV4Y2VwdCBhIG5ld2xpbmUpICovCisgICAgICAgICAgICAvKiA8QU5ZPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IFNSRV9JU19MSU5FQlJFQUsoY3R4LT5wdHJbMF0pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6CisgICAgICAgICAgICAvKiBtYXRjaCBhbnl0aGluZyAqLworICAgICAgICAgICAgLyogPEFOWV9BTEw+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxBTllfQUxMXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0lOOgorICAgICAgICAgICAgLyogbWF0Y2ggc2V0IG1lbWJlciAob3Igbm9uX21lbWJlcikgKi8KKyAgICAgICAgICAgIC8qIDxJTj4gPHNraXA+IDxzZXQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybiArIDEsICpjdHgtPnB0cikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTF9JR05PUkUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgIT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSA9PSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9JTl9JR05PUkU6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTl9JR05PUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQKKyAgICAgICAgICAgICAgICB8fCAhU1JFKGNoYXJzZXQpKGN0eC0+cGF0dGVybisxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKXN0YXRlLT5sb3dlcigqY3R4LT5wdHIpKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSlVNUDoKKyAgICAgICAgY2FzZSBTUkVfT1BfSU5GTzoKKyAgICAgICAgICAgIC8qIGp1bXAgZm9yd2FyZCAqLworICAgICAgICAgICAgLyogPEpVTVA+IDxvZmZzZXQ+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0JSQU5DSDoKKyAgICAgICAgICAgIC8qIGFsdGVybmF0aW9uICovCisgICAgICAgICAgICAvKiA8QlJBTkNIPiA8MD1za2lwPiBjb2RlIDxKVU1QPiAuLi4gPE5VTEw+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxCUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgZm9yICg7IGN0eC0+cGF0dGVyblswXTsgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXSkgeworICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0xJVEVSQUwgJiYKKyAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgICAgICAgKFNSRV9DT0RFKSAqY3R4LT5wdHIgIT0gY3R4LT5wYXR0ZXJuWzJdKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfSU4gJiYKKyAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgICAgICAgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4gKyAzLCAoU1JFX0NPREUpICpjdHgtPnB0cikpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0JSQU5DSCwganVtcF9icmFuY2gsIGN0eC0+cGF0dGVybisxKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfS0VFUChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUX09ORToKKyAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtYXhpbWl6aW5nIHJlZ2V4cCkgKi8KKworICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCisgICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5CisgICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCisgICAgICAgICAgICAgICB1c2UgdGhlIE1BWF9SRVBFQVQgb3BlcmF0b3IgKi8KKworICAgICAgICAgICAgLyogPFJFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7CisKKyAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gZW5kIC0gY3R4LT5wdHIpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7IC8qIGNhbm5vdCBtYXRjaCAqLworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIHJldCA9IFNSRShjb3VudCkoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMl0pOworICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OworICAgICAgICAgICAgY3R4LT5wdHIgKz0gY3R4LT5jb3VudDsKKworICAgICAgICAgICAgLyogd2hlbiB3ZSBhcnJpdmUgaGVyZSwgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZgorICAgICAgICAgICAgICAgbWF0Y2hlcywgYW5kIGN0eC0+cHRyIHBvaW50cyB0byB0aGUgdGFpbCBvZiB0aGUgdGFyZ2V0CisgICAgICAgICAgICAgICBzdHJpbmcuICBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLAorICAgICAgICAgICAgICAgYW5kIGJhY2t0cmFjayBpZiBub3QuICovCisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTICYmCisgICAgICAgICAgICAgICAgKCFjdHgtPm1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSkgeworICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX0xJVEVSQUwpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbC4gc2tpcCBwb3NpdGlvbnMgd2hlcmUKKyAgICAgICAgICAgICAgICAgICB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBjYW5ub3QgcG9zc2libHkgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUuY2hyID0gY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXSsxXTsKKyAgICAgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwgKmN0eC0+cHRyICE9IGN0eC0+dS5jaHIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzEsIGp1bXBfcmVwZWF0X29uZV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworCisgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLS07CisgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzIsIGp1bXBfcmVwZWF0X29uZV8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLS07CisgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX01JTl9SRVBFQVRfT05FOgorICAgICAgICAgICAgLyogbWF0Y2ggcmVwZWF0ZWQgc2VxdWVuY2UgKG1pbmltaXppbmcgcmVnZXhwKSAqLworCisgICAgICAgICAgICAvKiB0aGlzIG9wZXJhdG9yIG9ubHkgd29ya3MgaWYgdGhlIHJlcGVhdGVkIGl0ZW0gaXMKKyAgICAgICAgICAgICAgIGV4YWN0bHkgb25lIGNoYXJhY3RlciB3aWRlLCBhbmQgd2UncmUgbm90IGFscmVhZHkKKyAgICAgICAgICAgICAgIGNvbGxlY3RpbmcgYmFja3RyYWNraW5nIHBvaW50cy4gIGZvciBvdGhlciBjYXNlcywKKyAgICAgICAgICAgICAgIHVzZSB0aGUgTUlOX1JFUEVBVCBvcGVyYXRvciAqLworCisgICAgICAgICAgICAvKiA8TUlOX1JFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fUkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IGVuZCAtIGN0eC0+cHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IDApCisgICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IDA7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBjb3VudCB1c2luZyBwYXR0ZXJuIG1pbiBhcyB0aGUgbWF4aW11bSAqLworICAgICAgICAgICAgICAgIHJldCA9IFNSRShjb3VudCkoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMV0pOworICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICAgICAgLyogZGlkbid0IG1hdGNoIG1pbmltdW0gbnVtYmVyIG9mIHRpbWVzICovCisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgcGFzdCBtaW5pbXVtIG1hdGNoZXMgb2YgcmVwZWF0ICovCisgICAgICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKKyAgICAgICAgICAgICAgICBjdHgtPnB0ciArPSBjdHgtPmNvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuW2N0eC0+cGF0dGVyblswXV0gPT0gU1JFX09QX1NVQ0NFU1MgJiYKKyAgICAgICAgICAgICAgICAoIWN0eC0+bWF0Y2hfYWxsIHx8IGN0eC0+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+PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgICAgIGkgPSAxOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGlmICgqcHRyID09IChTUkVfQ0hBUikgcHJlZml4W2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK2kgIT0gcHJlZml4X2xlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIGZvdW5kIGEgcG90ZW50aWFsIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyIC0gKHByZWZpeF9sZW4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0ciAtIChwcmVmaXhfbGVuIC0gcHJlZml4X3NraXAgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4gKyAyKnByZWZpeF9za2lwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgLyogY2xvc2UgYnV0IG5vIGNpZ2FyIC0tIHRyeSBhZ2FpbiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKytwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOworICAgICAgICAgICAgfSB3aGlsZSAoaSAhPSAwKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChwYXR0ZXJuWzBdID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBsaXRlcmFsIGNoYXJhY3Rlci4gIHRoaXMgaXMgdXNlZAorICAgICAgICAgICBmb3Igc2hvcnQgcHJlZml4ZXMsIGFuZCBpZiBmYXN0IHNlYXJjaCBpcyBkaXNhYmxlZCAqLworICAgICAgICBTUkVfQ0hBUiBjID0gKFNSRV9DSEFSKSBwYXR0ZXJuWzFdOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBwYXR0ZXJuWzFdKQorICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyNlbmRpZgorICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kKSB7CisgICAgICAgICAgICB3aGlsZSAoKnB0ciAhPSBjKSB7CisgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggTElURVJBTFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gKytwdHI7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQorICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMik7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGNoYXJzZXQpIHsKKyAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCisgICAgICAgIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRShjaGFyc2V0KShjaGFyc2V0LCAqcHRyKSkKKyAgICAgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIENIQVJTRVRcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IHB0cjsKKyAgICAgICAgICAgIHN0YXR1cyA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4pOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcHRyKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgIHdoaWxlIChwdHIgPD0gZW5kKSB7CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0ciA9IHB0cisrOworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybik7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIHJldHVybiBzdGF0dXM7Cit9CisKKyN1bmRlZiBTUkVfQ0hBUgorI3VuZGVmIFNJWkVPRl9TUkVfQ0hBUgorI3VuZGVmIFNSRQorCisvKiB2aW06dHM9NDpzdz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCmluZGV4IDM3ZGY4MmQuLmNkYjRmZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKQEAgLTExLDEyICsxMSwxMiBAQAogICAgIFB5T2JqZWN0ICp0OwogCiAgICAgY2hhciAqc3RyOwotICAgIGNoYXIgKmZpbGVuYW1lOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBjaGFyICpzdGFydHN0cjsKICAgICBpbnQgc3RhcnQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNzczpzeW10YWJsZSIsICZzdHIsICZmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0c3RyKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNPJnM6c3ltdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUsICZzdGFydHN0cikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzdHJjbXAoc3RhcnRzdHIsICJleGVjIikgPT0gMCkKICAgICAgICAgc3RhcnQgPSBQeV9maWxlX2lucHV0OwpAQCAtMjcsOSArMjcsMTEgQEAKICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICJzeW10YWJsZSgpIGFyZyAzIG11c3QgYmUgJ2V4ZWMnIG9yICdldmFsJyBvciAnc2luZ2xlJyIpOworICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgc3QgPSBQeV9TeW10YWJsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydCk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICBpZiAoc3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgdCA9IChQeU9iamVjdCAqKXN0LT5zdF90b3A7CkBAIC02OSwzMCArNzEsMzAgQEAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzeW10YWJsZW1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlVTRSIsIFVTRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9HTE9CQUwiLCBERUZfR0xPQkFMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0xPQ0FMIiwgREVGX0xPQ0FMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX1BBUkFNIiwgREVGX1BBUkFNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUUiLCBERUZfRlJFRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9GUkVFX0NMQVNTIiwgREVGX0ZSRUVfQ0xBU1MpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfSU1QT1JUIiwgREVGX0lNUE9SVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9CT1VORCIsIERFRl9CT1VORCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVVNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfR0xPQkFMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfTE9DQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9QQVJBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0ZSRUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9GUkVFX0NMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfSU1QT1JUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfQk9VTkQpOwogCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfRlVOQ1RJT04iLCBGdW5jdGlvbkJsb2NrKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9DTEFTUyIsIENsYXNzQmxvY2spOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX01PRFVMRSIsIE1vZHVsZUJsb2NrKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUFRfSU1QT1JUX1NUQVIiLCBPUFRfSU1QT1JUX1NUQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUFRfVE9QTEVWRUwiLCBPUFRfVE9QTEVWRUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9QVF9JTVBPUlRfU1RBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT1BUX1RPUExFVkVMKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0NBTCIsIExPQ0FMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiR0xPQkFMX0VYUExJQ0lUIiwgR0xPQkFMX0VYUExJQ0lUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiR0xPQkFMX0lNUExJQ0lUIiwgR0xPQkFMX0lNUExJQ0lUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRlJFRSIsIEZSRUUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDRUxMIiwgQ0VMTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEdMT0JBTF9FWFBMSUNJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgR0xPQkFMX0lNUExJQ0lUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGUkVFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDRUxMKTsKIAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ09QRV9PRkYiLCBTQ09QRV9PRkZTRVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ09QRV9NQVNLIiwgU0NPUEVfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NPUEVfTUFTSyk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9ERUNSRUYobSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jIGIvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYwppbmRleCA4Yjg3N2NmLi45ZDc5ZWVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCisrKyBiL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKQEAgLTI3OCw0NCArMjc4LDQ0IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KIAogICAgIC8qIFByaW9yaXRpZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0VNRVJHIiwgICAgICAgTE9HX0VNRVJHKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FMRVJUIiwgICAgICAgTE9HX0FMRVJUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0NSSVQiLCAgICAgICAgTE9HX0NSSVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfRVJSIiwgICAgICAgICBMT0dfRVJSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1dBUk5JTkciLCBMT0dfV0FSTklORyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OT1RJQ0UiLCAgTE9HX05PVElDRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19JTkZPIiwgICAgICAgIExPR19JTkZPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0RFQlVHIiwgICAgICAgTE9HX0RFQlVHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfRU1FUkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BTEVSVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0NSSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19FUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19XQVJOSU5HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTk9USUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0RFQlVHKTsKIAogICAgIC8qIG9wZW5sb2coKSBvcHRpb24gZmxhZ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1BJRCIsICAgICAgICAgTE9HX1BJRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19DT05TIiwgICAgICAgIExPR19DT05TKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05ERUxBWSIsICBMT0dfTkRFTEFZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfUElEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQ09OUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05ERUxBWSk7CiAjaWZkZWYgTE9HX09ERUxBWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfT0RFTEFZIiwgIExPR19PREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19PREVMQVkpOwogI2VuZGlmCiAjaWZkZWYgTE9HX05PV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTk9XQUlUIiwgIExPR19OT1dBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OT1dBSVQpOwogI2VuZGlmCiAjaWZkZWYgTE9HX1BFUlJPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfUEVSUk9SIiwgIExPR19QRVJST1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19QRVJST1IpOwogI2VuZGlmCiAKICAgICAvKiBGYWNpbGl0aWVzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19LRVJOIiwgICAgICAgIExPR19LRVJOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1VTRVIiLCAgICAgICAgTE9HX1VTRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTUFJTCIsICAgICAgICBMT0dfTUFJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19EQUVNT04iLCAgTE9HX0RBRU1PTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BVVRIIiwgICAgICAgIExPR19BVVRIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xQUiIsICAgICAgICAgTE9HX0xQUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDAiLCAgTE9HX0xPQ0FMMCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDEiLCAgTE9HX0xPQ0FMMSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDIiLCAgTE9HX0xPQ0FMMik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDMiLCAgTE9HX0xPQ0FMMyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDQiLCAgTE9HX0xPQ0FMNCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDUiLCAgTE9HX0xPQ0FMNSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDYiLCAgTE9HX0xPQ0FMNik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19MT0NBTDciLCAgTE9HX0xPQ0FMNyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0tFUk4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19VU0VSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTUFJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0RBRU1PTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0FVVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MUFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19MT0NBTDcpOwogCiAjaWZuZGVmIExPR19TWVNMT0cKICNkZWZpbmUgTE9HX1NZU0xPRyAgICAgICAgICAgICAgTE9HX0RBRU1PTgpAQCAtMzMwLDEzICszMzAsMTMgQEAKICNkZWZpbmUgTE9HX0NST04gICAgICAgICAgICAgICAgTE9HX0RBRU1PTgogI2VuZGlmCiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX1NZU0xPRyIsICBMT0dfU1lTTE9HKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0NST04iLCAgICAgICAgTE9HX0NST04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfVVVDUCIsICAgICAgICBMT0dfVVVDUCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19ORVdTIiwgICAgICAgIExPR19ORVdTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfU1lTTE9HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQ1JPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1VVQ1ApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19ORVdTKTsKIAogI2lmZGVmIExPR19BVVRIUFJJVgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQVVUSFBSSVYiLCAgICBMT0dfQVVUSFBSSVYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19BVVRIUFJJVik7CiAjZW5kaWYKIAogICAgIHJldHVybiBtOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy90aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL3RpbWVtb2R1bGUuYwppbmRleCA0MmVjMzY2Li5kMzg3OGI5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3RpbWVtb2R1bGUuYworKysgYi9Nb2R1bGVzL3RpbWVtb2R1bGUuYwpAQCAtMzcsMTYgKzM3LDYgQEAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAjZW5kaWYgLyogIV9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfRVJST1JTCi0jaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0KICNpZiBkZWZpbmVkKF9fQVBQTEVfXykKICNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgogI2VuZGlmCkBAIC01NDMsNiArNTMzLDI2IEBACiAgICAvKiB3Y3NmdGltZSgpIGRvZXNuJ3QgZm9ybWF0IGNvcnJlY3RseSB0aW1lIHpvbmVzLCBzZWUgaXNzdWUgIzEwNjUzICovCiAjICB1bmRlZiBIQVZFX1dDU0ZUSU1FCiAjZW5kaWYKKyNkZWZpbmUgU1RSRlRJTUVfRk9STUFUX0NPREVTIFwKKyJDb21tb25seSB1c2VkIGZvcm1hdCBjb2RlczpcblwKK1xuXAorJVkgIFllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIuXG5cCislbSAgTW9udGggYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMTJdLlxuXAorJWQgIERheSBvZiB0aGUgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMzFdLlxuXAorJUggIEhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDIzXS5cblwKKyVNICBNaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNTldLlxuXAorJVMgIFNlY29uZCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCw2MV0uXG5cCisleiAgVGltZSB6b25lIG9mZnNldCBmcm9tIFVUQy5cblwKKyVhICBMb2NhbGUncyBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUuXG5cCislQSAgTG9jYWxlJ3MgZnVsbCB3ZWVrZGF5IG5hbWUuXG5cCislYiAgTG9jYWxlJ3MgYWJicmV2aWF0ZWQgbW9udGggbmFtZS5cblwKKyVCICBMb2NhbGUncyBmdWxsIG1vbnRoIG5hbWUuXG5cCislYyAgTG9jYWxlJ3MgYXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbi5cblwKKyVJICBIb3VyICgxMi1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwxMl0uXG5cCislcCAgTG9jYWxlJ3MgZXF1aXZhbGVudCBvZiBlaXRoZXIgQU0gb3IgUE0uXG5cCitcblwKK090aGVyIGNvZGVzIG1heSBiZSBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybS4gIFNlZSBkb2N1bWVudGF0aW9uIGZvclxuXAordGhlIEMgbGlicmFyeSBzdHJmdGltZSBmdW5jdGlvbi5cbiIKIAogI2lmZGVmIEhBVkVfU1RSRlRJTUUKICNpZmRlZiBIQVZFX1dDU0ZUSU1FCkBAIC02NDAsNiArNjUwLDE5IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KKyNlbGlmIChkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoc3VuKSkgJiYgZGVmaW5lZChIQVZFX1dDU0ZUSU1FKQorICAgIGZvcihvdXRidWYgPSB3Y3NjaHIoZm10LCAnJScpOworICAgICAgICBvdXRidWYgIT0gTlVMTDsKKyAgICAgICAgb3V0YnVmID0gd2NzY2hyKG91dGJ1ZisyLCAnJScpKQorICAgIHsKKyAgICAgICAgLyogSXNzdWUgIzE5NjM0OiBPbiBBSVgsIHdjc2Z0aW1lKCJ5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKQorICAgICAgICAgICByZXR1cm5zICIwLyIgaW5zdGVhZCBvZiAiOTkiICovCisgICAgICAgIGlmIChvdXRidWZbMV0gPT0gTCd5JyAmJiBidWYudG1feWVhciA8IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgJXkgcmVxdWlyZXMgeWVhciA+PSAxOTAwIG9uIEFJWCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAjZW5kaWYKIAogICAgIGZtdGxlbiA9IHRpbWVfc3RybGVuKGZtdCk7CkBAIC02OTQsMTMgKzcxNywxMyBAQAogCiAjdW5kZWYgdGltZV9jaGFyCiAjdW5kZWYgZm9ybWF0X3RpbWUKLQogUHlEb2NfU1RSVkFSKHN0cmZ0aW1lX2RvYywKICJzdHJmdGltZShmb3JtYXRbLCB0dXBsZV0pIC0+IHN0cmluZ1xuXAogXG5cCiBDb252ZXJ0IGEgdGltZSB0dXBsZSB0byBhIHN0cmluZyBhY2NvcmRpbmcgdG8gYSBmb3JtYXQgc3BlY2lmaWNhdGlvbi5cblwKIFNlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzLiBXaGVuIHRoZSB0aW1lIHR1cGxlXG5cCi1pcyBub3QgcHJlc2VudCwgY3VycmVudCB0aW1lIGFzIHJldHVybmVkIGJ5IGxvY2FsdGltZSgpIGlzIHVzZWQuIik7CitpcyBub3QgcHJlc2VudCwgY3VycmVudCB0aW1lIGFzIHJldHVybmVkIGJ5IGxvY2FsdGltZSgpIGlzIHVzZWQuXG5cCitcbiIgU1RSRlRJTUVfRk9STUFUX0NPREVTKTsKICNlbmRpZiAvKiBIQVZFX1NUUkZUSU1FICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC03MjMsNyArNzQ2LDkgQEAKICJzdHJwdGltZShzdHJpbmcsIGZvcm1hdCkgLT4gc3RydWN0X3RpbWVcblwKIFxuXAogUGFyc2UgYSBzdHJpbmcgdG8gYSB0aW1lIHR1cGxlIGFjY29yZGluZyB0byBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uLlxuXAotU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMgKHNhbWUgYXMgc3RyZnRpbWUoKSkuIik7CitTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2RlcyAoc2FtZSBhc1xuXAorc3RyZnRpbWUoKSkuXG5cCitcbiIgU1RSRlRJTUVfRk9STUFUX0NPREVTKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIF9hc2N0aW1lKHN0cnVjdCB0bSAqdGltZXB0cikKQEAgLTgwMiw3ICs4MjcsMTYgQEAKICAgICB0dCA9IG1rdGltZSgmYnVmKTsKICAgICAvKiBSZXR1cm4gdmFsdWUgb2YgLTEgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiBhbiBlcnJvciwgYnV0IHRtX3dkYXkKICAgICAgKiBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLwotICAgIGlmICh0dCA9PSAodGltZV90KSgtMSkgJiYgYnVmLnRtX3dkYXkgPT0gLTEpIHsKKyAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpCisjaWZuZGVmIF9BSVgKKyAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dAorICAgICAgICAgKiB0bV93ZGF5IGNhbm5vdCByZW1haW4gc2V0IHRvIC0xIGlmIG1rdGltZSBzdWNjZWVkZWQuICovCisgICAgICAgICYmIGJ1Zi50bV93ZGF5ID09IC0xCisjZWxzZQorICAgICAgICAvKiBvbiBBSVgsIHRtX3dkYXkgaXMgYWx3YXlzIHNldHMsIGV2ZW4gb24gZXJyb3IgKi8KKyNlbmRpZgorICAgICAgICkKKyAgICB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm1rdGltZSBhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzcsNiArODcxLDggQEAKICAgICAvKiBSZXNldCB0aW1lem9uZSwgYWx0em9uZSwgZGF5bGlnaHQgYW5kIHR6bmFtZSAqLwogICAgIFB5SW5pdF90aW1lem9uZShtKTsKICAgICBQeV9ERUNSRUYobSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtMTI3MywxOSArMTMwOSwxMSBAQAogI2lmIGRlZmluZWQoSEFWRV9UWk5BTUUpICYmICFkZWZpbmVkKF9fR0xJQkNfXykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKICAgICBQeU9iamVjdCAqb3R6MCwgKm90ejE7CiAgICAgdHpzZXQoKTsKLSNpZmRlZiBQWU9TX09TMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJ0aW1lem9uZSIsIF90aW1lem9uZSk7Ci0jZWxzZSAvKiAhUFlPU19PUzIgKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCB0aW1lem9uZSk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNpZmRlZiBIQVZFX0FMVFpPTkUKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIGFsdHpvbmUpOwogI2Vsc2UKLSNpZmRlZiBQWU9TX09TMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgX3RpbWV6b25lLTM2MDApOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCB0aW1lem9uZS0zNjAwKTsKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImRheWxpZ2h0IiwgZGF5bGlnaHQpOwogICAgIG90ejAgPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKHR6bmFtZVswXSwgInN1cnJvZ2F0ZWVzY2FwZSIpOwpAQCAtMTQ2OCw4ICsxNDk2LDkgQEAKICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFRpbWVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFRpbWVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF90aW1lX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIHdpbnZlci5kd09TVmVyc2lvbkluZm9TaXplID0gc2l6ZW9mKHdpbnZlcik7CkBAIC0xNTgxLDcgKzE2MTAsNyBAQAogICAgICAgICAgICAgRFdPUkQgcmM7CiAgICAgICAgICAgICBIQU5ETEUgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKICAgICAgICAgICAgIFJlc2V0RXZlbnQoaEludGVycnVwdEV2ZW50KTsKLSAgICAgICAgICAgIHJjID0gV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcyk7CisgICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChoSW50ZXJydXB0RXZlbnQsIHVsX21pbGxpcywgRkFMU0UpOwogICAgICAgICAgICAgaWYgKHJjID09IFdBSVRfT0JKRUNUXzApIHsKICAgICAgICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCiAgICAgICAgICAgICAgICAgZXJybm8gPSBFSU5UUjsKQEAgLTE1OTEsMTUgKzE2MjAsNiBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQotI2VsaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAvKiBUaGlzIFNsZWVwICpJUyogSW50ZXJydXB0YWJsZSBieSBFeGNlcHRpb25zICovCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChEb3NTbGVlcChzZWNzICogMTAwMCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICNlbHNlCiAgICAgLyogWFhYIENhbid0IGludGVycnVwdCB0aGlzIHNsZWVwICovCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YS5jIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCmluZGV4IGY0ZDM2MDguLmVjYTAwNTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGEuYworKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKQEAgLTE3LDYgKzE3LDEyIEBACiAjaW5jbHVkZSAidWNuaGFzaC5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCisvKltjbGluaWNdCittb2R1bGUgdW5pY29kZWRhdGEKK2NsYXNzIHVuaWNvZGVkYXRhLlVDRAorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIC8qIGNoYXJhY3RlciBwcm9wZXJ0aWVzICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTEwNywyNCArMTEzLDYxIEBACiAKIC8qIC0tLSBNb2R1bGUgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1QeURvY19TVFJWQVIodW5pY29kZWRhdGFfZGVjaW1hbF9fZG9jX18sCi0iZGVjaW1hbCh1bmljaHJbLCBkZWZhdWx0XSlcblwKLVxuXAotUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyXG5cCi1hcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZlxuXAotbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKy8qW2NsaW5pY10KKwordW5pY29kZWRhdGEuVUNELmRlY2ltYWwKKworICAgIHVuaWNocjogb2JqZWN0KHR5cGU9J3N0cicpCisgICAgZGVmYXVsdDogb2JqZWN0PU5VTEwKKyAgICAvCisKK0NvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLgorCitSZXR1cm5zIHRoZSBkZWNpbWFsIHZhbHVlIGFzc2lnbmVkIHRvIHRoZSBVbmljb2RlIGNoYXJhY3RlciB1bmljaHIKK2FzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmCitub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIodW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfX2RvY19fLAorImRlY2ltYWwodW5pY2hyLCBkZWZhdWx0PU5vbmUpXG4iCisiQ29udmVydHMgYSBVbmljb2RlIGNoYXJhY3RlciBpbnRvIGl0cyBlcXVpdmFsZW50IGRlY2ltYWwgdmFsdWUuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyXG4iCisiYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcbiIKKyJub3QgZ2l2ZW4sIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiIpOworCisjZGVmaW5lIFVOSUNPREVEQVRBX1VDRF9ERUNJTUFMX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNpbWFsIiwgKFB5Q0Z1bmN0aW9uKXVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsLCBNRVRIX1ZBUkFSR1MsIHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bmljb2RlZGF0YV9kZWNpbWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX2ltcGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bmljaHIsIFB5T2JqZWN0ICpkZWZhdWx0X3ZhbHVlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVkYXRhX1VDRF9kZWNpbWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeVVuaWNvZGVPYmplY3QgKnY7Ci0gICAgUHlPYmplY3QgKmRlZm9iaiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnVuaWNocjsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8hfE86ZGVjaW1hbCIsCisgICAgICAgICZQeVVuaWNvZGVfVHlwZSwgJnVuaWNociwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChzZWxmLCB1bmljaHIsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW5pY2hyLCBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSkKKy8qW2NsaW5pYyBjaGVja3N1bTogOTU3NmZhNTVmNGVhMGJlODI5NjhhZjM5ZGM5ZDAyODNlNjM0YmVlYl0qLworeworICAgIFB5VW5pY29kZU9iamVjdCAqdiA9IChQeVVuaWNvZGVPYmplY3QgKil1bmljaHI7CiAgICAgaW50IGhhdmVfb2xkID0gMDsKICAgICBsb25nIHJjOwogICAgIFB5X1VDUzQgYzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8TzpkZWNpbWFsIiwgJlB5VW5pY29kZV9UeXBlLCAmdiwgJmRlZm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGMgPSBnZXR1Y2hhcih2KTsKICAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNDUsMTQgKzE4OCwxNCBAQAogICAgIGlmICghaGF2ZV9vbGQpCiAgICAgICAgIHJjID0gUHlfVU5JQ09ERV9UT0RFQ0lNQUwoYyk7CiAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICBpZiAoZGVmb2JqID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGRlZmF1bHRfdmFsdWUgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGRlY2ltYWwiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlfSU5DUkVGKGRlZm9iaik7Ci0gICAgICAgICAgICByZXR1cm4gZGVmb2JqOworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHRfdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyYyk7CkBAIC0xMjUwLDcgKzEyOTMsNyBAQAogLyogWFhYIEFkZCBkb2Mgc3RyaW5ncy4gKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIHVuaWNvZGVkYXRhX2Z1bmN0aW9uc1tdID0gewotICAgIHsiZGVjaW1hbCIsIHVuaWNvZGVkYXRhX2RlY2ltYWwsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGVjaW1hbF9fZG9jX199LAorICAgIFVOSUNPREVEQVRBX1VDRF9ERUNJTUFMX01FVEhPRERFRgogICAgIHsiZGlnaXQiLCB1bmljb2RlZGF0YV9kaWdpdCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9kaWdpdF9fZG9jX199LAogICAgIHsibnVtZXJpYyIsIHVuaWNvZGVkYXRhX251bWVyaWMsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfbnVtZXJpY19fZG9jX199LAogICAgIHsiY2F0ZWdvcnkiLCB1bmljb2RlZGF0YV9jYXRlZ29yeSwgTUVUSF9WQVJBUkdTLApAQCAtMTMyNyw3ICsxMzcwLDYgQEAKIFRoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IHRoZVxuXAogVW5pY29kZURhdGEgRmlsZSBGb3JtYXQgIiBVTklEQVRBX1ZFUlNJT04gIi4iKTsKIAotCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHVuaWNvZGVkYXRhbW9kdWxlID0gewogICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgICAgICJ1bmljb2RlZGF0YSIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKaW5kZXggNWQ1ZGNhOC4uZWMxMWZhMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFRvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IDMuMiAqLwogCi0jZGVmaW5lIFVOSURBVEFfVkVSU0lPTiAiNi4xLjAiCisjZGVmaW5lIFVOSURBVEFfVkVSU0lPTiAiNi4zLjAiCiAvKiBhIGxpc3Qgb2YgdW5pcXVlIGRhdGFiYXNlIHJlY29yZHMgKi8KIGNvbnN0IF9QeVVuaWNvZGVfRGF0YWJhc2VSZWNvcmQgX1B5VW5pY29kZV9EYXRhYmFzZV9SZWNvcmRzW10gPSB7CiAgICAgezAsIDAsIDAsIDAsIDAsIDB9LApAQCAtMTIwLDYgKzEyMCw3IEBACiAgICAgezQsIDMwLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDMxLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDMyLCAxNCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7MTksIDAsIDUsIDAsIDUsIDB9LAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMTB9LAogICAgIHsxOCwgMCwgNSwgMCwgNSwgMH0sCkBAIC0xMzYsNyArMTM3LDYgQEAKICAgICB7MTksIDAsIDUsIDAsIDUsIDEzNn0sCiAgICAgezcsIDAsIDksIDAsIDUsIDB9LAogICAgIHszMCwgMCwgNSwgMCwgNSwgMH0sCi0gICAgezE0LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7NCwgMzYsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMCwgMTQsIDAsIDUsIDB9LAogICAgIHs3LCAwLCA0LCAwLCA1LCAwfSwKQEAgLTE3Nyw2ICsxNzcsNyBAQAogICAgIHsxOSwgMCwgMSwgMCwgNSwgODB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDB9LAogICAgIHs4LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDE1LCAwLCA1LCAwfSwKICAgICB7NSwgOSwgMSwgMCwgNSwgMH0sCiAgICAgezQsIDEsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMjM0LCAxNCwgMCwgNSwgMH0sCkBAIC0xOTAsNyArMTkxLDYgQEAKICAgICB7MjksIDAsIDE5LCAwLCA1LCAxNzB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDE3MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMTM2fSwKLSAgICB7MTQsIDAsIDE1LCAwLCA1LCAwfSwKICAgICB7MTQsIDAsIDEsIDAsIDUsIDB9LAogICAgIHsxNCwgMCwgNCwgMCwgNSwgMH0sCiAgICAgezIxLCAwLCAxOSwgMCwgNCwgMH0sCkBAIC0yMTMsNiArMjEzLDEwIEBACiAgICAgezI2LCAwLCAxMSwgMCwgNSwgMTM2fSwKICAgICB7MjAsIDAsIDE5LCAwLCA1LCAwfSwKICAgICB7MjcsIDAsIDEzLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIwLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIxLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIyLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIzLCAwLCA1LCAwfSwKICAgICB7OSwgMCwgOSwgMCwgNSwgMTM2fSwKICAgICB7MjcsIDAsIDEwLCAwLCA1LCAxMzZ9LAogICAgIHsyNywgMCwgMTksIDAsIDUsIDEzNn0sCkBAIC02MzgsNiArNjQyLDEwIEBACiAgICAgIlMiLAogICAgICJXUyIsCiAgICAgIk9OIiwKKyAgICAiTFJJIiwKKyAgICAiUkxJIiwKKyAgICAiRlNJIiwKKyAgICAiUERJIiwKICAgICBOVUxMCiB9OwogY29uc3QgY2hhciAqX1B5VW5pY29kZV9FYXN0QXNpYW5XaWR0aE5hbWVzW10gPSB7CkBAIC0xMjczLDM1ICsxMjgxLDM1IEBACiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTA3LCAxMDcsIDEwNywgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOCwgMTA4LCAKICAgICAxMDgsIDEwOCwgMTA4LCAwLCA3OCwgNzgsIDEwOSwgMTEwLCAxMTAsIDExMSwgMTEyLCAxMTMsIDI2LCAyNiwgODEsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMTQsIDExNSwgMTE2LCAxMTMsIDAsIDAsIDExMywgMTEzLCAxMTcsIDExNywgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE5LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMCwgCi0gICAgMTIxLCAxMjIsIDExNCwgMTE1LCAxMTYsIDEyMywgMTI0LCAxMjUsIDEyNSwgMTI2LCA4NiwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICA4NiwgODEsIDgxLCA4NiwgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMTAsIAotICAgIDEyOCwgMTI4LCAxMTMsIDExNywgMTE3LCAxMjksIDExNywgMTE3LCAxMTcsIDExNywgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE4LCAxMTcsIDExOCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTgsIDExMywgMTE3LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMTA4LCAyNiwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgMTE5LCAxMTksIDgxLCA4MSwgMjYsIDg2LCA4MSwgODEsIDg2LCAKLSAgICAxMTcsIDExNywgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMTcsIDExNywgCi0gICAgMTE3LCAxMzIsIDEzMiwgMTE3LCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMCwgMTMzLCAxMTcsIDEzNCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDExNCwgMTE1LCAxMTYsIDExMywgMTE3LCAwLCAxMTMsIDExMywgMTE4LCAxMTgsIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDEyMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMjEsIAorICAgIDEyMiwgMTIzLCAxMTQsIDExNSwgMTE2LCAxMjQsIDEyNSwgMTI2LCAxMjYsIDEyNywgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCisgICAgODYsIDgxLCA4MSwgODYsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTEwLCAKKyAgICAxMjksIDEyOSwgMTEzLCAxMTgsIDExOCwgMTMwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOSwgMTE4LCAxMTksIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE5LCAxMTMsIDExOCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAorICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDEyMCwgMTIwLCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCisgICAgMTE4LCAxMTgsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTE4LCAxMTgsIAorICAgIDExOCwgMTMzLCAxMzMsIDExOCwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKKyAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDExNywgMTE4LCAxMzQsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKICAgICA4NiwgODYsIDg2LCA4MSwgODYsIDg2LCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgODEsIDg2LCAKLSAgICA4MSwgODEsIDAsIDAsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAorICAgIDgxLCA4MSwgMCwgMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgCiAgICAgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgODEsIApAQCAtMTMxNCwxMSArMTMyMiwxMSBAQAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDg2LCA4NiwgODYsIAogICAgIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE3LCAwLCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4LCAwLCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIAotICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIwLCAxMjEsIDEyMiwgODEsIDgxLCA4MSwgCisgICAgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODYsIDg2LCAxMjEsIDEyMiwgMTIzLCA4MSwgODEsIDgxLCAKICAgICA4NiwgODEsIDgxLCA4NiwgODYsIDgxLCA4MSwgODEsIDgxLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAKQEAgLTE0NDQsNDEgKzE0NTIsNDAgQEAKICAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCiAgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAotICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgCi0gICAgODEsIDgxLCA4MSwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDgxLCA4MSwgCisgICAgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTE0OTgsMTUgKzE1MDUsMTYgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTYzLCAxNjQsIDAsIAotICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDE3MiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNjMsIDE2NCwgMCwgMCwgMCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgCiAgICAgMTQyLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTIxLDcgKzE1MjksNyBAQAogICAgIDgzLCA1MywgODMsIDgzLCA4MywgODUsIDQ4LCA4MSwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCiAgICAgMTUzLCAxNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDg0LCAxMzgsIDEzOCwgCi0gICAgMTM4LCAxMzgsIDEzNSwgMTM1LCAxMzUsIDE3MiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzQsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTE1NTAsNyArMTU1OCw3IEBACiAgICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDg2LCAxMzksIDEzOSwgMTM5LCAwLCAwLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4NiwgMTM5LCAxMzksIDEzNSwgMCwgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAxMzksIDEzNSwgCkBAIC0xNTY2LDE3ICsxNTc0LDE3IEBACiAgICAgMTQwLCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgMTQ2LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTQ3LCAxMzUsIDE0NywgMTM5LCAxMzksIDE0NywgMTQ3LCAxMzUsIDE0NywgMTc0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNDcsIDEzNSwgMTQ3LCAxMzksIDEzOSwgMTQ3LCAxNDcsIDEzNSwgMTQ3LCAxNzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCA4MywgCiAgICAgODMsIDgzLCA4MywgODMsIDgzLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIDg2LCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMTM1LCAKICAgICAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTc0LCAxNDIsIDEzOSwgMTM5LCA0OCwgNDgsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDE3NSwgMTQyLCAxMzksIDEzOSwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc0LCAxNzQsIDAsIDAsIDAsIAorICAgIDEzOSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxNzUsIDE3NSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKQEAgLTE1ODgsOCArMTU5Niw4IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCi0gICAgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MywgMTc1LCA4NiwgODYsIDg2LCA4NiwgODYsIAotICAgIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDgxLCAxMzksIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgNDgsIAorICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODMsIDE3NiwgODYsIDg2LCA4NiwgODYsIDg2LCAKKyAgICA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4MSwgMTM5LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA4NiwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCA4MSwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCkBAIC0xNjAyLDkgKzE2MTAsOSBAQAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MSwgNTEsIDUxLCA1MSwgNTEsIAogICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAogICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgODEsIDgxLCA4NiwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NiwgMTc3LCA4NiwgMTc4LCA4MSwgODEsIDgxLCA4MSwgCisgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgMTc3LCAxNzgsIDg2LCAxNzksIDgxLCA4MSwgODEsIDgxLCAKICAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzksIDg2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODAsIDg2LCAKICAgICA4MSwgODYsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKQEAgLTE2MTMsNyArMTYyMSw3IEBACiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgMzUsIDE4MCwgNDcsIDQ3LCA0NCwgNDcsIAorICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxODEsIDQ3LCA0NywgNDQsIDQ3LCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKQEAgLTE2MjUsNjUgKzE2MzMsNjUgQEAKICAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgNDMsIDQzLCAKICAgICA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAKICAgICA0MywgNDMsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDAsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAKLSAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDE4MSwgNDMsIDE4MSwgNDMsIDE4MSwgNDMsIDE4MSwgNDMsIDE4MSwgCi0gICAgNDMsIDE4MSwgNDMsIDE4MSwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODIsIDE4MiwgMTgyLCAKLSAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODIsIDE4MiwgMTgyLCAKLSAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODIsIDE4MiwgMTgyLCAKLSAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgCi0gICAgMTgyLCA1OCwgMTgxLCA1OCwgNTgsIDc2LCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODMsIDM4LCAxODMsIDE4MiwgCi0gICAgNzYsIDc2LCA3NiwgNDMsIDQzLCA0MywgMTgxLCAwLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgMCwgNzYsIDc2LCAKLSAgICA3NiwgNDMsIDQzLCA0MywgMTgxLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgzLCAzOCwgNzYsIDE4NCwgMTg0LCAKLSAgICAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODMsIDM4LCAxODMsIDE4MiwgMTg0LCA1OCwgMCwgMTg1LCAxODUsIAotICAgIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NywgMTg3LCAxODcsIDE4OCwgMTg5LCAKKyAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgCisgICAgNDMsIDE4MiwgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgCisgICAgMTgzLCA1OCwgMTgyLCA1OCwgNTgsIDc2LCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODQsIDM4LCAxODQsIDE4MywgCisgICAgNzYsIDc2LCA3NiwgNDMsIDQzLCA0MywgMTgyLCAwLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMCwgNzYsIDc2LCAKKyAgICA3NiwgNDMsIDQzLCA0MywgMTgyLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAzOCwgNzYsIDE4NSwgMTg1LCAKKyAgICAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODQsIDM4LCAxODQsIDE4MywgMTg1LCA1OCwgMCwgMTg2LCAxODYsIAorICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE3NCwgMTc0LCAxNzQsIDE4OCwgMTg5LCAKICAgICAxOTAsIDE5MSwgODQsIDE5MCwgMTkwLCAxOTAsIDIyLCAxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTkzLCAxOTQsIDE5NSwgCiAgICAgMTk2LCAyMiwgMjIsIDIyLCAxMzgsIDE5NywgMTk3LCAxOTcsIDIyLCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAKICAgICAyMDQsIDIxLCAyMDUsIDExMCwgMjA1LCAyMDYsIDIwNywgMjIsIDE5MiwgMTkyLCAxMzgsIDI4LCAzNiwgMjIsIDE5MiwgCiAgICAgMTM4LCAxOTcsIDIwOCwgMjA4LCAxMzgsIDEzOCwgMTM4LCAyMDksIDE2MywgMTY0LCAxOTIsIDE5MiwgMTkyLCAxMzgsIAogICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgNzgsIDEzOCwgMjA4LCAxMzgsIDEzOCwgMTkyLCAxMzgsIDEzOCwgCi0gICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NiwgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDIxMCwgNTEsIDAsIDAsIDM0LCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjExLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjEwLCAzNCwgMzQsIDM0LCAzNCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAKLSAgICAyMTAsIDIxMSwgMjExLCAyMTIsIDIxMywgMjE0LCAwLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCi0gICAgNTEsIDUxLCA1MSwgMCwgMCwgMCwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAyMTYsIDIxNywgODUsIDg1LCAKLSAgICAyMywgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgMTc1LCAxNzUsIDgxLCA4MSwgCi0gICAgODEsIDgxLCAxNzUsIDE3NSwgMTc1LCA4MSwgODEsIDgyLCA4MiwgODIsIDgyLCA4MSwgODIsIDgyLCA4MiwgMTc1LCAxNzUsIAotICAgIDgxLCA4NiwgODEsIDE3NSwgMTc1LCA4NiwgODYsIDg2LCA4NiwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDIxOCwgMjE4LCA0OSwgMjE5LCAyNiwgMjE5LCAyMTgsIDQ5LCAyNiwgMjE5LCAzNSwgNDksIDQ5LCAKLSAgICA0OSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0NiwgMjYsIDQ5LCAyMTksIDI2LCA3OCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAyNiwgCi0gICAgMjYsIDIxOCwgMjE5LCAyMTksIDI2LCA0OSwgMjYsIDIyMCwgMjYsIDQ5LCAyNiwgMTgzLCAyMjAsIDQ5LCA0OSwgMjIxLCAKLSAgICAzNSwgNDksIDQ5LCA0NCwgNDksIDM1LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDM1LCAyNiwgMjE4LCAzNSwgMzUsIDQ5LCA0OSwgCi0gICAgMjIyLCA3OCwgNzgsIDc4LCA3OCwgNDksIDM1LCAzNSwgMzUsIDM1LCAyNiwgNzgsIDI2LCAyNiwgNDcsIDgwLCAyMjMsIAotICAgIDIyMywgMjIzLCAzNywgMzcsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDM3LCAzNywgMzcsIDM3LCAyMjMsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjUsIAotICAgIDIyNSwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI1LCAKLSAgICAyMjUsIDIyNSwgMjI1LCAxNzMsIDE3MywgMTczLCA0NCwgNDcsIDE3MywgMTczLCAxNzMsIDE3MywgMzcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyMjYsIDIyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI2LCAyNiwgMjYsIDI2LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTg3LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMCwgMjEwLCAyMTEsIDIxMiwgCisgICAgMjEzLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAyMTQsIDUxLCAwLCAwLCAzNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAKKyAgICAyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIxNCwgMzQsIDM0LCAzNCwgMzQsIDIxNCwgMjE0LCAyMTQsIAorICAgIDIxNCwgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCisgICAgNTEsIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjIwLCAyMjEsIDg1LCAKKyAgICA4NSwgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCAxNzYsIDE3NiwgCisgICAgODEsIDgxLCA4MSwgODEsIDE3NiwgMTc2LCAxNzYsIDgxLCA4MSwgODIsIDgyLCA4MiwgODIsIDgxLCA4MiwgODIsIDgyLCAKKyAgICAxNzYsIDE3NiwgODEsIDg2LCA4MSwgMTc2LCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyLCAyMjIsIDQ5LCAyMjMsIDI2LCAyMjMsIDIyMiwgNDksIDI2LCAyMjMsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ2LCAyNiwgNDksIDIyMywgMjYsIDc4LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDI2LCAyNiwgMjIyLCAyMjMsIDIyMywgMjYsIDQ5LCAyNiwgMjI0LCAyNiwgNDksIDI2LCAxODQsIDIyNCwgNDksIDQ5LCAKKyAgICAyMjUsIDM1LCA0OSwgNDksIDQ0LCA0OSwgMzUsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMzUsIDI2LCAyMjIsIDM1LCAzNSwgNDksIAorICAgIDQ5LCAyMjYsIDc4LCA3OCwgNzgsIDc4LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDI2LCA3OCwgMjYsIDI2LCA0NywgODAsIDIyNywgCisgICAgMjI3LCAyMjcsIDM3LCAzNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNywgMzcsIDM3LCAzNywgMzcsIDIyNywgMjI4LCAKKyAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIyOSwgCisgICAgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAorICAgIDIyOSwgMjI5LCAyMjksIDE3MywgMTczLCAxNzMsIDQ0LCA0NywgMTczLCAxNzMsIDE3MywgMTczLCAzNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDIzMCwgMjMwLCAyNiwgMjYsIDI2LCAyNiwgCisgICAgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzAsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyNywgMjI2LCAyMjYsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMxLCAyMzAsIDIzMCwgMjYsIDI2LCA0MCwgMjYsIDQwLCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNDAsIDIyOCwgMjI5LCAyMjksIDIzMCwgNzgsIDc4LCA0MCwgMjI5LCAyMzAsIAotICAgIDIyOCwgMjI5LCAyMzAsIDIyOCwgNzgsIDQwLCA3OCwgMjI5LCAyMzEsIDIzMiwgNzgsIDIyOSwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjksIDIyOCwgMjI4LCAyMjksIDQwLCAyMjksIDIyOSwgMjI4LCAyMjgsIDQwLCAyMzAsIDQwLCAyMzAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCAyMjksIDIzMywgMjIyLCAyMjksIDIyMiwgMjIyLCAyMjgsIDIyOCwgMjI4LCA0MCwgNDAsIDQwLCA0MCwgNzgsIDIyOCwgCi0gICAgNzgsIDIyOCwgMjI5LCAyMjksIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjI4LCAyMjgsIDIzMCwgMjI4LCAyMjgsIDIzMCwgMjI5LCAKLSAgICAyMzAsIDIyOCwgMjI4LCAyMjksIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI5LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIzNCwgNDAsIDIzMCwgNzgsIDIyOSwgMjI5LCAyMjksIDIyOSwgMjI4LCAKLSAgICAyMjgsIDIyOSwgMjI5LCA3OCwgMjI2LCAyMzQsIDIzNCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjI4LCAyMjgsIAotICAgIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjI5LCAyMjksIDIzMCwgMjMwLCAKLSAgICAyMjksIDIyOSwgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIAotICAgIDQwLCA3OCwgNzgsIDIyOCwgNDAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA0MCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI5LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgCi0gICAgMjMwLCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjMwLCAyMzAsIDc4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDIyOCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzNSwgMjM2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA0MCwgMjMyLCAyMzMsIDIzMywgMjM0LCA3OCwgNzgsIDQwLCAyMzMsIDIzNCwgCisgICAgMjMyLCAyMzMsIDIzNCwgMjMyLCA3OCwgNDAsIDc4LCAyMzMsIDIzNSwgMjM2LCA3OCwgMjMzLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDIzMywgMjMyLCAyMzIsIDIzMywgNDAsIDIzMywgMjMzLCAyMzIsIDIzMiwgNDAsIDIzNCwgNDAsIDIzNCwgNDAsIDQwLCA0MCwgCisgICAgNDAsIDIzMywgMjM3LCAyMjYsIDIzMywgMjI2LCAyMjYsIDIzMiwgMjMyLCAyMzIsIDQwLCA0MCwgNDAsIDQwLCA3OCwgMjMyLCAKKyAgICA3OCwgMjMyLCAyMzMsIDIzMywgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzMsIAorICAgIDIzNCwgMjMyLCAyMzIsIDIzMywgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzMsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjM4LCA0MCwgMjM0LCA3OCwgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzIsIAorICAgIDIzMiwgMjMzLCAyMzMsIDc4LCAyMzAsIDIzOCwgMjM4LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzIsIDIzMiwgCisgICAgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzMsIDIzMywgMjM0LCAyMzQsIAorICAgIDIzMywgMjMzLCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgCisgICAgNDAsIDc4LCA3OCwgMjMyLCA0MCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDQwLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgNzgsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgMjMyLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjM5LCAyNDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCkBAIC0xNzAzLDE0ICsxNzExLDE0IEBACiAgICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCiAgICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIyMywgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAotICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKLSAgICAyMzgsIDIzOCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAorICAgIDM0LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyMjcsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKKyAgICAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKQEAgLTE3NDUsMTQgKzE3NTMsMTQgQEAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIAotICAgIDE2MywgMTY0LCAxNjMsIDE2NCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCiAgICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAogICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAxNjMsIDE2NCwgNzgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCA5LCAxMCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMyLCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCAxNjMsIDE2NCwgNzgsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCA5LCAxMCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCkBAIC0xNzY5LDMwICsxNzc3LDMwIEBACiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCiAgICAgMTYzLCAxNjQsIDksIDEwLCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgCi0gICAgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjIyLCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCA3OCwgMjI4LCA3OCwgNzgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAKKyAgICAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMjYsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgCi0gICAgMjIyLCAyMTIsIDIxMiwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjM5LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgNzgsIDIyOCwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgCisgICAgMjI2LCAyMTYsIDIxNiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjQzLCA3OCwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgNzgsIDIzMiwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIApAQCAtMTgzOCwxMDUgKzE4NDYsMTA1IEBACiAgICAgMTM4LCA1MiwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgODQsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MSwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAyNDIsIDI0MywgMjQzLCAyNDMsIAotICAgIDI0MCwgMjQ0LCAxNzAsIDI0NSwgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAKLSAgICAyNDAsIDI0MCwgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MCwgCi0gICAgMjQwLCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNTEsIDI1MiwgMjUzLCAyNTQsIAotICAgIDI1NSwgMjU1LCAyNDgsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDEsIDI0MCwgMjU2LCAyNTYsIDI1NiwgMjQ0LCAKLSAgICAxNzAsIDI0MywgMjQwLCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgCi0gICAgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAKLSAgICAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ1LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDI0NiwgMjQ3LCAyNDcsIDI0NywgCisgICAgMjQ0LCAyNDgsIDE3MCwgMjQ5LCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIAorICAgIDI0NCwgMjQ0LCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU0LCAKKyAgICAyNDQsIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI1NSwgMjU2LCAyNTcsIDI1OCwgCisgICAgMjU5LCAyNTksIDI1MiwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDgsIDI0NSwgMjQ0LCAyNjAsIDI2MCwgMjYwLCAyNDgsIAorICAgIDE3MCwgMjQ3LCAyNDQsIDI2LCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIAorICAgIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMCwgMCwgMjU4LCAyNTgsIDI1OSwgMjU5LCAyNDQsIDI2MCwgMjYxLCAKLSAgICAyNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgCi0gICAgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDAsIDAsIDI2MiwgMjYyLCAyNjMsIDI2MywgMjQ4LCAyNjQsIDI2NSwgCisgICAgMjUyLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIAorICAgIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDE3MCwgMjU3LCAyNTcsIDI1NywgMjU3LCAyNDMsIDI0NCwgMjQ0LCAyNjAsIDI2MSwgMCwgMCwgMCwgMCwgCisgICAgMjYxLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNDcsIDI0OCwgMjQ4LCAyNjQsIDI2NSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMCwgMjYyLCAyNjIsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2MywgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAxNzAsIDE3MCwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAwLCAyNjYsIDI2NiwgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI0MSwgMjQxLCAwLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNDEsIDI2NiwgMjY2LCAKLSAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjYyLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI0MSwgMjQxLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMCwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjQ1LCAyNzAsIDI3MCwgCisgICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI2NiwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNzAsIDI3MCwgMjcwLCAyNzAsIAorICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk2Miw3ICsxOTcwLDcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNDQsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCkBAIC0xOTcxLDExICsxOTc5LDExIEBACiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDAsIDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTcwLCAxNzAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCA1MywgNTMsIDUzLCA1MywgCiAgICAgNTMsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDEzOCwgMTM4LCAKQEAgLTE5OTksNyArMjAwNyw3IEBACiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDQsIDQ3LCA0NCwgCi0gICAgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI2NywgMjY3LCA0NCwgNDcsIDQ0LCAKKyAgICA0NywgNDQsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA1MiwgMjcxLCAyNzEsIDQ0LCA0NywgNDQsIAogICAgIDQ3LCAwLCA0NCwgNDcsIDQ0LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ3LCA0NCwgCiAgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTIwMDgsNyArMjAxNiw3IEBACiAgICAgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCAxNDIsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzksIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDgwLCA4MCwgODUsIDIyNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMCwgMCwgMCwgMCwgCkBAIC0yMDI0LDEzICsyMDMyLDEzIEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgODYsIAogICAgIDg2LCA4NiwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDE3MCwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKICAgICAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAKLSAgICAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxNzQsIDgzLCA4MywgCisgICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc1LCA4MywgODMsIAogICAgIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTIwNjAsNDk3ICsyMDY4LDQ5NiBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCA4MywgMTM5LCAKICAgICAxNDIsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAxNzAsIDE3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAxNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDE3MCwgMjcwLCAyNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDI3MSwgMjcyLCAyNzEsIDI3MywgMjczLCAyNzMsIDI3MywgCi0gICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDIxMSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIAotICAgIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAwLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMCwgMjcxLCAwLCAyNzEsIDI3MSwgCi0gICAgMCwgMjcxLCAyNzEsIDAsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MywgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDI3NCwgCisgICAgMCwgMCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjc0LCAyNzQsIAogICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKLSAgICAyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTk1LCAyNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMTcwLCAxNzAsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMTcwLCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDE3MCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAxNzAsIDI3NCwgMjc0LCAxNzAsIDE3MCwgMTcwLCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMCwgMCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAyNzYsIDI2LCAwLCAwLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzgsIDI3OSwgCi0gICAgMjc3LCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjc3LCAyODAsIDI4MCwgMjgxLCAyODEsIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAKLSAgICAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjQzLCAyNDMsIDI3OCwgMjc5LCAyNzcsIDI3NywgCi0gICAgMjc3LCAyNzcsIDI4MSwgMjgxLCAyODEsIDI4MiwgMjc3LCAyODIsIDAsIDI3NywgMjgyLCAyNzcsIDI3NywgMjgwLCAyODMsIAotICAgIDI4NCwgMjgzLCAyODQsIDI4MywgMjg0LCAyODUsIDI3NywgMjc3LCAyODYsIDI4NywgMjg4LCAyODgsIDI4OSwgMCwgMjc3LCAKLSAgICAyOTAsIDI4NSwgMjc3LCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMTcsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMTg3LCAwLCAyOTEsIDI5MSwgMjkyLCAyOTMsIDI5MiwgMjkxLCAKLSAgICAyOTEsIDI5NCwgMjk1LCAyOTEsIDI5NiwgMjk3LCAyOTgsIDI5NywgMjk3LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgCi0gICAgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5NywgMjkxLCAzMDAsIDMwMSwgMzAwLCAyOTEsIDI5MSwgMzAyLCAzMDIsIAotICAgIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAKLSAgICAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDI5NCwgMjkxLCAyOTUsIDMwMywgCi0gICAgMzA0LCAzMDMsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAotICAgIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKLSAgICAyOTQsIDMwMSwgMjk1LCAzMDEsIDI5NCwgMjk1LCAzMDYsIDMwNywgMzA4LCAzMDYsIDMwNiwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMTAsIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMxMCwgMzEwLCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDAsIDAsIDAsIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDAsIDAsIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDAsIDAsIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDAsIDAsIDMwOSwgMzA5LCAzMDksIAotICAgIDAsIDAsIDAsIDI5MywgMjkzLCAzMDEsIDMwMywgMzExLCAyOTMsIDI5MywgMCwgMzEyLCAzMTMsIDMxMywgMzEzLCAzMTMsIAotICAgIDMxMiwgMzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTQsIDMxNCwgMzE0LCAyNiwgMzAsIDAsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCA4MywgMTM4LCA4MywgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDI3NSwgMjc2LCAyNzUsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAKKyAgICAyNzcsIDI3NywgMjc3LCAyNzcsIDIxNSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgCisgICAgMjc1LCAyNzUsIDI3NSwgMjc1LCAwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMCwgMjc1LCAwLCAyNzUsIDI3NSwgMCwgCisgICAgMjc1LCAyNzUsIDAsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NywgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDI3OCwgMjc4LCAKKyAgICAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxOTUsIDI3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAyODAsIDI2LCAwLCAwLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKKyAgICA3MSwgNzEsIDcxLCA3MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODIsIDI4MywgMjgxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxLCAKKyAgICAyODQsIDI4NCwgMjg1LCAyODUsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgCisgICAgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjQ3LCAyNDcsIDI4MiwgMjgzLCAyODEsIDI4MSwgMjgxLCAyODEsIAorICAgIDI4NSwgMjg1LCAyODUsIDI4NiwgMjgxLCAyODYsIDAsIDI4MSwgMjg2LCAyODEsIDI4MSwgMjg0LCAyODcsIDI4OCwgMjg3LCAKKyAgICAyODgsIDI4NywgMjg4LCAyODksIDI4MSwgMjgxLCAyOTAsIDI5MSwgMjkyLCAyOTIsIDI5MywgMCwgMjgxLCAyOTQsIDI4OSwgCisgICAgMjgxLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMTgsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMTc0LCAwLCAyOTUsIDI5NSwgMjk2LCAyOTcsIDI5NiwgMjk1LCAyOTUsIDI5OCwgCisgICAgMjk5LCAyOTUsIDMwMCwgMzAxLCAzMDIsIDMwMSwgMzAxLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIAorICAgIDMwMywgMzAzLCAzMDMsIDMwMSwgMjk1LCAzMDQsIDMwNSwgMzA0LCAyOTUsIDI5NSwgMzA2LCAzMDYsIDMwNiwgMzA2LCAKKyAgICAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCisgICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDI5OCwgMjk1LCAyOTksIDMwNywgMzA4LCAzMDcsIAorICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKKyAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAyOTgsIDMwNSwgCisgICAgMjk5LCAzMDUsIDI5OCwgMjk5LCAzMTAsIDMxMSwgMzEyLCAzMTAsIDMxMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxNCwgMzE0LCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIAorICAgIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDAsIDI5NywgCisgICAgMjk3LCAzMDUsIDMwNywgMzE1LCAyOTcsIDI5NywgMCwgMzE2LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNiwgMzE2LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDMxOCwgMzE4LCAyNiwgMzAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCAwLCAwLCAwLCA4MywgMTM4LCA4MywgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNTMsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODYsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODYsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA4MywgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgCi0gICAgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMCwgMCwgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDEwNywgMCwgMCwgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNCwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMzE2LCAzMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMCwgMCwgMCwgMTM4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTM1LCAxMzUsIDEzNSwgMCwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzNSwgODYsIDEzNSwgODEsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgODEsIDE3NSwgCi0gICAgODYsIDAsIDAsIDAsIDAsIDE0MiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAzMTYsIDMxNiwgMTA0LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMzE2LCAzMTYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIAotICAgIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAKLSAgICAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAwLCAxMzksIDEzNSwgCi0gICAgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNDIsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCi0gICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIAotICAgIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxNDIsIDE0MSwgODMsIDgzLCAKLSAgICAxODgsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDksIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM5LCAxMzUsIDE1MCwgMTUwLCAxMzUsIDEzNSwgMTM1LCAxNDIsIDE0MiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzQsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE3NCwgMTQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgCi0gICAgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDgsIDQ4LCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgODMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAwLCAxMDQsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAKKyAgICAzMjAsIDAsIDAsIDAsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzYsIDg2LCAwLCAwLCAwLCAwLCAxNDIsIAorICAgIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQsIDEwNCwgCisgICAgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMzIwLCAzMjAsIAorICAgIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDAsIDAsIDAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMCwgMTM5LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTQyLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAKKyAgICA4MywgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAorICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTQyLCAxNDEsIDgzLCA4MywgMTg4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODEsIDgxLCA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMTQ5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM1LCAxNTAsIDE1MCwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTQyLCAxNDIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIAorICAgIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc1LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgODMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgCisgICAgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNzUsIDE0NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAogICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgMCwgMCwgCisgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDUzLCA1MywgNTMsIAorICAgIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIAotICAgIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOSwgMzE5LCAKLSAgICAxNzUsIDE3NSwgMTc1LCA4MCwgODAsIDgwLCAzMjAsIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4MCwgODAsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODYsIDg2LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOCwgMzE4LCAKLSAgICAzMTgsIDMxOCwgMzE4LCAzMTgsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjMsIDMyMywgMTc2LCAxNzYsIDE3NiwgODAsIDgwLCA4MCwgCisgICAgMzI0LCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDg2LCAKKyAgICA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODAsIDgwLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4NiwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgCi0gICAgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDgxLCA4MSwgODEsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDAsIDQ5LCA0OSwgMCwgMCwgNDksIDAsIDAsIDQ5LCA0OSwgMCwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAwLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCAKKyAgICA0OSwgNDksIDAsIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAKKyAgICA0OSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAKLSAgICA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCA0OSwgMzUsIDAsIDAsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDAsIDAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDAsIAotICAgIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgCi0gICAgMCwgMTMwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMzUsIDAsIDAsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIAorICAgIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDAsIDAsIDAsIDEzMSwgMCwgMTMxLCAKKyAgICAwLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIAorICAgIDAsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OCwgNzgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAzMjMsIDAsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMjE4LCAyMTgsIDAsIDAsIDAsIDAsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAyMzcsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OCwgNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAzMjcsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMjIyLCAyMjIsIDAsIDAsIDAsIDAsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAyNDEsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCkBAIC0yNTYwLDc3ICsyNTY3LDc2IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCi0gICAgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIApAQCAtMjY0MywxNyArMjY0OSwxNyBAQAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAwLCAKLSAgICAwLCAKKyAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAwLCAwLCAKIH07CiAKIC8qIGRlY29tcG9zaXRpb24gZGF0YSAqLwpAQCAtNTE3OCw3ICs1MTg0LDYgQEAKIAl7IDI1NSwgNywgOCwgMjU1LCAwIH0sCiAJeyAyNTUsIDcsIDksIDI1NSwgMCB9LAogCXsgMSwgNSwgMjU1LCAyNTUsIDAgfSwKLQl7IDE1LCAxNCwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMTAsIDI1NSwgMjU1LCAwIH0sCiAJeyAxOCwgMjU1LCAyNTUsIDI1NSwgMCB9LAogCXsgMTksIDI1NSwgMjU1LCAyNTUsIDAgfSwKQEAgLTUxOTEsNiArNTE5Niw3IEBACiAJeyAyNTUsIDI1NSwgOSwgMjU1LCAwIH0sCiAJeyAxOSwgMzAsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDgsIDI1NSwgMjU1LCAwIH0sCisJeyAyNTUsIDI3LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyMiwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjMsIDI1NSwgMjU1LCAwIH0sCiAJeyA5LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MjA1LDggKzUyMTEsOCBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2hhbmdlc18zXzJfMF9pbmRleFtdID0gewogICAgIDAsIDEsIDIsIDIsIDMsIDQsIDUsIDYsIDIsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIAogICAgIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDIsIDIsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgCi0gICAgMzYsIDIsIDIsIDIsIDM3LCAzOCwgMiwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgCi0gICAgNTEsIDIsIDUyLCAyLCAyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDIsIDIsIDU4LCA1OSwgNjAsIDIsIDIsIDYxLCA2MiwgNjMsIAorICAgIDM2LCAyLCAyLCAyLCAzNywgMzgsIDIsIDM5LCAyLCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgCisgICAgNTAsIDIsIDUxLCAyLCAyLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDIsIDU3LCA1OCwgNTksIDYwLCAyLCAyLCA2MSwgNjIsIDYzLCAKICAgICA2NCwgNjUsIDY1LCAyLCAyLCAyLCAyLCA2NiwgMiwgNjcsIDY4LCA2OSwgNzAsIDcxLCAyLCAyLCAyLCA3MiwgNzMsIDc0LCAKICAgICA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgMiwgMiwgMiwgMiwgMiwgMiwgODIsIDIsIDIsIDIsIDIsIDIsIDgzLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyMTcsOCArNTIyMyw4IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NCwgOTUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk2LCA1MCwgNTAsIAotICAgIDk3LCA5OCwgNTAsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgNDksIDQ5LCAKKyAgICA5NywgOTgsIDQ5LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTIyOSwxMyArNTIzNSwxMyBAQAogICAgIDExOSwgMTIwLCAxMjEsIDEyMiwgMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDIsIDIsIDIsIDIsIDIsIDIsIDEyOCwgMiwgCiAgICAgMTI5LCAxMzAsIDEzMSwgMiwgMTMyLCAyLCAxMzMsIDIsIDIsIDIsIDEzNCwgMiwgMiwgMiwgMTM1LCAxMzYsIDEzNywgMTM4LCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMzksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE0MCwgMiwgMTQxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCi0gICAgNTAsIDE0MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTQwLCAyLCAxNDEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMTQyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgMTQzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgMTQzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAxNDQsIDE0NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjYyLDkgKzUyNjgsOSBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIAotICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAotICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc4LCA1MCwgMTc5LCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3OCwgNDksIDE3OSwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01NTA1LDcgKzU1MTEsNyBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCAxODAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCAxODAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTYyNyw3ICs1NjMzLDcgQEAKICAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKICAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTU3ODcsNzA5ICs1NzkzLDI2NyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgNCwgMCwgMCwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgMSwgMSwgMCwgMCwgMCwgCisgICAgNCwgMzUsIDgsIDYsIDcsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDEsIDEsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ1LCA0NiwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgNCwgMCwgMCwgMzcsIDM4LCAzOSwgNDAsIAotICAgIDQxLCA0MiwgMSwgMSwgMCwgMCwgMCwgNCwgMzYsIDgsIDYsIDcsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1LCAKLSAgICA0NiwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIAogICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMTksIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCAxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNCwgMTQsIDE0LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIAotICAgIDAsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIDAsIDAsIAotICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgOSwgMCwgCi0gICAgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNjQ5NywxNSArNjA2MSwyMCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTY1MTUsMzMgKzYwODQsNDcwIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCAxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNCwgMTQsIDE0LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgCisgICAgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCisgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFuZ2VfcmVjb3JkKiBnZXRfY2hhbmdlXzNfMl8wKFB5X1VDUzQgbikKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaCBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaAppbmRleCAzODM4ODgyLi43Y2NiMTI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKKysrIGIvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCkBAIC02LDcgKzYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGV4aWNvbltdID0gewogICAgIDc2LCA2OSwgODQsIDg0LCA2OSwgMjEwLCA4NywgNzMsIDg0LCAyMDAsIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDc2LCAKICAgICAxOTcsIDgzLCA3NywgNjUsIDc2LCAyMDQsIDgzLCA3MywgNzEsIDIwNiwgNjcsIDY1LCA4MCwgNzMsIDg0LCA2NSwgMjA0LCAKLSAgICA3NiwgNjUsIDg0LCA3MywgMjA2LCA4OSwgMjAxLCA2NywgNzQsIDIwMywgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDc3LCAKKyAgICA3NiwgNjUsIDg0LCA3MywgMjA2LCA4OSwgMjAxLCA2NSwgODIsIDY1LCA2NiwgNzMsIDE5NSwgNjcsIDc0LCAyMDMsIDc3LCAKICAgICA2NSwgODQsIDcyLCA2OSwgNzcsIDY1LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDg5LCA4MCwgODQsIDczLCA2NSwgCiAgICAgMjA2LCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCAyMDAsIDY3LCA3OSwgNzcsIDgwLCA2NSwgODQsIDczLCAKICAgICA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNjcsIDg1LCA3OCwgNjksIDczLCA3MCwgNzksIDgyLCAyMDUsIDgzLCA4OSwgNzcsIApAQCAtMjcsMjQgKzI3LDI0IEBACiAgICAgNzUsIDY1LCA3OCwgMTkzLCAxOTQsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCAyMTAsIDY4LCA3OSwgMjEyLCA3NSwgCiAgICAgNjUsIDc4LCA3MSwgODgsIDIwMSwgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDg0LCA3MywgNjYsIDY5LCAKICAgICA4NCwgNjUsIDIwNiwgNzksIDE5OCwgNzMsIDc4LCA3MywgODQsIDczLCA2NSwgMjA0LCA3NywgNjksIDY5LCAyMDUsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgNzUsIDcyLCA3NywgNjksIAotICAgIDIxMCwgODUsIDEyOCwgODcsIDcyLCA3MywgODQsIDE5NywgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCA3MywgMTI4LCAKLSAgICA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgNzksIDEyOCwgNjUsIDY2LCA3OSwgODYsIDE5NywgNzcsIDY1LCA4MiwgNzUsIAotICAgIDEyOCwgODksIDY5LCAyMDAsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA4MCwgNzIsIAotICAgIDY1LCA4MywgNjksIDQ1LCAxOTcsIDc3LCA3OSwgNzgsIDcxLCA3OSwgNzYsIDczLCA2NSwgMjA2LCA2OCwgNjksIDg2LCA2NSwgCi0gICAgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDY2LCA3NiwgNjUsIDY3LCAyMDMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg5LCAKLSAgICA3NywgNjYsIDc5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgOTAsIDY5LCAxOTYsIAotICAgIDg0LCA3MiwgNjUsIDIwNSwgNzQsIDc5LCA3OCwgNzEsIDgzLCA2OSwgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCA3NSwgCi0gICAgNjksIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA2NiwgNzksIDIxNiwgNzIsIDY5LCA2NiwgODIsIDY5LCAKLSAgICAyMTUsIDc3LCA3MywgNjUsIDIwNywgODAsIDc2LCA4NSwgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIAotICAgIDY4LCAyMTEsIDcxLCA2OSwgNzksIDgyLCA3MSwgNzMsIDY1LCAyMDYsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIDcxLCAKLSAgICAyMTEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgCisgICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDg1LCAxMjgsIDc1LCAKKyAgICA3MiwgNzcsIDY5LCAyMTAsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDY3LCA2NSwgODIsIAorICAgIDgyLCA3MywgNjksIDIxMCwgNzMsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDg5LCA2OSwgMjAwLCA3OSwgMTI4LCAKKyAgICA3NywgNjUsIDgyLCA3NSwgMTI4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgODAsIAorICAgIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgNjgsIDY5LCA4NiwgCisgICAgNjUsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA2NiwgNzYsIDY1LCA2NywgMjAzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDkwLCA2OSwgCisgICAgMTk2LCA4NCwgNzIsIDY1LCAyMDUsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCAKKyAgICA3OSwgNzUsIDY5LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIAorICAgIDgyLCA2OSwgMjE1LCA3NywgNzMsIDY1LCAyMDcsIDgwLCA3NiwgODUsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgCisgICAgNjUsIDgyLCA2OCwgMjExLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCAKKyAgICA3MSwgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIAogICAgIDIwMCwgNjYsIDY1LCA3NiwgNzMsIDc4LCA2OSwgODMsIDE5NywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgMjEzLCA4NCwgODcsIAogICAgIDc5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NiwgCi0gICAgNjUsIDc2LCA2NywgNzIsIDY5LCA3NywgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA3MywgMTk1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgMTI4LCA2NSwgNzYsIDY5LCAxOTgsIDg0LCA4NywgMjA3LCAKLSAgICA3MiwgNjksIDY1LCA4NiwgMjE3LCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIDIxMiwgNzksIDg2LCA2OSwgCi0gICAgMjEwLCA2NiwgODIsIDY1LCA3MiwgNzcsIDIwMSwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDg1LCAyMDgsIDc2LCA3OSwgCisgICAgNjUsIDc2LCA2NywgNzIsIDY5LCA3NywgNzMsIDY3LCA2NSwgMjA0LCA2NSwgNzYsIDY5LCAxOTgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDc5LCAxMjgsIDg0LCA4NywgMjA3LCAKKyAgICA3MiwgNjksIDY1LCA4NiwgMjE3LCA3OSwgODYsIDY5LCAyMTAsIDY3LCA3OSwgNzgsIDgzLCA3OSwgNzgsIDY1LCA3OCwgCisgICAgMjEyLCA2NiwgODIsIDY1LCA3MiwgNzcsIDIwMSwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDg1LCAyMDgsIDc2LCA3OSwgCiAgICAgMjE1LCA3MiwgNjUsIDIwMCwgNzksIDc4LCAxOTcsIDY4LCA3OSwgODcsIDIwNiwgNzIsIDczLCA3MSwgMjAwLCA3MCwgODUsIAogICAgIDc2LCA3NiwgODcsIDczLCA2OCwgODQsIDIwMCwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgODQsIDEyOCwgNjksIDgxLCA4NSwgCiAgICAgNjUsIDIwNCwgODQsIDY1LCAxOTksIDY2LCA2NSwgODIsIDEyOCwgNjgsIDc5LCA3NywgNzMsIDc4LCAyMDcsIDc4LCA4NSwgCkBAIC02NSw0OSArNjUsNDkgQEAKICAgICA3NiwgODUsIDE5NywgODMsIDcyLCA2NSwgODIsIDY1LCA2OCwgMTkzLCA4MywgNzMsIDc4LCA3MiwgNjUsIDc2LCAxOTMsIAogICAgIDc1LCA2NSwgMTI4LCA4MiwgODUsIDc4LCA3MywgMTk1LCA4MywgNjUsIDg1LCA4MiwgNjUsIDgzLCA3MiwgODQsIDgyLCAKICAgICAxOTMsIDg0LCA2OSwgODQsIDgyLCA2NSwgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNjksIDgzLCA2OSwgODIsIDY5LCAyMTIsIAotICAgIDg0LCA3MywgNzYsIDY4LCA2OSwgMTI4LCA3MSwgODUsIDgyLCA3NywgODUsIDc1LCA3MiwgMjAxLCA3NywgNjUsIDEyOCwgCi0gICAgNzcsIDY1LCA4OSwgNjksIDIwMywgNzcsIDY5LCA2OSwgODQsIDY5LCAyMDEsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjUsIDEyOCwgODksIDY1LCAKLSAgICAxMjgsIDc2LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA3MywgODgsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCAKLSAgICA2OSwgODAsIDY3LCA3MiwgMTkzLCA3OCwgNjUsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDc2LCA3OSwgNzgsIAotICAgIDE5OSwgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg1LCA4MiwgNzUsIDczLCAxOTUsIDcyLCA2NSwgNzcsIDkwLCAxOTMsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDIwNCwgNzksIDgwLCA2OSwgMjA2LCA4MiwgNjUsIDEyOCwgCi0gICAgODMsIDY1LCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4NiwgNzMsIDY5LCAyMTIsIDc2LCAKLSAgICA2NSwgMjA3LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgODgsIAotICAgIDEyOCwgOTAsIDkwLCA4OSwgODIsIDEyOCwgOTAsIDkwLCA4OSwgODAsIDEyOCwgOTAsIDkwLCA4OSwgNjUsIDEyOCwgOTAsIAotICAgIDkwLCA4OSwgMTI4LCA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDkwLCA4NSwgCi0gICAgODIsIDEyOCwgOTAsIDkwLCA4NSwgODAsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA5MCwgOTAsIDgzLCA4OSwgNjUsIDEyOCwgCi0gICAgOTAsIDkwLCA4MywgNjUsIDEyOCwgOTAsIDkwLCA3OSwgODgsIDEyOCwgOTAsIDkwLCA3OSwgODAsIDEyOCwgOTAsIDkwLCAKLSAgICA3OSwgMTI4LCA5MCwgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4MCwgMTI4LCAKLSAgICA5MCwgOTAsIDczLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA5MCwgOTAsIDczLCA2OSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCA5MCwgCi0gICAgNjksIDgwLCAxMjgsIDkwLCA5MCwgNjksIDY5LCAxMjgsIDkwLCA5MCwgNjksIDEyOCwgOTAsIDkwLCA2NSwgODgsIDEyOCwgCi0gICAgOTAsIDkwLCA2NSwgODQsIDEyOCwgOTAsIDkwLCA2NSwgODAsIDEyOCwgOTAsIDkwLCA2NSwgNjUsIDEyOCwgOTAsIDkwLCAKLSAgICA2NSwgMTI4LCA5MCwgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDg3LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3OCwgNzQsIAotICAgIDEyOCwgOTAsIDg3LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc0LCAxMjgsIDkwLCA4NywgNjUsIDgyLCA2NSwgCi0gICAgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgCi0gICAgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCA4NSwgNjYsIDg1LCAKLSAgICA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCA4NSwgMTgxLCA5MCwgODMsIDcyLCA2NSwgMTI4LCA5MCwgODIsIDY1LCAKLSAgICAxMjgsIDkwLCA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCA3OSwgNzksIDEyOCwgOTAsIDc5LCAKLSAgICA2NSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA3NiwgMTkzLCA5MCwgNzQsIDY5LCAKLSAgICAxMjgsIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgODIsIAotICAgIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAxMjgsIAotICAgIDkwLCA3MywgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgMjAxLCAKLSAgICA5MCwgNzIsIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgOTAsIAotICAgIDcyLCA4OSwgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCA2OSwgCi0gICAgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCA5MCwgCi0gICAgNzIsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIDcyLCAKLSAgICA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgNzIsIAotICAgIDg1LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAxMjgsIAotICAgIDkwLCA3MiwgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIDEyOCwgCi0gICAgOTAsIDcyLCA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIDY5LCAKLSAgICA4MCwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIDY1LCAKLSAgICA4OCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgMTI4LCAKLSAgICA5MCwgNzIsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgNzIsIAotICAgIDEyOCwgOTAsIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgNjksIAotICAgIDc4LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCA5MCwgCi0gICAgNjksIDUwLCAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCA5MCwgCi0gICAgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIAorICAgIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgCisgICAgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCAKKyAgICA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MCwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDEyOCwgODksIDY1LCAxMjgsIDc2LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA3MywgODgsIDEyOCwgNjksIAorICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCA2OSwgODAsIDY3LCA3MiwgMTkzLCA3OCwgNjUsIDEyOCwgODMsIDY5LCA4NiwgCisgICAgNjksIDc4LCAxMjgsIDc2LCA3OSwgNzgsIDE5OSwgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg1LCA4MiwgNzUsIDczLCAKKyAgICAxOTUsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDIwNCwgNzksIDgwLCA2OSwgMjA2LCA4MiwgNjUsIAorICAgIDEyOCwgODMsIDY1LCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4NiwgNzMsIDY5LCAyMTIsIAorICAgIDc2LCA2NSwgMjA3LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgCisgICAgODgsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDEyOCwgOTAsIDkwLCA4OSwgODAsIDEyOCwgOTAsIDkwLCA4OSwgNjUsIDEyOCwgCisgICAgOTAsIDkwLCA4OSwgMTI4LCA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDkwLCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDkwLCA4NSwgODAsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA5MCwgOTAsIDgzLCA4OSwgNjUsIAorICAgIDEyOCwgOTAsIDkwLCA4MywgNjUsIDEyOCwgOTAsIDkwLCA3OSwgODgsIDEyOCwgOTAsIDkwLCA3OSwgODAsIDEyOCwgOTAsIAorICAgIDkwLCA3OSwgMTI4LCA5MCwgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4MCwgCisgICAgMTI4LCA5MCwgOTAsIDczLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAKKyAgICA4MCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCAKKyAgICA5MCwgNjksIDgwLCAxMjgsIDkwLCA5MCwgNjksIDY5LCAxMjgsIDkwLCA5MCwgNjksIDEyOCwgOTAsIDkwLCA2NSwgODgsIAorICAgIDEyOCwgOTAsIDkwLCA2NSwgODQsIDEyOCwgOTAsIDkwLCA2NSwgODAsIDEyOCwgOTAsIDkwLCA2NSwgNjUsIDEyOCwgOTAsIAorICAgIDkwLCA2NSwgMTI4LCA5MCwgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDg3LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3OCwgCisgICAgNzQsIDEyOCwgOTAsIDg3LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc0LCAxMjgsIDkwLCA4NywgNjUsIDgyLCAKKyAgICA2NSwgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCA3OSwgODgsIAorICAgIDEyOCwgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCA4NSwgNjYsIAorICAgIDg1LCA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCA4NSwgMTgxLCA5MCwgODMsIDcyLCA2NSwgMTI4LCA5MCwgODIsIAorICAgIDY1LCAxMjgsIDkwLCA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCA3OSwgNzksIDEyOCwgOTAsIAorICAgIDc5LCA2NSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA3NiwgMTkzLCA5MCwgNzQsIAorICAgIDY5LCAxMjgsIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgCisgICAgODIsIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAKKyAgICAxMjgsIDkwLCA3MywgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgCisgICAgMjAxLCA5MCwgNzIsIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgCisgICAgOTAsIDcyLCA4OSwgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCAKKyAgICA2OSwgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCAKKyAgICA5MCwgNzIsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIAorICAgIDcyLCA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgCisgICAgNzIsIDg1LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAKKyAgICAxMjgsIDkwLCA3MiwgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIAorICAgIDEyOCwgOTAsIDcyLCA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIAorICAgIDY5LCA4MCwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIAorICAgIDY1LCA4OCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgCisgICAgMTI4LCA5MCwgNzIsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgCisgICAgNzIsIDEyOCwgOTAsIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgCisgICAgNjksIDc4LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCAKKyAgICA5MCwgNjksIDUwLCAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCAKKyAgICA5MCwgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIAogICAgIDEyOCwgOTAsIDY1LCA4MiwgODEsIDY1LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAxOTgsIDkwLCA2NSwgNzcsIDg4LCAxMjgsIAogICAgIDkwLCA2NSwgMjA0LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNjUsIDczLCAyMDYsIDkwLCA2NSwgNzMsIDEyOCwgOTAsIAogICAgIDY1LCA3MiwgMTI4LCA5MCwgNjUsIDIwMCwgOTAsIDY1LCA3MSwgMTI4LCA5MCwgNjUsIDY5LCA3MCwgMTI4LCA5MCwgNDgsIApAQCAtNTI1LDc5ICs1MjUsNzkgQEAKICAgICA4NCwgODUsIDg0LCA4NCwgODksIDEyOCwgODQsIDg1LCA4NCwgNjksIDg5LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4NCwgODUsIAogICAgIDg0LCAxMjgsIDg0LCA4NSwgODIsIDg4LCAxMjgsIDg0LCA4NSwgODIsIDg1LCAxMjgsIDg0LCA4NSwgODIsIDg0LCA3NiwgCiAgICAgNjksIDEyOCwgODQsIDg1LCA4MiwgNzksIDUwLCAxMjgsIDg0LCA4NSwgODIsIDc4LCA4MywgODQsIDczLCA3NiwgNjksIAotICAgIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAxOTYsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgCi0gICAgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgCi0gICAgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgCi0gICAgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIAotICAgIDEyOCwgODQsIDg1LCA3NiwgNzMsIDgwLCAxMjgsIDg0LCA4NSwgNzUsIDg3LCA2OSwgNzgsIDg0LCA3MywgODMsIDEyOCwgCi0gICAgODQsIDg1LCA3NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgODQsIDg1LCA3MSwgNTAsIDEyOCwgODQsIDg1LCAKLSAgICA3MSwgMTc4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCA2NSwgNjksIDgwLCAxMjgsIDg0LCA4NSwgNjUsIAotICAgIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIAotICAgIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgCi0gICAgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgCi0gICAgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgODQsIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCAKLSAgICA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MywgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCAKLSAgICA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIDEyOCwgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIAotICAgIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIDg0LCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgCi0gICAgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAKLSAgICA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIAotICAgIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgCi0gICAgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAKLSAgICAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY1LCAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCAKLSAgICA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgNjUsIDEyOCwgODQsIDgzLCA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODMsIAotICAgIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgMjAzLCA4NCwgODMsIDcyLCA2OSwgODMsIDEyOCwgCi0gICAgODQsIDgzLCA3MiwgNjksIDcxLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAxOTksIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCAKLSAgICA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIAotICAgIDgzLCA2NSwgNjgsIDIwMSwgODQsIDgzLCA2NSwgNjUsIDY4LCA3MywgODksIDEyOCwgODQsIDgzLCA2NSwgNjUsIDEyOCwgCi0gICAgODQsIDgzLCAxOTMsIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCAKLSAgICA4NCwgODIsIDg1LCA3OCwgNzUsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgODQsIDY5LCAxOTYsIDg0LCA4MiwgODUsIAotICAgIDc3LCA4MCwgNjksIDg0LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCA4MiwgODUsIDY3LCA3NSwgMTI4LCA4NCwgCi0gICAgODIsIDc5LCA4MCwgNzMsIDY3LCA2NSwgMjA0LCA4NCwgODIsIDc5LCA4MCwgNzIsIDg5LCAxMjgsIDg0LCA4MiwgNzksIDc3LCAKLSAgICA3MywgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIAotICAgIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAKLSAgICA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIAotICAgIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzYsIDc2LCA2OSwgODksIDY2LCA4NSwgODMsIDEyOCwgCi0gICAgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIAotICAgIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg1LCA3NywgODAsIDcyLCAxMjgsIDg0LCA4MiwgNzMsIDg0LCA3OSwgMjExLCA4NCwgCi0gICAgODIsIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgODMsIDczLCA3NywgNzksIAotICAgIDg1LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3OSwgNjgsIDEyOCwgCi0gICAgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgODQsIDgyLCA3MywgNzksIAotICAgIDIwNiwgODQsIDgyLCA3MywgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgCi0gICAgMjExLCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIAotICAgIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc2LCA3MywgCi0gICAgNjUsIDg0LCAxOTcsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIAotICAgIDIxMiwgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgCi0gICAgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgODQsIDgyLCAKLSAgICA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIDY1LCA3OCwgCi0gICAgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgMTI4LCAKLSAgICA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCA3OCwgNjgsIAotICAgIDEyOCwgODQsIDgyLCA2OSwgNzgsIDE5NiwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgMTI4LCA4NCwgCi0gICAgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNDksIAotICAgIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgNjgsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgODQsIDgyLCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgMTI4LCAKLSAgICA4NCwgODIsIDY1LCA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCA3OSwgCi0gICAgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCAyMTIsIDg0LCA4MiwgNjUsIDc4LCAKLSAgICA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgCi0gICAgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc3LCA4NywgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDc3LCAxMjgsIDg0LCAKLSAgICA4MiwgNjUsIDIwNSwgODQsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDczLCAyMDYsIDg0LCA4MiwgNjUsIAotICAgIDczLCA3NiwgNzMsIDc4LCAxOTksIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIDg0LCA4MiwgNjUsIDcwLCA3MCwgCi0gICAgNzMsIDE5NSwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODQsIDgyLCAKLSAgICA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA3OSwgODcsIDY5LCA4MiwgMTI4LCAKLSAgICA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAxMjgsIAotICAgIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4NCwgCi0gICAgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCA4MSwgMTI4LCAKLSAgICA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIAotICAgIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIDc5LCA3OCwgCi0gICAgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgNzksIDc4LCAKLSAgICA3MSwgODUsIDE5NywgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MywgCi0gICAgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIDc5LCAKLSAgICAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgNzYsIAotICAgIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCA4NCwgCi0gICAgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIAorICAgIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAxOTYsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCA4MiwgNzUsIDczLCA4MywgCisgICAgMjAwLCA4NCwgODUsIDgyLCA2NiwgNjUsIDc4LCAxMjgsIDg0LCA4NSwgODIsIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA4NCwgODUsIDc5LCA4NCwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCAKKyAgICAxMjgsIDg0LCA4NSwgNzgsIDc4LCA4OSwgMTI4LCA4NCwgODUsIDc3LCA2OSwgODQsIDY5LCA4MywgMTI4LCA4NCwgODUsIAorICAgIDc3LCA2NSwgNjksIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgODUsIDc2LCA3MywgODAsIDEyOCwgODQsIDg1LCA3NSwgCisgICAgODcsIDY5LCA3OCwgODQsIDczLCA4MywgMTI4LCA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCAKKyAgICA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODUsIAorICAgIDY1LCA2OSwgODAsIDEyOCwgODQsIDg1LCA2NSwgNjksIDEyOCwgODQsIDIxMywgODQsIDg0LCA4NSwgODUsIDEyOCwgODQsIAorICAgIDg0LCA4NSwgNjgsIDY4LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgCisgICAgODUsIDEyOCwgODQsIDg0LCA4NCwgNzIsIDY1LCAxMjgsIDg0LCA4NCwgODQsIDY1LCAxMjgsIDg0LCA4NCwgODMsIDg1LCAKKyAgICAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY5LCA2OSwgMTI4LCAKKyAgICA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIDgzLCA2NSwgMTI4LCA4NCwgODQsIDc5LCA3OSwgMTI4LCA4NCwgODQsIAorICAgIDczLCA3MywgMTI4LCA4NCwgODQsIDczLCAxMjgsIDg0LCA4NCwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDcyLCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCAKKyAgICA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIAorICAgIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDIwMCwgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2NSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA4NCwgNjUsIDg1LCAxMjgsIDg0LCA4NCwgNjUsIDczLCAxMjgsIDg0LCAKKyAgICA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgODQsIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIAorICAgIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIDgzLCA2OSwgMTI4LCA4NCwgODMsIDgzLCA2NSwgMTI4LCA4NCwgODMsIAorICAgIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAKKyAgICAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgNjksIAorICAgIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAxMjgsIAorICAgIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIDczLCA4OSwgCisgICAgMTI4LCA4NCwgODMsIDY1LCA2NSwgMTI4LCA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgCisgICAgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCAKKyAgICA4NCwgNjksIDE5NiwgODQsIDgyLCA4NSwgNzcsIDgwLCA2OSwgODQsIDEyOCwgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIAorICAgIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgNzksIDgwLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA4MiwgNzksIDgwLCA3MiwgCisgICAgODksIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDg0LCA4MiwgCisgICAgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODQsIAorICAgIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDg0LCA4MiwgCisgICAgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NiwgNzYsIAorICAgIDY5LCA4OSwgNjYsIDg1LCA4MywgMTI4LCA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgCisgICAgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgODQsIDgyLCA3MywgODUsIDc3LCA4MCwgNzIsIDEyOCwgODQsIDgyLCAKKyAgICA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIDgyLCA3MywgCisgICAgODAsIDc5LCA2OCwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgMTk3LCAKKyAgICA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIAorICAgIDY1LCA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgCisgICAgNzEsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCAKKyAgICA3OSwgNzYsIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIDEyOCwgODQsIDgyLCA3MywgNjgsIAorICAgIDY5LCA3OCwgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgCisgICAgODUsIDc2LCA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCAKKyAgICA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgCisgICAgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAKKyAgICAxMjgsIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIAorICAgIDc4LCA2OCwgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAKKyAgICAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIAorICAgIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgCisgICAgNzMsIDc4LCA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAKKyAgICAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIAorICAgIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDIxMiwgODQsIDgyLCA2NSwgCisgICAgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIAorICAgIDgzLCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzcsIDg3LCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgNzcsIDEyOCwgCisgICAgODQsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDY1LCA3MywgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzMsIDIwNiwgODQsIDgyLCAKKyAgICA2NSwgNzMsIDc2LCA3MywgNzgsIDE5OSwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgODQsIDgyLCA2NSwgNzAsIAorICAgIDcwLCA3MywgMTk1LCA4NCwgODIsIDY1LCA2OCwgMTk3LCA4NCwgODIsIDY1LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4NCwgCisgICAgODIsIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAKKyAgICAxMjgsIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIAorICAgIDEyOCwgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODIsIDY3LCA3MiwgMTI4LCA4NCwgNzksIAorICAgIDgxLCAxMjgsIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgCisgICAgNjksIDE5NiwgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDg0LCA3OSwgNzgsIDc5LCA4MywgMTI4LCA4NCwgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDg0LCAKKyAgICA3OSwgNzgsIDcxLCA4NSwgMTk3LCA4NCwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU2LCAxMjgsIAorICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTUsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgCisgICAgNDUsIDUzLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDc5LCA3OCwgNjksIAorICAgIDEyOCwgODQsIDc5LCA3OCwgNjUsIDIwNCwgODQsIDc5LCA3NywgODAsIDczLCAxMjgsIDg0LCA3OSwgNzcsIDY1LCA4NCwgCisgICAgNzksIDEyOCwgODQsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc1LCA4OSwgMjA3LCA4NCwgNzksIDczLCAKKyAgICA3NiwgNjksIDg0LCAxMjgsIDg0LCA3OSwgNzEsIDY5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA4NCwgNzksIDY4LCAyMDcsIAorICAgIDg0LCA3OSwgNjUsIDc4LCA2OCwgNjUsIDc1LCA3MiwgNzMsIDY1LCA4NCwgMTI4LCA4NCwgNzksIDY1LCAxMjgsIDg0LCA3OCwgCiAgICAgMTI4LCA4NCwgNzYsIDg2LCAxMjgsIDg0LCA3NiwgODUsIDEyOCwgODQsIDc2LCA3OSwgMTI4LCA4NCwgNzYsIDczLCAxMjgsIAogICAgIDg0LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA4NCwgNzYsIDcyLCA4NywgNjksIDEyOCwgODQsIDc2LCA3MiwgODUsIDEyOCwgCiAgICAgODQsIDc2LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDczLCAxMjgsIDg0LCAKQEAgLTc5Niw0MDkgKzc5Niw0MTAgQEAKICAgICA2OSwgODQsIDEyOCwgODMsIDg1LCA2NSwgNjksIDc4LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA4NSwgNjUsIAogICAgIDEyOCwgODMsIDIxMywgODMsIDg0LCA4OCwgMTI4LCA4MywgODQsIDg3LCA2NSwgMTI4LCA4MywgODQsIDg1LCA2OCwgODksIAogICAgIDEyOCwgODMsIDg0LCA4NSwgNjcsIDc1LCA0NSwgNzksIDg1LCAyMTIsIDgzLCA4NCwgODMsIDEyOCwgODMsIDg0LCA4MiwgCi0gICAgNzksIDc1LCA2OSwgODMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTcsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU2LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1NSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTQsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTEsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA0OSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgCi0gICAgNzUsIDY5LCA0NSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCAxOTcsIDgzLCA4NCwgODIsIDczLCA4MCwgNjksIAotICAgIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY4LCA2OSwgMTI4LCAKLSAgICA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODQsIDgyLCA2OSwgODQsIDY3LCA3MiwgNjksIDE5NiwgODMsIAotICAgIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCA4NCwgODIsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgCi0gICAgNjUsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg3LCA2NiwgNjksIDgyLCA4MiwgODksIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNjUsIDg0LCA4NSwgNzcsIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgMTI4LCA4MywgODQsIAotICAgIDgyLCA2NSwgODQsIDg1LCAyMDUsIDgzLCA4NCwgODIsIDY1LCA4NCwgNzMsIDY1LCAyMDYsIDgzLCA4NCwgODIsIDY1LCA3MywgCi0gICAgNzgsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCAKLSAgICA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA4NCwgODIsIDY1LCA3MywgNzAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIAotICAgIDcxLCA3MSwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgODQsIDc5LCA4NiwgNjksIDEyOCwgODMsIDg0LCA3OSwgCi0gICAgODIsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4NywgNjUsIDg0LCA2NywgNzIsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNjUsIDcxLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgCi0gICAgMTI4LCA4MywgODQsIDc5LCAyMDgsIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA4MywgODQsIDc5LCA2NywgNzUsIDEyOCwgCi0gICAgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA4MywgODQsIDczLCA3NiwgMjA0LCA4MywgODQsIDczLCA3NiwgMTk3LCAKLSAgICA4MywgODQsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNjksIDgwLCAxMjgsIDgzLCA4NCwgNjksIDc3LCAxMjgsIAotICAgIDgzLCA4NCwgNjksIDY1LCA3NywgNzMsIDc4LCAxOTksIDgzLCA4NCwgNjksIDY1LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgCi0gICAgMjA1LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCAKLSAgICA4MywgODQsIDY1LCA4NiwgODIsIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIAotICAgIDg0LCA4NSwgMTk3LCA4MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDgyLCA4MywgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODMsIDg0LCA2NSwgODIsIDIxMiwgODMsIDg0LCA2NSwgODIsIDgzLCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDgyLCA4MiwgNjksIDE5NiwgODMsIDg0LCA2NSwgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjUsIAotICAgIDgyLCAxMjgsIDgzLCA4NCwgNjUsIDIxMCwgODMsIDg0LCA2NSwgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgCi0gICAgODMsIDg0LCA2NSwgNzgsIDY4LCA2NSwgODIsIDE5NiwgODMsIDg0LCA2NSwgNzgsIDY4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3MCwgNzAsIDEyOCwgODMsIAotICAgIDg0LCA2NSwgNzAsIDE5OCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCi0gICAgNjUsIDg0LCA3MywgODMsIDgzLCA3MywgNzcsIDc5LCAxMjgsIDgzLCA4NCwgNTAsIDEyOCwgODMsIDgzLCA4OSwgODgsIAotICAgIDEyOCwgODMsIDgzLCA4OSwgODQsIDEyOCwgODMsIDgzLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA4MywgODksIDgyLCAxMjgsIAotICAgIDgzLCA4MywgODksIDgwLCAxMjgsIDgzLCA4MywgODksIDEyOCwgODMsIDgzLCA4NSwgODgsIDEyOCwgODMsIDgzLCA4NSwgCi0gICAgODUsIDEyOCwgODMsIDgzLCA4NSwgODQsIDEyOCwgODMsIDgzLCA4NSwgODAsIDEyOCwgODMsIDgzLCA3OSwgODgsIDEyOCwgCi0gICAgODMsIDgzLCA3OSwgODQsIDEyOCwgODMsIDgzLCA3OSwgODAsIDEyOCwgODMsIDgzLCA3OSwgNzksIDEyOCwgODMsIDgzLCAKLSAgICA3OSwgMTI4LCA4MywgODMsIDczLCA4OCwgMTI4LCA4MywgODMsIDczLCA4NCwgMTI4LCA4MywgODMsIDczLCA4MCwgMTI4LCAKLSAgICA4MywgODMsIDczLCA3MywgMTI4LCA4MywgODMsIDczLCA2OSwgODgsIDEyOCwgODMsIDgzLCA3MywgNjksIDgwLCAxMjgsIAotICAgIDgzLCA4MywgNzMsIDY5LCAxMjgsIDgzLCA4MywgNzMsIDEyOCwgODMsIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgCi0gICAgODgsIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCA2OSwgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgCi0gICAgODMsIDgzLCA2NSwgODUsIDEyOCwgODMsIDgzLCA2NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgCi0gICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgNzMsIDY5LCAKLSAgICA4NSwgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAotICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIAotICAgIDg1LCA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCAKLSAgICA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgODUsIDc3LCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIAotICAgIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgCi0gICAgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIAotICAgIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCAKLSAgICA2NSwgMTI4LCA4MywgODMsIDY1LCA3MywgMTI4LCA4MywgODMsIDY1LCA2NSwgMTI4LCA4MywgODMsIDUxLCAxMjgsIDgzLCAKLSAgICA4MywgNTAsIDEyOCwgODMsIDgyLCAxMjgsIDgzLCA4MSwgODUsIDczLCA4MywgMjAwLCA4MywgODEsIDg1LCA3MywgODIsIAotICAgIDgyLCA2OSwgMjA0LCA4MywgODEsIDg1LCA3MywgNzEsIDcxLCA3NiwgMTk3LCA4MywgODEsIDg1LCA2NSwgMjEyLCA4MywgCi0gICAgODEsIDg1LCA2NSwgODIsIDY5LCA4MywgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCA2OCwgMTI4LCA4MywgODEsIDg1LCAKLSAgICA2NSwgODIsIDY5LCAxMjgsIDgzLCA4MCwgODcsIDY1LCAxMjgsIDgzLCA4MCwgODUsIDc4LCA3MSwgMjExLCA4MywgODAsIAotICAgIDgyLCA3OSwgODUsIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgODMsIDgwLCA4MiwgNjksIDY3LCA3MiwgNzEsIDY5LCA4MywgNjUsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg1LCAKLSAgICA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg0LCAxMjgsIDgzLCA4MCwgNzksIDc5LCA3OCwgMTI4LCA4MywgODAsIAotICAgIDc2LCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3NiwgNjUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgCi0gICAgNzMsIDgyLCA3MywgODQsIDg1LCAyMTEsIDgzLCA4MCwgNzMsIDgyLCA3MywgODQsIDEyOCwgODMsIDgwLCA3MywgODIsIDczLCAKLSAgICAyMTIsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzYsIDEyOCwgODMsIAotICAgIDgwLCA3MywgODIsIDY1LCAyMDQsIDgzLCA4MCwgNzMsIDY4LCA2OSwgODIsIDIxNywgODMsIDgwLCA3MywgNjcsIDY5LCAKLSAgICAxMjgsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA4MywgODAsIDY5LCA4MywgNzcsIDczLCA3NiwgCi0gICAgMjA3LCA4MywgODAsIDY5LCA2OSwgNjgsIDY2LCA3OSwgNjUsIDg0LCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgNzIsIAotICAgIDEyOCwgODMsIDgwLCA2OSwgNjksIDY3LCAyMDAsIDgzLCA4MCwgNjksIDY3LCA3MywgNjUsIDc2LCAxMjgsIDgzLCA4MCwgCi0gICAgNjksIDY1LCA4MiwgMTI4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCAKLSAgICAyMTAsIDgzLCA4MCwgNjksIDY1LCA3NSwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIDIwNCwgODMsIDgwLCA2NSwgODQsIAotICAgIDcyLCA3MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgCi0gICAgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MiwgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCAKLSAgICA2OSwgMTI4LCA4MywgODAsIDY1LCA3MSwgNzIsIDY5LCA4NCwgODQsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCA2OSwgODMsIAotICAgIDEyOCwgODMsIDgwLCA2NSwgNjgsIDE5NywgODMsIDgwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA4MywgODAsIDY1LCA2NywgCi0gICAgMTk3LCA4MywgODAsIDY1LCAxMjgsIDgzLCA3OSwgODksIDEyOCwgODMsIDc5LCA4NywgNzMsIDc2LCAyMDcsIDgzLCA3OSwgCi0gICAgODcsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA2OSwgODIsIDIwNiwgODMsIDc5LCA4NSwgODQsIDcyLCA0NSwgODMsIDc2LCAKLSAgICA2NSwgODYsIDY5LCAyMTcsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgODMsIAotICAgIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIDgzLCA3OSwgODUsIDc4LCA2NSwgODAsIDEyOCwgCi0gICAgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDgzLCAxMjgsIDgzLCA3OSwgODIsIDE5MywgODMsIDc5LCA4MSwgMTI4LCA4MywgCi0gICAgNzksIDc5LCAyMDYsIDgzLCA3OSwgNzgsIDc0LCA2NSwgNzcsIDEyOCwgODMsIDc5LCA3OCwgNzEsIDEyOCwgODMsIDc5LCAKLSAgICA3OCwgMTI4LCA4MywgNzksIDc3LCA4MCwgNjksIDc4LCAxOTksIDgzLCA3OSwgNzcsIDEyOCwgODMsIDc5LCA3NiwgNzMsIAotICAgIDY4LCA4NSwgODMsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgMjExLCA4MywgNzksIDcyLCAxMjgsIDgzLCA3OSwgCi0gICAgNzEsIDY4LCA3MywgNjUsIDIwNiwgODMsIDc5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY5LCA0NSwgNzAsIDg1LCA3OCwgNjcsIAotICAgIDg0LCA3MywgNzksIDIwNiwgODMsIDc5LCA3MCwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA3OSwgNzAsIDIxMiwgCi0gICAgODMsIDc5LCAxOTgsIDgzLCA3OSwgNjcsIDczLCA2OSwgODQsIDg5LCAxMjgsIDgzLCA3OSwgNjcsIDY3LCA2OSwgMjEwLCAKLSAgICA4MywgNzksIDY1LCA4MCwgMTI4LCA4MywgNzksIDY1LCAxMjgsIDgzLCAyMDcsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIAotICAgIDc4LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDIwNiwgODMsIDc4LCA3OSwgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgCi0gICAgMTI4LCA4MywgNzgsIDc5LCA4NywgNjYsIDc5LCA2NSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODMsIDc4LCA3OSwgODcsIAotICAgIDEyOCwgODMsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA3OCwgNzksIDg1LCAyMTIsIDgzLCA3OCwgNjUsIDIwOCwgODMsIAotICAgIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNjUsIDc1LCAxOTcsIDgzLCA3OCwgNjUsIDczLCA3NiwgMTI4LCA4MywgCi0gICAgNzgsIDE5MywgODMsIDc3LCA3OSwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA4MiwgNzUsIDczLCA3OCwgMTk5LCAKLSAgICA4MywgNzcsIDczLCA3NiwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCA2OSwgMTI4LCA4MywgNzcsIDY5LCA2NSwgODIsIAotICAgIDEyOCwgODMsIDc3LCA2NSwgODMsIDIwMCwgODMsIDc3LCA2NSwgNzYsIDc2LCA2OSwgMjEwLCA4MywgNzcsIDY1LCA3NiwgCi0gICAgNzYsIDEyOCwgODMsIDc2LCA4NSwgODIsIDEyOCwgODMsIDc2LCA3OSwgODcsIDc2LCA4OSwgMTI4LCA4MywgNzYsIDc5LCAKLSAgICAyMTUsIDgzLCA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgNzYsIDc5LCAyMTIsIDgzLCA3NiwgNzksIDgwLCA3MywgNzgsIAotICAgIDE5OSwgODMsIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2OCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2NywgNjksIDEyOCwgODMsIDc2LCA3MywgNjcsIDE5NywgODMsIDc2LCAKLSAgICA2OSwgNjksIDgwLCAyMTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIAotICAgIDczLCAxOTUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMTI4LCA4MywgNzYsIDY1LCA4MywgNzIsIDEyOCwgODMsIDc2LCA2NSwgCi0gICAgODMsIDIwMCwgODMsIDc2LCA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4MywgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzUsIDg3LCAKLSAgICAxMjgsIDgzLCA3NSwgODUsIDc2LCA3NiwgMTI4LCA4MywgNzUsIDg1LCA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIAotICAgIDc5LCAyMDYsIDgzLCA3NSwgNzMsIDc4LCAxMjgsIDgzLCA3NSwgNzMsIDY5LCA4MiwgMTI4LCA4MywgNzUsIDIwMSwgODMsIAotICAgIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIDgzLCA3MywgODgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIAotICAgIDcyLCAyMTEsIDgzLCA3MywgODgsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAKLSAgICA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIAotICAgIDgzLCA3MywgODgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCAKLSAgICA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIAotICAgIDczLCA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4NCwgNjksIDEyOCwgODMsIDczLCA4MywgNjUsIDEyOCwgODMsIAotICAgIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKLSAgICA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCAKLSAgICA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgCi0gICAgNjksIDg1LCA4MCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKLSAgICA4MywgNzMsIDc5LCA4MywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgCi0gICAgNjksIDg1LCA3NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIAotICAgIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgCi0gICAgODMsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MSwgCi0gICAgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTAsIDEyOCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgNzMsIAotICAgIDc4LCA3MSwgNzYsIDE5NywgODMsIDczLCA3OCwgNzEsIDY1LCA2NSwgODQsIDEyOCwgODMsIDczLCA3OCwgMTk3LCA4MywgCi0gICAgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAyMDYsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIAotICAgIDE5NiwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgODIsIDEyOCwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgMjEwLCA4MywgCi0gICAgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgNzMsIDc3LCA2NSwgNzYsIDg1LCA3OCwgNzEsIDg1LCAyMDYsIDgzLCAKLSAgICA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzYsIDg2LCA2OSwgODIsIDEyOCwgODMsIDczLCA3NiwgNzUsIDEyOCwgODMsIAotICAgIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MywgCi0gICAgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCAxOTcsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc1LCAKLSAgICA3MywgMTI4LCA4MywgNzMsIDc1LCA1MCwgMTI4LCA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzEsIDc4LCA4MywgMTI4LCAKLSAgICA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDczLCA3MSwgNzcsIDE5MywgODMsIDczLCA3MSwgNjksIDIwNCwgODMsIAotICAgIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgMTgwLCA4MywgNzMsIDcxLCAxMjgsIDgzLCA3MywgNjksIDY5LCAxMjgsIAotICAgIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAyMTEsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgCi0gICAgNzMsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNjYsIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgODksIDY5LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzksIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgCi0gICAgMTI4LCA4MywgNzIsIDg3LCA3MywgNzMsIDEyOCwgODMsIDcyLCA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgCi0gICAgODMsIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA3MiwgODcsIDY1LCAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCAKLSAgICA3MiwgODUsIDg1LCAxMjgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDgzLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIAotICAgIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCAxMjgsIDgzLCA3MiwgODUsIDc3LCAxMjgsIDgzLCA3MiwgODUsIDcwLCAKLSAgICA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgODUsIDY5LCA3OCwgODMsIDcyLCA4NSwgNjksIAotICAgIDg0LCAxMjgsIDgzLCA3MiwgODUsIDY2LCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgNTAsIDEyOCwgODMsIDcyLCA4NSwgCi0gICAgMTc4LCA4MywgNzIsIDg1LCAxMjgsIDgzLCA3MiwgMjEzLCA4MywgNzIsIDg0LCA2NSwgODAsIDczLCA2NywgMTI4LCA4MywgCi0gICAgNzIsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzgsIDY5LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3NywgODAsIAotICAgIDEyOCwgODMsIDcyLCA4MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzksIDg5LCAxMjgsIDgzLCA3MiwgNzksIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgNzksIDg3LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgCi0gICAgNzIsIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCAKLSAgICA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgCi0gICAgNjksIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgCi0gICAgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIAotICAgIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAKLSAgICAxOTYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIAotICAgIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCAKLSAgICA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgCi0gICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDIxMiwgODMsIDcyLCA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA3OSwgODQsIDczLCA3OCwgMTk5LCA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIAotICAgIDEyOCwgODMsIDcyLCA3OSwgNzEsIDIwMSwgODMsIDcyLCA3OSwgMTk5LCA4MywgNzIsIDc5LCA2OSwgMTI4LCA4MywgNzIsIAotICAgIDc5LCAxOTcsIDgzLCA3MiwgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDEyOCwgODMsIDcyLCA3MywgODksIDg5LCA2NSwgCi0gICAgNjUsIDc2LCA2NSwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCAxOTMsIDgzLCAKLSAgICA3MiwgNzMsIDgyLCAyMTIsIDgzLCA3MiwgNzMsIDgyLCA2NSwgNjksIDEyOCwgODMsIDcyLCA3MywgODIsIDEyOCwgODMsIAotICAgIDcyLCA3MywgMjEwLCA4MywgNzIsIDczLCA4MSwgMTI4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgCi0gICAgODQsIDIwNywgODMsIDcyLCA3MywgNzgsIDczLCA3MSwgMTI4LCA4MywgNzIsIDczLCA3OCwgNjgsIDE5MywgODMsIDcyLCAKLSAgICA3MywgNzgsIDEyOCwgODMsIDcyLCA3MywgMjA2LCA4MywgNzIsIDczLCA3NywgNjUsIDEyOCwgODMsIDcyLCA3MywgNzcsIAotICAgIDE5MywgODMsIDcyLCA3MywgNzcsIDEyOCwgODMsIDcyLCA3MywgMjA1LCA4MywgNzIsIDczLCA3MywgNzgsIDEyOCwgODMsIAotICAgIDcyLCA3MywgNzMsIDEyOCwgODMsIDcyLCA3MywgNzAsIDIxMiwgODMsIDcyLCA3MywgNjksIDc2LCA2OCwgMTI4LCA4MywgCi0gICAgNzIsIDczLCA2OCwgMTI4LCA4MywgNzIsIDczLCAxOTYsIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzIsIDE5MywgCi0gICAgODMsIDcyLCA2OSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODYsIDY1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDY5LCA4NSwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCA4NCwgODUsIDEyOCwgODMsIAotICAgIDcyLCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA4NCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCAyMTIsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIDY1LCA3NywgMTI4LCA4MywgNzIsIDY5LCAKLSAgICA4MywgNzIsIDczLCA3MSwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCAxOTksIDgzLCA3MiwgNjksIDgzLCA3MiwgNTAsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgNzIsIDY5LCA4MCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDIwNCwgCi0gICAgODMsIDcyLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIDgzLCA3MiwgNjksIDcxLCA1NywgMTI4LCAKLSAgICA4MywgNzIsIDY5LCA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgNjksIDIwNiwgODMsIDcyLCA2OSwgNjksIDEyOCwgODMsIDcyLCA2OSwgNDUsIDcxLCA3OSwgCi0gICAgNjUsIDg0LCAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODksIDEyOCwgCi0gICAgODMsIDcyLCA2NSwgODgsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDY1LCAKLSAgICA4NiwgNzMsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDg2LCA2OSwgMTk2LCA4MywgNzIsIDY1LCA4NSwgMTI4LCA4MywgNzIsIAotICAgIDY1LCA4NCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgODUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIxMywgODMsIDcyLCA2NSwgCi0gICAgODIsIDgwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMDgsIDgzLCA3MiwgNjUsIDgyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCAKLSAgICA4MiwgNTAsIDEyOCwgODMsIDcyLCA2NSwgODIsIDE3OCwgODMsIDcyLCA2NSwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgODAsIDY5LCA4MywgMTI4LCA4MywgNzIsIDY1LCA4MCwgMTk3LCA4MywgNzIsIDY1LCA4MCwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgNzgsIDEyOCwgODMsIDcyLCA2NSwgMjA2LCA4MywgNzIsIDY1LCAKLSAgICA3NywgODIsIDc5LCA2NywgNzUsIDEyOCwgODMsIDcyLCA2NSwgNzYsIDgzLCA3MiwgNjksIDc2LCA2OSwgODQsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNzUsIDg0LCA3MywgMTI4LCA4MywgNzIsIDY1LCA3MywgMTI4LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgCi0gICAgMTk2LCA4MywgNzIsIDY1LCA2OCwgNjksIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA4MywgNzIsIDY1LCAKLSAgICA2OCwgNjgsIDE5MywgODMsIDcyLCA2NSwgNjgsIDEyOCwgODMsIDcyLCA2NSwgMTk2LCA4MywgNzIsIDY1LCA2NiwgNTQsIAotICAgIDEyOCwgODMsIDcyLCA2NSwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNTQsIDEyOCwgODMsIDcyLCA2NSwgNTEsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgMTc5LCA4MywgNzEsIDgyLCAxOTMsIDgzLCA3MSwgNzksIDIxMCwgODMsIDcxLCA2NywgMTI4LCA4MywgNzEsIAotICAgIDY1LCAyMTUsIDgzLCA3MSwgNjUsIDE5NCwgODMsIDcxLCAxMjgsIDgzLCA2OSwgODgsIDg0LCA4NSwgNzYsIDE5MywgODMsIAotICAgIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgMjExLCA4MywgNjksIDg2LCA2OSwgCi0gICAgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAKLSAgICA3OCwgODQsIDIxNywgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIAotICAgIDY5LCA3OCwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDY5LCA4NiwgNjksIDc4LCA0NSwgCi0gICAgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgMjA2LCA4MywgNjksIDg1LCA4OCwgMTI4LCAKLSAgICA4MywgNjksIDg1LCA3OCwgODksIDY1LCA3NywgMTI4LCA4MywgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA2OSwgODQsIAotICAgIDcwLCA3OSwgNzgsIDEyOCwgODMsIDY5LCA4MywgODQsIDY5LCA4MiwgODQsIDczLCA4NSwgMjExLCA4MywgNjksIDgzLCA4MSwgCi0gICAgODUsIDczLCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDY5LCA4MywgNjUsIDc3LCAxOTcsIDgzLCAKLSAgICA2OSwgODIsIDg2LCA3MywgNjcsIDE5NywgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDgyLCA3MywgNzAsIAotICAgIDIxMSwgODMsIDY5LCA4MSwgODUsIDY5LCA3OCwgNjcsIDE5NywgODMsIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgCi0gICAgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCAKLSAgICA3OSwgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODMsIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA2OSwgNzcsIAotICAgIDg1LCA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgNzcsIDc1LCA2NSwgODQsIDcyLCAxMjgsIDgzLCA2OSwgNzcsIDc1LCAKLSAgICAxMjgsIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgCi0gICAgMjEyLCA4MywgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA3NywgNzMsIDc3LCAKLSAgICA3MywgNzgsIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgNzcsIAotICAgIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCAyMDYsIDgzLCA2OSwgCi0gICAgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIAotICAgIDc2LCAxOTcsIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCA4NiwgNzMsIDIxMSwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgCi0gICAgNzksIDczLCA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTYsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTAsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUxLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAotICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTYsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTMsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ4LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTYsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgCi0gICAgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIAotICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU0LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAotICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgNzMsIDgzLCA3NywgCi0gICAgMTkzLCA4MywgNjksIDcyLCAxMjgsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgNjksIDcxLCA3OCwgNzksIDEyOCwgCi0gICAgODMsIDY5LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgNjksIDc4LCAKKyAgICA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgODMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCisgICAgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTcsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU2LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTQsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MiwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTEsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUwLCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIAorICAgIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCAKKyAgICAxOTcsIDgzLCA4NCwgODIsIDczLCA4MCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIAorICAgIDgyLCA3MywgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNzMsIDY4LCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODQsIDgyLCAKKyAgICA2OSwgODQsIDY3LCA3MiwgNjksIDE5NiwgODMsIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCA4NCwgODIsIDY5LCA3OCwgNzEsIAorICAgIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgNjUsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg3LCA2NiwgCisgICAgNjksIDgyLCA4MiwgODksIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCAKKyAgICA2NSwgODQsIDg1LCA3NywgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCAyMDUsIDgzLCA4NCwgODIsIDY1LCA4NCwgNzMsIAorICAgIDY1LCAyMDYsIDgzLCA4NCwgODIsIDY1LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgCisgICAgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA4NCwgODIsIDY1LCAKKyAgICA3MywgNzAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDcxLCA3MSwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgODQsIAorICAgIDc5LCA4NiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODIsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4NywgNjUsIDg0LCA2NywgCisgICAgNzIsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNjUsIDcxLCAKKyAgICA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgMTI4LCA4MywgODQsIDc5LCAyMDgsIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCAKKyAgICA4MywgODQsIDc5LCA2NywgNzUsIDEyOCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA4MywgODQsIDczLCA3NiwgCisgICAgMjA0LCA4MywgODQsIDczLCA3NiwgMTk3LCA4MywgODQsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNjksIDgwLCAKKyAgICAxMjgsIDgzLCA4NCwgNjksIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCA3NywgNzMsIDc4LCAxOTksIDgzLCA4NCwgNjksIAorICAgIDY1LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgMjA1LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgCisgICAgODQsIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCAKKyAgICA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA4NSwgMTk3LCA4MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODMsIDg0LCAKKyAgICA2NSwgODIsIDIxMiwgODMsIDg0LCA2NSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDgyLCA4MiwgNjksIDE5NiwgODMsIAorICAgIDg0LCA2NSwgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIDgzLCA4NCwgNjUsIDIxMCwgODMsIDg0LCA2NSwgCisgICAgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDY4LCA2NSwgODIsIDE5NiwgODMsIDg0LCAKKyAgICA2NSwgNzgsIDY4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MywgODQsIDY1LCA3MCwgNzAsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDE5OCwgODMsIDg0LCA2NSwgNjcsIDY3LCAKKyAgICA2NSwgODQsIDc5LCAxMjgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3MywgODMsIDgzLCA3MywgNzcsIDc5LCAxMjgsIAorICAgIDgzLCA4NCwgNTAsIDEyOCwgODMsIDgzLCA4OSwgODgsIDEyOCwgODMsIDgzLCA4OSwgODQsIDEyOCwgODMsIDgzLCA4OSwgCisgICAgODIsIDg4LCAxMjgsIDgzLCA4MywgODksIDgyLCAxMjgsIDgzLCA4MywgODksIDgwLCAxMjgsIDgzLCA4MywgODksIDEyOCwgCisgICAgODMsIDgzLCA4NSwgODgsIDEyOCwgODMsIDgzLCA4NSwgODUsIDEyOCwgODMsIDgzLCA4NSwgODQsIDEyOCwgODMsIDgzLCAKKyAgICA4NSwgODAsIDEyOCwgODMsIDgzLCA3OSwgODgsIDEyOCwgODMsIDgzLCA3OSwgODQsIDEyOCwgODMsIDgzLCA3OSwgODAsIAorICAgIDEyOCwgODMsIDgzLCA3OSwgNzksIDEyOCwgODMsIDgzLCA3OSwgMTI4LCA4MywgODMsIDczLCA4OCwgMTI4LCA4MywgODMsIAorICAgIDczLCA4NCwgMTI4LCA4MywgODMsIDczLCA4MCwgMTI4LCA4MywgODMsIDczLCA3MywgMTI4LCA4MywgODMsIDczLCA2OSwgCisgICAgODgsIDEyOCwgODMsIDgzLCA3MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNzMsIDY5LCAxMjgsIDgzLCA4MywgNzMsIDEyOCwgCisgICAgODMsIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgODgsIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCAKKyAgICA2OSwgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgODMsIDgzLCA2NSwgODUsIDEyOCwgODMsIDgzLCA2NSwgODQsIAorICAgIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODAsIAorICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgCisgICAgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAorICAgIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCAKKyAgICA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCAKKyAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAorICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA4MywgCisgICAgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIAorICAgIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgCisgICAgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIAorICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgCisgICAgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA4MywgODMsIDY1LCA3MywgMTI4LCA4MywgODMsIDY1LCAKKyAgICA2NSwgMTI4LCA4MywgODMsIDUxLCAxMjgsIDgzLCA4MywgNTAsIDEyOCwgODMsIDgyLCAxMjgsIDgzLCA4MSwgODUsIDczLCAKKyAgICA4MywgMjAwLCA4MywgODEsIDg1LCA3MywgODIsIDgyLCA2OSwgMjA0LCA4MywgODEsIDg1LCA3MywgNzEsIDcxLCA3NiwgCisgICAgMTk3LCA4MywgODEsIDg1LCA2NSwgMjEyLCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCA4MywgMTI4LCA4MywgODEsIDg1LCAKKyAgICA2NSwgODIsIDY5LCA2OCwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxMjgsIDgzLCA4MCwgODcsIDY1LCAxMjgsIAorICAgIDgzLCA4MCwgODUsIDc4LCA3MSwgMjExLCA4MywgODAsIDgyLCA3OSwgODUsIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgCisgICAgNzEsIDgzLCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDgwLCA4MiwgNjksIDY3LCA3MiwgNzEsIDY5LCAKKyAgICA4MywgNjUsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg1LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNzksIDc5LCA3OCwgMTI4LCA4MywgODAsIDc2LCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3NiwgCisgICAgNjUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzMsIDgyLCA3MywgODQsIDg1LCAyMTEsIDgzLCA4MCwgNzMsIDgyLCAKKyAgICA3MywgODQsIDEyOCwgODMsIDgwLCA3MywgODIsIDczLCAyMTIsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzYsIDEyOCwgODMsIDgwLCA3MywgODIsIDY1LCAyMDQsIDgzLCA4MCwgNzMsIDY4LCA2OSwgCisgICAgODIsIDIxNywgODMsIDgwLCA3MywgNjcsIDY5LCAxMjgsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCAKKyAgICA4MywgODAsIDY5LCA4MywgNzcsIDczLCA3NiwgMjA3LCA4MywgODAsIDY5LCA2OSwgNjgsIDY2LCA3OSwgNjUsIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNjksIDY5LCA2NywgNzIsIDEyOCwgODMsIDgwLCA2OSwgNjksIDY3LCAyMDAsIDgzLCA4MCwgNjksIDY3LCA3MywgCisgICAgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNjksIDY1LCA4MiwgMTI4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCAKKyAgICA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCAyMTAsIDgzLCA4MCwgNjksIDY1LCA3NSwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgCisgICAgNzMsIDIwNCwgODMsIDgwLCA2NSwgODQsIDcyLCA3MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA3MywgNzgsIAorICAgIDE5OSwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MiwgCisgICAgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgMTI4LCA4MywgODAsIDY1LCA3MSwgNzIsIDY5LCA4NCwgODQsIDczLCAKKyAgICAxMjgsIDgzLCA4MCwgNjUsIDY4LCA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgNjgsIDE5NywgODMsIDgwLCA2NSwgNjcsIAorICAgIDczLCA3OCwgMTk5LCA4MywgODAsIDY1LCA2NywgMTk3LCA4MywgODAsIDY1LCAxMjgsIDgzLCA3OSwgODksIDEyOCwgODMsIAorICAgIDc5LCA4NywgNzMsIDc2LCAyMDcsIDgzLCA3OSwgODcsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA2OSwgODIsIDIwNiwgCisgICAgODMsIDc5LCA4NSwgODQsIDcyLCA0NSwgODMsIDc2LCA2NSwgODYsIDY5LCAyMTcsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgzLCAKKyAgICA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgODMsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIAorICAgIDgzLCA3OSwgODUsIDc4LCA2NSwgODAsIDEyOCwgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDgzLCAxMjgsIDgzLCA3OSwgCisgICAgODIsIDE5MywgODMsIDc5LCA4MSwgMTI4LCA4MywgNzksIDc5LCAyMDYsIDgzLCA3OSwgNzgsIDc0LCA2NSwgNzcsIDEyOCwgCisgICAgODMsIDc5LCA3OCwgNzEsIDEyOCwgODMsIDc5LCA3OCwgMTI4LCA4MywgNzksIDc3LCA4MCwgNjksIDc4LCAxOTksIDgzLCAKKyAgICA3OSwgNzcsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgODMsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgCisgICAgMjExLCA4MywgNzksIDcyLCAxMjgsIDgzLCA3OSwgNzEsIDY4LCA3MywgNjUsIDIwNiwgODMsIDc5LCA3MCwgODQsIDg3LCAKKyAgICA2NSwgODIsIDY5LCA0NSwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDc5LCA3MCwgODQsIDc4LCA2OSwgCisgICAgODMsIDgzLCAxMjgsIDgzLCA3OSwgNzAsIDIxMiwgODMsIDc5LCAxOTgsIDgzLCA3OSwgNjcsIDczLCA2OSwgODQsIDg5LCAKKyAgICAxMjgsIDgzLCA3OSwgNjcsIDY3LCA2OSwgMjEwLCA4MywgNzksIDY1LCA4MCwgMTI4LCA4MywgNzksIDY1LCAxMjgsIDgzLCAKKyAgICAyMDcsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDc4LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDIwNiwgODMsIAorICAgIDc4LCA3OSwgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDc5LCA4NywgNjYsIDc5LCA2NSwgODIsIDY4LCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDc4LCA3OSwgODcsIDEyOCwgODMsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA3OCwgNzksIAorICAgIDg1LCAyMTIsIDgzLCA3OCwgNjUsIDIwOCwgODMsIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNjUsIDc1LCAxOTcsIAorICAgIDgzLCA3OCwgNjUsIDczLCA3NiwgMTI4LCA4MywgNzgsIDE5MywgODMsIDc3LCA3OSwgNzUsIDczLCA3OCwgMTk5LCA4MywgCisgICAgNzcsIDczLCA4MiwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCAKKyAgICA2OSwgMTI4LCA4MywgNzcsIDY5LCA2NSwgODIsIDEyOCwgODMsIDc3LCA2NSwgODMsIDIwMCwgODMsIDc3LCA2NSwgNzYsIAorICAgIDc2LCA2OSwgMjEwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDEyOCwgODMsIDc2LCA4NSwgODIsIDEyOCwgODMsIDc2LCA3OSwgCisgICAgODcsIDc2LCA4OSwgMTI4LCA4MywgNzYsIDc5LCAyMTUsIDgzLCA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgNzYsIDc5LCAKKyAgICAyMTIsIDgzLCA3NiwgNzksIDgwLCA3MywgNzgsIDE5OSwgODMsIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIAorICAgIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2NywgNjksIDEyOCwgCisgICAgODMsIDc2LCA3MywgNjcsIDE5NywgODMsIDc2LCA2OSwgNjksIDgwLCAyMTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIDczLCAxOTUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMTI4LCA4MywgNzYsIAorICAgIDY1LCA4MywgNzIsIDEyOCwgODMsIDc2LCA2NSwgODMsIDIwMCwgODMsIDc2LCA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4MywgCisgICAgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzUsIDg3LCAxMjgsIDgzLCA3NSwgODUsIDc2LCA3NiwgMTI4LCA4MywgNzUsIDg1LCAKKyAgICA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIDc5LCAyMDYsIDgzLCA3NSwgNzMsIDc4LCAxMjgsIDgzLCA3NSwgNzMsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgNzUsIDIwMSwgODMsIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgNjUsIDg0LCA2OSwgCisgICAgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCAKKyAgICA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIDgzLCA3MywgODgsIAorICAgIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDcyLCAyMTEsIDgzLCA3MywgODgsIDg0LCA3MiwgMTI4LCA4MywgCisgICAgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIAorICAgIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MywgODgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKKyAgICAxMjgsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIAorICAgIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4NCwgCisgICAgNjksIDEyOCwgODMsIDczLCA4MywgNjUsIDEyOCwgODMsIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIDEyOCwgODMsIDczLCAKKyAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgzLCA4MywgCisgICAgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAorICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKKyAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgNjksIDg1LCA3OCwgCisgICAgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgCisgICAgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCAKKyAgICA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgCisgICAgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTAsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIAorICAgIDE5NywgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDE5NywgODMsIDczLCA3OCwgCisgICAgNzEsIDY1LCA2NSwgODQsIDEyOCwgODMsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAKKyAgICAyMDYsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgODIsIAorICAgIDEyOCwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgMjEwLCA4MywgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgCisgICAgNzMsIDc3LCA2NSwgNzYsIDg1LCA3OCwgNzEsIDg1LCAyMDYsIDgzLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzYsIDg2LCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDczLCA3NiwgNzUsIDEyOCwgODMsIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIAorICAgIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCAKKyAgICAxOTcsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc1LCA3MywgMTI4LCA4MywgNzMsIDc1LCA1MCwgMTI4LCAKKyAgICA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzEsIDc4LCA4MywgMTI4LCA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIAorICAgIDczLCA3MSwgNzcsIDE5MywgODMsIDczLCA3MSwgNjksIDIwNCwgODMsIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgCisgICAgMTgwLCA4MywgNzMsIDcxLCAxMjgsIDgzLCA3MywgNjksIDY5LCAxMjgsIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAKKyAgICAyMTEsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzMsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIAorICAgIDgzLCA3MywgNjYsIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIAorICAgIDcyLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgCisgICAgODksIDY5LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDg5LCAKKyAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3MywgNzMsIAorICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgODMsIDcyLCA4NywgNjUsIDY1LCAxMjgsIAorICAgIDgzLCA3MiwgODcsIDY1LCAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDg1LCAxMjgsIDgzLCA3MiwgCisgICAgODUsIDg0LCAxMjgsIDgzLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIAorICAgIDc5LCAxMjgsIDgzLCA3MiwgODUsIDc3LCAxMjgsIDgzLCA3MiwgODUsIDcwLCA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgCisgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgODUsIDY5LCA3OCwgODMsIDcyLCA4NSwgNjksIDg0LCAxMjgsIDgzLCA3MiwgODUsIDY2LCAKKyAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgNTAsIDEyOCwgODMsIDcyLCA4NSwgMTc4LCA4MywgNzIsIDg1LCAxMjgsIDgzLCAKKyAgICA3MiwgMjEzLCA4MywgNzIsIDg0LCA2NSwgODAsIDczLCA2NywgMTI4LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MywgNzIsIAorICAgIDgyLCA3MywgNzgsIDY5LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3NywgODAsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgNzksIDg5LCAxMjgsIDgzLCA3MiwgNzksIDg4LCAxMjgsIDgzLCA3MiwgNzksIDg3LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgNzIsIDc5LCA4NCwgMTI4LCA4MywgCisgICAgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCAKKyAgICA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgNjksIDEyOCwgODMsIDcyLCA3OSwgODIsIAorICAgIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKKyAgICA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgCisgICAgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCAKKyAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAxOTYsIDgzLCA3MiwgNzksIDgyLCA4NCwgCisgICAgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIAorICAgIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKKyAgICA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDIxMiwgODMsIDcyLCAKKyAgICA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgODQsIAorICAgIDczLCA3OCwgMTk5LCA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIDEyOCwgODMsIDcyLCA3OSwgCisgICAgNzEsIDIwMSwgODMsIDcyLCA3OSwgMTk5LCA4MywgNzIsIDc5LCA2OSwgMTI4LCA4MywgNzIsIDc5LCAxOTcsIDgzLCA3MiwgCisgICAgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDEyOCwgODMsIDcyLCA3MywgODksIDg5LCA2NSwgNjUsIDc2LCA2NSwgNjUsIAorICAgIDEyOCwgODMsIDcyLCA3MywgODQsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCAxOTMsIDgzLCA3MiwgNzMsIDgyLCAyMTIsIAorICAgIDgzLCA3MiwgNzMsIDgyLCA2NSwgNjksIDEyOCwgODMsIDcyLCA3MywgODIsIDEyOCwgODMsIDcyLCA3MywgMjEwLCA4MywgCisgICAgNzIsIDczLCA4MSwgMTI4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgODQsIDIwNywgODMsIDcyLCAKKyAgICA3MywgNzgsIDczLCA3MSwgMTI4LCA4MywgNzIsIDczLCA3OCwgNjgsIDE5MywgODMsIDcyLCA3MywgNzgsIDEyOCwgODMsIAorICAgIDcyLCA3MywgMjA2LCA4MywgNzIsIDczLCA3NywgNjUsIDEyOCwgODMsIDcyLCA3MywgNzcsIDE5MywgODMsIDcyLCA3MywgCisgICAgNzcsIDEyOCwgODMsIDcyLCA3MywgMjA1LCA4MywgNzIsIDczLCA3MywgNzgsIDEyOCwgODMsIDcyLCA3MywgNzMsIDEyOCwgCisgICAgODMsIDcyLCA3MywgNzAsIDIxMiwgODMsIDcyLCA3MywgNjksIDc2LCA2OCwgMTI4LCA4MywgNzIsIDczLCA2OCwgMTI4LCAKKyAgICA4MywgNzIsIDczLCAxOTYsIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzIsIDE5MywgODMsIDcyLCA2OSwgODgsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODYsIDY1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA4MywgNzIsIDY5LCA4NSwgCisgICAgNzksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCA4NCwgODUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCAKKyAgICA2OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA4NCwgMTI4LCA4MywgNzIsIAorICAgIDY5LCAyMTIsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIDY1LCA3NywgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCA3MSwgCisgICAgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCAxOTksIDgzLCA3MiwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgNzIsIDY5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDIwNCwgODMsIDcyLCA2OSwgCisgICAgNzYsIDcwLCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIDgzLCA3MiwgNjksIDcxLCA1NywgMTI4LCA4MywgNzIsIDY5LCAKKyAgICA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDEyOCwgODMsIAorICAgIDcyLCA2OSwgNjksIDIwNiwgODMsIDcyLCA2OSwgNjksIDEyOCwgODMsIDcyLCA2OSwgNDUsIDcxLCA3OSwgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODksIDEyOCwgODMsIDcyLCAKKyAgICA2NSwgODgsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIAorICAgIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDg2LCA2OSwgMTk2LCA4MywgNzIsIDY1LCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgODUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIxMywgODMsIDcyLCA2NSwgODIsIDgwLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMDgsIDgzLCA3MiwgNjUsIDgyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgNTAsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDE3OCwgODMsIDcyLCA2NSwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgODAsIDY5LCA4MywgMTI4LCA4MywgNzIsIDY1LCA4MCwgMTk3LCA4MywgNzIsIDY1LCA4MCwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgNzgsIDEyOCwgODMsIDcyLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA3NywgODIsIAorICAgIDc5LCA2NywgNzUsIDEyOCwgODMsIDcyLCA2NSwgNzYsIDgzLCA3MiwgNjksIDc2LCA2OSwgODQsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgNzUsIDg0LCA3MywgMTI4LCA4MywgNzIsIDY1LCA3MywgMTI4LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCAKKyAgICA4MywgNzIsIDY1LCA2OCwgNjksIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIAorICAgIDE5MywgODMsIDcyLCA2NSwgNjgsIDEyOCwgODMsIDcyLCA2NSwgMTk2LCA4MywgNzIsIDY1LCA2NiwgNTQsIDEyOCwgODMsIAorICAgIDcyLCA2NSwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNTQsIDEyOCwgODMsIDcyLCA2NSwgNTEsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgMTc5LCA4MywgNzEsIDgyLCAxOTMsIDgzLCA3MSwgNzksIDIxMCwgODMsIDcxLCA2NywgMTI4LCA4MywgNzEsIDY1LCAyMTUsIAorICAgIDgzLCA3MSwgNjUsIDE5NCwgODMsIDcxLCAxMjgsIDgzLCA2OSwgODgsIDg0LCA4NSwgNzYsIDE5MywgODMsIDY5LCA4OCwgCisgICAgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgMjExLCA4MywgNjksIDg2LCA2OSwgODIsIDY1LCAKKyAgICA3OCwgNjcsIDY5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIAorICAgIDIxNywgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDY5LCA4NiwgNjksIDc4LCA0NSwgODQsIDcyLCAKKyAgICA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgMjA2LCA4MywgNjksIDg1LCA4OCwgMTI4LCA4MywgNjksIAorICAgIDg1LCA3OCwgODksIDY1LCA3NywgMTI4LCA4MywgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA2OSwgODQsIDcwLCA3OSwgCisgICAgNzgsIDEyOCwgODMsIDY5LCA4MywgODQsIDY5LCA4MiwgODQsIDczLCA4NSwgMjExLCA4MywgNjksIDgzLCA4MSwgODUsIDczLCAKKyAgICA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDY5LCA4MywgNjUsIDc3LCAxOTcsIDgzLCA2OSwgODIsIAorICAgIDg2LCA3MywgNjcsIDE5NywgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDgyLCA3MywgNzAsIDIxMSwgCisgICAgODMsIDY5LCA4MSwgODUsIDY5LCA3OCwgNjcsIDE5NywgODMsIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCAKKyAgICA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgCisgICAgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODMsIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA2OSwgNzcsIDg1LCAKKyAgICA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgNzcsIDc1LCA2NSwgODQsIDcyLCAxMjgsIDgzLCA2OSwgNzcsIDc1LCAxMjgsIAorICAgIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgMjEyLCA4MywgCisgICAgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA3NywgNzMsIDc3LCA3MywgNzgsIAorICAgIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgNzcsIDczLCA2NywgCisgICAgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCAyMDYsIDgzLCA2OSwgNzcsIDczLCAKKyAgICA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIAorICAgIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCA4NiwgNzMsIDIxMSwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgNzksIDczLCAKKyAgICA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTYsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTMsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTAsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTYsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIAorICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ4LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCisgICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTYsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTMsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTMsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgCisgICAgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ4LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTYsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAKKyAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCisgICAgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTMsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU3LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTAsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUxLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ4LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA2OSwgMTk2LCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgNzMsIDgzLCA3NywgMTkzLCAKKyAgICA4MywgNjksIDcyLCAxMjgsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgNjksIDcxLCA3OCwgNzksIDEyOCwgODMsIAorICAgIDY5LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgNjksIDc4LCAKICAgICAxMjgsIDgzLCA2OSwgNjksIDIwNiwgODMsIDY5LCA2OSwgNjgsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA2OSwgNjksIAogICAgIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA2OSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA2NywgCiAgICAgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA4MywgNjksIDY3LCA4MiwgNjksIDg0LCAKQEAgLTEyOTIsMjczMSArMTI5MywyNzMzIEBACiAgICAgNjcsIDIwMywgODIsIDc5LCA2NywgMTI4LCA4MiwgNzksIDY2LCA2NSwgODQsIDEyOCwgODIsIDc5LCA2NSwgODMsIDg0LCAKICAgICA2OSwgMTk2LCA4MiwgNzksIDY1LCA4MiwgMTI4LCA4MiwgNzksIDY1LCAxMjgsIDgyLCA3OCwgODksIDczLCA3OCwgMTk5LCAKICAgICA4MiwgNzgsIDc5LCA3OSwgNzgsIDEyOCwgODIsIDc4LCA3OSwgNzksIDIwNiwgODIsIDc4LCA2NSwgMjA1LCA4MiwgNzcsIAotICAgIDg0LCAxMjgsIDgyLCA3NiwgNzksIDEyOCwgODIsIDc2LCA3NywgMTI4LCA4MiwgNzYsIDY5LCAxMjgsIDgyLCA3NCwgNjksIAotICAgIDIxMSwgODIsIDc0LCA2OSwgMTI4LCA4MiwgNzQsIDE5NywgODIsIDczLCA4NiwgNjksIDgyLCAxMjgsIDgyLCA3MywgODQsIAotICAgIDg1LCA2NSwgNzYsIDEyOCwgODIsIDczLCA4NCwgODQsIDc5LCA4MiwgODUsIDEyOCwgODIsIDczLCA4NCwgODMsIDczLCAKLSAgICAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA4MiwgNzMsIDgyLCA2NSwgMTI4LCAKLSAgICA4MiwgNzMsIDgwLCAxMjgsIDgyLCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgNzgsIDcwLCA3OSwgODIsIDkwLCA2NSwgNzgsIAotICAgIDY4LCA3OSwgMTI4LCA4MiwgNzMsIDIwNiwgODIsIDczLCA3NywgNzEsIDY2LCA2NSwgMTI4LCA4MiwgNzMsIDc1LCA4MiwgCi0gICAgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzEsIDg2LCA2OSwgNjgsIDczLCAxOTUsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCAKLSAgICA4MiwgNjgsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIAotICAgIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgCi0gICAgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIAotICAgIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCAKLSAgICA4NCwgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCAKLSAgICA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA4MywgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCAKLSAgICA3MywgNjksIDg1LCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgCi0gICAgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIAotICAgIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgODQsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCAKLSAgICA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgCi0gICAgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODIsIDczLCA2OSwgODUsIDIwNCwgODIsIDczLCA2OSwgNzYsIAotICAgIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgODIsIDczLCA2NywgNjksIDc3LCAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIAotICAgIDgyLCA3MywgNjcsIDE5NywgODIsIDczLCA2NiwgNjYsIDc5LCA3OCwgMTI4LCA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgCi0gICAgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCA3MiwgMjA3LCA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgCi0gICAgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgyLCA3MSwgODksIDY1LCA3OCwgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCAKLSAgICA2OSwgODYsIDc5LCA3NiwgODYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDg2LCA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA4MiwgNjksIDg2LCA3NywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNzMsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCAKLSAgICA4MiwgODMsIDY5LCA2OCwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgMTk2LCA4MiwgNjksIDg2LCA2OSwgODIsIAotICAgIDgzLCAxOTcsIDgyLCA2OSwgODUsIDg4LCAxMjgsIDgyLCA2OSwgODUsIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgCi0gICAgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCA3MCwgNzYsIDY5LCAyMTYsIDgyLCAKLSAgICA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDc5LCA4MiwgODQsIDEyOCwgODIsIDY5LCA4MywgODUsIAotICAgIDgwLCA3MywgNzgsIDg1LCA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDc5LCA3OSwgNzcsIDEyOCwgODIsIDY5LCA4MywgCi0gICAgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgMTI4LCA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCAKLSAgICA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIAotICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgCi0gICAgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCAKLSAgICA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIAotICAgIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgCi0gICAgNzIsIDEyOCwgODIsIDY5LCA4MCwgNjksIDg0LCA3MywgODQsIDczLCA3OSwgMjA2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAKLSAgICA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIAotICAgIDgwLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2OSwgODAsIDY1LCAxMjgsIDgyLCA2OSwgODAsIDE5MywgODIsIDY5LCA3OCwgCi0gICAgODQsIDc5LCA3MSwgNjksIDc4LCAxMjgsIDgyLCA2OSwgNzgsIDEyOCwgODIsIDY5LCAyMDYsIDgyLCA2OSwgNzcsIDg1LCAKLSAgICAxMjgsIDgyLCA2OSwgNzcsIDY5LCA2OCwgODksIDEyOCwgODIsIDY5LCA3NiwgNzMsIDcxLCA3MywgNzksIDc4LCAxMjgsIAotICAgIDgyLCA2OSwgNzYsIDczLCA2OSwgODYsIDY5LCAxOTYsIDgyLCA2OSwgNzYsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDgyLCA2OSwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCAKLSAgICA2OSwgNzYsIDY1LCA2NSwgMTI4LCA4MiwgNjksIDc0LCA2NSwgNzgsIDE5OSwgODIsIDY5LCA3MywgMTk2LCA4MiwgNjksIAotICAgIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUyLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTEsIDEyOCwgCi0gICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgMTI4LCAKLSAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCAyMTEsIDgyLCA2OSwgNzEsIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIAotICAgIDY5LCA3MSwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3MSwgNzMsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgCi0gICAgNzMsIDY1LCAxMjgsIDgyLCA2OSwgNzAsIDc5LCA4MiwgNzcsIDY5LCAxOTYsIDgyLCA2OSwgNzAsIDY5LCA4MiwgNjksIDc4LCAKLSAgICA2NywgMTk3LCA4MiwgNjksIDY4LCA4NSwgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIAotICAgIDY3LCA4OSwgNjcsIDc2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNjksIDE5NiwgODIsIDY5LCA2NywgCi0gICAgODQsIDczLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIAotICAgIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgCi0gICAgNzYsIDE5NywgODIsIDY5LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNjcsIDc5LCAKLSAgICA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIAotICAgIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgMTk3LCA4MiwgNjksIDY3LCA2OSwgNzMsIDg2LCA2OSwgCi0gICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCAKLSAgICA4MiwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIAotICAgIDY4LCAyMDcsIDgyLCA2OCwgNjksIDIwNCwgODIsIDY2LCA2NSwgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIAotICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgCi0gICAgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgCi0gICAgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIAotICAgIDEyOCwgODIsIDY1LCA4MSwgMTI4LCA4MiwgNjUsIDgwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgCi0gICAgMTk3LCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDc1LCA2NSwgNjUsIDgyLCAKLSAgICA2NSwgNjUsIDc4LCA4MywgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjUsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA2NSwgNzMsIAotICAgIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgNjYsIDc5LCA4NywgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCA4OSwgCi0gICAgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCAyMTcsIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDgyLCA2NSwgNzMsIDY4LCAKLSAgICAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCA4MiwgNjUsIDcyLCA3NywgNjUsIDg0LCA4NSwgNzYsIDc2LCA2NSwgCi0gICAgMjAwLCA4MiwgNjUsIDcyLCAxMjgsIDgyLCA2NSwgNzAsIDY5LCAxMjgsIDgyLCA2NSwgNjksIDc3LCAxMjgsIDgyLCA2NSwgCi0gICAgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2NSwgNjgsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDY4LCAKLSAgICA3MywgMjA3LCA4MiwgNjUsIDY4LCAyMDEsIDgyLCA2NSwgNjgsIDEyOCwgODIsIDY1LCAxOTYsIDgyLCA2NSwgNjcsIDgxLCAKLSAgICA4NSwgNjksIDIxMiwgODIsIDY1LCA2NywgNzMsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDg0LCAxMjgsIAotICAgIDgyLCA2NSwgNjYsIDY2LCA3MywgMjEyLCA4MiwgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgCi0gICAgNTEsIDEyOCwgODIsIDY1LCA1MCwgMTI4LCA4MiwgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA1NywgMTI4LCA4MiwgCi0gICAgNDgsIDUwLCA1NiwgMTI4LCA4MiwgNDgsIDUwLCA1NSwgMTI4LCA4MiwgNDgsIDUwLCA1NCwgMTI4LCA4MiwgNDgsIDUwLCAKLSAgICA1MywgMTI4LCA4MiwgNDgsIDUwLCA1MiwgMTI4LCA4MiwgNDgsIDUwLCA1MSwgMTI4LCA4MiwgNDgsIDUwLCA1MCwgMTI4LCAKLSAgICA4MiwgNDgsIDUwLCA0OSwgMTI4LCA4MiwgNDgsIDUwLCA0OCwgMTI4LCA4MiwgNDgsIDQ5LCA1NywgMTI4LCA4MiwgNDgsIAotICAgIDQ5LCA1NiwgMTI4LCA4MiwgNDgsIDQ5LCA1NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgODIsIDQ4LCA0OSwgNTMsIDEyOCwgODIsIDQ4LCA0OSwgNTIsIDEyOCwgODIsIDQ4LCA0OSwgNTEsIDEyOCwgCi0gICAgODIsIDQ4LCA0OSwgNTAsIDEyOCwgODIsIDQ4LCA0OSwgNDksIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDgyLCAKLSAgICA0OCwgNDksIDQ4LCAxMjgsIDgyLCA0OCwgNDgsIDU3LCAxMjgsIDgyLCA0OCwgNDgsIDU2LCAxMjgsIDgyLCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDgyLCA0OCwgNDgsIDU0LCAxMjgsIDgyLCA0OCwgNDgsIDUzLCAxMjgsIDgyLCA0OCwgNDgsIDUyLCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUxLCA2NiwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgODIsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUwLCAxMjgsIDgyLCA0OCwgNDgsIDQ5LCAxMjgsIDgyLCAKLSAgICA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MSwgODksIDg4LCAxMjgsIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4NCwgMTI4LCAKLSAgICA4MSwgODksIDgyLCA4OCwgMTI4LCA4MSwgODksIDgyLCAxMjgsIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA3OSwgMTI4LCAKLSAgICA4MSwgODksIDczLCAxMjgsIDgxLCA4OSwgNjksIDY5LCAxMjgsIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCA2NSwgNjUsIAotICAgIDEyOCwgODEsIDg5LCA2NSwgMTI4LCA4MSwgODksIDEyOCwgODEsIDg3LCA3MywgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgODcsIDY5LCAxMjgsIDgxLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA4NywgNjUsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCAKLSAgICA4MSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIDEyOCwgODEsIDg1LCA4NCwgMTI4LCAKLSAgICA4MSwgODUsIDgzLCA3MiwgODMsIDcyLCA2NSwgODksIDY1LCAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODIsIAotICAgIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgODUsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MSwgODUsIAotICAgIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODEsIDg1LCA3OSwgODQsIDEyOCwgODEsIDg1LCA3OSwgODAsIDEyOCwgCi0gICAgODEsIDg1LCA3OSwgMTI4LCA4MSwgODUsIDc1LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA4NCwgNjksIDgzLCA4MywgNjksIDc4LCAKLSAgICA2NywgNjksIDEyOCwgODEsIDg1LCA3MywgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgxLCA4NSwgNzMsIAotICAgIDc4LCA2NywgODUsIDc4LCA4OCwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgCi0gICAgNzYsIDc2LCAxMjgsIDgxLCA4NSwgNzMsIDY3LCAyMDMsIDgxLCA4NSwgNzMsIDEyOCwgODEsIDg1LCA3MCwgMTI4LCA4MSwgCi0gICAgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgNjksIAotICAgIDIwNiwgODEsIDg1LCA2OSwgMTI4LCA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDg0LCA2OSwgCi0gICAgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCAKLSAgICA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIAotICAgIDIxMCwgODEsIDg1LCA2NSwgNzgsIDg0LCA3MywgODQsIDIxNywgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAKLSAgICAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgCi0gICAgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgODUsIDY1LCAxOTYsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIAotICAgIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIDc5LCA4NCwgMTI4LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA4MSwgNzksIAotICAgIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIDgxLCA3OSwgNzksIDEyOCwgODEsIDc5LCAyMDcsIDgxLCA3OSwgNzAsIAotICAgIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIDEyOCwgODEsIDc5LCAxMjgsIDgxLCA3OCwgMTI4LCA4MSwgNzMsIDg4LCAKLSAgICAxMjgsIDgxLCA3MywgODQsIDgzLCA2NSwgMTI4LCA4MSwgNzMsIDg0LCAxMjgsIDgxLCA3MywgODAsIDEyOCwgODEsIDczLCAKLSAgICA3MywgMTI4LCA4MSwgNzMsIDY5LCA4OCwgMTI4LCA4MSwgNzMsIDY5LCA4NCwgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA4MSwgNzMsIDY5LCAxMjgsIDgxLCA3MywgMTI4LCA4MSwgNzIsIDg3LCA3MywgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgODEsIDcyLCA4NywgNjksIDEyOCwgODEsIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIAotICAgIDgxLCA3MiwgODUsIDEyOCwgODEsIDcyLCA3OSwgMTI4LCA4MSwgNzIsIDczLCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIAotICAgIDgxLCA3MiwgNjksIDEyOCwgODEsIDcyLCA2NSwgNjUsIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzEsIDY1LCAxMjgsIAotICAgIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCA4NSwgCi0gICAgMTI4LCA4MSwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgODEsIDY1LCA4MiwgNzgsIDY5LCAyMTcsIDgxLCA2NSwgODIsIDEyOCwgCi0gICAgODEsIDY1LCA4MSwgMTI4LCA4MSwgNjUsIDgwLCA3MiwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDgzLCAxMjgsIDgxLCAKLSAgICA2NSwgNzcsIDY1LCA4NCwgMjExLCA4MSwgNjUsIDc2LCAxOTMsIDgxLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgCi0gICAgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNzAsIDEyOCwgODEsIDY1LCAxOTgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgCi0gICAgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDEyOCwgCi0gICAgODEsIDQ4LCA0OCwgNTUsIDEyOCwgODEsIDQ4LCA0OCwgNTQsIDEyOCwgODEsIDQ4LCA0OCwgNTMsIDEyOCwgODEsIDQ4LCAKLSAgICA0OCwgNTIsIDEyOCwgODEsIDQ4LCA0OCwgNTEsIDEyOCwgODEsIDQ4LCA0OCwgNTAsIDEyOCwgODEsIDQ4LCA0OCwgNDksIAotICAgIDEyOCwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCAKLSAgICA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDg5LCAxMjgsIDgwLCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCAKLSAgICA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCAKLSAgICA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCA4NSwgODgsIDEyOCwgODAsIDg1LCA4NSwgODQsIDEyOCwgODAsIDg1LCAKLSAgICA4NSwgMTI4LCA4MCwgODUsIDg0LCA4MiwgNjksIDcwLCA2NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgODQsIAotICAgIDEyOCwgODAsIDg1LCAyMTIsIDgwLCA4NSwgODMsIDcyLCA4MCwgNzMsIDc4LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA4MCwgCi0gICAgNzMsIDc1LCA2NSwgMTI4LCA4MCwgODUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgwLCA4NSwgODIsIDg4LCAxMjgsIDgwLCAKLSAgICA4NSwgODIsIDgzLCA2OSwgMTI4LCA4MCwgODUsIDgyLCA4MCwgNzYsIDE5NywgODAsIDg1LCA4MiwgNzgsIDY1LCA3NywgNjUsIAotICAgIDEyOCwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgMTI4LCA4MCwgODUsIDgyLCA3MywgNzAsIDg5LCAxMjgsIDgwLCA4NSwgCi0gICAgODIsIDEyOCwgODAsIDg1LCA4MSwgMTI4LCA4MCwgODUsIDgwLCAxMjgsIDgwLCA4NSwgNzksIDg4LCAxMjgsIDgwLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDEyOCwgODAsIDg1LCA3OCwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDg1LCAKLSAgICA3OCwgNzEsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgNzgsIAotICAgIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4NSwgNzcsIDgwLCAxMjgsIDgwLCA4NSwgNzcsIDEyOCwgCi0gICAgODAsIDg1LCA2OSwgMTI4LCA4MCwgODUsIDY2LCA3NiwgNzMsIDE5NSwgODAsIDg1LCA2NSwgODEsIDEyOCwgODAsIDg1LCAKLSAgICA2NSwgNjksIDEyOCwgODAsIDg1LCA1MCwgMTI4LCA4MCwgODUsIDQ5LCAxMjgsIDgwLCA4NSwgMTI4LCA4MCwgODQsIDcyLCAKLSAgICA2NSwgNzIsIDE5MywgODAsIDg0LCA2OSwgMTI4LCA4MCwgODMsIDczLCA3NiwgMjAxLCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCAKLSAgICA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgCi0gICAgODMsIDg0LCA3OSwgMjA2LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIAotICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODAsIDgzLCAxMjgsIDgwLCA4MiwgNzksIDg2LCA2OSwgMTI4LCA4MCwgODIsIAotICAgIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCA3OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgCi0gICAgNjksIDY3LCA4NCwgNjksIDE5NiwgODAsIDgyLCA3OSwgODMsIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIAotICAgIDczLCAxMjgsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgODIsIDc5LCA4MCwgCi0gICAgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDc5LCA4MCwgNjksIDgyLCA4NCwgMjE3LCA4MCwgODIsIDc5LCAKLSAgICA4MCwgNjksIDc2LCA3NiwgNjksIDIxMCwgODAsIDgyLCA3OSwgNzksIDcwLCAxMjgsIDgwLCA4MiwgNzksIDc2LCA3OSwgNzgsIAotICAgIDcxLCA2OSwgMTk2LCA4MCwgODIsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxOTcsIDgwLCA4MiwgNzksIDc0LCA2OSwgCi0gICAgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCAKLSAgICA4MiwgNzksIDcxLCA4MiwgNjksIDgzLCA4MywgMTI4LCA4MCwgODIsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA4MiwgNzksIAotICAgIDcwLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgCi0gICAgODUsIDY3LCAyMTIsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIAotICAgIDE5NywgODAsIDgyLCA3MywgODYsIDY1LCA2NywgMjE3LCA4MCwgODIsIDczLCA4MywgNzIsIDg0LCA3MiwgNjUsIDc3LCA2NSwgCi0gICAgODQsIDgyLCAxOTMsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIDEyOCwgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCAKLSAgICA4MiwgNzMsIDc4LCAyMTIsIDgwLCA4MiwgNzMsIDc4LCA2NywgNjksIDgzLCA4MywgMTI4LCA4MCwgODIsIDczLCA3NywgNjksIAotICAgIDEyOCwgODAsIDgyLCA3MywgNzcsIDE5NywgODAsIDgyLCA2OSwgODYsIDczLCA3OSwgODUsIDIxMSwgODAsIDgyLCA2OSwgCi0gICAgODMsIDY5LCA4NCwgMTI4LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCAKLSAgICA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgCi0gICAgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDc4LCA3NSwgNzIsIDY1LCAxMjgsIDgwLCA4MiwgNjksIDcwLCAKLSAgICA2NSwgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDczLCA4MCwgNzMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDczLCA3OCwgMTk5LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgODMsIDEyOCwgODAsIDgyLCA2OSwgCi0gICAgNjcsIDY5LCA2OCwgNjksIDIxMSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDE5NiwgODAsIDgyLCA2OSwgNjcsIDY5LCAKLSAgICA2OCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgMTk3LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgNzMsIAotICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDIwMSwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCA4OSwgCi0gICAgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDIxNywgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDIwNiwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIAotICAgIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAyMDEsIDgwLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA4MiwgCi0gICAgNjUsIDIwNSwgODAsIDgyLCAxMjgsIDgwLCA4MCwgODYsIDEyOCwgODAsIDgwLCA3NywgMTI4LCA4MCwgODAsIDY1LCAxMjgsIAotICAgIDgwLCA3OSwgODksIDEyOCwgODAsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDg3LCA2OSwgODIsIDIxMSwgODAsIDc5LCA4NywgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIAotICAgIDEyOCwgODAsIDc5LCA4NSwgNzgsIDE5NiwgODAsIDc5LCA4NSwgNzYsIDg0LCA4MiwgMjE3LCA4MCwgNzksIDg1LCA2NywgCi0gICAgNzIsIDEyOCwgODAsIDc5LCA4NCwgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDgwLCAKLSAgICA3OSwgMjEyLCA4MCwgNzksIDgzLCA4NCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODAsIDc5LCA4MywgODQsIAotICAgIDY2LCA3OSwgODgsIDEyOCwgODAsIDc5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA3OSwgODMsIDg0LCAxMjgsIDgwLCA3OSwgCi0gICAgODMsIDIxMiwgODAsIDc5LCA4MywgODMsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCAKLSAgICA2NywgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDIxMSwgODAsIDc5LCA4MCwgODAsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDgwLCAxMjgsIDgwLCA3OSwgMjA4LCA4MCwgNzksIDc5LCA2OCwgNzYsIDY5LCAxMjgsIAotICAgIDgwLCA3OSwgNzksIDEyOCwgODAsIDc5LCA3OCwgNjgsIDc5LCAxMjgsIDgwLCA3OSwgMjA2LCA4MCwgNzksIDc3LCA3NywgCi0gICAgNjksIDY5LCAxMjgsIDgwLCA3OSwgNzcsIDc3LCA2OSwgMTk3LCA4MCwgNzksIDc2LCA3MywgODMsIDcyLCAxMjgsIDgwLCAKLSAgICA3OSwgNzYsIDczLCA2NywgMTk3LCA4MCwgNzksIDc2LCAyMDEsIDgwLCA3OSwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzYsIAotICAgIDE5NywgODAsIDc5LCA3NSwgODIsIDg5LCA4NCwgNzMsIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgCi0gICAgODAsIDc5LCA3MywgNzgsIDg0LCAyMTEsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzksIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA4MCwgNzksIDczLCA3OCwgODQsIDEyOCwgODAsIAotICAgIDc5LCA3MywgNzgsIDIxMiwgODAsIDc5LCA2OSwgODQsIDgyLCAyMTcsIDgwLCA3OSwgNjksIDg0LCA3MywgMTk1LCA4MCwgCi0gICAgNzksIDY4LCA2NSwgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDY1LCAxMjgsIDgwLCA3OSwgMTI4LCA4MCwgMjA3LCA4MCwgCi0gICAgNzgsIDY5LCA4NSwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODAsIDc2LCA4NSwgODQsIDc5LCAxMjgsIDgwLCA3NiwgODUsIDgzLCAKLSAgICA0NSwgNzcsIDczLCA3OCwgODUsIDIxMSwgODAsIDc2LCA4NSwgODMsIDEyOCwgODAsIDc2LCA4NSwgODIsIDY1LCA3NiwgCi0gICAgMTI4LCA4MCwgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIDc2LCA4NSwgNzcsIDEyOCwgODAsIDc2LCA4NSwgNzUsIDEyOCwgCi0gICAgODAsIDc2LCA4NSwgNzEsIDEyOCwgODAsIDc2LCA4NSwgMTI4LCA4MCwgNzYsIDc5LCA4NywgMTI4LCA4MCwgNzYsIDc5LCAKLSAgICA4MCwgNzIsIDg1LCAxMjgsIDgwLCA3NiwgNjksIDg0LCA3MiwgODIsIDc5LCA3OCwgMTI4LCA4MCwgNzYsIDY4LCAxMjgsIAotICAgIDgwLCA3NiwgNjUsIDg5LCA3MywgNzgsIDE5OSwgODAsIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIDgwLCA3NiwgCi0gICAgNjUsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgODAsIDc2LCAKLSAgICA2NSwgNzUsIDEyOCwgODAsIDc2LCA2NSwgNzEsIDczLCA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgNjksIDcyLCA3OSwgNzYsIAotICAgIDY4LCA2OSwgMjEwLCA4MCwgNzYsIDY1LCA2NywgMTk3LCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgCi0gICAgNjcsIDY1LCA4NCwgNzksIDEyOCwgODAsIDczLCA5MCwgOTAsIDY1LCAxMjgsIDgwLCA3MywgODgsIDEyOCwgODAsIDczLCAKLSAgICA4NywgODIsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCA3NSwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIAotICAgIDcwLCA3OSwgODIsIDIwMywgODAsIDczLCA4NCwgMTI4LCA4MCwgNzMsIDgzLCA4NCwgNzksIDc2LCAxMjgsIDgwLCA3MywgCi0gICAgODMsIDY5LCA3NiwgNjksIDcyLCAxMjgsIDgwLCA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAKLSAgICAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIDgwLCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDgwLCA3MywgODAsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDgwLCA3MywgCi0gICAgODAsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCA4MCwgNzMsIDgwLCAxMjgsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAKLSAgICAyMDQsIDgwLCA3MywgNzgsIDY5LCA2NSwgODAsIDgwLCA3NiwgNjksIDEyOCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzMsIAotICAgIDc4LCA2NSwgODIsIDY2LCA3OSwgODIsIDY1LCA4MywgMTI4LCA4MCwgNzMsIDc2LCA3NiwgMTI4LCA4MCwgNzMsIDc2LCAKLSAgICAxOTcsIDgwLCA3MywgNzYsIDY3LCA4MiwgNzksIDIxNSwgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIAotICAgIDc1LCA3OSwgMTI4LCA4MCwgNzMsIDcxLCAxMjgsIDgwLCA3MywgMTk5LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIAotICAgIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgCi0gICAgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgCi0gICAgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODAsIDczLCA2OSwgCi0gICAgODUsIDIwOCwgODAsIDczLCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjksIDg0LCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDY5LCA4MSwgMTI4LCA4MCwgNzMsIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCAKLSAgICA4MCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDgwLCA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIAotICAgIDc5LCA4MiwgODUsIDEyOCwgODAsIDczLCA2NSwgODMsIDc3LCAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgCi0gICAgMjAxLCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgNzIsIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAKLSAgICAyMTAsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIAotICAgIDc4LCA2OSwgODMsIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCA3MywgNjcsIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgCi0gICAgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCA4MCwgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgCi0gICAgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIDc5LCA4MywgNzksIDgwLCA3MiwgNjksIDgyLCAyMTEsIDgwLCAKLSAgICA3MiwgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIAotICAgIDgzLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIAotICAgIDIwMCwgODAsIDcyLCA3MywgMTI4LCA4MCwgNzIsIDIwMSwgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCAKLSAgICA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTgsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NCwgODAsIDcyLCA2NSwgODIsIAotICAgIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA4MCwgNzIsIDY1LCA4MiwgMTI4LCA4MCwgNzIsIDY1LCA3OCwgMTI4LCA4MCwgCi0gICAgNzIsIDY1LCA3NywgMTI4LCA4MCwgNzIsIDY1LCA3MywgODMsIDg0LCA3OSwgMjExLCA4MCwgNzIsIDY1LCA3MSwgODMsIDQ1LCAKLSAgICA4MCwgMTkzLCA4MCwgNzIsIDY1LCA2NSwgODIsIDc1LCA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgNjUsIDEyOCwgODAsIAotICAgIDcyLCA2NSwgMTI4LCA4MCwgNzEsIDEyOCwgODAsIDcwLCAxMjgsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDgwLCA2OSwgODUsIAotICAgIDg0LCA2NSwgNjksIDEyOCwgODAsIDY5LCA4NSwgODQsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzksIDc1LCA3OSwgCi0gICAgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3MywgMTI4LCA4MCwgNjksIDg0LCAKLSAgICA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgNzYsIDc2LCA2OSwgMTk2LCA4MCwgNjksIDgzLCA3OSwgCi0gICAgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MCwgNjksIDgzLCA2OSwgODQsIDE5MywgCi0gICAgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgMjA3LCA4MCwgNjksIDgyLCA4MywgODAsIDY5LCA2NywgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgCi0gICAgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDIwNiwgODAsIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MCwgNjksIDgyLCAKLSAgICA4MywgNjksIDg2LCA2OSwgODIsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgCi0gICAgNzYsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCAKLSAgICA2OSwgODIsIDc3LCA3MywgODQsIDg0LCA2OSwgMTk2LCA4MCwgNjksIDgyLCA3NywgNjUsIDc4LCA2OSwgNzgsIDIxMiwgODAsIAotICAgIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDczLCAxMjgsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCAKLSAgICA3NywgNjksIDc4LCAyMDEsIDgwLCA2OSwgODIsIDcwLCA3OSwgODIsIDc3LCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgNzAsIAotICAgIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgMTI4LCA4MCwgNjksIDgyLCA3MCwgCi0gICAgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIDgzLCA4MywgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCAKLSAgICA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIAotICAgIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OSwgODAsIDc2LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgCi0gICAgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCAKLSAgICA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA4NSwgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIAotICAgIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgNzgsIDczLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDg1LCA3MywgCi0gICAgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgCi0gICAgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgCi0gICAgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIAotICAgIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCAKLSAgICA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIAotICAgIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MCwgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgCi0gICAgNjcsIDE5NywgODAsIDY4LCA3MCwgMTI4LCA4MCwgNjgsIDEyOCwgODAsIDY3LCAxMjgsIDgwLCA2NSwgOTAsIDY5LCA4MiwgCi0gICAgMTI4LCA4MCwgNjUsIDg5LCA2OSwgODIsIDc5LCA3NSwgMTI4LCA4MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDg5LCAxMjgsIDgwLCA2NSwgODgsIDEyOCwgODAsIDY1LCA4NywgNzgsIDEyOCwgODAsIDY1LCAyMTUsIDgwLCAKLSAgICA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MCwgNjUsIDg1LCAxMjgsIDgwLCA2NSwgODQsIDg0LCA2OSwgODIsIAotICAgIDc4LCAxMjgsIDgwLCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODQsIDIwMCwgCi0gICAgODAsIDY1LCA4NCwgNjUsIDc1LCAxMjgsIDgwLCA2NSwgODQsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDg0LCAxMjgsIDgwLCAKLSAgICA2NSwgODMsIDg1LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA4MywgODAsIDc5LCA4MiwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIAotICAgIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCAKLSAgICA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA2OCwgNzksIDg3LCA3OCwgNDUsIDc5LCAKLSAgICA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgwLCA2NSwgODMsIDcyLCA2NSwgNjksIAotICAgIDEyOCwgODAsIDY1LCA4MywgNjksIDgxLCAxMjgsIDgwLCA2NSwgODMsIDY1LCA3OCwgNzEsIDY1LCAyMDYsIDgwLCA2NSwgCi0gICAgODIsIDg1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA4NCwgMjE3LCA4MCwgNjUsIDgyLCA4NCwgNzgsIDY5LCA4MiwgODMsIDcyLCAKLSAgICA3MywgMjA4LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDY1LCA3NiwgNzYsIDg5LCA0NSwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgCi0gICAgNjksIDE5NiwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgMjA0LCA4MCwgNjUsIDgyLCA4NCwgNzIsIDczLCA2NSwgMjA2LCAKLSAgICA4MCwgNjUsIDgyLCAyMTIsIDgwLCA2NSwgODIsIDczLCA2NywgNzIsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgODMsIAotICAgIDg0LCA3MywgNzEsIDc3LCA2OSwgNzgsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY5LCA4MiwgNjksIDc4LCAxMjgsIDgwLCA2NSwgCi0gICAgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIAotICAgIDgzLCA3MywgMjExLCA4MCwgNjUsIDgyLCA2NSwgODAsIDcyLCA4MiwgNjUsIDgzLCAxOTcsIDgwLCA2NSwgODIsIDY1LCA3NiwgCi0gICAgNzYsIDY5LCA3NiwgNzksIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgMTI4LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgMjA0LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgCi0gICAgNzMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDIwMSwgODAsIDY1LCA4MiwgNjUsIDc1LCAKLSAgICA2NSwgNzYsIDY5LCA4MywgNzcsIDE5MywgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzksIDgzLCAxMjgsIAotICAgIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCAKLSAgICAyMDAsIDgwLCA2NSwgODIsIDY1LCAxMjgsIDgwLCA2NSwgODIsIDEyOCwgODAsIDY1LCA4MCwgODksIDgyLCA4NSwgODMsIAotICAgIDEyOCwgODAsIDY1LCA4MCwgNjksIDgyLCA2NywgNzYsIDczLCA4MCwgMTI4LCA4MCwgNjUsIDgwLCA2OSwgMjEwLCA4MCwgCi0gICAgNjUsIDgwLCAxMjgsIDgwLCA2NSwgMjA4LCA4MCwgNjUsIDIwNywgODAsIDY1LCA3OCwgODksIDg1LCA3NSwgODUsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgODksIDczLCA3NSwgODUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY5LCA2NywgNjksIDc1LCAxMjgsIDgwLCAKLSAgICA2NSwgNzgsIDg5LCA2NSwgNzgsIDcxLCA3MSwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3NSwgODIsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg0LCA3MywgMTI4LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCAKLSAgICA4MCwgMTI4LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3OCwgNzEsIDc5LCA3OCwgNjUsIDc4LCAxMjgsIDgwLCAKLSAgICA2NSwgNzgsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODcsIDczLCA4MywgNjUsIDY4LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDcxLCA4MiwgNjUsIDc4LCA3MSwgNzUsIDY5LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzksIDc2LCAKLSAgICA2NSwgODQsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNjUsIAotICAgIDg5LCA2NSwgODIsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA2NSwgCi0gICAgODQsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDcyLCA4NSwgNzYsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCAxMjgsIDgwLCAKLSAgICA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY4LCAxOTMsIDgwLCA2NSwgNzgsIAotICAgIDY1LCA2OSwgNzYsIDY1LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgCi0gICAgNzUsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3NywgODMsIDcyLCAKLSAgICA2NSwgNjksIDEyOCwgODAsIDY1LCA3NywgODAsIDcyLCA4OSwgNzYsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDc3LCA3MywgNzgsIAotICAgIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgCi0gICAgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjgsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAKLSAgICAxMjgsIDgwLCA2NSwgNzYsIDg1LCA4NCwgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzksIDY3LCA3MiwgNzUsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgNzYsIDIwNSwgODAsIDY1LCA3NiwgNzYsIDY1LCA4NywgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzYsIDY1LCA4MywgCi0gICAgMTI4LCA4MCwgNjUsIDc2LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODUsIDc4LCAxOTksIDgwLCAKLSAgICA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgCi0gICAgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAyMDQsIDgwLCA2NSwgNzUsIDgwLCAKLSAgICA2NSwgMjAzLCA4MCwgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNzksIDczLCAxMjgsIDgwLCA2NSwgNzMsIDgyLCA4NCwgNzIsIAotICAgIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDczLCA4MiwgNjksIDE5NiwgODAsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDcyLCA3NiwgCi0gICAgNjUsIDg2LCAyMDEsIDgwLCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3MSwgNjksIDgyLCAxMjgsIDgwLCA2NSwgNzEsIDE5NywgCi0gICAgODAsIDY1LCA2OCwgNzcsIDE5MywgODAsIDY1LCA2OCwgNjgsIDczLCA3OCwgMTk5LCA4MCwgNjUsIDY4LCAxOTMsIDgwLCAKLSAgICA2NSwgNjgsIDEyOCwgODAsIDY1LCA2NywgNzUsIDczLCA3OCwgNzEsIDEyOCwgODAsIDY1LCA2NywgNzUsIDY1LCA3MSwgNjksIAotICAgIDEyOCwgODAsIDY1LCA2NSwgODQsIDg1LCAxMjgsIDgwLCA2NSwgNjUsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgNjUsIDczLCAxMjgsIDgwLCAKLSAgICA2NSwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgODAsIDY1LCA2NSwgMTI4LCA4MCwgNTAsIDEyOCwgODAsIAotICAgIDQ4LCA0OSwgNDksIDEyOCwgODAsIDQ4LCA0OSwgNDgsIDEyOCwgODAsIDQ4LCA0OCwgNTcsIDEyOCwgODAsIDQ4LCA0OCwgCi0gICAgNTYsIDEyOCwgODAsIDQ4LCA0OCwgNTUsIDEyOCwgODAsIDQ4LCA0OCwgNTQsIDEyOCwgODAsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgODAsIDQ4LCA0OCwgNTIsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDUxLCAxMjgsIDgwLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgODksIAotICAgIDgyLCA2NSwgNzgsIDczLCA4MywgNzcsIDE5MywgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgODgsIDczLCA2NSwgCi0gICAgMTI4LCA3OSwgODgsIDczLCAxOTMsIDc5LCA4OCwgNjksIDczLCA2NSwgMjAxLCA3OSwgODgsIDY5LCA3MywgMTkzLCA3OSwgCi0gICAgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA3OSwgNzgsIDE5OSwgNzksIDg2LCAKLSAgICA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDc5LCA4NiwgNjksIAotICAgIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgMTI4LCA3OSwgCi0gICAgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgMTI4LCA3OSwgODYsIDY1LCAyMDQsIDc5LCA4NiwgMTI4LCA3OSwgODUsIDg0LCAKLSAgICA3NiwgNzMsIDc4LCA2OSwgMTk2LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODUsIDg0LCA2OSwgCi0gICAgMjEwLCA3OSwgODUsIDg0LCA2NiwgNzksIDIxNiwgNzksIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4NSwgNzgsIDY3LCAKLSAgICA2OSwgMTI4LCA3OSwgODUsIDc4LCA2NywgMTk3LCA3OSwgODQsIDg1LCAxMjgsIDc5LCA4NCwgODQsIDY1LCA4NiwgMTkzLCAKLSAgICA3OSwgODQsIDg0LCAxMjgsIDc5LCA4NCwgNzIsIDY1LCA3NiwgNjUsIDIwNiwgNzksIDg0LCA3MiwgNjUsIDc2LCAxMjgsIAotICAgIDc5LCA4MywgNzcsIDY1LCA3OCwgODksIDE5MywgNzksIDgzLCA2NywgMTI4LCA3OSwgODIsIDg0LCA3MiwgNzksIDcxLCA3OSwgCi0gICAgNzgsIDY1LCAyMDQsIDc5LCA4MiwgODQsIDcyLCA3OSwgNjgsIDc5LCAyMTYsIDc5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCAKLSAgICA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDIxMiwgNzksIAotICAgIDgyLCA3NSwgNzIsIDc5LCAyMDYsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNzMsIDcxLCA3MywgCi0gICAgNzgsIDEyOCwgNzksIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKLSAgICA2OCwgNjksIDIxMCwgNzksIDgyLCA2NywgNzIsIDczLCA2OCwgMTI4LCA3OSwgODIsIDY1LCA3OCwgNzEsIDE5NywgNzksIAotICAgIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDc5LCA4MCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgCi0gICAgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCAKLSAgICA4MCwgNzksIDgzLCA3MywgNzgsIDE5OSwgNzksIDgwLCA4MCwgNzksIDgzLCA2OSwgMTI4LCA3OSwgODAsIDcyLCA3MywgODUsIAotICAgIDY3LCA3MiwgODUsIDgzLCAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3OSwgODAsIDY5LCA4MiwgCi0gICAgNjUsIDg0LCA3OSwgMjEwLCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDczLCAKLSAgICA3OCwgMTk5LCA3OSwgODAsIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIAotICAgIDczLCA3OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgCi0gICAgNzgsIDQ1LCA2NywgNzMsIDgyLCA2NywgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgNzksIAotICAgIDkwLCA2OSwgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgCi0gICAgNzcsIDg1LCAxMjgsIDc5LCA3OSwgNjksIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgNzgsIDg1LCAxMjgsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIAotICAgIDgyLCAxMjgsIDc5LCA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgCi0gICAgNzksIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzksIDc4LCA2OSwgNDUsIDc2LCA3MywgNzgsIAotICAgIDE5NywgNzksIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgCi0gICAgODMsIDgzLCA3MywgNzksIDIwNiwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCAKLSAgICA3OSwgMjA2LCA3OSwgNzcsIDY5LCA3MSwgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIAotICAgIDc5LCA3OCwgMTI4LCA3OSwgNzYsIDczLCA4NiwgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgCi0gICAgNjgsIDEyOCwgNzksIDc1LCA4NCwgMjA3LCA3OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgCi0gICAgNzksIDc0LCA3MywgNjYsIDg3LCA2NSwgMjE3LCA3OSwgNzQsIDY5LCA3OSwgNzgsIDEyOCwgNzksIDczLCA3NiwgMTI4LCAKLSAgICA3OSwgNzIsIDc3LCAxMjgsIDc5LCA3MiwgMjA1LCA3OSwgNzEsIDgyLCA2OSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIAotICAgIDc1LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA3OSwgNzAsIDcwLCA3MywgCi0gICAgNjcsIDY5LCA4MiwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgMTk3LCAKLSAgICA3OSwgNzAsIDcwLCAxMjgsIDc5LCA2OSwgODksIDEyOCwgNzksIDY5LCA3NSwgMTI4LCA3OSwgNjgsIDY5LCA3OCwgMTI4LCAKLSAgICA3OSwgNjgsIDE5NiwgNzksIDY3LCA4NCwgNzksIDgwLCA4NSwgODMsIDEyOCwgNzksIDY3LCA4NCwgNzksIDY2LCA2OSwgODIsIAotICAgIDEyOCwgNzksIDY3LCA4NCwgNjksIDIxMiwgNzksIDY3LCAyMTAsIDc5LCA2NywgNzYsIDc5LCA2NywgNzUsIDEyOCwgNzksIAotICAgIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDY2LCA3OSwgNzYsIDIxMSwgNzksIDY2LCA3OSwgMjA0LCA3OSwgNjYsIDc5LCA3MCwgNzMsIAotICAgIDc2LCA3MywgMTI4LCA3OSwgNjYsIDc2LCA3MywgODEsIDg1LCAxOTcsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgCi0gICAgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc5LCA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDY2LCAxMjgsIDc5LCAKLSAgICA2NSwgODksIDEyOCwgNzksIDY1LCA3NSwgMTI4LCA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDc5LCAxOTMsIDc5LCA0OCwgNTMsIDQ5LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDEyOCwgNzksIDQ4LCA1MiwgNTcsIDEyOCwgNzksIDQ4LCA1MiwgNTYsIDEyOCwgCi0gICAgNzksIDQ4LCA1MiwgNTUsIDEyOCwgNzksIDQ4LCA1MiwgNTQsIDEyOCwgNzksIDQ4LCA1MiwgNTMsIDEyOCwgNzksIDQ4LCAKLSAgICA1MiwgNTIsIDEyOCwgNzksIDQ4LCA1MiwgNTEsIDEyOCwgNzksIDQ4LCA1MiwgNTAsIDEyOCwgNzksIDQ4LCA1MiwgNDksIAotICAgIDEyOCwgNzksIDQ4LCA1MiwgNDgsIDEyOCwgNzksIDQ4LCA1MSwgNTcsIDEyOCwgNzksIDQ4LCA1MSwgNTYsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NywgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDUzLCAxMjgsIDc5LCA0OCwgNTEsIDUyLCAxMjgsIDc5LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OSwgNDgsIAotICAgIDUxLCA1MSwgMTI4LCA3OSwgNDgsIDUxLCA1MCwgMTI4LCA3OSwgNDgsIDUxLCA0OSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCAKLSAgICAxMjgsIDc5LCA0OCwgNTAsIDU2LCAxMjgsIDc5LCA0OCwgNTAsIDU1LCAxMjgsIDc5LCA0OCwgNTAsIDU0LCAxMjgsIDc5LCAKLSAgICA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1MywgMTI4LCA3OSwgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzksIAotICAgIDQ4LCA1MCwgNTIsIDEyOCwgNzksIDQ4LCA1MCwgNTEsIDEyOCwgNzksIDQ4LCA1MCwgNTAsIDEyOCwgNzksIDQ4LCA1MCwgCi0gICAgNDksIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCAxMjgsIDc5LCA0OCwgNDksIDU3LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgMTI4LCA3OSwgNDgsIDQ5LCA1NiwgMTI4LCA3OSwgNDgsIDQ5LCA1NSwgMTI4LCAKLSAgICA3OSwgNDgsIDQ5LCA1NCwgMTI4LCA3OSwgNDgsIDQ5LCA1MywgMTI4LCA3OSwgNDgsIDQ5LCA1MiwgMTI4LCA3OSwgNDgsIAotICAgIDQ5LCA1MSwgMTI4LCA3OSwgNDgsIDQ5LCA1MCwgMTI4LCA3OSwgNDgsIDQ5LCA0OSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgCi0gICAgNjcsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCAKLSAgICA0OCwgMTI4LCA3OSwgNDgsIDQ4LCA1NywgMTI4LCA3OSwgNDgsIDQ4LCA1NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NSwgMTI4LCAKLSAgICA3OSwgNDgsIDQ4LCA1NCwgNzAsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY5LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OCwgCi0gICAgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjcsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIAotICAgIDEyOCwgNzksIDQ4LCA0OCwgNTIsIDEyOCwgNzksIDQ4LCA0OCwgNTEsIDEyOCwgNzksIDQ4LCA0OCwgNTAsIDEyOCwgNzksIAotICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA0NSwgCi0gICAgNzksIDQ1LCA3MywgMTI4LCA3OSwgNDUsIDY5LCAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAKLSAgICAxMjgsIDc4LCA5MCwgODksIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCAKLSAgICA3OCwgOTAsIDg5LCAxMjgsIDc4LCA5MCwgODUsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIAotICAgIDg1LCA4MiwgMTI4LCA3OCwgOTAsIDg1LCA4MSwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgCi0gICAgODgsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMjA2LCA3OCwgOTAsIDg1LCAxMjgsIDc4LCA5MCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDg0LCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgNzgsIDkwLCA3MywgNjksIDEyOCwgNzgsIDkwLCA3MywgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIAotICAgIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDkwLCA2OSwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDY1LCA4MSwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgMTI4LCA3OCwgOTAsIDY1LCAxMjgsIDc4LCA5MCwgCi0gICAgMTkzLCA3OCwgODksIDg3LCA2NSwgMTI4LCA3OCwgODksIDg1LCA4OCwgMTI4LCA3OCwgODksIDg1LCA4NSwgMTI4LCA3OCwgCi0gICAgODksIDg1LCA4NCwgMTI4LCA3OCwgODksIDg1LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg5LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCAxMjgsIDc4LCA4OSwgODUsIDY5LCAxMjgsIDc4LCA4OSwgODUsIAotICAgIDEyOCwgNzgsIDg5LCA3OSwgODgsIDEyOCwgNzgsIDg5LCA3OSwgODQsIDEyOCwgNzgsIDg5LCA3OSwgODAsIDEyOCwgNzgsIAotICAgIDg5LCA3OSwgNzksIDEyOCwgNzgsIDg5LCA3OSwgNjUsIDEyOCwgNzgsIDg5LCA3OSwgMTI4LCA3OCwgODksIDc0LCA2NSwgCi0gICAgMTI4LCA3OCwgODksIDczLCA4OCwgMTI4LCA3OCwgODksIDczLCA4NCwgMTI4LCA3OCwgODksIDczLCAyMTIsIDc4LCA4OSwgCi0gICAgNzMsIDIxMSwgNzgsIDg5LCA3MywgMjEwLCA3OCwgODksIDczLCA4MCwgMTI4LCA3OCwgODksIDczLCA3OCwgNDUsIDY4LCAKLSAgICA3OSwgMTI4LCA3OCwgODksIDczLCA3MywgMTI4LCA3OCwgODksIDczLCA2OSwgODgsIDEyOCwgNzgsIDg5LCA3MywgNjksIAotICAgIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgODksIDczLCA2OSwgMTI4LCA3OCwgODksIDczLCAxMjgsIAotICAgIDc4LCA4OSwgMjAxLCA3OCwgODksIDcyLCA2NSwgMTI4LCA3OCwgODksIDY5LCA4NCwgMTI4LCA3OCwgODksIDY5LCAyMTIsIAotICAgIDc4LCA4OSwgNjksIDcyLCAxMjgsIDc4LCA4OSwgNjksIDIwMCwgNzgsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDg5LCA2OSwgCi0gICAgMTI4LCA3OCwgODksIDE5NiwgNzgsIDg5LCA2NywgNjUsIDEyOCwgNzgsIDg5LCA2NSwgODUsIDEyOCwgNzgsIDg5LCA2NSwgCi0gICAgNzMsIDEyOCwgNzgsIDg5LCA2NSwgNzIsIDEyOCwgNzgsIDg5LCA2NSwgNjksIDc3LCA2NSwgNjksIDEyOCwgNzgsIDg5LCAKLSAgICA2NSwgNjUsIDEyOCwgNzgsIDg3LCA3OSwgNzksIDEyOCwgNzgsIDg3LCA3OSwgMTI4LCA3OCwgODcsIDczLCA3MywgMTI4LCAKLSAgICA3OCwgODcsIDczLCAxMjgsIDc4LCA4NywgNjksIDEyOCwgNzgsIDg3LCA2NSwgNjUsIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCAKLSAgICA3OCwgODcsIDEyOCwgNzgsIDg2LCAxMjgsIDc4LCA4NSwgODgsIDEyOCwgNzgsIDg1LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAKLSAgICA4NSwgMTI4LCA3OCwgODUsIDg0LCA3MywgNzYsIDc2LCA4NSwgMTI4LCA3OCwgODUsIDg0LCAxMjgsIDc4LCA4NSwgMjEyLCAKLSAgICA3OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODUsIDgyLCAxMjgsIDc4LCA4NSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzgsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgMTI4LCA3OCwgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzgsIAotICAgIDg1LCA3OCwgODUsIDIxOCwgNzgsIDg1LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgMjEyLCA3OCwgCi0gICAgODUsIDc4LCA2NSwgODYsIDczLCAyMDMsIDc4LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAyMDYsIDc4LCA4NSwgNzcsIDY5LCAKLSAgICA4MiwgMjA3LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgCi0gICAgMjA0LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCA4MywgMTI4LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCAKLSAgICA4NSwgNzcsIDEyOCwgNzgsIDg1LCA3NiwgNzYsIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgODUsIDc2LCAxMjgsIDc4LCAKLSAgICA4NSwgNzUsIDg0LCA2NSwgMTI4LCA3OCwgODUsIDY5LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA2OSwgMTI4LCA3OCwgODUsIAotICAgIDY2LCA3MywgNjUsIDIwNiwgNzgsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDg1LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNTAsIDUwLCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCAKLSAgICA4NSwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgCi0gICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDQ5LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCi0gICAgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OCwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIAotICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIAotICAgIDc4LCA4NCwgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgCi0gICAgNzEsIDY2LCA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCAKLSAgICA2OSwgNjksIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCAKLSAgICA3OCwgODMsIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIAotICAgIDc5LCA3NywgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgCi0gICAgNzgsIDgzLCA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCAKLSAgICA3OCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIAotICAgIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgCi0gICAgNjUsIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCAKLSAgICA2NSwgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIAotICAgIDEyOCwgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIAotICAgIDg1LCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgCi0gICAgODIsIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgCi0gICAgODIsIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAKLSAgICAxMjgsIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCAKLSAgICA2NSwgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgCi0gICAgMTI4LCA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCAKLSAgICA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIAotICAgIDg0LCA2OSwgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgCi0gICAgODQsIDY3LCA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAKLSAgICAyMTIsIDc4LCA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIAotICAgIDgyLCA4NCwgNzIsIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgCi0gICAgNzgsIDc5LCAyMTAsIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgCi0gICAgNzgsIDc5LCA3OCwgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIAotICAgIDY1LCA2NiwgNzYsIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgCi0gICAgNDUsIDY2LCA4MiwgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCAKLSAgICA3NSwgNzIsIDg1LCA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIAotICAgIDY2LCA4MiwgNjksIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgCi0gICAgNzksIDEyOCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCAKLSAgICA3OCwgNzgsIDc4LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIAotICAgIDc4LCA3OCwgNjUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAKLSAgICA3OSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIAotICAgIDczLCAxMjgsIDc4LCA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIAotICAgIDc4LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgCi0gICAgNDgsIDQ5LCA1NywgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCAKLSAgICA3OCwgNzYsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgCi0gICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCAKLSAgICA1MCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIAotICAgIDQ4LCA1NywgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgCi0gICAgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCAKLSAgICA3OCwgNzYsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgCi0gICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgCi0gICAgMjA3LCA3OCwgNzUsIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCAKLSAgICA3NCwgODksIDg4LCAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgCi0gICAgNzgsIDc0LCA4NSwgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCAKLSAgICA3NCwgODUsIDY5LCA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgCi0gICAgMTI4LCA3OCwgNzQsIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgNjksIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIAotICAgIDczLCAxMjgsIDc4LCA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIAotICAgIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgCi0gICAgNzQsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCAKLSAgICA2OSwgMTI4LCA3OCwgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIAotICAgIDc2LCA3MywgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgCi0gICAgMTI4LCA3OCwgNzMsIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCAKLSAgICA3MSwgODUsIDEyOCwgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIAotICAgIDg0LCA4OSwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIAotICAgIDg0LCA4OSwgMTI4LCA3OCwgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgCi0gICAgNjgsIDY1LCAxNzgsIDc4LCA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCAKLSAgICA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIAotICAgIDcyLCA4MywgNzIsIDg2LCA2NSwgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgCi0gICAgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCAKLSAgICA3MSwgNzIsIDIxMiwgNzgsIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgCi0gICAgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCAKLSAgICA3OCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCAKLSAgICA4NSwgNzgsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKLSAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgCi0gICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIAotICAgIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIAotICAgIDczLCA2NiwgMTI4LCA3OCwgNzMsIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIAotICAgIDcyLCA3NCwgNjUsIDEyOCwgNzgsIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDg1LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgCi0gICAgNzgsIDcxLCA4NSwgNzksIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgODgsIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIAotICAgIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzEsIDc5LCA3NywgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgCi0gICAgNzgsIDcxLCAyMDcsIDc4LCA3MSwgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIAotICAgIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgCi0gICAgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgCi0gICAgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCAKLSAgICA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIAotICAgIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgCi0gICAgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCAKLSAgICA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIAotICAgIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgCi0gICAgODEsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCAKLSAgICA3MSwgODUsIDc5LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIAotICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAKLSAgICAyMDYsIDc4LCA3MSwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCAKLSAgICA3OCwgNzEsIDcxLCA3MywgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIAotICAgIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMjEzLCA3OCwgCi0gICAgNzEsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDY5LCAKLSAgICA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIAotICAgIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIAotICAgIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIAotICAgIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAKLSAgICAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCAKLSAgICA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIAotICAgIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIAotICAgIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgCi0gICAgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCAxMjgsIDc4LCAKLSAgICA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCAxMjgsIAotICAgIDc4LCA2OSwgMjEyLCA3OCwgNjksIDgzLCA4NCwgNjksIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCAKLSAgICA2OSwgMjA3LCA3OCwgNjksIDc4LCA2NSwgNzgsIDc5LCAxMjgsIDc4LCA2OSwgNzgsIDEyOCwgNzgsIDY5LCA3NiwgMTI4LCAKLSAgICA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2OSwgNzEsIAotICAgIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2NywgNzUsIDg0LCA3MywgNjksIDEyOCwgNzgsIDY5LCA2NiwgNjksIDc4LCA4MywgCi0gICAgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCA2OCwgODUsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc4LCAKLSAgICA2OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIAotICAgIDg1LCA3OCwgMTI4LCA3OCwgNjgsIDIxMywgNzgsIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIAotICAgIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzgsIDY4LCA3OSwgCi0gICAgNzcsIDY2LCA4NSwgMTI4LCA3OCwgNjgsIDc5LCA3NiwgMTk3LCA3OCwgNjgsIDczLCA4OCwgMTI4LCA3OCwgNjgsIDczLCAKLSAgICA4NCwgMTI4LCA3OCwgNjgsIDczLCA4MSwgMTI4LCA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzgsIDY4LCA3MywgNjksIDEyOCwgNzgsIDY4LCA3MywgNjgsIDY1LCAxMjgsIDc4LCA2OCwgNzMsIDY1LCA4MSwgCi0gICAgMTI4LCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg0LCAKLSAgICAxMjgsIDc4LCA2OCwgNjksIDg1LCA2NSwgNjksIDgyLCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIAotICAgIDY4LCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA3OCwgNjgsIDY1LCA3NywgMTI4LCA3OCwgNjgsIDY1LCA2NSwgNzgsIDcxLCAKLSAgICA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA2OCwgNjUsIDY1LCAxMjgsIDc4LCA2OCwgNjUsIDE5MywgNzgsIAotICAgIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgCi0gICAgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgCi0gICAgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCAKLSAgICA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgNzgsIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIAotICAgIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCA3OSwgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIAotICAgIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgCi0gICAgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIDc4LCA2NiwgNzMsIDEyOCwgNzgsIDY2LCA3MiwgMTI4LCA3OCwgCi0gICAgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAKLSAgICAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCA4OCwgNzMsIAotICAgIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIDg1LCA2OCwgCi0gICAgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCAKLSAgICA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIAotICAgIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3OCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCAKLSAgICA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgODMsIDY1LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCA2NSwgNzgsIDcxLCA3NywgNzksIAotICAgIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgCi0gICAgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzcsIDE5NywgNzgsIDY1LCA3NywgNTAsIDEyOCwgNzgsIDY1LCA3NywgMTI4LCA3OCwgCi0gICAgNjUsIDc1LCAxMjgsIDc4LCA2NSwgNzMsIDgyLCAxOTMsIDc4LCA2NSwgNzMsIDIwNCwgNzgsIDY1LCA3MSwgODIsIDIwMSwgCi0gICAgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCAKLSAgICA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2OSwgMTI4LCA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzgsIDY1LCAKLSAgICA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgCi0gICAgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA2NSwgCi0gICAgNDUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgNTIsIDQ4LCAKLSAgICAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAxMjgsIDc4LCA0OCwgNTEsIDU1LCA2NSwgMTI4LCAKLSAgICA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCA3OCwgNDgsIDUxLCA1MywgNjUsIDEyOCwgNzgsIAotICAgIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUyLCAxMjgsIDc4LCA0OCwgCi0gICAgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgNDgsIDUxLCA1MCwgMTI4LCA3OCwgNDgsIDUxLCAKLSAgICA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCA1NywgMTI4LCA3OCwgNDgsIDUwLCA1NiwgMTI4LCAKLSAgICA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCA3OCwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzgsIAotICAgIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIDQ4LCA1MCwgCi0gICAgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgNTcsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgMTI4LCAKLSAgICA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNDgsIAotICAgIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIDQ5LCA0OSwgCi0gICAgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgCi0gICAgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNDgsIDQ4LCAKLSAgICA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNDgsIDQ4LCA0OSwgMTI4LCAKLSAgICA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIDIxNywgNzcsIDg5LCA4OCwgMTI4LCA3NywgODksIAotICAgIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIDc3LCA4OSwgODAsIDEyOCwgNzcsIDg5LCA2NSwgCi0gICAgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCAyMTcsIDc3LCA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIAotICAgIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIAotICAgIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCAKLSAgICA4NiwgODMsIDEyOCwgNzcsIDg2LCA3OSwgODAsIDEyOCwgNzcsIDg2LCA3MywgMTI4LCA3NywgODYsIDY5LCA4NSwgNjUsIAotICAgIDY5LCA3OCwgNzEsIDY1LCA3NywgMTI4LCA3NywgODYsIDEyOCwgNzcsIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIAotICAgIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAKLSAgICAxOTMsIDc3LCA4NSwgODUsIDEyOCwgNzcsIDg1LCA4NCwgMTI4LCA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCAKLSAgICA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgCi0gICAgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgCi0gICAgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCAKLSAgICA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIAotICAgIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIAotICAgIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDc3LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgCi0gICAgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCAKLSAgICA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIAotICAgIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIAotICAgIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgCi0gICAgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCAKLSAgICA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCAKLSAgICA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIAotICAgIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgCi0gICAgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgCi0gICAgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIDE5NywgNzcsIDc5LCA4NiwgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAKLSAgICAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDgzLCA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCAKLSAgICA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDgzLCAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgMjA2LCA3NywgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCAKLSAgICA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIAotICAgIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgODUsIDc3LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgCi0gICAgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgNzksIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgCi0gICAgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCA3NywgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCAKLSAgICA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCA3NywgNzksIDc5LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIAotICAgIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgCi0gICAgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCAKLSAgICA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgCi0gICAgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgNzksIDc4LCA3OSwgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCAKLSAgICA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDc5LCA3OCwgNzUsIDY5LCA4OSwgMTI4LCA3NywgNzksIAotICAgIDc4LCA3NSwgNjksIDIxNywgNzcsIDc5LCA3OCwgNzMsIDEyOCwgNzcsIDc5LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgCi0gICAgODEsIDEyOCwgNzcsIDc5LCA3OCwgNjksIDIxNywgNzcsIDc5LCA3OCwgMTI4LCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgCi0gICAgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCAKLSAgICA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIAotICAgIDEyOCwgNzcsIDc5LCA2OCwgNjksIDEyOCwgNzcsIDc5LCA2NiwgNzMsIDc2LCAxOTcsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIAotICAgIDIwNywgNzcsIDc4LCA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIDEyOCwgNzcsIDc3LCA4MywgODAsIDEyOCwgNzcsIAotICAgIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIDc2LCAxMjgsIDc3LCA3NSwgODAsIDY1LCA4MiwgNjUsIAotICAgIDIwOSwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIAotICAgIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3MywgODIsIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgCi0gICAgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCAKLSAgICA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIAotICAgIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgCi0gICAgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAKLSAgICAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIAotICAgIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIAotICAgIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgCi0gICAgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgCi0gICAgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCAKLSAgICA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCAKLSAgICA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgCi0gICAgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCAKLSAgICA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCAKLSAgICA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIAotICAgIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgCi0gICAgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIAotICAgIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCAKLSAgICA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIAotICAgIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgCi0gICAgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgCi0gICAgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCAKLSAgICA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIAotICAgIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgCi0gICAgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDc3LCAKLSAgICA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCA4MSwgCi0gICAgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCA3MSwgNjUsIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAKLSAgICAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCA3MCwgNzksIDc4LCAKLSAgICAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCA3NywgNzAsIDczLCA4OSwgNjUsIDgxLCAxMjgsIDc3LCAKLSAgICA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDcwLCA2OSwgODUsIDgxLCAxMjgsIAotICAgIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgNjUsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAKLSAgICAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCAKLSAgICA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIDc4LCAxMjgsIDc3LCA2OSwgODQsIAotICAgIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAKLSAgICAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIAotICAgIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgCi0gICAgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCAKLSAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgMTk3LCA3NywgNjksIDgzLCA3OSwgCi0gICAgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCAKLSAgICA3MywgMTk1LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIDc1LCA3MiwgMTkzLCA3NywgNjksIAotICAgIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDc3LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgCi0gICAgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCAKLSAgICA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgCi0gICAgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIDEyOCwgNzcsIDY5LCA3NywgMTI4LCAKLSAgICA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgNjksIDc2LCA3MywgNzUsIDEyOCwgNzcsIAotICAgIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgCi0gICAgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKLSAgICA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIAotICAgIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgCi0gICAgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAKLSAgICAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIAotICAgIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgCi0gICAgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIAotICAgIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgCi0gICAgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCAKLSAgICA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIAotICAgIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgCi0gICAgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCAKLSAgICA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIAotICAgIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIAotICAgIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgCi0gICAgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgCi0gICAgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgCi0gICAgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIAotICAgIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgNjUsIDg0LCAxMjgsIDc3LCA2NSwgCi0gICAgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCA4MywgODMsIDY1LCA3MSwgNjksIAotICAgIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA3MCwgCi0gICAgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgNjcsIDg1LCA3NiwgNzMsIDc4LCAKLSAgICAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIDEyOCwgNzcsIDY1LCA4MiwgODQsIAotICAgIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgCi0gICAgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUyLCAxMjgsIDc3LCAKLSAgICA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIAotICAgIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgCi0gICAgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIAotICAgIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgCi0gICAgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCAKLSAgICA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIAotICAgIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIAotICAgIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCAKLSAgICA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIAotICAgIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgCi0gICAgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCAKLSAgICA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgCi0gICAgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCA3NywgNzksIDc1LCAxMjgsIDc3LCAKLSAgICA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIAotICAgIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgMTI4LCA3NywgNjUsIDczLCA3NiwgCi0gICAgNjYsIDc5LCAyMTYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCA2NSwgNzMsIDY4LCA2OSwgNzgsIAotICAgIDEyOCwgNzcsIDY1LCA3MywgMTI4LCA3NywgNjUsIDcyLCA3NCwgNzksIDc4LCAxOTksIDc3LCA2NSwgNzIsIDcyLCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgNjUsIDc1LCAKLSAgICA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCA3NywgNjUsIDcyLCAxMjgsIAotICAgIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2NSwgCi0gICAgNjksIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDg2LCAKLSAgICA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzEsIAotICAgIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgCi0gICAgNjksIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCA2OSwgNzYsIDY5LCA2OSwgMTI4LCAKLSAgICA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgODUsIAotICAgIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgCi0gICAgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCAKLSAgICA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY1LCA2NywgCi0gICAgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgMjA2LCAKLSAgICA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCA2NSwgMTI4LCA3NywgNjUsIAotICAgIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNTIsIDEyOCwgNzcsIAotICAgIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIDEyOCwgNzcsIDQ4LCA1MiwgCi0gICAgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIDc3LCA0OCwgNTEsIDU2LCAKLSAgICAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgNTEsIDUzLCAxMjgsIDc3LCAKLSAgICA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzcsIAotICAgIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDc3LCA0OCwgCi0gICAgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAKLSAgICA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgNDgsIDUwLCA1NCwgMTI4LCAKLSAgICA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDEyOCwgNzcsIAotICAgIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUwLCAxMjgsIDc3LCA0OCwgCi0gICAgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIDc3LCA0OCwgNDksIDU2LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgNjUsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUzLCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MiwgMTI4LCA3NywgCi0gICAgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2OSwgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NiwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIDQ4LCA0OSwgNDksIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgNDgsIDU3LCAxMjgsIDc3LCAKLSAgICA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAxMjgsIDc3LCA0OCwgNDgsIAotICAgIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY1LCAKLSAgICAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIDg5LCA4OCwgMTI4LCA3NiwgCi0gICAgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIDg5LCA4MCwgMTI4LCA3NiwgCi0gICAgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgMTI4LCA3NiwgODcsIDc5LCAKLSAgICA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgNzMsIDEyOCwgNzYsIDg3LCAKLSAgICA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgODgsIDEyOCwgNzYsIDg1LCAKLSAgICA4NSwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgODAsIDEyOCwgNzYsIDg1LCAKLSAgICA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzYsIDg1LCA3OSwgMTI4LCAKLSAgICA3NiwgODUsIDc4LCA3MSwgODMsIDczLCAxMjgsIDc2LCA4NSwgNzgsIDY1LCA4NCwgMTk3LCA3NiwgODUsIDIwNSwgNzYsIAotICAgIDg1LCA3NiwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIDcyLCA4NSwgODIsIDEyOCwgNzYsIDg1LCA3MiwgCi0gICAgMTI4LCA3NiwgODUsIDcxLCA3MSwgNjUsIDcxLCA2OSwgMTI4LCA3NiwgODUsIDcxLCA2NSwgNzYsIDEyOCwgNzYsIDg1LCAKLSAgICA3MSwgNjUsIDIwNCwgNzYsIDg1LCA2OSwgMTI4LCA3NiwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDg1LCA1MSwgMTI4LCAKLSAgICA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgODIsIDc5LCAxMjgsIDc2LCA4MiwgNzcsIDEyOCwgNzYsIDgyLCAKLSAgICA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIAotICAgIDc2LCA3OSwgODgsIDEyOCwgNzYsIDc5LCA4NywgNjksIDgyLCA2OSwgMTk2LCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3NiwgCi0gICAgNzksIDg3LCA0NSwgMTg1LCA3NiwgNzksIDg2LCAxOTcsIDc2LCA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDg1LCAKLSAgICA2OCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgNzYsIDc5LCA4NSwgNjgsIDc2LCAyMTcsIDc2LCA3OSwgODQsIAotICAgIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA4OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgCi0gICAgNjUsIDczLCA3OCwgNjksIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAKLSAgICAxMjgsIDc2LCA3OSwgNzksIDgwLCA2OSwgMTk2LCA3NiwgNzksIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCAyMDgsIDc2LCAKLSAgICA3OSwgNzksIDc4LCAxMjgsIDc2LCA3OSwgNzksIDIwMywgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIAotICAgIDc3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgCi0gICAgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAotICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCAKLSAgICA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgCi0gICAgNjUsIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIAotICAgIDY1LCA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgCi0gICAgNzksIDc3LCA3NywgNjUsIDY5LCAxMjgsIDc2LCA3OSwgNzcsIDEyOCwgNzYsIDc5LCAyMDUsIDc2LCA3OSwgNzYsIDc2LCAKLSAgICA3MywgODAsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc2LCA3NiwgMTI4LCA3NiwgNzksIDcxLCAyMTAsIDc2LCA3OSwgNzEsIAotICAgIDc5LCA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc2LCA3OSwgNzEsIDEyOCwgCi0gICAgNzYsIDc5LCA2OCwgNjksIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3OSwgNzcsIDc5LCA4NCwgNzMsIAotICAgIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3NSwgNzMsIDc4LCA3MSwgNDUsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDc2LCA3OSwgCi0gICAgNjcsIDIwMywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzksIDc5LCAKLSAgICAxMjgsIDc2LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgNzksIAotICAgIDEyOCwgNzYsIDc2LCA3NiwgNzksIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDczLCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDY5LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgODUsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgNjUsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCAxMjgsIDc2LCA3NCwgODUsIDY4LCA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgNjksIDEyOCwgNzYsIAotICAgIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCA4NywgNzgsIDEyOCwgNzYsIDczLCA4NiwgODIsIDE5NywgNzYsIAotICAgIDczLCA4NCwgODQsIDc2LCAxOTcsIDc2LCA3MywgODQsIDg0LCA2OSwgMjEwLCA3NiwgNzMsIDg0LCA4MiwgMTkzLCA3NiwgCi0gICAgNzMsIDg0LCAxMjgsIDc2LCA3MywgODMsIDIxMywgNzYsIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgCi0gICAgNzYsIDczLCA4MSwgMTI4LCA3NiwgNzMsIDgwLCA4MywgODQsIDczLCA2NywgNzUsIDEyOCwgNzYsIDczLCA3OCwgNzUsIDczLCAKLSAgICA3OCwgMTk5LCA3NiwgNzMsIDc4LCAyMDMsIDc2LCA3MywgNzgsIDcxLCA4MywgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIAotICAgIDgzLCAxMjgsIDc2LCA3MywgNzgsIDY5LCAyMTEsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTcsIDEyOCwgNzYsIDczLCA3OCwgCi0gICAgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNDksIAotICAgIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUwLCAxMjgsIDc2LCA3MywgCi0gICAgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAxOTYsIDc2LCAKLSAgICA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc2LCA3MywgNzcsIDczLCA4NCwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgCi0gICAgODQsIDcyLCAxMjgsIDc2LCA3MywgNzYsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA3NiwgNzMsIDcxLCA3MiwgODQsIDcyLCA3OSwgODUsIDgzLCA2OSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIAotICAgIDczLCA3MCwgNjksIDEyOCwgNzYsIDczLCA2OSwgODgsIDEyOCwgNzYsIDczLCA2OSwgODQsIDEyOCwgNzYsIDczLCA2OSwgCi0gICAgODAsIDEyOCwgNzYsIDczLCA2OSwgNjksIDEyOCwgNzYsIDczLCA2OSwgMTI4LCA3NiwgNzMsIDY4LCAxMjgsIDc2LCA3MywgCi0gICAgNjYsIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDY2LCA2OSwgODIsIDg0LCA4OSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCAKLSAgICA3MywgODQsIDIxNywgNzYsIDcyLCA3MywgNzMsIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCi0gICAgMTI4LCA3NiwgNzIsIDY1LCAxOTksIDc2LCA3MiwgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgCi0gICAgMTI4LCA3NiwgNjksIDg4LCAxMjgsIDc2LCA2OSwgODYsIDY5LCAyMDQsIDc2LCA2OSwgODUsIDc3LCAxMjgsIDc2LCA2OSwgCi0gICAgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NiwgNjksIDg1LCAxMjgsIDc2LCAKLSAgICA2OSwgMjEzLCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCA4MywgMTI4LCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCAxMjgsIAotICAgIDc2LCA2OSwgMjEyLCA3NiwgNjksIDgzLCA4MywgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgCi0gICAgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDc5LCAKLSAgICA4MCwgNjUsIDgyLCA2OCwgMTI4LCA3NiwgNjksIDc5LCAxMjgsIDc2LCA2OSwgNzgsIDg0LCA3MywgNjcsIDg1LCA3NiwgNjUsIAotICAgIDIxMCwgNzYsIDY5LCA3OCwgNzMsIDgzLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAKLSAgICAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgMjAwLCA3NiwgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIAotICAgIDE5MywgNzYsIDY5LCA3NywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzcsIDc5LCA3MywgMTI4LCA3NiwgNjksIDc2LCA2OSwgCi0gICAgODQsIDEyOCwgNzYsIDY5LCA3NiwgNjksIDIxMiwgNzYsIDY5LCAyMDMsIDc2LCA2OSwgNzMsIDc3LCA3NywgNjUsIDEyOCwgCi0gICAgNzYsIDY5LCA3MywgNzcsIDc3LCAxOTMsIDc2LCA2OSwgNzEsIDgzLCAxMjgsIDc2LCA2OSwgNzEsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNzYsIDY5LCA3MSwgNjksIDg0LCA3OSwgMjExLCA3NiwgNjksIDcxLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA4NywgCi0gICAgNjUsIDgyLCA2OCwgODMsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4NCwgNzksIDQ1LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA4NCwgNjksIDIwNSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIAotICAgIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODAsIDc5LCAKLSAgICA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgNzYsIAotICAgIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAKLSAgICAxOTksIDc2LCA2OSwgNzAsIDg0LCAxMjgsIDc2LCA2OSwgNjksIDgyLCA2NSwgNjksIDg3LCA2NSwgMTI4LCA3NiwgNjksIAotICAgIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzYsIDY5LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA3NiwgCi0gICAgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA3MCwgMTI4LCA3NiwgNjksIDY1LCAxOTgsIDc2LCAKLSAgICA2OSwgNjUsIDY4LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCAxOTYsIAotICAgIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIDc2LCA2NywgMTk3LCA3NiwgNjUsIAotICAgIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc2LCA2NSwgODgsIDEyOCwgNzYsIDY1LCA4NywgCi0gICAgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgNzYsIDY1LCAxMjgsIDc2LCA2NSwgODUsIDc1LCA2NSwgMjE4LCA3NiwgCi0gICAgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDg0LCA3MywgNzUsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCAKLSAgICA2NSwgMjA0LCA3NiwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgODMsIDIxMiwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIAotICAgIDY1LCAyMDQsIDc2LCA2NSwgODIsIDcxLCA2OSwgMjEwLCA3NiwgNjUsIDgyLCA3MSwgNjksIDEyOCwgNzYsIDY1LCA4MiwgCi0gICAgNzEsIDE5NywgNzYsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgMTI4LCA3NiwgCi0gICAgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA3NiwgNjUsIDc4LCA3MSwgODUsIDY1LCA3MSwgMTk3LCA3NiwgNjUsIDc4LCAKLSAgICA2OSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDEyOCwgNzYsIAotICAgIDY1LCA3NywgNjksIDE5NiwgNzYsIDY1LCA3NywgNjksIDEyOCwgNzYsIDY1LCA3NywgMTk3LCA3NiwgNjUsIDc3LCA2OCwgCi0gICAgNjUsIDEyOCwgNzYsIDY1LCA3NywgNjgsIDEyOCwgNzYsIDY1LCA3NywgNjYsIDY4LCAxOTMsIDc2LCA2NSwgNzcsIDY1LCAKLSAgICA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCA3NiwgNjUsIDIwNCwgNzYsIDY1LCA3NSwgNzUsIDcyLCA2NSwgNzgsIAotICAgIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc2LCA2NSwgNzQsIDY1LCA3OCwgODksIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgCi0gICAgMjAxLCA3NiwgNjUsIDcyLCA4MywgNzIsIDg1LCAxMjgsIDc2LCA2NSwgNzIsIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAKLSAgICAxMjgsIDc2LCA2NSwgNzEsIDIxMywgNzYsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAyMTAsIDc2LCAKLSAgICA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMTk0LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIAotICAgIDY5LCAxMjgsIDc2LCA2NSwgNjgsIDIxNywgNzYsIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIAotICAgIDY1LCA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgCi0gICAgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNjUsIDY2LCA3MywgNjUsIDIwNCwgNzYsIDY1LCAKLSAgICA2NiwgNjUsIDg0LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIAotICAgIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgNjUsIDc3LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA0OCwgCi0gICAgNDgsIDU0LCA2NSwgMTI4LCA3NiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgNzYsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDc2LCAKLSAgICA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDc1LCA4OSwgODUsIDgyLCA3MywgNzMsIDEyOCwgNzUsIDg5LCA4NSwgCi0gICAgMTI4LCA3NSwgODksIDc5LCAxMjgsIDc1LCA4OSwgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4OSwgNzMsIDEyOCwgCi0gICAgNzUsIDg5LCA2OSwgMTI4LCA3NSwgODksIDY1LCA4NCwgNzIsIDc5LCAyMTEsIDc1LCA4OSwgNjUsIDY1LCAxMjgsIDc1LCAKLSAgICA4OSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNzMsIDEyOCwgNzUsIDg4LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4OCwgODcsIAotICAgIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgMTI4LCA3NSwgODgsIDg1LCAxMjgsIAotICAgIDc1LCA4OCwgNzksIDEyOCwgNzUsIDg4LCA3MywgMTI4LCA3NSwgODgsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDY5LCAxMjgsIAotICAgIDc1LCA4OCwgNjUsIDY1LCAxMjgsIDc1LCA4OCwgNjUsIDEyOCwgNzUsIDg3LCA4NSwgNTEsIDQ5LCA1NiwgMTI4LCA3NSwgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA3NSwgODcsIDc5LCAxMjgsIDc1LCA4NywgNzMsIDczLCAxMjgsIDc1LCA4NywgNzMsIDEyOCwgCi0gICAgNzUsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg3LCA2OSwgMTI4LCA3NSwgODcsIDY1LCA4OSwgMTI4LCA3NSwgODcsIDY1LCAKLSAgICA2OSwgODQsIDEyOCwgNzUsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg2LCA2NSwgMTI4LCA3NSwgODYsIDEyOCwgNzUsIDg1LCAKLSAgICA4OCwgMTI4LCA3NSwgODUsIDg1LCA3MiwgMTI4LCA3NSwgODUsIDg0LCAxMjgsIDc1LCA4NSwgODMsIDc3LCA2NSwgMTI4LCAKLSAgICA3NSwgODUsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDc1LCA4NSwgODIsIDg4LCAxMjgsIDc1LCA4NSwgODIsIDg1LCA5MCwgNjksIAotICAgIDczLCA4MiwgNzksIDEyOCwgNzUsIDg1LCA4MiwgODQsIDEyOCwgNzUsIDg1LCA4MiwgNzksIDc5LCA3OCwgNjksIDEyOCwgCi0gICAgNzUsIDg1LCA4MiwgMTI4LCA3NSwgODUsIDIxMCwgNzUsIDg1LCA4MSwgMTI4LCA3NSwgODUsIDc5LCA4OCwgMTI4LCA3NSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3NSwgODUsIDc5LCAyMDgsIDc1LCA4NSwgNzksIDc3LCAxMjgsIDc1LCA4NSwgNzksIDEyOCwgCi0gICAgNzUsIDg1LCA3OCwgNzEsIDEyOCwgNzUsIDg1LCA3OCwgNjgsIDY4LCA2NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzUsIDg1LCAKLSAgICA3NiwgMTI4LCA3NSwgODUsIDIwNCwgNzUsIDg1LCA2OSwgODQsIDEyOCwgNzUsIDg1LCA1NSwgMTI4LCA3NSwgODUsIDUyLCAKLSAgICAxMjgsIDc1LCA4NSwgMTgwLCA3NSwgODUsIDUxLCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODQsIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgODUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDg1LCAxMjgsIDc1LCA4MywgODMsIDc5LCA3OSwgMTI4LCA3NSwgODMsIDgzLCAKLSAgICA3OSwgMTI4LCA3NSwgODMsIDgzLCA3MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjksIAotICAgIDY5LCAxMjgsIDc1LCA4MywgODMsIDY5LCAxMjgsIDc1LCA4MywgODMsIDY1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgCi0gICAgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDY1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAxMjgsIDc1LCA4MywgODMsIDEyOCwgCi0gICAgNzUsIDgzLCA3MywgMTI4LCA3NSwgODIsIDY5LCA3NywgNjUsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCAKLSAgICA3NywgNzksIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDc5LCA3OCwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgCi0gICAgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIAotICAgIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgMTkzLCA3NSwgODAsIDg1LCAxMjgsIDc1LCA4MCwgNzksIDgxLCAxMjgsIAotICAgIDc1LCA4MCwgNzksIDc5LCAxMjgsIDc1LCA4MCwgNzksIDEyOCwgNzUsIDgwLCA3MywgMTI4LCA3NSwgODAsIDY5LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDgwLCA2OSwgNjksIDEyOCwgNzUsIDgwLCA2OSwgMTI4LCA3NSwgODAsIDY1LCA4MiwgNjUsIDgxLCAKLSAgICAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIDc1LCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4OCwgMTI4LCA3NSwgNzksIDg2LCAKLSAgICA4NSwgODUsIDEyOCwgNzUsIDc5LCA4NCwgNzksIDEyOCwgNzUsIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNzksIAotICAgIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA3NSwgNzksIDgyLCA2OSwgNjUsIDIwNiwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgCi0gICAgMTk1LCA3NSwgNzksIDgxLCA3OCwgNjgsIDc5LCA3OCwgMTI4LCA3NSwgNzksIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MCwgMTI4LCA3NSwgNzksIDc5LCA4MCwgNzksIDEyOCwgNzUsIDc5LCA3OSwgNzcsIDg1LCA4NSwgODQsIDEyOCwgNzUsIAotICAgIDc5LCA3OSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgNjUsIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgCi0gICAgNzcsIDE5MywgNzUsIDc5LCA3NywgMjAxLCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NSwgNzksIDc3LCAKLSAgICA2NiwgODUsIDg2LCAxOTMsIDc1LCA3OSwgNzcsIDY2LCAyMTMsIDc1LCA3OSwgNzUsIDc5LCAxMjgsIDc1LCA3OSwgNzUsIAotICAgIDEyOCwgNzUsIDc5LCAyMDMsIDc1LCA3OSwgNzMsIDEyOCwgNzUsIDc5LCAyMDEsIDc1LCA3OSwgNzIsIDEyOCwgNzUsIDc5LCAKLSAgICA3MSwgNzIsIDc5LCA3NywgMTI4LCA3NSwgNzksIDY5LCA4NCwgMTI4LCA3NSwgNzksIDY1LCA3NiwgNjUsIDEyOCwgNzUsIAotICAgIDc5LCA2NSwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3NSwgCi0gICAgNzgsIDczLCA3MCwgNjksIDEyOCwgNzUsIDc4LCA3MywgNzAsIDE5NywgNzUsIDc3LCAxMjgsIDc1LCAyMDUsIDc1LCA3NiwgCi0gICAgNzMsIDg0LCA3OSwgNzgsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIAotICAgIDE5MywgNzUsIDc2LCA2NSwgMTI4LCA3NSwgNzYsIDEyOCwgNzUsIDc1LCA4NSwgMTI4LCA3NSwgNzUsIDc5LCAxMjgsIDc1LCAKLSAgICA3NSwgNzMsIDEyOCwgNzUsIDc1LCA2OSwgNjksIDEyOCwgNzUsIDc1LCA2OSwgMTI4LCA3NSwgNzUsIDY1LCAxMjgsIDc1LCAKLSAgICA3NSwgMTI4LCA3NSwgNzQsIDY5LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIAotICAgIDg0LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCAKLSAgICA3OSwgNzUsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNzMsIAotICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgNzUsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCAKLSAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDIwMywgNzUsIDczLCA4OCwgMTI4LCA3NSwgNzMsIDg0LCAxMjgsIDc1LCA3MywgODMsIAotICAgIDgzLCA3MywgNzgsIDE5OSwgNzUsIDczLCA4MywgODMsIDEyOCwgNzUsIDczLCA4MywgMjExLCA3NSwgNzMsIDgzLCA3MywgCi0gICAgNzcsIDUzLCAxMjgsIDc1LCA3MywgODMsIDczLCA3NywgMTgxLCA3NSwgNzMsIDgzLCA3MiwgMTI4LCA3NSwgNzMsIDgzLCAKLSAgICA2NSwgNzYsIDEyOCwgNzUsIDczLCA4MiwgNzksIDg3LCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzcsIAotICAgIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDEyOCwgCi0gICAgNzUsIDczLCA4MiwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzEsIDcyLCA3MywgMjE4LCA3NSwgNzMsIDgxLCAxMjgsIDc1LCAKLSAgICA3MywgODAsIDEyOCwgNzUsIDczLCAyMDgsIDc1LCA3MywgNzgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc1LCA3MywgNzgsIAotICAgIDY4LCA2OSwgODIsIDcxLCA2NSwgODIsIDg0LCA2OSwgNzgsIDEyOCwgNzUsIDczLCA3NywgNzksIDc4LCA3OSwgMTI4LCA3NSwgCi0gICAgNzMsIDczLCAxMjgsIDc1LCA3MywgNzIsIDEyOCwgNzUsIDczLCA2OSwgODgsIDEyOCwgNzUsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgNzUsIDczLCA2OSwgNjksIDc3LCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzMsIDE5NiwgCi0gICAgNzUsIDczLCA2NywgNzUsIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCAKLSAgICA4NSwgNjksIDc4LCA0NSwgNzYsIDg1LCAxOTcsIDc1LCA3MiwgODUsIDY5LCAyMDYsIDc1LCA3MiwgODUsIDY4LCA2NSwgNzcsIAotICAgIDEyOCwgNzUsIDcyLCA4NSwgNjUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDg1LCAxMjgsIDc1LCA3MiwgNzksIDIxMiwgNzUsIAotICAgIDcyLCA3OSwgNzgsIDEyOCwgNzUsIDcyLCA3OSwgNzcsIDg1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgCi0gICAgMjA3LCA3NSwgNzIsIDc3LCAyMTMsIDc1LCA3MiwgNzMsIDg0LCAxMjgsIDc1LCA3MiwgNzMsIDc4LCA4OSwgNjUsIDEyOCwgCi0gICAgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgMjAwLCA3NSwgNzIsIDczLCAxMjgsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCAKLSAgICA3MiwgNzIsIDY1LCAxMjgsIDc1LCA3MiwgNjksIDg0LCA3MiwgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIAotICAgIDY5LCA2OSwgMTI4LCA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgCi0gICAgNzUsIDcyLCA2NSwgODIsIDEyOCwgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCAKLSAgICA3MiwgNjUsIDc4LCA2OCwgMTkzLCA3NSwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY1LCA3NywgODQsIDIwMSwgNzUsIAotICAgIDcyLCA2NSwgNzUsIDY1LCA4MywgODMsIDczLCA2NSwgMjA2LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDY1LCA3MiwgCi0gICAgMTI4LCA3NSwgNzIsIDY1LCAyMDAsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MSwgMTI4LCA3NSwgNjksIDg5LCA2NywgCi0gICAgNjUsIDgwLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgMjA4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIAotICAgIDEyOCwgNzUsIDY5LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MywgCi0gICAgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA4MCwgODUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIDc5LCAyMTIsIDc1LCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDc1LCA2OSwgODUsIDg0LCA3OCwgNjgsIDY1LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA4NCwgNzcsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNzMsIDEyOCwgNzUsIDY5LCAKLSAgICA4NCwgODQsIDIwMSwgNzUsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDc1LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA3NSwgNjksIAotICAgIDc5LCA4NywgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgCi0gICAgNzcsIDY1LCA4NCwgMTkzLCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCAKLSAgICA3NSwgNjksIDc4LCAxMjgsIDc1LCA2OSwgMjA2LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAxMjgsIDc1LCA2OSwgNzcsIAotICAgIDgwLCA4NSwgMjA0LCA3NSwgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgCi0gICAgNjksIDc3LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCAKLSAgICA2OSwgNzYsIDg2LCA3MywgMjA2LCA3NSwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDIwMCwgNzUsIAotICAgIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgCi0gICAgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCAKLSAgICA3NSwgNjYsIDEyOCwgNzUsIDY1LCA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAotICAgIDc1LCA2NSwgODksIDY1LCAyMDAsIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NywgNzMsIDEyOCwgNzUsIDY1LCA4NiwgCi0gICAgODksIDc1LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgMjA2LCA3NSwgNjUsIDg1LCAKLSAgICAxMjgsIDc1LCA2NSwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODQsIDcyLCA3MywgODMsIDg0LCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDg0LCA3MiwgNjUsIDc1LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDY1LCA4NCwgCi0gICAgNjUsIDg2LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIDc4LCA2NSwgNDUsIDcyLCA3MywgODIsIDY1LCA3MSwgNjUsIAotICAgIDc4LCAxOTMsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgCi0gICAgMjA2LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDEyOCwgNzUsIDY1LCA4MywgODIsIDE5MywgNzUsIDY1LCA4MywgNzUsIDY1LCAKLSAgICA3NiwgMTI4LCA3NSwgNjUsIDgzLCA3NSwgNjUsIDIwNCwgNzUsIDY1LCA4MywgNzIsIDc3LCA3MywgODIsIDIwMSwgNzUsIAotICAgIDY1LCA4MiwgODMsIDcyLCA2NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODIsIDc5LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDIwNywgNzUsIDY1LCA4MiwgNjksIDIwNiwgNzUsIDY1LCA4MiwgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDY1LCAKLSAgICA4MiwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3NSwgCi0gICAgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIDgwLCA4MCwgNjUsIAotICAgIDEyOCwgNzUsIDY1LCA4MCwgODAsIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgCi0gICAgNzUsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY1LCA3OCwgMTk5LCA3NSwgNjUsIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCAKLSAgICA2NSwgNzcsIDUyLCAxMjgsIDc1LCA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgNzcsIDEyOCwgNzUsIDY1LCA3NSwgNzksIAotICAgIDEyOCwgNzUsIDY1LCA3NSwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzUsIDY1LCA3NSwgMTI4LCA3NSwgNjUsIDIwMywgNzUsIAotICAgIDY1LCA3MywgODQsIDcyLCAyMDEsIDc1LCA2NSwgNzMsIDgyLCA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgCi0gICAgMjAxLCA3NSwgNjUsIDcwLCA2NSwgMTI4LCA3NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgCi0gICAgMTI4LCA3NSwgNjUsIDY4LCAxODEsIDc1LCA2NSwgNjgsIDUyLCAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgCi0gICAgNjgsIDE3OSwgNzUsIDY1LCA2OCwgNTAsIDEyOCwgNzUsIDY1LCA2OCwgMTI4LCA3NSwgNjUsIDY2LCAxOTMsIDc1LCA2NSwgCi0gICAgNjYsIDEyOCwgNzUsIDY1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDc1LCA2NSwgNjUsIDcwLCAKLSAgICAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgNzUsIDY1LCAxNzgsIDc1LCA0OCwgNDgsIDU2LCAxMjgsIDc1LCA0OCwgNDgsIDU1LCAKLSAgICAxMjgsIDc1LCA0OCwgNDgsIDU0LCAxMjgsIDc1LCA0OCwgNDgsIDUzLCAxMjgsIDc1LCA0OCwgNDgsIDUyLCAxMjgsIDc1LCAKLSAgICA0OCwgNDgsIDUxLCAxMjgsIDc1LCA0OCwgNDgsIDUwLCAxMjgsIDc1LCA0OCwgNDgsIDQ5LCAxMjgsIDc0LCA4NywgNjUsIAotICAgIDEyOCwgNzQsIDg1LCA4NSwgMTI4LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA4NSwgODMsIDg0LCA3MywgNzAsIDczLCA2NywgCi0gICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc0LCA4NSwgODAsIDczLCA4NCwgNjksIDgyLCAxMjgsIDc0LCA4NSwgNzksIDg0LCAKLSAgICAxMjgsIDc0LCA4NSwgNzksIDgwLCAxMjgsIDc0LCA4NSwgNzgsIDc5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAxMjgsIDc0LCAKLSAgICA4NSwgNzYsIDg5LCAxMjgsIDc0LCA4NSwgNjksIDg1LCA3MywgMTI4LCA3NCwgODUsIDY4LCA4NSwgNzYsIDEyOCwgNzQsIAotICAgIDg1LCA2OCwgNzEsIDY5LCAxMjgsIDc0LCA4NSwgNjgsIDY5LCA3OSwgNDUsIDgzLCA4MCwgNjUsIDc4LCA3MywgODMsIDIwMCwgCi0gICAgNzQsIDc5LCA4OSwgNzksIDg1LCAyMTEsIDc0LCA3OSwgODksIDEyOCwgNzQsIDc5LCA4NiwgNjksIDEyOCwgNzQsIDc5LCAKLSAgICAyMTIsIDc0LCA3OSwgNzgsIDcxLCAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCAKLSAgICA3OSwgNzMsIDc4LCA2OSwgNjgsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDEyOCwgNzQsIDc5LCA2NSwgMTI4LCA3NCwgNzQsIAotICAgIDg5LCA4OCwgMTI4LCA3NCwgNzQsIDg5LCA4NCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCAxMjgsIAotICAgIDc0LCA3NCwgODUsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3NCwgCi0gICAgNzQsIDg1LCA4MiwgMTI4LCA3NCwgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDEyOCwgNzQsIDc0LCA3OSwgODgsIAotICAgIDEyOCwgNzQsIDc0LCA3OSwgODQsIDEyOCwgNzQsIDc0LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIAotICAgIDczLCA4OCwgMTI4LCA3NCwgNzQsIDczLCA4NCwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgCi0gICAgODgsIDEyOCwgNzQsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3NCwgNzQsIDczLCAKLSAgICA2OSwgMTI4LCA3NCwgNzQsIDczLCAxMjgsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNjksIDEyOCwgNzQsIDc0LCAKLSAgICA2NSwgMTI4LCA3NCwgNzMsIDc2LCAxMjgsIDc0LCA3MywgNzMsIDEyOCwgNzQsIDczLCA3MiwgODYsIDY1LCA3NywgODUsIAotICAgIDc2LCA3MywgODksIDY1LCAxMjgsIDc0LCA3MywgNjUsIDEyOCwgNzQsIDcyLCA3OSwgMTI4LCA3NCwgNzIsIDY5LCA3MiwgCi0gICAgMTI4LCA3NCwgNzIsIDY1LCA3OCwgMTI4LCA3NCwgNzIsIDY1LCA3NywgMTI4LCA3NCwgNzIsIDY1LCA2NSwgMTI4LCA3NCwgCi0gICAgNzIsIDY1LCAxMjgsIDc0LCA2OSwgODUsIDEyOCwgNzQsIDY5LCA4MiwgODUsIDgzLCA2NSwgNzYsIDY5LCA3NywgMTI4LCAKLSAgICA3NCwgNjksIDgyLCA2NSwgMjA2LCA3NCwgNjksIDgyLCA2NSwgMTI4LCA3NCwgNjksIDgyLCAxMjgsIDc0LCA2OSwgNzIsIAotICAgIDEyOCwgNzQsIDY5LCAyMDAsIDc0LCA2OSwgNzEsIDc5LCA3MSwgNjUsIDc4LCAxMjgsIDc0LCA2OSwgNjksIDc3LCAxMjgsIAotICAgIDc0LCA2OSwgNjUsIDc4LCA4MywgMTI4LCA3NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NCwgNjUsIDg2LCA3MywgCi0gICAgODksIDY1LCA3OCwgNzMsIDEyOCwgNzQsIDY1LCA4NSwgMTI4LCA3NCwgNjUsIDgyLCAxMjgsIDc0LCA2NSwgODAsIDY1LCAKLSAgICA3OCwgNjksIDgzLCAxOTcsIDc0LCA2NSwgODAsIDY1LCA3OCwgMTI4LCA3NCwgNjUsIDc4LCA4NSwgNjUsIDgyLCA4OSwgCi0gICAgMTI4LCA3NCwgNjUsIDc2LCA3NiwgNjUsIDc0LCA2NSwgNzYsIDY1LCA3NiwgNzksIDg1LCA3MiwgNzksIDg1LCAxMjgsIDc0LCAKLSAgICA2NSwgNzMsIDEyOCwgNzQsIDY1LCA3MiwgMTI4LCA3NCwgNjUsIDY4LCA2OSwgMTI4LCA3NCwgNjUsIDY3LCA3NSwgNDUsIAotICAgIDc5LCA0NSwgNzYsIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgNzQsIDY1LCA2NywgMjAzLCA3NCwgNDUsIDgzLCA3MywgCi0gICAgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgMjAyLCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCA2NSwgMTI4LCAKLSAgICA3MywgOTAsIDcyLCA3MywgODQsIDgzLCAxOTMsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDczLCA5MCwgNjUsIDc1LCA2NSwgODksIAotICAgIDE5MywgNzMsIDg5LCA2OSwgNzUsIDEyOCwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODUsIDc0LCA2NSwgCi0gICAgMTI4LCA3MywgODUsIDEyOCwgNzMsIDg0LCAyMTEsIDczLCA4NCwgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgCi0gICAgODQsIDY5LCA3NywgMTI4LCA3MywgODMsIDgzLCA3MiwgNjUsIDgyLCAxMjgsIDczLCA4MywgNzksIDc4LCAxMjgsIDczLCAKLSAgICA4MywgNzksIDIwNiwgNzMsIDgzLCA2OSwgNzgsIDQ1LCA3MywgODMsIDY5LCA3OCwgMTI4LCA3MywgODMsIDY1LCA3NSwgNzMsIAotICAgIDE5MywgNzMsIDgzLCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3MywgODIsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgNzksIDc4LCA0NSwgNjcsIDc5LCAKLSAgICA4MCwgODAsIDY5LCAyMTAsIDczLCA4MiwgNzksIDc4LCAxMjgsIDczLCA3OSwgODQsIDczLCA3MCwgNzMsIDY5LCAxOTYsIAotICAgIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDEyOCwgNzMsIDc5LCA4NCwgMTkzLCA3MywgCi0gICAgNzksIDgyLCAxMjgsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDczLCA3OCwgODYsIDczLCA4MywgNzMsIDY2LCAKLSAgICA3NiwgMTk3LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIAotICAgIDE5NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA3MywgNzgsIDg0LCA4MiwgNzksIDY4LCA4NSwgNjcsIDY5LCA4MiwgCi0gICAgMTI4LCA3MywgNzgsIDg0LCA3MywgMTI4LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCAKLSAgICAxOTUsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAotICAgIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCAKLSAgICA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgODIsIDgyLCA3OSwgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAotICAgIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3OSwgNjcsIDc1LCAKLSAgICA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAotICAgIDc2LCA2NSwgNjcsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzMsIDc5LCAyMTAsIDczLCA3OCwgODQsIDY5LCA4MiwgCi0gICAgNjksIDgzLCAyMTIsIDczLCA3OCwgODQsIDY5LCA4MiwgNjcsIDY1LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDc2LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCAKLSAgICAyMDQsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDY1LCAyMDQsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIDEyOCwgNzMsIDc4LCA4MywgNjksIDgyLCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDczLCA3OCwgODMsIDY5LCA2NywgODQsIDEyOCwgNzMsIDc4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIAotICAgIDc4LCA2NSwgMjA0LCA3MywgNzgsIDgwLCA4NSwgMjEyLCA3MywgNzgsIDc4LCA3OSwgNjcsIDY5LCA3OCwgNjcsIDY5LCAKLSAgICAxMjgsIDczLCA3OCwgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDc4LCA2OSwgMjEwLCAKLSAgICA3MywgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzMsIDc4LCA3MSwgODUsIDEyOCwgNzMsIDc4LCA3MywgMTI4LCA3MywgNzgsIAotICAgIDcyLCA3MywgNjYsIDczLCAyMTIsIDczLCA3OCwgNzIsIDY5LCA4MiwgNjksIDc4LCAyMTIsIDczLCA3OCwgNzEsIDg3LCA2NSwgCi0gICAgOTAsIDEyOCwgNzMsIDc4LCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA3MCwgNzYsIDg1LCAKLSAgICA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgODksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIAotICAgIDc4LCA3MywgODQsIDIxNywgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA3MywgNzgsIDY4LCA3MywgCi0gICAgODIsIDY5LCA2NywgMjEyLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDczLCA3OCwgNjgsIDczLCAKLSAgICA2NywgNjUsIDg0LCA3OSwgMjEwLCA3MywgNzgsIDY4LCA3MywgMTk1LCA3MywgNzgsIDY4LCA3MywgNjUsIDIwNiwgNzMsIAotICAgIDc4LCA2OCwgNjksIDg4LCAxMjgsIDczLCA3OCwgNjgsIDY5LCA4MCwgNjksIDc4LCA2OCwgNjksIDc4LCAyMTIsIDczLCA3OCwgCi0gICAgNjcsIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAyMTEsIDczLCAKLSAgICA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA3MywgNzgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCAxOTcsIAotICAgIDczLCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDc2LCA4NSwgNjgsIDczLCA3OCwgMTk5LCA3MywgCi0gICAgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDY2LCA3OSwgMjE2LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA3MywgNzgsIDQ1LCAKLSAgICA2NSwgNzYsIDY1LCA3MCwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDczLCA2NSwgMjA0LCA3MywgNzcsIDgwLCA2OSwgODIsIAotICAgIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgMTI4LCA3MywgCi0gICAgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDczLCA3NywgNzgsIDEyOCwgNzMsIDc3LCA3MywgODMsIDY5LCAKLSAgICA3OSwgMjExLCA3MywgNzcsIDczLCA3OCwgNTEsIDEyOCwgNzMsIDc3LCA3MywgNzgsIDEyOCwgNzMsIDc3LCA3MywgMjA2LCAKLSAgICA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgCi0gICAgODIsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA2OCwgNzMsIDY1LCAKLSAgICA4MiwgNzEsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDY1LCA3MSwgMTk3LCA3MywgNzYsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzMsIDc2LCA4NSwgODksIDEyOCwgNzMsIDc2LCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgCi0gICAgNzYsIDg1LCA4NCwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAKLSAgICA1MSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3MywgNzYsIAotICAgIDUwLCAxMjgsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgNzQsIDEyOCwgNzMsIAotICAgIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDcxLCA3MywgMTI4LCA3MywgNzEsIDIwMSwgNzMsIDcxLCA3MSwgCi0gICAgODcsIDgzLCAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAotICAgIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgCi0gICAgNzEsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzMsIAotICAgIDY5LCA4NSwgNjcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzMsIDY5LCA4NSwgNzgsIDE5OSwgNzMsIDY4LCA3NiwgNjksIDEyOCwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzMsIDY4LCAKLSAgICA3MywgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU3LCA0OCwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjgsIDU1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY3LCA2NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjgsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTUsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU1LCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTQsIDY4LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA1MSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDksIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTUsIDQ4LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA3MCwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNjksIDU2LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA1MCwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDU0LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA1MywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDU3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1MywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA1MCwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUyLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDcwLCA1NiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2OCwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDY2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTcsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDUyLCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA1MSwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTEsIDY3LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA2OCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDUwLCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA0OSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDY1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1NiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY3LCA3MiwgNzksIDg1LCAxMjgsIDczLCAKLSAgICA2NywgNzIsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIAotICAgIDY1LCA2OCwgNzMsIDc4LCAxMjgsIDczLCA2NywgNjksIDc2LCA2NSwgNzgsIDY4LCA3MywgNjcsIDQ1LCA4OSwgODIsIDEyOCwgCi0gICAgNzMsIDY2LCA3MywgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzMsIDY1LCA4NSwgNjgsIDY1LCAxMjgsIDczLCA0OCwgNDksIDUzLCAKLSAgICAxMjgsIDczLCA0OCwgNDksIDUyLCAxMjgsIDczLCA0OCwgNDksIDUxLCAxMjgsIDczLCA0OCwgNDksIDUwLCAxMjgsIDczLCAKLSAgICA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzMsIAotICAgIDQ4LCA0OSwgNDgsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDU3LCAxMjgsIDczLCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDczLCA0OCwgNDgsIDU1LCAxMjgsIDczLCA0OCwgNDgsIDU0LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAKLSAgICA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1MywgMTI4LCA3MywgNDgsIDQ4LCA1MiwgMTI4LCA3MywgNDgsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MywgNDgsIDQ4LCA1MCwgMTI4LCA3MywgNDgsIDQ4LCA0OSwgMTI4LCA3MywgNDUsIDg5LCA4NSwgMTI4LCA3MywgNDUsIAotICAgIDg5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgCi0gICAgNjUsIDY5LCAxMjgsIDczLCA0NSwgODksIDY1LCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDEyOCwgNzMsIDQ1LCAKLSAgICA3OSwgNDUsIDczLCAxMjgsIDczLCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA2OSwgODUsIDEyOCwgNzMsIDQ1LCA2NiwgNjksIAotICAgIDY1LCA3NywgMTI4LCA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA3MywgNDUsIDY1LCAxMjgsIDcyLCA5MCwgCi0gICAgOTAsIDkwLCA3MSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDkwLCA4MCwgMTI4LCA3MiwgOTAsIDkwLCAKLSAgICAxMjgsIDcyLCA5MCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDEyOCwgNzIsIDkwLCA4NCwgMTI4LCA3MiwgOTAsIDcxLCAKLSAgICAxMjgsIDcyLCA4OSwgODMsIDg0LCA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgNzIsIDg5LCA4MCwgNzksIDY4LCA3MywgNjUsIAotICAgIDgzLCA4NCwgNzksIDc2LCA2OSwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MiwgCi0gICAgODksIDgwLCA3MiwgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIAotICAgIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCAyMDYsIDcyLCA4OCwgODcsIDcxLCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA3MiwgODgsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA4OCwgODUsIDc5LCAKLSAgICAxMjgsIDcyLCA4OCwgNzksIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAxMjgsIDcyLCA4OCwgNzksIDgwLCAxMjgsIDcyLCAKLSAgICA4OCwgNzksIDEyOCwgNzIsIDg4LCA3MywgODgsIDEyOCwgNzIsIDg4LCA3MywgODQsIDEyOCwgNzIsIDg4LCA3MywgODAsIAotICAgIDEyOCwgNzIsIDg4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgODgsIDczLCA2OSwgCi0gICAgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDEyOCwgNzIsIDg4LCA3MywgMTI4LCA3MiwgODgsIDY5LCA4OCwgMTI4LCA3MiwgCi0gICAgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgNjUsIDg4LCAxMjgsIDcyLCA4OCwgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDEyOCwgNzIsIDg3LCA4NSwgMTI4LCA3MiwgODcsIDY1LCAKLSAgICA3MywgODIsIDEyOCwgNzIsIDg2LCAxMjgsIDcyLCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MiwgODUsIDgyLCA2NSwgNzgsIAotICAgIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDEyOCwgNzIsIDg1LCA3OCwgCi0gICAgNjgsIDgyLCA2OSwgMTk2LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCAKLSAgICA2NSwgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIDcyLCA4NSwgNjYsIAotICAgIDUwLCAxMjgsIDcyLCA4NSwgNjYsIDE3OCwgNzIsIDg1LCA2NiwgMTI4LCA3MiwgODUsIDY1LCA4MiwgNjUsIDY4LCA2OCwgCi0gICAgNzksIDEyOCwgNzIsIDg0LCA4MywgMTI4LCA3MiwgODQsIDc0LCAxMjgsIDcyLCA4MiwgODksIDg2LCA3OCwgNzMsIDE5MywgCi0gICAgNzIsIDgwLCA4NywgNzEsIDEyOCwgNzIsIDgwLCA2NSwgMTI4LCA3MiwgODAsIDEyOCwgNzIsIDc5LCA4NSwgODMsIDE5NywgCi0gICAgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCA4MywgMTI4LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIAotICAgIDIxMSwgNzIsIDc5LCA4NSwgODIsIDEyOCwgNzIsIDc5LCA4NSwgMjEwLCA3MiwgNzksIDg0LCA2OSwgNzYsIDEyOCwgNzIsIAotICAgIDc5LCA4NCwgNjUsIDEyOCwgNzIsIDc5LCA4MywgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDgzLCA2OSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA4MywgMTk3LCA3MiwgNzksIDgyLCA3OCwgODMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDc2LCAyMTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCAKLSAgICA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgCi0gICAgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIAotICAgIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ5LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCAKLSAgICA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCi0gICAgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAotICAgIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUyLCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCAKLSAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgCi0gICAgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIAotICAgIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ4LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCAxMjgsIDcyLCA3OSwgODIsIDE5MywgNzIsIDc5LCA3OSwgCi0gICAgODIsIDg1LCAxMjgsIDcyLCA3OSwgNzksIDgwLCAxMjgsIDcyLCA3OSwgNzksIDc4LCAxMjgsIDcyLCA3OSwgNzksIDc1LCAKLSAgICA2OSwgMTk2LCA3MiwgNzksIDc4LCA2OSwgODksIDY2LCA2OSwgNjksIDEyOCwgNzIsIDc5LCA3OCwgNjksIDIxNywgNzIsIAotICAgIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgNjcsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCAKLSAgICA3MywgMTk1LCA3MiwgNzksIDc2LCA2OSwgMTI4LCA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3OSwgNzYsIAotICAgIDY1LCA3NywgMTI4LCA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgNzksIDczLCAxMjgsIAotICAgIDcyLCA3OSwgNjcsIDcyLCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgODgsIDEyOCwgCi0gICAgNzIsIDc4LCA4NSwgNzksIDEyOCwgNzIsIDc4LCA3OSwgODgsIDEyOCwgNzIsIDc4LCA3OSwgODQsIDEyOCwgNzIsIDc4LCAKLSAgICA3OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgODgsIDEyOCwgNzIsIDc4LCA3MywgODQsIDEyOCwgNzIsIDc4LCA3MywgODAsIAotICAgIDEyOCwgNzIsIDc4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgCi0gICAgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDEyOCwgNzIsIDc4LCA3MywgMTI4LCA3MiwgNzgsIDY5LCA4OCwgMTI4LCA3MiwgCi0gICAgNzgsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDY5LCAxMjgsIDcyLCA3OCwgNjUsIDg4LCAxMjgsIDcyLCA3OCwgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA3OCwgNjUsIDgwLCAxMjgsIDcyLCA3OCwgNjUsIDEyOCwgNzIsIDc3LCA4OSwgODgsIDEyOCwgNzIsIDc3LCAKLSAgICA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCAxMjgsIDcyLCA3NywgODksIDgwLCAxMjgsIDcyLCA3NywgODksIAotICAgIDEyOCwgNzIsIDc3LCA4NSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODQsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDg4LCAxMjgsIAotICAgIDcyLCA3NywgODUsIDgyLCAxMjgsIDcyLCA3NywgODUsIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCA4OCwgMTI4LCA3MiwgCi0gICAgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDEyOCwgNzIsIDc3LCA4NSwgMTI4LCA3MiwgNzcsIDc5LCAKLSAgICA4OCwgMTI4LCA3MiwgNzcsIDc5LCA4NCwgMTI4LCA3MiwgNzcsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDc5LCAxMjgsIDcyLCAKLSAgICA3NywgNzMsIDg4LCAxMjgsIDcyLCA3NywgNzMsIDg0LCAxMjgsIDcyLCA3NywgNzMsIDgwLCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDY5LCA4OCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDEyOCwgNzIsIDc3LCA3MywgCi0gICAgMTI4LCA3MiwgNzcsIDY5LCAxMjgsIDcyLCA3NywgNjUsIDg4LCAxMjgsIDcyLCA3NywgNjUsIDg0LCAxMjgsIDcyLCA3NywgCi0gICAgNjUsIDgwLCAxMjgsIDcyLCA3NywgNjUsIDEyOCwgNzIsIDc2LCA4OSwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODQsIDEyOCwgCi0gICAgNzIsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODksIDgyLCAxMjgsIDcyLCA3NiwgODksIDgwLCAxMjgsIDcyLCAKLSAgICA3NiwgODksIDEyOCwgNzIsIDc2LCA4NSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODQsIDEyOCwgNzIsIDc2LCA4NSwgODIsIAotICAgIDg4LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAxMjgsIDcyLCA3NiwgODUsIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDEyOCwgNzIsIDc2LCA4NSwgMTI4LCA3MiwgCi0gICAgNzYsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDc5LCAxMjgsIDcyLCA3NiwgNzMsIDg4LCAKLSAgICAxMjgsIDcyLCA3NiwgNzMsIDg0LCAxMjgsIDcyLCA3NiwgNzMsIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA3MiwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDEyOCwgNzIsIDc2LCA3MywgMTI4LCA3MiwgNzYsIAotICAgIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDY5LCAxMjgsIDcyLCA3NiwgNjUsIDg4LCAxMjgsIAotICAgIDcyLCA3NiwgNjUsIDg0LCAxMjgsIDcyLCA3NiwgNjUsIDgwLCAxMjgsIDcyLCA3NiwgNjUsIDEyOCwgNzIsIDc1LCAxMjgsIAotICAgIDcyLCA3MywgOTAsIDY2LCAxMjgsIDcyLCA3MywgODMsIDg0LCA3OSwgODIsIDczLCAxOTUsIDcyLCA3MywgODIsIDczLCA4MSwgCi0gICAgMTI4LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgzLCA4MCwgNjksIDY5LCAxOTYsIDcyLCA3MywgNzEsIDcyLCA0NSwgODIsIDY5LCAKLSAgICA4NiwgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDcyLCA2OSwgNjksIDc2LCA2OSwgCi0gICAgMTk2LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgODUsIDIwMCwgNzIsIAotICAgIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgNzIsIDczLCAxOTUsIDcyLCA3MywgNjksIDEyOCwgNzIsIDczLCA2OCwgCi0gICAgNzMsIDc4LCAxOTksIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgMTI4LCA3MiwgNzMsIDY2LCAKLSAgICA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNzIsIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCA4NSwgMTI4LCA3MiwgNzIsIAotICAgIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCA2NSwgNjUsIDEyOCwgNzIsIAotICAgIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgODIsIDY1LCAKLSAgICAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgODUsIDEyOCwgNzIsIAotICAgIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA3MywgCi0gICAgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIDgyLCA2OSwgMTI4LCAKLSAgICA3MiwgNjksIDgyLCA2NiwgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgNzgsIDcxLCAxMjgsIAotICAgIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCA4NCwgMTI4LCA3MiwgCi0gICAgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc2LCA3MywgNjcsIDc5LCA4MCwgODQsIDY5LCAKLSAgICA4MiwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgNzMsIDgzLCA2OSwgNzMsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODYsIDg5LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDc2LCAyMTcsIDcyLCA2OSwgCi0gICAgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAyMDYsIDcyLCA2OSwgNjUsIDgyLCA4NCwgODMsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODIsIDg0LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDcyLCA2OSwgNjUsIDgyLCA4NCwgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA3MiwgNjksIDY1LCA4MiwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIAotICAgIDIwNCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgCi0gICAgNzksIDc4LCAxOTcsIDcyLCA2OSwgNjUsIDY4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDY2LCA2NSwgODMsIAotICAgIDE5MywgNzIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzIsIDY1LCA4NiwgNjksIDEyOCwgNzIsIDY1LCA4NSwgCi0gICAgODAsIDg0LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgNjUsIDg0LCAKLSAgICA2OSwgMTI4LCA3MiwgNjUsIDg0LCA2NywgNzIsIDczLCA3OCwgMTk5LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCA3MiwgNjUsIAotICAgIDgzLCA2OSwgMjEwLCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCA3OCwgCi0gICAgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgMTI4LCAKLSAgICA3MiwgNjUsIDgyLCA3NSwgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzIsIAotICAgIDY1LCA4MiwgMTk2LCA3MiwgNjUsIDgwLCA4MCwgMjE3LCA3MiwgNjUsIDc4LCA4NSwgNzgsIDc5LCAyMDcsIDcyLCA2NSwgCi0gICAgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMjExLCAKLSAgICA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCAxMjgsIDcyLCA2NSwgNzgsIAotICAgIDY4LCA2NiwgNjUsIDcxLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAxMjgsIDcyLCA2NSwgNzgsIDQ1LCA2NSwgNzUsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgNjUsIDc3LCA5MCwgNjUsIDEyOCwgNzIsIDY1LCA3NywgODMsIDg0LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCAKLSAgICA3NywgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCA2NiwgODUsIDgyLCA3MSwgNjksIAotICAgIDgyLCAxMjgsIDcyLCA2NSwgNzYsIDgxLCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA3OSwgMTI4LCA3MiwgNjUsIDc2LCA3MCwgCi0gICAgNDUsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgNjksIDgyLCAKLSAgICA2OCwgMTI4LCA3MiwgNjUsIDc2LCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDczLCA4NCwgODUsIDEyOCwgNzIsIAotICAgIDY1LCA3MywgODIsIDY3LCA4NSwgODQsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIDY1LCA3MSwgNzYsIDY1LCAKLSAgICAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDcyLCA2NSwgNzAsIAotICAgIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2NSwgCi0gICAgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTYsIDEyOCwgCi0gICAgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCAxMjgsIDcyLCAKLSAgICA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIDcyLCA0OCwgNDgsIDUxLCAxMjgsIDcyLCA0OCwgNDgsIAotICAgIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3MSwgODksIDg1LCAxMjgsIAotICAgIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIDcwLCAyMTMsIAotICAgIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIDcxLCA4OSwgCi0gICAgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgNzEsIDg3LCA3MywgMTI4LCA3MSwgODcsIDY5LCA2OSwgCi0gICAgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA4NywgNjUsIDEyOCwgNzEsIDg2LCAxMjgsIAotICAgIDcxLCA4NSwgODIsIDg1LCA4MywgNzIsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDc4LCAxMjgsIDcxLCA4NSwgODIsIDY1LCA3NywgCi0gICAgODUsIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNTUsIDEyOCwgNzEsIDg1LCA3OCwgODUsIDEyOCwgNzEsIDg1LCAKLSAgICA3OCwgMjEzLCA3MSwgODUsIDIwNSwgNzEsIDg1LCA3NiwgMTI4LCA3MSwgODUsIDczLCA4NCwgNjUsIDgyLCAxMjgsIDcxLCAKLSAgICA4NSwgMTk5LCA3MSwgODUsIDY5LCA3MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIDcxLCA4NSwgNjgsIDEyOCwgNzEsIDg1LCAKLSAgICAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgODMsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgNjgsIAotICAgIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCAKLSAgICAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxOTMsIDcxLCA4NSwgMTc4LCA3MSwgODQsIDY5LCAKLSAgICAyMTAsIDcxLCA4MywgODUsIDc3LCAxMjgsIDcxLCA4MywgODUsIDIwNSwgNzEsIDgyLCAyMTMsIDcxLCA4MiwgNzksIDg3LCAKLSAgICA3MywgNzgsIDE5OSwgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3MSwgODIsIDc5LCA3OCwgODQsIDcyLCA3MywgODMsIAotICAgIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNzMsIDc4LCA3OCwgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzMsIDc3LCA2NSwgCi0gICAgNjcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDY5LCA3MSwgNzksIDgyLCA3MywgNjUsIDIwNiwgNzEsIDgyLCA2OSwgNjksIAotICAgIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgCi0gICAgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgMjA2LCAKLSAgICA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcxLCA4MiwgNjksIDY1LCAyMTIsIDcxLCA4MiwgNjUsIDg2LCA2OSwgODksIAotICAgIDY1LCA4MiwgMTk2LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA4MiwgCi0gICAgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NiwgMTk3LCA3MSwgODIsIDY1LCA4NCwgNjksIDgyLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCA4MywgMTI4LCA3MSwgCi0gICAgODIsIDY1LCA4MywgMjExLCA3MSwgODIsIDY1LCA4MCwgNzIsIDY5LCA3NywgMTk3LCA3MSwgODIsIDY1LCA4MCwgNjksIDgzLCAKLSAgICAxMjgsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDgyLCA2NSwgNjgsIAotICAgIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCA2NSwgNjcsIDE5NywgCi0gICAgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIDcxLCA3OSwgODIsIDg0LCAKLSAgICAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4MywgODksIAotICAgIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA3MSwgNzksIDgyLCA3MSwgCi0gICAgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OSwgMTk2LCA3MSwgNzksIDc4LCA3MSwgMTI4LCA3MSwgCi0gICAgNzksIDc2LCA2OCwgMTI4LCA3MSwgNzksIDc1LCAxMjgsIDcxLCA3OSwgNzMsIDc4LCAxOTksIDcxLCA3OSwgNjYsIDc2LCAKLSAgICA3MywgNzgsIDEyOCwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgNzksIDY1LCAxMjgsIDcxLCAKLSAgICA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDcxLCA3NiwgNzksIAotICAgIDg3LCA3MywgNzgsIDE5OSwgNzEsIDc2LCA3OSwgODQsIDg0LCA2NSwgMjA0LCA3MSwgNzYsIDc5LCA2NiwgMTk3LCA3MSwgCi0gICAgNzYsIDczLCA4MywgODMsIDY1LCA3OCwgNjgsIDIwNywgNzEsIDc2LCA2OSwgNzMsIDY3LCAyMDAsIDcxLCA3NiwgNjUsIDcxLCAKLSAgICA3OSwgNzYsIDczLCAxMjgsIDcxLCA3NiwgNjUsIDEyOCwgNzEsIDc0LCA2OSwgMTI4LCA3MSwgNzMsIDg4LCAxMjgsIDcxLCAKLSAgICA3MywgODQsIDEyOCwgNzEsIDczLCA4MywgNzIsIDEyOCwgNzEsIDczLCA4MywgMjAwLCA3MSwgNzMsIDgzLCA2NSwgNzYsIAotICAgIDEyOCwgNzEsIDczLCA4MiwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzEsIDczLCA4MiwgNzYsIDEyOCwgNzEsIDczLCA4MiwgCi0gICAgNTEsIDEyOCwgNzEsIDczLCA4MiwgMTc5LCA3MSwgNzMsIDgyLCA1MCwgMTI4LCA3MSwgNzMsIDgyLCAxNzgsIDcxLCA3MywgCi0gICAgODAsIDEyOCwgNzEsIDczLCA3OCwgNzMsIDczLCAxMjgsIDcxLCA3MywgNzcsIDY5LCA3NiwgMTI4LCA3MSwgNzMsIDc3LCAKLSAgICA2OSwgMjA0LCA3MSwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNzEsIDY1LCAxMjgsIDcxLCA3MywgNjksIDg0LCAxMjgsIDcxLCAKLSAgICA3MywgNjgsIDczLCA3NywgMTI4LCA3MSwgNzMsIDY2LCA2NiwgNzksIDg1LCAyMTEsIDcxLCA3MywgNjYsIDY1LCAxMjgsIAotICAgIDcxLCA3MywgNTIsIDEyOCwgNzEsIDczLCAxODAsIDcxLCA3MiwgOTAsIDEyOCwgNzEsIDcyLCA4NywgNjUsIDEyOCwgNzEsIAotICAgIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDE5MywgNzEsIDcyLCA4NSwgMTI4LCA3MSwgCi0gICAgNzIsIDc5LCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4MywgODQsIDEyOCwgNzEsIDcyLCA3OSwgMTI4LCA3MSwgNzIsIDczLCAKLSAgICAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzgsIAotICAgIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgCi0gICAgNzIsIDY5LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg1LCAKLSAgICA2NSwgNjksIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODQsIDEyOCwgNzEsIDcyLCA2OSwgNjksIAotICAgIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgODksIDc4LCAxMjgsIDcxLCA3MiwgNjUsIAotICAgIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgODAsIDEyOCwgNzEsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDcyLCA2NSwgCi0gICAgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgMTI4LCAKLSAgICA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgNzIsIDY1LCA2NSwgNzcsIDY1LCA2OSwgCi0gICAgMTI4LCA3MSwgNzIsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgNzEsIDcxLCA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDY1LCAxMjgsIDcxLCAKLSAgICA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3MSwgNzEsIAotICAgIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDc5LCAKLSAgICA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzEsIDczLCA4NCwgMTI4LCAKLSAgICA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDY5LCAxMjgsIAotICAgIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIDgwLCAxMjgsIDcxLCA3MSwgCi0gICAgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIDcxLCA2OSwgODQsIDE5MywgCi0gICAgNzEsIDY5LCA4MywgODQsIDg1LCA4MiwgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAxMjgsIDcxLCA2OSwgODMsIDcyLCAKLSAgICA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIDY5LCA4MywgNzIsIDUwLCAxMjgsIAotICAgIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgNzcsIDY1LCAyMDYsIDcxLCA2OSwgCi0gICAgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzgsIAotICAgIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDc1LCAKLSAgICAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgNzMsIDc4LCA3MywgMTI4LCA3MSwgNjksIAotICAgIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgMjA1LCA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAKLSAgICAxMjgsIDcxLCA2OSwgNjgsIDY5LCAxMjgsIDcxLCA2OSwgNjYsIDIwNywgNzEsIDY5LCA2NiwgMTkzLCA3MSwgNjksIDY1LCAKLSAgICA4MiwgMTI4LCA3MSwgNjksIDY1LCAyMTAsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIDcxLCA2NywgNzMsIDcxLCAxMjgsIDcxLCAKLSAgICA2NywgNjUsIDIwNiwgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA3MywgNjksIDE5NywgNzEsIDY2LCA2OSwgODUsIAotICAgIDg4LCAxMjgsIDcxLCA2NiwgNjksIDg0LCAxMjgsIDcxLCA2NiwgNjUsIDg5LCA3MywgMTI4LCA3MSwgNjYsIDY1LCA3NSwgCi0gICAgODUsIDgyLCA4NSwgNzgsIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCAKLSAgICA4NCwgODQsIDY1LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIAotICAgIDY1LCA4NSwgNzgsIDg0LCA3NiwgNjksIDg0LCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA2NSwgODQsIDY5LCAxMjgsIDcxLCA2NSwgODMsIDcyLCAKLSAgICA2NSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgODMsIDcyLCA4NSwgNzgsIDczLCAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgCi0gICAgMTI4LCA3MSwgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjUsIDgyLCA2OCwgNjksIDc4LCAxMjgsIDcxLCAKLSAgICA2NSwgODIsIDUxLCAxMjgsIDcxLCA2NSwgODAsIDgwLCA2OSwgMTk2LCA3MSwgNjUsIDIwOCwgNzEsIDY1LCA3OCwgNzcsIAotICAgIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDcxLCA3MywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNjgsIDE5MywgNzEsIDY1LCA3OCwgCi0gICAgNTAsIDEyOCwgNzEsIDY1LCA3OCwgMTc4LCA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDY1LCAKLSAgICAxMjgsIDcxLCA2NSwgNzcsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY5LCAxMjgsIDcxLCA2NSwgNzcsIDE5NywgNzEsIDY1LCAKLSAgICA3NywgNjUsIDc4LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgMjA0LCA3MSwgNjUsIAotICAgIDcxLCAxMjgsIDcxLCA2NSwgNzAsIDEyOCwgNzEsIDY1LCAxOTgsIDcxLCA2NSwgNjksIDg0LCA4NCwgNjUsIDQ1LCA4MCwgCi0gICAgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA2OCwgNzksIDc2LCAxMjgsIDcxLCA2NSwgNjgsIDEyOCwgNzEsIDY1LCAKLSAgICAxOTYsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgNjYsIDE5MywgNzEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcxLCAKLSAgICA2NSwgMTc4LCA3MSwgNDgsIDUzLCA1MiwgMTI4LCA3MSwgNDgsIDUzLCA1MSwgMTI4LCA3MSwgNDgsIDUzLCA1MCwgMTI4LCAKLSAgICA3MSwgNDgsIDUzLCA0OSwgMTI4LCA3MSwgNDgsIDUzLCA0OCwgMTI4LCA3MSwgNDgsIDUyLCA1NywgMTI4LCA3MSwgNDgsIAotICAgIDUyLCA1NiwgMTI4LCA3MSwgNDgsIDUyLCA1NSwgMTI4LCA3MSwgNDgsIDUyLCA1NCwgMTI4LCA3MSwgNDgsIDUyLCA1MywgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDEyOCwgNzEsIDQ4LCA1MiwgNTIsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDY1LCAKLSAgICAxMjgsIDcxLCA0OCwgNTIsIDUxLCAxMjgsIDcxLCA0OCwgNTIsIDUwLCAxMjgsIDcxLCA0OCwgNTIsIDQ5LCAxMjgsIDcxLCAKLSAgICA0OCwgNTIsIDQ4LCAxMjgsIDcxLCA0OCwgNTEsIDU3LCAxMjgsIDcxLCA0OCwgNTEsIDU2LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgCi0gICAgNTQsIDEyOCwgNzEsIDQ4LCA1MSwgNTMsIDEyOCwgNzEsIDQ4LCA1MSwgNTIsIDEyOCwgNzEsIDQ4LCA1MSwgNTEsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MSwgNTAsIDEyOCwgNzEsIDQ4LCA1MSwgNDksIDEyOCwgNzEsIDQ4LCA1MSwgNDgsIDEyOCwgNzEsIDQ4LCAKLSAgICA1MCwgNTcsIDEyOCwgNzEsIDQ4LCA1MCwgNTYsIDEyOCwgNzEsIDQ4LCA1MCwgNTUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAxMjgsIDcxLCA0OCwgNTAsIDUzLCAxMjgsIDcxLCA0OCwgNTAsIDUyLCAxMjgsIAotICAgIDcxLCA0OCwgNTAsIDUxLCAxMjgsIDcxLCA0OCwgNTAsIDUwLCAxMjgsIDcxLCA0OCwgNTAsIDQ5LCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDQ4LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgMTI4LCA3MSwgNDgsIDQ5LCA1NywgMTI4LCA3MSwgNDgsIDQ5LCAKLSAgICA1NiwgMTI4LCA3MSwgNDgsIDQ5LCA1NSwgMTI4LCA3MSwgNDgsIDQ5LCA1NCwgMTI4LCA3MSwgNDgsIDQ5LCA1MywgMTI4LCAKLSAgICA3MSwgNDgsIDQ5LCA1MiwgMTI4LCA3MSwgNDgsIDQ5LCA1MSwgMTI4LCA3MSwgNDgsIDQ5LCA1MCwgMTI4LCA3MSwgNDgsIAotICAgIDQ5LCA0OSwgNjUsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDEyOCwgNzEsIDQ4LCA0OSwgNDgsIDEyOCwgNzEsIDQ4LCA0OCwgCi0gICAgNTcsIDEyOCwgNzEsIDQ4LCA0OCwgNTYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIAotICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTMsIDEyOCwgNzEsIDQ4LCA0OCwgNTIsIDEyOCwgNzEsIDQ4LCA0OCwgNTEsIDEyOCwgNzEsIAotICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzEsIDQ4LCA0OCwgNDksIDEyOCwgNzAsIDg5LCA4OCwgMTI4LCA3MCwgODksIDg0LCAxMjgsIAotICAgIDcwLCA4OSwgODAsIDEyOCwgNzAsIDg5LCA2NSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIDcwLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCA2NSwgMTI4LCA3MCwgODYsIDgzLCA1MSwgCi0gICAgMTI4LCA3MCwgODYsIDgzLCA1MCwgMTI4LCA3MCwgODYsIDgzLCA0OSwgMTI4LCA3MCwgODUsIDg4LCAxMjgsIDcwLCA4NSwgCi0gICAgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCA4MywgMTkzLCA3MCwgODUsIDgyLCA4OCwgMTI4LCA3MCwgCi0gICAgODUsIDgwLCAxMjgsIDcwLCA4NSwgNzgsIDY5LCA4MiwgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAKLSAgICA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIDg1LCA3NiwgNzYsIDc4LCA2OSwgODMsIAotICAgIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg1LCA3NCwgNzMsIDEyOCwgNzAsIDg1LCA2OSwgODQsIDEyOCwgNzAsIAotICAgIDg1LCA2OSwgMjA0LCA3MCwgODUsIDY5LCAxMjgsIDcwLCA4NCwgNzIsIDc5LCA4MiwgMTkzLCA3MCwgODIsIDc5LCA4NywgCi0gICAgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgODcsIDc4LCAKLSAgICAxMjgsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA3MCwgODIsIDc5LCA3OCwgODQsIAotICAgIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgMjA1LCA3MCwgODIsIDc5LCA3MSwgMTI4LCA3MCwgCi0gICAgODIsIDc5LCAxOTksIDcwLCA4MiwgNzMsIDg0LCA4NSwgMTI4LCA3MCwgODIsIDczLCA2OSwgODMsIDEyOCwgNzAsIDgyLCAKLSAgICA3MywgNjksIDE5NiwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MCwgODIsIDY5LCA4NCwgNjYsIAotICAgIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA4MiwgNjksIDc4LCA2NywgMjAwLCA3MCwgODIsIDY5LCA2OSwgMTI4LCA3MCwgCi0gICAgODIsIDY5LCAxOTcsIDcwLCA4MiwgNjUsIDc4LCAxOTUsIDcwLCA4MiwgNjUsIDc3LCA2OSwgMTI4LCA3MCwgODIsIDY1LCAKLSAgICA3MSwgODIsIDY1LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIAotICAgIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDcwLCA3OSwgODgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3OSwgODUsIDgyLCA0NSwgODQsIDcyLCA3MywgODIsIAotICAgIDg0LCA4OSwgMTI4LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzksIDg1LCA4MiwgCi0gICAgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA3MCwgNzksIDg1LCA4MiwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDc5LCAKLSAgICA4NSwgMjEwLCA3MCwgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzAsIDc5LCA4MywgODQsIDY5LCA4MiwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA4NywgNjUsIDgyLCA2OCwgMTI4LCA3MCwgNzksIDgyLCA4NCwgODksIDEyOCwgCi0gICAgNzAsIDc5LCA4MiwgODQsIDIxNywgNzAsIDc5LCA4MiwgODQsIDY5LCAxMjgsIDcwLCA3OSwgODIsIDc3LCAyMTEsIDcwLCAKLSAgICA3OSwgODIsIDc3LCA2NSwgODQsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgNzksIAotICAgIDgyLCA2NywgNjksIDgzLCAxMjgsIDcwLCA3OSwgODIsIDY3LCA2OSwgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgCi0gICAgNzksIDg0LCA4MywgODQsIDc5LCA3OSwgNzYsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIAotICAgIDEyOCwgNzAsIDc5LCA3OSwgODQsIDc4LCA3OSwgODQsIDE5NywgNzAsIDc5LCA3OSwgODQsIDY2LCA2NSwgNzYsIDc2LCAKLSAgICAxMjgsIDcwLCA3OSwgNzksIDg0LCAxMjgsIDcwLCA3OSwgNzksIDY4LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCAKLSAgICA3OCwgNzEsIDc3LCA2NSwgNzgsIDEyOCwgNzAsIDc5LCA3NywgMTI4LCA3MCwgNzksIDc2LCA3NiwgODksIDEyOCwgNzAsIAotICAgIDc5LCA3NiwgNzYsIDc5LCA4NywgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDgyLCAxMjgsIDcwLCA3OSwgCi0gICAgNzYsIDY4LCA2OSwgMTk2LCA3MCwgNzksIDcxLCA3MSwgODksIDEyOCwgNzAsIDIwNywgNzAsIDc3LCAxMjgsIDcwLCA3NiwgCi0gICAgODksIDEyOCwgNzAsIDc2LCA4NSwgODQsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDg1LCA4NCwgNjksIAotICAgIDEyOCwgNzAsIDc2LCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MCwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcwLCA3NiwgCi0gICAgNzksIDg3LCA2OSwgMjEwLCA3MCwgNzYsIDc5LCA4NSwgODIsIDczLCA4MywgNzIsIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY5LCAKLSAgICA4NCwgODQsIDY5LCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2NSwgMjA0LCA3MCwgNzYsIDc5LCA4MCwgODAsIDIxNywgNzAsIAotICAgIDc2LCA3OSwgNzksIDgyLCAxMjgsIDcwLCA3NiwgNzMsIDgwLCAxMjgsIDcwLCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgCi0gICAgNzAsIDc2LCA2OSwgODgsIDg1LCA4MywgMTI4LCA3MCwgNzYsIDY5LCA4OCwgNjksIDE5NiwgNzAsIDc2LCA2OSwgODUsIDgyLCAKLSAgICA0NSwgNjgsIDY5LCA0NSwgNzYsIDczLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgODQsIDY5LCA3OCwgNjksIDE5NiwgNzAsIAotICAgIDc2LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCAxMjgsIDcwLCA3NiwgNjUsIDIxMiwgCi0gICAgNzAsIDc2LCA2NSwgNzEsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCAKLSAgICA1MiwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUxLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTAsIDEyOCwgNzAsIAotICAgIDc2LCA2NSwgNzEsIDQ1LCA0OSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgMTI4LCA3MCwgNzYsIDY1LCAxOTksIDcwLCA3NiwgCi0gICAgNjUsIDEyOCwgNzAsIDc2LCAxMjgsIDcwLCA3MywgODgsIDY5LCA2OCwgNDUsIDcwLCA3OSwgODIsIDIwNSwgNzAsIDczLCAKLSAgICA4OCwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDczLCA4NiwgNjksIAotICAgIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3MywgODYsIDE5NywgNzAsIDczLCA4NCwgNjUsIDEyOCwgNzAsIDczLCA4NCwgCi0gICAgMTI4LCA3MCwgNzMsIDgzLCA4NCwgNjksIDE5NiwgNzAsIDczLCA4MywgODQsIDEyOCwgNzAsIDczLCA4MywgNzIsIDczLCAKLSAgICA3OCwgMTk5LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgNzUsIDEyOCwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIAotICAgIDIwMywgNzAsIDczLCA4MywgNzIsIDY5LCA4OSwgNjksIDEyOCwgNzAsIDczLCA4MywgNzIsIDEyOCwgNzAsIDczLCA4MywgCi0gICAgMjAwLCA3MCwgNzMsIDgyLCA4MywgMjEyLCA3MCwgNzMsIDgyLCA3MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCAKLSAgICA4MiwgNzUsIDgzLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIDgyLCAyMDMsIDcwLCA3MywgODIsIDY5LCAxMjgsIAotICAgIDcwLCA3MywgODIsIDE5NywgNzAsIDczLCA4MCwgMTI4LCA3MCwgNzMsIDc4LCA3MywgODQsIDE5NywgNzAsIDczLCA3OCwgCi0gICAgNzEsIDY5LCA4MiwgNzgsIDY1LCA3MywgNzYsIDgzLCAxMjgsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIDcwLCAKLSAgICA3MywgNzgsIDY1LCA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIAotICAgIDc2LCA3NiwgNjksIDE5NiwgNzAsIDczLCA3NiwgNzYsIDEyOCwgNzAsIDczLCA3NiwgMjA0LCA3MCwgNzMsIDc2LCAxOTcsIAotICAgIDcwLCA3MywgNzMsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKLSAgICAxOTcsIDcwLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgODksIDEyOCwgNzAsIDczLCA3MCwgODQsIAotICAgIDIxNywgNzAsIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDEyOCwgNzAsIDczLCA3MCwgCi0gICAgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzMsIDY5LCA3NiwgNjgsIAotICAgIDEyOCwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MCwgNzYsIDEyOCwgNzAsIDcwLCA3MywgMTI4LCA3MCwgNjksIAotICAgIDg1LCA4OCwgMTI4LCA3MCwgNjksIDg1LCA3MCwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDcwLCA2OSwgODMsIDg0LCA3MywgCi0gICAgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA4MiwgODksIDEyOCwgNzAsIDY5LCA4MiwgODIsIDczLCAyMTEsIDcwLCAKLSAgICA2OSwgODIsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDE5MywgNzAsIDY5LCA3OSwgCi0gICAgMjAwLCA3MCwgNjksIDc4LCAxOTksIDcwLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA3MywgNzgsIDczLCAKLSAgICA3OCwgMTk3LCA3MCwgNjksIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCA3MCwgNjksIAotICAgIDc2LCA3NiwgNzksIDg3LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3MCwgNjksIDczLCAxMjgsIDcwLCA2OSwgNzIsIDIxMywgCi0gICAgNzAsIDY5LCA3MiwgMTI4LCA3MCwgNjksIDIwMCwgNzAsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDcwLCA2OSwgNjksIDY4LCAKLSAgICAxMjgsIDcwLCA2OSwgNjksIDE5NiwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgNjksIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIAotICAgIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgCi0gICAgNjksIDY1LCA4MiwgNzgsIDEyOCwgNzAsIDY5LCA2NSwgODIsIDcwLCA4NSwgMjA0LCA3MCwgNjksIDY1LCA4MiwgMTI4LCAKLSAgICA3MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjUsIDg5LCAxMjgsIDcwLCA2NSwgODgsIDEyOCwgNzAsIAotICAgIDY1LCAyMTYsIDcwLCA2NSwgODQsIDczLCA3MSwgODUsIDY5LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgCi0gICAgNzAsIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDg0LCAKLSAgICA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDE5MywgNzAsIAotICAgIDY1LCA4NCwgMTI4LCA3MCwgNjUsIDgyLCA4MywgMjAxLCA3MCwgNjUsIDgxLCAxMjgsIDcwLCA2NSwgODAsIDEyOCwgNzAsIAotICAgIDY1LCA3OCwgNzEsIDEyOCwgNzAsIDY1LCA3OCwgNjksIDgyLCA3OSwgODMsIDczLCAyMTEsIDcwLCA2NSwgNzgsIDEyOCwgCi0gICAgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCA3MCwgNjUsIDc2LCA3NiwgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzYsIDc2LCAKLSAgICA2OSwgMjA2LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCA2OSwgMTI4LCA3MCwgNjUsIDczLCA3MiwgODUsIDEyOCwgNzAsIAotICAgIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIDEyOCwgNzAsIDY1LCA2NywgODQsIDc5LCA4MiwgODksIDEyOCwgCi0gICAgNzAsIDY1LCA2NywgODQsIDc5LCAyMTAsIDcwLCA2NSwgNjcsIDgzLCA3MywgNzcsIDczLCA3NiwgMTk3LCA3MCwgNjUsIDY3LCAKLSAgICA2OSwgNDUsIDU0LCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTMsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgCi0gICAgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCAKLSAgICA2NywgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIAotICAgIDcwLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MCwgNDgsIDUzLCA1MSwgMTI4LCA3MCwgNDgsIDUzLCA1MCwgMTI4LCA3MCwgCi0gICAgNDgsIDUzLCA0OSwgNjcsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY2LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDUzLCA0OSwgMTI4LCA3MCwgNDgsIDUzLCA0OCwgMTI4LCA3MCwgNDgsIDUyLCA1NywgMTI4LCA3MCwgNDgsIAotICAgIDUyLCA1NiwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTQsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCAxMjgsIDcwLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MCwgNDgsIDUyLCAKLSAgICA1MywgMTI4LCA3MCwgNDgsIDUyLCA1MiwgMTI4LCA3MCwgNDgsIDUyLCA1MSwgMTI4LCA3MCwgNDgsIDUyLCA1MCwgMTI4LCAKLSAgICA3MCwgNDgsIDUyLCA0OSwgMTI4LCA3MCwgNDgsIDUyLCA0OCwgMTI4LCA3MCwgNDgsIDUxLCA1NywgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NiwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDEyOCwgNzAsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgCi0gICAgNTEsIDU1LCAxMjgsIDcwLCA0OCwgNTEsIDU0LCAxMjgsIDcwLCA0OCwgNTEsIDUzLCAxMjgsIDcwLCA0OCwgNTEsIDUyLCAKLSAgICAxMjgsIDcwLCA0OCwgNTEsIDUxLCAxMjgsIDcwLCA0OCwgNTEsIDUwLCAxMjgsIDcwLCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDUxLCA0OSwgMTI4LCA3MCwgNDgsIDUxLCA0OCwgMTI4LCA3MCwgNDgsIDUwLCA1NywgMTI4LCA3MCwgNDgsIAotICAgIDUwLCA1NiwgMTI4LCA3MCwgNDgsIDUwLCA1NSwgMTI4LCA3MCwgNDgsIDUwLCA1NCwgMTI4LCA3MCwgNDgsIDUwLCA1MywgCi0gICAgMTI4LCA3MCwgNDgsIDUwLCA1MiwgMTI4LCA3MCwgNDgsIDUwLCA1MSwgMTI4LCA3MCwgNDgsIDUwLCA1MCwgMTI4LCA3MCwgCi0gICAgNDgsIDUwLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDEyOCwgNzAsIDQ4LCA1MCwgNDgsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OSwgNTcsIDEyOCwgNzAsIDQ4LCA0OSwgNTYsIDEyOCwgNzAsIDQ4LCA0OSwgNTUsIDEyOCwgNzAsIDQ4LCA0OSwgNTQsIAotICAgIDEyOCwgNzAsIDQ4LCA0OSwgNTMsIDEyOCwgNzAsIDQ4LCA0OSwgNTIsIDEyOCwgNzAsIDQ4LCA0OSwgNTEsIDY1LCAxMjgsIAotICAgIDcwLCA0OCwgNDksIDUxLCAxMjgsIDcwLCA0OCwgNDksIDUwLCAxMjgsIDcwLCA0OCwgNDksIDQ5LCAxMjgsIDcwLCA0OCwgCi0gICAgNDksIDQ4LCAxMjgsIDcwLCA0OCwgNDgsIDU3LCAxMjgsIDcwLCA0OCwgNDgsIDU2LCAxMjgsIDcwLCA0OCwgNDgsIDU1LCAKLSAgICAxMjgsIDcwLCA0OCwgNDgsIDU0LCAxMjgsIDcwLCA0OCwgNDgsIDUzLCAxMjgsIDcwLCA0OCwgNDgsIDUyLCAxMjgsIDcwLCAKLSAgICA0OCwgNDgsIDUxLCAxMjgsIDcwLCA0OCwgNDgsIDUwLCAxMjgsIDcwLCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDQ4LCA0OSwgMTI4LCA2OSwgOTAsIDIwMCwgNjksIDkwLCA2OSwgNzgsIDEyOCwgNjksIDkwLCA2OSwgMjA2LCA2OSwgOTAsIAotICAgIDEyOCwgNjksIDg5LCA2OSwgODMsIDEyOCwgNjksIDg5LCA2OSwgNzEsIDc2LCA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgCi0gICAgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCAKLSAgICA4OCwgODQsIDgyLCA2NSwgODQsIDY5LCA4MiwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNjksIDg4LCA4NCwgCi0gICAgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDcyLCA3MywgNzEsIDIwMCwgNjksIDg4LCAKLSAgICA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDg0LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OSwgODgsIAotICAgIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgNzYsIDY5LCA4MywgMjExLCA2OSwgODgsIDgwLCA3OSwgNzgsIDY5LCAKLSAgICA3OCwgMjEyLCA2OSwgODgsIDc5LCAxMjgsIDY5LCA4OCwgMjA3LCA2OSwgODgsIDczLCA4MywgODQsIDgzLCAxMjgsIDY5LCAKLSAgICA4OCwgNzMsIDgzLCA4NCwgMTI4LCA2OSwgODgsIDcyLCA2NSwgODUsIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIAotICAgIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCAKLSAgICA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDY5LCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIAotICAgIDEyOCwgNjksIDg4LCA2NywgNjksIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCA2OSwgODcsIDY5LCAxMjgsIDY5LCA4NiwgCi0gICAgNjksIDgyLCA3MSwgODIsIDY5LCA2OSwgMjA2LCA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgODUsIDgyLCAKLSAgICA3OSwgODAsIDY5LCA2NSwgMjA2LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA0NSwgNjUsIDcwLCA4MiwgNzMsIDY3LCA2NSwgCi0gICAgMTI4LCA2OSwgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAyMTcsIDY5LCA4NSwgODIsIAotICAgIDIwNywgNjksIDg1LCA3NiwgNjksIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNzksIDEyOCwgNjksIAotICAgIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgMTI4LCA2OSwgCi0gICAgODUsIDQ1LCA2NSwgMTI4LCA2OSwgODQsIDg4LCAxMjgsIDY5LCA4NCwgNzgsIDY1LCA3MiwgODQsIDY1LCAxMjgsIDY5LCAKLSAgICA4NCwgNzIsIDY5LCAyMDQsIDY5LCA4NCwgNjksIDgyLCA3OSwgMjA2LCA2OSwgODQsIDY5LCA4MiwgNzgsIDczLCA4NCwgODksIAotICAgIDEyOCwgNjksIDg0LCA2NiwgMTI4LCA2OSwgODMsIDg1LCA3NSwgODUsIDg1LCA2OCwgNzksIDEyOCwgNjksIDgzLCA4NCwgCi0gICAgNzMsIDc3LCA2NSwgODQsIDY5LCA4MywgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDE5NiwgNjksIDgzLCAKLSAgICA3MiwgNjksIDUxLCAxMjgsIDY5LCA4MywgNzIsIDUwLCA0OSwgMTI4LCA2OSwgODMsIDcyLCAxNzgsIDY5LCA4MywgNzIsIAotICAgIDQ5LCA1NCwgMTI4LCA2OSwgODMsIDY3LCA2NSwgODAsIDY5LCAxMjgsIDY5LCA4MywgNjcsIDEyOCwgNjksIDgzLCA2NSwgCi0gICAgMTI4LCA2OSwgODMsIDQ1LCA4NCwgNjksIDEyOCwgNjksIDgyLCA4MiwgNzksIDgyLCA0NSwgNjYsIDY1LCA4MiwgODIsIDY5LCAKLSAgICAxOTYsIDY5LCA4MiwgODIsIDEyOCwgNjksIDgyLCA3MywgNzgsIDUwLCAxMjgsIDY5LCA4MiwgNzEsIDEyOCwgNjksIDgyLCAKLSAgICA2NSwgODMsIDE5NywgNjksIDgxLCA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCA2OSwgODEsIDg1LCA3MywgNjgsIAotICAgIDEyOCwgNjksIDgxLCA4NSwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCA4MywgCi0gICAgMTI4LCA2OSwgODEsIDg1LCA2NSwgNzYsIDIxMSwgNjksIDgxLCA4NSwgNjUsIDc2LCAxMjgsIDY5LCA4MCwgODMsIDczLCAKLSAgICA3NiwgNzksIDc4LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgNjksIDgwLCA3OSwgNjcsIDcyLCAxMjgsIAotICAgIDY5LCA4MCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCAKLSAgICA2NSwgMjA2LCA2OSwgODAsIDY5LCA3OCwgODQsIDcyLCA2OSwgODQsIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIAotICAgIDc3LCA2NSwgMTI4LCA2OSwgNzksIDg0LCAxMjgsIDY5LCA3OSwgNzcsIDEyOCwgNjksIDc5LCA3NiwgNzIsIDg4LCAxMjgsIAotICAgIDY5LCA3OSwgNzYsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgNzgsIDg5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgCi0gICAgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgMTk3LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCAKLSAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIAotICAgIDQ1LCA0OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgNjksIDc4LCA4NCwgODIsIDIxNywgNjksIDc4LCA4NCwgCi0gICAgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIAotICAgIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgCi0gICAgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAxMjgsIDY5LCA3OCwgODEsIDEyOCwgNjksIDc4LCAKLSAgICA3OSwgMjExLCA2OSwgNzgsIDc4LCAxMjgsIDY5LCA3OCwgNzYsIDY1LCA4MiwgNzEsIDY5LCA3NywgNjksIDc4LCA4NCwgCi0gICAgMTI4LCA2OSwgNzgsIDcxLCA3MywgNzgsIDY5LCAxMjgsIDY5LCA3OCwgNjgsIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIAotICAgIDEyOCwgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA2OSwgNzgsIDY4LCA2OSwgCi0gICAgNjUsIDg2LCA3OSwgODUsIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDY5LCAKLSAgICA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgNzMsIDc4LCAxOTksIAotICAgIDY5LCA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgCi0gICAgNzMsIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCA2NSwgODQsIDczLCAxOTUsIDY5LCAKLSAgICA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNjYsIDgyLCA3OSwgNzMsIDY4LCA2OSwgODIsIDg5LCAxMjgsIAotICAgIDY5LCA3NywgNjYsIDc2LCA2OSwgNzcsIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgNzMsIDgzLCA3MiwgNzcsIDY5LCAKLSAgICA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgNzYsIDg0LCAxMjgsIAotICAgIDY5LCA3NiwgNzYsIDczLCA4MCwgODQsIDczLCAxOTUsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDczLCA4MywgMTI4LCA2OSwgCi0gICAgNzYsIDc2LCA3MywgODAsIDgzLCA2OSwgMTI4LCA2OSwgNzYsIDczLCA3MCwgNzMsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAKLSAgICA3OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCA3OCwgMTI4LCA2OSwgNzYsIAotICAgIDY5LCA4NiwgNjksIDIwNiwgNjksIDc2LCA2OSwgODAsIDcyLCA2NSwgNzgsIDg0LCAxMjgsIDY5LCA3NiwgNjksIDc3LCA2OSwgCi0gICAgNzgsIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCAKLSAgICA3MywgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIAotICAgIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgCi0gICAgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgNjcsIDIxMiwgNjksIDczLCA4MywgMTI4LCA2OSwgCi0gICAgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAKLSAgICA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCAyMDYsIDY5LCA3MywgCi0gICAgNzEsIDcyLCA4NCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDczLCA2OSwgMTI4LCA2OSwgNzIsIDg3LCAKLSAgICA2NSwgMjE4LCA2OSwgNzEsIDg5LCA4MCwgODQsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgNzMsIAotICAgIDgyLCAxMjgsIDY5LCA3MSwgNzEsIDEyOCwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDY5LCA3NSwgCi0gICAgNjUsIDY1LCAxMjgsIDY5LCA2OSwgNzIsIDEyOCwgNjksIDY5LCA2NiwgNjksIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA2OSwgNjgsIDczLCA4NCwgNzksIDgyLCA3MywgNjUsIDIwNCwgNjksIDY4LCA3MywgNzgsIDEyOCwgNjksIDY4LCA2OCwgCi0gICAgMTI4LCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNjUsIDgzLCA4NCwgNjksIDgyLCAyMDYsIDY5LCAKLSAgICA2NSwgODMsIDIxMiwgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgMjE3LCA2OSwgNjUsIDgyLCA4NCwgNzIsIDEyOCwgNjksIAotICAgIDY1LCA4MiwgODQsIDIwMCwgNjksIDY1LCA4MiwgODMsIDEyOCwgNjksIDY1LCA4MiwgNzYsIDIxNywgNjksIDY1LCA3NywgCi0gICAgNzIsIDY1LCA3OCwgNjcsIDcyLCA3OSwgNzYsIDc2LCAxMjgsIDY5LCA2NSwgNzEsIDc2LCA2OSwgMTI4LCA2OSwgNjUsIDY4LCAKLSAgICA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIDY2LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgMTc4LCA2OSwgNDgsIAotICAgIDUxLCA1NiwgMTI4LCA2OSwgNDgsIDUxLCA1NSwgMTI4LCA2OSwgNDgsIDUxLCA1NCwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgCi0gICAgNjUsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDEyOCwgNjksIDQ4LCA1MSwgNTEsIDEyOCwgNjksIDQ4LCA1MSwgNTAsIDEyOCwgCi0gICAgNjksIDQ4LCA1MSwgNDksIDEyOCwgNjksIDQ4LCA1MSwgNDgsIDEyOCwgNjksIDQ4LCA1MCwgNTcsIDEyOCwgNjksIDQ4LCAKLSAgICA1MCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCAxMjgsIDY5LCA0OCwgNTAsIDU1LCAxMjgsIDY5LCA0OCwgNTAsIAotICAgIDU0LCAxMjgsIDY5LCA0OCwgNTAsIDUzLCAxMjgsIDY5LCA0OCwgNTAsIDUyLCAxMjgsIDY5LCA0OCwgNTAsIDUxLCAxMjgsIAotICAgIDY5LCA0OCwgNTAsIDUwLCAxMjgsIDY5LCA0OCwgNTAsIDQ5LCAxMjgsIDY5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA2OSwgCi0gICAgNDgsIDUwLCA0OCwgMTI4LCA2OSwgNDgsIDQ5LCA1NywgMTI4LCA2OSwgNDgsIDQ5LCA1NiwgMTI4LCA2OSwgNDgsIDQ5LCAKLSAgICA1NSwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDEyOCwgNjksIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDY5LCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDY5LCA0OCwgNDksIDUzLCAxMjgsIDY5LCA0OCwgNDksIDUyLCAxMjgsIDY5LCA0OCwgNDksIDUxLCAxMjgsIAotICAgIDY5LCA0OCwgNDksIDUwLCAxMjgsIDY5LCA0OCwgNDksIDQ5LCAxMjgsIDY5LCA0OCwgNDksIDQ4LCAxMjgsIDY5LCA0OCwgCi0gICAgNDgsIDU3LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgMTI4LCA2OSwgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjksIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgNjksIDQ4LCA0OCwgNTUsIDEyOCwgNjksIDQ4LCA0OCwgNTQsIDEyOCwgNjksIDQ4LCA0OCwgNTMsIAotICAgIDEyOCwgNjksIDQ4LCA0OCwgNTIsIDEyOCwgNjksIDQ4LCA0OCwgNTEsIDEyOCwgNjksIDQ4LCA0OCwgNTAsIDEyOCwgNjksIAotICAgIDQ4LCA0OCwgNDksIDEyOCwgNjksIDQ1LCA3NywgNjUsIDczLCAyMDQsIDY4LCA5MCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgCi0gICAgOTAsIDY1LCAxMjgsIDY4LCA5MCwgODcsIDY5LCAxMjgsIDY4LCA5MCwgODUsIDEyOCwgNjgsIDkwLCA3OSwgMTI4LCA2OCwgCi0gICAgOTAsIDc0LCA2OSwgMTI4LCA2OCwgOTAsIDczLCAxMjgsIDY4LCA5MCwgNzIsIDY5LCAxMjgsIDY4LCA5MCwgNzIsIDY1LCAKLSAgICAxMjgsIDY4LCA5MCwgNjksIDc2LCA3OSwgMTI4LCA2OCwgOTAsIDY5LCA2OSwgMTI4LCA2OCwgOTAsIDY5LCAxMjgsIDY4LCAKLSAgICA5MCwgNjUsIDY1LCAxMjgsIDY4LCA5MCwgNjUsIDEyOCwgNjgsIDkwLCAxMjgsIDY4LCAyMTgsIDY4LCA4OSwgNzksIDEyOCwgCi0gICAgNjgsIDg5LCAyMDcsIDY4LCA4OSwgNjksIDcyLCAxMjgsIDY4LCA4OSwgNjksIDIwMCwgNjgsIDg3LCA3OSwgMTI4LCA2OCwgCi0gICAgODcsIDY5LCAxMjgsIDY4LCA4NywgNjUsIDEyOCwgNjgsIDg2LCA3MywgODMsIDg2LCA2NSwgODIsIDY1LCAxMjgsIDY4LCAKLSAgICA4NiwgNjgsIDEyOCwgNjgsIDg2LCAxMjgsIDY4LCA4NSwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDg1LCA4MywgNzUsIAotICAgIDEyOCwgNjgsIDg1LCA4MywgNzIsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIDY4LCA4NSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgODUsIDgyLCA1MCwgMTI4LCA2OCwgODUsIDgwLCA3OSwgNzgsIDY4LCA3MywgODUsIDIxMSwgNjgsIDg1LCAKLSAgICA3OSwgODgsIDEyOCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgODUsIDc4LCA1MiwgMTI4LCA2OCwgODUsIDc4LCA1MSwgMTI4LCAKLSAgICA2OCwgODUsIDc4LCAxNzksIDY4LCA4NSwgNzcsIDEyOCwgNjgsIDg1LCAyMDQsIDY4LCA4NSwgNzIsIDEyOCwgNjgsIDg1LCAKLSAgICA3MSwgODUsIDY4LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIDY4LCA4NSwgNjYsIDEyOCwgNjgsIDg1LCAxOTQsIDY4LCAKLSAgICA4MiwgODksIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCA4MiwgODUsIDc3LCAxMjgsIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCAKLSAgICA3OSwgODAsIDgzLCAxMjgsIDY4LCA4MiwgNzksIDgwLCA3NiwgNjksIDg0LCAxMjgsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIAotICAgIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgNjgsIDgyLCA3OSwgNzcsIDY5LCA2OCwgNjUsIDgyLCAyMTcsIDY4LCA4MiwgCi0gICAgNzMsIDg2LCA2OSwgMTI4LCA2OCwgODIsIDczLCA4NiwgMTk3LCA2OCwgODIsIDczLCA3OCwgNzUsIDEyOCwgNjgsIDgyLCAKLSAgICA3MywgMjA0LCA2OCwgODIsIDY5LCA4MywgODMsIDEyOCwgNjgsIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIAotICAgIDgyLCA2NSwgNzcsIDEyOCwgNjgsIDgyLCA2NSwgMjA1LCA2OCwgODIsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDY4LCA4MiwgCi0gICAgNjUsIDcxLCA3OSwgMjA2LCA2OCwgODIsIDY1LCA3MCwgODQsIDczLCA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAKLSAgICA2NSwgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgMTkzLCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCAKLSAgICA2OCwgMjExLCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY4LCA3OSwgODcsIAotICAgIDc4LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgODUsIDcxLCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA2OCwgCi0gICAgNzksIDg1LCA2NiwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAKLSAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjgsIAotICAgIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODQsIDY5LCA2OCwgNDUsIDc4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4NCwgNjksIDY4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgMTk2LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgCi0gICAgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCi0gICAgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCi0gICAgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDEyOCwgNjgsIDc5LCA4NCwgNzYsIDY5LCA4MywgMjExLCA2OCwgNzksIDgyLCA4NSwgMTI4LCA2OCwgNzksIDc5LCAKLSAgICA4MiwgMTI4LCA2OCwgNzksIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3NywgNjUsIAotICAgIDczLCAyMDYsIDY4LCA3OSwgNzYsIDgwLCA3MiwgNzMsIDc4LCAxMjgsIDY4LCA3OSwgNzYsIDc2LCA4MywgMTI4LCA2OCwgCi0gICAgNzksIDc2LCA3NiwgNjUsIDIxMCwgNjgsIDc5LCA3NiwgNzMsIDg1LCA3NywgMTI4LCA2OCwgNzksIDc1LCA3NywgNjUsIDczLCAKLSAgICAxMjgsIDY4LCA3OSwgNzMsIDg0LCAxMjgsIDY4LCA3OSwgNzEsIDEyOCwgNjgsIDc5LCAxOTksIDY4LCA3OSwgNjksIDIxMSwgCi0gICAgNjgsIDc5LCA2OCwgNjksIDc1LCA2NSwgODQsIDY1LCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OCwgNzksIDY1LCAKLSAgICA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgCi0gICAgNjksIDE5NywgNjgsIDc5LCA2NSwgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgNzcsIDEyOCwgNjgsIDIwNSwgNjgsIAotICAgIDc2LCA4NSwgMTI4LCA2OCwgNzYsIDc5LCAxMjgsIDY4LCA3NiwgNzMsIDEyOCwgNjgsIDc2LCA3MiwgODksIDY1LCAxMjgsIAotICAgIDY4LCA3NiwgNzIsIDY1LCAxMjgsIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3NiwgNjUsIDEyOCwgNjgsIDc2LCAxMjgsIAotICAgIDY4LCA3NSwgNjUsIDgyLCAxMjgsIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCA2OCwgCi0gICAgNzQsIDY5LCA4MiwgODYsIDEyOCwgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzQsIDY1LCAxMjgsIDY4LCA3MywgOTAsIDkwLCAKLSAgICAyMTcsIDY4LCA3MywgODYsIDc5LCA4MiwgNjcsIDE5NywgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDc4LCAxMjgsIAotICAgIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCAyMDYsIDY4LCA3MywgODYsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgzLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgyLCAxMjgsIAotICAgIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDE5NiwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTI4LCA2OCwgNzMsIDg2LCA3MywgCi0gICAgNjgsIDE5NywgNjgsIDczLCA4NiwgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgNjksIDEyOCwgNjgsIDczLCA4NCwgODQsIAotICAgIDIwNywgNjgsIDczLCA4MywgODQsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3OCwgCi0gICAgNzEsIDg1LCA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDY4LCA3MywgODMsIDgzLCAKLSAgICA3OSwgNzYsIDg2LCA2OSwgNDUsIDUwLCAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgMTI4LCA2OCwgNzMsIAotICAgIDgzLCA4MCwgNjksIDgyLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA3NSwgMTI4LCA2OCwgNzMsIDgzLCA3MywgCi0gICAgNzcsIDc5LCA4NSwgMTI4LCA2OCwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCAKLSAgICA4NSwgNzksIDg1LCAyMTEsIDY4LCA3MywgODMsIDE5NSwgNjgsIDczLCA4MywgNjUsIDgwLCA4MCwgNzksIDczLCA3OCwgODQsIAotICAgIDY5LCAxOTYsIDY4LCA3MywgODMsIDY1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3MywgODIsIDcxLCAxOTMsIDY4LCA3MywgCi0gICAgODIsIDY5LCA2NywgODQsIDc2LCAyMTcsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCAKLSAgICA3MywgODAsIDg0LCA2OSwgMTI4LCA2OCwgNzMsIDgwLCA4MCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODAsIDc2LCA3OSwgODUsIAotICAgIDc4LCAxMjgsIDY4LCA3MywgODAsIDc2LCA3MywgMTI4LCA2OCwgNzMsIDgwLCA3NiwgMjAxLCA2OCwgNzMsIDc4LCA3MSwgCi0gICAgNjYsIDY1LCAyMTIsIDY4LCA3MywgMjA2LCA2OCwgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNzMsIDc3LCAKLSAgICA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgCi0gICAgNzksIDc4LCA0NSwgNTAsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA0OSwgMTI4LCAKLSAgICA2OCwgNzMsIDc3LCA3MywgNzgsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgNzcsIDczLCA2OCwgCi0gICAgNzMsIDE5MywgNjgsIDczLCA3NywgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA3NywgNjksIDc4LCAKLSAgICA4MywgNzMsIDc5LCAyMDYsIDY4LCA3MywgNzcsIDUwLCAxMjgsIDY4LCA3MywgNzYsIDEyOCwgNjgsIDczLCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDEyOCwgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgCi0gICAgNzksIDIxMSwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNjgsIDczLCA3MSwgODIsIDY1LCAyMDUsIDY4LCAKLSAgICA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA2OCwgNzMsIAotICAgIDcxLCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA2OCwgNzMsIDcxLCAxOTMsIDY4LCA3MywgNzAsIDg0LCA3OSwgNzEsIDcxLCA3OSwgCi0gICAgMjExLCA2OCwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCAKLSAgICA4NCwgMjE3LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA3MywgNzAsIAotICAgIDcwLCA2OSwgODIsIDY5LCA3OCwgODQsIDczLCA2NSwgNzYsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCAKLSAgICA2NywgMTk3LCA2OCwgNzMsIDcwLCA2NSwgODQsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIAotICAgIDY5LCA4MywgNzMsIDIxMSwgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDczLCAxOTcsIDY4LCA3MywgNjYsIDEyOCwgNjgsIAotICAgIDczLCA2NSwgODQsIDc5LCA3OCwgNzksIDIwNiwgNjgsIDczLCA2NSwgODQsIDc5LCA3OCwgNzMsIDc1LCAyMDEsIDY4LCA3MywgCi0gICAgNjUsIDgzLCA4NCwgNzksIDc2LCAyMDEsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCA4MywgMTI4LCA2OCwgNzMsIDY1LCAKLSAgICA3NywgNzksIDc4LCA2OCwgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIAotICAgIDY5LCAyMTAsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgCi0gICAgNzMsIDc1LCAxOTMsIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCAKLSAgICA2NSwgNzYsIDEyOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAotICAgIDczLCA5MCwgNjksIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY1LCA2OSwgCi0gICAgODIsIDY5LCA4MywgNzMsIDIxMSwgNjgsIDcyLCA3OSwgODUsIDEyOCwgNjgsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCAKLSAgICA3OSwgMTI4LCA2OCwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDg1LCAxMjgsIDY4LCA3MiwgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA2OCwgNzIsIDcyLCA3OSwgMTI4LCA2OCwgNzIsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNjgsIAotICAgIDcyLCA3MiwgNjksIDEyOCwgNjgsIDcyLCA3MiwgNjUsIDEyOCwgNjgsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCA2NSwgCi0gICAgODIsIDc3LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjksIDg0LCA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjUsIDg0LCAKLSAgICA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDY1LCA3NiwgODUsIDEyOCwgNjgsIDcyLCA2NSwgNjUsIDEyOCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjksIDkwLCAyMDAsIAotICAgIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTMsIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTEsIDY4LCA2OSwgCi0gICAgODgsIDczLCA2NSwgMTI4LCA2OCwgNjksIDg2LCA3MywgNjcsIDE5NywgNjgsIDY5LCA4NiwgNjksIDc2LCA3OSwgODAsIDc3LCAKLSAgICA2OSwgNzgsIDg0LCAxMjgsIDY4LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgzLCAyMDMsIDY4LCA2OSwgODMsIAotICAgIDczLCA3MSwgNzgsIDEyOCwgNjgsIDY5LCA4MywgNzMsIDEyOCwgNjgsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCAKLSAgICA2OCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgNDUsIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA2OCwgNjksIAotICAgIDgyLCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgCi0gICAgODIsIDg0LCA3NywgNjksIDc4LCAyMTIsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc4LCAKLSAgICA4NCwgNzMsIDgzLCA4NCwgODIsIDIxNywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIAotICAgIDc4LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgCi0gICAgNjksIDc4LCA3OCwgNjksIDc4LCAxMjgsIDY4LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgNzgsIDE5NywgNjgsIDY5LCAKLSAgICA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgNjgsIDY5LCA3NiwgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIAotICAgIDY4LCA2OSwgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzYsIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgCi0gICAgODIsIDIxNywgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDczLCAKLSAgICA3NywgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAyMTAsIDY4LCA2OSwgNzYsIAotICAgIDczLCA2NywgNzMsIDc5LCA4NSwgMjExLCA2OCwgNjksIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgCisgICAgODQsIDEyOCwgODIsIDc2LCA3OSwgMTI4LCA4MiwgNzYsIDc3LCAxMjgsIDgyLCA3NiwgNzMsIDEyOCwgODIsIDc2LCA2OSwgCisgICAgMTI4LCA4MiwgNzQsIDY5LCAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgCisgICAgMTI4LCA4MiwgNzMsIDg0LCA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCAKKyAgICA3MywgODQsIDgzLCA3MywgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIAorICAgIDczLCA4MiwgNjUsIDEyOCwgODIsIDczLCA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgCisgICAgNzksIDgyLCA5MCwgNjUsIDc4LCA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIAorICAgIDEyOCwgODIsIDczLCA3NSwgODIsIDczLCA3NSwgMTI4LCA4MiwgNzMsIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgCisgICAgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIAorICAgIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgCisgICAgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIAorICAgIDc4LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgCisgICAgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCAKKyAgICA3NiwgNDUsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgCisgICAgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCAKKyAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIAorICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIAorICAgIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIAorICAgIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIAorICAgIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgCisgICAgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCAxOTcsIDgyLCA3MywgNjYsIDY2LCA3OSwgNzgsIDEyOCwgCisgICAgODIsIDczLCA2NSwgMjA0LCA4MiwgNzIsIDc5LCA4NCwgNzMsIDE5NSwgODIsIDcyLCA3OSwgMTI4LCA4MiwgNzIsIDIwNywgCisgICAgODIsIDcyLCA2NSwgMTI4LCA4MiwgNzEsIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MiwgNzEsIDg5LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA4NiwgCisgICAgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCAKKyAgICA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIAorICAgIDE5NiwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIDg1LCAxMjgsIAorICAgIDgyLCA2OSwgODQsIDg1LCA4MiwgNzgsIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCAyMDYsIDgyLCA2OSwgODQsIDgyLCA3OSwgCisgICAgNzAsIDc2LCA2OSwgMjE2LCA4MiwgNjksIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDg0LCA3OSwgODIsIDg0LCAKKyAgICAxMjgsIDgyLCA2OSwgODMsIDg1LCA4MCwgNzMsIDc4LCA4NSwgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3OSwgNzksIAorICAgIDc3LCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MywgODQsIDEyOCwgCisgICAgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgODMsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCAKKyAgICA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3MywgNjgsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIAorICAgIDIwMCwgODIsIDY5LCA4MiwgNjksIDc4LCA3MSwgNzEsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgCisgICAgMTI4LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCAKKyAgICA3NywgNjksIDc4LCAyMTIsIDgyLCA2OSwgODAsIDcyLCAxMjgsIDgyLCA2OSwgODAsIDY5LCA4NCwgNzMsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgCisgICAgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCA4MCwgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjksIDgwLCA2NSwgMTI4LCAKKyAgICA4MiwgNjksIDgwLCAxOTMsIDgyLCA2OSwgNzgsIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIAorICAgIDgyLCA2OSwgMjA2LCA4MiwgNjksIDc3LCA4NSwgMTI4LCA4MiwgNjksIDc3LCA2OSwgNjgsIDg5LCAxMjgsIDgyLCA2OSwgCisgICAgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDc2LCA3MywgNjksIDg2LCA2OSwgMTk2LCA4MiwgNjksIDc2LCAKKyAgICA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIAorICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAKKyAgICAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgMTI4LCA4MiwgNjksIAorICAgIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTAsIDEyOCwgCisgICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgMjExLCA4MiwgNjksIDcxLCAKKyAgICA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzEsIAorICAgIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIDczLCA2NSwgMTI4LCA4MiwgNjksIDcwLCA3OSwgODIsIDc3LCA2OSwgCisgICAgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIAorICAgIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgCisgICAgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIAorICAgIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDgyLCA2OSwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgCisgICAgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCAKKyAgICA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIAorICAgIDE5NywgODIsIDY5LCA2NywgNjksIDczLCA4NiwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCA0NSwgCisgICAgNTAsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDEyOCwgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIAorICAgIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCA2OCwgMjA3LCA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIAorICAgIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgCisgICAgODQsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCAKKyAgICA4NCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIAorICAgIDgzLCA3OSwgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgCisgICAgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCAKKyAgICA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIAorICAgIDY1LCA3OCwgNzEsIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgCisgICAgODIsIDY1LCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCAKKyAgICA3OSwgODcsIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgCisgICAgMjE3LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgCisgICAgODIsIDY1LCA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCAKKyAgICA2OSwgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgCisgICAgMTk3LCA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgCisgICAgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCA4NCwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDIxMiwgODIsIAorICAgIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIDUxLCAxMjgsIDgyLCA2NSwgNTAsIDEyOCwgODIsIAorICAgIDY1LCA0NSwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNTcsIDEyOCwgODIsIDQ4LCA1MCwgNTYsIDEyOCwgODIsIDQ4LCA1MCwgCisgICAgNTUsIDEyOCwgODIsIDQ4LCA1MCwgNTQsIDEyOCwgODIsIDQ4LCA1MCwgNTMsIDEyOCwgODIsIDQ4LCA1MCwgNTIsIDEyOCwgCisgICAgODIsIDQ4LCA1MCwgNTEsIDEyOCwgODIsIDQ4LCA1MCwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNDksIDEyOCwgODIsIDQ4LCAKKyAgICA1MCwgNDgsIDEyOCwgODIsIDQ4LCA0OSwgNTcsIDEyOCwgODIsIDQ4LCA0OSwgNTYsIDEyOCwgODIsIDQ4LCA0OSwgNTUsIAorICAgIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDgyLCA0OCwgNDksIDU0LCAxMjgsIDgyLCA0OCwgNDksIDUzLCAxMjgsIAorICAgIDgyLCA0OCwgNDksIDUyLCAxMjgsIDgyLCA0OCwgNDksIDUxLCAxMjgsIDgyLCA0OCwgNDksIDUwLCAxMjgsIDgyLCA0OCwgCisgICAgNDksIDQ5LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgMTI4LCA4MiwgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA4MiwgNDgsIDQ4LCA1NiwgMTI4LCA4MiwgNDgsIDQ4LCA1NSwgMTI4LCA4MiwgNDgsIDQ4LCA1NCwgMTI4LCAKKyAgICA4MiwgNDgsIDQ4LCA1MywgMTI4LCA4MiwgNDgsIDQ4LCA1MiwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgNjYsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCAxMjgsIDgyLCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4MiwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA4MiwgNDgsIDQ4LCA0OSwgMTI4LCA4MiwgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCAKKyAgICA4OCwgMTI4LCA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCAKKyAgICA4MiwgMTI4LCA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCAKKyAgICA2OSwgMTI4LCA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAKKyAgICAxMjgsIDgxLCA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCAKKyAgICA2NSwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCAKKyAgICA4NiwgMTI4LCA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIAorICAgIDg5LCA2NSwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgxLCA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCAKKyAgICA3NSwgMTI4LCA4MSwgODUsIDczLCA3OCwgODQsIDY5LCA4MywgODMsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgxLCA4NSwgNzMsIAorICAgIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgCisgICAgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIDc2LCA3NiwgMTI4LCA4MSwgODUsIDczLCAKKyAgICA2NywgMjAzLCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIAorICAgIDc4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgCisgICAgNzksIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCAyMDYsIDgxLCA4NSwgNjksIDEyOCwgCisgICAgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCAKKyAgICA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIAorICAgIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgCisgICAgNzMsIDg0LCAyMTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCAKKyAgICA3OCwgODQsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIAorICAgIDg1LCA2NSwgMTk2LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCAKKyAgICA3OSwgODQsIDEyOCwgODEsIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCAKKyAgICA4MSwgNzksIDc5LCAxMjgsIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAKKyAgICAxMjgsIDgxLCA3OSwgMTI4LCA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCisgICAgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgCisgICAgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgCisgICAgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCAKKyAgICA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIAorICAgIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIAorICAgIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDcxLCA2NSwgMTI4LCA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIAorICAgIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCA2NSwgODUsIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIAorICAgIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIDgyLCAxMjgsIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgCisgICAgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCAKKyAgICA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIAorICAgIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCA3NywgNjUsIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIAorICAgIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIDcwLCAxMjgsIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIDgxLCA0OCwgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgNDgsIDQ5LCAxMjgsIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAKKyAgICAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCA4MiwgODgsIDEyOCwgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAKKyAgICAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCA4OSwgMTI4LCA4MCwgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAKKyAgICAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAKKyAgICAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgNjUsIDEyOCwgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgCisgICAgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIDgwLCA4NSwgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCAKKyAgICA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIAorICAgIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgCisgICAgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCAKKyAgICA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCA2NSwgNzcsIDY1LCAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIAorICAgIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIAorICAgIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIAorICAgIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgCisgICAgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIAorICAgIDczLCAxOTUsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIAorICAgIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIDg0LCA3MiwgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIAorICAgIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCAKKyAgICA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgCisgICAgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCAKKyAgICA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgCisgICAgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODAsIDgyLCA3OSwgODQsIDc5LCA4NiwgNjUsIDgyLCA4OSwgMjExLCAKKyAgICA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODAsIDgyLCA3OSwgODQsIDY5LCA2NywgODQsIDY5LCAxOTYsIDgwLCA4MiwgNzksIAorICAgIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIAorICAgIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgCisgICAgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIAorICAgIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgCisgICAgODAsIDgyLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDc5LCA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCAKKyAgICA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgMjEyLCA4MCwgODIsIDczLCA4NiwgNjUsIAorICAgIDg0LCA2OSwgMTI4LCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCAxOTcsIDgwLCA4MiwgNzMsIDg2LCA2NSwgNjcsIDIxNywgCisgICAgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIAorICAgIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgCisgICAgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCAKKyAgICA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIAorICAgIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIAorICAgIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgCisgICAgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCAKKyAgICA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIAorICAgIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgCisgICAgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAKKyAgICAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIAorICAgIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCisgICAgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKKyAgICA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAKKyAgICAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgCisgICAgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKKyAgICA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIAorICAgIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgCisgICAgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCAKKyAgICA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgCisgICAgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIAorICAgIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgCisgICAgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCAKKyAgICA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIAorICAgIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgCisgICAgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCAKKyAgICA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIAorICAgIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCisgICAgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCAKKyAgICA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIAorICAgIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIAorICAgIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgCisgICAgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCAKKyAgICA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIAorICAgIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgCisgICAgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIAorICAgIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgCisgICAgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIAorICAgIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgCisgICAgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCAKKyAgICA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIAorICAgIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgCisgICAgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCAKKyAgICA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIAorICAgIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIDgwLCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgCisgICAgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCAKKyAgICA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCA3OCwgNjUsIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIAorICAgIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgMTk3LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIAorICAgIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgCisgICAgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCAKKyAgICA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgCisgICAgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCAKKyAgICA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCAKKyAgICA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCAyMDgsIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIAorICAgIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgODAsIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCAKKyAgICA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCAKKyAgICA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIAorICAgIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDgzLCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgCisgICAgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgCisgICAgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCAKKyAgICA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIAorICAgIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCAKKyAgICA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCisgICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIAorICAgIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAyMDAsIDgwLCA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIAorICAgIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgCisgICAgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCAKKyAgICA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIAorICAgIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgCisgICAgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgCisgICAgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCA4NCwgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIAorICAgIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgCisgICAgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIDEyOCwgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCAKKyAgICA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIDgwLCA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIAorICAgIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgCisgICAgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCAKKyAgICA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgODMsIDY5LCA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIAorICAgIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCAKKyAgICA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgNjksIDgyLCA3NywgNzMsIDg0LCA4NCwgNjksIDE5NiwgODAsIAorICAgIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAKKyAgICA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIAorICAgIDgyLCA3NywgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgCisgICAgNjksIDY3LCA4NCwgNjUsIDEyOCwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCAKKyAgICA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA2OSwgODQsIAorICAgIDEyOCwgODAsIDY5LCA4MCwgNjksIDIxMiwgODAsIDY5LCA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgNzksIDgwLCA3NiwgCisgICAgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCAKKyAgICA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIAorICAgIDEyOCwgODAsIDY5LCA3OCwgODMsIDczLCA4NiwgMTk3LCA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIDc4LCA3MywgCisgICAgNzIsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA4NSwgNzMsIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA3NSwgNjUsIDc2LCAKKyAgICAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIAorICAgIDc2LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgCisgICAgMjA2LCA4MCwgNjksIDczLCA4NCwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCAKKyAgICAyMDAsIDgwLCA2OSwgNzIsIDEyOCwgODAsIDY5LCAyMDAsIDgwLCA2OSwgNjksIDkwLCA3MywgMTI4LCA4MCwgNjksIDY5LCAKKyAgICA4MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAxMjgsIDgwLCA2OSwgNjksIDc3LCAxMjgsIDgwLCA2OSwgNjksIAorICAgIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDY4LCAKKyAgICA2OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNjksIDY4LCA2NSwgMjA0LCA4MCwgNjksIDY1LCA2NywgNzIsIDEyOCwgODAsIAorICAgIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIDY3LCAxOTcsIDgwLCA2OCwgNzMsIDEyOCwgODAsIDY4LCA3MCwgCisgICAgMTI4LCA4MCwgNjgsIDEyOCwgODAsIDY3LCAxMjgsIDgwLCA2NSwgOTAsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDg5LCA2OSwgCisgICAgODIsIDc5LCA3NSwgMTI4LCA4MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MCwgNjUsIDg5LCAxMjgsIDgwLCAKKyAgICA2NSwgODgsIDEyOCwgODAsIDY1LCA4NywgNzgsIDEyOCwgODAsIDY1LCAyMTUsIDgwLCA2NSwgODYsIDczLCA4OSwgNjUsIAorICAgIDc4LCA3MywgMTI4LCA4MCwgNjUsIDg1LCAxMjgsIDgwLCA2NSwgODQsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDgwLCA2NSwgCisgICAgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODQsIDIwMCwgODAsIDY1LCA4NCwgNjUsIDc1LCAKKyAgICAxMjgsIDgwLCA2NSwgODQsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODMsIDg1LCA4MSwgMTI4LCAKKyAgICA4MCwgNjUsIDgzLCA4MywgODAsIDc5LCA4MiwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgCisgICAgNzYsIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIAorICAgIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA2OCwgNzksIDg3LCA3OCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCAKKyAgICA4MCwgNjUsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgwLCA2NSwgODMsIDcyLCA2NSwgNjksIDEyOCwgODAsIDY1LCA4MywgNjksIAorICAgIDgxLCAxMjgsIDgwLCA2NSwgODMsIDY1LCA3OCwgNzEsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDg1LCA3NywgMTI4LCA4MCwgCisgICAgNjUsIDgyLCA4NCwgMjE3LCA4MCwgNjUsIDgyLCA4NCwgNzgsIDY5LCA4MiwgODMsIDcyLCA3MywgMjA4LCA4MCwgNjUsIDgyLCAKKyAgICA4NCwgNzMsIDY1LCA3NiwgNzYsIDg5LCA0NSwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNjksIDE5NiwgODAsIDY1LCA4MiwgCisgICAgODQsIDczLCA2NSwgMjA0LCA4MCwgNjUsIDgyLCA4NCwgNzIsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCAyMTIsIDgwLCAKKyAgICA2NSwgODIsIDczLCA2NywgNzIsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgODMsIDg0LCA3MywgNzEsIDc3LCA2OSwgCisgICAgNzgsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY5LCA4MiwgNjksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCAKKyAgICA2OSwgODMsIDczLCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgMjExLCA4MCwgNjUsIAorICAgIDgyLCA2NSwgODAsIDcyLCA4MiwgNjUsIDgzLCAxOTcsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIAorICAgIDc2LCA2OSwgMjA0LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgNzMsIDEyOCwgODAsIDY1LCA4MiwgCisgICAgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDIwMSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIAorICAgIDE5MywgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzksIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDgwLCA2NSwgODIsIDY1LCAKKyAgICAxMjgsIDgwLCA2NSwgODIsIDEyOCwgODAsIDY1LCA4MCwgODksIDgyLCA4NSwgODMsIDEyOCwgODAsIDY1LCA4MCwgNjksIAorICAgIDgyLCA2NywgNzYsIDczLCA4MCwgMTI4LCA4MCwgNjUsIDgwLCA2OSwgMjEwLCA4MCwgNjUsIDgwLCAxMjgsIDgwLCA2NSwgCisgICAgMjA4LCA4MCwgNjUsIDIwNywgODAsIDY1LCA3OCwgODksIDg1LCA3NSwgODUsIDEyOCwgODAsIDY1LCA3OCwgODksIDczLCAKKyAgICA3NSwgODUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY5LCA2NywgNjksIDc1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzgsIAorICAgIDcxLCA3MSwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3NSwgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg0LCA3MywgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3OCwgNzEsIDc5LCA3OCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3NiwgNzksIAorICAgIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODcsIDczLCA4MywgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4MiwgCisgICAgNjUsIDc4LCA3MSwgNzUsIDY5LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzksIDc2LCA2NSwgODQsIDEyOCwgODAsIDY1LCAKKyAgICA3OCwgNzEsIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNjUsIDg5LCA2NSwgODIsIDEyOCwgODAsIAorICAgIDY1LCA3OCwgNzEsIDc1LCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA2NSwgODQsIDEyOCwgODAsIDY1LCA3OCwgCisgICAgNzEsIDcyLCA4NSwgNzYsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCAKKyAgICA4NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY4LCAxOTMsIDgwLCA2NSwgNzgsIDY1LCA2OSwgNzYsIDY1LCA2OSwgNzgsIAorICAgIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgNzUsIDY1LCA3MiwgMTI4LCA4MCwgCisgICAgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3NywgODMsIDcyLCA2NSwgNjksIDEyOCwgODAsIDY1LCAKKyAgICA3NywgODAsIDcyLCA4OSwgNzYsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDc3LCA3MywgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIAorICAgIDgwLCA2NSwgNzcsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgNjksIDc4LCA3MSwgMTI4LCA4MCwgCisgICAgNjUsIDc3LCA2NSwgNjgsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAxMjgsIDgwLCA2NSwgNzYsIDg1LCAKKyAgICA4NCwgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzksIDY3LCA3MiwgNzUsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDIwNSwgODAsIAorICAgIDY1LCA3NiwgNzYsIDY1LCA4NywgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzYsIDY1LCA4MywgMTI4LCA4MCwgNjUsIDc2LCA2OSwgCisgICAgODQsIDg0LCA2OSwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODUsIDc4LCAxOTksIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCAKKyAgICA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAyMDQsIDgwLCA2NSwgNzUsIDgwLCA2NSwgMjAzLCA4MCwgNjUsIDczLCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNzksIDczLCAxMjgsIDgwLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIAorICAgIDczLCA4MiwgNjksIDE5NiwgODAsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDcyLCA3NiwgNjUsIDg2LCAyMDEsIDgwLCA2NSwgCisgICAgNzIsIDEyOCwgODAsIDY1LCA3MSwgNjksIDgyLCAxMjgsIDgwLCA2NSwgNzEsIDE5NywgODAsIDY1LCA2OCwgNzcsIDE5MywgCisgICAgODAsIDY1LCA2OCwgNjgsIDczLCA3OCwgMTk5LCA4MCwgNjUsIDY4LCAxOTMsIDgwLCA2NSwgNjgsIDEyOCwgODAsIDY1LCAKKyAgICA2NywgNzUsIDczLCA3OCwgNzEsIDEyOCwgODAsIDY1LCA2NywgNzUsIDY1LCA3MSwgNjksIDEyOCwgODAsIDY1LCA2NSwgODQsIAorICAgIDg1LCAxMjgsIDgwLCA2NSwgNjUsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNjUsIDY1LCA4MiwgNjUsIDY5LCAKKyAgICAxMjgsIDgwLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNjUsIDQ1LCA4MCwgNzMsIAorICAgIDc2LCA3NiwgNjUsIDEyOCwgODAsIDY1LCA2NSwgMTI4LCA4MCwgNTAsIDEyOCwgODAsIDQ4LCA0OSwgNDksIDEyOCwgODAsIAorICAgIDQ4LCA0OSwgNDgsIDEyOCwgODAsIDQ4LCA0OCwgNTcsIDEyOCwgODAsIDQ4LCA0OCwgNTYsIDEyOCwgODAsIDQ4LCA0OCwgCisgICAgNTUsIDEyOCwgODAsIDQ4LCA0OCwgNTQsIDEyOCwgODAsIDQ4LCA0OCwgNTMsIDEyOCwgODAsIDQ4LCA0OCwgNTIsIDEyOCwgCisgICAgODAsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDUxLCAxMjgsIDgwLCA0OCwgNDgsIDUwLCAxMjgsIDgwLCAKKyAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgODksIDgyLCA2NSwgNzgsIDczLCA4MywgNzcsIAorICAgIDE5MywgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgODgsIDczLCA2NSwgMTI4LCA3OSwgODgsIDczLCAxOTMsIAorICAgIDc5LCA4OCwgNjksIDczLCA2NSwgMjAxLCA3OSwgODgsIDY5LCA3MywgMTkzLCA3OSwgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgCisgICAgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA3OSwgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAKKyAgICAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIAorICAgIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgCisgICAgMTI4LCA3OSwgODYsIDY1LCAyMDQsIDc5LCA4NiwgMTI4LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTk2LCA3OSwgCisgICAgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODUsIDg0LCA2OSwgMjEwLCA3OSwgODUsIDg0LCA2NiwgNzksIAorICAgIDIxNiwgNzksIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4NSwgNzgsIDY3LCA2OSwgMTI4LCA3OSwgODUsIDc4LCA2NywgCisgICAgMTk3LCA3OSwgODQsIDg1LCAxMjgsIDc5LCA4NCwgODQsIDY1LCA4NiwgMTkzLCA3OSwgODQsIDg0LCAxMjgsIDc5LCA4NCwgCisgICAgNzIsIDY1LCA3NiwgNjUsIDIwNiwgNzksIDg0LCA3MiwgNjUsIDc2LCAxMjgsIDc5LCA4MywgNzcsIDY1LCA3OCwgODksIAorICAgIDE5MywgNzksIDgzLCA2NywgMTI4LCA3OSwgODIsIDg0LCA3MiwgNzksIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDc5LCA4MiwgCisgICAgODQsIDcyLCA3OSwgNjgsIDc5LCAyMTYsIDc5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCAKKyAgICA3OCwgODQsIDEyOCwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDIxMiwgNzksIDgyLCA3NSwgNzIsIDc5LCAyMDYsIAorICAgIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDEyOCwgNzksIDgyLCA2OSwgCisgICAgNDUsIDUwLCAxMjgsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA2OCwgNjksIDIxMCwgNzksIDgyLCAKKyAgICA2NywgNzIsIDczLCA2OCwgMTI4LCA3OSwgODIsIDY1LCA3OCwgNzEsIDE5NywgNzksIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDc5LCA4MCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgNzgsIAorICAgIDE5OSwgNzksIDgwLCA4MCwgNzksIDgzLCA2OSwgMTI4LCA3OSwgODAsIDcyLCA3MywgODUsIDY3LCA3MiwgODUsIDgzLCAKKyAgICAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgCisgICAgMjEwLCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDczLCA3OCwgMTk5LCAKKyAgICA3OSwgODAsIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgCisgICAgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCAKKyAgICA2NywgNzMsIDgyLCA2NywgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgNzksIDkwLCA2OSwgCisgICAgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgNzcsIDg1LCAKKyAgICAxMjgsIDc5LCA3OSwgNjksIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNzgsIAorICAgIDg1LCAxMjgsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIDgyLCAxMjgsIAorICAgIDc5LCA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgNzksIDc4LCA2OSwgCisgICAgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzksIDc4LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzksIDc4LCAKKyAgICA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgODMsIDgzLCA3MywgNzksIAorICAgIDIwNiwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgMjA2LCA3OSwgCisgICAgNzcsIDY5LCA3MSwgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIDc5LCA3OCwgMTI4LCAKKyAgICA3OSwgNzYsIDczLCA4NiwgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgNjgsIDEyOCwgNzksIAorICAgIDc1LCA4NCwgMjA3LCA3OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgNzksIDc0LCA3MywgCisgICAgNjYsIDg3LCA2NSwgMjE3LCA3OSwgNzQsIDY5LCA3OSwgNzgsIDEyOCwgNzksIDczLCA3NiwgMTI4LCA3OSwgNzIsIDc3LCAKKyAgICAxMjgsIDc5LCA3MiwgMjA1LCA3OSwgNzEsIDgyLCA2OSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDc1LCAxMjgsIDc5LCAKKyAgICA3MSwgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCA4MiwgCisgICAgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgMTk3LCA3OSwgNzAsIDcwLCAKKyAgICAxMjgsIDc5LCA2OSwgODksIDEyOCwgNzksIDY5LCA3NSwgMTI4LCA3OSwgNjgsIDY5LCA3OCwgMTI4LCA3OSwgNjgsIDE5NiwgCisgICAgNzksIDY3LCA4NCwgNzksIDgwLCA4NSwgODMsIDEyOCwgNzksIDY3LCA4NCwgNzksIDY2LCA2OSwgODIsIDEyOCwgNzksIDY3LCAKKyAgICA4NCwgNjksIDIxMiwgNzksIDY3LCAyMTAsIDc5LCA2NywgNzYsIDc5LCA2NywgNzUsIDEyOCwgNzksIDY3LCA2NywgNzYsIAorICAgIDg1LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDY2LCA3OSwgNzYsIDIxMSwgNzksIDY2LCA3OSwgMjA0LCA3OSwgNjYsIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKKyAgICA3OSwgNjYsIDc2LCA3MywgODEsIDg1LCAxOTcsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgNjYsIDY5LCA3NiwgODUsIAorICAgIDgzLCAxMjgsIDc5LCA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDY2LCAxMjgsIDc5LCA2NSwgODksIDEyOCwgNzksIAorICAgIDY1LCA3NSwgMTI4LCA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCAxOTMsIDc5LCA0OCwgCisgICAgNTMsIDQ5LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA1MywgNDgsIDEyOCwgNzksIDQ4LCA1MiwgNTcsIDEyOCwgNzksIDQ4LCA1MiwgNTYsIDEyOCwgNzksIDQ4LCA1MiwgNTUsIAorICAgIDEyOCwgNzksIDQ4LCA1MiwgNTQsIDEyOCwgNzksIDQ4LCA1MiwgNTMsIDEyOCwgNzksIDQ4LCA1MiwgNTIsIDEyOCwgNzksIAorICAgIDQ4LCA1MiwgNTEsIDEyOCwgNzksIDQ4LCA1MiwgNTAsIDEyOCwgNzksIDQ4LCA1MiwgNDksIDEyOCwgNzksIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNzksIDQ4LCA1MSwgNTcsIDEyOCwgNzksIDQ4LCA1MSwgNTYsIDEyOCwgNzksIDQ4LCA1MSwgNTUsIDEyOCwgCisgICAgNzksIDQ4LCA1MSwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjYsIAorICAgIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCAxMjgsIDc5LCA0OCwgNTEsIDUzLCAxMjgsIAorICAgIDc5LCA0OCwgNTEsIDUyLCAxMjgsIDc5LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgMTI4LCA3OSwgCisgICAgNDgsIDUxLCA1MCwgMTI4LCA3OSwgNDgsIDUxLCA0OSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA1MSwgNDgsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCAxMjgsIDc5LCA0OCwgNTAsIAorICAgIDU2LCAxMjgsIDc5LCA0OCwgNTAsIDU1LCAxMjgsIDc5LCA0OCwgNTAsIDU0LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDUwLCA1MywgMTI4LCA3OSwgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDEyOCwgCisgICAgNzksIDQ4LCA1MCwgNTEsIDEyOCwgNzksIDQ4LCA1MCwgNTAsIDEyOCwgNzksIDQ4LCA1MCwgNDksIDEyOCwgNzksIDQ4LCAKKyAgICA1MCwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCAxMjgsIDc5LCA0OCwgNDksIDU3LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDQ5LCA1NywgMTI4LCA3OSwgNDgsIDQ5LCA1NiwgMTI4LCA3OSwgNDgsIDQ5LCA1NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NCwgCisgICAgMTI4LCA3OSwgNDgsIDQ5LCA1MywgMTI4LCA3OSwgNDgsIDQ5LCA1MiwgMTI4LCA3OSwgNDgsIDQ5LCA1MSwgMTI4LCA3OSwgCisgICAgNDgsIDQ5LCA1MCwgMTI4LCA3OSwgNDgsIDQ5LCA0OSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjcsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgMTI4LCA3OSwgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA3OSwgNDgsIDQ4LCA1NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCisgICAgNzAsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY5LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDQ4LCAKKyAgICA1NCwgNjcsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDEyOCwgNzksIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgNzksIDQ4LCA0OCwgNTEsIDEyOCwgNzksIDQ4LCA0OCwgNTAsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDY1LCAKKyAgICAxMjgsIDc5LCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA0NSwgNzksIDQ1LCA3MywgMTI4LCAKKyAgICA3OSwgNDUsIDY5LCAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAxMjgsIDc4LCA5MCwgODksIAorICAgIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCA3OCwgOTAsIDg5LCAxMjgsIAorICAgIDc4LCA5MCwgODUsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgMTI4LCA3OCwgCisgICAgOTAsIDg1LCA4MSwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCAKKyAgICA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMjA2LCA3OCwgOTAsIDg1LCAxMjgsIDc4LCA5MCwgNzksIDg4LCAxMjgsIDc4LCAKKyAgICA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDg0LCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgCisgICAgNjksIDEyOCwgNzgsIDkwLCA3MywgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgCisgICAgNzgsIDkwLCA2OSwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgMTI4LCA3OCwgOTAsIDY1LCAKKyAgICA4MSwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgMTI4LCA3OCwgOTAsIDY1LCAxMjgsIDc4LCA5MCwgMTkzLCA3OCwgODksIDg3LCAKKyAgICA2NSwgMTI4LCA3OCwgODksIDg1LCA4OCwgMTI4LCA3OCwgODksIDg1LCA4NSwgMTI4LCA3OCwgODksIDg1LCA4NCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDgwLCAxMjgsIAorICAgIDc4LCA4OSwgODUsIDc5LCAxMjgsIDc4LCA4OSwgODUsIDY5LCAxMjgsIDc4LCA4OSwgODUsIDEyOCwgNzgsIDg5LCA3OSwgCisgICAgODgsIDEyOCwgNzgsIDg5LCA3OSwgODQsIDEyOCwgNzgsIDg5LCA3OSwgODAsIDEyOCwgNzgsIDg5LCA3OSwgNzksIDEyOCwgCisgICAgNzgsIDg5LCA3OSwgNjUsIDEyOCwgNzgsIDg5LCA3OSwgMTI4LCA3OCwgODksIDc0LCA2NSwgMTI4LCA3OCwgODksIDczLCAKKyAgICA4OCwgMTI4LCA3OCwgODksIDczLCA4NCwgMTI4LCA3OCwgODksIDczLCAyMTIsIDc4LCA4OSwgNzMsIDIxMSwgNzgsIDg5LCAKKyAgICA3MywgMjEwLCA3OCwgODksIDczLCA4MCwgMTI4LCA3OCwgODksIDczLCA3OCwgNDUsIDY4LCA3OSwgMTI4LCA3OCwgODksIAorICAgIDczLCA3MywgMTI4LCA3OCwgODksIDczLCA2OSwgODgsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg0LCAxMjgsIDc4LCA4OSwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgODksIDczLCA2OSwgMTI4LCA3OCwgODksIDczLCAxMjgsIDc4LCA4OSwgMjAxLCA3OCwgCisgICAgODksIDcyLCA2NSwgMTI4LCA3OCwgODksIDY5LCA4NCwgMTI4LCA3OCwgODksIDY5LCAyMTIsIDc4LCA4OSwgNjksIDcyLCAKKyAgICAxMjgsIDc4LCA4OSwgNjksIDIwMCwgNzgsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDg5LCA2OSwgMTI4LCA3OCwgODksIDE5NiwgCisgICAgNzgsIDg5LCA2NywgNjUsIDEyOCwgNzgsIDg5LCA2NSwgODUsIDEyOCwgNzgsIDg5LCA2NSwgNzMsIDEyOCwgNzgsIDg5LCAKKyAgICA2NSwgNzIsIDEyOCwgNzgsIDg5LCA2NSwgNjksIDc3LCA2NSwgNjksIDEyOCwgNzgsIDg5LCA2NSwgNjUsIDEyOCwgNzgsIAorICAgIDg3LCA3OSwgNzksIDEyOCwgNzgsIDg3LCA3OSwgMTI4LCA3OCwgODcsIDczLCA3MywgMTI4LCA3OCwgODcsIDczLCAxMjgsIAorICAgIDc4LCA4NywgNjksIDEyOCwgNzgsIDg3LCA2NSwgNjUsIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCA3OCwgODcsIDEyOCwgNzgsIAorICAgIDg2LCAxMjgsIDc4LCA4NSwgODgsIDEyOCwgNzgsIDg1LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgODUsIAorICAgIDg0LCA3MywgNzYsIDc2LCA4NSwgMTI4LCA3OCwgODUsIDg0LCAxMjgsIDc4LCA4NSwgMjEyLCA3OCwgODUsIDgyLCA4OCwgCisgICAgMTI4LCA3OCwgODUsIDgyLCAxMjgsIDc4LCA4NSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg1LCA3OSwgCisgICAgODAsIDEyOCwgNzgsIDg1LCA3OSwgMTI4LCA3OCwgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzgsIDg1LCA3OCwgODUsIDIxOCwgCisgICAgNzgsIDg1LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgMjEyLCA3OCwgODUsIDc4LCA2NSwgODYsIDczLCAKKyAgICAyMDMsIDc4LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAyMDYsIDc4LCA4NSwgNzcsIDY5LCA4MiwgMjA3LCA3OCwgODUsIDc3LCAKKyAgICA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgMjA0LCA3OCwgODUsIDc3LCA2NiwgNjksIAorICAgIDgyLCA4MywgMTI4LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA4NSwgNzcsIDEyOCwgNzgsIDg1LCA3NiwgCisgICAgNzYsIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgODUsIDc2LCAxMjgsIDc4LCA4NSwgNzUsIDg0LCA2NSwgMTI4LCA3OCwgCisgICAgODUsIDY5LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA2OSwgMTI4LCA3OCwgODUsIDY2LCA3MywgNjUsIDIwNiwgNzgsIDg1LCAKKyAgICA2NSwgNjksIDEyOCwgNzgsIDg1LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OSwgMTc3LCA3OCwgODUsIDQ4LCA1MCwgNTAsIAorICAgIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDg1LCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDc4LCA4NSwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUxLCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NSwgMTI4LCAKKyAgICA3OCwgODUsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MiwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCAKKyAgICA0OSwgMTI4LCA3OCwgODQsIDg1LCA4NSwgMTI4LCA3OCwgODQsIDg1LCA3NywgMTI4LCA3OCwgODQsIDIxMywgNzgsIDg0LCAKKyAgICA3OSwgODEsIDgwLCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA3MywgNjksIDE5NywgNzgsIDg0LCA2OSwgODUsIDc4LCA3MSwgNjYsIAorICAgIDY1LCAxMjgsIDc4LCA4NCwgNjksIDg1LCA3NywgMTI4LCA3OCwgODQsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgODQsIDY1LCA4MCwgMTI4LCA3OCwgODQsIDY1LCAyMDgsIDc4LCA4NCwgNjUsIDY1LCAxMjgsIDc4LCA4MywgCisgICAgODUsIDc5LCAyMTIsIDc4LCA4MywgODUsIDc4LCAxMjgsIDc4LCA4MywgODUsIDc3LCAxMjgsIDc4LCA4MywgNzksIDc3LCAKKyAgICAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4MCwgMTI4LCA3OCwgODMsIAorICAgIDczLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDc4LCA4MywgNzIsIDg1LCAyMTIsIDc4LCA4MywgCisgICAgNzIsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDY5LCAxMjgsIDc4LCA4MywgNzIsIDczLCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY1LCA4MSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgCisgICAgMTI4LCA3OCwgODMsIDY5LCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY1LCAKKyAgICAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgMTI4LCAKKyAgICA3OCwgODIsIDg5LCA4MiwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgODUsIAorICAgIDg4LCAxMjgsIDc4LCA4MiwgODUsIDg0LCAxMjgsIDc4LCA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgCisgICAgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCA4MiwgCisgICAgNzksIDgwLCAxMjgsIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIDEyOCwgCisgICAgNzgsIDgyLCA2OSwgODAsIDEyOCwgNzgsIDgyLCA2OSwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIDY1LCAKKyAgICA4NCwgMTI4LCA3OCwgODIsIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA3OSwgODksIDEyOCwgNzgsIDc5LCAKKyAgICA4OCwgMTI4LCA3OCwgNzksIDg2LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAxMjgsIAorICAgIDc4LCA3OSwgODQsIDY5LCA4MywgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNzgsIDc5LCA4NCwgCisgICAgNjksIDcyLCA2OSwgNjUsIDE5NiwgNzgsIDc5LCA4NCwgNjksIDY2LCA3OSwgNzksIDc1LCAxMjgsIDc4LCA3OSwgODQsIDY5LCAKKyAgICA2NiwgNzksIDc5LCAyMDMsIDc4LCA3OSwgODQsIDY5LCAxMjgsIDc4LCA3OSwgODQsIDE5NywgNzgsIDc5LCA4NCwgNjcsIAorICAgIDcyLCA2OSwgMTk2LCA3OCwgNzksIDg0LCA2NywgNzIsIDEyOCwgNzgsIDc5LCA4NCwgMTI4LCA3OCwgNzksIDIxMiwgNzgsIAorICAgIDc5LCA4MywgNjksIDEyOCwgNzgsIDc5LCA4MiwgODQsIDcyLCA4NywgNjksIDgzLCAyMTIsIDc4LCA3OSwgODIsIDg0LCA3MiwgCisgICAgNjksIDgyLCAyMDYsIDc4LCA3OSwgODIsIDg0LCAyMDAsIDc4LCA3OSwgODIsIDc3LCA2NSwgMjA0LCA3OCwgNzksIDIxMCwgCisgICAgNzgsIDc5LCA4MCwgMTI4LCA3OCwgNzksIDc5LCA3OCwgODUsIDEyOCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzksIDc4LCAKKyAgICA3MCwgNzksIDgyLCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA3OCwgNzksIDc4LCA0NSwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgCisgICAgMTk3LCA3OCwgNzksIDc4LCA0NSwgNzQsIDc5LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDc4LCA0NSwgNjYsIDgyLCAKKyAgICA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgMjA0LCA3OCwgNzksIDc1LCA3MiwgODUsIAorICAgIDc1LCAxMjgsIDc4LCA3OSwgNjgsIDY5LCAxMjgsIDc4LCA3OSwgNjUsIDEyOCwgNzgsIDc5LCA0NSwgNjYsIDgyLCA2OSwgCisgICAgNjUsIDIwMywgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA4NSwgMTI4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgCisgICAgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3OSwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzgsIAorICAgIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNzgsIDc4LCA2OSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgCisgICAgODUsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA2NSwgMTI4LCA3OCwgNzgsIDc4LCAxMjgsIDc4LCA3OCwgNzIsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCA3OSwgMTI4LCAKKyAgICA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDEyOCwgNzgsIAorICAgIDc4LCA3MSwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDEyOCwgNzgsIDc4LCA2NiwgCisgICAgODMsIDgwLCAxMjgsIDc4LCA3NywgMTI4LCA3OCwgNzYsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU3LCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIAorICAgIDQ5LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA3NiwgCisgICAgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUwLCAxMjgsIDc4LCAKKyAgICA3NiwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU3LCAxMjgsIAorICAgIDc4LCA3NiwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA3NiwgNDgsIAorICAgIDQ4LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA3NiwgCisgICAgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNzYsIDEyOCwgNzgsIDc1LCA3OSwgNzcsIDEyOCwgNzgsIDc1LCAyMDcsIDc4LCA3NSwgCisgICAgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNzgsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4OSwgODgsIAorICAgIDEyOCwgNzgsIDc0LCA4OSwgODQsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgODksIDgyLCAxMjgsIAorICAgIDc4LCA3NCwgODksIDgwLCAxMjgsIDc4LCA3NCwgODksIDEyOCwgNzgsIDc0LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgCisgICAgODIsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCAxMjgsIDc4LCA3NCwgODUsIDgxLCA2NSwgMTI4LCA3OCwgNzQsIDg1LCAKKyAgICA4MCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDEyOCwgNzgsIDc0LCA4NSwgNjksIAorICAgIDgxLCAxMjgsIDc4LCA3NCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg1LCAxMjgsIDc4LCA3NCwgNzksIDg4LCAxMjgsIAorICAgIDc4LCA3NCwgNzksIDg0LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDc5LCAxMjgsIDc4LCA3NCwgCisgICAgNzksIDEyOCwgNzgsIDc0LCA3MywgODgsIDEyOCwgNzgsIDc0LCA3MywgODQsIDEyOCwgNzgsIDc0LCA3MywgODAsIDEyOCwgCisgICAgNzgsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODAsIAorICAgIDEyOCwgNzgsIDc0LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDEyOCwgNzgsIAorICAgIDc0LCAyMDEsIDc4LCA3NCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDc0LCA2OSwgCisgICAgODUsIDY1LCA2OSwgNzgsIDY1LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgMTk3LCA3OCwgNzQsIDY5LCAxMjgsIDc4LCAKKyAgICA3NCwgNjUsIDgxLCAxMjgsIDc4LCA3NCwgNjUsIDgwLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgNzYsIDczLCAxMjgsIAorICAgIDc4LCA3NCwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY1LCA2NSwgMTI4LCA3OCwgNzMsIDg4LCAxMjgsIDc4LCA3MywgCisgICAgODQsIDgyLCA2OSwgMTI4LCA3OCwgNzMsIDgzLCA2NSwgNzEsIDEyOCwgNzgsIDczLCA4MiwgODUsIDcxLCA4NSwgMTI4LCAKKyAgICA3OCwgNzMsIDgwLCAxMjgsIDc4LCA3MywgNzgsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDg5LCAxMjgsIAorICAgIDc4LCA3MywgNzgsIDY5LCA4NCwgMjE3LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzgsIDczLCA3OCwgCisgICAgNjksIDg0LCA2OSwgNjksIDIwNiwgNzgsIDczLCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc4LCAKKyAgICA3MywgNzgsIDE5NywgNzgsIDczLCA3OCwgNjgsIDY1LCA1MCwgMTI4LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDE3OCwgNzgsIAorICAgIDczLCA3NywgMTI4LCA3OCwgNzMsIDIwNSwgNzgsIDczLCA3NSwgNzIsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgCisgICAgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCAxMjgsIDc4LCA3MywgNzIsIDgzLCA3MiwgODYsIDY1LCAKKyAgICA4MywgNjUsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNzcsIDczLCA3OCwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIAorICAgIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3OCwgCisgICAgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDcyLCA3MywgCisgICAgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCAKKyAgICA2OSwgODUsIDc4LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKKyAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAorICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzgsIDczLCA2OSwgCisgICAgODUsIDIwNiwgNzgsIDczLCA2OSwgODAsIDEyOCwgNzgsIDczLCA2OSwgMTI4LCA3OCwgNzMsIDY2LCAxMjgsIDc4LCA3MywgCisgICAgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCA3OCwgNzIsIDc0LCA2NSwgMTI4LCA3OCwgCisgICAgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIDcxLCA4NiwgNjksIDEyOCwgNzgsIDcxLCA4NSwgODUsIDEyOCwgCisgICAgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgMTI4LCAKKyAgICA3OCwgNzEsIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDc5LCA4OCwgCisgICAgMTI4LCA3OCwgNzEsIDc5LCA4NSwgMTI4LCA3OCwgNzEsIDc5LCAyMTMsIDc4LCA3MSwgNzksIDg0LCAxMjgsIDc4LCA3MSwgCisgICAgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgNzksIDc3LCAKKyAgICAxMjgsIDc4LCA3MSwgNzksIDY5LCA3MiwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgMjAwLCA3OCwgNzEsIDIwNywgNzgsIDcxLCAKKyAgICA3NSwgODksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgODAsIAorICAgIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgCisgICAgNjksIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgMTk3LCA3OCwgNzEsIDc1LCA3MywgNzgsIDY4LCAKKyAgICAyMDEsIDc4LCA3MSwgNzUsIDczLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIAorICAgIDc1LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgCisgICAgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODAsIAorICAgIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDY1LCA3NywgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDEyOCwgNzgsIDcxLCA3MywgCisgICAgNjksIDg4LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgMTI4LCA3OCwgNzEsIDcyLCAKKyAgICA2NSwgMTI4LCA3OCwgNzEsIDcxLCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA4NSwgNzksIDIwOSwgNzgsIDcxLCA3MSwgODUsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc3LCAxMjgsIAorICAgIDc4LCA3MSwgNzEsIDg1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgCisgICAgNjUsIDY5LCA4MywgNzIsIDY1LCAxOTcsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDIwNiwgNzgsIDcxLCA3MSwgODUsIAorICAgIDEyOCwgNzgsIDcxLCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDczLCAxMjgsIAorICAgIDc4LCA3MSwgNzEsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgCisgICAgNzEsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAyMTMsIDc4LCA3MSwgNzEsIDY5LCA3OCwgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgMTI4LCAKKyAgICA3OCwgNzEsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDY5LCA4NSwgODIsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDcxLCA2OSwgODAsIAorICAgIDEyOCwgNzgsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA2OSwgNjUsIDY4LCA2NSwgCisgICAgNzYsIDEyOCwgNzgsIDcxLCA2NSwgODgsIDEyOCwgNzgsIDcxLCA2NSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgODQsIDEyOCwgCisgICAgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzEsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDY1LCAKKyAgICA3OCwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIDc4LCA3MSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIAorICAgIDcyLCAxMjgsIDc4LCA3MSwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgNzgsIDcwLCAxMjgsIDc4LCA2OSwgODgsIAorICAgIDIxMiwgNzgsIDY5LCA4OCwgMTI4LCA3OCwgNjksIDg3LCA4MywgODAsIDY1LCA4MCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgCisgICAgODcsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODcsIDEyOCwgNzgsIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCAKKyAgICA3OCwgNjksIDg1LCA4NCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgNzgsIDY5LCAyMTIsIDc4LCA2OSwgODMsIAorICAgIDg0LCA2OSwgMTk2LCA3OCwgNjksIDgxLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgCisgICAgMTI4LCA3OCwgNjksIDgwLCAxMjgsIDc4LCA2OSwgNzksIDEyOCwgNzgsIDY5LCAyMDcsIDc4LCA2OSwgNzgsIDY1LCA3OCwgCisgICAgNzksIDEyOCwgNzgsIDY5LCA3OCwgMTI4LCA3OCwgNjksIDc2LCAxMjgsIDc4LCA2OSwgNzMsIDg0LCA3MiwgNjksIDIxMCwgCisgICAgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY5LCA3MSwgNjUsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDY3LCAKKyAgICA3NSwgODQsIDczLCA2OSwgMTI4LCA3OCwgNjksIDY2LCA2OSwgNzgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIAorICAgIDY4LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgCisgICAgODUsIDgyLCAxMjgsIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCA2OCwgODUsIDc4LCAxMjgsIDc4LCA2OCwgMjEzLCA3OCwgCisgICAgNjgsIDc5LCA4OCwgMTI4LCA3OCwgNjgsIDc5LCA4NCwgMTI4LCA3OCwgNjgsIDc5LCA4MCwgMTI4LCA3OCwgNjgsIDc5LCAKKyAgICA3OSwgMTI4LCA3OCwgNjgsIDc5LCA3OCwgMTI4LCA3OCwgNjgsIDc5LCA3NywgNjYsIDg1LCAxMjgsIDc4LCA2OCwgNzksIAorICAgIDc2LCAxOTcsIDc4LCA2OCwgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDg0LCAxMjgsIDc4LCA2OCwgNzMsIDgxLCAxMjgsIAorICAgIDc4LCA2OCwgNzMsIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgCisgICAgNjgsIDczLCA2OCwgNjUsIDEyOCwgNzgsIDY4LCA3MywgNjUsIDgxLCAxMjgsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc4LCAKKyAgICA2OCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDY1LCA2OSwgODIsIAorICAgIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA3OCwgNjgsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCAxMjgsIAorICAgIDc4LCA2OCwgNjUsIDg4LCAxMjgsIDc4LCA2OCwgNjUsIDg0LCAxMjgsIDc4LCA2OCwgNjUsIDgwLCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDc3LCAxMjgsIDc4LCA2OCwgNjUsIDY1LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDY4LCAKKyAgICA2NSwgNjUsIDEyOCwgNzgsIDY4LCA2NSwgMTkzLCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCAKKyAgICA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgNzgsIAorICAgIDY2LCA4OSwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgCisgICAgODgsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgCisgICAgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIDc5LCAKKyAgICAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDY2LCA3MywgMTI4LCA3OCwgNjYsIDcyLCAxMjgsIDc4LCA2NiwgNjUsIDg4LCAxMjgsIDc4LCA2NiwgNjUsIDg0LCAxMjgsIAorICAgIDc4LCA2NiwgNjUsIDgwLCAxMjgsIDc4LCA2NiwgNjUsIDEyOCwgNzgsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCisgICAgNzgsIDY1LCA4OSwgMTI4LCA3OCwgNjUsIDg4LCA3MywgNjUsIDIwNiwgNzgsIDY1LCA4OCwgMTI4LCA3OCwgNjUsIDg1LCAKKyAgICA4NCwgNzIsIDgzLCAxMjgsIDc4LCA2NSwgODUsIDY4LCA3MywgMjE4LCA3OCwgNjUsIDg0LCA4NSwgODIsIDY1LCAyMDQsIAorICAgIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDc4LCA2NSwgODMsIDc1LCA2NSwgODAsIDIwMSwgNzgsIDY1LCA4MywgCisgICAgNzIsIDczLCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzgsIDY1LCAKKyAgICA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3OCwgNjUsIAorICAgIDgyLCAxMjgsIDc4LCA2NSwgODEsIDEyOCwgNzgsIDY1LCA3OSwgMjExLCA3OCwgNjUsIDc4LCA4MywgNjUsIDc4LCA2NSwgCisgICAgODEsIDEyOCwgNzgsIDY1LCA3OCwgNzEsIDc3LCA3OSwgNzgsIDg0LCA3MiwgNzksIDEyOCwgNzgsIDY1LCA3OCwgNjgsIAorICAgIDEyOCwgNzgsIDY1LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCA3NywgNjksIDEyOCwgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIAorICAgIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc3LCAxMjgsIDc4LCA2NSwgNzUsIDEyOCwgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIAorICAgIDY1LCA3MywgMjA0LCA3OCwgNjUsIDcxLCA4MiwgMjAxLCA3OCwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzgsIDY1LCA3MSwgCisgICAgNjUsIDEyOCwgNzgsIDY1LCA3MSwgMTkzLCA3OCwgNjUsIDcxLCAxMjgsIDc4LCA2NSwgMTk5LCA3OCwgNjUsIDY5LCAxMjgsIAorICAgIDc4LCA2NSwgNjYsIDc2LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgCisgICAgNjUsIDY1LCA3NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDY1LCAKKyAgICAxOTMsIDc4LCA2NSwgNTAsIDEyOCwgNzgsIDY1LCA0NSwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNTAsIDEyOCwgNzgsIDQ4LCAKKyAgICA1MiwgNDksIDEyOCwgNzgsIDQ4LCA1MiwgNDgsIDEyOCwgNzgsIDQ4LCA1MSwgNTcsIDEyOCwgNzgsIDQ4LCA1MSwgNTYsIAorICAgIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDU1LCAxMjgsIDc4LCA0OCwgNTEsIDU0LCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MywgMTI4LCA3OCwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgCisgICAgNzgsIDQ4LCA1MSwgNTIsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUxLCAxMjgsIDc4LCAKKyAgICA0OCwgNTEsIDUwLCAxMjgsIDc4LCA0OCwgNTEsIDQ5LCAxMjgsIDc4LCA0OCwgNTEsIDQ4LCAxMjgsIDc4LCA0OCwgNTAsIAorICAgIDU3LCAxMjgsIDc4LCA0OCwgNTAsIDU2LCAxMjgsIDc4LCA0OCwgNTAsIDU1LCAxMjgsIDc4LCA0OCwgNTAsIDU0LCAxMjgsIAorICAgIDc4LCA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OCwgNDgsIDUwLCA1MywgMTI4LCA3OCwgNDgsIDUwLCA1MiwgMTI4LCA3OCwgCisgICAgNDgsIDUwLCA1MSwgMTI4LCA3OCwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA0OCwgMTI4LCA3OCwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjYsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIAorICAgIDY1LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDc4LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDc4LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA0OCwgNDgsIDU3LCAKKyAgICAxMjgsIDc4LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCAKKyAgICA0OCwgNDgsIDUzLCAxMjgsIDc4LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA0OCwgNDgsIAorICAgIDUwLCAxMjgsIDc4LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3OCwgNDUsIDY1LCA4MiwgCisgICAgMjE3LCA3NywgODksIDg4LCAxMjgsIDc3LCA4OSwgODQsIDEyOCwgNzcsIDg5LCA4MywgNzYsIDczLCA4NCwgNjksIDEyOCwgCisgICAgNzcsIDg5LCA4MCwgMTI4LCA3NywgODksIDY1LCAxMjgsIDc3LCA4OSwgMTkzLCA3NywgODksIDEyOCwgNzcsIDIxNywgNzcsIAorICAgIDg3LCA3OSwgNzksIDEyOCwgNzcsIDg3LCA3OSwgMTI4LCA3NywgODcsIDczLCA3MywgMTI4LCA3NywgODcsIDczLCAxMjgsIAorICAgIDc3LCA4NywgNjksIDY5LCAxMjgsIDc3LCA4NywgNjksIDEyOCwgNzcsIDg3LCA2NSwgNjUsIDEyOCwgNzcsIDg3LCA2NSwgCisgICAgMTI4LCA3NywgODcsIDEyOCwgNzcsIDIxNSwgNzcsIDg2LCA4MywgMTI4LCA3NywgODYsIDc5LCA4MCwgMTI4LCA3NywgODYsIAorICAgIDczLCAxMjgsIDc3LCA4NiwgNjksIDg1LCA2NSwgNjksIDc4LCA3MSwgNjUsIDc3LCAxMjgsIDc3LCA4NiwgMTI4LCA3NywgCisgICAgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgODUsIDgzLCA3MywgNzUsIDY1LCA4NCwgNzksIDY1LCA3OCwgMTI4LCAKKyAgICA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIDE5MywgNzcsIDg1LCA4NSwgMTI4LCA3NywgODUsIDg0LCAxMjgsIAorICAgIDc3LCA4NSwgODMsIDczLCA2NywgMTI4LCA3NywgODUsIDgzLCA3MywgMTk1LCA3NywgODUsIDgzLCA3MiwgODIsIDc5LCA3OSwgCisgICAgNzcsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDUxLCAxMjgsIDc3LCA4NSwgODMsIDcyLCAxNzksIDc3LCA4NSwgODMsIDcyLCAKKyAgICAxMjgsIDc3LCA4NSwgODMsIDIwMCwgNzcsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDg1LCA4MiwgNzEsIDg1LCA1MCwgMTI4LCAKKyAgICA3NywgODUsIDgyLCA2OSwgMTI4LCA3NywgODUsIDgyLCA2OCwgNjUsIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDE5MywgNzcsIAorICAgIDg1LCA4MiwgMTI4LCA3NywgODUsIDgxLCA2OCwgNjUsIDc3LCAxMjgsIDc3LCA4NSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgCisgICAgODgsIDEyOCwgNzcsIDg1LCA3OSwgODQsIDEyOCwgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgNzcsIDY1LCAKKyAgICA2OSwgMTI4LCA3NywgODUsIDc5LCAxMjgsIDc3LCA4NSwgNzgsIDgzLCA4NSwgNjYsIDEyOCwgNzcsIDg1LCA3OCwgNjUsIAorICAgIDcyLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCA4NCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgCisgICAgMjEyLCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzcsIDg1LCAKKyAgICA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgCisgICAgNzYsIDE5NywgNzcsIDg1LCA3NiwgODQsIDczLCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDg1LCA3NiwgODQsIDczLCAKKyAgICA3NywgNjUsIDgwLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCAyMDEsIDc3LCA4NSwgNzUsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIAorICAgIDEyOCwgNzcsIDg1LCA3MywgNzgsIDEyOCwgNzcsIDg1LCA3MSwgODMsIDEyOCwgNzcsIDg1LCA3MSwgMTI4LCA3NywgODUsIAorICAgIDE5OSwgNzcsIDg1LCA2OSwgMTI4LCA3NywgODUsIDY3LCA3MiwgMTI4LCA3NywgODUsIDY3LCAyMDAsIDc3LCA4NSwgNjcsIAorICAgIDY1LCA2NSwgNjgsIDEyOCwgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA0NSwgCisgICAgNzEsIDY1LCA2NSwgNzIsIDc2LCA2NSwgMTkzLCA3NywgMjEzLCA3NywgODMsIDEyOCwgNzcsIDgwLCA2NSwgMTI4LCA3NywgCisgICAgNzksIDg5LCA2NSwgNzMsIDEyOCwgNzcsIDc5LCA4OCwgMTI4LCA3NywgNzksIDg2LCA3MywgMTk3LCA3NywgNzksIDg2LCAKKyAgICA2OSwgMTk2LCA3NywgNzksIDg1LCA4NCwgNzIsIDEyOCwgNzcsIDc5LCA4NSwgODQsIDIwMCwgNzcsIDc5LCA4NSwgODMsIAorICAgIDY5LCAxMjgsIDc3LCA3OSwgODUsIDgzLCAxOTcsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgODMsIDEyOCwgCisgICAgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCAyMDYsIDc3LCAKKyAgICA3OSwgODUsIDc4LCAyMTIsIDc3LCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIAorICAgIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA3OSwgODQsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDg1LCA4NSwgNzcsIDEyOCwgCisgICAgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIAorICAgIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgNzcsIDc5LCA3OSwgCisgICAgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAyMDYsIDc3LCAKKyAgICA3OSwgNzksIDc3LCA4MCwgODUsIDgxLCAxMjgsIDc3LCA3OSwgNzksIDc3LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3OSwgNzksIAorICAgIDEyOCwgNzcsIDc5LCA3OCwgODQsIDczLCA2OSwgNjksIDc4LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MiwgMTI4LCA3NywgCisgICAgNzksIDc4LCA4NCwgMjAwLCA3NywgNzksIDc4LCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzksIDc4LCA3OSwgODMsIDg0LCAKKyAgICA2NSwgNjYsIDc2LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MywgODAsIDY1LCA2NywgMTk3LCA3NywgNzksIDc4LCA3OSwgODIsIAorICAgIDY1LCA3MywgNzYsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc3LCA3OSwgNzgsIDc5LCA3MSwgCisgICAgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc3LCA3OSwgNzgsIDc5LCAKKyAgICA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgNzksIAorICAgIDc4LCA3NSwgNjksIDg5LCAxMjgsIDc3LCA3OSwgNzgsIDc1LCA2OSwgMjE3LCA3NywgNzksIDc4LCA3MywgMTI4LCA3NywgCisgICAgNzksIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA3NywgNzksIDc4LCA2OSwgMjE3LCA3NywgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA3OSwgMjA2LCA3NywgNzksIDc2LCAxMjgsIDc3LCA3OSwgNzIsIDY1LCA3NywgNzcsIDY1LCAxOTYsIDc3LCAKKyAgICA3OSwgNjgsIDg1LCA3NiwgMjA3LCA3NywgNzksIDY4LCA2OSwgODMsIDg0LCA4OSwgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIAorICAgIDgzLCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgMTI4LCA3NywgNzksIDY4LCA2OSwgMTI4LCA3NywgNzksIDY2LCA3MywgCisgICAgNzYsIDE5NywgNzcsIDc5LCA2NSwgMTI4LCA3NywgMjA3LCA3NywgNzgsIDg5LCA2NSwgMjA1LCA3NywgNzgsIDY1LCA4MywgCisgICAgMTI4LCA3NywgNzcsIDgzLCA4MCwgMTI4LCA3NywgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCA3NywgNzYsIAorICAgIDEyOCwgNzcsIDc1LCA4MCwgNjUsIDgyLCA2NSwgMjA5LCA3NywgNzMsIDg4LCAxMjgsIDc3LCA3MywgODQsIDEyOCwgNzcsIAorICAgIDczLCA4MywgODIsIDY1LCAxMjgsIDc3LCA3MywgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDczLCA4MiwgCisgICAgNzMsIDEyOCwgNzcsIDczLCA4MiwgNjksIDY4LCAxMjgsIDc3LCA3MywgODAsIDEyOCwgNzcsIDczLCA3OCwgODksIDEyOCwgCisgICAgNzcsIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzMsIDc4LCA4NSwgODMsIAorICAgIDEyOCwgNzcsIDczLCA3OCwgNzMsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNjUsIDEyOCwgCisgICAgNzcsIDczLCA3OCwgNzMsIDY4LCA3MywgODMsIDY3LCAxMjgsIDc3LCA3MywgNzgsIDczLCA2NiwgODUsIDgzLCAxMjgsIDc3LCAKKyAgICA3MywgNzcsIDY5LCAxMjgsIDc3LCA3MywgNzcsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDczLCA3OSwgNzgsIDIxMSwgNzcsIAorICAgIDczLCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA3NywgNzMsIDc2LCA3NiwgMTk3LCA3NywgNzMsIDc2LCAyMDQsIDc3LCA3MywgCisgICAgNzYsIDc1LCAyMTcsIDc3LCA3MywgNzYsIDEyOCwgNzcsIDczLCA3NSwgODUsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA3NSwgODIsIDc5LCAyMDYsIDc3LCA3MywgNzUsIDgyLCA3MywgMTI4LCA3NywgNzMsIDczLCA3OCwgMTI4LCA3NywgNzMsIAorICAgIDczLCAxMjgsIDc3LCA3MywgMTk5LCA3NywgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4NCwgCisgICAgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc3LCA3MywgNjksIAorICAgIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCAKKyAgICA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNjUsIDc4LCA4MywgCisgICAgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA2OSwgODUsIDc3LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA3MywgNjksIDg1LCAyMDUsIDc3LCA3MywgNjksIDgwLCAxMjgsIDc3LCAKKyAgICA3MywgNjksIDY5LCAxMjgsIDc3LCA3MywgNjksIDEyOCwgNzcsIDczLCA2OCwgNzYsIDczLCA3OCwgMTk3LCA3NywgNzMsIAorICAgIDY4LCA2OCwgNzYsIDY5LCA0NSwgODcsIDY5LCA3NiwgODMsIDIwMCwgNzcsIDczLCA2OCwgNjgsIDc2LCAxOTcsIDc3LCA3MywgCisgICAgMTk2LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA2NywgNzksIDgwLCA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgwLCAKKyAgICA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgMjA3LCA3NywgNzMsIDY3LCAyMTAsIDc3LCA3MiwgOTAsIAorICAgIDEyOCwgNzcsIDcyLCA2NSwgMTI4LCA3NywgNzIsIDEyOCwgNzcsIDcxLCA4NSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODQsIAorICAgIDEyOCwgNzcsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDgyLCAxMjgsIDc3LCA3MSwgODUsIDgwLCAxMjgsIAorICAgIDc3LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDEyOCwgCisgICAgNzcsIDcxLCA4NSwgMTI4LCA3NywgNzEsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDc5LCA4NCwgMTI4LCA3NywgNzEsIDc5LCAKKyAgICA4MCwgMTI4LCA3NywgNzEsIDc5LCAxMjgsIDc3LCA3MSwgMjA3LCA3NywgNzEsIDczLCA2OSwgODgsIDEyOCwgNzcsIDcxLCAKKyAgICA3MywgNjksIDEyOCwgNzcsIDcxLCA2OSwgODgsIDEyOCwgNzcsIDcxLCA2OSwgODAsIDEyOCwgNzcsIDcxLCA2OSwgMTI4LCAKKyAgICA3NywgNzEsIDY2LCA4NSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzksIDcwLCA4NSwgNzcsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzMsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDg1LCA3OCwgCisgICAgMTI4LCA3NywgNzEsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDgxLCAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDEyOCwgNzcsIAorICAgIDcxLCA2NSwgODgsIDEyOCwgNzcsIDcxLCA2NSwgODQsIDEyOCwgNzcsIDcxLCA2NSwgODAsIDEyOCwgNzcsIDcxLCA2NSwgCisgICAgMTI4LCA3NywgNzEsIDEyOCwgNzcsIDcwLCA3OSwgNzgsIDEyOCwgNzcsIDcwLCA3OSwgMjA2LCA3NywgNzAsIDc5LCAxMjgsIAorICAgIDc3LCA3MCwgNzMsIDg5LCA2NSwgODEsIDEyOCwgNzcsIDcwLCA3MywgNjksIDY5LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA3NywgNzAsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDcwLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3NywgNzAsIDY1LCAKKyAgICA2NSwgMTI4LCA3NywgNjksIDkwLCA5MCwgNzksIDEyOCwgNzcsIDY5LCA4OCwgMTI4LCA3NywgNjksIDg1LCAyMTIsIDc3LCAKKyAgICA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIDc4LCA3NCwgNzksIDc3LCA3OCwgNjgsIDY5LCA4NSwgODEsIDEyOCwgNzcsIAorICAgIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDY5LCA4NCwgODIsIDc5LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDc3LCA2OSwgODQsIDgyLCA3MywgNjUsIDEyOCwgNzcsIDY5LCA4NCwgODIsIDY5LCA4NCwgNjksIDIxMSwgNzcsIAorICAgIDY5LCA4NCwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3NywgNjksIDg0LCA2OSwgNzUsIDEyOCwgNzcsIDY5LCA4NCwgCisgICAgNjksIDcxLCAxMjgsIDc3LCA2OSwgODQsIDY1LCA3NiwgMTI4LCA3NywgNjksIDg0LCAxOTMsIDc3LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NywgNjksIDgzLCA4MywgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgzLCA4MywgNjUsIAorICAgIDcxLCAxOTcsIDc3LCA2OSwgODMsIDc5LCAxMjgsIDc3LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2OSwgODMsIDcyLCAxMjgsIAorICAgIDc3LCA2OSwgODIsIDc5LCA3MywgODQsIDczLCAxOTUsIDc3LCA2OSwgODIsIDc1LCA3MiwgNjUsIDEyOCwgNzcsIDY5LCA4MiwgCisgICAgNzUsIDcyLCAxOTMsIDc3LCA2OSwgODIsIDczLCA2OCwgNzMsIDY1LCA3OCwgODMsIDEyOCwgNzcsIDY5LCA4MiwgNzMsIAorICAgIDEyOCwgNzcsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDg5LCAxMjgsIDc3LCA2OSwgCisgICAgODIsIDY3LCA4NSwgODIsIDIxNywgNzcsIDY5LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3NywgNjksIDc4LCAxMjgsIDc3LCAKKyAgICA2OSwgNzcsIDc5LCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc3LCA2OSwgNzcsIAorICAgIDY2LCA2OSwgODIsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCAyMTAsIDc3LCA2OSwgNzcsIDQ1LCA4MSwgNzksIDgwLCA3MiwgCisgICAgMTI4LCA3NywgNjksIDc3LCAxMjgsIDc3LCA2OSwgMjA1LCA3NywgNjksIDc2LCA3OSwgNjgsIDczLCAxOTUsIDc3LCA2OSwgCisgICAgNzYsIDczLCA3NSwgMTI4LCA3NywgNjksIDczLCA5MCwgNzMsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDg0LCA3OSwgNzgsIAorICAgIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNjksIDcxLCA2NSwgNzYsIDczLCAKKyAgICAxMjgsIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgNjksIAorICAgIDc3LCA4NSwgMTI4LCA3NywgNjksIDY5LCA3NywgMTI4LCA3NywgNjksIDY5LCA2OSwgNjksIDEyOCwgNzcsIDY5LCA2OCwgCisgICAgNzMsIDg1LCA3NywgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDIwNSwgNzcsIDY5LCA2OCwgNzMsIDY3LCA3MywgNzgsIDY5LCAKKyAgICAxMjgsIDc3LCA2OSwgNjgsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA2NSwgODQsIDEyOCwgNzcsIDY5LCA2NSwgMjEyLCAKKyAgICA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTk2LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTI4LCA3NywgNjksIAorICAgIDY1LCA4MywgODUsIDgyLCAxOTcsIDc3LCA2OCwgODUsIDIwNiwgNzcsIDE5NiwgNzcsIDY3LCA3MiwgMjEzLCA3NywgNjcsIAorICAgIDcyLCA2NSwgMjA2LCA3NywgMTk1LCA3NywgNjYsIDg1LCA3OSwgODEsIDEyOCwgNzcsIDY2LCA4NSwgNzksIDEyOCwgNzcsIAorICAgIDY2LCA4NSwgNjksIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDEyOCwgCisgICAgNzcsIDY2LCA3OSwgNzksIDEyOCwgNzcsIDY2LCA3OSwgMTI4LCA3NywgNjYsIDczLCA4NCwgMTI4LCA3NywgNjYsIDczLCAKKyAgICAyMTIsIDc3LCA2NiwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNjYsIDczLCAxMjgsIDc3LCA2NiwgNjksIAorICAgIDg1LCA4OCwgMTI4LCA3NywgNjYsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc3LCA2NiwgNjksIDg1LCA3NywgMTI4LCA3NywgCisgICAgNjYsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNjksIDY5LCA3NSwgNjksIDY5LCAKKyAgICA4NCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgMTI4LCA3NywgNjYsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDgxLCAxMjgsIDc3LCAKKyAgICA2NiwgNjUsIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY2LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2NSwgNjUsIAorICAgIDc1LCA2OSwgODQsIDEyOCwgNzcsIDY2LCA2NSwgNjUsIDEyOCwgNzcsIDY2LCA2NSwgMTkzLCA3NywgNjYsIDE5MywgNzcsIAorICAgIDY2LCA1MiwgMTI4LCA3NywgNjYsIDUxLCAxMjgsIDc3LCA2NiwgNTAsIDEyOCwgNzcsIDY2LCAxMjgsIDc3LCAxOTQsIDc3LCAKKyAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgODksIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDg4LCAxMjgsIDc3LCA2NSwgODUsIDEyOCwgNzcsIDY1LCA4NCwgODQsIDc5LCA2NywgNzUsIDEyOCwgCisgICAgNzcsIDY1LCA4NCwgODIsIDczLCA4OCwgMTI4LCA3NywgNjUsIDg0LCA2OSwgODIsIDczLCA2NSwgNzYsIDgzLCAxMjgsIDc3LCAKKyAgICA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgMjEzLCA3NywgNjUsIDgzLCA4MywgNzMsIDc4LCA3MSwgMTI4LCA3NywgNjUsIAorICAgIDgzLCA4MywgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjUsIDgzLCA3OSwgODIsIDE5MywgNzcsIDY1LCA4MywgNzUsIDEyOCwgCisgICAgNzcsIDY1LCA4MywgNzIsIDcwLCA2NSwgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA1MCwgMTI4LCA3NywgNjUsIDgzLCAKKyAgICA2NywgODUsIDc2LCA3MywgNzgsIDE5NywgNzcsIDY1LCA4MiwgODksIDEyOCwgNzcsIDY1LCA4MiwgODUsIDc1LCA4NSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA4NCwgODksIDgyLCA3MywgMTkzLCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgMTk5LCAKKyAgICA3NywgNjUsIDgyLCA4MiwgNzMsIDY1LCA3MSwgMTk3LCA3NywgNjUsIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc3LCA2NSwgODIsIAorICAgIDc1LCA0NSwgNTIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MSwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUwLCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNDksIDEyOCwgNzcsIDY1LCA4MiwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIAorICAgIDcyLCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODMsIDczLCA4NCwgNjksIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgNjUsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgCisgICAgNjUsIDgyLCAxMjgsIDc3LCA2NSwgODEsIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgxLCAxMjgsIDc3LCA2NSwgODAsIDc2LCAKKyAgICAxOTcsIDc3LCA2NSwgODAsIDczLCA4MSwgMTI4LCA3NywgNjUsIDIwOCwgNzcsIDY1LCA3OSwgMTI4LCA3NywgNjUsIDc4LCAKKyAgICA4MywgODksIDc5LCA3OCwgMTI4LCA3NywgNjUsIDc4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA3NywgNjUsIDc4LCA3OCwgNjUsIAorICAgIDIxOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIDY1LCA3NywgMTI4LCA3NywgCisgICAgNjUsIDc4LCA2OCwgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDE5NSwgNzcsIDY1LCAKKyAgICA3OCwgNjcsIDcyLCAyMTMsIDc3LCA2NSwgNzgsIDY1LCA2NywgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIAorICAgIDgzLCAxOTcsIDc3LCA2NSwgNzYsIDY5LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCA2NSwgCisgICAgNzYsIDE5NywgNzcsIDY1LCA3NiwgNjUsIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCAKKyAgICA3NywgNjUsIDc1LCA4MywgODUsIDgyLCAxOTMsIDc3LCA2NSwgNzMsIDkwLCA2OSwgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIAorICAgIDc3LCA3OSwgNzUsIDEyOCwgNzcsIDY1LCA3MywgODQsIDY1LCA3MywgNzUsIDcyLCA4NSwgMTI4LCA3NywgNjUsIDczLCA4MiwgCisgICAgODUsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAKKyAgICAxMjgsIDc3LCA2NSwgNzMsIDc2LCA2NiwgNzksIDIxNiwgNzcsIDY1LCA3MywgNzUsIDg1LCA4MiwgNzksIDEyOCwgNzcsIAorICAgIDY1LCA3MywgNjgsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgCisgICAgNzcsIDY1LCA3MiwgNzIsIDY1LCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCAKKyAgICA3MiwgNjUsIDgwLCA2NSwgNzUsIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIAorICAgIDc3LCA2NSwgNzIsIDEyOCwgNzcsIDY1LCA3MSwgNzgsIDczLCA3MCwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDY5LCA4MywgCisgICAgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgNzQsIDY5LCA4NCwgMTI4LCAKKyAgICA3NywgNjUsIDY5LCA3NywgODYsIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDc1LCA4MCwgNjksIDc4LCAxMjgsIAorICAgIDc3LCA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA3MSwgNjYsIDczLCAKKyAgICA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCA3NywgNjUsIDY5LCA3NywgMTI4LCA3NywgNjUsIAorICAgIDY5LCA3NiwgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc1LCA2OSwgODUsIDgwLCAxMjgsIDc3LCA2NSwgNjgsIDg5LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDY4LCA4NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgNjUsIDIwMCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCAxOTMsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIAorICAgIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCisgICAgNzksIDc4LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDY1LCAKKyAgICA2NywgODIsIDc5LCAyMDYsIDc3LCA2NSwgNjcsIDcyLCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2NSwgNjUsIDg5LCA4OSwgNjUsIAorICAgIDY1LCAxMjgsIDc3LCA2NSwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCA1MCwgMTI4LCA3NywgNDgsIAorICAgIDUyLCA1MiwgMTI4LCA3NywgNDgsIDUyLCA1MSwgMTI4LCA3NywgNDgsIDUyLCA1MCwgMTI4LCA3NywgNDgsIDUyLCA0OSwgCisgICAgMTI4LCA3NywgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDEyOCwgNzcsIDQ4LCA1MSwgNTcsIDEyOCwgCisgICAgNzcsIDQ4LCA1MSwgNTYsIDEyOCwgNzcsIDQ4LCA1MSwgNTUsIDEyOCwgNzcsIDQ4LCA1MSwgNTQsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MSwgNTMsIDEyOCwgNzcsIDQ4LCA1MSwgNTIsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY2LCAxMjgsIDc3LCA0OCwgNTEsIAorICAgIDUxLCA2NSwgMTI4LCA3NywgNDgsIDUxLCA1MSwgMTI4LCA3NywgNDgsIDUxLCA1MCwgMTI4LCA3NywgNDgsIDUxLCA0OSwgCisgICAgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDEyOCwgNzcsIDQ4LCA1MSwgNDgsIDEyOCwgNzcsIDQ4LCA1MCwgNTcsIDEyOCwgCisgICAgNzcsIDQ4LCA1MCwgNTYsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAxMjgsIDc3LCA0OCwgNTAsIDU1LCAxMjgsIDc3LCAKKyAgICA0OCwgNTAsIDU0LCAxMjgsIDc3LCA0OCwgNTAsIDUzLCAxMjgsIDc3LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3NywgNDgsIAorICAgIDUwLCA1MiwgMTI4LCA3NywgNDgsIDUwLCA1MSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgCisgICAgNTAsIDEyOCwgNzcsIDQ4LCA1MCwgNDksIDEyOCwgNzcsIDQ4LCA1MCwgNDgsIDEyOCwgNzcsIDQ4LCA0OSwgNTcsIDEyOCwgCisgICAgNzcsIDQ4LCA0OSwgNTYsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU1LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDU0LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgMTI4LCA3NywgNDgsIDQ5LCA1MywgNjUsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTMsIDEyOCwgNzcsIDQ4LCA0OSwgNTIsIDEyOCwgNzcsIDQ4LCA0OSwgNTEsIDEyOCwgNzcsIDQ4LCA0OSwgCisgICAgNTAsIDcyLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzAsIDEyOCwgNzcsIDQ4LCAKKyAgICA0OSwgNTAsIDY5LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2OCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjcsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTAsIDY2LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA0OSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDEyOCwgNzcsIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzcsIDQ4LCA0OCwgNTYsIDEyOCwgNzcsIDQ4LCA0OCwgNTUsIDEyOCwgNzcsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzcsIDQ4LCA0OCwgNTMsIDEyOCwgNzcsIDQ4LCA0OCwgNTIsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIAorICAgIDc3LCA0OCwgNDgsIDUxLCAxMjgsIDc3LCA0OCwgNDgsIDUwLCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NiwgMTI4LCA3NywgCisgICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDEyOCwgNzYsIDIxOCwgNzYsIDg5LCA4OSwgMTI4LCA3NiwgCisgICAgODksIDg4LCAxMjgsIDc2LCA4OSwgODQsIDEyOCwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzYsIDg5LCA4MiwgMTI4LCA3NiwgCisgICAgODksIDgwLCAxMjgsIDc2LCA4OSwgNjgsIDczLCA2NSwgMjA2LCA3NiwgODksIDY3LCA3MywgNjUsIDIwNiwgNzYsIDg4LCAKKyAgICAxMjgsIDc2LCA4NywgNzksIDc5LCAxMjgsIDc2LCA4NywgNzksIDEyOCwgNzYsIDg3LCA3MywgNzMsIDEyOCwgNzYsIDg3LCAKKyAgICA3MywgMTI4LCA3NiwgODcsIDY5LCAxMjgsIDc2LCA4NywgNjUsIDY1LCAxMjgsIDc2LCA4NywgNjUsIDEyOCwgNzYsIDg1LCAKKyAgICA4OCwgMTI4LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA4NSwgODQsIDEyOCwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzYsIDg1LCAKKyAgICA4MCwgMTI4LCA3NiwgODUsIDc5LCA4OCwgMTI4LCA3NiwgODUsIDc5LCA4NCwgMTI4LCA3NiwgODUsIDc5LCA4MCwgMTI4LCAKKyAgICA3NiwgODUsIDc5LCAxMjgsIDc2LCA4NSwgNzgsIDcxLCA4MywgNzMsIDEyOCwgNzYsIDg1LCA3OCwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA4NSwgMjA1LCA3NiwgODUsIDc2LCAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgNzIsIDg1LCA4MiwgCisgICAgMTI4LCA3NiwgODUsIDcyLCAxMjgsIDc2LCA4NSwgNzEsIDcxLCA2NSwgNzEsIDY5LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCAKKyAgICA3NiwgMTI4LCA3NiwgODUsIDcxLCA2NSwgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCAKKyAgICA3NiwgODUsIDUxLCAxMjgsIDc2LCA4NSwgNTAsIDEyOCwgNzYsIDg1LCAxNzgsIDc2LCA4MiwgNzksIDEyOCwgNzYsIDgyLCAKKyAgICA3NywgMTI4LCA3NiwgODIsIDczLCAxMjgsIDc2LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIAorICAgIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgCisgICAgNjksIDE5NiwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NiwgMTk3LCA3NiwgCisgICAgNzksIDg1LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA4NSwgNjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDc2LCAKKyAgICA3OSwgODUsIDY4LCA3NiwgMjE3LCA3NiwgNzksIDg0LCA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIAorICAgIDgyLCA4MiwgODksIDEyOCwgNzYsIDc5LCA4MiwgODIsIDY1LCA3MywgNzgsIDY5LCAxMjgsIDc2LCA3OSwgODEsIDEyOCwgCisgICAgNzYsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCA4NCwgMTI4LCA3NiwgNzksIDc5LCA4MCwgNjksIDE5NiwgNzYsIDc5LCAKKyAgICA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgMjA4LCA3NiwgNzksIDc5LCA3OCwgMTI4LCA3NiwgNzksIDc5LCAyMDMsIDc2LCAKKyAgICA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIAorICAgIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAKKyAgICAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgMjA0LCA3NiwgNzksIAorICAgIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCA3OCwgNzEsIDQ1LCAKKyAgICA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCisgICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIDc5LCA3NywgNzcsIDY1LCA2OSwgMTI4LCA3NiwgNzksIDc3LCAKKyAgICAxMjgsIDc2LCA3OSwgMjA1LCA3NiwgNzksIDc2LCA3NiwgNzMsIDgwLCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3NiwgNzYsIAorICAgIDEyOCwgNzYsIDc5LCA3MSwgMjEwLCA3NiwgNzksIDcxLCA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgCisgICAgNzEsIDgyLCA2NSwgMjA1LCA3NiwgNzksIDcxLCAxMjgsIDc2LCA3OSwgNjgsIDY5LCA4MywgODQsIDc5LCA3OCwgNjksIAorICAgIDEyOCwgNzYsIDc5LCA2NywgNzksIDc3LCA3OSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzUsIDczLCA3OCwgCisgICAgNzEsIDQ1LCA4MywgNzIsIDczLCA3MCwgMjEyLCA3NiwgNzksIDY3LCAyMDMsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCAKKyAgICA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCAKKyAgICA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIAorICAgIDc2LCA3NiwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDczLCA3MywgMTI4LCA3NiwgNzYsIDc2LCA3MywgMTI4LCA3NiwgNzYsIDc2LCA2OSwgNjksIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA3MywgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA2NSwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgCisgICAgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgCisgICAgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCAKKyAgICA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCAKKyAgICA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIAorICAgIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgCisgICAgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIAorICAgIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgCisgICAgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIAorICAgIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCA3NywgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgCisgICAgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgCisgICAgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAKKyAgICAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCAKKyAgICA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIAorICAgIDgyLCA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAKKyAgICAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIAorICAgIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgCisgICAgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgMTI4LCA3NiwgNjksIDIxMywgNzYsIDY5LCA4NCwgODQsIDY5LCAKKyAgICA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIAorICAgIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgCisgICAgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCAKKyAgICA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgCisgICAgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIAorICAgIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgCisgICAgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAKKyAgICAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCAKKyAgICA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIAorICAgIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgCisgICAgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIAorICAgIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgCisgICAgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCAKKyAgICA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgCisgICAgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCAKKyAgICA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIDY5LCA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIAorICAgIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgCisgICAgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCA3NiwgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCAKKyAgICA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgMTk2LCA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIAorICAgIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIAorICAgIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgODcsIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIAorICAgIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIAorICAgIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgODIsIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIAorICAgIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgNzYsIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgCisgICAgNzYsIDY1LCA3OCwgNzEsIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAKKyAgICA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIAorICAgIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIAorICAgIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgCisgICAgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCAKKyAgICA2NSwgNzgsIDg5LCA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgCisgICAgMTI4LCA3NiwgNjUsIDcyLCAxMjgsIDc2LCA2NSwgNzEsIDg1LCA4MywgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgCisgICAgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMjEwLCA3NiwgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCAKKyAgICA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIDEyOCwgNzYsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY4LCAyMTcsIDc2LCAKKyAgICA2NSwgNjcsIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDc2LCA2NSwgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCAKKyAgICA3OCwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgNjUsIDc3LCA4NSwgMTI4LCA3NiwgNjUsIAorICAgIDY1LCA3NywgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgCisgICAgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCAKKyAgICA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIAorICAgIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgCisgICAgODQsIDcyLCA3OSwgMjExLCA3NSwgODksIDY1LCA2NSwgMTI4LCA3NSwgODksIDY1LCAxMjgsIDc1LCA4OCwgODcsIDczLCAKKyAgICAxMjgsIDc1LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDg3LCA2OSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgNzUsIDg4LCA4NywgNjUsIDEyOCwgNzUsIDg4LCA4NSwgMTI4LCA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgNzMsIAorICAgIDEyOCwgNzUsIDg4LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA2OSwgMTI4LCA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIAorICAgIDY1LCAxMjgsIDc1LCA4NywgODUsIDUxLCA0OSwgNTYsIDEyOCwgNzUsIDg3LCA3OSwgNzksIDEyOCwgNzUsIDg3LCA3OSwgCisgICAgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAxMjgsIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgCisgICAgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgCisgICAgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCAKKyAgICA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIAorICAgIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIAorICAgIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgCisgICAgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgCisgICAgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgNzYsIDEyOCwgNzUsIDg1LCAyMDQsIDc1LCAKKyAgICA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgMTI4LCA3NSwgODUsIDE4MCwgNzUsIDg1LCAKKyAgICA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIDg1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCAKKyAgICA4NSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgNzksIDEyOCwgNzUsIDgzLCA4MywgNzksIDEyOCwgNzUsIDgzLCA4MywgNzMsIAorICAgIDczLCAxMjgsIDc1LCA4MywgODMsIDczLCAxMjgsIDc1LCA4MywgODMsIDY5LCA2OSwgMTI4LCA3NSwgODMsIDgzLCA2OSwgCisgICAgMTI4LCA3NSwgODMsIDgzLCA2NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDczLCAxMjgsIDc1LCA4MywgODMsIDY1LCAKKyAgICA2NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDgzLCAxMjgsIDc1LCA4MywgNzMsIDEyOCwgNzUsIDgyLCAKKyAgICA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA4OSwgODAsIDc5LCA4MiwgCisgICAgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIAorICAgIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCisgICAgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgCisgICAgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAKKyAgICAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCAKKyAgICA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgODUsIDg1LCAxMjgsIDc1LCA3OSwgODQsIAorICAgIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCA4MiwgNzksIDc4LCA3MywgODMsIDEyOCwgCisgICAgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIDE5NSwgNzUsIDc5LCA4MSwgNzgsIDY4LCAKKyAgICA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODAsIDEyOCwgNzUsIDc5LCA3OSwgODAsIAorICAgIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCA3OSwgNzksIDEyOCwgNzUsIDc5LCA3OCwgCisgICAgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCAxOTMsIDc1LCA3OSwgNzcsIAorICAgIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgMTkzLCA3NSwgCisgICAgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAxMjgsIDc1LCA3OSwgMjAzLCA3NSwgCisgICAgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgNzEsIDcyLCA3OSwgNzcsIDEyOCwgCisgICAgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCA3OSwgNjUsIDEyOCwgNzUsIDc4LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIDc4LCA3MywgNzAsIDY5LCAxMjgsIAorICAgIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIDczLCA4NCwgNzksIDc4LCAxMjgsIAorICAgIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgCisgICAgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgNzUsIDczLCAxMjgsIDc1LCA3NSwgCisgICAgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgNzUsIDEyOCwgNzUsIDc0LCA2OSwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NSwgNzMsIDg5LCAKKyAgICA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDc1LCA3MywgCisgICAgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAKKyAgICAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCAKKyAgICAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCA4MywgNzMsIDc4LCAxOTksIDc1LCAKKyAgICA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIDc3LCA1MywgMTI4LCA3NSwgNzMsIAorICAgIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgNjUsIDc2LCAxMjgsIDc1LCA3MywgCisgICAgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIAorICAgIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCAKKyAgICAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgNzMsIDgwLCAxMjgsIDc1LCAKKyAgICA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCA2OCwgNjksIDgyLCA3MSwgNjUsIAorICAgIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIDczLCA3MywgMTI4LCA3NSwgCisgICAgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIDc1LCA3MywgNjksIDY5LCAKKyAgICA3NywgMTI4LCA3NSwgNzMsIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIDc1LCA3MywgNjcsIDc1LCAKKyAgICAxMjgsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgODUsIDY5LCA3OCwgNDUsIAorICAgIDc2LCA4NSwgMTk3LCA3NSwgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAxMjgsIDc1LCA3MiwgCisgICAgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCA3MiwgNzksIDc4LCAKKyAgICAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIDIwNywgNzUsIDcyLCAKKyAgICA3NywgMjEzLCA3NSwgNzIsIDczLCA4NCwgMTI4LCA3NSwgNzIsIDczLCA3OCwgODksIDY1LCAxMjgsIDc1LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgNzUsIDIwMCwgNzUsIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIDcyLCA2NSwgCisgICAgMTI4LCA3NSwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCA2OSwgNjksIDEyOCwgCisgICAgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIDc1LCA3MiwgNjUsIDgyLCAKKyAgICAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgNzIsIDY1LCA3OCwgNjgsIAorICAgIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCA3MiwgNjUsIDc1LCA2NSwgCisgICAgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIDEyOCwgNzUsIDcyLCAKKyAgICA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIDY1LCA4MCwgMTI4LCAKKyAgICA3NSwgNjksIDg5LCA2NywgNjUsIDIwOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDc1LCA2OSwgODgsIAorICAgIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgCisgICAgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODAsIDg1LCA4MSwgMTI4LCAKKyAgICA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjksIDg1LCA4NCwgNzgsIAorICAgIDY4LCA2NSwgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODQsIDc3LCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODIsIDczLCAxMjgsIDc1LCA2OSwgODQsIDg0LCAyMDEsIDc1LCAKKyAgICA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNjksIDgyLCA2OSwgODQsIDEyOCwgNzUsIDY5LCA3OSwgODcsIDEyOCwgNzUsIAorICAgIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDE5MywgCisgICAgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgODQsIDEyOCwgNzUsIDY5LCA3OCwgMTI4LCAKKyAgICA3NSwgNjksIDIwNiwgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCA4MCwgODUsIDIwNCwgNzUsIAorICAgIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIDY5LCA3NywgODAsIDcyLCA4MiwgCisgICAgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc2LCA4NiwgNzMsIAorICAgIDIwNiwgNzUsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCA2OSwgNzIsIDEyOCwgNzUsIAorICAgIDY5LCA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIDY5LCA2OSwgODAsIDczLCA3OCwgCisgICAgMTk5LCA3NSwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgNzUsIDY2LCAxMjgsIDc1LCA2NSwgCisgICAgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg5LCA2NSwgMjAwLCAKKyAgICA3NSwgNjUsIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIDg5LCA3NSwgNjUsIDEyOCwgNzUsIAorICAgIDY1LCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NSwgMTI4LCA3NSwgNjUsIDg0LCA3OSwgCisgICAgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDY1LCA3NSwgMTkzLCAKKyAgICA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIDY1LCA4NiwgMTkzLCA3NSwgNjUsIAorICAgIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCA3OCwgMTkzLCA3NSwgNjUsIDgzLCAKKyAgICA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIDIwNiwgNzUsIDY1LCA4MywgODIsIAorICAgIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgNzYsIDEyOCwgNzUsIDY1LCA4MywgCisgICAgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCA2NSwgODIsIDgzLCA3MiwgNjUsIDc4LCAKKyAgICA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIDgyLCAyMDcsIDc1LCA2NSwgODIsIAorICAgIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODIsIDY1LCA3OCwgMTI4LCA3NSwgCisgICAgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAorICAgIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDg5LCAKKyAgICA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgCisgICAgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA2NSwgODAsIDgwLCAKKyAgICAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDY1LCA3NiwgMTI4LCAKKyAgICA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIDc1LCA2NSwgNzgsIDcxLCAxMjgsIAorICAgIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc3LCA1MiwgMTI4LCA3NSwgCisgICAgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzUsIDY1LCAKKyAgICA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCA2NSwgNzMsIDg0LCA3MiwgMjAxLCAKKyAgICA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIDIwMSwgNzUsIDY1LCA3MCwgNjUsIAorICAgIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIDEyOCwgNzUsIDY1LCA2OCwgMTgxLCAKKyAgICA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIDY4LCAxNzksIDc1LCA2NSwgNjgsIAorICAgIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIDY2LCAxMjgsIDc1LCA2NSwgNjUsIAorICAgIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIAorICAgIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCA3NSwgNDgsIDQ4LCA1NSwgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIDQ4LCA1MiwgMTI4LCA3NSwgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgMTI4LCA3NCwgODcsIDY1LCAxMjgsIDc0LCA4NSwgODUsIDEyOCwgCisgICAgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgzLCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgMTI4LCA3NCwgODUsIDc5LCA4MCwgCisgICAgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgODUsIDc2LCA4OSwgMTI4LCA3NCwgCisgICAgODUsIDY5LCA4NSwgNzMsIDEyOCwgNzQsIDg1LCA2OCwgODUsIDc2LCAxMjgsIDc0LCA4NSwgNjgsIDcxLCA2OSwgMTI4LCAKKyAgICA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIDc0LCA3OSwgODksIDc5LCA4NSwgCisgICAgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgODYsIDY5LCAxMjgsIDc0LCA3OSwgMjEyLCA3NCwgNzksIDc4LCA3MSwgCisgICAgMTI4LCA3NCwgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgNzksIDczLCA3OCwgNjksIDY4LCAKKyAgICAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCA4OSwgODgsIDEyOCwgNzQsIDc0LCAKKyAgICA4OSwgODQsIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCA3NCwgNzQsIDg1LCA4OCwgMTI4LCAKKyAgICA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDEyOCwgNzQsIAorICAgIDc0LCA4NSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgCisgICAgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAxMjgsIDc0LCA3NCwgNzksIDg0LCAKKyAgICAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCA3MywgODgsIDEyOCwgNzQsIDc0LCAKKyAgICA3MywgODQsIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc0LCA3NCwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIDEyOCwgNzQsIDc0LCA3MywgCisgICAgMTI4LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgNjUsIDEyOCwgNzQsIDczLCA3NiwgCisgICAgMTI4LCA3NCwgNzMsIDczLCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCAKKyAgICA3NCwgNzMsIDY1LCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIDEyOCwgNzQsIDcyLCA2NSwgNzgsIAorICAgIDEyOCwgNzQsIDcyLCA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIDcyLCA2NSwgMTI4LCA3NCwgNjksIAorICAgIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA4MiwgNjUsIDIwNiwgCisgICAgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgCisgICAgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCA3NCwgNjksIDY1LCA3OCwgODMsIAorICAgIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKKyAgICAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDY5LCA4MywgMTk3LCAKKyAgICA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIDEyOCwgNzQsIDY1LCA3NiwgNzYsIAorICAgIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgNjUsIDczLCAxMjgsIDc0LCA2NSwgCisgICAgNzIsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCAKKyAgICA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIAorICAgIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgCisgICAgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAxOTMsIDczLCA4OSwgNjksIDc1LCAKKyAgICAxMjgsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIDEyOCwgNzMsIDg1LCAxMjgsIDczLCAKKyAgICA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDg0LCA2OSwgNzcsIDEyOCwgNzMsIAorICAgIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgODMsIDc5LCAyMDYsIDczLCA4MywgCisgICAgNzksIDc2LCA2NSwgODQsIDY5LCAxMjgsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCAKKyAgICA2NSwgNzUsIDczLCAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIAorICAgIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgCisgICAgNDUsIDY3LCA3OSwgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIAorICAgIDE5MywgNzMsIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgCisgICAgODMsIDczLCA2NiwgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDY5LCAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4NCwgODIsIDc5LCA2OCwgODUsIAorICAgIDY3LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgCisgICAgNjUsIDY2LCA3MywgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCAKKyAgICA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgCisgICAgNjcsIDg0LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCAKKyAgICA3OCwgODQsIDY5LCA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgCisgICAgNzksIDY3LCA3NSwgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCAKKyAgICA4NCwgNjksIDgyLCA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIAorICAgIDg0LCA2OSwgODIsIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgCisgICAgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIAorICAgIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgCisgICAgNzEsIDgyLCA2NSwgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCAKKyAgICA2OSwgNzgsIDg0LCA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIAorICAgIDczLCA3OSwgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgCisgICAgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCAKKyAgICA2OSwgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIAorICAgIDIxMCwgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIAorICAgIDc4LCA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgCisgICAgNjUsIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCAKKyAgICA4NSwgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIAorICAgIDczLCA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgCisgICAgNzMsIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCAKKyAgICA3MywgNjcsIDY1LCA4NCwgNzksIDIxMCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNzMsIDY1LCAyMDYsIAorICAgIDczLCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgCisgICAgNzgsIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCAKKyAgICA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgCisgICAgMTk3LCA3MywgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIAorICAgIDE5OSwgNzMsIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NiwgNzksIDIxNiwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIAorICAgIDc4LCA0NSwgNjUsIDc2LCA2NSwgNzAsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgCisgICAgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIAorICAgIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDc4LCAxMjgsIDczLCA3NywgCisgICAgNzMsIDgzLCA2OSwgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCAKKyAgICA3NywgNzMsIDIwNiwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIAorICAgIDg0LCA3MiwgNzksIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgCisgICAgNjgsIDczLCA2NSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzMsIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgCisgICAgNzcsIDc3LCA4NSwgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIAorICAgIDIxMywgNzMsIDc2LCA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIAorICAgIDc0LCAxMjgsIDczLCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIAorICAgIDczLCA3MSwgNzEsIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgCisgICAgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAorICAgIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCAKKyAgICA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDcxLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCAKKyAgICA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgNjcsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAKKyAgICAxMjgsIDczLCA2OCwgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTYsIDY4LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgNjUsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTUsIDU0LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNTEsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTQsIDY5LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIAorICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTQsIDUzLCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTMsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTQsIDUwLCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgNTYsIAorICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTMsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgNzAsIAorICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTMsIDUxLCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNjgsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTIsIDY5LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTYsIAorICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgCisgICAgMTI4LCA3MywgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCAKKyAgICA3MywgNjcsIDcyLCA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgCisgICAgODksIDgyLCAxMjgsIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCAKKyAgICA3MywgNDgsIDQ5LCA1MywgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCA0OSwgCisgICAgNDgsIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNDgsIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgMTI4LCAKKyAgICA3MywgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCA4OSwgCisgICAgODUsIDEyOCwgNzMsIDQ1LCA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCAKKyAgICAxMjgsIDczLCA0NSwgODksIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDY1LCAxMjgsIDczLCA0NSwgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIAorICAgIDczLCA0NSwgNjYsIDY5LCA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIDQ1LCA2NSwgCisgICAgMTI4LCA3MiwgOTAsIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgODAsIDEyOCwgCisgICAgNzIsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgODQsIDEyOCwgCisgICAgNzIsIDkwLCA3MSwgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCA4OSwgODAsIDc5LCAKKyAgICA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3MiwgODksIDgwLCAKKyAgICA3MiwgNjksIDc4LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgODgsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4MCwgMTI4LCA3MiwgCisgICAgODgsIDg1LCA3OSwgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDc5LCAKKyAgICA4MCwgMTI4LCA3MiwgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzMsIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODQsIDEyOCwgNzIsIAorICAgIDg4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA2OSwgCisgICAgODgsIDEyOCwgNzIsIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCA4OCwgMTI4LCA3MiwgCisgICAgODgsIDY1LCA4NCwgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgCisgICAgNzIsIDg3LCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzIsIDg1LCAKKyAgICA4MiwgNjUsIDc4LCAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIAorICAgIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgCisgICAgNzIsIDg1LCA3NywgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCAKKyAgICA3MiwgODUsIDY2LCA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIAorICAgIDY1LCA2OCwgNjgsIDc5LCAxMjgsIDcyLCA4NCwgODMsIDEyOCwgNzIsIDg0LCA3NCwgMTI4LCA3MiwgODIsIDg5LCA4NiwgCisgICAgNzgsIDczLCAxOTMsIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgCisgICAgODUsIDgzLCAxOTcsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCAKKyAgICA3NiwgNjUsIDgzLCAyMTEsIDcyLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgNzIsIDc5LCA4NCwgNjksIAorICAgIDc2LCAxMjgsIDcyLCA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODMsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA3MiwgCisgICAgNzksIDgyLCA4MywgNjksIDEyOCwgNzIsIDc5LCA4MiwgODMsIDE5NywgNzIsIDc5LCA4MiwgNzgsIDgzLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA3NiwgMjE3LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCisgICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKKyAgICA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAorICAgIDQ4LCA1NCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKKyAgICA1NCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCisgICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIAorICAgIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCAKKyAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgCisgICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCAKKyAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIAorICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKKyAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCisgICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAorICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKKyAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCisgICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKKyAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAorICAgIDQ4LCA1MSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKKyAgICA1MSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgCisgICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAorICAgIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKKyAgICA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgCisgICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCAKKyAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIAorICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKKyAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCisgICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAorICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKKyAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCisgICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKKyAgICA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAorICAgIDQ4LCA0OSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKKyAgICA0OSwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgCisgICAgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIAorICAgIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCAKKyAgICA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgCisgICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCAKKyAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIAorICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA3MywgMTI4LCA3MiwgNzksIDgyLCAKKyAgICAxOTMsIDcyLCA3OSwgNzksIDgyLCA4NSwgMTI4LCA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCAKKyAgICA3MiwgNzksIDc5LCA3NSwgNjksIDE5NiwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgNzgsIAorICAgIDY5LCAyMTcsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgCisgICAgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCAKKyAgICA3MiwgNzksIDc2LCA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIAorICAgIDc5LCA3MywgMTI4LCA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgCisgICAgNzksIDg4LCAxMjgsIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAKKyAgICAxMjgsIDcyLCA3OCwgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIAorICAgIDc4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgCisgICAgODgsIDEyOCwgNzIsIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgCisgICAgNzgsIDY1LCA4NCwgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAKKyAgICAxMjgsIDcyLCA3NywgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCAKKyAgICA3MiwgNzcsIDg5LCAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgCisgICAgODgsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgCisgICAgNzIsIDc3LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCAKKyAgICA3OSwgMTI4LCA3MiwgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIAorICAgIDcyLCA3NywgNzMsIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgCisgICAgMTI4LCA3MiwgNzcsIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCA3NiwgCisgICAgODksIDg0LCAxMjgsIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCAKKyAgICA4MCwgMTI4LCA3MiwgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCAKKyAgICA3NiwgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgCisgICAgODUsIDEyOCwgNzIsIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCA3MiwgCisgICAgNzYsIDczLCA4OCwgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICA2OSwgODgsIDEyOCwgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgNzMsIAorICAgIDEyOCwgNzIsIDc2LCA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgNzYsIAorICAgIDY1LCA4OCwgMTI4LCA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIAorICAgIDcyLCA3NSwgMTI4LCA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCA3MiwgCisgICAgNzMsIDgyLCA3MywgODEsIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIDcxLCAKKyAgICA3MiwgNDUsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCA3MiwgCisgICAgNjksIDY5LCA3NiwgNjksIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgNjksIAorICAgIDg1LCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIAorICAgIDg1LCAyMDAsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDcyLCA3MywgMTk1LCA3MiwgNzMsIDY5LCAKKyAgICAxMjgsIDcyLCA3MywgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIAorICAgIDEyOCwgNzIsIDczLCA2NiwgNzMsIDgzLCA2NywgODUsIDgzLCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgCisgICAgODUsIDEyOCwgNzIsIDcyLCA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgCisgICAgNjUsIDY1LCAxMjgsIDcyLCA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCAKKyAgICA2NSwgNzEsIDgyLCA2NSwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIAorICAgIDg1LCAxMjgsIDcyLCA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgCisgICAgNjksIDgyLCA3NywgNzMsIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCAKKyAgICA4MiwgNjksIDEyOCwgNzIsIDY5LCA4MiwgNjYsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgCisgICAgODQsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NiwgNzMsIDY3LCAKKyAgICA3OSwgODAsIDg0LCA2OSwgODIsIDEyOCwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjksIAorICAgIDczLCA4MywgNjksIDczLCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgCisgICAgMjE3LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNjksIDY1LCAKKyAgICA4MiwgODQsIDgzLCAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3MiwgNjksIAorICAgIDY1LCA4MiwgODQsIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgODIsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgCisgICAgODYsIDczLCAyMDQsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCAKKyAgICA4MywgODQsIDc5LCA3OCwgMTk3LCA3MiwgNjksIDY1LCA2OCwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIAorICAgIDY4LCA3MywgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgCisgICAgNjUsIDgzLCAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCAKKyAgICA2NSwgODUsIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIAorICAgIDY1LCA4NCwgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjcsIDcyLCA3MywgNzgsIDE5OSwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgCisgICAgNzIsIDY1LCA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCAKKyAgICA3OSwgNzgsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIAorICAgIDEyOCwgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDcyLCA2NSwgODIsIDE5NiwgNzIsIDY1LCA4MCwgODAsIDIxNywgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCAKKyAgICA3MiwgNjUsIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIAorICAgIDIxMSwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA3MiwgCisgICAgNjUsIDc4LCA2OCwgNjYsIDY1LCA3MSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCAKKyAgICA2NSwgODQsIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIAorICAgIDY1LCA3NywgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgCisgICAgNzEsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCAKKyAgICA3NiwgNzAsIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIAorICAgIDY5LCA4MiwgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAKKyAgICAxMjgsIDcyLCA2NSwgNzMsIDgyLCA2NywgODUsIDg0LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA2NSwgNzEsIAorICAgIDc2LCA2NSwgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgCisgICAgNjUsIDcwLCA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjUsIDgyLCA4NSwgMTI4LCAKKyAgICA3MiwgNjUsIDY1LCA3NywgMTI4LCA3MiwgNjUsIDE5MywgNzIsIDY1LCA0NSwgNzIsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIAorICAgIDU2LCAxMjgsIDcyLCA0OCwgNDgsIDU1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3MiwgNDgsIDQ4LCA1MywgMTI4LCA3MiwgNDgsIDQ4LCA1MiwgMTI4LCA3MiwgNDgsIDQ4LCA1MSwgMTI4LCA3MiwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA3MiwgNDgsIDQ4LCA0OSwgMTI4LCA3MiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzEsIDg5LCAKKyAgICA4NSwgMTI4LCA3MSwgODksIDc5LCA3OCwgMTI4LCA3MSwgODksIDc5LCAxMjgsIDcxLCA4OSwgNzMsIDEyOCwgNzEsIDg5LCAKKyAgICA3MCwgMjEzLCA3MSwgODksIDY5LCA2OSwgMTI4LCA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCAKKyAgICA3MSwgODksIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCA3MSwgODcsIDg1LCAxMjgsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDg3LCAKKyAgICA2OSwgNjksIDEyOCwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgODcsIDY1LCAxMjgsIDcxLCAKKyAgICA4NiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIAorICAgIDgyLCA2NSwgNzcsIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAKKyAgICAxMjgsIDcxLCA4NSwgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3MywgODQsIDY1LCAKKyAgICA4MiwgMTI4LCA3MSwgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAKKyAgICAxMjgsIDcxLCA4NSwgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIAorICAgIDgyLCA2OCwgNjksIDY4LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgCisgICAgNjUsIDgyLCA2OCwgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgCisgICAgNzEsIDg0LCA2OSwgMjEwLCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgCisgICAgODIsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCAKKyAgICA3MiwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIAorICAgIDczLCA3NywgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgCisgICAgNjksIDY5LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCAKKyAgICA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgCisgICAgNjUsIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCAKKyAgICA4NiwgNjksIDg5LCA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgCisgICAgMTI4LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgCisgICAgODMsIDEyOCwgNzEsIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCAKKyAgICA2NSwgODAsIDY5LCA4MywgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIAorICAgIDcxLCA4MiwgNjUsIDY4LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgCisgICAgNjUsIDY3LCAxOTcsIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCAKKyAgICA3MSwgNzksIDgyLCA4NCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIAorICAgIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgCisgICAgNzEsIDc5LCA4MiwgNzEsIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgNzksIDE5NiwgNzEsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzEsIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCAKKyAgICA3MSwgNzksIDY2LCA3NiwgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIAorICAgIDc5LCA2NSwgMTI4LCA3MSwgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA3MSwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCAKKyAgICA3OSwgNjYsIDE5NywgNzEsIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgCisgICAgMjAwLCA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgCisgICAgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgCisgICAgNzEsIDczLCA4MywgNjUsIDc2LCAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDc2LCAKKyAgICAxMjgsIDcxLCA3MywgODIsIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCAKKyAgICA4MiwgMTc4LCA3MSwgNzMsIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIAorICAgIDEyOCwgNzEsIDczLCA3NywgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA3MSwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgCisgICAgNzMsIDY2LCA2NSwgMTI4LCA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgCisgICAgODcsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCAKKyAgICA3MiwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIAorICAgIDEyOCwgNzEsIDcyLCA3MywgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIAorICAgIDcyLCA2OSwgODUsIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgCisgICAgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCAKKyAgICA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIAorICAgIDcxLCA3MiwgNjksIDY5LCAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDcxLCA3MiwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgMTI4LCA3MSwgNzIsIAorICAgIDY1LCA3MywgNzgsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgNzEsIDcyLCA2NSwgCisgICAgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjksIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIAorICAgIDg3LCA2NSwgMTI4LCA3MSwgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgCisgICAgODgsIDEyOCwgNzEsIDcxLCA4NSwgODIsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCAKKyAgICA4NCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIAorICAgIDEyOCwgNzEsIDcxLCA3OSwgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIAorICAgIDcxLCA3MywgODQsIDEyOCwgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgCisgICAgNzEsIDczLCA2OSwgMTI4LCA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCAKKyAgICA4MCwgMTI4LCA3MSwgNzEsIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCAKKyAgICA3MSwgNjksIDg0LCAxOTMsIDcxLCA2OSwgODMsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgCisgICAgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCAKKyAgICA2OSwgODMsIDcyLCA1MCwgMTI4LCA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIAorICAgIDc3LCA2NSwgMjA2LCA3MSwgNjksIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgCisgICAgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIAorICAgIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAKKyAgICAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIAorICAgIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgCisgICAgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgMTI4LCA3MSwgNjksIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCAKKyAgICA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgODIsIDEyOCwgNzEsIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCAKKyAgICA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgNjcsIDY1LCAyMDYsIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIAorICAgIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgCisgICAgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCAKKyAgICA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCAKKyAgICA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIAorICAgIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgCisgICAgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCAKKyAgICA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIAorICAgIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgCisgICAgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAKKyAgICAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCAKKyAgICA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgNzcsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIAorICAgIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIAorICAgIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgCisgICAgNjUsIDY4LCAxMjgsIDcxLCA2NSwgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgCisgICAgNjUsIDcwLCA4NSwgMTI4LCA3MSwgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgCisgICAgNzEsIDQ4LCA1MywgNTAsIDEyOCwgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MiwgNTcsIDEyOCwgNzEsIDQ4LCA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIAorICAgIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIAorICAgIDcxLCA0OCwgNTIsIDUxLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgCisgICAgNDgsIDUyLCA0OSwgMTI4LCA3MSwgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCAKKyAgICA1NiwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIAorICAgIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIAorICAgIDcxLCA0OCwgNTEsIDUxLCAxMjgsIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAKKyAgICAxMjgsIDcxLCA0OCwgNTAsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCAKKyAgICA3MSwgNDgsIDUwLCA1MiwgMTI4LCA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIAorICAgIDUwLCA0OSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgCisgICAgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIAorICAgIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgCisgICAgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAKKyAgICAxMjgsIDcxLCA0OCwgNDgsIDU0LCAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDcxLCA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIAorICAgIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCAKKyAgICA3MCwgODcsIDY5LCA2OSwgMTI4LCA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIAorICAgIDEyOCwgNzAsIDg2LCA4MywgNTEsIDEyOCwgNzAsIDg2LCA4MywgNTAsIDEyOCwgNzAsIDg2LCA4MywgNDksIDEyOCwgNzAsIAorICAgIDg1LCA4OCwgMTI4LCA3MCwgODUsIDg0LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIAorICAgIDg1LCA4MiwgODgsIDEyOCwgNzAsIDg1LCA4MCwgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgCisgICAgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDcwLCAKKyAgICA4NSwgNzYsIDc2LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgODUsIDc2LCAyMDQsIDcwLCA4NSwgNzQsIDczLCAxMjgsIAorICAgIDcwLCA4NSwgNjksIDg0LCAxMjgsIDcwLCA4NSwgNjksIDIwNCwgNzAsIDg1LCA2OSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgCisgICAgODIsIDE5MywgNzAsIDgzLCA3MywgMTI4LCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDgyLCAKKyAgICA3OSwgODcsIDc4LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgODcsIDc4LCAxMjgsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIAorICAgIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgCisgICAgNzAsIDgyLCA3OSwgMjA1LCA3MCwgODIsIDc5LCA3MSwgMTI4LCA3MCwgODIsIDc5LCAxOTksIDcwLCA4MiwgNzMsIDg0LCAKKyAgICA4NSwgMTI4LCA3MCwgODIsIDczLCA2OSwgODMsIDEyOCwgNzAsIDgyLCA3MywgNjksIDE5NiwgNzAsIDgyLCA3MywgNjcsIAorICAgIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MCwgODIsIDY5LCA4NCwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA4MiwgCisgICAgNjksIDc4LCA2NywgMjAwLCA3MCwgODIsIDY5LCA2OSwgMTI4LCA3MCwgODIsIDY5LCAxOTcsIDcwLCA4MiwgNjUsIDc4LCAKKyAgICAxOTUsIDcwLCA4MiwgNjUsIDc3LCA2OSwgMTI4LCA3MCwgODIsIDY1LCA3MSwgODIsIDY1LCA3OCwgODQsIDEyOCwgNzAsIAorICAgIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDcwLCA3OSwgCisgICAgODgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCAKKyAgICAyMDYsIDcwLCA3OSwgODUsIDgyLCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzksIDg1LCA4MiwgNDUsIAorICAgIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA3MCwgCisgICAgNzksIDg1LCA4MiwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDc5LCA4NSwgMjEwLCA3MCwgNzksIDg1LCA3OCwgODQsIDY1LCAKKyAgICA3MywgNzgsIDEyOCwgNzAsIDc5LCA4MywgODQsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA4NywgNjUsIAorICAgIDgyLCA2OCwgMTI4LCA3MCwgNzksIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCA4MiwgODQsIDIxNywgNzAsIDc5LCA4MiwgCisgICAgODQsIDY5LCAxMjgsIDcwLCA3OSwgODIsIDc3LCAyMTEsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDg0LCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDcwLCA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgNzksIDgyLCA2NywgNjksIDgzLCAxMjgsIDcwLCA3OSwgODIsIAorICAgIDY3LCA2OSwgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MywgODQsIDc5LCA3OSwgNzYsIDEyOCwgCisgICAgNzAsIDc5LCA3OSwgODQsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDc4LCA3OSwgODQsIAorICAgIDE5NywgNzAsIDc5LCA3OSwgODQsIDY2LCA2NSwgNzYsIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCAxMjgsIDcwLCA3OSwgCisgICAgNzksIDY4LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCA3OCwgNzEsIDc3LCA2NSwgNzgsIDEyOCwgNzAsIDc5LCAKKyAgICA3NywgMTI4LCA3MCwgNzksIDc2LCA3NiwgODksIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDc5LCA4NywgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDgyLCAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgMTk2LCA3MCwgNzksIDcxLCAKKyAgICA3MSwgODksIDEyOCwgNzAsIDIwNywgNzAsIDc3LCAxMjgsIDcwLCA3NiwgODksIDEyOCwgNzAsIDc2LCA4NSwgODQsIDg0LCAKKyAgICA2OSwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDg1LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA4NSwgODMsIDcyLCA2OSwgCisgICAgMTk2LCA3MCwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcwLCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3MCwgNzYsIDc5LCAKKyAgICA4NSwgODIsIDczLCA4MywgNzIsIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDcwLCA3NiwgNzksIAorICAgIDgyLCA2NSwgMjA0LCA3MCwgNzYsIDc5LCA4MCwgODAsIDIxNywgNzAsIDc2LCA3OSwgNzksIDgyLCAxMjgsIDcwLCA3NiwgCisgICAgNzMsIDgwLCAxMjgsIDcwLCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDc2LCA2OSwgODgsIDg1LCA4MywgMTI4LCAKKyAgICA3MCwgNzYsIDY5LCA4OCwgNjksIDE5NiwgNzAsIDc2LCA2OSwgODUsIDgyLCA0NSwgNjgsIDY5LCA0NSwgNzYsIDczLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA4NCwgODQsIDY5LCA3OCwgNjksIDE5NiwgNzAsIDc2LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDcwLCA3NiwgNjUsIDg0LCAxMjgsIDcwLCA3NiwgNjUsIDIxMiwgNzAsIDc2LCA2NSwgNzEsIDgzLCAxMjgsIDcwLCAKKyAgICA3NiwgNjUsIDcxLCA0NSwgNTMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MiwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIAorICAgIDUxLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTAsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA0OSwgMTI4LCA3MCwgCisgICAgNzYsIDY1LCA3MSwgMTI4LCA3MCwgNzYsIDY1LCAxOTksIDcwLCA3NiwgNjUsIDEyOCwgNzAsIDc2LCAxMjgsIDcwLCA3MywgCisgICAgODgsIDY5LCA2OCwgNDUsIDcwLCA3OSwgODIsIDIwNSwgNzAsIDczLCA4OCwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDg0LCAKKyAgICA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3MywgODYsIAorICAgIDE5NywgNzAsIDczLCA4NCwgNjUsIDEyOCwgNzAsIDczLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA4NCwgNjksIDE5NiwgNzAsIAorICAgIDczLCA4MywgODQsIDEyOCwgNzAsIDczLCA4MywgNzIsIDczLCA3OCwgMTk5LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgCisgICAgNzUsIDEyOCwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDIwMywgNzAsIDczLCA4MywgNzIsIDY5LCA4OSwgNjksIAorICAgIDEyOCwgNzAsIDczLCA4MywgNzIsIDEyOCwgNzAsIDczLCA4MywgMjAwLCA3MCwgNzMsIDgyLCA4MywgMjEyLCA3MCwgNzMsIAorICAgIDgyLCA3MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgNzUsIDgzLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgCisgICAgNzksIDgyLCAyMDMsIDcwLCA3MywgODIsIDY5LCAxMjgsIDcwLCA3MywgODIsIDE5NywgNzAsIDczLCA4MCwgMTI4LCA3MCwgCisgICAgNzMsIDc4LCA3MywgODQsIDE5NywgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNzgsIDY1LCA3MywgNzYsIDgzLCAxMjgsIDcwLCAKKyAgICA3MywgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIDcwLCA3MywgNzgsIDY1LCA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIAorICAgIDczLCA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDE5NiwgNzAsIDczLCA3NiwgNzYsIDEyOCwgCisgICAgNzAsIDczLCA3NiwgMjA0LCA3MCwgNzMsIDc2LCAxOTcsIDcwLCA3MywgNzMsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKKyAgICA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAorICAgIDY5LCA0NSwgNDksIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAxOTcsIDcwLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgCisgICAgNzMsIDcwLCA4NCwgODksIDEyOCwgNzAsIDczLCA3MCwgODQsIDIxNywgNzAsIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCAKKyAgICA3MCwgNzMsIDcwLCA4NCwgNzIsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDczLCA3MCwgODQsIAorICAgIDY5LCA2OSwgMjA2LCA3MCwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MCwgCisgICAgNzYsIDEyOCwgNzAsIDcwLCA3MywgMTI4LCA3MCwgNjksIDg1LCA4OCwgMTI4LCA3MCwgNjksIDg1LCA3MCwgNjksIDg1LCAKKyAgICA2NSwgNjksIDg0LCAxMjgsIDcwLCA2OSwgODMsIDg0LCA3MywgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA4MiwgODksIAorICAgIDEyOCwgNzAsIDY5LCA4MiwgODIsIDczLCAyMTEsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcwLCA2OSwgCisgICAgODIsIDc3LCA2NSwgODQsIDE5MywgNzAsIDY5LCA3OSwgMjAwLCA3MCwgNjksIDc4LCAxOTksIDcwLCA2OSwgNzgsIDY3LCAKKyAgICA2OSwgMTI4LCA3MCwgNjksIDc3LCA3MywgNzgsIDczLCA3OCwgMTk3LCA3MCwgNjksIDc3LCA2NSwgNzYsIDY5LCAxMjgsIAorICAgIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCA3MCwgNjksIDc2LCA3NiwgNzksIDg3LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3MCwgCisgICAgNjksIDczLCAxMjgsIDcwLCA2OSwgNzIsIDIxMywgNzAsIDY5LCA3MiwgMTI4LCA3MCwgNjksIDIwMCwgNzAsIDY5LCA2OSwgCisgICAgNzgsIDcxLCAxMjgsIDcwLCA2OSwgNjksIDY4LCAxMjgsIDcwLCA2OSwgNjksIDE5NiwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgCisgICAgNjksIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCAKKyAgICA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjksIDY1LCA4MiwgNzgsIDEyOCwgNzAsIDY5LCA2NSwgODIsIDcwLCA4NSwgCisgICAgMjA0LCA3MCwgNjksIDY1LCA4MiwgMTI4LCA3MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjUsIDg5LCAKKyAgICAxMjgsIDcwLCA2NSwgODgsIDEyOCwgNzAsIDY1LCAyMTYsIDcwLCA2NSwgODQsIDczLCA3MSwgODUsIDY5LCAxMjgsIDcwLCAKKyAgICA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIAorICAgIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgCisgICAgNzAsIDY1LCA4NCwgNzIsIDE5MywgNzAsIDY1LCA4NCwgMTI4LCA3MCwgNjUsIDgyLCA4MywgMjAxLCA3MCwgNjUsIDgxLCAKKyAgICAxMjgsIDcwLCA2NSwgODAsIDEyOCwgNzAsIDY1LCA3OCwgNzEsIDEyOCwgNzAsIDY1LCA3OCwgNjksIDgyLCA3OSwgODMsIAorICAgIDczLCAyMTEsIDcwLCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCA3MCwgNjUsIDc2LCA3NiwgCisgICAgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzYsIDc2LCA2OSwgMjA2LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCA2OSwgMTI4LCAKKyAgICA3MCwgNjUsIDczLCA3MiwgODUsIDEyOCwgNzAsIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIDEyOCwgNzAsIAorICAgIDY1LCA2NywgODQsIDc5LCA4MiwgODksIDEyOCwgNzAsIDY1LCA2NywgODQsIDc5LCAyMTAsIDcwLCA2NSwgNjcsIDgzLCA3MywgCisgICAgNzcsIDczLCA3NiwgMTk3LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDU0LCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTMsIAorICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA2NSwgCisgICAgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNjUsIDY1LCA3NywgNjUsIDY5LCAKKyAgICAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIDcwLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MCwgNDgsIDUzLCA1MSwgMTI4LCAKKyAgICA3MCwgNDgsIDUzLCA1MCwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjcsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY2LCAxMjgsIAorICAgIDcwLCA0OCwgNTMsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgMTI4LCA3MCwgNDgsIDUzLCA0OCwgMTI4LCA3MCwgCisgICAgNDgsIDUyLCA1NywgMTI4LCA3MCwgNDgsIDUyLCA1NiwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MiwgNTUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCAxMjgsIDcwLCA0OCwgNTIsIAorICAgIDUzLCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1MywgMTI4LCA3MCwgNDgsIDUyLCA1MiwgMTI4LCA3MCwgNDgsIDUyLCA1MSwgCisgICAgMTI4LCA3MCwgNDgsIDUyLCA1MCwgMTI4LCA3MCwgNDgsIDUyLCA0OSwgMTI4LCA3MCwgNDgsIDUyLCA0OCwgMTI4LCA3MCwgCisgICAgNDgsIDUxLCA1NywgMTI4LCA3MCwgNDgsIDUxLCA1NiwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MSwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCAxMjgsIDcwLCA0OCwgNTEsIDU0LCAxMjgsIDcwLCA0OCwgNTEsIAorICAgIDUzLCAxMjgsIDcwLCA0OCwgNTEsIDUyLCAxMjgsIDcwLCA0OCwgNTEsIDUxLCAxMjgsIDcwLCA0OCwgNTEsIDUwLCAxMjgsIAorICAgIDcwLCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgMTI4LCA3MCwgNDgsIDUxLCA0OCwgMTI4LCA3MCwgCisgICAgNDgsIDUwLCA1NywgMTI4LCA3MCwgNDgsIDUwLCA1NiwgMTI4LCA3MCwgNDgsIDUwLCA1NSwgMTI4LCA3MCwgNDgsIDUwLCAKKyAgICA1NCwgMTI4LCA3MCwgNDgsIDUwLCA1MywgMTI4LCA3MCwgNDgsIDUwLCA1MiwgMTI4LCA3MCwgNDgsIDUwLCA1MSwgMTI4LCAKKyAgICA3MCwgNDgsIDUwLCA1MCwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNDgsIDEyOCwgNzAsIDQ4LCA0OSwgNTcsIDEyOCwgNzAsIDQ4LCA0OSwgNTYsIDEyOCwgNzAsIDQ4LCA0OSwgCisgICAgNTUsIDEyOCwgNzAsIDQ4LCA0OSwgNTQsIDEyOCwgNzAsIDQ4LCA0OSwgNTMsIDEyOCwgNzAsIDQ4LCA0OSwgNTIsIDEyOCwgCisgICAgNzAsIDQ4LCA0OSwgNTEsIDY1LCAxMjgsIDcwLCA0OCwgNDksIDUxLCAxMjgsIDcwLCA0OCwgNDksIDUwLCAxMjgsIDcwLCAKKyAgICA0OCwgNDksIDQ5LCAxMjgsIDcwLCA0OCwgNDksIDQ4LCAxMjgsIDcwLCA0OCwgNDgsIDU3LCAxMjgsIDcwLCA0OCwgNDgsIAorICAgIDU2LCAxMjgsIDcwLCA0OCwgNDgsIDU1LCAxMjgsIDcwLCA0OCwgNDgsIDU0LCAxMjgsIDcwLCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDcwLCA0OCwgNDgsIDUyLCAxMjgsIDcwLCA0OCwgNDgsIDUxLCAxMjgsIDcwLCA0OCwgNDgsIDUwLCAxMjgsIDcwLCA0OCwgCisgICAgNDgsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgOTAsIDIwMCwgNjksIDkwLCA2OSwgNzgsIDEyOCwgCisgICAgNjksIDkwLCA2OSwgMjA2LCA2OSwgOTAsIDEyOCwgNjksIDg5LCA2OSwgODMsIDEyOCwgNjksIDg5LCA2OSwgNzEsIDc2LCAKKyAgICA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgODksIAorICAgIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA4OCwgODQsIDgyLCA2NSwgODQsIDY5LCA4MiwgODIsIDY5LCA4MywgODQsIDgyLCAKKyAgICA3MywgNjUsIDIwNCwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIAorICAgIDcyLCA3MywgNzEsIDIwMCwgNjksIDg4LCA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDg0LCA2OSwgCisgICAgNzgsIDY4LCA2OSwgMTk2LCA2OSwgODgsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgNzYsIDY5LCA4MywgMjExLCAKKyAgICA2OSwgODgsIDgwLCA3OSwgNzgsIDY5LCA3OCwgMjEyLCA2OSwgODgsIDc5LCAxMjgsIDY5LCA4OCwgMjA3LCA2OSwgODgsIAorICAgIDczLCA4MywgODQsIDgzLCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgMTI4LCA2OSwgODgsIDcyLCA2NSwgODUsIDgzLCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCAKKyAgICA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDY5LCAxMjgsIAorICAgIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgNjksIDg4LCA2NywgNjksIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCA2OSwgCisgICAgODcsIDY5LCAxMjgsIDY5LCA4NiwgNjksIDgyLCA3MSwgODIsIDY5LCA2OSwgMjA2LCA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCAKKyAgICA3MSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA2NSwgMjA2LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA0NSwgNjUsIAorICAgIDcwLCA4MiwgNzMsIDY3LCA2NSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAKKyAgICAyMTcsIDY5LCA4NSwgODIsIDIwNywgNjksIDg1LCA3NiwgNjksIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCAKKyAgICA0NSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIAorICAgIDQ1LCA2OSwgMTI4LCA2OSwgODUsIDQ1LCA2NSwgMTI4LCA2OSwgODQsIDg4LCAxMjgsIDY5LCA4NCwgNzgsIDY1LCA3MiwgCisgICAgODQsIDY1LCAxMjgsIDY5LCA4NCwgNzIsIDY5LCAyMDQsIDY5LCA4NCwgNjksIDgyLCA3OSwgMjA2LCA2OSwgODQsIDY5LCAKKyAgICA4MiwgNzgsIDczLCA4NCwgODksIDEyOCwgNjksIDg0LCA2NiwgMTI4LCA2OSwgODMsIDg1LCA3NSwgODUsIDg1LCA2OCwgNzksIAorICAgIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCA4MywgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgCisgICAgNjksIDE5NiwgNjksIDgzLCA3MiwgNjksIDUxLCAxMjgsIDY5LCA4MywgNzIsIDUwLCA0OSwgMTI4LCA2OSwgODMsIDcyLCAKKyAgICAxNzgsIDY5LCA4MywgNzIsIDQ5LCA1NCwgMTI4LCA2OSwgODMsIDY3LCA2NSwgODAsIDY5LCAxMjgsIDY5LCA4MywgNjcsIAorICAgIDEyOCwgNjksIDgzLCA2NSwgMTI4LCA2OSwgODMsIDQ1LCA4NCwgNjksIDEyOCwgNjksIDgyLCA4MiwgNzksIDgyLCA0NSwgCisgICAgNjYsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDY5LCA4MiwgODIsIDEyOCwgNjksIDgyLCA3MywgNzgsIDUwLCAxMjgsIDY5LCAKKyAgICA4MiwgNzEsIDEyOCwgNjksIDgyLCA2NSwgODMsIDE5NywgNjksIDgxLCA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgCisgICAgMjEyLCA2OSwgODEsIDg1LCA3MywgNjgsIDEyOCwgNjksIDgxLCA4NSwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIAorICAgIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCA4MywgMTI4LCA2OSwgODEsIDg1LCA2NSwgNzYsIDIxMSwgNjksIDgxLCA4NSwgCisgICAgNjUsIDc2LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIAorICAgIDIwNiwgNjksIDgwLCA3OSwgNjcsIDcyLCAxMjgsIDY5LCA4MCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgCisgICAgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCA2NSwgMjA2LCA2OSwgODAsIDY5LCA3OCwgODQsIDcyLCA2OSwgODQsIAorICAgIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCA2NSwgMTI4LCA2OSwgNzksIDg0LCAxMjgsIDY5LCA3OSwgCisgICAgNzcsIDEyOCwgNjksIDc5LCA3NiwgNzIsIDg4LCAxMjgsIDY5LCA3OSwgNzYsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgCisgICAgNzgsIDg5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCAKKyAgICA4MCwgMTk3LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIAorICAgIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA0OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgCisgICAgNjksIDc4LCA4NCwgODIsIDIxNywgNjksIDc4LCA4NCwgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCAKKyAgICA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIAorICAgIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAKKyAgICAxMjgsIDY5LCA3OCwgODEsIDEyOCwgNjksIDc4LCA3OSwgMjExLCA2OSwgNzgsIDc4LCAxMjgsIDY5LCA3OCwgNzYsIDY1LCAKKyAgICA4MiwgNzEsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzgsIDcxLCA3MywgNzgsIDY5LCAxMjgsIDY5LCA3OCwgNjgsIAorICAgIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjgsIDY5LCA4MCwgCisgICAgMTI4LCA2OSwgNzgsIDY4LCA2OSwgNjUsIDg2LCA3OSwgODUsIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCAKKyAgICA2OSwgODIsIDgzLCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIAorICAgIDc5LCA4MywgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgCisgICAgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCAKKyAgICA2NSwgODQsIDczLCAxOTUsIDY5LCA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNjYsIDgyLCA3OSwgNzMsIAorICAgIDY4LCA2OSwgODIsIDg5LCAxMjgsIDY5LCA3NywgNjYsIDc2LCA2OSwgNzcsIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgCisgICAgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCAKKyAgICA2OSwgNzYsIDg0LCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODQsIDczLCAxOTUsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIAorICAgIDczLCA4MywgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA2OSwgMTI4LCA2OSwgNzYsIDczLCA3MCwgNzMsIDEyOCwgCisgICAgNjksIDc2LCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDc2LCA2OSwgODYsIAorICAgIDY5LCA3OCwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDIwNiwgNjksIDc2LCA2OSwgODAsIDcyLCA2NSwgNzgsIDg0LCAKKyAgICAxMjgsIDY5LCA3NiwgNjksIDc3LCA2OSwgNzgsIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCAKKyAgICA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIAorICAgIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgCisgICAgNjcsIDIxMiwgNjksIDczLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIAorICAgIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgCisgICAgNzEsIDcyLCA4NCwgNjksIDY5LCAyMDYsIDY5LCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIAorICAgIDEyOCwgNjksIDczLCA2OSwgMTI4LCA2OSwgNzIsIDg3LCA2NSwgMjE4LCA2OSwgNzEsIDg5LCA4MCwgODQsIDc5LCA3NiwgCisgICAgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgNzMsIDgyLCAxMjgsIDY5LCA3MSwgNzEsIDEyOCwgNjksIDY5LCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDY5LCA3NSwgNjUsIDY1LCAxMjgsIDY5LCA2OSwgNzIsIDEyOCwgNjksIAorICAgIDY5LCA2NiwgNjksIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNjgsIDczLCA4NCwgNzksIDgyLCA3MywgNjUsIDIwNCwgCisgICAgNjksIDY4LCA3MywgNzgsIDEyOCwgNjksIDY4LCA2OCwgMTI4LCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKKyAgICA2OSwgNjUsIDgzLCA4NCwgNjksIDgyLCAyMDYsIDY5LCA2NSwgODMsIDIxMiwgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgCisgICAgMjE3LCA2OSwgNjUsIDgyLCA4NCwgNzIsIDEyOCwgNjksIDY1LCA4MiwgODQsIDIwMCwgNjksIDY1LCA4MiwgODMsIDEyOCwgCisgICAgNjksIDY1LCA4MiwgNzYsIDIxNywgNjksIDY1LCA3NywgNzIsIDY1LCA3OCwgNjcsIDcyLCA3OSwgNzYsIDc2LCAxMjgsIDY5LCAKKyAgICA2NSwgNzEsIDc2LCA2OSwgMTI4LCA2OSwgNjUsIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIDY2LCA3MiwgNjUsIAorICAgIDY4LCA3MiwgMTI4LCA2OSwgMTc4LCA2OSwgNDgsIDUxLCA1NiwgMTI4LCA2OSwgNDgsIDUxLCA1NSwgMTI4LCA2OSwgNDgsIAorICAgIDUxLCA1NCwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDEyOCwgNjksIDQ4LCA1MSwgCisgICAgNTEsIDEyOCwgNjksIDQ4LCA1MSwgNTAsIDEyOCwgNjksIDQ4LCA1MSwgNDksIDEyOCwgNjksIDQ4LCA1MSwgNDgsIDEyOCwgCisgICAgNjksIDQ4LCA1MCwgNTcsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCAxMjgsIDY5LCAKKyAgICA0OCwgNTAsIDU1LCAxMjgsIDY5LCA0OCwgNTAsIDU0LCAxMjgsIDY5LCA0OCwgNTAsIDUzLCAxMjgsIDY5LCA0OCwgNTAsIAorICAgIDUyLCAxMjgsIDY5LCA0OCwgNTAsIDUxLCAxMjgsIDY5LCA0OCwgNTAsIDUwLCAxMjgsIDY5LCA0OCwgNTAsIDQ5LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgMTI4LCA2OSwgNDgsIDQ5LCA1NywgMTI4LCA2OSwgCisgICAgNDgsIDQ5LCA1NiwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA0OSwgNTQsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCAxMjgsIDY5LCA0OCwgNDksIDUzLCAxMjgsIDY5LCA0OCwgNDksIAorICAgIDUyLCAxMjgsIDY5LCA0OCwgNDksIDUxLCAxMjgsIDY5LCA0OCwgNDksIDUwLCAxMjgsIDY5LCA0OCwgNDksIDQ5LCAxMjgsIAorICAgIDY5LCA0OCwgNDksIDQ4LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgMTI4LCA2OSwgCisgICAgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDEyOCwgNjksIDQ4LCA0OCwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgNjksIDQ4LCA0OCwgNTMsIDEyOCwgNjksIDQ4LCA0OCwgNTIsIDEyOCwgNjksIDQ4LCA0OCwgNTEsIAorICAgIDEyOCwgNjksIDQ4LCA0OCwgNTAsIDEyOCwgNjksIDQ4LCA0OCwgNDksIDEyOCwgNjksIDQ1LCA3NywgNjUsIDczLCAyMDQsIAorICAgIDY4LCA5MCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgODcsIDY5LCAxMjgsIDY4LCA5MCwgCisgICAgODUsIDEyOCwgNjgsIDkwLCA3OSwgMTI4LCA2OCwgOTAsIDc0LCA2OSwgMTI4LCA2OCwgOTAsIDczLCAxMjgsIDY4LCA5MCwgCisgICAgNzIsIDY5LCAxMjgsIDY4LCA5MCwgNzIsIDY1LCAxMjgsIDY4LCA5MCwgNjksIDc2LCA3OSwgMTI4LCA2OCwgOTAsIDY5LCAKKyAgICA2OSwgMTI4LCA2OCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgNjUsIDY1LCAxMjgsIDY4LCA5MCwgNjUsIDEyOCwgNjgsIDkwLCAKKyAgICAxMjgsIDY4LCAyMTgsIDY4LCA4OSwgNzksIDEyOCwgNjgsIDg5LCAyMDcsIDY4LCA4OSwgNjksIDcyLCAxMjgsIDY4LCA4OSwgCisgICAgNjksIDIwMCwgNjgsIDg3LCA3OSwgMTI4LCA2OCwgODcsIDY5LCAxMjgsIDY4LCA4NywgNjUsIDEyOCwgNjgsIDg2LCA3MywgCisgICAgODMsIDg2LCA2NSwgODIsIDY1LCAxMjgsIDY4LCA4NiwgNjgsIDEyOCwgNjgsIDg2LCAxMjgsIDY4LCA4NSwgODQsIDczLCAKKyAgICA2OSwgODMsIDEyOCwgNjgsIDg1LCA4MywgNzUsIDEyOCwgNjgsIDg1LCA4MywgNzIsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDY4LCA4NSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgODUsIDgyLCA1MCwgMTI4LCA2OCwgODUsIDgwLCA3OSwgCisgICAgNzgsIDY4LCA3MywgODUsIDIxMSwgNjgsIDg1LCA3OSwgODgsIDEyOCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgODUsIDc4LCAKKyAgICA1MiwgMTI4LCA2OCwgODUsIDc4LCA1MSwgMTI4LCA2OCwgODUsIDc4LCAxNzksIDY4LCA4NSwgNzcsIDEyOCwgNjgsIDg1LCAKKyAgICAyMDQsIDY4LCA4NSwgNzIsIDEyOCwgNjgsIDg1LCA3MSwgODUsIDY4LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIDY4LCAKKyAgICA4NSwgNjYsIDEyOCwgNjgsIDg1LCAxOTQsIDY4LCA4MiwgODksIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCA4MiwgODUsIDc3LCAKKyAgICAxMjgsIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCA3OSwgODAsIDgzLCAxMjgsIDY4LCA4MiwgNzksIDgwLCA3NiwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgNjgsIDgyLCA3OSwgCisgICAgNzcsIDY5LCA2OCwgNjUsIDgyLCAyMTcsIDY4LCA4MiwgNzMsIDg2LCA2OSwgMTI4LCA2OCwgODIsIDczLCA4NiwgMTk3LCAKKyAgICA2OCwgODIsIDczLCA3OCwgNzUsIDEyOCwgNjgsIDgyLCA3MywgMjA0LCA2OCwgODIsIDY5LCA4MywgODMsIDEyOCwgNjgsIAorICAgIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIDgyLCA2NSwgNzcsIDEyOCwgNjgsIDgyLCA2NSwgMjA1LCA2OCwgCisgICAgODIsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDY4LCA4MiwgNjUsIDcxLCA3OSwgMjA2LCA2OCwgODIsIDY1LCA3MCwgODQsIDczLCAKKyAgICA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgMTkzLCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAKKyAgICAxMjgsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgMjExLCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIAorICAgIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY4LCA3OSwgODcsIDc4LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgCisgICAgODUsIDcxLCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCAKKyAgICA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA2OCwgNzksIDg1LCA2NiwgNzYsIAorICAgIDY5LCA0NSwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCAKKyAgICA2OSwgNjgsIDQ1LCA3NiwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgCisgICAgMTk2LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKKyAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKKyAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDEyOCwgNjgsIDc5LCA4NCwgODMsIDEyOCwgNjgsIDc5LCA4NCwgNzYsIAorICAgIDY5LCA4MywgMjExLCA2OCwgNzksIDgyLCA4NSwgMTI4LCA2OCwgNzksIDc5LCA4MiwgMTI4LCA2OCwgNzksIDc5LCA3OCwgCisgICAgNzEsIDEyOCwgNjgsIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3NywgNjUsIDczLCAyMDYsIDY4LCA3OSwgNzYsIDgwLCAKKyAgICA3MiwgNzMsIDc4LCAxMjgsIDY4LCA3OSwgNzYsIDc2LCA4MywgMTI4LCA2OCwgNzksIDc2LCA3NiwgNjUsIDIxMCwgNjgsIAorICAgIDc5LCA3NiwgNzMsIDg1LCA3NywgMTI4LCA2OCwgNzksIDc1LCA3NywgNjUsIDczLCAxMjgsIDY4LCA3OSwgNzMsIDg0LCAKKyAgICAxMjgsIDY4LCA3OSwgNzEsIDEyOCwgNjgsIDc5LCAxOTksIDY4LCA3OSwgNjksIDIxMSwgNjgsIDc5LCA2OCwgNjksIDc1LCAKKyAgICA2NSwgODQsIDY1LCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIAorICAgIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDE5NywgNjgsIDc5LCA2NSwgCisgICAgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgNzcsIDEyOCwgNjgsIDIwNSwgNjgsIDc2LCA4NSwgMTI4LCA2OCwgNzYsIAorICAgIDc5LCAxMjgsIDY4LCA3NiwgNzMsIDEyOCwgNjgsIDc2LCA3MiwgODksIDY1LCAxMjgsIDY4LCA3NiwgNzIsIDY1LCAxMjgsIAorICAgIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3NiwgNjUsIDEyOCwgNjgsIDc2LCAxMjgsIDY4LCA3NSwgNjUsIDgyLCAxMjgsIAorICAgIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCA2OCwgNzQsIDY5LCA4MiwgODYsIDEyOCwgCisgICAgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzQsIDY1LCAxMjgsIDY4LCA3MywgOTAsIDkwLCAyMTcsIDY4LCA3MywgODYsIDc5LCAKKyAgICA4MiwgNjcsIDE5NywgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIAorICAgIDc5LCAyMDYsIDY4LCA3MywgODYsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgCisgICAgNjksIDgzLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIAorICAgIDE5NiwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDE5NywgNjgsIDczLCA4NiwgCisgICAgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgNjksIDEyOCwgNjgsIDczLCA4NCwgODQsIDIwNywgNjgsIDczLCA4MywgODQsIDc5LCAKKyAgICA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3OCwgNzEsIDg1LCA3MywgODMsIDcyLCAxMjgsIAorICAgIDY4LCA3MywgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgNDUsIDUwLCAKKyAgICAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgMTI4LCA2OCwgNzMsIDgzLCA4MCwgNjksIDgyLCA4MywgNzMsIAorICAgIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA3NSwgMTI4LCA2OCwgNzMsIDgzLCA3MywgNzcsIDc5LCA4NSwgMTI4LCA2OCwgCisgICAgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCA4NSwgNzksIDg1LCAyMTEsIDY4LCAKKyAgICA3MywgODMsIDE5NSwgNjgsIDczLCA4MywgNjUsIDgwLCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDY4LCA3MywgODMsIAorICAgIDY1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3MywgODIsIDcxLCAxOTMsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDc2LCAKKyAgICAyMTcsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgODAsIDg0LCA2OSwgCisgICAgMTI4LCA2OCwgNzMsIDgwLCA4MCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODAsIDc2LCA3OSwgODUsIDc4LCAxMjgsIDY4LCAKKyAgICA3MywgODAsIDc2LCA3MywgMTI4LCA2OCwgNzMsIDgwLCA3NiwgMjAxLCA2OCwgNzMsIDc4LCA3MSwgNjYsIDY1LCAyMTIsIAorICAgIDY4LCA3MywgMjA2LCA2OCwgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgNDUsIDUxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTAsIAorICAgIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA0OSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgCisgICAgNzgsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgNzcsIDczLCA2OCwgNzMsIDE5MywgNjgsIDczLCAKKyAgICA3NywgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA3NywgNjksIDc4LCA4MywgNzMsIDc5LCAyMDYsIAorICAgIDY4LCA3MywgNzcsIDUwLCAxMjgsIDY4LCA3MywgNzYsIDEyOCwgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgCisgICAgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNjgsIDczLCAKKyAgICA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNjgsIDczLCA3MSwgODIsIDY1LCAyMDUsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIAorICAgIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA2OCwgNzMsIDcxLCA2NSwgNzcsIDc3LCA2NSwgCisgICAgMTI4LCA2OCwgNzMsIDcxLCAxOTMsIDY4LCA3MywgNzAsIDg0LCA3OSwgNzEsIDcxLCA3OSwgMjExLCA2OCwgNzMsIDcwLCAKKyAgICA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgMjE3LCA2OCwgNzMsIAorICAgIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCAKKyAgICA3OCwgODQsIDczLCA2NSwgNzYsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCA2NywgMTk3LCA2OCwgNzMsIAorICAgIDcwLCA2NSwgODQsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDIxMSwgCisgICAgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDczLCAxOTcsIDY4LCA3MywgNjYsIDEyOCwgNjgsIDczLCA2NSwgODQsIDc5LCAKKyAgICA3OCwgNzksIDIwNiwgNjgsIDczLCA2NSwgODQsIDc5LCA3OCwgNzMsIDc1LCAyMDEsIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIAorICAgIDc2LCAyMDEsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCA4MywgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgCisgICAgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIDY5LCAyMTAsIDY4LCAKKyAgICA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCAxOTMsIAorICAgIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgNzYsIDEyOCwgCisgICAgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA5MCwgNjksIAorICAgIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgCisgICAgNzMsIDIxMSwgNjgsIDcyLCA3OSwgODUsIDEyOCwgNjgsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3OSwgMTI4LCA2OCwgCisgICAgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDg1LCAxMjgsIDY4LCA3MiwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzIsIDcyLCAKKyAgICA3OSwgMTI4LCA2OCwgNzIsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCA3MiwgNjksIAorICAgIDEyOCwgNjgsIDcyLCA3MiwgNjUsIDEyOCwgNjgsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCA2NSwgODIsIDc3LCA2NSwgCisgICAgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjksIDg0LCA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjUsIDg0LCA3MiwgMTI4LCAKKyAgICA2OCwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCA3NiwgODUsIAorICAgIDEyOCwgNjgsIDcyLCA2NSwgNjUsIDEyOCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjksIDkwLCAyMDAsIDY4LCA2OSwgODksIAorICAgIDg0LCA2OSwgODIsIDc5LCAyMTMsIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTEsIDY4LCA2OSwgODgsIDczLCA2NSwgCisgICAgMTI4LCA2OCwgNjksIDg2LCA3MywgNjcsIDE5NywgNjgsIDY5LCA4NiwgNjksIDc2LCA3OSwgODAsIDc3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY4LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgzLCAyMDMsIDY4LCA2OSwgODMsIDczLCA3MSwgNzgsIAorICAgIDEyOCwgNjgsIDY5LCA4MywgNzMsIDEyOCwgNjgsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgCisgICAgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNjksIAorICAgIDgyLCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgNDUsIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA2OCwgNjksIDgyLCA2OSwgCisgICAgODQsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCAKKyAgICA3NywgNjksIDc4LCAyMTIsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc4LCA4NCwgNzMsIAorICAgIDgzLCA4NCwgODIsIDIxNywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgCisgICAgODQsIDc5LCA4MiwgMTI4LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgNjksIDc4LCAKKyAgICA3OCwgNjksIDc4LCAxMjgsIDY4LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgNzgsIDE5NywgNjgsIDY5LCA3OCwgNjUsIAorICAgIDgyLCA3MywgODUsIDIxMSwgNjgsIDY5LCA3NiwgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIDY4LCA2OSwgCisgICAgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzYsIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIAorICAgIDIxNywgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgCisgICAgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAyMTAsIDY4LCA2OSwgNzYsIDczLCAKKyAgICA2NywgNzMsIDc5LCA4NSwgMjExLCA2OCwgNjksIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgCiAgICAgMTk3LCA2OCwgNjksIDc1LCA2NSwgMTI4LCA2OCwgNjksIDc1LCAxMjgsIDY4LCA2OSwgNzMsIDEyOCwgNjgsIDY5LCA3MiwgCiAgICAgNzMsIDEyOCwgNjgsIDY5LCA3MSwgODIsIDY5LCAxOTcsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCAKICAgICAxMjgsIDY4LCA2OSwgNzAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDIxMSwgNjgsIDY5LCA2OSwgODIsIApAQCAtNDU0Nyw5NiArNDU1MCw5NiBAQAogICAgIDczLCA3OSwgMjA2LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCA2NSwgODQsIDE5NywgNjUsIDc2LCA4NCwgNjUsIDEyOCwgCiAgICAgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDcyLCAxOTMsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCAKICAgICA3OCwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgCi0gICAgMTI4LCA2NSwgNzYsIDc3LCA3OSwgODMsIDIxMiwgNjUsIDc2LCA3NiwgNzksIDEyOCwgNjUsIDc2LCA3NiwgNzMsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDc2LCA3NiwgNjUsIDIwMCwgNjUsIDc2LCA3NSwgNjUsIAotICAgIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDEyOCwgNjUsIDc2LCA3MywgNzEsIDc4LCA2OSwgCi0gICAgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCA3MywgNjksIDc4LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCAKLSAgICAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgNjksIDg1LCAyMTIsIDY1LCAKLSAgICA3NiwgNjksIDgyLCA4NCwgMTI4LCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA2OSwgNzcsIDY2LCA3MywgNjcsIAotICAgIDEyOCwgNjUsIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgCi0gICAgNzIsIDE5NywgNjUsIDc2LCA2NSwgODIsIDIwNSwgNjUsIDc2LCA2NSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNDUsIDc2LCAKLSAgICA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIDc2LCA4MywgNzUsIDY1LCA2NiwgCi0gICAgMTI4LCA2NSwgNzUsIDgzLCA2NSwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgMTk1LCA2NSwgNzUsIDY2LCAKLSAgICA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgNjUsIDczLCA4OSwgNjUsIAotICAgIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCA3OSwgMjA2LCA2NSwgCi0gICAgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgMjEzLCA2NSwgNzMsIDc4LCA3OCwgMTI4LCAKLSAgICA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgNzIsIDg2LCA4NSwgODMsIAotICAgIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCA3MiwgNjUsIDc4LCAxOTksIAotICAgIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIDcxLCA4NSwgNzgsIDcxLCAKLSAgICAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCA3OCwgMTI4LCAKLSAgICA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIAotICAgIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAxMjgsIDY1LCA3MCwgCi0gICAgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDY5LCAKLSAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgODUsIDc2LCA2NSwgODAsIAotICAgIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCA2NSwgNjksIDgyLCA3MywgCi0gICAgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCAKLSAgICA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIDY1LCA2OSwgNzEsIAotICAgIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgNjUsIDY5LCA2OCwgCi0gICAgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAxMjgsIDY1LCAKLSAgICA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIAotICAgIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgNjksIDE5NiwgCi0gICAgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCA2NSwgMjAzLCAKLSAgICA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIDg0LCA2OSwgCi0gICAgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgMTk3LCAKLSAgICA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgMTk3LCA2NSwgNjcsIAotICAgIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCA2OSwgNjgsIDcxLCAKLSAgICA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA2NywgNjcsIAotICAgIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCA0NSwgCi0gICAgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDEyOCwgNjUsIDY3LCAKLSAgICA2NywgNjksIDc4LCAyMTIsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgODMsIDc3LCA2NSwgCi0gICAgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCA2NSwgODMsIDczLCAKLSAgICA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDY2LCA2NSwgNzAsIAotICAgIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2NSwgCi0gICAgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgNjUsIDY1LCA2NiwgCi0gICAgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ5LCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIAotICAgIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIDEyOCwgNjUsIDY1LCAKLSAgICA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDgsIDEyOCwgNjUsIAotICAgIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTIsIAotICAgIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgCi0gICAgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIAotICAgIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIDU0LCA1NywgCi0gICAgMTI4LCA2NSwgNDgsIDU0LCA1NiwgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgMTI4LCA2NSwgCi0gICAgNDgsIDU0LCA1MywgMTI4LCA2NSwgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgNDgsIDU0LCAKLSAgICA1MCwgMTI4LCA2NSwgNDgsIDU0LCA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCA1NywgMTI4LCAKLSAgICA2NSwgNDgsIDUzLCA1NiwgMTI4LCA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCA2NSwgNDgsIAotICAgIDUzLCA1MywgMTI4LCA2NSwgNDgsIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIDUzLCA1MCwgCi0gICAgMTI4LCA2NSwgNDgsIDUzLCA0OSwgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgMTI4LCA2NSwgCi0gICAgNDgsIDUyLCA1NiwgMTI4LCA2NSwgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgNDgsIDUyLCAKLSAgICA1MywgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIAotICAgIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgCi0gICAgMTI4LCA2NSwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MSwgNTQsIDEyOCwgNjUsIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCA1MSwgNTEsIAotICAgIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1MiwgCi0gICAgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCAKLSAgICA1MywgNjUsIDEyOCwgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCA4NSwgMTI4LCAKLSAgICA0NSwgNzUsIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIDkwLCA4NSwgCi0gICAgMTk2LCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCisgICAgMTI4LCA2NSwgNzYsIDc3LCA3OSwgODMsIDIxMiwgNjUsIDc2LCA3NywgMTI4LCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NSwgCisgICAgNzYsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDc2LCA3NiwgMjAxLCA2NSwgNzYsIDc2LCA2NSwgMjAwLCAKKyAgICA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCA0NSwgNTAsIDEyOCwgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgMTI4LCA2NSwgNzYsIAorICAgIDczLCA3MSwgNzgsIDY5LCAxOTYsIDY1LCA3NiwgNzMsIDcwLCA4NSwgMTI4LCA2NSwgNzYsIDczLCA2OSwgNzgsIDEyOCwgCisgICAgNjUsIDc2LCA3MywgNjksIDIwNiwgNjUsIDc2LCA3MSwgNzMsIDIxOCwgNjUsIDc2LCA3MCwgNjUsIDEyOCwgNjUsIDc2LCAKKyAgICA2OSwgODUsIDIxMiwgNjUsIDc2LCA2OSwgODIsIDg0LCAxMjgsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIAorICAgIDY5LCA3NywgNjYsIDczLCA2NywgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAKKyAgICAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MiwgMjA1LCA2NSwgNzYsIDY1LCA4MCwgNzIsIAorICAgIDEyOCwgNjUsIDc2LCA0NSwgNzYsIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgCisgICAgNzYsIDgzLCA3NSwgNjUsIDY2LCAxMjgsIDY1LCA3NSwgODMsIDY1LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAKKyAgICAxOTUsIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCAKKyAgICA2NSwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIAorICAgIDc5LCAyMDYsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCAyMTMsIDY1LCA3MywgCisgICAgNzgsIDc4LCAxMjgsIDY1LCA3MywgNzYsIDc3LCAxMjgsIDY1LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDczLCAKKyAgICA3MiwgODYsIDg1LCA4MywgMTI4LCA2NSwgNzIsIDgzLCA2OCwgNjUsIDEyOCwgNjUsIDcyLCA4MywgNjUsIDEyOCwgNjUsIAorICAgIDcyLCA2NSwgNzgsIDE5OSwgNjUsIDcyLCA2NSwgNzEsIDcxLCA2NSwgMjEwLCA2NSwgNzIsIDY1LCA2OCwgMTI4LCA2NSwgCisgICAgNzEsIDg1LCA3OCwgNzEsIDEyOCwgNjUsIDcxLCA3OSwgNzEsIDIwMSwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDcxLCA2NSwgNzMsIAorICAgIDc4LCAxMjgsIDY1LCA3MCwgODQsIDY5LCAyMTAsIDY1LCA3MCwgODMsIDY1LCA2NSwgODEsIDEyOCwgNjUsIDcwLCA4MiwgCisgICAgNzMsIDY3LCA2NSwgMjA2LCA2NSwgNzAsIDc5LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCA2OSwgNjgsIAorICAgIDEyOCwgNjUsIDcwLCA3MSwgNzIsIDY1LCA3OCwgMjAxLCA2NSwgNzAsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA2NSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDg5LCAxMjgsIDY1LCA2OSwgODMsIDY3LCAKKyAgICA4NSwgNzYsIDY1LCA4MCwgNzMsIDg1LCA4MywgMTI4LCA2NSwgNjksIDgzLCA2NywgMTI4LCA2NSwgNjksIDgzLCAxMjgsIAorICAgIDY1LCA2OSwgODIsIDczLCA2NSwgMjA0LCA2NSwgNjksIDgyLCAxMjgsIDY1LCA2OSwgNzYsIDY1LCA0NSwgODAsIDczLCA3NiwgCisgICAgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNzYsIDEyOCwgNjUsIDY5LCA3NSwgMTI4LCA2NSwgNjksIDcxLCA2OSwgNjUsIDIwNiwgCisgICAgNjUsIDY5LCA3MSwgMTI4LCA2NSwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA2OSwgMTI4LCAKKyAgICA2NSwgNjksIDY4LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDY4LCAxMjgsIDY1LCA2OSwgNjYsIAorICAgIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA4NCwgNjUsIDcxLCA2OSwgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDY3LCA2OSwgCisgICAgMTI4LCA2NSwgNjgsIDY5LCA3MSwgMTI4LCA2NSwgNjgsIDY5LCAxOTksIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMTk2LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCAyMTEsIDY1LCA2OCwgNjgsIDY1LCA3NSwgMTI4LCA2NSwgNjgsIAorICAgIDY1LCAyMDMsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNjUsIDY3LCA4NSwgCisgICAgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDY1LCA2NywgODUsIAorICAgIDg0LCAxOTcsIDY1LCA2NywgODQsIDg1LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA2NywgODQsIDczLCA4NiwgNjUsIDg0LCAKKyAgICAxOTcsIDY1LCA2NywgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNzMsIDE5NSwgNjUsIDY3LCA3NSwgNzgsIDc5LCA4NywgNzYsIAorICAgIDY5LCA2OCwgNzEsIDY5LCAxMjgsIDY1LCA2NywgNjcsIDg1LCA3NywgODUsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNjUsIDY3LCA2NywgNzksIDg1LCA3OCwgMjEyLCA2NSwgNjcsIDY3LCA2OSwgODAsIDg0LCAxMjgsIDY1LCA2NywgNjcsIDY5LCAKKyAgICA3OCwgODQsIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDIxMiwgNjUsIDY3LCA2NSwgNjgsIDY5LCA3NywgMjE3LCA2NSwgNjYsIDg5LCAKKyAgICA4MywgNzcsIDY1LCAyMDQsIDY1LCA2NiwgODUsIDc4LCA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY2LCA3NSwgNzIsIAorICAgIDY1LCA4MywgNzMsIDY1LCAyMDYsIDY1LCA2NiwgNjYsIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgCisgICAgNjYsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjYsIDE3OCwgNjUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNjUsIDY1LCA4OSwgMTI4LCA2NSwgNjUsIDg3LCAxMjgsIDY1LCA2NSwgNzksIDEyOCwgNjUsIDY1LCA3NCwgMTI4LCAKKyAgICA2NSwgNjUsIDY2LCA2NSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA1MCwgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA1MSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NywgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA1MCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NCwgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA1MCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MSwgCisgICAgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCAKKyAgICA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU2LCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDQ5LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUzLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDQ5LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUwLCAxMjgsIDY1LCAKKyAgICA2NSwgNDgsIDQ5LCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU3LCAxMjgsIAorICAgIDY1LCA2NSwgNDgsIDQ4LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgCisgICAgNjUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MSwgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDQ5LCAxMjgsIDY1LCA0OCwgNTUsIDQ4LCAxMjgsIDY1LCA0OCwgCisgICAgNTQsIDU3LCAxMjgsIDY1LCA0OCwgNTQsIDU2LCAxMjgsIDY1LCA0OCwgNTQsIDU1LCAxMjgsIDY1LCA0OCwgNTQsIDU0LCAKKyAgICAxMjgsIDY1LCA0OCwgNTQsIDUzLCAxMjgsIDY1LCA0OCwgNTQsIDUyLCAxMjgsIDY1LCA0OCwgNTQsIDUxLCAxMjgsIDY1LCAKKyAgICA0OCwgNTQsIDUwLCAxMjgsIDY1LCA0OCwgNTQsIDQ5LCAxMjgsIDY1LCA0OCwgNTQsIDQ4LCAxMjgsIDY1LCA0OCwgNTMsIAorICAgIDU3LCAxMjgsIDY1LCA0OCwgNTMsIDU2LCAxMjgsIDY1LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCA0OCwgNTMsIDU0LCAxMjgsIAorICAgIDY1LCA0OCwgNTMsIDUzLCAxMjgsIDY1LCA0OCwgNTMsIDUyLCAxMjgsIDY1LCA0OCwgNTMsIDUxLCAxMjgsIDY1LCA0OCwgCisgICAgNTMsIDUwLCAxMjgsIDY1LCA0OCwgNTMsIDQ5LCAxMjgsIDY1LCA0OCwgNTMsIDQ4LCAxMjgsIDY1LCA0OCwgNTIsIDU3LCAKKyAgICAxMjgsIDY1LCA0OCwgNTIsIDU2LCAxMjgsIDY1LCA0OCwgNTIsIDU1LCAxMjgsIDY1LCA0OCwgNTIsIDU0LCAxMjgsIDY1LCAKKyAgICA0OCwgNTIsIDUzLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MywgMTI4LCA2NSwgNDgsIDUyLCA1MiwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MSwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgCisgICAgNTIsIDUwLCAxMjgsIDY1LCA0OCwgNTIsIDQ5LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA2NSwgNDgsIDUyLCAKKyAgICA0OCwgMTI4LCA2NSwgNDgsIDUxLCA1NywgMTI4LCA2NSwgNDgsIDUxLCA1NiwgMTI4LCA2NSwgNDgsIDUxLCA1NSwgMTI4LCAKKyAgICA2NSwgNDgsIDUxLCA1NCwgMTI4LCA2NSwgNDgsIDUxLCA1MywgMTI4LCA2NSwgNDgsIDUxLCA1MiwgMTI4LCA2NSwgNDgsIAorICAgIDUxLCA1MSwgMTI4LCA2NSwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY1LCA0OCwgCisgICAgNDksIDUyLCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDY1LCAKKyAgICA0OCwgNDgsIDUzLCA2NSwgMTI4LCA2NSwgNDUsIDY5LCA4NSwgMTI4LCA0NSwgODUsIDIwNSwgNDUsIDgwLCA3MiwgODIsIAorICAgIDg1LCAxMjgsIDQ1LCA3NSwgNzIsIDg5LCA4NSwgMTk2LCA0NSwgNzUsIDcyLCA4OSwgNzMsIDc2LCAxMjgsIDQ1LCA2OCwgCisgICAgOTAsIDg1LCAxOTYsIDQ1LCA2NywgNzIsIDY1LCAyMTAsIDQ1LCA2NywgNzIsIDY1LCA3NiwgMTI4LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGV4aWNvbl9vZmZzZXRbXSA9IHsKLSAgICAwLCAwLCA2LCAxMCwgMTgsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDQsIDUwLCA2MiwgNzAsIDgwLCA5MywgMTAyLCAxMDgsIAorICAgIDAsIDAsIDYsIDEwLCAxOCwgMjMsIDI3LCAzNCwgMzksIDQxLCA0NywgNTAsIDYyLCA3MCwgODAsIDkzLCAxMDIsIDEwOCwgCiAgICAgMTEzLCAxMjEsIDEzMCwgMTM1LCAxNDAsIDE0MywgMTQ3LCAxNTMsIDE1OCwgMTYzLCAxNzEsIDE3OCwgMTg2LCAxOTEsIAogICAgIDE5NCwgMjAwLCAyMDgsIDIxNSwgMjI1LCAyMzAsIDIzNywgMjQ2LCAyNDksIDI1NCwgMjU3LCAyNjMsIDI2NywgMjcyLCAKICAgICAyODEsIDI4OCwgMjk1LCAzMDEsIDMxMCwgMzE1LCAzMjEsIDMyNywgMzM1LCAxNDQsIDM0MSwgMzQ5LCAzNTAsIDM1OCwgCi0gICAgMzYxLCAzNjcsIDM2OSwgMzc1LCAzODIsIDM4NCwgMzkxLCAzOTUsIDQwMywgNDEwLCA0MTUsIDQxNywgNDIyLCA0MjksIAotICAgIDQzMSwgMjk5LCA0MzcsIDQzOSwgNDQ0LCA0NDksIDQ1MiwgNDU3LCA0NjMsIDQ3MCwgNDc5LCA0ODksIDQ5NCwgNDk4LCAKKyAgICAzNjEsIDM2NywgMzY5LCAzNzUsIDM4MiwgMzg0LCAzOTEsIDM5NSwgNDAzLCA0MTAsIDQxMiwgNDE3LCA0MjIsIDQyNywgCisgICAgNDM0LCA0MzYsIDI5OSwgNDQyLCA0NDUsIDQ0NywgNDUyLCA0NTcsIDQ2MywgNDcwLCA0NzksIDQ4OSwgNDk0LCA0OTgsIAogICAgIDUwNSwgNTE4LCA1MjIsIDUzMSwgNTM4LCA1NDUsIDU0OCwgNTU0LCA1NTgsIDU2MiwgNTcyLCA1ODAsIDU4OCwgNTk2LCAKLSAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjU5LCA2NjMsIDY2NiwgNjcwLCA2NzMsIDM0OCwgCi0gICAgNjc4LCA2ODcsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAorICAgIDYwNSwgNjEzLCA2MTgsIDYxOSwgNjIzLCA2MzEsIDYzOCwgNjQ4LCA2NTIsIDY2MywgNjY3LCA2NzAsIDY3MywgNjc4LCAKKyAgICAzNDgsIDY4MiwgNjkxLCA2OTcsIDcwMywgNzA1LCA3MDgsIDcxMSwgNzE0LCA3MTgsIDcyMiwgNzMxLCA3MzksIDc0NCwgCiAgICAgNzQ3LCA3NTEsIDc1NywgNzY0LCA3NzEsIDc3NiwgNzg1LCA3OTQsIDgwMSwgODA1LCA4MTgsIDgyNywgODM1LCA4NDEsIAogICAgIDU1NywgODUwLCA4NjAsIDg2NywgODczLCA4NzksIDg4NiwgODk0LCA4OTgsIDc0OSwgOTA2LCA5MTUsIDUwMywgOTIzLCAKICAgICA5MjgsIDkzNCwgMTcsIDk0MywgOTQ4LCA5NTEsIDk1NSwgOTU5LCA5NjYsIDk2OSwgOTc2LCA5ODAsIDk4OCwgOTkyLCAKLSAgICAxMDAwLCAxMDA0LCAxMDA3LCAxMDE0LCAxMDIxLCAxOTIsIDEwMjQsIDEwMjksIDEwMzksIDEwNDgsIDEwNTUsIDEwNjEsIAotICAgIDEwNjksIDEwNzIsIDEwNzcsIDEwODMsIDEwOTEsIDEwOTcsIDExMDIsIDExMDUsIDExMDgsIDExMSwgMTExMywgMTExNywgCi0gICAgMTEyMywgMTEyOSwgMTEzMiwgMTEzOCwgMTE0MiwgMTE0NywgMTE1MywgMTE1OCwgMTE2OCwgMTE3MiwgMTE3NSwgMTE3OCwgCisgICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYwLCAKKyAgICAxMDY2LCAxMDcyLCAxMDgwLCAxMDgzLCAxMDg4LCAxMDk0LCAxMTAyLCAxMTA3LCAxMTEwLCAxMTEzLCAxMTEsIDExMTgsIAorICAgIDExMjIsIDExMjgsIDExMzQsIDExMzcsIDExNDMsIDExNDcsIDExNTIsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAogICAgIDExODcsIDExOTEsIDExOTQsIDExOTksIDEyMDQsIDEyMTAsIDEyMTUsIDEyMjAsIDEyMjUsIDEyMjksIDEyMzQsIDEyNDAsIAogICAgIDEyNDUsIDEyNTAsIDEyNTQsIDEyNjAsIDEyNjUsIDEyNzAsIDEyNzUsIDEyNzksIDEyODQsIDEyODksIDEyOTQsIDEzMDAsIAogICAgIDEzMDYsIDEzMTIsIDEzMTcsIDEzMjEsIDEzMjYsIDEzMzEsIDEzMzYsIDEzNDAsIDEzNDUsIDEzNTAsIDEzNTUsIDEzNjAsIApAQCAtNDY1MCw3ICs0NjUzLDcgQEAKICAgICAxNjY1LCAxNjcwLCAxNjc1LCAxNjc5LCAxNjgyLCAxNjg3LCAxNjkyLCAxNjk3LCAxNzAyLCAxNzA4LCAxNzEzLCAxNzE3LCAKICAgICAxMzIyLCAxNzIwLCAxNzI1LCAxNzMwLCAxMzI3LCAxNzM0LCAxNzM4LCAxNzQ1LCAxMzMyLCAxNzUyLCAxMzM3LCAxNzU2LCAKICAgICAxNzU4LCAxNzYzLCAxNzY5LCAxMzQxLCAxNzc0LCAxNzgzLCAxMzQ2LCAxNzg4LCAxNzk0LCAxMzUxLCAxNzk5LCAxODA0LCAKLSAgICAxODA3LCAxODEyLCAxODE2LCAxODIwLCAxODI0LCAxODI3LCAxODMxLCAxMzU2LCAxMzYxLCAxMTU2LCAxODM2LCAxODQyLCAKKyAgICAxODA3LCAxODEyLCAxODE2LCAxODIwLCAxODI0LCAxODI3LCAxODMxLCAxMzU2LCAxMzYxLCAxMDU4LCAxODM2LCAxODQyLCAKICAgICAxODQ4LCAxODU0LCAxODYwLCAxODY2LCAxODcyLCAxODc4LCAxODg0LCAxODg5LCAxODk1LCAxOTAxLCAxOTA3LCAxOTEzLCAKICAgICAxOTE5LCAxOTI1LCAxOTMxLCAxOTM3LCAxOTQzLCAxOTQ4LCAxOTUzLCAxOTU4LCAxOTYzLCAxOTY4LCAxOTczLCAxOTc4LCAKICAgICAxOTgzLCAxOTg4LCAxOTkzLCAxOTk5LCAyMDA0LCAyMDEwLCAyMDE1LCAyMDIxLCAyMDI3LCAyMDMyLCAyMDM4LCAyMDQ0LCAKQEAgLTQ2NzcsNyArNDY4MCw3IEBACiAgICAgMzI0MSwgMzI0NSwgMzI0OCwgMzI2MSwgMzI2NSwgMzI2OSwgMzI3MywgMzI3NywgMzI4MSwgMzI4NCwgMzI4OCwgMzI5MiwgCiAgICAgMzI5NywgMzMwMSwgMzMwNiwgMzMxMSwgMzMxNiwgMzMyMCwgMzMyMywgMzMyNiwgMzMzMiwgMzMzNiwgMzM0MCwgMzM0MywgCiAgICAgMzM0NywgMzM1MSwgMzM1NCwgMzM2MCwgMzM2NSwgMzM3MCwgMzM3NiwgMzM4MSwgMzM4NiwgMzM5MiwgMzM5OCwgMzQwMywgCi0gICAgMzQwOCwgMzQxMywgMTExNSwgNTQ3LCAzNDE4LCAzNDIxLCAzNDI2LCAzNDMwLCAzNDMzLCAzNDM3LCAzNDQyLCAzNDQ3LCAKKyAgICAzNDA4LCAzNDEzLCAxMTIwLCA1NDcsIDM0MTgsIDM0MjEsIDM0MjYsIDM0MzAsIDM0MzMsIDM0MzcsIDM0NDIsIDM0NDcsIAogICAgIDM0NTEsIDM0NTYsIDM0NjAsIDM0NjUsIDM0NjksIDM0NzMsIDM0NzksIDM0ODUsIDM0ODgsIDM0OTEsIDM0OTcsIDM1MDQsIAogICAgIDM1MTEsIDM1MTcsIDM1MjQsIDM1MjksIDM1MzMsIDM1NDAsIDM1NDcsIDM1NTIsIDM1NTYsIDM1NjYsIDM1NzAsIDM1NzQsIAogICAgIDM1NzksIDM1ODQsIDM1OTQsIDIxMDcsIDM1OTksIDM2MDMsIDM2MDYsIDM2MTIsIDM2MTcsIDM2MjMsIDM2MjksIDM2MzQsIApAQCAtNDcyNiw3ICs0NzI5LDcgQEAKICAgICA2NjgzLCA2Njk4LCA2NzEzLCA2NzI4LCA2NzQzLCA2NzU4LCA2NzczLCA2Nzg4LCA2ODAzLCA2ODE4LCA2ODMzLCA2ODQ4LCAKICAgICA2ODYzLCA2ODc4LCA2ODkzLCA2OTA4LCA2OTIzLCA2OTM4LCA2OTUzLCA2OTY4LCA2OTgzLCA2OTk4LCA3MDEzLCA3MDI4LCAKICAgICA3MDM3LCA3MDQ2LCA3MDUxLCA3MDU3LCA3MDY3LCA3MDcxLCA3MDc2LCA3MDgxLCA3MDg5LCA3MDkzLCA3MDk2LCA3MTAwLCAKLSAgICAyOTc1LCA3MTAzLCA3MTA4LCAyOTgsIDQ0MiwgNzExNCwgNzEyMiwgNzEyNiwgNzEzMCwgNzEzMywgNzEzNywgNzE0MywgCisgICAgMjk3NSwgNzEwMywgNzEwOCwgMjk4LCA0MjUsIDcxMTQsIDcxMjIsIDcxMjYsIDcxMzAsIDcxMzMsIDcxMzcsIDcxNDMsIAogICAgIDcxNDcsIDcxNTUsIDcxNjEsIDcxNjYsIDcxNzMsIDcxODAsIDcxODYsIDcxOTEsIDcxOTgsIDcyMDQsIDcyMTIsIDcyMTYsIAogICAgIDcyMjEsIDcyMzMsIDcyNDQsIDcyNTEsIDcyNTUsIDcyNTksIDcyNjUsIDMyMzMsIDcyNjksIDcyNzUsIDcyODAsIDcyODUsIAogICAgIDcyOTAsIDcyOTYsIDczMDEsIDczMDYsIDczMTEsIDczMTYsIDczMjIsIDczMjcsIDczMzIsIDczMzgsIDczNDMsIDczNDksIApAQCAtNDc1NSw3MjUyICs0NzU4LDcyNTAgQEAKICAgICA4NjQ1LCA4NjQ5LCA4NjUzLCA4NjU4LCA4NjY1LCA4Njc2LCA4Njg0LCA4Njk0LCA4NzAwLCA4NzA3LCA4NzEyLCA4NzE2LCAKICAgICA4NzI3LCA4NzQwLCA4NzUxLCA4NzY0LCA4Nzc1LCA4Nzg3LCA4Nzk5LCA4ODExLCA4ODI0LCA4ODM3LCA4ODQ0LCA4ODUwLCAKICAgICA4ODY0LCA4ODcxLCA4ODc3LCA4ODgxLCA4ODg2LCA4ODkwLCA4ODk3LCA4OTA1LCA4OTA5LCA4OTE1LCA4OTE5LCA4OTI1LCAKLSAgICA4OTM1LCA4OTM5LCA4OTQ0LCA4OTQ5LCA4OTU2LCA4OTYyLCA4OTcyLCA3OTA5LCA4OTc4LCA4OTgyLCA4OTg5LCA3NjgsIAotICAgIDg5OTMsIDg5OTcsIDkwMDIsIDkwMDcsIDkwMTIsIDkwMTYsIDkwMjIsIDkwMzAsIDkwMzYsIDkwNDAsIDkwNDYsIDkwNTYsIAotICAgIDkwNjAsIDkwNjYsIDkwNzEsIDkwNzUsIDkwODEsIDkwODcsIDIxNjEsIDkwOTIsIDkwOTQsIDkwOTksIDkxMDcsIDkxMTYsIAotICAgIDkxMjAsIDkxMjYsIDkxMzEsIDkxMzYsIDkxNDEsIDkxNDYsIDkxNTIsIDkxNTcsIDkxNjIsIDQwMDYsIDkxNjcsIDkxNzIsIAotICAgIDkxNzYsIDkxODIsIDkxODcsIDkxOTMsIDkxOTgsIDkyMDMsIDkyMDksIDkyMTQsIDkxMjEsIDkyMjAsIDkyMjQsIDkyMzEsIAotICAgIDkyMzcsIDkyNDIsIDkyNDYsIDYxODMsIDkyNTEsIDkyNjAsIDkyNjUsIDkyNzAsIDgyMTgsIDgyMjUsIDkyNzUsIDI4NTMsIAotICAgIDkyNzksIDkyODQsIDkyODksIDkxMzIsIDkyOTMsIDkyOTgsIDkxMzcsIDkxNDIsIDkzMDMsIDkzMTAsIDkzMTcsIDkzMjMsIAotICAgIDkzMjksIDkzMzUsIDkzNDAsIDkzNDUsIDkzNTAsIDkxNDcsIDkxNTMsIDkzNTYsIDkzNjIsIDkzNjcsIDkzNzUsIDkxNTgsIAotICAgIDkzODAsIDk5MCwgOTM4MywgOTM5MSwgOTM5NywgOTQwMywgOTQxMiwgOTQyMCwgOTQyNSwgOTQzMSwgOTQzOSwgOTQ0NiwgCi0gICAgOTQ2MSwgOTQ3OCwgOTQ5NywgOTUwNiwgOTUxNCwgOTUyOSwgOTU0MCwgOTU1MCwgOTU2MCwgOTU2OCwgOTU3NCwgOTU4NiwgCi0gICAgOTU5NSwgOTYwMywgOTYxMCwgOTYxNywgOTYyMywgOTYyOCwgOTYzNiwgOTY0NiwgOTY1MywgOTY2MywgOTY3MywgOTY4MywgCi0gICAgOTY5MSwgOTY5OCwgOTcwNywgOTcxNywgOTczMSwgOTc0NiwgOTc1NSwgOTc2MywgOTc2OCwgOTc3MiwgOTc4MSwgOTc4NywgCi0gICAgOTc5MiwgOTgwMiwgOTgxMiwgOTgyMiwgOTgyNywgOTgzMSwgOTg0MCwgOTg0NSwgOTg1NSwgOTg2NiwgOTg3OSwgOTg4NywgCi0gICAgOTkwMCwgOTkxMiwgOTkyMCwgOTkyNSwgOTkyOSwgOTkzNSwgOTk0MCwgOTk0OCwgOTk1NiwgOTk2MywgOTk2OCwgOTk3NiwgCi0gICAgOTk4MiwgOTk4NSwgOTk4OSwgOTk5NSwgMTAwMDMsIDEwMDA4LCAxMDAxMiwgMTAwMjAsIDEwMDI5LCAxMDAzNywgMTAwNDMsIAotICAgIDEwMDQ3LCAxMDA1NCwgMTAwNjUsIDEwMDY5LCAxMDA3MiwgMTAwNzgsIDkxNjMsIDEwMDgzLCAxMDA4OSwgMTAwOTYsIAotICAgIDEwMTAyLCAxMDEwNywgMTAxMTQsIDEwMTIxLCAxMDEyOCwgMTAxMzUsIDEwMTQyLCAxMDE0OSwgMTAxNTYsIDEwMTYzLCAKLSAgICAxMDE2OCwgOTQ3NCwgMTAxNzMsIDEwMTc5LCAxMDE4NiwgMTAxOTMsIDEwMTk4LCAxMDIwNSwgMTAyMTQsIDEwMjE4LCAKLSAgICAxMDIzMCwgODI1NiwgMTAyMzQsIDEwMjM3LCAxMDI0MSwgMTAyNDUsIDEwMjQ5LCAxMDI1MywgMTAyNTksIDEwMjY1LCAKLSAgICAxMDI3MCwgMTAyNzYsIDEwMjgxLCAxMDI4NiwgMTAyOTIsIDEwMjk3LCAxMDMwMiwgODk1MiwgMTAzMDcsIDEwMzExLCAKLSAgICAxMDMxNSwgMTAzMTksIDEwMzI0LCAxMDMyOSwgMTAzMzcsIDEwMzQzLCAxMDM0NywgMTAzNTEsIDEwMzU4LCAxMDM2MywgCi0gICAgMTAzNzEsIDEwMzc2LCAxMDM4MCwgMTAzODMsIDEwMzg5LCAxMDM5NiwgMTA0MDAsIDEwNDAzLCAxMDQwOCwgMTA0MTIsIAotICAgIDQwNDUsIDEwNDE4LCAxMDQyNywgMzYsIDEwNDM1LCAxMDQ0MSwgMTA0NDYsIDg5NjcsIDEwNDUxLCAxMDQ1NiwgMTA0NjAsIAotICAgIDEwNDYzLCAxMDQ3OCwgMTA0OTcsIDEwNTA5LCAxMDUyMiwgMTA1MzUsIDEwNTQ4LCAxMDU2MiwgMTA1NzUsIDEwNTkwLCAKLSAgICAxMDU5NywgOTE2OCwgMTA2MDMsIDEwNjE3LCAxMDYyMiwgMTA2MjgsIDEwNjMzLCAxMDY0MSwgMTA2NDYsIDgwNDAsIAotICAgIDEwNjUxLCAxMDY1NCwgMTA2NjEsIDEwNjY2LCAxMDY3MCwgMjg1OCwgOTk4LCAxMDY3NiwgMTA2ODAsIDEwNjg2LCAxMDY5MiwgCi0gICAgMTA2OTcsIDEwNzAzLCAxMDcwOCwgOTE3NywgMTA3MTQsIDEwNzIwLCAxMDcyNSwgMTA3MzAsIDEwNzM4LCAxMDc0NCwgCi0gICAgMTA3NTcsIDEwNzY1LCAxMDc3MiwgOTE4MywgMTA3NzgsIDEwNzg2LCAxMDc5NCwgMTA4MDEsIDEwODE0LCAxMDgyNiwgCi0gICAgMTA4MzYsIDEwODQ0LCAxMDg1MSwgMTA4NTgsIDEwODY3LCAxMDg3NiwgMTA4ODQsIDEwODkxLCAxMDg5NiwgMTA5MDIsIAotICAgIDkxODgsIDEwOTA3LCAxMDkxMywgOTE5NCwgMTA5MTgsIDEwOTIxLCAxMDkyOCwgMTA5MzQsIDEwOTQ3LCA4NjY5LCAxMDk1OCwgCi0gICAgMTA5NjQsIDEwOTczLCAxMDk4MSwgMTA5ODgsIDEwOTk0LCAxMTAwMCwgMTEwMDUsIDExMDA5LCAxMTAxNCwgMTA0NzAsIAotICAgIDExMDIwLCA5MTk5LCAxMTAyNywgMTEwMzIsIDExMDM5LCAxMTA0NSwgMTEwNTEsIDExMDU2LCAxMTA2NCwgMTEwNzIsIAotICAgIDExMDc5LCAxMTA4MywgMTEwOTcsIDExMTA3LCAxMTExMiwgMTExMTYsIDExMTI3LCAxMTEzMywgMTExMzgsIDExMTQzLCAKLSAgICA5MjA0LCA5MjEwLCAxMTE0NywgMTExNTAsIDExMTU1LCAxMTE2NywgMTExNzQsIDExMTc5LCAxMTE4MywgMTExODgsIAotICAgIDExMTkyLCAxMTE5OSwgMTEyMDUsIDkyMTUsIDkxMjIsIDExMjEyLCAyODYzLCA4LCAxMTIxOSwgMTEyMjQsIDExMjI4LCAKLSAgICAxMTIzNCwgMTEyNDIsIDExMjUyLCAxMTI1NywgMTEyNjIsIDExMjY5LCAxMTI3NiwgMTEyODAsIDExMjkxLCAxMTMwMSwgCi0gICAgMTEzMTAsIDExMzIyLCAxMTMyNywgMTEzMzEsIDExMzM5LCAxMTM1MywgMTEzNTcsIDExMzYwLCAxMTM2OCwgMTEzNzUsIAotICAgIDExMzgzLCAxMTM4NywgMTEzOTgsIDExNDAyLCAxMTQwOSwgMTE0MTQsIDExNDE4LCAxMTQyNCwgMTE0MjksIDExNDMzLCAKLSAgICAxMTQzOSwgMTE0NDQsIDExNDU1LCAxMTQ1OSwgMTE0NjIsIDExNDY4LCAxMTQ3MywgMTE0NzksIDExNDg1LCAxMTQ5MiwgCi0gICAgMTE1MDMsIDExNTEzLCAxMTUyMywgMTE1MzIsIDExNTM5LCAxMTU0OCwgOTIyNSwgOTIzMiwgOTIzOCwgOTI0MywgMTE1NTQsIAotICAgIDExNTYwLCA5MjQ3LCAxMTU2NiwgMTE1NjksIDExNTc2LCAxMTU4MSwgMTE1OTYsIDExNjEyLCAxMTYyNywgMTE2MzUsIAotICAgIDExNjQxLCAxMTY0NiwgODM4LCA0MjAsIDExNjUxLCAxMTY1OSwgMTE2NjYsIDExNjcyLCAxMTY3NywgMTE2ODIsIDkyNTIsIAotICAgIDExNjg0LCAxMTY4OCwgMTE2OTMsIDExNjk3LCAxMTcwNywgMTE3MTIsIDExNzE2LCAxMTcyNSwgMTE3MjksIDExNzMyLCAKLSAgICA5MjYxLCAxMTczOSwgMTE3NDIsIDExNzUwLCAxMTc1NywgMTE3NjUsIDExNzY5LCAxMTc3NiwgMTE3ODUsIDExNzg4LCAKLSAgICAxMTc5MiwgMTE3OTYsIDExODAyLCAxMTgwNiwgMTE4MTAsIDExODE0LCAxMTgyMCwgMTE4MzAsIDExODM0LCAxMTg0MiwgCi0gICAgMTE4NDYsIDExODUzLCAxMTg1NywgMTE4NjIsIDExODY2LCAxMTg3MywgMTE4NzksIDExODg3LCAxMTg5MywgMTE4OTgsIAotICAgIDExOTA4LCAxMTkxMywgMTE5MTgsIDExOTIyLCAxMTkzMCwgMzkwNSwgMTE5MzgsIDExOTQzLCA5MjY2LCAxMTk0NywgCi0gICAgMTE5NTEsIDExOTU0LCAxMTk2MiwgMTE5NjksIDExOTczLCA1OTkxLCAxMTk3NywgMTE5ODIsIDExOTg2LCAxMTk5NywgCi0gICAgMTIwMDcsIDEyMDEyLCAxMjAxOCwgMTIwMjIsIDEyMDI1LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA1MCwgMTIwNTUsIAotICAgIDkyNzEsIDEyMDYwLCAxMjA2NCwgMTIwNzEsIDE3MjIsIDYxNDUsIDEyMDc2LCAxMjA4MSwgMTIwODYsIDEyMDkxLCAxMjA5NywgCi0gICAgMTIxMDIsIDEyMTA4LCAxMjExMywgMTIxMTgsIDEyMTIzLCAxMjEyOCwgMTIxMzMsIDEyMTM4LCAxMjE0MywgMTIxNDgsIAotICAgIDEyMTUzLCAxMjE1OCwgMTIxNjMsIDEyMTY4LCAxMjE3MywgMTIxNzgsIDEyMTgzLCAxMjE4OCwgMTIxOTQsIDEyMTk5LCAKLSAgICAxMjIwNCwgMTIyMDksIDEyMjE0LCAxMjIxOSwgMTIyMjUsIDEyMjMwLCAxMjIzNSwgMTIyNDEsIDEyMjQ2LCAxMjI1MiwgCi0gICAgMTIyNTcsIDEyMjYzLCAxMjI2OCwgMTIyNzMsIDEyMjc4LCAxMjI4MywgMTIyODksIDEyMjk0LCAxMjI5OSwgMTIzMDQsIAotICAgIDczNywgMTM5LCAxMjMxMiwgMTIzMTYsIDEyMzIxLCAxMjMyNiwgMTIzMzAsIDEyMzM0LCAxMjMzOCwgMTIzNDMsIDEyMzQ3LCAKLSAgICAxMjM1MiwgMTIzNTYsIDEyMzU5LCAxMjM2MywgMTIzNjcsIDEyMzczLCAxMjM3OCwgMTIzODgsIDEyMzk0LCAxMjQwMiwgCi0gICAgMTI0MDYsIDEyNDEwLCAxMjQxNywgMTI0MjUsIDEyNDM0LCAxMjQ0NSwgMTI0NTIsIDEyNDU5LCAxMjQ2MywgMTI0NzIsIAotICAgIDEyNDgxLCAxMjQ4OSwgMTI0OTgsIDEyNTA3LCAxMjUxNiwgMTI1MjUsIDEyNTM1LCAxMjU0NSwgMTI1NTUsIDEyNTY1LCAKLSAgICAxMjU3NSwgMTI1ODQsIDEyNTk0LCAxMjYwNCwgMTI2MTQsIDEyNjI0LCAxMjYzNCwgMTI2NDQsIDEyNjU0LCAxMjY2MywgCi0gICAgMTI2NzMsIDEyNjgzLCAxMjY5MywgMTI3MDMsIDEyNzEzLCAxMjcyMywgMTI3MzIsIDEyNzQyLCAxMjc1MiwgMTI3NjIsIAotICAgIDEyNzcyLCAxMjc4MiwgMTI3OTIsIDEyODAyLCAxMjgxMiwgMTI4MjIsIDEyODMxLCAxMjg0MSwgMTI4NTEsIDEyODYxLCAKLSAgICAxMjg3MSwgMTI4ODEsIDEyODkxLCAxMjkwMSwgMTI5MTEsIDEyOTIxLCAxMjkzMSwgMTI5NDAsIDEyNTYsIDEyOTQ2LCAKLSAgICAxMjk0OSwgMTI5NTMsIDEyOTU4LCAxMjk2NSwgMTI5NzEsIDEyOTc2LCAxMjk4MCwgMTI5ODUsIDEyOTk0LCAxMzAwMiwgCi0gICAgMTMwMDcsIDEzMDExLCAxMzAxNSwgMTMwMjEsIDEzMDI2LCAxMzAzMiwgOTI4MCwgMTMwMzcsIDEzMDQyLCAxMzA1MSwgCi0gICAgOTI4NSwgMTMwNTYsIDEzMDU5LCAxMzA2NSwgMTMwNzMsIDkyOTAsIDEzMDgwLCAxMzA4NCwgMTMwODgsIDEzMDkyLCAKLSAgICAxMzEwMiwgMTMxMDgsIDEzMTE0LCAxMzExOSwgMTMxMjgsIDEzMTM2LCAxMzE0MywgMTMxNTAsIDEzMTU1LCAxMzE2MiwgCi0gICAgMTMxNjcsIDEzMTcxLCAxMzE3NCwgMTMxODUsIDEzMTk1LCAxMzIwNCwgMTMyMTIsIDEzMjIzLCAxMzIzNSwgMTMyNDUsIAotICAgIDEzMjUwLCAxMzI1NCwgMTMyNTksIDEzMjY0LCAxMzI2OCwgMTMyNzQsIDEzMjgyLCAxMzI4OSwgMTMzMDAsIDEzMzA1LCAKLSAgICAxMzMxNSwgMTMzMTksIDEzMzIyLCAxMzMyOSwgMTMzMzksIDEzMzQ4LCAxMzM1NSwgMTMzNTksIDEzMzY2LCAxMzM3MiwgCi0gICAgMTMzNzcsIDEzMzgyLCAxMzM4NiwgMTMzOTUsIDEzNDAwLCAxMzQwNiwgMTM0MTAsIDEzNDE1LCAxMzQxOSwgMTM0MjgsIAotICAgIDEzNDM2LCAxMzQ0NCwgMTM0NTEsIDEzNDU5LCAxMzQ3MSwgMTM0ODIsIDEzNDkyLCAxMzQ5OSwgMTM1MDUsIDEzNTE0LCAKLSAgICAxMzUyNSwgMTM1MzQsIDEzNTQ2LCAxMzU1OCwgMTM1NzAsIDEzNTgwLCAxMzU4OSwgMTM1OTgsIDEzNjA2LCAxMzYxMywgCi0gICAgMTM2MjIsIDEzNjMwLCAxMzYzNCwgMTM2NDAsIDEzNjQ2LCAxMzY1MSwgNzc1MywgMTM2NTUsIDEzNjU3LCAxMzY2MSwgCi0gICAgMTM2NjYsIDEzNjcyLCAxMzY4MSwgMTM2ODUsIDEzNjkzLCAxMzcwMCwgMTM3MDksIDEzNzE4LCAxMzcyNywgMTM3MzYsIAotICAgIDEzNzQ1LCAxMzc1NCwgMTM3NjMsIDEzNzcyLCAxMzc4MiwgMTM3OTIsIDEzODAxLCAxMzgwNywgMTM4MTQsIDEzODIxLCAKLSAgICAxMzgyNywgMTM4NDEsIDEzODQ4LCAxMzg1NiwgMTM4NjUsIDEzODcxLCAxMzg4MCwgMTM4ODksIDEzOTAwLCAxMzkxMCwgCi0gICAgMTM5MTgsIDEzOTI1LCAxMzkzMywgMTM5NDIsIDEzOTU1LCAxMzk2MywgMTM5NzAsIDEzOTgzLCAxMzk4OSwgMTM5OTUsIAotICAgIDE0MDA1LCAxNDAxNCwgMTQwMjMsIDE0MDI4LCAxNDAzMiwgMTQwMzgsIDE0MDQ0LCAxNDA1MSwgODk2NiwgMTQwNTYsIAotICAgIDE0MDYxLCAxNDA2OCwgMTQwNzMsIDEyMzY5LCAxNDA3OCwgMTQwODYsIDE0MDkyLCAxNDA5NywgMTQxMDUsIDE0MTEzLCAKLSAgICAxNDEyMCwgMTQxMjgsIDE0MTM0LCAxNDE0MiwgMTQxNTAsIDE0MTU2LCAxNDE2MSwgMTQxNjcsIDE0MTc0LCAxNDE4MCwgCi0gICAgMTQxODUsIDE0MTg5LCAxNDIwMCwgMTQyMDgsIDE0MjE0LCAxNDIxOSwgMTQyMjgsIDE0MjM0LCAxNDIzOSwgMTQyNDgsIAotICAgIDE0MjYyLCAzODUzLCAxNDI2NiwgMTQyNzEsIDE0Mjc2LCAxNDI4MiwgMTQyODcsIDE0MjkyLCAxNDI5NiwgMTQzMDEsIAotICAgIDE0MzA2LCAxNDMxMSwgNzc1MiwgMTQzMTYsIDE0MzIxLCAxNDMyNiwgMTQzMzEsIDE0MzM2LCAxNDM0MCwgMTQzNDUsIAotICAgIDE0MzUwLCAxNDM1NSwgMTQzNjAsIDE0MzY2LCAxNDM3MiwgMTQzNzcsIDE0MzgxLCAxNDM4NiwgMTQzOTEsIDE0Mzk2LCAKLSAgICA5Mjk0LCAxNDQwMSwgMTQ0MDYsIDE0NDExLCAxNDQxNiwgMTQ0MjEsIDE0NDM4LCAxNDQ1NiwgMTQ0NjgsIDE0NDgxLCAKLSAgICAxNDQ5OCwgMTQ1MTQsIDE0NTMxLCAxNDU0MSwgMTQ1NjAsIDE0NTcxLCAxNDU4MiwgMTQ1OTMsIDE0NjA0LCAxNDYxNiwgCi0gICAgMTQ2MjcsIDE0NjM4LCAxNDY1NSwgMTQ2NjYsIDE0Njc3LCAxNDY4MiwgOTI5OSwgMTQ2ODcsIDE0NjkxLCAyMzgxLCAKLSAgICAxNDY5NSwgMTQ2OTgsIDE0NzA0LCAxNDcxMiwgMTQ3MjAsIDE0NzI1LCAxNDczMywgMTQ3NDEsIDE0NzQ4LCAxNDc1MywgCi0gICAgMTQ3NTksIDE0NzY2LCAxNDc3NCwgMTQ3ODEsIDE0NzkzLCAxNDgwMSwgMTQ4MDYsIDExNTkwLCAxNDgxMiwgMTQ4MjEsIAotICAgIDE0ODMwLCAxNDgzOCwgMTQ4NDUsIDE0ODUxLCAxNDg1OSwgMTQ4NjYsIDE0ODcyLCAxNDg3OSwgMTQ4ODUsIDE0ODk0LCAKLSAgICAxNDkwMiwgMTQ5MTIsIDE0OTE5LCAxNDkyNSwgMTQ5MzMsIDE0OTM5LCAxNDk0NywgMTQ5NTQsIDE0OTY3LCAxNDk3NCwgCi0gICAgMTQ5ODMsIDE0OTkyLCAxNTAwMSwgMTUwMDksIDE1MDE5LCAxNTAyNiwgMTUwMzEsIDM1NjAsIDE1MDM4LCAxNTA0MywgCi0gICAgMTM3MiwgMTUwNDcsIDE0MzE3LCAxNTA1MSwgMTUwNTcsIDE1MDYxLCAxNTA2OSwgMTUwODEsIDE1MDg2LCAxNTA5MywgCi0gICAgMTUwOTksIDE1MTA0LCAxNTExMSwgMTQzMjIsIDE1MTE1LCAxNTExOSwgMTUxMjMsIDE0MzI3LCAxNTEyNywgMTQzMzIsIAotICAgIDE1MTMxLCAxNTEzOCwgMTUxNDMsIDE1MTQ3LCAxNTE1NCwgMTUxNTgsIDE1MTY2LCAxNTE3MywgMTUxNzcsIDE1MTg0LCAKLSAgICAxNTIwMSwgMTUyMTAsIDE1MjE0LCAxNTIxNywgMTUyMjUsIDE1MjMxLCAxNTIzNiwgMzYzOCwgMTUyNDAsIDE1MjQyLCAKLSAgICAxNTI1MCwgMTUyNTcsIDE1MjY3LCAxNTI3OSwgMTUyODQsIDE1MjkwLCAxNTI5NSwgMTUyOTksIDE1MzA1LCAxNTMxMCwgCi0gICAgMTUzMTYsIDE1MzE5LCAxNTMyNiwgMTUzMzQsIDE1MzQxLCAxNTM0NywgMTUzNTMsIDE1MzU4LCAxNTM2NSwgMTUzNzEsIAotICAgIDE1Mzc2LCAxNTM4MywgMTUzODcsIDE1MzkzLCAxNTM5NywgMTU0MDQsIDE1NDEwLCAxNTQxNiwgMTU0MjQsIDE1NDMwLCAKLSAgICAxNTQzNSwgMTU0NDEsIDE1NDQ5LCAxNTQ1NywgMTU0NjMsIDE1NDY5LCAxNTQ3NCwgMTU0ODEsIDE1NDg2LCAxNTQ5MCwgCi0gICAgMTU0OTYsIDE1NTAxLCAxNTUwOCwgMTU1MTMsIDE1NTE5LCAxNTUyMiwgMTU1MjgsIDE1NTM0LCAxNTUzNywgMTU1NDEsIAotICAgIDE1NTUzLCAxNTU1OSwgMTU1NjQsIDE1NTcxLCAxNTU3NywgMTU1ODMsIDE1NTk0LCAxNTYwNCwgMTU2MTMsIDE1NjIxLCAKLSAgICAxNTYyOCwgMTU2MzksIDE1NjQ5LCAxNTY1OSwgMTU2NjcsIDE1NjcwLCAxNDM0NiwgMTU2NzUsIDE1NjgwLCAxNDM1MSwgCi0gICAgMTQ0ODYsIDE1Njg4LCAxNTcwMSwgMTU3MTYsIDE1NzI3LCAxNDUwMywgMTU3NDUsIDE1NzU4LCAxNTc3MSwgMTU3ODIsIAotICAgIDEwNDg1LCAxNTc5MywgMTU4MDYsIDE1ODI1LCAxNTgzNiwgMTU4NDcsIDE1ODU4LCAyNjQ5LCAxNTg3MSwgMTU4NzUsIAotICAgIDE1ODgzLCAxNTg5OCwgMTU5MTMsIDE1OTI0LCAxNTkzMSwgMTU5MzcsIDE1OTQ1LCAxNTk0OSwgMTU5NTUsIDE1OTU4LCAKLSAgICAxNTk2OCwgMTU5NzYsIDE1OTgzLCAxNTk5MSwgMTYwMDEsIDE2MDA2LCAxNjAxMywgMTYwMTgsIDE2MDI1LCAxNjAzNiwgCi0gICAgMTYwNDYsIDE2MDUyLCAxNjA1NywgMTYwNjIsIDE0MzU2LCAxNjA2NiwgMTYwNzIsIDE2MDc4LCAxNjA4MywgMTYwODgsIAotICAgIDE2MDkzLCAxNjA5NywgMTQzNjEsIDE0MzY3LCAxNjEwMSwgMTQzNzMsIDE2MTA2LCAxNjExNCwgMTYxMjMsIDE2MTMwLCAKLSAgICA5MTQzLCAxNjEzNCwgMTYxMzYsIDE2MTQxLCAxNjE0NiwgMTYxNTIsIDE2MTU3LCAxNjE2MiwgMTYxNjcsIDE2MTcyLCAKLSAgICAxNjE3NiwgMTYxODIsIDE2MTg4LCAxNjE5MywgMTYxOTksIDE2MjA0LCAxNjIwOSwgMTYyMTUsIDE2MjIwLCAxNjIyNSwgCi0gICAgMTYyMzAsIDE2MjM1LCAxNjI0MSwgMTYyNDYsIDE2MjUxLCAxNjI1NywgMTYyNjMsIDE2MjY4LCAxNjI3MywgMTYyODAsIAotICAgIDE2Mjg2LCAxNjI5NywgMTYzMDQsIDE2MzA5LCAxNjMxMywgMTYzMTcsIDE2MzIwLCAxNjMyOCwgMTYzMzMsIDE2MzQwLCAKLSAgICAxNjM0NywgMTYzNTMsIDE2MzU4LCAxNjM2MywgMTYzNzAsIDE2MzgwLCAxNjM4NSwgMTYzOTIsIDE2Mzk4LCAxNjQwOCwgCi0gICAgMTY0MTgsIDE2NDMyLCAxNjQ0NiwgMTY0NjAsIDE2NDc0LCAxNjQ4OSwgMTY1MDQsIDE2NTIxLCAxNjUzOSwgMTY1NTIsIAotICAgIDE2NTU4LCAxNjU2MywgMTY1NjgsIDE2NTcyLCAxNjU3NywgMTY1ODUsIDE2NTkxLCAxNjU5NiwgMTY2MDEsIDE2NjA1LCAKLSAgICAxNjYxMCwgMTY2MTQsIDE2NjE5LCAxNjYyMywgMTY2MzQsIDE2NjQwLCAxNjY0NSwgMTY2NTAsIDE2NjU3LCAxNjY2MiwgCi0gICAgMTY2NjYsIDE2NjcxLCAxNjY3NiwgMTY2ODIsIDE2Njg5LCAxNjY5NSwgMTY3MDAsIDE2NzA0LCAxNjcxMCwgMTY3MTUsIAotICAgIDE2NzIwLCAxNjcyNCwgMTY3MzAsIDE2NzM1LCAxNjc0MCwgMTY3NDcsIDE2NzUyLCAxMzEwNCwgMTY3NTYsIDE2NzYxLCAKLSAgICAxNjc2NSwgMTY3NzAsIDE2Nzc2LCAxNjc4MiwgMTY3ODksIDE2Nzk5LCAxNjgwNywgMTY4MTQsIDE2ODE5LCAxNjgyMywgCi0gICAgMTY4MzIsIDE2ODQwLCAxNjg0NywgMTY4NTQsIDE2ODYwLCAxNjg2NiwgMTY4NzEsIDE2ODc2LCAxNjg4MiwgMTY4ODcsIAotICAgIDE2ODkzLCAxNjg5OCwgMTY5MDQsIDE2OTEwLCAxNjkxNywgMTY5MjMsIDE2OTI4LCAxNjkzMywgOTM0MSwgMTY5NDIsIAotICAgIDE2OTQ1LCAxNjk1MSwgMTY5NTYsIDE2OTYxLCAxNjk3MSwgMTY5NzgsIDE2OTg0LCAxNjk4OSwgMTY5OTQsIDE3MDAwLCAKLSAgICAxNzAwNSwgMTcwMTEsIDE3MDE2LCAxNzAyMiwgMTcwMjgsIDE3MDMzLCAxNzA0MSwgMTcwNDgsIDE3MDUzLCAxNzA1OCwgCi0gICAgMTcwNjQsIDE3MDY5LCAxNzA3MywgMTcwODIsIDE3MDkzLCAxNzEwMCwgMTcxMDUsIDE3MTEzLCAxNzExOSwgMTcxMjYsIAotICAgIDE3MTMyLCAxNzEzNywgMTcxNDEsIDE3MTQ3LCAxNzE1MiwgMTcxNTcsIDE3MTYyLCAxNDQwLCA3Nzc3LCAyODc3LCAxNzE2NiwgCi0gICAgMTcxNzAsIDE3MTc0LCAxNzE3OCwgMTcxODIsIDE3MTg2LCAxNzE4OSwgMTcxOTYsIDE3MjA0LCAxNDM4NywgMTcyMTEsIAotICAgIDE3MjIxLCAxNzIyOSwgMTcyMzYsIDE3MjQ0LCAxNzI1NCwgMTcyNjMsIDE3Mjc2LCAxNzI4MSwgMTcyODYsIDE3Mjk0LCAKLSAgICAxNzMwMSwgMTMyMDAsIDEzMjA5LCAxNzMwOCwgMTczMTgsIDE3MzMzLCAxNzMzOSwgMTczNDYsIDE3MzUzLCAxNzM1OSwgCi0gICAgMTczNjcsIDE3Mzc3LCAxNzM4NywgMTQzOTIsIDE3Mzk2LCAxNzQwMiwgMTc0MDgsIDE3NDE2LCAxNzQyNCwgMTc0MjksIAotICAgIDE3NDM4LCAxNzQ0NiwgMTc0NTgsIDE3NDY4LCAxNzQ3OCwgMTc0ODgsIDE3NDk3LCAxNzUwOSwgMTc1MTksIDE3NTI5LCAKLSAgICAxNzU0MCwgMTc1NDUsIDE3NTU3LCAxNzU2OSwgMTc1ODEsIDE3NTkzLCAxNzYwNSwgMTc2MTcsIDE3NjI5LCAxNzY0MSwgCi0gICAgMTc2NTMsIDE3NjY1LCAxNzY3NiwgMTc2ODgsIDE3NzAwLCAxNzcxMiwgMTc3MjQsIDE3NzM2LCAxNzc0OCwgMTc3NjAsIAotICAgIDE3NzcyLCAxNzc4NCwgMTc3OTYsIDE3ODA3LCAxNzgxOSwgMTc4MzEsIDE3ODQzLCAxNzg1NSwgMTc4NjcsIDE3ODc5LCAKLSAgICAxNzg5MSwgMTc5MDMsIDE3OTE1LCAxNzkyNywgMTc5MzgsIDE3OTUwLCAxNzk2MiwgMTc5NzQsIDE3OTg2LCAxNzk5OCwgCi0gICAgMTgwMTAsIDE4MDIyLCAxODAzNCwgMTgwNDYsIDE4MDU4LCAxODA2OSwgMTgwODEsIDE4MDkzLCAxODEwNSwgMTgxMTcsIAotICAgIDE4MTI5LCAxODE0MSwgMTgxNTMsIDE4MTY1LCAxODE3NywgMTgxODksIDE4MjAwLCAxODIxMiwgMTgyMjQsIDE4MjM2LCAKLSAgICAxODI0OCwgMTgyNjAsIDE4MjcyLCAxODI4NCwgMTgyOTYsIDE4MzA4LCAxODMyMCwgMTgzMzEsIDE4MzQzLCAxODM1NSwgCi0gICAgMTgzNjcsIDE4Mzc5LCAxODM5MSwgMTg0MDMsIDE4NDE1LCAxODQyNywgMTg0MzksIDE4NDUxLCAxODQ2MiwgMTg0NzQsIAotICAgIDE4NDg2LCAxODQ5OCwgMTg1MTAsIDE4NTIzLCAxODUzNiwgMTg1NDksIDE4NTYyLCAxODU3NSwgMTg1ODgsIDE4NjAxLCAKLSAgICAxODYxMywgMTg2MjYsIDE4NjM5LCAxODY1MiwgMTg2NjUsIDE4Njc4LCAxODY5MSwgMTg3MDQsIDE4NzE3LCAxODczMCwgCi0gICAgMTg3NDMsIDE4NzU1LCAxODc2OCwgMTg3ODEsIDE4Nzk0LCAxODgwNywgMTg4MjAsIDE4ODMzLCAxODg0NiwgMTg4NTksIAotICAgIDE4ODcyLCAxODg4NSwgMTg4OTcsIDE4OTEwLCAxODkyMywgMTg5MzYsIDE4OTQ5LCAxODk2MiwgMTg5NzUsIDE4OTg4LCAKLSAgICAxOTAwMSwgMTkwMTQsIDE5MDI3LCAxOTAzOSwgMTkwNTIsIDE5MDY1LCAxOTA3OCwgMTkwOTEsIDE5MTA0LCAxOTExNywgCi0gICAgMTkxMzAsIDE5MTQzLCAxOTE1NiwgMTkxNjksIDE5MTgxLCAxOTE5NCwgMTkyMDcsIDE5MjIwLCAxOTIzMywgMTkyNDYsIAotICAgIDE5MjU5LCAxOTI3MiwgMTkyODUsIDE5Mjk4LCAxOTMxMSwgMTkzMjMsIDE5MzM0LCAxOTM0NywgMTkzNjAsIDE5MzczLCAKLSAgICAxOTM4NiwgMTkzOTksIDE5NDEyLCAxOTQyNSwgMTk0MzgsIDE5NDUxLCAxOTQ2NCwgMTk0NzYsIDE5NDg5LCAxOTUwMiwgCi0gICAgMTk1MTUsIDE5NTI4LCAxOTU0MSwgMTk1NTQsIDE5NTY3LCAxOTU4MCwgMTk1OTMsIDE5NjA2LCAxOTYxOCwgMTk2MzEsIAotICAgIDE5NjQ0LCAxOTY1NywgMTk2NzAsIDE5NjgzLCAxOTY5NiwgMTk3MDksIDE5NzIyLCAxOTczNSwgMTk3NDgsIDE5NzYwLCAKLSAgICAxOTc3MywgMTk3ODYsIDE5Nzk5LCAxOTgxMiwgMTk4MjUsIDE5ODM4LCAxOTg1MSwgMTk4NjQsIDE5ODc3LCAxOTg5MCwgCi0gICAgMTk5MDIsIDE5OTE1LCAxOTkyOCwgMTk5NDEsIDE5OTU0LCAxOTk2NywgMTk5ODAsIDE5OTkzLCAyMDAwNiwgMjAwMTksIAotICAgIDIwMDMyLCAyMDA0NCwgMjAwNTcsIDIwMDcwLCAyMDA4MywgMjAwOTYsIDIwMTA5LCAyMDEyMiwgMjAxMzUsIDIwMTQ4LCAKLSAgICAyMDE2MSwgMjAxNzQsIDIwMTg2LCAyMDE5OSwgMjAyMTIsIDIwMjI1LCAyMDIzOCwgMjAyNTEsIDIwMjY0LCAyMDI3NywgCi0gICAgMjAyOTAsIDIwMzAzLCAyMDMxNiwgMjAzMjgsIDIwMzQxLCAyMDM1NCwgMjAzNjcsIDIwMzgwLCAyMDM5MywgMjA0MDYsIAotICAgIDIwNDE5LCAyMDQzMiwgMjA0NDUsIDIwNDU4LCAyMDQ3MCwgMjA0ODMsIDIwNDk2LCAyMDUwOSwgMjA1MjIsIDIwNTM1LCAKLSAgICAyMDU0OCwgMjA1NjEsIDIwNTc0LCAyMDU4NywgMjA2MDAsIDIwNjEyLCAyMDYyNSwgMjA2MzgsIDIwNjUxLCAyMDY2NCwgCi0gICAgMjA2NzcsIDIwNjkwLCAyMDcwMywgMjA3MTYsIDIwNzI5LCAyMDc0MiwgMjA3NTQsIDIwNzY1LCAyMDc3MywgMjA3ODEsIAotICAgIDIwNzg4LCAyMDc5NCwgMjA3OTgsIDIwODA0LCAyMDgxMCwgMjA4MTgsIDIwODI0LCAyMDgyOSwgMjA4MzMsIDIwODQyLCAKLSAgICA5MTQ4LCAyMDg1MywgMjA4NjAsIDIwODY4LCAyMDg3NSwgMjA4ODIsIDEwOTQxLCAyMDg4OSwgMjA4OTgsIDIwOTAzLCAKLSAgICAyMDkwOCwgNzgwNSwgMjA5MTUsIDIwOTIwLCAyMDkyMywgMjA5MjgsIDIwOTM2LCAyMDk0MywgMjA5NTAsIDIwOTU3LCAKLSAgICAyMDk2MywgMjA5NzIsIDIwOTgxLCAyMDk4NywgMjA5OTYsIDIxMDAwLCAyMTAwNiwgMjEwMTEsIDIxMDIxLCAyMTAyOCwgCi0gICAgMjEwMzQsIDIxMDQyLCAyMTA0OCwgMjEwNTUsIDIxMDY1LCAyMTA3NCwgMjEwNzgsIDIxMDg1LCAyMTA4OSwgMjEwOTQsIAotICAgIDIxMTAwLCAyMTEwOCwgMjExMTIsIDIxMTIyLCAxNDQwMiwgMjExMzEsIDIxMTM3LCAyMTE0MSwgMjExNTAsIDE0NDA3LCAKLSAgICAyMTE1NiwgMjExNjMsIDIxMTc0LCAyMTE4MiwgMjExOTEsIDIxMTk5LCA4OTMxLCAyMTIwNywgMjEyMTIsIDIxMjE4LCAKLSAgICAyMTIyMywgMjEyMjcsIDIxMjMxLCAyMTIzNSwgOTYzMiwgMjEyNDAsIDIxMjQ4LCAyMTI1NSwgMjEyNjQsIDIxMjcxLCAKLSAgICAyMTI3OCwgMTA4NzEsIDIxMjg1LCAyMTI5MSwgMjEyOTUsIDIxMzAxLCAyMTMwOCwgMjEzMTQsIDIxMzIyLCAyMTMyOCwgCi0gICAgMjEzMzUsIDIxMzQxLCAyMTM0NywgMjEzNTYsIDIxMzYwLCAyMTM2OCwgMjEzNzcsIDIxMzg0LCAyMTM4OSwgMjEzOTMsIAotICAgIDIxNDA0LCAyMTQwOSwgMjE0MTQsIDIxNDE5LCAyMTQzMiwgNzk5NSwgMjE0MzYsIDIxNDQyLCAyMTQ1MCwgMjE0NTQsIAotICAgIDIxNDYxLCAyMTQ3MCwgMjE0NzUsIDE0Njc4LCAyMTQ4MywgMjE0ODcsIDIxNDk5LCAyMTUwNCwgMjE1MDgsIDIxNTExLCAKLSAgICAyMTUxNywgMjE1MjMsIDIxNTI4LCAyMTUzMiwgMjE1MzUsIDIxNTQ2LCAyMTU1MSwgOTM3NiwgMjE1NTgsIDIxNTYzLCAKLSAgICA5MzgxLCAyMTU2OCwgMjE1NzMsIDIxNTc4LCAyMTU4MywgMjE1ODgsIDIxNTkzLCAyMTU5OCwgMjE2MDMsIDIxNjA4LCAKLSAgICAyMTYxMywgMjE2MTgsIDIxNjIzLCAyMTYyOSwgMjE2MzQsIDIxNjM5LCAyMTY0NCwgMjE2NDksIDIxNjU0LCAyMTY1OSwgCi0gICAgMjE2NjQsIDIxNjY5LCAyMTY3NCwgMjE2ODAsIDIxNjg2LCAyMTY5MSwgMjE2OTYsIDIxNzAxLCAyMTcwNiwgMjE3MTEsIAotICAgIDIxNzE2LCAyMTcyMSwgMjE3MjYsIDIxNzMxLCAyMTczNywgMjE3NDIsIDIxNzQ3LCAyMTc1MiwgMjE3NTgsIDIxNzY0LCAKLSAgICAyMTc2OSwgMjE3NzQsIDIxNzc5LCAyMTc4NCwgMjE3ODksIDIxNzk0LCAyMTc5OSwgMjE4MDQsIDIxODEwLCAyMTgxNSwgCi0gICAgMjE4MjAsIDIxODI1LCAyMTgzMCwgMjE4MzYsIDIxODQxLCAyMTg0NiwgMjE4NTAsIDEzNjgsIDEyOSwgMjE4NTgsIDIxODYyLCAKLSAgICAyMTg2NiwgMjE4NzAsIDIxODc1LCAyMTg3OSwgMTMxMTAsIDEyNDY5LCAyMTg4MywgMjE4ODgsIDIxODkyLCAyMTg5NywgCi0gICAgMjE5MDEsIDIxOTA2LCAyMTkxMCwgMjE5MTYsIDIxOTIxLCAyMTkyNSwgMjE5MjksIDIxOTM3LCAyMTk0MSwgMjE5NDUsIAotICAgIDIxOTUwLCAyMTk1NSwgMjE5NTksIDIxOTY1LCAyMTk3MCwgMjE5NzQsIDIxOTc5LCAyMTk4NCwgMjE5ODgsIDIxOTk1LCAKLSAgICAyMjAwMiwgMjIwMDksIDIyMDEzLCAyMjAxNywgMjIwMjIsIDIyMDI2LCAyMjAyOSwgMjIwMzUsIDIyMDQ4LCAyMjA1MywgCi0gICAgMjIwNjIsIDIyMDY3LCA5NDIxLCAyMjA3MiwgMjIwNzUsIDI3MTIsIDI3MTcsIDIyMDc5LCAyMjA4NSwgMjIwOTEsIDcyMDksIAotICAgIDIyMDk2LCAyMjEwMSwgMjIxMDYsIDIyMTEyLCAyMjExNywgMTM4OTYsIDIyMTIyLCAyMjEyNywgMjIxMzIsIDIyMTM3LCAKLSAgICAyMjE0MywgMjIxNDgsIDIyMTUzLCAyMjE1OSwgMjIxNjQsIDIyMTY4LCAyMjE3MywgMjIxNzgsIDIyMTgzLCAyMjE4OCwgCi0gICAgMjIxOTIsIDIyMTk3LCAyMjIwMSwgMjIyMDYsIDIyMjExLCAyMjIxNiwgMjIyMjEsIDIyMjI1LCAyMjIzMCwgMjIyMzQsIAotICAgIDIyMjM5LCAyMjI0NCwgMjIyNDksIDIyMjU0LCAyODg2LCAyMjE2OSwgMjIyNTgsIDIyMjY2LCAyMjI3MywgOTcyNiwgCi0gICAgMjIyODUsIDIyMjkzLCAyMjE3NCwgMjIzMDAsIDIyMzA1LCAyMjMxMywgMjIxNzksIDIyMzE4LCAyMjMyMywgMjIzMzEsIAotICAgIDIyMzM2LCAyMjE4NCwgMjIzNDEsIDIyMzQ2LCAyMjM1MCwgMjIzNTYsIDIyMzY0LCAyMjM2NywgMjIzNzQsIDIyMzc4LCAKLSAgICAyMjM4MiwgMjIzODgsIDIyMzk1LCAyMjQwMCwgODk1OCwgMTcyNywgMTczMiwgMjI0MDQsIDIyNDEwLCAyMjQxNiwgMjI0MjEsIAotICAgIDIyNDI1LCAyMjQyOSwgMjI0MzMsIDIyNDM3LCAyMjQ0MSwgMjI0NDUsIDIyNDQ5LCAyMjQ1MiwgMjI0NTgsIDIyNDY1LCAKLSAgICAyMjQ3MywgMjI0NzksIDIyNDg1LCAyMjQ5MCwgMjI0OTUsIDIyNDk5LCAxMzgxNiwgMTM4MjMsIDIyNTA0LCAyMjUxNiwgCi0gICAgMjI1MTksIDIyNTI2LCAxNjM0OSwgMjI1MzMsIDIyNTQxLCAyMjU1MiwgMjI1NjEsIDIyNTc0LCAyMjU4NCwgMjI1OTgsIAotICAgIDIyNjEwLCAyMjYyNCwgMjI2MzYsIDIyNjQ2LCAyMjY1OCwgMjI2NjQsIDIyNjc5LCAyMjcwMywgMjI3MjEsIDIyNzQwLCAKLSAgICAyMjc1MywgMjI3NjcsIDIyNzg1LCAyMjgwMSwgMjI4MTgsIDIyODM2LCAyMjg0NywgMjI4NjYsIDIyODgzLCAyMjkwMywgCi0gICAgMjI5MjEsIDIyOTMzLCAyMjk0NywgMjI5NjEsIDIyOTczLCAyMjk5MCwgMjMwMDksIDIzMDI3LCAyMzAzOSwgMjMwNTcsIAotICAgIDIzMDc2LCAxNDU0NiwgMjMwODksIDIzMTA5LCAyMzEyMSwgMTA1MTYsIDIzMTMzLCAyMzEzOCwgMjMxNDMsIDIzMTQ4LCAKLSAgICAyMzE1NCwgMjMxNTksIDIzMTYzLCAyMzE3MCwgMjM5OCwgMjMxNzQsIDIzMTgwLCAyMzE4NCwgMjMxODcsIDIzMTkxLCAKLSAgICAyMzE5OSwgMjMyMDUsIDIyMjAyLCAyMzIwOSwgMjMyMTgsIDIzMjI5LCAyMzIzNSwgMjMyNDEsIDIzMjUwLCAyMzI1OCwgCi0gICAgMjMyNjUsIDIzMjcwLCAyMzI3NCwgMjMyODEsIDIzMjg3LCAyMzI5NiwgMjMzMDQsIDIzMzExLCAyMzMyMSwgMjMzMzAsIAotICAgIDIzMzQwLCAyMzM0NSwgMjMzNTQsIDIzMzYzLCAyMzM3NCwgMjMzODUsIDM5NjMsIDIzMzk1LCAyMzM5OSwgMjM0MDksIAotICAgIDIzNDE3LCAyMzQyNywgMjM0MzgsIDIzNDQzLCAyMzQ1MywgMjM0NjEsIDIzNDY4LCAyMzQ3NCwgMjM0ODEsIDIzNDg2LCAKLSAgICAyMjIxMiwgMjM0OTAsIDIzNDk5LCAyMzUwMywgMjM1MDYsIDIzNTExLCAyMzUxOCwgMjM1MjcsIDIzNTM1LCAyMzU0MywgCi0gICAgMjM1NTMsIDIzNTYyLCAyMzU2OCwgMjM1NzQsIDIyMjE3LCAyMjIyMiwgMjM1NzgsIDIzNTg4LCAyMzU5OCwgMjM2MDgsIAotICAgIDIzNjE2LCAyMzYyMywgMjM2MzMsIDIzNjQxLCAyMzY0OSwgMjM2NTUsIDIzNjYzLCA5MzAsIDIzNjcyLCAxNDczNywgNTQyLCAKLSAgICAyMzY4NiwgMjM2OTUsIDIzNzAzLCAyMzcxNCwgMjM3MjUsIDIzNzM1LCAyMzc0NCwgMjM3NTYsIDIzNzY1LCAyMzc3NCwgCi0gICAgMjM3ODAsIDIzNzg5LCAyMzc5OCwgMjM4MDgsIDIzODE2LCAyMzgyNCwgOTM1MywgMjM4MzAsIDIzODMzLCAyMzgzNywgCi0gICAgMjM4NDIsIDIzODQ3LCA5ODQxLCAyMjIzNSwgMjIyNDAsIDIzODU1LCAyMzg2MSwgMjM4NjcsIDIzODcyLCAyMzg3NywgCi0gICAgMjM4ODEsIDIzODg5LCAyMzg5NSwgMjM5MDEsIDIzOTA1LCAzNTI1LCAyMzkxMywgMjM5MTgsIDIzOTIzLCAyMzkyNywgCi0gICAgMjM5MzEsIDk5MjEsIDIzOTM4LCAyMzk0NiwgMjM5NjAsIDIzOTY3LCAyMzk3MywgOTkzMCwgOTkzNiwgMjM5ODEsIDIzOTg5LCAKLSAgICAyMzk5NiwgMjQwMDEsIDI0MDA2LCAyMjI0NSwgMjQwMTIsIDI0MDIzLCAyNDAyNywgMjQwMzIsIDI2MDEsIDI0MDM3LCAKLSAgICAyNDA0OCwgMjQwNTQsIDI0MDU5LCAyNDA2MywgMjQwNjcsIDI0MDcwLCAyNDA3NywgMjQwODQsIDI0MDkxLCAyNDA5NywgCi0gICAgMjQxMDEsIDIyMjUwLCAyNDEwNiwgMjQxMTAsIDI0MTE0LCAxMDM3LCAyNDExOSwgMjQxMjQsIDI0MTI5LCAyNDEzNCwgCi0gICAgMjQxMzksIDI0MTQ0LCAyNDE0OSwgMjQxNTQsIDI0MTU5LCAyNDE2NCwgMjQxNjksIDI0MTc0LCAyNDE3OSwgMjQxODQsIAotICAgIDI0MTkwLCAyNDE5NSwgMjQyMDAsIDI0MjA1LCAyNDIxMCwgMjQyMTUsIDI0MjIwLCAyNDIyNiwgMjQyMzEsIDI0MjM2LCAKLSAgICAyNDI0MSwgMjQyNDYsIDI0MjUxLCAyNDI1NiwgMjQyNjEsIDI0MjY3LCAyNDI3MywgMjQyNzgsIDI0Mjg0LCAyNDI4OSwgCi0gICAgMjQyOTQsIDUsIDI0MzAwLCAyNDMwNCwgMjQzMDgsIDI0MzEyLCAyNDMxNywgMjQzMjEsIDI0MzI1LCAyNDMyOSwgMjQzMzMsIAotICAgIDI0MzM4LCAyNDM0MiwgMjQzNDcsIDI0MzUxLCAyNDM1NCwgMjQzNTgsIDI0MzYzLCAyNDM2NywgMjQzNzIsIDI0Mzc2LCAKLSAgICAyNDM4MCwgMjQzODQsIDI0Mzg5LCAyNDM5MywgMjQzOTcsIDI0NDA3LCAyNDQxMiwgMjQ0MTYsIDI0NDIwLCAyNDQyNSwgCi0gICAgMjQ0MzAsIDI0NDM5LCAyNDQ0NCwgMjQ0NDksIDI0NDUzLCAyNDQ1NywgMjQ0NzAsIDI0NDgyLCAyNDQ5MSwgMjQ1MDAsIAotICAgIDI0NTA2LCAyNDUxMSwgMjQ1MTUsIDI0NTE5LCAyNDUyOSwgMjQ1MzgsIDI0NTQ2LCAyNDU1MiwgMjQ1NTcsIDI0NTYxLCAKLSAgICAyNDU2OCwgMjQ1NzgsIDI0NTg3LCAyNDU5NSwgMjQ2MDMsIDI0NjEwLCAyNDYxOCwgMjQ2MjcsIDI0NjM2LCAyNDY0NCwgCi0gICAgMjQ2NDksIDI0NjUzLCAyNDY1NywgMjQ2NjAsIDI0NjYyLCAyNDY2NiwgMjQ2NzAsIDI0Njc1LCAyNDY4MCwgMjQ2ODQsIAotICAgIDI0Njg4LCAyNDY5MSwgMjQ2OTUsIDI0Njk4LCAyNDcwMiwgMjQ3MDUsIDI0NzA4LCAyNDcxMiwgMjQ3MTgsIDI0NzIyLCAKLSAgICAyNDcyNiwgMjQ3MzAsIDI0NzM1LCAyNDc0MCwgMjQ3NDUsIDI0NzQ5LCAyNDc1MiwgMjQ3NTcsIDI0NzYzLCAyNDc2OCwgCi0gICAgMjQ3NzQsIDI0Nzc5LCAyNDc4MywgMjQ3ODcsIDI0NzkxLCAyNDc5NiwgMjQ4MDAsIDI0ODA1LCAyNDgwOSwgMjQ4MTMsIAotICAgIDI0ODIwLCAyNDgyNCwgMjQ4MjcsIDI0ODMxLCAyNDgzNywgMjQ4NDMsIDI0ODQ3LCAyNDg1MSwgMjQ4NTYsIDI0ODYzLCAKLSAgICAyNDg2OSwgMjQ4NzMsIDI0ODgyLCAyNDg4NiwgMjQ4OTAsIDI0ODkzLCAyNDg5OSwgMjQ5MDQsIDI0OTEwLCAxNDg5LCAKLSAgICAxNzkxLCAyNDkxNSwgMjQ5MjAsIDI0OTI1LCAyNDkzMCwgMjQ5MzUsIDI0OTQwLCAyNDk0NSwgMjE0OCwgMjE5NCwgMjQ5NTAsIAotICAgIDI0OTUzLCAyNDk1NywgMjQ5NjEsIDI0OTY2LCAyNDk3MCwgMjQ5NzQsIDI0OTc3LCAyNDk4MiwgMjQ5ODcsIDI0OTkxLCAKLSAgICAyNDk5NCwgMjQ5OTksIDI1MDAzLCAyNTAwOCwgMjUwMTIsIDE0NzQ5LCAyNTAxNywgMjUwMjAsIDI1MDIzLCAyNTAyNywgCi0gICAgMjUwMzIsIDI1MDM2LCAyNTA0OSwgMjUwNTMsIDI1MDU2LCAyNTA2NCwgMjUwNzMsIDI1MDgwLCAyNTA4NSwgMjUwOTEsIAotICAgIDI1MDk3LCAyNTEwNSwgMjUxMTIsIDI1MTE5LCAyNTEyMywgMjUxMjcsIDI1MTMxLCAyNTEzNiwgMjUxNDEsIDI1MTQ1LCAKLSAgICAyNTE1MywgMjUxNTgsIDI1MTcwLCAyNTE4MSwgMjUxODYsIDI1MTkwLCAyNTE5NCwgMjUyMDAsIDI1MjA1LCAyNTIxMCwgCi0gICAgMjUyMTQsIDI1MjE4LCAyNTIyMSwgMjUyMjcsIDc5MTUsIDIzMTYsIDI1MjMxLCAyNTIzNiwgMjUyNTIsIDk0NjgsIDI1MjcyLCAKLSAgICAyNTI4MSwgMjUyOTcsIDI1MzAxLCAyNTMwNCwgMjUzMTAsIDI1MzIwLCAyNTMyNiwgMjUzMzUsIDI1MzUwLCAyNTM2MiwgCi0gICAgMjUzNzMsIDI1MzgxLCAyNTM5MCwgMjUzOTYsIDI1NDA1LCAyNTQxNSwgMjU0MjYsIDI1NDM3LCAyNTQ0NiwgMjU0NTMsIAotICAgIDI1NDYyLCAyNTQ3MCwgMjU0NzcsIDI1NDg1LCAyNTQ5MiwgMjU0OTksIDI1NTEyLCAyNTUxOSwgMjU1MjUsIDI1NTMwLCAKLSAgICAyNTUzOSwgMjU1NDUsIDI1NTUwLCAyNTU1OCwgMjU1NjUsIDIzNDE5LCAyNTU3NywgMjU1ODksIDI1NjAzLCAyNTYxMSwgCi0gICAgMjU2MTgsIDI1NjMwLCAyNTYzOSwgMjU2NDgsIDI1NjU2LCAyNTY2NCwgMjU2NzIsIDI1Njc5LCAyNTY4OCwgMjU2OTYsIAotICAgIDI1NzA2LCAyNTcxNSwgMjU3MjUsIDI1NzM0LCAyNTc0MywgMjU3NTEsIDI1NzU2LCAyNTc2MCwgMjU3NjMsIDI1NzY3LCAKLSAgICAyNTc3MSwgMjU3NzUsIDI1Nzc5LCAyNTc4MywgMjU3ODksIDI1Nzk1LCAyNTgwMywgMTQ3OTQsIDI1ODEwLCAyNTgxNSwgCi0gICAgMjU4MjIsIDI1ODI4LCAyNTgzNSwgMTQ4MDIsIDI1ODQyLCAyNTg0NSwgMjU4NTcsIDI1ODY1LCAyNTg3MSwgMjU4NzYsIAotICAgIDI1ODgwLCA5ODcxLCAyNTg5MSwgMjU5MDEsIDI1OTEwLCAyNTkxNywgMjU5MjEsIDE0ODA3LCAyNTkyNCwgMjU5MzEsIAotICAgIDI1OTM1LCAyNTk0MSwgMjU5NDQsIDI1OTUxLCAyNTk1NywgMjU5NjQsIDI1OTcwLCAyNTk3NCwgMjU5NzksIDI1OTgzLCAKLSAgICAyNTk5MiwgMjU5OTksIDI2MDA1LCA3OTU2LCAyNjAxMiwgMjYwMjAsIDI2MDI3LCAyNjAzMywgMjYwMzgsIDI2MDQ0LCAKLSAgICAyNjA1MCwgMjYwNTgsIDI2MDYyLCAyNjA2NSwgMjYwNjcsIDI1NzY4LCAyNjA3NiwgMjYwODIsIDI2MDkyLCAyNjA5NywgCi0gICAgMjYxMDQsIDI2MTEwLCAyNjExNSwgMjYxMjAsIDI2MTI1LCAyNjEyOSwgMjYxMzQsIDI2MTQxLCAyNjE1MCwgMjYxNTQsIAotICAgIDI2MTYxLCAyNjE3MCwgMjYxNzYsIDI2MTgxLCAyNjE4NywgMjYxOTIsIDI2MTk5LCAyNjIxMCwgMjYyMTUsIDI2MjE5LCAKLSAgICAyNjIyOSwgMjYyMzUsIDI2MjM5LCAyNjI0NCwgMjYyNTQsIDI2MjYzLCAyNjI2NywgMjYyNzQsIDI2MjgyLCAyNjI4OSwgCi0gICAgMjYyOTUsIDI2MzAwLCAyNjMwOCwgMjYzMTUsIDI2MzI3LCAyNjMzNiwgMjYzNDAsIDEzMDQ2LCAyNjM0OCwgMjYzNTgsIAotICAgIDI2MzYyLCAyNTA2MCwgMjYzNzMsIDI2Mzc4LCAyNjM4MiwgMjYzODksIDI2Mzk2LCAyMTk2MSwgMjU2OTMsIDI2NDAxLCAKLSAgICAyNjQwNSwgMjY0MDgsIDIyODUzLCAyNjQxMywgMjY0MjcsIDI2NDQzLCAyNjQ2MSwgMjY0ODAsIDI2NDk3LCAyNjUxNSwgCi0gICAgMjI4NzIsIDI2NTMyLCAyNjU1MiwgMjI4ODksIDI2NTY0LCAyNjU3NiwgMTU3MzIsIDI2NTg4LCAyMjkwOSwgMjY2MDIsIAotICAgIDI2NjE0LCAxMDUyOSwgMjY2MjgsIDI2NjMzLCAyNjYzOCwgMjY2NDMsIDI2NjQ5LCAyNjY1NSwgMjY2NjEsIDI2NjY1LCAKLSAgICAyNjY3MiwgMjY2NzcsIDI2Njg3LCAyNjY5MywgMTAxNzYsIDI2Njk5LCAyNjcwMSwgMjY3MDYsIDI2NzE0LCAyNjcxOCwgCi0gICAgMjYxMzcsIDI2NzI0LCAyNjczMSwgMTE1MTcsIDExNTI3LCAyNjczOCwgMjY3NDgsIDI2NzUzLCAyNjc1NywgMjY3NjAsIAotICAgIDI2NzY2LCAyNjc3NCwgMjY3ODYsIDI2Nzk2LCAyNjgxMiwgMjY4MjUsIDI2ODM5LCAxNTc1MCwgMjY4NTMsIDI2ODYwLCAKLSAgICAyNjg2NCwgMjY4NjcsIDI2ODcyLCAyNjg3NiwgMjY4ODMsIDI2ODkwLCAyNjkwMCwgMjY5MDUsIDI2OTEwLCAyNjkxNSwgCi0gICAgMjY5MjMsIDI2OTMxLCAyNjk0MCwgMjY5NDUsIDk1NjUsIDI2OTQ5LCAyNjk1MiwgMjY5NTUsIDI2OTYwLCAyNjk2NywgCi0gICAgMjY5NzIsIDI2OTg4LCAyNjk5NiwgMjcwMDQsIDk0MTYsIDI3MDEyLCAyNzAxNywgMjcwMjEsIDI3MDI3LCAyNzAzMywgCi0gICAgMjcwMzYsIDI3MDQyLCAyNzA1NCwgMjcwNjIsIDI3MDY5LCAyNzA3NSwgMjcwODIsIDI3MDkzLCAyNzEwNywgMjcxMjAsIAotICAgIDI3MTI5LCAyNzEzOCwgMjcxNTAsIDI3MTYxLCAyNzE3MSwgMjcxODAsIDI3MTg5LCAyNzE5NywgMjcyMDgsIDc5MzgsIAotICAgIDI3MjE1LCAyNzIyMSwgMjcyMjYsIDI3MjMyLCAyNzIzOSwgMjcyNDksIDI3MjU5LCAyNzI2OCwgMjcyNzQsIDI3MjgxLCAKLSAgICAyNzI4NiwgMjcyOTMsIDI3MzAxLCAyNzMwOSwgMjczMjEsIDYyNDYsIDI3MzI4LCAyNzMzNywgMjczNDUsIDI3MzUxLCAKLSAgICAyNzM1NywgMjczNjIsIDI3MzY2LCAyNzM2OSwgMjczNzUsIDI3MzgyLCAyNzM4NywgMjczOTIsIDI3Mzk2LCAyNzQwOCwgCi0gICAgMjc0MTksIDI3NDI4LCAyNzQzNiwgMTQ5MzQsIDI3NDQxLCAyNzQ0NywgMjc0NTMsIDExNTEwLCA4NjM1LCAyNzQ1OCwgCi0gICAgMjc0NjIsIDI3NDY1LCAyNzQ2OCwgMjc0NzQsIDI3NDgyLCAyNzQ5MCwgMjc0OTQsIDI3NDk4LCAyNzUwMywgMjc1MDYsIAotICAgIDI3NTE1LCAyNzUxOSwgMjc1MjcsIDI3NTM4LCAyNzU0MiwgMjc1NDgsIDI3NTU0LCAyNzU1OCwgMjc1NjQsIDI3NTcyLCAKLSAgICAyNzU5NCwgMjc2MTgsIDI3NjI1LCAyNzYzMiwgMjc2MzgsIDI3NjQ2LCAyNzY1MiwgMjc2NTcsIDI3NjY4LCAyNzY4NiwgCi0gICAgMjc2OTMsIDI3NzAxLCAyNzcwNSwgMjc3MTQsIDI3NzI3LCAyNzczNSwgMjc3NDcsIDI3NzU4LCAyNzc2OCwgMjc3ODIsIAotICAgIDI3NzkxLCAyNzc5OSwgMjc4MTEsIDk0ODUsIDI3ODIyLCAyNzgzMywgMjc4NDUsIDI3ODU1LCAyNzg2NCwgMjc4NjksIAotICAgIDI3ODczLCAyNzg4MSwgMjc4OTEsIDI3ODk2LCAyNzkwMCwgMjc5MDMsIDI3OTA2LCAyNzkxNCwgMjc5MjIsIDI3OTMxLCAKLSAgICAyNzk0MSwgMjc5NTAsIDI3OTU2LCAyNzk3MCwgMjY2MywgMjc5OTIsIDI4MDAzLCAyODAxMiwgMjgwMjIsIDI4MDM0LCAKLSAgICAyODA0MywgMjgwNTIsIDI4MDYyLCAyODA3MCwgMjgwNzgsIDI4MDg3LCAyODA5MiwgMjgxMDMsIDI4MTA4LCAyODExOSwgCi0gICAgMjgxMjMsIDI4MTMzLCAyODE0MiwgMjgxNTAsIDI4MTYwLCAyODE3MCwgMjgxNzgsIDI4MTg3LCAyODE5NCwgMjgyMDIsIAotICAgIDI4MjA5LCAyODIxOCwgMjgyMjIsIDI4MjMwLCAyODIzNywgMjgyNDUsIDI4MjUyLCAyODI2MywgMjgyNzgsIDI4Mjg1LCAKLSAgICAyODI5MSwgMjgzMDEsIDI4MzEwLCAyODMxNiwgMjgzMjAsIDI4MzI3LCAyODMzMSwgMTQwMTgsIDI4MzM3LCAyODM0MSwgCi0gICAgMjgzNDYsIDI4MzUzLCAyODM1NywgMjgzNjEsIDI4MzY5LCAyODM3NywgMjgzODMsIDI4MzkyLCAyODM5OSwgMjg0MDQsIAotICAgIDI4NDA5LCAyODQxOSwgMjM0ODgsIDI4NDIzLCAyODQyNiwgMjg0MzEsIDI4NDM2LCAyODQ0MSwgMjg0NDYsIDI4NDUxLCAKLSAgICAyODQ1NiwgMjg0NjEsIDI4NDY2LCAyODQ3MiwgMjg0NzcsIDI4NDgyLCAyODQ4OCwgMTIxOCwgNzA0LCAyODQ5MywgMjg1MDIsIAotICAgIDIzNjQsIDI4NTA5LCAyODUxNCwgMjg1MTgsIDI4NTI0LCAxMjY3LCA1NDYsIDMxOCwgMjg1MjksIDI4NTM4LCAyODU0NiwgCi0gICAgMjg1NTUsIDI4NTYzLCAyODU3NCwgMjg1ODMsIDI4NTkxLCAyODU5NSwgMjg1OTgsIDI4NjA2LCAyODYxNCwgMjg2MTksIAotICAgIDE0NzYyLCAyODYyNSwgMjg2MzEsIDI4NjM3LCA1ODcyLCAyODY0MiwgMjg2NDYsIDI4NjUyLCAyODY1NiwgMjg2NjMsIAotICAgIDE0NTUsIDI4NjY5LCAyODY3NiwgOTU3MiwgMjg2ODAsIDI4NjkwLCAyODY5OCwgMjg3MDQsIDI4NzEzLCAyODcyMSwgCi0gICAgMjg3MjcsIDI4NzM1LCAyODc0MiwgMTExMDMsIDI4NzQ4LCAyODc1NSwgMjg3NjAsIDI4NzY3LCAxNDk2LCAyMTQ3LCAKLSAgICAyODc3MywgMjg3NzksIDI4Nzg2LCAyODc5NywgMjg4MDgsIDI4ODE2LCAyODgyMywgMjg4MzMsIDI4ODQyLCAyODg1MCwgCi0gICAgMjg4NTksIDI4ODY2LCAyODg3MywgMjg4ODYsIDI4ODk3LCAxMjcyLCAyODkxNiwgMjg5MjEsIDI4OTI5LCAzNTc1LCAKLSAgICAyODkzMywgMjg5MzgsIDI4OTQyLCAxNDU5LCAyNDY4OSwgMjg5NTIsIDI4OTU2LCAyODk2MSwgMjg5NjUsIDM0OTMsIAotICAgIDI4OTcxLCAyODk3OSwgMjg5ODYsIDI4OTk3LCAyOTAwNSwgMjkwMTMsIDM1NzYsIDI3OSwgMjkwMTgsIDI5MDI2LCAyOTAzNCwgCi0gICAgMjkwNDEsIDI5MDQ3LCAyOTA1MiwgMjIxNiwgMjkwNTksIDI5MDY1LCAyNTk3NSwgMjYyMDUsIDI5MDcxLCAxMDYsIDI5MDc1LCAKLSAgICAyOTA3OSwgMjkwODUsIDYxNSwgOTMyMSwgMjkwOTAsIDI5MDk3LCAyOTEwMywgMjMyNywgMjkxMDcsIDI5MTExLCAxNTE3NCwgCi0gICAgMjkxMTQsIDI5MTE5LCAyOTEyNiwgMjkxMzIsIDI5MTM3LCAyOTE0NSwgMjkxNTIsIDI5MTU4LCAyMjMzOCwgMjkxNjIsIAotICAgIDI5MTY2LCAzNjQ2LCAxNjYxMiwgMjkxNzAsIDI5MTc1LCAyOTE3OCwgMjkxODYsIDI5MTk0LCAyOTE5OSwgMjkyMDIsIAotICAgIDI5MjA5LCAyOTIxOSwgMjkyMzEsIDI5MjM2LCAyOTI0MCwgMjkyNDgsIDI5MjU1LCAyOTI2MSwgMjkyNjgsIDI5Mjc1LCAKLSAgICAyOTI3OCwgMjkyODIsIDI5Mjg2LCAxNDYzLCAyOTI5NiwgMjkyOTgsIDI5MzAzLCAyOTMwOSwgMjkzMTUsIDI5MzIwLCAKLSAgICAyOTMyNSwgMjkzMzAsIDI5MzM1LCAyOTM0MCwgMjkzNDUsIDI5MzUwLCAyOTM1NSwgMjkzNjAsIDI5MzY1LCAyOTM3MCwgCi0gICAgMjkzNzUsIDI5MzgwLCAyOTM4NSwgMjkzOTEsIDI5Mzk3LCAyOTQwMywgMjk0MDksIDI5NDE0LCAyOTQxOSwgMjk0MjQsIAotICAgIDI5NDMwLCAyOTQzNSwgMjk0NDAsIDI5NDQ1LCAyOTQ1MSwgMjk0NTYsIDI5NDYyLCAyOTQ2NywgMjk0NzIsIDI5NDc3LCAKLSAgICAyOTQ4MiwgMjk0ODgsIDI5NDkzLCAyOTQ5OSwgMjk1MDQsIDI5NTA5LCAyOTUxNCwgMjk1MTksIDI5NTI1LCAyOTUzMCwgCi0gICAgMjk1MzYsIDI5NTQxLCAyOTU0NiwgMjk1NTEsIDI5NTU2LCAyOTU2MSwgMjk1NjYsIDI5NTcxLCAyOTU3NiwgMjk1ODEsIAotICAgIDI5NTg3LCAyOTU5MywgMjk1OTksIDI5NjA0LCAyOTYwOSwgMjk2MTQsIDI5NjE5LCAyOTYyNSwgMjk2MzEsIDI5NjM3LCAKLSAgICAyOTY0MywgMjk2NDksIDI5NjU1LCAyOTY2MCwgMjk2NjYsIDI5NjcxLCAyOTY3NiwgMjk2ODEsIDI5Njg2LCAyOTY5MiwgCi0gICAgMjQ0MywgMjk2OTcsIDI0NTAsIDI0NTcsIDI3NTQsIDI5NzAyLCAyNDYzLCAyNDczLCAyOTcwOCwgMjk3MTIsIDI5NzE3LCAKLSAgICAyOTcyMiwgMjk3MjgsIDI5NzMzLCAyOTczOCwgMjk3NDIsIDI5NzQ3LCAyOTc1MywgMjk3NTgsIDI5NzYzLCAyOTc2OCwgCi0gICAgMjk3NzQsIDI5Nzc5LCAyOTc4MywgMjk3ODcsIDI5NzkyLCAyOTc5NywgMjk4MDIsIDI5ODA3LCAyOTgxMiwgMjk4MTgsIAotICAgIDI5ODI0LCAyOTgyOSwgMjk4MzMsIDI5ODM4LCAyOTg0NCwgMjk4NDgsIDI5ODUzLCAyOTg1OCwgMjk4NjMsIDI5ODY4LCAKLSAgICAyOTg3MiwgMjk4NzUsIDI5ODgwLCAyOTg4NSwgMjk4OTAsIDI5ODk1LCAyOTkwMCwgMjk5MDYsIDI5OTEyLCAyOTkxNywgCi0gICAgMjk5MjIsIDI5OTI2LCAyOTkzMSwgMjk5MzYsIDI5OTQxLCAyOTk0NiwgMjk5NTEsIDI5OTU1LCAyOTk2MCwgMjk5NjUsIAotICAgIDI5OTcwLCAyOTk3NCwgMjk5NzgsIDI5OTgyLCAyOTk4NywgMjk5OTUsIDMwMDAwLCAzMDAwNiwgMzAwMTIsIDMwMDE4LCAKLSAgICAzMDAyMywgMzAwMjcsIDMwMDMwLCAzMDAzNSwgMzAwNDAsIDMwMDQ0LCAzMDA0OSwgMzAwNTMsIDMwMDU4LCAzMDA2MiwgCi0gICAgMzAwNjUsIDMwMDcwLCAxNzI4OSwgMzAwNzUsIDMwMDgwLCAzMDA4NSwgMzAwOTMsIDIxMjY3LCAyODY3MywgOTAxOSwgCi0gICAgMzAwOTgsIDMwMTAzLCAzMDEwNywgMzAxMTIsIDMwMTE2LCAzMDEyMCwgMzAxMjUsIDMwMTI5LCAzMDEzMiwgMzAxMzUsIAotICAgIDMwMTM5LCAzMDE0NCwgMzAxNDgsIDMwMTU2LCAzMDE2MCwgMzAxNjMsIDMwMTY4LCAzMDE3MiwgMzAxNzYsIDMwMTgxLCAKLSAgICAzMDE4NiwgMzAxOTAsIDMwMTk2LCAzMDIwMSwgMzAyMDYsIDMwMjEzLCAzMDIyMCwgMzAyMjQsIDMwMjI3LCAzMDIzMywgCi0gICAgMzAyNDIsIDMwMjQ5LCAzMDI1NywgMzAyNjQsIDMwMjY4LCAzMDI3MywgMzAyNzcsIDMwMjgxLCAzMDI4NywgMzAyOTMsIAotICAgIDMwMjk3LCAzMDMwMywgMzAzMDgsIDMwMzEzLCAzMDMyMCwgMzAzMjYsIDMwMzMyLCAzMDMzOCwgMzAzNDQsIDMwMzUxLCAKLSAgICAzMDM1NywgMzAzNjMsIDMwMzY5LCAzMDM3NSwgMzAzODEsIDMwMzg3LCAzMDM5MywgMzA0MDAsIDMwNDA2LCAzMDQxMywgCi0gICAgMzA0MTksIDMwNDI1LCAzMDQzMSwgMzA0MzcsIDMwNDQzLCAzMDQ0OSwgMzA0NTUsIDMwNDYxLCAzMDQ2NywgMTE0MTEsIAotICAgIDMwNDczLCAzMDQ3OCwgMzA0ODMsIDMwNDg2LCAzMDQ5NCwgMzA0OTksIDMwNTA4LCAzMDUxNCwgMzA1MTksIDMwNTI0LCAKLSAgICAzMDUyOSwgMzA1MzMsIDMwNTM4LCAzMDU0MywgMzA1NDgsIDMwNTUzLCAzMDU1OCwgMzA1NjUsIDMwNTcyLCAzMDU3OCwgCi0gICAgMzA1ODQsIDMwNTg5LCAxNjI5MCwgMzA1OTYsIDMwNjAyLCAzMDYwOSwgMzA2MTUsIDMwNjIxLCAzMDYyNiwgMzA2MzQsIAotICAgIDMwNjM5LCAxNjA2OSwgMzA2NDMsIDMwNjQ4LCAzMDY1MywgMzA2NTksIDMwNjY0LCAzMDY2OSwgMzA2NzMsIDMwNjc4LCAKLSAgICAzMDY4MywgMzA2ODksIDMwNjk0LCAzMDY5OSwgMzA3MDMsIDMwNzA4LCAzMDcxMywgMzA3MTcsIDMwNzIyLCAzMDcyNywgCi0gICAgMzA3MzIsIDMwNzM2LCAzMDc0MSwgMzA3NDYsIDMwNzUxLCAzMDc1NSwgMzA3NTksIDE1MjgwLCAzMDc2MywgMzA3NzIsIAotICAgIDMwNzc4LCAzMDc4NCwgMzA3OTMsIDMwODAxLCAzMDgxMCwgMzA4MTgsIDMwODIzLCAzMDgyNywgMzA4MzQsIDMwODQwLCAKLSAgICAzMDg0NCwgMzA4NDcsIDMwODUyLCAzMDg2MSwgMzA4NjksIDMwODc0LCAxNDk1LCAzMDg4MCwgMzA4ODMsIDMwODg3LCAKLSAgICAyMjQxMSwgMjI0MTcsIDMwODkzLCAzMDg5NywgMzA5MDgsIDMwOTE5LCAzMDkzMCwgMzA5NDIsIDMwOTQ5LCAzMDk1NiwgCi0gICAgMzA5NjEsIDMwOTY1LCA1OTA5LCA3NTUsIDIxMjY2LCAzMDk3MywgMzA5NzgsIDMwOTgyLCAzMDk4NywgMzA5OTEsIDMwOTk3LCAKLSAgICAzMTAwMiwgMzEwMDgsIDMxMDEzLCAzMTAxOSwgMzEwMjQsIDMxMDMwLCAzMTAzNSwgMzEwNDEsIDMxMDQ3LCAzMTA1MywgCi0gICAgMzEwNTgsIDMxMDE0LCAzMTAyMCwgMzEwNjIsIDMxMDY3LCAzMTA3MywgMzEwNzgsIDMxMDg0LCAzMTA4OSwgMzEwOTUsIAotICAgIDMxMTAwLCAzMTAyNSwgMTA0MTQsIDMxMTA0LCAzMTAzNiwgMzEwNDIsIDMxMDQ4LCAyODMxLCAzNDIzLCAzMTExMCwgCi0gICAgMzExMTMsIDMxMTE5LCAzMTEyNSwgMzExMzEsIDMxMTM4LCAzMTE0NCwgMzExNTAsIDMxMTU2LCAzMTE2MiwgMzExNjgsIAotICAgIDMxMTc0LCAzMTE4MCwgMzExODYsIDMxMTkyLCAzMTE5OCwgMzEyMDQsIDMxMjEwLCAzMTIxNywgMzEyMjMsIDMxMjI5LCAKLSAgICAzMTIzNSwgMzEyNDEsIDMxMjQ3LCAzMTI1MCwgMzEyNTUsIDMxMjU4LCAzMTI2NSwgMzEyNzMsIDMxMjc4LCAzMTI4MywgCi0gICAgMzEyODksIDMxMjk0LCAzMTI5OSwgMzEzMDMsIDMxMzA4LCAzMTMxNCwgMzEzMTksIDMxMzI1LCAzMTMzMCwgMzEzMzYsIAotICAgIDMxMzQxLCAzMTM0NywgMzEzNTMsIDMxMzU3LCAzMTM2MiwgMzEzNjcsIDMxMzcyLCAzMTM3NywgMzEzODEsIDMxMzg2LCAKLSAgICAzMTM5MSwgMzEzOTYsIDMxNDAyLCAzMTQwOCwgMzE0MTQsIDMxNDIwLCAzMTQyNSwgMzE0MjksIDMxNDMyLCAzMTQzOCwgCi0gICAgMzE0NDQsIDMxNDUzLCAzMTQ2MSwgMzE0NjgsIDMxNDczLCAzMTQ3NywgMzE0ODEsIDMxNDg2LCAxNTEzMywgMzE0OTEsIAotICAgIDMxNDk5LCAzMTUwNSwgMzY4MywgMTM3NywgMzE1MTAsIDMxNTE0LCA4MDA1LCAzMTUyMCwgMzE1MjYsIDMxNTMzLCA4MDE0LCAKLSAgICAzMTUzNywgMzE1NDMsIDMxNTUwLCAzMTU1NiwgMzE1NjUsIDMxNTczLCAzMTU4NSwgMzE1ODksIDMxNTk2LCAzMTYwMiwgCi0gICAgMzE2MDYsIDMxNjA5LCAzMTYxOCwgMzE2MjYsIDMxMDE1LCAzMTYzMSwgMzE2NDEsIDMxNjUxLCAzMTY2MSwgMzE2NjcsIAotICAgIDMxNjcyLCAzMTY4MiwgMzE2ODcsIDMxNzAwLCAzMTcxNCwgMzE3MjUsIDMxNzM3LCAzMTc0OSwgMzE3NjMsIDMxNzc2LCAKLSAgICAzMTc4OCwgMzE4MDAsIDE0NTg3LCAzMTgxNCwgMzE4MTksIDMxODI0LCAzMTgyOCwgMzE4MzIsIDMxODM2LCAxNzgwLCAKLSAgICAyNzE1OSwgMzE4NDAsIDMxODQ1LCAzMTA2MywgMzE4NTAsIDMxODUzLCAzMTg1OCwgMzE4NjMsIDMxODY4LCAzMTg3NCwgCi0gICAgMzE4ODAsIDEwMDkxLCAzMTg4NSwgMzE4OTIsIDE1Njg0LCAzMTg5OCwgMzE5MDMsIDMxOTA4LCAzMTkxMiwgMzE5MTcsIAotICAgIDMxOTIyLCAzMTA2OCwgMzE5MjcsIDMxOTMyLCAzMTkzNywgMzE5NDMsIDMxMDc0LCAzMTk0OCwgMzE5NTEsIDMxOTU4LCAKLSAgICAzMTk2NiwgMzE5NzIsIDMxOTc4LCAzMTk4NCwgMzE5OTUsIDMyMDAwLCAzMjAwNywgMzIwMTQsIDMyMDIxLCAzMjAyOSwgCi0gICAgMzIwMzgsIDMyMDQ3LCAzMjA1MywgMzIwNTksIDMyMDY3LCAzMTA3OSwgMzIwNzIsIDMyMDc4LCAzMjA4NCwgMzEwODUsIAotICAgIDMyMDg5LCAzMjA5NCwgMzIxMDIsIDMyMTEwLCAzMjExNiwgMzIxMjMsIDMyMTI5LCAzMjEzNiwgMzIxNDMsIDMyMTQ5LCAKLSAgICAzMjE1NywgMzIxNjcsIDMyMTc0LCAzMjE3OSwgMzIxODUsIDMyMTkwLCAzMjE5NSwgMzIyMDIsIDMyMjExLCAzMjIxOSwgCi0gICAgMzIyMjQsIDMyMjMwLCAzMjIzNywgMzIyNDUsIDMyMjUxLCAzMjI1NiwgMzIyNjIsIDMyMjcxLCAyNzkzNiwgMzIyNzgsIAotICAgIDMyMjgyLCAzMjI4NywgMzIyOTYsIDMyMzAxLCAzMjMwNiwgMzIzMTEsIDEyMzk4LCAzMjMxOSwgMzIzMjQsIDMyMzI5LCAKLSAgICAzMjMzNCwgMzIzMzgsIDMyMzQzLCAzMjM0OCwgMzIzNTUsIDMyMzYwLCAzMjM2NSwgMzIzNzAsIDMxMDkwLCAyMTIwMywgCi0gICAgMzIzNzYsIDI1MTksIDI0NCwgMzIzNzksIDMyMzgyLCAzMjM4NiwgMzIzOTAsIDMyNDAwLCAzMjQwOCwgMzI0MTIsIDMyNDE5LCAKLSAgICAzMjQyNiwgMzI0MzAsIDMyNDMzLCAzMjQzOSwgMzI0NDcsIDMyNDU1LCAzMjQ1OSwgMzI0NjMsIDMyNDY2LCAzMjQ3MywgCi0gICAgMzI0NzcsIDMyNDgxLCAzMjQ4OCwgMzI0OTYsIDMxMDI2LCAzMjUwMywgMzI1MTEsIDEwMTUxLCA2NjAsIDMwOCwgMzI1MjMsIAotICAgIDMyNTI4LCAzMjUzMywgMzI1MzksIDMyNTQ0LCAzMjU0OSwgMzcwNCwgMzI1NTQsIDMyNTU3LCAzMjU2MiwgMzI1NjcsIAotICAgIDMyNTcyLCAzMjU3NywgMzI1ODIsIDMyNTg5LCAyMjUxMiwgMzI1OTQsIDMyNTk5LCAzMjYwNCwgMzI2MDksIDMyNjE0LCAKLSAgICAzMjYyMCwgMzI2MjUsIDMyNjMxLCAzMTI2MSwgMzI2MzcsIDMyNjQyLCAzMjY0OCwgMzI2NTQsIDMyNjY0LCAzMjY2OSwgCi0gICAgMzI2NzQsIDMyNjc4LCAzMjY4MywgMzI2ODgsIDMyNjkzLCAzMjY5OCwgMzI3MTEsIDMyNzE2LCAyMjI4OSwgMTY2OTIsIAotICAgIDM3MTAsIDMyNzIwLCAzMjcyNSwgMzI3MzAsIDMyNzM2LCAzMjc0MSwgMzI3NDYsIDMyNzUwLCAzMjc1NSwgMzI3NjAsIAotICAgIDMyNzY2LCAzMjc3MSwgMzI3NzYsIDEzODIsIDMyNzgwLCAzMjc4NSwgMzI3OTAsIDMyNzk1LCAzMjc5OSwgMzI4MDQsIAotICAgIDMyODA5LCAzMjgxNCwgMzI4MjAsIDMyODI2LCAzMjgzMSwgMzI4MzUsIDMyODM5LCAzMjg0NCwgMzI4NDksIDMyODU0LCAKLSAgICAzMjg1OCwgMzI4NjYsIDMyODcwLCAzMjg3NiwgMzI4ODAsIDMyODg3LCAxNjQ4NSwgMzEwMzcsIDMyODkzLCAzMjkwMCwgCi0gICAgMzI5MDgsIDMyOTE1LCAzMjkyMSwgMzI5MzQsIDMyOTQ2LCAzMjk1MiwgMzI5NTYsIDI3NzMsIDMyOTYwLCAzMjk2NCwgCi0gICAgMzI0NjgsIDMyOTczLCAzMjk4NCwgMzI5ODksIDMyOTk0LCAzMjk5OSwgMzMwMDMsIDMzMDA4LCAyMjQyMiwgMzMwMTIsIAotICAgIDMzMDE2LCAzMzAyMSwgMzEwNDMsIDIxMjg3LCAzMzAyNSwgMzMwMzAsIDMzMDM2LCAzMzA0MSwgMzMwNDUsIDMzMDQ5LCAKLSAgICAzMzA1MiwgMzMwNTYsIDMzMDYyLCAzMzA3MywgMzMwODUsIDMxMDQ5LCAzMzA5MCwgMzMwOTMsIDMzMDk3LCAzNDcsIAotICAgIDMzMTAyLCAzMzEwNywgMzMxMTIsIDMzMTE3LCAzMzEyMiwgMzMxMjcsIDMzMTMzLCAzMzEzOCwgMzMxNDMsIDMzMTQ5LCAKLSAgICAzMzE1NCwgMzMxNjAsIDMzMTY1LCAzMzE3MSwgMzMxNzYsIDMzMTgxLCAzMzE4NiwgMzMxOTEsIDMzMTk2LCAzMzIwMSwgCi0gICAgMzMyMDYsIDMzMjExLCAzMzIxNywgMzMyMjIsIDMzMjI3LCAzMzIzMiwgMzMyMzcsIDMzMjQyLCAzMzI0NywgMzMyNTIsIAotICAgIDMzMjU4LCAzMzI2NCwgMzMyNjksIDMzMjc0LCAzMzI3OSwgMzMyODQsIDMzMjg5LCAzMzI5NCwgMzMyOTksIDMzMzA0LCAKLSAgICAzMzMwOSwgMzMzMTQsIDMzMzE5LCAzMzMyNCwgMzMzMjksIDMzMzM0LCAzMzMzOSwgMzMzNDQsIDMzMzQ5LCAzMzM1NCwgCi0gICAgMzMzNjAsIDMxMywgMjYsIDMzMzY1LCAzMzM2OSwgMzMzNzMsIDMzMzgxLCAzMzM4NSwgMzMzODksIDMzMzkyLCAzMzM5NSwgCi0gICAgMzMzOTcsIDMzNDAyLCAzMzQwNiwgMzM0MTEsIDMzNDE1LCAzMzQyMCwgMzM0MjQsIDMzNDI5LCAzMzQzMywgMzM0MzYsIAotICAgIDMzNDM4LCAzMzQ0MiwgMzM0NDcsIDMzNDUxLCAzMzQ2MiwgMzM0NjUsIDMzNDY3LCAzMzQ3MSwgMzM0ODMsIDMzNDkyLCAKLSAgICAzMzQ5NiwgMzM1MDAsIDMzNTA2LCAzMzUxMSwgMzM1MjAsIDMzNTI2LCAzMzUzMSwgMzM1MzYsIDMzNTQwLCAzMzU0NSwgCi0gICAgMzM1NTIsIDMzNTU3LCAzMzU2MywgMzM1NjgsIDMzNTcyLCAzMzU3OSwgMjU3MDEsIDI1NzExLCAzMzU4MywgMzM1ODgsIAotICAgIDMzNTkzLCAzMzU5OCwgMzM2MDUsIDMzNjA5LCAzMzYxNiwgODExMywgMzM2MjIsIDMzNjMxLCAzMzYzOSwgMzM2NTQsIAotICAgIDMzNjY4LCAzMzY3NiwgMzM2ODcsIDMzNjk2LCAzMzcwMSwgNzIyNywgMzM3MTEsIDMzNzE2LCAzMzcyMSwgMzM3MjUsIAotICAgIDMzNzI4LCAzMzczMiwgMzM3MzcsIDMzNzQxLCAzMzc0OCwgMzM3NTMsIDMzNzU4LCA4OTEyLCAzMzc2OCwgMzM3NzAsIAotICAgIDMzNzczLCAzMzc3NywgMzM3ODMsIDMzNzg3LCAzMzc5MiwgMzM3OTcsIDMzODAzLCAzMzgwOCwgMzM4MTQsIDMzODE5LCAKLSAgICAzMzgyOSwgMzM4MzgsIDMzODQ2LCAzMzg1MSwgMzM4NTcsIDMzODYyLCAzMzg2OSwgMzM4NzMsIDMzODgxLCAzMzg4OCwgCi0gICAgMzM5MDEsIDMzOTA5LCAzMzkxMywgMzM5MjMsIDMzOTI4LCAzMzkzMiwgMzM5NDAsIDMzOTQ4LCAzMzk1MiwgMzM5NjEsIAotICAgIDMzOTY3LCAzMzk3MiwgMzM5ODAsIDMzOTkwLCAzMzk5OSwgMzQwMDgsIDM0MDE3LCAzNDAyOCwgMzQwMzYsIDM0MDQ3LCAKLSAgICAzNDA1NiwgMzQwNjMsIDM0MDY5LCAzNDA3NCwgMzQwODUsIDM0MDkwLCAzNDA5NCwgMzQwOTcsIDM0MTAxLCAzNDEwOSwgCi0gICAgMzQxMTUsIDM0MTIzLCAzNDEzMCwgMzQxMzYsIDM0MTQxLCAzNDE0NywgMjQxOCwgMzQxNTEsIDM0MTUzLCAzNDE1OCwgCi0gICAgMzQxNjMsIDM0MTY4LCAzNDE3MSwgMzQxNzMsIDM0MTc3LCAzNDE4MCwgMzQxODcsIDM0MTkxLCA5ODg0LCAzNDE5NSwgCi0gICAgMzQyMDEsIDM0MjExLCAzNDIxNiwgMzQyMjIsIDM0MjI2LCAzNDIzMSwgMzQyNDQsIDI2MDg3LCAzNDI1MCwgMzQyNTksIAotICAgIDE3NDYyLCAzNDI2NiwgMzQyNzUsIDMxNjQ3LCAzNDI4MywgMzQyODgsIDM0MjkyLCAzNDMwMCwgMzQzMDcsIDM0MzEyLCAKLSAgICAzNDMxNiwgMzQzMjEsIDM0MzI1LCAzNDMzMywgMzQzMzksIDM0MzQ1LCAzNDM1MCwgMzQzNTQsIDM0MzU3LCAzNDM2MiwgCi0gICAgMzQzNzUsIDM0MzkxLCAyMjk3OSwgMzQ0MDgsIDM0NDIwLCAzNDQzNywgMzQ0NDksIDM0NDYzLCAyMjk5NiwgMjMwMTUsIAotICAgIDM0NDc1LCAzNDQ4NywgMjY4MCwgMzQ1MDEsIDM0NTA2LCAzNDUxMSwgMzQ1MTYsIDM0NTIwLCAzNDUyNywgMzQ1MzksIAotICAgIDM0NTQ1LCAzNDU0OCwgMzQ1NTksIDM0NTcwLCAzNDU3NSwgMzIwNjQsIDY5NSwgMzQ1NzksIDM0NTgzLCAzNDU4NywgCi0gICAgMzQ1OTAsIDM0NTk1LCAzNDYwMCwgMzQ2MDYsIDM0NjExLCAzNDYxNiwgMzQ2MjIsIDM0NjI4LCAzNDYzMywgMzQ2MzcsIAotICAgIDM0NjQyLCAzNDY0NywgMzQ2NTIsIDM0NjU2LCAzNDY1OSwgMzQ2NjUsIDM0NjcwLCAzNDY3NSwgMzQ2ODAsIDM0Njg0LCAKLSAgICAzNDY4OSwgMzQ2OTUsIDM0NzAzLCAyNjMyMCwgMzQ3MDgsIDM0NzEzLCAzNDcyMCwgMzQ3MjYsIDM0NzMyLCAzNDczNywgCi0gICAgMzQ3NDUsIDIyNTIxLCAzNDc1MiwgMzQ3NTcsIDM0NzYyLCAzNDc2NywgMzQ3NzEsIDM0Nzc0LCAzNDc3OSwgMzQ3ODMsIAotICAgIDM0Nzg3LCAzNDc5NCwgMzQ4MDAsIDM0ODA2LCAzNDgxMiwgMzQ4MTksIDM0ODI0LCAzNDgzMCwgMzM5NDMsIDM0ODM0LCAKLSAgICAzNDgzOCwgMzQ4NDMsIDM0ODU2LCAzNDg2MSwgMzQ4NjcsIDM0ODc1LCAzNDg4MiwgMzQ4OTAsIDM0OTAwLCAzNDkwNiwgCi0gICAgMzQ5MTIsIDM0OTE4LCAzNDkyMiwgMzQ5MzEsIDM0OTM5LCAzNDk0NiwgMzQ5NTEsIDM0OTU2LCAxMDQzNywgMzQ5NjEsIAotICAgIDM0OTY5LCAzNDk3NiwgMzQ5ODIsIDM0OTkyLCAzNDk5NywgMzUwMDMsIDM1MDExLCAzNjA4LCAzNTAxOCwgMzUwMjUsIAotICAgIDM2MTQsIDM1MDI5LCAzNTAzNCwgMzUwNDUsIDM1MDUyLCAzNTA1OCwgMzUwNjcsIDM1MDcxLCA0MDE1LCAzNTA3NCwgCi0gICAgMzUwODEsIDM1MDg3LCAzNTA5MywgMzUxMDEsIDM1MTExLCAyOTA0MiwgMzUxMTgsIDM1MTI2LCAzNTEzMSwgMzUxMzcsIAotICAgIDM1MTQyLCAyNTk0NywgMzUxNDgsIDM1MTU1LCAzNTE2MSwgMzUxNzAsIDIzNjYwLCAzNTE3NywgMzUxODIsIDM1MTg2LCAKLSAgICAzNTE5NCwgMzUyMDIsIDk2MDAsIDU4OTUsIDM1MjA5LCAzNTIxMywgMzUyMTUsIDM1MjE5LCAzNTIyNCwgMzUyMjYsIAotICAgIDM1MjMyLCAzNTIzNywgMzUyNDIsIDM1MjQ5LCAzMjU4NSwgMzUyNTUsIDM1MjYwLCAzNTI2NCwgMzUyNjksIDM1MjczLCAKLSAgICAzNTI4MiwgMzUyODYsIDM1MjkyLCAzNTI5OSwgMzUzMDUsIDM1MzEyLCAzNTMxNywgMzUzMjYsIDM1MzMxLCAzNTMzNSwgCi0gICAgMzUzNDAsIDM1MzQ3LCAzNTM1NSwgMzUzNjMsIDM1MzY4LCAyMTM0MywgMzUzNzIsIDM1Mzc1LCAzNTM3OSwgMzUzODMsIAotICAgIDM1Mzg3LCAzNTM5MCwgMzUzOTIsIDM1NDAwLCAzNTQwNCwgMzU0MTEsIDM1NDE1LCAzNTQxOSwgMzU0MjcsIDM1NDM0LCAKLSAgICAzNTQ0NCwgMzU0NDgsIDM1NDUyLCAzNTQ2MCwgMzU0NjgsIDM1NDc0LCAzNTQ3OSwgMzU0ODgsIDEzMzUwLCAzNTQ5NCwgCi0gICAgMzU1MDMsIDM1NTA4LCAzNTUxNSwgMzU1MjMsIDM1NTMxLCAzNTUzOSwgMzU1NDYsIDM1NTUzLCAzNTU2MCwgMzU1NjcsIAotICAgIDM1NTc0LCAzNTU3OSwgMzU1ODUsIDM1NjAyLCAzNTYxMCwgMzU2MjAsIDM1NjI4LCAzNTYzNSwgNDA3LCAzNTYzOSwgCi0gICAgMzU2NDUsIDM1NjQ5LCAzNTY1NCwgMzM2OTIsIDM1NjYwLCAzNTY2MywgMzU2NjcsIDM1Njc1LCAzNjE5LCAzNTY4MywgCi0gICAgMzU2ODksIDM1Njk1LCAzNTcwNCwgMzU3MTQsIDM1NzIxLCAzNTcyNywgMzYyNSwgMzYzMSwgMzU3MzYsIDM1NzQzLCAKLSAgICAzNTc1MSwgMzU3NTYsIDM1NzYwLCAzNTc2NywgMzU3NzUsIDM1NzgyLCAzNTc4OCwgMzU3OTcsIDM1ODA3LCAzNTgxMywgCi0gICAgMzU4MjEsIDM1ODMwLCAzNTgzNywgMzU4NDUsIDM1ODUyLCAyMjAxOSwgMzU4NTYsIDM1ODYzLCAzNTg2OSwgMzU4NzksIAotICAgIDM1ODg4LCAzNTg5OSwgMzU5MDMsIDM1OTEzLCAzNTkxOSwgMzU5MjYsIDM1OTM0LCAzNTk0MywgMzU5NTIsIDM1OTYyLCAKLSAgICAzNTk3MywgMzU5ODAsIDM1OTg1LCAzNTk5MiwgMzAyOSwgMzYwMDAsIDM2MDA2LCAzNjAxMSwgMzYwMTcsIDM2MDIzLCAKLSAgICAzNjAyOCwgMzYwNDEsIDM2MDU0LCAzNjA2NywgMzYwNzQsIDM2MDgwLCAzNjA4OCwgMzYwOTYsIDM2MTAxLCAzNjEwNSwgCi0gICAgMTQ2OSwgMzYxMDksIDM2MTE0LCAzNjExOSwgMzYxMjQsIDM2MTI5LCAzNjEzNSwgMzYxNDAsIDM2MTQ1LCAzNjE1MCwgCi0gICAgMzYxNTUsIDM2MTYwLCAzNjE2NSwgMzYxNzAsIDM2MTc2LCAzNjE4MiwgMzYxODcsIDM2MTkyLCAzNjE5OCwgMzYyMDMsIAotICAgIDM2MjA4LCAzNjIxMywgMzYyMTksIDM2MjI0LCAzNjIyOSwgMzYyMzQsIDM2MjM5LCAzNjI0NSwgMzYyNTAsIDM2MjU1LCAKLSAgICAzNjI2MSwgMzYyNjYsIDM2MjcxLCAzNjI3NiwgMzYyODEsIDM2Mjg2LCAzNjI5MiwgMzYyOTcsIDM2MzAzLCAzNjMwOCwgCi0gICAgMzYzMTQsIDM2MzE5LCAzNjMyNCwgMzYzMjksIDM2MzM1LCAzNjM0MSwgMzYzNDcsIDM2MzUzLCAzNjM1OSwgMzYzNjUsIAotICAgIDM2MzcxLCAzNjM3NywgMzYzODIsIDM2Mzg3LCAzNjM5MywgMzYzOTgsIDM2NDAzLCAzNjQwOCwgMzY0MTMsIDM2NDE4LCAKLSAgICAzNjQyMywgMzY0MjgsIDM2NDM0LCAzNjQzOSwgMzY0NDQsIDM2NDUwLCAzNjQ1NiwgMTAxLCAzNjQ2MSwgMzY0NjMsIAotICAgIDM2NDY3LCAzNjQ3MSwgMzY0NzUsIDM2NDgwLCAzNjQ4NCwgOTUyMSwgMzY0ODgsIDM2NDk0LCAxNzQxLCA2MjgwLCAzNjUwMCwgCi0gICAgMzY1MDMsIDM2NTA4LCAzNjUxMiwgMzY1MTcsIDM2NTIxLCAzNjUyNSwgMzY1MzAsIDEwMjM4LCAzNjUzNCwgMzY1MzgsIAotICAgIDM2NTQyLCAzNjU0NiwgMTUzNzIsIDM2NTUxLCAzNjU1NSwgMzY1NjAsIDM2NTY1LCAzNjU3MCwgMzY1NzQsIDM2NTgxLCAKLSAgICAyNjExMSwgMzY1ODcsIDM2NTkwLCAzNjU5NCwgMzY1OTksIDM2NjA1LCAzNjYwOSwgMzY2MTcsIDM2NjIzLCAzNjYyOCwgCi0gICAgMzY2MzIsIDM2NjM4LCAzNjY0MiwgMzY2NDYsIDM0NjIsIDM0NjcsIDI5MjM0LCAzNjY0OSwgMzY2NTMsIDM2NjU3LCAKLSAgICAzNjY2MSwgMzY2NjksIDM2Njc2LCAzNjY4MCwgMzY2ODcsIDM2NjkyLCAzMTcsIDM2Njk3LCAzNjcwMSwgMzY3MDcsIAotICAgIDM2NzE5LCAzNjcyNSwgMzY3MzEsIDM2NzM1LCAzNjc0MSwgMzY3NTAsIDM2NzU0LCAzNjc1OCwgMzY3NjMsIDM2NzY5LCAKLSAgICAzNjc3NCwgMzY3NzgsIDM2NzgzLCAzNjc4NywgMzY3OTEsIDM2Nzk4LCAzNjgwNCwgMzY4MDksIDM2ODI0LCAzNjgzOSwgCi0gICAgMzY4NTQsIDM2ODcwLCAzNjg4OCwgMTAxODgsIDM2OTAyLCAzNjkwOSwgMzY5MTMsIDM2OTE2LCAzNjkyNSwgMzY5MzAsIAotICAgIDM2OTM0LCAzNjk0MiwgMzM4OTQsIDM2OTUwLCAzNjk1NCwgMzY5NjQsIDM2OTc1LCAyOTIwNCwgMzY5ODgsIDM2OTkyLCAKLSAgICAzNzAwMSwgMzcwMDksIDk3NzgsIDE0OTAwLCAzNzAxMywgMjI0MzQsIDM3MDE2LCAzMDE1MiwgMzcwMjEsIDk3NzcsIAotICAgIDM3MDI2LCAzNzAzMiwgMzcwMzcsIDM3MDQzLCAzNzA0OCwgMzcwNTQsIDM3MDU5LCAzNzA2NSwgMzcwNzAsIDM3MDc2LCAKLSAgICAzNzA4MiwgMzcwODgsIDM3MDkzLCAzNzA0OSwgMzcwNTUsIDM3MDYwLCAzNzA2NiwgMzcwNzEsIDM3MDc3LCAzNzA4MywgCi0gICAgODEyNiwgMzg3NCwgMzcwOTcsIDM3MTA1LCAzNzEwOSwgMzcxMTIsIDM3MTE2LCAzNzEyMSwgMzcxMjYsIDM3MTMyLCAKLSAgICAzNzEzOCwgMzcxNDMsIDM3MTQ3LCAyNTk1OSwgMzcxNTEsIDM3MTU1LCAzNzE2MSwgMzcxNjUsIDkwNDIsIDM3MTc0LCAKLSAgICAzNzE4MSwgMzcxODUsIDExODY4LCAzNzE5MiwgMzcxOTgsIDM3MjAzLCAzNzIxMCwgMzcyMTcsIDM3MjI0LCAyODU1MCwgCi0gICAgODA0OSwgMzcyMzEsIDM3MjM4LCAzNzI0NSwgMzcyNTEsIDM3MjU2LCAzNzI2MywgMzcyNzQsIDM3MjgwLCAzNzI4NSwgCi0gICAgMzcyOTAsIDM3Mjk1LCAzNzMwMiwgMzcwNTAsIDM3MzA2LCAzNzMxNiwgMzczMjcsIDM3MzMzLCAzNzMzOCwgMzczNDMsIAotICAgIDM3MzQ4LCAzNzM1MywgMzczNTgsIDM3MzYyLCAzNzM2NiwgMzczNzIsIDM3MzgwLCAyMzE5LCA4NjUsIDEwMjU0LCAxMDI2NiwgCi0gICAgMTAyNzEsIDEwMjc3LCAzNzM4OSwgMTAyODIsIDEwMjg3LCAxMDI5MywgMzczOTQsIDM3NDA0LCAzNzQwOCwgMTAyOTgsIAotICAgIDM3NDEzLCAxNjg5MCwgMzc0MTYsIDM3NDIxLCAzNzQyNSwgMzc0MzAsIDM3NDM1LCAzNzQ0MiwgMzc0NDksIDM3NDUzLCAKLSAgICAzNzQ1NiwgMzc0NjQsIDEwMjAxLCAzNzQ3MSwgMzc0NzQsIDM3NDgwLCAzNzQ5MCwgNTkyOSwgMzc0OTksIDM3NTAzLCAKLSAgICAzNzUxMSwgMzc1MTUsIDM3NTI1LCAzNzUzMSwgMzc1NDIsIDM3NTQ4LCAzNzU1NCwgMzc1NTksIDM3NTY1LCAzNzU3MSwgCi0gICAgMzc1NzcsIDM3NTgyLCAzNzU4NSwgMzc1OTIsIDM3NTk4LCAzNzYwMywgMzc2MTAsIDM3NjE3LCAzNzYyMSwgMzc2MzEsIAotICAgIDM3NjQ0LCAzNzY1MywgMzc2NjIsIDM3NjczLCAzNzY4NiwgMzc2OTcsIDM3NzA2LCAzNzcxNywgMzc3MjIsIDM3NzMxLCAKLSAgICAzNzczNiwgMTAzMDMsIDM3NzQyLCAzNzc0OSwgMzc3NTcsIDM3NzYyLCAzNzc2NiwgMzc3NzMsIDM3NzgwLCAzODI5LCAxNiwgCi0gICAgMzc3ODQsIDM3Nzg5LCAxNjc0NCwgMzc3OTMsIDM3Nzk2LCAzNzc5OSwgMjgwNTYsIDM3ODAzLCAyODU1OSwgMzc4MTEsIAotICAgIDM3ODE1LCAzNzgxOSwgMzc4MjIsIDM3ODI4LCAzNzA3MiwgMzc4MzQsIDM3ODQyLCAzNzg0OCwgMzc4NTUsIDI4MDM5LCAKLSAgICAzNzg1OSwgMjgyMzMsIDM3ODYzLCAzNzg3MiwgMzc4NzgsIDM3ODg0LCAzNzg4OSwgMzc4OTMsIDM3ODk5LCAzNzkwMywgCi0gICAgMzc5MTEsIDM3OTE5LCAyNjE3NywgMzc5MjUsIDM3OTMyLCAzNzkzOCwgMzc5NDMsIDM3OTQ4LCAzNzk1MiwgMzc5NTgsIAotICAgIDM3OTYzLCAzNzk2OSwgNDA1NiwgNzkxLCAzNzk3NiwgMzc5ODAsIDM3OTgzLCAxNTI2MiwgMzc5OTUsIDM1ODI2LCAzODAwNiwgCi0gICAgMzgwMDksIDM4MDE2LCAzODAyMCwgMzgwMjYsIDM4MDMwLCAzODAzNiwgMzgwNDEsIDM4MDQ3LCAzODA1MiwgMzgwNTcsIAotICAgIDM4MDYxLCAzODA2NSwgMzgwNzAsIDM4MDc1LCAzODA4NSwgMzgwOTEsIDM4MTA0LCAzODExMCwgMzgxMTYsIDM4MTIzLCAKLSAgICAzODEyOCwgMzgxMzQsIDM4MTM5LCAxNjYzMCwgMTQ3MiwgMTAxOSwgMzExOTMsIDMxMTk5LCAzODE0NCwgMzEyMDUsIAotICAgIDMxMjE4LCAzMTIyNCwgMzEyMzAsIDM4MTUwLCAzMTIzNiwgMzEyNDIsIDM4MTU2LCAzODE2MiwgMjIsIDM4MTcwLCAzODE3NywgCi0gICAgMzgxODEsIDM4MTg1LCAzODE5MywgMzE5NTMsIDM4MTk3LCAzODIwMSwgMzgyMDgsIDM4MjEzLCAzODIxNywgMzgyMjIsIAotICAgIDM4MjI4LCAzODIzMywgMzgyMzksIDM4MjQ0LCAzODI0OCwgMzgyNTIsIDM4MjU2LCAzODI2MSwgMzgyNjUsIDM4MjcwLCAKLSAgICAzODI3NCwgMzgyODEsIDM4Mjg2LCAzODI5MCwgMzgyOTUsIDM4Mjk5LCAzODMwNCwgMzgzMDgsIDM4MzEzLCAzODMxOSwgCi0gICAgMTU0ODIsIDE1NDg3LCAzODMyNCwgMzgzMjgsIDM4MzMxLCAzODMzNSwgMjExNzAsIDM4MzQwLCAzODM0NCwgMzgzNTAsIAotICAgIDM4MzU3LCAzODM2MiwgMzgzNzIsIDM4Mzc3LCAzODM4NSwgMzgzODksIDM4MzkyLCAzMTk2OCwgMzgzOTYsIDQxMDksIAotICAgIDM4NDAxLCAzODQwNiwgMzg0MTAsIDM4NDE1LCAzODQxOSwgMzg0MjQsIDEzMzY4LCAzODQzNSwgMzg0MzksIDM4NDQyLCAKLSAgICAzODQ0NywgMzg0NTEsIDM4NDU1LCAzODQ1OCwgMzg0NjIsIDgxNDUsIDEzMzg0LCAzODQ2NSwgMzg0NjgsIDM4NDc0LCAKLSAgICAzODQ3OSwgMzg0ODUsIDM4NDkwLCAzODQ5NiwgMzg1MDEsIDM4NTA3LCAzODUxMiwgMzg1MTgsIDM4NTI0LCAzODUzMCwgCi0gICAgMzg1MzUsIDM4NTM5LCAzODU0MywgMzg1NTIsIDM4NTY4LCAzODU4NCwgMzg1OTQsIDI3OTQ2LCAzODYwMSwgMzg2MDUsIAotICAgIDM4NjEwLCAzODYxNSwgMzg2MTksIDM4NjIzLCAzNTk0NywgMzg2MjksIDM4NjM0LCAzODYzOCwgMzg2NDUsIDM4NjUwLCAKLSAgICAzODY1NCwgMzg2NTgsIDI2OTc5LCAzODY2NCwgMjE0MzgsIDM4NjY5LCAzODY3NiwgMzg2ODQsIDM4NjkwLCAzODY5NywgCi0gICAgMzg3MDUsIDM4NzExLCAzODcxNSwgMzg3MjEsIDM4NzI5LCAzODczMywgMzg3NDIsIDk1MDIsIDM4NzUwLCAzODc1NCwgCi0gICAgMzg3NjIsIDM4NzY5LCAzODc3NCwgMzg3NzksIDM4NzgzLCAzODc4NiwgMzg3OTAsIDM4NzkzLCAzODc5NywgMzg4MDQsIAotICAgIDM4ODA5LCAzODgxNSwgMjYzOTgsIDMxMjU2LCAzODgxOSwgMzg4MjYsIDM4ODMyLCAzODgzOCwgMzg4NDMsIDM4ODQ2LCAKLSAgICAzODg0OCwgMzg4NTUsIDM4ODYyLCAzODg2OCwgMzg4NzIsIDM4ODc1LCAzODg3OSwgMzg4ODMsIDM4ODg3LCAzODg5MiwgCi0gICAgMzg4OTYsIDM4OTAwLCAzODkwMywgMzg5MDcsIDM4OTIxLCAyMzA0NSwgMzg5NDAsIDM4OTUzLCAzODk2NiwgMzg5NzksIAotICAgIDIzMDYzLCAzODk5NCwgMTA0OTAsIDM5MDA5LCAzOTAxNSwgMzkwMTksIDM5MDIzLCAzOTAzMCwgMzkwMzUsIDM5MDM5LCAKLSAgICAzOTA0NiwgMzkwNTIsIDM5MDU3LCAzOTA2MywgMzkwNzMsIDM5MDg1LCAzOTA5NiwgMzkxMDEsIDM5MTA4LCAzOTExMiwgCi0gICAgMzkxMTYsIDM5MTE5LCAxNTg3OCwgMzY3NywgMzkxMjcsIDE1NTA5LCAzOTE0MCwgMzkxNDcsIDM5MTUxLCAzOTE1NSwgCi0gICAgMzkxNjAsIDM5MTY1LCAzOTE3MSwgMzkxNzUsIDM5MTc5LCAzOTE4MiwgNzc0MiwgMTU1MjAsIDM5MTg3LCAzOTE5MSwgCi0gICAgMzkxOTcsIDM5MjA2LCAzOTIxMSwgMzkyMTgsIDM1ODAzLCAzOTIyNCwgMzkyMjksIDM5MjMzLCAzOTIzOCwgMzkyNDUsIAotICAgIDM5MjQ5LCAzOTI1MiwgMzkyNTYsIDM5MjYxLCAxNDU1MiwgMzkyNjgsIDM5Mjc1LCAxMDY2LCAzOTI3OSwgMzkyODQsIAotICAgIDM5Mjg5LCAzOTI5NSwgMzkzMDAsIDM5MzA1LCAzOTMwOSwgMzkzMTksIDM5MzI0LCAzOTMzMCwgMzkzMzUsIDM5MzQxLCAKLSAgICAzOTM0NiwgMzkzNTIsIDM5MzYyLCAzOTM2NywgMzkzNzIsIDM5Mzc2LCA3MjI5LCA3MjQxLCAzOTM4MSwgMzkzODQsIAotICAgIDM5MzkxLCAzOTM5NywgMzQwNTksIDM0MDY2LCAzOTQwNiwgMzk0MTAsIDMyMDE2LCAzOTQxOCwgMzk0MjksIDM5NDM3LCAKLSAgICAzNTk5NSwgMzk0NDQsIDM5NDQ5LCAzOTQ1NCwgMzk0NjUsIDM5NDcyLCAzOTQ4MywgMzIwNDAsIDIxNDQ0LCAzOTQ5MSwgCi0gICAgNzM1LCAzOTQ5NiwgMzk1MDIsIDI4MDMwLCAzOTUwOCwgMzk1MTMsIDM5NTIzLCAzOTUzMiwgMzk1MzksIDM5NTQ1LCAKLSAgICAzOTU0OSwgMzk1NTIsIDM5NTU5LCAzOTU2NSwgMzk1NzIsIDM5NTc4LCAzOTU4OCwgMzk1OTYsIDM5NjAyLCAzOTYwOCwgCi0gICAgMzk2MTMsIDM5NjE3LCAzOTYyNCwgMzk2MzAsIDM5NjM3LCAzODg4OCwgNTM1LCAxMzgwNSwgMzk2NDMsIDM5NjQ4LCAKLSAgICAzOTY1MSwgMzk2NTcsIDM5NjY1LCAxMzk2LCAzOTY3MCwgMzk2NzQsIDM5Njc5LCAzOTY4NiwgMzk2OTIsIDM5Njk2LCAKLSAgICAzOTcwMCwgMzk3MDUsIDM5NzE0LCAzOTcyMSwgMzk3MzEsIDM5NzM3LCAyODA3NCwgMzk3NTQsIDM5NzYzLCAzOTc3MSwgCi0gICAgMzk3NzcsIDM5NzgyLCAzOTc4OSwgMzk3OTUsIDM5ODAzLCAzOTgxMiwgMzk4MjAsIDM5ODI0LCAzOTgyOSwgMzk4MzcsIAotICAgIDMyMDQ5LCAzOTg0MywgMzk4NjIsIDE1ODExLCAzOTg3NiwgMzk4OTIsIDM5OTA2LCAzOTkxMiwgMzk5MTcsIDM5OTIyLCAKLSAgICAzOTkyNywgMzk5MzMsIDMyMDU1LCAzOTkzOCwgMzk5NDUsIDM5OTUwLCAzOTk1NCwgMzQ1LCAyOTM2LCAzOTk2MSwgMzk5NjYsIAotICAgIDM5OTcxLCAyNzMwNSwgMzk3OTIsIDM5OTc1LCAzOTk4MCwgMzk5ODgsIDM5OTkyLCAzOTk5NSwgNDAwMDEsIDQwMDA3LCAKLSAgICA0MDAxMSwgMjgxMjksIDQwMDE0LCA0MDAxOSwgNDAwMjMsIDQwMDI2LCA0MDAzMSwgNDAwMzUsIDQwMDQwLCA0MDA0NSwgCi0gICAgNDAwNDksIDQwMDU0LCA0MDA1OCwgNDAwNjIsIDIxMTY2LCAyMTE3NywgNDAwNjYsIDQwMDcxLCA0MDA3NywgMjY5MzYsIAotICAgIDQwMDgyLCA0MDA4NiwgMjEyNTMsIDE2MDU5LCA0MDA4OSwgNDAwOTQsIDQwMDk5LCA0MDEwNCwgNDAxMDksIDQwMTE0LCAKLSAgICA0MDExOSwgNDAxMjQsIDQ0NywgNDMsIDMxMjc0LCAzMTI3OSwgMzEyODQsIDMxMjkwLCAzMTI5NSwgMzEzMDAsIDQwMTI5LCAKLSAgICAzMTMwNCwgNDAxMzMsIDQwMTM3LCA0MDE0MSwgMzEzMDksIDMxMzE1LCA0MDE1NSwgMzEzMjYsIDMxMzMxLCA0MDE2MywgCi0gICAgNDAxNjgsIDMxMzM3LCA0MDE3MywgNDAxNzgsIDQwMTgzLCA0MDE4OCwgNDAxOTQsIDQwMjAwLCA0MDIwNiwgMzEzNTQsIAotICAgIDQwMjE5LCA0MDIyNSwgMzEzNTgsIDQwMjI5LCAzMTM2MywgNDAyMzQsIDMxMzY4LCAzMTM3MywgNDAyMzcsIDQwMjQyLCAKLSAgICA0MDI0NiwgMzA5MjMsIDQwMjUyLCAxMzU5MiwgNDAyNTksIDQwMjY0LCAzMTM3OCwgNDAyNjgsIDQwMjczLCA0MDI3OCwgCi0gICAgNDAyODMsIDQwMjg3LCA0MDI5MiwgNDAyOTcsIDQwMzAzLCA0MDMwOCwgNDAzMTMsIDQwMzE5LCA0MDMyNSwgNDAzMzAsIAotICAgIDQwMzM0LCA0MDMzOSwgNDAzNDQsIDQwMzQ5LCA0MDM1MywgNDAzNTgsIDQwMzYzLCA0MDM2OCwgNDAzNzQsIDQwMzgwLCAKLSAgICA0MDM4NiwgNDAzOTEsIDQwMzk1LCA0MDQwMCwgNDA0MDQsIDMxMzgyLCAzMTM4NywgMzEzOTIsIDQwNDA4LCA0MDQxMiwgCi0gICAgNDA0MTYsIDMxMzk3LCAzMTQwMywgMzE0MDksIDMxNDIxLCA0MDQyOCwgMjU5OTYsIDQwNDMyLCA0MDQzNiwgNDA0NDEsIAotICAgIDQwNDQ2LCA0MDQ1MSwgNDA0NTYsIDQwNDYwLCA0MDQ2NCwgNDA0NzQsIDQwNDc5LCA0MDQ4NCwgNDA0ODgsIDQwNDkyLCAKLSAgICA0MDQ5NSwgNDA1MDMsIDMxNDY5LCA0MDUwOCwgMTQ3OSwgNDA1MTQsIDQwNTIyLCA0MDUzMSwgNDA1MzUsIDQwNTM5LCAKLSAgICA0MDU0NywgNDA1NTMsIDQwNTYxLCA0MDU3NywgNDA1ODEsIDQwNTg1LCA0MDU5MCwgNDA2MDUsIDMxNTA2LCAxNzQ5LCAKLSAgICAxMjA0OCwgNDA2MDksIDEzNzgsIDQwNjIxLCA0MDYyMiwgNDA2MzAsIDQwNjM3LCA0MDY0MiwgNDA2NDksIDQwNjU0LCAKLSAgICA5MzcyLCAxMTE0LCAxMDMyNSwgNDA2NjEsIDQwNjY2LCA0MDY2OSwgNDA2NzIsIDQwNjgxLCAxMjg2LCA0MDY4NiwgMzkwMzYsIAotICAgIDQwNjkzLCA0MDY5OCwgMjI0ODYsIDI1NTcsIDQwNzAyLCAxMDczNCwgNDA3MTIsIDQwNzE4LCAyMzM3LCAyMzQ3LCA0MDcyNywgCi0gICAgNDA3MzYsIDQwNzQ2LCA0MDc1NywgMzI5MywgMzQyMTIsIDEwMzc3LCAzODA3LCAxNjY2OCwgMTI5MSwgNDA3NjIsIDQwNzcwLCAKLSAgICA0MDc3NywgNDA3ODIsIDQwNzg2LCA0MDc5MCwgMjM4NTgsIDEwNDA0LCA0MDc5OCwgNDA4MDcsIDQwODE2LCA0MDgyNCwgCi0gICAgNDA4MzEsIDQwODQyLCA0MDg0NywgNDA4NjAsIDQwODczLCA0MDg4NSwgNDA4OTcsIDQwOTA5LCA0MDkyMiwgNDA5MzMsIAotICAgIDQwOTQ0LCA0MDk1NCwgNDA5NjIsIDQwOTcwLCA0MDk4MiwgNDA5OTQsIDQxMDA1LCA0MTAxNCwgNDEwMjIsIDQxMDI5LCAKLSAgICA0MTA0MSwgNDEwNDgsIDQxMDU3LCA0MTA2NCwgNDEwNzcsIDQxMDgyLCA0MTA5MiwgNDEwOTcsIDQxMTAzLCA0MTEwOCwgCi0gICAgMzcxODIsIDQxMTEyLCA0MTExOSwgNDExMjMsIDQxMTMwLCA0MTEzOCwgMjUxOCwgNDExNDUsIDQxMTU2LCA0MTE2NiwgCi0gICAgNDExNzUsIDQxMTgzLCA0MTE5MywgNDEyMDEsIDQxMjExLCA0MTIyMCwgNDEyMjUsIDQxMjMxLCA0MTIzNywgMzcwOSwgCi0gICAgNDEyNDgsIDQxMjU4LCA0MTI2NywgNDEyNzYsIDQxMjg2LCA0MTI5NCwgNDEzMDMsIDQxMzA4LCA0MTMxMywgNDEzMTgsIAotICAgIDE3MDUsIDM3LCA0MTMyNiwgNDEzMzQsIDQxMzQ1LCA0MTM1NiwgMTYzNDMsIDQxMzY2LCA0MTM3MCwgNDEzNzcsIDQxMzgzLCAKLSAgICA0MTM4OCwgNDEzOTIsIDQxNDAzLCA0MTQxMywgNDE0MjIsIDQxNDMzLCAxNjcxNywgMTY3MjIsIDQxNDM4LCA0MTQ0NywgCi0gICAgNDE0NTIsIDQxNDYyLCA0MTQ2NywgNDE0NzUsIDQxNDgzLCA0MTQ5MCwgNDE0OTYsIDcwNzgsIDIyOCwgNDE1MDAsIDQxNTA2LCAKLSAgICA0MTUxMSwgNDE1MTQsIDIxMTcsIDM5MTUyLCA0MTUyMiwgNDE1MjYsIDQxNTI5LCAxNTEyLCA0MTUzNSwgMTM5NjcsIDEyOTYsIAotICAgIDQxNTQwLCA0MTU1MywgNDE1NjcsIDI2NDMsIDQxNTg1LCA0MTU5NywgNDE2MDksIDI2NTcsIDI2NzQsIDQxNjIzLCA0MTYzNiwgCi0gICAgMjY4OSwgNDE2NTAsIDQxNjYyLCAyNzA0LCA0MTY3NiwgMTMwMiwgMTMwOCwgMTMxNCwgMTA2NTIsIDQxNjgxLCA0MTY4NiwgCi0gICAgNDE2OTEsIDQxNjk1LCA0MTcxMCwgNDE3MjUsIDQxNzQwLCA0MTc1NSwgNDE3NzAsIDQxNzg1LCA0MTgwMCwgNDE4MTUsIAotICAgIDQxODMwLCA0MTg0NSwgNDE4NjAsIDQxODc1LCA0MTg5MCwgNDE5MDUsIDQxOTIwLCA0MTkzNSwgNDE5NTAsIDQxOTY1LCAKLSAgICA0MTk4MCwgNDE5OTUsIDQyMDEwLCA0MjAyNSwgNDIwNDAsIDQyMDU1LCA0MjA3MCwgNDIwODUsIDQyMTAwLCA0MjExNSwgCi0gICAgNDIxMzAsIDQyMTQ1LCA0MjE2MCwgNDIxNzUsIDQyMTkwLCA0MjIwNSwgNDIyMjAsIDQyMjM1LCA0MjI1MCwgNDIyNjUsIAotICAgIDQyMjgwLCA0MjI5NSwgNDIzMTAsIDQyMzI1LCA0MjM0MCwgNDIzNTUsIDQyMzcwLCA0MjM4NSwgNDI0MDAsIDQyNDE1LCAKLSAgICA0MjQzMCwgNDI0NDUsIDQyNDYwLCA0MjQ3NSwgNDI0OTAsIDQyNTA1LCA0MjUyMCwgNDI1MzUsIDQyNTUwLCA0MjU2NSwgCi0gICAgNDI1ODAsIDQyNTk1LCA0MjYxMCwgNDI2MjUsIDQyNjQwLCA0MjY1NSwgNDI2NzAsIDQyNjg1LCA0MjcwMCwgNDI3MTUsIAotICAgIDQyNzMwLCA0Mjc0NSwgNDI3NjAsIDQyNzc1LCA0Mjc5MCwgNDI4MDUsIDQyODIwLCA0MjgzNSwgNDI4NTAsIDQyODY1LCAKLSAgICA0Mjg4MCwgNDI4OTUsIDQyOTEwLCA0MjkyNSwgNDI5NDAsIDQyOTU1LCA0Mjk3MCwgNDI5ODUsIDQzMDAwLCA0MzAxNSwgCi0gICAgNDMwMzAsIDQzMDQ1LCA0MzA2MCwgNDMwNzUsIDQzMDkwLCA0MzEwNSwgNDMxMjAsIDQzMTM1LCA0MzE1MCwgNDMxNjUsIAotICAgIDQzMTgwLCA0MzE5NSwgNDMyMTAsIDQzMjI1LCA0MzI0MCwgNDMyNTUsIDQzMjcwLCA0MzI4NSwgNDMzMDAsIDQzMzE1LCAKLSAgICA0MzMzMCwgNDMzNDUsIDQzMzYwLCA0MzM3NSwgNDMzOTAsIDQzNDA1LCA0MzQyMCwgNDM0MzUsIDQzNDUwLCA0MzQ2NSwgCi0gICAgNDM0ODAsIDQzNDk1LCA0MzUxMCwgNDM1MjUsIDQzNTQwLCA0MzU1NSwgNDM1NzAsIDQzNTg1LCA0MzYwMCwgNDM2MTUsIAotICAgIDQzNjMwLCA0MzY0NSwgNDM2NjAsIDQzNjc1LCA0MzY5MCwgNDM3MDUsIDQzNzIwLCA0MzczNSwgNDM3NTAsIDQzNzY1LCAKLSAgICA0Mzc4MCwgNDM3OTUsIDQzODEwLCA0MzgyNSwgNDM4NDAsIDQzODU1LCA0Mzg3MCwgNDM4ODUsIDQzOTAwLCA0MzkxNSwgCi0gICAgNDM5MzAsIDQzOTQ1LCA0Mzk2MCwgNDM5NzUsIDQzOTkwLCA0NDAwNSwgNDQwMjAsIDQ0MDM1LCA0NDA1MCwgNDQwNjUsIAotICAgIDQ0MDgwLCA0NDA5NSwgNDQxMTAsIDQ0MTI1LCA0NDE0MCwgNDQxNTUsIDQ0MTcwLCA0NDE4NSwgNDQyMDAsIDQ0MjE1LCAKLSAgICA0NDIzMCwgNDQyNDUsIDQ0MjYwLCA0NDI3NSwgNDQyOTAsIDQ0MzA1LCA0NDMyMCwgNDQzMzUsIDQ0MzUwLCA0NDM2NSwgCi0gICAgNDQzODAsIDQ0Mzk1LCA0NDQxMCwgNDQ0MjUsIDQ0NDQwLCA0NDQ1NSwgNDQ0NzAsIDQ0NDg1LCA0NDUwMCwgNDQ1MTUsIAotICAgIDQ0NTMwLCA0NDU0NSwgNDQ1NjAsIDQ0NTc1LCA0NDU5MCwgNDQ2MDUsIDQ0NjIwLCA0NDYzNSwgNDQ2NTAsIDQ0NjY1LCAKLSAgICA0NDY4MCwgNDQ2OTUsIDQ0NzEwLCA0NDcyNSwgNDQ3NDAsIDQ0NzU1LCA0NDc3MCwgNDQ3ODUsIDQ0ODAwLCA0NDgxNSwgCi0gICAgNDQ4MzAsIDQ0ODQ1LCA0NDg2MCwgNDQ4NzUsIDQ0ODkwLCA0NDkwNSwgNDQ5MjAsIDQ0OTM1LCA0NDk1MCwgNDQ5NjUsIAotICAgIDQ0OTgwLCA0NDk5NSwgNDUwMTAsIDQ1MDI1LCA0NTA0MCwgNDUwNTUsIDQ1MDcwLCA0NTA4NSwgNDUxMDAsIDQ1MTE1LCAKLSAgICA0NTEzMCwgNDUxNDUsIDQ1MTYwLCA0NTE3NSwgNDUxOTAsIDQ1MjA1LCA0NTIyMCwgNDUyMzUsIDQ1MjUwLCA0NTI2NSwgCi0gICAgNDUyODAsIDQ1Mjk1LCA0NTMxMCwgNDUzMjUsIDQ1MzQwLCA0NTM1NSwgNDUzNzAsIDQ1Mzg1LCA0NTQwMCwgNDU0MTUsIAotICAgIDQ1NDMwLCA0NTQ0NSwgNDU0NjAsIDQ1NDc1LCA0NTQ5MCwgNDU1MDUsIDQ1NTIwLCA0NTUzNSwgNDU1NTAsIDQ1NTY1LCAKLSAgICA0NTU4MCwgNDU1OTUsIDQ1NjEwLCA0NTYyNSwgNDU2NDAsIDQ1NjU1LCA0NTY3MCwgNDU2ODUsIDQ1NzAwLCA0NTcxNSwgCi0gICAgNDU3MzAsIDQ1NzQ1LCA0NTc2MCwgNDU3NzUsIDQ1NzkwLCA0NTgwNSwgNDU4MjAsIDQ1ODM1LCA0NTg1MCwgNDU4NjUsIAotICAgIDQ1ODgwLCA0NTg5NSwgNDU5MTAsIDQ1OTI1LCA0NTk0MCwgNDU5NTUsIDQ1OTcwLCA0NTk4NSwgNDYwMDAsIDQ2MDE1LCAKLSAgICA0NjAzMCwgNDYwNDUsIDQ2MDYwLCA0NjA3NSwgNDYwOTAsIDQ2MTA1LCA0NjEyMCwgNDYxMzUsIDQ2MTUwLCA0NjE2NSwgCi0gICAgNDYxODAsIDQ2MTk1LCA0NjIxMCwgNDYyMjUsIDQ2MjQwLCA0NjI1NSwgNDYyNzAsIDQ2Mjg1LCA0NjMwMCwgNDYzMTUsIAotICAgIDQ2MzMwLCA0NjM0NSwgNDYzNjAsIDQ2Mzc1LCA0NjM5MCwgNDY0MDUsIDQ2NDIwLCA0NjQzNSwgNDY0NTAsIDQ2NDY1LCAKLSAgICA0NjQ4MCwgNDY0OTUsIDQ2NTEwLCA0NjUyNSwgNDY1NDAsIDQ2NTU1LCA0NjU3MCwgNDY1ODUsIDQ2NjAwLCA0NjYxNSwgCi0gICAgNDY2MzAsIDQ2NjQ1LCA0NjY2MCwgNDY2NzUsIDQ2NjkwLCA0NjcwNSwgNDY3MjAsIDQ2NzM1LCA0Njc1MCwgNDY3NjUsIAotICAgIDQ2NzgwLCA0Njc5NSwgNDY4MTAsIDQ2ODI1LCA0Njg0MCwgNDY4NTUsIDQ2ODcwLCA0Njg4NSwgNDY5MDAsIDQ2OTE1LCAKLSAgICA0NjkzMCwgNDY5NDUsIDQ2OTYwLCA0Njk3NSwgNDY5OTAsIDQ3MDA1LCA0NzAyMCwgNDcwMzUsIDQ3MDUwLCA0NzA2NSwgCi0gICAgNDcwODAsIDQ3MDk1LCA0NzExMCwgNDcxMjUsIDQ3MTQwLCA0NzE1NSwgNDcxNzAsIDQ3MTg1LCA0NzIwMCwgNDcyMTUsIAotICAgIDQ3MjMwLCA0NzI0NSwgNDcyNjAsIDQ3Mjc1LCA0NzI5MCwgNDczMDUsIDQ3MzIwLCA0NzMzNSwgNDczNTAsIDQ3MzY1LCAKLSAgICA0NzM4MCwgNDczOTUsIDQ3NDEwLCA0NzQyNSwgNDc0NDAsIDQ3NDU1LCA0NzQ3MCwgNDc0ODUsIDQ3NTAwLCA0NzUxNSwgCi0gICAgNDc1MzAsIDQ3NTQ1LCA0NzU2MCwgNDc1NzUsIDQ3NTkwLCA0NzYwNSwgNDc2MjAsIDQ3NjM1LCA0NzY1MCwgNDc2NjUsIAotICAgIDQ3NjgwLCA0NzY5NSwgNDc3MTAsIDQ3NzI1LCA0Nzc0MCwgNDc3NTUsIDQ3NzcwLCA0Nzc4NSwgNDc4MDAsIDQ3ODE1LCAKLSAgICA0NzgzMCwgNDc4NDUsIDQ3ODYwLCA0Nzg3NSwgNDc4OTAsIDQ3OTA1LCA0NzkyMCwgNDc5MzUsIDQ3OTUwLCA0Nzk2NSwgCi0gICAgNDc5ODAsIDQ3OTk1LCA0ODAxMCwgNDgwMjUsIDQ4MDQwLCA0ODA1NSwgNDgwNzAsIDQ4MDg1LCA0ODEwMCwgNDgxMTUsIAotICAgIDQ4MTMwLCA0ODE0NSwgNDgxNjAsIDQ4MTc1LCA0ODE5MCwgNDgyMDUsIDQ4MjIwLCA0ODIzNSwgNDgyNTAsIDQ4MjY1LCAKLSAgICA0ODI4MCwgNDgyOTUsIDQ4MzEwLCA0ODMyNSwgNDgzNDAsIDQ4MzU1LCA0ODM3MCwgNDgzODUsIDQ4NDAwLCA0ODQxNSwgCi0gICAgNDg0MzAsIDQ4NDQ1LCA0ODQ2MCwgNDg0NzUsIDQ4NDkwLCA0ODUwNSwgNDg1MjAsIDQ4NTM1LCA0ODU1MCwgNDg1NjUsIAotICAgIDQ4NTgwLCA0ODU5NSwgNDg2MTAsIDQ4NjI1LCA0ODY0MCwgNDg2NTUsIDQ4NjcwLCA0ODY4NSwgNDg3MDAsIDQ4NzE1LCAKLSAgICA0ODczMCwgNDg3NDUsIDQ4NzYwLCA0ODc3NSwgNDg3OTAsIDQ4ODA1LCA0ODgyMCwgNDg4MzUsIDQ4ODUwLCA0ODg2NSwgCi0gICAgNDg4ODAsIDQ4ODk1LCA0ODkxMCwgNDg5MjUsIDQ4OTQwLCA0ODk1NSwgNDg5NzAsIDQ4OTg1LCA0OTAwMCwgNDkwMTUsIAotICAgIDQ5MDMwLCA0OTA0NSwgNDkwNjAsIDQ5MDc1LCA0OTA5MCwgNDkxMDUsIDQ5MTIwLCA0OTEzNSwgNDkxNTAsIDQ5MTY1LCAKLSAgICA0OTE4MCwgNDkxOTUsIDQ5MjEwLCA0OTIyNSwgNDkyNDAsIDQ5MjU1LCA0OTI3MCwgNDkyODUsIDQ5MzAwLCA0OTMxNSwgCi0gICAgNDkzMzAsIDQ5MzQ1LCA0OTM2MCwgNDkzNzUsIDQ5MzkwLCA0OTQwNSwgNDk0MjAsIDQ5NDM1LCA0OTQ1MCwgNDk0NjUsIAotICAgIDQ5NDgwLCA0OTQ5NSwgNDk1MTEsIDQ5NTI3LCA0OTU0MywgNDk1NTksIDQ5NTc1LCA0OTU5MSwgNDk2MDcsIDQ5NjIzLCAKLSAgICA0OTYzOSwgNDk2NTUsIDQ5NjcxLCA0OTY4NywgNDk3MDMsIDQ5NzE5LCA0OTczNSwgNDk3NTEsIDQ5NzY3LCA0OTc4MywgCi0gICAgNDk3OTksIDQ5ODE1LCA0OTgzMSwgNDk4NDcsIDQ5ODYzLCA0OTg3OSwgNDk4OTUsIDQ5OTExLCA0OTkyNywgNDk5NDMsIAotICAgIDQ5OTU5LCA0OTk3NSwgNDk5OTEsIDUwMDA3LCA1MDAyMywgNTAwMzksIDUwMDU1LCA1MDA3MSwgNTAwODcsIDUwMTAzLCAKLSAgICA1MDExOSwgNTAxMzUsIDUwMTUxLCA1MDE2NywgNTAxODMsIDUwMTk5LCA1MDIxNSwgNTAyMzEsIDUwMjQ3LCA1MDI2MywgCi0gICAgNTAyNzksIDUwMjk1LCA1MDMxMSwgNTAzMjcsIDUwMzQzLCA1MDM1OSwgNTAzNzUsIDUwMzkxLCA1MDQwNywgNTA0MjMsIAotICAgIDUwNDM5LCA1MDQ1NSwgNTA0NzEsIDUwNDg3LCA1MDUwMywgNTA1MTksIDUwNTM1LCA1MDU1MSwgNTA1NjcsIDUwNTgzLCAKLSAgICA1MDU5OSwgNTA2MTUsIDUwNjMxLCA1MDY0NywgNTA2NjMsIDUwNjc5LCA1MDY5NSwgNTA3MTEsIDUwNzI3LCA1MDc0MywgCi0gICAgNTA3NTksIDUwNzc1LCA1MDc5MSwgNTA4MDcsIDUwODIzLCA1MDgzOSwgNTA4NTUsIDUwODcxLCA1MDg4NywgNTA5MDMsIAotICAgIDUwOTE5LCA1MDkzNSwgNTA5NTEsIDUwOTY3LCA1MDk4MywgNTA5OTksIDUxMDE1LCA1MTAzMSwgNTEwNDcsIDUxMDYzLCAKLSAgICA1MTA3OSwgNTEwOTUsIDUxMTExLCA1MTEyNywgNTExNDMsIDUxMTU5LCA1MTE3NSwgNTExOTEsIDUxMjA3LCA1MTIyMywgCi0gICAgNTEyMzksIDUxMjU1LCA1MTI3MSwgNTEyODcsIDUxMzAzLCA1MTMxOSwgNTEzMzUsIDUxMzUxLCA1MTM2NywgNTEzODMsIAotICAgIDUxMzk5LCA1MTQxNSwgNTE0MzEsIDUxNDQ3LCA1MTQ2MywgNTE0NzksIDUxNDk1LCA1MTUxMSwgNTE1MjcsIDUxNTQzLCAKLSAgICA1MTU1OSwgNTE1NzUsIDUxNTkxLCA1MTYwNywgNTE2MjMsIDUxNjM5LCA1MTY1NSwgNTE2NzEsIDUxNjg3LCA1MTcwMywgCi0gICAgNTE3MTksIDUxNzM1LCA1MTc1MSwgNTE3NjcsIDUxNzgzLCA1MTc5OSwgNTE4MTUsIDUxODMxLCA1MTg0NywgNTE4NjMsIAotICAgIDUxODc5LCA1MTg5NSwgNTE5MTEsIDUxOTI3LCA1MTk0MywgNTE5NTksIDUxOTc1LCA1MTk5MSwgNTIwMDcsIDUyMDIzLCAKLSAgICA1MjAzOSwgNTIwNTUsIDUyMDcxLCA1MjA4NywgNTIxMDMsIDUyMTE5LCA1MjEzNSwgNTIxNTEsIDUyMTY3LCA1MjE4MywgCi0gICAgNTIxOTksIDUyMjE1LCA1MjIzMSwgNTIyNDcsIDUyMjYzLCA1MjI3OSwgNTIyOTUsIDUyMzExLCA1MjMyNywgNTIzNDMsIAotICAgIDUyMzU5LCA1MjM3NSwgNTIzOTEsIDUyNDA3LCA1MjQyMywgNTI0MzksIDUyNDU1LCA1MjQ3MSwgNTI0ODcsIDUyNTAzLCAKLSAgICA1MjUxOSwgNTI1MzUsIDUyNTUxLCA1MjU2NywgNTI1ODMsIDUyNTk5LCA1MjYxNSwgNTI2MzEsIDUyNjQ3LCA1MjY2MywgCi0gICAgNTI2NzksIDUyNjk1LCA1MjcxMSwgNTI3MjcsIDUyNzQzLCA1Mjc1OSwgNTI3NzUsIDUyNzkxLCA1MjgwNywgNTI4MjMsIAotICAgIDUyODM5LCA1Mjg1NSwgNTI4NzEsIDUyODg3LCA1MjkwMywgNTI5MTksIDUyOTM1LCA1Mjk1MSwgNTI5NjcsIDUyOTgzLCAKLSAgICA1Mjk5OSwgNTMwMTUsIDUzMDMxLCA1MzA0NywgNTMwNjMsIDUzMDc5LCA1MzA5NSwgNTMxMTEsIDUzMTI3LCA1MzE0MywgCi0gICAgNTMxNTksIDUzMTc1LCA1MzE5MSwgNTMyMDcsIDUzMjIzLCA1MzIzOSwgNTMyNTUsIDUzMjcxLCA1MzI4NywgNTMzMDMsIAotICAgIDUzMzE5LCA1MzMzNSwgNTMzNTEsIDUzMzY3LCA1MzM4MywgNTMzOTksIDUzNDE1LCA1MzQzMSwgNTM0NDcsIDUzNDYzLCAKLSAgICA1MzQ3OSwgNTM0OTUsIDUzNTExLCA1MzUyNywgNTM1NDMsIDUzNTU5LCA1MzU3NSwgNTM1OTEsIDUzNjA3LCA1MzYyMywgCi0gICAgNTM2MzksIDUzNjU1LCA1MzY3MSwgNTM2ODcsIDUzNzAzLCA1MzcxOSwgNTM3MzUsIDUzNzUxLCA1Mzc2NywgNTM3ODMsIAotICAgIDUzNzk5LCA1MzgxNSwgNTM4MzEsIDUzODQ3LCA1Mzg2MywgNTM4NzksIDUzODk1LCA1MzkxMSwgNTM5MjcsIDUzOTQzLCAKLSAgICA1Mzk1OSwgNTM5NzUsIDUzOTkxLCA1NDAwNywgNTQwMjMsIDU0MDM5LCA1NDA1NSwgNTQwNzEsIDU0MDg3LCA1NDEwMywgCi0gICAgNTQxMTksIDU0MTM1LCA1NDE1MSwgNTQxNjcsIDU0MTgzLCA1NDE5OSwgNTQyMTUsIDU0MjMxLCA1NDI0NywgNTQyNjMsIAotICAgIDU0Mjc5LCA1NDI5NSwgNTQzMTEsIDU0MzI3LCA1NDM0MywgNTQzNTksIDU0Mzc1LCA1NDM5MSwgNTQ0MDcsIDU0NDIzLCAKLSAgICA1NDQzOSwgNTQ0NTUsIDU0NDcxLCA1NDQ4NywgNTQ1MDMsIDU0NTE5LCA1NDUzNSwgNTQ1NTEsIDU0NTY3LCA1NDU4MywgCi0gICAgNTQ1OTksIDU0NjE1LCA1NDYzMSwgNTQ2NDcsIDU0NjYzLCA1NDY3OSwgNTQ2OTUsIDU0NzExLCA1NDcyNywgNTQ3NDMsIAotICAgIDU0NzU5LCA1NDc3NSwgNTQ3OTEsIDU0ODA3LCA1NDgyMywgNTQ4MzksIDU0ODU1LCA1NDg3MSwgNTQ4ODcsIDU0OTAzLCAKLSAgICA1NDkxOSwgNTQ5MzUsIDU0OTUxLCA1NDk2NywgNTQ5ODMsIDU0OTk5LCA1NTAxNSwgNTUwMzEsIDU1MDQ3LCA1NTA2MywgCi0gICAgNTUwNzksIDU1MDk1LCA1NTExMSwgNTUxMjcsIDU1MTQzLCA1NTE1OSwgNTUxNzUsIDU1MTkxLCA1NTIwNywgNTUyMjMsIAotICAgIDU1MjM5LCA1NTI1NSwgNTUyNzEsIDU1Mjg3LCA1NTMwMywgNTUzMTksIDU1MzM1LCA1NTM1MSwgNTUzNjcsIDU1MzgzLCAKLSAgICA1NTM5OSwgNTU0MTUsIDU1NDMxLCA1NTQ0NywgNTU0NjMsIDU1NDc5LCA1NTQ5NSwgNTU1MTEsIDU1NTI3LCA1NTU0MywgCi0gICAgNTU1NTksIDU1NTc1LCA1NTU5MSwgNTU2MDcsIDU1NjIzLCA1NTYzOSwgNTU2NTUsIDU1NjcxLCA1NTY4NywgNTU3MDMsIAotICAgIDU1NzE5LCA1NTczNSwgNTU3NTEsIDU1NzY3LCA1NTc4MywgNTU3OTksIDU1ODE1LCA1NTgzMSwgNTU4NDcsIDU1ODYzLCAKLSAgICA1NTg3OSwgNTU4OTUsIDU1OTExLCA1NTkyNywgNTU5NDMsIDU1OTU5LCA1NTk3NSwgNTU5OTEsIDU2MDA3LCA1NjAyMywgCi0gICAgNTYwMzksIDU2MDU1LCA1NjA3MSwgNTYwODcsIDU2MTAzLCA1NjExOSwgNTYxMzUsIDU2MTUxLCA1NjE2NywgNTYxODMsIAotICAgIDU2MTk5LCA1NjIxNSwgNTYyMzEsIDU2MjQ3LCA1NjI2MywgNTYyNzksIDU2Mjk1LCA1NjMxMSwgNTYzMjcsIDU2MzQzLCAKLSAgICA1NjM1OSwgNTYzNzUsIDU2MzkxLCA1NjQwNywgNTY0MjMsIDU2NDM5LCA1NjQ1NSwgNTY0NzEsIDU2NDg3LCA1NjUwMywgCi0gICAgNTY1MTksIDU2NTM1LCA1NjU1MSwgNTY1NjcsIDU2NTgzLCA1NjU5OSwgNTY2MTUsIDU2NjMxLCA1NjY0NywgNTY2NjMsIAotICAgIDU2Njc5LCA1NjY5NSwgNTY3MTEsIDU2NzI3LCA1Njc0MywgNTY3NTksIDU2Nzc1LCA1Njc5MSwgNTY4MDcsIDU2ODIzLCAKLSAgICA1NjgzOSwgNTY4NTUsIDU2ODcxLCA1Njg4NywgNTY5MDMsIDU2OTE5LCA1NjkzNSwgNTY5NTEsIDU2OTY3LCA1Njk4MywgCi0gICAgNTY5OTksIDU3MDE1LCA1NzAzMSwgNTcwNDcsIDU3MDYzLCA1NzA3OSwgNTcwOTUsIDU3MTExLCA1NzEyNywgNTcxNDMsIAotICAgIDU3MTU5LCA1NzE3NSwgNTcxOTEsIDU3MjA3LCA1NzIyMywgNTcyMzksIDU3MjU1LCA1NzI3MSwgNTcyODcsIDU3MzAzLCAKLSAgICA1NzMxOSwgNTczMzUsIDU3MzUxLCA1NzM2NywgNTczODMsIDU3Mzk5LCA1NzQxNSwgNTc0MzEsIDU3NDQ3LCA1NzQ2MywgCi0gICAgNTc0NzksIDU3NDk1LCA1NzUxMSwgNTc1MjcsIDU3NTQzLCA1NzU1OSwgNTc1NzUsIDU3NTkxLCA1NzYwNywgNTc2MjMsIAotICAgIDU3NjM5LCA1NzY1NSwgNTc2NzEsIDU3Njg3LCA1NzcwMywgNTc3MTksIDU3NzM1LCA1Nzc1MSwgNTc3NjcsIDU3NzgzLCAKLSAgICA1Nzc5OSwgNTc4MTUsIDU3ODMxLCA1Nzg0NywgNTc4NjMsIDU3ODc5LCA1Nzg5NSwgNTc5MTEsIDU3OTI3LCA1Nzk0MywgCi0gICAgNTc5NTksIDU3OTc1LCA1Nzk5MSwgNTgwMDcsIDU4MDIzLCA1ODAzOSwgNTgwNTUsIDU4MDcxLCA1ODA4NywgNTgxMDMsIAotICAgIDU4MTE5LCA1ODEzNSwgNTgxNTEsIDU4MTY3LCA1ODE4MiwgMTY3NDksIDU4MTkxLCA1ODE5NywgNTgyMDMsIDU4MjEzLCAKLSAgICA1ODIyMSwgMTQ4ODEsIDE1NDMyLCA5OTUzLCA1ODIzNCwgMTUyMCwgNTgyNDIsIDM3NjEsIDI3NDE1LCA3MTgzLCA1ODI0OCwgCi0gICAgNTgyNTMsIDU4MjU4LCA1ODI2MywgNTgyNjgsIDU4Mjc0LCA1ODI3OSwgNTgyODUsIDU4MjkwLCA1ODI5NiwgNTgzMDEsIAotICAgIDU4MzA2LCA1ODMxMSwgNTgzMTYsIDU4MzIyLCA1ODMyNywgNTgzMzIsIDU4MzM3LCA1ODM0MiwgNTgzNDcsIDU4MzUyLCAKLSAgICA1ODM1NywgNTgzNjMsIDU4MzY4LCA1ODM3NCwgNTgzODEsIDI1NjEsIDU4Mzg2LCA1ODM5MiwgODUyNiwgNTgzOTYsIAotICAgIDU4NDAxLCA1ODQwOCwgNTg0MTYsIDQwLCA1ODQyMCwgNTg0MjYsIDU4NDMxLCA1ODQzNiwgNTg0NDAsIDU4NDQ1LCA1ODQ0OSwgCi0gICAgNTg0NTMsIDEwNjc3LCA1ODQ1NywgNTg0NjcsIDU4NDgwLCA1ODQ5MSwgNTg1MDQsIDU4NTExLCA1ODUxNywgNTg1MjIsIAotICAgIDU4NTI4LCA1ODUzNCwgNTg1NDAsIDU4NTQ1LCA1ODU1MCwgNTg1NTUsIDU4NTYwLCA1ODU2NCwgNTg1NjksIDU4NTc0LCAKLSAgICA1ODU3OSwgNTg1ODUsIDU4NTkxLCA1ODU5NywgNTg2MDIsIDU4NjA2LCA1ODYxMSwgNTg2MTYsIDU4NjIwLCA1ODYyNSwgCi0gICAgNTg2MzAsIDU4NjM1LCA1ODYzOSwgMTA2OTMsIDEwNzA0LCAxMDcwOSwgMTU2MywgNTg2NDMsIDE1NjgsIDU4NjQ5LCAKLSAgICAxNjIyNiwgNTg2NTIsIDU4NjU4LCAxNTk5LCA1ODY2NCwgMTYwNSwgMTYxMSwgMTA3MzksIDU4NjY5LCA1ODY3NywgNTg2ODQsIAotICAgIDU4Njg4LCA1ODY5NCwgNTg2OTksIDMwOTUyLCA1ODcwNCwgNTg3MTEsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIDE2MTYsIAotICAgIDE2MzE4LCA1ODczMywgNTg3MzcsIDE2MzI5LCAxMTIwLCA1ODc0MSwgNTg3NDgsIDU4NzUzLCA1ODc1NywgMTYzNTQsIAotICAgIDE2MjAsIDM3MzIxLCA1ODc2MCwgNTg3NjUsIDU4Nzc1LCA1ODc4NCwgNTg3ODksIDU4NzkzLCA1ODc5OSwgMTYyNSwgCi0gICAgMzkyMzAsIDU4ODA0LCA1ODgxMywgNTg4MTksIDU4ODI0LCAxMDg5NywgMTA5MDMsIDU4ODMwLCA1ODg0MiwgNTg4NTksIAotICAgIDU4ODc2LCA1ODg5MywgNTg5MTAsIDU4OTI3LCA1ODk0NCwgNTg5NjEsIDU4OTc4LCA1ODk5NSwgNTkwMTIsIDU5MDI5LCAKLSAgICA1OTA0NiwgNTkwNjMsIDU5MDgwLCA1OTA5NywgNTkxMTQsIDU5MTMxLCA1OTE0OCwgNTkxNjUsIDU5MTgyLCA1OTE5OSwgCi0gICAgNTkyMTYsIDU5MjMzLCA1OTI1MCwgNTkyNjcsIDU5Mjg0LCA1OTMwMSwgNTkzMTgsIDU5MzM1LCA1OTM1MiwgNTkzNjksIAotICAgIDU5Mzg2LCA1OTQwMywgNTk0MjAsIDU5NDM3LCA1OTQ1NCwgNTk0NzEsIDU5NDg4LCA1OTUwNSwgNTk1MjIsIDU5NTM5LCAKLSAgICA1OTU1NiwgNTk1NzMsIDU5NTkwLCA1OTYwNywgNTk2MjQsIDU5NjQxLCA1OTY1OCwgNTk2NzUsIDU5Njg2LCA1OTY5MSwgCi0gICAgMTYzMCwgNTk2OTUsIDU5NzAxLCA1OTcwNiwgNTk3MTEsIDkzMTksIDE2MzUsIDU5NzE3LCA1OTcyNiwgMjc3MTAsIDU5NzMxLCAKLSAgICA1OTc0MiwgNTk3NTIsIDU5NzU3LCA1OTc2NCwgNTk3NzAsIDU5Nzc1LCA1OTc4MCwgMTY2MDYsIDU5Nzg0LCAxMDkxNCwgCi0gICAgMTY0MCwgMTA5MTksIDU5NzkwLCA1OTc5NSwgNTk4MDEsIDU5ODA2LCA1OTgxMSwgNTk4MTYsIDU5ODIxLCA1OTgyNiwgCi0gICAgNTk4MzEsIDU5ODM2LCA1OTg0MiwgNTk4NDgsIDU5ODU0LCA1OTg1OSwgNTk4NjMsIDU5ODY4LCA1OTg3MywgNTk4NzcsIAotICAgIDU5ODgyLCA1OTg4NywgNTk4OTIsIDU5ODk2LCA1OTkwMSwgNTk5MDcsIDU5OTEyLCA1OTkxNywgNTk5MjEsIDU5OTI2LCAKLSAgICA1OTkzMSwgNTk5MzcsIDU5OTQyLCA1OTk0NywgNTk5NTMsIDU5OTU5LCA1OTk2NCwgNTk5NjgsIDU5OTczLCA1OTk3OCwgCi0gICAgNTk5ODMsIDU5OTg3LCA1OTk5MiwgNTk5OTcsIDYwMDAyLCA2MDAwOCwgNjAwMTQsIDYwMDE5LCA2MDAyMywgNjAwMjcsIAotICAgIDYwMDMyLCA2MDAzNywgNjAwNDIsIDI5MTA4LCA2MDA0NiwgNjAwNTEsIDYwMDU2LCA2MDA2MiwgNjAwNjcsIDYwMDcyLCAKLSAgICA2MDA3NiwgNjAwODEsIDYwMDg2LCA2MDA5MiwgNjAwOTcsIDYwMTAyLCA2MDEwOCwgNjAxMTQsIDYwMTE5LCA2MDEyMywgCi0gICAgNjAxMjgsIDYwMTMzLCA2MDEzNywgNjAxNDIsIDYwMTQ3LCA2MDE1MiwgNjAxNTgsIDYwMTY0LCA2MDE2OSwgNjAxNzMsIAotICAgIDYwMTc4LCA2MDE4MywgNjAxODcsIDYwMTkyLCA2MDE5NywgNjAyMDIsIDYwMjA2LCA2MDIwOSwgMzE2MTQsIDYwMjE0LCAKLSAgICA2MDIyMiwgMTY2NzIsIDM2NjMsIDExMDEwLCA2MDIyOCwgNjAyMzgsIDYwMjUzLCAxMTAxNSwgNjAyNjQsIDYwMjY5LCAKLSAgICA2MDI4MCwgNjAyOTIsIDYwMzA0LCA2MDMxNiwgMjY5NSwgNjAzMjgsIDYwMzMzLCA2MDM0NSwgNjAzNDksIDYwMzU1LCAKLSAgICA2MDM2MSwgNjAzNjYsIDE2NTIsIDEwNjcsIDYwMzc1LCA2MDM4MCwgMzkyODAsIDYwMzg0LCA2MDM4OCwgNjAzOTMsIAotICAgIDYwMzk3LCAxNjc1NywgNjA0MDIsIDYwNDA1LCA2MDQxMywgNjA0MjEsIDE2NTYsIDExMDQwLCAxMTA0NiwgMTY2MSwgCi0gICAgNjA0MjksIDYwNDM2LCA2MDQ0MSwgNjA0NTAsIDYwNDYwLCA2MDQ2NywgNjA0NzIsIDYwNDc3LCAxNjY2LCA2MDQ4NCwgCi0gICAgNjA0ODksIDE2ODcyLCA2MDQ5MywgNjA0OTgsIDYwNTA1LCA2MDUxMSwgNjA1MTUsIDYwNTI2LCA2MDUzNiwgMTY4OTQsIAotICAgIDkyMjcsIDkyMzQsIDE2NzEsIDYwNTQzLCA2MDU0OSwgNjA1NTcsIDYwNTY0LCA2MDU3MCwgNjA1NzcsIDYwNTg5LCA2MDU5NSwgCi0gICAgNjA2MDAsIDYwNjEyLCA2MDYyMywgNjA2MzIsIDYwNjQyLCAzNzQwLCAzMDc4OCwgMzA3OTcsIDE2OTM0LCAxNjc2LCAxNjgwLCAKLSAgICA2MDY1MCwgNjA2NjEsIDYwNjY2LCAxNjgzLCA2MDY3NCwgNjA2NzksIDE2OTg1LCA2MDY5MSwgNjA2OTcsIDYwNzAyLCAKLSAgICA2MDcxMCwgMTY4OCwgNjA3MTUsIDYwNzIwLCA2MDcyOCwgNjA3MzYsIDYwNzQzLCA2MDc1MiwgNjA3NjAsIDYwNzY5LCAKLSAgICAxNjkzLCA2MDc3MywgMTY5OCwgNjA3NzgsIDYwNzg1LCAxNzA1OSwgNjA3OTMsIDYwNzk5LCA2MDgwNCwgNjA4MTIsIAotICAgIDYwODE5LCA2MDgyNywgMjI1NTcsIDYwODMyLCAxMTE3NSwgNjA4NDEsIDYwODQ3LCA2MDg1NCwgNjA4NjEsIDYwODY3LCAKLSAgICA2MDg3NywgNjA4ODMsIDYwODg4LCA2MDg5OSwgNjA5MDQsIDYwOTEyLCAxMTE4NCwgMTExODksIDYwOTIwLCA2MDkyNiwgCi0gICAgNjA5MzQsIDM4MDUsIDE3MTAxLCAzOTM2OCwgNjA5MzksIDYwOTQ1LCA2MDk1MCwgNjA5NTgsIDYwOTY1LCAxMjAyOSwgCi0gICAgNjA5NzAsIDYwOTc2LCAxNzA5LCA2MDk4MSwgNjA5ODQsIDExMjcsIDYwOTkwLCA2MDk5NSwgNjEwMDAsIDYxMDA2LCAKLSAgICA2MTAxMSwgNjEwMTYsIDYxMDIxLCA2MTAyNiwgNjEwMzEsIDYxMDM2LCAxNzE4LCA5LCA2MTA0MiwgNjEwNDYsIDYxMDUxLCAKLSAgICA2MTA1NSwgNjEwNTksIDYxMDYzLCAzMTg1NCwgNjEwNjgsIDYxMDczLCA2MTA3OCwgNjEwODIsIDYxMDg1LCA2MTA4OSwgCi0gICAgNjEwOTMsIDYxMDk4LCA2MTEwMiwgNjExMDcsIDYxMTExLCAzNDU5MSwgMzQ1OTYsIDM0NjAxLCA2MTExNCwgNjExMjEsIAotICAgIDYxMTI3LCAzOTA4OSwgNjExMzcsIDM0NjA3LCAzMjExMiwgMzE4NjksIDMxODc1LCAzNDYyMywgMzE4ODEsIDYxMTQyLCAKLSAgICA2MTE0NywgMzIxNDUsIDYxMTUxLCA2MTE1NCwgNjExNTgsIDYxMTY1LCA2MTE2OCwgNjExNzMsIDYxMTc3LCA2MTE4MSwgCi0gICAgNjExODQsIDYxMTk0LCA2MTIwNiwgNjEyMTMsIDYxMjE5LCA2MTIyNiwgMzM1NDgsIDYxMjI5LCA4NTQzLCA4NzcsIDYxMjMyLCAKLSAgICA2MTIzNiwgNjEyNDEsIDM2OTAsIDYxMjQ1LCA2MTI0OCwgMTM2MjUsIDYxMjU1LCA2MTI2MiwgNjEyNzUsIDYxMjgzLCAKLSAgICA2MTI5MiwgNjEzMDEsIDYxMzA2LCA2MTMxNiwgNjEzMjksIDYxMzQxLCA2MTM0OCwgNjEzNTMsIDYxMzYyLCA2MTM3NSwgCi0gICAgMzYwMzUsIDYxMzkzLCA2MTM5OCwgNjE0MDUsIDYxNDExLCA2NTIsIDYxNDE2LCA2MTQyNCwgNjE0MzEsIDI3MjU0LCA2MjcsIAotICAgIDYxNDM3LCA2MTQ0MywgNjE0NTMsIDYxNDU5LCA2MTQ2NCwgMzE4OTksIDYwMDMsIDMxOTEzLCA2MTQ2OCwgNjE0NzgsIAotICAgIDYxNDgzLCA2MTQ5MywgNjE1MDgsIDYxNTE0LCA2MTUyMCwgMzE5MjMsIDYxNTI1LCAzMTA2OSwgNjE1MjksIDYxNTM0LCAKLSAgICA2MTUzOSwgNjE1NDMsIDYxNTQ4LCAxNjkzNywgNjE1NTUsIDYxNTYwLCA2MTU2NCwgNjA0NCwgMzE5NDksIDYxNTY4LCAKLSAgICA2MTU3NCwgMzEyLCA2MTU4NCwgNjE1OTEsIDYxNTk4LCA2MTYwMywgNjE2MTIsIDU4NzY5LCA2MTYxOCwgNjE2MjYsIAotICAgIDYxNjMwLCA2MTYzNCwgNjE2MzgsIDYxNjQyLCA2MTY0NywgNjE2NTEsIDYxNjU3LCA2MTY2NSwgNjE2NzAsIDYxNjc1LCAKLSAgICA2MTY3OSwgNjE2ODQsIDYxNjg4LCA2MTY5MiwgNjE2OTgsIDYxNzA0LCA2MTcwOSwgNjE3MTMsIDMyMDczLCA2MTcxOCwgCi0gICAgMzIwNzksIDMyMDg1LCA2MTcyMywgNjE3MjksIDYxNzM2LCA2MTc0MSwgNjE3NDUsIDMxMDg2LCAxNjU5OSwgNjE3NDgsIAotICAgIDYxNzUyLCA2MTc1NywgNjE3NjQsIDYxNzcwLCA2MTc3NCwgNjE3NzksIDM4Nzk5LCA2MTc4NSwgNjE3ODksIDYxNzkzLCAKLSAgICA2MTc5OCwgNjE4MDQsIDYxODEwLCA2MTgyMiwgNjE4MzEsIDYxODQxLCA2MTg0NywgNjE4NTQsIDYxODU5LCA2MTg2NCwgCi0gICAgNjE4NjgsIDYxODcxLCA2MTg3NywgNjE4ODQsIDYxODg5LCA2MTg5NCwgNjE5MDEsIDYxOTA4LCA2MTkxNCwgNjE5MTksIAotICAgIDYxOTI0LCA2MTkzMiwgMzIwOTAsIDI0MjMsIDYxOTM3LCA2MTk0MiwgNjE5NDgsIDYxOTUzLCA2MTk1OSwgNjE5NjQsIAotICAgIDYxOTY5LCA2MTk3NCwgNjE5ODAsIDMyMTExLCA2MTk4NSwgNjE5OTEsIDYxOTk3LCA2MjAwMywgMzIxNzUsIDYyMDA4LCAKLSAgICA2MjAxMywgNjIwMTgsIDMyMTg2LCA2MjAyMywgNjIwMjgsIDYyMDMzLCA2MjAzOSwgNjIwNDUsIDMyMTkxLCA2MjA1MCwgCi0gICAgNjIwNTUsIDYyMDYwLCAzMjI0NiwgMzIyNTIsIDYyMDY1LCA2MjA3MCwgMzIyNTcsIDYyMDc1LCAyNzkzNywgMzIyNzksIAotICAgIDMyMjgzLCA2MjA4MCwgNjIwNTYsIDYyMDg0LCA2MjA5MiwgNjIwOTgsIDYyMTA2LCA2MjExMywgNjIxMTksIDYyMTI5LCAKLSAgICA2MjEzNSwgNjIxNDIsIDEwNjI0LCAzMjI5NywgNjIxNDgsIDYyMTYxLCA2MjE3MCwgNjIxNzYsIDYyMTg1LCA2MjE5MSwgCi0gICAgMjM0OTUsIDYyMTk4LCA2MjIwNSwgNjIyMTUsIDMyMjQ3LCA2MjIxOCwgNjIyMjUsIDYyMjMwLCA2MjIzNCwgNjIyMzgsIAotICAgIDYyMjQzLCA2MTIwLCA2MjI0NywgNjIyNTIsIDYyMjU3LCAzNDY4NSwgMzQ2OTAsIDYyMjYxLCAzNDcwNCwgNjIyNjYsIAotICAgIDM0NzA5LCA2MjI3MSwgNjIyNzcsIDM0NzIxLCAzNDcyNywgMzQ3MzMsIDYyMjgyLCA2MjI4OCwgMjI1MjIsIDYyMjk5LCAKLSAgICA2MjMwMiwgNjIzMTQsIDYyMzIyLCAzMjMyMCwgNjIzMjYsIDYyMzM1LCA2MjM0NSwgNjIzNTQsIDMyMzMwLCA2MjM1OSwgCi0gICAgNjIzNjYsIDYyMzc1LCA2MjM4MSwgNjIzODksIDYyMzk2LCA2MDk1LCA0Mzk3LCA2MjQwMSwgMzIyNTgsIDYyNDA3LCAKLSAgICA2MjQxMCwgNjI0MTYsIDYyNDIzLCA2MjQyOCwgNjI0MzMsIDIzNDA1LCA2MjQzNywgNjI0NDMsIDYyNDQ5LCA2MjQ1NCwgCi0gICAgNjI0NTksIDYyNDYzLCA2MjQ2OSwgNjI0NzUsIDMzNDU4LCA4NjMsIDM1Njk4LCAzNjYxOSwgMzY2MjUsIDMyMzY2LCAKLSAgICA2MjQ4MCwgNjI0ODQsIDYyNDg4LCA2MjQ5MSwgNjI1MDQsIDYyNTEwLCA2MjUxNCwgNjI1MTcsIDYyNTIyLCAzMzc2MSwgCi0gICAgNjI1MjYsIDMxMDkxLCAyMTI3NCwgNjI1MzIsIDYwMjQsIDYwMzIsIDkwNjgsIDYyNTM1LCA2MjU0MCwgNjI1NDUsIDYyNTUwLCAKLSAgICA2MjU1NSwgNjI1NjAsIDYyNTY1LCA2MjU3MCwgNjI1NzUsIDYyNTgwLCA2MjU4NiwgNjI1OTEsIDYyNTk2LCA2MjYwMiwgCi0gICAgNjI2MDcsIDYyNjEyLCA2MjYxNywgNjI2MjIsIDYyNjI3LCA2MjYzMiwgNjI2MzgsIDYyNjQzLCA2MjY0OSwgNjI2NTQsIAotICAgIDYyNjU5LCA2MjY2NCwgNjI2NjksIDYyNjc0LCA2MjY3OSwgNjI2ODQsIDYyNjg5LCA2MjY5NCwgNjI2OTksIDYyNzA1LCAKLSAgICA2MjcxMCwgNjI3MTUsIDYyNzIwLCA2MjcyNSwgNjI3MzAsIDYyNzM1LCA2Mjc0MSwgNjI3NDYsIDYyNzUxLCA2Mjc1NiwgCi0gICAgNjI3NjEsIDYyNzY2LCA2Mjc3MSwgNjI3NzYsIDYyNzgxLCA2Mjc4NiwgNjI3OTIsIDYyNzk3LCA2MjgwMiwgNjI4MDcsIAotICAgIDYyODEyLCA2MjgxOCwgNjI4MjQsIDYyODI5LCA2MjgzNSwgNjI4NDAsIDYyODQ1LCA2Mjg1MCwgNjI4NTUsIDYyODYwLCAKLSAgICAxNTEzLCAyNDUsIDYyODY1LCA2Mjg2OSwgNjI4NzMsIDYyODc3LCAyNTExNiwgNjI4ODEsIDYyODg1LCA2Mjg5MCwgNjI4OTQsIAotICAgIDYyODk5LCA2MjkwMywgNjI5MDgsIDYyOTEzLCA2MjkxOCwgNjI5MjIsIDYyOTI2LCA2MjkzMSwgNjI5MzUsIDEzMzYyLCAKLSAgICA2Mjk0MCwgNjI5NDQsIDYyOTUxLCA2Mjk2MSwgMTUxOTMsIDYyOTcwLCA2Mjk3OSwgNjI5ODMsIDYyOTg4LCA2Mjk5MywgCi0gICAgNjI5OTcsIDI0OTA3LCAzMDE5LCA2MzAwMSwgMTczNTAsIDYzMDA3LCA2MzAxNiwgNjMwMjQsIDYzMDMwLCA2MzA0MiwgCi0gICAgNjMwNTQsIDYzMDU4LCA2MzA2MywgNjMwNjcsIDYzMDczLCA2MzA3OSwgNjMwODQsIDYzMDk0LCA2MzEwNCwgNjMxMTAsIAotICAgIDYzMTE1LCA2MzExOSwgNjMxMjQsIDYzMTMwLCA2MzEzOSwgNjMxNDgsIDYzMTU2LCAxNTU0NywgNjMxNjAsIDYzMTY5LCAKLSAgICA2MzE3NywgNjMxODksIDYzMjAwLCA2MzIxMSwgNjMyMjAsIDYzMjI0LCA2MzIzMywgNjMyNDMsIDYzMjUxLCA2MzI1NywgCi0gICAgNjMyNjIsIDYzMjY4LCA2MzI3MywgOTgsIDMwOTAwLCA2MzI4NCwgMjYyNDksIDI2MjU5LCA2MzI5MCwgNjMyOTcsIDYzMzAzLCAKLSAgICA2MzMwNywgNjMzMTcsIDYzMzI4LCA2MzMzNiwgNjMzNDUsIDYzMzUwLCA2MzM1NSwgNjMzNTksIDE3MzA0LCA2MzM2NywgCi0gICAgNjMzNzEsIDYzMzc3LCA2MzM4NywgNjMzOTQsIDYzNDAwLCAzNDc4NCwgNjM0MDYsIDYzNDA4LCA2MzQxMSwgNjM0MTUsIAotICAgIDYzNDI1LCA2MzQzMSwgNjM0MzgsIDEzMzA4LCA2MzQ0NSwgNjM0NTEsIDYzNDYwLCA2MzQ2OSwgNjM0NzUsIDYzNDgxLCAKLSAgICA2MzQ4NywgNjM0OTIsIDYzNDk5LCA2MzUwNiwgNjM1MTIsIDYzNTI1LCA2MzUzNCwgNjM1NDMsIDYzNTQ4LCA2MzU1MiwgCi0gICAgNjM1NTgsIDYzNTY1LCA2MzU3MiwgNjM1NzksIDYzNTg2LCA2MzU5MywgNjM1OTgsIDYzNjAyLCA2MzYwNiwgNjM2MDksIAotICAgIDYzNjE5LCA2MzYyMywgNjM2MzUsIDYzNjQ0LCA2MzY0OCwgNjM2NTMsIDYzNjU3LCA2MzY2MywgNjM2NjgsIDYzNjc1LCAKLSAgICA2MzY4NCwgNjM2OTIsIDYzNzAwLCA2MzcwNSwgNjM3MDksIDYzNzE0LCA2MzcxOSwgNjM3MjksIDYzNzM3LCA2Mzc0MiwgCi0gICAgNjM3NDYsIDYzNzUwLCA2Mzc1NiwgNjM3NjgsIDYzNzc2LCA2Mzc4NiwgNjM3OTMsIDYzNzk5LCA2MzgwNCwgNjM4MDgsIAotICAgIDYzODEyLCA2MzgxNiwgNjM4MjUsIDYzODM0LCA2Mzg0MywgNjM4NDksIDYzODU1LCA2Mzg2MSwgNjM4NjYsIDYzODczLCAKLSAgICA2Mzg3OSwgNjM4ODcsIDYzODk0LCAxMjQ1NiwgNjM5MDAsIDYzOTA2LCA2MzkxMCwgMTQyMzEsIDYzOTE0LCA2MzkxOSwgCi0gICAgNjM5MjksIDYzOTM4LCA2Mzk0NCwgNjM5NTAsIDYzOTU4LCA2Mzk2NSwgNjM5NjksIDYzOTczLCA2Mzk3OSwgNjM5ODcsIAotICAgIDYzOTk0LCA2NDAwMCwgNjQwMTEsIDY0MDE1LCA2NDAxOSwgNjQwMjMsIDY0MDI2LCA2NDAzMiwgNjQwMzcsIDY0MDQxLCAKLSAgICA2NDA0NSwgNjQwNTQsIDY0MDYyLCA2NDA2OSwgNjQwNzUsIDY0MDgyLCAyNDAyOSwgMzg4NDEsIDY0MDg3LCA2NDA5NSwgCi0gICAgNjQwOTksIDY0MTAzLCA2NDEwNiwgNjQxMTQsIDY0MTIxLCA2NDEyNywgNjQxMzYsIDY0MTQ0LCA2NDE1MCwgNjQxNTUsIAotICAgIDY0MTU5LCA2NDE2NCwgNjQxNjgsIDY0MTcyLCA2NDE3NywgNjQxODYsIDY0MTkwLCA2NDE5NywgNjQyMDQsIDY0MjEwLCAKLSAgICA2NDIxOCwgNjQyMjQsIDY0MjM1LCA2NDI0MywgNjQyNDksIDIyNjUyLCA2NDI1OCwgNjQyNjUsIDY0MjcyLCA2NDI3OSwgCi0gICAgNjQyODYsIDY0MjkzLCA0MTg3MCwgMTMxNDYsIDY0MzAwLCA2NDMwNywgNjQzMTIsIDM0ODIwLCA2MjE3LCA2NDMxOCwgCi0gICAgNjQzMjMsIDY0MzI4LCA2NDMzNCwgNjQzNDAsIDY0MzQ2LCA2NDM1MSwgNjQzNTYsIDY0MzYxLCA2NDM2NiwgNjQzNzIsIAotICAgIDY0Mzc3LCA2NDM4MywgNjQzODgsIDY0Mzk0LCA2NDM5OSwgNjQ0MDQsIDY0NDA5LCA2NDQxNCwgNjQ0MTksIDY0NDI0LCAKLSAgICA2NDQyOSwgNjQ0MzUsIDY0NDQwLCA2NDQ0NiwgNjQ0NTEsIDY0NDU2LCA2NDQ2MSwgNjQ0NjYsIDY0NDcxLCA2NDQ3NiwgCi0gICAgNjQ0ODIsIDY0NDg3LCA2NDQ5MiwgNjQ0OTcsIDY0NTAyLCA2NDUwNywgNjQ1MTIsIDY0NTE3LCA2NDUyMiwgNjQ1MjcsIAotICAgIDY0NTMyLCA2NDUzOCwgNjQ1NDMsIDY0NTQ4LCA2NDU1MywgNjQ1NTgsIDY0NTYzLCA2NDU2OCwgNjQ1NzMsIDY0NTc4LCAKLSAgICA2NDU4NCwgNjQ1ODksIDY0NTk0LCA2NDU5OSwgNjQ2MDQsIDY0NjA5LCA2NDYxNCwgNjQ2MTksIDY0NjI0LCA2NDYyOSwgCi0gICAgNjQ2MzQsIDY0NjM5LCA2NDY0NCwgNjQ2NTAsIDE4MzQsIDIyNCwgMzc0MTcsIDY0NjU1LCA2NDY1OCwgNjQ2NjMsIDY0NjY3LCAKLSAgICA2NDY3MCwgNjQ2NzUsIDYzNjk2LCA2NDY4NiwgNjQ2OTYsIDY0NzAzLCA2NDcxOSwgNjQ3MjgsIDY0NzM4LCA2NDc0OCwgCi0gICAgNjQ3NTYsIDY0NzcwLCA2NDc3OCwgNjQ3ODIsIDY0Nzg1LCA2NDc5MiwgNjQ3OTgsIDY0ODA5LCA2NDgyMSwgNjQ4MzIsIAotICAgIDY0ODQxLCA2NDg0OCwgMTI5NywgMjMyOTQsIDY0ODU4LCAyNTkwLCA2NDg2MiwgNjQ4NzEsIDExMzMsIDE3Mjc3LCAzODA1NCwgCi0gICAgNjQ4NzksIDY0ODg3LCA2NDkwMSwgNjQ5MTQsIDY0OTE4LCA2NDkyMywgNjQ5MjgsIDY0OTMzLCA2NDkzOSwgNjQ5NDUsIAotICAgIDY0OTUwLCA4NTM1LCA2NDk1NSwgNjQ5NTksIDY0OTY3LCAxMTA0MSwgNjQ5NzIsIDY0OTc4LCA2NDk4NywgMTcyMSwgCi0gICAgMTEwNTMsIDczNiwgNjQ5OTEsIDY1MDAwLCA2NTAxMCwgMjcwMTMsIDY1MDE5LCA2NTAyNSwgMTY4NDksIDY1MDMxLCAKLSAgICA2NTAzNSwgMzk2NCwgMTEzODQsIDY1MDQxLCA2NTA0OCwgNjA2NTYsIDY1MDUyLCA2NTA1NiwgMzk4OCwgMTg5LCAxNDE0NiwgCi0gICAgNjUwNjIsIDY1MDc0LCA2NTA3OCwgNjUwODQsIDI3NzMwLCA2NTA4OCwgMTEzNzIsIDI3MzAsIDQsIDY1MDkzLCA2NTEwMywgCi0gICAgNjUxMDksIDY1MTIwLCA2NTEyNywgNjUxMzMsIDY1MTM5LCA2NTE0NywgNjUxNTQsIDY1MTYwLCA2NTE3MCwgNjUxODAsIAotICAgIDY1MTkwLCAyMzQ4MiwgMTMwOSwgNjUxOTksIDY1MjAzLCA2NTIwNywgNjUyMTMsIDY1MjE3LCAyNzUzLCAyNzU5LCA4NTMyLCAKLSAgICAyMjY0LCA2NTIyMSwgNjUyMjUsIDY1MjM0LCA2NTI0MiwgNjUyNTMsIDY1MjYxLCA2NTI2OSwgNjUyNzUsIDY1MjgwLCAKLSAgICA2NTI5MSwgNjUzMDIsIDY1MzEwLCA2NTMxNiwgOTY4NywgNjUzMjEsIDY1MzI5LCA2NTMzMywgNjUzMzcsIDY1MzQxLCAKLSAgICA2NTM1MywgMjgxMTUsIDY1MzYwLCA2NTM3MCwgNjUzNzYsIDY1MzgyLCA5Nzg5LCA2NTM5MiwgNjU0MDMsIDY1NDEzLCAKLSAgICA2NTQyMiwgNjU0MjYsIDY1NDMzLCAxMTM1LCAxMTcwLCA2NTQ0MywgNjU0NDgsIDY1NDU2LCA2NTQ2NCwgNjU0NzUsIAotICAgIDY1NDgyLCA2NTQ5NiwgMTQwNzUsIDM5MywgNjU1MDYsIDY1NTEwLCA2NTUxOCwgNjU1MjcsIDY1NTM1LCA2NTU0MSwgCi0gICAgNjU1NTUsIDY1NTYyLCA2NTU2OCwgNjU1NzcsIDY1NTg0LCA2NTU5NCwgNjU2MDIsIDM4MTIsIDE1NiwgNjU2MTAsIDY1NjIxLCAKLSAgICA2NTYyNSwgNjU2MzcsIDI3OTI4LCAxNjEsIDY1NjQzLCA2NTY0OCwgNjU2NTIsIDY1NjU5LCA2NTY2NSwgNjU2NzMsIAotICAgIDY1NjgwLCA4ODE4LCA2NTY4NywgNjU2OTYsIDY1NzA0LCAzODc4LCA2NTcxNywgODE5OSwgNjU3MjEsIDI3OTgsIDQ1MCwgCi0gICAgNjU3MjYsIDY1NzM5LCA2NTc0NCwgMTgzMywgNjY4LCA2NTc0OCwgMzg5NSwgNjU3NTYsIDY1NzYyLCA2NTc2NiwgOTMxLCAKLSAgICA2NTc3NiwgNjU3ODUsIDY1NzkwLCAxNDkxNSwgMTQ5MjIsIDQ1MjMyLCA2NTc5NCwgMzgyMiwgMTMwMzQsIDY1ODAyLCAKLSAgICA2NTgwOSwgMjM1MzgsIDY1ODEzLCA2NTgyMCwgNjU4MjYsIDY1ODMxLCA2NTgzNiwgMTQ5MzUsIDM3MiwgNjU4NDEsIAotICAgIDY1ODUzLCA2NTg1OSwgNjU4NjcsIDI4MTAsIDE3NTMsIDY1ODc1LCA2NTg3NywgNjU4ODIsIDY1ODg3LCA2NTg5MiwgCi0gICAgNjU4OTgsIDY1OTAzLCA2NTkwOCwgNjU5MTMsIDY1OTE4LCA2NTkyMywgNjU5MjgsIDY1OTM0LCA2NTkzOSwgNjU5NDQsIAotICAgIDY1OTQ5LCA2NTk1NCwgNjU5NTksIDY1OTY0LCA2NTk2OSwgNjU5NzQsIDY1OTgwLCA2NTk4NSwgNjU5OTAsIDY1OTk1LCAKLSAgICA2NjAwMSwgNjYwMDYsIDY2MDEyLCA2NjAxNywgNjYwMjIsIDY2MDI3LCA2NjAzMiwgNjYwMzcsIDY2MDQyLCA2NjA0NywgCi0gICAgNjYwNTMsIDY2MDU4LCA2NjA2NCwgNjYwNjksIDY2MDc0LCA2NjA3OSwgNjYwODQsIDY2MDg5LCA2NjA5NCwgNjYwOTksIAotICAgIDY2MTA0LCA2NjExMCwgNjYxMTUsIDY2MTIwLCA2NjEyNSwgNjYxMjksIDY2MTMzLCA2NjEzOCwgNjYxNDIsIDY2MTQ3LCAKLSAgICA2NjE1MiwgNjYxNTgsIDY2MTYzLCA2NjE2NywgNjYxNzIsIDY2MTc2LCA2NjE3OSwgNjYxODEsIDY2MTg1LCA2NjE4OCwgCi0gICAgNjYxOTMsIDY2MTk3LCA2NjIwMSwgNjYyMDUsIDY2MjA5LCA2NjIxOCwgNjYyMjIsIDMyNTI0LCA2NjIyNSwgMzI1MjksIAotICAgIDY2MjMyLCA2NjIzNywgMzI1MzQsIDY2MjQ2LCA2NjI1NSwgMzI1NDAsIDY2MjYwLCAzMjU0NSwgNjYyNjksIDY2Mjc0LCAKLSAgICAxMTU3MSwgNjYyNzgsIDY2MjgzLCA2NjI4OCwgMzI1NTAsIDY2MjkyLCA0MDE5NiwgNjYyOTYsIDY2Mjk5LCA2NjMwMywgCi0gICAgODIxMSwgNjYzMDksIDY2MzE0LCA2NjMxOCwgMzcwNSwgMzI1NTUsIDY2MzIxLCA2NjMyNSwgNjYzMjgsIDY2MzMzLCAKLSAgICA2NjMzNywgNjYzNDMsIDY2MzUxLCA2NjM2NCwgNjYzNzMsIDY2Mzc5LCA2NjM4NCwgNjYzOTAsIDY2Mzk0LCA2NjQwMCwgCi0gICAgNjY0MDgsIDY2NDEzLCA2NjQxNywgNjY0MjQsIDY2NDMwLCA2NjQzOCwgNjY0NDcsIDY2NDU1LCAzMjU1OCwgNjY0NjIsIAotICAgIDY2NDcyLCA2NjQ4MSwgNjY0OTQsIDY2NDk5LCA2NjUwNCwgNjY1MTMsIDY2NTE5LCA2NjUyNiwgNjY1MzcsIDY2NTQ5LCAKLSAgICA2NjU1NiwgNjY1NjUsIDY2NTc0LCA2NjU4MywgNjY1OTAsIDY2NTk2LCA2NjYwMywgNjY2MTEsIDY2NjE4LCA2NjYyNiwgCi0gICAgNjY2MzUsIDY2NjQzLCA2NjY1MCwgNjY2NTgsIDY2NjY3LCA2NjY3NSwgNjY2ODQsIDY2Njk0LCA2NjcwMywgNjY3MTEsIAotICAgIDY2NzE4LCA2NjcyNiwgNjY3MzUsIDY2NzQzLCA2Njc1MiwgNjY3NjIsIDY2NzcxLCA2Njc3OSwgNjY3ODgsIDY2Nzk4LCAKLSAgICA2NjgwNywgNjY4MTcsIDY2ODI4LCA2NjgzOCwgNjY4NDcsIDY2ODU1LCA2Njg2MiwgNjY4NzAsIDY2ODc5LCA2Njg4NywgCi0gICAgNjY4OTYsIDY2OTA2LCA2NjkxNSwgNjY5MjMsIDY2OTMyLCA2Njk0MiwgNjY5NTEsIDY2OTYxLCA2Njk3MiwgNjY5ODIsIAotICAgIDY2OTkxLCA2Njk5OSwgNjcwMDgsIDY3MDE4LCA2NzAyNywgNjcwMzcsIDY3MDQ4LCA2NzA1OCwgNjcwNjcsIDY3MDc3LCAKLSAgICA2NzA4OCwgNjcwOTgsIDY3MTA5LCA2NzEyMSwgNjcxMzIsIDY3MTQyLCA2NzE1MSwgNjcxNTksIDY3MTY2LCA2NzE3NCwgCi0gICAgNjcxODMsIDY3MTkxLCA2NzIwMCwgNjcyMTAsIDY3MjE5LCA2NzIyNywgNjcyMzYsIDY3MjQ2LCA2NzI1NSwgNjcyNjUsIAotICAgIDY3Mjc2LCA2NzI4NiwgNjcyOTUsIDY3MzAzLCA2NzMxMiwgNjczMjIsIDY3MzMxLCA2NzM0MSwgNjczNTIsIDY3MzYyLCAKLSAgICA2NzM3MSwgNjczODEsIDY3MzkyLCA2NzQwMiwgNjc0MTMsIDY3NDI1LCA2NzQzNiwgNjc0NDYsIDY3NDU1LCA2NzQ2MywgCi0gICAgNjc0NzIsIDY3NDgyLCA2NzQ5MSwgNjc1MDEsIDY3NTEyLCA2NzUyMiwgNjc1MzEsIDY3NTQxLCA2NzU1MiwgNjc1NjIsIAotICAgIDY3NTczLCA2NzU4NSwgNjc1OTYsIDY3NjA2LCA2NzYxNSwgNjc2MjUsIDY3NjM2LCA2NzY0NiwgNjc2NTcsIDY3NjY5LCAKLSAgICA2NzY4MCwgNjc2OTAsIDY3NzAxLCA2NzcxMywgNjc3MjQsIDY3NzM2LCA2Nzc0OSwgNjc3NjEsIDY3NzcyLCA2Nzc4MiwgCi0gICAgNjc3OTEsIDY3Nzk5LCA2NzgwNiwgNjc4MTQsIDY3ODIzLCA2NzgzMSwgNjc4NDAsIDY3ODUwLCA2Nzg1OSwgNjc4NjcsIAotICAgIDY3ODc2LCA2Nzg4NiwgNjc4OTUsIDY3OTA1LCA2NzkxNiwgNjc5MjYsIDY3OTM1LCA2Nzk0MywgNjc5NTIsIDY3OTYyLCAKLSAgICA2Nzk3MSwgNjc5ODEsIDY3OTkyLCA2ODAwMiwgNjgwMTEsIDY4MDIxLCA2ODAzMiwgNjgwNDIsIDY4MDUzLCA2ODA2NSwgCi0gICAgNjgwNzYsIDY4MDg2LCA2ODA5NSwgNjgxMDMsIDY4MTEyLCA2ODEyMiwgNjgxMzEsIDY4MTQxLCA2ODE1MiwgNjgxNjIsIAotICAgIDY4MTcxLCA2ODE4MSwgNjgxOTIsIDY4MjAyLCA2ODIxMywgNjgyMjUsIDY4MjM2LCA2ODI0NiwgNjgyNTUsIDY4MjY1LCAKLSAgICA2ODI3NiwgNjgyODYsIDY4Mjk3LCA2ODMwOSwgNjgzMjAsIDY4MzMwLCA2ODM0MSwgNjgzNTMsIDY4MzY0LCA2ODM3NiwgCi0gICAgNjgzODksIDY4NDAxLCA2ODQxMiwgNjg0MjIsIDY4NDMxLCA2ODQzOSwgNjg0NDgsIDY4NDU4LCA2ODQ2NywgNjg0NzcsIAotICAgIDY4NDg4LCA2ODQ5OCwgNjg1MDcsIDY4NTE3LCA2ODUyOCwgNjg1MzgsIDY4NTQ5LCA2ODU2MSwgNjg1NzIsIDY4NTgyLCAKLSAgICA2ODU5MSwgNjg2MDEsIDY4NjEyLCA2ODYyMiwgNjg2MzMsIDY4NjQ1LCA2ODY1NiwgNjg2NjYsIDY4Njc3LCA2ODY4OSwgCi0gICAgNjg3MDAsIDY4NzEyLCA2ODcyNSwgNjg3MzcsIDY4NzQ4LCA2ODc1OCwgNjg3NjcsIDY4Nzc3LCA2ODc4OCwgNjg3OTgsIAotICAgIDY4ODA5LCA2ODgyMSwgNjg4MzIsIDY4ODQyLCA2ODg1MywgNjg4NjUsIDY4ODc2LCA2ODg4OCwgNjg5MDEsIDY4OTEzLCAKLSAgICA2ODkyNCwgNjg5MzQsIDY4OTQ1LCA2ODk1NywgNjg5NjgsIDY4OTgwLCA2ODk5MywgNjkwMDUsIDY5MDE2LCA2OTAyOCwgCi0gICAgNjkwNDEsIDY5MDUzLCA2OTA2NiwgNjkwODAsIDY5MDkzLCA2OTEwNSwgNjkxMTYsIDY5MTI2LCA2OTEzNSwgNjkxNDMsIAotICAgIDY5MTUwLCA2OTE1NSwgODA1OCwgNjkxNjIsIDMyNTY4LCA2OTE2NywgNjkxNzIsIDMyNTczLCA2OTE3OCwgMjA5MTYsIAotICAgIDMyNTc4LCA2OTE4MywgNjkxODksIDY5MTk3LCA2OTIwMywgNjkyMDksIDY5MjE2LCA2OTIyMywgNjkyMjgsIDY5MjMyLCAKLSAgICA2OTIzNSwgNjkyMzksIDY5MjQ4LCA2OTI1NCwgNjkyNjYsIDY5Mjc3LCA2OTI4MSwgMzA4MSwgODAzMywgNjkyODYsIAotICAgIDY5Mjg5LCA2OTI5MSwgNjkyOTUsIDY5Mjk5LCA2OTMwMywgNjkzMDksIDY5MzE0LCAyNTkyNywgNjkzMTksIDY5MzIzLCAKLSAgICA2OTMyNiwgNjkzMzEsIDY5MzM1LCA2OTM0MiwgNjkzNDgsIDY5MzUyLCA2MTcwLCA2OTM1NiwgMzI1OTUsIDY5MzYxLCAKLSAgICA2OTM2OCwgNjkzNzcsIDY5Mzg1LCA2OTM5NiwgNjk0MDQsIDY5NDEyLCA2OTQxOSwgNjk0MjYsIDY5NDMyLCA2OTQ0MywgCi0gICAgMzI2MDAsIDY5NDQ4LCA2OTQ1OSwgNjk0NzEsIDY5NDc5LCA2OTQ5MCwgNjk0OTksIDY5NTEwLCA2OTUxNSwgNjk1MjMsIAotICAgIDI1NTYsIDY5NTI4LCAzNDI3MCwgNjk1NDEsIDY5NTQ1LCA2OTU1NywgNjk1NjUsIDY5NTcwLCA2OTU3OCwgMTc0NzIsIAotICAgIDY5NTg5LCA2OTU5NSwgNjk2MDIsIDY5NjEwLCA2OTYxNiwgMzI2MTAsIDY5NjIxLCAzOTE0LCA1ODIxNywgNjk2MjgsIAotICAgIDY5NjMxLCA2OTYzOSwgNjk2NTIsIDY5NjY1LCA2OTY3OCwgNjk2OTEsIDY5Njk4LCA2OTcwOSwgNjk3MTgsIDQxNjg3LCAKLSAgICA0MTY5MiwgNjk3MjMsIDY5NzI3LCA2OTczNSwgNjk3NDIsIDY5NzUxLCA2OTc1OSwgNjk3NjUsIDY5Nzc0LCA2OTc4MiwgCi0gICAgNjk3OTAsIDY5Nzk0LCA2OTgwMywgNjk4MTIsIDY5ODIyLCA2OTgzNSwgNjk4NDgsIDY5ODU4LCAzMjYxNSwgNjk4NjQsIAotICAgIDY5ODcxLCA2OTg3NywgMzI2MjEsIDY5ODgyLCA2OTg4NSwgNjk4ODksIDY5ODk3LCA2OTkwNiwgNDE0MjUsIDY5OTE0LCAKLSAgICA2OTkyMywgNjk5MzEsIDY5OTM4LCA2OTk0NiwgNjk5NTYsIDY5OTY1LCA2OTk3NCwgNjk5ODMsIDY5OTkxLCA3MDAwMiwgCi0gICAgNzAwMTIsIDkzNTksIDIxNTU0LCA3MDAyMSwgNzAwMjYsIDcwMDMxLCA3MDAzNSwgNzAwMzksIDcwMDQ0LCA3MDA1MCwgCi0gICAgNzAwNTUsIDcwMDYwLCA3MDA2NiwgNzAwNzEsIDcwMDc2LCAyMTUxOSwgNzAwODEsIDcwMDg4LCA3MDA5NiwgNzAxMDQsIAotICAgIDcwMTA5LCA3MDExNiwgNzAxMjMsIDcwMTI4LCA3MDEzMiwgNzAxMzYsIDcwMTQ0LCA3MDE1MiwgMzI2MzgsIDcwMTU4LCAKLSAgICA3MDE2NCwgNzAxNzYsIDcwMTgyLCA3MDE4NiwgNzAxOTMsIDcwMTk4LCA3MDIwOSwgNzAyMTksIDcwMjI5LCA3MDI0MSwgCi0gICAgNzAyNDcsIDcwMjU3LCA3MDI2NywgMzI2NjUsIDcwMjc2LCA3MDI4NSwgNzAyOTEsIDcwMzAzLCA3MDMxNCwgNzAzMjEsIAotICAgIDcwMzI2LCA3MDMzMCwgNzAzMzgsIDcwMzQ0LCA3MDM0OSwgNzAzNTQsIDcwMzYxLCA3MDM2OSwgNzAzODEsIDcwMzkxLCAKLSAgICA3MDQwMCwgNzA0MDksIDcwNDE2LCAzNDEzMiwgMjM4MzQsIDcwNDIyLCA3MDQyNywgNzA0MzEsIDcwNDM1LCA3MDQ0MCwgCi0gICAgNzA0NDYsIDcwNDU3LCA3MDQ3MCwgNzA0NzUsIDcwNDgyLCAzMjY3MCwgNzA0ODcsIDcwNDk5LCA3MDUwOCwgNzA1MTgsIAotICAgIDcwNTI5LCA3MDU0MiwgNzA1NDksIDcwNTU4LCA3MDU2NywgNzA1NzUsIDcwNTgwLCA3MDU4NiwgMTA1OCwgNzA1OTEsIAotICAgIDcwNTk2LCA3MDYwMSwgNzA2MDYsIDcwNjEyLCA3MDYxNywgNzA2MjIsIDcwNjI4LCA3MDYzNCwgNzA2MzksIDcwNjQzLCAKLSAgICA3MDY0OCwgNzA2NTMsIDcwNjU4LCA1ODcyOSwgNzA2NjMsIDcwNjY4LCA3MDY3MywgNzA2NzgsIDcwNjg0LCA3MDY5MCwgCi0gICAgNzA2OTUsIDcwNjk5LCA3MDcwNCwgNzA3MDksIDcwNzE0LCA3MDcyMCwgNzA3MjUsIDcwNzMxLCA3MDczNiwgNzA3NDEsIAotICAgIDcwNzQ2LCA3MDc1MSwgNzA3NTUsIDcwNzYxLCA3MDc2NiwgNzA3NzUsIDcwNzgwLCA3MDc4NSwgNzA3OTAsIDcwNzk1LCAKLSAgICA3MDc5OSwgNzA4MDYsIDcwODEyLCAxNzEyMiwgMTcxMjksIDcwODE3LCA3MDgyMSwgNzA4MjUsIDcwODI5LCA3MDgzMywgCi0gICAgNDU0ODcsIDcwODM3LCA3MDc2NywgNzA4MzksIDcwODQ5LCAzMjY3OSwgNzA4NTIsIDcwODYxLCA3MDg2NywgNjE0MywgCi0gICAgMzI2ODQsIDcwODcxLCA3MDg3NywgNzA4ODIsIDcwODg4LCA3MDg5MywgNzA4OTcsIDcwOTA0LCA3MDkwOSwgNzA5MTksIAotICAgIDcwOTI4LCA3MDkzMiwgNzA5MzgsIDcwOTQ0LCA3MDk1MCwgNzA5NTQsIDcwOTYyLCA3MDk2OSwgNzA5NzcsIDcwOTg1LCAKLSAgICAzMjY4OSwgNzA5OTIsIDcwOTk1LCA3MTAwMiwgNzEwMDgsIDcxMDEzLCA3MTAxNywgNzEwMjMsIDcxMDMwLCA3MTAzNSwgCi0gICAgNzEwMzksIDcxMDQ4LCA3MTA1NiwgNzEwNjIsIDcxMDY3LCAzMjY5NCwgNzEwNzQsIDcxMDgxLCA3MTA4NywgNzEwOTIsIAotICAgIDcxMDk4LCA3MTEwNSwgNzExMTEsIDIxMjgxLCAyNzQzOCwgNzExMTcsIDcxMTIyLCA3MTEyOCwgNzExNDAsIDcwODAwLCAKLSAgICA3MDgwNywgMjE0NTcsIDcxMTUwLCA3MTE1NSwgNzExNjIsIDcxMTY4LCA3MTE3NSwgNzExODEsIDcxMTkyLCA3MTE5NywgCi0gICAgOTEwMywgNzEyMDUsIDcxMjA4LCA3MTIxNCwgNzEyMTgsIDcxMjIyLCA3MTIyNSwgNzEyMzEsIDMyNDQzLCA2MTk0LCA5NjQsIAotICAgIDEzNDEyLCA3MTIzOCwgNzEyNDQsIDcxMjUwLCA3MTI1NiwgNzEyNjIsIDcxMjY4LCA3MTI3NCwgNzEyODAsIDcxMjg2LCAKLSAgICA3MTI5MSwgNzEyOTYsIDcxMzAxLCA3MTMwNiwgNzEzMTEsIDcxMzE2LCA3MTMyMSwgNzEzMjYsIDcxMzMxLCA3MTMzNiwgCi0gICAgNzEzNDEsIDcxMzQ2LCA3MTM1MSwgNzEzNTcsIDcxMzYyLCA3MTM2NywgNzEzNzMsIDcxMzc4LCA3MTM4MywgNzEzODksIAotICAgIDcxMzk1LCA3MTQwMSwgNzE0MDcsIDcxNDEzLCA3MTQxOSwgNzE0MjUsIDcxNDMxLCA3MTQzNywgNzE0NDIsIDcxNDQ3LCAKLSAgICA3MTQ1MywgNzE0NTgsIDcxNDYzLCA3MTQ2OSwgNzE0NzQsIDcxNDc5LCA3MTQ4NCwgNzE0ODksIDcxNDk0LCA3MTQ5OSwgCi0gICAgNzE1MDQsIDcxNTA5LCA3MTUxNCwgNzE1MTksIDcxNTI0LCA3MTUyOSwgNzE1MzUsIDcxNTQwLCA3MTU0NSwgNzE1NTAsIAotICAgIDcxNTU2LCA3MTU2MSwgNzE1NjYsIDcxNTcxLCA3MTU3NiwgNzE1ODIsIDcxNTg3LCA3MTU5MiwgNzE1OTcsIDcxNjAyLCAKLSAgICA3MTYwNywgNzE2MTIsIDcxNjE3LCA3MTYyMiwgNzE2MjcsIDcxNjMyLCA3MTYzNywgNzE2NDIsIDcxNjQ3LCA3MTY1MiwgCi0gICAgNzE2NTcsIDcxNjYyLCA3MTY2NywgNzE2NzIsIDcxNjc3LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIAotICAgIDcxNzA4LCA3MTcxMywgNzE3MTgsIDE4NjQsIDE0MiwgNzE3MjMsIDcxNzI3LCA3MTczMSwgNzE3MzYsIDcxNzQ0LCA3MTc0OCwgCi0gICAgNzE3NTUsIDcxNzYzLCA3MTc2NywgNzE3ODAsIDcxNzg4LCA3MTc5MiwgNzE3OTUsIDcxODAwLCA3MTgwNCwgNzE4MDksIAotICAgIDcxODEzLCA3MTgyMSwgNzE4MjUsIDIwOTI0LCA3MTgzMCwgNzE4MzQsIDYwOTMwLCA3MTgzOCwgNzE4NDEsIDcxODQ5LCAKLSAgICA3MTg1NywgNzE4NjUsIDcxODcwLCA3MTg3NywgNzE4ODMsIDcxODg5LCA3MTg5NCwgNzE5MDEsIDcxOTA2LCA3MTkxNCwgCi0gICAgNjQ5MDYsIDcxOTIxLCA3MTkyNiwgNzE5MzEsIDcxOTM1LCAxMTYzOCwgNzE5MzksIDcxOTQ0LCA3MTk0OSwgNzE5NTMsIAotICAgIDcxOTU2LCA3MTk2MiwgNzE5NjYsIDcxOTc2LCA3MTk4NSwgNzE5ODgsIDcxOTkyLCA3MTk5OSwgNzIwMTIsIDcyMDE4LCAKLSAgICA3MjAyNiwgNzIwMzcsIDcyMDQ4LCA3MjA1OSwgNzIwNzAsIDcyMDc5LCA3MjA4NSwgNzIwOTQsIDcyMTAyLCA3MjExMiwgCi0gICAgNzIxMjUsIDcyMTMyLCA3MjE0MywgNzIxNDksIDcyMTU0LCA3MjE1OSwgNzIxNjUsIDcyMTcxLCA3MjE4MSwgNzIxOTAsIAotICAgIDcwNDg5LCA3MjE5OCwgNzIyMDQsIDcyMjEyLCA3MjIxOCwgNzIyMjYsIDcyMjI5LCA3MjIzMywgNzIyMzcsIDcyMjQwLCAKLSAgICA3MjI0NiwgNzIyNTIsIDcyMjYwLCA3MjI3MiwgNzIyODQsIDcyMjkxLCA3MjI5NSwgNzIzMDYsIDcyMzE0LCA3MjMyMSwgCi0gICAgNzIzMzMsIDcyMzQxLCA3MjM0OSwgNzIzNTYsIDcyMzYyLCA3MjM3MiwgNzIzODEsIDcyMzg2LCA3MjM5NiwgNzI0MDUsIAotICAgIDQwNzUxLCA3MjQxMiwgNzI0MTYsIDcyNDIxLCA3MjQyOSwgNzI0MzYsIDcyNDQyLCA3MjQ0NiwgNzI0NTYsIDcyNDY3LCAKLSAgICA3MjQ3NSwgNzI0ODIsIDcyNDk0LCA3MjUwNiwgNzI1MTUsIDY5NTMxLCA3MjUyMiwgNzI1MzMsIDcyNTQ3LCA3MjU1NSwgCi0gICAgNzI1NjUsIDcyNTcyLCA3MjU4MCwgNzI1OTIsIDcyNjAxLCA3MjYwOSwgNzI2MTksIDcyNjMwLCA3MjY0MiwgNzI2NTEsIAotICAgIDcyNjYxLCA3MjY2OCwgNzI2NzcsIDcyNjkyLCA3MjcwMCwgNzI3MTAsIDcyNzE5LCA3MjcyNywgNzI3NDAsIDcyNzU1LCAKLSAgICA3Mjc1OSwgNzI3NjgsIDcyNzgwLCA3Mjc5MSwgNzI4MDIsIDcyODEzLCA3MjgyMywgNzI4MzQsIDcyODQyLCA3Mjg0OCwgCi0gICAgNzI4NTgsIDcyODY2LCA3Mjg3MiwgMjkwMDcsIDcyODc3LCA3Mjg4MywgNzI4ODgsIDcyODk1LCA5NzAxLCAxNzQ5MiwgCi0gICAgNzI5MDEsIDcyOTEwLCA3MjkxNSwgNzI5MTksIDcyOTI2LCA3MjkzMiwgNzI5MzcsIDcyOTQyLCA3Mjk1MCwgNzI5NTgsIAotICAgIDcyOTYyLCA3Mjk2NSwgNzI5NjgsIDcyOTcwLCA3Mjk3NywgNzI5ODMsIDcyOTk0LCA3Mjk5OSwgNzMwMDMsIDczMDEwLCAKLSAgICA3MzAxNiwgNzMwMjEsIDczMDI5LCA2NTQwNSwgNjU0MTUsIDczMDM1LCA3MzA0MiwgNzMwNTIsIDEwNjExLCA3MzA1OSwgCi0gICAgNzMwNjQsIDI5MjAzLCA3MzA3MywgNzMwNzgsIDczMDg1LCA3MzA5NSwgNzMxMDMsIDczMTExLCA3MzEyMCwgNzMxMjYsIAotICAgIDczMTMyLCA3MzEzOSwgNzMxNDYsIDczMTUxLCA3MzE1NSwgNzMxNjMsIDczMTY4LCA3MzE3MywgNzMxODEsIDczMTg4LCAKLSAgICA3MzE5MywgNzMxOTksIDczMjAyLCA3MzIwNiwgNzMyMTUsIDcxNzc1LCA3MzIyNCwgNzMyMjgsIDczMjM0LCA3MzI0NSwgCi0gICAgNzMyNTUsIDE3NTAxLCA3MzI2NiwgNzMyNzQsIDE3NTEzLCA3MzI4MSwgNzMyODUsIDczMjk0LCAyNzMyNCwgNzMzMDEsIAotICAgIDczMzA1LCA3MzMxMCwgNzMzMjcsIDczMzM5LCAxMDU2OSwgNzMzNTEsIDczMzU2LCA3MzM2MSwgNzMzNjYsIDIwOTk3LCAKLSAgICA3MzM3MCwgNzMzNzUsIDczMzgwLCA3MzM4NiwgNzMzOTEsIDU4NDYsIDIxMDAxLCA3MzM5NiwgNzM0MDEsIDczNDA3LCAKLSAgICA3MzQxNCwgNzM0MTksIDczNDI0LCA3MzQzMCwgNzM0MzYsIDczNDQyLCA3MzQ0NywgNzM0NTMsIDczNDU3LCA3MzQ3MSwgCi0gICAgNzM0NzksIDczNDg3LCA3MzQ5MywgNzM0OTgsIDczNTA1LCA3MzUxNSwgNzM1MjQsIDczNTI5LCA3MzUzNCwgNzM1NDIsIAotICAgIDczNTQ3LCA3MzU1MywgNzM1NTgsIDczNTY3LCA1OTc4NiwgNzM1NzIsIDczNTc1LCA3MzU5MywgNzM2MTIsIDczNjI1LCAKLSAgICA3MzYzOSwgNzM2NTUsIDczNjYyLCA3MzY2OSwgNzM2NzUsIDczNjgyLCA3MzY4NywgNzM2OTMsIDczNjk5LCA3MzcwNywgCi0gICAgNzM3MTMsIDczNzE4LCA3MzcyMywgNzM3MzksIDEwNTgyLCA3Mzc1MywgNzM3NjAsIDczNzY4LCA3Mzc3NCwgNzM3NzgsIAotICAgIDczNzgxLCA3Mzc4NiwgNzM3OTEsIDczNzk4LCA3MzgwMywgNzM4MTIsIDczODE3LCA3MzgyMywgNzM4MzIsIDczODQxLCAKLSAgICA3Mzg0NiwgNzM4NTAsIDczODU4LCA3Mzg2NywgMTE2NjcsIDczODc2LCA3Mzg4NCwgNzM4ODksIDczODk1LCAxMTY3OCwgCi0gICAgNzM5MDAsIDczOTAzLCA3MzkwOCwgNzM5MTgsIDczOTI3LCA3MzkzMiwgNzM5MzgsIDczOTQzLCA3Mzk1MSwgNzM5NTgsIAotICAgIDczOTY5LCA3Mzk3OSwgNzM5ODQsIDY0ODM0LCA3Mzk4OSwgNzM5OTUsIDc0MDAwLCA3NDAwNywgNzQwMTYsIDc0MDI0LCAKLSAgICA3NDAzMCwgNzQwMzYsIDc0MDQzLCA3NDA0OSwgNzQwNTMsIDE2OTQ3LCAzMDU1LCA3NDA1OCwgNzQwNjIsIDc0MDY2LCAKLSAgICA3NDA3MiwgNzQwODEsIDc0MDg3LCA3NDA5NCwgNzQwOTgsIDc0MTE5LCA3NDE0MSwgNzQxNTcsIDc0MTc0LCA3NDE5MywgCi0gICAgNzQyMDIsIDc0MjEyLCA3NDIxOSwgNzQyMjYsIDI3MjExLCA3NDIzMiwgNzQyMzYsIDc0MjQ0LCA3NDI1NiwgNzQyNjIsIAotICAgIDc0MjcwLCA3NDI3NCwgNzQyODIsIDc0Mjg5LCA3NDI5MywgNzQyOTksIDc0MzA1LCA3NDMxMCwgMzU2MywgNDE4ODcsIAotICAgIDc0MzE2LCA3NDMyMCwgNzQzMjQsIDc0MzI4LCA3NDMzMywgNzQzMzgsIDc0MzQzLCA3NDM0OSwgNzQzNTUsIDc0MzYxLCAKLSAgICA3NDM2OCwgNzQzNzQsIDc0MzgxLCA3NDM4NywgNzQzOTMsIDc0Mzk4LCA3NDQwNCwgNzQ0MDksIDc0NDEzLCA3NDQxOCwgCi0gICAgNzQ0MjIsIDc0NDI3LCA0MTkwMiwgNzQ0MzEsIDc0NDM2LCA3NDQ0NCwgNzQ0NDgsIDc0NDUzLCA3NDQ2MCwgNzQ0NjksIAotICAgIDc0NDc1LCA3NDQ3OSwgNzQ0ODYsIDc0NDkwLCA3NDQ5MywgNzQ1MDAsIDc0NTA5LCA3NDUxNCwgNzQ1MTgsIDc0NTI2LCAKLSAgICA3NDUzNSwgNzQ1MzksIDc0NTQ3LCA3NDU1MywgNzQ1NTgsIDc0NTYzLCA3NDU2OSwgNzQ1NzUsIDc0NTgwLCA3NDU4NCwgCi0gICAgNzQ1OTAsIDc0NTk1LCA3NDU5OSwgNzQ2MDMsIDc0NjA2LCA3NDYxMSwgNzQ2MTksIDc0NjI5LCA3NDYzNCwgMzkzODcsIAotICAgIDc0NjQyLCA3NDY1NCwgNzQ2NTgsIDc0NjY0LCA3NDY3NiwgNzQ2ODcsIDc0Njk0LCA3NDcwMCwgNzQ3MDcsIDc0NzE5LCAKLSAgICA3NDcyNiwgNzQ3MzIsIDIxMDc1LCA3NDczNiwgNzQ3NDIsIDc0NzQ5LCA3NDc1NSwgNzQ3NjEsIDc0NzY2LCA3NDc3MSwgCi0gICAgNzQ3NzYsIDc0Nzg1LCA3MDMzLCA3NDc5MCwgMTY0MTMsIDc0Nzk2LCA3NDgwMCwgNzQ4MDQsIDc0ODA4LCA3NDgxNiwgCi0gICAgNzQ4MjUsIDc0ODI5LCA3NDgzNiwgNzQ4NDUsIDc0ODU4LCA3NDg2NCwgNzQ0MjMsIDMwMDY3LCA3NDg2OSwgNzQ4NzEsIAotICAgIDc0ODc2LCA3NDg4MSwgNzQ4ODYsIDc0ODkxLCA3NDg5NiwgNzQ5MDEsIDc0OTA2LCA3NDkxMSwgNzQ5MTYsIDc0OTIxLCAKLSAgICA3NDkyNiwgNzQ5MzEsIDc0OTM2LCA3NDk0MSwgNzQ5NDcsIDc0OTUyLCA3NDk1NywgNzQ5NjIsIDc0OTY3LCA3NDk3MiwgCi0gICAgNzQ5NzcsIDc0OTgyLCA3NDk4NywgNzQ5OTMsIDc0OTk5LCA3NTAwNSwgNzUwMTAsIDc1MDE1LCA3NTAyNywgNzUwMzIsIAotICAgIDE4NzAsIDQ5LCA3NTAzNywgNzUwNDIsIDMyNzIxLCA3NTA0NiwgMzI3MjYsIDMyNzMxLCAzMjczNywgMzI3NDIsIDc1MDUwLCAKLSAgICAzMjc0NywgMjIwNzAsIDc1MDcyLCA3NTA3NiwgNzUwODAsIDc1MDg1LCA3NTA4OSwgMzI3NTEsIDc1MDkzLCA3NTEwMSwgCi0gICAgMzI3NTYsIDc1MTA4LCA3NTExMSwgNzUxMTYsIDc1MTIwLCA5NTM2LCA3NTEyOSwgMzI3NjEsIDIxOTMyLCA3NTEzMiwgCi0gICAgNzUxMzYsIDE0MjgsIDc1MTQxLCAzMjc3MiwgNzUxNDQsIDc1MTQ5LCAyNTcyMCwgMjU3MzAsIDM1MjMzLCA3NTE1NCwgCi0gICAgNzUxNTksIDc1MTY0LCA3NTE2OSwgNzUxNzUsIDc1MTgwLCA3NTE4OSwgNzUxOTQsIDc1MjAxLCA3NTIwNywgNzUyMTIsIAotICAgIDc1MjE3LCA3NTIyMiwgNzUyMzIsIDc1MjQxLCA3NTI0NiwgNzUyNTQsIDc1MjU4LCA3NTI2NiwgMzI1ODYsIDM3Mjg4LCAKLSAgICA3NTI3MywgNzUyNzksIDc1Mjg0LCA3NTI4OSwgMTIwMDksIDc1Mjk0LCA3NTMwMCwgNzUzMDUsIDc1MzEyLCA3NTMxOCwgCi0gICAgNzUzMjMsIDc1MzMxLCA3NTM0MSwgNzUzNTEsIDc1MzU3LCA3NTM2MiwgNzUzNjgsIDE3NTIzLCA3NTM3NSwgMzYwNDgsIAotICAgIDc1Mzg4LCA3NTM5MywgNzUzOTksIDMwOTY4LCA3NTQxMiwgNzU0MTgsIDc1NDIyLCA3NTQzMSwgNzU0MzgsIDc1NDQ0LCAKLSAgICA3NTQ1MiwgNzU0NjEsIDc1NDY4LCA3NTQ3NCwgNzU0NzcsIDc1NDgxLCAyNTg2MSwgNzU0ODUsIDc1NDkyLCA3NTQ5OCwgCi0gICAgNzU1MDYsIDc1NTExLCAyMzk3NywgNzU1MTcsIDc1NTIwLCA3NTUyOCwgNzU1MzYsIDc1NTUwLCA3NTU1NywgNzU1NjMsIAotICAgIDc1NTcwLCA3NTU3NiwgMzI3ODYsIDc1NTgwLCA3NTU4NywgNzU1OTUsIDc1NjAzLCA3NTYwOSwgMzI3OTEsIDc1NjE3LCAKLSAgICA3NTYyMywgNzU2MjgsIDc1NjM4LCA3NTY0NCwgNzU2NTMsIDMwODA1LCAzNDY5MSwgNzU2NjEsIDc1NjY2LCA3NTY3MSwgCi0gICAgNzU2NzUsIDc1NjgwLCA3NTY4NCwgNzU2OTIsIDE0OTA3LCAzOTQwMCwgNzU2OTcsIDc1NzAyLCAzMjc5NiwgNjIyMzIsIAotICAgIDc1NzA2LCA3NTcxMSwgNzU3MTUsIDc1NzI0LCA3NTczMiwgNzU3MzgsIDc1NzQzLCA3NTc0OSwgNzU3NTYsIDc1NzYyLCAKLSAgICA3NTc2NywgNzU3NzIsIDc1NzgxLCA3NTc5MywgNzU4MDgsIDMzMDU4LCA3NTgxNCwgMTY1MzIsIDMyODAwLCA3NTgxOCwgCi0gICAgNzU4MjUsIDI0MDg3LCA3NTgzMSwgNzU4MzgsIDc1ODQ3LCA3NTg1NCwgNzU4NjMsIDc1ODY5LCA3NTg3NCwgNzU4ODIsIAotICAgIDc1ODg4LCAzMjgxMCwgNzU4OTMsIDc1OTAyLCA3NDY4MiwgNzU5MTEsIDc1OTE4LCA3NTkyNCwgNzU5MzAsIDc1OTQwLCAKLSAgICA3NTk0OCwgNzU5NTUsIDc1OTU5LCAzMjgxNSwgNzU5NjIsIDMyODIxLCAzMjgyNywgNzU5NjcsIDc1OTc1LCA3NTk4MywgCi0gICAgNzU5OTMsIDc2MDAyLCA3NjAxMCwgNzYwMTcsIDc2MDI3LCAzMjgzMiwgNzYwMzEsIDc2MDMzLCA3NjAzNywgNzYwNDIsIAotICAgIDc2MDQ2LCA3NjA1MCwgNzYwNTYsIDc2MDYxLCA3NjA2NSwgNzYwNzYsIDc2MDgxLCA3NjA4NiwgMzA2MCwgNzYwOTAsIAotICAgIDc2MDk3LCA3NjEwMSwgNzYxMTAsIDc2MTE4LCA3NjEyNSwgNzYxMzAsIDc2MTM1LCA2MjI3OCwgNzYxMzksIDc2MTQyLCAKLSAgICA3NjE0OCwgNzYxNTYsIDc2MTYyLCA3NjE2NiwgNzYxNzEsIDc2MTc4LCA3NjE4MywgNzYxODksIDM0NzIyLCA3NjE5NCwgCi0gICAgNzYxOTcsIDc2MjAyLCA3NjIwNiwgNzYyMTEsIDc2MjE2LCA3NjIyMCwgNzYyMjgsIDc2MjMyLCAyNTczOSwgMjU3NDgsIAotICAgIDc2MjM4LCA3NjI0NCwgNzYyNTAsIDc2MjU1LCA3NjI1OSwgNzYyNjIsIDc2MjcyLCA3NjI4MSwgNzYyODYsIDc2MjkyLCAKLSAgICA3NjI5OSwgNzYzMDUsIDc2MzA5LCA3NjMxNywgNzYzMjIsIDM0NzI4LCA3NjMyNiwgNzYzMzQsIDc2MzQwLCA3NjM0NywgCi0gICAgNzYzNTIsIDc2MzU2LCA3NjM2MSwgNTg0MDMsIDM0NzM0LCA3NjM2NywgNzYzNzIsIDc2Mzc2LCA3NjM4MSwgNzYzODYsIAotICAgIDc2MzkxLCA3NjM5NSwgNzY0MDAsIDc2NDA1LCA3NjQxMSwgNzY0MTYsIDc2NDIxLCA3NjQyNywgNzY0MzMsIDc2NDM4LCAKLSAgICA3NjQ0MiwgNzY0NDcsIDc2NDUyLCA3NjQ1NywgNzY0NjEsIDI0MDg2LCA3NjQ2NiwgNzY0NzEsIDc2NDc3LCA3NjQ4MywgCi0gICAgNzY0ODksIDc2NDk0LCA3NjQ5OCwgNzY1MDMsIDc2NTA4LCA3NjUxMywgNzY1MTcsIDc2NTIyLCA3NjUyNywgNzY1MzIsIAotICAgIDc2NTM3LCA3NjU0MSwgMzI4NDAsIDc2NTQ5LCA3NjU1MywgNzY1NjEsIDc2NTY5LCA3NjU4MCwgNzY1ODUsIDc2NTg5LCAKLSAgICAyMjM4NCwgNzY1OTQsIDc2NjAwLCA3NjYxMCwgNzY2MTcsIDc2NjIyLCA3NjYzMSwgNzY2MzYsIDc2NjQwLCA3NjY0NSwgCi0gICAgNzY2NTMsIDc2NjYxLCA3NjY2OCwgNjUwNjgsIDc2Njc0LCA3NjY4MiwgNzY2ODksIDc2NzAwLCA3NjcwNiwgNzY3MTAsIAotICAgIDc2NzE2LCAzMjg1MCwgNzY3MTksIDc2NzI2LCA3NjczNCwgNzY3MzksIDM5NTkxLCA3Njc0MywgNzY3NDgsIDc2NzU1LCAKLSAgICA3Njc2MCwgODk4NSwgNzY3NjQsIDc2NzcyLCA3Njc3OSwgNzY3ODYsIDc2NzkyLCA3NjgwNiwgNjMzNDAsIDc2ODE0LCAKLSAgICA3NjgyMCwgNzY4MjQsIDc2ODI3LCA3NjgzNSwgNzY4NDIsIDc2ODQ3LCA3Njg2MCwgNzY4NjcsIDc2ODcxLCA3Njg3OCwgCi0gICAgNzY4ODMsIDYwODIzLCA3Njg4OCwgNzY4OTEsIDc2ODk4LCA3NjkwNCwgNzY5MDgsIDc2OTE2LCA3NjkyNSwgNzY5MzUsIAotICAgIDc2OTQ1LCA3Njk1NCwgNzY5NjIsIDc2OTczLCA3Njk3OCwgNzY5ODIsIDc2OTg3LCA3Njk5MSwgMzUzNjQsIDc2OTk5LCAKLSAgICAyMTM0NCwgMzUzNzMsIDc3MDA0LCA3NzAwOSwgNzcwMTQsIDc3MDE5LCA3NzAyNCwgNzcwMjksIDc3MDM0LCA3NzAzOCwgCi0gICAgNzcwNDMsIDc3MDQ4LCA3NzA1MywgNzcwNTgsIDc3MDYzLCA3NzA2OCwgNzcwNzIsIDc3MDc3LCA3NzA4MiwgNzcwODYsIAotICAgIDc3MDkwLCA3NzA5NCwgNzcwOTgsIDc3MTAzLCA3NzEwOCwgNzcxMTIsIDc3MTE3LCA3NzEyMSwgNzcxMjUsIDc3MTMwLCAKLSAgICA3NzEzNSwgNzcxNDAsIDc3MTQ1LCA3NzE0OSwgNzcxNTQsIDc3MTU5LCA3NzE2MywgNzcxNjgsIDc3MTczLCA3NzE3OCwgCi0gICAgNzcxODMsIDc3MTg4LCA3NzE5MywgNzcxOTgsIDc3MjAzLCA3NzIwOCwgNzcyMTMsIDc3MjE4LCA3NzIyMywgNzcyMjgsIAotICAgIDc3MjMzLCA3NzIzOCwgNzcyNDMsIDc3MjQ4LCA3NzI1MywgNzcyNTgsIDc3MjYzLCA3NzI2NywgNzcyNzIsIDc3Mjc3LCAKLSAgICA3NzI4MiwgNzcyODcsIDc3MjkyLCA3NzI5NywgNzczMDIsIDc3MzA3LCA3NzMxMiwgNzczMTcsIDc3MzIyLCA3NzMyNiwgCi0gICAgNzczMzEsIDc3MzM1LCA3NzM0MCwgNzczNDUsIDc3MzUwLCA3NzM1NSwgNzczNjAsIDc3MzY1LCA3NzM3MCwgNzczNzUsIAotICAgIDc3MzgwLCA3NzM4NCwgNzczODgsIDc3MzkzLCA3NzM5OCwgNzc0MDIsIDc3NDA3LCA3NzQxMiwgNzc0MTYsIDc3NDIxLCAKLSAgICA3NzQyNiwgNzc0MzEsIDc3NDM2LCA3NzQ0MCwgNzc0NDUsIDc3NDUwLCA3NzQ1NCwgNzc0NTksIDc3NDYzLCA3NzQ2NywgCi0gICAgNzc0NzEsIDc3NDc1LCA3NzQ4MCwgNzc0ODQsIDc3NDg4LCA3NzQ5MiwgNzc0OTYsIDc3NTAwLCA3NzUwNCwgNzc1MDgsIAotICAgIDc3NTEyLCA3NzUxNiwgNzc1MjEsIDc3NTI2LCA3NzUzMSwgNzc1MzYsIDc3NTQxLCA3NzU0NiwgNzc1NTEsIDc3NTU2LCAKLSAgICA3NzU2MSwgNzc1NjYsIDc3NTcwLCA3NzU3NCwgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk1LCA3NzU5OSwgCi0gICAgNzc2MDQsIDc3NjA4LCA3NzYxMywgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzEsIDc3NjM1LCA3NzYzOSwgNzc2NDMsIAotICAgIDc3NjQ3LCA3NzY1MSwgNzc2NTUsIDc3NjU5LCA3NzY2MywgNzc2NjcsIDc3NjcxLCA3NzY3NSwgNzc2NzksIDc3NjgzLCAKLSAgICA3NzY4NywgNzc2OTIsIDc3Njk3LCA3NzcwMSwgNzc3MDUsIDc3NzA5LCA3NzcxMywgNzc3MTcsIDc3NzIxLCA3NzcyNiwgCi0gICAgNzc3MzAsIDc3NzM0LCA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTUsIDc3NzU5LCA3Nzc2NCwgNzc3NjgsIAotICAgIDc3NzcyLCA3Nzc3NiwgNzc3ODAsIDc3Nzg0LCA3Nzc4OCwgNzc3OTIsIDc3Nzk2LCA3NzgwMCwgNzc4MDQsIDc3ODA4LCAKKyAgICA4OTM1LCA4OTM5LCA4OTQ0LCA4OTQ5LCA4OTU2LCA4OTYyLCA4OTcyLCA3OTA5LCA4OTc4LCA4OTgyLCA4OTg5LCA4OTk2LCAKKyAgICA3NjgsIDkwMDAsIDkwMDQsIDkwMDksIDkwMTQsIDkwMTksIDkwMjMsIDkwMjksIDkwMzcsIDkwNDMsIDkwNDcsIDkwNTMsIAorICAgIDkwNjMsIDkwNjcsIDkwNzMsIDkwNzgsIDkwODIsIDkwODgsIDkwOTQsIDIxNjEsIDkwOTksIDkxMDEsIDkxMDYsIDkxMTQsIAorICAgIDkxMjMsIDkxMjcsIDkxMzMsIDkxMzgsIDkxNDMsIDkxNDgsIDkxNTMsIDkxNTksIDkxNjQsIDkxNjksIDQwMDYsIDkxNzQsIAorICAgIDkxNzksIDkxODMsIDkxODksIDkxOTQsIDkyMDAsIDkyMDUsIDkyMTAsIDkyMTYsIDkyMjEsIDkxMjgsIDkyMjcsIDkyMzEsIAorICAgIDkyMzgsIDkyNDQsIDkyNDksIDkyNTMsIDYxODMsIDkyNTgsIDkyNjcsIDkyNzIsIDkyNzcsIDgyMTgsIDgyMjUsIDkyODIsIAorICAgIDI4NTMsIDkyODYsIDkyOTEsIDkyOTYsIDkxMzksIDkzMDAsIDkzMDUsIDkxNDQsIDkxNDksIDkzMTAsIDkzMTcsIDkzMjQsIAorICAgIDkzMzAsIDkzMzYsIDkzNDIsIDkzNDcsIDkzNTIsIDkzNTcsIDkxNTQsIDkxNjAsIDkzNjMsIDkzNjksIDkzNzQsIDkzODIsIAorICAgIDkxNjUsIDkzODcsIDk5MCwgOTM5MCwgOTM5OCwgOTQwNCwgOTQxMCwgOTQxOSwgOTQyNywgOTQzMiwgOTQzOCwgOTQ0NiwgCisgICAgOTQ1MywgOTQ2OCwgOTQ4NSwgOTUwNCwgOTUxMywgOTUyMSwgOTUzNiwgOTU0NywgOTU1NywgOTU2NywgOTU3NSwgOTU4MSwgCisgICAgOTU5MywgOTYwMiwgOTYxMCwgOTYxNywgOTYyNCwgOTYzMCwgOTYzNSwgOTY0MywgOTY1MywgOTY2MCwgOTY3MCwgOTY4MCwgCisgICAgOTY5MCwgOTY5OCwgOTcwNSwgOTcxNCwgOTcyNCwgOTczOCwgOTc1MywgOTc2MiwgOTc3MCwgOTc3NSwgOTc3OSwgOTc4OCwgCisgICAgOTc5NCwgOTc5OSwgOTgwOSwgOTgxOSwgOTgyOSwgOTgzNCwgOTgzOCwgOTg0NywgOTg1MiwgOTg2MiwgOTg3MywgOTg4NiwgCisgICAgOTg5NCwgOTkwNywgOTkxOSwgOTkyNywgOTkzMiwgOTkzNiwgOTk0MiwgOTk0NywgOTk1NSwgOTk2MywgOTk3MCwgOTk3NSwgCisgICAgOTk4MywgOTk4OSwgOTk5MiwgOTk5NiwgMTAwMDIsIDEwMDEwLCAxMDAxNSwgMTAwMTksIDEwMDI3LCAxMDAzNiwgMTAwNDQsIAorICAgIDEwMDUwLCAxMDA1NCwgMTAwNjEsIDEwMDcyLCAxMDA3NiwgMTAwNzksIDEwMDg1LCA5MTcwLCAxMDA5MCwgMTAwOTYsIAorICAgIDEwMTAzLCAxMDEwOSwgMTAxMTQsIDEwMTIxLCAxMDEyOCwgMTAxMzUsIDEwMTQyLCAxMDE0OSwgMTAxNTYsIDEwMTYzLCAKKyAgICAxMDE3MCwgMTAxNzUsIDk0ODEsIDEwMTgwLCAxMDE4NiwgMTAxOTMsIDEwMjAwLCAxMDIwNSwgMTAyMTIsIDEwMjIxLCAKKyAgICAxMDIyNSwgMTAyMzcsIDgyNTYsIDEwMjQxLCAxMDI0NCwgMTAyNDgsIDEwMjUyLCAxMDI1NiwgMTAyNjAsIDEwMjY2LCAKKyAgICAxMDI3MiwgMTAyNzcsIDEwMjgzLCAxMDI4OCwgMTAyOTMsIDEwMjk5LCAxMDMwNCwgMTAzMDksIDg5NTIsIDEwMzE0LCAKKyAgICAxMDMxOCwgMTAzMjIsIDEwMzI2LCAxMDMzMSwgMTAzMzYsIDEwMzQ0LCAxMDM1MCwgMTAzNTQsIDEwMzU4LCAxMDM2NSwgCisgICAgMTAzNzAsIDEwMzc4LCAxMDM4MywgMTAzODcsIDEwMzkwLCAxMDM5NiwgMTA0MDMsIDEwNDA3LCAxMDQxMCwgMTA0MTUsIAorICAgIDEwNDE5LCA0MDQ1LCAxMDQyNSwgMTA0MzQsIDM2LCAxMDQ0MiwgMTA0NDgsIDEwNDUzLCA4OTY3LCAxMDQ1OCwgMTA0NjMsIAorICAgIDEwNDY3LCAxMDQ3MCwgMTA0ODUsIDEwNTA0LCAxMDUxNiwgMTA1MjksIDEwNTQyLCAxMDU1NSwgMTA1NjksIDEwNTgyLCAKKyAgICAxMDU5NywgMTA2MDQsIDkxNzUsIDEwNjEwLCAxMDYyNCwgMTA2MjksIDEwNjM1LCAxMDY0MCwgMTA2NDgsIDEwNjUzLCAKKyAgICA4MDQwLCAxMDY1OCwgMTA2NjEsIDEwNjY4LCAxMDY3MywgMTA2NzcsIDI4NTgsIDk5OCwgMTA2ODMsIDEwNjg3LCAxMDY5MywgCisgICAgMTA2OTksIDEwNzA0LCAxMDcxMCwgMTA3MTUsIDkxODQsIDEwNzIxLCAxMDcyNywgMTA3MzIsIDEwNzM3LCAxMDc0NSwgCisgICAgMTA3NTEsIDEwNzY0LCAxMDc3MiwgMTA3NzksIDkxOTAsIDEwNzg1LCAxMDc5MywgMTA4MDEsIDEwODA4LCAxMDgyMSwgCisgICAgMTA4MzMsIDEwODQzLCAxMDg1MSwgMTA4NTgsIDEwODY1LCAxMDg3NCwgMTA4ODMsIDEwODkxLCAxMDg5OCwgMTA5MDMsIAorICAgIDEwOTA5LCA5MTk1LCAxMDkxNCwgMTA5MjAsIDkyMDEsIDEwOTI1LCAxMDkyOCwgMTA5MzUsIDEwOTQxLCAxMDk1NCwgODY2OSwgCisgICAgMTA5NjUsIDEwOTcxLCAxMDk4MCwgMTA5ODgsIDEwOTk1LCAxMTAwMSwgMTEwMDcsIDExMDEyLCAxMTAxNiwgMTEwMjEsIAorICAgIDEwNDc3LCAxMTAyNywgOTIwNiwgMTEwMzQsIDExMDM5LCAxMTA0NiwgMTEwNTIsIDExMDU4LCAxMTA2MywgMTEwNzEsIAorICAgIDExMDc5LCAxMTA4NiwgMTEwOTAsIDExMTA0LCAxMTExNCwgMTExMTksIDExMTIzLCAxMTEzNCwgMTExNDAsIDExMTQ1LCAKKyAgICAxMTE1MCwgOTIxMSwgOTIxNywgMTExNTQsIDExMTU3LCAxMTE2MiwgMTExNzQsIDExMTgxLCAxMTE4NiwgMTExOTAsIAorICAgIDExMTk1LCAxMTE5OSwgMTEyMDYsIDExMjEyLCA5MjIyLCA5MTI5LCAxMTIxOSwgMjg2MywgOCwgMTEyMjYsIDExMjMxLCAKKyAgICAxMTIzNSwgMTEyNDEsIDExMjQ5LCAxMTI1OSwgMTEyNjQsIDExMjY5LCAxMTI3NiwgMTEyODMsIDExMjg3LCAxMTI5OCwgCisgICAgMTEzMDgsIDExMzE3LCAxMTMyOSwgMTEzMzQsIDExMzM4LCAxMTM0NiwgMTEzNjAsIDExMzY0LCAxMTM2NywgMTEzNzUsIAorICAgIDExMzgyLCAxMTM5MCwgMTEzOTQsIDExNDA1LCAxMTQwOSwgMTE0MTYsIDExNDIxLCAxMTQyNSwgMTE0MzEsIDExNDM2LCAKKyAgICAxMTQ0MCwgMTE0NDYsIDExNDUxLCAxMTQ2MiwgMTE0NjYsIDExNDY5LCAxMTQ3NSwgMTE0ODAsIDExNDg2LCAxMTQ5MiwgCisgICAgMTE0OTksIDExNTEwLCAxMTUyMCwgMTE1MzAsIDExNTM5LCAxMTU0NiwgMTE1NTUsIDkyMzIsIDkyMzksIDkyNDUsIDkyNTAsIAorICAgIDExNTYxLCAxMTU2NywgOTI1NCwgMTE1NzMsIDExNTc2LCAxMTU4MywgMTE1ODgsIDExNjAzLCAxMTYxOSwgMTE2MzQsIAorICAgIDExNjQyLCAxMTY0OCwgMTE2NTMsIDgzOCwgNDIwLCAxMTY1OCwgMTE2NjYsIDExNjczLCAxMTY3OSwgMTE2ODQsIDExNjg5LCAKKyAgICA5MjU5LCAxMTY5MSwgMTE2OTUsIDExNzAwLCAxMTcwNCwgMTE3MTQsIDExNzE5LCAxMTcyMywgMTE3MzIsIDExNzM2LCAKKyAgICAxMTczOSwgOTI2OCwgMTE3NDYsIDExNzQ5LCAxMTc1NywgMTE3NjQsIDExNzcyLCAxMTc3NiwgMTE3ODMsIDExNzkyLCAKKyAgICAxMTc5NSwgMTE3OTksIDExODAzLCAxMTgwOSwgMTE4MTMsIDExODE3LCAxMTgyMSwgMTE4MjcsIDExODM3LCAxMTg0MSwgCisgICAgMTE4NDksIDExODUzLCAxMTg2MCwgMTE4NjQsIDExODY5LCAxMTg3MywgMTE4ODAsIDExODg2LCAxMTg5NCwgMTE5MDAsIAorICAgIDExOTA1LCAxMTkxNSwgMTE5MjAsIDExOTI1LCAxMTkyOSwgMTE5MzcsIDM5MDUsIDExOTQ1LCAxMTk1MCwgOTI3MywgCisgICAgMTE5NTQsIDExOTU4LCAxMTk2MSwgMTE5NjksIDExOTc2LCAxMTk4MCwgNTk5MSwgMTE5ODQsIDExOTg5LCAxMTk5MywgCisgICAgMTIwMDQsIDEyMDE0LCAxMjAxOSwgMTIwMjUsIDEyMDI5LCAxMjAzMiwgMTIwNDAsIDEyMDQ1LCAxMjA1MCwgMTIwNTcsIAorICAgIDEyMDYyLCA5Mjc4LCAxMjA2NywgMTIwNzEsIDEyMDc4LCAxNzIyLCA2MTQ1LCAxMjA4MywgMTIwODgsIDEyMDkzLCAxMjA5OCwgCisgICAgMTIxMDQsIDEyMTA5LCAxMjExNSwgMTIxMjAsIDEyMTI1LCAxMjEzMCwgMTIxMzUsIDEyMTQwLCAxMjE0NSwgMTIxNTAsIAorICAgIDEyMTU1LCAxMjE2MCwgMTIxNjUsIDEyMTcwLCAxMjE3NSwgMTIxODAsIDEyMTg1LCAxMjE5MCwgMTIxOTUsIDEyMjAxLCAKKyAgICAxMjIwNiwgMTIyMTEsIDEyMjE2LCAxMjIyMSwgMTIyMjYsIDEyMjMyLCAxMjIzNywgMTIyNDIsIDEyMjQ4LCAxMjI1MywgCisgICAgMTIyNTksIDEyMjY0LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTAsIDEyMjk2LCAxMjMwMSwgMTIzMDYsIAorICAgIDEyMzExLCA3MzcsIDEzOSwgMTIzMTksIDEyMzIzLCAxMjMyOCwgMTIzMzMsIDEyMzM3LCAxMjM0MSwgMTIzNDUsIDEyMzUwLCAKKyAgICAxMjM1NCwgMTIzNTksIDEyMzYzLCAxMjM2NiwgMTIzNzAsIDEyMzc0LCAxMjM4MCwgMTIzODUsIDEyMzk1LCAxMjQwMSwgCisgICAgMTI0MDksIDEyNDEzLCAxMjQxNywgMTI0MjQsIDEyNDMyLCAxMjQ0MSwgMTI0NTIsIDEyNDU5LCAxMjQ2NiwgMTI0NzAsIAorICAgIDEyNDc5LCAxMjQ4OCwgMTI0OTYsIDEyNTA1LCAxMjUxNCwgMTI1MjMsIDEyNTMyLCAxMjU0MiwgMTI1NTIsIDEyNTYyLCAKKyAgICAxMjU3MiwgMTI1ODIsIDEyNTkxLCAxMjYwMSwgMTI2MTEsIDEyNjIxLCAxMjYzMSwgMTI2NDEsIDEyNjUxLCAxMjY2MSwgCisgICAgMTI2NzAsIDEyNjgwLCAxMjY5MCwgMTI3MDAsIDEyNzEwLCAxMjcyMCwgMTI3MzAsIDEyNzM5LCAxMjc0OSwgMTI3NTksIAorICAgIDEyNzY5LCAxMjc3OSwgMTI3ODksIDEyNzk5LCAxMjgwOSwgMTI4MTksIDEyODI5LCAxMjgzOCwgMTI4NDgsIDEyODU4LCAKKyAgICAxMjg2OCwgMTI4NzgsIDEyODg4LCAxMjg5OCwgMTI5MDgsIDEyOTE4LCAxMjkyOCwgMTI5MzgsIDEyOTQ3LCAxMjU2LCAKKyAgICAxMjk1MywgMTI5NTYsIDEyOTYwLCAxMjk2NSwgMTI5NzIsIDEyOTc4LCAxMjk4MywgMTI5ODcsIDEyOTkyLCAxMzAwMSwgCisgICAgMTMwMDksIDEzMDE0LCAxMzAxOCwgMTMwMjIsIDEzMDI4LCAxMzAzMywgMTMwMzksIDkyODcsIDEzMDQ0LCAxMzA0OSwgCisgICAgMTMwNTgsIDkyOTIsIDEzMDYzLCAxMzA2NiwgMTMwNzIsIDEzMDgwLCA5Mjk3LCAxMzA4NywgMTMwOTEsIDEzMDk1LCAKKyAgICAxMzA5OSwgMTMxMDksIDEzMTE1LCAxMzEyMSwgMTMxMjYsIDEzMTM1LCAxMzE0MywgMTMxNTAsIDEzMTU3LCAxMzE2MiwgCisgICAgMTMxNjksIDEzMTc0LCAxMzE3OCwgMTMxODEsIDEzMTkyLCAxMzIwMiwgMTMyMTEsIDEzMjE5LCAxMzIzMCwgMTMyNDIsIAorICAgIDEzMjUyLCAxMzI1NywgMTMyNjEsIDEzMjY2LCAxMzI3MSwgMTMyNzUsIDEzMjgxLCAxMzI4OSwgMTMyOTYsIDEzMzA3LCAKKyAgICAxMzMxMiwgMTMzMjIsIDEzMzI2LCAxMzMyOSwgMTMzMzYsIDEzMzQ2LCAxMzM1NSwgMTMzNjIsIDEzMzY2LCAxMzM3MywgCisgICAgMTMzNzksIDEzMzg0LCAxMzM4OSwgMTMzOTMsIDEzNDAyLCAxMzQwNywgMTM0MTMsIDEzNDE3LCAxMzQyMiwgMTM0MjYsIAorICAgIDEzNDM1LCAxMzQ0MywgMTM0NTEsIDEzNDU4LCAxMzQ2NiwgMTM0NzgsIDEzNDg5LCAxMzQ5OSwgMTM1MDYsIDEzNTEyLCAKKyAgICAxMzUyMSwgMTM1MzIsIDEzNTQxLCAxMzU1MywgMTM1NjUsIDEzNTc3LCAxMzU4NywgMTM1OTYsIDEzNjA1LCAxMzYxMywgCisgICAgMTM2MjAsIDEzNjI5LCAxMzYzNywgMTM2NDEsIDEzNjQ3LCAxMzY1MywgMTM2NTgsIDc3NTMsIDEzNjYyLCAxMzY2NCwgCisgICAgMTM2NjgsIDEzNjczLCAxMzY3OSwgMTM2ODgsIDEzNjkyLCAxMzY5OCwgMTM3MDYsIDEzNzEzLCAxMzcyMiwgMTM3MzEsIAorICAgIDEzNzQwLCAxMzc0OSwgMTM3NTgsIDEzNzY3LCAxMzc3NiwgMTM3ODUsIDEzNzk1LCAxMzgwNSwgMTM4MTQsIDEzODIwLCAKKyAgICAxMzgyNywgMTM4MzQsIDEzODQwLCAxMzg1NCwgMTM4NjEsIDEzODY5LCAxMzg3OCwgMTM4ODQsIDEzODkzLCAxMzkwMiwgCisgICAgMTM5MTMsIDEzOTIzLCAxMzkzMSwgMTM5MzgsIDEzOTQ2LCAxMzk1NSwgMTM5NjgsIDEzOTc2LCAxMzk4MywgMTM5OTYsIAorICAgIDE0MDAyLCAxNDAwOCwgMTQwMTgsIDE0MDI3LCAxNDAzNiwgMTQwNDEsIDE0MDQ1LCAxNDA1MSwgMTQwNTcsIDE0MDY0LCAKKyAgICA4OTY2LCAxNDA2OSwgMTQwNzQsIDE0MDgxLCAxNDA4NiwgMTIzNzYsIDE0MDkxLCAxNDA5OSwgMTQxMDUsIDE0MTEwLCAKKyAgICAxNDExOCwgMTQxMjYsIDE0MTMzLCAxNDE0MSwgMTQxNDcsIDE0MTU1LCAxNDE2MywgMTQxNjksIDE0MTc0LCAxNDE4MCwgCisgICAgMTQxODcsIDE0MTkzLCAxNDE5OCwgMTQyMDIsIDE0MjEzLCAxNDIyMSwgMTQyMjcsIDE0MjMyLCAxNDI0MSwgMTQyNDcsIAorICAgIDE0MjUyLCAxNDI2MSwgMTQyNzUsIDM4NTMsIDE0Mjc5LCAxNDI4NCwgMTQyODksIDE0Mjk1LCAxNDMwMCwgMTQzMDUsIAorICAgIDE0MzA5LCAxNDMxNCwgMTQzMTksIDE0MzI0LCA3NzUyLCAxNDMyOSwgMTQzMzQsIDE0MzM5LCAxNDM0NCwgMTQzNDksIAorICAgIDE0MzUzLCAxNDM1OCwgMTQzNjMsIDE0MzY4LCAxNDM3MywgMTQzNzksIDE0Mzg1LCAxNDM5MCwgMTQzOTQsIDE0Mzk5LCAKKyAgICAxNDQwNCwgMTQ0MDksIDkzMDEsIDE0NDE0LCAxNDQxOSwgMTQ0MjQsIDE0NDI5LCAxNDQzNCwgMTQ0NTEsIDE0NDY5LCAKKyAgICAxNDQ4MSwgMTQ0OTQsIDE0NTExLCAxNDUyNywgMTQ1NDQsIDE0NTU0LCAxNDU3MywgMTQ1ODQsIDE0NTk1LCAxNDYwNiwgCisgICAgMTQ2MTcsIDE0NjI5LCAxNDY0MCwgMTQ2NTEsIDE0NjY4LCAxNDY3OSwgMTQ2OTAsIDE0Njk1LCA5MzA2LCAxNDcwMCwgCisgICAgMTQ3MDQsIDIzODEsIDE0NzA4LCAxNDcxMSwgMTQ3MTcsIDE0NzI1LCAxNDczMywgMTQ3MzgsIDE0NzQ2LCAxNDc1NCwgCisgICAgMTQ3NjEsIDE0NzY2LCAxNDc3MiwgMTQ3NzksIDE0Nzg3LCAxNDc5NCwgMTQ4MDYsIDE0ODE0LCAxNDgxOSwgMTE1OTcsIAorICAgIDE0ODI1LCAxNDgzNCwgMTQ4NDMsIDE0ODUxLCAxNDg1OCwgMTQ4NjQsIDE0ODcyLCAxNDg3OSwgMTQ4ODUsIDE0ODkyLCAKKyAgICAxNDg5OCwgMTQ5MDcsIDE0OTE1LCAxNDkyNSwgMTQ5MzIsIDE0OTM4LCAxNDk0NiwgMTQ5NTIsIDE0OTYwLCAxNDk2NywgCisgICAgMTQ5ODAsIDE0OTg3LCAxNDk5NiwgMTUwMDUsIDE1MDE0LCAxNTAyMiwgMTUwMzIsIDE1MDM5LCAxNTA0NCwgMzU2MCwgCisgICAgMTUwNTEsIDE1MDU2LCAxMzcyLCAxNTA2MCwgMTQzMzAsIDE1MDY0LCAxNTA3MCwgMTUwNzQsIDE1MDgyLCAxNTA5NCwgCisgICAgMTUwOTksIDE1MTA2LCAxNTExMiwgMTUxMTcsIDE1MTI0LCAxNDMzNSwgMTUxMjgsIDE1MTMyLCAxNTEzNiwgMTQzNDAsIAorICAgIDE1MTQwLCAxNDM0NSwgMTUxNDQsIDE1MTUxLCAxNTE1NiwgMTUxNjAsIDE1MTY3LCAxNTE3MSwgMTUxNzksIDE1MTg2LCAKKyAgICAxNTE5MCwgMTUxOTcsIDE1MjE0LCAxNTIyMywgMTUyMjcsIDE1MjMwLCAxNTIzOCwgMTUyNDQsIDE1MjQ5LCAzNjM4LCAKKyAgICAxNTI1MywgMTUyNTUsIDE1MjYzLCAxNTI3MCwgMTUyODAsIDE1MjkyLCAxNTI5NywgMTUzMDMsIDE1MzA4LCAxNTMxMiwgCisgICAgMTUzMTgsIDE1MzIzLCAxNTMyOSwgMTUzMzIsIDE1MzM5LCAxNTM0NywgMTUzNTQsIDE1MzYwLCAxNTM2NiwgMTUzNzEsIAorICAgIDE1Mzc4LCAxNTM4NCwgMTUzODksIDE1Mzk2LCAxNTQwMCwgMTU0MDYsIDE1NDEwLCAxNTQxNywgMTU0MjMsIDE1NDI5LCAKKyAgICAxNTQzNywgMTU0NDMsIDE1NDQ4LCAxNTQ1NCwgMTU0NjIsIDE1NDcwLCAxNTQ3NiwgMTU0ODIsIDE1NDg3LCAxNTQ5NCwgCisgICAgMTU0OTksIDE1NTAzLCAxNTUwOSwgMTU1MTQsIDE1NTIxLCAxNTUyNiwgMTU1MzIsIDE1NTM1LCAxNTU0MSwgMTU1NDcsIAorICAgIDE1NTUwLCAxNTU1NCwgMTU1NjYsIDE1NTcyLCAxNTU3NywgMTU1ODQsIDE1NTkwLCAxNTU5NiwgMTU2MDcsIDE1NjE3LCAKKyAgICAxNTYyNiwgMTU2MzQsIDE1NjQxLCAxNTY1MiwgMTU2NjIsIDE1NjcyLCAxNTY4MCwgMTU2ODMsIDE0MzU5LCAxNTY4OCwgCisgICAgMTU2OTMsIDE0MzY0LCAxNDQ5OSwgMTU3MDEsIDE1NzE0LCAxNTcyOSwgMTU3NDAsIDE0NTE2LCAxNTc1OCwgMTU3NzEsIAorICAgIDE1Nzg0LCAxNTc5NSwgMTA0OTIsIDE1ODA2LCAxNTgxOSwgMTU4MzgsIDE1ODQ5LCAxNTg2MCwgMTU4NzEsIDI2NDksIAorICAgIDE1ODg0LCAxNTg4OCwgMTU4OTYsIDE1OTExLCAxNTkyNiwgMTU5MzcsIDE1OTQ0LCAxNTk1MCwgMTU5NTgsIDE1OTYyLCAKKyAgICAxNTk2OCwgMTU5NzEsIDE1OTgxLCAxNTk4OSwgMTU5OTYsIDE2MDA0LCAxNjAxNCwgMTYwMTksIDE2MDI2LCAxNjAzMSwgCisgICAgMTYwMzgsIDE2MDQ5LCAxNjA1OSwgMTYwNjUsIDE2MDcwLCAxNjA3NSwgMTQzNjksIDE2MDc5LCAxNjA4NSwgMTYwOTEsIAorICAgIDE2MDk2LCAxNjEwMSwgMTYxMDYsIDE2MTEwLCAxNDM3NCwgMTQzODAsIDE2MTE0LCAxNDM4NiwgMTYxMTksIDE2MTI3LCAKKyAgICAxNjEzNiwgMTYxNDMsIDkxNTAsIDE2MTQ3LCAxNjE0OSwgMTYxNTQsIDE2MTU5LCAxNjE2NSwgMTYxNzAsIDE2MTc1LCAKKyAgICAxNjE4MCwgMTYxODUsIDE2MTg5LCAxNjE5NSwgMTYyMDEsIDE2MjA2LCAxNjIxMiwgMTYyMTcsIDE2MjIyLCAxNjIyOCwgCisgICAgMTYyMzMsIDE2MjM4LCAxNjI0MywgMTYyNDgsIDE2MjU0LCAxNjI1OSwgMTYyNjQsIDE2MjcwLCAxNjI3NiwgMTYyODEsIAorICAgIDE2Mjg2LCAxNjI5MywgMTYyOTksIDE2MzEwLCAxNjMxNywgMTYzMjIsIDE2MzI2LCAxNjMzMCwgMTYzMzMsIDE2MzQxLCAKKyAgICAxNjM0NiwgMTYzNTMsIDE2MzYwLCAxNjM2NiwgMTYzNzEsIDE2Mzc2LCAxNjM4MywgMTYzOTMsIDE2Mzk4LCAxNjQwNSwgCisgICAgMTY0MTEsIDE2NDIxLCAxNjQzMSwgMTY0NDUsIDE2NDU5LCAxNjQ3MywgMTY0ODcsIDE2NTAyLCAxNjUxNywgMTY1MzQsIAorICAgIDE2NTUyLCAxNjU2NSwgMTY1NzEsIDE2NTc2LCAxNjU4MSwgMTY1ODUsIDE2NTkwLCAxNjU5OCwgMTY2MDQsIDE2NjA5LCAKKyAgICAxNjYxNCwgMTY2MTgsIDE2NjIzLCAxNjYyNywgMTY2MzIsIDE2NjM2LCAxNjY0NywgMTY2NTMsIDE2NjU4LCAxNjY2MywgCisgICAgMTY2NzAsIDE2Njc1LCAxNjY3OSwgMTY2ODQsIDE2Njg5LCAxNjY5NSwgMTY3MDIsIDE2NzA4LCAxNjcxMywgMTY3MTcsIAorICAgIDE2NzIzLCAxNjcyOCwgMTY3MzMsIDE2NzM3LCAxNjc0MywgMTY3NDgsIDE2NzUzLCAxNjc2MCwgMTY3NjUsIDEzMTExLCAKKyAgICAxNjc2OSwgMTY3NzQsIDE2Nzc4LCAxNjc4MywgMTY3ODksIDE2Nzk1LCAxNjgwMiwgMTY4MTIsIDE2ODIwLCAxNjgyNywgCisgICAgMTY4MzIsIDE2ODM2LCAxNjg0NSwgMTY4NTMsIDE2ODYwLCAxNjg2NywgMTY4NzMsIDE2ODc5LCAxNjg4NCwgMTY4ODksIAorICAgIDE2ODk1LCAxNjkwMCwgMTY5MDYsIDE2OTExLCAxNjkxNywgMTY5MjMsIDE2OTMwLCAxNjkzNiwgMTY5NDEsIDE2OTQ2LCAKKyAgICA5MzQ4LCAxNjk1NSwgMTY5NTgsIDE2OTY0LCAxNjk2OSwgMTY5NzQsIDE2OTg0LCAxNjk5MSwgMTY5OTcsIDE3MDAyLCAKKyAgICAxNzAwNywgMTcwMTMsIDE3MDE4LCAxNzAyNCwgMTcwMjksIDE3MDM1LCAxNzA0MSwgMTcwNDYsIDE3MDU0LCAxNzA2MSwgCisgICAgMTcwNjYsIDE3MDcxLCAxNzA3NywgMTcwODIsIDE3MDg2LCAxNzA5NSwgMTcxMDYsIDE3MTEzLCAxNzExOCwgMTcxMjYsIAorICAgIDE3MTMyLCAxNzEzOSwgMTcxNDUsIDE3MTUwLCAxNzE1NCwgMTcxNjAsIDE3MTY1LCAxNzE3MCwgMTcxNzUsIDE0NDAsIAorICAgIDc3NzcsIDI4NzcsIDE3MTc5LCAxNzE4MywgMTcxODcsIDE3MTkxLCAxNzE5NSwgMTcxOTksIDE3MjAyLCAxNzIwOSwgCisgICAgMTcyMTcsIDE0NDAwLCAxNzIyNCwgMTcyMzQsIDE3MjQyLCAxNzI0OSwgMTcyNTcsIDE3MjY3LCAxNzI3NiwgMTcyODksIAorICAgIDE3Mjk0LCAxNzI5OSwgMTczMDcsIDE3MzE0LCAxMzIwNywgMTMyMTYsIDE3MzIxLCAxNzMzMSwgMTczNDYsIDE3MzUyLCAKKyAgICAxNzM1OSwgMTczNjYsIDE3MzcyLCAxNzM4MCwgMTczOTAsIDE3NDAwLCAxNDQwNSwgMTc0MDksIDE3NDE1LCAxNzQyMSwgCisgICAgMTc0MjksIDE3NDM3LCAxNzQ0MiwgMTc0NTEsIDE3NDU5LCAxNzQ3MSwgMTc0ODEsIDE3NDkxLCAxNzUwMSwgMTc1MTAsIAorICAgIDE3NTIyLCAxNzUzMiwgMTc1NDIsIDE3NTUzLCAxNzU1OCwgMTc1NzAsIDE3NTgyLCAxNzU5NCwgMTc2MDYsIDE3NjE4LCAKKyAgICAxNzYzMCwgMTc2NDIsIDE3NjU0LCAxNzY2NiwgMTc2NzgsIDE3Njg5LCAxNzcwMSwgMTc3MTMsIDE3NzI1LCAxNzczNywgCisgICAgMTc3NDksIDE3NzYxLCAxNzc3MywgMTc3ODUsIDE3Nzk3LCAxNzgwOSwgMTc4MjAsIDE3ODMyLCAxNzg0NCwgMTc4NTYsIAorICAgIDE3ODY4LCAxNzg4MCwgMTc4OTIsIDE3OTA0LCAxNzkxNiwgMTc5MjgsIDE3OTQwLCAxNzk1MSwgMTc5NjMsIDE3OTc1LCAKKyAgICAxNzk4NywgMTc5OTksIDE4MDExLCAxODAyMywgMTgwMzUsIDE4MDQ3LCAxODA1OSwgMTgwNzEsIDE4MDgyLCAxODA5NCwgCisgICAgMTgxMDYsIDE4MTE4LCAxODEzMCwgMTgxNDIsIDE4MTU0LCAxODE2NiwgMTgxNzgsIDE4MTkwLCAxODIwMiwgMTgyMTMsIAorICAgIDE4MjI1LCAxODIzNywgMTgyNDksIDE4MjYxLCAxODI3MywgMTgyODUsIDE4Mjk3LCAxODMwOSwgMTgzMjEsIDE4MzMzLCAKKyAgICAxODM0NCwgMTgzNTYsIDE4MzY4LCAxODM4MCwgMTgzOTIsIDE4NDA0LCAxODQxNiwgMTg0MjgsIDE4NDQwLCAxODQ1MiwgCisgICAgMTg0NjQsIDE4NDc1LCAxODQ4NywgMTg0OTksIDE4NTExLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIAorICAgIDE4NTg4LCAxODYwMSwgMTg2MTQsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAKKyAgICAxODcxNywgMTg3MzAsIDE4NzQzLCAxODc1NiwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgCisgICAgMTg4NDYsIDE4ODU5LCAxODg3MiwgMTg4ODUsIDE4ODk4LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIAorICAgIDE4OTc1LCAxODk4OCwgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwNDAsIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAKKyAgICAxOTEwNCwgMTkxMTcsIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MiwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgCisgICAgMTkyMzMsIDE5MjQ2LCAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzI0LCAxOTMzNiwgMTkzNDcsIAorICAgIDE5MzYwLCAxOTM3MywgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc3LCAKKyAgICAxOTQ4OSwgMTk1MDIsIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgCisgICAgMTk2MTksIDE5NjMxLCAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIAorICAgIDE5NzQ4LCAxOTc2MSwgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAKKyAgICAxOTg3NywgMTk4OTAsIDE5OTAzLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgCisgICAgMjAwMDYsIDIwMDE5LCAyMDAzMiwgMjAwNDUsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIAorICAgIDIwMTM1LCAyMDE0OCwgMjAxNjEsIDIwMTc0LCAyMDE4NywgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAKKyAgICAyMDI2NCwgMjAyNzcsIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI5LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgCisgICAgMjAzOTMsIDIwNDA2LCAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzEsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIAorICAgIDIwNTIyLCAyMDUzNSwgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMywgMjA2MjUsIDIwNjM4LCAKKyAgICAyMDY1MSwgMjA2NjQsIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU1LCAyMDc2NywgCisgICAgMjA3NzgsIDIwNzg2LCAyMDc5NCwgMjA4MDEsIDIwODA3LCAyMDgxMSwgMjA4MTcsIDIwODIzLCAyMDgzMSwgMjA4MzcsIAorICAgIDIwODQyLCAyMDg0NiwgMjA4NTUsIDkxNTUsIDIwODY2LCAyMDg3MywgMjA4ODEsIDIwODg4LCAyMDg5NSwgMTA5NDgsIAorICAgIDIwOTAyLCAyMDkxMSwgMjA5MTYsIDIwOTIxLCA3ODA1LCAyMDkyOCwgMjA5MzMsIDIwOTM2LCAyMDk0MSwgMjA5NDksIAorICAgIDIwOTU2LCAyMDk2MywgMjA5NzAsIDIwOTc2LCAyMDk4NSwgMjA5OTQsIDIxMDAwLCAyMTAwOSwgMjEwMTMsIDIxMDE5LCAKKyAgICAyMTAyNCwgMjEwMzQsIDIxMDQxLCAyMTA0NywgMjEwNTUsIDIxMDYxLCAyMTA2OCwgMjEwNzgsIDIxMDg3LCAyMTA5MSwgCisgICAgMjEwOTgsIDIxMTAyLCAyMTEwNywgMjExMTMsIDIxMTIxLCAyMTEyNSwgMjExMzUsIDE0NDE1LCAyMTE0NCwgMjExNTAsIAorICAgIDIxMTU0LCAyMTE2MywgMTQ0MjAsIDIxMTY5LCAyMTE3NiwgMjExODcsIDIxMTk1LCAyMTIwNCwgMjEyMTIsIDg5MzEsIAorICAgIDIxMjIwLCAyMTIyNSwgMjEyMzEsIDIxMjM2LCAyMTI0MCwgMjEyNDQsIDIxMjQ4LCA5NjM5LCAyMTI1MywgMjEyNjEsIAorICAgIDIxMjY4LCAyMTI3NywgMjEyODQsIDIxMjkxLCAxMDg3OCwgMjEyOTgsIDIxMzA0LCAyMTMwOCwgMjEzMTQsIDIxMzIxLCAKKyAgICAyMTMyNywgMjEzMzUsIDIxMzQxLCAyMTM0OCwgMjEzNTQsIDIxMzYwLCAyMTM2OSwgMjEzNzMsIDIxMzgxLCAyMTM5MCwgCisgICAgMjEzOTcsIDIxNDAyLCAyMTQwNiwgMjE0MTcsIDIxNDIyLCAyMTQyNywgMjE0MzIsIDIxNDQ1LCA3OTk1LCAyMTQ0OSwgCisgICAgMjE0NTUsIDIxNDYzLCAyMTQ2NywgMjE0NzQsIDIxNDgzLCAyMTQ4OCwgMTQ2OTEsIDIxNDk2LCAyMTUwMCwgMjE1MTIsIAorICAgIDIxNTE3LCAyMTUyMSwgMjE1MjQsIDIxNTMwLCAyMTUzNiwgMjE1NDEsIDIxNTQ1LCAyMTU0OCwgMjE1NTksIDIxNTY0LCAKKyAgICA5MzgzLCAyMTU3MSwgMjE1NzYsIDkzODgsIDIxNTgxLCAyMTU4NiwgMjE1OTEsIDIxNTk2LCAyMTYwMSwgMjE2MDYsIAorICAgIDIxNjExLCAyMTYxNiwgMjE2MjEsIDIxNjI2LCAyMTYzMSwgMjE2MzYsIDIxNjQyLCAyMTY0NywgMjE2NTIsIDIxNjU3LCAKKyAgICAyMTY2MiwgMjE2NjcsIDIxNjcyLCAyMTY3NywgMjE2ODIsIDIxNjg3LCAyMTY5MywgMjE2OTksIDIxNzA0LCAyMTcwOSwgCisgICAgMjE3MTQsIDIxNzE5LCAyMTcyNCwgMjE3MjksIDIxNzM0LCAyMTczOSwgMjE3NDQsIDIxNzUwLCAyMTc1NSwgMjE3NjAsIAorICAgIDIxNzY1LCAyMTc3MSwgMjE3NzcsIDIxNzgyLCAyMTc4NywgMjE3OTIsIDIxNzk3LCAyMTgwMiwgMjE4MDcsIDIxODEyLCAKKyAgICAyMTgxNywgMjE4MjMsIDIxODI4LCAyMTgzMywgMjE4MzgsIDIxODQzLCAyMTg0OSwgMjE4NTQsIDIxODU5LCAyMTg2MywgCisgICAgMTM2OCwgMTI5LCAyMTg3MSwgMjE4NzUsIDIxODc5LCAyMTg4MywgMjE4ODgsIDIxODkyLCAxMzExNywgMTI0NzYsIDIxODk2LCAKKyAgICAyMTkwMSwgMjE5MDUsIDIxOTEwLCAyMTkxNCwgMjE5MTksIDIxOTIzLCAyMTkyOSwgMjE5MzQsIDIxOTM4LCAyMTk0MiwgCisgICAgMjE5NTAsIDIxOTU0LCAyMTk1OCwgMjE5NjMsIDIxOTY4LCAyMTk3MiwgMjE5NzgsIDIxOTgzLCAyMTk4NywgMjE5OTIsIAorICAgIDIxOTk3LCAyMjAwMSwgMjIwMDgsIDIyMDE1LCAyMjAyMiwgMjIwMjYsIDIyMDMwLCAyMjAzNSwgMjIwMzksIDIyMDQyLCAKKyAgICAyMjA0OCwgMjIwNjEsIDIyMDY2LCAyMjA3NSwgMjIwODAsIDk0MjgsIDIyMDg1LCAyMjA4OCwgMjcxMiwgMjcxNywgMjIwOTIsIAorICAgIDIyMDk4LCAyMjEwNCwgNzIwOSwgMjIxMDksIDIyMTE0LCAyMjExOSwgMjIxMjUsIDIyMTMwLCAxMzkwOSwgMjIxMzUsIAorICAgIDIyMTQwLCAyMjE0NSwgMjIxNTAsIDIyMTU2LCAyMjE2MSwgMjIxNjYsIDIyMTcyLCAyMjE3NywgMjIxODEsIDIyMTg2LCAKKyAgICAyMjE5MSwgMjIxOTYsIDIyMjAxLCAyMjIwNSwgMjIyMTAsIDIyMjE0LCAyMjIxOSwgMjIyMjQsIDIyMjI5LCAyMjIzNCwgCisgICAgMjIyMzgsIDIyMjQzLCAyMjI0NywgMjIyNTIsIDIyMjU3LCAyMjI2MiwgMjIyNjcsIDI4ODYsIDIyMTgyLCAyMjI3MSwgCisgICAgMjIyNzksIDIyMjg2LCA5NzMzLCAyMjI5OCwgMjIzMDYsIDIyMTg3LCAyMjMxMywgMjIzMTgsIDIyMzI2LCAyMjE5MiwgCisgICAgMjIzMzEsIDIyMzM2LCAyMjM0NCwgMjIzNDksIDIyMTk3LCAyMjM1NCwgMjIzNTksIDIyMzYzLCAyMjM2OSwgMjIzNzcsIAorICAgIDIyMzgwLCAyMjM4NywgMjIzOTEsIDIyMzk1LCAyMjQwMSwgMjI0MDgsIDIyNDEzLCA4OTU4LCAxNzI3LCAxNzMyLCAyMjQxNywgCisgICAgMjI0MjMsIDIyNDI5LCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDU0LCAyMjQ1OCwgMjI0NjIsIAorICAgIDIyNDY2LCAyMjQ2OSwgMjI0NzUsIDIyNDgyLCAyMjQ5MCwgMjI0OTYsIDIyNTAyLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAKKyAgICAxMzgyOSwgMTM4MzYsIDIyNTIxLCAyMjUzMywgMjI1MzYsIDIyNTQzLCAxNjM2MiwgMjI1NTAsIDIyNTU4LCAyMjU2OSwgCisgICAgMjI1NzgsIDIyNTkxLCAyMjYwMSwgMjI2MTUsIDIyNjI3LCAyMjY0MSwgMjI2NTMsIDIyNjYzLCAyMjY3NSwgMjI2ODEsIAorICAgIDIyNjk2LCAyMjcyMCwgMjI3MzgsIDIyNzU3LCAyMjc3MCwgMjI3ODQsIDIyODAyLCAyMjgxOCwgMjI4MzUsIDIyODUzLCAKKyAgICAyMjg2NCwgMjI4ODMsIDIyOTAwLCAyMjkyMCwgMjI5MzgsIDIyOTUwLCAyMjk2NCwgMjI5NzgsIDIyOTkwLCAyMzAwNywgCisgICAgMjMwMjYsIDIzMDQ0LCAyMzA1NiwgMjMwNzQsIDIzMDkzLCAxNDU1OSwgMjMxMDYsIDIzMTI2LCAyMzEzOCwgMTA1MjMsIAorICAgIDIzMTUwLCAyMzE1NSwgMjMxNjAsIDIzMTY1LCAyMzE3MSwgMjMxNzYsIDIzMTgwLCAyMzE4NywgMjM5OCwgMjMxOTEsIAorICAgIDIzMTk3LCAyMzIwMSwgMjMyMDQsIDIzMjA4LCAyMzIxNiwgMjMyMjIsIDIyMjE1LCAyMzIyNiwgMjMyMzUsIDIzMjQ2LCAKKyAgICAyMzI1MiwgMjMyNTgsIDIzMjY3LCAyMzI3NSwgMjMyODIsIDIzMjg3LCAyMzI5MSwgMjMyOTgsIDIzMzA0LCAyMzMxMywgCisgICAgMjMzMjEsIDIzMzI4LCAyMzMzOCwgMjMzNDcsIDIzMzU3LCAyMzM2MiwgMjMzNzEsIDIzMzgwLCAyMzM5MSwgMjM0MDIsIAorICAgIDM5NjMsIDIzNDEyLCAyMzQxNiwgMjM0MjYsIDIzNDM0LCAyMzQ0NCwgMjM0NTUsIDIzNDYwLCAyMzQ3MCwgMjM0NzgsIAorICAgIDIzNDg1LCAyMzQ5MSwgMjM0OTgsIDIzNTAzLCAyMjIyNSwgMjM1MDcsIDIzNTE2LCAyMzUyMCwgMjM1MjMsIDIzNTI4LCAKKyAgICAyMzUzNSwgMjM1NDQsIDIzNTUyLCAyMzU2MCwgMjM1NzAsIDIzNTc5LCAyMzU4NSwgMjM1OTEsIDIyMjMwLCAyMjIzNSwgCisgICAgMjM1OTUsIDIzNjA1LCAyMzYxNSwgMjM2MjUsIDIzNjMzLCAyMzY0MCwgMjM2NTAsIDIzNjU4LCAyMzY2NiwgMjM2NzIsIAorICAgIDIzNjgwLCA5MzAsIDIzNjg5LCAxNDc1MCwgNTQyLCAyMzcwMywgMjM3MTIsIDIzNzIwLCAyMzczMSwgMjM3NDIsIDIzNzUyLCAKKyAgICAyMzc2MSwgMjM3NzMsIDIzNzgyLCAyMzc5MSwgMjM3OTcsIDIzODA2LCAyMzgxNSwgMjM4MjUsIDIzODMzLCAyMzg0MSwgCisgICAgOTM2MCwgMjM4NDcsIDIzODUwLCAyMzg1NCwgMjM4NTksIDIzODY0LCA5ODQ4LCAyMjI0OCwgMjIyNTMsIDIzODcyLCAKKyAgICAyMzg3OCwgMjM4ODQsIDIzODg5LCAyMzg5NCwgMjM4OTgsIDIzOTA2LCAyMzkxMiwgMjM5MTgsIDIzOTIyLCAzNTI1LCAKKyAgICAyMzkzMCwgMjM5MzUsIDIzOTQwLCAyMzk0NCwgMjM5NDgsIDk5MjgsIDIzOTU1LCAyMzk2MywgMjM5NzcsIDIzOTg0LCAKKyAgICAyMzk5MCwgOTkzNywgOTk0MywgMjM5OTgsIDI0MDA2LCAyNDAxMywgMjQwMTgsIDI0MDIzLCAyMjI1OCwgMjQwMjksIAorICAgIDI0MDQwLCAyNDA0NCwgMjQwNDksIDI2MDEsIDI0MDU0LCAyNDA2NSwgMjQwNzEsIDI0MDc2LCAyNDA4MCwgMjQwODQsIAorICAgIDI0MDg3LCAyNDA5NCwgMjQxMDEsIDI0MTA4LCAyNDExNCwgMjQxMTgsIDIyMjYzLCAyNDEyMywgMjQxMjcsIDI0MTMxLCAKKyAgICAxMDM3LCAyNDEzNiwgMjQxNDEsIDI0MTQ2LCAyNDE1MSwgMjQxNTYsIDI0MTYxLCAyNDE2NiwgMjQxNzEsIDI0MTc2LCAKKyAgICAyNDE4MSwgMjQxODYsIDI0MTkxLCAyNDE5NiwgMjQyMDEsIDI0MjA3LCAyNDIxMiwgMjQyMTcsIDI0MjIyLCAyNDIyNywgCisgICAgMjQyMzIsIDI0MjM3LCAyNDI0MywgMjQyNDgsIDI0MjUzLCAyNDI1OCwgMjQyNjMsIDI0MjY4LCAyNDI3MywgMjQyNzgsIAorICAgIDI0Mjg0LCAyNDI5MCwgMjQyOTUsIDI0MzAxLCAyNDMwNiwgMjQzMTEsIDUsIDI0MzE3LCAyNDMyMSwgMjQzMjUsIDI0MzI5LCAKKyAgICAyNDMzNCwgMjQzMzgsIDI0MzQyLCAyNDM0NiwgMjQzNTAsIDI0MzU1LCAyNDM1OSwgMjQzNjQsIDI0MzY4LCAyNDM3MSwgCisgICAgMjQzNzUsIDI0MzgwLCAyNDM4NCwgMjQzODksIDI0MzkzLCAyNDM5NywgMjQ0MDEsIDI0NDA2LCAyNDQxMCwgMjQ0MTQsIAorICAgIDI0NDI0LCAyNDQyOSwgMjQ0MzMsIDI0NDM3LCAyNDQ0MiwgMjQ0NDcsIDI0NDU2LCAyNDQ2MSwgMjQ0NjYsIDI0NDcwLCAKKyAgICAyNDQ3NCwgMjQ0ODcsIDI0NDk5LCAyNDUwOCwgMjQ1MTcsIDI0NTIzLCAyNDUyOCwgMjQ1MzIsIDI0NTM2LCAyNDU0NiwgCisgICAgMjQ1NTUsIDI0NTYzLCAyNDU2OSwgMjQ1NzQsIDI0NTc4LCAyNDU4NSwgMjQ1OTUsIDI0NjA0LCAyNDYxMiwgMjQ2MjAsIAorICAgIDI0NjI3LCAyNDYzNSwgMjQ2NDQsIDI0NjUzLCAyNDY2MSwgMjQ2NjYsIDI0NjcwLCAyNDY3NCwgMjQ2NzcsIDI0Njc5LCAKKyAgICAyNDY4MywgMjQ2ODcsIDI0NjkyLCAyNDY5NywgMjQ3MDEsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE1LCAyNDcxOSwgCisgICAgMjQ3MjIsIDI0NzI1LCAyNDcyOSwgMjQ3MzUsIDI0NzM5LCAyNDc0MywgMjQ3NDcsIDI0NzUyLCAyNDc1NywgMjQ3NjIsIAorICAgIDI0NzY2LCAyNDc2OSwgMjQ3NzQsIDI0NzgwLCAyNDc4NSwgMjQ3OTEsIDI0Nzk2LCAyNDgwMCwgMjQ4MDQsIDI0ODA4LCAKKyAgICAyNDgxMywgMjQ4MTcsIDI0ODIyLCAyNDgyNiwgMjQ4MzAsIDI0ODM3LCAyNDg0MSwgMjQ4NDQsIDI0ODQ4LCAyNDg1NCwgCisgICAgMjQ4NjAsIDI0ODY0LCAyNDg2OCwgMjQ4NzMsIDI0ODgwLCAyNDg4NiwgMjQ4OTAsIDI0ODk5LCAyNDkwMywgMjQ5MDcsIAorICAgIDI0OTEwLCAyNDkxNiwgMjQ5MjEsIDI0OTI3LCAxNDg5LCAxNzkxLCAyNDkzMiwgMjQ5MzcsIDI0OTQyLCAyNDk0NywgCisgICAgMjQ5NTIsIDI0OTU3LCAyNDk2MiwgMjE0OCwgMjE5NCwgMjQ5NjcsIDI0OTcwLCAyNDk3NCwgMjQ5NzgsIDI0OTgzLCAKKyAgICAyNDk4NywgMjQ5OTEsIDI0OTk0LCAyNDk5OSwgMjUwMDQsIDI1MDA4LCAyNTAxMSwgMjUwMTYsIDI1MDIwLCAyNTAyNSwgCisgICAgMjUwMjksIDE0NzYyLCAyNTAzNCwgMjUwMzcsIDI1MDQwLCAyNTA0NCwgMjUwNDksIDI1MDUzLCAyNTA2NiwgMjUwNzAsIAorICAgIDI1MDczLCAyNTA4MSwgMjUwOTAsIDI1MDk3LCAyNTEwMiwgMjUxMDgsIDI1MTE0LCAyNTEyMiwgMjUxMjksIDI1MTM2LCAKKyAgICAyNTE0MCwgMjUxNDQsIDI1MTQ4LCAyNTE1MywgMjUxNTgsIDI1MTYyLCAyNTE3MCwgMjUxNzUsIDI1MTg3LCAyNTE5OCwgCisgICAgMjUyMDMsIDI1MjA3LCAyNTIxMSwgMjUyMTcsIDI1MjIyLCAyNTIyNywgMjUyMzEsIDI1MjM1LCAyNTIzOCwgMjUyNDQsIAorICAgIDc5MTUsIDIzMTYsIDI1MjQ4LCAyNTI1MywgMjUyNjksIDk0NzUsIDI1Mjg5LCAyNTI5OCwgMjUzMTQsIDI1MzE4LCAyNTMyMSwgCisgICAgMjUzMjcsIDI1MzM3LCAyNTM0MywgMjUzNTIsIDI1MzY3LCAyNTM3OSwgMjUzOTAsIDI1Mzk4LCAyNTQwNywgMjU0MTMsIAorICAgIDI1NDIyLCAyNTQzMiwgMjU0NDMsIDI1NDU0LCAyNTQ2MywgMjU0NzAsIDI1NDc5LCAyNTQ4NywgMjU0OTQsIDI1NTAyLCAKKyAgICAyNTUwOSwgMjU1MTYsIDI1NTI5LCAyNTUzNiwgMjU1NDIsIDI1NTQ3LCAyNTU1NiwgMjU1NjIsIDI1NTY3LCAyNTU3NSwgCisgICAgMjU1ODIsIDIzNDM2LCAyNTU5NCwgMjU2MDYsIDI1NjIwLCAyNTYyOCwgMjU2MzUsIDI1NjQ3LCAyNTY1NiwgMjU2NjUsIAorICAgIDI1NjczLCAyNTY4MSwgMjU2ODksIDI1Njk2LCAyNTcwNSwgMjU3MTMsIDI1NzIzLCAyNTczMiwgMjU3NDIsIDI1NzUxLCAKKyAgICAyNTc2MCwgMjU3NjgsIDI1NzczLCAyNTc3NywgMjU3ODAsIDI1Nzg0LCAyNTc4OCwgMjU3OTIsIDI1Nzk2LCAyNTgwMCwgCisgICAgMjU4MDYsIDI1ODEyLCAyNTgyMCwgMTQ4MDcsIDI1ODI3LCAyNTgzMiwgMjU4MzksIDI1ODQ1LCAyNTg1MiwgMTQ4MTUsIAorICAgIDI1ODU5LCAyNTg2MiwgMjU4NzQsIDI1ODgyLCAyNTg4OCwgMjU4OTMsIDI1ODk3LCA5ODc4LCAyNTkwOCwgMjU5MTgsIAorICAgIDI1OTI3LCAyNTkzNCwgMjU5MzgsIDE0ODIwLCAyNTk0MSwgMjU5NDgsIDI1OTUyLCAyNTk1OCwgMjU5NjEsIDI1OTY4LCAKKyAgICAyNTk3NCwgMjU5ODEsIDI1OTg3LCAyNTk5MSwgMjU5OTYsIDI2MDAwLCAyNjAwOSwgMjYwMTYsIDI2MDIyLCA3OTU2LCAKKyAgICAyNjAyOSwgMjYwMzcsIDI2MDQ0LCAyNjA1MCwgMjYwNTUsIDI2MDYxLCAyNjA2NywgMjYwNzUsIDI2MDc5LCAyNjA4MiwgCisgICAgMjYwODQsIDI1Nzg1LCAyNjA5MywgMjYwOTksIDI2MTA5LCAyNjExNCwgMjYxMjEsIDI2MTI3LCAyNjEzMiwgMjYxMzcsIAorICAgIDI2MTQyLCAyNjE0NiwgMjYxNTEsIDI2MTU4LCAyNjE2NywgMjYxNzEsIDI2MTc4LCAyNjE4NywgMjYxOTMsIDI2MTk4LCAKKyAgICAyNjIwNCwgMjYyMDksIDI2MjE2LCAyNjIyNywgMjYyMzIsIDI2MjM2LCAyNjI0NiwgMjYyNTIsIDI2MjU2LCAyNjI2MSwgCisgICAgMjYyNzEsIDI2MjgwLCAyNjI4NCwgMjYyOTEsIDI2Mjk5LCAyNjMwNiwgMjYzMTIsIDI2MzE3LCAyNjMyNSwgMjYzMzIsIAorICAgIDI2MzQ0LCAyNjM1MywgMjYzNTcsIDEzMDUzLCAyNjM2NSwgMjYzNzUsIDI2Mzc5LCAyNTA3NywgMjYzOTAsIDI2Mzk1LCAKKyAgICAyNjM5OSwgMjY0MDYsIDI2NDEzLCAyMTk3NCwgMjU3MTAsIDI2NDE4LCAyNjQyMiwgMjY0MjUsIDIyODcwLCAyNjQzMCwgCisgICAgMjY0NDQsIDI2NDYwLCAyNjQ3OCwgMjY0OTcsIDI2NTE0LCAyNjUzMiwgMjI4ODksIDI2NTQ5LCAyNjU2OSwgMjI5MDYsIAorICAgIDI2NTgxLCAyNjU5MywgMTU3NDUsIDI2NjA1LCAyMjkyNiwgMjY2MTksIDI2NjMxLCAxMDUzNiwgMjY2NDUsIDI2NjUwLCAKKyAgICAyNjY1NSwgMjY2NjAsIDI2NjY2LCAyNjY3MiwgMjY2NzgsIDI2NjgyLCAyNjY4OSwgMjY2OTQsIDI2NzA0LCAyNjcxMCwgCisgICAgMTAxODMsIDI2NzE2LCAyNjcxOCwgMjY3MjMsIDI2NzMxLCAyNjczNSwgMjYxNTQsIDI2NzQxLCAyNjc0OCwgMTE1MjQsIAorICAgIDExNTM0LCAyNjc1NSwgMjY3NjUsIDI2NzcwLCAyNjc3NCwgMjY3NzcsIDI2NzgzLCAyNjc5MSwgMjY4MDMsIDI2ODEzLCAKKyAgICAyNjgyOSwgMjY4NDIsIDI2ODU2LCAxNTc2MywgMjY4NzAsIDI2ODc3LCAyNjg4MSwgMjY4ODQsIDI2ODg5LCAyNjg5MywgCisgICAgMjY5MDAsIDI2OTA3LCAyNjkxNywgMjY5MjIsIDI2OTI3LCAyNjkzMiwgMjY5NDAsIDI2OTQ4LCAyNjk1NywgMjY5NjIsIAorICAgIDk1NzIsIDI2OTY2LCAyNjk2OSwgMjY5NzIsIDI2OTc3LCAyNjk4NCwgMjY5ODksIDI3MDA1LCAyNzAxMywgMjcwMjEsIAorICAgIDk0MjMsIDI3MDI5LCAyNzAzNCwgMjcwMzgsIDI3MDQ0LCAyNzA1MCwgMjcwNTMsIDI3MDU5LCAyNzA3MSwgMjcwNzksIAorICAgIDI3MDg2LCAyNzA5MiwgMjcwOTksIDI3MTEwLCAyNzEyNCwgMjcxMzcsIDI3MTQ2LCAyNzE1NSwgMjcxNjcsIDI3MTc4LCAKKyAgICAyNzE4OCwgMjcxOTcsIDI3MjA2LCAyNzIxNCwgMjcyMjUsIDc5MzgsIDI3MjMyLCAyNzIzOCwgMjcyNDMsIDI3MjQ5LCAKKyAgICAyNzI1NiwgMjcyNjYsIDI3Mjc2LCAyNzI4NSwgMjcyOTEsIDI3Mjk4LCAyNzMwMywgMjczMTAsIDI3MzE4LCAyNzMyNiwgCisgICAgMjczMzgsIDYyNDYsIDI3MzQ1LCAyNzM1NCwgMjczNjIsIDI3MzY4LCAyNzM3NCwgMjczNzksIDI3MzgzLCAyNzM4NiwgCisgICAgMjczOTIsIDI3Mzk5LCAyNzQwNCwgMjc0MDksIDI3NDEzLCAyNzQyNSwgMjc0MzYsIDI3NDQ1LCAyNzQ1MywgMTQ5NDcsIAorICAgIDI3NDU4LCAyNzQ2NCwgMjc0NzAsIDExNTE3LCA4NjM1LCAyNzQ3NSwgMjc0NzksIDI3NDgzLCAyNzQ4NiwgMjc0ODksIAorICAgIDI3NDk1LCAyNzUwMywgMjc1MTEsIDI3NTE1LCAyNzUxOSwgMjc1MjQsIDI3NTI3LCAyNzUzNiwgMjc1NDAsIDI3NTQ4LCAKKyAgICAyNzU1OSwgMjc1NjMsIDI3NTY5LCAyNzU3NSwgMjc1NzksIDI3NTg1LCAyNzU5MywgMjc2MTUsIDI3NjM5LCAyNzY0NiwgCisgICAgMjc2NTMsIDI3NjU5LCAyNzY2NywgMjc2NzMsIDI3Njc4LCAyNzY4OSwgMjc3MDcsIDI3NzE0LCAyNzcyMiwgMjc3MjYsIAorICAgIDI3NzM1LCAyNzc0OCwgMjc3NTYsIDI3NzY4LCAyNzc3OSwgMjc3ODksIDI3ODAzLCAyNzgxMiwgMjc4MjAsIDI3ODMyLCAKKyAgICA5NDkyLCAyNzg0MywgMjc4NTQsIDI3ODY2LCAyNzg3NiwgMjc4ODUsIDI3ODkwLCAyNzg5NCwgMjc5MDIsIDI3OTEyLCAKKyAgICAyNzkxNywgMjc5MjEsIDI3OTI0LCAyNzkyNywgMjc5MzUsIDI3OTQzLCAyNzk1MiwgMjc5NjIsIDI3OTcxLCAyNzk3NywgCisgICAgMjc5OTEsIDI2NjMsIDI4MDEzLCAyODAyNCwgMjgwMzMsIDI4MDQzLCAyODA1NSwgMjgwNjQsIDI4MDczLCAyODA4MywgCisgICAgMjgwOTEsIDI4MDk5LCAyODEwOCwgMjgxMTMsIDI4MTI0LCAyODEyOSwgMjgxNDAsIDI4MTQ0LCAyODE1NCwgMjgxNjMsIAorICAgIDI4MTcxLCAyODE4MSwgMjgxOTEsIDI4MTk5LCAyODIwOCwgMjgyMTUsIDI4MjIzLCAyODIzMCwgMjgyMzksIDI4MjQzLCAKKyAgICAyODI1MSwgMjgyNTgsIDI4MjY2LCAyODI3MywgMjgyODQsIDI4Mjk5LCAyODMwNiwgMjgzMTIsIDI4MzIyLCAyODMzMSwgCisgICAgMjgzMzcsIDI4MzQxLCAyODM0OCwgMjgzNTIsIDE0MDMxLCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3NCwgMjgzNzgsIAorICAgIDI4MzgyLCAyODM5MCwgMjgzOTgsIDI4NDA0LCAyODQxMywgMjg0MjAsIDI4NDI1LCAyODQzMCwgMjg0NDAsIDIzNTA1LCAKKyAgICAyODQ0NCwgMjg0NDcsIDI4NDUyLCAyODQ1NywgMjg0NjIsIDI4NDY3LCAyODQ3MiwgMjg0NzcsIDI4NDgyLCAyODQ4NywgCisgICAgMjg0OTMsIDI4NDk4LCAyODUwMywgMjg1MDksIDEyMTgsIDcwNCwgMjg1MTQsIDI4NTIzLCAyMzY0LCAyODUzMCwgMjg1MzUsIAorICAgIDI4NTM5LCAyODU0NSwgMTI2NywgNTQ2LCAzMTgsIDI4NTUwLCAyODU1OSwgMjg1NjcsIDI4NTc2LCAyODU4NCwgMjg1OTUsIAorICAgIDI4NjA0LCAyODYxMiwgMjg2MTYsIDI4NjE5LCAyODYyNywgMjg2MzUsIDI4NjQwLCAxNDc3NSwgMjg2NDYsIDI4NjUyLCAKKyAgICAyODY1OCwgNTg3MiwgMjg2NjMsIDI4NjY3LCAyODY3MywgMjg2NzcsIDI4Njg0LCAxNDU1LCAyODY5MCwgMjg2OTcsIDk1NzksIAorICAgIDI4NzAxLCAyODcxMSwgMjg3MTksIDI4NzI1LCAyODczNCwgMjg3NDIsIDI4NzQ4LCAyODc1NiwgMjg3NjMsIDExMTEwLCAKKyAgICAyODc2OSwgMjg3NzYsIDI4NzgxLCAyODc4OCwgMTQ5NiwgMjE0NywgMjg3OTQsIDI4ODAwLCAyODgwNywgMjg4MTgsIAorICAgIDI4ODI5LCAyODgzNywgMjg4NDQsIDI4ODU0LCAyODg2MywgMjg4NzEsIDI4ODgwLCAyODg4NywgMjg4OTQsIDI4OTA3LCAKKyAgICAyODkxOCwgMTI3MiwgMjg5MzcsIDI4OTQyLCAyODk1MCwgMzU3NSwgMjg5NTQsIDI4OTU5LCAyODk2MywgMTQ1OSwgMjQ3MDYsIAorICAgIDI4OTczLCAyODk3NywgMjg5ODIsIDI4OTg2LCAzNDkzLCAyODk5MiwgMjkwMDAsIDI5MDA3LCAyOTAxOCwgMjkwMjYsIAorICAgIDI5MDM0LCAzNTc2LCAyNzksIDI5MDM5LCAyOTA0NywgMjkwNTUsIDI5MDYyLCAyOTA2OCwgMjkwNzMsIDIyMTYsIDI5MDgwLCAKKyAgICAyOTA4NiwgMjU5OTIsIDI2MjIyLCAyOTA5MiwgMTA2LCAyOTA5NiwgMjkxMDAsIDI5MTA2LCA2MTUsIDkzMjgsIDI5MTExLCAKKyAgICAyOTExOCwgMjkxMjQsIDIzMjcsIDI5MTI4LCAyOTEzMiwgMTUxODcsIDI5MTM1LCAyOTE0MCwgMjkxNDcsIDI5MTUzLCAKKyAgICAyOTE1OCwgMjkxNjYsIDI5MTczLCAyOTE3OSwgMjIzNTEsIDI5MTgzLCAyOTE4NywgMzY0NiwgMTY2MjUsIDI5MTkxLCAKKyAgICAyOTE5NiwgMjkxOTksIDI5MjA3LCAyOTIxNSwgMjkyMjAsIDI5MjIzLCAyOTIzMCwgMjkyNDAsIDI5MjUyLCAyOTI1NywgCisgICAgMjkyNjEsIDI5MjY5LCAyOTI3NiwgMjkyODIsIDI5Mjg5LCAyOTI5NiwgMjkyOTksIDI5MzAzLCAyOTMwNywgMTQ2MywgCisgICAgMjkzMTcsIDI5MzE5LCAyOTMyNCwgMjkzMzAsIDI5MzM2LCAyOTM0MSwgMjkzNDYsIDI5MzUxLCAyOTM1NiwgMjkzNjEsIAorICAgIDI5MzY2LCAyOTM3MSwgMjkzNzYsIDI5MzgxLCAyOTM4NiwgMjkzOTEsIDI5Mzk2LCAyOTQwMSwgMjk0MDYsIDI5NDEyLCAKKyAgICAyOTQxOCwgMjk0MjQsIDI5NDMwLCAyOTQzNSwgMjk0NDAsIDI5NDQ1LCAyOTQ1MSwgMjk0NTYsIDI5NDYxLCAyOTQ2NiwgCisgICAgMjk0NzIsIDI5NDc3LCAyOTQ4MywgMjk0ODgsIDI5NDkzLCAyOTQ5OCwgMjk1MDMsIDI5NTA5LCAyOTUxNCwgMjk1MjAsIAorICAgIDI5NTI1LCAyOTUzMCwgMjk1MzUsIDI5NTQwLCAyOTU0NiwgMjk1NTEsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAKKyAgICAyOTU3NywgMjk1ODIsIDI5NTg3LCAyOTU5MiwgMjk1OTcsIDI5NjAyLCAyOTYwOCwgMjk2MTQsIDI5NjIwLCAyOTYyNSwgCisgICAgMjk2MzAsIDI5NjM1LCAyOTY0MCwgMjk2NDYsIDI5NjUyLCAyOTY1OCwgMjk2NjQsIDI5NjcwLCAyOTY3NiwgMjk2ODEsIAorICAgIDI5Njg3LCAyOTY5MiwgMjk2OTcsIDI5NzAyLCAyOTcwNywgMjk3MTMsIDI0NDMsIDI5NzE4LCAyNDUwLCAyNDU3LCAyNzU0LCAKKyAgICAyOTcyMywgMjQ2MywgMjQ3MywgMjk3MjksIDI5NzMzLCAyOTczOCwgMjk3NDMsIDI5NzQ5LCAyOTc1NCwgMjk3NTksIAorICAgIDI5NzYzLCAyOTc2OCwgMjk3NzQsIDI5Nzc5LCAyOTc4NCwgMjk3ODksIDI5Nzk1LCAyOTgwMCwgMjk4MDQsIDI5ODA4LCAKKyAgICAyOTgxMywgMjk4MTgsIDI5ODIzLCAyOTgyOCwgMjk4MzMsIDI5ODM5LCAyOTg0NSwgMjk4NTAsIDI5ODU0LCAyOTg1OSwgCisgICAgMjk4NjUsIDI5ODY5LCAyOTg3NCwgMjk4NzksIDI5ODg0LCAyOTg4OSwgMjk4OTMsIDI5ODk2LCAyOTkwMSwgMjk5MDYsIAorICAgIDI5OTExLCAyOTkxNiwgMjk5MjEsIDI5OTI3LCAyOTkzMywgMjk5MzgsIDI5OTQzLCAyOTk0NywgMjk5NTIsIDI5OTU3LCAKKyAgICAyOTk2MiwgMjk5NjcsIDI5OTcyLCAyOTk3NiwgMjk5ODEsIDI5OTg2LCAyOTk5MSwgMjk5OTUsIDI5OTk5LCAzMDAwMywgCisgICAgMzAwMDgsIDMwMDE2LCAzMDAyMSwgMzAwMjcsIDMwMDMzLCAzMDAzOSwgMzAwNDQsIDMwMDQ4LCAzMDA1MSwgMzAwNTYsIAorICAgIDMwMDYxLCAzMDA2NSwgMzAwNzAsIDMwMDc0LCAzMDA3OSwgMzAwODMsIDMwMDg2LCAzMDA5MSwgMTczMDIsIDMwMDk2LCAKKyAgICAzMDEwMSwgMzAxMDYsIDMwMTE0LCAyMTI4MCwgMjg2OTQsIDkwMjYsIDMwMTE5LCAzMDEyNCwgMzAxMjgsIDMwMTMzLCAKKyAgICAzMDEzNywgMzAxNDEsIDMwMTQ2LCAzMDE1MCwgMzAxNTMsIDMwMTU2LCAzMDE2MCwgMzAxNjUsIDMwMTY5LCAzMDE3NywgCisgICAgMzAxODEsIDMwMTg0LCAzMDE4OSwgMzAxOTMsIDMwMTk3LCAzMDIwMiwgMzAyMDcsIDMwMjExLCAzMDIxNywgMzAyMjIsIAorICAgIDMwMjI3LCAzMDIzNCwgMzAyNDEsIDMwMjQ1LCAzMDI0OCwgMzAyNTQsIDMwMjYzLCAzMDI3MCwgMzAyNzgsIDMwMjg1LCAKKyAgICAzMDI4OSwgMzAyOTQsIDMwMjk4LCAzMDMwMiwgMzAzMDgsIDMwMzE0LCAzMDMxOCwgMzAzMjQsIDMwMzI5LCAzMDMzNCwgCisgICAgMzAzMzgsIDMwMzQ1LCAzMDM1MSwgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzYsIDMwMzgyLCAzMDM4OCwgMzAzOTQsIAorICAgIDMwNDAwLCAzMDQwNiwgMzA0MTIsIDMwNDE4LCAzMDQyNSwgMzA0MzEsIDMwNDM4LCAzMDQ0NCwgMzA0NTAsIDMwNDU2LCAKKyAgICAzMDQ2MiwgMzA0NjgsIDMwNDc0LCAzMDQ4MCwgMzA0ODYsIDMwNDkyLCAxMTQxOCwgMzA0OTgsIDMwNTAzLCAzMDUwOCwgCisgICAgMzA1MTEsIDMwNTE5LCAzMDUyNCwgMzA1MzMsIDMwNTM5LCAzMDU0NCwgMzA1NDksIDMwNTU0LCAzMDU1OCwgMzA1NjMsIAorICAgIDMwNTY4LCAzMDU3MywgMzA1NzgsIDMwNTgzLCAzMDU5MCwgMzA1OTcsIDMwNjAzLCAzMDYwOSwgMzA2MTQsIDE2MzAzLCAKKyAgICAzMDYyMSwgMzA2MjcsIDMwNjM0LCAzMDY0MCwgMzA2NDYsIDMwNjUxLCAzMDY1OSwgMzA2NjQsIDE2MDgyLCAzMDY2OCwgCisgICAgMzA2NzMsIDMwNjc4LCAzMDY4NCwgMzA2ODksIDMwNjk0LCAzMDY5OCwgMzA3MDMsIDMwNzA4LCAzMDcxNCwgMzA3MTksIAorICAgIDMwNzI0LCAzMDcyOCwgMzA3MzMsIDMwNzM4LCAzMDc0MiwgMzA3NDcsIDMwNzUyLCAzMDc1NywgMzA3NjEsIDMwNzY2LCAKKyAgICAzMDc3MSwgMzA3NzYsIDMwNzgwLCAzMDc4NCwgMTUyOTMsIDMwNzg4LCAzMDc5NywgMzA4MDMsIDMwODA5LCAzMDgxOCwgCisgICAgMzA4MjYsIDMwODM1LCAzMDg0MywgMzA4NDgsIDMwODUyLCAzMDg1OSwgMzA4NjUsIDMwODY5LCAzMDg3MiwgMzA4NzcsIAorICAgIDMwODg2LCAzMDg5NCwgMzA4OTksIDE0OTUsIDMwOTA1LCAzMDkwOCwgMzA5MTIsIDIyNDI0LCAyMjQzMCwgMzA5MTgsIAorICAgIDMwOTIyLCAzMDkzMywgMzA5NDQsIDMwOTU1LCAzMDk2NywgMzA5NzQsIDMwOTgxLCAzMDk4NiwgMzA5OTAsIDU5MDksIDc1NSwgCisgICAgMjEyNzksIDMwOTk4LCAzMTAwMywgMzEwMDcsIDMxMDEyLCAzMTAxNiwgMzEwMjIsIDMxMDI3LCAzMTAzMywgMzEwMzgsIAorICAgIDMxMDQ0LCAzMTA0OSwgMzEwNTUsIDMxMDYwLCAzMTA2NiwgMzEwNzIsIDMxMDc4LCAzMTA4MywgMzEwMzksIDMxMDQ1LCAKKyAgICAzMTA4NywgMzEwOTIsIDMxMDk4LCAzMTEwMywgMzExMDksIDMxMTE0LCAzMTEyMCwgMzExMjUsIDMxMDUwLCAxMDQyMSwgCisgICAgMzExMjksIDMxMDYxLCAzMTA2NywgMzEwNzMsIDI4MzEsIDM0MjMsIDMxMTM1LCAzMTEzOCwgMzExNDQsIDMxMTUwLCAKKyAgICAzMTE1NiwgMzExNjMsIDMxMTY5LCAzMTE3NSwgMzExODEsIDMxMTg3LCAzMTE5MywgMzExOTksIDMxMjA1LCAzMTIxMSwgCisgICAgMzEyMTcsIDMxMjIzLCAzMTIyOSwgMzEyMzUsIDMxMjQyLCAzMTI0OCwgMzEyNTQsIDMxMjYwLCAzMTI2NiwgMzEyNzIsIAorICAgIDMxMjc1LCAzMTI4MCwgMzEyODMsIDMxMjkwLCAzMTI5OCwgMzEzMDMsIDMxMzA4LCAzMTMxNCwgMzEzMTksIDMxMzI0LCAKKyAgICAzMTMyOCwgMzEzMzMsIDMxMzM5LCAzMTM0NCwgMzEzNTAsIDMxMzU1LCAzMTM2MSwgMzEzNjYsIDMxMzcyLCAzMTM3OCwgCisgICAgMzEzODIsIDMxMzg3LCAzMTM5MiwgMzEzOTcsIDMxNDAyLCAzMTQwNiwgMzE0MTEsIDMxNDE2LCAzMTQyMSwgMzE0MjcsIAorICAgIDMxNDMzLCAzMTQzOSwgMzE0NDUsIDMxNDUwLCAzMTQ1NCwgMzE0NTcsIDMxNDYzLCAzMTQ2OSwgMzE0NzgsIDMxNDg2LCAKKyAgICAzMTQ5MywgMzE0OTgsIDMxNTAyLCAzMTUwNiwgMzE1MTEsIDE1MTQ2LCAzMTUxNiwgMzE1MjQsIDMxNTMwLCAzNjgzLCAKKyAgICAxMzc3LCAzMTUzNSwgMzE1MzksIDgwMDUsIDMxNTQ1LCAzMTU1MSwgMzE1NTgsIDgwMTQsIDMxNTYyLCAzMTU2OCwgMzE1NzUsIAorICAgIDMxNTgxLCAzMTU5MCwgMzE1OTgsIDMxNjEwLCAzMTYxNCwgMzE2MjEsIDMxNjI3LCAzMTYzMSwgMzE2MzQsIDMxNjQzLCAKKyAgICAzMTY1MSwgMzEwNDAsIDMxNjU2LCAzMTY2NiwgMzE2NzYsIDMxNjg2LCAzMTY5MiwgMzE2OTcsIDMxNzA3LCAzMTcxMiwgCisgICAgMzE3MjUsIDMxNzM5LCAzMTc1MCwgMzE3NjIsIDMxNzc0LCAzMTc4OCwgMzE4MDEsIDMxODEzLCAzMTgyNSwgMTQ2MDAsIAorICAgIDMxODM5LCAzMTg0NCwgMzE4NDksIDMxODUzLCAzMTg1NywgMzE4NjEsIDE3ODAsIDI3MTc2LCAzMTg2NSwgMzE4NzAsIAorICAgIDMxMDg4LCAzMTg3NSwgMzE4NzgsIDMxODgzLCAzMTg4OCwgMzE4OTMsIDMxODk5LCAzMTkwNSwgMTAwOTgsIDMxOTEwLCAKKyAgICAzMTkxNywgMTU2OTcsIDMxOTIzLCAzMTkyOCwgMzE5MzMsIDMxOTM3LCAzMTk0MiwgMzE5NDcsIDMxMDkzLCAzMTk1MiwgCisgICAgMzE5NTcsIDMxOTYyLCAzMTk2OCwgMzEwOTksIDMxOTczLCAzMTk3NiwgMzE5ODMsIDMxOTkxLCAzMTk5NywgMzIwMDMsIAorICAgIDMyMDA5LCAzMjAyMCwgMzIwMjUsIDMyMDMyLCAzMjAzOSwgMzIwNDYsIDMyMDU0LCAzMjA2MywgMzIwNzIsIDMyMDc4LCAKKyAgICAzMjA4NCwgMzIwOTIsIDMxMTA0LCAzMjA5NywgMzIxMDMsIDMyMTA5LCAzMTExMCwgMzIxMTQsIDMyMTE5LCAzMjEyNywgCisgICAgMzIxMzUsIDMyMTQxLCAzMjE0OCwgMzIxNTQsIDMyMTYxLCAzMjE2OCwgMzIxNzQsIDMyMTgyLCAzMjE5MiwgMzIxOTksIAorICAgIDMyMjA0LCAzMjIxMCwgMzIyMTUsIDMyMjIwLCAzMjIyNywgMzIyMzYsIDMyMjQ0LCAzMjI0OSwgMzIyNTUsIDMyMjYyLCAKKyAgICAzMjI3MCwgMzIyNzYsIDMyMjgxLCAzMjI4NywgMzIyOTYsIDI3OTU3LCAzMjMwMywgMzIzMDcsIDMyMzEyLCAzMjMyMSwgCisgICAgMzIzMjYsIDMyMzMxLCAzMjMzNiwgMTI0MDUsIDMyMzQ0LCAzMjM0OSwgMzIzNTQsIDMyMzU5LCAzMjM2MywgMzIzNjgsIAorICAgIDMyMzczLCAzMjM4MCwgMzIzODUsIDMyMzkwLCAzMjM5NSwgMzExMTUsIDIxMjE2LCAzMjQwMSwgMjUxOSwgMjQ0LCAzMjQwNCwgCisgICAgMzI0MDcsIDMyNDExLCAzMjQxNSwgMzI0MjUsIDMyNDMzLCAzMjQzNywgMzI0NDQsIDMyNDUxLCAzMjQ1NSwgMzI0NTgsIAorICAgIDMyNDY0LCAzMjQ3MiwgMzI0ODAsIDMyNDg0LCAzMjQ4OCwgMzI0OTEsIDMyNDk4LCAzMjUwMiwgMzI1MDYsIDMyNTEzLCAKKyAgICAzMjUyMSwgMzEwNTEsIDMyNTI4LCAzMjUzNiwgMTAxNTgsIDY2NCwgMzA4LCAzMjU0OCwgMzI1NTMsIDMyNTU4LCAzMjU2NCwgCisgICAgMzI1NjksIDMyNTc0LCAzNzA0LCAzMjU3OSwgMzI1ODIsIDMyNTg3LCAzMjU5MiwgMzI1OTcsIDMyNjAyLCAzMjYwNywgCisgICAgMzI2MTQsIDIyNTI5LCAzMjYxOSwgMzI2MjQsIDMyNjI5LCAzMjYzNCwgMzI2MzksIDMyNjQ1LCAzMjY1MCwgMzI2NTYsIAorICAgIDMxMjg2LCAzMjY2MiwgMzI2NjcsIDMyNjczLCAzMjY3OSwgMzI2ODksIDMyNjk0LCAzMjY5OSwgMzI3MDMsIDMyNzA4LCAKKyAgICAzMjcxMywgMzI3MTgsIDMyNzIzLCAzMjczNiwgMzI3NDEsIDIyMzAyLCAxNjcwNSwgMzcxMCwgMzI3NDUsIDMyNzUwLCAKKyAgICAzMjc1NSwgMzI3NjEsIDMyNzY2LCAzMjc3MSwgMzI3NzUsIDMyNzgwLCAzMjc4NSwgMzI3OTEsIDMyNzk2LCAzMjgwMSwgCisgICAgMTM4MiwgMzI4MDUsIDMyODEwLCAzMjgxNSwgMzI4MjAsIDMyODI0LCAzMjgyOSwgMzI4MzQsIDMyODM5LCAzMjg0NSwgCisgICAgMzI4NTEsIDMyODU2LCAzMjg2MCwgMzI4NjQsIDMyODY5LCAzMjg3NCwgMzI4NzksIDMyODgzLCAzMjg5MSwgMzI4OTUsIAorICAgIDMyOTAxLCAzMjkwNSwgMzI5MTIsIDE2NDk4LCAzMTA2MiwgMzI5MTgsIDMyOTI1LCAzMjkzMywgMzI5NDAsIDMyOTQ2LCAKKyAgICAzMjk1OSwgMzI5NzEsIDMyOTc3LCAzMjk4MSwgMjc3MywgMzI5ODUsIDMyOTg5LCAzMjQ5MywgMzI5OTgsIDMzMDA5LCAKKyAgICAzMzAxNCwgMzMwMTksIDMzMDI0LCAzMzAyOCwgMzMwMzMsIDIyNDM1LCAzMzAzNywgMzMwNDEsIDMzMDQ2LCAzMTA2OCwgCisgICAgMjEzMDAsIDMzMDUwLCAzMzA1NSwgMzMwNjEsIDMzMDY2LCAzMzA3MCwgMzMwNzQsIDMzMDc3LCAzMzA4MSwgMzMwODcsIAorICAgIDMzMDk4LCAzMzExMCwgMzEwNzQsIDMzMTE1LCAzMzExOCwgMzMxMjIsIDM0NywgMzMxMjcsIDMzMTMyLCAzMzEzNywgCisgICAgMzMxNDIsIDMzMTQ3LCAzMzE1MiwgMzMxNTgsIDMzMTYzLCAzMzE2OCwgMzMxNzQsIDMzMTc5LCAzMzE4NSwgMzMxOTAsIAorICAgIDMzMTk2LCAzMzIwMSwgMzMyMDYsIDMzMjExLCAzMzIxNiwgMzMyMjEsIDMzMjI2LCAzMzIzMSwgMzMyMzYsIDMzMjQyLCAKKyAgICAzMzI0NywgMzMyNTIsIDMzMjU3LCAzMzI2MiwgMzMyNjcsIDMzMjcyLCAzMzI3NywgMzMyODMsIDMzMjg5LCAzMzI5NCwgCisgICAgMzMyOTksIDMzMzA0LCAzMzMwOSwgMzMzMTQsIDMzMzE5LCAzMzMyNCwgMzMzMjksIDMzMzM0LCAzMzMzOSwgMzMzNDQsIAorICAgIDMzMzQ5LCAzMzM1NCwgMzMzNTksIDMzMzY0LCAzMzM2OSwgMzMzNzQsIDMzMzc5LCAzMzM4NSwgMzEzLCAyNiwgMzMzOTAsIAorICAgIDMzMzk0LCAzMzM5OCwgMzM0MDYsIDMzNDEwLCAzMzQxNCwgMzM0MTcsIDMzNDIwLCAzMzQyMiwgMzM0MjcsIDMzNDMxLCAKKyAgICAzMzQzNiwgMzM0NDAsIDMzNDQ1LCAzMzQ0OSwgMzM0NTQsIDMzNDU4LCAzMzQ2MSwgMzM0NjMsIDMzNDY3LCAzMzQ3MiwgCisgICAgMzM0NzYsIDMzNDg3LCAzMzQ5MCwgMzM0OTIsIDMzNDk2LCAzMzUwOCwgMzM1MTcsIDMzNTIxLCAzMzUyNSwgMzM1MzEsIAorICAgIDMzNTM2LCAzMzU0NSwgMzM1NTEsIDMzNTU2LCAzMzU2MSwgMzM1NjUsIDMzNTcwLCAzMzU3NywgMzM1ODIsIDMzNTg4LCAKKyAgICAzMzU5MywgMzM1OTcsIDMzNjA0LCAyNTcxOCwgMjU3MjgsIDMzNjA4LCAzMzYxMywgMzM2MTgsIDMzNjIzLCAzMzYzMCwgCisgICAgMzM2MzQsIDMzNjQxLCA4MTEzLCAzMzY0NywgMzM2NTYsIDMzNjY0LCAzMzY3OSwgMzM2OTMsIDMzNzAxLCAzMzcxMiwgCisgICAgMzM3MjEsIDMzNzI2LCA3MjI3LCAzMzczNiwgMzM3NDEsIDMzNzQ2LCAzMzc1MCwgMzM3NTMsIDMzNzU3LCAzMzc2MiwgCisgICAgMzM3NjYsIDMzNzczLCAzMzc3OCwgMzM3ODMsIDg5MTIsIDMzNzkzLCAzMzc5NSwgMzM3OTgsIDMzODAyLCAzMzgwOCwgCisgICAgMzM4MTIsIDMzODE3LCAzMzgyMiwgMzM4MjgsIDMzODMzLCAzMzgzOSwgMzM4NDQsIDMzODU0LCAzMzg2MywgMzM4NzEsIAorICAgIDMzODc2LCAzMzg4MiwgMzM4ODcsIDMzODk0LCAzMzg5OCwgMzM5MDYsIDMzOTEzLCAzMzkyNiwgMzM5MzQsIDMzOTM4LCAKKyAgICAzMzk0OCwgMzM5NTMsIDMzOTU3LCAzMzk2NSwgMzM5NzMsIDMzOTc3LCAzMzk4NiwgMzM5OTIsIDMzOTk3LCAzNDAwNSwgCisgICAgMzQwMTUsIDM0MDI0LCAzNDAzMywgMzQwNDIsIDM0MDUzLCAzNDA2MSwgMzQwNzIsIDM0MDgxLCAzNDA4OCwgMzQwOTQsIAorICAgIDM0MDk5LCAzNDExMCwgMzQxMTUsIDM0MTE5LCAzNDEyMiwgMzQxMjYsIDM0MTM0LCAzNDE0MCwgMzQxNDgsIDM0MTU1LCAKKyAgICAzNDE2MSwgMzQxNjYsIDM0MTcyLCAyNDE4LCAzNDE3NiwgMzQxNzgsIDM0MTgzLCAzNDE4OCwgMzQxOTMsIDM0MTk2LCAKKyAgICAzNDE5OCwgMzQyMDIsIDM0MjA1LCAzNDIxMiwgMzQyMTYsIDk4OTEsIDM0MjIwLCAzNDIyNiwgMzQyMzYsIDM0MjQxLCAKKyAgICAzNDI0NywgMzQyNTEsIDM0MjU2LCAzNDI2OSwgMjYxMDQsIDM0Mjc1LCAzNDI4NCwgMTc0NzUsIDM0MjkxLCAzNDMwMCwgCisgICAgMzE2NzIsIDM0MzA4LCAzNDMxMywgMzQzMTcsIDM0MzI1LCAzNDMzMiwgMzQzMzcsIDM0MzQxLCAzNDM0NiwgMzQzNTAsIAorICAgIDM0MzU4LCAzNDM2NCwgMzQzNzAsIDM0Mzc1LCAzNDM3OSwgMzQzODIsIDM0Mzg3LCAzNDQwMCwgMzQ0MTYsIDIyOTk2LCAKKyAgICAzNDQzMywgMzQ0NDUsIDM0NDYyLCAzNDQ3NCwgMzQ0ODgsIDIzMDEzLCAyMzAzMiwgMzQ1MDAsIDM0NTEyLCAyNjgwLCAKKyAgICAzNDUyNiwgMzQ1MzEsIDM0NTM2LCAzNDU0MSwgMzQ1NDUsIDM0NTUyLCAzNDU2NCwgMzQ1NzAsIDM0NTczLCAzNDU4NCwgCisgICAgMzQ1OTUsIDM0NjAwLCAzMjA4OSwgNjk1LCAzNDYwNCwgMzQ2MDgsIDM0NjEyLCAzNDYxNSwgMzQ2MjAsIDM0NjI1LCAKKyAgICAzNDYzMSwgMzQ2MzYsIDM0NjQxLCAzNDY0NywgMzQ2NTMsIDM0NjU4LCAzNDY2MiwgMzQ2NjcsIDM0NjcyLCAzNDY3NywgCisgICAgMzQ2ODEsIDM0Njg0LCAzNDY5MCwgMzQ2OTUsIDM0NzAwLCAzNDcwNSwgMzQ3MDksIDM0NzE0LCAzNDcyMCwgMzQ3MjgsIAorICAgIDI2MzM3LCAzNDczMywgMzQ3MzgsIDM0NzQ1LCAzNDc1MSwgMzQ3NTcsIDM0NzYyLCAzNDc3MCwgMjI1MzgsIDM0Nzc3LCAKKyAgICAzNDc4MiwgMzQ3ODcsIDM0NzkyLCAzNDc5NiwgMzQ3OTksIDM0ODA0LCAzNDgwOCwgMzQ4MTIsIDM0ODE5LCAzNDgyNSwgCisgICAgMzQ4MzEsIDM0ODM3LCAzNDg0NCwgMzQ4NDksIDM0ODU1LCAzMzk2OCwgMzQ4NTksIDM0ODYzLCAzNDg2OCwgMzQ4ODEsIAorICAgIDM0ODg2LCAzNDg5MiwgMzQ5MDAsIDM0OTA3LCAzNDkxNSwgMzQ5MjUsIDM0OTMxLCAzNDkzNywgMzQ5NDMsIDM0OTQ3LCAKKyAgICAzNDk1NiwgMzQ5NjQsIDM0OTcxLCAzNDk3NiwgMzQ5ODEsIDEwNDQ0LCAzNDk4NiwgMzQ5OTQsIDM1MDAxLCAzNTAwNywgCisgICAgMzUwMTcsIDM1MDIyLCAzNTAyOCwgMzUwMzYsIDM2MDgsIDM1MDQzLCAzNTA1MCwgMzYxNCwgMzUwNTQsIDM1MDU5LCAKKyAgICAzNTA3MCwgMzUwNzcsIDM1MDgzLCAzNTA5MiwgMzUwOTYsIDQwMTUsIDM1MDk5LCAzNTEwNiwgMzUxMTIsIDM1MTE4LCAKKyAgICAzNTEyNiwgMzUxMzYsIDI5MDYzLCAzNTE0MywgMzUxNTEsIDM1MTU2LCAzNTE2MiwgMzUxNjcsIDI1OTY0LCAzNTE3MywgCisgICAgMzUxODAsIDM1MTg2LCAzNTE5NSwgMjM2NzcsIDM1MjAyLCAzNTIwNywgMzUyMTEsIDM1MjE5LCAzNTIyNywgOTYwNywgCisgICAgNTg5NSwgMzUyMzQsIDM1MjM4LCAzNTI0MCwgMzUyNDQsIDM1MjQ5LCAzNTI1MSwgMzUyNTcsIDM1MjYyLCAzNTI2NywgCisgICAgMzUyNzQsIDMyNjEwLCAzNTI4MCwgMzUyODUsIDM1Mjg5LCAzNTI5NCwgMzUyOTgsIDM1MzA3LCAzNTMxMSwgMzUzMTcsIAorICAgIDM1MzI0LCAzNTMzMCwgMzUzMzcsIDM1MzQyLCAzNTM1MSwgMzUzNTYsIDM1MzYwLCAzNTM2NSwgMzUzNzIsIDM1MzgwLCAKKyAgICAzNTM4OCwgMzUzOTMsIDIxMzU2LCAzNTM5NywgMzU0MDAsIDM1NDA0LCAzNTQwOCwgMzU0MTIsIDM1NDE1LCAzNTQxNywgCisgICAgMzU0MjUsIDM1NDI5LCAzNTQzNiwgMzU0NDAsIDM1NDQ0LCAzNTQ1MiwgMzU0NTksIDM1NDY5LCAzNTQ3MywgMzU0NzcsIAorICAgIDM1NDg1LCAzNTQ5MywgMzU0OTksIDM1NTA0LCAzNTUxMywgMTMzNTcsIDM1NTE5LCAzNTUyOCwgMzU1MzMsIDM1NTQwLCAKKyAgICAzNTU0OCwgMzU1NTYsIDM1NTY0LCAzNTU3MSwgMzU1NzgsIDM1NTg1LCAzNTU5MiwgMzU1OTksIDM1NjA0LCAzNTYxMCwgCisgICAgMzU2MjcsIDM1NjM1LCAzNTY0NSwgMzU2NTMsIDM1NjYwLCA0MDcsIDM1NjY0LCAzNTY3MCwgMzU2NzQsIDM1Njc5LCAKKyAgICAzMzcxNywgMzU2ODUsIDM1Njg4LCAzNTY5MiwgMzU3MDAsIDM2MTksIDM1NzA4LCAzNTcxNCwgMzU3MjAsIDM1NzI5LCAKKyAgICAzNTczOSwgMzU3NDYsIDM1NzUyLCAzNjI1LCAzNjMxLCAzNTc2MSwgMzU3NjgsIDM1Nzc2LCAzNTc4MSwgMzU3ODUsIAorICAgIDM1NzkyLCAzNTgwMCwgMzU4MDcsIDM1ODEzLCAzNTgyMiwgMzU4MzIsIDM1ODM4LCAzNTg0NiwgMzU4NTUsIDM1ODYyLCAKKyAgICAzNTg3MCwgMzU4NzcsIDIyMDMyLCAzNTg4MSwgMzU4ODgsIDM1ODk0LCAzNTkwNCwgMzU5MTMsIDM1OTI0LCAzNTkyOCwgCisgICAgMzU5MzgsIDM1OTQ0LCAzNTk1MSwgMzU5NTksIDM1OTY4LCAzNTk3NywgMzU5ODcsIDM1OTk4LCAzNjAwNSwgMzYwMTAsIAorICAgIDM2MDE3LCAzMDI5LCAzNjAyNSwgMzYwMzEsIDM2MDM2LCAzNjA0MiwgMzYwNDgsIDM2MDUzLCAzNjA2NiwgMzYwNzksIAorICAgIDM2MDkyLCAzNjA5OSwgMzYxMDUsIDM2MTEzLCAzNjEyMSwgMzYxMjYsIDM2MTMwLCAxNDY5LCAzNjEzNCwgMzYxMzksIAorICAgIDM2MTQ0LCAzNjE0OSwgMzYxNTQsIDM2MTYwLCAzNjE2NSwgMzYxNzAsIDM2MTc1LCAzNjE4MCwgMzYxODUsIDM2MTkwLCAKKyAgICAzNjE5NSwgMzYyMDEsIDM2MjA3LCAzNjIxMiwgMzYyMTcsIDM2MjIzLCAzNjIyOCwgMzYyMzMsIDM2MjM4LCAzNjI0NCwgCisgICAgMzYyNDksIDM2MjU0LCAzNjI1OSwgMzYyNjQsIDM2MjcwLCAzNjI3NSwgMzYyODAsIDM2Mjg2LCAzNjI5MSwgMzYyOTYsIAorICAgIDM2MzAxLCAzNjMwNiwgMzYzMTEsIDM2MzE3LCAzNjMyMiwgMzYzMjgsIDM2MzMzLCAzNjMzOSwgMzYzNDQsIDM2MzQ5LCAKKyAgICAzNjM1NCwgMzYzNjAsIDM2MzY2LCAzNjM3MiwgMzYzNzgsIDM2Mzg0LCAzNjM5MCwgMzYzOTYsIDM2NDAyLCAzNjQwNywgCisgICAgMzY0MTIsIDM2NDE4LCAzNjQyMywgMzY0MjgsIDM2NDMzLCAzNjQzOCwgMzY0NDMsIDM2NDQ4LCAzNjQ1MywgMzY0NTksIAorICAgIDM2NDY0LCAzNjQ2OSwgMzY0NzUsIDM2NDgxLCAxMDEsIDM2NDg2LCAzNjQ4OCwgMzY0OTIsIDM2NDk2LCAzNjUwMCwgCisgICAgMzY1MDUsIDM2NTA5LCA5NTI4LCAzNjUxMywgMzY1MTksIDE3NDEsIDYyODAsIDM2NTI1LCAzNjUyOCwgMzY1MzMsIDM2NTM3LCAKKyAgICAzNjU0MiwgMzY1NDYsIDM2NTUwLCAzNjU1NSwgMTAyNDUsIDM2NTU5LCAzNjU2MywgMzY1NjcsIDM2NTcxLCAxNTM4NSwgCisgICAgMzY1NzYsIDM2NTgwLCAzNjU4NSwgMzY1OTAsIDM2NTk1LCAzNjU5OSwgMzY2MDYsIDI2MTI4LCAzNjYxMiwgMzY2MTUsIAorICAgIDM2NjE5LCAzNjYyNCwgMzY2MzAsIDM2NjM0LCAzNjY0MiwgMzY2NDgsIDM2NjUzLCAzNjY1NywgMzY2NjMsIDM2NjY3LCAKKyAgICAzNjY3MSwgMzQ2MiwgMzQ2NywgMjkyNTUsIDM2Njc0LCAzNjY3OCwgMzY2ODIsIDM2Njg2LCAzNjY5MCwgMzY2OTgsIAorICAgIDM2NzA1LCAzNjcwOSwgMzY3MTYsIDM2NzIxLCAzMTcsIDM2NzI2LCAzNjczMCwgMzY3MzYsIDM2NzQ4LCAzNjc1NCwgCisgICAgMzY3NjAsIDM2NzY0LCAzNjc3MCwgMzY3NzksIDM2NzgzLCAzNjc4NywgMzY3OTIsIDM2Nzk4LCAzNjgwMywgMzY4MDcsIAorICAgIDM2ODEyLCAzNjgxNiwgMzY4MjAsIDM2ODI3LCAzNjgzMywgMzY4MzgsIDM2ODUzLCAzNjg2OCwgMzY4ODMsIDM2ODk5LCAKKyAgICAzNjkxNywgMTAxOTUsIDM2OTMxLCAzNjkzOCwgMzY5NDIsIDM2OTQ1LCAzNjk1NCwgMzY5NTksIDM2OTYzLCAzNjk3MSwgCisgICAgMzM5MTksIDM2OTc5LCAzNjk4MywgMzY5OTMsIDM3MDA0LCAyOTIyNSwgMzcwMTcsIDM3MDIxLCAzNzAzMCwgMzcwMzgsIAorICAgIDk3ODUsIDE0OTEzLCAzNzA0MiwgMjI0NDcsIDM3MDQ1LCAzMDE3MywgMzcwNTAsIDk3ODQsIDM3MDU1LCAzNzA2MSwgCisgICAgMzcwNjYsIDM3MDcyLCAzNzA3NywgMzcwODMsIDM3MDg4LCAzNzA5NCwgMzcwOTksIDM3MTA1LCAzNzExMSwgMzcxMTcsIAorICAgIDM3MTIyLCAzNzA3OCwgMzcwODQsIDM3MDg5LCAzNzA5NSwgMzcxMDAsIDM3MTA2LCAzNzExMiwgODEyNiwgMzg3NCwgCisgICAgMzcxMjYsIDM3MTM0LCAzNzEzOCwgMzcxNDEsIDM3MTQ1LCAzNzE1MCwgMzcxNTUsIDM3MTYxLCAzNzE2NywgMzcxNzIsIAorICAgIDM3MTc2LCAyNTk3NiwgMzcxODAsIDM3MTg0LCAzNzE5MCwgMzcxOTQsIDkwNDksIDM3MjAzLCAzNzIxMCwgMzcyMTQsIAorICAgIDExODc1LCAzNzIyMSwgMzcyMjcsIDM3MjMyLCAzNzIzOSwgMzcyNDYsIDM3MjUzLCAyODU3MSwgODA0OSwgMzcyNjAsIAorICAgIDM3MjY3LCAzNzI3NCwgMzcyODAsIDM3Mjg1LCAzNzI5MiwgMzczMDMsIDM3MzA5LCAzNzMxNCwgMzczMTksIDM3MzI0LCAKKyAgICAzNzMzMSwgMzcwNzksIDM3MzM1LCAzNzM0NSwgMzczNTYsIDM3MzYyLCAzNzM2NywgMzczNzIsIDM3Mzc3LCAzNzM4MiwgCisgICAgMzczODcsIDM3MzkxLCAzNzM5NSwgMzc0MDEsIDM3NDA5LCAyMzE5LCA4NjUsIDEwMjYxLCAxMDI3MywgMTAyNzgsIDEwMjg0LCAKKyAgICAzNzQxOCwgMTAyODksIDEwMjk0LCAxMDMwMCwgMzc0MjMsIDM3NDMzLCAzNzQzNywgMTAzMDUsIDM3NDQyLCAxNjkwMywgCisgICAgMzc0NDUsIDM3NDUwLCAzNzQ1NCwgMzc0NTksIDM3NDY0LCAzNzQ3MSwgMzc0NzgsIDM3NDgyLCAzNzQ4NSwgMzc0OTMsIAorICAgIDEwMjA4LCAzNzUwMCwgMzc1MDMsIDM3NTA5LCAzNzUxOSwgNTkyOSwgMzc1MjgsIDM3NTMyLCAzNzU0MCwgMzc1NDQsIAorICAgIDM3NTU0LCAzNzU2MCwgMzc1NzEsIDM3NTc3LCAzNzU4MywgMzc1ODgsIDM3NTk0LCAzNzYwMCwgMzc2MDYsIDM3NjExLCAKKyAgICAzNzYxNCwgMzc2MjEsIDM3NjI3LCAzNzYzMiwgMzc2MzksIDM3NjQ2LCAzNzY1MCwgMzc2NjAsIDM3NjczLCAzNzY4MiwgCisgICAgMzc2OTEsIDM3NzAyLCAzNzcxNSwgMzc3MjYsIDM3NzM1LCAzNzc0NiwgMzc3NTEsIDM3NzYwLCAzNzc2NSwgMTAzMTAsIAorICAgIDM3NzcxLCAzNzc3OCwgMzc3ODYsIDM3NzkxLCAzNzc5NSwgMzc4MDIsIDM3ODA5LCAzODI5LCAxNiwgMzc4MTMsIDM3ODE4LCAKKyAgICAxNjc1NywgMzc4MjIsIDM3ODI1LCAzNzgyOCwgMjgwNzcsIDM3ODMyLCAyODU4MCwgMzc4NDAsIDM3ODQ0LCAzNzg0OCwgCisgICAgMzc4NTEsIDM3ODU3LCAzNzEwMSwgMzc4NjMsIDM3ODcxLCAzNzg3NywgMzc4ODQsIDI4MDYwLCAzNzg4OCwgMjgyNTQsIAorICAgIDM3ODkyLCAzNzkwMSwgMzc5MDcsIDM3OTEzLCAzNzkxOCwgMzc5MjIsIDM3OTI4LCAzNzkzMiwgMzc5NDAsIDM3OTQ4LCAKKyAgICAyNjE5NCwgMzc5NTQsIDM3OTYxLCAzNzk2NywgMzc5NzIsIDM3OTc3LCAzNzk4MSwgMzc5ODcsIDM3OTkyLCAzNzk5OCwgCisgICAgNDA1NiwgNzkxLCAzODAwNSwgMzgwMDksIDM4MDEyLCAxNTI3NSwgMzgwMjQsIDM1ODUxLCAzODAzNSwgMzgwMzgsIDM4MDQ1LCAKKyAgICAzODA0OSwgMzgwNTUsIDM4MDU5LCAzODA2NSwgMzgwNzAsIDM4MDc2LCAzODA4MSwgMzgwODYsIDM4MDkwLCAzODA5NCwgCisgICAgMzgwOTksIDM4MTA0LCAzODExNCwgMzgxMjAsIDM4MTMzLCAzODEzOSwgMzgxNDUsIDM4MTUyLCAzODE1NywgMzgxNjMsIAorICAgIDM4MTY4LCAxNjY0MywgMTQ3MiwgMTAxOSwgMzEyMTgsIDMxMjI0LCAzODE3MywgMzEyMzAsIDMxMjQzLCAzMTI0OSwgCisgICAgMzEyNTUsIDM4MTc5LCAzMTI2MSwgMzEyNjcsIDM4MTg1LCAzODE5MSwgMjIsIDM4MTk5LCAzODIwNiwgMzgyMTAsIDM4MjE0LCAKKyAgICAzODIyMiwgMzE5NzgsIDM4MjI2LCAzODIzMCwgMzgyMzcsIDM4MjQyLCAzODI0NiwgMzgyNTEsIDM4MjU3LCAzODI2MiwgCisgICAgMzgyNjgsIDM4MjczLCAzODI3NywgMzgyODEsIDM4Mjg1LCAzODI5MCwgMzgyOTQsIDM4Mjk5LCAzODMwMywgMzgzMTAsIAorICAgIDM4MzE1LCAzODMxOSwgMzgzMjQsIDM4MzI4LCAzODMzMywgMzgzMzcsIDM4MzQyLCAzODM0OCwgMTU0OTUsIDE1NTAwLCAKKyAgICAzODM1MywgMzgzNTcsIDM4MzYwLCAzODM2NCwgMjExODMsIDM4MzY5LCAzODM3MywgMzgzNzksIDM4Mzg2LCAzODM5MSwgCisgICAgMzg0MDEsIDM4NDA2LCAzODQxNCwgMzg0MTgsIDM4NDIxLCAzMTk5MywgMzg0MjUsIDQxMDksIDM4NDMwLCAzODQzNSwgCisgICAgMzg0MzksIDM4NDQ0LCAzODQ0OCwgMzg0NTMsIDEzMzc1LCAzODQ2NCwgMzg0NjgsIDM4NDcxLCAzODQ3NiwgMzg0ODAsIAorICAgIDM4NDg0LCAzODQ4NywgMzg0OTEsIDgxNDUsIDEzMzkxLCAzODQ5NCwgMzg0OTcsIDM4NTAzLCAzODUwOCwgMzg1MTQsIAorICAgIDM4NTE5LCAzODUyNSwgMzg1MzAsIDM4NTM2LCAzODU0MSwgMzg1NDcsIDM4NTUzLCAzODU1OSwgMzg1NjQsIDM4NTY4LCAKKyAgICAzODU3MiwgMzg1ODEsIDM4NTk3LCAzODYxMywgMzg2MjMsIDI3OTY3LCAzODYzMCwgMzg2MzQsIDM4NjM5LCAzODY0NCwgCisgICAgMzg2NDgsIDM4NjUyLCAzNTk3MiwgMzg2NTgsIDM4NjYzLCAzODY2NywgMzg2NzQsIDM4Njc5LCAzODY4MywgMzg2ODcsIAorICAgIDI2OTk2LCAzODY5MywgMjE0NTEsIDM4Njk4LCAzODcwNSwgMzg3MTMsIDM4NzE5LCAzODcyNiwgMzg3MzQsIDM4NzQwLCAKKyAgICAzODc0NCwgMzg3NTAsIDM4NzU4LCAzODc2MiwgMzg3NzEsIDk1MDksIDM4Nzc5LCAzODc4MywgMzg3OTEsIDM4Nzk4LCAKKyAgICAzODgwMywgMzg4MDgsIDM4ODEyLCAzODgxNSwgMzg4MTksIDM4ODIyLCAzODgyNiwgMzg4MzMsIDM4ODM4LCAzODg0NCwgCisgICAgMjY0MTUsIDMxMjgxLCAzODg0OCwgMzg4NTUsIDM4ODYxLCAzODg2NywgMzg4NzIsIDM4ODc1LCAzODg3NywgMzg4ODQsIAorICAgIDM4ODkxLCAzODg5NywgMzg5MDEsIDM4OTA0LCAzODkwOCwgMzg5MTIsIDM4OTE2LCAzODkyMSwgMzg5MjUsIDM4OTI5LCAKKyAgICAzODkzMiwgMzg5MzYsIDM4OTUwLCAyMzA2MiwgMzg5NjksIDM4OTgyLCAzODk5NSwgMzkwMDgsIDIzMDgwLCAzOTAyMywgCisgICAgMTA0OTcsIDM5MDM4LCAzOTA0NCwgMzkwNDgsIDM5MDUyLCAzOTA1OSwgMzkwNjQsIDM5MDY4LCAzOTA3NSwgMzkwODEsIAorICAgIDM5MDg2LCAzOTA5MiwgMzkxMDIsIDM5MTE0LCAzOTEyNSwgMzkxMzAsIDM5MTM3LCAzOTE0MSwgMzkxNDUsIDM5MTQ4LCAKKyAgICAxNTg5MSwgMzY3NywgMzkxNTYsIDE1NTIyLCAzOTE2OSwgMzkxNzYsIDM5MTgwLCAzOTE4NCwgMzkxODksIDM5MTk0LCAKKyAgICAzOTIwMCwgMzkyMDQsIDM5MjA4LCAzOTIxMSwgNzc0MiwgMTU1MzMsIDM5MjE2LCAzOTIyMCwgMzkyMjYsIDM5MjM1LCAKKyAgICAzOTI0MCwgMzkyNDcsIDM1ODI4LCAzOTI1MywgMzkyNTgsIDM5MjYyLCAzOTI2NywgMzkyNzQsIDM5Mjc4LCAzOTI4MSwgCisgICAgMzkyODUsIDM5MjkwLCAxNDU2NSwgMzkyOTcsIDM5MzA0LCAxMDc3LCAzOTMwOCwgMzkzMTMsIDM5MzE4LCAzOTMyNCwgCisgICAgMzkzMjksIDM5MzM0LCAzOTMzOCwgMzkzNDgsIDM5MzUzLCAzOTM1OSwgMzkzNjQsIDM5MzcwLCAzOTM3NSwgMzkzODEsIAorICAgIDM5MzkxLCAzOTM5NiwgMzk0MDEsIDM5NDA1LCA3MjI5LCA3MjQxLCAzOTQxMCwgMzk0MTMsIDM5NDIwLCAzOTQyNiwgCisgICAgMzQwODQsIDM0MDkxLCAzOTQzNSwgMzk0MzksIDMyMDQxLCAzOTQ0NywgMzk0NTgsIDM5NDY2LCAzNjAyMCwgMzk0NzMsIAorICAgIDM5NDc4LCAzOTQ4MywgMzk0OTQsIDM5NTAxLCAzOTUxMiwgMzIwNjUsIDIxNDU3LCAzOTUyMCwgNzM1LCAzOTUyNSwgCisgICAgMzk1MzEsIDI4MDUxLCAzOTUzNywgMzk1NDIsIDM5NTUyLCAzOTU2MSwgMzk1NjgsIDM5NTc0LCAzOTU3OCwgMzk1ODEsIAorICAgIDM5NTg4LCAzOTU5NCwgMzk2MDEsIDM5NjA3LCAzOTYxNywgMzk2MjUsIDM5NjMxLCAzOTYzNywgMzk2NDIsIDM5NjQ2LCAKKyAgICAzOTY1MywgMzk2NTksIDM5NjY2LCAzODkxNywgNTM1LCAxMzgxOCwgMzk2NzIsIDM5Njc3LCAzOTY4MCwgMzk2ODYsIAorICAgIDM5Njk0LCAxMzk2LCAzOTY5OSwgMzk3MDMsIDM5NzA4LCAzOTcxNSwgMzk3MjEsIDM5NzI1LCAzOTcyOSwgMzk3MzQsIAorICAgIDM5NzQzLCAzOTc1MCwgMzk3NjAsIDM5NzY2LCAyODA5NSwgMzk3ODMsIDM5NzkyLCAzOTgwMCwgMzk4MDYsIDM5ODExLCAKKyAgICAzOTgxOCwgMzk4MjQsIDM5ODMyLCAzOTg0MSwgMzk4NDksIDM5ODUzLCAzOTg1OCwgMzk4NjYsIDMyMDc0LCAzOTg3MiwgCisgICAgMzk4OTEsIDE1ODI0LCAzOTkwNSwgMzk5MjEsIDM5OTM1LCAzOTk0MSwgMzk5NDYsIDM5OTUxLCAzOTk1NiwgMzk5NjIsIAorICAgIDMyMDgwLCAzOTk2NywgMzk5NzQsIDM5OTc5LCAzOTk4MywgMzQ1LCAyOTM2LCAzOTk5MCwgMzk5OTUsIDQwMDAwLCAyNzMyMiwgCisgICAgMzk4MjEsIDQwMDA0LCA0MDAwOSwgNDAwMTcsIDQwMDIxLCA0MDAyNCwgNDAwMzAsIDQwMDM2LCA0MDA0MCwgMjgxNTAsIAorICAgIDQwMDQzLCA0MDA0OCwgNDAwNTIsIDQwMDU1LCA0MDA2MCwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzgsIDQwMDgzLCAKKyAgICA0MDA4NywgNDAwOTEsIDIxMTc5LCAyMTE5MCwgNDAwOTUsIDQwMTAwLCA0MDEwNiwgMjY5NTMsIDQwMTExLCA0MDExNSwgCisgICAgMjEyNjYsIDE2MDcyLCA0MDExOCwgNDAxMjMsIDQwMTI4LCA0MDEzMywgNDAxMzgsIDQwMTQzLCA0MDE0OCwgNDAxNTMsIAorICAgIDQ1MCwgNDksIDMxMjk5LCAzMTMwNCwgMzEzMDksIDMxMzE1LCAzMTMyMCwgMzEzMjUsIDQwMTU4LCAzMTMyOSwgNDAxNjIsIAorICAgIDQwMTY2LCA0MDE3MCwgMzEzMzQsIDMxMzQwLCA0MDE4NCwgMzEzNTEsIDMxMzU2LCA0MDE5MiwgNDAxOTcsIDMxMzYyLCAKKyAgICA0MDIwMiwgNDAyMDcsIDQwMjEyLCA0MDIxNywgNDAyMjMsIDQwMjI5LCA0MDIzNSwgMzEzNzksIDQwMjQ4LCA0MDI1NCwgCisgICAgMzEzODMsIDQwMjU4LCAzMTM4OCwgNDAyNjMsIDMxMzkzLCAzMTM5OCwgNDAyNjYsIDQwMjcxLCA0MDI3NSwgMzA5NDgsIAorICAgIDQwMjgxLCAxMzU5OSwgNDAyODgsIDQwMjkzLCAzMTQwMywgNDAyOTcsIDQwMzAyLCA0MDMwNywgNDAzMTIsIDQwMzE2LCAKKyAgICA0MDMyMSwgNDAzMjYsIDQwMzMyLCA0MDMzNywgNDAzNDIsIDQwMzQ4LCA0MDM1NCwgNDAzNTksIDQwMzYzLCA0MDM2OCwgCisgICAgNDAzNzMsIDQwMzc4LCA0MDM4MiwgNDAzODcsIDQwMzkyLCA0MDM5NywgNDA0MDMsIDQwNDA5LCA0MDQxNSwgNDA0MjAsIAorICAgIDQwNDI0LCA0MDQyOSwgNDA0MzMsIDMxNDA3LCAzMTQxMiwgMzE0MTcsIDQwNDM3LCA0MDQ0MSwgNDA0NDUsIDMxNDIyLCAKKyAgICAzMTQyOCwgMzE0MzQsIDMxNDQ2LCA0MDQ1NywgMjYwMTMsIDQwNDYxLCA0MDQ2NSwgNDA0NzAsIDQwNDc1LCA0MDQ4MCwgCisgICAgNDA0ODUsIDQwNDg5LCA0MDQ5MywgNDA1MDMsIDQwNTA4LCA0MDUxMywgNDA1MTcsIDQwNTIxLCA0MDUyNCwgNDA1MzIsIAorICAgIDMxNDk0LCA0MDUzNywgMTQ3OSwgNDA1NDMsIDQwNTUxLCA0MDU2MCwgNDA1NjQsIDQwNTY4LCA0MDU3NiwgNDA1ODIsIAorICAgIDQwNTkwLCA0MDYwNiwgNDA2MTAsIDQwNjE0LCA0MDYxOSwgNDA2MzQsIDMxNTMxLCAxNzQ5LCAxMjA1NSwgNDA2MzgsIAorICAgIDEzNzgsIDQwNjUwLCA0MDY1MSwgNDA2NTksIDQwNjY2LCA0MDY3MSwgNDA2NzgsIDQwNjgzLCA5Mzc5LCAxMTE5LCAxMDMzMiwgCisgICAgNDA2OTAsIDQwNjk1LCA0MDY5OCwgNDA3MDEsIDQwNzEwLCAxMjg2LCA0MDcxNSwgMzkwNjUsIDQwNzIyLCA0MDcyNywgCisgICAgNDA3MzEsIDIyNTAzLCAyNTU3LCA0MDczOSwgMTA3NDEsIDQwNzQ5LCA0MDc1NSwgMjMzNywgMjM0NywgNDA3NjQsIDQwNzczLCAKKyAgICA0MDc4MywgNDA3OTQsIDMyOTMsIDM0MjM3LCAxMDM4NCwgMzgwNywgMTY2ODEsIDEyOTEsIDQwNzk5LCA0MDgwNywgNDA4MTQsIAorICAgIDQwODE5LCA0MDgyMywgNDA4MjcsIDIzODc1LCAxMDQxMSwgNDA4MzUsIDQwODQ0LCA0MDg1MywgNDA4NjEsIDQwODY4LCAKKyAgICA0MDg3OSwgNDA4ODQsIDQwODk3LCA0MDkxMCwgNDA5MjIsIDQwOTM0LCA0MDk0NiwgNDA5NTksIDQwOTcwLCA0MDk4MSwgCisgICAgNDA5OTEsIDQwOTk5LCA0MTAwNywgNDEwMTksIDQxMDMxLCA0MTA0MiwgNDEwNTEsIDQxMDU5LCA0MTA2NiwgNDEwNzgsIAorICAgIDQxMDg1LCA0MTA5NCwgNDExMDEsIDQxMTE0LCA0MTExOSwgNDExMjksIDQxMTM0LCA0MTE0MCwgNDExNDUsIDM3MjExLCAKKyAgICA0MTE0OSwgNDExNTYsIDQxMTYwLCA0MTE2NywgNDExNzUsIDI1MTgsIDQxMTgyLCA0MTE5MywgNDEyMDMsIDQxMjEyLCAKKyAgICA0MTIyMCwgNDEyMzAsIDQxMjM4LCA0MTI0OCwgNDEyNTcsIDQxMjYyLCA0MTI2OCwgNDEyNzQsIDM3MDksIDQxMjg1LCAKKyAgICA0MTI5NSwgNDEzMDQsIDQxMzEzLCA0MTMyMywgNDEzMzEsIDQxMzQwLCA0MTM0NSwgNDEzNTAsIDQxMzU1LCAxNzA1LCAzNywgCisgICAgNDEzNjMsIDQxMzcxLCA0MTM4MiwgNDEzOTMsIDE2MzU2LCA0MTQwMywgNDE0MDcsIDQxNDE0LCA0MTQyMCwgNDE0MjUsIAorICAgIDQxNDI5LCA0MTQ0MCwgNDE0NTAsIDQxNDU5LCA0MTQ3MCwgMTY3MzAsIDE2NzM1LCA0MTQ3NSwgNDE0ODQsIDQxNDg5LCAKKyAgICA0MTQ5OSwgNDE1MDQsIDQxNTEyLCA0MTUyMCwgNDE1MjcsIDQxNTMzLCA3MDc4LCAyMjgsIDQxNTM3LCA0MTU0MywgNDE1NDgsIAorICAgIDQxNTUxLCAyMTE3LCAzOTE4MSwgNDE1NTksIDQxNTYzLCA0MTU2NiwgMTUxMiwgNDE1NzIsIDEzOTgwLCAxMjk2LCA0MTU3NywgCisgICAgNDE1OTAsIDQxNjA0LCAyNjQzLCA0MTYyMiwgNDE2MzQsIDQxNjQ2LCAyNjU3LCAyNjc0LCA0MTY2MCwgNDE2NzMsIDI2ODksIAorICAgIDQxNjg3LCA0MTY5OSwgMjcwNCwgNDE3MTMsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjU5LCA0MTcxOCwgNDE3MjMsIDQxNzI4LCAKKyAgICA0MTczMiwgNDE3NDcsIDQxNzYyLCA0MTc3NywgNDE3OTIsIDQxODA3LCA0MTgyMiwgNDE4MzcsIDQxODUyLCA0MTg2NywgCisgICAgNDE4ODIsIDQxODk3LCA0MTkxMiwgNDE5MjcsIDQxOTQyLCA0MTk1NywgNDE5NzIsIDQxOTg3LCA0MjAwMiwgNDIwMTcsIAorICAgIDQyMDMyLCA0MjA0NywgNDIwNjIsIDQyMDc3LCA0MjA5MiwgNDIxMDcsIDQyMTIyLCA0MjEzNywgNDIxNTIsIDQyMTY3LCAKKyAgICA0MjE4MiwgNDIxOTcsIDQyMjEyLCA0MjIyNywgNDIyNDIsIDQyMjU3LCA0MjI3MiwgNDIyODcsIDQyMzAyLCA0MjMxNywgCisgICAgNDIzMzIsIDQyMzQ3LCA0MjM2MiwgNDIzNzcsIDQyMzkyLCA0MjQwNywgNDI0MjIsIDQyNDM3LCA0MjQ1MiwgNDI0NjcsIAorICAgIDQyNDgyLCA0MjQ5NywgNDI1MTIsIDQyNTI3LCA0MjU0MiwgNDI1NTcsIDQyNTcyLCA0MjU4NywgNDI2MDIsIDQyNjE3LCAKKyAgICA0MjYzMiwgNDI2NDcsIDQyNjYyLCA0MjY3NywgNDI2OTIsIDQyNzA3LCA0MjcyMiwgNDI3MzcsIDQyNzUyLCA0Mjc2NywgCisgICAgNDI3ODIsIDQyNzk3LCA0MjgxMiwgNDI4MjcsIDQyODQyLCA0Mjg1NywgNDI4NzIsIDQyODg3LCA0MjkwMiwgNDI5MTcsIAorICAgIDQyOTMyLCA0Mjk0NywgNDI5NjIsIDQyOTc3LCA0Mjk5MiwgNDMwMDcsIDQzMDIyLCA0MzAzNywgNDMwNTIsIDQzMDY3LCAKKyAgICA0MzA4MiwgNDMwOTcsIDQzMTEyLCA0MzEyNywgNDMxNDIsIDQzMTU3LCA0MzE3MiwgNDMxODcsIDQzMjAyLCA0MzIxNywgCisgICAgNDMyMzIsIDQzMjQ3LCA0MzI2MiwgNDMyNzcsIDQzMjkyLCA0MzMwNywgNDMzMjIsIDQzMzM3LCA0MzM1MiwgNDMzNjcsIAorICAgIDQzMzgyLCA0MzM5NywgNDM0MTIsIDQzNDI3LCA0MzQ0MiwgNDM0NTcsIDQzNDcyLCA0MzQ4NywgNDM1MDIsIDQzNTE3LCAKKyAgICA0MzUzMiwgNDM1NDcsIDQzNTYyLCA0MzU3NywgNDM1OTIsIDQzNjA3LCA0MzYyMiwgNDM2MzcsIDQzNjUyLCA0MzY2NywgCisgICAgNDM2ODIsIDQzNjk3LCA0MzcxMiwgNDM3MjcsIDQzNzQyLCA0Mzc1NywgNDM3NzIsIDQzNzg3LCA0MzgwMiwgNDM4MTcsIAorICAgIDQzODMyLCA0Mzg0NywgNDM4NjIsIDQzODc3LCA0Mzg5MiwgNDM5MDcsIDQzOTIyLCA0MzkzNywgNDM5NTIsIDQzOTY3LCAKKyAgICA0Mzk4MiwgNDM5OTcsIDQ0MDEyLCA0NDAyNywgNDQwNDIsIDQ0MDU3LCA0NDA3MiwgNDQwODcsIDQ0MTAyLCA0NDExNywgCisgICAgNDQxMzIsIDQ0MTQ3LCA0NDE2MiwgNDQxNzcsIDQ0MTkyLCA0NDIwNywgNDQyMjIsIDQ0MjM3LCA0NDI1MiwgNDQyNjcsIAorICAgIDQ0MjgyLCA0NDI5NywgNDQzMTIsIDQ0MzI3LCA0NDM0MiwgNDQzNTcsIDQ0MzcyLCA0NDM4NywgNDQ0MDIsIDQ0NDE3LCAKKyAgICA0NDQzMiwgNDQ0NDcsIDQ0NDYyLCA0NDQ3NywgNDQ0OTIsIDQ0NTA3LCA0NDUyMiwgNDQ1MzcsIDQ0NTUyLCA0NDU2NywgCisgICAgNDQ1ODIsIDQ0NTk3LCA0NDYxMiwgNDQ2MjcsIDQ0NjQyLCA0NDY1NywgNDQ2NzIsIDQ0Njg3LCA0NDcwMiwgNDQ3MTcsIAorICAgIDQ0NzMyLCA0NDc0NywgNDQ3NjIsIDQ0Nzc3LCA0NDc5MiwgNDQ4MDcsIDQ0ODIyLCA0NDgzNywgNDQ4NTIsIDQ0ODY3LCAKKyAgICA0NDg4MiwgNDQ4OTcsIDQ0OTEyLCA0NDkyNywgNDQ5NDIsIDQ0OTU3LCA0NDk3MiwgNDQ5ODcsIDQ1MDAyLCA0NTAxNywgCisgICAgNDUwMzIsIDQ1MDQ3LCA0NTA2MiwgNDUwNzcsIDQ1MDkyLCA0NTEwNywgNDUxMjIsIDQ1MTM3LCA0NTE1MiwgNDUxNjcsIAorICAgIDQ1MTgyLCA0NTE5NywgNDUyMTIsIDQ1MjI3LCA0NTI0MiwgNDUyNTcsIDQ1MjcyLCA0NTI4NywgNDUzMDIsIDQ1MzE3LCAKKyAgICA0NTMzMiwgNDUzNDcsIDQ1MzYyLCA0NTM3NywgNDUzOTIsIDQ1NDA3LCA0NTQyMiwgNDU0MzcsIDQ1NDUyLCA0NTQ2NywgCisgICAgNDU0ODIsIDQ1NDk3LCA0NTUxMiwgNDU1MjcsIDQ1NTQyLCA0NTU1NywgNDU1NzIsIDQ1NTg3LCA0NTYwMiwgNDU2MTcsIAorICAgIDQ1NjMyLCA0NTY0NywgNDU2NjIsIDQ1Njc3LCA0NTY5MiwgNDU3MDcsIDQ1NzIyLCA0NTczNywgNDU3NTIsIDQ1NzY3LCAKKyAgICA0NTc4MiwgNDU3OTcsIDQ1ODEyLCA0NTgyNywgNDU4NDIsIDQ1ODU3LCA0NTg3MiwgNDU4ODcsIDQ1OTAyLCA0NTkxNywgCisgICAgNDU5MzIsIDQ1OTQ3LCA0NTk2MiwgNDU5NzcsIDQ1OTkyLCA0NjAwNywgNDYwMjIsIDQ2MDM3LCA0NjA1MiwgNDYwNjcsIAorICAgIDQ2MDgyLCA0NjA5NywgNDYxMTIsIDQ2MTI3LCA0NjE0MiwgNDYxNTcsIDQ2MTcyLCA0NjE4NywgNDYyMDIsIDQ2MjE3LCAKKyAgICA0NjIzMiwgNDYyNDcsIDQ2MjYyLCA0NjI3NywgNDYyOTIsIDQ2MzA3LCA0NjMyMiwgNDYzMzcsIDQ2MzUyLCA0NjM2NywgCisgICAgNDYzODIsIDQ2Mzk3LCA0NjQxMiwgNDY0MjcsIDQ2NDQyLCA0NjQ1NywgNDY0NzIsIDQ2NDg3LCA0NjUwMiwgNDY1MTcsIAorICAgIDQ2NTMyLCA0NjU0NywgNDY1NjIsIDQ2NTc3LCA0NjU5MiwgNDY2MDcsIDQ2NjIyLCA0NjYzNywgNDY2NTIsIDQ2NjY3LCAKKyAgICA0NjY4MiwgNDY2OTcsIDQ2NzEyLCA0NjcyNywgNDY3NDIsIDQ2NzU3LCA0Njc3MiwgNDY3ODcsIDQ2ODAyLCA0NjgxNywgCisgICAgNDY4MzIsIDQ2ODQ3LCA0Njg2MiwgNDY4NzcsIDQ2ODkyLCA0NjkwNywgNDY5MjIsIDQ2OTM3LCA0Njk1MiwgNDY5NjcsIAorICAgIDQ2OTgyLCA0Njk5NywgNDcwMTIsIDQ3MDI3LCA0NzA0MiwgNDcwNTcsIDQ3MDcyLCA0NzA4NywgNDcxMDIsIDQ3MTE3LCAKKyAgICA0NzEzMiwgNDcxNDcsIDQ3MTYyLCA0NzE3NywgNDcxOTIsIDQ3MjA3LCA0NzIyMiwgNDcyMzcsIDQ3MjUyLCA0NzI2NywgCisgICAgNDcyODIsIDQ3Mjk3LCA0NzMxMiwgNDczMjcsIDQ3MzQyLCA0NzM1NywgNDczNzIsIDQ3Mzg3LCA0NzQwMiwgNDc0MTcsIAorICAgIDQ3NDMyLCA0NzQ0NywgNDc0NjIsIDQ3NDc3LCA0NzQ5MiwgNDc1MDcsIDQ3NTIyLCA0NzUzNywgNDc1NTIsIDQ3NTY3LCAKKyAgICA0NzU4MiwgNDc1OTcsIDQ3NjEyLCA0NzYyNywgNDc2NDIsIDQ3NjU3LCA0NzY3MiwgNDc2ODcsIDQ3NzAyLCA0NzcxNywgCisgICAgNDc3MzIsIDQ3NzQ3LCA0Nzc2MiwgNDc3NzcsIDQ3NzkyLCA0NzgwNywgNDc4MjIsIDQ3ODM3LCA0Nzg1MiwgNDc4NjcsIAorICAgIDQ3ODgyLCA0Nzg5NywgNDc5MTIsIDQ3OTI3LCA0Nzk0MiwgNDc5NTcsIDQ3OTcyLCA0Nzk4NywgNDgwMDIsIDQ4MDE3LCAKKyAgICA0ODAzMiwgNDgwNDcsIDQ4MDYyLCA0ODA3NywgNDgwOTIsIDQ4MTA3LCA0ODEyMiwgNDgxMzcsIDQ4MTUyLCA0ODE2NywgCisgICAgNDgxODIsIDQ4MTk3LCA0ODIxMiwgNDgyMjcsIDQ4MjQyLCA0ODI1NywgNDgyNzIsIDQ4Mjg3LCA0ODMwMiwgNDgzMTcsIAorICAgIDQ4MzMyLCA0ODM0NywgNDgzNjIsIDQ4Mzc3LCA0ODM5MiwgNDg0MDcsIDQ4NDIyLCA0ODQzNywgNDg0NTIsIDQ4NDY3LCAKKyAgICA0ODQ4MiwgNDg0OTcsIDQ4NTEyLCA0ODUyNywgNDg1NDIsIDQ4NTU3LCA0ODU3MiwgNDg1ODcsIDQ4NjAyLCA0ODYxNywgCisgICAgNDg2MzIsIDQ4NjQ3LCA0ODY2MiwgNDg2NzcsIDQ4NjkyLCA0ODcwNywgNDg3MjIsIDQ4NzM3LCA0ODc1MiwgNDg3NjcsIAorICAgIDQ4NzgyLCA0ODc5NywgNDg4MTIsIDQ4ODI3LCA0ODg0MiwgNDg4NTcsIDQ4ODcyLCA0ODg4NywgNDg5MDIsIDQ4OTE3LCAKKyAgICA0ODkzMiwgNDg5NDcsIDQ4OTYyLCA0ODk3NywgNDg5OTIsIDQ5MDA3LCA0OTAyMiwgNDkwMzcsIDQ5MDUyLCA0OTA2NywgCisgICAgNDkwODIsIDQ5MDk3LCA0OTExMiwgNDkxMjcsIDQ5MTQyLCA0OTE1NywgNDkxNzIsIDQ5MTg3LCA0OTIwMiwgNDkyMTcsIAorICAgIDQ5MjMyLCA0OTI0NywgNDkyNjIsIDQ5Mjc3LCA0OTI5MiwgNDkzMDcsIDQ5MzIyLCA0OTMzNywgNDkzNTIsIDQ5MzY3LCAKKyAgICA0OTM4MiwgNDkzOTcsIDQ5NDEyLCA0OTQyNywgNDk0NDIsIDQ5NDU3LCA0OTQ3MiwgNDk0ODcsIDQ5NTAyLCA0OTUxNywgCisgICAgNDk1MzIsIDQ5NTQ4LCA0OTU2NCwgNDk1ODAsIDQ5NTk2LCA0OTYxMiwgNDk2MjgsIDQ5NjQ0LCA0OTY2MCwgNDk2NzYsIAorICAgIDQ5NjkyLCA0OTcwOCwgNDk3MjQsIDQ5NzQwLCA0OTc1NiwgNDk3NzIsIDQ5Nzg4LCA0OTgwNCwgNDk4MjAsIDQ5ODM2LCAKKyAgICA0OTg1MiwgNDk4NjgsIDQ5ODg0LCA0OTkwMCwgNDk5MTYsIDQ5OTMyLCA0OTk0OCwgNDk5NjQsIDQ5OTgwLCA0OTk5NiwgCisgICAgNTAwMTIsIDUwMDI4LCA1MDA0NCwgNTAwNjAsIDUwMDc2LCA1MDA5MiwgNTAxMDgsIDUwMTI0LCA1MDE0MCwgNTAxNTYsIAorICAgIDUwMTcyLCA1MDE4OCwgNTAyMDQsIDUwMjIwLCA1MDIzNiwgNTAyNTIsIDUwMjY4LCA1MDI4NCwgNTAzMDAsIDUwMzE2LCAKKyAgICA1MDMzMiwgNTAzNDgsIDUwMzY0LCA1MDM4MCwgNTAzOTYsIDUwNDEyLCA1MDQyOCwgNTA0NDQsIDUwNDYwLCA1MDQ3NiwgCisgICAgNTA0OTIsIDUwNTA4LCA1MDUyNCwgNTA1NDAsIDUwNTU2LCA1MDU3MiwgNTA1ODgsIDUwNjA0LCA1MDYyMCwgNTA2MzYsIAorICAgIDUwNjUyLCA1MDY2OCwgNTA2ODQsIDUwNzAwLCA1MDcxNiwgNTA3MzIsIDUwNzQ4LCA1MDc2NCwgNTA3ODAsIDUwNzk2LCAKKyAgICA1MDgxMiwgNTA4MjgsIDUwODQ0LCA1MDg2MCwgNTA4NzYsIDUwODkyLCA1MDkwOCwgNTA5MjQsIDUwOTQwLCA1MDk1NiwgCisgICAgNTA5NzIsIDUwOTg4LCA1MTAwNCwgNTEwMjAsIDUxMDM2LCA1MTA1MiwgNTEwNjgsIDUxMDg0LCA1MTEwMCwgNTExMTYsIAorICAgIDUxMTMyLCA1MTE0OCwgNTExNjQsIDUxMTgwLCA1MTE5NiwgNTEyMTIsIDUxMjI4LCA1MTI0NCwgNTEyNjAsIDUxMjc2LCAKKyAgICA1MTI5MiwgNTEzMDgsIDUxMzI0LCA1MTM0MCwgNTEzNTYsIDUxMzcyLCA1MTM4OCwgNTE0MDQsIDUxNDIwLCA1MTQzNiwgCisgICAgNTE0NTIsIDUxNDY4LCA1MTQ4NCwgNTE1MDAsIDUxNTE2LCA1MTUzMiwgNTE1NDgsIDUxNTY0LCA1MTU4MCwgNTE1OTYsIAorICAgIDUxNjEyLCA1MTYyOCwgNTE2NDQsIDUxNjYwLCA1MTY3NiwgNTE2OTIsIDUxNzA4LCA1MTcyNCwgNTE3NDAsIDUxNzU2LCAKKyAgICA1MTc3MiwgNTE3ODgsIDUxODA0LCA1MTgyMCwgNTE4MzYsIDUxODUyLCA1MTg2OCwgNTE4ODQsIDUxOTAwLCA1MTkxNiwgCisgICAgNTE5MzIsIDUxOTQ4LCA1MTk2NCwgNTE5ODAsIDUxOTk2LCA1MjAxMiwgNTIwMjgsIDUyMDQ0LCA1MjA2MCwgNTIwNzYsIAorICAgIDUyMDkyLCA1MjEwOCwgNTIxMjQsIDUyMTQwLCA1MjE1NiwgNTIxNzIsIDUyMTg4LCA1MjIwNCwgNTIyMjAsIDUyMjM2LCAKKyAgICA1MjI1MiwgNTIyNjgsIDUyMjg0LCA1MjMwMCwgNTIzMTYsIDUyMzMyLCA1MjM0OCwgNTIzNjQsIDUyMzgwLCA1MjM5NiwgCisgICAgNTI0MTIsIDUyNDI4LCA1MjQ0NCwgNTI0NjAsIDUyNDc2LCA1MjQ5MiwgNTI1MDgsIDUyNTI0LCA1MjU0MCwgNTI1NTYsIAorICAgIDUyNTcyLCA1MjU4OCwgNTI2MDQsIDUyNjIwLCA1MjYzNiwgNTI2NTIsIDUyNjY4LCA1MjY4NCwgNTI3MDAsIDUyNzE2LCAKKyAgICA1MjczMiwgNTI3NDgsIDUyNzY0LCA1Mjc4MCwgNTI3OTYsIDUyODEyLCA1MjgyOCwgNTI4NDQsIDUyODYwLCA1Mjg3NiwgCisgICAgNTI4OTIsIDUyOTA4LCA1MjkyNCwgNTI5NDAsIDUyOTU2LCA1Mjk3MiwgNTI5ODgsIDUzMDA0LCA1MzAyMCwgNTMwMzYsIAorICAgIDUzMDUyLCA1MzA2OCwgNTMwODQsIDUzMTAwLCA1MzExNiwgNTMxMzIsIDUzMTQ4LCA1MzE2NCwgNTMxODAsIDUzMTk2LCAKKyAgICA1MzIxMiwgNTMyMjgsIDUzMjQ0LCA1MzI2MCwgNTMyNzYsIDUzMjkyLCA1MzMwOCwgNTMzMjQsIDUzMzQwLCA1MzM1NiwgCisgICAgNTMzNzIsIDUzMzg4LCA1MzQwNCwgNTM0MjAsIDUzNDM2LCA1MzQ1MiwgNTM0NjgsIDUzNDg0LCA1MzUwMCwgNTM1MTYsIAorICAgIDUzNTMyLCA1MzU0OCwgNTM1NjQsIDUzNTgwLCA1MzU5NiwgNTM2MTIsIDUzNjI4LCA1MzY0NCwgNTM2NjAsIDUzNjc2LCAKKyAgICA1MzY5MiwgNTM3MDgsIDUzNzI0LCA1Mzc0MCwgNTM3NTYsIDUzNzcyLCA1Mzc4OCwgNTM4MDQsIDUzODIwLCA1MzgzNiwgCisgICAgNTM4NTIsIDUzODY4LCA1Mzg4NCwgNTM5MDAsIDUzOTE2LCA1MzkzMiwgNTM5NDgsIDUzOTY0LCA1Mzk4MCwgNTM5OTYsIAorICAgIDU0MDEyLCA1NDAyOCwgNTQwNDQsIDU0MDYwLCA1NDA3NiwgNTQwOTIsIDU0MTA4LCA1NDEyNCwgNTQxNDAsIDU0MTU2LCAKKyAgICA1NDE3MiwgNTQxODgsIDU0MjA0LCA1NDIyMCwgNTQyMzYsIDU0MjUyLCA1NDI2OCwgNTQyODQsIDU0MzAwLCA1NDMxNiwgCisgICAgNTQzMzIsIDU0MzQ4LCA1NDM2NCwgNTQzODAsIDU0Mzk2LCA1NDQxMiwgNTQ0MjgsIDU0NDQ0LCA1NDQ2MCwgNTQ0NzYsIAorICAgIDU0NDkyLCA1NDUwOCwgNTQ1MjQsIDU0NTQwLCA1NDU1NiwgNTQ1NzIsIDU0NTg4LCA1NDYwNCwgNTQ2MjAsIDU0NjM2LCAKKyAgICA1NDY1MiwgNTQ2NjgsIDU0Njg0LCA1NDcwMCwgNTQ3MTYsIDU0NzMyLCA1NDc0OCwgNTQ3NjQsIDU0NzgwLCA1NDc5NiwgCisgICAgNTQ4MTIsIDU0ODI4LCA1NDg0NCwgNTQ4NjAsIDU0ODc2LCA1NDg5MiwgNTQ5MDgsIDU0OTI0LCA1NDk0MCwgNTQ5NTYsIAorICAgIDU0OTcyLCA1NDk4OCwgNTUwMDQsIDU1MDIwLCA1NTAzNiwgNTUwNTIsIDU1MDY4LCA1NTA4NCwgNTUxMDAsIDU1MTE2LCAKKyAgICA1NTEzMiwgNTUxNDgsIDU1MTY0LCA1NTE4MCwgNTUxOTYsIDU1MjEyLCA1NTIyOCwgNTUyNDQsIDU1MjYwLCA1NTI3NiwgCisgICAgNTUyOTIsIDU1MzA4LCA1NTMyNCwgNTUzNDAsIDU1MzU2LCA1NTM3MiwgNTUzODgsIDU1NDA0LCA1NTQyMCwgNTU0MzYsIAorICAgIDU1NDUyLCA1NTQ2OCwgNTU0ODQsIDU1NTAwLCA1NTUxNiwgNTU1MzIsIDU1NTQ4LCA1NTU2NCwgNTU1ODAsIDU1NTk2LCAKKyAgICA1NTYxMiwgNTU2MjgsIDU1NjQ0LCA1NTY2MCwgNTU2NzYsIDU1NjkyLCA1NTcwOCwgNTU3MjQsIDU1NzQwLCA1NTc1NiwgCisgICAgNTU3NzIsIDU1Nzg4LCA1NTgwNCwgNTU4MjAsIDU1ODM2LCA1NTg1MiwgNTU4NjgsIDU1ODg0LCA1NTkwMCwgNTU5MTYsIAorICAgIDU1OTMyLCA1NTk0OCwgNTU5NjQsIDU1OTgwLCA1NTk5NiwgNTYwMTIsIDU2MDI4LCA1NjA0NCwgNTYwNjAsIDU2MDc2LCAKKyAgICA1NjA5MiwgNTYxMDgsIDU2MTI0LCA1NjE0MCwgNTYxNTYsIDU2MTcyLCA1NjE4OCwgNTYyMDQsIDU2MjIwLCA1NjIzNiwgCisgICAgNTYyNTIsIDU2MjY4LCA1NjI4NCwgNTYzMDAsIDU2MzE2LCA1NjMzMiwgNTYzNDgsIDU2MzY0LCA1NjM4MCwgNTYzOTYsIAorICAgIDU2NDEyLCA1NjQyOCwgNTY0NDQsIDU2NDYwLCA1NjQ3NiwgNTY0OTIsIDU2NTA4LCA1NjUyNCwgNTY1NDAsIDU2NTU2LCAKKyAgICA1NjU3MiwgNTY1ODgsIDU2NjA0LCA1NjYyMCwgNTY2MzYsIDU2NjUyLCA1NjY2OCwgNTY2ODQsIDU2NzAwLCA1NjcxNiwgCisgICAgNTY3MzIsIDU2NzQ4LCA1Njc2NCwgNTY3ODAsIDU2Nzk2LCA1NjgxMiwgNTY4MjgsIDU2ODQ0LCA1Njg2MCwgNTY4NzYsIAorICAgIDU2ODkyLCA1NjkwOCwgNTY5MjQsIDU2OTQwLCA1Njk1NiwgNTY5NzIsIDU2OTg4LCA1NzAwNCwgNTcwMjAsIDU3MDM2LCAKKyAgICA1NzA1MiwgNTcwNjgsIDU3MDg0LCA1NzEwMCwgNTcxMTYsIDU3MTMyLCA1NzE0OCwgNTcxNjQsIDU3MTgwLCA1NzE5NiwgCisgICAgNTcyMTIsIDU3MjI4LCA1NzI0NCwgNTcyNjAsIDU3Mjc2LCA1NzI5MiwgNTczMDgsIDU3MzI0LCA1NzM0MCwgNTczNTYsIAorICAgIDU3MzcyLCA1NzM4OCwgNTc0MDQsIDU3NDIwLCA1NzQzNiwgNTc0NTIsIDU3NDY4LCA1NzQ4NCwgNTc1MDAsIDU3NTE2LCAKKyAgICA1NzUzMiwgNTc1NDgsIDU3NTY0LCA1NzU4MCwgNTc1OTYsIDU3NjEyLCA1NzYyOCwgNTc2NDQsIDU3NjYwLCA1NzY3NiwgCisgICAgNTc2OTIsIDU3NzA4LCA1NzcyNCwgNTc3NDAsIDU3NzU2LCA1Nzc3MiwgNTc3ODgsIDU3ODA0LCA1NzgyMCwgNTc4MzYsIAorICAgIDU3ODUyLCA1Nzg2OCwgNTc4ODQsIDU3OTAwLCA1NzkxNiwgNTc5MzIsIDU3OTQ4LCA1Nzk2NCwgNTc5ODAsIDU3OTk2LCAKKyAgICA1ODAxMiwgNTgwMjgsIDU4MDQ0LCA1ODA2MCwgNTgwNzYsIDU4MDkyLCA1ODEwOCwgNTgxMjQsIDU4MTQwLCA1ODE1NiwgCisgICAgNTgxNzIsIDU4MTg4LCA1ODIwNCwgNTgyMTksIDE2NzYyLCA1ODIyOCwgNTgyMzQsIDU4MjQwLCA1ODI1MCwgNTgyNTgsIAorICAgIDE0ODk0LCAxNTQ0NSwgOTk2MCwgNTgyNzEsIDE1MjAsIDU4Mjc5LCAzNzYxLCAyNzQzMiwgNzE4MywgNTgyODUsIDU4MjkwLCAKKyAgICA1ODI5NSwgNTgzMDAsIDU4MzA1LCA1ODMxMSwgNTgzMTYsIDU4MzIyLCA1ODMyNywgNTgzMzMsIDU4MzM4LCA1ODM0MywgCisgICAgNTgzNDgsIDU4MzUzLCA1ODM1OSwgNTgzNjQsIDU4MzY5LCA1ODM3NCwgNTgzNzksIDU4Mzg0LCA1ODM4OSwgNTgzOTQsIAorICAgIDU4NDAwLCA1ODQwNSwgNTg0MTEsIDU4NDE4LCAyNTYxLCA1ODQyMywgNTg0MjksIDg1MjYsIDU4NDMzLCA1ODQzOCwgCisgICAgNTg0NDUsIDU4NDUzLCA0MCwgNTg0NTcsIDU4NDYzLCA1ODQ2OCwgNTg0NzMsIDU4NDc3LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCAKKyAgICAxMDY4NCwgNTg0OTQsIDU4NTA0LCA1ODUxNywgNTg1MjgsIDU4NTQxLCA1ODU0OCwgNTg1NTQsIDU4NTU5LCA1ODU2NSwgCisgICAgNTg1NzEsIDU4NTc3LCA1ODU4MiwgNTg1ODcsIDU4NTkyLCA1ODU5NywgNTg2MDEsIDU4NjA2LCA1ODYxMSwgNTg2MTYsIAorICAgIDU4NjIyLCA1ODYyOCwgNTg2MzQsIDU4NjM5LCA1ODY0MywgNTg2NDgsIDU4NjUzLCA1ODY1NywgNTg2NjIsIDU4NjY3LCAKKyAgICA1ODY3MiwgNTg2NzYsIDEwNzAwLCAxMDcxMSwgMTA3MTYsIDE1NjMsIDU4NjgwLCAxNTY4LCA1ODY4NiwgMTYyMzksIAorICAgIDU4Njg5LCA1ODY5NSwgMTU5OSwgNTg3MDEsIDE2MDUsIDE2MTEsIDEwNzQ2LCA1ODcwNiwgNTg3MTQsIDU4NzIxLCA1ODcyNSwgCisgICAgNTg3MzEsIDU4NzM2LCAzMDk3NywgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDU4NzYxLCAxNjE2LCAxNjMzMSwgCisgICAgNTg3NzAsIDU4Nzc0LCAxNjM0MiwgMTEyNSwgNTg3NzgsIDU4Nzg1LCA1ODc5MCwgNTg3OTQsIDE2MzY3LCAxNjIwLCAKKyAgICAzNzM1MCwgNTg3OTcsIDU4ODAyLCA1ODgxMiwgNTg4MjEsIDU4ODI2LCA1ODgzMCwgNTg4MzYsIDE2MjUsIDM5MjU5LCAKKyAgICA1ODg0MSwgNTg4NTAsIDU4ODU2LCA1ODg2MSwgMTA5MDQsIDEwOTEwLCA1ODg2NywgNTg4NzksIDU4ODk2LCA1ODkxMywgCisgICAgNTg5MzAsIDU4OTQ3LCA1ODk2NCwgNTg5ODEsIDU4OTk4LCA1OTAxNSwgNTkwMzIsIDU5MDQ5LCA1OTA2NiwgNTkwODMsIAorICAgIDU5MTAwLCA1OTExNywgNTkxMzQsIDU5MTUxLCA1OTE2OCwgNTkxODUsIDU5MjAyLCA1OTIxOSwgNTkyMzYsIDU5MjUzLCAKKyAgICA1OTI3MCwgNTkyODcsIDU5MzA0LCA1OTMyMSwgNTkzMzgsIDU5MzU1LCA1OTM3MiwgNTkzODksIDU5NDA2LCA1OTQyMywgCisgICAgNTk0NDAsIDU5NDU3LCA1OTQ3NCwgNTk0OTEsIDU5NTA4LCA1OTUyNSwgNTk1NDIsIDU5NTU5LCA1OTU3NiwgNTk1OTMsIAorICAgIDU5NjEwLCA1OTYyNywgNTk2NDQsIDU5NjYxLCA1OTY3OCwgNTk2OTUsIDU5NzEyLCA1OTcyMywgNTk3MjgsIDE2MzAsIAorICAgIDU5NzMyLCA1OTczOCwgNTk3NDMsIDU5NzQ4LCA5MzI2LCAxNjM1LCA1OTc1NCwgNTk3NjMsIDI3NzMxLCA1OTc2OCwgCisgICAgNTk3NzksIDU5Nzg5LCA1OTc5NCwgNTk4MDEsIDU5ODA3LCA1OTgxMiwgNTk4MTcsIDE2NjE5LCA1OTgyMSwgMTA5MjEsIAorICAgIDE2NDAsIDEwOTI2LCA1OTgyNywgNTk4MzIsIDU5ODM4LCA1OTg0MywgNTk4NDgsIDU5ODUzLCA1OTg1OCwgNTk4NjMsIAorICAgIDU5ODY4LCA1OTg3MywgNTk4NzksIDU5ODg1LCA1OTg5MSwgNTk4OTYsIDU5OTAwLCA1OTkwNSwgNTk5MTAsIDU5OTE0LCAKKyAgICA1OTkxOSwgNTk5MjQsIDU5OTI5LCA1OTkzMywgNTk5MzgsIDU5OTQ0LCA1OTk0OSwgNTk5NTQsIDU5OTU4LCA1OTk2MywgCisgICAgNTk5NjgsIDU5OTc0LCA1OTk3OSwgNTk5ODQsIDU5OTkwLCA1OTk5NiwgNjAwMDEsIDYwMDA1LCA2MDAxMCwgNjAwMTUsIAorICAgIDYwMDIwLCA2MDAyNCwgNjAwMjksIDYwMDM0LCA2MDAzOSwgNjAwNDUsIDYwMDUxLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCAKKyAgICA2MDA2OSwgNjAwNzQsIDYwMDc5LCAyOTEyOSwgNjAwODMsIDYwMDg4LCA2MDA5MywgNjAwOTksIDYwMTA0LCA2MDEwOSwgCisgICAgNjAxMTMsIDYwMTE4LCA2MDEyMywgNjAxMjksIDYwMTM0LCA2MDEzOSwgNjAxNDUsIDYwMTUxLCA2MDE1NiwgNjAxNjAsIAorICAgIDYwMTY1LCA2MDE3MCwgNjAxNzQsIDYwMTc5LCA2MDE4NCwgNjAxODksIDYwMTk1LCA2MDIwMSwgNjAyMDYsIDYwMjEwLCAKKyAgICA2MDIxNSwgNjAyMjAsIDYwMjI0LCA2MDIyOSwgNjAyMzQsIDYwMjM5LCA2MDI0MywgNjAyNDYsIDMxNjM5LCA2MDI1MSwgCisgICAgNjAyNTksIDE2Njg1LCAzNjYzLCAxMTAxNywgNjAyNjUsIDYwMjc1LCA2MDI5MCwgMTEwMjIsIDYwMzAxLCA2MDMwNiwgCisgICAgNjAzMTcsIDYwMzI5LCA2MDM0MSwgNjAzNTMsIDI2OTUsIDYwMzY1LCA2MDM3MCwgNjAzODIsIDYwMzg2LCA2MDM5MiwgCisgICAgNjAzOTgsIDYwNDAzLCAxNjUyLCAxMDc4LCA2MDQxMiwgNjA0MTcsIDM5MzA5LCA2MDQyMSwgNjA0MjUsIDYwNDMwLCAKKyAgICA2MDQzNCwgMTY3NzAsIDYwNDM5LCA2MDQ0MiwgNjA0NTAsIDYwNDU4LCAxNjU2LCAxMTA0NywgMTEwNTMsIDE2NjEsIAorICAgIDYwNDY2LCA2MDQ3MywgNjA0NzgsIDYwNDg3LCA2MDQ5NywgNjA1MDQsIDYwNTA5LCA2MDUxNCwgMTY2NiwgNjA1MjEsIAorICAgIDYwNTI2LCAxNjg4NSwgNjA1MzAsIDYwNTM1LCA2MDU0MiwgNjA1NDgsIDYwNTUyLCA2MDU2MywgNjA1NzMsIDE2OTA3LCAKKyAgICA5MjM0LCA5MjQxLCAxNjcxLCA2MDU4MCwgNjA1ODYsIDYwNTk0LCA2MDYwMSwgNjA2MDcsIDYwNjE0LCA2MDYyNiwgNjA2MzIsIAorICAgIDYwNjM3LCA2MDY0OSwgNjA2NjAsIDYwNjY5LCA2MDY3OSwgMzc0MCwgMzA4MTMsIDMwODIyLCAxNjk0NywgMTY3NiwgMTY4MCwgCisgICAgNjA2ODcsIDYwNjk4LCA2MDcwMywgMTY4MywgNjA3MTEsIDYwNzE2LCAxNjk5OCwgNjA3MjgsIDYwNzM0LCA2MDczOSwgCisgICAgNjA3NDcsIDE2ODgsIDYwNzUyLCA2MDc1NywgNjA3NjUsIDYwNzczLCA2MDc4MCwgNjA3ODksIDYwNzk3LCA2MDgwNiwgCisgICAgMTY5MywgNjA4MTAsIDE2OTgsIDYwODE1LCA2MDgyMiwgMTcwNzIsIDYwODMwLCA2MDgzNiwgNjA4NDEsIDYwODQ5LCAKKyAgICA2MDg1NiwgNjA4NjQsIDIyNTc0LCA2MDg2OSwgMTExODIsIDYwODc4LCA2MDg4NCwgNjA4OTEsIDYwODk4LCA2MDkwNCwgCisgICAgNjA5MTQsIDYwOTIwLCA2MDkyNSwgNjA5MzYsIDYwOTQxLCA2MDk0OSwgMTExOTEsIDExMTk2LCA2MDk1NywgNjA5NjMsIAorICAgIDYwOTcxLCAzODA1LCAxNzExNCwgMzkzOTcsIDYwOTc2LCA2MDk4MiwgNjA5ODcsIDYwOTk1LCA2MTAwMiwgMTIwMzYsIAorICAgIDYxMDA3LCA2MTAxMywgMTcwOSwgNjEwMTgsIDYxMDIxLCAxMTMyLCA2MTAyNywgNjEwMzIsIDYxMDM3LCA2MTA0MywgCisgICAgNjEwNDgsIDYxMDUzLCA2MTA1OCwgNjEwNjMsIDYxMDY4LCA2MTA3MywgMTcxOCwgOSwgNjEwNzksIDYxMDgzLCA2MTA4OCwgCisgICAgNjEwOTIsIDYxMDk2LCA2MTEwMCwgMzE4NzksIDYxMTA1LCA2MTExMCwgNjExMTUsIDYxMTE5LCA2MTEyMiwgNjExMjYsIAorICAgIDYxMTMwLCA2MTEzNSwgNjExMzksIDYxMTQ0LCA2MTE0OCwgMzQ2MTYsIDM0NjIxLCAzNDYyNiwgNjExNTEsIDYxMTU4LCAKKyAgICA2MTE2NCwgMzkxMTgsIDYxMTc0LCAzNDYzMiwgMzIxMzcsIDMxODk0LCAzMTkwMCwgMzQ2NDgsIDMxOTA2LCA2MTE3OSwgCisgICAgNjExODQsIDMyMTcwLCA2MTE4OCwgNjExOTEsIDYxMTk1LCA2MTIwMiwgNjEyMDUsIDYxMjEwLCA2MTIxNCwgNjEyMTgsIAorICAgIDYxMjIxLCA2MTIzMSwgNjEyNDMsIDYxMjUwLCA2MTI1NiwgNjEyNjMsIDMzNTczLCA2MTI2NiwgODU0MywgODc3LCA2MTI2OSwgCisgICAgNjEyNzMsIDYxMjc4LCAzNjkwLCA2MTI4MiwgNjEyODUsIDEzNjMyLCA2MTI5MiwgNjEyOTksIDYxMzEyLCA2MTMyMCwgCisgICAgNjEzMjksIDYxMzM4LCA2MTM0MywgNjEzNTMsIDYxMzY2LCA2MTM3OCwgNjEzODUsIDYxMzkwLCA2MTM5OSwgNjE0MTIsIAorICAgIDM2MDYwLCA2MTQzMCwgNjE0MzUsIDYxNDQyLCA2MTQ0OCwgNjU2LCA2MTQ1MywgNjE0NjEsIDYxNDY4LCAyNzI3MSwgNjI3LCAKKyAgICA2MTQ3NCwgNjE0ODAsIDYxNDkwLCA2MTQ5NiwgNjE1MDEsIDMxOTI0LCA2MDAzLCAzMTkzOCwgNjE1MDUsIDYxNTE1LCAKKyAgICA2MTUyMCwgNjE1MzAsIDYxNTQ1LCA2MTU1MSwgNjE1NTcsIDMxOTQ4LCA2MTU2MiwgMzEwOTQsIDYxNTY2LCA2MTU3MSwgCisgICAgNjE1NzYsIDYxNTgwLCA2MTU4NSwgMTY5NTAsIDYxNTkyLCA2MTU5NywgNjE2MDEsIDYwNDQsIDMxOTc0LCA2MTYwNSwgCisgICAgNjE2MTEsIDMxMiwgNjE2MjEsIDYxNjI4LCA2MTYzNSwgNjE2NDAsIDYxNjQ5LCA1ODgwNiwgNjE2NTUsIDYxNjYzLCAKKyAgICA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODQsIDYxNjg4LCA2MTY5NCwgNjE3MDIsIDYxNzA3LCA2MTcxMiwgCisgICAgNjE3MTYsIDYxNzIxLCA2MTcyNSwgNjE3MjksIDYxNzM1LCA2MTc0MSwgNjE3NDYsIDYxNzUwLCAzMjA5OCwgNjE3NTUsIAorICAgIDMyMTA0LCAzMjExMCwgNjE3NjAsIDYxNzY2LCA2MTc3MywgNjE3NzgsIDYxNzgyLCAzMTExMSwgMTY2MTIsIDYxNzg1LCAKKyAgICA2MTc4OSwgNjE3OTQsIDYxODAxLCA2MTgwNywgNjE4MTEsIDYxODE2LCAzODgyOCwgNjE4MjIsIDYxODI2LCA2MTgzMCwgCisgICAgNjE4MzUsIDYxODQxLCA2MTg0NywgNjE4NTksIDYxODY4LCA2MTg3OCwgNjE4ODQsIDYxODkxLCA2MTg5NiwgNjE5MDEsIAorICAgIDYxOTA1LCA2MTkwOCwgNjE5MTQsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM4LCA2MTk0NSwgNjE5NTEsIDYxOTU2LCAKKyAgICA2MTk2MSwgNjE5NjksIDMyMTE1LCAyNDIzLCA2MTk3NCwgNjE5NzksIDYxOTg1LCA2MTk5MCwgNjE5OTYsIDYyMDAxLCAKKyAgICA2MjAwNiwgNjIwMTEsIDYyMDE3LCAzMjEzNiwgNjIwMjIsIDYyMDI4LCA2MjAzNCwgNjIwNDAsIDMyMjAwLCA2MjA0NSwgCisgICAgNjIwNTAsIDYyMDU1LCAzMjIxMSwgNjIwNjAsIDYyMDY1LCA2MjA3MCwgNjIwNzYsIDYyMDgyLCAzMjIxNiwgNjIwODcsIAorICAgIDYyMDkyLCA2MjA5NywgMzIyNzEsIDMyMjc3LCA2MjEwMiwgNjIxMDcsIDMyMjgyLCA2MjExMiwgMjc5NTgsIDMyMzA0LCAKKyAgICAzMjMwOCwgNjIxMTcsIDYyMDkzLCA2MjEyMSwgNjIxMjksIDYyMTM1LCA2MjE0MywgNjIxNTAsIDYyMTU2LCA2MjE2NiwgCisgICAgNjIxNzIsIDYyMTc5LCAxMDYzMSwgMzIzMjIsIDYyMTg1LCA2MjE5OCwgNjIyMDcsIDYyMjEzLCA2MjIyMiwgNjIyMjgsIAorICAgIDIzNTEyLCA2MjIzNSwgNjIyNDIsIDYyMjUyLCAzMjI3MiwgNjIyNTUsIDYyMjYyLCA2MjI2NywgNjIyNzEsIDYyMjc1LCAKKyAgICA2MjI4MCwgNjEyMCwgNjIyODQsIDYyMjg5LCA2MjI5NCwgMzQ3MTAsIDM0NzE1LCA2MjI5OCwgMzQ3MjksIDYyMzAzLCAKKyAgICAzNDczNCwgNjIzMDgsIDYyMzE0LCAzNDc0NiwgMzQ3NTIsIDM0NzU4LCA2MjMxOSwgNjIzMjUsIDIyNTM5LCA2MjMzNiwgCisgICAgNjIzMzksIDYyMzUxLCA2MjM1OSwgMzIzNDUsIDYyMzYzLCA2MjM3MiwgNjIzODIsIDYyMzkxLCAzMjM1NSwgNjIzOTYsIAorICAgIDYyNDAzLCA2MjQxMiwgNjI0MTgsIDYyNDI2LCA2MjQzMywgNjA5NSwgNDM5NywgNjI0MzgsIDMyMjgzLCA2MjQ0NCwgCisgICAgNjI0NDcsIDYyNDUzLCA2MjQ2MCwgNjI0NjUsIDYyNDcwLCAyMzQyMiwgNjI0NzQsIDYyNDgwLCA2MjQ4NiwgNjI0OTEsIAorICAgIDYyNDk2LCA2MjUwMCwgNjI1MDYsIDYyNTEyLCAzMzQ4MywgODYzLCAzNTcyMywgMzY2NDQsIDM2NjUwLCAzMjM5MSwgCisgICAgNjI1MTcsIDYyNTIxLCA2MjUyNSwgNjI1MjgsIDYyNTQxLCA2MjU0NywgNjI1NTEsIDYyNTU0LCA2MjU1OSwgMzM3ODYsIAorICAgIDYyNTYzLCAzMTExNiwgMjEyODcsIDYyNTY5LCA2MDI0LCA2MDMyLCA5MDc1LCA2MjU3MiwgNjI1NzcsIDYyNTgyLCA2MjU4NywgCisgICAgNjI1OTIsIDYyNTk3LCA2MjYwMiwgNjI2MDcsIDYyNjEyLCA2MjYxNywgNjI2MjMsIDYyNjI4LCA2MjYzMywgNjI2MzksIAorICAgIDYyNjQ0LCA2MjY0OSwgNjI2NTQsIDYyNjU5LCA2MjY2NCwgNjI2NjksIDYyNjc1LCA2MjY4MCwgNjI2ODYsIDYyNjkxLCAKKyAgICA2MjY5NiwgNjI3MDEsIDYyNzA2LCA2MjcxMSwgNjI3MTYsIDYyNzIxLCA2MjcyNiwgNjI3MzEsIDYyNzM2LCA2Mjc0MiwgCisgICAgNjI3NDcsIDYyNzUyLCA2Mjc1NywgNjI3NjIsIDYyNzY3LCA2Mjc3MiwgNjI3NzgsIDYyNzgzLCA2Mjc4OCwgNjI3OTMsIAorICAgIDYyNzk4LCA2MjgwMywgNjI4MDgsIDYyODEzLCA2MjgxOCwgNjI4MjMsIDYyODI5LCA2MjgzNCwgNjI4MzksIDYyODQ0LCAKKyAgICA2Mjg0OSwgNjI4NTUsIDYyODYxLCA2Mjg2NiwgNjI4NzIsIDYyODc3LCA2Mjg4MiwgNjI4ODcsIDYyODkyLCA2Mjg5NywgCisgICAgMTUxMywgMjQ1LCA2MjkwMiwgNjI5MDYsIDYyOTEwLCA2MjkxNCwgMjUxMzMsIDYyOTE4LCA2MjkyMiwgNjI5MjcsIDYyOTMxLCAKKyAgICA2MjkzNiwgNjI5NDAsIDYyOTQ1LCA2Mjk1MCwgNjI5NTUsIDYyOTU5LCA2Mjk2MywgNjI5NjgsIDYyOTcyLCAxMzM2OSwgCisgICAgNjI5NzcsIDYyOTgxLCA2Mjk4OCwgNjI5OTgsIDE1MjA2LCA2MzAwNywgNjMwMTYsIDYzMDIwLCA2MzAyNSwgNjMwMzAsIAorICAgIDYzMDM0LCAyNDkyNCwgMzAxOSwgNjMwMzgsIDYzMDQ0LCAxNzM2MywgNjMwNDgsIDYzMDU3LCA2MzA2NSwgNjMwNzEsIAorICAgIDYzMDgzLCA2MzA5NSwgNjMwOTksIDYzMTA0LCA2MzEwOCwgNjMxMTQsIDYzMTIwLCA2MzEyNSwgNjMxMzUsIDYzMTQ1LCAKKyAgICA2MzE1MSwgNjMxNTYsIDYzMTYwLCA2MzE2NSwgNjMxNzEsIDYzMTgwLCA2MzE4OSwgNjMxOTcsIDE1NTYwLCA2MzIwMSwgCisgICAgNjMyMTAsIDYzMjE4LCA2MzIzMCwgNjMyNDEsIDYzMjUyLCA2MzI2MSwgNjMyNjUsIDYzMjc0LCA2MzI4NCwgNjMyOTIsIAorICAgIDYzMjk4LCA2MzMwMywgNjMzMDksIDYzMzE0LCA5OCwgMzA5MjUsIDYzMzI1LCAyNjI2NiwgMjYyNzYsIDYzMzMxLCA2MzMzOCwgCisgICAgNjMzNDQsIDYzMzQ4LCA2MzM1OCwgNjMzNjksIDYzMzc3LCA2MzM4NiwgNjMzOTEsIDYzMzk2LCA2MzQwMCwgMTczMTcsIAorICAgIDYzNDA4LCA2MzQxMiwgNjM0MTgsIDYzNDI4LCA2MzQzNSwgNjM0NDEsIDM0ODA5LCA2MzQ0NywgNjM0NDksIDYzNDUyLCAKKyAgICA2MzQ1NiwgNjM0NjYsIDYzNDcyLCA2MzQ3OSwgMTMzMTUsIDYzNDg2LCA2MzQ5MiwgNjM1MDEsIDYzNTEwLCA2MzUxNiwgCisgICAgNjM1MjIsIDYzNTI4LCA2MzUzMywgNjM1NDAsIDYzNTQ3LCA2MzU1MywgNjM1NjYsIDYzNTc1LCA2MzU4NCwgNjM1ODksIAorICAgIDYzNTkzLCA2MzU5OSwgNjM2MDYsIDYzNjEzLCA2MzYyMCwgNjM2MjcsIDYzNjM0LCA2MzYzOSwgNjM2NDMsIDYzNjQ3LCAKKyAgICA2MzY1MCwgNjM2NjAsIDYzNjY0LCA2MzY3NiwgNjM2ODUsIDYzNjg5LCA2MzY5NCwgNjM2OTgsIDYzNzA0LCA2MzcwOSwgCisgICAgNjM3MTYsIDYzNzI1LCA2MzczMywgNjM3NDEsIDYzNzQ2LCA2Mzc1MCwgNjM3NTUsIDYzNzYwLCA2Mzc3MCwgNjM3NzgsIAorICAgIDYzNzgzLCA2Mzc4NywgNjM3OTEsIDYzNzk3LCA2MzgwOSwgNjM4MTcsIDYzODI3LCA2MzgzNCwgNjM4NDAsIDYzODQ1LCAKKyAgICA2Mzg0OSwgNjM4NTMsIDYzODU3LCA2Mzg2NiwgNjM4NzUsIDYzODg0LCA2Mzg5MCwgNjM4OTYsIDYzOTAyLCA2MzkwNywgCisgICAgNjM5MTQsIDYzOTIwLCA2MzkyOCwgNjM5MzUsIDEyNDYzLCA2Mzk0MSwgNjM5NDcsIDYzOTUxLCAxNDI0NCwgNjM5NTUsIAorICAgIDYzOTYwLCA2Mzk3MCwgNjM5NzksIDYzOTg1LCA2Mzk5MSwgNjM5OTksIDY0MDA2LCA2NDAxMCwgNjQwMTQsIDY0MDIwLCAKKyAgICA2NDAyOCwgNjQwMzUsIDY0MDQxLCA2NDA1MiwgNjQwNTYsIDY0MDYwLCA2NDA2NCwgNjQwNjcsIDY0MDczLCA2NDA3OCwgCisgICAgNjQwODIsIDY0MDg2LCA2NDA5NSwgNjQxMDMsIDY0MTEwLCA2NDExNiwgNjQxMjMsIDI0MDQ2LCAzODg3MCwgNjQxMjgsIAorICAgIDY0MTM2LCA2NDE0MCwgNjQxNDQsIDY0MTQ3LCA2NDE1NSwgNjQxNjIsIDY0MTY4LCA2NDE3NywgNjQxODUsIDY0MTkxLCAKKyAgICA2NDE5NiwgNjQyMDAsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE4LCA2NDIyNywgNjQyMzEsIDY0MjM4LCA2NDI0NSwgCisgICAgNjQyNTEsIDY0MjU5LCA2NDI2NSwgNjQyNzYsIDY0Mjg0LCA2NDI5MCwgMjI2NjksIDY0Mjk5LCA2NDMwNiwgNjQzMTMsIAorICAgIDY0MzIwLCA2NDMyNywgNjQzMzQsIDQxOTA3LCAxMzE1MywgNjQzNDEsIDY0MzQ4LCA2NDM1MywgMzQ4NDUsIDYyMTcsIAorICAgIDY0MzU5LCA2NDM2NCwgNjQzNjksIDY0Mzc1LCA2NDM4MSwgNjQzODcsIDY0MzkyLCA2NDM5NywgNjQ0MDIsIDY0NDA3LCAKKyAgICA2NDQxMywgNjQ0MTgsIDY0NDI0LCA2NDQyOSwgNjQ0MzUsIDY0NDQwLCA2NDQ0NSwgNjQ0NTAsIDY0NDU1LCA2NDQ2MCwgCisgICAgNjQ0NjUsIDY0NDcwLCA2NDQ3NiwgNjQ0ODEsIDY0NDg3LCA2NDQ5MiwgNjQ0OTcsIDY0NTAyLCA2NDUwNywgNjQ1MTIsIAorICAgIDY0NTE3LCA2NDUyMywgNjQ1MjgsIDY0NTMzLCA2NDUzOCwgNjQ1NDMsIDY0NTQ4LCA2NDU1MywgNjQ1NTgsIDY0NTYzLCAKKyAgICA2NDU2OCwgNjQ1NzMsIDY0NTc5LCA2NDU4NCwgNjQ1ODksIDY0NTk0LCA2NDU5OSwgNjQ2MDQsIDY0NjA5LCA2NDYxNCwgCisgICAgNjQ2MTksIDY0NjI1LCA2NDYzMCwgNjQ2MzUsIDY0NjQwLCA2NDY0NSwgNjQ2NTAsIDY0NjU1LCA2NDY2MCwgNjQ2NjUsIAorICAgIDY0NjcwLCA2NDY3NSwgNjQ2ODAsIDY0Njg1LCA2NDY5MSwgMTgzNCwgMjI0LCAzNzQ0NiwgNjQ2OTYsIDY0Njk5LCA2NDcwNCwgCisgICAgNjQ3MDgsIDY0NzExLCA2NDcxNiwgNjM3MzcsIDY0NzI3LCA2NDczNywgNjQ3NDQsIDY0NzYwLCA2NDc2OSwgNjQ3NzksIAorICAgIDY0Nzg5LCA2NDc5NywgNjQ4MTEsIDY0ODE5LCA2NDgyMywgNjQ4MjYsIDY0ODMzLCA2NDgzOSwgNjQ4NTAsIDY0ODYyLCAKKyAgICA2NDg3MywgNjQ4ODIsIDY0ODg5LCAxMjk3LCAyMzMxMSwgNjQ4OTksIDI1OTAsIDY0OTAzLCA2NDkxMiwgMTEzOCwgMTcyOTAsIAorICAgIDM4MDgzLCA2NDkyMCwgNjQ5MjgsIDY0OTQyLCA2NDk1NSwgNjQ5NTksIDY0OTY0LCA2NDk2OSwgNjQ5NzQsIDY0OTgwLCAKKyAgICA2NDk4NiwgNjQ5OTEsIDg1MzUsIDY0OTk2LCA2NTAwMCwgNjUwMDgsIDExMDQ4LCA2NTAxMywgNjUwMTksIDY1MDI4LCAKKyAgICAxNzIxLCAxMTA2MCwgNzM2LCA2NTAzMiwgNjUwNDEsIDY1MDUxLCAyNzAzMCwgNjUwNjAsIDY1MDY2LCAxNjg2MiwgNjUwNzIsIAorICAgIDY1MDc2LCAzOTY0LCAxMTM5MSwgNjUwODIsIDY1MDg5LCA2MDY5MywgNjUwOTMsIDY1MDk3LCAzOTg4LCAxODksIDE0MTU5LCAKKyAgICA2NTEwMywgNjUxMTUsIDY1MTE5LCA2NTEyNSwgMjc3NTEsIDY1MTI5LCAxMTM3OSwgMjczMCwgNCwgNjUxMzQsIDY1MTQ0LCAKKyAgICA2NTE1MCwgNjUxNjEsIDY1MTY4LCA2NTE3NCwgNjUxODAsIDY1MTg4LCA2NTE5NSwgNjUyMDEsIDY1MjExLCA2NTIyMSwgCisgICAgNjUyMzEsIDIzNDk5LCAxMzA5LCA2NTI0MCwgNjUyNDQsIDY1MjQ4LCA2NTI1NCwgNjUyNTgsIDI3NTMsIDI3NTksIDg1MzIsIAorICAgIDIyNjQsIDY1MjYyLCA2NTI2NiwgNjUyNzUsIDY1MjgzLCA2NTI5NCwgNjUzMDIsIDY1MzEwLCA2NTMxNiwgNjUzMjEsIAorICAgIDY1MzMyLCA2NTM0MywgNjUzNTEsIDY1MzU3LCA5Njk0LCA2NTM2MiwgNjUzNzAsIDY1Mzc0LCA2NTM3OCwgNjUzODIsIAorICAgIDY1Mzk0LCAyODEzNiwgNjU0MDEsIDY1NDExLCA2NTQxNywgNjU0MjMsIDk3OTYsIDY1NDMzLCA2NTQ0NCwgNjU0NTQsIAorICAgIDY1NDYzLCA2NTQ2NywgNjU0NzQsIDExNDAsIDExNzAsIDY1NDg0LCA2NTQ4OSwgNjU0OTcsIDY1NTA1LCA2NTUxNiwgCisgICAgNjU1MjMsIDY1NTM3LCAxNDA4OCwgMzkzLCA2NTU0NywgNjU1NTEsIDY1NTU5LCA2NTU2OCwgNjU1NzYsIDY1NTgyLCAKKyAgICA2NTU5NiwgNjU2MDMsIDY1NjA5LCA2NTYxOCwgNjU2MjUsIDY1NjM1LCA2NTY0MywgMzgxMiwgMTU2LCA2NTY1MSwgNjU2NjIsIAorICAgIDY1NjY2LCA2NTY3OCwgMjc5NDksIDE2MSwgNjU2ODQsIDY1Njg5LCA2NTY5MywgNjU3MDAsIDY1NzA2LCA2NTcxNCwgCisgICAgNjU3MjEsIDg4MTgsIDY1NzI4LCA2NTczNywgNjU3NDUsIDM4NzgsIDY1NzU4LCA4MTk5LCA2NTc2MiwgMjc5OCwgNDQzLCAKKyAgICA2NTc2NywgNjU3ODAsIDY1Nzg1LCAxODMzLCA2NTAsIDY1Nzg5LCAzODk1LCA2NTc5NywgNjU4MDMsIDY1ODA3LCA5MzEsIAorICAgIDY1ODE3LCA2NTgyNiwgNjU4MzEsIDE0OTI4LCAxNDkzNSwgNDUyNjksIDY1ODM1LCAzODIyLCAxMzA0MSwgNjU4NDMsIAorICAgIDY1ODUwLCAyMzU1NSwgNjU4NTQsIDY1ODYxLCA2NTg2NywgNjU4NzIsIDY1ODc3LCAxNDk0OCwgMzcyLCA2NTg4MiwgCisgICAgNjU4OTQsIDY1OTAwLCA2NTkwOCwgMjgxMCwgMTc1MywgNjU5MTYsIDY1OTE4LCA2NTkyMywgNjU5MjgsIDY1OTMzLCAKKyAgICA2NTkzOSwgNjU5NDQsIDY1OTQ5LCA2NTk1NCwgNjU5NTksIDY1OTY0LCA2NTk2OSwgNjU5NzUsIDY1OTgwLCA2NTk4NSwgCisgICAgNjU5OTAsIDY1OTk1LCA2NjAwMCwgNjYwMDUsIDY2MDEwLCA2NjAxNSwgNjYwMjEsIDY2MDI2LCA2NjAzMSwgNjYwMzYsIAorICAgIDY2MDQyLCA2NjA0NywgNjYwNTMsIDY2MDU4LCA2NjA2MywgNjYwNjgsIDY2MDczLCA2NjA3OCwgNjYwODMsIDY2MDg4LCAKKyAgICA2NjA5NCwgNjYwOTksIDY2MTA1LCA2NjExMCwgNjYxMTUsIDY2MTIwLCA2NjEyNSwgNjYxMzAsIDY2MTM1LCA2NjE0MCwgCisgICAgNjYxNDUsIDY2MTUxLCA2NjE1NiwgNjYxNjEsIDY2MTY2LCA2NjE3MCwgNjYxNzQsIDY2MTc5LCA2NjE4MywgNjYxODgsIAorICAgIDY2MTkzLCA2NjE5OSwgNjYyMDQsIDY2MjA4LCA2NjIxMywgNjYyMTcsIDY2MjIwLCA2NjIyMiwgNjYyMjYsIDY2MjI5LCAKKyAgICA2NjIzNCwgNjYyMzgsIDY2MjQyLCA2NjI0NiwgNjYyNTAsIDY2MjU5LCA2NjI2MywgMzI1NDksIDY2MjY2LCAzMjU1NCwgCisgICAgNjYyNzMsIDY2Mjc4LCAzMjU1OSwgNjYyODcsIDY2Mjk2LCAzMjU2NSwgNjYzMDEsIDMyNTcwLCA2NjMxMCwgNjYzMTUsIAorICAgIDExNTc4LCA2NjMxOSwgNjYzMjQsIDY2MzI5LCAzMjU3NSwgNjYzMzMsIDQwMjI1LCA2NjMzNywgNjYzNDAsIDY2MzQ0LCAKKyAgICA4MjExLCA2NjM1MCwgNjYzNTUsIDY2MzU5LCAzNzA1LCAzMjU4MCwgNjYzNjIsIDY2MzY2LCA2NjM2OSwgNjYzNzQsIAorICAgIDY2Mzc4LCA2NjM4NCwgNjYzOTIsIDY2NDA1LCA2NjQxNCwgNjY0MjAsIDY2NDI1LCA2NjQzMSwgNjY0MzUsIDY2NDQxLCAKKyAgICA2NjQ0OSwgNjY0NTQsIDY2NDU4LCA2NjQ2NSwgNjY0NzEsIDY2NDc5LCA2NjQ4OCwgNjY0OTYsIDMyNTgzLCA2NjUwMywgCisgICAgNjY1MTMsIDY2NTIyLCA2NjUzNSwgNjY1NDAsIDY2NTQ1LCA2NjU1NCwgNjY1NjAsIDY2NTY3LCA2NjU3OCwgNjY1OTAsIAorICAgIDY2NTk3LCA2NjYwNiwgNjY2MTUsIDY2NjI0LCA2NjYzMSwgNjY2MzcsIDY2NjQ0LCA2NjY1MiwgNjY2NTksIDY2NjY3LCAKKyAgICA2NjY3NiwgNjY2ODQsIDY2NjkxLCA2NjY5OSwgNjY3MDgsIDY2NzE2LCA2NjcyNSwgNjY3MzUsIDY2NzQ0LCA2Njc1MiwgCisgICAgNjY3NTksIDY2NzY3LCA2Njc3NiwgNjY3ODQsIDY2NzkzLCA2NjgwMywgNjY4MTIsIDY2ODIwLCA2NjgyOSwgNjY4MzksIAorICAgIDY2ODQ4LCA2Njg1OCwgNjY4NjksIDY2ODc5LCA2Njg4OCwgNjY4OTYsIDY2OTAzLCA2NjkxMSwgNjY5MjAsIDY2OTI4LCAKKyAgICA2NjkzNywgNjY5NDcsIDY2OTU2LCA2Njk2NCwgNjY5NzMsIDY2OTgzLCA2Njk5MiwgNjcwMDIsIDY3MDEzLCA2NzAyMywgCisgICAgNjcwMzIsIDY3MDQwLCA2NzA0OSwgNjcwNTksIDY3MDY4LCA2NzA3OCwgNjcwODksIDY3MDk5LCA2NzEwOCwgNjcxMTgsIAorICAgIDY3MTI5LCA2NzEzOSwgNjcxNTAsIDY3MTYyLCA2NzE3MywgNjcxODMsIDY3MTkyLCA2NzIwMCwgNjcyMDcsIDY3MjE1LCAKKyAgICA2NzIyNCwgNjcyMzIsIDY3MjQxLCA2NzI1MSwgNjcyNjAsIDY3MjY4LCA2NzI3NywgNjcyODcsIDY3Mjk2LCA2NzMwNiwgCisgICAgNjczMTcsIDY3MzI3LCA2NzMzNiwgNjczNDQsIDY3MzUzLCA2NzM2MywgNjczNzIsIDY3MzgyLCA2NzM5MywgNjc0MDMsIAorICAgIDY3NDEyLCA2NzQyMiwgNjc0MzMsIDY3NDQzLCA2NzQ1NCwgNjc0NjYsIDY3NDc3LCA2NzQ4NywgNjc0OTYsIDY3NTA0LCAKKyAgICA2NzUxMywgNjc1MjMsIDY3NTMyLCA2NzU0MiwgNjc1NTMsIDY3NTYzLCA2NzU3MiwgNjc1ODIsIDY3NTkzLCA2NzYwMywgCisgICAgNjc2MTQsIDY3NjI2LCA2NzYzNywgNjc2NDcsIDY3NjU2LCA2NzY2NiwgNjc2NzcsIDY3Njg3LCA2NzY5OCwgNjc3MTAsIAorICAgIDY3NzIxLCA2NzczMSwgNjc3NDIsIDY3NzU0LCA2Nzc2NSwgNjc3NzcsIDY3NzkwLCA2NzgwMiwgNjc4MTMsIDY3ODIzLCAKKyAgICA2NzgzMiwgNjc4NDAsIDY3ODQ3LCA2Nzg1NSwgNjc4NjQsIDY3ODcyLCA2Nzg4MSwgNjc4OTEsIDY3OTAwLCA2NzkwOCwgCisgICAgNjc5MTcsIDY3OTI3LCA2NzkzNiwgNjc5NDYsIDY3OTU3LCA2Nzk2NywgNjc5NzYsIDY3OTg0LCA2Nzk5MywgNjgwMDMsIAorICAgIDY4MDEyLCA2ODAyMiwgNjgwMzMsIDY4MDQzLCA2ODA1MiwgNjgwNjIsIDY4MDczLCA2ODA4MywgNjgwOTQsIDY4MTA2LCAKKyAgICA2ODExNywgNjgxMjcsIDY4MTM2LCA2ODE0NCwgNjgxNTMsIDY4MTYzLCA2ODE3MiwgNjgxODIsIDY4MTkzLCA2ODIwMywgCisgICAgNjgyMTIsIDY4MjIyLCA2ODIzMywgNjgyNDMsIDY4MjU0LCA2ODI2NiwgNjgyNzcsIDY4Mjg3LCA2ODI5NiwgNjgzMDYsIAorICAgIDY4MzE3LCA2ODMyNywgNjgzMzgsIDY4MzUwLCA2ODM2MSwgNjgzNzEsIDY4MzgyLCA2ODM5NCwgNjg0MDUsIDY4NDE3LCAKKyAgICA2ODQzMCwgNjg0NDIsIDY4NDUzLCA2ODQ2MywgNjg0NzIsIDY4NDgwLCA2ODQ4OSwgNjg0OTksIDY4NTA4LCA2ODUxOCwgCisgICAgNjg1MjksIDY4NTM5LCA2ODU0OCwgNjg1NTgsIDY4NTY5LCA2ODU3OSwgNjg1OTAsIDY4NjAyLCA2ODYxMywgNjg2MjMsIAorICAgIDY4NjMyLCA2ODY0MiwgNjg2NTMsIDY4NjYzLCA2ODY3NCwgNjg2ODYsIDY4Njk3LCA2ODcwNywgNjg3MTgsIDY4NzMwLCAKKyAgICA2ODc0MSwgNjg3NTMsIDY4NzY2LCA2ODc3OCwgNjg3ODksIDY4Nzk5LCA2ODgwOCwgNjg4MTgsIDY4ODI5LCA2ODgzOSwgCisgICAgNjg4NTAsIDY4ODYyLCA2ODg3MywgNjg4ODMsIDY4ODk0LCA2ODkwNiwgNjg5MTcsIDY4OTI5LCA2ODk0MiwgNjg5NTQsIAorICAgIDY4OTY1LCA2ODk3NSwgNjg5ODYsIDY4OTk4LCA2OTAwOSwgNjkwMjEsIDY5MDM0LCA2OTA0NiwgNjkwNTcsIDY5MDY5LCAKKyAgICA2OTA4MiwgNjkwOTQsIDY5MTA3LCA2OTEyMSwgNjkxMzQsIDY5MTQ2LCA2OTE1NywgNjkxNjcsIDY5MTc2LCA2OTE4NCwgCisgICAgNjkxOTEsIDY5MTk2LCA4MDU4LCA2OTIwMywgMzI1OTMsIDY5MjA4LCA2OTIxMywgMzI1OTgsIDY5MjE5LCAyMDkyOSwgCisgICAgMzI2MDMsIDY5MjI0LCA2OTIzMCwgNjkyMzgsIDY5MjQ0LCA2OTI1MCwgNjkyNTcsIDY5MjY0LCA2OTI2OSwgNjkyNzMsIAorICAgIDY5Mjc2LCA2OTI4MCwgNjkyODksIDY5Mjk1LCA2OTMwNywgNjkzMTgsIDY5MzIyLCAzMDgxLCA4MDMzLCA2OTMyNywgCisgICAgNjkzMzAsIDY5MzMyLCA2OTMzNiwgNjkzNDAsIDY5MzQ0LCA2OTM1MCwgNjkzNTUsIDI1OTQ0LCA2OTM2MCwgNjkzNjQsIAorICAgIDY5MzY3LCA2OTM3MiwgNjkzNzYsIDY5MzgzLCA2OTM4OSwgNjkzOTMsIDYxNzAsIDY5Mzk3LCAzMjYyMCwgNjk0MDIsIAorICAgIDY5NDA5LCA2OTQxOCwgNjk0MjYsIDY5NDM3LCA2OTQ0NSwgNjk0NTMsIDY5NDYwLCA2OTQ2NywgNjk0NzMsIDY5NDg0LCAKKyAgICAzMjYyNSwgNjk0ODksIDY5NTAwLCA2OTUxMiwgNjk1MjAsIDY5NTMxLCA2OTU0MCwgNjk1NTEsIDY5NTU2LCA2OTU2NCwgCisgICAgMjU1NiwgNjk1NjksIDM0Mjk1LCA2OTU4MiwgNjk1ODYsIDY5NTk4LCA2OTYwNiwgNjk2MTEsIDY5NjE5LCAxNzQ4NSwgCisgICAgNjk2MzAsIDY5NjM2LCA2OTY0MywgNjk2NTEsIDY5NjU3LCAzMjYzNSwgNjk2NjIsIDM5MTQsIDU4MjU0LCA2OTY2OSwgCisgICAgNjk2NzIsIDY5NjgwLCA2OTY5MywgNjk3MDYsIDY5NzE5LCA2OTczMiwgNjk3MzksIDY5NzUwLCA2OTc1OSwgNDE3MjQsIAorICAgIDQxNzI5LCA2OTc2NCwgNjk3NjgsIDY5Nzc2LCA2OTc4MywgNjk3OTIsIDY5ODAwLCA2OTgwNiwgNjk4MTUsIDY5ODIzLCAKKyAgICA2OTgzMSwgNjk4MzUsIDY5ODQ0LCA2OTg1MywgNjk4NjMsIDY5ODc2LCA2OTg4OSwgNjk4OTksIDMyNjQwLCA2OTkwNSwgCisgICAgNjk5MTIsIDY5OTE4LCAzMjY0NiwgNjk5MjMsIDY5OTI2LCA2OTkzMCwgNjk5MzgsIDY5OTQ3LCA0MTQ2MiwgNjk5NTUsIAorICAgIDY5OTY0LCA2OTk3MiwgNjk5NzksIDY5OTg3LCA2OTk5NywgNzAwMDYsIDcwMDE1LCA3MDAyNCwgNzAwMzIsIDcwMDQzLCAKKyAgICA3MDA1MywgOTM2NiwgMjE1NjcsIDcwMDYyLCA3MDA2NywgNzAwNzIsIDcwMDc2LCA3MDA4MCwgNzAwODUsIDcwMDkxLCAKKyAgICA3MDA5NiwgNzAxMDEsIDcwMTA3LCA3MDExMiwgNzAxMTcsIDIxNTMyLCA3MDEyMiwgNzAxMjksIDcwMTM3LCA3MDE0NSwgCisgICAgNzAxNTAsIDcwMTU3LCA3MDE2NCwgNzAxNjksIDcwMTczLCA3MDE3NywgNzAxODUsIDcwMTkzLCAzMjY2MywgNzAxOTksIAorICAgIDcwMjA1LCA3MDIxNywgNzAyMjMsIDcwMjI3LCA3MDIzNCwgNzAyMzksIDcwMjUwLCA3MDI2MCwgNzAyNzAsIDcwMjgyLCAKKyAgICA3MDI4OCwgNzAyOTgsIDcwMzA4LCAzMjY5MCwgNzAzMTcsIDcwMzI2LCA3MDMzMiwgNzAzNDQsIDcwMzU1LCA3MDM2MiwgCisgICAgNzAzNjcsIDcwMzcxLCA3MDM3OSwgNzAzODUsIDcwMzkwLCA3MDM5NSwgNzA0MDIsIDcwNDEwLCA3MDQyMiwgNzA0MzIsIAorICAgIDcwNDQxLCA3MDQ1MCwgNzA0NTcsIDM0MTU3LCAyMzg1MSwgNzA0NjMsIDcwNDY4LCA3MDQ3MiwgNzA0NzYsIDcwNDgxLCAKKyAgICA3MDQ4NywgNzA0OTgsIDcwNTExLCA3MDUxNiwgNzA1MjMsIDMyNjk1LCA3MDUyOCwgNzA1NDAsIDcwNTQ5LCA3MDU1OSwgCisgICAgNzA1NzAsIDcwNTgzLCA3MDU5MCwgNzA1OTksIDcwNjA4LCA3MDYxNiwgNzA2MjEsIDcwNjI3LCAxMDY5LCA3MDYzMiwgCisgICAgNzA2MzcsIDcwNjQyLCA3MDY0NywgNzA2NTMsIDcwNjU4LCA3MDY2MywgNzA2NjksIDcwNjc1LCA3MDY4MCwgNzA2ODQsIAorICAgIDcwNjg5LCA3MDY5NCwgNzA2OTksIDU4NzY2LCA3MDcwNCwgNzA3MDksIDcwNzE0LCA3MDcxOSwgNzA3MjUsIDcwNzMxLCAKKyAgICA3MDczNiwgNzA3NDAsIDcwNzQ1LCA3MDc1MCwgNzA3NTUsIDcwNzYxLCA3MDc2NiwgNzA3NzIsIDcwNzc3LCA3MDc4MiwgCisgICAgNzA3ODcsIDcwNzkyLCA3MDc5NiwgNzA4MDIsIDcwODA3LCA3MDgxNiwgNzA4MjEsIDcwODI2LCA3MDgzMSwgNzA4MzYsIAorICAgIDcwODQwLCA3MDg0NywgNzA4NTMsIDE3MTM1LCAxNzE0MiwgNzA4NTgsIDcwODYyLCA3MDg2NiwgNzA4NzAsIDcwODc0LCAKKyAgICA0NTUyNCwgNzA4NzgsIDcwODA4LCA3MDg4MCwgNzA4OTAsIDMyNzA0LCA3MDg5MywgNzA5MDIsIDcwOTA4LCA2MTQzLCAKKyAgICAzMjcwOSwgNzA5MTIsIDcwOTE4LCA3MDkyMywgNzA5MjksIDcwOTM0LCA3MDkzOCwgNzA5NDUsIDcwOTUwLCA3MDk2MCwgCisgICAgNzA5NjksIDcwOTczLCA3MDk3OSwgNzA5ODUsIDcwOTkxLCA3MDk5NSwgNzEwMDMsIDcxMDEwLCA3MTAxOCwgNzEwMjYsIAorICAgIDMyNzE0LCA3MTAzMywgNzEwMzYsIDcxMDQzLCA3MTA0OSwgNzEwNTQsIDcxMDU4LCA3MTA2NCwgNzEwNzEsIDcxMDc2LCAKKyAgICA3MTA4MCwgNzEwODksIDcxMDk3LCA3MTEwMywgNzExMDgsIDMyNzE5LCA3MTExNSwgNzExMjIsIDcxMTI4LCA3MTEzMywgCisgICAgNzExMzksIDcxMTQ2LCA3MTE1MiwgMjEyOTQsIDI3NDU1LCA3MTE1OCwgNzExNjMsIDcxMTY5LCA3MTE4MSwgNzA4NDEsIAorICAgIDcwODQ4LCAyMTQ3MCwgNzExOTEsIDcxMTk2LCA3MTIwMywgNzEyMDksIDcxMjE2LCA3MTIyMiwgNzEyMzMsIDcxMjM4LCAKKyAgICA5MTEwLCA3MTI0NiwgNzEyNDksIDcxMjU1LCA3MTI1OSwgNzEyNjMsIDcxMjY2LCA3MTI3MiwgMzI0NjgsIDYxOTQsIDk2NCwgCisgICAgMTM0MTksIDcxMjc5LCA3MTI4NSwgNzEyOTEsIDcxMjk3LCA3MTMwMywgNzEzMDksIDcxMzE1LCA3MTMyMSwgNzEzMjcsIAorICAgIDcxMzMyLCA3MTMzNywgNzEzNDIsIDcxMzQ3LCA3MTM1MiwgNzEzNTcsIDcxMzYyLCA3MTM2NywgNzEzNzIsIDcxMzc3LCAKKyAgICA3MTM4MiwgNzEzODcsIDcxMzkyLCA3MTM5OCwgNzE0MDMsIDcxNDA4LCA3MTQxNCwgNzE0MTksIDcxNDI0LCA3MTQzMCwgCisgICAgNzE0MzYsIDcxNDQyLCA3MTQ0OCwgNzE0NTQsIDcxNDYwLCA3MTQ2NiwgNzE0NzIsIDcxNDc4LCA3MTQ4MywgNzE0ODgsIAorICAgIDcxNDk0LCA3MTQ5OSwgNzE1MDQsIDcxNTEwLCA3MTUxNSwgNzE1MjAsIDcxNTI1LCA3MTUzMCwgNzE1MzUsIDcxNTQwLCAKKyAgICA3MTU0NSwgNzE1NTAsIDcxNTU1LCA3MTU2MCwgNzE1NjUsIDcxNTcwLCA3MTU3NiwgNzE1ODEsIDcxNTg2LCA3MTU5MSwgCisgICAgNzE1OTcsIDcxNjAyLCA3MTYwNywgNzE2MTIsIDcxNjE3LCA3MTYyMywgNzE2MjgsIDcxNjMzLCA3MTYzOCwgNzE2NDMsIAorICAgIDcxNjQ4LCA3MTY1MywgNzE2NTgsIDcxNjYzLCA3MTY2OCwgNzE2NzMsIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCAKKyAgICA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MTgsIDcxNzI0LCA3MTcyOSwgNzE3MzQsIDcxNzM5LCA3MTc0NCwgCisgICAgNzE3NDksIDcxNzU0LCA3MTc1OSwgMTg2NCwgMTQyLCA3MTc2NCwgNzE3NjgsIDcxNzcyLCA3MTc3NywgNzE3ODUsIDcxNzg5LCAKKyAgICA3MTc5NiwgNzE4MDQsIDcxODA4LCA3MTgyMSwgNzE4MjksIDcxODMzLCA3MTgzNiwgNzE4NDEsIDcxODQ1LCA3MTg1MCwgCisgICAgNzE4NTQsIDcxODYyLCA3MTg2NiwgMjA5MzcsIDcxODcxLCA3MTg3NSwgNjA5NjcsIDcxODc5LCA3MTg4MiwgNzE4OTAsIAorICAgIDcxODk4LCA3MTkwNiwgNzE5MTEsIDcxOTE4LCA3MTkyNCwgNzE5MzAsIDcxOTM1LCA3MTk0MiwgNzE5NDcsIDcxOTU1LCAKKyAgICA2NDk0NywgNzE5NjIsIDcxOTY3LCA3MTk3MiwgNzE5NzYsIDExNjQ1LCA3MTk4MCwgNzE5ODUsIDcxOTkwLCA3MTk5NCwgCisgICAgNzE5OTcsIDcyMDAzLCA3MjAwNywgNzIwMTcsIDcyMDI2LCA3MjAyOSwgNzIwMzMsIDcyMDQwLCA3MjA1MywgNzIwNTksIAorICAgIDcyMDY3LCA3MjA3OCwgNzIwODksIDcyMTAwLCA3MjExMSwgNzIxMjAsIDcyMTI2LCA3MjEzNSwgNzIxNDMsIDcyMTUzLCAKKyAgICA3MjE2NiwgNzIxNzMsIDcyMTg0LCA3MjE5MCwgNzIxOTUsIDcyMjAwLCA3MjIwNiwgNzIyMTIsIDcyMjIyLCA3MjIzMSwgCisgICAgNzA1MzAsIDcyMjM5LCA3MjI0NSwgNzIyNTMsIDcyMjU5LCA3MjI2NywgNzIyNzAsIDcyMjc0LCA3MjI3OCwgNzIyODEsIAorICAgIDcyMjg3LCA3MjI5MywgNzIzMDEsIDcyMzEzLCA3MjMyNSwgNzIzMzIsIDcyMzM2LCA3MjM0NywgNzIzNTUsIDcyMzYyLCAKKyAgICA3MjM3NCwgNzIzODIsIDcyMzkwLCA3MjM5NywgNzI0MDMsIDcyNDEzLCA3MjQyMiwgNzI0MjcsIDcyNDM3LCA3MjQ0NiwgCisgICAgNDA3ODgsIDcyNDUzLCA3MjQ1NywgNzI0NjIsIDcyNDcwLCA3MjQ3NywgNzI0ODMsIDcyNDg3LCA3MjQ5NywgNzI1MDgsIAorICAgIDcyNTE2LCA3MjUyMywgNzI1MzUsIDcyNTQ3LCA3MjU1NiwgNjk1NzIsIDcyNTYzLCA3MjU3NCwgNzI1ODgsIDcyNTk2LCAKKyAgICA3MjYwNiwgNzI2MTMsIDcyNjIxLCA3MjYzMywgNzI2NDIsIDcyNjUwLCA3MjY2MCwgNzI2NzEsIDcyNjgzLCA3MjY5MiwgCisgICAgNzI3MDIsIDcyNzA5LCA3MjcxOCwgNzI3MzMsIDcyNzQxLCA3Mjc1MSwgNzI3NjAsIDcyNzY4LCA3Mjc4MSwgNzI3OTYsIAorICAgIDcyODAwLCA3MjgwOSwgNzI4MjEsIDcyODMyLCA3Mjg0MywgNzI4NTQsIDcyODY0LCA3Mjg3NSwgNzI4ODMsIDcyODg5LCAKKyAgICA3Mjg5OSwgNzI5MDcsIDcyOTEzLCAyOTAyOCwgNzI5MTgsIDcyOTI0LCA3MjkyOSwgNzI5MzYsIDk3MDgsIDE3NTA1LCAKKyAgICA3Mjk0MiwgNzI5NTEsIDcyOTU2LCA3Mjk2MCwgNzI5NjcsIDcyOTczLCA3Mjk3OCwgNzI5ODMsIDcyOTkxLCA3Mjk5OSwgCisgICAgNzMwMDMsIDczMDA2LCA3MzAwOSwgNzMwMTEsIDczMDE4LCA3MzAyNCwgNzMwMzUsIDczMDQwLCA3MzA0NCwgNzMwNTEsIAorICAgIDczMDU3LCA3MzA2MiwgNzMwNzAsIDY1NDQ2LCA2NTQ1NiwgNzMwNzYsIDczMDgzLCA3MzA5MywgMTA2MTgsIDczMTAwLCAKKyAgICA3MzEwNSwgMjkyMjQsIDczMTE0LCA3MzExOSwgNzMxMjYsIDczMTM2LCA3MzE0NCwgNzMxNTIsIDczMTYxLCA3MzE2NywgCisgICAgNzMxNzMsIDczMTgwLCA3MzE4NywgNzMxOTIsIDczMTk2LCA3MzIwNCwgNzMyMDksIDczMjE0LCA3MzIyMiwgNzMyMjksIAorICAgIDczMjM0LCA3MzI0MCwgNzMyNDMsIDczMjQ3LCA3MzI1NiwgNzE4MTYsIDczMjY1LCA3MzI2OSwgNzMyNzUsIDczMjg2LCAKKyAgICA3MzI5NiwgMTc1MTQsIDczMzA3LCA3MzMxNSwgMTc1MjYsIDczMzIyLCA3MzMyNiwgNzMzMzUsIDI3MzQxLCA3MzM0MiwgCisgICAgNzMzNDYsIDczMzUxLCA3MzM2OCwgNzMzODAsIDEwNTc2LCA3MzM5MiwgNzMzOTcsIDczNDAyLCA3MzQwNywgMjEwMTAsIAorICAgIDczNDExLCA3MzQxNiwgNzM0MjEsIDczNDI3LCA3MzQzMiwgNTg0NiwgMjEwMTQsIDczNDM3LCA3MzQ0MiwgNzM0NDgsIAorICAgIDczNDU1LCA3MzQ2MCwgNzM0NjUsIDczNDcxLCA3MzQ3NywgNzM0ODMsIDczNDg4LCA3MzQ5NCwgNzM0OTgsIDczNTEyLCAKKyAgICA3MzUyMCwgNzM1MjgsIDczNTM0LCA3MzUzOSwgNzM1NDYsIDczNTU2LCA3MzU2NSwgNzM1NzAsIDczNTc1LCA3MzU4MywgCisgICAgNzM1ODgsIDczNTk0LCA3MzU5OSwgNzM2MDgsIDU5ODIzLCA3MzYxMywgNzM2MTYsIDczNjM0LCA3MzY1MywgNzM2NjYsIAorICAgIDczNjgwLCA3MzY5NiwgNzM3MDMsIDczNzEwLCA3MzcxNiwgNzM3MjMsIDczNzI4LCA3MzczNCwgNzM3NDAsIDczNzQ4LCAKKyAgICA3Mzc1NCwgNzM3NTksIDczNzY0LCA3Mzc4MCwgMTA1ODksIDczNzk0LCA3MzgwMSwgNzM4MDksIDczODE1LCA3MzgxOSwgCisgICAgNzM4MjIsIDczODI3LCA3MzgzMiwgNzM4MzksIDczODQ0LCA3Mzg1MywgNzM4NTgsIDczODY0LCA3Mzg3MywgNzM4ODIsIAorICAgIDczODg3LCA3Mzg5MSwgNzM4OTksIDczOTA4LCAxMTY3NCwgNzM5MTcsIDczOTI1LCA3MzkzMCwgNzM5MzYsIDExNjg1LCAKKyAgICA3Mzk0MSwgNzM5NDQsIDczOTQ5LCA3Mzk1OSwgNzM5NjgsIDczOTczLCA3Mzk3OSwgNzM5ODQsIDczOTkyLCA3Mzk5OSwgCisgICAgNzQwMTAsIDc0MDIwLCA3NDAyNSwgNjQ4NzUsIDc0MDMwLCA3NDAzNiwgNzQwNDEsIDc0MDQ4LCA3NDA1NywgNzQwNjUsIAorICAgIDc0MDcxLCA3NDA3NywgNzQwODQsIDc0MDkwLCA3NDA5NCwgMTY5NjAsIDMwNTUsIDc0MDk5LCA3NDEwMywgNzQxMDcsIAorICAgIDc0MTEzLCA3NDEyMiwgNzQxMjgsIDc0MTM1LCA3NDEzOSwgNzQxNjAsIDc0MTgyLCA3NDE5OCwgNzQyMTUsIDc0MjM0LCAKKyAgICA3NDI0MywgNzQyNTMsIDc0MjYwLCA3NDI2NywgMjcyMjgsIDc0MjczLCA3NDI3NywgNzQyODUsIDc0Mjk3LCA3NDMwMywgCisgICAgNzQzMTEsIDc0MzE1LCA3NDMyMywgNzQzMzAsIDc0MzM0LCA3NDM0MCwgNzQzNDYsIDc0MzUxLCAzNTYzLCA0MTkyNCwgCisgICAgNzQzNTcsIDc0MzYxLCA3NDM2NSwgNzQzNjksIDc0Mzc0LCA3NDM3OSwgNzQzODQsIDc0MzkwLCA3NDM5NiwgNzQ0MDIsIAorICAgIDc0NDA5LCA3NDQxNSwgNzQ0MjIsIDc0NDI4LCA3NDQzNCwgNzQ0MzksIDc0NDQ1LCA3NDQ1MCwgNzQ0NTQsIDc0NDU5LCAKKyAgICA3NDQ2MywgNzQ0NjgsIDQxOTM5LCA3NDQ3MiwgNzQ0NzcsIDc0NDg1LCA3NDQ4OSwgNzQ0OTQsIDc0NTAxLCA3NDUxMCwgCisgICAgNzQ1MTYsIDc0NTIwLCA3NDUyNywgNzQ1MzEsIDc0NTM0LCA3NDU0MSwgNzQ1NTAsIDc0NTU1LCA3NDU1OSwgNzQ1NjcsIAorICAgIDc0NTc2LCA3NDU4MCwgNzQ1ODgsIDc0NTk0LCA3NDU5OSwgNzQ2MDQsIDc0NjEwLCA3NDYxNiwgNzQ2MjEsIDc0NjI1LCAKKyAgICA3NDYzMSwgNzQ2MzYsIDc0NjQwLCA3NDY0NCwgNzQ2NDcsIDc0NjUyLCA3NDY2MCwgNzQ2NzAsIDc0Njc1LCAzOTQxNiwgCisgICAgNzQ2ODMsIDc0Njk1LCA3NDY5OSwgNzQ3MDUsIDc0NzE3LCA3NDcyOCwgNzQ3MzUsIDc0NzQxLCA3NDc0OCwgNzQ3NjAsIAorICAgIDc0NzY3LCA3NDc3MywgMjEwODgsIDc0Nzc3LCA3NDc4MywgNzQ3OTAsIDc0Nzk2LCA3NDgwMiwgNzQ4MDcsIDc0ODEyLCAKKyAgICA3NDgxNywgNzQ4MjYsIDcwMzMsIDc0ODMxLCAxNjQyNiwgNzQ4MzcsIDc0ODQxLCA3NDg0NSwgNzQ4NDksIDc0ODU3LCAKKyAgICA3NDg2NiwgNzQ4NzAsIDc0ODc3LCA3NDg4NiwgNzQ4OTksIDc0OTA1LCA3NDQ2NCwgMzAwODgsIDc0OTEwLCA3NDkxMiwgCisgICAgNzQ5MTcsIDc0OTIyLCA3NDkyNywgNzQ5MzIsIDc0OTM3LCA3NDk0MiwgNzQ5NDcsIDc0OTUyLCA3NDk1NywgNzQ5NjIsIAorICAgIDc0OTY3LCA3NDk3MiwgNzQ5NzcsIDc0OTgyLCA3NDk4OCwgNzQ5OTMsIDc0OTk4LCA3NTAwMywgNzUwMDgsIDc1MDEzLCAKKyAgICA3NTAxOCwgNzUwMjMsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDY4LCA3NTA3MywgCisgICAgMTg3MCwgNDYsIDc1MDc4LCA3NTA4MywgMzI3NDYsIDc1MDg3LCAzMjc1MSwgMzI3NTYsIDMyNzYyLCAzMjc2NywgNzUwOTEsIAorICAgIDMyNzcyLCAyMjA4MywgNzUxMTMsIDc1MTE3LCA3NTEyMSwgNzUxMjYsIDc1MTMwLCAzMjc3NiwgNzUxMzQsIDc1MTQyLCAKKyAgICAzMjc4MSwgNzUxNDksIDc1MTUyLCA3NTE1NywgNzUxNjEsIDk1NDMsIDc1MTcwLCAzMjc4NiwgMjE5NDUsIDc1MTczLCAKKyAgICA3NTE3NywgMTQyOCwgNzUxODIsIDMyNzk3LCA3NTE4NSwgNzUxOTAsIDI1NzM3LCAyNTc0NywgMzUyNTgsIDc1MTk1LCAKKyAgICA3NTIwMCwgNzUyMDUsIDc1MjEwLCA3NTIxNiwgNzUyMjEsIDc1MjMwLCA3NTIzNSwgNzUyNDIsIDc1MjQ4LCA3NTI1MywgCisgICAgNzUyNTgsIDc1MjYzLCA3NTI3MywgNzUyODIsIDc1Mjg3LCA3NTI5NSwgNzUyOTksIDc1MzA3LCAzMjYxMSwgMzczMTcsIAorICAgIDc1MzE0LCA3NTMyMCwgNzUzMjUsIDc1MzMwLCAxMjAxNiwgNzUzMzUsIDc1MzQxLCA3NTM0NiwgNzUzNTMsIDc1MzU5LCAKKyAgICA3NTM2NCwgNzUzNzIsIDc1MzgyLCA3NTM5MiwgNzUzOTgsIDc1NDAzLCA3NTQwOSwgMTc1MzYsIDc1NDE2LCAzNjA3MywgCisgICAgNzU0MjksIDc1NDM0LCA3NTQ0MCwgMzA5OTMsIDc1NDUzLCA3NTQ1OSwgNzU0NjMsIDc1NDcyLCA3NTQ3OSwgNzU0ODUsIAorICAgIDc1NDkzLCA3NTUwMiwgNzU1MDksIDc1NTE1LCA3NTUxOCwgNzU1MjIsIDI1ODc4LCA3NTUyNiwgNzU1MzMsIDc1NTM5LCAKKyAgICA3NTU0NywgNzU1NTIsIDIzOTk0LCA3NTU1OCwgNzU1NjEsIDc1NTY5LCA3NTU3NywgNzU1OTEsIDc1NTk4LCA3NTYwNCwgCisgICAgNzU2MTEsIDc1NjE3LCAzMjgxMSwgNzU2MjEsIDc1NjI4LCA3NTYzNiwgNzU2NDQsIDc1NjUwLCAzMjgxNiwgNzU2NTgsIAorICAgIDc1NjY0LCA3NTY2OSwgNzU2NzksIDc1Njg1LCA3NTY5NCwgMzA4MzAsIDM0NzE2LCA3NTcwMiwgNzU3MDcsIDc1NzEyLCAKKyAgICA3NTcxNiwgNzU3MjEsIDc1NzI1LCA3NTczMywgMTQ5MjAsIDM5NDI5LCA3NTczOCwgNzU3NDMsIDMyODIxLCA2MjI2OSwgCisgICAgNzU3NDcsIDc1NzUyLCA3NTc1NiwgNzU3NjUsIDc1NzczLCA3NTc3OSwgNzU3ODQsIDc1NzkwLCA3NTc5NywgNzU4MDMsIAorICAgIDc1ODA4LCA3NTgxMywgNzU4MjIsIDc1ODM0LCA3NTg0OSwgMzMwODMsIDc1ODU1LCAxNjU0NSwgMzI4MjUsIDc1ODU5LCAKKyAgICA3NTg2NiwgMjQxMDQsIDc1ODcyLCA3NTg3OSwgNzU4ODgsIDc1ODk1LCA3NTkwNCwgNzU5MTAsIDc1OTE1LCA3NTkyMywgCisgICAgNzU5MjksIDMyODM1LCA3NTkzNCwgNzU5NDMsIDc0NzIzLCA3NTk1MiwgNzU5NTksIDc1OTY1LCA3NTk3MSwgNzU5ODEsIAorICAgIDc1OTg5LCA3NTk5NiwgNzYwMDAsIDMyODQwLCA3NjAwMywgMzI4NDYsIDMyODUyLCA3NjAwOCwgNzYwMTYsIDc2MDI0LCAKKyAgICA3NjAzNCwgNzYwNDMsIDc2MDUxLCA3NjA1OCwgNzYwNjgsIDMyODU3LCA3NjA3MiwgNzYwNzQsIDc2MDc4LCA3NjA4MywgCisgICAgNzYwODcsIDc2MDkxLCA3NjA5NywgNzYxMDIsIDc2MTA2LCA3NjExNywgNzYxMjIsIDc2MTI3LCAzMDYwLCA3NjEzMSwgCisgICAgNzYxMzgsIDc2MTQyLCA3NjE1MSwgNzYxNTksIDc2MTY2LCA3NjE3MSwgNzYxNzYsIDYyMzE1LCA3NjE4MCwgNzYxODMsIAorICAgIDc2MTg5LCA3NjE5NywgNzYyMDMsIDc2MjA3LCA3NjIxMiwgNzYyMTksIDc2MjI0LCA3NjIzMCwgMzQ3NDcsIDc2MjM1LCAKKyAgICA3NjIzOCwgNzYyNDMsIDc2MjQ3LCA3NjI1MiwgNzYyNTcsIDc2MjYxLCA3NjI2OSwgNzYyNzMsIDI1NzU2LCAyNTc2NSwgCisgICAgNzYyNzksIDc2Mjg1LCA3NjI5MSwgNzYyOTYsIDc2MzAwLCA3NjMwMywgNzYzMTMsIDc2MzIyLCA3NjMyNywgNzYzMzMsIAorICAgIDc2MzQwLCA3NjM0NiwgNzYzNTAsIDc2MzU4LCA3NjM2MywgMzQ3NTMsIDc2MzY3LCA3NjM3NSwgNzYzODEsIDc2Mzg4LCAKKyAgICA3NjM5MywgNzYzOTcsIDc2NDAyLCA1ODQ0MCwgMzQ3NTksIDc2NDA4LCA3NjQxMywgNzY0MTcsIDc2NDIyLCA3NjQyNywgCisgICAgNzY0MzIsIDc2NDM2LCA3NjQ0MSwgNzY0NDYsIDc2NDUyLCA3NjQ1NywgNzY0NjIsIDc2NDY4LCA3NjQ3NCwgNzY0NzksIAorICAgIDc2NDgzLCA3NjQ4OCwgNzY0OTMsIDc2NDk4LCA3NjUwMiwgMjQxMDMsIDc2NTA3LCA3NjUxMiwgNzY1MTgsIDc2NTI0LCAKKyAgICA3NjUzMCwgNzY1MzUsIDc2NTM5LCA3NjU0NCwgNzY1NDksIDc2NTU0LCA3NjU1OCwgNzY1NjMsIDc2NTY4LCA3NjU3MywgCisgICAgNzY1NzgsIDc2NTgyLCAzMjg2NSwgNzY1OTAsIDc2NTk0LCA3NjYwMiwgNzY2MTAsIDc2NjIxLCA3NjYyNiwgNzY2MzAsIAorICAgIDIyMzk3LCA3NjYzNSwgNzY2NDEsIDc2NjUxLCA3NjY1OCwgNzY2NjMsIDc2NjcyLCA3NjY3NywgNzY2ODEsIDc2Njg2LCAKKyAgICA3NjY5NCwgNzY3MDIsIDc2NzA5LCA2NTEwOSwgNzY3MTUsIDc2NzIzLCA3NjczMCwgNzY3NDEsIDc2NzQ3LCA3Njc1MSwgCisgICAgNzY3NTcsIDMyODc1LCA3Njc2MCwgNzY3NjcsIDc2Nzc1LCA3Njc4MCwgMzk2MjAsIDc2Nzg0LCA3Njc4OSwgNzY3OTYsIAorICAgIDc2ODAxLCA4OTkyLCA3NjgwNSwgNzY4MTMsIDc2ODIwLCA3NjgyNywgNzY4MzMsIDc2ODQ3LCA2MzM4MSwgNzY4NTUsIAorICAgIDc2ODYxLCA3Njg2NSwgNzY4NjgsIDc2ODc2LCA3Njg4MywgNzY4ODgsIDc2OTAxLCA3NjkwOCwgNzY5MTIsIDc2OTE5LCAKKyAgICA3NjkyNCwgNjA4NjAsIDc2OTI5LCA3NjkzMiwgNzY5MzksIDc2OTQ1LCA3Njk0OSwgNzY5NTcsIDc2OTY2LCA3Njk3NiwgCisgICAgNzY5ODYsIDc2OTk1LCA3NzAwMywgNzcwMTQsIDc3MDE5LCA3NzAyMywgNzcwMjgsIDc3MDMyLCAzNTM4OSwgNzcwNDAsIAorICAgIDIxMzU3LCAzNTM5OCwgNzcwNDUsIDc3MDUwLCA3NzA1NSwgNzcwNjAsIDc3MDY1LCA3NzA3MCwgNzcwNzUsIDc3MDc5LCAKKyAgICA3NzA4NCwgNzcwODksIDc3MDk0LCA3NzA5OSwgNzcxMDQsIDc3MTA5LCA3NzExMywgNzcxMTgsIDc3MTIzLCA3NzEyNywgCisgICAgNzcxMzEsIDc3MTM1LCA3NzEzOSwgNzcxNDQsIDc3MTQ5LCA3NzE1MywgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzEsIAorICAgIDc3MTc2LCA3NzE4MSwgNzcxODYsIDc3MTkwLCA3NzE5NSwgNzcyMDAsIDc3MjA0LCA3NzIwOSwgNzcyMTQsIDc3MjE5LCAKKyAgICA3NzIyNCwgNzcyMjksIDc3MjM0LCA3NzIzOSwgNzcyNDQsIDc3MjQ5LCA3NzI1NCwgNzcyNTksIDc3MjY0LCA3NzI2OSwgCisgICAgNzcyNzQsIDc3Mjc5LCA3NzI4NCwgNzcyODksIDc3Mjk0LCA3NzI5OSwgNzczMDQsIDc3MzA4LCA3NzMxMywgNzczMTgsIAorICAgIDc3MzIzLCA3NzMyOCwgNzczMzMsIDc3MzM4LCA3NzM0MywgNzczNDgsIDc3MzUzLCA3NzM1OCwgNzczNjMsIDc3MzY3LCAKKyAgICA3NzM3MiwgNzczNzYsIDc3MzgxLCA3NzM4NiwgNzczOTEsIDc3Mzk2LCA3NzQwMSwgNzc0MDYsIDc3NDExLCA3NzQxNiwgCisgICAgNzc0MjEsIDc3NDI1LCA3NzQyOSwgNzc0MzQsIDc3NDM5LCA3NzQ0MywgNzc0NDgsIDc3NDUzLCA3NzQ1NywgNzc0NjIsIAorICAgIDc3NDY3LCA3NzQ3MiwgNzc0NzcsIDc3NDgxLCA3NzQ4NiwgNzc0OTEsIDc3NDk1LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKKyAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNSwgNzc1MjksIDc3NTMzLCA3NzUzNywgNzc1NDEsIDc3NTQ1LCA3NzU0OSwgCisgICAgNzc1NTMsIDc3NTU3LCA3NzU2MiwgNzc1NjcsIDc3NTcyLCA3NzU3NywgNzc1ODIsIDc3NTg3LCA3NzU5MiwgNzc1OTcsIAorICAgIDc3NjAyLCA3NzYwNywgNzc2MTEsIDc3NjE1LCA3NzYxOSwgNzc2MjMsIDc3NjI3LCA3NzYzMSwgNzc2MzYsIDc3NjQwLCAKKyAgICA3NzY0NSwgNzc2NDksIDc3NjU0LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MiwgNzc2NzYsIDc3NjgwLCA3NzY4NCwgCisgICAgNzc2ODgsIDc3NjkyLCA3NzY5NiwgNzc3MDAsIDc3NzA0LCA3NzcwOCwgNzc3MTIsIDc3NzE2LCA3NzcyMCwgNzc3MjQsIAorICAgIDc3NzI4LCA3NzczMywgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY3LCAKKyAgICA3Nzc3MSwgNzc3NzUsIDc3Nzc5LCA3Nzc4MywgNzc3ODcsIDc3NzkxLCA3Nzc5NiwgNzc4MDAsIDc3ODA1LCA3NzgwOSwgCiAgICAgNzc4MTMsIDc3ODE3LCA3NzgyMSwgNzc4MjUsIDc3ODI5LCA3NzgzMywgNzc4MzcsIDc3ODQxLCA3Nzg0NSwgNzc4NDksIAotICAgIDc3ODUzLCA3Nzg1NywgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzUsIDc3ODgwLCA3Nzg4NCwgNzc4ODgsIDc3ODkyLCAKLSAgICA3Nzg5NiwgNzc5MDAsIDc3OTA0LCA3NzkwOCwgNzc5MTIsIDc3OTE3LCA3NzkyMSwgNzc5MjYsIDc3OTMwLCA3NzkzNSwgCi0gICAgNzc5MzksIDc3OTQ0LCA3Nzk0OCwgNzc5NTQsIDc3OTU5LCA3Nzk2MywgNzc5NjgsIDc3OTcyLCA3Nzk3NywgNzc5ODEsIAotICAgIDc3OTg2LCA3Nzk5MCwgNzc5OTUsIDE1MjEsIDc3OTk5LCAyODI0LCAxNzU5LCAxNzY0LCA3ODAwMywgNzgwMDcsIDI4MjgsIAotICAgIDc4MDExLCAxMzk3LCA3ODAxNiwgMTM0MiwgNzgwMjAsIDI4NDAsIDc4MDI0LCA3ODAzMSwgNzgwMzgsIDc4MDUyLCAyODQ0LCAKLSAgICA3MTMxLCA3ODA2MSwgNzgwNjksIDc4MDc2LCA3ODA4NywgNzgwOTYsIDc4MTAzLCA3ODExNSwgNzgxMjgsIDc4MTQxLCAKLSAgICA3ODE1MiwgNzgxNTcsIDc4MTY0LCA3ODE3NiwgNzgxODAsIDI4NDgsIDExNzQwLCA3ODE5MCwgNzgxOTUsIDc4MjA0LCAKLSAgICA3ODIxNCwgMjg1MiwgNzgyMTksIDc4MjIzLCA3ODIyOCwgNzgyMzUsIDc4MjQxLCA3ODI0OSwgNzgyNjEsIDEzNDcsIAotICAgIDEzMDM1LCA3ODI3MSwgNzgyNzUsIDc4MjgxLCA3ODI5NSwgNzgzMDcsIDc4MzE5LCA3ODMyOSwgNzgzMzgsIDc4MzQ3LCAKLSAgICA3ODM1NiwgNzgzNjQsIDc4Mzc1LCA3ODM4MywgNDA1MSwgNzgzOTMsIDc4NDA0LCA3ODQxMywgNzg0MTksIDc4NDM0LCAKLSAgICA3ODQ0MSwgNzg0NDcsIDM1NDg5LCA3ODQ1MiwgMjg3NiwgMTMwMzksIDc4NDU2LCA3ODQ2MywgODkzMCwgNzg0NzIsIDI4ODEsIAotICAgIDMyMzM2LCA3ODQ3OCwgNjA1NzIsIDc4NDg1LCA3ODQ5MSwgNzg1MDIsIDc4NTA4LCA3ODUxNSwgNzg1MjEsIDc4NTI5LCAKLSAgICA3ODUzNiwgNzg1NDIsIDc4NTUyLCA3ODU2MSwgNzg1NzIsIDc4NTc5LCA3ODU4NSwgNzg1OTUsIDc4NjAzLCA3ODYwOSwgCi0gICAgNzg2MjQsIDc4NjMwLCA3ODYzNSwgNzg2NDIsIDc4NjQ1LCA3ODY1MSwgNzg2NTgsIDc4NjY0LCA3ODY3MiwgNzg2ODEsIAotICAgIDc4Njg5LCA3ODY5NSwgNzg3MDQsIDQxNDI3LCA3ODcxOCwgNzg3MjMsIDc4NzI5LCAxNDc0NCwgNzg3MzQsIDc4NzQ3LCAKLSAgICA3ODc1NiwgNzg3NjQsIDc4NzcxLCA3ODc3NSwgNzg3NzksIDc4NzgyLCA3ODc4OSwgNzg3OTYsIDc4ODA0LCA3ODgxMiwgCi0gICAgNzg4MjEsIDc4ODI5LCAxNDY3MSwgNzg4MzcsIDc4ODQyLCA3ODg0NiwgNzg4NTgsIDc4ODY1LCA3ODg3NCwgNzQ4LCAKLSAgICA3ODg4NCwgNzg4OTMsIDc4OTA0LCAyODk3LCA3ODkwOCwgNzg5MTIsIDc4OTE4LCA3ODkzMSwgNzg5NDMsIDc4OTUzLCAKLSAgICA3ODk2MiwgNzg5NzQsIDI2MzUyLCA3ODk4NSwgNzg5OTMsIDc5MDAyLCA3OTAxMywgNzkwMjQsIDc5MDM0LCA3OTA0NCwgCi0gICAgNzkwNTMsIDc5MDYxLCAxMTMwNSwgNzkwNjgsIDc5MDcyLCA3OTA3NSwgNzkwODAsIDc5MDg1LCA3OTA4OSwgNzkwOTUsIAotICAgIDEzNTIsIDExODExLCA3OTEwMiwgNzkxMTMsIDc5MTIyLCA3OTEzMCwgNzkxMzksIDc5MTQ3LCA3OTE2MywgNzkxNzQsIAotICAgIDc5MTgzLCA3OTE5MSwgNzkyMDMsIDc5MjE0LCA3OTIzMCwgNzkyNDAsIDc5MjYxLCA3OTI3NCwgNzkyODIsIDc5Mjg5LCAKLSAgICAxNDg1NSwgNzkzMDIsIDc5MzA3LCA3OTMxMywgNTkwOCwgNzkzMTksIDc5MzIyLCA3OTMyOSwgNzkzMzksIDgxNzYsIAotICAgIDc5MzQ2LCA3OTM1MSwgNzkzNTYsIDc5MzYxLCA3OTM2OSwgNzkzNzgsIDc5Mzg2LCA5NzQ5LCA5NzU4LCA3OTM5MSwgCi0gICAgNzk0MDIsIDc5NDA3LCA3OTQxMywgMjkxMywgMjkxOCwgNzk0MTksIDEwODcyLCA3OTQyNSwgNzk0MzIsIDc5NDM5LCAKLSAgICA3OTQ1MiwgMjI1MSwgNjgsIDc5NDU3LCA3OTQ2MiwgNzk0NzIsIDc5NDc4LCA3OTQ4NywgNzk0OTUsIDc5NTA1LCA3OTUwOSwgCi0gICAgNzk1MTQsIDc5NTE4LCA3OTUzMCwgMjk0MSwgNzk1MzgsIDc5NTQ2LCA3OTU1MSwgNzk1NjIsIDc5NTczLCA3OTU4MiwgCi0gICAgNzk1ODcsIDc5NTkzLCA3OTU5OCwgNzk2MDgsIDc5NjE4LCA3OTYyMywgNzk2MjksIDc5NjM0LCA3OTY0MywgMjEzOTcsIAotICAgIDc5NjQ3LCA0MTI4LCAyMCwgNzk2NTIsIDc5NjYxLCA3OTY2OCwgNzk2NzUsIDc5NjgxLCA3OTY4NywgODY0LCA3OTY5MiwgCi0gICAgNzk2OTcsIDYwOTAwLCA3OTcwMiwgNzk3MDcsIDc5NzEzLCA3OTcxOSwgNzk3MjcsIDc5NzMyLCA3OTczOSwgNzk3NDUsIAotICAgIDc5NzUwLCAzODAwMSwgNDEzMjEsIDc5NzU2LCAyOTQ1LCAzMiwgNzk3NjYsIDc5Nzc5LCA3OTc4NCwgNzk3OTIsIDc5Nzk3LCAKLSAgICA3OTgwMywgMjk2NywgMjgyODksIDc5ODA4LCA3OTgxNiwgNzk4MjMsIDc5ODI4LCA1ODY0NSwgNjE5MDMsIDc5ODM3LCAKLSAgICA3OTg0MSwgMTcwNCwgMTgxMywgNzk4NDYsIDc5ODUxLCA3OTg1OCwgMTgxNywgMjQ3LCA3OTg2NSwgNzk4NzEsIDI5ODksIAotICAgIDc5ODc2LCA3OTg4MSwgNzk4ODgsIDE4MjEsIDc5ODkzLCA3OTg5OSwgNzk5MDQsIDc5OTE2LCA2MTE5LCA3OTkyNiwgMTgyOCwgCi0gICAgNzk5MzIsIDc5OTM3LCA3OTk0NCwgNzk5NTEsIDc5OTY2LCA3OTk3MywgNzk5ODQsIDc5OTkyLCAyNjE4LCA3OTk5NiwgCi0gICAgODAwMDgsIDgwMDEzLCA4MDAxNywgODAwMjMsIDI4MTE0LCAyMjU2LCA4MDAyNywgODAwMzgsIDgwMDQyLCA4MDA0NiwgCi0gICAgODAwNTIsIDgwMDU2LCA4MDA2NSwgODAwNjksIDgwMDgwLCA4MDA4NCwgMjMwMiwgMzIxNjUsIDgwMDg4LCA4MDA5OCwgCi0gICAgMzA4MCwgOTM2NCwgODAxMDYsIDgwMTExLCA4MDExNSwgODAxMjQsIDgwMTMxLCA4MDEzNywgMzA1MCwgMTcxMzksIDgwMTQxLCAKLSAgICA4MDE1NCwgODAxNzIsIDgwMTc3LCA4MDE4NSwgODAxOTMsIDgwMjAzLCA5OTc4LCAxMzE0NywgODAyMTUsIDgwMjI4LCAKLSAgICA4MDIzNSwgODAyNDIsIDgwMjU4LCA4MDI2NSwgODAyNzEsIDEwOTUsIDgwMjc4LCA4MDI4NSwgODAyOTUsIDgwMzA0LCAKLSAgICA4MDMxNiwgNDIyOTEsIDgwMzI0LCAzMDY0LCAxMjAyMywgODAzMjcsIDgwMzM1LCA4MDMzOSwgNzgyMzEsIDMwNjgsIAotICAgIDgwMzQzLCAyMTE3OCwgMTIwMzksIDM3NTYsIDgwMzQ3LCAzMDc0LCA4MDM1MSwgODAzNjEsIDgwMzY3LCA4MDM3MywgCi0gICAgODAzNzksIDgwMzg1LCA4MDM5MSwgODAzOTcsIDgwNDAzLCA4MDQwOSwgODA0MTUsIDgwNDIxLCA4MDQyNywgODA0MzMsIAotICAgIDgwNDM5LCA4MDQ0NSwgODA0NTEsIDgwNDU3LCA4MDQ2MywgODA0NjksIDgwNDc1LCA4MDQ4MSwgODA0ODcsIDgwNDkzLCAKLSAgICA4MDQ5OSwgODA1MDUsIDgwNTExLCA4MDUxOCwgODA1MjUsIDgwNTMxLCA4MDUzNywgODA1NDMsIDgwNTQ5LCA4MDU1NSwgCi0gICAgODA1NjEsIDEzNTcsIDE2MDQ5LCAxMjA2MSwgODA1NjcsIDgwNTcyLCA4MDU3NywgODA1ODIsIDgwNTg3LCA4MDU5MiwgCi0gICAgODA1OTcsIDgwNjAyLCA4MDYwNywgODA2MTIsIDgwNjE3LCA4MDYyMiwgODA2MjcsIDgwNjMyLCA4MDYzNywgODA2NDIsIAotICAgIDgwNjQ3LCA4MDY1MiwgODA2NTcsIDgwNjYyLCA4MDY2NywgODA2NzIsIDgwNjc3LCA4MDY4MiwgODA2ODcsIDgwNjkyLCAKLSAgICA4MDY5OCwgODA3MDMsIDgwNzA4LCA4MDcxNCwgODA3MTksIDgwNzI1LCA4MDczMCwgODA3MzUsIDgwNzQxLCA4MDc0NiwgCi0gICAgODA3NTEsIDgwNzU2LCA4MDc2MSwgODA3NjYsIDgwNzcxLCA4MDc3NiwgODA3ODEsIDgwMzYyLCA4MDM2OCwgODAzNzQsIAotICAgIDgwMzgwLCA4MDM4NiwgODAzOTIsIDgwMzk4LCA4MDQwNCwgODA0MTAsIDgwNDE2LCA4MDQyMiwgODA0MjgsIDgwNDM0LCAKLSAgICA4MDQ0MCwgODA0NDYsIDgwNzg3LCA4MDQ1MiwgODA0NTgsIDgwNDY0LCA4MDc5MywgODA0NzAsIDgwNDc2LCA4MDQ4MiwgCi0gICAgODA0ODgsIDgwNDk0LCA4MDUwMCwgODA1MDYsIDgwNTI2LCA4MDc5OSwgODA4MDUsIDgwNTMyLCA4MDgxMSwgODA1MzgsIAotICAgIDgwNTQ0LCA4MDU1MCwgODA1NTYsIDgwNTYyLCAzMDkxLCAzMDk2LCA4MDgxNywgODA4MjIsIDgwODI1LCA4MDgzMSwgCi0gICAgODA4MzcsIDgwODQ0LCA4MDg0OSwgODA4NTQsIDIzMDcsIAorICAgIDc3ODU0LCA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCA3Nzg4MiwgNzc4ODYsIDc3ODkwLCAKKyAgICA3Nzg5NCwgNzc4OTgsIDc3OTAzLCA3NzkwNywgNzc5MTEsIDc3OTE2LCA3NzkyMSwgNzc5MjUsIDc3OTI5LCA3NzkzMywgCisgICAgNzc5MzcsIDc3OTQxLCA3Nzk0NSwgNzc5NDksIDc3OTUzLCA3Nzk1OCwgNzc5NjIsIDc3OTY3LCA3Nzk3MSwgNzc5NzYsIAorICAgIDc3OTgwLCA3Nzk4NSwgNzc5ODksIDc3OTk1LCA3ODAwMCwgNzgwMDQsIDc4MDA5LCA3ODAxMywgNzgwMTgsIDc4MDIyLCAKKyAgICA3ODAyNywgNzgwMzEsIDc4MDM2LCAxNTIxLCA3ODA0MCwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwNDQsIDc4MDQ4LCAyODI4LCAKKyAgICA3ODA1MiwgMTM5NywgNzgwNTcsIDEzNDIsIDc4MDYxLCAyODQwLCA3ODA2NSwgNzgwNzIsIDc4MDc5LCA3ODA5MywgMjg0NCwgCisgICAgNzEzMSwgNzgxMDIsIDc4MTEwLCA3ODExNywgNzgxMjgsIDc4MTM3LCA3ODE0NCwgNzgxNTYsIDc4MTY5LCA3ODE4MiwgCisgICAgNzgxOTMsIDc4MTk4LCA3ODIwNSwgNzgyMTcsIDc4MjIxLCAyODQ4LCAxMTc0NywgNzgyMzEsIDc4MjM2LCA3ODI0NSwgCisgICAgNzgyNTUsIDI4NTIsIDc4MjYwLCA3ODI2NCwgNzgyNjksIDc4Mjc2LCA3ODI4MiwgNzgyOTAsIDc4MzAyLCAxMzQ3LCAKKyAgICAxMzA0MiwgNzgzMTIsIDc4MzE2LCA3ODMyMiwgNzgzMzYsIDc4MzQ4LCA3ODM2MCwgNzgzNzAsIDc4Mzc5LCA3ODM4OCwgCisgICAgNzgzOTcsIDc4NDA1LCA3ODQxNiwgNzg0MjQsIDQwNTEsIDc4NDM0LCA3ODQ0NSwgNzg0NTQsIDc4NDYwLCA3ODQ3NSwgCisgICAgNzg0ODIsIDc4NDg4LCAzNTUxNCwgNzg0OTMsIDI4NzYsIDEzMDQ2LCA3ODQ5NywgNzg1MDQsIDg5MzAsIDc4NTEzLCAyODgxLCAKKyAgICAzMjM2MSwgNzg1MTksIDYwNjA5LCA3ODUyNiwgNzg1MzIsIDc4NTQzLCA3ODU0OSwgNzg1NTYsIDc4NTYyLCA3ODU3MCwgCisgICAgNzg1NzcsIDc4NTgzLCA3ODU5MywgNzg2MDIsIDc4NjEzLCA3ODYyMCwgNzg2MjYsIDc4NjM2LCA3ODY0NCwgNzg2NTAsIAorICAgIDc4NjY1LCA3ODY3MSwgNzg2NzYsIDc4NjgzLCA3ODY4NiwgNzg2OTIsIDc4Njk5LCA3ODcwNSwgNzg3MTMsIDc4NzIyLCAKKyAgICA3ODczMCwgNzg3MzYsIDc4NzQ1LCA0MTQ2NCwgNzg3NTksIDc4NzY0LCA3ODc3MCwgMTQ3NTcsIDc4Nzc1LCA3ODc4OCwgCisgICAgNzg3OTcsIDc4ODA1LCA3ODgxMiwgNzg4MTYsIDc4ODIwLCA3ODgyMywgNzg4MzAsIDc4ODM3LCA3ODg0NSwgNzg4NTMsIAorICAgIDc4ODYyLCA3ODg3MCwgMTQ2ODQsIDc4ODc4LCA3ODg4MywgNzg4ODcsIDc4ODk5LCA3ODkwNiwgNzg5MTUsIDc0OCwgCisgICAgNzg5MjUsIDc4OTM0LCA3ODk0NSwgMjg5NywgNzg5NDksIDc4OTUzLCA3ODk1OSwgNzg5NzIsIDc4OTg0LCA3ODk5NCwgCisgICAgNzkwMDMsIDc5MDE1LCAyNjM2OSwgNzkwMjYsIDc5MDM0LCA3OTA0MywgNzkwNTQsIDc5MDY1LCA3OTA3NSwgNzkwODUsIAorICAgIDc5MDk0LCA3OTEwMiwgMTEzMTIsIDc5MTA5LCA3OTExMywgNzkxMTYsIDc5MTIxLCA3OTEyNiwgNzkxMzAsIDc5MTM2LCAKKyAgICAxMzUyLCAxMTgxOCwgNzkxNDMsIDc5MTU0LCA3OTE2MywgNzkxNzEsIDc5MTgwLCA3OTE4OCwgNzkyMDQsIDc5MjE1LCAKKyAgICA3OTIyNCwgNzkyMzIsIDc5MjQ0LCA3OTI1NSwgNzkyNzEsIDc5MjgxLCA3OTMwMiwgNzkzMTUsIDc5MzIzLCA3OTMzMCwgCisgICAgMTQ4NjgsIDc5MzQzLCA3OTM0OCwgNzkzNTQsIDU5MDgsIDc5MzYwLCA3OTM2MywgNzkzNzAsIDc5MzgwLCA4MTc2LCAKKyAgICA3OTM4NywgNzkzOTIsIDc5Mzk3LCA3OTQwMiwgNzk0MTAsIDc5NDE5LCA3OTQyNywgOTc1NiwgOTc2NSwgNzk0MzIsIAorICAgIDc5NDQzLCA3OTQ0OCwgNzk0NTQsIDI5MTMsIDI5MTgsIDc5NDYwLCAxMDg3OSwgNzk0NjYsIDc5NDczLCA3OTQ4MCwgCisgICAgNzk0OTMsIDIyNTEsIDY4LCA3OTQ5OCwgNzk1MDMsIDc5NTEzLCA3OTUxOSwgNzk1MjgsIDc5NTM2LCA3OTU0NiwgNzk1NTAsIAorICAgIDc5NTU1LCA3OTU1OSwgNzk1NzEsIDI5NDEsIDc5NTc5LCA3OTU4NywgNzk1OTIsIDc5NjAzLCA3OTYxNCwgNzk2MjMsIAorICAgIDc5NjI4LCA3OTYzNCwgNzk2MzksIDc5NjQ5LCA3OTY1OSwgNzk2NjQsIDc5NjcwLCA3OTY3NCwgNzk2NzksIDc5Njg4LCAKKyAgICAyMTQxMCwgNzk2OTIsIDQxMjgsIDIwLCA3OTY5NywgNzk3MDYsIDc5NzEzLCA3OTcyMCwgNzk3MjYsIDc5NzMyLCA4NjQsIAorICAgIDc5NzM3LCA3OTc0MiwgNjA5MzcsIDc5NzQ3LCA3OTc1MiwgNzk3NTgsIDc5NzY0LCA3OTc3MiwgNzk3NzcsIDc5Nzg0LCAKKyAgICA3OTc5MCwgNzk3OTUsIDM4MDMwLCA0MTM1OCwgNzk4MDEsIDI5NDUsIDMyLCA3OTgxMSwgNzk4MjQsIDc5ODI5LCA3OTgzNywgCisgICAgNzk4NDIsIDc5ODQ4LCAyOTY3LCAyODMxMCwgNzk4NTMsIDc5ODYxLCA3OTg2OCwgNzk4NzMsIDU4NjgyLCA2MTk0MCwgCisgICAgNzk4ODIsIDc5ODg2LCAxNzA0LCAxODEzLCA3OTg5MSwgNzk4OTYsIDc5OTAzLCAxODE3LCAyNDcsIDc5OTEwLCA3OTkxNiwgCisgICAgMjk4OSwgNzk5MjEsIDc5OTI2LCA3OTkzMywgMTgyMSwgNzk5MzgsIDc5OTQ0LCA3OTk0OSwgNzk5NjEsIDYxMTksIDc5OTcxLCAKKyAgICAxODI4LCA3OTk3NywgNzk5ODIsIDc5OTg5LCA3OTk5NiwgODAwMTEsIDgwMDE4LCA4MDAyOSwgODAwMzcsIDI2MTgsIAorICAgIDgwMDQxLCA4MDA1MywgODAwNTgsIDgwMDYyLCA4MDA2OCwgMjgxMzUsIDIyNTYsIDgwMDcyLCA4MDA4MywgODAwODcsIAorICAgIDgwMDkxLCA4MDA5NywgODAxMDEsIDgwMTEwLCA4MDExNCwgODAxMjUsIDgwMTI5LCAyMzAyLCAzMjE5MCwgODAxMzMsIAorICAgIDgwMTQzLCAzMDgwLCA5MzcxLCA4MDE1MSwgODAxNTYsIDgwMTYwLCA4MDE2OSwgODAxNzYsIDgwMTgyLCAzMDUwLCAxNzE1MiwgCisgICAgODAxODYsIDgwMTk5LCA4MDIxNywgODAyMjIsIDgwMjMwLCA4MDIzOCwgODAyNDgsIDk5ODUsIDEzMTU0LCA4MDI2MCwgCisgICAgODAyNzMsIDgwMjgwLCA4MDI4NywgODAzMDMsIDgwMzEwLCA4MDMxNiwgMTA2NCwgODAzMjMsIDgwMzMwLCA4MDM0MCwgCisgICAgODAzNDksIDgwMzYxLCA0MjMyOCwgODAzNjksIDMwNjQsIDEyMDMwLCA4MDM3MiwgODAzODAsIDgwMzg0LCA3ODI3MiwgCisgICAgMzA2OCwgODAzODgsIDIxMTkxLCAxMjA0NiwgMzc1NiwgODAzOTIsIDMwNzQsIDgwMzk2LCA4MDQwNiwgODA0MTIsIDgwNDE4LCAKKyAgICA4MDQyNCwgODA0MzAsIDgwNDM2LCA4MDQ0MiwgODA0NDgsIDgwNDU0LCA4MDQ2MCwgODA0NjYsIDgwNDcyLCA4MDQ3OCwgCisgICAgODA0ODQsIDgwNDkwLCA4MDQ5NiwgODA1MDIsIDgwNTA4LCA4MDUxNCwgODA1MjAsIDgwNTI2LCA4MDUzMiwgODA1MzgsIAorICAgIDgwNTQ0LCA4MDU1MCwgODA1NTYsIDgwNTYzLCA4MDU3MCwgODA1NzYsIDgwNTgyLCA4MDU4OCwgODA1OTQsIDgwNjAwLCAKKyAgICA4MDYwNiwgMTM1NywgMTYwNjIsIDEyMDY4LCA4MDYxMiwgODA2MTcsIDgwNjIyLCA4MDYyNywgODA2MzIsIDgwNjM3LCAKKyAgICA4MDY0MiwgODA2NDcsIDgwNjUyLCA4MDY1NywgODA2NjIsIDgwNjY3LCA4MDY3MiwgODA2NzcsIDgwNjgyLCA4MDY4NywgCisgICAgODA2OTIsIDgwNjk3LCA4MDcwMiwgODA3MDcsIDgwNzEyLCA4MDcxNywgODA3MjIsIDgwNzI3LCA4MDczMiwgODA3MzcsIAorICAgIDgwNzQzLCA4MDc0OCwgODA3NTMsIDgwNzU5LCA4MDc2NCwgODA3NzAsIDgwNzc1LCA4MDc4MCwgODA3ODYsIDgwNzkxLCAKKyAgICA4MDc5NiwgODA4MDEsIDgwODA2LCA4MDgxMSwgODA4MTYsIDgwODIxLCA4MDgyNiwgODA0MDcsIDgwNDEzLCA4MDQxOSwgCisgICAgODA0MjUsIDgwNDMxLCA4MDQzNywgODA0NDMsIDgwNDQ5LCA4MDQ1NSwgODA0NjEsIDgwNDY3LCA4MDQ3MywgODA0NzksIAorICAgIDgwNDg1LCA4MDQ5MSwgODA4MzIsIDgwNDk3LCA4MDUwMywgODA1MDksIDgwODM4LCA4MDUxNSwgODA1MjEsIDgwNTI3LCAKKyAgICA4MDUzMywgODA1MzksIDgwNTQ1LCA4MDU1MSwgODA1NzEsIDgwODQ0LCA4MDg1MCwgODA1NzcsIDgwODU2LCA4MDU4MywgCisgICAgODA1ODksIDgwNTk1LCA4MDYwMSwgODA2MDcsIDMwOTEsIDMwOTYsIDgwODYyLCA4MDg2NywgODA4NzAsIDgwODc2LCAKKyAgICA4MDg4MiwgODA4ODksIDgwODk0LCA4MDg5OSwgMjMwNywgCiB9OwogCiAvKiBjb2RlLT5uYW1lIHBocmFzZWJvb2sgKi8KICNkZWZpbmUgcGhyYXNlYm9va19zaGlmdCA3CiAjZGVmaW5lIHBocmFzZWJvb2tfc2hvcnQgMjA5CiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rW10gPSB7Ci0gICAgMCwgMjE5LCAxOCwgMjQ1LCAzMSwgNzgsIDIyMywgMjU0LCA3OCwgNTQsIDUwLCAyNDcsIDEzMiwgNTAsIDIyNSwgMTgyLCAKLSAgICA1MCwgMjU0LCAxMjYsIDI1NCwgNTcsIDQzLCAyMjYsIDMsIDQ0LCAyMjYsIDMsIDI1MywgMjE2LCA5NiwgNTAsIDI0OSwgCi0gICAgMjE5LCAyNDAsIDE2NywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMTksIDQ2LCAyMSwgMjEwLCA4NiwgMjEsIDExMCwgMjEsIAotICAgIDEwNSwgMjEsIDE1OCwgMjEsIDE2MSwgMjEsIDE4OSwgMjEsIDE5NCwgMjEsIDE5OCwgMjEsIDE5NSwgMjEsIDIwMCwgMjQ5LCAKLSAgICAyMjYsIDIyMCwgMTUwLCAyMzMsIDE1LCA1MCwgMjQ1LCA5OCwgNTAsIDI0MiwgMTMwLCA1MCwgMjI0LCAxMywgNzgsIDI0OSwgCi0gICAgMjE3LCAyNTMsIDIwNiwgNywgNiwgMSwgNjEsIDcsIDYsIDEsIDI1MywgMTU4LCA3LCA2LCAxLCAyNTEsIDY2LCA3LCA2LCAxLCAKLSAgICAyNDksIDYwLCA3LCA2LCAxLCA3NSwgNywgNiwgMSwgMjQ1LCA2LCA3LCA2LCAxLCAyNDMsIDIwMiwgNywgNiwgMSwgMjQyLCAKLSAgICA2MCwgNywgNiwgMSwgNzMsIDcsIDYsIDEsIDIzNSwgMTQ0LCA3LCA2LCAxLCAyMzUsIDIzLCA3LCA2LCAxLCAxNTYsIDcsIDYsIAotICAgIDEsIDE5MywgNywgNiwgMSwgMjMwLCAyNSwgNywgNiwgMSwgNzYsIDcsIDYsIDEsIDIyNiwgMTA1LCA3LCA2LCAxLCAyMjQsIAotICAgIDk2LCA3LCA2LCAxLCAxNTMsIDcsIDYsIDEsIDIyMiwgOTEsIDcsIDYsIDEsIDIxNywgMTUyLCA3LCA2LCAxLCA3MCwgNywgNiwgCi0gICAgMSwgMjE0LCAxMDUsIDcsIDYsIDEsIDIxMiwgOTgsIDcsIDYsIDEsIDIxMSwgMTc4LCA3LCA2LCAxLCAyMTEsIDExNywgNywgCi0gICAgNiwgMSwgMjEwLCAxNTksIDQzLCA0MiwgMTI3LCAyMjMsIDUwLCAyMTksIDQ2LCA0NCwgNDIsIDEyNywgMjUwLCAzMSwgMjU1LCAKLSAgICAxNCwgMTIxLCAyMzIsIDIxMywgMjQyLCAxMzcsIDI1NSwgMTQsIDcsIDQsIDEsIDYxLCA3LCA0LCAxLCAyNTMsIDE1OCwgNywgCi0gICAgNCwgMSwgMjUxLCA2NiwgNywgNCwgMSwgMjQ5LCA2MCwgNywgNCwgMSwgNzUsIDcsIDQsIDEsIDI0NSwgNiwgNywgNCwgMSwgCi0gICAgMjQzLCAyMDIsIDcsIDQsIDEsIDI0MiwgNjAsIDcsIDQsIDEsIDczLCA3LCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjM1LCAKLSAgICAyMywgNywgNCwgMSwgMTU2LCA3LCA0LCAxLCAxOTMsIDcsIDQsIDEsIDIzMCwgMjUsIDcsIDQsIDEsIDc2LCA3LCA0LCAxLCAKLSAgICAyMjYsIDEwNSwgNywgNCwgMSwgMjI0LCA5NiwgNywgNCwgMSwgMTUzLCA3LCA0LCAxLCAyMjIsIDkxLCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MiwgNywgNCwgMSwgNzAsIDcsIDQsIDEsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTIsIDk4LCA3LCA0LCAxLCAyMTEsIDE3OCwgCi0gICAgNywgNCwgMSwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTU5LCA0MywgMjQ5LCA5OSwgMTI3LCA2NywgMjMyLCAyMTMsIDQ0LCAKLSAgICAyNDksIDk5LCAxMjcsIDE4MiwgMjI4LCA3MywgMjE5LCAxOCwgMjM1LCAxOTMsIDI0NSwgMzEsIDc4LCAyNTAsIDE3NiwgNTAsIAotICAgIDIyNCwgMjI4LCA1MCwgMjQ5LCA5OCwgNTAsIDIxMSwgNDAsIDUwLCAyNTEsIDEzNSwgMTMwLCAyMjEsIDE3MywgNTAsIDI0OCwgCi0gICAgMSwgMjQ5LCAxNjMsIDUwLCAyNDQsIDEzNiwgMjI2LCAxNTQsIDIzNSwgMjM4LCAyMzMsIDQyLCA1MiwgMjU0LCAxMTAsIAotICAgIDIyMywgMjU0LCA3OCwgMjI4LCA1MiwgNTAsIDIxOSwgNTIsIDI0MCwgMTY4LCAyMjMsIDEwMiwgNTAsIDIzMSwgMjMyLCAKLSAgICAyNDgsIDcxLCA1MCwgMjI1LCAyMSwgNTAsIDIxOCwgMjMsIDEwNSwgMjE4LCAyMywgMTU4LCAyNTUsIDMsIDI1NSwgMTQsIAotICAgIDIzMCwgMjI4LCA1MCwgMjI1LCA2OCwgNTAsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjUwLCAxODMsIDIxOCwgMjMsIDExMCwgCi0gICAgMjMxLCAxNDgsIDIyNiwgMTU0LCAyMzUsIDIzOCwgMjIyLCAyNDcsIDUyLCAyNTQsIDExMCwgMjIzLCAyNTQsIDc4LCAyMTIsIAotICAgIDExNCwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQyLCAyNywgMjEyLCAxMTQsIDI0NCwgCi0gICAgMiwgMTM0LCAyMjQsIDE5LCAyMzUsIDE5MywgMjI0LCAxMywgNzgsIDcsIDYsIDEsIDExNSwgMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDExNSwgMiwgMTgyLCA3LCA2LCAxLCAKLSAgICAxMTUsIDIsIDI0OCwgMSwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDYsIDEsIDI1NCwgMjQzLCA3LCA2LCAKLSAgICAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMTYwLCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAxNDIsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMTYwLCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNDIsIDEzNiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMzAsIDcsIDYsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0NSwgNTksIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDE4MiwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzMCwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAxODIsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCAxLCAyMzAsIDg0LCA1MCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICA5MSwgNywgNiwgMSwgMTA0LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxNDIsIDcsIDYsIDEsIAotICAgIDIxNiwgMTUxLCA3LCA0LCAxLCAyMjAsIDc2LCAyMjIsIDkxLCA3LCA0LCAxLCAxMTUsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAKLSAgICAxMTUsIDIsIDE0MiwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAxMTUsIDIsIDE4MiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAyNTQsIDI0MywgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDE2MCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDE2MCwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDMwLCA3LCA0LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyNDUsIDU5LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAxODIsIDcsIDQsIAotICAgIDEsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzAsIDcsIAotICAgIDQsIDEsIDE0NCwgMiwgMTgyLCA3LCA0LCAxLCAxNDQsIDIsIDI0OCwgMSwgMjQ3LCAxNjksIDUwLCA3LCA0LCAxLCAxNDQsIAotICAgIDIsIDkxLCA3LCA0LCAxLCAxMDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDE0MiwgNywgNCwgMSwgCi0gICAgMjE2LCAxNTEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDExNSwgMiwgMjMxLCAyMzIsIDcsIDQsIAotICAgIDEsIDExNSwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAKLSAgICAxNDYsIDcsIDYsIDEsIDExNSwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDExNSwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDI1MSwgCi0gICAgNjcsIDIsIDE0MiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMTQyLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDMwLCA3LCA0LCAKLSAgICAxLCAyNTEsIDY3LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA2LCAxLCAyNDksIDYxLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0OSwgCi0gICAgNjEsIDIsIDkxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCA5MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTYwLCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTYwLCAyLCAyNTEsIDE0NiwgCi0gICAgNywgNiwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgCi0gICAgMjI0LCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgCi0gICAgMzAsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDI1MSwgMTQ2LCA3LCA2LCAKLSAgICAxLCAyNDMsIDIwMywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDMsIDIwMywgCi0gICAgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAKLSAgICAzMCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjQyLCA2MSwgMiwgOTEsIDcsIDQsIDEsIDI0MiwgCi0gICAgNjEsIDIsIDkxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMTgyLCA3LCA2LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjQwLCAxNTQsIAotICAgIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIAotICAgIDIyNCwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgNTksIDQ4LCA3LCA0LCAKLSAgICAxLCAyNDcsIDExOSwgNzMsIDcsIDYsIDI3LCAyMzYsIDMxLCA3LCA0LCAyNywgMjM2LCAzMSwgNywgNiwgMSwgMjM1LCAxNDUsIAotICAgIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDE4MywgCi0gICAgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIzMywgMjM5LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTQyLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIAotICAgIDIzMywgMTQ5LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA5MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIAotICAgIDkxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxNDIsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDE0MiwgNywgNiwgMSwgMjMwLCAyNiwgCi0gICAgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAyNTAsIAotICAgIDIzNCwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzMCwgMjYsIDIyNCwgMjA0LCAyNTEsIDc4LCAKLSAgICAyNTQsIDU3LCA3LCA2LCAxLCAyNDUsIDEzOCwgNywgNCwgMSwgMjQ1LCAxMzgsIDcsIDYsIDEsIDE0NCwgMiwgMjMxLCAyMzIsIAotICAgIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDE0NCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDE0NCwgMiwgCi0gICAgMjUxLCAxNDYsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA2LCAyNywgCi0gICAgMjI2LCAyMzQsIDcsIDQsIDI3LCAyMjYsIDIzNCwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDE0MiwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDE0MiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAKLSAgICAxODMsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA2LCAxLCAyMjIsIDkyLCAyLCAxNDIsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDE0MiwgNywgNiwgMSwgMjIyLCA5MiwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAxODMsIDcsIAotICAgIDQsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjIyLCAKLSAgICA5MiwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDI1MCwgMTgzLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDIzNCwgCi0gICAgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDkxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDE4MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMTA0LCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTA0LCAyLCAyNTEsIDE0NiwgNywgNiwgMSwgMTA0LCAKLSAgICAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDUyLCAxNDIsIAotICAgIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyNCwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyMjYsIDIyNCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjUwLCAzMCwgNywgCi0gICAgNiwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMTEsIAotICAgIDExOCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTQyLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTQyLCA3LCAKLSAgICA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTAsIAotICAgIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTk5LCAyMjIsIDkxLCAKLSAgICA3LCA0LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDU3LCAyLCAxMDMsIDcsIDYsIDEsIDU3LCAyLCAyMTYsIDExLCA3LCA0LCAKLSAgICAxLCA1NywgMiwgMjE2LCAxMSwgNywgNiwgMSwgMTM4LCAxOTQsIDcsIDQsIDEsIDEzOCwgMTk0LCA3LCA2LCAxLCAyMDQsIAotICAgIDc2LCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAxMDMsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDEwMywgNywgNiwgMSwgMjU0LCAKLSAgICAyMTksIDI0OSwgNjAsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDEwMywgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMjE2LCAxMSwgNywgCi0gICAgNCwgMSwgMjQ5LCA2MSwgMiwgMjE2LCAxMSwgNywgNCwgMSwgMjE1LCA5NCwgMjQ4LCA1NCwgNywgNiwgMSwgMjIzLCA0OSwgCi0gICAgNzUsIDcsIDYsIDEsIDIyMSwgMTk1LCA3LCA2LCAxLCAyMDQsIDc1LCA3LCA2LCAxLCAyNDUsIDcsIDIsIDEwMywgNywgNCwgCi0gICAgMSwgMjQ1LCA3LCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMTA3LCA3LCA0LCAxLCAKLSAgICAyNDAsIDIwMSwgNywgNiwgMSwgMjM1LCAxODUsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA5MSwgNywgNiwgMSwgMjM1LCAyNCwgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAxMDMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxMzAsIDcsIDQsIDEsIAotICAgIDIzMywgMTAwLCAyLCA5MSwgNywgNiwgMSwgMjE1LCA5NCwgMTkzLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA0MywgMTAzLCA3LCAKLSAgICA0LCAxLCAyMzAsIDI2LCAyLCAxOTksIDQ0LCAyMzMsIDM2LCA3LCA2LCAxLCAxNDQsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQwLCAyNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDgsIDcsIDYsIDEsIDIyNiwgMjE5LCA3LCA0LCAKLSAgICAxLCAyMjYsIDIxOSwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDEwMywgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDEwMywgNywgMSwgCi0gICAgMjEwLCAyMTQsIDcsIDYsIDEsIDEzOCwgMTA1LCA3LCA0LCAxLCAxMzgsIDEwNSwgNywgNiwgMSwgMjQ1LCA3NSwgNywgMSwgCi0gICAgMjIzLCA0OSwgMjQ1LCA3NiwgMjMyLCAxMjMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDYsIDEsIAotICAgIDIxNywgMTUzLCAyLCAxMDMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAxMDMsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyMjMsIAotICAgIDU1LCAxMDMsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDgsIDcsIDYsIDEsIAotICAgIDIxNCwgMTU3LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMTAzLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgCi0gICAgNiwgMSwgMjQ1LCA4LCA3LCA2LCAxLCAyNDUsIDksIDIyMywgNDgsIDcsIDQsIDEsIDI0NSwgOSwgMjIzLCA0OCwgNywgNCwgCi0gICAgMSwgMjQ1LCA5LCAyLCAyMTcsIDc3LCA3LCAxLCAxMTMsIDIsIDkxLCA3LCA2LCAxLCAxMzgsIDE4OSwgNywgNCwgMSwgMTM4LCAKLSAgICAxODksIDcsIDEsIDIzNSwgMTkzLCAyNDIsIDE4MCwgMjE4LCAxMzAsIDIsIDkxLCA3LCAxLCAyMTEsIDE4MSwgNywgMSwgCi0gICAgMjQ4LCA0NywgMjUwLCAxMSwgNywgMSwgMjMzLCA3NywgMjUwLCAxMSwgNywgMSwgMjU0LCAxMzcsIDI1MCwgMTEsIDcsIDEsIAotICAgIDIyMywgNTUsIDI1MCwgMTEsIDcsIDYsIDEsIDI0NiwgNDAsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDksIDYxLCAyLCA0LCAKLSAgICAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0NiwgNDAsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzIsIAotICAgIDE4OCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDQsIDEsIDIzNSwgMTQ0LCA3LCA0LCAxLCAyMzIsIDE4OCwgNywgNiwgMSwgCi0gICAgMjI4LCAxODYsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDQsIDEsIDIzNSwgMTQ0LCA3LCA0LCAxLCAyMjgsIDE4NiwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAyMzQsIDcsIAotICAgIDQsIDEsIDE0NCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAKLSAgICAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMjMxLCAyMzIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAyNTAsIDIzNCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjE1LCA5NCwgNzUsIDcsIDYsIDEsIDExNSwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDQsIDEsIDExNSwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDExNSwgMiwgNTksIDc3LCAyMiwgCi0gICAgMjMxLCAyMzIsIDcsIDQsIDEsIDExNSwgMiwgNTksIDc3LCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI1NCwgMjQ0LCAyLCAKLSAgICAyMzEsIDIzMiwgNywgNCwgMSwgMjU0LCAyNDQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgOTEsIDcsIDQsIAotICAgIDEsIDI0MywgMjAzLCAyLCA5MSwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDIzNCwgCi0gICAgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyNCwgNywgNCwgMSwgMTQ0LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyMjYsIDIyNSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDIyNiwgMjI1LCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIAotICAgIDI0NSwgOSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0NSwgOSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNiwgMSwgMjQ2LCAzOSwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNCwgMSwgMjEwLCAxNTksIDcsIDQsIDEsIAotICAgIDI0NiwgMzksIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAxNDIsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAxNDIsIDcsIDYsIDEsIAotICAgIDI0MCwgMTk5LCA3LCA2LCAxLCAyMTEsIDE4MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIzMCwgCi0gICAgMjYsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMTE1LCAyLCAKLSAgICAyMjIsIDIzNCwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDI1NCwgMjQ0LCAyLCAxNDIsIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE4LCAxMDMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE4LCAxMDMsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDExNSwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMTUsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDExNSwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAKLSAgICAxLCAxNjAsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNjAsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIAotICAgIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTQ0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDIyMywgCi0gICAgMjI0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIAotICAgIDYsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAKLSAgICAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDEwNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyMjIsIAotICAgIDkyLCAyLCAyNDksIDIyMCwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI0OSwgMjIwLCA1MSwgNywgNiwgMSwgMjE3LCAKLSAgICAxNTMsIDIsIDI0OSwgMjIwLCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0OSwgMjIwLCA1MSwgNywgNiwgMSwgMjEwLCAKLSAgICAyMzEsIDcsIDQsIDEsIDIxMCwgMjMxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQyLCA2MSwgCi0gICAgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDE5OSwgNDQsIDIzMywgMzYsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIAotICAgIDI0OSwgMTAwLCA3LCA2LCAxLCAyMjYsIDEzNCwgNywgNCwgMSwgMjI2LCAxMzQsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAxMDMsIDcsIDYsIDEsIDExNSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgNTksIDc3LCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDc3LCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjQ5LCAKLSAgICAxMDAsIDcsIDQsIDEsIDI0NywgMTE5LCAyMzUsIDE0NCwgNywgNCwgMSwgMjQ4LCAxNDMsIDI0NywgMjIwLCA3LCA0LCAxLCAKLSAgICAyMjQsIDMxLCAyNDcsIDIyMCwgNywgNiwgMSwgMTE1LCAyLCA5MSwgNywgNiwgMSwgMjUxLCA2NywgMiwgOTEsIDcsIDQsIDEsIAotICAgIDI1MSwgNjcsIDIsIDkxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMTMwLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjQ3LCAKLSAgICAyNTUsIDkxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyMTcsIDI1MCwgMjE3LCA3NywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDIxNywgMjUwLCAyMTcsIDc3LCA3LCA2LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDQsIDEsIDI0MiwgMTgwLCAyMTgsIAotICAgIDEyOSwgNywgNiwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDEzMCwgNywgNiwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgOTEsIDcsIDQsIDEsIDE2MCwgMiwgOTEsIDcsIDYsIDEsIDIzNSwgMTQ1LCAyLCA5MSwgNywgNCwgCi0gICAgMSwgMjM1LCAxNDUsIDIsIDkxLCA3LCA2LCAxLCA0LCAyMjQsIDk3LCAyLCAyNDEsIDUyLCAyMTcsIDc3LCA3LCA0LCAxLCAKLSAgICAyMjQsIDk3LCAyLCAyNDEsIDUyLCAyMTcsIDc3LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgOTEsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCA5MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIAotICAgIDIxNSwgOTQsIDYxLCA3LCA0LCAxLCAyNTQsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAxNDMsIDcsIDQsIDEsIDU3LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzYsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyNDksIAotICAgIDYxLCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAxMDMsIDcsIDQsIDEsIDIyMywgNDksIDc1LCA3LCA0LCAxLCAKLSAgICAyMjEsIDE5NSwgNywgNCwgMSwgMjIxLCAxOTYsIDIsIDEwMywgNywgNCwgMSwgMjA0LCA3NSwgNywgNCwgMSwgMjIzLCA0OSwgCi0gICAgMjA0LCA3NSwgNywgNCwgMSwgMjIzLCA0OSwgMjA0LCAxNjAsIDIsIDEwMywgNywgNCwgMSwgMjUwLCAwLCAyMjMsIDQ5LCAKLSAgICAyMDQsIDc1LCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDkxLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMTAzLCAKLSAgICA3LCA0LCAxLCAxMTksIDI0MywgMjAyLCA3LCAxLCA0LCA2LCAyNDMsIDIwMiwgNywgNCwgMSwgMjQzLCAxMDcsIDcsIDQsIDEsIAotICAgIDIyMywgMTUxLCAyNDAsIDI0OCwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2MCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMTAzLCAKLSAgICA3LCA0LCAxLCAyNDEsIDIwOCwgMiwgMTAzLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTg1LCAKLSAgICA3LCAxLCA0LCA2LCA3MywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyNTIsIDQxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMzMsIDEsIDcsIDQsIDEsIAotICAgIDIxNSwgOTQsIDE5MywgNywgNCwgMSwgMjE1LCA5NCwgMjMyLCA1MCwgMiwgMTk5LCAyMzMsIDM2LCA3LCA0LCAxLCAyMzIsIAotICAgIDUwLCAyLCAxMDMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDQzLCAxMDMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDIyMywgNTUsIAotICAgIDEwMywgNywgMSwgNCwgNiwgMjMwLCAyNSwgNywgNCwgMSwgMjUyLCAxMzQsIDc2LCA3LCAxLCA0LCA2LCAyMjYsIDIzNCwgNywgCi0gICAgNCwgMSwgMjUwLCAwLCAyMjYsIDIwMSwgNywgNCwgMSwgMjI1LCAxMzMsIDcsIDQsIDEsIDIxNSwgOTQsIDE1MywgNywgNCwgCi0gICAgMSwgMjE1LCA5NCwgMjIzLCAyMjQsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjQsIDIsIAotICAgIDEwMywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIAotICAgIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNDQsIDg3LCA3LCA0LCAxLCAyMjMsIDQ5LCAyMjMsIDIyNCwgMiwgMjQ0LCA4NywgNywgCi0gICAgMSwgNCwgNiwgMTUzLCA3LCAxLCA0LCA2LCAyMzUsIDE5MywgMTUzLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAxMDMsIDcsIDQsIAotICAgIDEsIDI0NSwgNzUsIDcsIDQsIDEsIDI0NywgMTE5LCAyMzUsIDE0NSwgMiwgMjE4LCAxMDMsIDIyLCAxMDMsIDcsIDQsIDEsIAotICAgIDIxOCwgMjMxLCAyMjMsIDQ5LCAyNDUsIDc1LCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE1LCAKLSAgICA5NCwgMjE3LCAxNTIsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDEwNCwgMTMwLCA3LCAKLSAgICA0LCAxLCAyMTQsIDE1NywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIAotICAgIDQsIDEsIDIxNSwgOTQsIDIxMiwgOTgsIDcsIDQsIDEsIDIxNSwgOTQsIDIxMSwgMTE3LCA3LCAxLCA0LCA2LCAyMTEsIDExNywgCi0gICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OSwgMTAwLCA3LCA0LCAKLSAgICAxLCAyNDUsIDgsIDcsIDQsIDEsIDI0NSwgOSwgMiwgMjQ5LCAxMDAsIDcsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNywgMSwgCi0gICAgMjI1LCAxMzksIDIxMywgMTM1LCAyNDMsIDI0OSwgNywgMSwgMjM1LCAxOTMsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNywgMSwgCi0gICAgMjE4LCAxMTAsIDI1MSwgNjYsIDcsIDEsIDI1MSwgMjQ2LCAyNTAsIDExLCA3LCAxLCA0LCA2LCAyNTMsIDE1OCwgNywgNCwgCi0gICAgMSwgMjUwLCAwLCAyMDQsIDc1LCA3LCAxLCA0LCA2LCAyNDMsIDIwMywgMiwgMTAzLCA3LCAxLCA0LCA2LCAyNDIsIDYwLCA3LCAKLSAgICA0LCAxLCAyMzUsIDE0NSwgMiwgMjQ5LCAxMjcsIDcsIDQsIDEsIDIxNSwgOTQsIDIzNSwgMjMsIDcsIDEsIDQsIDYsIDE1NiwgCi0gICAgNywgNCwgMSwgMjI0LCA5NywgMiwgMTAzLCA3LCAxLCAyNDIsIDE4MCwgMjE4LCAxMzAsIDIsIDkxLCA3LCAxLCAyMjMsIDQ5LCAKLSAgICAyNDIsIDE4MCwgMjE4LCAxMzAsIDIsIDkxLCA3LCA0LCAxLCAyNDYsIDQwLCAyNDcsIDIyMCwgNywgNCwgMSwgMjQ4LCAyNiwgCi0gICAgMjQ3LCAyMjAsIDcsIDQsIDEsIDI0NiwgNDAsIDI0NywgMjIxLCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE1LCAxODUsIAotICAgIDI0NywgMjIwLCA3LCA0LCAxLCAyMTYsIDIzNSwgMjQ3LCAyMjAsIDcsIDQsIDEsIDIxNywgMjksIDI0NywgMjIxLCAyLCAKLSAgICAyNDksIDEwMCwgNywgNCwgMSwgMjQ0LCAxMzQsIDI0NywgMjIwLCA3LCA0LCAxLCAyMzIsIDEwMCwgMjQ3LCAyMjAsIDcsIDQsIAotICAgIDEsIDIzMiwgNTEsIDI0NywgMjIwLCA3LCAxLCAyNTEsIDI0NiwgMjI1LCAxODEsIDcsIDEsIDI1MSwgMjU0LCAyMjUsIDE4MSwgCi0gICAgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2MSwgMiwgMjQ0LCA4NywgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2MSwgMiwgMjQ0LCAKLSAgICA4OCwgMjIsIDIxNywgNzcsIDU4LCAxLCA0LCAyNDIsIDYwLCA1OCwgMSwgNCwgMjQyLCA2MSwgMiwgMTAzLCA1OCwgMSwgNCwgCi0gICAgMjM1LCAxNDQsIDU4LCAxLCA0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMjMsIAotICAgIDIyNCwgMiwgMTAzLCA1OCwgMSwgNCwgNiwgMjM1LCAxOTMsIDE1MywgNTgsIDEsIDQsIDIxMiwgOTgsIDU4LCAxLCA0LCAKLSAgICAyMTEsIDExNywgNTgsIDEsIDIyNCwgMTkwLCA1OCwgMSwgNTIsIDIyNCwgMTkwLCA1OCwgMSwgMjE1LCA5NCwgMjQ5LCAyMTksIAotICAgIDU4LCAxLCAyNTQsIDU3LCA1OCwgMSwgMjIzLCA0OSwgMjQ5LCAyMTksIDU4LCAxLCA0NCwgMTYzLCAyMjIsIDIzMywgNTgsIAotICAgIDEsIDQzLCAxNjMsIDIyMiwgMjMzLCA1OCwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA1OCwgMSwgMjIzLCA0OSwgMjQyLCAKLSAgICAxODAsIDIxOCwgMTI5LCA1OCwgMSwgNDMsIDI1MywgMjQ5LCA1OCwgMSwgNDQsIDI1MywgMjQ5LCA1OCwgMSwgMTIwLCAyNTMsIAotICAgIDI0OSwgNTgsIDEsIDEyNCwgMjUzLCAyNDksIDU4LCAxLCAyNTAsIDMxLCAyNTUsIDE0LCAyNTAsIDIzNCwgNTgsIDEsIDY3LCAKLSAgICAyMzIsIDIxMywgNTgsIDEsIDIzMSwgMjMyLCA1OCwgMSwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjQyLCAxMzcsIDI1NSwgCi0gICAgMTQsIDU4LCAxLCAxMjEsIDY3LCAyMzIsIDIxMywgNTgsIDEsIDEyMSwgMjMxLCAyMzIsIDU4LCAxLCAxMjEsIDI0MiwgMTM3LCAKLSAgICAyNTUsIDE0LCA1OCwgMSwgMTIxLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAyMTUsIDIyMiwgMjQ5LCAyMjYsIDU4LCAxLCAKLSAgICAxNjMsIDIxNSwgMjIyLCAyNDksIDIyNiwgNTgsIDEsIDI1MCwgMTczLCA0NCwgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDI1MCwgCi0gICAgMTczLCA0MywgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDEyMCwgMjE3LCA4NywgNTgsIDEsIDEyNCwgMjE3LCA4NywgNTgsIDEsIAotICAgIDk2LCA1MCwgNTgsIDEsIDIzMCwgMTgyLCA1MCwgMjUxLCAxNDYsIDU5LCA0OCwgMjIyLCAyMzQsIDQ4LCAyMjYsIDIyNCwgNCwgCi0gICAgMTgyLCA1MiwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjIzLCAzNiwgMTAzLCA1OCwgMSwgMjQ5LCAxMzEsIDI1NSwgMTQsIAotICAgIDU4LCAxLCA0LCAyNDMsIDEwNywgNTgsIDEsIDQsIDE1NiwgNTgsIDEsIDQsIDIyMiwgOTEsIDU4LCAxLCA0LCAyMTEsIDE3OCwgCi0gICAgNTgsIDEsIDQsIDIyMywgNDksIDI0MiwgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDI0NSwgMjAsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMTI1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMTM4LCAxMzAsIDU4LCAxLCAKLSAgICAyNDUsIDE5LCAxMzgsIDEzMCwgNTgsIDEsIDIxMCwgMjU0LCAyNDgsIDQ0LCAxMzgsIDc4LCA1OCwgMSwgMjExLCA3MCwgCi0gICAgMjQ4LCA0NCwgMTM4LCA3OCwgNTgsIDEsIDIxMywgMTMzLCA1OCwgMSwgMjE0LCAxODYsIDU4LCAxLCA1MiwgMjU0LCA1NywgCi0gICAgNTgsIDEsIDEyMSwgMTI0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgMTIwLCAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgNDMsIAotICAgIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCA0NCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDIyMiwgMjMzLCA1OCwgMSwgMjMwLCAKLSAgICAyMjQsIDI0MiwgMTM3LCAyNTUsIDE0LCA1OCwgMSwgMjMwLCAyMjQsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgNTgsIDEsIAotICAgIDIzMCwgMjI0LCA1MiwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMTIxLCAxODIsIDU4LCAxLCAyMjMsIDE1NywgMjQ5LCAKLSAgICAyMjYsIDU4LCAxLCAyNTIsIDU4LCAxMjUsIDIxNiwgMzAsIDU4LCAxLCAyNDUsIDE0MywgMTI1LCAyMTYsIDMwLCA1OCwgMSwgCi0gICAgMjUyLCA1OCwgMTIxLCAyMTYsIDMwLCA1OCwgMSwgMjQ1LCAxNDMsIDEyMSwgMjE2LCAzMCwgNTgsIDEsIDIyMCwgNTQsIDU4LCAKLSAgICAxLCAyMDQsIDIyMCwgNTQsIDU4LCAxLCAxMjEsIDQzLCA3NCwgMzgsIDI0MiwgMTM3LCAyNTUsIDE0LCAzOCwgMjU1LCAzLCAKLSAgICAyNTUsIDE0LCAzOCwgMjUwLCAzMSwgMjU1LCAxNCwgMzgsIDE4MiwgMzgsIDIzMSwgMjMyLCAzOCwgMjI2LCAxMTksIDM4LCAKLSAgICAyNTEsIDE0NiwgMzgsIDU5LCA0OCwgMzgsIDI0OCwgMSwgMzgsIDI0MSwgNTIsIDQ4LCAzOCwgMjIyLCAyMzQsIDQ4LCAzOCwgCi0gICAgNTIsIDI1NSwgMywgMjU1LCAxNCwgMzgsIDI1MCwgMjM0LCAzOCwgNjcsIDIzMiwgMjE0LCA0OCwgMzgsIDUyLCA2NywgMjMyLCAKLSAgICAyMTQsIDQ4LCAzOCwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCAzOCwgMjUwLCAyNTUsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDYsIAotICAgIDM4LCAyMTUsIDk0LCAyNDksIDIyMCwgNDgsIDM4LCAyNDksIDIyMCwgNDgsIDM4LCAyMjMsIDQ5LCAyNDksIDIyMCwgNDgsIAotICAgIDM4LCAyNDksIDIyMCwgNzcsIDIyMiwgMjUxLCAzOCwgMjQyLCAxMzcsIDI1NSwgMTUsIDUxLCAzOCwgMjU1LCAzLCAyNTUsIAotICAgIDE1LCA1MSwgMzgsIDQzLCAyMTcsIDg4LCA1MSwgMzgsIDQ0LCAyMTcsIDg4LCA1MSwgMzgsIDQzLCAyNTQsIDExMCwgNDgsIAotICAgIDM4LCAyNDAsIDI0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM0LCA1MSwgMzgsIDEyMCwgMjE3LCA4OCwgNTEsIDM4LCAxMjQsIAotICAgIDIxNywgODgsIDUxLCAzOCwgOTYsIDUsIDUxLCAzOCwgMjMwLCAxODIsIDUsIDUxLCAzOCwgMjI2LCA2NCwgMjQxLCA1MiwgCi0gICAgNTEsIDM4LCAyMjMsIDU1LCAyNDEsIDUyLCA1MSwgMzgsIDU5LCA1MSwgMzgsIDI0OCwgMiwgNTEsIDM4LCAyMjIsIDIzNCwgCi0gICAgNTEsIDM4LCAyNDksIDIyMCwgNTEsIDM4LCAyNTAsIDE4MywgMzgsIDIyNiwgMjI0LCAzOCwgNjcsIDIzMiwgMjE0LCA1MSwgCi0gICAgMzgsIDI1MSwgMTQwLCA1MSwgMzgsIDIzNSwgMTkzLCA1MiwgMjU0LCAyNCwgNTEsIDM4LCAyNTAsIDIzNSwgNTEsIDM4LCAKLSAgICAyNTAsIDMxLCAyNTUsIDE1LCA1MSwgMzgsIDI1MSwgMTQ3LCA1MSwgMzgsIDIzNSwgMTkzLCAyNTEsIDE0NywgNTEsIDM4LCAKLSAgICAyMTYsIDg5LCA1MSwgMzgsIDIzMSwgMjMzLCA1MSwgMzgsIDEyMSwgMjMyLCAyMTMsIDM4LCA1MiwgMTIxLCAyMzIsIDIxMywgCi0gICAgMzgsIDIxNiwgODksIDIyNiwgMTIwLCAzOCwgMjE5LCAyNTEsIDIxOCwgMTAzLCAyMjYsIDEyMCwgMzgsIDE5OSwgMjE4LCAKLSAgICAxMDMsIDIyNiwgMTIwLCAzOCwgMjE5LCAyNTEsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgMTk5LCAyMTksIDQ3LCAyMjYsIAotICAgIDEyMCwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM0LCA1MSwgMzgsIDIzNSwgMTkzLCAyNTEsIDE0MCwgNTEsIDM4LCA0MiwgNTEsIAotICAgIDM4LCAyMjEsIDE4MCwgNTEsIDM4LCAyMTEsIDE3OSwgNDgsIDM4LCA2NywgMTgyLCAzOCwgNTIsIDIyNiwgMTE5LCAzOCwgCi0gICAgMjQyLCAxMzcsIDEzOCwgNzgsIDM4LCAyNTUsIDMsIDEzOCwgNzgsIDM4LCAyNiwgMjI1LCAxNzUsIDM4LCAyNiwgMjM0LCAyLCAKLSAgICAzOCwgMjYsIDI0NywgMjUyLCAyMTYsIDE4LCAzOCwgMjYsIDIxMCwgMjE5LCAzOCwgMjUxLCAxNDAsIDQ4LCAzOCwgMjQ1LCAKLSAgICA5OCwgNSwgNTEsIDM4LCA1MiwgNjcsIDIzMiwgMjE0LCA1MSwgMzgsIDQzLCAyNTQsIDExMCwgNTEsIDM4LCAyMjgsIDUyLCAKLSAgICAyMTYsIDg5LCA0OCwgMzgsIDI0MSwgNTgsIDQ4LCAzOCwgMjU0LCAxNDgsIDEyOCwgMjE2LCA0MiwgNDgsIDM4LCA0MywgNDQsIAotICAgIDgwLCA1MSwgMzgsIDIxNCwgMTUzLCA4MCwgNTEsIDM4LCAyNDIsIDE0MiwgMjM1LCA2MywgMzgsIDQ0LCAyNTMsIDI1MCwgCi0gICAgNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNCwgNDgsIDM4LCAyNDQsIDEzMSwgMzgsIDIxMSwgMTc5LCA1MSwgMzgsIDQzLCAKLSAgICAyNTMsIDI1MCwgNTEsIDM4LCA0NCwgMjUzLCAyNTAsIDUxLCAzOCwgNDQsIDI1MywgMjUwLCAyMiwgMTIwLCAyNTMsIDI1MCwgCi0gICAgNTEsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNCwgNDgsIDM4LCA1OSwgNzcsIDIyMiwgMjUxLCAzOCwgMjUzLCAyMTcsIDUxLCAKLSAgICAzOCwgNTIsIDIyMiwgMjM0LCA1MSwgMzgsIDIxMCwgMzUsIDQ4LCAzOCwgNTIsIDI1MSwgMTQ3LCA1MSwgMzgsIDUyLCAyNTEsIAotICAgIDE0NiwgMzgsIDUyLCAyMzEsIDIzMiwgMzgsIDUyLCAyMzEsIDIzMywgNTEsIDM4LCA1MiwgMTgyLCAzOCwgNTIsIDIzNSwgCi0gICAgMTkzLCAyNTEsIDE0NiwgMzgsIDUyLCA5NywgODAsIDUxLCAzOCwgNywgNCwgMSwgNjEsIDM4LCA3LCA0LCAxLCA3NSwgMzgsIAotICAgIDcsIDQsIDEsIDczLCAzOCwgNywgNCwgMSwgNzYsIDM4LCA3LCA0LCAxLCA3MCwgMzgsIDcsIDQsIDEsIDI1MSwgNjYsIDM4LCAKLSAgICA3LCA0LCAxLCAyNDksIDYwLCAzOCwgNywgNCwgMSwgMjQyLCA2MCwgMzgsIDcsIDQsIDEsIDE5MywgMzgsIDcsIDQsIDEsIAotICAgIDE1MywgMzgsIDcsIDQsIDEsIDIxNywgMTUyLCAzOCwgNywgNCwgMSwgMjE0LCAxMDUsIDM4LCA3LCA0LCAxLCAyMTEsIDE3OCwgCi0gICAgMjYsIDYsIDEsIDI0MSwgMTk2LCAyNiwgNCwgMSwgMjQxLCAxOTYsIDI2LCA2LCAxLCAyNTQsIDIzLCAyMjEsIDI0NiwgMjYsIAotICAgIDQsIDEsIDI1NCwgMjMsIDIyMSwgMjQ2LCAyNiwgMjI3LCAxOTgsIDUwLCAyNiwgMjMyLCAxMDgsIDIyNywgMTk4LCA1MCwgCi0gICAgMjYsIDYsIDEsIDIyNiwgNTEsIDI0NywgMjI3LCAyNiwgNCwgMSwgMjI2LCA1MSwgMjQ3LCAyMjcsIDI2LCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDIyMywgNDksIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDQsIDI0NiwgMTE4LCAyMzIsIDgzLCAyMTksIAotICAgIDE3OCwgODcsIDI2LCA0LCAyMjMsIDQ5LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgMjI0LCAxMywgCi0gICAgNzgsIDI2LCAyMTYsIDE4LCAyNiwgMjQ3LCAyNTIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjE2LCAxOCwgCi0gICAgMjYsIDI1NCwgOTcsIDIxNywgMiwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIxNiwgCi0gICAgMTgsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI1NCwgMTQzLCAyNiwgNiwgMSwgCi0gICAgMjUyLCAyNiwgMjYsIDYsIDEsIDI0MywgMTA3LCAyNiwgNiwgMSwgMjQ4LCA1NCwgMjYsIDYsIDEsIDI0NSwgMTAwLCAyNiwgCi0gICAgNiwgMSwgMjEwLCA4NSwgMjYsIDYsIDEsIDI0NSwgNjMsIDI2LCA2LCAxLCAyMTYsIDE3OSwgMjYsIDYsIDEsIDIzNSwgMTg1LCAKLSAgICAyNiwgNiwgMSwgMjM0LCAyMjIsIDI2LCA2LCAxLCAyMzMsIDk4LCAyNiwgNiwgMSwgMjMwLCAxMDIsIDI2LCA2LCAxLCAyMjcsIAotICAgIDIzNywgMjYsIDYsIDEsIDIxMSwgMTU3LCAyNiwgNiwgMSwgMjI2LCAxOTksIDI2LCA2LCAxLCAyMjUsIDEwOCwgMjYsIDYsIAotICAgIDEsIDIyMywgMzcsIDI2LCA2LCAxLCAyMTksIDE3NywgMjYsIDYsIDEsIDIxNywgNDEsIDI2LCA2LCAxLCAyMTQsIDE1NywgCi0gICAgMjYsIDYsIDEsIDIyNSwgMTMzLCAyNiwgNiwgMSwgMjUwLCAxMTAsIDI2LCA2LCAxLCAyMjQsIDE2MSwgMjYsIDYsIDEsIAotICAgIDIyNiwgMjAxLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUxLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0NywgCi0gICAgMjUxLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDI0NSwgNjQsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU4LCAyLCAyNDcsIDI1MiwgMjIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyNTQsIDE0MywgMjYsIDQsIDEsIDI1MiwgMjYsIDI2LCAKLSAgICA0LCAxLCAyNDMsIDEwNywgMjYsIDQsIDEsIDI0OCwgNTQsIDI2LCA0LCAxLCAyNDUsIDEwMCwgMjYsIDQsIDEsIDIxMCwgODUsIAotICAgIDI2LCA0LCAxLCAyNDUsIDYzLCAyNiwgNCwgMSwgMjE2LCAxNzksIDI2LCA0LCAxLCAyMzUsIDE4NSwgMjYsIDQsIDEsIDIzNCwgCi0gICAgMjIyLCAyNiwgNCwgMSwgMjMzLCA5OCwgMjYsIDQsIDEsIDIzMCwgMTAyLCAyNiwgNCwgMSwgMjI3LCAyMzcsIDI2LCA0LCAxLCAKLSAgICAyMTEsIDE1NywgMjYsIDQsIDEsIDIyNiwgMTk5LCAyNiwgNCwgMSwgMjI1LCAxMDgsIDI2LCA0LCAxLCAyMjMsIDM3LCAyNiwgCi0gICAgNCwgMSwgNDAsIDIxOSwgMTc3LCAyNiwgNCwgMSwgMjE5LCAxNzcsIDI2LCA0LCAxLCAyMTcsIDQxLCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTcsIDI2LCA0LCAxLCAyMjUsIDEzMywgMjYsIDQsIDEsIDI1MCwgMTEwLCAyNiwgNCwgMSwgMjI0LCAxNjEsIDI2LCA0LCAKLSAgICAxLCAyMjYsIDIwMSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIAotICAgIDI1MSwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAxOCwgMjYsIDYsIDIzNCwgMjQ3LCA4NywgMjYsIDI1MiwgMjcsIDg3LCAyNiwgCi0gICAgMjE2LCAxODAsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0MSwgNTIsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI1NSwgMywgMjIsIAotICAgIDI0MSwgNTIsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0OCwgMiwgMjIsIDI0MSwgNTIsIDg3LCAyNiwgMjI1LCAxMzQsIDg3LCAKLSAgICAyNiwgMjI1LCAxMDksIDg3LCAyNiwgMjM0LCAyNDcsIDg3LCAyNiwgMSwgMjU0LCAyMywgMjM0LCA2LCAyNiwgNCwgMSwgCi0gICAgMjU0LCAyMywgMjM0LCA2LCAyNiwgMSwgMjE4LCAxMzcsIDI2LCA0LCAxLCAyMTgsIDEzNywgMjYsIDEsIDI0NywgMjI3LCAKLSAgICAyNiwgNCwgMSwgMjQ3LCAyMjcsIDI2LCAxLCAyMzQsIDYsIDI2LCA0LCAxLCAyMzQsIDYsIDI2LCAxLCAyMjEsIDI0NiwgMjYsIAotICAgIDQsIDEsIDIyMSwgMjQ2LCA4MSwgNiwgMSwgMjIwLCA1NSwgODEsIDQsIDEsIDIyMCwgNTUsIDgxLCA2LCAxLCAyNDQsIDE0MCwgCi0gICAgODEsIDQsIDEsIDI0NCwgMTQwLCA4MSwgNiwgMSwgMjM0LCAxMTcsIDgxLCA0LCAxLCAyMzQsIDExNywgODEsIDYsIDEsIAotICAgIDI0MSwgNDUsIDgxLCA0LCAxLCAyNDEsIDQ1LCA4MSwgNiwgMSwgMjQzLCAxMDIsIDgxLCA0LCAxLCAyNDMsIDEwMiwgODEsIAotICAgIDYsIDEsIDIyMCwgMjIsIDgxLCA0LCAxLCAyMjAsIDIyLCA4MSwgNiwgMSwgMjQ4LCA2OSwgODEsIDQsIDEsIDI0OCwgNjksIAotICAgIDI2LCAyMzQsIDIyMywgODcsIDI2LCAyMjMsIDM4LCA4NywgMjYsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDEsIDIxMCwgCi0gICAgMjI0LCAyNiwgNiwgMjE2LCAxODAsIDg3LCAyNiwgMjMyLCA4MywgMjQ1LCAxMDEsIDg3LCAyNiwgMjIzLCA0OSwgMjMyLCAKLSAgICA4MywgMjQ1LCAxMDEsIDg3LCAyNiwgNiwgMSwgMjIwLCA3LCAyNiwgNCwgMSwgMjIwLCA3LCAyNiwgNiwgMjMyLCA4MywgCi0gICAgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMSwgMjIxLCAyNDMsIDI2LCA0LCAxLCAyMjEsIDI0MywgMjYsIDIyMywgMzgsIDIsIAotICAgIDIxOCwgMTAzLCA4NywgMjYsIDYsIDIyMywgNDksIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDYsIDI0NiwgMTE4LCAKLSAgICAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA2LCAyMjMsIDQ5LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAKLSAgICAzMywgNiwgMSwgMjM2LCA2MSwgMiwgMjQyLCAxMzYsIDMzLCA2LCAxLCAyMzUsIDE4OSwgMzMsIDYsIDEsIDI0NywgMTYyLCAKLSAgICAzMywgNiwgMSwgMjQyLCAxODcsIDMzLCA2LCAxLCAyMTQsIDIwMiwgMjM2LCA2MCwgMzMsIDYsIDEsIDI0NiwgMzYsIDMzLCAKLSAgICA2LCAxLCAyNTEsIDc2LCA3MywgMzMsIDYsIDEsIDIxMSwgOCwgMzMsIDYsIDEsIDIzNSwgMTI2LCAzMywgNiwgMSwgMjMyLCAKLSAgICAxODcsIDMzLCA2LCAxLCAyMjgsIDE3OCwgMzMsIDYsIDEsIDIxNSwgMTc0LCAzMywgNiwgMSwgMjM0LCA0OCwgMzMsIDYsIDEsIAotICAgIDI0MCwgMTU0LCAyLCAyNDIsIDEzNiwgMzMsIDYsIDEsIDIxOSwgMjUxLCA3MCwgMzMsIDYsIDEsIDI0NiwgMzIsIDMzLCA2LCAKLSAgICAxLCA2MSwgMzMsIDYsIDEsIDI1MiwgNzUsIDMzLCA2LCAxLCAyMTMsIDI1NSwgMzMsIDYsIDEsIDI0MiwgMjM2LCAzMywgNiwgCi0gICAgMSwgMjQ4LCA5MCwgMzMsIDYsIDEsIDIzNiwgNjAsIDMzLCA2LCAxLCAyMTAsIDc0LCAzMywgNiwgMSwgMjEwLCA5NCwgMzMsIAotICAgIDYsIDEsIDczLCAzMywgNiwgMSwgMjE5LCAyNTEsIDczLCAzMywgNiwgMSwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNzQsIDMzLCAKLSAgICA2LCAxLCAyNDUsIDE1OSwgMzMsIDYsIDEsIDI0NSwgMTUwLCAzMywgNiwgMSwgNzYsIDMzLCA2LCAxLCAyMjUsIDIyMSwgMzMsIAotICAgIDYsIDEsIDI0NSwgOTIsIDMzLCA2LCAxLCAyNDUsIDgyLCAzMywgNiwgMSwgMjE3LCAyMiwgMzMsIDYsIDEsIDcwLCAzMywgNiwgCi0gICAgMSwgMjQ1LCAyMDIsIDMzLCA2LCAxLCAxNjIsIDMzLCA2LCAxLCAyMTUsIDE3OCwgMzMsIDYsIDEsIDI1MCwgMTMxLCAzMywgCi0gICAgNiwgMSwgMjIwLCAxMDIsIDMzLCA2LCAxLCAyMjAsIDY1LCAzMywgNiwgMSwgMjQyLCAzLCA1MCwgMzMsIDYsIDEsIDIxMSwgCi0gICAgMjcsIDMzLCA2LCAxLCAyMTksIDUyLCA1MCwgMzMsIDYsIDEsIDc1LCAzMywgNiwgMSwgMjEwLCAyMTIsIDMzLCA2LCAxLCAKLSAgICAxOTEsIDMzLCA0LCAxLCA2MSwgMzMsIDQsIDEsIDI1MiwgNzUsIDMzLCA0LCAxLCAyMTMsIDI1NSwgMzMsIDQsIDEsIDI0MiwgCi0gICAgMjM2LCAzMywgNCwgMSwgMjQ4LCA5MCwgMzMsIDQsIDEsIDIzNiwgNjAsIDMzLCA0LCAxLCAyMTAsIDc0LCAzMywgNCwgMSwgCi0gICAgMjEwLCA5NCwgMzMsIDQsIDEsIDczLCAzMywgNCwgMSwgMjE5LCAyNTEsIDczLCAzMywgNCwgMSwgMTc2LCAzMywgNCwgMSwgCi0gICAgMjQ1LCAxNzQsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMzMsIDQsIDEsIDI0NSwgMTUwLCAzMywgNCwgMSwgNzYsIDMzLCA0LCAxLCAKLSAgICAyMjUsIDIyMSwgMzMsIDQsIDEsIDI0NSwgOTIsIDMzLCA0LCAxLCAyNDUsIDgyLCAzMywgNCwgMSwgMjE3LCAyMiwgMzMsIDQsIAotICAgIDEsIDcwLCAzMywgNCwgMSwgMjQ1LCAyMDIsIDMzLCA0LCAxLCAxNjIsIDMzLCA0LCAxLCAyMTUsIDE3OCwgMzMsIDQsIDEsIAotICAgIDI1MCwgMTMxLCAzMywgNCwgMSwgMjIwLCAxMDIsIDMzLCA0LCAxLCAyMjAsIDY1LCAzMywgNCwgMSwgMjQyLCAzLCA1MCwgCi0gICAgMzMsIDQsIDEsIDIxMSwgMjcsIDMzLCA0LCAxLCAyMTksIDUyLCA1MCwgMzMsIDQsIDEsIDc1LCAzMywgNCwgMSwgMjEwLCAKLSAgICAyMTIsIDMzLCA0LCAxLCAxOTEsIDMzLCA0LCAxLCAyMzYsIDYxLCAyLCAyNDIsIDEzNiwgMzMsIDQsIDEsIDIzNSwgMTg5LCAKLSAgICAzMywgNCwgMSwgMjQ3LCAxNjIsIDMzLCA0LCAxLCAyNDIsIDE4NywgMzMsIDQsIDEsIDIxNCwgMjAyLCAyMzYsIDYwLCAzMywgCi0gICAgNCwgMSwgMjQ2LCAzNiwgMzMsIDQsIDEsIDI1MSwgNzYsIDczLCAzMywgNCwgMSwgMjExLCA4LCAzMywgNCwgMSwgMjM1LCAKLSAgICAxMjYsIDMzLCA0LCAxLCAyMzIsIDE4NywgMzMsIDQsIDEsIDIyOCwgMTc4LCAzMywgNCwgMSwgMjE1LCAxNzQsIDMzLCA0LCAKLSAgICAxLCAyMzQsIDQ4LCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDI0MiwgMTM2LCAzMywgNCwgMSwgMjE5LCAyNTEsIDcwLCAzMywgCi0gICAgNCwgMSwgMjQ2LCAzMiwgMzMsIDYsIDEsIDIyNiwgMjAxLCAzMywgNCwgMSwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMTEsIDU5LCAKLSAgICAzMywgNCwgMSwgMjExLCA1OSwgMzMsIDYsIDEsIDIzNSwgMTgzLCA3NSwgMzMsIDQsIDEsIDIzNSwgMTgzLCA3NSwgMzMsIDYsIAotICAgIDEsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAKLSAgICAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNiwgMSwgMjM1LCAxODMsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTgzLCAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyMzMsIDIzMywgMzMsIDQsIDEsIDIzMywgMjMzLCAzMywgNiwgMSwgMjI0LCAxNjEsIDMzLCA0LCAxLCAyMjQsIDE2MSwgMzMsIAotICAgIDYsIDEsIDI0NCwgODIsIDMzLCA0LCAxLCAyNDQsIDgyLCAzMywgNiwgMSwgMjM1LCAxNDYsIDMzLCA0LCAxLCAyMzUsIDE0NiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTQ3LCAyLCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDMzLCA0LCAxLCAyMzUsIDE0NywgMiwgNTIsIAotICAgIDI0MiwgMTM3LCAyNTUsIDE0LCAzMywgNiwgMSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMTQsIDIwNSwgMzMsIDYsIDEsIDIyMiwgCi0gICAgMTg1LCAyMjYsIDIwMSwgMzMsIDQsIDEsIDIyMiwgMTg1LCAyMjYsIDIwMSwgMzMsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIAotICAgIDY1LCAzMywgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgNjUsIDMzLCA2LCAxLCAyMjYsIDE0MCwgMzMsIDQsIDEsIDIyNiwgCi0gICAgMTQwLCAzMywgNiwgMSwgMjM0LCA2LCAzMywgNCwgMSwgMjM0LCA2LCAzMywgMjE2LCAxNDYsIDUwLCAzOCwgMzMsIDIxNiwgCi0gICAgNjUsIDM4LCAzMywgMjI2LCA2NSwgMzgsIDMzLCAyNDgsIDE1NCwgMjI1LCAxOCwgMzgsIDMzLCAyMjQsIDE1NSwgMjI1LCAKLSAgICAxOCwgMzgsIDMzLCAyMjUsIDMsIDM4LCAzMywgMjQwLCAyMTEsIDIxNiwgMTQ2LCA1MCwgMzgsIDMzLCAyMzAsIDE5MSwgNTAsIAotICAgIDMzLCA2LCAxLCAyMTksIDI1MSwgMjQwLCAxNTQsIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAyMTksIDI1MSwgMjQwLCAxNTQsIAotICAgIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyMjAsIDE0NiwgNTAsIDMzLCA0LCAxLCAyMjAsIDE0NiwgNTAsIDMzLCA2LCAxLCAKLSAgICAyNDUsIDkzLCAyLCAyMTYsIDExNCwgMzMsIDQsIDEsIDI0NSwgOTMsIDIsIDIxNiwgMTE0LCAzMywgNiwgMSwgMjQyLCAyMzcsIAotICAgIDIsIDIxNCwgMTU2LCAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDIxNCwgMTU2LCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDkxLCAKLSAgICAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAKLSAgICAxLCAyNDIsIDIzNywgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAKLSAgICAyMTAsIDc1LCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIAotICAgIDI0OCwgMzksIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjM1LCAxMywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIAotICAgIDIzNSwgMTMsIDIsIDkxLCAzMywgNCwgMSwgMjM1LCAxMywgMiwgOTEsIDMzLCA2LCAxLCAyNTIsIDEyNCwgMTc2LCAzMywgNCwgCi0gICAgMSwgMjUyLCAxMjQsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIAotICAgIDI0OCwgMzksIDMzLCA2LCAyNywgMjQ1LCAxNTEsIDI0MiwgMjM2LCAzMywgNCwgMjcsIDI0NSwgMTUxLCAyNDIsIDIzNiwgCi0gICAgMzMsIDYsIDEsIDIyNSwgMjIyLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgMSwgMjI1LCAyMjIsIDIsIDIzMCwgMjI0LCAKLSAgICAxMDMsIDMzLCA2LCAxLCAyNTUsIDIwLCAxNjIsIDMzLCA0LCAxLCAyNTUsIDIwLCAxNjIsIDMzLCA2LCAxLCAyNDUsIDgzLCAKLSAgICAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQ1LCA4MywgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxNywgMjMsIDIsIDI0OCwgMzksIAotICAgIDMzLCA0LCAxLCAyMTcsIDIzLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjE4LCAxMjEsIDcwLCAzMywgNCwgMSwgMjE4LCAKLSAgICAxMjEsIDcwLCAzMywgNiwgMSwgMjE4LCAxMjEsIDEwNCwgMiwgOTEsIDMzLCA0LCAxLCAyMTgsIDEyMSwgMTA0LCAyLCA5MSwgCi0gICAgMzMsIDYsIDEsIDI0MiwgNDksIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDIsIDQ5LCAyLCAyNDgsIDM5LCAzMywgNiwgMjcsIAotICAgIDIxNywgMjMsIDIxNSwgMTc4LCAzMywgNCwgMjcsIDIxNywgMjMsIDIxNSwgMTc4LCAzMywgNiwgMSwgMjUwLCAxMzIsIDIsIAotICAgIDI0OCwgMzksIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCA2NywgOTEsIAotICAgIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjIwLCAzMywgMzMsIDQsIDEsIDIyMCwgMzMsIDMzLCAKLSAgICA2LCAxLCAyNTUsIDIwLCAyNTAsIDEzMSwgMzMsIDQsIDEsIDI1NSwgMjAsIDI1MCwgMTMxLCAzMywgNiwgMSwgMjU1LCAyMCwgCi0gICAgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNTUsIDIwLCAyNTAsIDEzMiwgMiwgMjQ4LCAzOSwgMzMsIDEsIAotICAgIDIyNiwgNTgsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE0NiwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTQ2LCAKLSAgICAzMywgNiwgMSwgMjM1LCAxMywgMiwgMTAzLCAzMywgNCwgMSwgMjM1LCAxMywgMiwgMTAzLCAzMywgNiwgMSwgMjQ1LCAxNzUsIAotICAgIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMjE3LCA3NywgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAxMDMsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgMTAzLCAzMywgNiwgMSwgMjQ1LCAxNTEsIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAKLSAgICAyNDUsIDE1MSwgMiwgMjE3LCA3NywgMzMsIDYsIDEsIDIzNCwgMTI3LCAyNTAsIDEzMSwgMzMsIDQsIDEsIDIzNCwgMTI3LCAKLSAgICAyNTAsIDEzMSwgMzMsIDYsIDEsIDI0NSwgMTYwLCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjQ1LCAxNjAsIDIsIDIxNywgNzcsIAotICAgIDMzLCA0LCAxLCAyMjYsIDU4LCAzMywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NiwgMzMsIDQsIDEsIDExNSwgMiwgMjUxLCAKLSAgICAxNDYsIDMzLCA2LCAxLCAxMTUsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDExNSwgMiwgMjQ4LCAxLCAzMywgNiwgMjcsIDExNSwgCi0gICAgMjM2LCA2MCwgMzMsIDQsIDI3LCAxMTUsIDIzNiwgNjAsIDMzLCA2LCAxLCAyMzYsIDYxLCAyLCAyNTEsIDE0NiwgMzMsIDQsIAotICAgIDEsIDIzNiwgNjEsIDIsIDI1MSwgMTQ2LCAzMywgNiwgMSwgMjIxLCAxOTUsIDMzLCA0LCAxLCAyMjEsIDE5NSwgMzMsIDYsIAotICAgIDEsIDIyMSwgMTk2LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyMjEsIDE5NiwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjEwLCA3NSwgCi0gICAgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAxLCAKLSAgICAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjU1LCAyMCwgMjQ2LCAzNiwgMzMsIDQsIDEsIDI1NSwgCi0gICAgMjAsIDI0NiwgMzYsIDMzLCA2LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDMzLCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAKLSAgICAyMzIsIDMzLCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgMzMsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyNTIsIDEzNCwgNzYsIDMzLCAKLSAgICA0LCAxLCAyNTIsIDEzNCwgNzYsIDMzLCA2LCAxLCAyNTIsIDEzNCwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNTIsIAotICAgIDEzNCwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAxNjAsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDE2MCwgMiwgMjQ4LCAxLCAKLSAgICAzMywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMiwgMzMsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDMzLCA2LCAxLCAxMDQsIDIsIAotICAgIDI0OCwgMSwgMzMsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMTA0LCAyLCA1MiwgMTQyLCAzMywgNCwgMSwgCi0gICAgMTA0LCAyLCA1MiwgMTQyLCAzMywgNiwgMSwgMjUwLCAxMzIsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI1MCwgMTMyLCAyLCAKLSAgICAyNDgsIDEsIDMzLCA2LCAxLCAyNDIsIDIzNywgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNiwgMSwgMjExLCAyOCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgCi0gICAgMjQyLCAyMzcsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCAKLSAgICAzMywgNiwgMSwgMjQyLCA0OSwgMiwgMTAzLCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgMTAzLCAzMywgNiwgMSwgMjQyLCA0OSwgCi0gICAgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDQ5LCAyLCA5MSwgMzMsIDYsIDEsIDIzNCwgMTQsIDI0OCwgOTAsIDMzLCA0LCAxLCAKLSAgICAyMzQsIDE0LCAyNDgsIDkwLCAzMywgNiwgMSwgMjM0LCAxNCwgMjQ3LCAxNjIsIDMzLCA0LCAxLCAyMzQsIDE0LCAyNDcsIAotICAgIDE2MiwgMzMsIDYsIDEsIDIzNCwgMTQsIDIxMCwgMjcsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMTAsIDI3LCAzMywgNiwgMSwgCi0gICAgMjM0LCAxNCwgMjQ2LCAzMCwgMzMsIDQsIDEsIDIzNCwgMTQsIDI0NiwgMzAsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMzIsIAotICAgIDE4NywgMzMsIDQsIDEsIDIzNCwgMTQsIDIzMiwgMTg3LCAzMywgNiwgMSwgMjM0LCAxNCwgMjI4LCAxNzgsIDMzLCA0LCAxLCAKLSAgICAyMzQsIDE0LCAyMjgsIDE3OCwgMzMsIDYsIDEsIDIzNCwgMTQsIDIxOSwgMTA5LCAzMywgNCwgMSwgMjM0LCAxNCwgMjE5LCAKLSAgICAxMDksIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTYsIDYwLCAzMywgNCwgMSwgMjM0LCAxNCwgMjE2LCA2MCwgMzMsIDYsIDEsIAotICAgIDIyMywgNDksIDIxMCwgOTQsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyMTAsIDk0LCAzMywgNiwgMSwgMjQ1LCAxNzUsIDIsIDEwMywgCi0gICAgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAxMDMsIDMzLCA2LCAxLCAyMzIsIDI1NCwgMzMsIDQsIDEsIDIzMiwgMjU0LCAzMywgCi0gICAgNiwgMSwgMjIzLCAzOSwgMzMsIDQsIDEsIDIyMywgMzksIDMzLCA2LCAxLCAyMTEsIDkyLCAzMywgNCwgMSwgMjExLCA5MiwgCi0gICAgMzMsIDYsIDEsIDIyNCwgODgsIDMzLCA0LCAxLCAyMjQsIDg4LCAzMywgNiwgMSwgMjEyLCAyMiwgMzMsIDQsIDEsIDIxMiwgCi0gICAgMjIsIDMzLCA2LCAxLCAyNTQsIDE2NiwgMTc2LCAzMywgNCwgMSwgMjU0LCAxNjYsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTc1LCAKLSAgICAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyNDUsIAotICAgIDE1MSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgCi0gICAgMjI1LCAyMjIsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMjUsIDIyMiwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIyMCwgMzQsIAotICAgIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMjAsIDM0LCAyLCAyNDgsIDM5LCAxNTAsIDYsIDEsIDI1MywgMTY0LCAxNTAsIDYsIAotICAgIDEsIDI1MiwgMzksIDE1MCwgNiwgMSwgMjQyLCAyMDMsIDE1MCwgNiwgMSwgMjQ4LCAyMjEsIDE1MCwgNiwgMSwgMjQ1LCAKLSAgICAyMTMsIDE1MCwgNiwgMSwgMjEwLCAxMTYsIDE1MCwgNiwgMSwgMjQ1LCAxOTcsIDE1MCwgNiwgMSwgMjQ1LCA2NSwgMTUwLCAKLSAgICA2LCAxLCAxMTEsIDE1MCwgNiwgMSwgMjEwLCA3NCwgMTUwLCA2LCAxLCAyMzUsIDIyNywgMTUwLCA2LCAxLCAyMzIsIDE5MCwgCi0gICAgMTUwLCA2LCAxLCAyMTEsIDE2MCwgMTUwLCA2LCAxLCAyNTEsIDMzLCAxNTAsIDYsIDEsIDIzNCwgMTY1LCAxNTAsIDYsIDEsIAotICAgIDI0MSwgNjgsIDE1MCwgNiwgMSwgMjM1LCAxNDEsIDE1MCwgNiwgMSwgMjQyLCAyNDYsIDE1MCwgNiwgMSwgMjUwLCAxMjYsIAotICAgIDE1MCwgNiwgMSwgMjMxLCA1OCwgMTUwLCA2LCAxLCAyMTEsIDgsIDE1MCwgNiwgMSwgMjI4LCAzOSwgMTUwLCA2LCAxLCAKLSAgICAyMjAsIDEwMiwgMTUwLCA2LCAxLCAyMTMsIDEzOCwgMTUwLCA2LCAxLCAyNTAsIDE1NywgMTUwLCA2LCAxLCAyMjUsIDIwNSwgCi0gICAgMTUwLCA2LCAxLCAyMzUsIDExMCwgMTUwLCA2LCAxLCAyMDUsIDE1MCwgNiwgMSwgMjIxLCAxNjEsIDE1MCwgNiwgMSwgMjEzLCAKLSAgICAxNzksIDE1MCwgNiwgMSwgMjE2LCA2MiwgMTUwLCA2LCAxLCAyMjMsIDk1LCAxNTAsIDYsIDEsIDI0OSwgMjM4LCAxNTAsIDYsIAotICAgIDEsIDIxMCwgMjQ5LCAxNTAsIDYsIDEsIDIyNSwgNDYsIDE1MCwgNiwgMSwgMjM0LCAxNzYsIDE1MCwgNiwgMSwgMjI2LCAKLSAgICAyMjIsIDE1MCwgNiwgMSwgMjQ0LCAxNDIsIDE1MCwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjMzLCAxNTAsIDI1NCwgNTcsIAotICAgIDE1MCwgMjQ1LCAxNTQsIDc4LCAxNTAsIDI0NSwgMzEsIDc4LCAxNTAsIDI0OSwgMjE5LCAxNTAsIDIyNCwgMTMsIDc4LCAKLSAgICAxNTAsIDI1NSwgMjEsIDc4LCAxNTAsIDQsIDEsIDI1MywgMTY0LCAxNTAsIDQsIDEsIDI1MiwgMzksIDE1MCwgNCwgMSwgCi0gICAgMjQyLCAyMDMsIDE1MCwgNCwgMSwgMjQ4LCAyMjEsIDE1MCwgNCwgMSwgMjQ1LCAyMTMsIDE1MCwgNCwgMSwgMjEwLCAxMTYsIAotICAgIDE1MCwgNCwgMSwgMjQ1LCAxOTcsIDE1MCwgNCwgMSwgMjQ1LCA2NSwgMTUwLCA0LCAxLCAxMTEsIDE1MCwgNCwgMSwgMjEwLCAKLSAgICA3NCwgMTUwLCA0LCAxLCAyMzUsIDIyNywgMTUwLCA0LCAxLCAyMzIsIDE5MCwgMTUwLCA0LCAxLCAyMTEsIDE2MCwgMTUwLCAKLSAgICA0LCAxLCAyNTEsIDMzLCAxNTAsIDQsIDEsIDIzNCwgMTY1LCAxNTAsIDQsIDEsIDI0MSwgNjgsIDE1MCwgNCwgMSwgMjM1LCAKLSAgICAxNDEsIDE1MCwgNCwgMSwgMjQyLCAyNDYsIDE1MCwgNCwgMSwgMjUwLCAxMjYsIDE1MCwgNCwgMSwgMjMxLCA1OCwgMTUwLCAKLSAgICA0LCAxLCAyMTEsIDgsIDE1MCwgNCwgMSwgMjI4LCAzOSwgMTUwLCA0LCAxLCAyMjAsIDEwMiwgMTUwLCA0LCAxLCAyMTMsIAotICAgIDEzOCwgMTUwLCA0LCAxLCAyNTAsIDE1NywgMTUwLCA0LCAxLCAyMjUsIDIwNSwgMTUwLCA0LCAxLCAyMzUsIDExMCwgMTUwLCAKLSAgICA0LCAxLCAyMDUsIDE1MCwgNCwgMSwgMjIxLCAxNjEsIDE1MCwgNCwgMSwgMjEzLCAxNzksIDE1MCwgNCwgMSwgMjE2LCA2MiwgCi0gICAgMTUwLCA0LCAxLCAyMjMsIDk1LCAxNTAsIDQsIDEsIDI0OSwgMjM4LCAxNTAsIDQsIDEsIDIxMCwgMjQ5LCAxNTAsIDQsIDEsIAotICAgIDIyNSwgNDYsIDE1MCwgNCwgMSwgMjM0LCAxNzYsIDE1MCwgNCwgMSwgMjI2LCAyMjIsIDE1MCwgNCwgMSwgMjQ0LCAxNDIsIAotICAgIDE1MCwgNCwgMjcsIDI0NSwgMjE0LCAyMTAsIDI0OSwgMTUwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDE1MCwgMjQwLCAxNjgsIAotICAgIDE1MCwgMjQ2LCA5NSwgNTAsIDk0LCAyNTUsIDE1LCAyNDUsIDU3LCA5NCwgMjU1LCAxNSwgMjIxLCAxNjIsIDk0LCAyNTUsIAotICAgIDE1LCAyMjAsIDg4LCA5NCwgMjU1LCAxNSwgMjEwLCAxMDQsIDIyNCwgNzEsIDk0LCAyNTUsIDE1LCAyMTAsIDEwNCwgMjQzLCAKLSAgICAxMjUsIDk0LCAyNTUsIDE1LCAyMTYsIDc1LCA5NCwgMjU1LCAxNSwgMjIzLCA0NywgOTQsIDI1NSwgMTUsIDIxMCwgMTAzLCAKLSAgICA5NCwgMjU1LCAxNSwgMjI1LCAyNDUsIDk0LCAyNTUsIDE1LCAyMTEsIDIwLCA5NCwgMjU1LCAxNSwgMjE2LCAyMTQsIDk0LCAKLSAgICAyNTUsIDE1LCAyNDMsIDQxLCA5NCwgMjU1LCAxNSwgMjQzLCA0MiwgMjMwLCA2OSwgOTQsIDI1NSwgMTUsIDI0MywgMzksIAotICAgIDk0LCAyNTUsIDE1LCAyMjQsIDcyLCAyMjYsIDE2LCA5NCwgMjU1LCAxNSwgMjE2LCAyNTMsIDI0MywgNTYsIDk0LCAyNTUsIAotICAgIDE1LCAyMjUsIDIyNiwgOTQsIDI1NSwgMTUsIDI1MywgMjAwLCAyNDIsIDQxLCA5NCwgMjU1LCAxNSwgMjMwLCA3OSwgOTQsIAotICAgIDI1NSwgMTUsIDIzMSwgMjA4LCA5NCwgMjU1LCAxNSwgMjMxLCA0OSwgOTQsIDI1NSwgMTUsIDIzMSwgNTAsIDIzNCwgMTc3LCAKLSAgICA5NCwgMjU1LCAxNSwgMjQ4LCAxNjMsIDk0LCAyNTUsIDE1LCAyMjQsIDgzLCA5NCwgMjU1LCAxNSwgMjE2LCAyNTMsIDIyNCwgCi0gICAgNjcsIDk0LCAyNTUsIDE1LCAyMTEsIDMwLCAyNTIsIDQwLCAyMTAsIDIzMCwgOTQsIDI1NSwgMTUsIDIyNiwgMjA3LCA5NCwgCi0gICAgMjU1LCAxNSwgMjM2LCAxOSwgOTQsIDI1NSwgMTUsIDI0OCwgNzAsIDk0LCAyNTUsIDE1LCAyMTAsIDMzLCA5NCwgMTY0LCAKLSAgICAyMzEsIDE0MywgMjUwLCAzNSwgOTQsIDIyNSwgMTEsIDIyMCwgMzYsIDk0LCAyMjUsIDExLCAyNDEsIDI1MCwgMjIxLCAxNjIsIAotICAgIDk0LCAyMjUsIDExLCAyNDEsIDI1MCwgMjI1LCAyMzksIDk0LCAyMjUsIDExLCAyNDEsIDI1MCwgMjI0LCA3NiwgOTQsIDIyNSwgCi0gICAgMTEsIDI0MSwgMTU4LCA5NCwgMjI1LCAxMSwgMjE1LCAxNzYsIDk0LCAyMjUsIDExLCAyMjEsIDE2MiwgOTQsIDIyNSwgMTEsIAotICAgIDIyNSwgMjM5LCA5NCwgMjI1LCAxMSwgMjI0LCA3NiwgOTQsIDIyNSwgMTEsIDI0MSwgNjEsIDk0LCAyMjUsIDExLCAyNDEsIAotICAgIDYyLCAyNDEsIDI1MiwgMzEsIDIxNCwgMywgOTQsIDIyNSwgMTEsIDIyNCwgMTcsIDk0LCAyMjUsIDExLCAyNDgsIDIwOCwgCi0gICAgMTc3LCAyMzEsIDE3MSwgOTQsIDIyNSwgMTEsIDIzMSwgMzgsIDk0LCAyMjQsIDE0MSwgMjMxLCAxNjgsIDk0LCAyMjUsIDExLCAKLSAgICAyMjMsIDE2OSwgOTQsIDIyNCwgMTQxLCAyMjUsIDI0NywgOTQsIDIyNSwgMTEsIDIyMCwgMjEsIDI0NywgMTIwLCA5NCwgCi0gICAgMjI1LCAxMSwgMjE5LCAxNTksIDI0NywgMTIwLCA5NCwgMjI0LCAxNDEsIDIxOSwgNTMsIDIyNSwgMjQxLCA5NCwgMTY0LCAKLSAgICAyMTQsIDE2MCwgMjQ3LCAxMjAsIDk0LCAxNjQsIDIzMiwgMTA4LCAyNDcsIDEyMCwgOTQsIDIyNCwgMTQxLCAyMjcsIDE5NSwgCi0gICAgMjQyLCA0MCwgOTQsIDIyNSwgMTEsIDIyNCwgNzcsIDIyNCwgNzEsIDk0LCAxLCAyNTQsIDE3MCwgOTQsIDEsIDI1MiwgMjgsIAotICAgIDk0LCAxLCAyNDIsIDIwMSwgOTQsIDEsIDI0OCwgMTg5LCA5NCwgMSwgMjQxLCAyMzgsIDk0LCAxLCAyMTQsIDMsIDk0LCAxLCAKLSAgICAyMTAsIDk3LCA5NCwgMSwgMjQxLCAxOTcsIDk0LCAxLCAyMTYsIDIzMCwgOTQsIDEsIDIxMCwgMjMzLCA5NCwgMSwgNDAsIAotICAgIDIzNCwgMjUwLCA5NCwgMSwgMjM0LCAyNTAsIDk0LCAxLCAyMzMsIDk0LCA5NCwgMSwgNDAsIDIzMSwgNjUsIDk0LCAxLCAKLSAgICAyMzEsIDY1LCA5NCwgMSwgNDAsIDIyNywgMTk0LCA5NCwgMSwgMjI3LCAxOTQsIDk0LCAxLCAyMjEsIDI0OSwgOTQsIDEsIAotICAgIDI1MywgMTYyLCA5NCwgMSwgNDAsIDIyNSwgMjIxLCA5NCwgMSwgMjI1LCAyMjEsIDk0LCAxLCA0MCwgMjE1LCAxNzksIDk0LCAKLSAgICAxLCAyMTUsIDE3OSwgOTQsIDEsIDIyNCwgMzksIDk0LCAxLCAyMjMsIDY3LCA5NCwgMSwgMjIwLCAyMCwgOTQsIDEsIDIxNywgCi0gICAgMzgsIDk0LCAyNywgMjExLCA2LCA1MiwgMjE0LCAzLCA5NCwgMjcsIDIxMSwgNiwgMjE0LCA0LCAyMTAsIDIzMywgOTQsIDI3LCAKLSAgICAyMTEsIDYsIDUyLCAyMTAsIDIzMywgOTQsIDIyNCwgMTQxLCAyNDMsIDQxLCA5NCwgMjI0LCAxNDEsIDI0MywgMzksIDEwLCAKLSAgICA1NCwgNTAsIDEwLCA1LCAyMjEsIDI0MiwgMTAsIDI0NCwgMzAsIDIzMSwgMTU0LCAxMCwgNSwgMjIyLCAyMywgMTAsIDUsIAotICAgIDIyMSwgMjQ1LCAyNTQsIDM3LCAyNDksIDEwOSwgMjIyLCAxOTMsIDI1NCwgMzcsIDI0NCwgNCwgMjIyLCAxOTMsIDEwLCAKLSAgICAyMjMsIDEzNCwgMjU0LCAzNywgMjI1LCAxODMsIDIzMCwgMTkzLCA1MCwgMjU0LCAzNywgMjI1LCAxODMsIDIxNiwgMjQ4LCAKLSAgICAyMTYsIDE0OCwgNTAsIDI1NCwgMjIxLCA1MCwgMTAsIDI0OSwgMjE5LCAxMCwgMjQ4LCAxNTAsIDIyMCwgMTM3LCAxMCwgCi0gICAgMjI1LCAxMywgMjEzLCAyNDEsIDUwLCAxMCwgNSwgMjMwLCAxNzQsIDEwLCA1LCAyMjIsIDMsIDI1NCwgMTcyLCAyMTIsIDQ1LCAKLSAgICAxMCwgNSwgMjU0LCAxNzIsIDI1MywgMjIxLCAxMCwgNSwgMjIzLCAxNjcsIDI1NCwgMTcxLCAxMCwgNSwgMjIzLCAxNzUsIAotICAgIDI1NCwgMTUyLCAyNTQsIDEwNCwgMTAsIDUsIDIxNywgNzAsIDEwLCA0LCAxMjUsIDIxNywgODAsIDEwLCA0LCAxMjUsIDI3LCAKLSAgICAxMTIsIDIsIDIzMywgMTAzLCAyLCAyMTEsIDQzLCAxMCwgNCwgMTI1LCAyMTAsIDEwOCwgMTAsIDQsIDI0NCwgMTY1LCAxMCwgCi0gICAgNCwgMjQ4LCAxODQsIDEwLCA0LCAyMzQsIDIwNSwgMTAsIDIyMCwgMTUwLCAxMCwgMjE1LCAyMTEsIDU5LCAyMjQsIDE0MSwgCi0gICAgNzgsIDEwLCAyMjQsIDEzLCA3OCwgMTAsIDEsIDIzNCwgMjA5LCAyMTEsIDQzLCAxMCwgMSwgMjQyLCAxOSwgMTAsIDEsIAotICAgIDExMiwgMiwgMjMxLCAyMjgsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDQ4LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA0OCwgCi0gICAgMTAsIDEsIDExMiwgMiwgMjAyLCA1MSwgMTAsIDEsIDc5LCAyLCAyMDIsIDQ4LCAxMCwgMSwgMjU0LCAxNzAsIDEwLCAxLCAKLSAgICAyNTIsIDU0LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NCwgMTAsIDEsIDIxNywgNywgMTAsIDEsIDIxNiwgMTkyLCAxMCwgMSwgCi0gICAgMjM1LCAxMjMsIDEwLCAxLCAyNDIsIDM3LCAxMCwgMSwgMjM0LCAxMjksIDEwLCAxLCAyNDgsIDE5NSwgMTAsIDEsIDIxNiwgCi0gICAgMjAyLCAxMCwgMSwgMjIzLCA5NSwgMTAsIDEsIDIxMCwgMTA4LCAxMCwgMSwgMjIxLCAxNjYsIDEwLCAxLCAyMjAsIDU5LCAKLSAgICAxMCwgMSwgMjIyLCAyNiwgMTAsIDEsIDI0OCwgMjE2LCAxMCwgMSwgMjE3LCA4MCwgMTAsIDEsIDIxMCwgMTExLCAxMCwgMSwgCi0gICAgMjU0LCAxOTYsIDEwLCAxLCAyNDIsIDI0NCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMzQsIAotICAgIDE3NSwgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgNzksIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgCi0gICAgMjE3LCA0MywgMTAsIDEsIDI0NCwgMTQyLCAxMCwgMSwgMjI0LCA4MSwgMTAsIDEsIDIzNCwgMjUwLCAxMCwgMSwgMjMzLCAKLSAgICAxMDIsIDEwLCAxLCAyMzEsIDc4LCAxMCwgMSwgMjI4LCA2MiwgMTAsIDEsIDI0MSwgMjE4LCAxMCwgMSwgMjEyLCAzMCwgMTAsIAotICAgIDEsIDExMiwgMjMxLCAxOTIsIDEwLCAxLCAyMTEsIDQzLCAxMCwgMjQ0LCAxNjMsIDEwLCAyNDgsIDE4MiwgMTAsIDIzNCwgCi0gICAgMjAzLCAxMCwgMjQ0LCAxNjUsIDEwLCAyNDgsIDE4NCwgMTAsIDIzNCwgMjA1LCAxMCwgMjIwLCA5MywgMTAsIDIxOCwgNDUsIAotICAgIDEwLCAyMzEsIDIyNiwgNDgsIDEwLCAyMDIsIDQ4LCAxMCwgMjAyLCA1MSwgMTAsIDIxOCwgNjUsIDI1NCwgMTcwLCAxMCwgCi0gICAgMjM1LCAxOTMsIDI0OCwgMTg0LCAxMCwgMTY0LCAyMjgsIDYzLCAyNDIsIDIxOCwgMTAsIDIwOSwgMjU1LCAxMCwgMjUsIDUsIAotICAgIDQsIDIxNCwgMTA2LCA0OCwgMTAsIDI1LCA1LCAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDQ4LCAxMCwgMjUsIDUsIDU5LCA1MSwgCi0gICAgMTAsIDIyMywgNDksIDI0OCwgMTg0LCAxMCwgMjQ0LCAxNjYsIDIsIDExMywgMjQ3LCAxMTgsIDEwLCAyMTIsIDMyLCAyMDIsIAotICAgIDUxLCAyNTQsIDM3LCAyMSwgMjEwLCA4NiwgMjU0LCAzNywgMjEsIDExMCwgMjU0LCAzNywgMjEsIDEwNSwgMjU0LCAzNywgCi0gICAgMjEsIDE1OCwgMjU0LCAzNywgMjEsIDE2MSwgMjU0LCAzNywgMjEsIDE4OSwgMjU0LCAzNywgMjEsIDE5NCwgMjU0LCAzNywgCi0gICAgMjEsIDE5OCwgMjU0LCAzNywgMjEsIDE5NSwgMjU0LCAzNywgMjEsIDIwMCwgMTAsIDIyNSwgMTgyLCA1MCwgMTAsIDI0OCwgCi0gICAgODMsIDIyMCwgMTM3LCAxMCwgMjE2LCAxNDYsIDIyMCwgMTM3LCAxMCwgMjQ0LCA4MSwgMjI1LCA5LCAyMTgsIDE1NiwgMTAsIAotICAgIDEsIDI0NywgMTE5LCAyNTIsIDU0LCAxMCwgMSwgMjQ3LCAxMTksIDIyNCwgODEsIDEwLCAxLCAyMTgsIDIzLCAyNTQsIDE3MCwgCi0gICAgMTAsIDEsIDExMiwgMjEyLCA0NiwgMTAsIDEsIDExMiwgMiwgMjEyLCAzMiwgMjAyLCA0OCwgMTAsIDEsIDExMiwgMiwgMjEyLCAKLSAgICAzMiwgMjAyLCA1MSwgMTAsIDEsIDEyNSwgMjQyLCAxOSwgMTAsIDEsIDEyNSwgMjAyLCAyNTQsIDE3MCwgMTAsIDEsIDEyNSwgCi0gICAgMjAyLCAyMTIsIDMwLCAxMCwgMSwgMTA0LCAyLCAyMDIsIDQ4LCAxMCwgMSwgMTI1LCAyMDIsIDIxMSwgNDMsIDEwLCAxLCAKLSAgICAyMTUsIDE0OCwgMTAsIDEsIDIxNSwgMTQ2LCAxMCwgMSwgMjUyLCA2NCwgMTAsIDEsIDIxNywgOCwgMiwgMjIyLCAyMzMsIAotICAgIDEwLCAxLCAyMTcsIDgsIDIsIDEzNCwgMTcwLCA3NywgMjQ2LCAxMDMsIDEwLCAxLCAyMjUsIDIwNSwgMTAsIDEsIDIxNywgNSwgCi0gICAgMTAsIDEsIDI1MiwgNTIsIDEwLCAxLCAxMjIsIDIsIDIwMiwgNDgsIDEwLCAxLCAxMjIsIDIsIDExMywgMTcwLCA2NywgNDgsIAotICAgIDEwLCAxLCAyMjcsIDE1MywgMTAsIDEsIDI0NiwgNDMsIDEwLCAxLCAxMjIsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIxNywgCi0gICAgMjYsIDEwLCAxLCAyMTcsIDI0LCAxMCwgMSwgMjQ4LCAxMzAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjIyLCAyMzMsIDEwLCAxLCAKLSAgICAyNDgsIDE5NiwgMiwgNTksIDUxLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDU5LCAyNTIsIDQzLCAyMiwgNCwgMjE3LCA4MCwgMTAsIAotICAgIDEsIDI0OCwgMjAxLCAxMCwgMSwgMjQ4LCAxMzIsIDEwLCAxLCAyNDYsIDcwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDEzNCwgCi0gICAgMTcwLCA3NywgMjQ2LCAxMDMsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDIyMiwgMTcxLCAKLSAgICAxMCwgMSwgMjIzLCA5NiwgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAyMjMsIDk2LCAyLCAyMjIsIDIzMywgMTAsIDEsIDIyMywgCi0gICAgOTYsIDIsIDU5LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDU5LCAKLSAgICAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjM1LCAxMjAsIAotICAgIDEwLCAxLCAyMjMsIDk2LCAyLCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDU5LCAyNTIsIDQzLCAyMiwgCi0gICAgNTksIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMzQsIDE3MCwgCi0gICAgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIyMiwgMjcsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDIyMiwgCi0gICAgMjcsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIxNywgODEsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAKLSAgICAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNDcsIDExOSwgMjQ0LCAxNDIsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDIzMCwgCi0gICAgMTA5LCA1MSwgMTAsIDEsIDI0NCwgMTQzLCAyLCA1OSwgNTEsIDEwLCAxLCAyMTMsIDI0OCwgMTAsIDEsIDI0NCwgMTQzLCAyLCAKLSAgICAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyMjUsIDIwMywgMTAsIDEsIDIyNCwgODIsIDIsIDU5LCA0OCwgMTAsIDEsIDIyNCwgODIsIAotICAgIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzNCwgMTc0LCAxMCwgMSwgMjE3LCAyNTAsIDIzNCwgMjUwLCAxMCwgMSwgMjM0LCAKLSAgICAyNTEsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjM0LCAyNTEsIDIsIDU5LCA0OCwgMTAsIDEsIDIyOSwgNzksIDEwLCAxLCAyMzQsIAotICAgIDI1MSwgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjQzLCAxMjIsIDEwLCAxLCAyNDMsIDEyMywgMiwgMjIyLCAyMzMsIDEwLCAKLSAgICAxLCAyMjksIDIsIDEwLCAxLCAyNDMsIDEyMywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgMjQyLCAxMDEsIDEwLCAxLCAyNDMsIAotICAgIDEyMywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjMzLCAxMDMsIAotICAgIDIsIDU5LCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgMTM0LCAKLSAgICAxNzAsIDUxLCAxMCwgMSwgMjI4LCA2MywgMiwgNTksIDUxLCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTgsIDEwLCAxLCAyMjIsIAotICAgIDIxNCwgMTAsIDEsIDIyOCwgNjMsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjI4LCA2MywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQxLCAxMCwgMSwgMjE3LCAyNywgMiwgNTksIDQ4LCAxMCwgMSwgMjQxLCAyMTksIDIsIDc5LCAKLSAgICA0OCwgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MSwgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgMiwgMjAyLCA0OCwgMTAsIAotICAgIDEsIDIxNywgOCwgMjMxLCAxNjUsIDI0MiwgMTcxLCAxMCwgMSwgMjEyLCAzMSwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMzQsIAotICAgIDczLCAyMjYsIDIzNCwgMTAsIDEsIDIyNiwgMjM0LCAxMCwgMSwgNzAsIDEwLCAxLCAyMTAsIDIxMiwgMTAsIDEsIDIzNCwgCi0gICAgNzMsIDIxMCwgMjEyLCAxMCwgMSwgMjEyLCAzMSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjEzLCAyNTUsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgMjExLCA0MywgMTAsIDEsIDc5LCAyLCAyMTcsIDc3LCAxMCwgMSwgNzksIDIsIDQsIDIxNCwgMTA1LCAxMCwgCi0gICAgMSwgMjEyLCAzMSwgMiwgNTksIDQ4LCAxMCwgMSwgNzUsIDEwLCAxLCA3OSwgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgNzksIAotICAgIDI1MiwgMTMyLCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyMDIsIDQ4LCAxMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAxMCwgMSwgCi0gICAgMjU0LCAyNDMsIDEwLCA0LCAxMjUsIDI3LCAyMjIsIDI3LCAyLCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MiwgMTAsIDQsIAotICAgIDEyNSwgMjcsIDIyNCwgODIsIDIsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkyLCAxMCwgNCwgMTI1LCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgNCwgMTI1LCAyMzMsIDEwMywgMjU0LCAxNzAsIDEwLCA0LCAxMjUsIDIzNSwgMTIzLCAxMCwgNCwgMTI1LCAxMzQsIAotICAgIDI0NywgMTE4LCAxMCwgNCwgMTI1LCAyMjEsIDE2NiwgMTAsIDI0NSwgMTQzLCA2NCwgMjUzLCAxNjYsIDEwLCAyMTgsIDE1MiwgCi0gICAgNjQsIDIyMiwgMTM4LCAyNDUsIDE3NSwgMjQxLCAxNTUsIDEwLCA0LCAxMjUsIDIyMiwgMTgzLCAyMTAsIDg2LCAxMCwgNCwgCi0gICAgMTI1LCAyMTQsIDE1OSwgMjIzLCAxMTUsIDIxMCwgODYsIDEwLCA0LCAxMjUsIDI0NywgMTE5LCAyNDEsIDIzNiwgNjQsIAotICAgIDIzNCwgMTI5LCAxMCwgNCwgMTI1LCA2NiwgNTMsIDE3LCAxMCwgNCwgMTIxLCAyMjEsIDE2NiwgMTAsIDQsIDEyNSwgMjMxLCAKLSAgICAyMjcsIDEwLCA0LCAyMTIsIDMwLCAxMCwgNCwgMjExLCA0MywgMTAsIDQsIDEyNSwgMjExLCA0MywgMTAsIDQsIDEyNSwgCi0gICAgMjI4LCA2MiwgMTAsIDIyNSwgNDEsIDY0LCAyMjIsIDEzLCAxMCwgMjQ1LCAxNTIsIDI1MCwgMTc1LCAxMjEsIDIxOCwgMTI5LCAKLSAgICAxMCwgMjQ1LCAxNTIsIDI1MCwgMTc1LCAxMjUsIDIxOCwgMTI5LCAxMCwgMjIyLCAxODMsIDEyNSwgMjE4LCAxMzAsIDIsIAotICAgIDI0NCwgMTA0LCAyNTAsIDE3NCwgMTAsIDQsIDEyMSwgMjMxLCA3OCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAyMzUsIDE5MywgCi0gICAgMjE0LCAxMDUsIDEwLCAxLCAyMjMsIDk2LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAKLSAgICAyMTAsIDg2LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEwLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTA1LCAyNDUsIDIyLCAKLSAgICAyNTQsIDM3LCAyMSwgMTU4LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTYxLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTg5LCAKLSAgICAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTk0LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTk4LCAyNDUsIDIyLCAyNTQsIDM3LCAKLSAgICAyMSwgMTk1LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMjAwLCAxMCwgMSwgMjIwLCA2MCwgMiwgNTksIDUxLCAxMCwgMSwgCi0gICAgMjQ4LCAyMTcsIDIsIDU5LCA1MSwgMTAsIDEsIDI0MiwgMjQ1LCAyLCA1OSwgNTEsIDEwLCA1LCAyMTksIDE1OCwgMjU0LCAKLSAgICAxMjYsIDEwLCA1LCAyMTksIDE1OCwgMjI0LCAyMzUsIDIzMSwgNTgsIDEwLCAxLCAyNDEsIDIxOSwgMiwgMjM1LCAxOTMsIAotICAgIDIxNCwgMTA1LCAxODgsIDI0NSwgMTQzLCA2NCwgMjI2LCAxNCwgMTg4LCAyMTgsIDE5LCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDE4OCwgMjE4LCA2NywgMjQzLCAyMjksIDIxOCwgMTI5LCAxODgsIDIxOCwgMTksIDI0OSwgMjI2LCAxODgsIDIxOCwgNjcsIAotICAgIDI0OSwgMjI2LCAxODgsIDIwMywgMjQ5LCAyMjYsIDE4OCwgMjQ5LCAyMjcsIDIxOSwgMTA2LCAyMzMsIDQ2LCAxODgsIDI0OSwgCi0gICAgMjI3LCAyMTksIDEwNiwgMjIyLCAyNTEsIDE4OCwgMjE4LCAxOSwgMjQ5LCAyMjcsIDIxOSwgMTA2LCAyMzMsIDQ2LCAxODgsIAotICAgIDIxOCwgNjcsIDI0OSwgMjI3LCAyMTksIDEwNiwgMjIyLCAyNTEsIDE4OCwgMjQ5LCAxODAsIDE4OCwgMjQyLCAxLCAyMjYsIAotICAgIDI1MCwgMTg4LCAyNDIsIDEsIDIzMSwgMzYsIDE4OCwgMjQyLCAxLCAyNTMsIDIxOCwgMTg4LCAyNTUsIDIxLCA3OCwgMTg4LCAKLSAgICAxLCAyNTQsIDE3NCwgMTg4LCAxLCAyMTgsIDIzLCAyNTQsIDE3NCwgMTg4LCAxLCAyNTIsIDI1LCAxODgsIDEsIDI0MywgCi0gICAgMTEzLCAxODgsIDEsIDI0MywgMTE0LCAyNDMsIDkxLCAxODgsIDEsIDI0OCwgMTkyLCAxODgsIDEsIDI0NywgMTE5LCAyNDgsIAotICAgIDE5MywgMjIyLCAyMjksIDE4OCwgMSwgMjQxLCAyMzgsIDE4OCwgMSwgMjEyLCAzMCwgMTg4LCAxLCAyMTAsIDEwOCwgMTg4LCAKLSAgICAxLCAyNDEsIDE5NSwgMTg4LCAxLCAyMTYsIDIyNiwgMTg4LCAxLCAyMTYsIDIyNywgMjQzLCA5MSwgMTg4LCAxLCAyMTAsIAotICAgIDE5OSwgMTg4LCAxLCAyMTAsIDIwMCwgMjQxLCAyMzgsIDE4OCwgMSwgMjM0LCAyMjUsIDE4OCwgMSwgMjMzLCAxMDEsIDE4OCwgCi0gICAgMSwgMjMwLCAxOTAsIDE4OCwgMSwgMjI3LCAxOTQsIDE4OCwgMSwgMjIwLCAxNDMsIDE4OCwgMSwgNDAsIDIyMCwgMTQzLCAKLSAgICAxODgsIDEsIDc1LCAxODgsIDEsIDIyNSwgMjIxLCAxODgsIDEsIDIyMywgNDksIDIyNSwgMjIxLCAxODgsIDEsIDIyMiwgMjQsIAotICAgIDE4OCwgMSwgMjI0LCA3NSwgMTg4LCAxLCAyMjIsIDIyOSwgMTg4LCAxLCAyMjAsIDIwLCAxODgsIDEsIDIxNywgMzYsIDE4OCwgCi0gICAgMSwgMjI1LCAxNjksIDI1MiwgMTIsIDE4OCwgMSwgMjI1LCAxNjksIDI0MiwgMjQyLCAxODgsIDEsIDIyNSwgMTY5LCAyNDgsIAotICAgIDIwLCAxODgsIDIyNCwgMTUxLCA0OCwgMTg4LCAyMjQsIDE1MSwgNTEsIDE4OCwgMjI0LCAxNTEsIDI0NiwgMTE3LCAxODgsIAotICAgIDIxMCwgMTcsIDQ4LCAxODgsIDIxMCwgMTcsIDUxLCAxODgsIDIxMCwgMTcsIDI0NiwgMTE3LCAxODgsIDIyMywgMTMxLCA0OCwgCi0gICAgMTg4LCAyMjMsIDEzMSwgNTEsIDE4OCwgMjQ2LCAxMTgsIDIxMCwgMjQsIDI0MSwgNDQsIDE4OCwgMjQ2LCAxMTgsIDIxMCwgCi0gICAgMjQsIDI1NCwgMTA1LCAxODgsIDI0MSwgMjQxLCA0OCwgMTg4LCAyNDEsIDI0MSwgNTEsIDE4OCwgMjQxLCAyNDAsIDI0NiwgCi0gICAgMTE3LCAxODgsIDI0NSwgNzksIDQ4LCAxODgsIDI0NSwgNzksIDUxLCAxODgsIDIyMiwgMTA3LCAxODgsIDI0NCwgMTM2LCAKLSAgICAyNDcsIDEyMCwgMTg4LCAyMjMsIDI0OCwgMTg4LCAyMjIsIDEzNCwgMTg4LCAxMTMsIDY3LCAxNzAsIDQ4LCAxODgsIDExMywgCi0gICAgNjcsIDE3MCwgNTEsIDE4OCwgMTM0LCAxNzAsIDQ4LCAxODgsIDEzNCwgMTcwLCA1MSwgMTg4LCAyMjYsIDI0OCwgMjMyLCAKLSAgICAyMTQsIDQ4LCAxODgsIDIyNiwgMjQ4LCAyMzIsIDIxNCwgNTEsIDE4OCwgMjMwLCA1NiwgMTg4LCAyNTIsIDEzMSwgMTg4LCAKLSAgICAxLCAyMTksIDQ5LCAyMTAsIDgwLCAxODgsIDEsIDIxOSwgNDksIDIzNCwgMTIyLCAxODgsIDEsIDIxOSwgNDksIDI0NCwgCi0gICAgMTU0LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTM0LCAxNzAsIDI0MCwgMjUwLCA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDU5LCAKLSAgICAyNTIsIDQzLCAyMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIAotICAgIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDI1MiwgNDMsIDIyLCAxMTMsIDE3MCwgCi0gICAgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMTMsIDE3MCwgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIAotICAgIDIzNSwgMTkzLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDEyMiwgMiwgCi0gICAgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCAyNDgsIAotICAgIDE5NiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCAyNTIsIDQzLCAyMiwgNCwgMjE3LCA4MCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAKLSAgICAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjIzLCA5NiwgMiwgOTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgCi0gICAgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgCi0gICAgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgCi0gICAgNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDEzNCwgMTcwLCAyMjUsIAotICAgIDcsIDIxNCwgMTUzLCA1MSwgMTAsIDEsIDIzNCwgMTc1LCAyLCA1OSwgNDgsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTM0LCAKLSAgICAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCA1MSwgMTAsIDEsIDY2LCAKLSAgICAyLCA1OSwgNDgsIDEwLCAxLCA2NiwgMiwgNTksIDUxLCAxMCwgMSwgMjI4LCA2MywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgCi0gICAgMjI4LCA2MywgMiwgNCwgMjE3LCA4MCwgMTAsIDEsIDIyOCwgNjMsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjMzLCAxMDMsIAotICAgIDIsIDEzMCwgMTAsIDEsIDIyMywgOTYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDEwLCAxLCAyMjMsIDk2LCAyLCAKLSAgICAyMDIsIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDEwLCAxLCAxMjIsIDIsIDQsIAotICAgIDEwLCAxLCAyMTcsIDgxLCA1MSwgMTAsIDEsIDEyMiwgMiwgNCwgMTAsIDEsIDIxNywgODEsIDIyLCAxMTMsIDI0NywgMTE4LCAKLSAgICAxMCwgMSwgMjIxLCAxNjcsIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgMTAsIDEsIDIyMywgOTYsIAotICAgIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgMTAsIDEsIDEyMiwgMiwgNCwgMTAsIDEsIDIxNywgCi0gICAgODEsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEzLCA0OCwgMTAsIDEsIDExMiwgMiwgMjQ1LCAKLSAgICAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAKLSAgICAxMTMsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIAotICAgIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDI0NCwgMTEsIDUxLCAxMCwgMSwgMjEyLCAzMSwgMiwgCi0gICAgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAyMTIsIDMxLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMTM0LCA0OCwgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAKLSAgICA3OSwgMjUyLCAxMzMsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgMTIyLCAyLCAyNDUsIDIyLCAKLSAgICAyNTQsIDM3LCAyMSwgMjQ0LCAxMSwgNTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDI0NCwgCi0gICAgMTEsIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDIzNSwgMTkzLCAyMTQsIDEwNSwgMTAsIDEsIDIzNCwgMjUxLCAyLCAxMTMsIAotICAgIDE3MCwgNDgsIDIxNiwgMjA1LCAxLCAyNDIsIDQ2LCAyMTYsIDIwNSwgMSwgMjIwLCA2OCwgMjE2LCAyMDUsIDEsIDIyOCwgCi0gICAgNjEsIDIxNiwgMjA1LCAxLCAyMjMsIDE4NCwgMjE2LCAyMDUsIDEsIDI1MiwgMTg5LCAyMTYsIDIwNSwgMSwgMjMyLCAyNTEsIAotICAgIDIxNiwgMjA1LCAxLCAyMzUsIDgsIDIxNiwgMjA1LCAxLCAyNTQsIDE1OSwgMjE2LCAyMDUsIDEsIDIxNCwgMjUsIDIxNiwgCi0gICAgMjA1LCAxLCAyMzEsIDc3LCAyMTYsIDIwNSwgMSwgMjQ0LCAxOTQsIDIxNiwgMjA1LCAxLCAyNDgsIDIzLCAyMTYsIDIwNSwgCi0gICAgMSwgMjE2LCAyMDcsIDIxNiwgMjA1LCAxLCAyMzMsIDEzMSwgMjE2LCAyMDUsIDEsIDI0MywgMTMxLCAyMTYsIDIwNSwgMSwgCi0gICAgMjQyLCAxNzcsIDIxNiwgMjA1LCAxLCAyMjEsIDE2NSwgMjE2LCAyMDUsIDEsIDI0OCwgMTQ4LCAyMTYsIDIwNSwgMSwgMjEwLCAKLSAgICAxMDAsIDIxNiwgMjA1LCAxLCAyMTcsIDM3LCAyMTYsIDIwNSwgMSwgMjExLCAxMDMsIDIxNiwgMjA1LCAxLCAyMjUsIDIzMywgCi0gICAgMjE2LCAyMDUsIDEsIDIzNSwgMTI4LCAyMTYsIDIwNSwgMSwgMjUwLCAxMzQsIDIxNiwgMjA1LCAxLCAyMTUsIDE1NSwgMjE2LCAKLSAgICAyMDUsIDEsIDI0MSwgMTg4LCAyMTYsIDIwNSwgMSwgMjM0LCAxMzEsIDIxNiwgMjA1LCAxLCAyMTYsIDIwNiwgMjE2LCAyMDUsIAotICAgIDEsIDIxMCwgMTE1LCAyMTYsIDIwNSwgMSwgMjIwLCA1OCwgMjE2LCAyMDUsIDEsIDIyMiwgMzAsIDIxNiwgMjA1LCAxLCAKLSAgICAyNDgsIDIxOSwgMjE2LCAyMDUsIDEsIDExMSwgMjE2LCAyMDUsIDEsIDIxMCwgMjMsIDIxNiwgMjA1LCAxLCAyNTQsIDE5MywgCi0gICAgMjE2LCAyMDUsIDEsIDI0MiwgMjQzLCAyMTYsIDIwNSwgMSwgMjI0LCA4NSwgMjE2LCAyMDUsIDEsIDIxMiwgNjMsIDIxNiwgCi0gICAgMjA1LCAyNTUsIDIyLCAyMTYsIDIwNSwgMjU1LCAzOCwgMjE2LCAyMDUsIDI0MCwgMTE0LCAyMTYsIDIwNSwgMjQ1LCAyMDgsIAotICAgIDIxNiwgMjA1LCAyMTQsIDIyMiwgMjE2LCAyMDUsIDIyNiwgMTgyLCAyMTYsIDIwNSwgMjQ1LCAyMTYsIDIxNiwgMjA1LCAKLSAgICAyNDUsIDE2LCAyMTYsIDIwNSwgMjI2LCAyNDcsIDIxNiwgMjA1LCAyMjYsIDI1NSwgMjE2LCAyMDUsIDIxOCwgNDUsIDIxNiwgCi0gICAgMjA1LCAxLCAyMjksIDIyNSwgMjI4LCAxMzcsIDIxLCAyMTAsIDg2LCAyMjgsIDEzNywgMjEsIDExMCwgMjI4LCAxMzcsIDIxLCAKLSAgICAxMDUsIDIyOCwgMTM3LCAyMSwgMTU4LCAyMjgsIDEzNywgMjEsIDE2MSwgMjI4LCAxMzcsIDIxLCAxODksIDIyOCwgMTM3LCAKLSAgICAyMSwgMTk0LCAyMjgsIDEzNywgMjEsIDE5OCwgMjI4LCAxMzcsIDIxLCAxOTUsIDIyOCwgMTM3LCAyMSwgMjAwLCAyMjgsIAotICAgIDEzNywgMSwgNjEsIDIyOCwgMTM3LCAxLCAyNDUsIDIwOSwgMjI4LCAxMzcsIDEsIDczLCAyMjgsIDEzNywgMSwgNzUsIDIyOCwgCi0gICAgMTM3LCAxLCA3MCwgMjI4LCAxMzcsIDEsIDIyNiwgMTgzLCAyMjgsIDEzNywgMSwgNzYsIDIyOCwgMTM3LCAxLCAyNDgsIAotICAgIDIwOSwgMjI4LCAxMzcsIDEsIDIzMCwgMjUsIDIyOCwgMTM3LCAxLCAyNTIsIDE5MSwgMjI4LCAxMzcsIDEsIDE5MCwgMjI4LCAKLSAgICAxMzcsIDEsIDIxNywgMTA1LCAyMjgsIDEzNywgMSwgMjM1LCAxNDEsIDIyOCwgMTM3LCAxLCAyNTAsIDE1NywgMjI4LCAxMzcsIAotICAgIDEsIDI0OCwgMjIxLCAyMjgsIDEzNywgMSwgMjA1LCAyMjgsIDEzNywgMSwgMjIyLCAxNzksIDIyOCwgMTM3LCAxLCAyMDYsIAotICAgIDIyOCwgMTM3LCAxLCAyNDMsIDc5LCAyMjgsIDEzNywgMSwgMjQ0LCAxOTYsIDIyOCwgMTM3LCAxLCAxNzYsIDIyOCwgMTM3LCAKLSAgICAxLCAyMzMsIDEzNSwgMjI4LCAxMzcsIDEsIDIyOSwgMjI5LCAyMTEsIDIyMywgMjI4LCAxMzcsIDEsIDE4NCwgMjI4LCAxMzcsIAotICAgIDEsIDIyNywgMTY1LCAyMjgsIDEzNywgMSwgMTk3LCAyMjgsIDEzNywgMSwgMTYyLCAyMjgsIDEzNywgMSwgMjEyLCA2NSwgCi0gICAgMjI4LCAxMzcsIDEsIDE5MSwgMjI4LCAxMzcsIDEsIDIyNywgMTY2LCAyMTEsIDIyMywgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIAotICAgIDIzNSwgMTQxLCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgMjUwLCAxNTcsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAyMDUsIDIyOCwgCi0gICAgMTM3LCAzOCwgMjE5LCAyNTEsIDEyNSwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAyMTksIDI1MSwgMTIxLCAyMTYsIDMwLCAKLSAgICAyMjgsIDEzNywgMzgsIDIxOSwgMjUxLCAyMjIsIDIyOCwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDI0OCwgMzgsIAotICAgIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAxMjUsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAxMjEsIDIxNiwgCi0gICAgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAyMjIsIDIyOCwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAyMjksIDE5MywgNzgsIAotICAgIDIyOCwgMTM3LCAzOCwgNTIsIDU5LCA0OCwgMjI4LCAxMzcsIDEyNSwgMTM4LCAyNTQsIDU3LCAyMjgsIDEzNywgMTIxLCAKLSAgICAxMzgsIDI1NCwgNTcsIDIyOCwgMTM3LCAxNiwgMjI2LCAxODQsIDI0OCwgNTAsIDIyOCwgMTM3LCAxNiwgMjQzLCA3OCwgCi0gICAgMjI4LCAxMzcsIDI0OSwgMjE5LCAyMjgsIDEzNywgMjQ1LCAzMSwgNzgsIDIyOCwgMTM3LCAyMzMsIDEwOCwgMjIxLCAyNTIsIAotICAgIDEsIDI1NCwgMTc2LCAyMjEsIDI1MiwgMSwgMjUxLCAyMjgsIDIyMSwgMjUyLCAxLCAyNDMsIDExMiwgMjIxLCAyNTIsIDEsIAotICAgIDI0OCwgMTk0LCAyMjEsIDI1MiwgMSwgMjM1LCAxNTIsIDIyMSwgMjUyLCAxLCAyNTIsIDE4OSwgMjIxLCAyNTIsIDEsIDIxMCwgCi0gICAgODksIDIyMSwgMjUyLCAxLCAyMzUsIDE2MCwgMjIxLCAyNTIsIDEsIDIxNiwgNjcsIDIyMSwgMjUyLCAxLCAyMTAsIDE4MiwgCi0gICAgMjIxLCAyNTIsIDEsIDIzNSwgOSwgMjIxLCAyNTIsIDEsIDIzMywgMTI4LCAyMjEsIDI1MiwgMSwgMjMwLCAxOTAsIDIyMSwgCi0gICAgMjUyLCAxLCAyMjcsIDE5NCwgMjIxLCAyNTIsIDEsIDIxOSwgMTU2LCAyMjEsIDI1MiwgMSwgMjM1LCAyNTUsIDIyMSwgMjUyLCAKLSAgICAxLCAyNDQsIDEyMSwgMjIxLCAyNTIsIDEsIDIxNSwgMTgxLCAyMjEsIDI1MiwgMSwgMjI0LCAxMCwgMjIxLCAyNTIsIDEsIAotICAgIDIyMiwgMjI5LCAyMjEsIDI1MiwgMSwgMjIwLCA4NSwgMjIxLCAyNTIsIDEsIDIxNywgMTAwLCAyMjEsIDI1MiwgMTY0LCAKLSAgICAyMzUsIDI1NSwgMjIxLCAyNTIsIDE2NCwgMjM1LCAyNTQsIDIyMSwgMjUyLCAxNjQsIDIyNiwgMjQzLCAyMjEsIDI1MiwgCi0gICAgMTY0LCAyNDgsIDIwNywgMjIxLCAyNTIsIDU4LCAxLCAyNDUsIDEwNSwgMjEwLCAxODIsIDIyMSwgMjUyLCAxNjQsIDI0NSwgCi0gICAgMTA1LCAyMTAsIDE4MiwgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDc1LCAyMjEsIDI1MiwgMjUsIDUsIDc1LCAyMjEsIDI1MiwgCi0gICAgMjUsIDUsIDIyNiwgMTE4LCAyNTUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIDIyNiwgMTE4LCA2MSwgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDYxLCAyMjEsIAotICAgIDI1MiwgMjUsIDUsIDYxLCAyMjEsIDI1MiwgNTgsIDEsIDIxOSwgMjUxLCA2MSwgMjIxLCAyNTIsIDI1LCA1LCAyMTksIDI1MSwgCi0gICAgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3MCwgMjIxLCAyNTIsIDI1LCA1LCA3MCwgMjIxLCAyNTIsIDU4LCAxLCA3MywgCi0gICAgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDczLCAyMjEsIDI1MiwgMjUsIDUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIDc2LCAyMjEsIAotICAgIDI1MiwgMjUsIDUsIDIxOCwgNDUsIDIyMSwgMjUyLCAxNjQsIDIyOSwgOTIsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjI5LCA5MiwgCi0gICAgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDIxOCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDExNCwgMjIxLCAyNTIsIAotICAgIDIyNCwgMTQxLCAyNTIsIDExNCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTMsIDIwMSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAKLSAgICAyMjAsIDgsIDIyMSwgMjUyLCAyNTUsIDIxLCA3OCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMzEsIDY4LCAyMjQsIDQ1LCAyMjEsIAotICAgIDI1MiwgMjI0LCAxNDEsIDIxMCwgMzEsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjI0LCA0NSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAKLSAgICAyMTAsIDExNCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMTUsIDkwLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgOSwgMjIxLCAKLSAgICAyNTIsIDIyNCwgMTQxLCAyMTksIDUzLCAyMzEsIDE0NSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDEwMCwgMjMxLCAxODIsIAotICAgIDEsIDI0MiwgMjQsIDIzMSwgMTgyLCAxLCAyNTUsIDI1LCAyMzEsIDE4MiwgMSwgMjU0LCAyMTYsIDIzMSwgMTgyLCAxLCAKLSAgICAyNTQsIDI1NSwgMjMxLCAxODIsIDEsIDI1NCwgMjA5LCAyMzEsIDE4MiwgMSwgMjE0LCAxMjQsIDIzMSwgMTgyLCAxLCAyNTMsIAotICAgIDE2MCwgMjMxLCAxODIsIDEsIDIzNSwgMTYwLCAyMzEsIDE4MiwgMSwgMjUzLCAxOTgsIDIzMSwgMTgyLCAxLCAyNTQsIDE4MSwgCi0gICAgMjMxLCAxODIsIDEsIDI1NCwgMTg2LCAyMzEsIDE4MiwgMSwgMjU0LCAxNzgsIDIzMSwgMTgyLCAxLCAyNTQsIDEzNiwgMjMxLCAKLSAgICAxODIsIDEsIDI1NCwgMTIzLCAyMzEsIDE4MiwgMSwgMjUzLCAyMzcsIDIzMSwgMTgyLCAxLCAyMzUsIDI1NSwgMjMxLCAxODIsIAotICAgIDEsIDI1NCwgNzIsIDIzMSwgMTgyLCAxLCAyNTMsIDIwOCwgMjMxLCAxODIsIDEsIDI1NCwgNDUsIDIzMSwgMTgyLCAxLCAKLSAgICAyNTQsIDQxLCAyMzEsIDE4MiwgMSwgMjUzLCAyMzEsIDIzMSwgMTgyLCAxLCAyNTMsIDIwNiwgMjMxLCAxODIsIDEsIDI0NiwgCi0gICAgNTUsIDIzMSwgMTgyLCAxLCAyMzUsIDIsIDIzMSwgMTgyLCAxLCAyNTQsIDE5NiwgMjMxLCAxODIsIDI1NCwgMjIyLCA3OCwgCi0gICAgMjMxLCAxODIsIDIxMywgMTM2LCA3OCwgMjMxLCAxODIsIDI0MywgNTMsIDc4LCAyMzEsIDE4MiwgMjI0LCAxNDAsIDEwLCAxLCAKLSAgICAyNTIsIDU1LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAxNTEsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIxNywgODEsIAotICAgIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDI0NCwgMTQzLCAyLCA1OSwgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIAotICAgIDEsIDIyNCwgODIsIDIsIDU5LCA1MSwgMTAsIDEsIDIzMywgMTAzLCAyLCA1MiwgMTMwLCAxMCwgMSwgNjYsIDIsIDEzNCwgCi0gICAgMTcwLCA0OCwgMTAsIDEsIDc5LCAyLCAxMTMsIDE3MCwgMjUyLCA0MywgMjIsIDIwMiwgNDgsIDEwLCAxLCA3OSwgMiwgMTEzLCAKLSAgICAxNzAsIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyMjMsIDk2LCAyLCAyMzIsIDEyMywgMTAsIDEsIDIxMiwgMzEsIDIsIAotICAgIDU5LCAyMTEsIDIzMSwgMTAsIDEsIDIyMiwgMjAxLCAyMTEsIDQzLCAxMCwgMjQ5LCA5OSwgMjQ0LCAxNjUsIDEwLCAyNDksIAotICAgIDk5LCAyNDgsIDE4NCwgMTAsIDI0OSwgOTksIDIzNCwgMjA1LCAxMCwgMjQ5LCA5OSwgMjQ0LCAxNjMsIDEwLCAyNDksIDk5LCAKLSAgICAyNDgsIDE4MiwgMTAsIDI0OSwgOTksIDIzNCwgMjAzLCAxMCwgMTM4LCAxMjMsIDU5LCA0OCwgMTAsIDEzOCwgMTEzLCAxNzAsIAotICAgIDQ4LCAxMCwgMTM4LCAyMzIsIDEyNCwgNDgsIDEwLCAxMzgsIDEyMywgNTksIDUxLCAxMCwgMTM4LCAxMTMsIDE3MCwgNTEsIAotICAgIDEwLCAxMzgsIDIzMiwgMTI0LCA1MSwgMTAsIDIwNCwgMjQ0LCAxNjMsIDEwLCAyMDQsIDI0OCwgMTgyLCAxMCwgMjA0LCAKLSAgICAyMzQsIDIwMywgMTAsIDQsIDEyNSwgMjEyLCAzMCwgMTAsIDI0NCwgMTY2LCAyLCAyMjIsIDIzMywgMTAsIDI0NCwgMTY2LCAKLSAgICAyLCA1OSwgNDgsIDEwLCAyMzQsIDIwNiwgMiwgNTksIDUxLCAxMCwgNDMsIDI1MywgMjUwLCA0OCwgMTAsIDQ0LCAyNTMsIAotICAgIDI1MCwgNDgsIDEwLCA0MywgMjUzLCAyNTAsIDUxLCAxMCwgNDQsIDI1MywgMjUwLCA1MSwgMTAsIDUyLCA0NCwgMjUzLCAKLSAgICAyNTAsIDQ4LCAxMCwgNTIsIDQ0LCAyNTMsIDI1MCwgNzcsIDIsIDI0NywgMTIwLCAxMCwgNDQsIDI1MywgMjUwLCA3NywgMiwgCi0gICAgMjQ3LCAxMjAsIDEwLCAyNDgsIDE4NSwgMiwgMjQ3LCAxMjAsIDg0LCA1LCAyMzUsIDE5MywgMjUwLCAyNTUsIDg0LCA1LCAKLSAgICAyNTAsIDI1NSwgODQsIDUsIDI1NCwgNzUsIDg0LCA1LCAyMTMsIDE0NywgODQsIDEsIDIxOSwgMjUxLCA2MSwgODQsIDEsIAotICAgIDYxLCA4NCwgMSwgMjU1LCA3MywgODQsIDEsIDczLCA4NCwgMSwgMjM2LCAzMywgODQsIDEsIDcwLCA4NCwgMSwgMjE0LCAKLSAgICAxMTgsIDg0LCAxLCAxNDksIDE1MywgODQsIDEsIDE0OSwgMTU2LCA4NCwgMSwgMjUxLCAyLCA3NSwgODQsIDEsIDIxOSwgCi0gICAgMjUxLCA3NSwgODQsIDEsIDc1LCA4NCwgMSwgMjU0LCAyMDEsIDg0LCAxLCAyNTEsIDIsIDc2LCA4NCwgMSwgMjE5LCAyNTEsIAotICAgIDc2LCA4NCwgMSwgNzYsIDg0LCAxLCAyNTMsIDE5MiwgODQsIDEsIDE3NiwgODQsIDEsIDIzNCwgMTMyLCA4NCwgMSwgMjQzLCAKLSAgICAxMzUsIDg0LCAxLCAyNDIsIDI0OSwgODQsIDEsIDIyOSwgNzcsIDg0LCAxLCAyNTEsIDMzLCA4NCwgMSwgMjUwLCAxNTcsIAotICAgIDg0LCAxLCAyMzUsIDE0MSwgODQsIDEsIDIzNSwgMTE0LCA4NCwgMSwgMjI3LCAxNjUsIDg0LCAxLCAyMTUsIDE1NiwgODQsIAotICAgIDEsIDIxNSwgMTQ0LCA4NCwgMSwgMjQ4LCAxMzUsIDg0LCAxLCAyNDgsIDExOSwgODQsIDEsIDIyOCwgMTEwLCA4NCwgMSwgCi0gICAgMjE3LCAxMDUsIDg0LCAxLCAyMTYsIDIwOCwgODQsIDEsIDI0OCwgMjIxLCA4NCwgMSwgMjQ4LCAyNSwgODQsIDEsIDE5NywgCi0gICAgODQsIDEsIDIyOCwgOTIsIDg0LCAxLCAxOTAsIDg0LCAxLCAyMjUsIDE0NywgODQsIDEsIDI1MiwgMTkxLCA4NCwgMSwgMjUyLCAKLSAgICAxOCwgODQsIDEsIDE4NCwgODQsIDEsIDE5MSwgODQsIDEsIDIwNSwgODQsIDEsIDIyMiwgMTc5LCA4NCwgMSwgMjMzLCAxMzUsIAotICAgIDg0LCAxLCAyMzIsIDE4NCwgODQsIDEsIDIzMiwgMTc1LCA4NCwgMSwgMjE0LCAyNywgODQsIDEsIDIyMCwgMTAyLCA4NCwgMSwgCi0gICAgMjE4LCAyMjMsIDg0LCAxLCAyMDYsIDg0LCAxLCAxNjIsIDg0LCAyNSwgNSwgMjI2LCAyMzQsIDg0LCAyNSwgNSwgMjI2LCAKLSAgICAxODEsIDg0LCA1LCAyMjcsIDIwNSwgODQsIDUsIDI1MywgMTc1LCA4NCwgMjUsIDUsIDI1NSwgNzMsIDg0LCAyNSwgNSwgNzMsIAotICAgIDg0LCAyNSwgNSwgMjM2LCAzMywgODQsIDI1LCA1LCA3MCwgODQsIDI1LCA1LCAyMTQsIDExOCwgODQsIDI1LCA1LCAxNDksIAotICAgIDE1MywgODQsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCA4NCwgMjUsIDUsIDI1MSwgMiwgNzUsIDg0LCAyNSwgNSwgMjE5LCAKLSAgICAyNTEsIDc1LCA4NCwgMjUsIDUsIDc1LCA4NCwgMjUsIDUsIDI1NCwgMjAxLCA4NCwgMjUsIDUsIDI1MSwgMiwgNzYsIDg0LCAKLSAgICAyNSwgNSwgMjE5LCAyNTEsIDc2LCA4NCwgMjUsIDUsIDc2LCA4NCwgMjUsIDUsIDI1MywgMTkyLCA4NCwgNSwgMjEzLCAxNTIsIAotICAgIDg0LCAyNSwgNSwgMjI0LCAxODUsIDc1LCA4NCwgMjUsIDUsIDI1MywgMTcxLCA4NCwgMjI2LCAyMDQsIDg0LCAyMTgsIDExMSwgCi0gICAgNSwgMjE0LCAyMTYsIDg0LCAyMTgsIDExMSwgNSwgMjU0LCA3NywgODQsIDI0MiwgMTM3LCAyNTUsIDE0LCA4NCwgMjU1LCAzLCAKLSAgICAyNTUsIDE0LCA4NCwgMjUsIDUsIDI1MSwgMiwgMTk5LCA3NSwgODQsIDI1LCA1LCAyMTQsIDIxNCwgODQsIDI1LCA1LCAyMTQsIAotICAgIDExNywgODQsIDEsIDIyNCwgODgsIDg0LCAxLCAyMzQsIDExNSwgODQsIDEsIDI0MiwgMjI2LCA4NCwgMSwgMjEwLCAxMTYsIAotICAgIDg0LCAxLCAyNDgsIDEyNCwgODQsIDEsIDIyMywgMzksIDg0LCAxLCAyNDQsIDE5NiwgODQsIDEsIDIxMCwgMTY4LCA4NCwgMSwgCi0gICAgMTQ5LCAyMjIsIDE4MCwgODQsIDEsIDE0OSwgMjMyLCAxODUsIDg0LCAyNSwgNSwgMTQ5LCAxNTYsIDg0LCAyNSwgNSwgMTQ5LCAKLSAgICAyMzIsIDE4NSwgODQsIDI0OCwgMTc4LCA4NCwgNTIsIDI0OCwgMTc4LCA4NCwgMjEsIDIxMCwgODYsIDg0LCAyMSwgMTEwLCAKLSAgICA4NCwgMjEsIDEwNSwgODQsIDIxLCAxNTgsIDg0LCAyMSwgMTYxLCA4NCwgMjEsIDE4OSwgODQsIDIxLCAxOTQsIDg0LCAyMSwgCi0gICAgMTk4LCA4NCwgMjEsIDE5NSwgODQsIDIxLCAyMDAsIDg0LCAyNTUsIDIxLCA1MCwgODQsIDUsIDEyNSwgMjE5LCAxNywgMjQ3LCAKLSAgICAxMjAsIDg0LCAxLCAyNTEsIDIsIDYxLCA4NCwgMSwgMjI2LCAyMzQsIDg0LCAxLCAyMjYsIDE4MSwgODQsIDEsIDI1MywgCi0gICAgMTcxLCA4NCwgMSwgMjE0LCAyMTQsIDg0LCAxLCAyMTQsIDExNywgODQsIDEsIDIxMCwgODIsIDg0LCAxLCAxMTQsIDE5MSwgCi0gICAgODQsIDEsIDI0MywgMjksIDg0LCAxLCAyMzUsIDk2LCA4NCwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA4NCwgMSwgMjQ4LCAKLSAgICAxMjUsIDg0LCAxLCAyNTIsIDExMSwgMTQ2LCA1LCAyNTAsIDI1NSwgMTQ2LCA1LCAyNTQsIDc1LCAxNDYsIDUsIDIxMywgCi0gICAgMTQ3LCAxNDYsIDEsIDYxLCAxNDYsIDEsIDI1NSwgNzMsIDE0NiwgMSwgNzMsIDE0NiwgMSwgMjM2LCAzMywgMTQ2LCAxLCAKLSAgICA3MCwgMTQ2LCAxLCAyMTQsIDExOCwgMTQ2LCAxLCAxNDksIDE1MywgMTQ2LCAxLCAxNDksIDE1NiwgMTQ2LCAxLCA3NSwgCi0gICAgMTQ2LCAxLCAyNTQsIDIwMSwgMTQ2LCAxLCA3NiwgMTQ2LCAxLCAyNTMsIDE5MiwgMTQ2LCAxLCAxNzYsIDE0NiwgMSwgMjM0LCAKLSAgICAxMzIsIDE0NiwgMSwgMjQzLCAxMzUsIDE0NiwgMSwgMjQyLCAyNDksIDE0NiwgMSwgMjI5LCA3NywgMTQ2LCAxLCAyNTEsIAotICAgIDMzLCAxNDYsIDEsIDI1MCwgMTU3LCAxNDYsIDEsIDIzNSwgMTQxLCAxNDYsIDEsIDIzNSwgMTE0LCAxNDYsIDEsIDIyNywgCi0gICAgMTY1LCAxNDYsIDEsIDIxNSwgMTU2LCAxNDYsIDEsIDIxNSwgMTQ0LCAxNDYsIDEsIDI0OCwgMTM1LCAxNDYsIDEsIDI0OCwgCi0gICAgMTE5LCAxNDYsIDEsIDIyOCwgMTEwLCAxNDYsIDEsIDIxNywgMTA1LCAxNDYsIDEsIDIxNiwgMjA4LCAxNDYsIDEsIDI0OCwgCi0gICAgMjIxLCAxNDYsIDEsIDI0OCwgMjUsIDE0NiwgMSwgMTk3LCAxNDYsIDEsIDE5MCwgMTQ2LCAxLCAyMjUsIDE0NywgMTQ2LCAxLCAKLSAgICAyNTIsIDE5MSwgMTQ2LCAxLCAyNTIsIDE4LCAxNDYsIDEsIDE4NCwgMTQ2LCAxLCAxOTEsIDE0NiwgMSwgMjA1LCAxNDYsIDEsIAotICAgIDIzMywgMTM1LCAxNDYsIDEsIDIyMCwgMTAyLCAxNDYsIDEsIDIxOCwgMjIzLCAxNDYsIDEsIDIwNiwgMTQ2LCAxLCAxNjIsIAotICAgIDE0NiwgNSwgMjI3LCAyMDUsIDE0NiwgNSwgMjUzLCAxNzUsIDE0NiwgMjUsIDUsIDI1NSwgNzMsIDE0NiwgMjUsIDUsIDczLCAKLSAgICAxNDYsIDI1LCA1LCAyMzYsIDMzLCAxNDYsIDI1LCA1LCA3MCwgMTQ2LCAyNSwgNSwgMjE0LCAxMTgsIDE0NiwgMjUsIDUsIAotICAgIDE0OSwgMTUzLCAxNDYsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNDYsIDI1LCA1LCA3NSwgMTQ2LCAyNSwgNSwgMjU0LCAKLSAgICAyMDEsIDE0NiwgMjUsIDUsIDc2LCAxNDYsIDI1LCA1LCAyNTMsIDE5MiwgMTQ2LCA1LCAyMTMsIDE1MiwgMTQ2LCAxLCAyMzQsIAotICAgIDEyNCwgMjE3LCAxMDUsIDE0NiwgMjUzLCAxOTMsIDIzMywgMjMsIDc4LCAxNDYsIDEsIDIyMiwgMTc5LCAxNDYsIDEsIDIyMywgCi0gICAgMzksIDE0NiwgMSwgMjEwLCAxNjgsIDE0NiwgMSwgMTQ5LCAyMjIsIDE4MCwgMTQ2LCAxLCAxNDksIDIzMiwgMTg1LCAxNDYsIAotICAgIDI1LCA1LCAxNDksIDE1NiwgMTQ2LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTQ2LCAyMSwgMjEwLCA4NiwgMTQ2LCAyMSwgCi0gICAgMTEwLCAxNDYsIDIxLCAxMDUsIDE0NiwgMjEsIDE1OCwgMTQ2LCAyMSwgMTYxLCAxNDYsIDIxLCAxODksIDE0NiwgMjEsIAotICAgIDE5NCwgMTQ2LCAyMSwgMTk4LCAxNDYsIDIxLCAxOTUsIDE0NiwgMjEsIDIwMCwgMTQ2LCAxLCAyMjMsIDE4OCwgMiwgMjMwLCAKLSAgICAyMjQsIDI0NywgMjU0LCAxNDYsIDEsIDIyMywgMTg4LCAyLCAyMzIsIDEwOCwgMjQ3LCAyNTQsIDE0NiwgMjIyLCAxMTgsIAotICAgIDc4LCAxNDYsIDIyMiwgMTE4LCA1MCwgMTQ2LCAyNDksIDk4LCAyMjcsIDE5NywgMTEwLCAxNDYsIDI0OSwgOTgsIDIyNywgCi0gICAgMTk3LCAxMDUsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDE1OCwgMTQ2LCAyNDksIDk4LCAyMjcsIDE5NywgMTYxLCAxNDYsIAotICAgIDI0OSwgOTgsIDIyNywgMTk3LCAxMjMsIDIzMywgMTYsIDIxNiwgMjAxLCAyMTYsIDE5NiwgMjQ4LCA0OCwgMTQ2LCAyNDksIAotICAgIDk4LCAyNDgsIDQ5LCAyMTksIDExOSwgMTQ2LCAyMzUsIDE2MSwgMTQ2LCAyNDMsIDEwMywgNzgsIDE4MywgNSwgMjU0LCAKLSAgICAyNTQsIDI1MSwgMjQzLCAxODMsIDUsIDI1MSwgMjQzLCAxODMsIDUsIDIxMywgMTQ3LCAxODMsIDEsIDYxLCAxODMsIDEsIAotICAgIDI1NSwgNzMsIDE4MywgMSwgNzMsIDE4MywgMSwgMjM2LCAzMywgMTgzLCAxLCA3MCwgMTgzLCAxLCAyMTQsIDExOCwgMTgzLCAKLSAgICAxLCAyNDUsIDIwOSwgMTgzLCAxLCAyNTQsIDIwMSwgMTgzLCAxLCAyMjYsIDE4MywgMTgzLCAxLCAyNTMsIDE5MiwgMTgzLCAKLSAgICAxLCAxNzYsIDE4MywgMSwgMjM0LCAxMzIsIDE4MywgMSwgMjQzLCAxMzUsIDE4MywgMSwgMjQyLCAyNDksIDE4MywgMSwgCi0gICAgMjI5LCA3NywgMTgzLCAxLCAyNTEsIDMzLCAxODMsIDEsIDI1MCwgMTU3LCAxODMsIDEsIDIzNSwgMTQxLCAxODMsIDEsIAotICAgIDIzNSwgMTE0LCAxODMsIDEsIDIyNywgMTY1LCAxODMsIDEsIDIxNSwgMTU2LCAxODMsIDEsIDIxNSwgMTQ0LCAxODMsIDEsIAotICAgIDI0OCwgMTM1LCAxODMsIDEsIDI0OCwgMTE5LCAxODMsIDEsIDIyOCwgMTEwLCAxODMsIDEsIDIxNywgMTA1LCAxODMsIDEsIAotICAgIDIxNiwgMjA4LCAxODMsIDEsIDI0OCwgMjIxLCAxODMsIDEsIDI0OCwgMjUsIDE4MywgMSwgMTk3LCAxODMsIDEsIDE5MCwgCi0gICAgMTgzLCAxLCAyMjUsIDE0NywgMTgzLCAxLCAyNTIsIDE5MSwgMTgzLCAxLCAyNTIsIDE4LCAxODMsIDEsIDE4NCwgMTgzLCAxLCAKLSAgICAxOTEsIDE4MywgMSwgMjA1LCAxODMsIDEsIDIzMywgMTM1LCAxODMsIDEsIDIzMiwgMTg0LCAxODMsIDEsIDIxNCwgMjcsIAotICAgIDE4MywgMSwgMjIwLCAxMDIsIDE4MywgMSwgMjA2LCAxODMsIDEsIDE2MiwgMTgzLCA1LCAyMjcsIDIwNSwgMTgzLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMTgzLCAyNSwgNSwgNzMsIDE4MywgMjUsIDUsIDIzNiwgMzMsIDE4MywgMjUsIDUsIDcwLCAxODMsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTgzLCAyNSwgNSwgMjQ1LCAyMDksIDE4MywgMjUsIDUsIDI1NCwgMjAxLCAxODMsIDI1LCA1LCAyMjYsIAotICAgIDE4MywgMTgzLCAyNSwgNSwgMjUzLCAxOTIsIDE4MywgNSwgMjEzLCAxNTIsIDE4MywgNSwgMjE0LCAyMTgsIDE4MywgMSwgCi0gICAgMjM0LCAxMTUsIDE4MywgMSwgMjQyLCAyMjYsIDE4MywgMSwgMjEwLCAxMTYsIDE4MywgMSwgMjIyLCAxNzksIDE4MywgMSwgCi0gICAgMjQ0LCAxOTYsIDE4MywgMjEsIDIxMCwgODYsIDE4MywgMjEsIDExMCwgMTgzLCAyMSwgMTA1LCAxODMsIDIxLCAxNTgsIAotICAgIDE4MywgMjEsIDE2MSwgMTgzLCAyMSwgMTg5LCAxODMsIDIxLCAxOTQsIDE4MywgMjEsIDE5OCwgMTgzLCAyMSwgMTk1LCAKLSAgICAxODMsIDIxLCAyMDAsIDE4MywgMjE2LCA3NCwgMTgzLCAyNTQsIDI1MywgMTgzLCAyMzUsIDE3OCwgMTgzLCAyMTQsIDE0NiwgCi0gICAgMTgzLCAyNDUsIDE4MSwgMjI2LCAxODgsIDE4MywgNSwgMjExLCA3OCwgMTcxLCA1LCAyNTAsIDI1NSwgMTcxLCA1LCAyNTQsIAotICAgIDc1LCAxNzEsIDUsIDIxMywgMTQ3LCAxNzEsIDEsIDYxLCAxNzEsIDEsIDI1NSwgNzMsIDE3MSwgMSwgNzMsIDE3MSwgMSwgCi0gICAgMjM2LCAzMywgMTcxLCAxLCA3MCwgMTcxLCAxLCAyMTQsIDExOCwgMTcxLCAxLCAxNDksIDE1MywgMTcxLCAxLCAxNDksIAotICAgIDE1NiwgMTcxLCAyNSwgMjUxLCAyLCA3NSwgMTcxLCAxLCA3NSwgMTcxLCAxLCAyNTQsIDIwMSwgMTcxLCAyNSwgMjUxLCAyLCAKLSAgICA3NiwgMTcxLCAxLCA3NiwgMTcxLCAxLCAyNTMsIDE5MiwgMTcxLCAxLCAxNzYsIDE3MSwgMSwgMjM0LCAxMzIsIDE3MSwgMSwgCi0gICAgMjQzLCAxMzUsIDE3MSwgMSwgMjQyLCAyNDksIDE3MSwgMSwgMjI5LCA3NywgMTcxLCAxLCAyNTEsIDMzLCAxNzEsIDEsIAotICAgIDI1MCwgMTU3LCAxNzEsIDEsIDIzNSwgMTQxLCAxNzEsIDEsIDIzNSwgMTE0LCAxNzEsIDEsIDIyNywgMTY1LCAxNzEsIDEsIAotICAgIDIxNSwgMTU2LCAxNzEsIDEsIDIxNSwgMTQ0LCAxNzEsIDEsIDI0OCwgMTM1LCAxNzEsIDEsIDI0OCwgMTE5LCAxNzEsIDEsIAotICAgIDIyOCwgMTEwLCAxNzEsIDEsIDIxNywgMTA1LCAxNzEsIDEsIDIxNiwgMjA4LCAxNzEsIDEsIDI0OCwgMjIxLCAxNzEsIDEsIAotICAgIDI0OCwgMjUsIDE3MSwgMSwgMTk3LCAxNzEsIDEsIDE5MCwgMTcxLCAxLCAyMjUsIDE0NywgMTcxLCAxLCAyNTIsIDE5MSwgCi0gICAgMTcxLCAxLCAyNTIsIDE4LCAxNzEsIDEsIDE4NCwgMTcxLCAxLCAxOTEsIDE3MSwgMSwgMjA1LCAxNzEsIDEsIDIzMywgMTM1LCAKLSAgICAxNzEsIDEsIDIzMiwgMTg0LCAxNzEsIDEsIDIxNCwgMjcsIDE3MSwgMSwgMjIwLCAxMDIsIDE3MSwgMSwgMjE4LCAyMjMsIAotICAgIDE3MSwgMSwgMjA2LCAxNzEsIDEsIDE2MiwgMTcxLCA1LCAyMjcsIDIwNSwgMTcxLCA1LCAyNTMsIDE3NSwgMTcxLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMTcxLCAyNSwgNSwgNzMsIDE3MSwgMjUsIDUsIDIzNiwgMzMsIDE3MSwgMjUsIDUsIDcwLCAxNzEsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTcxLCAyNSwgNSwgMTQ5LCAxNTMsIDE3MSwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE3MSwgMjUsIDUsIAotICAgIDI1MSwgMiwgNzUsIDE3MSwgMjUsIDUsIDc1LCAxNzEsIDI1LCA1LCAyNTQsIDIwMSwgMTcxLCAyNSwgNSwgMjUxLCAyLCA3NiwgCi0gICAgMTcxLCAyNSwgNSwgNzYsIDE3MSwgMjUsIDUsIDI1MywgMTkyLCAxNzEsIDUsIDIxMywgMTUyLCAxNzEsIDIyNiwgMjA0LCAKLSAgICAxNzEsIDEsIDE0OSwgMjIyLCAxODAsIDE3MSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTcxLCAyNSwgNSwgMTQ5LCAxNTYsIDE3MSwgCi0gICAgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3MSwgMjEsIDIxMCwgODYsIDE3MSwgMjEsIDExMCwgMTcxLCAyMSwgMTA1LCAxNzEsIAotICAgIDIxLCAxNTgsIDE3MSwgMjEsIDE2MSwgMTcxLCAyMSwgMTg5LCAxNzEsIDIxLCAxOTQsIDE3MSwgMjEsIDE5OCwgMTcxLCAyMSwgCi0gICAgMTk1LCAxNzEsIDIxLCAyMDAsIDE3MSwgMjU1LCAyMSwgNTAsIDE3MSwgMjIyLCAxMTgsIDUwLCAxNTcsIDUsIDI1MCwgMjU1LCAKLSAgICAxNTcsIDUsIDI1NCwgNzUsIDE1NywgNSwgMjEzLCAxNDcsIDE1NywgMSwgNjEsIDE1NywgMSwgMjU1LCA3MywgMTU3LCAxLCAKLSAgICA3MywgMTU3LCAxLCAyMzYsIDMzLCAxNTcsIDEsIDcwLCAxNTcsIDEsIDIxNCwgMTE4LCAxNTcsIDEsIDE0OSwgMTUzLCAxNTcsIAotICAgIDEsIDE0OSwgMTU2LCAxNTcsIDEsIDc1LCAxNTcsIDEsIDI1NCwgMjAxLCAxNTcsIDEsIDc2LCAxNTcsIDEsIDI1MywgMTkyLCAKLSAgICAxNTcsIDEsIDE3NiwgMTU3LCAxLCAyMzQsIDEzMiwgMTU3LCAxLCAyNDMsIDEzNSwgMTU3LCAxLCAyNDIsIDI0OSwgMTU3LCAKLSAgICAxLCAyMjksIDc3LCAxNTcsIDEsIDI1MSwgMzMsIDE1NywgMSwgMjUwLCAxNTcsIDE1NywgMSwgMjM1LCAxNDEsIDE1NywgMSwgCi0gICAgMjM1LCAxMTQsIDE1NywgMSwgMjI3LCAxNjUsIDE1NywgMSwgMjE1LCAxNTYsIDE1NywgMSwgMjE1LCAxNDQsIDE1NywgMSwgCi0gICAgMjQ4LCAxMzUsIDE1NywgMSwgMjQ4LCAxMTksIDE1NywgMSwgMjI4LCAxMTAsIDE1NywgMSwgMjE3LCAxMDUsIDE1NywgMSwgCi0gICAgMjE2LCAyMDgsIDE1NywgMSwgMjQ4LCAyMjEsIDE1NywgMSwgMjQ4LCAyNSwgMTU3LCAxLCAxOTcsIDE1NywgMSwgMTkwLCAKLSAgICAxNTcsIDEsIDIyNSwgMTQ3LCAxNTcsIDEsIDI1MiwgMTkxLCAxNTcsIDEsIDI1MiwgMTgsIDE1NywgMSwgMTg0LCAxNTcsIDEsIAotICAgIDE5MSwgMTU3LCAxLCAyMDUsIDE1NywgMSwgMjMzLCAxMzUsIDE1NywgMSwgMjMyLCAxODQsIDE1NywgMSwgMjE0LCAyNywgCi0gICAgMTU3LCAxLCAyMjAsIDEwMiwgMTU3LCAxLCAyMTgsIDIyMywgMTU3LCAxLCAyMDYsIDE1NywgMSwgMTYyLCAxNTcsIDUsIAotICAgIDIyNywgMjA1LCAxNTcsIDUsIDI1MywgMTc1LCAxNTcsIDI1LCA1LCAyNTUsIDczLCAxNTcsIDI1LCA1LCA3MywgMTU3LCAyNSwgCi0gICAgNSwgMjM2LCAzMywgMTU3LCAyNSwgNSwgNzAsIDE1NywgMjUsIDUsIDIxNCwgMTE4LCAxNTcsIDI1LCA1LCAxNDksIDE1MywgCi0gICAgMTU3LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTU3LCAyNSwgNSwgNzUsIDE1NywgMjUsIDUsIDI1NCwgMjAxLCAxNTcsIDI1LCAKLSAgICA1LCA3NiwgMTU3LCAyNSwgNSwgMjUzLCAxOTIsIDE1NywgNSwgMjEzLCAxNTIsIDE1NywgMjU0LCAyMDIsIDIzMywgMjMsIAotICAgIDc4LCAxNTcsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMTU3LCAxLCAyMjIsIDE3OSwgMTU3LCAxLCAyMjMsIDM5LCAxNTcsIAotICAgIDEsIDIxMCwgMTY4LCAxNTcsIDEsIDE0OSwgMjIyLCAxODAsIDE1NywgMSwgMTQ5LCAyMzIsIDE4NSwgMTU3LCAyNSwgNSwgCi0gICAgMTQ5LCAxNTYsIDE1NywgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE1NywgMjEsIDIxMCwgODYsIDE1NywgMjEsIDExMCwgMTU3LCAKLSAgICAyMSwgMTA1LCAxNTcsIDIxLCAxNTgsIDE1NywgMjEsIDE2MSwgMTU3LCAyMSwgMTg5LCAxNTcsIDIxLCAxOTQsIDE1NywgMjEsIAotICAgIDE5OCwgMTU3LCAyMSwgMTk1LCAxNTcsIDIxLCAyMDAsIDE1NywgMjM1LCAxNjEsIDE1NywgMSwgMjEyLCA2NSwgMTU3LCAKLSAgICAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMTU3LCAyNDQsIDIsIDEyMywgMjQyLCAyNywgMTU3LCAyNDQsIDIsIDEzNCwgMjI0LCAKLSAgICAxOSwgMTU3LCAyNDQsIDIsIDEyMywgMjE5LCAxMTcsIDE1NywgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAxNTcsIDI0NCwgMiwgCi0gICAgMTM0LCAyMTksIDExNiwgMzYsIDUsIDI1NCwgNzUsIDM2LCA1LCAyMTMsIDE0NywgMzYsIDEsIDYxLCAzNiwgMSwgMjU1LCAKLSAgICA3MywgMzYsIDEsIDczLCAzNiwgMSwgMjM2LCAzMywgMzYsIDEsIDcwLCAzNiwgMSwgMjE0LCAxMTgsIDM2LCAxLCA3NSwgMzYsIAotICAgIDEsIDI0NSwgMjA5LCAzNiwgMSwgMjU0LCAyMDEsIDM2LCAxLCA3NiwgMzYsIDEsIDIyNiwgMTgzLCAzNiwgMSwgMjUzLCAKLSAgICAxOTIsIDM2LCAxLCAxNzYsIDM2LCAxLCAyMjksIDc3LCAzNiwgMSwgMjUxLCAzMywgMzYsIDEsIDIzNSwgMTQxLCAzNiwgMSwgCi0gICAgMjI3LCAxNjUsIDM2LCAxLCAyMTUsIDE1NiwgMzYsIDEsIDIyOCwgMTEwLCAzNiwgMSwgMjE3LCAxMDUsIDM2LCAxLCAxOTcsIAotICAgIDM2LCAxLCAyMjgsIDkyLCAzNiwgMSwgMTkwLCAzNiwgMSwgMTg0LCAzNiwgMSwgMTkxLCAzNiwgMSwgMjA1LCAzNiwgMSwgCi0gICAgMjIyLCAxNzksIDM2LCAxLCAyMzMsIDEzNSwgMzYsIDEsIDIzMiwgMTg0LCAzNiwgMSwgMjMyLCAxNzUsIDM2LCAxLCAyMTQsIAotICAgIDI3LCAzNiwgMSwgMjIwLCAxMDIsIDM2LCAxLCAyMTgsIDIyMywgMzYsIDEsIDIwNiwgMzYsIDEsIDE2MiwgMzYsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAzNiwgMjUsIDUsIDczLCAzNiwgMjUsIDUsIDIzNiwgMzMsIDM2LCAyNSwgNSwgNzAsIDM2LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDM2LCAyNSwgNSwgNzUsIDM2LCAyNSwgNSwgMjQ1LCAyMDksIDM2LCAyNSwgNSwgMjU0LCAyMDEsIDM2LCAKLSAgICAyNSwgNSwgNzYsIDM2LCAyNSwgNSwgMjI2LCAxODMsIDM2LCAyNSwgNSwgMjUzLCAxOTIsIDM2LCA1LCAyMTMsIDE1MiwgMzYsIAotICAgIDIyNiwgMjA0LCAzNiwgMjUzLCAxOTMsIDIzMywgMjMsIDc4LCAzNiwgMjEsIDIxMCwgODYsIDM2LCAyMSwgMTEwLCAzNiwgCi0gICAgMjEsIDEwNSwgMzYsIDIxLCAxNTgsIDM2LCAyMSwgMTYxLCAzNiwgMjEsIDE4OSwgMzYsIDIxLCAxOTQsIDM2LCAyMSwgMTk4LCAKLSAgICAzNiwgMjEsIDE5NSwgMzYsIDIxLCAyMDAsIDM2LCA1NCwgMjE2LCAyNDcsIDM2LCA1NCwgMTIzLCAyNDAsIDIxMCwgMzYsIAotICAgIDU0LCAxMjMsIDIxNiwgMTQ3LCAzNiwgMjQ4LCAxNDYsIDUwLCAzNiwgMjMwLCAxMzUsIDUwLCAzNiwgMjExLCA0NSwgNTAsIAotICAgIDM2LCAyNDgsIDg3LCA1MCwgMzYsIDI0OSwgMTM5LCA1MCwgMzYsIDI1MywgMjM4LCA3NywgNTAsIDM2LCAyMjIsIDExOCwgCi0gICAgNTAsIDM2LCA1NCwgNTAsIDE0OCwgNSwgMjUwLCAyNTUsIDE0OCwgNSwgMjU0LCA3NSwgMTQ4LCA1LCAyMTMsIDE0NywgMTQ4LCAKLSAgICAxLCA2MSwgMTQ4LCAxLCAyNTUsIDczLCAxNDgsIDEsIDczLCAxNDgsIDEsIDIzNiwgMzMsIDE0OCwgMSwgNzAsIDE0OCwgMSwgCi0gICAgMjE0LCAxMTgsIDE0OCwgMSwgMTQ5LCAxNTMsIDE0OCwgMSwgMTQ5LCAxNTYsIDE0OCwgMSwgNzUsIDE0OCwgMSwgMjQ1LCAKLSAgICAyMDksIDE0OCwgMSwgMjU0LCAyMDEsIDE0OCwgMSwgNzYsIDE0OCwgMSwgMjI2LCAxODMsIDE0OCwgMSwgMjUzLCAxOTIsIAotICAgIDE0OCwgMSwgMTc2LCAxNDgsIDEsIDIzNCwgMTMyLCAxNDgsIDEsIDI0MywgMTM1LCAxNDgsIDEsIDI0MiwgMjQ5LCAxNDgsIAotICAgIDEsIDIyOSwgNzcsIDE0OCwgMSwgMjUxLCAzMywgMTQ4LCAxLCAyNTAsIDE1NywgMTQ4LCAxLCAyMzUsIDE0MSwgMTQ4LCAxLCAKLSAgICAyMzUsIDExNCwgMTQ4LCAxLCAyMjcsIDE2NSwgMTQ4LCAxLCAyMTUsIDE1NiwgMTQ4LCAxLCAyMTUsIDE0NCwgMTQ4LCAxLCAKLSAgICAyNDgsIDEzNSwgMTQ4LCAxLCAyNDgsIDExOSwgMTQ4LCAxLCAyMjgsIDExMCwgMTQ4LCAxLCAyMTcsIDEwNSwgMTQ4LCAxLCAKLSAgICAyMTYsIDIwOCwgMTQ4LCAxLCAyNDgsIDIyMSwgMTQ4LCAxLCAyNDgsIDI1LCAxNDgsIDEsIDE5NywgMTQ4LCAxLCAxOTAsIAotICAgIDE0OCwgMSwgMjI1LCAxNDcsIDE0OCwgMSwgMjUyLCAxOTEsIDE0OCwgMSwgMjUyLCAxOCwgMTQ4LCAxLCAxODQsIDE0OCwgMSwgCi0gICAgMTkxLCAxNDgsIDEsIDIwNSwgMTQ4LCAxLCAyMjIsIDE3OSwgMTQ4LCAxLCAyMzMsIDEzNSwgMTQ4LCAxLCAyMzIsIDE4NCwgCi0gICAgMTQ4LCAxLCAyMTQsIDI3LCAxNDgsIDEsIDIyMCwgMTAyLCAxNDgsIDEsIDIxOCwgMjIzLCAxNDgsIDEsIDIwNiwgMTQ4LCAxLCAKLSAgICAxNjIsIDE0OCwgNSwgMjUzLCAxNzUsIDE0OCwgMjUsIDUsIDI1NSwgNzMsIDE0OCwgMjUsIDUsIDczLCAxNDgsIDI1LCA1LCAKLSAgICAyMzYsIDMzLCAxNDgsIDI1LCA1LCA3MCwgMTQ4LCAyNSwgNSwgMjE0LCAxMTgsIDE0OCwgMjUsIDUsIDE0OSwgMTUzLCAxNDgsIAotICAgIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNDgsIDI1LCA1LCA3NSwgMTQ4LCAyNSwgNSwgMjQ1LCAyMDksIDE0OCwgMjUsIDUsIAotICAgIDI1NCwgMjAxLCAxNDgsIDI1LCA1LCA3NiwgMTQ4LCAyNSwgNSwgMjI2LCAxODMsIDE0OCwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxNDgsIDUsIDIxMywgMTUyLCAxNDgsIDIzMywgMjMsIDc4LCAxNDgsIDI1NCwgMjAyLCAyMzMsIDIzLCA3OCwgMTQ4LCAxLCAKLSAgICAyMTUsIDE4MywgMTQ4LCAxLCAyNDYsIDM4LCAxNDgsIDEsIDE0OSwgMjIyLCAxODAsIDE0OCwgMSwgMTQ5LCAyMzIsIDE4NSwgCi0gICAgMTQ4LCAyNSwgNSwgMTQ5LCAxNTYsIDE0OCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE0OCwgMjEsIDIxMCwgODYsIDE0OCwgCi0gICAgMjEsIDExMCwgMTQ4LCAyMSwgMTA1LCAxNDgsIDIxLCAxNTgsIDE0OCwgMjEsIDE2MSwgMTQ4LCAyMSwgMTg5LCAxNDgsIDIxLCAKLSAgICAxOTQsIDE0OCwgMjEsIDE5OCwgMTQ4LCAyMSwgMTk1LCAxNDgsIDIxLCAyMDAsIDE0OCwgMjQ0LCAyLCAyMSwgMjEwLCA4NywgCi0gICAgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMjMsIDMxLCAyMjYsIDIzNywgMjI0LCAKLSAgICAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTEzLCAzMSwgMjI2LCAyMzcsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIAotICAgIDI0NCwgMiwgMjEsIDEzNCwgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMjMsIAotICAgIDMxLCAyNDUsIDQyLCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMTMsIDMxLCAyNDUsIDQyLCAyMjQsIAotICAgIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMzQsIDMxLCAyNDUsIDQyLCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAKLSAgICA1LCAyMTUsIDg0LCAxNjUsIDUsIDI1NCwgNzUsIDE2NSwgNSwgMjEzLCAxNDcsIDE2NSwgMSwgNjEsIDE2NSwgMSwgMjU1LCAKLSAgICA3MywgMTY1LCAxLCA3MywgMTY1LCAxLCAyMzYsIDMzLCAxNjUsIDEsIDcwLCAxNjUsIDEsIDIxNCwgMTE4LCAxNjUsIDEsIAotICAgIDE0OSwgMTUzLCAxNjUsIDEsIDE0OSwgMTU2LCAxNjUsIDEsIDc1LCAxNjUsIDEsIDI0NSwgMjA5LCAxNjUsIDEsIDI1NCwgCi0gICAgMjAxLCAxNjUsIDEsIDc2LCAxNjUsIDEsIDIyNiwgMTgzLCAxNjUsIDEsIDI1MywgMTkyLCAxNjUsIDEsIDE3NiwgMTY1LCAxLCAKLSAgICAyMzQsIDEzMiwgMTY1LCAxLCAyNDMsIDEzNSwgMTY1LCAxLCAyNDIsIDI0OSwgMTY1LCAxLCAyMjksIDc3LCAxNjUsIDEsIAotICAgIDI1MSwgMzMsIDE2NSwgMSwgMjUwLCAxNTcsIDE2NSwgMSwgMjM1LCAxNDEsIDE2NSwgMSwgMjM1LCAxMTQsIDE2NSwgMSwgCi0gICAgMjI3LCAxNjUsIDE2NSwgMSwgMjE1LCAxNTYsIDE2NSwgMSwgMjE1LCAxNDQsIDE2NSwgMSwgMjQ4LCAxMzUsIDE2NSwgMSwgCi0gICAgMjQ4LCAxMTksIDE2NSwgMSwgMjI4LCAxMTAsIDE2NSwgMSwgMjE3LCAxMDUsIDE2NSwgMSwgMjE2LCAyMDgsIDE2NSwgMSwgCi0gICAgMjQ4LCAyMjEsIDE2NSwgMSwgMjQ4LCAyNSwgMTY1LCAxLCAxOTcsIDE2NSwgMSwgMTkwLCAxNjUsIDEsIDIyNSwgMTQ3LCAKLSAgICAxNjUsIDEsIDI1MiwgMTkxLCAxNjUsIDEsIDI1MiwgMTgsIDE2NSwgMSwgMTg0LCAxNjUsIDEsIDE5MSwgMTY1LCAxLCAyMDUsIAotICAgIDE2NSwgMSwgMjIyLCAxNzksIDE2NSwgMSwgMjMzLCAxMzUsIDE2NSwgMSwgMjMyLCAxODQsIDE2NSwgMSwgMjE0LCAyNywgCi0gICAgMTY1LCAxLCAyMjAsIDEwMiwgMTY1LCAxLCAyMTgsIDIyMywgMTY1LCAxLCAyMDYsIDE2NSwgMSwgMTYyLCAxNjUsIDUsIAotICAgIDIyNywgMjA1LCAxNjUsIDUsIDI1MywgMTc1LCAxNjUsIDI1LCA1LCAyNTUsIDczLCAxNjUsIDI1LCA1LCA3MywgMTY1LCAyNSwgCi0gICAgNSwgMjM2LCAzMywgMTY1LCAyNSwgNSwgNzAsIDE2NSwgMjUsIDUsIDIxNCwgMTE4LCAxNjUsIDI1LCA1LCAxNDksIDE1MywgCi0gICAgMTY1LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTY1LCAyNSwgNSwgNzUsIDE2NSwgMjUsIDUsIDI0NSwgMjA5LCAxNjUsIDI1LCAKLSAgICA1LCAyNTQsIDIwMSwgMTY1LCAyNSwgNSwgNzYsIDE2NSwgMjUsIDUsIDIyNiwgMTgzLCAxNjUsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTY1LCA1LCAyMTMsIDE1MiwgMTY1LCAyMzMsIDIzLCA3OCwgMTY1LCAyNTQsIDIwMiwgMjMzLCAyMywgNzgsIDE2NSwgMSwgCi0gICAgMjQ0LCAxOTYsIDE2NSwgMSwgMTQ5LCAyMjIsIDE4MCwgMTY1LCAxLCAxNDksIDIzMiwgMTg1LCAxNjUsIDI1LCA1LCAxNDksIAotICAgIDE1NiwgMTY1LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTY1LCAyMSwgMjEwLCA4NiwgMTY1LCAyMSwgMTEwLCAxNjUsIDIxLCAKLSAgICAxMDUsIDE2NSwgMjEsIDE1OCwgMTY1LCAyMSwgMTYxLCAxNjUsIDIxLCAxODksIDE2NSwgMjEsIDE5NCwgMTY1LCAyMSwgCi0gICAgMTk4LCAxNjUsIDIxLCAxOTUsIDE2NSwgMjEsIDIwMCwgMTY1LCA1LCAyMzUsIDEwMiwgMTY1LCA1LCAyMTQsIDE2MSwgMTM2LCAKLSAgICA1LCAyNTQsIDc1LCAxMzYsIDUsIDIxMywgMTQ3LCAxMzYsIDEsIDYxLCAxMzYsIDEsIDI1NSwgNzMsIDEzNiwgMSwgNzMsIAotICAgIDEzNiwgMSwgMjM2LCAzMywgMTM2LCAxLCA3MCwgMTM2LCAxLCAyMTQsIDExOCwgMTM2LCAxLCAxNDksIDE1MywgMTM2LCAxLCAKLSAgICAxNDksIDE1NiwgMTM2LCAxLCA3NSwgMTM2LCAxLCAyNDUsIDIwOSwgMTM2LCAxLCAyNTQsIDIwMSwgMTM2LCAxLCA3NiwgCi0gICAgMTM2LCAxLCAyMjYsIDE4MywgMTM2LCAxLCAyNTMsIDE5MiwgMTM2LCAxLCAxNzYsIDEzNiwgMSwgMjM0LCAxMzIsIDEzNiwgCi0gICAgMSwgMjQzLCAxMzUsIDEzNiwgMSwgMjQyLCAyNDksIDEzNiwgMSwgMjI5LCA3NywgMTM2LCAxLCAyNTEsIDMzLCAxMzYsIDEsIAotICAgIDI1MCwgMTU3LCAxMzYsIDEsIDIzNSwgMTQxLCAxMzYsIDEsIDIzNSwgMTE0LCAxMzYsIDEsIDIyNywgMTY1LCAxMzYsIDEsIAotICAgIDIxNSwgMTU2LCAxMzYsIDEsIDIxNSwgMTQ0LCAxMzYsIDEsIDI0OCwgMTM1LCAxMzYsIDEsIDI0OCwgMTE5LCAxMzYsIDEsIAotICAgIDIyOCwgMTEwLCAxMzYsIDEsIDIxNywgMTA1LCAxMzYsIDEsIDIxNiwgMjA4LCAxMzYsIDEsIDI0OCwgMjIxLCAxMzYsIDEsIAotICAgIDI0OCwgMjUsIDEzNiwgMSwgMTk3LCAxMzYsIDEsIDIyOCwgOTIsIDEzNiwgMSwgMTkwLCAxMzYsIDEsIDIyNSwgMTQ3LCAKLSAgICAxMzYsIDEsIDI1MiwgMTkxLCAxMzYsIDEsIDI1MiwgMTgsIDEzNiwgMSwgMTg0LCAxMzYsIDEsIDE5MSwgMTM2LCAxLCAyMDUsIAotICAgIDEzNiwgMSwgMjIyLCAxNzksIDEzNiwgMSwgMjMzLCAxMzUsIDEzNiwgMSwgMjMyLCAxODQsIDEzNiwgMSwgMjMyLCAxNzUsIAotICAgIDEzNiwgMSwgMjE0LCAyNywgMTM2LCAxLCAyMjAsIDEwMiwgMTM2LCAxLCAyMTgsIDIyMywgMTM2LCAxLCAyMDYsIDEzNiwgMSwgCi0gICAgMTYyLCAxMzYsIDEsIDIxNSwgMTI1LCAxMzYsIDUsIDI1MywgMTc1LCAxMzYsIDI1LCA1LCAyNTUsIDczLCAxMzYsIDI1LCA1LCAKLSAgICA3MywgMTM2LCAyNSwgNSwgMjM2LCAzMywgMTM2LCAyNSwgNSwgNzAsIDEzNiwgMjUsIDUsIDIxNCwgMTE4LCAxMzYsIDI1LCAKLSAgICA1LCAxNDksIDE1MywgMTM2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTM2LCAyNSwgNSwgNzUsIDEzNiwgMjUsIDUsIDI0NSwgCi0gICAgMjA5LCAxMzYsIDI1LCA1LCAyNTQsIDIwMSwgMTM2LCAyNSwgNSwgNzYsIDEzNiwgMjUsIDUsIDIyNiwgMTgzLCAxMzYsIDI1LCAKLSAgICA1LCAyNTMsIDE5MiwgMTM2LCA1LCAyMTMsIDE1MiwgMTM2LCAxLCA1OSwgMjIzLCA3MywgMTM2LCAyNTMsIDE5MywgMjMzLCAKLSAgICAyMywgNzgsIDEzNiwgMSwgMTQ5LCAyMjIsIDE4MCwgMTM2LCAxLCAxNDksIDIzMiwgMTg1LCAxMzYsIDI1LCA1LCAxNDksIAotICAgIDE1NiwgMTM2LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTM2LCAyMSwgMjEwLCA4NiwgMTM2LCAyMSwgMTEwLCAxMzYsIDIxLCAKLSAgICAxMDUsIDEzNiwgMjEsIDE1OCwgMTM2LCAyMSwgMTYxLCAxMzYsIDIxLCAxODksIDEzNiwgMjEsIDE5NCwgMTM2LCAyMSwgCi0gICAgMTk4LCAxMzYsIDIxLCAxOTUsIDEzNiwgMjEsIDIwMCwgMTM2LCA1NCwgMjE2LCAyNDcsIDEzNiwgNTQsIDEyMywgMjQwLCAKLSAgICAyMTAsIDEzNiwgNTQsIDEyMywgMjE2LCAxNDcsIDEzNiwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDEzNiwgMjQ0LCAyLCAxMjMsIAotICAgIDI0MiwgMjcsIDEzNiwgMjQ0LCAyLCAxMzQsIDIyNCwgMTksIDEzNiwgMjQ4LCAxNTAsIDc4LCAxMzYsIDEsIDI1MCwgOTksIAotICAgIDIyOCwgMTExLCAxMzYsIDEsIDI1MCwgOTksIDIzMCwgMjUsIDEzNiwgMSwgMjUwLCA5OSwgMjIyLCAxODAsIDEzNiwgMSwgCi0gICAgMjUwLCA5OSwgMTU2LCAxMzYsIDEsIDI1MCwgOTksIDIzMiwgMTg1LCAxMzYsIDEsIDI1MCwgOTksIDIzNSwgMjMsIDE3NSwgCi0gICAgNSwgMjU0LCA3NCwgMTc1LCA1LCAyMTMsIDE0NiwgMTc1LCAxLCAyNTMsIDE2NSwgMTc1LCAxLCAyNTUsIDI3LCAxNzUsIDEsIAotICAgIDI1NCwgMjIzLCAxNzUsIDEsIDI1NCwgMjM4LCAxNzUsIDEsIDIzNSwgMTUxLCAxNzUsIDEsIDIzNiwgMzIsIDE3NSwgMSwgCi0gICAgMjE0LCAxMTAsIDE3NSwgMSwgMjE0LCAxMTIsIDE3NSwgMSwgMjM1LCAxNzMsIDE3NSwgMSwgMjM1LCAxNzQsIDE3NSwgMSwgCi0gICAgMjM2LCAxOCwgMTc1LCAxLCAyMzYsIDIwLCAxNzUsIDEsIDI0NSwgMTcsIDE3NSwgMSwgMjQ1LCAyMDQsIDE3NSwgMSwgMjU0LCAKLSAgICAxODgsIDE3NSwgMSwgMjI2LCAxMDgsIDE3NSwgMSwgMjI2LCAxNzcsIDE3NSwgMSwgMjUzLCAxNzgsIDE3NSwgMSwgMjU0LCAKLSAgICAxNDYsIDIzNCwgMTg3LCAxNzUsIDEsIDIzMSwgMjA5LCAyMzQsIDE4NywgMTc1LCAxLCAyNTQsIDE0NiwgMjQzLCA4MiwgCi0gICAgMTc1LCAxLCAyMzEsIDIwOSwgMjQzLCA4MiwgMTc1LCAxLCAyMzQsIDIyOSwgMjI5LCAyMjIsIDE3NSwgMSwgMjIxLCAyMzYsIAotICAgIDI0MywgODIsIDE3NSwgMSwgMjU0LCAxNDYsIDI1MCwgMjE2LCAxNzUsIDEsIDIzMSwgMjA5LCAyNTAsIDIxNiwgMTc1LCAxLCAKLSAgICAyNTQsIDE0NiwgMjM1LCAxMjcsIDE3NSwgMSwgMjMxLCAyMDksIDIzNSwgMTI3LCAxNzUsIDEsIDIxNywgOTgsIDIyOSwgCi0gICAgMjIyLCAxNzUsIDEsIDIxNywgOTgsIDIyMSwgMjM1LCAyMjksIDIyMywgMTc1LCAxLCAyMjEsIDIzNiwgMjM1LCAxMjcsIAotICAgIDE3NSwgMSwgMjU0LCAxNDYsIDIxNSwgMTUyLCAxNzUsIDEsIDIzMSwgMjA5LCAyMTUsIDE1MiwgMTc1LCAxLCAyNTQsIDE0NiwgCi0gICAgMjQ4LCAxMjYsIDE3NSwgMSwgMjMxLCAyMDksIDI0OCwgMTI2LCAxNzUsIDEsIDIzMCwgNTMsIDIyOSwgMTgwLCAxNzUsIDEsIAotICAgIDIyMSwgMjM2LCAyNDgsIDEyNiwgMTc1LCAxLCAyNTQsIDE0NiwgMjE3LCAzMCwgMTc1LCAxLCAyMzEsIDIwOSwgMjE3LCAzMCwgCi0gICAgMTc1LCAxLCAyNTQsIDE0NiwgMjQ4LCAxNDQsIDE3NSwgMSwgMjMxLCAyMDksIDI0OCwgMTQ0LCAxNzUsIDEsIDI0OCwgMTc0LCAKLSAgICAyMjksIDE4MCwgMTc1LCAxLCAyMjEsIDIzNiwgMjQ4LCAxNDQsIDE3NSwgMSwgMjU0LCAxNDYsIDIyNSwgMjI4LCAxNzUsIDEsIAotICAgIDIzMSwgMjA5LCAyMjUsIDIyOCwgMTc1LCAxLCAyNTQsIDE0NiwgMjUyLCAxMTIsIDE3NSwgMSwgMjMxLCAyMDksIDI1MiwgCi0gICAgMTEyLCAxNzUsIDEsIDIzMSwgMTMxLCAxNzUsIDEsIDI1NCwgMTMxLCAyNTIsIDExMiwgMTc1LCAxLCAyMTEsIDUxLCAxNzUsIAotICAgIDEsIDIyMywgMTMzLCAxNzUsIDEsIDI0OCwgMTc0LCAyMzMsIDY3LCAxNzUsIDEsIDIxNCwgMSwgMTc1LCAxLCAyMTcsIDk4LCAKLSAgICAyMjEsIDIxMCwgMTc1LCAxLCAyMzAsIDUzLCAyMjEsIDIxMCwgMTc1LCAxLCAyNDgsIDE3NCwgMjIxLCAyMTAsIDE3NSwgMSwgCi0gICAgMjQxLCAyNDIsIDE3NSwgMSwgMjMwLCA1MywgMjMzLCA2NywgMTc1LCAxLCAyNDQsIDE1NiwgMTc1LCA1LCAyNTQsIDE3NywgCi0gICAgMTc1LCAyNSwgNSwgMjU0LCAyMzMsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyNTQsIDI0MCwgMTc1LCAyNSwgNSwgMjQ3LCAKLSAgICAyMjgsIDI1NCwgMjQwLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjM1LCAxNzAsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMzUsIAotICAgIDE3MCwgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDIyNiwgODgsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMjYsIDg4LCAxNzUsIAotICAgIDI1LCA1LCAyNDMsIDEyNCwgMTc1LCAyNSwgNSwgMjM0LCAxNSwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDIzNCwgMTUsIDE3NSwgCi0gICAgMjUsIDUsIDIzNCwgMTcsIDI0OCwgNjcsIDE3NSwgMjUsIDUsIDIzNCwgMTYsIDI0MiwgNDcsIDI1NCwgMjMzLCAxNzUsIDI1LCAKLSAgICA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAyNDcsIDIyOCwgMjU0LCAyMzMsIDE3NSwgMjUsIDUsIDIzNCwgMTYsIDI0MiwgNDcsIAotICAgIDI0MywgODEsIDE3NSwgMjUsIDUsIDI0MywgODEsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyNDMsIDEyNCwgMTc1LCAyNSwgNSwgCi0gICAgMjQ3LCAyMjgsIDI0MywgODEsIDE3NSwgMjI0LCAxNDEsIDIzMywgMjA3LCAxNjgsIDEzNSwgMjM0LCAyOSwgMjM0LCAyNDYsIAotICAgIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjM0LCAxMjgsIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjM0LCA5OSwgMTY4LCAxMzUsIDIzNCwgCi0gICAgMTA2LCAyMzQsIDk1LCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgMTAzLCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIyMywgMTU0LCAKLSAgICAxNjgsIDEzNSwgMjI5LCA1LCAyMjgsIDI0OCwgMTY4LCAxMzUsIDI1MCwgODcsIDI1MCwgMTQ3LCAxNjgsIDEzNSwgMjUwLCAKLSAgICA4NywgMjUwLCA5NSwgMTY4LCAxMzUsIDI1MCwgODcsIDI1MCwgMTQ2LCAxNjgsIDEzNSwgMjE5LCA1OSwgMjE5LCA1OCwgCi0gICAgMTY4LCAxMzUsIDI1MCwgODcsIDI1MCwgODMsIDE2OCwgMTM1LCAyMTAsIDI0NSwgMjEwLCAyNTIsIDE2OCwgMTM1LCAyNDcsIAotICAgIDE0NiwgMjUwLCAxNTQsIDE2OCwgMTM1LCAyMTYsIDQyLCAyMjUsIDIzOCwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMTYsIDIwMCwgCi0gICAgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMjksIDIwMSwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMjUsIDExMSwgMTY4LCAxMzUsIAotICAgIDIyOCwgNzUsIDIyOSwgOTgsIDE2OCwgMTM1LCAyNDcsIDE0NiwgMjQ4LCA2OCwgMTY4LCAxMzUsIDIxNiwgNDIsIDIxNywgCi0gICAgNTUsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAxMzEsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAyMDQsIDE2OCwgMTM1LCAKLSAgICAyMTYsIDE1NywgMjE2LCAxNTQsIDE2OCwgMTM1LCAyMjgsIDc1LCAyMjcsIDIzNywgMTY4LCAxMzUsIDI1MSwgMjA2LCAyNTIsIAotICAgIDE2NCwgMTY4LCAxMzUsIDIyNSwgMTcsIDIyNSwgNDIsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjI1LCAxMTMsIDE2OCwgMTM1LCAKLSAgICAyNDQsIDQ0LCAyNDQsIDE5NiwgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjUsIDE0MSwgMTY4LCAxMzUsIDI0NCwgNDQsIDI0NCwgCi0gICAgMTczLCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyMSwgMjQ3LCAxNjgsIDEzNSwgMjMwLCAxNjIsIDE4NCwgMTY4LCAxMzUsIAotICAgIDIxMCwgMjQ1LCAyMTEsIDc5LCAxNjgsIDEzNSwgMjIyLCAyMTIsIDIyMiwgMTM5LCAxNjgsIDEzNSwgMjIyLCAxNDAsIDE2OCwgCi0gICAgMTM1LCAyMzIsIDE1NywgMjMyLCAyMDYsIDE2OCwgMTM1LCAyMzIsIDk4LCAxNjgsIDEzNSwgMjExLCAyMjgsIDIxMiwgNjEsIAotICAgIDE2OCwgMTM1LCAyMTksIDU5LCAyMjIsIDYsIDE2OCwgMTM1LCAyMTksIDU5LCAyMjIsIDExNCwgMTY4LCAxMzUsIDIxOSwgCi0gICAgNTksIDIxOCwgODIsIDE2OCwgMTM1LCAyNDEsIDY5LCAyNDEsIDE1OSwgMTY4LCAxMzUsIDIzMiwgMTU3LCAyNTAsIDY4LCAKLSAgICAxNjgsIDEzNSwgMTQ0LCAyNTQsIDExNSwgMTY4LCAxMzUsIDI0MSwgNjksIDIyOCwgNzAsIDE2OCwgMTM1LCAyMjYsIDY4LCAKLSAgICAxNjgsIDEzNSwgMjIxLCAyMzAsIDYxLCAxNjgsIDEzNSwgMjMxLCAyMDQsIDI0MiwgMTcsIDE2OCwgMTM1LCAyMjEsIDIzMCwgCi0gICAgMjU1LCA3MywgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDEzNiwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3MywgMTY4LCAxMzUsIAotICAgIDIyMSwgMjMwLCAyMzYsIDMzLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDIxNCwgMjE0LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDIxNCwgCi0gICAgMjEyLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDcwLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDIxNCwgMTE4LCAxNjgsIDEzNSwgMjI1LCAKLSAgICAxMjQsIDE2OCwgMjQ5LCA5OCwgMTYsIDI1MiwgMTY1LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDc1LCAxNjgsIDEzNSwgMjIxLCAKLSAgICAyMzAsIDI1NCwgMjQzLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDc2LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDI1NCwgMjAyLCAyMzEsIAotICAgIDE5OCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDIwMiwgMjMxLCAxOTksIDE2OCwgMTM1LCAyMzMsIDEwNiwgMTY4LCAKLSAgICAxMzUsIDIzMSwgMTk1LCAxNjgsIDEzNSwgMjMxLCAxOTYsIDE2OCwgMTM1LCAyMzEsIDIwNCwgMjQ1LCAxODAsIDE2OCwgCi0gICAgMTM1LCAyMzEsIDIwNCwgMjE2LCAxNTYsIDE2OCwgMTM1LCAyMzEsIDIwNCwgMjE1LCAyMjgsIDE2OCwgMTM1LCAyMzEsIAotICAgIDIwNCwgMjUwLCAxMzUsIDE2OCwgMTM1LCAyMTYsIDE5OCwgMTY4LCAxMzUsIDIyOCwgMjA1LCAxNjgsIDEzNSwgMjExLCA3MywgCi0gICAgMTY4LCAxMzUsIDI0NCwgMzUsIDE2OCwgMjEsIDIxMCwgODYsIDE2OCwgMjEsIDExMCwgMTY4LCAyMSwgMTA1LCAxNjgsIDIxLCAKLSAgICAxNTgsIDE2OCwgMjEsIDE2MSwgMTY4LCAyMSwgMTg5LCAxNjgsIDIxLCAxOTQsIDE2OCwgMjEsIDE5OCwgMTY4LCAyMSwgCi0gICAgMTk1LCAxNjgsIDIxLCAyMDAsIDE2OCwgMTM1LCAyNTQsIDExMSwgMTY4LCAxMzUsIDIzNCwgMTA0LCAyMDksIDIwOSwgMSwgCi0gICAgMjM0LCAyOCwgMjA5LCAyMDksIDEsIDIzNCwgMTA2LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjM0LCAxMDYsIDIxNywgNjIsIAotICAgIDIwOSwgMjA5LCAxLCAyMjksIDQsIDIwOSwgMjA5LCAxLCAyNDksIDIzOCwgMjA5LCAyMDksIDEsIDIxOSwgNTksIDIxNywgCi0gICAgNjIsIDIwOSwgMjA5LCAxLCAyMjcsIDEzNCwgMjA5LCAyMDksIDEsIDI0NywgMTQ1LCAyMDksIDIwOSwgMSwgMTExLCAyMDksIAotICAgIDIwOSwgMSwgMjE2LCAxNTcsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyMTYsIDE1NywgMjE3LCA2MiwgMjA5LCAyMDksIDEsIAotICAgIDIyOCwgNzQsIDIwOSwgMjA5LCAxLCAyNTEsIDIwNSwgMjA5LCAyMDksIDEsIDIyNSwgMTYsIDIwOSwgMjA5LCAxLCAyMjUsIAotICAgIDEyMiwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDIxNywgNjIsIDIwOSwgMjA5LCAxLCAyMjUsIDEyMiwgMjE3LCAKLSAgICA2MiwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyMzAsIDE2MSwgMjA5LCAyMDksIDEsIAotICAgIDIxMCwgMjQ0LCAyMDksIDIwOSwgMSwgMjMyLCAxNTcsIDIzMiwgMjA2LCAyMDksIDIwOSwgMSwgMjMyLCAxNTcsIDIzMiwgCi0gICAgMTIxLCAyMDksIDIwOSwgMSwgMjExLCAyMjcsIDIwOSwgMjA5LCAxLCAyMTksIDU5LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgCi0gICAgMjQxLCA2OSwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDc2LCAyMDksIDIwOSwgMSwgMjQxLCA2OSwgMjE3LCA2MiwgMjA5LCAKLSAgICAyMDksIDI0NSwgMTYzLCAyMDksIDIwOSwgMjUsIDUsIDYxLCAyMDksIDIwOSwgMjUsIDUsIDIzMSwgMjA0LCAyMzQsIDIzNCwgCi0gICAgMjA5LCAyMDksIDI1LCA1LCAyNTUsIDczLCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMTM2LCAyMDksIDIwOSwgMjUsIDUsIDczLCAKLSAgICAyMDksIDIwOSwgMjUsIDUsIDIzNiwgMzMsIDIwOSwgMjA5LCAyNSwgNSwgMjExLCAxMTcsIDIwOSwgMjA5LCAyNSwgNSwgCi0gICAgMjEwLCAxNjksIDIwOSwgMjA5LCAyNSwgNSwgNzAsIDIwOSwgMjA5LCAyNSwgNSwgMjE0LCAxMTgsIDIwOSwgMjA5LCAyNSwgCi0gICAgNSwgMjMxLCAyMDQsIDIzNCwgMTMsIDIwOSwgMjA5LCAyMjAsIDE0NSwgNSwgMjMyLCAxNTYsIDIwOSwgMjA5LCAyMjAsIAotICAgIDE0NSwgNSwgMjI3LCAxMzQsIDIwOSwgMjA5LCAyNSwgNSwgNzUsIDIwOSwgMjA5LCAyNSwgNSwgMjQ1LCAxOTUsIDIwOSwgCi0gICAgMjA5LCAyNSwgNSwgNzYsIDIwOSwgMjA5LCAyNSwgNSwgMjUzLCAxNjcsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAyMDEsIAotICAgIDIwOSwgMjA5LCAyMzQsIDI5LCAyMzMsIDEzNSwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDQsIDI0NSwgMTgwLCAyMDksIDIwOSwgCi0gICAgMTM4LCAyMzEsIDIwNCwgMjE2LCAxNTYsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA0LCAyMTYsIDExNywgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDQsIDI1MCwgMjIzLCAyMDksIDIwOSwgMjUxLCA0LCA3OCwgMjA5LCAyMDksIDIyOCwgMjE0LCAyMDksIAotICAgIDIwOSwgMjEsIDIxMCwgODYsIDIwOSwgMjA5LCAyMSwgMTEwLCAyMDksIDIwOSwgMjEsIDEwNSwgMjA5LCAyMDksIDIxLCAKLSAgICAxNTgsIDIwOSwgMjA5LCAyMSwgMTYxLCAyMDksIDIwOSwgMjEsIDE4OSwgMjA5LCAyMDksIDIxLCAxOTQsIDIwOSwgMjA5LCAKLSAgICAyMSwgMTk4LCAyMDksIDIwOSwgMjEsIDE5NSwgMjA5LCAyMDksIDIxLCAyMDAsIDIwOSwgMjA5LCAyNDEsIDY5LCAyMjgsIAotICAgIDc0LCAyMDksIDIwOSwgMjQxLCA2OSwgMjMwLCAxNjEsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNywgMjQyLCAxNzQsIDIwOSwgCi0gICAgMjA5LCAxLCAyMzQsIDEwNywgMjI3LCAxMzQsIDYzLCAzLCAyMjYsIDIwNCwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgCi0gICAgMjMwLCAyNDgsIDIxNSwgMTg5LCA2MSwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgMjMwLCAyNDgsIDI1NSwgMTU5LCAKLSAgICAyMjIsIDIxNiwgMjUyLCA3NywgMTg0LCA2MywgMTY0LCAyNDIsIDExNSwgMjExLCAwLCAyMzAsIDI0OCwgMjU1LCAxNTksIAotICAgIDI0MiwgMTE1LCAyMTUsIDE3MywgMTg0LCA2MywgMTY0LCA2NSwgMjExLCAwLCAyMzAsIDI0OCwgMjMxLCA5MywgMTg0LCA2MywgCi0gICAgMTY0LCAyNDksIDI1MiwgMjExLCAwLCAyMzAsIDI0OCwgMjIwLCAxMDksIDE4NCwgNjMsIDE2NCwgMjUwLCAyMzksIDIxMSwgCi0gICAgMCwgMjMwLCAyNDgsIDIyNSwgMTEyLCAyMjAsIDk2LCAxODQsIDYzLCAxNjQsIDIxMSwgMCwgMjMwLCAyNDgsIDIxNSwgMTczLCAKLSAgICAyMjAsIDk2LCAxODQsIDYzLCAxNjQsIDIyMSwgMjA4LCAyMjAsIDk1LCA2MywgMTY0LCAyNTEsIDEyOCwgMjExLCAwLCAyMzAsIAotICAgIDI0NywgNjMsIDE2NCwgMjUxLCAyMjMsIDIyMCwgMywgMjExLCAwLCAyMzAsIDI0NywgNjMsIDE2NCwgMjM1LCAxOTcsIDIxNSwgCi0gICAgMTcyLCA2MywgMTY0LCAyNDgsIDYxLCAyMTUsIDE3MywgMjUxLCAxMjcsIDYzLCAxNjQsIDIyMCwgOTUsIDYzLCAxNjQsIAotICAgIDIyNywgMTM5LCAyMjAsIDk1LCA2MywgMTY0LCAyMTUsIDE3MywgMjIwLCA5NSwgNjMsIDE2NCwgMjI3LCAxMzksIDIxNSwgCi0gICAgMTczLCAyMjAsIDk1LCA2MywgMTY0LCAyMjIsIDIzNiwgMjUwLCAxMjIsIDIxOCwgMjM2LCAyMjAsIDk1LCA2MywgMTY0LCAKLSAgICAyMjMsIDQyLCAyNDIsIDE0NiwgMjIwLCA5NSwgNjMsIDE2NCwgMjUwLCAyMzksIDI1NSwgMTYzLCAyMjIsIDE0NCwgMjMxLCAKLSAgICA5MiwgMTk5LCAyNTEsIDcsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTUsIDE3MiwgNjMsIDIzMiwgMTQ0LCA1LCAyNTAsIDE1NSwgCi0gICAgMjIyLCAxNDMsIDYzLCAyMzIsIDE0NCwgNSwgMjMyLCAyNTIsIDIyMiwgMTQzLCA2MywgMjUzLCAyMTIsIDUsIDIyMCwgMTA1LCAKLSAgICAyNDMsIDY1LCAyNTUsIDE2NCwgMjIyLCAxNDMsIDYzLCAyNTMsIDIxMiwgNSwgMjU1LCAxNjEsIDE5MCwgNjMsIDI1MywgCi0gICAgMjEyLCA1LCAyMjEsIDE4MiwgMjE1LCAxNjgsIDYzLCA1LCAyMjMsIDEzMCwgMjQ3LCAxNTksIDI0MywgNjQsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjQ3LCAxNTksIDI0MiwgMTc2LCA2MywgNSwgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDIsIDExNiwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyMjksIDIxOSwgMjQzLCA2NCwgNjMsIDUsIDIyMywgMTMwLCAyMjksIDIxOSwgMjQyLCAxNzYsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjQ3LCAxNTksIDIyMywgMTMwLCAyMjksIDIxOCwgNjMsIDIxLCAyMTAsIDg2LCA2MywgMjEsIDExMCwgNjMsIAotICAgIDIxLCAxMDUsIDYzLCAyMSwgMTU4LCA2MywgMjEsIDE2MSwgNjMsIDIxLCAxODksIDYzLCAyMSwgMTk0LCA2MywgMjEsIDE5OCwgCi0gICAgNjMsIDIxLCAxOTUsIDYzLCAyMSwgMjAwLCA2MywgMjEsIDE2MywgMTEwLCA2MywgMjEsIDE2MywgMTA1LCA2MywgMjEsIAotICAgIDE2MywgMTU4LCA2MywgMjEsIDE2MywgMTYxLCA2MywgMjEsIDE2MywgMTg5LCA2MywgMjEsIDE2MywgMTk0LCA2MywgMjEsIAotICAgIDE2MywgMTk4LCA2MywgMjEsIDE2MywgMTk1LCA2MywgMjEsIDE2MywgMjAwLCA2MywgMjEsIDE2MywgMjEwLCA4NiwgNjMsIAotICAgIDE2NCwgMjUxLCAxMzAsIDIyMiwgMTQzLCA2MywgMTY0LCAyMjksIDY4LCAyNTEsIDY4LCAyMjcsIDE0OSwgMjEwLCAyNSwgCi0gICAgNjMsIDE2NCwgMjUwLCAyMzksIDI1NSwgMTYzLCAyMjIsIDE0NCwgMjUxLCA2OSwgMjMwLCAyMDIsIDI1MSwgNywgNjMsIAotICAgIDE2NCwgMjI5LCA2OCwgMjUxLCA2OCwgMjIwLCAxMDYsIDIyMiwgMTQzLCA2MywgMTY0LCAyNTAsIDEzMiwgMjMwLCAyNDcsIAotICAgIDYzLCAxNjQsIDIxNSwgMTg0LCAyNTUsIDE2MCwgNjMsIDE2NCwgMjQyLCAxMDAsIDIyMiwgMTQ0LCAyNDIsIDYzLCA2MywgCi0gICAgMTY0LCAyNDIsIDEwMCwgMjIyLCAxNDQsIDI0MiwgNjksIDYzLCAxNjQsIDI1NCwgMTE2LCAyMzQsIDEyMywgMjQyLCA2MywgCi0gICAgNjMsIDE2NCwgMjU0LCAxMTYsIDIzNCwgMTIzLCAyNDIsIDY5LCA2MywgNSwgMjExLCA2NSwgMjE1LCAxNzEsIDYzLCA1LCAKLSAgICAyMzEsIDE2NywgMjE1LCAxNzEsIDYzLCAxLCAxNzYsIDYzLCAxLCAyMzQsIDEzMiwgNjMsIDEsIDI0MywgMTM1LCA2MywgMSwgCi0gICAgMjQyLCAyNDksIDYzLCAxLCAyMjksIDc3LCA2MywgMSwgMjUxLCAzMywgNjMsIDEsIDI1MCwgMTU3LCA2MywgMSwgMjM1LCAKLSAgICAxNDEsIDYzLCAxLCAyMjcsIDE2NSwgNjMsIDEsIDIxNSwgMTU2LCA2MywgMSwgMjE1LCAxNDQsIDYzLCAxLCAyNDgsIDEzNSwgCi0gICAgNjMsIDEsIDI0OCwgMTE5LCA2MywgMSwgMjI4LCAxMTAsIDYzLCAxLCAyMTcsIDEwNSwgNjMsIDEsIDIxNiwgMjA4LCA2MywgCi0gICAgMSwgMjQ4LCAyMjEsIDYzLCAxLCAyNDgsIDI1LCA2MywgMSwgMTk3LCA2MywgMSwgMTkwLCA2MywgMSwgMjI1LCAxNDcsIDYzLCAKLSAgICAxLCAyNTIsIDE5MSwgNjMsIDEsIDI1MiwgMTgsIDYzLCAxLCAxODQsIDYzLCAxLCAyMTUsIDE4MywgNjMsIDEsIDIxNSwgCi0gICAgMTc1LCA2MywgMSwgMjQ2LCAzOCwgNjMsIDEsIDI0NiwgMzMsIDYzLCAxLCAyMTIsIDY1LCA2MywgMSwgMjEwLCA4MiwgNjMsIAotICAgIDEsIDIxMCwgMTE2LCA2MywgMSwgMjU1LCAxNjYsIDYzLCAxLCAxOTEsIDYzLCAxLCAyMDUsIDYzLCAxLCAyMzMsIDEzNSwgCi0gICAgNjMsIDEsIDIyMCwgMTAyLCA2MywgMSwgMjE4LCAyMjMsIDYzLCAxLCAyMDYsIDYzLCAxLCAxNjIsIDYzLCAxLCA2MSwgNjMsIAotICAgIDEsIDIzMywgMjMxLCA2MywgMSwgMjQ0LCA3NywgMjA1LCA2MywgMSwgMjM0LCA0NiwgNjMsIDEsIDIyMiwgMTc5LCA2MywgCi0gICAgMjUsIDUsIDI1NSwgNzMsIDYzLCAyNSwgNSwgNzMsIDYzLCAyNSwgNSwgMjM2LCAzMywgNjMsIDI1LCA1LCA3MCwgNjMsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgNjMsIDI1LCA1LCAxNDksIDE1MywgNjMsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCA2MywgMjUsIDUsIAotICAgIDE0OSwgMTU2LCA2MywgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDYzLCAyNSwgNSwgNzUsIDYzLCAyNSwgNSwgMjQ1LCAyMDksIAotICAgIDYzLCAyNSwgNSwgNzYsIDYzLCAyNSwgNSwgMjI2LCAxODMsIDYzLCA1LCAyMjIsIDIyMSwgMjE4LCA4NCwgMjI5LCA3OCwgCi0gICAgMjIyLCAyMTEsIDYzLCA1LCAyMjIsIDIxNiwgMjUyLCA3NiwgNjMsIDI1LCA1LCAyMjMsIDQ5LCA3MywgNjMsIDI1LCA1LCAKLSAgICAyMjMsIDQ5LCAyMzYsIDMzLCA2MywgNSwgMjI3LCAxNDksIDIxMCwgMjYsIDIyOSwgMjI2LCAyNDgsIDIyMSwgNjMsIDUsIAotICAgIDIxOSwgNzEsIDIzMywgNjAsIDYzLCAxNjQsIDI0MiwgMjksIDYzLCAxNjQsIDIyNiwgNTcsIDYzLCA1LCAyMzMsIDYzLCAKLSAgICAyMjIsIDE0MywgNjMsIDUsIDIxMSwgNzAsIDIyMiwgMTQzLCA2MywgNSwgMjMzLCA2NCwgMjE1LCAxODQsIDI1MSwgNywgNjMsIAotICAgIDUsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDUsIDI0MiwgMTE5LCAyNTEsIDgsIDIyMywgNDAsIDYzLCA1LCAyNDIsIDExOSwgCi0gICAgMjMxLCA4NSwgMjIzLCA0MCwgNjMsIDUsIDIzNSwgMTkzLCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCA1LCAyMzMsIAotICAgIDY0LCAyMTUsIDE4NCwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgCi0gICAgMjM1LCAxOTMsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDEsIDE3NiwgNjMsIDIxOCwgNzMsIDEsIDIzNCwgMTMyLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjQzLCAxMzUsIDYzLCAyMTgsIDczLCAxLCAyNDIsIDI0OSwgNjMsIDIxOCwgNzMsIDEsIDIyOSwgCi0gICAgNzcsIDYzLCAyMTgsIDczLCAxLCAyNTEsIDMzLCA2MywgMjE4LCA3MywgMSwgMjUwLCAxNTcsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMzUsIDE0MSwgNjMsIDIxOCwgNzMsIDEsIDIyNywgMTY1LCA2MywgMjE4LCA3MywgMSwgMjE1LCAxNTYsIDYzLCAyMTgsIAotICAgIDczLCAxLCAyMTUsIDE0NCwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMTM1LCA2MywgMjE4LCA3MywgMSwgMjQ4LCAxMTksIDYzLCAKLSAgICAyMTgsIDczLCAxLCAyMjgsIDExMCwgNjMsIDIxOCwgNzMsIDEsIDIxNywgMTA1LCA2MywgMjE4LCA3MywgMSwgMjE2LCAyMDgsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyNDgsIDIyMSwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMjUsIDYzLCAyMTgsIDczLCAxLCAxOTcsIAotICAgIDYzLCAyMTgsIDczLCAxLCAxOTAsIDYzLCAyMTgsIDczLCAxLCAyMjUsIDE0NywgNjMsIDIxOCwgNzMsIDEsIDI1MiwgMTkxLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjUyLCAxOCwgNjMsIDIxOCwgNzMsIDEsIDE4NCwgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTgzLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjE1LCAxNzUsIDYzLCAyMTgsIDczLCAxLCAyNDYsIDM4LCA2MywgMjE4LCA3MywgMSwgMjQ2LCAKLSAgICAzMywgNjMsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDYzLCAyMTgsIDczLCAxLCAyMTAsIDgyLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjEwLCAxMTYsIDYzLCAyMTgsIDczLCAxLCAyNTUsIDE2NiwgNjMsIDIxOCwgNzMsIDEsIDE5MSwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIwNSwgNjMsIDIxOCwgNzMsIDEsIDIzMywgMTM1LCA2MywgMjE4LCA3MywgMSwgMjIwLCAxMDIsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMTgsIDIyMywgNjMsIDIxOCwgNzMsIDEsIDIwNiwgNjMsIDIxOCwgNzMsIDEsIDE2MiwgNjMsIDIxOCwgNzMsIDEsIDYxLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjMzLCAyMzEsIDYzLCAyMTgsIDczLCAxLCAyNDQsIDc3LCAyMTIsIDY1LCA2MywgMjE4LCA3MywgCi0gICAgMSwgMjQ0LCA3NywgMTkxLCA2MywgMjE4LCA3MywgMSwgMjQ0LCA3NywgMjA1LCA2MywgMjMzLCAyMTgsIDIyMiwgMTQxLCAKLSAgICAyMzQsIDEzMiwgNjMsIDIzMywgMjE4LCAyMjIsIDE0MSwgMjM0LCAxMzMsIDI1MSwgNjksIDIzMCwgMjAyLCAyNTEsIDcsIAotICAgIDYzLCAyNTAsIDI1MiwgNSwgMTE0LCAyNTIsIDcwLCA2MywgMjUwLCAyNTIsIDUsIDE5MiwgMjUyLCA3MCwgNjMsIDI1MCwgCi0gICAgMjUyLCA1LCAyNTAsIDI1MywgMjE3LCAyMCwgNjMsIDI1MCwgMjUyLCA1LCAyMjEsIDIwNywgMjU1LCAxNjUsIDYzLCAxNiwgCi0gICAgMjQ2LCA5MSwgMjUxLCAxMjUsIDYzLCAxNiwgMjIzLCAxMjksIDIyMiwgMjIyLCA2MywgMTYsIDIyNiwgNzcsIDI0MywgNjMsIAotICAgIDYzLCAxNiwgMjIzLCAxMjksIDIyMiwgMjIzLCAyMjMsIDQyLCAyNDIsIDE0NSwgNjMsIDE2LCAyMjUsIDExMiwgMTkwLCA2MywgCi0gICAgMTYsIDIyOCwgNTksIDI1MSwgMTI1LCA2MywgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAyMjcsIDEzOSwgMjU1LCAxNjIsIDYzLCAKLSAgICAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIDI0MiwgMTE3LCAyNTUsIDE2MiwgNjMsIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgCi0gICAgMjUxLCA2OSwgMjU1LCAxNjIsIDYzLCA1LCAyMjMsIDEzMCwgMjI5LCAyMTksIDIyMywgMTMwLCAyNDcsIDE1OCwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyMjksIDIxOSwgMjQyLCAxMTYsIDYzLCAxNjQsIDI1MSwgMTI5LCAyMjAsIDMsIDI0MiwgMjE1LCAyMzAsIAotICAgIDI0OCwgMjIzLCA0MSwgNjMsIDE2NCwgMjMwLCAxNjMsIDIxMSwgMCwgMjQyLCAyMTUsIDIzMCwgMjQ4LCAyMjMsIDQxLCA2MywgCi0gICAgMTY0LCAyMjcsIDEzOSwgMjE1LCAxNzIsIDYzLCAxNjQsIDY1LCAyNTEsIDE1MiwgMjIyLCAyMTMsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDgsIDIzMSwgOTMsIDE4NCwgNjMsIDE2NCwgMjQ5LCAyNTIsIDI1MSwgMTUyLCAyMjIsIDIxMywgMjExLCAwLCAyMzAsIAotICAgIDI0OCwgMjIwLCAxMDksIDE4NCwgMjIyLCAyNTAsIDIxNywgMjU1LCA1MCwgMjMzLCA0NSwgMjE3LCAyNTUsIDUwLCAyMjIsIAotICAgIDI1MCwgMjE3LCAyNTUsIDUsIDIsIDI0NywgMTE4LCAyMzMsIDQ1LCAyMTcsIDI1NSwgNSwgMiwgMjQ3LCAxMTgsIDYzLCAKLSAgICAxNjQsIDIzMywgNTUsIDIzMSwgOTYsIDIyMiwgMTQzLCA2MywgMTY0LCAyMTUsIDI1MCwgMjMxLCA5NiwgMjIyLCAxNDMsIAotICAgIDY4LCAxLCAxNzYsIDY4LCAxLCAyMzQsIDEzMiwgNjgsIDEsIDI0MywgMTM1LCA2OCwgMSwgMjQyLCAyNDksIDY4LCAxLCAKLSAgICAyMjksIDc3LCA2OCwgMSwgMjUxLCAzMywgNjgsIDEsIDI1MCwgMTU3LCA2OCwgMSwgMjM1LCAxNDEsIDY4LCAxLCAyMzUsIAotICAgIDExNCwgNjgsIDEsIDIyNywgMTY1LCA2OCwgMSwgMjI4LCA3NiwgNjgsIDEsIDIxNSwgMTU2LCA2OCwgMSwgMjE1LCAxNDQsIAotICAgIDY4LCAxLCAyNDgsIDEzNSwgNjgsIDEsIDI0OCwgMTE5LCA2OCwgMSwgMjI4LCAxMTAsIDY4LCAxLCAyMTcsIDEwNSwgNjgsIAotICAgIDEsIDIxNiwgMjA4LCA2OCwgMSwgMjQ4LCAyMjEsIDY4LCAxLCAyNDgsIDI1LCA2OCwgMSwgMTk3LCA2OCwgMSwgMTkwLCA2OCwgCi0gICAgMSwgMjI1LCAxNDcsIDY4LCAxLCAyNTIsIDE5MSwgNjgsIDEsIDI1MiwgMTgsIDY4LCAxLCAxODQsIDY4LCAxLCAxOTEsIDY4LCAKLSAgICAxLCAyMDUsIDY4LCAxLCAyMzMsIDEzNSwgNjgsIDEsIDIxMiwgNjUsIDY4LCAxLCAyMDYsIDY4LCAxLCAxNjIsIDY4LCAxLCAKLSAgICAyMzIsIDE4NCwgNjgsIDEsIDYxLCA2OCwgMSwgMjIwLCA4NiwgNjEsIDY4LCAxLCA3MywgNjgsIDEsIDIzNiwgMzMsIDY4LCAKLSAgICAxLCA3MCwgNjgsIDEsIDIxNCwgMTE4LCA2OCwgMSwgNzUsIDY4LCAxLCAyMzAsIDE1MSwgNzUsIDY4LCAxLCA3NiwgNjgsIDEsIAotICAgIDI1MywgMTkyLCA2OCwgMjUsIDUsIDIxNywgNjQsIDI1NSwgNzMsIDY4LCAyNSwgNSwgMjU1LCA3MywgNjgsIDI1LCA1LCA3MywgCi0gICAgNjgsIDI1LCA1LCAyMzYsIDMzLCA2OCwgMjUsIDUsIDcwLCA2OCwgMjUsIDUsIDIxNCwgMTE4LCA2OCwgMjUsIDUsIDc1LCAKLSAgICA2OCwgMjUsIDUsIDI1NCwgMjAxLCA2OCwgMjUsIDUsIDIzMCwgMTUxLCAyMzYsIDMzLCA2OCwgMjUsIDUsIDIzMCwgMTUxLCAKLSAgICA3NiwgNjgsIDI1LCA1LCAxNjAsIDQ4LCA2OCwgNSwgMjU0LCA3NSwgNjgsIDUsIDU5LCA1MSwgNjgsIDUsIDIxMywgMTQ3LCAKLSAgICA2OCwgNSwgMjEzLCAxNTIsIDY4LCA1LCAyNTMsIDIzNSwgNjgsIDExNiwgNSwgMTQ3LCAxOTEsIDY4LCAxMTYsIDUsIDE0NywgCi0gICAgMjA1LCA2OCwgMTE2LCA1LCAxNDcsIDIxMiwgNjUsIDY4LCAxMTYsIDUsIDE0NywgMTYyLCA2OCwgMSwgMjQyLCAxMzIsIAotICAgIDIwNiwgNjgsIDIxLCAyMTAsIDg2LCA2OCwgMjEsIDExMCwgNjgsIDIxLCAxMDUsIDY4LCAyMSwgMTU4LCA2OCwgMjEsIDE2MSwgCi0gICAgNjgsIDIxLCAxODksIDY4LCAyMSwgMTk0LCA2OCwgMjEsIDE5OCwgNjgsIDIxLCAxOTUsIDY4LCAyMSwgMjAwLCA2OCwgNSwgCi0gICAgMjMyLCAxOTIsIDIyMSwgMTcyLCA2OCwgNSwgMjIxLCAxNzIsIDY4LCAxNiwgMjMyLCAxNTMsIDY4LCAxNiwgMjQ5LCAyMTMsIAotICAgIDY4LCAxNiwgMjU0LCAyMjAsIDY4LCAxNiwgMjQzLCA0OCwgNjgsIDEsIDIyMCwgMTAyLCA2OCwgMSwgMjE4LCAyMjMsIDY4LCAKLSAgICAxLCAxNDksIDE1MywgNjgsIDEsIDE0OSwgMjIyLCAxODAsIDY4LCAxLCAxNDksIDE1NiwgNjgsIDEsIDE0OSwgMjMyLCAxODUsIAotICAgIDY4LCAyNSwgNSwgMTQ5LCAxNTMsIDY4LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgNjgsIDI1LCA1LCAxNDksIDE1NiwgNjgsIAotICAgIDI1LCA1LCAxNDksIDIzMiwgMTg1LCA2OCwgMSwgMjMwLCAxNTEsIDIyOSwgNzcsIDY4LCAxLCAyMzAsIDE1MSwgMjM1LCAKLSAgICAxMTQsIDY4LCAxLCAyMzAsIDE1MSwgMjUyLCAxMTEsIDY4LCAxLCAyMzAsIDE1MSwgMjUyLCAxMDYsIDY4LCAxMTYsIDUsIAotICAgIDIzMCwgMTUxLCAxNDcsIDE5NywgNjgsIDExNiwgNSwgMjMwLCAxNTEsIDE0NywgMTg0LCA2OCwgMTE2LCA1LCAyMzAsIDE1MSwgCi0gICAgMTQ3LCAyMzMsIDEzNSwgNjgsIDEsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjIwLCAxMDIsIDY4LCAyNSwgNSwgMjIwLCAxMDgsIAotICAgIDIzNCwgMjEzLCAyNDUsIDU1LCA2OCwgMTM4LCAxNjQsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjQxLCAyNDcsIDY4LCAxMzgsIAotICAgIDE2NCwgMjIwLCAxMDgsIDIzNCwgMjEzLCAyMzQsIDE4MywgMjI1LCAxMjEsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTA4LCAKLSAgICAyMzQsIDIxMywgMjE2LCAyMDgsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjI0LCAxMTQsIDY4LCAyNSwgCi0gICAgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDI0NSwgNTUsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAKLSAgICAyMTMsIDIxNCwgMjE0LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjksIDY4LCA1LCAyMTIsIDcsIAotICAgIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyOCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI3LCAKLSAgICA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjYsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIAotICAgIDIxMywgMjE2LCAyNSwgNjgsIDEsIDI0NSwgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIyOCwgMTEwLCA2OCwgMSwgMjQ1LCAKLSAgICAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgMjEwLCAxNzYsIDY4LCAxLCAyNDUsIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAKLSAgICAyNDIsIDIxNywgNjgsIDI1LCA1LCAyNDMsIDU5LCAyMzQsIDIxMywgNzMsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDIyNiwgCi0gICAgMjM0LCA2OCwgMjUsIDUsIDIzNCwgMTg4LCA3MCwgNjgsIDI1LCA1LCAyMzQsIDE4OCwgMjQ1LCAyMDksIDY4LCAxLCAyMjAsIAotICAgIDg2LCAxNzYsIDY4LCAxLCAyMjAsIDg2LCAyMzQsIDEzMiwgNjgsIDEsIDIyMCwgODYsIDI0MywgMTM1LCA2OCwgMSwgMjIwLCAKLSAgICA4NiwgMjUxLCAzMywgNjgsIDEsIDIyMCwgODYsIDIxMCwgMTE2LCA2OCwgMSwgMjIwLCA4NiwgMjI3LCAxNjUsIDY4LCAxLCAKLSAgICAyMjAsIDg2LCAyNDgsIDIyMSwgNjgsIDEsIDIyMCwgODYsIDE5NywgNjgsIDEsIDIyMCwgODYsIDIyNSwgMTQ3LCA2OCwgMSwgCi0gICAgMjIwLCA4NiwgMjQ0LCAxOTYsIDY4LCAxLCAyMjAsIDg2LCAyNTIsIDE5MSwgNjgsIDEsIDIyMCwgODYsIDIxNiwgMjA4LCAKLSAgICA2OCwgMSwgMjIwLCA4NiwgMTYyLCA2OCwgMTE2LCA1LCAyMjAsIDg2LCAxNDcsIDIxMiwgNjUsIDY4LCAyNSwgNSwgMjIwLCAKLSAgICA4NiwgMjU1LCA3MywgNjgsIDI1LCA1LCAyMjAsIDg2LCA3NSwgNjgsIDI1LCA1LCAyMjAsIDg2LCAxNjAsIDQ4LCA2OCwgMjUsIAotICAgIDUsIDIyMCwgODYsIDQwLCAyMTEsIDExNywgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIAotICAgIDI3LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAyNSwgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjQsIDY4LCA1LCAyMjAsIDg2LCAKLSAgICAyNDksIDE1MiwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODYsIDI0OSwgMTUyLCAyMTYsIDI3LCA2OCwgNSwgMjIwLCA4NiwgCi0gICAgMjQ5LCAxNTIsIDI0NSwgMTUzLCAyMTYsIDMwLCA2OCwgMSwgMjIyLCAxMjgsIDIyNiwgNjMsIDI0NCwgMTk2LCA2OCwgNSwgCi0gICAgMjIyLCAxMjgsIDIyNiwgNjMsIDIxNiwgMjUsIDY4LCAyMjAsIDg2LCAyMSwgMjEwLCA4NiwgNjgsIDIyMCwgODYsIDIxLCAKLSAgICAxMTAsIDY4LCAyMjAsIDg2LCAyMSwgMTA1LCA2OCwgMjIwLCA4NiwgMjEsIDE1OCwgNjgsIDIyMCwgODYsIDIxLCAxNjEsIAotICAgIDY4LCAyMjAsIDg2LCAyMSwgMTg5LCA2OCwgMjIwLCA4NiwgMjEsIDE5NCwgNjgsIDIyMCwgODYsIDIxLCAxOTgsIDY4LCAKLSAgICAyMjAsIDg2LCAyMSwgMTk1LCA2OCwgMjIwLCA4NiwgMjEsIDIwMCwgNjgsIDUsIDIzNCwgMTI2LCAyMTYsIDI5LCA2OCwgNSwgCi0gICAgMjM0LCAxMjYsIDIxNiwgMjcsIDY4LCAyNSwgNSwgMjU0LCAxOTAsIDYxLCA2OCwgMjUsIDUsIDI1NCwgMTkwLCAyNTQsIAotICAgIDIwMSwgNjgsIDE2LCAyMjAsIDg2LCAxMTAsIDY4LCAxNiwgMjIwLCA4NiwgMjQ1LCAzMCwgOTgsIDYsIDEsIDI1NCwgMTIzLCAKLSAgICA5OCwgNiwgMSwgMjUyLCAxNTIsIDk4LCA2LCAxLCAyNDMsIDEwNiwgOTgsIDYsIDEsIDI0NywgMTI4LCA5OCwgNiwgMSwgCi0gICAgMjQ1LCAxNTAsIDk4LCA2LCAxLCAyMTMsIDE2MCwgOTgsIDYsIDEsIDIxMCwgODksIDk4LCA2LCAxLCAyMTcsIDYwLCA5OCwgCi0gICAgNiwgMSwgMjM1LCAyNTUsIDk4LCA2LCAxLCAyMzQsIDIzNCwgOTgsIDYsIDEsIDIzMywgODEsIDk4LCA2LCAxLCAyMzEsIAotICAgIDE4NSwgOTgsIDYsIDEsIDIyOSwgMTk1LCA5OCwgNiwgMSwgMjI2LCAxOTYsIDk4LCA2LCAxLCAyMjYsIDE3LCA5OCwgNiwgMSwgCi0gICAgMjEwLCA3OCwgOTgsIDYsIDEsIDIyMywgMTcxLCA5OCwgNiwgMSwgMjIxLCAyNDMsIDk4LCA2LCAxLCAyMTcsIDUwLCA5OCwgCi0gICAgNiwgMSwgMjE0LCAxOTAsIDk4LCA2LCAxLCAyMjUsIDE0MCwgOTgsIDYsIDEsIDIzNCwgMTIxLCA5OCwgNiwgMSwgMjQyLCAKLSAgICAyNDEsIDk4LCA2LCAxLCAyMjQsIDczLCA5OCwgNiwgMSwgMjIwLCAyMCwgOTgsIDYsIDEsIDI1MCwgOTcsIDk4LCA2LCAxLCAKLSAgICAyNTEsIDcsIDk4LCA2LCAxLCAyMzUsIDEwMCwgOTgsIDYsIDEsIDI1MCwgNDAsIDk4LCA2LCAxLCAyNTAsIDE0MywgOTgsIDYsIAotICAgIDEsIDIxMSwgMTYzLCA5OCwgNiwgMSwgMjM1LCAxMTEsIDk4LCA2LCAxLCAyNDIsIDQzLCA5OCwgNiwgMSwgMjQxLCAyMzgsIAotICAgIDk4LCA2LCAxLCAyNDEsIDE3NSwgOTgsIDYsIDEsIDIxMiwgMjIsIDk4LCA2LCAxLCAyNDIsIDQsIDk4LCA2LCAxLCAyNDEsIAotICAgIDY1LCA5OCwgNiwgMSwgMjEwLCAyNDYsIDk4LCA2LCAxLCAyNTQsIDIzMiwgOTgsIDEsIDI1NCwgMTIzLCA5OCwgMSwgMjUyLCAKLSAgICAxNTIsIDk4LCAxLCAyNDMsIDEwNiwgOTgsIDEsIDI0NywgMTI4LCA5OCwgMSwgMjQ1LCAxNTAsIDk4LCAxLCAyMTMsIDE2MCwgCi0gICAgOTgsIDEsIDIxMCwgODksIDk4LCAxLCAyMTcsIDYwLCA5OCwgMSwgMjM1LCAyNTUsIDk4LCAxLCAyMzQsIDIzNCwgOTgsIDEsIAotICAgIDIzMywgODEsIDk4LCAxLCAyMzEsIDE4NSwgOTgsIDEsIDIyOSwgMTk1LCA5OCwgMSwgMjI2LCAxOTYsIDk4LCAxLCAyMjYsIAotICAgIDE3LCA5OCwgMSwgMjEwLCA3OCwgOTgsIDEsIDIyMywgMTcxLCA5OCwgMSwgMjIxLCAyNDMsIDk4LCAxLCAyMTcsIDUwLCA5OCwgCi0gICAgMSwgMjE0LCAxOTAsIDk4LCAxLCAyMjUsIDE0MCwgOTgsIDEsIDIzNCwgMTIxLCA5OCwgMSwgMjQyLCAyNDEsIDk4LCAxLCAKLSAgICAyMjQsIDczLCA5OCwgMSwgMjIwLCAyMCwgOTgsIDEsIDI1MCwgOTcsIDk4LCAxLCAyNTEsIDcsIDk4LCAxLCAyMzUsIDEwMCwgCi0gICAgOTgsIDEsIDI1MCwgNDAsIDk4LCAxLCAyNTAsIDE0MywgOTgsIDEsIDIxMSwgMTYzLCA5OCwgMSwgMjM1LCAxMTEsIDk4LCAxLCAKLSAgICAyNDIsIDQzLCA5OCwgMSwgMjQxLCAyMzgsIDk4LCAxLCAyNDEsIDE3NSwgOTgsIDEsIDIxMiwgMjIsIDk4LCAxLCAyNDIsIDQsIAotICAgIDk4LCAxLCAyNDEsIDY1LCA5OCwgMSwgMjQ0LCAxMjEsIDk4LCAxLCAyMTAsIDI0NiwgOTgsIDEsIDI0NSwgMTY1LCA5OCwgMSwgCi0gICAgMjE1LCA5NCwgMjQzLCAxMDYsIDk4LCAxLCAyNTQsIDE5NiwgOTgsIDIyNiwgMTUsIDIyMCwgMTM3LCA1OCwgMSwgOTgsIAotICAgIDIyOSwgMTk1LCA5OCwgMSwgMjU0LCAyMzIsIDk4LCAxLCAyNDIsIDMsIDUwLCA5OCwgMSwgMjMzLCAxMjcsIDUwLCAyNCwgCi0gICAgMTAwLCAyMzQsIDU4LCAyNCwgMTAwLCAyMTgsIDIxNSwgMjQsIDEwMCwgMjI4LCAyMjYsIDI0LCAxMDAsIDIxNiwgMTAxLCAKLSAgICAyNCwgMTAwLCAyMTgsIDIwNCwgMjQsIDEwMCwgMjIzLCAyNiwgMjQsIDEwMCwgMjMwLCAyMTcsIDI0LCAxMDAsIDIyNSwgOTUsIAotICAgIDI0LCAxMDAsIDIxOCwgMjEyLCAyNCwgMTAwLCAyMTksIDE0OCwgMjQsIDEwMCwgMjE4LCAyMDksIDI0LCAxMDAsIDIzNiwgCi0gICAgNTYsIDI0LCAxMDAsIDI1MCwgNDYsIDI0LCAxMDAsIDIxOCwgMjE5LCAyNCwgMTAwLCAyNTAsIDEwNiwgMjQsIDEwMCwgMjM0LCAKLSAgICAxMTAsIDI0LCAxMDAsIDIxNiwgMTczLCAyNCwgMTAwLCAyMjUsIDEzMSwgMjQsIDEwMCwgMjQxLCAxNzIsIDI0LCAxMDAsIAotICAgIDIyOCwgMjIyLCAyNCwgMTAwLCAyMTgsIDIxMywgMjQsIDEwMCwgMjI4LCAyMTYsIDI0LCAxMDAsIDIyOCwgMjIwLCAyNCwgCi0gICAgMTAwLCAyMTYsIDk4LCAyNCwgMTAwLCAyMjMsIDE0LCAyNCwgMTAwLCAyMTgsIDIxMSwgMjQsIDEwMCwgMjIzLCAyNCwgMjQsIAotICAgIDEwMCwgMjM0LCAyMTgsIDI0LCAxMDAsIDIzMCwgMjEwLCAyNCwgMTAwLCAyMzQsIDIyMSwgMjQsIDEwMCwgMjI1LCA5MCwgCi0gICAgMjQsIDEwMCwgMjI1LCA4OCwgMjQsIDEwMCwgMjI1LCA3NiwgMjQsIDEwMCwgMjI1LCA4NCwgMjQsIDEwMCwgMjI1LCA4MiwgCi0gICAgMjQsIDEwMCwgMjI1LCA3OSwgMjQsIDEwMCwgMjI1LCA4MSwgMjQsIDEwMCwgMjI1LCA3OCwgMjQsIDEwMCwgMjI1LCA4MywgCi0gICAgMjQsIDEwMCwgMjI1LCA5MywgMjQsIDEwMCwgMjI1LCA5NCwgMjQsIDEwMCwgMjI1LCA3NywgMjQsIDEwMCwgMjI1LCA4NywgCi0gICAgMjQsIDEwMCwgMjM0LCAyMTksIDI0LCAxMDAsIDIzNCwgMjE3LCAyNCwgMTAwLCAyMTksIDE0MSwgMjQsIDEwMCwgMjE5LCAKLSAgICAxMzksIDI0LCAxMDAsIDIxOSwgMTMxLCAyNCwgMTAwLCAyMTksIDEzNCwgMjQsIDEwMCwgMjE5LCAxNDAsIDI0LCAxMDAsIAotICAgIDIxOSwgMTM2LCAyNCwgMTAwLCAyMTksIDEzNSwgMjQsIDEwMCwgMjE5LCAxMzMsIDI0LCAxMDAsIDIxOSwgMTQ0LCAyNCwgCi0gICAgMTAwLCAyMTksIDE0NiwgMjQsIDEwMCwgMjE5LCAxNDcsIDI0LCAxMDAsIDIxOSwgMTQyLCAyNCwgMTAwLCAyMTksIDEzMiwgCi0gICAgMjQsIDEwMCwgMjE5LCAxMzcsIDI0LCAxMDAsIDIxOSwgMTQ1LCAyNCwgMTAwLCAyNTAsIDkwLCAyNCwgMTAwLCAyNTAsIDg4LCAKLSAgICAyNCwgMTAwLCAyNTAsIDE2OCwgMjQsIDEwMCwgMjUwLCAxNjYsIDI0LCAxMDAsIDIyNiwgMzIsIDI0LCAxMDAsIDIzNiwgNTEsIAotICAgIDI0LCAxMDAsIDIzNiwgNDIsIDI0LCAxMDAsIDIzNiwgNTAsIDI0LCAxMDAsIDIzNiwgNDcsIDI0LCAxMDAsIDIzNiwgNDUsIAotICAgIDI0LCAxMDAsIDIzNiwgNDksIDI0LCAxMDAsIDIxOCwgMjE2LCAyNCwgMTAwLCAyMzYsIDU0LCAyNCwgMTAwLCAyMzYsIDU1LCAKLSAgICAyNCwgMTAwLCAyMzYsIDQzLCAyNCwgMTAwLCAyMzYsIDQ4LCAyNCwgMTAwLCAyMTEsIDI2LCAyNCwgMTAwLCAyNTAsIDQ1LCAKLSAgICAyNCwgMTAwLCAyNTAsIDkxLCAyNCwgMTAwLCAyNTAsIDg5LCAyNCwgMTAwLCAyNTAsIDE2OSwgMjQsIDEwMCwgMjUwLCAxNjcsIAotICAgIDI0LCAxMDAsIDI1MCwgMTA0LCAyNCwgMTAwLCAyNTAsIDEwNSwgMjQsIDEwMCwgMjUwLCA5MiwgMjQsIDEwMCwgMjUwLCAKLSAgICAxNzAsIDI0LCAxMDAsIDIyNSwgMTI5LCAyNCwgMTAwLCAyMzQsIDIyMCwgMjQsIDEwMCwgMjE4LCAyMTcsIDI0LCAxMDAsIAotICAgIDIxMSwgMzIsIDI0LCAxMDAsIDIzNCwgNDksIDI0LCAxMDAsIDIyOCwgMjE4LCAyNCwgMTAwLCAyMjgsIDIyNCwgMjQsIDEwMCwgCi0gICAgMjI4LCAyMjMsIDI0LCAxMDAsIDIxNiwgOTUsIDI0LCAxMDAsIDI0NCwgMTAzLCAyNCwgMTQzLCAyNDQsIDEwMywgMjQsIAotICAgIDE0MywgNjEsIDI0LCAxNDMsIDI1NCwgMjQzLCAyNCwgMTQzLCAxOTEsIDI0LCAxNDMsIDIxMSwgOTIsIDI0LCAxNDMsIDI0NSwgCi0gICAgMTE3LCAyNCwgMTQzLCA3NSwgMjQsIDE0MywgMjExLCAzNiwgMjQsIDE0MywgMjExLCA0NywgMjQsIDE0MywgNzYsIDI0LCAKLSAgICAxNDMsIDIxMiwgNjUsIDI0LCAxNDMsIDIxMiwgNjIsIDI0LCAxNDMsIDIyNiwgMjM0LCAyNCwgMTQzLCAyMTAsIDI0NCwgMjQsIAotICAgIDE0MywgNzAsIDI0LCAxNDMsIDIxMiwgMTEsIDI0LCAxNDMsIDIxMiwgMjIsIDI0LCAxNDMsIDIxMSwgMjUwLCAyNCwgMTQzLCAKLSAgICAyMTAsIDIxMiwgMjQsIDE0MywgMjQ1LCA1NSwgMjQsIDE0MywgMjExLCA4LCAyNCwgMTQzLCA3MywgMjQsIDE0MywgMjU1LCAKLSAgICAxNTcsIDI0LCAxNDMsIDI1NSwgMTU2LCAyNCwgMTQzLCAyMTEsIDEwNiwgMjQsIDE0MywgMjExLCAxMDQsIDI0LCAxNDMsIAotICAgIDI0NSwgMTE1LCAyNCwgMTQzLCAyNDUsIDExNCwgMjQsIDE0MywgMjQ1LCAxMTYsIDI0LCAxNDMsIDIxMSwgMzUsIDI0LCAKLSAgICAxNDMsIDIxMSwgMzQsIDI0LCAxNDMsIDIyNywgODQsIDI0LCAxNDMsIDIyNywgODUsIDI0LCAxNDMsIDIyNywgNzgsIDI0LCAKLSAgICAxNDMsIDIyNywgODMsIDI0LCAxNDMsIDIyNywgODEsIDI0LCAxNDMsIDIxMCwgMjM4LCAyNCwgMTQzLCAyMTAsIDIzNywgMjQsIAotICAgIDE0MywgMjEwLCAyMzYsIDI0LCAxNDMsIDIxMCwgMjM5LCAyNCwgMTQzLCAyMTAsIDI0MCwgMjQsIDE0MywgMjE1LCAzMCwgCi0gICAgMjQsIDE0MywgMjE1LCAyOSwgMjQsIDE0MywgMjE1LCAyNywgMjQsIDE0MywgMjE1LCAyNCwgMjQsIDE0MywgMjE1LCAyNSwgCi0gICAgMjQsIDE0MywgMjEwLCAyMTEsIDI0LCAxNDMsIDIxMCwgMjA4LCAyNCwgMTQzLCAyMTAsIDIwOSwgMjQsIDE0MywgMjEwLCAKLSAgICAyMDMsIDI0LCAxNDMsIDIxMCwgMjA0LCAyNCwgMTQzLCAyMTAsIDIwNSwgMjQsIDE0MywgMjEwLCAyMDcsIDI0LCAxNDMsIAotICAgIDI0NSwgNDksIDI0LCAxNDMsIDI0NSwgNTEsIDI0LCAxNDMsIDIxMSwgNywgMjQsIDE0MywgMjQwLCAxNTMsIDI0LCAxNDMsIAotICAgIDI0MCwgMTQ1LCAyNCwgMTQzLCAyNDAsIDE0OCwgMjQsIDE0MywgMjQwLCAxNDYsIDI0LCAxNDMsIDI0MCwgMTUwLCAyNCwgCi0gICAgMTQzLCAyNDAsIDE1MiwgMjQsIDE0MywgMjU0LCAzNCwgMjQsIDE0MywgMjU0LCAzMSwgMjQsIDE0MywgMjU0LCAyOSwgMjQsIAotICAgIDE0MywgMjU0LCAzMCwgMjQsIDE0MywgMjE4LCAyMjAsIDI0LCAxNDMsIDI1NSwgMTU4LCAyNCwgMTQzLCAyMTEsIDEwNSwgCi0gICAgMjQsIDE0MywgMjExLCAzMywgMjQsIDE0MywgMjI3LCA4MCwgMjQsIDE0MywgMjI3LCA3OSwgMjQsIDkwLCAyMzQsIDU4LCAKLSAgICAyNCwgOTAsIDIxOCwgMjE1LCAyNCwgOTAsIDIzNCwgNTEsIDI0LCA5MCwgMjI4LCAyMjYsIDI0LCA5MCwgMjI4LCAyMjQsIAotICAgIDI0LCA5MCwgMjI4LCAyMjMsIDI0LCA5MCwgMjE2LCAxMDEsIDI0LCA5MCwgMjIzLCAyNiwgMjQsIDkwLCAyMjMsIDIxLCAyNCwgCi0gICAgOTAsIDIyMywgMTgsIDI0LCA5MCwgMjIzLCAxMSwgMjQsIDkwLCAyMjMsIDYsIDI0LCA5MCwgMjIzLCAxLCAyNCwgOTAsIAotICAgIDIyMywgMTIsIDI0LCA5MCwgMjIzLCAyNCwgMjQsIDkwLCAyMzAsIDIxNywgMjQsIDkwLCAyMjUsIDk1LCAyNCwgOTAsIDIyNSwgCi0gICAgODQsIDI0LCA5MCwgMjE5LCAxNDgsIDI0LCA5MCwgMjE4LCAyMDksIDI0LCA5MCwgMjM2LCA1NiwgMjQsIDkwLCAyNTAsIDQ2LCAKLSAgICAyNCwgOTAsIDI1MCwgMTA2LCAyNCwgOTAsIDIzNCwgMTEwLCAyNCwgOTAsIDIxNiwgMTczLCAyNCwgOTAsIDIyNSwgMTMxLCAKLSAgICAyNCwgOTAsIDI0MSwgMTcyLCAyNCwgOTAsIDIzNCwgNTIsIDI0LCA5MCwgMjM0LCA1MCwgMjQsIDkwLCAyMjgsIDIyMiwgMjQsIAotICAgIDkwLCAyMjgsIDIxNiwgMjQsIDkwLCAyMjgsIDIxOCwgMjQsIDkwLCAyMjgsIDIyMSwgMjQsIDkwLCAyMjgsIDIxNywgMjQsIAotICAgIDkwLCAyMTYsIDk4LCAyNCwgOTAsIDIxNiwgOTUsIDI0LCA5MCwgMjIzLCAxOSwgMjQsIDkwLCAyMjMsIDE0LCAyNCwgOTAsIAotICAgIDIyMywgMCwgMjQsIDkwLCAyMjIsIDI1NSwgMjQsIDkwLCAyMTgsIDIxMSwgMjQsIDkwLCAyMjMsIDE2LCAyNCwgOTAsIDIyMywgCi0gICAgMTUsIDI0LCA5MCwgMjIzLCA4LCAyNCwgOTAsIDIyMywgMTAsIDI0LCA5MCwgMjIzLCAyMywgMjQsIDkwLCAyMjMsIDMsIDI0LCAKLSAgICA5MCwgMjIzLCAxMywgMjQsIDkwLCAyMjMsIDIyLCAyNCwgOTAsIDIyMiwgMjU0LCAyNCwgOTAsIDIzMCwgMjEzLCAyNCwgOTAsIAotICAgIDIzMCwgMjA4LCAyNCwgOTAsIDIzMCwgMjEwLCAyNCwgOTAsIDIzMCwgMjA3LCAyNCwgOTAsIDIzMCwgMjA1LCAyNCwgOTAsIAotICAgIDIzMCwgMjExLCAyNCwgOTAsIDIzMCwgMjE2LCAyNCwgOTAsIDIzMCwgMjE0LCAyNCwgOTAsIDIzNCwgMjIxLCAyNCwgOTAsIAotICAgIDIyNSwgODYsIDI0LCA5MCwgMjI1LCA4NywgMjQsIDkwLCAyMjUsIDkyLCAyNCwgOTAsIDIzNCwgMjE5LCAyNCwgOTAsIDIxOSwgCi0gICAgMTQxLCAyNCwgOTAsIDIxOSwgMTMxLCAyNCwgOTAsIDIxOSwgMTM0LCAyNCwgOTAsIDIxOSwgMTM2LCAyNCwgOTAsIDIyNiwgCi0gICAgMzIsIDI0LCA5MCwgMjM2LCA1MSwgMjQsIDkwLCAyMzYsIDQ0LCAyNCwgOTAsIDIxOCwgMjE2LCAyNCwgOTAsIDIzNiwgNTIsIAotICAgIDI0LCA5MCwgMjExLCAyNiwgMjQsIDkwLCAyMTEsIDIyLCAyNCwgOTAsIDIxMSwgMjMsIDI0LCA5MCwgMjI1LCAxMjksIDI0LCAKLSAgICA5MCwgMjM0LCAyMjAsIDI0LCA5MCwgMjQxLCAxNzAsIDI0LCA5MCwgMjQxLCAxNjgsIDI0LCA5MCwgMjQxLCAxNzEsIDI0LCAKLSAgICA5MCwgMjQxLCAxNjksIDI0LCA5MCwgMjExLCAzMiwgMjQsIDkwLCAyMzQsIDU0LCAyNCwgOTAsIDIzNCwgNTMsIDI0LCA5MCwgCi0gICAgMjM0LCA1NywgMjQsIDkwLCAyMzQsIDU1LCAyNCwgOTAsIDIzNCwgNTYsIDI0LCA5MCwgMjE4LCAyMTMsIDI5LCAzLCAxNjIsIAotICAgIDI5LCAzLCAyNDAsIDIyMiwgMjksIDMsIDI0MSwgMTgwLCAyOSwgMywgMjQyLCA0NiwgMjksIDMsIDI0MSwgMjIwLCAyOSwgMywgCi0gICAgMjQxLCAyMzgsIDI5LCAzLCAyNDEsIDY4LCAyOSwgMywgMjQxLCA2NywgMjksIDMsIDIzMywgMTM1LCAyOSwgMywgMjMyLCAKLSAgICA5OCwgMjksIDMsIDIzMiwgMjQxLCAyOSwgMywgMjMzLCAxMzQsIDI5LCAzLCAyMzMsIDUwLCAyOSwgMywgMjMzLCA1OCwgMjksIAotICAgIDMsIDIzMiwgMTU2LCAyOSwgMywgMjMyLCA3MCwgMjksIDMsIDI0MSwgMTg5LCAyOSwgMywgMjQxLCAxODMsIDI5LCAzLCAKLSAgICAyNDEsIDE4NSwgMjksIDMsIDI0MSwgMTg4LCAyOSwgMywgMjQxLCAxODYsIDI5LCAzLCAyNDEsIDE4NywgMjksIDMsIDI0MSwgCi0gICAgMTg0LCAyOSwgMywgMjQxLCAxODIsIDI5LCAzLCAxODQsIDI5LCAzLCAyMzAsIDEwMiwgMjksIDMsIDIzMCwgMjMwLCAyOSwgCi0gICAgMywgMjMxLCAyMzcsIDI5LCAzLCAyMzEsIDgwLCAyOSwgMywgMjMxLCA5MSwgMjksIDMsIDIzMCwgMTYxLCAyOSwgMywgMjMwLCAKLSAgICA0MiwgMjksIDMsIDIxNywgMTYzLCAyOSwgMywgMjE3LCAxNTcsIDI5LCAzLCAyMTcsIDE1OSwgMjksIDMsIDIxNywgMTYyLCAKLSAgICAyOSwgMywgMjE3LCAxNjAsIDI5LCAzLCAyMTcsIDE2MSwgMjksIDMsIDIxNywgMTU4LCAyOSwgMywgMjE3LCAxNTYsIDI5LCAKLSAgICAzLCAyMDUsIDI5LCAzLCAyMjIsIDE0MCwgMjksIDMsIDIyMywgMzUsIDI5LCAzLCAyMjMsIDE4NCwgMjksIDMsIDIyMywgCi0gICAgMTA4LCAyOSwgMywgMjIzLCAxMjgsIDI5LCAzLCAyMjIsIDIxMSwgMjksIDMsIDIyMiwgMTA5LCAyOSwgMywgMjA2LCAyOSwgCi0gICAgMywgMjE4LCA4MywgMjksIDMsIDIxOSwgMTkxLCAyOSwgMywgMjIyLCAzMSwgMjksIDMsIDIyMSwgMTcwLCAyOSwgMywgMjIxLCAKLSAgICAxODEsIDI5LCAzLCAyMTksIDU4LCAyOSwgMywgMjE3LCAyNTMsIDI5LCAzLCAyMjAsIDEwMiwgMjksIDMsIDIxOSwgMjI1LCAKLSAgICAyOSwgMywgMjIwLCAzMiwgMjksIDMsIDIyMCwgOTgsIDI5LCAzLCAyMjAsIDYxLCAyOSwgMywgMjIwLCA2MywgMjksIDMsIAotICAgIDIyMCwgNywgMjksIDMsIDIxOSwgMjA4LCAyOSwgMywgMjI0LCA4OCwgMjksIDMsIDIyNCwgMzAsIDI5LCAzLCAyMjQsIDUzLCAKLSAgICAyOSwgMywgMjI0LCA4NywgMjksIDMsIDIyNCwgNjgsIDI5LCAzLCAyMjQsIDY5LCAyOSwgMywgMjI0LCA0MiwgMjksIDMsIAotICAgIDIyNCwgNDEsIDI5LCAzLCAyMjMsIDI0MiwgMjksIDMsIDIyMywgMjM4LCAyOSwgMywgMjIzLCAyNDEsIDI5LCAzLCAyMjMsIAotICAgIDIzOSwgMjksIDMsIDIyMywgMjQwLCAyOSwgMywgMjI0LCA2NSwgMjksIDMsIDIyNCwgNTksIDI5LCAzLCAyMjQsIDYxLCAyOSwgCi0gICAgMywgMjI0LCA2NCwgMjksIDMsIDIyNCwgNjIsIDI5LCAzLCAyMjQsIDYzLCAyOSwgMywgMjI0LCA2MCwgMjksIDMsIDIyNCwgCi0gICAgNTgsIDI5LCAzLCAyMjQsIDU0LCAyOSwgMywgMjI0LCA1NywgMjksIDMsIDIyNCwgNTUsIDI5LCAzLCAyMjQsIDU2LCAyOSwgCi0gICAgMywgMjUyLCAxOTEsIDI5LCAzLCAyNTEsIDEyNSwgMjksIDMsIDI1MiwgNiwgMjksIDMsIDI1MiwgMTg5LCAyOSwgMywgMjUyLCAKLSAgICA2NiwgMjksIDMsIDI1MiwgNzUsIDI5LCAzLCAyNTEsIDIwNSwgMjksIDMsIDI1MSwgODMsIDI5LCAzLCAyMTQsIDI3LCAyOSwgCi0gICAgMywgMjEyLCAxMTYsIDI5LCAzLCAyMTMsIDE3NiwgMjksIDMsIDIxNCwgMjYsIDI5LCAzLCAyMTMsIDI1MCwgMjksIDMsIAotICAgIDIxMywgMjU1LCAyOSwgMywgMjEzLCAxMzgsIDI5LCAzLCAyMTIsIDEwNywgMjksIDMsIDIxNywgMTA1LCAyOSwgMywgMjE1LCAKLSAgICAxMTgsIDI5LCAzLCAyMTYsIDExNywgMjksIDMsIDIxNywgMTAxLCAyOSwgMywgMjE3LCAxMSwgMjksIDMsIDIxNywgMjIsIAotICAgIDI5LCAzLCAxMTEsIDI5LCAzLCAyMTUsIDgwLCAyOSwgMywgMjUxLCAzMywgMjksIDMsIDI0OSwgMTEyLCAyOSwgMywgMjUwLCAKLSAgICA1MSwgMjksIDMsIDI1MSwgMzIsIDI5LCAzLCAyNTAsIDE4MiwgMjksIDMsIDI1MCwgMTkwLCAyOSwgMywgMjQ5LCAyMzgsIAotICAgIDI5LCAzLCAyNDksIDgxLCAyOSwgMywgMjExLCAxNjUsIDI5LCAzLCAyMTEsIDE0MSwgMjksIDMsIDIxMSwgMTU3LCAyOSwgMywgCi0gICAgMjExLCAxNjQsIDI5LCAzLCAyMTEsIDE2MSwgMjksIDMsIDIxMSwgMTYyLCAyOSwgMywgMjExLCAxNDgsIDI5LCAzLCAyMTEsIAotICAgIDE0NywgMjksIDMsIDIxMSwgMTM2LCAyOSwgMywgMjExLCAxMzIsIDI5LCAzLCAyMTEsIDEzNSwgMjksIDMsIDIxMSwgMTMzLCAKLSAgICAyOSwgMywgMjExLCAxMzQsIDI5LCAzLCAxOTcsIDI5LCAzLCAyMjcsIDIzNywgMjksIDMsIDIyOCwgMjMzLCAyOSwgMywgCi0gICAgMjI5LCAyMjUsIDI5LCAzLCAyMjksIDEwMywgMjksIDMsIDIyOSwgMTA3LCAyOSwgMywgMjI4LCA3NCwgMjksIDMsIDIyNywgCi0gICAgMTc0LCAyOSwgMywgMjI3LCAxNjUsIDI5LCAzLCAyMjcsIDEyOCwgMjksIDMsIDIyNywgMTQ4LCAyOSwgMywgMjI3LCAxNjQsIAotICAgIDI5LCAzLCAyMjcsIDE1NSwgMjksIDMsIDIyNywgMTU2LCAyOSwgMywgMjI3LCAxMzQsIDI5LCAzLCAyMjcsIDExOSwgMjksIAotICAgIDMsIDI0MiwgMTgwLCA2MSwgMjksIDMsIDI0MiwgMTgwLCA3MCwgMjksIDMsIDI0MiwgMTgwLCA3MywgMjksIDMsIDI0MiwgCi0gICAgMTgwLCAyNTUsIDczLCAyOSwgMywgMjQyLCAxODAsIDI0NSwgMjA5LCAyOSwgMywgMjQyLCAxODAsIDc1LCAyOSwgMywgMjQyLCAKLSAgICAxODAsIDc2LCAyOSwgMywgMjQyLCAxODAsIDIxMiwgNjUsIDI5LCAzLCAxNzYsIDI5LCAzLCAyMzMsIDIxNywgMjksIDMsIAotICAgIDIzNCwgOTIsIDI5LCAzLCAyMzUsIDEwLCAyOSwgMywgMjM0LCAxODEsIDI5LCAzLCAyMzQsIDE4MiwgMjksIDMsIDIzNCwgCi0gICAgMjgsIDI5LCAzLCAyMzQsIDI3LCAyOSwgMywgMjMzLCAxODIsIDI5LCAzLCAyMzMsIDE3NiwgMjksIDMsIDIzMywgMTgxLCAKLSAgICAyOSwgMywgMjMzLCAxNzcsIDI5LCAzLCAyMzMsIDE3OCwgMjksIDMsIDIzMywgMTcxLCAyOSwgMywgMjMzLCAxNjUsIDI5LCAKLSAgICAzLCAyMzMsIDE2NywgMjksIDMsIDIzMywgMTcwLCAyOSwgMywgMjMzLCAxNjgsIDI5LCAzLCAyMzMsIDE2OSwgMjksIDMsIAotICAgIDIzMywgMTY2LCAyOSwgMywgMjMzLCAxNjQsIDI5LCAzLCAyMzMsIDE2MCwgMjksIDMsIDIzMywgMTYzLCAyOSwgMywgMjMzLCAKLSAgICAxNjEsIDI5LCAzLCAyMzMsIDE2MiwgMjksIDMsIDIxMiwgNjUsIDI5LCAzLCAyMTEsIDE5NSwgMjksIDMsIDIxMSwgMjUwLCAKLSAgICAyOSwgMywgMjEyLCA2NCwgMjksIDMsIDIxMiwgMTcsIDI5LCAzLCAyMTIsIDIyLCAyOSwgMywgMjExLCAyMjcsIDI5LCAzLCAKLSAgICAyMTEsIDIyNiwgMjksIDMsIDIyNSwgMTM5LCA2MSwgMjksIDMsIDIyNSwgMTM5LCA3MCwgMjksIDMsIDIyNSwgMTM5LCA3MywgCi0gICAgMjksIDMsIDIyNSwgMTM5LCAyNTUsIDczLCAyOSwgMywgMjI1LCAxMzksIDI0NSwgMjA5LCAyOSwgMywgMjI1LCAxMzksIDc1LCAKLSAgICAyOSwgMywgMjI1LCAxMzksIDc2LCAyOSwgMywgMjEwLCAxMTYsIDI5LCAzLCAyMTAsIDEzLCAyOSwgMywgMjEwLCA0NCwgMjksIAotICAgIDMsIDIxMCwgMTE1LCAyOSwgMywgMjEwLCA5MiwgMjksIDMsIDIxMCwgOTQsIDI5LCAzLCAyMTAsIDIzLCAyOSwgMywgMjEwLCAKLSAgICAwLCAyOSwgMywgMjEwLCA4MiwgMjksIDMsIDIxMCwgNjIsIDI5LCAzLCAyMTAsIDY5LCAyOSwgMywgMjEwLCA4MSwgMjksIDMsIAotICAgIDIxMCwgNzMsIDI5LCAzLCAyMTAsIDc0LCAyOSwgMywgMjEwLCA2NywgMjksIDMsIDIxMCwgNTMsIDI5LCAzLCAxOTEsIDI5LCAKLSAgICAzLCAyMTAsIDIxMiwgMjksIDMsIDIxMSwgOCwgMjksIDMsIDIxMSwgMTAzLCAyOSwgMywgMjExLCA0NCwgMjksIDMsIDIxMSwgCi0gICAgNDcsIDI5LCAzLCAyMTAsIDI0NCwgMjksIDMsIDIxMCwgMjM1LCAyOSwgMywgMjQ4LCAyMjEsIDI5LCAzLCAyNDYsIDc4LCAKLSAgICAyOSwgMywgMjQ4LCAzLCAyOSwgMywgMjQ4LCAyMjAsIDI5LCAzLCAyNDgsIDc3LCAyOSwgMywgMjQ4LCA5MCwgMjksIDMsIAotICAgIDI0NywgMTQ1LCAyOSwgMywgMjQ2LCA0NywgMjksIDMsIDI0OCwgMTM1LCAyOSwgMywgMjQ4LCAxMDAsIDI5LCAzLCAyNDgsIAotICAgIDExMiwgMjksIDMsIDI0OCwgMTM0LCAyOSwgMywgMjQ4LCAxMjIsIDI5LCAzLCAyNDgsIDEyMywgMjksIDMsIDI0OCwgMTA1LCAKLSAgICAyOSwgMywgMjQ4LCA5MSwgMjksIDMsIDIzNSwgMTQxLCAyOSwgMywgMjM1LCA1MSwgMjksIDMsIDIzNSwgMTA4LCAyOSwgMywgCi0gICAgMjM1LCAxNDAsIDI5LCAzLCAyMzUsIDEyNCwgMjksIDMsIDIzNSwgMTI2LCAyOSwgMywgMjM1LCA2OCwgMjksIDMsIDIzNSwgCi0gICAgMzEsIDI5LCAzLCAyNDMsIDEzNSwgMjksIDMsIDI0MiwgMTEzLCAyOSwgMywgMjQyLCAyMTQsIDI5LCAzLCAyNDMsIDEzMiwgCi0gICAgMjksIDMsIDI0MywgNTUsIDI5LCAzLCAyNDMsIDYyLCAyOSwgMywgMjQyLCAxNzQsIDI5LCAzLCAyNDIsIDE3MywgMjksIDMsIAotICAgIDI0MiwgNzgsIDI5LCAzLCAyNDIsIDc0LCAyOSwgMywgMjQyLCA3NywgMjksIDMsIDI0MiwgNzUsIDI5LCAzLCAyNDIsIDc2LCAKLSAgICAyOSwgMywgMjQzLCAyOSwgMjksIDMsIDI0MywgOSwgMjksIDMsIDI0MywgMTksIDI5LCAzLCAyNDMsIDI4LCAyOSwgMywgCi0gICAgMjQzLCAyMywgMjksIDMsIDI0MywgMjQsIDI5LCAzLCAyNDMsIDEzLCAyOSwgMywgMjQyLCAyNTQsIDI5LCAzLCAyMTYsIAotICAgIDIwOCwgMjksIDMsIDIxNiwgMTM2LCAyOSwgMywgMjE2LCAxNzUsIDI5LCAzLCAyMTYsIDIwNywgMjksIDMsIDIxNiwgMTk0LCAKLSAgICAyOSwgMywgMjE2LCAxOTUsIDI5LCAzLCAyMTYsIDE1NiwgMjksIDMsIDIxNiwgMTI4LCAyOSwgMywgMjUwLCAxNTcsIDI5LCAKLSAgICAzLCAyNTAsIDY5LCAyOSwgMywgMjUwLCAxMTAsIDI5LCAzLCAyNTAsIDE1NiwgMjksIDMsIDI1MCwgMTI4LCAyOSwgMywgCi0gICAgMjUwLCAxMzEsIDI5LCAzLCAyNTAsIDg2LCAyOSwgMywgMjUwLCA1OCwgMjksIDMsIDIyNSwgMTQ3LCAyOSwgMywgMjI1LCAKLSAgICAxMTQsIDI5LCAzLCAyMjUsIDEzMywgMjksIDMsIDIyNSwgMTQ2LCAyOSwgMywgMjI1LCAxMzUsIDI5LCAzLCAyMjUsIDEzNiwgCi0gICAgMjksIDMsIDIyNSwgMTIxLCAyOSwgMywgMjI1LCAxMTAsIDI5LCAzLCAyMTUsIDE4MywgMjksIDMsIDIxNSwgMTYzLCAyOSwgCi0gICAgMywgMjE1LCAxNjcsIDI5LCAzLCAyMTUsIDE4MiwgMjksIDMsIDIxNSwgMTc3LCAyOSwgMywgMjE1LCAxNzgsIDI5LCAzLCAKLSAgICAyMTUsIDE2NiwgMjksIDMsIDIxNSwgMTYxLCAyOSwgMywgMjE1LCAzOSwgMjksIDMsIDIxNSwgMzEsIDI5LCAzLCAyMTUsIAotICAgIDM1LCAyOSwgMywgMjE1LCAzOCwgMjksIDMsIDIxNSwgMzYsIDI5LCAzLCAyMTUsIDM3LCAyOSwgMywgMjE1LCAzMywgMjksIAotICAgIDMsIDIxNSwgMzIsIDI5LCAzLCAyNDQsIDE5NiwgMjksIDMsIDI0MywgMjM0LCAyOSwgMywgMjQ0LCAxMjEsIDI5LCAzLCAKLSAgICAyNDQsIDE5NSwgMjksIDMsIDI0NCwgMTQ3LCAyOSwgMywgMjQ0LCAxNTQsIDI5LCAzLCAyNDQsIDQzLCAyOSwgMywgMjQzLCAKLSAgICAyMTMsIDI5LCAzLCAxOTAsIDI5LCAzLCAyMjQsIDE1MCwgMjksIDMsIDIyNSwgMTA4LCAyOSwgMywgMjI2LCA4OSwgMjksIDMsIAotICAgIDIyNSwgMjExLCAyOSwgMywgMjI1LCAyMjEsIDI5LCAzLCAyMjUsIDE2LCAyOSwgMywgMjI0LCAxMTQsIDI5LCAzLCAyMjIsIAotICAgIDk5LCAyOSwgMywgMjMwLCAzMSwgMjksIDMsIDI0MywgMjA3LCAyOSwgMzgsIDI0MywgNTMsIDIyLCAyNSwgMjMzLCAyMywgCi0gICAgNzgsIDI5LCAzOCwgMjUsIDIzMywgMjMsIDc4LCAyOSwgMzgsIDI0MywgNTMsIDc4LCAyOSwgMjIxLCAxNzMsIDc4LCAyOSwgCi0gICAgMjExLCAyMDgsIDI5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDI5LCAyNDksIDIxOSwgMjksIDIyMCwgMTUwLCAyOSwgMjQ5LCAKLSAgICAyMjYsIDI5LCAyMjQsIDE5OSwgMjQ5LCAyMjYsIDI5LCAyMjQsIDEzLCA3OCwgMjksIDIyNiwgMTUsIDIyMCwgMTM3LCAyOSwgCi0gICAgMjEsIDExMCwgMjksIDIxLCAxMDUsIDI5LCAyMSwgMTU4LCAyOSwgMjEsIDE2MSwgMjksIDIxLCAxODksIDI5LCAyMSwgMTk0LCAKLSAgICAyOSwgMjEsIDE5OCwgMjksIDIxLCAxOTUsIDI5LCAyMSwgMjAwLCAyOSwgNTQsIDIxNiwgMjQ3LCAyOSwgNTQsIDIxNSwgNzMsIAotICAgIDI5LCA1NCwgMjE2LCAxNjIsIDI5LCA1NCwgMjQ0LCAxNSwgMjksIDU0LCAyNDQsIDExNCwgMjksIDU0LCAyMTksIDExMSwgCi0gICAgMjksIDU0LCAyMjAsIDExNiwgMjksIDU0LCAyNDUsIDE4NCwgMjksIDU0LCAyMjgsIDE5NSwgMjksIDU0LCAyNDAsIDIxMCwgCi0gICAgMjksIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDI5LCAzLCAyMjEsIDE3NywgMjMwLCA0MiwgMjksIDMsIDIzMCwgMzgsIDI5LCAKLSAgICAzLCAyMzAsIDM5LCAyOSwgMywgMjMwLCA0MCwgMjksIDMsIDIyMSwgMTc3LCAyNTEsIDgzLCAyOSwgMywgMjUxLCA4MCwgMjksIAotICAgIDMsIDI1MSwgODEsIDI5LCAzLCAyNTEsIDgyLCAyOSwgMywgMjIxLCAxNzcsIDI0MywgMjEzLCAyOSwgMywgMjQzLCAyMDksIAotICAgIDI5LCAzLCAyNDMsIDIxMCwgMjksIDMsIDI0MywgMjExLCAyOSwgMywgMjIxLCAxNzcsIDIyNCwgMTE0LCAyOSwgMywgMjI0LCAKLSAgICAxMTAsIDI5LCAzLCAyMjQsIDExMSwgMjksIDMsIDIyNCwgMTEyLCAyOSwgMjE2LCAzMSwgMTY0LCAyMTAsIDI0NywgMjksIAotICAgIDIxNiwgMzEsIDE2NCwgMjQ4LCA0MSwgMjksIDIxNiwgMzEsIDE2NCwgMjIyLCAyMzgsIDI5LCAyMTYsIDMxLCAxNjQsIDIxOSwgCi0gICAgMjUxLCAyMjIsIDIzOCwgMjksIDIxNiwgMzEsIDE2NCwgMjQ3LCAyMzUsIDI5LCAyMTYsIDMxLCAxNjQsIDIzNCwgMTY0LCAKLSAgICAyOSwgMjE2LCAzMSwgMTY0LCAyNTAsIDk0LCAyOSwgMjE2LCAzMSwgMTY0LCAyNDEsIDE3NywgMjksIDIxNiwgMzEsIDE2NCwgCi0gICAgMjQ4LCA0MCwgMjksIDIxNiwgMzEsIDE2NCwgMjMzLCAxOTQsIDE2OSwgMSwgNjEsIDE2OSwgMSwgNzUsIDE2OSwgMSwgNzMsIAotICAgIDE2OSwgMSwgNzYsIDE2OSwgMSwgNzAsIDE2OSwgMSwgMjE0LCAxMDUsIDE2OSwgMSwgMjQzLCAxMzUsIDE2OSwgMSwgMTc2LCAKLSAgICAxNjksIDEsIDI0MywgNjIsIDE2OSwgMSwgMjQyLCAyMTQsIDE2OSwgMSwgMjQyLCAxNzQsIDE2OSwgMSwgMjQyLCAxMTMsIAotICAgIDE2OSwgMSwgMjQyLCA3OSwgMTY5LCAxLCAxNjIsIDE2OSwgMSwgMjQxLCAyMzgsIDE2OSwgMSwgMjQxLCAxODAsIDE2OSwgMSwgCi0gICAgMjQxLCA2OCwgMTY5LCAxLCAyNDAsIDIyMiwgMTY5LCAxLCAyNDAsIDIwMSwgMTY5LCAxLCAyMzMsIDEzNSwgMTY5LCAxLCAKLSAgICAyMzMsIDU4LCAxNjksIDEsIDIzMiwgMjQxLCAxNjksIDEsIDIzMiwgMTU2LCAxNjksIDEsIDIzMiwgOTgsIDE2OSwgMSwgCi0gICAgMjMyLCA3MSwgMTY5LCAxLCAxODQsIDE2OSwgMSwgMjMxLCA5MSwgMTY5LCAxLCAyMzAsIDIzMCwgMTY5LCAxLCAyMzAsIAotICAgIDE2MSwgMTY5LCAxLCAyMzAsIDEwMiwgMTY5LCAxLCAxOTcsIDE2OSwgMSwgMjQxLCA5MCwgMTY5LCAxLCAyMjksIDIxMywgCi0gICAgMTY5LCAxLCAyMjksIDEwNywgMTY5LCAxLCAyMjgsIDIzMywgMTY5LCAxLCAyMjgsIDc0LCAxNjksIDEsIDIyNywgMjM3LCAKLSAgICAxNjksIDEsIDIyNywgMTc2LCAxNjksIDEsIDIyNCwgMjksIDE2OSwgMSwgMjI0LCAxNiwgMTY5LCAxLCAyMjQsIDksIDE2OSwgCi0gICAgMSwgMjI0LCAxLCAxNjksIDEsIDIyMywgMjQ2LCAxNjksIDEsIDIyMywgMjQ0LCAxNjksIDEsIDIwNiwgMTY5LCAxLCAyMjIsIAotICAgIDkxLCAxNjksIDEsIDIyMSwgMTgxLCAxNjksIDEsIDIxOSwgMTkxLCAxNjksIDEsIDIxOSwgNTgsIDE2OSwgMSwgMjE4LCA4MywgCi0gICAgMTY5LCAxLCAyMTgsIDIsIDE2OSwgMSwgMjQ4LCAyMjEsIDE2OSwgMSwgMjE3LCAxMDUsIDE2OSwgMSwgMjQ4LCA5MCwgMTY5LCAKLSAgICAxLCAyMTcsIDIyLCAxNjksIDEsIDI0OCwgMywgMTY5LCAxLCAyMTYsIDExNywgMTY5LCAxLCAyNDcsIDE0NSwgMTY5LCAxLCAKLSAgICAyNDYsIDc4LCAxNjksIDEsIDI0NiwgNTAsIDE2OSwgMSwgMjQ3LCAxNTYsIDE2OSwgMSwgMjE2LCA1OSwgMTY5LCAxLCAyMTYsIAotICAgIDU4LCAxNjksIDEsIDIxNiwgNDcsIDE2OSwgMSwgMjE2LCA0NiwgMTY5LCAxLCAyMTYsIDQ1LCAxNjksIDEsIDIxNiwgNDQsIAotICAgIDE2OSwgMSwgMjE1LCAxODMsIDE2OSwgMSwgMjE1LCAxNzgsIDE2OSwgMSwgMjE1LCAxNjcsIDE2OSwgMSwgMjE1LCAxNjYsIAotICAgIDE2OSwgMSwgMjE1LCAxNjMsIDE2OSwgMSwgMjE1LCAxNjIsIDE2OSwgMSwgMjEyLCA2NSwgMTY5LCAxLCAyMTIsIDIyLCAKLSAgICAxNjksIDEsIDIxMSwgMjUwLCAxNjksIDEsIDIxMSwgMjI3LCAxNjksIDEsIDIxMSwgMTk1LCAxNjksIDEsIDIxMSwgMTgzLCAKLSAgICAxNjksIDEsIDE5MSwgMTY5LCAxLCAyMTEsIDQ3LCAxNjksIDEsIDIxMSwgOCwgMTY5LCAxLCAyMTAsIDI0NCwgMTY5LCAxLCAKLSAgICAyMTAsIDIxMiwgMTY5LCAxLCAyMTAsIDE3NywgMTgsIDE5LCAyNDAsIDE2OCwgMTgsIDE5LCA3NSwgMTgsIDE5LCAyNTUsIAotICAgIDM3LCAxOCwgMTksIDczLCAxOCwgMTksIDIzNiwgMzMsIDE4LCAxOSwgNzYsIDE4LCAxOSwgMjI2LCAxODMsIDE4LCAxOSwgCi0gICAgMjExLCAxMTYsIDIyNiwgMTgzLCAxOCwgMTksIDcyLCAyNDUsIDIwOSwgMTgsIDE5LCA3MiwgNzMsIDE4LCAxOSwgNjEsIDE4LCAKLSAgICAxOSwgMjU1LCA3MywgMTgsIDE5LCAyMTIsIDIyLCAxOCwgMTksIDE1OSwgMjEyLCAyMiwgMTgsIDE5LCAyMTEsIDI1MCwgMTgsIAotICAgIDE5LCAxNTksIDIxMSwgMjUwLCAxOCwgMTksIDIxMSwgMjQyLCAxOCwgMTksIDE1OSwgMjExLCAyNDIsIDE4LCAxOSwgMjExLCAKLSAgICAyMjcsIDE4LCAxOSwgMTU5LCAyMTEsIDIyNywgMTgsIDE5LCAyMTEsIDIxNSwgMTgsIDE5LCAxNTksIDIxMSwgMjE1LCAxOCwgCi0gICAgMTksIDIyOSwgMTkwLCAyMTEsIDIxNSwgMTgsIDE5LCAyMTIsIDY1LCAxOCwgMTksIDE1OSwgMjEyLCA2NSwgMTgsIDE5LCAKLSAgICAyMTIsIDY0LCAxOCwgMTksIDE1OSwgMjEyLCA2NCwgMTgsIDE5LCAyMjksIDE5MCwgMjEyLCA2NCwgMTgsIDE5LCAyNTQsIAotICAgIDIwMSwgMTgsIDE5LCAyMTEsIDExNiwgMjEyLCA5OCwgMTgsIDE5LCAyNDIsIDE4MCwgMjE4LCAxMjksIDE4LCAxOSwgNDAsIAotICAgIDE0MiwgMTgsIDE5LCA0MCwgMjQyLCAxMzYsIDE4LCAxOSwgNDAsIDI1MSwgMTc1LCAxNjMsIDIyMiwgMjMzLCAxOCwgMTksIAotICAgIDQwLCAyMTYsIDE0LCAxNjMsIDIyMiwgMjMzLCAxOCwgMTksIDQwLCA0NCwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgCi0gICAgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIDUyLCAxNDIsIDE4LCAxOSwgNDAsIDUyLCAyMTksIDI1MSwgNjcsIDIxOCwgOTAsIDE4LCAKLSAgICAxOSwgNDAsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMTgsIDE5LCA0MCwgMjE5LCAyNTEsIDIwMywgOTEsIDE4LCAxOSwgNDAsIAotICAgIDIyNSwgMjIsIDE4LCAxOSwgNDAsIDEyNCwgMjE3LCA4NywgMTgsIDE5LCAyNDUsIDE1MCwgMTgsIDE5LCAyMzUsIDI1NSwgCi0gICAgMTgsIDE5LCAyMjYsIDE5NiwgMTgsIDE5LCAyNTQsIDEyMywgMTgsIDE5LCAyMjUsIDIyMSwgMTgsIDE5LCAyMjYsIDg3LCAKLSAgICAxOCwgMTksIDIyNSwgMTA4LCAxOCwgMTksIDIyNSwgNzEsIDE4LCAxOSwgMjI1LCAxNiwgMTgsIDE5LCAyMjQsIDI0OSwgMTgsIAotICAgIDE5LCAyMTEsIDExNiwgMjI0LCAyNDksIDE4LCAxOSwgNzIsIDI0MSwgMjIwLCAxOCwgMTksIDcyLCAyNDEsIDE4MCwgMTgsIAotICAgIDE5LCAxOTAsIDE4LCAxOSwgMjI2LCA4OSwgMTgsIDE5LCAyMjQsIDExMiwgMTgsIDE5LCAxNTksIDIyNCwgMTEyLCAxOCwgCi0gICAgMTksIDIyNCwgMTEwLCAxOCwgMTksIDE1OSwgMjI0LCAxMTAsIDE4LCAxOSwgMjI0LCAxMDksIDE4LCAxOSwgMTU5LCAyMjQsIAotICAgIDEwOSwgMTgsIDE5LCAyMjQsIDEwNywgMTgsIDE5LCAxNTksIDIyNCwgMTA3LCAxOCwgMTksIDIyNCwgMTA2LCAxOCwgMTksIAotICAgIDE1OSwgMjI0LCAxMDYsIDE4LCAxOSwgMjI0LCAxMTQsIDE4LCAxOSwgMTU5LCAyMjQsIDExNCwgMTgsIDE5LCAyMjQsIDExMywgCi0gICAgMTgsIDE5LCAxNTksIDIyNCwgMTEzLCAxOCwgMTksIDIxMSwgMTE2LCAyMjQsIDExMywgMTgsIDE5LCAyMjYsIDEwNSwgMTgsIAotICAgIDE5LCAxNTksIDIyNiwgMTA1LCAxOCwgMTksIDcyLCAyNDIsIDYwLCAxOCwgMTksIDIxNywgMjIsIDE4LCAxOSwgMjE3LCA5OSwgCi0gICAgMTgsIDE5LCAyMTYsIDExNywgMTgsIDE5LCAyMTYsIDEwMywgMTgsIDE5LCAxMTEsIDE4LCAxOSwgMjE2LCAxNywgMTgsIDE5LCAKLSAgICAyMTEsIDExNiwgMjE2LCAxNywgMTgsIDE5LCA3MiwgMjQ4LCA3NywgMTgsIDE5LCA3MiwgMjQ4LCAzLCAxOCwgMTksIDIxNywgCi0gICAgMTA1LCAxOCwgMTksIDIxNywgMTAxLCAxOCwgMTksIDIxNSwgNzgsIDE4LCAxOSwgMTU5LCAyMTUsIDc4LCAxOCwgMTksIAotICAgIDIxNSwgNjIsIDE4LCAxOSwgMTU5LCAyMTUsIDYyLCAxOCwgMTksIDIxNSwgNjEsIDE4LCAxOSwgMTU5LCAyMTUsIDYxLCAxOCwgCi0gICAgMTksIDEwNSwgMTgsIDE5LCAxNTksIDEwNSwgMTgsIDE5LCAyMTUsIDU0LCAxOCwgMTksIDE1OSwgMjE1LCA1NCwgMTgsIDE5LCAKLSAgICAyMTUsIDgwLCAxOCwgMTksIDE1OSwgMjE1LCA4MCwgMTgsIDE5LCAyMTUsIDc5LCAxOCwgMTksIDE1OSwgMjE1LCA3OSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjE1LCA3OSwgMTgsIDE5LCAyMTcsIDE1MiwgMTgsIDE5LCAyMTUsIDE1MSwgMTgsIDE5LCAyMTUsIAotICAgIDEzNSwgMTgsIDE5LCAyMTUsIDEzMywgMTgsIDE5LCAyMTUsIDE1NiwgMTgsIDE5LCAyMzQsIDE4MiwgMTgsIDE5LCAyMzUsIAotICAgIDcsIDE4LCAxOSwgMjM0LCA5MiwgMTgsIDE5LCAyMzQsIDgzLCAxOCwgMTksIDIzNCwgMjgsIDE4LCAxOSwgMjM0LCAxMCwgCi0gICAgMTgsIDE5LCAyMTEsIDExNiwgMjM0LCAxMCwgMTgsIDE5LCAxNzYsIDE4LCAxOSwgMjM1LCAxMCwgMTgsIDE5LCAyMzMsIAotICAgIDE3OCwgMTgsIDE5LCAxNTksIDIzMywgMTc4LCAxOCwgMTksIDIzMywgMTc2LCAxOCwgMTksIDE1OSwgMjMzLCAxNzYsIDE4LCAKLSAgICAxOSwgMjMzLCAxNzUsIDE4LCAxOSwgMTU5LCAyMzMsIDE3NSwgMTgsIDE5LCAyMzMsIDE3NCwgMTgsIDE5LCAxNTksIDIzMywgCi0gICAgMTc0LCAxOCwgMTksIDIzMywgMTczLCAxOCwgMTksIDE1OSwgMjMzLCAxNzMsIDE4LCAxOSwgMjMzLCAxODIsIDE4LCAxOSwgCi0gICAgMTU5LCAyMzMsIDE4MiwgMTgsIDE5LCAyMzMsIDE4MSwgMTgsIDE5LCAxNTksIDIzMywgMTgxLCAxOCwgMTksIDIyOSwgMTkwLCAKLSAgICAyMzMsIDE4MSwgMTgsIDE5LCAyMzUsIDIzLCAxOCwgMTksIDIzMywgMTgzLCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgMTc2LCAKLSAgICAxOCwgMTksIDIxOSwgMjcsIDIzNCwgODQsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAyMywgMTgsIDE5LCAyMTksIDI3LCAyMzQsIAotICAgIDI0OCwgMTgsIDE5LCAyNTAsIDE5MCwgMTgsIDE5LCAyNTEsIDMxLCAxOCwgMTksIDI1MCwgNTEsIDE4LCAxOSwgMjUwLCA0MSwgCi0gICAgMTgsIDE5LCAyNDksIDIzOCwgMTgsIDE5LCAyNDksIDE3NCwgMTgsIDE5LCAyMTEsIDExNiwgMjQ5LCAxNzQsIDE4LCAxOSwgCi0gICAgMjUxLCAzMywgMTgsIDE5LCAyNTEsIDMyLCAxOCwgMTksIDI0OSwgNzksIDE4LCAxOSwgMTU5LCAyNDksIDc5LCAxOCwgMTksIAotICAgIDI0OSwgNzcsIDE4LCAxOSwgMTU5LCAyNDksIDc3LCAxOCwgMTksIDI0OSwgNzYsIDE4LCAxOSwgMTU5LCAyNDksIDc2LCAxOCwgCi0gICAgMTksIDI0OSwgNzUsIDE4LCAxOSwgMTU5LCAyNDksIDc1LCAxOCwgMTksIDI0OSwgNzQsIDE4LCAxOSwgMTU5LCAyNDksIDc0LCAKLSAgICAxOCwgMTksIDI0OSwgODEsIDE4LCAxOSwgMTU5LCAyNDksIDgxLCAxOCwgMTksIDI0OSwgODAsIDE4LCAxOSwgMTU5LCAyNDksIAotICAgIDgwLCAxOCwgMTksIDIyOSwgMTkwLCAyNDksIDgwLCAxOCwgMTksIDI1MSwgNjYsIDE4LCAxOSwgMjIxLCAyMDksIDIxNiwgCi0gICAgMjEwLCAxOCwgMTksIDIzMSwgOTEsIDE4LCAxOSwgMjMxLCAyMzYsIDE4LCAxOSwgMjMwLCAyMzAsIDE4LCAxOSwgMjMwLCAKLSAgICAyMDEsIDE4LCAxOSwgMjMwLCAxNjEsIDE4LCAxOSwgMjMwLCAxMzIsIDE4LCAxOSwgMjExLCAxMTYsIDIzMCwgMTMyLCAxOCwgCi0gICAgMTksIDE4NCwgMTgsIDE5LCAyMzEsIDIzNywgMTgsIDE5LCAyMzAsIDQwLCAxOCwgMTksIDE1OSwgMjMwLCA0MCwgMTgsIDE5LCAKLSAgICAyMzAsIDM4LCAxOCwgMTksIDE1OSwgMjMwLCAzOCwgMTgsIDE5LCAyMzAsIDM3LCAxOCwgMTksIDE1OSwgMjMwLCAzNywgMTgsIAotICAgIDE5LCAyMzAsIDM2LCAxOCwgMTksIDE1OSwgMjMwLCAzNiwgMTgsIDE5LCAyMzAsIDM1LCAxOCwgMTksIDE1OSwgMjMwLCAzNSwgCi0gICAgMTgsIDE5LCAyMzAsIDQyLCAxOCwgMTksIDE1OSwgMjMwLCA0MiwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIDE1OSwgMjMwLCAKLSAgICA0MSwgMTgsIDE5LCAyMjksIDE5MCwgMjMwLCA0MSwgMTgsIDE5LCAxOTMsIDE4LCAxOSwgMTU5LCAxOTMsIDE4LCAxOSwgCi0gICAgMjMwLCAyMzQsIDE4LCAxOSwgMjUzLCAyMDUsIDE5MywgMTgsIDE5LCAyMjEsIDIwOSwgMTkzLCAxOCwgMTksIDIyOSwgMTA3LCAKLSAgICAxOCwgMTksIDIyOSwgMjI0LCAxOCwgMTksIDIyOCwgMjMzLCAxOCwgMTksIDIyOCwgMjA4LCAxOCwgMTksIDIyOCwgNzQsIAotICAgIDE4LCAxOSwgMjI4LCA2NCwgMTgsIDE5LCAyMTEsIDExNiwgMjI4LCA2NCwgMTgsIDE5LCAxOTcsIDE4LCAxOSwgMjI5LCAKLSAgICAyMjUsIDE4LCAxOSwgMjI3LCAxNzIsIDE4LCAxOSwgMTU5LCAyMjcsIDE3MiwgMTgsIDE5LCAyMjcsIDE3NCwgMTgsIDE5LCAKLSAgICAxNTksIDIyNywgMTc0LCAxOCwgMTksIDIyNywgMTczLCAxOCwgMTksIDE1OSwgMjI3LCAxNzMsIDE4LCAxOSwgMjI5LCAxOTAsIAotICAgIDIyNywgMTczLCAxOCwgMTksIDIzMCwgMjUsIDE4LCAxOSwgNzIsIDIyOSwgNzksIDE4LCAxOSwgMjI4LCAyMzgsIDE4LCAxOSwgCi0gICAgMjMzLCA1OCwgMTgsIDE5LCAyMzMsIDEzMywgMTgsIDE5LCAyMzIsIDI0MSwgMTgsIDE5LCAyMzIsIDIyNywgMTgsIDE5LCAKLSAgICAyMzIsIDE1NiwgMTgsIDE5LCAyMzIsIDEyNywgMTgsIDE5LCAyMTEsIDExNiwgMjMyLCAxMjcsIDE4LCAxOSwgMjMzLCAxMzUsIAotICAgIDE4LCAxOSwgMjMzLCAxMzQsIDE4LCAxOSwgMjMyLCA2OCwgMTgsIDE5LCAxNTksIDIzMiwgNjgsIDE4LCAxOSwgMjMyLCA2NywgCi0gICAgMTgsIDE5LCAxNTksIDIzMiwgNjcsIDE4LCAxOSwgMjMyLCA2NiwgMTgsIDE5LCAxNTksIDIzMiwgNjYsIDE4LCAxOSwgMjMyLCAKLSAgICA2NSwgMTgsIDE5LCAxNTksIDIzMiwgNjUsIDE4LCAxOSwgMjMyLCA2NCwgMTgsIDE5LCAxNTksIDIzMiwgNjQsIDE4LCAxOSwgCi0gICAgMjMyLCA3MCwgMTgsIDE5LCAxNTksIDIzMiwgNzAsIDE4LCAxOSwgMjMyLCA2OSwgMTgsIDE5LCAxNTksIDIzMiwgNjksIDE4LCAKLSAgICAxOSwgMTU2LCAxOCwgMTksIDE1OSwgMTU2LCAxOCwgMTksIDE0NywgMTU2LCAxOCwgMTksIDIyMSwgMTgxLCAxOCwgMTksIAotICAgIDIyMiwgMjksIDE4LCAxOSwgMjE5LCAxOTEsIDE4LCAxOSwgMjE5LCAxNzUsIDE4LCAxOSwgMjE5LCA1OCwgMTgsIDE5LCAKLSAgICAyMTksIDQwLCAxOCwgMTksIDIxMSwgMTE2LCAyMTksIDQwLCAxOCwgMTksIDIwNiwgMTgsIDE5LCAyMjIsIDMxLCAxOCwgMTksIAotICAgIDIxNywgMjQ5LCAxOCwgMTksIDE1OSwgMjE3LCAyNDksIDE4LCAxOSwgMjE3LCAyNDMsIDE4LCAxOSwgMTU5LCAyMTcsIDI0MywgCi0gICAgMTgsIDE5LCAyMTcsIDI0MiwgMTgsIDE5LCAxNTksIDIxNywgMjQyLCAxOCwgMTksIDIxNywgMjM4LCAxOCwgMTksIDE1OSwgCi0gICAgMjE3LCAyMzgsIDE4LCAxOSwgMjE3LCAyMzcsIDE4LCAxOSwgMTU5LCAyMTcsIDIzNywgMTgsIDE5LCAyMTcsIDI1MywgMTgsIAotICAgIDE5LCAxNTksIDIxNywgMjUzLCAxOCwgMTksIDIxNywgMjUyLCAxOCwgMTksIDE1OSwgMjE3LCAyNTIsIDE4LCAxOSwgMjI5LCAKLSAgICAxOTAsIDIxNywgMjUyLCAxOCwgMTksIDIyMiwgOTEsIDE4LCAxOSwgMjUzLCAyMDUsIDIyMiwgOTEsIDE4LCAxOSwgMjE3LCAKLSAgICAyNTQsIDE4LCAxOSwgMjUxLCAyMTgsIDIyMiwgOTEsIDE4LCAxOSwgMjMwLCAxMjcsIDIxOSwgMTA4LCAxOCwgMTksIDIyOSwgCi0gICAgMTkwLCAyMTksIDk5LCAxOCwgMTksIDIyOSwgMTkwLCAyMjIsIDg5LCAxOCwgMTksIDIyOSwgMTkwLCAyMTgsIDIzNSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjE4LCA4NiwgMTgsIDE5LCAyMjksIDE5MCwgMjE5LCA5OCwgMTgsIDE5LCAyMjksIDE5MCwgMjIxLCAKLSAgICAxODQsIDE4LCAxOSwgMjIwLCA2MywgMTgsIDE5LCAyMjAsIDMyLCAxOCwgMTksIDIyMCwgMjcsIDE4LCAxOSwgMjIwLCA3LCAKLSAgICAxOCwgMTksIDIyMCwgMSwgMTgsIDE5LCAyMjAsIDEwMiwgMTgsIDE5LCAyMjAsIDk4LCAxOCwgMTksIDIxOSwgMjA2LCAxOCwgCi0gICAgMTksIDE1OSwgMjE5LCAyMDYsIDE4LCAxOSwgMjE5LCAyMDUsIDE4LCAxOSwgMTU5LCAyMTksIDIwNSwgMTgsIDE5LCAyMTksIAotICAgIDIwNCwgMTgsIDE5LCAxNTksIDIxOSwgMjA0LCAxOCwgMTksIDIxOSwgMjAzLCAxOCwgMTksIDE1OSwgMjE5LCAyMDMsIDE4LCAKLSAgICAxOSwgMjE5LCAyMDIsIDE4LCAxOSwgMTU5LCAyMTksIDIwMiwgMTgsIDE5LCAyMTksIDIwOCwgMTgsIDE5LCAxNTksIDIxOSwgCi0gICAgMjA4LCAxOCwgMTksIDIxOSwgMjA3LCAxOCwgMTksIDE1OSwgMjE5LCAyMDcsIDE4LCAxOSwgMjIwLCAxMDQsIDE4LCAxOSwgCi0gICAgMjExLCA0NywgMTgsIDE5LCAyMTEsIDEwMSwgMTgsIDE5LCAyMTEsIDgsIDE4LCAxOSwgMjEwLCAyNTUsIDE4LCAxOSwgMjEwLCAKLSAgICAyNDQsIDE4LCAxOSwgMjEwLCAyMjksIDE4LCAxOSwgMjExLCAxMTYsIDIxMCwgMjI5LCAxOCwgMTksIDE5MSwgMTgsIDE5LCAKLSAgICAyMTEsIDEwMywgMTgsIDE5LCAyMTAsIDE3NCwgMTgsIDE5LCAxNTksIDIxMCwgMTc0LCAxOCwgMTksIDIxMCwgMTczLCAxOCwgCi0gICAgMTksIDE1OSwgMjEwLCAxNzMsIDE4LCAxOSwgMjEwLCAxNzIsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MiwgMTgsIDE5LCAyMTAsIAotICAgIDE3MSwgMTgsIDE5LCAxNTksIDIxMCwgMTcxLCAxOCwgMTksIDIxMCwgMTcwLCAxOCwgMTksIDE1OSwgMjEwLCAxNzAsIDE4LCAKLSAgICAxOSwgMjEwLCAxNzYsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NiwgMTgsIDE5LCAyMTAsIDE3NSwgMTgsIDE5LCAxNTksIDIxMCwgCi0gICAgMTc1LCAxOCwgMTksIDIyOSwgMTkwLCAyMTAsIDE3NSwgMTgsIDE5LCAyMTEsIDExNywgMTgsIDE5LCAyNTIsIDQsIDIxMSwgCi0gICAgMTE3LCAxOCwgMTksIDE1OSwgMjExLCAxMTcsIDE4LCAxOSwgMjIxLCAyMDksIDIxMSwgOCwgMTgsIDE5LCAyMjMsIDEyOCwgCi0gICAgMTgsIDE5LCAyMjMsIDIyMywgMjIzLCAxMjgsIDE4LCAxOSwgMTU5LCAyMzMsIDU4LCAxOCwgMTksIDIyMywgMTgzLCAxOCwgCi0gICAgMTksIDIyMywgMzUsIDE4LCAxOSwgMjIyLCAyMzksIDE4LCAxOSwgMjIyLCAyMTEsIDE4LCAxOSwgMjIyLCAxOTcsIDE4LCAKLSAgICAxOSwgMTU5LCAyMzIsIDE1NiwgMTgsIDE5LCAyMDUsIDE4LCAxOSwgMjIzLCAxODQsIDE4LCAxOSwgMTU5LCAyMzMsIDEzNSwgCi0gICAgMTgsIDE5LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTksIDIyMiwgMTA4LCAxOCwgMTksIDE1MywgMTgsIDE5LCAxNTksIDE1MywgCi0gICAgMTgsIDE5LCAxNDcsIDE1MywgMTgsIDE5LCAyNDQsIDE1NCwgMTgsIDE5LCAyNDQsIDE5MywgMTgsIDE5LCAyNDQsIDEyMSwgCi0gICAgMTgsIDE5LCAyNDQsIDEwOCwgMTgsIDE5LCAyNDQsIDQzLCAxOCwgMTksIDI0NCwgMzQsIDE4LCAxOSwgMjQ0LCAxOTYsIDE4LCAKLSAgICAxOSwgMjQ0LCAxOTUsIDE4LCAxOSwgMjQzLCAyMTIsIDE4LCAxOSwgMTU5LCAyNDMsIDIxMiwgMTgsIDE5LCAyNDUsIDYsIAotICAgIDE4LCAxOSwgMjE2LCAxOTUsIDE4LCAxOSwgMjMwLCAyMywgMjE2LCAxOTUsIDE4LCAxOSwgMjE2LCAxNzUsIDE4LCAxOSwgCi0gICAgMjMwLCAyMywgMjE2LCAxNzUsIDE4LCAxOSwgMjE2LCAxNzEsIDE4LCAxOSwgMjMwLCAyMywgMjE2LCAxNzEsIDE4LCAxOSwgCi0gICAgMjE2LCAxNTYsIDE4LCAxOSwgMjE2LCAxNTMsIDE4LCAxOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMDcsIDE4LCAxOSwgCi0gICAgMjE2LCAxMjcsIDE4LCAxOSwgMTU5LCAyMTYsIDEyNywgMTgsIDE5LCAyMTYsIDIxMCwgMTgsIDE5LCAyMTUsIDE0MiwgMTgsIAotICAgIDE5LCAyMTUsIDE0MCwgMTgsIDE5LCAyMTUsIDEzOSwgMTgsIDE5LCAyMTUsIDE0NCwgMTgsIDE5LCAyMTUsIDE0NSwgMTgsIAotICAgIDE5LCAyMTUsIDUyLCAxOCwgMTksIDIxNSwgNTEsIDE4LCAxOSwgMjE1LCA1MCwgMTgsIDE5LCAyMTUsIDUzLCAxOCwgMTksIAotICAgIDIyNywgMTkzLCAyNDEsIDIzOCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCAxODAsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgCi0gICAgMTYxLCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIDY4LCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIDUzLCAxOCwgMTksIDIyNywgCi0gICAgMTkzLCAxNjIsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MiwgNDYsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MiwgNjAsIDE4LCAxOSwgCi0gICAgMjI3LCAxOTIsIDI0MiwgNjAsIDE4LCAxOSwgMjQxLCAxNTQsIDE4LCAxOSwgMjI0LCA4NCwgMTgsIDE5LCAyMjQsIDUzLCAKLSAgICAxOCwgMTksIDIyNCwgNDgsIDE4LCAxOSwgMjI0LCA0MiwgMTgsIDE5LCAyMjQsIDM3LCAxOCwgMTksIDIyNCwgODgsIDE4LCAKLSAgICAxOSwgMjI0LCA4NywgMTgsIDE5LCAyMjQsIDk2LCAxOCwgMTksIDIxNiwgNTUsIDE4LCAxOSwgMjE2LCA1MywgMTgsIDE5LCAKLSAgICAyMTYsIDUyLCAxOCwgMTksIDIxNiwgNTYsIDE4LCAxOSwgMTU5LCAyMjMsIDEyOCwgMTgsIDE5LCAxNTksIDIyMywgMzUsIAotICAgIDE4LCAxOSwgMTU5LCAyMjIsIDIxMSwgMTgsIDE5LCAxNTksIDIwNSwgMTgsIDE5LCAyMjksIDc1LCAxOCwgMTksIDIyOSwgCi0gICAgMjcsIDE4LCAxOSwgMjI5LCAyMywgMTgsIDE5LCAyMjksIDQsIDE4LCAxOSwgMjI4LCAyNTUsIDE4LCAxOSwgMjI5LCA3NywgCi0gICAgMTgsIDE5LCAyMjksIDc2LCAxOCwgMTksIDIyOSwgNzksIDE4LCAxOSwgMjI4LCAxMDMsIDE4LCAxOSwgMjIxLCAyMDksIAotICAgIDIyMCwgNjMsIDE4LCAxOSwgMjIxLCAyMDksIDIyMCwgMzIsIDE4LCAxOSwgMjIxLCAyMDksIDIyMCwgNywgMTgsIDE5LCAKLSAgICAyMjEsIDIwOSwgMjIwLCAxMDIsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTk1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAotICAgIDE3NSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxNTYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjA4LCAxOCwgMTksIDIxMSwgCi0gICAgMjEzLCAyMTYsIDIxMCwgMTgsIDE5LCAyMzIsIDI0OCwgMTgsIDE5LCAyMzIsIDI0NywgMTgsIDE5LCAyMzIsIDI0NiwgMTgsIAotICAgIDE5LCAyMzIsIDI0NSwgMTgsIDE5LCAyMzIsIDI1NCwgMTgsIDE5LCAyMzIsIDI1MywgMTgsIDE5LCAyMzIsIDI1NSwgMTgsIAotICAgIDE5LCAyMTYsIDIwOSwgMjE2LCAxOTUsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTc1LCAxOCwgMTksIDIxNiwgMjA5LCAKLSAgICAyMTYsIDE3MSwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAxNTYsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTUzLCAxOCwgMTksIAotICAgIDIxNiwgMjA5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAyMDcsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgCi0gICAgMjEwLCAxOCwgMTksIDI1NCwgMTg5LCAyNTMsIDE1OCwgMTgsIDE5LCAyNTEsIDIxOCwgNzUsIDE4LCAxOSwgMjUxLCAyMTgsIAotICAgIDczLCAxOCwgMTksIDI1MSwgMjE4LCA3NiwgMTgsIDE5LCAyNTEsIDIxOCwgNjEsIDE4LCAxOSwgMjUxLCAyMTgsIDIxMiwgCi0gICAgMjIsIDE4LCAxOSwgMjUxLCAyMTgsIDIxMSwgMjUwLCAxOCwgMTksIDI1MSwgMjE4LCAyMTEsIDIyNywgMTgsIDE5LCAyNTEsIAotICAgIDIxOCwgMjEyLCA2NSwgMTgsIDE5LCAyNTEsIDIxOCwgMjI5LCAxMDcsIDE4LCAxOSwgMjUxLCAyMTgsIDIyOCwgMjMzLCAxOCwgCi0gICAgMTksIDI1MSwgMjE4LCAyMjgsIDc0LCAxOCwgMTksIDI1MSwgMjE4LCAxOTcsIDE4LCAxOSwgMjUxLCAyMTgsIDIzNCwgMTgyLCAKLSAgICAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDkyLCAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDI4LCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICAxNzYsIDE4LCAxOSwgMjIxLCAyMDksIDI0MSwgMjM4LCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDE4MCwgMTgsIDE5LCAyMjEsIAotICAgIDIwOSwgMjQxLCA2OCwgMTgsIDE5LCAyMjEsIDIwOSwgMTYyLCAxOCwgMTksIDcyLCAyNDIsIDIyMCwgMTgsIDE5LCA3MiwgCi0gICAgMjQyLCAyMjQsIDE4LCAxOSwgNzIsIDI0MiwgMjM2LCAxOCwgMTksIDcyLCAyNDIsIDIzNSwgMTgsIDE5LCA3MiwgMjQyLCAKLSAgICAyMjUsIDE4LCAxOSwgNzIsIDI0MiwgMjQ5LCAxOCwgMTksIDcyLCAyMjIsIDE0MCwgMTgsIDE5LCA3MiwgMjIyLCAyMTEsIAotICAgIDE4LCAxOSwgNzIsIDIyMywgMTI4LCAxOCwgMTksIDcyLCAyMjMsIDEwOCwgMTgsIDE5LCA3MiwgMjIzLCAzNSwgMTgsIDE5LCAKLSAgICA3MiwgMjA1LCAxOCwgMTksIDcyLCAyMTEsIDE5NSwgMTgsIDE5LCA3MiwgMjExLCAyMjcsIDE4LCAxOSwgNzIsIDIxMiwgMjIsIAotICAgIDE4LCAxOSwgNzIsIDIxMiwgMTcsIDE4LCAxOSwgNzIsIDIxMSwgMjUwLCAxOCwgMTksIDcyLCAyMTIsIDY1LCAxOCwgMTksIAotICAgIDcyLCAyNDAsIDE5NCwgMTgsIDE5LCA3MiwgMjQwLCAxOTUsIDE4LCAxOSwgNzIsIDI0MCwgMTk4LCAxOCwgMTksIDcyLCAKLSAgICAyNDAsIDE5NywgMTgsIDE5LCA3MiwgMjQwLCAxOTYsIDE4LCAxOSwgNzIsIDI0MCwgMjAwLCAxOCwgMTksIDcyLCAyMTYsIAotICAgIDEzNiwgMTgsIDE5LCA3MiwgMjE2LCAxNTYsIDE4LCAxOSwgNzIsIDIxNiwgMTk1LCAxOCwgMTksIDcyLCAyMTYsIDE5NCwgCi0gICAgMTgsIDE5LCA3MiwgMjE2LCAxNzUsIDE4LCAxOSwgNzIsIDIxNiwgMjA4LCAxOCwgMTksIDcyLCAyMTUsIDEyMywgMTgsIDE5LCAKLSAgICA3MiwgMjE1LCAxMzMsIDE4LCAxOSwgNzIsIDIxNSwgMTUxLCAxOCwgMTksIDcyLCAyMTUsIDE1MCwgMTgsIDE5LCA3MiwgCi0gICAgMjE1LCAxMzUsIDE4LCAxOSwgNzIsIDIxNSwgMTU2LCAxOCwgMTksIDcyLCAyMjQsIDE1MCwgMTgsIDE5LCA3MiwgMjI1LCAKLSAgICAxNiwgMTgsIDE5LCA3MiwgMjI1LCAyMjEsIDE4LCAxOSwgNzIsIDIyNSwgMjExLCAxOCwgMTksIDcyLCAyMjUsIDEwOCwgMTgsIAotICAgIDE5LCA3MiwgMTkwLCAxOCwgMTksIDcyLCAyMjYsIDEwNSwgMTgsIDE5LCA3MiwgMjQyLCAxMTMsIDE4LCAxOSwgNzIsIDI0MiwgCi0gICAgMTc0LCAxOCwgMTksIDcyLCAyNDMsIDYyLCAxOCwgMTksIDcyLCAyNDMsIDU1LCAxOCwgMTksIDcyLCAyNDIsIDIxNCwgMTgsIAotICAgIDE5LCA3MiwgMjQzLCAxMzUsIDE4LCAxOSwgNzIsIDIzNCwgMTAwLCAxOCwgMTksIDcyLCAyMzQsIDEwNSwgMTgsIDE5LCA3MiwgCi0gICAgMjM0LCAxMTksIDE4LCAxOSwgNzIsIDIzNCwgMTE4LCAxOCwgMTksIDcyLCAyMzQsIDExMiwgMTgsIDE5LCA3MiwgMjM0LCAKLSAgICAxMzIsIDE4LCAxOSwgNzIsIDIzNCwgNDEsIDE4LCAxOSwgNzIsIDIzNCwgNDIsIDE4LCAxOSwgNzIsIDIzNCwgNDUsIDE4LCAKLSAgICAxOSwgNzIsIDIzNCwgNDQsIDE4LCAxOSwgNzIsIDIzNCwgNDMsIDE4LCAxOSwgNzIsIDIzNCwgNDYsIDE4LCAxOSwgNzIsIAotICAgIDIzNCwgNDcsIDE4LCAxOSwgNzIsIDIyNywgMjM3LCAxOCwgMTksIDcyLCAyMjgsIDc0LCAxOCwgMTksIDcyLCAyMjksIDEwNywgCi0gICAgMTgsIDE5LCA3MiwgMjI5LCAxMDMsIDE4LCAxOSwgNzIsIDIyOCwgMjMzLCAxOCwgMTksIDcyLCAxOTcsIDE4LCAxOSwgNzIsIAotICAgIDIzMCwgMTAyLCAxOCwgMTksIDcyLCAyMzAsIDE2MSwgMTgsIDE5LCA3MiwgMjMxLCA5MSwgMTgsIDE5LCA3MiwgMjMxLCA4MCwgCi0gICAgMTgsIDE5LCA3MiwgMjMwLCAyMzAsIDE4LCAxOSwgNzIsIDE4NCwgMTgsIDE5LCA3MiwgMjEwLCAyMTIsIDE4LCAxOSwgNzIsIAotICAgIDIxMCwgMjQ0LCAxOCwgMTksIDcyLCAyMTEsIDQ3LCAxOCwgMTksIDcyLCAyMTEsIDQ0LCAxOCwgMTksIDcyLCAyMTEsIDgsIAotICAgIDE4LCAxOSwgNzIsIDE5MSwgMTgsIDE5LCA3MiwgMjM1LCA1MSwgMTgsIDE5LCAyMjEsIDIwOSwgMjM1LCA1MSwgMTgsIDE5LCAKLSAgICA3MiwgMjM1LCA2OCwgMTgsIDE5LCA3MiwgMjM1LCAxMjYsIDE4LCAxOSwgNzIsIDIzNSwgMTI0LCAxOCwgMTksIDcyLCAyMzUsIAotICAgIDEwOCwgMTgsIDE5LCAyMjEsIDIwOSwgMjM1LCAxMDgsIDE4LCAxOSwgNzIsIDIzNSwgMTQxLCAxOCwgMTksIDcyLCAyMzUsIAotICAgIDgxLCAxOCwgMTksIDcyLCAyMzUsIDg1LCAxOCwgMTksIDcyLCAyMzUsIDk1LCAxOCwgMTksIDcyLCAyMzUsIDk0LCAxOCwgCi0gICAgMTksIDcyLCAyMzUsIDkzLCAxOCwgMTksIDcyLCAyMzUsIDk2LCAxOCwgMTksIDcyLCAyMzIsIDk4LCAxOCwgMTksIDcyLCAKLSAgICAyMzIsIDE1NiwgMTgsIDE5LCA3MiwgMjMzLCA1OCwgMTgsIDE5LCA3MiwgMjMzLCA1MCwgMTgsIDE5LCA3MiwgMjMyLCAyNDEsIAotICAgIDE4LCAxOSwgNzIsIDIzMywgMTM1LCAxOCwgMTksIDcyLCAyNDcsIDE0OSwgMTgsIDE5LCA3MiwgMjQ3LCAxNTAsIDE4LCAxOSwgCi0gICAgNzIsIDI0NywgMTU1LCAxOCwgMTksIDcyLCAyNDcsIDE1NCwgMTgsIDE5LCA3MiwgMjQ3LCAxNTEsIDE4LCAxOSwgNzIsIAotICAgIDI0NywgMTU2LCAxOCwgMTksIDcyLCAyMzIsIDI0NCwgMTgsIDE5LCA3MiwgMjMyLCAyNDYsIDE4LCAxOSwgNzIsIDIzMiwgCi0gICAgMjUwLCAxOCwgMTksIDcyLCAyMzIsIDI0OSwgMTgsIDE5LCA3MiwgMjMyLCAyNDgsIDE4LCAxOSwgNzIsIDIzMiwgMjU0LCAKLSAgICAxOCwgMTksIDcyLCAyMTYsIDUwLCAxOCwgMTksIDcyLCAyMTYsIDUyLCAxOCwgMTksIDcyLCAyMTYsIDU1LCAxOCwgMTksIAotICAgIDcyLCAyMTYsIDU0LCAxOCwgMTksIDcyLCAyMTYsIDUzLCAxOCwgMTksIDcyLCAyMTYsIDU2LCAxOCwgMTksIDcyLCAyMTYsIAotICAgIDQ1LCAxOCwgMTksIDcyLCAyMTYsIDQ2LCAxOCwgMTksIDcyLCAyMTYsIDU4LCAxOCwgMTksIDcyLCAyMTYsIDU3LCAxOCwgCi0gICAgMTksIDcyLCAyMTYsIDQ3LCAxOCwgMTksIDcyLCAyMTYsIDU5LCAxOCwgMTksIDcyLCAyMTAsIDEzLCAxOCwgMTksIDcyLCAKLSAgICAyMTAsIDIzLCAxOCwgMTksIDcyLCAyMTAsIDk0LCAxOCwgMTksIDcyLCAyMTAsIDkyLCAxOCwgMTksIDcyLCAyMTAsIDQ0LCAKLSAgICAxOCwgMTksIDcyLCAyMTAsIDExNiwgMTgsIDE5LCA3MiwgMjEwLCAxNTksIDE4LCAxOSwgNzIsIDY1LCAyMTAsIDE1OSwgMTgsIAotICAgIDE5LCA3MiwgMjQ2LCAyOCwgMTgsIDE5LCA3MiwgMjQ2LCAyOSwgMTgsIDE5LCA3MiwgMjQ2LCAzNiwgMTgsIDE5LCA3MiwgCi0gICAgMjQ2LCAzNSwgMTgsIDE5LCA3MiwgMjQ2LCAzMSwgMTgsIDE5LCA3MiwgMjQ2LCAzOCwgMTgsIDE5LCA3MiwgMjE4LCA4MywgCi0gICAgMTgsIDE5LCA3MiwgMjE5LCA1OCwgMTgsIDE5LCA3MiwgMjIxLCAxODEsIDE4LCAxOSwgNzIsIDIyMSwgMTcwLCAxOCwgMTksIAotICAgIDcyLCAyMTksIDE5MSwgMTgsIDE5LCA3MiwgMjA2LCAxOCwgMTksIDcyLCAyMTksIDIyNSwgMTgsIDE5LCA3MiwgMjIwLCA3LCAKLSAgICAxOCwgMTksIDcyLCAyMjAsIDYzLCAxOCwgMTksIDcyLCAyMjAsIDYxLCAxOCwgMTksIDcyLCAyMjAsIDMyLCAxOCwgMTksIAotICAgIDcyLCAyMjAsIDEwMiwgMTgsIDE5LCA3MiwgMjIwLCAxMDQsIDE4LCAxOSwgNzIsIDIxNSwgMTYzLCAxOCwgMTksIDcyLCAKLSAgICAyMTUsIDE2NiwgMTgsIDE5LCA3MiwgMjE1LCAxNzgsIDE4LCAxOSwgNzIsIDIxNSwgMTc3LCAxOCwgMTksIDcyLCAyMTUsIAotICAgIDE2NywgMTgsIDE5LCA3MiwgMjE1LCAxODMsIDE4LCAxOSwgNzIsIDI1MCwgNjksIDE4LCAxOSwgNzIsIDI1MCwgODYsIDE4LCAKLSAgICAxOSwgNzIsIDI1MCwgMTMxLCAxOCwgMTksIDcyLCAyNTAsIDEyOCwgMTgsIDE5LCA3MiwgMjUwLCAxMTAsIDE4LCAxOSwgNzIsIAotICAgIDI1MCwgMTU3LCAxOCwgMTksIDcyLCAyMTUsIDEyNiwgMTgsIDE5LCA3MiwgMjE1LCAxMjcsIDE4LCAxOSwgNzIsIDIxNSwgCi0gICAgMTMwLCAxOCwgMTksIDcyLCAyMTUsIDEyOSwgMTgsIDE5LCA3MiwgMjE1LCAxMjgsIDE4LCAxOSwgNzIsIDIxNSwgMTMxLCAKLSAgICAxOCwgMTksIDI1MCwgMTExLCA1MCwgMTgsIDE5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDE4LCAxOSwgMjI0LCA4MCwgMTgsIAotICAgIDE5LCAyMjksIDczLCAxOCwgMTksIDIyOCwgMTAwLCAxOCwgMTksIDIyOCwgOTksIDE4LCAxOSwgMjI4LCA5OCwgMTgsIDE5LCAKLSAgICAyMjgsIDk3LCAxOCwgMTksIDIyOCwgMTAyLCAxOCwgMTksIDIyOCwgMTAxLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNSwgCi0gICAgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjQsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIzLCAxOCwgMTksIDIxMSwgMjEzLCAKLSAgICAyMTYsIDEyMiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjEsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI4LCAxOCwgMTksIAotICAgIDIxMSwgMjEzLCAyMTYsIDEyNywgMTgsIDE5LCAyMTEsIDIxMywgNDAsIDIxNiwgMjEwLCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICAyMTIsIDk4LCAyMjYsIDIyNiwgMjE5LCAxOSwgNzgsIDIyNiwgMjI2LCAxLCAyNTIsIDQ4LCAyMjYsIDIyNiwgMSwgMjMyLCAKLSAgICA4NywgMjI2LCAyMjYsIDEsIDI0NCwgMTUxLCAyMjYsIDIyNiwgMSwgMjIyLCAxNSwgMjI2LCAyMjYsIDEsIDIyOCwgMTkzLCAKLSAgICAyMjYsIDIyNiwgMSwgMjE0LCAyMjYsIDIyNiwgMjI2LCAxLCAyNDgsIDE5NywgMjI2LCAyMjYsIDEsIDIxNiwgODAsIDIyNiwgCi0gICAgMjI2LCAxLCAyNDksIDIyOSwgMjI2LCAyMjYsIDEsIDI1MCwgMTgwLCAyMjYsIDIyNiwgMSwgMjMwLCA5MSwgMjI2LCAyMjYsIAotICAgIDEsIDI0MiwgMTU2LCAyMjYsIDIyNiwgMSwgMjI5LCA2MywgMjI2LCAyMjYsIDEsIDIxOCwgMTIyLCAyMjYsIDIyNiwgMSwgCi0gICAgMjIyLCAxMzUsIDIyNiwgMjI2LCAxLCAyNTQsIDE5OCwgMjI2LCAyMjYsIDEsIDIyNiwgMTg3LCAyMjYsIDIyNiwgMSwgMjE0LCAKLSAgICAxNTAsIDIyNiwgMjI2LCAxLCAyNDUsIDIzMSwgMjI2LCAyMjYsIDEsIDIzNSwgMTg4LCAyMjYsIDIyNiwgMSwgMjQ1LCAyMzIsIAotICAgIDIyNiwgMjI2LCAxLCAyMjYsIDE1OCwgMjI2LCAyMjYsIDEsIDIxNCwgMjA2LCAyMjYsIDIyNiwgMSwgMjM2LCAzOSwgMjI2LCAKLSAgICAyMjYsIDEsIDI0NSwgMjI5LCAyMjYsIDIyNiwgMSwgMjI1LCAyMDIsIDIyNiwgMjI2LCAyNDQsIDE1MCwgNzgsIDIyNiwgCi0gICAgMjI2LCAyMjMsIDQ5LCAyNDQsIDE1MCwgNzgsIDE3OCwgMSwgMjQ0LCAxNDEsIDI0NCwgMTMzLCAyNDQsIDE1NSwgMjQ1LCA2LCAKLSAgICAxNzgsIDEsIDIxNCwgMTA1LCAxNzgsIDEsIDIxNCwgMTM1LCAyMTQsIDE1MSwgNzAsIDE3OCwgMSwgMjEwLCAyMTQsIDE3OCwgCi0gICAgMSwgMjExLCAxMTcsIDE3OCwgMSwgMjEyLCA5OCwgMTc4LCAxLCAyMTYsIDEzMCwgMjE2LCAxMjksIDIxNiwgMTUxLCAxNzgsIAotICAgIDEsIDI0NSwgNTksIDE3OCwgMSwgMjU0LCA5MywgNjEsIDE3OCwgMSwgMjI2LCAxNDMsIDc2LCAxNzgsIDEsIDI1NSwgMTcsIAotICAgIDYxLCAxNzgsIDEsIDI1NCwgMjI3LCAxNzgsIDEsIDIzMiwgMTMzLCA3NiwgMTc4LCAxLCAyMTksIDI0NCwgNzYsIDE3OCwgMSwgCi0gICAgNzYsIDE3OCwgMSwgMjI2LCAyMzQsIDE3OCwgMSwgMjI2LCAxOTYsIDE3OCwgMSwgMjIzLCAxNjQsIDIyMywgMTc3LCAyMjMsIAotICAgIDk0LCAxNTMsIDE3OCwgMSwgMjM0LCAxOTMsIDE3OCwgMSwgMjUwLCAxNzcsIDE3OCwgMSwgMjM0LCAxOTQsIDIzNSwgMjMsIAotICAgIDE3OCwgMSwgMjQzLCAyMDIsIDE3OCwgMSwgMjQ1LCAxMzgsIDE3OCwgMSwgMjQzLCA1OCwgMjQyLCA2NiwgMjQzLCAyMDIsIAotICAgIDE3OCwgMSwgMjQzLCA5NiwgMTc4LCAxLCAyMTEsIDE4OCwgMjExLCAxODIsIDIxMiwgOTgsIDE3OCwgMSwgMjQyLCAzOCwgCi0gICAgMjQyLCA2MCwgMTc4LCAxLCAyNDIsIDQyLCAyNDIsIDYwLCAxNzgsIDEsIDIzMiwgMTM1LCAyNDIsIDYwLCAxNzgsIDEsIAotICAgIDIxOSwgMjQ3LCAyNDIsIDYwLCAxNzgsIDEsIDIyOSwgMTg1LCAyMjcsIDE1NywgMjI5LCAxODYsIDIzMCwgMjUsIDE3OCwgMSwgCi0gICAgMjE5LCAyNDUsIDIzMCwgMjUsIDE3OCwgMSwgMjQ2LCAxMTUsIDE3OCwgMSwgMjM1LCAxNjgsIDIzNSwgMTcyLCAyMzUsIAotICAgIDE2MiwgNzMsIDE3OCwgMSwgNzUsIDE3OCwgMSwgMjM1LCAxMTcsIDIzNSwgMTQ0LCAxNzgsIDEsIDI0MywgNDMsIDE3OCwgMSwgCi0gICAgMjMyLCAxMzYsIDI1NCwgMjQzLCAxNzgsIDEsIDIxOSwgMjQ5LCA2MSwgMTc4LCAxLCAyMzUsIDE1NCwgMjQ1LCAxMTMsIAotICAgIDE3OCwgMSwgMjI1LCAxNjQsIDIyNSwgMTg2LCAyMjYsIDEwNSwgMTc4LCAxLCAyNTQsIDE2MywgMjQ1LCAxMTEsIDE3OCwgMSwgCi0gICAgMjE5LCAyNCwgMjIyLCA5MSwgMTc4LCAxLCAyMTksIDE3OSwgMjMyLCAxMzIsIDIyMiwgOTEsIDE3OCwgMSwgMjE5LCAyNDMsIAotICAgIDIyMiwgOTEsIDE3OCwgMSwgMjUxLCA2NiwgMTc4LCAxLCAyMTAsIDE1OSwgMTc4LCAxLCAyMTYsIDYzLCAyMTYsIDczLCAKLSAgICAyMTUsIDQxLCAyMTcsIDE1MiwgMTc4LCAxLCAyMTksIDI0MiwgMjE3LCAxNTIsIDE3OCwgMSwgMjQ5LCA2MCwgMTc4LCAxLCAKLSAgICAyNTIsIDMxLCAyNTIsIDM0LCAyNTEsIDIyNCwgMjUzLCAxNTgsIDE3OCwgMSwgMjE5LCAyNDgsIDI1MywgMTU4LCAxNzgsIDEsIAotICAgIDI0NiwgMTE0LCAxNzgsIDEsIDIyNiwgMTcxLCAxNzgsIDEsIDI0NSwgMTk2LCAyNDUsIDE5OCwgNzUsIDE3OCwgMSwgMjMxLCAKLSAgICAxNzgsIDIzMSwgMTg2LCAxOTMsIDE3OCwgMSwgMjMyLCAxMzQsIDE5MywgMTc4LCAxLCAyMTksIDI0NiwgMTkzLCAxNzgsIDEsIAotICAgIDIzMywgNzMsIDIzMywgMTE0LCAyMzIsIDE0MywgMTU2LCAxNzgsIDEsIDI0NiwgMTE2LCAxNzgsIDEsIDIzNSwgMjMwLCAKLSAgICAxNzgsIDEsIDIzNSwgMjMxLCAxNzgsIDEsIDI0OCwgMjEwLCAyNDgsIDIxNSwgMjQ5LCA2MCwgMTc4LCAxLCAyMjYsIDEzOCwgCi0gICAgMjQ1LCA1OCwgNzYsIDE3OCwgMSwgMjQ1LCAyMjcsIDE3OCwgMSwgMjM1LCAxODcsIDE3OCwgMSwgMjQ5LCA3OCwgMTc4LCAxLCAKLSAgICAyNTEsIDE3LCAxNzgsIDEsIDI1MCwgMTg5LCAxNzgsIDEsIDIxOCwgMTYxLCAxNzgsIDEsIDIzMiwgMTMxLCAxNzgsIDEsIAotICAgIDIxOSwgMjQxLCAxNzgsIDEsIDI0MCwgMTEwLCAxNzgsIDEsIDIyNCwgOTYsIDE3OCwgMSwgMjExLCAxNzgsIDE3OCwgMjE5LCAKLSAgICAxNTUsIDIyNCwgMTQwLCAxNzgsIDIzMCwgODUsIDIyNCwgMTQwLCAxNzgsIDI0OSwgMTMxLCAyMjQsIDE0MCwgMTc4LCAyNTQsIAotICAgIDYsIDg3LCAxNzgsIDIxNSwgODIsIDg3LCAxNzgsIDI1MiwgNDYsIDg3LCAyMTcsIDgzLCAxLCA2MSwgMjE3LCA4MywgMSwgCi0gICAgNzMsIDIxNywgODMsIDEsIDcwLCAyMTcsIDgzLCAxLCAxNzYsIDIxNywgODMsIDEsIDI0MywgMTM1LCAyMTcsIDgzLCAxLCAKLSAgICAyMjksIDc3LCAyMTcsIDgzLCAxLCAyMTcsIDEwNSwgMjE3LCA4MywgMSwgMjQ4LCAyMjEsIDIxNywgODMsIDEsIDE5NywgCi0gICAgMjE3LCA4MywgMSwgMTkwLCAyMTcsIDgzLCAxLCAyNTIsIDE5MSwgMjE3LCA4MywgMSwgMTg0LCAyMTcsIDgzLCAxLCAxOTEsIAotICAgIDIxNywgODMsIDEsIDIzMywgMTM1LCAyMTcsIDgzLCAxLCAyMTIsIDY1LCAyMTcsIDgzLCAxLCAyMDYsIDIxNywgODMsIDEsIAotICAgIDE2MiwgMjE3LCA4MywgMjUsIDUsIDczLCAyMTcsIDgzLCAyNSwgNSwgNzAsIDIxNywgODMsIDUsIDIxMywgMTUyLCAyNDIsIAotICAgIDcsIDEsIDYxLCAyNDIsIDcsIDEsIDczLCAyNDIsIDcsIDEsIDcwLCAyNDIsIDcsIDEsIDE3NiwgMjQyLCA3LCAxLCAyNDMsIAotICAgIDEzNSwgMjQyLCA3LCAxLCAyMjksIDc3LCAyNDIsIDcsIDEsIDIxNywgMTA1LCAyNDIsIDcsIDEsIDI0OCwgMjIxLCAyNDIsIAotICAgIDcsIDEsIDE5NywgMjQyLCA3LCAxLCAxOTAsIDI0MiwgNywgMSwgMjUyLCAxOTEsIDI0MiwgNywgMSwgMTg0LCAyNDIsIDcsIAotICAgIDEsIDE5MSwgMjQyLCA3LCAxLCAyMDUsIDI0MiwgNywgMSwgMjMzLCAxMzUsIDI0MiwgNywgMSwgMjEyLCA2NSwgMjQyLCA3LCAKLSAgICAxLCAyMDYsIDI0MiwgNywgMSwgMTYyLCAyNDIsIDcsIDI1LCA1LCA3MywgMjQyLCA3LCAyNSwgNSwgNzAsIDI0MiwgNywgNSwgCi0gICAgMjI2LCA0OSwgMjI1LCAxMjYsIDIxOSwgMTU1LCAyMjQsIDE0MCwgMjI1LCAxMjYsIDUyLCAyMjQsIDE0MCwgMjUxLCAxMjAsIAotICAgIDEsIDYxLCAyNTEsIDEyMCwgMSwgNzMsIDI1MSwgMTIwLCAxLCA3MCwgMjUxLCAxMjAsIDEsIDE3NiwgMjUxLCAxMjAsIDEsIAotICAgIDI0MywgMTM1LCAyNTEsIDEyMCwgMSwgMjI5LCA3NywgMjUxLCAxMjAsIDEsIDIxNywgMTA1LCAyNTEsIDEyMCwgMSwgMjQ4LCAKLSAgICAyMjEsIDI1MSwgMTIwLCAxLCAxOTcsIDI1MSwgMTIwLCAxLCAxOTAsIDI1MSwgMTIwLCAxLCAyNTIsIDE5MSwgMjUxLCAxMjAsIAotICAgIDEsIDE4NCwgMjUxLCAxMjAsIDEsIDE5MSwgMjUxLCAxMjAsIDEsIDIwNSwgMjUxLCAxMjAsIDEsIDIzMywgMTM1LCAyNTEsIAotICAgIDEyMCwgMSwgMjEyLCA2NSwgMjUxLCAxMjAsIDEsIDIwNiwgMjUxLCAxMjAsIDEsIDE2MiwgMjUxLCAxMjAsIDI1LCA1LCA3MywgCi0gICAgMjUxLCAxMjAsIDI1LCA1LCA3MCwgMjE3LCA4MiwgMSwgNjEsIDIxNywgODIsIDEsIDczLCAyMTcsIDgyLCAxLCA3MCwgMjE3LCAKLSAgICA4MiwgMSwgMTc2LCAyMTcsIDgyLCAxLCAyNDMsIDEzNSwgMjE3LCA4MiwgMSwgMjI5LCA3NywgMjE3LCA4MiwgMSwgMjE3LCAKLSAgICAxMDUsIDIxNywgODIsIDEsIDI0OCwgMjIxLCAyMTcsIDgyLCAxLCAxOTcsIDIxNywgODIsIDEsIDE5MCwgMjE3LCA4MiwgMSwgCi0gICAgMjUyLCAxOTEsIDIxNywgODIsIDEsIDE4NCwgMjE3LCA4MiwgMSwgMTkxLCAyMTcsIDgyLCAxLCAyMzMsIDEzNSwgMjE3LCAKLSAgICA4MiwgMSwgMjEyLCA2NSwgMjE3LCA4MiwgMSwgMjA2LCAyMTcsIDgyLCAyNSwgNSwgNzMsIDIxNywgODIsIDI1LCA1LCA3MCwgCi0gICAgNjksIDEsIDE3NiwgNjksIDEsIDIzNCwgMTMyLCA2OSwgMSwgMjM0LCAyOCwgNjksIDEsIDIzNCwgMTA1LCA2OSwgMSwgMjI5LCAKLSAgICA0LCA2OSwgMSwgMjUxLCAzMywgNjksIDEsIDI1MCwgMTU3LCA2OSwgMSwgMjQ5LCAyMzgsIDY5LCAxLCAyNTAsIDg2LCA2OSwgCi0gICAgMSwgMjI3LCAxMzQsIDY5LCAxLCAyNDgsIDIyMSwgNjksIDEsIDIxNSwgMTQ0LCA2OSwgMSwgMjQ3LCAxNDUsIDY5LCAxLCAKLSAgICAyMTUsIDEzOSwgNjksIDEsIDIyOCwgODAsIDY5LCAxLCAyMTcsIDEwNSwgNjksIDEsIDIxNiwgMjA4LCA2OSwgMSwgMTExLCAKLSAgICA2OSwgMSwgMjE2LCAxNTYsIDY5LCAxLCAyMjgsIDc0LCA2OSwgMSwgMjUyLCAxOTEsIDY5LCAxLCAyMjUsIDE0NywgNjksIDEsIAotICAgIDIyNSwgMTYsIDY5LCAxLCAyMjUsIDEyMSwgNjksIDEsIDIzMCwgMTYxLCA2OSwgMSwgMjEwLCAyNDQsIDY5LCAxLCAyMjIsIAotICAgIDIxMSwgNjksIDEsIDIzMiwgMTU2LCA2OSwgMSwgMjEzLCAxMzgsIDY5LCAxLCAyMjAsIDEwMiwgNjksIDEsIDIxOCwgMTg0LCAKLSAgICA2OSwgMSwgMjA2LCA2OSwgMSwgMTYyLCA2OSwgMSwgMjMzLCAxMzUsIDY5LCAxLCAyMjQsIDg4LCA2OSwgMjM1LCAyNDMsIAotICAgIDI1LCAyMjQsIDc0LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDg3LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDUzLCA2OSwgCi0gICAgMjM1LCAyNDMsIDI1LCAyMjQsIDQ4LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDMwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIAotICAgIDIsIDY5LCAyMzUsIDI0MywgMjUsIDIyMywgMjQ2LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjMsIDI0NSwgNjksIDIzNSwgMjQzLCAKLSAgICAyNSwgMjIyLCAxMDAsIDY5LCAyMzUsIDI0MywgMjUsIDIyMiwgOTMsIDY5LCAyMzUsIDI0MywgMjUsIDIzMiwgNjIsIDY5LCAKLSAgICAyMzUsIDI0MywgMjUsIDIzMiwgNTIsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgNjksIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgCi0gICAgODAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzgsIDIxNSwgNDksIDExMCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzOCwgCi0gICAgMjE1LCA0OSwgMTA1LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDcwLCA2OSwgMjUsIDIzNSwgMjI5LCAyNTQsIDQ1LCA2OSwgCi0gICAgMjUsIDIzNSwgMjI5LCAyNTUsIDczLCA2OSwgMjUsIDUsIDI1NSwgNzMsIDY5LCAyNSwgNSwgNzMsIDY5LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgNjksIDI1LCA1LCAyMTEsIDExNywgNjksIDI1LCA1LCAyMTAsIDE2OSwgNjksIDI1LCA1LCA3MCwgNjksIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgNjksIDI1LCA1LCAyMTQsIDIyOSwgNjksIDI1LCA1LCAyMjYsIDIzNCwgNjksIDI1LCA1LCAxOTEsIDY5LCAKLSAgICAyNSwgNSwgMjM2LCA2MCwgNjksIDI1LCA1LCA3NSwgNjksIDI1LCA1LCAyNTQsIDI0MywgNjksIDI1LCA1LCAyNTQsIDIwMSwgCi0gICAgNjksIDI1LCA1LCAyMjYsIDE4MywgNjksIDI1LCA1LCAyNTMsIDE5MiwgNjksIDUsIDIyOCwgMjA2LCA2OSwgNSwgMjIzLCAKLSAgICAxMjYsIDY5LCA1LCAyMTAsIDE4MCwgNjksIDUsIDIzMCwgNTIsIDY5LCA1LCAyMTUsIDIxMywgNjksIDUsIDI1MiwgMTQzLCAKLSAgICA2OSwgNSwgMjIyLCAyMDYsIDY5LCA1LCAyMTYsIDQwLCA2OSwgNSwgMjM0LCAyNDEsIDY5LCA1LCAyNTQsIDIwMywgNjksIDUsIAotICAgIDIyMSwgMjQ0LCAyMjEsIDIzOCwgNjksIDUsIDIxMywgMTQ5LCA2OSwgNSwgMjQ5LCAyMzIsIDY5LCA1LCAyNTIsIDExNywgCi0gICAgNjksIDUsIDIzNCwgMTI1LCA2OSwgNSwgMjUyLCAxMzcsIDY5LCA1LCAyNTEsIDksIDIyNSwgNzIsIDIzMywgMTg3LCA2OSwgCi0gICAgNSwgMjMzLCAzMCwgMjE2LCAxNywgNjksIDUsIDI1MiwgMjAsIDY5LCA1LCAyMjUsIDEyMywgMjMwLCA5OSwgNjksIDUsIAotICAgIDIzNCwgOSwgNjksIDI0OSwgOTgsIDE2LCAyMjMsIDI4LCA2OSwgNSwgMjUzLCAxNzQsIDY5LCA1LCAyNTMsIDE5NSwgNjksIAotICAgIDIxLCAyMTAsIDg2LCA2OSwgMjEsIDExMCwgNjksIDIxLCAxMDUsIDY5LCAyMSwgMTU4LCA2OSwgMjEsIDE2MSwgNjksIDIxLCAKLSAgICAxODksIDY5LCAyMSwgMTk0LCA2OSwgMjEsIDE5OCwgNjksIDIxLCAxOTUsIDY5LCAyMSwgMjAwLCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMTksIDQzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMzAsIDcxLCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjUsIDcxLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyNTIsIDQ5LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyNTEsIDEwMywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMTUsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNCwgMjA5LCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIwNywgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI0LCAyMTMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjExLCA4MywgMjUxLCAyMzYsIAotICAgIDgzLCAyNDUsIDE2MywgODMsIDI0OSwgMjE5LCA4MywgMjQzLCAyMjksIDIxOCwgMTI5LCA4MywgMjQ5LCAyMjYsIDgzLCAKLSAgICAyNDQsIDExLCAyNDcsIDExOCwgODMsIDIxNiwgMzksIDIxOSwgNTIsIDI0MCwgMTY4LCA4MywgMjE5LCAxOTAsIDMsIDI1MSwgCi0gICAgMTcyLCAyMzEsIDE1NCwgODMsIDIzMSwgMTgzLCAyNDksIDIxOSwgODMsIDIzMSwgMTgzLCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDgzLCAyMjgsIDE5MSwgODMsIDI0MywgMjUzLCA0NSwgMjIxLCAxNTcsIDExMCwgODMsIDI0MywgMjUzLCA0NSwgMjIxLCAKLSAgICAxNTcsIDEwNSwgODMsIDI0MywgMjUzLCA0NSwgMjIxLCAxNTcsIDE1OCwgODMsIDI1LCAyMjAsIDEzNywgODMsIDIxLCAyMTAsIAotICAgIDg2LCA4MywgMjEsIDExMCwgODMsIDIxLCAxMDUsIDgzLCAyMSwgMTU4LCA4MywgMjEsIDE2MSwgODMsIDIxLCAxODksIDgzLCAKLSAgICAyMSwgMTk0LCA4MywgMjEsIDE5OCwgODMsIDIxLCAxOTUsIDgzLCAyMSwgMjAwLCA4MywgMSwgNjEsIDgzLCAxLCA3NSwgODMsIAotICAgIDEsIDczLCA4MywgMSwgNzYsIDgzLCAxLCA3MCwgODMsIDEsIDIyNiwgMjM0LCA4MywgMSwgMjE0LCAyMTQsIDgzLCAxLCAKLSAgICAyNDUsIDIwOSwgODMsIDEsIDE5NywgODMsIDEsIDI1NCwgMTE1LCA4MywgMSwgMjUyLCAxOTEsIDgzLCAxLCAxOTAsIDgzLCAKLSAgICAxLCAyMjQsIDg4LCA4MywgMSwgMjQzLCAxMzUsIDgzLCAxLCAxODQsIDgzLCAxLCAyMzMsIDEzNSwgODMsIDEsIDIwNiwgODMsIAotICAgIDEsIDIyMCwgMTAyLCA4MywgMSwgMjE3LCAxMDUsIDgzLCAxLCAyNDgsIDIyMSwgODMsIDEsIDI1MCwgMTU3LCA4MywgMSwgCi0gICAgMjM1LCAxNDEsIDgzLCAxLCAxOTEsIDgzLCAxLCAyMDUsIDgzLCAxLCAyMTIsIDY1LCA4MywgMSwgMjQ0LCAxOTYsIDgzLCAxLCAKLSAgICAxNzYsIDgzLCAxLCAyMzQsIDEzMiwgODMsIDEsIDIxNSwgMTgzLCA4MywgMSwgMjEwLCAxMTYsIDgzLCAxLCAyNDIsIDQ2LCAKLSAgICA4MywgMSwgMjEwLCAxNiwgODMsIDEsIDIzMiwgMjU0LCA4MywgMSwgMjEwLCA2OSwgODMsIDEsIDI1MCwgMTEwLCA4MywgMSwgCi0gICAgMjE2LCAzOSwgMTk5LCAyNSwgNTAsIDgzLCAxLCAyMTYsIDM5LCA3NSwgODMsIDEsIDIxNiwgMzksIDczLCA4MywgMSwgMjE2LCAKLSAgICAzOSwgNzYsIDgzLCAxLCAyMTYsIDM5LCA3MCwgODMsIDEsIDIxNiwgMzksIDIyNiwgMjM0LCA4MywgMSwgMjE2LCAzOSwgCi0gICAgMjE0LCAyMTQsIDgzLCAxLCAyMTYsIDM5LCAyNTQsIDExNSwgODMsIDEsIDIxNiwgMzksIDI1MiwgMTkxLCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMTkwLCA4MywgMSwgMjE2LCAzOSwgMjI0LCA4OCwgODMsIDEsIDIxNiwgMzksIDI0MywgMTM1LCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMTg0LCA4MywgMSwgMjE2LCAzOSwgMjE3LCAxMDUsIDgzLCAxLCAyMTYsIDM5LCAyNDgsIDIyMSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDI1MCwgMTU3LCA4MywgMSwgMjE2LCAzOSwgMjM1LCAxNDEsIDgzLCAxLCAyMTYsIDM5LCAyMTUsIDE4MywgODMsIDEsIAotICAgIDIxNiwgMzksIDE5MSwgODMsIDEsIDIxNiwgMzksIDIxMiwgNjUsIDgzLCAxLCAyMTYsIDM5LCAxNzYsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAyNDMsIDEzMiwgODMsIDEsIDIxNiwgMzksIDI0MiwgNDYsIDgzLCAxLCAyMTYsIDM5LCAyMzUsIDEwNywgODMsIDEsIAotICAgIDIxNiwgMzksIDIyOCwgMjMxLCA4MywgMSwgMjE2LCAzOSwgMjQ2LCAzOCwgODMsIDEsIDIxOSwgMTkwLCA3NSwgODMsIDEsIAotICAgIDIxOSwgMTkwLCA3MywgODMsIDEsIDIxOSwgMTkwLCAyMzUsIDE1MiwgODMsIDEsIDIxOSwgMTkwLCAyMTQsIDIxNCwgODMsIAotICAgIDEsIDIxOSwgMTkwLCA3MCwgODMsIDEsIDIxOSwgMTkwLCAyNTQsIDExNSwgODMsIDEsIDIxOSwgMTkwLCAxNzYsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjQzLCAxMzUsIDgzLCAxLCAyMTksIDE5MCwgMTYyLCA4MywgMSwgMjE5LCAxOTAsIDE5MCwgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyMjAsIDEwMiwgODMsIDEsIDIxOSwgMTkwLCAyMTcsIDEwNSwgODMsIDEsIDIxOSwgMTkwLCAyNDgsIDIyMSwgCi0gICAgODMsIDEsIDIxOSwgMTkwLCAyMzUsIDE0MSwgODMsIDEsIDIxOSwgMTkwLCAyNDQsIDE5NiwgODMsIDEsIDIxOSwgMTkwLCAKLSAgICAyNDMsIDEzMiwgODMsIDEsIDIxOSwgMTkwLCAyNDIsIDQ2LCA4MywgMSwgMjE5LCAxOTAsIDIxNSwgMTgzLCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDIxMCwgMTE2LCA4MywgMSwgMjE5LCAxOTAsIDIyMywgMTg0LCA4MywgMSwgMjE5LCAxOTAsIDI1MCwgMTU3LCAKLSAgICA4MywgMSwgMjE5LCAxOTAsIDIxMCwgODIsIDgzLCAxLCAyMzEsIDE4MywgNzMsIDgzLCAxLCAyMzEsIDE4MywgMTc2LCA4MywgCi0gICAgMSwgMjMxLCAxODMsIDIwNSwgODMsIDEsIDIzMSwgMTgzLCAyNDQsIDE5NiwgODMsIDEsIDIzMSwgMTgzLCAyMTAsIDgyLCAKLSAgICA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNTQsIDc2LCAxMTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMywgCi0gICAgMTQ4LCAxMTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMTg2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjM1LCAxOTMsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNjIsIAotICAgIDI0MywgMTE2LCAyNTIsIDE1NSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTM0LCAyNTIsIDE1NSwgODMsIDEsIDI1NCwgCi0gICAgMTYyLCAyNDMsIDExNiwgNjEsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDczLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgCi0gICAgMTE2LCAxNzYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyOSwgNzcsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDI1MSwgMzMsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNSwgMTU2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTUsIDE0NCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ4LCAxMzUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIyOCwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjQ4LCAyMjEsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE5MCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI1LCAKLSAgICAxNDcsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxOCwgMjIzLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIAotICAgIDgyLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjU0LCAKLSAgICAyMDksIDgzLCAxLCAyMTYsIDM5LCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNywgMTA1LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAKLSAgICAxNjIsIDI0MywgMTE2LCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQyLCAyNDksIAotICAgIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjksIDc3LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAKLSAgICAyNDMsIDExNiwgMjUxLCAzMywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzNSwgMTE0LCA4MywgMSwgCi0gICAgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE1LCAxNTYsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgCi0gICAgMTE2LCAyNDgsIDExOSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNywgMTA1LCA4MywgMSwgMjMxLCAKLSAgICAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ4LCAyNSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIxOCwgMjIzLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ5LCA3MiwgODMsIDEsIDIzMSwgMTgzLCAKLSAgICAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgODIsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIAotICAgIDExNiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTYzLCA3MCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTYzLCAKLSAgICAxOTEsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNTIsIDE4LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgCi0gICAgMTE2LCAyNDgsIDIxMSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzMiwgMjU0LCAxOCwgMTksIAotICAgIDIyNiwgMTA5LCAxOCwgMTksIDI1MywgMTY3LCAxOCwgMTksIDI1NSwgMjgsIDE4LCAxOSwgMjEyLCAyNSwgMTgsIDE5LCAKLSAgICAyMjQsIDIyMSwgMTgsIDE5LCAyMjUsIDIyOSwgMTgsIDE5LCAyMjQsIDEwNSwgMTgsIDE5LCAyMTcsIDMxLCAxOCwgMTksIAotICAgIDIzNCwgMTg5LCAxOCwgMTksIDIzMywgMTc5LCAxOCwgMTksIDIzMSwgMTMyLCAxOCwgMTksIDIyOCwgMzcsIDE4LCAxOSwgCi0gICAgMjI5LCAxODEsIDE4LCAxOSwgMjMzLCA2OCwgMTgsIDE5LCAyMTksIDIyLCAxOCwgMTksIDIyMSwgMjExLCAxOCwgMTksIAotICAgIDIxOSwgMjMyLCAxOCwgMTksIDIyMCwgNjYsIDE4LCAxOSwgMjE5LCAyMDEsIDE4LCAxOSwgMjEwLCAyMjAsIDE4LCAxOSwgCi0gICAgMjExLCA1MiwgMTgsIDE5LCAyMjMsIDEzNCwgMTgsIDE5LCAyMjcsIDE3MSwgMTgsIDE5LCAyMjYsIDIxNiwgMjI3LCAxNzEsIAotICAgIDE4LCAxOSwgMjI3LCAxNzAsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTcwLCAxOCwgMTksIDIyNywgMTY5LCAxOCwgMTksIAotICAgIDIyNiwgMjE2LCAyMjcsIDE2OSwgMTgsIDE5LCAyMjcsIDE2OCwgMTgsIDE5LCAyMjYsIDIxNiwgMjI3LCAxNjgsIDE4LCAxOSwgCi0gICAgMjIyLCAxMDUsIDE4LCAxOSwgMjIyLCAxMDQsIDE4LCAxOSwgMjIyLCAxMDMsIDE4LCAxOSwgMjIyLCAxMDIsIDE4LCAxOSwgCi0gICAgMjIyLCAxMDEsIDE4LCAxOSwgMjIyLCAxMDksIDE4LCAxOSwgMjI2LCAyMTYsIDIyNiwgMTA1LCAxOCwgMTksIDIyNiwgMjE2LCAKLSAgICAyMTcsIDE1MiwgMTgsIDE5LCAyMjYsIDIxNiwgMjM1LCAyMywgMTgsIDE5LCAyMjYsIDIxNiwgMjUxLCA2NiwgMTgsIDE5LCAKLSAgICAyMjYsIDIxNiwgMTkzLCAxOCwgMTksIDIyNiwgMjE2LCAyMzAsIDI1LCAxOCwgMTksIDIyNiwgMjE2LCAyMjIsIDkxLCAxOCwgCi0gICAgMTksIDIyNiwgMjE2LCAyMjAsIDEwNCwgMTgsIDE5LCAyNDUsIDIxOSwgMjEyLCA5OCwgMTgsIDE5LCAyMTIsIDcsIDIxMiwgCi0gICAgOTgsIDE4LCAxOSwgNDAsIDQsIDIyMiwgMjMzLCAxOCwgMTksIDQwLCAyMjMsIDE1NywgMjQ3LCAxMjAsIDE4LCAxOSwgMjIzLCAKLSAgICAyMjMsIDIyMiwgMTA2LCAxOCwgMTksIDE1OSwgMjMyLCAxMjcsIDE4LCAxOSwgMTU5LCAyMzMsIDEzNCwgMTgsIDE5LCAyMTYsIAotICAgIDEyNiwgMTgsIDE5LCAyMTYsIDEyOCwgMTgsIDE5LCAyMTUsIDEzNiwgMTgsIDE5LCAyMTUsIDEzOCwgMTgsIDE5LCAyMTUsIAotICAgIDE0MywgMTgsIDE5LCAyMTYsIDQ5LCAxOCwgMTksIDIxNiwgNTEsIDE4LCAxOSwgMjIxLCAyMDksIDIxOSwgMjA2LCAxOCwgCi0gICAgMTksIDIyMSwgMjA5LCAyMjAsIDEsIDE4LCAxOSwgMjIxLCAyMDksIDI0MSwgNTMsIDE4LCAxOSwgNzIsIDI0MiwgNzMsIDE4LCAKLSAgICAxOSwgNzIsIDI0OCwgNTIsIDI0MywgNTUsIDE4LCAxOSwgNzIsIDI0MywgMTMyLCAxOCwgMTksIDcyLCAyNDIsIDc4LCAxOCwgCi0gICAgMTksIDIyMSwgMjA5LCAyMzUsIDMzLCAxOCwgMTksIDcyLCAyMzUsIDMxLCAxOCwgMTksIDI1MiwgNjgsIDI0OCwgNTIsIAotICAgIDE1NiwgMTgsIDE5LCAyNTIsIDY4LCAyNDgsIDUyLCAxNTMsIDE4LCAxOSwgNzIsIDI0OCwgNDcsIDIyMiwgOTEsIDIzMiwgCi0gICAgMjIzLCAyMTMsIDEyMiwgMjMzLCAxMCwgMjMyLCAyMjMsIDEsIDE3NiwgMjMyLCAyMjMsIDEsIDIzNCwgMTMyLCAyMzIsIAotICAgIDIyMywgMSwgMjQzLCAxMzUsIDIzMiwgMjIzLCAxLCAyNDIsIDI0OSwgMjMyLCAyMjMsIDEsIDIyOSwgNzcsIDIzMiwgMjIzLCAKLSAgICAxLCAyNTEsIDMzLCAyMzIsIDIyMywgMSwgMjUwLCAxNTcsIDIzMiwgMjIzLCAxLCAyMzUsIDE0MSwgMjMyLCAyMjMsIDEsIAotICAgIDIzNSwgMTE0LCAyMzIsIDIyMywgMSwgMjExLCA3MSwgMjMyLCAyMjMsIDEsIDIxNywgMTA1LCAyMzIsIDIyMywgMSwgMjE2LCAKLSAgICAyMDgsIDIzMiwgMjIzLCAxLCAyNDgsIDIyMSwgMjMyLCAyMjMsIDEsIDI0OCwgMjUsIDIzMiwgMjIzLCAxLCAxOTcsIDIzMiwgCi0gICAgMjIzLCAxLCAxOTAsIDIzMiwgMjIzLCAxLCAyMjUsIDE0NywgMjMyLCAyMjMsIDEsIDI1MiwgMTkxLCAyMzIsIDIyMywgMSwgCi0gICAgMjUyLCAxOCwgMjMyLCAyMjMsIDEsIDE4NCwgMjMyLCAyMjMsIDEsIDE5MSwgMjMyLCAyMjMsIDEsIDIwNSwgMjMyLCAyMjMsIAotICAgIDEsIDIzMywgMTM1LCAyMzIsIDIyMywgMSwgMjEyLCA2NSwgMjMyLCAyMjMsIDEsIDIyMCwgMTAyLCAyMzIsIDIyMywgMSwgCi0gICAgMjE4LCAyMjMsIDIzMiwgMjIzLCAxLCAyMDYsIDIzMiwgMjIzLCAxLCAxNjIsIDIzMiwgMjIzLCAyNSwgNSwgNjEsIDIzMiwgCi0gICAgMjIzLCAyNSwgNSwgNzMsIDIzMiwgMjIzLCAyNSwgNSwgNzAsIDIzMiwgMjIzLCAyNSwgNSwgMjQ1LCAyMDksIDIzMiwgMjIzLCAKLSAgICAyNSwgNSwgMjU0LCAyMDEsIDIzMiwgMjIzLCAyNSwgNSwgMjI2LCAxODMsIDIzMiwgMjIzLCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDIzMiwgMjIzLCAyNSwgNSwgNzUsIDIzMiwgMjIzLCAyNSwgNSwgNzYsIDIzMiwgMjIzLCAyMTgsIDczLCAxLCAxOTEsIDIzMiwgCi0gICAgMjIzLCAyMTgsIDczLCAxLCAyMDUsIDIzMiwgMjIzLCAyMTgsIDczLCAxLCAyMTIsIDY1LCAyMzIsIDIyMywgNCwgMSwgMTc2LCAKLSAgICAyMzIsIDIyMywgNCwgMSwgMjI5LCA3NywgMjMyLCAyMjMsIDQsIDEsIDI1NCwgNzUsIDIzMiwgMjIzLCA0LCAxLCAyMTcsIAotICAgIDEwNSwgMjMyLCAyMjMsIDQsIDEsIDE5NywgMjMyLCAyMjMsIDQsIDEsIDE5MCwgMjMyLCAyMjMsIDQsIDEsIDE4NCwgMjMyLCAKLSAgICAyMjMsIDQsIDEsIDIwNSwgMjMyLCAyMjMsIDQsIDEsIDIzMywgMTM1LCAyMzIsIDIyMywgNSwgMjMwLCA4OSwgMjMyLCAyMjMsIAotICAgIDUsIDIzNCwgMTcxLCAyMzIsIDIyMywgNSwgMjIyLCAzMiwgMjMyLCAyMjMsIDUsIDIzMiwgMTI3LCAyMzIsIDIyMywgMjQ1LCAKLSAgICAzMSwgNzgsIDIzMiwgMjIzLCAyMjQsIDEzLCA3OCwgMjMyLCAyMjMsIDIxLCAyMTAsIDg2LCAyMzIsIDIyMywgMjEsIDExMCwgCi0gICAgMjMyLCAyMjMsIDIxLCAxMDUsIDIzMiwgMjIzLCAyMSwgMTU4LCAyMzIsIDIyMywgMjEsIDE2MSwgMjMyLCAyMjMsIDIxLCAKLSAgICAxODksIDIzMiwgMjIzLCAyMSwgMTk0LCAyMzIsIDIyMywgMjEsIDE5OCwgMjMyLCAyMjMsIDIxLCAxOTUsIDIzMiwgMjIzLCAKLSAgICAyMSwgMjAwLCAzOSwgMjMzLCA1OSwgMSwgMTc2LCAzOSwgMjMzLCA1OSwgMSwgMjExLCAxNjUsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMjksIDc3LCAzOSwgMjMzLCA1OSwgMSwgMjE1LCAxODMsIDM5LCAyMzMsIDU5LCAxLCAyMDYsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxOTEsIDM5LCAyMzMsIDU5LCAxLCAyMTcsIDEwNSwgMzksIDIzMywgNTksIDEsIDIxNiwgMjA4LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjMzLCAxMzUsIDM5LCAyMzMsIDU5LCAxLCAxOTAsIDM5LCAyMzMsIDU5LCAxLCAyMjUsIDE0NywgMzksIDIzMywgNTksIDEsIAotICAgIDE4NCwgMzksIDIzMywgNTksIDEsIDI0NCwgMTk2LCAzOSwgMjMzLCA1OSwgMSwgMjE0LCAyNywgMzksIDIzMywgNTksIDEsIAotICAgIDE2MiwgMzksIDIzMywgNTksIDEsIDIyNCwgODgsIDM5LCAyMzMsIDU5LCAxLCAyMzQsIDEzMiwgMzksIDIzMywgNTksIDEsIAotICAgIDIxNSwgMTc1LCAzOSwgMjMzLCA1OSwgMSwgMTk3LCAzOSwgMjMzLCA1OSwgMSwgNjEsIDM5LCAyMzMsIDU5LCAxLCA3MywgCi0gICAgMzksIDIzMywgNTksIDEsIDI0NSwgMjA5LCAzOSwgMjMzLCA1OSwgMSwgMjQ1LCAxOTcsIDM5LCAyMzMsIDU5LCAxLCA3MCwgCi0gICAgMzksIDIzMywgNTksIDEsIDIyNiwgMTgzLCAzOSwgMjMzLCA1OSwgMSwgNzYsIDM5LCAyMzMsIDU5LCAxLCAyMTQsIDIxNCwgCi0gICAgMzksIDIzMywgNTksIDEsIDc1LCAzOSwgMjMzLCA1OSwgMSwgMjUzLCAxOTAsIDM5LCAyMzMsIDU5LCAxLCAyNTQsIDIwMSwgCi0gICAgMzksIDIzMywgNTksIDEsIDIxNiwgMjgsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI3LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAKLSAgICAyNiwgMzksIDIzMywgNTksIDEsIDIxNiwgMjUsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI0LCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyNSwgMjI0LCA4OCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyNCwgODgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNzYsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTEsIDE2NSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyOSwgNzcsIDE2NiwgMzksIAotICAgIDE3MywgMSwgMTIxLCAxNzYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTEsIDE2NSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDIyOSwgNzcsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTUsIDE4MywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIwNiwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNSwgMTgzLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyMSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE3LCAxMDUsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAyMTYsIDIwOCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5NywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjEsIDIxNywgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE2LCAyMDgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTcsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjUsIDE0NywgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyNSwgMTQ3LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjQ0LCAxOTYsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjMzLCAxMzUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyNDQsIDE5NiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDEzNSwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI0OCwgMjIxLCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMjUyLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNDgsIAotICAgIDIyMSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI1MiwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjMzLCAxODQsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTg0LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyMSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTgsIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjE4LCA4MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjUsIDIxOSwgMjM5LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDczLCAKLSAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzYsIDMzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3MCwgMTY2LCAzOSwgMTczLCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDE2NiwgMzksIDE3MywgMjUsIDUsIDc1LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTQsIDI0MywgMTY2LCAKLSAgICAzOSwgMTczLCAyNSwgNSwgNzYsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNywgMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCi0gICAgMjE0LCAyMTQsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1MywgMTY3LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDI4LCAKLSAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExMSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI2LCAxMDksIDE2NiwgMzksIAotICAgIDE3MywgMjUsIDUsIDIyNiwgMjUzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDIxMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCi0gICAgMjM1LCAxNTIsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIxNCwgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMjksIDc5LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzAsIDI1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAxOTMsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgNDAsIDIzNSwgMjMsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI0OSwgNjAsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI1MywgMTU4LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNTgsIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE1NywgMTY2LCAzOSwgMTczLCAKLSAgICAyMSwgMjEwLCA4NiwgMTY2LCAzOSwgMTczLCAyMSwgMTEwLCAxNjYsIDM5LCAxNzMsIDIxLCAxMDUsIDE2NiwgMzksIDE3MywgCi0gICAgMjEsIDE1OCwgMTY2LCAzOSwgMTczLCAyMSwgMTYxLCAxNjYsIDM5LCAxNzMsIDIxLCAxODksIDE2NiwgMzksIDE3MywgMjEsIAotICAgIDE5NCwgMTY2LCAzOSwgMTczLCAyMSwgMTk4LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTUsIDE2NiwgMzksIDE3MywgMjEsIDIwMCwgCi0gICAgMTY2LCAzOSwgMTczLCA4OSwgMjEsIDExMCwgMTY2LCAzOSwgMTczLCA1LCAyMzMsIDEyMCwgMTY2LCAzOSwgMTczLCA1LCAKLSAgICAyMzMsIDExOSwgNjksIDE2LCAyMjUsIDIzNiwgNjksIDE2LCAyMzAsIDcyLCAyMzQsIDI1LCA2OSwgMTYsIDIyNSwgNzIsIAotICAgIDIzNCwgMjUsIDY5LCAxNiwgMjUyLCA1MCwgMjM0LCAyNSwgNjksIDE2LCAyNTEsIDEwNCwgMjM0LCAyNSwgNjksIDE2LCAKLSAgICAyMjQsIDIxNiwgMjM0LCAyNSwgNjksIDE2LCAyMjQsIDIxMCwgMjM0LCAyNSwgNjksIDE2LCAyMjQsIDIwOCwgMjM0LCAyNSwgCi0gICAgNjksIDE2LCAyMjQsIDIxNCwgMjM0LCAyNSwgNjksIDE2LCAyMjQsIDIxMiwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE3MywgCi0gICAgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE2OSwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE2OCwgMjM0LCAyNSwgNjksIDE2LCAKLSAgICAyNDgsIDE3MSwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE3MCwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE2NywgMjM0LCAyNSwgCi0gICAgNjksIDE2LCAyMTUsIDg3LCA2OSwgMTYsIDIzMCwgNzIsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNSwgNzIsIDIyMiwgMjA1LCAKLSAgICA2OSwgMTYsIDI1MiwgNTAsIDIyMiwgMjA1LCA2OSwgMTYsIDI1MSwgMTA0LCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIxNiwgCi0gICAgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTAsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjA4LCAyMjIsIDIwNSwgNjksIDE2LCAKLSAgICAyMjQsIDIxNCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTIsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTczLCAyMjIsIAotICAgIDIwNSwgNjksIDE2LCAyNDgsIDE2OSwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNjgsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgCi0gICAgMTcxLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE3MCwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNjcsIDIyMiwgMjA1LCAKLSAgICAyNTEsIDEyMSwgMSwgMTc2LCAyNTEsIDEyMSwgMSwgMjQzLCAxMzUsIDI1MSwgMTIxLCAxLCAyMjksIDc3LCAyNTEsIDEyMSwgCi0gICAgMSwgMjI5LCAyMiwgMjUxLCAxMjEsIDEsIDE5MCwgMjUxLCAxMjEsIDEsIDI1MiwgMTkxLCAyNTEsIDEyMSwgMSwgMTg0LCAKLSAgICAyNTEsIDEyMSwgMSwgMjMwLCAxMDUsIDI1MSwgMTIxLCAxLCAyMTcsIDEwNSwgMjUxLCAxMjEsIDEsIDI0OCwgMjIxLCAyNTEsIAotICAgIDEyMSwgMSwgMTk3LCAyNTEsIDEyMSwgMSwgMjI4LCAzNiwgMjUxLCAxMjEsIDEsIDI1MSwgMzMsIDI1MSwgMTIxLCAxLCAKLSAgICAyMzUsIDE0MSwgMjUxLCAxMjEsIDEsIDIyNywgMTY1LCAyNTEsIDEyMSwgMSwgMjI3LCAxNTgsIDI1MSwgMTIxLCAxLCAxOTEsIAotICAgIDI1MSwgMTIxLCAxLCAyMDUsIDI1MSwgMTIxLCAxLCAyMzMsIDEzNSwgMjUxLCAxMjEsIDEsIDIxNCwgMjcsIDI1MSwgMTIxLCAKLSAgICAxLCAyMDYsIDI1MSwgMTIxLCAxLCA2MSwgMjUxLCAxMjEsIDEsIDE2MiwgMjUxLCAxMjEsIDI1LCA1LCA3MywgMjUxLCAxMjEsIAotICAgIDI1LCA1LCA3MCwgMjUxLCAxMjEsIDI1LCA1LCA3NSwgMjUxLCAxMjEsIDI1LCA1LCA3NiwgMjUxLCAxMjEsIDI1LCA1LCAKLSAgICAyNTQsIDI0MywgMjUxLCAxMjEsIDIyNiwgNjAsIDI1MSwgMTIxLCAyNDUsIDE0MywgNjQsIDIyMSwgMTcyLCAzOSwgODksIDEsIAotICAgIDEyNSwgMTc2LCAzOSwgODksIDEsIDEyNSwgMjM0LCAxMzIsIDM5LCA4OSwgMSwgMTI1LCAyMzMsIDE3MSwgMzksIDg5LCAxLCAKLSAgICAxMjEsIDE3NiwgMzksIDg5LCAxLCAxMjEsIDIzMywgMTcxLCAzOSwgODksIDEsIDEyMSwgMjM0LCAxMzIsIDM5LCA4OSwgMSwgCi0gICAgMjI5LCA3NywgMzksIDg5LCAxLCAxMjUsIDI1MSwgMzMsIDM5LCA4OSwgMSwgMTI1LCAyNTAsIDE1NywgMzksIDg5LCAxLCAKLSAgICAxMjEsIDI1MSwgMzMsIDM5LCA4OSwgMSwgMTIxLCAyMDYsIDM5LCA4OSwgMSwgMTIxLCAyNTAsIDE1NywgMzksIDg5LCAxLCAKLSAgICAyMjcsIDE2NSwgMzksIDg5LCAxLCAyMjMsIDE0MCwgMzksIDg5LCAxLCAxMjUsIDIyMywgMTM4LCAzOSwgODksIDEsIDI0OCwgCi0gICAgMjIxLCAzOSwgODksIDEsIDEyMSwgMjIzLCAxMzgsIDM5LCA4OSwgMSwgMjIzLCAxNDksIDM5LCA4OSwgMSwgMTI1LCAyMTcsIAotICAgIDEwNSwgMzksIDg5LCAxLCAxMjUsIDIxNiwgMjA4LCAzOSwgODksIDEsIDEyMSwgMjE3LCAxMDUsIDM5LCA4OSwgMSwgMTIxLCAKLSAgICAyMTYsIDIwOCwgMzksIDg5LCAxLCAxOTcsIDM5LCA4OSwgMSwgMjUyLCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAxOTAsIDM5LCAKLSAgICA4OSwgMSwgMTI1LCAyMjUsIDE0NywgMzksIDg5LCAxLCAxMjUsIDI0NCwgMTk2LCAzOSwgODksIDEsIDEyMSwgMTkwLCAzOSwgCi0gICAgODksIDEsIDEyMSwgMjQ0LCAxOTYsIDM5LCA4OSwgMSwgMTIxLCAyMjUsIDE0NywgMzksIDg5LCAxLCAxODQsIDM5LCA4OSwgCi0gICAgMSwgMTIxLCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAxOTEsIDM5LCA4OSwgMSwgMjA1LCAzOSwgODksIDEsIDIyMiwgMTM3LCAKLSAgICAzOSwgODksIDEsIDIzMywgMTM1LCAzOSwgODksIDEsIDIzMiwgOTMsIDM5LCA4OSwgMSwgMjEyLCA2NSwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDIyMCwgMTAyLCAzOSwgODksIDEsIDEyNSwgMjE4LCAyMjMsIDM5LCA4OSwgMSwgMTI1LCAyMDYsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAxNjIsIDM5LCA4OSwgMSwgMjMyLCAxODQsIDM5LCA4OSwgMSwgNjEsIDM5LCA4OSwgMSwgMTIxLCAxNjIsIDM5LCAKLSAgICA4OSwgMSwgNzMsIDM5LCA4OSwgMSwgMjM2LCAzMywgMzksIDg5LCAxLCA3MCwgMzksIDg5LCAxLCAyMTQsIDExOCwgMzksIAotICAgIDg5LCAxLCAyNDUsIDIwOSwgMzksIDg5LCAxLCAyMjYsIDE4MywgMzksIDg5LCAxLCAyMzMsIDEyMCwgMzksIDg5LCAxLCAKLSAgICAyNDIsIDEzMiwgMjA2LCAzOSwgODksIDExNiwgNSwgMTQ3LCAyMDUsIDM5LCA4OSwgMTE2LCA1LCAxNDcsIDIzMywgMTM1LCAKLSAgICAzOSwgODksIDExNiwgNSwgMjMzLCAxMzYsIDIxNywgNTgsIDIzMywgMTA5LCAzOSwgODksIDUsIDIzMSwgMjA0LCAyMzQsIAotICAgIDIzMSwgMjMzLCAxMDksIDM5LCA4OSwgMTE2LCA1LCA0MCwgMjI5LCA3NywgMzksIDg5LCAxMTYsIDUsIDEyMSwgMTkwLCAzOSwgCi0gICAgODksIDExNiwgNSwgMTI1LCAyMjMsIDEzOSwgMTc3LCAxMjEsIDE5MCwgMzksIDg5LCAxMTYsIDUsIDE4NCwgMzksIDg5LCAKLSAgICAxMTYsIDUsIDI1MiwgMTkxLCAzOSwgODksIDExNiwgNSwgMjA2LCAzOSwgODksIDUsIDIyMiwgMTAsIDM5LCA4OSwgMjUsIDUsIAotICAgIDYxLCAzOSwgODksIDI1LCA1LCAyMzEsIDIwNCwgMjIxLCAyMjYsIDM5LCA4OSwgMjUsIDUsIDI1NSwgNzMsIDM5LCA4OSwgCi0gICAgMjUsIDUsIDIxNywgNjQsIDI1NSwgNzMsIDM5LCA4OSwgMjUsIDUsIDczLCAzOSwgODksIDI1LCA1LCAyMzYsIDMzLCAzOSwgCi0gICAgODksIDI1LCA1LCAyMTQsIDIxNCwgMzksIDg5LCAyNSwgNSwgMjE0LCAxMTcsIDM5LCA4OSwgMjUsIDUsIDcwLCAzOSwgODksIAotICAgIDI1LCA1LCAyMTQsIDExOCwgMzksIDg5LCAyNSwgNSwgNzYsIDM5LCA4OSwgMjUsIDUsIDIyNywgMSwgNTEsIDM5LCA4OSwgCi0gICAgMjUsIDUsIDIyNiwgMTA5LCAzOSwgODksIDI1LCA1LCA3NSwgMzksIDg5LCAyNSwgNSwgMjU0LCAyNDMsIDM5LCA4OSwgMjUsIAotICAgIDUsIDIyNiwgMTgzLCAzOSwgODksIDI1LCA1LCAyNTQsIDIwMSwgMzksIDg5LCAyNSwgNSwgODksIDI1NCwgMjAxLCAzOSwgCi0gICAgODksIDI1LCA1LCAyMjcsIDEsIDQ4LCAzOSwgODksIDUsIDIzMSwgMjA0LCAyMzQsIDIzMCwgMzksIDg5LCA1LCAyMTYsIDI5LCAKLSAgICAzOSwgODksIDUsIDIxNiwgMjgsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAyNywgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIAotICAgIDI2LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgMjUsIDM5LCA4OSwgNSwgMjIzLCAxODgsIDI0MiwgNDUsIDM5LCA4OSwgNSwgCi0gICAgMjMxLCAyMDQsIDIyMSwgMjUzLCAzOSwgODksIDUsIDIzNCwgOTYsIDIzNCwgMjE1LCAzOSwgODksIDM4LCAyNDksIDExNSwgCi0gICAgMjQ3LCAxMjAsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDIxMCwgODYsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDExMCwgMzksIDg5LCAKLSAgICAyNDEsIDQ2LCAyMSwgMTA1LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxNTgsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE2MSwgMzksIAotICAgIDg5LCAyNDEsIDQ2LCAyMSwgMTg5LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTQsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5OCwgCi0gICAgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk1LCAzOSwgODksIDI0MSwgNDYsIDIxLCAyMDAsIDM5LCA4OSwgODksIDIxLCAyMTAsIAotICAgIDg2LCAzOSwgODksIDg5LCAyMSwgMTEwLCAzOSwgODksIDg5LCAyMSwgMTA1LCAzOSwgODksIDg5LCAyMSwgMTU4LCAzOSwgCi0gICAgODksIDg5LCAyMSwgMTYxLCAzOSwgODksIDg5LCAyMSwgMTg5LCAzOSwgODksIDg5LCAyMSwgMTk0LCAzOSwgODksIDg5LCAKLSAgICAyMSwgMTk4LCAzOSwgODksIDg5LCAyMSwgMTk1LCAzOSwgODksIDg5LCAyMSwgMjAwLCAzOSwgODksIDUsIDIxMSwgMjQ5LCAKLSAgICAzOSwgODksIDUsIDIxMSwgMjQ4LCAzOSwgODksIDUsIDIyMSwgMjE1LCAzOSwgODksIDUsIDIzNCwgMTYwLCAzOSwgODksIDUsIAotICAgIDI0MCwgMjMyLCAzOSwgODksIDUsIDI0NywgMTM0LCAzOSwgODksIDUsIDIyMywgNDksIDIyMiwgMTg3LCAyMjMsIDE0OSwgCi0gICAgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjExLCA3MiwgMzksIDg5LCA1LCAyMzUsIDYsIDM5LCA4OSwgNSwgMjM1LCA1LCAzOSwgCi0gICAgODksIDUsIDIyMSwgMjIyLCAzOSwgODksIDUsIDIyMSwgMjIxLCAzOSwgODksIDUsIDI0MiwgOSwgMzksIDg5LCA1LCAyNTEsIAotICAgIDMwLCAxMDIsIDUsIDIxNCwgMjAwLCAyMjMsIDMwLCAxMDIsIDUsIDIxNCwgMjAwLCAyNTEsIDEsIDEwMiwgNSwgMjUwLCAKLSAgICAxODYsIDEwMiwgNSwgMjE4LCAxNSwgMTAyLCA1LCAyNTEsIDIzMywgMTAyLCAxLCAyNTQsIDE4NCwgMTAyLCAxLCAyNTQsIAotICAgIDE4NSwgMjE3LCAxMywgMTAyLCAxLCAyMzYsIDI5LCAxMDIsIDEsIDIzNiwgMzAsIDIxNywgMTMsIDEwMiwgMSwgMjE0LCAKLSAgICAyMDMsIDEwMiwgMSwgMjE0LCAyMDQsIDIxNywgMTMsIDEwMiwgMSwgMjIzLCAxODgsIDIyMywgNzksIDEwMiwgMSwgMjIzLCAKLSAgICAxODgsIDIyMywgODAsIDIxNywgMTMsIDEwMiwgMSwgMjMzLCAxMzYsIDIzMywgMjQsIDEwMiwgMSwgMjMzLCAxMzYsIDIzMywgCi0gICAgMjUsIDIxNywgMTMsIDEwMiwgMSwgMjQ1LCAxNzksIDEwMiwgMSwgMjU0LCAxOTksIDEwMiwgMSwgMjI2LCAyMTIsIDEwMiwgCi0gICAgMSwgMjI2LCAyMTMsIDIxNywgMTMsIDEwMiwgMSwgMTc2LCAxMDIsIDEsIDIzNSwgMTMsIDIzMSwgMjA3LCAxMDIsIDEsIAotICAgIDI0MywgMTM1LCAxMDIsIDEsIDI0MywgMTM2LCAyNDIsIDE2MSwgMTAyLCAxLCAyMjksIDc3LCAxMDIsIDEsIDI1MSwgMzMsIAotICAgIDEwMiwgMSwgMjUxLCAzNCwgMjMzLCAxMjMsIDEwMiwgMSwgMjM1LCAxNDEsIDEwMiwgMSwgMjM1LCAxNDIsIDIzNSwgMTE4LCAKLSAgICAxMDIsIDEsIDIyNywgMTY1LCAxMDIsIDEsIDIxNywgMTA2LCAyMzMsIDc2LCAxMDIsIDEsIDIxNywgMTA2LCAyMzAsIDY3LCAKLSAgICAyMzEsIDIwNywgMTAyLCAxLCAyNDgsIDIyMiwgMjMwLCA2NywgMjU0LCAxNDUsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMCwgNjcsIAotICAgIDIzMSwgMjA3LCAxMDIsIDEsIDIyOSwgMjI5LCAyMjMsIDE1MiwgMTAyLCAxLCAyMTcsIDEwNSwgMTAyLCAxLCAyMTcsIDEwNiwgCi0gICAgMjE3LCAzNSwgMTAyLCAxLCAyNDgsIDIyMSwgMTAyLCAxLCAyNDgsIDIyMiwgMjMxLCAyMjUsIDEwMiwgMSwgMTk3LCAxMDIsIAotICAgIDEsIDE5MCwgMTAyLCAxLCAyMjYsIDkwLCAyMzQsIDIyNiwgMTAyLCAxLCAyNTIsIDE5MSwgMTAyLCAxLCAyNTIsIDE5MiwgCi0gICAgMjM0LCAxNzIsIDEwMiwgMSwgMTg0LCAxMDIsIDEsIDE5MSwgMTAyLCAxLCAyMDUsIDEwMiwgMSwgMjMzLCAxMzUsIDEwMiwgCi0gICAgMSwgMjEyLCA2NSwgMTAyLCAxLCAyMjIsIDM0LCAyMjIsIDIwLCAxMDIsIDEsIDIyMiwgMzQsIDIyMSwgMjMzLCAxMDIsIDEsIAotICAgIDIwNiwgMTAyLCAxLCAxNjIsIDEwMiwgNSwgMjIzLCA3MCwgMTAyLCAyNSwgNSwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjE0LCAKLSAgICAxOTksIDEwMiwgMjUsIDUsIDIxNCwgMjAwLCAyMjEsIDIyOSwgMTAyLCAyNSwgNSwgMjE4LCA0NywgMTAyLCAyNSwgNSwgCi0gICAgMjE4LCA0OCwgMjM2LCAyMSwgMTAyLCAyNSwgNSwgMjIzLCAxODgsIDIyMywgNzksIDEwMiwgMjUsIDUsIDIyMywgMTg4LCAKLSAgICAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMzMsIDEzNiwgMjMzLCAyNCwgMTAyLCAyNSwgNSwgMjMzLCAxMzYsIAotICAgIDIzMywgMjUsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNywgNjUsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDIyMywgNzksIDEwMiwgCi0gICAgMjUsIDUsIDIxNywgNjYsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDIyMywgODAsIDIxNywgMTMsIDEwMiwgMjUsIAotICAgIDUsIDIyNSwgMTg0LCAxMDIsIDI1LCA1LCAyMjUsIDE4NSwgMjE3LCAxMywgMTAyLCAyNTQsIDI1MCwgMjU0LCAyNDksIDEwMiwgCi0gICAgMSwgMjM0LCAyNTEsIDIyMSwgMjI4LCAxMDIsIDEsIDIzNCwgMTAyLCAyMjEsIDIyOCwgMTAyLCAxLCAyMTUsIDM0LCAyMjEsIAotICAgIDIyOCwgMTAyLCAxLCAyNDUsIDIwMywgMjIxLCAyMjgsIDEwMiwgMSwgMjE0LCAwLCAyMjEsIDIyOCwgMTAyLCAxLCAyMTAsIAotICAgIDEwNywgMjIxLCAyMjgsIDEwMiwgMSwgMjUzLCAyMDksIDIyMSwgMjI4LCAxMDIsIDIxLCAyMTAsIDg2LCAxMDIsIDIxLCAKLSAgICAxMTAsIDEwMiwgMjEsIDEwNSwgMTAyLCAyMSwgMTU4LCAxMDIsIDIxLCAxNjEsIDEwMiwgMjEsIDE4OSwgMTAyLCAyMSwgCi0gICAgMTk0LCAxMDIsIDIxLCAxOTgsIDEwMiwgMjEsIDE5NSwgMTAyLCAyMSwgMjAwLCAxMDIsIDIyNiwgMjksIDEwMiwgMjI2LCAKLSAgICA1NSwgMTAyLCAyMTEsIDIzOCwgMTAyLCAyNTAsIDIzNiwgMjI2LCA0OCwgMTAyLCAyNTAsIDIzNiwgMjE5LCAxNzIsIDEwMiwgCi0gICAgMjUwLCAyMzYsIDIyNiwgMiwgMTAyLCAyMjYsIDU0LCAxMDIsIDI4LCAxNiwgMjQ3LCAxMjYsIDEwMiwgMjgsIDE2LCAyNDgsIAotICAgIDUxLCAxMDIsIDI4LCAxNiwgMjQ2LCA2NCwgMTAyLCAyOCwgMTYsIDI0OCwgMTc2LCAxMDIsIDI4LCAxNiwgMjQ4LCAxNzcsIAotICAgIDIxOCwgMTUsIDEwMiwgMjgsIDE2LCAyNDcsIDIwNSwgMTAyLCAyOCwgMTYsIDI0OCwgMjE0LCAxMDIsIDI4LCAxNiwgMjQ4LCAKLSAgICAzMywgMTAyLCAyOCwgMTYsIDI0OCwgMTk4LCAxMDIsIDI4LCAxNiwgMjQ4LCAxNzcsIDI0MywgNTcsIDEwMiwgMjgsIDE2LCAKLSAgICAzOCwgMjE3LCA5LCAxMDIsIDI4LCAxNiwgMzgsIDI0NSwgMTQxLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTY3LCAxMDIsIAotICAgIDI4LCAxNiwgMzgsIDIzNCwgMTY5LCAxMDIsIDI4LCAxNiwgMzgsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgCi0gICAgMTY4LCAyLCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3MCwgMiwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAKLSAgICAzOCwgMjUyLCAzNywgMTAyLCAyOCwgMTYsIDM4LCAyNDIsIDE2NSwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyMDQsIDI0NiwgCi0gICAgNzQsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjA0LCAyNDgsIDIxMiwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyNTAsIDAsIAotICAgIDIxNSwgMTExLCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDI1MCwgMCwgMjE3LCA3MywgMTAyLCAyOCwgMTYsIDIzMywgNDQsIAotICAgIDIwNCwgMjI2LCA0MywgMTAyLCAyOCwgMTYsIDIzMywgNDQsIDIwNCwgMjI0LCAxMzksIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAKLSAgICAyNTAsIDAsIDIyNSwgMzgsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAyNTAsIDAsIDIyNSwgMjYsIDEwMiwgMjgsIDE2LCAyMzMsIAotICAgIDQ0LCAyMDQsIDIyNSwgNjEsIDIwNywgNSwgMjI2LCAyNiwgMjA3LCA1LCAyMjYsIDM5LCAyMDcsIDUsIDIyNiwgMzUsIDIwNywgCi0gICAgMSwgNjEsIDIwNywgMSwgNzMsIDIwNywgMSwgNzAsIDIwNywgMSwgMjU0LCAyNDMsIDIwNywgMSwgNzYsIDIwNywgMSwgNzUsIAotICAgIDIwNywgMSwgMjQ1LCA1NSwgMjA3LCAxLCAxNzYsIDIwNywgMSwgMjI0LCA4OCwgMjA3LCAxLCAyNDMsIDEzNSwgMjA3LCAxLCAKLSAgICAyMjksIDc3LCAyMDcsIDEsIDI1MSwgMzMsIDIwNywgMSwgMjM1LCAxNDEsIDIwNywgMSwgMjEwLCAxMTYsIDIwNywgMSwgCi0gICAgMjI3LCAxNjUsIDIwNywgMSwgMjE3LCAxMDUsIDIwNywgMSwgMjQ4LCAyMjEsIDIwNywgMSwgMTk3LCAyMDcsIDEsIDE5MCwgCi0gICAgMjA3LCAxLCAyNDQsIDE5NiwgMjA3LCAxLCAyMTQsIDI3LCAyMDcsIDEsIDI1MiwgMTkxLCAyMDcsIDEsIDE4NCwgMjA3LCAxLCAKLSAgICAxOTEsIDIwNywgMSwgMjA1LCAyMDcsIDEsIDIzMywgMTM1LCAyMDcsIDEsIDIxMiwgNjUsIDIwNywgMSwgMjA2LCAyMDcsIDEsIAotICAgIDIxMSwgMTY1LCAyMDcsIDEsIDE2MiwgMjA3LCAxMTYsIDUsIDIyNiwgNTIsIDIwNywgMTE2LCA1LCAyMjYsIDI4LCAyMDcsIAotICAgIDExNiwgNSwgMjI2LCAyNSwgMjA3LCAyNSwgNSwgMjI2LCA0MiwgMjA3LCAyNSwgNSwgMjI2LCAyNCwgMjA3LCAyNSwgNSwgCi0gICAgMjI2LCA0NiwgMjA3LCAyNSwgNSwgMjI2LCAzNCwgMjA3LCAyNSwgNSwgMjI2LCA1MywgMjA3LCAyNSwgNSwgMjI2LCA0NCwgCi0gICAgMjA3LCA1LCAyMjYsIDU2LCAyMDcsIDUsIDIxMywgMTUyLCAyMDcsIDExNiwgNSwgMjI1LCAyNDgsIDE4NCwgMjA3LCAxMTYsIAotICAgIDUsIDIyNSwgMjQ4LCAyMTIsIDY1LCAyMDcsIDEsIDIzNCwgMTMyLCAyMDcsIDEsIDIxNywgMjMxLCAyMDcsIDIxLCAyMTAsIAotICAgIDg2LCAyMDcsIDIxLCAxMTAsIDIwNywgMjEsIDEwNSwgMjA3LCAyMSwgMTU4LCAyMDcsIDIxLCAxNjEsIDIwNywgMjEsIDE4OSwgCi0gICAgMjA3LCAyMSwgMTk0LCAyMDcsIDIxLCAxOTgsIDIwNywgMjEsIDE5NSwgMjA3LCAyMSwgMjAwLCAyMDcsIDI1MywgMTc1LCAKLSAgICAyMDcsIDEsIDIyMywgNTIsIDIwNywgMSwgMjMzLCA3LCAyMDcsIDEsIDI1MiwgMTgsIDIwNywgMSwgNDAsIDIzNSwgMjMsIAotICAgIDIwNywgMSwgNDAsIDE5MywgMjUyLCAxMjAsIDEsIDYxLCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDYxLCAyNTIsIDEyMCwgMSwgCi0gICAgMTYyLCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDE2MiwgMjUyLCAxMjAsIDEsIDIzMSwgMTgxLCAxNjIsIDI1MiwgMTIwLCAxLCAKLSAgICAyNTIsIDE5MSwgMjUyLCAxMjAsIDEsIDIzNCwgMjEyLCAyNTIsIDE5MSwgMjUyLCAxMjAsIDEsIDE5MCwgMjUyLCAxMjAsIDEsIAotICAgIDIxOSwgMTY0LCAxOTAsIDI1MiwgMTIwLCAxLCAxOTcsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMTk3LCAyNTIsIDEyMCwgMSwgCi0gICAgMjEyLCA2NSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyMTIsIDY1LCAyNTIsIDEyMCwgMSwgMjI2LCA2NywgMjEyLCA2NSwgCi0gICAgMjUyLCAxMjAsIDEsIDI0MywgMTM1LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDI0MywgMTM1LCAyNTIsIDEyMCwgMSwgMjM1LCAKLSAgICAxNDEsIDI1MiwgMTIwLCAxLCAyNDgsIDIyMSwgMjUyLCAxMjAsIDEsIDIwNSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyMDUsIAotICAgIDI1MiwgMTIwLCAxLCAxODQsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMTg0LCAyNTIsIDEyMCwgMSwgMjE5LCAyNiwgMjE3LCAKLSAgICAxMDUsIDI1MiwgMTIwLCAxLCAyMjgsIDU1LCAyMTcsIDEwNSwgMjUyLCAxMjAsIDEsIDIwNiwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAyMDYsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMjA2LCAyNTIsIDEyMCwgMSwgMTkxLCAyNTIsIDEyMCwgMSwgMjE5LCAKLSAgICAxNjQsIDE5MSwgMjUyLCAxMjAsIDEsIDIyOSwgNzcsIDI1MiwgMTIwLCAxLCAyMzMsIDEzNSwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAyMzMsIDEzNSwgMjUyLCAxMjAsIDEsIDIyNywgMTY1LCAyNTIsIDEyMCwgMSwgMjUxLCAzMywgMjUyLCAxMjAsIDEsIAotICAgIDIyOSwgMTQ4LCAyNTIsIDEyMCwgMSwgMjMxLCAxMjQsIDI1MiwgMTIwLCAxLCA3MywgMjUyLCAxMjAsIDEsIDcwLCAyNTIsIAotICAgIDEyMCwgNSwgMjE2LCAzMywgMjUyLCAxMjAsIDI1LCA1LCA3NSwgMjUyLCAxMjAsIDI1LCA1LCAyMjYsIDY3LCA3NSwgMjUyLCAKLSAgICAxMjAsIDI1LCA1LCAyNDUsIDIwOSwgMjUyLCAxMjAsIDI1LCA1LCA3MywgMjUyLCAxMjAsIDI1LCA1LCAyMzQsIDIxMiwgNzMsIAotICAgIDI1MiwgMTIwLCAyNSwgNSwgNzYsIDI1MiwgMTIwLCAyNSwgNSwgMjM0LCAyMTIsIDc2LCAyNTIsIDEyMCwgMjUsIDUsIDcwLCAKLSAgICAyNTIsIDEyMCwgMjUsIDUsIDEwNCwgMzEsIDIxOSwgMTY0LCAyMDYsIDI1MiwgMTIwLCAxMTYsIDUsIDIyOSwgNzksIDI1MiwgCi0gICAgMTIwLCAxMTYsIDUsIDI0MiwgNjAsIDI1MiwgMTIwLCAyMjYsIDM3LCAyNTIsIDEyMCwgMjI2LCAzMywgMjUyLCAxMjAsIDE2LCAKLSAgICAyNTEsIDI0MSwgMjI5LCAyMjksIDIzMSwgMzcsIDI1MiwgMTIwLCAxNiwgMjUxLCAyNDEsIDIyNSwgNjQsIDI1MiwgMTIwLCAKLSAgICAxNiwgMjUxLCAyNDEsIDIzNSwgNDgsIDI1MiwgMTIwLCAxNiwgMjUxLCAyNDEsIDIyNiwgMzcsIDE5NiwgMSwgMTc2LCAxOTYsIAotICAgIDEsIDIzNCwgMzksIDE5NiwgMSwgMjM0LCAxMzIsIDE5NiwgMSwgMjQzLCAxMzUsIDE5NiwgMSwgMjQyLCAxODYsIDE5NiwgMSwgCi0gICAgMjI5LCA3NywgMTk2LCAxLCAyNTEsIDMzLCAxOTYsIDEsIDI1MCwgMTU3LCAxOTYsIDEsIDIzNSwgMTQxLCAxOTYsIDEsIAotICAgIDIyNywgMTY1LCAxOTYsIDEsIDIxNywgMTA1LCAxOTYsIDEsIDIxNiwgMjA4LCAxOTYsIDEsIDI0OCwgMjIxLCAxOTYsIDEsIAotICAgIDE5NywgMTk2LCAxLCAxOTAsIDE5NiwgMSwgMjI1LCA0MiwgMTk2LCAxLCAyMjUsIDE0NywgMTk2LCAxLCAyNDQsIDE5NiwgCi0gICAgMTk2LCAxLCAyNDQsIDc1LCAxOTYsIDEsIDI1MiwgMTkxLCAxOTYsIDEsIDI1MSwgMjIyLCAxOTYsIDEsIDE4NCwgMTk2LCAxLCAKLSAgICAyMzAsIDE2OCwgMTk2LCAxLCAyMTUsIDE4MywgMTk2LCAxLCAyMTUsIDE3NSwgMTk2LCAxLCAyNDYsIDM4LCAxOTYsIDEsIAotICAgIDE5MSwgMTk2LCAxLCAyMDUsIDE5NiwgMSwgMjMzLCAxMzUsIDE5NiwgMSwgMTYyLCAxOTYsIDEsIDI0MSwgMTUzLCAxOTYsIAotICAgIDEsIDIxNCwgMjcsIDE5NiwgMSwgMjA2LCAxOTYsIDEsIDIyMCwgMTAyLCAxOTYsIDEsIDIxMiwgNjUsIDE5NiwgMSwgNjEsIAotICAgIDE5NiwgMjE4LCA3MywgMSwgMTkxLCAxOTYsIDIxOCwgNzMsIDEsIDIwNSwgMTk2LCAyNSwgNSwgMjU1LCA3MywgMTk2LCAyNSwgCi0gICAgNSwgNzMsIDE5NiwgMjUsIDUsIDc2LCAxOTYsIDI1LCA1LCAyMjYsIDE4MywgMTk2LCAyNSwgNSwgNzAsIDE5NiwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAxOTYsIDI1LCA1LCA3NSwgMTk2LCAxMTYsIDUsIDIzNSwgMjMsIDE5NiwgMTE2LCA1LCAxOTMsIDE5NiwgCi0gICAgMTE2LCA1LCAxNTYsIDE5NiwgMTE2LCA1LCAyMzAsIDI1LCAxOTYsIDExNiwgNSwgMjI2LCAxMDUsIDE5NiwgMTE2LCA1LCAKLSAgICAxNTMsIDE5NiwgMTE2LCA1LCAyMTcsIDE1MiwgMTk2LCAxMTYsIDUsIDIyNywgMTQyLCAxOTYsIDExNiwgNSwgMjM0LCAyMzAsIAotICAgIDE5NiwgNSwgMjIzLCAxNTAsIDE5NiwgNSwgMjI3LCAyMDUsIDE5NiwgMjI0LCAxNDEsIDIxNywgMTAzLCAxOTYsIDIyNCwgCi0gICAgMTQxLCAyMjcsIDE1MiwgMjE2LCAxMjAsIDIxNywgMTAzLCAxOTYsIDIyNCwgMTQxLCAyNTAsIDE2NCwgMTk2LCAyMjQsIAotICAgIDE0MSwgMjE1LCAxNzAsIDI1MCwgMTY0LCAxOTYsIDIyNCwgMTQxLCAyMTUsIDE2OSwgMTk2LCAyMSwgMjEwLCA4NiwgMTk2LCAKLSAgICAyMSwgMTEwLCAxOTYsIDIxLCAxMDUsIDE5NiwgMjEsIDE1OCwgMTk2LCAyMSwgMTYxLCAxOTYsIDIxLCAxODksIDE5NiwgMjEsIAotICAgIDE5NCwgMTk2LCAyMSwgMTk4LCAxOTYsIDIxLCAxOTUsIDE5NiwgMjEsIDIwMCwgMTk2LCAxLCAyMTUsIDE1NiwgMTk2LCAxLCAKLSAgICAyMTUsIDE0NCwgMTk2LCAxLCAyNDgsIDEzNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMjEwLCA4NiwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAyMSwgMTEwLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxMDUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIAotICAgIDE1OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTYxLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxODksIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMjEsIDE5NCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTk4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAKLSAgICAxOTUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDIwMCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzMsIDEzNSwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyNTMsIDIwNiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTQsIDIxNiwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAxLCAyNTQsIDExNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTQsIDE3OCwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAxLCAyMzMsIDEzNCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTUsIDM1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIAotICAgIDI1NSwgMzYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAzNCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTUsIDI5LCAKLSAgICAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgMjQxLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzNSwgMTcxLCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDIzNiwgMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjM1LCAxOTAsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjM1LCAxNzksIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMyLCA5OCwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAxLCAyMTQsIDIyMSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMTQsIDIxOSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAKLSAgICAyMTQsIDE2OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMTQsIDExMSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzMsIAotICAgIDU4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgMTA4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgMjEyLCAKLSAgICAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgMTUwLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgODYsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjMyLCAxNTYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjI2LCAxMzcsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjI2LCAyNTIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjI2LCAxMjUsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjI2LCAyMjIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjMwLCAxMDMsIDIxNSwgMTIxLCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDI0MywgMTMwLCAyMTUsIDEyMiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMzAsIDEwMSwgMjE1LCAxMjIsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMjIzLCA5MiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMjUsIDE0NSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAKLSAgICAyNTQsIDIwOCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMjQsIDE0MSwgMjMwLCA5OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMjQsIAotICAgIDE0MSwgNTIsIDIzMCwgOTgsIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyMTgsIDgsIDIwNywgMjI0LCAxNDEsIDI1MSwgCi0gICAgMjQxLCAyMjYsIDM4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjI0LCAxMjksIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAKLSAgICAyNTEsIDE5LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjMzLCA4LCAyMjEsIDIyNSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAKLSAgICAyNDEsIDIzNSwgMTMsIDIyMSwgMjI1LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjQ4LCAyMjIsIDIyMSwgMjI1LCAyMDcsIAotICAgIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjUyLCAxOTIsIDIyMSwgMjI1LCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIxMCwgMjEzLCAKLSAgICAyNTIsIDEzOCwgMjIwLCA3NywgMjEzLCAyNTIsIDEzOCwgMjI0LCAxOTgsIDIxMywgMjUyLCA1LCAyMjgsIDIwOSwgMjEzLCAKLSAgICAyNTIsIDUsIDIxMSwgODAsIDIzMCwgMjIyLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDI1NCwgMjEzLCAyMzUsIAotICAgIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAKLSAgICAyMTEsIDgwLCAyMzQsIDE5OCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjUxLCAyLCA1MSwgMjEzLCAyNTIsIAotICAgIDEzOCwgMjExLCA4MCwgMjM0LCAxOTgsIDIzNSwgMjQzLCAyMTgsIDEsIDIyMSwgMTk3LCAyMTMsIDI1MiwgMTM4LCA1MiwgCi0gICAgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTUsIDIxMSwgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMzQsIDE5OCwgMjU0LCAKLSAgICA3NywgMjEzLCAyNTIsIDEzOCwgNTksIDUxLCAyMTMsIDI1MiwgMTM4LCAxMTMsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIAotICAgIDEzNCwgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMjIyLCAyNDAsIDIzNCwgMjA5LCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIAotICAgIDI1MiwgMTM4LCAyNTMsIDIwNCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTgsIDAsIDIxMywgCi0gICAgMjUyLCA1LCAyMTMsIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAyMjMsIDQ5LCAyMTMsIDE0OCwgMjE0LCAyMTYsIAotICAgIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCA3NywgMjEzLCAyNTIsIDUsIDIyMywgNDksIDIxMywgMTQ4LCAyNTQsIDc3LCAKLSAgICAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxNCwgMjE3LCAyLCAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgCi0gICAgNzgsIDIsIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyNTQsIDkxLCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjUyLCAKLSAgICAxNjYsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyMTQsIDIwLCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjE0LCAyMSwgMiwgCi0gICAgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDIxNiwgNjgsIDIxMywgMjUyLCA1LCAyNDEsIDE5MSwgMTk5LCAyNTQsIDc1LCAyMTMsIAotICAgIDI1MiwgNSwgMTk5LCAyNTQsIDc1LCAyMTMsIDI1MiwgNSwgMjIyLCAxNDIsIDE5OSwgMjU0LCA3NSwgMjEzLCAyNTIsIDUsIAotICAgIDI1NCwgNzYsIDIxNCwgMjIzLCAyMzAsIDkwLCAyMTMsIDI1MiwgNSwgMjU0LCAyMCwgMjEzLCAyNTIsIDUsIDIyMiwgMTg3LCAKLSAgICAyNTQsIDIwLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDIsIDQ4LCAyMTMsIDI1MiwgNSwgMjM1LCAxMDIsIDIxMywgMjUyLCA1LCAKLSAgICAyMTQsIDE2MSwgNywgMSwgNCwgNiwgNjEsIDcsIDEsIDQsIDYsIDI1NCwgMjQzLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIAotICAgIDI0MywgNywgMSwgNCwgNiwgMjUyLCAxMzQsIDI1MywgMTU4LCA3LCAxLCA0LCA2LCAyNTEsIDY2LCA3LCAxLCA0LCA2LCAKLSAgICAyNDksIDYwLCA3LCAxLCA0LCA2LCAyNDUsIDU5LCA3LCAxLCA0LCA2LCA3NSwgNywgNCwgMSwgMjE1LCA5NCwgMjA0LCA3NSwgCi0gICAgNywgNCwgMSwgMjE1LCA5NCwgNzMsIDcsIDEsIDQsIDYsIDIzNSwgMTQ0LCA3LCAxLCA0LCA2LCAyMzUsIDIzLCA3LCAxLCA0LCAKLSAgICA2LCAyMzMsIDE0OSwgMiwgOTEsIDcsIDEsIDQsIDYsIDE5MywgNywgMSwgNCwgNiwgMjIzLCA0OSwgMjMwLCAyNSwgNywgMSwgCi0gICAgNCwgNiwgNzYsIDcsIDEsIDQsIDYsIDIwNCwgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCA3NiwgNywgNCwgMSwgMjE5LCAxODcsIAotICAgIDIwNCwgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjYsIDIzNCwgNywgMSwgCi0gICAgNCwgNiwgMjI2LCAxMzQsIDcsIDQsIDEsIDIxNiwgMTQsIDE2MywgNzYsIDcsIDQsIDEsIDI1MSwgMTc1LCAxNjMsIDc2LCA3LCAKLSAgICAxLCA0LCA2LCAyMjYsIDEwNSwgNywgMSwgNCwgNiwgMjIzLCA0OSwgMTUzLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxNTMsIDcsIAotICAgIDEsIDQsIDYsIDIxNywgMTUyLCA3LCAxLCA0LCA2LCA3MCwgNywgNCwgMSwgMjE5LCAxODcsIDcwLCA3LCA0LCAxLCAyMTksIAotICAgIDE4NywgMjQ4LCAwLCA3MCwgNywgNCwgMSwgMjE5LCAxODcsIDIxNSwgOTQsIDE5MywgNywgMSwgNCwgNiwgMjE0LCAxMDUsIAotICAgIDcsIDEsIDQsIDYsIDIxMiwgOTgsIDcsIDEsIDQsIDYsIDIxMCwgMTU5LCA3LCAxLCA0LCA2LCAyNDUsIDgsIDcsIDEsIDIxMywgCi0gICAgMTM1LCAyMzMsIDgyLCAyMTgsIDI1MCwgNywgMSwgMjU0LCAxOTYsIDI2LCAxLCA0LCA2LCAyNDMsIDEwNywgMjYsIDEsIDQsIAotICAgIDYsIDIzMywgOTgsIDI2LCAxLCA0LCA2LCAyMjUsIDEwOCwgMjYsIDEsIDQsIDYsIDIyMywgMzcsIDI2LCAxLCA0LCA2LCAKLSAgICAyMjQsIDE2MSwgMzMsIDEsIDQsIDYsIDI0NSwgMTc0LCA1OCwgMSwgNiwgNjEsIDU4LCAxLCA2LCAyNTQsIDI0MywgNTgsIDEsIAotICAgIDYsIDI1MywgMTU4LCA1OCwgMSwgNiwgMjUyLCAxMzQsIDI1MywgMTU4LCA1OCwgMSwgNiwgMjQ5LCA2MCwgNTgsIDEsIDYsIAotICAgIDc1LCA1OCwgMSwgNiwgMjIzLCA0OSwgNzUsIDU4LCAxLCA2LCAyNDMsIDIwMiwgNTgsIDEsIDYsIDI0MiwgNjAsIDU4LCAxLCAKLSAgICA2LCA3MywgNTgsIDEsIDYsIDIzNSwgMTQ0LCA1OCwgMSwgNiwgMjM1LCAyMywgNTgsIDEsIDYsIDE1NiwgNTgsIDEsIDYsIAotICAgIDE5MywgNTgsIDEsIDYsIDIzMCwgMjUsIDU4LCAxLCA2LCAyMjMsIDQ5LCAyMzAsIDI1LCA1OCwgMSwgNiwgNzYsIDU4LCAxLCAKLSAgICA2LCAyMjYsIDEzNCwgNTgsIDEsIDYsIDIyNiwgMTA1LCA1OCwgMSwgNiwgMTUzLCA1OCwgMSwgNiwgMjE3LCAxNTIsIDU4LCAKLSAgICAxLCA2LCA3MCwgNTgsIDEsIDYsIDIxMiwgOTgsIDU4LCAxLCA0LCA2MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDYxLCA1OCwgMSwgCi0gICAgNCwgMjU0LCAxNDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDI0MywgNTgsIDEsIDQsIDI1MywgMTU4LCA1OCwgMSwgNCwgCi0gICAgMjQ5LCA2MCwgNTgsIDEsIDQsIDc1LCA1OCwgMSwgNCwgMjIxLCAxOTUsIDU4LCAxLCA0LCAyMDQsIDc1LCA1OCwgMSwgNCwgCi0gICAgMjE1LCA5NCwgMjA0LCA3NSwgNTgsIDEsIDQsIDI0MywgMjAyLCA1OCwgMSwgNCwgMjE1LCA5NCwgNzMsIDU4LCAxLCA0LCAKLSAgICAyMzUsIDIzLCA1OCwgMSwgNCwgMTkzLCA1OCwgMSwgNCwgMjQ1LCAxMzgsIDU4LCAxLCA0LCA3NiwgNTgsIDEsIDQsIDIwNCwgCi0gICAgNzYsIDU4LCAxLCA0LCAyMTYsIDE0LCAxNjMsIDc2LCA1OCwgMSwgNCwgMjUxLCAxNzUsIDE2MywgNzYsIDU4LCAxLCA0LCAKLSAgICAyMjYsIDEwNSwgNTgsIDEsIDQsIDIxNywgMTUyLCA1OCwgMSwgNCwgNzAsIDU4LCAxLCA0LCAyMTksIDE4NywgNzAsIDU4LCAKLSAgICAxLCA0LCAyMTUsIDk0LCAxOTMsIDU4LCAxLCA0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDI1NCwgMTk2LCA1OCwgMSwgNCwgCi0gICAgMjUyLCAyNiwgNTgsIDEsIDQsIDI2LCAyNDMsIDEwNywgNTgsIDEsIDQsIDI0OCwgNTQsIDU4LCAxLCA0LCAyNiwgMjI1LCAKLSAgICAxMzMsIDU4LCAxLCA0LCAyNTAsIDExMCwgNywgMjE4LCA2NSwgNCwgMSwgNzMsIDcsIDIxOCwgNjUsIDQsIDEsIDE1MywgNywgCi0gICAgMjE4LCA2NSwgNCwgMSwgNzAsIDcsIDIxOCwgNjUsIDQsIDEsIDIxNCwgMTA1LCAyNiwgMjE4LCA2NSwgNCwgMSwgMjUyLCAKLSAgICAyNiwgMjYsIDIxOCwgNjUsIDQsIDEsIDI0MywgMTA3LCAyNiwgMjE4LCA2NSwgNCwgMSwgMjIzLCAzNywgMjYsIDIxOCwgNjUsIAotICAgIDQsIDEsIDIyNSwgMTMzLCAyNiwgMjE4LCA2NSwgNCwgMSwgMjUwLCAxMTAsIDcsIDQsIDEsIDIxNCwgMjE0LCA3LCA0LCAxLCAKLSAgICA1NywgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjQ1LCAKLSAgICA3LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzIsIDUwLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzAsIAotICAgIDI2LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNDQsIDg4LCAyMiwgMjMwLCAyMjQsIDE4MiwgCi0gICAgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDIzMCwgMjI0LCAxODIsIAotICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDMsIDIwMiwgNTgsIDEsIAotICAgIDMzLCAyNDUsIDE1MCwgNywgNCwgMSwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA0LCAxLCAyMTYsIDIxMSwgMiwgMjE4LCAKLSAgICAxMDcsIDcsIDQsIDYsIDEsIDI0MCwgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxODYsIDIsIDkxLCA3LCA0LCAxLCAyMjYsIAotICAgIDEwNiwgMiwgOTEsIDcsIDQsIDYsIDEsIDEwNCwgMiwgOTEsIDcsIDQsIDEsIDIxNCwgMTU4LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgNTcsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDUsIDcsIAotICAgIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjM1LCAyNCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzIsIDUwLCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjI2LCAxMDYsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjIyLCA5MiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDExNSwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNDEsIDUyLCAyMiwgMjE3LCA3NywgNywgNCwgMSwgMTYwLCAyLCAyMjMsIAotICAgIDU1LCAxMDMsIDcsIDQsIDEsIDIwNCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIyMywgNDksIDIwNCwgMTYwLCAKLSAgICAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI0MCwgMTU0LCAKLSAgICAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI0NSwgNzYsIDIsIAotICAgIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMTA0LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI0NSwgOSwgMiwgMjIzLCA1NSwgCi0gICAgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAxNDMsIDU4LCAxLCA0LCAyNTEsIDY2LCA1OCwgMSwgNCwgMjUxLCA2NywgCi0gICAgMiwgMjQ5LCAxMDAsIDU4LCAxLCA0LCAyNDUsIDU5LCA1OCwgMSwgNCwgMjIzLCA0OSwgMjA0LCA3NSwgNTgsIDEsIDQsIAotICAgIDI0NSwgNiwgNTgsIDEsIDQsIDI0NywgMTE5LCAyMzUsIDE0NSwgMiwgOTEsIDU4LCAxLCA0LCAxMTksIDI0MywgMjAyLCA1OCwgCi0gICAgMSwgNCwgMjE1LCA5NCwgMjQyLCA2MCwgNTgsIDEsIDQsIDI0MCwgMTU0LCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTg1LCAKLSAgICA1OCwgMSwgNCwgNiwgNzMsIDU4LCAxLCA0LCA2LCAyNDAsIDE1NCwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE0NSwgMiwgCi0gICAgMjQ5LCAxMjcsIDU4LCAxLCA0LCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgMjMzLCAxNDksIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNTgsIDEsIDQsIDYsIDE1NiwgNTgsIDEsIDQsIDIzMiwgNTAsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgCi0gICAgOTQsIDIzMiwgNTAsIDIsIDE5OSwgMjMzLCAzNiwgNTgsIDEsIDQsIDIzMCwgMjYsIDIsIDQzLCAxMDMsIDU4LCAxLCA0LCAKLSAgICAyMzAsIDI2LCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCA2LCAyMzAsIDI1LCA1OCwgMSwgNCwgMjUyLCAxMzQsIDc2LCAKLSAgICA1OCwgMSwgNCwgMjI1LCAxMzMsIDU4LCAxLCA0LCAyMjIsIDkyLCAyLCAxMDMsIDU4LCAxLCA0LCAyNDUsIDc1LCA1OCwgMSwgCi0gICAgNCwgMjE3LCAxNTMsIDIsIDIyNiwgNjYsIDEwMywgNTgsIDEsIDQsIDEwNCwgMTMwLCA1OCwgMSwgNCwgMjE0LCAxNTcsIDU4LCAKLSAgICAxLCA0LCA2LCA3MCwgNTgsIDEsIDQsIDIxNCwgMTA2LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMTQsIDEwNSwgNTgsIAotICAgIDEsIDQsIDIxMCwgMTU5LCA1OCwgMSwgNCwgMjEwLCAxNjAsIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDIxMCwgMTYwLCAKLSAgICAyLCAyNDksIDEwMCwgNTgsIDEsIDQsIDI0NSwgOCwgNTgsIDEsIDQsIDIxNiwgMTc5LCAzOCwgMjQ2LCAxMTgsIDI0MiwgCi0gICAgMTM3LCAyNTUsIDE0LCAzOCwgMjQ2LCAxMTgsIDI1NSwgMywgMjU1LCAxNCwgMzgsIDIxOSwgNjksIDUxLCAzOCwgMjE4LCA2LCAKLSAgICA3OCwgMzgsIDIzMSwgMjMxLCAzOCwgMjQyLCAxMzQsIDM4LCAyMzEsIDIyOSwgMzgsIDI1NSwgMSwgMzgsIDI0MiwgMTM1LCAKLSAgICAzOCwgMjU1LCAyLCAzOCwgNywgNCwgMSwgMjIzLCAyMjQsIDUxLCAzOCwgMjUxLCAxNDUsIDM4LCAyMzEsIDIzMCwgMzgsIAotICAgIDUyLCAyNTAsIDMxLCA0OCwgMzgsIDIyNiwgMjI1LCA0OCwgMzgsIDIxMCwgMzUsIDUxLCAzOCwgMjM1LCAxNzIsIDUxLCAzOCwgCi0gICAgMjE0LCAxNTEsIDQ4LCAzOCwgMjE0LCAxMzQsIDQ4LCAzOCwgNywgNCwgMSwgMjQ0LCA2MywgMjA0LCAxMTUsIDQ4LCAzOCwgCi0gICAgNywgNCwgMSwgMjU0LCAyNDMsIDM4LCA3LCA0LCAxLCAyNTQsIDczLCAzOCwgNywgNCwgMSwgMjUzLCAxNzYsIDM4LCA3LCA0LCAKLSAgICAxLCAyNTEsIDY3LCAyNTAsIDE4MywgMzgsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDksIDYwLCAzOCwgNywgNCwgMSwgMjQ1LCAKLSAgICA1OSwgMzgsIDcsIDQsIDEsIDI0MywgMjAyLCAzOCwgNywgMSwgNCwgNiwgMjQzLCAyMDIsIDM4LCA3LCA0LCAxLCAyMzUsIAotICAgIDIzLCAzOCwgNywgNCwgMSwgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTkzLCAzOCwgNywgNCwgCi0gICAgMSwgMjMwLCAyNSwgMzgsIDcsIDEsIDQsIDYsIDIzMCwgMjUsIDM4LCA3LCAxLCA0LCA2LCAxNTMsIDM4LCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNCwgMjIyLCAxODYsIDM4LCA3LCA0LCAxLCAyMjIsIDkxLCAzOCwgNywgNCwgMSwgMTk5LCAyMjIsIDkxLCAzOCwgCi0gICAgNywgNCwgMSwgMjEwLCAxNTksIDM4LCA1MiwgMjM1LCAxOTMsIDI1MSwgMTQ3LCA1MSwgMzgsIDI1NCwgMTQ4LCAxMjgsIAotICAgIDIxNiwgNDIsIDUxLCAzOCwgNDMsIDI1MywgMjUwLCA0OCwgMzgsIDQ0LCAyNTMsIDI1MCwgMjIsIDEyNCwgMjUzLCAyNTAsIAotICAgIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNTEsIDcsIDYsIAotICAgIDEsIDU3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDU3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDU3LCAyLCA1OSwgNTEsIDcsIDQsIAotICAgIDEsIDU3LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDU3LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDU3LCAyLCAyMzIsIDIxNCwgCi0gICAgNTEsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTg0LCAyMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNTAsIAotICAgIDE4NCwgMjIsIDE0MiwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDksIDYxLCAyLCA1OSwgNDgsIAotICAgIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDksIAotICAgIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjQ5LCA2MSwgCi0gICAgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAyNTAsIDMxLCAKLSAgICA1MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIAotICAgIDEzNiwgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIAotICAgIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIxNiwgODksIDUxLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTg0LCAyMiwgMjUxLCAxNDYsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAxODQsIDIyLCAyNTEsIDE0NiwgNywgNiwgMSwgMjQ1LCA3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NSwgCi0gICAgNywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMjQyLCA2MSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDIsIDYxLCAyLCA1OSwgNDgsIDcsIDYsIDEsIAotICAgIDI0MiwgNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAKLSAgICAyNDgsIDEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAxODMsIDcsIDQsIAotICAgIDEsIDI0MiwgNjEsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTEsIDE0NywgNTEsIDcsIDQsIDEsIDI0MiwgCi0gICAgNjEsIDIsIDI1MSwgMTQ3LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIxNiwgODksIDUxLCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjE2LCA4OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDIsIDIyLCAxNDIsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyNDgsIDIsIDIyLCAxNDIsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDE0MiwgNywgNCwgMSwgMjM1LCAyNCwgMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDU5LCA1MSwgNywgNiwgMSwgCi0gICAgMjM1LCAyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDIzMywgMTQ5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIzMiwgMjE0LCAKLSAgICA1MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAzMSwgNTEsIAotICAgIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDE0MiwgNywgNCwgMSwgMjMyLCA1MCwgMiwgMTQyLCA3LCA2LCAxLCAyMzIsIDUwLCAyLCAKLSAgICA1OSwgNDgsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjMyLCA1MCwgMiwgNTksIDUxLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjMwLCAyNiwgMiwgCi0gICAgNTksIDQ4LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDU5LCA1MSwgNywgNiwgCi0gICAgMSwgMjMwLCAyNiwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDIzMCwgMjYsIDIsIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjE2LCA4OSwgMjIsIDI0OCwgMSwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMjQ4LCAxLCA3LCA2LCAxLCAxNDQsIAotICAgIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNiwgCi0gICAgMSwgMjI2LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDE0MiwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDU5LCAKLSAgICA0OCwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDU5LCA0OCwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIAotICAgIDU5LCA1MSwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCAKLSAgICA0LCAxLCAyMjMsIDIyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDIyMiwgOTIsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCA1OSwgCi0gICAgNTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1NSwgMywgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjU1LCAzLCAKLSAgICAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDIzNSwgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5MiwgCi0gICAgMiwgMjUwLCAyMzUsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCAyNTIsIDQzLCAyMiwgNTksIDQ4LCA3LCAKLSAgICA0LCAxLCAyMjIsIDkyLCAyLCA1OSwgMjUyLCA0MywgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDU5LCA0OCwgCi0gICAgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTMsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgCi0gICAgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDUxLCA3LCAKLSAgICA2LCAxLCAxMDQsIDIsIDIxNiwgODksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgODksIDIyLCAKLSAgICAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIAotICAgIDI0OCwgMSwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDI0OCwgMSwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDE4MiwgCi0gICAgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDE4MiwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjE0LCAKLSAgICAxMDYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI0MiwgCi0gICAgMTM2LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNiwgMSwgMjEyLCAKLSAgICA5OSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgCi0gICAgNywgNCwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxMiwgCi0gICAgOTksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxNzksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxNzksIDIsIDU5LCAKLSAgICA0OCwgNywgNiwgMSwgMjExLCAxNzksIDIsIDI0OCwgMSwgNywgNCwgMSwgMjExLCAxNzksIDIsIDI0OCwgMSwgNywgNiwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTAsIDE2MCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIAotICAgIDIxNywgMTUzLCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMTE1LCAyLCA0NCwgMTYzLCAyMjIsIDIzMywgNywgNCwgMSwgMTk5LCAKLSAgICAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MiwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAxOTksIAotICAgIDIyMiwgOTIsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDIyMCwgNzYsIDIyMiwgOTEsIDcsIDQsIDEsIDI0OCwgNTQsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgNTksIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTE1LCAyLCAyNDEsIDUyLCA0OCwgCi0gICAgNywgNCwgMSwgMTE1LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAKLSAgICAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAKLSAgICAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgCi0gICAgNDgsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIAotICAgIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgCi0gICAgNTksIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIAotICAgIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIAotICAgIDI1MSwgMTQ3LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAyNDEsIDUyLCA0OCwgNywgCi0gICAgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDE4MiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDE4MiwgNywgCi0gICAgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDU5LCAKKyAgICAwLCAyMTksIDIwLCAyNDUsIDM5LCA3OSwgMjI0LCAxLCA3OSwgNTQsIDUwLCAyNDcsIDE0MCwgNTAsIDIyNSwgMTg1LCA1MCwgCisgICAgMjU0LCAxMzQsIDI1NCwgNjUsIDQzLCAyMjYsIDcsIDQ0LCAyMjYsIDcsIDI1MywgMjI0LCA5NiwgNTAsIDI0OSwgMjI3LCAKKyAgICAyNDAsIDE3NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMTksIDQ4LCAyMSwgMjEwLCA4NiwgMjEsIDExMSwgMjEsIDEwNSwgMjEsIAorICAgIDE1OCwgMjEsIDE2MSwgMjEsIDE5MCwgMjEsIDE5NSwgMjEsIDE5OSwgMjEsIDE5NiwgMjEsIDIwMSwgMjQ5LCAyMzQsIDIyMCwgCisgICAgMTUyLCAyMzMsIDIxLCA1MCwgMjQ1LCAxMDYsIDUwLCAyNDIsIDEzNywgNTAsIDIyNCwgMTYsIDc5LCAyNDksIDIyNSwgMjUzLCAKKyAgICAyMTQsIDcsIDYsIDEsIDYxLCA3LCA2LCAxLCAyNTMsIDE2NiwgNywgNiwgMSwgMjUxLCA3NCwgNywgNiwgMSwgMjQ5LCA2OCwgCisgICAgNywgNiwgMSwgNzYsIDcsIDYsIDEsIDI0NSwgMTQsIDcsIDYsIDEsIDI0MywgMjA5LCA3LCA2LCAxLCAyNDIsIDY3LCA3LCA2LCAKKyAgICAxLCA3NCwgNywgNiwgMSwgMjM1LCAxNTAsIDcsIDYsIDEsIDIzNSwgMjksIDcsIDYsIDEsIDE1NiwgNywgNiwgMSwgMTk0LCAKKyAgICA3LCA2LCAxLCAyMzAsIDMwLCA3LCA2LCAxLCA3OCwgNywgNiwgMSwgMjI2LCAxMDksIDcsIDYsIDEsIDIyNCwgOTksIDcsIDYsIAorICAgIDEsIDE1MywgNywgNiwgMSwgMjIyLCA5MywgNywgNiwgMSwgMjE3LCAxNTMsIDcsIDYsIDEsIDY5LCA3LCA2LCAxLCAyMTQsIAorICAgIDEwNSwgNywgNiwgMSwgMjEyLCA5OCwgNywgNiwgMSwgMjExLCAxNzgsIDcsIDYsIDEsIDIxMSwgMTE3LCA3LCA2LCAxLCAKKyAgICAyMTAsIDE1OSwgNDMsIDQyLCAxMjcsIDIyMywgNTMsIDIxOSwgNDgsIDQ0LCA0MiwgMTI3LCAyNTAsIDM5LCAyNTUsIDIzLCAKKyAgICAxMjEsIDIzMiwgMjE5LCAyNDIsIDE0NCwgMjU1LCAyMywgNywgNCwgMSwgNjEsIDcsIDQsIDEsIDI1MywgMTY2LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc0LCA3LCA0LCAxLCAyNDksIDY4LCA3LCA0LCAxLCA3NiwgNywgNCwgMSwgMjQ1LCAxNCwgNywgNCwgMSwgCisgICAgMjQzLCAyMDksIDcsIDQsIDEsIDI0MiwgNjcsIDcsIDQsIDEsIDc0LCA3LCA0LCAxLCAyMzUsIDE1MCwgNywgNCwgMSwgMjM1LCAKKyAgICAyOSwgNywgNCwgMSwgMTU2LCA3LCA0LCAxLCAxOTQsIDcsIDQsIDEsIDIzMCwgMzAsIDcsIDQsIDEsIDc4LCA3LCA0LCAxLCAKKyAgICAyMjYsIDEwOSwgNywgNCwgMSwgMjI0LCA5OSwgNywgNCwgMSwgMTUzLCA3LCA0LCAxLCAyMjIsIDkzLCA3LCA0LCAxLCAyMTcsIAorICAgIDE1MywgNywgNCwgMSwgNjksIDcsIDQsIDEsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTIsIDk4LCA3LCA0LCAxLCAyMTEsIDE3OCwgCisgICAgNywgNCwgMSwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTU5LCA0MywgMjQ5LCAxMDcsIDEyNywgNjcsIDIzMiwgMjE5LCAKKyAgICA0NCwgMjQ5LCAxMDcsIDEyNywgMTg0LCAyMjgsIDc4LCAyMTksIDIwLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDI1MCwgCisgICAgMTg0LCA1MCwgMjI0LCAyMzEsIDUwLCAyNDksIDEwNiwgNTAsIDIxMSwgNDAsIDUwLCAyNTEsIDE0MywgMTMwLCAyMjEsIAorICAgIDE3NSwgNTAsIDI0OCwgOSwgMjQ5LCAxNzEsIDUwLCAyNDQsIDE0NCwgMjI2LCAxNTgsIDIzNSwgMjQ1LCAyMzMsIDQ4LCA1MiwgCisgICAgMjU0LCAxMTgsIDIyNCwgMSwgNzksIDIyOCwgNTcsIDUwLCAyMTksIDU0LCAyNDAsIDE3NSwgMjIzLCAxMDUsIDUwLCAyMzEsIAorICAgIDIzNywgMjQ4LCA3OSwgNTAsIDIyNSwgMjQsIDUwLCAyMTgsIDI0LCAxMDUsIDIxOCwgMjQsIDE1OCwgMjU1LCAxMiwgMjU1LCAKKyAgICAyMywgMjMwLCAyMzMsIDUwLCAyMjUsIDcxLCA1MCwgMjMwLCAyMjksIDI0NywgMTI4LCAyNTAsIDE5MSwgMjE4LCAyNCwgCisgICAgMTExLCAyMzEsIDE1MywgMjI2LCAxNTgsIDIzNSwgMjQ1LCAyMjIsIDI1MCwgNTIsIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAKKyAgICAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAyMTIsIAorICAgIDExNCwgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAyMzUsIDIwMCwgMjI0LCAxNiwgNzksIDcsIDYsIDEsIDExNiwgMiwgMjQyLCAKKyAgICAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMTg0LCA3LCA2LCAxLCAxMTYsIDIsIDI0OCwgOSwgNywgNiwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNDgsIDcsIDYsIDEsIAorICAgIDI1NCwgMjUyLCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMTYwLCAyLCAyNDIsIDE0MywgNywgNiwgCisgICAgMSwgMTYwLCAyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTYwLCAyLCAyNDgsIDksIDcsIDYsIAorICAgIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDcsIDYsIDEsIDI0NSwgNjcsIDcsIDYsIDEsIDIzMCwgCisgICAgMzEsIDIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTQ0LCAyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCA5LCAyMzAsIDg5LCAKKyAgICA1MCwgNywgNiwgMSwgMTQ0LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAxNDIsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAKKyAgICAxNDIsIDcsIDYsIDEsIDIxNiwgMTUyLCA3LCA0LCAxLCAyMjAsIDc4LCAyMjIsIDkzLCA3LCA0LCAxLCAxMTYsIDIsIDI0MiwgCisgICAgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxMTYsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNDgsIDksIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAKKyAgICAyNTQsIDI1MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDE2MCwgMiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDE2MCwgMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDE2MCwgMiwgMjQ4LCA5LCA3LCA0LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyNDUsIDY3LCA3LCA0LCAxLCAyMzAsIAorICAgIDMxLCAyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDE0NCwgMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0OCwgOSwgMjQ3LCAxNzcsIAorICAgIDUwLCA3LCA0LCAxLCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAxMDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDE0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIAorICAgIDE0MiwgNywgNCwgMSwgMjE2LCAxNTIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIAorICAgIDExNiwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDExNiwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDExNiwgMiwgMjI2LCAyMjgsIAorICAgIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDE0MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMTQyLCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAKKyAgICAyNTAsIDM4LCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCA1OSwgNDgsIDcsIDQsIAorICAgIDEsIDI1MSwgNzUsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI1MSwgNzUsIAorICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAKKyAgICAyNDIsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDkxLCA3LCA0LCAxLCAyNDksIDY5LCAyLCA5MSwgNywgNiwgMSwgMTYwLCAyLCAKKyAgICAyMzEsIDIzNywgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA2LCAKKyAgICAxLCAxNjAsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMjQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgCisgICAgMjQzLCAyMTAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMjQzLCAyMTAsIAorICAgIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQyLCA2OCwgMiwgCisgICAgOTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDkxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMTg0LCA3LCA0LCAxLCAyNDAsIAorICAgIDE2MSwgMiwgMTg0LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIAorICAgIDIzNywgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjUxLCAxNTQsIDcsIAorICAgIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAKKyAgICAyNDAsIDE2MSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDcsIDEyNywgNzQsIDcsIDYsIDI3LCAyMzYsIDM4LCA3LCA0LCAyNywgCisgICAgMjM2LCAzOCwgNywgNiwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDM4LCA3LCAKKyAgICA2LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzMywgCisgICAgMjQ1LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTQyLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTQyLCA3LCA2LCAxLCAyMzMsIAorICAgIDE1NSwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgCisgICAgMjQ3LCAxMjgsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICA5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAxNDIsIDcsIDQsIDEsIDIzMCwgMzEsIAorICAgIDIsIDE0MiwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMTkxLCA3LCAKKyAgICA2LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMCwgCisgICAgMzEsIDIyNCwgMjA3LCAyNTEsIDg2LCAyNTQsIDY1LCA3LCA2LCAxLCAyNDUsIDE0NiwgNywgNCwgMSwgMjQ1LCAxNDYsIDcsIAorICAgIDYsIDEsIDE0NCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgMjUxLCAKKyAgICAxNTQsIDcsIDQsIDEsIDE0NCwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTQ0LCAKKyAgICAyLCA1MiwgMTQyLCA3LCA2LCAyNywgMjI2LCAyMzgsIDcsIDQsIDI3LCAyMjYsIDIzOCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDE0MiwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE0MiwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAKKyAgICAyMjMsIDIyNywgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjIzLCAyMjcsIAorICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAxNDIsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMjIyLCA5NCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgCisgICAgMjUwLCAxOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIxNywgMTU0LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgOTEsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgMTg0LCA3LCA0LCAxLCAxMDQsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgCisgICAgMTA0LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTA0LCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMTA0LCAyLCAyNTEsIDE1NCwgCisgICAgNywgNiwgMSwgMTA0LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOCwgNywgCisgICAgNCwgMSwgMTA0LCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjEyLCA5OSwgCisgICAgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDM4LCAKKyAgICA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTQyLCA3LCA0LCAxLCAyMTAsIAorICAgIDE2MCwgMiwgMTQyLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgCisgICAgMjAwLCAyMjIsIDkzLCA3LCA0LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDU3LCAyLCAxMDMsIDcsIDYsIDEsIDU3LCAyLCAKKyAgICAyMTYsIDEyLCA3LCA0LCAxLCA1NywgMiwgMjE2LCAxMiwgNywgNiwgMSwgMTM4LCAxOTUsIDcsIDQsIDEsIDEzOCwgMTk1LCAKKyAgICA3LCA2LCAxLCAyMDQsIDc4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxMDMsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDEwMywgNywgCisgICAgNiwgMSwgMjU0LCAyMjgsIDI0OSwgNjgsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDEwMywgNywgNiwgMSwgMjQ5LCA2OSwgMiwgCisgICAgMjE2LCAxMiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjE2LCAxMiwgNywgNCwgMSwgMjE1LCA5NCwgMjQ4LCA2MiwgNywgNiwgCisgICAgMSwgMjIzLCA1MiwgNzYsIDcsIDYsIDEsIDIyMSwgMTk3LCA3LCA2LCAxLCAyMDQsIDc2LCA3LCA2LCAxLCAyNDUsIDE1LCAyLCAKKyAgICAxMDMsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAKKyAgICAxMTQsIDcsIDQsIDEsIDI0MCwgMjA4LCA3LCA2LCAxLCAyMzUsIDE5MiwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDkxLCA3LCAKKyAgICA2LCAxLCAyMzUsIDMwLCAyLCAxMDMsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDEwMywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDEzMCwgNywgNCwgMSwgMjMzLCAxMDYsIDIsIDkxLCA3LCA2LCAxLCAyMTUsIDk0LCAxOTQsIDcsIDYsIDEsIDIzMCwgMzEsIAorICAgIDIsIDQzLCAxMDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIwMCwgNDQsIDIzMywgNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjMwLCAKKyAgICAyMjksIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI1NSwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI1NSwgNywgNiwgMSwgCisgICAgMjI2LCAyMjMsIDcsIDQsIDEsIDIyNiwgMjIzLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMTAzLCA3LCA0LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMTAzLCA3LCAxLCAyMTAsIDIxNCwgNywgNiwgMSwgMTM4LCAxMDUsIDcsIDQsIDEsIDEzOCwgMTA1LCA3LCA2LCAKKyAgICAxLCAyNDUsIDgzLCA3LCAxLCAyMjMsIDUyLCAyNDUsIDg0LCAyMzIsIDEyOSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIyNiwgCisgICAgNzAsIDEwMywgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDEwMywgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDEwMywgNywgNiwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDIyMywgNTgsIDEwMywgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI1NSwgNywgNCwgMSwgMTA0LCAyLCAKKyAgICAyNDAsIDI1NSwgNywgNiwgMSwgMjE0LCAxNTcsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDYsIDEsIDIxMSwgCisgICAgMTE4LCAyLCAxMDMsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxMDMsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA2LCAxLCAyNDUsIDE2LCA3LCA2LCAxLCAyNDUsIDE3LCAyMjMsIDUxLCA3LCA0LCAxLCAKKyAgICAyNDUsIDE3LCAyMjMsIDUxLCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyMTcsIDc4LCA3LCAxLCAxMTMsIDIsIDkxLCA3LCA2LCAKKyAgICAxLCAxMzgsIDE5MCwgNywgNCwgMSwgMTM4LCAxOTAsIDcsIDEsIDIzNSwgMjAwLCAyNDIsIDE4NywgMjE4LCAxMzIsIDIsIAorICAgIDkxLCA3LCAxLCAyMTEsIDE4MSwgNywgMSwgMjQ4LCA1NSwgMjUwLCAxOSwgNywgMSwgMjMzLCA4MywgMjUwLCAxOSwgNywgMSwgCisgICAgMjU0LCAxNDUsIDI1MCwgMTksIDcsIDEsIDIyMywgNTgsIDI1MCwgMTksIDcsIDYsIDEsIDI0NiwgNDgsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA2LCAxLCAyNDksIDY5LCAyLCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0NiwgNDgsIDIsIAorICAgIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzIsIDE5NCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDQsIDEsIDIzNSwgMTUwLCA3LCA0LCAKKyAgICAxLCAyMzIsIDE5NCwgNywgNiwgMSwgMjI4LCAxOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDQsIDEsIDIzNSwgMTUwLCA3LCAKKyAgICA0LCAxLCAyMjgsIDE5MSwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDI0MiwgNywgCisgICAgNiwgMSwgMjQwLCAxNjEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCAKKyAgICA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTUsIDk0LCA3NiwgCisgICAgNywgNiwgMSwgMTE2LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgMjQ4LCAxMCwgMjIsIAorICAgIDIzMSwgMjM3LCA3LCA2LCAxLCAxMTYsIDIsIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDU5LCA3MiwgCisgICAgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyNTQsIDI1MywgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI1NCwgMjUzLCAyLCAyMzEsIAorICAgIDIzNywgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgOTEsIDcsIDYsIDEsIDI0MywgCisgICAgMjEwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjgsIDcsIDQsIAorICAgIDEsIDE0NCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjksIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyMjYsIDIyOSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyNDUsIDE3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgCisgICAgMjQ1LCAxNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQ2LCA0NywgCisgICAgNywgNiwgMSwgMjQ5LCA2OSwgMiwgNCwgMSwgMjEwLCAxNTksIDcsIDQsIDEsIDI0NiwgNDcsIDcsIDYsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAxNDIsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMjA2LCA3LCA2LCAxLCAyMTEsIDE4MSwgCisgICAgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAKKyAgICAxMTYsIDIsIDIyMiwgMjM3LCA3MiwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNzIsIDIyLCAxNDIsIDcsIAorICAgIDYsIDEsIDI1NCwgMjUzLCAyLCAxNDIsIDcsIDQsIDEsIDI1NCwgMjUzLCAyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE4LCAKKyAgICAxMDUsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE4LCAxMDUsIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgNTIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMzUsIDIwMCwgMjUxLCAKKyAgICAxNTQsIDcsIDQsIDEsIDExNiwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDUyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgCisgICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTQ0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIAorICAgIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDQsIAorICAgIDEsIDIyMiwgOTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNCwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNiwgMSwgMjEwLCAyMzEsIDcsIDQsIDEsIDIxMCwgMjMxLCA3LCA2LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIAorICAgIDIwMCwgNDQsIDIzMywgNDIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDI0OSwgMTA4LCA3LCA2LCAxLCAyMjYsIDEzOCwgNywgNCwgCisgICAgMSwgMjI2LCAxMzgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAxMDMsIDcsIDYsIAorICAgIDEsIDExNiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE5MSwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyMzEsIDIzNywgNywgCisgICAgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTQ0LCAyLCAKKyAgICA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjExLCAxMTgsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMTEsIDExOCwgCisgICAgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQ5LCAKKyAgICAxMDgsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUwLCA3LCA0LCAKKyAgICAxLCAyNDgsIDE1MSwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIyNCwgMzQsIDI0NywgMjI4LCA3LCA2LCAxLCAxMTYsIDIsIDkxLCAKKyAgICA3LCA2LCAxLCAyNTEsIDc1LCAyLCA5MSwgNywgNCwgMSwgMjUxLCA3NSwgMiwgOTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAxMzAsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyMTcsIDI1MSwgCisgICAgMjE3LCA3OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA3LCA2LCAxLCAyNDIsIDE4NywgMjE4LCAKKyAgICAxMzEsIDcsIDQsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgNiwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDEzMCwgCisgICAgNywgNiwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIDYsIDEsIDE2MCwgMiwgOTEsIDcsIDQsIDEsIDE2MCwgMiwgOTEsIDcsIAorICAgIDYsIDEsIDIzNSwgMTUxLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDkxLCA3LCA2LCAxLCA0LCAyMjQsIDEwMCwgMiwgCisgICAgMjQxLCA1OSwgMjE3LCA3OCwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDI0MSwgNTksIDIxNywgNzgsIDcsIDYsIDEsIDIyMywgCisgICAgMjI3LCAyLCA5MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDkxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIAorICAgIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgNjEsIDcsIDQsIDEsIDI1NCwgMTUxLCA3LCA0LCAxLCAyMTUsIAorICAgIDk0LCAyNTQsIDE1MSwgNywgNCwgMSwgNTcsIDIsIDEwMywgNywgNCwgMSwgMjA0LCA3OCwgNywgNCwgMSwgMjUxLCA3NSwgMiwgCisgICAgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIxNywgNzgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDEwMywgNywgNCwgCisgICAgMSwgMjIzLCA1MiwgNzYsIDcsIDQsIDEsIDIyMSwgMTk3LCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMDQsIDc2LCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDc2LCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDE2MCwgMiwgMTAzLCAKKyAgICA3LCA0LCAxLCAyNTAsIDgsIDIyMywgNTIsIDIwNCwgNzYsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MSwgMiwgOTEsIDcsIAorICAgIDQsIDEsIDI0MywgMjEwLCAyLCAxMDMsIDcsIDQsIDEsIDExOSwgMjQzLCAyMDksIDcsIDEsIDQsIDYsIDI0MywgMjA5LCA3LCAKKyAgICA0LCAxLCAyNDMsIDExNCwgNywgNCwgMSwgMjIzLCAxNTQsIDI0MCwgMjU1LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY3LCAKKyAgICA3LCA0LCAxLCAyNDIsIDY4LCAyLCAxMDMsIDcsIDQsIDEsIDI0MSwgMjE1LCAyLCAxMDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCA5MSwgNywgNCwgMSwgMjM1LCAxOTIsIDcsIDEsIDQsIDYsIDc0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MiwgNDksIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMjMsIDU4LCAxMDMsIAorICAgIDcsIDQsIDEsIDIzMywgNywgNywgNCwgMSwgMjE1LCA5NCwgMTk0LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzIsIDU1LCAyLCAKKyAgICAyMDAsIDIzMywgNDIsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDEwMywgNywgNCwgMSwgMjMwLCAzMSwgMiwgNDMsIDEwMywgNywgCisgICAgNCwgMSwgMjMwLCAzMSwgMiwgMjIzLCA1OCwgMTAzLCA3LCAxLCA0LCA2LCAyMzAsIDMwLCA3LCA0LCAxLCAyNTIsIDE0MiwgCisgICAgNzgsIDcsIDEsIDQsIDYsIDIyNiwgMjM4LCA3LCA0LCAxLCAyNTAsIDgsIDIyNiwgMjA1LCA3LCA0LCAxLCAyMjUsIDEzNiwgCisgICAgNywgNCwgMSwgMjE1LCA5NCwgMTUzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMjAwLCAyMzMsIDQyLCA3LCA0LCAKKyAgICAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMTAzLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjAwLCAyMzMsIDQyLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDI0NCwgOTUsIDcsIDQsIDEsIDIyMywgNTIsIAorICAgIDIyMywgMjI3LCAyLCAyNDQsIDk1LCA3LCAxLCA0LCA2LCAxNTMsIDcsIDEsIDQsIDYsIDIzNSwgMjAwLCAxNTMsIDcsIDQsIAorICAgIDEsIDIyMiwgOTQsIDIsIDEwMywgNywgNCwgMSwgMjQ1LCA4MywgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUxLCAyLCAKKyAgICAyMTgsIDEwNSwgMjIsIDEwMywgNywgNCwgMSwgMjE4LCAyMzMsIDIyMywgNTIsIDI0NSwgODMsIDcsIDQsIDEsIDI0NSwgODQsIAorICAgIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTcsIDE1MywgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIyMywgNTgsIAorICAgIDEwMywgNywgNCwgMSwgMTA0LCAxMzAsIDcsIDQsIDEsIDIxNCwgMTU3LCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCAKKyAgICA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgNCwgMSwgMjE1LCA5NCwgMjEyLCA5OCwgNywgNCwgMSwgMjE1LCA5NCwgCisgICAgMjExLCAxMTcsIDcsIDEsIDQsIDYsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NSwgMTYsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDI0OSwgCisgICAgMTA4LCA3LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDEsIDIyNSwgMTQyLCAyMTMsIDEzNSwgMjQ0LCAxLCA3LCAxLCAKKyAgICAyMzUsIDIwMCwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCAxLCAyMTgsIDExMiwgMjUxLCA3NCwgNywgMSwgMjUxLCAyNTQsIAorICAgIDI1MCwgMTksIDcsIDEsIDQsIDYsIDI1MywgMTY2LCA3LCA0LCAxLCAyNTAsIDgsIDIwNCwgNzYsIDcsIDEsIDQsIDYsIDI0MywgCisgICAgMjEwLCAyLCAxMDMsIDcsIDEsIDQsIDYsIDI0MiwgNjcsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCAyNDksIDEzNSwgNywgNCwgCisgICAgMSwgMjE1LCA5NCwgMjM1LCAyOSwgNywgMSwgNCwgNiwgMTU2LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMTAzLCA3LCAxLCAKKyAgICAyNDIsIDE4NywgMjE4LCAxMzIsIDIsIDkxLCA3LCAxLCAyMjMsIDUyLCAyNDIsIDE4NywgMjE4LCAxMzIsIDIsIDkxLCA3LCAKKyAgICA0LCAxLCAyNDYsIDQ4LCAyNDcsIDIyOCwgNywgNCwgMSwgMjQ4LCAzNCwgMjQ3LCAyMjgsIDcsIDQsIDEsIDI0NiwgNDgsIAorICAgIDI0NywgMjI5LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjE1LCAxODYsIDI0NywgMjI4LCA3LCA0LCAxLCAyMTYsIDIzNiwgCisgICAgMjQ3LCAyMjgsIDcsIDQsIDEsIDIxNywgMzAsIDI0NywgMjI5LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ0LCAxNDIsIAorICAgIDI0NywgMjI4LCA3LCA0LCAxLCAyMzIsIDEwNSwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIzMiwgNTYsIDI0NywgMjI4LCA3LCAxLCAKKyAgICAyNTEsIDI1NCwgMjI1LCAxODQsIDcsIDEsIDI1MiwgNiwgMjI1LCAxODQsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjgsIDIsIAorICAgIDI0NCwgOTUsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjgsIDIsIDI0NCwgOTYsIDIyLCAyMTcsIDc4LCA1OCwgMSwgNCwgCisgICAgMjQyLCA2NywgNTgsIDEsIDQsIDI0MiwgNjgsIDIsIDEwMywgNTgsIDEsIDQsIDIzNSwgMTUwLCA1OCwgMSwgNCwgMTUzLCAKKyAgICA1OCwgMSwgNCwgMjE1LCA5NCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDEwMywgNTgsIDEsIDQsIDYsIAorICAgIDIzNSwgMjAwLCAxNTMsIDU4LCAxLCA0LCAyMTIsIDk4LCA1OCwgMSwgNCwgMjExLCAxMTcsIDU4LCAxLCAyMjQsIDE5MywgCisgICAgNTgsIDEsIDUyLCAyMjQsIDE5MywgNTgsIDEsIDIxNSwgOTQsIDI0OSwgMjI3LCA1OCwgMSwgMjU0LCA2NSwgNTgsIDEsIAorICAgIDIyMywgNTIsIDI0OSwgMjI3LCA1OCwgMSwgNDQsIDE2MywgMjIyLCAyMzYsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzNiwgCisgICAgNTgsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDIyMywgNTIsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDQzLCAKKyAgICAyNTQsIDEsIDU4LCAxLCA0NCwgMjU0LCAxLCA1OCwgMSwgMTIwLCAyNTQsIDEsIDU4LCAxLCAxMjQsIDI1NCwgMSwgNTgsIDEsIAorICAgIDI1MCwgMzksIDI1NSwgMjMsIDI1MCwgMjQyLCA1OCwgMSwgNjcsIDIzMiwgMjE5LCA1OCwgMSwgMjMxLCAyMzcsIDU4LCAxLCAKKyAgICAyNTUsIDEyLCAyNTUsIDIzLCA1OCwgMSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAxMjEsIDY3LCAyMzIsIDIxOSwgNTgsIAorICAgIDEsIDEyMSwgMjMxLCAyMzcsIDU4LCAxLCAxMjEsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMTIxLCAyNTUsIDEyLCAKKyAgICAyNTUsIDIzLCA1OCwgMSwgMjE1LCAyMjMsIDI0OSwgMjM0LCA1OCwgMSwgMTYzLCAyMTUsIDIyMywgMjQ5LCAyMzQsIDU4LCAKKyAgICAxLCAyNTAsIDE4MSwgNDQsIDE2MywgMjIyLCAyMzYsIDU4LCAxLCAyNTAsIDE4MSwgNDMsIDE2MywgMjIyLCAyMzYsIDU4LCAKKyAgICAxLCAxMjAsIDIxNywgODgsIDU4LCAxLCAxMjQsIDIxNywgODgsIDU4LCAxLCA5NiwgNTAsIDU4LCAxLCAyMzAsIDE4NywgNTAsIAorICAgIDI1MSwgMTU0LCA1OSwgNDgsIDIyMiwgMjM3LCA0OCwgMjI2LCAyMjgsIDQsIDE4NCwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIAorICAgIDU4LCAxLCAyMjMsIDM5LCAxMDMsIDU4LCAxLCAyNDksIDEzOSwgMjU1LCAyMywgNTgsIDEsIDQsIDI0MywgMTE0LCA1OCwgMSwgCisgICAgNCwgMTU2LCA1OCwgMSwgNCwgMjIyLCA5MywgNTgsIDEsIDQsIDIxMSwgMTc4LCA1OCwgMSwgNCwgMjIzLCA1MiwgMjQyLCAKKyAgICAxODcsIDIxOCwgMTMxLCA1OCwgMSwgMjQ1LCAyOCwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDEzOCwgMTMwLCA1OCwgMSwgCisgICAgMjMwLCAyMzAsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMjEwLCAyNTQsIDI0OCwgNTIsIDEzOCwgNzksIDU4LCAxLCAyMTEsIDcwLCAyNDgsIDUyLCAxMzgsIDc5LCA1OCwgMSwgCisgICAgMjEzLCAxMzMsIDU4LCAxLCAyMTQsIDE4NiwgNTgsIDEsIDUyLCAyNTQsIDY1LCA1OCwgMSwgMTIxLCAxMjQsIDI1NCwgMSwgCisgICAgNTgsIDEsIDEyMSwgMTIwLCAyNTQsIDEsIDU4LCAxLCAxMjEsIDQzLCAyNTQsIDEsIDU4LCAxLCAxMjEsIDQ0LCAyNTQsIDEsIAorICAgIDU4LCAxLCAxMjEsIDIyMiwgMjM2LCA1OCwgMSwgMjMwLCAyMjksIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMjMwLCAKKyAgICAyMjksIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDIzMCwgMjI5LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgNTgsIDEsIAorICAgIDEyMSwgMTg0LCA1OCwgMSwgMjIzLCAxNjAsIDI0OSwgMjM0LCA1OCwgMSwgMjUyLCA2NiwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgCisgICAgMjQ1LCAxNTEsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIDI1MiwgNjYsIDEyMSwgMjE2LCAzMSwgNTgsIDEsIDI0NSwgMTUxLCAKKyAgICAxMjEsIDIxNiwgMzEsIDU4LCAxLCAyMjAsIDU2LCA1OCwgMSwgMjA0LCAyMjAsIDU2LCA1OCwgMSwgMTIxLCA0MywgNzUsIAorICAgIDM4LCAyNDIsIDE0NCwgMjU1LCAyMywgMzgsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyNTAsIDM5LCAyNTUsIDIzLCAzOCwgCisgICAgMTg0LCAzOCwgMjMxLCAyMzcsIDM4LCAyMjYsIDEyMywgMzgsIDI1MSwgMTU0LCAzOCwgNTksIDQ4LCAzOCwgMjQ4LCA5LCAKKyAgICAzOCwgMjQxLCA1OSwgNDgsIDM4LCAyMjIsIDIzNywgNDgsIDM4LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDI1MCwgCisgICAgMjQyLCAzOCwgNjcsIDIzMiwgMjIwLCA0OCwgMzgsIDUyLCA2NywgMjMyLCAyMjAsIDQ4LCAzOCwgNTIsIDI0MiwgMTQ0LCAKKyAgICAyNTUsIDIzLCAzOCwgMjUxLCA3LCAzOCwgMjM1LCAyMDAsIDI1MSwgMTU0LCAzOCwgMjE1LCA5NCwgMjQ5LCAyMjgsIDQ4LCAKKyAgICAzOCwgMjQ5LCAyMjgsIDQ4LCAzOCwgMjIzLCA1MiwgMjQ5LCAyMjgsIDQ4LCAzOCwgMjQ5LCAyMjgsIDcyLCAyMjIsIDI1NCwgCisgICAgMzgsIDI0MiwgMTQ0LCAyNTUsIDI0LCA1MSwgMzgsIDI1NSwgMTIsIDI1NSwgMjQsIDUxLCAzOCwgNDMsIDIxNywgODksIDUxLCAKKyAgICAzOCwgNDQsIDIxNywgODksIDUxLCAzOCwgNDMsIDI1NCwgMTE4LCA0OCwgMzgsIDI0MCwgMjU1LCAzOCwgNDMsIDE2MywgCisgICAgMjIyLCAyMzcsIDUxLCAzOCwgMTIwLCAyMTcsIDg5LCA1MSwgMzgsIDEyNCwgMjE3LCA4OSwgNTEsIDM4LCA5NiwgNSwgNTEsIAorICAgIDM4LCAyMzAsIDE4NywgNSwgNTEsIDM4LCAyMjYsIDY4LCAyNDEsIDU5LCA1MSwgMzgsIDIyMywgNTgsIDI0MSwgNTksIDUxLCAKKyAgICAzOCwgNTksIDUxLCAzOCwgMjQ4LCAxMCwgNTEsIDM4LCAyMjIsIDIzNywgNTEsIDM4LCAyNDksIDIyOCwgNTEsIDM4LCAyNTAsIAorICAgIDE5MSwgMzgsIDIyNiwgMjI4LCAzOCwgNjcsIDIzMiwgMjIwLCA1MSwgMzgsIDI1MSwgMTQ4LCA1MSwgMzgsIDIzNSwgMjAwLCAKKyAgICA1MiwgMjU0LCAzMiwgNTEsIDM4LCAyNTAsIDI0MywgNTEsIDM4LCAyNTAsIDM5LCAyNTUsIDI0LCA1MSwgMzgsIDI1MSwgCisgICAgMTU1LCA1MSwgMzgsIDIzNSwgMjAwLCAyNTEsIDE1NSwgNTEsIDM4LCAyMTYsIDkwLCA1MSwgMzgsIDIzMSwgMjM4LCA1MSwgCisgICAgMzgsIDEyMSwgMjMyLCAyMTksIDM4LCA1MiwgMTIxLCAyMzIsIDIxOSwgMzgsIDIxNiwgOTAsIDIyNiwgMTI0LCAzOCwgMjE5LCAKKyAgICAyNTMsIDIxOCwgMTA1LCAyMjYsIDEyNCwgMzgsIDIwMCwgMjE4LCAxMDUsIDIyNiwgMTI0LCAzOCwgMjE5LCAyNTMsIDIxOSwgCisgICAgNDksIDIyNiwgMTI0LCAzOCwgMjAwLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM3LCA1MSwgMzgsIAorICAgIDIzNSwgMjAwLCAyNTEsIDE0OCwgNTEsIDM4LCA0MiwgNTEsIDM4LCAyMjEsIDE4MiwgNTEsIDM4LCAyMTEsIDE3OSwgNDgsIAorICAgIDM4LCA2NywgMTg0LCAzOCwgNTIsIDIyNiwgMTIzLCAzOCwgMjQyLCAxNDQsIDEzOCwgNzksIDM4LCAyNTUsIDEyLCAxMzgsIAorICAgIDc5LCAzOCwgMjYsIDIyNSwgMTc4LCAzOCwgMjYsIDIzNCwgOCwgMzgsIDI2LCAyNDgsIDQsIDIxNiwgMTksIDM4LCAyNiwgCisgICAgMjEwLCAyMTksIDM4LCAyNTEsIDE0OCwgNDgsIDM4LCAyNDUsIDEwNiwgNSwgNTEsIDM4LCA1MiwgNjcsIDIzMiwgMjIwLCAKKyAgICA1MSwgMzgsIDQzLCAyNTQsIDExOCwgNTEsIDM4LCAyMjgsIDU3LCAyMTYsIDkwLCA0OCwgMzgsIDI0MSwgNjUsIDQ4LCAzOCwgCisgICAgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgNDgsIDM4LCA0MywgNDQsIDgwLCA1MSwgMzgsIDIxNCwgMTUzLCA4MCwgNTEsIDM4LCAKKyAgICAyNDIsIDE0OSwgMjM1LCA2OSwgMzgsIDQ0LCAyNTQsIDIsIDQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzcsIDQ4LCAzOCwgCisgICAgMjQ0LCAxMzksIDM4LCAyMTEsIDE3OSwgNTEsIDM4LCA0MywgMjU0LCAyLCA1MSwgMzgsIDQ0LCAyNTQsIDIsIDUxLCAzOCwgCisgICAgNDQsIDI1NCwgMiwgMjIsIDEyMCwgMjU0LCAyLCA1MSwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM3LCA0OCwgMzgsIDU5LCA3MiwgCisgICAgMjIyLCAyNTQsIDM4LCAyNTMsIDIyNSwgNTEsIDM4LCA1MiwgMjIyLCAyMzcsIDUxLCAzOCwgMjEwLCAzNSwgNDgsIDM4LCAKKyAgICA1MiwgMjUxLCAxNTUsIDUxLCAzOCwgNTIsIDI1MSwgMTU0LCAzOCwgNTIsIDIzMSwgMjM3LCAzOCwgNTIsIDIzMSwgMjM4LCAKKyAgICA1MSwgMzgsIDUyLCAxODQsIDM4LCA1MiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAzOCwgNTIsIDk3LCA4MCwgNTEsIDM4LCA3LCAKKyAgICA0LCAxLCA2MSwgMzgsIDcsIDQsIDEsIDc2LCAzOCwgNywgNCwgMSwgNzQsIDM4LCA3LCA0LCAxLCA3OCwgMzgsIDcsIDQsIDEsIAorICAgIDY5LCAzOCwgNywgNCwgMSwgMjUxLCA3NCwgMzgsIDcsIDQsIDEsIDI0OSwgNjgsIDM4LCA3LCA0LCAxLCAyNDIsIDY3LCAzOCwgCisgICAgNywgNCwgMSwgMTk0LCAzOCwgNywgNCwgMSwgMTUzLCAzOCwgNywgNCwgMSwgMjE3LCAxNTMsIDM4LCA3LCA0LCAxLCAyMTQsIAorICAgIDEwNSwgMzgsIDcsIDQsIDEsIDIxMSwgMTc4LCAyNiwgNiwgMSwgMjQxLCAyMDMsIDI2LCA0LCAxLCAyNDEsIDIwMywgMjYsIAorICAgIDYsIDEsIDI1NCwgMzEsIDIyMSwgMjQ4LCAyNiwgNCwgMSwgMjU0LCAzMSwgMjIxLCAyNDgsIDI2LCAyMjcsIDIwMiwgNTAsIAorICAgIDI2LCAyMzIsIDExNCwgMjI3LCAyMDIsIDUwLCAyNiwgNiwgMSwgMjI2LCA1NSwgMjQ3LCAyMzUsIDI2LCA0LCAxLCAyMjYsIAorICAgIDU1LCAyNDcsIDIzNSwgMjYsIDIxMCwgMjE5LCAyNiwgNCwgMjIzLCA1MiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNCwgCisgICAgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDQsIDIyMywgNTIsIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDI2LCAyMjQsIDE2LCA3OSwgMjYsIDIxNiwgMTksIDI2LCAyNDgsIDQsIDIxNiwgMTksIDI2LCA2LCAxLCAKKyAgICAyNTQsIDE1MiwgMiwgMjE2LCAxOSwgMjYsIDI1NCwgMTA1LCAyMTcsIDMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjE2LCAKKyAgICAxOSwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjE2LCAxOSwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA0LCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMjYsIAorICAgIDIwNiwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMTYsIDE5LCAyNiwgNiwgMSwgCisgICAgMjU0LCAxNTEsIDI2LCA2LCAxLCAyNTIsIDM0LCAyNiwgNiwgMSwgMjQzLCAxMTQsIDI2LCA2LCAxLCAyNDgsIDYyLCAyNiwgCisgICAgNiwgMSwgMjQ1LCAxMDgsIDI2LCA2LCAxLCAyMTAsIDg1LCAyNiwgNiwgMSwgMjQ1LCA3MSwgMjYsIDYsIDEsIDIxNiwgMTgwLCAKKyAgICAyNiwgNiwgMSwgMjM1LCAxOTIsIDI2LCA2LCAxLCAyMzQsIDIyOCwgMjYsIDYsIDEsIDIzMywgMTA0LCAyNiwgNiwgMSwgCisgICAgMjMwLCAxMDcsIDI2LCA2LCAxLCAyMjcsIDI0MiwgMjYsIDYsIDEsIDIxMSwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDMsIDI2LCAKKyAgICA2LCAxLCAyMjUsIDExMSwgMjYsIDYsIDEsIDIyMywgNDAsIDI2LCA2LCAxLCAyMTksIDE3OSwgMjYsIDYsIDEsIDIxNywgNDIsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1NywgMjYsIDYsIDEsIDIyNSwgMTM2LCAyNiwgNiwgMSwgMjUwLCAxMTgsIDI2LCA2LCAxLCAKKyAgICAyMjQsIDE2NCwgMjYsIDYsIDEsIDIyNiwgMjA1LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMywgMjYsIDYsIDEsIAorICAgIDIxNCwgMTU4LCAyLCAyNDgsIDMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI0NSwgMTA5LCAKKyAgICAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMTYsIAorICAgIDE5LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNTQsIDE1MSwgMjYsIAorICAgIDQsIDEsIDI1MiwgMzQsIDI2LCA0LCAxLCAyNDMsIDExNCwgMjYsIDQsIDEsIDI0OCwgNjIsIDI2LCA0LCAxLCAyNDUsIDEwOCwgCisgICAgMjYsIDQsIDEsIDIxMCwgODUsIDI2LCA0LCAxLCAyNDUsIDcxLCAyNiwgNCwgMSwgMjE2LCAxODAsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MiwgMjYsIDQsIDEsIDIzNCwgMjI4LCAyNiwgNCwgMSwgMjMzLCAxMDQsIDI2LCA0LCAxLCAyMzAsIDEwNywgMjYsIDQsIAorICAgIDEsIDIyNywgMjQyLCAyNiwgNCwgMSwgMjExLCAxNTcsIDI2LCA0LCAxLCAyMjYsIDIwMywgMjYsIDQsIDEsIDIyNSwgMTExLCAKKyAgICAyNiwgNCwgMSwgMjIzLCA0MCwgMjYsIDQsIDEsIDQwLCAyMTksIDE3OSwgMjYsIDQsIDEsIDIxOSwgMTc5LCAyNiwgNCwgMSwgCisgICAgMjE3LCA0MiwgMjYsIDQsIDEsIDIxNCwgMTU3LCAyNiwgNCwgMSwgMjI1LCAxMzYsIDI2LCA0LCAxLCAyNTAsIDExOCwgMjYsIAorICAgIDQsIDEsIDIyNCwgMTY0LCAyNiwgNCwgMSwgMjI2LCAyMDUsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAzLCAyNiwgNCwgCisgICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjE0LCAKKyAgICAxNTgsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE2LCAxOSwgMjYsIDYsIDIzNCwgMjUzLCA4NywgMjYsIAorICAgIDI1MiwgMzUsIDg3LCAyNiwgMjE2LCAxODEsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0MSwgNTksIDg3LCAyNiwgMjE0LCAKKyAgICAxNTgsIDIsIDI1NSwgMTIsIDIyLCAyNDEsIDU5LCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDgsIDEwLCAyMiwgMjQxLCA1OSwgCisgICAgODcsIDI2LCAyMjUsIDEzNywgODcsIDI2LCAyMjUsIDExMiwgODcsIDI2LCAyMzQsIDI1MywgODcsIDI2LCAxLCAyNTQsIDMxLCAKKyAgICAyMzQsIDEyLCAyNiwgNCwgMSwgMjU0LCAzMSwgMjM0LCAxMiwgMjYsIDEsIDIxOCwgMTM5LCAyNiwgNCwgMSwgMjE4LCAxMzksIAorICAgIDI2LCAxLCAyNDcsIDIzNSwgMjYsIDQsIDEsIDI0NywgMjM1LCAyNiwgMSwgMjM0LCAxMiwgMjYsIDQsIDEsIDIzNCwgMTIsIAorICAgIDI2LCAxLCAyMjEsIDI0OCwgMjYsIDQsIDEsIDIyMSwgMjQ4LCA4MSwgNiwgMSwgMjIwLCA1NywgODEsIDQsIDEsIDIyMCwgCisgICAgNTcsIDgxLCA2LCAxLCAyNDQsIDE0OCwgODEsIDQsIDEsIDI0NCwgMTQ4LCA4MSwgNiwgMSwgMjM0LCAxMjMsIDgxLCA0LCAxLCAKKyAgICAyMzQsIDEyMywgODEsIDYsIDEsIDI0MSwgNTIsIDgxLCA0LCAxLCAyNDEsIDUyLCA4MSwgNiwgMSwgMjQzLCAxMDksIDgxLCAKKyAgICA0LCAxLCAyNDMsIDEwOSwgODEsIDYsIDEsIDIyMCwgMjQsIDgxLCA0LCAxLCAyMjAsIDI0LCA4MSwgNiwgMSwgMjQ4LCA3NywgCisgICAgODEsIDQsIDEsIDI0OCwgNzcsIDI2LCAyMzQsIDIyOSwgODcsIDI2LCAyMjMsIDQxLCA4NywgMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMjYsIDEsIDIxMCwgMjI0LCAyNiwgNiwgMjE2LCAxODEsIDg3LCAyNiwgMjMyLCA4OCwgMjQ1LCAxMDksIDg3LCAKKyAgICAyNiwgMjIzLCA1MiwgMjMyLCA4OCwgMjQ1LCAxMDksIDg3LCAyNiwgNiwgMSwgMjIwLCA5LCAyNiwgNCwgMSwgMjIwLCA5LCAKKyAgICAyNiwgNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgMSwgMjIxLCAyNDUsIDI2LCA0LCAxLCAyMjEsIDI0NSwgMjYsIAorICAgIDIyMywgNDEsIDIsIDIxOCwgMTA1LCA4NywgMjYsIDYsIDIyMywgNTIsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIAorICAgIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAyMjMsIDUyLCAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAzMywgNiwgMSwgMjM2LCA2OCwgMiwgMjQyLCAxNDMsIDMzLCA2LCAxLCAyMzUsIDE5NiwgMzMsIDYsIDEsIAorICAgIDI0NywgMTcwLCAzMywgNiwgMSwgMjQyLCAxOTQsIDMzLCA2LCAxLCAyMTQsIDIwMiwgMjM2LCA2NywgMzMsIDYsIDEsIDI0NiwgCisgICAgNDQsIDMzLCA2LCAxLCAyNTEsIDg0LCA3NCwgMzMsIDYsIDEsIDIxMSwgOCwgMzMsIDYsIDEsIDIzNSwgMTMyLCAzMywgNiwgCisgICAgMSwgMjMyLCAxOTMsIDMzLCA2LCAxLCAyMjgsIDE4MywgMzMsIDYsIDEsIDIxNSwgMTc1LCAzMywgNiwgMSwgMjM0LCA1NCwgCisgICAgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgMzMsIDYsIDEsIDIxOSwgMjUzLCA2OSwgMzMsIDYsIDEsIDI0NiwgCisgICAgNDAsIDMzLCA2LCAxLCA2MSwgMzMsIDYsIDEsIDI1MiwgODMsIDMzLCA2LCAxLCAyMTMsIDI1NSwgMzMsIDYsIDEsIDI0MiwgCisgICAgMjQzLCAzMywgNiwgMSwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIzNiwgNjcsIDMzLCA2LCAxLCAyMTAsIDc0LCAzMywgNiwgMSwgCisgICAgMjEwLCA5NCwgMzMsIDYsIDEsIDc0LCAzMywgNiwgMSwgMjE5LCAyNTMsIDc0LCAzMywgNiwgMSwgMTc2LCAzMywgNiwgMSwgCisgICAgMjQ1LCAxODIsIDMzLCA2LCAxLCAyNDUsIDE2NywgMzMsIDYsIDEsIDI0NSwgMTU4LCAzMywgNiwgMSwgNzgsIDMzLCA2LCAxLCAKKyAgICAyMjUsIDIyNCwgMzMsIDYsIDEsIDI0NSwgMTAwLCAzMywgNiwgMSwgMjQ1LCA5MCwgMzMsIDYsIDEsIDIxNywgMjMsIDMzLCAKKyAgICA2LCAxLCA2OSwgMzMsIDYsIDEsIDI0NSwgMjEwLCAzMywgNiwgMSwgMTYyLCAzMywgNiwgMSwgMjE1LCAxNzksIDMzLCA2LCAKKyAgICAxLCAyNTAsIDEzOSwgMzMsIDYsIDEsIDIyMCwgMTA0LCAzMywgNiwgMSwgMjIwLCA2NywgMzMsIDYsIDEsIDI0MiwgMTAsIAorICAgIDUwLCAzMywgNiwgMSwgMjExLCAyNywgMzMsIDYsIDEsIDIxOSwgNTQsIDUwLCAzMywgNiwgMSwgNzYsIDMzLCA2LCAxLCAKKyAgICAyMTAsIDIxMiwgMzMsIDYsIDEsIDE5MiwgMzMsIDQsIDEsIDYxLCAzMywgNCwgMSwgMjUyLCA4MywgMzMsIDQsIDEsIDIxMywgCisgICAgMjU1LCAzMywgNCwgMSwgMjQyLCAyNDMsIDMzLCA0LCAxLCAyNDgsIDk4LCAzMywgNCwgMSwgMjM2LCA2NywgMzMsIDQsIDEsIAorICAgIDIxMCwgNzQsIDMzLCA0LCAxLCAyMTAsIDk0LCAzMywgNCwgMSwgNzQsIDMzLCA0LCAxLCAyMTksIDI1MywgNzQsIDMzLCA0LCAKKyAgICAxLCAxNzYsIDMzLCA0LCAxLCAyNDUsIDE4MiwgMzMsIDQsIDEsIDI0NSwgMTY3LCAzMywgNCwgMSwgMjQ1LCAxNTgsIDMzLCAKKyAgICA0LCAxLCA3OCwgMzMsIDQsIDEsIDIyNSwgMjI0LCAzMywgNCwgMSwgMjQ1LCAxMDAsIDMzLCA0LCAxLCAyNDUsIDkwLCAzMywgCisgICAgNCwgMSwgMjE3LCAyMywgMzMsIDQsIDEsIDY5LCAzMywgNCwgMSwgMjQ1LCAyMTAsIDMzLCA0LCAxLCAxNjIsIDMzLCA0LCAxLCAKKyAgICAyMTUsIDE3OSwgMzMsIDQsIDEsIDI1MCwgMTM5LCAzMywgNCwgMSwgMjIwLCAxMDQsIDMzLCA0LCAxLCAyMjAsIDY3LCAzMywgCisgICAgNCwgMSwgMjQyLCAxMCwgNTAsIDMzLCA0LCAxLCAyMTEsIDI3LCAzMywgNCwgMSwgMjE5LCA1NCwgNTAsIDMzLCA0LCAxLCAKKyAgICA3NiwgMzMsIDQsIDEsIDIxMCwgMjEyLCAzMywgNCwgMSwgMTkyLCAzMywgNCwgMSwgMjM2LCA2OCwgMiwgMjQyLCAxNDMsIAorICAgIDMzLCA0LCAxLCAyMzUsIDE5NiwgMzMsIDQsIDEsIDI0NywgMTcwLCAzMywgNCwgMSwgMjQyLCAxOTQsIDMzLCA0LCAxLCAKKyAgICAyMTQsIDIwMiwgMjM2LCA2NywgMzMsIDQsIDEsIDI0NiwgNDQsIDMzLCA0LCAxLCAyNTEsIDg0LCA3NCwgMzMsIDQsIDEsIAorICAgIDIxMSwgOCwgMzMsIDQsIDEsIDIzNSwgMTMyLCAzMywgNCwgMSwgMjMyLCAxOTMsIDMzLCA0LCAxLCAyMjgsIDE4MywgMzMsIAorICAgIDQsIDEsIDIxNSwgMTc1LCAzMywgNCwgMSwgMjM0LCA1NCwgMzMsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgMzMsIAorICAgIDQsIDEsIDIxOSwgMjUzLCA2OSwgMzMsIDQsIDEsIDI0NiwgNDAsIDMzLCA2LCAxLCAyMjYsIDIwNSwgMzMsIDQsIDEsIDIyNiwgCisgICAgMjA1LCAzMywgNiwgMSwgMjExLCA1OSwgMzMsIDQsIDEsIDIxMSwgNTksIDMzLCA2LCAxLCAyMzUsIDE5MCwgNzYsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE5MCwgNzYsIDMzLCA2LCAxLCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzIsIDE5OCwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIDIzMiwgCisgICAgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAKKyAgICAzMywgNiwgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIAorICAgIDE4MywgMzMsIDYsIDEsIDIzMywgMjM5LCAzMywgNCwgMSwgMjMzLCAyMzksIDMzLCA2LCAxLCAyMjQsIDE2NCwgMzMsIDQsIAorICAgIDEsIDIyNCwgMTY0LCAzMywgNiwgMSwgMjQ0LCA5MCwgMzMsIDQsIDEsIDI0NCwgOTAsIDMzLCA2LCAxLCAyMzUsIDE1MiwgCisgICAgMzMsIDQsIDEsIDIzNSwgMTUyLCAzMywgNiwgMSwgMjM1LCAxNTMsIDIsIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgMzMsIDQsIAorICAgIDEsIDIzNSwgMTUzLCAyLCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDMzLCA2LCAxLCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIxNCwgCisgICAgMjA1LCAzMywgNiwgMSwgMjIyLCAxODcsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjIyLCAxODcsIDIyNiwgMjA1LCAzMywgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDIxNiwgNjYsIDMzLCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE2LCA2NiwgMzMsIDYsIDEsIDIyNiwgCisgICAgMTQ0LCAzMywgNCwgMSwgMjI2LCAxNDQsIDMzLCA2LCAxLCAyMzQsIDEyLCAzMywgNCwgMSwgMjM0LCAxMiwgMzMsIDIxNiwgCisgICAgMTQ3LCA1MCwgMzgsIDMzLCAyMTYsIDY2LCAzOCwgMzMsIDIyNiwgNjksIDM4LCAzMywgMjQ4LCAxNjIsIDIyNSwgMjEsIDM4LCAKKyAgICAzMywgMjI0LCAxNTgsIDIyNSwgMjEsIDM4LCAzMywgMjI1LCA2LCAzOCwgMzMsIDI0MCwgMjE4LCAyMTYsIDE0NywgNTAsIAorICAgIDM4LCAzMywgMjMwLCAxOTYsIDUwLCAzMywgNiwgMSwgMjE5LCAyNTMsIDI0MCwgMTYxLCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgCisgICAgMjE5LCAyNTMsIDI0MCwgMTYxLCAyLCAyMTcsIDc4LCAzMywgNiwgMSwgMjIwLCAxNDgsIDUwLCAzMywgNCwgMSwgMjIwLCAKKyAgICAxNDgsIDUwLCAzMywgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTE1LCAzMywgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgCisgICAgMTE1LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDIxNCwgMTU2LCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIxNCwgMTU2LCAKKyAgICAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDkxLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCAyNDQsIAorICAgIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDIxMCwgCisgICAgNzUsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAKKyAgICA0NywgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCAyNDgsIDQ3LCAzMywgNCwgCisgICAgMSwgMjM1LCAxOSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDIzNSwgMTksIAorICAgIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDkxLCAzMywgNCwgMSwgMjM1LCAxOSwgMiwgOTEsIDMzLCA2LCAxLCAKKyAgICAyNTIsIDEzMiwgMTc2LCAzMywgNCwgMSwgMjUyLCAxMzIsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTU5LCAyLCAyNDgsIDQ3LCAKKyAgICAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDI0OCwgNDcsIDMzLCA2LCAyNywgMjQ1LCAxNTksIDI0MiwgMjQzLCAzMywgNCwgMjcsIAorICAgIDI0NSwgMTU5LCAyNDIsIDI0MywgMzMsIDYsIDEsIDIyNSwgMjI1LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjI1LCAKKyAgICAyMjUsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyNTUsIDI5LCAxNjIsIDMzLCA0LCAxLCAyNTUsIDI5LCAxNjIsIAorICAgIDMzLCA2LCAxLCAyNDUsIDkxLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQ1LCA5MSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDIxNywgMjQsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMTcsIDI0LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjE4LCAxMjMsIAorICAgIDY5LCAzMywgNCwgMSwgMjE4LCAxMjMsIDY5LCAzMywgNiwgMSwgMjE4LCAxMjMsIDEwNCwgMiwgOTEsIDMzLCA0LCAxLCAKKyAgICAyMTgsIDEyMywgMTA0LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgNTYsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDIsIDU2LCAKKyAgICAyLCAyNDgsIDQ3LCAzMywgNiwgMjcsIDIxNywgMjQsIDIxNSwgMTc5LCAzMywgNCwgMjcsIDIxNywgMjQsIDIxNSwgMTc5LCAKKyAgICAzMywgNiwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDI1MCwgMTQwLCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyNTAsIDE0MCwgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjIwLCAzNSwgCisgICAgMzMsIDQsIDEsIDIyMCwgMzUsIDMzLCA2LCAxLCAyNTUsIDI5LCAyNTAsIDEzOSwgMzMsIDQsIDEsIDI1NSwgMjksIDI1MCwgCisgICAgMTM5LCAzMywgNiwgMSwgMjU1LCAyOSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNTUsIDI5LCAyNTAsIAorICAgIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDEsIDIyNiwgNjIsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE1NCwgMzMsIDQsIAorICAgIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgMTAzLCAzMywgNCwgMSwgMjM1LCAxOSwgMiwgCisgICAgMTAzLCAzMywgNiwgMSwgMjQ1LCAxODMsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMjE3LCA3OCwgMzMsIAorICAgIDYsIDEsIDI0NSwgMTU5LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMTAzLCAzMywgNiwgMSwgMjQ1LCAxNTksIAorICAgIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjE3LCA3OCwgMzMsIDYsIDEsIDIzNCwgMTMzLCAyNTAsIDEzOSwgCisgICAgMzMsIDQsIDEsIDIzNCwgMTMzLCAyNTAsIDEzOSwgMzMsIDYsIDEsIDI0NSwgMTY4LCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgCisgICAgMjQ1LCAxNjgsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAyMjYsIDYyLCAzMywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgMzMsIAorICAgIDQsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAxMTYsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDExNiwgMiwgMjQ4LCAKKyAgICA5LCAzMywgNiwgMjcsIDExNiwgMjM2LCA2NywgMzMsIDQsIDI3LCAxMTYsIDIzNiwgNjcsIDMzLCA2LCAxLCAyMzYsIDY4LCAKKyAgICAyLCAyNTEsIDE1NCwgMzMsIDQsIDEsIDIzNiwgNjgsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMjIxLCAxOTcsIDMzLCA0LCAKKyAgICAxLCAyMjEsIDE5NywgMzMsIDYsIDEsIDIyMSwgMTk4LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMjEsIDE5OCwgMiwgMjQ4LCAKKyAgICA5LCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgCisgICAgMjEwLCA5NSwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMjU1LCAyOSwgMjQ2LCAKKyAgICA0NCwgMzMsIDQsIDEsIDI1NSwgMjksIDI0NiwgNDQsIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzcsIDMzLCA0LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzcsIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDE0NCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTQ0LCAyLCAyNDgsIDksIDMzLCAKKyAgICA2LCAxLCAyNTIsIDE0MiwgNzgsIDMzLCA0LCAxLCAyNTIsIDE0MiwgNzgsIDMzLCA2LCAxLCAyNTIsIDE0MiwgMTQ0LCAyLCAKKyAgICAyNDgsIDksIDMzLCA0LCAxLCAyNTIsIDE0MiwgMTQ0LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxNjAsIDIsIDI0OCwgOSwgMzMsIAorICAgIDQsIDEsIDE2MCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzNywgMzMsIDQsIDEsIDEwNCwgMiwgMjMxLCAKKyAgICAyMzcsIDMzLCA2LCAxLCAxMDQsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDEwNCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTA0LCAKKyAgICAyLCA1MiwgMTQyLCAzMywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCAzMywgNiwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgOSwgMzMsIAorICAgIDQsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0MiwgCisgICAgMjQ0LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjExLCAyOCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjQ4LCAKKyAgICA5LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTAzLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIxOCwgCisgICAgMTA1LCAyMiwgMTAzLCAzMywgNiwgMSwgMjQyLCA1NiwgMiwgMTAzLCAzMywgNCwgMSwgMjQyLCA1NiwgMiwgMTAzLCAzMywgCisgICAgNiwgMSwgMjQyLCA1NiwgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDU2LCAyLCA5MSwgMzMsIDYsIDEsIDIzNCwgMjAsIDI0OCwgCisgICAgOTgsIDMzLCA0LCAxLCAyMzQsIDIwLCAyNDgsIDk4LCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ3LCAxNzAsIDMzLCA0LCAxLCAKKyAgICAyMzQsIDIwLCAyNDcsIDE3MCwgMzMsIDYsIDEsIDIzNCwgMjAsIDIxMCwgMjcsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMTAsIAorICAgIDI3LCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ2LCAzOCwgMzMsIDQsIDEsIDIzNCwgMjAsIDI0NiwgMzgsIDMzLCA2LCAxLCAKKyAgICAyMzQsIDIwLCAyMzIsIDE5MywgMzMsIDQsIDEsIDIzNCwgMjAsIDIzMiwgMTkzLCAzMywgNiwgMSwgMjM0LCAyMCwgMjI4LCAKKyAgICAxODMsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMjgsIDE4MywgMzMsIDYsIDEsIDIzNCwgMjAsIDIxOSwgMTExLCAzMywgNCwgMSwgCisgICAgMjM0LCAyMCwgMjE5LCAxMTEsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTYsIDYxLCAzMywgNCwgMSwgMjM0LCAyMCwgMjE2LCAKKyAgICA2MSwgMzMsIDYsIDEsIDIyMywgNTIsIDIxMCwgOTQsIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTAsIDk0LCAzMywgNiwgMSwgCisgICAgMjQ1LCAxODMsIDIsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAxMDMsIDMzLCA2LCAxLCAyMzMsIDQsIDMzLCA0LCAxLCAKKyAgICAyMzMsIDQsIDMzLCA2LCAxLCAyMjMsIDQyLCAzMywgNCwgMSwgMjIzLCA0MiwgMzMsIDYsIDEsIDIxMSwgOTIsIDMzLCA0LCAKKyAgICAxLCAyMTEsIDkyLCAzMywgNiwgMSwgMjI0LCA5MSwgMzMsIDQsIDEsIDIyNCwgOTEsIDMzLCA2LCAxLCAyMTIsIDIyLCAzMywgCisgICAgNCwgMSwgMjEyLCAyMiwgMzMsIDYsIDEsIDI1NCwgMTc1LCAxNzYsIDMzLCA0LCAxLCAyNTQsIDE3NSwgMTc2LCAzMywgNiwgCisgICAgMSwgMjQ1LCAxODMsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMjMwLCAyMjksIDEwMywgMzMsIAorICAgIDYsIDEsIDI0NSwgMTU5LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDIzMCwgMjI5LCAxMDMsIAorICAgIDMzLCA2LCAxLCAyMjUsIDIyNSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIyNSwgMjI1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCisgICAgMjIwLCAzNiwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIyMCwgMzYsIDIsIDI0OCwgNDcsIDE1MCwgNiwgMSwgMjUzLCAxNzIsIAorICAgIDE1MCwgNiwgMSwgMjUyLCA0NywgMTUwLCA2LCAxLCAyNDIsIDIxMCwgMTUwLCA2LCAxLCAyNDgsIDIyOSwgMTUwLCA2LCAxLCAKKyAgICAyNDUsIDIyMSwgMTUwLCA2LCAxLCAyMTAsIDExNiwgMTUwLCA2LCAxLCAyNDUsIDIwNSwgMTUwLCA2LCAxLCAyNDUsIDczLCAKKyAgICAxNTAsIDYsIDEsIDExMiwgMTUwLCA2LCAxLCAyMTAsIDc0LCAxNTAsIDYsIDEsIDIzNSwgMjM0LCAxNTAsIDYsIDEsIDIzMiwgCisgICAgMTk2LCAxNTAsIDYsIDEsIDIxMSwgMTYwLCAxNTAsIDYsIDEsIDI1MSwgNDEsIDE1MCwgNiwgMSwgMjM0LCAxNzEsIDE1MCwgCisgICAgNiwgMSwgMjQxLCA3NSwgMTUwLCA2LCAxLCAyMzUsIDE0NywgMTUwLCA2LCAxLCAyNDIsIDI1MywgMTUwLCA2LCAxLCAyNTAsIAorICAgIDEzNCwgMTUwLCA2LCAxLCAyMzEsIDYzLCAxNTAsIDYsIDEsIDIxMSwgOCwgMTUwLCA2LCAxLCAyMjgsIDQ0LCAxNTAsIDYsIAorICAgIDEsIDIyMCwgMTA0LCAxNTAsIDYsIDEsIDIxMywgMTM4LCAxNTAsIDYsIDEsIDI1MCwgMTY1LCAxNTAsIDYsIDEsIDIyNSwgCisgICAgMjA4LCAxNTAsIDYsIDEsIDIzNSwgMTE2LCAxNTAsIDYsIDEsIDIwNSwgMTUwLCA2LCAxLCAyMjEsIDE2MywgMTUwLCA2LCAxLCAKKyAgICAyMTMsIDE3OSwgMTUwLCA2LCAxLCAyMTYsIDYzLCAxNTAsIDYsIDEsIDIyMywgOTgsIDE1MCwgNiwgMSwgMjQ5LCAyNDYsIAorICAgIDE1MCwgNiwgMSwgMjEwLCAyNDksIDE1MCwgNiwgMSwgMjI1LCA0OSwgMTUwLCA2LCAxLCAyMzQsIDE4MiwgMTUwLCA2LCAxLCAKKyAgICAyMjYsIDIyNiwgMTUwLCA2LCAxLCAyNDQsIDE1MCwgMTUwLCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzYsIDE1MCwgMjU0LCAKKyAgICA2NSwgMTUwLCAyNDUsIDE2MiwgNzksIDE1MCwgMjQ1LCAzOSwgNzksIDE1MCwgMjQ5LCAyMjcsIDE1MCwgMjI0LCAxNiwgNzksIAorICAgIDE1MCwgMjU1LCAzMCwgNzksIDE1MCwgNCwgMSwgMjUzLCAxNzIsIDE1MCwgNCwgMSwgMjUyLCA0NywgMTUwLCA0LCAxLCAKKyAgICAyNDIsIDIxMCwgMTUwLCA0LCAxLCAyNDgsIDIyOSwgMTUwLCA0LCAxLCAyNDUsIDIyMSwgMTUwLCA0LCAxLCAyMTAsIDExNiwgCisgICAgMTUwLCA0LCAxLCAyNDUsIDIwNSwgMTUwLCA0LCAxLCAyNDUsIDczLCAxNTAsIDQsIDEsIDExMiwgMTUwLCA0LCAxLCAyMTAsIAorICAgIDc0LCAxNTAsIDQsIDEsIDIzNSwgMjM0LCAxNTAsIDQsIDEsIDIzMiwgMTk2LCAxNTAsIDQsIDEsIDIxMSwgMTYwLCAxNTAsIAorICAgIDQsIDEsIDI1MSwgNDEsIDE1MCwgNCwgMSwgMjM0LCAxNzEsIDE1MCwgNCwgMSwgMjQxLCA3NSwgMTUwLCA0LCAxLCAyMzUsIAorICAgIDE0NywgMTUwLCA0LCAxLCAyNDIsIDI1MywgMTUwLCA0LCAxLCAyNTAsIDEzNCwgMTUwLCA0LCAxLCAyMzEsIDYzLCAxNTAsIAorICAgIDQsIDEsIDIxMSwgOCwgMTUwLCA0LCAxLCAyMjgsIDQ0LCAxNTAsIDQsIDEsIDIyMCwgMTA0LCAxNTAsIDQsIDEsIDIxMywgCisgICAgMTM4LCAxNTAsIDQsIDEsIDI1MCwgMTY1LCAxNTAsIDQsIDEsIDIyNSwgMjA4LCAxNTAsIDQsIDEsIDIzNSwgMTE2LCAxNTAsIAorICAgIDQsIDEsIDIwNSwgMTUwLCA0LCAxLCAyMjEsIDE2MywgMTUwLCA0LCAxLCAyMTMsIDE3OSwgMTUwLCA0LCAxLCAyMTYsIDYzLCAKKyAgICAxNTAsIDQsIDEsIDIyMywgOTgsIDE1MCwgNCwgMSwgMjQ5LCAyNDYsIDE1MCwgNCwgMSwgMjEwLCAyNDksIDE1MCwgNCwgMSwgCisgICAgMjI1LCA0OSwgMTUwLCA0LCAxLCAyMzQsIDE4MiwgMTUwLCA0LCAxLCAyMjYsIDIyNiwgMTUwLCA0LCAxLCAyNDQsIDE1MCwgCisgICAgMTUwLCA0LCAyNywgMjQ1LCAyMjIsIDIxMCwgMjQ5LCAxNTAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTUwLCAyNDAsIDE3NSwgCisgICAgMTUwLCAyNDYsIDEwMywgNTAsIDk0LCAyNTUsIDI0LCAyNDUsIDY1LCA5NCwgMjU1LCAyNCwgMjIxLCAxNjQsIDk0LCAyNTUsIAorICAgIDI0LCAyMjAsIDkwLCA5NCwgMjU1LCAyNCwgMjEwLCAxMDQsIDIyNCwgNzQsIDk0LCAyNTUsIDI0LCAyMTAsIDEwNCwgMjQzLCAKKyAgICAxMzIsIDk0LCAyNTUsIDI0LCAyMTYsIDc2LCA5NCwgMjU1LCAyNCwgMjIzLCA1MCwgOTQsIDI1NSwgMjQsIDIxMCwgMTAzLCAKKyAgICA5NCwgMjU1LCAyNCwgMjI1LCAyNDksIDk0LCAyNTUsIDI0LCAyMTEsIDIwLCA5NCwgMjU1LCAyNCwgMjE2LCAyMTUsIDk0LCAKKyAgICAyNTUsIDI0LCAyNDMsIDQ4LCA5NCwgMjU1LCAyNCwgMjQzLCA0OSwgMjMwLCA3NCwgOTQsIDI1NSwgMjQsIDI0MywgNDYsIAorICAgIDk0LCAyNTUsIDI0LCAyMjQsIDc1LCAyMjYsIDIwLCA5NCwgMjU1LCAyNCwgMjE2LCAyNTQsIDI0MywgNjMsIDk0LCAyNTUsIAorICAgIDI0LCAyMjUsIDIzMCwgOTQsIDI1NSwgMjQsIDI1MywgMjA4LCAyNDIsIDQ4LCA5NCwgMjU1LCAyNCwgMjMwLCA4NCwgOTQsIAorICAgIDI1NSwgMjQsIDIzMSwgMjEzLCA5NCwgMjU1LCAyNCwgMjMxLCA1NCwgOTQsIDI1NSwgMjQsIDIzMSwgNTUsIDIzNCwgMTgzLCAKKyAgICA5NCwgMjU1LCAyNCwgMjQ4LCAxNzEsIDk0LCAyNTUsIDI0LCAyMjQsIDg2LCA5NCwgMjU1LCAyNCwgMjE2LCAyNTQsIDIyNCwgCisgICAgNzAsIDk0LCAyNTUsIDI0LCAyMTEsIDMwLCAyNTIsIDQ4LCAyMTAsIDIzMCwgOTQsIDI1NSwgMjQsIDIyNiwgMjExLCA5NCwgCisgICAgMjU1LCAyNCwgMjM2LCAyNiwgOTQsIDI1NSwgMjQsIDI0OCwgNzgsIDk0LCAyNTUsIDI0LCAyMTAsIDMzLCA5NCwgMTY0LCAKKyAgICAyMzEsIDE0OCwgMjUwLCA0MywgOTQsIDIyNSwgMTQsIDIyMCwgMzgsIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyMSwgMTY0LCAKKyAgICA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjUsIDI0MywgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjI0LCA3OSwgOTQsIDIyNSwgMTQsIAorICAgIDI0MSwgMTY1LCA5NCwgMjI1LCAxNCwgMjE1LCAxNzcsIDk0LCAyMjUsIDE0LCAyMjEsIDE2NCwgOTQsIDIyNSwgMTQsIDIyNSwgCisgICAgMjQzLCA5NCwgMjI1LCAxNCwgMjI0LCA3OSwgOTQsIDIyNSwgMTQsIDI0MSwgNjgsIDk0LCAyMjUsIDE0LCAyNDEsIDY5LCAKKyAgICAyNDIsIDMsIDMxLCAyMTQsIDMsIDk0LCAyMjUsIDE0LCAyMjQsIDIwLCA5NCwgMjI1LCAxNCwgMjQ4LCAyMTYsIDE3NywgCisgICAgMjMxLCAxNzYsIDk0LCAyMjUsIDE0LCAyMzEsIDQzLCA5NCwgMjI0LCAxNDQsIDIzMSwgMTczLCA5NCwgMjI1LCAxNCwgMjIzLCAKKyAgICAxNzIsIDk0LCAyMjQsIDE0NCwgMjI1LCAyNTEsIDk0LCAyMjUsIDE0LCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDIyNSwgMTQsIAorICAgIDIxOSwgMTYxLCAyNDcsIDEyOCwgOTQsIDIyNCwgMTQ0LCAyMTksIDU1LCAyMjUsIDI0NSwgOTQsIDE2NCwgMjE0LCAxNjAsIAorICAgIDI0NywgMTI4LCA5NCwgMTY0LCAyMzIsIDExNCwgMjQ3LCAxMjgsIDk0LCAyMjQsIDE0NCwgMjI3LCAxOTksIDI0MiwgNDcsIAorICAgIDk0LCAyMjUsIDE0LCAyMjQsIDgwLCAyMjQsIDc0LCA5NCwgMSwgMjU0LCAxNzksIDk0LCAxLCAyNTIsIDM2LCA5NCwgMSwgCisgICAgMjQyLCAyMDgsIDk0LCAxLCAyNDgsIDE5NywgOTQsIDEsIDI0MSwgMjQ1LCA5NCwgMSwgMjE0LCAzLCA5NCwgMSwgMjEwLCAKKyAgICA5NywgOTQsIDEsIDI0MSwgMjA0LCA5NCwgMSwgMjE2LCAyMzEsIDk0LCAxLCAyMTAsIDIzMywgOTQsIDEsIDQwLCAyMzUsIDAsIAorICAgIDk0LCAxLCAyMzUsIDAsIDk0LCAxLCAyMzMsIDEwMCwgOTQsIDEsIDQwLCAyMzEsIDcwLCA5NCwgMSwgMjMxLCA3MCwgOTQsIAorICAgIDEsIDQwLCAyMjcsIDE5OCwgOTQsIDEsIDIyNywgMTk4LCA5NCwgMSwgMjIxLCAyNTEsIDk0LCAxLCAyNTMsIDE3MCwgOTQsIAorICAgIDEsIDQwLCAyMjUsIDIyNCwgOTQsIDEsIDIyNSwgMjI0LCA5NCwgMSwgNDAsIDIxNSwgMTgwLCA5NCwgMSwgMjE1LCAxODAsIAorICAgIDk0LCAxLCAyMjQsIDQyLCA5NCwgMSwgMjIzLCA3MCwgOTQsIDEsIDIyMCwgMjIsIDk0LCAxLCAyMTcsIDM5LCA5NCwgMjcsIAorICAgIDIxMSwgNiwgNTIsIDIxNCwgMywgOTQsIDI3LCAyMTEsIDYsIDIxNCwgNCwgMjEwLCAyMzMsIDk0LCAyNywgMjExLCA2LCA1MiwgCisgICAgMjEwLCAyMzMsIDk0LCAyMjQsIDE0NCwgMjQzLCA0OCwgOTQsIDIyNCwgMTQ0LCAyNDMsIDQ2LCA5LCA1NCwgNTAsIDksIDUsIAorICAgIDIyMSwgMjQ0LCA5LCAyNDQsIDM4LCAyMzEsIDE1OSwgOSwgNSwgMjIyLCAyNSwgOSwgNSwgMjIxLCAyNDcsIDI1NCwgNDUsIAorICAgIDI0OSwgMTE3LCAyMjIsIDE5NSwgMjU0LCA0NSwgMjQ0LCAxMiwgMjIyLCAxOTUsIDksIDIyMywgMTM3LCAyNTQsIDQ1LCAKKyAgICAyMjUsIDE4NiwgMjMwLCAxOTgsIDUwLCAyNTQsIDQ1LCAyMjUsIDE4NiwgMjE2LCAyNDksIDIxNiwgMTQ5LCA1MCwgMjU0LCAKKyAgICAyMzAsIDUwLCA5LCAyNDksIDIyNywgOSwgMjQ4LCAxNTgsIDIyMCwgMTM5LCA5LCAyMjUsIDE2LCAyMTMsIDI0MSwgNTAsIDksIAorICAgIDUsIDIzMCwgMTc5LCA5LCA1LCAyMjIsIDUsIDI1NCwgMTgxLCAyMTIsIDQ1LCA5LCA1LCAyNTQsIDE4MSwgMjUzLCAyMjksIAorICAgIDksIDUsIDIyMywgMTcwLCAyNTQsIDE4MCwgOSwgNSwgMjIzLCAxNzgsIDI1NCwgMTYxLCAyNTQsIDExMiwgOSwgNSwgMjE3LCAKKyAgICA3MSwgOSwgNCwgMTI1LCAyMTcsIDgxLCA5LCA0LCAxMjUsIDI3LCAxMDksIDIsIDIzMywgMTA5LCAyLCAyMTEsIDQzLCA5LCAKKyAgICA0LCAxMjUsIDIxMCwgMTA4LCA5LCA0LCAyNDQsIDE3MywgOSwgNCwgMjQ4LCAxOTIsIDksIDQsIDIzNCwgMjExLCA5LCAyMjAsIAorICAgIDE1MiwgOSwgMSwgNzksIDksIDIxNSwgMjEyLCA1OSwgMjI0LCAxNDQsIDc5LCA5LCAyMjQsIDE2LCA3OSwgOSwgMSwgMjM0LCAKKyAgICAyMTUsIDIxMSwgNDMsIDksIDEsIDI0MiwgMjYsIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDQ4LCA5LCAxLCAxMDksIDIsIAorICAgIDE4MiwgNDgsIDksIDEsIDIxMiwgMzEsIDIsIDE4MiwgNDgsIDksIDEsIDEwOSwgMiwgMTgyLCA1MSwgOSwgMSwgNzcsIDIsIAorICAgIDE4MiwgNDgsIDksIDEsIDI1NCwgMTc5LCA5LCAxLCAyNTIsIDYyLCA5LCAxLCAyMTcsIDksIDIzMSwgMTY5LCA5LCAxLCAKKyAgICAyMTcsIDgsIDksIDEsIDIxNiwgMTkzLCA5LCAxLCAyMzUsIDEyOSwgOSwgMSwgMjQyLCA0NCwgOSwgMSwgMjM0LCAxMzUsIDksIAorICAgIDEsIDI0OCwgMjAzLCA5LCAxLCAyMTYsIDIwMywgOSwgMSwgMjIzLCA5OCwgOSwgMSwgMjEwLCAxMDgsIDksIDEsIDIyMSwgCisgICAgMTY4LCA5LCAxLCAyMjAsIDYxLCA5LCAxLCAyMjIsIDI4LCA5LCAxLCAyNDgsIDIyNCwgOSwgMSwgMjE3LCA4MSwgOSwgMSwgCisgICAgMjEwLCAxMTEsIDksIDEsIDI1NCwgMjA1LCA5LCAxLCAyNDIsIDI1MSwgOSwgMSwgMjM0LCAxODEsIDIsIDExMywgMTcwLCAKKyAgICA0OCwgOSwgMSwgMjM0LCAxODEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyMzUsIDIwMCwgCisgICAgMjE0LCAxMDUsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIAorICAgIDEzNCwgMTcwLCA0OCwgOSwgMjE3LCA0NCwgOSwgMSwgMjQ0LCAxNTAsIDksIDEsIDIyNCwgODQsIDksIDEsIDIzNSwgMCwgOSwgCisgICAgMSwgMjMzLCAxMDgsIDksIDEsIDIzMSwgODMsIDksIDEsIDIyOCwgNjcsIDksIDEsIDI0MSwgMjI1LCA5LCAxLCAyMTIsIDMwLCAKKyAgICA5LCAxLCAxMDksIDIzMSwgMTk3LCA5LCAxLCAyMTEsIDQzLCA5LCAyNDQsIDE3MSwgOSwgMjQ4LCAxOTAsIDksIDIzNCwgCisgICAgMjA5LCA5LCAyNDQsIDE3MywgOSwgMjQ4LCAxOTIsIDksIDIzNCwgMjExLCA5LCAyMjAsIDk1LCA5LCAyMTgsIDQ2LCA5LCAKKyAgICAyMzEsIDIzMSwgNDgsIDksIDE4MiwgNDgsIDksIDE4MiwgNTEsIDksIDIxOCwgNjYsIDI1NCwgMTc5LCA5LCAyMzUsIDIwMCwgCisgICAgMjQ4LCAxOTIsIDksIDE2NCwgMjI4LCA2OCwgMjQyLCAyMjUsIDksIDIwOSwgMjU1LCA5LCAyNSwgNSwgNCwgMjE0LCAxMDYsIAorICAgIDQ4LCA5LCAyNSwgNSwgMjM1LCAyMDAsIDQsIDIxNCwgMTA2LCA0OCwgOSwgMjUsIDUsIDU5LCA1MSwgOSwgMjIzLCA1MiwgCisgICAgMjQ4LCAxOTIsIDksIDI0NCwgMTc0LCAyLCAxMTMsIDI0NywgMTI2LCA5LCAyMTIsIDMyLCAxODIsIDUxLCAyNTQsIDQ1LCAKKyAgICAyMSwgMjEwLCA4NiwgMjU0LCA0NSwgMjEsIDExMSwgMjU0LCA0NSwgMjEsIDEwNSwgMjU0LCA0NSwgMjEsIDE1OCwgMjU0LCAKKyAgICA0NSwgMjEsIDE2MSwgMjU0LCA0NSwgMjEsIDE5MCwgMjU0LCA0NSwgMjEsIDE5NSwgMjU0LCA0NSwgMjEsIDE5OSwgMjU0LCAKKyAgICA0NSwgMjEsIDE5NiwgMjU0LCA0NSwgMjEsIDIwMSwgOSwgMjI1LCAxODUsIDUwLCA5LCAyNDgsIDkxLCAyMjAsIDEzOSwgOSwgCisgICAgMjE2LCAxNDcsIDIyMCwgMTM5LCA5LCAyNDQsIDg5LCAyMjUsIDEyLCAyMTgsIDE1OCwgOSwgMSwgMjQ3LCAxMjcsIDI1MiwgCisgICAgNjIsIDksIDEsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxLCAyMTgsIDI0LCAyNTQsIDE3OSwgOSwgMSwgMTA5LCAyMTIsIDQ2LCAKKyAgICA5LCAxLCAxMDksIDIsIDIxMiwgMzIsIDE4MiwgNDgsIDksIDEsIDEwOSwgMiwgMjEyLCAzMiwgMTgyLCA1MSwgOSwgMSwgCisgICAgMTI1LCAyNDIsIDI2LCA5LCAxLCAxMjUsIDE4MiwgMjU0LCAxNzksIDksIDEsIDEyNSwgMTgyLCAyMTIsIDMwLCA5LCAxLCAKKyAgICAxMDQsIDIsIDE4MiwgNDgsIDksIDEsIDEyNSwgMTgyLCAyMTEsIDQzLCA5LCAxLCAyMTUsIDE0OSwgOSwgMSwgMjE1LCAxNDcsIAorICAgIDksIDEsIDI1MiwgNzIsIDksIDEsIDIxNywgOSwgMiwgMjIyLCAyMzYsIDksIDEsIDIxNywgOSwgMiwgMTM0LCAxNzAsIDcyLCAKKyAgICAyNDYsIDExMSwgOSwgMSwgMjI1LCAyMDgsIDksIDEsIDIxNywgNiwgOSwgMSwgMjUyLCA2MCwgOSwgMSwgMTIyLCAyLCAxODIsIAorICAgIDQ4LCA5LCAxLCAxMjIsIDIsIDExMywgMTcwLCA2NywgNDgsIDksIDEsIDIyNywgMTU3LCA5LCAxLCAyNDYsIDUxLCA5LCAxLCAKKyAgICAxMjIsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjE3LCAyNywgOSwgMSwgMjE3LCAyNSwgOSwgMSwgMjQ4LCAxMzgsIDksIDEsIAorICAgIDI0OCwgMjA0LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjQ4LCAyMDQsIDIsIDU5LCA1MSwgOSwgMSwgMjQ4LCAyMDQsIDIsIDU5LCAKKyAgICAyNTIsIDUxLCAyMiwgNCwgMjE3LCA4MSwgOSwgMSwgMjQ4LCAyMDksIDksIDEsIDI0OCwgMTQwLCA5LCAxLCAyNDYsIDc4LCAKKyAgICA5LCAxLCAyNDgsIDIwNCwgMiwgMTM0LCAxNzAsIDcyLCAyNDYsIDExMSwgOSwgMSwgMjQ4LCAyMDQsIDIsIDI0NCwgMTksIAorICAgIDE3MCwgNDgsIDksIDEsIDIyMiwgMTczLCA5LCAxLCAyMjMsIDk5LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjIzLCA5OSwgMiwgCisgICAgMjIyLCAyMzYsIDksIDEsIDIyMywgOTksIDIsIDU5LCA1MSwgOSwgMSwgMjIzLCA5OSwgMiwgNCwgMjE0LCAxMDYsIDUxLCA5LCAKKyAgICAxLCAyMjMsIDk5LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMTEzLCAxNzAsIDQ4LCAKKyAgICA5LCAxLCAyMzUsIDEyNiwgOSwgMSwgMjIzLCA5OSwgMiwgMjQ0LCAxOSwgMTcwLCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIAorICAgIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyMjEsIDE2OSwgCisgICAgMiwgMTM0LCAxNzAsIDI1MiwgNTEsIDIyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIyMiwgMjksIDIsIDExMywgMTcwLCA1MSwgCisgICAgOSwgMSwgMjIyLCAyOSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMTcsIDgyLCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIAorICAgIDI1NCwgMjA2LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMSwgMjQ0LCAxNTEsIDIsIAorICAgIDU5LCAyMzAsIDExNCwgNTEsIDksIDEsIDI0NCwgMTUxLCAyLCA1OSwgNTEsIDksIDEsIDIxMywgMjQ4LCA5LCAxLCAyNDQsIAorICAgIDE1MSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyMjUsIDIwNiwgOSwgMSwgMjI0LCA4NSwgMiwgNTksIDQ4LCA5LCAxLCAKKyAgICAyMjQsIDg1LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzNCwgMTgwLCA5LCAxLCAyMTcsIDI1MSwgMjM1LCAwLCA5LCAxLCAKKyAgICAyMzUsIDEsIDIsIDIyMiwgMjM2LCA5LCAxLCAyMzUsIDEsIDIsIDU5LCA0OCwgOSwgMSwgMjI5LCA4NCwgOSwgMSwgMjM1LCAKKyAgICAxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDI0MywgMTI5LCA5LCAxLCAyNDMsIDEzMCwgMiwgMjIyLCAyMzYsIDksIDEsIAorICAgIDIyOSwgNywgOSwgMSwgMjQzLCAxMzAsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjQyLCAxMDgsIDksIDEsIDI0MywgMTMwLCAKKyAgICAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzMywgMTA5LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjMzLCAxMDksIDIsIDU5LCAKKyAgICA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDEzNCwgMTcwLCA1MSwgOSwgCisgICAgMSwgMjI4LCA2OCwgMiwgNTksIDUxLCA5LCAxLCAyMjgsIDY4LCAyNDIsIDIyNSwgOSwgMSwgMjIyLCAyMTYsIDksIDEsIAorICAgIDIyOCwgNjgsIDIsIDIyMiwgMjM2LCA5LCAxLCAyMjgsIDY4LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDI0MSwgMjI2LCAKKyAgICAyNDcsIDE0OSwgOSwgMSwgMjE3LCAyOCwgMiwgNTksIDQ4LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIDQ4LCA5LCAxLCAyNDEsIAorICAgIDIyNiwgMjQyLCAxNzgsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgMiwgMTgyLCA0OCwgOSwgMSwgMjE3LCA5LCAyMzEsIAorICAgIDE3MCwgMjQyLCAxNzgsIDksIDEsIDIxMiwgMzEsIDIsIDIyMiwgMjM2LCA5LCAxLCAyMzQsIDc5LCAyMjYsIDIzOCwgOSwgMSwgCisgICAgMjI2LCAyMzgsIDksIDEsIDY5LCA5LCAxLCAyMTAsIDIxMiwgOSwgMSwgMjM0LCA3OSwgMjEwLCAyMTIsIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjEzLCAyNTUsIDksIDEsIDI0NCwgMTc2LCAyMTEsIDQzLCA5LCAxLCA3NywgCisgICAgMiwgMjE3LCA3OCwgOSwgMSwgNzcsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMTIsIDMxLCAyLCA1OSwgNDgsIDksIDEsIDc2LCAKKyAgICA5LCAxLCA3NywgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCA3NywgMjUyLCAxNDAsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgCisgICAgMTgyLCA0OCwgOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA5LCAxLCAyNTQsIDI1MiwgOSwgNCwgMTI1LCAyNywgMjIyLCAyOSwgCisgICAgMiwgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTcsIDksIDQsIDEyNSwgMjcsIDIyNCwgODUsIDIsIDIzMywgMTA5LCAyLCAKKyAgICAxMDksIDIzMSwgMTk3LCA5LCA0LCAxMjUsIDY2LCA2NSwgMTcsIDksIDQsIDEyNSwgMjMzLCAxMDksIDI1NCwgMTc5LCA5LCAKKyAgICA0LCAxMjUsIDIzNSwgMTI5LCA5LCA0LCAxMjUsIDEzNCwgMjQ3LCAxMjYsIDksIDQsIDEyNSwgMjIxLCAxNjgsIDksIDI0NSwgCisgICAgMTUxLCA2NCwgMjUzLCAxNzQsIDksIDIxOCwgMTU0LCA2NCwgMjIyLCAxNDAsIDI0NSwgMTgzLCAyNDEsIDE2MiwgOSwgNCwgCisgICAgMTI1LCAyMjIsIDE4NSwgMjEwLCA4NiwgOSwgNCwgMTI1LCAyMTQsIDE1OSwgMjIzLCAxMTgsIDIxMCwgODYsIDksIDQsIAorICAgIDEyNSwgMjQ3LCAxMjcsIDI0MSwgMjQzLCA2NCwgMjM0LCAxMzUsIDksIDQsIDEyNSwgNjYsIDUzLCAxNywgOSwgNCwgMTIxLCAKKyAgICAyMjEsIDE2OCwgOSwgNCwgMTI1LCAyMzEsIDIzMiwgOSwgNCwgMjEyLCAzMCwgOSwgNCwgMjExLCA0MywgOSwgNCwgMTI1LCAKKyAgICAyMTEsIDQzLCA5LCA0LCAxMjUsIDIyOCwgNjcsIDksIDIyNSwgNDQsIDY0LCAyMjIsIDE1LCA5LCAyNDUsIDE2MCwgMjUwLCAKKyAgICAxODMsIDEyMSwgMjE4LCAxMzEsIDksIDI0NSwgMTYwLCAyNTAsIDE4MywgMTI1LCAyMTgsIDEzMSwgOSwgMjIyLCAxODUsIAorICAgIDEyNSwgMjE4LCAxMzIsIDIsIDI0NCwgMTEyLCAyNTAsIDE4MiwgOSwgNCwgMTIxLCAyMzEsIDgzLCA5LCAxLCAyNDgsIDIwNCwgCisgICAgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCA5LCAxLCAyMjMsIDk5LCAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIDI0NSwgMzAsIAorICAgIDI1NCwgNDUsIDIxLCAyMTAsIDg2LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTExLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgCisgICAgMTA1LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTU4LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTYxLCAyNDUsIDMwLCAyNTQsIAorICAgIDQ1LCAyMSwgMTkwLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTk1LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTk5LCAyNDUsIAorICAgIDMwLCAyNTQsIDQ1LCAyMSwgMTk2LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjAxLCA5LCAxLCAyMjAsIDYyLCAyLCA1OSwgCisgICAgNTEsIDksIDEsIDI0OCwgMjI1LCAyLCA1OSwgNTEsIDksIDEsIDI0MiwgMjUyLCAyLCA1OSwgNTEsIDksIDUsIDIxOSwgMTYwLCAKKyAgICAyNTQsIDEzNCwgOSwgNSwgMjE5LCAxNjAsIDIyNCwgMjM4LCAyMzEsIDYzLCA5LCAxLCAyNDEsIDIyNiwgMiwgMjM1LCAyMDAsIAorICAgIDIxNCwgMTA1LCAxODMsIDI0NSwgMTUxLCA2NCwgMjI2LCAxOCwgMTgzLCAyMTgsIDIwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIAorICAgIDE4MywgMjE4LCA2OCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxODMsIDIxOCwgMjAsIDI0OSwgMjM0LCAxODMsIDIxOCwgNjgsIAorICAgIDI0OSwgMjM0LCAxODMsIDIwMywgMjQ5LCAyMzQsIDE4MywgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMzMsIDUyLCAxODMsIDI0OSwgCisgICAgMjM1LCAyMTksIDEwOCwgMjIyLCAyNTQsIDE4MywgMjE4LCAyMCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMzMsIDUyLCAxODMsIAorICAgIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjIyLCAyNTQsIDE4MywgMjQ5LCAxODgsIDE4MywgMjQyLCA4LCAyMjYsIAorICAgIDI1NCwgMTgzLCAyNDIsIDgsIDIzMSwgNDEsIDE4MywgMjQyLCA4LCAyNTMsIDIyNiwgMTgzLCAyNTUsIDMwLCA3OSwgMTgzLCAKKyAgICAxLCAyNTQsIDE4MywgMTgzLCAxLCAyMTgsIDI0LCAyNTQsIDE4MywgMTgzLCAxLCAyNTIsIDMzLCAxODMsIDEsIDI0MywgCisgICAgMTIwLCAxODMsIDEsIDI0MywgMTIxLCAyNDMsIDk4LCAxODMsIDEsIDI0OCwgMjAwLCAxODMsIDEsIDI0NywgMTI3LCAyNDgsIAorICAgIDIwMSwgMjIyLCAyMzIsIDE4MywgMSwgMjQxLCAyNDUsIDE4MywgMSwgMjEyLCAzMCwgMTgzLCAxLCAyMTAsIDEwOCwgMTgzLCAKKyAgICAxLCAyNDEsIDIwMiwgMTgzLCAxLCAyMTYsIDIyNywgMTgzLCAxLCAyMTYsIDIyOCwgMjQzLCA5OCwgMTgzLCAxLCAyMTAsIAorICAgIDE5OSwgMTgzLCAxLCAyMTAsIDIwMCwgMjQxLCAyNDUsIDE4MywgMSwgMjM0LCAyMzEsIDE4MywgMSwgMjMzLCAxMDcsIDE4MywgCisgICAgMSwgMjMwLCAxOTUsIDE4MywgMSwgMjI3LCAxOTgsIDE4MywgMSwgMjIwLCAxNDUsIDE4MywgMSwgNDAsIDIyMCwgMTQ1LCAKKyAgICAxODMsIDEsIDc2LCAxODMsIDEsIDIyNSwgMjI0LCAxODMsIDEsIDIyMywgNTIsIDIyNSwgMjI0LCAxODMsIDEsIDIyMiwgMjYsIAorICAgIDE4MywgMSwgMjI0LCA3OCwgMTgzLCAxLCAyMjIsIDIzMiwgMTgzLCAxLCAyMjAsIDIyLCAxODMsIDEsIDIxNywgMzcsIDE4MywgCisgICAgMSwgMjI1LCAxNzIsIDI1MiwgMjAsIDE4MywgMSwgMjI1LCAxNzIsIDI0MiwgMjQ5LCAxODMsIDEsIDIyNSwgMTcyLCAyNDgsIAorICAgIDI4LCAxODMsIDIyNCwgMTU0LCA0OCwgMTgzLCAyMjQsIDE1NCwgNTEsIDE4MywgMjI0LCAxNTQsIDI0NiwgMTI1LCAxODMsIAorICAgIDIxMCwgMTcsIDQ4LCAxODMsIDIxMCwgMTcsIDUxLCAxODMsIDIxMCwgMTcsIDI0NiwgMTI1LCAxODMsIDIyMywgMTM0LCA0OCwgCisgICAgMTgzLCAyMjMsIDEzNCwgNTEsIDE4MywgMjQ2LCAxMjYsIDIxMCwgMjQsIDI0MSwgNTEsIDE4MywgMjQ2LCAxMjYsIDIxMCwgCisgICAgMjQsIDI1NCwgMTEzLCAxODMsIDI0MSwgMjQ4LCA0OCwgMTgzLCAyNDEsIDI0OCwgNTEsIDE4MywgMjQxLCAyNDcsIDI0NiwgCisgICAgMTI1LCAxODMsIDI0NSwgODcsIDQ4LCAxODMsIDI0NSwgODcsIDUxLCAxODMsIDIyMiwgMTA5LCAxODMsIDI0NCwgMTQ0LCAKKyAgICAyNDcsIDEyOCwgMTgzLCAyMjMsIDI1MSwgMTgzLCAyMjIsIDEzNiwgMTgzLCAxMTMsIDY3LCAxNzAsIDQ4LCAxODMsIDExMywgCisgICAgNjcsIDE3MCwgNTEsIDE4MywgMTM0LCAxNzAsIDQ4LCAxODMsIDEzNCwgMTcwLCA1MSwgMTgzLCAyMjYsIDI1MiwgMjMyLCAKKyAgICAyMjAsIDQ4LCAxODMsIDIyNiwgMjUyLCAyMzIsIDIyMCwgNTEsIDE4MywgMjMwLCA2MSwgMTgzLCAyNTIsIDEzOSwgMTgzLCAKKyAgICAxLCAyMTksIDUxLCAyMTAsIDgwLCAxODMsIDEsIDIxOSwgNTEsIDIzNCwgMTI4LCAxODMsIDEsIDIxOSwgNTEsIDI0NCwgCisgICAgMTYyLCA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjQxLCAxLCA1MSwgOSwgMSwgMjUyLCA2MywgMiwgNTksIDI1MiwgCisgICAgNTEsIDIyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIAorICAgIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgMjUyLCA1MSwgMjIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjUyLCA2MywgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDI1MiwgNjMsIDIsIDIzNSwgCisgICAgMjAwLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDI1MiwgNjMsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAxMjIsIDIsIDExMywgCisgICAgMTcwLCA0OCwgOSwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCA5LCAxLCAyNDgsIDIwNCwgCisgICAgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCAyNTIsIDUxLCAyMiwgNCwgMjE3LCA4MSwgOSwgMSwgMjQ4LCAyMDQsIDIsIDIzNSwgCisgICAgMjAwLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDIyMywgOTksIDIsIDkxLCA5LCAxLCAyMjEsIDE2OSwgMiwgMjQ0LCAxOSwgCisgICAgMTcwLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDEzNCwgMTcwLCAKKyAgICAyMjUsIDEwLCAyNDYsIDExMiwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAKKyAgICAyNDQsIDE1MSwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyNDQsIDE1MSwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgCisgICAgMTUzLCA1MSwgOSwgMSwgMjM0LCAxODEsIDIsIDU5LCA0OCwgOSwgMSwgMjM0LCAxODEsIDIsIDEzNCwgMTcwLCA0OCwgOSwgCisgICAgMSwgMjM0LCAxODEsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIDksIDEsIDY2LCAyLCA1OSwgNDgsIDksIAorICAgIDEsIDY2LCAyLCA1OSwgNTEsIDksIDEsIDIyOCwgNjgsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjI4LCA2OCwgMiwgNCwgCisgICAgMjE3LCA4MSwgOSwgMSwgMjI4LCA2OCwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIzMywgMTA5LCAyLCAxMzAsIDksIDEsIAorICAgIDIyMywgOTksIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDE4MiwgNDgsIDksIDEsIDIyMSwgCisgICAgMTY5LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAxMjIsIDIsIDQsIDksIDEsIDIxNywgODIsIDUxLCA5LCAxLCAKKyAgICAxMjIsIDIsIDQsIDksIDEsIDIxNywgODIsIDIyLCAxMTMsIDI0NywgMTI2LCA5LCAxLCAyMjEsIDE2OSwgMiwgNCwgOSwgMSwgCisgICAgMjE3LCA4MiwgMjIsIDExMywgMjQ3LCAxMjYsIDksIDEsIDIyMywgOTksIDIsIDQsIDksIDEsIDIxNywgODIsIDIyLCAxMTMsIAorICAgIDI0NywgMTI2LCA5LCAxLCAxMjIsIDIsIDQsIDksIDEsIDIxNywgODIsIDQ4LCA5LCAxLCAxMDksIDIsIDI0NSwgMzAsIDI1NCwgCisgICAgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAxMDksIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIDQ4LCA5LCAxLCAyNDQsIAorICAgIDE3NiwgNzcsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDI0NSwgCisgICAgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIDQ4LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAKKyAgICAyNDQsIDE5LCA1MSwgOSwgMSwgMjEyLCAzMSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIDQ4LCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIDI0NSwgMzAsIAorICAgIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIAorICAgIDQ4LCA5LCAxLCAxMjIsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyNDQsIDE5LCA1MSwgOSwgMSwgMjIxLCAxNjksIDIsIAorICAgIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyNDQsIDE5LCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgCisgICAgOSwgMSwgMjM1LCAxLCAyLCAxMTMsIDE3MCwgNDgsIDIxNiwgMjA2LCAxLCAyNDIsIDUzLCAyMTYsIDIwNiwgMSwgMjIwLCAKKyAgICA3MCwgMjE2LCAyMDYsIDEsIDIyOCwgNjYsIDIxNiwgMjA2LCAxLCAyMjMsIDE4NywgMjE2LCAyMDYsIDEsIDI1MiwgMTk3LCAKKyAgICAyMTYsIDIwNiwgMSwgMjMzLCAxLCAyMTYsIDIwNiwgMSwgMjM1LCAxNCwgMjE2LCAyMDYsIDEsIDI1NCwgMTY4LCAyMTYsIAorICAgIDIwNiwgMSwgMjE0LCAyNSwgMjE2LCAyMDYsIDEsIDIzMSwgODIsIDIxNiwgMjA2LCAxLCAyNDQsIDIwMiwgMjE2LCAyMDYsIAorICAgIDEsIDI0OCwgMzEsIDIxNiwgMjA2LCAxLCAyMTYsIDIwOCwgMjE2LCAyMDYsIDEsIDIzMywgMTM3LCAyMTYsIDIwNiwgMSwgCisgICAgMjQzLCAxMzgsIDIxNiwgMjA2LCAxLCAyNDIsIDE4NCwgMjE2LCAyMDYsIDEsIDIyMSwgMTY3LCAyMTYsIDIwNiwgMSwgMjQ4LCAKKyAgICAxNTYsIDIxNiwgMjA2LCAxLCAyMTAsIDEwMCwgMjE2LCAyMDYsIDEsIDIxNywgMzgsIDIxNiwgMjA2LCAxLCAyMTEsIDEwMywgCisgICAgMjE2LCAyMDYsIDEsIDIyNSwgMjM3LCAyMTYsIDIwNiwgMSwgMjM1LCAxMzQsIDIxNiwgMjA2LCAxLCAyNTAsIDE0MiwgMjE2LCAKKyAgICAyMDYsIDEsIDIxNSwgMTU2LCAyMTYsIDIwNiwgMSwgMjQxLCAxOTUsIDIxNiwgMjA2LCAxLCAyMzQsIDEzNywgMjE2LCAyMDYsIAorICAgIDEsIDIxNiwgMjA3LCAyMTYsIDIwNiwgMSwgMjEwLCAxMTUsIDIxNiwgMjA2LCAxLCAyMjAsIDYwLCAyMTYsIDIwNiwgMSwgCisgICAgMjIyLCAzMiwgMjE2LCAyMDYsIDEsIDI0OCwgMjI3LCAyMTYsIDIwNiwgMSwgMTEyLCAyMTYsIDIwNiwgMSwgMjEwLCAyMywgCisgICAgMjE2LCAyMDYsIDEsIDI1NCwgMjAyLCAyMTYsIDIwNiwgMSwgMjQyLCAyNTAsIDIxNiwgMjA2LCAxLCAyMjQsIDg4LCAyMTYsIAorICAgIDIwNiwgMSwgMjEyLCA2MywgMjE2LCAyMDYsIDI1NSwgMzEsIDIxNiwgMjA2LCAyNTUsIDQ3LCAyMTYsIDIwNiwgMjQwLCAKKyAgICAxMjEsIDIxNiwgMjA2LCAyNDUsIDIxNiwgMjE2LCAyMDYsIDIxNCwgMjIyLCAyMTYsIDIwNiwgMjI2LCAxODYsIDIxNiwgCisgICAgMjA2LCAyNDUsIDIyNCwgMjE2LCAyMDYsIDI0NSwgMjQsIDIxNiwgMjA2LCAyMjYsIDI1MSwgMjE2LCAyMDYsIDIyNywgMywgCisgICAgMjE2LCAyMDYsIDIxOCwgNDYsIDIxNiwgMjA2LCAxLCAyMjksIDIzMCwgMjI4LCAxNDIsIDIxLCAyMTAsIDg2LCAyMjgsIAorICAgIDE0MiwgMjEsIDExMSwgMjI4LCAxNDIsIDIxLCAxMDUsIDIyOCwgMTQyLCAyMSwgMTU4LCAyMjgsIDE0MiwgMjEsIDE2MSwgCisgICAgMjI4LCAxNDIsIDIxLCAxOTAsIDIyOCwgMTQyLCAyMSwgMTk1LCAyMjgsIDE0MiwgMjEsIDE5OSwgMjI4LCAxNDIsIDIxLCAKKyAgICAxOTYsIDIyOCwgMTQyLCAyMSwgMjAxLCAyMjgsIDE0MiwgMSwgNjEsIDIyOCwgMTQyLCAxLCAyNDUsIDIxNywgMjI4LCAxNDIsIAorICAgIDEsIDc0LCAyMjgsIDE0MiwgMSwgNzYsIDIyOCwgMTQyLCAxLCA2OSwgMjI4LCAxNDIsIDEsIDIyNiwgMTg3LCAyMjgsIDE0MiwgCisgICAgMSwgNzgsIDIyOCwgMTQyLCAxLCAyNDgsIDIxNywgMjI4LCAxNDIsIDEsIDIzMCwgMzAsIDIyOCwgMTQyLCAxLCAyNTIsIAorICAgIDE5OSwgMjI4LCAxNDIsIDEsIDE5MSwgMjI4LCAxNDIsIDEsIDIxNywgMTA2LCAyMjgsIDE0MiwgMSwgMjM1LCAxNDcsIDIyOCwgCisgICAgMTQyLCAxLCAyNTAsIDE2NSwgMjI4LCAxNDIsIDEsIDI0OCwgMjI5LCAyMjgsIDE0MiwgMSwgMjA1LCAyMjgsIDE0MiwgMSwgCisgICAgMjIyLCAxODEsIDIyOCwgMTQyLCAxLCAyMDYsIDIyOCwgMTQyLCAxLCAyNDMsIDg2LCAyMjgsIDE0MiwgMSwgMjQ0LCAyMDQsIAorICAgIDIyOCwgMTQyLCAxLCAxNzYsIDIyOCwgMTQyLCAxLCAyMzMsIDE0MSwgMjI4LCAxNDIsIDEsIDIyOSwgMjM0LCAyMTEsIDIyMywgCisgICAgMjI4LCAxNDIsIDEsIDE4NiwgMjI4LCAxNDIsIDEsIDIyNywgMTY5LCAyMjgsIDE0MiwgMSwgMTk4LCAyMjgsIDE0MiwgMSwgCisgICAgMTYyLCAyMjgsIDE0MiwgMSwgMjEyLCA2NSwgMjI4LCAxNDIsIDEsIDE5MiwgMjI4LCAxNDIsIDEsIDIyNywgMTcwLCAyMTEsIAorICAgIDIyMywgMjI4LCAxNDIsIDEsIDIzNSwgNjcsIDIzNSwgMTQ3LCAyMjgsIDE0MiwgMSwgMjM1LCA2NywgMjUwLCAxNjUsIDIyOCwgCisgICAgMTQyLCAxLCAyMzUsIDY3LCAyMDUsIDIyOCwgMTQyLCAzOCwgMjE5LCAyNTMsIDEyNSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAKKyAgICAyMTksIDI1MywgMTIxLCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIxOSwgMjUzLCAyMjIsIDIzMSwgMjE2LCAzMSwgMjI4LCAKKyAgICAxNDIsIDM4LCAyMDAsIDI0OCwgNDYsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjAwLCAxMjUsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjAwLCAxMjEsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjAwLCAyMjIsIDIzMSwgMjE2LCAzMSwgMjI4LCAKKyAgICAxNDIsIDM4LCAyMjksIDE5OCwgNzksIDIyOCwgMTQyLCAzOCwgNTIsIDU5LCA0OCwgMjI4LCAxNDIsIDEyNSwgMTM4LCAyNTQsIAorICAgIDY1LCAyMjgsIDE0MiwgMTIxLCAxMzgsIDI1NCwgNjUsIDIyOCwgMTQyLCAxNiwgMjI2LCAxODgsIDI0OCwgNTgsIDIyOCwgCisgICAgMTQyLCAxNiwgMjQzLCA4NSwgMjI4LCAxNDIsIDI0OSwgMjI3LCAyMjgsIDE0MiwgMjQ1LCAzOSwgNzksIDIyOCwgMTQyLCAKKyAgICAyMzMsIDExNCwgMjIxLCAyNTQsIDEsIDI1NCwgMTg1LCAyMjEsIDI1NCwgMSwgMjUxLCAyMzYsIDIyMSwgMjU0LCAxLCAyNDMsIAorICAgIDExOSwgMjIxLCAyNTQsIDEsIDI0OCwgMjAyLCAyMjEsIDI1NCwgMSwgMjM1LCAxNTgsIDIyMSwgMjU0LCAxLCAyNTIsIDE5NywgCisgICAgMjIxLCAyNTQsIDEsIDIxMCwgODksIDIyMSwgMjU0LCAxLCAyMzUsIDE2NiwgMjIxLCAyNTQsIDEsIDIxNiwgNjgsIDIyMSwgCisgICAgMjU0LCAxLCAyMTAsIDE4MiwgMjIxLCAyNTQsIDEsIDIzNSwgMTUsIDIyMSwgMjU0LCAxLCAyMzMsIDEzNCwgMjIxLCAyNTQsIAorICAgIDEsIDIzMCwgMTk1LCAyMjEsIDI1NCwgMSwgMjI3LCAxOTgsIDIyMSwgMjU0LCAxLCAyMTksIDE1OCwgMjIxLCAyNTQsIDEsIAorICAgIDIzNiwgNiwgMjIxLCAyNTQsIDEsIDI0NCwgMTI5LCAyMjEsIDI1NCwgMSwgMjE1LCAxODIsIDIyMSwgMjU0LCAxLCAyMjQsIAorICAgIDEzLCAyMjEsIDI1NCwgMSwgMjIyLCAyMzIsIDIyMSwgMjU0LCAxLCAyMjAsIDg3LCAyMjEsIDI1NCwgMSwgMjE3LCAxMDEsIAorICAgIDIyMSwgMjU0LCAxNjQsIDIzNiwgNiwgMjIxLCAyNTQsIDE2NCwgMjM2LCA1LCAyMjEsIDI1NCwgMTY0LCAyMjYsIDI0NywgCisgICAgMjIxLCAyNTQsIDE2NCwgMjQ4LCAyMTUsIDIyMSwgMjU0LCA1OCwgMSwgMjQ1LCAxMTMsIDIxMCwgMTgyLCAyMjEsIDI1NCwgCisgICAgMTY0LCAyNDUsIDExMywgMjEwLCAxODIsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA3NiwgMjIxLCAyNTQsIDI1LCA1LCA3NiwgCisgICAgMjIxLCAyNTQsIDI1LCA1LCAyMjYsIDEyMiwgMjU1LCA4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDI1NSwgODIsIDIyMSwgCisgICAgMjU0LCAyNSwgNSwgMjU1LCA4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMjYsIDEyMiwgNjEsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCAKKyAgICA2MSwgMjIxLCAyNTQsIDI1LCA1LCA2MSwgMjIxLCAyNTQsIDU4LCAxLCAyMTksIDI1MywgNjEsIDIyMSwgMjU0LCAyNSwgNSwgCisgICAgMjE5LCAyNTMsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNjksIDIyMSwgMjU0LCAyNSwgNSwgNjksIDIyMSwgMjU0LCAKKyAgICA1OCwgMSwgNzQsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA3NCwgMjIxLCAyNTQsIDI1LCA1LCA3NCwgMjIxLCAyNTQsIDI1LCAKKyAgICA1LCA3OCwgMjIxLCAyNTQsIDI1LCA1LCAyMTgsIDQ2LCAyMjEsIDI1NCwgMTY0LCAyMjksIDk3LCAyMjEsIDI1NCwgMjI0LCAKKyAgICAxNDQsIDIyOSwgOTcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAyMjcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAxMjIsIAorICAgIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjUyLCAxMjIsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjUzLCAyMDksIDIyMSwgMjU0LCAKKyAgICAyMjQsIDE0NCwgMjIwLCAxMCwgMjIxLCAyNTQsIDI1NSwgMzAsIDc5LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIzMSwgNzMsIAorICAgIDIyNCwgNDgsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjEwLCAzMSwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMjQsIDQ4LCAyMjEsIAorICAgIDI1NCwgMjI0LCAxNDQsIDIxMCwgMTE0LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxNSwgOTAsIDIyMSwgMjU0LCAyMjQsIDE0NCwgCisgICAgMjU0LCAxNywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTksIDU1LCAyMzEsIDE1MCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIAorICAgIDEwOCwgMjMxLCAxODcsIDEsIDI0MiwgMzEsIDIzMSwgMTg3LCAxLCAyNTUsIDM0LCAyMzEsIDE4NywgMSwgMjU0LCAyMjUsIAorICAgIDIzMSwgMTg3LCAxLCAyNTUsIDgsIDIzMSwgMTg3LCAxLCAyNTQsIDIxOCwgMjMxLCAxODcsIDEsIDIxNCwgMTI0LCAyMzEsIAorICAgIDE4NywgMSwgMjUzLCAxNjgsIDIzMSwgMTg3LCAxLCAyMzUsIDE2NiwgMjMxLCAxODcsIDEsIDI1MywgMjA2LCAyMzEsIDE4NywgCisgICAgMSwgMjU0LCAxOTAsIDIzMSwgMTg3LCAxLCAyNTQsIDE5NSwgMjMxLCAxODcsIDEsIDI1NCwgMTg3LCAyMzEsIDE4NywgMSwgCisgICAgMjU0LCAxNDQsIDIzMSwgMTg3LCAxLCAyNTQsIDEzMSwgMjMxLCAxODcsIDEsIDI1MywgMjQ1LCAyMzEsIDE4NywgMSwgMjM2LCAKKyAgICA2LCAyMzEsIDE4NywgMSwgMjU0LCA4MCwgMjMxLCAxODcsIDEsIDI1MywgMjE2LCAyMzEsIDE4NywgMSwgMjU0LCA1MywgCisgICAgMjMxLCAxODcsIDEsIDI1NCwgNDksIDIzMSwgMTg3LCAxLCAyNTMsIDIzOSwgMjMxLCAxODcsIDEsIDI1MywgMjE0LCAyMzEsIAorICAgIDE4NywgMSwgMjQ2LCA2MywgMjMxLCAxODcsIDEsIDIzNSwgOCwgMjMxLCAxODcsIDEsIDI1NCwgMjA1LCAyMzEsIDE4NywgCisgICAgMjU0LCAyMzEsIDc5LCAyMzEsIDE4NywgMjEzLCAxMzYsIDc5LCAyMzEsIDE4NywgMjQzLCA2MCwgNzksIDIzMSwgMTg3LCAKKyAgICAyMjQsIDE0MywgOSwgMSwgMjUyLCA2MywgMiwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAxNTEsIDIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjE3LCA4MiwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNDQsIDE1MSwgMiwgNTksIDI1MiwgNTEsIDIyLCAxMzQsIAorICAgIDE3MCwgNDgsIDksIDEsIDIyNCwgODUsIDIsIDU5LCA1MSwgOSwgMSwgMjMzLCAxMDksIDIsIDUyLCAxMzAsIDksIDEsIDY2LCAKKyAgICAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDc3LCAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDE4MiwgNDgsIDksIDEsIDc3LCAKKyAgICAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMjMyLCAxMjksIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDU5LCAyMTEsIDIzMSwgOSwgMSwgMjIyLCAyMDMsIDIxMSwgNDMsIDksIDI0OSwgMTA3LCAyNDQsIDE3MywgOSwgCisgICAgMjQ5LCAxMDcsIDI0OCwgMTkyLCA5LCAyNDksIDEwNywgMjM0LCAyMTEsIDksIDI0OSwgMTA3LCAyNDQsIDE3MSwgOSwgMjQ5LCAKKyAgICAxMDcsIDI0OCwgMTkwLCA5LCAyNDksIDEwNywgMjM0LCAyMDksIDksIDEzOCwgMTIzLCA1OSwgNDgsIDksIDEzOCwgMTEzLCAKKyAgICAxNzAsIDQ4LCA5LCAxMzgsIDIzMiwgMTMwLCA0OCwgOSwgMTM4LCAxMjMsIDU5LCA1MSwgOSwgMTM4LCAxMTMsIDE3MCwgNTEsIAorICAgIDksIDEzOCwgMjMyLCAxMzAsIDUxLCA5LCAyMDQsIDI0NCwgMTcxLCA5LCAyMDQsIDI0OCwgMTkwLCA5LCAyMDQsIDIzNCwgCisgICAgMjA5LCA5LCA0LCAxMjUsIDIxMiwgMzAsIDksIDI0NCwgMTc0LCAyLCAyMjIsIDIzNiwgOSwgMjQ0LCAxNzQsIDIsIDU5LCAKKyAgICA0OCwgOSwgMjM0LCAyMTIsIDIsIDU5LCA1MSwgOSwgNDMsIDI1NCwgMiwgNDgsIDksIDQ0LCAyNTQsIDIsIDQ4LCA5LCA0MywgCisgICAgMjU0LCAyLCA1MSwgOSwgNDQsIDI1NCwgMiwgNTEsIDksIDUyLCA0NCwgMjU0LCAyLCA0OCwgOSwgNTIsIDQ0LCAyNTQsIDIsIAorICAgIDcyLCAyLCAyNDcsIDEyOCwgOSwgNDQsIDI1NCwgMiwgNzIsIDIsIDI0NywgMTI4LCA5LCAyNDgsIDE5MywgMiwgMjQ3LCAKKyAgICAxMjgsIDg0LCA1LCAyMzUsIDIwMCwgMjUxLCA3LCA4NCwgNSwgMjUxLCA3LCA4NCwgNSwgMjU0LCA4MywgODQsIDUsIDIxMywgCisgICAgMTQ3LCA4NCwgMSwgMjE5LCAyNTMsIDYxLCA4NCwgMSwgNjEsIDg0LCAxLCAyNTUsIDgyLCA4NCwgMSwgNzQsIDg0LCAxLCAKKyAgICAyMzYsIDQwLCA4NCwgMSwgNjksIDg0LCAxLCAyMTQsIDExOCwgODQsIDEsIDE0OSwgMTUzLCA4NCwgMSwgMTQ5LCAxNTYsIAorICAgIDg0LCAxLCAyNTEsIDEwLCA3NiwgODQsIDEsIDIxOSwgMjUzLCA3NiwgODQsIDEsIDc2LCA4NCwgMSwgMjU0LCAyMTAsIDg0LCAKKyAgICAxLCAyNTEsIDEwLCA3OCwgODQsIDEsIDIxOSwgMjUzLCA3OCwgODQsIDEsIDc4LCA4NCwgMSwgMjUzLCAyMDAsIDg0LCAxLCAKKyAgICAxNzYsIDg0LCAxLCAyMzQsIDEzOCwgODQsIDEsIDI0MywgMTQyLCA4NCwgMSwgMjQzLCAwLCA4NCwgMSwgMjI5LCA4MiwgODQsIAorICAgIDEsIDI1MSwgNDEsIDg0LCAxLCAyNTAsIDE2NSwgODQsIDEsIDIzNSwgMTQ3LCA4NCwgMSwgMjM1LCAxMjAsIDg0LCAxLCAKKyAgICAyMjcsIDE2OSwgODQsIDEsIDIxNSwgMTU3LCA4NCwgMSwgMjE1LCAxNDUsIDg0LCAxLCAyNDgsIDE0MywgODQsIDEsIDI0OCwgCisgICAgMTI3LCA4NCwgMSwgMjI4LCAxMTUsIDg0LCAxLCAyMTcsIDEwNiwgODQsIDEsIDIxNiwgMjA5LCA4NCwgMSwgMjQ4LCAyMjksIAorICAgIDg0LCAxLCAyNDgsIDMzLCA4NCwgMSwgMTk4LCA4NCwgMSwgMjI4LCA5NywgODQsIDEsIDE5MSwgODQsIDEsIDIyNSwgMTUwLCAKKyAgICA4NCwgMSwgMjUyLCAxOTksIDg0LCAxLCAyNTIsIDI2LCA4NCwgMSwgMTg2LCA4NCwgMSwgMTkyLCA4NCwgMSwgMjA1LCA4NCwgCisgICAgMSwgMjIyLCAxODEsIDg0LCAxLCAyMzMsIDE0MSwgODQsIDEsIDIzMiwgMTkwLCA4NCwgMSwgMjMyLCAxODEsIDg0LCAxLCAKKyAgICAyMTQsIDI3LCA4NCwgMSwgMjIwLCAxMDQsIDg0LCAxLCAyMTgsIDIyNSwgODQsIDEsIDIwNiwgODQsIDEsIDE2MiwgODQsIAorICAgIDI1LCA1LCAyMjYsIDIzOCwgODQsIDI1LCA1LCAyMjYsIDE4NSwgODQsIDUsIDIyNywgMjA5LCA4NCwgNSwgMjUzLCAxODMsIAorICAgIDg0LCAyNSwgNSwgMjU1LCA4MiwgODQsIDI1LCA1LCA3NCwgODQsIDI1LCA1LCAyMzYsIDQwLCA4NCwgMjUsIDUsIDY5LCA4NCwgCisgICAgMjUsIDUsIDIxNCwgMTE4LCA4NCwgMjUsIDUsIDE0OSwgMTUzLCA4NCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDg0LCAyNSwgCisgICAgNSwgMjUxLCAxMCwgNzYsIDg0LCAyNSwgNSwgMjE5LCAyNTMsIDc2LCA4NCwgMjUsIDUsIDc2LCA4NCwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCA4NCwgMjUsIDUsIDI1MSwgMTAsIDc4LCA4NCwgMjUsIDUsIDIxOSwgMjUzLCA3OCwgODQsIDI1LCA1LCA3OCwgODQsIAorICAgIDI1LCA1LCAyNTMsIDIwMCwgODQsIDUsIDIxMywgMTUyLCA4NCwgMjUsIDUsIDIyNCwgMTg4LCA3NiwgODQsIDI1LCA1LCAKKyAgICAyNTMsIDE3OSwgODQsIDIyNiwgMjA4LCA4NCwgMjE4LCAxMTMsIDUsIDIxNCwgMjE2LCA4NCwgMjE4LCAxMTMsIDUsIDI1NCwgCisgICAgODUsIDg0LCAyNDIsIDE0NCwgMjU1LCAyMywgODQsIDI1NSwgMTIsIDI1NSwgMjMsIDg0LCAyNSwgNSwgMjUxLCAxMCwgMjAwLCAKKyAgICA3NiwgODQsIDI1LCA1LCAyMTQsIDIxNCwgODQsIDI1LCA1LCAyMTQsIDExNywgODQsIDEsIDIyNCwgOTEsIDg0LCAxLCAyMzQsIAorICAgIDEyMSwgODQsIDEsIDI0MiwgMjMzLCA4NCwgMSwgMjEwLCAxMTYsIDg0LCAxLCAyNDgsIDEzMiwgODQsIDEsIDIyMywgNDIsIAorICAgIDg0LCAxLCAyNDQsIDIwNCwgODQsIDEsIDIxMCwgMTY4LCA4NCwgMSwgMTQ5LCAyMjIsIDE4MiwgODQsIDEsIDE0OSwgMjMyLCAKKyAgICAxOTEsIDg0LCAyNSwgNSwgMTQ5LCAxNTYsIDg0LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgODQsIDI0OCwgMTg2LCA4NCwgNTIsIAorICAgIDI0OCwgMTg2LCA4NCwgMjEsIDIxMCwgODYsIDg0LCAyMSwgMTExLCA4NCwgMjEsIDEwNSwgODQsIDIxLCAxNTgsIDg0LCAyMSwgCisgICAgMTYxLCA4NCwgMjEsIDE5MCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMTk5LCA4NCwgMjEsIDE5NiwgODQsIDIxLCAyMDEsIDg0LCAKKyAgICAyNTUsIDMwLCA1MCwgODQsIDUsIDEyNSwgMjE5LCAxOSwgMjQ3LCAxMjgsIDg0LCAxLCAyNTEsIDEwLCA2MSwgODQsIDEsIAorICAgIDIyNiwgMjM4LCA4NCwgMSwgMjI2LCAxODUsIDg0LCAxLCAyNTMsIDE3OSwgODQsIDEsIDIxNCwgMjE0LCA4NCwgMSwgMjE0LCAKKyAgICAxMTcsIDg0LCAxLCAyMTAsIDgyLCA4NCwgMSwgMTE0LCAxOTIsIDg0LCAxLCAyNDMsIDM2LCA4NCwgMSwgMjM1LCAxMDIsIAorICAgIDg0LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDg0LCAxLCAyNDgsIDEzMywgODQsIDEsIDI1MiwgMTE5LCAxNDYsIDUsIDI1MSwgCisgICAgNywgMTQ2LCA1LCAyNTQsIDgzLCAxNDYsIDUsIDIxMywgMTQ3LCAxNDYsIDEsIDYxLCAxNDYsIDEsIDI1NSwgODIsIDE0NiwgCisgICAgMSwgNzQsIDE0NiwgMSwgMjM2LCA0MCwgMTQ2LCAxLCA2OSwgMTQ2LCAxLCAyMTQsIDExOCwgMTQ2LCAxLCAxNDksIDE1MywgCisgICAgMTQ2LCAxLCAxNDksIDE1NiwgMTQ2LCAxLCA3NiwgMTQ2LCAxLCAyNTQsIDIxMCwgMTQ2LCAxLCA3OCwgMTQ2LCAxLCAyNTMsIAorICAgIDIwMCwgMTQ2LCAxLCAxNzYsIDE0NiwgMSwgMjM0LCAxMzgsIDE0NiwgMSwgMjQzLCAxNDIsIDE0NiwgMSwgMjQzLCAwLCAKKyAgICAxNDYsIDEsIDIyOSwgODIsIDE0NiwgMSwgMjUxLCA0MSwgMTQ2LCAxLCAyNTAsIDE2NSwgMTQ2LCAxLCAyMzUsIDE0NywgCisgICAgMTQ2LCAxLCAyMzUsIDEyMCwgMTQ2LCAxLCAyMjcsIDE2OSwgMTQ2LCAxLCAyMTUsIDE1NywgMTQ2LCAxLCAyMTUsIDE0NSwgCisgICAgMTQ2LCAxLCAyNDgsIDE0MywgMTQ2LCAxLCAyNDgsIDEyNywgMTQ2LCAxLCAyMjgsIDExNSwgMTQ2LCAxLCAyMTcsIDEwNiwgCisgICAgMTQ2LCAxLCAyMTYsIDIwOSwgMTQ2LCAxLCAyNDgsIDIyOSwgMTQ2LCAxLCAyNDgsIDMzLCAxNDYsIDEsIDE5OCwgMTQ2LCAxLCAKKyAgICAxOTEsIDE0NiwgMSwgMjI1LCAxNTAsIDE0NiwgMSwgMjUyLCAxOTksIDE0NiwgMSwgMjUyLCAyNiwgMTQ2LCAxLCAxODYsIAorICAgIDE0NiwgMSwgMTkyLCAxNDYsIDEsIDIwNSwgMTQ2LCAxLCAyMzMsIDE0MSwgMTQ2LCAxLCAyMjAsIDEwNCwgMTQ2LCAxLCAKKyAgICAyMTgsIDIyNSwgMTQ2LCAxLCAyMDYsIDE0NiwgMSwgMTYyLCAxNDYsIDUsIDIyNywgMjA5LCAxNDYsIDUsIDI1MywgMTgzLCAKKyAgICAxNDYsIDI1LCA1LCAyNTUsIDgyLCAxNDYsIDI1LCA1LCA3NCwgMTQ2LCAyNSwgNSwgMjM2LCA0MCwgMTQ2LCAyNSwgNSwgNjksIAorICAgIDE0NiwgMjUsIDUsIDIxNCwgMTE4LCAxNDYsIDI1LCA1LCAxNDksIDE1MywgMTQ2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTQ2LCAyNSwgNSwgNzYsIDE0NiwgMjUsIDUsIDI1NCwgMjEwLCAxNDYsIDI1LCA1LCA3OCwgMTQ2LCAyNSwgNSwgMjUzLCAKKyAgICAyMDAsIDE0NiwgNSwgMjEzLCAxNTIsIDE0NiwgMSwgMjM0LCAxMzAsIDIxNywgMTA2LCAxNDYsIDI1MywgMjAxLCAyMzMsIAorICAgIDI5LCA3OSwgMTQ2LCAxLCAyMjIsIDE4MSwgMTQ2LCAxLCAyMjMsIDQyLCAxNDYsIDEsIDIxMCwgMTY4LCAxNDYsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE0NiwgMSwgMTQ5LCAyMzIsIDE5MSwgMTQ2LCAyNSwgNSwgMTQ5LCAxNTYsIDE0NiwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE0NiwgMjEsIDIxMCwgODYsIDE0NiwgMjEsIDExMSwgMTQ2LCAyMSwgMTA1LCAxNDYsIDIxLCAxNTgsIAorICAgIDE0NiwgMjEsIDE2MSwgMTQ2LCAyMSwgMTkwLCAxNDYsIDIxLCAxOTUsIDE0NiwgMjEsIDE5OSwgMTQ2LCAyMSwgMTk2LCAKKyAgICAxNDYsIDIxLCAyMDEsIDE0NiwgMSwgMjIzLCAxOTEsIDIsIDIzMCwgMjI5LCAyNDgsIDYsIDE0NiwgMSwgMjIzLCAxOTEsIDIsIAorICAgIDIzMiwgMTE0LCAyNDgsIDYsIDE0NiwgMjIyLCAxMjAsIDc5LCAxNDYsIDIyMiwgMTIwLCA1MCwgMTQ2LCAyNDksIDEwNiwgCisgICAgMjI3LCAyMDEsIDExMSwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIDEwNSwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIAorICAgIDE1OCwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIDE2MSwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIDEyMywgMjMzLCAyMiwgCisgICAgMjE2LCAyMDIsIDIxNiwgMTk3LCAyNDgsIDU2LCAxNDYsIDI0OSwgMTA2LCAyNDgsIDU3LCAyMTksIDEyMSwgMTQ2LCAyMzUsIAorICAgIDE2NywgMTQ2LCAyNDMsIDExMCwgNzksIDE4NSwgNSwgMjU1LCA3LCAyNTEsIDI1MSwgMTg1LCA1LCAyNTEsIDI1MSwgMTg1LCAKKyAgICA1LCAyMTMsIDE0NywgMTg1LCAxLCA2MSwgMTg1LCAxLCAyNTUsIDgyLCAxODUsIDEsIDc0LCAxODUsIDEsIDIzNiwgNDAsIAorICAgIDE4NSwgMSwgNjksIDE4NSwgMSwgMjE0LCAxMTgsIDE4NSwgMSwgMjQ1LCAyMTcsIDE4NSwgMSwgMjU0LCAyMTAsIDE4NSwgMSwgCisgICAgMjI2LCAxODcsIDE4NSwgMSwgMjUzLCAyMDAsIDE4NSwgMSwgMTc2LCAxODUsIDEsIDIzNCwgMTM4LCAxODUsIDEsIDI0MywgCisgICAgMTQyLCAxODUsIDEsIDI0MywgMCwgMTg1LCAxLCAyMjksIDgyLCAxODUsIDEsIDI1MSwgNDEsIDE4NSwgMSwgMjUwLCAxNjUsIAorICAgIDE4NSwgMSwgMjM1LCAxNDcsIDE4NSwgMSwgMjM1LCAxMjAsIDE4NSwgMSwgMjI3LCAxNjksIDE4NSwgMSwgMjE1LCAxNTcsIAorICAgIDE4NSwgMSwgMjE1LCAxNDUsIDE4NSwgMSwgMjQ4LCAxNDMsIDE4NSwgMSwgMjQ4LCAxMjcsIDE4NSwgMSwgMjI4LCAxMTUsIAorICAgIDE4NSwgMSwgMjE3LCAxMDYsIDE4NSwgMSwgMjE2LCAyMDksIDE4NSwgMSwgMjQ4LCAyMjksIDE4NSwgMSwgMjQ4LCAzMywgCisgICAgMTg1LCAxLCAxOTgsIDE4NSwgMSwgMTkxLCAxODUsIDEsIDIyNSwgMTUwLCAxODUsIDEsIDI1MiwgMTk5LCAxODUsIDEsIAorICAgIDI1MiwgMjYsIDE4NSwgMSwgMTg2LCAxODUsIDEsIDE5MiwgMTg1LCAxLCAyMDUsIDE4NSwgMSwgMjMzLCAxNDEsIDE4NSwgMSwgCisgICAgMjMyLCAxOTAsIDE4NSwgMSwgMjE0LCAyNywgMTg1LCAxLCAyMjAsIDEwNCwgMTg1LCAxLCAyMDYsIDE4NSwgMSwgMTYyLCAKKyAgICAxODUsIDUsIDIyNywgMjA5LCAxODUsIDI1LCA1LCAyNTUsIDgyLCAxODUsIDI1LCA1LCA3NCwgMTg1LCAyNSwgNSwgMjM2LCAKKyAgICA0MCwgMTg1LCAyNSwgNSwgNjksIDE4NSwgMjUsIDUsIDIxNCwgMTE4LCAxODUsIDI1LCA1LCAyNDUsIDIxNywgMTg1LCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDE4NSwgMjUsIDUsIDIyNiwgMTg3LCAxODUsIDI1LCA1LCAyNTMsIDIwMCwgMTg1LCA1LCAyMTMsIAorICAgIDE1MiwgMTg1LCA1LCAyMTQsIDIxOCwgMTg1LCAxLCAyMzQsIDEyMSwgMTg1LCAxLCAyNDIsIDIzMywgMTg1LCAxLCAyMTAsIAorICAgIDExNiwgMTg1LCAxLCAyMjIsIDE4MSwgMTg1LCAxLCAyNDQsIDIwNCwgMTg1LCAyMSwgMjEwLCA4NiwgMTg1LCAyMSwgMTExLCAKKyAgICAxODUsIDIxLCAxMDUsIDE4NSwgMjEsIDE1OCwgMTg1LCAyMSwgMTYxLCAxODUsIDIxLCAxOTAsIDE4NSwgMjEsIDE5NSwgCisgICAgMTg1LCAyMSwgMTk5LCAxODUsIDIxLCAxOTYsIDE4NSwgMjEsIDIwMSwgMTg1LCAyMTYsIDc1LCAxODUsIDI1NSwgNiwgMTg1LCAKKyAgICAyMzUsIDE4NSwgMTg1LCAyMTQsIDE0NiwgMTg1LCAyNDUsIDE4OSwgMjI2LCAxOTIsIDE4NSwgNSwgMjExLCA3OCwgMTcxLCAKKyAgICA1LCAyNTEsIDcsIDE3MSwgNSwgMjU0LCA4MywgMTcxLCA1LCAyMTMsIDE0NywgMTcxLCAxLCA2MSwgMTcxLCAxLCAyNTUsIAorICAgIDgyLCAxNzEsIDEsIDc0LCAxNzEsIDEsIDIzNiwgNDAsIDE3MSwgMSwgNjksIDE3MSwgMSwgMjE0LCAxMTgsIDE3MSwgMSwgCisgICAgMTQ5LCAxNTMsIDE3MSwgMSwgMTQ5LCAxNTYsIDE3MSwgMjUsIDI1MSwgMTAsIDc2LCAxNzEsIDEsIDc2LCAxNzEsIDEsIAorICAgIDI1NCwgMjEwLCAxNzEsIDI1LCAyNTEsIDEwLCA3OCwgMTcxLCAxLCA3OCwgMTcxLCAxLCAyNTMsIDIwMCwgMTcxLCAxLCAKKyAgICAxNzYsIDE3MSwgMSwgMjM0LCAxMzgsIDE3MSwgMSwgMjQzLCAxNDIsIDE3MSwgMSwgMjQzLCAwLCAxNzEsIDEsIDIyOSwgODIsIAorICAgIDE3MSwgMSwgMjUxLCA0MSwgMTcxLCAxLCAyNTAsIDE2NSwgMTcxLCAxLCAyMzUsIDE0NywgMTcxLCAxLCAyMzUsIDEyMCwgCisgICAgMTcxLCAxLCAyMjcsIDE2OSwgMTcxLCAxLCAyMTUsIDE1NywgMTcxLCAxLCAyMTUsIDE0NSwgMTcxLCAxLCAyNDgsIDE0MywgCisgICAgMTcxLCAxLCAyNDgsIDEyNywgMTcxLCAxLCAyMjgsIDExNSwgMTcxLCAxLCAyMTcsIDEwNiwgMTcxLCAxLCAyMTYsIDIwOSwgCisgICAgMTcxLCAxLCAyNDgsIDIyOSwgMTcxLCAxLCAyNDgsIDMzLCAxNzEsIDEsIDE5OCwgMTcxLCAxLCAxOTEsIDE3MSwgMSwgMjI1LCAKKyAgICAxNTAsIDE3MSwgMSwgMjUyLCAxOTksIDE3MSwgMSwgMjUyLCAyNiwgMTcxLCAxLCAxODYsIDE3MSwgMSwgMTkyLCAxNzEsIDEsIAorICAgIDIwNSwgMTcxLCAxLCAyMzMsIDE0MSwgMTcxLCAxLCAyMzIsIDE5MCwgMTcxLCAxLCAyMTQsIDI3LCAxNzEsIDEsIDIyMCwgCisgICAgMTA0LCAxNzEsIDEsIDIxOCwgMjI1LCAxNzEsIDEsIDIwNiwgMTcxLCAxLCAxNjIsIDE3MSwgNSwgMjI3LCAyMDksIDE3MSwgCisgICAgNSwgMjUzLCAxODMsIDE3MSwgMjUsIDUsIDI1NSwgODIsIDE3MSwgMjUsIDUsIDc0LCAxNzEsIDI1LCA1LCAyMzYsIDQwLCAKKyAgICAxNzEsIDI1LCA1LCA2OSwgMTcxLCAyNSwgNSwgMjE0LCAxMTgsIDE3MSwgMjUsIDUsIDE0OSwgMTUzLCAxNzEsIDI1LCA1LCAKKyAgICAxNDksIDIyMiwgMTgyLCAxNzEsIDI1LCA1LCAyNTEsIDEwLCA3NiwgMTcxLCAyNSwgNSwgNzYsIDE3MSwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCAxNzEsIDI1LCA1LCAyNTEsIDEwLCA3OCwgMTcxLCAyNSwgNSwgNzgsIDE3MSwgMjUsIDUsIDI1MywgMjAwLCAxNzEsIAorICAgIDUsIDIxMywgMTUyLCAxNzEsIDIyNiwgMjA4LCAxNzEsIDEsIDE0OSwgMjIyLCAxODIsIDE3MSwgMSwgMTQ5LCAyMzIsIDE5MSwgCisgICAgMTcxLCAyNSwgNSwgMTQ5LCAxNTYsIDE3MSwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3MSwgMjEsIDIxMCwgODYsIDE3MSwgCisgICAgMjEsIDExMSwgMTcxLCAyMSwgMTA1LCAxNzEsIDIxLCAxNTgsIDE3MSwgMjEsIDE2MSwgMTcxLCAyMSwgMTkwLCAxNzEsIDIxLCAKKyAgICAxOTUsIDE3MSwgMjEsIDE5OSwgMTcxLCAyMSwgMTk2LCAxNzEsIDIxLCAyMDEsIDE3MSwgMjU1LCAzMCwgNTAsIDE3MSwgCisgICAgMjIyLCAxMjAsIDUwLCAxNTcsIDUsIDI1MSwgNywgMTU3LCA1LCAyNTQsIDgzLCAxNTcsIDUsIDIxMywgMTQ3LCAxNTcsIDEsIAorICAgIDYxLCAxNTcsIDEsIDI1NSwgODIsIDE1NywgMSwgNzQsIDE1NywgMSwgMjM2LCA0MCwgMTU3LCAxLCA2OSwgMTU3LCAxLCAKKyAgICAyMTQsIDExOCwgMTU3LCAxLCAxNDksIDE1MywgMTU3LCAxLCAxNDksIDE1NiwgMTU3LCAxLCA3NiwgMTU3LCAxLCAyNTQsIAorICAgIDIxMCwgMTU3LCAxLCA3OCwgMTU3LCAxLCAyNTMsIDIwMCwgMTU3LCAxLCAxNzYsIDE1NywgMSwgMjM0LCAxMzgsIDE1NywgMSwgCisgICAgMjQzLCAxNDIsIDE1NywgMSwgMjQzLCAwLCAxNTcsIDEsIDIyOSwgODIsIDE1NywgMSwgMjUxLCA0MSwgMTU3LCAxLCAyNTAsIAorICAgIDE2NSwgMTU3LCAxLCAyMzUsIDE0NywgMTU3LCAxLCAyMzUsIDEyMCwgMTU3LCAxLCAyMjcsIDE2OSwgMTU3LCAxLCAyMTUsIAorICAgIDE1NywgMTU3LCAxLCAyMTUsIDE0NSwgMTU3LCAxLCAyNDgsIDE0MywgMTU3LCAxLCAyNDgsIDEyNywgMTU3LCAxLCAyMjgsIAorICAgIDExNSwgMTU3LCAxLCAyMTcsIDEwNiwgMTU3LCAxLCAyMTYsIDIwOSwgMTU3LCAxLCAyNDgsIDIyOSwgMTU3LCAxLCAyNDgsIAorICAgIDMzLCAxNTcsIDEsIDE5OCwgMTU3LCAxLCAxOTEsIDE1NywgMSwgMjI1LCAxNTAsIDE1NywgMSwgMjUyLCAxOTksIDE1NywgMSwgCisgICAgMjUyLCAyNiwgMTU3LCAxLCAxODYsIDE1NywgMSwgMTkyLCAxNTcsIDEsIDIwNSwgMTU3LCAxLCAyMzMsIDE0MSwgMTU3LCAxLCAKKyAgICAyMzIsIDE5MCwgMTU3LCAxLCAyMTQsIDI3LCAxNTcsIDEsIDIyMCwgMTA0LCAxNTcsIDEsIDIxOCwgMjI1LCAxNTcsIDEsIAorICAgIDIwNiwgMTU3LCAxLCAxNjIsIDE1NywgNSwgMjI3LCAyMDksIDE1NywgNSwgMjUzLCAxODMsIDE1NywgMjUsIDUsIDI1NSwgCisgICAgODIsIDE1NywgMjUsIDUsIDc0LCAxNTcsIDI1LCA1LCAyMzYsIDQwLCAxNTcsIDI1LCA1LCA2OSwgMTU3LCAyNSwgNSwgMjE0LCAKKyAgICAxMTgsIDE1NywgMjUsIDUsIDE0OSwgMTUzLCAxNTcsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxNTcsIDI1LCA1LCA3NiwgCisgICAgMTU3LCAyNSwgNSwgMjU0LCAyMTAsIDE1NywgMjUsIDUsIDc4LCAxNTcsIDI1LCA1LCAyNTMsIDIwMCwgMTU3LCA1LCAyMTMsIAorICAgIDE1MiwgMTU3LCAyNTQsIDIxMSwgMjMzLCAyOSwgNzksIDE1NywgMjUzLCAyMDEsIDIzMywgMjksIDc5LCAxNTcsIDEsIDIyMiwgCisgICAgMTgxLCAxNTcsIDEsIDIyMywgNDIsIDE1NywgMSwgMjEwLCAxNjgsIDE1NywgMSwgMTQ5LCAyMjIsIDE4MiwgMTU3LCAxLCAKKyAgICAxNDksIDIzMiwgMTkxLCAxNTcsIDI1LCA1LCAxNDksIDE1NiwgMTU3LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTU3LCAyMSwgCisgICAgMjEwLCA4NiwgMTU3LCAyMSwgMTExLCAxNTcsIDIxLCAxMDUsIDE1NywgMjEsIDE1OCwgMTU3LCAyMSwgMTYxLCAxNTcsIDIxLCAKKyAgICAxOTAsIDE1NywgMjEsIDE5NSwgMTU3LCAyMSwgMTk5LCAxNTcsIDIxLCAxOTYsIDE1NywgMjEsIDIwMSwgMTU3LCAyMzUsIAorICAgIDE2NywgMTU3LCAxLCAyMTIsIDY1LCAxNTcsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMTU3LCAyNDQsIDEwLCAxMjMsIDI0MiwgCisgICAgMzQsIDE1NywgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAxNTcsIDI0NCwgMTAsIDEyMywgMjE5LCAxMTksIDE1NywgMjQ0LCAKKyAgICAxMCwgMTIzLCAyNDUsIDE5NiwgMTU3LCAyNDQsIDEwLCAxMzQsIDIxOSwgMTE4LCAzNiwgNSwgMjU0LCA4MywgMzYsIDUsIAorICAgIDIxMywgMTQ3LCAzNiwgMSwgNjEsIDM2LCAxLCAyNTUsIDgyLCAzNiwgMSwgNzQsIDM2LCAxLCAyMzYsIDQwLCAzNiwgMSwgCisgICAgNjksIDM2LCAxLCAyMTQsIDExOCwgMzYsIDEsIDc2LCAzNiwgMSwgMjQ1LCAyMTcsIDM2LCAxLCAyNTQsIDIxMCwgMzYsIDEsIAorICAgIDc4LCAzNiwgMSwgMjI2LCAxODcsIDM2LCAxLCAyNTMsIDIwMCwgMzYsIDEsIDE3NiwgMzYsIDEsIDIyOSwgODIsIDM2LCAxLCAKKyAgICAyNTEsIDQxLCAzNiwgMSwgMjM1LCAxNDcsIDM2LCAxLCAyMjcsIDE2OSwgMzYsIDEsIDIxNSwgMTU3LCAzNiwgMSwgMjI4LCAKKyAgICAxMTUsIDM2LCAxLCAyMTcsIDEwNiwgMzYsIDEsIDE5OCwgMzYsIDEsIDIyOCwgOTcsIDM2LCAxLCAxOTEsIDM2LCAxLCAxODYsIAorICAgIDM2LCAxLCAxOTIsIDM2LCAxLCAyMDUsIDM2LCAxLCAyMjIsIDE4MSwgMzYsIDEsIDIzMywgMTQxLCAzNiwgMSwgMjMyLCAKKyAgICAxOTAsIDM2LCAxLCAyMzIsIDE4MSwgMzYsIDEsIDIxNCwgMjcsIDM2LCAxLCAyMjAsIDEwNCwgMzYsIDEsIDIxOCwgMjI1LCAKKyAgICAzNiwgMSwgMjA2LCAzNiwgMSwgMTYyLCAzNiwgMjUsIDUsIDI1NSwgODIsIDM2LCAyNSwgNSwgNzQsIDM2LCAyNSwgNSwgCisgICAgMjM2LCA0MCwgMzYsIDI1LCA1LCA2OSwgMzYsIDI1LCA1LCAyMTQsIDExOCwgMzYsIDI1LCA1LCA3NiwgMzYsIDI1LCA1LCAKKyAgICAyNDUsIDIxNywgMzYsIDI1LCA1LCAyNTQsIDIxMCwgMzYsIDI1LCA1LCA3OCwgMzYsIDI1LCA1LCAyMjYsIDE4NywgMzYsIAorICAgIDI1LCA1LCAyNTMsIDIwMCwgMzYsIDUsIDIxMywgMTUyLCAzNiwgMjI2LCAyMDgsIDM2LCAyNTMsIDIwMSwgMjMzLCAyOSwgCisgICAgNzksIDM2LCAyMSwgMjEwLCA4NiwgMzYsIDIxLCAxMTEsIDM2LCAyMSwgMTA1LCAzNiwgMjEsIDE1OCwgMzYsIDIxLCAxNjEsIAorICAgIDM2LCAyMSwgMTkwLCAzNiwgMjEsIDE5NSwgMzYsIDIxLCAxOTksIDM2LCAyMSwgMTk2LCAzNiwgMjEsIDIwMSwgMzYsIDU0LCAKKyAgICAyMTYsIDI0OCwgMzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAzNiwgNTQsIDEyMywgMjE2LCAxNDgsIDM2LCAyNDgsIDE1NCwgNTAsIAorICAgIDM2LCAyMzAsIDE0MCwgNTAsIDM2LCAyMTEsIDQ1LCA1MCwgMzYsIDI0OCwgOTUsIDUwLCAzNiwgMjQ5LCAxNDcsIDUwLCAzNiwgCisgICAgMjUzLCAyNDYsIDcyLCA1MCwgMzYsIDIyMiwgMTIwLCA1MCwgMzYsIDU0LCA1MCwgMTQ4LCA1LCAyNTEsIDcsIDE0OCwgNSwgCisgICAgMjU0LCA4MywgMTQ4LCA1LCAyMTMsIDE0NywgMTQ4LCAxLCA2MSwgMTQ4LCAxLCAyNTUsIDgyLCAxNDgsIDEsIDc0LCAxNDgsIAorICAgIDEsIDIzNiwgNDAsIDE0OCwgMSwgNjksIDE0OCwgMSwgMjE0LCAxMTgsIDE0OCwgMSwgMTQ5LCAxNTMsIDE0OCwgMSwgMTQ5LCAKKyAgICAxNTYsIDE0OCwgMSwgNzYsIDE0OCwgMSwgMjQ1LCAyMTcsIDE0OCwgMSwgMjU0LCAyMTAsIDE0OCwgMSwgNzgsIDE0OCwgMSwgCisgICAgMjI2LCAxODcsIDE0OCwgMSwgMjUzLCAyMDAsIDE0OCwgMSwgMTc2LCAxNDgsIDEsIDIzNCwgMTM4LCAxNDgsIDEsIDI0MywgCisgICAgMTQyLCAxNDgsIDEsIDI0MywgMCwgMTQ4LCAxLCAyMjksIDgyLCAxNDgsIDEsIDI1MSwgNDEsIDE0OCwgMSwgMjUwLCAxNjUsIAorICAgIDE0OCwgMSwgMjM1LCAxNDcsIDE0OCwgMSwgMjM1LCAxMjAsIDE0OCwgMSwgMjI3LCAxNjksIDE0OCwgMSwgMjE1LCAxNTcsIAorICAgIDE0OCwgMSwgMjE1LCAxNDUsIDE0OCwgMSwgMjQ4LCAxNDMsIDE0OCwgMSwgMjQ4LCAxMjcsIDE0OCwgMSwgMjI4LCAxMTUsIAorICAgIDE0OCwgMSwgMjE3LCAxMDYsIDE0OCwgMSwgMjE2LCAyMDksIDE0OCwgMSwgMjQ4LCAyMjksIDE0OCwgMSwgMjQ4LCAzMywgCisgICAgMTQ4LCAxLCAxOTgsIDE0OCwgMSwgMTkxLCAxNDgsIDEsIDIyNSwgMTUwLCAxNDgsIDEsIDI1MiwgMTk5LCAxNDgsIDEsIAorICAgIDI1MiwgMjYsIDE0OCwgMSwgMTg2LCAxNDgsIDEsIDE5MiwgMTQ4LCAxLCAyMDUsIDE0OCwgMSwgMjIyLCAxODEsIDE0OCwgMSwgCisgICAgMjMzLCAxNDEsIDE0OCwgMSwgMjMyLCAxOTAsIDE0OCwgMSwgMjE0LCAyNywgMTQ4LCAxLCAyMjAsIDEwNCwgMTQ4LCAxLCAKKyAgICAyMTgsIDIyNSwgMTQ4LCAxLCAyMDYsIDE0OCwgMSwgMTYyLCAxNDgsIDUsIDI1MywgMTgzLCAxNDgsIDI1LCA1LCAyNTUsIAorICAgIDgyLCAxNDgsIDI1LCA1LCA3NCwgMTQ4LCAyNSwgNSwgMjM2LCA0MCwgMTQ4LCAyNSwgNSwgNjksIDE0OCwgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxNDgsIDI1LCA1LCAxNDksIDE1MywgMTQ4LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTQ4LCAyNSwgNSwgNzYsIAorICAgIDE0OCwgMjUsIDUsIDI0NSwgMjE3LCAxNDgsIDI1LCA1LCAyNTQsIDIxMCwgMTQ4LCAyNSwgNSwgNzgsIDE0OCwgMjUsIDUsIAorICAgIDIyNiwgMTg3LCAxNDgsIDI1LCA1LCAyNTMsIDIwMCwgMTQ4LCA1LCAyMTMsIDE1MiwgMTQ4LCAyMzMsIDI5LCA3OSwgMTQ4LCAKKyAgICAyNTQsIDIxMSwgMjMzLCAyOSwgNzksIDE0OCwgMSwgMjE1LCAxODQsIDE0OCwgMSwgMjQ2LCA0NiwgMTQ4LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNDgsIDEsIDE0OSwgMjMyLCAxOTEsIDE0OCwgMjUsIDUsIDE0OSwgMTU2LCAxNDgsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNDgsIDIxLCAyMTAsIDg2LCAxNDgsIDIxLCAxMTEsIDE0OCwgMjEsIDEwNSwgMTQ4LCAyMSwgMTU4LCAKKyAgICAxNDgsIDIxLCAxNjEsIDE0OCwgMjEsIDE5MCwgMTQ4LCAyMSwgMTk1LCAxNDgsIDIxLCAxOTksIDE0OCwgMjEsIDE5NiwgCisgICAgMTQ4LCAyMSwgMjAxLCAxNDgsIDI0NCwgMTAsIDIxLCAyMTAsIDg3LCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAKKyAgICAxNDgsIDI0NCwgMTAsIDIxLCAxMjMsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIAorICAgIDExMywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTM0LCAzMSwgMjI2LCAKKyAgICAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMjMsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIAorICAgIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTEzLCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgCisgICAgMjEsIDEzNCwgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDUsIDIxNSwgODQsIDE2NSwgNSwgMjU0LCAKKyAgICA4MywgMTY1LCA1LCAyMTMsIDE0NywgMTY1LCAxLCA2MSwgMTY1LCAxLCAyNTUsIDgyLCAxNjUsIDEsIDc0LCAxNjUsIDEsIAorICAgIDIzNiwgNDAsIDE2NSwgMSwgNjksIDE2NSwgMSwgMjE0LCAxMTgsIDE2NSwgMSwgMTQ5LCAxNTMsIDE2NSwgMSwgMTQ5LCAKKyAgICAxNTYsIDE2NSwgMSwgNzYsIDE2NSwgMSwgMjQ1LCAyMTcsIDE2NSwgMSwgMjU0LCAyMTAsIDE2NSwgMSwgNzgsIDE2NSwgMSwgCisgICAgMjI2LCAxODcsIDE2NSwgMSwgMjUzLCAyMDAsIDE2NSwgMSwgMTc2LCAxNjUsIDEsIDIzNCwgMTM4LCAxNjUsIDEsIDI0MywgCisgICAgMTQyLCAxNjUsIDEsIDI0MywgMCwgMTY1LCAxLCAyMjksIDgyLCAxNjUsIDEsIDI1MSwgNDEsIDE2NSwgMSwgMjUwLCAxNjUsIAorICAgIDE2NSwgMSwgMjM1LCAxNDcsIDE2NSwgMSwgMjM1LCAxMjAsIDE2NSwgMSwgMjI3LCAxNjksIDE2NSwgMSwgMjE1LCAxNTcsIAorICAgIDE2NSwgMSwgMjE1LCAxNDUsIDE2NSwgMSwgMjQ4LCAxNDMsIDE2NSwgMSwgMjQ4LCAxMjcsIDE2NSwgMSwgMjI4LCAxMTUsIAorICAgIDE2NSwgMSwgMjE3LCAxMDYsIDE2NSwgMSwgMjE2LCAyMDksIDE2NSwgMSwgMjQ4LCAyMjksIDE2NSwgMSwgMjQ4LCAzMywgCisgICAgMTY1LCAxLCAxOTgsIDE2NSwgMSwgMTkxLCAxNjUsIDEsIDIyNSwgMTUwLCAxNjUsIDEsIDI1MiwgMTk5LCAxNjUsIDEsIAorICAgIDI1MiwgMjYsIDE2NSwgMSwgMTg2LCAxNjUsIDEsIDE5MiwgMTY1LCAxLCAyMDUsIDE2NSwgMSwgMjIyLCAxODEsIDE2NSwgMSwgCisgICAgMjMzLCAxNDEsIDE2NSwgMSwgMjMyLCAxOTAsIDE2NSwgMSwgMjE0LCAyNywgMTY1LCAxLCAyMjAsIDEwNCwgMTY1LCAxLCAKKyAgICAyMTgsIDIyNSwgMTY1LCAxLCAyMDYsIDE2NSwgMSwgMTYyLCAxNjUsIDUsIDIyNywgMjA5LCAxNjUsIDUsIDI1MywgMTgzLCAKKyAgICAxNjUsIDI1LCA1LCAyNTUsIDgyLCAxNjUsIDI1LCA1LCA3NCwgMTY1LCAyNSwgNSwgMjM2LCA0MCwgMTY1LCAyNSwgNSwgNjksIAorICAgIDE2NSwgMjUsIDUsIDIxNCwgMTE4LCAxNjUsIDI1LCA1LCAxNDksIDE1MywgMTY1LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTY1LCAyNSwgNSwgNzYsIDE2NSwgMjUsIDUsIDI0NSwgMjE3LCAxNjUsIDI1LCA1LCAyNTQsIDIxMCwgMTY1LCAyNSwgNSwgCisgICAgNzgsIDE2NSwgMjUsIDUsIDIyNiwgMTg3LCAxNjUsIDI1LCA1LCAyNTMsIDIwMCwgMTY1LCA1LCAyMTMsIDE1MiwgMTY1LCAKKyAgICAyMzMsIDI5LCA3OSwgMTY1LCAyNTQsIDIxMSwgMjMzLCAyOSwgNzksIDE2NSwgMSwgMjQ0LCAyMDQsIDE2NSwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTY1LCAxLCAxNDksIDIzMiwgMTkxLCAxNjUsIDI1LCA1LCAxNDksIDE1NiwgMTY1LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTY1LCAyMSwgMjEwLCA4NiwgMTY1LCAyMSwgMTExLCAxNjUsIDIxLCAxMDUsIDE2NSwgMjEsIDE1OCwgCisgICAgMTY1LCAyMSwgMTYxLCAxNjUsIDIxLCAxOTAsIDE2NSwgMjEsIDE5NSwgMTY1LCAyMSwgMTk5LCAxNjUsIDIxLCAxOTYsIAorICAgIDE2NSwgMjEsIDIwMSwgMTY1LCA1LCAyMzUsIDEwOCwgMTY1LCA1LCAyMTQsIDE2MSwgMTM2LCA1LCAyNTQsIDgzLCAxMzYsIAorICAgIDUsIDIxMywgMTQ3LCAxMzYsIDEsIDYxLCAxMzYsIDEsIDI1NSwgODIsIDEzNiwgMSwgNzQsIDEzNiwgMSwgMjM2LCA0MCwgCisgICAgMTM2LCAxLCA2OSwgMTM2LCAxLCAyMTQsIDExOCwgMTM2LCAxLCAxNDksIDE1MywgMTM2LCAxLCAxNDksIDE1NiwgMTM2LCAxLCAKKyAgICA3NiwgMTM2LCAxLCAyNDUsIDIxNywgMTM2LCAxLCAyNTQsIDIxMCwgMTM2LCAxLCA3OCwgMTM2LCAxLCAyMjYsIDE4NywgCisgICAgMTM2LCAxLCAyNTMsIDIwMCwgMTM2LCAxLCAxNzYsIDEzNiwgMSwgMjM0LCAxMzgsIDEzNiwgMSwgMjQzLCAxNDIsIDEzNiwgCisgICAgMSwgMjQzLCAwLCAxMzYsIDEsIDIyOSwgODIsIDEzNiwgMSwgMjUxLCA0MSwgMTM2LCAxLCAyNTAsIDE2NSwgMTM2LCAxLCAKKyAgICAyMzUsIDE0NywgMTM2LCAxLCAyMzUsIDEyMCwgMTM2LCAxLCAyMjcsIDE2OSwgMTM2LCAxLCAyMTUsIDE1NywgMTM2LCAxLCAKKyAgICAyMTUsIDE0NSwgMTM2LCAxLCAyNDgsIDE0MywgMTM2LCAxLCAyNDgsIDEyNywgMTM2LCAxLCAyMjgsIDExNSwgMTM2LCAxLCAKKyAgICAyMTcsIDEwNiwgMTM2LCAxLCAyMTYsIDIwOSwgMTM2LCAxLCAyNDgsIDIyOSwgMTM2LCAxLCAyNDgsIDMzLCAxMzYsIDEsIAorICAgIDE5OCwgMTM2LCAxLCAyMjgsIDk3LCAxMzYsIDEsIDE5MSwgMTM2LCAxLCAyMjUsIDE1MCwgMTM2LCAxLCAyNTIsIDE5OSwgCisgICAgMTM2LCAxLCAyNTIsIDI2LCAxMzYsIDEsIDE4NiwgMTM2LCAxLCAxOTIsIDEzNiwgMSwgMjA1LCAxMzYsIDEsIDIyMiwgMTgxLCAKKyAgICAxMzYsIDEsIDIzMywgMTQxLCAxMzYsIDEsIDIzMiwgMTkwLCAxMzYsIDEsIDIzMiwgMTgxLCAxMzYsIDEsIDIxNCwgMjcsIAorICAgIDEzNiwgMSwgMjIwLCAxMDQsIDEzNiwgMSwgMjE4LCAyMjUsIDEzNiwgMSwgMjA2LCAxMzYsIDEsIDE2MiwgMTM2LCAxLCAKKyAgICAyMTUsIDEyNiwgMTM2LCA1LCAyNTMsIDE4MywgMTM2LCAyNSwgNSwgMjU1LCA4MiwgMTM2LCAyNSwgNSwgNzQsIDEzNiwgMjUsIAorICAgIDUsIDIzNiwgNDAsIDEzNiwgMjUsIDUsIDY5LCAxMzYsIDI1LCA1LCAyMTQsIDExOCwgMTM2LCAyNSwgNSwgMTQ5LCAxNTMsIAorICAgIDEzNiwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDEzNiwgMjUsIDUsIDc2LCAxMzYsIDI1LCA1LCAyNDUsIDIxNywgMTM2LCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDEzNiwgMjUsIDUsIDc4LCAxMzYsIDI1LCA1LCAyMjYsIDE4NywgMTM2LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDEzNiwgNSwgMjEzLCAxNTIsIDEzNiwgMSwgNTksIDIyMywgNzYsIDEzNiwgMjUzLCAyMDEsIDIzMywgMjksIDc5LCAxMzYsIAorICAgIDEsIDE0OSwgMjIyLCAxODIsIDEzNiwgMSwgMTQ5LCAyMzIsIDE5MSwgMTM2LCAyNSwgNSwgMTQ5LCAxNTYsIDEzNiwgMjUsIAorICAgIDUsIDE0OSwgMjMyLCAxOTEsIDEzNiwgMjEsIDIxMCwgODYsIDEzNiwgMjEsIDExMSwgMTM2LCAyMSwgMTA1LCAxMzYsIDIxLCAKKyAgICAxNTgsIDEzNiwgMjEsIDE2MSwgMTM2LCAyMSwgMTkwLCAxMzYsIDIxLCAxOTUsIDEzNiwgMjEsIDE5OSwgMTM2LCAyMSwgCisgICAgMTk2LCAxMzYsIDIxLCAyMDEsIDEzNiwgNTQsIDIxNiwgMjQ4LCAxMzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAxMzYsIDU0LCAKKyAgICAxMjMsIDIxNiwgMTQ4LCAxMzYsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMTM2LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIAorICAgIDEzNiwgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAxMzYsIDI0OCwgMTU4LCA3OSwgMTM2LCAxLCAyNTAsIDEwNywgMjI4LCAKKyAgICAxMTYsIDEzNiwgMSwgMjUwLCAxMDcsIDIzMCwgMzAsIDEzNiwgMSwgMjUwLCAxMDcsIDIyMiwgMTgyLCAxMzYsIDEsIDI1MCwgCisgICAgMTA3LCAxNTYsIDEzNiwgMSwgMjUwLCAxMDcsIDIzMiwgMTkxLCAxMzYsIDEsIDI1MCwgMTA3LCAyMzUsIDI5LCAxNzUsIDUsIAorICAgIDI1NCwgODIsIDE3NSwgNSwgMjEzLCAxNDYsIDE3NSwgMSwgMjUzLCAxNzMsIDE3NSwgMSwgMjU1LCAzNiwgMTc1LCAxLCAKKyAgICAyNTQsIDIzMiwgMTc1LCAxLCAyNTQsIDI0NywgMTc1LCAxLCAyMzUsIDE1NywgMTc1LCAxLCAyMzYsIDM5LCAxNzUsIDEsIAorICAgIDIxNCwgMTEwLCAxNzUsIDEsIDIxNCwgMTEyLCAxNzUsIDEsIDIzNSwgMTgwLCAxNzUsIDEsIDIzNSwgMTgxLCAxNzUsIDEsIAorICAgIDIzNiwgMjUsIDE3NSwgMSwgMjM2LCAyNywgMTc1LCAxLCAyNDUsIDI1LCAxNzUsIDEsIDI0NSwgMjEyLCAxNzUsIDEsIDI1NCwgCisgICAgMTk3LCAxNzUsIDEsIDIyNiwgMTEyLCAxNzUsIDEsIDIyNiwgMTgxLCAxNzUsIDEsIDI1MywgMTg2LCAxNzUsIDEsIDI1NCwgCisgICAgMTU0LCAyMzQsIDE5MywgMTc1LCAxLCAyMzEsIDIxNCwgMjM0LCAxOTMsIDE3NSwgMSwgMjU0LCAxNTQsIDI0MywgODksIAorICAgIDE3NSwgMSwgMjMxLCAyMTQsIDI0MywgODksIDE3NSwgMSwgMjM0LCAyMzUsIDIyOSwgMjI3LCAxNzUsIDEsIDIyMSwgMjM4LCAKKyAgICAyNDMsIDg5LCAxNzUsIDEsIDI1NCwgMTU0LCAyNTAsIDIyNCwgMTc1LCAxLCAyMzEsIDIxNCwgMjUwLCAyMjQsIDE3NSwgMSwgCisgICAgMjU0LCAxNTQsIDIzNSwgMTMzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMzUsIDEzMywgMTc1LCAxLCAyMTcsIDk5LCAyMjksIAorICAgIDIyNywgMTc1LCAxLCAyMTcsIDk5LCAyMjEsIDIzNywgMjI5LCAyMjgsIDE3NSwgMSwgMjIxLCAyMzgsIDIzNSwgMTMzLCAKKyAgICAxNzUsIDEsIDI1NCwgMTU0LCAyMTUsIDE1MywgMTc1LCAxLCAyMzEsIDIxNCwgMjE1LCAxNTMsIDE3NSwgMSwgMjU0LCAxNTQsIAorICAgIDI0OCwgMTM0LCAxNzUsIDEsIDIzMSwgMjE0LCAyNDgsIDEzNCwgMTc1LCAxLCAyMzAsIDU4LCAyMjksIDE4NSwgMTc1LCAxLCAKKyAgICAyMjEsIDIzOCwgMjQ4LCAxMzQsIDE3NSwgMSwgMjU0LCAxNTQsIDIxNywgMzEsIDE3NSwgMSwgMjMxLCAyMTQsIDIxNywgMzEsIAorICAgIDE3NSwgMSwgMjU0LCAxNTQsIDI0OCwgMTUyLCAxNzUsIDEsIDIzMSwgMjE0LCAyNDgsIDE1MiwgMTc1LCAxLCAyNDgsIDE4MiwgCisgICAgMjI5LCAxODUsIDE3NSwgMSwgMjIxLCAyMzgsIDI0OCwgMTUyLCAxNzUsIDEsIDI1NCwgMTU0LCAyMjUsIDIzMiwgMTc1LCAxLCAKKyAgICAyMzEsIDIxNCwgMjI1LCAyMzIsIDE3NSwgMSwgMjU0LCAxNTQsIDI1MiwgMTIwLCAxNzUsIDEsIDIzMSwgMjE0LCAyNTIsIAorICAgIDEyMCwgMTc1LCAxLCAyMzEsIDEzNiwgMTc1LCAxLCAyNTQsIDEzOSwgMjUyLCAxMjAsIDE3NSwgMSwgMjExLCA1MSwgMTc1LCAKKyAgICAxLCAyMjMsIDEzNiwgMTc1LCAxLCAyNDgsIDE4MiwgMjMzLCA3MywgMTc1LCAxLCAyMTQsIDEsIDE3NSwgMSwgMjE3LCA5OSwgCisgICAgMjIxLCAyMTIsIDE3NSwgMSwgMjMwLCA1OCwgMjIxLCAyMTIsIDE3NSwgMSwgMjQ4LCAxODIsIDIyMSwgMjEyLCAxNzUsIDEsIAorICAgIDI0MSwgMjQ5LCAxNzUsIDEsIDIzMCwgNTgsIDIzMywgNzMsIDE3NSwgMSwgMjQ0LCAxNjQsIDE3NSwgNSwgMjU0LCAxODYsIAorICAgIDE3NSwgMjUsIDUsIDI1NCwgMjQyLCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjU0LCAyNDksIDE3NSwgMjUsIDUsIDI0NywgCisgICAgMjM2LCAyNTQsIDI0OSwgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDIzNSwgMTc3LCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjM1LCAKKyAgICAxNzcsIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyMjYsIDkyLCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjI2LCA5MiwgMTc1LCAKKyAgICAyNSwgNSwgMjQzLCAxMzEsIDE3NSwgMjUsIDUsIDIzNCwgMjEsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMzQsIDIxLCAxNzUsIAorICAgIDI1LCA1LCAyMzQsIDIzLCAyNDgsIDc1LCAxNzUsIDI1LCA1LCAyMzQsIDIyLCAyNDIsIDU0LCAyNTQsIDI0MiwgMTc1LCAyNSwgCisgICAgNSwgMjM0LCAyMiwgMjQyLCA1NCwgMjQ3LCAyMzYsIDI1NCwgMjQyLCAxNzUsIDI1LCA1LCAyMzQsIDIyLCAyNDIsIDU0LCAKKyAgICAyNDMsIDg4LCAxNzUsIDI1LCA1LCAyNDMsIDg4LCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjQzLCAxMzEsIDE3NSwgMjUsIDUsIAorICAgIDI0NywgMjM2LCAyNDMsIDg4LCAxNzUsIDIyNCwgMTQ0LCAyMzMsIDIxMywgMTY4LCAxMzUsIDIzNCwgMzUsIDIzNCwgMjUyLCAKKyAgICAxNjgsIDEzNSwgMjM0LCAxMTIsIDIzNCwgMTM0LCAxNjgsIDEzNSwgMjM0LCAxMTIsIDIzNCwgMTA1LCAxNjgsIDEzNSwgCisgICAgMjM0LCAxMTIsIDIzNCwgMTAxLCAxNjgsIDEzNSwgMjM0LCAxMTIsIDIzNCwgMTA5LCAxNjgsIDEzNSwgMjM0LCAxMTIsIAorICAgIDIyMywgMTU3LCAxNjgsIDEzNSwgMjI5LCAxMCwgMjI4LCAyNTMsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDE1NSwgMTY4LCAKKyAgICAxMzUsIDI1MCwgOTUsIDI1MCwgMTAzLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCAxNTQsIDE2OCwgMTM1LCAyMTksIDYxLCAKKyAgICAyMTksIDYwLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCA5MSwgMTY4LCAxMzUsIDIxMCwgMjQ1LCAyMTAsIDI1MiwgMTY4LCAKKyAgICAxMzUsIDI0NywgMTU0LCAyNTAsIDE2MiwgMTY4LCAxMzUsIDIxNiwgNDMsIDIyNSwgMjQyLCAxNjgsIDEzNSwgMjE2LCAxNTgsIAorICAgIDIxNiwgMjAxLCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIyOSwgMjA2LCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIyNSwgMTE0LCAKKyAgICAxNjgsIDEzNSwgMjI4LCA4MCwgMjI5LCAxMDMsIDE2OCwgMTM1LCAyNDcsIDE1NCwgMjQ4LCA3NiwgMTY4LCAxMzUsIDIxNiwgCisgICAgNDMsIDIxNywgNTYsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjE2LCAxMzIsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjE2LCAyMDUsIAorICAgIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjE2LCAxNTUsIDE2OCwgMTM1LCAyMjgsIDgwLCAyMjcsIDI0MiwgMTY4LCAxMzUsIDI1MSwgCisgICAgMjE0LCAyNTIsIDE3MiwgMTY4LCAxMzUsIDIyNSwgMjAsIDIyNSwgNDUsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjI1LCAxMTYsIAorICAgIDE2OCwgMTM1LCAyNDQsIDUyLCAyNDQsIDIwNCwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjUsIDE0NCwgMTY4LCAxMzUsIDI0NCwgCisgICAgNTIsIDI0NCwgMTgxLCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyMSwgMjQ5LCAxNjgsIDEzNSwgMjMwLCAxNjcsIDE4NiwgMTY4LCAKKyAgICAxMzUsIDIxMCwgMjQ1LCAyMTEsIDc5LCAxNjgsIDEzNSwgMjIyLCAyMTQsIDIyMiwgMTQxLCAxNjgsIDEzNSwgMjIyLCAxNDIsIAorICAgIDE2OCwgMTM1LCAyMzIsIDE2MywgMjMyLCAyMTIsIDE2OCwgMTM1LCAyMzIsIDEwMywgMTY4LCAxMzUsIDIxMSwgMjI4LCAKKyAgICAyMTIsIDYxLCAxNjgsIDEzNSwgMjE5LCA2MSwgMjIyLCA4LCAxNjgsIDEzNSwgMjE5LCA2MSwgMjIyLCAxMTYsIDE2OCwgCisgICAgMTM1LCAyMTksIDYxLCAyMTgsIDgzLCAxNjgsIDEzNSwgMjQxLCA3NiwgMjQxLCAxNjYsIDE2OCwgMTM1LCAyMzIsIDE2MywgCisgICAgMjUwLCA3NiwgMTY4LCAxMzUsIDE0NCwgMjU0LCAxMjMsIDE2OCwgMTM1LCAyNDEsIDc2LCAyMjgsIDc1LCAxNjgsIDEzNSwgCisgICAgMjI2LCA3MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA2MSwgMTY4LCAxMzUsIDIzMSwgMjA5LCAyNDIsIDI0LCAxNjgsIDEzNSwgCisgICAgMjIxLCAyMzIsIDI1NSwgODIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAxNDQsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNzQsIAorICAgIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjM2LCA0MCwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMTQsIDIxNCwgMTY4LCAxMzUsIDIyMSwgCisgICAgMjMyLCAyMTQsIDIxMiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA2OSwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMTQsIDExOCwgMTY4LCAKKyAgICAxMzUsIDIyNSwgMTI3LCAxNjgsIDI0OSwgMTA2LCAxNiwgMjUyLCAxNzMsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNzYsIDE2OCwgCisgICAgMTM1LCAyMjEsIDIzMiwgMjU0LCAyNTIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNzgsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAKKyAgICAyMTEsIDIzMSwgMjAzLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgMjExLCAyMzEsIDIwNCwgMTY4LCAxMzUsIDIzMywgCisgICAgMTEyLCAxNjgsIDEzNSwgMjMxLCAyMDAsIDE2OCwgMTM1LCAyMzEsIDIwMSwgMTY4LCAxMzUsIDIzMSwgMjA5LCAyNDUsIAorICAgIDE4OCwgMTY4LCAxMzUsIDIzMSwgMjA5LCAyMTYsIDE1NywgMTY4LCAxMzUsIDIzMSwgMjA5LCAyMTUsIDIyOSwgMTY4LCAKKyAgICAxMzUsIDIzMSwgMjA5LCAyNTAsIDE0MywgMTY4LCAxMzUsIDIxNiwgMTk5LCAxNjgsIDEzNSwgMjI4LCAyMTAsIDE2OCwgCisgICAgMTM1LCAyMTEsIDczLCAxNjgsIDEzNSwgMjQ0LCA0MywgMTY4LCAyMSwgMjEwLCA4NiwgMTY4LCAyMSwgMTExLCAxNjgsIDIxLCAKKyAgICAxMDUsIDE2OCwgMjEsIDE1OCwgMTY4LCAyMSwgMTYxLCAxNjgsIDIxLCAxOTAsIDE2OCwgMjEsIDE5NSwgMTY4LCAyMSwgCisgICAgMTk5LCAxNjgsIDIxLCAxOTYsIDE2OCwgMjEsIDIwMSwgMTY4LCAxMzUsIDI1NCwgMTE5LCAxNjgsIDEzNSwgMjM0LCAxMTAsIAorICAgIDIwOSwgMjA5LCAxLCAyMzQsIDM0LCAyMDksIDIwOSwgMSwgMjM0LCAxMTIsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMzQsIAorICAgIDExMiwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDIyOSwgOSwgMjA5LCAyMDksIDEsIDI0OSwgMjQ2LCAyMDksIDIwOSwgMSwgCisgICAgMjE5LCA2MSwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDIyNywgMTM4LCAyMDksIDIwOSwgMSwgMjQ3LCAxNTMsIDIwOSwgMjA5LCAKKyAgICAxLCAxMTIsIDIwOSwgMjA5LCAxLCAyMTYsIDE1OCwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIxNiwgMTU4LCAyMTcsIDYzLCAKKyAgICAyMDksIDIwOSwgMSwgMjI4LCA3OSwgMjA5LCAyMDksIDEsIDI1MSwgMjEzLCAyMDksIDIwOSwgMSwgMjI1LCAxOSwgMjA5LCAKKyAgICAyMDksIDEsIDIyNSwgMTI1LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjQ0LCA1MiwgMjE3LCA2MywgMjA5LCAyMDksIDEsIAorICAgIDIyNSwgMTI1LCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjQ0LCA1MiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIzMCwgMTY2LCAKKyAgICAyMDksIDIwOSwgMSwgMjEwLCAyNDQsIDIwOSwgMjA5LCAxLCAyMzIsIDE2MywgMjMyLCAyMTIsIDIwOSwgMjA5LCAxLCAyMzIsIAorICAgIDE2MywgMjMyLCAxMjcsIDIwOSwgMjA5LCAxLCAyMTEsIDIyNywgMjA5LCAyMDksIDEsIDIxOSwgNjEsIDIxOCwgMzYsIDIwOSwgCisgICAgMjA5LCAxLCAyNDEsIDc2LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgNzgsIDIwOSwgMjA5LCAxLCAyNDEsIDc2LCAyMTcsIDYzLCAKKyAgICAyMDksIDIwOSwgMjQ1LCAxNzEsIDIwOSwgMjA5LCAyNSwgNSwgNjEsIDIwOSwgMjA5LCAyNSwgNSwgMjMxLCAyMDksIDIzNCwgCisgICAgMjQwLCAyMDksIDIwOSwgMjUsIDUsIDI1NSwgODIsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAxNDQsIDIwOSwgMjA5LCAyNSwgCisgICAgNSwgNzQsIDIwOSwgMjA5LCAyNSwgNSwgMjM2LCA0MCwgMjA5LCAyMDksIDI1LCA1LCAyMTEsIDExNywgMjA5LCAyMDksIDI1LCAKKyAgICA1LCAyMTAsIDE2OSwgMjA5LCAyMDksIDI1LCA1LCA2OSwgMjA5LCAyMDksIDI1LCA1LCAyMTQsIDExOCwgMjA5LCAyMDksIAorICAgIDI1LCA1LCAyMzEsIDIwOSwgMjM0LCAxOSwgMjA5LCAyMDksIDIyMCwgMTQ3LCA1LCAyMzIsIDE2MiwgMjA5LCAyMDksIDIyMCwgCisgICAgMTQ3LCA1LCAyMjcsIDEzOCwgMjA5LCAyMDksIDI1LCA1LCA3NiwgMjA5LCAyMDksIDI1LCA1LCAyNDUsIDIwMywgMjA5LCAKKyAgICAyMDksIDI1LCA1LCA3OCwgMjA5LCAyMDksIDI1LCA1LCAyNTMsIDE3NSwgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDIxMCwgCisgICAgMjA5LCAyMDksIDIzNCwgMzUsIDIzMywgMTQxLCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwOSwgMjQ1LCAxODgsIDIwOSwgMjA5LCAKKyAgICAxMzgsIDIzMSwgMjA5LCAyMTYsIDE1NywgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDksIDIxNiwgMTE4LCAyMDksIDIwOSwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjUwLCAyMzEsIDIwOSwgMjA5LCAyNTEsIDEyLCA3OSwgMjA5LCAyMDksIDIyOCwgMjE5LCAyMDksIAorICAgIDIwOSwgMjEsIDIxMCwgODYsIDIwOSwgMjA5LCAyMSwgMTExLCAyMDksIDIwOSwgMjEsIDEwNSwgMjA5LCAyMDksIDIxLCAKKyAgICAxNTgsIDIwOSwgMjA5LCAyMSwgMTYxLCAyMDksIDIwOSwgMjEsIDE5MCwgMjA5LCAyMDksIDIxLCAxOTUsIDIwOSwgMjA5LCAKKyAgICAyMSwgMTk5LCAyMDksIDIwOSwgMjEsIDE5NiwgMjA5LCAyMDksIDIxLCAyMDEsIDIwOSwgMjA5LCAyNDEsIDc2LCAyMjgsIAorICAgIDc5LCAyMDksIDIwOSwgMjQxLCA3NiwgMjMwLCAxNjYsIDIwOSwgMjA5LCAxLCAyMzQsIDExMywgMjQyLCAxODEsIDIwOSwgCisgICAgMjA5LCAxLCAyMzQsIDExMywgMjI3LCAxMzgsIDYzLCAzLCAyMjYsIDIwOCwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgCisgICAgMjMwLCAyNTMsIDIxNSwgMTkwLCA2MSwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgMjMwLCAyNTMsIDI1NSwgMTY4LCAKKyAgICAyMjIsIDIxOCwgMjUyLCA4NSwgMTg2LCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAyMzAsIDI1MywgMjU1LCAxNjgsIAorICAgIDI0MiwgMTIyLCAyMTUsIDE3NCwgMTg2LCA2MywgMTY0LCA2NSwgMjExLCAwLCAyMzAsIDI1MywgMjMxLCA5OCwgMTg2LCA2MywgCisgICAgMTY0LCAyNTAsIDQsIDIxMSwgMCwgMjMwLCAyNTMsIDIyMCwgMTExLCAxODYsIDYzLCAxNjQsIDI1MCwgMjQ3LCAyMTEsIDAsIAorICAgIDIzMCwgMjUzLCAyMjUsIDExNSwgMjIwLCA5OCwgMTg2LCA2MywgMTY0LCAyMTEsIDAsIDIzMCwgMjUzLCAyMTUsIDE3NCwgCisgICAgMjIwLCA5OCwgMTg2LCA2MywgMTY0LCAyMjEsIDIxMCwgMjIwLCA5NywgNjMsIDE2NCwgMjUxLCAxMzYsIDIxMSwgMCwgMjMwLCAKKyAgICAyNTIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDIxMSwgMCwgMjMwLCAyNTIsIDYzLCAxNjQsIDIzNSwgMjA0LCAyMTUsIAorICAgIDE3MywgNjMsIDE2NCwgMjQ4LCA2OSwgMjE1LCAxNzQsIDI1MSwgMTM1LCA2MywgMTY0LCAyMjAsIDk3LCA2MywgMTY0LCAKKyAgICAyMjcsIDE0MywgMjIwLCA5NywgNjMsIDE2NCwgMjE1LCAxNzQsIDIyMCwgOTcsIDYzLCAxNjQsIDIyNywgMTQzLCAyMTUsIAorICAgIDE3NCwgMjIwLCA5NywgNjMsIDE2NCwgMjIyLCAyMzksIDI1MCwgMTMwLCAyMTgsIDIzOCwgMjIwLCA5NywgNjMsIDE2NCwgCisgICAgMjIzLCA0NSwgMjQyLCAxNTMsIDIyMCwgOTcsIDYzLCAxNjQsIDI1MCwgMjQ3LCAyNTUsIDE3MiwgMjIyLCAxNDYsIDIzMSwgCisgICAgOTcsIDIwMCwgMjUxLCAxNSwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxNSwgMTczLCA2MywgMjMyLCAxNTAsIDUsIDI1MCwgMTYzLCAKKyAgICAyMjIsIDE0NSwgNjMsIDIzMiwgMTUwLCA1LCAyMzMsIDIsIDIyMiwgMTQ1LCA2MywgMjUzLCAyMjAsIDUsIDIyMCwgMTA3LCAKKyAgICAyNDMsIDcyLCAyNTUsIDE3MywgMjIyLCAxNDUsIDYzLCAyNTMsIDIyMCwgNSwgMjU1LCAxNzAsIDE5MSwgNjMsIDI1MywgCisgICAgMjIwLCA1LCAyMjEsIDE4NCwgMjE1LCAxNjksIDYzLCA1LCAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MywgNzEsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MiwgMTgzLCA2MywgNSwgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDIsIDEyMywgNjMsIDUsIAorICAgIDIyMywgMTMzLCAyMjksIDIyNCwgMjQzLCA3MSwgNjMsIDUsIDIyMywgMTMzLCAyMjksIDIyNCwgMjQyLCAxODMsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjQ3LCAxNjcsIDIyMywgMTMzLCAyMjksIDIyMywgNjMsIDIxLCAyMTAsIDg2LCA2MywgMjEsIDExMSwgNjMsIAorICAgIDIxLCAxMDUsIDYzLCAyMSwgMTU4LCA2MywgMjEsIDE2MSwgNjMsIDIxLCAxOTAsIDYzLCAyMSwgMTk1LCA2MywgMjEsIDE5OSwgCisgICAgNjMsIDIxLCAxOTYsIDYzLCAyMSwgMjAxLCA2MywgMjEsIDE2MywgMTExLCA2MywgMjEsIDE2MywgMTA1LCA2MywgMjEsIAorICAgIDE2MywgMTU4LCA2MywgMjEsIDE2MywgMTYxLCA2MywgMjEsIDE2MywgMTkwLCA2MywgMjEsIDE2MywgMTk1LCA2MywgMjEsIAorICAgIDE2MywgMTk5LCA2MywgMjEsIDE2MywgMTk2LCA2MywgMjEsIDE2MywgMjAxLCA2MywgMjEsIDE2MywgMjEwLCA4NiwgNjMsIAorICAgIDE2NCwgMjUxLCAxMzgsIDIyMiwgMTQ1LCA2MywgMTY0LCAyMjksIDczLCAyNTEsIDc2LCAyMjcsIDE1MywgMjEwLCAyNSwgCisgICAgNjMsIDE2NCwgMjUwLCAyNDcsIDI1NSwgMTcyLCAyMjIsIDE0NiwgMjUxLCA3NywgMjMwLCAyMDcsIDI1MSwgMTUsIDYzLCAKKyAgICAxNjQsIDIyOSwgNzMsIDI1MSwgNzYsIDIyMCwgMTA4LCAyMjIsIDE0NSwgNjMsIDE2NCwgMjUwLCAxNDAsIDIzMCwgMjUyLCAKKyAgICA2MywgMTY0LCAyMTUsIDE4NSwgMjU1LCAxNjksIDYzLCAxNjQsIDI0MiwgMTA3LCAyMjIsIDE0NiwgMjQyLCA3MCwgNjMsIAorICAgIDE2NCwgMjQyLCAxMDcsIDIyMiwgMTQ2LCAyNDIsIDc2LCA2MywgMTY0LCAyNTQsIDEyNCwgMjM0LCAxMjksIDI0MiwgNzAsIAorICAgIDYzLCAxNjQsIDI1NCwgMTI0LCAyMzQsIDEyOSwgMjQyLCA3NiwgNjMsIDUsIDIxMSwgNjUsIDIxNSwgMTcyLCA2MywgNSwgCisgICAgMjMxLCAxNzIsIDIxNSwgMTcyLCA2MywgMSwgMTc2LCA2MywgMSwgMjM0LCAxMzgsIDYzLCAxLCAyNDMsIDE0MiwgNjMsIDEsIAorICAgIDI0MywgMCwgNjMsIDEsIDIyOSwgODIsIDYzLCAxLCAyNTEsIDQxLCA2MywgMSwgMjUwLCAxNjUsIDYzLCAxLCAyMzUsIDE0NywgCisgICAgNjMsIDEsIDIyNywgMTY5LCA2MywgMSwgMjE1LCAxNTcsIDYzLCAxLCAyMTUsIDE0NSwgNjMsIDEsIDI0OCwgMTQzLCA2MywgCisgICAgMSwgMjQ4LCAxMjcsIDYzLCAxLCAyMjgsIDExNSwgNjMsIDEsIDIxNywgMTA2LCA2MywgMSwgMjE2LCAyMDksIDYzLCAxLCAKKyAgICAyNDgsIDIyOSwgNjMsIDEsIDI0OCwgMzMsIDYzLCAxLCAxOTgsIDYzLCAxLCAxOTEsIDYzLCAxLCAyMjUsIDE1MCwgNjMsIDEsIAorICAgIDI1MiwgMTk5LCA2MywgMSwgMjUyLCAyNiwgNjMsIDEsIDE4NiwgNjMsIDEsIDIxNSwgMTg0LCA2MywgMSwgMjE1LCAxNzYsIAorICAgIDYzLCAxLCAyNDYsIDQ2LCA2MywgMSwgMjQ2LCA0MSwgNjMsIDEsIDIxMiwgNjUsIDYzLCAxLCAyMTAsIDgyLCA2MywgMSwgCisgICAgMjEwLCAxMTYsIDYzLCAxLCAyNTUsIDE3NSwgNjMsIDEsIDE5MiwgNjMsIDEsIDIwNSwgNjMsIDEsIDIzMywgMTQxLCA2MywgCisgICAgMSwgMjIwLCAxMDQsIDYzLCAxLCAyMTgsIDIyNSwgNjMsIDEsIDIwNiwgNjMsIDEsIDE2MiwgNjMsIDEsIDYxLCA2MywgMSwgCisgICAgMjMzLCAyMzcsIDYzLCAxLCAyNDQsIDg1LCAyMDUsIDYzLCAxLCAyMzQsIDUyLCA2MywgMSwgMjIyLCAxODEsIDYzLCAyNSwgCisgICAgNSwgMjU1LCA4MiwgNjMsIDI1LCA1LCA3NCwgNjMsIDI1LCA1LCAyMzYsIDQwLCA2MywgMjUsIDUsIDY5LCA2MywgMjUsIDUsIAorICAgIDIxNCwgMTE4LCA2MywgMjUsIDUsIDE0OSwgMTUzLCA2MywgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDYzLCAyNSwgNSwgMTQ5LCAKKyAgICAxNTYsIDYzLCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgNjMsIDI1LCA1LCA3NiwgNjMsIDI1LCA1LCAyNDUsIDIxNywgNjMsIAorICAgIDI1LCA1LCA3OCwgNjMsIDI1LCA1LCAyMjYsIDE4NywgNjMsIDUsIDIyMiwgMjI0LCAyMTgsIDg1LCAyMjksIDgzLCAyMjIsIAorICAgIDIxMywgNjMsIDUsIDIyMiwgMjE4LCAyNTIsIDg0LCA2MywgMjUsIDUsIDIyMywgNTIsIDc0LCA2MywgMjUsIDUsIDIyMywgCisgICAgNTIsIDIzNiwgNDAsIDYzLCA1LCAyMjcsIDE1MywgMjEwLCAyNiwgMjI5LCAyMzEsIDI0OCwgMjI5LCA2MywgNSwgMjE5LCAKKyAgICA3MywgMjMzLCA2NiwgNjMsIDE2NCwgMjQyLCAzNiwgNjMsIDE2NCwgMjI2LCA2MSwgNjMsIDUsIDIzMywgNjksIDIyMiwgCisgICAgMTQ1LCA2MywgNSwgMjExLCA3MCwgMjIyLCAxNDUsIDYzLCA1LCAyMzMsIDcwLCAyMTUsIDE4NSwgMjUxLCAxNSwgNjMsIDUsIAorICAgIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgNSwgMjQyLCAxMjYsIDI1MSwgMTYsIDIyMywgNDMsIDYzLCA1LCAyNDIsIDEyNiwgCisgICAgMjMxLCA5MCwgMjIzLCA0MywgNjMsIDUsIDIzNSwgMjAwLCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDUsIAorICAgIDIzMywgNzAsIDIxNSwgMTg1LCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgNSwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIAorICAgIDc0LCA1LCAyMzUsIDIwMCwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCAxLCAxNzYsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAyMzQsIDEzOCwgNjMsIDIxOCwgNzQsIDEsIDI0MywgMTQyLCA2MywgMjE4LCA3NCwgMSwgMjQzLCAwLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjI5LCA4MiwgNjMsIDIxOCwgNzQsIDEsIDI1MSwgNDEsIDYzLCAyMTgsIDc0LCAxLCAyNTAsIDE2NSwgNjMsIDIxOCwgCisgICAgNzQsIDEsIDIzNSwgMTQ3LCA2MywgMjE4LCA3NCwgMSwgMjI3LCAxNjksIDYzLCAyMTgsIDc0LCAxLCAyMTUsIDE1NywgNjMsIAorICAgIDIxOCwgNzQsIDEsIDIxNSwgMTQ1LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAxNDMsIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDEyNywgCisgICAgNjMsIDIxOCwgNzQsIDEsIDIyOCwgMTE1LCA2MywgMjE4LCA3NCwgMSwgMjE3LCAxMDYsIDYzLCAyMTgsIDc0LCAxLCAyMTYsIAorICAgIDIwOSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMjI5LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAzMywgNjMsIDIxOCwgNzQsIDEsIAorICAgIDE5OCwgNjMsIDIxOCwgNzQsIDEsIDE5MSwgNjMsIDIxOCwgNzQsIDEsIDIyNSwgMTUwLCA2MywgMjE4LCA3NCwgMSwgMjUyLCAKKyAgICAxOTksIDYzLCAyMTgsIDc0LCAxLCAyNTIsIDI2LCA2MywgMjE4LCA3NCwgMSwgMTg2LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAKKyAgICAxODQsIDYzLCAyMTgsIDc0LCAxLCAyMTUsIDE3NiwgNjMsIDIxOCwgNzQsIDEsIDI0NiwgNDYsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAyNDYsIDQxLCA2MywgMjE4LCA3NCwgMSwgMjEyLCA2NSwgNjMsIDIxOCwgNzQsIDEsIDIxMCwgODIsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMTAsIDExNiwgNjMsIDIxOCwgNzQsIDEsIDI1NSwgMTc1LCA2MywgMjE4LCA3NCwgMSwgMTkyLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjA1LCA2MywgMjE4LCA3NCwgMSwgMjMzLCAxNDEsIDYzLCAyMTgsIDc0LCAxLCAyMjAsIDEwNCwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIxOCwgMjI1LCA2MywgMjE4LCA3NCwgMSwgMjA2LCA2MywgMjE4LCA3NCwgMSwgMTYyLCA2MywgMjE4LCA3NCwgMSwgCisgICAgNjEsIDYzLCAyMTgsIDc0LCAxLCAyMzMsIDIzNywgNjMsIDIxOCwgNzQsIDEsIDI0NCwgODUsIDIxMiwgNjUsIDYzLCAyMTgsIAorICAgIDc0LCAxLCAyNDQsIDg1LCAxOTIsIDYzLCAyMTgsIDc0LCAxLCAyNDQsIDg1LCAyMDUsIDYzLCAyMzMsIDIyNCwgMjIyLCAKKyAgICAxNDMsIDIzNCwgMTM4LCA2MywgMjMzLCAyMjQsIDIyMiwgMTQzLCAyMzQsIDEzOSwgMjUxLCA3NywgMjMwLCAyMDcsIDI1MSwgCisgICAgMTUsIDYzLCAyNTEsIDQsIDUsIDExNCwgMjUyLCA3OCwgNjMsIDI1MSwgNCwgNSwgMTkzLCAyNTIsIDc4LCA2MywgMjUxLCA0LCAKKyAgICA1LCAyNTEsIDUsIDIxNywgMjEsIDYzLCAyNTEsIDQsIDUsIDIyMSwgMjA5LCAyNTUsIDE3NCwgNjMsIDE2LCAyNDYsIDk5LCAKKyAgICAyNTEsIDEzMywgNjMsIDE2LCAyMjMsIDEzMiwgMjIyLCAyMjUsIDYzLCAxNiwgMjI2LCA4MSwgMjQzLCA3MCwgNjMsIDE2LCAKKyAgICAyMjMsIDEzMiwgMjIyLCAyMjYsIDIyMywgNDUsIDI0MiwgMTUyLCA2MywgMTYsIDIyNSwgMTE1LCAxOTEsIDYzLCAxNiwgCisgICAgMjI4LCA2NCwgMjUxLCAxMzMsIDYzLCAxNiwgMjI4LCA2NCwgMjUxLCAxMzQsIDIyNywgMTQzLCAyNTUsIDE3MSwgNjMsIDE2LCAKKyAgICAyMjgsIDY0LCAyNTEsIDEzNCwgMjQyLCAxMjQsIDI1NSwgMTcxLCA2MywgMTYsIDIyOCwgNjQsIDI1MSwgMTM0LCAyNTEsIAorICAgIDc3LCAyNTUsIDE3MSwgNjMsIDUsIDIyMywgMTMzLCAyMjksIDIyNCwgMjIzLCAxMzMsIDI0NywgMTY2LCA2MywgNSwgMjIzLCAKKyAgICAxMzMsIDIyOSwgMjI0LCAyNDIsIDEyMywgNjMsIDE2NCwgMjUxLCAxMzcsIDIyMCwgNSwgMjQyLCAyMjIsIDIzMCwgMjUzLCAKKyAgICAyMjMsIDQ0LCA2MywgMTY0LCAyMzAsIDE2OCwgMjExLCAwLCAyNDIsIDIyMiwgMjMwLCAyNTMsIDIyMywgNDQsIDYzLCAxNjQsIAorICAgIDIyNywgMTQzLCAyMTUsIDE3MywgNjMsIDE2NCwgNjUsIDI1MSwgMTYwLCAyMjIsIDIxNSwgMjExLCAwLCAyMzAsIDI1MywgCisgICAgMjMxLCA5OCwgMTg2LCA2MywgMTY0LCAyNTAsIDQsIDI1MSwgMTYwLCAyMjIsIDIxNSwgMjExLCAwLCAyMzAsIDI1MywgMjIwLCAKKyAgICAxMTEsIDE4NiwgMjIyLCAyNTMsIDIxOCwgMCwgNTAsIDIzMywgNTEsIDIxOCwgMCwgNTAsIDIyMiwgMjUzLCAyMTgsIDAsIDUsIAorICAgIDIsIDI0NywgMTI2LCAyMzMsIDUxLCAyMTgsIDAsIDUsIDIsIDI0NywgMTI2LCA2MywgMTY0LCAyMzMsIDYxLCAyMzEsIDEwMSwgCisgICAgMjIyLCAxNDUsIDYzLCAxNjQsIDIxNSwgMjUxLCAyMzEsIDEwMSwgMjIyLCAxNDUsIDY4LCAxLCAxNzYsIDY4LCAxLCAyMzQsIAorICAgIDEzOCwgNjgsIDEsIDI0MywgMTQyLCA2OCwgMSwgMjQzLCAwLCA2OCwgMSwgMjI5LCA4MiwgNjgsIDEsIDI1MSwgNDEsIDY4LCAKKyAgICAxLCAyNTAsIDE2NSwgNjgsIDEsIDIzNSwgMTQ3LCA2OCwgMSwgMjM1LCAxMjAsIDY4LCAxLCAyMjcsIDE2OSwgNjgsIDEsIAorICAgIDIyOCwgODEsIDY4LCAxLCAyMTUsIDE1NywgNjgsIDEsIDIxNSwgMTQ1LCA2OCwgMSwgMjQ4LCAxNDMsIDY4LCAxLCAyNDgsIAorICAgIDEyNywgNjgsIDEsIDIyOCwgMTE1LCA2OCwgMSwgMjE3LCAxMDYsIDY4LCAxLCAyMTYsIDIwOSwgNjgsIDEsIDI0OCwgMjI5LCAKKyAgICA2OCwgMSwgMjQ4LCAzMywgNjgsIDEsIDE5OCwgNjgsIDEsIDE5MSwgNjgsIDEsIDIyNSwgMTUwLCA2OCwgMSwgMjUyLCAxOTksIAorICAgIDY4LCAxLCAyNTIsIDI2LCA2OCwgMSwgMTg2LCA2OCwgMSwgMTkyLCA2OCwgMSwgMjA1LCA2OCwgMSwgMjMzLCAxNDEsIDY4LCAKKyAgICAxLCAyMTIsIDY1LCA2OCwgMSwgMjA2LCA2OCwgMSwgMTYyLCA2OCwgMSwgMjMyLCAxOTAsIDY4LCAxLCA2MSwgNjgsIDEsIAorICAgIDIyMCwgODgsIDYxLCA2OCwgMSwgNzQsIDY4LCAxLCAyMzYsIDQwLCA2OCwgMSwgNjksIDY4LCAxLCAyMTQsIDExOCwgNjgsIAorICAgIDEsIDc2LCA2OCwgMSwgMjMwLCAxNTYsIDc2LCA2OCwgMSwgNzgsIDY4LCAxLCAyNTMsIDIwMCwgNjgsIDI1LCA1LCAyMTcsIAorICAgIDY1LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDI1NSwgODIsIDY4LCAyNSwgNSwgNzQsIDY4LCAyNSwgNSwgMjM2LCA0MCwgNjgsIAorICAgIDI1LCA1LCA2OSwgNjgsIDI1LCA1LCAyMTQsIDExOCwgNjgsIDI1LCA1LCA3NiwgNjgsIDI1LCA1LCAyNTQsIDIxMCwgNjgsIAorICAgIDI1LCA1LCAyMzAsIDE1NiwgMjM2LCA0MCwgNjgsIDI1LCA1LCAyMzAsIDE1NiwgNzgsIDY4LCAyNSwgNSwgMTYwLCA0OCwgCisgICAgNjgsIDUsIDI1NCwgODMsIDY4LCA1LCA1OSwgNTEsIDY4LCA1LCAyMTMsIDE0NywgNjgsIDUsIDIxMywgMTUyLCA2OCwgNSwgCisgICAgMjUzLCAyNDMsIDY4LCAxMTcsIDUsIDE0NywgMTkyLCA2OCwgMTE3LCA1LCAxNDcsIDIwNSwgNjgsIDExNywgNSwgMTQ3LCAKKyAgICAyMTIsIDY1LCA2OCwgMTE3LCA1LCAxNDcsIDE2MiwgNjgsIDEsIDI0MiwgMTM5LCAyMDYsIDY4LCAyMSwgMjEwLCA4NiwgNjgsIAorICAgIDIxLCAxMTEsIDY4LCAyMSwgMTA1LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNjEsIDY4LCAyMSwgMTkwLCA2OCwgMjEsIDE5NSwgCisgICAgNjgsIDIxLCAxOTksIDY4LCAyMSwgMTk2LCA2OCwgMjEsIDIwMSwgNjgsIDUsIDIzMiwgMTk4LCAyMjEsIDE3NCwgNjgsIDUsIAorICAgIDIyMSwgMTc0LCA2OCwgMTYsIDIzMiwgMTU5LCA2OCwgMTYsIDI0OSwgMjIxLCA2OCwgMTYsIDI1NCwgMjI5LCA2OCwgMTYsIAorICAgIDI0MywgNTUsIDY4LCAxLCAyMjAsIDEwNCwgNjgsIDEsIDIxOCwgMjI1LCA2OCwgMSwgMTQ5LCAxNTMsIDY4LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCA2OCwgMSwgMTQ5LCAxNTYsIDY4LCAxLCAxNDksIDIzMiwgMTkxLCA2OCwgMjUsIDUsIDE0OSwgMTUzLCA2OCwgCisgICAgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDY4LCAyNSwgNSwgMTQ5LCAxNTYsIDY4LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgNjgsIAorICAgIDEsIDIzMCwgMTU2LCAyMjksIDgyLCA2OCwgMSwgMjMwLCAxNTYsIDIzNSwgMTIwLCA2OCwgMSwgMjMwLCAxNTYsIDI1MiwgCisgICAgMTE5LCA2OCwgMSwgMjMwLCAxNTYsIDI1MiwgMTE0LCA2OCwgMTE3LCA1LCAyMzAsIDE1NiwgMTQ3LCAxOTgsIDY4LCAxMTcsIAorICAgIDUsIDIzMCwgMTU2LCAxNDcsIDE4NiwgNjgsIDExNywgNSwgMjMwLCAxNTYsIDE0NywgMjMzLCAxNDEsIDY4LCAxLCAyMjAsIAorICAgIDExMCwgMjM0LCAyMTksIDIyMCwgMTA0LCA2OCwgMjUsIDUsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjQ1LCA2MywgNjgsIDEzOCwgCisgICAgMTY0LCAyMjAsIDExMCwgMjM0LCAyMTksIDI0MSwgMjU0LCA2OCwgMTM4LCAxNjQsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjM0LCAKKyAgICAxODksIDIyNSwgMTI0LCA2OCwgMSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjA5LCA2OCwgMSwgMjEyLCAKKyAgICA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIyNCwgMTE3LCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAKKyAgICAyNDUsIDYzLCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTQsIDIxNCwgNjgsIDUsIDIxMiwgNywgCisgICAgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDMwLCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjksIAorICAgIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyOCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgCisgICAgMjE5LCAyMTYsIDI3LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjYsIDY4LCAxLCAyNDUsIAorICAgIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMjgsIDExNSwgNjgsIDEsIDI0NSwgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIAorICAgIDIxMCwgMTc2LCA2OCwgMSwgMjQ1LCAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjQyLCAyMjQsIDY4LCAyNSwgNSwgMjQzLCAKKyAgICA2NiwgMjM0LCAyMTksIDc0LCA2OCwgMjUsIDUsIDIzNCwgMTk0LCAyMjYsIDIzOCwgNjgsIDI1LCA1LCAyMzQsIDE5NCwgNjksIAorICAgIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDI0NSwgMjE3LCA2OCwgMSwgMjIwLCA4OCwgMTc2LCA2OCwgMSwgMjIwLCA4OCwgMjM0LCAKKyAgICAxMzgsIDY4LCAxLCAyMjAsIDg4LCAyNDMsIDE0MiwgNjgsIDEsIDIyMCwgODgsIDI1MSwgNDEsIDY4LCAxLCAyMjAsIDg4LCAKKyAgICAyMTAsIDExNiwgNjgsIDEsIDIyMCwgODgsIDIyNywgMTY5LCA2OCwgMSwgMjIwLCA4OCwgMjQ4LCAyMjksIDY4LCAxLCAyMjAsIAorICAgIDg4LCAxOTgsIDY4LCAxLCAyMjAsIDg4LCAyMjUsIDE1MCwgNjgsIDEsIDIyMCwgODgsIDI0NCwgMjA0LCA2OCwgMSwgMjIwLCAKKyAgICA4OCwgMjUyLCAxOTksIDY4LCAxLCAyMjAsIDg4LCAyMTYsIDIwOSwgNjgsIDEsIDIyMCwgODgsIDE2MiwgNjgsIDExNywgNSwgCisgICAgMjIwLCA4OCwgMTQ3LCAyMTIsIDY1LCA2OCwgMjUsIDUsIDIyMCwgODgsIDI1NSwgODIsIDY4LCAyNSwgNSwgMjIwLCA4OCwgCisgICAgNzYsIDY4LCAyNSwgNSwgMjIwLCA4OCwgMTYwLCA0OCwgNjgsIDI1LCA1LCAyMjAsIDg4LCA0MCwgMjExLCAxMTcsIDY4LCA1LCAKKyAgICAyMjAsIDg4LCAyMTYsIDI5LCA2OCwgNSwgMjIwLCA4OCwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODgsIDIxNiwgMjYsIDY4LCAKKyAgICA1LCAyMjAsIDg4LCAyMTYsIDI1LCA2OCwgNSwgMjIwLCA4OCwgMjQ5LCAxNjAsIDIxNiwgMjksIDY4LCA1LCAyMjAsIDg4LCAKKyAgICAyNDksIDE2MCwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODgsIDI0OSwgMTYwLCAyNDUsIDE2MSwgMjE2LCAzMSwgNjgsIDEsIAorICAgIDIyMiwgMTMwLCAyMjYsIDY3LCAyNDQsIDIwNCwgNjgsIDUsIDIyMiwgMTMwLCAyMjYsIDY3LCAyMTYsIDI2LCA2OCwgMjIwLCAKKyAgICA4OCwgMjEsIDIxMCwgODYsIDY4LCAyMjAsIDg4LCAyMSwgMTExLCA2OCwgMjIwLCA4OCwgMjEsIDEwNSwgNjgsIDIyMCwgODgsIAorICAgIDIxLCAxNTgsIDY4LCAyMjAsIDg4LCAyMSwgMTYxLCA2OCwgMjIwLCA4OCwgMjEsIDE5MCwgNjgsIDIyMCwgODgsIDIxLCAKKyAgICAxOTUsIDY4LCAyMjAsIDg4LCAyMSwgMTk5LCA2OCwgMjIwLCA4OCwgMjEsIDE5NiwgNjgsIDIyMCwgODgsIDIxLCAyMDEsIAorICAgIDY4LCA1LCAyMzQsIDEzMiwgMjE2LCAzMCwgNjgsIDUsIDIzNCwgMTMyLCAyMTYsIDI4LCA2OCwgMjUsIDUsIDI1NCwgMTk5LCAKKyAgICA2MSwgNjgsIDI1LCA1LCAyNTQsIDE5OSwgMjU0LCAyMTAsIDY4LCAxNiwgMjIwLCA4OCwgMTExLCA2OCwgMTYsIDIyMCwgODgsIAorICAgIDI0NSwgMzgsIDk4LCA2LCAxLCAyNTQsIDEzMSwgOTgsIDYsIDEsIDI1MiwgMTYwLCA5OCwgNiwgMSwgMjQzLCAxMTMsIDk4LCAKKyAgICA2LCAxLCAyNDcsIDEzNiwgOTgsIDYsIDEsIDI0NSwgMTU4LCA5OCwgNiwgMSwgMjEzLCAxNjAsIDk4LCA2LCAxLCAyMTAsIAorICAgIDg5LCA5OCwgNiwgMSwgMjE3LCA2MSwgOTgsIDYsIDEsIDIzNiwgNiwgOTgsIDYsIDEsIDIzNCwgMjQwLCA5OCwgNiwgMSwgCisgICAgMjMzLCA4NywgOTgsIDYsIDEsIDIzMSwgMTkwLCA5OCwgNiwgMSwgMjI5LCAyMDAsIDk4LCA2LCAxLCAyMjYsIDIwMCwgOTgsIAorICAgIDYsIDEsIDIyNiwgMjEsIDk4LCA2LCAxLCAyMTAsIDc4LCA5OCwgNiwgMSwgMjIzLCAxNzQsIDk4LCA2LCAxLCAyMjEsIDI0NSwgCisgICAgOTgsIDYsIDEsIDIxNywgNTEsIDk4LCA2LCAxLCAyMTQsIDE5MCwgOTgsIDYsIDEsIDIyNSwgMTQzLCA5OCwgNiwgMSwgMjM0LCAKKyAgICAxMjcsIDk4LCA2LCAxLCAyNDIsIDI0OCwgOTgsIDYsIDEsIDIyNCwgNzYsIDk4LCA2LCAxLCAyMjAsIDIyLCA5OCwgNiwgMSwgCisgICAgMjUwLCAxMDUsIDk4LCA2LCAxLCAyNTEsIDE1LCA5OCwgNiwgMSwgMjM1LCAxMDYsIDk4LCA2LCAxLCAyNTAsIDQ4LCA5OCwgCisgICAgNiwgMSwgMjUwLCAxNTEsIDk4LCA2LCAxLCAyMTEsIDE2MywgOTgsIDYsIDEsIDIzNSwgMTE3LCA5OCwgNiwgMSwgMjQyLCAKKyAgICA1MCwgOTgsIDYsIDEsIDI0MSwgMjQ1LCA5OCwgNiwgMSwgMjQxLCAxODIsIDk4LCA2LCAxLCAyMTIsIDIyLCA5OCwgNiwgMSwgCisgICAgMjQyLCAxMSwgOTgsIDYsIDEsIDI0MSwgNzIsIDk4LCA2LCAxLCAyMTAsIDI0NiwgOTgsIDYsIDEsIDI1NCwgMjQxLCA5OCwgCisgICAgMSwgMjU0LCAxMzEsIDk4LCAxLCAyNTIsIDE2MCwgOTgsIDEsIDI0MywgMTEzLCA5OCwgMSwgMjQ3LCAxMzYsIDk4LCAxLCAKKyAgICAyNDUsIDE1OCwgOTgsIDEsIDIxMywgMTYwLCA5OCwgMSwgMjEwLCA4OSwgOTgsIDEsIDIxNywgNjEsIDk4LCAxLCAyMzYsIDYsIAorICAgIDk4LCAxLCAyMzQsIDI0MCwgOTgsIDEsIDIzMywgODcsIDk4LCAxLCAyMzEsIDE5MCwgOTgsIDEsIDIyOSwgMjAwLCA5OCwgMSwgCisgICAgMjI2LCAyMDAsIDk4LCAxLCAyMjYsIDIxLCA5OCwgMSwgMjEwLCA3OCwgOTgsIDEsIDIyMywgMTc0LCA5OCwgMSwgMjIxLCAKKyAgICAyNDUsIDk4LCAxLCAyMTcsIDUxLCA5OCwgMSwgMjE0LCAxOTAsIDk4LCAxLCAyMjUsIDE0MywgOTgsIDEsIDIzNCwgMTI3LCAKKyAgICA5OCwgMSwgMjQyLCAyNDgsIDk4LCAxLCAyMjQsIDc2LCA5OCwgMSwgMjIwLCAyMiwgOTgsIDEsIDI1MCwgMTA1LCA5OCwgMSwgCisgICAgMjUxLCAxNSwgOTgsIDEsIDIzNSwgMTA2LCA5OCwgMSwgMjUwLCA0OCwgOTgsIDEsIDI1MCwgMTUxLCA5OCwgMSwgMjExLCAKKyAgICAxNjMsIDk4LCAxLCAyMzUsIDExNywgOTgsIDEsIDI0MiwgNTAsIDk4LCAxLCAyNDEsIDI0NSwgOTgsIDEsIDI0MSwgMTgyLCAKKyAgICA5OCwgMSwgMjEyLCAyMiwgOTgsIDEsIDI0MiwgMTEsIDk4LCAxLCAyNDEsIDcyLCA5OCwgMSwgMjQ0LCAxMjksIDk4LCAxLCAKKyAgICAyMTAsIDI0NiwgOTgsIDEsIDI0NSwgMTczLCA5OCwgMSwgMjE1LCA5NCwgMjQzLCAxMTMsIDk4LCAxLCAyNTQsIDIwNSwgOTgsIAorICAgIDIyNiwgMTksIDIyMCwgMTM5LCA1OCwgMSwgOTgsIDIyOSwgMjAwLCA5OCwgMSwgMjU0LCAyNDEsIDk4LCAxLCAyNDIsIDEwLCAKKyAgICA1MCwgOTgsIDEsIDIzMywgMTMzLCA1MCwgMjQsIDEwMCwgMjM0LCA2NCwgMjQsIDEwMCwgMjE4LCAyMTcsIDI0LCAxMDAsIAorICAgIDIyOCwgMjMxLCAyNCwgMTAwLCAyMTYsIDEwMiwgMjQsIDEwMCwgMjE4LCAyMDYsIDI0LCAxMDAsIDIyMywgMjksIDI0LCAKKyAgICAxMDAsIDIzMCwgMjIyLCAyNCwgMTAwLCAyMjUsIDk4LCAyNCwgMTAwLCAyMTgsIDIxNCwgMjQsIDEwMCwgMjE5LCAxNTAsIAorICAgIDI0LCAxMDAsIDIxOCwgMjExLCAyNCwgMTAwLCAyMzYsIDYzLCAyNCwgMTAwLCAyNTAsIDU0LCAyNCwgMTAwLCAyMTgsIDIyMSwgCisgICAgMjQsIDEwMCwgMjUwLCAxMTQsIDI0LCAxMDAsIDIzNCwgMTE2LCAyNCwgMTAwLCAyMTYsIDE3NCwgMjQsIDEwMCwgMjI1LCAKKyAgICAxMzQsIDI0LCAxMDAsIDI0MSwgMTc5LCAyNCwgMTAwLCAyMjgsIDIyNywgMjQsIDEwMCwgMjE4LCAyMTUsIDI0LCAxMDAsIAorICAgIDIyOCwgMjIxLCAyNCwgMTAwLCAyMjgsIDIyNSwgMjQsIDEwMCwgMjE2LCA5OSwgMjQsIDEwMCwgMjIzLCAxNywgMjQsIDEwMCwgCisgICAgMjE4LCAyMTMsIDI0LCAxMDAsIDIyMywgMjcsIDI0LCAxMDAsIDIzNCwgMjI0LCAyNCwgMTAwLCAyMzAsIDIxNSwgMjQsIAorICAgIDEwMCwgMjM0LCAyMjcsIDI0LCAxMDAsIDIyNSwgOTMsIDI0LCAxMDAsIDIyNSwgOTEsIDI0LCAxMDAsIDIyNSwgNzksIDI0LCAKKyAgICAxMDAsIDIyNSwgODcsIDI0LCAxMDAsIDIyNSwgODUsIDI0LCAxMDAsIDIyNSwgODIsIDI0LCAxMDAsIDIyNSwgODQsIDI0LCAKKyAgICAxMDAsIDIyNSwgODEsIDI0LCAxMDAsIDIyNSwgODYsIDI0LCAxMDAsIDIyNSwgOTYsIDI0LCAxMDAsIDIyNSwgOTcsIDI0LCAKKyAgICAxMDAsIDIyNSwgODAsIDI0LCAxMDAsIDIyNSwgOTAsIDI0LCAxMDAsIDIzNCwgMjI1LCAyNCwgMTAwLCAyMzQsIDIyMywgMjQsIAorICAgIDEwMCwgMjE5LCAxNDMsIDI0LCAxMDAsIDIxOSwgMTQxLCAyNCwgMTAwLCAyMTksIDEzMywgMjQsIDEwMCwgMjE5LCAxMzYsIAorICAgIDI0LCAxMDAsIDIxOSwgMTQyLCAyNCwgMTAwLCAyMTksIDEzOCwgMjQsIDEwMCwgMjE5LCAxMzcsIDI0LCAxMDAsIDIxOSwgCisgICAgMTM1LCAyNCwgMTAwLCAyMTksIDE0NiwgMjQsIDEwMCwgMjE5LCAxNDgsIDI0LCAxMDAsIDIxOSwgMTQ5LCAyNCwgMTAwLCAKKyAgICAyMTksIDE0NCwgMjQsIDEwMCwgMjE5LCAxMzQsIDI0LCAxMDAsIDIxOSwgMTM5LCAyNCwgMTAwLCAyMTksIDE0NywgMjQsIAorICAgIDEwMCwgMjUwLCA5OCwgMjQsIDEwMCwgMjUwLCA5NiwgMjQsIDEwMCwgMjUwLCAxNzYsIDI0LCAxMDAsIDI1MCwgMTc0LCAyNCwgCisgICAgMTAwLCAyMjYsIDM2LCAyNCwgMTAwLCAyMzYsIDU4LCAyNCwgMTAwLCAyMzYsIDQ5LCAyNCwgMTAwLCAyMzYsIDU3LCAyNCwgCisgICAgMTAwLCAyMzYsIDU0LCAyNCwgMTAwLCAyMzYsIDUyLCAyNCwgMTAwLCAyMzYsIDU2LCAyNCwgMTAwLCAyMTgsIDIxOCwgMjQsIAorICAgIDEwMCwgMjM2LCA2MSwgMjQsIDEwMCwgMjM2LCA2MiwgMjQsIDEwMCwgMjM2LCA1MCwgMjQsIDEwMCwgMjM2LCA1NSwgMjQsIAorICAgIDEwMCwgMjExLCAyNiwgMjQsIDEwMCwgMjUwLCA1MywgMjQsIDEwMCwgMjUwLCA5OSwgMjQsIDEwMCwgMjUwLCA5NywgMjQsIAorICAgIDEwMCwgMjUwLCAxNzcsIDI0LCAxMDAsIDI1MCwgMTc1LCAyNCwgMTAwLCAyNTAsIDExMiwgMjQsIDEwMCwgMjUwLCAxMTMsIAorICAgIDI0LCAxMDAsIDI1MCwgMTAwLCAyNCwgMTAwLCAyNTAsIDE3OCwgMjQsIDEwMCwgMjI1LCAxMzIsIDI0LCAxMDAsIDIzNCwgCisgICAgMjI2LCAyNCwgMTAwLCAyMTgsIDIxOSwgMjQsIDEwMCwgMjExLCAzMiwgMjQsIDEwMCwgMjM0LCA1NSwgMjQsIDEwMCwgMjI4LCAKKyAgICAyMjMsIDI0LCAxMDAsIDIyOCwgMjI5LCAyNCwgMTAwLCAyMjgsIDIyOCwgMjQsIDEwMCwgMjE2LCA5NiwgMjQsIDEwMCwgCisgICAgMjQ0LCAxMTEsIDI0LCAxNDMsIDI0NCwgMTExLCAyNCwgMTQzLCA2MSwgMjQsIDE0MywgMjU0LCAyNTIsIDI0LCAxNDMsIAorICAgIDE5MiwgMjQsIDE0MywgMjExLCA5MiwgMjQsIDE0MywgMjQ1LCAxMjUsIDI0LCAxNDMsIDc2LCAyNCwgMTQzLCAyMTEsIDM2LCAKKyAgICAyNCwgMTQzLCAyMTEsIDQ3LCAyNCwgMTQzLCA3OCwgMjQsIDE0MywgMjEyLCA2NSwgMjQsIDE0MywgMjEyLCA2MiwgMjQsIAorICAgIDE0MywgMjI2LCAyMzgsIDI0LCAxNDMsIDIxMCwgMjQ0LCAyNCwgMTQzLCA2OSwgMjQsIDE0MywgMjEyLCAxMSwgMjQsIDE0MywgCisgICAgMjEyLCAyMiwgMjQsIDE0MywgMjExLCAyNTAsIDI0LCAxNDMsIDIxMCwgMjEyLCAyNCwgMTQzLCAyNDUsIDYzLCAyNCwgMTQzLCAKKyAgICAyMTEsIDgsIDI0LCAxNDMsIDc0LCAyNCwgMTQzLCAyNTUsIDE2NiwgMjQsIDE0MywgMjU1LCAxNjUsIDI0LCAxNDMsIDIxMSwgCisgICAgMTA2LCAyNCwgMTQzLCAyMTEsIDEwNCwgMjQsIDE0MywgMjQ1LCAxMjMsIDI0LCAxNDMsIDI0NSwgMTIyLCAyNCwgMTQzLCAKKyAgICAyNDUsIDEyNCwgMjQsIDE0MywgMjExLCAzNSwgMjQsIDE0MywgMjExLCAzNCwgMjQsIDE0MywgMjI3LCA4OCwgMjQsIDE0MywgCisgICAgMjI3LCA4OSwgMjQsIDE0MywgMjI3LCA4MiwgMjQsIDE0MywgMjI3LCA4NywgMjQsIDE0MywgMjI3LCA4NSwgMjQsIDE0MywgCisgICAgMjEwLCAyMzgsIDI0LCAxNDMsIDIxMCwgMjM3LCAyNCwgMTQzLCAyMTAsIDIzNiwgMjQsIDE0MywgMjEwLCAyMzksIDI0LCAKKyAgICAxNDMsIDIxMCwgMjQwLCAyNCwgMTQzLCAyMTUsIDMwLCAyNCwgMTQzLCAyMTUsIDI5LCAyNCwgMTQzLCAyMTUsIDI3LCAyNCwgCisgICAgMTQzLCAyMTUsIDI0LCAyNCwgMTQzLCAyMTUsIDI1LCAyNCwgMTQzLCAyMTAsIDIxMSwgMjQsIDE0MywgMjEwLCAyMDgsIDI0LCAKKyAgICAxNDMsIDIxMCwgMjA5LCAyNCwgMTQzLCAyMTAsIDIwMywgMjQsIDE0MywgMjEwLCAyMDQsIDI0LCAxNDMsIDIxMCwgMjA1LCAKKyAgICAyNCwgMTQzLCAyMTAsIDIwNywgMjQsIDE0MywgMjQ1LCA1NywgMjQsIDE0MywgMjQ1LCA1OSwgMjQsIDE0MywgMjExLCA3LCAKKyAgICAyNCwgMTQzLCAyNDAsIDE2MCwgMjQsIDE0MywgMjQwLCAxNTIsIDI0LCAxNDMsIDI0MCwgMTU1LCAyNCwgMTQzLCAyNDAsIAorICAgIDE1MywgMjQsIDE0MywgMjQwLCAxNTcsIDI0LCAxNDMsIDI0MCwgMTU5LCAyNCwgMTQzLCAyNTQsIDQyLCAyNCwgMTQzLCAKKyAgICAyNTQsIDM5LCAyNCwgMTQzLCAyNTQsIDM3LCAyNCwgMTQzLCAyNTQsIDM4LCAyNCwgMTQzLCAyMTgsIDIyMiwgMjQsIDE0MywgCisgICAgMjU1LCAxNjcsIDI0LCAxNDMsIDIxMSwgMTA1LCAyNCwgMTQzLCAyMTEsIDMzLCAyNCwgMTQzLCAyMjcsIDg0LCAyNCwgMTQzLCAKKyAgICAyMjcsIDgzLCAyNCwgOTAsIDIzNCwgNjQsIDI0LCA5MCwgMjE4LCAyMTcsIDI0LCA5MCwgMjM0LCA1NywgMjQsIDkwLCAyMjgsIAorICAgIDIzMSwgMjQsIDkwLCAyMjgsIDIyOSwgMjQsIDkwLCAyMjgsIDIyOCwgMjQsIDkwLCAyMTYsIDEwMiwgMjQsIDkwLCAyMjMsIAorICAgIDI5LCAyNCwgOTAsIDIyMywgMjQsIDI0LCA5MCwgMjIzLCAyMSwgMjQsIDkwLCAyMjMsIDE0LCAyNCwgOTAsIDIyMywgOSwgCisgICAgMjQsIDkwLCAyMjMsIDQsIDI0LCA5MCwgMjIzLCAxNSwgMjQsIDkwLCAyMjMsIDI3LCAyNCwgOTAsIDIzMCwgMjIyLCAyNCwgCisgICAgOTAsIDIyNSwgOTgsIDI0LCA5MCwgMjI1LCA4NywgMjQsIDkwLCAyMTksIDE1MCwgMjQsIDkwLCAyMTgsIDIxMSwgMjQsIDkwLCAKKyAgICAyMzYsIDYzLCAyNCwgOTAsIDI1MCwgNTQsIDI0LCA5MCwgMjUwLCAxMTQsIDI0LCA5MCwgMjM0LCAxMTYsIDI0LCA5MCwgCisgICAgMjE2LCAxNzQsIDI0LCA5MCwgMjI1LCAxMzQsIDI0LCA5MCwgMjQxLCAxNzksIDI0LCA5MCwgMjM0LCA1OCwgMjQsIDkwLCAKKyAgICAyMzQsIDU2LCAyNCwgOTAsIDIyOCwgMjI3LCAyNCwgOTAsIDIyOCwgMjIxLCAyNCwgOTAsIDIyOCwgMjIzLCAyNCwgOTAsIAorICAgIDIyOCwgMjI2LCAyNCwgOTAsIDIyOCwgMjIyLCAyNCwgOTAsIDIxNiwgOTksIDI0LCA5MCwgMjE2LCA5NiwgMjQsIDkwLCAKKyAgICAyMjMsIDIyLCAyNCwgOTAsIDIyMywgMTcsIDI0LCA5MCwgMjIzLCAzLCAyNCwgOTAsIDIyMywgMiwgMjQsIDkwLCAyMTgsIAorICAgIDIxMywgMjQsIDkwLCAyMjMsIDE5LCAyNCwgOTAsIDIyMywgMTgsIDI0LCA5MCwgMjIzLCAxMSwgMjQsIDkwLCAyMjMsIDEzLCAKKyAgICAyNCwgOTAsIDIyMywgMjYsIDI0LCA5MCwgMjIzLCA2LCAyNCwgOTAsIDIyMywgMTYsIDI0LCA5MCwgMjIzLCAyNSwgMjQsIAorICAgIDkwLCAyMjMsIDEsIDI0LCA5MCwgMjMwLCAyMTgsIDI0LCA5MCwgMjMwLCAyMTMsIDI0LCA5MCwgMjMwLCAyMTUsIDI0LCA5MCwgCisgICAgMjMwLCAyMTIsIDI0LCA5MCwgMjMwLCAyMTAsIDI0LCA5MCwgMjMwLCAyMTYsIDI0LCA5MCwgMjMwLCAyMjEsIDI0LCA5MCwgCisgICAgMjMwLCAyMTksIDI0LCA5MCwgMjM0LCAyMjcsIDI0LCA5MCwgMjI1LCA4OSwgMjQsIDkwLCAyMjUsIDkwLCAyNCwgOTAsIAorICAgIDIyNSwgOTUsIDI0LCA5MCwgMjM0LCAyMjUsIDI0LCA5MCwgMjE5LCAxNDMsIDI0LCA5MCwgMjE5LCAxMzMsIDI0LCA5MCwgCisgICAgMjE5LCAxMzYsIDI0LCA5MCwgMjE5LCAxMzgsIDI0LCA5MCwgMjI2LCAzNiwgMjQsIDkwLCAyMzYsIDU4LCAyNCwgOTAsIAorICAgIDIzNiwgNTEsIDI0LCA5MCwgMjE4LCAyMTgsIDI0LCA5MCwgMjM2LCA1OSwgMjQsIDkwLCAyMTEsIDI2LCAyNCwgOTAsIDIxMSwgCisgICAgMjIsIDI0LCA5MCwgMjExLCAyMywgMjQsIDkwLCAyMjUsIDEzMiwgMjQsIDkwLCAyMzQsIDIyNiwgMjQsIDkwLCAyNDEsIAorICAgIDE3NywgMjQsIDkwLCAyNDEsIDE3NSwgMjQsIDkwLCAyNDEsIDE3OCwgMjQsIDkwLCAyNDEsIDE3NiwgMjQsIDkwLCAyMTEsIAorICAgIDMyLCAyNCwgOTAsIDIzNCwgNjAsIDI0LCA5MCwgMjM0LCA1OSwgMjQsIDkwLCAyMzQsIDYzLCAyNCwgOTAsIDIzNCwgNjEsIAorICAgIDI0LCA5MCwgMjM0LCA2MiwgMjQsIDkwLCAyMTgsIDIxNSwgMjksIDMsIDE2MiwgMjksIDMsIDI0MCwgMjI5LCAyOSwgMywgCisgICAgMjQxLCAxODcsIDI5LCAzLCAyNDIsIDUzLCAyOSwgMywgMjQxLCAyMjcsIDI5LCAzLCAyNDEsIDI0NSwgMjksIDMsIDI0MSwgCisgICAgNzUsIDI5LCAzLCAyNDEsIDc0LCAyOSwgMywgMjMzLCAxNDEsIDI5LCAzLCAyMzIsIDEwMywgMjksIDMsIDIzMiwgMjQ3LCAKKyAgICAyOSwgMywgMjMzLCAxNDAsIDI5LCAzLCAyMzMsIDU2LCAyOSwgMywgMjMzLCA2NCwgMjksIDMsIDIzMiwgMTYyLCAyOSwgMywgCisgICAgMjMyLCA3NSwgMjksIDMsIDI0MSwgMTk2LCAyOSwgMywgMjQxLCAxOTAsIDI5LCAzLCAyNDEsIDE5MiwgMjksIDMsIDI0MSwgCisgICAgMTk1LCAyOSwgMywgMjQxLCAxOTMsIDI5LCAzLCAyNDEsIDE5NCwgMjksIDMsIDI0MSwgMTkxLCAyOSwgMywgMjQxLCAxODksIAorICAgIDI5LCAzLCAxODYsIDI5LCAzLCAyMzAsIDEwNywgMjksIDMsIDIzMCwgMjM1LCAyOSwgMywgMjMxLCAyNDIsIDI5LCAzLCAKKyAgICAyMzEsIDg1LCAyOSwgMywgMjMxLCA5NiwgMjksIDMsIDIzMCwgMTY2LCAyOSwgMywgMjMwLCA0NywgMjksIDMsIDIxNywgCisgICAgMTY0LCAyOSwgMywgMjE3LCAxNTgsIDI5LCAzLCAyMTcsIDE2MCwgMjksIDMsIDIxNywgMTYzLCAyOSwgMywgMjE3LCAxNjEsIAorICAgIDI5LCAzLCAyMTcsIDE2MiwgMjksIDMsIDIxNywgMTU5LCAyOSwgMywgMjE3LCAxNTcsIDI5LCAzLCAyMDUsIDI5LCAzLCAKKyAgICAyMjIsIDE0MiwgMjksIDMsIDIyMywgMzgsIDI5LCAzLCAyMjMsIDE4NywgMjksIDMsIDIyMywgMTExLCAyOSwgMywgMjIzLCAKKyAgICAxMzEsIDI5LCAzLCAyMjIsIDIxMywgMjksIDMsIDIyMiwgMTExLCAyOSwgMywgMjA2LCAyOSwgMywgMjE4LCA4NCwgMjksIDMsIAorICAgIDIxOSwgMTkzLCAyOSwgMywgMjIyLCAzMywgMjksIDMsIDIyMSwgMTcyLCAyOSwgMywgMjIxLCAxODMsIDI5LCAzLCAyMTksIAorICAgIDYwLCAyOSwgMywgMjE3LCAyNTQsIDI5LCAzLCAyMjAsIDEwNCwgMjksIDMsIDIxOSwgMjI3LCAyOSwgMywgMjIwLCAzNCwgCisgICAgMjksIDMsIDIyMCwgMTAwLCAyOSwgMywgMjIwLCA2MywgMjksIDMsIDIyMCwgNjUsIDI5LCAzLCAyMjAsIDksIDI5LCAzLCAKKyAgICAyMTksIDIxMCwgMjksIDMsIDIyNCwgOTEsIDI5LCAzLCAyMjQsIDMzLCAyOSwgMywgMjI0LCA1NiwgMjksIDMsIDIyNCwgOTAsIAorICAgIDI5LCAzLCAyMjQsIDcxLCAyOSwgMywgMjI0LCA3MiwgMjksIDMsIDIyNCwgNDUsIDI5LCAzLCAyMjQsIDQ0LCAyOSwgMywgCisgICAgMjIzLCAyNDUsIDI5LCAzLCAyMjMsIDI0MSwgMjksIDMsIDIyMywgMjQ0LCAyOSwgMywgMjIzLCAyNDIsIDI5LCAzLCAyMjMsIAorICAgIDI0MywgMjksIDMsIDIyNCwgNjgsIDI5LCAzLCAyMjQsIDYyLCAyOSwgMywgMjI0LCA2NCwgMjksIDMsIDIyNCwgNjcsIDI5LCAKKyAgICAzLCAyMjQsIDY1LCAyOSwgMywgMjI0LCA2NiwgMjksIDMsIDIyNCwgNjMsIDI5LCAzLCAyMjQsIDYxLCAyOSwgMywgMjI0LCAKKyAgICA1NywgMjksIDMsIDIyNCwgNjAsIDI5LCAzLCAyMjQsIDU4LCAyOSwgMywgMjI0LCA1OSwgMjksIDMsIDI1MiwgMTk5LCAyOSwgCisgICAgMywgMjUxLCAxMzMsIDI5LCAzLCAyNTIsIDE0LCAyOSwgMywgMjUyLCAxOTcsIDI5LCAzLCAyNTIsIDc0LCAyOSwgMywgMjUyLCAKKyAgICA4MywgMjksIDMsIDI1MSwgMjEzLCAyOSwgMywgMjUxLCA5MSwgMjksIDMsIDIxNCwgMjcsIDI5LCAzLCAyMTIsIDExNiwgMjksIAorICAgIDMsIDIxMywgMTc2LCAyOSwgMywgMjE0LCAyNiwgMjksIDMsIDIxMywgMjUwLCAyOSwgMywgMjEzLCAyNTUsIDI5LCAzLCAKKyAgICAyMTMsIDEzOCwgMjksIDMsIDIxMiwgMTA3LCAyOSwgMywgMjE3LCAxMDYsIDI5LCAzLCAyMTUsIDExOSwgMjksIDMsIDIxNiwgCisgICAgMTE4LCAyOSwgMywgMjE3LCAxMDIsIDI5LCAzLCAyMTcsIDEyLCAyOSwgMywgMjE3LCAyMywgMjksIDMsIDExMiwgMjksIDMsIAorICAgIDIxNSwgODAsIDI5LCAzLCAyNTEsIDQxLCAyOSwgMywgMjQ5LCAxMjAsIDI5LCAzLCAyNTAsIDU5LCAyOSwgMywgMjUxLCA0MCwgCisgICAgMjksIDMsIDI1MCwgMTkwLCAyOSwgMywgMjUwLCAxOTgsIDI5LCAzLCAyNDksIDI0NiwgMjksIDMsIDI0OSwgODksIDI5LCAzLCAKKyAgICAyMTEsIDE2NSwgMjksIDMsIDIxMSwgMTQxLCAyOSwgMywgMjExLCAxNTcsIDI5LCAzLCAyMTEsIDE2NCwgMjksIDMsIDIxMSwgCisgICAgMTYxLCAyOSwgMywgMjExLCAxNjIsIDI5LCAzLCAyMTEsIDE0OCwgMjksIDMsIDIxMSwgMTQ3LCAyOSwgMywgMjExLCAxMzYsIAorICAgIDI5LCAzLCAyMTEsIDEzMiwgMjksIDMsIDIxMSwgMTM1LCAyOSwgMywgMjExLCAxMzMsIDI5LCAzLCAyMTEsIDEzNCwgMjksIAorICAgIDMsIDE5OCwgMjksIDMsIDIyNywgMjQyLCAyOSwgMywgMjI4LCAyMzgsIDI5LCAzLCAyMjksIDIzMCwgMjksIDMsIDIyOSwgCisgICAgMTA4LCAyOSwgMywgMjI5LCAxMTIsIDI5LCAzLCAyMjgsIDc5LCAyOSwgMywgMjI3LCAxNzgsIDI5LCAzLCAyMjcsIDE2OSwgCisgICAgMjksIDMsIDIyNywgMTMyLCAyOSwgMywgMjI3LCAxNTIsIDI5LCAzLCAyMjcsIDE2OCwgMjksIDMsIDIyNywgMTU5LCAyOSwgCisgICAgMywgMjI3LCAxNjAsIDI5LCAzLCAyMjcsIDEzOCwgMjksIDMsIDIyNywgMTIzLCAyOSwgMywgMjQyLCAxODcsIDYxLCAyOSwgCisgICAgMywgMjQyLCAxODcsIDY5LCAyOSwgMywgMjQyLCAxODcsIDc0LCAyOSwgMywgMjQyLCAxODcsIDI1NSwgODIsIDI5LCAzLCAKKyAgICAyNDIsIDE4NywgMjQ1LCAyMTcsIDI5LCAzLCAyNDIsIDE4NywgNzYsIDI5LCAzLCAyNDIsIDE4NywgNzgsIDI5LCAzLCAyNDIsIAorICAgIDE4NywgMjEyLCA2NSwgMjksIDMsIDE3NiwgMjksIDMsIDIzMywgMjIzLCAyOSwgMywgMjM0LCA5OCwgMjksIDMsIDIzNSwgCisgICAgMTYsIDI5LCAzLCAyMzQsIDE4NywgMjksIDMsIDIzNCwgMTg4LCAyOSwgMywgMjM0LCAzNCwgMjksIDMsIDIzNCwgMzMsIDI5LCAKKyAgICAzLCAyMzMsIDE4OCwgMjksIDMsIDIzMywgMTgyLCAyOSwgMywgMjMzLCAxODcsIDI5LCAzLCAyMzMsIDE4MywgMjksIDMsIAorICAgIDIzMywgMTg0LCAyOSwgMywgMjMzLCAxNzcsIDI5LCAzLCAyMzMsIDE3MSwgMjksIDMsIDIzMywgMTczLCAyOSwgMywgMjMzLCAKKyAgICAxNzYsIDI5LCAzLCAyMzMsIDE3NCwgMjksIDMsIDIzMywgMTc1LCAyOSwgMywgMjMzLCAxNzIsIDI5LCAzLCAyMzMsIDE3MCwgCisgICAgMjksIDMsIDIzMywgMTY2LCAyOSwgMywgMjMzLCAxNjksIDI5LCAzLCAyMzMsIDE2NywgMjksIDMsIDIzMywgMTY4LCAyOSwgCisgICAgMywgMjEyLCA2NSwgMjksIDMsIDIxMSwgMTk1LCAyOSwgMywgMjExLCAyNTAsIDI5LCAzLCAyMTIsIDY0LCAyOSwgMywgMjEyLCAKKyAgICAxNywgMjksIDMsIDIxMiwgMjIsIDI5LCAzLCAyMTEsIDIyNywgMjksIDMsIDIxMSwgMjI2LCAyOSwgMywgMjI1LCAxNDIsIAorICAgIDYxLCAyOSwgMywgMjI1LCAxNDIsIDY5LCAyOSwgMywgMjI1LCAxNDIsIDc0LCAyOSwgMywgMjI1LCAxNDIsIDI1NSwgODIsIAorICAgIDI5LCAzLCAyMjUsIDE0MiwgMjQ1LCAyMTcsIDI5LCAzLCAyMjUsIDE0MiwgNzYsIDI5LCAzLCAyMjUsIDE0MiwgNzgsIDI5LCAKKyAgICAzLCAyMTAsIDExNiwgMjksIDMsIDIxMCwgMTMsIDI5LCAzLCAyMTAsIDQ0LCAyOSwgMywgMjEwLCAxMTUsIDI5LCAzLCAyMTAsIAorICAgIDkyLCAyOSwgMywgMjEwLCA5NCwgMjksIDMsIDIxMCwgMjMsIDI5LCAzLCAyMTAsIDAsIDI5LCAzLCAyMTAsIDgyLCAyOSwgMywgCisgICAgMjEwLCA2MiwgMjksIDMsIDIxMCwgNjksIDI5LCAzLCAyMTAsIDgxLCAyOSwgMywgMjEwLCA3MywgMjksIDMsIDIxMCwgNzQsIAorICAgIDI5LCAzLCAyMTAsIDY3LCAyOSwgMywgMjEwLCA1MywgMjksIDMsIDE5MiwgMjksIDMsIDIxMCwgMjEyLCAyOSwgMywgMjExLCAKKyAgICA4LCAyOSwgMywgMjExLCAxMDMsIDI5LCAzLCAyMTEsIDQ0LCAyOSwgMywgMjExLCA0NywgMjksIDMsIDIxMCwgMjQ0LCAyOSwgCisgICAgMywgMjEwLCAyMzUsIDI5LCAzLCAyNDgsIDIyOSwgMjksIDMsIDI0NiwgODYsIDI5LCAzLCAyNDgsIDExLCAyOSwgMywgMjQ4LCAKKyAgICAyMjgsIDI5LCAzLCAyNDgsIDg1LCAyOSwgMywgMjQ4LCA5OCwgMjksIDMsIDI0NywgMTUzLCAyOSwgMywgMjQ2LCA1NSwgMjksIAorICAgIDMsIDI0OCwgMTQzLCAyOSwgMywgMjQ4LCAxMDgsIDI5LCAzLCAyNDgsIDEyMCwgMjksIDMsIDI0OCwgMTQyLCAyOSwgMywgCisgICAgMjQ4LCAxMzAsIDI5LCAzLCAyNDgsIDEzMSwgMjksIDMsIDI0OCwgMTEzLCAyOSwgMywgMjQ4LCA5OSwgMjksIDMsIDIzNSwgCisgICAgMTQ3LCAyOSwgMywgMjM1LCA1NywgMjksIDMsIDIzNSwgMTE0LCAyOSwgMywgMjM1LCAxNDYsIDI5LCAzLCAyMzUsIDEzMCwgCisgICAgMjksIDMsIDIzNSwgMTMyLCAyOSwgMywgMjM1LCA3NCwgMjksIDMsIDIzNSwgMzcsIDI5LCAzLCAyNDMsIDE0MiwgMjksIDMsIAorICAgIDI0MiwgMTIwLCAyOSwgMywgMjQyLCAyMjEsIDI5LCAzLCAyNDMsIDEzOSwgMjksIDMsIDI0MywgNjIsIDI5LCAzLCAyNDMsIAorICAgIDY5LCAyOSwgMywgMjQyLCAxODEsIDI5LCAzLCAyNDIsIDE4MCwgMjksIDMsIDI0MiwgODUsIDI5LCAzLCAyNDIsIDgxLCAyOSwgCisgICAgMywgMjQyLCA4NCwgMjksIDMsIDI0MiwgODIsIDI5LCAzLCAyNDIsIDgzLCAyOSwgMywgMjQzLCAzNiwgMjksIDMsIDI0MywgCisgICAgMTYsIDI5LCAzLCAyNDMsIDI2LCAyOSwgMywgMjQzLCAzNSwgMjksIDMsIDI0MywgMzAsIDI5LCAzLCAyNDMsIDMxLCAyOSwgCisgICAgMywgMjQzLCAyMCwgMjksIDMsIDI0MywgNSwgMjksIDMsIDIxNiwgMjA5LCAyOSwgMywgMjE2LCAxMzcsIDI5LCAzLCAyMTYsIAorICAgIDE3NiwgMjksIDMsIDIxNiwgMjA4LCAyOSwgMywgMjE2LCAxOTUsIDI5LCAzLCAyMTYsIDE5NiwgMjksIDMsIDIxNiwgMTU3LCAKKyAgICAyOSwgMywgMjE2LCAxMjksIDI5LCAzLCAyNTAsIDE2NSwgMjksIDMsIDI1MCwgNzcsIDI5LCAzLCAyNTAsIDExOCwgMjksIDMsIAorICAgIDI1MCwgMTY0LCAyOSwgMywgMjUwLCAxMzYsIDI5LCAzLCAyNTAsIDEzOSwgMjksIDMsIDI1MCwgOTQsIDI5LCAzLCAyNTAsIAorICAgIDY2LCAyOSwgMywgMjI1LCAxNTAsIDI5LCAzLCAyMjUsIDExNywgMjksIDMsIDIyNSwgMTM2LCAyOSwgMywgMjI1LCAxNDksIAorICAgIDI5LCAzLCAyMjUsIDEzOCwgMjksIDMsIDIyNSwgMTM5LCAyOSwgMywgMjI1LCAxMjQsIDI5LCAzLCAyMjUsIDExMywgMjksIAorICAgIDMsIDIxNSwgMTg0LCAyOSwgMywgMjE1LCAxNjQsIDI5LCAzLCAyMTUsIDE2OCwgMjksIDMsIDIxNSwgMTgzLCAyOSwgMywgCisgICAgMjE1LCAxNzgsIDI5LCAzLCAyMTUsIDE3OSwgMjksIDMsIDIxNSwgMTY3LCAyOSwgMywgMjE1LCAxNjIsIDI5LCAzLCAyMTUsIAorICAgIDM5LCAyOSwgMywgMjE1LCAzMSwgMjksIDMsIDIxNSwgMzUsIDI5LCAzLCAyMTUsIDM4LCAyOSwgMywgMjE1LCAzNiwgMjksIAorICAgIDMsIDIxNSwgMzcsIDI5LCAzLCAyMTUsIDMzLCAyOSwgMywgMjE1LCAzMiwgMjksIDMsIDI0NCwgMjA0LCAyOSwgMywgMjQzLCAKKyAgICAyNDEsIDI5LCAzLCAyNDQsIDEyOSwgMjksIDMsIDI0NCwgMjAzLCAyOSwgMywgMjQ0LCAxNTUsIDI5LCAzLCAyNDQsIDE2MiwgCisgICAgMjksIDMsIDI0NCwgNTEsIDI5LCAzLCAyNDMsIDIyMCwgMjksIDMsIDE5MSwgMjksIDMsIDIyNCwgMTUzLCAyOSwgMywgMjI1LCAKKyAgICAxMTEsIDI5LCAzLCAyMjYsIDkzLCAyOSwgMywgMjI1LCAyMTQsIDI5LCAzLCAyMjUsIDIyNCwgMjksIDMsIDIyNSwgMTksIAorICAgIDI5LCAzLCAyMjQsIDExNywgMjksIDMsIDIyMiwgMTAxLCAyOSwgMywgMjMwLCAzNiwgMjksIDMsIDI0MywgMjE0LCAyOSwgCisgICAgMzgsIDI0MywgNjAsIDIyLCAyNSwgMjMzLCAyOSwgNzksIDI5LCAzOCwgMjUsIDIzMywgMjksIDc5LCAyOSwgMzgsIDI0MywgCisgICAgNjAsIDc5LCAyOSwgMjIxLCAxNzUsIDc5LCAyOSwgMjExLCAyMDgsIDI5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDI5LCAyNDksIAorICAgIDIyNywgMjksIDIyMCwgMTUyLCAyOSwgMjQ5LCAyMzQsIDI5LCAyMjQsIDIwMiwgMjQ5LCAyMzQsIDI5LCAyMjQsIDE2LCA3OSwgCisgICAgMjksIDIyNiwgMTksIDIyMCwgMTM5LCAyOSwgMjEsIDExMSwgMjksIDIxLCAxMDUsIDI5LCAyMSwgMTU4LCAyOSwgMjEsIAorICAgIDE2MSwgMjksIDIxLCAxOTAsIDI5LCAyMSwgMTk1LCAyOSwgMjEsIDE5OSwgMjksIDIxLCAxOTYsIDI5LCAyMSwgMjAxLCAyOSwgCisgICAgNTQsIDIxNiwgMjQ4LCAyOSwgNTQsIDIxNSwgNzMsIDI5LCA1NCwgMjE2LCAxNjMsIDI5LCA1NCwgMjQ0LCAyMywgMjksIDU0LCAKKyAgICAyNDQsIDEyMiwgMjksIDU0LCAyMTksIDExMywgMjksIDU0LCAyMjAsIDExOCwgMjksIDU0LCAyNDUsIDE5MiwgMjksIDU0LCAKKyAgICAyMjgsIDIwMCwgMjksIDU0LCAyNDAsIDIxNywgMjksIDU0LCAyMTYsIDI0OSwgMjE2LCAxNDgsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjMwLCA0NywgMjksIDMsIDIzMCwgNDMsIDI5LCAzLCAyMzAsIDQ0LCAyOSwgMywgMjMwLCA0NSwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyNTEsIDkxLCAyOSwgMywgMjUxLCA4OCwgMjksIDMsIDI1MSwgODksIDI5LCAzLCAyNTEsIDkwLCAyOSwgMywgMjIxLCAxNzksIAorICAgIDI0MywgMjIwLCAyOSwgMywgMjQzLCAyMTYsIDI5LCAzLCAyNDMsIDIxNywgMjksIDMsIDI0MywgMjE4LCAyOSwgMywgMjIxLCAKKyAgICAxNzksIDIyNCwgMTE3LCAyOSwgMywgMjI0LCAxMTMsIDI5LCAzLCAyMjQsIDExNCwgMjksIDMsIDIyNCwgMTE1LCAyOSwgCisgICAgMjE2LCAzMiwgMTY0LCAyMTAsIDI0NywgMjksIDIxNiwgMzIsIDE2NCwgMjQ4LCA0OSwgMjksIDIxNiwgMzIsIDE2NCwgMjIyLCAKKyAgICAyNDEsIDI5LCAyMTYsIDMyLCAxNjQsIDIxOSwgMjUzLCAyMjIsIDI0MSwgMjksIDIxNiwgMzIsIDE2NCwgMjQ3LCAyNDMsIAorICAgIDI5LCAyMTYsIDMyLCAxNjQsIDIzNCwgMTcwLCAyOSwgMjE2LCAzMiwgMTY0LCAyNTAsIDEwMiwgMjksIDIxNiwgMzIsIDE2NCwgCisgICAgMjQxLCAxODQsIDI5LCAyMTYsIDMyLCAxNjQsIDI0OCwgNDgsIDI5LCAyMTYsIDMyLCAxNjQsIDIzMywgMjAwLCAxNjksIDEsIAorICAgIDYxLCAxNjksIDEsIDc2LCAxNjksIDEsIDc0LCAxNjksIDEsIDc4LCAxNjksIDEsIDY5LCAxNjksIDEsIDIxNCwgMTA1LCAKKyAgICAxNjksIDEsIDI0MywgMTQyLCAxNjksIDEsIDE3NiwgMTY5LCAxLCAyNDMsIDY5LCAxNjksIDEsIDI0MiwgMjIxLCAxNjksIDEsIAorICAgIDI0MiwgMTgxLCAxNjksIDEsIDI0MiwgMTIwLCAxNjksIDEsIDI0MiwgODYsIDE2OSwgMSwgMTYyLCAxNjksIDEsIDI0MSwgCisgICAgMjQ1LCAxNjksIDEsIDI0MSwgMTg3LCAxNjksIDEsIDI0MSwgNzUsIDE2OSwgMSwgMjQwLCAyMjksIDE2OSwgMSwgMjQwLCAKKyAgICAyMDgsIDE2OSwgMSwgMjMzLCAxNDEsIDE2OSwgMSwgMjMzLCA2NCwgMTY5LCAxLCAyMzIsIDI0NywgMTY5LCAxLCAyMzIsIAorICAgIDE2MiwgMTY5LCAxLCAyMzIsIDEwMywgMTY5LCAxLCAyMzIsIDc2LCAxNjksIDEsIDE4NiwgMTY5LCAxLCAyMzEsIDk2LCAKKyAgICAxNjksIDEsIDIzMCwgMjM1LCAxNjksIDEsIDIzMCwgMTY2LCAxNjksIDEsIDIzMCwgMTA3LCAxNjksIDEsIDE5OCwgMTY5LCAKKyAgICAxLCAyNDEsIDk3LCAxNjksIDEsIDIyOSwgMjE4LCAxNjksIDEsIDIyOSwgMTEyLCAxNjksIDEsIDIyOCwgMjM4LCAxNjksIDEsIAorICAgIDIyOCwgNzksIDE2OSwgMSwgMjI3LCAyNDIsIDE2OSwgMSwgMjI3LCAxODAsIDE2OSwgMSwgMjI0LCAzMiwgMTY5LCAxLCAKKyAgICAyMjQsIDE5LCAxNjksIDEsIDIyNCwgMTIsIDE2OSwgMSwgMjI0LCA0LCAxNjksIDEsIDIyMywgMjQ5LCAxNjksIDEsIDIyMywgCisgICAgMjQ3LCAxNjksIDEsIDIwNiwgMTY5LCAxLCAyMjIsIDkzLCAxNjksIDEsIDIyMSwgMTgzLCAxNjksIDEsIDIxOSwgMTkzLCAKKyAgICAxNjksIDEsIDIxOSwgNjAsIDE2OSwgMSwgMjE4LCA4NCwgMTY5LCAxLCAyMTgsIDMsIDE2OSwgMSwgMjQ4LCAyMjksIDE2OSwgCisgICAgMSwgMjE3LCAxMDYsIDE2OSwgMSwgMjQ4LCA5OCwgMTY5LCAxLCAyMTcsIDIzLCAxNjksIDEsIDI0OCwgMTEsIDE2OSwgMSwgCisgICAgMjE2LCAxMTgsIDE2OSwgMSwgMjQ3LCAxNTMsIDE2OSwgMSwgMjQ2LCA4NiwgMTY5LCAxLCAyNDYsIDU4LCAxNjksIDEsIAorICAgIDI0NywgMTY0LCAxNjksIDEsIDIxNiwgNjAsIDE2OSwgMSwgMjE2LCA1OSwgMTY5LCAxLCAyMTYsIDQ4LCAxNjksIDEsIDIxNiwgCisgICAgNDcsIDE2OSwgMSwgMjE2LCA0NiwgMTY5LCAxLCAyMTYsIDQ1LCAxNjksIDEsIDIxNSwgMTg0LCAxNjksIDEsIDIxNSwgMTc5LCAKKyAgICAxNjksIDEsIDIxNSwgMTY4LCAxNjksIDEsIDIxNSwgMTY3LCAxNjksIDEsIDIxNSwgMTY0LCAxNjksIDEsIDIxNSwgMTYzLCAKKyAgICAxNjksIDEsIDIxMiwgNjUsIDE2OSwgMSwgMjEyLCAyMiwgMTY5LCAxLCAyMTEsIDI1MCwgMTY5LCAxLCAyMTEsIDIyNywgCisgICAgMTY5LCAxLCAyMTEsIDE5NSwgMTY5LCAxLCAyMTEsIDE4MywgMTY5LCAxLCAxOTIsIDE2OSwgMSwgMjExLCA0NywgMTY5LCAxLCAKKyAgICAyMTEsIDgsIDE2OSwgMSwgMjEwLCAyNDQsIDE2OSwgMSwgMjEwLCAyMTIsIDE2OSwgMSwgMjEwLCAxNzcsIDE4LCAxOSwgCisgICAgMjQwLCAxNzUsIDE4LCAxOSwgNzYsIDE4LCAxOSwgMjU1LCA0NiwgMTgsIDE5LCA3NCwgMTgsIDE5LCAyMzYsIDQwLCAxOCwgCisgICAgMTksIDc4LCAxOCwgMTksIDIyNiwgMTg3LCAxOCwgMTksIDIxMSwgMTE2LCAyMjYsIDE4NywgMTgsIDE5LCA3MywgMjQ1LCAKKyAgICAyMTcsIDE4LCAxOSwgNzMsIDc0LCAxOCwgMTksIDYxLCAxOCwgMTksIDI1NSwgODIsIDE4LCAxOSwgMjEyLCAyMiwgMTgsIAorICAgIDE5LCAxNTksIDIxMiwgMjIsIDE4LCAxOSwgMjExLCAyNTAsIDE4LCAxOSwgMTU5LCAyMTEsIDI1MCwgMTgsIDE5LCAyMTEsIAorICAgIDI0MiwgMTgsIDE5LCAxNTksIDIxMSwgMjQyLCAxOCwgMTksIDIxMSwgMjI3LCAxOCwgMTksIDE1OSwgMjExLCAyMjcsIDE4LCAKKyAgICAxOSwgMjExLCAyMTUsIDE4LCAxOSwgMTU5LCAyMTEsIDIxNSwgMTgsIDE5LCAyMjksIDE5NSwgMjExLCAyMTUsIDE4LCAxOSwgCisgICAgMjEyLCA2NSwgMTgsIDE5LCAxNTksIDIxMiwgNjUsIDE4LCAxOSwgMjEyLCA2NCwgMTgsIDE5LCAxNTksIDIxMiwgNjQsIDE4LCAKKyAgICAxOSwgMjI5LCAxOTUsIDIxMiwgNjQsIDE4LCAxOSwgMjU0LCAyMTAsIDE4LCAxOSwgMjExLCAxMTYsIDIxMiwgOTgsIDE4LCAKKyAgICAxOSwgMjQyLCAxODcsIDIxOCwgMTMxLCAxOCwgMTksIDQwLCAxNDIsIDE4LCAxOSwgNDAsIDI0MiwgMTQzLCAxOCwgMTksIAorICAgIDQwLCAyNTEsIDE4MywgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgMjE2LCAxNSwgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCAKKyAgICA0MCwgNDQsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCA1MiwgMTQyLCAxOCwgMTksIAorICAgIDQwLCA1MiwgMjE5LCAyNTMsIDY3LCAyMTgsIDkyLCAxOCwgMTksIDQwLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDE4LCAxOSwgCisgICAgNDAsIDIxOSwgMjUzLCAyMDMsIDkxLCAxOCwgMTksIDQwLCAyMjUsIDI1LCAxOCwgMTksIDQwLCAxMjQsIDIxNywgODgsIDE4LCAKKyAgICAxOSwgMjQ1LCAxNTgsIDE4LCAxOSwgMjM2LCA2LCAxOCwgMTksIDIyNiwgMjAwLCAxOCwgMTksIDI1NCwgMTMxLCAxOCwgMTksIAorICAgIDIyNSwgMjI0LCAxOCwgMTksIDIyNiwgOTEsIDE4LCAxOSwgMjI1LCAxMTEsIDE4LCAxOSwgMjI1LCA3NCwgMTgsIDE5LCAKKyAgICAyMjUsIDE5LCAxOCwgMTksIDIyNCwgMjUyLCAxOCwgMTksIDIxMSwgMTE2LCAyMjQsIDI1MiwgMTgsIDE5LCA3MywgMjQxLCAKKyAgICAyMjcsIDE4LCAxOSwgNzMsIDI0MSwgMTg3LCAxOCwgMTksIDE5MSwgMTgsIDE5LCAyMjYsIDkzLCAxOCwgMTksIDIyNCwgCisgICAgMTE1LCAxOCwgMTksIDE1OSwgMjI0LCAxMTUsIDE4LCAxOSwgMjI0LCAxMTMsIDE4LCAxOSwgMTU5LCAyMjQsIDExMywgMTgsIAorICAgIDE5LCAyMjQsIDExMiwgMTgsIDE5LCAxNTksIDIyNCwgMTEyLCAxOCwgMTksIDIyNCwgMTEwLCAxOCwgMTksIDE1OSwgMjI0LCAKKyAgICAxMTAsIDE4LCAxOSwgMjI0LCAxMDksIDE4LCAxOSwgMTU5LCAyMjQsIDEwOSwgMTgsIDE5LCAyMjQsIDExNywgMTgsIDE5LCAKKyAgICAxNTksIDIyNCwgMTE3LCAxOCwgMTksIDIyNCwgMTE2LCAxOCwgMTksIDE1OSwgMjI0LCAxMTYsIDE4LCAxOSwgMjExLCAxMTYsIAorICAgIDIyNCwgMTE2LCAxOCwgMTksIDIyNiwgMTA5LCAxOCwgMTksIDE1OSwgMjI2LCAxMDksIDE4LCAxOSwgNzMsIDI0MiwgNjcsIAorICAgIDE4LCAxOSwgMjE3LCAyMywgMTgsIDE5LCAyMTcsIDEwMCwgMTgsIDE5LCAyMTYsIDExOCwgMTgsIDE5LCAyMTYsIDEwNCwgCisgICAgMTgsIDE5LCAxMTIsIDE4LCAxOSwgMjE2LCAxOCwgMTgsIDE5LCAyMTEsIDExNiwgMjE2LCAxOCwgMTgsIDE5LCA3MywgMjQ4LCAKKyAgICA4NSwgMTgsIDE5LCA3MywgMjQ4LCAxMSwgMTgsIDE5LCAyMTcsIDEwNiwgMTgsIDE5LCAyMTcsIDEwMiwgMTgsIDE5LCAyMTUsIAorICAgIDc4LCAxOCwgMTksIDE1OSwgMjE1LCA3OCwgMTgsIDE5LCAyMTUsIDYyLCAxOCwgMTksIDE1OSwgMjE1LCA2MiwgMTgsIDE5LCAKKyAgICAyMTUsIDYxLCAxOCwgMTksIDE1OSwgMjE1LCA2MSwgMTgsIDE5LCAxMDUsIDE4LCAxOSwgMTU5LCAxMDUsIDE4LCAxOSwgCisgICAgMjE1LCA1NCwgMTgsIDE5LCAxNTksIDIxNSwgNTQsIDE4LCAxOSwgMjE1LCA4MCwgMTgsIDE5LCAxNTksIDIxNSwgODAsIDE4LCAKKyAgICAxOSwgMjE1LCA3OSwgMTgsIDE5LCAxNTksIDIxNSwgNzksIDE4LCAxOSwgMjI5LCAxOTUsIDIxNSwgNzksIDE4LCAxOSwgCisgICAgMjE3LCAxNTMsIDE4LCAxOSwgMjE1LCAxNTIsIDE4LCAxOSwgMjE1LCAxMzYsIDE4LCAxOSwgMjE1LCAxMzQsIDE4LCAxOSwgCisgICAgMjE1LCAxNTcsIDE4LCAxOSwgMjM0LCAxODgsIDE4LCAxOSwgMjM1LCAxMywgMTgsIDE5LCAyMzQsIDk4LCAxOCwgMTksIAorICAgIDIzNCwgODksIDE4LCAxOSwgMjM0LCAzNCwgMTgsIDE5LCAyMzQsIDE2LCAxOCwgMTksIDIxMSwgMTE2LCAyMzQsIDE2LCAxOCwgCisgICAgMTksIDE3NiwgMTgsIDE5LCAyMzUsIDE2LCAxOCwgMTksIDIzMywgMTg0LCAxOCwgMTksIDE1OSwgMjMzLCAxODQsIDE4LCAKKyAgICAxOSwgMjMzLCAxODIsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MiwgMTgsIDE5LCAyMzMsIDE4MSwgMTgsIDE5LCAxNTksIDIzMywgCisgICAgMTgxLCAxOCwgMTksIDIzMywgMTgwLCAxOCwgMTksIDE1OSwgMjMzLCAxODAsIDE4LCAxOSwgMjMzLCAxNzksIDE4LCAxOSwgCisgICAgMTU5LCAyMzMsIDE3OSwgMTgsIDE5LCAyMzMsIDE4OCwgMTgsIDE5LCAxNTksIDIzMywgMTg4LCAxOCwgMTksIDIzMywgMTg3LCAKKyAgICAxOCwgMTksIDE1OSwgMjMzLCAxODcsIDE4LCAxOSwgMjI5LCAxOTUsIDIzMywgMTg3LCAxOCwgMTksIDIzNSwgMjksIDE4LCAKKyAgICAxOSwgMjMzLCAxODksIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCAxODIsIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCA5MCwgMTgsIAorICAgIDE5LCAyMTksIDI5LCAyMzQsIDI5LCAxOCwgMTksIDIxOSwgMjksIDIzNCwgMjU0LCAxOCwgMTksIDI1MCwgMTk4LCAxOCwgCisgICAgMTksIDI1MSwgMzksIDE4LCAxOSwgMjUwLCA1OSwgMTgsIDE5LCAyNTAsIDQ5LCAxOCwgMTksIDI0OSwgMjQ2LCAxOCwgMTksIAorICAgIDI0OSwgMTgyLCAxOCwgMTksIDIxMSwgMTE2LCAyNDksIDE4MiwgMTgsIDE5LCAyNTEsIDQxLCAxOCwgMTksIDI1MSwgNDAsIAorICAgIDE4LCAxOSwgMjQ5LCA4NywgMTgsIDE5LCAxNTksIDI0OSwgODcsIDE4LCAxOSwgMjQ5LCA4NSwgMTgsIDE5LCAxNTksIDI0OSwgCisgICAgODUsIDE4LCAxOSwgMjQ5LCA4NCwgMTgsIDE5LCAxNTksIDI0OSwgODQsIDE4LCAxOSwgMjQ5LCA4MywgMTgsIDE5LCAxNTksIAorICAgIDI0OSwgODMsIDE4LCAxOSwgMjQ5LCA4MiwgMTgsIDE5LCAxNTksIDI0OSwgODIsIDE4LCAxOSwgMjQ5LCA4OSwgMTgsIDE5LCAKKyAgICAxNTksIDI0OSwgODksIDE4LCAxOSwgMjQ5LCA4OCwgMTgsIDE5LCAxNTksIDI0OSwgODgsIDE4LCAxOSwgMjI5LCAxOTUsIAorICAgIDI0OSwgODgsIDE4LCAxOSwgMjUxLCA3NCwgMTgsIDE5LCAyMjEsIDIxMSwgMjE2LCAyMTEsIDE4LCAxOSwgMjMxLCA5NiwgCisgICAgMTgsIDE5LCAyMzEsIDI0MSwgMTgsIDE5LCAyMzAsIDIzNSwgMTgsIDE5LCAyMzAsIDIwNiwgMTgsIDE5LCAyMzAsIDE2NiwgCisgICAgMTgsIDE5LCAyMzAsIDEzNywgMTgsIDE5LCAyMTEsIDExNiwgMjMwLCAxMzcsIDE4LCAxOSwgMTg2LCAxOCwgMTksIDIzMSwgCisgICAgMjQyLCAxOCwgMTksIDIzMCwgNDUsIDE4LCAxOSwgMTU5LCAyMzAsIDQ1LCAxOCwgMTksIDIzMCwgNDMsIDE4LCAxOSwgMTU5LCAKKyAgICAyMzAsIDQzLCAxOCwgMTksIDIzMCwgNDIsIDE4LCAxOSwgMTU5LCAyMzAsIDQyLCAxOCwgMTksIDIzMCwgNDEsIDE4LCAxOSwgCisgICAgMTU5LCAyMzAsIDQxLCAxOCwgMTksIDIzMCwgNDAsIDE4LCAxOSwgMTU5LCAyMzAsIDQwLCAxOCwgMTksIDIzMCwgNDcsIDE4LCAKKyAgICAxOSwgMTU5LCAyMzAsIDQ3LCAxOCwgMTksIDIzMCwgNDYsIDE4LCAxOSwgMTU5LCAyMzAsIDQ2LCAxOCwgMTksIDIyOSwgCisgICAgMTk1LCAyMzAsIDQ2LCAxOCwgMTksIDE5NCwgMTgsIDE5LCAxNTksIDE5NCwgMTgsIDE5LCAyMzAsIDIzOSwgMTgsIDE5LCAKKyAgICAyNTMsIDIxMywgMTk0LCAxOCwgMTksIDIyMSwgMjExLCAxOTQsIDE4LCAxOSwgMjI5LCAxMTIsIDE4LCAxOSwgMjI5LCAyMjksIAorICAgIDE4LCAxOSwgMjI4LCAyMzgsIDE4LCAxOSwgMjI4LCAyMTMsIDE4LCAxOSwgMjI4LCA3OSwgMTgsIDE5LCAyMjgsIDY5LCAxOCwgCisgICAgMTksIDIxMSwgMTE2LCAyMjgsIDY5LCAxOCwgMTksIDE5OCwgMTgsIDE5LCAyMjksIDIzMCwgMTgsIDE5LCAyMjcsIDE3NiwgCisgICAgMTgsIDE5LCAxNTksIDIyNywgMTc2LCAxOCwgMTksIDIyNywgMTc4LCAxOCwgMTksIDE1OSwgMjI3LCAxNzgsIDE4LCAxOSwgCisgICAgMjI3LCAxNzcsIDE4LCAxOSwgMTU5LCAyMjcsIDE3NywgMTgsIDE5LCAyMjksIDE5NSwgMjI3LCAxNzcsIDE4LCAxOSwgMjMwLCAKKyAgICAzMCwgMTgsIDE5LCA3MywgMjI5LCA4NCwgMTgsIDE5LCAyMjgsIDI0MywgMTgsIDE5LCAyMzMsIDY0LCAxOCwgMTksIDIzMywgCisgICAgMTM5LCAxOCwgMTksIDIzMiwgMjQ3LCAxOCwgMTksIDIzMiwgMjMzLCAxOCwgMTksIDIzMiwgMTYyLCAxOCwgMTksIDIzMiwgCisgICAgMTMzLCAxOCwgMTksIDIxMSwgMTE2LCAyMzIsIDEzMywgMTgsIDE5LCAyMzMsIDE0MSwgMTgsIDE5LCAyMzMsIDE0MCwgMTgsIAorICAgIDE5LCAyMzIsIDczLCAxOCwgMTksIDE1OSwgMjMyLCA3MywgMTgsIDE5LCAyMzIsIDcyLCAxOCwgMTksIDE1OSwgMjMyLCA3MiwgCisgICAgMTgsIDE5LCAyMzIsIDcxLCAxOCwgMTksIDE1OSwgMjMyLCA3MSwgMTgsIDE5LCAyMzIsIDcwLCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICA3MCwgMTgsIDE5LCAyMzIsIDY5LCAxOCwgMTksIDE1OSwgMjMyLCA2OSwgMTgsIDE5LCAyMzIsIDc1LCAxOCwgMTksIDE1OSwgCisgICAgMjMyLCA3NSwgMTgsIDE5LCAyMzIsIDc0LCAxOCwgMTksIDE1OSwgMjMyLCA3NCwgMTgsIDE5LCAxNTYsIDE4LCAxOSwgMTU5LCAKKyAgICAxNTYsIDE4LCAxOSwgMTQ3LCAxNTYsIDE4LCAxOSwgMjIxLCAxODMsIDE4LCAxOSwgMjIyLCAzMSwgMTgsIDE5LCAyMTksIAorICAgIDE5MywgMTgsIDE5LCAyMTksIDE3NywgMTgsIDE5LCAyMTksIDYwLCAxOCwgMTksIDIxOSwgNDIsIDE4LCAxOSwgMjExLCAKKyAgICAxMTYsIDIxOSwgNDIsIDE4LCAxOSwgMjA2LCAxOCwgMTksIDIyMiwgMzMsIDE4LCAxOSwgMjE3LCAyNTAsIDE4LCAxOSwgCisgICAgMTU5LCAyMTcsIDI1MCwgMTgsIDE5LCAyMTcsIDI0NCwgMTgsIDE5LCAxNTksIDIxNywgMjQ0LCAxOCwgMTksIDIxNywgMjQzLCAKKyAgICAxOCwgMTksIDE1OSwgMjE3LCAyNDMsIDE4LCAxOSwgMjE3LCAyMzksIDE4LCAxOSwgMTU5LCAyMTcsIDIzOSwgMTgsIDE5LCAKKyAgICAyMTcsIDIzOCwgMTgsIDE5LCAxNTksIDIxNywgMjM4LCAxOCwgMTksIDIxNywgMjU0LCAxOCwgMTksIDE1OSwgMjE3LCAyNTQsIAorICAgIDE4LCAxOSwgMjE3LCAyNTMsIDE4LCAxOSwgMTU5LCAyMTcsIDI1MywgMTgsIDE5LCAyMjksIDE5NSwgMjE3LCAyNTMsIDE4LCAKKyAgICAxOSwgMjIyLCA5MywgMTgsIDE5LCAyNTMsIDIxMywgMjIyLCA5MywgMTgsIDE5LCAyMTcsIDI1NSwgMTgsIDE5LCAyNTEsIAorICAgIDIyNiwgMjIyLCA5MywgMTgsIDE5LCAyMzAsIDEzMiwgMjE5LCAxMTAsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOSwgMTAxLCAxOCwgCisgICAgMTksIDIyOSwgMTk1LCAyMjIsIDkxLCAxOCwgMTksIDIyOSwgMTk1LCAyMTgsIDIzNywgMTgsIDE5LCAyMjksIDE5NSwgMjE4LCAKKyAgICA4NywgMTgsIDE5LCAyMjksIDE5NSwgMjE5LCAxMDAsIDE4LCAxOSwgMjI5LCAxOTUsIDIyMSwgMTg2LCAxOCwgMTksIDIyMCwgCisgICAgNjUsIDE4LCAxOSwgMjIwLCAzNCwgMTgsIDE5LCAyMjAsIDI5LCAxOCwgMTksIDIyMCwgOSwgMTgsIDE5LCAyMjAsIDMsIDE4LCAKKyAgICAxOSwgMjIwLCAxMDQsIDE4LCAxOSwgMjIwLCAxMDAsIDE4LCAxOSwgMjE5LCAyMDgsIDE4LCAxOSwgMTU5LCAyMTksIDIwOCwgCisgICAgMTgsIDE5LCAyMTksIDIwNywgMTgsIDE5LCAxNTksIDIxOSwgMjA3LCAxOCwgMTksIDIxOSwgMjA2LCAxOCwgMTksIDE1OSwgCisgICAgMjE5LCAyMDYsIDE4LCAxOSwgMjE5LCAyMDUsIDE4LCAxOSwgMTU5LCAyMTksIDIwNSwgMTgsIDE5LCAyMTksIDIwNCwgMTgsIAorICAgIDE5LCAxNTksIDIxOSwgMjA0LCAxOCwgMTksIDIxOSwgMjEwLCAxOCwgMTksIDE1OSwgMjE5LCAyMTAsIDE4LCAxOSwgMjE5LCAKKyAgICAyMDksIDE4LCAxOSwgMTU5LCAyMTksIDIwOSwgMTgsIDE5LCAyMjAsIDEwNiwgMTgsIDE5LCAyMTEsIDQ3LCAxOCwgMTksIAorICAgIDIxMSwgMTAxLCAxOCwgMTksIDIxMSwgOCwgMTgsIDE5LCAyMTAsIDI1NSwgMTgsIDE5LCAyMTAsIDI0NCwgMTgsIDE5LCAKKyAgICAyMTAsIDIyOSwgMTgsIDE5LCAyMTEsIDExNiwgMjEwLCAyMjksIDE4LCAxOSwgMTkyLCAxOCwgMTksIDIxMSwgMTAzLCAxOCwgCisgICAgMTksIDIxMCwgMTc0LCAxOCwgMTksIDE1OSwgMjEwLCAxNzQsIDE4LCAxOSwgMjEwLCAxNzMsIDE4LCAxOSwgMTU5LCAyMTAsIAorICAgIDE3MywgMTgsIDE5LCAyMTAsIDE3MiwgMTgsIDE5LCAxNTksIDIxMCwgMTcyLCAxOCwgMTksIDIxMCwgMTcxLCAxOCwgMTksIAorICAgIDE1OSwgMjEwLCAxNzEsIDE4LCAxOSwgMjEwLCAxNzAsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MCwgMTgsIDE5LCAyMTAsIDE3NiwgCisgICAgMTgsIDE5LCAxNTksIDIxMCwgMTc2LCAxOCwgMTksIDIxMCwgMTc1LCAxOCwgMTksIDE1OSwgMjEwLCAxNzUsIDE4LCAxOSwgCisgICAgMjI5LCAxOTUsIDIxMCwgMTc1LCAxOCwgMTksIDIxMSwgMTE3LCAxOCwgMTksIDI1MiwgMTIsIDIxMSwgMTE3LCAxOCwgMTksIAorICAgIDE1OSwgMjExLCAxMTcsIDE4LCAxOSwgMjIxLCAyMTEsIDIxMSwgOCwgMTgsIDE5LCAyMjMsIDEzMSwgMTgsIDE5LCAyMjMsIAorICAgIDIyNiwgMjIzLCAxMzEsIDE4LCAxOSwgMTU5LCAyMzMsIDY0LCAxOCwgMTksIDIyMywgMTg2LCAxOCwgMTksIDIyMywgMzgsIAorICAgIDE4LCAxOSwgMjIyLCAyNDIsIDE4LCAxOSwgMjIyLCAyMTMsIDE4LCAxOSwgMjIyLCAxOTksIDE4LCAxOSwgMTU5LCAyMzIsIAorICAgIDE2MiwgMTgsIDE5LCAyMDUsIDE4LCAxOSwgMjIzLCAxODcsIDE4LCAxOSwgMTU5LCAyMzMsIDE0MSwgMTgsIDE5LCAyMjIsIAorICAgIDExMCwgMTgsIDE5LCAxNTksIDIyMiwgMTEwLCAxOCwgMTksIDE1MywgMTgsIDE5LCAxNTksIDE1MywgMTgsIDE5LCAxNDcsIAorICAgIDE1MywgMTgsIDE5LCAyNDQsIDE2MiwgMTgsIDE5LCAyNDQsIDIwMSwgMTgsIDE5LCAyNDQsIDEyOSwgMTgsIDE5LCAyNDQsIAorICAgIDExNiwgMTgsIDE5LCAyNDQsIDUxLCAxOCwgMTksIDI0NCwgNDIsIDE4LCAxOSwgMjQ0LCAyMDQsIDE4LCAxOSwgMjQ0LCAKKyAgICAyMDMsIDE4LCAxOSwgMjQzLCAyMTksIDE4LCAxOSwgMTU5LCAyNDMsIDIxOSwgMTgsIDE5LCAyNDUsIDE0LCAxOCwgMTksIAorICAgIDIxNiwgMTk2LCAxOCwgMTksIDIzMCwgMjgsIDIxNiwgMTk2LCAxOCwgMTksIDIxNiwgMTc2LCAxOCwgMTksIDIzMCwgMjgsIAorICAgIDIxNiwgMTc2LCAxOCwgMTksIDIxNiwgMTcyLCAxOCwgMTksIDIzMCwgMjgsIDIxNiwgMTcyLCAxOCwgMTksIDIxNiwgMTU3LCAKKyAgICAxOCwgMTksIDIxNiwgMTU0LCAxOCwgMTksIDIxNiwgMjA5LCAxOCwgMTksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMTI4LCAKKyAgICAxOCwgMTksIDE1OSwgMjE2LCAxMjgsIDE4LCAxOSwgMjE2LCAyMTEsIDE4LCAxOSwgMjE1LCAxNDMsIDE4LCAxOSwgMjE1LCAKKyAgICAxNDEsIDE4LCAxOSwgMjE1LCAxNDAsIDE4LCAxOSwgMjE1LCAxNDUsIDE4LCAxOSwgMjE1LCAxNDYsIDE4LCAxOSwgMjE1LCAKKyAgICA1MiwgMTgsIDE5LCAyMTUsIDUxLCAxOCwgMTksIDIxNSwgNTAsIDE4LCAxOSwgMjE1LCA1MywgMTgsIDE5LCAyMjcsIDE5NywgCisgICAgMjQxLCAyNDUsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgMTg3LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDE2OCwgMTgsIDE5LCAKKyAgICAyMjcsIDE5NywgMjQxLCA3NSwgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCA2MCwgMTgsIDE5LCAyMjcsIDE5NywgMTYyLCAxOCwgCisgICAgMTksIDIyNywgMTk3LCAyNDIsIDUzLCAxOCwgMTksIDIyNywgMTk3LCAyNDIsIDY3LCAxOCwgMTksIDIyNywgMTk2LCAyNDIsIAorICAgIDY3LCAxOCwgMTksIDI0MSwgMTYxLCAxOCwgMTksIDIyNCwgODcsIDE4LCAxOSwgMjI0LCA1NiwgMTgsIDE5LCAyMjQsIDUxLCAKKyAgICAxOCwgMTksIDIyNCwgNDUsIDE4LCAxOSwgMjI0LCA0MCwgMTgsIDE5LCAyMjQsIDkxLCAxOCwgMTksIDIyNCwgOTAsIDE4LCAKKyAgICAxOSwgMjI0LCA5OSwgMTgsIDE5LCAyMTYsIDU2LCAxOCwgMTksIDIxNiwgNTQsIDE4LCAxOSwgMjE2LCA1MywgMTgsIDE5LCAKKyAgICAyMTYsIDU3LCAxOCwgMTksIDE1OSwgMjIzLCAxMzEsIDE4LCAxOSwgMTU5LCAyMjMsIDM4LCAxOCwgMTksIDE1OSwgMjIyLCAKKyAgICAyMTMsIDE4LCAxOSwgMTU5LCAyMDUsIDE4LCAxOSwgMjI5LCA4MCwgMTgsIDE5LCAyMjksIDMyLCAxOCwgMTksIDIyOSwgMjgsIAorICAgIDE4LCAxOSwgMjI5LCA5LCAxOCwgMTksIDIyOSwgNCwgMTgsIDE5LCAyMjksIDgyLCAxOCwgMTksIDIyOSwgODEsIDE4LCAxOSwgCisgICAgMjI5LCA4NCwgMTgsIDE5LCAyMjgsIDEwOCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCA2NSwgMTgsIDE5LCAyMjEsIDIxMSwgCisgICAgMjIwLCAzNCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCA5LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDEwNCwgMTgsIDE5LCAKKyAgICAyMTEsIDIxMywgMjE2LCAxOTYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTc2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAorICAgIDE1NywgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMDksIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjExLCAxOCwgMTksIDIzMiwgCisgICAgMjU0LCAxOCwgMTksIDIzMiwgMjUzLCAxOCwgMTksIDIzMiwgMjUyLCAxOCwgMTksIDIzMiwgMjUxLCAxOCwgMTksIDIzMywgCisgICAgNCwgMTgsIDE5LCAyMzMsIDMsIDE4LCAxOSwgMjMzLCA1LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE5NiwgMTgsIDE5LCAKKyAgICAyMTYsIDIxMCwgMjE2LCAxNzYsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTcyLCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIAorICAgIDE1NywgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxNTQsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMjA5LCAxOCwgMTksIDIxNiwgCisgICAgMjEwLCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAyMTEsIDE4LCAxOSwgMjU0LCAxOTgsIDI1MywgMTY2LCAKKyAgICAxOCwgMTksIDI1MSwgMjI2LCA3NiwgMTgsIDE5LCAyNTEsIDIyNiwgNzQsIDE4LCAxOSwgMjUxLCAyMjYsIDc4LCAxOCwgMTksIAorICAgIDI1MSwgMjI2LCA2MSwgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCAyMiwgMTgsIDE5LCAyNTEsIDIyNiwgMjExLCAyNTAsIDE4LCAKKyAgICAxOSwgMjUxLCAyMjYsIDIxMSwgMjI3LCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDY1LCAxOCwgMTksIDI1MSwgMjI2LCAyMjksIAorICAgIDExMiwgMTgsIDE5LCAyNTEsIDIyNiwgMjI4LCAyMzgsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOCwgNzksIDE4LCAxOSwgMjUxLCAKKyAgICAyMjYsIDE5OCwgMTgsIDE5LCAyNTEsIDIyNiwgMjM0LCAxODgsIDE4LCAxOSwgMjUxLCAyMjYsIDIzNCwgOTgsIDE4LCAxOSwgCisgICAgMjUxLCAyMjYsIDIzNCwgMzQsIDE4LCAxOSwgMjUxLCAyMjYsIDE3NiwgMTgsIDE5LCAyMjEsIDIxMSwgMjQxLCAyNDUsIDE4LCAKKyAgICAxOSwgMjIxLCAyMTEsIDI0MSwgMTg3LCAxOCwgMTksIDIyMSwgMjExLCAyNDEsIDc1LCAxOCwgMTksIDIyMSwgMjExLCAxNjIsIAorICAgIDE4LCAxOSwgNzMsIDI0MiwgMjI3LCAxOCwgMTksIDczLCAyNDIsIDIzMSwgMTgsIDE5LCA3MywgMjQyLCAyNDMsIDE4LCAxOSwgCisgICAgNzMsIDI0MiwgMjQyLCAxOCwgMTksIDczLCAyNDIsIDIzMiwgMTgsIDE5LCA3MywgMjQzLCAwLCAxOCwgMTksIDczLCAyMjIsIAorICAgIDE0MiwgMTgsIDE5LCA3MywgMjIyLCAyMTMsIDE4LCAxOSwgNzMsIDIyMywgMTMxLCAxOCwgMTksIDczLCAyMjMsIDExMSwgCisgICAgMTgsIDE5LCA3MywgMjIzLCAzOCwgMTgsIDE5LCA3MywgMjA1LCAxOCwgMTksIDczLCAyMTEsIDE5NSwgMTgsIDE5LCA3MywgCisgICAgMjExLCAyMjcsIDE4LCAxOSwgNzMsIDIxMiwgMjIsIDE4LCAxOSwgNzMsIDIxMiwgMTcsIDE4LCAxOSwgNzMsIDIxMSwgMjUwLCAKKyAgICAxOCwgMTksIDczLCAyMTIsIDY1LCAxOCwgMTksIDczLCAyNDAsIDIwMSwgMTgsIDE5LCA3MywgMjQwLCAyMDIsIDE4LCAxOSwgCisgICAgNzMsIDI0MCwgMjA1LCAxOCwgMTksIDczLCAyNDAsIDIwNCwgMTgsIDE5LCA3MywgMjQwLCAyMDMsIDE4LCAxOSwgNzMsIAorICAgIDI0MCwgMjA3LCAxOCwgMTksIDczLCAyMTYsIDEzNywgMTgsIDE5LCA3MywgMjE2LCAxNTcsIDE4LCAxOSwgNzMsIDIxNiwgCisgICAgMTk2LCAxOCwgMTksIDczLCAyMTYsIDE5NSwgMTgsIDE5LCA3MywgMjE2LCAxNzYsIDE4LCAxOSwgNzMsIDIxNiwgMjA5LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDEyNCwgMTgsIDE5LCA3MywgMjE1LCAxMzQsIDE4LCAxOSwgNzMsIDIxNSwgMTUyLCAxOCwgMTksIAorICAgIDczLCAyMTUsIDE1MSwgMTgsIDE5LCA3MywgMjE1LCAxMzYsIDE4LCAxOSwgNzMsIDIxNSwgMTU3LCAxOCwgMTksIDczLCAKKyAgICAyMjQsIDE1MywgMTgsIDE5LCA3MywgMjI1LCAxOSwgMTgsIDE5LCA3MywgMjI1LCAyMjQsIDE4LCAxOSwgNzMsIDIyNSwgCisgICAgMjE0LCAxOCwgMTksIDczLCAyMjUsIDExMSwgMTgsIDE5LCA3MywgMTkxLCAxOCwgMTksIDczLCAyMjYsIDEwOSwgMTgsIDE5LCAKKyAgICA3MywgMjQyLCAxMjAsIDE4LCAxOSwgNzMsIDI0MiwgMTgxLCAxOCwgMTksIDczLCAyNDMsIDY5LCAxOCwgMTksIDczLCAyNDMsIAorICAgIDYyLCAxOCwgMTksIDczLCAyNDIsIDIyMSwgMTgsIDE5LCA3MywgMjQzLCAxNDIsIDE4LCAxOSwgNzMsIDIzNCwgMTA2LCAxOCwgCisgICAgMTksIDczLCAyMzQsIDExMSwgMTgsIDE5LCA3MywgMjM0LCAxMjUsIDE4LCAxOSwgNzMsIDIzNCwgMTI0LCAxOCwgMTksIDczLCAKKyAgICAyMzQsIDExOCwgMTgsIDE5LCA3MywgMjM0LCAxMzgsIDE4LCAxOSwgNzMsIDIzNCwgNDcsIDE4LCAxOSwgNzMsIDIzNCwgNDgsIAorICAgIDE4LCAxOSwgNzMsIDIzNCwgNTEsIDE4LCAxOSwgNzMsIDIzNCwgNTAsIDE4LCAxOSwgNzMsIDIzNCwgNDksIDE4LCAxOSwgCisgICAgNzMsIDIzNCwgNTIsIDE4LCAxOSwgNzMsIDIzNCwgNTMsIDE4LCAxOSwgNzMsIDIyNywgMjQyLCAxOCwgMTksIDczLCAyMjgsIAorICAgIDc5LCAxOCwgMTksIDczLCAyMjksIDExMiwgMTgsIDE5LCA3MywgMjI5LCAxMDgsIDE4LCAxOSwgNzMsIDIyOCwgMjM4LCAxOCwgCisgICAgMTksIDczLCAxOTgsIDE4LCAxOSwgNzMsIDIzMCwgMTA3LCAxOCwgMTksIDczLCAyMzAsIDE2NiwgMTgsIDE5LCA3MywgMjMxLCAKKyAgICA5NiwgMTgsIDE5LCA3MywgMjMxLCA4NSwgMTgsIDE5LCA3MywgMjMwLCAyMzUsIDE4LCAxOSwgNzMsIDE4NiwgMTgsIDE5LCAKKyAgICA3MywgMjEwLCAyMTIsIDE4LCAxOSwgNzMsIDIxMCwgMjQ0LCAxOCwgMTksIDczLCAyMTEsIDQ3LCAxOCwgMTksIDczLCAyMTEsIAorICAgIDQ0LCAxOCwgMTksIDczLCAyMTEsIDgsIDE4LCAxOSwgNzMsIDE5MiwgMTgsIDE5LCA3MywgMjM1LCA1NywgMTgsIDE5LCAKKyAgICAyMjEsIDIxMSwgMjM1LCA1NywgMTgsIDE5LCA3MywgMjM1LCA3NCwgMTgsIDE5LCA3MywgMjM1LCAxMzIsIDE4LCAxOSwgNzMsIAorICAgIDIzNSwgMTMwLCAxOCwgMTksIDczLCAyMzUsIDExNCwgMTgsIDE5LCAyMjEsIDIxMSwgMjM1LCAxMTQsIDE4LCAxOSwgNzMsIAorICAgIDIzNSwgMTQ3LCAxOCwgMTksIDczLCAyMzUsIDg3LCAxOCwgMTksIDczLCAyMzUsIDkxLCAxOCwgMTksIDczLCAyMzUsIDEwMSwgCisgICAgMTgsIDE5LCA3MywgMjM1LCAxMDAsIDE4LCAxOSwgNzMsIDIzNSwgOTksIDE4LCAxOSwgNzMsIDIzNSwgMTAyLCAxOCwgMTksIAorICAgIDczLCAyMzIsIDEwMywgMTgsIDE5LCA3MywgMjMyLCAxNjIsIDE4LCAxOSwgNzMsIDIzMywgNjQsIDE4LCAxOSwgNzMsIDIzMywgCisgICAgNTYsIDE4LCAxOSwgNzMsIDIzMiwgMjQ3LCAxOCwgMTksIDczLCAyMzMsIDE0MSwgMTgsIDE5LCA3MywgMjQ3LCAxNTcsIDE4LCAKKyAgICAxOSwgNzMsIDI0NywgMTU4LCAxOCwgMTksIDczLCAyNDcsIDE2MywgMTgsIDE5LCA3MywgMjQ3LCAxNjIsIDE4LCAxOSwgNzMsIAorICAgIDI0NywgMTU5LCAxOCwgMTksIDczLCAyNDcsIDE2NCwgMTgsIDE5LCA3MywgMjMyLCAyNTAsIDE4LCAxOSwgNzMsIDIzMiwgCisgICAgMjUyLCAxOCwgMTksIDczLCAyMzMsIDAsIDE4LCAxOSwgNzMsIDIzMiwgMjU1LCAxOCwgMTksIDczLCAyMzIsIDI1NCwgMTgsIAorICAgIDE5LCA3MywgMjMzLCA0LCAxOCwgMTksIDczLCAyMTYsIDUxLCAxOCwgMTksIDczLCAyMTYsIDUzLCAxOCwgMTksIDczLCAKKyAgICAyMTYsIDU2LCAxOCwgMTksIDczLCAyMTYsIDU1LCAxOCwgMTksIDczLCAyMTYsIDU0LCAxOCwgMTksIDczLCAyMTYsIDU3LCAKKyAgICAxOCwgMTksIDczLCAyMTYsIDQ2LCAxOCwgMTksIDczLCAyMTYsIDQ3LCAxOCwgMTksIDczLCAyMTYsIDU5LCAxOCwgMTksIAorICAgIDczLCAyMTYsIDU4LCAxOCwgMTksIDczLCAyMTYsIDQ4LCAxOCwgMTksIDczLCAyMTYsIDYwLCAxOCwgMTksIDczLCAyMTAsIAorICAgIDEzLCAxOCwgMTksIDczLCAyMTAsIDIzLCAxOCwgMTksIDczLCAyMTAsIDk0LCAxOCwgMTksIDczLCAyMTAsIDkyLCAxOCwgCisgICAgMTksIDczLCAyMTAsIDQ0LCAxOCwgMTksIDczLCAyMTAsIDExNiwgMTgsIDE5LCA3MywgMjEwLCAxNTksIDE4LCAxOSwgNzMsIAorICAgIDY1LCAyMTAsIDE1OSwgMTgsIDE5LCA3MywgMjQ2LCAzNiwgMTgsIDE5LCA3MywgMjQ2LCAzNywgMTgsIDE5LCA3MywgMjQ2LCAKKyAgICA0NCwgMTgsIDE5LCA3MywgMjQ2LCA0MywgMTgsIDE5LCA3MywgMjQ2LCAzOSwgMTgsIDE5LCA3MywgMjQ2LCA0NiwgMTgsIAorICAgIDE5LCA3MywgMjE4LCA4NCwgMTgsIDE5LCA3MywgMjE5LCA2MCwgMTgsIDE5LCA3MywgMjIxLCAxODMsIDE4LCAxOSwgNzMsIAorICAgIDIyMSwgMTcyLCAxOCwgMTksIDczLCAyMTksIDE5MywgMTgsIDE5LCA3MywgMjA2LCAxOCwgMTksIDczLCAyMTksIDIyNywgCisgICAgMTgsIDE5LCA3MywgMjIwLCA5LCAxOCwgMTksIDczLCAyMjAsIDY1LCAxOCwgMTksIDczLCAyMjAsIDYzLCAxOCwgMTksIDczLCAKKyAgICAyMjAsIDM0LCAxOCwgMTksIDczLCAyMjAsIDEwNCwgMTgsIDE5LCA3MywgMjIwLCAxMDYsIDE4LCAxOSwgNzMsIDIxNSwgCisgICAgMTY0LCAxOCwgMTksIDczLCAyMTUsIDE2NywgMTgsIDE5LCA3MywgMjE1LCAxNzksIDE4LCAxOSwgNzMsIDIxNSwgMTc4LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDE2OCwgMTgsIDE5LCA3MywgMjE1LCAxODQsIDE4LCAxOSwgNzMsIDI1MCwgNzcsIDE4LCAxOSwgCisgICAgNzMsIDI1MCwgOTQsIDE4LCAxOSwgNzMsIDI1MCwgMTM5LCAxOCwgMTksIDczLCAyNTAsIDEzNiwgMTgsIDE5LCA3MywgMjUwLCAKKyAgICAxMTgsIDE4LCAxOSwgNzMsIDI1MCwgMTY1LCAxOCwgMTksIDczLCAyMTUsIDEyNywgMTgsIDE5LCA3MywgMjE1LCAxMjgsIAorICAgIDE4LCAxOSwgNzMsIDIxNSwgMTMxLCAxOCwgMTksIDczLCAyMTUsIDEzMCwgMTgsIDE5LCA3MywgMjE1LCAxMjksIDE4LCAxOSwgCisgICAgNzMsIDIxNSwgMTMyLCAxOCwgMTksIDI1MCwgMTE5LCA1MCwgMTgsIDE5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE4LCAxOSwgCisgICAgMjI0LCA4MywgMTgsIDE5LCAyMjksIDc4LCAxOCwgMTksIDIyOCwgMTA1LCAxOCwgMTksIDIyOCwgMTA0LCAxOCwgMTksIAorICAgIDIyOCwgMTAzLCAxOCwgMTksIDIyOCwgMTAyLCAxOCwgMTksIDIyOCwgMTA3LCAxOCwgMTksIDIyOCwgMTA2LCAxOCwgMTksIAorICAgIDIxMSwgMjEzLCAyMTYsIDEyNiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCisgICAgMTI0LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMywgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjIsIDE4LCAxOSwgMjExLCAKKyAgICAyMTMsIDIxNiwgMTI5LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyOCwgMTgsIDE5LCAyMTEsIDIxMywgNDAsIDIxNiwgCisgICAgMjExLCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDk4LCAyMjYsIDIzMCwgMjE5LCAyMSwgNzksIDIyNiwgMjMwLCAxLCAyNTIsIAorICAgIDU2LCAyMjYsIDIzMCwgMSwgMjMyLCA5MiwgMjI2LCAyMzAsIDEsIDI0NCwgMTU5LCAyMjYsIDIzMCwgMSwgMjIyLCAxNywgCisgICAgMjI2LCAyMzAsIDEsIDIyOCwgMTk4LCAyMjYsIDIzMCwgMSwgMjE0LCAyMjYsIDIyNiwgMjMwLCAxLCAyNDgsIDIwNSwgMjI2LCAKKyAgICAyMzAsIDEsIDIxNiwgODEsIDIyNiwgMjMwLCAxLCAyNDksIDIzNywgMjI2LCAyMzAsIDEsIDI1MCwgMTg4LCAyMjYsIDIzMCwgCisgICAgMSwgMjMwLCA5NiwgMjI2LCAyMzAsIDEsIDI0MiwgMTYzLCAyMjYsIDIzMCwgMSwgMjI5LCA2OCwgMjI2LCAyMzAsIDEsIAorICAgIDIxOCwgMTI0LCAyMjYsIDIzMCwgMSwgMjIyLCAxMzcsIDIyNiwgMjMwLCAxLCAyNTQsIDIwNywgMjI2LCAyMzAsIDEsIDIyNiwgCisgICAgMTkxLCAyMjYsIDIzMCwgMSwgMjE0LCAxNTAsIDIyNiwgMjMwLCAxLCAyNDUsIDIzOSwgMjI2LCAyMzAsIDEsIDIzNSwgMTk1LCAKKyAgICAyMjYsIDIzMCwgMSwgMjQ1LCAyNDAsIDIyNiwgMjMwLCAxLCAyMjYsIDE2MiwgMjI2LCAyMzAsIDEsIDIxNCwgMjA2LCAyMjYsIAorICAgIDIzMCwgMSwgMjM2LCA0NiwgMjI2LCAyMzAsIDEsIDI0NSwgMjM3LCAyMjYsIDIzMCwgMSwgMjI1LCAyMDUsIDIyNiwgMjMwLCAKKyAgICAyNDQsIDE1OCwgNzksIDIyNiwgMjMwLCAyMjMsIDUyLCAyNDQsIDE1OCwgNzksIDE3OCwgMSwgMjQ0LCAxNDksIDI0NCwgCisgICAgMTQxLCAyNDQsIDE2MywgMjQ1LCAxNCwgMTc4LCAxLCAyMTQsIDEwNSwgMTc4LCAxLCAyMTQsIDEzNSwgMjE0LCAxNTEsIDY5LCAKKyAgICAxNzgsIDEsIDIxMCwgMjE0LCAxNzgsIDEsIDIxMSwgMTE3LCAxNzgsIDEsIDIxMiwgOTgsIDE3OCwgMSwgMjE2LCAxMzEsIAorICAgIDIxNiwgMTMwLCAyMTYsIDE1MiwgMTc4LCAxLCAyNDUsIDY3LCAxNzgsIDEsIDI1NCwgMTAxLCA2MSwgMTc4LCAxLCAyMjYsIAorICAgIDE0NywgNzgsIDE3OCwgMSwgMjU1LCAyNiwgNjEsIDE3OCwgMSwgMjU0LCAyMzYsIDE3OCwgMSwgMjMyLCAxMzksIDc4LCAKKyAgICAxNzgsIDEsIDIxOSwgMjQ2LCA3OCwgMTc4LCAxLCA3OCwgMTc4LCAxLCAyMjYsIDIzOCwgMTc4LCAxLCAyMjYsIDIwMCwgCisgICAgMTc4LCAxLCAyMjMsIDE2NywgMjIzLCAxODAsIDIyMywgOTcsIDE1MywgMTc4LCAxLCAyMzQsIDE5OSwgMTc4LCAxLCAyNTAsIAorICAgIDE4NSwgMTc4LCAxLCAyMzQsIDIwMCwgMjM1LCAyOSwgMTc4LCAxLCAyNDMsIDIwOSwgMTc4LCAxLCAyNDUsIDE0NiwgMTc4LCAKKyAgICAxLCAyNDMsIDY1LCAyNDIsIDczLCAyNDMsIDIwOSwgMTc4LCAxLCAyNDMsIDEwMywgMTc4LCAxLCAyMTEsIDE4OCwgMjExLCAKKyAgICAxODIsIDIxMiwgOTgsIDE3OCwgMSwgMjQyLCA0NSwgMjQyLCA2NywgMTc4LCAxLCAyNDIsIDQ5LCAyNDIsIDY3LCAxNzgsIDEsIAorICAgIDIzMiwgMTQxLCAyNDIsIDY3LCAxNzgsIDEsIDIxOSwgMjQ5LCAyNDIsIDY3LCAxNzgsIDEsIDIyOSwgMTkwLCAyMjcsIDE2MSwgCisgICAgMjI5LCAxOTEsIDIzMCwgMzAsIDE3OCwgMSwgMjE5LCAyNDcsIDIzMCwgMzAsIDE3OCwgMSwgMjQ2LCAxMjMsIDE3OCwgMSwgCisgICAgMjM1LCAxNzUsIDIzNSwgMTc5LCAyMzUsIDE2OCwgNzQsIDE3OCwgMSwgNzYsIDE3OCwgMSwgMjM1LCAxMjMsIDIzNSwgMTUwLCAKKyAgICAxNzgsIDEsIDI0MywgNTAsIDE3OCwgMSwgMjMyLCAxNDIsIDI1NCwgMjUyLCAxNzgsIDEsIDIxOSwgMjUxLCA2MSwgMTc4LCAKKyAgICAxLCAyMzUsIDE2MCwgMjQ1LCAxMjEsIDE3OCwgMSwgMjI1LCAxNjcsIDIyNSwgMTg5LCAyMjYsIDEwOSwgMTc4LCAxLCAyNTQsIAorICAgIDE3MiwgMjQ1LCAxMTksIDE3OCwgMSwgMjE5LCAyNiwgMjIyLCA5MywgMTc4LCAxLCAyMTksIDE4MSwgMjMyLCAxMzgsIDIyMiwgCisgICAgOTMsIDE3OCwgMSwgMjE5LCAyNDUsIDIyMiwgOTMsIDE3OCwgMSwgMjUxLCA3NCwgMTc4LCAxLCAyMTAsIDE1OSwgMTc4LCAxLCAKKyAgICAyMTYsIDY0LCAyMTYsIDc0LCAyMTUsIDQxLCAyMTcsIDE1MywgMTc4LCAxLCAyMTksIDI0NCwgMjE3LCAxNTMsIDE3OCwgMSwgCisgICAgMjQ5LCA2OCwgMTc4LCAxLCAyNTIsIDM5LCAyNTIsIDQyLCAyNTEsIDIzMiwgMjUzLCAxNjYsIDE3OCwgMSwgMjE5LCAyNTAsIAorICAgIDI1MywgMTY2LCAxNzgsIDEsIDI0NiwgMTIyLCAxNzgsIDEsIDIyNiwgMTc1LCAxNzgsIDEsIDI0NSwgMjA0LCAyNDUsIDIwNiwgCisgICAgNzYsIDE3OCwgMSwgMjMxLCAxODMsIDIzMSwgMTkxLCAxOTQsIDE3OCwgMSwgMjMyLCAxNDAsIDE5NCwgMTc4LCAxLCAyMTksIAorICAgIDI0OCwgMTk0LCAxNzgsIDEsIDIzMywgNzksIDIzMywgMTIwLCAyMzIsIDE0OSwgMTU2LCAxNzgsIDEsIDI0NiwgMTI0LCAKKyAgICAxNzgsIDEsIDIzNSwgMjM3LCAxNzgsIDEsIDIzNSwgMjM4LCAxNzgsIDEsIDI0OCwgMjE4LCAyNDgsIDIyMywgMjQ5LCA2OCwgCisgICAgMTc4LCAxLCAyMjYsIDE0MiwgMjQ1LCA2NiwgNzgsIDE3OCwgMSwgMjQ1LCAyMzUsIDE3OCwgMSwgMjM1LCAxOTQsIDE3OCwgCisgICAgMSwgMjQ5LCA4NiwgMTc4LCAxLCAyNTEsIDI1LCAxNzgsIDEsIDI1MCwgMTk3LCAxNzgsIDEsIDIxOCwgMTYzLCAxNzgsIDEsIAorICAgIDIzMiwgMTM3LCAxNzgsIDEsIDIxOSwgMjQzLCAxNzgsIDEsIDI0MCwgMTE3LCAxNzgsIDEsIDIyNCwgOTksIDE3OCwgMSwgCisgICAgMjExLCAxNzgsIDE3OCwgMjE5LCAxNTcsIDIyNCwgMTQzLCAxNzgsIDIzMCwgOTAsIDIyNCwgMTQzLCAxNzgsIDI0OSwgMTM5LCAKKyAgICAyMjQsIDE0MywgMTc4LCAyNTQsIDE0LCA4NywgMTc4LCAyMTUsIDgyLCA4NywgMTc4LCAyNTIsIDU0LCA4NywgMjE3LCA4NCwgCisgICAgMSwgNjEsIDIxNywgODQsIDEsIDc0LCAyMTcsIDg0LCAxLCA2OSwgMjE3LCA4NCwgMSwgMTc2LCAyMTcsIDg0LCAxLCAyNDMsIAorICAgIDE0MiwgMjE3LCA4NCwgMSwgMjI5LCA4MiwgMjE3LCA4NCwgMSwgMjE3LCAxMDYsIDIxNywgODQsIDEsIDI0OCwgMjI5LCAKKyAgICAyMTcsIDg0LCAxLCAxOTgsIDIxNywgODQsIDEsIDE5MSwgMjE3LCA4NCwgMSwgMjUyLCAxOTksIDIxNywgODQsIDEsIDE4NiwgCisgICAgMjE3LCA4NCwgMSwgMTkyLCAyMTcsIDg0LCAxLCAyMzMsIDE0MSwgMjE3LCA4NCwgMSwgMjEyLCA2NSwgMjE3LCA4NCwgMSwgCisgICAgMjA2LCAyMTcsIDg0LCAxLCAxNjIsIDIxNywgODQsIDI1LCA1LCA3NCwgMjE3LCA4NCwgMjUsIDUsIDY5LCAyMTcsIDg0LCA1LCAKKyAgICAyMTMsIDE1MiwgMjQyLCAxNCwgMSwgNjEsIDI0MiwgMTQsIDEsIDc0LCAyNDIsIDE0LCAxLCA2OSwgMjQyLCAxNCwgMSwgCisgICAgMTc2LCAyNDIsIDE0LCAxLCAyNDMsIDE0MiwgMjQyLCAxNCwgMSwgMjI5LCA4MiwgMjQyLCAxNCwgMSwgMjE3LCAxMDYsIAorICAgIDI0MiwgMTQsIDEsIDI0OCwgMjI5LCAyNDIsIDE0LCAxLCAxOTgsIDI0MiwgMTQsIDEsIDE5MSwgMjQyLCAxNCwgMSwgMjUyLCAKKyAgICAxOTksIDI0MiwgMTQsIDEsIDE4NiwgMjQyLCAxNCwgMSwgMTkyLCAyNDIsIDE0LCAxLCAyMDUsIDI0MiwgMTQsIDEsIDIzMywgCisgICAgMTQxLCAyNDIsIDE0LCAxLCAyMTIsIDY1LCAyNDIsIDE0LCAxLCAyMDYsIDI0MiwgMTQsIDEsIDE2MiwgMjQyLCAxNCwgMjUsIAorICAgIDUsIDc0LCAyNDIsIDE0LCAyNSwgNSwgNjksIDI0MiwgMTQsIDUsIDIyNiwgNTMsIDIyNSwgMTI5LCAyMTksIDE1NywgMjI0LCAKKyAgICAxNDMsIDIyNSwgMTI5LCA1MiwgMjI0LCAxNDMsIDI1MSwgMTI4LCAxLCA2MSwgMjUxLCAxMjgsIDEsIDc0LCAyNTEsIDEyOCwgCisgICAgMSwgNjksIDI1MSwgMTI4LCAxLCAxNzYsIDI1MSwgMTI4LCAxLCAyNDMsIDE0MiwgMjUxLCAxMjgsIDEsIDIyOSwgODIsIAorICAgIDI1MSwgMTI4LCAxLCAyMTcsIDEwNiwgMjUxLCAxMjgsIDEsIDI0OCwgMjI5LCAyNTEsIDEyOCwgMSwgMTk4LCAyNTEsIDEyOCwgCisgICAgMSwgMTkxLCAyNTEsIDEyOCwgMSwgMjUyLCAxOTksIDI1MSwgMTI4LCAxLCAxODYsIDI1MSwgMTI4LCAxLCAxOTIsIDI1MSwgCisgICAgMTI4LCAxLCAyMDUsIDI1MSwgMTI4LCAxLCAyMzMsIDE0MSwgMjUxLCAxMjgsIDEsIDIxMiwgNjUsIDI1MSwgMTI4LCAxLCAKKyAgICAyMDYsIDI1MSwgMTI4LCAxLCAxNjIsIDI1MSwgMTI4LCAyNSwgNSwgNzQsIDI1MSwgMTI4LCAyNSwgNSwgNjksIDIxNywgODMsIAorICAgIDEsIDYxLCAyMTcsIDgzLCAxLCA3NCwgMjE3LCA4MywgMSwgNjksIDIxNywgODMsIDEsIDE3NiwgMjE3LCA4MywgMSwgMjQzLCAKKyAgICAxNDIsIDIxNywgODMsIDEsIDIyOSwgODIsIDIxNywgODMsIDEsIDIxNywgMTA2LCAyMTcsIDgzLCAxLCAyNDgsIDIyOSwgCisgICAgMjE3LCA4MywgMSwgMTk4LCAyMTcsIDgzLCAxLCAxOTEsIDIxNywgODMsIDEsIDI1MiwgMTk5LCAyMTcsIDgzLCAxLCAxODYsIAorICAgIDIxNywgODMsIDEsIDE5MiwgMjE3LCA4MywgMSwgMjMzLCAxNDEsIDIxNywgODMsIDEsIDIxMiwgNjUsIDIxNywgODMsIDEsIAorICAgIDIwNiwgMjE3LCA4MywgMjUsIDUsIDc0LCAyMTcsIDgzLCAyNSwgNSwgNjksIDcwLCAxLCAxNzYsIDcwLCAxLCAyMzQsIDEzOCwgCisgICAgNzAsIDEsIDIzNCwgMzQsIDcwLCAxLCAyMzQsIDExMSwgNzAsIDEsIDIyOSwgOSwgNzAsIDEsIDI1MSwgNDEsIDcwLCAxLCAKKyAgICAyNTAsIDE2NSwgNzAsIDEsIDI0OSwgMjQ2LCA3MCwgMSwgMjUwLCA5NCwgNzAsIDEsIDIyNywgMTM4LCA3MCwgMSwgMjQ4LCAKKyAgICAyMjksIDcwLCAxLCAyMTUsIDE0NSwgNzAsIDEsIDI0NywgMTUzLCA3MCwgMSwgMjE1LCAxNDAsIDcwLCAxLCAyMjgsIDg1LCAKKyAgICA3MCwgMSwgMjE3LCAxMDYsIDcwLCAxLCAyMTYsIDIwOSwgNzAsIDEsIDExMiwgNzAsIDEsIDIxNiwgMTU3LCA3MCwgMSwgCisgICAgMjI4LCA3OSwgNzAsIDEsIDI1MiwgMTk5LCA3MCwgMSwgMjI1LCAxNTAsIDcwLCAxLCAyMjUsIDE5LCA3MCwgMSwgMjI1LCAKKyAgICAxMjQsIDcwLCAxLCAyMzAsIDE2NiwgNzAsIDEsIDIxMCwgMjQ0LCA3MCwgMSwgMjIyLCAyMTMsIDcwLCAxLCAyMzIsIDE2MiwgCisgICAgNzAsIDEsIDIxMywgMTM4LCA3MCwgMSwgMjIwLCAxMDQsIDcwLCAxLCAyMTgsIDE4NiwgNzAsIDEsIDIwNiwgNzAsIDEsIAorICAgIDE2MiwgNzAsIDEsIDIzMywgMTQxLCA3MCwgMSwgMjI0LCA5MSwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA3NywgNzAsIDIzNSwgCisgICAgMjUwLCAyNSwgMjI0LCA5MCwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA1NiwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA1MSwgCisgICAgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCAzMywgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA1LCA3MCwgMjM1LCAyNTAsIDI1LCAKKyAgICAyMjMsIDI0OSwgNzAsIDIzNSwgMjUwLCAyNSwgMjIzLCAyNDgsIDcwLCAyMzUsIDI1MCwgMjUsIDIyMiwgMTAyLCA3MCwgCisgICAgMjM1LCAyNTAsIDI1LCAyMjIsIDk1LCA3MCwgMjM1LCAyNTAsIDI1LCAyMzIsIDY3LCA3MCwgMjM1LCAyNTAsIDI1LCAyMzIsIAorICAgIDU3LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDcyLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDgzLCA3MCwgMjM1LCAyNTAsIAorICAgIDI1LCAyMjQsIDQxLCAyMTUsIDQ5LCAxMTEsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNDEsIDIxNSwgNDksIDEwNSwgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgMjI0LCA3MywgNzAsIDI1LCAyMzUsIDIzNiwgMjU0LCA1MywgNzAsIDI1LCAyMzUsIDIzNiwgMjU1LCAKKyAgICA4MiwgNzAsIDI1LCA1LCAyNTUsIDgyLCA3MCwgMjUsIDUsIDc0LCA3MCwgMjUsIDUsIDIzNiwgNDAsIDcwLCAyNSwgNSwgCisgICAgMjExLCAxMTcsIDcwLCAyNSwgNSwgMjEwLCAxNjksIDcwLCAyNSwgNSwgNjksIDcwLCAyNSwgNSwgMjE0LCAxMTgsIDcwLCAKKyAgICAyNSwgNSwgMjE0LCAyMjksIDcwLCAyNSwgNSwgMjI2LCAyMzgsIDcwLCAyNSwgNSwgMTkyLCA3MCwgMjUsIDUsIDIzNiwgNjcsIAorICAgIDcwLCAyNSwgNSwgNzYsIDcwLCAyNSwgNSwgMjU0LCAyNTIsIDcwLCAyNSwgNSwgMjU0LCAyMTAsIDcwLCAyNSwgNSwgMjI2LCAKKyAgICAxODcsIDcwLCAyNSwgNSwgMjUzLCAyMDAsIDcwLCA1LCAyMjgsIDIxMSwgNzAsIDUsIDIyMywgMTI5LCA3MCwgNSwgMjEwLCAKKyAgICAxODAsIDcwLCA1LCAyMzAsIDU3LCA3MCwgNSwgMjE1LCAyMTQsIDcwLCA1LCAyNTIsIDE1MSwgNzAsIDUsIDIyMiwgMjA4LCAKKyAgICA3MCwgNSwgMjE2LCA0MSwgNzAsIDUsIDIzNCwgMjQ3LCA3MCwgNSwgMjU0LCAyMTIsIDcwLCA1LCAyMjEsIDI0NiwgMjIxLCAKKyAgICAyNDAsIDcwLCA1LCAyMTMsIDE0OSwgNzAsIDUsIDI0OSwgMjQwLCA3MCwgNSwgMjUyLCAxMjUsIDcwLCA1LCAyMzQsIDEzMSwgCisgICAgNzAsIDUsIDI1MiwgMTQ1LCA3MCwgNSwgMjUxLCAxNywgMjI1LCA3NSwgMjMzLCAxOTMsIDcwLCA1LCAyMzMsIDM2LCAyMTYsIAorICAgIDE4LCA3MCwgNSwgMjUyLCAyOCwgNzAsIDUsIDIyNSwgMTI2LCAyMzAsIDEwNCwgNzAsIDUsIDIzNCwgMTUsIDcwLCAyNDksIAorICAgIDEwNiwgMTYsIDIyMywgMzEsIDcwLCA1LCAyNTMsIDE4MiwgNzAsIDUsIDI1MywgMjAzLCA3MCwgMjEsIDIxMCwgODYsIDcwLCAKKyAgICAyMSwgMTExLCA3MCwgMjEsIDEwNSwgNzAsIDIxLCAxNTgsIDcwLCAyMSwgMTYxLCA3MCwgMjEsIDE5MCwgNzAsIDIxLCAxOTUsIAorICAgIDcwLCAyMSwgMTk5LCA3MCwgMjEsIDE5NiwgNzAsIDIxLCAyMDEsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIxOSwgCisgICAgNDUsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIzMCwgNzYsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNSwgCisgICAgNzQsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDI1MiwgNTcsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDI1MSwgCisgICAgMTExLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxOCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAKKyAgICAyMTIsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjEwLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIAorICAgIDIxNiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTQsIDgzLCAyNTEsIDI0NCwgODMsIDI0NSwgMTcxLCA4MywgCisgICAgMjQ5LCAyMjcsIDgzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgzLCAyNDksIDIzNCwgODMsIDI0NCwgMTksIDI0NywgMTI2LCAKKyAgICA4MywgMjE2LCA0MCwgMjE5LCA1NCwgMjQwLCAxNzUsIDgzLCAyMTksIDE5MiwgMywgMjUxLCAxODAsIDIzMSwgMTU5LCA4MywgCisgICAgMjMxLCAxODgsIDI0OSwgMjI3LCA4MywgMjMxLCAxODgsIDI0MywgMjM2LCAyMTgsIDEzMSwgODMsIDIyOCwgMTk2LCA4MywgCisgICAgMjQ0LCA1LCA0NSwgMjIxLCAxNTksIDExMSwgODMsIDI0NCwgNSwgNDUsIDIyMSwgMTU5LCAxMDUsIDgzLCAyNDQsIDUsIDQ1LCAKKyAgICAyMjEsIDE1OSwgMTU4LCA4MywgMjUsIDIyMCwgMTM5LCA4MywgMjEsIDIxMCwgODYsIDgzLCAyMSwgMTExLCA4MywgMjEsIAorICAgIDEwNSwgODMsIDIxLCAxNTgsIDgzLCAyMSwgMTYxLCA4MywgMjEsIDE5MCwgODMsIDIxLCAxOTUsIDgzLCAyMSwgMTk5LCA4MywgCisgICAgMjEsIDE5NiwgODMsIDIxLCAyMDEsIDgzLCAxLCA2MSwgODMsIDEsIDc2LCA4MywgMSwgNzQsIDgzLCAxLCA3OCwgODMsIDEsIAorICAgIDY5LCA4MywgMSwgMjI2LCAyMzgsIDgzLCAxLCAyMTQsIDIxNCwgODMsIDEsIDI0NSwgMjE3LCA4MywgMSwgMTk4LCA4MywgMSwgCisgICAgMjU0LCAxMjMsIDgzLCAxLCAyNTIsIDE5OSwgODMsIDEsIDE5MSwgODMsIDEsIDIyNCwgOTEsIDgzLCAxLCAyNDMsIDE0MiwgCisgICAgODMsIDEsIDE4NiwgODMsIDEsIDIzMywgMTQxLCA4MywgMSwgMjA2LCA4MywgMSwgMjIwLCAxMDQsIDgzLCAxLCAyMTcsIAorICAgIDEwNiwgODMsIDEsIDI0OCwgMjI5LCA4MywgMSwgMjUwLCAxNjUsIDgzLCAxLCAyMzUsIDE0NywgODMsIDEsIDE5MiwgODMsIAorICAgIDEsIDIwNSwgODMsIDEsIDIxMiwgNjUsIDgzLCAxLCAyNDQsIDIwNCwgODMsIDEsIDE3NiwgODMsIDEsIDIzNCwgMTM4LCA4MywgCisgICAgMSwgMjE1LCAxODQsIDgzLCAxLCAyMTAsIDExNiwgODMsIDEsIDI0MiwgNTMsIDgzLCAxLCAyMTAsIDE2LCA4MywgMSwgMjMzLCAKKyAgICA0LCA4MywgMSwgMjEwLCA2OSwgODMsIDEsIDI1MCwgMTE4LCA4MywgMSwgMjE2LCA0MCwgMjAwLCAyNSwgNTAsIDgzLCAxLCAKKyAgICAyMTYsIDQwLCA3NiwgODMsIDEsIDIxNiwgNDAsIDc0LCA4MywgMSwgMjE2LCA0MCwgNzgsIDgzLCAxLCAyMTYsIDQwLCA2OSwgCisgICAgODMsIDEsIDIxNiwgNDAsIDIyNiwgMjM4LCA4MywgMSwgMjE2LCA0MCwgMjE0LCAyMTQsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIAorICAgIDEyMywgODMsIDEsIDIxNiwgNDAsIDI1MiwgMTk5LCA4MywgMSwgMjE2LCA0MCwgMTkxLCA4MywgMSwgMjE2LCA0MCwgMjI0LCAKKyAgICA5MSwgODMsIDEsIDIxNiwgNDAsIDI0MywgMTQyLCA4MywgMSwgMjE2LCA0MCwgMTg2LCA4MywgMSwgMjE2LCA0MCwgMjE3LCAKKyAgICAxMDYsIDgzLCAxLCAyMTYsIDQwLCAyNDgsIDIyOSwgODMsIDEsIDIxNiwgNDAsIDI1MCwgMTY1LCA4MywgMSwgMjE2LCA0MCwgCisgICAgMjM1LCAxNDcsIDgzLCAxLCAyMTYsIDQwLCAyMTUsIDE4NCwgODMsIDEsIDIxNiwgNDAsIDE5MiwgODMsIDEsIDIxNiwgNDAsIAorICAgIDIxMiwgNjUsIDgzLCAxLCAyMTYsIDQwLCAxNzYsIDgzLCAxLCAyMTYsIDQwLCAyNDMsIDEzOSwgODMsIDEsIDIxNiwgNDAsIAorICAgIDI0MiwgNTMsIDgzLCAxLCAyMTYsIDQwLCAyMzUsIDExMywgODMsIDEsIDIxNiwgNDAsIDIyOCwgMjM2LCA4MywgMSwgMjE2LCAKKyAgICA0MCwgMjQ2LCA0NiwgODMsIDEsIDIxOSwgMTkyLCA3NiwgODMsIDEsIDIxOSwgMTkyLCA3NCwgODMsIDEsIDIxOSwgMTkyLCAKKyAgICAyMzUsIDE1OCwgODMsIDEsIDIxOSwgMTkyLCAyMTQsIDIxNCwgODMsIDEsIDIxOSwgMTkyLCA2OSwgODMsIDEsIDIxOSwgCisgICAgMTkyLCAyNTQsIDEyMywgODMsIDEsIDIxOSwgMTkyLCAxNzYsIDgzLCAxLCAyMTksIDE5MiwgMjQzLCAxNDIsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMTYyLCA4MywgMSwgMjE5LCAxOTIsIDE5MSwgODMsIDEsIDIxOSwgMTkyLCAyMjAsIDEwNCwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAyMTcsIDEwNiwgODMsIDEsIDIxOSwgMTkyLCAyNDgsIDIyOSwgODMsIDEsIDIxOSwgMTkyLCAyMzUsIDE0NywgCisgICAgODMsIDEsIDIxOSwgMTkyLCAyNDQsIDIwNCwgODMsIDEsIDIxOSwgMTkyLCAyNDMsIDEzOSwgODMsIDEsIDIxOSwgMTkyLCAKKyAgICAyNDIsIDUzLCA4MywgMSwgMjE5LCAxOTIsIDIxNSwgMTg0LCA4MywgMSwgMjE5LCAxOTIsIDIxMCwgMTE2LCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDIyMywgMTg3LCA4MywgMSwgMjE5LCAxOTIsIDI1MCwgMTY1LCA4MywgMSwgMjE5LCAxOTIsIDIxMCwgODIsIAorICAgIDgzLCAxLCAyMzEsIDE4OCwgNzQsIDgzLCAxLCAyMzEsIDE4OCwgMTc2LCA4MywgMSwgMjMxLCAxODgsIDIwNSwgODMsIDEsIAorICAgIDIzMSwgMTg4LCAyNDQsIDIwNCwgODMsIDEsIDIzMSwgMTg4LCAyMTAsIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAyNTQsIDg0LCAxMTEsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMywgMTQ4LCAxMTEsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI0OCwgMTk0LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjM1LCAyMDAsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTIsIDE2MywgODMsIDEsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMTM0LCAyNTIsIDE2MywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgNjEsIDgzLCAxLCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDc0LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAxNzYsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIyOSwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MSwgNDEsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIxNSwgMTU3LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTUsIDE0NSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjQ4LCAxNDMsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIyOCwgMTE1LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAyMjksIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDE5MSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjI1LCAxNTAsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIxOCwgMjI1LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjU0LCAyMTgsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIAorICAgIDE3MSwgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDgyLCA4MywgCisgICAgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQzLCAwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjI5LCA4MiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MSwgNDEsIDgzLCAxLCAyMzEsIAorICAgIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMzUsIDEyMCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIAorICAgIDIxNSwgMTU3LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAxMjcsIDgzLCAxLCAyMzEsIDE4OCwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgCisgICAgMzMsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTgsIDIyNSwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIAorICAgIDE3MSwgMjQzLCAxMjMsIDI0OSwgODAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDgyLCA4MywgCisgICAgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIAorICAgIDE2MywgNjksIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDE2MywgMTkyLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjUyLCAyNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAyMTksIDgzLCAxLCAyMzEsIDE4OCwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCAyMzMsIDQsIDE4LCAxOSwgMjI2LCAxMTMsIDE4LCAxOSwgMjUzLCAxNzUsIDE4LCAxOSwgCisgICAgMjU1LCAzNywgMTgsIDE5LCAyMTIsIDI1LCAxOCwgMTksIDIyNCwgMjI0LCAxOCwgMTksIDIyNSwgMjMzLCAxOCwgMTksIAorICAgIDIyNCwgMTA4LCAxOCwgMTksIDIxNywgMzIsIDE4LCAxOSwgMjM0LCAxOTUsIDE4LCAxOSwgMjMzLCAxODUsIDE4LCAxOSwgCisgICAgMjMxLCAxMzcsIDE4LCAxOSwgMjI4LCA0MiwgMTgsIDE5LCAyMjksIDE4NiwgMTgsIDE5LCAyMzMsIDc0LCAxOCwgMTksIAorICAgIDIxOSwgMjQsIDE4LCAxOSwgMjIxLCAyMTMsIDE4LCAxOSwgMjE5LCAyMzQsIDE4LCAxOSwgMjIwLCA2OCwgMTgsIDE5LCAKKyAgICAyMTksIDIwMywgMTgsIDE5LCAyMTAsIDIyMCwgMTgsIDE5LCAyMTEsIDUyLCAxOCwgMTksIDIyMywgMTM3LCAxOCwgMTksIAorICAgIDIyNywgMTc1LCAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3NSwgMTgsIDE5LCAyMjcsIDE3NCwgMTgsIDE5LCAyMjYsIDIyMCwgCisgICAgMjI3LCAxNzQsIDE4LCAxOSwgMjI3LCAxNzMsIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTczLCAxOCwgMTksIDIyNywgMTcyLCAKKyAgICAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3MiwgMTgsIDE5LCAyMjIsIDEwNywgMTgsIDE5LCAyMjIsIDEwNiwgMTgsIDE5LCAKKyAgICAyMjIsIDEwNSwgMTgsIDE5LCAyMjIsIDEwNCwgMTgsIDE5LCAyMjIsIDEwMywgMTgsIDE5LCAyMjIsIDExMSwgMTgsIDE5LCAKKyAgICAyMjYsIDIyMCwgMjI2LCAxMDksIDE4LCAxOSwgMjI2LCAyMjAsIDIxNywgMTUzLCAxOCwgMTksIDIyNiwgMjIwLCAyMzUsIAorICAgIDI5LCAxOCwgMTksIDIyNiwgMjIwLCAyNTEsIDc0LCAxOCwgMTksIDIyNiwgMjIwLCAxOTQsIDE4LCAxOSwgMjI2LCAyMjAsIAorICAgIDIzMCwgMzAsIDE4LCAxOSwgMjI2LCAyMjAsIDIyMiwgOTMsIDE4LCAxOSwgMjI2LCAyMjAsIDIyMCwgMTA2LCAxOCwgMTksIAorICAgIDI0NSwgMjI3LCAyMTIsIDk4LCAxOCwgMTksIDIxMiwgNywgMjEyLCA5OCwgMTgsIDE5LCA0MCwgNCwgMjIyLCAyMzYsIDE4LCAKKyAgICAxOSwgNDAsIDIyMywgMTYwLCAyNDcsIDEyOCwgMTgsIDE5LCAyMjMsIDIyNiwgMjIyLCAxMDgsIDE4LCAxOSwgMTU5LCAyMzIsIAorICAgIDEzMywgMTgsIDE5LCAxNTksIDIzMywgMTQwLCAxOCwgMTksIDIxNiwgMTI3LCAxOCwgMTksIDIxNiwgMTI5LCAxOCwgMTksIAorICAgIDIxNSwgMTM3LCAxOCwgMTksIDIxNSwgMTM5LCAxOCwgMTksIDIxNSwgMTQ0LCAxOCwgMTksIDIxNiwgNTAsIDE4LCAxOSwgCisgICAgMjE2LCA1MiwgMTgsIDE5LCAyMjEsIDIxMSwgMjE5LCAyMDgsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgMywgMTgsIDE5LCAKKyAgICAyMjEsIDIxMSwgMjQxLCA2MCwgMTgsIDE5LCA3MywgMjQyLCA4MCwgMTgsIDE5LCA3MywgMjQ4LCA2MCwgMjQzLCA2MiwgMTgsIAorICAgIDE5LCA3MywgMjQzLCAxMzksIDE4LCAxOSwgNzMsIDI0MiwgODUsIDE4LCAxOSwgMjIxLCAyMTEsIDIzNSwgMzksIDE4LCAxOSwgCisgICAgNzMsIDIzNSwgMzcsIDE4LCAxOSwgMjUyLCA3NiwgMjQ4LCA2MCwgMTU2LCAxOCwgMTksIDI1MiwgNzYsIDI0OCwgNjAsIAorICAgIDE1MywgMTgsIDE5LCA3MywgMjQ4LCA1NSwgMjIyLCA5MywgMjMyLCAyMjksIDIxMywgMTIyLCAyMzMsIDE2LCAyMzIsIDIyOSwgCisgICAgMSwgMTc2LCAyMzIsIDIyOSwgMSwgMjM0LCAxMzgsIDIzMiwgMjI5LCAxLCAyNDMsIDE0MiwgMjMyLCAyMjksIDEsIDI0MywgCisgICAgMCwgMjMyLCAyMjksIDEsIDIyOSwgODIsIDIzMiwgMjI5LCAxLCAyNTEsIDQxLCAyMzIsIDIyOSwgMSwgMjUwLCAxNjUsIAorICAgIDIzMiwgMjI5LCAxLCAyMzUsIDE0NywgMjMyLCAyMjksIDEsIDIzNSwgMTIwLCAyMzIsIDIyOSwgMSwgMjExLCA3MSwgMjMyLCAKKyAgICAyMjksIDEsIDIxNywgMTA2LCAyMzIsIDIyOSwgMSwgMjE2LCAyMDksIDIzMiwgMjI5LCAxLCAyNDgsIDIyOSwgMjMyLCAyMjksIAorICAgIDEsIDI0OCwgMzMsIDIzMiwgMjI5LCAxLCAxOTgsIDIzMiwgMjI5LCAxLCAxOTEsIDIzMiwgMjI5LCAxLCAyMjUsIDE1MCwgCisgICAgMjMyLCAyMjksIDEsIDI1MiwgMTk5LCAyMzIsIDIyOSwgMSwgMjUyLCAyNiwgMjMyLCAyMjksIDEsIDE4NiwgMjMyLCAyMjksIAorICAgIDEsIDE5MiwgMjMyLCAyMjksIDEsIDIwNSwgMjMyLCAyMjksIDEsIDIzMywgMTQxLCAyMzIsIDIyOSwgMSwgMjEyLCA2NSwgCisgICAgMjMyLCAyMjksIDEsIDIyMCwgMTA0LCAyMzIsIDIyOSwgMSwgMjE4LCAyMjUsIDIzMiwgMjI5LCAxLCAyMDYsIDIzMiwgMjI5LCAKKyAgICAxLCAxNjIsIDIzMiwgMjI5LCAyNSwgNSwgNjEsIDIzMiwgMjI5LCAyNSwgNSwgNzQsIDIzMiwgMjI5LCAyNSwgNSwgNjksIAorICAgIDIzMiwgMjI5LCAyNSwgNSwgMjQ1LCAyMTcsIDIzMiwgMjI5LCAyNSwgNSwgMjU0LCAyMTAsIDIzMiwgMjI5LCAyNSwgNSwgCisgICAgMjI2LCAxODcsIDIzMiwgMjI5LCAyNSwgNSwgMjUzLCAyMDAsIDIzMiwgMjI5LCAyNSwgNSwgNzYsIDIzMiwgMjI5LCAyNSwgCisgICAgNSwgNzgsIDIzMiwgMjI5LCAyMTgsIDc0LCAxLCAxOTIsIDIzMiwgMjI5LCAyMTgsIDc0LCAxLCAyMDUsIDIzMiwgMjI5LCAKKyAgICAyMTgsIDc0LCAxLCAyMTIsIDY1LCAyMzIsIDIyOSwgNCwgMSwgMTc2LCAyMzIsIDIyOSwgNCwgMSwgMjI5LCA4MiwgMjMyLCAKKyAgICAyMjksIDQsIDEsIDI1NCwgODMsIDIzMiwgMjI5LCA0LCAxLCAyMTcsIDEwNiwgMjMyLCAyMjksIDQsIDEsIDE5OCwgMjMyLCAKKyAgICAyMjksIDQsIDEsIDE5MSwgMjMyLCAyMjksIDQsIDEsIDE4NiwgMjMyLCAyMjksIDQsIDEsIDIwNSwgMjMyLCAyMjksIDQsIDEsIAorICAgIDIzMywgMTQxLCAyMzIsIDIyOSwgNSwgMjMwLCA5NCwgMjMyLCAyMjksIDUsIDIzNCwgMTc3LCAyMzIsIDIyOSwgNSwgMjIyLCAKKyAgICAzNCwgMjMyLCAyMjksIDUsIDIzMiwgMTMzLCAyMzIsIDIyOSwgMjQ1LCAzOSwgNzksIDIzMiwgMjI5LCAyMjQsIDE2LCA3OSwgCisgICAgMjMyLCAyMjksIDIxLCAyMTAsIDg2LCAyMzIsIDIyOSwgMjEsIDExMSwgMjMyLCAyMjksIDIxLCAxMDUsIDIzMiwgMjI5LCAKKyAgICAyMSwgMTU4LCAyMzIsIDIyOSwgMjEsIDE2MSwgMjMyLCAyMjksIDIxLCAxOTAsIDIzMiwgMjI5LCAyMSwgMTk1LCAyMzIsIAorICAgIDIyOSwgMjEsIDE5OSwgMjMyLCAyMjksIDIxLCAxOTYsIDIzMiwgMjI5LCAyMSwgMjAxLCAzOSwgMjMzLCA2NSwgMSwgMTc2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjExLCAxNjUsIDM5LCAyMzMsIDY1LCAxLCAyMjksIDgyLCAzOSwgMjMzLCA2NSwgMSwgMjE1LCAKKyAgICAxODQsIDM5LCAyMzMsIDY1LCAxLCAyMDYsIDM5LCAyMzMsIDY1LCAxLCAxOTIsIDM5LCAyMzMsIDY1LCAxLCAyMTcsIDEwNiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNiwgMjA5LCAzOSwgMjMzLCA2NSwgMSwgMjMzLCAxNDEsIDM5LCAyMzMsIDY1LCAxLCAxOTEsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMjUsIDE1MCwgMzksIDIzMywgNjUsIDEsIDE4NiwgMzksIDIzMywgNjUsIDEsIDI0NCwgMjA0LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE0LCAyNywgMzksIDIzMywgNjUsIDEsIDE2MiwgMzksIDIzMywgNjUsIDEsIDIyNCwgOTEsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMzQsIDEzOCwgMzksIDIzMywgNjUsIDEsIDIxNSwgMTc2LCAzOSwgMjMzLCA2NSwgMSwgMTk4LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgNjEsIDM5LCAyMzMsIDY1LCAxLCA3NCwgMzksIDIzMywgNjUsIDEsIDI0NSwgMjE3LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgMjQ1LCAyMDUsIDM5LCAyMzMsIDY1LCAxLCA2OSwgMzksIDIzMywgNjUsIDEsIDIyNiwgMTg3LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgNzgsIDM5LCAyMzMsIDY1LCAxLCAyMTQsIDIxNCwgMzksIDIzMywgNjUsIDEsIDc2LCAzOSwgMjMzLCAKKyAgICA2NSwgMSwgMjUzLCAxOTgsIDM5LCAyMzMsIDY1LCAxLCAyNTQsIDIxMCwgMzksIDIzMywgNjUsIDEsIDIxNiwgMjksIDM5LCAKKyAgICAyMzMsIDY1LCAxLCAyMTYsIDI4LCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNywgMzksIDIzMywgNjUsIDEsIDIxNiwgMjYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI1LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI0LCA5MSwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDIyNCwgOTEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNzYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTEsIDE2NSwgCisgICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyOSwgODIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxNzYsIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTIxLCAyMTEsIDE2NSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyOSwgODIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAKKyAgICAyMTUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MiwgMTY2LCAzOSwgCisgICAgMTczLCAxLCAxMjEsIDIxNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCisgICAgMTkyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE3LCAxMDYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTYsIDIwOSwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDE5OCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNywgMTA2LCAxNjYsIDM5LCAxNzMsIDEsIAorICAgIDEyMSwgMjE2LCAyMDksIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTEsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyMjUsIDE1MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE4NiwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyNSwgMTUwLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTg2LCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjQ0LCAyMDQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyNSwgMjMzLCAxNDEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNDQsIDIwNCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAorICAgIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE0MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE2MiwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDI0OCwgMjI5LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjUyLCAxOTksIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTIxLCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNDgsIDIyOSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI1MiwgCisgICAgMTk5LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjMzLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTEsIDEzOCwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTI1LCAyMTgsIDgzLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE4LCA4MywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjUsIAorICAgIDIxOSwgMjQxLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDgyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzYsIDQwLCAKKyAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCA2OSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTgsIDE2NiwgMzksIDE3MywgMjUsIAorICAgIDUsIDc2LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTQsIDI1MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzgsIDE2NiwgMzksIAorICAgIDE3MywgMjUsIDUsIDIyNywgNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAyMTQsIDE2NiwgMzksIDE3MywgMjUsIDUsIAorICAgIDI1MywgMTc1LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDM3LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExMSwgCisgICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI2LCAxMTMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNywgMSwgMTY2LCAzOSwgMTczLCAKKyAgICAyNSwgNSwgMjE0LCAyMTAsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNSwgMTU4LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMTQsIAorICAgIDEwNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjI5LCA4NCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjMwLCAzMCwgMTY2LCAzOSwgCisgICAgMTczLCAxLCA0MCwgMTk0LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzUsIDI5LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNDksIAorICAgIDY4LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNTMsIDE2NiwgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTYzLCAxNjYsIDM5LCAKKyAgICAxNzMsIDEzOCwgMjMxLCAxNjIsIDE2NiwgMzksIDE3MywgMjEsIDIxMCwgODYsIDE2NiwgMzksIDE3MywgMjEsIDExMSwgCisgICAgMTY2LCAzOSwgMTczLCAyMSwgMTA1LCAxNjYsIDM5LCAxNzMsIDIxLCAxNTgsIDE2NiwgMzksIDE3MywgMjEsIDE2MSwgMTY2LCAKKyAgICAzOSwgMTczLCAyMSwgMTkwLCAxNjYsIDM5LCAxNzMsIDIxLCAxOTUsIDE2NiwgMzksIDE3MywgMjEsIDE5OSwgMTY2LCAzOSwgCisgICAgMTczLCAyMSwgMTk2LCAxNjYsIDM5LCAxNzMsIDIxLCAyMDEsIDE2NiwgMzksIDE3MywgODksIDIxLCAxMTEsIDE2NiwgMzksIAorICAgIDE3MywgNSwgMjMzLCAxMjYsIDE2NiwgMzksIDE3MywgNSwgMjMzLCAxMjUsIDcwLCAxNiwgMjI1LCAyNDAsIDcwLCAxNiwgCisgICAgMjMwLCA3NywgMjM0LCAzMSwgNzAsIDE2LCAyMjUsIDc1LCAyMzQsIDMxLCA3MCwgMTYsIDI1MiwgNTgsIDIzNCwgMzEsIDcwLCAKKyAgICAxNiwgMjUxLCAxMTIsIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAyMTksIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAyMTMsIDIzNCwgCisgICAgMzEsIDcwLCAxNiwgMjI0LCAyMTEsIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAyMTcsIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAKKyAgICAyMTUsIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxODEsIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxNzcsIDIzNCwgMzEsIDcwLCAKKyAgICAxNiwgMjQ4LCAxNzYsIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxNzksIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxNzgsIDIzNCwgCisgICAgMzEsIDcwLCAxNiwgMjQ4LCAxNzUsIDIzNCwgMzEsIDcwLCAxNiwgMjE1LCA4NywgNzAsIDE2LCAyMzAsIDc3LCAyMjIsIAorICAgIDIwNywgNzAsIDE2LCAyMjUsIDc1LCAyMjIsIDIwNywgNzAsIDE2LCAyNTIsIDU4LCAyMjIsIDIwNywgNzAsIDE2LCAyNTEsIAorICAgIDExMiwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTksIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjEzLCAyMjIsIDIwNywgCisgICAgNzAsIDE2LCAyMjQsIDIxMSwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTcsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE1LCAKKyAgICAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE4MSwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzcsIDIyMiwgMjA3LCA3MCwgMTYsIAorICAgIDI0OCwgMTc2LCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3OSwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzgsIDIyMiwgCisgICAgMjA3LCA3MCwgMTYsIDI0OCwgMTc1LCAyMjIsIDIwNywgMjUxLCAxMjksIDEsIDE3NiwgMjUxLCAxMjksIDEsIDI0MywgMTQyLCAKKyAgICAyNTEsIDEyOSwgMSwgMjI5LCA4MiwgMjUxLCAxMjksIDEsIDIyOSwgMjcsIDI1MSwgMTI5LCAxLCAxOTEsIDI1MSwgMTI5LCAKKyAgICAxLCAyNTIsIDE5OSwgMjUxLCAxMjksIDEsIDE4NiwgMjUxLCAxMjksIDEsIDIzMCwgMTEwLCAyNTEsIDEyOSwgMSwgMjE3LCAKKyAgICAxMDYsIDI1MSwgMTI5LCAxLCAyNDgsIDIyOSwgMjUxLCAxMjksIDEsIDE5OCwgMjUxLCAxMjksIDEsIDIyOCwgNDEsIDI1MSwgCisgICAgMTI5LCAxLCAyNTEsIDQxLCAyNTEsIDEyOSwgMSwgMjM1LCAxNDcsIDI1MSwgMTI5LCAxLCAyMjcsIDE2OSwgMjUxLCAxMjksIAorICAgIDEsIDIyNywgMTYyLCAyNTEsIDEyOSwgMSwgMTkyLCAyNTEsIDEyOSwgMSwgMjA1LCAyNTEsIDEyOSwgMSwgMjMzLCAxNDEsIAorICAgIDI1MSwgMTI5LCAxLCAyMTQsIDI3LCAyNTEsIDEyOSwgMSwgMjA2LCAyNTEsIDEyOSwgMSwgNjEsIDI1MSwgMTI5LCAxLCAKKyAgICAxNjIsIDI1MSwgMTI5LCAyNSwgNSwgNzQsIDI1MSwgMTI5LCAyNSwgNSwgNjksIDI1MSwgMTI5LCAyNSwgNSwgNzYsIDI1MSwgCisgICAgMTI5LCAyNSwgNSwgNzgsIDI1MSwgMTI5LCAyNSwgNSwgMjU0LCAyNTIsIDI1MSwgMTI5LCAyMjYsIDY0LCAyNTEsIDEyOSwgCisgICAgMjQ1LCAxNTEsIDY0LCAyMjEsIDE3NCwgMzksIDg5LCAxLCAxMjUsIDE3NiwgMzksIDg5LCAxLCAxMjUsIDIzNCwgMTM4LCAKKyAgICAzOSwgODksIDEsIDEyNSwgMjMzLCAxNzcsIDM5LCA4OSwgMSwgMTIxLCAxNzYsIDM5LCA4OSwgMSwgMTIxLCAyMzMsIDE3NywgCisgICAgMzksIDg5LCAxLCAxMjEsIDIzNCwgMTM4LCAzOSwgODksIDEsIDIyOSwgODIsIDM5LCA4OSwgMSwgMTI1LCAyNTEsIDQxLCAKKyAgICAzOSwgODksIDEsIDEyNSwgMjUwLCAxNjUsIDM5LCA4OSwgMSwgMTIxLCAyNTEsIDQxLCAzOSwgODksIDEsIDEyMSwgMjA2LCAKKyAgICAzOSwgODksIDEsIDEyMSwgMjUwLCAxNjUsIDM5LCA4OSwgMSwgMjI3LCAxNjksIDM5LCA4OSwgMSwgMjIzLCAxNDMsIDM5LCAKKyAgICA4OSwgMSwgMTI1LCAyMjMsIDE0MSwgMzksIDg5LCAxLCAyNDgsIDIyOSwgMzksIDg5LCAxLCAxMjEsIDIyMywgMTQxLCAzOSwgCisgICAgODksIDEsIDIyMywgMTUyLCAzOSwgODksIDEsIDEyNSwgMjE3LCAxMDYsIDM5LCA4OSwgMSwgMTI1LCAyMTYsIDIwOSwgMzksIAorICAgIDg5LCAxLCAxMjEsIDIxNywgMTA2LCAzOSwgODksIDEsIDEyMSwgMjE2LCAyMDksIDM5LCA4OSwgMSwgMTk4LCAzOSwgODksIAorICAgIDEsIDI1MiwgMTk5LCAzOSwgODksIDEsIDEyNSwgMTkxLCAzOSwgODksIDEsIDEyNSwgMjI1LCAxNTAsIDM5LCA4OSwgMSwgCisgICAgMTI1LCAyNDQsIDIwNCwgMzksIDg5LCAxLCAxMjEsIDE5MSwgMzksIDg5LCAxLCAxMjEsIDI0NCwgMjA0LCAzOSwgODksIDEsIAorICAgIDEyMSwgMjI1LCAxNTAsIDM5LCA4OSwgMSwgMTg2LCAzOSwgODksIDEsIDEyMSwgMTkyLCAzOSwgODksIDEsIDEyNSwgMTkyLCAKKyAgICAzOSwgODksIDEsIDIwNSwgMzksIDg5LCAxLCAyMjIsIDEzOSwgMzksIDg5LCAxLCAyMzMsIDE0MSwgMzksIDg5LCAxLCAyMzIsIAorICAgIDk4LCAzOSwgODksIDEsIDIxMiwgNjUsIDM5LCA4OSwgMSwgMTI1LCAyMjAsIDEwNCwgMzksIDg5LCAxLCAxMjUsIDIxOCwgCisgICAgMjI1LCAzOSwgODksIDEsIDEyNSwgMjA2LCAzOSwgODksIDEsIDEyNSwgMTYyLCAzOSwgODksIDEsIDIzMiwgMTkwLCAzOSwgCisgICAgODksIDEsIDYxLCAzOSwgODksIDEsIDEyMSwgMTYyLCAzOSwgODksIDEsIDc0LCAzOSwgODksIDEsIDIzNiwgNDAsIDM5LCAKKyAgICA4OSwgMSwgNjksIDM5LCA4OSwgMSwgMjE0LCAxMTgsIDM5LCA4OSwgMSwgMjQ1LCAyMTcsIDM5LCA4OSwgMSwgMjI2LCAxODcsIAorICAgIDM5LCA4OSwgMSwgMjMzLCAxMjYsIDM5LCA4OSwgMSwgMjQyLCAxMzksIDIwNiwgMzksIDg5LCAxMTcsIDUsIDE0NywgMjA1LCAKKyAgICAzOSwgODksIDExNywgNSwgMTQ3LCAyMzMsIDE0MSwgMzksIDg5LCAxMTcsIDUsIDIzMywgMTQyLCAyMTcsIDU5LCAyMzMsIAorICAgIDExNSwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjM0LCAyMzcsIDIzMywgMTE1LCAzOSwgODksIDExNywgNSwgNDAsIDIyOSwgCisgICAgODIsIDM5LCA4OSwgMTE3LCA1LCAxMjEsIDE5MSwgMzksIDg5LCAxMTcsIDUsIDEyNSwgMjIzLCAxNDIsIDE3NywgMTIxLCAKKyAgICAxOTEsIDM5LCA4OSwgMTE3LCA1LCAxODYsIDM5LCA4OSwgMTE3LCA1LCAyNTIsIDE5OSwgMzksIDg5LCAxMTcsIDUsIDIwNiwgCisgICAgMzksIDg5LCA1LCAyMjIsIDEyLCAzOSwgODksIDI1LCA1LCA2MSwgMzksIDg5LCAyNSwgNSwgMjMxLCAyMDksIDIyMSwgMjI4LCAKKyAgICAzOSwgODksIDI1LCA1LCAyNTUsIDgyLCAzOSwgODksIDI1LCA1LCAyMTcsIDY1LCAyNTUsIDgyLCAzOSwgODksIDI1LCA1LCAKKyAgICA3NCwgMzksIDg5LCAyNSwgNSwgMjM2LCA0MCwgMzksIDg5LCAyNSwgNSwgMjE0LCAyMTQsIDM5LCA4OSwgMjUsIDUsIDIxNCwgCisgICAgMTE3LCAzOSwgODksIDI1LCA1LCA2OSwgMzksIDg5LCAyNSwgNSwgMjE0LCAxMTgsIDM5LCA4OSwgMjUsIDUsIDc4LCAzOSwgCisgICAgODksIDI1LCA1LCAyMjcsIDUsIDUxLCAzOSwgODksIDI1LCA1LCAyMjYsIDExMywgMzksIDg5LCAyNSwgNSwgNzYsIDM5LCAKKyAgICA4OSwgMjUsIDUsIDI1NCwgMjUyLCAzOSwgODksIDI1LCA1LCAyMjYsIDE4NywgMzksIDg5LCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDM5LCA4OSwgMjUsIDUsIDg5LCAyNTQsIDIxMCwgMzksIDg5LCAyNSwgNSwgMjI3LCA1LCA0OCwgMzksIDg5LCA1LCAyMzEsIAorICAgIDIwOSwgMjM0LCAyMzYsIDM5LCA4OSwgNSwgMjE2LCAzMCwgMzksIDg5LCA1LCAyMTYsIDI5LCAzOSwgODksIDUsIDIzNCwgCisgICAgMTAzLCAyMTYsIDI4LCAzOSwgODksIDUsIDIzNCwgMTAzLCAyMTYsIDI3LCAzOSwgODksIDUsIDIzNCwgMTAzLCAyMTYsIDI2LCAKKyAgICAzOSwgODksIDUsIDIyMywgMTkxLCAyNDIsIDUyLCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMjEsIDI1NSwgMzksIDg5LCA1LCAKKyAgICAyMzQsIDEwMiwgMjM0LCAyMjEsIDM5LCA4OSwgMzgsIDI0OSwgMTIzLCAyNDcsIDEyOCwgMzksIDg5LCAyNDEsIDUzLCAyMSwgCisgICAgMjEwLCA4NiwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTExLCAzOSwgODksIDI0MSwgNTMsIDIxLCAxMDUsIDM5LCA4OSwgMjQxLCAKKyAgICA1MywgMjEsIDE1OCwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTYxLCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTAsIDM5LCA4OSwgCisgICAgMjQxLCA1MywgMjEsIDE5NSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTk5LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTYsIDM5LCAKKyAgICA4OSwgMjQxLCA1MywgMjEsIDIwMSwgMzksIDg5LCA4OSwgMjEsIDIxMCwgODYsIDM5LCA4OSwgODksIDIxLCAxMTEsIDM5LCAKKyAgICA4OSwgODksIDIxLCAxMDUsIDM5LCA4OSwgODksIDIxLCAxNTgsIDM5LCA4OSwgODksIDIxLCAxNjEsIDM5LCA4OSwgODksIAorICAgIDIxLCAxOTAsIDM5LCA4OSwgODksIDIxLCAxOTUsIDM5LCA4OSwgODksIDIxLCAxOTksIDM5LCA4OSwgODksIDIxLCAxOTYsIAorICAgIDM5LCA4OSwgODksIDIxLCAyMDEsIDM5LCA4OSwgNSwgMjExLCAyNDksIDM5LCA4OSwgNSwgMjExLCAyNDgsIDM5LCA4OSwgNSwgCisgICAgMjIxLCAyMTcsIDM5LCA4OSwgNSwgMjM0LCAxNjYsIDM5LCA4OSwgNSwgMjQwLCAyMzksIDM5LCA4OSwgNSwgMjQ3LCAxNDIsIAorICAgIDM5LCA4OSwgNSwgMjIzLCA1MiwgMjIyLCAxODksIDIyMywgMTUyLCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMTEsIDcyLCAzOSwgCisgICAgODksIDUsIDIzNSwgMTIsIDM5LCA4OSwgNSwgMjM1LCAxMSwgMzksIDg5LCA1LCAyMjEsIDIyNCwgMzksIDg5LCA1LCAyMjEsIAorICAgIDIyMywgMzksIDg5LCA1LCAyNDIsIDE2LCAzOSwgODksIDUsIDI1MSwgMzgsIDEwMiwgNSwgMjE0LCAyMDAsIDIyMywgMzMsIAorICAgIDEwMiwgNSwgMjE0LCAyMDAsIDI1MSwgOSwgMTAyLCA1LCAyNTAsIDE5NCwgMTAyLCA1LCAyMTgsIDE2LCAxMDIsIDUsIDI1MSwgCisgICAgMjQxLCAxMDIsIDEsIDI1NCwgMTkzLCAxMDIsIDEsIDI1NCwgMTk0LCAyMTcsIDE0LCAxMDIsIDEsIDIzNiwgMzYsIDEwMiwgCisgICAgMSwgMjM2LCAzNywgMjE3LCAxNCwgMTAyLCAxLCAyMTQsIDIwMywgMTAyLCAxLCAyMTQsIDIwNCwgMjE3LCAxNCwgMTAyLCAxLCAKKyAgICAyMjMsIDE5MSwgMjIzLCA4MiwgMTAyLCAxLCAyMjMsIDE5MSwgMjIzLCA4MywgMjE3LCAxNCwgMTAyLCAxLCAyMzMsIDE0MiwgCisgICAgMjMzLCAzMCwgMTAyLCAxLCAyMzMsIDE0MiwgMjMzLCAzMSwgMjE3LCAxNCwgMTAyLCAxLCAyNDUsIDE4NywgMTAyLCAxLCAKKyAgICAyNTQsIDIwOCwgMTAyLCAxLCAyMjYsIDIxNiwgMTAyLCAxLCAyMjYsIDIxNywgMjE3LCAxNCwgMTAyLCAxLCAxNzYsIDEwMiwgCisgICAgMSwgMjM1LCAxOSwgMjMxLCAyMTIsIDEwMiwgMSwgMjQzLCAxNDIsIDEwMiwgMSwgMjQzLCAxNDMsIDI0MiwgMTY4LCAxMDIsIAorICAgIDEsIDIyOSwgODIsIDEwMiwgMSwgMjUxLCA0MSwgMTAyLCAxLCAyNTEsIDQyLCAyMzMsIDEyOSwgMTAyLCAxLCAyMzUsIDE0NywgCisgICAgMTAyLCAxLCAyMzUsIDE0OCwgMjM1LCAxMjQsIDEwMiwgMSwgMjI3LCAxNjksIDEwMiwgMSwgMjE3LCAxMDcsIDIzMywgODIsIAorICAgIDEwMiwgMSwgMjE3LCAxMDcsIDIzMCwgNzIsIDIzMSwgMjEyLCAxMDIsIDEsIDI0OCwgMjMwLCAyMzAsIDcyLCAyNTQsIDE1MywgCisgICAgMTAyLCAxLCAyNDgsIDIzMCwgMjMwLCA3MiwgMjMxLCAyMTIsIDEwMiwgMSwgMjI5LCAyMzQsIDIyMywgMTU1LCAxMDIsIDEsIAorICAgIDIxNywgMTA2LCAxMDIsIDEsIDIxNywgMTA3LCAyMTcsIDM2LCAxMDIsIDEsIDI0OCwgMjI5LCAxMDIsIDEsIDI0OCwgMjMwLCAKKyAgICAyMzEsIDIzMCwgMTAyLCAxLCAxOTgsIDEwMiwgMSwgMTkxLCAxMDIsIDEsIDIyNiwgOTQsIDIzNCwgMjMyLCAxMDIsIDEsIAorICAgIDI1MiwgMTk5LCAxMDIsIDEsIDI1MiwgMjAwLCAyMzQsIDE3OCwgMTAyLCAxLCAxODYsIDEwMiwgMSwgMTkyLCAxMDIsIDEsIAorICAgIDIwNSwgMTAyLCAxLCAyMzMsIDE0MSwgMTAyLCAxLCAyMTIsIDY1LCAxMDIsIDEsIDIyMiwgMzYsIDIyMiwgMjIsIDEwMiwgMSwgCisgICAgMjIyLCAzNiwgMjIxLCAyMzUsIDEwMiwgMSwgMjA2LCAxMDIsIDEsIDE2MiwgMTAyLCA1LCAyMjMsIDczLCAxMDIsIDI1LCA1LCAKKyAgICAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTQsIDE5OSwgMTAyLCAyNSwgNSwgMjE0LCAyMDAsIDIyMSwgMjMxLCAxMDIsIDI1LCAKKyAgICA1LCAyMTgsIDQ4LCAxMDIsIDI1LCA1LCAyMTgsIDQ5LCAyMzYsIDI4LCAxMDIsIDI1LCA1LCAyMjMsIDE5MSwgMjIzLCA4MiwgCisgICAgMTAyLCAyNSwgNSwgMjIzLCAxOTEsIDIyMywgODMsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIzMywgMTQyLCAyMzMsIDMwLCAKKyAgICAxMDIsIDI1LCA1LCAyMzMsIDE0MiwgMjMzLCAzMSwgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE3LCA2NiwgMTAyLCAyNSwgNSwgCisgICAgMjE3LCA2NywgMjIzLCA4MiwgMTAyLCAyNSwgNSwgMjE3LCA2NywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE3LCA2NywgMjIzLCAKKyAgICA4MywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjI1LCAxODcsIDEwMiwgMjUsIDUsIDIyNSwgMTg4LCAyMTcsIDE0LCAxMDIsIAorICAgIDI1NSwgMywgMjU1LCAyLCAxMDIsIDEsIDIzNSwgMSwgMjIxLCAyMzAsIDEwMiwgMSwgMjM0LCAxMDgsIDIyMSwgMjMwLCAKKyAgICAxMDIsIDEsIDIxNSwgMzQsIDIyMSwgMjMwLCAxMDIsIDEsIDI0NSwgMjExLCAyMjEsIDIzMCwgMTAyLCAxLCAyMTQsIDAsIAorICAgIDIyMSwgMjMwLCAxMDIsIDEsIDIxMCwgMTA3LCAyMjEsIDIzMCwgMTAyLCAxLCAyNTMsIDIxNywgMjIxLCAyMzAsIDEwMiwgCisgICAgMjEsIDIxMCwgODYsIDEwMiwgMjEsIDExMSwgMTAyLCAyMSwgMTA1LCAxMDIsIDIxLCAxNTgsIDEwMiwgMjEsIDE2MSwgMTAyLCAKKyAgICAyMSwgMTkwLCAxMDIsIDIxLCAxOTUsIDEwMiwgMjEsIDE5OSwgMTAyLCAyMSwgMTk2LCAxMDIsIDIxLCAyMDEsIDEwMiwgCisgICAgMjI2LCAzMywgMTAyLCAyMjYsIDU5LCAxMDIsIDIxMSwgMjM4LCAxMDIsIDI1MCwgMjQ0LCAyMjYsIDUyLCAxMDIsIDI1MCwgCisgICAgMjQ0LCAyMTksIDE3NCwgMTAyLCAyNTAsIDI0NCwgMjI2LCA2LCAxMDIsIDIyNiwgNTgsIDEwMiwgMjgsIDE2LCAyNDcsIAorICAgIDEzNCwgMTAyLCAyOCwgMTYsIDI0OCwgNTksIDEwMiwgMjgsIDE2LCAyNDYsIDcyLCAxMDIsIDI4LCAxNiwgMjQ4LCAxODQsIAorICAgIDEwMiwgMjgsIDE2LCAyNDgsIDE4NSwgMjE4LCAxNiwgMTAyLCAyOCwgMTYsIDI0NywgMjEzLCAxMDIsIDI4LCAxNiwgMjQ4LCAKKyAgICAyMjIsIDEwMiwgMjgsIDE2LCAyNDgsIDQxLCAxMDIsIDI4LCAxNiwgMjQ4LCAyMDYsIDEwMiwgMjgsIDE2LCAyNDgsIDE4NSwgCisgICAgMjQzLCA2NCwgMTAyLCAyOCwgMTYsIDM4LCAyMTcsIDEwLCAxMDIsIDI4LCAxNiwgMzgsIDI0NSwgMTQ5LCAxMDIsIDI4LCAKKyAgICAxNiwgMzgsIDIzNCwgMTczLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc1LCAxMDIsIDI4LCAxNiwgMzgsIDIzNSwgMTI4LCAKKyAgICAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc0LCAyLCAyMzUsIDEyOCwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NiwgMiwgCisgICAgMjM1LCAxMjgsIDEwMiwgMjgsIDE2LCAzOCwgMjUyLCA0NSwgMTAyLCAyOCwgMTYsIDM4LCAyNDIsIDE3MiwgMTAyLCAyOCwgCisgICAgMTYsIDIyMiwgMjUyLCAyMDQsIDI0NiwgODIsIDEwMiwgMjgsIDE2LCAyMjIsIDI1MiwgMjA0LCAyNDgsIDIyMCwgMTAyLCAKKyAgICAyOCwgMTYsIDIyMiwgMjUyLCAyNTAsIDgsIDIxNSwgMTEyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNTIsIDI1MCwgOCwgMjE3LCAKKyAgICA3NCwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI2LCA0NywgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI0LCAKKyAgICAxNDIsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyNTAsIDgsIDIyNSwgNDEsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyNTAsIDgsIAorICAgIDIyNSwgMjksIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNSwgNjQsIDIwNywgNSwgMjI2LCAzMCwgMjA3LCA1LCAKKyAgICAyMjYsIDQzLCAyMDcsIDUsIDIyNiwgMzksIDIwNywgMSwgNjEsIDIwNywgMSwgNzQsIDIwNywgMSwgNjksIDIwNywgMSwgCisgICAgMjU0LCAyNTIsIDIwNywgMSwgNzgsIDIwNywgMSwgNzYsIDIwNywgMSwgMjQ1LCA2MywgMjA3LCAxLCAxNzYsIDIwNywgMSwgCisgICAgMjI0LCA5MSwgMjA3LCAxLCAyNDMsIDE0MiwgMjA3LCAxLCAyMjksIDgyLCAyMDcsIDEsIDI1MSwgNDEsIDIwNywgMSwgMjM1LCAKKyAgICAxNDcsIDIwNywgMSwgMjEwLCAxMTYsIDIwNywgMSwgMjI3LCAxNjksIDIwNywgMSwgMjE3LCAxMDYsIDIwNywgMSwgMjQ4LCAKKyAgICAyMjksIDIwNywgMSwgMTk4LCAyMDcsIDEsIDE5MSwgMjA3LCAxLCAyNDQsIDIwNCwgMjA3LCAxLCAyMTQsIDI3LCAyMDcsIDEsIAorICAgIDI1MiwgMTk5LCAyMDcsIDEsIDE4NiwgMjA3LCAxLCAxOTIsIDIwNywgMSwgMjA1LCAyMDcsIDEsIDIzMywgMTQxLCAyMDcsIAorICAgIDEsIDIxMiwgNjUsIDIwNywgMSwgMjA2LCAyMDcsIDEsIDIxMSwgMTY1LCAyMDcsIDEsIDE2MiwgMjA3LCAxMTcsIDUsIDIyNiwgCisgICAgNTYsIDIwNywgMTE3LCA1LCAyMjYsIDMyLCAyMDcsIDExNywgNSwgMjI2LCAyOSwgMjA3LCAyNSwgNSwgMjI2LCA0NiwgMjA3LCAKKyAgICAyNSwgNSwgMjI2LCAyOCwgMjA3LCAyNSwgNSwgMjI2LCA1MCwgMjA3LCAyNSwgNSwgMjI2LCAzOCwgMjA3LCAyNSwgNSwgCisgICAgMjI2LCA1NywgMjA3LCAyNSwgNSwgMjI2LCA0OCwgMjA3LCA1LCAyMjYsIDYwLCAyMDcsIDUsIDIxMywgMTUyLCAyMDcsIAorICAgIDExNywgNSwgMjI1LCAyNTIsIDE4NiwgMjA3LCAxMTcsIDUsIDIyNSwgMjUyLCAyMTIsIDY1LCAyMDcsIDEsIDIzNCwgMTM4LCAKKyAgICAyMDcsIDEsIDIxNywgMjMyLCAyMDcsIDIxLCAyMTAsIDg2LCAyMDcsIDIxLCAxMTEsIDIwNywgMjEsIDEwNSwgMjA3LCAyMSwgCisgICAgMTU4LCAyMDcsIDIxLCAxNjEsIDIwNywgMjEsIDE5MCwgMjA3LCAyMSwgMTk1LCAyMDcsIDIxLCAxOTksIDIwNywgMjEsIAorICAgIDE5NiwgMjA3LCAyMSwgMjAxLCAyMDcsIDI1MywgMTgzLCAyMDcsIDEsIDIyMywgNTUsIDIwNywgMSwgMjMzLCAxMywgMjA3LCAKKyAgICAxLCAyNTIsIDI2LCAyMDcsIDEsIDQwLCAyMzUsIDI5LCAyMDcsIDEsIDQwLCAxOTQsIDI1MiwgMTI4LCAxLCA2MSwgMjUyLCAKKyAgICAxMjgsIDEsIDIxOSwgMTY2LCA2MSwgMjUyLCAxMjgsIDEsIDE2MiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxNjIsIDI1MiwgCisgICAgMTI4LCAxLCAyMzEsIDE4NiwgMTYyLCAyNTIsIDEyOCwgMSwgMjUyLCAxOTksIDI1MiwgMTI4LCAxLCAyMzQsIDIxOCwgMjUyLCAKKyAgICAxOTksIDI1MiwgMTI4LCAxLCAxOTEsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTkxLCAyNTIsIDEyOCwgMSwgMTk4LCAyNTIsIAorICAgIDEyOCwgMSwgMjMxLCAxODYsIDE5OCwgMjUyLCAxMjgsIDEsIDIxMiwgNjUsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjEyLCAKKyAgICA2NSwgMjUyLCAxMjgsIDEsIDIyNiwgNzEsIDIxMiwgNjUsIDI1MiwgMTI4LCAxLCAyNDMsIDE0MiwgMjUyLCAxMjgsIDEsIAorICAgIDIxOSwgMTY2LCAyNDMsIDE0MiwgMjUyLCAxMjgsIDEsIDIzNSwgMTQ3LCAyNTIsIDEyOCwgMSwgMjQ4LCAyMjksIDI1MiwgCisgICAgMTI4LCAxLCAyMDUsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjA1LCAyNTIsIDEyOCwgMSwgMTg2LCAyNTIsIDEyOCwgMSwgCisgICAgMjE5LCAxNjYsIDE4NiwgMjUyLCAxMjgsIDEsIDIxOSwgMjgsIDIxNywgMTA2LCAyNTIsIDEyOCwgMSwgMjI4LCA2MCwgMjE3LCAKKyAgICAxMDYsIDI1MiwgMTI4LCAxLCAyMDYsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjA2LCAyNTIsIDEyOCwgMSwgMjMxLCAxODYsIAorICAgIDIwNiwgMjUyLCAxMjgsIDEsIDE5MiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxOTIsIDI1MiwgMTI4LCAxLCAyMjksIDgyLCAKKyAgICAyNTIsIDEyOCwgMSwgMjMzLCAxNDEsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjMzLCAxNDEsIDI1MiwgMTI4LCAxLCAyMjcsIAorICAgIDE2OSwgMjUyLCAxMjgsIDEsIDI1MSwgNDEsIDI1MiwgMTI4LCAxLCAyMjksIDE1MywgMjUyLCAxMjgsIDEsIDIzMSwgMTI5LCAKKyAgICAyNTIsIDEyOCwgMSwgNzQsIDI1MiwgMTI4LCAxLCA2OSwgMjUyLCAxMjgsIDUsIDIxNiwgMzQsIDI1MiwgMTI4LCAyNSwgNSwgCisgICAgNzYsIDI1MiwgMTI4LCAyNSwgNSwgMjI2LCA3MSwgNzYsIDI1MiwgMTI4LCAyNSwgNSwgMjQ1LCAyMTcsIDI1MiwgMTI4LCAKKyAgICAyNSwgNSwgNzQsIDI1MiwgMTI4LCAyNSwgNSwgMjM0LCAyMTgsIDc0LCAyNTIsIDEyOCwgMjUsIDUsIDc4LCAyNTIsIDEyOCwgCisgICAgMjUsIDUsIDIzNCwgMjE4LCA3OCwgMjUyLCAxMjgsIDI1LCA1LCA2OSwgMjUyLCAxMjgsIDI1LCA1LCAxMDQsIDMxLCAyMTksIAorICAgIDE2NiwgMjA2LCAyNTIsIDEyOCwgMTE3LCA1LCAyMjksIDg0LCAyNTIsIDEyOCwgMTE3LCA1LCAyNDIsIDY3LCAyNTIsIDEyOCwgCisgICAgMjI2LCA0MSwgMjUyLCAxMjgsIDIyNiwgMzcsIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIyOSwgMjM0LCAyMzEsIDQyLCAKKyAgICAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjUsIDY3LCAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMzUsIDU0LCAyNTIsIAorICAgIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjYsIDQxLCAxOTcsIDEsIDE3NiwgMTk3LCAxLCAyMzQsIDQ1LCAxOTcsIDEsIDIzNCwgCisgICAgMTM4LCAxOTcsIDEsIDI0MywgMTQyLCAxOTcsIDEsIDI0MiwgMTkzLCAxOTcsIDEsIDIyOSwgODIsIDE5NywgMSwgMjUxLCAKKyAgICA0MSwgMTk3LCAxLCAyNTAsIDE2NSwgMTk3LCAxLCAyMzUsIDE0NywgMTk3LCAxLCAyMjcsIDE2OSwgMTk3LCAxLCAyMTcsIAorICAgIDEwNiwgMTk3LCAxLCAyMTYsIDIwOSwgMTk3LCAxLCAyNDgsIDIyOSwgMTk3LCAxLCAxOTgsIDE5NywgMSwgMTkxLCAxOTcsIAorICAgIDEsIDIyNSwgNDUsIDE5NywgMSwgMjI1LCAxNTAsIDE5NywgMSwgMjQ0LCAyMDQsIDE5NywgMSwgMjQ0LCA4MywgMTk3LCAxLCAKKyAgICAyNTIsIDE5OSwgMTk3LCAxLCAyNTEsIDIzMCwgMTk3LCAxLCAxODYsIDE5NywgMSwgMjMwLCAxNzMsIDE5NywgMSwgMjE1LCAKKyAgICAxODQsIDE5NywgMSwgMjE1LCAxNzYsIDE5NywgMSwgMjQ2LCA0NiwgMTk3LCAxLCAxOTIsIDE5NywgMSwgMjA1LCAxOTcsIDEsIAorICAgIDIzMywgMTQxLCAxOTcsIDEsIDE2MiwgMTk3LCAxLCAyNDEsIDE2MCwgMTk3LCAxLCAyMTQsIDI3LCAxOTcsIDEsIDIwNiwgCisgICAgMTk3LCAxLCAyMjAsIDEwNCwgMTk3LCAxLCAyMTIsIDY1LCAxOTcsIDEsIDYxLCAxOTcsIDIxOCwgNzQsIDEsIDE5MiwgMTk3LCAKKyAgICAyMTgsIDc0LCAxLCAyMDUsIDE5NywgMjUsIDUsIDI1NSwgODIsIDE5NywgMjUsIDUsIDc0LCAxOTcsIDI1LCA1LCA3OCwgCisgICAgMTk3LCAyNSwgNSwgMjI2LCAxODcsIDE5NywgMjUsIDUsIDY5LCAxOTcsIDI1LCA1LCAyMTQsIDExOCwgMTk3LCAyNSwgNSwgCisgICAgNzYsIDE5NywgMTE3LCA1LCAyMzUsIDI5LCAxOTcsIDExNywgNSwgMTk0LCAxOTcsIDExNywgNSwgMTU2LCAxOTcsIDExNywgCisgICAgNSwgMjMwLCAzMCwgMTk3LCAxMTcsIDUsIDIyNiwgMTA5LCAxOTcsIDExNywgNSwgMTUzLCAxOTcsIDExNywgNSwgMjE3LCAKKyAgICAxNTMsIDE5NywgMTE3LCA1LCAyMjcsIDE0NiwgMTk3LCAxMTcsIDUsIDIzNCwgMjM2LCAxOTcsIDUsIDIyMywgMTUzLCAxOTcsIAorICAgIDUsIDIyNywgMjA5LCAxOTcsIDIyNCwgMTQ0LCAyMTcsIDEwNCwgMTk3LCAyMjQsIDE0NCwgMjI3LCAxNTYsIDIxNiwgMTIxLCAKKyAgICAyMTcsIDEwNCwgMTk3LCAyMjQsIDE0NCwgMjUwLCAxNzIsIDE5NywgMjI0LCAxNDQsIDIxNSwgMTcxLCAyNTAsIDE3MiwgCisgICAgMTk3LCAyMjQsIDE0NCwgMjE1LCAxNzAsIDE5NywgMjEsIDIxMCwgODYsIDE5NywgMjEsIDExMSwgMTk3LCAyMSwgMTA1LCAKKyAgICAxOTcsIDIxLCAxNTgsIDE5NywgMjEsIDE2MSwgMTk3LCAyMSwgMTkwLCAxOTcsIDIxLCAxOTUsIDE5NywgMjEsIDE5OSwgCisgICAgMTk3LCAyMSwgMTk2LCAxOTcsIDIxLCAyMDEsIDE5NywgMSwgMjE1LCAxNTcsIDE5NywgMSwgMjE1LCAxNDUsIDE5NywgMSwgCisgICAgMjQ4LCAxNDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDIxMCwgODYsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDExMSwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTA1LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxNTgsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjEsIDE2MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTkwLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTUsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5OSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk2LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIxLCAyMDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCAxNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgCisgICAgMjUzLCAyMTQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU0LCAyMjUsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU0LCAKKyAgICAxMjMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU0LCAxODcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCAxNDAsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCA0NCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDQ1LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDEsIDI1NSwgNDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCAzOCwgMjI2LCAyMTQsIDI1MCwgMTExLCAKKyAgICAxLCAyMzIsIDI0NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE3OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzYsIAorICAgIDQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTk3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTg2LCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMiwgMTAzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIxNCwgMjIxLCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDEsIDIxNCwgMjE5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIxNCwgMTY4LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDEsIDIxNCwgMTExLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgNjQsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMSwgMjQ1LCAxMTYsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjQ1LCAyMjAsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgCisgICAgMjQ1LCAxNTgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjQ1LCA5NCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzIsIAorICAgIDE2MiwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDE0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjcsIDAsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAxMjksIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAyMjYsIDIyNiwgMjE0LCAKKyAgICAyNTAsIDExMSwgMjMwLCAxMDgsIDIxNSwgMTIyLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDI0MywgMTM3LCAyMTUsIDEyMywgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMzAsIDEwNiwgMjE1LCAxMjMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjIzLCA5NSwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAyMjUsIDE0OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAyNTQsIDIxNywgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMjQsIDE0NCwgMjMwLCAxMDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjI0LCAxNDQsIDUyLCAyMzAsIDEwMywgMjA3LCAKKyAgICAyMjQsIDE0NCwgMjUxLCAyNDksIDIxOCwgOSwgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDIyNiwgNDIsIDIwNywgMjI0LCAKKyAgICAxNDQsIDI1MSwgMjQ5LCAyMjQsIDEzMiwgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDI1MSwgMjcsIDIwNywgMjI0LCAxNDQsIAorICAgIDI1MSwgMjQ5LCAyMzMsIDE0LCAyMjEsIDIyNywgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDIzNSwgMTksIDIyMSwgMjI3LCAKKyAgICAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjQ4LCAyMzAsIDIyMSwgMjI3LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgCisgICAgMjUyLCAyMDAsIDIyMSwgMjI3LCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIxNiwgMjEzLCAyNTIsIDEzOCwgMjIwLCA3OSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjI0LCAyMDEsIDIxMywgMjUyLCA1LCAyMjgsIDIxNCwgMjEzLCAyNTIsIDUsIDIxMSwgODAsIDIzMCwgCisgICAgMjI3LCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDI1NCwgMjIyLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIAorICAgIDI1MiwgMTM4LCAyMTEsIDgwLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyMzQsIDIwNCwgCisgICAgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjUxLCAxMCwgNTEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIAorICAgIDIzNCwgMjA0LCAyMzUsIDI1MCwgMjE4LCAyLCAyMjEsIDE5OSwgMjEzLCAyNTIsIDEzOCwgNTIsIDIxOCwgMSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjE1LCAyMTIsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMDQsIDI1NCwgODUsIDIxMywgMjUyLCAKKyAgICAxMzgsIDU5LCA1MSwgMjEzLCAyNTIsIDEzOCwgMTEzLCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAxMzQsIDE3MCwgNTEsIAorICAgIDIxMywgMjUyLCAxMzgsIDIyMiwgMjQzLCAyMzQsIDIxNSwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjUzLCAKKyAgICAyMTIsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE4LCAxLCAyMTMsIDI1MiwgNSwgMjEzLCAKKyAgICAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgMjIzLCA1MiwgMjEzLCAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgCisgICAgMjEzLCAxNDgsIDI1NCwgODUsIDIxMywgMjUyLCA1LCAyMjMsIDUyLCAyMTMsIDE0OCwgMjU0LCA4NSwgMjEzLCAyNTIsIDUsIAorICAgIDIxMywgMTQ4LCAyMTQsIDIxNywgMiwgMjE3LCA3OCwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIDg2LCAyLCAyMTcsIAorICAgIDc4LCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjU0LCA5OSwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDI1MiwgMTc0LCAyMTMsIAorICAgIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAyMCwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDIxNCwgMjEsIDIsIDIxNywgNzgsIDIxMywgCisgICAgMjUyLCA1LCAyMTYsIDY5LCAyMTMsIDI1MiwgNSwgMjQxLCAxOTgsIDIwMCwgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDIwMCwgCisgICAgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDIyMiwgMTQ0LCAyMDAsIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIAorICAgIDIyMywgMjMwLCA5NSwgMjEzLCAyNTIsIDUsIDI1NCwgMjgsIDIxMywgMjUyLCA1LCAyMjIsIDE4OSwgMjU0LCAyOCwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjUxLCAxMCwgNDgsIDIxMywgMjUyLCA1LCAyMzUsIDEwOCwgMjEzLCAyNTIsIDUsIDIxNCwgMTYxLCA3LCAKKyAgICAxLCA0LCA2LCA2MSwgNywgMSwgNCwgNiwgMjU0LCAyNTIsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgMjUyLCA3LCAxLCA0LCAKKyAgICA2LCAyNTIsIDE0MiwgMjUzLCAxNjYsIDcsIDEsIDQsIDYsIDI1MSwgNzQsIDcsIDEsIDQsIDYsIDI0OSwgNjgsIDcsIDEsIDQsIAorICAgIDYsIDI0NSwgNjcsIDcsIDEsIDQsIDYsIDc2LCA3LCA0LCAxLCAyMTUsIDk0LCAyMDQsIDc2LCA3LCA0LCAxLCAyMTUsIDk0LCAKKyAgICA3NCwgNywgMSwgNCwgNiwgMjM1LCAxNTAsIDcsIDEsIDQsIDYsIDIzNSwgMjksIDcsIDEsIDQsIDYsIDIzMywgMTU1LCAyLCAKKyAgICA5MSwgNywgMSwgNCwgNiwgMTk0LCA3LCAxLCA0LCA2LCAyMjMsIDUyLCAyMzAsIDMwLCA3LCAxLCA0LCA2LCA3OCwgNywgMSwgCisgICAgNCwgNiwgMjA0LCA3OCwgNywgNCwgMSwgMjE5LCAxODksIDc4LCA3LCA0LCAxLCAyMTksIDE4OSwgMjA0LCA3OCwgNywgNCwgCisgICAgMSwgMjE5LCAxODksIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDIyNiwgMjM4LCA3LCAxLCA0LCA2LCAyMjYsIAorICAgIDEzOCwgNywgNCwgMSwgMjE2LCAxNSwgMTYzLCA3OCwgNywgNCwgMSwgMjUxLCAxODMsIDE2MywgNzgsIDcsIDEsIDQsIDYsIAorICAgIDIyNiwgMTA5LCA3LCAxLCA0LCA2LCAyMjMsIDUyLCAxNTMsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE1MywgNywgMSwgNCwgNiwgCisgICAgMjE3LCAxNTMsIDcsIDEsIDQsIDYsIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCAyNDgsIAorICAgIDgsIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgMjE1LCA5NCwgMTk0LCA3LCAxLCA0LCA2LCAyMTQsIDEwNSwgNywgMSwgNCwgNiwgCisgICAgMjEyLCA5OCwgNywgMSwgNCwgNiwgMjEwLCAxNTksIDcsIDEsIDQsIDYsIDI0NSwgMTYsIDcsIDEsIDIxMywgMTM1LCAyMzMsIAorICAgIDg4LCAyMTgsIDI1MiwgNywgMSwgMjU0LCAyMDUsIDI2LCAxLCA0LCA2LCAyNDMsIDExNCwgMjYsIDEsIDQsIDYsIDIzMywgCisgICAgMTA0LCAyNiwgMSwgNCwgNiwgMjI1LCAxMTEsIDI2LCAxLCA0LCA2LCAyMjMsIDQwLCAyNiwgMSwgNCwgNiwgMjI0LCAxNjQsIAorICAgIDMzLCAxLCA0LCA2LCAyNDUsIDE4MiwgNTgsIDEsIDYsIDYxLCA1OCwgMSwgNiwgMjU0LCAyNTIsIDU4LCAxLCA2LCAyNTMsIAorICAgIDE2NiwgNTgsIDEsIDYsIDI1MiwgMTQyLCAyNTMsIDE2NiwgNTgsIDEsIDYsIDI0OSwgNjgsIDU4LCAxLCA2LCA3NiwgNTgsIAorICAgIDEsIDYsIDIyMywgNTIsIDc2LCA1OCwgMSwgNiwgMjQzLCAyMDksIDU4LCAxLCA2LCAyNDIsIDY3LCA1OCwgMSwgNiwgNzQsIAorICAgIDU4LCAxLCA2LCAyMzUsIDE1MCwgNTgsIDEsIDYsIDIzNSwgMjksIDU4LCAxLCA2LCAxNTYsIDU4LCAxLCA2LCAxOTQsIDU4LCAKKyAgICAxLCA2LCAyMzAsIDMwLCA1OCwgMSwgNiwgMjIzLCA1MiwgMjMwLCAzMCwgNTgsIDEsIDYsIDc4LCA1OCwgMSwgNiwgMjI2LCAKKyAgICAxMzgsIDU4LCAxLCA2LCAyMjYsIDEwOSwgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDIxNywgMTUzLCA1OCwgMSwgNiwgNjksIAorICAgIDU4LCAxLCA2LCAyMTIsIDk4LCA1OCwgMSwgNCwgNjEsIDU4LCAxLCA0LCAyMTUsIDk0LCA2MSwgNTgsIDEsIDQsIDI1NCwgCisgICAgMTUxLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAyNTIsIDU4LCAxLCA0LCAyNTMsIDE2NiwgNTgsIDEsIDQsIDI0OSwgNjgsIAorICAgIDU4LCAxLCA0LCA3NiwgNTgsIDEsIDQsIDIyMSwgMTk3LCA1OCwgMSwgNCwgMjA0LCA3NiwgNTgsIDEsIDQsIDIxNSwgOTQsIAorICAgIDIwNCwgNzYsIDU4LCAxLCA0LCAyNDMsIDIwOSwgNTgsIDEsIDQsIDIxNSwgOTQsIDc0LCA1OCwgMSwgNCwgMjM1LCAyOSwgCisgICAgNTgsIDEsIDQsIDE5NCwgNTgsIDEsIDQsIDI0NSwgMTQ2LCA1OCwgMSwgNCwgNzgsIDU4LCAxLCA0LCAyMDQsIDc4LCA1OCwgCisgICAgMSwgNCwgMjE2LCAxNSwgMTYzLCA3OCwgNTgsIDEsIDQsIDI1MSwgMTgzLCAxNjMsIDc4LCA1OCwgMSwgNCwgMjI2LCAxMDksIAorICAgIDU4LCAxLCA0LCAyMTcsIDE1MywgNTgsIDEsIDQsIDY5LCA1OCwgMSwgNCwgMjE5LCAxODksIDY5LCA1OCwgMSwgNCwgMjE1LCAKKyAgICA5NCwgMTk0LCA1OCwgMSwgNCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyNTQsIDIwNSwgNTgsIDEsIDQsIDI1MiwgMzQsIDU4LCAKKyAgICAxLCA0LCAyNiwgMjQzLCAxMTQsIDU4LCAxLCA0LCAyNDgsIDYyLCA1OCwgMSwgNCwgMjYsIDIyNSwgMTM2LCA1OCwgMSwgNCwgCisgICAgMjUwLCAxMTgsIDcsIDIxOCwgNjYsIDQsIDEsIDc0LCA3LCAyMTgsIDY2LCA0LCAxLCAxNTMsIDcsIDIxOCwgNjYsIDQsIDEsIAorICAgIDY5LCA3LCAyMTgsIDY2LCA0LCAxLCAyMTQsIDEwNSwgMjYsIDIxOCwgNjYsIDQsIDEsIDI1MiwgMzQsIDI2LCAyMTgsIDY2LCAKKyAgICA0LCAxLCAyNDMsIDExNCwgMjYsIDIxOCwgNjYsIDQsIDEsIDIyMywgNDAsIDI2LCAyMTgsIDY2LCA0LCAxLCAyMjUsIDEzNiwgCisgICAgMjYsIDIxOCwgNjYsIDQsIDEsIDI1MCwgMTE4LCA3LCA0LCAxLCAyMTQsIDIxNCwgNywgNCwgMSwgNTcsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDI0NCwgOTYsIDIyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMjIsIDk0LCAKKyAgICAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjEwLCAxNjAsIAorICAgIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MywgMjA5LCA1OCwgMSwgMzMsIDI0NSwgMTU4LCA3LCA0LCAKKyAgICAxLCAyMzUsIDIyMCwgMjQzLCAyMDksIDcsIDQsIDEsIDIxNiwgMjEyLCAyLCAyMTgsIDEwOSwgNywgNCwgNiwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE5MywgMiwgOTEsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCA5MSwgNywgNCwgNiwgCisgICAgMSwgMTA0LCAyLCA5MSwgNywgNCwgMSwgMjE0LCAxNTgsIDIsIDkxLCA3LCA0LCAxLCA1NywgMiwgMjI2LCA3MCwgMTAzLCA3LCAKKyAgICA0LCAxLCAyNDksIDY5LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgCisgICAgMSwgMjQzLCAyMTAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIzMCwgMzEsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjIzLCAyMjcsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyNDUsIDg0LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIxMSwgMTc5LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDExNiwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDksIAorICAgIDY5LCAyLCAyNDEsIDU5LCAyMiwgMjE3LCA3OCwgNywgNCwgMSwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDIwNCwgCisgICAgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAorICAgIDEsIDIyMSwgMTk4LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAorICAgIDEsIDIwNCwgMTQ0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0NSwgODQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgCisgICAgMTA0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIxNSwgCisgICAgOTQsIDI1NCwgMTUxLCA1OCwgMSwgNCwgMjUxLCA3NCwgNTgsIDEsIDQsIDI1MSwgNzUsIDIsIDI0OSwgMTA4LCA1OCwgMSwgCisgICAgNCwgMjQ1LCA2NywgNTgsIDEsIDQsIDIyMywgNTIsIDIwNCwgNzYsIDU4LCAxLCA0LCAyNDUsIDE0LCA1OCwgMSwgNCwgMjQ3LCAKKyAgICAxMjcsIDIzNSwgMTUxLCAyLCA5MSwgNTgsIDEsIDQsIDExOSwgMjQzLCAyMDksIDU4LCAxLCA0LCAyMTUsIDk0LCAyNDIsIAorICAgIDY3LCA1OCwgMSwgNCwgMjQwLCAxNjEsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxOTIsIDU4LCAxLCA0LCA2LCA3NCwgNTgsIAorICAgIDEsIDQsIDYsIDI0MCwgMTYxLCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTUxLCAyLCAyNDksIDEzNSwgNTgsIDEsIDQsIDIzMywgCisgICAgMTU1LCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMzMsIDE1NSwgMiwgMjI2LCA3MCwgMTAzLCA1OCwgMSwgNCwgNiwgCisgICAgMTU2LCA1OCwgMSwgNCwgMjMyLCA1NSwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjMyLCA1NSwgMiwgMjAwLCAyMzMsIAorICAgIDQyLCA1OCwgMSwgNCwgMjMwLCAzMSwgMiwgNDMsIDEwMywgNTgsIDEsIDQsIDIzMCwgMzEsIDIsIDIyMywgNTgsIDEwMywgCisgICAgNTgsIDEsIDQsIDYsIDIzMCwgMzAsIDU4LCAxLCA0LCAyNTIsIDE0MiwgNzgsIDU4LCAxLCA0LCAyMjUsIDEzNiwgNTgsIDEsIAorICAgIDQsIDIyMiwgOTQsIDIsIDEwMywgNTgsIDEsIDQsIDI0NSwgODMsIDU4LCAxLCA0LCAyMTcsIDE1NCwgMiwgMjI2LCA3MCwgCisgICAgMTAzLCA1OCwgMSwgNCwgMTA0LCAxMzAsIDU4LCAxLCA0LCAyMTQsIDE1NywgNTgsIDEsIDQsIDYsIDY5LCA1OCwgMSwgNCwgCisgICAgMjE0LCAxMDYsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjEwLCAxNTksIDU4LCAxLCAKKyAgICA0LCAyMTAsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjEwLCAxNjAsIDIsIDI0OSwgMTA4LCA1OCwgMSwgNCwgCisgICAgMjQ1LCAxNiwgNTgsIDEsIDQsIDIxNiwgMTgwLCAzOCwgMjQ2LCAxMjYsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzOCwgMjQ2LCAKKyAgICAxMjYsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyMTksIDcxLCA1MSwgMzgsIDIxOCwgNywgNzksIDM4LCAyMzEsIDIzNiwgMzgsIAorICAgIDI0MiwgMTQxLCAzOCwgMjMxLCAyMzQsIDM4LCAyNTUsIDEwLCAzOCwgMjQyLCAxNDIsIDM4LCAyNTUsIDExLCAzOCwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDUxLCAzOCwgMjUxLCAxNTMsIDM4LCAyMzEsIDIzNSwgMzgsIDUyLCAyNTAsIDM5LCA0OCwgMzgsIAorICAgIDIyNiwgMjI5LCA0OCwgMzgsIDIxMCwgMzUsIDUxLCAzOCwgMjM1LCAxNzksIDUxLCAzOCwgMjE0LCAxNTEsIDQ4LCAzOCwgCisgICAgMjE0LCAxMzQsIDQ4LCAzOCwgNywgNCwgMSwgMjQ0LCA3MSwgMjA0LCAxMTYsIDQ4LCAzOCwgNywgNCwgMSwgMjU0LCAyNTIsIAorICAgIDM4LCA3LCA0LCAxLCAyNTQsIDgxLCAzOCwgNywgNCwgMSwgMjUzLCAxODQsIDM4LCA3LCA0LCAxLCAyNTEsIDc1LCAyNTAsIAorICAgIDE5MSwgMzgsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCAzOCwgNywgNCwgMSwgMjQ1LCA2NywgMzgsIDcsIDQsIDEsIAorICAgIDI0MywgMjA5LCAzOCwgNywgMSwgNCwgNiwgMjQzLCAyMDksIDM4LCA3LCA0LCAxLCAyMzUsIDI5LCAzOCwgNywgNCwgMSwgCisgICAgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTk0LCAzOCwgNywgNCwgMSwgMjMwLCAzMCwgMzgsIAorICAgIDcsIDEsIDQsIDYsIDIzMCwgMzAsIDM4LCA3LCAxLCA0LCA2LCAxNTMsIDM4LCA3LCA0LCAxLCAyMjMsIDIyNywgMjIyLCAKKyAgICAxODgsIDM4LCA3LCA0LCAxLCAyMjIsIDkzLCAzOCwgNywgNCwgMSwgMjAwLCAyMjIsIDkzLCAzOCwgNywgNCwgMSwgMjEwLCAKKyAgICAxNTksIDM4LCA1MiwgMjM1LCAyMDAsIDI1MSwgMTU1LCA1MSwgMzgsIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDUxLCAzOCwgCisgICAgNDMsIDI1NCwgMiwgNDgsIDM4LCA0NCwgMjU0LCAyLCAyMiwgMTI0LCAyNTQsIDIsIDUxLCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDIyMiwgMjM3LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNTEsIDcsIDYsIDEsIDU3LCAyLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDU3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDU3LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDU3LCAyLCA1OSwgNTEsIDcsIAorICAgIDYsIDEsIDU3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDU3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDI1MSwgCisgICAgNzUsIDIsIDI1MCwgMTkyLCAyMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MiwgMjIsIDE0MiwgNywgNiwgCisgICAgMSwgMjQ5LCA2OSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0OSwgNjksIDIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyMzIsIDIyMCwgNTEsIAorICAgIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAxOTEsIDcsIDQsIAorICAgIDEsIDI0OSwgNjksIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjQ5LCAKKyAgICA2OSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAxNjAsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDIxNiwgOTAsIAorICAgIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTkyLCAyMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAxOTIsIAorICAgIDIyLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQ1LCAxNSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDUsIDE1LCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDY4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQyLCA2OCwgMiwgNTksIAorICAgIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI0OCwgOSwgNywgNCwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgCisgICAgMjUwLCAxOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI1MSwgMTU1LCA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjUxLCAKKyAgICAxNTUsIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMTYsIAorICAgIDkwLCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAKKyAgICAyNDgsIDEwLCAyMiwgMTQyLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAxNDIsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDE0MiwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzNSwgMzAsIAorICAgIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgNTksIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNTksIDI1MiwgNTEsIAorICAgIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIAorICAgIDIzMywgMTU1LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIAorICAgIDIzMywgMTU1LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAKKyAgICAyMzIsIDU1LCAyLCAxNDIsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE0MiwgNywgNiwgMSwgMjMyLCA1NSwgMiwgNTksIDQ4LCAKKyAgICA3LCA0LCAxLCAyMzIsIDU1LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMyLCAKKyAgICA1NSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjMwLCAzMSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgCisgICAgMzEsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMzAsIDMxLCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCAKKyAgICA5MCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgOTAsIAorICAgIDIyLCAyNDgsIDksIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDI0OCwgOSwgNywgNiwgMSwgMTQ0LCAyLCAyMzEsIAorICAgIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgCisgICAgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDIyNiwgCisgICAgMTEwLCAyLCAxNDIsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAxNDIsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDIyNiwgMTEwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMywgCisgICAgMjI3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCA1OSwgCisgICAgNTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMjMsIDIyNywgCisgICAgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIAorICAgIDk0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgNTksIDUxLCAKKyAgICA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNTUsIDEyLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTUsIDEyLCAKKyAgICAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MywgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5NCwgCisgICAgMiwgMjUwLCAyNDMsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyMjIsIDk0LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjE3LCAKKyAgICAxNTQsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIAorICAgIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgCisgICAgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgNTEsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA5MCwgNTEsIDcsIDYsIDEsIDEwNCwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjE2LCA5MCwgCisgICAgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDkwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAKKyAgICAyMiwgMjQ4LCA5LCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgCisgICAgMTg0LCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTg0LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAKKyAgICAyMTQsIDEwNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjEyLCA5OSwgMiwgCisgICAgMjQyLCAxNDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAyMTIsIDk5LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI0OCwgOSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgCisgICAgNTksIDQ4LCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCA5LCA3LCA2LCAKKyAgICAxLCAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTAsIDE2MCwgCisgICAgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIAorICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAyMTEsIAorICAgIDExOCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDQ0LCAxNjMsIDIyMiwgMjM2LCA3LCA0LCAxLCAyMDAsIAorICAgIDIyMiwgOTQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjAwLCAyMjIsIDk0LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMDAsIAorICAgIDIyMiwgOTQsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDIyMCwgNzgsIDIyMiwgOTMsIDcsIDQsIDEsIDI0OCwgNjIsIDcsIDYsIAorICAgIDEsIDExNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTE2LCAyLCAyNDEsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMTE2LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIAorICAgIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgCisgICAgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIAorICAgIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDI1MSwgMTU1LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAyNDEsIDU5LCA0OCwgNywgCisgICAgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE4NCwgNywgCisgICAgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDU5LCAKICAgICA1MSwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDE4MiwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAKLSAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAotICAgIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCAKLSAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQxLCA1MiwgNDgsIDcsIAotICAgIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDU5LCA1MSwgNywgNCwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAKLSAgICAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgCi0gICAgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDU5LCAKLSAgICA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAKLSAgICAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgCi0gICAgMTA0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCA1MiwgCi0gICAgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDEwNCwgCi0gICAgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTM2LCA3LCA0LCAKLSAgICAxLCAyMTEsIDExOCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIAotICAgIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTgyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTgyLCA3LCA2LCAKLSAgICAxLCAyMzAsIDIyMywgMjMyLCAxODUsIDcsIDQsIDEsIDIzMCwgMjIzLCAyMzIsIDE4NSwgNywgNiwgMSwgMjMwLCAyMjMsIAotICAgIDIxNCwgMTA1LCA3LCA0LCAxLCAyMzAsIDIyMywgMjE0LCAxMDUsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyMywgNywgCi0gICAgNCwgMSwgMjExLCAxMTgsIDIsIDIzMiwgMTIzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgCi0gICAgMjU0LCAxNDQsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIAotICAgIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAKLSAgICAyNDgsIDE1MywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAKLSAgICAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgCi0gICAgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTQsIDI2LCAKLSAgICA2LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAKLSAgICAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIAotICAgIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgCi0gICAgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgNjQsIAotICAgIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgCi0gICAgMTU0LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIAotICAgIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgCi0gICAgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIAotICAgIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjM1LCAxODYsIAotICAgIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgCi0gICAgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1MywgMjYsIDYsIAotICAgIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAKLSAgICAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIAotICAgIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMjYsIAotICAgIDIwMCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgCi0gICAgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIAotICAgIDQsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMjYsIDIwMCwgCi0gICAgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgCi0gICAgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDIxNCwgMTU4LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTUzLCAyNiwgNiwgCi0gICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAKLSAgICAyMjYsIDIwMiwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAKLSAgICAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCi0gICAgMjU0LCAxNDQsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIAotICAgIDEwMSwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjYsIAotICAgIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDIyNiwgMTEwLCAyNiwgCi0gICAgNCwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAKLSAgICAyMjYsIDIwMiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI1NCwgCi0gICAgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKLSAgICAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgCi0gICAgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIAotICAgIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIAotICAgIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAKLSAgICAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxMCwgMjE5LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKLSAgICAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgCi0gICAgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIAotICAgIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgCi0gICAgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIAotICAgIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgCi0gICAgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCAKLSAgICA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA0LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIAotICAgIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAKLSAgICAyMTAsIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAKLSAgICAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgCi0gICAgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgCi0gICAgMjU0LCAxNDQsIDIsIDIzMSwgMjMyLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIAotICAgIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjYsIDExMSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNSwgMTc2LCAKLSAgICAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgCi0gICAgMjMxLCAyMzIsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE2NywgMjYsIDIzNCwgMiwgMjYsIDIyNCwgMTY3LCAyNiwgMjI0LCAKLSAgICAxNTQsIDI2LCAyMjUsIDE3NSwgMjYsIDI0NywgMjUyLCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMTQsIAotICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIAotICAgIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI0NSwgCi0gICAgNjQsIDIsIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIAotICAgIDI0NSwgMTAxLCAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTY3LCAyNiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAKLSAgICAyNiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIAotICAgIDE4NiwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjMxLCAyMzIsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgCi0gICAgMjQ3LCAyNTIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjI2LCAxMTAsIDI2LCAKLSAgICA0LCAxLCAyMzUsIDE4NiwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTIsIDIyLCAyMjUsIAotICAgIDE3NSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMzEsIDIzMiwgCi0gICAgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNiwgMTEwLCAyNiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzIsIDI2LCA0LCAKLSAgICAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAyNTIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAKLSAgICAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjMsIDM4LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIyMywgMzgsIDIsIDI0OCwgCi0gICAgMTUzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAKLSAgICAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgCi0gICAgMjMxLCAyMzIsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDIyMywgMzgsIDIsIDI0OCwgMTUzLCAyNiwgMjQ3LCAyNTIsIDIyLCAyMTQsIDEzLCAyNiwgMjQ3LCAKLSAgICAyNTIsIDIyLCAyMjYsIDExMCwgMjYsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNiwgMTExLCAKLSAgICAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNjcsIDI2LCAyMjYsIDExMCwgMjYsIDI0OCwgMTUzLCAKLSAgICAyNDUsIDE1MSwgMjI0LCAyNywgMjQ1LCAxNjAsIDIyNCwgMjcsIDI0NSwgMTUxLCAyMTksIDE4LCAyNDUsIDE2MCwgMjE5LCAKLSAgICAxOCwgMjE2LCAxNDEsIDIxOSwgMTgsIDI0NCwgOSwgMjE5LCAxOCwgMjE5LCAxMjMsIDIxOSwgMTgsIDI0NCwgMTEyLCAyMTksIAotICAgIDE4LCAyMjQsIDE0MSwgMjE5LCAxOCwgMjE2LCAxNzAsIDIxOSwgMTgsIDI0MiwgMzUsIDIxOSwgMTgsIDIxMCwgODcsIDIxMSwgCi0gICAgMjQ1LCAyMTksIDE4LCAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA2NywgMjEwLCA4NywgMjExLCAyNDUsIDIzNSwgNjMsIAotICAgIDIzMywgMzgsIDc4LCAyMjIsIDI0MywgNzgsIDI0MCwgMTY4LCAyMjgsIDY4LCAyNDAsIDE2OCwgMjQ0LCAxMTIsIDI0OCwgCi0gICAgMTU2LCAyNDUsIDE1MSwgMjQ4LCAxNTYsIDI0NSwgMTYwLCAyNDgsIDE1NiwgMjAzLCAxMzAsIDUyLCA2NywgMjMyLCAyMTMsIAotICAgIDUyLCAxMjEsIDIzMiwgMjEzLCA0MywgMjE5LCAxNTUsIDIyMywgMjU0LCA3OCwgNDQsIDIxOSwgMTU1LCAyMjMsIDI1NCwgCi0gICAgNzgsIDIxOSwgMTU1LCAyMzIsIDEwOSwgMjIzLCAyNTQsIDc4LCAyMTksIDE1NSwgMjQxLCAxNjMsIDIyMywgMjU0LCA3OCwgCi0gICAgNDMsIDUyLCAyMjMsIDI1NCwgNzgsIDQ0LCA1MiwgMjIzLCAyNTQsIDc4LCA1MiwgMjMyLCAxMDksIDIyMywgMjU0LCA3OCwgCi0gICAgNTIsIDI0MSwgMTYzLCAyMjMsIDI1NCwgNzgsIDI0OCwgMjA1LCA1MiwgMjQ4LCAyMDUsIDI1MSwgMTEzLCAyMTUsIDIyMiwgCi0gICAgMjUxLCAxMTMsIDEyMywgNTksIDIzMywgNTYsIDExMywgNTksIDIzMywgNTYsIDIwMywgMjQ1LCAxNjMsIDI0MCwgMTY2LCAKLSAgICAyMjUsIDEwLCAyMzIsIDIxNCwgMjIwLCAxMzcsIDIyNiwgMTUsIDIyMCwgMTM3LCAyMzMsIDM4LCAyNDUsIDE1OCwgMjIyLCAKLSAgICAyNDMsIDI0NSwgMTU4LCAyMjQsIDI0NiwgMjQ3LCAxOTYsIDI0NCwgMTksIDIzMywgMzgsIDIyNiwgMTE3LCAyMjIsIDI0MywgCi0gICAgMjI2LCAxMTcsIDIyOSwgMTk0LCAyMjgsIDczLCAyMTksIDE4LCAyMjUsIDE4MywgMjMwLCAxOTMsIDUwLCAyMjUsIDE4MywgCi0gICAgMjE2LCAyNDgsIDIxNiwgMTQ4LCA1MCwgMjI0LCAxOTAsIDUyLCAyMjQsIDE5MCwgMjE1LCAyMTEsIDIyNCwgMTkwLCAyMjMsIAotICAgIDQ5LCAyMjQsIDE5MCwgMjIzLCA0OSwgNTIsIDIyNCwgMTkwLCAyMjMsIDQ5LCAyMTUsIDIxMSwgMjI0LCAxOTAsIDI1MCwgCi0gICAgMjM4LCAyMTksIDE1NSwgMjMzLCA0MiwgMjU0LCAxMTAsIDIyMywgMjU0LCA3OCwgMjE5LCAxNTUsIDIyMiwgMjQ3LCAyNTQsIAotICAgIDExMCwgMjIzLCAyNTQsIDc4LCAyMjMsIDEwNywgNzgsIDUyLCAyNDUsIDMxLCA3OCwgMjM1LCAyMDEsIDIyNiwgMTE5LCAKLSAgICAyMTQsIDE4MCwgMTM1LCAyMTYsIDExMSwgMjUwLCAyMzksIDIzNSwgMjE2LCAyMjUsIDEwLCAyNTMsIDIxNCwgMjQwLCAxNjksIAotICAgIDI1MSwgMTEzLCAyNDQsIDIsIDIxOSwgOTUsIDQzLCA0MiwgMjUxLCAxNTgsIDIsIDIyNCwgNywgNDQsIDQyLCAyNTEsIDE1OCwgCi0gICAgMiwgMjI0LCA3LCA1MiwgMjI0LCAxMywgNzgsIDIyNCwgMTMsIDI0NSwgMzEsIDc4LCAyNDUsIDMxLCAyMjQsIDEzLCA3OCwgCi0gICAgMjE2LCA3MCwgNSwgMjQ1LCA2NSwgMjIzLCA0OSwgMjI1LCA2OCwgNTAsIDg1LCAxNDAsIDI1MSwgMTEzLCA4NSwgOTcsIAotICAgIDI1MSwgMTEzLCAxMjEsIDI1MywgMjE2LCAyMjMsIDQ5LCAyMjAsIDE1MCwgMjUwLCAxLCAyMTQsIDE2MywgMTEzLCAyNTMsIAotICAgIDIxNSwgMjU0LCAxNTgsIDIxMywgMTg4LCAyNDksIDIxNywgMjMwLCAxODIsIDUwLCAyMTcsIDIzNCwgMjQ4LCAxNTYsIDIzNSwgCi0gICAgMTkzLCAyMTQsIDE4MCwgMjQ0LCA1MiwgMjI0LCAxNDEsIDc4LCAxMzQsIDU5LCAyMjQsIDE0MCwgMjI0LCAyNCwgMjI0LCAKLSAgICAxOTAsIDI0NCwgMTEsIDU5LCAyMjQsIDE0MCwgMjQ0LCA4MSwgNTksIDIyNCwgMTQwLCAxMTMsIDU5LCAyMjQsIDE0MCwgCi0gICAgMjQ0LCAxMSwgNTksIDc4LCAyNDYsIDExOCwgMjQ5LCAxMzAsIDIxNSwgMjIxLCA2NywgMjQ0LCAxMSwgMjQ3LCAxMTgsIAotICAgIDIzMSwgODIsIDExLCAyMTksIDE4LCAyMTEsIDIwOSwgMjM1LCA2MywgMjQzLCAyMjcsIDI1NCwgNTIsIDIzNSwgMTkxLCAKLSAgICAyMTYsIDg1LCAyMzUsIDE5MSwgMjIwLCAxMzcsIDIzNSwgMTkxLCAyMjUsIDIyLCAyMzUsIDIyOCwgMjE3LCAxODIsIDIxNywgCi0gICAgMjUxLCAyNTUsIDUsIDIxNywgMTgyLCAyMTcsIDI1MSwgMjM1LCAyMjgsIDEwLCAyNDQsIDIwLCAyMjAsIDgwLCAyNTUsIDUsIAotICAgIDEwLCAyNDQsIDIwLCAyMjAsIDgwLCAyMjksIDE4OSwgMjEsIDIyMCwgODEsIDIyOCwgNjksIDIxLCAyMjAsIDgxLCAyMTgsIAotICAgIDIzLCAyMTAsIDg2LCAyMTgsIDIzLCA3LCA0LCAxLCA3MywgMjE4LCAyMywgMTYxLCAyMTgsIDIzLCAxODksIDIxOCwgMjMsIAotICAgIDE5NCwgMjE4LCAyMywgMTk4LCAyMTgsIDIzLCAxOTUsIDIxOCwgMjMsIDIwMCwgMjE4LCAyMywgOTYsIDUwLCAyMTgsIDIzLCAKLSAgICAyMzAsIDE4MSwgMjE4LCAyMywgMjQ1LCA5OCwgNTAsIDIxOCwgMjMsIDQzLCAyMjYsIDMsIDIxOCwgMjMsIDQ0LCAyMjYsIDMsIAotICAgIDIxOCwgMjMsIDcsIDQsIDEsIDIzMCwgMjUsIDIxOCwgNjUsIDIxMCwgODYsIDIxOCwgNjUsIDExMCwgMjE4LCA2NSwgMTA1LCAKLSAgICAyMTgsIDY1LCAxNTgsIDIxOCwgNjUsIDE2MSwgMjE4LCA2NSwgMTg5LCAyMTgsIDY1LCAxOTQsIDIxOCwgNjUsIDE5OCwgCi0gICAgMjE4LCA2NSwgMTk1LCAyMTgsIDY1LCAyMDAsIDIxOCwgNjUsIDk2LCA1MCwgMjE4LCA2NSwgMjMwLCAxODEsIDIxOCwgNjUsIAotICAgIDI0NSwgOTgsIDUwLCAyMTgsIDY1LCA0MywgMjI2LCAzLCAyMTgsIDY1LCA0NCwgMjI2LCAzLCA3LCAyMTgsIDY1LCA0LCAxLCAKLSAgICA2MSwgNywgMjE4LCA2NSwgNCwgMSwgNzUsIDcsIDIxOCwgNjUsIDQsIDEsIDc2LCA3LCAyMTgsIDY1LCA0LCAxLCAyMTEsIAotICAgIDE3OCwgNywgMjE4LCA2NSwgNCwgMSwgMjIxLCAxOTUsIDcsIDIxOCwgNjUsIDQsIDEsIDI0MiwgNjAsIDcsIDIxOCwgNjUsIAotICAgIDQsIDEsIDIzNSwgMjMsIDcsIDIxOCwgNjUsIDQsIDEsIDE1NiwgNywgMjE4LCA2NSwgNCwgMSwgMTkzLCA3LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMzAsIDI1LCA3LCAyMTgsIDY1LCA0LCAxLCAyMjYsIDEwNSwgNywgMjE4LCA2NSwgNCwgMSwgMjIyLCA5MSwgNywgCi0gICAgMjE4LCA2NSwgNCwgMSwgMjE3LCAxNTIsIDI0NSwgNDYsIDUwLCAyNDksIDIyNywgNTAsIDI0OSwgMTE3LCA1MCwgMjQzLCAKLSAgICAyNTEsIDI0MywgMjU0LCA1MCwgMjMyLCAxOTgsIDUwLCAyMzAsIDE5NCwgNTAsIDIyOSwgMjEwLCA1MCwgMjI1LCAxNjIsIAotICAgIDUwLCAyMjIsIDExOCwgNTAsIDIxMSwgMjE3LCA1MCwgMTY2LCAyMjAsIDQ5LCA1MCwgMjQ3LCAxMjcsIDUwLCAyNDUsIDQ3LCAKLSAgICA1MCwgMjM0LCA3NiwgNTAsIDIxNSwgMTEyLCA1MCwgMjQ2LCAxMDEsIDUwLCAyNDMsIDQwLCAyMjUsIDE5MywgNTAsIDIyNSwgCi0gICAgMTYwLCA1MCwgMjQyLCAxMDksIDUwLCAyNTMsIDE4MiwgNTAsIDI0MCwgMjI4LCA1MCwgMjUwLCAxODUsIDUwLCAyMzIsIAotICAgIDE5MSwgMjE2LCAzLCA1MCwgMjE5LCAwLCA1MCwgMjE2LCAyNDUsIDUwLCAyMzUsIDI0MSwgMjIyLCAxMTgsIDUwLCAzOCwgCi0gICAgNDMsIDI0MSwgMjU1LCA0OCwgMzgsIDQ0LCAyNDEsIDI1NSwgNDgsIDM4LCAxOTksIDY3LCAyMzIsIDIxNCwgMjI2LCAxMjAsIAotICAgIDM4LCAyMTksIDI1MSwgNjcsIDIzMiwgMjE0LCAyMjYsIDEyMCwgMzgsIDI1NCwgODgsIDgwLCA0OCwgMzgsIDI1MCwgMiwgCi0gICAgODAsIDQ4LCAzOCwgNDMsIDgwLCA0OCwgMzgsIDQ0LCA4MCwgNDgsIDM4LCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAyNTAsIAotICAgIDIsIDIyMiwgMjM0LCAyMjYsIDEyMCwgMzgsIDI1NCwgODgsIDIyMiwgMjM0LCAyMjYsIDEyMCwgMzgsIDEzNCwgMTcwLCA0OCwgCi0gICAgMzgsIDI0NCwgMTEsIDE3MCwgNDgsIDM4LCAyNDUsIDE0NiwgMjUwLCAzNSwgMzgsIDI0NSwgMTQ2LCAyMTgsIDIzNCwgMzgsIAotICAgIDI0NSwgMTQ2LCAyNDcsIDI0OCwgMzgsIDI0NSwgMTQ2LCAyNTAsIDM2LCAyNTIsIDE4MCwgMzgsIDQzLCA0NCwgODAsIDQ4LCAKLSAgICAzOCwgMjQ1LCAxNDYsIDIyMSwgMTg4LCAzOCwgMjQ1LCAxNDYsIDIzNCwgMTM1LCAzOCwgMjQ1LCAxNDYsIDIxNCwgMTU1LCAKLSAgICAyMjUsIDcsIDIxNSwgMjI1LCAzOCwgMjIzLCA1MCwgMjE5LCA0NywgMjI2LCAxMjAsIDM4LCA1MiwgNjcsIDIxOCwgMTAzLCAKLSAgICAyMjYsIDEyMCwgMzgsIDI1NCwgOTgsIDg3LCAzOCwgMjE1LCAyMTEsIDIxNCwgMTgyLCAzOCwgMjExLCAyNDcsIDI1MSwgCi0gICAgMTQwLCA0OCwgMzgsIDE0MCwgODAsIDIyNiwgMTIwLCAzOCwgMTk5LCA1MiwgMjE5LCA0NywgMjI2LCAxMjAsIDM4LCA5NywgCi0gICAgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIDEwMywgMzgsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIAotICAgIDEwMywgMzgsIDQzLCA4MCwgNTEsIDM4LCA0NCwgODAsIDUxLCAzOCwgMjUzLCAyMTcsIDQ4LCAyNTUsIDExLCAyMjYsIDIzMSwgCi0gICAgMjU0LCAyNTEsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMTgsIDc0LCAxMzksIDYsIDI1MSwgNjYsIDI0OCwgNzEsIDI1MCwgMTc4LCAKLSAgICAyNTAsIDE3NSwgMjMyLCAyMTQsIDg3LCAyNTAsIDI0MCwgMjI2LCAyMzEsIDI1MSwgMjYsIDIxNCwgMTg5LCAyNDUsIDQ4LCAKLSAgICAyNDksIDE5MSwgMjIxLCAxODUsIDI0OCwgNzEsIDI0NCwgMTc5LCAxMTksIDQsIDI0MywgMjAyLCAxMTksIDYsIDI0MiwgNjAsIAotICAgIDI1MSwgMjE5LCA2LCAyNDIsIDYwLCAxMzksIDYsIDI0MiwgNjAsIDIyNSwgMzcsIDI0OSwgMTkxLCAyMjUsIDM3LCAyNDksIAotICAgIDE5MiwgMTE3LCAxMTMsIDIyNSwgMTA4LCAxMTksIDYsIDczLCAyNTEsIDIxOSwgNiwgNzMsIDExOSwgNiwgMTU2LCAxMTksIAotICAgIDQsIDE1NiwgMjMzLCAxNDksIDU3LCAyNTIsIDE0MSwgODcsIDEzOSwgNiwgMjMwLCAyNSwgMjI3LCAxOTYsIDUwLCAyMTksIAotICAgIDMxLCAyMjMsIDExOSwgMjQ5LCAxNjIsIDExOSwgNiwgMjI2LCAxMDUsIDEzOSwgNiwgMjI2LCAxMDUsIDEzOSwgNiwgMjI0LCAKLSAgICA5NiwgMTE5LCA2LCAxNTMsIDI1MSwgMjE5LCA2LCAxNTMsIDEzOSwgNiwgMTUzLCAyMjQsIDE5NiwgMjE3LCA3MSwgMjIzLCAKLSAgICA2MiwgMjIwLCAxMzIsIDc4LCAyMTcsIDEsIDUwLCAyMTUsIDI1MywgMTY0LCA1MCwgMjEzLCAyNDAsIDEzOSwgNiwgMjEwLCAKLSAgICAxNTksIDIyNiwgMTMzLCA1MCwgMjI2LCAyMjEsIDUwLCAyMzUsIDE5MywgMjI2LCAyMjEsIDUwLCAyNTEsIDIxOSwgNiwgCi0gICAgMjEwLCAxNTksIDIxNSwgOTQsIDI2LCA0LCAxLCAyMzUsIDE4NSwgMjM0LCAxNzMsIDUwLCAyNTQsIDEwNywgNTAsIDExOSwgCi0gICAgNiwgMjUzLCAxNTgsIDI1MSwgMjE5LCA2LCAyNTEsIDY2LCAyNDUsIDY4LCA4NywgMTE5LCA0LCA3NSwgMTE5LCA2LCA3NSwgCi0gICAgMTE5LCA2LCAyNDUsIDYsIDIxNSwgOTQsIDYsIDI0NSwgNiwgMTE5LCA2LCAxOTMsIDExOSwgNCwgNzYsIDExMiwgODcsIAotICAgIDI1MiwgMjksIDg3LCAyNDIsIDIwMiwgODcsIDI0OCwgMTkwLCA4NywgMjM1LCAyMzIsIDIxOSwgMjksIDIyMiwgMTg3LCA2LCAKLSAgICAyMjQsIDk2LCAyNDQsIDE4MiwgNTAsIDEzOSwgNCwgMjI1LCAxMDgsIDEzOSwgNCwgMjQzLCAxMDcsIDEzOSwgNiwgMjQzLCAKLSAgICAxMDcsIDEzOSwgNiwgMjI1LCAxMDgsIDEzOSwgMjMwLCAyNCwgMjE4LCA0MCwgMjE1LCA5NCwgMzUsIDYsIDI0MywgMjAyLCAKLSAgICAyMTUsIDk0LCAzNSwgNiwgMTU2LCAyMjMsIDQ5LCAzNSwgNiwgMTU2LCAyMTUsIDk0LCAzNSwgNiwgMjExLCAxMTcsIDEzOSwgCi0gICAgMzIsIDYsIDI0OSwgNjAsIDEzOSwgMzIsIDQsIDI0OSwgNjAsIDEzOSwgMzIsIDQsIDc1LCAxMzksIDMyLCA0LCA3MywgMTM5LCAKLSAgICAzMiwgNCwgMjM1LCAxNDQsIDIyNCwgMTcwLCAyMzIsIDIxMywgMjE1LCA5NCwgMjU0LCAxMjYsIDIyNSwgMTgzLCA1MCwgCi0gICAgMjU0LCAxODAsIDIxNSwgOTQsIDQsIDI0NSwgNiwgMTYsIDMxLCAyMjEsIDI1MiwgMjE5LCAyOSwgMjEyLCAxMTQsIDI0NCwgCi0gICAgMiwgMTIzLCAyMjAsIDExOCwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyMjgsIDE5NCwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAKLSAgICAyMTYsIDI0MSwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyMTYsIDE2OCwgMjEyLCAxMTQsIDI0NCwgMiwgMTEzLCAyMTYsIAotICAgIDE2NiwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDQsIDExNywgMjEyLCAxMTQsIDI0NCwgMiwgMTEzLCAyNDQsIDExNiwgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTM0LCAyNDQsIDExNiwgMjEyLCAxMTQsIDI0NCwgMiwgMjQ0LCAxMSwgMjQ0LCAxMTYsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjE5LCAxMTUsIDIxMiwgMTE0LCAyNDQsIDIsIDI0NCwgODEsIDIxOSwgMTEzLCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAyMTIsIDExNCwgMjQ0LCAyLCAxMzQsIDI0NSwgMTg2LCAyMTIsIAotICAgIDExNCwgMjQ0LCAyLCAyNDQsIDgxLCAyNDUsIDE4NiwgMjEyLCAxMTQsIDI0NCwgMiwgMjIwLCAxMjIsIDI0NSwgMTg2LCAKLSAgICAyNDQsIDIsIDIyNywgMTk3LCAxMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEwNSwgCi0gICAgMjIyLCAxOTgsIDIyNywgMTk4LCAxNTgsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTYxLCAyMjIsIDE5OCwgMjI3LCAxOTgsIAotICAgIDE4OSwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk4LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDE5NSwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMDAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE2LCAyNDcsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMjQ1LCAxNjcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE1LCA3NiwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAyNDQsIDExNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDI0MCwgMjEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgODEsIAotICAgIDI0MCwgMjEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDcsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTEwLCAKLSAgICA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEwNSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxNTgsIDQsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMTYxLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE4OSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTQsIDQsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMTk4LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5NSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAyMDAsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE2LCAyNDcsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ1LCAxNjcsIDQsIAotICAgIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE1LCA3NiwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDExNCwgNCwgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAxMjMsIDI0MCwgMjEwLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgODEsIDI0MCwgMjEwLCAKLSAgICA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyMTYsIDE0OCwgCi0gICAgMjUxLCA2NywgMjQ5LCA2MCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAyMTYsIDE0NywgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjIzLCA0OSwgMTIzLCAyNDAsIDIxMCwgNywgCi0gICAgNCwgMSwgMjIzLCA0OSwgMjUxLCA2NiwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTksIDEyNSwgMjMzLCA3OCwgMTcsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTUsIDI0NSwgMjI2LCAxNywgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDExNSwgMjE2LCAKLSAgICAxNDcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMSwgMjE2LCAxNDcsIDIxMiwgMTE0LCAyNDQsIDIsIDIxMCwgCi0gICAgODcsIDIxNiwgMTY2LCAxNDAsIDc0LCAyMTQsIDE1MywgNzQsIDk3LCA3NCwgMjQ2LCAxMDQsIDc0LCA0MywgNDQsIDc0LCAKLSAgICAxMjAsIDEyNCwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDc0LCAyMTksIDI4LCAyMTIsIDksIDc0LCAxNDAsIDgwLCAyLCA5MSwgOTcsIDgwLCAyLCA5MSwgMTQwLCAyMTIsIAotICAgIDM2LCA3NCwgOTcsIDIxMiwgMzYsIDc0LCAxNDAsIDExMywgMjQxLCAyMzQsIDc0LCAyMTQsIDE1MywgMTEzLCAyNDEsIDIzNCwgCi0gICAgNzQsIDk3LCAxMTMsIDI0MSwgMjM0LCA3NCwgMjQ2LCAxMDQsIDExMywgMjQxLCAyMzQsIDc0LCAxNDAsIDgwLCAyLCAyMTcsIAotICAgIDc3LCA5NywgODAsIDIsIDIxNywgNzcsIDE0MCwgODAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCA4MCwgMjQzLCAyNDMsIAotICAgIDEzMCwgOTcsIDgwLCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgODAsIDI0MywgMjQzLCAxMzAsIDEyMCwgMTI0LCA4MCwgMiwgCi0gICAgMjUyLCAxMjcsIDE0MCwgODAsIDIsIDEwMywgOTcsIDgwLCAyLCAxMDMsIDE0MCwgODAsIDIsIDIzMiwgMTIzLCA5NywgODAsIAotICAgIDIsIDIzMiwgMTIzLCA0MywgNDQsIDIxMiwgMzYsIDc0LCA0MywgNDQsIDgwLCAyLCA5MSwgMjQ2LCAxMDQsIDIxMCwgMzUsIAotICAgIDc0LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzcsIDIzMywgMzcsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3NywgMjIyLCAKLSAgICAyNDEsIDI0NiwgMTA0LCA4MCwgMiwgMjE2LCA3NywgMjMzLCAzNywgMjQ2LCAxMDQsIDgwLCAyLCAyMTYsIDc3LCAyMjIsIAotICAgIDI0MSwgOTcsIDgwLCAyLCAyNDksIDE2MSwgMjQ2LCAxMDMsIDI0NiwgMTA0LCA4MCwgMiwgMjQ5LCAxNjEsIDIzMywgMzcsIAotICAgIDI1NCwgODgsIDIxNiwgMTQsIDIyMCwgMTUzLCA3NCwgMjUwLCAyLCAyMTYsIDE0LCAyMjAsIDE1MywgNzQsIDIyOCwgNTYsIAotICAgIDIxMiwgOSwgODAsIDIxNiwgNDIsIDE5OSwgMTMwLCAxNDAsIDgwLCAyMTYsIDQyLCAyNTIsIDE0MSwgMTE3LCA5NywgODAsIAotICAgIDIxNiwgNDIsIDEzMCwgMjU0LCA4OCwgMjA0LCAyNTAsIDM2LCA3NCwgMjUwLCAyLCAyMDQsIDI1MCwgMzYsIDc0LCAxNDAsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjE0LCAxNTIsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIDEwMywgCi0gICAgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNDEsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAKLSAgICAxMzksIDIzMywgMzcsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIxNCwgMTUyLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAyNDYsIDEwMywgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNDEsIDI0NiwgMTA0LCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDIzMywgMzcsIDk3LCA4MCwgMTE3LCAxNDAsIDc0LCAyMTQsIDE1MywgODAsIDE0MCwgNjQsIAotICAgIDI0NiwgMTA0LCA3NCwgMTQwLCA4MCwgMTE3LCA5NywgNzQsIDE0MCwgMjI2LCA3MCwgMjUzLCAyNDcsIDIxNCwgMTUzLCAKLSAgICAyMjYsIDcwLCAyNTMsIDI0NywgOTcsIDIyNiwgNzAsIDI1MywgMjQ3LCAyNDYsIDEwNCwgMjI2LCA3MCwgMjUzLCAyNDcsIAotICAgIDE0MCwgMjQxLCAyNTUsIDExNywgOTcsIDI0MSwgMjU0LCA5NywgMjQxLCAyNTUsIDExNywgMTQwLCAyNDEsIDI1NCwgMTQwLCAKLSAgICA1MiwgODAsIDIsIDkxLCA0MywgNDQsIDUyLCA4MCwgMiwgOTEsIDk3LCA1MiwgODAsIDIsIDkxLCAxNDAsIDUyLCA3NCwgCi0gICAgMjE0LCAxNTMsIDUyLCA3NCwgOTcsIDUyLCA3NCwgMjQ2LCAxMDQsIDUyLCA3NCwgNDMsIDQ0LCA1MiwgNzQsIDEyMCwgMTI0LCAKLSAgICA1MiwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgNTIsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgNTIsIDc0LCAyMTksIDI4LCAyNDUsIAotICAgIDIyMCwgNTIsIDc0LCAyMTksIDI4LCAyMTIsIDksIDUyLCA3NCwgMTQwLCAyMTUsIDIxMSwgNzQsIDk3LCAyMTUsIDIxMSwgCi0gICAgNzQsIDE0MCwgMjE4LCAyMzAsIDc0LCA5NywgMjE4LCAyMzAsIDc0LCAyMTQsIDE1MywgODAsIDIsIDUyLCA5MSwgMjQ2LCAKLSAgICAxMDQsIDgwLCAyLCA1MiwgOTEsIDE0MCwgMjQ4LCAxNTUsIDc0LCAyMTQsIDE1MywgMjQ4LCAxNTUsIDc0LCA5NywgMjQ4LCAKLSAgICAxNTUsIDc0LCAyNDYsIDEwNCwgMjQ4LCAxNTUsIDc0LCAxNDAsIDgwLCAyMTYsIDQyLCAxMzAsIDk3LCA4MCwgMjE2LCA0MiwgCi0gICAgMTMwLCAxNDAsIDcxLCA3NCwgMjE0LCAxNTMsIDcxLCA3NCwgOTcsIDcxLCA3NCwgMjQ2LCAxMDQsIDcxLCA3NCwgMjE0LCAKLSAgICAxNTMsIDcxLCA4MCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIDIyNSwgMjE0LCAyMTQsIAotICAgIDE1MywgNzEsIDgwLCAyMjYsIDE5NywgMjI1LCAyMTUsIDIsIDIwMywgMTMwLCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDE5NywgCi0gICAgMjI1LCAyMTUsIDIsIDY3LCAxMzAsIDIxNCwgMTUzLCA3MSwgNTIsIDc0LCAyMTQsIDE1MywgNzEsIDUyLCA4MCwgMjI2LCAKLSAgICAxOTcsIDIyNSwgMjE0LCA5NywgNzEsIDgwLCAyNDMsIDI0MywgMjEyLCA1NiwgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMjE2LCAKLSAgICA0MiwgMjQ5LCAxNjAsIDIxOSwgMjgsIDI0NSwgMjIwLCA4MCwgMjE2LCA0MiwgMjQ5LCAxNjAsIDEyMCwgMTI0LCA3MSwgNzQsIAotICAgIDQ0LCA4MCwgMiwgNCwgMjUwLCAzNSwgMjQ2LCAxMDQsIDgwLCAxNDAsIDY0LCAyMTQsIDE1MywgNzQsIDEzNCwgOTcsIDI1MywgCi0gICAgMjQ3LCAxNDAsIDgwLCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgNjcsIDkxLCA0MywgNDQsIDgwLCAyLCA2NywgOTEsIDE0MCwgCi0gICAgODAsIDIsIDUyLCA2NywgOTEsIDk3LCA4MCwgMiwgNTIsIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAKLSAgICAyMjYsIDE3MywgNzQsIDk3LCAyMjYsIDE3MywgNzQsIDQzLCA0NCwgMjI2LCAxNzMsIDc0LCAzMSwgMjU0LCAxNTQsIDI0OSwgCi0gICAgMjE0LCAyMjUsIDI1MywgMjQ3LCAyMzMsIDIxNiwgMTg3LCAyNDUsIDI3LCAyMTYsIDE4NywgMjQ3LCAxMzgsIDIyOCwgNTIsIAotICAgIDI0NSwgMjgsIDI0NSwgMTUyLCAyMjAsIDEyNywgMjM1LCAyNDUsIDIyOSwgMjIxLCAyNDUsIDE3MCwgMjI2LCAyMzEsIDIyOCwgCi0gICAgNTIsIDI1NCwgMTI0LCAyNDUsIDE3MCwgMjI2LCAyMzEsIDQsIDI0NSwgMTcwLCAyMjYsIDIzMSwgMjQ5LCAxODYsIDI1MywgCi0gICAgMjM4LCAyMzEsIDYyLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMzEsIDYyLCA0LCAyNDksIAotICAgIDE4NiwgMjUzLCAyMzgsIDIzMSwgNjIsIDI0NSwgMTQzLCA2NCwgMjI0LCAxNzIsIDIzMCwgMjQsIDIyNCwgMTgwLCAyMzAsIAotICAgIDI0LCAyNDksIDE2NSwgMjMwLCAyNCwgMjE4LCA0MCwgMjMwLCAxODIsIDUwLCAyMzAsIDE4MCwgNTAsIDU5LCAyMjUsIDIyLCAKLSAgICAyNDcsIDE2OSwgMjE5LCA5NSwgMjIwLCAxMjgsIDIzMCwgMTgxLCAyNTMsIDIxNywgMjI2LCAxNjcsIDIyMiwgMjM0LCAyMjYsIAotICAgIDE2NywgMjUxLCAxMTQsIDIyNiwgMTY3LCA0MiwgMjIyLCAxOTMsIDI0OSwgMTA5LCAyMjIsIDE5MywgMjQ0LCA0LCAyMjIsIAotICAgIDE5MywgMjI0LCAxNjgsIDExMSwgMjM1LCAyMzQsIDQ0LCAyNTQsIDEwOSwgMjU0LCAxMDksIDIzMSwgODgsIDI1NCwgMTA5LCAKLSAgICAyMTgsIDI1NSwgMjU0LCAxMDksIDI0NywgMTcxLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ3LCAxNzQsIDIyNiwgOCwgMTExLCAKLSAgICAyMjgsIDUyLCAyMjYsIDgsIDExMSwgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIzNSwgMTk4LCAKLSAgICAyMTQsIDE3NSwgMjM1LCAyMTEsIDUyLCAyMzUsIDIxMSwgMjE1LCAyMTEsIDIzNSwgMjExLCAyNDksIDE4MiwgMjM1LCAyMTEsIAotICAgIDIxOCwgMTMsIDIzNSwgMjExLCAyMTMsIDEyOSwgMjM1LCAyMTEsIDI1MCwgMiwgMjM1LCAyMTEsIDI1MCwgMiwgMjQ5LCAKLSAgICAxODIsIDIzNSwgMjExLCAyNTQsIDg4LCAyNDksIDE4MiwgMjM1LCAyMTEsIDIxNiwgMTg2LCAyNTIsIDY3LCAyMjMsIDEzNywgCi0gICAgMjI0LCAxNjksIDU5LCAyMzAsIDE4MSwgMjQ1LCAzMywgMjQzLCA0NiwgMjI0LCAxNjksIDI0MSwgNTcsIDIxNiwgODksIAotICAgIDIyNiwgMTY3LCAyMjMsIDQ5LCAxODIsIDIzNSwgMTkzLCAyMzMsIDY1LCAyMjIsIDkxLCAyMTksIDE1NywgMjEyLCAzNSwgCi0gICAgMjExLCAyMDAsIDIyNCwgMTgwLCAyMjgsIDUyLCAxODIsIDIzMCwgMTgyLCAxODIsIDI1MywgMjEwLCAxMjgsIDExMSwgMjI4LCAKLSAgICA1MiwgMjUzLCAyMTAsIDEyOCwgMTExLCAyNTQsIDQ4LCAxMjgsIDExMSwgMjU0LCA0OCwgMjUxLCA4OCwgMjI4LCA1MiwgCi0gICAgMjU1LCA0LCAxMjgsIDExMSwgMjI5LCAxMDAsIDI1NCwgNDgsIDIyOCwgNTksIDI1NSwgNCwgMTI4LCAxMTEsIDI1NCwgMTQ4LCAKLSAgICAxMjgsIDExMSwgMjI4LCA1MiwgMjU0LCAxNDgsIDEyOCwgMTExLCAyNTQsIDE0OCwgMTI4LCAxNzcsIDEyOCwgMTExLCAyMTUsIAotICAgIDIxMSwgMTgyLCAyNTQsIDE1NSwgMTI4LCAxMTEsIDI0NSwgOTQsIDExMSwgMjQzLCA0NSwgMjQ1LCA5NCwgMTExLCAyNDcsIAotICAgIDIzNCwgMjUyLCAyMywgMjU0LCA1MCwgMjE2LCAxOTYsIDIzMiwgMjIxLCAyNDMsIDQ1LCAxMjgsIDExMSwgMjU0LCA0OCwgCi0gICAgMTI4LCAyMTYsIDQyLCAxNzcsIDIxNiwgMTk2LCAyMzYsIDE1LCAyMjYsIDIzMSwgMjM2LCAxNSwgNjQsIDE3NywgMjU0LCAKLSAgICA0OCwgMTI4LCAxMTEsIDI0OSwgMjI3LCAyNDUsIDk3LCAyNDUsIDk4LCAyNDksIDIyNiwgMjIyLCAyMzQsIDIzNiwgMCwgCi0gICAgMTI4LCAxMTEsIDIyMiwgMjM0LCAxMjgsIDExMSwgMjQ5LCAxNTQsIDExMSwgMjQ1LCA2NywgMjQ1LCA5NiwgMTExLCAyMTgsIAotICAgIDE1NywgMjQ1LCA5NywgMjQ4LCA1NSwgMTI4LCAxMTEsIDEyOCwgMjE2LCA0MiwgMjUxLCA3OCwgMjQ4LCA3MiwgMjMxLCA4OCwgCi0gICAgMjUxLCA3NywgMjI0LCAxMSwgMTI4LCAxMTEsIDIyOCwgNTIsIDEyOCwgMTExLCAyNDAsIDEwNCwgMTExLCAyMjgsIDUyLCAKLSAgICAyNDAsIDEwNCwgMTExLCAyMTgsIDEwOSwgMjQ1LCA5NCwgMTExLCAyMzMsIDE1LCAxNzcsIDEyOCwgMTExLCAyNDIsIDEzMCwgCi0gICAgMTc3LCAxMjgsIDExMSwgMjMzLCAxNSwgMTE3LCAxMjgsIDExMSwgMjQyLCAxMzAsIDExNywgMTI4LCAxMTEsIDIzMywgMTUsIAotICAgIDI1MSwgODgsIDIyOCwgNTIsIDEyOCwgMTExLCAyNDIsIDEzMCwgMjUxLCA4OCwgMjI4LCA1MiwgMTI4LCAxMTEsIDIzMCwgCi0gICAgOTcsIDIzMywgMTQsIDIzMCwgOTcsIDI0MiwgMTI5LCAyNTIsIDIzLCAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIyOCwgNTIsIAotICAgIDIzMywgMTQsIDIyOCwgNTIsIDI0MiwgMTI5LCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMTI4LCAxMTEsIDIyOSwgCi0gICAgMTAwLCAyNDIsIDEzMCwgMjI4LCA1OSwgMTI4LCAxMTEsIDIzMywgMTUsIDE3NywgMjQ1LCA5NCwgMTExLCAyNDIsIDEzMCwgCi0gICAgMTc3LCAyNDUsIDk0LCAxMTEsIDIyOSwgMTAwLCAyMzMsIDE1LCAyMjgsIDU5LCAyNDUsIDk0LCAxMTEsIDIyOSwgMTAwLCAKLSAgICAyNDIsIDEzMCwgMjI4LCA1OSwgMjQ1LCA5NCwgMTExLCAyMzMsIDE1LCAxNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgMTc3LCAKLSAgICAyMzMsIDE0LCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMjQyLCAxMjksIDIyOSwgMTAwLCAyNDIsIDEzMCwgMjI4LCAKLSAgICA1OSwgMjMzLCAxNCwgMjI0LCAyMDIsIDIxOCwgNTUsIDIyNCwgMjAzLCAxNzcsIDEyOCwgMTExLCAyMTgsIDU2LCAxNzcsIAotICAgIDEyOCwgMTExLCAyMjQsIDIwMywgMTc3LCAyNDUsIDk0LCAxMTEsIDIxOCwgNTYsIDE3NywgMjQ1LCA5NCwgMTExLCAyNDcsIAotICAgIDEzOCwgMjI4LCA1MiwgMjI0LCAyMDUsIDI0NywgMTM4LCAyMjgsIDUyLCAyMTgsIDU3LCAyMTgsIDY0LCAyMjYsIDIzMSwgCi0gICAgMjE4LCAyMiwgMjI2LCAyMzEsIDIyOCwgNTIsIDExNSwgMjE4LCA2NCwgMjI2LCAyMzEsIDIyOCwgNTIsIDExNSwgMjE4LCAKLSAgICAyMiwgMjI2LCAyMzEsIDIxOCwgNjQsIDY0LCAxNzcsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjI5LCAxMDAsIDExNSwgMjE4LCA2NCwgNjQsIDIyOCwgNTksIDEyOCwgMTExLCAyMjksIDEwMCwgMTE1LCAyMTgsIDIyLCAKLSAgICA2NCwgMjI4LCA1OSwgMTI4LCAxMTEsIDIxOCwgNjQsIDY0LCAyLCAyMjgsIDUyLCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDIsIAotICAgIDIyOCwgNTIsIDEyOCwgMTExLCAyMzAsIDgxLCAyMzAsIDgyLCAyMzAsIDgzLCAyMzAsIDgyLCAyMTQsIDE3NSwgNDIsIDIzNiwgCi0gICAgMTUsIDIyNiwgMjMxLCA0MiwgMjI2LCAxNTAsIDIyNiwgMjMxLCA0MiwgMjM2LCAxNSwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAKLSAgICAyMjYsIDE1MCwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAyNTAsIDI1MSwgNDIsIDI0OSwgMTAyLCAzNywgMjI1LCAyMiwgMzcsIAotICAgIDIzMCwgMTgxLCAzNywgMjE2LCA4NSwgMzcsIDI0NywgMTY5LCAyMTksIDk1LCAzNywgNTksIDIyNiwgMTY3LCAzNywgMjIyLCAKLSAgICAyMzQsIDIyNiwgMTY3LCAzNywgMjUzLCAyMTcsIDIyNiwgMTY3LCAzNywgMjQ1LCA5NywgMzcsIDI0OCwgMTU2LCA5MiwgCi0gICAgMjI1LCAyMiwgOTIsIDIzMCwgMTgxLCA5MiwgMjE2LCA4NSwgOTIsIDU5LCAyMjYsIDE2NywgNDQsIDIxNywgODcsIDQzLCAKLSAgICAyMTcsIDg3LCAxMjQsIDIxNywgODcsIDEyMCwgMjE3LCA4NywgMjUzLCAyMjAsIDIzMCwgMTU2LCAyMTUsIDE5MSwgMjQ0LCAKLSAgICAyNSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDUyLCA0NCwgMjE1LCAKLSAgICA5MywgMjQ3LCAxMzgsIDIyOCwgNTIsIDIyNCwgMTYzLCAyMjgsIDUyLCAyMTUsIDE5MSwgMjQ3LCAxMzgsIDIyOCwgNTIsIAotICAgIDI0NCwgMjYsIDIyOSwgMTAyLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDQsIDIxNSwgOTMsIDIyNCwgMjAzLCAyMTQsIDE4NCwgCi0gICAgMjIzLCA5MSwgMjE4LCA1NiwgMjE0LCAxODQsIDIyMywgOTEsIDIyOCwgNTcsIDIxOCwgNzcsIDIyNiwgMjMxLCAyNDksIAotICAgIDE4NiwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgNzYsIDIyOCwgNTcsIDIxOCwgNzcsIDY0LCAxNzcsIDEyOCwgMTExLCAKLSAgICAyNDksIDE4NiwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgNzcsIDE3NywgMTI4LCAxMTEsIDIyNiwgMTUwLCAyMjYsIDIzMSwgCi0gICAgMjM2LCAxNSwgMjI2LCAyMzEsIDIzMCwgODcsIDI0MSwgMjAwLCAyNDksIDE5NiwgMjMxLCAxMzcsIDIzNSwgMjA4LCAyMTEsIAotICAgIDE0NSwgMjI5LCAyMDIsIDIyOCwgNTgsIDQ0LCAyNTQsIDExMCwgMiwgMjU0LCAyNSwgNDQsIDIxNSwgMjI1LCAyMzAsIDI0LCAKLSAgICAyMzIsIDE0NiwgMjU0LCAxMTgsIDIzMCwgMjQsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgMjMwLCAyNCwgMjM1LCAxOTgsIDIzMCwgCi0gICAgMjQsIDIxNCwgMTc1LCAyNDcsIDI0OSwgMjI2LCAxNjcsIDU5LCAyMjYsIDE2NywgMjE4LCAxNTcsIDIyNiwgMTY3LCAyNDcsIAotICAgIDE2OSwgMjE2LCA4NSwgMjUxLCAxNjQsIDQzLCAyMjgsIDU3LCAyNDQsIDE4MSwgMjIwLCAxNDksIDIyNCwgMTgwLCA0NCwgCi0gICAgMjI4LCA1NywgMjQ0LCAxODEsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDMsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDQsIDIyMCwgCi0gICAgMTQ5LCAyMjQsIDE4MCwgMjIzLCA0OSwgMjE2LCA4OSwgMjQ1LCA5NywgMjQ5LCA5OSwgMjMyLCAxNDYsIDIyNiwgMTU4LCAKLSAgICAyNDksIDk5LCAyMzIsIDE0NiwgMjU0LCAxMTgsIDUyLCAyMTgsIDYzLCA1MiwgMjE4LCAyMSwgNTIsIDIzNSwgMTk4LCA1MiwgCi0gICAgMjE0LCAxNzUsIDIyNSwgNDcsIDEyOCwgMjIsIDIyNiwgOCwgMTExLCAyMzMsIDE1LCAyLCAyNDcsIDEyMCwgMjQyLCAxMzAsIAotICAgIDIsIDI0NywgMTIwLCAyMTMsIDE4NywgMjMwLCA5NywgMjMzLCAxNCwgMjEzLCAxODcsIDIzMCwgOTcsIDI0MiwgMTI5LCAKLSAgICAyMzMsIDE1LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDI0MiwgMTMwLCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAKLSAgICAxNCwgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMTI4LCAyMTYsIAotICAgIDQyLCAxNzcsIDIyNCwgMjAyLCAxMjgsIDIxNiwgNDIsIDE3NywgMjE4LCA1NSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDIyNCwgCi0gICAgMjA2LCAxNzcsIDI0NSwgOTksIDI0NywgMTM4LCAyMjgsIDUyLCAyMTgsIDU4LCAxNzcsIDI0NSwgOTksIDIyOCwgNTIsIDQyLCAKLSAgICAyMzYsIDE1LCA2NCwgMTc3LCAxMjgsIDExMSwgMjI4LCA1MiwgNDIsIDIyNiwgMTUwLCA2NCwgMTc3LCAxMjgsIDExMSwgNDIsIAotICAgIDIzNiwgMTUsIDY0LCAxNzcsIDIyOCwgNTIsIDEyOCwgMTExLCA0MiwgMjI2LCAxNTAsIDY0LCAxNzcsIDIyOCwgNTIsIDEyOCwgCi0gICAgMTExLCAyMzMsIDE1LCAyNTEsIDg4LCAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDI0MiwgMTMwLCAyNTEsIDg4LCAyMjgsIDUyLCAKLSAgICAyNDUsIDk0LCAxMTEsIDIyNCwgMjAzLCAyNTEsIDg4LCAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIxOCwgNTYsIDI1MSwgODgsIAotICAgIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjI4LCA1MiwgMjI4LCA1NywgMjE4LCA3NywgMjI2LCAyMzEsIDI0NywgMTM4LCAKLSAgICAyMjgsIDUyLCAyNDksIDE4OCwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgNzYsIDIyOCwgNTIsIDIyOCwgNTcsIDIxOCwgNzcsIAotICAgIDY0LCAxNzcsIDEyOCwgMTExLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIAotICAgIDc3LCAxNzcsIDI0NSwgOTksIDY3LCAyNDUsIDE2MywgMjMwLCAyMjIsIDIwMywgMjQ1LCAxNjMsIDEyMCwgNDQsIDI0NywgCi0gICAgMjU1LCAyNDUsIDE2MywgMTI0LCA0NCwgMjQ3LCAyNTUsIDI0NSwgMTYzLCAyNDUsIDE3MCwgNjQsIDIsIDE5OSwgMjAzLCAKLSAgICA5MSwgMjQ1LCAxNzAsIDY0LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDQsIAotICAgIDI0NSwgMTcwLCA2NCwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCAyNDUsIDE3MCwgCi0gICAgNjQsIDIsIDU5LCA0OCwgMjQ1LCAxNzAsIDY0LCAyLCAyMjYsIDEyMywgNCwgMjQ1LCAxNzAsIDY0LCAyLCAyMjYsIDEyMywgCi0gICAgMjQ1LCAxNzAsIDY0LCAyLCAyMTQsIDE4MywgMjQ1LCAxNzAsIDY0LCAyLCAxMTMsIDIwMywgMjE4LCA5MCwgMjQ5LCAxODYsIAotICAgIDIsIDE5OSwgMjAzLCA5MSwgMjQ5LCAxODYsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCAKLSAgICA5MSwgNCwgMjQ5LCAxODYsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgMjQ5LCAKLSAgICAxODYsIDIsIDIyNiwgMTIzLCA0LCAyNDksIDE4NiwgMiwgMjI2LCAxMjMsIDIxMCwgMTYwLCAxODcsIDI1MiwgMTczLCAyMzEsIAotICAgIDYxLCAyNDcsIDI1MCwgNTAsIDI0NSwgMTcyLCA3NCwgMjQwLCAyMzQsIDEyMCwgMjUzLCAyNDksIDEyNCwgMjUzLCAyNDksIAotICAgIDIyNCwgMTc1LCAyMjUsIDE2NSwgMjEyLCAzMiwgMjMyLCAyMTMsIDQzLCAyNTAsIDE4MSwgNDQsIDI1MCwgMTgxLCA0MywgCi0gICAgMjQ0LCA1NywgNDQsIDI0NCwgNTcsIDI1MSwgMTc1LCA0NCwgMjQ5LCAxMzIsIDI1MSwgMTc1LCA0MywgMjQ5LCAxMzIsIAotICAgIDIxNiwgMTQsIDQ0LCAyNDksIDEzMiwgMjE2LCAxNCwgNDMsIDI0OSwgMTMyLCAyMjMsIDQ5LCAyMjgsIDUyLCA1MCwgNDIsIAotICAgIDIzMiwgMTA0LCAyNTQsIDI1LCAyMjEsIDE2NCwgMjIxLCAxNzEsIDIxNywgMSwgMjIzLCAxMjAsIDIyNCwgMjQxLCAyMzUsIAotICAgIDIzOCwgMjEzLCAxNjUsIDIxOCwgMjM0LCAyMjUsIDQxLCA2NCwgMjM1LCAyMDcsIDUwLCAyMTUsIDk0LCAyMjgsIDUyLCA1MCwgCi0gICAgMjEyLCA0MiwgMjQwLCAyMzYsIDIxNiwgMTQsIDQzLCAyNDksIDE2MCwgMjE2LCAxNCwgNDQsIDI0OSwgMTYwLCAyNTEsIAotICAgIDE3NSwgNDMsIDI0OSwgMTYwLCAyNTEsIDE3NSwgNDQsIDI0OSwgMTYwLCAyMTYsIDE0LCAxNjMsIDIzNSwgMjExLCAyNTEsIAotICAgIDE3NSwgMTYzLCAyMzUsIDIxMSwgMjQzLCAyNDAsIDIxOSwgNzUsIDEyMCwgMjUzLCAyNTAsIDI1MiwgMjQsIDExMywgMjAzLCAKLSAgICAyNTIsIDEyOSwgMjI2LCAxNjAsIDIzNCwgMTM4LCAyNDUsIDkwLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjIyLCAyNTEsIDIxMSwgCi0gICAgMTc5LCAyMzYsIDAsIDExNSwgMjIzLCAxMTcsIDI1MSwgMTYzLCAyMzQsIDEzNywgMjMzLCA0MiwgMjU0LCAxMTAsIDEyNywgCi0gICAgMjIyLCAyNDcsIDI1NCwgMTEwLCAxMjcsIDI0NSwgOTAsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMzMsIDQ2LCAyNTIsIDM1LCAKLSAgICAyMjIsIDIzMywgMjQ5LCA3MCwgMjU0LCAxNTUsIDI1NCwgMSwgMjE3LCAxODEsIDIxNiwgNCwgMjIyLCAxMjMsIDI0NywgCi0gICAgMjE1LCAyMjYsIDE1MSwgMjQ5LCAxOTgsIDIxNywgNTIsIDIxOSwgODYsIDI0OSwgMTUxLCAyNDksIDE1MCwgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyNDAsIDE1MSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTgsIDIyOCwgMjI0LCAyNywgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDUsIDk5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NywgCi0gICAgMTc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NywgMjQ4LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDIyNCwgMjgsIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjUwLCAzNSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNTAsIDM2LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyMzUsIDU2LCAyNTQsIAotICAgIDY2LCAyNDMsIDIyNSwgMTYsIDIxOSwgOTYsIDEzMCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTIsIDE4MSwgMTMwLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIxOSwgOTUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgCi0gICAgMjUyLCAxODAsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjMzLCAxNCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyNDIsIDEyOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxNDAsIDIxNCwgMTksIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgOTcsIDIxNCwgMTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMTQwLCA3NCwgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCA5NywgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjUyLCAxODAsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTI0LCAyMTcsIDg4LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNDgsIDU1LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAxMjQsIDI1MCwgMjM4LCAyNTQsIAotICAgIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OCwgNTQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTI0LCAyMTcsIDg4LCAKLSAgICAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxNCwgMTUzLCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDIyNCwgMjgsIDIxNCwgMTUzLCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjAsIDIxNywgODgsIDIyNiwgMTIzLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgNjYsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDEyMCwgMjUwLCAyMzgsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ4LCA2NSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAxMjAsIDIxNywgODgsIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ2LCAxMDQsIDIxNCwgMTksIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ2LCAxMDQsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMywgCi0gICAgMjUzLCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIDU1LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNDcsIDI0OSwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjM1LCA1NywgMjE0LCAxODMsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAKLSAgICAyMjAsIDUsIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjIzLCAyNTMsIDIyNCwgMjcsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjUwLCAzNiwgMjE4LCAxNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ5LCAyMjYsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCAKLSAgICA2NiwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxOCwgMTU3LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMjM1LCA1NywgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDI0OCwgMSwgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAxMjQsIDIyMCwgNSwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgNDMsIDIyMCwgNSwgCi0gICAgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE2LCA4OSwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDI0MiwgMTMwLCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ5LCAyMjAsIDEzMCwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNDgsIDY2LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjEwLCAzNCwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAyMTgsIDEzNiwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMCwgMTUxLCAyMTQsIDE4MywgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMjgsIDUyLCAyNDUsIDk5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDIyNCwgMTIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTI0LCAyNTAsIDIzOSwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDEyMCwgMjUwLCAyMzksIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMzUsIDE4NSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyMjMsIDM3LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNiwgMjAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDI1NCwgMTQ0LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDUsIDEwMSwgMjE0LCAxODMsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjM1LCAxODYsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNiwgMjAyLCAyMTQsIAotICAgIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTQsIDE0MywgMjI4LCA1MiwgMjUwLCAxMzAsIDc4LCA0NCwgMjU0LCAKLSAgICAxMTAsIDIsIDI0NiwgMTA0LCAyMTAsIDM1LCA3NCwgMjE5LCAyMzUsIDIwNCwgMjUxLCAxNjMsIDI1MiwgNDUsIDg3LCA2NywgCi0gICAgMjMyLCAyMTQsIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjM1LCAyMTYsIDg3LCAyNDksIDE4MywgMjE0LCAxODEsIDg3LCAKLSAgICAyNDcsIDE4OSwgMjE0LCAxODEsIDg3LCAyNDUsIDE1NCwgODcsIDI0OSwgMjEwLCA4NywgNzEsIDQyLCAyLCAyNTAsIDE3NSwgCi0gICAgNjcsIDIzMiwgMjEzLCAyNDUsIDEzMCwgODcsIDI1NCwgMTM5LCAyMzQsIDEzOSwgODcsIDI0MSwgMjEzLCA4NywgMzcsIAotICAgIDIwMywgMjUyLCAxNDEsIDIsIDIyOCwgNTAsIDM3LCAyMTUsIDIyNiwgMjQ2LCAxMDYsIDI1MSwgMTM1LCAyNTAsIDM2LCAyLCAKLSAgICAyMjgsIDU0LCA3NCwgMjE0LCAxNzksIDg3LCAyMzAsIDEzNywgODcsIDI0MCwgMTY0LCA4NywgMjI2LCAxNzQsIDI0MiwgNTksIAotICAgIDg3LCAyMjYsIDE3NCwgMjMzLCAxNDcsIDg3LCAyMjUsIDI0NCwgODcsIDIyNSwgMjQzLCA4NywgMjQ3LCAxOTcsIDI0OSwgCi0gICAgOTcsIDE2LCAyNDQsIDIwLCAxMDUsIDIxOSwgNTAsIDg3LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjcsIDI0OCwgCi0gICAgODMsIDIyMCwgMTM4LCAyMzQsIDEzOSwgODcsIDIyNCwgMTkyLCAyMjYsIDc1LCAyMjksIDgyLCAyMjYsIDc1LCAyMjQsIAotICAgIDE4OCwgMjIxLCAxODksIDg3LCAyNTAsIDE3LCAyMjEsIDE4OSwgODcsIDQzLCAyMjYsIDQsIDIxNCwgMTYwLCAxMDMsIDQzLCAKLSAgICAyMjYsIDQsIDI0NSwgMjEsIDQzLCAyMjYsIDQsIDIzMiwgMTA4LCAxMDMsIDQ0LCAyMjYsIDQsIDIxNCwgMTYwLCAxMDMsIAotICAgIDQ0LCAyMjYsIDQsIDI0NSwgMjEsIDQ0LCAyMjYsIDQsIDIzMiwgMTA4LCAxMDMsIDQzLCA0MiwgMjUxLCAxNTgsIDIxNCwgCi0gICAgMTYwLCAyNDksIDE2MCwgNDMsIDQyLCAyNTEsIDE1OCwgMjQ1LCAyMSwgNDMsIDQyLCAyNTEsIDE1OCwgMjMyLCAxMDgsIAotICAgIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyMTQsIDE2MCwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDI0NSwgCi0gICAgMjEsIDQ0LCA0MiwgMjUxLCAxNTgsIDIzMiwgMTA4LCAyNDksIDE2MCwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMTQsIAotICAgIDE2MCwgMTAzLCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIzMCwgMjI0LCAyMjUsIDEwMSwgNDMsIDI0OSwgOTksIDI1MSwgCi0gICAgMTU4LCAyMzIsIDEwOCwgMTAzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjQ1LCAyMSwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAKLSAgICAyMTQsIDE2MCwgMTAzLCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIDIzMCwgMjI0LCAyMjUsIDEwMSwgNDQsIDI0OSwgOTksIAotICAgIDI1MSwgMTU4LCAyMzIsIDEwOCwgMTAzLCAyMzUsIDIxMiwgMjQ1LCAyMSwgMjAzLCAyMzIsIDIxNCwgMjQ1LCAyMSwgMjE0LCAKLSAgICAxNjAsIDQzLCAxNzcsIDIzMiwgMTA4LCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyMSwgMTcyLCAyMTQsIDE2MCwgNDQsIAotICAgIDE3NywgMjMyLCAxMDgsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjIxLCAxNzIsIDIxOCwgNDEsIDIxNiwgMTMsIDIxOCwgCi0gICAgNDEsIDI1MSwgMTc0LCAyMTYsIDE0LCA0MiwgMTI3LCAyNTEsIDE3NSwgNDIsIDEyNywgMjUxLCAxNzUsIDQyLCAyNTEsIAotICAgIDE1OCwgMTE3LCAyMTYsIDE0LCA0MiwgMTI3LCAzNCwgMTYsIDI1MSwgMTc0LCA0MywgNjcsIDkzLCAyMzIsIDIxMywgNDQsIAotICAgIDY3LCA5MywgMjMyLCAyMTMsIDIwMywgMjIxLCAyMDUsIDIzMiwgMjEyLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIxMSwgMjAzLCAKLSAgICAyMjEsIDIwNSwgMjMyLCAyMTAsIDIwMywgMjIxLCAyMDUsIDIzMiwgMjA5LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIAotICAgIDIxNiwgMTQsIDIyMiwgMjUxLCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDI1MSwgMTc1LCAyMjIsIDI1MSwgMjQ4LCA0NiwgCi0gICAgMTYsIDE5MiwgNjcsIDIsIDI1MCwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIDEyNCwgMjIsIDIwMywgMiwgMjUwLCAzNSwgMjQ4LCAKLSAgICA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjAzLCAyLCAyNTAsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMiwgMjE1LCAyMjUsIAotICAgIDI0OCwgNDYsIDE2LCAxOTIsIDEyNCwgMjIsIDIwMywgMiwgMjE1LCAyMjUsIDI0OCwgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIAotICAgIDIwMywgMiwgMjE1LCAyMjUsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgMjEyLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgCi0gICAgMTI0LCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIAotICAgIDI0OCwgNDYsIDE2LCAxOTIsIDEyNCwgMjIsIDI0MSwgNDQsIDI0OCwgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDI0MSwgNDQsIAotICAgIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgMjE2LCAxNCwgMjMzLCA0NiwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAKLSAgICAyNTEsIDE3NSwgMjMzLCA0NiwgNDIsIDI0NCwgMzIsIDIyMywgNTQsIDg3LCAyNDUsIDE4MiwgODcsIDY3LCAyMzIsIDIxNCwgCi0gICAgMjQ1LCAyMSwgMjMxLCAzMywgMjUxLCAxNDYsIDIzMSwgMzMsIDE5OSwgMTE3LCAyMTksIDI1MCwgMjMxLCAzMywgMjE5LCAKLSAgICAyNTEsIDExNywgMjMyLCAxMzcsIDIzMSwgMzMsIDE5OSwgMTE3LCAxMTMsIDIxOSwgMjM3LCAyMzEsIDMzLCAxMTMsIDIxOSwgCi0gICAgMjM4LCAxMTcsIDIzMiwgMTM3LCAyMzEsIDMzLCAxMTMsIDIxOSwgMjM4LCAyMzUsIDY0LCAyMzEsIDMzLCAyMTUsIDIwOCwgCi0gICAgMjMxLCAzMywgMjE2LCAyMjMsIDIzMSwgMzMsIDIyNSwgMTg4LCAyNDUsIDIyNCwgMjQyLCAxMjIsIDI0MywgMjE5LCAyMTYsIAotICAgIDE0LCAyMjYsIDMsIDI1MSwgMTc1LCAyMjYsIDMsIDIxNiwgMTQsIDI0OSwgOTksIDEyNywgMjUxLCAxNzUsIDI0OSwgOTksIAotICAgIDEyNywgMjE2LCAxNCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDI1MSwgMTc1LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNzEsIAotICAgIDIxNSwgMjM5LCAyNTIsIDM1LCAyMjIsIDIzNCwgMiwgMjUwLCAzNSwgMjE4LCAxMjAsIDI0NCwgNjQsIDI1NSwgMTcsIDI0OSwgCi0gICAgOTYsIDI0NSwgMTcxLCAyMzUsIDE5OCwgMjQ4LCA4MywgMjQ1LCAyNCwgODcsIDg1LCAyMjIsIDI0NywgNTIsIDIxNSwgMjI1LCAKLSAgICA4NSwgMjMzLCA0MiwgNTIsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjIsIDUyLCAyMTUsIDIyNSwgODUsIDI0NiwgMTA1LCA1MiwgCi0gICAgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgNTIsIDIxNSwgMjI2LCAyLCA2NywgMTMwLCA4NSwgMjMzLCA0MiwgNTIsIDIxNSwgCi0gICAgMjI2LCAyLCA2NywgMTMwLCA4NSwgMjIyLCAyNDcsIDIxNSwgMjI2LCAyLCA1MiwgNjcsIDEzMCwgMjU0LCAxNzMsIDI1MCwgCi0gICAgMywgMjE4LCAxMjYsIDIxNiwgODYsIDI1MCwgMywgMjQwLCAyMzcsIDIsIDI0NCwgNTAsIDIyMSwgMjQxLCAxNiwgMzEsIAotICAgIDIyNywgMjAyLCAxNiwgMzEsIDIxOCwgMTUyLCA2NCwgMjQxLCAyMzMsIDE2LCAzMSwgMjE4LCAxNTIsIDY0LCAyMTYsIDIxMiwgCi0gICAgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNiwgMjEyLCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjE1LCAyNDMsIDE2LCAzMSwgCi0gICAgMjQ1LCAxMzIsIDE2LCAzMSwgMjU1LCA3LCAxNiwgMzEsIDI1MiwgNDQsIDE2LCAzMSwgMjUyLCAxNzksIDE2LCAzMSwgMjAzLCAKLSAgICAyMTcsIDg5LCAxNiwgMzEsIDIzMiwgMjE0LCAyNDQsIDE0NSwgMTYsIDMxLCA2NywgMjE3LCA4OSwgMTYsIDMxLCAyNDQsIAotICAgIDIwLCAyNDQsIDE0NSwgMTYsIDMxLCAyNTAsIDIzMCwgMjIzLCA1MywgMTYsIDMxLCAyMjAsIDI4LCAyMjYsIDEzMCwgMTYsIAotICAgIDMxLCAyMjAsIDI4LCAyMzUsIDI1NSwgMTYsIDMxLCAyNDgsIDE1MSwgMjMyLCAyMDQsIDI0NSwgNzcsIDE2LCAzMSwgMjQ4LCAKLSAgICAzMSwgMjQ5LCAxNzgsIDExMCwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIDE3OCwgMTA1LCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgCi0gICAgMTc4LCAxNTgsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDE2MSwgMTYsIDMxLCAxNTIsIDI1NSwgNywgMTYsIDMxLCAKLSAgICAyMTcsIDE3NywgMjM2LCA2MiwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNSwgMjQ0LCAyNTEsIDIxMywgMTYsIDMxLCAyNTEsIAotICAgIDUsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMzEsIDgxLCAxNiwgMzEsIDIxOCwgNjEsIDE2LCAzMSwgMjQ1LCA3NywgMTYsIAotICAgIDMxLCAyNDQsIDEwNywgMjIwLCAxMzcsIDE2LCAzMSwgMjQyLCAxMjEsIDIyMCwgMTM3LCAxNiwgMzEsIDIyMywgMTIxLCAKLSAgICAyMjAsIDEzNywgMTYsIDMxLCAyMTQsIDE3NCwgMjIwLCAxMzcsIDE2LCAzMSwgMjE5LCAxOCwgMTYsIDMxLCAyNDgsIDYzLCAKLSAgICAyNTEsIDIxNiwgODcsIDIwNCwgMjUxLCAxNjMsIDE2LCAzMSwgMjI5LCA4NSwgMTYsIDMxLCAyNDgsIDY0LCAyNDQsIDIwLCAKLSAgICAxMDUsIDE2LCAzMSwgMjE4LCA2MiwgMjQ0LCAyMCwgMTA1LCAyMjYsIDI0MSwgMTAzLCAyMjYsIDI0MSwgMjUwLCAxNTIsIAotICAgIDIyNiwgMjQxLCAyNDQsIDIzLCAyMjYsIDI0MSwgMjM1LCAxOTMsIDI0NCwgMjMsIDIyNiwgMjQxLCAyNTIsIDQyLCAyNTEsIAotICAgIDEyNCwgMjI2LCAyNDEsIDI1MSwgMTcwLCAyMTYsIDExMSwgMjI2LCAyNDEsIDI1MSwgMTU1LCAyNTIsIDE0NiwgMjQwLCAKLSAgICAxMDMsIDIyNiwgMjQxLCAyNTQsIDEyNywgNjQsIDI1MCwgMTI5LCAyMjYsIDI0MSwgMjQ4LCAxNTYsIDIyNiwgMjQxLCAyNDksIAotICAgIDg3LCAyNTUsIDExLCAyMjcsIDIwMCwgMjI2LCAyNDEsIDUyLCAyNTIsIDE4MCwgMzcsIDIxLCAxMTAsIDM3LCAyMSwgMTA1LCAKLSAgICAzNywgMjEsIDE1OCwgMzcsIDIxLCAxNjEsIDM3LCAyMSwgMTg5LCAzNywgMjEsIDE5NCwgMzcsIDIxLCAxOTgsIDM3LCAyMSwgCi0gICAgMTk1LCAzNywgMjEsIDIwMCwgMzcsIDU0LCAyMTYsIDI0NywgMzcsIDU0LCAyNDUsIDE2NywgMzcsIDU0LCAyMTUsIDc2LCAKLSAgICAzNywgNTQsIDIxNiwgMTY0LCAzNywgNTQsIDI0NCwgNSwgMzcsIDU0LCAyNDQsIDExOCwgMzcsIDU0LCAyMTksIDExOSwgMzcsIAotICAgIDU0LCAyMjAsIDExOSwgMzcsIDU0LCAyNDUsIDE5MCwgMzcsIDU0LCAyMjgsIDE5NywgMzcsIDU0LCAyMTUsIDczLCA4OCwgCi0gICAgMjEsIDExMCwgODgsIDIxLCAxMDUsIDg4LCAyMSwgMTU4LCA4OCwgMjEsIDE2MSwgODgsIDIxLCAxODksIDg4LCAyMSwgMTk0LCAKLSAgICA4OCwgMjEsIDE5OCwgODgsIDIxLCAxOTUsIDg4LCAyMSwgMjAwLCA4OCwgNTQsIDIxNiwgMjQ3LCA4OCwgNTQsIDI0NSwgCi0gICAgMTY3LCA4OCwgNTQsIDIxNSwgNzYsIDg4LCA1NCwgMjE2LCAxNjQsIDg4LCA1NCwgMjQ0LCA1LCA4OCwgNTQsIDI0NCwgMTE4LCAKLSAgICA4OCwgNTQsIDIxOSwgMTE5LCA4OCwgNTQsIDIyMCwgMTE5LCA4OCwgNTQsIDI0NSwgMTkwLCA4OCwgNTQsIDIyOCwgMTk3LCAKLSAgICA4OCwgNTQsIDIxNSwgNzMsIDIxLCAxMjMsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDExMywgMjQzLCAyMjksIDIxOCwgCi0gICAgMTI5LCAyMSwgMTM0LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyNDQsIDExLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAKLSAgICAyNDQsIDgxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMTksIDEyNSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjIwLCAKLSAgICAxMjIsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDI0NSwgMTkzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMjgsIDIwMCwgCi0gICAgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjE2LCAyNDgsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDI0NSwgMTY4LCAyNDMsIAotICAgIDIyOSwgMjE4LCAxMjksIDU0LCAyMTUsIDc3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMTYsIDE2NSwgMjQzLCAyMjksIAotICAgIDIxOCwgMTI5LCA1NCwgMjQ0LCA2LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyNDQsIDExOSwgMjQzLCAyMjksIDIxOCwgCi0gICAgMTI5LCA1NCwgMjE5LCAxMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIyMCwgMTIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDU0LCAyNDUsIDE5MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjI4LCAxOTgsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIAotICAgIDIxNSwgNzQsIDI0MywgMjI5LCAyMTgsIDEyOSwgODgsIDcsIDQsIDEsIDYxLCA4OCwgNywgNCwgMSwgMjUzLCAxNTgsIDg4LCAKLSAgICA3LCA0LCAxLCAyNTEsIDY2LCA4OCwgNywgNCwgMSwgMjQ5LCA2MCwgODgsIDcsIDQsIDEsIDc1LCA4OCwgNywgNCwgMSwgCi0gICAgMjQ1LCA2LCA4OCwgNywgNCwgMSwgMjQzLCAyMDIsIDg4LCA3LCA0LCAxLCAyNDIsIDYwLCA4OCwgNywgNCwgMSwgNzMsIDg4LCAKLSAgICA3LCA0LCAxLCAyMzUsIDE0NCwgODgsIDcsIDQsIDEsIDIzNSwgMjMsIDg4LCA3LCA0LCAxLCAxNTYsIDg4LCA3LCA0LCAxLCAKLSAgICAxOTMsIDg4LCA3LCA0LCAxLCAyMzAsIDI1LCA4OCwgNywgNCwgMSwgNzYsIDg4LCA3LCA0LCAxLCAyMjYsIDEwNSwgODgsIDcsIAotICAgIDQsIDEsIDIyNCwgOTYsIDg4LCA3LCA0LCAxLCAxNTMsIDg4LCA3LCA0LCAxLCAyMjIsIDkxLCA4OCwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDg4LCA3LCA0LCAxLCA3MCwgODgsIDcsIDQsIDEsIDIxNCwgMTA1LCA4OCwgNywgNCwgMSwgMjEyLCA5OCwgODgsIDcsIAotICAgIDQsIDEsIDIxMSwgMTc4LCA4OCwgNywgNCwgMSwgMjExLCAxMTcsIDg4LCA3LCA0LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDYsIAotICAgIDEsIDYxLCAzNywgNywgNiwgMSwgMjUzLCAxNTgsIDM3LCA3LCA2LCAxLCAyNTEsIDY2LCAzNywgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgMzcsIDcsIDYsIDEsIDc1LCAzNywgNywgNiwgMSwgMjQ1LCA2LCAzNywgNywgNiwgMSwgMjQzLCAyMDIsIDM3LCA3LCA2LCAxLCAKLSAgICAyNDIsIDYwLCAzNywgNywgNiwgMSwgNzMsIDM3LCA3LCA2LCAxLCAyMzUsIDE0NCwgMzcsIDcsIDYsIDEsIDIzNSwgMjMsIAotICAgIDM3LCA3LCA2LCAxLCAxNTYsIDM3LCA3LCA2LCAxLCAxOTMsIDM3LCA3LCA2LCAxLCAyMzAsIDI1LCAzNywgNywgNiwgMSwgCi0gICAgNzYsIDM3LCA3LCA2LCAxLCAyMjYsIDEwNSwgMzcsIDcsIDYsIDEsIDIyNCwgOTYsIDM3LCA3LCA2LCAxLCAxNTMsIDM3LCA3LCAKLSAgICA2LCAxLCAyMjIsIDkxLCAzNywgNywgNiwgMSwgMjE3LCAxNTIsIDM3LCA3LCA2LCAxLCA3MCwgMzcsIDcsIDYsIDEsIDIxNCwgCi0gICAgMTA1LCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAzNywgNywgNiwgMSwgMjExLCAxMTcsIAotICAgIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDQsIDEsIDYxLCAzNywgNywgNCwgMSwgMjUzLCAxNTgsIDM3LCA3LCA0LCAKLSAgICAxLCAyNTEsIDY2LCAzNywgNywgNCwgMSwgMjQ5LCA2MCwgMzcsIDcsIDQsIDEsIDc1LCAzNywgNywgNCwgMSwgMjQ1LCA2LCAKLSAgICAzNywgNywgNCwgMSwgMjQzLCAyMDIsIDM3LCA3LCA0LCAxLCAyNDIsIDYwLCAzNywgNywgNCwgMSwgNzMsIDM3LCA3LCA0LCAKLSAgICAxLCAyMzUsIDE0NCwgMzcsIDcsIDQsIDEsIDIzNSwgMjMsIDM3LCA3LCA0LCAxLCAxNTYsIDM3LCA3LCA0LCAxLCAxOTMsIAotICAgIDM3LCA3LCA0LCAxLCAyMzAsIDI1LCAzNywgNywgNCwgMSwgNzYsIDM3LCA3LCA0LCAxLCAyMjYsIDEwNSwgMzcsIDcsIDQsIAotICAgIDEsIDIyNCwgOTYsIDM3LCA3LCA0LCAxLCAxNTMsIDM3LCA3LCA0LCAxLCAyMjIsIDkxLCAzNywgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDM3LCA3LCA0LCAxLCA3MCwgMzcsIDcsIDQsIDEsIDIxNCwgMTA1LCAzNywgNywgNCwgMSwgMjEyLCA5OCwgMzcsIDcsIAotICAgIDQsIDEsIDIxMSwgMTc4LCAzNywgNywgNCwgMSwgMjExLCAxMTcsIDM3LCA3LCA0LCAxLCAyMTAsIDE1OSwgMzcsIDIxLCAKLSAgICAyMTAsIDg2LCAxNTIsIDM3LCA1NCwgMjQ1LCAxNjcsIDE1MiwgMzcsIDU0LCAyMTUsIDc2LCAxNTIsIDM3LCA1NCwgMjE2LCAKLSAgICAxNjQsIDE1MiwgMzcsIDU0LCAyNDQsIDUsIDE1MiwgMzcsIDU0LCAyNDQsIDExOCwgMTUyLCAzNywgNTQsIDIxOSwgMTE5LCAKLSAgICAxNTIsIDM3LCA1NCwgMjIwLCAxMTksIDE1MiwgMzcsIDU0LCAyNDUsIDE5MCwgMTUyLCAzNywgNTQsIDIyOCwgMTk3LCAxNTIsIAotICAgIDM3LCA1NCwgMjE1LCA3MywgNTIsIDM3LCAyMSwgMTEwLCA1MiwgMzcsIDIxLCAxMDUsIDUyLCAzNywgMjEsIDE1OCwgNTIsIAotICAgIDM3LCAyMSwgMTYxLCA1MiwgMzcsIDIxLCAxODksIDUyLCAzNywgMjEsIDE5NCwgNTIsIDM3LCAyMSwgMTk4LCA1MiwgMzcsIAotICAgIDIxLCAxOTUsIDUyLCAzNywgMjEsIDIwMCwgNTIsIDM3LCA1NCwgMjE2LCAyNDcsIDE1MiwgMzcsIDIxLCAyMTAsIDg2LCA5MywgCi0gICAgOTksIDE5MiwgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICAxMTQsIDIxMywgMjM5LCA5MywgOTksIDE5MiwgMjE1LCAyMTEsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDExNCwgCi0gICAgMjE1LCAyMTEsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjE1LCAyMTEsIDI0OCwgMTU3LCAyMTMsIDIzOSwgCi0gICAgOTMsIDk5LCAxMTQsIDIxNSwgMjExLCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgMTkyLCAyMjQsIDI0LCAyNDgsIAotICAgIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIDIyNCwgMjQsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjI0LCAKLSAgICAyNCwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjI0LCAyNCwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIAotICAgIDE5MiwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0NCwgMjQxLCAyMjEsIDkzLCA5OSwgMTI0LCAKLSAgICAxMTQsIDIyLCA0NCwgMjMyLCAyMzAsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDEyNCwgCi0gICAgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAKLSAgICA0MywgMjMyLCAyMzAsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMTIwLCAyMiwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCA0NCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMjMyLCAKLSAgICAyMzAsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDIzMywgNDYsIDkzLCAKLSAgICA5OSwgMTIwLCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgMjMyLCAyMzAsIDkzLCAKLSAgICA5OSwgMTE0LCAxMjAsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgNjcsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCA2NywgCi0gICAgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgCi0gICAgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTE0LCAyMiwgNDQsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDEyNCwgMTkyLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCA0NCwgMTI0LCAyNDEsIAotICAgIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCA2NywgMjIsIDIzMywgNDYsIDkzLCA5OSwgCi0gICAgNjcsIDE5MiwgMjIsIDQzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDQzLCAyMzIsIDIzMCwgCi0gICAgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDQzLCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDMsIDEyNCwgCi0gICAgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAxMjQsIDIyLCAyNDEsIDQ0LCAKLSAgICA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIDEyNCwgCi0gICAgMjMyLCAyMzAsIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMjAzLCAKLSAgICAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgMjIsIAotICAgIDQ0LCAxMjQsIDI0MSwgMjIxLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIAotICAgIDI0MSwgNDQsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgCi0gICAgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAKLSAgICAyMDMsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxOTIsIDIyLCA0MywgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAKLSAgICAyMiwgNDQsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgNjcsIAotICAgIDIyLCAyNDEsIDQ0LCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgNjcsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMTQsIDIyLCAKLSAgICA0MywgNjcsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAKLSAgICAyMiwgMTI0LCAyMDMsIDIzMiwgMjMwLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMTIwLCAyMDMsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDY3LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjMwLCA5MywgOTksIDQzLCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCAKLSAgICA5MywgOTksIDQ0LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIDQzLCAxMjQsIDExNCwgMjIsIAotICAgIDQ0LCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDEyNCwgMTkyLCAyMiwgMTIwLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgMTI0LCAyMDMsIDI0MSwgCi0gICAgMjIxLCA5MywgOTksIDQ0LCAxOTIsIDIyLCA0MywgNjcsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIDIyLCA0NCwgNjcsIAotICAgIDI0MSwgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgNTIsIDI0OCwgMTU3LCAyNDEsIAotICAgIDQ0LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgNTIsIDI0OCwgMTU3LCAyMTMsIAotICAgIDIzOSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgNTIsIDI0MSwgNDQsIDkzLCA5OSwgCi0gICAgNTIsIDIxMywgMjM5LCA5MywgOTksIDEyNCwgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgCi0gICAgMjIsIDQ0LCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTI0LCAyMTksIDE1NSwgCi0gICAgMjIsIDQzLCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjQsIDIyLCAKLSAgICAyMzMsIDQ2LCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIAotICAgIDQ0LCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTIwLCAyMTksIDE1NSwgMjIsIAotICAgIDQzLCAyNDYsIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjAsIDIyLCAKLSAgICAyMzMsIDQ2LCA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDQ0LCAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCA0NCwgCi0gICAgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgNjcsIDIxOSwgMTU1LCAyMiwgNDMsIAotICAgIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMzMsIDQ2LCAKLSAgICA5MywgOTksIDEyNCwgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIDIyLCAyMDMsIDIxOSwgCi0gICAgMTU0LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgCi0gICAgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyNDEsIDQ0LCAKLSAgICA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDIwMywgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgMjAzLCAyMTksIAotICAgIDE1NCwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTI0LCAyMiwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjQsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTIwLCAKLSAgICAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMjQ3LCAKLSAgICAyNTUsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MiwgMjMyLCAxMDgsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNDcsIDI1NSwgCi0gICAgMjE0LCAxNjAsIDQzLCAyMTYsIDQyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAyNDcsIDI1NSwgMjQ5LCAKLSAgICAxMzAsIDkzLCA5OSwgMTkyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjE0LCAxNjMsIDkzLCA5OSwgMTkyLCAyMjIsIDI1MSwgCi0gICAgOTMsIDk5LCAxOTIsIDI0NiwgMTA2LCA5MywgOTksIDExNCwgMjMzLCA0NiwgOTMsIDk5LCAxMTQsIDIxNCwgMTYzLCA5MywgCi0gICAgOTksIDExNCwgMjIyLCAyNTEsIDkzLCA5OSwgMTE0LCAyNDYsIDEwNiwgOTMsIDk5LCAxOTIsIDQzLCAyMiwgMTE0LCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDExNCwgMjQ2LCAxMDYsIDkzLCA5OSwgMTE0LCA0MywgMjIsIDE5MiwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAxOTIsIDI0NiwgMTA2LCAyMTQsIDE2MCwgMTYzLCAyNTEsIDIxMywgMjMyLCAKLSAgICAxMDgsIDEyMywgMjQ1LCAxODksIDI1MSwgMjEzLCAyMzIsIDEwOCwgMTIzLCAyMjQsIDIyLCAyNTEsIDIxMywgMjMyLCAxMDgsIAotICAgIDEzNCwgMjQ1LCAxODcsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMTYzLCAyNTEsIDIxMywgMjMyLCAxMDgsIDI0NCwgODEsIDI0NSwgCi0gICAgMTg3LCAyNTEsIDIxMywgMjMyLCAxMDgsIDEzNCwgMjI0LCAyMCwgMjUxLCAyMTMsIDIzMiwgMTA4LCAyMjAsIDEyMiwgMjQ1LCAKLSAgICAxODcsIDI1MSwgMjEzLCAyNDMsIDIyOSwgMjUxLCAyMTMsIDQzLCAyMjAsIDEyMiwgMjQ1LCAxODcsIDI1MSwgMjEzLCA0MywgCi0gICAgMTM0LCAyMjQsIDIwLCAyNTEsIDIxMywgNDMsIDI0NCwgODEsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIDE2MywgMjUxLCAKLSAgICAyMTMsIDQzLCAxMzQsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIDEyMywgMjI0LCAyMiwgMjUxLCAyMTMsIDQzLCAxMjMsIAotICAgIDI0NSwgMTg5LCAyNTEsIDIxMywgNDQsIDE2MywgMjUxLCAyMTMsIDE5MiwgMjIwLCA5MiwgMjMxLCA4MiwgMjIwLCA5MiwgCi0gICAgMjQ4LCAxNjIsIDIyMCwgOTIsIDIxNCwgMTYwLCAxMjMsIDI0NSwgMTg5LCAyNTEsIDIxMywgNDQsIDEyMywgMjQ1LCAxODksIAotICAgIDI1MSwgMjEzLCAyMjQsIDI2LCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIAotICAgIDI2LCAyMTQsIDE2MCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAxMDgsIDQzLCAyMiwgMjMyLCAKLSAgICAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDIyNCwgMjYsIAotICAgIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgCi0gICAgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCAyMjIsIAotICAgIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjIsIDIzMiwgMTA4LCA0MywgMjIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgODUsIDIxOCwgMjM0LCA3MSwgMjE4LCAyMzQsIDcxLCAKLSAgICA0MiwgMiwgMjIyLCAxODMsIDI0OSwgMTU5LCA3MSwgNDIsIDI0OSwgMTg3LCA4NSwgNCwgMjE4LCAyMzQsIDQyLCAyLCAyMDMsIAotICAgIDI0NCwgMTA1LCA0MiwgMiwgNjcsIDI0NCwgMTA1LCA0MiwgMiwgMjI2LCAxNDQsIDI0OSwgMTI2LCAyNDQsIDEwNSwgNDIsIAotICAgIDIsIDIxNCwgMTYwLCA0MywgMjE2LCA0MiwgMjMyLCAxMDgsIDQ0LCAyNDQsIDEwNSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjE2LCA0MiwgMjMyLCAxMDgsIDQzLCAyNDQsIDEwNSwgNDIsIDIsIDI0NywgMjU1LCAyNDksIDEyNiwgMjQ0LCAxMDUsIDg1LCAKLSAgICA0LCAyMTgsIDIzNCwgNzEsIDQsIDIxOCwgMjM0LCA4NSwgMjIzLCAxMTYsIDcxLCAyMjMsIDExNiwgODUsIDY3LCAyMjMsIAotICAgIDExNiwgNzEsIDY3LCAyMjMsIDExNiwgODUsIDIyNiwgNiwgNzEsIDIyNiwgNiwgODUsIDIxNCwgMTYyLCAyMTUsIDIyNSwgCi0gICAgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYyLCA0LCAyMTUsIDIyNSwgNzEsIDIxNCwgMTYyLCA0LCAyMTUsIAotICAgIDIyNSwgODUsIDIyMiwgMjQ3LCAyMTUsIDIyNSwgNzEsIDIyMiwgMjQ3LCAyMTUsIDIyNSwgODUsIDIyMiwgMjQ3LCA0LCAKLSAgICAyMTUsIDIyNSwgNzEsIDIyMiwgMjQ3LCA0LCAyMTUsIDIyNSwgODUsIDIyMiwgMjQ3LCAyMjUsIDgsIDcxLCAyMjIsIDI0NywgCi0gICAgMjI1LCA4LCA4NSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA3MSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA4NSwgMjQ2LCAxMDUsIDQsIAotICAgIDIxNSwgMjI1LCA3MSwgMjQ2LCAxMDUsIDQsIDIxNSwgMjI1LCA4NSwgMjMzLCA0MiwgMjE1LCAyMjUsIDcxLCAyMzMsIDQyLCAKLSAgICAyMTUsIDIyNSwgODUsIDIzMywgNDIsIDQsIDIxNSwgMjI1LCA3MSwgMjMzLCA0MiwgNCwgMjE1LCAyMjUsIDg1LCAyMzMsIAotICAgIDQyLCAyMjUsIDgsIDcxLCAyMzMsIDQyLCAyMjUsIDgsIDg1LCAyNDcsIDI0OCwgNzEsIDI0NywgMjQ4LCA3MSwgMjQ3LCAKLSAgICAyNDksIDI0OSwgMTg3LCA4NSwgNCwgMjQ3LCAyNDgsIDI0NCwgODksIDIzMiwgMTA0LCA3MSwgMjUwLCAzNSwgMjQ2LCAxMTgsIAotICAgIDI1MCwgMzUsIDI1MCwgMzYsIDIsIDY3LCAyNDQsIDEwNSwgMjUxLCAxMTEsIDg1LCAyNTAsIDM1LCAyNTAsIDM2LCAyLCA0MywgCi0gICAgMTYzLCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIzMiwgMTA4LCAxNjMsIAotICAgIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgMTYzLCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMjQsIDI2LCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjU0LCAxNTUsIDI1MSwgODgsIDIxNCwgMTYwLCA0MywgMjI0LCAyNiwgCi0gICAgMjUxLCAyMjEsIDQzLCAxNjMsIDg1LCAyNTAsIDM1LCA0NCwgMTYzLCA4NSwgMjUwLCAzNSwgMjM1LCAxOTQsIDI1MSwgMTEzLCAKLSAgICAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIxNCwgMTYwLCAxNjMsIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjMyLCAxMDgsIAotICAgIDE2MywgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIxNCwgCi0gICAgMTYwLCA0NCwgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAyNSwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIAotICAgIDI1LCAyMzIsIDEwOCwgNDMsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIxNCwgMTYwLCAxNjMsIDI1MCwgMzUsIDIzMiwgCi0gICAgMTA4LCAxNjMsIDI1MCwgMzUsIDg1LCAyMzIsIDEwOCwgNDQsIDIxNSwgMjI1LCA4NSwgMjMyLCAxMDgsIDQzLCAyMTUsIAotICAgIDIyNSwgODUsIDIxNCwgMTYwLCA0MywgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MCwgNDQsIDIxNSwgMjI1LCA3MSwgMjUxLCAKLSAgICAxMTMsIDQyLCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjE0LCAxNjAsIAotICAgIDQzLCAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIzMiwgMTA4LCA0NCwgMjQ3LCAyNTUsIDE2MywgMjUxLCAKLSAgICAyMjEsIDcxLCA0MiwgMiwgNjcsIDI1MSwgMjMyLCAyMzIsIDIxMywgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgMiwgMjQ3LCAKLSAgICAxMjAsIDIxNCwgMTYyLCAyMTUsIDIyNiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgMiwgNDQsIAotICAgIDE2MywgMjUxLCAyMjEsIDIzMywgODUsIDI1MCwgMzUsIDcxLCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI1LCA3MSwgCi0gICAgNDIsIDIsIDIzMiwgMTA4LCA0MywgMjI0LCAyNSwgNzEsIDQyLCAyLCAyMzIsIDEwOCwgNDQsIDIyNCwgMjUsIDcxLCA0MiwgCi0gICAgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI1LCA3MSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI1LCA3MSwgMjUwLCAKLSAgICAzNiwgMiwgMjMyLCAxMDgsIDQzLCAyMjQsIDI1LCA3MSwgMjUwLCAzNiwgMiwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI1LCA3MSwgCi0gICAgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI1LCAyMTQsIDE2MCwgNDQsIAotICAgIDIxNSwgMjI1LCAyMzIsIDEwOCwgNDMsIDIxNSwgMjI1LCA3MSwgMjMxLCA4MiwgMjE4LCAyMzQsIDg1LCAyMzEsIDgyLCAKLSAgICAyMTgsIDIzNCwgNzEsIDIzMSwgODIsIDQsIDIxOCwgMjM0LCA4NSwgMjMxLCA4MiwgNCwgMjE4LCAyMzQsIDIzMiwgMTA4LCAKLSAgICA0NCwgMjE1LCAyMjUsIDg1LCAyMTgsIDM4LCAyLCAyMjMsIDEzMiwgMjQ5LCAyNDcsIDIxNCwgMTk0LCAyMTksIDYwLCAyNDksIAotICAgIDIyMiwgODUsIDIxOCwgMTU2LCA3MSwgMjE4LCAxNTYsIDIzMiwgMjI4LCAyMTYsIDEzMiwgMjE4LCAzNywgMjUzLCAyMzQsIAotICAgIDIyOCwgNzEsIDI0OCwgMzgsIDIyOCwgNzEsIDI0OSwgMTk1LCAyMjYsIDE2MywgODUsIDIxNywgMCwgNzEsIDIxNywgMCwgCi0gICAgMjUyLCAxNTYsIDI1MSwgMTYzLCAyNTIsIDE1NiwgOTMsIDIsIDI1MCwgMTI5LCAyNTIsIDE1NiwgOTMsIDIsIDIxMSwgMTc4LCAKLSAgICAyMjEsIDI1NCwgMjE0LCAxOTUsIDIsIDIyMywgMTYwLCAyNDYsIDg0LCAyNDAsIDI0MywgMjUyLCAyMiwgNzEsIDIyMCwgMiwgCi0gICAgMjI1LCAxMDEsIDg1LCAyMjAsIDIsIDIyNSwgMTAxLCAyMjAsIDg3LCAyMjMsIDQ5LCAyMjIsIDE4NywgMjQ0LCA1NSwgMjQxLCAKLSAgICAyMjgsIDI1MSwgMTEzLCA4NSwgNDMsIDIyNSwgNywgMjM1LCAyNDIsIDg1LCA0NCwgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIAotICAgIDQzLCAyMjUsIDcsIDIzNSwgMjQyLCA3MSwgMTIwLCAyMjUsIDcsIDIzNSwgMjQyLCA3MSwgNDQsIDIyNSwgNywgMjM1LCAKLSAgICAyNDIsIDcxLCAxMjQsIDIyNSwgNywgMjM1LCAyNDIsIDIxOSwgMTAxLCAyMiwgMjQ5LCAxMjksIDI1MCwgMjE5LCA1MCwgCi0gICAgMjIzLCAxNzIsIDUwLCAyNTEsIDIzOSwgNTAsIDI1MSwgMjUsIDI1NCwgMTAyLCAyMjYsIDE0NSwgMjQ5LCAxMzAsIDI1MCwgCi0gICAgMTExLCAyMjMsIDM3LCAyNDksIDEzMSwgNjQsIDIzMiwgMTE4LCAyNDksIDEzMSwgNjQsIDIzNSwgMTE2LCAyMTgsIDE1NywgCi0gICAgMjIsIDI0OSwgMTM2LCAyNDQsIDE2OCwgODcsIDI1NCwgMjQ4LCAyMjAsIDg5LCAyNDIsIDIyLCAyMiwgMjE5LCAxODksIAotICAgIDIyNSwgMjIwLCA4NywgMjEwLCAyNTQsIDIxMSwgNjksIDIxNSwgMjE1LCAzMSwgMjQxLCAyMjMsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjMzLCAxMDcsIDIxNSwgMjE1LCAzMSwgMjQ0LCA5NiwgMjE1LCAyMTUsIDMxLCAyMTYsIDEzMywgMjE1LCAyMTUsIDMxLCAKLSAgICAyMTEsIDIzOSwgMjE1LCAyMTUsIDMxLCAyMTIsIDQwLCAyMTUsIDIxNSwgMzEsIDIzMCwgMTE1LCAyMTUsIDIxNSwgMzEsIAotICAgIDI0NSwgMjIzLCAyMTIsIDEsIDY0LCAyNDgsIDE4LCA3MSwgMjQzLCAyMzksIDI0NCwgMTkwLCA3MSwgMjE5LCA3NCwgMjQ0LCAKLSAgICAxOTAsIDg1LCAyMTksIDc0LCAyNDQsIDE5MCwgNzEsIDIxOCwgMzgsIDIsIDIyMywgMTMyLCAyNDQsIDkyLCAyMjQsIDIyLCAKLSAgICAyMzAsIDEyOCwgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAxMjgsIDIzMSwgNTQsIDI0NCwgMTM4LCA1MCwgMjQ1LCAyMjMsIAotICAgIDIzMSwgMTkwLCA1MCwgMjM1LCAzOCwgMjIxLCAyMjAsIDIxNCwgMTQ1LCAyMjksIDkzLCAyMjUsIDIwLCAyNTQsIDEyLCAKLSAgICAyMTcsIDQwLCAyNDMsIDUyLCAyNTEsIDMsIDIzMywgMTksIDIxMywgMTUwLCAyMzIsIDIzOCwgMjIxLCAxOTEsIDIyMiwgMTksIAotICAgIDI1MCwgMjQ4LCAyNTQsIDQyLCAyMjUsIDUyLCA3MSwgMjUwLCAxMTcsIDIzNCwgNzgsIDcxLCAyNTAsIDExNywgMjI0LCAxNCwgCi0gICAgNzEsIDI1MCwgMTE3LCAyMjIsIDE5NSwgNzEsIDI1MCwgMTE3LCAyNTEsIDIzMSwgNzEsIDI1MCwgMTE3LCAyMzQsIDMwLCAKLSAgICA3MSwgMjUwLCAxMTcsIDIyNSwgMjMxLCA4NSwgMjUwLCAxMTcsIDIzNCwgNzgsIDg1LCAyNTAsIDExNywgMjI0LCAxNCwgODUsIAotICAgIDI1MCwgMTE3LCAyMjIsIDE5NSwgODUsIDI1MCwgMTE3LCAyNTEsIDIzMSwgODUsIDI1MCwgMTE3LCAyMzQsIDMwLCA4NSwgCi0gICAgMjUwLCAxMTcsIDIyNSwgMjMxLCA4NSwgMjE5LCAxNiwgMjE4LCA1MCwgNzEsIDI0MSwgMjI4LCAyMTgsIDUwLCA3MSwgMjQ3LCAKLSAgICAyNDksIDIxOCwgNTAsIDg1LCAyNDksIDI0NSwgMjE4LCA1MCwgNzEsIDIxOSwgMTYsIDIxOCwgNTAsIDg1LCAyNDEsIDIyOCwgCi0gICAgMjE4LCA1MCwgODUsIDI0NywgMjQ5LCAyMTgsIDUwLCA3MSwgMjQ5LCAyNDUsIDIxOCwgNTAsIDI0MCwgMjQzLCAyMTgsIAotICAgIDIzOCwgMjI0LCAyMiwgMjI4LCA0NywgMjQ1LCAxODksIDIyOCwgNDcsIDI1MiwgNzMsIDI0NSwgMTg5LCAyMjgsIDQyLCAKLSAgICAyNTIsIDczLCAyMTksIDExOCwgMjI4LCA0MiwgMjMwLCA1NywgMjQ0LCA2NiwgNTAsIDIzMCwgNTcsIDIyOSwgMTg4LCA1MCwgCi0gICAgMjMwLCA1NywgMjIwLCA3NiwgNTAsIDIxMiwgOSwgMTg4LCAyNDksIDEzMCwgMjQ1LCAyMjAsIDE4OCwgMjQ5LCAxMzAsIAotICAgIDIxNCwgMTcxLCAyMjMsIDExMiwgODcsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDgsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDIxNSwgNDcsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDYsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDIxNSwgNDUsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDQsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDIxNSwgNDMsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDIsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDI0MywgNTAsIDIzMSwgMTM4LCA4NSwgMjE0LCAxNzEsIDIyMywgMTEyLCA4NywgMjIzLCAxMTMsIDIyNiwgMjAsIDg3LCAKLSAgICAyMjUsIDI1MiwgMjI2LCAyMCwgODcsIDIyNSwgMTc0LCAyMjYsIDIwLCA1MCwgMjExLCAyNTUsIDg3LCAyNDcsIDI0MSwgCi0gICAgMjQ0LCAxODksIDI0NywgMjQxLCAyNDQsIDE4OCwgMjQ3LCAyNDEsIDI0NCwgMTg3LCAyNDcsIDI0MSwgMjQ0LCAxODYsIAotICAgIDI0NywgMjQxLCAyNDQsIDE4NSwgMjQ3LCAyNDEsIDI0NCwgMTg0LCA3MSwgMjUwLCAzNiwgMiwgNTksIDIyMiwgMjUxLCA3MSwgCi0gICAgMjUwLCAzNiwgMiwgMTEzLCAyNDcsIDExOCwgODUsIDI1MCwgMzYsIDIsIDcxLCA1OSwgMjIyLCAyNTEsIDg1LCAyNTAsIDM2LCAKLSAgICAyLCAxMTMsIDcxLCAyNDcsIDExOCwgMjMwLCAxNDIsIDMxLCAyMTEsIDY5LCAyMzAsIDE0MiwgMzEsIDIxMCwgMjUzLCAyNDcsIAotICAgIDIyNCwgMzEsIDI0MiwgMTMxLCAyMTEsIDY5LCAyNDcsIDIyNCwgMzEsIDIzMywgMTMsIDIxMCwgMjUzLCAyNDcsIDIyNCwgCi0gICAgMzEsIDIzMywgMTMsIDIxMSwgNjksIDI0NywgMjI0LCAzMSwgMjQyLCAxMzEsIDIxMCwgMjUzLCA3MSwgMjQ0LCA3MywgODUsIAotICAgIDI0NCwgNzMsIDI0MiwgMjIsIDIyLCAyMjUsIDEwNCwgMjU0LCAxMjAsIDI0OSwgMTI4LCAyMTcsIDIzNSwgMjE4LCAxNjQsIAotICAgIDY0LCAyNTQsIDIyNiwgMjIxLCAyMDYsIDI1NCwgMTY5LCAyNDQsIDUxLCAyNDMsIDYwLCAyMTgsIDE2NCwgNjQsIDI0MSwgCi0gICAgMjAyLCAyNTMsIDE5OSwgODcsIDI0NCwgNjIsIDIyNiwgMTI2LCA3MSwgMjE4LCAxNTYsIDEzNCwgMjMyLCAyMDgsIDI0OSwgCi0gICAgMTc1LCAyMjIsIDI1MSwgMTM0LCAyMzIsIDIwOCwgMjQ5LCAxNzUsIDIzMywgNDYsIDIxMiwgNTAsIDUwLCAxMjUsIDIxMywgCi0gICAgMTMwLCA1MCwgMjQ2LCAxMTAsIDI0NCwgMTM4LCA1MCwgMjQ2LCAxMTAsIDIzMSwgMTkwLCA1MCwgMjM1LCAyMDMsIDI0NCwgCi0gICAgMTM4LCAyMiwgMjMxLCAxOTAsIDUwLCAyMzEsIDE5MCwgMjIsIDI0NCwgMTM4LCA1MCwgMjMxLCAxOTAsIDIsIDIxOCwgMTAzLCAKLSAgICA1MCwgMjMxLCAxOTAsIDIsIDIxOCwgMTAzLCAyMiwgMjMxLCAxOTAsIDIyLCAyNDQsIDEzOCwgNTAsIDY3LCAyMzEsIDE5MCwgCi0gICAgMiwgMjE4LCAxMDMsIDUwLCAyMDMsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgNTAsIDIzMSwgODIsIDcxLCAyNTAsIDM1LCAKLSAgICAyMzEsIDgyLCA4NSwgMjUwLCAzNSwgMjMxLCA4MiwgNCwgNzEsIDI1MCwgMzUsIDIzMSwgMTUzLCA4NywgMjQ3LCAxNjcsIAotICAgIDg3LCAyMTQsIDE2OSwgMjI1LCAyNTEsIDg3LCAyNDksIDIzMSwgMjQzLCAyMjQsIDIxNCwgMTQxLCAyMjksIDg4LCAyNTAsIAotICAgIDE2MSwgMjI2LCA2MSwgMjM1LCA0NCwgMjEzLCAxODUsIDI1MCwgOTMsIDg1LCAyMzAsIDEyOSwgMjMyLCAyMjUsIDIyMCwgCi0gICAgMTEyLCAyMjAsIDE0NywgMjI0LCA1LCAyMjAsIDEzMCwgMjE5LCA1NSwgMjUyLCAxNTksIDI1MiwgMTI2LCA5MiwgMjM0LCAKLSAgICAxMzgsIDcxLCAyNDYsIDkzLCAyMzEsIDE4NSwgNzEsIDI0NiwgOTMsIDIzNCwgNzgsIDg1LCAyNDYsIDkzLCAyMzEsIDE4NSwgCi0gICAgODUsIDI0NiwgOTMsIDIzNCwgNzgsIDIxOSwgNjEsIDIxMSwgMjMwLCAyMTksIDY0LCAyMTgsIDM4LCAyNTIsIDUxLCAyNDksIAotICAgIDI0NywgMjIzLCAxNTksIDg1LCAyMTksIDYwLCAyMTYsIDEzNCwgMjQ5LCAyNDgsIDIyLCAyMjMsIDE1OSwgMjE1LCA5NCwgCi0gICAgNzEsIDIyMCwgMiwgMjI1LCAxMDEsIDIxNSwgOTQsIDg1LCAyMjAsIDIsIDIyNSwgMTAxLCA3MSwgMjQ3LCAyNDksIDIzNiwgCi0gICAgMCwgMjE4LCAyMzQsIDI0OSwgMTI1LCAyMzMsIDkxLCAyNDcsIDE5MywgMjUwLCAyNDQsIDIyNiwgMTY2LCAyMjUsIDEwNCwgCi0gICAgMjUwLCAyNDUsIDIxOSwgODgsIDI0MSwgMjEyLCAyLCA3MSwgMjQ5LCAxMzAsIDM3LCAyNDksIDEyNSwgMjMzLCA5MSwgMjUwLCAKLSAgICAxNTMsIDIyOCwgNzUsIDI0NSwgMTI0LCAyNTQsIDE0MSwgMjI2LCAxOTEsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MSwgODUsIAotICAgIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MSwgNzEsIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MSwgODUsIAotICAgIDQzLCAyMzMsIDkyLCAyMzEsIDUzLCA3MSwgNDMsIDIzMywgOTIsIDIzMSwgNTMsIDI0NiwgODksIDIxOSwgODIsIDUwLCAKLSAgICAxMTQsIDcxLCAyNDYsIDEwNSwgMjE1LCAyMjUsIDQzLCAyNTAsIDAsIDI0NSwgMTI0LCA5MiwgMjIxLCAyNTQsIDI0NCwgCi0gICAgMTc1LCAyNDcsIDI1NSwgMjM2LCAwLCA3MSwgMjUwLCAzNiwgMjM2LCAwLCA4NSwgMjE4LCAyMzQsIDg1LCAyMTUsIDE5MiwgCi0gICAgMjIzLCA2MCwgNDMsIDI0NSwgMTIzLCAyMjMsIDYwLCA0MywgMjQ1LCAxMjIsIDI1MywgMjExLCAxNiwgMzEsIDIxNCwgMTQ1LCAKLSAgICAxMTQsIDI1MCwgMzYsIDIsIDIxOCwgMTAzLCAyMiwgMTEzLCAxNzAsIDQ4LCAyMjUsIDE4OSwgMjIyLCAyNDgsIDIzNSwgCi0gICAgMjA1LCAyMjUsIDE4OSwgMjMzLCA0MywgMjM1LCAyMDUsIDIyNSwgMTg5LCAyMzUsIDE5MywgMjI1LCAxODksIDg1LCAyNDksIAotICAgIDEzMSwgMjI2LCAxOTcsIDIyMCwgMjksIDIyMCwgMTcsIDIxOSwgMjI5LCAyNTAsIDYxLCAyNTAsIDIyNiwgMjQxLCAxNTcsIAotICAgIDIxOSwgMTI2LCAyNDMsIDYxLCAyMTEsIDIzMCwgMjQwLCAyMjAsIDI0MywgNjEsIDIsIDI0MiwgMTIsIDIzMSwgMTczLCAxNiwgCi0gICAgMzEsIDIzMiwgMjI5LCAyMzAsIDExNSwgMjE0LCAxOTUsIDIyNiwgMTk3LCAyNDIsIDEyMiwgMjQ0LCAxMiwgMjQ0LCA3NCwgCi0gICAgMjM2LCAwLCAyNDEsIDU5LCAyNDQsIDEyOSwgMjIyLCAxNCwgNDIsIDI0NCwgMTEsIDI0OSwgMTU5LCAyMTksIDEwNCwgMjQwLCAKLSAgICAxMTIsIDIxOSwgMTA3LCAyMjUsIDE2OCwgMiwgMjUyLCAxNTksIDIxNiwgMjQyLCAyMzUsIDEzMSwgMjUyLCAxNDYsIDg3LCAKLSAgICAyNDEsIDIzMSwgMjQyLCAxMzMsIDg3LCAyNDMsIDIzMiwgMjI0LCAxNDIsIDI0OSwgMTAzLCAyMjYsIDE5NywgODUsIDIxOCwgCi0gICAgMjM0LCA3MSwgMjQ0LCA3NCwgMiwgMjAzLCAyMzAsIDIyNCwgODUsIDIxOCwgMTA0LCAyMTQsIDE2MCwgMjUxLCAyMTcsIAotICAgIDIyMSwgMTkzLCA4NSwgMjIxLCAxOTMsIDIzMiwgMTA4LCAyNTEsIDIxNywgMjIxLCAxOTMsIDcxLCAyMjEsIDE5MywgNzEsIAotICAgIDExNCwgMjUwLCAxMzAsIDc4LCAyMTcsIDEsIDIzMiwgMTU0LCA1MCwgMjE3LCA1MywgMjQ2LCA4OCwgMjU0LCAxOTEsIDI0NSwgCi0gICAgMTE5LCAyMjMsIDE1NywgMjQ0LCA4NSwgMjIzLCAxNTcsIDI0MiwgMTUsIDIxMywgMTc0LCAyNDIsIDE1LCAyMTEsIDE5OCwgCi0gICAgMjQyLCAxNSwgMjMyLCAxMDgsIDQ0LCAyMjUsIDE5OCwgMjI1LCAxOTgsIDIxNCwgMTYwLCA0NCwgMjI1LCAxOTgsIDcxLCAKLSAgICAyMjgsIDIzMCwgODUsIDIyOCwgMjMwLCAyNTAsIDEzMCwgNzgsIDExNCwgMjUwLCAxMzAsIDc4LCAyMzAsIDg0LCAyMTEsIAotICAgIDE3OCwgMTE0LCAyMzAsIDg0LCAyMTEsIDE3OCwgMjUyLCAxNTYsIDIxMSwgMTc4LCAxMTQsIDI1MiwgMTU2LCAyMTEsIDE3OCwgCi0gICAgMjI2LCAxMjYsIDI2LCAyNDksIDEzMCwgMTE0LCAyNiwgMjQ5LCAxMzAsIDIwNCwgMjUwLCAxNzUsIDI0OSwgMTMwLCAxMTQsIAotICAgIDIwNCwgMjUwLCAxNzUsIDI0OSwgMTMwLCA3LCAyNDksIDEzMCwgMjIwLCA5MSwgNzEsIDcsIDI0OSwgMTMwLCAyMjYsIDEyNiwgCi0gICAgNywgMjQ5LCAxMzAsIDIzMSwgMTg3LCAyNDksIDEzMCwgMjE4LCAxNTcsIDY0LCAyNDgsIDE0OSwgMjQ0LCAxMSwgMjE3LCAKLSAgICAxNSwgMjUzLCAyMTYsIDI0NCwgMTEsIDI1MiwgMTU3LCAyNTMsIDIxNiwgMTE0LCAyNDQsIDExLCAyNTIsIDE1NywgMjUzLCAKLSAgICAyMTYsIDI0NCwgMTEsIDI0OSwgMjQzLCAyNTMsIDIxNiwgODUsIDI0NCwgMTEsIDIyNSwgOSwgMjE4LCAxNTYsIDcxLCAyNDQsIAotICAgIDExLCAyMjUsIDksIDIxOCwgMTU2LCAyMTksIDExLCAyMTgsIDExMSwgMjI2LCAxMjYsIDcxLCAyMTgsIDE1NiwgMzcsIDcxLCAKLSAgICAyMTgsIDE1NiwgMjA0LCAyNTAsIDE3NSwgODUsIDIxOCwgMTU2LCA4NSwgMjUwLCAxNzUsIDcxLCAyMTgsIDE1NiwgMjI2LCAKLSAgICAxMjYsIDg1LCAyMTgsIDE1NiwgMTE0LCAyMjYsIDEyNiwgODUsIDIxOCwgMTU2LCAyMjUsIDYwLCAyMTgsIDE1NiwgMjIwLCAKLSAgICA5MSwgNzEsIDIxOCwgMTU2LCAxMTQsIDI1MywgMjE2LCAyMDQsIDI1MCwgMTc1LCAyNTMsIDIxNiwgMjQ1LCAxOTMsIDIxOCwgCi0gICAgMjQ0LCAyNTMsIDIxNiwgMjQ1LCAxOTMsIDIyNSwgOSwgODUsIDIxOCwgMTU2LCAyNDUsIDE5MywgMjI1LCA5LCAyMjUsIDYwLCAKLSAgICAyMTgsIDE1NiwgMjE5LCAxMjUsIDIyNSwgOSwgODUsIDIxOCwgMTU2LCAyNDUsIDE5MywgMjI1LCA5LCAyMjMsIDExNCwgODUsIAotICAgIDIxOCwgMTU2LCAxMTQsIDI0NSwgMTkzLCAyMjUsIDksIDIyMywgMTE0LCA4NSwgMjE4LCAxNTYsIDIxNSwgNzcsIDIyNSwgOSwgCi0gICAgODUsIDIxOCwgMTU2LCAyMTksIDEyMCwgMjI1LCA5LCAyNTMsIDIxNiwgMjE3LCAxNSwgMjUzLCAyMTYsIDIwNCwgMjUwLCAKLSAgICAxNzUsIDIxNywgMTUsIDI1MywgMjE2LCAxMTQsIDIxNywgMTUsIDI1MywgMjE2LCAyMTksIDEyNSwgMjI1LCAxNTcsIDg1LCAKLSAgICAyMiwgNzEsIDI0NCwgNTQsIDg1LCAyNDQsIDU0LCA3MSwgMjQ0LCA1NCwgMjQ1LCAxOTMsIDIyNSwgMTU3LCAyMjYsIDEyNiwgCi0gICAgODUsIDI0NCwgNTQsIDM3LCAyMDQsIDI1MCwgMTc1LCAyNDUsIDE5MywgMjI1LCA5LCAyMTgsIDE1NiwgMTE0LCAyMTcsIDE1LCAKLSAgICAyMjUsIDYwLCAyNTMsIDIxNiwgMjE5LCA2MiwgMjE2LCAxMDUsIDIxNSwgMjE4LCAyMTksIDYyLCAxMTQsIDI1MCwgMTE0LCAKLSAgICAyMTksIDYyLCAyMTksIDEzLCAxMTQsIDIxOSwgMTMsIDI1MiwgMTU3LCAyNTMsIDIxNiwgMjQ1LCAxOTMsIDIxNywgMTUsIAotICAgIDIyNCwgMTcxLCAyNTMsIDIxNiwgMTE0LCAyNDUsIDE5MywgMjE3LCAxNSwgMjI0LCAxNzEsIDI1MywgMjE2LCAyNDksIDEzMSwgCi0gICAgNzgsIDIyMCwgOTEsIDcxLCAyNTAsIDM1LCAxNTIsIDkyLCAyNDksIDEzMSwgNzgsIDIzMiwgMTA4LCA0NCwgMjQ2LCA4NiwgCi0gICAgNzEsIDIxOCwgMjM0LCAyMTQsIDE2MCwgNDQsIDI0NiwgODYsIDcxLCAyMTgsIDIzNCwgMjMyLCAxMDgsIDQ0LCAyMjAsIDkxLCAKLSAgICA3MSwgMjE4LCAyMzQsIDIxNCwgMTYwLCA0NCwgMjIwLCA5MSwgNzEsIDIxOCwgMjM0LCA4NSwgMjI0LCAxMywgMTY0LCAyMjYsIAotICAgIDE0NywgNzEsIDIyNCwgMTMsIDE2NCwgMjI2LCAxNDcsIDcxLCAyNDUsIDMxLCAxNjQsIDIyNiwgMTQ3LCA4NSwgMjQ3LCAKLSAgICAyNDksIDIzMCwgMTgyLCA3MSwgMjExLCAxNzgsIDExNCwgMjQ1LCAzMSwgMTY0LCA4NywgMTkyLCA2NywgMTMwLCAyMzEsIAotICAgIDgyLCA2NywgMTMwLCAxMTQsIDY3LCAxMzAsIDExNCwgMjE5LCAxNTUsIDIxNSwgOTQsIDI0OSwgMjIwLCAyMjMsIDI1NCwgCi0gICAgMTY0LCAyMjYsIDE0NywgMTE0LCAyMTksIDE1NSwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDUyLCAKLSAgICAyMTUsIDk0LCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgNTIsIDI0OSwgMjIwLCAyMjMsIDI1NCwgCi0gICAgMTY0LCAyMjYsIDE0NywgMTE0LCAxMjEsIDIxOSwgMTU1LCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIAotICAgIDExNCwgMTIxLCA1MiwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAyNDksIDkxLCAyMTgsIDE0MCwgMjI2LCAKLSAgICAxNSwgNSwgMjI2LCAxNDcsIDExNCwgMjQ1LCAzMSwgMTY0LCAyMjYsIDE0NywgMTE0LCAyNDEsIDIyOCwgMjQ1LCAzMSwgCi0gICAgMTY0LCAyMjYsIDE0NywgMTE0LCA4NSwgMjQxLCAyMjcsIDIyMiwgMTg3LCAxMTQsIDg1LCAyNDEsIDIyOCwgMjUxLCAxMTMsIAotICAgIDI0NCwgNTUsIDI0MSwgMjI3LCAyMjIsIDE4NywgMjQ0LCA1NSwgMjQxLCAyMjgsIDI1MSwgMTEzLCAyMzEsIDgyLCA0MywgCi0gICAgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgNDQsIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDI0NCwgNjMsIDQzLCAKLSAgICAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyNDQsIDYzLCA0NCwgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjMzLCAKLSAgICA0MiwgMjU0LCAxMTAsIDI1MSwgMTU4LCAyMjYsIDE0NywgMjMxLCA4MiwgMjIyLCAyNDcsIDI1NCwgMTEwLCAyNTEsIDE1OCwgCi0gICAgMjI2LCAxNDcsIDExNCwgMjMzLCA0MiwgMjU0LCAxMTAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIyMiwgMjQ3LCAKLSAgICAyNTQsIDExMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjMzLCA0MiwgMjU0LCAxMTAsIDI1MSwgMTU4LCAyMjYsIAotICAgIDE0NywgMTE0LCAyMjIsIDI0NywgMjU0LCAxMTAsIDI1MSwgMTU4LCAyMjYsIDE0NywgMTkyLCA0MywgMjE2LCA2LCAyMjAsIAotICAgIDUzLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDE5MiwgNDQsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTgsIDIyNiwgMTQ3LCAKLSAgICAyMzEsIDgyLCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyNiwgMTQ3LCAyMzEsIDgyLCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIAotICAgIDIyNiwgMTQ3LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDExMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxMDUsIDI0NywgCi0gICAgMjA0LCAxNTIsIDM3LCAyMSwgMTU4LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE2MSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAKLSAgICAxODksIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTk0LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE5OCwgMjQ3LCAyMDQsIAotICAgIDE1MiwgMzcsIDIxLCAxOTUsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMjAwLCAyNDcsIDIwNCwgMTUyLCAzNywgNTQsIDIxNiwgCi0gICAgMjQ3LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTEwLCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTA1LCAyNDcsIDIwNCwgMzcsIAotICAgIDM1LCAyMSwgMTU4LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTg5LCAyNDcsIAotICAgIDIwNCwgMzcsIDM1LCAyMSwgMTk0LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTk4LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgCi0gICAgMTk1LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMjAwLCAyNDcsIDIwNCwgMzcsIDM1LCA1NCwgMjE2LCAyNDcsIDI0NywgMjA0LCAKLSAgICAxNTIsIDM3LCAzNSwgMjEsIDExMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTA1LCAyNDcsIDIwNCwgMTUyLCAzNywgCi0gICAgMzUsIDIxLCAxNTgsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgCi0gICAgMTg5LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTQsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5OCwgMjQ3LCAKLSAgICAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAyMDAsIDI0NywgMjA0LCAxNTIsIAotICAgIDM3LCAzNSwgNTQsIDIxNiwgMjQ3LCAxMTQsIDIxMSwgMjQ2LCA5NywgNzQsIDExNCwgOTYsIDUwLCAxMTQsIDIzMCwgMTgyLCAKLSAgICA1MCwgMTE0LCAyNDcsIDE2OSwgNTAsIDExNCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAxMTQsIDk3LCA3NCwgMTE0LCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzQsIDI0NiwgOTgsIDIyNSwgMTEsIDk3LCA3NCwgMTE0LCAyMjIsIDE4NCwgOTcsIDc0LCAyMTUsIAotICAgIDIyNCwgOTcsIDc0LCAxMTQsIDIxNSwgMjI0LCA5NywgNzQsIDI0OCwgMTU1LCAyMTUsIDIyNCwgOTcsIDc0LCAxMTQsIDI0OCwgCi0gICAgMTU1LCAyMTUsIDIyNCwgOTcsIDc0LCA4NSwgOTcsIDc0LCAyMTYsIDE0NCwgMjE2LCAxMiwgOTcsIDI1MywgMjQ5LCAyMTYsIAotICAgIDE0NCwgMjUxLCAxNzMsIDk3LCAyNTMsIDI0OSwgODUsIDk3LCAyNTMsIDI0OSwgMTE0LCA4NSwgMjQ5LCA5MSwgMjQ2LCAKLSAgICAxMDQsIDIyLCA5NywgNzQsIDExNCwgODUsIDI0OSwgOTEsIDIxNCwgMTUzLCAyMiwgOTcsIDc0LCAyMTgsIDIzMSwgODUsIAotICAgIDk3LCA3NCwgMTE0LCAyNDksIDIwNiwgODUsIDk3LCA3NCwgMjIyLCAyNDYsIDcxLCA5NywgNzQsIDIzMywgNDEsIDcxLCA5NywgCi0gICAgNzQsIDI1MiwgMTgzLCAyMjAsIDkxLCA3MSwgOTcsIDc0LCAyNDMsIDI0MSwgMjIwLCA5MSwgNzEsIDk3LCA3NCwgMTE0LCAKLSAgICAyMzIsIDEwOCwgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDExNCwgMjE0LCAxNjAsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAyMjgsIAotICAgIDQ5LCAyMzIsIDEwOCwgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDI0OSwgOTksIDIzMiwgMTIzLCAyMjgsIDQ5LCAyMTQsIDE2MCwgCi0gICAgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDM3LCAxMTQsIDcxLCA5NywgNzQsIDIxMSwgMjUyLCA5NywgNzQsIDI1MSwgMjIwLCAKLSAgICAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDI1MSwgMjIwLCA5NywgNzQsIDI1MSwgMjIwLCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIAotICAgIDExNCwgMjUxLCAyMjAsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMTE0LCAyNTEsIDIyMCwgOTcsIDc0LCAxMTQsIDI1MSwgCi0gICAgMjIwLCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIxNywgMTcsIDk3LCA3NCwgMTE0LCAyMTcsIDE2LCA5NywgNzQsIDIxMiwgCi0gICAgMTgsIDk3LCA3NCwgMTE0LCAyMTIsIDE4LCA5NywgNzQsIDIyNiwgMTcyLCA5NywgNzQsIDUyLCAyNDksIDk5LCAyMzIsIAotICAgIDEyMywgMTM0LCAyNDcsIDIxNCwgMjU0LCAxMDksIDcxLCAyMTUsIDIyNiwgMjQ5LCAxODcsIDQsIDcxLCAyMTUsIDIyNSwgCi0gICAgMjI1LCAxNzEsIDIwNCwgMjE4LCA2MywgMjA0LCAyMTgsIDIxLCA0MywgMjIyLCA5MCwgMjUyLCAxNzMsIDI0OCwgNjAsIDQ0LCAKLSAgICAyMjIsIDkwLCAyNTIsIDE3MywgMjQ4LCA2MCwgMTc3LCAyLCA1OSwgMjM1LCAyMTUsIDIyMywgNTAsIDIxOSwgNDcsIDIyNCwgCi0gICAgMjAxLCAyMTgsIDYzLCAyMTgsIDIyLCAyMjQsIDIwMSwgMjE5LCA0NiwgNjcsIDI1MiwgMTQxLCAyLCAyMDMsIDkxLCAxMSwgCi0gICAgMjIyLCAyMjgsIDI0NywgMjU0LCAxOTksIDI0NywgMTY4LCAxMSwgMjQ0LCAxNzUsIDI0NywgMjU0LCA5MiwgMjMyLCAxNDYsIAotICAgIDI1NCwgMTE4LCA5MiwgMjMyLCAxNDYsIDIyNiwgMTU4LCA3MSwgMjQ3LCAyNDksIDIsIDI1MCwgMTczLCAyNDcsIDEyMCwgCi0gICAgMjIsIDIsIDI0NywgMTIwLCAyNDUsIDE3MCwgNjQsIDIyNiwgMTcwLCAyMTQsIDE1MiwgMjMyLCAxMDgsIDQ0LCAyNDksIAotICAgIDE2MSwgMiwgMjQ3LCAxMjAsIDIxNCwgMTYwLCA0MywgMjQ5LCAxNjEsIDIsIDI0NywgMTIwLCA0MywgMjI2LCAxMjgsIDIzNSwgCi0gICAgNjYsIDQ0LCAyMjYsIDEyOCwgMjM1LCA2NiwgMjQzLCAyMjksIDIyNiwgMTI4LCAyMzUsIDY2LCAyMzMsIDg1LCAxMjAsIAotICAgIDIxNywgODcsIDIzMywgODUsIDEyNCwgMjE3LCA4NywgNDMsIDIyLCA0NCwgNTIsIDIxNSwgOTMsIDQzLCAyMiwgNDQsIDIxNywgCi0gICAgODcsIDQzLCAyMzAsIDg3LCAxOTksIDQ0LCAyMTcsIDg3LCAxOTksIDQzLCAyMTcsIDg3LCAxMjAsIDIxNywgODgsIDIsIAotICAgIDI1MCwgMzYsIDQ4LCAyMzIsIDEwNSwgMjQ3LCAxNzMsIDI1MSwgNzgsIDIwMywgMjIyLCAxMzMsIDcxLCAyNDksIDIwNSwgCi0gICAgMjQ3LCAyNDgsIDcxLCAyNDksIDIwNSwgMjQ3LCAyNDksIDIsIDE0MCwgMjE2LCAxMTQsIDcxLCAyNDksIDIwNSwgMjQ3LCAKLSAgICAyNDksIDIsIDk3LCAyMTYsIDExNCwgNzEsIDQyLCAyLCAxNDAsIDIxNiwgMTE0LCA3MSwgNDIsIDIsIDk3LCAyMTYsIDExNCwgCi0gICAgMTEsIDQzLCA3MSwgNDIsIDEyNywgMTEsIDQ0LCA3MSwgNDIsIDEyNywgMTEsIDQzLCAyNTQsIDExMCwgMTI3LCAxMSwgNDQsIAotICAgIDI1NCwgMTEwLCAxMjcsIDExLCA0MywgNTIsIDI1NCwgMTEwLCAxMjcsIDExLCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDExLCAKLSAgICA0MywgNzEsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAxMSwgNDQsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMTEsIDQzLCAKLSAgICAyNDQsIDYzLCAyMjYsIDMsIDExLCA0NCwgMjQ0LCA2MywgMjI2LCAzLCAyMTQsIDE1MywgMjI0LCAyNCwgNzQsIDI0NiwgCi0gICAgMTA0LCAyMjQsIDI0LCA3NCwgMjU0LCA4OCwgMjQzLCA5OCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjQzLCA5OCwgMjUwLCAKLSAgICAzNiwgNzQsIDQ0LCA4MCwgMiwgMzcsIDIyNSwgMjIsIDE5OSwgMTQwLCA3NCwgMTk5LCA5NywgNzQsIDE5OSwgNDMsIDQ0LCAKLSAgICA3NCwgMTk5LCAxNDAsIDUyLCA3NCwgMTk5LCA5NywgNTIsIDc0LCAxOTksIDQzLCA0NCwgNTIsIDc0LCAxOTksIDE0MCwgODAsIAotICAgIDI0MywgMjQzLCAxMzAsIDE5OSwgOTcsIDgwLCAyNDMsIDI0MywgMTMwLCAxOTksIDE0MCwgNTIsIDgwLCAyNDMsIDI0MywgCi0gICAgMTMwLCAxOTksIDk3LCA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDE5OSwgOTcsIDIxOCwgMjMwLCA3NCwgNDYsIDQ3LCAyNTEsIAotICAgIDIxNSwgNDYsIDQ3LCAyNDcsIDExNywgNDYsIDQ3LCAyNDYsIDI0NSwgNDYsIDQ3LCAyNDcsIDExNiwgNDYsIDQ3LCAyNDYsIAotICAgIDE4MSwgNDYsIDQ3LCAyNDcsIDUyLCA0NiwgNDcsIDI0NiwgMjQ0LCA0NiwgNDcsIDI0NywgMTE1LCA0NiwgNDcsIDI0NiwgCi0gICAgMTQ5LCA0NiwgNDcsIDI0NywgMjAsIDQ2LCA0NywgMjQ2LCAyMTIsIDQ2LCA0NywgMjQ3LCA4MywgNDYsIDQ3LCAyNDYsIAotICAgIDE4MCwgNDYsIDQ3LCAyNDcsIDUxLCA0NiwgNDcsIDI0NiwgMjQzLCA0NiwgNDcsIDI0NywgMTE0LCA0NiwgNDcsIDI0NiwgCi0gICAgMTMzLCA0NiwgNDcsIDI0NywgNCwgNDYsIDQ3LCAyNDYsIDE5NiwgNDYsIDQ3LCAyNDcsIDY3LCA0NiwgNDcsIDI0NiwgMTY0LCAKLSAgICA0NiwgNDcsIDI0NywgMzUsIDQ2LCA0NywgMjQ2LCAyMjcsIDQ2LCA0NywgMjQ3LCA5OCwgNDYsIDQ3LCAyNDYsIDE0OCwgNDYsIAotICAgIDQ3LCAyNDcsIDE5LCA0NiwgNDcsIDI0NiwgMjExLCA0NiwgNDcsIDI0NywgODIsIDQ2LCA0NywgMjQ2LCAxNzksIDQ2LCA0NywgCi0gICAgMjQ3LCA1MCwgNDYsIDQ3LCAyNDYsIDI0MiwgNDYsIDQ3LCAyNDcsIDExMywgNDYsIDQ3LCAyNDYsIDEyNSwgNDYsIDQ3LCAKLSAgICAyNDYsIDI1MiwgNDYsIDQ3LCAyNDYsIDE4OCwgNDYsIDQ3LCAyNDcsIDU5LCA0NiwgNDcsIDI0NiwgMTU2LCA0NiwgNDcsIAotICAgIDI0NywgMjcsIDQ2LCA0NywgMjQ2LCAyMTksIDQ2LCA0NywgMjQ3LCA5MCwgNDYsIDQ3LCAyNDYsIDE0MCwgNDYsIDQ3LCAKLSAgICAyNDcsIDExLCA0NiwgNDcsIDI0NiwgMjAzLCA0NiwgNDcsIDI0NywgNzQsIDQ2LCA0NywgMjQ2LCAxNzEsIDQ2LCA0NywgCi0gICAgMjQ3LCA0MiwgNDYsIDQ3LCAyNDYsIDIzNCwgNDYsIDQ3LCAyNDcsIDEwNSwgNDYsIDQ3LCAyNDYsIDEzMiwgNDYsIDQ3LCAKLSAgICAyNDcsIDMsIDQ2LCA0NywgMjQ2LCAxOTUsIDQ2LCA0NywgMjQ3LCA2NiwgNDYsIDQ3LCAyNDYsIDE2MywgNDYsIDQ3LCAyNDcsIAotICAgIDM0LCA0NiwgNDcsIDI0NiwgMjI2LCA0NiwgNDcsIDI0NywgOTcsIDQ2LCA0NywgMjQ2LCAxNDcsIDQ2LCA0NywgMjQ3LCAxOCwgCi0gICAgNDYsIDQ3LCAyNDYsIDIxMCwgNDYsIDQ3LCAyNDcsIDgxLCA0NiwgNDcsIDI0NiwgMTc4LCA0NiwgNDcsIDI0NywgNDksIDQ2LCAKLSAgICA0NywgMjQ2LCAyNDEsIDQ2LCA0NywgMjQ3LCAxMTIsIDQ2LCA0NywgMjQ2LCAxMjEsIDQ2LCA0NywgMjQ2LCAyNDgsIDQ2LCAKLSAgICA0NywgMjQ2LCAxODQsIDQ2LCA0NywgMjQ3LCA1NSwgNDYsIDQ3LCAyNDYsIDE1MiwgNDYsIDQ3LCAyNDcsIDIzLCA0NiwgNDcsIAotICAgIDI0NiwgMjE1LCA0NiwgNDcsIDI0NywgODYsIDQ2LCA0NywgMjQ2LCAxMzYsIDQ2LCA0NywgMjQ3LCA3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTk5LCA0NiwgNDcsIDI0NywgNzAsIDQ2LCA0NywgMjQ2LCAxNjcsIDQ2LCA0NywgMjQ3LCAzOCwgNDYsIDQ3LCAyNDYsIAotICAgIDIzMCwgNDYsIDQ3LCAyNDcsIDEwMSwgNDYsIDQ3LCAyNDYsIDEyOCwgNDYsIDQ3LCAyNDYsIDI1NSwgNDYsIDQ3LCAyNDYsIAotICAgIDE5MSwgNDYsIDQ3LCAyNDcsIDYyLCA0NiwgNDcsIDI0NiwgMTU5LCA0NiwgNDcsIDI0NywgMzAsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMjIsIDQ2LCA0NywgMjQ3LCA5MywgNDYsIDQ3LCAyNDYsIDE0MywgNDYsIDQ3LCAyNDcsIDE0LCA0NiwgNDcsIDI0NiwgCi0gICAgMjA2LCA0NiwgNDcsIDI0NywgNzcsIDQ2LCA0NywgMjQ2LCAxNzQsIDQ2LCA0NywgMjQ3LCA0NSwgNDYsIDQ3LCAyNDYsIAotICAgIDIzNywgNDYsIDQ3LCAyNDcsIDEwOCwgNDYsIDQ3LCAyNDYsIDEyNCwgNDYsIDQ3LCAyNDYsIDI1MSwgNDYsIDQ3LCAyNDYsIAotICAgIDE4NywgNDYsIDQ3LCAyNDcsIDU4LCA0NiwgNDcsIDI0NiwgMTU1LCA0NiwgNDcsIDI0NywgMjYsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMTgsIDQ2LCA0NywgMjQ3LCA4OSwgNDYsIDQ3LCAyNDYsIDEzOSwgNDYsIDQ3LCAyNDcsIDEwLCA0NiwgNDcsIDI0NiwgCi0gICAgMjAyLCA0NiwgNDcsIDI0NywgNzMsIDQ2LCA0NywgMjQ2LCAxNzAsIDQ2LCA0NywgMjQ3LCA0MSwgNDYsIDQ3LCAyNDYsIAotICAgIDIzMywgNDYsIDQ3LCAyNDcsIDEwNCwgNDYsIDQ3LCAyNDYsIDEzMSwgNDYsIDQ3LCAyNDcsIDIsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTQsIDQ2LCA0NywgMjQ3LCA2NSwgNDYsIDQ3LCAyNDYsIDE2MiwgNDYsIDQ3LCAyNDcsIDMzLCA0NiwgNDcsIDI0NiwgCi0gICAgMjI1LCA0NiwgNDcsIDI0NywgOTYsIDQ2LCA0NywgMjQ2LCAxNDYsIDQ2LCA0NywgMjQ3LCAxNywgNDYsIDQ3LCAyNDYsIAotICAgIDIwOSwgNDYsIDQ3LCAyNDcsIDgwLCA0NiwgNDcsIDI0NiwgMTc3LCA0NiwgNDcsIDI0NywgNDgsIDQ2LCA0NywgMjQ2LCAKLSAgICAyNDAsIDQ2LCA0NywgMjQ3LCAxMTEsIDQ2LCA0NywgMjQ2LCAxMTksIDQ2LCA0NywgMjQ2LCAyNDYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODIsIDQ2LCA0NywgMjQ3LCA1MywgNDYsIDQ3LCAyNDYsIDE1MCwgNDYsIDQ3LCAyNDcsIDIxLCA0NiwgNDcsIDI0NiwgCi0gICAgMjEzLCA0NiwgNDcsIDI0NywgODQsIDQ2LCA0NywgMjQ2LCAxMzQsIDQ2LCA0NywgMjQ3LCA1LCA0NiwgNDcsIDI0NiwgMTk3LCAKLSAgICA0NiwgNDcsIDI0NywgNjgsIDQ2LCA0NywgMjQ2LCAxNjUsIDQ2LCA0NywgMjQ3LCAzNiwgNDYsIDQ3LCAyNDYsIDIyOCwgNDYsIAotICAgIDQ3LCAyNDcsIDk5LCA0NiwgNDcsIDI0NiwgMTI2LCA0NiwgNDcsIDI0NiwgMjUzLCA0NiwgNDcsIDI0NiwgMTg5LCA0NiwgCi0gICAgNDcsIDI0NywgNjAsIDQ2LCA0NywgMjQ2LCAxNTcsIDQ2LCA0NywgMjQ3LCAyOCwgNDYsIDQ3LCAyNDYsIDIyMCwgNDYsIDQ3LCAKLSAgICAyNDcsIDkxLCA0NiwgNDcsIDI0NiwgMTQxLCA0NiwgNDcsIDI0NywgMTIsIDQ2LCA0NywgMjQ2LCAyMDQsIDQ2LCA0NywgCi0gICAgMjQ3LCA3NSwgNDYsIDQ3LCAyNDYsIDE3MiwgNDYsIDQ3LCAyNDcsIDQzLCA0NiwgNDcsIDI0NiwgMjM1LCA0NiwgNDcsIAotICAgIDI0NywgMTA2LCA0NiwgNDcsIDI0NiwgMTIyLCA0NiwgNDcsIDI0NiwgMjQ5LCA0NiwgNDcsIDI0NiwgMTg1LCA0NiwgNDcsIAotICAgIDI0NywgNTYsIDQ2LCA0NywgMjQ2LCAxNTMsIDQ2LCA0NywgMjQ3LCAyNCwgNDYsIDQ3LCAyNDYsIDIxNiwgNDYsIDQ3LCAKLSAgICAyNDcsIDg3LCA0NiwgNDcsIDI0NiwgMTM3LCA0NiwgNDcsIDI0NywgOCwgNDYsIDQ3LCAyNDYsIDIwMCwgNDYsIDQ3LCAyNDcsIAotICAgIDcxLCA0NiwgNDcsIDI0NiwgMTY4LCA0NiwgNDcsIDI0NywgMzksIDQ2LCA0NywgMjQ2LCAyMzEsIDQ2LCA0NywgMjQ3LCAKLSAgICAxMDIsIDQ2LCA0NywgMjQ2LCAxMjksIDQ2LCA0NywgMjQ3LCAwLCA0NiwgNDcsIDI0NiwgMTkyLCA0NiwgNDcsIDI0NywgNjMsIAotICAgIDQ2LCA0NywgMjQ2LCAxNjAsIDQ2LCA0NywgMjQ3LCAzMSwgNDYsIDQ3LCAyNDYsIDIyMywgNDYsIDQ3LCAyNDcsIDk0LCA0NiwgCi0gICAgNDcsIDI0NiwgMTQ0LCA0NiwgNDcsIDI0NywgMTUsIDQ2LCA0NywgMjQ2LCAyMDcsIDQ2LCA0NywgMjQ3LCA3OCwgNDYsIDQ3LCAKLSAgICAyNDYsIDE3NSwgNDYsIDQ3LCAyNDcsIDQ2LCA0NiwgNDcsIDI0NiwgMjM4LCA0NiwgNDcsIDI0NywgMTA5LCA0NiwgNDcsIAotICAgIDI0NiwgMTIwLCA0NiwgNDcsIDI0NiwgMjQ3LCA0NiwgNDcsIDI0NiwgMTgzLCA0NiwgNDcsIDI0NywgNTQsIDQ2LCA0NywgCi0gICAgMjQ2LCAxNTEsIDQ2LCA0NywgMjQ3LCAyMiwgNDYsIDQ3LCAyNDYsIDIxNCwgNDYsIDQ3LCAyNDcsIDg1LCA0NiwgNDcsIAotICAgIDI0NiwgMTM1LCA0NiwgNDcsIDI0NywgNiwgNDYsIDQ3LCAyNDYsIDE5OCwgNDYsIDQ3LCAyNDcsIDY5LCA0NiwgNDcsIDI0NiwgCi0gICAgMTY2LCA0NiwgNDcsIDI0NywgMzcsIDQ2LCA0NywgMjQ2LCAyMjksIDQ2LCA0NywgMjQ3LCAxMDAsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMjcsIDQ2LCA0NywgMjQ2LCAyNTQsIDQ2LCA0NywgMjQ2LCAxOTAsIDQ2LCA0NywgMjQ3LCA2MSwgNDYsIDQ3LCAyNDYsIAotICAgIDE1OCwgNDYsIDQ3LCAyNDcsIDI5LCA0NiwgNDcsIDI0NiwgMjIxLCA0NiwgNDcsIDI0NywgOTIsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNDIsIDQ2LCA0NywgMjQ3LCAxMywgNDYsIDQ3LCAyNDYsIDIwNSwgNDYsIDQ3LCAyNDcsIDc2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTczLCA0NiwgNDcsIDI0NywgNDQsIDQ2LCA0NywgMjQ2LCAyMzYsIDQ2LCA0NywgMjQ3LCAxMDcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMjMsIDQ2LCA0NywgMjQ2LCAyNTAsIDQ2LCA0NywgMjQ2LCAxODYsIDQ2LCA0NywgMjQ3LCA1NywgNDYsIDQ3LCAyNDYsIAotICAgIDE1NCwgNDYsIDQ3LCAyNDcsIDI1LCA0NiwgNDcsIDI0NiwgMjE3LCA0NiwgNDcsIDI0NywgODgsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMzgsIDQ2LCA0NywgMjQ3LCA5LCA0NiwgNDcsIDI0NiwgMjAxLCA0NiwgNDcsIDI0NywgNzIsIDQ2LCA0NywgMjQ2LCAxNjksIAotICAgIDQ2LCA0NywgMjQ3LCA0MCwgNDYsIDQ3LCAyNDYsIDIzMiwgNDYsIDQ3LCAyNDcsIDEwMywgNDYsIDQ3LCAyNDYsIDEzMCwgCi0gICAgNDYsIDQ3LCAyNDcsIDEsIDQ2LCA0NywgMjQ2LCAxOTMsIDQ2LCA0NywgMjQ3LCA2NCwgNDYsIDQ3LCAyNDYsIDE2MSwgNDYsIAotICAgIDQ3LCAyNDcsIDMyLCA0NiwgNDcsIDI0NiwgMjI0LCA0NiwgNDcsIDI0NywgOTUsIDQ2LCA0NywgMjQ2LCAxNDUsIDQ2LCA0NywgCi0gICAgMjQ3LCAxNiwgNDYsIDQ3LCAyNDYsIDIwOCwgNDYsIDQ3LCAyNDcsIDc5LCA0NiwgNDcsIDI0NiwgMTc2LCA0NiwgNDcsIAotICAgIDI0NywgNDcsIDQ2LCA0NywgMjQ2LCAyMzksIDQ2LCA0NywgMjQ3LCAxMTAsIDk3LCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCAKLSAgICA5NywgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCA1MiwgODAsIDIsIAotICAgIDY3LCA5MSwgNDMsIDQ0LCA1MiwgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyNDMsIDI0MywgMTMwLCAxNDAsIAotICAgIDUyLCA4MCwgMjQzLCAyNDMsIDEzMCwgOTcsIDUyLCA4MCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyLCAyMDMsIAotICAgIDkxLCAyMTQsIDE1MywgODAsIDIsIDIwMywgOTEsIDIxNCwgMTUzLCAyMTUsIDIxMSwgNzQsIDI0NiwgMTA0LCAyMTUsIDIxMSwgCi0gICAgNzQsIDE0MCwgNTIsIDI0OCwgMTU3LCA3NCwgOTcsIDUyLCAyNDgsIDE1NywgNzQsIDE0MCwgMjE1LCAyMTEsIDI0OCwgMTU3LCAKLSAgICA3NCwgOTcsIDIxNSwgMjExLCAyNDgsIDE1NywgNzQsIDk3LCAyMTUsIDU4LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCA5NywgCi0gICAgODAsIDIsIDI0NiwgMTE4LCAyMTgsIDEzOSwgMjE0LCAxNTMsIDgwLCAyMTYsIDQyLCAxMzAsIDI0NiwgMTA0LCA4MCwgMjE2LCAKLSAgICA0MiwgMTMwLCA5NywgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIAotICAgIDkxLCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzcsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCAKLSAgICA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjUzLCAyNTEsIDk3LCAyNTMsIDI1MSwgCi0gICAgMTQwLCA1MiwgMjUzLCAyNTEsIDk3LCA1MiwgMjUzLCAyNTEsIDE0MCwgODAsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgOTcsIAotICAgIDgwLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDE0MCwgODAsIDI0MywgMjQzLCAyNTIsIDE0MSwgMjE2LCA0MiwgODUsIDI0NywgCi0gICAgMjQ4LCA5NywgODAsIDI0MywgMjQzLCAyNTIsIDE0MSwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCAyMjgsIDU2LCAyMTIsIDksIAotICAgIDIyLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCAyMiwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgCi0gICAgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDU2LCAyNDUsIDIyMCwgODAsIDIsIDEwMywgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDgwLCAyLCAxMDMsIDIxOSwgMjgsIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMjIsIAotICAgIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyMiwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAKLSAgICAyMTksIDI4LCAyNDUsIDIyMCwgODAsIDIyLCAyMTksIDI4LCAyMTIsIDksIDc0LCAyMTksIDI4LCAyMTIsIDksIDgwLCAyMiwgCi0gICAgMjI4LCA1NiwgMjEyLCA5LCA3NCwgMjIyLCAyMjgsIDI0NywgMjU1LCAyNDksIDEyNSwgMjQ0LCAxNzUsIDI0NywgMjU0LCAKLSAgICAyNDQsIDE3NSwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMjIsIDIyOCwgMjQ3LCAyNTQsIDIxOSwgMjgsIDI0NSwgMjIwLCA4MCwgCi0gICAgMjQ5LCAxMjUsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyNDksIDEyNSwgMjE5LCAKLSAgICAyOCwgMjQ1LCAyMjAsIDc0LCAyNDQsIDE3NSwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIAotICAgIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIAotICAgIDgwLCAyNDksIDEyNSwgMjI4LCA1NiwgMjEyLCA5LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMjQ5LCAxMjUsIDIyOCwgCi0gICAgNTYsIDI0NSwgMjIwLCA3NCwgMjEyLCAzNiwgODAsIDIyNSwgNywgMjQ3LCAxOTUsIDIyMiwgMjUxLCA4MCwgMjI1LCA3LCAKLSAgICA5NywgMjE2LCAxODgsIDI0OSwgOTAsIDIxNCwgMTUyLCA4MCwgMjI1LCA3LCA5NywgMjE2LCAxODgsIDI0OSwgOTAsIDI0NiwgCi0gICAgMTAzLCA4MCwgMjI1LCA3LCAyNDYsIDEwNCwgMjE2LCAxODgsIDI0OSwgOTAsIDIzMywgMzcsIDgwLCAyMjUsIDcsIDI0NiwgCi0gICAgMTA0LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjIyLCAyNDEsIDIyMiwgMjQ0LCAyNTQsIDI2LCAyNTAsIDIsIDc0LCAyMzMsIDQwLCAKLSAgICAyNTQsIDI2LCAyNTQsIDg4LCA3NCwgMjE2LCAxNCwgMjU0LCAyNiwgMjU0LCA4OCwgNzQsIDI1MSwgMTc1LCAyNTQsIDI2LCAKLSAgICAyNTQsIDg4LCA3NCwgMjE2LCAxNCwgMjU0LCAyNiwgMjUwLCAyLCA4MCwgMiwgMjMwLCAxODEsIDIxNiwgMTQsIDI1NCwgMjYsIAotICAgIDI1NCwgODgsIDgwLCAyLCAyMjUsIDIyLCAyMzIsIDEwOCwgNDQsIDIyMCwgMTUyLCAyNTAsIDIsIDc0LCAyMzIsIDEwOCwgCi0gICAgNDMsIDIyMCwgMTUyLCAyNTQsIDg4LCA3NCwgMjU0LCA4OCwgMjUwLCAwLCAyNTAsIDM2LCA3NCwgMjUwLCAyLCAyNTAsIDAsIAotICAgIDI1MCwgMzYsIDc0LCA5NywgODAsIDc3LCAyMTksIDI1MSwgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIDIxOSwgMjUxLCA5NywgCi0gICAgNzQsIDIxOSwgMjUxLCA5NywgODAsIDc3LCAxNDAsIDc0LCA5NywgODAsIDIsIDk2LCA1MSwgMTQwLCA4MCwgMiwgOTYsIDUxLCAKLSAgICA5NywgODAsIDIxNiwgMTM5LCAyMTEsIDE3OCwgNDMsIDQ0LCA4MCwgMjE2LCAxMzksIDQsIDI1MCwgMzUsIDIxNCwgMTUzLCAKLSAgICAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDQsIDI1MCwgMzUsIDQzLCAyNTIsIDEzOSwgMTIwLCA0NCwgMjUyLCAxMzksIDEyNCwgCi0gICAgMjQxLCAyNTQsIDQzLCAyNTIsIDEzOSwgMTI0LCA0NCwgMjUyLCAxMzksIDEyMCwgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIAotICAgIDQ0LCAxMjQsIDI1MiwgMTM5LCA0MywgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIDQzLCAxMjQsIDI1MiwgMTM5LCA0NCwgCi0gICAgMjQxLCAyNTQsIDQzLCAyNTIsIDEzOSwgMTIwLCA0NCwgMjUyLCAxMzksIDEyMCwgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIAotICAgIDQ0LCAxMjQsIDI1MiwgMTM5LCA0NCwgMjQxLCAyNTQsIDQzLCAyNTIsIDEzOSwgMTI0LCA0NCwgMjUyLCAxMzksIDEyNCwgCi0gICAgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIDQzLCAxMjQsIDI1MiwgMTM5LCA0MywgMjQxLCAyNTQsIDE0MCwgMjQxLCAyNTUsIAotICAgIDIsIDI1MiwgMTM5LCAxMjAsIDIxNiwgNDIsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyMTYsIDQyLCAKLSAgICAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQ0LCAyMTYsIDQyLCAxMzAsIDI0NiwgMTA0LCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDQ0LCAyMTYsIDQyLCAxMzAsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDIxNiwgCi0gICAgNDIsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyMTYsIDQyLCAxMzAsIDIxNCwgMTUzLCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyMTYsIDQyLCAxMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAKLSAgICAyMTYsIDQyLCAxMzAsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDI0MywgMjQzLCAxMzAsIDk3LCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgCi0gICAgNDQsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQ0LCAyNDMsIDI0MywgMTMwLCAKLSAgICAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNDMsIDI0MywgMTMwLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAxMjQsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNDMsIDI0MywgCi0gICAgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjQzLCAyNDMsIDEzMCwgMTQwLCAyNDEsIDI1NSwgCi0gICAgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIDEwNiwgMjE0LCAxNTMsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI1MiwgMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgCi0gICAgMjUxLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIAotICAgIDEwNiwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI1MiwgMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIyMiwgMjUxLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjE0LCAxNjMsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDc3LCA5NywgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyNDYsIDEwNiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIxNCwgMTYzLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjQ2LCAxMDYsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxOTksIDI0OCwgMTU2LCAKLSAgICAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNTIsIDQzLCAxOTksIDI0OCwgMTU2LCA5NywgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAxMjAsIDc3LCAxOTksIDI0OCwgMTU2LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDI1MiwgCi0gICAgNDMsIDE5OSwgMjQ4LCAxNTYsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyNDYsIAotICAgIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI1MSwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgCi0gICAgNDMsIDI1MiwgMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjUxLCA0NCwgNTIsIDgwLCAyLCAKLSAgICAyMjIsIDE4MywgMjQxLCAyMzUsIDI0NSwgOTgsIDUsIDc3LCA5NywgNzQsIDIxNiwgODksIDIyNiwgMTY4LCA3NywgOTcsIAotICAgIDc0LCAxNDAsIDgwLCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCA4MCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA5NywgCi0gICAgODAsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIzMywgMTUsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCAyMTYsIDEzOSwgMjMzLCAKLSAgICAxNCwgMjQyLCAxMzAsIDc3LCA5NywgNzQsIDIxOCwgNjQsIDc3LCA5NywgNzQsIDE0MCwgODAsIDIxNiwgMTM5LCAyMTgsIAotICAgIDYzLCAyMTgsIDIyLCA3NywgMTQwLCA3NCwgNDMsIDI0NCwgOTEsIDIxNywgNzcsIDQ0LCAyNDQsIDkxLCAyMTcsIDc3LCAKLSAgICAxMjAsIDI0NCwgOTEsIDIxNywgNzcsIDEyNCwgMjQ0LCA5MSwgMjE3LCA3NywgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgCi0gICAgMjQ4LCA2MCwgMjEwLCAxNjAsIDE4NywgMjE4LCAyNDIsIDIxMCwgMTYwLCAxODcsIDIxNSwgNDksIDI0OSwgMjI2LCA0MywgCi0gICAgNzEsIDI0OSwgOTksIDEyNywgNDQsIDcxLCAyNDksIDk5LCAxMjcsIDQzLCA3MSwgMjI2LCAzLCA0NCwgNzEsIDIyNiwgMywgCi0gICAgMjEwLCAxNjAsIDE4NywgNDMsIDIzNiwgMTUsIDEyNywgMjEwLCAxNjAsIDE4NywgNDQsIDIzNiwgMTUsIDEyNywgMjEwLCAKLSAgICAxNjAsIDE4NywgNDMsIDI1MSwgMjQyLCAxMjcsIDIxMCwgMTYwLCAxODcsIDQ0LCAyNTEsIDI0MiwgMTI3LCA0MywgNDIsIAotICAgIDI1MSwgMTU4LCAyLCAyMTQsIDE4MywgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE0LCAxODMsIDQzLCA0MiwgMjUxLCAxNTgsIAotICAgIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDIxNiwgMTQsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgCi0gICAgMjM2LCAwLCAyNTEsIDE3NSwgMjQ5LCAxNjAsIDQzLCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDI1MSwgCi0gICAgMTc1LCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIDIzNiwgMCwgMjE2LCAxNCwgMjQ5LCAxNjAsIAotICAgIDQzLCAyNTQsIDExMCwgMjUxLCAxNTgsIDIsIDI0NywgMTIwLCA0NCwgMjU0LCAxMTAsIDI1MSwgMTU4LCAyLCAyNDcsIDEyMCwgCi0gICAgNDMsIDI1NCwgMjYsIDIzMywgMTUsIDEyNywgNDQsIDI1NCwgMjYsIDI0MiwgMTMwLCAxMjcsIDUyLCA0MywgMjU0LCAyNiwgCi0gICAgMjQyLCAxMzAsIDEyNywgNTIsIDQ0LCAyNTQsIDI2LCAyMzMsIDE1LCAxMjcsIDQzLCA4NSwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQ0LCA4NSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDI0NiwgMTE4LCAyNDQsIDEzNSwgNjcsIDIxMCwgMzUsIDIzMiwgCi0gICAgMjEzLCAyMzEsIDg4LCAyNTQsIDExMCwgMjI2LCAxNzAsIDIzMywgNDYsIDQ0LCAyNTQsIDExMCwgMjE0LCAxMiwgMiwgMjE4LCAKLSAgICAyMzQsIDIzMSwgODgsIDQ0LCAyNTQsIDExMCwgMiwgMjQ3LCAxMjAsIDI1NCwgMTEwLCAyLCAyMjIsIDkyLCAyMzUsIDIxNSwgCi0gICAgMjU1LCAzLCAyNTQsIDEwOSwgMjE4LCAyNTUsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjMzLCA0NiwgMjE4LCAyNTUsIDI1NCwgCi0gICAgMTEwLCAyMjYsIDE3MCwgMjE0LCAxNjMsIDIxNSwgOTQsIDI1NCwgMTA5LCAyMjMsIDQ5LCAyNTQsIDEwOSwgMjU0LCAxMTAsIAotICAgIDIsIDIxNCwgMTgzLCAyMjMsIDQ5LCAyNTQsIDExMCwgMiwgMjE0LCAxODMsIDIyNiwgMjQ4LCAyNTQsIDExMCwgMjI2LCAKLSAgICAxNzAsIDIxNCwgMTYzLCAyMjYsIDI0OCwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyNDYsIDEwNiwgMjMxLCA4OCwgMjU0LCAxMTAsIAotICAgIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjAsIDIyLCAyMjIsIDI1MSwgMjMxLCA4OCwgCi0gICAgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjAsIDIyLCAyMzMsIDQ2LCAKLSAgICAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDEyNCwgMjIsIAotICAgIDIyMiwgMjUxLCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIAotICAgIDcsIDEyNCwgMjIsIDIzMywgNDYsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgCi0gICAgODAsIDIyNSwgNywgNDQsIDIyLCAyMTQsIDE2MywgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIAotICAgIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0MywgMjIsIDIxNCwgMTYzLCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAKLSAgICAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQ0LCAyMiwgMjQ2LCAxMDYsIDIzMSwgODgsIDI1NCwgCi0gICAgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDMsIDIyLCAyNDYsIDEwNiwgMjIzLCAKLSAgICA0OSwgMjQ1LCAxNTIsIDIyMCwgMTI3LCAyNDUsIDE1MiwgMjIwLCAxMjgsIDIsIDIyNiwgMTIzLCAyNDUsIDE1MiwgMjIwLCAKLSAgICAxMjgsIDIsIDQsIDI1MCwgMzYsIDQ4LCAyNDUsIDE1MiwgMjIwLCAxMjgsIDIsIDQ0LCA4MCwgNDgsIDI0NSwgMTUyLCAyMjAsIAotICAgIDEyOCwgMiwgNDMsIDgwLCA0OCwgMjUwLCAzNiwgMiwgMjAzLCAxMzAsIDM3LCA2NywgMTMwLCAzNywgMjI2LCA3LCAzNywgCi0gICAgMjIzLCA1MCwgMjE5LCA0NiwgMzcsIDIyNSwgMTcxLCAyNTAsIDM2LCAyNDcsIDE3MywgMjUxLCA3OCwgMjAzLCAyNTIsIAotICAgIDE0MSwgMjIsIDIxNiwgMTQsIDE2MywgMjQ3LCAxNzMsIDI1MSwgNzgsIDY3LCAxMzAsIDI1MCwgMzYsIDIsIDIxOCwgMjQsIAotICAgIDIxMSwgMTc4LCAzNywgMjU0LCA4NywgMjQ3LCAxNjksIDUwLCAxMjAsIDgwLCAyMTYsIDEzOSwgMjUwLCAzNSwgMzcsIDcxLCAKLSAgICAyNTEsIDExMywgMzcsIDI1MSwgMTEzLCAzNywgMjMzLCAxNCwgMzcsIDI0MiwgMTI5LCAyNTAsIDM2LCAyLCA0LCAyNTAsIAotICAgIDM2LCAyMTYsIDQyLCAyMTYsIDE5NiwgMjIyLCAyNTEsIDI1MCwgMzYsIDIsIDExMywgMjAzLCAyMTgsIDkxLCAyMTYsIDQyLCAKLSAgICAyMTYsIDE5NiwgMjIyLCAyNTEsIDkyLCAyMjIsIDIyOCwgMjQ3LCAyNTUsIDIxOSwgOTUsIDkyLCAyNDQsIDE3NSwgMjQ3LCAKLSAgICAyNTUsIDIxOSwgOTUsIDkyLCAyNTMsIDIxNiwgOTIsIDQsIDI1MCwgMzUsIDkyLCAyMTgsIDIzNCwgMTEzLCAyMzUsIDY1LCAKLSAgICAyMTgsIDIzMiwgMjE1LCAyMjYsIDIsIDU5LCA0OCwgMjE1LCAyMjYsIDIsIDIxNCwgMTgzLCAyMjIsIDkyLCAyMzYsIDAsIAotICAgIDIxNSwgMjI1LCAyMTUsIDIyNiwgMiwgMjIwLCAxMzQsIDI1MywgMjA3LCAyNTEsIDE3NCwgNDQsIDIxNSwgMjI2LCA3NywgCi0gICAgNDMsIDIxNSwgMjI1LCA0MywgMjE1LCAyMjYsIDI1MiwgMzAsIDY3LCAxMzAsIDY3LCAyNTIsIDE0MSwgMjUyLCAzMCwgNDQsIAotICAgIDIxNSwgMjI1LCAyNTEsIDE2NSwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI1MSwgMTY1LCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgCi0gICAgODUsIDI1MSwgMTY0LCAzMCwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDMwLCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgNzEsIAotICAgIDI0MCwgMjM2LCA4NSwgMjQwLCAyMzYsIDQzLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDQ0LCAyMTEsIDI0NCwgMjQ0LCAxMzUsIAotICAgIDQzLCA1MiwgMjExLCAyNDQsIDI0NCwgMTM1LCA0NCwgNTIsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgMjM1LCAyNDgsIDIzNSwgCi0gICAgMjM0LCAyMTYsIDExMiwgMTE3LCAyMzUsIDIzNCwgMjM1LCAyMzUsIDIyOSwgMTAyLCAyLCA2NywgMTMwLCAyNDYsIDExMiwgCi0gICAgMjMwLCA4NywgNDIsIDIsIDI0OSwgMTgxLCAyMjYsIDEyNywgMjM1LCAyNDYsIDI1MywgMjM3LCAyMTksIDIxOSwgMjI0LCAKLSAgICAxODAsIDI0NSwgOTgsIDUsIDIyLCAyMTksIDk3LCAyMjYsIDcsIDI0NSwgOTgsIDUsIDIyLCAyMTksIDk3LCAyMjYsIDgsIDIsIAotICAgIDIxNiwgODksIDQ4LCAyNDAsIDEwNCwgMjE2LCA0MiwgMjIsIDIxOSwgOTcsIDIyNiwgNywgMjQyLCAxODMsIDIxOCwgMTU1LCAKLSAgICAyMTYsIDE4NSwgMjQ2LCAxMDUsIDIxNSwgMjI2LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjQ2LCAxMDUsIDIxNSwgMjI2LCAKLSAgICAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgODUsIDI0NywgMjQ5LCAyLCAxMjQsIDc0LCA4NSwgMjMyLCAxMDQsIDcxLCAyNTAsIAotICAgIDM2LCAyLCAxMjQsIDc0LCA4NSwgMjUwLCAzNiwgMiwgMTI0LCA3NCwgMjQ1LCA4NSwgNzEsIDIxOCwgMjM0LCAyNDUsIDg1LCAKLSAgICA4NSwgMjE4LCAyMzQsIDI0NSwgODUsIDcxLCAyNDcsIDI0OCwgMjQ1LCA4NSwgODUsIDI0NywgMjQ4LCAyNDUsIDg1LCA3MSwgCi0gICAgMjUwLCAzNSwgMjQ1LCA4NSwgODUsIDI1MCwgMzUsIDIyMiwgMTMyLCAyMjMsIDUwLCAyMTksIDQ3LCAyMjYsIDE2NywgMjE5LCAKLSAgICA0NywgMiwgMjI2LCAxMjMsIDIyMywgNTAsIDIxOSwgNDcsIDIsIDIwMywgOTEsIDI1MSwgMjQ5LCAyMTksIDQ2LCAyNTEsIAotICAgIDI0OSwgMjIzLCA1MCwgMjE5LCA0NiwgNTIsIDIyNSwgMjIsIDIxNSwgMjExLCAyMjUsIDIyLCAyMzMsIDQyLCAyNDksIDkxLCAKLSAgICAyNTQsIDExMCwgMTI3LCAyMjIsIDI0NywgMjQ5LCA5MSwgMjU0LCAxMTAsIDEyNywgMjE2LCA3OCwgMjMwLCAxNzksIDIzMCwgCi0gICAgMjQsIDM3LCA1OSwgMjI2LCAxNjcsIDIzMCwgMjQsIDM3LCA5NiwgMjI2LCAxNjcsIDIzMCwgMjQsIDM3LCAzMCwgMjI2LCAKLSAgICAxNjcsIDIzMCwgMjQsIDIxNCwgMTc2LCAyMjYsIDE2OCwgMiwgMjQ3LCAxMjAsIDIzMCwgMjQsIDIxNCwgMTc2LCAyMjYsIAotICAgIDE2OCwgMiwgMjI1LCAyMiwgMjMwLCAyNCwgNDIsIDIzNSwgMTk5LCAyMjYsIDE2NywgMjMwLCAyNCwgNDIsIDIxNCwgMTc2LCAKLSAgICAyMjYsIDE2NywgMTEzLCAyMzIsIDE0NiwgMjIsIDIyNiwgMTY3LCAxMTMsIDIzMiwgMTQ2LCAxNzcsIDIyNiwgMTY3LCAyMzAsIAotICAgIDI0LCAzMCwgMjI2LCAxNjcsIDIzMCwgMTU0LCAxMTMsIDIxOCwgNDMsIDIxOCwgNDEsIDIsIDIzNSwgMjExLCAyMjQsIDI0LCAKLSAgICAyMzUsIDIxMiwgMjI2LCAxNjcsIDI0NCwgOTksIDIyNSwgMjU1LCAyMzUsIDIxMSwgMjM1LCAyMTIsIDIsIDUyLCA5MSwgCi0gICAgMjM1LCAyMTIsIDI1MywgMTczLCAyLCAyMTksIDk1LCAyNTAsIDMyLCAyNDMsIDIyNiwgMjU0LCA4OCwgMjM1LCAyMDksIAotICAgIDIzMiwgMjE0LCAyMzUsIDIxMCwgMiwgMjIzLCAxMTUsIDIyNSwgMjM3LCAyNTQsIDIsIDIyNSwgMSwgMjMyLCAyMTQsIDIzNSwgCi0gICAgMjEwLCAyLCAyMjAsIDE1MiwgMjI1LCAyMzcsIDI1NCwgMiwgMjI1LCAxLCAyMzIsIDIxNCwgMjM1LCAyMTAsIDIyOCwgNTIsIAotICAgIDIzNSwgMjUwLCAyMTYsIDE5NiwgMjI1LCAxLCAyMzUsIDIxMiwgMjU0LCAyLCAxMTUsIDIyNSwgMTEsIDIyNiwgMTY3LCAKLSAgICAyMjQsIDE4LCAyMzUsIDIxMiwgMjI2LCAxNjcsIDIzNSwgMjEyLCAyLCAxNDAsIDgwLCAyLCAxMDMsIDIzNSwgMjEyLCAyLCAKLSAgICAzMCwgNTAsIDIzNSwgMjEyLCAyLCAyMzUsIDE5OCwgMjM1LCAyMTIsIDIsIDIxNCwgMTc1LCAyMzUsIDIxMiwgMiwgMjI2LCAKLSAgICAxMjMsIDIzNSwgMjEyLCAyLCAyMTQsIDE4MywgMjM1LCA2NiwgMjMzLCA4NSwgNDMsIDIxNSwgMjI2LCAyMjYsIDE2NywgCi0gICAgMjEwLCAxNjAsIDE4NywgMjIxLCAyMDEsIDI0OSwgMjA5LCAyMTAsIDE2MCwgMTg3LCAyMjEsIDIwMSwgMjI1LCA1NiwgMjEwLCAKLSAgICAxNjAsIDE4NywgMjIxLCAyMDEsIDIyNCwgMTc2LCA5NiwgNSwgMiwgNCwgMjUwLCAzNiwgNDgsIDk2LCA1LCAyLCAyNTAsIAotICAgIDMxLCAyNTUsIDE1LCA0OCwgOTYsIDUsIDIsIDIxNiwgODksIDQ4LCA5NiwgNSwgMiwgNTksIDUxLCA5NiwgNSwgMiwgMjE2LCAKLSAgICA4OSwgNTEsIDk2LCA1LCAyLCAyMTgsIDY1LCAxMDUsIDk2LCA1LCAyLCA4NSwgMjE1LCAyMjUsIDIzMCwgMTgyLCA1LCAyLCAKLSAgICAyNDksIDIyMCwgNDgsIDIzMCwgMTgyLCA1LCAyLCA1OSwgNTEsIDIzMCwgMTgyLCA1LCAyLCAyNDQsIDE3NSwgMjQ3LCAxMTgsIAotICAgIDIzMCwgMTgyLCA1LCAyLCAyMjIsIDIyOCwgMjQ3LCAxMTgsIDk2LCA1LCAyMzYsIDAsIDQzLCAxNjMsIDI1MCwgMzUsIDk2LCAKLSAgICA1LCAyMzYsIDAsIDQ0LCAxNjMsIDI1MCwgMzUsIDIxMywgMjU0LCAxNzcsIDI0OSwgMTMxLCAyMjQsIDE4MCwgMjMwLCA4NCwgCi0gICAgNSwgMiwgNTksIDQ4LCAyMzAsIDg0LCA1LCAyLCAyMTQsIDE4MywgMjIwLCAxNDksIDIyNCwgMTgxLCAyLCAyNTEsIDE3NSwgCi0gICAgMjQ5LCAyNTUsIDIxOSwgNzcsIDIyNCwgMTgwLCAyMzAsIDg0LCA1LCAyMzYsIDAsIDQzLCAxNjMsIDI1MCwgMzUsIDIzMCwgCi0gICAgODQsIDUsIDIzNiwgMCwgNDQsIDE2MywgMjUwLCAzNSwgMzcsIDIzMCwgODQsIDUsIDIsIDI1MCwgMzEsIDI1NSwgMTQsIAotICAgIDIzMCwgODQsIDUsIDIzNiwgMCwgNTIsIDI1MCwgMzUsIDM3LCAyNDcsIDE2OSwgNTAsIDk2LCA1LCAyMzYsIDAsIDIxNSwgCi0gICAgMjI1LCAyMzAsIDE4MiwgNSwgMjM2LCAwLCAyMTUsIDIyNSwgMjMwLCA4NCwgNSwgMjM2LCAwLCAyMTUsIDIyNSwgMjM1LCAKLSAgICAyMDYsIDIyNCwgMTgwLCAyMjIsIDI0MiwgMjM1LCAyMDYsIDIyNCwgMTgwLCAyMTAsIDE2MCwgMTg3LCAyMjMsIDkwLCAyNDksIAotICAgIDIwOSwgMjU0LCAxMzQsIDE3NywgMjQ5LCAxNjUsIDIzNSwgMTk5LCAyLCAyNDcsIDEyMCwgMjE0LCAxNzYsIDIsIDIzMCwgCi0gICAgMTgyLCA1MCwgMjE0LCAxNzYsIDIsIDIyNiwgMTIzLCAyMzUsIDE5OSwgMiwgMjI2LCAxMjMsIDIzNSwgMTk5LCAyLCAyMzIsIAotICAgIDE0NiwgMjU0LCAxMTgsIDIxNCwgMTc2LCAyLCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIxNCwgMTc2LCA3NywgMjM1LCAxOTgsIAotICAgIDIzNSwgMTk5LCA3NywgMjE0LCAxNzUsIDIxNCwgMTc2LCA3NywgMjUyLCAxNDEsIDc3LCAyMzUsIDE5OCwgMjM1LCAxOTksIAotICAgIDc3LCAyNTIsIDE0MSwgNzcsIDIxNCwgMTc1LCAyMTQsIDE3NiwgMjUyLCAzMCwgMjIsIDIzNSwgNjUsIDIsIDIxNCwgMTc1LCAKLSAgICAyMzUsIDE5OSwgMjUyLCAzMCwgMjIsIDIzNSwgNjUsIDIsIDIzNSwgMTk4LCAyNTAsIDAsIDIxNCwgMTc2LCAyLCAyMjAsIAotICAgIDEzMywgMjUwLCAwLCAyMzUsIDE5OSwgMiwgMjIwLCAxMzMsIDUyLCA0MiwgMjM1LCAxOTgsIDUyLCA0MiwgMjE0LCAxNzUsIAotICAgIDI1MCwgMCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM0LCAyMiwgMjE5LCA3NywgMjI0LCAxODAsIDIzMiwgMTQ2LCAyMiwgMiwgCi0gICAgNTksIDQ4LCAyMzIsIDE0NiwgMTc3LCAyLCA1OSwgNDgsIDUyLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDUyLCAyMzIsIDE0NiwgCi0gICAgMjI2LCAxNTgsIDExMywgMjM1LCAyMDAsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMTEzLCAyMzUsIDIwMCwgMjMyLCAxNDYsIAotICAgIDIyNiwgMTU4LCAyMTksIDg1LCAyMzMsIDg1LCAyMjYsIDE1OCwgMjE5LCA4NSwgMjMzLCA4NSwgMjU0LCAxMTgsIDIzMiwgCi0gICAgMTQ2LCAxNzcsIDIyNiwgMTIxLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDIzMiwgMTQ2LCAyMiwgMiwgMjMwLCAyMjQsIDIxOCwgCi0gICAgMTM5LCAyMzIsIDE0NiwgMTc3LCAyLCAyMzAsIDIyNCwgMjE4LCAxMzksIDIzMiwgMTQ2LCAyMiwgMiwgMjAzLCAyNDgsIAotICAgIDE1NiwgMjMyLCAxNDYsIDE3NywgMiwgMjAzLCAyNDgsIDE1NiwgMjMyLCAxNDYsIDIyLCAyLCA1MiwgMjI2LCAxMjMsIDIzMiwgCi0gICAgMTQ2LCAyMiwgMiwgMjE0LCAxODMsIDIzMiwgMTQ2LCAyMiwgMiwgNTIsIDIxNCwgMTgzLCA0LCAyMTMsIDI1MSwgMiwgMjE0LCAKLSAgICAxODMsIDIzMiwgMTQ2LCAxNzcsIDIsIDUyLCAyMjYsIDEyMywgMjMyLCAxNDYsIDE3NywgMiwgNTIsIDIxNCwgMTgzLCAyMTAsIAotICAgIDE2MCwgMTg3LCAyNDcsIDEyOSwgMjU0LCA3OSwgMjEwLCAxNjAsIDE4NywgMjIzLCAxNDgsIDI1NCwgNzksIDI0NSwgOTgsIAotICAgIDUsIDIsIDU5LCA1MSwgMjQwLCAxMDQsIDIsIDU5LCA0OCwgMjE1LCAyMTEsIDIwMywgMjUyLCAxNDEsIDIsIDUyLCA2NywgCi0gICAgOTEsIDIxNSwgMjExLCAyMDMsIDI1MiwgMTQxLCAyLCAyMTUsIDIxMSwgNjcsIDkxLCAyMTYsIDg5LCAyMjYsIDE2OCwgMiwgCi0gICAgNTksIDQ4LCAyMTYsIDg5LCAyMjYsIDE2OCwgMiwgMjIyLCAyMjgsIDI0NywgMTE4LCAyMTksIDE2MiwgMjMwLCAxODIsIAotICAgIDIxOSwgMTYxLCAyNDksIDE5OSwgMiwgNTksIDQ4LCAyNDUsIDk4LCAyLCAyNTMsIDIxNiwgMjU0LCAxNDgsIDEyOCwgMjE2LCAKLSAgICA0MiwgMiwgMjUwLCAzMSwgMjU1LCAxNCwgMjU0LCA0OCwgMTI4LCAxNzcsIDEyOCwgMTExLCAyNDUsIDk4LCA1LCA3NywgOTYsIAotICAgIDUwLCA5NiwgNSwgNzcsIDI0NSwgOTgsIDUwLCAyNDUsIDk4LCA1LCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDUyLCAyNDksIAotICAgIDIyNywgMjQ1LCA5OSwgMTEzLCAyNDksIDE5NCwgMjQ1LCA5OCwgMjE5LCAxNzYsIDEzNCwgMjQ5LCAxOTQsIDI0NSwgOTgsIAotICAgIDIxOSwgMTc2LCAyNDUsIDk4LCA1LCAyLCAxMTMsIDE3MCwgNzcsIDIyLCAxMTMsIDE3MCwgNTEsIDI0NSwgOTQsIDIsIDI0NCwgCi0gICAgMTEsIDE3MCwgNDgsIDIzMywgMTUsIDIsIDI1MCwgMzYsIDIzNSwgMjE1LCAyNDIsIDEzMCwgMiwgMjUwLCAzNiwgMjM1LCAKLSAgICAyMTUsIDIzMywgMTUsIDIsIDIyNCwgMTMsIDE2NCwgNDgsIDI0MiwgMTMwLCAyLCAyMjQsIDEzLCAxNjQsIDQ4LCAyMzMsIAotICAgIDE1LCAxNzcsIDIxOSwgOTcsIDEyOCwgMTExLCAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDExMSwgMjMzLCAxNSwgCi0gICAgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCAyMzUsIDIxNSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAKLSAgICAyMTYsIDQyLCAyLCA1OSwgMjM1LCAyMTUsIDIzMywgMTUsIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNDgsIAotICAgIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMzMsIDE1LCAxNzcsIDIxOSwgOTcsIAotICAgIDEyOCwgMjE2LCA0MiwgMiwgNTksIDc3LCAyMjIsIDI1MSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAKLSAgICAyLCA1OSwgNzcsIDIzMywgNDYsIDIzMywgMTUsIDE3NywgMjU0LCA0OSwgMjQyLCAxMzAsIDE3NywgMjU0LCA0OSwgMjMzLCAKLSAgICAxNSwgMjIsIDIxOSwgMTUzLCAyMjgsIDUyLCAxMjgsIDExMSwgMjQyLCAxMzAsIDIyLCAyMTksIDE1MywgMjI4LCA1MiwgCi0gICAgMTI4LCAxMTEsIDIzMywgMTUsIDIyLCAyMjgsIDUyLCAyNTQsIDQ5LCAyNDIsIDEzMCwgMjIsIDIyOCwgNTIsIDI1NCwgNDksIAotICAgIDIzMywgMTUsIDc3LCAyNDYsIDExMSwgMTI4LCA3NywgMjQyLCAxMjksIDI0MiwgMTMwLCA3NywgMjQ2LCAxMTEsIDEyOCwgCi0gICAgNzcsIDIzMywgMTQsIDIzMywgMTUsIDc3LCAyMTksIDE2MiwgMTc3LCAyNDUsIDk5LCAyNDIsIDEzMCwgNzcsIDIxOSwgMTYyLCAKLSAgICAxNzcsIDI0NSwgOTksIDIzMywgMTUsIDc3LCAyMTksIDE2MiwgNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgNzcsIDIxOSwgCi0gICAgMTYyLCA3NywgMjMzLCAxNCwgMjMzLCAxNSwgNzcsIDI0MiwgMTMwLCA3NywgMjQ2LCAxMTEsIDI0NSwgOTksIDI0MiwgMTMwLCAKLSAgICA3NywgMjMzLCAxNSwgNzcsIDI0NiwgMTExLCAyNDUsIDk5LCAyMzMsIDE1LCA3NywgMjE5LCA5NywgMTI4LCA3NywgMjQyLCAKLSAgICAxMzAsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyNDIsIDEzMCwgNzcsIDIxOSwgOTcsIDEyOCwgNzcsIDIzMywgMTUsIDc3LCAKLSAgICAyMTksIDk3LCAyNDUsIDk5LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjE5LCA5NywgMTI4LCAyMTYsIAotICAgIDQyLCAxNzcsIDI0MiwgMTI5LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNSwgMiwgNTksIDIzNSwgMjE1LCAKLSAgICAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMzAsIDIsIDU5LCAyMzUsIDIxNSwgMjQ2LCAxMTEsIDEyOCwgCi0gICAgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyNDYsIDExMSwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAyNDYsIDExMSwgCi0gICAgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDI0NiwgMTExLCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIAotICAgIDE3NywgMjQyLCAxMjksIDIxOSwgMTYyLCAxNzcsIDIzMywgMTQsIDIxOSwgMTYyLCAxNzcsIDI0MiwgMTI5LCAyMTksIDE2MiwgCi0gICAgNzcsIDIzMywgMTUsIDc3LCAyNDUsIDk4LCA1MCwgMjE5LCAxNjIsIDc3LCAyNDIsIDEzMCwgNzcsIDI0NSwgOTgsIDUwLCAKLSAgICA1MiwgMjI5LCA5MSwgMjMzLCAxNCwgNTIsIDIyOSwgOTEsIDI0MiwgMTI5LCA1MiwgMjI5LCA5MSwgMjMzLCAxNSwgMiwgCi0gICAgMjE0LCAxODMsIDI0MiwgMTMwLCAyMjYsIDEyMSwgMjMzLCAxNCwgMjQyLCAxMzAsIDI1MiwgMzAsIDIzMywgMTQsIDIzMywgCi0gICAgMTUsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MiwgMjQyLCAxMzAsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MiwgMjMzLCAKLSAgICAxNSwgMjUwLCAwLCAyNTEsIDc4LCAyNDksIDkzLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDI1MCwgMCwgCi0gICAgMjUxLCA3OCwgMjQ5LCA5MywgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDIxOSwgNzgsIDIxNiwgMjAwLCAyMzMsIDgzLCAyMTYsIAotICAgIDIwMCwgMjE5LCA3OCwgMjE2LCAyMDEsIDE3NywgMTI4LCAxMTEsIDIzMywgODMsIDIxNiwgMjAxLCAxNzcsIDEyOCwgMTExLCAKLSAgICAyNDUsIDk4LCA1LCAyLCAyNTEsIDEwOCwgNDgsIDIyNCwgMjAzLCA3NywgMjE5LCAxNTMsIDI0NSwgOTgsIDUwLCAyMTgsIAotICAgIDU2LCA3NywgMjE5LCAxNTMsIDI0NSwgOTgsIDUwLCAyMjQsIDIwMywgNzcsIDIxOSwgMTUzLCAyMjgsIDUyLCAxMjgsIDExMSwgCi0gICAgMjE4LCA1NiwgNzcsIDIxOSwgMTUzLCAyMjgsIDUyLCAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyNDUsIDk4LCA1MCwgMjE4LCAKLSAgICA1NiwgNzcsIDI0NSwgOTgsIDUwLCAyMjQsIDIwMywgNzcsIDIyOCwgNTIsIDEyOCwgMTExLCAyMTgsIDU2LCA3NywgMjI4LCAKLSAgICA1MiwgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTgsIDU2LCA3NywgMjU0LCAxNDgsIAotICAgIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDIyOCwgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDIyOCwgCi0gICAgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgNTIsIDIyNCwgMjAyLCA1MiwgMjE4LCA1NSwgMjE4LCA2NCwgMiwgMjQ3LCAxMjAsIAotICAgIDIxOCwgMjIsIDIsIDI0NywgMTIwLCAyMTgsIDY0LCAyLCA5NiwgNSwgNTEsIDIxOCwgMjIsIDIsIDk2LCA1LCA1MSwgMjE4LCAKLSAgICA2NCwgMiwgMjMwLCA4NCwgNSwgNTEsIDIxOCwgMjIsIDIsIDIzMCwgODQsIDUsIDUxLCAyMTgsIDY0LCA2NCwgMTc3LCAxMjgsIAotICAgIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjE4LCAyMiwgNjQsIDE3NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNDgsIDIxOCwgNjQsIAotICAgIDY0LCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgMjIsIDY0LCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgNjQsIDY0LCA3NywgMjE2LCAKLSAgICA4OSwgMjI2LCAxNjcsIDIxOCwgMjIsIDY0LCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDIxOCwgNjQsIDY0LCA3NywgMjU0LCAKLSAgICAxNDgsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA2NCwgNjQsIDc3LCAyMjgsIAotICAgIDUyLCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDc3LCAyMjgsIDUyLCAxMjgsIDExMSwgNDIsIDQzLCAyMDQsIDkzLCAyMjYsIAotICAgIDE2NywgNDIsIDQ0LCAyMDQsIDkzLCAyMjYsIDE2NywgMjUwLCAwLCAyMTgsIDYzLCAyNTAsIDAsIDIxOCwgMjEsIDI1MCwgMCwgCi0gICAgMjE4LCA2NCwgMTc3LCAxMjgsIDExMSwgMjUwLCAwLCAyMTgsIDIyLCAxNzcsIDEyOCwgMTExLCAyMTgsIDY0LCA3NywgMjE4LCAKLSAgICAyMSwgMjE4LCAyMiwgNzcsIDIxOCwgNjMsIDIxOCwgNjQsIDc3LCAyMTgsIDYzLCAyMTgsIDIyLCA3NywgMjE4LCAyMSwgCi0gICAgMjE4LCAyMiwgMjUyLCAzMCwgMjE4LCA2MywgMjE4LCAyMiwgMjUyLCAzMCwgMjIsIDIzNSwgNjUsIDI1MSwgNzgsIDI0OCwgCi0gICAgMTU3LCAyLCAyMTgsIDYzLCAyNDUsIDE3MCwgNjQsIDIyNiwgMTcwLCAyNDYsIDEwMywgMjI1LCA0OCwgMiwgMjE3LCAxMiwgCi0gICAgMjE2LCAxMywgMjE1LCAyNDAsIDIzNSwgMTk4LCAyNDQsIDIxLCAyMjgsIDY1LCAyMTksIDI1MSwgNDMsIDIxNywgODcsIAotICAgIDIxOSwgMjUxLCAxMjQsIDIxNywgODcsIDIxOSwgMjUxLCAxMjAsIDIxNywgODcsIDIyNSwgMTcyLCAyLCAyMjIsIDkxLCA2NywgCi0gICAgMjUyLCAxNDEsIDIxNSwgMjExLCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNDMsIDIxNSwgOTMsIDY3LCAyNTIsIAotICAgIDE0MSwgNTIsIDQzLCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDMsIDIxNSwgOTMsIDE5OSwgMjQ4LCAxNTcsIAotICAgIDI0MywgMjQzLCA0MywgMjMxLCA2MywgNjQsIDUyLCAyMTMsIDIzOSwgMjE5LCAyNTEsIDEyNCwgMjE3LCA4OCwgMiwgMjI2LCAKLSAgICAxMjMsIDIxOSwgMjUxLCAxMjAsIDIxNywgODgsIDIsIDIxNCwgMTgzLCAyMTksIDI1MSwgMTIwLCAyMTcsIDg4LCA3NywgCi0gICAgMjE5LCAyNTEsIDEyNCwgMjE3LCA4NywgNTIsIDEyNCwgMjE3LCA4NywgNTIsIDEyMCwgMjE3LCA4NywgNTIsIDIxOCwgMTAzLCAKLSAgICAyMjgsIDUyLCA1MCwgMjIzLCA0OSwgNTIsIDIxOCwgMTAzLCAyMjgsIDUyLCA1MCwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0NywgCi0gICAgMTc1LCAyLCAyMjMsIDQ5LCAyMjksIDEwMSwgMjE5LCA5NSwgNjcsIDIzMiwgMjE0LCAyLCAyNTAsIDM2LCA0OCwgNjcsIAotICAgIDIzMiwgMjE0LCAyLCAyNTAsIDM2LCA1MSwgMTI0LCAyMTcsIDg4LCAyLCAyNTAsIDM2LCA1MSwgMjI2LCA4LCAyLCAyMDMsIAotICAgIDkxLCAyMjYsIDgsIDIsIDIxNiwgODksIDIyNiwgMTY3LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAyNTEsIDI0NCwgMjIzLCAKLSAgICA5MSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgMiwgMjAzLCA5MSwgMjE1LCAyMTEsIDI0OSwgMjI3LCAyMjYsIDE2NywgCi0gICAgMjE1LCAyMTEsIDIyOSwgOTEsIDIzMywgMTQsIDIxNSwgMjExLCAyMjksIDkxLCAyNDIsIDEyOSwgMjQ2LCAxMTEsIDIxOSwgCi0gICAgOTcsIDIzMywgMTUsIDE3NywgMTI4LCAxMTEsIDI0NiwgMTExLCAyMTksIDk3LCAyNDIsIDEzMCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjE1LCAyMTEsIDIxOSwgNDcsIDI1MSwgMjQ0LCAyMjMsIDkxLCAyMzMsIDg1LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAKLSAgICAyMjYsIDE2NywgNTIsIDIxOSwgNDcsIDIyNiwgMTY3LCA3MSwgNjcsIDEzMCwgMjMwLCAyNCwgNzEsIDY3LCAxMzAsIDIyOCwgCi0gICAgNTYsIDI0NSwgMjIwLCA3MSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgNzEsIDc0LCAyMTksIDI4LCAyNDUsIDIyMCwgNzEsIDc0LCAKLSAgICAyMTksIDI4LCAyMTIsIDksIDcxLCA3NCwgNDMsIDQ0LCA3MSwgNzQsIDE0MCwgODUsIDc0LCAyMTQsIDE1MywgODUsIDc0LCAKLSAgICAyNDYsIDEwNCwgODUsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgODUsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDg1LCA3NCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDg1LCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA4NSwgNzQsIDQzLCA0NCwgODUsIDc0LCAxMjAsIAotICAgIDEyNCwgODUsIDc0LCA5NywgODAsIDIsIDIxNiwgNzcsIDI0NiwgMTAzLCA5NywgODAsIDIsIDIxNiwgNzcsIDIxNCwgMTUyLCAKLSAgICAxNDAsIDgwLCAyLCAyMTYsIDc3LCAyNDYsIDEwMywgMTQwLCA4MCwgMiwgMjE2LCA3NywgMjE0LCAxNTIsIDQyLCAyLCAyMTYsIAotICAgIDE0LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjUxLCAxNzUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDI0NywgMjU1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjMyLCAxMDgsIDQzLCAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgCi0gICAgMjQ3LCAyNDksIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDI0NywgMjQ5LCAKLSAgICAyLCAyMTYsIDE0LCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgMiwgMjUxLCAxNzUsIDE2MywgMjUxLCAyMjEsIDI0NiwgCi0gICAgMTE4LCAyMTgsIDIzNCwgODUsIDIzMywgODUsIDIxOCwgMjM0LCA3MSwgMjMzLCA4NSwgMjE4LCAyMzQsIDg1LCAyMTMsIAotICAgIDE4NywgNCwgMjE4LCAyMzQsIDcxLCAyMTMsIDE4NywgNCwgMjE4LCAyMzQsIDg1LCAyMjUsIDE5MCwgNzEsIDIyNSwgMTkwLCAKLSAgICA3MSwgMjQxLCAxOTMsIDg1LCAyNDEsIDE5MywgMjAzLCA4NSwgMjQxLCAxOTMsIDg1LCAyMzMsIDg1LCAyNTAsIDM1LCA4NSwgCi0gICAgMjMxLCA4MiwgMjQ3LCAyNDgsIDcxLCAyMzEsIDgyLCAyNDcsIDI0OCwgODUsIDIzMSwgODIsIDIzMiwgMTA0LCA3MSwgMjMxLCAKLSAgICA4MiwgMjMyLCAxMDQsIDg1LCA0LCAyNDcsIDI0OCwgODUsIDQsIDIzMiwgMTA0LCA3MSwgNCwgMjMyLCAxMDQsIDg1LCAyMDMsIAotICAgIDI0NSwgMTY0LCA3MSwgMjAzLCAyNDUsIDE2NCwgODUsIDY3LCAyNDUsIDE2NCwgNzEsIDY3LCAyNDUsIDE2NCwgNDMsIDgwLCAKLSAgICAyLCA0LCAyNTAsIDM1LCAxMzQsIDE0MCwgMjUzLCAyNDcsIDQzLCA4MCwgMiwgMzcsIDIyNSwgMjIsIDE5OSwgMTQwLCAyMTgsIAotICAgIDIzMCwgNzQsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgCi0gICAgMTQwLCAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTQwLCAyMTUsIDU4LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCAKLSAgICAxNDAsIDgwLCAyLCAyNDYsIDExOCwgMjE4LCAxMzksIDE0MCwgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgMTQwLCA4MCwgCi0gICAgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3NywgMTQwLCAyMTUsIDU4LCAKLSAgICA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAKLSAgICAxNDAsIDgwLCAyMTYsIDEzOSwgMjExLCAxNzgsIDIxMiwgMzYsIDgwLCAyMjUsIDcsIDI0NywgMTk1LCAyMzMsIDQ2LCAyNDUsIAotICAgIDk4LCA1LCA3NywgMTQwLCA3NCwgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAxNjgsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgCi0gICAgMjIzLCA1MCwgMjU0LCAxNDgsIDEyOCwgMTExLCA5NywgODAsIDIxNiwgMTM5LCAyNDIsIDEyOSwgOTcsIDgwLCAyMTYsIAotICAgIDEzOSwgMjE4LCAyMSwgMTQwLCAyMjQsIDI0LCA3NCwgOTcsIDIyNCwgMjQsIDc0LCAyMjMsIDUwLCAyMTYsIDg5LCAyMjYsIAotICAgIDE2OCwgNzcsIDk3LCA3NCwgOTcsIDgwLCA3NywgMjIzLCA1MCwgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTYsIDg5LCAyMjYsIAotICAgIDE2OCwgNzcsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDE0MCwgODAsIDc3LCAyMjMsIDUwLCAKLSAgICAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIDgwLCA3NywgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAxNjcsIDcxLCAyMzEsIDgyLCAKLSAgICAyMTgsIDE1NiwgODUsIDQsIDIxOCwgMTU2LCA3MSwgNCwgMjE4LCAxNTYsIDg1LCAyMjIsIDI0NywgMjI1LCAxOTAsIDcxLCAKLSAgICAyMjIsIDI0NywgMjI1LCAxOTAsIDExNCwgMjMzLCA4NSwgMjUwLCAzNSwgMTE0LCAyMjYsIDEyNCwgMiwgMjI2LCAxMjQsIAotICAgIDIzNSwgMjE1LCAxMTQsIDI1MCwgMzYsIDIsIDI1MCwgMzYsIDIzNSwgMjE1LCAxMTQsIDI1MCwgMzUsIDExNCwgMzcsIDIyMSwgCi0gICAgMjU0LCAxNDUsIDYsIDEsIDI1MywgMTU5LCAxNDUsIDYsIDEsIDI1MSwgMTE3LCAxNDUsIDYsIDEsIDIxMywgMjUzLCAxNDUsIAotICAgIDYsIDEsIDI0MiwgMTg1LCAxNDUsIDYsIDEsIDI0NywgMTQwLCAxNDUsIDYsIDEsIDIxMSwgMjEsIDE0NSwgNiwgMSwgMjEwLCAKLSAgICA2OCwgMTQ1LCA2LCAxLCAyNDYsIDM0LCAxNDUsIDYsIDEsIDIxMCwgOTEsIDE0NSwgNiwgMSwgMjM1LCAxNDgsIDE0NSwgNiwgCi0gICAgMSwgNjUsIDIzNSwgMTQ4LCAxNDUsIDYsIDEsIDczLCAxNDUsIDYsIDEsIDI0NywgMTYwLCAxNDUsIDYsIDEsIDIzNCwgMjQwLCAKLSAgICAxNDUsIDYsIDEsIDIzMiwgMTg2LCAxNDUsIDYsIDEsIDIzMCwgMjksIDE0NSwgNiwgMSwgMjI5LCAxOTEsIDE0NSwgNiwgMSwgCi0gICAgMjI2LCAxODUsIDE0NSwgNiwgMSwgMjI1LCA0LCAxNDUsIDYsIDEsIDIyMiwgMjI3LCAxNDUsIDYsIDEsIDIxOSwgODMsIAotICAgIDE0NSwgNiwgMSwgMjE1LCA4MSwgMTQ1LCA2LCAxLCAyMTQsIDIwMSwgMTQ1LCA2LCAxLCAyNDMsIDI0NiwgMTQ1LCA2LCAxLCAKLSAgICAyNDEsIDE5OSwgMTQ1LCA2LCAxLCAyMjYsIDEzNSwgMTQ1LCA2LCAxLCAyMjUsIDIyMSwgMTQ1LCA2LCAxLCAyMTksIDIyOCwgCi0gICAgMTQ1LCA2LCAxLCAyMTUsIDE2NywgMTQ1LCA2LCAxLCAyNTAsIDc1LCAxNDUsIDYsIDEsIDIyMCwgMTAyLCAxNDUsIDYsIDEsIAotICAgIDIxMSwgMjcsIDE0NSwgNiwgMSwgMjExLCAyOSwgMTQ1LCA2LCAxLCAyMTEsIDU3LCAxNDUsIDYsIDEsIDIxOCwgMjUzLCAKLSAgICAxNjIsIDE0NSwgNiwgMSwgMjEwLCAyMTIsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODQsIAotICAgIDIsIDIxNywgNzcsIDE0NSwgNiwgMSwgMjEwLCAyNDQsIDE0NSwgNiwgMSwgMjM1LCAxODQsIDQsIDIxMCwgMTgzLCAxNDUsIAotICAgIDYsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyMzUsIDE4NCwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIAotICAgIDYsIDEsIDI0NCwgODIsIDE0NSwgNiwgMSwgMjM1LCAxNDYsIDE0NSwgNiwgMSwgMjE5LCAyMjcsIDE0NSwgNiwgMSwgMjE1LCAKLSAgICAyMDIsIDYxLCAxNDUsIDYsIDEsIDIzMywgNzUsIDIzMCwgMjksIDE0NSwgNCwgMSwgMjUzLCAxNTksIDE0NSwgNCwgMSwgCi0gICAgMjUxLCAxMTcsIDE0NSwgNCwgMSwgMjEzLCAyNTMsIDE0NSwgNCwgMSwgMjQyLCAxODUsIDE0NSwgNCwgMSwgMjQ3LCAxNDAsIAotICAgIDE0NSwgNCwgMSwgMjExLCAyMSwgMTQ1LCA0LCAxLCAyMTAsIDY4LCAxNDUsIDQsIDEsIDI0NiwgMzQsIDE0NSwgNCwgMSwgCi0gICAgMjEwLCA5MSwgMTQ1LCA0LCAxLCAyMzUsIDE0OCwgMTQ1LCA0LCAxLCA2NSwgMjM1LCAxNDgsIDE0NSwgNCwgMSwgNzMsIAotICAgIDE0NSwgNCwgMSwgMjQ3LCAxNjAsIDE0NSwgNCwgMSwgMjM0LCAyNDAsIDE0NSwgNCwgMSwgMjMyLCAxODYsIDE0NSwgNCwgMSwgCi0gICAgMjMwLCAyOSwgMTQ1LCA0LCAxLCAyMjksIDE5MSwgMTQ1LCA0LCAxLCAyMjYsIDE4NSwgMTQ1LCA0LCAxLCAyMjUsIDQsIAotICAgIDE0NSwgNCwgMSwgMjIyLCAyMjcsIDE0NSwgNCwgMSwgMjE5LCA4MywgMTQ1LCA0LCAxLCAyMTUsIDgxLCAxNDUsIDQsIDEsIAotICAgIDIxNCwgMjAxLCAxNDUsIDQsIDEsIDI0MywgMjQ2LCAxNDUsIDQsIDEsIDI0MSwgMTk5LCAxNDUsIDQsIDEsIDIyNiwgMTM1LCAKLSAgICAxNDUsIDQsIDEsIDIyNSwgMjIxLCAxNDUsIDQsIDEsIDIxOSwgMjI4LCAxNDUsIDQsIDEsIDIxNSwgMTY3LCAxNDUsIDQsIDEsIAotICAgIDI1MCwgNzUsIDE0NSwgNCwgMSwgMjIwLCAxMDIsIDE0NSwgNCwgMSwgMjExLCAyNywgMTQ1LCA0LCAxLCAyMTEsIDI5LCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgNTcsIDE0NSwgNCwgMSwgMjE4LCAyNTMsIDE2MiwgMTQ1LCA0LCAxLCAyMTAsIDIxMiwgMTQ1LCAKLSAgICA0LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCA0LCAyMTAsIDE4NCwgMiwgMjE3LCA3NywgMTQ1LCA0LCAxLCAyMTAsIAotICAgIDI0NCwgMTQ1LCA0LCAxLCAyMzUsIDE4NCwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjUxLCAyNDksIDIxMCwgMTgzLCAKLSAgICAxNDUsIDQsIDEsIDIzNSwgMTg0LCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjQ0LCA4MiwgMTQ1LCA0LCAxLCAKLSAgICAyMzUsIDE0NiwgMTQ1LCA0LCAxLCAyMTksIDIyNywgMTQ1LCA0LCAxLCAyMTUsIDIwMiwgNjEsIDE0NSwgNCwgMSwgMjMzLCAKLSAgICA3NSwgMjMwLCAyOSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDUyLCAxMzAsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCA1MiwgCi0gICAgMTMwLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDkxLCA3LCA2LCAKLSAgICAxLCAyMjMsIDIyNCwgMiwgMjE3LCA3NywgNywgNCwgMSwgMTE1LCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0NywgCi0gICAgMjU1LCA5MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjQ4LCAzOSwgNywgCi0gICAgNiwgMSwgMjM1LCAyNCwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjEwLCAKLSAgICAxNjAsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDM5LCA3LCA2LCAxLCAyNTQsIDE0MywgNywgNiwgCi0gICAgMSwgMjMyLCA1MCwgMiwgMTAzLCA3LCA2LCAxLCAyMTUsIDk0LCA2MSwgNywgNiwgMSwgMjE1LCA5NCwgMjU0LCAxNDMsIDcsIAotICAgIDQsIDEsIDIxNCwgMTA2LCAyLCA0NCwgMTAzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxMDMsIDcsIDQsIDEsIDIxMiwgOTksIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDI0OSwgMTAwLCA3LCA2LCAxLCAxNjMsIDI0MiwgNjAsIDcsIDQsIDEsIAotICAgIDE2MywgMjQyLCA2MCwgNywgNCwgMSwgMjE3LCA3NSwgMjI1LCAxMzMsIDcsIDQsIDEsIDE2MCwgMiwgMjI4LCA1MCwgNywgNCwgCi0gICAgMSwgMjE1LCA5NCwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDE0NCwgMiwgMTIxLCAyMjIsIDIzNCwgMjM1LCAKLSAgICAyMTUsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDc1LCA3LCAyMTgsIDY1LCA0LCAxLCAyMzUsIDE0NCwgNTgsIDEsIDYsIDIxNCwgCi0gICAgMTA1LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyMTcsIDI1MCwgMjE3LCA3NywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIxNywgCi0gICAgMjUwLCAyMTcsIDc3LCA4MSwgNiwgMSwgMjU0LCAxNjQsIDgxLCA0LCAxLCAyNTQsIDE2NCwgODEsIDYsIDEsIDIxMywgMTczLCAKLSAgICA4MSwgNCwgMSwgMjEzLCAxNzMsIDgxLCA2LCAxLCAyNDMsIDEwNywgODEsIDQsIDEsIDI0MywgMTA3LCA4MSwgNiwgMSwgCi0gICAgMjQ4LCAxOTEsIDgxLCA0LCAxLCAyNDgsIDE5MSwgODEsIDYsIDEsIDI0NSwgMTk0LCA4MSwgNCwgMSwgMjQ1LCAxOTQsIDgxLCAKLSAgICA2LCAxLCAyMTksIDMzLCA4MSwgNCwgMSwgMjE5LCAzMywgODEsIDYsIDEsIDIxMCwgMTAxLCA4MSwgNCwgMSwgMjEwLCAxMDEsIAotICAgIDgxLCA2LCAxLCAyNDEsIDI0OCwgODEsIDQsIDEsIDI0MSwgMjQ4LCA4MSwgNiwgMSwgMjE2LCAxNzcsIDgxLCA0LCAxLCAKLSAgICAyMTYsIDE3NywgODEsIDYsIDEsIDI0MCwgMTE2LCA4MSwgNCwgMSwgMjQwLCAxMTYsIDgxLCA2LCAxLCAyMzQsIDIyNywgODEsIAotICAgIDQsIDEsIDIzNCwgMjI3LCA4MSwgNiwgMSwgMjMzLCA3MiwgODEsIDQsIDEsIDIzMywgNzIsIDgxLCA2LCAxLCAyMzAsIDIzMCwgCi0gICAgODEsIDQsIDEsIDIzMCwgMjMwLCA4MSwgNiwgMSwgMjI4LCAyMzMsIDgxLCA0LCAxLCAyMjgsIDIzMywgODEsIDYsIDEsIAotICAgIDIzMywgMjMzLCA4MSwgNCwgMSwgMjMzLCAyMzMsIDgxLCA2LCAxLCA3NiwgODEsIDQsIDEsIDc2LCA4MSwgNiwgMSwgMjI1LCAKLSAgICAxMDgsIDgxLCA0LCAxLCAyMjUsIDEwOCwgODEsIDYsIDEsIDIyMiwgMjExLCA4MSwgNCwgMSwgMjIyLCAyMTEsIDgxLCA2LCAKLSAgICAxLCAyMTksIDE2NSwgODEsIDQsIDEsIDIxOSwgMTY1LCA4MSwgNiwgMSwgMjE3LCA0MSwgODEsIDQsIDEsIDIxNywgNDEsIAotICAgIDgxLCA2LCAxLCAyMTQsIDIyOSwgODEsIDQsIDEsIDIxNCwgMjI5LCA4MSwgNiwgMSwgMjQ0LCAxMjEsIDgxLCA0LCAxLCAKLSAgICAyNDQsIDEyMSwgODEsIDYsIDEsIDIzNCwgMTEyLCA4MSwgNCwgMSwgMjM0LCAxMTIsIDgxLCA2LCAxLCAyMjQsIDE2MSwgODEsIAotICAgIDQsIDEsIDIyNCwgMTYxLCA4MSwgNiwgMSwgMjI2LCAxNzgsIDgxLCA0LCAxLCAyMjYsIDE3OCwgODEsIDYsIDEsIDI0NywgCi0gICAgMjUzLCAyNTQsIDE3MCwgODEsIDQsIDEsIDI0NywgMjUzLCAyNTQsIDE3MCwgODEsIDYsIDEsIDU1LCA4MSwgMjU0LCAxOTYsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI1NCwgMTk2LCA4MSwgNiwgMSwgMjQ5LCAxMTUsIDI0NSwgMTk0LCA4MSwgNCwgMSwgMjQ5LCAKLSAgICAxMTUsIDI0NSwgMTk0LCA4MSwgNiwgMSwgMjQ3LCAyNTMsIDIzNCwgMjI3LCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDIzNCwgCi0gICAgMjI3LCA4MSwgNiwgMSwgMjQ3LCAyNTMsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDIyOCwgMjMzLCA4MSwgNiwgCi0gICAgMSwgMjQ5LCAxMTUsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDIyOCwgMjMzLCA4MSwgNiwgMSwgNTUsIDgxLCAKLSAgICAyMjYsIDE3OCwgODEsIDQsIDEsIDU1LCA4MSwgMjI2LCAxNzgsIDgxLCA2LCAxLCAyMjEsIDI0NiwgODEsIDQsIDEsIDIyMSwgCi0gICAgMjQ2LCA4MSwgNiwgMSwgMjQ5LCAxMjgsIDIyMCwgNTUsIDgxLCA0LCAxLCAyNDksIDEyOCwgMjIwLCA1NSwgODEsIDYsIDEsIAotICAgIDU1LCA4MSwgMjIwLCA1NSwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCA1NSwgODEsIDYsIDEsIDU1LCA4MSwgMjQ1LCA3NSwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMjQ1LCA3NSwgODEsIDYsIDEsIDI1NCwgMTgyLCAyMzQsIDExNywgODEsIDQsIDEsIDI1NCwgCi0gICAgMTgyLCAyMzQsIDExNywgODEsIDYsIDEsIDI0NywgMjUzLCAyNDEsIDQ1LCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDI0MSwgNDUsIAotICAgIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgNDUsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgNDUsIDgxLCA2LCAxLCA1NSwgODEsIAotICAgIDE2MiwgODEsIDQsIDEsIDU1LCA4MSwgMTYyLCA4MSwgNiwgMSwgMjMzLCAxNDgsIDE2MiwgODEsIDQsIDEsIDIzMywgMTQ4LCAKLSAgICAxNjIsIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgMjE3LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDIxNywgODEsIDYsIDEsIAotICAgIDU1LCA4MSwgMjQxLCAyNTEsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgMjUxLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDMsIDEwMiwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMjQzLCAxMDIsIDgxLCA2LCAxLCA1NSwgODEsIDI0NywgMTYzLCA4MSwgNCwgMSwgNTUsIDgxLCAKLSAgICAyNDcsIDE2MywgODEsIDYsIDEsIDU1LCA4MSwgMjIwLCAyMiwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCAyMiwgODEsIDYsIDEsIAotICAgIDU1LCAyMjcsIDIwOCwgMjIwLCAyMiwgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjIwLCAyMiwgODEsIDYsIDEsIDU1LCAKLSAgICAyMjcsIDIwOCwgMjI5LCAyNywgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjI5LCAyNywgODEsIDYsIDEsIDU1LCAyMjcsIAotICAgIDIwOCwgMjI3LCAxNDgsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyNywgMTQ4LCA4MSwgNiwgMSwgNTUsIDIyNywgMjA4LCAKLSAgICAyMTIsIDM3LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMTIsIDM3LCA4MSwgMTYsIDIzNCwgMjQ2LCA4MSwgMTYsIDIzMCwgCi0gICAgMjMxLCAyMjIsIDIxMSwgODEsIDE2LCAyMjUsIDEwOSwgMjIyLCAyMTEsIDgxLCAxNiwgMjE4LCAxNDcsIDgxLCAxNiwgMjE3LCAKLSAgICA0MiwgMjIyLCAyMTEsIDgxLCAxNiwgMjM0LCAxMTMsIDIyMiwgMjExLCA4MSwgMTYsIDIyMCwgMjMsIDIxOSwgMTY1LCA4MSwgCi0gICAgNiwgMSwgMjQ5LCAxMTUsIDIyMCwgNTUsIDgxLCA0LCAxLCAyNDksIDExNSwgMjIwLCA1NSwgODEsIDYsIDEsIDI0OSwgMTE1LCAKLSAgICAyNDMsIDEwMiwgODEsIDQsIDEsIDI0OSwgMTE1LCAyNDMsIDEwMiwgODEsIDM4LCAyMjgsIDIzNCwgNDgsIDgxLCAzOCwgCi0gICAgMjE4LCAyNDcsIDI1MywgMjI0LCA4MSwgMzgsIDIxOCwgMjQ3LCAyMzMsIDIxLCA4MSwgNiwgMSwgMjUxLCAxOTksIDIzNCwgCi0gICAgMTE3LCA4MSwgNCwgMSwgMjUxLCAxOTksIDIzNCwgMTE3LCA4MSwgNTUsIDIyNywgMjA4LCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDgxLCA1NSwgMjI3LCAyMDgsIDI0NywgMTk3LCAyMjQsIDEzLCA3OCwgODEsIDU1LCAyMjcsIDIwOCwgMjM1LCAyMzcsIDIyNCwgCi0gICAgMTMsIDc4LCA4MSwgNTUsIDIyNywgMjA4LCAyMTMsIDI0MSwgMjQ3LCAxNzIsIDgxLCAyNDQsIDIsIDEyMywgMjQyLCAyNywgCi0gICAgODEsIDI0MywgMjI5LCAyMTgsIDEyOSwgODEsIDIzMCwgMTI0LCAyNDcsIDE3MiwgOTgsIDQsIDEsIDI1NCwgMTIzLCA5OCwgCi0gICAgNCwgMSwgMjUyLCAxNTIsIDk4LCA0LCAxLCAyNDMsIDEwNiwgOTgsIDQsIDEsIDI0NywgMTI4LCA5OCwgNCwgMSwgMjQ1LCAKLSAgICAxNTAsIDk4LCA0LCAxLCAyMTMsIDE2MCwgOTgsIDQsIDEsIDIxMCwgODksIDk4LCA0LCAxLCAyMTcsIDYwLCA5OCwgNCwgMSwgCi0gICAgMjM1LCAyNTUsIDk4LCA0LCAxLCAyMzQsIDIzNCwgOTgsIDQsIDEsIDIzMywgODEsIDk4LCA0LCAxLCAyMzEsIDE4NSwgOTgsIAotICAgIDQsIDEsIDIyOSwgMTk1LCA5OCwgNCwgMSwgMjI2LCAxOTYsIDk4LCA0LCAxLCAyMjYsIDE3LCA5OCwgNCwgMSwgMjEwLCA3OCwgCi0gICAgOTgsIDQsIDEsIDIyMywgMTcxLCA5OCwgNCwgMSwgMjIxLCAyNDMsIDk4LCA0LCAxLCAyMTcsIDUwLCA5OCwgNCwgMSwgMjE0LCAKLSAgICAxOTAsIDk4LCA0LCAxLCAyMjUsIDE0MCwgOTgsIDQsIDEsIDIzNCwgMTIxLCA5OCwgNCwgMSwgMjQyLCAyNDEsIDk4LCA0LCAKLSAgICAxLCAyMjQsIDczLCA5OCwgNCwgMSwgMjIwLCAyMCwgOTgsIDQsIDEsIDI1MCwgOTcsIDk4LCA0LCAxLCAyNTEsIDcsIDk4LCAKLSAgICA0LCAxLCAyMzUsIDEwMCwgOTgsIDQsIDEsIDI1MCwgNDAsIDk4LCA0LCAxLCAyNTAsIDE0MywgOTgsIDQsIDEsIDIxMSwgCi0gICAgMTYzLCA5OCwgNCwgMSwgMjM1LCAxMTEsIDk4LCA0LCAxLCAyNDIsIDQzLCA5OCwgNCwgMSwgMjQxLCAyMzgsIDk4LCA0LCAxLCAKLSAgICAyNDEsIDE3NSwgOTgsIDQsIDEsIDIxMiwgMjIsIDk4LCA0LCAxLCAyNDIsIDQsIDk4LCA0LCAxLCAyNDEsIDY1LCA5OCwgNCwgCi0gICAgMSwgMjEwLCAyNDYsIDk4LCA0LCAxLCAyNTQsIDIzMiwgMjE2LCAxMDgsIDEsIDE5MSwgMjE2LCAxMDgsIDEsIDIxMSwgOTksIAotICAgIDIxNiwgMTA4LCAxLCAyMTEsIDk4LCAyMTYsIDEwOCwgMSwgMjExLCA4OCwgMjE2LCAxMDgsIDEsIDIxMSwgODYsIDIxNiwgCi0gICAgMTA4LCAxLCAyNTIsIDMyLCAyNTUsIDE2LCAyMTEsIDgxLCAyMTYsIDEwOCwgMSwgMjExLCA4MSwgMjE2LCAxMDgsIDEsIAotICAgIDIxMSwgOTYsIDIxNiwgMTA4LCAxLCAyMTEsIDkzLCAyMTYsIDEwOCwgMSwgMjExLCA5NSwgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgOTQsIDIxNiwgMTA4LCAxLCAyMTEsIDEyLCAyMTYsIDEwOCwgMSwgMjExLCA5MCwgMjE2LCAxMDgsIDEsIDIxMSwgNzksIAotICAgIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA3OSwgMjE2LCAxMDgsIDEsIDIxMSwgNzYsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDg0LCAyMTYsIDEwOCwgMSwgMjUyLCAzMiwgMjU1LCAxNiwgMjExLCA4NCwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIAotICAgIDg0LCAyMTYsIDEwOCwgMSwgMjExLCA4MywgMjE2LCAxMDgsIDEsIDIxMSwgMTAzLCAyMTYsIDEwOCwgMSwgMjExLCA3NywgCi0gICAgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDc3LCAyMTYsIDEwOCwgMSwgMjExLCA2NiwgMjE2LCAxMDgsIDEsIDIxNSwgCi0gICAgMTE1LCAyMTEsIDY2LCAyMTYsIDEwOCwgMSwgMjExLCA4LCAyMTYsIDEwOCwgMSwgMjExLCA0OSwgMjE2LCAxMDgsIDEsIAotICAgIDI1NCwgMjA3LCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAyMTEsIDc1LCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA3NCwgMjE2LCAxMDgsIDEsIDIxMSwgNzEsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCAKLSAgICA4NSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDY5LCAyMTYsIDEwOCwgMSwgMjExLCA2NywgMjE2LCAxMDgsIDEsIAotICAgIDIxMCwgMjEyLCAyMTYsIDEwOCwgMSwgMjExLCA2NCwgMjE2LCAxMDgsIDEsIDIxMSwgNjMsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDg3LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgODcsIDIxNiwgMTA4LCAxLCAyNTMsIDE2MywgMjExLCA4NywgMjE2LCAKLSAgICAxMDgsIDEsIDIxMSwgNjIsIDIxNiwgMTA4LCAxLCAyMTEsIDYwLCAyMTYsIDEwOCwgMSwgMjExLCA2MSwgMjE2LCAxMDgsIDEsIAotICAgIDIxMSwgNTksIDIxNiwgMTA4LCAxLCAyMTEsIDU4LCAyMTYsIDEwOCwgMSwgMjExLCA5NywgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgNTYsIDIxNiwgMTA4LCAxLCAyMTEsIDU0LCAyMTYsIDEwOCwgMSwgMjExLCA1MywgMjE2LCAxMDgsIDEsIDIxMSwgNTIsIAotICAgIDIxNiwgMTA4LCAxLCAyMTEsIDUwLCAyMTYsIDEwOCwgMSwgMjE3LCAzNCwgMjExLCA1MCwgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgNDgsIDIxNiwgMTA4LCAxLCAyMTEsIDQ3LCAyMTYsIDEwOCwgMSwgMjEwLCAyNDQsIDIxNiwgMTA4LCA1OCwgMSwgMjMzLCAKLSAgICAxMjYsIDc4LCAyMTYsIDEwOCwgMjIwLCAxMzgsIDc4LCAyMTYsIDEwOCwgMTE2LCAyMzUsIDYzLCAyOSwgMywgMjMyLCAxNTUsIAotICAgIDI5LCAzLCAyMzAsIDE2MCwgMjksIDMsIDIyMiwgMjA5LCAyOSwgMywgMjE5LCA1NywgMjksIDMsIDIyMCwgNiwgMjksIDMsIAotICAgIDI1MSwgMjA0LCAyOSwgMywgMjE2LCA0MSwgMjksIDMsIDI0OSwgMjM3LCAyOSwgMywgMjI4LCA3MiwgMjksIDMsIDIyNywgCi0gICAgMTMzLCAyOSwgMywgMjQyLCAxODAsIDIyNywgMCwgMjksIDMsIDIxMCwgMjIsIDI5LCAzLCAyNDcsIDE0MywgMjksIDMsIAotICAgIDI0OCwgMTA0LCAyOSwgMywgMjM1LCA2NywgMjksIDMsIDIxNiwgMTU1LCAyOSwgMywgMjUwLCA4NSwgMjksIDMsIDIyNSwgCi0gICAgMTIwLCAyOSwgMywgMjI1LCAxNSwgMjksIDMsIDI0MiwgMjU1LCAyOSwgMywgMjQyLCAyNTEsIDI5LCAzLCAyNDIsIDI1MiwgCi0gICAgMjksIDMsIDI0MiwgMjUzLCAyOSwgMywgMjE4LCAyMjMsIDI5LCAzLCAyMTgsIDE3OSwgMjksIDMsIDIxOCwgMTkyLCAyOSwgCi0gICAgMywgMjE4LCAyMjIsIDI5LCAzLCAyMTgsIDE5NiwgMjksIDMsIDIxOCwgMTk3LCAyOSwgMywgMjE4LCAxODQsIDI5LCAzLCAKLSAgICAyNTAsIDIxMywgMjksIDMsIDI1MCwgMTkyLCAyOSwgMywgMjUwLCAxOTQsIDI5LCAzLCAyNTAsIDIxMiwgMjksIDMsIDI1MCwgCi0gICAgMjEwLCAyOSwgMywgMjUwLCAyMTEsIDI5LCAzLCAyNTAsIDE5MywgMjksIDMsIDIwOSwgMjQzLCAyOSwgMywgMjA5LCAyMjEsIAotICAgIDI5LCAzLCAyMDksIDIzNCwgMjksIDMsIDIwOSwgMjQyLCAyOSwgMywgMjA5LCAyMzcsIDI5LCAzLCAyMDksIDIzOCwgMjksIAotICAgIDMsIDIwOSwgMjI2LCAyOSwgMywgMjUwLCAyMDgsIDI5LCAzLCAyNTAsIDE5NSwgMjksIDMsIDI1MCwgMTk3LCAyOSwgMywgCi0gICAgMjUwLCAyMDcsIDI5LCAzLCAyNTAsIDIwNSwgMjksIDMsIDI1MCwgMjA2LCAyOSwgMywgMjUwLCAxOTYsIDI5LCAzLCAyMjMsIAotICAgIDIzNiwgMjksIDMsIDIyMywgMjI2LCAyOSwgMywgMjIzLCAyMzIsIDI5LCAzLCAyMjMsIDIzNSwgMjksIDMsIDIyMywgMjMzLCAKLSAgICAyOSwgMywgMjIzLCAyMzQsIDI5LCAzLCAyMjMsIDIzMSwgMjksIDMsIDIzMywgMTU5LCAyOSwgMywgMjMzLCAxNTEsIDI5LCAKLSAgICAzLCAyMzMsIDE1NCwgMjksIDMsIDIzMywgMTU4LCAyOSwgMywgMjMzLCAxNTUsIDI5LCAzLCAyMzMsIDE1NiwgMjksIDMsIAotICAgIDIzMywgMTUyLCAyOSwgMywgMjExLCAxMzAsIDI5LCAzLCAyMTEsIDEyMCwgMjksIDMsIDIxMSwgMTI2LCAyOSwgMywgMjExLCAKLSAgICAxMjksIDI5LCAzLCAyMTEsIDEyNywgMjksIDMsIDIxMSwgMTI4LCAyOSwgMywgMjExLCAxMjUsIDI5LCAzLCAyNDIsIDcxLCAKLSAgICAyOSwgMywgMjQyLCA2MiwgMjksIDMsIDI0MiwgNjUsIDI5LCAzLCAyNDIsIDcwLCAyOSwgMywgMjQyLCA2NywgMjksIDMsIAotICAgIDI0MiwgNjgsIDI5LCAzLCAyNDIsIDY0LCAzOCwgMzMsIDEsIDI1MiwgNzUsIDM4LCAzMywgMSwgMjEzLCAyNTUsIDM4LCAzMywgCi0gICAgMSwgMjQyLCAyMzYsIDM4LCAzMywgMSwgMjQ4LCA5MCwgMzgsIDMzLCAxLCAyMTAsIDc0LCAzOCwgMzMsIDEsIDIxMCwgOTQsIAotICAgIDM4LCAzMywgMSwgMTc2LCAzOCwgMzMsIDEsIDI0NSwgMTc0LCAzOCwgMzMsIDEsIDI0NSwgMTU5LCAzOCwgMzMsIDEsIDI0NSwgCi0gICAgMTUwLCAzOCwgMzMsIDEsIDc2LCAzOCwgMzMsIDEsIDIyNSwgMjIxLCAzOCwgMzMsIDEsIDI0NSwgOTIsIDM4LCAzMywgMSwgCi0gICAgMjQ1LCA4MiwgMzgsIDMzLCAxLCAyMTcsIDIyLCAzOCwgMzMsIDEsIDE2MiwgMzgsIDMzLCAxLCAyMTUsIDE3OCwgMzgsIDMzLCAKLSAgICAxLCAyNTAsIDEzMSwgMzgsIDMzLCAxLCAyMjAsIDEwMiwgMzgsIDMzLCAxLCAyMjAsIDY1LCAzOCwgMzMsIDEsIDI0NCwgODIsIAotICAgIDM4LCAzMywgMSwgMjQ1LCA4MSwgMzgsIDMzLCAxLCA2MSwgMzgsIDMzLCAxLCAyMzYsIDYwLCAzOCwgMzMsIDEsIDI0NywgCi0gICAgMTYxLCAzOCwgMzMsIDEsIDIzMCwgMTQwLCAyMTQsIDIwNSwgMzgsIDMzLCAxLCAyMTEsIDU5LCAzOCwgMzMsIDEsIDIxMCwgCi0gICAgMjEyLCAzOCwgMzMsIDEsIDIzNSwgMTgzLCA2MSwgMzgsIDMzLCAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDM4LCAzMywgMSwgCi0gICAgMjUxLCAyNDksIDIxMCwgMTgzLCAzOCwgMzMsIDEsIDIzNSwgMTgzLCAyNTEsIDI0OSwgMjEwLCAxODMsIDQ0LCAyNTQsIAotICAgIDExMCwgMjE4LCA2MCwgMjMxLCAxNTQsIDQ0LCAyNTQsIDExMCwgMjQ2LCAxMTgsIDIxOCwgNjAsIDIzMSwgMTU0LCA0MywgCi0gICAgMjE4LCA2MCwgMTI3LCA0NCwgMjE4LCA2MCwgMTI3LCA0MywgMjQ2LCAxMTgsIDIxOCwgNjAsIDEyNywgNDQsIDI0NiwgMTE4LCAKLSAgICAyMTgsIDYwLCAxMjcsIDIyMywgMTU3LCAyMzUsIDIwMiwgMjMxLCAxNTQsIDIyMywgMTU3LCAyNDYsIDExOCwgMjM1LCAyMDIsIAotICAgIDIzMSwgMTU0LCAyNDYsIDExOCwgMjE1LCAyNDEsIDIzMSwgMTU0LCA0MywgMjE1LCAyNDEsIDEyNywgNDQsIDIxNSwgMjQxLCAKLSAgICAxMjcsIDIyMywgMTU3LCAyMTgsIDIzNCwgNDMsIDIyMywgMTU3LCAyMjYsIDE5OCwgMTI3LCA0NCwgMjIzLCAxNTcsIDIyNiwgCi0gICAgMTk4LCAxMjcsIDI0NSwgMjEwLCAyNDksIDE1OCwgMjI2LCAxMywgMjQ0LCAyMiwgMjI2LCAxMywgMjIzLCA0OSwgMjQ0LCAKLSAgICAyMiwgMjI2LCAxMywgMjQwLCAxNjUsIDI0NiwgMTE4LCAyMjYsIDI1MSwgMjQ2LCAxMDQsIDI1NCwgMTE5LCAyMTQsIDE1MywgCi0gICAgMjU0LCAxMTksIDI0NiwgMTE4LCAyMjIsIDI0NywgMjU0LCAxMDksIDUyLCAyMjYsIDI0OCwgMjQwLCAxNjgsIDIzNSwgMTkzLCAKLSAgICAyMzUsIDIwMSwgMjI2LCA1OSwgMjUxLCAxNTQsIDI0MCwgMTY5LCAyLCAyNDgsIDEsIDIxNiwgODksIDIsIDIyMiwgMjM0LCAKLSAgICA0OCwgNDMsIDEyMSwgMjI2LCA1LCAxMjcsIDQ0LCAxMjEsIDIyNiwgNSwgMTI3LCAyMTYsIDg5LCAyLCA1OSwgNDgsIDIxNiwgCi0gICAgODksIDIsIDU5LCA1MSwgNDMsIDY3LCAyNTIsIDE0MSwgMiwgMjI0LCA3LCA0NCwgNjcsIDI1MiwgMTQxLCAyLCAyMjQsIDcsIAotICAgIDIxNiwgMTQsIDQzLCAxNjMsIDEyNywgMjE2LCAxNCwgNDQsIDE2MywgMTI3LCAyNTEsIDE3NSwgNDMsIDE2MywgMTI3LCAKLSAgICAyNTEsIDE3NSwgNDQsIDE2MywgMTI3LCA0MywgMjE5LCAxODcsIDEwNCwgMTI3LCA0NCwgMjE5LCAxODcsIDEwNCwgMTI3LCAKLSAgICA0MywgNTIsIDIyNiwgMywgNDQsIDUyLCAyMjYsIDMsIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCAxMjMsIAotICAgIDU5LCAxMTcsIDExMywgMTcwLCAyMjQsIDE0MCwgOTIsIDI0NCwgMTEsIDU5LCAyMjQsIDE0MCwgMjQ0LCA4MSwgNTksIDc4LCAKLSAgICAyMjMsIDQ5LCAyMjQsIDEzLCA3OCwgNjcsIDE4MiwgMjIyLCAyMzQsIDIyNSwgMTAsIDIxMSwgMjA5LCAyMjAsIDEzOCwgCi0gICAgMjMwLCAyMjQsIDI0NywgMTIwLCAyMTUsIDk0LCAyNDksIDIxOSwgMjIzLCAxNTcsIDI0NywgMTIwLCAyMjMsIDE1NywgMjQ5LCAKLSAgICAyMTksIDIxNSwgOTQsIDIyMCwgMTUwLCAyNDgsIDIwNiwgMiwgNDMsIDI0MiwgMTA4LCAyNDgsIDIwNiwgMiwgNDQsIDI0MiwgCi0gICAgMTA4LCAyMTUsIDk0LCAyNDgsIDIwNSwgMjE2LCAxNCwgMTYzLCAyMjEsIDE3MywgNTAsIDIxNSwgNTksIDI0OCwgMTU2LCAKLSAgICAyMTYsIDE0MywgMjQ4LCAxNTYsIDksIDM0LCAyMjMsIDc2LCA5LCAzNCwgMjUwLCAxMCwgOSwgMzQsIDIyMSwgMTc2LCAxMTAsIAotICAgIDksIDM0LCAyMjEsIDE3NiwgMTA1LCA5LCAzNCwgMjIxLCAxNzYsIDE1OCwgOSwgMzQsIDIyNSwgMTY3LCA5LCAzNCwgMjUxLCAKLSAgICAxNjMsIDksIDM0LCAyMTcsIDkyLCA5LCAzNCwgMjM0LCAzMywgMTEwLCA5LCAzNCwgMjM0LCAzMywgMTA1LCA5LCAzNCwgCi0gICAgMjQ3LCAxNzAsIDksIDM0LCAyMjEsIDE3OSwgOSwgMzQsIDQsIDExMCwgOSwgMzQsIDQsIDEwNSwgOSwgMzQsIDIzMywgOTcsIAotICAgIDExMCwgOSwgMzQsIDIzMywgOTcsIDEwNSwgOSwgMzQsIDIzMywgOTcsIDE1OCwgOSwgMzQsIDIzMywgOTcsIDE2MSwgOSwgCi0gICAgMzQsIDIxOSwgNjgsIDksIDM0LCAyMTYsIDE0NSwgOSwgMzQsIDIxOSwgNjYsIDExMCwgOSwgMzQsIDIxOSwgNjYsIDEwNSwgCi0gICAgOSwgMzQsIDI0MSwgMjI4LCAxMTAsIDksIDM0LCAyNDEsIDIyOCwgMTA1LCA5LCAzNCwgMjQyLCAxNSwgOSwgMzQsIDIyMywgCi0gICAgMTQ3LCA5LCAzNCwgMjUwLCA4MiwgOSwgMzQsIDIxOCwgMzcsIDksIDM0LCAyMzAsIDEyOCwgOSwgMzQsIDI0OCwgODgsIDksIAotICAgIDM0LCAyMzAsIDEyMCwgOSwgMzQsIDI1MCwgMjUsIDksIDM0LCAyMTIsIDQxLCAxMTAsIDksIDM0LCAyMTIsIDQxLCAxMDUsIAotICAgIDksIDM0LCAyNDQsIDk2LCA5LCAzNCwgMjI1LCAyMzIsIDExMCwgOSwgMzQsIDIyNSwgMjMyLCAxMDUsIDksIDM0LCAyMTksIAotICAgIDE2MCwgMTYzLCAyMTUsIDIzNiwgMjE1LCAxODgsIDksIDM0LCAyNDksIDE0NSwgOSwgMzQsIDI0NywgMTM2LCA5LCAzNCwgCi0gICAgMjM1LCAxMzcsIDksIDM0LCAyNTEsIDE5OCwgNjQsIDI0OSwgMjUwLCA5LCAzNCwgMjQ1LCAxNSwgOSwgMzQsIDIxOCwgMjQ5LCAKLSAgICAxMTAsIDksIDM0LCAyMTgsIDI0OSwgMTA1LCA5LCAzNCwgMjUyLCAxNTQsIDksIDM0LCAyMTksIDE2NywgOSwgMzQsIDI1MSwgCi0gICAgNjMsIDIxOSwgMTY3LCA5LCAzNCwgMjI5LCA5MCwgMTEwLCA5LCAzNCwgMjI5LCA5MCwgMTA1LCA5LCAzNCwgMjI5LCA5MCwgCi0gICAgMTU4LCA5LCAzNCwgMjI5LCA5MCwgMTYxLCA5LCAzNCwgMjMxLCA0NiwgOSwgMzQsIDIyMCwgNTcsIDksIDM0LCAyMjMsIAotICAgIDE1MywgOSwgMzQsIDI0NSwgMzcsIDksIDM0LCAyMjYsIDIwOSwgOSwgMzQsIDI1MSwgMTMzLCAxMTAsIDksIDM0LCAyNTEsIAotICAgIDEzMywgMTA1LCA5LCAzNCwgMjMxLCA4NiwgOSwgMzQsIDIzMCwgMTIzLCA5LCAzNCwgMjQyLCAxNDAsIDExMCwgOSwgMzQsIAotICAgIDI0MiwgMTQwLCAxMDUsIDksIDM0LCAyNDIsIDE0MCwgMTU4LCA5LCAzNCwgMjE2LCAxMDYsIDksIDM0LCAyNDksIDI0OSwgOSwgCi0gICAgMzQsIDIxMiwgOSwgMTEwLCA5LCAzNCwgMjEyLCA5LCAxMDUsIDksIDM0LCAyNTEsIDYzLCAyMjEsIDE3MCwgOSwgMzQsIAotICAgIDIxOSwgMTYwLCAyNDAsIDI0OCwgOSwgMzQsIDI0MCwgMjQ4LCA5LCAzNCwgMjUxLCA2MywgMjE5LCAyLCA5LCAzNCwgMjUxLCAKLSAgICA2MywgMjIwLCA1MiwgOSwgMzQsIDI0NCwgMzIsIDksIDM0LCAyNTEsIDYzLCAyNTAsIDIyOCwgOSwgMzQsIDIxOSwgMTYwLCAKLSAgICAyMTIsIDU3LCA5LCAzNCwgMjEyLCA1OCwgMTEwLCA5LCAzNCwgMjEyLCA1OCwgMTA1LCA5LCAzNCwgMjUwLCAyNywgOSwgMzQsIAotICAgIDI1MSwgNjMsIDI0MiwgMTY2LCA5LCAzNCwgMTk5LCAxMTAsIDksIDM0LCAxOTksIDEwNSwgOSwgMzQsIDI1MSwgNjMsIDIzMiwgCi0gICAgMTM3LCA5LCAzNCwgMjUxLCA2MywgMjQzLCA4OCwgOSwgMzQsIDIzMCwgMTE5LCAxMTAsIDksIDM0LCAyMzAsIDExOSwgMTA1LCAKLSAgICA5LCAzNCwgMjIzLCAxNTksIDksIDM0LCAyNTEsIDIwNywgOSwgMzQsIDI1MSwgNjMsIDIxNywgNTYsIDIzMywgNTIsIDksIAotICAgIDM0LCAyNTEsIDYzLCAyMzMsIDUzLCA5LCAzNCwgMjUxLCA2MywgMjExLCAyMzksIDksIDM0LCAyNTEsIDYzLCAyNDQsIDQ2LCAKLSAgICA5LCAzNCwgMjQ1LCAyMTgsIDExMCwgOSwgMzQsIDI0NSwgMjE4LCAxMDUsIDksIDM0LCAyNDUsIDIxOCwgMTU4LCA5LCAzNCwgCi0gICAgMjUxLCA2MywgMjQ1LCAyMTcsIDksIDM0LCAyNDEsIDIzNSwgOSwgMzQsIDI1MSwgNjMsIDI0MCwgMjQ1LCA5LCAzNCwgMjUxLCAKLSAgICAxOTQsIDksIDM0LCAyNDIsIDIyMiwgOSwgMzQsIDI1MSwgNjMsIDI0NCwgOTAsIDksIDM0LCAyNTEsIDYzLCAyNTEsIDIzNywgCi0gICAgOSwgMzQsIDI1MSwgNjMsIDIyMiwgMSwgOSwgMzQsIDIxOSwgMTYwLCAyMTIsIDIsIDksIDM0LCAyMTksIDE2MCwgMjExLCAKLSAgICA0MSwgOSwgMzQsIDI1MSwgNjMsIDI0MywgMjQ0LCA5LCAzNCwgMjM1LCAxNDMsIDI0NSwgNDEsIDksIDM0LCAyNTEsIDYzLCAKLSAgICAyNDUsIDQxLCA5LCAzNCwgMjM1LCAxNDMsIDIxNiwgMTUsIDksIDM0LCAyNTEsIDYzLCAyMTYsIDE1LCA5LCAzNCwgMjM1LCAKLSAgICAxNDMsIDI0NiwgOTYsIDksIDM0LCAyNTEsIDYzLCAyNDYsIDk2LCA5LCAzNCwgMjE1LCA5MSwgOSwgMzQsIDIzNSwgMTQzLCAKLSAgICAyMTUsIDkxLCA5LCAzNCwgMjUxLCA2MywgMjE1LCA5MSwgNjAsIDM0LCAxMTAsIDYwLCAzNCwgMjMyLCAyMTMsIDYwLCAzNCwgCi0gICAgMjQ3LCAxMjAsIDYwLCAzNCwgMjE5LCA5NSwgNjAsIDM0LCAyMjEsIDE3NSwgNjAsIDM0LCAxMDMsIDYwLCAzNCwgMTA1LCAKLSAgICA2MCwgMzQsIDIzMiwgMjM3LCA2MCwgMzQsIDIzMSwgMTg1LCA2MCwgMzQsIDIzMywgMzMsIDYwLCAzNCwgMjQ1LCAxMjksIAotICAgIDYwLCAzNCwgMTk1LCA2MCwgMzQsIDEyNCwgMjUxLCAxNjMsIDYwLCAzNCwgMjQ5LCAxNDcsIDYwLCAzNCwgMjQwLCAxMTEsIAotICAgIDYwLCAzNCwgMjE3LCA5MiwgNjAsIDM0LCAyMDQsIDI1MSwgMTYzLCA2MCwgMzQsIDIzNCwgMzIsIDYwLCAzNCwgMjI0LCAKLSAgICAyMjQsIDYwLCAzNCwgMjExLCAyMDIsIDYwLCAzNCwgMjE4LCAyNDMsIDYwLCAzNCwgNDQsIDIwNCwgMjUxLCAxNjMsIDYwLCAKLSAgICAzNCwgMjQxLCAxNzYsIDI0NSwgMTQ1LCA2MCwgMzQsIDIxNiwgMjQ3LCA2MCwgMzQsIDI0NywgMTcwLCA2MCwgMzQsIDIyMSwgCi0gICAgMTc5LCA2MCwgMzQsIDI1MCwgMTAsIDYwLCAzNCwgMjI0LCAxODIsIDYwLCAzNCwgMjU0LCAyMTUsIDYwLCAzNCwgMjMwLCAKLSAgICAxMTAsIDYwLCAzNCwgMjQ1LCAxNDUsIDYwLCAzNCwgMjQ1LCAyMjMsIDYwLCAzNCwgMjIxLCAyMDAsIDYwLCAzNCwgMjQyLCAKLSAgICAxNzQsIDYwLCAzNCwgMjQyLCAxNzUsIDIxOSwgODEsIDYwLCAzNCwgMjQ1LCA0MCwgNjAsIDM0LCAyNTEsIDI0OCwgNjAsIAotICAgIDM0LCAyMTEsIDIyMSwgNjAsIDM0LCAyNTAsIDEwMSwgNjAsIDM0LCAyMjIsIDE5NiwgNjAsIDM0LCAyMzUsIDI1MSwgNjAsIAotICAgIDM0LCAyMTksIDc5LCA2MCwgMzQsIDIzMywgOTYsIDYwLCAzNCwgMjQ5LCAxNTYsIDYwLCAzNCwgMjE4LCAyMzcsIDYwLCAzNCwgCi0gICAgMjMwLCAxMTUsIDYwLCAzNCwgMjIyLCAyMjQsIDYwLCAzNCwgMjExLCAyMDYsIDYwLCAzNCwgMjI2LCAxOTAsIDYwLCAzNCwgCi0gICAgMjE1LCA5NywgNjAsIDM0LCAyNDYsIDgwLCA2MCwgMzQsIDIxOSwgMjUxLCAyMTYsIDE0NSwgNjAsIDM0LCAyNDYsIDExOCwgCi0gICAgMjUwLCAxMCwgNjAsIDM0LCAxOTksIDIxOCwgMTA4LCA2MCwgMzQsIDExMywgMjQyLCAxMCwgNjAsIDM0LCAyMjAsIDAsIDYwLCAKLSAgICAzNCwgMjUxLCAxNjksIDYwLCAzNCwgMjE5LCA2NSwgNjAsIDM0LCAyNTEsIDEzNywgNjAsIDM0LCAyMTgsIDEzOCwgNjAsIAotICAgIDM0LCAyNDEsIDIyNywgNjAsIDM0LCAyNDIsIDI4LCA2MCwgMzQsIDI0NywgMTIzLCA2MCwgMzQsIDI0MiwgMTUsIDYwLCAzNCwgCi0gICAgMjUxLCAxNTQsIDYwLCAzNCwgMjIzLCAxNDcsIDYwLCAzNCwgMjIxLCAxODcsIDYwLCAzNCwgMjQ3LCAxOTksIDYwLCAzNCwgCi0gICAgMjUzLCAxNjgsIDYwLCAzNCwgMjE4LCAyMzQsIDYwLCAzNCwgMjI4LCA1MSwgNjAsIDM0LCAyMTgsIDM3LCA2MCwgMzQsIAotICAgIDIyMSwgMjExLCA2MCwgMzQsIDIzMCwgMTI4LCA2MCwgMzQsIDIxNSwgMjM1LCA2MCwgMzQsIDIzMywgMTIyLCA2MCwgMzQsIAotICAgIDIxOCwgMTI5LCA2MCwgMzQsIDI0OCwgODgsIDYwLCAzNCwgMjEyLCAyMSwgNjAsIDM0LCAyNDcsIDE0NiwgMjI4LCA1MSwgCi0gICAgNjAsIDM0LCAyNDksIDIxNSwgNjAsIDM0LCAyNDMsIDIyMiwgNjAsIDM0LCAyNTAsIDIxLCA2MCwgMzQsIDIxOCwgMTQyLCAKLSAgICA2MCwgMzQsIDIxMiwgNDAsIDYwLCAzNCwgMjQ0LCA5NiwgNjAsIDM0LCAyNTAsIDE4LCA2MCwgMzQsIDI0NCwgMTYxLCA2MCwgCi0gICAgMzQsIDUyLCAyMTEsIDE3OCwgNjAsIDM0LCAxNjMsIDIxNSwgMjM2LCAyMTUsIDE4OCwgNjAsIDM0LCAyMTksIDg5LCA2MCwgCi0gICAgMzQsIDI0NCwgMTcxLCA2MCwgMzQsIDI0OSwgMTQ1LCA2MCwgMzQsIDI0NywgMTM2LCA2MCwgMzQsIDIyNCwgMTc5LCA2MCwgCi0gICAgMzQsIDIzNSwgMTM3LCA2MCwgMzQsIDIzMSwgNjcsIDYwLCAzNCwgMjE2LCA4OCwgNjAsIDM0LCAyMTcsIDI0NSwgNjAsIDM0LCAKLSAgICAyMzIsIDIzMSwgNjAsIDM0LCAyMTQsIDEzMSwgNjAsIDM0LCAyNDQsIDEyMCwgNjAsIDM0LCAyNTEsIDE5OCwgNjQsIDI0OSwgCi0gICAgMjUwLCA2MCwgMzQsIDIxOSwgMTg4LCA2MCwgMzQsIDI0NiwgMTE4LCAyMTYsIDI0MiwgNjAsIDM0LCAyMTEsIDI1MywgNjAsIAotICAgIDM0LCAyMTksIDEwMywgNjAsIDM0LCAyNDcsIDE4NywgNjAsIDM0LCAyNDUsIDE1LCA2MCwgMzQsIDIxOSwgNSwgNjAsIDM0LCAKLSAgICA3NCwgNjAsIDM0LCAyMTgsIDEzMSwgNjAsIDM0LCAyMTgsIDI0OCwgNjAsIDM0LCAyMTUsIDI1NSwgNjAsIDM0LCAyNDIsIAotICAgIDE0NywgNjAsIDM0LCAyNTAsIDIxOCwgNjAsIDM0LCAyMTgsIDE2MCwgNjAsIDM0LCAyNTIsIDE1NCwgNjAsIDM0LCAyMjMsIAotICAgIDMxLCA2MCwgMzQsIDIxOSwgMTY3LCA2MCwgMzQsIDIzNSwgMTMwLCA2MCwgMzQsIDIyOSwgODksIDYwLCAzNCwgMjIwLCA1NywgCi0gICAgNjAsIDM0LCAyNDQsIDE0OSwgNjAsIDM0LCAyMjYsIDIwOSwgNjAsIDM0LCAyNTQsIDExOCwgNjAsIDM0LCAyMjUsIDI5LCAKLSAgICA2MCwgMzQsIDI0NSwgMjI3LCA2MCwgMzQsIDI1MSwgMTMyLCA2MCwgMzQsIDIzMSwgODYsIDYwLCAzNCwgMjMwLCAxODMsIAotICAgIDYwLCAzNCwgMjIwLCAxNTYsIDYwLCAzNCwgMjUzLCAyNTIsIDYwLCAzNCwgMjMwLCAxMjMsIDYwLCAzNCwgMjE2LCAxOSwgCi0gICAgNjAsIDM0LCAyMjYsIDE2NSwgNjAsIDM0LCAyNTEsIDIwMSwgNjAsIDM0LCAyMTgsIDEyNywgNjAsIDM0LCAyNDksIDIyNSwgCi0gICAgNjAsIDM0LCAyNDIsIDEzOSwgNjAsIDM0LCAyMTYsIDEwNiwgNjAsIDM0LCAyMzUsIDIxNywgNjAsIDM0LCAyNTEsIDIxMSwgCi0gICAgNjAsIDM0LCAyMTIsIDU4LCAyNDUsIDE0NSwgNjAsIDM0LCAyNDksIDI0OSwgNjAsIDM0LCAyMTIsIDgsIDYwLCAzNCwgMjIxLCAKLSAgICAxNzAsIDYwLCAzNCwgMjQwLCAyNDgsIDYwLCAzNCwgMjE5LCAyLCA2MCwgMzQsIDIxNCwgMjIsIDYwLCAzNCwgMjUyLCA3MiwgCi0gICAgNjAsIDM0LCAyMjUsIDczLCA2MCwgMzQsIDI1MiwgMTc0LCA2MCwgMzQsIDIyMCwgNTIsIDYwLCAzNCwgMjIzLCAxMTAsIDYwLCAKLSAgICAzNCwgMjIyLCAxMjYsIDYwLCAzNCwgMjQ0LCAzMiwgNjAsIDM0LCAyNTEsIDIwMCwgNjAsIDM0LCAyNTAsIDIyOCwgNjAsIAotICAgIDM0LCAyNTEsIDIyNiwgNjAsIDM0LCAyMzAsIDEyNSwgNjAsIDM0LCAyMTIsIDU3LCA2MCwgMzQsIDI1MCwgMjcsIDYwLCAzNCwgCi0gICAgMjExLCAyMzYsIDYwLCAzNCwgMjQ3LCAxODAsIDYwLCAzNCwgMjEzLCAxNjEsIDYwLCAzNCwgMjQyLCAxNjYsIDYwLCAzNCwgCi0gICAgMjMyLCAxMzcsIDYwLCAzNCwgMjQzLCA4OCwgNjAsIDM0LCAyMzAsIDExOCwgNjAsIDM0LCAyMTksIDk0LCA2MCwgMzQsIAotICAgIDIxOSwgMjUxLCAyMTcsIDc2LCAyNTEsIDIzNywgNjAsIDM0LCAyMjMsIDE1OSwgNjAsIDM0LCAyNTEsIDIwNywgNjAsIDM0LCAKLSAgICAyMTEsIDE5NywgNjAsIDM0LCAyNDQsIDE5MCwgNjAsIDM0LCAyMzMsIDUyLCA2MCwgMzQsIDIxNywgNTYsIDIzMywgNTIsIAotICAgIDYwLCAzNCwgMjMzLCA0OCwgNjAsIDM0LCAyMTksIDMwLCA2MCwgMzQsIDIzMywgNTMsIDYwLCAzNCwgMjExLCAyMzksIDYwLCAKLSAgICAzNCwgMjQ0LCA0NiwgNjAsIDM0LCAyNDUsIDIxNywgNjAsIDM0LCAyNDEsIDIzNSwgNjAsIDM0LCAyNDQsIDAsIDYwLCAzNCwgCi0gICAgMjQwLCAyNDUsIDYwLCAzNCwgMjUxLCAxOTQsIDYwLCAzNCwgMjE3LCA2MywgNjAsIDM0LCAyNDIsIDM0LCA2MCwgMzQsIAotICAgIDI0NCwgMTEzLCA2MCwgMzQsIDIyMiwgMjgsIDIxMSwgMjM2LCA2MCwgMzQsIDI1MCwgMjIwLCA2MCwgMzQsIDI0MiwgMjIyLCAKLSAgICA2MCwgMzQsIDI0NCwgOTAsIDYwLCAzNCwgMjUxLCAyMzcsIDYwLCAzNCwgMjIyLCAxLCA2MCwgMzQsIDI0OCwgNzQsIDYwLCAKLSAgICAzNCwgMjEyLCAyLCA2MCwgMzQsIDI0MSwgMjEwLCA2MCwgMzQsIDIxMSwgNDEsIDYwLCAzNCwgMjMwLCAxOTIsIDYwLCAzNCwgCi0gICAgMjUxLCAyMjEsIDYwLCAzNCwgMjQ1LCAxNTUsIDYwLCAzNCwgMjQzLCAyNDQsIDYwLCAzNCwgMjE1LCAyMDksIDYwLCAzNCwgCi0gICAgMjQ2LCA4MiwgNjAsIDM0LCAyMjMsIDE0MSwgNjAsIDM0LCAyMjgsIDUzLCA2MCwgMzQsIDI0NSwgNDEsIDYwLCAzNCwgMjE2LCAKLSAgICAxNSwgNjAsIDM0LCAyNDYsIDk2LCA2MCwgMzQsIDIxNSwgOTEsIDYwLCAzNCwgMjQ0LCA0OCwgMTA5LCAyNDgsIDM3LCAxMzUsIAotICAgIDQzLCAyMTYsIDQyLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDc3LCAyMTYsIDQyLCA1MSwgMTA5LCAyNDgsIDM3LCAKLSAgICAxMzUsIDQzLCAyMTYsIDQyLCAyMzAsIDIyNCwgMjIsIDIyMiwgMjUxLCAxMDksIDI0OCwgMzcsIDEzNSwgNzcsIDIxNiwgNDIsIAotICAgIDIzMCwgMjI0LCAyMiwgNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCAyNDMsIDIyOSwgMjE4LCAxMCwgMTA5LCAyNDgsIDM3LCAKLSAgICAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCA0OCwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCA1MSwgCi0gICAgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAyMzMsIDQ2LCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAKLSAgICAxMSwgMjQzLCAyNDMsIDIxNCwgMTYwLCAyMzMsIDQ2LCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIAotICAgIDIxNCwgMTYwLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAyMzIsIDEwOCwgMjMzLCAKLSAgICA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIyNiwgMTIyLCAxMDksIDIxOSwgMTgsIDEwOSwgMjQ5LCAyMTksIDEwOSwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCAyNDcsIDE3NywgNzgsIDIzNSwgMTMxLCAyMzUsIDIzNiwgMjE4LCAxNTksIDg3LCAxMDksIDIzNSwgCi0gICAgMTU4LCA3OCwgMTA5LCAyNDksIDI1MiwgNzgsIDEwOSwgNTQsIDIxMCwgODYsIDQzLCAyNTQsIDExMCwgMTI3LCA0NCwgMjU0LCAKLSAgICAxMTAsIDEyNywgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDQzLCAyNDksIDE2MSwgCi0gICAgMTI3LCA0NCwgMjQ5LCAxNjEsIDEyNywgNDMsIDcxLCAyNDksIDE2MSwgMTI3LCA0NCwgNzEsIDI0OSwgMTYxLCAxMjcsIDQzLCAKLSAgICA4NSwgMjMzLCAyMCwgMTI3LCA0NCwgODUsIDIzMywgMjAsIDEyNywgMjI0LCAyMzcsIDc4LCAyNDMsIDMyLCA3OCwgNDMsIAotICAgIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQzLCA3MSwgMjMzLCAyMCwgMTI3LCA0NCwgCi0gICAgNzEsIDIzMywgMjAsIDEyNywgNDMsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDQsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIAotICAgIDEyNywgNDMsIDcxLCA0MiwgMTI3LCA0NCwgNzEsIDQyLCAxMjcsIDIxMiwgMzYsIDI0OCwgMTU2LCAyMjMsIDQ5LCA1MiwgCi0gICAgMjI0LCAxOTEsIDIyMywgMjU0LCA3OCwgNTIsIDIyNCwgMTkxLCAyMjMsIDI1NCwgNzgsIDEyMSwgNTIsIDIyNCwgMTkxLCAKLSAgICAyMjMsIDI1NCwgNzgsIDIyNCwgMjM3LCAxNjQsIDI0NCwgMTkwLCAyNDIsIDgsIDIyNywgMTk4LCAxMTAsIDI0MiwgOCwgCi0gICAgMjI3LCAxOTgsIDEwNSwgMjQyLCA4LCAyMjcsIDE5OCwgMTU4LCAyNDIsIDgsIDIyNywgMTk4LCAxNjEsIDI0MiwgOCwgMjI3LCAKLSAgICAxOTgsIDE4OSwgMjQyLCA4LCAyMjcsIDE5OCwgMTk0LCAyNDIsIDgsIDIyNywgMTk4LCAxOTgsIDI0MiwgOCwgMjI3LCAxOTgsIAotICAgIDE5NSwgMjQyLCA4LCAyMjcsIDE5OCwgMjAwLCAxMDksIDIzMywgMywgMTM4LCA3OCwgMTA5LCAyMjIsIDIyOCwgMTM4LCA3OCwgCi0gICAgMTA5LCAyNDgsIDQ0LCAxMzgsIDc4LCAxMDksIDI0NSwgMTI4LCAxMzgsIDc4LCAyNCwgMjE5LCAxNTUsIDU5LCAxMzgsIDc4LCAKLSAgICAyNCwgNTIsIDU5LCAxMzgsIDc4LCAyMTIsIDMyLCAyNDgsIDE1NiwgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCA3OCwgNjcsIAotICAgIDIzNCwgMjMzLCAyMjMsIDc3LCAyLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMTY0LCAKLSAgICAyMTQsIDE2MCwgMjQyLCAyNywgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCAyLCAyMTMsIDEzNSwgMjE5LCAzMSwgMTY0LCAyMTQsIAotICAgIDE2MCwgMjQyLCAyNywgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCAxNjQsIDIzMiwgMTA4LCAyNDIsIDI3LCAzNywgMjI0LCAKLSAgICAyMzcsIDc4LCAxMDksIDIxNywgMywgMjMyLCAyMTQsIDI0NCwgMTQ2LCAyMjAsIDEzOCwgODcsIDI0MiwgOCwgMjI3LCAxOTgsIAotICAgIDIxNiwgMjQ3LCAyNDIsIDgsIDIyNywgMTk4LCAyMTUsIDczLCAyNDIsIDgsIDIyNywgMTk4LCAyMTYsIDE2MiwgNjcsIDEwOSwgCi0gICAgMjM1LCAxNTgsIDc4LCAyMzEsIDE0MCwgNzgsIDIyNSwgMjU1LCAyNTQsIDE0MCwgNzgsIDEwOSwgNDUsIDIzNSwgMjM4LCAKLSAgICAxMDksIDE2MywgMjQ0LCAxMDYsIDIxOSwgMTgsIDE0MSwgMSwgNCwgNjEsIDE0MSwgMSwgNjEsIDE0MSwgMSwgNCwgNzMsIAotICAgIDE0MSwgMSwgNzMsIDE0MSwgMSwgNCwgNzAsIDE0MSwgMSwgNzAsIDE0MSwgMSwgNCwgNzUsIDE0MSwgMSwgNzUsIDE0MSwgMSwgCi0gICAgNCwgNzYsIDE0MSwgMSwgNzYsIDE0MSwgMSwgMTc2LCAxNDEsIDEsIDI0MywgMTM1LCAxNDEsIDEsIDIzNCwgOTIsIDE0MSwgCi0gICAgMSwgMjQyLCAyMTQsIDE0MSwgMSwgMjMzLCAyMTcsIDE0MSwgMSwgMjQyLCAxMTMsIDE0MSwgMSwgMjM0LCAxODIsIDE0MSwgCi0gICAgMSwgMjQzLCA2MiwgMTQxLCAxLCAyMzQsIDI4LCAxNDEsIDEsIDI0MiwgMTc0LCAxNDEsIDEsIDIwNiwgMTQxLCAxLCAyMTAsIAotICAgIDExNiwgMTQxLCAxLCAyMTksIDE5MSwgMTQxLCAxLCAyMTAsIDQ0LCAxNDEsIDEsIDIxOCwgODMsIDE0MSwgMSwgMjEwLCAxMywgCi0gICAgMTQxLCAxLCAyMjEsIDE4MSwgMTQxLCAxLCAyMTAsIDk0LCAxNDEsIDEsIDIxOSwgNTgsIDE0MSwgMSwgMjEwLCAyMywgMTQxLCAKLSAgICAxLCAyMTcsIDEwNSwgMTQxLCAxLCAyNDgsIDIyMSwgMTQxLCAxLCAyMTYsIDExNywgMTQxLCAxLCAyNDgsIDMsIDE0MSwgMSwgCi0gICAgNCwgMjE1LCAxMTgsIDE0MSwgMSwgMjE1LCAxMTgsIDE0MSwgMSwgMjQ2LCA3OCwgMTQxLCAxLCAyMTcsIDIyLCAxNDEsIDEsIAotICAgIDI0OCwgOTAsIDE0MSwgMSwgMTExLCAxNDEsIDEsIDI0NywgMTQ1LCAxNDEsIDEsIDE5NywgMTQxLCAxLCAyMjgsIDIzMywgCi0gICAgMTQxLCAxLCAyMjcsIDIzNywgMTQxLCAxLCAyMjksIDEwNywgMTQxLCAxLCAyMjgsIDc0LCAxNDEsIDEsIDE2MiwgMTQxLCAxLCAKLSAgICAyNTIsIDE5MSwgMTQxLCAxLCAxOTAsIDE0MSwgMSwgMjQxLCAxODAsIDE0MSwgMSwgMjUyLCA2LCAxNDEsIDEsIDIyNSwgCi0gICAgMTA4LCAxNDEsIDEsIDI0MCwgMjIyLCAxNDEsIDEsIDI1MSwgMTI1LCAxNDEsIDEsIDIyNCwgMTUwLCAxNDEsIDEsIDI0MSwgCi0gICAgMjM4LCAxNDEsIDEsIDI1MiwgNzUsIDE0MSwgMSwgMjI1LCAyMjEsIDE0MSwgMSwgMjQxLCA2OCwgMTQxLCAxLCAyNTEsIAotICAgIDIwNSwgMTQxLCAxLCAyMjUsIDE2LCAxNDEsIDEsIDE4NCwgMTQxLCAxLCAyMzAsIDIzMCwgMTQxLCAxLCAyMzAsIDEwMiwgCi0gICAgMTQxLCAxLCAyMzEsIDkxLCAxNDEsIDEsIDIzMCwgMTYxLCAxNDEsIDEsIDQsIDE5MSwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgCi0gICAgNCwgMjEwLCAyMTIsIDE0MSwgMSwgMjEwLCAyMTIsIDE0MSwgMSwgNCwgMjEwLCAyNDQsIDE0MSwgMSwgMjEwLCAyNDQsIAotICAgIDE0MSwgMSwgMjA1LCAxNDEsIDEsIDIyMywgMzUsIDE0MSwgMSwgMjIyLCAxNDAsIDE0MSwgMSwgMjIzLCAxMjgsIDE0MSwgMSwgCi0gICAgMjIyLCAyMTEsIDE0MSwgMSwgNCwgMjEyLCA2NSwgMTQxLCAxLCAyMTIsIDY1LCAxNDEsIDEsIDIxMSwgMjUwLCAxNDEsIDEsIAotICAgIDIxMiwgMjIsIDE0MSwgMSwgMjExLCAyMjcsIDE0MSwgMSwgMjMwLCAyNSwgMTQxLCAxLCAyMTIsIDExNiwgMTQxLCAxLCA0LCAKLSAgICAxNzYsIDE0MSwgMSwgNCwgMjM0LCAxODIsIDM4LCAyMzQsIDIwMSwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAzOCwgMjM0LCAKLSAgICAyMDEsIDIyMCwgMTU1LCAyMTksIDMxLCA3OCwgMjM0LCAyMDEsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMjM0LCAyMDEsIAotICAgIDIyMCwgMTU1LCAyMTksIDMxLCA3OCwgMTQxLCAyMzUsIDE1OCwgNzgsIDE0MSwgMjEzLCAxMzUsIDIzNSwgMTU4LCA3OCwgCi0gICAgMTQxLCAyNDcsIDIyMSwgMjEwLCAyMjUsIDIzNCwgMjAxLCA1MiwgMjQwLCAxNjgsIDU2LCAxLCA0LCA2MSwgNTYsIDEsIDYxLCAKLSAgICA1NiwgMSwgNCwgNzMsIDU2LCAxLCA3MywgNTYsIDEsIDQsIDcwLCA1NiwgMSwgNzAsIDU2LCAxLCA0LCA3NSwgNTYsIDEsIAotICAgIDc1LCA1NiwgMSwgNCwgNzYsIDU2LCAxLCA3NiwgNTYsIDEsIDE3NiwgNTYsIDEsIDI0MywgMTM1LCA1NiwgMSwgMjM0LCA5MiwgCi0gICAgNTYsIDEsIDI0MiwgMjE0LCA1NiwgMSwgMjMzLCAyMTcsIDU2LCAxLCAyNDIsIDExMywgNTYsIDEsIDIzNCwgMTgyLCA1NiwgCi0gICAgMSwgMjQzLCA2MiwgNTYsIDEsIDIzNCwgMjgsIDU2LCAxLCAyNDIsIDE3NCwgNTYsIDEsIDIwNiwgNTYsIDEsIDIxMCwgMTE2LCAKLSAgICA1NiwgMSwgMjE5LCAxOTEsIDU2LCAxLCAyMTAsIDQ0LCA1NiwgMSwgMjE4LCA4MywgNTYsIDEsIDIxMCwgMTMsIDU2LCAxLCAKLSAgICAyMjEsIDE4MSwgNTYsIDEsIDIxMCwgOTQsIDU2LCAxLCAyMTksIDU4LCA1NiwgMSwgMjEwLCAyMywgNTYsIDEsIDIxNywgCi0gICAgMTA1LCA1NiwgMSwgMjQ4LCAyMjEsIDU2LCAxLCAyMTYsIDExNywgNTYsIDEsIDI0OCwgMywgNTYsIDEsIDQsIDIxNSwgMTE4LCAKLSAgICA1NiwgMSwgMjE1LCAxMTgsIDU2LCAxLCAyNDYsIDc4LCA1NiwgMSwgMjE3LCAyMiwgNTYsIDEsIDI0OCwgOTAsIDU2LCAxLCAKLSAgICAxMTEsIDU2LCAxLCAyNDcsIDE0NSwgNTYsIDEsIDE5NywgNTYsIDEsIDIyOCwgMjMzLCA1NiwgMSwgMjI3LCAyMzcsIDU2LCAKLSAgICAxLCAyMjksIDEwNywgNTYsIDEsIDIyOCwgNzQsIDU2LCAxLCAxNjIsIDU2LCAxLCAyNTIsIDE5MSwgNTYsIDEsIDE5MCwgNTYsIAotICAgIDEsIDI0MSwgMTgwLCA1NiwgMSwgMjUyLCA2LCA1NiwgMSwgMjI1LCAxMDgsIDU2LCAxLCAyNDAsIDIyMiwgNTYsIDEsIDI1MSwgCi0gICAgMTI1LCA1NiwgMSwgMjI0LCAxNTAsIDU2LCAxLCAyNDEsIDIzOCwgNTYsIDEsIDI1MiwgNzUsIDU2LCAxLCAyMjUsIDIyMSwgCi0gICAgNTYsIDEsIDI0MSwgNjgsIDU2LCAxLCAyNTEsIDIwNSwgNTYsIDEsIDIyNSwgMTYsIDU2LCAxLCAxODQsIDU2LCAxLCAyMzAsIAotICAgIDIzMCwgNTYsIDEsIDIzMCwgMTAyLCA1NiwgMSwgMjMxLCA5MSwgNTYsIDEsIDIzMCwgMTYxLCA1NiwgMSwgNCwgMTkxLCA1NiwgCi0gICAgMSwgMTkxLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDU2LCAxLCAyMTAsIDIxMiwgNTYsIDEsIDQsIDIxMCwgMjQ0LCA1NiwgMSwgCi0gICAgMjEwLCAyNDQsIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjMsIDM1LCA1NiwgMSwgMjIyLCAxNDAsIDU2LCAxLCAyMjMsIDEyOCwgCi0gICAgNTYsIDEsIDIyMiwgMjExLCA1NiwgMSwgNCwgMjEyLCA2NSwgNTYsIDEsIDIxMiwgNjUsIDU2LCAxLCAyMTEsIDI1MCwgNTYsIAotICAgIDEsIDIxMiwgMjIsIDU2LCAxLCAyMTEsIDIyNywgNTYsIDEsIDIzMCwgMjUsIDU2LCAxLCAyMTIsIDExNiwgNTYsIDEsIDQsIAotICAgIDE3NiwgNTYsIDEsIDQsIDIzNCwgMTgyLCA1NiwgMSwgMjE0LCAyNywgNTYsIDEsIDIxMywgMTc2LCA1NiwgMSwgMjEzLCAKLSAgICAyNTUsIDU2LCAxLCAyMTMsIDEzOCwgNTYsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjM0LCAyMDEsIDIyNCwgMTczLCAyMTksIAotICAgIDMxLCA3OCwgNTYsIDIzNSwgMTU4LCA3OCwgNTYsIDIxMywgMTM1LCAyMzUsIDE1OCwgNzgsIDU2LCAyNDcsIDIyMSwgMjMzLCAKLSAgICAyNTUsIDI1MSwgMTg0LCAxLCAyNTMsIDE1OCwgMjUxLCAxODQsIDEsIDIyNiwgMTA1LCAyNTEsIDE4NCwgMSwgMTkzLCAyNTEsIAotICAgIDE4NCwgMSwgMjQ1LCA2LCAyNTEsIDE4NCwgMSwgMjQ5LCA2MCwgMjUxLCAxODQsIDEsIDIxNywgMTUyLCAyNTEsIDE4NCwgMSwgCi0gICAgMjMwLCAyNSwgMjUxLCAxODQsIDEsIDE1NiwgMjUxLCAxODQsIDEsIDI0MywgMjAyLCAyNTEsIDE4NCwgMSwgMjM1LCAyMywgCi0gICAgMjUxLCAxODQsIDEsIDI0MiwgNjAsIDI1MSwgMTg0LCAxLCAyMzUsIDE0NCwgMjUxLCAxODQsIDEsIDIyNCwgOTYsIDI1MSwgCi0gICAgMTg0LCAxLCAyMTEsIDE3OCwgMjUxLCAxODQsIDEsIDIxMCwgODMsIDI1MSwgMTg0LCAxLCAyNTAsIDE1OCwgMjUxLCAxODQsIAotICAgIDEsIDIyMCwgMTA0LCAyNTEsIDE4NCwgMSwgMTUzLCAyNTEsIDE4NCwgMSwgMjEwLCAxNTksIDI1MSwgMTg0LCAxLCAyNTEsIAotICAgIDY2LCAyNTEsIDE4NCwgMSwgMjIyLCA5MSwgMjUxLCAxODQsIDEsIDYxLCAyNTEsIDE4NCwgMSwgNzYsIDI1MSwgMTg0LCAxLCAKLSAgICA3NSwgMjUxLCAxODQsIDEsIDI0NSwgMTk3LCAyNTEsIDE4NCwgMSwgMjU0LCAyMDEsIDI1MSwgMTg0LCAxLCAyNDUsIDE5NSwgCi0gICAgMjUxLCAxODQsIDEsIDI1MywgMTkyLCAyNTEsIDE4NCwgMSwgMjI2LCAxMzQsIDI1MSwgMTg0LCAxLCAyNTQsIDEyMywgMjUxLCAKLSAgICAxODQsIDEsIDI0NSwgMTUwLCAyNTEsIDE4NCwgMSwgMjU0LCAxMTUsIDI1MSwgMTg0LCAxLCAyNDUsIDEzOCwgMjUxLCAxODQsIAotICAgIDEsIDI0NSwgOTIsIDI1MSwgMTg0LCAxLCA3MywgMjUxLCAxODQsIDEsIDcwLCAyNTEsIDE4NCwgMSwgMjM1LCAxNTYsIDI1MSwgCi0gICAgMTg0LCAxLCAyMTQsIDEwNSwgMjUxLCAxODQsIDEsIDIyOSwgNzksIDI1MSwgMTg0LCAxLCAyNDIsIDE3OCwgMjUxLCAxODQsIAotICAgIDEsIDIzNiwgMzQsIDI0LCAxLCAyMzQsIDU4LCAyNCwgMSwgMjE4LCAyMTUsIDI0LCAxLCAyMzQsIDUxLCAyNCwgMSwgMjI4LCAKLSAgICAyMjYsIDI0LCAxLCAyMjgsIDIyNCwgMjQsIDEsIDIyOCwgMjIzLCAyNCwgMSwgMjE2LCAxMDEsIDI0LCAxLCAyMTgsIDIwNCwgCi0gICAgMjQsIDEsIDIyMywgMjYsIDI0LCAxLCAyMjMsIDIxLCAyNCwgMSwgMjIzLCAxOCwgMjQsIDEsIDIyMywgMTEsIDI0LCAxLCAKLSAgICAyMjMsIDYsIDI0LCAxLCAyMjMsIDEsIDI0LCAxLCAyMjMsIDEyLCAyNCwgMSwgMjIzLCAyNCwgMjQsIDEsIDIzMCwgMjE3LCAKLSAgICAyNCwgMSwgMjI1LCA5NSwgMjQsIDEsIDIxOCwgMjEyLCAyNCwgMSwgMjI1LCA4NCwgMjQsIDEsIDIxOSwgMTQ4LCAyNCwgMSwgCi0gICAgMjE4LCAyMDksIDI0LCAxLCAyMzYsIDU2LCAyNCwgMSwgMjUwLCA0NiwgMjQsIDEsIDIxOCwgMjE5LCAyNCwgMSwgMjUwLCAKLSAgICAxMDYsIDI0LCAxLCAyMzQsIDExMCwgMjQsIDEsIDIxNiwgMTczLCAyNCwgMSwgMjI1LCAxMzEsIDI0LCAxLCAyNDEsIDE3MiwgCi0gICAgMjQsIDEsIDYxLCAyNCwgMSwgMjU0LCAyNDMsIDI0LCAxLCAxOTEsIDI0LCAxLCAyMTEsIDkyLCAyNCwgMSwgMjQ1LCAxMTcsIAotICAgIDI0LCAxLCA3NSwgMjQsIDEsIDIxMSwgMzYsIDI0LCAxLCAyMTEsIDQ3LCAyNCwgMSwgNzYsIDI0LCAxLCAyMTIsIDY1LCAyNCwgCi0gICAgMSwgMjEyLCA2MiwgMjQsIDEsIDIyNiwgMjM0LCAyNCwgMSwgMjEwLCAyNDQsIDI0LCAxLCA3MCwgMjQsIDEsIDIxMiwgMTEsIAotICAgIDI0LCAxLCAyMTIsIDIyLCAyNCwgMSwgMjExLCAyNTAsIDI0LCAxLCAyMTAsIDIxMiwgMjQsIDEsIDI0NSwgNTUsIDI0LCAxLCAKLSAgICAyMTEsIDgsIDI0LCAxLCA3MywgMjQsIDI0NCwgMTAzLCAyNCwgMSwgMjE4LCAyMTMsIDI0LCAxLCAyMjgsIDIxNiwgMjQsIDEsIAotICAgIDIyOCwgMjE4LCAyNCwgMSwgMjI4LCAyMjEsIDI0LCAxLCAyMjMsIDE5LCAyNCwgMSwgMjIzLCAwLCAyNCwgMSwgMjIzLCA4LCAKLSAgICAyNCwgMSwgMjIzLCAxMywgMjQsIDEsIDIyMiwgMjU0LCAyNCwgMSwgMjMwLCAyMTAsIDI0LCAxLCAyMzAsIDIwNywgMjQsIDEsIAotICAgIDIzMCwgMjExLCAyNCwgMSwgMjM0LCAyMjEsIDI0LCAxLCAyMjUsIDkwLCAyNCwgMSwgMjI1LCA3NiwgMjQsIDEsIDIyNSwgCi0gICAgODIsIDI0LCAxLCAyMjUsIDc5LCAyNCwgMSwgMjI1LCA5MywgMjQsIDEsIDIyNSwgNzcsIDI0LCAxLCAyMzQsIDIxOSwgMjQsIAotICAgIDEsIDIzNCwgMjE3LCAyNCwgMSwgMjE5LCAxNDEsIDI0LCAxLCAyMTksIDEzOSwgMjQsIDEsIDIxOSwgMTMxLCAyNCwgMSwgCi0gICAgMjE5LCAxMzYsIDI0LCAxLCAyMTksIDE0NiwgMjQsIDEsIDIyNiwgMzIsIDI0LCAxLCAyMTgsIDIxNiwgMjQsIDEsIDIxMSwgCi0gICAgMjYsIDI0LCAxLCAyMTEsIDIyLCAyNCwgMSwgMjExLCAyMywgMjQsIDEsIDIzNCwgMjIwLCAyNCwgMSwgMjE4LCAyMTcsIDI0LCAKLSAgICAxLCAyMTEsIDMyLCAyNCwgMSwgMjEwLCAyMzgsIDI0LCAxLCAyMTAsIDIzNywgMjQsIDEsIDIxMCwgMjQwLCAyNCwgMSwgCi0gICAgMjEwLCAyMDMsIDI0LCAxLCAyMTAsIDIwNCwgMjQsIDEsIDIxMCwgMjA3LCAyNCwgMSwgMjU0LCAzNCwgMjQsIDEsIDI1NCwgCi0gICAgMjgsIDEwOSwgMjU0LCA5OSwgMjMyLCAyMDMsIDc4LCAxMDksIDI1NCwgOTksIDIyMywgNTAsIDc4LCAxMDksIDI1NCwgOTksIAotICAgIDEyMywgNzgsIDEwOSwgMjU0LCA5OSwgMTEzLCA3OCwgMTA5LCAyNTQsIDk5LCAxMzQsIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgCi0gICAgMTEsIDc4LCAxMDksIDI1NCwgOTksIDIxNiwgMTQsIDc4LCAxMDksIDI1NCwgOTksIDIzMCwgMjI0LCA3OCwgMTA5LCAyNTQsIAotICAgIDk5LCAyNTEsIDE3NSwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCA5MiwgNzgsIDEwOSwgMjU0LCA5OSwgMjIxLCAxNzYsIDc4LCAKLSAgICAxMDksIDI1NCwgOTksIDIxNiwgMTY5LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIDQsIDc4LCAxMDksIDI1NCwgOTksIDI0MSwgCi0gICAgMjI0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDUsIDIyNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjMxLCAxODYsIDc4LCAyNTEsIAotICAgIDE4NCwgMSwgMjUxLCAxMjUsIDI1MSwgMTg0LCAxLCAyMTAsIDQ0LCAyNTEsIDE4NCwgMSwgMjM1LCAxMDgsIDI1MSwgMTg0LCAKLSAgICAxLCAyNDIsIDExMywgMjUxLCAxODQsIDEsIDI0NSwgMjA5LCAyNTEsIDE4NCwgMSwgMjQ1LCAxMzUsIDI1MSwgMTg0LCAxLCAKLSAgICAyMjYsIDE4MywgMjUxLCAxODQsIDEsIDIyNiwgMTg3LCAyNTEsIDE4NCwgMSwgMjM1LCAxNzksIDI1MSwgMTg0LCAxLCAyNTQsIAotICAgIDEwMSwgMjUxLCAxODQsIDEsIDIzNSwgMjI0LCAyNTEsIDE4NCwgMSwgMjE0LCAxNjgsIDI1MSwgMTg0LCAxLCAyMzYsIDE2LCAKLSAgICAyNTEsIDE4NCwgMSwgMjI5LCA1NywgMjUxLCAxODQsIDEsIDI1NCwgMTk1LCAyNTEsIDE4NCwgMSwgMjUzLCAxODcsIDI1MSwgCi0gICAgMTg0LCAxLCAyNTQsIDEzNiwgMjUxLCAxODQsIDEsIDIyNiwgMjA0LCAyNTEsIDE4NCwgMSwgMjI2LCAxODksIDI1MSwgMTg0LCAKLSAgICAxLCAyMzUsIDIyMSwgMjUxLCAxODQsIDQwLCAxLCAyMjYsIDEwNSwgMjUxLCAxODQsIDQwLCAxLCAyMTcsIDE1MiwgMjUxLCAKLSAgICAxODQsIDQwLCAxLCAyMzUsIDIzLCAyNTEsIDE4NCwgNDAsIDEsIDI0MiwgNjAsIDI1MSwgMTg0LCAxLCAyNDIsIDI1MCwgCi0gICAgMjUxLCAxODQsIDEsIDIzMiwgMjU1LCAyNTEsIDE4NCwgMSwgMjA5LCAyNTAsIDksIDIxOCwgMTAzLCAyMTcsIDE1MiwgOSwgCi0gICAgMjE4LCAxMDMsIDIxMiwgNCwgOSwgMjE4LCAxMDMsIDIxMSwgMTU4LCA5LCAyMTgsIDEwMywgMjUxLCA3OSwgOSwgMjE4LCAKLSAgICAxMDMsIDIxNywgMjU0LCA5LCAyMTgsIDEwMywgMjQwLCAxNTgsIDksIDIxOCwgMTAzLCAyNDAsIDE2MiwgOSwgMjE4LCAxMDMsIAotICAgIDI0MCwgMjMxLCA5LCAyMTgsIDEwMywgMjQwLCAxNTksIDksIDIxOCwgMTAzLCAyMTcsIDE1NSwgOSwgMjE4LCAxMDMsIDI0MCwgCi0gICAgMTYxLCA5LCAyMTgsIDEwMywgMjQwLCAxNTcsIDksIDIxOCwgMTAzLCAyNDAsIDIyOSwgOSwgMjE4LCAxMDMsIDI0MCwgMTYwLCAKLSAgICA5LCAyMTgsIDEwMywgMjQwLCAxNTYsIDksIDIxOCwgMTAzLCAyMzAsIDI1LCA5LCAyMTgsIDEwMywgMjQyLCA2MCwgOSwgCi0gICAgMjE4LCAxMDMsIDIyMiwgOTEsIDksIDIxOCwgMTAzLCAyMjYsIDEwNSwgOSwgMjE4LCAxMDMsIDIxOSwgMjEsIDksIDIxOCwgCi0gICAgMTAzLCAyNDksIDYwLCA5LCAyMTgsIDEwMywgMjQwLCAxNjMsIDksIDIxOCwgMTAzLCAyNDEsIDE5MCwgOSwgMjE4LCAxMDMsIAotICAgIDIxNywgMTY0LCA5LCAyMTgsIDEwMywgMjE3LCAyMzMsIDksIDIxOCwgMTAzLCAyMTgsIDE2OCwgOSwgMjE4LCAxMDMsIDIyMCwgCi0gICAgMTEwLCA5LCAyMTgsIDEwMywgMjI1LCAyMjQsIDksIDIxOCwgMTAzLCAyMjQsIDk4LCA5LCAyMTgsIDEwMywgMjE2LCA0MywgCi0gICAgOSwgMjE4LCAxMDMsIDIxNywgMTU0LCA5LCAyMTgsIDEwMywgMjE3LCAyNDQsIDksIDIxOCwgMTAzLCAyNDAsIDE3MCwgOSwgCi0gICAgMjE4LCAxMDMsIDI0MCwgMTU1LCA5LCAyMTgsIDEwMywgMjI1LCAxNDksIDksIDIxOCwgMTAzLCAyMjQsIDk2LCA1NiwgMSwgCi0gICAgNCwgMjMzLCAyMTcsIDU2LCAxLCA0LCAyMTksIDE5MSwgNTYsIDEsIDQsIDIxOCwgODMsIDU2LCAxLCA0LCAxMTEsIDU2LCAxLCAKLSAgICA0LCAyMjcsIDIzNywgNTYsIDEsIDQsIDE2MiwgNTYsIDEsIDQsIDI0MSwgMTgwLCA1NiwgMSwgNCwgMjQwLCAyMjIsIDU2LCAKLSAgICAxLCA0LCAyNDEsIDIzOCwgNTYsIDEsIDQsIDI0MSwgNjgsIDU2LCAxLCA0LCAyMzAsIDEwMiwgNTYsIDEsIDQsIDIwNSwgNTYsIAotICAgIDEsIDQsIDIyMywgMzUsIDU2LCAxLCA0LCAyMjIsIDE0MCwgNTYsIDEsIDQsIDIyMywgMTI4LCA1NiwgMSwgNCwgMjIyLCAKLSAgICAyMTEsIDg4LCAyNCwgMjM0LCA1OCwgODgsIDI0LCAyMjgsIDIyNiwgODgsIDI0LCAyMTYsIDEwMSwgODgsIDI0LCAyMjMsIAotICAgIDI2LCA4OCwgMjQsIDIzMCwgMjE3LCA4OCwgMjQsIDIyNSwgOTUsIDg4LCAyNCwgMjE5LCAxNDgsIDg4LCAyNCwgMjM2LCA1NiwgCi0gICAgODgsIDI0LCAyNTAsIDQ2LCA4OCwgMjQsIDI1MCwgMTA2LCA4OCwgMjQsIDIzNCwgMTEwLCA4OCwgMjQsIDIxNiwgMTczLCAKLSAgICA4OCwgMjQsIDIyNSwgMTMxLCA4OCwgMjQsIDI0MSwgMTcyLCA4OCwgMjQsIDIzNCwgNTksIDYxLCA4OCwgMjQsIDIyOCwgCi0gICAgMjI3LCA2MSwgODgsIDI0LCAyMTYsIDEwMiwgNjEsIDg4LCAyNCwgMjIzLCAyNywgNjEsIDg4LCAyNCwgMjMwLCAyMTgsIDYxLCAKLSAgICA4OCwgMjQsIDIyNSwgOTYsIDYxLCA4OCwgMjQsIDIxOSwgMTQ5LCA2MSwgODgsIDI0LCAyMzYsIDU3LCA2MSwgODgsIDI0LCAKLSAgICAyNTAsIDQ3LCA2MSwgODgsIDI0LCAyNTAsIDEwNywgNjEsIDg4LCAyNCwgMjM0LCAxMTEsIDYxLCA4OCwgMjQsIDIxNiwgCi0gICAgMTc0LCA2MSwgODgsIDI0LCAyMjUsIDEzMiwgNjEsIDg4LCAyNCwgMjQxLCAxNzMsIDYxLCA4OCwgMjQsIDI1MCwgNDcsIDcwLCAKLSAgICA4OCwgMjM0LCAzLCAxMzUsIDIyNiwgMjE3LCA4OCwgMjM0LCAzLCAxMzUsIDE0NCwgMjQwLCAyMjIsIDg4LCAxNTQsIDExMCwgCi0gICAgODgsIDE1NCwgMTA1LCA4OCwgMTU0LCAxNTgsIDg4LCAxNTQsIDE2MSwgODgsIDE1NCwgMTg5LCA4OCwgMTU0LCAxOTQsIDg4LCAKLSAgICAxNTQsIDE5OCwgODgsIDE1NCwgMTk1LCA4OCwgMTU0LCAyMDAsIDg4LCAxNTQsIDIxNiwgMjQ3LCA4OCwgMTU0LCAyMzAsIAotICAgIDEyOCwgODgsIDE1NCwgMjQ0LCA5NiwgODgsIDE1NCwgMjEyLCA0MCwgODgsIDE1NCwgMjExLCAyMTQsIDg4LCAxNTQsIDIzMSwgCi0gICAgMzksIDg4LCAxNTQsIDI0NSwgMjIzLCA4OCwgMTU0LCAyMTgsIDM3LCA4OCwgMTU0LCAyMTgsIDEzMiwgODgsIDE1NCwgMjQxLCAKLSAgICAyNDQsIDg4LCAxNTQsIDIxOSwgNTQsIDg4LCAxNTQsIDIyOSwgMjA0LCA4OCwgMTU0LCAyMTksIDQsIDg4LCAxNTQsIDI0NCwgCi0gICAgMTAyLCA4OCwgMTU0LCAyNDksIDIwMCwgODgsIDE1NCwgMjMzLCAxMjUsIDg4LCAxNTQsIDIyMywgNzEsIDg4LCAxNTQsIAotICAgIDI1MSwgMTUsIDg4LCAxNTQsIDIxOCwgODcsIDg4LCAxNTQsIDIxOCwgMjAsIDg4LCAxNTQsIDI0NSwgMTI3LCA4OCwgMTU0LCAKLSAgICAyMjMsIDYzLCA4OCwgMTU0LCAyNTQsIDE1MCwgODgsIDE1NCwgMjQ0LCAxMjgsIDg4LCAxNTQsIDIyMywgNjEsIDg4LCAxNTQsIAotICAgIDIyMCwgMTU2LCA4OCwgMTU0LCAyMjMsIDEyNywgMzcsIDE1NCwgMjI0LCAxMiwgMzcsIDE1NCwgMjM0LCA4MCwgMzcsIDE1NCwgCi0gICAgMjIxLCAxOTgsIDM3LCAxNTQsIDIzMywgMjU1LCAzNywgNTQsIDIxNiwgMjQ4LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAKLSAgICAzNywgNTQsIDIxNSwgNzQsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjE2LCAxNjMsIDIyNiwgMTk3LCA4NSwgCi0gICAgMjE4LCAyMzQsIDM3LCA1NCwgMjQ0LCAxNiwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyNDQsIDExNSwgMjI2LCAKLSAgICAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyMTksIDExMiwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyMjAsIAotICAgIDExNywgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyNDUsIDE4NSwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgCi0gICAgMjI1LCAyNTEsIDUwLCAzNywgNTQsIDIxNSwgNzQsIDExMCwgMzcsIDU0LCAyMTUsIDc0LCAxMDUsIDM3LCA1NCwgMjE1LCAKLSAgICA3NCwgMTU4LCAzNywgNTQsIDIxNSwgNzQsIDE2MSwgMzcsIDU0LCAyMTUsIDc0LCAxODksIDM3LCA1NCwgMjE1LCA3NCwgCi0gICAgMTk0LCAzNywgNTQsIDIxNSwgNzQsIDE5OCwgMzcsIDU0LCAyMTUsIDc0LCAxOTUsIDM3LCA1NCwgMjE1LCA3NCwgMjAwLCAKLSAgICAzNywgNTQsIDIxNiwgMTYyLCAzNywgNTQsIDIxNiwgMTYzLCAxMTAsIDM3LCA1NCwgMjE2LCAxNjMsIDEwNSwgMzcsIDU0LCAKLSAgICAyMTYsIDE2MywgMTU4LCAzNywgNTQsIDIxNiwgMTYzLCAxNjEsIDM3LCA1NCwgMjE2LCAxNjMsIDE4OSwgMzcsIDI0LCAyMzQsIAotICAgIDU4LCAzNywgMjQsIDIyOCwgMjI2LCAzNywgMjQsIDIxNiwgMTAxLCAzNywgMjQsIDIyMywgMjYsIDM3LCAyNCwgMjMwLCAKLSAgICAyMTcsIDM3LCAyNCwgMjI1LCA5NSwgMzcsIDI0LCAyMTksIDE0OCwgMzcsIDI0LCAyMzYsIDU2LCAzNywgMjQsIDI1MCwgNDYsIAotICAgIDM3LCAyNCwgMjUwLCAxMDYsIDM3LCAyNCwgMjM0LCAxMTAsIDM3LCAyNCwgMjE2LCAxNzMsIDM3LCAyNCwgMjI1LCAxMzEsIAotICAgIDM3LCAyNCwgMjQxLCAxNzIsIDM3LCAyNCwgMjM0LCA1OSwgNjEsIDM3LCAyNCwgMjI4LCAyMjcsIDYxLCAzNywgMjQsIDIxNiwgCi0gICAgMTAyLCA2MSwgMzcsIDI0LCAyMjMsIDI3LCA2MSwgMzcsIDI0LCAyMzAsIDIxOCwgNjEsIDM3LCAyNCwgMjI1LCA5NiwgNjEsIAotICAgIDM3LCAyNCwgMjE5LCAxNDksIDYxLCAzNywgMjQsIDIzNiwgNTcsIDYxLCAzNywgMjQsIDI1MCwgNDcsIDYxLCAzNywgMjQsIAotICAgIDI1MCwgMTA3LCA2MSwgMzcsIDI0LCAyMzQsIDExMSwgNjEsIDM3LCAyNCwgMjE2LCAxNzQsIDYxLCAzNywgMjQsIDIyNSwgCi0gICAgMTMyLCA2MSwgMzcsIDI0LCAyNDEsIDE3MywgNjEsIDM3LCAyMzQsIDMsIDEzNSwgMjUwLCAxNDgsIDM3LCAyMzQsIDMsIAotICAgIDEzNSwgMjM1LCA0NywgMzcsIDI0LCAyMzYsIDU3LCA3MCwgMjM0LCAzLCAyMTgsIDE1OSwgODcsIDM3LCAxNTQsIDExMCwgCi0gICAgMzcsIDE1NCwgMTA1LCAzNywgMTU0LCAxNTgsIDM3LCAxNTQsIDE2MSwgMzcsIDE1NCwgMTg5LCAzNywgMTU0LCAxOTQsIDM3LCAKLSAgICAxNTQsIDE5OCwgMzcsIDE1NCwgMTk1LCAzNywgMTU0LCAyMDAsIDM3LCAxNTQsIDIxNiwgMjQ3LCAzNywgMTU0LCAyMzAsIAotICAgIDEyOCwgMzcsIDE1NCwgMjQ0LCA5NiwgMzcsIDE1NCwgMjEyLCA0MCwgMzcsIDE1NCwgMjExLCAyMTQsIDM3LCAxNTQsIDIzMSwgCi0gICAgMzksIDM3LCAxNTQsIDI0NSwgMjIzLCAzNywgMTU0LCAyMTgsIDM3LCAzNywgMTU0LCAyMTgsIDEzMiwgMzcsIDE1NCwgMjQxLCAKLSAgICAyNDQsIDM3LCAxNTQsIDIxOSwgNTQsIDM3LCAxNTQsIDIyOSwgMjA0LCAzNywgMTU0LCAyMTksIDQsIDM3LCAxNTQsIDI0NCwgCi0gICAgMTAyLCAzNywgMTU0LCAyNDksIDIwMCwgMzcsIDE1NCwgMjMzLCAxMjUsIDM3LCAxNTQsIDIyMSwgMTc0LCAzNywgMTU0LCAKLSAgICAyMzEsIDE4OSwgMzcsIDE1NCwgMjQ0LCAxMzcsIDM3LCAxNTQsIDIxOCwgNDksIDM3LCAxNTQsIDI0NSwgMzQsIDM3LCAxNTQsIAotICAgIDIyNCwgMTg3LCAzNywgMTU0LCAyNTMsIDE5NiwgMzcsIDE1NCwgMjM1LCAxNTksIDM3LCAxNTQsIDIyMywgNjEsIDM3LCAKLSAgICAxNTQsIDI0OSwgMTY0LCAzNywgMTU0LCAyNDksIDE1NSwgMzcsIDE1NCwgMjQxLCAxNjUsIDM3LCAxNTQsIDI1MCwgMTc0LCAKLSAgICAzNywgMTU0LCAyMzIsIDExMCwgMzcsIDE1NCwgMjMzLCA0NiwgMzcsIDE1NCwgMjIyLCAyNTEsIDM3LCAxNTQsIDIzMSwgODMsIAotICAgIDM3LCAxNTQsIDIyMywgODcsIDM3LCAxNTQsIDIxOCwgODcsIDM3LCAxNTQsIDIxOCwgMjAsIDM3LCAxNTQsIDI0NSwgMTI3LCAKLSAgICAzNywgMTU0LCAyMjMsIDYzLCAzNywgMTU0LCAyNTQsIDE1MCwgMzcsIDE1NCwgMjI4LCAyMTIsIDM3LCA1NCwgMjE2LCAxNjMsIAotICAgIDE5NCwgMzcsIDU0LCAyMTYsIDE2MywgMTk4LCAzNywgNTQsIDIxNiwgMTYzLCAxOTUsIDM3LCA1NCwgMjE2LCAxNjMsIDIwMCwgCi0gICAgMzcsIDU0LCAyNDQsIDE1LCAzNywgNTQsIDI0NCwgMTYsIDExMCwgMzcsIDU0LCAyNDQsIDE2LCAxMDUsIDM3LCA1NCwgMjQ0LCAKLSAgICAxNiwgMTU4LCAzNywgNTQsIDI0NCwgMTYsIDE2MSwgMzcsIDU0LCAyNDQsIDE2LCAxODksIDM3LCA1NCwgMjQ0LCAxNiwgCi0gICAgMTk0LCAzNywgNTQsIDI0NCwgMTYsIDE5OCwgMzcsIDU0LCAyNDQsIDE2LCAxOTUsIDM3LCA1NCwgMjQ0LCAxNiwgMjAwLCAKLSAgICAzNywgNTQsIDI0NCwgMTE0LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzUsIDEzMywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQ0LCAxNDgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzMSwgMTYwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNTQsIDQ3LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyMzEsIDEzMiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjM1LCA0NSwgMTA5LCAyMTcsIDMsIAotICAgIDE2LCAzMSwgMjM1LCA0NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjUzLCAxODgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyMCwgCi0gICAgMTM2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjYsIDIzOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjI4LCA0MCwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQ4LCA4NSwgNDIsIDI0MSwgMTkwLCA0MiwgMjQ1LCA4OCwgNDIsIDI0NSwgNDMsIDIzMiwgCi0gICAgMjE5LCAyMzIsIDI0MCwgNTAsIDM3LCA1NiwgNjEsIDM3LCA1NiwgNzMsIDM3LCA1NiwgNzAsIDM3LCA1NiwgNzUsIDM3LCAKLSAgICA1NiwgNzYsIDM3LCA1NiwgMTc2LCAzNywgNTYsIDIzNCwgOTIsIDM3LCA1NiwgMjMzLCAyMTcsIDM3LCA1NiwgMjM0LCAxODIsIAotICAgIDM3LCA1NiwgMjM0LCAyOCwgMzcsIDU2LCAyMDYsIDM3LCA1NiwgMjE5LCAxOTEsIDM3LCA1NiwgMjE4LCA4MywgMzcsIDU2LCAKLSAgICAyMjEsIDE4MSwgMzcsIDU2LCAyMTksIDU4LCAzNywgNTYsIDIxNywgMTA1LCAzNywgNTYsIDIxNiwgMTE3LCAzNywgNTYsIAotICAgIDIxNSwgMTE4LCAzNywgNTYsIDIxNywgMjIsIDM3LCA1NiwgMTExLCAzNywgNTYsIDE5NywgMzcsIDU2LCAyMjgsIDIzMywgCi0gICAgMzcsIDU2LCAyMjcsIDIzNywgMzcsIDU2LCAyMjksIDEwNywgMzcsIDU2LCAyMjgsIDc0LCAzNywgNTYsIDE2MiwgMzcsIDU2LCAKLSAgICAyNDEsIDE4MCwgMzcsIDU2LCAyNDAsIDIyMiwgMzcsIDU2LCAyNDEsIDIzOCwgMzcsIDU2LCAyNDEsIDY4LCAzNywgNTYsIAotICAgIDE4NCwgMzcsIDU2LCAyMzAsIDIzMCwgMzcsIDU2LCAyMzAsIDEwMiwgMzcsIDU2LCAyMzEsIDkxLCAzNywgNTYsIDIzMCwgCi0gICAgMTYxLCAzNywgNTYsIDE5MSwgMzcsIDU2LCAyMTAsIDIxMiwgMzcsIDU2LCAyMTAsIDI0NCwgMzcsIDU2LCAyMDUsIDM3LCAKLSAgICA1NiwgMjIzLCAzNSwgMzcsIDU2LCAyMjIsIDE0MCwgMzcsIDU2LCAyMjMsIDEyOCwgMzcsIDU2LCAyMjIsIDIxMSwgMzcsIAotICAgIDU2LCAyMTIsIDY1LCAzNywgNTYsIDIxMSwgMjUwLCAzNywgNTYsIDIxMiwgMjIsIDM3LCA1NiwgMjExLCAyMjcsIDQyLCAKLSAgICAyNTQsIDcxLCA0MiwgMjUzLCAyMzksIDQyLCAyNTQsIDk1LCA0MiwgMjU1LCAzMSwgNDIsIDIzNSwgMjI2LCA0MiwgMjM1LCAKLSAgICAxOTYsIDQyLCAyMTQsIDE2NiwgNDIsIDI0NSwgNjYsIDQyLCAyNDUsIDIwNiwgNDIsIDIyNiwgMTg2LCA0MiwgMjI2LCAxODAsIAotICAgIDQyLCAyMzQsIDI0NSwgNDIsIDIzNCwgMjE0LCA0MiwgMjM0LCAyMTEsIDQyLCAyNDMsIDkyLCA0MiwgMjQzLCAxMDEsIDQyLCAKLSAgICAyNDIsIDIwNCwgNDIsIDI0MiwgMjAwLCA0MiwgMjMzLCAxNTAsIDQyLCAyNDIsIDE5MywgNDIsIDIzNCwgNzIsIDQyLCAyMzQsIAotICAgIDcxLCA0MiwgMjM0LCA3MCwgNDIsIDIzNCwgNjksIDQyLCAyNDIsIDg2LCA0MiwgMjQyLCA4NSwgNDIsIDIzMywgMTkzLCA0MiwgCi0gICAgMjMzLCAxOTUsIDQyLCAyMzQsIDE3OCwgNDIsIDIzNCwgMSwgNDIsIDIzNCwgOCwgNDIsIDIyMiwgMTYsIDQyLCAyMjEsIAotICAgIDIzNywgNDIsIDIxOSwgMTI5LCA0MiwgMjIwLCAxNDEsIDQyLCAyMjAsIDE0MCwgNDIsIDI0OCwgMjE4LCA0MiwgMjQ4LCAzNiwgCi0gICAgNDIsIDI0NywgMTIxLCA0MiwgMjE2LCAzMiwgNDIsIDIyOSwgMjAwLCA0MiwgMjI4LCA0MSwgNDIsIDI0MiwgMzIsIDQyLCAKLSAgICAyMjYsIDg0LCA0MiwgMjI2LCA4MywgNDIsIDI1MiwgMTg4LCA0MiwgMjI1LCAxMDUsIDQyLCAyMjUsIDY5LCA0MiwgMjI1LCAKLSAgICA3MCwgNDIsIDI1MSwgMjM0LCA0MiwgMjQwLCAyMjEsIDQyLCAyNDAsIDIxNywgNDIsIDI1MSwgOTEsIDQyLCAyNDAsIDIwNCwgCi0gICAgNDIsIDI0MSwgMjE1LCA0MiwgMjI1LCAxNTksIDQyLCAyMjUsIDE5NCwgNDIsIDI0MSwgMTk4LCA0MiwgMjI1LCAxOTEsIDQyLCAKLSAgICAyMjUsIDIwNywgNDIsIDI1MiwgNjEsIDQyLCAyMjUsIDYsIDQyLCAyNTEsIDE4MCwgNDIsIDI0MSwgNTYsIDQyLCAyMjQsIAotICAgIDI1MCwgNDIsIDI0MSwgNDgsIDQyLCAyNDEsIDUwLCA0MiwgMjMxLCAyMDEsIDQyLCAyMzEsIDE5NywgNDIsIDIzMSwgMjA2LCAKLSAgICA0MiwgMjMxLCAxNTAsIDQyLCAyMzEsIDE3NSwgNDIsIDIzMCwgMTk3LCA0MiwgMjMwLCAxNzYsIDQyLCAyMzAsIDE3NSwgNDIsIAotICAgIDIzMSwgNzQsIDQyLCAyMzEsIDcxLCA0MiwgMjMxLCA3NSwgNDIsIDIxMSwgMTAyLCA0MiwgMjExLCAxMDAsIDQyLCAyMTAsIAotICAgIDIwMSwgNDIsIDIyMiwgMjI2LCA0MiwgMjIyLCAyMzAsIDQyLCAyMjIsIDExNywgNDIsIDIyMiwgMTExLCA0MiwgMjIzLCA4NSwgCi0gICAgNDIsIDIyMywgODIsIDQyLCAyMTIsIDM4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjEwLCA4NiwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDExMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDEwNSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE1OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE2MSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE4OSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE5NCwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE5OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE5NSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIwMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNiwgMjQ3LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ1LCAxNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAKLSAgICAyMTUsIDc2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE2LCAxNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0MCwgMjM5LCAyNDQsIDUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyNDQsIDExOCwgMTA5LCAyMTcsIDMsIAotICAgIDE2LCAzMSwgMjQwLCAyMzksIDIxOSwgMTE5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjIwLCAxMTksIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyNDUsIDE5MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIyOCwgCi0gICAgMTk3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA3MywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAKLSAgICAyMzksIDIxNSwgNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDYzLCAxMDksIDIxNywgMywgMTYsIAotICAgIDMxLCAyNDAsIDIzOSwgMjE1LCA2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNjksIDQyLCAyNDAsIAotICAgIDIzMCwgNDIsIDI0OCwgMjIxLCA0MiwgMjUzLCAxOTIsIDQyLCAxMzAsIDQyLCAyMjYsIDEyNSwgNDIsIDIyNSwgMjI1LCA0MiwgCi0gICAgMjQ3LCAxNDcsIDQyLCAyNDcsIDE0OCwgMjE4LCAyMzMsIDQyLCAyNDcsIDE0OCwgMjQ5LCAxMDgsIDQyLCAyMzUsIDE1NiwgCi0gICAgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyNDEsIDIxNiwgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyMTcsIDE3NCwgNDIsIAotICAgIDI0NSwgOTEsIDIyOSwgMjA1LCAyMTcsIDc0LCA0MiwgMjQ1LCA5MSwgMjI5LCAyMDUsIDIzMSwgNzAsIDQyLCAyNDksIDE1NywgCi0gICAgNDIsIDIyNiwgOTAsIDI1NCwgMTI1LCA0MiwgMTk3LCA0MiwgMjMwLCAxMDMsIDYxLCA0MiwgMTg0LCA0MiwgMTc2LCA0MiwgCi0gICAgMjM0LCAxODUsIDQyLCAyMzEsIDEyOSwgNDIsIDI0MywgODAsIDQyLCAyNTEsIDE4LCA0MiwgMjM0LCAxODQsIDQyLCAyMjUsIAotICAgIDE1MCwgNDIsIDIyOSwgODEsIDQyLCAyMzAsIDEwMywgMjQ1LCA2LCA0MiwgMjMwLCAxMDMsIDI0MywgMjAyLCA0MiwgMjMxLCAKLSAgICAxNSwgNDIsIDIzNCwgMTM0LCA0MiwgMjQwLCAxNjMsIDQyLCAyMzQsIDk0LCA0MiwgMjMwLCAyMzIsIDQyLCAyNDIsIDIxNiwgCi0gICAgNDIsIDIxNiwgMTE5LCA0MiwgMjMwLCAxMDMsIDE1NiwgNDIsIDIzMCwgMTY5LCA0MiwgMjQ3LCAxNTcsIDQyLCAyMzQsIDQwLCAKLSAgICA0MiwgMjQ0LCA0NSwgNDIsIDIyOCwgMTEyLCA0MiwgMjMwLCAxMDMsIDE5MywgNDIsIDIzMCwgMTY2LCA0MiwgMjQ5LCAyMzksIAotICAgIDQyLCAyMzQsIDM0LCA0MiwgMjMwLCAxNjcsIDIxOCwgMjMzLCA0MiwgMjQ5LCAyNDAsIDIxOCwgMjMzLCA0MiwgMjMyLCA1MCwgCi0gICAgMjE4LCAyMzMsIDQyLCAyMzQsIDM1LCAyMTgsIDIzMywgNDIsIDIzMCwgMTY3LCAyNDksIDEwOCwgNDIsIDI0OSwgMjQwLCAKLSAgICAyNDksIDEwOCwgNDIsIDIzMiwgNTAsIDI0OSwgMTA4LCA0MiwgMjM0LCAzNSwgMjQ5LCAxMDgsIDQyLCAyMzIsIDUwLCAxMTcsIAotICAgIDIyMiwgOTEsIDQyLCAyMzIsIDUwLCAxMTcsIDIyMiwgOTIsIDIxOCwgMjMzLCA0MiwgMTkwLCA0MiwgMjMzLCAyNTEsIDQyLCAKLSAgICAyMzAsIDEwNSwgNDIsIDI0MiwgMTUxLCA0MiwgMjIzLCAxNzYsIDQyLCAyMjMsIDE3NywgMTE3LCAyMjIsIDkxLCA0MiwgCi0gICAgMjIzLCAxNzcsIDExNywgMjIyLCA5MiwgMjE4LCAyMzMsIDQyLCAyMjQsIDE2MiwgNDIsIDIyOCwgMTMsIDQyLCAyMzAsIAotICAgIDEwMywgMjIyLCA5MSwgNDIsIDIzMCwgMTA0LCA0MiwgMjI0LCAxMTYsIDQyLCAyMjcsIDE3NiwgNDIsIDIzMCwgMTAzLCAKLSAgICAyMTQsIDEwNSwgNDIsIDIzMCwgNDksIDQyLCAyMzMsIDE4NSwgNDIsIDIzMCwgNTAsIDIzMSwgNzQsIDQyLCAyMjQsIDExNSwgCi0gICAgNDIsIDIyNywgMTc1LCA0MiwgMjMwLCAxMDMsIDIxMiwgOTgsIDQyLCAyMzAsIDQzLCA0MiwgMjMzLCAxODMsIDQyLCAyMzAsIAotICAgIDQ0LCAyMzEsIDc0LCA0MiwgMjM1LCAyNCwgMjI2LCAyMjAsIDQyLCAyMzIsIDUwLCAyMjYsIDIyMCwgNDIsIDI1NCwgMTM2LCAKLSAgICA0MiwgMjUxLCAxNjAsIDQyLCAyNTAsIDIxNCwgNDIsIDI1MCwgMTkxLCA0MiwgMjUxLCA2NywgMTE3LCAyMzQsIDEzNCwgNDIsIAotICAgIDI0OSwgMjM4LCA0MiwgMjQ4LCAxNDIsIDQyLCAyNDIsIDcyLCA0MiwgMTYyLCA0MiwgMjQwLCAyMzEsIDQyLCAyMzUsIDI1NSwgCi0gICAgNDIsIDIzNCwgNDcsIDQyLCAyMzQsIDM1LCAyNTAsIDI1MCwgNDIsIDIzMywgMjE5LCA0MiwgMjMyLCAxNTksIDQyLCAyMzIsIAotICAgIDE1OCwgNDIsIDIzMiwgMTQ3LCA0MiwgMjMyLCA2MywgNDIsIDIzMSwgMTMwLCAyMTksIDc5LCA0MiwgMjMwLCAxOTYsIDQyLCAKLSAgICAyMzAsIDE1MiwgNDIsIDIyNSwgMTQ4LCA0MiwgMjI1LCAxOSwgNDIsIDIyNCwgMjE5LCA0MiwgMjI0LCAyMTcsIDQyLCAyMTgsIAotICAgIDIyNywgNDIsIDIxOCwgMiwgNDIsIDIxMiwgMjQsIDQyLCAyMTQsIDEwNiwgMTE3LCAxOTMsIDQyLCAxMTUsIDExNywgMTkzLCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTEwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTA1LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTU4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTYxLCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTg5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTk0LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTk4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTk1LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjAwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAKLSAgICAyNDcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDUsIDE2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAKLSAgICAxNDYsIDIxNSwgNzYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTYsIDE2NCwgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQ4LCAxNDYsIDI0NCwgNSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDI0NCwgMTE4LCAxMDksIDIxNywgCi0gICAgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE5LCAxMTksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMjAsIDExOSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDI0NSwgMTkwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgCi0gICAgMjI4LCAxOTcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDczLCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDgsIDE0NiwgMjE1LCA2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjMsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2OSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNzAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIAotICAgIDY1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAKLSAgICAxNDYsIDIxNSwgNzIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY4LCAxMDksIDIxNywgMywgMTYsIAotICAgIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTYsIDE2MSwgNDIsIDI0MywgCi0gICAgMTE4LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNDksIDE0MCwgMjQxLCAyMjMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIAotICAgIDIyMywgMTIyLCAyNDUsIDIyMywgMjQxLCAxOTIsIDMxLCAyNDcsIDIzMSwgMjUzLCAyMDcsIDIxNiwgMTk2LCAyNTIsIDU2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxMCwgMjIzLCAyNDQsIDM4LCAyNDEsIDE5MiwgMzEsIDIxMiwgNTksIDI0MSwgMTkyLCAzMSwgCi0gICAgMjQ5LCAyMDMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1NCwgMywgMjQxLCAxOTIsIDMxLCAyNDEsIDYwLCAyMTYsIDM4LCAKLSAgICAyNDEsIDE5MiwgMzEsIDQsIDIxNywgNjEsIDI0MSwgMTkyLCAzMSwgMjE1LCAyMzcsIDI0MSwgMTkyLCAzMSwgMjI1LCAyMTksIAotICAgIDI0MSwgMTkyLCAzMSwgMjE4LCAxNTgsIDI0MSwgMTkyLCAzMSwgMjQ0LCAxMzksIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIAotICAgIDIyNCwgMjQwLCAyNDEsIDE5MiwgMzEsIDIzMCwgMTU1LCAyNDEsIDE5MiwgMzEsIDI0NSwgMTI2LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0NCwgMzksIDI0MSwgMTkyLCAzMSwgMjExLCAyMDcsIDIyNiwgMTk3LCAyMTYsIDE5NiwgMjQ4LCA4NiwgMjQxLCAxOTIsIAotICAgIDMxLCAyNTQsIDUxLCAyNDEsIDE5MiwgMzEsIDI0OSwgMTg1LCAyNDEsIDE5MiwgMzEsIDI1MSwgMjI3LCAyMTYsIDEzOCwgCi0gICAgMjQxLCAxOTIsIDMxLCAyNDIsIDE0OSwgMjQxLCAxOTIsIDMxLCAyMTgsIDI0NSwgMjU0LCA3MCwgMjQxLCAxOTIsIDMxLCAKLSAgICAyMjMsIDUzLCAyNDEsIDE5MiwgMzEsIDIzNSwgMjIwLCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMTcsIDYxLCAyNDEsIAotICAgIDE5MiwgMzEsIDIzMCwgMTExLCAyNDksIDE1OSwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjI0LCAxOTcsIDI0MSwgMTkyLCAKLSAgICAzMSwgMjE2LCAxOTYsIDI1NSwgMTgsIDIxMiwgNDAsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MCwgOCwgMjQ0LCA5NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMzUsIDIzMywgMjQxLCAxOTIsIDMxLCAyNDYsIDU3LCAyNDEsIDE5MiwgMzEsIDIyMywgNTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIyNCwgMjI0LCAyNDEsIDE5MiwgMzEsIDIyNCwgMTc3LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0OCwgMTYxLCA2NCwgMjE2LCAxOTYsIDIzMiwgMjMwLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNDQsIDE3NCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMjYsIDE2MywgMjQxLCAxOTIsIDMxLCAyMjYsIDI0NCwgMjQxLCAxOTIsIDMxLCAyNDgsIDU5LCAyNDEsIAotICAgIDE5MiwgMzEsIDI0OCwgNzksIDI0MSwgMTkyLCAzMSwgMjM1LCAyNDcsIDI0MSwgMTkyLCAzMSwgMjUxLCAxNDksIDI0MSwgCi0gICAgMTkyLCAzMSwgMjQ5LCAyMjEsIDIxNiwgNDIsIDIzMSwgNzYsIDI0MSwgMTkyLCAzMSwgMjQzLCA4NywgMjE2LCAzOCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMjQsIDEyNSwgMjE0LCAxNTQsIDI0MSwgMTkyLCAzMSwgMjI2LCAxNjIsIDI0MSwgMTkyLCAzMSwgMjE2LCAKLSAgICAxOTYsIDIxMiwgMTMsIDI0MSwgMTkyLCAzMSwgMjIzLCA0NSwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjUwLCAyMjAsIAotICAgIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MywgMjU1LCAyMTYsIDEzMywgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjM0LCAKLSAgICAxNzksIDIxOCwgMTM0LCAyMzAsIDExNSwgMjQxLCAxOTIsIDMxLCAyNDgsIDMyLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMzEsIDE1MiwgMjMxLCAyMDIsIDI0MSwgMTkyLCAzMSwgMjU1LCAxOSwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjEyLCAKLSAgICA1NCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQzLCA0NywgMjExLCAyMzksIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIAotICAgIDIzNSwgNTIsIDIzMywgMTA3LCAyNDEsIDE5MiwgMzEsIDI0NywgMTg0LCAyNDEsIDE5MiwgMzEsIDIzMiwgMjIwLCAyNDEsIAotICAgIDE5MiwgMzEsIDIzNSwgMjIzLCAyMTUsIDE4NywgMjQxLCAxOTIsIDMxLCA0LCAyMjQsIDE5NywgMjQxLCAxOTIsIDMxLCAKLSAgICAyNTQsIDIxNywgMjQ5LCAyMTIsIDI0MSwgMTkyLCAzMSwgMjUyLCA1OSwgMjQ5LCAyMTIsIDgsIDMsIDIzNSwgMTYwLCA4LCAKLSAgICAzLCAyMzUsIDE1MywgOCwgMywgNzMsIDgsIDMsIDIzNSwgMTgyLCA4LCAzLCAyMzYsIDU4LCA4LCAzLCAyMzYsIDQxLCA4LCAKLSAgICAzLCAyMzYsIDYwLCA4LCAzLCAyMzYsIDU5LCA4LCAzLCAyNTMsIDIwNiwgOCwgMywgMjUzLCAxNjksIDgsIDMsIDYxLCA4LCAKLSAgICAzLCAyNTQsIDcyLCA4LCAzLCAyMTQsIDE2NCwgOCwgMywgMjE0LCAxNjcsIDgsIDMsIDIxNCwgMTY1LCA4LCAzLCAyMjYsIAotICAgIDE0MCwgOCwgMywgMjI2LCAxMTQsIDgsIDMsIDc2LCA4LCAzLCAyMjYsIDE3NSwgOCwgMywgMjQ1LCAzNSwgOCwgMywgNzUsIAotICAgIDgsIDMsIDIxMSwgMTk1LCA4LCAzLCAyNTEsIDIyOCwgOCwgMywgMjUxLCAyMjUsIDgsIDMsIDI1MiwgNiwgOCwgMywgMjUxLCAKLSAgICAyMzgsIDgsIDMsIDI1MSwgMjUxLCA4LCAzLCAyNTEsIDI1MCwgOCwgMywgMjUxLCAyNTMsIDgsIDMsIDI1MSwgMjUyLCA4LCAKLSAgICAzLCAyNTIsIDEyMSwgOCwgMywgMjUyLCAxMTMsIDgsIDMsIDI1MiwgMTkxLCA4LCAzLCAyNTIsIDE0MiwgOCwgMywgMjUxLCAKLSAgICAxMDEsIDgsIDMsIDI1MSwgMTA1LCA4LCAzLCAyNTEsIDEwMiwgOCwgMywgMjUxLCAxNzksIDgsIDMsIDI1MSwgMTYzLCA4LCAKLSAgICAzLCAyNTEsIDIwNSwgOCwgMywgMjUxLCAxODUsIDgsIDMsIDI1MiwgMjEsIDgsIDMsIDI1MiwgNzUsIDgsIDMsIDI1MiwgMzMsIAotICAgIDgsIDMsIDI1MSwgODcsIDgsIDMsIDI1MSwgODQsIDgsIDMsIDI1MSwgMTI1LCA4LCAzLCAyNTEsIDEwMCwgOCwgMywgMjUxLCAKLSAgICA5NCwgOCwgMywgMjUxLCA5OCwgOCwgMywgMjUxLCA3MiwgOCwgMywgMjUxLCA3MCwgOCwgMywgMjUxLCA3NywgOCwgMywgCi0gICAgMjUxLCA3NSwgOCwgMywgMjUxLCA3MywgOCwgMywgMjUxLCA3NCwgOCwgMywgMjI1LCA0OSwgOCwgMywgMjI1LCA0NSwgOCwgCi0gICAgMywgMjI1LCAxMDgsIDgsIDMsIDIyNSwgNTksIDgsIDMsIDIyNSwgNzUsIDgsIDMsIDIyNSwgMTAyLCA4LCAzLCAyMjUsIDk4LCAKLSAgICA4LCAzLCAyMjUsIDI0MCwgOCwgMywgMjI1LCAyMzAsIDgsIDMsIDE5MCwgOCwgMywgMjI2LCAyMSwgOCwgMywgMjI0LCAxMzUsIAotICAgIDgsIDMsIDIyNCwgMTM3LCA4LCAzLCAyMjQsIDEzNiwgOCwgMywgMjI0LCAyMzMsIDgsIDMsIDIyNCwgMjIyLCA4LCAzLCAKLSAgICAyMjUsIDE2LCA4LCAzLCAyMjQsIDI0NSwgOCwgMywgMjI0LCAxMjEsIDgsIDMsIDIyNCwgMTE3LCA4LCAzLCAyMjQsIDE1MCwgCi0gICAgOCwgMywgMjI0LCAxMzQsIDgsIDMsIDIyNCwgMTI2LCA4LCAzLCAyMjQsIDEzMiwgOCwgMywgMjI0LCAxMDAsIDgsIDMsIAotICAgIDIyNCwgOTksIDgsIDMsIDIyNCwgMTA0LCA4LCAzLCAyMjQsIDEwMywgOCwgMywgMjI0LCAxMDEsIDgsIDMsIDIyNCwgMTAyLCAKLSAgICA4LCAzLCAyNTIsIDk2LCA4LCAzLCAyNTIsIDk1LCA4LCAzLCAyNTIsIDEwMiwgOCwgMywgMjUyLCA5NywgOCwgMywgMjUyLCAKLSAgICA5OSwgOCwgMywgMjUyLCA5OCwgOCwgMywgMjUyLCAxMDEsIDgsIDMsIDI1MiwgMTAwLCA4LCAzLCAyNTIsIDEwOCwgOCwgMywgCi0gICAgMjUyLCAxMDcsIDgsIDMsIDI1MiwgMTExLCA4LCAzLCAyNTIsIDEwOSwgOCwgMywgMjUyLCA4NywgOCwgMywgMjUyLCA4OSwgCi0gICAgOCwgMywgMjUyLCA4OCwgOCwgMywgMjUyLCA5MiwgOCwgMywgMjUyLCA5MSwgOCwgMywgMjUyLCA5NCwgOCwgMywgMjUyLCAKLSAgICA5MywgOCwgMywgMjUyLCAxMDMsIDgsIDMsIDI1MiwgMTA2LCA4LCAzLCAyNTIsIDEwNCwgOCwgMywgMjUyLCA4MywgOCwgMywgCi0gICAgMjUyLCA4MiwgOCwgMywgMjUyLCA5MCwgOCwgMywgMjUyLCA4NiwgOCwgMywgMjUyLCA4NCwgOCwgMywgMjUyLCA4NSwgOCwgCi0gICAgMywgMjUyLCA3OSwgOCwgMywgMjUyLCA3OCwgOCwgMywgMjUyLCA4MSwgOCwgMywgMjUyLCA4MCwgOCwgMywgMjI5LCAxNjksIAotICAgIDgsIDMsIDIyOSwgMTY4LCA4LCAzLCAyMjksIDE3NCwgOCwgMywgMjI5LCAxNzAsIDgsIDMsIDIyOSwgMTcxLCA4LCAzLCAKLSAgICAyMjksIDE3MywgOCwgMywgMjI5LCAxNzIsIDgsIDMsIDIyOSwgMTc3LCA4LCAzLCAyMjksIDE3NiwgOCwgMywgMjI5LCAxNzksIAotICAgIDgsIDMsIDIyOSwgMTc4LCA4LCAzLCAyMjksIDE2NSwgOCwgMywgMjI5LCAxNjQsIDgsIDMsIDIyOSwgMTY3LCA4LCAzLCAKLSAgICAyMjksIDE2NiwgOCwgMywgMjI5LCAxNTgsIDgsIDMsIDIyOSwgMTU3LCA4LCAzLCAyMjksIDE2MiwgOCwgMywgMjI5LCAxNjEsIAotICAgIDgsIDMsIDIyOSwgMTU5LCA4LCAzLCAyMjksIDE2MCwgOCwgMywgMjI5LCAxNTIsIDgsIDMsIDIyOSwgMTUxLCA4LCAzLCAKLSAgICAyMjksIDE1NiwgOCwgMywgMjI5LCAxNTUsIDgsIDMsIDIyOSwgMTUzLCA4LCAzLCAyMjksIDE1NCwgOCwgMywgMjQxLCAxMTAsIAotICAgIDgsIDMsIDI0MSwgMTA5LCA4LCAzLCAyNDEsIDExNSwgOCwgMywgMjQxLCAxMTEsIDgsIDMsIDI0MSwgMTEyLCA4LCAzLCAKLSAgICAyNDEsIDExNCwgOCwgMywgMjQxLCAxMTMsIDgsIDMsIDI0MSwgMTE4LCA4LCAzLCAyNDEsIDExNywgOCwgMywgMjQxLCAxMjAsIAotICAgIDgsIDMsIDI0MSwgMTE5LCA4LCAzLCAyNDEsIDEwMSwgOCwgMywgMjQxLCAxMDMsIDgsIDMsIDI0MSwgMTAyLCA4LCAzLCAKLSAgICAyNDEsIDEwNiwgOCwgMywgMjQxLCAxMDUsIDgsIDMsIDI0MSwgMTA4LCA4LCAzLCAyNDEsIDEwNywgOCwgMywgMjQxLCA5NywgCi0gICAgOCwgMywgMjQxLCA5NiwgOCwgMywgMjQxLCAxMDQsIDgsIDMsIDI0MSwgMTAwLCA4LCAzLCAyNDEsIDk4LCA4LCAzLCAyNDEsIAotICAgIDk5LCA4LCAzLCAyNDEsIDkxLCA4LCAzLCAyNDEsIDk1LCA4LCAzLCAyNDEsIDk0LCA4LCAzLCAyNDEsIDkyLCA4LCAzLCAKLSAgICAyNDEsIDkzLCA4LCAzLCAyMzAsIDE3MiwgOCwgMywgMjMwLCAxNzEsIDgsIDMsIDIzMCwgMjMwLCA4LCAzLCAyMzAsIDE3OCwgCi0gICAgOCwgMywgMjMwLCAyMDMsIDgsIDMsIDIzMCwgMjIxLCA4LCAzLCAyMzAsIDIxOSwgOCwgMywgMjMxLCAxMzksIDgsIDMsIAotICAgIDIzMSwgMTM0LCA4LCAzLCAxODQsIDgsIDMsIDIzMSwgMTcyLCA4LCAzLCAyMzAsIDc0LCA4LCAzLCAyMzAsIDczLCA4LCAzLCAKLSAgICAyMzAsIDc3LCA4LCAzLCAyMzAsIDc1LCA4LCAzLCAyMzAsIDEyMSwgOCwgMywgMjMwLCAxMDcsIDgsIDMsIDIzMCwgMTYxLCAKLSAgICA4LCAzLCAyMzAsIDEyNiwgOCwgMywgMjMxLCAyNiwgOCwgMywgMjMxLCA5MSwgOCwgMywgMjMwLCA1NSwgOCwgMywgMjMwLCAKLSAgICA1MSwgOCwgMywgMjMwLCAxMDIsIDgsIDMsIDIzMCwgNzAsIDgsIDMsIDIzMCwgNjMsIDgsIDMsIDIzMCwgNjgsIDgsIDMsIAotICAgIDIzMCwgMjgsIDgsIDMsIDIzMCwgMjcsIDgsIDMsIDIzMCwgMzMsIDgsIDMsIDIzMCwgMzAsIDgsIDMsIDI0NCwgODMsIDgsIAotICAgIDMsIDI0NCwgNzgsIDgsIDMsIDI0NCwgMTIxLCA4LCAzLCAyNDQsIDk4LCA4LCAzLCAyNDQsIDE2NywgOCwgMywgMjQ0LCAKLSAgICAxNTgsIDgsIDMsIDI0NCwgMTk2LCA4LCAzLCAyNDQsIDE3MCwgOCwgMywgMjQ0LCAzLCA4LCAzLCAyNDQsIDQzLCA4LCAzLCAKLSAgICAyNDQsIDI3LCA4LCAzLCAyNDMsIDIxOCwgOCwgMywgMjQzLCAyMTcsIDgsIDMsIDI0MywgMjM0LCA4LCAzLCAyNDMsIDIyMywgCi0gICAgOCwgMywgMjQzLCAyMjEsIDgsIDMsIDI0MywgMjIyLCA4LCAzLCAyNDMsIDIwNSwgOCwgMywgMjQzLCAyMDQsIDgsIDMsIAotICAgIDI0MywgMjA4LCA4LCAzLCAyNDMsIDIwNiwgOCwgMywgMjEzLCAxNDQsIDgsIDMsIDIxMywgMTM5LCA4LCAzLCAyMTMsIDE3NiwgCi0gICAgOCwgMywgMjEzLCAxNTMsIDgsIDMsIDIxMywgMTY2LCA4LCAzLCAyMTMsIDE2MywgOCwgMywgMjEzLCAxNjgsIDgsIDMsIAotICAgIDIxMywgMTY3LCA4LCAzLCAyMTQsIDcsIDgsIDMsIDIxNCwgMiwgOCwgMywgMjE0LCAyNywgOCwgMywgMjE0LCAxOCwgOCwgMywgCi0gICAgMjEzLCAxMjUsIDgsIDMsIDIxMywgMTIxLCA4LCAzLCAyMTMsIDEzOCwgOCwgMywgMjEzLCAxMjYsIDgsIDMsIDIxMywgMTc4LCAKLSAgICA4LCAzLCAyMTMsIDI0NCwgOCwgMywgMjEyLCAxMTAsIDgsIDMsIDIxMiwgMTA4LCA4LCAzLCAyMTIsIDExNiwgOCwgMywgCi0gICAgMjEyLCAxMTMsIDgsIDMsIDIxMiwgMTExLCA4LCAzLCAyMTIsIDExMiwgOCwgMywgMjEyLCAxMDIsIDgsIDMsIDIxMiwgMTAxLCAKLSAgICA4LCAzLCAyMTIsIDEwNiwgOCwgMywgMjEyLCAxMDUsIDgsIDMsIDIxMiwgMTAzLCA4LCAzLCAyMTIsIDEwNCwgOCwgMywgCi0gICAgMjQ3LCAxNzgsIDgsIDMsIDI0NywgMTY2LCA4LCAzLCAyNDgsIDMsIDgsIDMsIDI0NywgMjAzLCA4LCAzLCAyNDcsIDIzNiwgCi0gICAgOCwgMywgMjQ3LCAyNDAsIDgsIDMsIDI0NywgMjM5LCA4LCAzLCAyNDgsIDE1MiwgOCwgMywgMjQ4LCAxNDcsIDgsIDMsIAotICAgIDI0OCwgMjIxLCA4LCAzLCAyNDgsIDE3MiwgOCwgMywgMjQ2LCA2MiwgOCwgMywgMjQ2LCA2MywgOCwgMywgMjQ3LCAxMjAsIAotICAgIDgsIDMsIDI0NiwgMTAyLCA4LCAzLCAyNDcsIDE0NSwgOCwgMywgMjQ3LCAxMjIsIDgsIDMsIDI0OCwgMzAsIDgsIDMsIDI0OCwgCi0gICAgOTAsIDgsIDMsIDI0OCwgNDUsIDgsIDMsIDI0NiwgNTMsIDgsIDMsIDI0NiwgNTEsIDgsIDMsIDI0NiwgNzgsIDgsIDMsIAotICAgIDI0NiwgNjEsIDgsIDMsIDI0NiwgNTYsIDgsIDMsIDI0NiwgNTksIDgsIDMsIDIxNiwgNjcsIDgsIDMsIDIxNiwgNjEsIDgsIAotICAgIDMsIDIxNiwgMTE3LCA4LCAzLCAyMTYsIDc2LCA4LCAzLCAyMTYsIDEwOSwgOCwgMywgMjE2LCAxMTEsIDgsIDMsIDIxNiwgCi0gICAgMTEwLCA4LCAzLCAyMTcsIDQ2LCA4LCAzLCAyMTcsIDMzLCA4LCAzLCAyMTcsIDEwNSwgOCwgMywgMjE3LCA1NCwgOCwgMywgCi0gICAgMjE1LCAxMDIsIDgsIDMsIDIxNSwgMTAxLCA4LCAzLCAyMTUsIDEwNCwgOCwgMywgMjE1LCAxMDMsIDgsIDMsIDIxNiwgNSwgCi0gICAgOCwgMywgMjE2LCAxLCA4LCAzLCAxMTEsIDgsIDMsIDIxNiwgMTMsIDgsIDMsIDIxNiwgMjEzLCA4LCAzLCAyMTcsIDIyLCA4LCAKLSAgICAzLCAyMTYsIDIzNywgOCwgMywgMjE1LCA4OCwgOCwgMywgMjE1LCA4MywgOCwgMywgMjE1LCAxMTgsIDgsIDMsIDIxNSwgCi0gICAgMTAwLCA4LCAzLCAyMTUsIDg5LCA4LCAzLCAyMTUsIDk4LCA4LCAzLCAyNDgsIDEwNywgOCwgMywgMjQ4LCAxMDYsIDgsIDMsIAotICAgIDI0OCwgMTEyLCA4LCAzLCAyNDgsIDEwOCwgOCwgMywgMjQ4LCAxMDksIDgsIDMsIDI0OCwgMTExLCA4LCAzLCAyNDgsIDExMCwgCi0gICAgOCwgMywgMjQ4LCAxMjgsIDgsIDMsIDI0OCwgMTI3LCA4LCAzLCAyNDgsIDEzNSwgOCwgMywgMjQ4LCAxMjksIDgsIDMsIAotICAgIDI0OCwgOTcsIDgsIDMsIDI0OCwgOTksIDgsIDMsIDI0OCwgOTgsIDgsIDMsIDI0OCwgMTAyLCA4LCAzLCAyNDgsIDEwMSwgOCwgCi0gICAgMywgMjQ4LCAxMDUsIDgsIDMsIDI0OCwgMTAzLCA4LCAzLCAyNDgsIDEyMCwgOCwgMywgMjQ4LCAxMjMsIDgsIDMsIDI0OCwgCi0gICAgMTIxLCA4LCAzLCAyNDgsIDkzLCA4LCAzLCAyNDgsIDkyLCA4LCAzLCAyNDgsIDEwMCwgOCwgMywgMjQ4LCA5NiwgOCwgMywgCi0gICAgMjQ4LCA5NCwgOCwgMywgMjQ4LCA5NSwgOCwgMywgMjI5LCAxMjYsIDgsIDMsIDIyOSwgMTI1LCA4LCAzLCAyMjksIDEzMywgCi0gICAgOCwgMywgMjI5LCAxMjgsIDgsIDMsIDIyOSwgMTI5LCA4LCAzLCAyMjksIDEzMCwgOCwgMywgMjI5LCAxNDIsIDgsIDMsIAotICAgIDIyOSwgMTQxLCA4LCAzLCAyMjksIDE0OCwgOCwgMywgMjI5LCAxNDMsIDgsIDMsIDIyOSwgMTE4LCA4LCAzLCAyMjksIDExNywgCi0gICAgOCwgMywgMjI5LCAxMjQsIDgsIDMsIDIyOSwgMTE5LCA4LCAzLCAyMjksIDEzNCwgOCwgMywgMjI5LCAxNDAsIDgsIDMsIAotICAgIDIyOSwgMTM4LCA4LCAzLCAyMjksIDExMCwgOCwgMywgMjI5LCAxMDksIDgsIDMsIDIyOSwgMTE1LCA4LCAzLCAyMjksIDExMywgCi0gICAgOCwgMywgMjI5LCAxMTEsIDgsIDMsIDIyOSwgMTEyLCA4LCAzLCAyNDEsIDc3LCA4LCAzLCAyNDEsIDc2LCA4LCAzLCAyNDEsIAotICAgIDgzLCA4LCAzLCAyNDEsIDc4LCA4LCAzLCAyNDEsIDgwLCA4LCAzLCAyNDEsIDc5LCA4LCAzLCAyNDEsIDgyLCA4LCAzLCAKLSAgICAyNDEsIDgxLCA4LCAzLCAyNDEsIDg4LCA4LCAzLCAyNDEsIDg3LCA4LCAzLCAyNDEsIDkwLCA4LCAzLCAyNDEsIDg5LCA4LCAKLSAgICAzLCAyNDEsIDcxLCA4LCAzLCAyNDEsIDcyLCA4LCAzLCAyNDEsIDc0LCA4LCAzLCAyNDEsIDczLCA4LCAzLCAyNDEsIDc1LCAKLSAgICA4LCAzLCAyNDEsIDg0LCA4LCAzLCAyNDEsIDg2LCA4LCAzLCAyNDEsIDg1LCA4LCAzLCAyNDEsIDcwLCA4LCAzLCAyMjgsIAotICAgIDE4OSwgOCwgMywgMjI4LCAxODcsIDgsIDMsIDIyOCwgMjMzLCA4LCAzLCAyMjgsIDE5MiwgOCwgMywgMjI4LCAyMTUsIDgsIAotICAgIDMsIDIyOCwgMjI5LCA4LCAzLCAyMjgsIDIyOCwgOCwgMywgMjI5LCAxODMsIDgsIDMsIDE5NywgOCwgMywgMjI5LCAxOTcsIAotICAgIDgsIDMsIDIyNywgMTg2LCA4LCAzLCAyMjcsIDE4OCwgOCwgMywgMjI3LCAxODcsIDgsIDMsIDIyOCwgNTEsIDgsIDMsIDIyOCwgCi0gICAgMzgsIDgsIDMsIDIyOCwgNzQsIDgsIDMsIDIyOCwgNjAsIDgsIDMsIDIyOSwgODMsIDgsIDMsIDIyOSwgMTA3LCA4LCAzLCAKLSAgICAyMjksIDk0LCA4LCAzLCAyMjcsIDE4MSwgOCwgMywgMjI3LCAxNzcsIDgsIDMsIDIyNywgMjM3LCA4LCAzLCAyMjcsIDE4NSwgCi0gICAgOCwgMywgMjI3LCAxODMsIDgsIDMsIDIyNywgMTg0LCA4LCAzLCAyNDEsIDE0MSwgOCwgMywgMjQxLCAxNDAsIDgsIDMsIAotICAgIDI0MSwgMTQ2LCA4LCAzLCAyNDEsIDE0MiwgOCwgMywgMjQxLCAxNDMsIDgsIDMsIDI0MSwgMTQ1LCA4LCAzLCAyNDEsIDE0NCwgCi0gICAgOCwgMywgMjQxLCAxNTEsIDgsIDMsIDI0MSwgMTUwLCA4LCAzLCAyNDEsIDE1MywgOCwgMywgMjQxLCAxNTIsIDgsIDMsIAotICAgIDI0MSwgMTMzLCA4LCAzLCAyNDEsIDEzNSwgOCwgMywgMjQxLCAxMzQsIDgsIDMsIDI0MSwgMTM3LCA4LCAzLCAyNDEsIDEzOSwgCi0gICAgOCwgMywgMjQxLCAxMzgsIDgsIDMsIDI0MSwgMTQ3LCA4LCAzLCAyNDEsIDE0OSwgOCwgMywgMjQxLCAxNDgsIDgsIDMsIAotICAgIDI0MSwgMTI5LCA4LCAzLCAyNDEsIDEyOCwgOCwgMywgMjQxLCAxMzYsIDgsIDMsIDI0MSwgMTMyLCA4LCAzLCAyNDEsIDEzMCwgCi0gICAgOCwgMywgMjQxLCAxMzEsIDgsIDMsIDI0MSwgMTIzLCA4LCAzLCAyNDEsIDEyMiwgOCwgMywgMjQxLCAxMjcsIDgsIDMsIAotICAgIDI0MSwgMTI2LCA4LCAzLCAyNDEsIDEyNCwgOCwgMywgMjQxLCAxMjUsIDgsIDMsIDIzMiwgMTk1LCA4LCAzLCAyMzIsIDE4OSwgCi0gICAgOCwgMywgMjMyLCAyNDEsIDgsIDMsIDIzMiwgMjAyLCA4LCAzLCAyMzIsIDIzMywgOCwgMywgMjMyLCAyMzIsIDgsIDMsIAotICAgIDIzMiwgMjM2LCA4LCAzLCAyMzIsIDIzNCwgOCwgMywgMjMzLCA3OSwgOCwgMywgMjMzLCA2OSwgOCwgMywgMjMzLCAxMzUsIAotICAgIDgsIDMsIDIzMywgODgsIDgsIDMsIDIzMiwgNzksIDgsIDMsIDIzMiwgNzgsIDgsIDMsIDIzMiwgODEsIDgsIDMsIDIzMiwgCi0gICAgODAsIDgsIDMsIDIzMiwgMTE2LCA4LCAzLCAyMzIsIDEwNiwgOCwgMywgMjMyLCAxNTYsIDgsIDMsIDIzMiwgMTIwLCA4LCAzLCAKLSAgICAyMzMsIDIsIDgsIDMsIDIzMywgNTgsIDgsIDMsIDIzMywgMTcsIDgsIDMsIDIzMiwgNzQsIDgsIDMsIDIzMiwgNzIsIDgsIDMsIAotICAgIDIzMiwgOTgsIDgsIDMsIDIzMiwgNzcsIDgsIDMsIDIzMiwgNzUsIDgsIDMsIDIzMiwgNzYsIDgsIDMsIDIzMiwgNTQsIDgsIAotICAgIDMsIDIzMiwgNTMsIDgsIDMsIDIzMiwgNjIsIDgsIDMsIDIzMiwgNTcsIDgsIDMsIDIzMiwgNTUsIDgsIDMsIDIzMiwgNTYsIAotICAgIDgsIDMsIDI0MiwgMTg5LCA4LCAzLCAyNDIsIDE4OCwgOCwgMywgMjQyLCAyMTQsIDgsIDMsIDI0MiwgMTk5LCA4LCAzLCAKLSAgICAyNDIsIDIwNiwgOCwgMywgMjQyLCAyMDUsIDgsIDMsIDI0MiwgMjA4LCA4LCAzLCAyNDIsIDIwNywgOCwgMywgMjQzLCA4OSwgCi0gICAgOCwgMywgMjQzLCA4NCwgOCwgMywgMjQzLCAxMzUsIDgsIDMsIDI0MywgOTksIDgsIDMsIDI0MiwgOTEsIDgsIDMsIDI0MiwgCi0gICAgOTAsIDgsIDMsIDI0MiwgOTMsIDgsIDMsIDI0MiwgOTIsIDgsIDMsIDI0MiwgMTU0LCA4LCAzLCAyNDIsIDE1MiwgOCwgMywgCi0gICAgMjQyLCAxNzQsIDgsIDMsIDI0MiwgMTYyLCA4LCAzLCAyNDMsIDMzLCA4LCAzLCAyNDMsIDMxLCA4LCAzLCAyNDMsIDYyLCA4LCAKLSAgICAzLCAyNDMsIDQ0LCA4LCAzLCAyNDIsIDgxLCA4LCAzLCAyNDIsIDgwLCA4LCAzLCAyNDIsIDExMywgOCwgMywgMjQyLCA4OSwgCi0gICAgOCwgMywgMjQyLCA4MiwgOCwgMywgMjQyLCA4OCwgOCwgMywgMjM0LCA2MSwgOCwgMywgMjM0LCA2MCwgOCwgMywgMjM0LCAKLSAgICA5MiwgOCwgMywgMjM0LCA3NSwgOCwgMywgMjM0LCA4NSwgOCwgMywgMjM0LCA4OCwgOCwgMywgMjM0LCA4NiwgOCwgMywgCi0gICAgMjM0LCAyMDIsIDgsIDMsIDIzNCwgMTkwLCA4LCAzLCAxNzYsIDgsIDMsIDIzNCwgMjI4LCA4LCAzLCAyMzMsIDIwMCwgOCwgCi0gICAgMywgMjMzLCAyMDUsIDgsIDMsIDIzMywgMjAyLCA4LCAzLCAyMzQsIDAsIDgsIDMsIDIzMywgMjUyLCA4LCAzLCAyMzQsIDI4LCAKLSAgICA4LCAzLCAyMzQsIDcsIDgsIDMsIDIzNCwgMTU2LCA4LCAzLCAyMzQsIDE0MCwgOCwgMywgMjM0LCAxODIsIDgsIDMsIDIzNCwgCi0gICAgMTU5LCA4LCAzLCAyMzMsIDE4OSwgOCwgMywgMjMzLCAxODYsIDgsIDMsIDIzMywgMjE3LCA4LCAzLCAyMzMsIDE5OSwgOCwgCi0gICAgMywgMjMzLCAxOTIsIDgsIDMsIDIzMywgMTk2LCA4LCAzLCAyNDMsIDE1LCA4LCAzLCAyNDMsIDE0LCA4LCAzLCAyNDMsIDE5LCAKLSAgICA4LCAzLCAyNDMsIDE2LCA4LCAzLCAyNDMsIDE4LCA4LCAzLCAyNDMsIDE3LCA4LCAzLCAyNDMsIDI2LCA4LCAzLCAyNDMsIAotICAgIDI1LCA4LCAzLCAyNDMsIDI5LCA4LCAzLCAyNDMsIDI3LCA4LCAzLCAyNDMsIDYsIDgsIDMsIDI0MywgNSwgOCwgMywgMjQzLCAKLSAgICA4LCA4LCAzLCAyNDMsIDcsIDgsIDMsIDI0MywgMTEsIDgsIDMsIDI0MywgMTAsIDgsIDMsIDI0MywgMTMsIDgsIDMsIDI0MywgCi0gICAgMTIsIDgsIDMsIDI0MywgMjEsIDgsIDMsIDI0MywgMjAsIDgsIDMsIDI0MywgMjQsIDgsIDMsIDI0MywgMjIsIDgsIDMsIAotICAgIDI0MywgMSwgOCwgMywgMjQzLCAwLCA4LCAzLCAyNDMsIDksIDgsIDMsIDI0MywgNCwgOCwgMywgMjQzLCAyLCA4LCAzLCAKLSAgICAyNDMsIDMsIDgsIDMsIDIzMCwgMjQ5LCA4LCAzLCAyMzAsIDI1MCwgOCwgMywgMjMxLCAxMiwgOCwgMywgMjMxLCAxMSwgOCwgCi0gICAgMywgMjMxLCAxNCwgOCwgMywgMjMxLCAxMywgOCwgMywgMjMwLCAyNDAsIDgsIDMsIDIzMCwgMjQyLCA4LCAzLCAyMzAsIAotICAgIDI0MSwgOCwgMywgMjMwLCAyNDUsIDgsIDMsIDIzMCwgMjQ0LCA4LCAzLCAyMzAsIDI0NywgOCwgMywgMjMwLCAyNDYsIDgsIAotICAgIDMsIDIzMCwgMjUxLCA4LCAzLCAyMzAsIDI1MywgOCwgMywgMjMwLCAyNTIsIDgsIDMsIDIzMCwgMjM2LCA4LCAzLCAyMzAsIAotICAgIDIzNSwgOCwgMywgMjMwLCAyNDMsIDgsIDMsIDIzMCwgMjM5LCA4LCAzLCAyMzAsIDIzNywgOCwgMywgMjMwLCAyMzgsIDgsIAotICAgIDMsIDI0MCwgMTgwLCA4LCAzLCAyNDAsIDE3OSwgOCwgMywgMjQwLCAxODYsIDgsIDMsIDI0MCwgMTgxLCA4LCAzLCAyNDAsIAotICAgIDE4MywgOCwgMywgMjQwLCAxODIsIDgsIDMsIDI0MCwgMTg1LCA4LCAzLCAyNDAsIDE4NCwgOCwgMywgMjQwLCAxOTEsIDgsIAotICAgIDMsIDI0MCwgMTkwLCA4LCAzLCAyNDAsIDE5MywgOCwgMywgMjQwLCAxOTIsIDgsIDMsIDI0MCwgMTcyLCA4LCAzLCAyNDAsIAotICAgIDE3MSwgOCwgMywgMjQwLCAxNzQsIDgsIDMsIDI0MCwgMTczLCA4LCAzLCAyNDAsIDE3NiwgOCwgMywgMjQwLCAxNzUsIDgsIAotICAgIDMsIDI0MCwgMTc4LCA4LCAzLCAyNDAsIDE3NywgOCwgMywgMjQwLCAxODcsIDgsIDMsIDI0MCwgMTg5LCA4LCAzLCAyNDAsIAotICAgIDE4OCwgOCwgMywgMjI5LCAyNCwgOCwgMywgMjI5LCAyNiwgOCwgMywgMjI5LCAyNSwgOCwgMywgMjI5LCA2NywgOCwgMywgCi0gICAgMjI5LCA2NSwgOCwgMywgMjI5LCA3NywgOCwgMywgMjI5LCA3MCwgOCwgMywgMjI4LCAyNDMsIDgsIDMsIDIyOCwgMjQyLCA4LCAKLSAgICAzLCAyMjgsIDI0NCwgOCwgMywgMjI4LCAyNTIsIDgsIDMsIDIyOCwgMjQ5LCA4LCAzLCAyMjksIDQsIDgsIDMsIDIyOCwgCi0gICAgMjU0LCA4LCAzLCAyMjksIDU4LCA4LCAzLCAyMjksIDY0LCA4LCAzLCAyMjksIDYwLCA4LCAzLCAyNDEsIDE1NiwgOCwgMywgCi0gICAgMjQxLCAxNjYsIDgsIDMsIDI0MSwgMTc1LCA4LCAzLCAyNDEsIDI1MSwgOCwgMywgMjQxLCAyNDMsIDgsIDMsIDE2MiwgOCwgCi0gICAgMywgMjQyLCA2LCA4LCAzLCAyNDAsIDIwNiwgOCwgMywgMjQwLCAyMDUsIDgsIDMsIDI0MCwgMjA4LCA4LCAzLCAyNDAsIAotICAgIDIwNywgOCwgMywgMjQwLCAyNDIsIDgsIDMsIDI0MCwgMjMzLCA4LCAzLCAyNDEsIDY4LCA4LCAzLCAyNDEsIDQ3LCA4LCAzLCAKLSAgICAyNDEsIDE5NCwgOCwgMywgMjQxLCAyMzgsIDgsIDMsIDI0MSwgMjA2LCA4LCAzLCAyMTIsIDQzLCA4LCAzLCAyMTIsIDI4LCAKLSAgICA4LCAzLCAyMTIsIDY1LCA4LCAzLCAyMTIsIDUxLCA4LCAzLCAyMTEsIDE4NSwgOCwgMywgMjExLCAxODcsIDgsIDMsIDIxMSwgCi0gICAgMTg2LCA4LCAzLCAyMTEsIDIwMywgOCwgMywgMjExLCAyMjcsIDgsIDMsIDIxMSwgMjEwLCA4LCAzLCAyMTIsIDUsIDgsIDMsIAotICAgIDIxMiwgMjIsIDgsIDMsIDIxMiwgMTAsIDgsIDMsIDIxMCwgMzAsIDgsIDMsIDIxMCwgMjksIDgsIDMsIDIxMCwgNDQsIDgsIAotICAgIDMsIDIxMCwgMzIsIDgsIDMsIDIxMCwgMzcsIDgsIDMsIDIxMCwgMzksIDgsIDMsIDIxMCwgMzgsIDgsIDMsIDIxMCwgMTAyLCAKLSAgICA4LCAzLCAyMTAsIDk5LCA4LCAzLCAyMTAsIDExNiwgOCwgMywgMjEwLCAxMDUsIDgsIDMsIDIxMCwgNiwgOCwgMywgMjEwLCAKLSAgICA4LCA4LCAzLCAyMTAsIDcsIDgsIDMsIDIxMCwgMTksIDgsIDMsIDIxMCwgMTgsIDgsIDMsIDIxMCwgMjMsIDgsIDMsIDIxMCwgCi0gICAgMjAsIDgsIDMsIDIxMCwgODQsIDgsIDMsIDIxMCwgOTQsIDgsIDMsIDIxMCwgODgsIDgsIDMsIDIxMCwgMiwgOCwgMywgMjEwLCAKLSAgICAxLCA4LCAzLCAyMTAsIDEzLCA4LCAzLCAyMTAsIDUsIDgsIDMsIDIxMCwgMywgOCwgMywgMjEwLCA0LCA4LCAzLCAyMDksIAotICAgIDI0NSwgOCwgMywgMjA5LCAyNDQsIDgsIDMsIDIwOSwgMjUwLCA4LCAzLCAyMDksIDI0OCwgOCwgMywgMjA5LCAyNDYsIDgsIAotICAgIDMsIDIwOSwgMjQ3LCA4LCAzLCAyNTAsIDI4LCA4LCAzLCAyNTAsIDI0LCA4LCAzLCAyNTAsIDUxLCA4LCAzLCAyNTAsIDM3LCAKLSAgICA4LCAzLCAyNTAsIDQ4LCA4LCAzLCAyNTAsIDQyLCA4LCAzLCAyNTAsIDUwLCA4LCAzLCAyNTAsIDQ5LCA4LCAzLCAyNTAsIAotICAgIDIyNCwgOCwgMywgMjUwLCAyMTcsIDgsIDMsIDI1MSwgMzMsIDgsIDMsIDI1MCwgMjUxLCA4LCAzLCAyNDksIDEwNCwgOCwgMywgCi0gICAgMjQ5LCAxMDYsIDgsIDMsIDI0OSwgMTA1LCA4LCAzLCAyNDksIDE1MywgOCwgMywgMjQ5LCAxNDQsIDgsIDMsIDI0OSwgMjM4LCAKLSAgICA4LCAzLCAyNDksIDE2OSwgOCwgMywgMjUwLCAxNjAsIDgsIDMsIDI1MCwgMTkwLCA4LCAzLCAyNTAsIDE2NSwgOCwgMywgCi0gICAgMjQ5LCA4NCwgOCwgMywgMjQ5LCA4MiwgOCwgMywgMjQ5LCAxMTIsIDgsIDMsIDI0OSwgMTAyLCA4LCAzLCAyNDksIDg5LCA4LCAKLSAgICAzLCAyNDksIDEwMSwgOCwgMywgMjQ5LCA2MywgOCwgMywgMjQ5LCA2MiwgOCwgMywgMjQ5LCA3MywgOCwgMywgMjQ5LCA2OSwgCi0gICAgOCwgMywgMjQ5LCA2NCwgOCwgMywgMjQ5LCA2NiwgOCwgMywgMjA5LCAyMjgsIDgsIDMsIDIwOSwgMjI3LCA4LCAzLCAyMDksIAotICAgIDIzNCwgOCwgMywgMjA5LCAyMjksIDgsIDMsIDIwOSwgMjMxLCA4LCAzLCAyMDksIDIzMCwgOCwgMywgMjA5LCAyMzMsIDgsIAotICAgIDMsIDIwOSwgMjMyLCA4LCAzLCAyMDksIDI0MCwgOCwgMywgMjA5LCAyMzksIDgsIDMsIDIwOSwgMjQzLCA4LCAzLCAyMDksIAotICAgIDI0MSwgOCwgMywgMjA5LCAyMjQsIDgsIDMsIDIwOSwgMjI2LCA4LCAzLCAyMDksIDIyNSwgOCwgMywgMjA5LCAyMzUsIDgsIAotICAgIDMsIDIwOSwgMjM4LCA4LCAzLCAyMDksIDIzNiwgOCwgMywgMjA5LCAyMTcsIDgsIDMsIDIwOSwgMjIxLCA4LCAzLCAyMDksIAotICAgIDIyMCwgOCwgMywgMjA5LCAyMTgsIDgsIDMsIDIwOSwgMjE5LCA4LCAzLCAyMDksIDIxMSwgOCwgMywgMjA5LCAyMTAsIDgsIAotICAgIDMsIDIwOSwgMjE2LCA4LCAzLCAyMDksIDIxNCwgOCwgMywgMjA5LCAyMTIsIDgsIDMsIDIwOSwgMjEzLCA4LCAzLCAyMjcsIAotICAgIDEwNCwgOCwgMywgMjI3LCAxMDMsIDgsIDMsIDIyNywgMTA5LCA4LCAzLCAyMjcsIDEwNSwgOCwgMywgMjI3LCAxMDYsIDgsIAotICAgIDMsIDIyNywgMTA4LCA4LCAzLCAyMjcsIDEwNywgOCwgMywgMjI3LCAxMTQsIDgsIDMsIDIyNywgMTEzLCA4LCAzLCAyMjcsIAotICAgIDExNywgOCwgMywgMjI3LCAxMTYsIDgsIDMsIDIyNywgOTcsIDgsIDMsIDIyNywgOTgsIDgsIDMsIDIyNywgMTAxLCA4LCAzLCAKLSAgICAyMjcsIDEwMiwgOCwgMywgMjI3LCAxMTAsIDgsIDMsIDIyNywgMTEyLCA4LCAzLCAyMjcsIDkyLCA4LCAzLCAyMjcsIDEwMCwgCi0gICAgOCwgMywgMjI3LCA5NiwgOCwgMywgMjI3LCA5MywgOCwgMywgMjI3LCA5NCwgOCwgMywgMjI3LCA4NywgOCwgMywgMjI3LCAKLSAgICA4NiwgOCwgMywgMjI3LCA5MSwgOCwgMywgMjI3LCA5MCwgOCwgMywgMjI3LCA4OCwgOCwgMywgMjI3LCA4OSwgOCwgMywgCi0gICAgMjE5LCAxMjcsIDgsIDMsIDE5NCwgOCwgMywgMjE5LCAxOTEsIDgsIDMsIDIxOSwgMTMwLCA4LCAzLCAyMTksIDE4MywgOCwgCi0gICAgMywgMjE5LCAxODYsIDgsIDMsIDIxOSwgMTg0LCA4LCAzLCAyMjEsIDIyNiwgOCwgMywgMjIxLCAyMTQsIDgsIDMsIDIwNiwgCi0gICAgOCwgMywgMjIxLCAyMzQsIDgsIDMsIDIxOCwgMjgsIDgsIDMsIDIxOCwgMzAsIDgsIDMsIDIxOCwgMjksIDgsIDMsIDIxOSwgCi0gICAgMzQsIDgsIDMsIDIxOSwgMjMsIDgsIDMsIDIxOSwgNTgsIDgsIDMsIDIxOSwgMzgsIDgsIDMsIDIyMCwgMTE0LCA4LCAzLCAKLSAgICAyMjEsIDE4MSwgOCwgMywgMjIwLCAxMzksIDgsIDMsIDIxOCwgNSwgOCwgMywgMjE4LCAzLCA4LCAzLCAyMTgsIDgzLCA4LCAKLSAgICAzLCAyMTgsIDI3LCA4LCAzLCAyMTgsIDksIDgsIDMsIDIxOCwgMTcsIDgsIDMsIDIxNywgMTY2LCA4LCAzLCAyMTcsIDE2NSwgCi0gICAgOCwgMywgMjE3LCAyMzIsIDgsIDMsIDIxNywgMTczLCA4LCAzLCAyMTcsIDE2OCwgOCwgMywgMjE3LCAxNzIsIDgsIDMsIAotICAgIDIxOCwgMTg2LCA4LCAzLCAyMTgsIDE4NSwgOCwgMywgMjE4LCAxOTIsIDgsIDMsIDIxOCwgMTg3LCA4LCAzLCAyMTgsIDE4OSwgCi0gICAgOCwgMywgMjE4LCAxOTEsIDgsIDMsIDIxOCwgMTkwLCA4LCAzLCAyMTgsIDIwMCwgOCwgMywgMjE4LCAxOTgsIDgsIDMsIAotICAgIDIxOCwgMjIzLCA4LCAzLCAyMTgsIDIwMSwgOCwgMywgMjE4LCAxODEsIDgsIDMsIDIxOCwgMTgwLCA4LCAzLCAyMTgsIDE4NCwgCi0gICAgOCwgMywgMjE4LCAxODIsIDgsIDMsIDIxOCwgMTk0LCA4LCAzLCAyMTgsIDE5NywgOCwgMywgMjE4LCAxOTUsIDgsIDMsIAotICAgIDIxOCwgMTc3LCA4LCAzLCAyMTgsIDE3NSwgOCwgMywgMjE4LCAxNzksIDgsIDMsIDIxOCwgMTc4LCA4LCAzLCAyMTgsIDE3MCwgCi0gICAgOCwgMywgMjE4LCAxNjksIDgsIDMsIDIxOCwgMTc0LCA4LCAzLCAyMTgsIDE3MywgOCwgMywgMjE4LCAxNzEsIDgsIDMsIAotICAgIDIxOCwgMTcyLCA4LCAzLCAyMTAsIDc3LCA4LCAzLCAyMTAsIDc2LCA4LCAzLCAyMTAsIDgyLCA4LCAzLCAyMTAsIDc5LCA4LCAKLSAgICAzLCAyMTAsIDU5LCA4LCAzLCAyMTAsIDYxLCA4LCAzLCAyMTAsIDYwLCA4LCAzLCAyMTAsIDY0LCA4LCAzLCAyMTAsIDYzLCAKLSAgICA4LCAzLCAyMTAsIDY3LCA4LCAzLCAyMTAsIDY1LCA4LCAzLCAyMTAsIDcxLCA4LCAzLCAyMTAsIDcwLCA4LCAzLCAyMTAsIAotICAgIDc0LCA4LCAzLCAyMTAsIDcyLCA4LCAzLCAyMTAsIDU1LCA4LCAzLCAyMTAsIDU0LCA4LCAzLCAyMTAsIDYyLCA4LCAzLCAKLSAgICAyMTAsIDU4LCA4LCAzLCAyMTAsIDU2LCA4LCAzLCAyMTAsIDU3LCA4LCAzLCAyMTAsIDQ3LCA4LCAzLCAyMTAsIDQ2LCA4LCAKLSAgICAzLCAyMTAsIDUxLCA4LCAzLCAyMTAsIDUwLCA4LCAzLCAyMTAsIDQ4LCA4LCAzLCAyMTAsIDQ5LCA4LCAzLCAyNTAsIDEzNiwgCi0gICAgOCwgMywgMjUwLCAxMzMsIDgsIDMsIDI1MCwgMTU3LCA4LCAzLCAyNTAsIDE0NCwgOCwgMywgMjUwLCA2NSwgOCwgMywgMjUwLCAKLSAgICA2NCwgOCwgMywgMjUwLCA2NywgOCwgMywgMjUwLCA2NiwgOCwgMywgMjUwLCA3OSwgOCwgMywgMjUwLCA3OCwgOCwgMywgCi0gICAgMjUwLCA4NiwgOCwgMywgMjUwLCA4MSwgOCwgMywgMjUwLCAxMTUsIDgsIDMsIDI1MCwgMTEzLCA4LCAzLCAyNTAsIDEzMSwgCi0gICAgOCwgMywgMjUwLCAxMjEsIDgsIDMsIDI1MCwgNTksIDgsIDMsIDI1MCwgNjksIDgsIDMsIDI1MCwgNjMsIDgsIDMsIDI1MCwgCi0gICAgNjAsIDgsIDMsIDI1MCwgNjIsIDgsIDMsIDI1MCwgNTMsIDgsIDMsIDI1MCwgNTIsIDgsIDMsIDI1MCwgNTcsIDgsIDMsIAotICAgIDI1MCwgNTYsIDgsIDMsIDI1MCwgNTQsIDgsIDMsIDI1MCwgNTUsIDgsIDMsIDIyMiwgMTc1LCA4LCAzLCAyMjIsIDE3OSwgOCwgCi0gICAgMywgMjIyLCAxNTgsIDgsIDMsIDIyMiwgMTU5LCA4LCAzLCAyMjIsIDE2MiwgOCwgMywgMjIyLCAxNjEsIDgsIDMsIDIyMiwgCi0gICAgMTY1LCA4LCAzLCAyMjIsIDE2MywgOCwgMywgMjIyLCAxNjksIDgsIDMsIDIyMiwgMTY4LCA4LCAzLCAyMjIsIDE3NCwgOCwgCi0gICAgMywgMjIyLCAxNzAsIDgsIDMsIDIyMiwgMTU0LCA4LCAzLCAyMjIsIDE1MiwgOCwgMywgMjIyLCAxNjAsIDgsIDMsIDIyMiwgCi0gICAgMTU3LCA4LCAzLCAyMjIsIDE1NSwgOCwgMywgMjIyLCAxNTYsIDgsIDMsIDIyMiwgMTQ3LCA4LCAzLCAyMjIsIDE0NiwgOCwgCi0gICAgMywgMjIyLCAxNTEsIDgsIDMsIDIyMiwgMTUwLCA4LCAzLCAyMjIsIDE0OCwgOCwgMywgMjIyLCAxNDksIDgsIDMsIDIyOCwgCi0gICAgMzQsIDgsIDMsIDIyOCwgMzMsIDgsIDMsIDIyOCwgMzYsIDgsIDMsIDIyOCwgMzUsIDgsIDMsIDIyOCwgMjYsIDgsIDMsIAotICAgIDIyOCwgMjgsIDgsIDMsIDIyOCwgMjcsIDgsIDMsIDIyOCwgMzAsIDgsIDMsIDIyOCwgMjksIDgsIDMsIDIyOCwgMzIsIDgsIAotICAgIDMsIDIyOCwgMzEsIDgsIDMsIDIyOCwgMjEsIDgsIDMsIDIyOCwgMjAsIDgsIDMsIDIyOCwgMjUsIDgsIDMsIDIyOCwgMjQsIAotICAgIDgsIDMsIDIyOCwgMjIsIDgsIDMsIDIyOCwgMjMsIDgsIDMsIDIyOCwgMTUsIDgsIDMsIDIyOCwgMTQsIDgsIDMsIDIyOCwgCi0gICAgMTksIDgsIDMsIDIyOCwgMTgsIDgsIDMsIDIyOCwgMTYsIDgsIDMsIDIyOCwgMTcsIDgsIDMsIDIyMCwgNzIsIDgsIDMsIAotICAgIDIyMCwgNjcsIDgsIDMsIDIyMCwgMTAyLCA4LCAzLCAyMjAsIDgzLCA4LCAzLCAyMTksIDIxNSwgOCwgMywgMjE5LCAyMTcsIAotICAgIDgsIDMsIDIxOSwgMjE2LCA4LCAzLCAyMTksIDIzNiwgOCwgMywgMjE5LCAyMzMsIDgsIDMsIDIyMCwgNywgOCwgMywgMjE5LCAKLSAgICAyNTQsIDgsIDMsIDIyMCwgNDIsIDgsIDMsIDIyMCwgMzUsIDgsIDMsIDIyMCwgNjMsIDgsIDMsIDIyMCwgNTAsIDgsIDMsIAotICAgIDIxOSwgMjExLCA4LCAzLCAyMTksIDIwOSwgOCwgMywgMjE5LCAyMjUsIDgsIDMsIDIxOSwgMjE0LCA4LCAzLCAyMTksIDIxMiwgCi0gICAgOCwgMywgMjE5LCAyMTMsIDgsIDMsIDIxOSwgMTk0LCA4LCAzLCAyMTksIDE5MywgOCwgMywgMjE5LCAyMDAsIDgsIDMsIAotICAgIDIxOSwgMTk3LCA4LCAzLCAyMTksIDE5NSwgOCwgMywgMjE5LCAxOTYsIDgsIDMsIDIyMywgMTQxLCA4LCAzLCAyMjMsIDEzNSwgCi0gICAgOCwgMywgMjA1LCA4LCAzLCAyMjMsIDE0NywgOCwgMywgMjIyLCAxMjAsIDgsIDMsIDIyMiwgMTIyLCA4LCAzLCAyMjIsIAotICAgIDEyMSwgOCwgMywgMjIyLCAxODgsIDgsIDMsIDIyMiwgMTgxLCA4LCAzLCAyMjIsIDIxMSwgOCwgMywgMjIyLCAxOTIsIDgsIAotICAgIDMsIDIyMywgNDMsIDgsIDMsIDIyMywgMTI4LCA4LCAzLCAyMjMsIDgxLCA4LCAzLCAyMjIsIDExMywgOCwgMywgMjIyLCAKLSAgICAxMTAsIDgsIDMsIDIyMiwgMTQwLCA4LCAzLCAyMjIsIDExOSwgOCwgMywgMjIyLCAxMTUsIDgsIDMsIDIyMiwgMTE2LCA4LCAKLSAgICAzLCAyMjIsIDk1LCA4LCAzLCAyMjIsIDk0LCA4LCAzLCAyMjIsIDEwMCwgOCwgMywgMjIyLCA5OCwgOCwgMywgMjIyLCA5NiwgCi0gICAgOCwgMywgMjIyLCA5NywgOCwgMywgMjM1LCA5OCwgOCwgMywgMjM1LCA5NywgOCwgMywgMjM1LCAxMDgsIDgsIDMsIDIzNSwgCi0gICAgOTksIDgsIDMsIDIzNSwgMTA0LCA4LCAzLCAyMzUsIDEwMywgOCwgMywgMjM1LCAxMDYsIDgsIDMsIDIzNSwgMTA1LCA4LCAzLCAKLSAgICAyMzUsIDQxLCA4LCAzLCAyMzUsIDQwLCA4LCAzLCAyMzUsIDQzLCA4LCAzLCAyMzUsIDQyLCA4LCAzLCAyMzUsIDU2LCA4LCAKLSAgICAzLCAyMzUsIDU0LCA4LCAzLCAyMzUsIDY4LCA4LCAzLCAyMzUsIDU4LCA4LCAzLCAyMzUsIDM0LCA4LCAzLCAyMzUsIDMyLCAKLSAgICA4LCAzLCAyMzUsIDUxLCA4LCAzLCAyMzUsIDM5LCA4LCAzLCAyMzUsIDM2LCA4LCAzLCAyMzUsIDM3LCA4LCAzLCAyMzUsIAotICAgIDI2LCA4LCAzLCAyMzUsIDI1LCA4LCAzLCAyMzUsIDMwLCA4LCAzLCAyMzUsIDI5LCA4LCAzLCAyMzUsIDI3LCA4LCAzLCAKLSAgICAyMzUsIDI4LCA4LCAzLCAyMjQsIDQ2LCA4LCAzLCAyMjQsIDQ0LCA4LCAzLCAyMjQsIDUzLCA4LCAzLCAyMjQsIDQ3LCA4LCAKLSAgICAzLCAyMjQsIDUwLCA4LCAzLCAyMjQsIDQ5LCA4LCAzLCAyMjQsIDUyLCA4LCAzLCAyMjQsIDUxLCA4LCAzLCAyMjMsIDI1NSwgCi0gICAgOCwgMywgMjIzLCAyNTIsIDgsIDMsIDIyNCwgMSwgOCwgMywgMjI0LCAwLCA4LCAzLCAyMjQsIDMzLCA4LCAzLCAyMjQsIDMyLCAKLSAgICA4LCAzLCAyMjQsIDQyLCA4LCAzLCAyMjQsIDM2LCA4LCAzLCAyMjMsIDI0NywgOCwgMywgMjIzLCAyNDMsIDgsIDMsIDIyNCwgCi0gICAgMzAsIDgsIDMsIDIyMywgMjUxLCA4LCAzLCAyMjMsIDI0OSwgOCwgMywgMjIzLCAyNTAsIDgsIDMsIDIyMywgMjI3LCA4LCAzLCAKLSAgICAyMjMsIDIyNSwgOCwgMywgMjIzLCAyMzcsIDgsIDMsIDIyMywgMjMwLCA4LCAzLCAyMjMsIDIyOCwgOCwgMywgMjIzLCAyMjksIAotICAgIDgsIDMsIDIzNSwgODcsIDgsIDMsIDIzNSwgODYsIDgsIDMsIDIzNSwgOTMsIDgsIDMsIDIzNSwgODgsIDgsIDMsIDIzNSwgCi0gICAgOTAsIDgsIDMsIDIzNSwgODksIDgsIDMsIDIzNSwgOTIsIDgsIDMsIDIzNSwgOTEsIDgsIDMsIDIzNSwgNzgsIDgsIDMsIAotICAgIDIzNSwgODAsIDgsIDMsIDIzNSwgNzksIDgsIDMsIDIzNSwgODMsIDgsIDMsIDIzNSwgODIsIDgsIDMsIDIzNSwgODUsIDgsIAotICAgIDMsIDIzNSwgODQsIDgsIDMsIDIzNSwgNzQsIDgsIDMsIDIzNSwgNzMsIDgsIDMsIDIzNSwgODEsIDgsIDMsIDIzNSwgNzcsIAotICAgIDgsIDMsIDIzNSwgNzUsIDgsIDMsIDIzNSwgNzYsIDgsIDMsIDIzNSwgNzAsIDgsIDMsIDIzNSwgNjksIDgsIDMsIDIzNSwgCi0gICAgNzIsIDgsIDMsIDIzNSwgNzEsIDgsIDMsIDIyOCwgMTYyLCA4LCAzLCAyMjgsIDE2MSwgOCwgMywgMjI4LCAxNjksIDgsIDMsIAotICAgIDIyOCwgMTYzLCA4LCAzLCAyMjgsIDE2NSwgOCwgMywgMjI4LCAxNjQsIDgsIDMsIDIyOCwgMTY4LCA4LCAzLCAyMjgsIDE2NiwgCi0gICAgOCwgMywgMjI4LCAxNTEsIDgsIDMsIDIyOCwgMTUyLCA4LCAzLCAyMjgsIDE1NywgOCwgMywgMjI4LCAxNTYsIDgsIDMsIAotICAgIDIyOCwgMTYwLCA4LCAzLCAyMjgsIDE1OCwgOCwgMywgMjI4LCAxNDYsIDgsIDMsIDIyOCwgMTU1LCA4LCAzLCAyMjgsIDE1MCwgCi0gICAgOCwgMywgMjI4LCAxNDcsIDgsIDMsIDIyOCwgMTQ4LCA4LCAzLCAyMjgsIDE0MSwgOCwgMywgMjI4LCAxNDAsIDgsIDMsIAotICAgIDIyOCwgMTQ1LCA4LCAzLCAyMjgsIDE0NCwgOCwgMywgMjI4LCAxNDIsIDgsIDMsIDIyOCwgMTQzLCA4LCAzLCAyMjcsIDEzNywgCi0gICAgOCwgMywgMjI3LCAxMzYsIDgsIDMsIDIyNywgMTQ4LCA4LCAzLCAyMjcsIDE0MSwgOCwgMywgMjI3LCAxNDUsIDgsIDMsIAotICAgIDIyNywgMTQ0LCA4LCAzLCAyMjcsIDE0NywgOCwgMywgMjI3LCAxNDYsIDgsIDMsIDIyNywgMTI0LCA4LCAzLCAyMjcsIDEyNiwgCi0gICAgOCwgMywgMjI3LCAxMjUsIDgsIDMsIDIyNywgMTMwLCA4LCAzLCAyMjcsIDEyOSwgOCwgMywgMjI3LCAxMzQsIDgsIDMsIAotICAgIDIyNywgMTMxLCA4LCAzLCAyMjcsIDEyMiwgOCwgMywgMjI3LCAxMjAsIDgsIDMsIDIyNywgMTI4LCA4LCAzLCAyMjcsIDEyMywgCi0gICAgOCwgMywgMjExLCAxNTAsIDgsIDMsIDIxMSwgMTQ5LCA4LCAzLCAyMTEsIDE1NywgOCwgMywgMjExLCAxNTIsIDgsIDMsIAotICAgIDIxMSwgMTU0LCA4LCAzLCAyMTEsIDE1MywgOCwgMywgMjExLCAxNTYsIDgsIDMsIDIxMSwgMTU1LCA4LCAzLCAyMTEsIDEzOSwgCi0gICAgOCwgMywgMjExLCAxNDAsIDgsIDMsIDIxMSwgMTQ0LCA4LCAzLCAyMTEsIDE0MywgOCwgMywgMjExLCAxNDgsIDgsIDMsIAotICAgIDIxMSwgMTQ2LCA4LCAzLCAyMTEsIDEyMSwgOCwgMywgMjExLCAxMTksIDgsIDMsIDIxMSwgMTMxLCA4LCAzLCAyMTEsIDEyNCwgCi0gICAgOCwgMywgMjExLCAxMjIsIDgsIDMsIDIxMSwgMTIzLCA4LCAzLCAyMTAsIDI1MCwgOCwgMywgMjEwLCAyNDgsIDgsIDMsIAotICAgIDIxMSwgOCwgOCwgMywgMjEwLCAyNTEsIDgsIDMsIDIxMSwgMiwgOCwgMywgMjExLCAxLCA4LCAzLCAyMTEsIDUsIDgsIDMsIAotICAgIDIxMSwgMywgOCwgMywgMjEwLCAxOTEsIDgsIDMsIDIxMCwgMTkwLCA4LCAzLCAyMTAsIDE5NCwgOCwgMywgMjEwLCAxOTIsIAotICAgIDgsIDMsIDIxMCwgMjI0LCA4LCAzLCAyMTAsIDIyMSwgOCwgMywgMjEwLCAyNDQsIDgsIDMsIDIxMCwgMjI4LCA4LCAzLCAKLSAgICAyMTAsIDE4MiwgOCwgMywgMjEwLCAxNzgsIDgsIDMsIDIxMCwgMjEyLCA4LCAzLCAyMTAsIDE4OSwgOCwgMywgMjEwLCAxODUsIAotICAgIDgsIDMsIDIxMCwgMTg2LCA4LCAzLCAyMTAsIDE2MiwgOCwgMywgMjEwLCAxNjEsIDgsIDMsIDIxMCwgMTY5LCA4LCAzLCAKLSAgICAyMTAsIDE2NSwgOCwgMywgMjEwLCAxNjMsIDgsIDMsIDIxMCwgMTY0LCA4LCAzNCwgMjI0LCAzMywgOCwgMzQsIDIzMiwgCi0gICAgMjQxLCA4LCAzNCwgMjM0LCA2MSwgOCwgMzQsIDIyNywgMTQxLCA4LCAzNCwgMjQ5LCA2OSwgOCwgMzQsIDIxOCwgMTkyLCA4LCAKLSAgICAzNCwgMjQzLCAxMiwgOCwgMzQsIDI0MywgNDQsIDgsIDM0LCAyMzAsIDIzMCwgOCwgMzQsIDI0MCwgMTgwLCA4LCAzNCwgCi0gICAgMjMyLCA1NiwgOCwgMzQsIDI1MiwgODMsIDgsIDM0LCAyMzAsIDEyNiwgOCwgMzQsIDIxMCwgMjQ0LCA4LCAzNCwgMjI0LCAKLSAgICAxMjEsIDgsIDM0LCAyNDAsIDE3NCwgOCwgMzQsIDIxNywgNDYsIDgsIDM0LCAyNDMsIDEzNSwgOCwgMzQsIDIxMCwgNSwgOCwgCi0gICAgMzQsIDI0OSwgNjMsIDgsIDM0LCAyNDgsIDk1LCA4LCAzNCwgMjUxLCA5OCwgOCwgMzQsIDI0MywgOCwgOCwgMzQsIDIyNywgCi0gICAgMTMxLCA4LCAzNCwgMjE1LCAxMTgsIDgsIDM0LCAyMjYsIDE3NSwgOCwgMzQsIDIzNSwgNzQsIDgsIDM0LCAyMTAsIDE5LCA4LCAKLSAgICAzNCwgMjI0LCAxMDAsIDgsIDM0LCAyNDEsIDEwOCwgOCwgMzQsIDIxMCwgMjUwLCA4LCAzNCwgMjEyLCAxMTIsIDgsIDM0LCAKLSAgICAyMTksIDIwMCwgOCwgMzQsIDIxMywgMjQ0LCA4LCAzNCwgMjEwLCAxMTYsIDgsIDM0LCAyMzUsIDY4LCA4LCAzNCwgMjI3LCAKLSAgICA5NiwgOCwgMzQsIDIzNSwgNzIsIDgsIDM0LCAyNDIsIDE1NCwgOCwgMzQsIDIzNSwgOTIsIDgsIDM0LCAyMTEsIDIyNywgOCwgCi0gICAgMzQsIDI0NiwgNzgsIDgsIDM0LCAyMTksIDIxMywgOCwgMzQsIDIzMiwgMjM2LCA4LCAzNCwgMjQ5LCA3MywgOCwgMzQsIAotICAgIDI0OSwgMTA1LCA4LCAzNCwgMjUwLCAzNywgOCwgMzQsIDI0MCwgMTc3LCA4LCAzNCwgMjIwLCA3MiwgOCwgMzQsIDIxMCwgNCwgCi0gICAgOCwgMzQsIDIxOSwgMjU0LCA4LCAzNCwgMjUwLCAxMzEsIDgsIDM0LCAyMDksIDIzMSwgOCwgMzQsIDIyOSwgMTczLCA4LCAKLSAgICAzNCwgMjM0LCAxODIsIDIzMiwgMTk2LCAxLCAyNTIsIDE5MSwgMjMyLCAxOTYsIDEsIDE5MCwgMjMyLCAxOTYsIDEsIDIyNSwgCi0gICAgMTQ3LCAyMzIsIDE5NiwgMSwgMjQ4LCAyMjEsIDIzMiwgMTk2LCAxLCAyMTcsIDEwNSwgMjMyLCAxOTYsIDEsIDIxNiwgMjA4LCAKLSAgICAyMzIsIDE5NiwgMSwgMjQzLCAxMzUsIDIzMiwgMTk2LCAxLCAxNzYsIDIzMiwgMTk2LCAxLCAyMzQsIDEzMiwgMjMyLCAxOTYsIAotICAgIDEsIDIzNSwgMTQxLCAyMzIsIDE5NiwgMSwgMjUxLCAzMywgMjMyLCAxOTYsIDEsIDI1MCwgMTU3LCAyMzIsIDE5NiwgMSwgCi0gICAgMjQ2LCAzOCwgMjMyLCAxOTYsIDEsIDIxNSwgMTgzLCAyMzIsIDE5NiwgMSwgMjE1LCAxNzUsIDIzMiwgMTk2LCAxLCAxODQsIAotICAgIDIzMiwgMTk2LCAxLCAxOTcsIDIzMiwgMTk2LCAxLCAyMzMsIDEzNSwgMjMyLCAxOTYsIDEsIDIwNiwgMjMyLCAxOTYsIDEsIAotICAgIDIxMCwgODIsIDIzMiwgMTk2LCAxLCAyMTAsIDExNiwgMjMyLCAxOTYsIDEsIDIyOSwgNzcsIDIzMiwgMTk2LCAxLCAxNjIsIAotICAgIDIzMiwgMTk2LCAxLCAyMTEsIDE2NSwgMjMyLCAxOTYsIDEsIDI0MSwgMTg5LCAyMzIsIDE5NiwgMSwgMjQ0LCAxOTYsIDIzMiwgCi0gICAgMTk2LCAxLCAyMTIsIDY1LCAyMzIsIDE5NiwgMSwgMjIwLCAxMDIsIDIzMiwgMTk2LCAxLCAxOTEsIDIzMiwgMTk2LCAxLCAKLSAgICAyNDIsIDI0OSwgMjMyLCAxOTYsIDEsIDYxLCAyMzIsIDE5NiwgMSwgMjU0LCAyNDMsIDIzMiwgMTk2LCAxLCA3NSwgMjMyLCAKLSAgICAxOTYsIDEsIDI0NSwgNTUsIDIzMiwgMTk2LCAxLCA3MywgMjMyLCAxOTYsIDEsIDc2LCAyMzIsIDE5NiwgMSwgNzAsIDIzMiwgCi0gICAgMTk2LCAxLCAyMTQsIDIxNCwgMjMyLCAxOTYsIDEsIDIxNCwgMjA4LCAyMzIsIDE5NiwgMSwgMjI2LCAyMzQsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDIxNiwgMTE3LCAyMzIsIDE5NiwgMSwgMTM4LCAyMjksIDIyOSwgMjI1LCAxNiwgMjMyLCAxOTYsIAotICAgIDEsIDEzOCwgMjMwLCAzMiwgMjQ5LCA3MiwgMjMyLCAxOTYsIDEsIDEzOCwgMjMwLCAzMiwgMjUxLCAyMDUsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDE5NywgMjMyLCAxOTYsIDEsIDEzOCwgMjMwLCAzMiwgMjM1LCAxMTUsIDIzMiwgMTk2LCAyMjQsIAotICAgIDE0MSwgMjQ5LCAyMTksIDIzMiwgMTk2LCAyMjQsIDE0MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA0MSwgMywgMjQ1LCAyMDksIAotICAgIDQxLCAzLCAyNDUsIDIwNSwgNDEsIDMsIDI0MSwgMjIwLCA0MSwgMywgMjEyLCAxNywgNDEsIDMsIDIxMiwgMTYsIDQxLCAzLCAKLSAgICAyMjUsIDIxMSwgNDEsIDMsIDI1MiwgMTMsIDQxLCAzLCAyNTIsIDY2LCA0MSwgMywgMjMxLCAxMTYsIDQxLCAzLCAyMzMsIAotICAgIDI0NywgNDEsIDMsIDIzMSwgNiwgNDEsIDMsIDI0MywgNzUsIDQxLCAzLCAyNDQsIDE0NywgNDEsIDMsIDIxMywgMjUwLCA0MSwgCi0gICAgMywgMjE3LCAxMSwgNDEsIDMsIDIxNiwgMTk0LCA0MSwgMywgMjQ4LCAxNiwgNDEsIDMsIDI0OCwgMTMsIDQxLCAzLCAyMzMsIAotICAgIDUwLCA0MSwgMywgMjIzLCAxMDgsIDQxLCAzLCAyNDgsIDc3LCA0MSwgMywgMjI5LCAxMzksIDQxLCAzLCAyMjEsIDE3MCwgCi0gICAgNDEsIDMsIDIyMCwgNjEsIDQxLCAzLCAyMTAsIDkyLCA0MSwgMywgMjEwLCA3MywgNDEsIDMsIDI1MCwgMTgyLCA0MSwgMywgCi0gICAgMjM1LCAxMjQsIDQxLCAzLCAyMjgsIDE3NiwgNDEsIDMsIDIxMSwgNDQsIDQxLCAzLCAyMzQsIDE4MSwgNDEsIDMsIDIyOSwgCi0gICAgNTEsIDQxLCAzLCAyNDMsIDU1LCA0MSwgMywgMjMxLCA4MCwgNDEsIDMsIDIyOSwgMTAzLCA0MSwgMywgMjI3LCAxNTUsIDQxLCAKLSAgICAzLCA3MywgNDEsIDMsIDIzNSwgMjU1LCA0MSwgMywgMjQxLCAxODAsIDQxLCAzLCAyNDEsIDE2MCwgNDEsIDMsIDIxMSwgCi0gICAgMjUwLCA0MSwgMywgMjExLCAyNDEsIDQxLCAzLCAyMjUsIDEwOCwgNDEsIDMsIDI1MiwgMTEsIDQxLCAzLCAyNTIsIDYsIDQxLCAKLSAgICAzLCAyMzEsIDEwOSwgNDEsIDMsIDIzMywgMjQ0LCA0MSwgMywgMjMxLCAzLCA0MSwgMywgMjQzLCA3MSwgNDEsIDMsIDI0NCwgCi0gICAgMTIxLCA0MSwgMywgMjEzLCAxNzYsIDQxLCAzLCAyMTYsIDExNywgNDEsIDMsIDIxNiwgMTc1LCA0MSwgMywgMjQ4LCA4LCAKLSAgICA0MSwgMywgMjQ4LCAxMiwgNDEsIDMsIDIzMiwgMjQxLCA0MSwgMywgMjIzLCAzNSwgNDEsIDMsIDI0OCwgMywgNDEsIDMsIAotICAgIDIyOSwgMTMzLCA0MSwgMywgMjE5LCAxOTEsIDQxLCAzLCAyMjAsIDMyLCA0MSwgMywgMjEwLCA0NCwgNDEsIDMsIDIxMCwgCi0gICAgNjksIDQxLCAzLCAyNTAsIDUxLCA0MSwgMywgMjM1LCAxMDgsIDQxLCAzLCAyMjgsIDE2OSwgNDEsIDMsIDIxMSwgOCwgNDEsIAotICAgIDMsIDIzNCwgOTIsIDQxLCAzLCAyMjksIDQzLCA0MSwgMywgMjQyLCAyMTQsIDQxLCAzLCAyMzAsIDIzMCwgNDEsIDMsIDIyOCwgCi0gICAgMjMzLCA0MSwgMywgMjI3LCAxNDgsIDQxLCAzLCA2MSwgNDEsIDMsIDI1NCwgMTIzLCA0MSwgMywgMjI5LCA3MiwgNDEsIDMsIAotICAgIDE2MiwgNDEsIDMsIDI0MiwgMTgsIDQxLCAzLCAyMTIsIDY1LCA0MSwgMywgMjEyLCA1NSwgNDEsIDMsIDE5MCwgNDEsIDMsIAotICAgIDI1MiwgMTgsIDQxLCAzLCAyNTIsIDE5MSwgNDEsIDMsIDIzMSwgMTI0LCA0MSwgMywgMjMzLCAyNTEsIDQxLCAzLCAyMzMsIAotICAgIDI1MCwgNDEsIDMsIDIzMSwgMTAsIDQxLCAzLCAyNDMsIDc5LCA0MSwgMywgMjQ0LCAxOTYsIDQxLCAzLCAyMTQsIDI3LCA0MSwgCi0gICAgMywgMjE3LCAxMDUsIDQxLCAzLCAyMTYsIDIwOCwgNDEsIDMsIDI0OCwgMjUsIDQxLCAzLCAyNDgsIDE1LCA0MSwgMywgMjMzLCAKLSAgICAxMzUsIDQxLCAzLCAyMDUsIDQxLCAzLCAyNDgsIDIyMSwgNDEsIDMsIDIyOSwgMTQ4LCA0MSwgMywgMjA2LCA0MSwgMywgCi0gICAgMjIwLCAxMDIsIDQxLCAzLCAyMTAsIDExNiwgNDEsIDMsIDIxMCwgODIsIDQxLCAzLCAyNTEsIDMzLCA0MSwgMywgMjM1LCAKLSAgICAxNDEsIDQxLCAzLCAyMjgsIDE4NSwgNDEsIDMsIDE5MSwgNDEsIDMsIDE3NiwgNDEsIDMsIDIzNCwgMjM0LCA0MSwgMywgCi0gICAgMjI5LCA1NiwgNDEsIDMsIDI0MywgMTM1LCA0MSwgMywgMTg0LCA0MSwgMywgMTk3LCA0MSwgMywgMjI3LCAxNjUsIDQxLCAzLCAKLSAgICAyMjYsIDE4MywgNDEsIDMsIDIyNiwgMTc5LCA0MSwgMywgMjQxLCA1MywgNDEsIDMsIDIxMSwgMjE1LCA0MSwgMywgMjExLCAKLSAgICAyMTEsIDQxLCAzLCAyMjQsIDI0OSwgNDEsIDMsIDI1MiwgOSwgNDEsIDMsIDI1MSwgMTkzLCA0MSwgMywgMjMxLCAxMDQsIAotICAgIDQxLCAzLCAyMzMsIDI0MiwgNDEsIDMsIDIzMCwgMjU1LCA0MSwgMywgMjQzLCA2NywgNDEsIDMsIDI0NCwgMzQsIDQxLCAzLCAKLSAgICAyMTMsIDEyNywgNDEsIDMsIDIxNiwgMTcsIDQxLCAzLCAyMTYsIDE1MywgNDEsIDMsIDI0OCwgNiwgNDEsIDMsIDI0OCwgMTAsIAotICAgIDQxLCAzLCAyMzIsIDEyNywgNDEsIDMsIDIyMiwgMTk3LCA0MSwgMywgMjQ3LCAxMjUsIDQxLCAzLCAyMjksIDEyMCwgNDEsIAotICAgIDMsIDIxOSwgNDAsIDQxLCAzLCAyMjAsIDEsIDQxLCAzLCAyMTAsIDIxLCA0MSwgMywgMjEwLCA2NiwgNDEsIDMsIDI0OSwgCi0gICAgMTc0LCA0MSwgMywgMjM1LCA1OSwgNDEsIDMsIDIyOCwgMTU5LCA0MSwgMywgMjEwLCAyMjksIDQxLCAzLCAyMzQsIDEwLCAKLSAgICA0MSwgMywgMjI5LCA0MSwgNDEsIDMsIDI0MiwgMTY0LCA0MSwgMywgMjMwLCAxMzIsIDQxLCAzLCAyMjgsIDY0LCA0MSwgMywgCi0gICAgMjI3LCAxMzIsIDQxLCAzLCA3MCwgNDEsIDMsIDIxNCwgMTkwLCA0MSwgMywgMjQwLCAyMjIsIDQxLCAzLCAyNDAsIDIxMiwgCi0gICAgNDEsIDMsIDIxMSwgMTk1LCA0MSwgMywgMjExLCAxODksIDQxLCAzLCAyMjQsIDE1MCwgNDEsIDMsIDI1MiwgOCwgNDEsIDMsIAotICAgIDI1MSwgMTI1LCA0MSwgMywgMjMxLCAxMDMsIDQxLCAzLCAyMzMsIDI0MCwgNDEsIDMsIDIzMCwgMjU0LCA0MSwgMywgMjQzLCAKLSAgICA2NiwgNDEsIDMsIDI0MywgMjM0LCA0MSwgMywgMjEyLCAxMTYsIDQxLCAzLCAyMTUsIDExOCwgNDEsIDMsIDIxNiwgMTM2LCAKLSAgICA0MSwgMywgMjQ4LCA0LCA0MSwgMywgMjQ4LCA5LCA0MSwgMywgMjMyLCA5OCwgNDEsIDMsIDIyMiwgMTQwLCA0MSwgMywgCi0gICAgMjQ2LCA3OCwgNDEsIDMsIDIyOSwgMTE1LCA0MSwgMywgMjE4LCA4MywgNDEsIDMsIDIxOSwgMjI1LCA0MSwgMywgMjEwLCAKLSAgICAxMywgNDEsIDMsIDIxMCwgNjIsIDQxLCAzLCAyNDksIDExMiwgNDEsIDMsIDIzNSwgNTEsIDQxLCAzLCAyMjgsIDE1NSwgNDEsIAotICAgIDMsIDIxMCwgMjEyLCA0MSwgMywgMjMzLCAyMTcsIDQxLCAzLCAyMjksIDQwLCA0MSwgMywgMjQyLCAxMTMsIDQxLCAzLCAKLSAgICAyMzAsIDEwMiwgNDEsIDMsIDIyNywgMjM3LCA0MSwgMywgMjI3LCAxMjgsIDQxLCAzLCA3NiwgNDEsIDMsIDIyNiwgMTk2LCAKLSAgICA0MSwgMywgMjI5LCAwLCA0MSwgMywgMjQxLCA2OCwgNDEsIDMsIDI0MSwgNTYsIDQxLCAzLCAyMTEsIDIyNywgNDEsIDMsIAotICAgIDIxMSwgMjE2LCA0MSwgMywgMjI1LCAxNiwgNDEsIDMsIDI1MiwgMTAsIDQxLCAzLCAyNTEsIDIwNSwgNDEsIDMsIDIzMSwgCi0gICAgMTA1LCA0MSwgMywgMjMzLCAyNDMsIDQxLCAzLCAyMzEsIDEsIDQxLCAzLCAyNDMsIDY5LCA0MSwgMywgMjQzLCA2OCwgNDEsIAotICAgIDMsIDI0NCwgNDMsIDQxLCAzLCAyMTMsIDEzOCwgNDEsIDMsIDExMSwgNDEsIDMsIDIxNiwgMTU2LCA0MSwgMywgMjQ4LCA3LCAKLSAgICA0MSwgMywgMjQ4LCAxMSwgNDEsIDMsIDIzMiwgMTU2LCA0MSwgMywgMjIyLCAyMTEsIDQxLCAzLCAyNDcsIDE0NSwgNDEsIDMsIAotICAgIDIyOSwgMTI0LCA0MSwgMywgMjE5LCA1OCwgNDEsIDMsIDIyMCwgNywgNDEsIDMsIDIxMCwgMjMsIDQxLCAzLCAyMTAsIDY3LCAKLSAgICA0MSwgMywgMjQ5LCAyMzgsIDQxLCAzLCAyMzUsIDY4LCA0MSwgMywgMjI4LCAxNjAsIDQxLCAzLCAyMTAsIDI0NCwgNDEsIDMsIAotICAgIDIzNCwgMjgsIDQxLCAzLCAyMjksIDQyLCA0MSwgMywgMjQyLCAxNzQsIDQxLCAzLCAyMzAsIDE2MSwgNDEsIDMsIDIyOCwgCi0gICAgNzQsIDQxLCAzLCAyMjcsIDEzNCwgNDEsIDMsIDc1LCA0MSwgMywgMjQ1LCAxNTAsIDQxLCAzLCAyMjksIDYxLCA0MSwgMywgCi0gICAgMjQxLCAyMzgsIDQxLCAzLCAyNDEsIDIwOSwgNDEsIDMsIDIxMiwgMjIsIDQxLCAzLCAyMTIsIDEyLCA0MSwgMywgMjI1LCAKLSAgICAyMjEsIDQxLCAzLCAyNTIsIDE0LCA0MSwgMywgMjUyLCA3NSwgNDEsIDMsIDIzMSwgMTE3LCA0MSwgMywgMjMzLCAyNDgsIAotICAgIDQxLCAzLCAyMzMsIDI0NiwgNDEsIDMsIDIzMSwgNywgNDEsIDMsIDI0MywgNzYsIDQxLCAzLCAyNDMsIDc0LCA0MSwgMywgCi0gICAgMjQ0LCAxNTQsIDQxLCAzLCAyMTMsIDI1NSwgNDEsIDMsIDIxNywgMjIsIDQxLCAzLCAyMTYsIDE5NSwgNDEsIDMsIDI0OCwgCi0gICAgMTcsIDQxLCAzLCAyNDgsIDE0LCA0MSwgMywgMjMzLCA1OCwgNDEsIDMsIDIyMywgMTI4LCA0MSwgMywgMjQ4LCA5MCwgNDEsIAotICAgIDMsIDIyOSwgMTQwLCA0MSwgMywgMjIxLCAxODEsIDQxLCAzLCAyMjAsIDYzLCA0MSwgMywgMjEwLCA5NCwgNDEsIDMsIDIxMCwgCi0gICAgNzQsIDQxLCAzLCAyNTAsIDE5MCwgNDEsIDMsIDIzNSwgMTI2LCA0MSwgMywgMjI4LCAxNzgsIDQxLCAzLCAyMTEsIDQ3LCAKLSAgICA0MSwgMywgMjM0LCAxODIsIDQxLCAzLCAyMjksIDUyLCA0MSwgMywgMjI5LCA0OCwgNDEsIDMsIDI0MywgNjIsIDQxLCAzLCAKLSAgICAyNDMsIDUxLCA0MSwgMywgMjMxLCA5MSwgNDEsIDMsIDIyOSwgMTA3LCA0MSwgMywgMjI3LCAxNTYsIDQxLCAzLCAyMjksIAotICAgIDc5LCA0MSwgMywgMjMzLCAyMiwgNDEsIDI0OSwgMjE5LCA0MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA0MSwgMjI0LCAxMywgCi0gICAgNzgsIDQxLCAzLCAyMjksIDEyMywgMjQ0LCAxOTYsIDQxLCAzLCAyMjksIDEyMywgMTc2LCA0MSwgMywgMjI5LCAxMjMsIAotICAgIDIxOSwgNDAsIDQxLCAxNiwgMjQ0LCAxNDQsIDQxLCAxNiwgMjM0LCAxODAsIDQxLCAxNiwgMjE2LCA4MSwgNDEsIDE2LCAKLSAgICAyMjgsIDIwOCwgNDEsIDE2LCAyNTIsIDE0NywgNDEsIDE2LCAyNDQsIDE5NSwgNDEsIDE2LCAyMTcsIDEwMSwgNDEsIDE2LCAKLSAgICAyNDgsIDE3NiwgNDEsIDE2LCAyNDcsIDEyNCwgNDEsIDE2LCAyMzMsIDIwNiwgNDEsIDE2LCAyMTYsIDIxLCA0MSwgMTYsIAotICAgIDI0NywgMTQ0LCA0MSwgMTYsIDIzNSwgNjAsIDQxLCAyMSwgMjEwLCA4NiwgNDEsIDIxLCAxMTAsIDQxLCAyMSwgMTA1LCA0MSwgCi0gICAgMjEsIDE1OCwgNDEsIDIxLCAxNjEsIDQxLCAyMSwgMTg5LCA0MSwgMjEsIDE5NCwgNDEsIDIxLCAxOTgsIDQxLCAyMSwgMTk1LCAKLSAgICA0MSwgMjEsIDIwMCwgNDEsIDMsIDIyOSwgMTIzLCAxODQsIDQxLCAzLCAyMjksIDEyMywgMjQ3LCAxNDUsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDkwLCAzMywgNCwgMSwgMjEwLCA5MCwgMzMsIDYsIDEsIDI0NiwgMzQsIDMzLCA0LCAxLCAyNDYsIDM0LCAzMywgNiwgCi0gICAgMSwgMjIzLCA0OSwgMjQ2LCAzNiwgMzMsIDQsIDEsIDIyMywgNDksIDI0NiwgMzYsIDMzLCA2LCAxLCAyMzUsIDE4NSwgMzMsIAotICAgIDQsIDEsIDIzNSwgMTg1LCAzMywgNiwgMSwgMjQ3LCAxNjEsIDMzLCA0LCAxLCAyNDcsIDE2MSwgMzMsIDYsIDEsIDIzMCwgCi0gICAgMTQwLCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIzMCwgMTQwLCAyMTQsIDIwNSwgMzMsIDYsIDEsIDI1MSwgMTM2LCAyMjYsIAotICAgIDIwMSwgMzMsIDQsIDEsIDI1MSwgMTM2LCAyMjYsIDIwMSwgMzMsIDYsIDEsIDIyOSwgODcsIDIxMSwgMzEsIDMzLCA0LCAxLCAKLSAgICAyMjksIDg3LCAyMTEsIDMxLCAzMywgNiwgMSwgMjExLCAyOCwgMiwgMjUyLCAxODUsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMTEsIAotICAgIDI4LCAyLCAyNTIsIDE4NSwgMjExLCAzMSwgMzMsIDYsIDEsIDIzNSwgMTgzLCAyMTEsIDU5LCAzMywgNCwgMSwgMjM1LCAKLSAgICAxODMsIDIxMSwgNTksIDMzLCA2LCAxLCAyMjMsIDQ5LCAyMTAsIDIxMiwgMzMsIDQsIDEsIDIyMywgNDksIDIxMCwgMjEyLCAKLSAgICAzMywgNiwgMSwgMjM1LCAxODMsIDYxLCAzMywgNCwgMSwgMjM1LCAxODMsIDYxLCAzMywgNiwgMSwgMjUwLCAwLCAyMzIsIAotICAgIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTAsIDAsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MSwgMjE0LCAKLSAgICAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjE0LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAyNTAsIDAsIDIzMiwgCi0gICAgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTgzLCAyNTAsIDAsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDIxMCwgMjQ2LCAzMywgNCwgMSwgMjEwLCAyNDYsIDMzLCA2LCAxLCAyMjMsIDQ5LCAyMTUsIDE3OCwgMzMsIDQsIDEsIDIyMywgCi0gICAgNDksIDIxNSwgMTc4LCAzMywgNiwgMSwgMjE5LCA1MiwgMjQ4LCA5MCwgMzMsIDQsIDEsIDIxOSwgNTIsIDI0OCwgOTAsIDMzLCAKLSAgICA2LCAxLCAyMTksIDUyLCAyNDUsIDE3NCwgMzMsIDQsIDEsIDIxOSwgNTIsIDI0NSwgMTc0LCAzMywgNiwgMSwgMjE5LCA1MiwgCi0gICAgMjQ1LCAxNTksIDMzLCA0LCAxLCAyMTksIDUyLCAyNDUsIDE1OSwgMzMsIDYsIDEsIDIzMCwgMTQ0LCA3NiwgMzMsIDQsIDEsIAotICAgIDIzMCwgMTQ0LCA3NiwgMzMsIDYsIDEsIDI1MSwgMjQwLCA3NiwgMzMsIDQsIDEsIDI1MSwgMjQwLCA3NiwgMzMsIDYsIDEsIAotICAgIDUyLCAyMzAsIDE0NCwgNzYsIDMzLCA0LCAxLCA1MiwgMjMwLCAxNDQsIDc2LCAzMywgMSwgMjMwLCA4NiwgNzYsIDM4LCAzMywgCi0gICAgMjEyLCAxMDAsIDM4LCAzMywgMjE2LCAyNDgsIDIzMCwgMTkxLCA1MCwgMzgsIDMzLCAyNDAsIDIxMSwgMjMwLCAxOTEsIDUwLCAKLSAgICAzOCwgMzMsIDIxNiwgMTQ4LCAyMzAsIDE5MSwgNTAsIDIxOSwgOTMsIDI1MywgMjE2LCAzOCwgMzMsIDEsIDIxNCwgMjAyLCAKLSAgICAyMzYsIDYwLCAzOCwgMzMsIDEsIDczLCAzOCwgMzMsIDEsIDIxMSwgOCwgMzgsIDMzLCAxLCA3MCwgMzgsIDMzLCAxLCAyNDIsIAotICAgIDMsIDUwLCAzOCwgMzMsIDEsIDIxMSwgMjcsIDM4LCAzMywgMSwgMjE5LCA1MiwgNTAsIDM4LCAzMywgMSwgMjI2LCAyMDEsIAotICAgIDM4LCAzMywgMjM0LCAxOTIsIDM4LCAzMywgMjI1LCAyMjcsIDMzLCAyMzQsIDE5MiwgMzMsIDIyNSwgMjI3LCAzMywgNiwgMSwgCi0gICAgMjQ2LCA0NiwgMzMsIDQsIDEsIDI0NiwgNDYsIDMzLCA2LCAxLCAyNDYsIDI3LCAzMywgNCwgMSwgMjQ2LCAyNywgMzMsIDYsIAotICAgIDEsIDIxMCwgNTIsIDMzLCA0LCAxLCAyMTAsIDUyLCAzMywgNiwgMSwgMjUwLCAyMDYsIDMzLCA0LCAxLCAyNTAsIDIwNiwgCi0gICAgMzMsIDYsIDEsIDI0NiwgMjUsIDMzLCA0LCAxLCAyNDYsIDI1LCAzMywgNiwgMSwgMjE3LCAyMywgMiwgMjMwLCAyMjQsIAotICAgIDEwMywgMzMsIDQsIDEsIDIxNywgMjMsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyMTUsIDc4LCAzMywgNCwgMSwgCi0gICAgMjE1LCA3OCwgMzMsIDYsIDEsIDIxNSwgMTYwLCAzMywgNCwgMSwgMjE1LCAxNjAsIDMzLCA2LCAxLCAyMTUsIDE2NCwgMzMsIAotICAgIDQsIDEsIDIxNSwgMTY0LCAzMywgNiwgMSwgMjE3LCAyOCwgMzMsIDQsIDEsIDIxNywgMjgsIDMzLCA2LCAxLCAyNDAsIDE5OCwgCi0gICAgMzMsIDQsIDEsIDI0MCwgMTk4LCAzMywgNiwgMSwgMjE5LCAyMDYsIDMzLCA0LCAxLCAyMTksIDIwNiwgMzgsIDMzLCAxLCAKLSAgICAyMzUsIDE4MywgNzUsIDIwLCAxLCA2MSwgMjAsIDEsIDE3NiwgMjAsIDEsIDcwLCAyMCwgMSwgMjMzLCAyMTcsIDIwLCAxLCAKLSAgICAyNDUsIDIwOSwgMjAsIDEsIDIyMywgMTA4LCAyMCwgMSwgMjE3LCA4NiwgMjAsIDEsIDc2LCAyMCwgMSwgMjI3LCAxNDgsIAotICAgIDIwLCAxLCA3MywgMjAsIDEsIDIzMywgMTM1LCAyMCwgMSwgMTkwLCAyMCwgMSwgMjIyLCAyMzksIDIwLCAxLCAyMjMsIDI5LCAKLSAgICAyMCwgMSwgMjMzLCA0OSwgMjAsIDEsIDIzMSwgNzksIDIwLCAxLCAyMTcsIDEwMSwgMjAsIDEsIDIyOSwgMTQ2LCAyMCwgMSwgCi0gICAgMjI4LCAxODMsIDIwLCAxLCAxOTMsIDIwLCAxLCAyMTgsIDQsIDIwLCAxLCAyMzAsIDEwMiwgMjAsIDEsIDIyMCwgMjcsIDIwLCAKLSAgICAxLCAyMTksIDE5MSwgMjAsIDEsIDIyMCwgMzcsIDIwLCAxLCAyMjAsIDEyMywgMjAsIDEsIDIzMywgMTU1LCAyMCwgMSwgCi0gICAgMjM0LCAxNTYsIDIwLCAxLCAyMjcsIDIwOSwgMjAsIDEsIDIyNywgMjM3LCAyMCwgMSwgMjI4LCAxNTQsIDIwLCAxLCAyMTAsIAotICAgIDIyNiwgMjAsIDEsIDIxOSwgMjI1LCAyMCwgMSwgMjEwLCAxODcsIDIwLCAxLCAxOTEsIDIwLCAxLCAyMjgsIDksIDIwLCAxLCAKLSAgICAyMzQsIDE0MiwgMjAsIDEsIDIyNSwgMTUxLCAyMCwgMSwgMjI4LCAxNzYsIDIwLCAxLCAyMjcsIDI0NiwgMjAsIDEsIDIyNCwgCi0gICAgMTQ0LCAyMCwgMSwgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDIxMSwgMjAsIDEsIDI0NCwgMTQ3LCAyMCwgMSwgMjIyLCAxNDAsIAotICAgIDIwLCAxLCAyMzIsIDk4LCAyMCwgMSwgMjMwLCAyMzAsIDIwLCAxLCAyMjgsIDIzMywgMjAsIDEsIDIyMywgNTEsIDIwLCAxLCAKLSAgICAyMjMsIDE3MSwgMjAsIDEsIDIzNCwgMTY1LCAyMCwgMSwgMjI5LCA3LCAyMCwgMSwgMjI5LCA1NiwgMjAsIDEsIDIyOSwgNzcsIAotICAgIDIwLCAxLCAyMjAsIDcsIDIwLCAxLCAyMjQsIDE0NywgMjAsIDEsIDI0MywgMjM0LCAyMCwgMSwgMjQ0LCAzNywgMjAsIDEsIAotICAgIDIxMiwgNjUsIDIwLCAxLCAxOTcsIDIwLCAxLCAyMzIsIDI0MSwgMjAsIDEsIDIyNSwgMTA4LCAyMCwgMSwgMjMyLCAxMTksIAotICAgIDIwLCAxLCAyMzQsIDI4LCAyMCwgMSwgMjMxLCAxMTQsIDIwLCAxLCAyMjMsIDgzLCAyMCwgMSwgMjMxLCA1OCwgMjAsIDEsIAotICAgIDE4NCwgMjAsIDEsIDIxNiwgMTE3LCAyMCwgMSwgMjM0LCA5MiwgMjAsIDEsIDIzMCwgMTYxLCAyMCwgMSwgMjMxLCAxMjIsIAotICAgIDIwLCAxLCAyMTYsIDIzMCwgMjAsIDEsIDIzMywgMjUxLCAyMCwgMSwgMjE2LCAyNDcsIDIwLCAxLCAyMjcsIDIzOCwgMjAsIAotICAgIDEsIDIyMSwgMjUxLCAyMCwgMSwgMjQ0LCAxOTIsIDIwLCAxLCAyMzMsIDI1MywgMjAsIDEsIDIzNCwgMjQsIDIwLCAzOCwgCi0gICAgMTY0LCAyMzQsIDUsIDIwLCAzOCwgMTY0LCAyMTUsIDExMCwgMjAsIDIyOCwgMTgyLCAyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAyMCwgMjQ5LCAyMjYsIDIwLCAyNDksIDIxOSwgMjAsIDIyMCwgMTUwLCAyMCwgMjI0LCAxMywgNzgsIDU4LCAxLCAyNTAsIAotICAgIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjUsIDYxLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAyMjUsIDYxLCA1OCwgMSwgCi0gICAgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjIwLCA4NCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgMjIwLCA4NCwgCi0gICAgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyNCwgMzAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIAotICAgIDIyNCwgMzAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjIsIDE0MCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgCi0gICAgMjExLCA3MCwgMjIyLCAxNDAsIDU4LCAxLCAyNDUsIDIwLCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgCi0gICAgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTE4LCAKLSAgICAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NiwgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjAsIDI0NiwgMTE4LCAKLSAgICAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAKLSAgICAyMjUsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgCi0gICAgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyMCwgMjMzLCAKLSAgICAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMjUsIDIzMywgMzksIAotICAgIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDIzMywgMzksIDEzOCwgCi0gICAgMTMwLCA1OCwgMSwgNTksIDY3LCAxMzAsIDU4LCAxLCA1OSwgMjE5LCA5NSwgNTgsIDEsIDU5LCAyMDMsIDEzMCwgNTgsIDEsIAotICAgIDIzMiwgMTA4LCA0NCwgMjQ5LCAxNjEsIDI1NCwgMTA5LCA1OCwgMSwgMjIzLCAxNTcsIDEyMCwgNzQsIDU4LCAxLCAyMjMsIAotICAgIDE1NywgMTI0LCA3NCwgNTgsIDEsIDIyMywgMTU3LCAyNDUsIDMxLCA3OCwgNTgsIDEsIDIyMywgMTU3LCAyMzUsIDE5MywgCi0gICAgMjQ1LCAzMSwgNzgsIDU4LCAxLCAxMjEsIDIzNSwgMTkzLCAyNDUsIDMxLCA3OCwgNTgsIDEsIDIxOCwgMTExLCAyMiwgMTI1LCAKLSAgICAyMTYsIDMwLCA1OCwgMSwgMjE4LCAxMTEsIDIyLCAxMjEsIDIxNiwgMzAsIDcsIDYsIDEsIDI0NSwgMTk5LCAyNTQsIDE3MCwgCi0gICAgNywgNCwgMSwgMjQ1LCAxOTksIDI1NCwgMTcwLCA3LCA2LCAxLCAyNDUsIDE5OSwgMjU0LCAxOTYsIDcsIDQsIDEsIDI0NSwgCi0gICAgMTk5LCAyNTQsIDE5NiwgNywgNiwgMSwgMjQxLCAyMDcsIDcsIDQsIDEsIDI0MSwgMjA3LCA3LCA2LCAxLCAyMTUsIDQwLCA3LCAKLSAgICA0LCAxLCAyMTUsIDQwLCA3LCA2LCAxLCAyMTUsIDIyOSwgNywgNCwgMSwgMjE1LCAyMjksIDcsIDYsIDEsIDI0OSwgMTEwLCAKLSAgICA3LCA0LCAxLCAyNDksIDExMCwgNywgNiwgMSwgMjQ5LCAxMTEsIDIsIDI0OSwgMjE5LCA3LCA0LCAxLCAyNDksIDExMSwgMiwgCi0gICAgMjQ5LCAyMTksIDcsIDEsIDQsIDYsIDI0NSwgNiwgNywgMSwgNCwgNiwgMjIyLCA5MSwgNywgNiwgMSwgMjU1LCA3MywgNywgCi0gICAgNCwgMSwgMjU1LCA3MywgNywgNiwgMSwgMjU0LCA3MywgNywgNCwgMSwgMjU0LCA3MywgNywgNiwgMSwgMjUzLCAxOTIsIDcsIAotICAgIDQsIDEsIDI1MywgMTkyLCA3LCA2LCAxLCAyNTMsIDE3NiwgNywgNCwgMSwgMjUzLCAxNzYsIDcsIDYsIDEsIDI1MywgMTc3LCAKLSAgICAyLCAyMDMsIDEzMCwgNywgNCwgMSwgMjUzLCAxNzcsIDIsIDIwMywgMTMwLCA3LCA2LCAxLCAyNTMsIDE2NywgNywgNCwgMSwgCi0gICAgMjUzLCAxNjcsIDcsIDYsIDEsIDIyMywgNDksIDI1MSwgNjcsIDIsIDI0NywgMTIwLCA3LCA0LCAxLCAyMjMsIDQ5LCAyNTEsIAotICAgIDY3LCAyLCAyNDcsIDEyMCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDkxLCA3LCA2LCAKLSAgICAxLCAyMzUsIDI0LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgCi0gICAgMjM1LCAyNCwgMiwgMjE4LCAxMDMsIDIyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDIxOCwgMTAzLCAKLSAgICAyMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAyNTEsIDEzNSwgMTU2LCA3LCA0LCAxLCAyNTEsIDEzNSwgMTU2LCA3LCA2LCAKLSAgICAxLCAyMzMsIDE0OSwgMiwgMTI1LCA5MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMTk5LCAyMTgsIDEwMywgMjI2LCAxMjAsIDcsIDQsIDEsIDE0NCwgMiwgMTk5LCAyMTgsIDEwMywgMjI2LCAxMjAsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjMyLCAxMjMsIDcsIDQsIDEsIDE0NCwgMiwgMjMyLCAxMjMsIDcsIDYsIDEsIDIyNiwgMTgzLCA3LCA0LCAKLSAgICAxLCAyMjYsIDE4MywgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgCi0gICAgMjI2LCAxMDYsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDI0NCwgNTMsIAotICAgIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAyNDQsIDUzLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAyMjksIDIxNywgNzcsIAotICAgIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDIyOSwgMjE3LCA3NywgNywgNiwgMSwgMjI0LCA5NywgMiwgMjE4LCAxMDMsIAotICAgIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA0LCAxLCAyMjQsIDk3LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIAotICAgIDYsIDEsIDIyNCwgOTcsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMjI0LCA5NywgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAKLSAgICAxLCAyMjMsIDIyNCwgMjIyLCAxODYsIDcsIDQsIDEsIDIyMywgMjI0LCAyMjIsIDE4NiwgNywgNiwgMSwgMjIyLCAxMzAsIAotICAgIDIyMiwgMTg2LCA3LCA0LCAxLCAyMjIsIDEzMCwgMjIyLCAxODYsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAyNDcsIDI1NSwgCi0gICAgOTEsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIDIxMiwgMTA2LCA3LCA0LCAxLCAyMTIsIAotICAgIDEwNiwgNywgNiwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA0LCAxLCAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDYsIDEsIAotICAgIDIxNiwgMTUyLCAyLCA5MSwgNywgNCwgMSwgMjE2LCAxNTIsIDIsIDkxLCA3LCA2LCAxLCAyMTYsIDE1MiwgMiwgMjE4LCAKLSAgICAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA0LCAxLCAyMTYsIDE1MiwgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIAotICAgIDM5LCA3LCA2LCAxLCAyMTMsIDI0NSwgNywgNCwgMSwgMjEzLCAyNDUsIDcsIDYsIDEsIDI0NSwgNjUsIDcsIDQsIDEsIDI0NSwgCi0gICAgNjUsIDcsIDYsIDEsIDIzNSwgMTcxLCA3LCA0LCAxLCAyMzUsIDE3MSwgNywgNiwgMSwgMjQ5LCAyMDcsIDcsIDQsIDEsIAotICAgIDI0OSwgMjA3LCA1OCwgMSwgMjE0LCAxMzMsIDcsIDQsIDEsIDI0NiwgNjksIDcsIDQsIDEsIDIzMiwgODQsIDcsIDQsIDEsIAotICAgIDIzMCwgODAsIDcsIDQsIDEsIDIyNywgMjAxLCA3LCA0LCAxLCAyMjIsIDEyOSwgNywgMSwgNCwgNiwgMjIyLCAxMjksIDcsIAotICAgIDQsIDEsIDIxNSwgMTA4LCA3LCA0LCAxLCAyMTQsIDE5NywgNywgNiwgMSwgMjM1LCAyMTMsIDI0OSwgNjAsIDcsIDQsIDEsIAotICAgIDIzNSwgMjEzLCAyNDksIDYwLCA3LCA2LCAxLCAyMzUsIDIxMywgMjQ1LCA2LCA3LCA0LCAxLCAyMzUsIDIxMywgMjQ1LCA2LCAKLSAgICA3LCA2LCAxLCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDYsIDEsIDIxNSwgOTQsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNCwgCi0gICAgMSwgMjE1LCA5NCwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA2LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDQsIDEsIDIxNSwgOTQsIAotICAgIDE1NiwgNywgNiwgMSwgMjM1LCAyMTMsIDE1MywgNywgNCwgMSwgMjM1LCAyMTMsIDE1MywgNywgNiwgMSwgMjM1LCAyMTMsIAotICAgIDIyMiwgOTEsIDcsIDQsIDEsIDIzNSwgMjEzLCAyMjIsIDkxLCA3LCA2LCAxLCAyMzUsIDIxMywgMjE3LCAxNTIsIDcsIDQsIAotICAgIDEsIDIzNSwgMjEzLCAyMTcsIDE1MiwgNTgsIDEsIDEyMSwgMjUwLCAzMSwgMjU1LCAxNCwgNTgsIDEsIDI0OSwgMjI2LCA1OCwgCi0gICAgMSwgMjE5LCAyNTEsIDI0NSwgOTgsIDUwLCA3LCA2LCAxLCAyMjEsIDI1NSwgNywgNCwgMSwgMjIxLCAyNTUsIDcsIDYsIDEsIAotICAgIDIxNSwgOTQsIDI0MiwgNjAsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMjMsIDU1LCAyNDEsIDUyLCAyMiwgMjUyLCA0MSwgNywgCi0gICAgNiwgMSwgMjMwLCAyNiwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjUxLCAKLSAgICA2NywgMiwgMTMwLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxMzAsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDI0OCwgOTEsIAotICAgIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgCi0gICAgNCwgMSwgMjM1LCAyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIAotICAgIDEsIDIzMCwgMjYsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAxLCAKLSAgICAyMjIsIDkyLCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDEwMywgNTgsIDEsIDYsIDI0MiwgNjEsIDIsIAotICAgIDkxLCA1OCwgMSwgNCwgMjcsIDIyNiwgMjM0LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxOTMsIDcsIDI0NSwgMTAzLCAxLCAKLSAgICAyMjMsIDQ5LCAyNDUsIDYsIDcsIDI0NSwgMTAzLCAxLCAyMjMsIDQ5LCAyMjYsIDEwNSwgNywgMjQ1LCAxMDMsIDEsIDIzNSwgCi0gICAgMTkzLCAxOTMsIDcsIDI0NSwgMTAzLCAxLCAyNDAsIDE1NCwgMjMyLCAxMjksIDcsIDI0NSwgMTAzLCAxLCAyNTQsIDIzLCAKLSAgICAxOTMsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNjEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzMsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgNSwgMjQ2LCA0OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3MCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3NSwgCi0gICAgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCA1LCAyNDEsIDI1MywgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyMzQsIDI4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIzNCwgMTA1LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDI0MiwgMTc0LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0MiwgMjI0LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDUsIAotICAgIDI1NCwgNzUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ5LCAyMzgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjUwLCA4NiwgCi0gICAgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzUsIDY4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIzNSwgMTA5LCAyMTcsIAotICAgIDIzMCwgMjI5LCAyMTQsIDEsIDIxNSwgMTMzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxNSwgMTM5LCAyMTcsIDIzMCwgCi0gICAgMjI5LCAyMTQsIDEsIDI0OCwgMTA1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OCwgMTE0LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDExMSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTYsIDE1NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDcsIAotICAgIDE0NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDgsIDcsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjI4LCA3NCwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAxLCAyMjUsIDE2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyNSwgMTIxLCAyMTcsIDIzMCwgCi0gICAgMjI5LCAyMTQsIDEsIDI1MSwgMjA1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI1MiwgMTAsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMSwgMjMwLCAxNjEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjIyLCAyMTEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgCi0gICAgMjMyLCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjIyLCAxNjUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE5LCAKLSAgICA1OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDEsIDY4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA2MSwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNzMsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDcwLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDI1LCA1LCA3NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgMjI2LCAxODMsIDIxNywgMjMwLCAyMjksIDIxNCwgCi0gICAgMjI1LCAxMiwgMjMxLCAxNTgsIDIxNywgMjMwLCAyMjksIDIxNCwgMjI1LCAxMiwgMjMxLCAxNTcsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMjI1LCAxMiwgMjMxLCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMjI1LCAxMiwgMjMxLCAxNTUsIDIyOCwgNTYsIAotICAgIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAKLSAgICAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMzQsIDIyNCwgMTksIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgCi0gICAgMjE5LCAxMTcsIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjQ1LCAxODgsIDIyOCwgNTYsIDIzNSwgMjQwLCAKLSAgICAyNDQsIDIsIDEzNCwgMjE5LCAxMTYsIDIyOCwgNTYsIDIzNSwgMjQwLCAyMjQsIDIyLCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIAotICAgIDIyNSwgNDAsIDc4LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjIyLCAxMTgsIDc4LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjI0LCAyMywgCi0gICAgNzgsIDIyNSwgMTQ0LCAxLCAxNzYsIDIyNSwgMTQ0LCAxLCAyMzQsIDEzMiwgMjI1LCAxNDQsIDEsIDI0MywgMTM1LCAyMjUsIAotICAgIDE0NCwgMSwgMjI5LCA3NywgMjI1LCAxNDQsIDEsIDI1MSwgMzMsIDIyNSwgMTQ0LCAxLCAyNTAsIDE1NywgMjI1LCAxNDQsIAotICAgIDEsIDIzNSwgMTQxLCAyMjUsIDE0NCwgMSwgMjI3LCAxNjUsIDIyNSwgMTQ0LCAxLCAyMTcsIDEwNSwgMjI1LCAxNDQsIDEsIAotICAgIDIxNiwgMjA4LCAyMjUsIDE0NCwgMSwgMjQ4LCAyMjEsIDIyNSwgMTQ0LCAxLCAxOTcsIDIyNSwgMTQ0LCAxLCAxOTAsIDIyNSwgCi0gICAgMTQ0LCAxLCAyMjUsIDE0NywgMjI1LCAxNDQsIDEsIDI1MiwgMTkxLCAyMjUsIDE0NCwgMSwgMTg0LCAyMjUsIDE0NCwgMSwgCi0gICAgMjE1LCAxODMsIDIyNSwgMTQ0LCAxLCAyMTUsIDE3NSwgMjI1LCAxNDQsIDEsIDI0NiwgMzgsIDIyNSwgMTQ0LCAxLCAyMTIsIAotICAgIDY1LCAyMjUsIDE0NCwgMSwgMjEwLCA4MiwgMjI1LCAxNDQsIDEsIDIxMCwgMTE2LCAyMjUsIDE0NCwgMSwgNCwgNjEsIDIyNSwgCi0gICAgMTQ0LCAxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMDUsIDIyNSwgMTQ0LCAxLCAyMzMsIDEzNSwgMjI1LCAxNDQsIDEsIDIyMCwgCi0gICAgMTAyLCAyMjUsIDE0NCwgMSwgMjA2LCAyMjUsIDE0NCwgMSwgMTYyLCAyMjUsIDE0NCwgMSwgNjEsIDIyNSwgMTQ0LCAxLCAKLSAgICA3MywgMjI1LCAxNDQsIDEsIDcwLCAyMjUsIDE0NCwgMSwgNzUsIDIyNSwgMTQ0LCAxLCA3NiwgMjI1LCAxNDQsIDEsIDIyNCwgCi0gICAgODgsIDIyNSwgMTQ0LCAxLCAyMTEsIDE2NSwgMjI1LCAxNDQsIDEsIDI0NCwgMTk2LCAyMjUsIDE0NCwgMSwgMjQzLCAyOSwgCi0gICAgMjI1LCAxNDQsIDEsIDI0NSwgMjA5LCAyMjUsIDE0NCwgMjE4LCA3MywgMSwgMjEyLCA2NSwgMjI1LCAxNDQsIDIxOCwgNzMsIAotICAgIDEsIDE5MSwgMjI1LCAxNDQsIDEsIDIxNSwgMTU2LCAyMjUsIDE0NCwgMSwgMjE1LCAxNDQsIDIyNSwgMTQ0LCAxLCAyNDgsIAotICAgIDEzNSwgMjI1LCAxNDQsIDEsIDIyOCwgMTEwLCAyMjUsIDE0NCwgMSwgMjU0LCAxNDEsIDE5MSwgMjI1LCAxNDQsIDEsIDIxMywgCi0gICAgMTM0LCAyMjAsIDEwMiwgMjI1LCAxNDQsIDEsIDIxMywgMTM1LCAxNjIsIDIyNSwgMTQ0LCAxLCAyNTMsIDIyMywgMjQ0LCAKLSAgICAxOTYsIDIyNSwgMTQ0LCAyMTgsIDczLCAxLCAyMDUsIDIyNSwgMTQ0LCAyMTgsIDI1LCAxLCAyMDUsIDIyNSwgMTQ0LCAxLCAKLSAgICAyNTAsIDI1NSwgMjI1LCAxNDQsIDIxOSwgMTU1LCAyNDEsIDIzNiwgNzgsIDIyNSwgMTQ0LCA1MiwgMjQxLCAyMzYsIDc4LCAKLSAgICAyMjUsIDE0NCwgMTY0LCAyMjAsIDk1LCAyMjUsIDE0NCwgMTY0LCA1MiwgMjIwLCA5NSwgMTc5LCA1LCAyNTQsIDc1LCAxNzksIAotICAgIDUsIDIxMywgMTQ3LCAxNzksIDEsIDYxLCAxNzksIDEsIDI1NSwgNzMsIDE3OSwgMSwgNzMsIDE3OSwgMSwgMjM2LCAzMywgCi0gICAgMTc5LCAxLCA3MCwgMTc5LCAxLCAyMTQsIDExOCwgMTc5LCAxLCAxNDksIDE1MywgMTc5LCAxLCAxNDksIDIyMiwgMTgwLCAKLSAgICAxNzksIDEsIDE0OSwgMTU2LCAxNzksIDEsIDE0OSwgMjMyLCAxODUsIDE3OSwgMSwgNzUsIDE3OSwgMSwgMjQ1LCAyMDksIAotICAgIDE3OSwgMSwgMjU0LCAyMDEsIDE3OSwgMSwgNzYsIDE3OSwgMSwgMjI2LCAxODMsIDE3OSwgMSwgMjUzLCAxOTIsIDE3OSwgMSwgCi0gICAgMTc2LCAxNzksIDEsIDIzNCwgMTMyLCAxNzksIDEsIDI0MywgMTM1LCAxNzksIDEsIDI0MiwgMjQ5LCAxNzksIDEsIDIyOSwgCi0gICAgNzcsIDE3OSwgMSwgMjUxLCAzMywgMTc5LCAxLCAyNTAsIDE1NywgMTc5LCAxLCAyMzUsIDE0MSwgMTc5LCAxLCAyMzUsIAotICAgIDExNCwgMTc5LCAxLCAyMjcsIDE2NSwgMTc5LCAxLCAyMTUsIDE1NiwgMTc5LCAxLCAyMTUsIDE0NCwgMTc5LCAxLCAyNDgsIAotICAgIDEzNSwgMTc5LCAxLCAyNDgsIDExOSwgMTc5LCAxLCAyMjgsIDExMCwgMTc5LCAxLCAyMTcsIDEwNSwgMTc5LCAxLCAyMTYsIAotICAgIDIwOCwgMTc5LCAxLCAyNDgsIDIyMSwgMTc5LCAxLCAyNDgsIDI1LCAxNzksIDEsIDE5NywgMTc5LCAxLCAxOTAsIDE3OSwgMSwgCi0gICAgMjI1LCAxNDcsIDE3OSwgMSwgMjUyLCAxOTEsIDE3OSwgMSwgMjUyLCAxOCwgMTc5LCAxLCAxODQsIDE3OSwgMSwgMTkxLCAKLSAgICAxNzksIDEsIDIwNSwgMTc5LCAxLCAyMzMsIDEzNSwgMTc5LCAxLCAyMTQsIDI3LCAxNzksIDEsIDIyMCwgMTAyLCAxNzksIDEsIAotICAgIDIxOCwgMjIzLCAxNzksIDEsIDIwNiwgMTc5LCAxLCAxNjIsIDE3OSwgMSwgMjMyLCAxODQsIDE3OSwgMTE2LCA1LCAyNDIsIAotICAgIDQ0LCAxNzksIDI1LCA1LCAyNTUsIDczLCAxNzksIDI1LCA1LCA3MywgMTc5LCAyNSwgNSwgMjM2LCAzMywgMTc5LCAyNSwgNSwgCi0gICAgNzAsIDE3OSwgMjUsIDUsIDIxNCwgMTE4LCAxNzksIDI1LCA1LCAxNDksIDE1MywgMTc5LCAyNSwgNSwgMTQ5LCAyMjIsIAotICAgIDE4MCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTYsIDE3OSwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3OSwgMjUsIDUsIDc1LCAKLSAgICAxNzksIDI1LCA1LCAyNDUsIDIwOSwgMTc5LCAyNSwgNSwgMjU0LCAyMDEsIDE3OSwgMjUsIDUsIDc2LCAxNzksIDI1LCA1LCAKLSAgICAyMjYsIDE4MywgMTc5LCAyNSwgNSwgMjUzLCAxOTIsIDE3OSwgNSwgMjEzLCAxNTIsIDE3OSwgMjQ4LCAxNzgsIDE3OSwgNTIsIAotICAgIDI0OCwgMTc4LCAxNzksIDIxLCAyMTAsIDg2LCAxNzksIDIxLCAxMTAsIDE3OSwgMjEsIDEwNSwgMTc5LCAyMSwgMTU4LCAKLSAgICAxNzksIDIxLCAxNjEsIDE3OSwgMjEsIDE4OSwgMTc5LCAyMSwgMTk0LCAxNzksIDIxLCAxOTgsIDE3OSwgMjEsIDE5NSwgCi0gICAgMTc5LCAyMSwgMjAwLCAzOCwgODQsIDIxLCAyMTAsIDg2LCAzOCwgODQsIDIxLCAxMTAsIDM4LCA4NCwgMjEsIDEwNSwgMzgsIAotICAgIDg0LCAyMSwgMTU4LCAzOCwgODQsIDIxLCAxNjEsIDM4LCA4NCwgMjEsIDE4OSwgMzgsIDg0LCAyMSwgMTk0LCAzOCwgODQsIAotICAgIDIxLCAxOTgsIDM4LCA4NCwgMjEsIDE5NSwgMzgsIDg0LCAyMSwgMjAwLCAzOCwgODQsIDEsIDYxLCAzOCwgODQsIDEsIDcwLCAKLSAgICAzOCwgODQsIDEsIDE3NiwgMzgsIDg0LCAxLCAxOTcsIDM4LCA4NCwgMSwgMTkwLCAzOCwgODQsIDEsIDIwNSwgMzgsIDg0LCAKLSAgICAxLCAyMTMsIDE3NiwgMzgsIDg0LCA1LCAyNTMsIDE3NSwgODQsIDUsIDIxOSwgMTcsIDI1MCwgMjU1LCA4NCwgNSwgMjUxLCAKLSAgICAwLCAyMTMsIDE1MiwgODQsIDUsIDUyLCAyNTEsIDAsIDIxMywgMTUyLCA4NCwgNSwgMjUxLCAwLCAxMDUsIDg0LCA1LCAyNTEsIAotICAgIDAsIDE1OCwgODQsIDUsIDI1MSwgMCwgMjUzLCAxNzUsIDg0LCA1LCAyMjQsIDEyNCwgODQsIDI0MywgMTAwLCAyNDQsIDEwMywgCi0gICAgODQsIDI1MCwgMjM4LCA4NCwgMjQxLCAyMzAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDIxMCwgODYsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMjEsIDExMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTA1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAKLSAgICAxNTgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE2MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTg5LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDIxLCAxOTQsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE5OCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgCi0gICAgMTk1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAyMDAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTc2LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDEsIDIzNCwgMTMyLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI0MywgMTM1LCAyMzQsIDE4OCwgMjMyLCAKLSAgICAyNDIsIDEsIDIyOSwgNzcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjA2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyMCwgCi0gICAgMTAyLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxMCwgMTE2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyNywgMTY1LCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNywgMTA1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI0MCwgMjI2LCAyMzQsIAotICAgIDE4OCwgMjMyLCAyNDIsIDEsIDE5NywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxOTAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgCi0gICAgMjI1LCAxNDcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTg0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI0OCwgMjIxLCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI1MiwgMTkxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIwNSwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCAxOTEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjMzLCAxMzUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgCi0gICAgMjEyLCA2NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTYsIDIwOCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxNjIsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE0LCAyNywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNTEsIDMzLCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDEsIDYxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyNiwgMjM0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDczLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyNiwgMTgzLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCAyMTQsIDIxNCwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgNzUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDcwLCAyMzQsIDE4OCwgMjMyLCAKLSAgICAyNDIsIDI1LCAyNDUsIDIwOSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgNzYsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAKLSAgICAyMjUsIDMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgMjUxLCAxMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIDI1MSwgCi0gICAgMTMsIDIyNSwgMzAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgNSwgMjQ5LCA3NywgMjM0LCAxODgsIDIzMiwgMjQyLCA1LCAyMTksIAotICAgIDE5OSwgMjIzLCA5MywgMSwgMTc2LCAyMjMsIDkzLCAxLCAyNDMsIDEzNSwgMjIzLCA5MywgMSwgMjI5LCA3NywgMjIzLCA5MywgCi0gICAgMSwgMjE3LCAxMDUsIDIyMywgOTMsIDEsIDI0OCwgMjIxLCAyMjMsIDkzLCAxLCAxOTcsIDIyMywgOTMsIDEsIDE5MCwgMjIzLCAKLSAgICA5MywgMSwgMjUyLCAxOTEsIDIyMywgOTMsIDEsIDE4NCwgMjIzLCA5MywgMSwgMjUxLCAzMywgMjIzLCA5MywgMSwgMjM1LCAKLSAgICAxNDEsIDIyMywgOTMsIDEsIDIyNywgMTY1LCAyMjMsIDkzLCAxLCAyMDYsIDIyMywgOTMsIDEsIDIwNSwgMjIzLCA5MywgMSwgCi0gICAgMjMzLCAxMzUsIDIyMywgOTMsIDEsIDE5MSwgMjIzLCA5MywgMSwgMjEyLCA2NSwgMjIzLCA5MywgMSwgMTYyLCAyMjMsIDkzLCAKLSAgICAxLCAyMzEsIDEyNCwgMjIzLCA5MywgMSwgMjI5LCA1NiwgMjIzLCA5MywgMSwgMjI5LCAxNDgsIDIyMywgOTMsIDEsIDIyNywgCi0gICAgMTM1LCAyMjMsIDkzLCAxLCA2MSwgMjIzLCA5MywgMjUsIDUsIDczLCAyMjMsIDkzLCAyNSwgNSwgNzAsIDIyMywgOTMsIDI1LCAKLSAgICA1LCA3NSwgMjIzLCA5MywgMjUsIDUsIDI1NCwgMjAxLCAyMjMsIDkzLCAyNSwgNSwgNzYsIDIyMywgOTMsIDI1LCA1LCAyNTMsIAotICAgIDE5MiwgMjIzLCA5MywgMjUsIDUsIDI0NSwgNTUsIDIyMywgOTMsIDI1LCA1LCAyNDUsIDIzMywgMjIzLCA5MywgMTE2LCA1LCAKLSAgICAyMjksIDc5LCAyMjMsIDkzLCAxMTYsIDUsIDIzMCwgMjUsIDIyMywgOTMsIDExNiwgNSwgMTUzLCAyMjMsIDkzLCAxMTYsIDUsIAotICAgIDI0MiwgNjAsIDIyMywgOTMsIDIxMywgMTUyLCAyMjMsIDkzLCAyMjEsIDE3MywgNzgsIDI0LCAxMDAsIDIxNiwgOTcsIDI0LCAKLSAgICAxMDAsIDIxNiwgOTYsIDI0LCAxMDAsIDIxNiwgOTQsIDI0LCAxMDAsIDIxNiwgOTksIDI0LCAxMDAsIDIyMywgMjEsIDI0LCAKLSAgICAxMDAsIDIyMywgNSwgMjQsIDEwMCwgMjIzLCAwLCAyNCwgMTAwLCAyMjMsIDIsIDI0LCAxMDAsIDIyMywgMTgsIDI0LCAxMDAsIAotICAgIDIyMywgMTEsIDI0LCAxMDAsIDIyMywgNCwgMjQsIDEwMCwgMjIzLCAyMywgMjQsIDEwMCwgMjIzLCA2LCAyNCwgMTAwLCAKLSAgICAyMjMsIDI1LCAyNCwgMTAwLCAyMjMsIDIyLCAyNCwgMTAwLCAyMzAsIDIxMywgMjQsIDEwMCwgMjMwLCAyMDQsIDI0LCAxMDAsIAotICAgIDIzMCwgMjA3LCAyNCwgMTAwLCAyMjUsIDgwLCAyNCwgMTAwLCAyMjUsIDkxLCAyNCwgMTAwLCAyMjUsIDkyLCAyNCwgMTAwLCAKLSAgICAyMTgsIDIwNywgMjQsIDEwMCwgMjM2LCA0NiwgMjQsIDEwMCwgMjM2LCA1MywgMjQsIDEwMCwgMjE4LCAyMTgsIDI0LCAxMDAsIAotICAgIDIxOCwgMjA1LCAyNCwgMTAwLCAyMjUsIDEzMCwgMjQsIDEwMCwgMjQxLCAxNjcsIDI0LCAxMDAsIDIxOCwgMjAyLCAxNTUsIAotICAgIDUsIDIyNiwgMjcsIDE1NSwgNSwgMjUwLCAxODcsIDE1NSwgNSwgMjMzLCA2NiwgMTU1LCA1LCAyMTEsIDI0MywgMTU1LCAxLCAKLSAgICA2MSwgMTU1LCAxLCAyNDAsIDE1NCwgMjM0LCAxOTEsIDE1NSwgMSwgNzMsIDE1NSwgMSwgMjM2LCAzMywgMTU1LCAxLCA3MCwgCi0gICAgMTU1LCAxLCAyMjYsIDkwLCAyNTAsIDE2MywgMTU1LCAxLCAyMjksIDc4LCAyMzMsIDI4LCAxNTUsIDEsIDIyOSwgNzgsIAotICAgIDIzMywgMjksIDIyMywgMTQyLCAxNTUsIDEsIDc1LCAxNTUsIDEsIDI1NCwgMjAxLCAxNTUsIDEsIDc2LCAxNTUsIDEsIDE3NiwgCi0gICAgMTU1LCAxLCAyMzUsIDEzLCAyMjEsIDIyOCwgMTU1LCAxLCAyMzUsIDEzLCAyMzAsIDY2LCAxNTUsIDEsIDI0MywgMTM1LCAKLSAgICAxNTUsIDEsIDI0MywgMTM2LCAyMzAsIDY2LCAxNTUsIDEsIDIyOSwgNzcsIDE1NSwgMSwgMjUxLCAzMywgMTU1LCAxLCAyNTEsIAotICAgIDM0LCAyMzAsIDY2LCAxNTUsIDEsIDIzNSwgMTQxLCAxNTUsIDEsIDIyNywgMTY2LCAyMzAsIDY2LCAxNTUsIDEsIDIzNSwgCi0gICAgMTQyLCAyMzEsIDIwNywgMTU1LCAxLCAyMjcsIDE2NSwgMTU1LCAxLCAyMTUsIDE1NiwgMTU1LCAxLCAyMTUsIDE1NywgMjMxLCAKLSAgICAyMDcsIDE1NSwgMSwgMjQ4LCAxMzUsIDE1NSwgMSwgMjQ4LCAxMzYsIDIzMSwgMjA3LCAxNTUsIDEsIDIyOSwgMjI5LCAyMzAsIAotICAgIDY2LCAxNTUsIDEsIDIxNywgMTA1LCAxNTUsIDEsIDIxNywgMTA2LCAyMzAsIDY2LCAxNTUsIDEsIDI0OCwgMjIxLCAxNTUsIAotICAgIDEsIDI0OCwgMjIyLCAyMzEsIDIwNywgMTU1LCAxLCAxOTcsIDE1NSwgMSwgMTkwLCAxNTUsIDEsIDIyNiwgOTAsIDIzMCwgCi0gICAgNjYsIDE1NSwgMSwgMjUyLCAxOTEsIDE1NSwgMSwgMjUyLCAxOTIsIDIzMCwgNjYsIDE1NSwgMSwgMTg0LCAxNTUsIDEsIAotICAgIDE5MSwgMTU1LCAxLCAyMDUsIDE1NSwgMSwgMjIzLCAxODgsIDI1NCwgMjEwLCAxNTUsIDEsIDIzMywgMTM1LCAxNTUsIDEsIAotICAgIDIxMiwgNjUsIDE1NSwgMSwgMjIyLCAzNCwgMjMwLCA2NiwgMTU1LCAxLCAyMjIsIDM0LCAyMzEsIDIwNywgMTU1LCAxLCAKLSAgICAyMDYsIDE1NSwgMSwgMTYyLCAxNTUsIDUsIDI1MCwgMTg4LCAyMTYsIDI1MCwgMTU1LCAyNSwgNSwgMjE3LCA0NywgMTU1LCAKLSAgICAyNSwgNSwgMjE2LCAzNSwgMTU1LCAyNSwgNSwgMjExLCAxOTAsIDE1NSwgMjUsIDUsIDIxMSwgMTkxLCAyMzEsIDY5LCAxNTUsIAotICAgIDI1LCA1LCAyMTgsIDQ3LCAxNTUsIDI1LCA1LCAyMTgsIDQ4LCAyMzEsIDU3LCAxNTUsIDI1LCA1LCAyMTcsIDY1LCAxNTUsIAotICAgIDI1LCA1LCAyNDcsIDE5NCwgMjMwLCA2NSwgMTU1LCAyNSwgNSwgMjI1LCAxODQsIDE1NSwgMTE2LCA1LCAyMzQsIDE1OCwgCi0gICAgMTU1LCAxMTYsIDUsIDIyNSwgMTk2LCAxNTUsIDExNiwgNSwgMjUxLCAxOSwgMTU1LCAyMjYsIDQwLCAxNTUsIDQzLCAyMjMsIAotICAgIDY5LCAxNTUsIDQ0LCAyMjMsIDY5LCAxNTUsIDIyNiwgNzksIDI1NCwgMTE3LCAxNTUsIDIyNiwgNzksIDIzMSwgMjI0LCAKLSAgICAxNTUsIDIyNiwgNzksIDIzMiwgODgsIDE1NSwgMjI2LCA3OSwgMjExLCAyMzgsIDE1NSwgMjI2LCA3OSwgMjI2LCA0MSwgCi0gICAgMTU1LCAyMjYsIDc5LCAyMzIsIDIwNSwgMTU1LCAyMjYsIDc5LCAyMzIsIDgyLCAxNTUsIDIyNiwgNzksIDI1NCwgMjQ5LCAKLSAgICAxNTUsIDIyNiwgNzksIDI1NCwgMjUwLCAyNTQsIDI0OSwgMTU1LCAyMjYsIDc5LCAyMjUsIDUxLCAxNTUsIDIxNSwgOTQsIAotICAgIDIyNiwgNzksIDIyNSwgNTEsIDE1NSwgMjI2LCAzNiwgMTU1LCAyMSwgMjEwLCA4NiwgMTU1LCAyMSwgMTEwLCAxNTUsIDIxLCAKLSAgICAxMDUsIDE1NSwgMjEsIDE1OCwgMTU1LCAyMSwgMTYxLCAxNTUsIDIxLCAxODksIDE1NSwgMjEsIDE5NCwgMTU1LCAyMSwgCi0gICAgMTk4LCAxNTUsIDIxLCAxOTUsIDE1NSwgMjEsIDIwMCwgMTU1LCAyMjYsIDc5LCAyMTYsIDY5LCAyMTUsIDEwNiwgMTU1LCAKLSAgICAyMjYsIDc5LCAyMzUsIDE2NywgMTcyLCAxLCA2MSwgMTcyLCAxLCA3MywgMTcyLCAxLCA3MCwgMTcyLCAxLCA3NSwgMTcyLCAKLSAgICAxLCAyNTQsIDIwMSwgMTcyLCAxLCA3NiwgMTcyLCAxLCAxNzYsIDE3MiwgMSwgMjM0LCAxMzIsIDE3MiwgMSwgMjQzLCAxMzUsIAotICAgIDE3MiwgMSwgMjQyLCAyNDksIDE3MiwgMSwgMjI4LCAyNDUsIDE3MiwgMSwgMjI5LCA3NywgMTcyLCAxLCAyNTAsIDE1NywgCi0gICAgMTcyLCAxLCAyNTAsIDExMiwgMTcyLCAxLCAyMzUsIDE0MSwgMTcyLCAxLCAyMzUsIDExNCwgMTcyLCAxLCAyMjgsIDIzNSwgCi0gICAgMTcyLCAxLCAyMjgsIDIzNywgMTcyLCAxLCAyMjgsIDIzNiwgMTcyLCAxLCAyMTcsIDEwNSwgMTcyLCAxLCAyMTYsIDIwOCwgCi0gICAgMTcyLCAxLCAyNDgsIDIyMSwgMTcyLCAxLCAyNDgsIDI1LCAxNzIsIDEsIDIyNywgMjA3LCAxNzIsIDEsIDE5NywgMTcyLCAxLCAKLSAgICAyNDgsIDEzNSwgMTcyLCAxLCAxOTAsIDE3MiwgMSwgMjI0LCAyMjAsIDE3MiwgMSwgMjI1LCAxNDcsIDE3MiwgMSwgMjUyLCAKLSAgICAxOTEsIDE3MiwgMSwgMjUyLCAxOCwgMTcyLCAxLCAyMzAsIDk1LCAxNzIsIDEsIDE4NCwgMTcyLCAxLCAyNTIsIDExMSwgCi0gICAgMTcyLCAxLCAxOTEsIDE3MiwgMSwgMjA1LCAxNzIsIDEsIDIzMywgMTM1LCAxNzIsIDEsIDIxNCwgMjcsIDE3MiwgMSwgMjE4LCAKLSAgICAyMjMsIDE3MiwgMSwgMjA2LCAxNzIsIDEsIDE2MiwgMTcyLCAyNSwgNSwgMjU1LCA3MywgMTcyLCAyNSwgNSwgNzMsIDE3MiwgCi0gICAgMjUsIDUsIDIzNiwgMzMsIDE3MiwgMjUsIDUsIDI0NSwgMTk1LCAxNzIsIDI1LCA1LCA3MCwgMTcyLCAyNSwgNSwgMjI2LCAKLSAgICAyMzQsIDE3MiwgMjUsIDUsIDc2LCAxNzIsIDI1LCA1LCAyNTQsIDIwMSwgMTcyLCAyNSwgNSwgMjUzLCAxOTIsIDE3MiwgMjUsIAotICAgIDUsIDIxNCwgMjE0LCAxNzIsIDExNiwgNSwgMTkxLCAxNzIsIDExNiwgNSwgMjA1LCAxNzIsIDExNiwgNSwgMjMzLCAxMzUsIAotICAgIDE3MiwgMTE2LCA1LCAyMTIsIDY1LCAxNzIsIDEsIDQwLCAyMzUsIDIzLCAxNzIsIDEsIDQwLCAyNDMsIDIwMiwgMTcyLCAxLCAKLSAgICA0MCwgMjI5LCA3OSwgMTcyLCAxMTYsIDUsIDQwLCAyMjksIDc5LCAxNzIsIDEsIDQwLCAyNTAsIDE1OCwgMTcyLCAxLCA0MCwgCi0gICAgMjE3LCAxNTIsIDE3MiwgMSwgNDAsIDIzMCwgMjUsIDE3MiwgMSwgNDAsIDIyNiwgMTA1LCAxNzIsIDEsIDQwLCAyMTEsIAotICAgIDExNywgMTcyLCAxLCA0MCwgMTUzLCAxNzIsIDEsIDQwLCAxNTYsIDE3MiwgMSwgNDAsIDIxOCwgMjI2LCAxNzIsIDExNiwgNSwgCi0gICAgNDAsIDE5MywgMTcyLCAxMTYsIDUsIDQwLCAyNDIsIDYwLCAxNzIsIDIxLCAyMTAsIDg2LCAxNzIsIDIxLCAxMTAsIDE3MiwgCi0gICAgMjEsIDEwNSwgMTcyLCAyMSwgMTU4LCAxNzIsIDIxLCAxNjEsIDE3MiwgMjEsIDE4OSwgMTcyLCAyMSwgMTk0LCAxNzIsIDIxLCAKLSAgICAxOTgsIDE3MiwgMjEsIDE5NSwgMTcyLCAyMSwgMjAwLCAxNzIsIDIyNCwgMTQxLCAyMTgsIDI1MSwgMTcyLCAyMjQsIDE0MSwgCi0gICAgMjQ4LCAxNzgsIDE3MiwgMjI0LCAxNDEsIDUyLCAyNDgsIDE3OCwgMTcyLCAyMjQsIDE0MSwgMjE1LCAyMTEsIDI0OCwgMTc4LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDI0MywgMTM1LCA2OCwgMSwgMjM0LCAxMjYsIDI1MSwgMzMsIDY4LCAxLCAyMzQsIDEyNiwgCi0gICAgMjUwLCAxNTcsIDY4LCAxLCAyMzQsIDEyNiwgMjM1LCAxNDEsIDY4LCAxLCAyMzQsIDEyNiwgMjM1LCAxMTQsIDY4LCAxLCAKLSAgICAyMzQsIDEyNiwgMjI3LCAxNjUsIDY4LCAxLCAyMzQsIDEyNiwgMjE1LCAxNTYsIDY4LCAxLCAyMzQsIDEyNiwgMjE1LCAxNDQsIAotICAgIDY4LCAxLCAyMzQsIDEyNiwgMjQ4LCAxMzUsIDY4LCAxLCAyMzQsIDEyNiwgMjQ4LCAxMTksIDY4LCAxLCAyMzQsIDEyNiwgCi0gICAgMjQ4LCAyNSwgNjgsIDEsIDIzNCwgMTI2LCAxOTcsIDY4LCAxLCAyMzQsIDEyNiwgMjA2LCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDE2MiwgNjgsIDEsIDIzNCwgMTI2LCAyNDEsIDE4OSwgNjgsIDEsIDIzNCwgMTI2LCAyNDQsIDE5NiwgNjgsIDU4LCAxLCAKLSAgICAyMzQsIDEyNiwgMjIzLCAxMDksIDY4LCAxLCAyMzQsIDEyNiwgMjExLCAxNjUsIDY4LCAxLCAyMzQsIDEyNiwgMjEwLCAxMTYsIAotICAgIDY4LCAxLCAyMzQsIDEyNiwgMjA1LCA2OCwgMjMyLCAxNDUsIDIzNCwgMTI2LCAyMjYsIDI1MywgNjgsIDIzMiwgMTQ1LCAKLSAgICAyMzQsIDEyNiwgMjI0LCA0MywgNjgsIDIzMiwgMTQ1LCAyMzQsIDEyNiwgMjQxLCAxMjEsIDY4LCAxNiwgMjU0LCAxOTAsIAotICAgIDI0NSwgMzAsIDY4LCAxNiwgMjU0LCAxOTAsIDExMCwgNjgsIDE2LCAyNTQsIDE5MCwgMTA1LCA2OCwgMSwgMjU0LCAxOTAsIAotICAgIDIwNSwgNjgsIDUsIDIyNiwgMjMsIDIzNCwgMjEzLCAyMTYsIDMwLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMjgsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjM0LCAyOCwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDEwNSwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIAotICAgIDEwNSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDExNCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDExNCwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyNDIsIDE3NCwgMzksIDIwOCwgMSwgMTI1LCAyNDIsIDE3NCwgMzksIDIwOCwgMSwgMTIxLCAyMjksIDQsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjI5LCA0LCAzOSwgMjA4LCAxLCAxMjEsIDI0OSwgMjM4LCAzOSwgMjA4LCAxLCAxMjUsIDI0OSwgCi0gICAgMjM4LCAzOSwgMjA4LCAxLCAxMjEsIDI1MCwgODYsIDM5LCAyMDgsIDEsIDEyNSwgMjUwLCA4NiwgMzksIDIwOCwgMSwgMTIxLCAKLSAgICAyMTksIDU4LCAzOSwgMjA4LCAxLCAxMjUsIDIxOSwgNTgsIDM5LCAyMDgsIDEsIDEyMSwgMjI3LCAxMzQsIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgMjI3LCAxMzQsIDM5LCAyMDgsIDEsIDEyMSwgMjQ3LCAxNDUsIDM5LCAyMDgsIDEsIDEyNSwgMjQ3LCAxNDUsIDM5LCAKLSAgICAyMDgsIDEsIDEyMSwgMTExLCAzOSwgMjA4LCAxLCAxMjUsIDExMSwgMzksIDIwOCwgMSwgMTIxLCAyMTYsIDE1NiwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMTYsIDE1NiwgMzksIDIwOCwgMSwgMTIxLCAyMjgsIDc0LCAzOSwgMjA4LCAxLCAxMjUsIDIyOCwgCi0gICAgNzQsIDM5LCAyMDgsIDEsIDEyMSwgMjUxLCAyMDUsIDM5LCAyMDgsIDEsIDEyNSwgMjUxLCAyMDUsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjI1LCAxNiwgMzksIDIwOCwgMSwgMTI1LCAyMjUsIDE2LCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTIxLCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyNSwgMTIxLCAzOSwgMjA4LCAxLCAxMjEsIDI0NCwgNDMsIDM5LCAyMDgsIDEsIDEyNSwgMjQ0LCAKLSAgICA0MywgMzksIDIwOCwgMSwgMTIxLCAyMzAsIDE2MSwgMzksIDIwOCwgMSwgMTI1LCAyMzAsIDE2MSwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgMTI1LCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgMTIxLCAyMjIsIDIxMSwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjIsIDIxMSwgMzksIDIwOCwgMSwgMTIxLCAyMzIsIDE1NiwgMzksIDIwOCwgMSwgMTI1LCAyMzIsIAotICAgIDE1NiwgMzksIDIwOCwgMSwgMTIxLCAyMTMsIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMTMsIDEzOCwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyNDEsIDY4LCAzOSwgMjA4LCAxLCAxMjUsIDI0MSwgNjgsIDM5LCAyMDgsIDEsIDEyMSwgNzYsIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgNzYsIDM5LCAyMDgsIDIzMSwgMjA0LCAyMzQsIDIzMCwgMzksIDIwOCwgMjUsIDI1NSwgNzMsIDM5LCAyMDgsIDI1LCAKLSAgICA3MywgMzksIDIwOCwgMjUsIDIxNCwgMjE0LCAzOSwgMjA4LCAyNSwgNzAsIDM5LCAyMDgsIDI1LCA3NSwgMzksIDIwOCwgMjUsIAotICAgIDc2LCAzOSwgMjA4LCAyMzEsIDIwNCwgMjM0LCAxMDgsIDM5LCAyMDgsIDI1LCAyNDAsIDExOSwgMzksIDIwOCwgMjUsIDIxNCwgCi0gICAgMjEzLCAzOSwgMjA4LCAyNSwgMjE0LCAyMjksIDM5LCAyMDgsIDI1LCAyNTMsIDE5MCwgMzksIDIwOCwgMjUsIDI1MywgMTY3LCAKLSAgICAzOSwgMjA4LCAyNSwgMjU0LCAxMjMsIDM5LCAyMDgsIDI1LCAyNTQsIDEzNiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgCi0gICAgMjQ1LCAxODAsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIyNywgMjA2LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMTYsIAotICAgIDE1NiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjE5LCA0MiwgMzksIDIwOCwgMTYsIDIzNCwgMTMsIDM5LCAyMDgsIDE2LCAKLSAgICAyMjcsIDIwNiwgMzksIDIwOCwgMTYsIDIyMSwgMjUzLCAzOSwgMjA4LCAxNiwgMjQxLCA2OSwgMjQxLCA2NCwgMzksIDIwOCwgCi0gICAgMTYsIDIzNCwgMjIsIDIzNCwgMjEsIDE4NiwgMTg1LCAxLCA3NSwgMTg2LCAxODUsIDEsIDc2LCAxODYsIDE4NSwgMSwgMjUwLCAKLSAgICAxNTcsIDE4NiwgMTg1LCAxLCAyMjcsIDE2NSwgMTg2LCAxODUsIDEsIDIxNSwgMTU2LCAxODYsIDE4NSwgMSwgMjE1LCAxNDQsIAotICAgIDE4NiwgMTg1LCAxLCAyNDgsIDEzNSwgMTg2LCAxODUsIDEsIDI0OCwgMTE5LCAxODYsIDE4NSwgMSwgMjI4LCAxMTAsIDE4NiwgCi0gICAgMTg1LCAxLCAyMjAsIDEwMiwgMTg2LCAxODUsIDEsIDIxOCwgMjIzLCAxODYsIDE4NSwgMjUsIDUsIDIzNiwgMzMsIDE4NiwgCi0gICAgMTg1LCAyNSwgNSwgMjE0LCAxMTgsIDE4NiwgMTg1LCAyNSwgNSwgMjU1LCAzNywgMTg2LCAxODUsIDI1LCA1LCAyNTMsIAotICAgIDE5MiwgMTg2LCAxODUsIDI1LCA1LCAyNTUsIDMwLCAxODYsIDE4NSwgMjUwLCAxMjUsIDE4NiwgMTg1LCAyNTQsIDIwNiwgCi0gICAgMjM0LCA5OCwgMTg2LCAxODUsIDI1NCwgMTAzLCAxODYsIDE4NSwgMywgMjIzLCA3NCwgNzgsIDE4NiwgMTg1LCAyMTEsIAotICAgIDIwOSwgMjIzLCA3NCwgNzgsIDE4NiwgMTg1LCAyNSwgNSwgMjEzLCAxNDcsIDE4NiwgMTg1LCAyMTMsIDE1MiwgMjksIDMsIAotICAgIDIxNSwgMTM3LCAyOSwgMywgMjE1LCAxNDAsIDI5LCAzLCAyMTUsIDE0MywgMjksIDMsIDIxNSwgMTQxLCAyOSwgMywgMjE1LCAKLSAgICAxNDIsIDI5LCAzLCAyMTUsIDEzOSwgMjksIDMsIDI0OCwgMTEzLCAyOSwgMywgMjQ4LCAxMTUsIDI5LCAzLCAyNDgsIDExOCwgCi0gICAgMjksIDMsIDI0OCwgMTE2LCAyOSwgMywgMjQ4LCAxMTcsIDI5LCAzLCAyNDgsIDExNCwgMjksIDMsIDI0NiwgMjgsIDI5LCAzLCAKLSAgICAyNDYsIDMxLCAyOSwgMywgMjQ2LCAzNywgMjksIDMsIDI0NiwgMzUsIDI5LCAzLCAyNDYsIDM2LCAyOSwgMywgMjQ2LCAyOSwgCi0gICAgMjksIDMsIDI1MCwgMjA0LCAyOSwgMywgMjUwLCAxOTgsIDI5LCAzLCAyNTAsIDIwMCwgMjksIDMsIDI1MCwgMjAzLCAyOSwgCi0gICAgMywgMjUwLCAyMDEsIDI5LCAzLCAyNTAsIDIwMiwgMjksIDMsIDI1MCwgMTk5LCAyOSwgMywgMjUyLCAxMTEsIDI5LCAzLCAKLSAgICAyNTIsIDkwLCAyOSwgMywgMjUyLCAxMDIsIDI5LCAzLCAyNTIsIDExMCwgMjksIDMsIDI1MiwgMTA1LCAyOSwgMywgMjUyLCAKLSAgICAxMDYsIDI5LCAzLCAyNTIsIDk0LCAxODYsIDE4NSwgMSwgMjM0LCAxOSwgMTg2LCAxODUsIDEsIDIyMSwgMjUzLCAxODYsIAotICAgIDE4NSwgMSwgMjMzLCAxMDksIDE4NiwgMTg1LCAxLCAyMzAsIDE3MiwgMTg2LCAxODUsIDEsIDE5MCwgMTg2LCAxODUsIDEsIAotICAgIDE5NywgMTg2LCAxODUsIDEsIDI1MCwgMTAyLCAxODYsIDE4NSwgMSwgMjE2LCA5MCwgMTg2LCAxODUsIDEsIDIzNCwgMTAxLCAKLSAgICAxODYsIDE4NSwgMSwgMjI4LCAyNTAsIDE4NiwgMTg1LCAxLCAyMTYsIDE1MCwgMTg2LCAxODUsIDEsIDIxMiwgNjAsIDE4NiwgCi0gICAgMTg1LCAxLCAyMTEsIDY5LCAxODYsIDE4NSwgMSwgMjQwLCAyMTYsIDE4NiwgMTg1LCAxLCAyMTQsIDE5MCwgMTg2LCAxODUsIAotICAgIDEsIDczLCAxODYsIDE4NSwgMSwgMjI1LCAxNDIsIDE4NiwgMTg1LCAxLCAyNTMsIDIwMiwgMTg2LCAxODUsIDEsIDI0MiwgCi0gICAgMTY3LCAxODYsIDE4NSwgMSwgMjM1LCAxMTIsIDE4NiwgMTg1LCAxLCAyMjMsIDE2NiwgMTg2LCAxODUsIDEsIDI1MiwgMTkxLCAKLSAgICAxODYsIDE4NSwgMSwgMjM1LCAxMDAsIDE4NiwgMTg1LCAxLCAyNDcsIDIxOSwgMTg2LCAxODUsIDEsIDI0MiwgMjIxLCAxODYsIAotICAgIDE4NSwgMSwgMjQ4LCA1LCAxODYsIDE4NSwgMSwgMjUyLCAxNiwgMTg2LCAxODUsIDEsIDIzNCwgMjAsIDIzMiwgMTI4LCAKLSAgICAxODYsIDE4NSwgMSwgMjMzLCAxMTAsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjMwLCAxNzMsIDIzMiwgMTI4LCAxODYsIAotICAgIDE4NSwgMSwgMjI2LCA5MCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMjksIDIyOSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAKLSAgICAyMTYsIDkxLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIyOCwgMjUxLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDI0MCwgCi0gICAgMTU0LCAyMzIsIDEyOCwgMTg2LCAxODUsIDI1LCA1LCAyMjYsIDE5NSwgMTg2LCAxODUsIDI1LCA1LCAyMzUsIDI1MywgMTg2LCAKLSAgICAxODUsIDI1LCA1LCAyNTQsIDEyMiwgMTg2LCAxODUsIDI1LCA1LCAyMTEsIDM4LCAxODYsIDE4NSwgMjUsIDUsIDIxOSwgMzIsIAotICAgIDE4NiwgMTg1LCAyNSwgNSwgMjE0LCAxODcsIDE4NiwgMTg1LCAyNSwgNSwgMjUwLCAxMjMsIDE4NiwgMTg1LCAyNSwgNSwgCi0gICAgMjI3LCAxOTEsIDE4NiwgMTg1LCAyNTAsIDEyNCwgMTg2LCAxODUsIDIzMiwgODUsIDIzNSwgMTUwLCAxODYsIDE4NSwgMjU0LCAKLSAgICA0NiwgMjM1LCAxNTAsIDE4NiwgMTg1LCAyMSwgMjEwLCA4NiwgMTg2LCAxODUsIDIxLCAxMTAsIDE4NiwgMTg1LCAyMSwgCi0gICAgMTA1LCAxODYsIDE4NSwgMjEsIDE1OCwgMTg2LCAxODUsIDIxLCAxNjEsIDE4NiwgMTg1LCAyMSwgMTg5LCAxODYsIDE4NSwgCi0gICAgMjEsIDE5NCwgMTg2LCAxODUsIDIxLCAxOTgsIDE4NiwgMTg1LCAyMSwgMTk1LCAxODYsIDE4NSwgMjEsIDIwMCwgMjQsIAotICAgIDE0MywgMjI3LCA3NywgMjQsIDE0MywgMjI3LCA4MiwgMjQsIDE0MywgMjEwLCAyNDMsIDI0LCAxNDMsIDIxMCwgMjQyLCAyNCwgCi0gICAgMTQzLCAyMTAsIDI0MSwgMjQsIDE0MywgMjE1LCAyMywgMjQsIDE0MywgMjE1LCAyNiwgMjQsIDE0MywgMjEwLCAyMTAsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjA2LCAyNCwgMTQzLCAyNDUsIDU0LCAyNCwgMTQzLCAyNDUsIDUyLCAyNCwgMTQzLCAyNDUsIDUzLCAyNCwgCi0gICAgMTQzLCAyNDUsIDUwLCAyNCwgMTQzLCAyNDAsIDE0NCwgMjQsIDE0MywgMjQwLCAxNDMsIDI0LCAxNDMsIDI0MCwgMTQxLCAKLSAgICAyNCwgMTQzLCAyNDAsIDE0MiwgMjQsIDE0MywgMjQwLCAxNDcsIDI0LCAxNDMsIDI0MCwgMTQwLCAyNCwgMTQzLCAyNDAsIAotICAgIDEzOSwgMjQsIDE0MywgMjQwLCAxNDksIDI0LCAxNDMsIDI1NCwgMzMsIDI0LCAxNDMsIDI1NCwgMzIsIDI0LCA5MCwgMjI4LCAKLSAgICAyMTksIDI0LCA5MCwgMjI4LCAyMjUsIDI0LCA5MCwgMjE4LCAyMDQsIDI0LCA5MCwgMjE4LCAyMDMsIDI0LCA5MCwgMjE2LCAKLSAgICA5NiwgMjQsIDkwLCAyMTYsIDk0LCAyNCwgOTAsIDIxNiwgOTMsIDI0LCA5MCwgMjE2LCA5OSwgMjQsIDkwLCAyMTYsIDEwMCwgCi0gICAgMjQsIDkwLCAyMTYsIDkyLCAyNCwgOTAsIDIyMywgNSwgMjQsIDkwLCAyMjMsIDIwLCAyNCwgOTAsIDIxOCwgMjEwLCAyNCwgCi0gICAgOTAsIDIyMywgMTcsIDI0LCA5MCwgMjIzLCA3LCAyNCwgOTAsIDIyMywgOSwgMjQsIDkwLCAyMjIsIDI1MiwgMjQsIDkwLCAKLSAgICAyMjIsIDI1MywgMjQsIDkwLCAyMzQsIDIxOCwgMjQsIDkwLCAyMzAsIDIxMiwgMjQsIDkwLCAyMzAsIDIwNiwgMjQsIDkwLCAKLSAgICAyMTgsIDIxNCwgMjQsIDkwLCAyMzAsIDIwOSwgMjQsIDkwLCAyMzAsIDIxNSwgMjQsIDkwLCAyMjUsIDc2LCAyNCwgOTAsIAotICAgIDIyNSwgODUsIDI0LCA5MCwgMjI1LCA4OSwgMjQsIDkwLCAyMTgsIDIxMiwgMjQsIDkwLCAyMjUsIDc5LCAyNCwgOTAsIDIyNSwgCi0gICAgOTMsIDI0LCA5MCwgMjI1LCA5NCwgMjQsIDkwLCAyMTksIDE0MCwgMjQsIDkwLCAyMTksIDE0MywgMjQsIDkwLCAyMTgsIAotICAgIDIwOCwgMjQsIDkwLCAyMTgsIDIwNiwgMjQsIDkwLCAyMTksIDEzOCwgMjQsIDkwLCAyMTksIDE0NiwgMjQsIDkwLCAyMTksIAotICAgIDE0NywgMjQsIDkwLCAyMTksIDEzMiwgMjQsIDkwLCAyMTksIDE0NSwgMjQsIDkwLCAyMjYsIDMwLCAyNCwgOTAsIDIyNiwgCi0gICAgMzEsIDI0LCA5MCwgMjExLCAyNCwgMjQsIDkwLCAyMTEsIDI1LCAyNCwgOTAsIDI1MCwgNDQsIDI0LCA5MCwgMjUwLCA0MywgCi0gICAgMjQsIDkwLCAyMTgsIDIxOSwgMjQsIDkwLCAyMjUsIDEyOCwgMjQsIDkwLCAyMjUsIDEyNywgOSwgMTQsIDIzOCwgMjQsIDksIAotICAgIDE0LCAyMzgsIDIzLCA5LCAxNCwgMjM4LCAyMiwgOSwgMTQsIDIzOCwgMjEsIDksIDE0LCAyMzgsIDIwLCA5LCAxNCwgMjM4LCAKLSAgICAxOSwgOSwgMTQsIDIzOCwgMTgsIDksIDE0LCAyMzgsIDE3LCA5LCAxNCwgMjM4LCAxNiwgOSwgMTQsIDIzOCwgMTUsIDksIAotICAgIDE0LCAyMzgsIDE0LCA5LCAxNCwgMjM4LCAxMywgOSwgMTQsIDIzOCwgMTIsIDksIDE0LCAyMzgsIDExLCA5LCAxNCwgMjM4LCAKLSAgICAxMCwgOSwgMTQsIDIzOCwgOSwgOSwgMTQsIDIzOCwgOCwgOSwgMTQsIDIzOCwgNywgOSwgMTQsIDIzOCwgNiwgOSwgMTQsIAotICAgIDIzOCwgNSwgOSwgMTQsIDIzOCwgNCwgOSwgMTQsIDIzOCwgMywgOSwgMTQsIDIzOCwgMiwgOSwgMTQsIDIzOCwgMSwgOSwgCi0gICAgMTQsIDIzOCwgMCwgOSwgMTQsIDIzNywgMjU1LCA5LCAxNCwgMjM3LCAyNTQsIDksIDE0LCAyMzcsIDI1MywgOSwgMTQsIAotICAgIDIzNywgMjUyLCA5LCAxNCwgMjM3LCAyNTEsIDksIDE0LCAyMzcsIDI1MCwgOSwgMTQsIDIzNywgMjQ5LCA5LCAxNCwgMjM3LCAKLSAgICAyNDgsIDksIDE0LCAyMzcsIDI0NywgOSwgMTQsIDIzNywgMjQ2LCA5LCAxNCwgMjM3LCAyNDUsIDksIDE0LCAyMzcsIDI0NCwgCi0gICAgOSwgMTQsIDIzNywgMjQzLCA5LCAxNCwgMjM3LCAyNDIsIDksIDE0LCAyMzcsIDI0MSwgOSwgMTQsIDIzNywgMjQwLCA5LCAKLSAgICAxNCwgMjM3LCAyMzksIDksIDE0LCAyMzcsIDIzOCwgOSwgMTQsIDIzNywgMjM3LCA5LCAxNCwgMjM3LCAyMzYsIDksIDE0LCAKLSAgICAyMzcsIDIzNSwgOSwgMTQsIDIzNywgMjM0LCA5LCAxNCwgMjM3LCAyMzMsIDksIDE0LCAyMzcsIDIzMiwgOSwgMTQsIDIzNywgCi0gICAgMjMxLCA5LCAxNCwgMjM3LCAyMzAsIDksIDE0LCAyMzcsIDIyOSwgOSwgMTQsIDIzNywgMjI4LCA5LCAxNCwgMjM3LCAyMjcsIAotICAgIDksIDE0LCAyMzcsIDIyNiwgOSwgMTQsIDIzNywgMjI1LCA5LCAxNCwgMjM3LCAyMjQsIDksIDE0LCAyMzcsIDIyMywgOSwgCi0gICAgMTQsIDIzNywgMjIyLCA5LCAxNCwgMjM3LCAyMjEsIDksIDE0LCAyMzcsIDIyMCwgOSwgMTQsIDIzNywgMjE5LCA5LCAxNCwgCi0gICAgMjM3LCAyMTgsIDksIDE0LCAyMzcsIDIxNywgOSwgMTQsIDIzNywgMjE2LCA5LCAxNCwgMjM3LCAyMTUsIDksIDE0LCAyMzcsIAotICAgIDIxNCwgOSwgMTQsIDIzNywgMjEzLCA5LCAxNCwgMjM3LCAyMTIsIDksIDE0LCAyMzcsIDIxMSwgOSwgMTQsIDIzNywgMjEwLCAKLSAgICA5LCAxNCwgMjM3LCAyMDksIDksIDE0LCAyMzcsIDIwOCwgOSwgMTQsIDIzNywgMjA3LCA5LCAxNCwgMjM3LCAyMDYsIDksIAotICAgIDE0LCAyMzcsIDIwNSwgOSwgMTQsIDIzNywgMjA0LCA5LCAxNCwgMjM3LCAyMDMsIDksIDE0LCAyMzcsIDIwMiwgOSwgMTQsIAotICAgIDIzNywgMjAxLCA5LCAxNCwgMjM3LCAyMDAsIDksIDE0LCAyMzcsIDE5OSwgOSwgMTQsIDIzNywgMTk4LCA5LCAxNCwgMjM3LCAKLSAgICAxOTcsIDksIDE0LCAyMzcsIDE5NiwgOSwgMTQsIDIzNywgMTk1LCA5LCAxNCwgMjM3LCAxOTQsIDksIDE0LCAyMzcsIDE5MywgCi0gICAgOSwgMTQsIDIzNywgMTkyLCA5LCAxNCwgMjM3LCAxOTEsIDksIDE0LCAyMzcsIDE5MCwgOSwgMTQsIDIzNywgMTg5LCA5LCAKLSAgICAxNCwgMjM3LCAxODgsIDksIDE0LCAyMzcsIDE4NywgOSwgMTQsIDIzNywgMTg2LCA5LCAxNCwgMjM3LCAxODUsIDksIDE0LCAKLSAgICAyMzcsIDE4NCwgOSwgMTQsIDIzNywgMTgzLCA5LCAxNCwgMjM3LCAxODIsIDksIDE0LCAyMzcsIDE4MSwgOSwgMTQsIDIzNywgCi0gICAgMTgwLCA5LCAxNCwgMjM3LCAxNzksIDksIDE0LCAyMzcsIDE3OCwgOSwgMTQsIDIzNywgMTc3LCA5LCAxNCwgMjM3LCAxNzYsIAotICAgIDksIDE0LCAyMzcsIDE3NSwgOSwgMTQsIDIzNywgMTc0LCA5LCAxNCwgMjM3LCAxNzMsIDksIDE0LCAyMzcsIDE3MiwgOSwgCi0gICAgMTQsIDIzNywgMTcxLCA5LCAxNCwgMjM3LCAxNzAsIDksIDE0LCAyMzcsIDE2OSwgOSwgMTQsIDIzNywgMTY4LCA5LCAxNCwgCi0gICAgMjM3LCAxNjcsIDksIDE0LCAyMzcsIDE2NiwgOSwgMTQsIDIzNywgMTY1LCA5LCAxNCwgMjM3LCAxNjQsIDksIDE0LCAyMzcsIAotICAgIDE2MywgOSwgMTQsIDIzNywgMTYyLCA5LCAxNCwgMjM3LCAxNjEsIDksIDE0LCAyMzcsIDE2MCwgOSwgMTQsIDIzNywgMTU5LCAKLSAgICA5LCAxNCwgMjM3LCAxNTgsIDksIDE0LCAyMzcsIDE1NywgOSwgMTQsIDIzNywgMTU2LCA5LCAxNCwgMjM3LCAxNTUsIDksIAotICAgIDE0LCAyMzcsIDE1NCwgOSwgMTQsIDIzNywgMTUzLCA5LCAxNCwgMjM3LCAxNTIsIDksIDE0LCAyMzcsIDE1MSwgOSwgMTQsIAotICAgIDIzNywgMTUwLCA5LCAxNCwgMjM3LCAxNDksIDksIDE0LCAyMzcsIDE0OCwgOSwgMTQsIDIzNywgMTQ3LCA5LCAxNCwgMjM3LCAKLSAgICAxNDYsIDksIDE0LCAyMzcsIDE0NSwgOSwgMTQsIDIzNywgMTQ0LCA5LCAxNCwgMjM3LCAxNDMsIDksIDE0LCAyMzcsIDE0MiwgCi0gICAgOSwgMTQsIDIzNywgMTQxLCA5LCAxNCwgMjM3LCAxNDAsIDksIDE0LCAyMzcsIDEzOSwgOSwgMTQsIDIzNywgMTM4LCA5LCAKLSAgICAxNCwgMjM3LCAxMzcsIDksIDE0LCAyMzcsIDEzNiwgOSwgMTQsIDIzNywgMTM1LCA5LCAxNCwgMjM3LCAxMzQsIDksIDE0LCAKLSAgICAyMzcsIDEzMywgOSwgMTQsIDIzNywgMTMyLCA5LCAxNCwgMjM3LCAxMzEsIDksIDE0LCAyMzcsIDEzMCwgOSwgMTQsIDIzNywgCi0gICAgMTI5LCA5LCAxNCwgMjM3LCAxMjgsIDksIDE0LCAyMzcsIDEyNywgOSwgMTQsIDIzNywgMTI2LCA5LCAxNCwgMjM3LCAxMjUsIAotICAgIDksIDE0LCAyMzcsIDEyNCwgOSwgMTQsIDIzNywgMTIzLCA5LCAxNCwgMjM3LCAxMjIsIDksIDE0LCAyMzcsIDEyMSwgOSwgCi0gICAgMTQsIDIzNywgMTIwLCA5LCAxNCwgMjM3LCAxMTksIDksIDE0LCAyMzcsIDExOCwgOSwgMTQsIDIzNywgMTE3LCA5LCAxNCwgCi0gICAgMjM3LCAxMTYsIDksIDE0LCAyMzcsIDExNSwgOSwgMTQsIDIzNywgMTE0LCA5LCAxNCwgMjM3LCAxMTMsIDksIDE0LCAyMzcsIAotICAgIDExMiwgOSwgMTQsIDIzNywgMTExLCA5LCAxNCwgMjM3LCAxMTAsIDksIDE0LCAyMzcsIDEwOSwgOSwgMTQsIDIzNywgMTA4LCAKLSAgICA5LCAxNCwgMjM3LCAxMDcsIDksIDE0LCAyMzcsIDEwNiwgOSwgMTQsIDIzNywgMTA1LCA5LCAxNCwgMjM3LCAxMDQsIDksIAotICAgIDE0LCAyMzcsIDEwMywgOSwgMTQsIDIzNywgMTAyLCA5LCAxNCwgMjM3LCAxMDEsIDksIDE0LCAyMzcsIDEwMCwgOSwgMTQsIAotICAgIDIzNywgOTksIDksIDE0LCAyMzcsIDk4LCA5LCAxNCwgMjM3LCA5NywgOSwgMTQsIDIzNywgOTYsIDksIDE0LCAyMzcsIDk1LCAKLSAgICA5LCAxNCwgMjM3LCA5NCwgOSwgMTQsIDIzNywgOTMsIDksIDE0LCAyMzcsIDkyLCA5LCAxNCwgMjM3LCA5MSwgOSwgMTQsIAotICAgIDIzNywgOTAsIDksIDE0LCAyMzcsIDg5LCA5LCAxNCwgMjM3LCA4OCwgOSwgMTQsIDIzNywgODcsIDksIDE0LCAyMzcsIDg2LCAKLSAgICA5LCAxNCwgMjM3LCA4NSwgOSwgMTQsIDIzNywgODQsIDksIDE0LCAyMzcsIDgzLCA5LCAxNCwgMjM3LCA4MiwgOSwgMTQsIAotICAgIDIzNywgODEsIDksIDE0LCAyMzcsIDgwLCA5LCAxNCwgMjM3LCA3OSwgOSwgMTQsIDIzNywgNzgsIDksIDE0LCAyMzcsIDc3LCAKLSAgICA5LCAxNCwgMjM3LCA3NiwgOSwgMTQsIDIzNywgNzUsIDksIDE0LCAyMzcsIDc0LCA5LCAxNCwgMjM3LCA3MywgOSwgMTQsIAotICAgIDIzNywgNzIsIDksIDE0LCAyMzcsIDcxLCA5LCAxNCwgMjM3LCA3MCwgOSwgMTQsIDIzNywgNjksIDksIDE0LCAyMzcsIDY4LCAKLSAgICA5LCAxNCwgMjM3LCA2NywgOSwgMTQsIDIzNywgNjYsIDksIDE0LCAyMzcsIDY1LCA5LCAxNCwgMjM3LCA2NCwgOSwgMTQsIAotICAgIDIzNywgNjMsIDksIDE0LCAyMzcsIDYyLCA5LCAxNCwgMjM3LCA2MSwgOSwgMTQsIDIzNywgNjAsIDksIDE0LCAyMzcsIDU5LCAKLSAgICA5LCAxNCwgMjM3LCA1OCwgOSwgMTQsIDIzNywgNTcsIDksIDE0LCAyMzcsIDU2LCA5LCAxNCwgMjM3LCA1NSwgOSwgMTQsIAotICAgIDIzNywgNTQsIDksIDE0LCAyMzcsIDUzLCA5LCAxNCwgMjM3LCA1MiwgOSwgMTQsIDIzNywgNTEsIDksIDE0LCAyMzcsIDUwLCAKLSAgICA5LCAxNCwgMjM3LCA0OSwgOSwgMTQsIDIzNywgNDgsIDksIDE0LCAyMzcsIDQ3LCA5LCAxNCwgMjM3LCA0NiwgOSwgMTQsIAotICAgIDIzNywgNDUsIDksIDE0LCAyMzcsIDQ0LCA5LCAxNCwgMjM3LCA0MywgOSwgMTQsIDIzNywgNDIsIDksIDE0LCAyMzcsIDQxLCAKLSAgICA5LCAxNCwgMjM3LCA0MCwgOSwgMTQsIDIzNywgMzksIDksIDE0LCAyMzcsIDM4LCA5LCAxNCwgMjM3LCAzNywgOSwgMTQsIAotICAgIDIzNywgMzYsIDksIDE0LCAyMzcsIDM1LCA5LCAxNCwgMjM3LCAzNCwgOSwgMTQsIDIzNywgMzMsIDksIDE0LCAyMzcsIDMyLCAKLSAgICA5LCAxNCwgMjM3LCAzMSwgOSwgMTQsIDIzNywgMzAsIDksIDE0LCAyMzcsIDI5LCA5LCAxNCwgMjM3LCAyOCwgOSwgMTQsIAotICAgIDIzNywgMjcsIDksIDE0LCAyMzcsIDI2LCA5LCAxNCwgMjM3LCAyNSwgOSwgMTQsIDIzNywgMjQsIDksIDE0LCAyMzcsIDIzLCAKLSAgICA5LCAxNCwgMjM3LCAyMiwgOSwgMTQsIDIzNywgMjEsIDksIDE0LCAyMzcsIDIwLCA5LCAxNCwgMjM3LCAxOSwgOSwgMTQsIAotICAgIDIzNywgMTgsIDksIDE0LCAyMzcsIDE3LCA5LCAxNCwgMjM3LCAxNiwgOSwgMTQsIDIzNywgMTUsIDksIDE0LCAyMzcsIDE0LCAKLSAgICA5LCAxNCwgMjM3LCAxMywgOSwgMTQsIDIzNywgMTIsIDksIDE0LCAyMzcsIDExLCA5LCAxNCwgMjM3LCAxMCwgOSwgMTQsIAotICAgIDIzNywgOSwgOSwgMTQsIDIzNywgOCwgOSwgMTQsIDIzNywgNywgOSwgMTQsIDIzNywgNiwgOSwgMTQsIDIzNywgNSwgOSwgCi0gICAgMTQsIDIzNywgNCwgOSwgMTQsIDIzNywgMywgOSwgMTQsIDIzNywgMiwgOSwgMTQsIDIzNywgMSwgOSwgMTQsIDIzNywgMCwgCi0gICAgOSwgMTQsIDIzNiwgMjU1LCA5LCAxNCwgMjM2LCAyNTQsIDksIDE0LCAyMzYsIDI1MywgOSwgMTQsIDIzNiwgMjUyLCA5LCAKLSAgICAxNCwgMjM2LCAyNTEsIDksIDE0LCAyMzYsIDI1MCwgOSwgMTQsIDIzNiwgMjQ5LCA5LCAxNCwgMjM2LCAyNDgsIDksIDE0LCAKLSAgICAyMzYsIDI0NywgOSwgMTQsIDIzNiwgMjQ2LCA5LCAxNCwgMjM2LCAyNDUsIDksIDE0LCAyMzYsIDI0NCwgOSwgMTQsIDIzNiwgCi0gICAgMjQzLCA5LCAxNCwgMjM2LCAyNDIsIDksIDE0LCAyMzYsIDI0MSwgOSwgMTQsIDIzNiwgMjQwLCA5LCAxNCwgMjM2LCAyMzksIAotICAgIDksIDE0LCAyMzYsIDIzOCwgOSwgMTQsIDIzNiwgMjM3LCA5LCAxNCwgMjM2LCAyMzYsIDksIDE0LCAyMzYsIDIzNSwgOSwgCi0gICAgMTQsIDIzNiwgMjM0LCA5LCAxNCwgMjM2LCAyMzMsIDksIDE0LCAyMzYsIDIzMiwgOSwgMTQsIDIzNiwgMjMxLCA5LCAxNCwgCi0gICAgMjM2LCAyMzAsIDksIDE0LCAyMzYsIDIyOSwgOSwgMTQsIDIzNiwgMjI4LCA5LCAxNCwgMjM2LCAyMjcsIDksIDE0LCAyMzYsIAotICAgIDIyNiwgOSwgMTQsIDIzNiwgMjI1LCA5LCAxNCwgMjM2LCAyMjQsIDksIDE0LCAyMzYsIDIyMywgOSwgMTQsIDIzNiwgMjIyLCAKLSAgICA5LCAxNCwgMjM2LCAyMjEsIDksIDE0LCAyMzYsIDIyMCwgOSwgMTQsIDIzNiwgMjE5LCA5LCAxNCwgMjM2LCAyMTgsIDksIAotICAgIDE0LCAyMzYsIDIxNywgOSwgMTQsIDIzNiwgMjE2LCA5LCAxNCwgMjM2LCAyMTUsIDksIDE0LCAyMzYsIDIxNCwgOSwgMTQsIAotICAgIDIzNiwgMjEzLCA5LCAxNCwgMjM2LCAyMTIsIDksIDE0LCAyMzYsIDIxMSwgOSwgMTQsIDIzNiwgMjEwLCA5LCAxNCwgMjM2LCAKLSAgICAyMDksIDksIDE0LCAyMzYsIDIwOCwgOSwgMTQsIDIzNiwgMjA3LCA5LCAxNCwgMjM2LCAyMDYsIDksIDE0LCAyMzYsIDIwNSwgCi0gICAgOSwgMTQsIDIzNiwgMjA0LCA5LCAxNCwgMjM2LCAyMDMsIDksIDE0LCAyMzYsIDIwMiwgOSwgMTQsIDIzNiwgMjAxLCA5LCAKLSAgICAxNCwgMjM2LCAyMDAsIDksIDE0LCAyMzYsIDE5OSwgOSwgMTQsIDIzNiwgMTk4LCA5LCAxNCwgMjM2LCAxOTcsIDksIDE0LCAKLSAgICAyMzYsIDE5NiwgOSwgMTQsIDIzNiwgMTk1LCA5LCAxNCwgMjM2LCAxOTQsIDksIDE0LCAyMzYsIDE5MywgOSwgMTQsIDIzNiwgCi0gICAgMTkyLCA5LCAxNCwgMjM2LCAxOTEsIDksIDE0LCAyMzYsIDE5MCwgOSwgMTQsIDIzNiwgMTg5LCA5LCAxNCwgMjM2LCAxODgsIAotICAgIDksIDE0LCAyMzYsIDE4NywgOSwgMTQsIDIzNiwgMTg2LCA5LCAxNCwgMjM2LCAxODUsIDksIDE0LCAyMzYsIDE4NCwgOSwgCi0gICAgMTQsIDIzNiwgMTgzLCA5LCAxNCwgMjM2LCAxODIsIDksIDE0LCAyMzYsIDE4MSwgOSwgMTQsIDIzNiwgMTgwLCA5LCAxNCwgCi0gICAgMjM2LCAxNzksIDksIDE0LCAyMzYsIDE3OCwgOSwgMTQsIDIzNiwgMTc3LCA5LCAxNCwgMjM2LCAxNzYsIDksIDE0LCAyMzYsIAotICAgIDE3NSwgOSwgMTQsIDIzNiwgMTc0LCA5LCAxNCwgMjM2LCAxNzMsIDksIDE0LCAyMzYsIDE3MiwgOSwgMTQsIDIzNiwgMTcxLCAKLSAgICA5LCAxNCwgMjM2LCAxNzAsIDksIDE0LCAyMzYsIDE2OSwgOSwgMTQsIDIzNiwgMTY4LCA5LCAxNCwgMjM2LCAxNjcsIDksIAotICAgIDE0LCAyMzYsIDE2NiwgOSwgMTQsIDIzNiwgMTY1LCA5LCAxNCwgMjM2LCAxNjQsIDksIDE0LCAyMzYsIDE2MywgOSwgMTQsIAotICAgIDIzNiwgMTYyLCA5LCAxNCwgMjM2LCAxNjEsIDksIDE0LCAyMzYsIDE2MCwgOSwgMTQsIDIzNiwgMTU5LCA5LCAxNCwgMjM2LCAKLSAgICAxNTgsIDksIDE0LCAyMzYsIDE1NywgOSwgMTQsIDIzNiwgMTU2LCA5LCAxNCwgMjM2LCAxNTUsIDksIDE0LCAyMzYsIDE1NCwgCi0gICAgOSwgMTQsIDIzNiwgMTUzLCA5LCAxNCwgMjM2LCAxNTIsIDksIDE0LCAyMzYsIDE1MSwgOSwgMTQsIDIzNiwgMTUwLCA5LCAKLSAgICAxNCwgMjM2LCAxNDksIDksIDE0LCAyMzYsIDE0OCwgOSwgMTQsIDIzNiwgMTQ3LCA5LCAxNCwgMjM2LCAxNDYsIDksIDE0LCAKLSAgICAyMzYsIDE0NSwgOSwgMTQsIDIzNiwgMTQ0LCA5LCAxNCwgMjM2LCAxNDMsIDksIDE0LCAyMzYsIDE0MiwgOSwgMTQsIDIzNiwgCi0gICAgMTQxLCA5LCAxNCwgMjM2LCAxNDAsIDksIDE0LCAyMzYsIDEzOSwgOSwgMTQsIDIzNiwgMTM4LCA5LCAxNCwgMjM2LCAxMzcsIAotICAgIDksIDE0LCAyMzYsIDEzNiwgOSwgMTQsIDIzNiwgMTM1LCA5LCAxNCwgMjM2LCAxMzQsIDksIDE0LCAyMzYsIDEzMywgOSwgCi0gICAgMTQsIDIzNiwgMTMyLCA5LCAxNCwgMjM2LCAxMzEsIDksIDE0LCAyMzYsIDEzMCwgOSwgMTQsIDIzNiwgMTI5LCA5LCAxNCwgCi0gICAgMjM2LCAxMjgsIDksIDE0LCAyMzYsIDEyNywgOSwgMTQsIDIzNiwgMTI2LCA5LCAxNCwgMjM2LCAxMjUsIDksIDE0LCAyMzYsIAotICAgIDEyNCwgOSwgMTQsIDIzNiwgMTIzLCA5LCAxNCwgMjM2LCAxMjIsIDksIDE0LCAyMzYsIDEyMSwgOSwgMTQsIDIzNiwgMTIwLCAKLSAgICA5LCAxNCwgMjM2LCAxMTksIDksIDE0LCAyMzYsIDExOCwgOSwgMTQsIDIzNiwgMTE3LCA5LCAxNCwgMjM2LCAxMTYsIDksIAotICAgIDE0LCAyMzYsIDExNSwgOSwgMTQsIDIzNiwgMTE0LCA5LCAxNCwgMjM2LCAxMTMsIDksIDE0LCAyMzYsIDExMiwgOSwgMTQsIAotICAgIDIzNiwgMTExLCA5LCAxNCwgMjM2LCAxMTAsIDksIDE0LCAyMzYsIDEwOSwgOSwgMTQsIDIzNiwgMTA4LCA5LCAxNCwgMjM2LCAKLSAgICAxMDcsIDksIDE0LCAyMzYsIDEwNiwgOSwgMTQsIDIzNiwgMTA1LCA5LCAxNCwgMjM2LCAxMDQsIDksIDE0LCAyMzYsIDEwMywgCi0gICAgOSwgMTQsIDIzNiwgMTAyLCA5LCAxNCwgMjM2LCAxMDEsIDksIDE0LCAyMzYsIDEwMCwgOSwgMTQsIDIzNiwgOTksIDksIDE0LCAKLSAgICAyMzYsIDk4LCA5LCAxNCwgMjM2LCA5NywgOSwgMTQsIDIzNiwgOTYsIDksIDE0LCAyMzYsIDk1LCA5LCAxNCwgMjM2LCA5NCwgCi0gICAgOSwgMTQsIDIzNiwgOTMsIDksIDE0LCAyMzYsIDkyLCA5LCAxNCwgMjM2LCA5MSwgOSwgMTQsIDIzNiwgOTAsIDksIDE0LCAKLSAgICAyMzYsIDg5LCA5LCAxNCwgMjM2LCA4OCwgOSwgMTQsIDIzNiwgODcsIDksIDE0LCAyMzYsIDg2LCA5LCAxNCwgMjM2LCA4NSwgCi0gICAgOSwgMTQsIDIzNiwgODQsIDksIDE0LCAyMzYsIDgzLCA5LCAxNCwgMjM2LCA4MiwgOSwgMTQsIDIzNiwgODEsIDksIDE0LCAKLSAgICAyMzYsIDgwLCA5LCAxNCwgMjM2LCA3OSwgOSwgMTQsIDIzNiwgNzgsIDksIDE0LCAyMzYsIDc3LCA5LCAxNCwgMjM2LCA3NiwgCi0gICAgOSwgMTQsIDIzNiwgNzUsIDksIDE0LCAyMzYsIDc0LCA5LCAxNCwgMjM2LCA3MywgOSwgMTQsIDIzNiwgNzIsIDksIDE0LCAKLSAgICAyMzYsIDcxLCA5LCAxNCwgMjM2LCA3MCwgOSwgMTQsIDIzNiwgNjksIDksIDE0LCAyMzYsIDY4LCA5LCAxNCwgMjM2LCA2NywgCi0gICAgOSwgMTQsIDIzNiwgNjYsIDksIDE0LCAyMzYsIDY1LCA3LCA0LCAyNywgMjQ0LCAxMjUsIDcsIDQsIDI3LCAyNDQsIDEyMSwgCi0gICAgNywgNCwgMjcsIDI0NCwgNzYsIDcsIDQsIDI3LCAyNDQsIDEyNCwgNywgNCwgMjcsIDI0NCwgMTIzLCA3LCA0LCAyNywgMTk5LCAKLSAgICAyMjIsIDkyLCAyMTcsIDE1MiwgNywgNCwgMjcsIDIxOCwgMTY4LCAxNTAsIDQsIDI3LCAyMzEsIDU5LCAyMjgsIDM5LCAxNTAsIAotICAgIDQsIDI3LCAyMzEsIDU5LCAyNDUsIDIxMywgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjM1LCAyMjcsIDE1MCwgNCwgMjcsIDIxMywgCi0gICAgMTgwLCAyMjgsIDM5LCAxNTAsIDQsIDI3LCAyMzEsIDU5LCAyMTEsIDE2MCwgOTQsIDEsIDIxMCwgMjM0LCAyLCAyNDEsIAotICAgIDE1OCwgOTQsIDIyNSwgMTEsIDIzNSwgNTAsIDIxNCwgMTEsIDk0LCAyNywgMjExLCA2LCAyMTAsIDIzNCwgMjEwLCAyMzQsIAotICAgIDIyNSwgMjM5LCA5NCwgMSwgMjU0LCAxMzksIDI1MywgMTYyLCA5NCwgMSwgMjExLCAyNDcsIDI1NCwgMTcwLCA5NCwgMSwgCi0gICAgMjExLCAyNDcsIDI0OCwgMTg5LCA5NCwgMSwgMjExLCAyNDcsIDI0MSwgMjM4LCA5NCwgMSwgMjExLCAyNDcsIDIzNCwgMjUwLCAKLSAgICA5NCwgMSwgMjExLCAyNDcsIDIzMywgOTQsIDk0LCAxLCAyMTEsIDI0NywgNDAsIDIzMSwgNjUsIDk0LCAxLCAyMTEsIDI0NywgCi0gICAgMjIzLCA2NywgOTQsIDEsIDIxMSwgMjQ3LCAyMTcsIDM4LCA5NCwgMSwgMjU0LCAxMzksIDk2LCA1MCwgOTQsIDEsIDIyMCwgCi0gICAgMjEsIDIsIDIyMCwgMjEsIDI0NywgMTIwLCA5NCwgMSwgMjIwLCAyMSwgMiwgMjE5LCAxNTksIDI0NywgMTIwLCA5NCwgMSwgCi0gICAgMjIwLCAyMSwgMiwgMjQ4LCAyMDgsIDIyLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIDEsIDIyMCwgMjEsIDIsIDI0OCwgMjA4LCAKLSAgICAyMiwgMjE5LCAxNTksIDI0NywgMTIwLCA5NCwgMSwgMTEyLCAyLCAyMjUsIDIzOSwgOTQsIDEsIDExMiwgMiwgMjI0LCA3NiwgCi0gICAgOTQsIDEsIDExMiwgMiwgMjMxLCAxNzEsIDk0LCAxLCAyNTIsIDI5LCAyLCAyNDgsIDIwNywgOTQsIDEsIDI0MiwgMjAyLCAyLCAKLSAgICAyNDgsIDIwNywgOTQsIDEsIDI0OCwgMTkwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDI0MSwgMjM5LCAyLCAyMzEsIDE3MSwgOTQsIAotICAgIDEsIDIxNCwgNCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTAsIDk4LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIxNiwgMjMxLCAyLCAKLSAgICAyNDgsIDIwNywgOTQsIDEsIDIxMCwgMjM0LCAyLCAyNDgsIDIwNywgOTQsIDEsIDQwLCAyMzQsIDI1MSwgMiwgMjQ4LCAyMDcsIAotICAgIDk0LCAxLCAyMzQsIDI1MSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMzMsIDk1LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIzMSwgCi0gICAgNjYsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjI3LCAxOTUsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjIxLCAyNTAsIDIsIDI0OCwgCi0gICAgMjA3LCA5NCwgMSwgNDAsIDIyNSwgMjIyLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNSwgMjIyLCAyLCAyNDgsIDIwNywgOTQsIAotICAgIDEsIDIxNSwgMTgwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNCwgNDAsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjIzLCA2OCwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyMjAsIDIxLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIxNywgMzksIDIsIDI0OCwgMjA3LCA5NCwgCi0gICAgMSwgMjE0LCA0LCAyLCAyNDEsIDYxLCA5NCwgMSwgMjUyLCAyOSwgMiwgMjIzLCAxNjksIDk0LCAxLCAyMzQsIDI1MSwgMiwgCi0gICAgMjIzLCAxNjksIDk0LCAxLCAyMjUsIDIyMiwgMiwgMjIzLCAxNjksIDk0LCAyNywgMTEyLCAyMzMsIDk0LCAxMCwgMSwgMTEyLCAKLSAgICAyMTIsIDQ3LCA1MywgMTcsIDEwLCAxLCAxMTIsIDIxMiwgNDcsIDQwLCAxNywgMTAsIDEsIDI1MiwgNjUsIDUzLCAxNywgMTAsIAotICAgIDEsIDI1MiwgNjUsIDQwLCAxNywgMTAsIDEsIDI1MiwgNjUsIDY1LCAxNywgMTAsIDEsIDI1MiwgNjUsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyMjUsIDIwNiwgNTMsIDE3LCAxMCwgMSwgMjI1LCAyMDYsIDQwLCAxNywgMTAsIDEsIDIyNSwgMjA2LCA2NSwgMTcsIAotICAgIDEwLCAxLCAyMjUsIDIwNiwgMTQ3LCAxNywgMTAsIDEsIDI1MiwgNTMsIDUzLCAxNywgMTAsIDEsIDI1MiwgNTMsIDQwLCAxNywgCi0gICAgMTAsIDEsIDI1MiwgNTMsIDY1LCAxNywgMTAsIDEsIDI1MiwgNTMsIDE0NywgMTcsIDEwLCAxLCAyMTUsIDE0NywgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjE1LCAxNDcsIDQwLCAxNywgMTAsIDEsIDIxNSwgMTQ3LCA2NSwgMTcsIDEwLCAxLCAyMTUsIDE0NywgMTQ3LCAKLSAgICAxNywgMTAsIDEsIDIxNywgNiwgNTMsIDE3LCAxMCwgMSwgMjE3LCA2LCA0MCwgMTcsIDEwLCAxLCAyMTcsIDYsIDY1LCAxNywgCi0gICAgMTAsIDEsIDIxNywgNiwgMTQ3LCAxNywgMTAsIDEsIDIxNSwgMTQ5LCA1MywgMTcsIDEwLCAxLCAyMTUsIDE0OSwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjE1LCAxNDksIDY1LCAxNywgMTAsIDEsIDIxNSwgMTQ5LCAxNDcsIDE3LCAxMCwgMSwgMjEzLCAyNDksIDUzLCAKLSAgICAxNywgMTAsIDEsIDIxMywgMjQ5LCA0MCwgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNjUsIDE3LCAxMCwgMSwgMjEzLCAyNDksIAotICAgIDE0NywgMTcsIDEwLCAxLCAyMjUsIDIwNCwgNTMsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDQwLCAxNywgMTAsIDEsIDIyNSwgCi0gICAgMjA0LCA2NSwgMTcsIDEwLCAxLCAyMjUsIDIwNCwgMTQ3LCAxNywgMTAsIDEsIDI0NiwgNDQsIDUzLCAxNywgMTAsIDEsIAotICAgIDI0NiwgNDQsIDQwLCAxNywgMTAsIDEsIDI0NiwgNDQsIDY1LCAxNywgMTAsIDEsIDI0NiwgNDQsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAyMjcsIDE1NCwgNTMsIDE3LCAxMCwgMSwgMjI3LCAxNTQsIDQwLCAxNywgMTAsIDEsIDIyNywgMTU0LCA2NSwgMTcsIDEwLCAKLSAgICAxLCAyMjcsIDE1NCwgMTQ3LCAxNywgMTAsIDEsIDIxNywgMjcsIDUzLCAxNywgMTAsIDEsIDIxNywgMjcsIDQwLCAxNywgMTAsIAotICAgIDEsIDIxNywgMjcsIDY1LCAxNywgMTAsIDEsIDIxNywgMjcsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDI1LCA1MywgMTcsIDEwLCAKLSAgICAxLCAyMTcsIDI1LCA0MCwgMTcsIDEwLCAxLCAyMTcsIDI1LCA2NSwgMTcsIDEwLCAxLCAyMTcsIDI1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQ4LCAxMzMsIDUzLCAxNywgMTAsIDEsIDI0OCwgMTMzLCA0MCwgMTcsIDEwLCAxLCAyNDgsIDIwMiwgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjQ4LCAyMDIsIDQwLCAxNywgMTAsIDEsIDI0NiwgNzEsIDUzLCAxNywgMTAsIDEsIDI0NiwgNzEsIDQwLCAxNywgCi0gICAgMTAsIDEsIDI0OCwgMTMxLCA1MywgMTcsIDEwLCAxLCAyNDgsIDEzMSwgNDAsIDE3LCAxMCwgMSwgMjM1LCAxMjEsIDUzLCAKLSAgICAxNywgMTAsIDEsIDIzNSwgMTIxLCA0MCwgMTcsIDEwLCAxLCAyMjIsIDE3MiwgNTMsIDE3LCAxMCwgMSwgMjIyLCAxNzIsIAotICAgIDQwLCAxNywgMTAsIDEsIDIzNCwgMTc1LCA1MywgMTcsIDEwLCAxLCAyMzQsIDE3NSwgNDAsIDE3LCAxMCwgMSwgMjM0LCAKLSAgICAxNzUsIDY1LCAxNywgMTAsIDEsIDIzNCwgMTc1LCAxNDcsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDUzLCAxNywgMTAsIDEsIAotICAgIDI0MywgMTIzLCA0MCwgMTcsIDEwLCAxLCAyNDMsIDEyMywgNjUsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyNDIsIDEwMiwgNTMsIDE3LCAxMCwgMSwgMjQyLCAxMDIsIDQwLCAxNywgMTAsIDEsIDI0MiwgMTAyLCA2NSwgMTcsIAotICAgIDEwLCAxLCAyNDIsIDEwMiwgMTQ3LCAxNywgMTAsIDEsIDIyOSwgMywgNTMsIDE3LCAxMCwgMSwgMjI5LCAzLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyMjksIDMsIDY1LCAxNywgMTAsIDEsIDIyOSwgMywgMTQ3LCAxNywgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE5LCAKLSAgICA1MywgMTcsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDUzLCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjE1LCA0MCwgMTcsIDEwLCAxLCAyMjIsIDIxNSwgNjUsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyNDEsIDIxOSwgMiwgNzksIDc3LCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMiwgNzksIDc3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgNDAsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0MiwgMTcyLCA2NSwgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQ3LCAxNDIsIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDcsIDE0MiwgNDAsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQyLCA2NSwgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQ3LCAxNDIsIDE0NywgMTcsIDEwLCAxLCAKLSAgICA3OSwgMjUyLCAxMzMsIDUzLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgNDAsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAKLSAgICAyLCAyMDIsIDc3LCA1MywgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDE2LCA1OSwgCi0gICAgNDgsIDEwLCAxNiwgNTksIDUxLCAxMCwgMTYsIDExMywgMTcwLCA0OCwgMTAsIDE2LCAxMTMsIDE3MCwgNTEsIDEwLCAxNiwgCi0gICAgMTM0LCAxNzAsIDQ4LCAxMCwgMTYsIDEzNCwgMTcwLCA1MSwgMTAsIDE2LCAxMzQsIDE3MCwgMjI1LCA3LCAyNDYsIDEwNCwgCi0gICAgNDgsIDEwLCAxNiwgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIDUxLCAxMCwgMTYsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAKLSAgICAxNiwgMjQ0LCAxMSwgMTcwLCA1MSwgMTAsIDE2LCA1MiwgNjcsIDI1MiwgMTQxLCA1MSwgMTAsIDE2LCAxMTMsIDE3MCwgCi0gICAgMjEzLCAxODksIDQ4LCAxMCwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNTEsIDEwLCAxNiwgMjIyLCAyMzMsIDEwLCAxNiwgCi0gICAgNCwgMjE3LCA4MSwgNDgsIDEwLCAxNiwgNCwgMjE3LCA4MSwgNTEsIDEwLCAxLCAyMjksIDgwLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjksIDgwLCA0MCwgMTcsIDEwLCAxLCAyMjksIDgwLCA2NSwgMTcsIDEwLCAxLCAyMjksIDgwLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMTA0LCA1MywgMTcsIDEwLCAxLCAxMDQsIDQwLCAxNywgMTAsIDEsIDIyNiwgMjM1LCA1MywgMTcsIDEwLCAxLCAyMjYsIAotICAgIDIzNSwgNDAsIDE3LCAxMCwgMSwgMjEwLCAyMTMsIDUzLCAxNywgMTAsIDEsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAxMDQsIDIsIDIwMiwgNzcsIDUzLCAxNywgMTAsIDEsIDIxNCwgMCwgNTMsIDE3LCAxMCwgMSwgMjE0LCAwLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyMzQsIDczLCAyMjYsIDIzNSwgNTMsIDE3LCAxMCwgMSwgMjM0LCA3MywgMjI2LCAyMzUsIDQwLCAxNywgMTAsIAotICAgIDEsIDIzNCwgNzMsIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAxLCAyMzQsIDczLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMSwgCi0gICAgMTYwLCA1MywgMTcsIDEwLCAxLCAxNjAsIDQwLCAxNywgMTAsIDEsIDE2MCwgNjUsIDE3LCAxMCwgMSwgMTYwLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjE0LCAyMDcsIDIzNCwgMTg2LCAyMzQsIDczLCAxMTIsIDIzMSwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyMTQsIAotICAgIDIwNywgMjM0LCAxODYsIDIzNCwgNzMsIDExMiwgMjMxLCAxOTMsIDE0NywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIAotICAgIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMjU0LCAyNDQsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjU0LCAyNDQsIDQwLCAKLSAgICAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjEyLCAzMSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAyMTIsIDMxLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDEwNCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAKLSAgICAyLCAyMDIsIDc3LCAyLCAxMDQsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjI2LCAyMzUsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjI2LCAyMzUsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgCi0gICAgMjEwLCAyMTMsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDI3LCAKLSAgICA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDY1LCAxNywgMTAsIDI3LCAyMTQsIDIwNywgMjM0LCA3MywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMTQsIDIwNywgMjM0LCA3MywgNzksIDIsIDIwMiwgCi0gICAgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTQsIDIwNywgMjM0LCA3MywgNzksIDIsIDIwMiwgNzcsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDY1LCAxNywgMTAsIDEsIDI0NCwgMTY4LCA3OSwgNTMsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDY1LCAxNywgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDEyMiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjUyLCA1NSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjUyLCAKLSAgICA1NSwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgCi0gICAgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgCi0gICAgMTMwLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTEyLCAyMzEsIAotICAgIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDExMiwgMjMxLCAxOTMsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDE1MSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNjYsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDEyMiwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxNTEsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAyNywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAKLSAgICAyMTcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgCi0gICAgMjE3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIAotICAgIDY2LCA1MywgMTcsIDEwLCAyNywgMjEwLCAxMTIsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTUxLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTIyLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjI0LCA4MiwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjI0LCA4MiwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMzQsIAotICAgIDI1MSwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAxMDMsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzQsIDI1MSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIzNCwgMjUxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMzMsIDEwMywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIAotICAgIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjI4LCA2MywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjI4LCAKLSAgICA2MywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0MSwgCi0gICAgMjE5LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAKLSAgICAxNTEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIzNCwgMTMwLCA1MywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAKLSAgICA3OSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTYsIDIwMywgMiwgMjE4LCAyMywgMTEyLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIzLCA5NiwgMiwgMjE4LCAyMywgMTEyLCA1MywgMTcsIDEwLCAyNywgMTEyLCAyMzEsIDE5MywgMiwgMjE4LCAyMywgMTEyLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjQ4LCAxODMsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyMzQsIAotICAgIDIwNCwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0NCwgMTY2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgCi0gICAgMjQ4LCAxODUsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyMzQsIDIwNiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIAotICAgIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCAKLSAgICA3NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgOCwgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNiwgMTkzLCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE2LCAxOTMsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDIyOCwgNjMsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTYsIDE5MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIAotICAgIDEwMywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIAotICAgIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjI4LCA2MywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjI4LCA2MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTEyLCAyMzEsIDE5MywgMiwgMjE4LCAyMywgMTEyLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIyMywgOTYsIAotICAgIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjEwLCAxMDksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjQxLCAyMTksIAotICAgIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgOCwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIxNywgCi0gICAgOCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIAotICAgIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAxNTEsIDIsIDY2LCA2NSwgMTcsIAotICAgIDEwLCAyNywgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjM0LCAKLSAgICAxMzAsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAKLSAgICAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIAotICAgIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjEwLCAxMTIsIDIsIDY2LCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI0MiwgMjQ1LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyNDQsIDE0MywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgCi0gICAgMTQzLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyNCwgCi0gICAgODIsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIAotICAgIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjM0LCAKLSAgICAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAxMDMsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDY1LCAKLSAgICAxNywgMTAsIDI3LCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIAotICAgIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCAyMTgsIAotICAgIDIzLCAxMTIsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAKLSAgICAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMTYsIDE5MywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMSwgMTY3LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDYwLCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAxMDMsIDE0NywgCi0gICAgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgNzksIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIAotICAgIDIyMCwgOTQsIDIsIDI0NCwgMTY2LCAxNDcsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0OCwgMTg1LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgOTQsIDIsIDIzNCwgMjA2LCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxNTEsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAxNTEsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgCi0gICAgNjAsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIAotICAgIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAKLSAgICAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIAotICAgIDgxLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyNTQsIDE5NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI0MiwgMjQ1LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMTUxLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMjMsIDk2LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMjMsIDk2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDIyMSwgMTY3LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIDE0NywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDE0NywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjEwLCAxMTIsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDExMiwgMiwgMjQ0LCAxNjQsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAxMTIsIDIsIDI0NCwgMTY0LCA1MywgMTcsIDIyNiwgMTQ2LCA0MywgMjI2LCAzLCAyMjYsIDE0NiwgNDQsIDIyNiwgMywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgMTUxLCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAKLSAgICAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjE3LCA4LCAyLCA2NiwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDEyMiwgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTIyLCAKLSAgICAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIAotICAgIDE2NywgMiwgMTUxLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCAxMjIsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAKLSAgICAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMjIsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMjcsIDIsIDEyMiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIAotICAgIDIsIDIzNCwgMTMwLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjIwLCA2MCwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIAotICAgIDEzMCwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjE3LCA4MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgMiwgCi0gICAgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIAotICAgIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMjM0LCAxMzAsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAKLSAgICAxNDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAyLCA2NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIAotICAgIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDE1MSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgCi0gICAgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjMzLCAKLSAgICAxMDMsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgMTUxLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDIsIDIzNCwgMTMwLCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIAotICAgIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgCi0gICAgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTUxLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMTUxLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDE1MSwgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAKLSAgICAxMzAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTUxLCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTIyLCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMzQsIDI1MSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgCi0gICAgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgCi0gICAgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDEyMiwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCAKLSAgICAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgCi0gICAgNTUsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjU0LCAxOTcsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA2NiwgMiwgNjYsIDY1LCAKLSAgICAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMiwgNCwgMjE0LCAxMjgsIDI1MywgMjM4LCAyMzQsIDQsIDIxOCwgMTMwLCAKLSAgICA1LCA1MywgMTcsIDEwLCAyNywgMjI0LCA3OCwgMjE0LCAxMjgsIDI1MywgMjM4LCAyMzQsIDQsIDIxOCwgMTMwLCA1LCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjU0LCAxNTMsIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE4MywgNTMsIDE3LCAxMCwgMjcsIDIzMCwgMTUzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjIyLCA1LCA1MywgMTcsIDEwLCAyNywgMjIzLCAxNDMsIDUzLCAxNywgMTAsIDI3LCAyNTQsIAotICAgIDE3MiwgNTMsIDE3LCAxMCwgMjcsIDIxMiwgNDksIDUzLCAxNywgMTAsIDI3LCAyMjIsIDQsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDMsIDI1NCwgMTcyLCAyMTIsIDQ4LCAxMCwgMjcsIDIzNSwgMTM0LCAyMjMsIDM0LCA1MCwgMTAsIDI3LCAyNTEsIAotICAgIDIzMCwgMjU0LCAzOSwgMjU0LCA0MCwgNDUsIDIyMSwgMTU2LCA0NSwgMjIxLCA0NSwgNDUsIDIyMCwgMjMzLCA0NSwgMjIwLCAKLSAgICAyMjIsIDQ1LCAyMjAsIDIxMSwgNDUsIDIyMCwgMjAwLCA0NSwgMjIwLCAxODksIDQ1LCAyMjAsIDE3OCwgNDUsIDIyMCwgCi0gICAgMTY3LCA0NSwgMjIxLCAxNTUsIDQ1LCAyMjEsIDE0NCwgNDUsIDIyMSwgMTMzLCA0NSwgMjIxLCAxMjIsIDQ1LCAyMjEsIAotICAgIDExMSwgNDUsIDIyMSwgMTAwLCA0NSwgMjIxLCA4OSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ5LCAyMTksIDIyNCwgCi0gICAgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDEwOSwgMjQ5LCAyMTksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDEwOSwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDksIDIyNiwgMjI0LCAxOTQsIDI0NCwgMjAsIAotICAgIDMxLCA2NywgMjIwLCAxNTAsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMzEsIDc4LCAyMjQsIDE5NCwgMjQ0LCAKLSAgICAyMCwgMzEsIDY3LCAyMjQsIDEzLCA3OCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDcxLCAyMzMsIDIwLCAxMjcsIAotICAgIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjMzLCAyMCwgMjUxLCAxNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAKLSAgICAzMSwgNjcsIDIwMywgMjQ1LCAxNjMsIDM4LCAyNywgNDMsIDI0MiwgMjcsIDM4LCAyNywgNDQsIDI0MiwgMjcsIDM4LCA1MiwgCi0gICAgMjE2LCA4OSwgNDMsIDI0MiwgMjcsIDM4LCA1MiwgMjE2LCA4OSwgNDQsIDI0MiwgMjcsIDM4LCAyMzEsIDIzMywgNDMsIAotICAgIDI0MiwgMjcsIDM4LCAyMzEsIDIzMywgNDQsIDI0MiwgMjcsIDM4LCAyNDksIDE5NywgMjMxLCAyMzIsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDExMywgNTksIDIzMywgNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMTYwLCAKLSAgICAyNDgsIDE1NiwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ1LCAxNTEsIDI0OCwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAKLSAgICAyMCwgMzEsIDY3LCAxMjEsIDIzMiwgMjEzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyMTIsIDMyLCAxMjEsIDIzMiwgCi0gICAgMjEzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjI2LCAzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAKLSAgICA0NCwgMjI2LCAzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjQ5LCA5OSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAKLSAgICAyMCwgMzEsIDY3LCA0NCwgMjQ5LCA5OSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjE2LCA2LCAyMjAsIAotICAgIDUzLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDMsIDg1LCAyMzMsIDIwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA4NSwgCi0gICAgMjMzLCAyMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNTIsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA1MiwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIAotICAgIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjQ5LCAxNjEsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDI0OSwgCi0gICAgMTYxLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA3MSwgMjQ5LCAxNjEsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyNDksIDE2MSwgMTI3LCAyMjAsIDEzMSwgMjQ3LCAxMjAsIDcxLCAyMjAsIDEzMSwgCi0gICAgMjQ3LCAxMjAsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA0MiwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIAotICAgIDY3LCA0NCwgNDIsIDEyNywgMjQ4LCAxNTUsIDIyNiwgMTE5LCAyNTAsIDE3MiwgMjI2LCAxMTksIDIxMiwgMzIsIDIyNiwgCi0gICAgMTE5LCA1MiwgMjEyLCAzMiwgMjI2LCAxMTksIDI0OCwgMTU1LCAxMjEsIDIzMiwgMjEzLCAyNTAsIDE3MiwgMTIxLCAyMzIsIAotICAgIDIxMywgMjEyLCAzMiwgMTIxLCAyMzIsIDIxMywgNCwgMjQ5LCAyMTksIDQsIDEwOSwgMjQ5LCAyMTksIDQsIDI0MywgMjI5LCAKLSAgICAyMTgsIDEyOSwgNCwgMjIwLCAxNTAsIDQsIDI0OSwgMjI2LCA0LCAyMjQsIDEzLCA3OCwgNCwgMjQ1LCAzMSwgNzgsIDQsIAotICAgIDI0NSwgMTYwLCAyNDgsIDE1NiwgNCwgNDMsIDIyNiwgMywgNCwgNDQsIDIyNiwgMywgNCwgNDMsIDI0OSwgOTksIDEyNywgNCwgCi0gICAgNDQsIDI0OSwgOTksIDEyNywgNCwgNDMsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQsIDU0LCA1MCwgNCwgMjU0LCAxMjYsIDQsIDI1MywgMjE2LCA0LCA5NiwgNTAsIDQsIDI0MCwgMTY3LCA0LCAyMzMsIAotICAgIDE1LCA1MCwgNCwgMjQyLCAxMzAsIDUwLCA0LCAyNDUsIDk4LCA1MCwgNCwgMjIzLCA1MCwgMjE5LCA0NiwgNCwgMjQ3LCAKLSAgICAxMzIsIDUwLCA0LCAyMjUsIDE4MiwgNTAsIDQsIDI0OSwgMjE3LCAyNTMsIDIwNiwgMTAsIDI0NCwgMTY0LCA1MywgMTcsIAotICAgIDEwLCAyMTcsIDQ0LCAyLCAyNDQsIDE2NCwgNDgsIDEwLCAyNDgsIDE4MywgNTMsIDE3LCAxMCwgMjE3LCA3OCwgMjQ0LCAxLCAKLSAgICAxMCwgMjM0LCAyMDQsIDUzLCAxNywgMTAsIDI0NCwgMTY2LCA1MywgMTcsIDEwLCAyNDQsIDE2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI0OCwgMTg1LCA1MywgMTcsIDEwLCAyNDgsIDE4NSwgMTQ3LCAxNywgMTAsIDIzNCwgMjA2LCA1MywgMTcsIDEwLCAyMzQsIAotICAgIDIwNiwgMTQ3LCAxNywgMTAsIDIyMCwgOTQsIDUzLCAxNywgMTAsIDIyMCwgOTQsIDE0NywgMTcsIDEwLCAyMTgsIDQ2LCA1MywgCi0gICAgMTcsIDEwLCAyMTgsIDQ2LCAxNDcsIDE3LCAxMCwgMSwgMjAyLCA1MywgMTcsIDEwLCAxLCAxMTIsIDIsIDIzMSwgMjI4LCAKLSAgICA3NywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDQwLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCA3NywgCi0gICAgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMDIsIDc3LCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNTMsIAotICAgIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDQwLCAxNywgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA1MywgMTcsIAotICAgIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDY1LCAxNywgMTAsIDEsIDc5LCAKLSAgICAyLCAyMDIsIDc3LCAxNDcsIDE3LCAxMCwgMSwgMTEyLCA1MywgMTcsIDEwLCAxLCAxMTIsIDQwLCAxNywgMTAsIDEsIDI1MiwgCi0gICAgNTUsIDUzLCAxNywgMTAsIDEsIDI1MiwgNTUsIDQwLCAxNywgMTAsIDEsIDI1MiwgNTUsIDY1LCAxNywgMTAsIDEsIDI1MiwgCi0gICAgNTUsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDgsIDIzMSwgMTY1LCA1MywgMTcsIDEwLCAxLCAyMTcsIDgsIDIzMSwgMTY1LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMTcsIDgsIDUzLCAxNywgMTAsIDEsIDIxNywgOCwgNDAsIDE3LCAxMCwgMSwgMjE3LCA4LCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMTcsIDgsIDE0NywgMTcsIDEwLCAxLCAyMTYsIDE5MywgNTMsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDQwLCAKLSAgICAxNywgMTAsIDEsIDIxNiwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyMTYsIDE5MywgMTQ3LCAxNywgMTAsIDEsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMSwgMTUxLCA0MCwgMTcsIDEwLCAxLCAxNTEsIDY1LCAxNywgMTAsIDEsIDE1MSwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDEyMiwgNTMsIDE3LCAxMCwgMSwgMTIyLCA0MCwgMTcsIDEwLCAxLCAxMjIsIDY1LCAxNywgMTAsIDEsIDEyMiwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAxLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIzNCwgMTMwLCAxNDcsIDE3LCAxMCwgMSwgMjQ4LCAxOTYsIDUzLCAxNywgMTAsIDEsIDI0OCwgMTk2LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMTYsIDIwMywgNTMsIDE3LCAxMCwgMSwgMjE2LCAyMDMsIDQwLCAxNywgMTAsIDEsIDIyMywgOTYsIAotICAgIDUzLCAxNywgMTAsIDEsIDIyMywgOTYsIDQwLCAxNywgMTAsIDEsIDIxMCwgMTA5LCA1MywgMTcsIDEwLCAxLCAyMTAsIDEwOSwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjIxLCAxNjcsIDUzLCAxNywgMTAsIDEsIDIyMSwgMTY3LCA0MCwgMTcsIDEwLCAxLCAyMjEsIAotICAgIDE2NywgNjUsIDE3LCAxMCwgMSwgMjIxLCAxNjcsIDE0NywgMTcsIDEwLCAxLCAyMjAsIDYwLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjAsIDYwLCA0MCwgMTcsIDEwLCAxLCAyMjAsIDYwLCA2NSwgMTcsIDEwLCAxLCAyMjAsIDYwLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjIyLCAyNywgNTMsIDE3LCAxMCwgMSwgMjIyLCAyNywgNDAsIDE3LCAxMCwgMSwgMjIyLCAyNywgNjUsIDE3LCAxMCwgMSwgCi0gICAgMjIyLCAyNywgMTQ3LCAxNywgMTAsIDEsIDI0OCwgMjE3LCA1MywgMTcsIDEwLCAxLCAyNDgsIDIxNywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQ4LCAyMTcsIDY1LCAxNywgMTAsIDEsIDI0OCwgMjE3LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCA4MSwgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjE3LCA4MSwgNDAsIDE3LCAxMCwgMSwgMjE3LCA4MSwgNjUsIDE3LCAxMCwgMSwgMjE3LCA4MSwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIxMCwgMTEyLCA1MywgMTcsIDEwLCAxLCAyMTAsIDExMiwgNDAsIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIxMCwgMTEyLCAxNDcsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDUzLCAxNywgMTAsIDEsIDI1NCwgMTk3LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyNTQsIDE5NywgNjUsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDE0NywgMTcsIDEwLCAxLCAyNDIsIAotICAgIDI0NSwgNTMsIDE3LCAxMCwgMSwgMjQyLCAyNDUsIDQwLCAxNywgMTAsIDEsIDI0MiwgMjQ1LCA2NSwgMTcsIDEwLCAxLCAKLSAgICAyNDIsIDI0NSwgMTQ3LCAxNywgMTAsIDEsIDI0NCwgMTQzLCA1MywgMTcsIDEwLCAxLCAyNDQsIDE0MywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQ0LCAxNDMsIDY1LCAxNywgMTAsIDEsIDI0NCwgMTQzLCAxNDcsIDE3LCAxMCwgMSwgMjI0LCA4MiwgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjI0LCA4MiwgNDAsIDE3LCAxMCwgMSwgMjI0LCA4MiwgNjUsIDE3LCAxMCwgMSwgMjI0LCA4MiwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIzNCwgMjUxLCA1MywgMTcsIDEwLCAxLCAyMzQsIDI1MSwgNDAsIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIzNCwgMjUxLCAxNDcsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDUzLCAxNywgMTAsIDEsIDIzMywgMTAzLCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMzMsIDEwMywgNjUsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDE0NywgMTcsIDEwLCAxLCA2NiwgNTMsIAotICAgIDE3LCAxMCwgMSwgNjYsIDQwLCAxNywgMTAsIDEsIDY2LCA2NSwgMTcsIDEwLCAxLCA2NiwgMTQ3LCAxNywgMTAsIDEsIDIyOCwgCi0gICAgNjMsIDUzLCAxNywgMTAsIDEsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDEsIDIyOCwgNjMsIDY1LCAxNywgMTAsIDEsIDIyOCwgCi0gICAgNjMsIDE0NywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDEsIDIxMiwgMzEsIDUzLCAxNywgMTAsIAotICAgIDEsIDIxMiwgMzEsIDQwLCAxNywgMTAsIDEsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDEsIDExMiwgMjMxLCAxOTMsIAotICAgIDQwLCAxNywgMTAsIDEsIDc5LCA1MywgMTcsIDEwLCAxLCA3OSwgNDAsIDE3LCAxMCwgMSwgNzksIDY1LCAxNywgMTAsIDEsIAotICAgIDc5LCAxNDcsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIzMSwgMjI4LCA3NywgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIzMSwgMjI4LCA3NywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIAotICAgIDIwMiwgNzcsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgCi0gICAgMjAyLCAyNTIsIDQzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAKLSAgICAyLCAxMTIsIDQwLCAxNywgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNzMsIDIxOSwgMTgsIDEyNiwgMjQ1LCAzMSwgNzgsIAotICAgIDEyNiwgMjIzLCAyNTQsIDc4LCAxMjYsIDU0LCA1MCwgMTI2LCAyNDcsIDEzMiwgNTAsIDEyNiwgMjI1LCAxODIsIDUwLCAKLSAgICAxMjYsIDI1NCwgMTI2LCAxMjYsIDI1NCwgNTcsIDEyNiwgNDMsIDIyNiwgMywgMTI2LCA0NCwgMjI2LCAzLCAxMjYsIDI1MywgCi0gICAgMjE2LCAxMjYsIDk2LCA1MCwgMTI2LCAyNDksIDIxOSwgMTI2LCAyNDAsIDE2NywgMTI2LCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDEyNiwgMjE5LCA0NiwgMTI2LCAyMSwgMjEwLCA4NiwgMTI2LCAyMSwgMTEwLCAxMjYsIDIxLCAxMDUsIDEyNiwgMjEsIDE1OCwgCi0gICAgMTI2LCAyMSwgMTYxLCAxMjYsIDIxLCAxODksIDEyNiwgMjEsIDE5NCwgMTI2LCAyMSwgMTk4LCAxMjYsIDIxLCAxOTUsIAotICAgIDEyNiwgMjEsIDIwMCwgMTI2LCAyNDksIDIyNiwgMTI2LCAyMjAsIDE1MCwgMTI2LCAyMzMsIDE1LCA1MCwgMTI2LCAyNDUsIAotICAgIDk4LCA1MCwgMTI2LCAyNDIsIDEzMCwgNTAsIDEyNiwgMjI0LCAxMywgNzgsIDEyNiwgMjQ5LCAyMTcsIDI1MywgMjA2LCAKLSAgICAxMjYsIDcsIDYsIDEsIDYxLCAxMjYsIDcsIDYsIDEsIDI1MywgMTU4LCAxMjYsIDcsIDYsIDEsIDI1MSwgNjYsIDEyNiwgNywgCi0gICAgNiwgMSwgMjQ5LCA2MCwgMTI2LCA3LCA2LCAxLCA3NSwgMTI2LCA3LCA2LCAxLCAyNDUsIDYsIDEyNiwgNywgNiwgMSwgMjQzLCAKLSAgICAyMDIsIDEyNiwgNywgNiwgMSwgMjQyLCA2MCwgMTI2LCA3LCA2LCAxLCA3MywgMTI2LCA3LCA2LCAxLCAyMzUsIDE0NCwgCi0gICAgMTI2LCA3LCA2LCAxLCAyMzUsIDIzLCAxMjYsIDcsIDYsIDEsIDE1NiwgMTI2LCA3LCA2LCAxLCAxOTMsIDEyNiwgNywgNiwgCi0gICAgMSwgMjMwLCAyNSwgMTI2LCA3LCA2LCAxLCA3NiwgMTI2LCA3LCA2LCAxLCAyMjYsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMjQsIAotICAgIDk2LCAxMjYsIDcsIDYsIDEsIDE1MywgMTI2LCA3LCA2LCAxLCAyMjIsIDkxLCAxMjYsIDcsIDYsIDEsIDIxNywgMTUyLCAKLSAgICAxMjYsIDcsIDYsIDEsIDcwLCAxMjYsIDcsIDYsIDEsIDIxNCwgMTA1LCAxMjYsIDcsIDYsIDEsIDIxMiwgOTgsIDEyNiwgNywgCi0gICAgNiwgMSwgMjExLCAxNzgsIDEyNiwgNywgNiwgMSwgMjExLCAxMTcsIDEyNiwgNywgNiwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIAotICAgIDQyLCAxMjcsIDEyNiwgMjIzLCA1MCwgMjE5LCA0NiwgMTI2LCA0NCwgNDIsIDEyNywgMTI2LCAyNTAsIDMxLCAyNTUsIDE0LCAKLSAgICAxMjYsIDEyMSwgMjMyLCAyMTMsIDEyNiwgMjQyLCAxMzcsIDI1NSwgMTQsIDEyNiwgNywgNCwgMSwgNjEsIDEyNiwgNywgNCwgCi0gICAgMSwgMjUzLCAxNTgsIDEyNiwgNywgNCwgMSwgMjUxLCA2NiwgMTI2LCA3LCA0LCAxLCAyNDksIDYwLCAxMjYsIDcsIDQsIDEsIAotICAgIDc1LCAxMjYsIDcsIDQsIDEsIDI0NSwgNiwgMTI2LCA3LCA0LCAxLCAyNDMsIDIwMiwgMTI2LCA3LCA0LCAxLCAyNDIsIDYwLCAKLSAgICAxMjYsIDcsIDQsIDEsIDczLCAxMjYsIDcsIDQsIDEsIDIzNSwgMTQ0LCAxMjYsIDcsIDQsIDEsIDIzNSwgMjMsIDEyNiwgNywgCi0gICAgNCwgMSwgMTU2LCAxMjYsIDcsIDQsIDEsIDE5MywgMTI2LCA3LCA0LCAxLCAyMzAsIDI1LCAxMjYsIDcsIDQsIDEsIDc2LCAKLSAgICAxMjYsIDcsIDQsIDEsIDIyNiwgMTA1LCAxMjYsIDcsIDQsIDEsIDIyNCwgOTYsIDEyNiwgNywgNCwgMSwgMTUzLCAxMjYsIDcsIAotICAgIDQsIDEsIDIyMiwgOTEsIDEyNiwgNywgNCwgMSwgMjE3LCAxNTIsIDEyNiwgNywgNCwgMSwgNzAsIDEyNiwgNywgNCwgMSwgCi0gICAgMjE0LCAxMDUsIDEyNiwgNywgNCwgMSwgMjEyLCA5OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA0LCAxLCAKLSAgICAyMTEsIDExNywgMTI2LCA3LCA0LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgMjQ5LCA5OSwgMTI3LCAxMjYsIDY3LCAyMzIsIAotICAgIDIxMywgMTI2LCA0NCwgMjQ5LCA5OSwgMTI3LCAxMjYsIDE4MiwgMTI2LCA0MywgNzEsIDIyNiwgMywgMTI2LCA0NCwgNzEsIAotICAgIDIyNiwgMywgMTAxLCAxMDksIDI0MywgMjI5LCAyMTgsIDEyOSwgMTAxLCA0MywgMjQ5LCAxNjEsIDEyNywgMTAxLCA0NCwgCi0gICAgMjQ5LCAxNjEsIDEyNywgMTAxLCAxMDksIDI0OSwgMjE5LCAxMDEsIDU2LCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDEwMSwgNTYsIAotICAgIDEsIDIxMSwgMjI3LCAxMDEsIDU2LCAxLCA0LCA2MSwgMTAxLCA1NiwgMSwgNCwgNzMsIDEwMSwgNTYsIDEsIDQsIDcwLCAKLSAgICAxMDEsIDU2LCAxLCA0LCA3NSwgMTAxLCA1NiwgMSwgNCwgNzYsIDEwMSwgNTYsIDEsIDQsIDE5MSwgMTAxLCA1NiwgMSwgNCwgCi0gICAgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDQsIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCA0LCAyMTUsIDExOCwgMTAxLCAyMzQsIAotICAgIDIwMSwgMjI0LCAxNzMsIDIxOSwgMzEsIDc4LCAxMDEsIDU2LCAxLCA2MSwgMTAxLCA1NiwgMSwgNzMsIDEwMSwgNTYsIDEsIAotICAgIDcwLCAxMDEsIDU2LCAxLCA3NSwgMTAxLCA1NiwgMSwgNzYsIDEwMSwgNTYsIDEsIDE3NiwgMTAxLCA1NiwgMSwgMjM0LCA5MiwgCi0gICAgMTAxLCA1NiwgMSwgMjMzLCAyMTcsIDEwMSwgNTYsIDEsIDIzNCwgMTgyLCAxMDEsIDU2LCAxLCAyMzQsIDI4LCAxMDEsIDU2LCAKLSAgICAxLCAyMDYsIDEwMSwgNTYsIDEsIDIxOSwgMTkxLCAxMDEsIDU2LCAxLCAyMTgsIDgzLCAxMDEsIDU2LCAxLCAyMjEsIDE4MSwgCi0gICAgMTAxLCA1NiwgMSwgMjE5LCA1OCwgMTAxLCA1NiwgMSwgMjE3LCAxMDUsIDEwMSwgNTYsIDEsIDIxNiwgMTE3LCAxMDEsIDU2LCAKLSAgICAxLCAyMTUsIDExOCwgMTAxLCA1NiwgMSwgMjE3LCAyMiwgMTAxLCA1NiwgMSwgMTExLCAxMDEsIDU2LCAxLCAxOTcsIDEwMSwgCi0gICAgNTYsIDEsIDIyOCwgMjMzLCAxMDEsIDU2LCAxLCAyMjcsIDIzNywgMTAxLCA1NiwgMSwgMjI5LCAxMDcsIDEwMSwgNTYsIDEsIAotICAgIDIyOCwgNzQsIDEwMSwgNTYsIDEsIDE2MiwgMTAxLCA1NiwgMSwgMjQxLCAxODAsIDEwMSwgNTYsIDEsIDI0MCwgMjIyLCAKLSAgICAxMDEsIDU2LCAxLCAyNDEsIDIzOCwgMTAxLCA1NiwgMSwgMjQxLCA2OCwgMTAxLCA1NiwgMSwgMTg0LCAxMDEsIDU2LCAxLCAKLSAgICAyMzAsIDIzMCwgMTAxLCA1NiwgMSwgMjMwLCAxMDIsIDEwMSwgNTYsIDEsIDIzMSwgOTEsIDEwMSwgNTYsIDEsIDIzMCwgCi0gICAgMTYxLCAxMDEsIDU2LCAxLCAxOTEsIDEwMSwgNTYsIDEsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCAyMTAsIDI0NCwgMTAxLCAKLSAgICA1NiwgMSwgMjA1LCAxMDEsIDU2LCAxLCAyMjMsIDM1LCAxMDEsIDU2LCAxLCAyMjIsIDE0MCwgMTAxLCA1NiwgMSwgMjIzLCAKLSAgICAxMjgsIDEwMSwgNTYsIDEsIDIyMiwgMjExLCAxMDEsIDU2LCAxLCAyMTIsIDY1LCAxMDEsIDU2LCAxLCAyMzAsIDI1LCAxMDEsIAotICAgIDU2LCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDEwMSwgNTYsIDIyMCwgMTU1LCAyMTksIDMxLCA3OCwgMTAxLCAyNCwgMjQ0LCAKLSAgICAxMDMsIDEwMSwgMjQsIDEsIDIzNCwgNTgsIDEwMSwgMjQsIDEsIDIxOCwgMjE1LCAxMDEsIDI0LCAxLCAyMzQsIDUxLCAxMDEsIAotICAgIDI0LCAxLCAyMjgsIDIyNiwgMTAxLCAyNCwgMSwgMjI4LCAyMjQsIDEwMSwgMjQsIDEsIDIyOCwgMjIzLCAxMDEsIDI0LCAxLCAKLSAgICAyMTYsIDEwMSwgMTAxLCAyNCwgMSwgMjE4LCAyMDQsIDEwMSwgMjQsIDEsIDIyMywgMjYsIDEwMSwgMjQsIDEsIDIyMywgMjEsIAotICAgIDEwMSwgMjQsIDEsIDIyMywgMTgsIDEwMSwgMjQsIDEsIDIyMywgMTEsIDEwMSwgMjQsIDEsIDIyMywgNiwgMTAxLCAyNCwgMSwgCi0gICAgMjIzLCAxLCAxMDEsIDI0LCAxLCAyMjMsIDEyLCAxMDEsIDI0LCAxLCAyMjMsIDI0LCAxMDEsIDI0LCAxLCAyMzAsIDIxNywgCi0gICAgMTAxLCAyNCwgMSwgMjI1LCA5NSwgMTAxLCAyNCwgMSwgMjE4LCAyMTIsIDEwMSwgMjQsIDEsIDIyNSwgODQsIDEwMSwgMjQsIAotICAgIDEsIDIxOSwgMTQ4LCAxMDEsIDI0LCAxLCAyMTgsIDIwOSwgMTAxLCAyNCwgMSwgMjM2LCA1NiwgMTAxLCAyNCwgMSwgMjUwLCAKLSAgICA0NiwgMTAxLCAyNCwgMSwgMjE4LCAyMTksIDEwMSwgMjQsIDEsIDI1MCwgMTA2LCAxMDEsIDI0LCAxLCAyMzQsIDExMCwgCi0gICAgMTAxLCAyNCwgMSwgMjE2LCAxNzMsIDEwMSwgMjQsIDEsIDIyNSwgMTMxLCAxMDEsIDI0LCAxLCAyNDEsIDE3MiwgMTAxLCAKLSAgICAyNCwgMSwgNjEsIDEwMSwgMjQsIDEsIDI1NCwgMjQzLCAxMDEsIDI0LCAxLCAxOTEsIDEwMSwgMjQsIDEsIDIxMSwgOTIsIAotICAgIDEwMSwgMjQsIDEsIDI0NSwgMTE3LCAxMDEsIDI0LCAxLCA3NSwgMTAxLCAyNCwgMSwgMjExLCAzNiwgMTAxLCAyNCwgMSwgCi0gICAgMjExLCA0NywgMTAxLCAyNCwgMSwgNzYsIDEwMSwgMjQsIDEsIDIxMiwgNjUsIDEwMSwgMjQsIDEsIDIxMiwgNjIsIDEwMSwgCi0gICAgMjQsIDEsIDIyNiwgMjM0LCAxMDEsIDI0LCAxLCAyMTAsIDI0NCwgMTAxLCAyNCwgMSwgNzAsIDEwMSwgMjQsIDEsIDIxMiwgCi0gICAgMTEsIDEwMSwgMjQsIDEsIDIxMiwgMjIsIDEwMSwgMjQsIDEsIDIxMSwgMjUwLCAxMDEsIDI0LCAxLCAyMTAsIDIxMiwgMTAxLCAKLSAgICAyNCwgMSwgMjQ1LCA1NSwgMTAxLCAyNCwgMSwgMjExLCA4LCAxMDEsIDI0LCAxLCA3MywgMTI2LCAyNTAsIDE3NiwgNTAsIAotICAgIDEyNiwgMjI0LCAyMjgsIDUwLCAxMjYsIDIyOCwgNTIsIDUwLCAxMjYsIDIzMSwgMjMyLCAxMjYsIDI1MSwgMTM1LCAxMzAsIAotICAgIDEyNiwgMjExLCA0MCwgNTAsIDEyNiwgMjExLCAyMTcsIDUwLCAxMDEsIDI0NCwgMTgsIDE5MiwgMjEzLCAyMzksIDEwMSwgCi0gICAgMTQwLCA3NCwgMTAxLCAyMTQsIDE1MywgNzQsIDEwMSwgOTcsIDc0LCAxMDEsIDI0NiwgMTA0LCA3NCwgMTAxLCA4NSwgMjE4LCAKLSAgICAyMzQsIDEwMSwgNzEsIDI1MCwgMzUsIDIzNSwgMjA0LCAyNTQsIDk5LCAyNTQsIDEyMCwgMjM1LCAyMDQsIDI1NCwgOTksIAotICAgIDIyMCwgMTM3LCAyMzUsIDIwNCwgMjU0LCA5OSwgMjE2LCAyMzYsIDIyNiwgMjQ5LCAyMjMsIDcyLCAyNTAsIDE0MiwgMjIzLCAKLSAgICA3MiwgMjUwLCAxNDIsIDYyLCA1NywgMywgMjUzLCAxNDIsIDYxLCA2MiwgNTcsIDMsIDI1MywgMTExLCA3NSwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDEyMCwgNzMsIDYyLCA1NywgMywgMjUzLCA4OCwgNzYsIDYyLCA1NywgMywgMjUzLCAxMzgsIDcwLCA2MiwgNTcsIAotICAgIDMsIDI1MywgMTU3LCAyNDgsIDIyMSwgNjIsIDU3LCAzLCAyNTMsIDEwNCwgMjQ4LCA5MCwgNjIsIDU3LCAzLCAyNTMsIDE0NCwgCi0gICAgMjQ4LCAzLCA2MiwgNTcsIDMsIDI1MywgMTM0LCAyNDcsIDE0NSwgNjIsIDU3LCAzLCAyNTMsIDk4LCAyNDYsIDc4LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgOTIsIDIzNSwgMTQxLCA2MiwgNTcsIDMsIDI1MywgMTAzLCAyMzUsIDEyNiwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDExMywgMjM1LCA2OCwgNjIsIDU3LCAzLCAyNTMsIDg0LCAyMzUsIDUxLCA2MiwgNTcsIDMsIDI1MywgNzIsIDE3NiwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEwNSwgMjM0LCAxODIsIDYyLCA1NywgMywgMjUzLCA4MiwgMjM0LCA5MiwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDc5LCAyMzQsIDI4LCA2MiwgNTcsIDMsIDI1MywgNjgsIDIzMywgMjE3LCA2MiwgNTcsIDMsIDI1MywgNjksIDE4NCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEzNSwgMjMxLCA5MSwgNjIsIDU3LCAzLCAyNTMsIDc2LCAyMzAsIDIzMCwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDEzMywgMjMwLCAxNjEsIDYyLCA1NywgMywgMjUzLCAxMjUsIDIzMCwgMTAyLCA2MiwgNTcsIDMsIDI1MywgMTQ2LCAxOTcsIAotICAgIDYyLCA1NywgMywgMjUzLCAxMjQsIDIyOSwgMTA3LCA2MiwgNTcsIDMsIDI1MywgMTE4LCAyMjgsIDIzMywgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDk3LCAyMjgsIDc0LCA2MiwgNTcsIDMsIDI1MywgOTQsIDIyNywgMjM3LCA2MiwgNTcsIDMsIDI1MywgMTUzLCAxOTAsIAotICAgIDYyLCA1NywgMywgMjUzLCA3NywgMjI1LCAyMjEsIDYyLCA1NywgMywgMjUzLCAxMTAsIDIyNSwgMTA4LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTM3LCAyMjUsIDE2LCA2MiwgNTcsIDMsIDI1MywgOTksIDIyNCwgMTUwLCA2MiwgNTcsIDMsIDI1MywgMTMyLCAKLSAgICAyMjQsIDg4LCA2MiwgNTcsIDMsIDI1MywgNzEsIDIyNCwgNjksIDYyLCA1NywgMywgMjUzLCAxMjcsIDIyNCwgNTMsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMTYsIDIyNCwgNDIsIDYyLCA1NywgMywgMjUzLCA4OSwgMjA1LCA2MiwgNTcsIDMsIDI1MywgMTIxLCAKLSAgICAyMjMsIDEyOCwgNjIsIDU3LCAzLCAyNTMsIDk2LCAyMjMsIDM1LCA2MiwgNTcsIDMsIDI1MywgMTU1LCAyMjIsIDIxMSwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEyMiwgMjIyLCAxNDAsIDYyLCA1NywgMywgMjUzLCAxMTcsIDIwNiwgNjIsIDU3LCAzLCAyNTMsIDE0MCwgCi0gICAgMjIxLCAxODEsIDYyLCA1NywgMywgMjUzLCAxMDgsIDIxOSwgMTkxLCA2MiwgNTcsIDMsIDI1MywgMTM2LCAyMTksIDU4LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgOTEsIDIxOCwgODMsIDYyLCA1NywgMywgMjUzLCA5MCwgMjE3LCAxMDUsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxNTEsIDIxNywgMjIsIDYyLCA1NywgMywgMjUzLCAxMTIsIDIxNiwgMTE3LCA2MiwgNTcsIDMsIDI1MywgMTQ5LCAKLSAgICAxMTEsIDYyLCA1NywgMywgMjUzLCA4MCwgMjE1LCAxMTgsIDYyLCA1NywgMywgMjUzLCA5NSwgMjEyLCA2NSwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDc0LCAyMTIsIDIyLCA2MiwgNTcsIDMsIDI1MywgMTA5LCAyMTEsIDI1MCwgNjIsIDU3LCAzLCAyNTMsIDEwNywgCi0gICAgMjExLCAyMjcsIDYyLCA1NywgMywgMjUzLCAxMzEsIDIxMCwgMTE2LCA2MiwgNTcsIDMsIDI1MywgNzUsIDIxMCwgOTQsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMjgsIDIxMCwgMjMsIDYyLCA1NywgMywgMjUzLCAxMjMsIDI1NSwgNzUsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMDYsIDI1NSwgNzQsIDYyLCA1NywgMywgMjUzLCA2NSwgMjUzLCAxOTIsIDYyLCA1NywgMywgMjUzLCA3OCwgMjQ2LCA0NiwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDYxLCAyNDYsIDQ1LCA2MiwgNTcsIDMsIDI1MywgMTAxLCAyMjcsIDE3NCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDExOSwgMjI0LCAxNDgsIDYyLCA1NywgMywgMjUzLCA4NywgMjI0LCAxNTIsIDYyLCA1NywgMywgMjUzLCA3MywgCi0gICAgMjIzLCAxODYsIDYyLCA1NywgMywgMjUzLCAxMTUsIDIyMywgMTg1LCA2MiwgNTcsIDMsIDI1MywgODEsIDIyMiwgMjEwLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgODMsIDIxNywgMTAyLCA2MiwgNTcsIDMsIDI1MywgNjMsIDIxNSwgNzgsIDYyLCA1NywgMywgCi0gICAgMjUzLCA2MCwgMTA1LCA2MiwgNTcsIDE2LCAyNTMsIDEzMCwgNjIsIDU3LCAxNiwgMjUzLCAxMjksIDYyLCA1NywgMTYsIAotICAgIDI1MywgMTI2LCA2MiwgNTcsIDE2LCAyNTMsIDExNCwgNjIsIDU3LCAxNiwgMjUzLCAxMDIsIDYyLCA1NywgMTYsIDI1MywgCi0gICAgMTAwLCA2MiwgNTcsIDE2LCAyNTMsIDkzLCA2MiwgNTcsIDE2LCAyNTMsIDg2LCA2MiwgNTcsIDE2LCAyNTMsIDg1LCA2MiwgCi0gICAgNTcsIDE2LCAyNTMsIDcwLCA2MiwgNTcsIDE2LCAyNTMsIDY3LCA2MiwgNTcsIDE2LCAyNTMsIDY2LCA2MiwgNTcsIDE2LCAKLSAgICAyNTMsIDY0LCA2MiwgNTcsIDE2LCAyNTMsIDYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1OSwgMjMxLCAxODUsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDU4LCAyMTEsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MywgNTcsIDI0OCwgNzQsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDU2LCAyNDUsIDk1LCA2MiwgNTcsIDEwNiwgMjUzLCA1NSwgMjMxLCAxNTksIDYyLCA1NywgMTA2LCAyNTMsIDU0LCAyMTgsIAotICAgIDE2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTMsIDI0NSwgMzcsIDYyLCA1NywgMTA2LCAyNTMsIDUyLCAyMjMsIDE1MywgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgNTEsIDIyMCwgNjIsIDYyLCA1NywgMTA2LCAyNTMsIDUwLCAyNDEsIDIzNywgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgNDksIDIxOSwgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDQ4LCAyNTEsIDIwMywgNjIsIDU3LCAxMDYsIDI1MywgNDcsIAotICAgIDI0OSwgMTQ1LCA2MiwgNTcsIDEwNiwgMjUzLCA0NiwgMjUxLCAxMTUsIDYyLCA1NywgMTA2LCAyNTMsIDQ1LCAyMTIsIDIsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDQ0LCAyNTIsIDEzNiwgNjIsIDU3LCAxMDYsIDI1MywgNDMsIDIyNiwgMjA1LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCA0MiwgMjE4LCAyNTQsIDYyLCA1NywgMTA2LCAyNTMsIDQxLCAyNDksIDY4LCA2MiwgNTcsIDIzMCwgMTQyLCAKLSAgICAyNTMsIDQwLCAyMzQsIDIyNCwgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAzOSwgMjM0LCAyMzIsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDM4LCAyMjYsIDIxOCwgNjIsIDU3LCAxMDYsIDI1MywgMzcsIDIxMSwgMjM2LCA2MiwgNTcsIDEwNiwgMjUzLCAzNiwgNjIsIAotICAgIDU3LCAyMzAsIDE0MiwgMjUzLCAzNSwgMjU0LCAxNywgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAzNCwgMjMxLCA1MiwgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgMzMsIDI1MSwgMTM0LCA2MiwgNTcsIDEwNiwgMjUzLCAzMiwgMjQyLCAxNjYsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDMxLCA2MiwgNTcsIDEwNiwgMjUzLCAzMCwgMjExLCAyMTIsIDYyLCA1NywgMTA2LCAyNTMsIDI5LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCAyOCwgNjIsIDU3LCAxMDYsIDI1MywgMjcsIDI0MCwgMjQ4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNiwgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDI0LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTMsIDIyLCAyMTUsIAotICAgIDkyLCA2MiwgNTcsIDEwNiwgMjUzLCAyMSwgNjIsIDU3LCAxMDYsIDI1MywgMjAsIDYyLCA1NywgMTA2LCAyNTMsIDE5LCAKLSAgICAyNDksIDI1MCwgNjIsIDU3LCAxMDYsIDI1MywgMTgsIDYyLCA1NywgMTA2LCAyNTMsIDE3LCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICAxNiwgMjQzLCA5MywgNjIsIDU3LCAxMDYsIDI1MywgMTUsIDI1NCwgNCwgNjIsIDU3LCAxMDYsIDI1MywgMTQsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDEzLCA2MiwgNTcsIDEwNiwgMjUzLCAxMiwgNjIsIDU3LCAxMDYsIDI1MywgMTEsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDEwLCA2MiwgNTcsIDEwNiwgMjUzLCA5LCA2MiwgNTcsIDEwNiwgMjUzLCA4LCA2MiwgNTcsIDEwNiwgMjUzLCA3LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCA2LCA2MiwgNTcsIDEwNiwgMjUzLCA1LCAyMzAsIDEzNCwgNjIsIDU3LCAxMDYsIDI1MywgNCwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgMywgMjE1LCAyMzUsIDYyLCA1NywgMTA2LCAyNTMsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDEsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDI1NSwgNjIsIDU3LCAxMDYsIDI1MiwgMjU0LCA2MiwgCi0gICAgNTcsIDEwNiwgMjUyLCAyNTMsIDYyLCA1NywgMTA2LCAyNTIsIDI1MiwgNjIsIDU3LCAxMDYsIDI1MiwgMjUxLCA2MiwgNTcsIAotICAgIDEwNiwgMjUyLCAyNTAsIDYyLCA1NywgMTA2LCAyNTIsIDI0OSwgNjIsIDU3LCAxMDYsIDI1MiwgMjQ4LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyNDcsIDI0MSwgMjExLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjYsIDI0NCwgMjgsIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDIyMywgMjUyLCAxMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxOCwgMjE5LCA1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTcsIDc0LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxNSwgMjE3LCAyMzYsIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDIxNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjEzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTIsIDIxMSwgMjU0LCAyNTAsIDEzOSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjExLCAyNTAsIDEzOSwgNjIsIDU3LCAxMDYsIDI1MiwgMjEwLCAyNTAsIDE0MCwgMjQzLCAKLSAgICAyNTUsIDYyLCA1NywgMTA2LCAyNTIsIDIwOSwgMjEyLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDgsIDYyLCA1NywgMTA2LCAKLSAgICAyNTIsIDIwNywgNjIsIDU3LCAyMzAsIDE0MiwgMjUyLCAyMDYsIDI0NywgMTk4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDUsIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIwNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjAyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDEsIDYyLCAKLSAgICA1NywgMTA2LCAyNTIsIDIwMCwgNjIsIDU3LCAxMDYsIDI1MiwgMTk5LCAyNDgsIDE1OSwgNjIsIDU3LCAxMDYsIDI1MiwgCi0gICAgMTk4LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTcsIDYyLCA1NywgMTA2LCAyNTIsIDE5NiwgNjIsIDU3LCAxMDYsIDI1MiwgMTk1LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAxOTQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUzLCAyMywgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDI0NiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKLSAgICAyNTIsIDI0NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAotICAgIDI0MiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MCwgCi0gICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOCwgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNiwgNjIsIDU3LCAxMDYsIAotICAgIDIxMywgMTg2LCAyNTIsIDIzNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNCwgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDIzMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKLSAgICAyNTIsIDIzMSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAotICAgIDIyOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNywgCi0gICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNCwgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIyMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyMSwgNjIsIDU3LCAxMDYsIAotICAgIDIxMywgMTg2LCAyNTIsIDIyMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIxOSwgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDIwMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDE5MywgMjU0LCAyMzYsIDIxMSwgMjA5LCAyMjAsIAotICAgIDEzOCwgMjMyLCAyMTMsIDI1NCwgMjM2LCAyMTEsIDIwOSwgMjIwLCAxMzgsIDI0NywgMTIwLCAyNTQsIDIzNiwgMjUwLCAKLSAgICAxMzAsIDc4LCAyNTQsIDIzNiwgNTQsIDExMCwgMjU0LCAyMzYsIDU0LCAxMDUsIDI1NCwgMjM2LCA1NCwgMTU4LCAyNTQsIAotICAgIDIzNiwgNTQsIDE2MSwgMjU0LCAyMzYsIDU0LCAxODksIDI1NCwgMjM2LCA1NCwgMTk0LCAyNTQsIDIzNiwgNTQsIDE5OCwgCi0gICAgMjU0LCAyMzYsIDU0LCAxOTUsIDI1NCwgMjM2LCA1NCwgMjAwLCAyNTQsIDIzNiwgNTQsIDIxNiwgMjQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDIxNSwgNzMsIDI1NCwgMjM2LCA1NCwgMjE2LCAxNjIsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxNSwgMjU0LCAyMzYsIDU0LCAKLSAgICAyNDQsIDExNCwgMjU0LCAyMzYsIDU0LCAyMTksIDExMSwgMjU0LCAyMzYsIDU0LCAyMjAsIDExNiwgMjU0LCAyMzYsIDU0LCAKLSAgICAyNDUsIDE4NCwgMjU0LCAyMzYsIDU0LCAyMjgsIDE5NSwgMjU0LCAyMzYsIDU0LCAxMjMsIDI0MCwgMjEwLCAyNTQsIDIzNiwgCi0gICAgNTQsIDExMywgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMTM0LCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDQsIDExLCAKLSAgICAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyMTksIDEyNSwgMjQwLCAKLSAgICAyMTAsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMjIsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDI0NSwgMTkzLCAyNDAsIDIxMCwgCi0gICAgMjU0LCAyMzYsIDU0LCAyMjgsIDIwMCwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMTIzLCAyMTYsIDE0NywgMjU0LCAyMzYsIAotICAgIDU0LCAxMTMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDEzNCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMSwgCi0gICAgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ0LCA4MSwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMjUsIDIxNiwgCi0gICAgMTQ3LCAyNTQsIDIzNiwgNTQsIDIyMCwgMTIyLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDUsIDE5MywgMjE2LCAxNDcsIAotICAgIDI1NCwgMjM2LCA1NCwgMjI4LCAyMDAsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjU0LCAKLSAgICAyMzYsIDU0LCAyMTUsIDc0LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTYsIDE2MywgMjE2LCAxNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMjQ0LCAxNiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMTUsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIAotICAgIDIxOSwgMTEyLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMjAsIDExNywgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ1LCAKLSAgICAxODUsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIyOCwgMTk2LCAyMTYsIDE0NywgMjU0LCAyMzYsIDIxMiwgMTQsIDI1MiwgCi0gICAgMTI4LCAyMTQsIDE3MywgMjU0LCAyMzYsIDIxMiwgMTQsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIDE0LCAKLSAgICAyMjEsIDE3NiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgMTQsIDIxNiwgMTY5LCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAKLSAgICAxNCwgMjQ0LCA0LCAyMTgsIDU5LCAyNTQsIDIzNiwgMjQ2LCA4MSwgMjMxLCA5MCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAKLSAgICAyMzYsIDIzMiwgMTk5LCAyMzEsIDkwLCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIDIzNiwgMjMxLCA5MCwgMjIxLCAxNzYsIAotICAgIDIxOCwgNTksIDI1NCwgMjM2LCAyMzEsIDkwLCAyMTYsIDE2OSwgMjE4LCA1OSwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjI0LCAyMSwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgMjQyLCAyNywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjQ2LCAxMDAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxODksIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNCwgMjYsIAotICAgIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE2LCAKLSAgICAxNDcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNSwgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIAotICAgIDgxLCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAyNDgsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgCi0gICAgMTk0LCAyNDQsIDExNSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgMjQwLCAyMTEsIDIxNywgNjcsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjE2LCAxNDgsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTYsIDE0OCwgMjE3LCA2NywgMjYsIAotICAgIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAyNDgsIDIxOCwgCi0gICAgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyNDAsIDIxMSwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMSwgMjE4LCAxNTAsIAotICAgIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDIxNiwgMTQ4LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgCi0gICAgMjQ4LCAyMTYsIDE0OCwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNSwgMjE2LCAxNDgsIDIxOCwgCi0gICAgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAyNDgsIDIzMCwgMTY0LCAyNiwgMjU1LCA2LCAyNDEsIDIwNSwgMTIzLCAKLSAgICAyMjUsIDMxLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTEwLCAyNiwgMjU1LCA2LCAyNDEsIDIwMSwgMTEwLCAyNiwgMjU1LCAKLSAgICA2LCAyNDUsIDEwNCwgMTA1LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTA1LCAyNiwgMjU1LCA2LCAyNDksIDY1LCAxMTMsIAotICAgIDI0NiwgOTksIDI2LCAyNTUsIDYsIDI0NSwgMTA0LCAxMTMsIDI0NiwgOTksIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAxODksIAotICAgIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyMTYsIDI0NywgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDIxNiwgMjQ4LCAyNTQsIDE0MSwgCi0gICAgMTcsIDI2LCAyNTUsIDYsIDI0MSwgMjAxLCAyMTYsIDI0NywgMjYsIDI1NSwgNiwgMjMxLCA0MSwgMjE2LCAyNDcsIDI2LCAKLSAgICAyNTUsIDYsIDIxNiwgMTgxLCAyMTYsIDI0NywgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDIxNiwgMTYyLCAyNiwgMjU1LCA2LCAKLSAgICAyMTUsIDIwMywgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyNDQsIDExNSwgMjU0LCAxNDEsIDE3LCAyNiwgCi0gICAgMjU1LCA2LCAyNDEsIDIwMSwgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDExNCwgMjYsIDI1NSwgNiwgCi0gICAgMjE2LCAxODEsIDEyMywgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMzQsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAKLSAgICAyNDUsIDEwNCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIAotICAgIDI1NSwgNiwgMjE2LCAxODEsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyNTAsIDIyNywgMjQ0LCA4MSwgMjQwLCAKLSAgICAyMTAsIDI2LCAyNTUsIDYsIDIyOSwgMTgyLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEyMywgCi0gICAgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDgxLCAyMTYsIDE0NywgMjYsIDI1NSwgNiwgMjQ4LCA1NywgCi0gICAgMjQ0LCA4MSwgMjMwLCAxNjQsIDI2LCAyNTUsIDYsIDIxOCwgMTE4LCAyNDQsIDExNSwgMjMwLCAxNjQsIDI2LCAxMjMsIAotICAgIDE2MywgNTAsIDI2LCAxMjMsIDE2MywgNSwgMjU0LCAxNDEsIDE3LCAyNiwgMTEzLCAyMTYsIDE2NywgNTAsIDI2LCAxMzQsIAotICAgIDIyNCwgMjAsIDUwLCAyNiwgMjExLCA0NSwgNTAsIDI2LCAyMTcsIDY4LCA1MCwgMjYsIDI0NiwgMTAxLCA1MCwgMjYsIDIyNiwgCi0gICAgMjQ2LCA1MCwgMjYsIDExMywgMjI2LCAyNDUsIDUwLCAyNiwgMTM0LCAyMjYsIDI0NSwgNTAsIDI2LCAyNDQsIDExLCAyMjYsIAotICAgIDI0NSwgNTAsIDI2LCAyNDQsIDgxLCAyMjYsIDI0NSwgNTAsIDI2LCAyMzEsIDM1LCA1MCwgMjYsIDIzMywgMTU3LCAyNTIsIAotICAgIDEyOCwgNTAsIDI2LCAyMzIsIDE5NCwgNTAsIDI2LCAyMjYsIDEzMSwgNTAsIDI2LCAyMTEsIDE1OSwgNTAsIDI2LCAyNTMsIAotICAgIDI0MywgNTAsIDI2LCAyNTQsIDAsIDUwLCAyNiwgMjQyLCAxNDQsIDUwLCAyNiwgMjE1LCAxODYsIDI1MiwgMTI4LCA1MCwgCi0gICAgMjYsIDIxMCwgODcsIDUwLCAyMjIsIDE5OCwgMjIwLCAxMTMsIDUwLCAyMjIsIDE5OCwgMjE0LCAxODUsIDUwLCAyMjIsIAotICAgIDE5OCwgMjIwLCAxNDIsIDUwLCAyMjIsIDE5OCwgMjIwLCAxMTEsIDUwLCAyMjIsIDE5OCwgMjQ3LCAyMTMsIDIyMCwgMTExLCAKLSAgICA1MCwgMjIyLCAxOTgsIDIxOSwgMTY4LCA1MCwgMjIyLCAxOTgsIDI0OCwgNTMsIDUwLCAyMjIsIDE5OCwgMjI0LCA2LCA1MCwgCi0gICAgMjIyLCAxOTgsIDIyMCwgMTI5LCA1MCwgMjIyLCAxOTgsIDI0NiwgNjAsIDUwLCAyMjIsIDE5OCwgMjUzLCAyMzgsIDUwLCAKLSAgICAyMjIsIDE5OCwgMjUwLCAxNzEsIDUwLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNSwgMjEzLCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDIyNSwgMjQsIDI0MSwgMjM1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNywgNDUsIDI0MSwgMjM1LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDI1MCwgMjQ3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MCwgMTAxLCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDIxMSwgMjIxLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0MSwgMjExLCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDI0MywgODUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE2LCAxMTYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgNzQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUxLCAxNjksIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIwLCAyOSwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNDksIDI0NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMzEsIDE4NCwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyMzEsIDEzNiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjEsIDIxNiwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMzIsIDIzNywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTEsIDE4OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICAyNTAsIDIzMSwgMjI1LCAzNSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDcsIDEzMywgMjI1LCAxNDMsIDI0NywgMTkxLCAKLSAgICA1LCAyNDksIDIyMywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTksIDg3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0OSwgCi0gICAgMjI0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MiwgNjMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIwLCAxNiwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNDAsIDI0OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDEsIDE3OCwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyNTEsIDExMiwgMjMzLCAzNiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDIyNCwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyMjMsIDE1MywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDUsIDIzMCwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyNDYsIDEwNywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTUsIDEwNSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyNTIsIDY2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNSwgMzYsIDIxNSwgMjM1LCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDIxMywgMTU5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNiwgMTgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjIyLCAxOTAsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjMyLCAyMjQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI2LCAKLSAgICAxMTUsIDI1MiwgMTg0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0NCwgNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjQyLCAxMzgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE4LCAxMTksIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgNCwgMjUzLCAKLSAgICAxNjgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjEyLCAzMiwgMjUyLCAxNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMzgsIAotICAgIDIyNiwgMjQ4LCA5MSwgMjMyLCA2MCwgMSwgNjEsIDIzMiwgNjAsIDEsIDc1LCAyMzIsIDYwLCAxLCAyNTMsIDE1OCwgMjMyLCAKLSAgICA2MCwgMSwgMjUyLCAxOSwgMjMyLCA2MCwgMSwgMjQzLCAyMDIsIDIzMiwgNjAsIDEsIDI0OSwgNjAsIDIzMiwgNjAsIDEsIAotICAgIDczLCAyMzIsIDYwLCAxLCAyMTIsIDk4LCAyMzIsIDYwLCAxLCAyMTAsIDE1OSwgMjMyLCA2MCwgMSwgMjE2LCAyMTAsIDIzMiwgCi0gICAgNjAsIDEsIDIzNSwgMTQ0LCAyMzIsIDYwLCAxLCAyMzUsIDIzLCAyMzIsIDYwLCAxLCAyMjQsIDk2LCAyMzIsIDYwLCAxLCAKLSAgICAxNTYsIDIzMiwgNjAsIDEsIDE5MywgMjMyLCA2MCwgMSwgMjMwLCAyNSwgMjMyLCA2MCwgMSwgMjMwLCAxNjYsIDIzMiwgNjAsIAotICAgIDEsIDIyOCwgMTExLCAyMzIsIDYwLCAxLCA3MCwgMjMyLCA2MCwgMSwgMjI2LCAxMDUsIDIzMiwgNjAsIDEsIDIzNCwgNDcsIAotICAgIDIzMiwgNjAsIDEsIDE1MywgMjMyLCA2MCwgMSwgMjIyLCA5MSwgMjMyLCA2MCwgMSwgMjE3LCAxNTIsIDIzMiwgNjAsIDEsIAotICAgIDIxNSwgMTU5LCAyMzIsIDYwLCAxLCAyNTQsIDEyMywgMjMyLCA2MCwgMSwgMjQ1LCAxNTAsIDIzMiwgNjAsIDEsIDI0MiwgCi0gICAgNjAsIDIzMiwgNjAsIDEsIDIxMSwgMTc4LCAyNTAsIDIzNywgMSwgNjEsIDI1MCwgMjM3LCAxLCAyMjYsIDkxLCAyNTAsIAotICAgIDIzNywgMSwgMjQ5LCA2MCwgMjUwLCAyMzcsIDEsIDE1NiwgMjUwLCAyMzcsIDEsIDIxNCwgMTE2LCAyNTAsIDIzNywgMSwgCi0gICAgMTUzLCAyNTAsIDIzNywgMSwgMjMzLCA2MiwgMjUwLCAyMzcsIDEsIDI1NSwgNzUsIDI1MCwgMjM3LCAxLCAyMjQsIDk2LCAKLSAgICAyNTAsIDIzNywgMSwgMjUzLCAxNTgsIDI1MCwgMjM3LCAxLCAxOTMsIDI1MCwgMjM3LCAxLCA3NiwgMjUwLCAyMzcsIDEsIAotICAgIDI0OCwgMjIzLCAyNTAsIDIzNywgMSwgMjE3LCAxNTIsIDI1MCwgMjM3LCAxLCAyMjAsIDEwNCwgMjUwLCAyMzcsIDEsIDIyMCwgCi0gICAgMTAzLCAyNTAsIDIzNywgMSwgMjIyLCA5MSwgMjUwLCAyMzcsIDEsIDI1MSwgNjUsIDI1MCwgMjM3LCAxLCA3MCwgMjUwLCAKLSAgICAyMzcsIDEsIDIyOCwgMTExLCAyNTAsIDIzNywgMSwgMjExLCAxNzgsIDI1MCwgMjM3LCAxLCAyMzAsIDI1LCAyNTAsIDIzNywgCi0gICAgMSwgMjE1LCAxNTgsIDI1MCwgMjM3LCAxLCAyMjYsIDEwNSwgMjUwLCAyMzcsIDEsIDIxOCwgMjI2LCAyNTAsIDIzNywgMSwgCi0gICAgNzMsIDI1MCwgMjM3LCAxLCA3NSwgMjUwLCAyMzcsIDEsIDIxNCwgMTEzLCAyNTAsIDIzNywgMSwgMjM1LCAyMywgMjUwLCAKLSAgICAyMzcsIDEsIDIzNSwgMTQsIDI1MCwgMjM3LCAxLCAyMjksIDE1MCwgMjUwLCAyMzcsIDEsIDIxNCwgMTE4LCAyNTAsIDIzNywgCi0gICAgMSwgMjQzLCAyMDIsIDI1MCwgMjM3LCAxLCAyNDMsIDEzNywgMjUwLCAyMzcsIDEsIDIxOCwgMTY4LCAyNTAsIDIzNywgMSwgCi0gICAgMjE4LCAxNjcsIDI1MCwgMjM3LCAxLCAyMjksIDc5LCAyNTAsIDIzNywgMSwgMjM2LCAzMywgMjUwLCAyMzcsIDEsIDI1MSwgCi0gICAgNjQsIDI1MCwgMjM3LCAxLCAyMTUsIDE1OSwgMjUwLCAyMzcsIDEsIDIxNCwgMTE1LCAyNTAsIDIzNywgMSwgMjIyLCAxODAsIAotICAgIDI1MCwgMjM3LCAxLCAyMzEsIDEyOSwgMjUwLCAyMzcsIDEsIDIzMSwgMTI4LCAyNTAsIDIzNywgMSwgMjMxLCAxMjcsIDI1MCwgCi0gICAgMjM3LCAxLCAyMzEsIDEyNiwgMjUwLCAyMzcsIDEsIDIzMywgNjEsIDI1MCwgMjM3LCAxLCAyNDUsIDIzNCwgMjUwLCAyMzcsIAotICAgIDEsIDIxNCwgMTE0LCA1NSwgMzIsIDEsIDYxLCA1NSwgMzIsIDEsIDI1MiwgNzUsIDU1LCAzMiwgMSwgMjM0LCAxODIsIDU1LCAKLSAgICAzMiwgMSwgMjQ4LCA5MCwgNTUsIDMyLCAxLCA3NSwgNTUsIDMyLCAxLCAyMTMsIDI1NSwgNTUsIDMyLCAxLCAyMTAsIDk0LCAKLSAgICA1NSwgMzIsIDEsIDI0MSwgMjM4LCA1NSwgMzIsIDEsIDIxNiwgMTk1LCA1NSwgMzIsIDEsIDczLCA1NSwgMzIsIDEsIDE3NiwgCi0gICAgNTUsIDMyLCAxLCAyNDUsIDE3NCwgNTUsIDMyLCAxLCAyNDUsIDE1OSwgNTUsIDMyLCAxLCAyNDUsIDE1MCwgNTUsIDMyLCAxLCAKLSAgICAyNDUsIDc1LCA1NSwgMzIsIDEsIDc2LCA1NSwgMzIsIDEsIDIyNSwgMjIxLCA1NSwgMzIsIDEsIDIyMCwgNjMsIDU1LCAzMiwgCi0gICAgMSwgMjMzLCAyMTcsIDU1LCAzMiwgMSwgMjQ1LCA5MiwgNTUsIDMyLCAxLCAyNDUsIDgyLCA1NSwgMzIsIDEsIDIxNywgMjIsIAotICAgIDU1LCAzMiwgMSwgNzAsIDU1LCAzMiwgMSwgMjQ1LCAxNzcsIDU1LCAzMiwgMSwgMjI1LCAxMzYsIDU1LCAzMiwgMSwgMjM0LCAKLSAgICAxMTksIDU1LCAzMiwgMSwgMjQ1LCAyMDIsIDU1LCAzMiwgMSwgMjQ1LCA4NCwgNTUsIDMyLCAxLCAyNTAsIDEzMSwgNTUsIAotICAgIDMyLCAxLCAyMzYsIDMzLCA1NSwgMzIsIDEsIDIxNCwgMTE4LCA1NSwgMzIsIDIyNywgMTk4LCAxMTAsIDU1LCAzMiwgMjI3LCAKLSAgICAxOTgsIDE4OSwgNTUsIDMyLCAyMjcsIDE5OCwgMjE2LCAyNDcsIDU1LCAzMiwgMjI3LCAxOTgsIDI0NCwgMTE0LCAyNDIsIAotICAgIDE1MywgMSwgMjU0LCAyMDQsIDI0MiwgMTUzLCAxLCAyNTIsIDE2MywgMjQyLCAxNTMsIDEsIDI0MiwgMjExLCAyNDIsIDE1MywgCi0gICAgMSwgMjQ4LCAyMDQsIDI0MiwgMTUzLCAxLCAyNTQsIDIwMCwgMjQyLCAxNTMsIDEsIDIyNCwgNzksIDI0MiwgMTUzLCAxLCAKLSAgICAyMzUsIDE1NSwgMjQyLCAxNTMsIDEsIDI0MiwgMzksIDI0MiwgMTUzLCAxLCAyMTYsIDE1OCwgMjQyLCAxNTMsIDEsIDI0NSwgCi0gICAgMTgzLCAyNDIsIDE1MywgMSwgMjMzLCAxOTAsIDI0MiwgMTUzLCAxLCAyMzMsIDExMywgMjQyLCAxNTMsIDEsIDIzMSwgMTc5LCAKLSAgICAyNDIsIDE1MywgMSwgMjI5LCAxODQsIDI0MiwgMTUzLCAxLCAyMzUsIDExOSwgMjQyLCAxNTMsIDEsIDIxNCwgMTM2LCAyNDIsIAotICAgIDE1MywgMSwgMjI2LCA2OSwgMjQyLCAxNTMsIDEsIDIyOCwgMTk1LCAyNDIsIDE1MywgMSwgMjIzLCAxNjUsIDI0MiwgMTUzLCAKLSAgICAxLCAyMjEsIDIxOCwgMjQyLCAxNTMsIDEsIDIxNywgNCwgMjQyLCAxNTMsIDEsIDIxMSwgMjM0LCAyNDIsIDE1MywgMSwgCi0gICAgMjQ0LCAxNzgsIDI0MiwgMTUzLCAxLCAyMzYsIDM3LCAyNDIsIDE1MywgMSwgMjQwLCAxOTksIDI0MiwgMTUzLCAxLCAyMjYsIAotICAgIDEzOSwgMjQyLCAxNTMsIDEsIDIyOCwgMjAwLCAyNDAsIDIxMCwgMjE0LCAyMDksIDEsIDI1NCwgMTQ3LCAyMTQsIDIwOSwgMSwgCi0gICAgMjUyLCAyNiwgMjE0LCAyMDksIDEsIDI0MywgMTA4LCAyMTQsIDIwOSwgMSwgMjM0LCAxMzIsIDIxNCwgMjA5LCAxLCAyNDgsIAotICAgIDU0LCAyMTQsIDIwOSwgMSwgMjQxLCA2OCwgMjE0LCAyMDksIDEsIDIxMSwgMjI3LCAyMTQsIDIwOSwgMSwgMjEwLCA4NSwgCi0gICAgMjE0LCAyMDksIDEsIDI0MCwgMjQxLCAyMTQsIDIwOSwgMSwgMjE2LCAyMzAsIDIxNCwgMjA5LCAxLCAyMTAsIDIzMywgMjE0LCAKLSAgICAyMDksIDEsIDIzNCwgMjUwLCAyMTQsIDIwOSwgMSwgMjIwLCAyMCwgMjE0LCAyMDksIDEsIDIzMywgOTgsIDIxNCwgMjA5LCAKLSAgICAxLCAyMzEsIDY1LCAyMTQsIDIwOSwgMSwgMjQ4LCAyMSwgMjE0LCAyMDksIDEsIDIyNywgMTk0LCAyMTQsIDIwOSwgMSwgCi0gICAgMjEwLCAxMywgMjE0LCAyMDksIDEsIDIyMSwgMjQ4LCAyMTQsIDIwOSwgMSwgMjU0LCAxOTYsIDIxNCwgMjA5LCAxLCAyMjQsIAotICAgIDE1MCwgMjE0LCAyMDksIDEsIDIyMiwgMjUsIDIxNCwgMjA5LCAxLCAyMjQsIDM1LCAyMTQsIDIwOSwgMSwgMjIzLCAxNDQsIAotICAgIDIxNCwgMjA5LCAxLCAyMTYsIDE5OSwgMjE0LCAyMDksIDEsIDI0MiwgMjQ0LCAyMTQsIDIwOSwgMSwgMTExLCAyMTQsIDIwOSwgCi0gICAgMSwgNzMsIDIxNCwgMjA5LCAxLCA3MCwgMjE0LCAyMDksIDEsIDIxOCwgMTc5LCAyMTQsIDIwOSwgMjExLCAyMDksIDI0NywgCi0gICAgMTcyLCA1NSwgMjI1LCAxNjksIDUsIDYxLCA1NSwgMjI1LCAxNjksIDUsIDczLCA1NSwgMjI1LCAxNjksIDUsIDcwLCA1NSwgCi0gICAgMjI1LCAxNjksIDUsIDE3NiwgNTUsIDIyNSwgMTY5LCA1LCAyMzMsIDIxNywgNTUsIDIyNSwgMTY5LCA1LCAyNDMsIDEzNSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNDIsIDExMywgNTUsIDIyNSwgMTY5LCA1LCAyMTEsIDE2NSwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNTEsIDMzLCA1NSwgMjI1LCAxNjksIDUsIDIzNSwgMTQxLCA1NSwgMjI1LCAxNjksIDUsIDIzNSwgMTA4LCA1NSwgMjI1LCAKLSAgICAxNjksIDUsIDIxNywgMTA1LCA1NSwgMjI1LCAxNjksIDUsIDIxNSwgMTE4LCA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMjIxLCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMywgNTUsIDIyNSwgMTY5LCA1LCAyNDYsIDc4LCA1NSwgMjI1LCAxNjksIDUsIDIxNiwgCi0gICAgMjA4LCA1NSwgMjI1LCAxNjksIDUsIDE5MCwgNTUsIDIyNSwgMTY5LCA1LCAyNTIsIDE5MSwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNDQsIDE5NiwgNTUsIDIyNSwgMTY5LCA1LCAxOTcsIDU1LCAyMjUsIDE2OSwgNSwgMjI3LCAyMzcsIDU1LCAyMjUsIDE2OSwgCi0gICAgNSwgMTg0LCA1NSwgMjI1LCAxNjksIDUsIDIzMCwgMjMwLCA1NSwgMjI1LCAxNjksIDUsIDIzMCwgMTAyLCA1NSwgMjI1LCAKLSAgICAxNjksIDUsIDE5MSwgNTUsIDIyNSwgMTY5LCA1LCAyMTQsIDI3LCA1NSwgMjI1LCAxNjksIDUsIDIxMywgMTc2LCA1NSwgCi0gICAgMjI1LCAxNjksIDUsIDIwNSwgNTUsIDIyNSwgMTY5LCA1LCAyMjIsIDE0MCwgNTUsIDIyNSwgMTY5LCA1LCAyMzMsIDEzNSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyMDYsIDU1LCAyMjUsIDE2OSwgNSwgMjEwLCAxMTYsIDU1LCAyMjUsIDE2OSwgNSwgMjIwLCAKLSAgICAxMDIsIDU1LCAyMjUsIDE2OSwgNSwgMjE4LCAyMjMsIDU1LCAyMjUsIDE2OSwgNSwgMTYyLCA1NSwgMjI1LCAxNjksIDUsIAotICAgIDI1MywgMTg2LCA1NSwgMjI1LCAxNjksIDUsIDI1MywgMTg1LCA1NSwgMjI1LCAxNjksIDUsIDI1MywgMTg0LCA1NSwgMjI1LCAKLSAgICAxNjksIDUsIDIxMSwgMTQyLCA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMjAwLCA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMTk5LCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDI1MiwgMTcwLCA1NSwgMjI1LCAxNjksIDUsIDI1MSwgODUsIDU1LCAyMjUsIDE2OSwgMjExLCAKLSAgICAyMDksIDI0NywgMTcyLCA1NSwgMjI1LCAxNjksIDU0LCAxMTAsIDU1LCAyMjUsIDE2OSwgNTQsIDEwNSwgNTUsIDIyNSwgCi0gICAgMTY5LCA1NCwgMjE2LCAyNDcsIDU1LCAyMjUsIDE2OSwgNTQsIDIxNSwgNzMsIDU1LCAyMjUsIDE2OSwgNTQsIDI0MCwgMjEwLCAKLSAgICAxODEsIDYsIDEsIDE5OSwgNzMsIDE4MSwgNiwgMSwgMTk5LCA3NSwgMTgxLCA2LCAxLCAxOTksIDYxLCAxODEsIDYsIDEsIAotICAgIDE5OSwgMjU0LCAyMDksIDE4MSwgNiwgMSwgMTk5LCA3NiwgMTgxLCA2LCAxLCAxOTksIDIyNiwgMTgzLCAxODEsIDYsIDEsIAotICAgIDIxOSwgMjUxLCA3MywgMTgxLCA2LCAxLCAyMTksIDI1MSwgNzUsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDYxLCAxODEsIDYsIAotICAgIDEsIDIxOSwgMjUxLCAyNTQsIDIwOSwgMTgxLCA2LCAxLCAyMTksIDI1MSwgNzYsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDIyNiwgCi0gICAgMTgzLCAxODEsIDYsIDEsIDI1MywgMTY3LCAxODEsIDYsIDEsIDIyNiwgMTE2LCAxODEsIDYsIDEsIDIxMSwgMTk1LCAxODEsIAotICAgIDYsIDEsIDIxMSwgNDQsIDE4MSwgNiwgMSwgMjQyLCA2MCwgMTgxLCA2LCAxLCAyMjUsIDIxMSwgMTgxLCA2LCAxLCAyNTIsIAotICAgIDY2LCAxODEsIDYsIDEsIDIxNywgMTEsIDE4MSwgNiwgMSwgMjQ4LCA3NywgMTgxLCA2LCAxLCAyNTAsIDEyOCwgMTgxLCA2LCAKLSAgICAxLCAyMzUsIDEyNCwgMTgxLCA2LCAxLCAyMzQsIDE4OSwgMTgxLCA2LCAxLCAyNDMsIDgzLCAxODEsIDYsIDEsIDI0NSwgCi0gICAgMjAyLCAxODEsIDYsIDEsIDIxMywgMjUwLCAxODEsIDYsIDEsIDI0NSwgNTksIDE4MSwgNiwgMSwgMjE2LCAxOTQsIDE4MSwgCi0gICAgNiwgMSwgMjQ1LCA4MiwgMTgxLCA2LCAxLCAyMTAsIDkyLCAxODEsIDYsIDEsIDI0NSwgNzUsIDE4MSwgNiwgMSwgMjEwLCAKLSAgICA3MywgMTgxLCA2LCAxLCAyNDUsIDkyLCAxODEsIDYsIDEsIDI0NSwgMTc0LCAxODEsIDYsIDEsIDI0NSwgMTU5LCAxODEsIDYsIAotICAgIDEsIDI0NSwgMTUwLCAxODEsIDYsIDEsIDI0NSwgMTM4LCAxODEsIDYsIDEsIDIyNiwgMjE5LCAxODEsIDYsIDEsIDI0NSwgCi0gICAgMzgsIDE4MSwgNCwgMSwgMTk5LCA3MywgMTgxLCA0LCAxLCAxOTksIDc1LCAxODEsIDQsIDEsIDE5OSwgNjEsIDE4MSwgNCwgCi0gICAgMSwgMTk5LCAyNTQsIDIwOSwgMTgxLCA0LCAxLCAxOTksIDc2LCAxODEsIDQsIDEsIDE5OSwgMjI2LCAxODMsIDE4MSwgNCwgCi0gICAgMSwgMjE5LCAyNTEsIDczLCAxODEsIDQsIDEsIDIxOSwgMjUxLCA3NSwgMTgxLCA0LCAxLCAyMTksIDI1MSwgNjEsIDE4MSwgCi0gICAgNCwgMSwgMjE5LCAyNTEsIDI1NCwgMjA5LCAxODEsIDQsIDEsIDIxOSwgMjUxLCA3NiwgMTgxLCA0LCAxLCAyMTksIDI1MSwgCi0gICAgMjI2LCAxODMsIDE4MSwgNCwgMSwgMjUzLCAxNjcsIDE4MSwgNCwgMSwgMjI2LCAxMTYsIDE4MSwgNCwgMSwgMjExLCAxOTUsIAotICAgIDE4MSwgNCwgMSwgMjExLCA0NCwgMTgxLCA0LCAxLCAyNDIsIDYwLCAxODEsIDQsIDEsIDIyNSwgMjExLCAxODEsIDQsIDEsIAotICAgIDI1MiwgNjYsIDE4MSwgNCwgMSwgMjE3LCAxMSwgMTgxLCA0LCAxLCAyNDgsIDc3LCAxODEsIDQsIDEsIDI1MCwgMTI4LCAKLSAgICAxODEsIDQsIDEsIDIzNSwgMTI0LCAxODEsIDQsIDEsIDIzNCwgMTg5LCAxODEsIDQsIDEsIDI0MywgODMsIDE4MSwgNCwgMSwgCi0gICAgMjQ1LCAyMDIsIDE4MSwgNCwgMSwgMjEzLCAyNTAsIDE4MSwgNCwgMSwgMjQ1LCA1OSwgMTgxLCA0LCAxLCAyMTYsIDE5NCwgCi0gICAgMTgxLCA0LCAxLCAyNDUsIDgyLCAxODEsIDQsIDEsIDIxMCwgOTIsIDE4MSwgNCwgMSwgMjQ1LCA3NSwgMTgxLCA0LCAxLCAKLSAgICAyMTAsIDczLCAxODEsIDQsIDEsIDI0NSwgOTIsIDE4MSwgNCwgMSwgMjQ1LCAxNzQsIDE4MSwgNCwgMSwgMjQ1LCAxNTksIAotICAgIDE4MSwgNCwgMSwgMjQ1LCAxNTAsIDE4MSwgNCwgMSwgMjQ1LCAxMzgsIDE4MSwgNCwgMSwgMjI2LCAyMTksIDE4MSwgNCwgMSwgCi0gICAgMjQ1LCAzOCwgMjIwLCA2OSwgMSwgMjI1LCAyMDksIDIyMCwgNjksIDEsIDIxNiwgNSwgMjIwLCA2OSwgMSwgMjM0LCA5MSwgCi0gICAgMjIwLCA2OSwgMSwgMjQ0LCAxNDcsIDIyMCwgNjksIDEsIDIxNiwgMTcyLCAyMjAsIDY5LCAxLCAyMTksIDU4LCAyMjAsIDY5LCAKLSAgICAxLCAyMTgsIDE0LCAyMjAsIDY5LCAxLCAyNTAsIDYxLCAyMjAsIDY5LCAxLCAyMTEsIDQ2LCAyMjAsIDY5LCAxLCAyNDAsIAotICAgIDIwOSwgMjIwLCA2OSwgMSwgMjUyLCA1LCAyMjAsIDY5LCAxLCAyNDgsIDg5LCAyMjAsIDY5LCAxLCAyNDMsIDEyMSwgMjIwLCAKLSAgICA2OSwgMSwgMjEzLCAxMjMsIDIyMCwgNjksIDEsIDIxNiwgMTc2LCAyMjAsIDY5LCAxLCAyMTAsIDIxLCAyMjAsIDY5LCAxLCAKLSAgICAyMzEsIDg5LCAyMjAsIDY5LCAxLCAyMzUsIDQ5LCAyMjAsIDY5LCAxLCAyMTEsIDIyNSwgMjIwLCA2OSwgMSwgMjQyLCA0OCwgCi0gICAgMjIwLCA2OSwgMSwgMjMyLCAxNDIsIDIyMCwgNjksIDEsIDIzMCwgMTg5LCAyMjAsIDY5LCAxLCAyMzYsIDQwLCAyMjAsIDY5LCAKLSAgICAxLCAyNDUsIDIwMSwgMjIwLCA2OSwgMSwgMjUzLCAyMzEsIDIyMCwgNjksIDEsIDI1NCwgMjQ3LCAyMjAsIDY5LCAxLCAyMjYsIAotICAgIDE5NiwgMjIwLCA2OSwgMSwgMjExLCAyMTIsIDIyMCwgNjksIDEsIDIyNiwgMTMwLCAyMjAsIDY5LCAxLCAyNTQsIDIwOSwgCi0gICAgMjIwLCA2OSwgMSwgMjIyLCAyMDgsIDIyMCwgNjksIDEsIDIyNywgMTk0LCAyMjAsIDY5LCAxLCAyNDUsIDIxNywgMjIwLCAKLSAgICA2OSwgMSwgMjU0LCAyMTQsIDIyMCwgNjksIDEsIDI0MCwgMTExLCAyMjAsIDY5LCAxLCAyMTQsIDE2MywgMjIwLCA2OSwgMSwgCi0gICAgMjI2LCAyNTQsIDIyMCwgNjksIDEsIDIyNiwgMTc2LCAyMjAsIDY5LCAxLCAyMjYsIDIxOCwgMjIwLCA2OSwgMSwgMjUzLCAKLSAgICAxNzAsIDIyMCwgNjksIDEsIDI1NCwgMTksIDIyMCwgNjksIDEsIDIyNiwgMTU4LCAyMjAsIDY5LCAxLCAyNTQsIDE5MiwgCi0gICAgMjIwLCA2OSwgMSwgMjQ1LCA4NiwgMjIwLCA2OSwgMSwgMjUzLCAyNTMsIDIyMCwgNjksIDEsIDI0NSwgMjI3LCAyMjAsIDY5LCAKLSAgICAxLCAyNDAsIDExOCwgMjIwLCA2OSwgMSwgMjExLCAxMywgMjI2LCAxNDEsIDEsIDI1NCwgMTcwLCAyMjYsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTEsIDIyNiwgMTQxLCAxLCAyMTcsIDEwNSwgMjI2LCAxNDEsIDEsIDIzNSwgMTQxLCAyMjYsIDE0MSwgMSwgMjExLCAKLSAgICAxNjUsIDIyNiwgMTQxLCAxLCAyMzQsIDEzMiwgMjI2LCAxNDEsIDEsIDI0OCwgNzYsIDIyNiwgMTQxLCAxLCAyMDUsIDIyNiwgCi0gICAgMTQxLCAxLCAyMDYsIDIyNiwgMTQxLCAxLCAyMjAsIDI2LCAyMjYsIDE0MSwgMSwgMjQ4LCAyNSwgMjI2LCAxNDEsIDEsIAotICAgIDI1MCwgMjE1LCAyMjYsIDE0MSwgMSwgMjQzLCAxMzUsIDIyNiwgMTQxLCAxLCAyNDQsIDE5NiwgMjI2LCAxNDEsIDEsIDIyNCwgCi0gICAgODYsIDIyNiwgMTQxLCAxLCAyMzUsIDksIDIyNiwgMTQxLCAxLCAyMzMsIDEzMCwgMjI2LCAxNDEsIDEsIDIzMCwgMjAwLCAKLSAgICAyMjYsIDE0MSwgMSwgMjI3LCAxNzgsIDIyNiwgMTQxLCAxLCAyMTIsIDMwLCAyMjYsIDE0MSwgMSwgMTYyLCAyMjYsIDE0MSwgCi0gICAgMSwgMTkxLCAyMjYsIDE0MSwgMSwgNjEsIDIyNiwgMTQxLCAxLCA3NSwgMjI2LCAxNDEsIDEsIDczLCAyMjYsIDE0MSwgMSwgCi0gICAgNzYsIDIyNiwgMTQxLCAxLCA3MCwgMjI2LCAxNDEsIDEsIDI1NSwgNzMsIDIyNiwgMTQxLCAxLCAyNDUsIDIwOSwgMjI2LCAKLSAgICAxNDEsIDEsIDIyNiwgMTgzLCAyMjYsIDE0MSwgMjEsIDIxMCwgODYsIDIyNiwgMTQxLCAyMSwgMTEwLCAyMjYsIDE0MSwgMjEsIAotICAgIDEwNSwgMjI2LCAxNDEsIDIxLCAxNTgsIDIyNiwgMTQxLCAyMSwgMTYxLCAyMjYsIDE0MSwgMjEsIDE4OSwgMjI2LCAxNDEsIAotICAgIDIxLCAxOTQsIDIyNiwgMTQxLCAyMSwgMTk4LCAyMjYsIDE0MSwgMjEsIDE5NSwgMjI2LCAxNDEsIDIxLCAyMDAsIDI0OSwgCi0gICAgNjcsIDMsIDYxLCAyNDksIDY3LCAzLCA3NSwgMjQ5LCA2NywgMywgNzMsIDI0OSwgNjcsIDMsIDc2LCAyNDksIDY3LCAzLCAKLSAgICA3MCwgMjQ5LCA2NywgMywgMjM1LCAxNDEsIDI0OSwgNjcsIDMsIDIzNSwgNjgsIDI0OSwgNjcsIDMsIDE3NiwgMjQ5LCA2NywgCi0gICAgMywgMjM0LCAxODIsIDI0OSwgNjcsIDMsIDIzNCwgOTIsIDI0OSwgNjcsIDMsIDIzNCwgMjgsIDI0OSwgNjcsIDMsIDIzMywgCi0gICAgMjE3LCAyNDksIDY3LCAzLCAyMzMsIDEzNSwgMjQ5LCA2NywgMywgMjMzLCA1OCwgMjQ5LCA2NywgMywgMjMyLCAyNDEsIAotICAgIDI0OSwgNjcsIDMsIDIzMiwgMTU2LCAyNDksIDY3LCAzLCAyMzIsIDk4LCAyNDksIDY3LCAzLCAxODQsIDI0OSwgNjcsIDMsIAotICAgIDIzMSwgOTEsIDI0OSwgNjcsIDMsIDIzMCwgMjMwLCAyNDksIDY3LCAzLCAyMzAsIDE2MSwgMjQ5LCA2NywgMywgMjMwLCAKLSAgICAxMDIsIDI0OSwgNjcsIDMsIDE5NywgMjQ5LCA2NywgMywgMjI5LCAxMDcsIDI0OSwgNjcsIDMsIDIyOCwgMjMzLCAyNDksIAotICAgIDY3LCAzLCAyMjgsIDc0LCAyNDksIDY3LCAzLCAyMjcsIDIzNywgMjQ5LCA2NywgMywgMTkwLCAyNDksIDY3LCAzLCAyMjUsIAotICAgIDIyMSwgMjQ5LCA2NywgMywgMjI1LCAxMDgsIDI0OSwgNjcsIDMsIDIyNSwgMTYsIDI0OSwgNjcsIDMsIDIyNCwgMTUwLCAKLSAgICAyNDksIDY3LCAzLCAyMDUsIDI0OSwgNjcsIDMsIDIyMywgMTI4LCAyNDksIDY3LCAzLCAyMjMsIDM1LCAyNDksIDY3LCAzLCAKLSAgICAyMjIsIDIxMSwgMjQ5LCA2NywgMywgMjIyLCAxNDAsIDI0OSwgNjcsIDMsIDIwNiwgMjQ5LCA2NywgMywgMjIxLCAxODEsIAotICAgIDI0OSwgNjcsIDMsIDIxOSwgMTkxLCAyNDksIDY3LCAzLCAyMTksIDU4LCAyNDksIDY3LCAzLCAyMTgsIDgzLCAyNDksIDY3LCAKLSAgICAzLCAyMTcsIDEwNSwgMjQ5LCA2NywgMywgMjE3LCAyMiwgMjQ5LCA2NywgMywgMjE2LCAxMTcsIDI0OSwgNjcsIDMsIDExMSwgCi0gICAgMjQ5LCA2NywgMywgMjE1LCAxMTgsIDI0OSwgNjcsIDMsIDIxMiwgNjUsIDI0OSwgNjcsIDMsIDIxMiwgMjIsIDI0OSwgNjcsIAotICAgIDMsIDIxMSwgMjUwLCAyNDksIDY3LCAzLCAyMTEsIDIyNywgMjQ5LCA2NywgMywgMjExLCAxNjUsIDI0OSwgNjcsIDMsIDIxMSwgCi0gICAgMTYyLCAyNDksIDY3LCAzLCAyMTAsIDExNiwgMjQ5LCA2NywgMywgMjEwLCAyMywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNTQsIAotICAgIDE2OCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNTIsIDI1LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI0MiwgMjAxLCAyMzYsIDEsIAotICAgIDI1NCwgMjcsIDEsIDI0OCwgMTg4LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI0MSwgMjM4LCAyMzYsIDEsIDI1NCwgMjcsIDEsIAotICAgIDIxMiwgMzAsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjEwLCA5NywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDEsIDE5NSwgMjM2LCAKLSAgICAxLCAyNTQsIDI3LCAxLCAyMTYsIDIyNiwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMTAsIDIzMiwgMjM2LCAxLCAyNTQsIDI3LCAKLSAgICAxLCAyMzQsIDIyNSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMzMsIDkzLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIzMSwgNjUsIAotICAgIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI3LCAxOTQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjIxLCAyNDksIDIzNiwgMSwgMjU0LCAKLSAgICAyNywgMSwgMjUzLCAxNjIsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI1LCAyMjEsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjIyLCAKLSAgICAyNCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjQsIDM0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMywgNjcsIDIzNiwgMSwgCi0gICAgMjU0LCAyNywgMSwgMjIwLCAyMCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMTcsIDM2LCAyMzYsIDEsIDI1NCwgMjcsIDIyMSwgCi0gICAgMTczLCA1MCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTEwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMDUsIDIzNiwgMSwgMjU0LCAKLSAgICAyNywgNTQsIDE1OCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMjE2LCAyNDcsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNSwgNzMsIAotICAgIDIzNiwgMSwgMjU0LCAyNywgNTQsIDEyMywgMjQwLCAyMTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDEyMywgMjE2LCAxNDcsIAotICAgIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjI1LCAxMTksIDEsIDI1NCwgMTY1LCAyMjUsIDExOSwgCi0gICAgMSwgMjUyLCAyOCwgMjI1LCAxMTksIDEsIDI0MywgMTA5LCAyMjUsIDExOSwgMSwgMjQ4LCA1NiwgMjI1LCAxMTksIDEsIAotICAgIDI0MSwgMjM4LCAyMjUsIDExOSwgMSwgMjEyLCAzNywgMjI1LCAxMTksIDEsIDIxMCwgMTEwLCAyMjUsIDExOSwgMSwgMjQxLCAKLSAgICAxOTcsIDIyNSwgMTE5LCAxLCAyMTYsIDIzMCwgMjI1LCAxMTksIDEsIDIxMCwgMjMzLCAyMjUsIDExOSwgMSwgMjM0LCAyNTAsIAotICAgIDIyNSwgMTE5LCAxLCAyMzMsIDk5LCAyMjUsIDExOSwgMSwgMjMxLCA2NSwgMjI1LCAxMTksIDEsIDIyNywgMTk0LCAyMjUsIAotICAgIDExOSwgMSwgMjIwLCAxNDQsIDIyNSwgMTE5LCAxLCAyNTQsIDE5NiwgMjI1LCAxMTksIDEsIDIyNSwgMjIxLCAyMjUsIDExOSwgCi0gICAgMSwgMjIyLCAyNSwgMjI1LCAxMTksIDEsIDIyNCwgMzksIDIyNSwgMTE5LCAxLCAyMjIsIDE4OSwgMjI1LCAxMTksIDEsIAotICAgIDIyMCwgMjAsIDIyNSwgMTE5LCAxLCAyMTcsIDQxLCAyMjUsIDExOSwgNTQsIDExMCwgMjI1LCAxMTksIDU0LCAyMTYsIDI0NywgCi0gICAgMjI1LCAxMTksIDU0LCAyMTUsIDczLCAyMjUsIDExOSwgNTQsIDEyMywgMjQwLCAyMTAsIDIyNSwgMTE5LCA1NCwgMTA1LCAKLSAgICAyMjUsIDExOSwgNTQsIDE1OCwgMjI1LCAxMTksIDIxMSwgMjA5LCAyMjAsIDEzNywgMjMyLCA1OSwgMSwgNjEsIDIzMiwgNTksIAotICAgIDEsIDI1MywgMTU4LCAyMzIsIDU5LCAxLCAyNDMsIDIwMiwgMjMyLCA1OSwgMSwgMjQ5LCA2MCwgMjMyLCA1OSwgMSwgNzUsIAotICAgIDIzMiwgNTksIDEsIDIxNCwgMTA1LCAyMzIsIDU5LCAxLCA3MywgMjMyLCA1OSwgMSwgMjExLCAxMTcsIDIzMiwgNTksIDEsIAotICAgIDIzNSwgMjMsIDIzMiwgNTksIDEsIDE1NiwgMjMyLCA1OSwgMSwgMTkzLCAyMzIsIDU5LCAxLCAyMzAsIDI1LCAyMzIsIDU5LCAKLSAgICAxLCA3NiwgMjMyLCA1OSwgMSwgMTUzLCAyMzIsIDU5LCAxLCAyMTgsIDIyNiwgMjMyLCA1OSwgMSwgMjE3LCAxNTIsIDIzMiwgCi0gICAgNTksIDEsIDcwLCAyMzIsIDU5LCAxLCAyNDUsIDYsIDIzMiwgNTksIDEsIDIyNCwgOTYsIDIzMiwgNTksIDEsIDIyMiwgOTEsIAotICAgIDIzMiwgNTksIDEsIDIxNSwgMTU5LCAyMzIsIDU5LCAxLCAyNTQsIDEyMywgMjMyLCA1OSwgMSwgMjQ1LCAxNTAsIDIzMiwgCi0gICAgNTksIDEsIDIzMiwgNjIsIDIzMiwgNTksIDEsIDIyOCwgMTExLCAyMzIsIDU5LCAxLCAyNTEsIDY2LCAyMzIsIDU5LCAyMTUsIAotICAgIDIyMiwgNzgsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA2MSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDc1LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgNzMsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA3NiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5MSwgCi0gICAgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIxMiwgNjUsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyNTIsIDE5MSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDI1MiwgMTkwLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTkwLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgCi0gICAgMTg0LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTk3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI5LCAyMjgsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyMjksIDEwNywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyOSwgMTA2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgCi0gICAgMSwgMjA1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjIzLCAxODcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMzMsIDEzNSwgCi0gICAgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIzNCwgMTMyLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjQxLCAxODksIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyMDYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjIsIDMzLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgCi0gICAgMjIxLCAxODEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxNzYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjQsIDg4LCAyMzEsIAotICAgIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAxMDUsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTcsIDEwNCwgMjMxLCA0OCwgMjQxLCAKLSAgICAxNzQsIDEsIDIxNywgMjIsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTcsIDIxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgCi0gICAgMTExLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjQ4LCAyMjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxNiwgMjEzLCAxNzAsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxNiwgMjEzLCAxNjksIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDYxLCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCA3NSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgNzMsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDc2LCAyMzEsIDQ4LCAKLSAgICAyNDksIDk0LCAxLCAxOTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIxMiwgNjUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI1MiwgCi0gICAgMTkxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxOTAsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDE4NCwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgMTk3LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMjksIDEwNywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjA1LCAyMzEsIAotICAgIDQ4LCAyNDksIDk0LCAxLCAyMzMsIDEzNSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjM0LCAxMzIsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDI0MSwgMTg5LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMDYsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI1NCwgMjMsIAotICAgIDIwNiwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjIxLCAxODEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDE3NiwgMjMxLCA0OCwgCi0gICAgMjQ5LCA5NCwgMSwgMjI0LCA4OCwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjE3LCAxMDUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIAotICAgIDIxNywgMjIsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDExMSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjQ4LCAyMjEsIDIzMSwgCi0gICAgNDgsIDI0OSwgOTQsIDIzMiwgMTQ1LCAyMjIsIDIxNywgMjMxLCA0OCwgMjQ5LCA5NCwgMjMyLCAxNDUsIDIzNiwgNiwgMjM0LCAKLSAgICAxMjAsIDEsIDYxLCAyMzQsIDEyMCwgMjUsIDUsIDczLCAyMzQsIDEyMCwgMjUsIDUsIDcwLCAyMzQsIDEyMCwgMjUsIDUsIAotICAgIDE0OSwgMTUzLCAyMzQsIDEyMCwgMjUsIDUsIDc1LCAyMzQsIDEyMCwgMjUsIDUsIDc2LCAyMzQsIDEyMCwgMjUsIDIzMywgCi0gICAgMjMsIDc4LCAyMzQsIDEyMCwgNSwgNTIsIDIyMiwgMjM0LCA1MSwgMjM0LCAxMjAsIDUsIDI1NCwgNzUsIDIzNCwgMTIwLCA1LCAKLSAgICAyMTMsIDE0NywgMjM0LCAxMjAsIDEsIDE3NiwgMjM0LCAxMjAsIDEsIDIzNCwgMTMyLCAyMzQsIDEyMCwgMSwgMjQzLCAxMzUsIAotICAgIDIzNCwgMTIwLCAxLCAyNDIsIDI0OSwgMjM0LCAxMjAsIDEsIDI1MSwgMzMsIDIzNCwgMTIwLCAxLCAyNTAsIDE1NywgMjM0LCAKLSAgICAxMjAsIDEsIDIzNSwgMTQxLCAyMzQsIDEyMCwgMSwgMjI3LCAxNjUsIDIzNCwgMTIwLCAxLCAyMTUsIDE1NiwgMjM0LCAxMjAsIAotICAgIDEsIDIxNSwgMTQ0LCAyMzQsIDEyMCwgMSwgMjQ4LCAxMzUsIDIzNCwgMTIwLCAxLCAyNDgsIDExOSwgMjM0LCAxMjAsIDEsIAotICAgIDIyOCwgMTEwLCAyMzQsIDEyMCwgMSwgMjE3LCAxMDUsIDIzNCwgMTIwLCAxLCAyMTYsIDIwOCwgMjM0LCAxMjAsIDEsIDI0OCwgCi0gICAgMjIxLCAyMzQsIDEyMCwgMSwgMjQ4LCAyNSwgMjM0LCAxMjAsIDEsIDE5NywgMjM0LCAxMjAsIDEsIDE5MCwgMjM0LCAxMjAsIAotICAgIDEsIDIyNSwgMTQ3LCAyMzQsIDEyMCwgMSwgMjUyLCAxOTEsIDIzNCwgMTIwLCAxLCAyNTIsIDE4LCAyMzQsIDEyMCwgMSwgCi0gICAgMTg0LCAyMzQsIDEyMCwgMSwgMTkxLCAyMzQsIDEyMCwgMSwgMjA1LCAyMzQsIDEyMCwgMSwgMjMzLCAxMzUsIDIzNCwgMTIwLCAKLSAgICAxLCAyMTQsIDI3LCAyMzQsIDEyMCwgMSwgMjIwLCAxMDIsIDIzNCwgMTIwLCAxLCAyMTgsIDIyMywgMjM0LCAxMjAsIDEsIAotICAgIDIwNiwgMjM0LCAxMjAsIDEsIDIxMCwgMTE2LCAyMzQsIDEyMCwgMSwgMTYyLCAyMzQsIDEyMCwgMSwgMjM0LCA0NiwgMjM0LCAKLSAgICAxMjAsIDEsIDIxNSwgMTI0LCAyMzQsIDEyMCwgNSwgMjUyLCAxNDEsIDQ4LCAyMzQsIDEyMCwgNSwgMjUwLCAyMjEsIDIzNCwgCi0gICAgMTIwLCA1LCA1OSwgNTEsIDIzNCwgMTIwLCAyMTMsIDE1MiwgMjM0LCAxMjAsIDIxLCAxMTAsIDIzNCwgMTIwLCAyMSwgMTA1LCAKLSAgICAyMzQsIDEyMCwgMjEsIDE1OCwgMjM0LCAxMjAsIDIxLCAxNjEsIDIzNCwgMTIwLCA1NCwgMjE2LCAyNDcsIDIzNCwgMTIwLCAKLSAgICA1NCwgMjE1LCA3MywgMjM0LCAxMjAsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzQsIDEyMCwgNTQsIDEyMywgMjE2LCAxNDcsIAotICAgIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjQ3LCAxMjAsIDIzNCwgMTIwLCAyMjQsIDE0MSwgNCwgMjUwLCAzNSwgMjM0LCAxMjAsIAotICAgIDIyNCwgMTQxLCAyNTAsIDM1LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0OSwgMTM3LCAxMzAsIDIzNCwgMTIwLCAyMjQsIDE0MSwgCi0gICAgMjMxLCAxODAsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjMyLCAxMTUsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjQ4LCAxNzgsIAotICAgIDIzNCwgMTIwLCAyMjQsIDE0MSwgNTIsIDI0OCwgMTc4LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDIzMiwgMjA3LCA1NSwgMjE5LCAKLSAgICAyOCwgMjU0LCAzOCwgMSwgMjQxLCAyMzgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzMsIDkzLCA1NSwgMjE5LCAyOCwgCi0gICAgMjU0LCAzOCwgMSwgMjQxLCAxOTUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzEsIDY1LCA1NSwgMjE5LCAyOCwgMjU0LCAKLSAgICAzOCwgMSwgMjI0LCAzNCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxMiwgMzAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAKLSAgICAxLCAyMjAsIDIwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIzLCA2NywgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIAotICAgIDI1MiwgMjUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTcsIDM2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIxLCAKLSAgICAyMjYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzQsIDIyNSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyNywgCi0gICAgMTk0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjM0LCAxMTYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjIsIDI0LCAKLSAgICA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIxLCAyNDksIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDQsIDE1NCwgNTUsIAotICAgIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI1NCwgMTcwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjUzLCAxNjEsIDU1LCAKLSAgICAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDgsIDIyLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQyLCAyMDEsIDU1LCAyMTksIAotICAgIDI4LCAyNTQsIDM4LCAxLCAyNDgsIDE4OCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0MiwgMjM4LCA1NSwgMjE5LCAyOCwgCi0gICAgMjU0LCAzOCwgMSwgMjE2LCAyMjYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTAsIDk2LCA1NSwgMjE5LCAyOCwgMjU0LCAKLSAgICAzOCwgMSwgMjQ4LCAxOSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxMCwgMjMyLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgCi0gICAgMSwgMjE2LCAxOTcsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTYsIDE3OCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDU0LCAKLSAgICAxMTAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCA1NCwgMjQ0LCAxMTQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxMzIsIDIzNSwgCi0gICAgMjM4LCAyNTMsIDE3MiwgMSwgNjEsIDI1MywgMTcyLCAxLCAyNTUsIDczLCAyNTMsIDE3MiwgMSwgMjU0LCA3MywgMjUzLCAKLSAgICAxNzIsIDEsIDI1NSwgMzIsIDI1MywgMTcyLCAxLCAyNTQsIDEyMywgMjUzLCAxNzIsIDEsIDI1NSwgMzMsIDI1MywgMTcyLCAKLSAgICAxLCAyNTQsIDI0MywgMjUzLCAxNzIsIDEsIDI1NCwgMjM5LCAyNTMsIDE3MiwgMSwgNzUsIDI1MywgMTcyLCAxLCAyNDUsIAotICAgIDIwOSwgMjUzLCAxNzIsIDEsIDc2LCAyNTMsIDE3MiwgMSwgMjI2LCAxODMsIDI1MywgMTcyLCAxLCA3MywgMjUzLCAxNzIsIAotICAgIDEsIDIzNiwgMzMsIDI1MywgMTcyLCAxLCA3MCwgMjUzLCAxNzIsIDEsIDIxNCwgMTE4LCAyNTMsIDE3MiwgMSwgMjM0LCAKLSAgICAxODIsIDI1MywgMTcyLCAxLCAyMTEsIDE2MiwgMjUzLCAxNzIsIDEsIDIxMSwgMTI4LCAyNTMsIDE3MiwgMSwgMjExLCAxMzcsIAotICAgIDI1MywgMTcyLCAxLCAyNDMsIDYyLCAyNTMsIDE3MiwgMSwgMjQzLCAyNCwgMjUzLCAxNzIsIDEsIDI0MiwgMjM2LCAyNTMsIAotICAgIDE3MiwgMSwgMjUwLCAxOTAsIDI1MywgMTcyLCAxLCAyMzUsIDEyNiwgMjUzLCAxNzIsIDEsIDIxNywgMjIsIDI1MywgMTcyLCAKLSAgICAxLCAyMTYsIDE5NSwgMjUzLCAxNzIsIDEsIDI0OCwgOTAsIDI1MywgMTcyLCAxLCAyNDgsIDE3LCAyNTMsIDE3MiwgMSwgCi0gICAgMjE1LCAxNTEsIDI1MywgMTcyLCAxLCAyMjUsIDIyMSwgMjUzLCAxNzIsIDEsIDI0NCwgMTU0LCAyNTMsIDE3MiwgMSwgMjUyLCAKLSAgICA3NSwgMjUzLCAxNzIsIDEsIDI1MiwgMTQsIDI1MywgMTcyLCAxLCAyMjksIDY0LCAyNTMsIDE3MiwgMSwgMjI4LCAyMzksIAotICAgIDI1MywgMTcyLCAxLCAyMjgsIDI0MCwgMjUzLCAxNzIsIDEsIDIyOSwgMTA3LCAyNTMsIDE3MiwgMSwgMjI3LCAxNTYsIDI1MywgCi0gICAgMTcyLCAxLCAyMjgsIDEwNSwgMjUzLCAxNzIsIDEsIDIzMSwgOTEsIDI1MywgMTcyLCAxLCAyNDEsIDExNiwgMjUzLCAxNzIsIAotICAgIDEsIDIxMCwgMTY2LCAyNTMsIDE3MiwgMSwgMjExLCA0NywgMjUzLCAxNzIsIDEsIDIxMywgMjU1LCAyNTMsIDE3MiwgMSwgCi0gICAgMjIzLCAxMjgsIDI1MywgMTcyLCAxLCAyMzMsIDU4LCAyNTMsIDE3MiwgMSwgMjIxLCAxODEsIDI1MywgMTcyLCAxLCAyMTAsIAotICAgIDk0LCAyNTMsIDE3MiwgMSwgMjIwLCA2MywgMjUzLCAxNzIsIDEsIDIxMCwgNzQsIDI1MywgMTcyLCAxLCAyMTksIDE5OCwgCi0gICAgMjUzLCAxNzIsIDEsIDIxOCwgMTkzLCAyNTMsIDE3MiwgMSwgMjQxLCAyMzgsIDI1MywgMTcyLCAyNTUsIDIxLCA3OCwgMjE2LCAKLSAgICA3OSwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDQsIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgCi0gICAgMTQwLCAyMzMsIDg1LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgMjMzLCA4NSwgMTIzLCA1OSwgMTE3LCAKLSAgICAxMTMsIDE3MCwgMjI0LCAxNDAsIDIzMywgODUsIDExMywgMjIyLCAyMzIsIDExNywgMTIzLCAyMjIsIDIzNCwgMjI0LCAxNDAsIAotICAgIDIzMywgODUsIDEyMywgMjIyLCAyMzQsIDExNywgMTEzLCAyMjIsIDIzMiwgMjI0LCAxNDAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgCi0gICAgMSwgMjU0LCAxNjgsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjUyLCAyNSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNDIsIAotICAgIDIwMSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNDgsIDE4OCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNDEsIDIzOCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTIsIDMwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxMCwgOTcsIDIzNSwgMjE4LCAKLSAgICAyMjUsIDI1NCwgMSwgMjQxLCAxOTUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjE2LCAyMjYsIDIzNSwgMjE4LCAyMjUsIAotICAgIDI1NCwgMSwgMjEwLCAyMzIsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjM0LCAyMjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgCi0gICAgMjMzLCA5MywgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMzEsIDY1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyNywgMTk0LCAKLSAgICAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyMSwgMjQ5LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI1MywgMTYyLCAyMzUsIAotICAgIDIxOCwgMjI1LCAyNTQsIDEsIDIyNSwgMjIxLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyMiwgMjQsIDIzNSwgMjE4LCAKLSAgICAyMjUsIDI1NCwgMSwgMjI0LCAzNCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjMsIDY3LCAyMzUsIDIxOCwgMjI1LCAyNTQsIAotICAgIDEsIDIyMCwgMjAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjE3LCAzNiwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTEwLCAKLSAgICAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxMDUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDE1OCwgMjM1LCAyMTgsIDIyNSwgCi0gICAgMjU0LCA1NCwgMTYxLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAyMTYsIDI0NywgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgCi0gICAgMjE1LCA3MywgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgCi0gICAgMTIzLCAyMTYsIDE0NywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI1NCwgMTY4LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjUyLCAKLSAgICAyNSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0MiwgMjAxLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjQ4LCAxODgsIDIzNSwgCi0gICAgMjE4LCAyMjYsIDcyLCAxLCAyNDEsIDIzOCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxMiwgMjksIDIzNSwgMjE4LCAyMjYsIAotICAgIDcyLCAxLCAyMTAsIDk3LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjQxLCAxOTUsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAKLSAgICAyMTYsIDIyNiwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxMCwgMjMyLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjM0LCAyMjUsIAotICAgIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMzMsIDkzLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjMxLCA2NCwgMjM1LCAyMTgsIAotICAgIDIyNiwgNzIsIDEsIDIyNywgMTk0LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIxLCAyNDksIDIzNSwgMjE4LCAyMjYsIDcyLCAKLSAgICAxLCAyMjUsIDIyMSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMiwgMjQsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjAsIAotICAgIDIwLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjE3LCAzNiwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxMTAsIDIzNSwgMjE4LCAKLSAgICAyMjYsIDcyLCA1NCwgMTA1LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDE1OCwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxNjEsIAotICAgIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMjE2LCAyNDcsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMjE1LCA3MywgMjM1LCAKLSAgICAyMTgsIDIyNiwgNzIsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDEyMywgMjE2LCAxNDcsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA2MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgNjEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIAotICAgIDI1NCwgMjQzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNzMsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDczLCA1NSwgMjAxLCAxLCAKLSAgICAyMTEsIDM3LCA3NSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDc2LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAyMzQsIAotICAgIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMjM0LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU1LCAyNSwgNTUsIDIwMSwgMSwgCi0gICAgMjExLCAzNywgMjU1LCAyNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjQyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDI0MiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjE2LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIxNiwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjM3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIzNywgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI1NCwgMjU1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDI1NSwgNTUsIDIwMSwgMSwgMjI2LCAKLSAgICAxNDksIDI1NCwgMjQxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAKLSAgICAxMiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMTY3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDE2NywgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjI0LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIyNCwgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI1NCwgMjM1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIzNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDIyNiwgMjMzLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDIzMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMTc4LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDE3OCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjM0LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQ1LCAxNjEsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDE1OSwgNTUsIDIwMSwgMSwgMjI2LCAKLSAgICAxNDksIDI1NCwgMTIzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMzIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgCi0gICAgMjMyLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMzEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgMTMxLCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxNDcsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgMTQ3LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjQ1LCAxMTgsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgMTE4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDExNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTM4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIzMSwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTA4LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNzUsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNDAsIDExMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMjE1LCA1NSwgMjAxLCAxLCAyMTEsIAotICAgIDM3LCAyNDUsIDIxNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgNDUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgCi0gICAgNDUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMzUsIDE4MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjM1LCAxODEsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE1OSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAxNTksIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNTQsIDQxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDQxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgCi0gICAgMjU0LCAyMzAsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDIzNywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjI4LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAyMzEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1MywgMjMxLCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQ1LCA3NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCA3NSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDI1MywgMjA2LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDIwNiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjI1LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIyNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTQwLCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjUyLCAxMjUsIDIyMiwgMTI3LCAyMSwgMTEwLCAyMjIsIDEyNywgMjEsIDEwNSwgMjIyLCAxMjcsIAotICAgIDIxLCAxNTgsIDIyMiwgMTI3LCAyMSwgMTYxLCAyMjIsIDEyNywgMjEsIDE4OSwgMjIyLCAxMjcsIDIxLCAxOTQsIDIyMiwgCi0gICAgMTI3LCAyMSwgMTk4LCAyMjIsIDEyNywgMjEsIDE5NSwgMjIyLCAxMjcsIDIxLCAyMDAsIDIyMiwgMTI3LCA1NCwgMjE2LCAKLSAgICAyNDcsIDIyMiwgMTI3LCA1NCwgMjE1LCA3MywgMjIyLCAxMjcsIDU0LCAyMTYsIDE2MiwgMjIyLCAxMjcsIDU0LCAyNDQsIAotICAgIDE1LCAyMjIsIDEyNywgNTQsIDI0NCwgMTE0LCAyMjIsIDEyNywgNTQsIDIxOSwgMTExLCAyMjIsIDEyNywgNTQsIDIyMCwgCi0gICAgMTE2LCAyMjIsIDEyNywgNTQsIDI0NSwgMTg0LCAyMjIsIDEyNywgNTQsIDIyOCwgMTk1LCAyMjIsIDEyNywgNTQsIDEyMywgCi0gICAgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMTEzLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAxMzQsIDI0MCwgMjEwLCAyMjIsIAotICAgIDEyNywgNTQsIDI0NCwgMTEsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDI0NCwgODEsIDI0MCwgMjEwLCAyMjIsIDEyNywgCi0gICAgNTQsIDIxOSwgMTI1LCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyMjAsIDEyMiwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgCi0gICAgMjQ1LCAxOTMsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDIyOCwgMjAwLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDI0NCwgMiwgCi0gICAgMTIzLCAyNDIsIDI3LCAyMjIsIDEyNywgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIyMiwgMTI3LCAyNDQsIDIsIDEyMywgMjE2LCAKLSAgICAxNjgsIDIyMiwgMTI3LCAyNDQsIDIsIDExMywgMjE2LCAxNjYsIDExOCwgNSwgMjUwLCAyNTUsIDExOCwgNSwgMjU0LCA3NSwgCi0gICAgMTE4LCA1LCAyMTMsIDE0NywgMTE4LCA1LCAyMzUsIDEwMiwgMTE4LCA1LCAyMTQsIDE2MSwgMTE4LCAxLCA2MSwgMTE4LCAxLCAKLSAgICAyNTUsIDczLCAxMTgsIDEsIDczLCAxMTgsIDEsIDIzNiwgMzMsIDExOCwgMSwgNzAsIDExOCwgMSwgMjE0LCAxMTgsIDExOCwgCi0gICAgMSwgMTQ5LCAxNTMsIDExOCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTE4LCAxLCAxNDksIDE1NiwgMTE4LCAxLCAxNDksIDIzMiwgCi0gICAgMTg1LCAxMTgsIDEsIDc1LCAxMTgsIDEsIDI1NCwgMjAxLCAxMTgsIDEsIDc2LCAxMTgsIDEsIDI1MywgMTkyLCAxMTgsIDEsIAotICAgIDE3NiwgMTE4LCAxLCAyMzQsIDEzMiwgMTE4LCAxLCAyNDMsIDEzNSwgMTE4LCAxLCAyNDIsIDI0OSwgMTE4LCAxLCAyMjksIAotICAgIDc3LCAxMTgsIDEsIDI1MSwgMzMsIDExOCwgMSwgMjUwLCAxNTcsIDExOCwgMSwgMjM1LCAxNDEsIDExOCwgMSwgMjM1LCAKLSAgICAxMTQsIDExOCwgMSwgMjI3LCAxNjUsIDExOCwgMSwgMjE1LCAxNTYsIDExOCwgMSwgMjE1LCAxNDQsIDExOCwgMSwgMjQ4LCAKLSAgICAxMzUsIDExOCwgMSwgMjQ4LCAxMTksIDExOCwgMSwgMjI4LCAxMTAsIDExOCwgMSwgMjE3LCAxMDUsIDExOCwgMSwgMjE2LCAKLSAgICAyMDgsIDExOCwgMSwgMjQ4LCAyMjEsIDExOCwgMSwgMjQ4LCAyNSwgMTE4LCAxLCAxOTcsIDExOCwgMSwgMTkwLCAxMTgsIDEsIAotICAgIDIyNSwgMTQ3LCAxMTgsIDEsIDI1MiwgMTkxLCAxMTgsIDEsIDI1MiwgMTgsIDExOCwgMSwgMTg0LCAxMTgsIDEsIDE5MSwgCi0gICAgMTE4LCAxLCAyMDUsIDExOCwgMSwgMjMzLCAxMzUsIDExOCwgMSwgMjE0LCAyNywgMTE4LCAxLCAyMjAsIDEwMiwgMTE4LCAxLCAKLSAgICAyMTgsIDIyMywgMTE4LCAxLCAyMDYsIDExOCwgMSwgMTYyLCAxMTgsIDEsIDIzMiwgMTg0LCAxMTgsIDEsIDU1LCAzNiwgCi0gICAgMjMyLCAxNzUsIDExOCwgMSwgNTUsIDM2LCAyMjIsIDE3OSwgMTE4LCAxLCA1NSwgMzYsIDIyOCwgOTIsIDExOCwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDExOCwgMjUsIDUsIDI1MiwgMTUsIDI1NSwgNzMsIDExOCwgMjUsIDUsIDczLCAxMTgsIDI1LCA1LCAyMzYsIAotICAgIDMzLCAxMTgsIDI1LCA1LCA3MCwgMTE4LCAyNSwgNSwgMjE0LCAxMTgsIDExOCwgMjUsIDUsIDE0OSwgMTUzLCAxMTgsIDI1LCAKLSAgICA1LCAxNDksIDIyMiwgMTgwLCAxMTgsIDI1LCA1LCAxNDksIDE1NiwgMTE4LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTE4LCAKLSAgICAyNSwgNSwgNzUsIDExOCwgMjUsIDUsIDI1NCwgMjAxLCAxMTgsIDI1LCA1LCA3NiwgMTE4LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDExOCwgMjEzLCAxNTIsIDExOCwgMjQ4LCAxNzgsIDExOCwgNTIsIDI0OCwgMTc4LCAxMTgsIDIyNCwgMTQxLCAyNDcsIDEyMCwgCi0gICAgMTE4LCAyMjQsIDE0MSwgNTIsIDI0NywgMTIwLCAxMTgsIDIyNCwgMTQxLCAyMzIsIDIxMywgMTE4LCAyMjQsIDE0MSwgMjQ5LCAKLSAgICAxMzcsIDEzMCwgMTE4LCAyMjQsIDE0MSwgMjMyLCAxMTUsIDExOCwgNTQsIDExMCwgMTE4LCA1NCwgMTA1LCAxMTgsIDU0LCAKLSAgICAxNTgsIDExOCwgNTQsIDE2MSwgMTE4LCA1NCwgMTg5LCAxMTgsIDU0LCAxOTQsIDExOCwgNTQsIDE5OCwgMTE4LCA1NCwgCi0gICAgMTk1LCAxMTgsIDU0LCAyMDAsIDExOCwgNTQsIDIxNiwgMjQ3LCAxMTgsIDU0LCAyMTUsIDczLCAxMTgsIDU0LCAyMTYsIAotICAgIDE2MiwgMTE4LCA1NCwgMjQ0LCAxNSwgMTE4LCA1NCwgMjQ0LCAxMTQsIDExOCwgNTQsIDIxOSwgMTExLCAxMTgsIDU0LCAKLSAgICAyMjAsIDExNiwgMTE4LCA1NCwgMjQ1LCAxODQsIDExOCwgNTQsIDIyOCwgMTk1LCAxMTgsIDU0LCAxMjMsIDI0MCwgMjEwLCAKLSAgICAxMTgsIDU0LCAxMjMsIDIxNiwgMTQ3LCAxMTgsIDIxLCAyMTAsIDg2LCAxMTgsIDIxLCAxMTAsIDExOCwgMjEsIDEwNSwgCi0gICAgMTE4LCAyMSwgMTU4LCAxMTgsIDIxLCAxNjEsIDExOCwgMjEsIDE4OSwgMTE4LCAyMSwgMTk0LCAxMTgsIDIxLCAxOTgsIAotICAgIDExOCwgMjEsIDE5NSwgMTE4LCAyMSwgMjAwLCAyMzQsIDI0NCwgNSwgMjUwLCAyNTUsIDIzNCwgMjQ0LCA1LCAyNTQsIDc1LCAKLSAgICAyMzQsIDI0NCwgNSwgMjEzLCAxNDcsIDIzNCwgMjQ0LCAxLCA2MSwgMjM0LCAyNDQsIDEsIDI1NSwgNzMsIDIzNCwgMjQ0LCAKLSAgICAxLCA3MywgMjM0LCAyNDQsIDEsIDIzNiwgMzMsIDIzNCwgMjQ0LCAxLCA3MCwgMjM0LCAyNDQsIDEsIDIxNCwgMTE4LCAyMzQsIAotICAgIDI0NCwgMSwgNzUsIDIzNCwgMjQ0LCAxLCAyNTQsIDIwMSwgMjM0LCAyNDQsIDEsIDc2LCAyMzQsIDI0NCwgMSwgMjUzLCAKLSAgICAxOTIsIDIzNCwgMjQ0LCAxLCAxNzYsIDIzNCwgMjQ0LCAxLCAyMzQsIDEzMiwgMjM0LCAyNDQsIDEsIDI0MywgMTM1LCAyMzQsIAotICAgIDI0NCwgMSwgMjQyLCAyNDksIDIzNCwgMjQ0LCAxLCAyMjksIDc3LCAyMzQsIDI0NCwgMSwgMjUxLCAzMywgMjM0LCAyNDQsIAotICAgIDEsIDI1MCwgMTU3LCAyMzQsIDI0NCwgMSwgMjM1LCAxNDEsIDIzNCwgMjQ0LCAxLCAyMzUsIDExNCwgMjM0LCAyNDQsIDEsIAotICAgIDIyNywgMTY1LCAyMzQsIDI0NCwgMSwgMjE1LCAxNTYsIDIzNCwgMjQ0LCAxLCAyMTUsIDE0NCwgMjM0LCAyNDQsIDEsIDI0OCwgCi0gICAgMTM1LCAyMzQsIDI0NCwgMSwgMjQ4LCAxMjQsIDIzNCwgMjQ0LCAxLCAyNDgsIDExOSwgMjM0LCAyNDQsIDEsIDIyMywgMzksIAotICAgIDIzNCwgMjQ0LCAxLCAyMjgsIDExMCwgMjM0LCAyNDQsIDEsIDIxNywgMTA1LCAyMzQsIDI0NCwgMSwgMjE2LCAyMDgsIDIzNCwgCi0gICAgMjQ0LCAxLCAyNDgsIDIyMSwgMjM0LCAyNDQsIDEsIDI0OCwgMjUsIDIzNCwgMjQ0LCAxLCAxOTcsIDIzNCwgMjQ0LCAxLCAKLSAgICAxOTAsIDIzNCwgMjQ0LCAxLCAyMjUsIDE0NywgMjM0LCAyNDQsIDEsIDI1MiwgMTkxLCAyMzQsIDI0NCwgMSwgMjUyLCAxOCwgCi0gICAgMjM0LCAyNDQsIDEsIDE4NCwgMjM0LCAyNDQsIDEsIDE5MSwgMjM0LCAyNDQsIDEsIDIwNSwgMjM0LCAyNDQsIDEsIDIzMywgCi0gICAgMTM1LCAyMzQsIDI0NCwgMSwgMjE0LCAyNywgMjM0LCAyNDQsIDEsIDIyMCwgMTAyLCAyMzQsIDI0NCwgMSwgMjE4LCAyMjMsIAotICAgIDIzNCwgMjQ0LCAxLCAyMDYsIDIzNCwgMjQ0LCAxLCAxNjIsIDIzNCwgMjQ0LCAyNSwgNSwgMjU1LCA3MywgMjM0LCAyNDQsIAotICAgIDI1LCA1LCA3MywgMjM0LCAyNDQsIDI1LCA1LCAyMzYsIDMzLCAyMzQsIDI0NCwgMjUsIDUsIDcwLCAyMzQsIDI0NCwgMjUsIAotICAgIDUsIDIxNCwgMTE4LCAyMzQsIDI0NCwgMjUsIDUsIDc1LCAyMzQsIDI0NCwgMjUsIDUsIDI1NCwgMjAxLCAyMzQsIDI0NCwgCi0gICAgMjUsIDUsIDc2LCAyMzQsIDI0NCwgMjUsIDUsIDI1MywgMTkyLCAyMzQsIDI0NCwgNSwgMjEzLCAxNTIsIDIzNCwgMjQ0LCA1LCAKLSAgICAyMjcsIDIwNSwgMjM0LCAyNDQsIDI1NSwgMjEsIDUwLCAyMzQsIDI0NCwgMjQ1LCAxMjEsIDUwLCAyMzQsIDI0NCwgNTQsIAotICAgIDUwLCAyMzQsIDI0NCwgMjIxLCAxNzMsIDc4LCAyMzQsIDI0NCwgNTIsIDIyMSwgMTczLCA3OCwgMjM0LCAyNDQsIDI0OCwgCi0gICAgMTc4LCAyMzQsIDI0NCwgNTIsIDI0OCwgMTc4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjIsIDE4LCAyMTksIDM2LCAyMTksIAotICAgIDQ0LCAxLCAyMTcsIDgwLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNTIsIDE2OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjUxLCAKLSAgICAyMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQ4LCAyMDMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0MywgMTIwLCAyMTksIAotICAgIDM2LCAyMTksIDQ0LCAxLCAyMzEsIDIxMCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI5LCA3NCwgMjE5LCAzNiwgMjE5LCA0NCwgCi0gICAgMSwgMjMzLCAxMTIsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyOSwgMjEzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMTQsIDI0LCAKLSAgICAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjYsIDczLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMTEsIDg0LCAyMTksIDM2LCAyMTksIAotICAgIDQ0LCAxLCAyMjMsIDE2OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQyLCAzNywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjM0LCAKLSAgICAyNDgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzNSwgMTM2LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjcsIDE2MiwgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMSwgMjU0LCAyMDksIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0NSwgMjA3LCAyMTksIDM2LCAyMTksIAotICAgIDQ0LCAxLCAyMzYsIDM0LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMTQsIDIwOCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI2LCAKLSAgICAyMjIsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0NSwgMTk3LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzEsIDIyMywgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMjEsIDIxMCwgODYsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxMTAsIDIxOSwgMzYsIDIxOSwgNDQsIAotICAgIDIxLCAxMDUsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxNTgsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxNjEsIDIxOSwgMzYsIAotICAgIDIxOSwgNDQsIDIxLCAxODksIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxOTQsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxOTgsIAotICAgIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxOTUsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAyMDAsIDI1MCwgMTUxLCA1LCAyNTAsIAotICAgIDI1NSwgMjUwLCAxNTEsIDUsIDI1NCwgNzUsIDI1MCwgMTUxLCA1LCAyMTMsIDE0NywgMjUwLCAxNTEsIDEsIDI1NSwgNzMsIAotICAgIDI1MCwgMTUxLCAxLCA3MywgMjUwLCAxNTEsIDEsIDcwLCAyNTAsIDE1MSwgMSwgNzUsIDI1MCwgMTUxLCAxLCAyMzUsIDEwLCAKLSAgICAyNTAsIDE1MSwgMSwgMjM0LCAxMzEsIDI1MCwgMTUxLCAxLCAyNDMsIDEzMiwgMjUwLCAxNTEsIDEsIDI0MiwgMjQ4LCAyNTAsIAotICAgIDE1MSwgMSwgMjI5LCA3NiwgMjUwLCAxNTEsIDEsIDI1MSwgMzIsIDI1MCwgMTUxLCAxLCAyNTAsIDE1NiwgMjUwLCAxNTEsIAotICAgIDEsIDIzNSwgMTQwLCAyNTAsIDE1MSwgMSwgMjM1LCAxMTMsIDI1MCwgMTUxLCAxLCAyMjcsIDE2NCwgMjUwLCAxNTEsIDEsIAotICAgIDIxNSwgMTU1LCAyNTAsIDE1MSwgMSwgMjE1LCAxNDMsIDI1MCwgMTUxLCAxLCAyNDgsIDEzNCwgMjUwLCAxNTEsIDEsIDI0OCwgCi0gICAgMTE4LCAyNTAsIDE1MSwgMSwgMjI4LCAxMDksIDI1MCwgMTUxLCAxLCAyMTcsIDEwMSwgMjUwLCAxNTEsIDEsIDIxNiwgMjA3LCAKLSAgICAyNTAsIDE1MSwgMSwgMjQ4LCAyMjAsIDI1MCwgMTUxLCAxLCAyNDgsIDI0LCAyNTAsIDE1MSwgMSwgMjI5LCAyMjUsIDI1MCwgCi0gICAgMTUxLCAxLCAyMjYsIDg5LCAyNTAsIDE1MSwgMSwgMjI1LCAxNDYsIDI1MCwgMTUxLCAxLCAyNTIsIDE4OSwgMjUwLCAxNTEsIAotICAgIDEsIDI1MiwgMTcsIDI1MCwgMTUxLCAxLCAyMzEsIDIzNywgMjUwLCAxNTEsIDEsIDIxMCwgMTY3LCAyNTAsIDE1MSwgMSwgCi0gICAgMjExLCAxMDMsIDI1MCwgMTUxLCAxLCAyMjMsIDE4NCwgMjUwLCAxNTEsIDEsIDIzMywgMTM0LCAyNTAsIDE1MSwgMSwgMjEyLCAKLSAgICA2NCwgMjUwLCAxNTEsIDEsIDIyMiwgMzEsIDI1MCwgMTUxLCAxLCAyNDIsIDQ2LCAyNTAsIDE1MSwgMjUsIDUsIDYxLCAyNTAsIAotICAgIDE1MSwgMjUsIDUsIDczLCAyNTAsIDE1MSwgMjUsIDUsIDIzNiwgMzMsIDI1MCwgMTUxLCAyNSwgNSwgNzAsIDI1MCwgMTUxLCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDI1MCwgMTUxLCAyNSwgNSwgNzUsIDI1MCwgMTUxLCAyNSwgNSwgMjU0LCAyMDEsIDI1MCwgCi0gICAgMTUxLCAyNSwgNSwgNzYsIDI1MCwgMTUxLCAyNSwgNSwgMjUzLCAxOTIsIDI1MCwgMTUxLCAyNSwgNSwgMjI2LCAyMTksIAotICAgIDI1MCwgMTUxLCAxNDQsIDc4LCAyNTAsIDE1MSwgMjUzLCAxOTMsIDc4LCAyNTAsIDE1MSwgMjEzLCAxNTIsIDI1MCwgMTUxLCAKLSAgICAyMzEsIDIzNSwgMjUwLCAxNTEsIDIxLCAyMTAsIDg2LCAyNTAsIDE1MSwgMjEsIDExMCwgMjUwLCAxNTEsIDIxLCAxMDUsIAotICAgIDI1MCwgMTUxLCAyMSwgMTU4LCAyNTAsIDE1MSwgMjEsIDE2MSwgMjUwLCAxNTEsIDIxLCAxODksIDI1MCwgMTUxLCAyMSwgCi0gICAgMTk0LCAyNTAsIDE1MSwgMjEsIDE5OCwgMjUwLCAxNTEsIDIxLCAxOTUsIDI1MCwgMTUxLCAyMSwgMjAwLCAyNTAsIDE1MSwgCi0gICAgMjIxLCAxNzMsIDc4LCAyNTAsIDE1MSwgMjQ4LCAxNzgsIDI1MCwgMTUxLCA1MiwgMjQ4LCAxNzgsIDI1MCwgMTUxLCAyMjQsIAotICAgIDEzLCA3OCwgMTc0LCA1LCAyNTAsIDI1NSwgMTc0LCA1LCAyNTQsIDc1LCAxNzQsIDUsIDIxMywgMTQ3LCAxNzQsIDEsIDYxLCAKLSAgICAxNzQsIDEsIDI1NSwgNzMsIDE3NCwgMSwgNzMsIDE3NCwgMSwgMjM2LCAzMywgMTc0LCAxLCA3MCwgMTc0LCAxLCAyMTQsIAotICAgIDExOCwgMTc0LCAxLCAxNDksIDE1MywgMTc0LCAxLCAxNDksIDIyMiwgMTgwLCAxNzQsIDEsIDE0OSwgMTU2LCAxNzQsIDEsIAotICAgIDE0OSwgMjMyLCAxODUsIDE3NCwgMSwgNzUsIDE3NCwgMSwgMjU0LCAyMDEsIDE3NCwgMSwgNzYsIDE3NCwgMSwgMjUzLCAKLSAgICAxOTIsIDE3NCwgMSwgMTc2LCAxNzQsIDEsIDIzNCwgMTMyLCAxNzQsIDEsIDI0MywgMTM1LCAxNzQsIDEsIDI0MiwgMjQ5LCAKLSAgICAxNzQsIDEsIDIyOSwgNzcsIDE3NCwgMSwgMjUxLCAzMywgMTc0LCAxLCAyNTAsIDE1NywgMTc0LCAxLCAyMzUsIDE0MSwgCi0gICAgMTc0LCAxLCAyMzUsIDExNCwgMTc0LCAxLCAyMjcsIDE2NSwgMTc0LCAxLCAyMTUsIDE1NiwgMTc0LCAxLCAyMTUsIDE0NCwgCi0gICAgMTc0LCAxLCAyNDgsIDEzNSwgMTc0LCAxLCAyNDgsIDExOSwgMTc0LCAxLCAyMjgsIDExMCwgMTc0LCAxLCAyMTcsIDEwNSwgCi0gICAgMTc0LCAxLCAyMTYsIDIwOCwgMTc0LCAxLCAyNDgsIDIyMSwgMTc0LCAxLCAyNDgsIDI1LCAxNzQsIDEsIDE5NywgMTc0LCAxLCAKLSAgICAxOTAsIDE3NCwgMSwgMjI1LCAxNDcsIDE3NCwgMSwgMjUyLCAxOTEsIDE3NCwgMSwgMjUyLCAxOCwgMTc0LCAxLCAxODQsIAotICAgIDE3NCwgMSwgMTkxLCAxNzQsIDEsIDIwNSwgMTc0LCAxLCAyMzMsIDEzNSwgMTc0LCAxLCAyMzIsIDE4NCwgMTc0LCAxLCAKLSAgICAyMTQsIDI3LCAxNzQsIDEsIDIyMCwgMTAyLCAxNzQsIDEsIDIxOCwgMjIzLCAxNzQsIDEsIDIwNiwgMTc0LCAxLCAxNjIsIAotICAgIDE3NCwgMjUsIDUsIDI1NSwgNzMsIDE3NCwgMjUsIDUsIDczLCAxNzQsIDI1LCA1LCAyMzYsIDMzLCAxNzQsIDI1LCA1LCA3MCwgCi0gICAgMTc0LCAyNSwgNSwgMjE0LCAxMTgsIDE3NCwgMjUsIDUsIDE0OSwgMTUzLCAxNzQsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAKLSAgICAxNzQsIDI1LCA1LCAxNDksIDE1NiwgMTc0LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTc0LCAyNSwgNSwgNzUsIDE3NCwgMjUsIAotICAgIDUsIDI1NCwgMjAxLCAxNzQsIDI1LCA1LCA3NiwgMTc0LCAyNSwgNSwgMjUzLCAxOTIsIDE3NCwgNSwgMjEzLCAxNTIsIDE3NCwgCi0gICAgNSwgMjUzLCAxNzUsIDE3NCwgNSwgMjM1LCAxMDIsIDE3NCwgNSwgMjE0LCAxNjEsIDE3NCwgMjI2LCAyMDQsIDE3NCwgMjQ4LCAKLSAgICAxNzgsIDE3NCwgNTIsIDI0OCwgMTc4LCAxNzQsIDI1NSwgMjEsIDUwLCAxNzQsIDIyMCwgMTM3LCAxNzQsIDIxLCAyMTAsIAotICAgIDg2LCAxNzQsIDIxLCAxMTAsIDE3NCwgMjEsIDEwNSwgMTc0LCAyMSwgMTU4LCAxNzQsIDIxLCAxNjEsIDE3NCwgMjEsIDE4OSwgCi0gICAgMTc0LCAyMSwgMTk0LCAxNzQsIDIxLCAxOTgsIDE3NCwgMjEsIDE5NSwgMTc0LCAyMSwgMjAwLCAyMTcsIDY5LCAxLCA2MSwgCi0gICAgMjE3LCA2OSwgMSwgMjU1LCA3MywgMjE3LCA2OSwgMSwgNzMsIDIxNywgNjksIDEsIDIzNiwgMzMsIDIxNywgNjksIDEsIDcwLCAKLSAgICAyMTcsIDY5LCAxLCAyMTQsIDExOCwgMjE3LCA2OSwgMSwgNzUsIDIxNywgNjksIDEsIDI1NCwgMjAxLCAyMTcsIDY5LCAxLCAKLSAgICA3NiwgMjE3LCA2OSwgMSwgMjUzLCAxOTIsIDIxNywgNjksIDEsIDE3NiwgMjE3LCA2OSwgMSwgMjM0LCAxMzIsIDIxNywgNjksIAotICAgIDEsIDI0MywgMTM1LCAyMTcsIDY5LCAxLCAyNDIsIDI0OSwgMjE3LCA2OSwgMSwgMjI5LCA3NywgMjE3LCA2OSwgMSwgMjUxLCAKLSAgICAzMywgMjE3LCA2OSwgMSwgMjUwLCAxNTcsIDIxNywgNjksIDEsIDIzNSwgMTQxLCAyMTcsIDY5LCAxLCAyMzUsIDExNCwgCi0gICAgMjE3LCA2OSwgMSwgMjI3LCAxNjUsIDIxNywgNjksIDEsIDIxNSwgMTU2LCAyMTcsIDY5LCAxLCAyMTUsIDE0NCwgMjE3LCAKLSAgICA2OSwgMSwgMjQ4LCAxMzUsIDIxNywgNjksIDEsIDI0OCwgMTE5LCAyMTcsIDY5LCAxLCAyMjgsIDExMCwgMjE3LCA2OSwgMSwgCi0gICAgMjE3LCAxMDUsIDIxNywgNjksIDEsIDIxNiwgMjA4LCAyMTcsIDY5LCAxLCAyNDgsIDIyMSwgMjE3LCA2OSwgMSwgMjQ4LCAKLSAgICAyNSwgMjE3LCA2OSwgMSwgMTk3LCAyMTcsIDY5LCAxLCAxOTAsIDIxNywgNjksIDEsIDIyNSwgMTQ3LCAyMTcsIDY5LCAxLCAKLSAgICAyNTIsIDE5MSwgMjE3LCA2OSwgMSwgMjUyLCAxOCwgMjE3LCA2OSwgMSwgMTg0LCAyMTcsIDY5LCAxLCAxOTEsIDIxNywgNjksIAotICAgIDEsIDIwNSwgMjE3LCA2OSwgMSwgMjMzLCAxMzUsIDIxNywgNjksIDEsIDIxNCwgMjcsIDIxNywgNjksIDEsIDIyMCwgMTAyLCAKLSAgICAyMTcsIDY5LCAxLCAyMDYsIDIxNywgNjksIDEsIDE2MiwgMjE3LCA2OSwgMSwgMjIyLCAxNzksIDIxNywgNjksIDUsIDI1NCwgCi0gICAgNzUsIDIxNywgNjksIDUsIDIxMywgMTQ3LCAyMTcsIDY5LCAyNSwgNSwgMjU1LCA3MywgMjE3LCA2OSwgMjUsIDUsIDczLCAKLSAgICAyMTcsIDY5LCAyNSwgNSwgMjM2LCAzMywgMjE3LCA2OSwgMjUsIDUsIDcwLCAyMTcsIDY5LCAyNSwgNSwgMjE0LCAxMTgsIAotICAgIDIxNywgNjksIDI1LCA1LCA3NSwgMjE3LCA2OSwgMjUsIDUsIDI1NCwgMjAxLCAyMTcsIDY5LCAyNSwgNSwgNzYsIDIxNywgCi0gICAgNjksIDI1LCA1LCAyNTMsIDE5MiwgMjE3LCA2OSwgNSwgMjEzLCAxNTIsIDIxNywgNjksIDUsIDIyNywgMjA1LCAyMTcsIDY5LCAKLSAgICAyMSwgMjEwLCA4NiwgMjE3LCA2OSwgMjEsIDExMCwgMjE3LCA2OSwgMjEsIDEwNSwgMjE3LCA2OSwgMjEsIDE1OCwgMjE3LCAKLSAgICA2OSwgMjEsIDE2MSwgMjE3LCA2OSwgMjEsIDE4OSwgMjE3LCA2OSwgMjEsIDE5NCwgMjE3LCA2OSwgMjEsIDE5OCwgMjE3LCAKLSAgICA2OSwgMjEsIDE5NSwgMjE3LCA2OSwgMjEsIDIwMCwgMTUsIDUsIDYxLCAxNSwgNSwgMTE1LCAzMCwgNjEsIDE1LCA1LCAxMTUsIAotICAgIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDExNSwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDExNSwgMzAsIDE2MiwgCi0gICAgMTUsIDUsIDExNSwgMzAsIDIzNiwgMzUsIDE1LCA1LCAxMTUsIDMwLCAyMzMsIDExNiwgMjQyLCA5NCwgMTUsIDUsIDExNSwgCi0gICAgMzAsIDIzMCwgNjEsIDE1LCA1LCAxMTUsIDMwLCAyMjIsIDIxLCAxNSwgNSwgMjU1LCA3NSwgMTUsIDUsIDI1NSwgMjUsIDE1LCAKLSAgICA1LCAyNTUsIDI2LCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI1NSwgMjYsIDMwLCAyNDMsIDExOCwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAKLSAgICAyNTUsIDI2LCAzMCwgMTYyLCAxNSwgNSwgMjU1LCAyNiwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNTUsIDI2LCAKLSAgICAzMCwgMjM2LCA5LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDIyMCwgNDgsIAotICAgIDE1LCA1LCAyNTUsIDI2LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyNTUsIDI2LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjU1LCAyMywgMTUsIDUsIDI1NSwgMjQsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIyMCwgCi0gICAgMTAwLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIxNywgNzIsIDE1LCA1LCAyNTQsIDI1NSwgMTUsIDUsIDI1NCwgMTg2LCAxNSwgCi0gICAgNSwgMjU0LCAxODcsIDMwLCAyNDUsIDg3LCAxNSwgNSwgMjU0LCAxODcsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTAsIDE1LCAKLSAgICA1LCAyNTQsIDE3OCwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI0NywgCi0gICAgMjE2LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNDIsIDE5MCwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMTYyLCAxNSwgNSwgMjU0LCAKLSAgICAxNzksIDMwLCAyMzQsIDI1NSwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjM0LCA5MiwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyNTQsIDE3NSwgMTUsIDUsIDI1NCwgMTY4LCAKLSAgICAxNSwgNSwgMjU0LCAxMzIsIDE1LCA1LCAyNTQsIDEzMywgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNTQsIDEyMywgMTUsIDUsIAotICAgIDI1NCwgMTI0LCAxMTcsIDI1NCwgMTIzLCAxNSwgNSwgMjU0LCAxMjQsIDEzNCwgMjE2LCA4NSwgMTUsIDUsIDI1NCwgMTI0LCAKLSAgICA5NiwgMjI5LCAyMTcsIDIyNiwgMTY0LCAyNTQsIDEyNCwgOTYsIDIyOSwgMjE2LCAxNSwgNSwgMjU0LCAxMjQsIDk2LCAyMjksIAotICAgIDIxNywgMjE4LCAyMzMsIDE1LCA1LCAyNTQsIDk0LCAxNSwgNSwgMjU0LCA2NywgMTUsIDUsIDI1NCwgMzUsIDE1LCA1LCAKLSAgICAyNTQsIDM2LCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyNTQsIDgsIDE1LCA1LCAyNTMsIDIzNiwgMTUsIDUsIDI1MywgMjMxLCAKLSAgICAxNSwgNSwgMjUzLCAyMzIsIDIxMCwgNDAsIDIxNiwgMjM5LCAxNSwgNSwgMjUzLCAyMzIsIDIzNSwgMywgMjE2LCAyMzksIAotICAgIDE1LCA1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMjE1LCAxMTQsIDExNywgMjE1LCAxMTQsIDIxNSwgMTE0LCAxMTcsIAotICAgIDIxNSwgMTE0LCAyMjYsIDIxLCAxNSwgNSwgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDExNywgMjUzLCAyMzEsIDE1LCA1LCAKLSAgICAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMjQ5LCAxMjUsIDI1MywgMjMyLCAxMTcsIDI1MywgCi0gICAgMjMyLCAxMTcsIDI1MywgMjMxLCAxNSwgNSwgMjUzLCAyMjksIDE1LCA1LCAyNTMsIDIyNiwgMTUsIDUsIDI1MiwgMTkxLCAKLSAgICAxNSwgNSwgMjUyLCAxNzYsIDE1LCA1LCAyNTIsIDE3MSwgMTUsIDUsIDI1MiwgMTY3LCAxNSwgNSwgMjUyLCAxNjEsIDE1LCAKLSAgICA1LCAyNTIsIDE2MiwgMTE3LCAyNTIsIDE2MSwgMTUsIDUsIDI1MiwgMTYwLCAxNSwgNSwgMTMwLCAxNSwgNSwgMjUyLCAxNDAsIAotICAgIDE1LCA1LCAyNTIsIDYsIDE1LCA1LCAyNTIsIDcsIDMwLCA2MSwgMTUsIDUsIDI1MiwgNywgMzAsIDI0MywgOTYsIDE1LCA1LCAKLSAgICAyNTIsIDcsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjUxLCAxMjUsIDE1LCA1LCAyNTEsIDEyNiwgMTE3LCAyNTEsIAotICAgIDEyNiwgMjU1LCAyNSwgMTUsIDUsIDI1MSwgMTI2LCAxMTcsIDI1MSwgMTI2LCAyMTQsIDE5MCwgMTUsIDUsIDI1MSwgMTI2LCAKLSAgICAyNDksIDEyNSwgMjUxLCAxMjUsIDE1LCA1LCAyNTEsIDEwOSwgMTUsIDUsIDI1MSwgMTEwLCAxMTcsIDI1MSwgMTA5LCAxNSwgCi0gICAgNSwgMjUxLCA5OCwgMTUsIDUsIDI1MSwgOTcsIDE1LCA1LCAyNDgsIDIyMSwgMTUsIDUsIDI0OCwgMjEyLCAxNSwgNSwgMjQ4LCAKLSAgICAyMTMsIDIzNCwgNjYsIDMwLCAxMTUsIDk2LCAyMzEsIDE0NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjU0LCAKLSAgICAxMzIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIAotICAgIDMwLCAyNTIsIDYsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgCi0gICAgNjYsIDMwLCAyNDMsIDEzNiwgOTYsIDIzMSwgMTQ3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDIsIDIxNCwgCi0gICAgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIAotICAgIDI0MiwgMTAzLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAxNjIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgCi0gICAgMzAsIDIzNSwgMTc5LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzUsIDE4MCwgOTYsIDIzMiwgOTgsIDE1LCA1LCAKLSAgICAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzMsIDEzNSwgCi0gICAgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCA5OCwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCAKLSAgICA5OSwgOTYsIDIzMSwgMTQ2LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzIsIDg0LCAxNSwgNSwgMjQ4LCAyMTMsIAotICAgIDIzNCwgNjYsIDMwLCAyMjksIDEwNywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjI2LCAyMiwgOTYsIDIyNiwgCi0gICAgMjEsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIxOSwgMTkxLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAKLSAgICAyMTcsIDcyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTQsIDIzMSwgOTYsIDI0MiwgMTk3LCAxNSwgNSwgCi0gICAgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDI0OCwgMTg3LCAxNSwgNSwgMjQ4LCAxNjYsIDE1LCA1LCAKLSAgICAyNDgsIDE2NSwgMTUsIDUsIDI0OCwgMTY0LCAxNSwgNSwgMjQ4LCAzLCAxNSwgNSwgMjQ3LCAyNDIsIDE1LCA1LCAyNDcsIAotICAgIDIxNywgMTUsIDUsIDI0NywgMjE4LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0NywgMjE2LCAxNSwgNSwgMjQ3LCAyMDYsIDE1LCAKLSAgICA1LCAyNDcsIDIwNywgMjM0LCAyMDgsIDEwNCwgMjQyLCA5NSwgMjQ3LCAxODcsIDE1LCA1LCAyNDcsIDE4NywgMTUsIDUsIAotICAgIDI0NiwgNzgsIDE1LCA1LCAyNDYsIDc5LCAxMTcsIDI0NiwgNzgsIDE1LCA1LCAyNDYsIDc5LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjQ2LCA3OSwgMjIwLCA0NSwgMTUsIDUsIDI0NiwgNzYsIDE1LCA1LCAyNDYsIDc3LCAzMCwgMjQ1LCA3MiwgMTUsIDUsIAotICAgIDI0NiwgNzUsIDE1LCA1LCAyNDYsIDc0LCAxNSwgNSwgMjQ2LCA3MywgMTUsIDUsIDI0NiwgNzIsIDE1LCA1LCAyNDYsIDY4LCAKLSAgICAxNSwgNSwgMjQ2LCA2NiwgMTUsIDUsIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAyNDYsIDY3LCAyNDIsIDk1LCAyNDIsIAotICAgIDk0LCAxNSwgNSwgMjQ2LCA2NSwgMTUsIDUsIDI0NiwgNTgsIDE1LCA1LCA3NSwgMTUsIDUsIDE2MCwgMzAsIDIyNiwgMjEsIAotICAgIDE1LCA1LCAxNjAsIDExNywgMTYwLCAyMjcsIDE5NSwgMTE3LCAyMjcsIDE5NCwgMTUsIDUsIDI0NSwgMjM0LCAxNSwgNSwgCi0gICAgMjQ1LCAyMzUsIDMwLCAxMTUsIDk2LCAyNDIsIDQ5LCA5NiwgMjQ4LCAyMjEsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyMjIsIDgsIDE1LCA1LCAKLSAgICAyNDUsIDIzNSwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDcwLCAxNSwgNSwgMjQ1LCAyMTEsIDE1LCA1LCAKLSAgICAyNDUsIDIwMCwgMTUsIDUsIDI0NSwgMTc0LCAxNSwgNSwgMjQ1LCAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMzAsIDI0MywgCi0gICAgMTA0LCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDUsIDE1MSwgMzAsIDIzMSwgCi0gICAgOTEsIDE1LCA1LCAyNDUsIDE1MSwgMjQ5LCAxMjUsIDI0NSwgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDIyNiwgMTY0LCAyNDUsIAotICAgIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAyMTgsIDIzMywgMTUsIDUsIDI0NSwgODksIDE1LCA1LCAyNDUsIDg3LCAxNSwgNSwgCi0gICAgMjQ1LCA3MiwgMTUsIDUsIDI0NSwgMTAsIDE1LCA1LCAyNDUsIDExLCAzMCwgNjEsIDE1LCA1LCAyNDUsIDExLCAzMCwgMTE1LCAKLSAgICA5NiwgMjMzLCAxMDQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMTE1LCA5NiwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIAotICAgIDI0NSwgMTEsIDMwLCAyNTQsIDEyMywgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDI0NiwgNjcsIDI0MiwgOTUsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNDUsIDExLCAzMCwgMTYyLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDI0MiwgNDksIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAKLSAgICAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzQsIDIwNywgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyMzQsIDIwOCwgMjE4LCAyMzMsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMzLCAyMTUsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjMzLCAxMzUsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyMzIsIDI0MSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIxNCwgMjMwLCAxNSwgCi0gICAgNSwgMjQ1LCAxMSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzNiwgMjQyLCA5NCwgMTUsIAotICAgIDUsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAxMTUsIDk2LCAyNDgsIDIyMiwgOTYsIDE2MiwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMTE1LCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAxMTUsIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNTUsIDI0LCAyMTYsIDI0MCwgOTYsIDIxNywgOTMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1NCwgMTIzLCAKLSAgICAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTMsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUzLCAyMzAsIDk2LCAyNDMsIAotICAgIDExOCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MiwgMTQxLCA5NiwgCi0gICAgMjA1LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTEsIDk4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTEsIDk5LCA5NiwgMjA1LCAKLSAgICAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDgsIDIyMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ4LCAzLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDcsIDIxOCwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NiwgNzYsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0NSwgMTc0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDUsIDE3NSwgOTYsIDIzMywgMTM1LCAxNSwgNSwgCi0gICAgMjQzLCAxMzQsIDMwLCAyNDUsIDE1MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ1LCAxNTEsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQzLCAKLSAgICA5NiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAyMTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMjEyLCAxNSwgNSwgCi0gICAgMjQzLCAxMzQsIDMwLCAyNDIsIDIxMywgOTYsIDYxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDE5OCwgOTYsIDIxOCwgCi0gICAgODMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgNDksIDk2LCAyMzIsIDk5LCA5NiwgMjQ1LCA3MiwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQyLCAzMCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAzMSwgOTYsIDIzMywgMTM1LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDEsIDE4MSwgOTYsIDIzMiwgMjQxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDAsIDIxOCwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM1LCAxNjYsIDk2LCAyNDAsIAotICAgIDIyMywgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjM0LCAyMDcsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNCwgODksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNCwgOTAsIDk2LCAKLSAgICAyMzMsIDEwNCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjMzLCAyMTYsIDk2LCAyNTQsIDEyMywgMTUsIDUsIDI0MywgMTM0LCAKLSAgICAzMCwgMjMzLCAxMzUsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAKLSAgICAyMjcsIDE5NSwgMTE3LCAyMjcsIDE5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTkwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAKLSAgICAyMjIsIDgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMSwgMjMxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjAsIDYzLCAxNSwgCi0gICAgNSwgMjQzLCAxMzQsIDMwLCAyMjAsIDY0LCA5NiwgMjE1LCA5OCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIwLCAzMCwgMTUsIAotICAgIDUsIDI0MywgMTM0LCAzMCwgMjE4LCA0MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDI0MywgMTM0LCAKLSAgICAzMCwgNzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTQsIDIyMCwgOTYsIAotICAgIDI0NiwgNzgsIDE1LCA1LCAyNDMsIDEzNCwgMTE3LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTI4LCAxNSwgNSwgMjQzLCAKLSAgICAxMjksIDI0OSwgMTI1LCAyNDMsIDEyOCwgMTUsIDUsIDI0MywgMTI2LCAxNSwgNSwgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIAotICAgIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDI0MywgMTE4LCAxNSwgNSwgMjQzLCAxMTksIDI0MywgMTI3LCAxMTcsIAotICAgIDI0MywgMTI3LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAyNDMsIDExNywgMTUsIDUsIDI0MywgMTE1LCAxNSwgNSwgCi0gICAgMjQzLCAxMDYsIDE1LCA1LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0MywgMTA1LCAKLSAgICAxMTcsIDI0MywgMTA0LCAxNSwgNSwgMjQzLCAxMDUsIDI0OSwgMTI1LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgOTYsIDE1LCAKLSAgICA1LCAyNDMsIDk1LCAxNSwgNSwgMjQzLCA5MCwgMTUsIDUsIDI0MywgMzYsIDE1LCA1LCAyNDMsIDM3LCAzMCwgMjMzLCAxOTYsIAotICAgIDE1LCA1LCAyNDIsIDIxNCwgMTUsIDUsIDI0MiwgMjE1LCAzMCwgNzUsIDE1LCA1LCAyNDIsIDIxNSwgMzAsIDcwLCAxNSwgNSwgCi0gICAgMjQyLCAyMTUsIDI0OSwgMTI1LCAyNDIsIDIxNCwgMTUsIDUsIDI0MiwgMjEyLCAxNSwgNSwgMjQyLCAyMTMsIDExNywgMjQyLCAKLSAgICAyMTIsIDE1LCA1LCAyNDIsIDIxMywgMjQ5LCAxMjUsIDI0MiwgMjEyLCAxNSwgNSwgMjQyLCAyMDksIDE1LCA1LCAyNDIsIAotICAgIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAyNDIsIDk0LCAxNSwgNSwgMjQyLCAxOTUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDExNSwgCi0gICAgOTYsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0MiwgMTk2LCAKLSAgICAzMCwgMjM2LCAzNSwgMTUsIDUsIDI0MiwgMTk2LCAzMCwgMjMyLCA5OSwgOTYsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgCi0gICAgMzAsIDE5MCwgMTUsIDUsIDI0MiwgMTkyLCAxNSwgNSwgMjQyLCAxOTAsIDE1LCA1LCAyNDIsIDE5MSwgMjQ5LCAxMjUsIAotICAgIDI0MiwgMTkwLCAxNSwgNSwgMjQyLCAxOTEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDI0MiwgMTkxLCAzMCwgMjE3LCA3MiwgCi0gICAgMTUsIDUsIDI0MiwgMTkxLCAyMTYsIDIzOSwgMTUsIDUsIDI0MiwgMTEzLCAxNSwgNSwgMjQyLCAxMTQsIDI0OSwgMTI1LCAKLSAgICAyNDIsIDExMywgMTUsIDUsIDI0MiwgMTExLCAxNSwgNSwgMjQyLCAxMTIsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0MiwgCi0gICAgMTEyLCAzMCwgMjM0LCAyNDMsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjQyLCAxMTIsIDMwLCAyMjcsIDE5NCwgCi0gICAgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjIyLCA5LCA5NiwgMjE1LCAxMTMsIDE1LCA1LCAyNDIsIDExMiwgMjQyLCA5NCwgMTUsIAotICAgIDUsIDI0MiwgMTAzLCAxNSwgNSwgMjQyLCAxMDQsIDMwLCAxMTUsIDk2LCAyMzMsIDE5NiwgMTUsIDUsIDI0MiwgMTA0LCAzMCwgCi0gICAgMjMzLCAxOTYsIDE1LCA1LCAyNDIsIDEwNCwgMTE3LCAyNDIsIDEwNCwgMjMyLCA5MSwgMTUsIDUsIDI0MiwgOTgsIDE1LCA1LCAKLSAgICAyNDIsIDk2LCAxNSwgNSwgMjQyLCA5NywgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDIsIDg4LCAxNSwgNSwgMjQyLCA4NywgMTUsIAotICAgIDUsIDI0MiwgODQsIDE1LCA1LCAyNDIsIDgzLCAxNSwgNSwgMTYyLCAxNSwgNSwgMjQyLCA0OSwgMjE2LCAyMzksIDE1LCA1LCAKLSAgICAyNDIsIDQ5LCAyNDIsIDk0LCAxNSwgNSwgMjQyLCAzMCwgMTUsIDUsIDI0MSwgMTgwLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAKLSAgICAyNTMsIDIzMSwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI1MiwgMTc2LCAKLSAgICAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNDcsIDE4NywgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjQzLCAxMjYsIDE1LCA1LCAyNDEsIAotICAgIDE4MSwgMzAsIDIzNCwgODEsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjQxLCAxODEsIDMwLCA3MCwgMTUsIDUsIDI0MCwgMjIyLCAxNSwgNSwgMjQwLCAyMTgsIDE1LCAKLSAgICA1LCAyNDAsIDIxOSwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyNDIsIDMwLCAxNSwgNSwgMjQwLCAyMTksIAotICAgIDMwLCAyMzQsIDIwNywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjMyLCAxOTcsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDIxNCwgCi0gICAgMjE5LCAxNSwgNSwgMjQwLCAyMTUsIDE1LCA1LCA3MywgMTUsIDUsIDI0MCwgMTU0LCA2MSwgMTUsIDUsIDI0MCwgMTE1LCAKLSAgICAxNSwgNSwgMjM2LCA2MywgMTUsIDUsIDIzNiwgNjQsIDExNywgMjM2LCA2NCwgMjUxLCA5OCwgMTUsIDUsIDIzNiwgNjQsIAotICAgIDExNywgMjM2LCA2NCwgMjE4LCAyMzMsIDE1LCA1LCAyMzYsIDM4LCAxNSwgNSwgMjM2LCAzNSwgMTUsIDUsIDIzNiwgMzYsIAotICAgIDI0NywgMjQyLCAxNSwgNSwgMjM2LCAzNiwgMjIzLCAzNSwgMTUsIDUsIDIzNiwgMzYsIDExNywgMjM2LCAzNiwgMjIwLCAxNCwgCi0gICAgMTE3LCAyMjAsIDE0LCAyMTQsIDIyMCwgMTE3LCAyMTQsIDIxOSwgMTUsIDUsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyMzYsIDI3LCAxNSwgNSwgMjM2LCAyOCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIzNiwgMjYsIDE1LCA1LCAKLSAgICAyMzYsIDE2LCAxNSwgNSwgMjM2LCAxNywgMzAsIDIxNywgNzIsIDE1LCA1LCAyMzYsIDE3LCAyNDksIDEyNSwgMjM2LCAxNiwgCi0gICAgMTUsIDUsIDIzNiwgMTcsIDIyNiwgMTY0LCAyMzYsIDE2LCAxNSwgNSwgMjM2LCAxNywgMjE4LCAyMzMsIDE1LCA1LCAyMzYsIAotICAgIDksIDE1LCA1LCAyMzUsIDI1NSwgMTUsIDUsIDIzNSwgMTc5LCAxNSwgNSwgMjM1LCAxNjUsIDE1LCA1LCAxNzYsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgNjEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjU0LCAyNTUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjU1LCAKLSAgICAwLCA5NiwgMjMzLCAyMTUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjUyLCAKLSAgICAxNzYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMTMwLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDI1MiwgNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDUsIDg3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0NSwgNzIsIAotICAgIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQzLCAxMTgsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgOTYsIDE1LCA1LCAyMzUsIDEzLCAKLSAgICAzMCwgMjQzLCA5NywgOTYsIDIyMCwgMTAxLCA5NiwgNjEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCAyMTQsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCAxOTEsIDk2LCAyMjEsIDIzMSwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyNDIsIDE5MSwgMjQ5LCAxMjUsIDI0MiwgMTkwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMTEzLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgODcsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM2LCAzNSwgMTUsIDUsIDIzNSwgMTMsIAotICAgIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgOTIsIAotICAgIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM0LCA4OSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzIsIDI0MSwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgOTEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMxLCAKLSAgICA5MiwgOTYsIDI0NiwgNzgsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMxLCA5MiwgOTYsIDI0MiwgMjE0LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIzMSwgOTIsIDk2LCAyMTcsIDIyLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIzMCwgMjMxLCA5NiwgMjI3LCAxODksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjI1LCAxMDgsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIyLCAKLSAgICAxNDAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjA2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMSwgMjMxLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIyMCwgMTAyLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMCwgNjMsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIwLCAKLSAgICAzMCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTksIDIyNSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTksIDE4MiwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyMTgsIDUxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNywgNTAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgCi0gICAgNzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjE0LCAxOTMsIDMwLCAxOTAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjEwLCA0NCwgMTUsIDUsIDIzNSwgMTEsIDE1LCA1LCAyMzUsIDEyLCAyNDksIDEyNSwgMjM1LCAxMSwgMTUsIAotICAgIDUsIDIzNSwgNCwgMTUsIDUsIDIzNSwgMSwgMTUsIDUsIDIzNCwgMjU1LCAxNSwgNSwgMjM0LCAyNTQsIDE1LCA1LCAyMzQsIAotICAgIDI1MiwgMTUsIDUsIDIzNCwgMjUzLCAxMTcsIDIzNCwgMjUyLCAxNSwgNSwgMjM0LCAyNDIsIDE1LCA1LCAyMzQsIDI0MywgCi0gICAgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMzQsIDIzOCwgMTUsIDUsIDIzNCwgMjM5LCAzMCwgMjUyLCAxNzYsIDE1LCAKLSAgICA1LCAyMzQsIDIzOSwgMjQ5LCAxMjUsIDIzNCwgMjM4LCAxNSwgNSwgMjM0LCAyMzYsIDE1LCA1LCAyMzQsIDIzNSwgMTUsIDUsIAotICAgIDIzNCwgMjA3LCAxNSwgNSwgMjM0LCAyMDgsIDIzMywgMTE4LCAzMCwgMTA0LCAxMTcsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCAKLSAgICA1LCAyMzQsIDIwOCwgMTE3LCAyMzQsIDIwOCwgMjMzLCAxMTgsIDMwLCAxMDQsIDExNywgMjMzLCAxMTgsIDMwLCA3MCwgMTUsIAotICAgIDUsIDIzNCwgMTU3LCAxNSwgNSwgMjM0LCA5MiwgMTUsIDUsIDIzNCwgOTMsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzNCwgCi0gICAgOTMsIDMwLCA3MCwgMTUsIDUsIDIzNCwgOTMsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIzNCwgODksIDE1LCA1LCAyMzQsIDgxLCAKLSAgICAxNSwgNSwgMjM0LCA2OCwgMTUsIDUsIDIzNCwgNjcsIDE1LCA1LCAyMzQsIDY1LCAxNSwgNSwgMjM0LCA2NiwgMTE3LCAyMzQsIAotICAgIDY1LCAxNSwgNSwgMjMzLCAyMTcsIDE1LCA1LCAyMzMsIDIxOCwgMTE3LCAyNDEsIDE4MSwgMzAsIDI1MywgMjMwLCAyMzMsIAotICAgIDIxOCwgMTE3LCAyNDEsIDE4MSwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjMzLCAyMTUsIDE1LCA1LCAyMzMsIDIxMywgMTUsIAotICAgIDUsIDIzMywgMjE0LCAyMTQsIDEyLCAxNywgMTUsIDUsIDIzMywgMjEyLCAxNSwgNSwgMjMzLCAyMDksIDE1LCA1LCAyMzMsIAotICAgIDIxMCwgMjQyLCA5NCwgMTUsIDUsIDIzMywgMjA4LCAxNSwgNSwgMjMzLCAxOTYsIDE1LCA1LCAyMzMsIDE5NywgMjI2LCAKLSAgICAxNjQsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxOTEsIDE1LCA1LCAyMzMsIDE3MiwgMTUsIDUsIDIzMywgMTM1LCAxNSwgNSwgCi0gICAgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMTUsIDk2LCAyNDgsIAotICAgIDIyMiwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTE1LCA5NiwgMjQzLCA5NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMTE1LCA5NiwgMjMzLCAxMDQsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAyNTQsIDEyMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjUzLCAyMzIsIDIxMCwgNDAsIDIxNiwgMjM5LCAxNSwgNSwgMjMzLCAKLSAgICAxMTgsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDgsIAotICAgIDE2NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQ1LCAxNTAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0MywgMTM1LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDIsIDEwMywgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjQyLCAxMDQsIDk2LCAyNDIsIDEwMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTYyLCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyNDIsIDMwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDEsIDE4MSwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjMzLCAKLSAgICAxMTgsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyMzYsIDE3LCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzYsIDE3LCA5NiwgMjMyLCA5OCwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjM0LCA5MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM0LCA4MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjMzLCAyMTUsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMywgMjA5LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDIxMCwgCi0gICAgOTYsIDI0MSwgMTgxLCA5NiwgNjEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAyMzIsIDE5NywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMyLCA5OCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMyLCA4NiwgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjMxLCA5MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgCi0gICAgNSwgMjMzLCAxMTgsIDMwLCAyMzAsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjksIDEwNywgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjIwLCA2NCwgOTYsIDIxOCwgNDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIyMCwgMTAsIDk2LCAyNDIsIDE5MSwgOTYsIAotICAgIDI0NSwgODcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIyMCwgMTAsIDk2LCAyNDIsIDE5MSwgMjE2LCAyMzksIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDIxOSwgMjIzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTksIDIyNCwgOTYsIDIxOSwgMjIzLCAxNSwgCi0gICAgNSwgMjMzLCAxMTgsIDMwLCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTcsIDg0LCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTcsIDIzLCA5NiwgMTE1LCA5NiwgMjE4LCA4NCwgOTYsIDE5NywgCi0gICAgMTUsIDUsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAKLSAgICAxMTgsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA3MCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIAotICAgIDIzMSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDIxOCwgMjMzLCAxNSwgNSwgMjMzLCAxMTUsIDE1LCA1LCAyMzMsIDExNiwgMzAsIDIyMCwgNjMsIDE1LCA1LCAKLSAgICAyMzMsIDExNiwgMzAsIDIyMCwgNjQsIDk2LCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTYsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIAotICAgIDExNiwgMjQyLCA5NSwgMTE3LCAyMzMsIDExNiwgMjQyLCA5NSwgMjIwLCA2MywgMTUsIDUsIDIzMywgMTExLCAxNSwgNSwgCi0gICAgMjMzLCAxMDQsIDE1LCA1LCAyMzMsIDEwNSwgMzAsIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMDIsIDE1LCA1LCAyMzMsIAotICAgIDEwMywgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxMDMsIDMwLCAyMzMsIDE5NywgOTYsIDIyMiwgMTQwLCAxNSwgNSwgCi0gICAgMjMyLCAyNDEsIDE1LCA1LCAyMzIsIDIyNiwgMTUsIDUsIDIzMiwgMjE2LCAxNSwgNSwgMjMyLCAxOTcsIDE1LCA1LCAyMzIsIAotICAgIDk4LCAxNSwgNSwgMjMyLCA5OSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAKLSAgICAyNTQsIDE3OCwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDUsIDcyLCAxNSwgCi0gICAgNSwgMjMyLCA5NywgMzAsIDI0NSwgNzMsIDIxNiwgMjM5LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI0MywgMTA1LCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDEsIDE4MSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNiwgCi0gICAgMTYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM1LCAxLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNCwgMjU1LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzNSwgMCwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjMzLCAxMzYsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjI3LCAyMzcsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjE5LCAxOTIsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMTksIDE3NCwgOTYsIDI1MSwgMTI1LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIxNSwgMTEzLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMjE2LCAyMzksIDE1LCA1LCAyMzIsIDk3LCAyNDksIDEyNSwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIyNiwgCi0gICAgMTY0LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMjE4LCAyMzMsIDE1LCA1LCAyMzIsIDk3LCAyMjAsIDQ1LCAxNSwgNSwgCi0gICAgMjMyLCA5NSwgMTUsIDUsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAxMTcsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAKLSAgICAyMjYsIDE2NCwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgOTIsIDIyMCwgNDUsIDE1LCA1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCAKLSAgICA4NiwgMTUsIDUsIDIzMiwgODQsIDE1LCA1LCAyMzIsIDg1LCAxMTcsIDIzMiwgODQsIDE1LCA1LCAyMzIsIDg1LCAxMTcsIAotICAgIDIzMiwgODUsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDE4NCwgMTUsIDUsIDIzMSwgMjM5LCAzMCwgMjE3LCA3MiwgCi0gICAgMTUsIDUsIDIzMSwgMjM5LCAyNDIsIDk0LCAxNSwgNSwgMjMxLCAyMzgsIDE1LCA1LCAyMzEsIDIxMCwgMTUsIDUsIDIzMSwgCi0gICAgMTY2LCAxNSwgNSwgMjMxLCAxNDcsIDE1LCA1LCAyMzEsIDE0NiwgMTUsIDUsIDIzMSwgOTEsIDE1LCA1LCAyMzEsIDQ3LCAKLSAgICAxNSwgNSwgMjMwLCAyMzAsIDE1LCA1LCAyMzAsIDE4OCwgMTUsIDUsIDIzMCwgMTAyLCAxNSwgNSwgMjMwLCAxMDMsIDExNywgCi0gICAgMjMwLCAxMDIsIDE1LCA1LCAyMzAsIDkzLCAxNSwgNSwgMjMwLCA5NCwgMjQyLCA5NCwgMTUsIDUsIDIzMCwgNzgsIDE1LCA1LCAKLSAgICAyMzAsIDY0LCAxNSwgNSwgMjMwLCA2MSwgMTUsIDUsIDIzMCwgNjIsIDMwLCA2MSwgMTUsIDUsIDIzMCwgNjIsIDMwLCAyMzMsIAotICAgIDE5NiwgMTUsIDUsIDIzMCwgNjIsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIzMCwgNjIsIDExNywgMjMwLCA2MSwgMTUsIDUsIAotICAgIDIzMCwgNjIsIDExNywgMjMwLCA2MiwgMzAsIDExNSwgOTYsIDE5NywgMTUsIDUsIDIzMCwgNjIsIDI0OSwgMTI1LCAyMzAsIAotICAgIDYxLCAxNSwgNSwgMjMwLCA1OSwgMTUsIDUsIDIzMCwgNjAsIDMwLCA2MSwgMTUsIDUsIDIzMCwgNjAsIDMwLCAxMTUsIDk2LCAKLSAgICAyNDgsIDMsIDE1LCA1LCAyMzAsIDYwLCAzMCwgMjQ4LCAzLCAxNSwgNSwgMjMwLCA2MCwgMjQyLCA5NCwgMTUsIDUsIDE5NywgCi0gICAgMTUsIDUsIDIyOSwgMjI3LCAxNSwgNSwgMjI5LCAyMTYsIDE1LCA1LCAyMjksIDIxNywgMjM1LCAxOTIsIDE1LCA1LCAyMjksIAotICAgIDIxNywgMzAsIDIxOSwgMjI2LCAyMTYsIDIzOSwgMTUsIDUsIDIyOSwgMjE3LCAyMjYsIDE2NCwgMjI5LCAyMTYsIDE1LCA1LCAKLSAgICAyMjksIDIxNSwgMTUsIDUsIDIyOSwgMjA4LCAyMjcsIDE4MCwgMTUsIDUsIDIyOSwgMjA3LCAxNSwgNSwgMjI5LCAyMDYsIAotICAgIDE1LCA1LCAyMjksIDEwNywgMTUsIDUsIDIyOSwgMTA4LCAzMCwgNjEsIDE1LCA1LCAyMjksIDEwOCwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjI5LCAxMDgsIDIyMCwgNDUsIDE1LCA1LCAyMjgsIDIzMywgMTUsIDUsIDIyOCwgMjM0LCAzMCwgNzUsIDE1LCAKLSAgICA1LCAyMjgsIDIzMiwgMTUsIDUsIDIyOCwgMjAzLCAxNSwgNSwgMjI4LCAyMDQsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIAotICAgIDE1LCA1LCAyMjgsIDIwNCwgMzAsIDI0MywgOTcsIDk2LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMjgsIDIwMSwgCi0gICAgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAKLSAgICAyMDIsIDMwLCAyNTMsIDIzMiwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNDIsIDEwMywgMTUsIDUsIAotICAgIDIyOCwgMjAyLCAzMCwgMjMxLCA5MiwgOTYsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjI5LCAKLSAgICAxMDcsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjAsIDYzLCAxNSwgNSwgCi0gICAgMjI4LCAyMDIsIDMwLCAyMjAsIDY0LCA5NiwgMTE1LCAyNTQsIDEyMywgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgCi0gICAgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjAsIDY0LCA5NiwgMjUzLCAyMzIsIDk2LCAyNTMsIDIzMSwgCi0gICAgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjE0LCAKLSAgICAxMjYsIDE1LCA1LCAyMjgsIDE5MCwgMTUsIDUsIDIyNywgMjM3LCAxNSwgNSwgMjI3LCAyMTAsIDE1LCA1LCAyMjcsIDE5NCwgCi0gICAgMTUsIDUsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIDI0MywgOTYsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAKLSAgICAyMzEsIDE0NywgMTUsIDUsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyNywgMTk1LCAyMzMsIAotICAgIDExNiwgMzAsIDIyMiwgOSwgMTE3LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjcsIDE5NSwgCi0gICAgMjMzLCAxMTYsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyNywgMTk1LCAyMTYsIDIzOSwgMTUsIDUsIDIyNywgMTk1LCAxMTcsIAotICAgIDIyNywgMTk0LCAxNSwgNSwgMjI3LCAxOTUsIDI0OSwgMTI1LCAyMjcsIDE5NCwgMTUsIDUsIDIyNywgMTk1LCAyNDksIDEyNSwgCi0gICAgMjI3LCAxOTUsIDIzMywgMTE2LCAxMTcsIDIzMywgMTE1LCAxNSwgNSwgMjI3LCAxODksIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAKLSAgICAyNCwgMzAsIDI1MywgMjI2LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMjcsIDE5MCwgCi0gICAgMjU1LCAyNCwgMzAsIDI0NiwgNzQsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgMjI3LCAKLSAgICAxOTAsIDI1NSwgMjQsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyMzQsIAotICAgIDI1NSwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjMzLCAxMzUsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgCi0gICAgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyMTksIDE3MSwgMTUsIDUsIDIyNywgMTkwLCAKLSAgICAyNTUsIDI0LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjcsIDE5MCwgMjM0LCA2NiwgMzAsIDI1MiwgNiwgMTUsIDUsIDIyNywgCi0gICAgMTkwLCAyMzQsIDY2LCAzMCwgMjUyLCA3LCA3MCwgMTUsIDUsIDE5MCwgMTUsIDUsIDIyNiwgODAsIDE1LCA1LCAyMjYsIDQ3LCAKLSAgICAxNSwgNSwgMjI2LCAyMSwgMTUsIDUsIDIyNSwgMTYxLCAxNSwgNSwgMjI1LCAxMDgsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIAotICAgIDYxLCAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNTUsIDI1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNTIsIDYsIDE1LCA1LCAKLSAgICAyMjUsIDEwOSwgMzAsIDI1MSwgMTI1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCA3NSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzMsIAotICAgIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDI0MCwgMTE1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCA3MCwgMTUsIDUsIDIyNSwgMTA5LCAKLSAgICAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjUsIDEwOSwgMjQ5LCAxMjUsIDIyNSwgMTA4LCAxNSwgNSwgMjI1LCA1MywgMTUsIDUsIAotICAgIDIyNSwgNTQsIDMwLCAyMzQsIDIzOCwgMTUsIDUsIDIyNSwgNTQsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIyNSwgNTQsIDMwLCAKLSAgICAyMTAsIDExNiwgMTUsIDUsIDIyNSwgNTQsIDIyNiwgMTY0LCAyMjUsIDUzLCAxNSwgNSwgMjA1LCAxNSwgNSwgMjIzLCAxODIsIAotICAgIDE1LCA1LCAyMjMsIDM1LCAxNSwgNSwgMjIyLCAxNDAsIDE1LCA1LCAyMDYsIDE1LCA1LCAyMjIsIDIyLCAyMjcsIDE4MCwgCi0gICAgMTUsIDUsIDIyMiwgMjEsIDE1LCA1LCAyMjIsIDIyLCAzMCwgNjEsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjQ2LCA3OCwgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyNDYsIDc2LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDE2MiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAKLSAgICAyMzQsIDI0MiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMzIsIDg0LCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjIyLCAyMiwgCi0gICAgMzAsIDIyMiwgOCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMjAsIDMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNywgOTMsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE0LCAyMjUsIDE1LCA1LCAyMjIsIDIyLCAKLSAgICAzMCwgMjE0LCAxOTcsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE0LCAxNTAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE0LCAxMjYsIAotICAgIDE1LCA1LCAyMjIsIDIyLCAxMTcsIDIyMiwgMjEsIDE1LCA1LCAyMjIsIDIyLCAyNDIsIDk0LCAxNSwgNSwgMjIyLCA4LCAxNSwgCi0gICAgNSwgMjIyLCA5LCAyMzMsIDExOCwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjIxLCAyMzksIDE1LCA1LCAyMjEsIDIzMSwgMTUsIAotICAgIDUsIDIyMCwgMTAyLCAxNSwgNSwgMjIwLCAxMDAsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDYxLCAxNSwgNSwgMjIwLCAxMDEsIAotICAgIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjQyLCAxOTAsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIyOSwgCi0gICAgMTA3LCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMTksIDIyMywgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjE1LCA5OCwgMTUsIDUsIAotICAgIDIyMCwgMTAxLCAzMCwgNzAsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjIwLCA5OSwgMTUsIAotICAgIDUsIDIyMCwgOTcsIDE1LCA1LCAyMjAsIDc4LCAxNSwgNSwgMjIwLCA2MywgMTUsIDUsIDIyMCwgNjQsIDI0MCwgMjIyLCAxNSwgCi0gICAgNSwgMjIwLCA2NCwgMTE3LCAyMjAsIDY0LCAyNDMsIDEyNywgMTE3LCAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAKLSAgICAxNSwgNSwgMjIwLCA2NCwgMTE3LCAyMjAsIDY0LCAyMTcsIDk0LCAxMTcsIDIxNywgOTQsIDI0MywgOTcsIDExNywgMjQzLCAKLSAgICA5NiwgMTUsIDUsIDIyMCwgNTYsIDE1LCA1LCAyMjAsIDUxLCAxNSwgNSwgMjIwLCA0OCwgMTUsIDUsIDIyMCwgNDcsIDE1LCAKLSAgICA1LCAyMjAsIDQ0LCAxNSwgNSwgMjIwLCAzMCwgMTUsIDUsIDIyMCwgMzEsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMzEsIDMwLCAKLSAgICAyMzYsIDE2LCAxNSwgNSwgMjIwLCAyNCwgMTUsIDUsIDIyMCwgMjUsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyNTIsIAotICAgIDE2MSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyNTEsIDEwOSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyNDcsIDIwNiwgMTUsIDUsIAotICAgIDIyMCwgMjUsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMjAsIDI1LCAzMCwgCi0gICAgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzMsIDE5MSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzIsIAotICAgIDg2LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzMCwgOTMsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjIwLCAKLSAgICAxOCwgMTUsIDUsIDIyMCwgMTMsIDE1LCA1LCAyMjAsIDE0LCAyMTYsIDIzOSwgMTUsIDUsIDIyMCwgMTQsIDExNywgMjIwLCAKLSAgICAxNCwgMjUxLCA5OSwgMTE3LCAyNTEsIDk4LCAxNSwgNSwgMjIwLCA5LCAxNSwgNSwgMjE5LCAyMjUsIDE1LCA1LCAyMTksIAotICAgIDIyNiwgMTE3LCAyMzUsIDE5MywgMjE5LCAyMjUsIDE1LCA1LCAyMTksIDIyMywgMTUsIDUsIDIxOSwgMjIyLCAxNSwgNSwgCi0gICAgMjE5LCAxOTEsIDE1LCA1LCAyMTksIDE5MiwgMjQyLCA5NCwgMTUsIDUsIDIxOSwgMTgyLCAxNSwgNSwgMjE5LCAxODAsIDE1LCAKLSAgICA1LCAyMTksIDE4MSwgMTE3LCAyMTksIDE4MSwgMjE5LCAyMjMsIDE1LCA1LCAyMTksIDE3MywgMTUsIDUsIDIxOSwgMTcxLCAKLSAgICAxNSwgNSwgMjE4LCA4MywgMTUsIDUsIDIxOCwgODQsIDExNywgMjE4LCA4MywgMTUsIDUsIDIxOCwgNTQsIDE1LCA1LCAyMTgsIAotICAgIDUzLCAxNSwgNSwgMjE4LCA1MSwgMTUsIDUsIDIxOCwgNDMsIDE1LCA1LCAyMTgsIDQyLCAxNSwgNSwgMjE4LCAxNywgMTUsIAotICAgIDUsIDIxOCwgMTYsIDE1LCA1LCAyMTcsIDEwNSwgMTUsIDUsIDIxNywgMTA2LCAyNTMsIDIxNiwgMTUsIDUsIDIxNywgMTA2LCAKLSAgICAzMCwgMjQxLCAxODAsIDE1LCA1LCAyMTcsIDEwNiwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjE3LCAxMDYsIDI0MiwgOTQsIAotICAgIDE1LCA1LCAyMTcsIDkzLCAxNSwgNSwgMjE3LCA5NCwgMTE3LCAyMTcsIDk0LCAyMjgsIDIzNCwgMTE3LCAyMjgsIDIzNCwgCi0gICAgMjQ3LCAxODgsIDExNywgMjQ3LCAxODcsIDE1LCA1LCAyMTcsIDk0LCAyMTgsIDIzMywgMTUsIDUsIDIxNywgODQsIDE1LCA1LCAKLSAgICAxMjksIDMwLCAyNTIsIDYsIDE1LCA1LCAxMjksIDMwLCAyNDIsIDEwMywgMTUsIDUsIDEyOSwgMzAsIDIyMCwgNjMsIDE1LCAKLSAgICA1LCAxMjksIDMwLCAyMTksIDIyNSwgMTUsIDUsIDEyOSwgMzAsIDIxNSwgMTEzLCAxNSwgNSwgMTI5LCAzMCwgMjE0LCAyMTksIAotICAgIDE1LCA1LCAyMTcsIDcyLCAxNSwgNSwgMjE3LCA1MCwgMTUsIDUsIDIxNywgMjIsIDE1LCA1LCAyMTcsIDIzLCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjE2LCAxMTcsIDE1LCA1LCAyMTYsIDExOCwgMjE2LCAyMzksIDE1LCA1LCAyMTYsIDkwLCAxNSwgNSwgMjE2LCAKLSAgICA3MiwgMTUsIDUsIDIxNiwgNzMsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjE2LCA3MywgMTE3LCAyMTYsIDcyLCAxNSwgNSwgCi0gICAgMjE2LCA3MywgMTE3LCAyMTYsIDczLCAyNDMsIDEyNywgMTE3LCAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAKLSAgICAxNSwgNSwgMjE1LCAxMTgsIDE1LCA1LCAyMTUsIDExMywgMTUsIDUsIDIxNSwgMTExLCAxNSwgNSwgMjE1LCAxMDgsIDE1LCAKLSAgICA1LCAyMTUsIDk4LCAxNSwgNSwgMjE1LCA5OSwgMTE3LCAyMTUsIDk5LCAyMTAsIDExNywgMTE3LCAyMTAsIDExNiwgMTUsIDUsIAotICAgIDcwLCAxNSwgNSwgMTA0LCAyNDIsIDEwMywgMTUsIDUsIDEwNCwgMTA0LCA3MCwgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDIyNiwgCi0gICAgOTAsIDExNywgMjI2LCA5MCwgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMTA0LCAxMTcsIDEwNCwgMjE4LCAxOCwgCi0gICAgMTE3LCAyMTgsIDE3LCAxNSwgNSwgMTA0LCAxMTcsIDEwNCwgMTA0LCAyMjMsIDQ5LCAxMTcsIDEwNCwgMjIzLCA0OCwgMTUsIAotICAgIDUsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAyMjUsIDE1LCA1LCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgMjIwLCAyMzMsIDE5MSwgCi0gICAgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjE0LCAKLSAgICAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA3MCwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgCi0gICAgMTA0LCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAyMjAsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0NSwgMTUsIDUsIAotICAgIDIxNCwgMjIwLCAyMjAsIDQ2LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMTQsIDIxNSwgMTUsIDUsIDIxNCwgMTk3LCAxNSwgNSwgCi0gICAgMjE0LCAxOTgsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMxLCA5MiwgOTYsIDI0OCwgMjIxLCAxNSwgCi0gICAgNSwgMjE0LCAxOTgsIDMwLCAyMjAsIDEwMCwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgNzAsIDE1LCA1LCAyMTQsIDE5NiwgMTUsIAotICAgIDUsIDIxNCwgMTkyLCAxNSwgNSwgMjE0LCAxOTMsIDMwLCAyMzQsIDIwNywgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMTkwLCAxNSwgCi0gICAgNSwgMjE0LCAxOTAsIDE1LCA1LCAyMTQsIDE5MSwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIAotICAgIDI0OSwgMTI1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyMjAsIDQ1LCAxNSwgNSwgMjE0LCAxNDgsIDE1LCA1LCAKLSAgICAyMTQsIDE0OSwgMzAsIDExNSwgOTYsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE1LCA5NiwgMTk3LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAKLSAgICAyMjcsIDE5NCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCAKLSAgICA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCA5NiwgMjUyLCA2LCAxNSwgNSwgMjE0LCAxNDcsIAotICAgIDE1LCA1LCAyMTQsIDE0NCwgMTUsIDUsIDIxNCwgMTQzLCAxNSwgNSwgMjE0LCAxMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDYxLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNTMsIDIyNiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTMwLCAxNSwgNSwgMjE0LCAKLSAgICAxNDAsIDMwLCAyNDYsIDY4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjQzLCAxMTgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjQzLCA5NiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQyLCAxMTMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE2MiwgMTUsIDUsIAotICAgIDIxNCwgMTQwLCAzMCwgMjM2LCAzNSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM2LCAxNiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjM1LCAxNjUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzMiwgODQsIDE1LCAKLSAgICA1LCAyMTQsIDE0MCwgMzAsIDIzMCwgMTg4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxOTAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxOSwgMTgwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTUsIDExOCwgCi0gICAgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTA0LCA5NiwgMjQyLCAxMDMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzgsIDMwLCA3MCwgCi0gICAgMTUsIDUsIDIxNCwgMTI2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCA2MSwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAyMTcsIAotICAgIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjE0LCAKLSAgICAxMjIsIDE1LCA1LCAyMTQsIDEyNSwgMTUsIDUsIDIxNCwgMTIzLCAxNSwgNSwgMjE0LCAxMTksIDE1LCA1LCAyMTQsIDEwOCwgCi0gICAgMTUsIDUsIDIxNCwgMTA5LCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyMTQsIDEwNywgMTUsIDUsIDIxMCwgMTE2LCAxNSwgNSwgCi0gICAgMjEwLCAxMTcsIDIxNiwgMjM5LCAxNSwgNSwgMjEwLCAxMTcsIDkyLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMTAsIDExMywgCi0gICAgMTUsIDUsIDIxMCwgMTA2LCAxNSwgNSwgMjEwLCA5MywgMTUsIDUsIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQ1LCAxMTcsIAotICAgIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQzLCAxNSwgNSwgMjEwLCA0MSwgMTUsIDUsIDIxMCwgNDIsIDIzNSwgMywgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyMTAsIDM2LCAxNSwgNSwgMjEwLCAyOCwgMTUsIDUsIDIxMCwgMTMsIDE1LCA1LCAyMTAsIDExLCAxNSwgCi0gICAgNSwgMjEwLCAxMiwgMzAsIDYxLCAxNSwgNSwgMjEwLCAxMCwgMTUsIDUsIDIxMCwgOSwgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIAotICAgIDIzMSwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUzLCAyMzEsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDIyMCwgCi0gICAgMTIyLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjUzLCAKLSAgICAyMzEsIDE1LCAxMzIsIDUsIDEzNCwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI0NywgMTg3LCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjAsIAotICAgIDEyMiwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI0NywgCi0gICAgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCA3MCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgNzAsIDE1LCAxMzIsIDUsIDIxOSwgCi0gICAgMTI1LCA3MCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDcwLCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgNzAsIDE1LCAxMzIsIDUsIAotICAgIDIyOCwgMjAwLCA3MCwgMTUsIDEzMiwgNSwgMTIzLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgMzgsIDE1LCAKLSAgICAxMzIsIDUsIDEzNCwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgCi0gICAgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyNDMsIDM4LCAKLSAgICAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI0MywgMzgsIDE1LCAxMzIsIDUsIAotICAgIDEyMywgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgMzUsIDE1LCAKLSAgICAxMzIsIDUsIDI0NCwgMTEsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDExMywgCi0gICAgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzksIDIxNCwgMTIsIDE3LCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAKLSAgICAyMTksIDEyNSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAKLSAgICAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTIzLCAyMjAsIDczLCAxNSwgCi0gICAgMTMyLCA1LCAxMTMsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3MywgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc0LCAKLSAgICAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjIwLCA3MywgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjIwLCA3MywgCi0gICAgMTUsIDEzMiwgNSwgMjIwLCA3OSwgMzAsIDI0MywgMTE5LCA5NiwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyMCwgNzksIDMwLCAKLSAgICAyNDMsIDExOSwgOTYsIDIzMCwgMTg4LCAxNSwgMTMyLCA1LCAxMjMsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDExMywgMjUxLCAKLSAgICA5NSwgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgOTYsIDIxNCwgMTIsIDE3LCAxNSwgCi0gICAgMTMyLCA1LCAyNDQsIDExLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMzQsIAotICAgIDIxNCwgMTIsIDI0NCwgMjAsIDI0NSwgNzQsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjQ1LCA3MSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAyMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIAotICAgIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE1LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIAotICAgIDIxOCwgNjEsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE4LCAyNTMsIDE1OCwgMTUsIAotICAgIDEzMiwgNSwgMjE5LCAxMjUsIDIxNCwgMTIsIDI0NCwgMjAsIDI1MywgMjI4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAKLSAgICAxMiwgMjQ0LCAyMCwgMjM2LCA4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAxMCwgNjEsIAotICAgIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDEwLCAyNTMsIDE1OCwgMTUsIDEzMiwgNSwgCi0gICAgMjQ1LCAxOTMsIDIxNCwgMTIsIDI0NCwgMjAsIDIxNCwgMTIxLCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjE0LCAxMiwgMjQ0LCAKLSAgICAyMCwgMjE0LCAxMjAsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDI0LCAxNSwgMTMyLCAKLSAgICA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyMywgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIAotICAgIDI0NCwgMjAsIDIzNiwgMjIsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDI1LCA2MSwgCi0gICAgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyMzIsIDIxNiwgMjM5LCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI1MywgMjMyLCAKLSAgICAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI1MywgMjMyLCAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMTIzLCAyNTIsIAotICAgIDE1MCwgMTUsIDEzMiwgNSwgMTEzLCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgMTM0LCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgCi0gICAgMjQ0LCAxMSwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MiwgMTUxLCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI1MiwgMTUxLCAyMTQsIDEyLCAxNywgMTUsIAotICAgIDEzMiwgNSwgMjI4LCAyMTAsIDE1LCAxMzIsIDUsIDIyOCwgMjExLCAxNSwgMTMyLCA1LCAxMjMsIDI0NSwgNzAsIDE1LCAKLSAgICAxMzIsIDUsIDExMywgMjQ1LCA3MCwgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE2OSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIAotICAgIDExMywgMjE2LCAxNjcsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyMTksIDExNCwgMjQ3LCAxODcsIDE1LCAKLSAgICAxMzIsIDUsIDEyMywgMjE2LCAxNjksIDIxNCwgMTIsIDI0NCwgMjAsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY3LCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCA2MSwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDE4OSwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIAotICAgIDEyMywgMjI0LCAyMiwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDU1LCAyNTMsIDIxOSwgMTIzLCAyMTksIDExNSwgMTUsIDEzMiwgCi0gICAgNSwgNTUsIDI1MywgMjE5LCAxMjMsIDIyNCwgMjEsIDE1LCAyMjQsIDE0MSwgNSwgNTUsIDI1MywgMjE5LCAyMTEsIDIwOSwgCi0gICAgMjQ3LCAxNzIsIDE1LCAyMjQsIDE0MSwgNSwgNjcsIDI0OSwgMjI2LCAxNSwgMjI0LCAxNDEsIDUsIDI0NywgMjU1LCAyNDksIAotICAgIDIyNiwgMTUsIDIyNCwgMTQxLCA1LCAyNDcsIDI1NSwgMjE1LCAyMjEsIDEyLCAxMywgMjU1LCAxNTUsIDEyLCAxMywgMjU1LCAKLSAgICAxNTQsIDEyLCAxMywgMjU1LCAxNTMsIDEyLCAxMywgMjU1LCAxNTIsIDEyLCAxMywgMjU1LCAxNTEsIDEyLCAxMywgMjU1LCAKLSAgICAxNTAsIDEyLCAxMywgMjU1LCAxNDksIDEyLCAxMywgMjU1LCAxNDgsIDEyLCAxMywgMjU1LCAxNDcsIDEyLCAxMywgMjU1LCAKLSAgICAxNDYsIDEyLCAxMywgMjU1LCAxNDUsIDEyLCAxMywgMjU1LCAxNDQsIDEyLCAxMywgMjU1LCAxNDMsIDEyLCAxMywgMjU1LCAKLSAgICAxNDIsIDEyLCAxMywgMjU1LCAxNDEsIDEyLCAxMywgMjU1LCAxNDAsIDEyLCAxMywgMjU1LCAxMzksIDEyLCAxMywgMjU1LCAKLSAgICAxMzgsIDEyLCAxMywgMjU1LCAxMzcsIDEyLCAxMywgMjU1LCAxMzYsIDEyLCAxMywgMjU1LCAxMzUsIDEyLCAxMywgMjU1LCAKLSAgICAxMzQsIDEyLCAxMywgMjU1LCAxMzMsIDEyLCAxMywgMjU1LCAxMzIsIDEyLCAxMywgMjU1LCAxMzEsIDEyLCAxMywgMjU1LCAKLSAgICAxMzAsIDEyLCAxMywgMjU1LCAxMjksIDEyLCAxMywgMjU1LCAxMjgsIDEyLCAxMywgMjU1LCAxMjcsIDEyLCAxMywgMjU1LCAKLSAgICAxMjYsIDEyLCAxMywgMjU1LCAxMjUsIDEyLCAxMywgMjU1LCAxMjQsIDEyLCAxMywgMjU1LCAxMjMsIDEyLCAxMywgMjU1LCAKLSAgICAxMjIsIDEyLCAxMywgMjU1LCAxMjEsIDEyLCAxMywgMjU1LCAxMjAsIDEyLCAxMywgMjU1LCAxMTksIDEyLCAxMywgMjU1LCAKLSAgICAxMTgsIDEyLCAxMywgMjU1LCAxMTcsIDEyLCAxMywgMjU1LCAxMTYsIDEyLCAxMywgMjU1LCAxMTUsIDEyLCAxMywgMjU1LCAKLSAgICAxMTQsIDEyLCAxMywgMjU1LCAxMTMsIDEyLCAxMywgMjU1LCAxMTIsIDEyLCAxMywgMjU1LCAxMTEsIDEyLCAxMywgMjU1LCAKLSAgICAxMTAsIDEyLCAxMywgMjU1LCAxMDksIDEyLCAxMywgMjU1LCAxMDgsIDEyLCAxMywgMjU1LCAxMDcsIDEyLCAxMywgMjU1LCAKLSAgICAxMDYsIDEyLCAxMywgMjU1LCAxMDUsIDEyLCAxMywgMjU1LCAxMDQsIDEyLCAxMywgMjU1LCAxMDMsIDEyLCAxMywgMjU1LCAKLSAgICAxMDIsIDEyLCAxMywgMjU1LCAxMDEsIDEyLCAxMywgMjU1LCAxMDAsIDEyLCAxMywgMjU1LCA5OSwgMTIsIDEzLCAyNTUsIAotICAgIDk4LCAxMiwgMTMsIDI1NSwgOTcsIDEyLCAxMywgMjU1LCA5NiwgMTIsIDEzLCAyNTUsIDk1LCAxMiwgMTMsIDI1NSwgOTQsIAotICAgIDEyLCAxMywgMjU1LCA5MywgMTIsIDEzLCAyNTUsIDkyLCAxMiwgMTMsIDI1NSwgOTEsIDEyLCAxMywgMjU1LCA5MCwgMTIsIAotICAgIDEzLCAyNTUsIDg5LCAxMiwgMTMsIDI1NSwgODgsIDEyLCAxMywgMjU1LCA4NywgMTIsIDEzLCAyNTUsIDg2LCAxMiwgMTMsIAotICAgIDI1NSwgODUsIDEyLCAxMywgMjU1LCA4NCwgMTIsIDEzLCAyNTUsIDgzLCAxMiwgMTMsIDI1NSwgODIsIDEyLCAxMywgMjU1LCAKLSAgICA4MSwgMTIsIDEzLCAyNTUsIDgwLCAxMiwgMTMsIDI1NSwgNzksIDEyLCAxMywgMjU1LCA3OCwgMTIsIDEzLCAyNTUsIDc3LCAKLSAgICAxMiwgMTMsIDI1NSwgNzYsIDEyLCAxMywgMjUzLCAxNTYsIDEyLCAxMywgMjUzLCAxNTQsIDEyLCAxMywgMjUzLCAxNTIsIAotICAgIDEyLCAxMywgMjUzLCAxNTAsIDEyLCAxMywgMjUzLCAxNDgsIDEyLCAxMywgMjUzLCAxNDcsIDEyLCAxMywgMjUzLCAxNDUsIAotICAgIDEyLCAxMywgMjUzLCAxNDMsIDEyLCAxMywgMjUzLCAxNDEsIDEyLCAxMywgMjUzLCAxMzksIDEyLCAxMywgMjUxLCA2MiwgCi0gICAgMTIsIDEzLCAyNTEsIDYxLCAxMiwgMTMsIDI1MSwgNjAsIDEyLCAxMywgMjUxLCA1OSwgMTIsIDEzLCAyNTEsIDU4LCAxMiwgCi0gICAgMTMsIDI1MSwgNTcsIDEyLCAxMywgMjUxLCA1NiwgMTIsIDEzLCAyNTEsIDU1LCAxMiwgMTMsIDI1MSwgNTQsIDEyLCAxMywgCi0gICAgMjUxLCA1MywgMTIsIDEzLCAyNTEsIDUyLCAxMiwgMTMsIDI1MSwgNTEsIDEyLCAxMywgMjUxLCA1MCwgMTIsIDEzLCAyNTEsIAotICAgIDQ5LCAxMiwgMTMsIDI1MSwgNDgsIDEyLCAxMywgMjUxLCA0NywgMTIsIDEzLCAyNTEsIDQ2LCAxMiwgMTMsIDI1MSwgNDUsIAotICAgIDEyLCAxMywgMjUxLCA0NCwgMTIsIDEzLCAyNTEsIDQzLCAxMiwgMTMsIDI1MSwgNDIsIDEyLCAxMywgMjUxLCA0MSwgMTIsIAotICAgIDEzLCAyNTEsIDQwLCAxMiwgMTMsIDI1MSwgMzksIDEyLCAxMywgMjUxLCAzOCwgMTIsIDEzLCAyNTEsIDM3LCAxMiwgMTMsIAotICAgIDI1MSwgMzYsIDEyLCAxMywgMjUxLCAzNSwgMTIsIDEzLCAyNDksIDU5LCAxMiwgMTMsIDI0OSwgNTgsIDEyLCAxMywgMjQ5LCAKLSAgICA1NywgMTIsIDEzLCAyNDksIDU2LCAxMiwgMTMsIDI0OSwgNTUsIDEyLCAxMywgMjQ5LCA1NCwgMTIsIDEzLCAyNDksIDUzLCAKLSAgICAxMiwgMTMsIDI0OSwgNTIsIDEyLCAxMywgMjQ5LCA1MSwgMTIsIDEzLCAyNDksIDUwLCAxMiwgMTMsIDI0OSwgNDksIDEyLCAKLSAgICAxMywgMjQ5LCA0OCwgMTIsIDEzLCAyNDksIDQ3LCAxMiwgMTMsIDI0OSwgNDYsIDEyLCAxMywgMjQ5LCA0NSwgMTIsIDEzLCAKLSAgICAyNDksIDQ0LCAxMiwgMTMsIDI0OSwgNDMsIDEyLCAxMywgMjQ5LCA0MiwgMTIsIDEzLCAyNDksIDQxLCAxMiwgMTMsIDI0OSwgCi0gICAgNDAsIDEyLCAxMywgMjQ5LCAzOSwgMTIsIDEzLCAyNDksIDM4LCAxMiwgMTMsIDI0OSwgMzcsIDEyLCAxMywgMjQ5LCAzNiwgCi0gICAgMTIsIDEzLCAyNDksIDM1LCAxMiwgMTMsIDI0OSwgMzQsIDEyLCAxMywgMjQ5LCAzMywgMTIsIDEzLCAyNDksIDMyLCAxMiwgCi0gICAgMTMsIDI0OSwgMzEsIDEyLCAxMywgMjQ5LCAzMCwgMTIsIDEzLCAyNDksIDI5LCAxMiwgMTMsIDI0OSwgMjgsIDEyLCAxMywgCi0gICAgMjQ5LCAyNywgMTIsIDEzLCAyNDksIDI2LCAxMiwgMTMsIDI0OSwgMjUsIDEyLCAxMywgMjQ5LCAyNCwgMTIsIDEzLCAyNDksIAotICAgIDIzLCAxMiwgMTMsIDI0OSwgMjIsIDEyLCAxMywgMjQ5LCAyMSwgMTIsIDEzLCAyNDksIDIwLCAxMiwgMTMsIDI0OSwgMTksIAotICAgIDEyLCAxMywgMjQ5LCAxOCwgMTIsIDEzLCAyNDksIDE3LCAxMiwgMTMsIDI0OSwgMTYsIDEyLCAxMywgMjQ5LCAxNSwgMTIsIAotICAgIDEzLCAyNDksIDE0LCAxMiwgMTMsIDI0OSwgMTMsIDEyLCAxMywgMjQ5LCAxMiwgMTIsIDEzLCAyNDksIDExLCAxMiwgMTMsIAotICAgIDI0OSwgMTAsIDEyLCAxMywgMjQ5LCA5LCAxMiwgMTMsIDI0OSwgOCwgMTIsIDEzLCAyNDksIDcsIDEyLCAxMywgMjQ5LCA2LCAKLSAgICAxMiwgMTMsIDI0OSwgNSwgMTIsIDEzLCAyNDksIDQsIDEyLCAxMywgMjQ5LCAzLCAxMiwgMTMsIDI0OSwgMiwgMTIsIDEzLCAKLSAgICAyNDksIDEsIDEyLCAxMywgMjQ5LCAwLCAxMiwgMTMsIDI0OCwgMjU1LCAxMiwgMTMsIDI0OCwgMjU0LCAxMiwgMTMsIDI0OCwgCi0gICAgMjUzLCAxMiwgMTMsIDI0OCwgMjUyLCAxMiwgMTMsIDI0OCwgMjUxLCAxMiwgMTMsIDI0OCwgMjUwLCAxMiwgMTMsIDI0OCwgCi0gICAgMjQ5LCAxMiwgMTMsIDI0OCwgMjQ4LCAxMiwgMTMsIDI0OCwgMjQ3LCAxMiwgMTMsIDI0OCwgMjQ2LCAxMiwgMTMsIDI0OCwgCi0gICAgMjQ1LCAxMiwgMTMsIDI0OCwgMjQ0LCAxMiwgMTMsIDI0OCwgMjQzLCAxMiwgMTMsIDI0OCwgMjQyLCAxMiwgMTMsIDI0OCwgCi0gICAgMjQxLCAxMiwgMTMsIDI0OCwgMjQwLCAxMiwgMTMsIDI0OCwgMjM5LCAxMiwgMTMsIDI0OCwgMjM4LCAxMiwgMTMsIDI0OCwgCi0gICAgMjM3LCAxMiwgMTMsIDI0OCwgMjM2LCAxMiwgMTMsIDI0OCwgMjM1LCAxMiwgMTMsIDI0OCwgMjM0LCAxMiwgMTMsIDI0OCwgCi0gICAgMjMzLCAxMiwgMTMsIDI0OCwgMjMyLCAxMiwgMTMsIDI0OCwgMjMxLCAxMiwgMTMsIDI0OCwgMjMwLCAxMiwgMTMsIDI0OCwgCi0gICAgMjI5LCAxMiwgMTMsIDI0OCwgMjI4LCAxMiwgMTMsIDI0OCwgMjI3LCAxMiwgMTMsIDI0OCwgMjI2LCAxMiwgMTMsIDI0OCwgCi0gICAgMjI1LCAxMiwgMTMsIDI0OCwgMjI0LCAxMiwgMTMsIDI0NiwgMjMsIDEyLCAxMywgMjQ2LCAyMiwgMTIsIDEzLCAyNDYsIDIxLCAKLSAgICAxMiwgMTMsIDI0NiwgMjAsIDEyLCAxMywgMjQ2LCAxOSwgMTIsIDEzLCAyNDYsIDE4LCAxMiwgMTMsIDI0NiwgMTcsIDEyLCAKLSAgICAxMywgMjQ2LCAxNiwgMTIsIDEzLCAyNDYsIDE1LCAxMiwgMTMsIDI0NiwgMTQsIDEyLCAxMywgMjQ2LCAxMywgMTIsIDEzLCAKLSAgICAyNDYsIDEyLCAxMiwgMTMsIDI0NiwgMTEsIDEyLCAxMywgMjQ2LCAxMCwgMTIsIDEzLCAyNDYsIDksIDEyLCAxMywgMjQ2LCAKLSAgICA4LCAxMiwgMTMsIDI0NiwgNywgMTIsIDEzLCAyNDYsIDYsIDEyLCAxMywgMjQ2LCA1LCAxMiwgMTMsIDI0NiwgNCwgMTIsIAotICAgIDEzLCAyNDYsIDMsIDEyLCAxMywgMjQ2LCAyLCAxMiwgMTMsIDI0NiwgMSwgMTIsIDEzLCAyNDYsIDAsIDEyLCAxMywgMjQ1LCAKLSAgICAyNTUsIDEyLCAxMywgMjQ1LCAyNTQsIDEyLCAxMywgMjQ1LCAyNTMsIDEyLCAxMywgMjQ1LCAyNTIsIDEyLCAxMywgMjQ1LCAKLSAgICAyNTEsIDEyLCAxMywgMjQ1LCAyNTAsIDEyLCAxMywgMjQ1LCAyNDksIDEyLCAxMywgMjQ1LCAyNDgsIDEyLCAxMywgMjQ1LCAKLSAgICAyNDcsIDEyLCAxMywgMjQ1LCAyNDYsIDEyLCAxMywgMjQ1LCAyNDUsIDEyLCAxMywgMjQ1LCAyNDQsIDEyLCAxMywgMjQ1LCAKLSAgICAyNDMsIDEyLCAxMywgMjQ1LCAyNDIsIDEyLCAxMywgMjQ1LCAyNDEsIDEyLCAxMywgMjQ1LCAyNDAsIDEyLCAxMywgMjQ1LCAKLSAgICAyMzksIDEyLCAxMywgMjQ1LCAyMzgsIDEyLCAxMywgMjQ1LCAyMzcsIDEyLCAxMywgMjQ1LCAyMzYsIDEyLCAxMywgMjQ1LCAKLSAgICA1LCAxMiwgMTMsIDI0NSwgNCwgMTIsIDEzLCAyNDUsIDMsIDEyLCAxMywgMjQ1LCAyLCAxMiwgMTMsIDI0NSwgMSwgMTIsIAotICAgIDEzLCAyNDUsIDAsIDEyLCAxMywgMjQ0LCAyNTUsIDEyLCAxMywgMjQ0LCAyNTQsIDEyLCAxMywgMjQ0LCAyNTMsIDEyLCAxMywgCi0gICAgMjQ0LCAyNTIsIDEyLCAxMywgMjQ0LCAyNTEsIDEyLCAxMywgMjQ0LCAyNTAsIDEyLCAxMywgMjQ0LCAyNDksIDEyLCAxMywgCi0gICAgMjQ0LCAyNDgsIDEyLCAxMywgMjQ0LCAyNDcsIDEyLCAxMywgMjQ0LCAyNDYsIDEyLCAxMywgMjQ0LCAyNDUsIDEyLCAxMywgCi0gICAgMjQ0LCAyNDQsIDEyLCAxMywgMjQ0LCAyNDMsIDEyLCAxMywgMjQ0LCAyNDIsIDEyLCAxMywgMjQ0LCAyNDEsIDEyLCAxMywgCi0gICAgMjQ0LCAyNDAsIDEyLCAxMywgMjQ0LCAyMzksIDEyLCAxMywgMjQ0LCAyMzgsIDEyLCAxMywgMjQ0LCAyMzcsIDEyLCAxMywgCi0gICAgMjQ0LCAyMzYsIDEyLCAxMywgMjQ0LCAyMzUsIDEyLCAxMywgMjQ0LCAyMzQsIDEyLCAxMywgMjQ0LCAyMzMsIDEyLCAxMywgCi0gICAgMjQ0LCAyMzIsIDEyLCAxMywgMjQ0LCAyMzEsIDEyLCAxMywgMjQ0LCAyMzAsIDEyLCAxMywgMjQ0LCAyMjksIDEyLCAxMywgCi0gICAgMjQ0LCAyMjgsIDEyLCAxMywgMjQ0LCAyMjcsIDEyLCAxMywgMjQ0LCAyMjYsIDEyLCAxMywgMjQ0LCAyMjUsIDEyLCAxMywgCi0gICAgMjQ0LCAyMjQsIDEyLCAxMywgMjQ0LCAyMjMsIDEyLCAxMywgMjQ0LCAyMjIsIDEyLCAxMywgMjQ0LCAyMjEsIDEyLCAxMywgCi0gICAgMjQ0LCAyMjAsIDEyLCAxMywgMjQ0LCAyMTksIDEyLCAxMywgMjQ0LCAyMTgsIDEyLCAxMywgMjQ0LCAyMTcsIDEyLCAxMywgCi0gICAgMjQ0LCAyMTYsIDEyLCAxMywgMjQ0LCAyMTUsIDEyLCAxMywgMjQ0LCAyMTQsIDEyLCAxMywgMjQ0LCAyMTMsIDEyLCAxMywgCi0gICAgMjQ0LCAyMTIsIDEyLCAxMywgMjQ0LCAyMTEsIDEyLCAxMywgMjQ0LCAyMTAsIDEyLCAxMywgMjQ0LCAyMDksIDEyLCAxMywgCi0gICAgMjQ0LCAyMDgsIDEyLCAxMywgMjQ0LCAyMDcsIDEyLCAxMywgMjQ0LCAyMDYsIDEyLCAxMywgMjQ0LCAyMDUsIDEyLCAxMywgCi0gICAgMjQ0LCAyMDQsIDEyLCAxMywgMjQ0LCAyMDMsIDEyLCAxMywgMjQ0LCAyMDIsIDEyLCAxMywgMjQ0LCAyMDEsIDEyLCAxMywgCi0gICAgMjQ0LCAyMDAsIDEyLCAxMywgMjQ0LCAxOTksIDEyLCAxMywgMjQ0LCAxOTgsIDEyLCAxMywgMjQ0LCAxOTcsIDEyLCAxMywgCisgICAgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMTg0LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIAorICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjQwLCAxNjEsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAKKyAgICAyNDAsIDE2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIAorICAgIDYsIDEsIDE0NCwgMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCAKKyAgICA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxODQsIAorICAgIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgNTksIAorICAgIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIAorICAgIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAKKyAgICAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgCisgICAgMCwgMjIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAKKyAgICAwLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIDAsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAKKyAgICAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgCisgICAgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIAorICAgIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTEsIDExOCwgCisgICAgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4NCwgNywgNCwgCisgICAgMSwgMjExLCAxMTgsIDIsIDE4NCwgNywgNiwgMSwgMjMwLCAyMjgsIDIzMiwgMTkxLCA3LCA0LCAxLCAyMzAsIDIyOCwgMjMyLCAKKyAgICAxOTEsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjgsIDIxNCwgMTA1LCA3LCA2LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyOSwgMjYsIDQsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAKKyAgICAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgCisgICAgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTcsIAorICAgIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgCisgICAgMjQ1LCAxMDksIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIAorICAgIDQsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjQ1LCAKKyAgICAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgCisgICAgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAKKyAgICAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYxLCAyNiwgCisgICAgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgCisgICAgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAKKyAgICAyMjQsIDE1NywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCisgICAgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTcsIDI2LCA2LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIAorICAgIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIAorICAgIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDQsIAorICAgIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKKyAgICAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgCisgICAgMTYxLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAKKyAgICAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIAorICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAKKyAgICAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MSwgCisgICAgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgCisgICAgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAKKyAgICAyNTQsIDE1MiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgCisgICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIxNCwgMTMsIAorICAgIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE0LCAxMywgMjYsIDQsIAorICAgIDEsIDIyNiwgMjA0LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAKKyAgICAxNTgsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAKKyAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNCwgMSwgMjQ1LCA3MiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIAorICAgIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIAorICAgIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgCisgICAgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgCisgICAgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAorICAgIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgCisgICAgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIAorICAgIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgCisgICAgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAorICAgIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIAorICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCisgICAgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIxMywgMTIwLCAyNiwgNiwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDIzMSwgMjM3LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNzAsIDI2LCAyMzQsIDgsIDI2LCAyMjQsIAorICAgIDE3MCwgMjYsIDIyNCwgMTU3LCAyNiwgMjI1LCAxNzgsIDI2LCAyNDgsIDQsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjQ1LCA3MiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc4LCAyNiwgCisgICAgNCwgMSwgMjQ1LCA3MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIAorICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNzAsIDI2LCAyMjQsIDE1OCwgMjIsIAorICAgIDIxNCwgMTMsIDI2LCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAorICAgIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIyNiwgMTE0LCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIzMSwgMjM3LCAKKyAgICAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI2LCAxMTQsIDI2LCAyNDgsIAorICAgIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgCisgICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzNywgMjYsIDQsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjMsIDQxLCAyLCAyNDgsIDE2MSwgCisgICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzNywgCisgICAgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIDI2LCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCA0LCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgCisgICAgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAKKyAgICAyMTksIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjYsIDExNCwgMjYsIAorICAgIDYsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDIyNCwgMTcwLCAyNiwgMjI2LCAxMTQsIDI2LCAyNDgsIDE2MSwgMjQ1LCAxNTksIDIyNCwgMzAsIAorICAgIDI0NSwgMTY4LCAyMjQsIDMwLCAyNDUsIDE1OSwgMjE5LCAyMCwgMjQ1LCAxNjgsIDIxOSwgMjAsIDIxNiwgMTQyLCAyMTksIAorICAgIDIwLCAyNDQsIDE3LCAyMTksIDIwLCAyMTksIDEyNSwgMjE5LCAyMCwgMjQ0LCAxMjAsIDIxOSwgMjAsIDIyNCwgMTQ0LCAKKyAgICAyMTksIDIwLCAyMTYsIDE3MSwgMjE5LCAyMCwgMjQyLCA0MiwgMjE5LCAyMCwgMjEwLCA4NywgMjExLCAyNDUsIDIxOSwgMjAsIAorICAgIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDcyLCAyMTAsIDg3LCAyMTEsIDI0NSwgMjM1LCA2OSwgMjMzLCA0NCwgNzksIDIyMiwgCisgICAgMjQ2LCA3OSwgMjQwLCAxNzUsIDIyOCwgNzMsIDI0MCwgMTc1LCAyNDQsIDEyMCwgMjQ4LCAxNjQsIDI0NSwgMTU5LCAyNDgsIAorICAgIDE2NCwgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMDMsIDEzMCwgNTIsIDY3LCAyMzIsIDIxOSwgNTIsIDEyMSwgMjMyLCAyMTksIAorICAgIDQzLCAyMTksIDE1NywgMjI0LCAxLCA3OSwgNDQsIDIxOSwgMTU3LCAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjMyLCAxMTUsIAorICAgIDIyNCwgMSwgNzksIDIxOSwgMTU3LCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgNDMsIDUyLCAyMjQsIDEsIDc5LCA0NCwgNTIsIAorICAgIDIyNCwgMSwgNzksIDUyLCAyMzIsIDExNSwgMjI0LCAxLCA3OSwgNTIsIDI0MSwgMTcwLCAyMjQsIDEsIDc5LCAyNDgsIDIxMywgCisgICAgNTIsIDI0OCwgMjEzLCAyNTEsIDEyMSwgMjE1LCAyMjMsIDI1MSwgMTIxLCAxMjMsIDU5LCAyMzMsIDYyLCAxMTMsIDU5LCAKKyAgICAyMzMsIDYyLCAyMDMsIDI0NSwgMTcxLCAyNDAsIDE3MywgMjI1LCAxMywgMjMyLCAyMjAsIDIyMCwgMTM5LCAyMjYsIDE5LCAKKyAgICAyMjAsIDEzOSwgMjMzLCA0NCwgMjQ1LCAxNjYsIDIyMiwgMjQ2LCAyNDUsIDE2NiwgMjI0LCAyNDksIDI0NywgMjA0LCAyNDQsIAorICAgIDI3LCAyMzMsIDQ0LCAyMjYsIDEyMSwgMjIyLCAyNDYsIDIyNiwgMTIxLCAyMjksIDE5OSwgMjI4LCA3OCwgMjE5LCAyMCwgCisgICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDIyNCwgMTkzLCA1MiwgCisgICAgMjI0LCAxOTMsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjIzLCA1MiwgMjI0LCAxOTMsIDIyMywgNTIsIDUyLCAyMjQsIDE5MywgCisgICAgMjIzLCA1MiwgMjE1LCAyMTIsIDIyNCwgMTkzLCAyNTAsIDI0NiwgMjE5LCAxNTcsIDIzMywgNDgsIDI1NCwgMTE4LCAyMjQsIAorICAgIDEsIDc5LCAyMTksIDE1NywgMjIyLCAyNTAsIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjMsIDExMCwgNzksIDUyLCAyNDUsIAorICAgIDM5LCA3OSwgMjM1LCAyMDgsIDIyNiwgMTIzLCAyMTQsIDE4MCwgMTM1LCAyMTYsIDExMiwgMjUwLCAyNDcsIDIzNSwgMjIzLCAKKyAgICAyMjUsIDEzLCAyNTMsIDIyMiwgMjQwLCAxNzYsIDI1MSwgMTIxLCAyNDQsIDEwLCAyMTksIDk3LCA0MywgNDIsIDI1MSwgCisgICAgMTY2LCAyLCAyMjQsIDEwLCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMjQsIDEwLCA1MiwgMjI0LCAxNiwgNzksIDIyNCwgMTYsIAorICAgIDI0NSwgMzksIDc5LCAyNDUsIDM5LCAyMjQsIDE2LCA3OSwgMjE2LCA3MSwgNSwgMjQ1LCA3MywgMjIzLCA1MiwgMjI1LCA3MSwgCisgICAgNTAsIDg1LCAxNDAsIDI1MSwgMTIxLCA4NSwgOTcsIDI1MSwgMTIxLCAxMjEsIDI1MywgMjI0LCAyMjMsIDUyLCAyMjAsIAorICAgIDE1MiwgMjUwLCA5LCAyMTQsIDE2MywgMTEzLCAyNTMsIDIyMywgMjU0LCAxNjcsIDIxMywgMTg4LCAyNDksIDIyNSwgMjMwLCAKKyAgICAxODcsIDUwLCAyMTcsIDIzNSwgMjQ4LCAxNjQsIDIzNSwgMjAwLCAyMTQsIDE4MCwgMjQ0LCA2MCwgMjI0LCAxNDQsIDc5LCAKKyAgICAxMzQsIDU5LCAyMjQsIDE0MywgMjI0LCAyNywgMjI0LCAxOTMsIDI0NCwgMTksIDU5LCAyMjQsIDE0MywgMjQ0LCA4OSwgNTksIAorICAgIDIyNCwgMTQzLCAxMTMsIDU5LCAyMjQsIDE0MywgMjQ0LCAxOSwgNTksIDc5LCAyNDYsIDEyNiwgMjQ5LCAxMzgsIDIxNSwgCisgICAgMjIyLCA2NywgMjQ0LCAxOSwgMjQ3LCAxMjYsIDIzMSwgODcsIDExLCAyMTksIDIwLCAyMTEsIDIwOSwgMjM1LCA2OSwgMjQzLCAKKyAgICAyMzQsIDI1NCwgNjAsIDIzNSwgMTk4LCAyMTYsIDg2LCAyMzUsIDE5OCwgMjIwLCAxMzksIDIzNSwgMTk4LCAyMjUsIDI1LCAKKyAgICAyMzMsIDQ0LCAyMzUsIDE3MSwgMjIyLCAyNDYsIDIzNSwgMTcxLCAyNDQsIDEwMCwgMjE4LCA5MSwgMjM1LCAxNzEsIDIyNCwgCisgICAgMjQ5LCAyNDcsIDIwNCwgMjM1LCAxNzEsIDIzNSwgMjM1LCAyMTcsIDE4MywgMjE3LCAyNTIsIDI1NSwgMTQsIDIxNywgMTgzLCAKKyAgICAyMTcsIDI1MiwgMjM1LCAyMzUsIDksIDI0NCwgMjgsIDIyMCwgODIsIDI1NSwgMTQsIDksIDI0NCwgMjgsIDIyMCwgODIsIAorICAgIDIyOSwgMTk0LCAyMSwgMjIwLCA4MywgMjI4LCA3NCwgMjEsIDIyMCwgODMsIDIxOCwgMjQsIDIxMCwgODYsIDIxOCwgMjQsIAorICAgIDcsIDQsIDEsIDc0LCAyMTgsIDI0LCAxNjEsIDIxOCwgMjQsIDE5MCwgMjE4LCAyNCwgMTk1LCAyMTgsIDI0LCAxOTksIDIxOCwgCisgICAgMjQsIDE5NiwgMjE4LCAyNCwgMjAxLCAyMTgsIDI0LCA5NiwgNTAsIDIxOCwgMjQsIDIzMCwgMTg2LCAyMTgsIDI0LCAyNDUsIAorICAgIDEwNiwgNTAsIDIxOCwgMjQsIDQzLCAyMjYsIDcsIDIxOCwgMjQsIDQ0LCAyMjYsIDcsIDIxOCwgMjQsIDcsIDQsIDEsIDIzMCwgCisgICAgMzAsIDIxOCwgNjYsIDIxMCwgODYsIDIxOCwgNjYsIDExMSwgMjE4LCA2NiwgMTA1LCAyMTgsIDY2LCAxNTgsIDIxOCwgNjYsIAorICAgIDE2MSwgMjE4LCA2NiwgMTkwLCAyMTgsIDY2LCAxOTUsIDIxOCwgNjYsIDE5OSwgMjE4LCA2NiwgMTk2LCAyMTgsIDY2LCAKKyAgICAyMDEsIDIxOCwgNjYsIDk2LCA1MCwgMjE4LCA2NiwgMjMwLCAxODYsIDIxOCwgNjYsIDI0NSwgMTA2LCA1MCwgMjE4LCA2NiwgCisgICAgNDMsIDIyNiwgNywgMjE4LCA2NiwgNDQsIDIyNiwgNywgNywgMjE4LCA2NiwgNCwgMSwgNjEsIDcsIDIxOCwgNjYsIDQsIDEsIAorICAgIDc2LCA3LCAyMTgsIDY2LCA0LCAxLCA3OCwgNywgMjE4LCA2NiwgNCwgMSwgMjExLCAxNzgsIDcsIDIxOCwgNjYsIDQsIDEsIAorICAgIDIyMSwgMTk3LCA3LCAyMTgsIDY2LCA0LCAxLCAyNDIsIDY3LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzUsIDI5LCA3LCAyMTgsIAorICAgIDY2LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjYsIDQsIDEsIDE5NCwgNywgMjE4LCA2NiwgNCwgMSwgMjMwLCAzMCwgNywgMjE4LCAKKyAgICA2NiwgNCwgMSwgMjI2LCAxMDksIDcsIDIxOCwgNjYsIDQsIDEsIDIyMiwgOTMsIDcsIDIxOCwgNjYsIDQsIDEsIDIxNywgCisgICAgMTUzLCAyNDUsIDU0LCA1MCwgMjQ5LCAyMzUsIDUwLCAyNDksIDEyNSwgNTAsIDI0NCwgMywgMjQ0LCA2LCA1MCwgMjMyLCAKKyAgICAyMDQsIDUwLCAyMzAsIDE5OSwgNTAsIDIyOSwgMjE1LCA1MCwgMjI1LCAxNjUsIDUwLCAyMjIsIDEyMCwgNTAsIDIxMSwgCisgICAgMjE3LCA1MCwgMTY2LCAyMjAsIDUxLCA1MCwgMjQ3LCAxMzUsIDUwLCAyNDUsIDU1LCA1MCwgMjM0LCA4MiwgNTAsIDIxNSwgCisgICAgMTEzLCA1MCwgMjQ2LCAxMDksIDUwLCAyNDMsIDQ3LCAyMjUsIDE5NiwgNTAsIDIyNSwgMTYzLCA1MCwgMjQyLCAxMTYsIDUwLCAKKyAgICAyNTMsIDE5MCwgNTAsIDI0MCwgMjM1LCA1MCwgMjUwLCAxOTMsIDUwLCAyMzIsIDE5NywgMjE2LCA0LCA1MCwgMjE5LCAyLCAKKyAgICA1MCwgMjE2LCAyNDYsIDUwLCAyMzUsIDI0OCwgMjIyLCAxMjAsIDUwLCAyMTUsIDk3LCAyMzIsIDIwNCwgNTAsIDM4LCA0MywgCisgICAgMjQyLCA2LCA0OCwgMzgsIDQ0LCAyNDIsIDYsIDQ4LCAzOCwgMjAwLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjE5LCAKKyAgICAyNTMsIDY3LCAyMzIsIDIyMCwgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCA4MCwgNDgsIDM4LCAyNTAsIDEwLCA4MCwgNDgsIAorICAgIDM4LCA0MywgODAsIDQ4LCAzOCwgNDQsIDgwLCA0OCwgMzgsIDIyMiwgMjM3LCAyMjYsIDEyNCwgMzgsIDI1MCwgMTAsIDIyMiwgCisgICAgMjM3LCAyMjYsIDEyNCwgMzgsIDI1NCwgOTYsIDIyMiwgMjM3LCAyMjYsIDEyNCwgMzgsIDEzNCwgMTcwLCA0OCwgMzgsIAorICAgIDI0NCwgMTksIDE3MCwgNDgsIDM4LCAyNDUsIDE1NCwgMjUwLCA0MywgMzgsIDI0NSwgMTU0LCAyMTgsIDIzNiwgMzgsIDI0NSwgCisgICAgMTU0LCAyNDgsIDAsIDM4LCAyNDUsIDE1NCwgMjUwLCA0NCwgMjUyLCAxODgsIDM4LCA0MywgNDQsIDgwLCA0OCwgMzgsIAorICAgIDI0NSwgMTU0LCAyMjEsIDE5MCwgMzgsIDI0NSwgMTU0LCAyMzQsIDE0MSwgMzgsIDI0NSwgMTU0LCAyMTQsIDE1NSwgMjI1LCAKKyAgICAxMCwgMjE1LCAyMjYsIDM4LCAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDUyLCA2NywgMjE4LCAxMDUsIDIyNiwgCisgICAgMTI0LCAzOCwgMjU0LCAxMDYsIDg3LCAzOCwgMjE1LCAyMTIsIDIxNCwgMTgyLCAzOCwgMjExLCAyNDcsIDI1MSwgMTQ4LCAKKyAgICA0OCwgMzgsIDE0MCwgODAsIDIyNiwgMTI0LCAzOCwgMjAwLCA1MiwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA5NywgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDM4LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgNDMsIAorICAgIDgwLCA1MSwgMzgsIDQ0LCA4MCwgNTEsIDM4LCAyNTMsIDIyNSwgNDgsIDI1NSwgMjAsIDIyNiwgMjM1LCAyNTUsIDQsIDIxNiwgCisgICAgNDMsIDIxNiwgMTk3LCAyMTgsIDc1LCAxMzksIDYsIDI1MSwgNzQsIDI0OCwgNzksIDI1MCwgMTg2LCAyNTAsIDE4MywgMjMyLCAKKyAgICAyMjAsIDg3LCAyNTAsIDI0OCwgMjI2LCAyMzUsIDI1MSwgMzQsIDIxNCwgMTg5LCAyNDUsIDU2LCAyNDksIDE5OSwgMjIxLCAKKyAgICAxODcsIDI0OCwgNzksIDI0NCwgMTg3LCAxMTksIDQsIDI0MywgMjA5LCAxMTksIDYsIDI0MiwgNjcsIDI1MSwgMjI3LCA2LCAKKyAgICAyNDIsIDY3LCAxMzksIDYsIDI0MiwgNjcsIDIyNSwgNDAsIDI0OSwgMTk5LCAyMjUsIDQwLCAyNDksIDIwMCwgMTE1LCAxMTMsIAorICAgIDIyNSwgMTExLCAxMTksIDYsIDc0LCAyNTEsIDIyNywgNiwgNzQsIDExOSwgNiwgMTU2LCAxMTksIDQsIDE1NiwgMjMzLCAKKyAgICAxNTUsIDU3LCAyNTIsIDE0OSwgODcsIDEzOSwgNiwgMjMwLCAzMCwgMjI3LCAyMDAsIDUwLCAyMTksIDMzLCAyMjMsIDEyMiwgCisgICAgMjQ5LCAxNzAsIDExOSwgNiwgMjI2LCAxMDksIDEzOSwgNiwgMjI2LCAxMDksIDEzOSwgNiwgMjI0LCA5OSwgMTE5LCA2LCAKKyAgICAxNTMsIDI1MSwgMjI3LCA2LCAxNTMsIDEzOSwgNiwgMTUzLCAyMjQsIDE5OSwgMjE3LCA3MiwgMjIzLCA2NSwgMjIwLCAxMzQsIAorICAgIDc5LCAyMTcsIDIsIDUwLCAyMTUsIDI1NCwgMTY0LCA1MCwgMjEzLCAyNDAsIDEzOSwgNiwgMjEwLCAxNTksIDIyNiwgMTM3LCAKKyAgICA1MCwgMjI2LCAyMjUsIDUwLCAyMzUsIDIwMCwgMjI2LCAyMjUsIDUwLCAyNTEsIDIyNywgNiwgMjEwLCAxNTksIDIxNSwgOTQsIAorICAgIDI2LCA0LCAxLCAyMzUsIDE5MiwgMjM0LCAxNzksIDUwLCAyNTQsIDExNSwgNTAsIDExOSwgNiwgMjUzLCAxNjYsIDI1MSwgCisgICAgMjI3LCA2LCAyNTEsIDc0LCAyNDUsIDc2LCA4NywgMTE5LCA0LCA3NiwgMTE5LCA2LCA3NiwgMTE5LCA2LCAyNDUsIDE0LCAKKyAgICAyMTUsIDk0LCA2LCAyNDUsIDE0LCAxMTksIDYsIDE5NCwgMTE5LCA0LCA3OCwgMTA5LCA4NywgMjUyLCAzNywgODcsIDI0MiwgCisgICAgMjA5LCA4NywgMjQ4LCAxOTgsIDg3LCAyMzUsIDIzOSwgMjE5LCAzMSwgMjIyLCAxODksIDYsIDIyNCwgOTksIDI0NCwgMTkwLCAKKyAgICA1MCwgMTM5LCA0LCAyMjUsIDExMSwgMTM5LCA0LCAyNDMsIDExNCwgMTM5LCA2LCAyNDMsIDExNCwgMTM5LCA2LCAyMjUsIAorICAgIDExMSwgMTM5LCAyMzAsIDI5LCAyMTgsIDQxLCAyMTUsIDk0LCAzNSwgNiwgMjQzLCAyMDksIDIxNSwgOTQsIDM1LCA2LCAKKyAgICAxNTYsIDIyMywgNTIsIDM1LCA2LCAxNTYsIDIxNSwgOTQsIDM1LCA2LCAyMTEsIDExNywgMTM5LCAzMiwgNiwgMjQ5LCA2OCwgCisgICAgMTM5LCAzMiwgNCwgMjQ5LCA2OCwgMTM5LCAzMiwgNCwgNzYsIDEzOSwgMzIsIDQsIDc0LCAxMzksIDMyLCA0LCAyMzUsIAorICAgIDE1MCwgMjI0LCAxNzMsIDIzMiwgMjE5LCAyMTUsIDk0LCAyNTQsIDEzNCwgMjI1LCAxODYsIDUwLCAyNTQsIDE4OSwgMjE1LCAKKyAgICA5NCwgNCwgMjQ1LCAxNCwgMTYsIDMxLCAyMjEsIDI1NCwgMjE5LCAzMSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjIwLCAKKyAgICAxMjAsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyOCwgMTk5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMTYsIDI0MiwgCisgICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAxNjksIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAyMTIsIAorICAgIDExNCwgMjQ0LCAxMCwgMTIzLCAyNDQsIDEyNSwgMjEyLCAxMTQsIDI0NCwgMTAsIDExMywgMjQ0LCAxMjQsIDIxMiwgMTE0LCAKKyAgICAyNDQsIDEwLCAxMzQsIDI0NCwgMTI0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjQ0LCAxOSwgMjQ0LCAxMjQsIDIxMiwgMTE0LCAKKyAgICAyNDQsIDEwLCAxMjMsIDIxOSwgMTE3LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjQ0LCA4OSwgMjE5LCAxMTUsIDIxMiwgMTE0LCAKKyAgICAyNDQsIDEwLCAxMjMsIDI0NSwgMTk2LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTM0LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgCisgICAgMTAsIDI0NCwgODksIDI0NSwgMTk0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjIwLCAxMjQsIDI0NSwgMTk0LCAyNDQsIDEwLCAKKyAgICAyMjcsIDIwMSwgMTExLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMDUsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMTU4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE2MSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTAsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk1LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5OSwgMjIyLCAyMDAsIDIyNywgMjAyLCAKKyAgICAxOTYsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjAxLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNiwgMjQ4LCAyMjIsIDIwMCwgCisgICAgMjI3LCAyMDIsIDI0NSwgMTc1LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNSwgNzYsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAKKyAgICAxMjIsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyNDAsIAorICAgIDIxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ4LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDExMSwgNCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAxMDUsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTU4LCA0LCAyMjIsIDIwMCwgMjI3LCAKKyAgICAyMDIsIDE2MSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTAsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk1LCA0LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDE5OSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTYsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgCisgICAgMjAxLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNiwgMjQ4LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NSwgMTc1LCA0LCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNSwgNzYsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjIsIDQsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxNywgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxNywgCisgICAgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDksIAorICAgIDI1MSwgNzUsIDI0OSwgNjgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIAorICAgIDIwMiwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIyMywgNTIsIDEyMywgMjQwLCAyMTcsIDcsIAorICAgIDQsIDEsIDIyMywgNTIsIDI1MSwgNzQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE5LCAxMjcsIDIzMywgODQsIDE3LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyNDUsIDIzNCwgMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgCisgICAgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxNiwgMTQ4LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjEwLCAKKyAgICA4NywgMjE2LCAxNjcsIDE0MCwgNzUsIDIxNCwgMTUzLCA3NSwgOTcsIDc1LCAyNDYsIDExMiwgNzUsIDQzLCA0NCwgNzUsIAorICAgIDEyMCwgMTI0LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIAorICAgIDIyOCwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDE0MCwgODAsIDIsIDkxLCA5NywgODAsIDIsIDkxLCAxNDAsIDIxMiwgCisgICAgMzYsIDc1LCA5NywgMjEyLCAzNiwgNzUsIDE0MCwgMTEzLCAyNDEsIDI0MSwgNzUsIDIxNCwgMTUzLCAxMTMsIDI0MSwgMjQxLCAKKyAgICA3NSwgOTcsIDExMywgMjQxLCAyNDEsIDc1LCAyNDYsIDExMiwgMTEzLCAyNDEsIDI0MSwgNzUsIDE0MCwgODAsIDIsIDIxNywgCisgICAgNzgsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDgwLCAyNDMsIDI1MSwgCisgICAgMTMwLCA5NywgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMTIwLCAxMjQsIDgwLCAyLCAKKyAgICAyNTIsIDEzNSwgMTQwLCA4MCwgMiwgMTAzLCA5NywgODAsIDIsIDEwMywgMTQwLCA4MCwgMiwgMjMyLCAxMjksIDk3LCA4MCwgCisgICAgMiwgMjMyLCAxMjksIDQzLCA0NCwgMjEyLCAzNiwgNzUsIDQzLCA0NCwgODAsIDIsIDkxLCAyNDYsIDExMiwgMjEwLCAzNSwgCisgICAgNzUsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAorICAgIDI0NCwgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMzMsIDQzLCAyNDYsIDExMiwgODAsIDIsIDIxNiwgNzgsIDIyMiwgCisgICAgMjQ0LCA5NywgODAsIDIsIDI0OSwgMTY5LCAyNDYsIDExMSwgMjQ2LCAxMTIsIDgwLCAyLCAyNDksIDE2OSwgMjMzLCA0MywgCisgICAgMjU0LCA5NiwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyNTAsIDEwLCAyMTYsIDE1LCAyMjAsIDE1NSwgNzUsIDIyOCwgNjEsIAorICAgIDIxMiwgOSwgODAsIDIxNiwgNDMsIDIwMCwgMTMwLCAxNDAsIDgwLCAyMTYsIDQzLCAyNTIsIDE0OSwgMTE1LCA5NywgODAsIAorICAgIDIxNiwgNDMsIDEzMCwgMjU0LCA5NiwgMjA0LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjA0LCAyNTAsIDQ0LCA3NSwgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMjE0LCAKKyAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjQ0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjMzLCAKKyAgICA0MywgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTUyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIAorICAgIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDIzMywgNDMsIDk3LCA4MCwgMTE1LCAxNDAsIDc1LCAyMTQsIDE1MywgODAsIDE0MCwgNjQsIDI0NiwgMTEyLCA3NSwgMTQwLCAKKyAgICA4MCwgMTE1LCA5NywgNzUsIDE0MCwgMjI2LCA3NCwgMjUzLCAyNTUsIDIxNCwgMTUzLCAyMjYsIDc0LCAyNTMsIDI1NSwgOTcsIAorICAgIDIyNiwgNzQsIDI1MywgMjU1LCAyNDYsIDExMiwgMjI2LCA3NCwgMjUzLCAyNTUsIDE0MCwgMjQyLCA2LCAxMTUsIDk3LCAKKyAgICAyNDIsIDUsIDk3LCAyNDIsIDYsIDExNSwgMTQwLCAyNDIsIDUsIDE0MCwgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIAorICAgIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzUsIDIxNCwgMTUzLCA1MiwgNzUsIDk3LCA1MiwgNzUsIDI0NiwgCisgICAgMTEyLCA1MiwgNzUsIDQzLCA0NCwgNTIsIDc1LCAxMjAsIDEyNCwgNTIsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDUyLCA3NSwgCisgICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDUyLCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDUyLCA3NSwgMjE5LCAzMCwgMjEyLCA5LCAKKyAgICA1MiwgNzUsIDE0MCwgMjE1LCAyMTIsIDc1LCA5NywgMjE1LCAyMTIsIDc1LCAxNDAsIDIxOCwgMjMyLCA3NSwgOTcsIDIxOCwgCisgICAgMjMyLCA3NSwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgMTEyLCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTYzLCAKKyAgICA3NSwgMjE0LCAxNTMsIDI0OCwgMTYzLCA3NSwgOTcsIDI0OCwgMTYzLCA3NSwgMjQ2LCAxMTIsIDI0OCwgMTYzLCA3NSwgCisgICAgMTQwLCA4MCwgMjE2LCA0MywgMTMwLCA5NywgODAsIDIxNiwgNDMsIDEzMCwgMTQwLCA3MSwgNzUsIDIxNCwgMTUzLCA3MSwgCisgICAgNzUsIDk3LCA3MSwgNzUsIDI0NiwgMTEyLCA3MSwgNzUsIDIxNCwgMTUzLCA3MSwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgCisgICAgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxNywgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE4LCAyLCAKKyAgICAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE4LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIAorICAgIDUyLCA3NSwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgMjAxLCAyMjUsIDIxNywgOTcsIDcxLCA4MCwgMjQzLCAyNTEsIAorICAgIDIxMiwgNTYsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIxNiwgNDMsIDI0OSwgMTY4LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIAorICAgIDIxNiwgNDMsIDI0OSwgMTY4LCAxMjAsIDEyNCwgNzEsIDc1LCA0NCwgODAsIDIsIDQsIDI1MCwgNDMsIDI0NiwgMTEyLCA4MCwgCisgICAgMTQwLCA2NCwgMjE0LCAxNTMsIDc1LCAxMzQsIDk3LCAyNTMsIDI1NSwgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIAorICAgIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgCisgICAgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjI2LCAxNzcsIDc1LCA5NywgMjI2LCAxNzcsIDc1LCA0MywgCisgICAgNDQsIDIyNiwgMTc3LCA3NSwgMzEsIDI1NCwgMTYzLCAyNDksIDIyMiwgMjI2LCAxLCAyNDcsIDI0MSwgMjE2LCAxODgsIAorICAgIDI0NSwgMzUsIDIxNiwgMTg4LCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ1LCAzNiwgMjQ1LCAxNjAsIDIyMCwgMTI5LCAyMzUsIAorICAgIDI1MiwgMjI5LCAyMjYsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjI4LCA1NywgMjU0LCAxMzIsIDI0NSwgMTc4LCAyMjYsIDIzNSwgCisgICAgNCwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NywgMTQ2LCAyMjgsIDU3LCAKKyAgICAyNDksIDE5NiwgMjUzLCAyNDYsIDIzMSwgNjcsIDQsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjMxLCA2NywgMjQ1LCAxNTEsIAorICAgIDY0LCAyMjQsIDE3NSwgMjMwLCAyOSwgMjI0LCAxODMsIDIzMCwgMjksIDI0OSwgMTczLCAyMzAsIDI5LCAyMTgsIDQxLCAKKyAgICAyMzAsIDE4NywgNTAsIDIzMCwgMTg1LCA1MCwgNTksIDIyNSwgMjUsIDI0NywgMTc3LCAyMTksIDk3LCAyMjAsIDEzMCwgCisgICAgMjMwLCAxODYsIDI1MywgMjI1LCAyMjYsIDE3MSwgMjIyLCAyMzcsIDIyNiwgMTcxLCAyNTEsIDEyMiwgMjI2LCAxNzEsIDQyLCAKKyAgICAyMjIsIDE5NSwgMjQ5LCAxMTcsIDIyMiwgMTk1LCAyNDQsIDEyLCAyMjIsIDE5NSwgMjI0LCAxNzEsIDExMiwgMjM1LCAyNDEsIAorICAgIDQ0LCAyNTQsIDExNywgMjU0LCAxMTcsIDIzMSwgOTMsIDI1NCwgMTE3LCAyMTksIDEsIDI1NCwgMTE3LCAyNDcsIDE3OSwgCisgICAgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NywgMTgyLCAyMjYsIDEyLCAxMTIsIDIyOCwgNTcsIDIyNiwgMTIsIDExMiwgMjMyLCAKKyAgICAxNTIsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIzNSwgMjA1LCAyMTQsIDE3NSwgMjM1LCAyMTgsIDUyLCAyMzUsIAorICAgIDIxOCwgMjE1LCAyMTIsIDIzNSwgMjE4LCAyNDksIDE5MCwgMjM1LCAyMTgsIDIxOCwgMTQsIDIzNSwgMjE4LCAyMTMsIDEyOSwgCisgICAgMjM1LCAyMTgsIDI1MCwgMTAsIDIzNSwgMjE4LCAyNTAsIDEwLCAyNDksIDE5MCwgMjM1LCAyMTgsIDI1NCwgOTYsIDI0OSwgCisgICAgMTkwLCAyMzUsIDIxOCwgMjE2LCAxODcsIDI1MiwgNzUsIDIyMywgMTQwLCAyMjQsIDE3MiwgNTksIDIzMCwgMTg2LCAyNDUsIAorICAgIDQxLCAyNDMsIDUzLCAyMjQsIDE3MiwgMjQxLCA2NCwgMjE2LCA5MCwgMjI2LCAxNzEsIDIyMywgNTIsIDE4NCwgMjM1LCAKKyAgICAyMDAsIDIzMywgNzEsIDIyMiwgOTMsIDIxOSwgMTU5LCAyMTIsIDM1LCAyMTEsIDIwMCwgMjI0LCAxODMsIDIyOCwgNTcsIAorICAgIDE4NCwgMjMwLCAxODcsIDE4NCwgMjUzLCAyMTgsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTMsIDIxOCwgMTI4LCAxMTIsIDI1NCwgCisgICAgNTYsIDEyOCwgMTEyLCAyNTQsIDU2LCAyNTEsIDk2LCAyMjgsIDU3LCAyNTUsIDEzLCAxMjgsIDExMiwgMjI5LCAxMDUsIAorICAgIDI1NCwgNTYsIDIyOCwgNjQsIDI1NSwgMTMsIDEyOCwgMTEyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyOCwgNTcsIDI1NCwgCisgICAgMTU2LCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDE4NCwgMjU0LCAxNjQsIAorICAgIDEyOCwgMTEyLCAyNDUsIDEwMiwgMTEyLCAyNDMsIDUyLCAyNDUsIDEwMiwgMTEyLCAyNDcsIDI0MiwgMjUyLCAzMSwgMjU0LCAKKyAgICA1OCwgMjE2LCAxOTcsIDIzMiwgMjI3LCAyNDMsIDUyLCAxMjgsIDExMiwgMjU0LCA1NiwgMTI4LCAyMTYsIDQzLCAxNzcsIAorICAgIDIxNiwgMTk3LCAyMzYsIDIyLCAyMjYsIDIzNSwgMjM2LCAyMiwgNjQsIDE3NywgMjU0LCA1NiwgMTI4LCAxMTIsIDI0OSwgCisgICAgMjM1LCAyNDUsIDEwNSwgMjQ1LCAxMDYsIDI0OSwgMjM0LCAyMjIsIDIzNywgMjM2LCA3LCAxMjgsIDExMiwgMjIyLCAyMzcsIAorICAgIDEyOCwgMTEyLCAyNDksIDE2MiwgMTEyLCAyNDUsIDc1LCAyNDUsIDEwNCwgMTEyLCAyMTgsIDE1OSwgMjQ1LCAxMDUsIDI0OCwgCisgICAgNjMsIDEyOCwgMTEyLCAxMjgsIDIxNiwgNDMsIDI1MSwgODYsIDI0OCwgODAsIDIzMSwgOTMsIDI1MSwgODUsIDIyNCwgMTQsIAorICAgIDEyOCwgMTEyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjQwLCAxMTEsIDExMiwgMjI4LCA1NywgMjQwLCAxMTEsIDExMiwgMjE4LCAKKyAgICAxMTEsIDI0NSwgMTAyLCAxMTIsIDIzMywgMjEsIDE3NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAxNzcsIDEyOCwgMTEyLCAyMzMsIAorICAgIDIxLCAxMTUsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTE1LCAxMjgsIDExMiwgMjMzLCAyMSwgMjUxLCA5NiwgMjI4LCA1NywgCisgICAgMTI4LCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMwLCAxMDIsIDIzMywgMjAsIDIzMCwgCisgICAgMTAyLCAyNDIsIDEzNiwgMjUyLCAzMSwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjMzLCAyMCwgMjI4LCAKKyAgICA1NywgMjQyLCAxMzYsIDIyOSwgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAxMjgsIDExMiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAKKyAgICAyMjgsIDY0LCAxMjgsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDIsIDEzNywgMTc3LCAyNDUsIDEwMiwgCisgICAgMTEyLCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMjQ1LCAxMDIsIDExMiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAyMjgsIAorICAgIDY0LCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDI0MiwgMTM2LCAyNDIsIDEzNywgMTc3LCAyMzMsIDIwLCAyMjksIAorICAgIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMjQyLCAxMzYsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCA2NCwgMjMzLCAyMCwgCisgICAgMjI0LCAyMDUsIDIxOCwgNTYsIDIyNCwgMjA2LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDU3LCAxNzcsIDEyOCwgMTEyLCAyMjQsIAorICAgIDIwNiwgMTc3LCAyNDUsIDEwMiwgMTEyLCAyMTgsIDU3LCAxNzcsIDI0NSwgMTAyLCAxMTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAKKyAgICAyMjQsIDIwOCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIxOCwgNTgsIDIxOCwgNjUsIDIyNiwgMjM1LCAyMTgsIDIzLCAyMjYsIAorICAgIDIzNSwgMjI4LCA1NywgMTE2LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjI4LCA1NywgMTE2LCAyMTgsIDIzLCAyMjYsIDIzNSwgCisgICAgMjE4LCA2NSwgNjQsIDE3NywgMTI4LCAxMTIsIDIxOCwgMjMsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAKKyAgICAyMTgsIDY1LCA2NCwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAxMTYsIDIxOCwgMjMsIDY0LCAyMjgsIDY0LCAxMjgsIAorICAgIDExMiwgMjE4LCA2NSwgNjQsIDIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMiwgMjI4LCA1NywgMTI4LCAKKyAgICAxMTIsIDIzMCwgODYsIDIzMCwgODcsIDIzMCwgODgsIDIzMCwgODcsIDIxNCwgMTc1LCA0MiwgMjM2LCAyMiwgMjI2LCAyMzUsIAorICAgIDQyLCAyMjYsIDE1NCwgMjI2LCAyMzUsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAxMjgsIDExMiwgNDIsIDIyNiwgMTU0LCA2NCwgCisgICAgMTc3LCAxMjgsIDExMiwgNDIsIDI1MSwgMywgNDIsIDI0OSwgMTEwLCAzNywgMjI1LCAyNSwgMzcsIDIzMCwgMTg2LCAzNywgCisgICAgMjE2LCA4NiwgMzcsIDI0NywgMTc3LCAyMTksIDk3LCAzNywgNTksIDIyNiwgMTcxLCAzNywgMjIyLCAyMzcsIDIyNiwgMTcxLCAKKyAgICAzNywgMjUzLCAyMjUsIDIyNiwgMTcxLCAzNywgMjQ1LCAxMDUsIDM3LCAyNDgsIDE2NCwgOTIsIDIyNSwgMjUsIDkyLCAyMzAsIAorICAgIDE4NiwgOTIsIDIxNiwgODYsIDkyLCA1OSwgMjI2LCAxNzEsIDQ0LCAyMTcsIDg4LCA0MywgMjE3LCA4OCwgMTI0LCAyMTcsIAorICAgIDg4LCAxMjAsIDIxNywgODgsIDI1MywgMjI4LCAyMzAsIDE2MSwgMjE1LCAxOTIsIDI0NCwgMzMsIDIxNSwgMjEyLCA2NywgCisgICAgMjUyLCAxNDksIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDQsIDIxNSwgOTMsIDI0NywgMTQ2LCAyMjgsIAorICAgIDU3LCAyMjQsIDE2NiwgMjI4LCA1NywgMjE1LCAxOTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDQsIDM0LCAyMjksIDEwNywgCisgICAgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwNiwgMjE0LCAxODQsIDIyMywgOTQsIDIxOCwgNTcsIAorICAgIDIxNCwgMTg0LCAyMjMsIDk0LCAyMjgsIDYyLCAyMTgsIDc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMjgsIAorICAgIDYyLCAyMTgsIDc3LCAyMjgsIDYyLCAyMTgsIDc4LCA2NCwgMTc3LCAxMjgsIDExMiwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAKKyAgICAyMjgsIDYyLCAyMTgsIDc4LCAxNzcsIDEyOCwgMTEyLCAyMjYsIDE1NCwgMjI2LCAyMzUsIDIzNiwgMjIsIDIyNiwgMjM1LCAKKyAgICAyMzAsIDkyLCAyNDEsIDIwNywgMjQ5LCAyMDQsIDIzMSwgMTQyLCAyMzUsIDIxNSwgMjExLCAxNDUsIDIyOSwgMjA3LCAyMjgsIAorICAgIDYzLCA0NCwgMjU0LCAxMTgsIDIsIDI1NCwgMzMsIDQ0LCAyMTUsIDIyNiwgMjMwLCAyOSwgMjMyLCAxNTIsIDI1NCwgMTI2LCAKKyAgICAyMzAsIDI5LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIzMCwgMjksIDIzNSwgMjA1LCAyMzAsIDI5LCAyMTQsIDE3NSwgMjQ4LCAKKyAgICAxLCAyMjYsIDE3MSwgNTksIDIyNiwgMTcxLCAyMTgsIDE1OSwgMjI2LCAxNzEsIDI0NywgMTc3LCAyMTYsIDg2LCAyNTEsIAorICAgIDE3MiwgNDMsIDIyOCwgNjIsIDI0NCwgMTg5LCAyMjAsIDE1MSwgMjI0LCAxODMsIDQ0LCAyMjgsIDYyLCAyNDQsIDE4OSwgCisgICAgMjIwLCAxNTEsIDIyNCwgMTgzLCA0MywgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjIwLCAxNTEsIDIyNCwgMTgzLCAyMjMsIAorICAgIDUyLCAyMTYsIDkwLCAyNDUsIDEwNSwgMjQ5LCAxMDcsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjQ5LCAxMDcsIDIzMiwgMTUyLCAKKyAgICAyNTQsIDEyNiwgNTIsIDIxOCwgNjQsIDUyLCAyMTgsIDIyLCA1MiwgMjM1LCAyMDUsIDUyLCAyMTQsIDE3NSwgMjI1LCA1MCwgCisgICAgMTI4LCAyMiwgMjI2LCAxMiwgMTEyLCAyMzMsIDIxLCAyLCAyNDcsIDEyOCwgMjQyLCAxMzcsIDIsIDI0NywgMTI4LCAyMTMsIAorICAgIDE4NywgMjMwLCAxMDIsIDIzMywgMjAsIDIxMywgMTg3LCAyMzAsIDEwMiwgMjQyLCAxMzYsIDIzMywgMjEsIDEyOCwgMjE2LCAKKyAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAxMjgsIDIxNiwgNDMsIAorICAgIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAxMjgsIDIxNiwgNDMsIDE3NywgMjI0LCAyMDUsIAorICAgIDEyOCwgMjE2LCA0MywgMTc3LCAyMTgsIDU2LCAyNDcsIDE0NiwgMjI4LCA1NywgMjI0LCAyMDksIDE3NywgMjQ1LCAxMDcsIAorICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU5LCAxNzcsIDI0NSwgMTA3LCAyMjgsIDU3LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCisgICAgMTI4LCAxMTIsIDIyOCwgNTcsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAKKyAgICAyMjgsIDU3LCAxMjgsIDExMiwgNDIsIDIyNiwgMTU0LCA2NCwgMTc3LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMzLCAyMSwgCisgICAgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAKKyAgICAxMTIsIDIyNCwgMjA2LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyMTgsIDU3LCAyNTEsIDk2LCAyMjgsIAorICAgIDU3LCAyNDUsIDEwMiwgMTEyLCAyMjgsIDU3LCAyMjgsIDYyLCAyMTgsIDc4LCAyMjYsIDIzNSwgMjQ3LCAxNDYsIDIyOCwgCisgICAgNTcsIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjI4LCA2MiwgMjE4LCA3NywgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIAorICAgIDE3NywgMTI4LCAxMTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzgsIAorICAgIDE3NywgMjQ1LCAxMDcsIDY3LCAyNDUsIDE3MSwgMjMwLCAyMjcsIDIwMywgMjQ1LCAxNzEsIDEyMCwgNDQsIDI0OCwgNywgCisgICAgMjQ1LCAxNzEsIDEyNCwgNDQsIDI0OCwgNywgMjQ1LCAxNzEsIDI0NSwgMTc4LCA2NCwgMiwgMjAwLCAyMDMsIDkxLCAyNDUsIAorICAgIDE3OCwgNjQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgNCwgMjQ1LCAxNzgsIAorICAgIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDI0NSwgMTc4LCA2NCwgMiwgCisgICAgNTksIDQ4LCAyNDUsIDE3OCwgNjQsIDIsIDIyNiwgMTI3LCA0LCAyNDUsIDE3OCwgNjQsIDIsIDIyNiwgMTI3LCAyNDUsIAorICAgIDE3OCwgNjQsIDIsIDIxNCwgMTgzLCAyNDUsIDE3OCwgNjQsIDIsIDExMywgMjAzLCAyMTgsIDkyLCAyNDksIDE5NCwgMiwgCisgICAgMjAwLCAyMDMsIDkxLCAyNDksIDE5NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAKKyAgICA0LCAyNDksIDE5NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDksIDE5NCwgCisgICAgMiwgMjI2LCAxMjcsIDQsIDI0OSwgMTk0LCAyLCAyMjYsIDEyNywgMjEwLCAxNjAsIDE4OSwgMjUyLCAxODEsIDIzMSwgNjYsIAorICAgIDI0OCwgMiwgNTAsIDI0NSwgMTgwLCA3NSwgMjQwLCAyNDEsIDEyMCwgMjU0LCAxLCAxMjQsIDI1NCwgMSwgMjI0LCAxNzgsIAorICAgIDIyNSwgMTY4LCAyMTIsIDMyLCAyMzIsIDIxOSwgNDMsIDI1MCwgMTg5LCA0NCwgMjUwLCAxODksIDQzLCAyNDQsIDY1LCA0NCwgCisgICAgMjQ0LCA2NSwgMjUxLCAxODMsIDQ0LCAyNDksIDE0MCwgMjUxLCAxODMsIDQzLCAyNDksIDE0MCwgMjE2LCAxNSwgNDQsIAorICAgIDI0OSwgMTQwLCAyMTYsIDE1LCA0MywgMjQ5LCAxNDAsIDIyMywgNTIsIDIyOCwgNTcsIDUwLCA0MiwgMjMyLCAxMTAsIDI1NCwgCisgICAgMzMsIDIyMSwgMTY2LCAyMjEsIDE3MywgMjE3LCAyLCAyMjMsIDEyMywgMjI0LCAyNDQsIDIzNSwgMjQ1LCAyMTMsIDE2NSwgCisgICAgMjE4LCAyMzYsIDIyNSwgNDQsIDY0LCAyMzUsIDIxNCwgNTAsIDIxNSwgOTQsIDIyOCwgNTcsIDUwLCAyMTIsIDQyLCAyNDAsIAorICAgIDI0MywgMjE2LCAxNSwgNDMsIDI0OSwgMTY4LCAyMTYsIDE1LCA0NCwgMjQ5LCAxNjgsIDI1MSwgMTgzLCA0MywgMjQ5LCAKKyAgICAxNjgsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNjgsIDIxNiwgMTUsIDE2MywgMjM1LCAyMTgsIDI1MSwgMTgzLCAxNjMsIDIzNSwgCisgICAgMjE4LCAyNDMsIDI0OCwgMjE5LCA3NywgMTIwLCAyNTQsIDIsIDI1MiwgMzIsIDExMywgMjAzLCAyNTIsIDEzNywgMjI2LCAKKyAgICAxNjQsIDIzNCwgMTQ0LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIDIxMSwgMTc5LCAyMzYsIDcsIAorICAgIDExNiwgMjIzLCAxMjAsIDI1MSwgMTcxLCAyMzQsIDE0MywgMjMzLCA0OCwgMjU0LCAxMTgsIDEyNywgMjIyLCAyNTAsIDI1NCwgCisgICAgMTE4LCAxMjcsIDI0NSwgOTgsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMzMsIDUyLCAyNTIsIDQzLCAyMjIsIDIzNiwgMjQ5LCAKKyAgICA3OCwgMjU0LCAxNjQsIDI1NCwgOSwgMjE3LCAxODIsIDIxNiwgNSwgMjIyLCAxMjUsIDI0NywgMjIzLCAyMjYsIDE1NSwgCisgICAgMjQ5LCAyMDYsIDIxNywgNTMsIDIxOSwgODgsIDI0OSwgMTU5LCAyNDksIDE1OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyNDAsIDE1OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDIzMCwgMjI0LCAzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMjQsIDMxLCAyNDUsIDEwNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDcsIDE4MiwgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDgsIDAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjM1LCA2MiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNTAsIDQzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIAorICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjE5LCA5OCwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MiwgMTg5LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjI0LCAzMSwgMjE5LCA5NywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNTIsIDE4OCwgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMzMsIDIwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0MiwgMTM2LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDE0MCwgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCA5NywgMjE0LCAxOSwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxNDAsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDk3LCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyNTIsIDE4OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAxMjQsIDIxNywgODksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNjMsIDIxOCwgMTM3LCAyNTQsIAorICAgIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyNCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgMjQ4LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIxNywgODksIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjE0LCAxNTMsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjE0LCAxNTMsIDc1LCAyNTQsIAorICAgIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjI2LCAxMjcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgCisgICAgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTIwLCAyNTAsIDI0NiwgMjU0LCA3NCwgMjQzLCAKKyAgICAyMzIsIDE2LCAyMjQsIDMxLCAyNDgsIDczLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjM1LCA2MiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDYsIDExMiwgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICAyNDYsIDExMiwgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAwLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyNDgsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDEsIDIxNCwgMTgzLCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIzNSwgNjMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIxNCwgCisgICAgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjIwLCA3LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIyNCwgMCwgMjI0LCAzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTgsIDE1OCwgMjU0LCA3NCwgMjQzLCAKKyAgICAyMzIsIDE2LCAyMjQsIDMxLCAyNDksIDIzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDI0OCwgOSwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAxNTksIAorICAgIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjUwLCA0NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjIwLCA3LCAyMTgsIDEzNywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCA0MywgMjIwLCA3LCAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTYsIDkwLCAyNDgsIAorICAgIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQyLCAxMzcsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDksIAorICAgIDIyOCwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMTAsIDM0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTM4LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjIwLCAxNTMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIyOCwgNTcsIDI0NSwgMTA3LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIyNCwgMTUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyNTAsIAorICAgIDI0NywgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjUwLCAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMzUsIDE5MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjMsIDQwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNiwgCisgICAgMjA1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1NCwgMTUyLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyNDUsIDEwOSwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCAxOTMsIDIxNCwgMTgzLCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIyNiwgMjA2LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MSwgMjI4LCAKKyAgICA1NywgMjUwLCAxMzgsIDc5LCA0NCwgMjU0LCAxMTgsIDIsIDI0NiwgMTEyLCAyMTAsIDM1LCA3NSwgMjE5LCAyMzcsIDIwNCwgCisgICAgMjUxLCAxNzEsIDI1MiwgNTMsIDg3LCA2NywgMjMyLCAyMjAsIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjM1LCAyMjMsIDg3LCAKKyAgICAyNDksIDE5MSwgMjE0LCAxODEsIDg3LCAyNDcsIDE5NywgMjE0LCAxODEsIDg3LCAyNDUsIDE2MiwgODcsIDI0OSwgMjE4LCAKKyAgICA4NywgNzEsIDQyLCAyLCAyNTAsIDE4MywgNjcsIDIzMiwgMjE5LCAyNDUsIDEzOCwgODcsIDI1NCwgMTQ3LCAyMzQsIDE0NSwgCisgICAgODcsIDI0MSwgMjIwLCA4NywgMzcsIDIwMywgMjUyLCAxNDksIDIsIDIyOCwgNTUsIDM3LCAyMTUsIDIyNywgMjQ2LCAxMTQsIAorICAgIDI1MSwgMTQzLCAyNTAsIDQ0LCAyLCAyMjgsIDU5LCA3NSwgMjE0LCAxNzksIDg3LCAyMzAsIDE0MiwgODcsIDI0MCwgMTcxLCAKKyAgICA4NywgMjI2LCAxNzgsIDI0MiwgNjYsIDg3LCAyMjYsIDE3OCwgMjMzLCAxNTMsIDg3LCAyMjUsIDI0OCwgODcsIDIyNSwgCisgICAgMjQ3LCA4NywgMjQ3LCAyMDUsIDI0OSwgMTA1LCAxNiwgMjQ0LCAyOCwgMTA1LCAyMTksIDUyLCA4NywgMjU0LCA3NCwgMjQzLCAKKyAgICAyMzIsIDE2LCAyMjQsIDMwLCAyNDgsIDkxLCAyMjAsIDE0MCwgMjM0LCAxNDUsIDg3LCAyMjQsIDE5NSwgMjI2LCA3OSwgCisgICAgMjI5LCA4NywgMjI2LCA3OSwgMjI0LCAxOTEsIDIyMSwgMTkxLCA4NywgMjUwLCAyNSwgMjIxLCAxOTEsIDg3LCA0MywgMjI2LCAKKyAgICA4LCAyMTQsIDE2MCwgMTAzLCA0MywgMjI2LCA4LCAyNDUsIDI5LCA0MywgMjI2LCA4LCAyMzIsIDExNCwgMTAzLCA0NCwgCisgICAgMjI2LCA4LCAyMTQsIDE2MCwgMTAzLCA0NCwgMjI2LCA4LCAyNDUsIDI5LCA0NCwgMjI2LCA4LCAyMzIsIDExNCwgMTAzLCAKKyAgICA0MywgNDIsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDI0NSwgMjksIDQzLCA0MiwgCisgICAgMjUxLCAxNjYsIDIzMiwgMTE0LCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0NCwgCisgICAgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0NCwgNDIsIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQzLCAyNDksIAorICAgIDEwNywgMjUxLCAxNjYsIDIxNCwgMTYwLCAxMDMsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMCwgMjI5LCAyMjUsIDEwNCwgCisgICAgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMyLCAxMTQsIDEwMywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyNDUsIDI5LCA0NCwgCisgICAgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAKKyAgICAxMDQsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDIzNSwgMjE5LCAyNDUsIDI5LCAyMDMsIDIzMiwgCisgICAgMjIwLCAyNDUsIDI5LCAyMTQsIDE2MCwgNDMsIDE3NywgMjMyLCAxMTQsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIyMSwgCisgICAgMTc0LCAyMTQsIDE2MCwgNDQsIDE3NywgMjMyLCAxMTQsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyMSwgMTc0LCAyMTgsIAorICAgIDQyLCAyMTYsIDE0LCAyMTgsIDQyLCAyNTEsIDE4MiwgMjE2LCAxNSwgNDIsIDEyNywgMjUxLCAxODMsIDQyLCAxMjcsIDI1MSwgCisgICAgMTgzLCA0MiwgMjUxLCAxNjYsIDExNSwgMjE2LCAxNSwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE4MiwgNDMsIDY3LCA5MywgCisgICAgMjMyLCAyMTksIDQ0LCA2NywgOTMsIDIzMiwgMjE5LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxOCwgMjAzLCAyMjEsIDIwNywgCisgICAgMjMyLCAyMTcsIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE2LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNSwgMjQ4LCA1NCwgMTYsIAorICAgIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMjIsIDI1NCwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyNTEsIDE4MywgMjIyLCAKKyAgICAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyLCAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIAorICAgIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgCisgICAgNjcsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAKKyAgICAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDIxMiwgMzUsIAorICAgIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTIwLCAyMiwgCisgICAgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyNDEsIDUxLCAyNDgsIDU0LCAxNiwgMTkzLCAKKyAgICAxMjAsIDIyLCAyNDEsIDUxLCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDIxNiwgMTUsIDIzMywgNTIsIDI0OCwgNTQsIAorICAgIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIzMywgNTIsIDQyLCAyNDQsIDQwLCAyMjMsIDU3LCA4NywgMjQ1LCAxOTAsIAorICAgIDg3LCA2NywgMjMyLCAyMjAsIDI0NSwgMjksIDIzMSwgMzgsIDI1MSwgMTU0LCAyMzEsIDM4LCAyMDAsIDExNSwgMjE5LCAKKyAgICAyNTIsIDIzMSwgMzgsIDIxOSwgMjUzLCAxMTUsIDIzMiwgMTQzLCAyMzEsIDM4LCAyMDAsIDExNSwgMTEzLCAyMTksIDIzOSwgCisgICAgMjMxLCAzOCwgMTEzLCAyMTksIDI0MCwgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMTEzLCAyMTksIDI0MCwgMjM1LCA3MCwgCisgICAgMjMxLCAzOCwgMjE1LCAyMDksIDIzMSwgMzgsIDIxNiwgMjI0LCAyMzEsIDM4LCAyMjUsIDE5MSwgMjQ1LCAyMzIsIDI0MiwgCisgICAgMTI5LCAyNDMsIDIyNiwgMjE2LCAxNSwgMjI2LCA3LCAyNTEsIDE4MywgMjI2LCA3LCAyMTYsIDE1LCAyNDksIDEwNywgMTI3LCAKKyAgICAyNTEsIDE4MywgMjQ5LCAxMDcsIDEyNywgMjE2LCAxNSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI1MSwgMTgzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNzEsIDIxNSwgMjQwLCAyNTIsIDQzLCAyMjIsIDIzNywgMiwgMjUwLCA0MywgMjE4LCAxMjIsIDI0NCwgCisgICAgNzIsIDI1NSwgMjYsIDI0OSwgMTA0LCAyNDUsIDE3OSwgMjM1LCAyMDUsIDI0OCwgOTEsIDI0NSwgMzIsIDg3LCA4NSwgMjIyLCAKKyAgICAyNTAsIDUyLCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDUyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjYsIAorICAgIDg1LCAyNDYsIDExMywgNTIsIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDUyLCAyMTUsIDIyNywgMiwgNjcsIDEzMCwgODUsIAorICAgIDIzMywgNDgsIDUyLCAyMTUsIDIyNywgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNywgMiwgNTIsIDY3LCAKKyAgICAxMzAsIDI1NCwgMTgyLCAyNTAsIDExLCAyMTgsIDEyOCwgMjE2LCA4NywgMjUwLCAxMSwgMjQwLCAyNDQsIDIsIDI0NCwgNTgsIAorICAgIDIyMSwgMjQzLCAxNiwgMzEsIDIyNywgMjA2LCAxNiwgMzEsIDIxOCwgMTU0LCA2NCwgMjQxLCAyNDAsIDE2LCAzMSwgMjE4LCAKKyAgICAxNTQsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIxNiwgMjEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgCisgICAgMjE1LCAyNDQsIDE2LCAzMSwgMjQ1LCAxNDAsIDE2LCAzMSwgMjU1LCAxNiwgMTYsIDMxLCAyNTIsIDUyLCAxNiwgMzEsIAorICAgIDI1MiwgMTg3LCAxNiwgMzEsIDIwMywgMjE3LCA5MCwgMTYsIDMxLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDE2LCAzMSwgNjcsIAorICAgIDIxNywgOTAsIDE2LCAzMSwgMjQ0LCAyOCwgMjQ0LCAxNTMsIDE2LCAzMSwgMjUwLCAyMzgsIDIyMywgNTYsIDE2LCAzMSwgCisgICAgMjIwLCAzMCwgMjI2LCAxMzQsIDE2LCAzMSwgMjIwLCAzMCwgMjM2LCA2LCAxNiwgMzEsIDI0OCwgMTU5LCAyMzIsIDIxMCwgCisgICAgMjQ1LCA4NSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxMDUsIAorICAgIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE1OCwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTYxLCAxNiwgMzEsIAorICAgIDE1MiwgMjU1LCAxNiwgMTYsIDMxLCAyMTcsIDE3OCwgMjM2LCA2OSwgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIxNSwgMjQ1LCAKKyAgICAyNTEsIDIyMSwgMTYsIDMxLCAyNTEsIDEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjMxLCA4NiwgMTYsIDMxLCAyMTgsIAorICAgIDYyLCAxNiwgMzEsIDI0NSwgODUsIDE2LCAzMSwgMjQ0LCAxMTUsIDIyMCwgMTM5LCAxNiwgMzEsIDI0MiwgMTI4LCAyMjAsIAorICAgIDEzOSwgMTYsIDMxLCAyMjMsIDEyNCwgMjIwLCAxMzksIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxOSwgCisgICAgMjAsIDE2LCAzMSwgMjQ4LCA3MSwgMjUxLCAyMjQsIDg3LCAyMDQsIDI1MSwgMTcxLCAxNiwgMzEsIDIyOSwgOTAsIDE2LCAKKyAgICAzMSwgMjQ4LCA3MiwgMjQ0LCAyOCwgMTA1LCAxNiwgMzEsIDIxOCwgNjMsIDI0NCwgMjgsIDEwNSwgMjI2LCAyNDUsIDEwMywgCisgICAgMjI2LCAyNDUsIDI1MCwgMTYwLCAyMjYsIDI0NSwgMjQ0LCAzMSwgMjI2LCAyNDUsIDIzNSwgMjAwLCAyNDQsIDMxLCAyMjYsIAorICAgIDI0NSwgMjUyLCA1MCwgMjUxLCAxMzIsIDIyNiwgMjQ1LCAyNTEsIDE3OCwgMjE2LCAxMTIsIDIyNiwgMjQ1LCAyNTEsIDE2MywgCisgICAgMjUyLCAxNTQsIDI0MCwgMTEwLCAyMjYsIDI0NSwgMjU0LCAxMzUsIDY0LCAyNTAsIDEzNywgMjI2LCAyNDUsIDI0OCwgMTY0LCAKKyAgICAyMjYsIDI0NSwgMjQ5LCA5NSwgMjU1LCAyMCwgMjI3LCAyMDQsIDIyNiwgMjQ1LCA1MiwgMjUyLCAxODgsIDM3LCAyMSwgCisgICAgMTExLCAzNywgMjEsIDEwNSwgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE5MCwgMzcsIDIxLCAxOTUsIDM3LCAKKyAgICAyMSwgMTk5LCAzNywgMjEsIDE5NiwgMzcsIDIxLCAyMDEsIDM3LCA1NCwgMjE2LCAyNDgsIDM3LCA1NCwgMjQ1LCAxNzUsIAorICAgIDM3LCA1NCwgMjE1LCA3NiwgMzcsIDU0LCAyMTYsIDE2NSwgMzcsIDU0LCAyNDQsIDEzLCAzNywgNTQsIDI0NCwgMTI2LCAzNywgCisgICAgNTQsIDIxOSwgMTIxLCAzNywgNTQsIDIyMCwgMTIxLCAzNywgNTQsIDI0NSwgMTk4LCAzNywgNTQsIDIyOCwgMjAyLCAzNywgCisgICAgNTQsIDIxNSwgNzMsIDg4LCAyMSwgMTExLCA4OCwgMjEsIDEwNSwgODgsIDIxLCAxNTgsIDg4LCAyMSwgMTYxLCA4OCwgMjEsIAorICAgIDE5MCwgODgsIDIxLCAxOTUsIDg4LCAyMSwgMTk5LCA4OCwgMjEsIDE5NiwgODgsIDIxLCAyMDEsIDg4LCA1NCwgMjE2LCAKKyAgICAyNDgsIDg4LCA1NCwgMjQ1LCAxNzUsIDg4LCA1NCwgMjE1LCA3NiwgODgsIDU0LCAyMTYsIDE2NSwgODgsIDU0LCAyNDQsIAorICAgIDEzLCA4OCwgNTQsIDI0NCwgMTI2LCA4OCwgNTQsIDIxOSwgMTIxLCA4OCwgNTQsIDIyMCwgMTIxLCA4OCwgNTQsIDI0NSwgCisgICAgMTk4LCA4OCwgNTQsIDIyOCwgMjAyLCA4OCwgNTQsIDIxNSwgNzMsIDIxLCAxMjMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIAorICAgIDExMywgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMTM0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDQsIDE5LCAyNDMsIAorICAgIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDQsIDg5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyMTksIDEyNywgMjQzLCAyMzYsIAorICAgIDIxOCwgMTMxLCAyMSwgMjIwLCAxMjQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NSwgMjAxLCAyNDMsIDIzNiwgMjE4LCAKKyAgICAxMzEsIDIxLCAyMjgsIDIwNSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE2LCAyNDksIDI0MywgMjM2LCAyMTgsIDEzMSwgCisgICAgNTQsIDI0NSwgMTc2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTUsIDc3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAKKyAgICAyMTYsIDE2NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ0LCAxNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ0LCAKKyAgICAxMjcsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxOSwgMTIyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjAsIDEyMiwgCisgICAgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ1LCAxOTksIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIyOCwgMjAzLCAyNDMsIAorICAgIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTUsIDc0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIAorICAgIDQsIDEsIDI1MywgMTY2LCA4OCwgNywgNCwgMSwgMjUxLCA3NCwgODgsIDcsIDQsIDEsIDI0OSwgNjgsIDg4LCA3LCA0LCAxLCAKKyAgICA3NiwgODgsIDcsIDQsIDEsIDI0NSwgMTQsIDg4LCA3LCA0LCAxLCAyNDMsIDIwOSwgODgsIDcsIDQsIDEsIDI0MiwgNjcsIAorICAgIDg4LCA3LCA0LCAxLCA3NCwgODgsIDcsIDQsIDEsIDIzNSwgMTUwLCA4OCwgNywgNCwgMSwgMjM1LCAyOSwgODgsIDcsIDQsIAorICAgIDEsIDE1NiwgODgsIDcsIDQsIDEsIDE5NCwgODgsIDcsIDQsIDEsIDIzMCwgMzAsIDg4LCA3LCA0LCAxLCA3OCwgODgsIDcsIAorICAgIDQsIDEsIDIyNiwgMTA5LCA4OCwgNywgNCwgMSwgMjI0LCA5OSwgODgsIDcsIDQsIDEsIDE1MywgODgsIDcsIDQsIDEsIDIyMiwgCisgICAgOTMsIDg4LCA3LCA0LCAxLCAyMTcsIDE1MywgODgsIDcsIDQsIDEsIDY5LCA4OCwgNywgNCwgMSwgMjE0LCAxMDUsIDg4LCA3LCAKKyAgICA0LCAxLCAyMTIsIDk4LCA4OCwgNywgNCwgMSwgMjExLCAxNzgsIDg4LCA3LCA0LCAxLCAyMTEsIDExNywgODgsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAzNywgNywgNiwgMSwgNjEsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMzcsIDcsIDYsIDEsIDI1MSwgNzQsIAorICAgIDM3LCA3LCA2LCAxLCAyNDksIDY4LCAzNywgNywgNiwgMSwgNzYsIDM3LCA3LCA2LCAxLCAyNDUsIDE0LCAzNywgNywgNiwgMSwgCisgICAgMjQzLCAyMDksIDM3LCA3LCA2LCAxLCAyNDIsIDY3LCAzNywgNywgNiwgMSwgNzQsIDM3LCA3LCA2LCAxLCAyMzUsIDE1MCwgCisgICAgMzcsIDcsIDYsIDEsIDIzNSwgMjksIDM3LCA3LCA2LCAxLCAxNTYsIDM3LCA3LCA2LCAxLCAxOTQsIDM3LCA3LCA2LCAxLCAKKyAgICAyMzAsIDMwLCAzNywgNywgNiwgMSwgNzgsIDM3LCA3LCA2LCAxLCAyMjYsIDEwOSwgMzcsIDcsIDYsIDEsIDIyNCwgOTksIAorICAgIDM3LCA3LCA2LCAxLCAxNTMsIDM3LCA3LCA2LCAxLCAyMjIsIDkzLCAzNywgNywgNiwgMSwgMjE3LCAxNTMsIDM3LCA3LCA2LCAKKyAgICAxLCA2OSwgMzcsIDcsIDYsIDEsIDIxNCwgMTA1LCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMzcsIDcsIDYsIDEsIDIxMSwgCisgICAgMTc4LCAzNywgNywgNiwgMSwgMjExLCAxMTcsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDQsIDEsIDYxLCAzNywgCisgICAgNywgNCwgMSwgMjUzLCAxNjYsIDM3LCA3LCA0LCAxLCAyNTEsIDc0LCAzNywgNywgNCwgMSwgMjQ5LCA2OCwgMzcsIDcsIDQsIAorICAgIDEsIDc2LCAzNywgNywgNCwgMSwgMjQ1LCAxNCwgMzcsIDcsIDQsIDEsIDI0MywgMjA5LCAzNywgNywgNCwgMSwgMjQyLCA2NywgCisgICAgMzcsIDcsIDQsIDEsIDc0LCAzNywgNywgNCwgMSwgMjM1LCAxNTAsIDM3LCA3LCA0LCAxLCAyMzUsIDI5LCAzNywgNywgNCwgCisgICAgMSwgMTU2LCAzNywgNywgNCwgMSwgMTk0LCAzNywgNywgNCwgMSwgMjMwLCAzMCwgMzcsIDcsIDQsIDEsIDc4LCAzNywgNywgCisgICAgNCwgMSwgMjI2LCAxMDksIDM3LCA3LCA0LCAxLCAyMjQsIDk5LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCAKKyAgICA5MywgMzcsIDcsIDQsIDEsIDIxNywgMTUzLCAzNywgNywgNCwgMSwgNjksIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIAorICAgIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDM3LCAyMSwgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTc1LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgCisgICAgMTUyLCAzNywgNTQsIDIxNiwgMTY1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMywgMTUyLCAzNywgNTQsIDI0NCwgMTI2LCAxNTIsIAorICAgIDM3LCA1NCwgMjE5LCAxMjEsIDE1MiwgMzcsIDU0LCAyMjAsIDEyMSwgMTUyLCAzNywgNTQsIDI0NSwgMTk4LCAxNTIsIDM3LCAKKyAgICA1NCwgMjI4LCAyMDIsIDE1MiwgMzcsIDU0LCAyMTUsIDczLCA1MiwgMzcsIDIxLCAxMTEsIDUyLCAzNywgMjEsIDEwNSwgNTIsIAorICAgIDM3LCAyMSwgMTU4LCA1MiwgMzcsIDIxLCAxNjEsIDUyLCAzNywgMjEsIDE5MCwgNTIsIDM3LCAyMSwgMTk1LCA1MiwgMzcsIAorICAgIDIxLCAxOTksIDUyLCAzNywgMjEsIDE5NiwgNTIsIDM3LCAyMSwgMjAxLCA1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMTUyLCAzNywgCisgICAgMjEsIDIxMCwgODYsIDkzLCA5OSwgMTkzLCAyNDEsIDUxLCA5MywgOTksIDExNCwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIAorICAgIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDI0MSwgCisgICAgNTEsIDkzLCA5OSwgMTE0LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAyMTUsIDIxMiwgMjQ4LCAKKyAgICAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIAorICAgIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCAKKyAgICA5OSwgMTkzLCAyMjQsIDI3LCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMjQsIDI3LCAyNDgsIDE2NSwgCisgICAgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAxMjQsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQ0LCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIyMiwgMjU0LCAKKyAgICA5MywgOTksIDE5MywgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIAorICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgCisgICAgMTkzLCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDQ0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAorICAgIDExNCwgMjIsIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMTIwLCAKKyAgICAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIAorICAgIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCA2NywgMjIsIDIyMiwgCisgICAgMjU0LCA5MywgOTksIDY3LCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAKKyAgICAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAKKyAgICA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDE5MywgCisgICAgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDY3LCAKKyAgICAyMiwgMjMzLCA1MiwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIAorICAgIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAKKyAgICAyMiwgNDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxOTMsIDIyLCA0MywgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIAorICAgIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAKKyAgICAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgCisgICAgMTI0LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTI0LCAyNDEsIDIyOCwgOTMsIAorICAgIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgCisgICAgOTksIDE5MywgMTIwLCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCAKKyAgICA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyMCwgMTkzLCAyMiwgMjAzLCAyNDEsIDIyOCwgCisgICAgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDQzLCAxOTMsIDIyLCA0NCwgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDI0MSwgCisgICAgNTEsIDkzLCA5OSwgMTkzLCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCA2NywgMjMyLCAyMzYsIAorICAgIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCA2NywgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDIwMywgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAxMjQsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAxMjAsIAorICAgIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDMsIDEyMCwgMTE0LCAKKyAgICAyMiwgNDQsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCAKKyAgICA5OSwgNDMsIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDEyNCwgMTE0LCAyMiwgNDMsIAorICAgIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAxMjAsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxOTMsIDIyLCAxMjQsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCA2NywgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCA2NywgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgCisgICAgMTkzLCA1MiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgCisgICAgMTkzLCA1MiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAKKyAgICA1MiwgMjQxLCA1MSwgOTMsIDk5LCA1MiwgMjEzLCAyMzksIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0MywgMjE5LCAKKyAgICAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxMjAsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0MywgMjE5LCAKKyAgICAxNTYsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCisgICAgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMjIsIDI1NCwgOTMsIAorICAgIDk5LCA2NywgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDMsIDIxOSwgMTU2LCA5MywgCisgICAgOTksIDUyLCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKKyAgICA5OSwgMTI0LCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgCisgICAgMTIwLCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCAKKyAgICA5OSwgNTIsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIAorICAgIDk5LCA2NywgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKKyAgICAyNTQsIDM0LCAxMjQsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCAKKyAgICA5OSwgMTkzLCAyNTQsIDM0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjIyLCAKKyAgICAyNTQsIDkzLCA5OSwgMTkzLCAyNDgsIDcsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDIzMywgNTIsIDkzLCAKKyAgICA5OSwgMTkzLCAyNDgsIDcsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgCisgICAgMjQ4LCA3LCAyNDksIDEzOCwgOTMsIDk5LCAxOTMsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAyMTQsIDE2MywgOTMsIDk5LCAKKyAgICAxOTMsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCAyMzMsIDUyLCA5MywgOTksIDExNCwgCisgICAgMjE0LCAxNjMsIDkzLCA5OSwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxMTQsIDI0NiwgMTE0LCA5MywgOTksIDE5MywgNDMsIAorICAgIDIyLCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMTIwLCAyMiwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxMTQsIDQzLCAKKyAgICAyMiwgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDE5MywgMjQ2LCAxMTQsIDIxNCwgMTYwLCAxNjMsIAorICAgIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMjMsIDIyNCwgMjUsIDI1MSwgCisgICAgMjIxLCAyMzIsIDExNCwgMTM0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDIzMiwgMTE0LCAxNjMsIDI1MSwgMjIxLCAyMzIsIAorICAgIDExNCwgMjQ0LCA4OSwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgMjMyLCAKKyAgICAxMTQsIDIyMCwgMTI0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDI0MywgMjM2LCAyNTEsIDIyMSwgNDMsIDIyMCwgMTI0LCAyNDUsIAorICAgIDE5NSwgMjUxLCAyMjEsIDQzLCAxMzQsIDIyNCwgMjMsIDI1MSwgMjIxLCA0MywgMjQ0LCA4OSwgMjQ1LCAxOTUsIDI1MSwgCisgICAgMjIxLCA0MywgMTYzLCAyNTEsIDIyMSwgNDMsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCA0MywgMTIzLCAyMjQsIDI1LCAKKyAgICAyNTEsIDIyMSwgNDMsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCA0NCwgMTYzLCAyNTEsIDIyMSwgMTkzLCAyMjAsIDk0LCAKKyAgICAyMzEsIDg3LCAyMjAsIDk0LCAyNDgsIDE3MCwgMjIwLCA5NCwgMjE0LCAxNjAsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAKKyAgICA0NCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDIyNCwgMjksIDIzMiwgMTE0LCAyMzMsIDUyLCAyMjQsIDI5LCAyMzIsIAorICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAKKyAgICAyMzIsIDExNCwgNDMsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgCisgICAgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIAorICAgIDIzMywgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgCisgICAgMjI0LCAyOSwgMjE0LCAxNjAsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjMzLCAKKyAgICA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCA4NSwgCisgICAgMjE4LCAyMzYsIDcxLCAyMTgsIDIzNiwgNzEsIDQyLCAyLCAyMjIsIDE4NSwgMjQ5LCAxNjcsIDcxLCA0MiwgMjQ5LCAxOTUsIAorICAgIDg1LCA0LCAyMTgsIDIzNiwgNDIsIDIsIDIwMywgMjQ0LCAxMTMsIDQyLCAyLCA2NywgMjQ0LCAxMTMsIDQyLCAyLCAyMjYsIAorICAgIDE0OCwgMjQ5LCAxMzQsIDI0NCwgMTEzLCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyMTYsIDQzLCAyMzIsIDExNCwgNDQsIDI0NCwgCisgICAgMTEzLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyMTYsIDQzLCAyMzIsIDExNCwgNDMsIDI0NCwgMTEzLCA0MiwgMiwgMjQ4LCA3LCAKKyAgICAyNDksIDEzNCwgMjQ0LCAxMTMsIDg1LCA0LCAyMTgsIDIzNiwgNzEsIDQsIDIxOCwgMjM2LCA4NSwgMjIzLCAxMTksIDcxLCAKKyAgICAyMjMsIDExOSwgODUsIDY3LCAyMjMsIDExOSwgNzEsIDY3LCAyMjMsIDExOSwgODUsIDIyNiwgMTAsIDcxLCAyMjYsIDEwLCAKKyAgICA4NSwgMjE0LCAxNjIsIDIxNSwgMjI2LCA3MSwgMjE0LCAxNjIsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjIsIDQsIDIxNSwgCisgICAgMjI2LCA3MSwgMjE0LCAxNjIsIDQsIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDIxNSwgMjI2LCA3MSwgMjIyLCAyNTAsIAorICAgIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDQsIDIxNSwgMjI2LCA3MSwgMjIyLCAyNTAsIDQsIDIxNSwgMjI2LCA4NSwgMjIyLCAKKyAgICAyNTAsIDIyNSwgMTEsIDcxLCAyMjIsIDI1MCwgMjI1LCAxMSwgODUsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNzEsIDI0NiwgCisgICAgMTEzLCAyMTUsIDIyNiwgODUsIDI0NiwgMTEzLCA0LCAyMTUsIDIyNiwgNzEsIDI0NiwgMTEzLCA0LCAyMTUsIDIyNiwgODUsIAorICAgIDIzMywgNDgsIDIxNSwgMjI2LCA3MSwgMjMzLCA0OCwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgNzEsIAorICAgIDIzMywgNDgsIDQsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgMjI1LCAxMSwgNzEsIDIzMywgNDgsIDIyNSwgMTEsIDg1LCAKKyAgICAyNDgsIDAsIDcxLCAyNDgsIDAsIDcxLCAyNDgsIDEsIDI0OSwgMTk1LCA4NSwgNCwgMjQ4LCAwLCAyNDQsIDk3LCAyMzIsIAorICAgIDExMCwgNzEsIDI1MCwgNDMsIDI0NiwgMTI2LCAyNTAsIDQzLCAyNTAsIDQ0LCAyLCA2NywgMjQ0LCAxMTMsIDI1MSwgMTE5LCAKKyAgICA4NSwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDQ0LCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNTAsIDQ0LCAyLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAKKyAgICAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOSwgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDI1NCwgMTY0LCAKKyAgICAyNTEsIDk2LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjksIDI1MSwgMjI5LCA0MywgMTYzLCA4NSwgMjUwLCA0MywgNDQsIDE2MywgCisgICAgODUsIDI1MCwgNDMsIDIzNSwgMjAxLCAyNTEsIDEyMSwgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMTQsIDE2MCwgMTYzLCAKKyAgICAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIzMiwgMTE0LCAxNjMsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIAorICAgIDQzLCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIAorICAgIDIzMiwgMTE0LCA0NCwgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjMyLCAxMTQsIDQzLCAyMjQsIDI5LCAyNTAsIDQxLCAKKyAgICAyNTQsIDMzLCAyMTQsIDE2MCwgMTYzLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyNTAsIDQzLCA4NSwgMjMyLCAxMTQsIAorICAgIDQ0LCAyMTUsIDIyNiwgODUsIDIzMiwgMTE0LCA0MywgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI2LCA4NSwgCisgICAgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgNzEsIDI1MSwgMTIxLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAKKyAgICA0NCwgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDcxLCA0MiwgMiwgNjcsIDI1MSwgMjQwLCAyMzIsIDIxOSwgCisgICAgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgMjQ3LCAxMjgsIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgNDMsIDE2MywgMjUxLCAKKyAgICAyMjksIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDIzMywgOTEsIDI1MCwgNDMsIDcxLCA0MiwgCisgICAgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAKKyAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjgsIDcxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgCisgICAgMjE0LCAxNjAsIDQzLCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDQzLCAyMjQsIDI4LCA3MSwgMjUwLCAKKyAgICA0NCwgMiwgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI4LCAyMTQsIAorICAgIDE2MCwgNDMsIDIxNSwgMjI2LCAyMTQsIDE2MCwgNDQsIDIxNSwgMjI2LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA3MSwgCisgICAgMjMxLCA4NywgMjE4LCAyMzYsIDg1LCAyMzEsIDg3LCAyMTgsIDIzNiwgNzEsIDIzMSwgODcsIDQsIDIxOCwgMjM2LCA4NSwgCisgICAgMjMxLCA4NywgNCwgMjE4LCAyMzYsIDIzMiwgMTE0LCA0NCwgMjE1LCAyMjYsIDg1LCAyMTgsIDM5LCAyLCAyMjMsIDEzNSwgCisgICAgMjQ5LCAyNTUsIDIxNCwgMTk0LCAyMTksIDYyLCAyNDksIDIzMCwgODUsIDIxOCwgMTU4LCA3MSwgMjE4LCAxNTgsIDIzMiwgCisgICAgMjM0LCAyMTYsIDEzMywgMjE4LCAzOCwgMjUzLCAyNDIsIDIyOCwgNzYsIDI0OCwgNDYsIDIyOCwgNzYsIDI0OSwgMjAzLCAKKyAgICAyMjYsIDE2NywgODUsIDIxNywgMSwgNzEsIDIxNywgMSwgMjUyLCAxNjQsIDI1MSwgMTcxLCAyNTIsIDE2NCwgOTMsIDIsIAorICAgIDI1MCwgMTM3LCAyNTIsIDE2NCwgOTMsIDIsIDIxMSwgMTc4LCAyMjIsIDAsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MywgMjQ2LCAKKyAgICA5MiwgMjQwLCAyNTAsIDI1MiwgMzAsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgMjIwLCAKKyAgICA4OSwgMjIzLCA1MiwgMjIyLCAxODksIDI0NCwgNjMsIDI0MSwgMjM1LCAyNTEsIDEyMSwgODUsIDQzLCAyMjUsIDEwLCAyMzUsIAorICAgIDI0OSwgODUsIDQ0LCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDQzLCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDEyMCwgMjI1LCAKKyAgICAxMCwgMjM1LCAyNDksIDcxLCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjQsIDIyNSwgMTAsIDIzNSwgMjQ5LCAyMTksIAorICAgIDEwMywgMjIsIDI0OSwgMTM3LCAyNTAsIDIyNywgNTAsIDIyMywgMTc1LCA1MCwgMjUxLCAyNDcsIDUwLCAyNTEsIDMzLCAKKyAgICAyNTQsIDExMCwgMjI2LCAxNDksIDI0OSwgMTM4LCAyNTAsIDExOSwgMjIzLCA0MCwgMjQ5LCAxMzksIDY0LCAyMzIsIDEyNCwgCisgICAgMjQ5LCAxMzksIDY0LCAyMzUsIDEyMiwgMjE4LCAxNTksIDIyLCAyNDksIDE0NCwgMjQ0LCAxNzYsIDg3LCAyNTUsIDEsIAorICAgIDIyMCwgOTEsIDI0MiwgMjksIDIyLCAyMTksIDE5MSwgMjI1LCAyMjMsIDg3LCAyMTAsIDI1NCwgMjExLCA2OSwgMjE1LCAKKyAgICAyMTYsIDMxLCAyNDEsIDIzMCwgMjE1LCAyMTYsIDMxLCAyMzMsIDExMywgMjE1LCAyMTYsIDMxLCAyNDQsIDEwNCwgMjE1LCAKKyAgICAyMTYsIDMxLCAyMTYsIDEzNCwgMjE1LCAyMTYsIDMxLCAyMTEsIDIzOSwgMjE1LCAyMTYsIDMxLCAyMTIsIDQwLCAyMTUsIAorICAgIDIxNiwgMzEsIDIzMCwgMTIwLCAyMTUsIDIxNiwgMzEsIDI0NSwgMjMxLCAyMTIsIDEsIDY0LCAyNDgsIDI2LCA3MSwgMjQzLCAKKyAgICAyNDcsIDI0NCwgMTk4LCA3MSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDg1LCAyMTksIDc2LCAyNDQsIDE5OCwgNzEsIDIxOCwgMzksIAorICAgIDIsIDIyMywgMTM1LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzMsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTMzLCAKKyAgICAyMzEsIDU5LCAyNDQsIDE0NiwgNTAsIDI0NSwgMjMxLCAyMzEsIDE5NSwgNTAsIDIzNSwgNDQsIDIyMSwgMjIyLCAyMTQsIAorICAgIDE0NSwgMjI5LCA5OCwgMjI1LCAyMywgMjU0LCAyMCwgMjE3LCA0MSwgMjQzLCA1OSwgMjUxLCAxMSwgMjMzLCAyNSwgMjEzLCAKKyAgICAxNTAsIDIzMiwgMjQ0LCAyMjEsIDE5MywgMjIyLCAyMSwgMjUxLCAwLCAyNTQsIDUwLCAyMjUsIDU1LCA3MSwgMjUwLCAxMjUsIAorICAgIDIzNCwgODQsIDcxLCAyNTAsIDEyNSwgMjI0LCAxNywgNzEsIDI1MCwgMTI1LCAyMjIsIDE5NywgNzEsIDI1MCwgMTI1LCAKKyAgICAyNTEsIDIzOSwgNzEsIDI1MCwgMTI1LCAyMzQsIDM2LCA3MSwgMjUwLCAxMjUsIDIyNSwgMjM1LCA4NSwgMjUwLCAxMjUsIAorICAgIDIzNCwgODQsIDg1LCAyNTAsIDEyNSwgMjI0LCAxNywgODUsIDI1MCwgMTI1LCAyMjIsIDE5NywgODUsIDI1MCwgMTI1LCAKKyAgICAyNTEsIDIzOSwgODUsIDI1MCwgMTI1LCAyMzQsIDM2LCA4NSwgMjUwLCAxMjUsIDIyNSwgMjM1LCA4NSwgMjE5LCAxOCwgCisgICAgMjE4LCA1MSwgNzEsIDI0MSwgMjM1LCAyMTgsIDUxLCA3MSwgMjQ4LCAxLCAyMTgsIDUxLCA4NSwgMjQ5LCAyNTMsIDIxOCwgCisgICAgNTEsIDcxLCAyMTksIDE4LCAyMTgsIDUxLCA4NSwgMjQxLCAyMzUsIDIxOCwgNTEsIDg1LCAyNDgsIDEsIDIxOCwgNTEsIDcxLCAKKyAgICAyNDksIDI1MywgMjE4LCA1MSwgMjQwLCAyNTAsIDIxOCwgMjQwLCAyMjQsIDI1LCAyMjgsIDUyLCAyNDUsIDE5NywgMjI4LCAKKyAgICA1MiwgMjUyLCA4MSwgMjQ1LCAxOTcsIDIyOCwgNDcsIDI1MiwgODEsIDIxOSwgMTIwLCAyMjgsIDQ3LCAyMzAsIDYyLCAyNDQsIAorICAgIDc0LCA1MCwgMjMwLCA2MiwgMjI5LCAxOTMsIDUwLCAyMzAsIDYyLCAyMjAsIDc4LCA1MCwgMjEyLCA5LCAxODMsIDI0OSwgCisgICAgMTM4LCAyNDUsIDIyOCwgMTgzLCAyNDksIDEzOCwgMjE0LCAxNzEsIDIyMywgMTE1LCA4NywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0OCwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0NywgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0NiwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0NSwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0NCwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0MywgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0MiwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjQzLCA1NywgMjMxLCAxNDMsIDg1LCAyMTQsIDE3MSwgMjIzLCAKKyAgICAxMTUsIDg3LCAyMjMsIDExNiwgMjI2LCAyNCwgODcsIDIyNiwgMCwgMjI2LCAyNCwgODcsIDIyNSwgMTc3LCAyMjYsIDI0LCAKKyAgICA1MCwgMjExLCAyNTUsIDg3LCAyNDcsIDI0OSwgMjQ0LCAxOTcsIDI0NywgMjQ5LCAyNDQsIDE5NiwgMjQ3LCAyNDksIDI0NCwgCisgICAgMTk1LCAyNDcsIDI0OSwgMjQ0LCAxOTQsIDI0NywgMjQ5LCAyNDQsIDE5MywgMjQ3LCAyNDksIDI0NCwgMTkyLCA3MSwgMjUwLCAKKyAgICA0NCwgMiwgNTksIDIyMiwgMjU0LCA3MSwgMjUwLCA0NCwgMiwgMTEzLCAyNDcsIDEyNiwgODUsIDI1MCwgNDQsIDIsIDcxLCAKKyAgICA1OSwgMjIyLCAyNTQsIDg1LCAyNTAsIDQ0LCAyLCAxMTMsIDcxLCAyNDcsIDEyNiwgMjMwLCAxNDcsIDMxLCAyMTEsIDY5LCAKKyAgICAyMzAsIDE0NywgMzEsIDIxMCwgMjUzLCAyNDcsIDIzMiwgMzEsIDI0MiwgMTM4LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIAorICAgIDIzMywgMTksIDIxMCwgMjUzLCAyNDcsIDIzMiwgMzEsIDIzMywgMTksIDIxMSwgNjksIDI0NywgMjMyLCAzMSwgMjQyLCAKKyAgICAxMzgsIDIxMCwgMjUzLCA3MSwgMjQ0LCA4MSwgODUsIDI0NCwgODEsIDI0MiwgMjksIDIyLCAyMjUsIDEwNywgMjU0LCAxMjgsIAorICAgIDI0OSwgMTM2LCAyMTcsIDIzNiwgMjE4LCAxNjYsIDY0LCAyNTQsIDIzNSwgMjIxLCAyMDgsIDI1NCwgMTc4LCAyNDQsIDU5LCAKKyAgICAyNDMsIDY3LCAyMTgsIDE2NiwgNjQsIDI0MSwgMjA5LCAyNTMsIDIwNywgODcsIDI0NCwgNzAsIDIyNiwgMTMwLCA3MSwgCisgICAgMjE4LCAxNTgsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAyMjIsIDI1NCwgMTM0LCAyMzIsIDIxNCwgMjQ5LCAxODMsIAorICAgIDIzMywgNTIsIDIxMiwgNTAsIDUwLCAxMjUsIDIxMywgMTMwLCA1MCwgMjQ2LCAxMTgsIDI0NCwgMTQ2LCA1MCwgMjQ2LCAKKyAgICAxMTgsIDIzMSwgMTk1LCA1MCwgMjM1LCAyMTAsIDI0NCwgMTQ2LCAyMiwgMjMxLCAxOTUsIDUwLCAyMzEsIDE5NSwgMjIsIAorICAgIDI0NCwgMTQ2LCA1MCwgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCAyMiwgMjMxLCAKKyAgICAxOTUsIDIyLCAyNDQsIDE0NiwgNTAsIDY3LCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDUwLCAyMDMsIDIzMSwgMTk1LCAyLCAKKyAgICAyMTgsIDEwNSwgNTAsIDIzMSwgODcsIDcxLCAyNTAsIDQzLCAyMzEsIDg3LCA4NSwgMjUwLCA0MywgMjMxLCA4NywgNCwgNzEsIAorICAgIDI1MCwgNDMsIDIzMSwgMTU4LCA4NywgMjQ3LCAxNzUsIDg3LCAyMTQsIDE2OSwgMjI1LCAyNTUsIDg3LCAyNDksIDIzOSwgCisgICAgMjQzLCAyMzEsIDIxNCwgMTQxLCAyMjksIDkzLCAyNTAsIDE2OSwgMjI2LCA2NSwgMjM1LCA1MCwgMjEzLCAxODUsIDI1MCwgCisgICAgMTAxLCA4NSwgMjMwLCAxMzQsIDIzMiwgMjMxLCAyMjAsIDExNCwgMjIwLCAxNDksIDIyNCwgOCwgMjIwLCAxMzIsIDIxOSwgCisgICAgNTcsIDI1MiwgMTY3LCAyNTIsIDEzNCwgOTIsIDIzNCwgMTQ0LCA3MSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA3MSwgMjQ2LCAKKyAgICAxMDEsIDIzNCwgODQsIDg1LCAyNDYsIDEwMSwgMjMxLCAxOTAsIDg1LCAyNDYsIDEwMSwgMjM0LCA4NCwgMjE5LCA2MywgCisgICAgMjExLCAyMzAsIDIxOSwgNjYsIDIxOCwgMzksIDI1MiwgNTksIDI0OSwgMjU1LCAyMjMsIDE2MiwgODUsIDIxOSwgNjIsIAorICAgIDIxNiwgMTM1LCAyNTAsIDAsIDIyLCAyMjMsIDE2MiwgMjE1LCA5NCwgNzEsIDIyMCwgNCwgMjI1LCAxMDQsIDIxNSwgOTQsIAorICAgIDg1LCAyMjAsIDQsIDIyNSwgMTA0LCA3MSwgMjQ4LCAxLCAyMzYsIDcsIDIxOCwgMjM2LCAyNDksIDEzMywgMjMzLCA5NywgCisgICAgMjQ3LCAyMDEsIDI1MCwgMjUyLCAyMjYsIDE3MCwgMjI1LCAxMDcsIDI1MCwgMjUzLCAyMTksIDkwLCAyNDEsIDIxOSwgMiwgCisgICAgNzEsIDI0OSwgMTM4LCAzNywgMjQ5LCAxMzMsIDIzMywgOTcsIDI1MCwgMTYxLCAyMjgsIDgwLCAyNDUsIDEzMiwgMjU0LCAKKyAgICAxNDksIDIyNiwgMTk1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIDg1LCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIAorICAgIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIDg1LCA0MywgMjMzLCA5OCwgMjMxLCA1OCwgNzEsIDQzLCAKKyAgICAyMzMsIDk4LCAyMzEsIDU4LCAyNDYsIDk3LCAyMTksIDg0LCA1MCwgMTE0LCA3MSwgMjQ2LCAxMTMsIDIxNSwgMjI2LCA0MywgCisgICAgMjUwLCA4LCAyNDUsIDEzMiwgOTIsIDIyMiwgMCwgMjQ0LCAxODMsIDI0OCwgNywgMjM2LCA3LCA3MSwgMjUwLCA0NCwgMjM2LCAKKyAgICA3LCA4NSwgMjE4LCAyMzYsIDg1LCAyMTUsIDE5MywgMjIzLCA2MywgNDMsIDI0NSwgMTMxLCAyMjMsIDYzLCA0MywgMjQ1LCAKKyAgICAxMzAsIDI1MywgMjE5LCAxNiwgMzEsIDIxNCwgMTQ1LCAxMTQsIDI1MCwgNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTEzLCAxNzAsIAorICAgIDQ4LCAyMjUsIDE5MiwgMjIyLCAyNTEsIDIzNSwgMjEyLCAyMjUsIDE5MiwgMjMzLCA0OSwgMjM1LCAyMTIsIDIyNSwgMTkyLCAKKyAgICAyMzUsIDIwMCwgMjI1LCAxOTIsIDg1LCAyNDksIDEzOSwgMjI2LCAyMDEsIDIyMCwgMzEsIDIyMCwgMTksIDIxOSwgMjMxLCAKKyAgICAyNTAsIDY5LCAyNTAsIDIzNCwgMjQxLCAxNjQsIDIxOSwgMTI4LCAyNDMsIDY4LCAyMTEsIDIzMCwgMjQwLCAyMjcsIDI0MywgCisgICAgNjgsIDIsIDI0MiwgMTksIDIzMSwgMTc4LCAxNiwgMzEsIDIzMiwgMjM1LCAyMzAsIDEyMCwgMjE0LCAxOTUsIDIyNiwgMjAxLCAKKyAgICAyNDIsIDEyOSwgMjQ0LCAyMCwgMjQ0LCA4MiwgMjM2LCA3LCAyNDEsIDY2LCAyNDQsIDEzNywgMjIyLCAxNiwgNDIsIDI0NCwgCisgICAgMTksIDI0OSwgMTY3LCAyMTksIDEwNiwgMjQwLCAxMTksIDIxOSwgMTA5LCAyMjUsIDE3MSwgMiwgMjUyLCAxNjcsIDIxNiwgCisgICAgMjQzLCAyMzUsIDEzNywgMjUyLCAxNTQsIDg3LCAyNDEsIDIzOCwgMjQyLCAxNDAsIDg3LCAyNDMsIDIzOSwgMjI0LCAxNDUsIAorICAgIDI0OSwgMTExLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCA3MSwgMjQ0LCA4MiwgMiwgMjAzLCAyMzAsIDIyOSwgODUsIDIxOCwgCisgICAgMTA2LCAyMTQsIDE2MCwgMjUxLCAyMjUsIDIyMSwgMTk1LCA4NSwgMjIxLCAxOTUsIDIzMiwgMTE0LCAyNTEsIDIyNSwgMjIxLCAKKyAgICAxOTUsIDcxLCAyMjEsIDE5NSwgNzEsIDExNCwgMjUwLCAxMzgsIDc5LCAyMTcsIDIsIDIzMiwgMTYwLCA1MCwgMjE3LCA1NCwgCisgICAgMjQ2LCA5NiwgMjU0LCAyMDAsIDI0NSwgMTI3LCAyMjMsIDE2MCwgMjQ0LCA5MywgMjIzLCAxNjAsIDI0MiwgMjIsIDIxMywgCisgICAgMTc0LCAyNDIsIDIyLCAyMTEsIDE5OCwgMjQyLCAyMiwgMjMyLCAxMTQsIDQ0LCAyMjUsIDIwMSwgMjI1LCAyMDEsIDIxNCwgCisgICAgMTYwLCA0NCwgMjI1LCAyMDEsIDcxLCAyMjgsIDIzNSwgODUsIDIyOCwgMjM1LCAyNTAsIDEzOCwgNzksIDExNCwgMjUwLCAKKyAgICAxMzgsIDc5LCAyMzAsIDg5LCAyMTEsIDE3OCwgMTE0LCAyMzAsIDg5LCAyMTEsIDE3OCwgMjUyLCAxNjQsIDIxMSwgMTc4LCAKKyAgICAxMTQsIDI1MiwgMTY0LCAyMTEsIDE3OCwgMjI2LCAxMzAsIDI2LCAyNDksIDEzOCwgMTE0LCAyNiwgMjQ5LCAxMzgsIDIwNCwgCisgICAgMjUwLCAxODMsIDI0OSwgMTM4LCAxMTQsIDIwNCwgMjUwLCAxODMsIDI0OSwgMTM4LCA3LCAyNDksIDEzOCwgMjIwLCA5MywgCisgICAgNzEsIDcsIDI0OSwgMTM4LCAyMjYsIDEzMCwgNywgMjQ5LCAxMzgsIDIzMSwgMTkyLCAyNDksIDEzOCwgMjE4LCAxNTksIDY0LCAKKyAgICAyNDgsIDE1NywgMjQ0LCAxOSwgMjE3LCAxNiwgMjUzLCAyMjQsIDI0NCwgMTksIDI1MiwgMTY1LCAyNTMsIDIyNCwgMTE0LCAKKyAgICAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDI0NCwgMTksIDI0OSwgMjUxLCAyNTMsIDIyNCwgODUsIDI0NCwgMTksIAorICAgIDIyNSwgMTIsIDIxOCwgMTU4LCA3MSwgMjQ0LCAxOSwgMjI1LCAxMiwgMjE4LCAxNTgsIDIxOSwgMTMsIDIxOCwgMTEzLCAKKyAgICAyMjYsIDEzMCwgNzEsIDIxOCwgMTU4LCAzNywgNzEsIDIxOCwgMTU4LCAyMDQsIDI1MCwgMTgzLCA4NSwgMjE4LCAxNTgsIAorICAgIDg1LCAyNTAsIDE4MywgNzEsIDIxOCwgMTU4LCAyMjYsIDEzMCwgODUsIDIxOCwgMTU4LCAxMTQsIDIyNiwgMTMwLCA4NSwgCisgICAgMjE4LCAxNTgsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMjAsIDkzLCA3MSwgMjE4LCAxNTgsIDExNCwgMjUzLCAyMjQsIDIwNCwgCisgICAgMjUwLCAxODMsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE4LCAyNDYsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjI1LCAxMiwgODUsIAorICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjI1LCA2MywgMjE4LCAxNTgsIDIxOSwgMTI3LCAyMjUsIDEyLCA4NSwgCisgICAgMjE4LCAxNTgsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMjMsIDExNywgODUsIDIxOCwgMTU4LCAxMTQsIDI0NSwgMjAxLCAyMjUsIAorICAgIDEyLCAyMjMsIDExNywgODUsIDIxOCwgMTU4LCAyMTUsIDc3LCAyMjUsIDEyLCA4NSwgMjE4LCAxNTgsIDIxOSwgMTIyLCAKKyAgICAyMjUsIDEyLCAyNTMsIDIyNCwgMjE3LCAxNiwgMjUzLCAyMjQsIDIwNCwgMjUwLCAxODMsIDIxNywgMTYsIDI1MywgMjI0LCAKKyAgICAxMTQsIDIxNywgMTYsIDI1MywgMjI0LCAyMTksIDEyNywgMjI1LCAxNjAsIDg1LCAyMiwgNzEsIDI0NCwgNjIsIDg1LCAyNDQsIAorICAgIDYyLCA3MSwgMjQ0LCA2MiwgMjQ1LCAyMDEsIDIyNSwgMTYwLCAyMjYsIDEzMCwgODUsIDI0NCwgNjIsIDM3LCAyMDQsIDI1MCwgCisgICAgMTgzLCAyNDUsIDIwMSwgMjI1LCAxMiwgMjE4LCAxNTgsIDExNCwgMjE3LCAxNiwgMjI1LCA2MywgMjUzLCAyMjQsIDIxOSwgCisgICAgNjQsIDIxNiwgMTA2LCAyMTUsIDIxOSwgMjE5LCA2NCwgMTE0LCAyNTAsIDEyMiwgMjE5LCA2NCwgMjE5LCAxNSwgMTE0LCAKKyAgICAyMTksIDE1LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDExNCwgCisgICAgMjQ1LCAyMDEsIDIxNywgMTYsIDIyNCwgMTc0LCAyNTMsIDIyNCwgMjQ5LCAxMzksIDc5LCAyMjAsIDkzLCA3MSwgMjUwLCAKKyAgICA0MywgMTUyLCA5MiwgMjQ5LCAxMzksIDc5LCAyMzIsIDExNCwgNDQsIDI0NiwgOTQsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAorICAgIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIzMiwgMTE0LCA0NCwgMjIwLCA5MywgNzEsIDIxOCwgMjM2LCAyMTQsIDE2MCwgCisgICAgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgODUsIDIyNCwgMTYsIDE2NCwgMjI2LCAxNTEsIDcxLCAyMjQsIDE2LCAxNjQsIAorICAgIDIyNiwgMTUxLCA3MSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgODUsIDI0OCwgMSwgMjMwLCAxODcsIDcxLCAyMTEsIDE3OCwgCisgICAgMTE0LCAyNDUsIDM5LCAxNjQsIDg3LCAxOTMsIDY3LCAxMzAsIDIzMSwgODcsIDY3LCAxMzAsIDExNCwgNjcsIDEzMCwgMTE0LCAKKyAgICAyMTksIDE1NywgMjE1LCA5NCwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMTksIDE1NywgMjQ5LCAKKyAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA1MiwgMjE1LCA5NCwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMTE0LCA1MiwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDIxOSwgMTU3LCAyNDksIAorICAgIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDEyMSwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKKyAgICAxNTEsIDI0OSwgOTksIDIxOCwgMTQyLCAyMjYsIDE5LCA1LCAyMjYsIDE1MSwgMTE0LCAyNDUsIDM5LCAxNjQsIDIyNiwgCisgICAgMTUxLCAxMTQsIDI0MSwgMjM1LCAyNDUsIDM5LCAxNjQsIDIyNiwgMTUxLCAxMTQsIDg1LCAyNDEsIDIzNCwgMjIyLCAxODksIAorICAgIDExNCwgODUsIDI0MSwgMjM1LCAyNTEsIDEyMSwgMjQ0LCA2MywgMjQxLCAyMzQsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIAorICAgIDIzNSwgMjUxLCAxMjEsIDIzMSwgODcsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCA0NCwgMjI2LCA4LCAyMjYsIAorICAgIDE1MSwgMjMxLCA4NywgMjQ0LCA3MSwgNDMsIDIyNiwgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQ0LCAyMjYsIAorICAgIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIDg3LCAKKyAgICAyMjIsIDI1MCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTE0LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAxLCAKKyAgICAxNjQsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDIzMywgCisgICAgNDgsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAKKyAgICAxNTEsIDE5MywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxOTMsIDQ0LCAyMTYsIDcsIDIyMCwgCisgICAgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgCisgICAgODcsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDExMSwgMjQ3LCAKKyAgICAyMTIsIDE1MiwgMzcsIDIxLCAxMDUsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIAorICAgIDE2MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTAsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIxMiwgCisgICAgMTUyLCAzNywgMjEsIDE5OSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTYsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMjAxLCAKKyAgICAyNDcsIDIxMiwgMTUyLCAzNywgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTExLCAyNDcsIDIxMiwgMzcsIAorICAgIDM1LCAyMSwgMTA1LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIAorICAgIDIxMiwgMzcsIDM1LCAyMSwgMTkwLCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgCisgICAgMTk5LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTk2LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMzcsIAorICAgIDM1LCA1NCwgMjE2LCAyNDgsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAKKyAgICAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNTgsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE2MSwgCisgICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjEyLCAKKyAgICAxNTIsIDM3LCAzNSwgMjEsIDE5OSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgCisgICAgMzUsIDIxLCAyMDEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgNTQsIDIxNiwgMjQ4LCAxMTQsIDIxMSwgMjQ2LCA5NywgNzUsIAorICAgIDExNCwgOTYsIDUwLCAxMTQsIDIzMCwgMTg3LCA1MCwgMTE0LCAyNDcsIDE3NywgNTAsIDExNCwgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAxMTQsIDk3LCA3NSwgMTE0LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDI0NiwgMTA2LCAyMjUsIDE0LCA5NywgCisgICAgNzUsIDExNCwgMjIyLCAxODYsIDk3LCA3NSwgMjE1LCAyMjUsIDk3LCA3NSwgMTE0LCAyMTUsIDIyNSwgOTcsIDc1LCAyNDgsIAorICAgIDE2MywgMjE1LCAyMjUsIDk3LCA3NSwgMTE0LCAyNDgsIDE2MywgMjE1LCAyMjUsIDk3LCA3NSwgODUsIDk3LCA3NSwgMjE2LCAKKyAgICAxNDUsIDIxNiwgMTMsIDk3LCAyNTQsIDEsIDIxNiwgMTQ1LCAyNTEsIDE4MSwgOTcsIDI1NCwgMSwgODUsIDk3LCAyNTQsIDEsIAorICAgIDExNCwgODUsIDI0OSwgOTksIDI0NiwgMTEyLCAyMiwgOTcsIDc1LCAxMTQsIDg1LCAyNDksIDk5LCAyMTQsIDE1MywgMjIsIAorICAgIDk3LCA3NSwgMjE4LCAyMzMsIDg1LCA5NywgNzUsIDExNCwgMjQ5LCAyMTQsIDg1LCA5NywgNzUsIDIyMiwgMjQ5LCA3MSwgCisgICAgOTcsIDc1LCAyMzMsIDQ3LCA3MSwgOTcsIDc1LCAyNTIsIDE5MSwgMjIwLCA5MywgNzEsIDk3LCA3NSwgMjQzLCAyNDksIAorICAgIDIyMCwgOTMsIDcxLCA5NywgNzUsIDExNCwgMjMyLCAxMTQsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAxMTQsIDIxNCwgMTYwLCAKKyAgICAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjI4LCA1NCwgMjMyLCAxMTQsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAyNDksIDEwNywgCisgICAgMjMyLCAxMjksIDIyOCwgNTQsIDIxNCwgMTYwLCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMzcsIDExNCwgNzEsIDk3LCA3NSwgCisgICAgMjExLCAyNTIsIDk3LCA3NSwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjUxLCAyMjgsIDk3LCA3NSwgMjUxLCAKKyAgICAyMjgsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMTE0LCAyNTEsIDIyOCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAxMTQsIAorICAgIDI1MSwgMjI4LCA5NywgNzUsIDExNCwgMjUxLCAyMjgsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE3LCAxOCwgOTcsIDc1LCAKKyAgICAxMTQsIDIxNywgMTcsIDk3LCA3NSwgMjEyLCAxOCwgOTcsIDc1LCAxMTQsIDIxMiwgMTgsIDk3LCA3NSwgMjI2LCAxNzYsIAorICAgIDk3LCA3NSwgNTIsIDI0OSwgMTA3LCAyMzIsIDEyOSwgMTM0LCAyNDcsIDIyMiwgMjU0LCAxMTcsIDcxLCAyMTUsIDIyNywgCisgICAgMjQ5LCAxOTUsIDQsIDcxLCAyMTUsIDIyNiwgMjI1LCAxNzQsIDIwNCwgMjE4LCA2NCwgMjA0LCAyMTgsIDIyLCA0MywgMjIyLCAKKyAgICA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDQ0LCAyMjIsIDkyLCAyNTIsIDE4MSwgMjQ4LCA2OCwgMTc3LCAyLCA1OSwgMjM1LCAKKyAgICAyMjIsIDIyMywgNTMsIDIxOSwgNDksIDIyNCwgMjA0LCAyMTgsIDY0LCAyMTgsIDIzLCAyMjQsIDIwNCwgMjE5LCA0OCwgNjcsIAorICAgIDI1MiwgMTQ5LCAyLCAyMDMsIDkxLCAxMSwgMjIyLCAyMzEsIDI0OCwgNiwgMjAwLCAyNDcsIDE3NiwgMTEsIDI0NCwgMTgzLCAKKyAgICAyNDgsIDYsIDkyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDkyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDcxLCAyNDgsIDEsIDIsIAorICAgIDI1MCwgMTgxLCAyNDcsIDEyOCwgMjIsIDIsIDI0NywgMTI4LCAyNDUsIDE3OCwgNjQsIDIyNiwgMTc0LCAyMTQsIDE1MiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyNDksIDE2OSwgMiwgMjQ3LCAxMjgsIDIxNCwgMTYwLCA0MywgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAKKyAgICA0MywgMjI2LCAxMzIsIDIzNSwgNzIsIDQ0LCAyMjYsIDEzMiwgMjM1LCA3MiwgMjQzLCAyMzYsIDIyNiwgMTMyLCAyMzUsIAorICAgIDcyLCAyMzMsIDkxLCAxMjAsIDIxNywgODgsIDIzMywgOTEsIDEyNCwgMjE3LCA4OCwgNDMsIDIyLCA0NCwgNTIsIDIxNSwgCisgICAgOTMsIDQzLCAyMiwgNDQsIDIxNywgODgsIDQzLCAyMzAsIDkyLCAyMDAsIDQ0LCAyMTcsIDg4LCAyMDAsIDQzLCAyMTcsIDg4LCAKKyAgICAxMjAsIDIxNywgODksIDIsIDI1MCwgNDQsIDQ4LCAyMzIsIDExMSwgMjQ3LCAxODEsIDI1MSwgODYsIDIwMywgMjIyLCAxMzUsIAorICAgIDcxLCAyNDksIDIxMywgMjQ4LCAwLCA3MSwgMjQ5LCAyMTMsIDI0OCwgMSwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDI0OSwgCisgICAgMjEzLCAyNDgsIDEsIDIsIDk3LCAyMTYsIDExNSwgNzEsIDQyLCAyLCAxNDAsIDIxNiwgMTE1LCA3MSwgNDIsIDIsIDk3LCAKKyAgICAyMTYsIDExNSwgMTEsIDQzLCA3MSwgNDIsIDEyNywgMTEsIDQ0LCA3MSwgNDIsIDEyNywgMTEsIDQzLCAyNTQsIDExOCwgCisgICAgMTI3LCAxMSwgNDQsIDI1NCwgMTE4LCAxMjcsIDExLCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDExLCA0NCwgNTIsIDI1NCwgCisgICAgMTE4LCAxMjcsIDExLCA0MywgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAxMSwgNDQsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIAorICAgIDEyNywgMTEsIDQzLCAyNDQsIDcxLCAyMjYsIDcsIDExLCA0NCwgMjQ0LCA3MSwgMjI2LCA3LCAyMTQsIDE1MywgMjI0LCAyNywgCisgICAgNzUsIDI0NiwgMTEyLCAyMjQsIDI3LCA3NSwgMjU0LCA5NiwgMjQzLCAxMDUsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNDMsIAorICAgIDEwNSwgMjUwLCA0NCwgNzUsIDQ0LCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCA3NSwgMjAwLCA5NywgNzUsIDIwMCwgCisgICAgNDMsIDQ0LCA3NSwgMjAwLCAxNDAsIDUyLCA3NSwgMjAwLCA5NywgNTIsIDc1LCAyMDAsIDQzLCA0NCwgNTIsIDc1LCAyMDAsIAorICAgIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDE0MCwgNTIsIDgwLCAKKyAgICAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDIxOCwgMjMyLCA3NSwgNDYsIAorICAgIDQ3LCAyNTEsIDIyMywgNDYsIDQ3LCAyNDcsIDEyNSwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDcsIDEyNCwgNDYsIAorICAgIDQ3LCAyNDYsIDE4OSwgNDYsIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMjUyLCA0NiwgNDcsIDI0NywgMTIzLCA0NiwgCisgICAgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgMjQ3LCA5MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE4OCwgNDYsIDQ3LCAyNDcsIDU5LCA0NiwgNDcsIDI0NiwgMjUxLCA0NiwgNDcsIDI0NywgMTIyLCA0NiwgNDcsIAorICAgIDI0NiwgMTQxLCA0NiwgNDcsIDI0NywgMTIsIDQ2LCA0NywgMjQ2LCAyMDQsIDQ2LCA0NywgMjQ3LCA3NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE3MiwgNDYsIDQ3LCAyNDcsIDQzLCA0NiwgNDcsIDI0NiwgMjM1LCA0NiwgNDcsIDI0NywgMTA2LCA0NiwgNDcsIAorICAgIDI0NiwgMTU2LCA0NiwgNDcsIDI0NywgMjcsIDQ2LCA0NywgMjQ2LCAyMTksIDQ2LCA0NywgMjQ3LCA5MCwgNDYsIDQ3LCAKKyAgICAyNDYsIDE4NywgNDYsIDQ3LCAyNDcsIDU4LCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NywgMTIxLCA0NiwgNDcsIAorICAgIDI0NiwgMTMzLCA0NiwgNDcsIDI0NywgNCwgNDYsIDQ3LCAyNDYsIDE5NiwgNDYsIDQ3LCAyNDcsIDY3LCA0NiwgNDcsIDI0NiwgCisgICAgMTY0LCA0NiwgNDcsIDI0NywgMzUsIDQ2LCA0NywgMjQ2LCAyMjcsIDQ2LCA0NywgMjQ3LCA5OCwgNDYsIDQ3LCAyNDYsIAorICAgIDE0OCwgNDYsIDQ3LCAyNDcsIDE5LCA0NiwgNDcsIDI0NiwgMjExLCA0NiwgNDcsIDI0NywgODIsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNzksIDQ2LCA0NywgMjQ3LCA1MCwgNDYsIDQ3LCAyNDYsIDI0MiwgNDYsIDQ3LCAyNDcsIDExMywgNDYsIDQ3LCAyNDYsIAorICAgIDE0MCwgNDYsIDQ3LCAyNDcsIDExLCA0NiwgNDcsIDI0NiwgMjAzLCA0NiwgNDcsIDI0NywgNzQsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNzEsIDQ2LCA0NywgMjQ3LCA0MiwgNDYsIDQ3LCAyNDYsIDIzNCwgNDYsIDQ3LCAyNDcsIDEwNSwgNDYsIDQ3LCAyNDYsIAorICAgIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAKKyAgICAxODYsIDQ2LCA0NywgMjQ3LCA1NywgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDcsIDEyMCwgNDYsIDQ3LCAyNDYsIAorICAgIDEyOSwgNDYsIDQ3LCAyNDcsIDAsIDQ2LCA0NywgMjQ2LCAxOTIsIDQ2LCA0NywgMjQ3LCA2MywgNDYsIDQ3LCAyNDYsIDE2MCwgCisgICAgNDYsIDQ3LCAyNDcsIDMxLCA0NiwgNDcsIDI0NiwgMjIzLCA0NiwgNDcsIDI0NywgOTQsIDQ2LCA0NywgMjQ2LCAxNDQsIDQ2LCAKKyAgICA0NywgMjQ3LCAxNSwgNDYsIDQ3LCAyNDYsIDIwNywgNDYsIDQ3LCAyNDcsIDc4LCA0NiwgNDcsIDI0NiwgMTc1LCA0NiwgNDcsIAorICAgIDI0NywgNDYsIDQ2LCA0NywgMjQ2LCAyMzgsIDQ2LCA0NywgMjQ3LCAxMDksIDQ2LCA0NywgMjQ2LCAxMzYsIDQ2LCA0NywgCisgICAgMjQ3LCA3LCA0NiwgNDcsIDI0NiwgMTk5LCA0NiwgNDcsIDI0NywgNzAsIDQ2LCA0NywgMjQ2LCAxNjcsIDQ2LCA0NywgMjQ3LCAKKyAgICAzOCwgNDYsIDQ3LCAyNDYsIDIzMCwgNDYsIDQ3LCAyNDcsIDEwMSwgNDYsIDQ3LCAyNDYsIDE1MSwgNDYsIDQ3LCAyNDcsIAorICAgIDIyLCA0NiwgNDcsIDI0NiwgMjE0LCA0NiwgNDcsIDI0NywgODUsIDQ2LCA0NywgMjQ2LCAxODIsIDQ2LCA0NywgMjQ3LCA1MywgCisgICAgNDYsIDQ3LCAyNDYsIDI0NSwgNDYsIDQ3LCAyNDcsIDExNiwgNDYsIDQ3LCAyNDYsIDEzMiwgNDYsIDQ3LCAyNDcsIDMsIDQ2LCAKKyAgICA0NywgMjQ2LCAxOTUsIDQ2LCA0NywgMjQ3LCA2NiwgNDYsIDQ3LCAyNDYsIDE2MywgNDYsIDQ3LCAyNDcsIDM0LCA0NiwgNDcsIAorICAgIDI0NiwgMjI2LCA0NiwgNDcsIDI0NywgOTcsIDQ2LCA0NywgMjQ2LCAxNDcsIDQ2LCA0NywgMjQ3LCAxOCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxMCwgNDYsIDQ3LCAyNDcsIDgxLCA0NiwgNDcsIDI0NiwgMTc4LCA0NiwgNDcsIDI0NywgNDksIDQ2LCA0NywgCisgICAgMjQ2LCAyNDEsIDQ2LCA0NywgMjQ3LCAxMTIsIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgMTg1LCA0NiwgNDcsIDI0NywgNTYsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDgsIDQ2LCA0NywgMjQ3LCAxMTksIDQ2LCA0NywgMjQ2LCAxMjcsIDQ2LCA0NywgMjQ2LCAyNTQsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTAsIDQ2LCA0NywgMjQ3LCA2MSwgNDYsIDQ3LCAyNDYsIDE1OCwgNDYsIDQ3LCAyNDcsIDI5LCA0NiwgNDcsIAorICAgIDI0NiwgMjIxLCA0NiwgNDcsIDI0NywgOTIsIDQ2LCA0NywgMjQ2LCAxNDIsIDQ2LCA0NywgMjQ3LCAxMywgNDYsIDQ3LCAKKyAgICAyNDYsIDIwNSwgNDYsIDQ3LCAyNDcsIDc2LCA0NiwgNDcsIDI0NiwgMTczLCA0NiwgNDcsIDI0NywgNDQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzYsIDQ2LCA0NywgMjQ3LCAxMDcsIDQ2LCA0NywgMjQ2LCAxMzQsIDQ2LCA0NywgMjQ3LCA1LCA0NiwgNDcsIAorICAgIDI0NiwgMTk3LCA0NiwgNDcsIDI0NywgNjgsIDQ2LCA0NywgMjQ2LCAxNjUsIDQ2LCA0NywgMjQ3LCAzNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyOCwgNDYsIDQ3LCAyNDcsIDk5LCA0NiwgNDcsIDI0NiwgMTQ5LCA0NiwgNDcsIDI0NywgMjAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTIsIDQ2LCA0NywgMjQ3LCA4MywgNDYsIDQ3LCAyNDYsIDE4MCwgNDYsIDQ3LCAyNDcsIDUxLCA0NiwgNDcsIAorICAgIDI0NiwgMjQzLCA0NiwgNDcsIDI0NywgMTE0LCA0NiwgNDcsIDI0NiwgMTMwLCA0NiwgNDcsIDI0NywgMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MywgNDYsIDQ3LCAyNDcsIDY0LCA0NiwgNDcsIDI0NiwgMTYxLCA0NiwgNDcsIDI0NywgMzIsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjQsIDQ2LCA0NywgMjQ3LCA5NSwgNDYsIDQ3LCAyNDYsIDE0NSwgNDYsIDQ3LCAyNDcsIDE2LCA0NiwgNDcsIAorICAgIDI0NiwgMjA4LCA0NiwgNDcsIDI0NywgNzksIDQ2LCA0NywgMjQ2LCAxNzYsIDQ2LCA0NywgMjQ3LCA0NywgNDYsIDQ3LCAKKyAgICAyNDYsIDIzOSwgNDYsIDQ3LCAyNDcsIDExMCwgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIAorICAgIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgMTAyLCA0NiwgNDcsIDI0NiwgMTUyLCA0NiwgNDcsIDI0NywgMjMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTUsIDQ2LCA0NywgMjQ3LCA4NiwgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NywgMTE3LCA0NiwgNDcsIDI0NiwgMTI4LCA0NiwgNDcsIDI0NiwgMjU1LCA0NiwgNDcsIAorICAgIDI0NiwgMTkxLCA0NiwgNDcsIDI0NywgNjIsIDQ2LCA0NywgMjQ2LCAxNTksIDQ2LCA0NywgMjQ3LCAzMCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyMiwgNDYsIDQ3LCAyNDcsIDkzLCA0NiwgNDcsIDI0NiwgMTQzLCA0NiwgNDcsIDI0NywgMTQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDYsIDQ2LCA0NywgMjQ3LCA3NywgNDYsIDQ3LCAyNDYsIDE3NCwgNDYsIDQ3LCAyNDcsIDQ1LCA0NiwgNDcsIAorICAgIDI0NiwgMjM3LCA0NiwgNDcsIDI0NywgMTA4LCA0NiwgNDcsIDI0NiwgMTM1LCA0NiwgNDcsIDI0NywgNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5OCwgNDYsIDQ3LCAyNDcsIDY5LCA0NiwgNDcsIDI0NiwgMTY2LCA0NiwgNDcsIDI0NywgMzcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjksIDQ2LCA0NywgMjQ3LCAxMDAsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTgxLCA0NiwgNDcsIDI0NywgNTIsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDQsIDQ2LCA0NywgMjQ3LCAxMTUsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIAorICAgIDI0NiwgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIAorICAgIDI0NiwgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxNTMsIDQ2LCA0NywgMjQ3LCAyNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxNiwgNDYsIDQ3LCAyNDcsIDg3LCA0NiwgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDcsIDQ2LCA0NywgMjQ3LCAxMTgsIDk3LCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIAorICAgIDIsIDUyLCA2NywgOTEsIDE0MCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCA1MiwgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA1MiwgCisgICAgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgMTMwLCAxNDAsIDUyLCA4MCwgMjQzLCAyNTEsIAorICAgIDEzMCwgOTcsIDUyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgODAsIAorICAgIDIsIDIwMywgOTEsIDIxNCwgMTUzLCAyMTUsIDIxMiwgNzUsIDI0NiwgMTEyLCAyMTUsIDIxMiwgNzUsIDE0MCwgNTIsIDI0OCwgCisgICAgMTY1LCA3NSwgOTcsIDUyLCAyNDgsIDE2NSwgNzUsIDE0MCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDIxNSwgMjEyLCAKKyAgICAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCA5NywgODAsIDIsIDI0NiwgMTI2LCAKKyAgICAyMTgsIDE0MSwgMjE0LCAxNTMsIDgwLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCA4MCwgMjE2LCA0MywgMTMwLCA5NywgODAsIAorICAgIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgCisgICAgODAsIDIsIDIxNywgNzgsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIAorICAgIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgMjU0LCAzLCA5NywgMjU0LCAzLCAxNDAsIDUyLCAyNTQsIDMsIDk3LCAKKyAgICA1MiwgMjU0LCAzLCAxNDAsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCA5NywgODAsIDIxNiwgNDMsIDg1LCAyNDgsIDAsIAorICAgIDE0MCwgODAsIDI0MywgMjUxLCAyNTIsIDE0OSwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyNDMsIDI1MSwgMjUyLCAKKyAgICAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDIyOCwgNjEsIDIxMiwgOSwgMjIsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgCisgICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDIyLCAyMTksIDMwLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyLCAxMDMsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA4MCwgMiwgMTAzLCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgCisgICAgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODAsIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMjIsIAorICAgIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgODAsIDIyLCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjIsIAorICAgIDIzMSwgMjQ4LCA3LCAyNDksIDEzMywgMjQ0LCAxODMsIDI0OCwgNiwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAxMzMsIDIyMiwgCisgICAgMjMxLCAyNDgsIDYsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyNDQsIDE4MywgMjQ4LCA3LCAyNDksIAorICAgIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjIsIDIzMSwgMjQ4LCA3LCAyNDksIDEzMywgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAKKyAgICAyMTIsIDksIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTIsIDM2LCA4MCwgMjI1LCAxMCwgMjQ3LCAKKyAgICAyMDMsIDIyMiwgMjU0LCA4MCwgMjI1LCAxMCwgOTcsIDIxNiwgMTg5LCAyNDksIDk4LCAyMTQsIDE1MiwgODAsIDIyNSwgMTAsIAorICAgIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjQ2LCAxMTEsIDgwLCAyMjUsIDEwLCAyNDYsIDExMiwgMjE2LCAxODksIDI0OSwgCisgICAgOTgsIDIzMywgNDMsIDgwLCAyMjUsIDEwLCAyNDYsIDExMiwgMjE2LCAxODksIDI0OSwgOTgsIDIyMiwgMjQ0LCAyMjIsIAorICAgIDI0NywgMjU0LCAzNCwgMjUwLCAxMCwgNzUsIDIzMywgNDYsIDI1NCwgMzQsIDI1NCwgOTYsIDc1LCAyMTYsIDE1LCAyNTQsIAorICAgIDM0LCAyNTQsIDk2LCA3NSwgMjUxLCAxODMsIDI1NCwgMzQsIDI1NCwgOTYsIDc1LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTAsIAorICAgIDEwLCA4MCwgMiwgMjMwLCAxODYsIDIxNiwgMTUsIDI1NCwgMzQsIDI1NCwgOTYsIDgwLCAyLCAyMjUsIDI1LCAyMzIsIDExNCwgCisgICAgNDQsIDIyMCwgMTU0LCAyNTAsIDEwLCA3NSwgMjMyLCAxMTQsIDQzLCAyMjAsIDE1NCwgMjU0LCA5NiwgNzUsIDI1NCwgOTYsIAorICAgIDI1MCwgOCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDI1MCwgOCwgMjUwLCA0NCwgNzUsIDk3LCA4MCwgNzIsIDIxOSwgMjUzLCAKKyAgICAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjE5LCAyNTMsIDk3LCA3NSwgMjE5LCAyNTMsIDk3LCA4MCwgNzIsIDE0MCwgNzUsIAorICAgIDk3LCA4MCwgMiwgOTYsIDUxLCAxNDAsIDgwLCAyLCA5NiwgNTEsIDk3LCA4MCwgMjE2LCAxNDAsIDIxMSwgMTc4LCA0MywgCisgICAgNDQsIDgwLCAyMTYsIDE0MCwgNCwgMjUwLCA0MywgMjE0LCAxNTMsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgNCwgMjUwLCAKKyAgICA0MywgNDMsIDI1MiwgMTQ3LCAxMjAsIDQ0LCAyNTIsIDE0NywgMTI0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgMTI0LCA0NCwgCisgICAgMjUyLCAxNDcsIDEyMCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0NCwgMTI0LCAyNTIsIDE0NywgNDMsIDI0MiwgNSwgMTIwLCAKKyAgICAyNTIsIDE0NywgNDMsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIAorICAgIDEyMCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0NCwgMTI0LCAyNTIsIDE0NywgNDQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAKKyAgICAxMjQsIDQ0LCAyNTIsIDE0NywgMTI0LCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0MywgCisgICAgMjQyLCA1LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgMTIwLCAyMTYsIDQzLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjE2LCA0MywgMTMwLCAKKyAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjE2LCA0MywgMTMwLCAyMTQsIAorICAgIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDIxNiwgNDMsIDEzMCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyNDMsIDI1MSwgMTMwLCA5NywgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgCisgICAgNDQsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjQzLCAyNTEsIDEzMCwgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI0MywgMjUxLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIAorICAgIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMjQ2LCAKKyAgICAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNDMsIDI1MSwgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA5NywgMjQyLCA2LCAyLCAKKyAgICAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyNDYsIDExMiwgMjQyLCA2LCAKKyAgICAyLCAyNTIsIDE0NywgNDMsIDI1MiwgMzgsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCA5NywgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE2MywgOTcsIDI0MiwgNiwgCisgICAgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDE0MCwgMjQyLCA2LCAyLCAKKyAgICAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI1MiwgNTEsIAorICAgIDIwMCwgMjQ4LCAxNjQsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAyMDAsIDI0OCwgMTY0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDI1MiwgMzgsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgMjQ2LCAxMTIsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDQ0LCAKKyAgICA1MiwgODAsIDIsIDIyMiwgMTg1LCAyNDEsIDI0MiwgMjQ1LCAxMDYsIDUsIDcyLCA5NywgNzUsIDIxNiwgOTAsIDIyNiwgCisgICAgMTcyLCA3MiwgOTcsIDc1LCAxNDAsIDgwLCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDIxNiwgOTAsIAorICAgIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIzMywgMjEsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCAKKyAgICAyMTYsIDE0MCwgMjMzLCAyMCwgMjQyLCAxMzcsIDcyLCA5NywgNzUsIDIxOCwgNjUsIDcyLCA5NywgNzUsIDE0MCwgODAsIAorICAgIDIxNiwgMTQwLCAyMTgsIDY0LCAyMTgsIDIzLCA3MiwgMTQwLCA3NSwgNDMsIDI0NCwgOTksIDIxNywgNzgsIDQ0LCAyNDQsIAorICAgIDk5LCAyMTcsIDc4LCAxMjAsIDI0NCwgOTksIDIxNywgNzgsIDEyNCwgMjQ0LCA5OSwgMjE3LCA3OCwgMjE1LCAyMTIsIDY3LCAKKyAgICAyNTIsIDE0OSwgMjQ4LCA2OCwgMjEwLCAxNjAsIDE4OSwgMjE4LCAyNDQsIDIxMCwgMTYwLCAxODksIDIxNSwgNDksIDI0OSwgCisgICAgMjM0LCA0MywgNzEsIDI0OSwgMTA3LCAxMjcsIDQ0LCA3MSwgMjQ5LCAxMDcsIDEyNywgNDMsIDcxLCAyMjYsIDcsIDQ0LCAKKyAgICA3MSwgMjI2LCA3LCAyMTAsIDE2MCwgMTg5LCA0MywgMjM2LCAyMiwgMTI3LCAyMTAsIDE2MCwgMTg5LCA0NCwgMjM2LCAyMiwgCisgICAgMTI3LCAyMTAsIDE2MCwgMTg5LCA0MywgMjUxLCAyNTAsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDI1MSwgMjUwLCAxMjcsIAorICAgIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNCwgMTgzLCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDMsIDQyLCAKKyAgICAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIAorICAgIDIxNiwgMTE2LCAyMzYsIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDMsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgCisgICAgNywgMjUxLCAxODMsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCA3LCAyMTYsIDE1LCAKKyAgICAyNDksIDE2OCwgNDMsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMiwgMjQ3LCAxMjgsIDQ0LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIAorICAgIDI0NywgMTI4LCA0MywgMjU0LCAzNCwgMjMzLCAyMSwgMTI3LCA0NCwgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQzLCAKKyAgICAyNTQsIDM0LCAyNDIsIDEzNywgMTI3LCA1MiwgNDQsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDMsIDg1LCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNDQsIDg1LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjQ2LCAxMjYsIDI0NCwgMTQzLCA2NywgMjEwLCAKKyAgICAzNSwgMjMyLCAyMTksIDIzMSwgOTMsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjMzLCA1MiwgNDQsIDI1NCwgMTE4LCAyMTQsIAorICAgIDEyLCAyLCAyMTgsIDIzNiwgMjMxLCA5MywgNDQsIDI1NCwgMTE4LCAyLCAyNDcsIDEyOCwgMjU0LCAxMTgsIDIsIDIyMiwgCisgICAgOTQsIDIzNSwgMjIyLCAyNTUsIDEyLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIAorICAgIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMTQsIDE2MywgMjE1LCA5NCwgMjU0LCAxMTcsIDIyMywgNTIsIDI1NCwgCisgICAgMTE3LCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyMywgNTIsIDI1NCwgMTE4LCAyLCAyMTQsIDE4MywgMjI2LCAyNTIsIAorICAgIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIyNiwgMjUyLCAyNTQsIDExOCwgMjI2LCAxNzQsIDI0NiwgMTE0LCAKKyAgICAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTIwLCAKKyAgICAyMiwgMjIyLCAyNTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAKKyAgICAyMjUsIDEwLCAxMjAsIDIyLCAyMzMsIDUyLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgCisgICAgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjIyLCAyNTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgCisgICAgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjQsIDIyLCAyMzMsIDUyLCAyMzEsIDkzLCAyNTQsIDExOCwgCisgICAgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgNDQsIDIyLCAyMTQsIDE2MywgMjMxLCAKKyAgICA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgCisgICAgMjE0LCAxNjMsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIAorICAgIDEwLCA0NCwgMjIsIDI0NiwgMTE0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCAKKyAgICA3LCA4MCwgMjI1LCAxMCwgNDMsIDIyLCAyNDYsIDExNCwgMjIzLCA1MiwgMjQ1LCAxNjAsIDIyMCwgMTI5LCAyNDUsIDE2MCwgCisgICAgMjIwLCAxMzAsIDIsIDIyNiwgMTI3LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQsIDI1MCwgNDQsIDQ4LCAyNDUsIDE2MCwgCisgICAgMjIwLCAxMzAsIDIsIDQ0LCA4MCwgNDgsIDI0NSwgMTYwLCAyMjAsIDEzMCwgMiwgNDMsIDgwLCA0OCwgMjUwLCA0NCwgMiwgCisgICAgMjAzLCAxMzAsIDM3LCA2NywgMTMwLCAzNywgMjI2LCAxMSwgMzcsIDIyMywgNTMsIDIxOSwgNDgsIDM3LCAyMjUsIDE3NCwgCisgICAgMjUwLCA0NCwgMjQ3LCAxODEsIDI1MSwgODYsIDIwMywgMjUyLCAxNDksIDIyLCAyMTYsIDE1LCAxNjMsIDI0NywgMTgxLCAKKyAgICAyNTEsIDg2LCA2NywgMTMwLCAyNTAsIDQ0LCAyLCAyMTgsIDI1LCAyMTEsIDE3OCwgMzcsIDI1NCwgOTUsIDI0NywgMTc3LCAKKyAgICA1MCwgMTIwLCA4MCwgMjE2LCAxNDAsIDI1MCwgNDMsIDM3LCA3MSwgMjUxLCAxMjEsIDM3LCAyNTEsIDEyMSwgMzcsIDIzMywgCisgICAgMjAsIDM3LCAyNDIsIDEzNiwgMjUwLCA0NCwgMiwgNCwgMjUwLCA0NCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAKKyAgICAyNTAsIDQ0LCAyLCAxMTMsIDIwMywgMjE4LCA5MywgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCA5MiwgMjIyLCAyMzEsIAorICAgIDI0OCwgNywgMjE5LCA5NywgOTIsIDI0NCwgMTgzLCAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNTMsIDIyNCwgOTIsIDQsIDI1MCwgCisgICAgNDMsIDkyLCAyMTgsIDIzNiwgMTEzLCAyMzUsIDcxLCAyMTgsIDIzNCwgMjE1LCAyMjcsIDIsIDU5LCA0OCwgMjE1LCAyMjcsIAorICAgIDIsIDIxNCwgMTgzLCAyMjIsIDk0LCAyMzYsIDcsIDIxNSwgMjI2LCAyMTUsIDIyNywgMiwgMjIwLCAxMzYsIDI1MywgMjE1LCAKKyAgICAyNTEsIDE4MiwgNDQsIDIxNSwgMjI3LCA3MiwgNDMsIDIxNSwgMjI2LCA0MywgMjE1LCAyMjcsIDI1MiwgMzgsIDY3LCAxMzAsIAorICAgIDY3LCAyNTIsIDE0OSwgMjUyLCAzOCwgNDQsIDIxNSwgMjI2LCAyNTEsIDE3MywgMiwgNDMsIDE2MywgMjUxLCAyMjksIDI1MSwgCisgICAgMTczLCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI1MSwgMTcyLCAzMCwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDMwLCAyLCAKKyAgICA0NCwgMTYzLCAyNTEsIDIyOSwgNzEsIDI0MCwgMjQzLCA4NSwgMjQwLCAyNDMsIDQzLCAyMTEsIDI0NCwgMjQ0LCAxNDMsIAorICAgIDQ0LCAyMTEsIDI0NCwgMjQ0LCAxNDMsIDQzLCA1MiwgMjExLCAyNDQsIDI0NCwgMTQzLCA0NCwgNTIsIDIxMSwgMjQ0LCAKKyAgICAyNDQsIDE0MywgMjM1LCAyNTUsIDIzNSwgMjQxLCAyMTYsIDExMywgMTE1LCAyMzUsIDI0MSwgMjM1LCAyNDIsIDIyOSwgCisgICAgMTA3LCAyLCA2NywgMTMwLCAyNDYsIDEyMCwgMjMwLCA5MiwgNDIsIDIsIDI0OSwgMTg5LCAyMjYsIDEzMSwgMjM1LCAyNTMsIAorICAgIDI1MywgMjQ1LCAyMTksIDIyMSwgMjI0LCAxODMsIDI0NSwgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMSwgMjQ1LCAKKyAgICAxMDYsIDUsIDIyLCAyMTksIDk5LCAyMjYsIDEyLCAyLCAyMTYsIDkwLCA0OCwgMjQwLCAxMTEsIDIxNiwgNDMsIDIyLCAyMTksIAorICAgIDk5LCAyMjYsIDExLCAyNDIsIDE5MCwgMjE4LCAxNTcsIDIxNiwgMTg2LCAyNDYsIDExMywgMjE1LCAyMjcsIDIsIDQzLCAKKyAgICAxNjMsIDI1MSwgMjI5LCAyNDYsIDExMywgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCA4NSwgMjQ4LCAxLCAyLCAKKyAgICAxMjQsIDc1LCA4NSwgMjMyLCAxMTAsIDcxLCAyNTAsIDQ0LCAyLCAxMjQsIDc1LCA4NSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgCisgICAgMjQ1LCA5MywgNzEsIDIxOCwgMjM2LCAyNDUsIDkzLCA4NSwgMjE4LCAyMzYsIDI0NSwgOTMsIDcxLCAyNDgsIDAsIDI0NSwgCisgICAgOTMsIDg1LCAyNDgsIDAsIDI0NSwgOTMsIDcxLCAyNTAsIDQzLCAyNDUsIDkzLCA4NSwgMjUwLCA0MywgMjIyLCAxMzQsIAorICAgIDIyMywgNTMsIDIxOSwgNDksIDIyNiwgMTcxLCAyMTksIDQ5LCAyLCAyMjYsIDEyNywgMjIzLCA1MywgMjE5LCA0OSwgMiwgCisgICAgMjAzLCA5MSwgMjUyLCAxLCAyMTksIDQ4LCAyNTIsIDEsIDIyMywgNTMsIDIxOSwgNDgsIDUyLCAyMjUsIDI1LCAyMTUsIAorICAgIDIxMiwgMjI1LCAyNSwgMjMzLCA0OCwgMjQ5LCA5OSwgMjU0LCAxMTgsIDEyNywgMjIyLCAyNTAsIDI0OSwgOTksIDI1NCwgCisgICAgMTE4LCAxMjcsIDIxNiwgNzksIDIzMCwgMTg0LCAyMzAsIDI5LCAzNywgNTksIDIyNiwgMTcxLCAyMzAsIDI5LCAzNywgOTYsIAorICAgIDIyNiwgMTcxLCAyMzAsIDI5LCAzNywgMzAsIDIyNiwgMTcxLCAyMzAsIDI5LCAyMTQsIDE3NiwgMjI2LCAxNzIsIDIsIDI0NywgCisgICAgMTI4LCAyMzAsIDI5LCAyMTQsIDE3NiwgMjI2LCAxNzIsIDIsIDIyNSwgMjUsIDIzMCwgMjksIDQyLCAyMzUsIDIwNiwgMjI2LCAKKyAgICAxNzEsIDIzMCwgMjksIDQyLCAyMTQsIDE3NiwgMjI2LCAxNzEsIDExMywgMjMyLCAxNTIsIDIyLCAyMjYsIDE3MSwgMTEzLCAKKyAgICAyMzIsIDE1MiwgMTc3LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzAsIDIyNiwgMTcxLCAyMzAsIDE1OSwgMTEzLCAyMTgsIDQ0LCAKKyAgICAyMTgsIDQyLCAyLCAyMzUsIDIxOCwgMjI0LCAyNywgMjM1LCAyMTksIDIyNiwgMTcxLCAyNDQsIDEwNywgMjI2LCAzLCAyMzUsIAorICAgIDIxOCwgMjM1LCAyMTksIDIsIDUyLCA5MSwgMjM1LCAyMTksIDI1MywgMTgxLCAyLCAyMTksIDk3LCAyNTAsIDQwLCAyNDMsIAorICAgIDIzMywgMjU0LCA5NiwgMjM1LCAyMTYsIDIzMiwgMjIwLCAyMzUsIDIxNywgMiwgMjIzLCAxMTgsIDIyNSwgMjQxLCAyNTQsIAorICAgIDEwLCAyMjUsIDQsIDIzMiwgMjIwLCAyMzUsIDIxNywgMiwgMjIwLCAxNTQsIDIyNSwgMjQxLCAyNTQsIDEwLCAyMjUsIDQsIAorICAgIDIzMiwgMjIwLCAyMzUsIDIxNywgMjI4LCA1NywgMjM2LCAxLCAyMTYsIDE5NywgMjI1LCA0LCAyMzUsIDIxOSwgMjU0LCAxMCwgCisgICAgMTE2LCAyMjUsIDE0LCAyMjYsIDE3MSwgMjI0LCAyMSwgMjM1LCAyMTksIDIyNiwgMTcxLCAyMzUsIDIxOSwgMiwgMTQwLCAKKyAgICA4MCwgMiwgMTAzLCAyMzUsIDIxOSwgMiwgMzAsIDUwLCAyMzUsIDIxOSwgMiwgMjM1LCAyMDUsIDIzNSwgMjE5LCAyLCAyMTQsIAorICAgIDE3NSwgMjM1LCAyMTksIDIsIDIyNiwgMTI3LCAyMzUsIDIxOSwgMiwgMjE0LCAxODMsIDIzNSwgNzIsIDIzMywgOTEsIDQzLCAKKyAgICAyMTUsIDIyNywgMjI2LCAxNzEsIDIxMCwgMTYwLCAxODksIDIyMSwgMjAzLCAyNDksIDIxNywgMjEwLCAxNjAsIDE4OSwgCisgICAgMjIxLCAyMDMsIDIyNSwgNTksIDIxMCwgMTYwLCAxODksIDIyMSwgMjAzLCAyMjQsIDE3OSwgOTYsIDUsIDIsIDQsIDI1MCwgCisgICAgNDQsIDQ4LCA5NiwgNSwgMiwgMjUwLCAzOSwgMjU1LCAyNCwgNDgsIDk2LCA1LCAyLCAyMTYsIDkwLCA0OCwgOTYsIDUsIDIsIAorICAgIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgOTAsIDUxLCA5NiwgNSwgMiwgMjE4LCA2NiwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgCisgICAgMjI2LCAyMzAsIDE4NywgNSwgMiwgMjQ5LCAyMjgsIDQ4LCAyMzAsIDE4NywgNSwgMiwgNTksIDUxLCAyMzAsIDE4NywgNSwgCisgICAgMiwgMjQ0LCAxODMsIDI0NywgMTI2LCAyMzAsIDE4NywgNSwgMiwgMjIyLCAyMzEsIDI0NywgMTI2LCA5NiwgNSwgMjM2LCA3LCAKKyAgICA0MywgMTYzLCAyNTAsIDQzLCA5NiwgNSwgMjM2LCA3LCA0NCwgMTYzLCAyNTAsIDQzLCAyMTMsIDI1NCwgMTc3LCAyNDksIAorICAgIDEzOSwgMjI0LCAxODMsIDIzMCwgODksIDUsIDIsIDU5LCA0OCwgMjMwLCA4OSwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTUxLCAKKyAgICAyMjQsIDE4NCwgMiwgMjUxLCAxODMsIDI1MCwgNywgMjE5LCA3OSwgMjI0LCAxODMsIDIzMCwgODksIDUsIDIzNiwgNywgNDMsIAorICAgIDE2MywgMjUwLCA0MywgMjMwLCA4OSwgNSwgMjM2LCA3LCA0NCwgMTYzLCAyNTAsIDQzLCAzNywgMjMwLCA4OSwgNSwgMiwgCisgICAgMjUwLCAzOSwgMjU1LCAyMywgMjMwLCA4OSwgNSwgMjM2LCA3LCA1MiwgMjUwLCA0MywgMzcsIDI0NywgMTc3LCA1MCwgOTYsIAorICAgIDUsIDIzNiwgNywgMjE1LCAyMjYsIDIzMCwgMTg3LCA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDg5LCA1LCAyMzYsIDcsIAorICAgIDIxNSwgMjI2LCAyMzUsIDIxMywgMjI0LCAxODMsIDIyMiwgMjQ1LCAyMzUsIDIxMywgMjI0LCAxODMsIDIxMCwgMTYwLCAKKyAgICAxODksIDIyMywgOTMsIDI0OSwgMjE3LCAyNTQsIDE0MiwgMTc3LCAyNDksIDE3MywgMjM1LCAyMDYsIDIsIDI0NywgMTI4LCAKKyAgICAyMTQsIDE3NiwgMiwgMjMwLCAxODcsIDUwLCAyMTQsIDE3NiwgMiwgMjI2LCAxMjcsIDIzNSwgMjA2LCAyLCAyMjYsIDEyNywgCisgICAgMjM1LCAyMDYsIDIsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMjE0LCAxNzYsIDIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjE0LCAKKyAgICAxNzYsIDcyLCAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyMTQsIDE3NSwgMjE0LCAxNzYsIDcyLCAyNTIsIDE0OSwgNzIsIAorICAgIDIzNSwgMjA1LCAyMzUsIDIwNiwgNzIsIDI1MiwgMTQ5LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCAyNTIsIDM4LCAyMiwgCisgICAgMjM1LCA3MSwgMiwgMjE0LCAxNzUsIDIzNSwgMjA2LCAyNTIsIDM4LCAyMiwgMjM1LCA3MSwgMiwgMjM1LCAyMDUsIDI1MCwgCisgICAgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM1LCAyNTAsIDgsIDIzNSwgMjA2LCAyLCAyMjAsIDEzNSwgNTIsIDQyLCAyMzUsIAorICAgIDIwNSwgNTIsIDQyLCAyMTQsIDE3NSwgMjUwLCA4LCAyMTQsIDE3NiwgMiwgMjIwLCAxMzYsIDIyLCAyMTksIDc5LCAyMjQsIAorICAgIDE4MywgMjMyLCAxNTIsIDIyLCAyLCA1OSwgNDgsIDIzMiwgMTUyLCAxNzcsIDIsIDU5LCA0OCwgNTIsIDIzMiwgMTUyLCAKKyAgICAyNTQsIDEyNiwgNTIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMTEzLCAyMzUsIDIwNywgMjMyLCAxNTIsIDI1NCwgMTI2LCAxMTMsIAorICAgIDIzNSwgMjA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxOSwgODcsIDIzMywgOTEsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIAorICAgIDkxLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDE3NywgMjI2LCAxMjUsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyLCAKKyAgICAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAxNzcsIDIsIDIzMCwgMjI5LCAyMTgsIDE0MSwgMjMyLCAxNTIsIAorICAgIDIyLCAyLCAyMDMsIDI0OCwgMTY0LCAyMzIsIDE1MiwgMTc3LCAyLCAyMDMsIDI0OCwgMTY0LCAyMzIsIDE1MiwgMjIsIDIsIAorICAgIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDIyLCAyLCAyMTQsIDE4MywgMjMyLCAxNTIsIDIyLCAyLCA1MiwgMjE0LCAxODMsIAorICAgIDQsIDIxMywgMjUxLCAyLCAyMTQsIDE4MywgMjMyLCAxNTIsIDE3NywgMiwgNTIsIDIyNiwgMTI3LCAyMzIsIDE1MiwgMTc3LCAKKyAgICAyLCA1MiwgMjE0LCAxODMsIDIxMCwgMTYwLCAxODksIDI0NywgMTM3LCAyNTQsIDg3LCAyMTAsIDE2MCwgMTg5LCAyMjMsIAorICAgIDE1MSwgMjU0LCA4NywgMjQ1LCAxMDYsIDUsIDIsIDU5LCA1MSwgMjQwLCAxMTEsIDIsIDU5LCA0OCwgMjE1LCAyMTIsIDIwMywgCisgICAgMjUyLCAxNDksIDIsIDUyLCA2NywgOTEsIDIxNSwgMjEyLCAyMDMsIDI1MiwgMTQ5LCAyLCAyMTUsIDIxMiwgNjcsIDkxLCAKKyAgICAyMTYsIDkwLCAyMjYsIDE3MiwgMiwgNTksIDQ4LCAyMTYsIDkwLCAyMjYsIDE3MiwgMiwgMjIyLCAyMzEsIDI0NywgMTI2LCAKKyAgICAyMTksIDE2NCwgMjMwLCAxODcsIDIxOSwgMTYzLCAyNDksIDIwNywgMiwgNTksIDQ4LCAyNDUsIDEwNiwgMiwgMjUzLCAyMjQsIAorICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDIsIDI1MCwgMzksIDI1NSwgMjMsIDI1NCwgNTYsIDEyOCwgMTc3LCAxMjgsIDExMiwgCisgICAgMjQ1LCAxMDYsIDUsIDcyLCA5NiwgNTAsIDk2LCA1LCA3MiwgMjQ1LCAxMDYsIDUwLCAyNDUsIDEwNiwgNSwgNzIsIDIxNiwgCisgICAgOTAsIDIyNiwgMTcxLCA1MiwgMjQ5LCAyMzUsIDI0NSwgMTA3LCAxMTMsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIAorICAgIDEzNCwgMjQ5LCAyMDIsIDI0NSwgMTA2LCAyMTksIDE3OCwgMjQ1LCAxMDYsIDUsIDIsIDExMywgMTcwLCA3MiwgMjIsIDExMywgCisgICAgMTcwLCA1MSwgMjQ1LCAxMDIsIDIsIDI0NCwgMTksIDE3MCwgNDgsIDIzMywgMjEsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAKKyAgICAyNDIsIDEzNywgMiwgMjUwLCA0NCwgMjM1LCAyMjIsIDIzMywgMjEsIDIsIDIyNCwgMTYsIDE2NCwgNDgsIDI0MiwgMTM3LCAKKyAgICAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAyMTksIAorICAgIDk5LCAxMjgsIDExMiwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCAyMzUsIDIyMiwgMjQyLCAKKyAgICAxMzcsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgCisgICAgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDI0MiwgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAKKyAgICAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMjIsIDI1NCwgMjQyLCAxMzcsIDE3NywgCisgICAgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNzIsIDIzMywgNTIsIDIzMywgMjEsIDE3NywgMjU0LCA1NywgMjQyLCAKKyAgICAxMzcsIDE3NywgMjU0LCA1NywgMjMzLCAyMSwgMjIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjQyLCAxMzcsIAorICAgIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyNDIsIDEzNywgCisgICAgMjIsIDIyOCwgNTcsIDI1NCwgNTcsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMTI4LCA3MiwgMjQyLCAxMzYsIDI0MiwgMTM3LCAKKyAgICA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDIzMywgMjAsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgMTc3LCAyNDUsIDEwNywgCisgICAgMjQyLCAxMzcsIDcyLCAyMTksIDE2NCwgMTc3LCAyNDUsIDEwNywgMjMzLCAyMSwgNzIsIDIxOSwgMTY0LCA3MiwgMjQyLCAKKyAgICAxMzYsIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjQyLCAxMzcsIDcyLCAyNDYsIAorICAgIDExOSwgMjQ1LCAxMDcsIDI0MiwgMTM3LCA3MiwgMjMzLCAyMSwgNzIsIDI0NiwgMTE5LCAyNDUsIDEwNywgMjMzLCAyMSwgCisgICAgNzIsIDIxOSwgOTksIDEyOCwgNzIsIDI0MiwgMTM3LCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIDI0MiwgMTM3LCA3MiwgMjE5LCAKKyAgICA5OSwgMTI4LCA3MiwgMjMzLCAyMSwgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgCisgICAgMjMzLCAyMCwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIAorICAgIDE3NywgMjMzLCAyMSwgMiwgNTksIDIzNSwgMjIyLCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzcsIDIsIAorICAgIDU5LCAyMzUsIDIyMiwgMjQ2LCAxMTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIDExOSwgMTI4LCAyMTYsIAorICAgIDQzLCAxNzcsIDI0MiwgMTM2LCAyNDYsIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDI0NiwgCisgICAgMTE5LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDIxOSwgMTY0LCAxNzcsIDIzMywgMjAsIDIxOSwgCisgICAgMTY0LCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgNzIsIDIzMywgMjEsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOSwgMTY0LCAKKyAgICA3MiwgMjQyLCAxMzcsIDcyLCAyNDUsIDEwNiwgNTAsIDUyLCAyMjksIDk2LCAyMzMsIDIwLCA1MiwgMjI5LCA5NiwgMjQyLCAKKyAgICAxMzYsIDUyLCAyMjksIDk2LCAyMzMsIDIxLCAyLCAyMTQsIDE4MywgMjQyLCAxMzcsIDIyNiwgMTI1LCAyMzMsIDIwLCAyNDIsIAorICAgIDEzNywgMjUyLCAzOCwgMjMzLCAyMCwgMjMzLCAyMSwgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMCwgMjQyLCAxMzcsIDI1MCwgCisgICAgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDEsIDcyLCAyMTksIDk5LCAKKyAgICAyNDUsIDEwNywgMjQyLCAxMzcsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgCisgICAgMjE5LCA4MCwgMjE2LCAyMDEsIDIzMywgODksIDIxNiwgMjAxLCAyMTksIDgwLCAyMTYsIDIwMiwgMTc3LCAxMjgsIDExMiwgCisgICAgMjMzLCA4OSwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIDI0NSwgMTA2LCA1LCAyLCAyNTEsIDExNiwgNDgsIDIyNCwgMjA2LCAKKyAgICA3MiwgMjE5LCAxNTUsIDI0NSwgMTA2LCA1MCwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIyNCwgCisgICAgMjA2LCA3MiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjE5LCAxNTUsIDIyOCwgNTcsIAorICAgIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCA1NywgNzIsIDI0NSwgMTA2LCA1MCwgMjI0LCAKKyAgICAyMDYsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIAorICAgIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyMjgsIAorICAgIDU3LCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAyNTQsIDE1NiwgMTI4LCAxMTIsIDUyLCAKKyAgICAyMjQsIDIwNSwgNTIsIDIxOCwgNTYsIDIxOCwgNjUsIDIsIDI0NywgMTI4LCAyMTgsIDIzLCAyLCAyNDcsIDEyOCwgMjE4LCAKKyAgICA2NSwgMiwgOTYsIDUsIDUxLCAyMTgsIDIzLCAyLCA5NiwgNSwgNTEsIDIxOCwgNjUsIDIsIDIzMCwgODksIDUsIDUxLCAyMTgsIAorICAgIDIzLCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCA2NSwgNjQsIDE3NywgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDIxOCwgCisgICAgMjMsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIDY1LCA2NCwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCAKKyAgICAyMywgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNjUsIDY0LCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDIxOCwgNjUsIDY0LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA2NSwgNjQsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgNDIsIDQzLCAyMDQsIDkzLCAyMjYsIDE3MSwgNDIsIDQ0LCAyMDQsIDkzLCAKKyAgICAyMjYsIDE3MSwgMjUwLCA4LCAyMTgsIDY0LCAyNTAsIDgsIDIxOCwgMjIsIDI1MCwgOCwgMjE4LCA2NSwgMTc3LCAxMjgsIAorICAgIDExMiwgMjUwLCA4LCAyMTgsIDIzLCAxNzcsIDEyOCwgMTEyLCAyMTgsIDY1LCA3MiwgMjE4LCAyMiwgMjE4LCAyMywgNzIsIAorICAgIDIxOCwgNjQsIDIxOCwgNjUsIDcyLCAyMTgsIDY0LCAyMTgsIDIzLCA3MiwgMjE4LCAyMiwgMjE4LCAyMywgMjUyLCAzOCwgCisgICAgMjE4LCA2NCwgMjE4LCAyMywgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDI1MSwgODYsIDI0OCwgMTY1LCAyLCAyMTgsIDY0LCAKKyAgICAyNDUsIDE3OCwgNjQsIDIyNiwgMTc0LCAyNDYsIDExMSwgMjI1LCA1MSwgMiwgMjE3LCAxMywgMjE2LCAxNCwgMjE1LCAyNDEsIAorICAgIDIzNSwgMjA1LCAyNDQsIDI5LCAyMjgsIDcwLCAyMTksIDI1MywgNDMsIDIxNywgODgsIDIxOSwgMjUzLCAxMjQsIDIxNywgCisgICAgODgsIDIxOSwgMjUzLCAxMjAsIDIxNywgODgsIDIyNSwgMTc1LCAyLCAyMjIsIDkzLCA2NywgMjUyLCAxNDksIDIxNSwgMjEyLCAKKyAgICA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNDMsIDIxNSwgOTMsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIAorICAgIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDMsIDIxNSwgOTMsIDIwMCwgMjQ4LCAxNjUsIDI0MywgMjUxLCA0MywgMjMxLCAKKyAgICA2OCwgNjQsIDUyLCAyMTMsIDIzOSwgMjE5LCAyNTMsIDEyNCwgMjE3LCA4OSwgMiwgMjI2LCAxMjcsIDIxOSwgMjUzLCAxMjAsIAorICAgIDIxNywgODksIDIsIDIxNCwgMTgzLCAyMTksIDI1MywgMTIwLCAyMTcsIDg5LCA3MiwgMjE5LCAyNTMsIDEyNCwgMjE3LCA4OCwgCisgICAgNTIsIDEyNCwgMjE3LCA4OCwgNTIsIDEyMCwgMjE3LCA4OCwgNTIsIDIxOCwgMTA1LCAyMjgsIDU3LCA1MCwgMjIzLCA1MiwgCisgICAgNTIsIDIxOCwgMTA1LCAyMjgsIDU3LCA1MCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NywgMTgzLCAyLCAyMjMsIDUyLCAyMjksIAorICAgIDEwNiwgMjE5LCA5NywgNjcsIDIzMiwgMjIwLCAyLCAyNTAsIDQ0LCA0OCwgNjcsIDIzMiwgMjIwLCAyLCAyNTAsIDQ0LCA1MSwgCisgICAgMTI0LCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA1MSwgMjI2LCAxMiwgMiwgMjAzLCA5MSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgCisgICAgMjI2LCAxNzEsIDIxNSwgMjEyLCA2NywgMjUyLCAxNDksIDI1MSwgMjUyLCAyMjMsIDk0LCAyMTUsIDIxMiwgNjcsIDI1MiwgCisgICAgMTQ5LCAyLCAyMDMsIDkxLCAyMTUsIDIxMiwgMjQ5LCAyMzUsIDIyNiwgMTcxLCAyMTUsIDIxMiwgMjI5LCA5NiwgMjMzLCAKKyAgICAyMCwgMjE1LCAyMTIsIDIyOSwgOTYsIDI0MiwgMTM2LCAyNDYsIDExOSwgMjE5LCA5OSwgMjMzLCAyMSwgMTc3LCAxMjgsIAorICAgIDExMiwgMjQ2LCAxMTksIDIxOSwgOTksIDI0MiwgMTM3LCAxNzcsIDEyOCwgMTEyLCAyMTUsIDIxMiwgMjE5LCA0OSwgMjUxLCAKKyAgICAyNTIsIDIyMywgOTQsIDIzMywgOTEsIDIxNSwgMjEyLCA2NywgMjUyLCAxNDksIDIyNiwgMTcxLCA1MiwgMjE5LCA0OSwgCisgICAgMjI2LCAxNzEsIDcxLCA2NywgMTMwLCAyMzAsIDI5LCA3MSwgNjcsIDEzMCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDcxLCA3NSwgCisgICAgMjI4LCA2MSwgMjEyLCA5LCA3MSwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA3MSwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgNzEsIAorICAgIDc1LCA0MywgNDQsIDcxLCA3NSwgMTQwLCA4NSwgNzUsIDIxNCwgMTUzLCA4NSwgNzUsIDI0NiwgMTEyLCA4NSwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4NSwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgODUsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODUsIDc1LCAKKyAgICAyMTksIDMwLCAyMTIsIDksIDg1LCA3NSwgNDMsIDQ0LCA4NSwgNzUsIDEyMCwgMTI0LCA4NSwgNzUsIDk3LCA4MCwgMiwgCisgICAgMjE2LCA3OCwgMjQ2LCAxMTEsIDk3LCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDE0MCwgODAsIDIsIDIxNiwgNzgsIAorICAgIDI0NiwgMTExLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAyMTQsIDE1MiwgNDIsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAorICAgIDQyLCAyLCAyNTEsIDE4MywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgCisgICAgMjI5LCA0MiwgMiwgMjMyLCAxMTQsIDQzLCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDI0OCwgMSwgMiwgNDMsIDE2MywgMjUxLCAKKyAgICAyMjksIDI0OCwgMSwgMiwgNDQsIDE2MywgMjUxLCAyMjksIDI0OCwgMSwgMiwgMjE2LCAxNSwgMTYzLCAyNTEsIDIyOSwgCisgICAgMjQ4LCAxLCAyLCAyNTEsIDE4MywgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMjYsIDIxOCwgMjM2LCA4NSwgMjMzLCA5MSwgMjE4LCAKKyAgICAyMzYsIDcxLCAyMzMsIDkxLCAyMTgsIDIzNiwgODUsIDIxMywgMTg3LCA0LCAyMTgsIDIzNiwgNzEsIDIxMywgMTg3LCA0LCAKKyAgICAyMTgsIDIzNiwgODUsIDIyNSwgMTkzLCA3MSwgMjI1LCAxOTMsIDcxLCAyNDEsIDIwMCwgODUsIDI0MSwgMjAwLCAyMDMsIAorICAgIDg1LCAyNDEsIDIwMCwgODUsIDIzMywgOTEsIDI1MCwgNDMsIDg1LCAyMzEsIDg3LCAyNDgsIDAsIDcxLCAyMzEsIDg3LCAKKyAgICAyNDgsIDAsIDg1LCAyMzEsIDg3LCAyMzIsIDExMCwgNzEsIDIzMSwgODcsIDIzMiwgMTEwLCA4NSwgNCwgMjQ4LCAwLCA4NSwgCisgICAgNCwgMjMyLCAxMTAsIDcxLCA0LCAyMzIsIDExMCwgODUsIDIwMywgMjQ1LCAxNzIsIDcxLCAyMDMsIDI0NSwgMTcyLCA4NSwgCisgICAgNjcsIDI0NSwgMTcyLCA3MSwgNjcsIDI0NSwgMTcyLCA0MywgODAsIDIsIDQsIDI1MCwgNDMsIDEzNCwgMTQwLCAyNTMsIAorICAgIDI1NSwgNDMsIDgwLCAyLCAzNywgMjI1LCAyNSwgMjAwLCAxNDAsIDIxOCwgMjMyLCA3NSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgCisgICAgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgMTMwLCAKKyAgICAxNDAsIDIxNSwgNTgsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDE0MCwgODAsIDIsIDI0NiwgMTI2LCAyMTgsIDE0MSwgCisgICAgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIAorICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDE0MCwgCisgICAgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgMjEyLCAKKyAgICAzNiwgODAsIDIyNSwgMTAsIDI0NywgMjAzLCAyMzMsIDUyLCAyNDUsIDEwNiwgNSwgNzIsIDE0MCwgNzUsIDIyMywgNTMsIAorICAgIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDI1NCwgMTU2LCAxMjgsIDExMiwgCisgICAgOTcsIDgwLCAyMTYsIDE0MCwgMjQyLCAxMzYsIDk3LCA4MCwgMjE2LCAxNDAsIDIxOCwgMjIsIDE0MCwgMjI0LCAyNywgNzUsIAorICAgIDk3LCAyMjQsIDI3LCA3NSwgMjIzLCA1MywgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCA5NywgNzUsIDk3LCA4MCwgNzIsIDIyMywgCisgICAgNTMsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjU0LCAKKyAgICAxNTYsIDEyOCwgMTEyLCAxNDAsIDgwLCA3MiwgMjIzLCA1MywgMjE2LCA5MCwgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDIyMywgCisgICAgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA3MSwgMjMxLCA4NywgMjE4LCAxNTgsIDg1LCA0LCAyMTgsIDE1OCwgNzEsIDQsIAorICAgIDIxOCwgMTU4LCA4NSwgMjIyLCAyNTAsIDIyNSwgMTkzLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTkzLCAxMTQsIDIzMywgOTEsIAorICAgIDI1MCwgNDMsIDExNCwgMjI2LCAxMjgsIDIsIDIyNiwgMTI4LCAyMzUsIDIyMiwgMTE0LCAyNTAsIDQ0LCAyLCAyNTAsIDQ0LCAKKyAgICAyMzUsIDIyMiwgMTE0LCAyNTAsIDQzLCAxMTQsIDM3LCAyMjIsIDAsIDE0NSwgNiwgMSwgMjUzLCAxNjcsIDE0NSwgNiwgMSwgCisgICAgMjUxLCAxMjUsIDE0NSwgNiwgMSwgMjEzLCAyNTMsIDE0NSwgNiwgMSwgMjQyLCAxOTIsIDE0NSwgNiwgMSwgMjQ3LCAxNDgsIAorICAgIDE0NSwgNiwgMSwgMjExLCAyMSwgMTQ1LCA2LCAxLCAyMTAsIDY4LCAxNDUsIDYsIDEsIDI0NiwgNDIsIDE0NSwgNiwgMSwgCisgICAgMjEwLCA5MSwgMTQ1LCA2LCAxLCAyMzUsIDE1NCwgMTQ1LCA2LCAxLCA2NSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNzQsIAorICAgIDE0NSwgNiwgMSwgMjQ3LCAxNjgsIDE0NSwgNiwgMSwgMjM0LCAyNDYsIDE0NSwgNiwgMSwgMjMyLCAxOTIsIDE0NSwgNiwgMSwgCisgICAgMjMwLCAzNCwgMTQ1LCA2LCAxLCAyMjksIDE5NiwgMTQ1LCA2LCAxLCAyMjYsIDE4OSwgMTQ1LCA2LCAxLCAyMjUsIDcsIAorICAgIDE0NSwgNiwgMSwgMjIyLCAyMzAsIDE0NSwgNiwgMSwgMjE5LCA4NSwgMTQ1LCA2LCAxLCAyMTUsIDgxLCAxNDUsIDYsIDEsIAorICAgIDIxNCwgMjAxLCAxNDUsIDYsIDEsIDI0MywgMjU0LCAxNDUsIDYsIDEsIDI0MSwgMjA2LCAxNDUsIDYsIDEsIDIyNiwgMTM5LCAKKyAgICAxNDUsIDYsIDEsIDIyNSwgMjI0LCAxNDUsIDYsIDEsIDIxOSwgMjMwLCAxNDUsIDYsIDEsIDIxNSwgMTY4LCAxNDUsIDYsIDEsIAorICAgIDI1MCwgODMsIDE0NSwgNiwgMSwgMjIwLCAxMDQsIDE0NSwgNiwgMSwgMjExLCAyNywgMTQ1LCA2LCAxLCAyMTEsIDI5LCAKKyAgICAxNDUsIDYsIDEsIDIxMSwgNTcsIDE0NSwgNiwgMSwgMjE4LCAyNTUsIDE2MiwgMTQ1LCA2LCAxLCAyMTAsIDIxMiwgMTQ1LCAKKyAgICA2LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4NCwgMiwgMjE3LCA3OCwgMTQ1LCA2LCAxLCAyMTAsIAorICAgIDI0NCwgMTQ1LCA2LCAxLCAyMzUsIDE5MSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCAKKyAgICA2LCAxLCAyMzUsIDE5MSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyNDQsIDkwLCAxNDUsIDYsIDEsIDIzNSwgCisgICAgMTUyLCAxNDUsIDYsIDEsIDIxOSwgMjI5LCAxNDUsIDYsIDEsIDIxNSwgMjAzLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDgxLCAKKyAgICAyMzAsIDM0LCAxNDUsIDQsIDEsIDI1MywgMTY3LCAxNDUsIDQsIDEsIDI1MSwgMTI1LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAKKyAgICAxNDUsIDQsIDEsIDI0MiwgMTkyLCAxNDUsIDQsIDEsIDI0NywgMTQ4LCAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgCisgICAgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDQyLCAxNDUsIDQsIDEsIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNTQsIAorICAgIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDQsIDEsIDc0LCAxNDUsIDQsIDEsIDI0NywgMTY4LCAxNDUsIDQsIDEsIAorICAgIDIzNCwgMjQ2LCAxNDUsIDQsIDEsIDIzMiwgMTkyLCAxNDUsIDQsIDEsIDIzMCwgMzQsIDE0NSwgNCwgMSwgMjI5LCAxOTYsIAorICAgIDE0NSwgNCwgMSwgMjI2LCAxODksIDE0NSwgNCwgMSwgMjI1LCA3LCAxNDUsIDQsIDEsIDIyMiwgMjMwLCAxNDUsIDQsIDEsIAorICAgIDIxOSwgODUsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI1NCwgCisgICAgMTQ1LCA0LCAxLCAyNDEsIDIwNiwgMTQ1LCA0LCAxLCAyMjYsIDEzOSwgMTQ1LCA0LCAxLCAyMjUsIDIyNCwgMTQ1LCA0LCAxLCAKKyAgICAyMTksIDIzMCwgMTQ1LCA0LCAxLCAyMTUsIDE2OCwgMTQ1LCA0LCAxLCAyNTAsIDgzLCAxNDUsIDQsIDEsIDIyMCwgMTA0LCAKKyAgICAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIAorICAgIDIxOCwgMjU1LCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgCisgICAgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNCwgMSwgMjEwLCAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgCisgICAgMTgzLCAxNDUsIDQsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIAorICAgIDE0NSwgNCwgMSwgMjQ0LCA5MCwgMTQ1LCA0LCAxLCAyMzUsIDE1MiwgMTQ1LCA0LCAxLCAyMTksIDIyOSwgMTQ1LCA0LCAxLCAKKyAgICAyMTUsIDIwMywgNjEsIDE0NSwgNCwgMSwgMjMzLCA4MSwgMjMwLCAzNCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDUyLCAxMzAsIAorICAgIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNiwgCisgICAgMSwgMjI2LCAxMTAsIDIsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTE2LCAyLCA5MSwgCisgICAgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAorICAgIDI0OCwgNDcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgCisgICAgNiwgMSwgMjU0LCAxNTEsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIAorICAgIDIxNSwgOTQsIDI1NCwgMTUxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgCisgICAgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgCisgICAgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAxNjMsIDI0MiwgNjcsIDcsIDQsIDEsIDIxNywgNzYsIDIyNSwgMTM2LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDIyOCwgNTUsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAxNDQsIDIsIAorICAgIDEyMSwgMjIyLCAyMzcsIDIzNSwgMjIyLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NiwgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAKKyAgICAxNTAsIDU4LCAxLCA2LCAyMTQsIDEwNSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDcsIDYsIDEsIAorICAgIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgODEsIDYsIDEsIDI1NCwgMTczLCA4MSwgNCwgMSwgMjU0LCAxNzMsIAorICAgIDgxLCA2LCAxLCAyMTMsIDE3MywgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMTQsIDgxLCA0LCAxLCAKKyAgICAyNDMsIDExNCwgODEsIDYsIDEsIDI0OCwgMTk5LCA4MSwgNCwgMSwgMjQ4LCAxOTksIDgxLCA2LCAxLCAyNDUsIDIwMiwgODEsIAorICAgIDQsIDEsIDI0NSwgMjAyLCA4MSwgNiwgMSwgMjE5LCAzNSwgODEsIDQsIDEsIDIxOSwgMzUsIDgxLCA2LCAxLCAyMTAsIDEwMSwgCisgICAgODEsIDQsIDEsIDIxMCwgMTAxLCA4MSwgNiwgMSwgMjQxLCAyNTUsIDgxLCA0LCAxLCAyNDEsIDI1NSwgODEsIDYsIDEsIAorICAgIDIxNiwgMTc4LCA4MSwgNCwgMSwgMjE2LCAxNzgsIDgxLCA2LCAxLCAyNDAsIDEyMywgODEsIDQsIDEsIDI0MCwgMTIzLCA4MSwgCisgICAgNiwgMSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyMzQsIDIzMywgODEsIDYsIDEsIDIzMywgNzgsIDgxLCA0LCAxLCAyMzMsIDc4LCAKKyAgICA4MSwgNiwgMSwgMjMwLCAyMzUsIDgxLCA0LCAxLCAyMzAsIDIzNSwgODEsIDYsIDEsIDIyOCwgMjM4LCA4MSwgNCwgMSwgCisgICAgMjI4LCAyMzgsIDgxLCA2LCAxLCAyMzMsIDIzOSwgODEsIDQsIDEsIDIzMywgMjM5LCA4MSwgNiwgMSwgNzgsIDgxLCA0LCAxLCAKKyAgICA3OCwgODEsIDYsIDEsIDIyNSwgMTExLCA4MSwgNCwgMSwgMjI1LCAxMTEsIDgxLCA2LCAxLCAyMjIsIDIxMywgODEsIDQsIDEsIAorICAgIDIyMiwgMjEzLCA4MSwgNiwgMSwgMjE5LCAxNjcsIDgxLCA0LCAxLCAyMTksIDE2NywgODEsIDYsIDEsIDIxNywgNDIsIDgxLCAKKyAgICA0LCAxLCAyMTcsIDQyLCA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgCisgICAgMTI5LCA4MSwgNCwgMSwgMjQ0LCAxMjksIDgxLCA2LCAxLCAyMzQsIDExOCwgODEsIDQsIDEsIDIzNCwgMTE4LCA4MSwgNiwgCisgICAgMSwgMjI0LCAxNjQsIDgxLCA0LCAxLCAyMjQsIDE2NCwgODEsIDYsIDEsIDIyNiwgMTgyLCA4MSwgNCwgMSwgMjI2LCAxODIsIAorICAgIDgxLCA2LCAxLCAyNDgsIDUsIDI1NCwgMTc5LCA4MSwgNCwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDYsIDEsIDU1LCA4MSwgCisgICAgMjU0LCAyMDUsIDgxLCA0LCAxLCA1NSwgODEsIDI1NCwgMjA1LCA4MSwgNiwgMSwgMjQ5LCAxMjMsIDI0NSwgMjAyLCA4MSwgCisgICAgNCwgMSwgMjQ5LCAxMjMsIDI0NSwgMjAyLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMzQsIDIzMywgODEsIDQsIDEsIDI0OCwgNSwgCisgICAgMjM0LCAyMzMsIDgxLCA2LCAxLCAyNDgsIDUsIDIyOCwgMjM4LCA4MSwgNCwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDYsIAorICAgIDEsIDI0OSwgMTIzLCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OSwgMTIzLCAyMjgsIDIzOCwgODEsIDYsIDEsIDU1LCA4MSwgCisgICAgMjI2LCAxODIsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTgyLCA4MSwgNiwgMSwgMjIxLCAyNDgsIDgxLCA0LCAxLCAyMjEsIAorICAgIDI0OCwgODEsIDYsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNCwgMSwgMjQ5LCAxMzYsIDIyMCwgNTcsIDgxLCA2LCAxLCAKKyAgICA1NSwgODEsIDIyMCwgNTcsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTcsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgODMsIAorICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgODMsIDgxLCA2LCAxLCAyNTQsIDE5MSwgMjM0LCAxMjMsIDgxLCA0LCAxLCAyNTQsIAorICAgIDE5MSwgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDgsIDUsIDI0MSwgNTIsIDgxLCA0LCAxLCAyNDgsIDUsIDI0MSwgNTIsIDgxLCAKKyAgICA2LCAxLCA1NSwgODEsIDI0MSwgNTIsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgNTIsIDgxLCA2LCAxLCA1NSwgODEsIDE2MiwgCisgICAgODEsIDQsIDEsIDU1LCA4MSwgMTYyLCA4MSwgNiwgMSwgMjMzLCAxNTQsIDE2MiwgODEsIDQsIDEsIDIzMywgMTU0LCAxNjIsIAorICAgIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgMjI0LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDYsIDEsIDU1LCA4MSwgCisgICAgMjQyLCAyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDIsIDIsIDgxLCA2LCAxLCA1NSwgODEsIDI0MywgMTA5LCA4MSwgNCwgMSwgCisgICAgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDYsIDEsIDU1LCA4MSwgMjQ3LCAxNzEsIDgxLCA0LCAxLCA1NSwgODEsIDI0NywgMTcxLCAKKyAgICA4MSwgNiwgMSwgNTUsIDgxLCAyMjAsIDI0LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDI0LCA4MSwgNiwgMSwgNTUsIDIyNywgCisgICAgMjEyLCAyMjAsIDI0LCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjAsIDI0LCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAKKyAgICAyMjksIDMyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjksIDMyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMjcsIAorICAgIDE1MiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAxNTIsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIDIxMiwgMzcsIAorICAgIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIxMiwgMzcsIDgxLCAxNiwgMjM0LCAyNTIsIDgxLCAxNiwgMjMwLCAyMzYsIDIyMiwgCisgICAgMjEzLCA4MSwgMTYsIDIyNSwgMTEyLCAyMjIsIDIxMywgODEsIDE2LCAyMTgsIDE0OSwgODEsIDE2LCAyMTcsIDQzLCAyMjIsIAorICAgIDIxMywgODEsIDE2LCAyMzQsIDExOSwgMjIyLCAyMTMsIDgxLCAxNiwgMjIwLCAyNSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAKKyAgICAyNDksIDEyMywgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTIzLCAyMjAsIDU3LCA4MSwgNiwgMSwgMjQ5LCAxMjMsIDI0MywgCisgICAgMTA5LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDI0MywgMTA5LCA4MSwgMzgsIDIyOCwgMjM5LCA0OCwgODEsIDM4LCAyMTgsIAorICAgIDI0OSwgMjUzLCAyMzIsIDgxLCAzOCwgMjE4LCAyNDksIDIzMywgMjcsIDgxLCA2LCAxLCAyNTEsIDIwNywgMjM0LCAxMjMsIAorICAgIDgxLCA0LCAxLCAyNTEsIDIwNywgMjM0LCAxMjMsIDgxLCA1NSwgMjI3LCAyMTIsIDI0MywgMjM2LCAyMTgsIDEzMSwgODEsIAorICAgIDU1LCAyMjcsIDIxMiwgMjQ3LCAyMDUsIDIyNCwgMTYsIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMzUsIDI0NCwgMjI0LCAxNiwgCisgICAgNzksIDgxLCA1NSwgMjI3LCAyMTIsIDIxMywgMjQxLCAyNDcsIDE4MCwgODEsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgODEsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgODEsIDIzMCwgMTI5LCAyNDcsIDE4MCwgOTgsIDQsIDEsIDI1NCwgMTMxLCA5OCwgNCwgMSwgCisgICAgMjUyLCAxNjAsIDk4LCA0LCAxLCAyNDMsIDExMywgOTgsIDQsIDEsIDI0NywgMTM2LCA5OCwgNCwgMSwgMjQ1LCAxNTgsIDk4LCAKKyAgICA0LCAxLCAyMTMsIDE2MCwgOTgsIDQsIDEsIDIxMCwgODksIDk4LCA0LCAxLCAyMTcsIDYxLCA5OCwgNCwgMSwgMjM2LCA2LCAKKyAgICA5OCwgNCwgMSwgMjM0LCAyNDAsIDk4LCA0LCAxLCAyMzMsIDg3LCA5OCwgNCwgMSwgMjMxLCAxOTAsIDk4LCA0LCAxLCAyMjksIAorICAgIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjAwLCA5OCwgNCwgMSwgMjI2LCAyMSwgOTgsIDQsIDEsIDIxMCwgNzgsIDk4LCA0LCAxLCAKKyAgICAyMjMsIDE3NCwgOTgsIDQsIDEsIDIyMSwgMjQ1LCA5OCwgNCwgMSwgMjE3LCA1MSwgOTgsIDQsIDEsIDIxNCwgMTkwLCA5OCwgCisgICAgNCwgMSwgMjI1LCAxNDMsIDk4LCA0LCAxLCAyMzQsIDEyNywgOTgsIDQsIDEsIDI0MiwgMjQ4LCA5OCwgNCwgMSwgMjI0LCAKKyAgICA3NiwgOTgsIDQsIDEsIDIyMCwgMjIsIDk4LCA0LCAxLCAyNTAsIDEwNSwgOTgsIDQsIDEsIDI1MSwgMTUsIDk4LCA0LCAxLCAKKyAgICAyMzUsIDEwNiwgOTgsIDQsIDEsIDI1MCwgNDgsIDk4LCA0LCAxLCAyNTAsIDE1MSwgOTgsIDQsIDEsIDIxMSwgMTYzLCA5OCwgCisgICAgNCwgMSwgMjM1LCAxMTcsIDk4LCA0LCAxLCAyNDIsIDUwLCA5OCwgNCwgMSwgMjQxLCAyNDUsIDk4LCA0LCAxLCAyNDEsIAorICAgIDE4MiwgOTgsIDQsIDEsIDIxMiwgMjIsIDk4LCA0LCAxLCAyNDIsIDExLCA5OCwgNCwgMSwgMjQxLCA3MiwgOTgsIDQsIDEsIAorICAgIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyNDEsIDIxNiwgMTA5LCAxLCAxOTIsIDIxNiwgMTA5LCAxLCAyMTEsIDk5LCAKKyAgICAyMTYsIDEwOSwgMSwgMjExLCA5OCwgMjE2LCAxMDksIDEsIDIxMSwgODgsIDIxNiwgMTA5LCAxLCAyMTEsIDg2LCAyMTYsIAorICAgIDEwOSwgMSwgMjUyLCA0MCwgMjU1LCAyNSwgMjExLCA4MSwgMjE2LCAxMDksIDEsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAKKyAgICAyMTEsIDk2LCAyMTYsIDEwOSwgMSwgMjExLCA5MywgMjE2LCAxMDksIDEsIDIxMSwgOTUsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDk0LCAyMTYsIDEwOSwgMSwgMjExLCAxMiwgMjE2LCAxMDksIDEsIDIxMSwgOTAsIDIxNiwgMTA5LCAxLCAyMTEsIDc5LCAKKyAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzksIDIxNiwgMTA5LCAxLCAyMTEsIDc2LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA4NCwgMjE2LCAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODQsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCAKKyAgICA4NCwgMjE2LCAxMDksIDEsIDIxMSwgODMsIDIxNiwgMTA5LCAxLCAyMTEsIDEwMywgMjE2LCAxMDksIDEsIDIxMSwgNzcsIAorICAgIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA3NywgMjE2LCAxMDksIDEsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTUsIAorICAgIDExNiwgMjExLCA2NiwgMjE2LCAxMDksIDEsIDIxMSwgOCwgMjE2LCAxMDksIDEsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAKKyAgICAyNTQsIDIxNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgMjExLCA3NSwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgNzQsIDIxNiwgMTA5LCAxLCAyMTEsIDcxLCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCisgICAgODUsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA2OSwgMjE2LCAxMDksIDEsIDIxMSwgNjcsIDIxNiwgMTA5LCAxLCAKKyAgICAyMTAsIDIxMiwgMjE2LCAxMDksIDEsIDIxMSwgNjQsIDIxNiwgMTA5LCAxLCAyMTEsIDYzLCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA4NywgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDg3LCAyMTYsIDEwOSwgMSwgMjUzLCAxNzEsIDIxMSwgODcsIDIxNiwgCisgICAgMTA5LCAxLCAyMTEsIDYyLCAyMTYsIDEwOSwgMSwgMjExLCA2MCwgMjE2LCAxMDksIDEsIDIxMSwgNjEsIDIxNiwgMTA5LCAxLCAKKyAgICAyMTEsIDU5LCAyMTYsIDEwOSwgMSwgMjExLCA1OCwgMjE2LCAxMDksIDEsIDIxMSwgOTcsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDU2LCAyMTYsIDEwOSwgMSwgMjExLCA1NCwgMjE2LCAxMDksIDEsIDIxMSwgNTMsIDIxNiwgMTA5LCAxLCAyMTEsIDUyLCAKKyAgICAyMTYsIDEwOSwgMSwgMjExLCA1MCwgMjE2LCAxMDksIDEsIDIxNywgMzUsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDQ4LCAyMTYsIDEwOSwgMSwgMjExLCA0NywgMjE2LCAxMDksIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOSwgNTgsIDEsIDIzMywgCisgICAgMTMyLCA3OSwgMjE2LCAxMDksIDIyMCwgMTQwLCA3OSwgMjE2LCAxMDksIDExNywgMjM1LCA2OSwgMjksIDMsIDIzMiwgMTYxLCAKKyAgICAyOSwgMywgMjMwLCAxNjUsIDI5LCAzLCAyMjIsIDIxMSwgMjksIDMsIDIxOSwgNTksIDI5LCAzLCAyMjAsIDgsIDI5LCAzLCAKKyAgICAyNTEsIDIxMiwgMjksIDMsIDIxNiwgNDIsIDI5LCAzLCAyNDksIDI0NSwgMjksIDMsIDIyOCwgNzcsIDI5LCAzLCAyMjcsIAorICAgIDEzNywgMjksIDMsIDI0MiwgMTg3LCAyMjcsIDQsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNTEsIDI5LCAzLCAKKyAgICAyNDgsIDExMiwgMjksIDMsIDIzNSwgNzMsIDI5LCAzLCAyMTYsIDE1NiwgMjksIDMsIDI1MCwgOTMsIDI5LCAzLCAyMjUsIAorICAgIDEyMywgMjksIDMsIDIyNSwgMTgsIDI5LCAzLCAyNDMsIDYsIDI5LCAzLCAyNDMsIDIsIDI5LCAzLCAyNDMsIDMsIDI5LCAzLCAKKyAgICAyNDMsIDQsIDI5LCAzLCAyMTgsIDIyNSwgMjksIDMsIDIxOCwgMTgxLCAyOSwgMywgMjE4LCAxOTQsIDI5LCAzLCAyMTgsIAorICAgIDIyNCwgMjksIDMsIDIxOCwgMTk4LCAyOSwgMywgMjE4LCAxOTksIDI5LCAzLCAyMTgsIDE4NiwgMjksIDMsIDI1MCwgMjIxLCAKKyAgICAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMiwgMjksIDMsIDI1MCwgMjIwLCAyOSwgMywgMjUwLCAyMTgsIDI5LCAKKyAgICAzLCAyNTAsIDIxOSwgMjksIDMsIDI1MCwgMjAxLCAyOSwgMywgMjA5LCAyNDMsIDI5LCAzLCAyMDksIDIyMSwgMjksIDMsIAorICAgIDIwOSwgMjM0LCAyOSwgMywgMjA5LCAyNDIsIDI5LCAzLCAyMDksIDIzNywgMjksIDMsIDIwOSwgMjM4LCAyOSwgMywgMjA5LCAKKyAgICAyMjYsIDI5LCAzLCAyNTAsIDIxNiwgMjksIDMsIDI1MCwgMjAzLCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIxNSwgCisgICAgMjksIDMsIDI1MCwgMjEzLCAyOSwgMywgMjUwLCAyMTQsIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDIyMywgMjM5LCAyOSwgCisgICAgMywgMjIzLCAyMjksIDI5LCAzLCAyMjMsIDIzNSwgMjksIDMsIDIyMywgMjM4LCAyOSwgMywgMjIzLCAyMzYsIDI5LCAzLCAKKyAgICAyMjMsIDIzNywgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjMzLCAxNjUsIDI5LCAzLCAyMzMsIDE1NywgMjksIDMsIDIzMywgCisgICAgMTYwLCAyOSwgMywgMjMzLCAxNjQsIDI5LCAzLCAyMzMsIDE2MSwgMjksIDMsIDIzMywgMTYyLCAyOSwgMywgMjMzLCAxNTgsIAorICAgIDI5LCAzLCAyMTEsIDEzMCwgMjksIDMsIDIxMSwgMTIwLCAyOSwgMywgMjExLCAxMjYsIDI5LCAzLCAyMTEsIDEyOSwgMjksIAorICAgIDMsIDIxMSwgMTI3LCAyOSwgMywgMjExLCAxMjgsIDI5LCAzLCAyMTEsIDEyNSwgMjksIDMsIDI0MiwgNzgsIDI5LCAzLCAKKyAgICAyNDIsIDY5LCAyOSwgMywgMjQyLCA3MiwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc0LCAyOSwgMywgMjQyLCA3NSwgCisgICAgMjksIDMsIDI0MiwgNzEsIDM4LCAzMywgMSwgMjUyLCA4MywgMzgsIDMzLCAxLCAyMTMsIDI1NSwgMzgsIDMzLCAxLCAyNDIsIAorICAgIDI0MywgMzgsIDMzLCAxLCAyNDgsIDk4LCAzOCwgMzMsIDEsIDIxMCwgNzQsIDM4LCAzMywgMSwgMjEwLCA5NCwgMzgsIDMzLCAKKyAgICAxLCAxNzYsIDM4LCAzMywgMSwgMjQ1LCAxODIsIDM4LCAzMywgMSwgMjQ1LCAxNjcsIDM4LCAzMywgMSwgMjQ1LCAxNTgsIAorICAgIDM4LCAzMywgMSwgNzgsIDM4LCAzMywgMSwgMjI1LCAyMjQsIDM4LCAzMywgMSwgMjQ1LCAxMDAsIDM4LCAzMywgMSwgMjQ1LCAKKyAgICA5MCwgMzgsIDMzLCAxLCAyMTcsIDIzLCAzOCwgMzMsIDEsIDE2MiwgMzgsIDMzLCAxLCAyMTUsIDE3OSwgMzgsIDMzLCAxLCAKKyAgICAyNTAsIDEzOSwgMzgsIDMzLCAxLCAyMjAsIDEwNCwgMzgsIDMzLCAxLCAyMjAsIDY3LCAzOCwgMzMsIDEsIDI0NCwgOTAsIAorICAgIDM4LCAzMywgMSwgMjQ1LCA4OSwgMzgsIDMzLCAxLCA2MSwgMzgsIDMzLCAxLCAyMzYsIDY3LCAzOCwgMzMsIDEsIDI0NywgCisgICAgMTY5LCAzOCwgMzMsIDEsIDIzMCwgMTQ1LCAyMTQsIDIwNSwgMzgsIDMzLCAxLCAyMTEsIDU5LCAzOCwgMzMsIDEsIDIxMCwgCisgICAgMjEyLCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA2MSwgMzgsIDMzLCAxLCAyMzIsIDE5OCwgMjEwLCAxODMsIDM4LCAzMywgMSwgCisgICAgMjUyLCAxLCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIDE4MywgNDQsIDI1NCwgMTE4LCAKKyAgICAyMTgsIDYxLCAyMzEsIDE1OSwgNDQsIDI1NCwgMTE4LCAyNDYsIDEyNiwgMjE4LCA2MSwgMjMxLCAxNTksIDQzLCAyMTgsIAorICAgIDYxLCAxMjcsIDQ0LCAyMTgsIDYxLCAxMjcsIDQzLCAyNDYsIDEyNiwgMjE4LCA2MSwgMTI3LCA0NCwgMjQ2LCAxMjYsIDIxOCwgCisgICAgNjEsIDEyNywgMjIzLCAxNjAsIDIzNSwgMjA5LCAyMzEsIDE1OSwgMjIzLCAxNjAsIDI0NiwgMTI2LCAyMzUsIDIwOSwgMjMxLCAKKyAgICAxNTksIDI0NiwgMTI2LCAyMTUsIDI0MiwgMjMxLCAxNTksIDQzLCAyMTUsIDI0MiwgMTI3LCA0NCwgMjE1LCAyNDIsIDEyNywgCisgICAgMjIzLCAxNjAsIDIxOCwgMjM2LCA0MywgMjIzLCAxNjAsIDIyNiwgMjAyLCAxMjcsIDQ0LCAyMjMsIDE2MCwgMjI2LCAyMDIsIAorICAgIDEyNywgMjQ1LCAyMTgsIDI0OSwgMTY2LCAyMjYsIDE3LCAyNDQsIDMwLCAyMjYsIDE3LCAyMjMsIDUyLCAyNDQsIDMwLCAKKyAgICAyMjYsIDE3LCAyNDAsIDE3MiwgMjQ2LCAxMjYsIDIyNiwgMjU1LCAyNDYsIDExMiwgMjU0LCAxMjcsIDIxNCwgMTUzLCAyNTQsIAorICAgIDEyNywgMjQ2LCAxMjYsIDIyMiwgMjUwLCAyNTQsIDExNywgNTIsIDIyNiwgMjUyLCAyNDAsIDE3NSwgMjM1LCAyMDAsIDIzNSwgCisgICAgMjA4LCAyMjYsIDYzLCAyNTEsIDE2MiwgMjQwLCAxNzYsIDIsIDI0OCwgOSwgMjE2LCA5MCwgMiwgMjIyLCAyMzcsIDQ4LCAKKyAgICA0MywgMTIxLCAyMjYsIDksIDEyNywgNDQsIDEyMSwgMjI2LCA5LCAxMjcsIDIxNiwgOTAsIDIsIDU5LCA0OCwgMjE2LCA5MCwgCisgICAgMiwgNTksIDUxLCA0MywgNjcsIDI1MiwgMTQ5LCAyLCAyMjQsIDEwLCA0NCwgNjcsIDI1MiwgMTQ5LCAyLCAyMjQsIDEwLCAKKyAgICAyMTYsIDE1LCA0MywgMTYzLCAxMjcsIDIxNiwgMTUsIDQ0LCAxNjMsIDEyNywgMjUxLCAxODMsIDQzLCAxNjMsIDEyNywgCisgICAgMjUxLCAxODMsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg5LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg5LCAxMDQsIDEyNywgCisgICAgNDMsIDUyLCAyMjYsIDcsIDQ0LCA1MiwgMjI2LCA3LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMTIzLCAKKyAgICA1OSwgMTE1LCAxMTMsIDE3MCwgMjI0LCAxNDMsIDkyLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCA3OSwgCisgICAgMjIzLCA1MiwgMjI0LCAxNiwgNzksIDY3LCAxODQsIDIyMiwgMjM3LCAyMjUsIDEzLCAyMTEsIDIwOSwgMjIwLCAxNDAsIAorICAgIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjE1LCA5NCwgMjQ5LCAyMjcsIDIyMywgMTYwLCAyNDcsIDEyOCwgMjIzLCAxNjAsIDI0OSwgCisgICAgMjI3LCAyMTUsIDk0LCAyMjAsIDE1MiwgMjQ4LCAyMTQsIDIsIDQzLCAyNDIsIDExNSwgMjQ4LCAyMTQsIDIsIDQ0LCAyNDIsIAorICAgIDExNSwgMjE1LCA5NCwgMjQ4LCAyMTMsIDIxNiwgMTUsIDE2MywgMjIxLCAxNzUsIDUwLCAyMTUsIDU5LCAyNDgsIDE2NCwgCisgICAgMjE2LCAxNDQsIDI0OCwgMTY0LCAxMCwgMzQsIDIyMywgNzksIDEwLCAzNCwgMjUwLCAxOCwgMTAsIDM0LCAyMjEsIDE3OCwgCisgICAgMTExLCAxMCwgMzQsIDIyMSwgMTc4LCAxMDUsIDEwLCAzNCwgMjIxLCAxNzgsIDE1OCwgMTAsIDM0LCAyMjUsIDE3MCwgMTAsIAorICAgIDM0LCAyNTEsIDE3MSwgMTAsIDM0LCAyMTcsIDkzLCAxMCwgMzQsIDIzNCwgMzksIDExMSwgMTAsIDM0LCAyMzQsIDM5LCAKKyAgICAxMDUsIDEwLCAzNCwgMjQ3LCAxNzgsIDEwLCAzNCwgMjIxLCAxODEsIDEwLCAzNCwgNCwgMTExLCAxMCwgMzQsIDQsIDEwNSwgCisgICAgMTAsIDM0LCAyMzMsIDEwMywgMTExLCAxMCwgMzQsIDIzMywgMTAzLCAxMDUsIDEwLCAzNCwgMjMzLCAxMDMsIDE1OCwgMTAsIAorICAgIDM0LCAyMzMsIDEwMywgMTYxLCAxMCwgMzQsIDIxOSwgNzAsIDEwLCAzNCwgMjE2LCAxNDYsIDEwLCAzNCwgMjE5LCA2OCwgCisgICAgMTExLCAxMCwgMzQsIDIxOSwgNjgsIDEwNSwgMTAsIDM0LCAyNDEsIDIzNSwgMTExLCAxMCwgMzQsIDI0MSwgMjM1LCAxMDUsIAorICAgIDEwLCAzNCwgMjQyLCAyMiwgMTAsIDM0LCAyMjMsIDE1MCwgMTAsIDM0LCAyNTAsIDkwLCAxMCwgMzQsIDIxOCwgMzgsIDEwLCAKKyAgICAzNCwgMjMwLCAxMzMsIDEwLCAzNCwgMjQ4LCA5NiwgMTAsIDM0LCAyMzAsIDEyNSwgMTAsIDM0LCAyNTAsIDMzLCAxMCwgMzQsIAorICAgIDIxMiwgNDEsIDExMSwgMTAsIDM0LCAyMTIsIDQxLCAxMDUsIDEwLCAzNCwgMjQ0LCAxMDQsIDEwLCAzNCwgMjI1LCAyMzYsIAorICAgIDExMSwgMTAsIDM0LCAyMjUsIDIzNiwgMTA1LCAxMCwgMzQsIDIxOSwgMTYyLCAxNjMsIDIxNSwgMjM3LCAyMTUsIDE4OSwgCisgICAgMTAsIDM0LCAyNDksIDE1MywgMTAsIDM0LCAyNDcsIDE0NCwgMTAsIDM0LCAyMzUsIDE0MywgMTAsIDM0LCAyNTEsIDIwNiwgCisgICAgNjQsIDI1MCwgMiwgMTAsIDM0LCAyNDUsIDIzLCAxMCwgMzQsIDIxOCwgMjUxLCAxMTEsIDEwLCAzNCwgMjE4LCAyNTEsIAorICAgIDEwNSwgMTAsIDM0LCAyNTIsIDE2MiwgMTAsIDM0LCAyMTksIDE2OSwgMTAsIDM0LCAyNTEsIDcxLCAyMTksIDE2OSwgMTAsIAorICAgIDM0LCAyMjksIDk1LCAxMTEsIDEwLCAzNCwgMjI5LCA5NSwgMTA1LCAxMCwgMzQsIDIyOSwgOTUsIDE1OCwgMTAsIDM0LCAKKyAgICAyMjksIDk1LCAxNjEsIDEwLCAzNCwgMjMxLCA1MSwgMTAsIDM0LCAyMjAsIDU5LCAxMCwgMzQsIDIyMywgMTU2LCAxMCwgMzQsIAorICAgIDI0NSwgNDUsIDEwLCAzNCwgMjI2LCAyMTMsIDEwLCAzNCwgMjUxLCAxNDEsIDExMSwgMTAsIDM0LCAyNTEsIDE0MSwgMTA1LCAKKyAgICAxMCwgMzQsIDIzMSwgOTEsIDEwLCAzNCwgMjMwLCAxMjgsIDEwLCAzNCwgMjQyLCAxNDcsIDExMSwgMTAsIDM0LCAyNDIsIAorICAgIDE0NywgMTA1LCAxMCwgMzQsIDI0MiwgMTQ3LCAxNTgsIDEwLCAzNCwgMjE2LCAxMDcsIDEwLCAzNCwgMjUwLCAxLCAxMCwgCisgICAgMzQsIDIxMiwgOSwgMTExLCAxMCwgMzQsIDIxMiwgOSwgMTA1LCAxMCwgMzQsIDI1MSwgNzEsIDIyMSwgMTcyLCAxMCwgMzQsIAorICAgIDIxOSwgMTYyLCAyNDAsIDI1NSwgMTAsIDM0LCAyNDAsIDI1NSwgMTAsIDM0LCAyNTEsIDcxLCAyMTksIDQsIDEwLCAzNCwgCisgICAgMjUxLCA3MSwgMjIwLCA1NCwgMTAsIDM0LCAyNDQsIDQwLCAxMCwgMzQsIDI1MSwgNzEsIDI1MCwgMjM2LCAxMCwgMzQsIAorICAgIDIxOSwgMTYyLCAyMTIsIDU3LCAxMCwgMzQsIDIxMiwgNTgsIDExMSwgMTAsIDM0LCAyMTIsIDU4LCAxMDUsIDEwLCAzNCwgCisgICAgMjUwLCAzNSwgMTAsIDM0LCAyNTEsIDcxLCAyNDIsIDE3MywgMTAsIDM0LCAyMDAsIDExMSwgMTAsIDM0LCAyMDAsIDEwNSwgCisgICAgMTAsIDM0LCAyNTEsIDcxLCAyMzIsIDE0MywgMTAsIDM0LCAyNTEsIDcxLCAyNDMsIDk1LCAxMCwgMzQsIDIzMCwgMTI0LCAKKyAgICAxMTEsIDEwLCAzNCwgMjMwLCAxMjQsIDEwNSwgMTAsIDM0LCAyMjMsIDE2MiwgMTAsIDM0LCAyNTEsIDIxNSwgMTAsIDM0LCAKKyAgICAyNTEsIDcxLCAyMTcsIDU3LCAyMzMsIDU4LCAxMCwgMzQsIDI1MSwgNzEsIDIzMywgNTksIDEwLCAzNCwgMjUxLCA3MSwgCisgICAgMjExLCAyMzksIDEwLCAzNCwgMjUxLCA3MSwgMjQ0LCA1NCwgMTAsIDM0LCAyNDUsIDIyNiwgMTExLCAxMCwgMzQsIDI0NSwgCisgICAgMjI2LCAxMDUsIDEwLCAzNCwgMjQ1LCAyMjYsIDE1OCwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDIyNSwgMTAsIDM0LCAyNDEsIAorICAgIDI0MiwgMTAsIDM0LCAyNTEsIDcxLCAyNDAsIDI1MiwgMTAsIDM0LCAyNTEsIDIwMiwgMTAsIDM0LCAyNDIsIDIyOSwgMTAsIAorICAgIDM0LCAyNTEsIDcxLCAyNDQsIDk4LCAxMCwgMzQsIDI1MSwgNzEsIDI1MSwgMjQ1LCAxMCwgMzQsIDI1MSwgNzEsIDIyMiwgMywgCisgICAgMTAsIDM0LCAyMTksIDE2MiwgMjEyLCAyLCAxMCwgMzQsIDIxOSwgMTYyLCAyMTEsIDQxLCAxMCwgMzQsIDI1MSwgNzEsIAorICAgIDI0MywgMjUyLCAxMCwgMzQsIDIzNSwgMTQ5LCAyNDUsIDQ5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NSwgNDksIDEwLCAzNCwgCisgICAgMjM1LCAxNDksIDIxNiwgMTYsIDEwLCAzNCwgMjUxLCA3MSwgMjE2LCAxNiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ2LCAxMDQsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjQ2LCAxMDQsIDEwLCAzNCwgMjE1LCA5MSwgMTAsIDM0LCAyMzUsIDE0OSwgMjE1LCA5MSwgCisgICAgMTAsIDM0LCAyNTEsIDcxLCAyMTUsIDkxLCA2MCwgMzQsIDExMSwgNjAsIDM0LCAyMzIsIDIxOSwgNjAsIDM0LCAyNDcsIAorICAgIDEyOCwgNjAsIDM0LCAyMTksIDk3LCA2MCwgMzQsIDIyMSwgMTc3LCA2MCwgMzQsIDEwMywgNjAsIDM0LCAxMDUsIDYwLCAzNCwgCisgICAgMjMyLCAyNDMsIDYwLCAzNCwgMjMxLCAxOTAsIDYwLCAzNCwgMjMzLCAzOSwgNjAsIDM0LCAyNDUsIDEzNywgNjAsIDM0LCAKKyAgICAxOTYsIDYwLCAzNCwgMTI0LCAyNTEsIDE3MSwgNjAsIDM0LCAyNDksIDE1NSwgNjAsIDM0LCAyNDAsIDExOCwgNjAsIDM0LCAKKyAgICAyMTcsIDkzLCA2MCwgMzQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjM0LCAzOCwgNjAsIDM0LCAyMjQsIDIyNywgNjAsIAorICAgIDM0LCAyMTEsIDIwMiwgNjAsIDM0LCAyMTgsIDI0NSwgNjAsIDM0LCA0NCwgMjA0LCAyNTEsIDE3MSwgNjAsIDM0LCAyNDEsIAorICAgIDE4MywgMjQ1LCAxNTMsIDYwLCAzNCwgMjE2LCAyNDgsIDYwLCAzNCwgMjQ3LCAxNzgsIDYwLCAzNCwgMjIxLCAxODEsIDYwLCAKKyAgICAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyMjQsIDE4NSwgNjAsIDM0LCAyNTQsIDIyNCwgNjAsIDM0LCAyMzAsIDExNSwgNjAsIAorICAgIDM0LCAyNDUsIDE1MywgNjAsIDM0LCAyNDUsIDIzMSwgNjAsIDM0LCAyMjEsIDIwMiwgNjAsIDM0LCAyNDIsIDE4MSwgNjAsIAorICAgIDM0LCAyNDIsIDE4MiwgMjE5LCA4MywgNjAsIDM0LCAyNDUsIDQ4LCA2MCwgMzQsIDI1MiwgMCwgNjAsIDM0LCAyMTEsIDIyMSwgCisgICAgNjAsIDM0LCAyNTAsIDEwOSwgNjAsIDM0LCAyMjIsIDE5OCwgNjAsIDM0LCAyMzYsIDIsIDYwLCAzNCwgMjE5LCA4MSwgNjAsIAorICAgIDM0LCAyMzMsIDEwMiwgNjAsIDM0LCAyNDksIDE2NCwgNjAsIDM0LCAyMTgsIDIzOSwgNjAsIDM0LCAyMzAsIDEyMCwgNjAsIAorICAgIDM0LCAyMjIsIDIyNywgNjAsIDM0LCAyMTEsIDIwNiwgNjAsIDM0LCAyMjYsIDE5NCwgNjAsIDM0LCAyMTUsIDk4LCA2MCwgCisgICAgMzQsIDI0NiwgODgsIDYwLCAzNCwgMjE5LCAyNTMsIDIxNiwgMTQ2LCA2MCwgMzQsIDI0NiwgMTI2LCAyNTAsIDE4LCA2MCwgCisgICAgMzQsIDIwMCwgMjE4LCAxMTAsIDYwLCAzNCwgMTEzLCAyNDIsIDE3LCA2MCwgMzQsIDIyMCwgMiwgNjAsIDM0LCAyNTEsIAorICAgIDE3NywgNjAsIDM0LCAyMTksIDY3LCA2MCwgMzQsIDI1MSwgMTQ1LCA2MCwgMzQsIDIxOCwgMTQwLCA2MCwgMzQsIDI0MSwgCisgICAgMjM0LCA2MCwgMzQsIDI0MiwgMzUsIDYwLCAzNCwgMjQ3LCAxMzEsIDYwLCAzNCwgMjQyLCAyMiwgNjAsIDM0LCAyNTEsIAorICAgIDE2MiwgNjAsIDM0LCAyMjMsIDE1MCwgNjAsIDM0LCAyMjEsIDE4OSwgNjAsIDM0LCAyNDcsIDIwNywgNjAsIDM0LCAyNTMsIAorICAgIDE3NiwgNjAsIDM0LCAyMTgsIDIzNiwgNjAsIDM0LCAyMjgsIDU2LCA2MCwgMzQsIDIxOCwgMzgsIDYwLCAzNCwgMjIxLCAKKyAgICAyMTMsIDYwLCAzNCwgMjMwLCAxMzMsIDYwLCAzNCwgMjE1LCAyMzYsIDYwLCAzNCwgMjMzLCAxMjgsIDYwLCAzNCwgMjE4LCAKKyAgICAxMzEsIDYwLCAzNCwgMjQ4LCA5NiwgNjAsIDM0LCAyMTIsIDIxLCA2MCwgMzQsIDI0NywgMTU0LCAyMjgsIDU2LCA2MCwgMzQsIAorICAgIDI0OSwgMjIzLCA2MCwgMzQsIDI0MywgMjI5LCA2MCwgMzQsIDI1MCwgMjksIDYwLCAzNCwgMjE4LCAxNDQsIDYwLCAzNCwgCisgICAgMjEyLCA0MCwgNjAsIDM0LCAyNDQsIDEwNCwgNjAsIDM0LCAyNTAsIDI2LCA2MCwgMzQsIDI0NCwgMTY5LCA2MCwgMzQsIDUyLCAKKyAgICAyMTEsIDE3OCwgNjAsIDM0LCAxNjMsIDIxNSwgMjM3LCAyMTUsIDE4OSwgNjAsIDM0LCAyMTksIDkxLCA2MCwgMzQsIDI0NCwgCisgICAgMTc5LCA2MCwgMzQsIDI0OSwgMTUzLCA2MCwgMzQsIDI0NywgMTQ0LCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDIzNSwgCisgICAgMTQzLCA2MCwgMzQsIDIzMSwgNzIsIDYwLCAzNCwgMjE2LCA4OSwgNjAsIDM0LCAyMTcsIDI0NiwgNjAsIDM0LCAyMzIsIAorICAgIDIzNywgNjAsIDM0LCAyMTQsIDEzMSwgNjAsIDM0LCAyNDQsIDEyOCwgNjAsIDM0LCAyNTEsIDIwNiwgNjQsIDI1MCwgMiwgCisgICAgNjAsIDM0LCAyMTksIDE5MCwgNjAsIDM0LCAyNDYsIDEyNiwgMjE2LCAyNDMsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAzNCwgCisgICAgMjE5LCAxMDUsIDYwLCAzNCwgMjQ3LCAxOTUsIDYwLCAzNCwgMjQ1LCAyMywgNjAsIDM0LCAyMTksIDcsIDYwLCAzNCwgNzUsIAorICAgIDYwLCAzNCwgMjE4LCAxMzMsIDYwLCAzNCwgMjE4LCAyNTAsIDYwLCAzNCwgMjE2LCAwLCA2MCwgMzQsIDI0MiwgMTU0LCA2MCwgCisgICAgMzQsIDI1MCwgMjI2LCA2MCwgMzQsIDIxOCwgMTYyLCA2MCwgMzQsIDI1MiwgMTYyLCA2MCwgMzQsIDIyMywgMzQsIDYwLCAKKyAgICAzNCwgMjE5LCAxNjksIDYwLCAzNCwgMjM1LCAxMzYsIDYwLCAzNCwgMjI5LCA5NCwgNjAsIDM0LCAyMjAsIDU5LCA2MCwgMzQsIAorICAgIDI0NCwgMTU3LCA2MCwgMzQsIDIyNiwgMjEzLCA2MCwgMzQsIDI1NCwgMTI2LCA2MCwgMzQsIDIyNSwgMzIsIDYwLCAzNCwgCisgICAgMjQ1LCAyMzUsIDYwLCAzNCwgMjUxLCAxNDAsIDYwLCAzNCwgMjMxLCA5MSwgNjAsIDM0LCAyMzAsIDE4OCwgNjAsIDM0LCAKKyAgICAyMjAsIDE1OCwgNjAsIDM0LCAyNTQsIDQsIDYwLCAzNCwgMjMwLCAxMjgsIDYwLCAzNCwgMjE2LCAyMCwgNjAsIDM0LCAyMjYsIAorICAgIDE2OSwgNjAsIDM0LCAyNTEsIDIwOSwgNjAsIDM0LCAyMTgsIDEyOSwgNjAsIDM0LCAyNDksIDIzMywgNjAsIDM0LCAyNDIsIAorICAgIDE0NiwgNjAsIDM0LCAyMTYsIDEwNywgNjAsIDM0LCAyMzUsIDIyNCwgNjAsIDM0LCAyNTEsIDIxOSwgNjAsIDM0LCAyMTIsIAorICAgIDU4LCAyNDUsIDE1MywgNjAsIDM0LCAyNTAsIDEsIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgMTcyLCA2MCwgMzQsIAorICAgIDI0MCwgMjU1LCA2MCwgMzQsIDIxOSwgNCwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgODAsIDYwLCAzNCwgMjI1LCAKKyAgICA3NiwgNjAsIDM0LCAyNTIsIDE4MiwgNjAsIDM0LCAyMjAsIDU0LCA2MCwgMzQsIDIyMywgMTEzLCA2MCwgMzQsIDIyMiwgCisgICAgMTI4LCA2MCwgMzQsIDI0NCwgNDAsIDYwLCAzNCwgMjUxLCAyMDgsIDYwLCAzNCwgMjUwLCAyMzYsIDYwLCAzNCwgMjUxLCAKKyAgICAyMzQsIDYwLCAzNCwgMjMwLCAxMzAsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDM1LCA2MCwgMzQsIDIxMSwgCisgICAgMjM2LCA2MCwgMzQsIDI0NywgMTg4LCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTczLCA2MCwgMzQsIDIzMiwgCisgICAgMTQzLCA2MCwgMzQsIDI0MywgOTUsIDYwLCAzNCwgMjMwLCAxMjMsIDYwLCAzNCwgMjE5LCA5NiwgNjAsIDM0LCAyMTksIAorICAgIDI1MywgMjE3LCA3NywgMjUxLCAyNDUsIDYwLCAzNCwgMjIzLCAxNjIsIDYwLCAzNCwgMjUxLCAyMTUsIDYwLCAzNCwgMjExLCAKKyAgICAxOTcsIDYwLCAzNCwgMjQ0LCAxOTgsIDYwLCAzNCwgMjMzLCA1OCwgNjAsIDM0LCAyMTcsIDU3LCAyMzMsIDU4LCA2MCwgMzQsIAorICAgIDIzMywgNTQsIDYwLCAzNCwgMjE5LCAzMiwgNjAsIDM0LCAyMzMsIDU5LCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgMzQsIDI0NCwgCisgICAgNTQsIDYwLCAzNCwgMjQ1LCAyMjUsIDYwLCAzNCwgMjQxLCAyNDIsIDYwLCAzNCwgMjQ0LCA4LCA2MCwgMzQsIDI0MCwgMjUyLCAKKyAgICA2MCwgMzQsIDI1MSwgMjAyLCA2MCwgMzQsIDIxNywgNjQsIDYwLCAzNCwgMjQyLCA0MSwgNjAsIDM0LCAyNDQsIDEyMSwgNjAsIAorICAgIDM0LCAyMjIsIDMwLCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyOCwgNjAsIDM0LCAyNDIsIDIyOSwgNjAsIDM0LCAyNDQsIAorICAgIDk4LCA2MCwgMzQsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMiwgMywgNjAsIDM0LCAyNDgsIDgyLCA2MCwgMzQsIDIxMiwgMiwgCisgICAgNjAsIDM0LCAyNDEsIDIxNywgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTk3LCA2MCwgMzQsIDI1MSwgMjI5LCAKKyAgICA2MCwgMzQsIDI0NSwgMTYzLCA2MCwgMzQsIDI0MywgMjUyLCA2MCwgMzQsIDIxNSwgMjEwLCA2MCwgMzQsIDI0NiwgOTAsIAorICAgIDYwLCAzNCwgMjIzLCAxNDQsIDYwLCAzNCwgMjI4LCA1OCwgNjAsIDM0LCAyNDUsIDQ5LCA2MCwgMzQsIDIxNiwgMTYsIDYwLCAKKyAgICAzNCwgMjQ2LCAxMDQsIDYwLCAzNCwgMjE1LCA5MSwgNjAsIDM0LCAyNDQsIDU2LCAxMTAsIDI0OCwgNDUsIDEzNSwgNDMsIAorICAgIDIxNiwgNDMsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDUxLCAxMTAsIDI0OCwgNDUsIDEzNSwgCisgICAgNDMsIDIxNiwgNDMsIDIzMCwgMjI5LCAyMiwgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCA3MiwgMjE2LCA0MywgMjMwLCAKKyAgICAyMjksIDIyLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIDI0MywgMjM2LCAyMTgsIDExLCAxMTAsIDI0OCwgNDUsIDEzNSwgCisgICAgMjE4LCAxMiwgMjQzLCAyNTEsIDQ4LCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDUxLCAxMTAsIAorICAgIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIzMywgNTIsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAKKyAgICAyNDMsIDI1MSwgMjE0LCAxNjAsIDIzMywgNTIsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjE0LCAKKyAgICAxNjAsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIzMiwgMTE0LCAyMzMsIDUyLCAKKyAgICAxMTAsIDI0OCwgNDUsIDEzNSwgMjI2LCAxMjYsIDExMCwgMjE5LCAyMCwgMTEwLCAyNDksIDIyNywgMTEwLCAyNDMsIDIzNiwgCisgICAgMjE4LCAxMzEsIDI0NywgMTg1LCA3OSwgMjM1LCAxMzcsIDIzNSwgMjQzLCAyMTgsIDE2MSwgODcsIDExMCwgMjM1LCAxNjQsIAorICAgIDc5LCAxMTAsIDI1MCwgNCwgNzksIDExMCwgNTQsIDIxMCwgODYsIDQzLCAyNTQsIDExOCwgMTI3LCA0NCwgMjU0LCAxMTgsIAorICAgIDEyNywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCA0NCwgNTIsIDI1NCwgMTE4LCAxMjcsIDQzLCAyNDksIDE2OSwgMTI3LCA0NCwgCisgICAgMjQ5LCAxNjksIDEyNywgNDMsIDcxLCAyNDksIDE2OSwgMTI3LCA0NCwgNzEsIDI0OSwgMTY5LCAxMjcsIDQzLCA4NSwgMjMzLCAKKyAgICAyNiwgMTI3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAyNDAsIDc5LCAyNDMsIDM5LCA3OSwgNDMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMTI3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQzLCA3MSwgMjMzLCAyNiwgMTI3LCA0NCwgNzEsIAorICAgIDIzMywgMjYsIDEyNywgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNDQsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgCisgICAgNDMsIDcxLCA0MiwgMTI3LCA0NCwgNzEsIDQyLCAxMjcsIDIxMiwgMzYsIDI0OCwgMTY0LCAyMjMsIDUyLCA1MiwgMjI0LCAKKyAgICAxOTQsIDIyNCwgMSwgNzksIDUyLCAyMjQsIDE5NCwgMjI0LCAxLCA3OSwgMTIxLCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIAorICAgIDIyNCwgMjQwLCAxNjQsIDI0NCwgMTk4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTExLCAyNDIsIDE1LCAyMjcsIDIwMiwgMTA1LCAKKyAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMTU4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTYxLCAyNDIsIDE1LCAyMjcsIDIwMiwgMTkwLCAKKyAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMTk1LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTk5LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTk2LCAKKyAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMjAxLCAxMTAsIDIzMywgOSwgMTM4LCA3OSwgMTEwLCAyMjIsIDIzMSwgMTM4LCA3OSwgCisgICAgMTEwLCAyNDgsIDUyLCAxMzgsIDc5LCAxMTAsIDI0NSwgMTM2LCAxMzgsIDc5LCAyNCwgMjE5LCAxNTcsIDU5LCAxMzgsIDc5LCAKKyAgICAyNCwgNTIsIDU5LCAxMzgsIDc5LCAyMTIsIDMyLCAyNDgsIDE2NCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCA3OSwgNjcsIAorICAgIDIzNCwgMjM5LCAyMjMsIDgwLCAyLCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAKKyAgICAyMTQsIDE2MCwgMjQyLCAzNCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAyLCAyMTMsIDEzNSwgMjE5LCAzMywgMTY0LCAyMTQsIAorICAgIDE2MCwgMjQyLCAzNCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAxNjQsIDIzMiwgMTE0LCAyNDIsIDM0LCAzNywgMjI0LCAKKyAgICAyNDAsIDc5LCAxMTAsIDIxNywgNCwgMjMyLCAyMjAsIDI0NCwgMTU0LCAyMjAsIDE0MCwgODcsIDI0MiwgMTUsIDIyNywgCisgICAgMjAyLCAyMTYsIDI0OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDIxNSwgNzMsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTYsIDE2MywgCisgICAgNjcsIDExMCwgMjM1LCAxNjQsIDc5LCAyMzEsIDE0NSwgNzksIDIyNiwgMywgMjU0LCAxNDgsIDc5LCAxMTAsIDQ1LCAyMzUsIAorICAgIDI0NSwgMTEwLCAxNjMsIDI0NCwgMTE0LCAyMTksIDIwLCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIAorICAgIDc0LCAxNDEsIDEsIDc0LCAxNDEsIDEsIDQsIDY5LCAxNDEsIDEsIDY5LCAxNDEsIDEsIDQsIDc2LCAxNDEsIDEsIDc2LCAKKyAgICAxNDEsIDEsIDQsIDc4LCAxNDEsIDEsIDc4LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDE0MiwgMTQxLCAxLCAyMzQsIAorICAgIDk4LCAxNDEsIDEsIDI0MiwgMjIxLCAxNDEsIDEsIDIzMywgMjIzLCAxNDEsIDEsIDI0MiwgMTIwLCAxNDEsIDEsIDIzNCwgCisgICAgMTg4LCAxNDEsIDEsIDI0MywgNjksIDE0MSwgMSwgMjM0LCAzNCwgMTQxLCAxLCAyNDIsIDE4MSwgMTQxLCAxLCAyMDYsIAorICAgIDE0MSwgMSwgMjEwLCAxMTYsIDE0MSwgMSwgMjE5LCAxOTMsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDg0LCAKKyAgICAxNDEsIDEsIDIxMCwgMTMsIDE0MSwgMSwgMjIxLCAxODMsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDYwLCAxNDEsIAorICAgIDEsIDIxMCwgMjMsIDE0MSwgMSwgMjE3LCAxMDYsIDE0MSwgMSwgMjQ4LCAyMjksIDE0MSwgMSwgMjE2LCAxMTgsIDE0MSwgMSwgCisgICAgMjQ4LCAxMSwgMTQxLCAxLCA0LCAyMTUsIDExOSwgMTQxLCAxLCAyMTUsIDExOSwgMTQxLCAxLCAyNDYsIDg2LCAxNDEsIDEsIAorICAgIDIxNywgMjMsIDE0MSwgMSwgMjQ4LCA5OCwgMTQxLCAxLCAxMTIsIDE0MSwgMSwgMjQ3LCAxNTMsIDE0MSwgMSwgMTk4LCAKKyAgICAxNDEsIDEsIDIyOCwgMjM4LCAxNDEsIDEsIDIyNywgMjQyLCAxNDEsIDEsIDIyOSwgMTEyLCAxNDEsIDEsIDIyOCwgNzksIAorICAgIDE0MSwgMSwgMTYyLCAxNDEsIDEsIDI1MiwgMTk5LCAxNDEsIDEsIDE5MSwgMTQxLCAxLCAyNDEsIDE4NywgMTQxLCAxLCAKKyAgICAyNTIsIDE0LCAxNDEsIDEsIDIyNSwgMTExLCAxNDEsIDEsIDI0MCwgMjI5LCAxNDEsIDEsIDI1MSwgMTMzLCAxNDEsIDEsIAorICAgIDIyNCwgMTUzLCAxNDEsIDEsIDI0MSwgMjQ1LCAxNDEsIDEsIDI1MiwgODMsIDE0MSwgMSwgMjI1LCAyMjQsIDE0MSwgMSwgCisgICAgMjQxLCA3NSwgMTQxLCAxLCAyNTEsIDIxMywgMTQxLCAxLCAyMjUsIDE5LCAxNDEsIDEsIDE4NiwgMTQxLCAxLCAyMzAsIAorICAgIDIzNSwgMTQxLCAxLCAyMzAsIDEwNywgMTQxLCAxLCAyMzEsIDk2LCAxNDEsIDEsIDIzMCwgMTY2LCAxNDEsIDEsIDQsIDE5MiwgCisgICAgMTQxLCAxLCAxOTIsIDE0MSwgMSwgNCwgMjEwLCAyMTIsIDE0MSwgMSwgMjEwLCAyMTIsIDE0MSwgMSwgNCwgMjEwLCAyNDQsIAorICAgIDE0MSwgMSwgMjEwLCAyNDQsIDE0MSwgMSwgMjA1LCAxNDEsIDEsIDIyMywgMzgsIDE0MSwgMSwgMjIyLCAxNDIsIDE0MSwgMSwgCisgICAgMjIzLCAxMzEsIDE0MSwgMSwgMjIyLCAyMTMsIDE0MSwgMSwgNCwgMjEyLCA2NSwgMTQxLCAxLCAyMTIsIDY1LCAxNDEsIDEsIAorICAgIDIxMSwgMjUwLCAxNDEsIDEsIDIxMiwgMjIsIDE0MSwgMSwgMjExLCAyMjcsIDE0MSwgMSwgMjMwLCAzMCwgMTQxLCAxLCAKKyAgICAyMTIsIDExNiwgMTQxLCAxLCA0LCAxNzYsIDE0MSwgMSwgNCwgMjM0LCAxODgsIDM4LCAyMzQsIDIwNywgMjEzLCAxMzUsIAorICAgIDIxOSwgMzMsIDc5LCAzOCwgMjM0LCAyMDcsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMjM0LCAyMDcsIDIxMywgMTM1LCAKKyAgICAyMTksIDMzLCA3OSwgMjM0LCAyMDcsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTQxLCAyMzUsIDE2NCwgNzksIDE0MSwgCisgICAgMjEzLCAxMzUsIDIzNSwgMTY0LCA3OSwgMTQxLCAyNDcsIDIyOSwgMjEwLCAyMjUsIDIzNCwgMjA3LCA1MiwgMjQwLCAxNzUsIAorICAgIDU2LCAxLCA0LCA2MSwgNTYsIDEsIDYxLCA1NiwgMSwgNCwgNzQsIDU2LCAxLCA3NCwgNTYsIDEsIDQsIDY5LCA1NiwgMSwgCisgICAgNjksIDU2LCAxLCA0LCA3NiwgNTYsIDEsIDc2LCA1NiwgMSwgNCwgNzgsIDU2LCAxLCA3OCwgNTYsIDEsIDE3NiwgNTYsIDEsIAorICAgIDI0MywgMTQyLCA1NiwgMSwgMjM0LCA5OCwgNTYsIDEsIDI0MiwgMjIxLCA1NiwgMSwgMjMzLCAyMjMsIDU2LCAxLCAyNDIsIAorICAgIDEyMCwgNTYsIDEsIDIzNCwgMTg4LCA1NiwgMSwgMjQzLCA2OSwgNTYsIDEsIDIzNCwgMzQsIDU2LCAxLCAyNDIsIDE4MSwgCisgICAgNTYsIDEsIDIwNiwgNTYsIDEsIDIxMCwgMTE2LCA1NiwgMSwgMjE5LCAxOTMsIDU2LCAxLCAyMTAsIDQ0LCA1NiwgMSwgMjE4LCAKKyAgICA4NCwgNTYsIDEsIDIxMCwgMTMsIDU2LCAxLCAyMjEsIDE4MywgNTYsIDEsIDIxMCwgOTQsIDU2LCAxLCAyMTksIDYwLCA1NiwgCisgICAgMSwgMjEwLCAyMywgNTYsIDEsIDIxNywgMTA2LCA1NiwgMSwgMjQ4LCAyMjksIDU2LCAxLCAyMTYsIDExOCwgNTYsIDEsIAorICAgIDI0OCwgMTEsIDU2LCAxLCA0LCAyMTUsIDExOSwgNTYsIDEsIDIxNSwgMTE5LCA1NiwgMSwgMjQ2LCA4NiwgNTYsIDEsIDIxNywgCisgICAgMjMsIDU2LCAxLCAyNDgsIDk4LCA1NiwgMSwgMTEyLCA1NiwgMSwgMjQ3LCAxNTMsIDU2LCAxLCAxOTgsIDU2LCAxLCAyMjgsIAorICAgIDIzOCwgNTYsIDEsIDIyNywgMjQyLCA1NiwgMSwgMjI5LCAxMTIsIDU2LCAxLCAyMjgsIDc5LCA1NiwgMSwgMTYyLCA1NiwgMSwgCisgICAgMjUyLCAxOTksIDU2LCAxLCAxOTEsIDU2LCAxLCAyNDEsIDE4NywgNTYsIDEsIDI1MiwgMTQsIDU2LCAxLCAyMjUsIDExMSwgCisgICAgNTYsIDEsIDI0MCwgMjI5LCA1NiwgMSwgMjUxLCAxMzMsIDU2LCAxLCAyMjQsIDE1MywgNTYsIDEsIDI0MSwgMjQ1LCA1NiwgCisgICAgMSwgMjUyLCA4MywgNTYsIDEsIDIyNSwgMjI0LCA1NiwgMSwgMjQxLCA3NSwgNTYsIDEsIDI1MSwgMjEzLCA1NiwgMSwgMjI1LCAKKyAgICAxOSwgNTYsIDEsIDE4NiwgNTYsIDEsIDIzMCwgMjM1LCA1NiwgMSwgMjMwLCAxMDcsIDU2LCAxLCAyMzEsIDk2LCA1NiwgMSwgCisgICAgMjMwLCAxNjYsIDU2LCAxLCA0LCAxOTIsIDU2LCAxLCAxOTIsIDU2LCAxLCA0LCAyMTAsIDIxMiwgNTYsIDEsIDIxMCwgMjEyLCAKKyAgICA1NiwgMSwgNCwgMjEwLCAyNDQsIDU2LCAxLCAyMTAsIDI0NCwgNTYsIDEsIDIwNSwgNTYsIDEsIDIyMywgMzgsIDU2LCAxLCAKKyAgICAyMjIsIDE0MiwgNTYsIDEsIDIyMywgMTMxLCA1NiwgMSwgMjIyLCAyMTMsIDU2LCAxLCA0LCAyMTIsIDY1LCA1NiwgMSwgCisgICAgMjEyLCA2NSwgNTYsIDEsIDIxMSwgMjUwLCA1NiwgMSwgMjEyLCAyMiwgNTYsIDEsIDIxMSwgMjI3LCA1NiwgMSwgMjMwLCAKKyAgICAzMCwgNTYsIDEsIDIxMiwgMTE2LCA1NiwgMSwgNCwgMTc2LCA1NiwgMSwgNCwgMjM0LCAxODgsIDU2LCAxLCAyMTQsIDI3LCAKKyAgICA1NiwgMSwgMjEzLCAxNzYsIDU2LCAxLCAyMTMsIDI1NSwgNTYsIDEsIDIxMywgMTM4LCA1NiwgMjMwLCAyMjksIDI0NywgCisgICAgMTI4LCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCA1NiwgMjM1LCAxNjQsIDc5LCA1NiwgMjEzLCAxMzUsIAorICAgIDIzNSwgMTY0LCA3OSwgNTYsIDI0NywgMjI5LCAyMzQsIDUsIDI1MSwgMTkyLCAxLCAyNTMsIDE2NiwgMjUxLCAxOTIsIDEsIAorICAgIDIyNiwgMTA5LCAyNTEsIDE5MiwgMSwgMTk0LCAyNTEsIDE5MiwgMSwgMjQ1LCAxNCwgMjUxLCAxOTIsIDEsIDI0OSwgNjgsIAorICAgIDI1MSwgMTkyLCAxLCAyMTcsIDE1MywgMjUxLCAxOTIsIDEsIDIzMCwgMzAsIDI1MSwgMTkyLCAxLCAxNTYsIDI1MSwgMTkyLCAKKyAgICAxLCAyNDMsIDIwOSwgMjUxLCAxOTIsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCAxLCAyNDIsIDY3LCAyNTEsIDE5MiwgMSwgCisgICAgMjM1LCAxNTAsIDI1MSwgMTkyLCAxLCAyMjQsIDk5LCAyNTEsIDE5MiwgMSwgMjExLCAxNzgsIDI1MSwgMTkyLCAxLCAyMTAsIAorICAgIDgzLCAyNTEsIDE5MiwgMSwgMjUwLCAxNjYsIDI1MSwgMTkyLCAxLCAyMjAsIDEwNiwgMjUxLCAxOTIsIDEsIDE1MywgMjUxLCAKKyAgICAxOTIsIDEsIDIxMCwgMTU5LCAyNTEsIDE5MiwgMSwgMjUxLCA3NCwgMjUxLCAxOTIsIDEsIDIyMiwgOTMsIDI1MSwgMTkyLCAKKyAgICAxLCA2MSwgMjUxLCAxOTIsIDEsIDc4LCAyNTEsIDE5MiwgMSwgNzYsIDI1MSwgMTkyLCAxLCAyNDUsIDIwNSwgMjUxLCAxOTIsIAorICAgIDEsIDI1NCwgMjEwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDMsIDI1MSwgMTkyLCAxLCAyNTMsIDIwMCwgMjUxLCAxOTIsIDEsIAorICAgIDIyNiwgMTM4LCAyNTEsIDE5MiwgMSwgMjU0LCAxMzEsIDI1MSwgMTkyLCAxLCAyNDUsIDE1OCwgMjUxLCAxOTIsIDEsIDI1NCwgCisgICAgMTIzLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNDYsIDI1MSwgMTkyLCAxLCAyNDUsIDEwMCwgMjUxLCAxOTIsIDEsIDc0LCAyNTEsIAorICAgIDE5MiwgMSwgNjksIDI1MSwgMTkyLCAxLCAyMzUsIDE2MiwgMjUxLCAxOTIsIDEsIDIxNCwgMTA1LCAyNTEsIDE5MiwgMSwgCisgICAgMjI5LCA4NCwgMjUxLCAxOTIsIDEsIDI0MiwgMTg1LCAyNTEsIDE5MiwgMSwgMjM2LCA0MSwgMjQsIDEsIDIzNCwgNjQsIDI0LCAKKyAgICAxLCAyMTgsIDIxNywgMjQsIDEsIDIzNCwgNTcsIDI0LCAxLCAyMjgsIDIzMSwgMjQsIDEsIDIyOCwgMjI5LCAyNCwgMSwgCisgICAgMjI4LCAyMjgsIDI0LCAxLCAyMTYsIDEwMiwgMjQsIDEsIDIxOCwgMjA2LCAyNCwgMSwgMjIzLCAyOSwgMjQsIDEsIDIyMywgCisgICAgMjQsIDI0LCAxLCAyMjMsIDIxLCAyNCwgMSwgMjIzLCAxNCwgMjQsIDEsIDIyMywgOSwgMjQsIDEsIDIyMywgNCwgMjQsIDEsIAorICAgIDIyMywgMTUsIDI0LCAxLCAyMjMsIDI3LCAyNCwgMSwgMjMwLCAyMjIsIDI0LCAxLCAyMjUsIDk4LCAyNCwgMSwgMjE4LCAKKyAgICAyMTQsIDI0LCAxLCAyMjUsIDg3LCAyNCwgMSwgMjE5LCAxNTAsIDI0LCAxLCAyMTgsIDIxMSwgMjQsIDEsIDIzNiwgNjMsIAorICAgIDI0LCAxLCAyNTAsIDU0LCAyNCwgMSwgMjE4LCAyMjEsIDI0LCAxLCAyNTAsIDExNCwgMjQsIDEsIDIzNCwgMTE2LCAyNCwgMSwgCisgICAgMjE2LCAxNzQsIDI0LCAxLCAyMjUsIDEzNCwgMjQsIDEsIDI0MSwgMTc5LCAyNCwgMSwgNjEsIDI0LCAxLCAyNTQsIDI1MiwgCisgICAgMjQsIDEsIDE5MiwgMjQsIDEsIDIxMSwgOTIsIDI0LCAxLCAyNDUsIDEyNSwgMjQsIDEsIDc2LCAyNCwgMSwgMjExLCAzNiwgCisgICAgMjQsIDEsIDIxMSwgNDcsIDI0LCAxLCA3OCwgMjQsIDEsIDIxMiwgNjUsIDI0LCAxLCAyMTIsIDYyLCAyNCwgMSwgMjI2LCAKKyAgICAyMzgsIDI0LCAxLCAyMTAsIDI0NCwgMjQsIDEsIDY5LCAyNCwgMSwgMjEyLCAxMSwgMjQsIDEsIDIxMiwgMjIsIDI0LCAxLCAKKyAgICAyMTEsIDI1MCwgMjQsIDEsIDIxMCwgMjEyLCAyNCwgMSwgMjQ1LCA2MywgMjQsIDEsIDIxMSwgOCwgMjQsIDEsIDc0LCAyNCwgCisgICAgMjQ0LCAxMTEsIDI0LCAxLCAyMTgsIDIxNSwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjI4LCAyMjMsIDI0LCAxLCAyMjgsIAorICAgIDIyNiwgMjQsIDEsIDIyMywgMjIsIDI0LCAxLCAyMjMsIDMsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgMjIzLCAxNiwgMjQsIAorICAgIDEsIDIyMywgMSwgMjQsIDEsIDIzMCwgMjE1LCAyNCwgMSwgMjMwLCAyMTIsIDI0LCAxLCAyMzAsIDIxNiwgMjQsIDEsIDIzNCwgCisgICAgMjI3LCAyNCwgMSwgMjI1LCA5MywgMjQsIDEsIDIyNSwgNzksIDI0LCAxLCAyMjUsIDg1LCAyNCwgMSwgMjI1LCA4MiwgMjQsIAorICAgIDEsIDIyNSwgOTYsIDI0LCAxLCAyMjUsIDgwLCAyNCwgMSwgMjM0LCAyMjUsIDI0LCAxLCAyMzQsIDIyMywgMjQsIDEsIDIxOSwgCisgICAgMTQzLCAyNCwgMSwgMjE5LCAxNDEsIDI0LCAxLCAyMTksIDEzMywgMjQsIDEsIDIxOSwgMTM4LCAyNCwgMSwgMjE5LCAxNDgsIAorICAgIDI0LCAxLCAyMjYsIDM2LCAyNCwgMSwgMjE4LCAyMTgsIDI0LCAxLCAyMTEsIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIAorICAgIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyNiwgMjQsIDEsIDIxOCwgMjE5LCAyNCwgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgCisgICAgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIAorICAgIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgNDIsIDI0LCAxLCAyNTQsIDM2LCAxMTAsIDI1NCwgMTA3LCAyMzIsIDIwOSwgCisgICAgNzksIDExMCwgMjU0LCAxMDcsIDIyMywgNTMsIDc5LCAxMTAsIDI1NCwgMTA3LCAxMjMsIDc5LCAxMTAsIDI1NCwgMTA3LCAKKyAgICAxMTMsIDc5LCAxMTAsIDI1NCwgMTA3LCAxMzQsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDE5LCA3OSwgMTEwLCAyNTQsIAorICAgIDEwNywgMjE2LCAxNSwgNzksIDExMCwgMjU0LCAxMDcsIDIzMCwgMjI5LCA3OSwgMTEwLCAyNTQsIDEwNywgMjUxLCAxODMsIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDEwMCwgNzksIDExMCwgMjU0LCAxMDcsIDIyMSwgMTc4LCA3OSwgMTEwLCAyNTQsIAorICAgIDEwNywgMjE2LCAxNzAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDEyLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQxLCAyMzEsIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDUsIDIzMiwgNzksIDExMCwgMjU0LCAxMDcsIDIzMSwgMTkxLCA3OSwgMjUxLCAxOTIsIAorICAgIDEsIDI1MSwgMTMzLCAyNTEsIDE5MiwgMSwgMjEwLCA0NCwgMjUxLCAxOTIsIDEsIDIzNSwgMTE0LCAyNTEsIDE5MiwgMSwgCisgICAgMjQyLCAxMjAsIDI1MSwgMTkyLCAxLCAyNDUsIDIxNywgMjUxLCAxOTIsIDEsIDI0NSwgMTQzLCAyNTEsIDE5MiwgMSwgMjI2LCAKKyAgICAxODcsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MSwgMjUxLCAxOTIsIDEsIDIzNSwgMTg2LCAyNTEsIDE5MiwgMSwgMjU0LCAxMDksIAorICAgIDI1MSwgMTkyLCAxLCAyMzUsIDIzMSwgMjUxLCAxOTIsIDEsIDIxNCwgMTY4LCAyNTEsIDE5MiwgMSwgMjM2LCAyMywgMjUxLCAKKyAgICAxOTIsIDEsIDIyOSwgNjIsIDI1MSwgMTkyLCAxLCAyNTQsIDIwNCwgMjUxLCAxOTIsIDEsIDI1MywgMTk1LCAyNTEsIDE5MiwgCisgICAgMSwgMjU0LCAxNDQsIDI1MSwgMTkyLCAxLCAyMjYsIDIwOCwgMjUxLCAxOTIsIDEsIDIyNiwgMTkzLCAyNTEsIDE5MiwgMSwgCisgICAgMjM1LCAyMjgsIDI1MSwgMTkyLCA0MCwgMSwgMjI2LCAxMDksIDI1MSwgMTkyLCA0MCwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAKKyAgICA0MCwgMSwgMjM1LCAyOSwgMjUxLCAxOTIsIDQwLCAxLCAyNDIsIDY3LCAyNTEsIDE5MiwgMSwgMjQzLCAxLCAyNTEsIDE5MiwgCisgICAgMSwgMjMzLCA1LCAyNTEsIDE5MiwgMSwgMjA5LCAyNTAsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTMsIDEwLCAyMTgsIDEwNSwgCisgICAgMjEyLCA0LCAxMCwgMjE4LCAxMDUsIDIxMSwgMTU4LCAxMCwgMjE4LCAxMDUsIDI1MSwgODcsIDEwLCAyMTgsIDEwNSwgMjE3LCAKKyAgICAyNTUsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjUsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjksIDEwLCAyMTgsIDEwNSwgMjQwLCAKKyAgICAyMzgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjYsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTYsIDEwLCAyMTgsIDEwNSwgMjQwLCAKKyAgICAxNjgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjQsIDEwLCAyMTgsIDEwNSwgMjQwLCAyMzYsIDEwLCAyMTgsIDEwNSwgMjQwLCAKKyAgICAxNjcsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjMsIDEwLCAyMTgsIDEwNSwgMjMwLCAzMCwgMTAsIDIxOCwgMTA1LCAyNDIsIAorICAgIDY3LCAxMCwgMjE4LCAxMDUsIDIyMiwgOTMsIDEwLCAyMTgsIDEwNSwgMjI2LCAxMDksIDEwLCAyMTgsIDEwNSwgMjE5LCAyMywgCisgICAgMTAsIDIxOCwgMTA1LCAyNDksIDY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTcwLCAxMCwgMjE4LCAxMDUsIDI0MSwgMTk3LCAKKyAgICAxMCwgMjE4LCAxMDUsIDIxNywgMTY1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjM0LCAxMCwgMjE4LCAxMDUsIDIxOCwgMTcwLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIyMCwgMTEyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMjI4LCAxMCwgMjE4LCAxMDUsIDIyNCwgMTAxLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIxNiwgNDQsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTUsIDEwLCAyMTgsIDEwNSwgMjE3LCAyNDUsIAorICAgIDEwLCAyMTgsIDEwNSwgMjQwLCAxNzcsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjIsIDEwLCAyMTgsIDEwNSwgMjI1LCAxNTIsIAorICAgIDEwLCAyMTgsIDEwNSwgMjI0LCA5OSwgNTYsIDEsIDQsIDIzMywgMjIzLCA1NiwgMSwgNCwgMjE5LCAxOTMsIDU2LCAxLCA0LCAKKyAgICAyMTgsIDg0LCA1NiwgMSwgNCwgMTEyLCA1NiwgMSwgNCwgMjI3LCAyNDIsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIAorICAgIDE4NywgNTYsIDEsIDQsIDI0MCwgMjI5LCA1NiwgMSwgNCwgMjQxLCAyNDUsIDU2LCAxLCA0LCAyNDEsIDc1LCA1NiwgMSwgNCwgCisgICAgMjMwLCAxMDcsIDU2LCAxLCA0LCAyMDUsIDU2LCAxLCA0LCAyMjMsIDM4LCA1NiwgMSwgNCwgMjIyLCAxNDIsIDU2LCAxLCA0LCAKKyAgICAyMjMsIDEzMSwgNTYsIDEsIDQsIDIyMiwgMjEzLCA4OCwgMjQsIDIzNCwgNjQsIDg4LCAyNCwgMjI4LCAyMzEsIDg4LCAyNCwgCisgICAgMjE2LCAxMDIsIDg4LCAyNCwgMjIzLCAyOSwgODgsIDI0LCAyMzAsIDIyMiwgODgsIDI0LCAyMjUsIDk4LCA4OCwgMjQsIAorICAgIDIxOSwgMTUwLCA4OCwgMjQsIDIzNiwgNjMsIDg4LCAyNCwgMjUwLCA1NCwgODgsIDI0LCAyNTAsIDExNCwgODgsIDI0LCAKKyAgICAyMzQsIDExNiwgODgsIDI0LCAyMTYsIDE3NCwgODgsIDI0LCAyMjUsIDEzNCwgODgsIDI0LCAyNDEsIDE3OSwgODgsIDI0LCAKKyAgICAyMzQsIDY1LCA2MSwgODgsIDI0LCAyMjgsIDIzMiwgNjEsIDg4LCAyNCwgMjE2LCAxMDMsIDYxLCA4OCwgMjQsIDIyMywgMzAsIAorICAgIDYxLCA4OCwgMjQsIDIzMCwgMjIzLCA2MSwgODgsIDI0LCAyMjUsIDk5LCA2MSwgODgsIDI0LCAyMTksIDE1MSwgNjEsIDg4LCAKKyAgICAyNCwgMjM2LCA2NCwgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjEsIDg4LCAyNCwgMjUwLCAxMTUsIDYxLCA4OCwgMjQsIDIzNCwgCisgICAgMTE3LCA2MSwgODgsIDI0LCAyMTYsIDE3NSwgNjEsIDg4LCAyNCwgMjI1LCAxMzUsIDYxLCA4OCwgMjQsIDI0MSwgMTgwLCAKKyAgICA2MSwgODgsIDI0LCAyNTAsIDU1LCA2OSwgODgsIDIzNCwgOSwgMTM1LCAyMjYsIDIyMSwgODgsIDIzNCwgOSwgMTM1LCAxNDQsIAorICAgIDI0MCwgMjI5LCA4OCwgMTU0LCAxMTEsIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAKKyAgICAxNTQsIDE5MCwgODgsIDE1NCwgMTk1LCA4OCwgMTU0LCAxOTksIDg4LCAxNTQsIDE5NiwgODgsIDE1NCwgMjAxLCA4OCwgCisgICAgMTU0LCAyMTYsIDI0OCwgODgsIDE1NCwgMjMwLCAxMzMsIDg4LCAxNTQsIDI0NCwgMTA0LCA4OCwgMTU0LCAyMTIsIDQwLCAKKyAgICA4OCwgMTU0LCAyMTEsIDIxNCwgODgsIDE1NCwgMjMxLCA0NCwgODgsIDE1NCwgMjQ1LCAyMzEsIDg4LCAxNTQsIDIxOCwgMzgsIAorICAgIDg4LCAxNTQsIDIxOCwgMTM0LCA4OCwgMTU0LCAyNDEsIDI1MSwgODgsIDE1NCwgMjE5LCA1NiwgODgsIDE1NCwgMjI5LCAKKyAgICAyMDksIDg4LCAxNTQsIDIxOSwgNiwgODgsIDE1NCwgMjQ0LCAxMTAsIDg4LCAxNTQsIDI0OSwgMjA4LCA4OCwgMTU0LCAyMzMsIAorICAgIDEzMSwgODgsIDE1NCwgMjIzLCA3NCwgODgsIDE1NCwgMjUxLCAyMywgODgsIDE1NCwgMjE4LCA4OCwgODgsIDE1NCwgMjE4LCAKKyAgICAyMSwgODgsIDE1NCwgMjQ1LCAxMzUsIDg4LCAxNTQsIDIyMywgNjYsIDg4LCAxNTQsIDI1NCwgMTU5LCA4OCwgMTU0LCAyNDQsIAorICAgIDEzNiwgODgsIDE1NCwgMjIzLCA2NCwgODgsIDE1NCwgMjIwLCAxNTgsIDg4LCAxNTQsIDIyMywgMTMwLCAzNywgMTU0LCAKKyAgICAyMjQsIDE1LCAzNywgMTU0LCAyMzQsIDg2LCAzNywgMTU0LCAyMjEsIDIwMCwgMzcsIDE1NCwgMjM0LCA1LCAzNywgNTQsIAorICAgIDIxNiwgMjQ5LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIxNSwgNzQsIDIyNiwgMjAxLCA4NSwgMjE4LCAKKyAgICAyMzYsIDM3LCA1NCwgMjE2LCAxNjQsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAyNCwgMjI2LCAyMDEsIAorICAgIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyNDQsIDEyMywgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTksIDExNCwgCisgICAgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMjAsIDExOSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAKKyAgICAyNDUsIDE5MywgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMjI1LCAyNTUsIDUwLCAzNywgNTQsIDIxNSwgNzQsIDExMSwgMzcsIAorICAgIDU0LCAyMTUsIDc0LCAxMDUsIDM3LCA1NCwgMjE1LCA3NCwgMTU4LCAzNywgNTQsIDIxNSwgNzQsIDE2MSwgMzcsIDU0LCAKKyAgICAyMTUsIDc0LCAxOTAsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDE5OSwgMzcsIDU0LCAyMTUsIAorICAgIDc0LCAxOTYsIDM3LCA1NCwgMjE1LCA3NCwgMjAxLCAzNywgNTQsIDIxNiwgMTYzLCAzNywgNTQsIDIxNiwgMTY0LCAxMTEsIAorICAgIDM3LCA1NCwgMjE2LCAxNjQsIDEwNSwgMzcsIDU0LCAyMTYsIDE2NCwgMTU4LCAzNywgNTQsIDIxNiwgMTY0LCAxNjEsIDM3LCAKKyAgICA1NCwgMjE2LCAxNjQsIDE5MCwgMzcsIDI0LCAyMzQsIDY0LCAzNywgMjQsIDIyOCwgMjMxLCAzNywgMjQsIDIxNiwgMTAyLCAKKyAgICAzNywgMjQsIDIyMywgMjksIDM3LCAyNCwgMjMwLCAyMjIsIDM3LCAyNCwgMjI1LCA5OCwgMzcsIDI0LCAyMTksIDE1MCwgMzcsIAorICAgIDI0LCAyMzYsIDYzLCAzNywgMjQsIDI1MCwgNTQsIDM3LCAyNCwgMjUwLCAxMTQsIDM3LCAyNCwgMjM0LCAxMTYsIDM3LCAyNCwgCisgICAgMjE2LCAxNzQsIDM3LCAyNCwgMjI1LCAxMzQsIDM3LCAyNCwgMjQxLCAxNzksIDM3LCAyNCwgMjM0LCA2NSwgNjEsIDM3LCAKKyAgICAyNCwgMjI4LCAyMzIsIDYxLCAzNywgMjQsIDIxNiwgMTAzLCA2MSwgMzcsIDI0LCAyMjMsIDMwLCA2MSwgMzcsIDI0LCAyMzAsIAorICAgIDIyMywgNjEsIDM3LCAyNCwgMjI1LCA5OSwgNjEsIDM3LCAyNCwgMjE5LCAxNTEsIDYxLCAzNywgMjQsIDIzNiwgNjQsIDYxLCAKKyAgICAzNywgMjQsIDI1MCwgNTUsIDYxLCAzNywgMjQsIDI1MCwgMTE1LCA2MSwgMzcsIDI0LCAyMzQsIDExNywgNjEsIDM3LCAyNCwgCisgICAgMjE2LCAxNzUsIDYxLCAzNywgMjQsIDIyNSwgMTM1LCA2MSwgMzcsIDI0LCAyNDEsIDE4MCwgNjEsIDM3LCAyMzQsIDksIAorICAgIDEzNSwgMjUwLCAxNTYsIDM3LCAyMzQsIDksIDEzNSwgMjM1LCA1MywgMzcsIDI0LCAyMzYsIDY0LCA2OSwgMjM0LCA5LCAKKyAgICAyMTgsIDE2MSwgODcsIDM3LCAxNTQsIDExMSwgMzcsIDE1NCwgMTA1LCAzNywgMTU0LCAxNTgsIDM3LCAxNTQsIDE2MSwgMzcsIAorICAgIDE1NCwgMTkwLCAzNywgMTU0LCAxOTUsIDM3LCAxNTQsIDE5OSwgMzcsIDE1NCwgMTk2LCAzNywgMTU0LCAyMDEsIDM3LCAKKyAgICAxNTQsIDIxNiwgMjQ4LCAzNywgMTU0LCAyMzAsIDEzMywgMzcsIDE1NCwgMjQ0LCAxMDQsIDM3LCAxNTQsIDIxMiwgNDAsIAorICAgIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIDQ0LCAzNywgMTU0LCAyNDUsIDIzMSwgMzcsIDE1NCwgMjE4LCAzOCwgCisgICAgMzcsIDE1NCwgMjE4LCAxMzQsIDM3LCAxNTQsIDI0MSwgMjUxLCAzNywgMTU0LCAyMTksIDU2LCAzNywgMTU0LCAyMjksIAorICAgIDIwOSwgMzcsIDE1NCwgMjE5LCA2LCAzNywgMTU0LCAyNDQsIDExMCwgMzcsIDE1NCwgMjQ5LCAyMDgsIDM3LCAxNTQsIDIzMywgCisgICAgMTMxLCAzNywgMTU0LCAyMjEsIDE3NiwgMzcsIDE1NCwgMjMxLCAxOTQsIDM3LCAxNTQsIDI0NCwgMTQ1LCAzNywgMTU0LCAKKyAgICAyMTgsIDUwLCAzNywgMTU0LCAyNDUsIDQyLCAzNywgMTU0LCAyMjQsIDE5MCwgMzcsIDE1NCwgMjUzLCAyMDQsIDM3LCAxNTQsIAorICAgIDIzNSwgMTY1LCAzNywgMTU0LCAyMjMsIDY0LCAzNywgMTU0LCAyNDksIDE3MiwgMzcsIDE1NCwgMjQ5LCAxNjMsIDM3LCAKKyAgICAxNTQsIDI0MSwgMTcyLCAzNywgMTU0LCAyNTAsIDE4MiwgMzcsIDE1NCwgMjMyLCAxMTYsIDM3LCAxNTQsIDIzMywgNTIsIAorICAgIDM3LCAxNTQsIDIyMiwgMjU0LCAzNywgMTU0LCAyMzEsIDg4LCAzNywgMTU0LCAyMjMsIDkwLCAzNywgMTU0LCAyMTgsIDg4LCAKKyAgICAzNywgMTU0LCAyMTgsIDIxLCAzNywgMTU0LCAyNDUsIDEzNSwgMzcsIDE1NCwgMjIzLCA2NiwgMzcsIDE1NCwgMjU0LCAxNTksIAorICAgIDM3LCAxNTQsIDIyOCwgMjE3LCAzNywgNTQsIDIxNiwgMTY0LCAxOTUsIDM3LCA1NCwgMjE2LCAxNjQsIDE5OSwgMzcsIDU0LCAKKyAgICAyMTYsIDE2NCwgMTk2LCAzNywgNTQsIDIxNiwgMTY0LCAyMDEsIDM3LCA1NCwgMjQ0LCAyMywgMzcsIDU0LCAyNDQsIDI0LCAKKyAgICAxMTEsIDM3LCA1NCwgMjQ0LCAyNCwgMTA1LCAzNywgNTQsIDI0NCwgMjQsIDE1OCwgMzcsIDU0LCAyNDQsIDI0LCAxNjEsIAorICAgIDM3LCA1NCwgMjQ0LCAyNCwgMTkwLCAzNywgNTQsIDI0NCwgMjQsIDE5NSwgMzcsIDU0LCAyNDQsIDI0LCAxOTksIDM3LCA1NCwgCisgICAgMjQ0LCAyNCwgMTk2LCAzNywgNTQsIDI0NCwgMjQsIDIwMSwgMzcsIDU0LCAyNDQsIDEyMiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjM1LCAxMzksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0NCwgMTU2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzEsIAorICAgIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjU0LCA1NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAxMzcsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDIzNSwgNTEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzNSwgNTIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDI1MywgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjAsIDEzOCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjI2LCAKKyAgICAyNDMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyOCwgNDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgOTMsIDQyLCAyNDEsIAorICAgIDE5NywgNDIsIDI0NSwgOTYsIDQyLCAyNDUsIDUxLCAyMzIsIDIyNSwgMjMyLCAyNDYsIDUwLCAzNywgNTYsIDYxLCAzNywgCisgICAgNTYsIDc0LCAzNywgNTYsIDY5LCAzNywgNTYsIDc2LCAzNywgNTYsIDc4LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDk4LCAKKyAgICAzNywgNTYsIDIzMywgMjIzLCAzNywgNTYsIDIzNCwgMTg4LCAzNywgNTYsIDIzNCwgMzQsIDM3LCA1NiwgMjA2LCAzNywgNTYsIAorICAgIDIxOSwgMTkzLCAzNywgNTYsIDIxOCwgODQsIDM3LCA1NiwgMjIxLCAxODMsIDM3LCA1NiwgMjE5LCA2MCwgMzcsIDU2LCAKKyAgICAyMTcsIDEwNiwgMzcsIDU2LCAyMTYsIDExOCwgMzcsIDU2LCAyMTUsIDExOSwgMzcsIDU2LCAyMTcsIDIzLCAzNywgNTYsIAorICAgIDExMiwgMzcsIDU2LCAxOTgsIDM3LCA1NiwgMjI4LCAyMzgsIDM3LCA1NiwgMjI3LCAyNDIsIDM3LCA1NiwgMjI5LCAxMTIsIAorICAgIDM3LCA1NiwgMjI4LCA3OSwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgMjQxLCAxODcsIDM3LCA1NiwgMjQwLCAyMjksIDM3LCA1NiwgCisgICAgMjQxLCAyNDUsIDM3LCA1NiwgMjQxLCA3NSwgMzcsIDU2LCAxODYsIDM3LCA1NiwgMjMwLCAyMzUsIDM3LCA1NiwgMjMwLCAKKyAgICAxMDcsIDM3LCA1NiwgMjMxLCA5NiwgMzcsIDU2LCAyMzAsIDE2NiwgMzcsIDU2LCAxOTIsIDM3LCA1NiwgMjEwLCAyMTIsIAorICAgIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgNTYsIDIyMywgMzgsIDM3LCA1NiwgMjIyLCAxNDIsIDM3LCA1NiwgCisgICAgMjIzLCAxMzEsIDM3LCA1NiwgMjIyLCAyMTMsIDM3LCA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAKKyAgICAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgMjU0LCA3OSwgNDIsIDI1MywgMjQ3LCA0MiwgMjU0LCAxMDMsIDQyLCAKKyAgICAyNTUsIDQwLCA0MiwgMjM1LCAyMzMsIDQyLCAyMzUsIDIwMywgNDIsIDIxNCwgMTY2LCA0MiwgMjQ1LCA3NCwgNDIsIDI0NSwgCisgICAgMjE0LCA0MiwgMjI2LCAxOTAsIDQyLCAyMjYsIDE4NCwgNDIsIDIzNCwgMjUxLCA0MiwgMjM0LCAyMjAsIDQyLCAyMzQsIAorICAgIDIxNywgNDIsIDI0MywgOTksIDQyLCAyNDMsIDEwOCwgNDIsIDI0MiwgMjExLCA0MiwgMjQyLCAyMDcsIDQyLCAyMzMsIDE1NiwgCisgICAgNDIsIDI0MiwgMjAwLCA0MiwgMjM0LCA3OCwgNDIsIDIzNCwgNzcsIDQyLCAyMzQsIDc2LCA0MiwgMjM0LCA3NSwgNDIsIAorICAgIDI0MiwgOTMsIDQyLCAyNDIsIDkyLCA0MiwgMjMzLCAxOTksIDQyLCAyMzMsIDIwMSwgNDIsIDIzNCwgMTg0LCA0MiwgMjM0LCAKKyAgICA3LCA0MiwgMjM0LCAxNCwgNDIsIDIyMiwgMTgsIDQyLCAyMjEsIDIzOSwgNDIsIDIxOSwgMTMxLCA0MiwgMjIwLCAxNDMsIAorICAgIDQyLCAyMjAsIDE0MiwgNDIsIDI0OCwgMjI2LCA0MiwgMjQ4LCA0NCwgNDIsIDI0NywgMTI5LCA0MiwgMjE2LCAzMywgNDIsIAorICAgIDIyOSwgMjA1LCA0MiwgMjI4LCA0NiwgNDIsIDI0MiwgMzksIDQyLCAyMjYsIDg4LCA0MiwgMjI2LCA4NywgNDIsIDI1MiwgCisgICAgMTk2LCA0MiwgMjI1LCAxMDgsIDQyLCAyMjUsIDcyLCA0MiwgMjI1LCA3MywgNDIsIDI1MSwgMjQyLCA0MiwgMjQwLCAyMjgsIAorICAgIDQyLCAyNDAsIDIyNCwgNDIsIDI1MSwgOTksIDQyLCAyNDAsIDIxMSwgNDIsIDI0MSwgMjIyLCA0MiwgMjI1LCAxNjIsIDQyLCAKKyAgICAyMjUsIDE5NywgNDIsIDI0MSwgMjA1LCA0MiwgMjI1LCAxOTQsIDQyLCAyMjUsIDIxMCwgNDIsIDI1MiwgNjksIDQyLCAyMjUsIAorICAgIDksIDQyLCAyNTEsIDE4OCwgNDIsIDI0MSwgNjMsIDQyLCAyMjQsIDI1MywgNDIsIDI0MSwgNTUsIDQyLCAyNDEsIDU3LCA0MiwgCisgICAgMjMxLCAyMDYsIDQyLCAyMzEsIDIwMiwgNDIsIDIzMSwgMjExLCA0MiwgMjMxLCAxNTUsIDQyLCAyMzEsIDE4MCwgNDIsIAorICAgIDIzMCwgMjAyLCA0MiwgMjMwLCAxODEsIDQyLCAyMzAsIDE4MCwgNDIsIDIzMSwgNzksIDQyLCAyMzEsIDc2LCA0MiwgMjMxLCAKKyAgICA4MCwgNDIsIDIxMSwgMTAyLCA0MiwgMjExLCAxMDAsIDQyLCAyMTAsIDIwMSwgNDIsIDIyMiwgMjI5LCA0MiwgMjIyLCAyMzMsIAorICAgIDQyLCAyMjIsIDExOSwgNDIsIDIyMiwgMTEzLCA0MiwgMjIzLCA4OCwgNDIsIDIyMywgODUsIDQyLCAyMTIsIDM4LCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjEwLCA4NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDExMSwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE1OCwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5MCwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5OSwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIwMSwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgCisgICAgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDAsIDI0NiwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyNDQsIDEzLCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTksIDEyMSwgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ1LCAKKyAgICAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAKKyAgICAyNDYsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY3LCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNDAsIDI0NiwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjQsIDExMCwgMjE3LCAKKyAgICA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY5LCA0MiwgMjQwLCAyMzcsIDQyLCAyNDgsIDIyOSwgNDIsIDI1MywgMjAwLCAKKyAgICA0MiwgMTMwLCA0MiwgMjI2LCAxMjksIDQyLCAyMjUsIDIyOSwgNDIsIDI0NywgMTU1LCA0MiwgMjQ3LCAxNTYsIDIxOCwgCisgICAgMjM1LCA0MiwgMjQ3LCAxNTYsIDI0OSwgMTE2LCA0MiwgMjM1LCAxNjIsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjQxLCAKKyAgICAyMjMsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjE3LCAxNzUsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjE3LCA3NSwgNDIsIAorICAgIDI0NSwgOTksIDIyOSwgMjEwLCAyMzEsIDc1LCA0MiwgMjQ5LCAxNjUsIDQyLCAyMjYsIDk0LCAyNTQsIDEzMywgNDIsIDE5OCwgCisgICAgNDIsIDIzMCwgMTA4LCA2MSwgNDIsIDE4NiwgNDIsIDE3NiwgNDIsIDIzNCwgMTkxLCA0MiwgMjMxLCAxMzQsIDQyLCAyNDMsIAorICAgIDg3LCA0MiwgMjUxLCAyNiwgNDIsIDIzNCwgMTkwLCA0MiwgMjI1LCAxNTMsIDQyLCAyMjksIDg2LCA0MiwgMjMwLCAxMDgsIAorICAgIDI0NSwgMTQsIDQyLCAyMzAsIDEwOCwgMjQzLCAyMDksIDQyLCAyMzEsIDIwLCA0MiwgMjM0LCAxNDAsIDQyLCAyNDAsIDE3MCwgCisgICAgNDIsIDIzNCwgMTAwLCA0MiwgMjMwLCAyMzcsIDQyLCAyNDIsIDIyMywgNDIsIDIxNiwgMTIwLCA0MiwgMjMwLCAxMDgsIAorICAgIDE1NiwgNDIsIDIzMCwgMTc0LCA0MiwgMjQ3LCAxNjUsIDQyLCAyMzQsIDQ2LCA0MiwgMjQ0LCA1MywgNDIsIDIyOCwgMTE3LCAKKyAgICA0MiwgMjMwLCAxMDgsIDE5NCwgNDIsIDIzMCwgMTcxLCA0MiwgMjQ5LCAyNDcsIDQyLCAyMzQsIDQwLCA0MiwgMjMwLCAxNzIsIAorICAgIDIxOCwgMjM1LCA0MiwgMjQ5LCAyNDgsIDIxOCwgMjM1LCA0MiwgMjMyLCA1NSwgMjE4LCAyMzUsIDQyLCAyMzQsIDQxLCAKKyAgICAyMTgsIDIzNSwgNDIsIDIzMCwgMTcyLCAyNDksIDExNiwgNDIsIDI0OSwgMjQ4LCAyNDksIDExNiwgNDIsIDIzMiwgNTUsIAorICAgIDI0OSwgMTE2LCA0MiwgMjM0LCA0MSwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAxMTUsIDIyMiwgOTMsIDQyLCAyMzIsIDU1LCAKKyAgICAxMTUsIDIyMiwgOTQsIDIxOCwgMjM1LCA0MiwgMTkxLCA0MiwgMjM0LCAxLCA0MiwgMjMwLCAxMTAsIDQyLCAyNDIsIDE1OCwgCisgICAgNDIsIDIyMywgMTc5LCA0MiwgMjIzLCAxODAsIDExNSwgMjIyLCA5MywgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTQsIAorICAgIDIxOCwgMjM1LCA0MiwgMjI0LCAxNjUsIDQyLCAyMjgsIDE4LCA0MiwgMjMwLCAxMDgsIDIyMiwgOTMsIDQyLCAyMzAsIDEwOSwgCisgICAgNDIsIDIyNCwgMTE5LCA0MiwgMjI3LCAxODAsIDQyLCAyMzAsIDEwOCwgMjE0LCAxMDUsIDQyLCAyMzAsIDU0LCA0MiwgMjMzLCAKKyAgICAxOTEsIDQyLCAyMzAsIDU1LCAyMzEsIDc5LCA0MiwgMjI0LCAxMTgsIDQyLCAyMjcsIDE3OSwgNDIsIDIzMCwgMTA4LCAyMTIsIAorICAgIDk4LCA0MiwgMjMwLCA0OCwgNDIsIDIzMywgMTg5LCA0MiwgMjMwLCA0OSwgMjMxLCA3OSwgNDIsIDIzNSwgMzAsIDIyNiwgCisgICAgMjI0LCA0MiwgMjMyLCA1NSwgMjI2LCAyMjQsIDQyLCAyNTQsIDE0NCwgNDIsIDI1MSwgMTY4LCA0MiwgMjUwLCAyMjIsIDQyLCAKKyAgICAyNTAsIDE5OSwgNDIsIDI1MSwgNzUsIDExNSwgMjM0LCAxNDAsIDQyLCAyNDksIDI0NiwgNDIsIDI0OCwgMTUwLCA0MiwgCisgICAgMjQyLCA3OSwgNDIsIDE2MiwgNDIsIDI0MCwgMjM4LCA0MiwgMjM2LCA2LCA0MiwgMjM0LCA1MywgNDIsIDIzNCwgNDEsIAorICAgIDI1MSwgMiwgNDIsIDIzMywgMjI1LCA0MiwgMjMyLCAxNjUsIDQyLCAyMzIsIDE2NCwgNDIsIDIzMiwgMTUzLCA0MiwgMjMyLCAKKyAgICA2OCwgNDIsIDIzMSwgMTM1LCAyMTksIDgxLCA0MiwgMjMwLCAyMDEsIDQyLCAyMzAsIDE1NywgNDIsIDIyNSwgMTUxLCA0MiwgCisgICAgMjI1LCAyMiwgNDIsIDIyNCwgMjIyLCA0MiwgMjI0LCAyMjAsIDQyLCAyMTgsIDIyOSwgNDIsIDIxOCwgMywgNDIsIDIxMiwgCisgICAgMjQsIDQyLCAyMTQsIDEwNiwgMTE1LCAxOTQsIDQyLCAxMTYsIDExNSwgMTk0LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTExLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTA1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTU4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTYxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTkwLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTk1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTk5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMjAxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAyNDgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0OCwgMTU0LCAyNDUsIDE3NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNzYsIDExMCwgMjE3LCA0LCAKKyAgICAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDI0NCwgMTMsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEyNiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxOSwgCisgICAgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjIwLCAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAyNDUsIDE5OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyOCwgMjAyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNDgsIDE1NCwgMjE1LCA3MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjcsIDExMCwgMjE3LCAKKyAgICA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDYzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NCwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAKKyAgICAyMTUsIDcwLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQ4LCAxNTQsIDIxNSwgNjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDcyLCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYzLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjIsIDQyLCAyNDMsIDEyNSwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgCisgICAgMjQ5LCAxNDgsIDI0MSwgMjMwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMjMsIDEyNSwgMjQ1LCAyMzEsIDI0MSwgMTk5LCAKKyAgICAzMSwgMjQ3LCAyMzksIDI1MywgMjE1LCAyMTYsIDE5NywgMjUyLCA2NCwgMjQxLCAxOTksIDMxLCAyMTAsIDIyMywgMjQ0LCAKKyAgICA0NiwgMjQxLCAxOTksIDMxLCAyMTIsIDU5LCAyNDEsIDE5OSwgMzEsIDI0OSwgMjExLCAyNDEsIDE5OSwgMzEsIDIxNiwgCisgICAgMTk3LCAyNTQsIDExLCAyNDEsIDE5OSwgMzEsIDI0MSwgNjcsIDIxNiwgMzksIDI0MSwgMTk5LCAzMSwgNCwgMjE3LCA2MiwgCisgICAgMjQxLCAxOTksIDMxLCAyMTUsIDIzOCwgMjQxLCAxOTksIDMxLCAyMjUsIDIyMiwgMjQxLCAxOTksIDMxLCAyMTgsIDE2MCwgCisgICAgMjQxLCAxOTksIDMxLCAyNDQsIDE0NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyNDMsIDI0MSwgMTk5LCAzMSwgCisgICAgMjMwLCAxNjAsIDI0MSwgMTk5LCAzMSwgMjQ1LCAxMzQsIDI0MSwgMTk5LCAzMSwgMjQ0LCA0NywgMjQxLCAxOTksIDMxLCAKKyAgICAyMTEsIDIwNywgMjI2LCAyMDEsIDIxNiwgMTk3LCAyNDgsIDk0LCAyNDEsIDE5OSwgMzEsIDI1NCwgNTksIDI0MSwgMTk5LCAKKyAgICAzMSwgMjQ5LCAxOTMsIDI0MSwgMTk5LCAzMSwgMjUxLCAyMzUsIDIxNiwgMTM5LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTU2LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIxOCwgMjQ3LCAyNTQsIDc4LCAyNDEsIDE5OSwgMzEsIDIyMywgNTYsIDI0MSwgMTk5LCAzMSwgCisgICAgMjM1LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIxNywgNjIsIDI0MSwgMTk5LCAzMSwgMjMwLCAxMTYsIDI0OSwgCisgICAgMTY3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjU1LCAyNywgCisgICAgMjEyLCA0MCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjUwLCAxNiwgMjQ0LCAxMDQsIDI0MSwgMTk5LCAzMSwgMjM1LCAKKyAgICAyNDAsIDI0MSwgMTk5LCAzMSwgMjQ2LCA2NSwgMjQxLCAxOTksIDMxLCAyMjMsIDU5LCAyNDEsIDE5OSwgMzEsIDI0MiwgCisgICAgMTM5LCAyMjQsIDIyNywgMjQxLCAxOTksIDMxLCAyMjQsIDE4MCwgMjQxLCAxOTksIDMxLCAyNDgsIDE2OSwgNjQsIDIxNiwgCisgICAgMTk3LCAyMzIsIDIzNiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjQ0LCAxODIsIDI0MSwgMTk5LCAzMSwgMjI2LCAxNjcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjI2LCAyNDgsIDI0MSwgMTk5LCAzMSwgMjQ4LCA2NywgMjQxLCAxOTksIDMxLCAyNDgsIDg3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIzNSwgMjU0LCAyNDEsIDE5OSwgMzEsIDI1MSwgMTU3LCAyNDEsIDE5OSwgMzEsIDI0OSwgMjI5LCAKKyAgICAyMTYsIDQzLCAyMzEsIDgxLCAyNDEsIDE5OSwgMzEsIDI0MywgOTQsIDIxNiwgMzksIDI0MSwgMTk5LCAzMSwgMjI0LCAxMjgsIAorICAgIDIxNCwgMTU0LCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY2LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMTIsIDEzLCAyNDEsIAorICAgIDE5OSwgMzEsIDIyMywgNDgsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMjI4LCAyNDEsIDE5OSwgMzEsIDIxNiwgCisgICAgMTk3LCAyNTQsIDcsIDIxNiwgMTM0LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzQsIDE4NSwgMjE4LCAxMzYsIDIzMCwgCisgICAgMTIwLCAyNDEsIDE5OSwgMzEsIDI0OCwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzMSwgMTU3LCAyMzEsIDIwNywgCisgICAgMjQxLCAxOTksIDMxLCAyNTUsIDI4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMTIsIDU0LCAyNDEsIDE5OSwgMzEsIAorICAgIDIxNiwgMTk3LCAyNDMsIDU0LCAyMTEsIDIzOSwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM1LCA1OCwgMjMzLCAxMTMsIAorICAgIDI0MSwgMTk5LCAzMSwgMjQ3LCAxOTIsIDI0MSwgMTk5LCAzMSwgMjMyLCAyMjYsIDI0MSwgMTk5LCAzMSwgMjM1LCAyMzAsIAorICAgIDIxNSwgMTg4LCAyNDEsIDE5OSwgMzEsIDQsIDIyNCwgMjAwLCAyNDEsIDE5OSwgMzEsIDI1NCwgMjI2LCAyNDksIDIyMCwgCisgICAgMjQxLCAxOTksIDMxLCAyNTIsIDY3LCAyNDksIDIyMCwgOCwgMywgMjM1LCAxNjYsIDgsIDMsIDIzNSwgMTU5LCA4LCAzLCAKKyAgICA3NCwgOCwgMywgMjM1LCAxODksIDgsIDMsIDIzNiwgNjUsIDgsIDMsIDIzNiwgNDgsIDgsIDMsIDIzNiwgNjcsIDgsIDMsIAorICAgIDIzNiwgNjYsIDgsIDMsIDI1MywgMjE0LCA4LCAzLCAyNTMsIDE3NywgOCwgMywgNjEsIDgsIDMsIDI1NCwgODAsIDgsIDMsIAorICAgIDIxNCwgMTY0LCA4LCAzLCAyMTQsIDE2NywgOCwgMywgMjE0LCAxNjUsIDgsIDMsIDIyNiwgMTQ0LCA4LCAzLCAyMjYsIDExOCwgCisgICAgOCwgMywgNzgsIDgsIDMsIDIyNiwgMTc5LCA4LCAzLCAyNDUsIDQzLCA4LCAzLCA3NiwgOCwgMywgMjExLCAxOTUsIDgsIDMsIAorICAgIDI1MSwgMjM2LCA4LCAzLCAyNTEsIDIzMywgOCwgMywgMjUyLCAxNCwgOCwgMywgMjUxLCAyNDYsIDgsIDMsIDI1MiwgMywgOCwgCisgICAgMywgMjUyLCAyLCA4LCAzLCAyNTIsIDUsIDgsIDMsIDI1MiwgNCwgOCwgMywgMjUyLCAxMjksIDgsIDMsIDI1MiwgMTIxLCA4LCAKKyAgICAzLCAyNTIsIDE5OSwgOCwgMywgMjUyLCAxNTAsIDgsIDMsIDI1MSwgMTA5LCA4LCAzLCAyNTEsIDExMywgOCwgMywgMjUxLCAKKyAgICAxMTAsIDgsIDMsIDI1MSwgMTg3LCA4LCAzLCAyNTEsIDE3MSwgOCwgMywgMjUxLCAyMTMsIDgsIDMsIDI1MSwgMTkzLCA4LCAKKyAgICAzLCAyNTIsIDI5LCA4LCAzLCAyNTIsIDgzLCA4LCAzLCAyNTIsIDQxLCA4LCAzLCAyNTEsIDk1LCA4LCAzLCAyNTEsIDkyLCAKKyAgICA4LCAzLCAyNTEsIDEzMywgOCwgMywgMjUxLCAxMDgsIDgsIDMsIDI1MSwgMTAyLCA4LCAzLCAyNTEsIDEwNiwgOCwgMywgCisgICAgMjUxLCA4MCwgOCwgMywgMjUxLCA3OCwgOCwgMywgMjUxLCA4NSwgOCwgMywgMjUxLCA4MywgOCwgMywgMjUxLCA4MSwgOCwgCisgICAgMywgMjUxLCA4MiwgOCwgMywgMjI1LCA1MiwgOCwgMywgMjI1LCA0OCwgOCwgMywgMjI1LCAxMTEsIDgsIDMsIDIyNSwgNjIsIAorICAgIDgsIDMsIDIyNSwgNzgsIDgsIDMsIDIyNSwgMTA1LCA4LCAzLCAyMjUsIDEwMSwgOCwgMywgMjI1LCAyNDQsIDgsIDMsIDIyNSwgCisgICAgMjM0LCA4LCAzLCAxOTEsIDgsIDMsIDIyNiwgMjUsIDgsIDMsIDIyNCwgMTM4LCA4LCAzLCAyMjQsIDE0MCwgOCwgMywgMjI0LCAKKyAgICAxMzksIDgsIDMsIDIyNCwgMjM2LCA4LCAzLCAyMjQsIDIyNSwgOCwgMywgMjI1LCAxOSwgOCwgMywgMjI0LCAyNDgsIDgsIDMsIAorICAgIDIyNCwgMTI0LCA4LCAzLCAyMjQsIDEyMCwgOCwgMywgMjI0LCAxNTMsIDgsIDMsIDIyNCwgMTM3LCA4LCAzLCAyMjQsIDEyOSwgCisgICAgOCwgMywgMjI0LCAxMzUsIDgsIDMsIDIyNCwgMTAzLCA4LCAzLCAyMjQsIDEwMiwgOCwgMywgMjI0LCAxMDcsIDgsIDMsIAorICAgIDIyNCwgMTA2LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDUsIDgsIDMsIDI1MiwgMTA0LCA4LCAzLCAyNTIsIDEwMywgCisgICAgOCwgMywgMjUyLCAxMTAsIDgsIDMsIDI1MiwgMTA1LCA4LCAzLCAyNTIsIDEwNywgOCwgMywgMjUyLCAxMDYsIDgsIDMsIAorICAgIDI1MiwgMTA5LCA4LCAzLCAyNTIsIDEwOCwgOCwgMywgMjUyLCAxMTYsIDgsIDMsIDI1MiwgMTE1LCA4LCAzLCAyNTIsIDExOSwgCisgICAgOCwgMywgMjUyLCAxMTcsIDgsIDMsIDI1MiwgOTUsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgOTYsIDgsIDMsIDI1MiwgCisgICAgMTAwLCA4LCAzLCAyNTIsIDk5LCA4LCAzLCAyNTIsIDEwMiwgOCwgMywgMjUyLCAxMDEsIDgsIDMsIDI1MiwgMTExLCA4LCAzLCAKKyAgICAyNTIsIDExNCwgOCwgMywgMjUyLCAxMTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgOTgsIDgsIAorICAgIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTMsIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODYsIAorICAgIDgsIDMsIDI1MiwgODksIDgsIDMsIDI1MiwgODgsIDgsIDMsIDIyOSwgMTc0LCA4LCAzLCAyMjksIDE3MywgOCwgMywgMjI5LCAKKyAgICAxNzksIDgsIDMsIDIyOSwgMTc1LCA4LCAzLCAyMjksIDE3NiwgOCwgMywgMjI5LCAxNzgsIDgsIDMsIDIyOSwgMTc3LCA4LCAKKyAgICAzLCAyMjksIDE4MiwgOCwgMywgMjI5LCAxODEsIDgsIDMsIDIyOSwgMTg0LCA4LCAzLCAyMjksIDE4MywgOCwgMywgMjI5LCAKKyAgICAxNzAsIDgsIDMsIDIyOSwgMTY5LCA4LCAzLCAyMjksIDE3MiwgOCwgMywgMjI5LCAxNzEsIDgsIDMsIDIyOSwgMTYzLCA4LCAKKyAgICAzLCAyMjksIDE2MiwgOCwgMywgMjI5LCAxNjcsIDgsIDMsIDIyOSwgMTY2LCA4LCAzLCAyMjksIDE2NCwgOCwgMywgMjI5LCAKKyAgICAxNjUsIDgsIDMsIDIyOSwgMTU3LCA4LCAzLCAyMjksIDE1NiwgOCwgMywgMjI5LCAxNjEsIDgsIDMsIDIyOSwgMTYwLCA4LCAKKyAgICAzLCAyMjksIDE1OCwgOCwgMywgMjI5LCAxNTksIDgsIDMsIDI0MSwgMTE3LCA4LCAzLCAyNDEsIDExNiwgOCwgMywgMjQxLCAKKyAgICAxMjIsIDgsIDMsIDI0MSwgMTE4LCA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMjEsIDgsIDMsIDI0MSwgMTIwLCA4LCAKKyAgICAzLCAyNDEsIDEyNSwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAyNDEsIDEyNiwgOCwgMywgMjQxLCAKKyAgICAxMDgsIDgsIDMsIDI0MSwgMTEwLCA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTMsIDgsIDMsIDI0MSwgMTEyLCA4LCAKKyAgICAzLCAyNDEsIDExNSwgOCwgMywgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMywgOCwgMywgMjQxLCAKKyAgICAxMTEsIDgsIDMsIDI0MSwgMTA3LCA4LCAzLCAyNDEsIDEwNSwgOCwgMywgMjQxLCAxMDYsIDgsIDMsIDI0MSwgOTgsIDgsIDMsIAorICAgIDI0MSwgMTAyLCA4LCAzLCAyNDEsIDEwMSwgOCwgMywgMjQxLCA5OSwgOCwgMywgMjQxLCAxMDAsIDgsIDMsIDIzMCwgMTc3LCAKKyAgICA4LCAzLCAyMzAsIDE3NiwgOCwgMywgMjMwLCAyMzUsIDgsIDMsIDIzMCwgMTgzLCA4LCAzLCAyMzAsIDIwOCwgOCwgMywgCisgICAgMjMwLCAyMjYsIDgsIDMsIDIzMCwgMjI0LCA4LCAzLCAyMzEsIDE0NCwgOCwgMywgMjMxLCAxMzksIDgsIDMsIDE4NiwgOCwgCisgICAgMywgMjMxLCAxNzcsIDgsIDMsIDIzMCwgNzksIDgsIDMsIDIzMCwgNzgsIDgsIDMsIDIzMCwgODIsIDgsIDMsIDIzMCwgODAsIAorICAgIDgsIDMsIDIzMCwgMTI2LCA4LCAzLCAyMzAsIDExMiwgOCwgMywgMjMwLCAxNjYsIDgsIDMsIDIzMCwgMTMxLCA4LCAzLCAKKyAgICAyMzEsIDMxLCA4LCAzLCAyMzEsIDk2LCA4LCAzLCAyMzAsIDYwLCA4LCAzLCAyMzAsIDU2LCA4LCAzLCAyMzAsIDEwNywgOCwgCisgICAgMywgMjMwLCA3NSwgOCwgMywgMjMwLCA2OCwgOCwgMywgMjMwLCA3MywgOCwgMywgMjMwLCAzMywgOCwgMywgMjMwLCAzMiwgCisgICAgOCwgMywgMjMwLCAzOCwgOCwgMywgMjMwLCAzNSwgOCwgMywgMjQ0LCA5MSwgOCwgMywgMjQ0LCA4NiwgOCwgMywgMjQ0LCAKKyAgICAxMjksIDgsIDMsIDI0NCwgMTA2LCA4LCAzLCAyNDQsIDE3NSwgOCwgMywgMjQ0LCAxNjYsIDgsIDMsIDI0NCwgMjA0LCA4LCAKKyAgICAzLCAyNDQsIDE3OCwgOCwgMywgMjQ0LCAxMSwgOCwgMywgMjQ0LCA1MSwgOCwgMywgMjQ0LCAzNSwgOCwgMywgMjQzLCAyMjUsIAorICAgIDgsIDMsIDI0MywgMjI0LCA4LCAzLCAyNDMsIDI0MSwgOCwgMywgMjQzLCAyMzAsIDgsIDMsIDI0MywgMjI4LCA4LCAzLCAKKyAgICAyNDMsIDIyOSwgOCwgMywgMjQzLCAyMTIsIDgsIDMsIDI0MywgMjExLCA4LCAzLCAyNDMsIDIxNSwgOCwgMywgMjQzLCAyMTMsIAorICAgIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAKKyAgICAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCAKKyAgICA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIDIxMywgMTI1LCA4LCAzLCAyMTMsIAorICAgIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgOCwgMywgMjEzLCAyNDQsIDgsIAorICAgIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIDIxMiwgMTEzLCA4LCAzLCAyMTIsIAorICAgIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgOCwgMywgMjEyLCAxMDYsIDgsIAorICAgIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIDI0NywgMTg2LCA4LCAzLCAyNDcsIAorICAgIDE3NCwgOCwgMywgMjQ4LCAxMSwgOCwgMywgMjQ3LCAyMTEsIDgsIDMsIDI0NywgMjQ0LCA4LCAzLCAyNDcsIDI0OCwgOCwgMywgCisgICAgMjQ3LCAyNDcsIDgsIDMsIDI0OCwgMTYwLCA4LCAzLCAyNDgsIDE1NSwgOCwgMywgMjQ4LCAyMjksIDgsIDMsIDI0OCwgMTgwLCAKKyAgICA4LCAzLCAyNDYsIDcwLCA4LCAzLCAyNDYsIDcxLCA4LCAzLCAyNDcsIDEyOCwgOCwgMywgMjQ2LCAxMTAsIDgsIDMsIDI0NywgCisgICAgMTUzLCA4LCAzLCAyNDcsIDEzMCwgOCwgMywgMjQ4LCAzOCwgOCwgMywgMjQ4LCA5OCwgOCwgMywgMjQ4LCA1MywgOCwgMywgCisgICAgMjQ2LCA2MSwgOCwgMywgMjQ2LCA1OSwgOCwgMywgMjQ2LCA4NiwgOCwgMywgMjQ2LCA2OSwgOCwgMywgMjQ2LCA2NCwgOCwgCisgICAgMywgMjQ2LCA2NywgOCwgMywgMjE2LCA2OCwgOCwgMywgMjE2LCA2MiwgOCwgMywgMjE2LCAxMTgsIDgsIDMsIDIxNiwgNzcsIAorICAgIDgsIDMsIDIxNiwgMTEwLCA4LCAzLCAyMTYsIDExMiwgOCwgMywgMjE2LCAxMTEsIDgsIDMsIDIxNywgNDcsIDgsIDMsIDIxNywgCisgICAgMzQsIDgsIDMsIDIxNywgMTA2LCA4LCAzLCAyMTcsIDU1LCA4LCAzLCAyMTUsIDEwMywgOCwgMywgMjE1LCAxMDIsIDgsIDMsIAorICAgIDIxNSwgMTA1LCA4LCAzLCAyMTUsIDEwNCwgOCwgMywgMjE2LCA2LCA4LCAzLCAyMTYsIDIsIDgsIDMsIDExMiwgOCwgMywgCisgICAgMjE2LCAxNCwgOCwgMywgMjE2LCAyMTQsIDgsIDMsIDIxNywgMjMsIDgsIDMsIDIxNiwgMjM4LCA4LCAzLCAyMTUsIDg4LCA4LCAKKyAgICAzLCAyMTUsIDgzLCA4LCAzLCAyMTUsIDExOSwgOCwgMywgMjE1LCAxMDEsIDgsIDMsIDIxNSwgODksIDgsIDMsIDIxNSwgOTksIAorICAgIDgsIDMsIDI0OCwgMTE1LCA4LCAzLCAyNDgsIDExNCwgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTE2LCA4LCAzLCAKKyAgICAyNDgsIDExNywgOCwgMywgMjQ4LCAxMTksIDgsIDMsIDI0OCwgMTE4LCA4LCAzLCAyNDgsIDEzNiwgOCwgMywgMjQ4LCAxMzUsIAorICAgIDgsIDMsIDI0OCwgMTQzLCA4LCAzLCAyNDgsIDEzNywgOCwgMywgMjQ4LCAxMDUsIDgsIDMsIDI0OCwgMTA3LCA4LCAzLCAKKyAgICAyNDgsIDEwNiwgOCwgMywgMjQ4LCAxMTAsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMywgOCwgMywgMjQ4LCAxMTEsIAorICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEzMSwgOCwgMywgMjQ4LCAxMjksIDgsIDMsIDI0OCwgMTAxLCA4LCAzLCAKKyAgICAyNDgsIDEwMCwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA0LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDMsIAorICAgIDgsIDMsIDIyOSwgMTMxLCA4LCAzLCAyMjksIDEzMCwgOCwgMywgMjI5LCAxMzgsIDgsIDMsIDIyOSwgMTMzLCA4LCAzLCAKKyAgICAyMjksIDEzNCwgOCwgMywgMjI5LCAxMzUsIDgsIDMsIDIyOSwgMTQ3LCA4LCAzLCAyMjksIDE0NiwgOCwgMywgMjI5LCAxNTMsIAorICAgIDgsIDMsIDIyOSwgMTQ4LCA4LCAzLCAyMjksIDEyMywgOCwgMywgMjI5LCAxMjIsIDgsIDMsIDIyOSwgMTI5LCA4LCAzLCAKKyAgICAyMjksIDEyNCwgOCwgMywgMjI5LCAxMzksIDgsIDMsIDIyOSwgMTQ1LCA4LCAzLCAyMjksIDE0MywgOCwgMywgMjI5LCAxMTUsIAorICAgIDgsIDMsIDIyOSwgMTE0LCA4LCAzLCAyMjksIDEyMCwgOCwgMywgMjI5LCAxMTgsIDgsIDMsIDIyOSwgMTE2LCA4LCAzLCAKKyAgICAyMjksIDExNywgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4MywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4NSwgOCwgCisgICAgMywgMjQxLCA4NywgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4OSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA5NSwgCisgICAgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5NywgOCwgMywgMjQxLCA5NiwgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCAKKyAgICA3OSwgOCwgMywgMjQxLCA4MSwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA4MiwgOCwgMywgMjQxLCA5MSwgOCwgMywgCisgICAgMjQxLCA5MywgOCwgMywgMjQxLCA5MiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjI4LCAxOTQsIDgsIDMsIDIyOCwgMTkyLCA4LCAKKyAgICAzLCAyMjgsIDIzOCwgOCwgMywgMjI4LCAxOTcsIDgsIDMsIDIyOCwgMjIwLCA4LCAzLCAyMjgsIDIzNCwgOCwgMywgMjI4LCAKKyAgICAyMzMsIDgsIDMsIDIyOSwgMTg4LCA4LCAzLCAxOTgsIDgsIDMsIDIyOSwgMjAyLCA4LCAzLCAyMjcsIDE5MCwgOCwgMywgCisgICAgMjI3LCAxOTIsIDgsIDMsIDIyNywgMTkxLCA4LCAzLCAyMjgsIDU2LCA4LCAzLCAyMjgsIDQzLCA4LCAzLCAyMjgsIDc5LCA4LCAKKyAgICAzLCAyMjgsIDY1LCA4LCAzLCAyMjksIDg4LCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjI5LCA5OSwgOCwgMywgMjI3LCAxODUsIAorICAgIDgsIDMsIDIyNywgMTgxLCA4LCAzLCAyMjcsIDI0MiwgOCwgMywgMjI3LCAxODksIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAKKyAgICAyMjcsIDE4OCwgOCwgMywgMjQxLCAxNDgsIDgsIDMsIDI0MSwgMTQ3LCA4LCAzLCAyNDEsIDE1MywgOCwgMywgMjQxLCAxNDksIAorICAgIDgsIDMsIDI0MSwgMTUwLCA4LCAzLCAyNDEsIDE1MiwgOCwgMywgMjQxLCAxNTEsIDgsIDMsIDI0MSwgMTU4LCA4LCAzLCAKKyAgICAyNDEsIDE1NywgOCwgMywgMjQxLCAxNjAsIDgsIDMsIDI0MSwgMTU5LCA4LCAzLCAyNDEsIDE0MCwgOCwgMywgMjQxLCAxNDIsIAorICAgIDgsIDMsIDI0MSwgMTQxLCA4LCAzLCAyNDEsIDE0NCwgOCwgMywgMjQxLCAxNDYsIDgsIDMsIDI0MSwgMTQ1LCA4LCAzLCAKKyAgICAyNDEsIDE1NCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIDI0MSwgMTU1LCA4LCAzLCAyNDEsIDEzNiwgOCwgMywgMjQxLCAxMzUsIAorICAgIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDEzOSwgOCwgMywgMjQxLCAxMzcsIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAKKyAgICAyNDEsIDEzMCwgOCwgMywgMjQxLCAxMjksIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzEsIAorICAgIDgsIDMsIDI0MSwgMTMyLCA4LCAzLCAyMzIsIDIwMSwgOCwgMywgMjMyLCAxOTUsIDgsIDMsIDIzMiwgMjQ3LCA4LCAzLCAKKyAgICAyMzIsIDIwOCwgOCwgMywgMjMyLCAyMzksIDgsIDMsIDIzMiwgMjM4LCA4LCAzLCAyMzIsIDI0MiwgOCwgMywgMjMyLCAyNDAsIAorICAgIDgsIDMsIDIzMywgODUsIDgsIDMsIDIzMywgNzUsIDgsIDMsIDIzMywgMTQxLCA4LCAzLCAyMzMsIDk0LCA4LCAzLCAyMzIsIAorICAgIDg0LCA4LCAzLCAyMzIsIDgzLCA4LCAzLCAyMzIsIDg2LCA4LCAzLCAyMzIsIDg1LCA4LCAzLCAyMzIsIDEyMiwgOCwgMywgCisgICAgMjMyLCAxMTIsIDgsIDMsIDIzMiwgMTYyLCA4LCAzLCAyMzIsIDEyNiwgOCwgMywgMjMzLCA4LCA4LCAzLCAyMzMsIDY0LCA4LCAKKyAgICAzLCAyMzMsIDIzLCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDEwMywgOCwgMywgMjMyLCA4MiwgCisgICAgOCwgMywgMjMyLCA4MCwgOCwgMywgMjMyLCA4MSwgOCwgMywgMjMyLCA1OSwgOCwgMywgMjMyLCA1OCwgOCwgMywgMjMyLCAKKyAgICA2NywgOCwgMywgMjMyLCA2MiwgOCwgMywgMjMyLCA2MCwgOCwgMywgMjMyLCA2MSwgOCwgMywgMjQyLCAxOTYsIDgsIDMsIAorICAgIDI0MiwgMTk1LCA4LCAzLCAyNDIsIDIyMSwgOCwgMywgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjEzLCA4LCAzLCAyNDIsIDIxMiwgCisgICAgOCwgMywgMjQyLCAyMTUsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDMsIDk2LCA4LCAzLCAyNDMsIDkxLCA4LCAzLCAyNDMsIAorICAgIDE0MiwgOCwgMywgMjQzLCAxMDYsIDgsIDMsIDI0MiwgOTgsIDgsIDMsIDI0MiwgOTcsIDgsIDMsIDI0MiwgMTAwLCA4LCAzLCAKKyAgICAyNDIsIDk5LCA4LCAzLCAyNDIsIDE2MSwgOCwgMywgMjQyLCAxNTksIDgsIDMsIDI0MiwgMTgxLCA4LCAzLCAyNDIsIDE2OSwgCisgICAgOCwgMywgMjQzLCA0MCwgOCwgMywgMjQzLCAzOCwgOCwgMywgMjQzLCA2OSwgOCwgMywgMjQzLCA1MSwgOCwgMywgMjQyLCAKKyAgICA4OCwgOCwgMywgMjQyLCA4NywgOCwgMywgMjQyLCAxMjAsIDgsIDMsIDI0MiwgOTYsIDgsIDMsIDI0MiwgODksIDgsIDMsIAorICAgIDI0MiwgOTUsIDgsIDMsIDIzNCwgNjcsIDgsIDMsIDIzNCwgNjYsIDgsIDMsIDIzNCwgOTgsIDgsIDMsIDIzNCwgODEsIDgsIAorICAgIDMsIDIzNCwgOTEsIDgsIDMsIDIzNCwgOTQsIDgsIDMsIDIzNCwgOTIsIDgsIDMsIDIzNCwgMjA4LCA4LCAzLCAyMzQsIDE5NiwgCisgICAgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIzNCwgOCwgMywgMjMzLCAyMDYsIDgsIDMsIDIzMywgMjExLCA4LCAzLCAyMzMsIAorICAgIDIwOCwgOCwgMywgMjM0LCA2LCA4LCAzLCAyMzQsIDIsIDgsIDMsIDIzNCwgMzQsIDgsIDMsIDIzNCwgMTMsIDgsIDMsIDIzNCwgCisgICAgMTYyLCA4LCAzLCAyMzQsIDE0NiwgOCwgMywgMjM0LCAxODgsIDgsIDMsIDIzNCwgMTY1LCA4LCAzLCAyMzMsIDE5NSwgOCwgCisgICAgMywgMjMzLCAxOTIsIDgsIDMsIDIzMywgMjIzLCA4LCAzLCAyMzMsIDIwNSwgOCwgMywgMjMzLCAxOTgsIDgsIDMsIDIzMywgCisgICAgMjAyLCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDI2LCA4LCAzLCAyNDMsIDIzLCA4LCAzLCAKKyAgICAyNDMsIDI1LCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDMzLCA4LCAzLCAyNDMsIDMyLCA4LCAzLCAyNDMsIDM2LCA4LCAKKyAgICAzLCAyNDMsIDM0LCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIDEyLCA4LCAzLCAyNDMsIDE1LCA4LCAzLCAyNDMsIDE0LCAKKyAgICA4LCAzLCAyNDMsIDE4LCA4LCAzLCAyNDMsIDE3LCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDE5LCA4LCAzLCAyNDMsIAorICAgIDI4LCA4LCAzLCAyNDMsIDI3LCA4LCAzLCAyNDMsIDMxLCA4LCAzLCAyNDMsIDI5LCA4LCAzLCAyNDMsIDgsIDgsIDMsIDI0MywgCisgICAgNywgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxMSwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyMzAsIAorICAgIDI1NCwgOCwgMywgMjMwLCAyNTUsIDgsIDMsIDIzMSwgMTcsIDgsIDMsIDIzMSwgMTYsIDgsIDMsIDIzMSwgMTksIDgsIDMsIAorICAgIDIzMSwgMTgsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NywgOCwgMywgMjMwLCAyNDYsIDgsIDMsIDIzMCwgMjUwLCAKKyAgICA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTIsIDgsIDMsIDIzMCwgMjUxLCA4LCAzLCAyMzEsIDAsIDgsIDMsIDIzMSwgCisgICAgMiwgOCwgMywgMjMxLCAxLCA4LCAzLCAyMzAsIDI0MSwgOCwgMywgMjMwLCAyNDAsIDgsIDMsIDIzMCwgMjQ4LCA4LCAzLCAKKyAgICAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDIsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyNDAsIDE4NywgOCwgMywgMjQwLCAxODYsIAorICAgIDgsIDMsIDI0MCwgMTkzLCA4LCAzLCAyNDAsIDE4OCwgOCwgMywgMjQwLCAxOTAsIDgsIDMsIDI0MCwgMTg5LCA4LCAzLCAKKyAgICAyNDAsIDE5MiwgOCwgMywgMjQwLCAxOTEsIDgsIDMsIDI0MCwgMTk4LCA4LCAzLCAyNDAsIDE5NywgOCwgMywgMjQwLCAyMDAsIAorICAgIDgsIDMsIDI0MCwgMTk5LCA4LCAzLCAyNDAsIDE3OSwgOCwgMywgMjQwLCAxNzgsIDgsIDMsIDI0MCwgMTgxLCA4LCAzLCAKKyAgICAyNDAsIDE4MCwgOCwgMywgMjQwLCAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIAorICAgIDgsIDMsIDI0MCwgMTk0LCA4LCAzLCAyNDAsIDE5NiwgOCwgMywgMjQwLCAxOTUsIDgsIDMsIDIyOSwgMjksIDgsIDMsIDIyOSwgCisgICAgMzEsIDgsIDMsIDIyOSwgMzAsIDgsIDMsIDIyOSwgNzIsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOSwgODIsIDgsIDMsIAorICAgIDIyOSwgNzUsIDgsIDMsIDIyOCwgMjQ4LCA4LCAzLCAyMjgsIDI0NywgOCwgMywgMjI4LCAyNDksIDgsIDMsIDIyOSwgMSwgOCwgCisgICAgMywgMjI4LCAyNTQsIDgsIDMsIDIyOSwgOSwgOCwgMywgMjI5LCAzLCA4LCAzLCAyMjksIDYzLCA4LCAzLCAyMjksIDY5LCA4LCAKKyAgICAzLCAyMjksIDY1LCA4LCAzLCAyNDEsIDE2MywgOCwgMywgMjQxLCAxNzMsIDgsIDMsIDI0MSwgMTgyLCA4LCAzLCAyNDIsIDIsIAorICAgIDgsIDMsIDI0MSwgMjUwLCA4LCAzLCAxNjIsIDgsIDMsIDI0MiwgMTMsIDgsIDMsIDI0MCwgMjEzLCA4LCAzLCAyNDAsIDIxMiwgCisgICAgOCwgMywgMjQwLCAyMTUsIDgsIDMsIDI0MCwgMjE0LCA4LCAzLCAyNDAsIDI0OSwgOCwgMywgMjQwLCAyNDAsIDgsIDMsIAorICAgIDI0MSwgNzUsIDgsIDMsIDI0MSwgNTQsIDgsIDMsIDI0MSwgMjAxLCA4LCAzLCAyNDEsIDI0NSwgOCwgMywgMjQxLCAyMTMsIAorICAgIDgsIDMsIDIxMiwgNDMsIDgsIDMsIDIxMiwgMjgsIDgsIDMsIDIxMiwgNjUsIDgsIDMsIDIxMiwgNTEsIDgsIDMsIDIxMSwgCisgICAgMTg1LCA4LCAzLCAyMTEsIDE4NywgOCwgMywgMjExLCAxODYsIDgsIDMsIDIxMSwgMjAzLCA4LCAzLCAyMTEsIDIyNywgOCwgCisgICAgMywgMjExLCAyMTAsIDgsIDMsIDIxMiwgNSwgOCwgMywgMjEyLCAyMiwgOCwgMywgMjEyLCAxMCwgOCwgMywgMjEwLCAzMCwgCisgICAgOCwgMywgMjEwLCAyOSwgOCwgMywgMjEwLCA0NCwgOCwgMywgMjEwLCAzMiwgOCwgMywgMjEwLCAzNywgOCwgMywgMjEwLCAKKyAgICAzOSwgOCwgMywgMjEwLCAzOCwgOCwgMywgMjEwLCAxMDIsIDgsIDMsIDIxMCwgOTksIDgsIDMsIDIxMCwgMTE2LCA4LCAzLCAKKyAgICAyMTAsIDEwNSwgOCwgMywgMjEwLCA2LCA4LCAzLCAyMTAsIDgsIDgsIDMsIDIxMCwgNywgOCwgMywgMjEwLCAxOSwgOCwgMywgCisgICAgMjEwLCAxOCwgOCwgMywgMjEwLCAyMywgOCwgMywgMjEwLCAyMCwgOCwgMywgMjEwLCA4NCwgOCwgMywgMjEwLCA5NCwgOCwgCisgICAgMywgMjEwLCA4OCwgOCwgMywgMjEwLCAyLCA4LCAzLCAyMTAsIDEsIDgsIDMsIDIxMCwgMTMsIDgsIDMsIDIxMCwgNSwgOCwgCisgICAgMywgMjEwLCAzLCA4LCAzLCAyMTAsIDQsIDgsIDMsIDIwOSwgMjQ1LCA4LCAzLCAyMDksIDI0NCwgOCwgMywgMjA5LCAyNTAsIAorICAgIDgsIDMsIDIwOSwgMjQ4LCA4LCAzLCAyMDksIDI0NiwgOCwgMywgMjA5LCAyNDcsIDgsIDMsIDI1MCwgMzYsIDgsIDMsIDI1MCwgCisgICAgMzIsIDgsIDMsIDI1MCwgNTksIDgsIDMsIDI1MCwgNDUsIDgsIDMsIDI1MCwgNTYsIDgsIDMsIDI1MCwgNTAsIDgsIDMsIAorICAgIDI1MCwgNTgsIDgsIDMsIDI1MCwgNTcsIDgsIDMsIDI1MCwgMjMyLCA4LCAzLCAyNTAsIDIyNSwgOCwgMywgMjUxLCA0MSwgOCwgCisgICAgMywgMjUxLCAzLCA4LCAzLCAyNDksIDExMiwgOCwgMywgMjQ5LCAxMTQsIDgsIDMsIDI0OSwgMTEzLCA4LCAzLCAyNDksIAorICAgIDE2MSwgOCwgMywgMjQ5LCAxNTIsIDgsIDMsIDI0OSwgMjQ2LCA4LCAzLCAyNDksIDE3NywgOCwgMywgMjUwLCAxNjgsIDgsIAorICAgIDMsIDI1MCwgMTk4LCA4LCAzLCAyNTAsIDE3MywgOCwgMywgMjQ5LCA5MiwgOCwgMywgMjQ5LCA5MCwgOCwgMywgMjQ5LCAKKyAgICAxMjAsIDgsIDMsIDI0OSwgMTEwLCA4LCAzLCAyNDksIDk3LCA4LCAzLCAyNDksIDEwOSwgOCwgMywgMjQ5LCA3MSwgOCwgMywgCisgICAgMjQ5LCA3MCwgOCwgMywgMjQ5LCA4MSwgOCwgMywgMjQ5LCA3NywgOCwgMywgMjQ5LCA3MiwgOCwgMywgMjQ5LCA3NCwgOCwgCisgICAgMywgMjA5LCAyMjgsIDgsIDMsIDIwOSwgMjI3LCA4LCAzLCAyMDksIDIzNCwgOCwgMywgMjA5LCAyMjksIDgsIDMsIDIwOSwgCisgICAgMjMxLCA4LCAzLCAyMDksIDIzMCwgOCwgMywgMjA5LCAyMzMsIDgsIDMsIDIwOSwgMjMyLCA4LCAzLCAyMDksIDI0MCwgOCwgCisgICAgMywgMjA5LCAyMzksIDgsIDMsIDIwOSwgMjQzLCA4LCAzLCAyMDksIDI0MSwgOCwgMywgMjA5LCAyMjQsIDgsIDMsIDIwOSwgCisgICAgMjI2LCA4LCAzLCAyMDksIDIyNSwgOCwgMywgMjA5LCAyMzUsIDgsIDMsIDIwOSwgMjM4LCA4LCAzLCAyMDksIDIzNiwgOCwgCisgICAgMywgMjA5LCAyMTcsIDgsIDMsIDIwOSwgMjIxLCA4LCAzLCAyMDksIDIyMCwgOCwgMywgMjA5LCAyMTgsIDgsIDMsIDIwOSwgCisgICAgMjE5LCA4LCAzLCAyMDksIDIxMSwgOCwgMywgMjA5LCAyMTAsIDgsIDMsIDIwOSwgMjE2LCA4LCAzLCAyMDksIDIxNCwgOCwgCisgICAgMywgMjA5LCAyMTIsIDgsIDMsIDIwOSwgMjEzLCA4LCAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgCisgICAgMTEzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMTAsIDgsIDMsIDIyNywgMTEyLCA4LCAzLCAyMjcsIDExMSwgOCwgCisgICAgMywgMjI3LCAxMTgsIDgsIDMsIDIyNywgMTE3LCA4LCAzLCAyMjcsIDEyMSwgOCwgMywgMjI3LCAxMjAsIDgsIDMsIDIyNywgCisgICAgMTAxLCA4LCAzLCAyMjcsIDEwMiwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAzLCAyMjcsIDExNCwgOCwgCisgICAgMywgMjI3LCAxMTYsIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgMTA0LCA4LCAzLCAyMjcsIDEwMCwgOCwgMywgMjI3LCAKKyAgICA5NywgOCwgMywgMjI3LCA5OCwgOCwgMywgMjI3LCA5MSwgOCwgMywgMjI3LCA5MCwgOCwgMywgMjI3LCA5NSwgOCwgMywgCisgICAgMjI3LCA5NCwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCA5MywgOCwgMywgMjE5LCAxMjksIDgsIDMsIDE5NSwgOCwgMywgCisgICAgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMTMyLCA4LCAzLCAyMTksIDE4NSwgOCwgMywgMjE5LCAxODgsIDgsIDMsIDIxOSwgMTg2LCAKKyAgICA4LCAzLCAyMjEsIDIyOCwgOCwgMywgMjIxLCAyMTYsIDgsIDMsIDIwNiwgOCwgMywgMjIxLCAyMzYsIDgsIDMsIDIxOCwgMjksIAorICAgIDgsIDMsIDIxOCwgMzEsIDgsIDMsIDIxOCwgMzAsIDgsIDMsIDIxOSwgMzYsIDgsIDMsIDIxOSwgMjUsIDgsIDMsIDIxOSwgCisgICAgNjAsIDgsIDMsIDIxOSwgNDAsIDgsIDMsIDIyMCwgMTE2LCA4LCAzLCAyMjEsIDE4MywgOCwgMywgMjIwLCAxNDEsIDgsIDMsIAorICAgIDIxOCwgNiwgOCwgMywgMjE4LCA0LCA4LCAzLCAyMTgsIDg0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDEwLCA4LCAzLCAKKyAgICAyMTgsIDE4LCA4LCAzLCAyMTcsIDE2NywgOCwgMywgMjE3LCAxNjYsIDgsIDMsIDIxNywgMjMzLCA4LCAzLCAyMTcsIDE3NCwgCisgICAgOCwgMywgMjE3LCAxNjksIDgsIDMsIDIxNywgMTczLCA4LCAzLCAyMTgsIDE4OCwgOCwgMywgMjE4LCAxODcsIDgsIDMsIAorICAgIDIxOCwgMTk0LCA4LCAzLCAyMTgsIDE4OSwgOCwgMywgMjE4LCAxOTEsIDgsIDMsIDIxOCwgMTkzLCA4LCAzLCAyMTgsIDE5MiwgCisgICAgOCwgMywgMjE4LCAyMDIsIDgsIDMsIDIxOCwgMjAwLCA4LCAzLCAyMTgsIDIyNSwgOCwgMywgMjE4LCAyMDMsIDgsIDMsIAorICAgIDIxOCwgMTgzLCA4LCAzLCAyMTgsIDE4MiwgOCwgMywgMjE4LCAxODYsIDgsIDMsIDIxOCwgMTg0LCA4LCAzLCAyMTgsIDE5NiwgCisgICAgOCwgMywgMjE4LCAxOTksIDgsIDMsIDIxOCwgMTk3LCA4LCAzLCAyMTgsIDE3OSwgOCwgMywgMjE4LCAxNzcsIDgsIDMsIAorICAgIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxNzIsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAyMTgsIDE3NiwgCisgICAgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTczLCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCAKKyAgICA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgCisgICAgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgCisgICAgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgCisgICAgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCAKKyAgICA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgCisgICAgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgMTQxLCA4LCAzLCAyNTAsIDE2NSwgCisgICAgOCwgMywgMjUwLCAxNTIsIDgsIDMsIDI1MCwgNzMsIDgsIDMsIDI1MCwgNzIsIDgsIDMsIDI1MCwgNzUsIDgsIDMsIDI1MCwgCisgICAgNzQsIDgsIDMsIDI1MCwgODcsIDgsIDMsIDI1MCwgODYsIDgsIDMsIDI1MCwgOTQsIDgsIDMsIDI1MCwgODksIDgsIDMsIAorICAgIDI1MCwgMTIzLCA4LCAzLCAyNTAsIDEyMSwgOCwgMywgMjUwLCAxMzksIDgsIDMsIDI1MCwgMTI5LCA4LCAzLCAyNTAsIDY3LCAKKyAgICA4LCAzLCAyNTAsIDc3LCA4LCAzLCAyNTAsIDcxLCA4LCAzLCAyNTAsIDY4LCA4LCAzLCAyNTAsIDcwLCA4LCAzLCAyNTAsIAorICAgIDYxLCA4LCAzLCAyNTAsIDYwLCA4LCAzLCAyNTAsIDY1LCA4LCAzLCAyNTAsIDY0LCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAKKyAgICAyNTAsIDYzLCA4LCAzLCAyMjIsIDE3NywgOCwgMywgMjIyLCAxODEsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIDE2MSwgCisgICAgOCwgMywgMjIyLCAxNjQsIDgsIDMsIDIyMiwgMTYzLCA4LCAzLCAyMjIsIDE2NywgOCwgMywgMjIyLCAxNjUsIDgsIDMsIAorICAgIDIyMiwgMTcxLCA4LCAzLCAyMjIsIDE3MCwgOCwgMywgMjIyLCAxNzYsIDgsIDMsIDIyMiwgMTcyLCA4LCAzLCAyMjIsIDE1NiwgCisgICAgOCwgMywgMjIyLCAxNTQsIDgsIDMsIDIyMiwgMTYyLCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNTcsIDgsIDMsIAorICAgIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE0OSwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTUzLCA4LCAzLCAyMjIsIDE1MiwgCisgICAgOCwgMywgMjIyLCAxNTAsIDgsIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjgsIDM5LCA4LCAzLCAyMjgsIDM4LCA4LCAzLCAyMjgsIAorICAgIDQxLCA4LCAzLCAyMjgsIDQwLCA4LCAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDMyLCA4LCAzLCAKKyAgICAyMjgsIDM1LCA4LCAzLCAyMjgsIDM0LCA4LCAzLCAyMjgsIDM3LCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDI2LCA4LCAKKyAgICAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDI4LCAKKyAgICA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDE5LCA4LCAzLCAyMjgsIDI0LCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIAorICAgIDIxLCA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjAsIDc0LCA4LCAzLCAyMjAsIDY5LCA4LCAzLCAyMjAsIDEwNCwgOCwgMywgCisgICAgMjIwLCA4NSwgOCwgMywgMjE5LCAyMTcsIDgsIDMsIDIxOSwgMjE5LCA4LCAzLCAyMTksIDIxOCwgOCwgMywgMjE5LCAyMzgsIAorICAgIDgsIDMsIDIxOSwgMjM1LCA4LCAzLCAyMjAsIDksIDgsIDMsIDIyMCwgMCwgOCwgMywgMjIwLCA0NCwgOCwgMywgMjIwLCAzNywgCisgICAgOCwgMywgMjIwLCA2NSwgOCwgMywgMjIwLCA1MiwgOCwgMywgMjE5LCAyMTMsIDgsIDMsIDIxOSwgMjExLCA4LCAzLCAyMTksIAorICAgIDIyNywgOCwgMywgMjE5LCAyMTYsIDgsIDMsIDIxOSwgMjE0LCA4LCAzLCAyMTksIDIxNSwgOCwgMywgMjE5LCAxOTYsIDgsIAorICAgIDMsIDIxOSwgMTk1LCA4LCAzLCAyMTksIDIwMiwgOCwgMywgMjE5LCAxOTksIDgsIDMsIDIxOSwgMTk3LCA4LCAzLCAyMTksIAorICAgIDE5OCwgOCwgMywgMjIzLCAxNDQsIDgsIDMsIDIyMywgMTM4LCA4LCAzLCAyMDUsIDgsIDMsIDIyMywgMTUwLCA4LCAzLCAKKyAgICAyMjIsIDEyMiwgOCwgMywgMjIyLCAxMjQsIDgsIDMsIDIyMiwgMTIzLCA4LCAzLCAyMjIsIDE5MCwgOCwgMywgMjIyLCAxODMsIAorICAgIDgsIDMsIDIyMiwgMjEzLCA4LCAzLCAyMjIsIDE5NCwgOCwgMywgMjIzLCA0NiwgOCwgMywgMjIzLCAxMzEsIDgsIDMsIDIyMywgCisgICAgODQsIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExMiwgOCwgMywgMjIyLCAxNDIsIDgsIDMsIDIyMiwgMTIxLCA4LCAzLCAKKyAgICAyMjIsIDExNywgOCwgMywgMjIyLCAxMTgsIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIyMiwgOTYsIDgsIDMsIDIyMiwgMTAyLCAKKyAgICA4LCAzLCAyMjIsIDEwMCwgOCwgMywgMjIyLCA5OCwgOCwgMywgMjIyLCA5OSwgOCwgMywgMjM1LCAxMDQsIDgsIDMsIDIzNSwgCisgICAgMTAzLCA4LCAzLCAyMzUsIDExNCwgOCwgMywgMjM1LCAxMDUsIDgsIDMsIDIzNSwgMTEwLCA4LCAzLCAyMzUsIDEwOSwgOCwgCisgICAgMywgMjM1LCAxMTIsIDgsIDMsIDIzNSwgMTExLCA4LCAzLCAyMzUsIDQ3LCA4LCAzLCAyMzUsIDQ2LCA4LCAzLCAyMzUsIDQ5LCAKKyAgICA4LCAzLCAyMzUsIDQ4LCA4LCAzLCAyMzUsIDYyLCA4LCAzLCAyMzUsIDYwLCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIAorICAgIDY0LCA4LCAzLCAyMzUsIDQwLCA4LCAzLCAyMzUsIDM4LCA4LCAzLCAyMzUsIDU3LCA4LCAzLCAyMzUsIDQ1LCA4LCAzLCAKKyAgICAyMzUsIDQyLCA4LCAzLCAyMzUsIDQzLCA4LCAzLCAyMzUsIDMyLCA4LCAzLCAyMzUsIDMxLCA4LCAzLCAyMzUsIDM2LCA4LCAKKyAgICAzLCAyMzUsIDM1LCA4LCAzLCAyMzUsIDMzLCA4LCAzLCAyMzUsIDM0LCA4LCAzLCAyMjQsIDQ5LCA4LCAzLCAyMjQsIDQ3LCAKKyAgICA4LCAzLCAyMjQsIDU2LCA4LCAzLCAyMjQsIDUwLCA4LCAzLCAyMjQsIDUzLCA4LCAzLCAyMjQsIDUyLCA4LCAzLCAyMjQsIAorICAgIDU1LCA4LCAzLCAyMjQsIDU0LCA4LCAzLCAyMjQsIDIsIDgsIDMsIDIyMywgMjU1LCA4LCAzLCAyMjQsIDQsIDgsIDMsIDIyNCwgCisgICAgMywgOCwgMywgMjI0LCAzNiwgOCwgMywgMjI0LCAzNSwgOCwgMywgMjI0LCA0NSwgOCwgMywgMjI0LCAzOSwgOCwgMywgMjIzLCAKKyAgICAyNTAsIDgsIDMsIDIyMywgMjQ2LCA4LCAzLCAyMjQsIDMzLCA4LCAzLCAyMjMsIDI1NCwgOCwgMywgMjIzLCAyNTIsIDgsIDMsIAorICAgIDIyMywgMjUzLCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjQwLCA4LCAzLCAyMjMsIDIzMywgCisgICAgOCwgMywgMjIzLCAyMzEsIDgsIDMsIDIyMywgMjMyLCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIAorICAgIDk5LCA4LCAzLCAyMzUsIDk0LCA4LCAzLCAyMzUsIDk2LCA4LCAzLCAyMzUsIDk1LCA4LCAzLCAyMzUsIDk4LCA4LCAzLCAKKyAgICAyMzUsIDk3LCA4LCAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDg1LCA4LCAzLCAyMzUsIDg5LCA4LCAKKyAgICAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDkwLCA4LCAzLCAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCAKKyAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIAorICAgIDc2LCA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAyMzUsIDc3LCA4LCAzLCAyMjgsIDE2NywgOCwgMywgCisgICAgMjI4LCAxNjYsIDgsIDMsIDIyOCwgMTc0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNzAsIDgsIDMsIDIyOCwgMTY5LCAKKyAgICA4LCAzLCAyMjgsIDE3MywgOCwgMywgMjI4LCAxNzEsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAyMjgsIDE1NywgOCwgMywgCisgICAgMjI4LCAxNjIsIDgsIDMsIDIyOCwgMTYxLCA4LCAzLCAyMjgsIDE2NSwgOCwgMywgMjI4LCAxNjMsIDgsIDMsIDIyOCwgMTUxLCAKKyAgICA4LCAzLCAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTUsIDgsIDMsIDIyOCwgMTUyLCA4LCAzLCAyMjgsIDE1MywgOCwgMywgCisgICAgMjI4LCAxNDYsIDgsIDMsIDIyOCwgMTQ1LCA4LCAzLCAyMjgsIDE1MCwgOCwgMywgMjI4LCAxNDksIDgsIDMsIDIyOCwgMTQ3LCAKKyAgICA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQwLCA4LCAzLCAyMjcsIDE1MiwgOCwgMywgCisgICAgMjI3LCAxNDUsIDgsIDMsIDIyNywgMTQ5LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNTEsIDgsIDMsIDIyNywgMTUwLCAKKyAgICA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMzAsIDgsIDMsIDIyNywgMTI5LCA4LCAzLCAyMjcsIDEzNCwgOCwgMywgCisgICAgMjI3LCAxMzMsIDgsIDMsIDIyNywgMTM4LCA4LCAzLCAyMjcsIDEzNSwgOCwgMywgMjI3LCAxMjYsIDgsIDMsIDIyNywgMTI0LCAKKyAgICA4LCAzLCAyMjcsIDEzMiwgOCwgMywgMjI3LCAxMjcsIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgCisgICAgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCAKKyAgICA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgCisgICAgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCAKKyAgICA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgCisgICAgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIAorICAgIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgCisgICAgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgCisgICAgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgCisgICAgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgCisgICAgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgCisgICAgMzQsIDIyNCwgMzYsIDgsIDM0LCAyMzIsIDI0NywgOCwgMzQsIDIzNCwgNjcsIDgsIDM0LCAyMjcsIDE0NSwgOCwgMzQsIAorICAgIDI0OSwgNzcsIDgsIDM0LCAyMTgsIDE5NCwgOCwgMzQsIDI0MywgMTksIDgsIDM0LCAyNDMsIDUxLCA4LCAzNCwgMjMwLCAKKyAgICAyMzUsIDgsIDM0LCAyNDAsIDE4NywgOCwgMzQsIDIzMiwgNjEsIDgsIDM0LCAyNTIsIDkxLCA4LCAzNCwgMjMwLCAxMzEsIDgsIAorICAgIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgMTI0LCA4LCAzNCwgMjQwLCAxODEsIDgsIDM0LCAyMTcsIDQ3LCA4LCAzNCwgCisgICAgMjQzLCAxNDIsIDgsIDM0LCAyMTAsIDUsIDgsIDM0LCAyNDksIDcxLCA4LCAzNCwgMjQ4LCAxMDMsIDgsIDM0LCAyNTEsIAorICAgIDEwNiwgOCwgMzQsIDI0MywgMTUsIDgsIDM0LCAyMjcsIDEzNSwgOCwgMzQsIDIxNSwgMTE5LCA4LCAzNCwgMjI2LCAxNzksIAorICAgIDgsIDM0LCAyMzUsIDgwLCA4LCAzNCwgMjEwLCAxOSwgOCwgMzQsIDIyNCwgMTAzLCA4LCAzNCwgMjQxLCAxMTUsIDgsIDM0LCAKKyAgICAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgMjE5LCAyMDIsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgCisgICAgMTE2LCA4LCAzNCwgMjM1LCA3NCwgOCwgMzQsIDIyNywgMTAwLCA4LCAzNCwgMjM1LCA3OCwgOCwgMzQsIDI0MiwgMTYxLCA4LCAKKyAgICAzNCwgMjM1LCA5OCwgOCwgMzQsIDIxMSwgMjI3LCA4LCAzNCwgMjQ2LCA4NiwgOCwgMzQsIDIxOSwgMjE1LCA4LCAzNCwgCisgICAgMjMyLCAyNDIsIDgsIDM0LCAyNDksIDgxLCA4LCAzNCwgMjQ5LCAxMTMsIDgsIDM0LCAyNTAsIDQ1LCA4LCAzNCwgMjQwLCAKKyAgICAxODQsIDgsIDM0LCAyMjAsIDc0LCA4LCAzNCwgMjEwLCA0LCA4LCAzNCwgMjIwLCAwLCA4LCAzNCwgMjUwLCAxMzksIDgsIAorICAgIDM0LCAyMDksIDIzMSwgOCwgMzQsIDIyOSwgMTc4LCA4LCAzNCwgMjM0LCAxODgsIDIzMiwgMjAyLCAxLCAyNTIsIDE5OSwgCisgICAgMjMyLCAyMDIsIDEsIDE5MSwgMjMyLCAyMDIsIDEsIDIyNSwgMTUwLCAyMzIsIDIwMiwgMSwgMjQ4LCAyMjksIDIzMiwgMjAyLCAKKyAgICAxLCAyMTcsIDEwNiwgMjMyLCAyMDIsIDEsIDIxNiwgMjA5LCAyMzIsIDIwMiwgMSwgMjQzLCAxNDIsIDIzMiwgMjAyLCAxLCAKKyAgICAxNzYsIDIzMiwgMjAyLCAxLCAyMzQsIDEzOCwgMjMyLCAyMDIsIDEsIDIzNSwgMTQ3LCAyMzIsIDIwMiwgMSwgMjUxLCA0MSwgCisgICAgMjMyLCAyMDIsIDEsIDI1MCwgMTY1LCAyMzIsIDIwMiwgMSwgMjQ2LCA0NiwgMjMyLCAyMDIsIDEsIDIxNSwgMTg0LCAyMzIsIAorICAgIDIwMiwgMSwgMjE1LCAxNzYsIDIzMiwgMjAyLCAxLCAxODYsIDIzMiwgMjAyLCAxLCAxOTgsIDIzMiwgMjAyLCAxLCAyMzMsIAorICAgIDE0MSwgMjMyLCAyMDIsIDEsIDIwNiwgMjMyLCAyMDIsIDEsIDIxMCwgODIsIDIzMiwgMjAyLCAxLCAyMTAsIDExNiwgMjMyLCAKKyAgICAyMDIsIDEsIDIyOSwgODIsIDIzMiwgMjAyLCAxLCAxNjIsIDIzMiwgMjAyLCAxLCAyMTEsIDE2NSwgMjMyLCAyMDIsIDEsIAorICAgIDI0MSwgMTk2LCAyMzIsIDIwMiwgMSwgMjQ0LCAyMDQsIDIzMiwgMjAyLCAxLCAyMTIsIDY1LCAyMzIsIDIwMiwgMSwgMjIwLCAKKyAgICAxMDQsIDIzMiwgMjAyLCAxLCAxOTIsIDIzMiwgMjAyLCAxLCAyNDMsIDAsIDIzMiwgMjAyLCAxLCA2MSwgMjMyLCAyMDIsIDEsIAorICAgIDI1NCwgMjUyLCAyMzIsIDIwMiwgMSwgNzYsIDIzMiwgMjAyLCAxLCAyNDUsIDYzLCAyMzIsIDIwMiwgMSwgNzQsIDIzMiwgCisgICAgMjAyLCAxLCA3OCwgMjMyLCAyMDIsIDEsIDY5LCAyMzIsIDIwMiwgMSwgMjE0LCAyMTQsIDIzMiwgMjAyLCAxLCAyMTQsIAorICAgIDIwOCwgMjMyLCAyMDIsIDEsIDIyNiwgMjM4LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyMTYsIDExOCwgMjMyLCAKKyAgICAyMDIsIDEsIDEzOCwgMjI5LCAyMzQsIDIyNSwgMTksIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDI0OSwgODAsIDIzMiwgCisgICAgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDI1MSwgMjEzLCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAxOTgsIDIzMiwgMjAyLCAKKyAgICAxLCAxMzgsIDIzMCwgMzcsIDIzNSwgMTIxLCAyMzIsIDIwMiwgMjI0LCAxNDQsIDI0OSwgMjI3LCAyMzIsIDIwMiwgMjI0LCAKKyAgICAxNDQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDMsIDI0NSwgMjE3LCA0MSwgMywgMjQ1LCAyMTMsIDQxLCAzLCAyNDEsIAorICAgIDIyNywgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgMjI1LCAyMTQsIDQxLCAzLCAyNTIsIDIxLCA0MSwgCisgICAgMywgMjUyLCA3NCwgNDEsIDMsIDIzMSwgMTIxLCA0MSwgMywgMjMzLCAyNTMsIDQxLCAzLCAyMzEsIDExLCA0MSwgMywgMjQzLCAKKyAgICA4MiwgNDEsIDMsIDI0NCwgMTU1LCA0MSwgMywgMjEzLCAyNTAsIDQxLCAzLCAyMTcsIDEyLCA0MSwgMywgMjE2LCAxOTUsIAorICAgIDQxLCAzLCAyNDgsIDI0LCA0MSwgMywgMjQ4LCAyMSwgNDEsIDMsIDIzMywgNTYsIDQxLCAzLCAyMjMsIDExMSwgNDEsIDMsIAorICAgIDI0OCwgODUsIDQxLCAzLCAyMjksIDE0NCwgNDEsIDMsIDIyMSwgMTcyLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgCisgICAgOTIsIDQxLCAzLCAyMTAsIDczLCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEzMCwgNDEsIDMsIDIyOCwgMTgxLCAKKyAgICA0MSwgMywgMjExLCA0NCwgNDEsIDMsIDIzNCwgMTg3LCA0MSwgMywgMjI5LCA1NiwgNDEsIDMsIDI0MywgNjIsIDQxLCAzLCAKKyAgICAyMzEsIDg1LCA0MSwgMywgMjI5LCAxMDgsIDQxLCAzLCAyMjcsIDE1OSwgNDEsIDMsIDc0LCA0MSwgMywgMjM2LCA2LCA0MSwgCisgICAgMywgMjQxLCAxODcsIDQxLCAzLCAyNDEsIDE2NywgNDEsIDMsIDIxMSwgMjUwLCA0MSwgMywgMjExLCAyNDEsIDQxLCAzLCAKKyAgICAyMjUsIDExMSwgNDEsIDMsIDI1MiwgMTksIDQxLCAzLCAyNTIsIDE0LCA0MSwgMywgMjMxLCAxMTQsIDQxLCAzLCAyMzMsIAorICAgIDI1MCwgNDEsIDMsIDIzMSwgOCwgNDEsIDMsIDI0MywgNzgsIDQxLCAzLCAyNDQsIDEyOSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgCisgICAgMywgMjE2LCAxMTgsIDQxLCAzLCAyMTYsIDE3NiwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDIwLCA0MSwgMywgMjMyLCAKKyAgICAyNDcsIDQxLCAzLCAyMjMsIDM4LCA0MSwgMywgMjQ4LCAxMSwgNDEsIDMsIDIyOSwgMTM4LCA0MSwgMywgMjE5LCAxOTMsIAorICAgIDQxLCAzLCAyMjAsIDM0LCA0MSwgMywgMjEwLCA0NCwgNDEsIDMsIDIxMCwgNjksIDQxLCAzLCAyNTAsIDU5LCA0MSwgMywgCisgICAgMjM1LCAxMTQsIDQxLCAzLCAyMjgsIDE3NCwgNDEsIDMsIDIxMSwgOCwgNDEsIDMsIDIzNCwgOTgsIDQxLCAzLCAyMjksIDQ4LCAKKyAgICA0MSwgMywgMjQyLCAyMjEsIDQxLCAzLCAyMzAsIDIzNSwgNDEsIDMsIDIyOCwgMjM4LCA0MSwgMywgMjI3LCAxNTIsIDQxLCAKKyAgICAzLCA2MSwgNDEsIDMsIDI1NCwgMTMxLCA0MSwgMywgMjI5LCA3NywgNDEsIDMsIDE2MiwgNDEsIDMsIDI0MiwgMjUsIDQxLCAKKyAgICAzLCAyMTIsIDY1LCA0MSwgMywgMjEyLCA1NSwgNDEsIDMsIDE5MSwgNDEsIDMsIDI1MiwgMjYsIDQxLCAzLCAyNTIsIDE5OSwgCisgICAgNDEsIDMsIDIzMSwgMTI5LCA0MSwgMywgMjM0LCAxLCA0MSwgMywgMjM0LCAwLCA0MSwgMywgMjMxLCAxNSwgNDEsIDMsIAorICAgIDI0MywgODYsIDQxLCAzLCAyNDQsIDIwNCwgNDEsIDMsIDIxNCwgMjcsIDQxLCAzLCAyMTcsIDEwNiwgNDEsIDMsIDIxNiwgCisgICAgMjA5LCA0MSwgMywgMjQ4LCAzMywgNDEsIDMsIDI0OCwgMjMsIDQxLCAzLCAyMzMsIDE0MSwgNDEsIDMsIDIwNSwgNDEsIDMsIAorICAgIDI0OCwgMjI5LCA0MSwgMywgMjI5LCAxNTMsIDQxLCAzLCAyMDYsIDQxLCAzLCAyMjAsIDEwNCwgNDEsIDMsIDIxMCwgMTE2LCAKKyAgICA0MSwgMywgMjEwLCA4MiwgNDEsIDMsIDI1MSwgNDEsIDQxLCAzLCAyMzUsIDE0NywgNDEsIDMsIDIyOCwgMTkwLCA0MSwgMywgCisgICAgMTkyLCA0MSwgMywgMTc2LCA0MSwgMywgMjM0LCAyNDAsIDQxLCAzLCAyMjksIDYxLCA0MSwgMywgMjQzLCAxNDIsIDQxLCAzLCAKKyAgICAxODYsIDQxLCAzLCAxOTgsIDQxLCAzLCAyMjcsIDE2OSwgNDEsIDMsIDIyNiwgMTg3LCA0MSwgMywgMjI2LCAxODMsIDQxLCAKKyAgICAzLCAyNDEsIDYwLCA0MSwgMywgMjExLCAyMTUsIDQxLCAzLCAyMTEsIDIxMSwgNDEsIDMsIDIyNCwgMjUyLCA0MSwgMywgCisgICAgMjUyLCAxNywgNDEsIDMsIDI1MSwgMjAxLCA0MSwgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0OCwgNDEsIDMsIDIzMSwgCisgICAgNCwgNDEsIDMsIDI0MywgNzQsIDQxLCAzLCAyNDQsIDQyLCA0MSwgMywgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE4LCA0MSwgCisgICAgMywgMjE2LCAxNTQsIDQxLCAzLCAyNDgsIDE0LCA0MSwgMywgMjQ4LCAxOCwgNDEsIDMsIDIzMiwgMTMzLCA0MSwgMywgMjIyLCAKKyAgICAxOTksIDQxLCAzLCAyNDcsIDEzMywgNDEsIDMsIDIyOSwgMTI1LCA0MSwgMywgMjE5LCA0MiwgNDEsIDMsIDIyMCwgMywgNDEsIAorICAgIDMsIDIxMCwgMjEsIDQxLCAzLCAyMTAsIDY2LCA0MSwgMywgMjQ5LCAxODIsIDQxLCAzLCAyMzUsIDY1LCA0MSwgMywgMjI4LCAKKyAgICAxNjQsIDQxLCAzLCAyMTAsIDIyOSwgNDEsIDMsIDIzNCwgMTYsIDQxLCAzLCAyMjksIDQ2LCA0MSwgMywgMjQyLCAxNzEsIAorICAgIDQxLCAzLCAyMzAsIDEzNywgNDEsIDMsIDIyOCwgNjksIDQxLCAzLCAyMjcsIDEzNiwgNDEsIDMsIDY5LCA0MSwgMywgMjE0LCAKKyAgICAxOTAsIDQxLCAzLCAyNDAsIDIyOSwgNDEsIDMsIDI0MCwgMjE5LCA0MSwgMywgMjExLCAxOTUsIDQxLCAzLCAyMTEsIDE4OSwgCisgICAgNDEsIDMsIDIyNCwgMTUzLCA0MSwgMywgMjUyLCAxNiwgNDEsIDMsIDI1MSwgMTMzLCA0MSwgMywgMjMxLCAxMDgsIDQxLCAzLCAKKyAgICAyMzMsIDI0NiwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzMsIDQxLCAzLCAyNDMsIDI0MSwgNDEsIDMsIDIxMiwgCisgICAgMTE2LCA0MSwgMywgMjE1LCAxMTksIDQxLCAzLCAyMTYsIDEzNywgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyNDgsIDE3LCAKKyAgICA0MSwgMywgMjMyLCAxMDMsIDQxLCAzLCAyMjIsIDE0MiwgNDEsIDMsIDI0NiwgODYsIDQxLCAzLCAyMjksIDEyMCwgNDEsIDMsIAorICAgIDIxOCwgODQsIDQxLCAzLCAyMTksIDIyNywgNDEsIDMsIDIxMCwgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAKKyAgICAxMjAsIDQxLCAzLCAyMzUsIDU3LCA0MSwgMywgMjI4LCAxNjAsIDQxLCAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjIzLCAKKyAgICA0MSwgMywgMjI5LCA0NSwgNDEsIDMsIDI0MiwgMTIwLCA0MSwgMywgMjMwLCAxMDcsIDQxLCAzLCAyMjcsIDI0MiwgNDEsIDMsIAorICAgIDIyNywgMTMyLCA0MSwgMywgNzgsIDQxLCAzLCAyMjYsIDIwMCwgNDEsIDMsIDIyOSwgNSwgNDEsIDMsIDI0MSwgNzUsIDQxLCAKKyAgICAzLCAyNDEsIDYzLCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTksIDQxLCAzLCAyNTIsIAorICAgIDE4LCA0MSwgMywgMjUxLCAyMTMsIDQxLCAzLCAyMzEsIDExMCwgNDEsIDMsIDIzMywgMjQ5LCA0MSwgMywgMjMxLCA2LCA0MSwgCisgICAgMywgMjQzLCA3NiwgNDEsIDMsIDI0MywgNzUsIDQxLCAzLCAyNDQsIDUxLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTIsIAorICAgIDQxLCAzLCAyMTYsIDE1NywgNDEsIDMsIDI0OCwgMTUsIDQxLCAzLCAyNDgsIDE5LCA0MSwgMywgMjMyLCAxNjIsIDQxLCAzLCAKKyAgICAyMjIsIDIxMywgNDEsIDMsIDI0NywgMTUzLCA0MSwgMywgMjI5LCAxMjksIDQxLCAzLCAyMTksIDYwLCA0MSwgMywgMjIwLCAKKyAgICA5LCA0MSwgMywgMjEwLCAyMywgNDEsIDMsIDIxMCwgNjcsIDQxLCAzLCAyNDksIDI0NiwgNDEsIDMsIDIzNSwgNzQsIDQxLCAKKyAgICAzLCAyMjgsIDE2NSwgNDEsIDMsIDIxMCwgMjQ0LCA0MSwgMywgMjM0LCAzNCwgNDEsIDMsIDIyOSwgNDcsIDQxLCAzLCAyNDIsIAorICAgIDE4MSwgNDEsIDMsIDIzMCwgMTY2LCA0MSwgMywgMjI4LCA3OSwgNDEsIDMsIDIyNywgMTM4LCA0MSwgMywgNzYsIDQxLCAzLCAKKyAgICAyNDUsIDE1OCwgNDEsIDMsIDIyOSwgNjYsIDQxLCAzLCAyNDEsIDI0NSwgNDEsIDMsIDI0MSwgMjE2LCA0MSwgMywgMjEyLCAKKyAgICAyMiwgNDEsIDMsIDIxMiwgMTIsIDQxLCAzLCAyMjUsIDIyNCwgNDEsIDMsIDI1MiwgMjIsIDQxLCAzLCAyNTIsIDgzLCA0MSwgCisgICAgMywgMjMxLCAxMjIsIDQxLCAzLCAyMzMsIDI1NCwgNDEsIDMsIDIzMywgMjUyLCA0MSwgMywgMjMxLCAxMiwgNDEsIDMsIAorICAgIDI0MywgODMsIDQxLCAzLCAyNDMsIDgxLCA0MSwgMywgMjQ0LCAxNjIsIDQxLCAzLCAyMTMsIDI1NSwgNDEsIDMsIDIxNywgCisgICAgMjMsIDQxLCAzLCAyMTYsIDE5NiwgNDEsIDMsIDI0OCwgMjUsIDQxLCAzLCAyNDgsIDIyLCA0MSwgMywgMjMzLCA2NCwgNDEsIAorICAgIDMsIDIyMywgMTMxLCA0MSwgMywgMjQ4LCA5OCwgNDEsIDMsIDIyOSwgMTQ1LCA0MSwgMywgMjIxLCAxODMsIDQxLCAzLCAKKyAgICAyMjAsIDY1LCA0MSwgMywgMjEwLCA5NCwgNDEsIDMsIDIxMCwgNzQsIDQxLCAzLCAyNTAsIDE5OCwgNDEsIDMsIDIzNSwgCisgICAgMTMyLCA0MSwgMywgMjI4LCAxODMsIDQxLCAzLCAyMTEsIDQ3LCA0MSwgMywgMjM0LCAxODgsIDQxLCAzLCAyMjksIDU3LCAKKyAgICA0MSwgMywgMjI5LCA1MywgNDEsIDMsIDI0MywgNjksIDQxLCAzLCAyNDMsIDU4LCA0MSwgMywgMjMxLCA5NiwgNDEsIDMsIAorICAgIDIyOSwgMTEyLCA0MSwgMywgMjI3LCAxNjAsIDQxLCAzLCAyMjksIDg0LCA0MSwgMywgMjMzLCAyOCwgNDEsIDI0OSwgMjI3LCAKKyAgICA0MSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0MSwgMjI0LCAxNiwgNzksIDQxLCAzLCAyMjksIDEyOCwgMjQ0LCAyMDQsIDQxLCAKKyAgICAzLCAyMjksIDEyOCwgMTc2LCA0MSwgMywgMjI5LCAxMjgsIDIxOSwgNDIsIDQxLCAxNiwgMjQ0LCAxNTIsIDQxLCAxNiwgCisgICAgMjM0LCAxODYsIDQxLCAxNiwgMjE2LCA4MiwgNDEsIDE2LCAyMjgsIDIxMywgNDEsIDE2LCAyNTIsIDE1NSwgNDEsIDE2LCAKKyAgICAyNDQsIDIwMywgNDEsIDE2LCAyMTcsIDEwMiwgNDEsIDE2LCAyNDgsIDE4NCwgNDEsIDE2LCAyNDcsIDEzMiwgNDEsIDE2LCAKKyAgICAyMzMsIDIxMiwgNDEsIDE2LCAyMTYsIDIyLCA0MSwgMTYsIDI0NywgMTUyLCA0MSwgMTYsIDIzNSwgNjYsIDQxLCAyMSwgCisgICAgMjEwLCA4NiwgNDEsIDIxLCAxMTEsIDQxLCAyMSwgMTA1LCA0MSwgMjEsIDE1OCwgNDEsIDIxLCAxNjEsIDQxLCAyMSwgMTkwLCAKKyAgICA0MSwgMjEsIDE5NSwgNDEsIDIxLCAxOTksIDQxLCAyMSwgMTk2LCA0MSwgMjEsIDIwMSwgNDEsIDMsIDIyOSwgMTI4LCAxODYsIAorICAgIDQxLCAzLCAyMjksIDEyOCwgMjQ3LCAxNTMsIDMzLCA2LCAxLCAyMTAsIDkwLCAzMywgNCwgMSwgMjEwLCA5MCwgMzMsIDYsIAorICAgIDEsIDI0NiwgNDIsIDMzLCA0LCAxLCAyNDYsIDQyLCAzMywgNiwgMSwgMjIzLCA1MiwgMjQ2LCA0NCwgMzMsIDQsIDEsIDIyMywgCisgICAgNTIsIDI0NiwgNDQsIDMzLCA2LCAxLCAyMzUsIDE5MiwgMzMsIDQsIDEsIDIzNSwgMTkyLCAzMywgNiwgMSwgMjQ3LCAxNjksIAorICAgIDMzLCA0LCAxLCAyNDcsIDE2OSwgMzMsIDYsIDEsIDIzMCwgMTQ1LCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIzMCwgMTQ1LCAKKyAgICAyMTQsIDIwNSwgMzMsIDYsIDEsIDI1MSwgMTQ0LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDI1MSwgMTQ0LCAyMjYsIDIwNSwgMzMsIAorICAgIDYsIDEsIDIyOSwgOTIsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNiwgMSwgMjExLCAyOCwgMiwgCisgICAgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNTIsIDE5MywgMjExLCAzMSwgMzMsIDYsIDEsIAorICAgIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNCwgMSwgMjM1LCAxOTAsIDIxMSwgNTksIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIAorICAgIDIxMiwgMzMsIDQsIDEsIDIyMywgNTIsIDIxMCwgMjEyLCAzMywgNiwgMSwgMjM1LCAxOTAsIDYxLCAzMywgNCwgMSwgMjM1LCAKKyAgICAxOTAsIDYxLCAzMywgNiwgMSwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTAsIDgsIDIzMiwgCisgICAgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MSwgMjIyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjIyLCAyMTAsIAorICAgIDE4MywgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAKKyAgICAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIxMCwgMjQ2LCAzMywgNCwgMSwgMjEwLCAyNDYsIDMzLCAKKyAgICA2LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDQsIDEsIDIyMywgNTIsIDIxNSwgMTc5LCAzMywgNiwgMSwgMjE5LCA1NCwgCisgICAgMjQ4LCA5OCwgMzMsIDQsIDEsIDIxOSwgNTQsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDQsIAorICAgIDEsIDIxOSwgNTQsIDI0NSwgMTgyLCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxNjcsIDMzLCA0LCAxLCAyMTksIDU0LCAKKyAgICAyNDUsIDE2NywgMzMsIDYsIDEsIDIzMCwgMTQ5LCA3OCwgMzMsIDQsIDEsIDIzMCwgMTQ5LCA3OCwgMzMsIDYsIDEsIDI1MSwgCisgICAgMjQ4LCA3OCwgMzMsIDQsIDEsIDI1MSwgMjQ4LCA3OCwgMzMsIDYsIDEsIDUyLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAKKyAgICA1MiwgMjMwLCAxNDksIDc4LCAzMywgMSwgMjMwLCA5MSwgNzgsIDM4LCAzMywgMjEyLCAxMDAsIDM4LCAzMywgMjE2LCAyNDksIAorICAgIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyNDAsIDIxOCwgMjMwLCAxOTYsIDUwLCAzOCwgMzMsIDIxNiwgMTQ5LCAyMzAsIDE5NiwgCisgICAgNTAsIDIxOSwgOTUsIDI1MywgMjI0LCAzOCwgMzMsIDEsIDIxNCwgMjAyLCAyMzYsIDY3LCAzOCwgMzMsIDEsIDc0LCAzOCwgCisgICAgMzMsIDEsIDIxMSwgOCwgMzgsIDMzLCAxLCA2OSwgMzgsIDMzLCAxLCAyNDIsIDEwLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAKKyAgICAzOCwgMzMsIDEsIDIxOSwgNTQsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjA1LCAzOCwgMzMsIDIzNCwgMTk4LCAzOCwgMzMsIAorICAgIDIyNSwgMjMxLCAzMywgMjM0LCAxOTgsIDMzLCAyMjUsIDIzMSwgMzMsIDYsIDEsIDI0NiwgNTQsIDMzLCA0LCAxLCAyNDYsIAorICAgIDU0LCAzMywgNiwgMSwgMjQ2LCAzNSwgMzMsIDQsIDEsIDI0NiwgMzUsIDMzLCA2LCAxLCAyMTAsIDUyLCAzMywgNCwgMSwgCisgICAgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjE0LCAzMywgNCwgMSwgMjUwLCAyMTQsIDMzLCA2LCAxLCAyNDYsIDMzLCAzMywgCisgICAgNCwgMSwgMjQ2LCAzMywgMzMsIDYsIDEsIDIxNywgMjQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyMTcsIDI0LCAyLCAKKyAgICAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MSwgCisgICAgMzMsIDQsIDEsIDIxNSwgMTYxLCAzMywgNiwgMSwgMjE1LCAxNjUsIDMzLCA0LCAxLCAyMTUsIDE2NSwgMzMsIDYsIDEsIAorICAgIDIxNywgMjksIDMzLCA0LCAxLCAyMTcsIDI5LCAzMywgNiwgMSwgMjQwLCAyMDUsIDMzLCA0LCAxLCAyNDAsIDIwNSwgMzMsIAorICAgIDYsIDEsIDIxOSwgMjA4LCAzMywgNCwgMSwgMjE5LCAyMDgsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDc2LCAyMCwgMSwgNjEsIAorICAgIDIwLCAxLCAxNzYsIDIwLCAxLCA2OSwgMjAsIDEsIDIzMywgMjIzLCAyMCwgMSwgMjQ1LCAyMTcsIDIwLCAxLCAyMjMsIDExMSwgCisgICAgMjAsIDEsIDIxNywgODcsIDIwLCAxLCA3OCwgMjAsIDEsIDIyNywgMTUyLCAyMCwgMSwgNzQsIDIwLCAxLCAyMzMsIDE0MSwgCisgICAgMjAsIDEsIDE5MSwgMjAsIDEsIDIyMiwgMjQyLCAyMCwgMSwgMjIzLCAzMiwgMjAsIDEsIDIzMywgNTUsIDIwLCAxLCAyMzEsIAorICAgIDg0LCAyMCwgMSwgMjE3LCAxMDIsIDIwLCAxLCAyMjksIDE1MSwgMjAsIDEsIDIyOCwgMTg4LCAyMCwgMSwgMTk0LCAyMCwgMSwgCisgICAgMjE4LCA1LCAyMCwgMSwgMjMwLCAxMDcsIDIwLCAxLCAyMjAsIDI5LCAyMCwgMSwgMjE5LCAxOTMsIDIwLCAxLCAyMjAsIDM5LCAKKyAgICAyMCwgMSwgMjIwLCAxMjUsIDIwLCAxLCAyMzMsIDE2MSwgMjAsIDEsIDIzNCwgMTYyLCAyMCwgMSwgMjI3LCAyMTMsIDIwLCAKKyAgICAxLCAyMjcsIDI0MiwgMjAsIDEsIDIyOCwgMTU5LCAyMCwgMSwgMjEwLCAyMjYsIDIwLCAxLCAyMTksIDIyNywgMjAsIDEsIAorICAgIDIxMCwgMTg3LCAyMCwgMSwgMTkyLCAyMCwgMSwgMjI4LCAxNCwgMjAsIDEsIDIzNCwgMTQ4LCAyMCwgMSwgMjI1LCAxNTQsIAorICAgIDIwLCAxLCAyMjgsIDE4MSwgMjAsIDEsIDIyNywgMjUxLCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyMTEsIDE5MiwgMjAsIAorICAgIDEsIDIyNSwgMjE0LCAyMCwgMSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjIsIDE0MiwgMjAsIDEsIDIzMiwgMTAzLCAyMCwgMSwgCisgICAgMjMwLCAyMzUsIDIwLCAxLCAyMjgsIDIzOCwgMjAsIDEsIDIyMywgNTQsIDIwLCAxLCAyMjMsIDE3NCwgMjAsIDEsIDIzNCwgCisgICAgMTcxLCAyMCwgMSwgMjI5LCAxMiwgMjAsIDEsIDIyOSwgNjEsIDIwLCAxLCAyMjksIDgyLCAyMCwgMSwgMjIwLCA5LCAyMCwgCisgICAgMSwgMjI0LCAxNTAsIDIwLCAxLCAyNDMsIDI0MSwgMjAsIDEsIDI0NCwgNDUsIDIwLCAxLCAyMTIsIDY1LCAyMCwgMSwgMTk4LCAKKyAgICAyMCwgMSwgMjMyLCAyNDcsIDIwLCAxLCAyMjUsIDExMSwgMjAsIDEsIDIzMiwgMTI1LCAyMCwgMSwgMjM0LCAzNCwgMjAsIDEsIAorICAgIDIzMSwgMTE5LCAyMCwgMSwgMjIzLCA4NiwgMjAsIDEsIDIzMSwgNjMsIDIwLCAxLCAxODYsIDIwLCAxLCAyMTYsIDExOCwgCisgICAgMjAsIDEsIDIzNCwgOTgsIDIwLCAxLCAyMzAsIDE2NiwgMjAsIDEsIDIzMSwgMTI3LCAyMCwgMSwgMjE2LCAyMzEsIDIwLCAxLCAKKyAgICAyMzQsIDEsIDIwLCAxLCAyMTYsIDI0OCwgMjAsIDEsIDIyNywgMjQzLCAyMCwgMSwgMjIxLCAyNTMsIDIwLCAxLCAyNDQsIAorICAgIDIwMCwgMjAsIDEsIDIzNCwgMywgMjAsIDEsIDIzNCwgMzAsIDIwLCAzOCwgMTY0LCAyMzQsIDExLCAyMCwgMzgsIDE2NCwgCisgICAgMjE1LCAxMTEsIDIwLCAyMjgsIDE4NywgMjAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjAsIDI0OSwgMjM0LCAyMCwgMjQ5LCAKKyAgICAyMjcsIDIwLCAyMjAsIDE1MiwgMjAsIDIyNCwgMTYsIDc5LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjEwLCAyNTQsIDIyNSwgCisgICAgNjQsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjUsIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjEwLCAKKyAgICAyNTQsIDIyMCwgODYsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIAorICAgIDEzOCwgMjEwLCAyNTQsIDIyNCwgMzMsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjQsIDMzLCA1OCwgMSwgCisgICAgMjUwLCAxMDQsIDEzOCwgMjEwLCAyNTQsIDIyMiwgMTQyLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIyLCAKKyAgICAxNDIsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAxMzgsIDEzMCwgCisgICAgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDI0NSwgMjcsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIAorICAgIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMzAsIDI0NiwgMTI2LCAKKyAgICAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAKKyAgICAyNywgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyOCwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAxMjUsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMzAsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgCisgICAgMTIxLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgNTksIDY3LCAKKyAgICAxMzAsIDU4LCAxLCA1OSwgMjE5LCA5NywgNTgsIDEsIDU5LCAyMDMsIDEzMCwgNTgsIDEsIDIzMiwgMTE0LCA0NCwgMjQ5LCAKKyAgICAxNjksIDI1NCwgMTE3LCA1OCwgMSwgMjIzLCAxNjAsIDEyMCwgNzUsIDU4LCAxLCAyMjMsIDE2MCwgMTI0LCA3NSwgNTgsIDEsIAorICAgIDIyMywgMTYwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIDIyMywgMTYwLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAKKyAgICAxMjEsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIDIxOCwgMTEzLCAyMiwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgCisgICAgMjE4LCAxMTMsIDIyLCAxMjEsIDIxNiwgMzEsIDcsIDYsIDEsIDI0NSwgMjA3LCAyNTQsIDE3OSwgNywgNCwgMSwgMjQ1LCAKKyAgICAyMDcsIDI1NCwgMTc5LCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIDcsIDQsIDEsIDI0NSwgMjA3LCAyNTQsIDIwNSwgCisgICAgNywgNiwgMSwgMjQxLCAyMTQsIDcsIDQsIDEsIDI0MSwgMjE0LCA3LCA2LCAxLCAyMTUsIDQwLCA3LCA0LCAxLCAyMTUsIDQwLCAKKyAgICA3LCA2LCAxLCAyMTUsIDIzMCwgNywgNCwgMSwgMjE1LCAyMzAsIDcsIDYsIDEsIDI0OSwgMTE4LCA3LCA0LCAxLCAyNDksIAorICAgIDExOCwgNywgNiwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCA0LCAxLCAyNDksIDExOSwgMiwgMjQ5LCAyMjcsIDcsIAorICAgIDEsIDQsIDYsIDI0NSwgMTQsIDcsIDEsIDQsIDYsIDIyMiwgOTMsIDcsIDYsIDEsIDI1NSwgODIsIDcsIDQsIDEsIDI1NSwgCisgICAgODIsIDcsIDYsIDEsIDI1NCwgODEsIDcsIDQsIDEsIDI1NCwgODEsIDcsIDYsIDEsIDI1MywgMjAwLCA3LCA0LCAxLCAyNTMsIAorICAgIDIwMCwgNywgNiwgMSwgMjUzLCAxODQsIDcsIDQsIDEsIDI1MywgMTg0LCA3LCA2LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAKKyAgICAxMzAsIDcsIDQsIDEsIDI1MywgMTg1LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNzUsIDcsIDQsIDEsIDI1MywgCisgICAgMTc1LCA3LCA2LCAxLCAyMjMsIDUyLCAyNTEsIDc1LCAyLCAyNDcsIDEyOCwgNywgNCwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgCisgICAgMiwgMjQ3LCAxMjgsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNiwgMSwgCisgICAgMjM1LCAzMCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjM1LCAKKyAgICAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMTgsIDEwNSwgMjIsIDI0OCwgCisgICAgNywgOTEsIDcsIDYsIDEsIDI1MSwgMTQzLCAxNTYsIDcsIDQsIDEsIDI1MSwgMTQzLCAxNTYsIDcsIDYsIDEsIDIzMywgMTU1LCAKKyAgICAyLCAxMjUsIDkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMTQ0LCAyLCAyMDAsIDIxOCwgCisgICAgMTA1LCAyMjYsIDEyNCwgNywgNCwgMSwgMTQ0LCAyLCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyMzIsIDEyOSwgNywgNCwgMSwgMTQ0LCAyLCAyMzIsIDEyOSwgNywgNiwgMSwgMjI2LCAxODcsIDcsIDQsIDEsIDIyNiwgCisgICAgMTg3LCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjQ0LCA2MSwgNywgNCwgCisgICAgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNCwgCisgICAgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMjMxLCAyMTcsIDc4LCA3LCA2LCAxLCAyMjQsIDEwMCwgMiwgMjE4LCAxMDUsIDIxNiwgCisgICAgMTQwLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAKKyAgICAyMjQsIDEwMCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIyMywgCisgICAgMjI3LCAyMjIsIDE4OCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgMTg4LCA3LCA2LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIAorICAgIDcsIDQsIDEsIDIyMiwgMTMyLCAyMjIsIDE4OCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIAorICAgIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAxMDYsIDcsIDYsIDEsIAorICAgIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAyMTYsIDE1MywgMiwgCisgICAgOTEsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgCisgICAgMjQ4LCA0NywgNywgNCwgMSwgMjE2LCAxNTMsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjEzLCAKKyAgICAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDczLCA3LCA0LCAxLCAyNDUsIDczLCA3LCA2LCAxLCAyMzUsIAorICAgIDE3OCwgNywgNCwgMSwgMjM1LCAxNzgsIDcsIDYsIDEsIDI0OSwgMjE1LCA3LCA0LCAxLCAyNDksIDIxNSwgNTgsIDEsIDIxNCwgCisgICAgMTMzLCA3LCA0LCAxLCAyNDYsIDc3LCA3LCA0LCAxLCAyMzIsIDg5LCA3LCA0LCAxLCAyMzAsIDg1LCA3LCA0LCAxLCAyMjcsIAorICAgIDIwNSwgNywgNCwgMSwgMjIyLCAxMzEsIDcsIDEsIDQsIDYsIDIyMiwgMTMxLCA3LCA0LCAxLCAyMTUsIDEwOSwgNywgNCwgMSwgCisgICAgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNiwgCisgICAgMSwgMjM1LCAyMjAsIDI0NSwgMTQsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQzLCAKKyAgICAyMDksIDcsIDYsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAyNDMsIDIwOSwgNywgNCwgMSwgMjE1LCA5NCwgMjM1LCAyMjAsIAorICAgIDI0MywgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDQsIDEsIDIxNSwgOTQsIDE1NiwgNywgNiwgMSwgMjM1LCAKKyAgICAyMjAsIDE1MywgNywgNCwgMSwgMjM1LCAyMjAsIDE1MywgNywgNiwgMSwgMjM1LCAyMjAsIDIyMiwgOTMsIDcsIDQsIDEsIAorICAgIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA2LCAxLCAyMzUsIDIyMCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAyMTcsIAorICAgIDE1MywgNTgsIDEsIDEyMSwgMjUwLCAzOSwgMjU1LCAyMywgNTgsIDEsIDI0OSwgMjM0LCA1OCwgMSwgMjE5LCAyNTMsIDI0NSwgCisgICAgMTA2LCA1MCwgNywgNiwgMSwgMjIyLCAxLCA3LCA0LCAxLCAyMjIsIDEsIDcsIDYsIDEsIDIxNSwgOTQsIDI0MiwgNjcsIDcsIAorICAgIDQsIDEsIDIzMywgMTU1LCAyLCAyMjMsIDU4LCAyNDEsIDU5LCAyMiwgMjUyLCA0OSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgCisgICAgMjQ4LCA0NywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQ4LCA0NywgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTMwLCA3LCA0LCAxLCAKKyAgICAyNTEsIDc1LCAyLCAxMzAsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDEwMywgNTgsIDEsIDYsIDI0MiwgNjgsIDIsIDkxLCA1OCwgMSwgCisgICAgNCwgMjcsIDIyNiwgMjM4LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxOTQsIDcsIDI0NSwgMTExLCAxLCAyMjMsIDUyLCAyNDUsIAorICAgIDE0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjI2LCAxMDksIDcsIDI0NSwgMTExLCAxLCAyMzUsIDIwMCwgMTk0LCA3LCAKKyAgICAyNDUsIDExMSwgMSwgMjQwLCAxNjEsIDIzMiwgMTM1LCA3LCAyNDUsIDExMSwgMSwgMjU0LCAzMSwgMTk0LCAyMTcsIDIzMSwgCisgICAgMjI5LCAyMTksIDEsIDYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0NiwgCisgICAgNTYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNjksIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNzYsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgNzgsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjQyLCA0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgCisgICAgMzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM0LCAxMTEsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQyLCAxODEsIAorICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQyLCAyMzEsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjU0LCA4MywgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDksIDI0NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTAsIDk0LCAyMTcsIDIzMSwgCisgICAgMjI5LCAyMTksIDEsIDIzNSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM1LCAxMTUsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgMjE1LCAxMzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE1LCAxNDAsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgCisgICAgMjQ4LCAxMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQ4LCAxMjIsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMTEyLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNiwgMTU3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0NywgMTUzLCAyMTcsIAorICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTUsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjI4LCA3OSwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAxLCAyMjUsIDE5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyNSwgMTI0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAorICAgIDI1MSwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI1MiwgMTgsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjMwLCAKKyAgICAxNjYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjIyLCAyMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjMyLCAxNjIsIAorICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjIyLCAxNjcsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE5LCA2MCwgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDEsIDc1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2MSwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAyNSwgNSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCAKKyAgICA3NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgMjI2LCAxODcsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgCisgICAgMjMxLCAxNjMsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgMjMxLCAxNjIsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAKKyAgICAxNSwgMjMxLCAxNjEsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgMjMxLCAxNjAsIDIyOCwgNjEsIDIzNSwgMjQ3LCAKKyAgICAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDIyOCwgNjEsIAorICAgIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDIxOSwgCisgICAgMTE5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgCisgICAgMTAsIDEzNCwgMjE5LCAxMTgsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjQsIDI1LCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIAorICAgIDIyNSwgNDMsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjIyLCAxMjAsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNiwgCisgICAgNzksIDIyNSwgMTQ3LCAxLCAxNzYsIDIyNSwgMTQ3LCAxLCAyMzQsIDEzOCwgMjI1LCAxNDcsIDEsIDI0MywgMTQyLCAyMjUsIAorICAgIDE0NywgMSwgMjI5LCA4MiwgMjI1LCAxNDcsIDEsIDI1MSwgNDEsIDIyNSwgMTQ3LCAxLCAyNTAsIDE2NSwgMjI1LCAxNDcsIAorICAgIDEsIDIzNSwgMTQ3LCAyMjUsIDE0NywgMSwgMjI3LCAxNjksIDIyNSwgMTQ3LCAxLCAyMTcsIDEwNiwgMjI1LCAxNDcsIDEsIAorICAgIDIxNiwgMjA5LCAyMjUsIDE0NywgMSwgMjQ4LCAyMjksIDIyNSwgMTQ3LCAxLCAxOTgsIDIyNSwgMTQ3LCAxLCAxOTEsIDIyNSwgCisgICAgMTQ3LCAxLCAyMjUsIDE1MCwgMjI1LCAxNDcsIDEsIDI1MiwgMTk5LCAyMjUsIDE0NywgMSwgMTg2LCAyMjUsIDE0NywgMSwgCisgICAgMjE1LCAxODQsIDIyNSwgMTQ3LCAxLCAyMTUsIDE3NiwgMjI1LCAxNDcsIDEsIDI0NiwgNDYsIDIyNSwgMTQ3LCAxLCAyMTIsIAorICAgIDY1LCAyMjUsIDE0NywgMSwgMjEwLCA4MiwgMjI1LCAxNDcsIDEsIDIxMCwgMTE2LCAyMjUsIDE0NywgMSwgNCwgNjEsIDIyNSwgCisgICAgMTQ3LCAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMDUsIDIyNSwgMTQ3LCAxLCAyMzMsIDE0MSwgMjI1LCAxNDcsIDEsIDIyMCwgCisgICAgMTA0LCAyMjUsIDE0NywgMSwgMjA2LCAyMjUsIDE0NywgMSwgMTYyLCAyMjUsIDE0NywgMSwgNjEsIDIyNSwgMTQ3LCAxLCAKKyAgICA3NCwgMjI1LCAxNDcsIDEsIDY5LCAyMjUsIDE0NywgMSwgNzYsIDIyNSwgMTQ3LCAxLCA3OCwgMjI1LCAxNDcsIDEsIDIyNCwgCisgICAgOTEsIDIyNSwgMTQ3LCAxLCAyMTEsIDE2NSwgMjI1LCAxNDcsIDEsIDI0NCwgMjA0LCAyMjUsIDE0NywgMSwgMjQzLCAzNiwgCisgICAgMjI1LCAxNDcsIDEsIDI0NSwgMjE3LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjI1LCAxNDcsIDIxOCwgNzQsIAorICAgIDEsIDE5MiwgMjI1LCAxNDcsIDEsIDIxNSwgMTU3LCAyMjUsIDE0NywgMSwgMjE1LCAxNDUsIDIyNSwgMTQ3LCAxLCAyNDgsIAorICAgIDE0MywgMjI1LCAxNDcsIDEsIDIyOCwgMTE1LCAyMjUsIDE0NywgMSwgMjU0LCAxNDksIDE5MiwgMjI1LCAxNDcsIDEsIDIxMywgCisgICAgMTM0LCAyMjAsIDEwNCwgMjI1LCAxNDcsIDEsIDIxMywgMTM1LCAxNjIsIDIyNSwgMTQ3LCAxLCAyNTMsIDIzMSwgMjQ0LCAKKyAgICAyMDQsIDIyNSwgMTQ3LCAyMTgsIDc0LCAxLCAyMDUsIDIyNSwgMTQ3LCAyMTgsIDI2LCAxLCAyMDUsIDIyNSwgMTQ3LCAxLCAKKyAgICAyNTEsIDcsIDIyNSwgMTQ3LCAyMTksIDE1NywgMjQxLCAyNDMsIDc5LCAyMjUsIDE0NywgNTIsIDI0MSwgMjQzLCA3OSwgCisgICAgMjI1LCAxNDcsIDE2NCwgMjIwLCA5NywgMjI1LCAxNDcsIDE2NCwgNTIsIDIyMCwgOTcsIDE3OSwgNSwgMjU0LCA4MywgMTc5LCAKKyAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDgyLCAxNzksIDEsIDc0LCAxNzksIDEsIDIzNiwgNDAsIAorICAgIDE3OSwgMSwgNjksIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTkxLCAxNzksIDEsIDc2LCAxNzksIDEsIDI0NSwgMjE3LCAKKyAgICAxNzksIDEsIDI1NCwgMjEwLCAxNzksIDEsIDc4LCAxNzksIDEsIDIyNiwgMTg3LCAxNzksIDEsIDI1MywgMjAwLCAxNzksIDEsIAorICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzOCwgMTc5LCAxLCAyNDMsIDE0MiwgMTc5LCAxLCAyNDMsIDAsIDE3OSwgMSwgMjI5LCA4MiwgCisgICAgMTc5LCAxLCAyNTEsIDQxLCAxNzksIDEsIDI1MCwgMTY1LCAxNzksIDEsIDIzNSwgMTQ3LCAxNzksIDEsIDIzNSwgMTIwLCAKKyAgICAxNzksIDEsIDIyNywgMTY5LCAxNzksIDEsIDIxNSwgMTU3LCAxNzksIDEsIDIxNSwgMTQ1LCAxNzksIDEsIDI0OCwgMTQzLCAKKyAgICAxNzksIDEsIDI0OCwgMTI3LCAxNzksIDEsIDIyOCwgMTE1LCAxNzksIDEsIDIxNywgMTA2LCAxNzksIDEsIDIxNiwgMjA5LCAKKyAgICAxNzksIDEsIDI0OCwgMjI5LCAxNzksIDEsIDI0OCwgMzMsIDE3OSwgMSwgMTk4LCAxNzksIDEsIDE5MSwgMTc5LCAxLCAyMjUsIAorICAgIDE1MCwgMTc5LCAxLCAyNTIsIDE5OSwgMTc5LCAxLCAyNTIsIDI2LCAxNzksIDEsIDE4NiwgMTc5LCAxLCAxOTIsIDE3OSwgMSwgCisgICAgMjA1LCAxNzksIDEsIDIzMywgMTQxLCAxNzksIDEsIDIxNCwgMjcsIDE3OSwgMSwgMjIwLCAxMDQsIDE3OSwgMSwgMjE4LCAKKyAgICAyMjUsIDE3OSwgMSwgMjA2LCAxNzksIDEsIDE2MiwgMTc5LCAxLCAyMzIsIDE5MCwgMTc5LCAxMTcsIDUsIDI0MiwgNTEsIAorICAgIDE3OSwgMjUsIDUsIDI1NSwgODIsIDE3OSwgMjUsIDUsIDc0LCAxNzksIDI1LCA1LCAyMzYsIDQwLCAxNzksIDI1LCA1LCA2OSwgCisgICAgMTc5LCAyNSwgNSwgMjE0LCAxMTgsIDE3OSwgMjUsIDUsIDE0OSwgMTUzLCAxNzksIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNzksIDI1LCA1LCAxNDksIDE1NiwgMTc5LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAyNSwgNSwgNzYsIDE3OSwgMjUsIAorICAgIDUsIDI0NSwgMjE3LCAxNzksIDI1LCA1LCAyNTQsIDIxMCwgMTc5LCAyNSwgNSwgNzgsIDE3OSwgMjUsIDUsIDIyNiwgMTg3LCAKKyAgICAxNzksIDI1LCA1LCAyNTMsIDIwMCwgMTc5LCA1LCAyMTMsIDE1MiwgMTc5LCAyNDgsIDE4NiwgMTc5LCA1MiwgMjQ4LCAxODYsIAorICAgIDE3OSwgMjEsIDIxMCwgODYsIDE3OSwgMjEsIDExMSwgMTc5LCAyMSwgMTA1LCAxNzksIDIxLCAxNTgsIDE3OSwgMjEsIDE2MSwgCisgICAgMTc5LCAyMSwgMTkwLCAxNzksIDIxLCAxOTUsIDE3OSwgMjEsIDE5OSwgMTc5LCAyMSwgMTk2LCAxNzksIDIxLCAyMDEsIDM4LCAKKyAgICA4NCwgMjEsIDIxMCwgODYsIDM4LCA4NCwgMjEsIDExMSwgMzgsIDg0LCAyMSwgMTA1LCAzOCwgODQsIDIxLCAxNTgsIDM4LCAKKyAgICA4NCwgMjEsIDE2MSwgMzgsIDg0LCAyMSwgMTkwLCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDE5OSwgMzgsIDg0LCAKKyAgICAyMSwgMTk2LCAzOCwgODQsIDIxLCAyMDEsIDM4LCA4NCwgMSwgNjEsIDM4LCA4NCwgMSwgNjksIDM4LCA4NCwgMSwgMTc2LCAKKyAgICAzOCwgODQsIDEsIDE5OCwgMzgsIDg0LCAxLCAxOTEsIDM4LCA4NCwgMSwgMjA1LCAzOCwgODQsIDEsIDIxMywgMTc2LCAzOCwgCisgICAgODQsIDUsIDI1MywgMTgzLCA4NCwgNSwgMjE5LCAxOSwgMjUxLCA3LCA4NCwgNSwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIAorICAgIDUyLCAyNTEsIDgsIDIxMywgMTUyLCA4NCwgNSwgMjUxLCA4LCAxMDUsIDg0LCA1LCAyNTEsIDgsIDE1OCwgODQsIDUsIDI1MSwgCisgICAgOCwgMjUzLCAxODMsIDg0LCA1LCAyMjQsIDEyNywgODQsIDI0MywgMTA3LCAyNDQsIDExMSwgODQsIDI1MCwgMjQ2LCA4NCwgCisgICAgMjQxLCAyMzcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDIxMCwgODYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDExMSwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTA1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxNTgsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjEsIDE2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTkwLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTUsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk2LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDIxLCAyMDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzNCwgCisgICAgMTM4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0MywgMTQyLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyOSwgODIsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjA2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyMCwgMTA0LCAyMzQsIDE5NCwgCisgICAgMjMyLCAyNDgsIDEsIDIxMCwgMTE2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNywgMTY5LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDIxNywgMTA2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0MCwgMjMzLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIAorICAgIDE5OCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxOTEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI1LCAxNTAsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMSwgMTg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0OCwgMjI5LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDI1MiwgMTk5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxOTIsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjMzLCAxNDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjEyLCA2NSwgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxLCAyMTYsIDIwOSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxNjIsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMSwgMjE0LCAyNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNTEsIDQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIAorICAgIDYxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNiwgMjM4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDc0LCAyMzQsIDE5NCwgCisgICAgMjMyLCAyNDgsIDEsIDIyNiwgMTg3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCAyMTQsIDIxNCwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyNSwgNzYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDY5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCAyNDUsIAorICAgIDIxNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgNzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyMjUsIDMzLCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjUxLCAyMCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjEsIDIyNSwgMzMsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjQ5LCA4NSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCA1LCAyMTksIDIwMSwgMjIzLCA5NiwgCisgICAgMSwgMTc2LCAyMjMsIDk2LCAxLCAyNDMsIDE0MiwgMjIzLCA5NiwgMSwgMjI5LCA4MiwgMjIzLCA5NiwgMSwgMjE3LCAxMDYsIAorICAgIDIyMywgOTYsIDEsIDI0OCwgMjI5LCAyMjMsIDk2LCAxLCAxOTgsIDIyMywgOTYsIDEsIDE5MSwgMjIzLCA5NiwgMSwgMjUyLCAKKyAgICAxOTksIDIyMywgOTYsIDEsIDE4NiwgMjIzLCA5NiwgMSwgMjUxLCA0MSwgMjIzLCA5NiwgMSwgMjM1LCAxNDcsIDIyMywgOTYsIAorICAgIDEsIDIyNywgMTY5LCAyMjMsIDk2LCAxLCAyMDYsIDIyMywgOTYsIDEsIDIwNSwgMjIzLCA5NiwgMSwgMjMzLCAxNDEsIDIyMywgCisgICAgOTYsIDEsIDE5MiwgMjIzLCA5NiwgMSwgMjEyLCA2NSwgMjIzLCA5NiwgMSwgMTYyLCAyMjMsIDk2LCAxLCAyMzEsIDEyOSwgCisgICAgMjIzLCA5NiwgMSwgMjI5LCA2MSwgMjIzLCA5NiwgMSwgMjI5LCAxNTMsIDIyMywgOTYsIDEsIDIyNywgMTM5LCAyMjMsIDk2LCAKKyAgICAxLCA2MSwgMjIzLCA5NiwgMjUsIDUsIDc0LCAyMjMsIDk2LCAyNSwgNSwgNjksIDIyMywgOTYsIDI1LCA1LCA3NiwgMjIzLCAKKyAgICA5NiwgMjUsIDUsIDI1NCwgMjEwLCAyMjMsIDk2LCAyNSwgNSwgNzgsIDIyMywgOTYsIDI1LCA1LCAyNTMsIDIwMCwgMjIzLCAKKyAgICA5NiwgMjUsIDUsIDI0NSwgNjMsIDIyMywgOTYsIDI1LCA1LCAyNDUsIDI0MSwgMjIzLCA5NiwgMTE3LCA1LCAyMjksIDg0LCAKKyAgICAyMjMsIDk2LCAxMTcsIDUsIDIzMCwgMzAsIDIyMywgOTYsIDExNywgNSwgMTUzLCAyMjMsIDk2LCAxMTcsIDUsIDI0MiwgNjcsIAorICAgIDIyMywgOTYsIDIxMywgMTUyLCAyMjMsIDk2LCAyMjEsIDE3NSwgNzksIDI0LCAxMDAsIDIxNiwgOTgsIDI0LCAxMDAsIDIxNiwgCisgICAgOTcsIDI0LCAxMDAsIDIxNiwgOTUsIDI0LCAxMDAsIDIxNiwgMTAwLCAyNCwgMTAwLCAyMjMsIDI0LCAyNCwgMTAwLCAyMjMsIAorICAgIDgsIDI0LCAxMDAsIDIyMywgMywgMjQsIDEwMCwgMjIzLCA1LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgMTAwLCAyMjMsIDE0LCAKKyAgICAyNCwgMTAwLCAyMjMsIDcsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIyMywgOSwgMjQsIDEwMCwgMjIzLCAyOCwgMjQsIAorICAgIDEwMCwgMjIzLCAyNSwgMjQsIDEwMCwgMjMwLCAyMTgsIDI0LCAxMDAsIDIzMCwgMjA5LCAyNCwgMTAwLCAyMzAsIDIxMiwgCisgICAgMjQsIDEwMCwgMjI1LCA4MywgMjQsIDEwMCwgMjI1LCA5NCwgMjQsIDEwMCwgMjI1LCA5NSwgMjQsIDEwMCwgMjE4LCAyMDksIAorICAgIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIzNiwgNjAsIDI0LCAxMDAsIDIxOCwgMjIwLCAyNCwgMTAwLCAyMTgsIDIwNywgCisgICAgMjQsIDEwMCwgMjI1LCAxMzMsIDI0LCAxMDAsIDI0MSwgMTc0LCAyNCwgMTAwLCAyMTgsIDIwNCwgMTU1LCA1LCAyMjYsIDMxLCAKKyAgICAxNTUsIDUsIDI1MCwgMTk1LCAxNTUsIDUsIDIzMywgNzIsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgNjEsIDE1NSwgMSwgCisgICAgMjQwLCAxNjEsIDIzNCwgMTk3LCAxNTUsIDEsIDc0LCAxNTUsIDEsIDIzNiwgNDAsIDE1NSwgMSwgNjksIDE1NSwgMSwgMjI2LCAKKyAgICA5NCwgMjUwLCAxNzEsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNCwgMTU1LCAxLCAyMjksIDgzLCAyMzMsIDM1LCAyMjMsIAorICAgIDE0NSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAyNTQsIDIxMCwgMTU1LCAxLCA3OCwgMTU1LCAxLCAxNzYsIDE1NSwgMSwgMjM1LCAKKyAgICAxOSwgMjIxLCAyMzAsIDE1NSwgMSwgMjM1LCAxOSwgMjMwLCA3MSwgMTU1LCAxLCAyNDMsIDE0MiwgMTU1LCAxLCAyNDMsIAorICAgIDE0MywgMjMwLCA3MSwgMTU1LCAxLCAyMjksIDgyLCAxNTUsIDEsIDI1MSwgNDEsIDE1NSwgMSwgMjUxLCA0MiwgMjMwLCA3MSwgCisgICAgMTU1LCAxLCAyMzUsIDE0NywgMTU1LCAxLCAyMjcsIDE3MCwgMjMwLCA3MSwgMTU1LCAxLCAyMzUsIDE0OCwgMjMxLCAyMTIsIAorICAgIDE1NSwgMSwgMjI3LCAxNjksIDE1NSwgMSwgMjE1LCAxNTcsIDE1NSwgMSwgMjE1LCAxNTgsIDIzMSwgMjEyLCAxNTUsIDEsIAorICAgIDI0OCwgMTQzLCAxNTUsIDEsIDI0OCwgMTQ0LCAyMzEsIDIxMiwgMTU1LCAxLCAyMjksIDIzNCwgMjMwLCA3MSwgMTU1LCAxLCAKKyAgICAyMTcsIDEwNiwgMTU1LCAxLCAyMTcsIDEwNywgMjMwLCA3MSwgMTU1LCAxLCAyNDgsIDIyOSwgMTU1LCAxLCAyNDgsIDIzMCwgCisgICAgMjMxLCAyMTIsIDE1NSwgMSwgMTk4LCAxNTUsIDEsIDE5MSwgMTU1LCAxLCAyMjYsIDk0LCAyMzAsIDcxLCAxNTUsIDEsIAorICAgIDI1MiwgMTk5LCAxNTUsIDEsIDI1MiwgMjAwLCAyMzAsIDcxLCAxNTUsIDEsIDE4NiwgMTU1LCAxLCAxOTIsIDE1NSwgMSwgCisgICAgMjA1LCAxNTUsIDEsIDIyMywgMTkxLCAyNTQsIDIxOSwgMTU1LCAxLCAyMzMsIDE0MSwgMTU1LCAxLCAyMTIsIDY1LCAxNTUsIAorICAgIDEsIDIyMiwgMzYsIDIzMCwgNzEsIDE1NSwgMSwgMjIyLCAzNiwgMjMxLCAyMTIsIDE1NSwgMSwgMjA2LCAxNTUsIDEsIDE2MiwgCisgICAgMTU1LCA1LCAyNTAsIDE5NiwgMjE2LCAyNTEsIDE1NSwgMjUsIDUsIDIxNywgNDgsIDE1NSwgMjUsIDUsIDIxNiwgMzYsIAorICAgIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA3NCwgMTU1LCAyNSwgNSwgMjE4LCA0OCwgCisgICAgMTU1LCAyNSwgNSwgMjE4LCA0OSwgMjMxLCA2MiwgMTU1LCAyNSwgNSwgMjE3LCA2NiwgMTU1LCAyNSwgNSwgMjQ3LCAyMDIsIAorICAgIDIzMCwgNzAsIDE1NSwgMjUsIDUsIDIyNSwgMTg3LCAxNTUsIDExNywgNSwgMjM0LCAxNjQsIDE1NSwgMTE3LCA1LCAyMjUsIAorICAgIDE5OSwgMTU1LCAxMTcsIDUsIDI1MSwgMjcsIDE1NSwgMjI2LCA0NCwgMTU1LCA0MywgMjIzLCA3MiwgMTU1LCA0NCwgMjIzLCAKKyAgICA3MiwgMTU1LCAyMjYsIDgzLCAyNTQsIDEyNSwgMTU1LCAyMjYsIDgzLCAyMzEsIDIyOSwgMTU1LCAyMjYsIDgzLCAyMzIsIAorICAgIDkzLCAxNTUsIDIyNiwgODMsIDIxMSwgMjM4LCAxNTUsIDIyNiwgODMsIDIyNiwgNDUsIDE1NSwgMjI2LCA4MywgMjMyLCAKKyAgICAyMTEsIDE1NSwgMjI2LCA4MywgMjMyLCA4NywgMTU1LCAyMjYsIDgzLCAyNTUsIDIsIDE1NSwgMjI2LCA4MywgMjU1LCAzLCAKKyAgICAyNTUsIDIsIDE1NSwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMTUsIDk0LCAyMjYsIDgzLCAyMjUsIDU0LCAxNTUsIDIyNiwgCisgICAgNDAsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMSwgMTU1LCAyMSwgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIAorICAgIDE2MSwgMTU1LCAyMSwgMTkwLCAxNTUsIDIxLCAxOTUsIDE1NSwgMjEsIDE5OSwgMTU1LCAyMSwgMTk2LCAxNTUsIDIxLCAKKyAgICAyMDEsIDE1NSwgMjI2LCA4MywgMjE2LCA3MCwgMjE1LCAxMDcsIDE1NSwgMjI2LCA4MywgMjM1LCAxNzQsIDE3MiwgMSwgNjEsIAorICAgIDE3MiwgMSwgNzQsIDE3MiwgMSwgNjksIDE3MiwgMSwgNzYsIDE3MiwgMSwgMjU0LCAyMTAsIDE3MiwgMSwgNzgsIDE3MiwgMSwgCisgICAgMTc2LCAxNzIsIDEsIDIzNCwgMTM4LCAxNzIsIDEsIDI0MywgMTQyLCAxNzIsIDEsIDI0MywgMCwgMTcyLCAxLCAyMjgsIAorICAgIDI1MCwgMTcyLCAxLCAyMjksIDgyLCAxNzIsIDEsIDI1MCwgMTY1LCAxNzIsIDEsIDI1MCwgMTIwLCAxNzIsIDEsIDIzNSwgCisgICAgMTQ3LCAxNzIsIDEsIDIzNSwgMTIwLCAxNzIsIDEsIDIyOCwgMjQwLCAxNzIsIDEsIDIyOCwgMjQyLCAxNzIsIDEsIDIyOCwgCisgICAgMjQxLCAxNzIsIDEsIDIxNywgMTA2LCAxNzIsIDEsIDIxNiwgMjA5LCAxNzIsIDEsIDI0OCwgMjI5LCAxNzIsIDEsIDI0OCwgCisgICAgMzMsIDE3MiwgMSwgMjI3LCAyMTEsIDE3MiwgMSwgMTk4LCAxNzIsIDEsIDI0OCwgMTQzLCAxNzIsIDEsIDE5MSwgMTcyLCAxLCAKKyAgICAyMjQsIDIyMywgMTcyLCAxLCAyMjUsIDE1MCwgMTcyLCAxLCAyNTIsIDE5OSwgMTcyLCAxLCAyNTIsIDI2LCAxNzIsIDEsIAorICAgIDIzMCwgMTAwLCAxNzIsIDEsIDE4NiwgMTcyLCAxLCAyNTIsIDExOSwgMTcyLCAxLCAxOTIsIDE3MiwgMSwgMjA1LCAxNzIsIAorICAgIDEsIDIzMywgMTQxLCAxNzIsIDEsIDIxNCwgMjcsIDE3MiwgMSwgMjE4LCAyMjUsIDE3MiwgMSwgMjA2LCAxNzIsIDEsIDE2MiwgCisgICAgMTcyLCAyNSwgNSwgMjU1LCA4MiwgMTcyLCAyNSwgNSwgNzQsIDE3MiwgMjUsIDUsIDIzNiwgNDAsIDE3MiwgMjUsIDUsIAorICAgIDI0NSwgMjAzLCAxNzIsIDI1LCA1LCA2OSwgMTcyLCAyNSwgNSwgMjI2LCAyMzgsIDE3MiwgMjUsIDUsIDc4LCAxNzIsIDI1LCAKKyAgICA1LCAyNTQsIDIxMCwgMTcyLCAyNSwgNSwgMjUzLCAyMDAsIDE3MiwgMjUsIDUsIDIxNCwgMjE0LCAxNzIsIDExNywgNSwgCisgICAgMTkyLCAxNzIsIDExNywgNSwgMjA1LCAxNzIsIDExNywgNSwgMjMzLCAxNDEsIDE3MiwgMTE3LCA1LCAyMTIsIDY1LCAxNzIsIAorICAgIDEsIDQwLCAyMzUsIDI5LCAxNzIsIDEsIDQwLCAyNDMsIDIwOSwgMTcyLCAxLCA0MCwgMjI5LCA4NCwgMTcyLCAxMTcsIDUsIAorICAgIDQwLCAyMjksIDg0LCAxNzIsIDEsIDQwLCAyNTAsIDE2NiwgMTcyLCAxLCA0MCwgMjE3LCAxNTMsIDE3MiwgMSwgNDAsIDIzMCwgCisgICAgMzAsIDE3MiwgMSwgNDAsIDIyNiwgMTA5LCAxNzIsIDEsIDQwLCAyMTEsIDExNywgMTcyLCAxLCA0MCwgMTUzLCAxNzIsIDEsIAorICAgIDQwLCAxNTYsIDE3MiwgMSwgNDAsIDIxOCwgMjI4LCAxNzIsIDExNywgNSwgNDAsIDE5NCwgMTcyLCAxMTcsIDUsIDQwLCAKKyAgICAyNDIsIDY3LCAxNzIsIDIxLCAyMTAsIDg2LCAxNzIsIDIxLCAxMTEsIDE3MiwgMjEsIDEwNSwgMTcyLCAyMSwgMTU4LCAxNzIsIAorICAgIDIxLCAxNjEsIDE3MiwgMjEsIDE5MCwgMTcyLCAyMSwgMTk1LCAxNzIsIDIxLCAxOTksIDE3MiwgMjEsIDE5NiwgMTcyLCAyMSwgCisgICAgMjAxLCAxNzIsIDIyNCwgMTQ0LCAyMTgsIDI1MywgMTcyLCAyMjQsIDE0NCwgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDUyLCAKKyAgICAyNDgsIDE4NiwgMTcyLCAyMjQsIDE0NCwgMjE1LCAyMTIsIDI0OCwgMTg2LCA2OCwgMSwgMjM0LCAxMzIsIDI0MywgMTQyLCAKKyAgICA2OCwgMSwgMjM0LCAxMzIsIDI1MSwgNDEsIDY4LCAxLCAyMzQsIDEzMiwgMjUwLCAxNjUsIDY4LCAxLCAyMzQsIDEzMiwgCisgICAgMjM1LCAxNDcsIDY4LCAxLCAyMzQsIDEzMiwgMjM1LCAxMjAsIDY4LCAxLCAyMzQsIDEzMiwgMjI3LCAxNjksIDY4LCAxLCAKKyAgICAyMzQsIDEzMiwgMjE1LCAxNTcsIDY4LCAxLCAyMzQsIDEzMiwgMjE1LCAxNDUsIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAxNDMsIAorICAgIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAxMjcsIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAzMywgNjgsIDEsIDIzNCwgMTMyLCAKKyAgICAxOTgsIDY4LCAxLCAyMzQsIDEzMiwgMjA2LCA2OCwgMSwgMjM0LCAxMzIsIDE2MiwgNjgsIDEsIDIzNCwgMTMyLCAyNDEsIAorICAgIDE5NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDQsIDIwNCwgNjgsIDU4LCAxLCAyMzQsIDEzMiwgMjIzLCAxMTIsIDY4LCAxLCAKKyAgICAyMzQsIDEzMiwgMjExLCAxNjUsIDY4LCAxLCAyMzQsIDEzMiwgMjEwLCAxMTYsIDY4LCAxLCAyMzQsIDEzMiwgMjA1LCA2OCwgCisgICAgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjcsIDEsIDY4LCAyMzIsIDE1MSwgMjM0LCAxMzIsIDIyNCwgNDYsIDY4LCAyMzIsIAorICAgIDE1MSwgMjM0LCAxMzIsIDI0MSwgMTI4LCA2OCwgMTYsIDI1NCwgMTk5LCAyNDUsIDM4LCA2OCwgMTYsIDI1NCwgMTk5LCAKKyAgICAxMTEsIDY4LCAxNiwgMjU0LCAxOTksIDEwNSwgNjgsIDEsIDI1NCwgMTk5LCAyMDUsIDY4LCA1LCAyMjYsIDI3LCAyMzQsIAorICAgIDIxOSwgMjE2LCAzMSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDM0LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMzQsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjM0LCAxMTEsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAKKyAgICAxMjAsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMjAsIDM5LCAyMDgsIDEsIDEyMSwgMjQyLCAxODEsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjQyLCAxODEsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA5LCAzOSwgMjA4LCAxLCAxMjUsIDIyOSwgOSwgMzksIDIwOCwgCisgICAgMSwgMTIxLCAyNDksIDI0NiwgMzksIDIwOCwgMSwgMTI1LCAyNDksIDI0NiwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDk0LCAKKyAgICAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgOTQsIDM5LCAyMDgsIDEsIDEyMSwgMjE5LCA2MCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIAorICAgIDYwLCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIyNywgMTM4LCAzOSwgMjA4LCAxLCAKKyAgICAxMjEsIDI0NywgMTUzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTUzLCAzOSwgMjA4LCAxLCAxMjEsIDExMiwgMzksIDIwOCwgCisgICAgMSwgMTI1LCAxMTIsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTcsIDM5LCAyMDgsIDEsIDEyNSwgMjE2LCAxNTcsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIDc5LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgCisgICAgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjEzLCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTksIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjI1LCAxOSwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyNCwgMzksIDIwOCwgMSwgMTI1LCAyMjUsIDEyNCwgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgNTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAKKyAgICAxNjYsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjYsIDM5LCAyMDgsIDEsIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTMsIDM5LCAyMDgsIDEsIDEyNSwgMjIyLCAyMTMsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjMyLCAxNjIsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAxNjIsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAKKyAgICAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyMSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyNDEsIDc1LCAzOSwgMjA4LCAxLCAxMjEsIDc4LCAzOSwgMjA4LCAxLCAxMjUsIDc4LCAzOSwgMjA4LCAyMzEsIAorICAgIDIwOSwgMjM0LCAyMzYsIDM5LCAyMDgsIDI1LCAyNTUsIDgyLCAzOSwgMjA4LCAyNSwgNzQsIDM5LCAyMDgsIDI1LCAyMTQsIAorICAgIDIxNCwgMzksIDIwOCwgMjUsIDY5LCAzOSwgMjA4LCAyNSwgNzYsIDM5LCAyMDgsIDI1LCA3OCwgMzksIDIwOCwgMjMxLCAKKyAgICAyMDksIDIzNCwgMTE0LCAzOSwgMjA4LCAyNSwgMjQwLCAxMjYsIDM5LCAyMDgsIDI1LCAyMTQsIDIxMywgMzksIDIwOCwgMjUsIAorICAgIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTgsIDM5LCAyMDgsIDI1LCAyNTMsIDE3NSwgMzksIDIwOCwgMjUsIDI1NCwgCisgICAgMTMxLCAzOSwgMjA4LCAyNSwgMjU0LCAxNDQsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAzOSwgMjA4LCAKKyAgICAxMzgsIDIzMSwgMjA5LCAyMjcsIDIxMCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDM5LCAyMDgsIDEzOCwgCisgICAgMjMxLCAyMDksIDIxOSwgNDQsIDM5LCAyMDgsIDE2LCAyMzQsIDE5LCAzOSwgMjA4LCAxNiwgMjI3LCAyMTAsIDM5LCAyMDgsIAorICAgIDE2LCAyMjEsIDI1NSwgMzksIDIwOCwgMTYsIDI0MSwgNzYsIDI0MSwgNzEsIDM5LCAyMDgsIDE2LCAyMzQsIDI4LCAyMzQsIAorICAgIDI3LCAxODgsIDE4NywgMSwgNzYsIDE4OCwgMTg3LCAxLCA3OCwgMTg4LCAxODcsIDEsIDI1MCwgMTY1LCAxODgsIDE4NywgMSwgCisgICAgMjI3LCAxNjksIDE4OCwgMTg3LCAxLCAyMTUsIDE1NywgMTg4LCAxODcsIDEsIDIxNSwgMTQ1LCAxODgsIDE4NywgMSwgMjQ4LCAKKyAgICAxNDMsIDE4OCwgMTg3LCAxLCAyNDgsIDEyNywgMTg4LCAxODcsIDEsIDIyOCwgMTE1LCAxODgsIDE4NywgMSwgMjIwLCAxMDQsIAorICAgIDE4OCwgMTg3LCAxLCAyMTgsIDIyNSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQwLCAxODgsIDE4NywgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxODgsIDE4NywgMjUsIDUsIDI1NSwgNDYsIDE4OCwgMTg3LCAyNSwgNSwgMjUzLCAyMDAsIDE4OCwgMTg3LCAyNSwgCisgICAgNSwgMjU1LCAzOSwgMTg4LCAxODcsIDI1MCwgMTMzLCAxODgsIDE4NywgMjU0LCAyMTUsIDIzNCwgMTA0LCAxODgsIDE4NywgCisgICAgMjU0LCAxMTEsIDE4OCwgMTg3LCAzLCAyMjMsIDc3LCA3OSwgMTg4LCAxODcsIDIxMSwgMjA5LCAyMjMsIDc3LCA3OSwgMTg4LCAKKyAgICAxODcsIDI1LCA1LCAyMTMsIDE0NywgMTg4LCAxODcsIDIxMywgMTUyLCAyOSwgMywgMjE1LCAxMzgsIDI5LCAzLCAyMTUsIAorICAgIDE0MSwgMjksIDMsIDIxNSwgMTQ0LCAyOSwgMywgMjE1LCAxNDIsIDI5LCAzLCAyMTUsIDE0MywgMjksIDMsIDIxNSwgMTQwLCAKKyAgICAyOSwgMywgMjQ4LCAxMjEsIDI5LCAzLCAyNDgsIDEyMywgMjksIDMsIDI0OCwgMTI2LCAyOSwgMywgMjQ4LCAxMjQsIDI5LCAKKyAgICAzLCAyNDgsIDEyNSwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMzksIDI5LCAzLCAyNDYsIAorICAgIDQ1LCAyOSwgMywgMjQ2LCA0MywgMjksIDMsIDI0NiwgNDQsIDI5LCAzLCAyNDYsIDM3LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAKKyAgICAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAyMTEsIDI5LCAzLCAyNTAsIDIwOSwgMjksIDMsIAorICAgIDI1MCwgMjEwLCAyOSwgMywgMjUwLCAyMDcsIDI5LCAzLCAyNTIsIDExOSwgMjksIDMsIDI1MiwgOTgsIDI5LCAzLCAyNTIsIAorICAgIDExMCwgMjksIDMsIDI1MiwgMTE4LCAyOSwgMywgMjUyLCAxMTMsIDI5LCAzLCAyNTIsIDExNCwgMjksIDMsIDI1MiwgMTAyLCAKKyAgICAxODgsIDE4NywgMSwgMjM0LCAyNSwgMTg4LCAxODcsIDEsIDIyMSwgMjU1LCAxODgsIDE4NywgMSwgMjMzLCAxMTUsIDE4OCwgCisgICAgMTg3LCAxLCAyMzAsIDE3NywgMTg4LCAxODcsIDEsIDE5MSwgMTg4LCAxODcsIDEsIDE5OCwgMTg4LCAxODcsIDEsIDI1MCwgCisgICAgMTEwLCAxODgsIDE4NywgMSwgMjE2LCA5MSwgMTg4LCAxODcsIDEsIDIzNCwgMTA3LCAxODgsIDE4NywgMSwgMjI4LCAyNTUsIAorICAgIDE4OCwgMTg3LCAxLCAyMTYsIDE1MSwgMTg4LCAxODcsIDEsIDIxMiwgNjAsIDE4OCwgMTg3LCAxLCAyMTEsIDY5LCAxODgsIAorICAgIDE4NywgMSwgMjQwLCAyMjMsIDE4OCwgMTg3LCAxLCAyMTQsIDE5MCwgMTg4LCAxODcsIDEsIDc0LCAxODgsIDE4NywgMSwgCisgICAgMjI1LCAxNDUsIDE4OCwgMTg3LCAxLCAyNTMsIDIxMCwgMTg4LCAxODcsIDEsIDI0MiwgMTc0LCAxODgsIDE4NywgMSwgMjM1LCAKKyAgICAxMTgsIDE4OCwgMTg3LCAxLCAyMjMsIDE2OSwgMTg4LCAxODcsIDEsIDI1MiwgMTk5LCAxODgsIDE4NywgMSwgMjM1LCAxMDYsIAorICAgIDE4OCwgMTg3LCAxLCAyNDcsIDIyNywgMTg4LCAxODcsIDEsIDI0MiwgMjI4LCAxODgsIDE4NywgMSwgMjQ4LCAxMywgMTg4LCAKKyAgICAxODcsIDEsIDI1MiwgMjQsIDE4OCwgMTg3LCAxLCAyMzQsIDI2LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIzMywgMTE2LCAKKyAgICAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIzMCwgMTc4LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIyNiwgOTQsIDIzMiwgCisgICAgMTM0LCAxODgsIDE4NywgMSwgMjI5LCAyMzQsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjE2LCA5MiwgMjMyLCAxMzQsIAorICAgIDE4OCwgMTg3LCAxLCAyMjksIDAsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjQwLCAxNjEsIDIzMiwgMTM0LCAxODgsIDE4NywgCisgICAgMjUsIDUsIDIyNiwgMTk5LCAxODgsIDE4NywgMjUsIDUsIDIzNiwgNCwgMTg4LCAxODcsIDI1LCA1LCAyNTQsIDEzMCwgMTg4LCAKKyAgICAxODcsIDI1LCA1LCAyMTEsIDM4LCAxODgsIDE4NywgMjUsIDUsIDIxOSwgMzQsIDE4OCwgMTg3LCAyNSwgNSwgMjE0LCAxODcsIAorICAgIDE4OCwgMTg3LCAyNSwgNSwgMjUwLCAxMzEsIDE4OCwgMTg3LCAyNSwgNSwgMjI3LCAxOTUsIDE4OCwgMTg3LCAyNTAsIDEzMiwgCisgICAgMTg4LCAxODcsIDIzMiwgOTAsIDIzNSwgMTU2LCAxODgsIDE4NywgMjU0LCA1NCwgMjM1LCAxNTYsIDE4OCwgMTg3LCAyMSwgCisgICAgMjEwLCA4NiwgMTg4LCAxODcsIDIxLCAxMTEsIDE4OCwgMTg3LCAyMSwgMTA1LCAxODgsIDE4NywgMjEsIDE1OCwgMTg4LCAKKyAgICAxODcsIDIxLCAxNjEsIDE4OCwgMTg3LCAyMSwgMTkwLCAxODgsIDE4NywgMjEsIDE5NSwgMTg4LCAxODcsIDIxLCAxOTksIAorICAgIDE4OCwgMTg3LCAyMSwgMTk2LCAxODgsIDE4NywgMjEsIDIwMSwgMjQsIDE0MywgMjI3LCA4MSwgMjQsIDE0MywgMjI3LCA4NiwgCisgICAgMjQsIDE0MywgMjEwLCAyNDMsIDI0LCAxNDMsIDIxMCwgMjQyLCAyNCwgMTQzLCAyMTAsIDI0MSwgMjQsIDE0MywgMjE1LCAKKyAgICAyMywgMjQsIDE0MywgMjE1LCAyNiwgMjQsIDE0MywgMjEwLCAyMTAsIDI0LCAxNDMsIDIxMCwgMjA2LCAyNCwgMTQzLCAyNDUsIAorICAgIDYyLCAyNCwgMTQzLCAyNDUsIDYwLCAyNCwgMTQzLCAyNDUsIDYxLCAyNCwgMTQzLCAyNDUsIDU4LCAyNCwgMTQzLCAyNDAsIAorICAgIDE1MSwgMjQsIDE0MywgMjQwLCAxNTAsIDI0LCAxNDMsIDI0MCwgMTQ4LCAyNCwgMTQzLCAyNDAsIDE0OSwgMjQsIDE0MywgCisgICAgMjQwLCAxNTQsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0NiwgMjQsIDE0MywgMjQwLCAxNTYsIDI0LCAKKyAgICAxNDMsIDI1NCwgNDEsIDI0LCAxNDMsIDI1NCwgNDAsIDI0LCA5MCwgMjI4LCAyMjQsIDI0LCA5MCwgMjI4LCAyMzAsIDI0LCAKKyAgICA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE4LCAyMDUsIDI0LCA5MCwgMjE2LCA5NywgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIAorICAgIDIxNiwgOTQsIDI0LCA5MCwgMjE2LCAxMDAsIDI0LCA5MCwgMjE2LCAxMDEsIDI0LCA5MCwgMjE2LCA5MywgMjQsIDkwLCAKKyAgICAyMjMsIDgsIDI0LCA5MCwgMjIzLCAyMywgMjQsIDkwLCAyMTgsIDIxMiwgMjQsIDkwLCAyMjMsIDIwLCAyNCwgOTAsIDIyMywgCisgICAgMTAsIDI0LCA5MCwgMjIzLCAxMiwgMjQsIDkwLCAyMjIsIDI1NSwgMjQsIDkwLCAyMjMsIDAsIDI0LCA5MCwgMjM0LCAyMjQsIAorICAgIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjMwLCAyMTEsIDI0LCA5MCwgMjE4LCAyMTYsIDI0LCA5MCwgMjMwLCAyMTQsIAorICAgIDI0LCA5MCwgMjMwLCAyMjAsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIDg4LCAyNCwgOTAsIDIyNSwgOTIsIDI0LCAKKyAgICA5MCwgMjE4LCAyMTQsIDI0LCA5MCwgMjI1LCA4MiwgMjQsIDkwLCAyMjUsIDk2LCAyNCwgOTAsIDIyNSwgOTcsIDI0LCA5MCwgCisgICAgMjE5LCAxNDIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjE4LCAyMTAsIDI0LCA5MCwgMjE4LCAyMDgsIDI0LCA5MCwgCisgICAgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDgsIDI0LCA5MCwgMjE5LCAxNDksIDI0LCA5MCwgMjE5LCAxMzQsIDI0LCA5MCwgCisgICAgMjE5LCAxNDcsIDI0LCA5MCwgMjI2LCAzNCwgMjQsIDkwLCAyMjYsIDM1LCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAKKyAgICAyNSwgMjQsIDkwLCAyNTAsIDUyLCAyNCwgOTAsIDI1MCwgNTEsIDI0LCA5MCwgMjE4LCAyMjEsIDI0LCA5MCwgMjI1LCAxMzEsIAorICAgIDI0LCA5MCwgMjI1LCAxMzAsIDEwLCAxNCwgMjM4LCAzMSwgMTAsIDE0LCAyMzgsIDMwLCAxMCwgMTQsIDIzOCwgMjksIDEwLCAKKyAgICAxNCwgMjM4LCAyOCwgMTAsIDE0LCAyMzgsIDI3LCAxMCwgMTQsIDIzOCwgMjYsIDEwLCAxNCwgMjM4LCAyNSwgMTAsIDE0LCAKKyAgICAyMzgsIDI0LCAxMCwgMTQsIDIzOCwgMjMsIDEwLCAxNCwgMjM4LCAyMiwgMTAsIDE0LCAyMzgsIDIxLCAxMCwgMTQsIDIzOCwgCisgICAgMjAsIDEwLCAxNCwgMjM4LCAxOSwgMTAsIDE0LCAyMzgsIDE4LCAxMCwgMTQsIDIzOCwgMTcsIDEwLCAxNCwgMjM4LCAxNiwgCisgICAgMTAsIDE0LCAyMzgsIDE1LCAxMCwgMTQsIDIzOCwgMTQsIDEwLCAxNCwgMjM4LCAxMywgMTAsIDE0LCAyMzgsIDEyLCAxMCwgCisgICAgMTQsIDIzOCwgMTEsIDEwLCAxNCwgMjM4LCAxMCwgMTAsIDE0LCAyMzgsIDksIDEwLCAxNCwgMjM4LCA4LCAxMCwgMTQsIAorICAgIDIzOCwgNywgMTAsIDE0LCAyMzgsIDYsIDEwLCAxNCwgMjM4LCA1LCAxMCwgMTQsIDIzOCwgNCwgMTAsIDE0LCAyMzgsIDMsIAorICAgIDEwLCAxNCwgMjM4LCAyLCAxMCwgMTQsIDIzOCwgMSwgMTAsIDE0LCAyMzgsIDAsIDEwLCAxNCwgMjM3LCAyNTUsIDEwLCAxNCwgCisgICAgMjM3LCAyNTQsIDEwLCAxNCwgMjM3LCAyNTMsIDEwLCAxNCwgMjM3LCAyNTIsIDEwLCAxNCwgMjM3LCAyNTEsIDEwLCAxNCwgCisgICAgMjM3LCAyNTAsIDEwLCAxNCwgMjM3LCAyNDksIDEwLCAxNCwgMjM3LCAyNDgsIDEwLCAxNCwgMjM3LCAyNDcsIDEwLCAxNCwgCisgICAgMjM3LCAyNDYsIDEwLCAxNCwgMjM3LCAyNDUsIDEwLCAxNCwgMjM3LCAyNDQsIDEwLCAxNCwgMjM3LCAyNDMsIDEwLCAxNCwgCisgICAgMjM3LCAyNDIsIDEwLCAxNCwgMjM3LCAyNDEsIDEwLCAxNCwgMjM3LCAyNDAsIDEwLCAxNCwgMjM3LCAyMzksIDEwLCAxNCwgCisgICAgMjM3LCAyMzgsIDEwLCAxNCwgMjM3LCAyMzcsIDEwLCAxNCwgMjM3LCAyMzYsIDEwLCAxNCwgMjM3LCAyMzUsIDEwLCAxNCwgCisgICAgMjM3LCAyMzQsIDEwLCAxNCwgMjM3LCAyMzMsIDEwLCAxNCwgMjM3LCAyMzIsIDEwLCAxNCwgMjM3LCAyMzEsIDEwLCAxNCwgCisgICAgMjM3LCAyMzAsIDEwLCAxNCwgMjM3LCAyMjksIDEwLCAxNCwgMjM3LCAyMjgsIDEwLCAxNCwgMjM3LCAyMjcsIDEwLCAxNCwgCisgICAgMjM3LCAyMjYsIDEwLCAxNCwgMjM3LCAyMjUsIDEwLCAxNCwgMjM3LCAyMjQsIDEwLCAxNCwgMjM3LCAyMjMsIDEwLCAxNCwgCisgICAgMjM3LCAyMjIsIDEwLCAxNCwgMjM3LCAyMjEsIDEwLCAxNCwgMjM3LCAyMjAsIDEwLCAxNCwgMjM3LCAyMTksIDEwLCAxNCwgCisgICAgMjM3LCAyMTgsIDEwLCAxNCwgMjM3LCAyMTcsIDEwLCAxNCwgMjM3LCAyMTYsIDEwLCAxNCwgMjM3LCAyMTUsIDEwLCAxNCwgCisgICAgMjM3LCAyMTQsIDEwLCAxNCwgMjM3LCAyMTMsIDEwLCAxNCwgMjM3LCAyMTIsIDEwLCAxNCwgMjM3LCAyMTEsIDEwLCAxNCwgCisgICAgMjM3LCAyMTAsIDEwLCAxNCwgMjM3LCAyMDksIDEwLCAxNCwgMjM3LCAyMDgsIDEwLCAxNCwgMjM3LCAyMDcsIDEwLCAxNCwgCisgICAgMjM3LCAyMDYsIDEwLCAxNCwgMjM3LCAyMDUsIDEwLCAxNCwgMjM3LCAyMDQsIDEwLCAxNCwgMjM3LCAyMDMsIDEwLCAxNCwgCisgICAgMjM3LCAyMDIsIDEwLCAxNCwgMjM3LCAyMDEsIDEwLCAxNCwgMjM3LCAyMDAsIDEwLCAxNCwgMjM3LCAxOTksIDEwLCAxNCwgCisgICAgMjM3LCAxOTgsIDEwLCAxNCwgMjM3LCAxOTcsIDEwLCAxNCwgMjM3LCAxOTYsIDEwLCAxNCwgMjM3LCAxOTUsIDEwLCAxNCwgCisgICAgMjM3LCAxOTQsIDEwLCAxNCwgMjM3LCAxOTMsIDEwLCAxNCwgMjM3LCAxOTIsIDEwLCAxNCwgMjM3LCAxOTEsIDEwLCAxNCwgCisgICAgMjM3LCAxOTAsIDEwLCAxNCwgMjM3LCAxODksIDEwLCAxNCwgMjM3LCAxODgsIDEwLCAxNCwgMjM3LCAxODcsIDEwLCAxNCwgCisgICAgMjM3LCAxODYsIDEwLCAxNCwgMjM3LCAxODUsIDEwLCAxNCwgMjM3LCAxODQsIDEwLCAxNCwgMjM3LCAxODMsIDEwLCAxNCwgCisgICAgMjM3LCAxODIsIDEwLCAxNCwgMjM3LCAxODEsIDEwLCAxNCwgMjM3LCAxODAsIDEwLCAxNCwgMjM3LCAxNzksIDEwLCAxNCwgCisgICAgMjM3LCAxNzgsIDEwLCAxNCwgMjM3LCAxNzcsIDEwLCAxNCwgMjM3LCAxNzYsIDEwLCAxNCwgMjM3LCAxNzUsIDEwLCAxNCwgCisgICAgMjM3LCAxNzQsIDEwLCAxNCwgMjM3LCAxNzMsIDEwLCAxNCwgMjM3LCAxNzIsIDEwLCAxNCwgMjM3LCAxNzEsIDEwLCAxNCwgCisgICAgMjM3LCAxNzAsIDEwLCAxNCwgMjM3LCAxNjksIDEwLCAxNCwgMjM3LCAxNjgsIDEwLCAxNCwgMjM3LCAxNjcsIDEwLCAxNCwgCisgICAgMjM3LCAxNjYsIDEwLCAxNCwgMjM3LCAxNjUsIDEwLCAxNCwgMjM3LCAxNjQsIDEwLCAxNCwgMjM3LCAxNjMsIDEwLCAxNCwgCisgICAgMjM3LCAxNjIsIDEwLCAxNCwgMjM3LCAxNjEsIDEwLCAxNCwgMjM3LCAxNjAsIDEwLCAxNCwgMjM3LCAxNTksIDEwLCAxNCwgCisgICAgMjM3LCAxNTgsIDEwLCAxNCwgMjM3LCAxNTcsIDEwLCAxNCwgMjM3LCAxNTYsIDEwLCAxNCwgMjM3LCAxNTUsIDEwLCAxNCwgCisgICAgMjM3LCAxNTQsIDEwLCAxNCwgMjM3LCAxNTMsIDEwLCAxNCwgMjM3LCAxNTIsIDEwLCAxNCwgMjM3LCAxNTEsIDEwLCAxNCwgCisgICAgMjM3LCAxNTAsIDEwLCAxNCwgMjM3LCAxNDksIDEwLCAxNCwgMjM3LCAxNDgsIDEwLCAxNCwgMjM3LCAxNDcsIDEwLCAxNCwgCisgICAgMjM3LCAxNDYsIDEwLCAxNCwgMjM3LCAxNDUsIDEwLCAxNCwgMjM3LCAxNDQsIDEwLCAxNCwgMjM3LCAxNDMsIDEwLCAxNCwgCisgICAgMjM3LCAxNDIsIDEwLCAxNCwgMjM3LCAxNDEsIDEwLCAxNCwgMjM3LCAxNDAsIDEwLCAxNCwgMjM3LCAxMzksIDEwLCAxNCwgCisgICAgMjM3LCAxMzgsIDEwLCAxNCwgMjM3LCAxMzcsIDEwLCAxNCwgMjM3LCAxMzYsIDEwLCAxNCwgMjM3LCAxMzUsIDEwLCAxNCwgCisgICAgMjM3LCAxMzQsIDEwLCAxNCwgMjM3LCAxMzMsIDEwLCAxNCwgMjM3LCAxMzIsIDEwLCAxNCwgMjM3LCAxMzEsIDEwLCAxNCwgCisgICAgMjM3LCAxMzAsIDEwLCAxNCwgMjM3LCAxMjksIDEwLCAxNCwgMjM3LCAxMjgsIDEwLCAxNCwgMjM3LCAxMjcsIDEwLCAxNCwgCisgICAgMjM3LCAxMjYsIDEwLCAxNCwgMjM3LCAxMjUsIDEwLCAxNCwgMjM3LCAxMjQsIDEwLCAxNCwgMjM3LCAxMjMsIDEwLCAxNCwgCisgICAgMjM3LCAxMjIsIDEwLCAxNCwgMjM3LCAxMjEsIDEwLCAxNCwgMjM3LCAxMjAsIDEwLCAxNCwgMjM3LCAxMTksIDEwLCAxNCwgCisgICAgMjM3LCAxMTgsIDEwLCAxNCwgMjM3LCAxMTcsIDEwLCAxNCwgMjM3LCAxMTYsIDEwLCAxNCwgMjM3LCAxMTUsIDEwLCAxNCwgCisgICAgMjM3LCAxMTQsIDEwLCAxNCwgMjM3LCAxMTMsIDEwLCAxNCwgMjM3LCAxMTIsIDEwLCAxNCwgMjM3LCAxMTEsIDEwLCAxNCwgCisgICAgMjM3LCAxMTAsIDEwLCAxNCwgMjM3LCAxMDksIDEwLCAxNCwgMjM3LCAxMDgsIDEwLCAxNCwgMjM3LCAxMDcsIDEwLCAxNCwgCisgICAgMjM3LCAxMDYsIDEwLCAxNCwgMjM3LCAxMDUsIDEwLCAxNCwgMjM3LCAxMDQsIDEwLCAxNCwgMjM3LCAxMDMsIDEwLCAxNCwgCisgICAgMjM3LCAxMDIsIDEwLCAxNCwgMjM3LCAxMDEsIDEwLCAxNCwgMjM3LCAxMDAsIDEwLCAxNCwgMjM3LCA5OSwgMTAsIDE0LCAKKyAgICAyMzcsIDk4LCAxMCwgMTQsIDIzNywgOTcsIDEwLCAxNCwgMjM3LCA5NiwgMTAsIDE0LCAyMzcsIDk1LCAxMCwgMTQsIDIzNywgCisgICAgOTQsIDEwLCAxNCwgMjM3LCA5MywgMTAsIDE0LCAyMzcsIDkyLCAxMCwgMTQsIDIzNywgOTEsIDEwLCAxNCwgMjM3LCA5MCwgCisgICAgMTAsIDE0LCAyMzcsIDg5LCAxMCwgMTQsIDIzNywgODgsIDEwLCAxNCwgMjM3LCA4NywgMTAsIDE0LCAyMzcsIDg2LCAxMCwgCisgICAgMTQsIDIzNywgODUsIDEwLCAxNCwgMjM3LCA4NCwgMTAsIDE0LCAyMzcsIDgzLCAxMCwgMTQsIDIzNywgODIsIDEwLCAxNCwgCisgICAgMjM3LCA4MSwgMTAsIDE0LCAyMzcsIDgwLCAxMCwgMTQsIDIzNywgNzksIDEwLCAxNCwgMjM3LCA3OCwgMTAsIDE0LCAyMzcsIAorICAgIDc3LCAxMCwgMTQsIDIzNywgNzYsIDEwLCAxNCwgMjM3LCA3NSwgMTAsIDE0LCAyMzcsIDc0LCAxMCwgMTQsIDIzNywgNzMsIAorICAgIDEwLCAxNCwgMjM3LCA3MiwgMTAsIDE0LCAyMzcsIDcxLCAxMCwgMTQsIDIzNywgNzAsIDEwLCAxNCwgMjM3LCA2OSwgMTAsIAorICAgIDE0LCAyMzcsIDY4LCAxMCwgMTQsIDIzNywgNjcsIDEwLCAxNCwgMjM3LCA2NiwgMTAsIDE0LCAyMzcsIDY1LCAxMCwgMTQsIAorICAgIDIzNywgNjQsIDEwLCAxNCwgMjM3LCA2MywgMTAsIDE0LCAyMzcsIDYyLCAxMCwgMTQsIDIzNywgNjEsIDEwLCAxNCwgMjM3LCAKKyAgICA2MCwgMTAsIDE0LCAyMzcsIDU5LCAxMCwgMTQsIDIzNywgNTgsIDEwLCAxNCwgMjM3LCA1NywgMTAsIDE0LCAyMzcsIDU2LCAKKyAgICAxMCwgMTQsIDIzNywgNTUsIDEwLCAxNCwgMjM3LCA1NCwgMTAsIDE0LCAyMzcsIDUzLCAxMCwgMTQsIDIzNywgNTIsIDEwLCAKKyAgICAxNCwgMjM3LCA1MSwgMTAsIDE0LCAyMzcsIDUwLCAxMCwgMTQsIDIzNywgNDksIDEwLCAxNCwgMjM3LCA0OCwgMTAsIDE0LCAKKyAgICAyMzcsIDQ3LCAxMCwgMTQsIDIzNywgNDYsIDEwLCAxNCwgMjM3LCA0NSwgMTAsIDE0LCAyMzcsIDQ0LCAxMCwgMTQsIDIzNywgCisgICAgNDMsIDEwLCAxNCwgMjM3LCA0MiwgMTAsIDE0LCAyMzcsIDQxLCAxMCwgMTQsIDIzNywgNDAsIDEwLCAxNCwgMjM3LCAzOSwgCisgICAgMTAsIDE0LCAyMzcsIDM4LCAxMCwgMTQsIDIzNywgMzcsIDEwLCAxNCwgMjM3LCAzNiwgMTAsIDE0LCAyMzcsIDM1LCAxMCwgCisgICAgMTQsIDIzNywgMzQsIDEwLCAxNCwgMjM3LCAzMywgMTAsIDE0LCAyMzcsIDMyLCAxMCwgMTQsIDIzNywgMzEsIDEwLCAxNCwgCisgICAgMjM3LCAzMCwgMTAsIDE0LCAyMzcsIDI5LCAxMCwgMTQsIDIzNywgMjgsIDEwLCAxNCwgMjM3LCAyNywgMTAsIDE0LCAyMzcsIAorICAgIDI2LCAxMCwgMTQsIDIzNywgMjUsIDEwLCAxNCwgMjM3LCAyNCwgMTAsIDE0LCAyMzcsIDIzLCAxMCwgMTQsIDIzNywgMjIsIAorICAgIDEwLCAxNCwgMjM3LCAyMSwgMTAsIDE0LCAyMzcsIDIwLCAxMCwgMTQsIDIzNywgMTksIDEwLCAxNCwgMjM3LCAxOCwgMTAsIAorICAgIDE0LCAyMzcsIDE3LCAxMCwgMTQsIDIzNywgMTYsIDEwLCAxNCwgMjM3LCAxNSwgMTAsIDE0LCAyMzcsIDE0LCAxMCwgMTQsIAorICAgIDIzNywgMTMsIDEwLCAxNCwgMjM3LCAxMiwgMTAsIDE0LCAyMzcsIDExLCAxMCwgMTQsIDIzNywgMTAsIDEwLCAxNCwgMjM3LCAKKyAgICA5LCAxMCwgMTQsIDIzNywgOCwgMTAsIDE0LCAyMzcsIDcsIDEwLCAxNCwgMjM3LCA2LCAxMCwgMTQsIDIzNywgNSwgMTAsIAorICAgIDE0LCAyMzcsIDQsIDEwLCAxNCwgMjM3LCAzLCAxMCwgMTQsIDIzNywgMiwgMTAsIDE0LCAyMzcsIDEsIDEwLCAxNCwgMjM3LCAKKyAgICAwLCAxMCwgMTQsIDIzNiwgMjU1LCAxMCwgMTQsIDIzNiwgMjU0LCAxMCwgMTQsIDIzNiwgMjUzLCAxMCwgMTQsIDIzNiwgCisgICAgMjUyLCAxMCwgMTQsIDIzNiwgMjUxLCAxMCwgMTQsIDIzNiwgMjUwLCAxMCwgMTQsIDIzNiwgMjQ5LCAxMCwgMTQsIDIzNiwgCisgICAgMjQ4LCAxMCwgMTQsIDIzNiwgMjQ3LCAxMCwgMTQsIDIzNiwgMjQ2LCAxMCwgMTQsIDIzNiwgMjQ1LCAxMCwgMTQsIDIzNiwgCisgICAgMjQ0LCAxMCwgMTQsIDIzNiwgMjQzLCAxMCwgMTQsIDIzNiwgMjQyLCAxMCwgMTQsIDIzNiwgMjQxLCAxMCwgMTQsIDIzNiwgCisgICAgMjQwLCAxMCwgMTQsIDIzNiwgMjM5LCAxMCwgMTQsIDIzNiwgMjM4LCAxMCwgMTQsIDIzNiwgMjM3LCAxMCwgMTQsIDIzNiwgCisgICAgMjM2LCAxMCwgMTQsIDIzNiwgMjM1LCAxMCwgMTQsIDIzNiwgMjM0LCAxMCwgMTQsIDIzNiwgMjMzLCAxMCwgMTQsIDIzNiwgCisgICAgMjMyLCAxMCwgMTQsIDIzNiwgMjMxLCAxMCwgMTQsIDIzNiwgMjMwLCAxMCwgMTQsIDIzNiwgMjI5LCAxMCwgMTQsIDIzNiwgCisgICAgMjI4LCAxMCwgMTQsIDIzNiwgMjI3LCAxMCwgMTQsIDIzNiwgMjI2LCAxMCwgMTQsIDIzNiwgMjI1LCAxMCwgMTQsIDIzNiwgCisgICAgMjI0LCAxMCwgMTQsIDIzNiwgMjIzLCAxMCwgMTQsIDIzNiwgMjIyLCAxMCwgMTQsIDIzNiwgMjIxLCAxMCwgMTQsIDIzNiwgCisgICAgMjIwLCAxMCwgMTQsIDIzNiwgMjE5LCAxMCwgMTQsIDIzNiwgMjE4LCAxMCwgMTQsIDIzNiwgMjE3LCAxMCwgMTQsIDIzNiwgCisgICAgMjE2LCAxMCwgMTQsIDIzNiwgMjE1LCAxMCwgMTQsIDIzNiwgMjE0LCAxMCwgMTQsIDIzNiwgMjEzLCAxMCwgMTQsIDIzNiwgCisgICAgMjEyLCAxMCwgMTQsIDIzNiwgMjExLCAxMCwgMTQsIDIzNiwgMjEwLCAxMCwgMTQsIDIzNiwgMjA5LCAxMCwgMTQsIDIzNiwgCisgICAgMjA4LCAxMCwgMTQsIDIzNiwgMjA3LCAxMCwgMTQsIDIzNiwgMjA2LCAxMCwgMTQsIDIzNiwgMjA1LCAxMCwgMTQsIDIzNiwgCisgICAgMjA0LCAxMCwgMTQsIDIzNiwgMjAzLCAxMCwgMTQsIDIzNiwgMjAyLCAxMCwgMTQsIDIzNiwgMjAxLCAxMCwgMTQsIDIzNiwgCisgICAgMjAwLCAxMCwgMTQsIDIzNiwgMTk5LCAxMCwgMTQsIDIzNiwgMTk4LCAxMCwgMTQsIDIzNiwgMTk3LCAxMCwgMTQsIDIzNiwgCisgICAgMTk2LCAxMCwgMTQsIDIzNiwgMTk1LCAxMCwgMTQsIDIzNiwgMTk0LCAxMCwgMTQsIDIzNiwgMTkzLCAxMCwgMTQsIDIzNiwgCisgICAgMTkyLCAxMCwgMTQsIDIzNiwgMTkxLCAxMCwgMTQsIDIzNiwgMTkwLCAxMCwgMTQsIDIzNiwgMTg5LCAxMCwgMTQsIDIzNiwgCisgICAgMTg4LCAxMCwgMTQsIDIzNiwgMTg3LCAxMCwgMTQsIDIzNiwgMTg2LCAxMCwgMTQsIDIzNiwgMTg1LCAxMCwgMTQsIDIzNiwgCisgICAgMTg0LCAxMCwgMTQsIDIzNiwgMTgzLCAxMCwgMTQsIDIzNiwgMTgyLCAxMCwgMTQsIDIzNiwgMTgxLCAxMCwgMTQsIDIzNiwgCisgICAgMTgwLCAxMCwgMTQsIDIzNiwgMTc5LCAxMCwgMTQsIDIzNiwgMTc4LCAxMCwgMTQsIDIzNiwgMTc3LCAxMCwgMTQsIDIzNiwgCisgICAgMTc2LCAxMCwgMTQsIDIzNiwgMTc1LCAxMCwgMTQsIDIzNiwgMTc0LCAxMCwgMTQsIDIzNiwgMTczLCAxMCwgMTQsIDIzNiwgCisgICAgMTcyLCAxMCwgMTQsIDIzNiwgMTcxLCAxMCwgMTQsIDIzNiwgMTcwLCAxMCwgMTQsIDIzNiwgMTY5LCAxMCwgMTQsIDIzNiwgCisgICAgMTY4LCAxMCwgMTQsIDIzNiwgMTY3LCAxMCwgMTQsIDIzNiwgMTY2LCAxMCwgMTQsIDIzNiwgMTY1LCAxMCwgMTQsIDIzNiwgCisgICAgMTY0LCAxMCwgMTQsIDIzNiwgMTYzLCAxMCwgMTQsIDIzNiwgMTYyLCAxMCwgMTQsIDIzNiwgMTYxLCAxMCwgMTQsIDIzNiwgCisgICAgMTYwLCAxMCwgMTQsIDIzNiwgMTU5LCAxMCwgMTQsIDIzNiwgMTU4LCAxMCwgMTQsIDIzNiwgMTU3LCAxMCwgMTQsIDIzNiwgCisgICAgMTU2LCAxMCwgMTQsIDIzNiwgMTU1LCAxMCwgMTQsIDIzNiwgMTU0LCAxMCwgMTQsIDIzNiwgMTUzLCAxMCwgMTQsIDIzNiwgCisgICAgMTUyLCAxMCwgMTQsIDIzNiwgMTUxLCAxMCwgMTQsIDIzNiwgMTUwLCAxMCwgMTQsIDIzNiwgMTQ5LCAxMCwgMTQsIDIzNiwgCisgICAgMTQ4LCAxMCwgMTQsIDIzNiwgMTQ3LCAxMCwgMTQsIDIzNiwgMTQ2LCAxMCwgMTQsIDIzNiwgMTQ1LCAxMCwgMTQsIDIzNiwgCisgICAgMTQ0LCAxMCwgMTQsIDIzNiwgMTQzLCAxMCwgMTQsIDIzNiwgMTQyLCAxMCwgMTQsIDIzNiwgMTQxLCAxMCwgMTQsIDIzNiwgCisgICAgMTQwLCAxMCwgMTQsIDIzNiwgMTM5LCAxMCwgMTQsIDIzNiwgMTM4LCAxMCwgMTQsIDIzNiwgMTM3LCAxMCwgMTQsIDIzNiwgCisgICAgMTM2LCAxMCwgMTQsIDIzNiwgMTM1LCAxMCwgMTQsIDIzNiwgMTM0LCAxMCwgMTQsIDIzNiwgMTMzLCAxMCwgMTQsIDIzNiwgCisgICAgMTMyLCAxMCwgMTQsIDIzNiwgMTMxLCAxMCwgMTQsIDIzNiwgMTMwLCAxMCwgMTQsIDIzNiwgMTI5LCAxMCwgMTQsIDIzNiwgCisgICAgMTI4LCAxMCwgMTQsIDIzNiwgMTI3LCAxMCwgMTQsIDIzNiwgMTI2LCAxMCwgMTQsIDIzNiwgMTI1LCAxMCwgMTQsIDIzNiwgCisgICAgMTI0LCAxMCwgMTQsIDIzNiwgMTIzLCAxMCwgMTQsIDIzNiwgMTIyLCAxMCwgMTQsIDIzNiwgMTIxLCAxMCwgMTQsIDIzNiwgCisgICAgMTIwLCAxMCwgMTQsIDIzNiwgMTE5LCAxMCwgMTQsIDIzNiwgMTE4LCAxMCwgMTQsIDIzNiwgMTE3LCAxMCwgMTQsIDIzNiwgCisgICAgMTE2LCAxMCwgMTQsIDIzNiwgMTE1LCAxMCwgMTQsIDIzNiwgMTE0LCAxMCwgMTQsIDIzNiwgMTEzLCAxMCwgMTQsIDIzNiwgCisgICAgMTEyLCAxMCwgMTQsIDIzNiwgMTExLCAxMCwgMTQsIDIzNiwgMTEwLCAxMCwgMTQsIDIzNiwgMTA5LCAxMCwgMTQsIDIzNiwgCisgICAgMTA4LCAxMCwgMTQsIDIzNiwgMTA3LCAxMCwgMTQsIDIzNiwgMTA2LCAxMCwgMTQsIDIzNiwgMTA1LCAxMCwgMTQsIDIzNiwgCisgICAgMTA0LCAxMCwgMTQsIDIzNiwgMTAzLCAxMCwgMTQsIDIzNiwgMTAyLCAxMCwgMTQsIDIzNiwgMTAxLCAxMCwgMTQsIDIzNiwgCisgICAgMTAwLCAxMCwgMTQsIDIzNiwgOTksIDEwLCAxNCwgMjM2LCA5OCwgMTAsIDE0LCAyMzYsIDk3LCAxMCwgMTQsIDIzNiwgOTYsIAorICAgIDEwLCAxNCwgMjM2LCA5NSwgMTAsIDE0LCAyMzYsIDk0LCAxMCwgMTQsIDIzNiwgOTMsIDEwLCAxNCwgMjM2LCA5MiwgMTAsIAorICAgIDE0LCAyMzYsIDkxLCAxMCwgMTQsIDIzNiwgOTAsIDEwLCAxNCwgMjM2LCA4OSwgMTAsIDE0LCAyMzYsIDg4LCAxMCwgMTQsIAorICAgIDIzNiwgODcsIDEwLCAxNCwgMjM2LCA4NiwgMTAsIDE0LCAyMzYsIDg1LCAxMCwgMTQsIDIzNiwgODQsIDEwLCAxNCwgMjM2LCAKKyAgICA4MywgMTAsIDE0LCAyMzYsIDgyLCAxMCwgMTQsIDIzNiwgODEsIDEwLCAxNCwgMjM2LCA4MCwgMTAsIDE0LCAyMzYsIDc5LCAKKyAgICAxMCwgMTQsIDIzNiwgNzgsIDEwLCAxNCwgMjM2LCA3NywgMTAsIDE0LCAyMzYsIDc2LCAxMCwgMTQsIDIzNiwgNzUsIDEwLCAKKyAgICAxNCwgMjM2LCA3NCwgMTAsIDE0LCAyMzYsIDczLCAxMCwgMTQsIDIzNiwgNzIsIDcsIDQsIDI3LCAyNDQsIDEzMywgNywgNCwgCisgICAgMjcsIDI0NCwgMTI5LCA3LCA0LCAyNywgMjQ0LCA4NCwgNywgNCwgMjcsIDI0NCwgMTMyLCA3LCA0LCAyNywgMjQ0LCAxMzEsIAorICAgIDcsIDQsIDI3LCAyMDAsIDIyMiwgOTQsIDIxNywgMTUzLCA3LCA0LCAyNywgMjE4LCAxNzAsIDE1MCwgNCwgMjcsIDIzMSwgCisgICAgNjQsIDIyOCwgNDQsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDI0NSwgMjIxLCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMzUsIAorICAgIDIzNCwgMTUwLCA0LCAyNywgMjEzLCAxODAsIDIyOCwgNDQsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDIxMSwgMTYwLCA5NCwgMSwgCisgICAgMjEwLCAyMzQsIDIsIDI0MSwgMTY1LCA5NCwgMjI1LCAxNCwgMjM1LCA1NiwgMjE0LCAxMSwgOTQsIDI3LCAyMTEsIDYsIAorICAgIDIxMCwgMjM0LCAyMTAsIDIzNCwgMjI1LCAyNDMsIDk0LCAxLCAyNTQsIDE0NywgMjUzLCAxNzAsIDk0LCAxLCAyMTEsIDI0NywgCisgICAgMjU0LCAxNzksIDk0LCAxLCAyMTEsIDI0NywgMjQ4LCAxOTcsIDk0LCAxLCAyMTEsIDI0NywgMjQxLCAyNDUsIDk0LCAxLCAKKyAgICAyMTEsIDI0NywgMjM1LCAwLCA5NCwgMSwgMjExLCAyNDcsIDIzMywgMTAwLCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIAorICAgIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIyMywgNzAsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOSwgOTQsIDEsIDI1NCwgMTQ3LCAKKyAgICA5NiwgNTAsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDEsIDIyMCwgMjMsIDIsIDIxOSwgCisgICAgMTYxLCAyNDcsIDEyOCwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE2LCAyMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAKKyAgICAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIxOSwgMTYxLCAyNDcsIDEyOCwgOTQsIDEsIDEwOSwgMiwgMjI1LCAyNDMsIAorICAgIDk0LCAxLCAxMDksIDIsIDIyNCwgNzksIDk0LCAxLCAxMDksIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjUyLCAzNywgMiwgMjQ4LCAKKyAgICAyMTUsIDk0LCAxLCAyNDIsIDIwOSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyNDgsIDE5OCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAKKyAgICAyNDEsIDI0NiwgMiwgMjMxLCAxNzYsIDk0LCAxLCAyMTQsIDQsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCA5OCwgMiwgCisgICAgMjQ4LCAyMTUsIDk0LCAxLCAyMTYsIDIzMiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMTUsIDk0LCAKKyAgICAxLCA0MCwgMjM1LCAxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzMsIDEwMSwgCisgICAgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzEsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyNywgMTk5LCAyLCAyNDgsIDIxNSwgCisgICAgOTQsIDEsIDIyMSwgMjUyLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDQwLCAyMjUsIDIyNSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAKKyAgICAyMjUsIDIyNSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTUsIDE4MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjQsIDQzLCAyLCAKKyAgICAyNDgsIDIxNSwgOTQsIDEsIDIyMywgNzEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjIwLCAyMywgMiwgMjQ4LCAyMTUsIDk0LCAKKyAgICAxLCAyMTcsIDQwLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxNCwgNCwgMiwgMjQxLCA2OCwgOTQsIDEsIDI1MiwgMzcsIDIsIAorICAgIDIyMywgMTcyLCA5NCwgMSwgMjM1LCAxLCAyLCAyMjMsIDE3MiwgOTQsIDEsIDIyNSwgMjI1LCAyLCAyMjMsIDE3MiwgOTQsIAorICAgIDI3LCAxMDksIDIzMywgMTAwLCA5LCAxLCAxMDksIDIxMiwgNDcsIDUzLCAxNywgOSwgMSwgMTA5LCAyMTIsIDQ3LCA0MCwgCisgICAgMTcsIDksIDEsIDI1MiwgNzMsIDUzLCAxNywgOSwgMSwgMjUyLCA3MywgNDAsIDE3LCA5LCAxLCAyNTIsIDczLCA2NSwgMTcsIAorICAgIDksIDEsIDI1MiwgNzMsIDE0NywgMTcsIDksIDEsIDIyNSwgMjA5LCA1MywgMTcsIDksIDEsIDIyNSwgMjA5LCA0MCwgMTcsIAorICAgIDksIDEsIDIyNSwgMjA5LCA2NSwgMTcsIDksIDEsIDIyNSwgMjA5LCAxNDcsIDE3LCA5LCAxLCAyNTIsIDYxLCA1MywgMTcsIAorICAgIDksIDEsIDI1MiwgNjEsIDQwLCAxNywgOSwgMSwgMjUyLCA2MSwgNjUsIDE3LCA5LCAxLCAyNTIsIDYxLCAxNDcsIDE3LCA5LCAKKyAgICAxLCAyMTUsIDE0OCwgNTMsIDE3LCA5LCAxLCAyMTUsIDE0OCwgNDAsIDE3LCA5LCAxLCAyMTUsIDE0OCwgNjUsIDE3LCA5LCAKKyAgICAxLCAyMTUsIDE0OCwgMTQ3LCAxNywgOSwgMSwgMjE3LCA3LCA1MywgMTcsIDksIDEsIDIxNywgNywgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTcsIDcsIDY1LCAxNywgOSwgMSwgMjE3LCA3LCAxNDcsIDE3LCA5LCAxLCAyMTUsIDE1MCwgNTMsIDE3LCA5LCAxLCAyMTUsIAorICAgIDE1MCwgNDAsIDE3LCA5LCAxLCAyMTUsIDE1MCwgNjUsIDE3LCA5LCAxLCAyMTUsIDE1MCwgMTQ3LCAxNywgOSwgMSwgMjEzLCAKKyAgICAyNDksIDUzLCAxNywgOSwgMSwgMjEzLCAyNDksIDQwLCAxNywgOSwgMSwgMjEzLCAyNDksIDY1LCAxNywgOSwgMSwgMjEzLCAKKyAgICAyNDksIDE0NywgMTcsIDksIDEsIDIyNSwgMjA3LCA1MywgMTcsIDksIDEsIDIyNSwgMjA3LCA0MCwgMTcsIDksIDEsIDIyNSwgCisgICAgMjA3LCA2NSwgMTcsIDksIDEsIDIyNSwgMjA3LCAxNDcsIDE3LCA5LCAxLCAyNDYsIDUyLCA1MywgMTcsIDksIDEsIDI0NiwgCisgICAgNTIsIDQwLCAxNywgOSwgMSwgMjQ2LCA1MiwgNjUsIDE3LCA5LCAxLCAyNDYsIDUyLCAxNDcsIDE3LCA5LCAxLCAyMjcsIAorICAgIDE1OCwgNTMsIDE3LCA5LCAxLCAyMjcsIDE1OCwgNDAsIDE3LCA5LCAxLCAyMjcsIDE1OCwgNjUsIDE3LCA5LCAxLCAyMjcsIAorICAgIDE1OCwgMTQ3LCAxNywgOSwgMSwgMjE3LCAyOCwgNTMsIDE3LCA5LCAxLCAyMTcsIDI4LCA0MCwgMTcsIDksIDEsIDIxNywgCisgICAgMjgsIDY1LCAxNywgOSwgMSwgMjE3LCAyOCwgMTQ3LCAxNywgOSwgMSwgMjE3LCAyNiwgNTMsIDE3LCA5LCAxLCAyMTcsIDI2LCAKKyAgICA0MCwgMTcsIDksIDEsIDIxNywgMjYsIDY1LCAxNywgOSwgMSwgMjE3LCAyNiwgMTQ3LCAxNywgOSwgMSwgMjQ4LCAxNDEsIAorICAgIDUzLCAxNywgOSwgMSwgMjQ4LCAxNDEsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMTAsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMTAsIAorICAgIDQwLCAxNywgOSwgMSwgMjQ2LCA3OSwgNTMsIDE3LCA5LCAxLCAyNDYsIDc5LCA0MCwgMTcsIDksIDEsIDI0OCwgMTM5LCA1MywgCisgICAgMTcsIDksIDEsIDI0OCwgMTM5LCA0MCwgMTcsIDksIDEsIDIzNSwgMTI3LCA1MywgMTcsIDksIDEsIDIzNSwgMTI3LCA0MCwgCisgICAgMTcsIDksIDEsIDIyMiwgMTc0LCA1MywgMTcsIDksIDEsIDIyMiwgMTc0LCA0MCwgMTcsIDksIDEsIDIzNCwgMTgxLCA1MywgCisgICAgMTcsIDksIDEsIDIzNCwgMTgxLCA0MCwgMTcsIDksIDEsIDIzNCwgMTgxLCA2NSwgMTcsIDksIDEsIDIzNCwgMTgxLCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDMsIDEzMCwgNTMsIDE3LCA5LCAxLCAyNDMsIDEzMCwgNDAsIDE3LCA5LCAxLCAyNDMsIDEzMCwgNjUsIAorICAgIDE3LCA5LCAxLCAyNDMsIDEzMCwgMTQ3LCAxNywgOSwgMSwgMjQyLCAxMDksIDUzLCAxNywgOSwgMSwgMjQyLCAxMDksIDQwLCAKKyAgICAxNywgOSwgMSwgMjQyLCAxMDksIDY1LCAxNywgOSwgMSwgMjQyLCAxMDksIDE0NywgMTcsIDksIDEsIDIyOSwgOCwgNTMsIAorICAgIDE3LCA5LCAxLCAyMjksIDgsIDQwLCAxNywgOSwgMSwgMjI5LCA4LCA2NSwgMTcsIDksIDEsIDIyOSwgOCwgMTQ3LCAxNywgOSwgCisgICAgMSwgMjI4LCA2OCwgMjQyLCAyMjYsIDUzLCAxNywgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjYsIDQwLCAxNywgOSwgMSwgMjIyLCAKKyAgICAyMTcsIDUzLCAxNywgOSwgMSwgMjIyLCAyMTcsIDQwLCAxNywgOSwgMSwgMjIyLCAyMTcsIDY1LCAxNywgOSwgMSwgMjIyLCAKKyAgICAyMTcsIDE0NywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgNzIsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCAKKyAgICA3MiwgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAKKyAgICA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDE0NywgCisgICAgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDQwLCAxNywgCisgICAgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA2NSwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgMTQ3LCAxNywgOSwgCisgICAgMSwgNzcsIDI1MiwgMTQxLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgNDAsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIAorICAgIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDE2LCA1OSwgCisgICAgNDgsIDksIDE2LCA1OSwgNTEsIDksIDE2LCAxMTMsIDE3MCwgNDgsIDksIDE2LCAxMTMsIDE3MCwgNTEsIDksIDE2LCAxMzQsIAorICAgIDE3MCwgNDgsIDksIDE2LCAxMzQsIDE3MCwgNTEsIDksIDE2LCAxMzQsIDE3MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAKKyAgICAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA1MSwgOSwgMTYsIDI0NCwgMTksIDE3MCwgNDgsIDksIDE2LCAyNDQsIAorICAgIDE5LCAxNzAsIDUxLCA5LCAxNiwgNTIsIDY3LCAyNTIsIDE0OSwgNTEsIDksIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAKKyAgICA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA1MSwgOSwgMTYsIDIyMiwgMjM2LCA5LCAxNiwgNCwgMjE3LCA4MiwgNDgsIDksIAorICAgIDE2LCA0LCAyMTcsIDgyLCA1MSwgOSwgMSwgMjI5LCA4NSwgNTMsIDE3LCA5LCAxLCAyMjksIDg1LCA0MCwgMTcsIDksIDEsIAorICAgIDIyOSwgODUsIDY1LCAxNywgOSwgMSwgMjI5LCA4NSwgMTQ3LCAxNywgOSwgMSwgMTA0LCA1MywgMTcsIDksIDEsIDEwNCwgCisgICAgNDAsIDE3LCA5LCAxLCAyMjYsIDIzOSwgNTMsIDE3LCA5LCAxLCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAxLCAyMTAsIDIxMywgCisgICAgNTMsIDE3LCA5LCAxLCAyMTAsIDIxMywgNDAsIDE3LCA5LCAxLCAxMDQsIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMjE0LCAKKyAgICAwLCA1MywgMTcsIDksIDEsIDIxNCwgMCwgNDAsIDE3LCA5LCAxLCAyMzQsIDc5LCAyMjYsIDIzOSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMzQsIDc5LCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAxLCAyMzQsIDc5LCAyMTAsIDIxMywgNTMsIDE3LCA5LCAxLCAyMzQsIAorICAgIDc5LCAyMTAsIDIxMywgNDAsIDE3LCA5LCAxLCAxNjAsIDUzLCAxNywgOSwgMSwgMTYwLCA0MCwgMTcsIDksIDEsIDE2MCwgCisgICAgNjUsIDE3LCA5LCAxLCAxNjAsIDE0NywgMTcsIDksIDEsIDIxNCwgMjA3LCAyMzQsIDE5MiwgMjM0LCA3OSwgMTA5LCAyMzEsIAorICAgIDE5OCwgNjUsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAxOTgsIDE0NywgMTcsIAorICAgIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjU0LCAyNTMsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAKKyAgICAyNTQsIDI1MywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzEsIDUzLCAxNywgOSwgMjcsIDc3LCAKKyAgICAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA0LCA1MywgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA0LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIAorICAgIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDIxMCwgMjEzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAyMTMsIDQwLCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDY1LCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgCisgICAgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAKKyAgICAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA1MywgMTcsIDksIDEsIDI0NCwgMTc2LCAKKyAgICA3NywgNDAsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCAxNDcsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEyMiwgNTMsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAKKyAgICAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAKKyAgICAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAKKyAgICAxMzYsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMDksIDIzMSwgCisgICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDUzLCAKKyAgICAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIxNiwgCisgICAgMTk0LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIxNiwgMTk0LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIAorICAgIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMzQsIDEzNiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzQsIAorICAgIDEzNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKKyAgICAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDY2LCA1MywgCisgICAgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTIyLCA1MywgMTcsIDksIAorICAgIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjE3LCA4MiwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjEwLCAxMTIsIAorICAgIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIAorICAgIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjQ0LCAxNTEsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNzcsIDUzLCAxNywgOSwgCisgICAgMjcsIDIyNCwgODUsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyNCwgCisgICAgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzUsIAorICAgIDEsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTIyLCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgMTA5LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDUzLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjMzLCAxMDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTIyLCA1MywgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNTMsIDE3LCA5LCAKKyAgICAyNywgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjI4LCAKKyAgICA2OCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTA5LCAKKyAgICAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxNTEsIAorICAgIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDEwOSwgMjMxLCAKKyAgICAxOTgsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE1MSwgNTMsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA3NywgMiwgNzcsIDUzLCAKKyAgICAxNywgOSwgMjcsIDIxNiwgMjA0LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIDIyMywgOTksIDIsIDIxOCwgMjQsIAorICAgIDEwOSwgNTMsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDgsIDE5MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjM0LCAyMTAsIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDI0NCwgMTc0LCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjM0LCAyMTIsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTAsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgCisgICAgMjUyLCA2MywgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTIsIAorICAgIDYzLCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyNTIsIDYzLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIyOCwgCisgICAgNjgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMTAsIAorICAgIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjI4LCA2OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgMTA5LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgNDAsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgNjYsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMDksIDIzMSwgMTk4LCAyLCAKKyAgICAyMTgsIDI0LCAxMDksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjEwLCAKKyAgICAxMDksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAKKyAgICAxODIsIDcyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDE1MSwgCisgICAgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIAorICAgIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxNywgCisgICAgOSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMTUxLCAyLCAxMjIsIDY1LCAKKyAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMjIsIDI5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjIsIAorICAgIDI5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAorICAgIDEyMiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgCisgICAgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjEwLCAxMTIsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDI0MiwgMjUyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAKKyAgICAxNTEsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIAorICAgIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMzUsIDEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjM1LCAxLCAyLCAyMzMsIDEwOSwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAKKyAgICAxMDksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIAorICAgIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMzQsIAorICAgIDEzNiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAKKyAgICA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDY1LCAxNywgCisgICAgOSwgMjcsIDI0MSwgMjI2LCAyLCAyMTgsIDI0LCAxMDksIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAKKyAgICA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIAorICAgIDY2LCAxNDcsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgCisgICAgMTA5LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMTQ3LCAKKyAgICAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIAorICAgIDksIDI3LCA3NywgMiwgNjYsIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDI0OCwgMTkzLCAxNDcsIDE3LCA5LCAyNywgCisgICAgMjIwLCA5NiwgMiwgMjM0LCAyMTIsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyMTcsIDgyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDI1NCwgMjA2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKKyAgICAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIAorICAgIDE3LCA5LCAyNywgMTIyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAorICAgIDI3LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjM0LCAxMzYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMjIsIDI5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0OCwgMjI1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAKKyAgICAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjIzLCA5OSwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIyMywgCisgICAgOTksIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMjMsIAorICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0MiwgCisgICAgMjUyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjIwLCA2MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTIyLCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIyMywgOTksIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMjMsIDk5LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyMTcsIDgyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgCisgICAgMTY5LCAyLCAxMjIsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMjAsIAorICAgIDYyLCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAKKyAgICAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjEwLCAxMTIsIDIsIAorICAgIDY2LCAxNDcsIDE3LCA5LCAyNywgMTA5LCAyLCAyNDQsIDE3MiwgNDAsIDE3LCA5LCAyNywgMTA5LCAyLCAyNDQsIDE3MiwgCisgICAgNTMsIDE3LCAyMjYsIDE1MCwgNDMsIDIyNiwgNywgMjI2LCAxNTAsIDQ0LCAyMjYsIDcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCisgICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCAKKyAgICA5LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDEyMiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIAorICAgIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCA2NiwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCAyLCAKKyAgICAxMjIsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAKKyAgICA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIAorICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgCisgICAgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDIzNCwgMTM2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCA2NiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ4LCAKKyAgICAyMjUsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgCisgICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTQsIAorICAgIDIwNiwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgNjYsIDQwLCAKKyAgICAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgCisgICAgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNDAsIDE3LCA5LCAKKyAgICAyNywgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgCisgICAgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgCisgICAgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDY2LCAKKyAgICAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAKKyAgICAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIAorICAgIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgCisgICAgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0MSwgCisgICAgMjI2LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMjgsIDY4LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgCisgICAgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI4LCAKKyAgICA2OCwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIAorICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIAorICAgIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjIsIAorICAgIDI5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyNDgsIDIyNSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCA3NywgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgNjYsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjgsIDY4LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA3NywgNDAsIAorICAgIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTIyLCAKKyAgICA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAKKyAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAKKyAgICAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDY2LCAyLCAKKyAgICAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNTIsIAorICAgIDYzLCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjU0LCAyMDYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjIyLCA2LCAyMTQsIDEyOCwgMjUzLCAyNDYsIDIzNCwgMTAsIDIxOCwgMTMyLCA1LCA1MywgMTcsIAorICAgIDksIDI3LCAyMjQsIDgxLCAyMTQsIDEyOCwgMjUzLCAyNDYsIDIzNCwgMTAsIDIxOCwgMTMyLCA1LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNTQsIDE2MiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxOTIsIDUzLCAxNywgOSwgMjcsIDIzMCwgMTU4LCA1MywgMTcsIDksIAorICAgIDI3LCAyMjIsIDcsIDUzLCAxNywgOSwgMjcsIDIyMywgMTQ2LCA1MywgMTcsIDksIDI3LCAyNTQsIDE4MSwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjEyLCA0OSwgNTMsIDE3LCA5LCAyNywgMjIyLCA2LCA1MywgMTcsIDksIDI3LCAyMjIsIDUsIDI1NCwgMTgxLCAyMTIsIAorICAgIDQ4LCA5LCAyNywgMjM1LCAxNDAsIDIyMywgMzcsIDUwLCA5LCAyNywgMjUxLCAyMzgsIDI1NCwgNDcsIDI1NCwgNDgsIDQ1LCAKKyAgICAyMjEsIDE1OCwgNDUsIDIyMSwgNDcsIDQ1LCAyMjAsIDIzNSwgNDUsIDIyMCwgMjI0LCA0NSwgMjIwLCAyMTMsIDQ1LCAyMjAsIAorICAgIDIwMiwgNDUsIDIyMCwgMTkxLCA0NSwgMjIwLCAxODAsIDQ1LCAyMjAsIDE2OSwgNDUsIDIyMSwgMTU3LCA0NSwgMjIxLCAKKyAgICAxNDYsIDQ1LCAyMjEsIDEzNSwgNDUsIDIyMSwgMTI0LCA0NSwgMjIxLCAxMTMsIDQ1LCAyMjEsIDEwMiwgNDUsIDIyMSwgOTEsIAorICAgIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDI0OSwgMjI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTAsIDI0OSwgCisgICAgMjI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgMjQ5LCAyMzQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyMCwgMTUyLCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCAyNDUsIDM5LCA3OSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjI0LCAxNiwgNzksIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyNiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAKKyAgICA0NCwgNzEsIDIzMywgMjYsIDI1MSwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMDMsIDI0NSwgMTcxLCAzOCwgCisgICAgMjcsIDQzLCAyNDIsIDM0LCAzOCwgMjcsIDQ0LCAyNDIsIDM0LCAzOCwgNTIsIDIxNiwgOTAsIDQzLCAyNDIsIDM0LCAzOCwgCisgICAgNTIsIDIxNiwgOTAsIDQ0LCAyNDIsIDM0LCAzOCwgMjMxLCAyMzgsIDQzLCAyNDIsIDM0LCAzOCwgMjMxLCAyMzgsIDQ0LCAKKyAgICAyNDIsIDM0LCAzOCwgMjQ5LCAyMDUsIDIzMSwgMjM3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIAorICAgIDYyLCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDI0NSwgMTU5LCAyNDgsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTIxLCAyMzIsIDIxOSwgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIDIxOSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCisgICAgNDMsIDIyNiwgNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDIyNiwgNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDMsIDI0OSwgMTA3LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDEwNywgMTI3LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDg1LCAyMzMsIDI2LCAKKyAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA4NSwgMjMzLCAyNiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgCisgICAgMzEsIDY3LCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA1MiwgMjU0LCAKKyAgICAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDQ0LCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjQ5LCAxNjksIAorICAgIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDcxLCAyNDksIDE2OSwgCisgICAgMTI3LCAyMjAsIDEzMywgMjQ3LCAxMjgsIDcxLCAyMjAsIDEzMywgMjQ3LCAxMjgsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCA0MiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNDIsIDEyNywgMjQ4LCAxNjMsIDIyNiwgCisgICAgMTIzLCAyNTAsIDE4MCwgMjI2LCAxMjMsIDIxMiwgMzIsIDIyNiwgMTIzLCA1MiwgMjEyLCAzMiwgMjI2LCAxMjMsIDI0OCwgCisgICAgMTYzLCAxMjEsIDIzMiwgMjE5LCAyNTAsIDE4MCwgMTIxLCAyMzIsIDIxOSwgMjEyLCAzMiwgMTIxLCAyMzIsIDIxOSwgNCwgCisgICAgMjQ5LCAyMjcsIDQsIDExMCwgMjQ5LCAyMjcsIDQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNCwgMjIwLCAxNTIsIDQsIDI0OSwgCisgICAgMjM0LCA0LCAyMjQsIDE2LCA3OSwgNCwgMjQ1LCAzOSwgNzksIDQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgNCwgNDMsIDIyNiwgCisgICAgNywgNCwgNDQsIDIyNiwgNywgNCwgNDMsIDI0OSwgMTA3LCAxMjcsIDQsIDQ0LCAyNDksIDEwNywgMTI3LCA0LCA0MywgMjE2LCAKKyAgICA3LCAyMjAsIDU1LCAxMjcsIDQsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNCwgNTQsIDUwLCA0LCAyNTQsIDEzNCwgNCwgCisgICAgMjUzLCAyMjQsIDQsIDk2LCA1MCwgNCwgMjQwLCAxNzQsIDQsIDIzMywgMjEsIDUwLCA0LCAyNDIsIDEzNywgNTAsIDQsIAorICAgIDI0NSwgMTA2LCA1MCwgNCwgMjIzLCA1MywgMjE5LCA0OCwgNCwgMjQ3LCAxNDAsIDUwLCA0LCAyMjUsIDE4NSwgNTAsIDQsIAorICAgIDI0OSwgMjI1LCAyNTMsIDIxNCwgOSwgMjQ0LCAxNzIsIDUzLCAxNywgOSwgMjE3LCA0NSwgMiwgMjQ0LCAxNzIsIDQ4LCA5LCAKKyAgICAyNDgsIDE5MSwgNTMsIDE3LCA5LCAyMTcsIDc5LCAyNDQsIDksIDksIDIzNCwgMjEwLCA1MywgMTcsIDksIDI0NCwgMTc0LCAKKyAgICA1MywgMTcsIDksIDI0NCwgMTc0LCAxNDcsIDE3LCA5LCAyNDgsIDE5MywgNTMsIDE3LCA5LCAyNDgsIDE5MywgMTQ3LCAxNywgCisgICAgOSwgMjM0LCAyMTIsIDUzLCAxNywgOSwgMjM0LCAyMTIsIDE0NywgMTcsIDksIDIyMCwgOTYsIDUzLCAxNywgOSwgMjIwLCAKKyAgICA5NiwgMTQ3LCAxNywgOSwgMjE4LCA0NywgNTMsIDE3LCA5LCAyMTgsIDQ3LCAxNDcsIDE3LCA5LCAxLCAxODIsIDUzLCAxNywgCisgICAgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDQwLCAxNywgCisgICAgOSwgMSwgMTA5LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxMiwgMzEsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMTA5LCAyLCAKKyAgICAxODIsIDI1MiwgNTEsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMSwgNzcsIDIsIAorICAgIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDY1LCAKKyAgICAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDE0NywgMTcsIDksIDEsIDEwOSwgNTMsIDE3LCA5LCAxLCAxMDksIDQwLCAxNywgCisgICAgOSwgMSwgMjUyLCA2MywgNTMsIDE3LCA5LCAxLCAyNTIsIDYzLCA0MCwgMTcsIDksIDEsIDI1MiwgNjMsIDY1LCAxNywgOSwgCisgICAgMSwgMjUyLCA2MywgMTQ3LCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIDE3MCwgNTMsIDE3LCA5LCAxLCAyMTcsIDksIDIzMSwgCisgICAgMTcwLCA0MCwgMTcsIDksIDEsIDIxNywgOSwgNTMsIDE3LCA5LCAxLCAyMTcsIDksIDQwLCAxNywgOSwgMSwgMjE3LCA5LCAKKyAgICA2NSwgMTcsIDksIDEsIDIxNywgOSwgMTQ3LCAxNywgOSwgMSwgMjE2LCAxOTQsIDUzLCAxNywgOSwgMSwgMjE2LCAxOTQsIAorICAgIDQwLCAxNywgOSwgMSwgMjE2LCAxOTQsIDY1LCAxNywgOSwgMSwgMjE2LCAxOTQsIDE0NywgMTcsIDksIDEsIDE1MSwgNTMsIAorICAgIDE3LCA5LCAxLCAxNTEsIDQwLCAxNywgOSwgMSwgMTUxLCA2NSwgMTcsIDksIDEsIDE1MSwgMTQ3LCAxNywgOSwgMSwgMTIyLCAKKyAgICA1MywgMTcsIDksIDEsIDEyMiwgNDAsIDE3LCA5LCAxLCAxMjIsIDY1LCAxNywgOSwgMSwgMTIyLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAxLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAxLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAxLCAKKyAgICAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMSwgMjQ4LCAyMDQsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMDQsIDQwLCAxNywgOSwgMSwgCisgICAgMjE2LCAyMDQsIDUzLCAxNywgOSwgMSwgMjE2LCAyMDQsIDQwLCAxNywgOSwgMSwgMjIzLCA5OSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMjMsIDk5LCA0MCwgMTcsIDksIDEsIDIxMCwgMTA5LCA1MywgMTcsIDksIDEsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDEsIAorICAgIDIyMSwgMTY5LCA1MywgMTcsIDksIDEsIDIyMSwgMTY5LCA0MCwgMTcsIDksIDEsIDIyMSwgMTY5LCA2NSwgMTcsIDksIDEsIAorICAgIDIyMSwgMTY5LCAxNDcsIDE3LCA5LCAxLCAyMjAsIDYyLCA1MywgMTcsIDksIDEsIDIyMCwgNjIsIDQwLCAxNywgOSwgMSwgCisgICAgMjIwLCA2MiwgNjUsIDE3LCA5LCAxLCAyMjAsIDYyLCAxNDcsIDE3LCA5LCAxLCAyMjIsIDI5LCA1MywgMTcsIDksIDEsIAorICAgIDIyMiwgMjksIDQwLCAxNywgOSwgMSwgMjIyLCAyOSwgNjUsIDE3LCA5LCAxLCAyMjIsIDI5LCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyNDgsIDIyNSwgNTMsIDE3LCA5LCAxLCAyNDgsIDIyNSwgNDAsIDE3LCA5LCAxLCAyNDgsIDIyNSwgNjUsIDE3LCA5LCAxLCAKKyAgICAyNDgsIDIyNSwgMTQ3LCAxNywgOSwgMSwgMjE3LCA4MiwgNTMsIDE3LCA5LCAxLCAyMTcsIDgyLCA0MCwgMTcsIDksIDEsIAorICAgIDIxNywgODIsIDY1LCAxNywgOSwgMSwgMjE3LCA4MiwgMTQ3LCAxNywgOSwgMSwgMjEwLCAxMTIsIDUzLCAxNywgOSwgMSwgCisgICAgMjEwLCAxMTIsIDQwLCAxNywgOSwgMSwgMjEwLCAxMTIsIDY1LCAxNywgOSwgMSwgMjEwLCAxMTIsIDE0NywgMTcsIDksIDEsIAorICAgIDI1NCwgMjA2LCA1MywgMTcsIDksIDEsIDI1NCwgMjA2LCA0MCwgMTcsIDksIDEsIDI1NCwgMjA2LCA2NSwgMTcsIDksIDEsIAorICAgIDI1NCwgMjA2LCAxNDcsIDE3LCA5LCAxLCAyNDIsIDI1MiwgNTMsIDE3LCA5LCAxLCAyNDIsIDI1MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyNDIsIDI1MiwgNjUsIDE3LCA5LCAxLCAyNDIsIDI1MiwgMTQ3LCAxNywgOSwgMSwgMjQ0LCAxNTEsIDUzLCAxNywgOSwgMSwgCisgICAgMjQ0LCAxNTEsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNTEsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNTEsIDE0NywgMTcsIDksIDEsIAorICAgIDIyNCwgODUsIDUzLCAxNywgOSwgMSwgMjI0LCA4NSwgNDAsIDE3LCA5LCAxLCAyMjQsIDg1LCA2NSwgMTcsIDksIDEsIDIyNCwgCisgICAgODUsIDE0NywgMTcsIDksIDEsIDIzNSwgMSwgNTMsIDE3LCA5LCAxLCAyMzUsIDEsIDQwLCAxNywgOSwgMSwgMjM1LCAxLCAKKyAgICA2NSwgMTcsIDksIDEsIDIzNSwgMSwgMTQ3LCAxNywgOSwgMSwgMjMzLCAxMDksIDUzLCAxNywgOSwgMSwgMjMzLCAxMDksIAorICAgIDQwLCAxNywgOSwgMSwgMjMzLCAxMDksIDY1LCAxNywgOSwgMSwgMjMzLCAxMDksIDE0NywgMTcsIDksIDEsIDY2LCA1MywgCisgICAgMTcsIDksIDEsIDY2LCA0MCwgMTcsIDksIDEsIDY2LCA2NSwgMTcsIDksIDEsIDY2LCAxNDcsIDE3LCA5LCAxLCAyMjgsIDY4LCAKKyAgICA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDQwLCAxNywgOSwgMSwgMjI4LCA2OCwgNjUsIDE3LCA5LCAxLCAyMjgsIDY4LCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgNjUsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMSwgMjEyLCAzMSwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCA0MCwgCisgICAgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMSwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAxLCA3NywgCisgICAgNTMsIDE3LCA5LCAxLCA3NywgNDAsIDE3LCA5LCAxLCA3NywgNjUsIDE3LCA5LCAxLCA3NywgMTQ3LCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgCisgICAgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIAorICAgIDI1MiwgNTEsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgMjUyLCA1MSwgNDAsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgNDAsIDE3LCAyMTAsIDg3LCAyMTEsIAorICAgIDI0NSwgMjI4LCA3OCwgMjE5LCAyMCwgMTI2LCAyNDUsIDM5LCA3OSwgMTI2LCAyMjQsIDEsIDc5LCAxMjYsIDU0LCA1MCwgCisgICAgMTI2LCAyNDcsIDE0MCwgNTAsIDEyNiwgMjI1LCAxODUsIDUwLCAxMjYsIDI1NCwgMTM0LCAxMjYsIDI1NCwgNjUsIDEyNiwgCisgICAgNDMsIDIyNiwgNywgMTI2LCA0NCwgMjI2LCA3LCAxMjYsIDI1MywgMjI0LCAxMjYsIDk2LCA1MCwgMTI2LCAyNDksIDIyNywgCisgICAgMTI2LCAyNDAsIDE3NCwgMTI2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDEyNiwgMjE5LCA0OCwgMTI2LCAyMSwgMjEwLCA4NiwgCisgICAgMTI2LCAyMSwgMTExLCAxMjYsIDIxLCAxMDUsIDEyNiwgMjEsIDE1OCwgMTI2LCAyMSwgMTYxLCAxMjYsIDIxLCAxOTAsIAorICAgIDEyNiwgMjEsIDE5NSwgMTI2LCAyMSwgMTk5LCAxMjYsIDIxLCAxOTYsIDEyNiwgMjEsIDIwMSwgMTI2LCAyNDksIDIzNCwgCisgICAgMTI2LCAyMjAsIDE1MiwgMTI2LCAyMzMsIDIxLCA1MCwgMTI2LCAyNDUsIDEwNiwgNTAsIDEyNiwgMjQyLCAxMzcsIDUwLCAKKyAgICAxMjYsIDIyNCwgMTYsIDc5LCAxMjYsIDI0OSwgMjI1LCAyNTMsIDIxNCwgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAKKyAgICAxLCAyNTMsIDE2NiwgMTI2LCA3LCA2LCAxLCAyNTEsIDc0LCAxMjYsIDcsIDYsIDEsIDI0OSwgNjgsIDEyNiwgNywgNiwgMSwgCisgICAgNzYsIDEyNiwgNywgNiwgMSwgMjQ1LCAxNCwgMTI2LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTI2LCA3LCA2LCAxLCAyNDIsIDY3LCAKKyAgICAxMjYsIDcsIDYsIDEsIDc0LCAxMjYsIDcsIDYsIDEsIDIzNSwgMTUwLCAxMjYsIDcsIDYsIDEsIDIzNSwgMjksIDEyNiwgNywgCisgICAgNiwgMSwgMTU2LCAxMjYsIDcsIDYsIDEsIDE5NCwgMTI2LCA3LCA2LCAxLCAyMzAsIDMwLCAxMjYsIDcsIDYsIDEsIDc4LCAKKyAgICAxMjYsIDcsIDYsIDEsIDIyNiwgMTA5LCAxMjYsIDcsIDYsIDEsIDIyNCwgOTksIDEyNiwgNywgNiwgMSwgMTUzLCAxMjYsIDcsIAorICAgIDYsIDEsIDIyMiwgOTMsIDEyNiwgNywgNiwgMSwgMjE3LCAxNTMsIDEyNiwgNywgNiwgMSwgNjksIDEyNiwgNywgNiwgMSwgCisgICAgMjE0LCAxMDUsIDEyNiwgNywgNiwgMSwgMjEyLCA5OCwgMTI2LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA2LCAxLCAKKyAgICAyMTEsIDExNywgMTI2LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgNDIsIDEyNywgMTI2LCAyMjMsIDUzLCAyMTksIAorICAgIDQ4LCAxMjYsIDQ0LCA0MiwgMTI3LCAxMjYsIDI1MCwgMzksIDI1NSwgMjMsIDEyNiwgMTIxLCAyMzIsIDIxOSwgMTI2LCAKKyAgICAyNDIsIDE0NCwgMjU1LCAyMywgMTI2LCA3LCA0LCAxLCA2MSwgMTI2LCA3LCA0LCAxLCAyNTMsIDE2NiwgMTI2LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc0LCAxMjYsIDcsIDQsIDEsIDI0OSwgNjgsIDEyNiwgNywgNCwgMSwgNzYsIDEyNiwgNywgNCwgMSwgMjQ1LCAKKyAgICAxNCwgMTI2LCA3LCA0LCAxLCAyNDMsIDIwOSwgMTI2LCA3LCA0LCAxLCAyNDIsIDY3LCAxMjYsIDcsIDQsIDEsIDc0LCAxMjYsIAorICAgIDcsIDQsIDEsIDIzNSwgMTUwLCAxMjYsIDcsIDQsIDEsIDIzNSwgMjksIDEyNiwgNywgNCwgMSwgMTU2LCAxMjYsIDcsIDQsIAorICAgIDEsIDE5NCwgMTI2LCA3LCA0LCAxLCAyMzAsIDMwLCAxMjYsIDcsIDQsIDEsIDc4LCAxMjYsIDcsIDQsIDEsIDIyNiwgMTA5LCAKKyAgICAxMjYsIDcsIDQsIDEsIDIyNCwgOTksIDEyNiwgNywgNCwgMSwgMTUzLCAxMjYsIDcsIDQsIDEsIDIyMiwgOTMsIDEyNiwgNywgCisgICAgNCwgMSwgMjE3LCAxNTMsIDEyNiwgNywgNCwgMSwgNjksIDEyNiwgNywgNCwgMSwgMjE0LCAxMDUsIDEyNiwgNywgNCwgMSwgCisgICAgMjEyLCA5OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDExNywgMTI2LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMTI2LCA0MywgMjQ5LCAxMDcsIDEyNywgMTI2LCA2NywgMjMyLCAyMTksIDEyNiwgNDQsIDI0OSwgMTA3LCAKKyAgICAxMjcsIDEyNiwgMTg0LCAxMjYsIDQzLCA3MSwgMjI2LCA3LCAxMjYsIDQ0LCA3MSwgMjI2LCA3LCAxMDEsIDExMCwgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCAxMDEsIDQzLCAyNDksIDE2OSwgMTI3LCAxMDEsIDQ0LCAyNDksIDE2OSwgMTI3LCAxMDEsIDExMCwgCisgICAgMjQ5LCAyMjcsIDEwMSwgNTYsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMTAxLCA1NiwgMSwgMjExLCAyMjcsIDEwMSwgNTYsIDEsIAorICAgIDQsIDYxLCAxMDEsIDU2LCAxLCA0LCA3NCwgMTAxLCA1NiwgMSwgNCwgNjksIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAKKyAgICAxLCA0LCA3OCwgMTAxLCA1NiwgMSwgNCwgMTkyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgNCwgCisgICAgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDQsIDIxNSwgMTE5LCAxMDEsIDIzNCwgMjA3LCAyMjQsIDE3NiwgMjE5LCAzMywgNzksIAorICAgIDEwMSwgNTYsIDEsIDYxLCAxMDEsIDU2LCAxLCA3NCwgMTAxLCA1NiwgMSwgNjksIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAKKyAgICAxLCA3OCwgMTAxLCA1NiwgMSwgMTc2LCAxMDEsIDU2LCAxLCAyMzQsIDk4LCAxMDEsIDU2LCAxLCAyMzMsIDIyMywgMTAxLCAKKyAgICA1NiwgMSwgMjM0LCAxODgsIDEwMSwgNTYsIDEsIDIzNCwgMzQsIDEwMSwgNTYsIDEsIDIwNiwgMTAxLCA1NiwgMSwgMjE5LCAKKyAgICAxOTMsIDEwMSwgNTYsIDEsIDIxOCwgODQsIDEwMSwgNTYsIDEsIDIyMSwgMTgzLCAxMDEsIDU2LCAxLCAyMTksIDYwLCAxMDEsIAorICAgIDU2LCAxLCAyMTcsIDEwNiwgMTAxLCA1NiwgMSwgMjE2LCAxMTgsIDEwMSwgNTYsIDEsIDIxNSwgMTE5LCAxMDEsIDU2LCAxLCAKKyAgICAyMTcsIDIzLCAxMDEsIDU2LCAxLCAxMTIsIDEwMSwgNTYsIDEsIDE5OCwgMTAxLCA1NiwgMSwgMjI4LCAyMzgsIDEwMSwgNTYsIAorICAgIDEsIDIyNywgMjQyLCAxMDEsIDU2LCAxLCAyMjksIDExMiwgMTAxLCA1NiwgMSwgMjI4LCA3OSwgMTAxLCA1NiwgMSwgMTYyLCAKKyAgICAxMDEsIDU2LCAxLCAyNDEsIDE4NywgMTAxLCA1NiwgMSwgMjQwLCAyMjksIDEwMSwgNTYsIDEsIDI0MSwgMjQ1LCAxMDEsIAorICAgIDU2LCAxLCAyNDEsIDc1LCAxMDEsIDU2LCAxLCAxODYsIDEwMSwgNTYsIDEsIDIzMCwgMjM1LCAxMDEsIDU2LCAxLCAyMzAsIAorICAgIDEwNywgMTAxLCA1NiwgMSwgMjMxLCA5NiwgMTAxLCA1NiwgMSwgMjMwLCAxNjYsIDEwMSwgNTYsIDEsIDE5MiwgMTAxLCA1NiwgCisgICAgMSwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCAyMDUsIDEwMSwgNTYsIDEsIDIyMywgMzgsIAorICAgIDEwMSwgNTYsIDEsIDIyMiwgMTQyLCAxMDEsIDU2LCAxLCAyMjMsIDEzMSwgMTAxLCA1NiwgMSwgMjIyLCAyMTMsIDEwMSwgCisgICAgNTYsIDEsIDIxMiwgNjUsIDEwMSwgNTYsIDEsIDIzMCwgMzAsIDEwMSwgNTYsIDIxMywgMTM1LCAyMTksIDMzLCA3OSwgMTAxLCAKKyAgICA1NiwgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAxMDEsIDI0LCAyNDQsIDExMSwgMTAxLCAyNCwgMSwgMjM0LCA2NCwgMTAxLCAKKyAgICAyNCwgMSwgMjE4LCAyMTcsIDEwMSwgMjQsIDEsIDIzNCwgNTcsIDEwMSwgMjQsIDEsIDIyOCwgMjMxLCAxMDEsIDI0LCAxLCAKKyAgICAyMjgsIDIyOSwgMTAxLCAyNCwgMSwgMjI4LCAyMjgsIDEwMSwgMjQsIDEsIDIxNiwgMTAyLCAxMDEsIDI0LCAxLCAyMTgsIAorICAgIDIwNiwgMTAxLCAyNCwgMSwgMjIzLCAyOSwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjIzLCAyMSwgMTAxLCAKKyAgICAyNCwgMSwgMjIzLCAxNCwgMTAxLCAyNCwgMSwgMjIzLCA5LCAxMDEsIDI0LCAxLCAyMjMsIDQsIDEwMSwgMjQsIDEsIDIyMywgCisgICAgMTUsIDEwMSwgMjQsIDEsIDIyMywgMjcsIDEwMSwgMjQsIDEsIDIzMCwgMjIyLCAxMDEsIDI0LCAxLCAyMjUsIDk4LCAxMDEsIAorICAgIDI0LCAxLCAyMTgsIDIxNCwgMTAxLCAyNCwgMSwgMjI1LCA4NywgMTAxLCAyNCwgMSwgMjE5LCAxNTAsIDEwMSwgMjQsIDEsIAorICAgIDIxOCwgMjExLCAxMDEsIDI0LCAxLCAyMzYsIDYzLCAxMDEsIDI0LCAxLCAyNTAsIDU0LCAxMDEsIDI0LCAxLCAyMTgsIDIyMSwgCisgICAgMTAxLCAyNCwgMSwgMjUwLCAxMTQsIDEwMSwgMjQsIDEsIDIzNCwgMTE2LCAxMDEsIDI0LCAxLCAyMTYsIDE3NCwgMTAxLCAKKyAgICAyNCwgMSwgMjI1LCAxMzQsIDEwMSwgMjQsIDEsIDI0MSwgMTc5LCAxMDEsIDI0LCAxLCA2MSwgMTAxLCAyNCwgMSwgMjU0LCAKKyAgICAyNTIsIDEwMSwgMjQsIDEsIDE5MiwgMTAxLCAyNCwgMSwgMjExLCA5MiwgMTAxLCAyNCwgMSwgMjQ1LCAxMjUsIDEwMSwgMjQsIAorICAgIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTEsIDM2LCAxMDEsIDI0LCAxLCAyMTEsIDQ3LCAxMDEsIDI0LCAxLCA3OCwgMTAxLCAyNCwgCisgICAgMSwgMjEyLCA2NSwgMTAxLCAyNCwgMSwgMjEyLCA2MiwgMTAxLCAyNCwgMSwgMjI2LCAyMzgsIDEwMSwgMjQsIDEsIDIxMCwgCisgICAgMjQ0LCAxMDEsIDI0LCAxLCA2OSwgMTAxLCAyNCwgMSwgMjEyLCAxMSwgMTAxLCAyNCwgMSwgMjEyLCAyMiwgMTAxLCAyNCwgCisgICAgMSwgMjExLCAyNTAsIDEwMSwgMjQsIDEsIDIxMCwgMjEyLCAxMDEsIDI0LCAxLCAyNDUsIDYzLCAxMDEsIDI0LCAxLCAyMTEsIAorICAgIDgsIDEwMSwgMjQsIDEsIDc0LCAxMjYsIDI1MCwgMTg0LCA1MCwgMTI2LCAyMjQsIDIzMSwgNTAsIDEyNiwgMjI4LCA1NywgCisgICAgNTAsIDEyNiwgMjMxLCAyMzcsIDEyNiwgMjUxLCAxNDMsIDEzMCwgMTI2LCAyMTEsIDQwLCA1MCwgMTI2LCAyMTEsIDIxNywgCisgICAgNTAsIDEwMSwgMjQ0LCAyNiwgMTkzLCAyMTMsIDIzOSwgMTAxLCAxNDAsIDc1LCAxMDEsIDIxNCwgMTUzLCA3NSwgMTAxLCAKKyAgICA5NywgNzUsIDEwMSwgMjQ2LCAxMTIsIDc1LCAxMDEsIDg1LCAyMTgsIDIzNiwgMTAxLCA3MSwgMjUwLCA0MywgMjM1LCAyMTEsIAorICAgIDI1NCwgMTA3LCAyNTQsIDEyOCwgMjM1LCAyMTEsIDI1NCwgMTA3LCAyMjAsIDEzOSwgMjM1LCAyMTEsIDI1NCwgMTA3LCAKKyAgICAyMTYsIDIzNywgMjI2LCAyNTMsIDIyMywgNzUsIDI1MCwgMTUwLCAyMjMsIDc1LCAyNTAsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIAorICAgIDE1MCwgNjEsIDYyLCA1NywgMywgMjUzLCAxMTksIDc2LCA2MiwgNTcsIDMsIDI1MywgMTI4LCA3NCwgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDk2LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgNjksIDYyLCA1NywgMywgMjUzLCAxNjUsIDI0OCwgMjI5LCA2MiwgCisgICAgNTcsIDMsIDI1MywgMTEyLCAyNDgsIDk4LCA2MiwgNTcsIDMsIDI1MywgMTUyLCAyNDgsIDExLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTQyLCAyNDcsIDE1MywgNjIsIDU3LCAzLCAyNTMsIDEwNiwgMjQ2LCA4NiwgNjIsIDU3LCAzLCAyNTMsIDEwMCwgMjM1LCAKKyAgICAxNDcsIDYyLCA1NywgMywgMjUzLCAxMTEsIDIzNSwgMTMyLCA2MiwgNTcsIDMsIDI1MywgMTIxLCAyMzUsIDc0LCA2MiwgNTcsIAorICAgIDMsIDI1MywgOTIsIDIzNSwgNTcsIDYyLCA1NywgMywgMjUzLCA4MCwgMTc2LCA2MiwgNTcsIDMsIDI1MywgMTEzLCAyMzQsIAorICAgIDE4OCwgNjIsIDU3LCAzLCAyNTMsIDkwLCAyMzQsIDk4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIzNCwgMzQsIDYyLCA1NywgMywgCisgICAgMjUzLCA3NiwgMjMzLCAyMjMsIDYyLCA1NywgMywgMjUzLCA3NywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTQzLCAyMzEsIDk2LCAKKyAgICA2MiwgNTcsIDMsIDI1MywgODQsIDIzMCwgMjM1LCA2MiwgNTcsIDMsIDI1MywgMTQxLCAyMzAsIDE2NiwgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDEzMywgMjMwLCAxMDcsIDYyLCA1NywgMywgMjUzLCAxNTQsIDE5OCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgMjI5LCAKKyAgICAxMTIsIDYyLCA1NywgMywgMjUzLCAxMjYsIDIyOCwgMjM4LCA2MiwgNTcsIDMsIDI1MywgMTA1LCAyMjgsIDc5LCA2MiwgNTcsIAorICAgIDMsIDI1MywgMTAyLCAyMjcsIDI0MiwgNjIsIDU3LCAzLCAyNTMsIDE2MSwgMTkxLCA2MiwgNTcsIDMsIDI1MywgODUsIDIyNSwgCisgICAgMjI0LCA2MiwgNTcsIDMsIDI1MywgMTE4LCAyMjUsIDExMSwgNjIsIDU3LCAzLCAyNTMsIDE0NSwgMjI1LCAxOSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDEwNywgMjI0LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxNDAsIDIyNCwgOTEsIDYyLCA1NywgMywgMjUzLCA3OSwgCisgICAgMjI0LCA3MiwgNjIsIDU3LCAzLCAyNTMsIDEzNSwgMjI0LCA1NiwgNjIsIDU3LCAzLCAyNTMsIDEyNCwgMjI0LCA0NSwgNjIsIAorICAgIDU3LCAzLCAyNTMsIDk3LCAyMDUsIDYyLCA1NywgMywgMjUzLCAxMjksIDIyMywgMTMxLCA2MiwgNTcsIDMsIDI1MywgMTA0LCAKKyAgICAyMjMsIDM4LCA2MiwgNTcsIDMsIDI1MywgMTYzLCAyMjIsIDIxMywgNjIsIDU3LCAzLCAyNTMsIDEzMCwgMjIyLCAxNDIsIAorICAgIDYyLCA1NywgMywgMjUzLCAxMjUsIDIwNiwgNjIsIDU3LCAzLCAyNTMsIDE0OCwgMjIxLCAxODMsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxMTYsIDIxOSwgMTkzLCA2MiwgNTcsIDMsIDI1MywgMTQ0LCAyMTksIDYwLCA2MiwgNTcsIDMsIDI1MywgOTksIDIxOCwgODQsIAorICAgIDYyLCA1NywgMywgMjUzLCA5OCwgMjE3LCAxMDYsIDYyLCA1NywgMywgMjUzLCAxNTksIDIxNywgMjMsIDYyLCA1NywgMywgCisgICAgMjUzLCAxMjAsIDIxNiwgMTE4LCA2MiwgNTcsIDMsIDI1MywgMTU3LCAxMTIsIDYyLCA1NywgMywgMjUzLCA4OCwgMjE1LCAKKyAgICAxMTksIDYyLCA1NywgMywgMjUzLCAxMDMsIDIxMiwgNjUsIDYyLCA1NywgMywgMjUzLCA4MiwgMjEyLCAyMiwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDExNywgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMTUsIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTM5LCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTAsIDk0LCA2MiwgNTcsIDMsIDI1MywgMTM2LCAyMTAsIDIzLCAKKyAgICA2MiwgNTcsIDMsIDI1MywgMTMxLCAyNTUsIDg0LCA2MiwgNTcsIDMsIDI1MywgMTE0LCAyNTUsIDgzLCA2MiwgNTcsIDMsIAorICAgIDI1MywgNzMsIDI1MywgMjAwLCA2MiwgNTcsIDMsIDI1MywgODYsIDI0NiwgNTQsIDYyLCA1NywgMywgMjUzLCA2OSwgMjQ2LCAKKyAgICA1MywgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjI3LCAxNzgsIDYyLCA1NywgMywgMjUzLCAxMjcsIDIyNCwgMTUxLCA2MiwgNTcsIAorICAgIDMsIDI1MywgOTUsIDIyNCwgMTU1LCA2MiwgNTcsIDMsIDI1MywgODEsIDIyMywgMTg5LCA2MiwgNTcsIDMsIDI1MywgMTIzLCAKKyAgICAyMjMsIDE4OCwgNjIsIDU3LCAzLCAyNTMsIDg5LCAyMjIsIDIxMiwgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTcsIDEwMywgNjIsIAorICAgIDU3LCAzLCAyNTMsIDcxLCAyMTUsIDc4LCA2MiwgNTcsIDMsIDI1MywgNjgsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzgsIAorICAgIDYyLCA1NywgMTYsIDI1MywgMTM3LCA2MiwgNTcsIDE2LCAyNTMsIDEzNCwgNjIsIDU3LCAxNiwgMjUzLCAxMjIsIDYyLCA1NywgCisgICAgMTYsIDI1MywgMTEwLCA2MiwgNTcsIDE2LCAyNTMsIDEwOCwgNjIsIDU3LCAxNiwgMjUzLCAxMDEsIDYyLCA1NywgMTYsIAorICAgIDI1MywgOTQsIDYyLCA1NywgMTYsIDI1MywgOTMsIDYyLCA1NywgMTYsIDI1MywgNzgsIDYyLCA1NywgMTYsIDI1MywgNzUsIAorICAgIDYyLCA1NywgMTYsIDI1MywgNzQsIDYyLCA1NywgMTYsIDI1MywgNzIsIDYyLCA1NywgMTYsIDI1MywgNzAsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDY3LCAyMzEsIDE5MCwgNjIsIDU3LCAxMDYsIDI1MywgNjYsIDIxMSwgMjIxLCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICA2NSwgMjQ4LCA4MiwgNjIsIDU3LCAxMDYsIDI1MywgNjQsIDI0NSwgMTAzLCA2MiwgNTcsIDEwNiwgMjUzLCA2MywgMjMxLCAKKyAgICAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYyLCAyMTgsIDE2NCwgNjIsIDU3LCAxMDYsIDI1MywgNjEsIDI0NSwgNDUsIDYyLCAKKyAgICA1NywgMTA2LCAyNTMsIDYwLCAyMjMsIDE1NiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIyMCwgNjQsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDU4LCAyNDEsIDI0NCwgNjIsIDU3LCAxMDYsIDI1MywgNTcsIDIxOSwgMjcsIDYyLCA1NywgMTA2LCAyNTMsIDU2LCAKKyAgICAyNTEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDI0OSwgMTUzLCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjUxLCAxMjMsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyMTIsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDUyLCAyNTIsIDE0NCwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgNTEsIDIyNiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjE5LCAwLCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICA0OSwgMjQ5LCA3NiwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCA0OCwgMjM0LCAyMzAsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgCisgICAgNDcsIDIzNCwgMjM4LCA2MiwgNTcsIDEwNiwgMjUzLCA0NiwgMjI2LCAyMjIsIDYyLCA1NywgMTA2LCAyNTMsIDQ1LCAyMTEsIAorICAgIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgNDQsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDMsIDI1NCwgMjUsIDYyLCA1NywgCisgICAgMjMwLCAxNDcsIDI1MywgNDIsIDIzMSwgNTcsIDYyLCA1NywgMTA2LCAyNTMsIDQxLCAyNTEsIDE0MiwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgNDAsIDI0MiwgMTczLCA2MiwgNTcsIDEwNiwgMjUzLCAzOSwgNjIsIDU3LCAxMDYsIDI1MywgMzgsIDIxMSwgMjEyLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAzNywgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCA1NywgMTA2LCAyNTMsIDM1LCAyNDAsIAorICAgIDI1NSwgNjIsIDU3LCAxMDYsIDI1MywgMzQsIDYyLCA1NywgMTA2LCAyNTMsIDMzLCA2MiwgNTcsIDEwNiwgMjUzLCAzMiwgCisgICAgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCAzMCwgMjE1LCA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjksIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDI4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNywgMjUwLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAyNiwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDI0LCAyNDMsIDEwMCwgNjIsIDU3LCAxMDYsIDI1MywgMjMsIDI1NCwgMTIsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDIyLCA2MiwgNTcsIDEwNiwgMjUzLCAyMSwgNjIsIDU3LCAxMDYsIDI1MywgMjAsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDE5LCA2MiwgNTcsIDEwNiwgMjUzLCAxOCwgNjIsIDU3LCAxMDYsIDI1MywgMTcsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDE2LCA2MiwgNTcsIDEwNiwgMjUzLCAxNSwgNjIsIDU3LCAxMDYsIDI1MywgMTQsIDYyLCA1NywgMTA2LCAyNTMsIAorICAgIDEzLCAyMzAsIDEzOSwgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCAyMTUsIDIzNiwgNjIsIAorICAgIDU3LCAxMDYsIDI1MywgMTAsIDYyLCA1NywgMTA2LCAyNTMsIDksIDYyLCA1NywgMTA2LCAyNTMsIDgsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDcsIDYyLCA1NywgMTA2LCAyNTMsIDYsIDYyLCA1NywgMTA2LCAyNTMsIDUsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDYyLCA1NywgMTA2LCAyNTMsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDEsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDI1NSwgMjQxLCAyMTgsIDYyLCA1NywgMTA2LCAyNTIsIDIzNCwgMjQ0LCAKKyAgICAzNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjMxLCAyNTIsIDEyNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyMTksIDcsIDYyLCAKKyAgICA1NywgMTA2LCAyNTIsIDIyNSwgNzUsIDYyLCA1NywgMTA2LCAyNTIsIDIyNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjIzLCAyMTcsIAorICAgIDIzNywgNjIsIDU3LCAxMDYsIDI1MiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAyNTIsIDIyMCwgCisgICAgMjExLCAyNTQsIDI1MCwgMTQ3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTksIDI1MCwgMTQ3LCA2MiwgNTcsIDEwNiwgMjUyLCAKKyAgICAyMTgsIDI1MCwgMTQ4LCAyNDQsIDcsIDYyLCA1NywgMTA2LCAyNTIsIDIxNywgMjEyLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAKKyAgICAyMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxNSwgNjIsIDU3LCAyMzAsIDE0NywgMjUyLCAyMTQsIDI0NywgMjA2LCA2MiwgNTcsIAorICAgIDEwNiwgMjUyLCAyMTMsIDYyLCA1NywgMTA2LCAyNTIsIDIxMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjEwLCA2MiwgNTcsIDEwNiwgCisgICAgMjUyLCAyMDksIDYyLCA1NywgMTA2LCAyNTIsIDIwOCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA3LCAyNDgsIDE2NywgNjIsIDU3LCAKKyAgICAxMDYsIDI1MiwgMjA2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDUsIDYyLCA1NywgMTA2LCAyNTIsIDIwNCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MiwgMjAzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUzLCAzMSwgNjIsIDU3LCAKKyAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDI1NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI1MywgNjIsIDU3LCAxMDYsIAorICAgIDIxMywgMTg2LCAyNTIsIDI1MiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI1MSwgNjIsIDU3LCAxMDYsIDIxMywgCisgICAgMTg2LCAyNTIsIDI1MCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0OSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKKyAgICAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAorICAgIDI0NiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NCwgCisgICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MiwgNjIsIDU3LCAKKyAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MCwgNjIsIDU3LCAxMDYsIAorICAgIDIxMywgMTg2LCAyNTIsIDIzOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOCwgNjIsIDU3LCAxMDYsIDIxMywgCisgICAgMTg2LCAyNTIsIDIzNywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKKyAgICAyNTIsIDIzNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAorICAgIDIzMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOSwgCisgICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNywgNjIsIDU3LCAKKyAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIxMSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIwMSwgMjU0LCAyNDUsIDIxMSwgCisgICAgMjA5LCAyMjAsIDE0MCwgMjMyLCAyMTksIDI1NCwgMjQ1LCAyMTEsIDIwOSwgMjIwLCAxNDAsIDI0NywgMTI4LCAyNTQsIAorICAgIDI0NSwgMjUwLCAxMzgsIDc5LCAyNTQsIDI0NSwgNTQsIDExMSwgMjU0LCAyNDUsIDU0LCAxMDUsIDI1NCwgMjQ1LCA1NCwgCisgICAgMTU4LCAyNTQsIDI0NSwgNTQsIDE2MSwgMjU0LCAyNDUsIDU0LCAxOTAsIDI1NCwgMjQ1LCA1NCwgMTk1LCAyNTQsIDI0NSwgCisgICAgNTQsIDE5OSwgMjU0LCAyNDUsIDU0LCAxOTYsIDI1NCwgMjQ1LCA1NCwgMjAxLCAyNTQsIDI0NSwgNTQsIDIxNiwgMjQ4LCAKKyAgICAyNTQsIDI0NSwgNTQsIDIxNSwgNzMsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjMsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAyMywgCisgICAgMjU0LCAyNDUsIDU0LCAyNDQsIDEyMiwgMjU0LCAyNDUsIDU0LCAyMTksIDExMywgMjU0LCAyNDUsIDU0LCAyMjAsIDExOCwgCisgICAgMjU0LCAyNDUsIDU0LCAyNDUsIDE5MiwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMCwgMjU0LCAyNDUsIDU0LCAxMjMsIDI0MCwgCisgICAgMjE3LCAyNTQsIDI0NSwgNTQsIDExMywgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMTM0LCAyNDAsIDIxNywgMjU0LCAyNDUsIAorICAgIDU0LCAyNDQsIDE5LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDQsIDg5LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAKKyAgICAyMTksIDEyNywgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMjQsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDI0NSwgCisgICAgMjAxLCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyMjgsIDIwNSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyMTYsIAorICAgIDE0OCwgMjU0LCAyNDUsIDU0LCAxMTMsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMjQ0LCAxOSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgCisgICAgMjE5LCAxMjcsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDUsIAorICAgIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNiwgMjQ5LCAKKyAgICAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTUsIDc0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDE2NCwgMjE2LCAKKyAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjMsIDIxNiwgMTQ4LCAKKyAgICAyNTQsIDI0NSwgNTQsIDIxOSwgMTE0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDExOSwgMjE2LCAxNDgsIDI1NCwgCisgICAgMjQ1LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjAxLCAyMTYsIDE0OCwgMjU0LCAyNDUsIAorICAgIDIxMiwgMTQsIDI1MiwgMTM2LCAyMTQsIDE3MywgMjU0LCAyNDUsIDIxMiwgMTQsIDI0NCwgMTAwLCAyMTgsIDYwLCAyNTQsIAorICAgIDI0NSwgMjEyLCAxNCwgMjIxLCAxNzgsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyMTYsIDE3MCwgMjE4LCA2MCwgCisgICAgMjU0LCAyNDUsIDIxMiwgMTQsIDI0NCwgMTIsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyNDYsIDg5LCAyMzEsIDk1LCAyNDQsIAorICAgIDEwMCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMiwgMjA1LCAyMzEsIDk1LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAyNDUsIAorICAgIDIzMSwgOTUsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjMxLCA5NSwgMjE2LCAxNzAsIDIxOCwgNjAsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyMjQsIDI0LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQyLCAzNCwgMjYsIAorICAgIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0NiwgMTA4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDE5MCwgMjYsIDI1NSwgCisgICAgMTUsIDI1MywgMjAyLCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIAorICAgIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgCisgICAgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAKKyAgICAyMTYsIDI0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIAorICAgIDI1MywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgCisgICAgMjE4LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjE2LCAxNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKKyAgICAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgCisgICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKKyAgICAyMDIsIDI0NCwgMTIzLCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTgsIDE1MiwgCisgICAgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxOCwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIAorICAgIDIwMiwgMTIzLCAyMTYsIDE0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIxNiwgMTQ5LCAKKyAgICAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAKKyAgICAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDI0MSwgMjEyLCAxMjMsIDIyNSwgMzQsIAorICAgIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTExLCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDExMSwgMjYsIDI1NSwgMTUsIDI0NSwgCisgICAgMTEyLCAxMDUsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTA1LCAyNiwgMjU1LCAxNSwgMjQ5LCA3MywgMTEzLCAyNDYsIAorICAgIDEwNywgMjYsIDI1NSwgMTUsIDI0NSwgMTEyLCAxMTMsIDI0NiwgMTA3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDE5MCwgCisgICAgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyMTYsIDI0OSwgMjU0LCAKKyAgICAxNDksIDE3LCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjMxLCA0NiwgMjE2LCAyNDgsIAorICAgIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjE2LCAxNjMsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCAxMjMsIDI1NCwgMTQ5LCAKKyAgICAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDEyMiwgMjYsIAorICAgIDI1NSwgMTUsIDIxNiwgMTgyLCAxMjMsIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEzNCwgMjQwLCAyMTcsIAorICAgIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCA4OSwgCisgICAgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyNTAsIAorICAgIDIzNSwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMjksIDE4NywgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDg5LCAyMTYsIAorICAgIDE0OCwgMjYsIDI1NSwgMTUsIDI0OCwgNjUsIDI0NCwgODksIDIzMCwgMTY5LCAyNiwgMjU1LCAxNSwgMjE4LCAxMjAsIDI0NCwgCisgICAgMTIzLCAyMzAsIDE2OSwgMjYsIDEyMywgMTYzLCA1MCwgMjYsIDEyMywgMTYzLCA1LCAyNTQsIDE0OSwgMTcsIDI2LCAxMTMsIAorICAgIDIxNiwgMTY4LCA1MCwgMjYsIDEzNCwgMjI0LCAyMywgNTAsIDI2LCAyMTEsIDQ1LCA1MCwgMjYsIDIxNywgNjksIDUwLCAyNiwgCisgICAgMjQ2LCAxMDksIDUwLCAyNiwgMjI2LCAyNTAsIDUwLCAyNiwgMTEzLCAyMjYsIDI0OSwgNTAsIDI2LCAxMzQsIDIyNiwgMjQ5LCAKKyAgICA1MCwgMjYsIDI0NCwgMTksIDIyNiwgMjQ5LCA1MCwgMjYsIDI0NCwgODksIDIyNiwgMjQ5LCA1MCwgMjYsIDIzMSwgNDAsIAorICAgIDUwLCAyNiwgMjMzLCAxNjMsIDI1MiwgMTM2LCA1MCwgMjYsIDIzMiwgMjAwLCA1MCwgMjYsIDIyNiwgMTM1LCA1MCwgMjYsIAorICAgIDIxMSwgMTU5LCA1MCwgMjYsIDI1MywgMjUxLCA1MCwgMjYsIDI1NCwgOCwgNTAsIDI2LCAyNDIsIDE1MSwgNTAsIDI2LCAKKyAgICAyMTUsIDE4NywgMjUyLCAxMzYsIDUwLCAyNiwgMjEwLCA4NywgNTAsIDIyMiwgMjAwLCAyMjAsIDExNSwgNTAsIDIyMiwgCisgICAgMjAwLCAyMTQsIDE4NSwgNTAsIDIyMiwgMjAwLCAyMjAsIDE0NCwgNTAsIDIyMiwgMjAwLCAyMjAsIDExMywgNTAsIDIyMiwgCisgICAgMjAwLCAyNDcsIDIyMSwgMjIwLCAxMTMsIDUwLCAyMjIsIDIwMCwgMjE5LCAxNzAsIDUwLCAyMjIsIDIwMCwgMjQ4LCA2MSwgCisgICAgNTAsIDIyMiwgMjAwLCAyMjQsIDksIDUwLCAyMjIsIDIwMCwgMjIwLCAxMzEsIDUwLCAyMjIsIDIwMCwgMjQ2LCA2OCwgNTAsIAorICAgIDIyMiwgMjAwLCAyNTMsIDI0NiwgNTAsIDIyMiwgMjAwLCAyNTAsIDE3OSwgNTAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjI1LCAyMTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI1LCAyNywgMjQxLCAyNDIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCisgICAgNSwgMjE3LCA0NiwgMjQxLCAyNDIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyNTUsIDIyNSwgMTQ2LCAyNDcsIAorICAgIDE5OSwgNSwgMjUwLCAxMDksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjExLCAyMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjQxLCAyMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQzLCA5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTYsIAorICAgIDExNywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCA3NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDE3NywgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyMjAsIDMxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjUyLCAyMjUsIDE0NiwgCisgICAgMjQ3LCAxOTksIDUsIDIzMSwgMTg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMSwgMTQxLCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDIyMSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMiwgMjQzLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI1MSwgMTk2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjM5LCAyMjUsIDM4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDI0NywgMTQxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxOSwgCisgICAgODksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyMzIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUyLCA3MSwgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyMjAsIDE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MCwgMjU1LCAyMjUsIDE0NiwgCisgICAgMjQ3LCAxOTksIDUsIDI0MSwgMTg1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MSwgMTIwLCAyMzMsIDQyLCAyMjUsIAorICAgIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyMywgMTU2LCAyMjUsIDE0NiwgCisgICAgMjQ3LCAxOTksIDUsIDI0NSwgMjM4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0NiwgMTE1LCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDIxNSwgMTA2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzQsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjI1LCAzOSwgMjE1LCAyMzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEzLCAxNTksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCisgICAgNSwgMjI2LCAyMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjIsIDE5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIAorICAgIDIzMCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjYsIDExOSwgMjUyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjQ0LCA1NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDIsIDE0NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTgsIAorICAgIDEyMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCA0LCAyNTMsIDE3NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTIsIDMyLCAKKyAgICAyNTIsIDE1NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAzOCwgMjI2LCAyNTIsIDkxLCAyMzIsIDY1LCAxLCA2MSwgMjMyLCAKKyAgICA2NSwgMSwgNzYsIDIzMiwgNjUsIDEsIDI1MywgMTY2LCAyMzIsIDY1LCAxLCAyNTIsIDI3LCAyMzIsIDY1LCAxLCAyNDMsIAorICAgIDIwOSwgMjMyLCA2NSwgMSwgMjQ5LCA2OCwgMjMyLCA2NSwgMSwgNzQsIDIzMiwgNjUsIDEsIDIxMiwgOTgsIDIzMiwgNjUsIAorICAgIDEsIDIxMCwgMTU5LCAyMzIsIDY1LCAxLCAyMTYsIDIxMSwgMjMyLCA2NSwgMSwgMjM1LCAxNTAsIDIzMiwgNjUsIDEsIDIzNSwgCisgICAgMjksIDIzMiwgNjUsIDEsIDIyNCwgOTksIDIzMiwgNjUsIDEsIDE1NiwgMjMyLCA2NSwgMSwgMTk0LCAyMzIsIDY1LCAxLCAKKyAgICAyMzAsIDMwLCAyMzIsIDY1LCAxLCAyMzAsIDE3MSwgMjMyLCA2NSwgMSwgMjI4LCAxMTYsIDIzMiwgNjUsIDEsIDY5LCAyMzIsIAorICAgIDY1LCAxLCAyMjYsIDEwOSwgMjMyLCA2NSwgMSwgMjM0LCA1MywgMjMyLCA2NSwgMSwgMTUzLCAyMzIsIDY1LCAxLCAyMjIsIAorICAgIDkzLCAyMzIsIDY1LCAxLCAyMTcsIDE1MywgMjMyLCA2NSwgMSwgMjE1LCAxNjAsIDIzMiwgNjUsIDEsIDI1NCwgMTMxLCAKKyAgICAyMzIsIDY1LCAxLCAyNDUsIDE1OCwgMjMyLCA2NSwgMSwgMjQyLCA2NywgMjMyLCA2NSwgMSwgMjExLCAxNzgsIDI1MCwgCisgICAgMjQ1LCAxLCA2MSwgMjUwLCAyNDUsIDEsIDIyNiwgOTUsIDI1MCwgMjQ1LCAxLCAyNDksIDY4LCAyNTAsIDI0NSwgMSwgMTU2LCAKKyAgICAyNTAsIDI0NSwgMSwgMjE0LCAxMTYsIDI1MCwgMjQ1LCAxLCAxNTMsIDI1MCwgMjQ1LCAxLCAyMzMsIDY4LCAyNTAsIDI0NSwgCisgICAgMSwgMjU1LCA4NCwgMjUwLCAyNDUsIDEsIDIyNCwgOTksIDI1MCwgMjQ1LCAxLCAyNTMsIDE2NiwgMjUwLCAyNDUsIDEsIAorICAgIDE5NCwgMjUwLCAyNDUsIDEsIDc4LCAyNTAsIDI0NSwgMSwgMjQ4LCAyMzEsIDI1MCwgMjQ1LCAxLCAyMTcsIDE1MywgMjUwLCAKKyAgICAyNDUsIDEsIDIyMCwgMTA2LCAyNTAsIDI0NSwgMSwgMjIwLCAxMDUsIDI1MCwgMjQ1LCAxLCAyMjIsIDkzLCAyNTAsIDI0NSwgCisgICAgMSwgMjUxLCA3MywgMjUwLCAyNDUsIDEsIDY5LCAyNTAsIDI0NSwgMSwgMjI4LCAxMTYsIDI1MCwgMjQ1LCAxLCAyMTEsIAorICAgIDE3OCwgMjUwLCAyNDUsIDEsIDIzMCwgMzAsIDI1MCwgMjQ1LCAxLCAyMTUsIDE1OSwgMjUwLCAyNDUsIDEsIDIyNiwgMTA5LCAKKyAgICAyNTAsIDI0NSwgMSwgMjE4LCAyMjgsIDI1MCwgMjQ1LCAxLCA3NCwgMjUwLCAyNDUsIDEsIDc2LCAyNTAsIDI0NSwgMSwgCisgICAgMjE0LCAxMTMsIDI1MCwgMjQ1LCAxLCAyMzUsIDI5LCAyNTAsIDI0NSwgMSwgMjM1LCAyMCwgMjUwLCAyNDUsIDEsIDIyOSwgCisgICAgMTU1LCAyNTAsIDI0NSwgMSwgMjE0LCAxMTgsIDI1MCwgMjQ1LCAxLCAyNDMsIDIwOSwgMjUwLCAyNDUsIDEsIDI0MywgMTQ0LCAKKyAgICAyNTAsIDI0NSwgMSwgMjE4LCAxNzAsIDI1MCwgMjQ1LCAxLCAyMTgsIDE2OSwgMjUwLCAyNDUsIDEsIDIyOSwgODQsIDI1MCwgCisgICAgMjQ1LCAxLCAyMzYsIDQwLCAyNTAsIDI0NSwgMSwgMjUxLCA3MiwgMjUwLCAyNDUsIDEsIDIxNSwgMTYwLCAyNTAsIDI0NSwgCisgICAgMSwgMjE0LCAxMTUsIDI1MCwgMjQ1LCAxLCAyMjIsIDE4MiwgMjUwLCAyNDUsIDEsIDIzMSwgMTM0LCAyNTAsIDI0NSwgMSwgCisgICAgMjMxLCAxMzMsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMiwgMjUwLCAyNDUsIDEsIDIzMSwgMTMxLCAyNTAsIDI0NSwgMSwgMjMzLCAKKyAgICA2NywgMjUwLCAyNDUsIDEsIDI0NSwgMjQyLCAyNTAsIDI0NSwgMSwgMjE0LCAxMTQsIDU1LCAzMiwgMSwgNjEsIDU1LCAzMiwgCisgICAgMSwgMjUyLCA4MywgNTUsIDMyLCAxLCAyMzQsIDE4OCwgNTUsIDMyLCAxLCAyNDgsIDk4LCA1NSwgMzIsIDEsIDc2LCA1NSwgCisgICAgMzIsIDEsIDIxMywgMjU1LCA1NSwgMzIsIDEsIDIxMCwgOTQsIDU1LCAzMiwgMSwgMjQxLCAyNDUsIDU1LCAzMiwgMSwgMjE2LCAKKyAgICAxOTYsIDU1LCAzMiwgMSwgNzQsIDU1LCAzMiwgMSwgMTc2LCA1NSwgMzIsIDEsIDI0NSwgMTgyLCA1NSwgMzIsIDEsIDI0NSwgCisgICAgMTY3LCA1NSwgMzIsIDEsIDI0NSwgMTU4LCA1NSwgMzIsIDEsIDI0NSwgODMsIDU1LCAzMiwgMSwgNzgsIDU1LCAzMiwgMSwgCisgICAgMjI1LCAyMjQsIDU1LCAzMiwgMSwgMjIwLCA2NSwgNTUsIDMyLCAxLCAyMzMsIDIyMywgNTUsIDMyLCAxLCAyNDUsIDEwMCwgCisgICAgNTUsIDMyLCAxLCAyNDUsIDkwLCA1NSwgMzIsIDEsIDIxNywgMjMsIDU1LCAzMiwgMSwgNjksIDU1LCAzMiwgMSwgMjQ1LCAKKyAgICAxODUsIDU1LCAzMiwgMSwgMjI1LCAxMzksIDU1LCAzMiwgMSwgMjM0LCAxMjUsIDU1LCAzMiwgMSwgMjQ1LCAyMTAsIDU1LCAKKyAgICAzMiwgMSwgMjQ1LCA5MiwgNTUsIDMyLCAxLCAyNTAsIDEzOSwgNTUsIDMyLCAxLCAyMzYsIDQwLCA1NSwgMzIsIDEsIDIxNCwgCisgICAgMTE4LCA1NSwgMzIsIDIyNywgMjAyLCAxMTEsIDU1LCAzMiwgMjI3LCAyMDIsIDE5MCwgNTUsIDMyLCAyMjcsIDIwMiwgMjE2LCAKKyAgICAyNDgsIDU1LCAzMiwgMjI3LCAyMDIsIDI0NCwgMTIyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMTMsIDI0MiwgMTYwLCAxLCAyNTIsIAorICAgIDE3MSwgMjQyLCAxNjAsIDEsIDI0MiwgMjE4LCAyNDIsIDE2MCwgMSwgMjQ4LCAyMTIsIDI0MiwgMTYwLCAxLCAyNTQsIDIwOSwgCisgICAgMjQyLCAxNjAsIDEsIDIyNCwgODIsIDI0MiwgMTYwLCAxLCAyMzUsIDE2MSwgMjQyLCAxNjAsIDEsIDI0MiwgNDYsIDI0MiwgCisgICAgMTYwLCAxLCAyMTYsIDE1OSwgMjQyLCAxNjAsIDEsIDI0NSwgMTkxLCAyNDIsIDE2MCwgMSwgMjMzLCAxOTYsIDI0MiwgMTYwLCAKKyAgICAxLCAyMzMsIDExOSwgMjQyLCAxNjAsIDEsIDIzMSwgMTg0LCAyNDIsIDE2MCwgMSwgMjI5LCAxODksIDI0MiwgMTYwLCAxLCAKKyAgICAyMzUsIDEyNSwgMjQyLCAxNjAsIDEsIDIxNCwgMTM2LCAyNDIsIDE2MCwgMSwgMjI2LCA3MywgMjQyLCAxNjAsIDEsIDIyOCwgCisgICAgMjAwLCAyNDIsIDE2MCwgMSwgMjIzLCAxNjgsIDI0MiwgMTYwLCAxLCAyMjEsIDIyMCwgMjQyLCAxNjAsIDEsIDIxNywgNSwgCisgICAgMjQyLCAxNjAsIDEsIDIxMSwgMjM0LCAyNDIsIDE2MCwgMSwgMjQ0LCAxODYsIDI0MiwgMTYwLCAxLCAyMzYsIDQ0LCAyNDIsIAorICAgIDE2MCwgMSwgMjQwLCAyMDYsIDI0MiwgMTYwLCAxLCAyMjYsIDE0MywgMjQyLCAxNjAsIDEsIDIyOCwgMjA1LCAyNDAsIDIxNywgCisgICAgMjE0LCAyMDksIDEsIDI1NCwgMTU1LCAyMTQsIDIwOSwgMSwgMjUyLCAzNCwgMjE0LCAyMDksIDEsIDI0MywgMTE1LCAyMTQsIAorICAgIDIwOSwgMSwgMjM0LCAxMzgsIDIxNCwgMjA5LCAxLCAyNDgsIDYyLCAyMTQsIDIwOSwgMSwgMjQxLCA3NSwgMjE0LCAyMDksIAorICAgIDEsIDIxMSwgMjI3LCAyMTQsIDIwOSwgMSwgMjEwLCA4NSwgMjE0LCAyMDksIDEsIDI0MCwgMjQ4LCAyMTQsIDIwOSwgMSwgCisgICAgMjE2LCAyMzEsIDIxNCwgMjA5LCAxLCAyMTAsIDIzMywgMjE0LCAyMDksIDEsIDIzNSwgMCwgMjE0LCAyMDksIDEsIDIyMCwgCisgICAgMjIsIDIxNCwgMjA5LCAxLCAyMzMsIDEwNCwgMjE0LCAyMDksIDEsIDIzMSwgNzAsIDIxNCwgMjA5LCAxLCAyNDgsIDI5LCAKKyAgICAyMTQsIDIwOSwgMSwgMjI3LCAxOTgsIDIxNCwgMjA5LCAxLCAyMTAsIDEzLCAyMTQsIDIwOSwgMSwgMjIxLCAyNTAsIDIxNCwgCisgICAgMjA5LCAxLCAyNTQsIDIwNSwgMjE0LCAyMDksIDEsIDIyNCwgMTUzLCAyMTQsIDIwOSwgMSwgMjIyLCAyNywgMjE0LCAyMDksIAorICAgIDEsIDIyNCwgMzgsIDIxNCwgMjA5LCAxLCAyMjMsIDE0NywgMjE0LCAyMDksIDEsIDIxNiwgMjAwLCAyMTQsIDIwOSwgMSwgCisgICAgMjQyLCAyNTEsIDIxNCwgMjA5LCAxLCAxMTIsIDIxNCwgMjA5LCAxLCA3NCwgMjE0LCAyMDksIDEsIDY5LCAyMTQsIDIwOSwgCisgICAgMSwgMjE4LCAxODEsIDIxNCwgMjA5LCAyMTEsIDIwOSwgMjQ3LCAxODAsIDU1LCAyMjUsIDE3MiwgNSwgNjEsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgNzQsIDU1LCAyMjUsIDE3MiwgNSwgNjksIDU1LCAyMjUsIDE3MiwgNSwgMTc2LCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIzMywgMjIzLCA1NSwgMjI1LCAxNzIsIDUsIDI0MywgMTQyLCA1NSwgMjI1LCAxNzIsIDUsIDI0MiwgMTIwLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDIxMSwgMTY1LCA1NSwgMjI1LCAxNzIsIDUsIDI1MSwgNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjM1LCAxNDcsIAorICAgIDU1LCAyMjUsIDE3MiwgNSwgMjM1LCAxMTQsIDU1LCAyMjUsIDE3MiwgNSwgMjE3LCAxMDYsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjE1LCAxMTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAyMjksIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAxMSwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyNDYsIDg2LCA1NSwgMjI1LCAxNzIsIDUsIDIxNiwgMjA5LCA1NSwgMjI1LCAxNzIsIDUsIDE5MSwgNTUsIAorICAgIDIyNSwgMTcyLCA1LCAyNTIsIDE5OSwgNTUsIDIyNSwgMTcyLCA1LCAyNDQsIDIwNCwgNTUsIDIyNSwgMTcyLCA1LCAxOTgsIAorICAgIDU1LCAyMjUsIDE3MiwgNSwgMjI3LCAyNDIsIDU1LCAyMjUsIDE3MiwgNSwgMTg2LCA1NSwgMjI1LCAxNzIsIDUsIDIzMCwgCisgICAgMjM1LCA1NSwgMjI1LCAxNzIsIDUsIDIzMCwgMTA3LCA1NSwgMjI1LCAxNzIsIDUsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMTQsIDI3LCA1NSwgMjI1LCAxNzIsIDUsIDIxMywgMTc2LCA1NSwgMjI1LCAxNzIsIDUsIDIwNSwgNTUsIDIyNSwgMTcyLCAKKyAgICA1LCAyMjIsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyMzMsIDE0MSwgNTUsIDIyNSwgMTcyLCA1LCAyMDYsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjEwLCAxMTYsIDU1LCAyMjUsIDE3MiwgNSwgMjIwLCAxMDQsIDU1LCAyMjUsIDE3MiwgNSwgMjE4LCAyMjUsIAorICAgIDU1LCAyMjUsIDE3MiwgNSwgMTYyLCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgMTk0LCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgCisgICAgMTkzLCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgMTkyLCA1NSwgMjI1LCAxNzIsIDUsIDIxMSwgMTQyLCA1NSwgMjI1LCAxNzIsIAorICAgIDUsIDI0OCwgMjA4LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjA3LCA1NSwgMjI1LCAxNzIsIDUsIDI1MiwgMTc4LCA1NSwgCisgICAgMjI1LCAxNzIsIDUsIDI1MSwgOTMsIDU1LCAyMjUsIDE3MiwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDU0LCAKKyAgICAxMTEsIDU1LCAyMjUsIDE3MiwgNTQsIDEwNSwgNTUsIDIyNSwgMTcyLCA1NCwgMjE2LCAyNDgsIDU1LCAyMjUsIDE3MiwgNTQsIAorICAgIDIxNSwgNzMsIDU1LCAyMjUsIDE3MiwgNTQsIDI0MCwgMjE3LCAxODEsIDYsIDEsIDIwMCwgNzQsIDE4MSwgNiwgMSwgMjAwLCAKKyAgICA3NiwgMTgxLCA2LCAxLCAyMDAsIDYxLCAxODEsIDYsIDEsIDIwMCwgMjU0LCAyMTgsIDE4MSwgNiwgMSwgMjAwLCA3OCwgCisgICAgMTgxLCA2LCAxLCAyMDAsIDIyNiwgMTg3LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMTgxLCA2LCAxLCAyMTksIDI1MywgCisgICAgNzYsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDYxLCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyNTQsIDIxOCwgMTgxLCA2LCAxLCAKKyAgICAyMTksIDI1MywgNzgsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDIyNiwgMTg3LCAxODEsIDYsIDEsIDI1MywgMTc1LCAxODEsIDYsIAorICAgIDEsIDIyNiwgMTIwLCAxODEsIDYsIDEsIDIxMSwgMTk1LCAxODEsIDYsIDEsIDIxMSwgNDQsIDE4MSwgNiwgMSwgMjQyLCA2NywgCisgICAgMTgxLCA2LCAxLCAyMjUsIDIxNCwgMTgxLCA2LCAxLCAyNTIsIDc0LCAxODEsIDYsIDEsIDIxNywgMTIsIDE4MSwgNiwgMSwgCisgICAgMjQ4LCA4NSwgMTgxLCA2LCAxLCAyNTAsIDEzNiwgMTgxLCA2LCAxLCAyMzUsIDEzMCwgMTgxLCA2LCAxLCAyMzQsIDE5NSwgCisgICAgMTgxLCA2LCAxLCAyNDMsIDkwLCAxODEsIDYsIDEsIDI0NSwgMjEwLCAxODEsIDYsIDEsIDIxMywgMjUwLCAxODEsIDYsIDEsIAorICAgIDI0NSwgNjcsIDE4MSwgNiwgMSwgMjE2LCAxOTUsIDE4MSwgNiwgMSwgMjQ1LCA5MCwgMTgxLCA2LCAxLCAyMTAsIDkyLCAKKyAgICAxODEsIDYsIDEsIDI0NSwgODMsIDE4MSwgNiwgMSwgMjEwLCA3MywgMTgxLCA2LCAxLCAyNDUsIDEwMCwgMTgxLCA2LCAxLCAKKyAgICAyNDUsIDE4MiwgMTgxLCA2LCAxLCAyNDUsIDE2NywgMTgxLCA2LCAxLCAyNDUsIDE1OCwgMTgxLCA2LCAxLCAyNDUsIDE0NiwgCisgICAgMTgxLCA2LCAxLCAyMjYsIDIyMywgMTgxLCA2LCAxLCAyNDUsIDQ2LCAxODEsIDQsIDEsIDIwMCwgNzQsIDE4MSwgNCwgMSwgCisgICAgMjAwLCA3NiwgMTgxLCA0LCAxLCAyMDAsIDYxLCAxODEsIDQsIDEsIDIwMCwgMjU0LCAyMTgsIDE4MSwgNCwgMSwgMjAwLCAKKyAgICA3OCwgMTgxLCA0LCAxLCAyMDAsIDIyNiwgMTg3LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA3NCwgMTgxLCA0LCAxLCAyMTksIAorICAgIDI1MywgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDYxLCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyNTQsIDIxOCwgMTgxLCA0LCAKKyAgICAxLCAyMTksIDI1MywgNzgsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDIyNiwgMTg3LCAxODEsIDQsIDEsIDI1MywgMTc1LCAxODEsIAorICAgIDQsIDEsIDIyNiwgMTIwLCAxODEsIDQsIDEsIDIxMSwgMTk1LCAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCAKKyAgICA2NywgMTgxLCA0LCAxLCAyMjUsIDIxNCwgMTgxLCA0LCAxLCAyNTIsIDc0LCAxODEsIDQsIDEsIDIxNywgMTIsIDE4MSwgNCwgCisgICAgMSwgMjQ4LCA4NSwgMTgxLCA0LCAxLCAyNTAsIDEzNiwgMTgxLCA0LCAxLCAyMzUsIDEzMCwgMTgxLCA0LCAxLCAyMzQsIAorICAgIDE5NSwgMTgxLCA0LCAxLCAyNDMsIDkwLCAxODEsIDQsIDEsIDI0NSwgMjEwLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIAorICAgIDQsIDEsIDI0NSwgNjcsIDE4MSwgNCwgMSwgMjE2LCAxOTUsIDE4MSwgNCwgMSwgMjQ1LCA5MCwgMTgxLCA0LCAxLCAyMTAsIAorICAgIDkyLCAxODEsIDQsIDEsIDI0NSwgODMsIDE4MSwgNCwgMSwgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDEwMCwgMTgxLCA0LCAKKyAgICAxLCAyNDUsIDE4MiwgMTgxLCA0LCAxLCAyNDUsIDE2NywgMTgxLCA0LCAxLCAyNDUsIDE1OCwgMTgxLCA0LCAxLCAyNDUsIAorICAgIDE0NiwgMTgxLCA0LCAxLCAyMjYsIDIyMywgMTgxLCA0LCAxLCAyNDUsIDQ2LCAyMjAsIDcxLCAxLCAyMjUsIDIxMiwgMjIwLCAKKyAgICA3MSwgMSwgMjE2LCA2LCAyMjAsIDcxLCAxLCAyMzQsIDk3LCAyMjAsIDcxLCAxLCAyNDQsIDE1NSwgMjIwLCA3MSwgMSwgCisgICAgMjE2LCAxNzMsIDIyMCwgNzEsIDEsIDIxOSwgNjAsIDIyMCwgNzEsIDEsIDIxOCwgMTUsIDIyMCwgNzEsIDEsIDI1MCwgNjksIAorICAgIDIyMCwgNzEsIDEsIDIxMSwgNDYsIDIyMCwgNzEsIDEsIDI0MCwgMjE2LCAyMjAsIDcxLCAxLCAyNTIsIDEzLCAyMjAsIDcxLCAKKyAgICAxLCAyNDgsIDk3LCAyMjAsIDcxLCAxLCAyNDMsIDEyOCwgMjIwLCA3MSwgMSwgMjEzLCAxMjMsIDIyMCwgNzEsIDEsIDIxNiwgCisgICAgMTc3LCAyMjAsIDcxLCAxLCAyMTAsIDIxLCAyMjAsIDcxLCAxLCAyMzEsIDk0LCAyMjAsIDcxLCAxLCAyMzUsIDU1LCAyMjAsIAorICAgIDcxLCAxLCAyMTEsIDIyNSwgMjIwLCA3MSwgMSwgMjQyLCA1NSwgMjIwLCA3MSwgMSwgMjMyLCAxNDgsIDIyMCwgNzEsIDEsIAorICAgIDIzMCwgMTk0LCAyMjAsIDcxLCAxLCAyMzYsIDQ3LCAyMjAsIDcxLCAxLCAyNDUsIDIwOSwgMjIwLCA3MSwgMSwgMjUzLCAKKyAgICAyMzksIDIyMCwgNzEsIDEsIDI1NSwgMCwgMjIwLCA3MSwgMSwgMjI2LCAyMDAsIDIyMCwgNzEsIDEsIDIxMSwgMjEyLCAyMjAsIAorICAgIDcxLCAxLCAyMjYsIDEzNCwgMjIwLCA3MSwgMSwgMjU0LCAyMTgsIDIyMCwgNzEsIDEsIDIyMiwgMjEwLCAyMjAsIDcxLCAxLCAKKyAgICAyMjcsIDE5OCwgMjIwLCA3MSwgMSwgMjQ1LCAyMjUsIDIyMCwgNzEsIDEsIDI1NCwgMjIzLCAyMjAsIDcxLCAxLCAyNDAsIAorICAgIDExOCwgMjIwLCA3MSwgMSwgMjE0LCAxNjMsIDIyMCwgNzEsIDEsIDIyNywgMiwgMjIwLCA3MSwgMSwgMjI2LCAxODAsIDIyMCwgCisgICAgNzEsIDEsIDIyNiwgMjIyLCAyMjAsIDcxLCAxLCAyNTMsIDE3OCwgMjIwLCA3MSwgMSwgMjU0LCAyNywgMjIwLCA3MSwgMSwgCisgICAgMjI2LCAxNjIsIDIyMCwgNzEsIDEsIDI1NCwgMjAxLCAyMjAsIDcxLCAxLCAyNDUsIDk0LCAyMjAsIDcxLCAxLCAyNTQsIDUsIAorICAgIDIyMCwgNzEsIDEsIDI0NSwgMjM1LCAyMjAsIDcxLCAxLCAyNDAsIDEyNSwgMjIwLCA3MSwgMSwgMjExLCAxMywgMjI2LCAKKyAgICAxNDUsIDEsIDI1NCwgMTc5LCAyMjYsIDE0NSwgMSwgMjUyLCAxOTksIDIyNiwgMTQ1LCAxLCAyMTcsIDEwNiwgMjI2LCAxNDUsIAorICAgIDEsIDIzNSwgMTQ3LCAyMjYsIDE0NSwgMSwgMjExLCAxNjUsIDIyNiwgMTQ1LCAxLCAyMzQsIDEzOCwgMjI2LCAxNDUsIDEsIAorICAgIDI0OCwgODQsIDIyNiwgMTQ1LCAxLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMDYsIDIyNiwgMTQ1LCAxLCAyMjAsIDI4LCAyMjYsIAorICAgIDE0NSwgMSwgMjQ4LCAzMywgMjI2LCAxNDUsIDEsIDI1MCwgMjIzLCAyMjYsIDE0NSwgMSwgMjQzLCAxNDIsIDIyNiwgMTQ1LCAKKyAgICAxLCAyNDQsIDIwNCwgMjI2LCAxNDUsIDEsIDIyNCwgODksIDIyNiwgMTQ1LCAxLCAyMzUsIDE1LCAyMjYsIDE0NSwgMSwgCisgICAgMjMzLCAxMzYsIDIyNiwgMTQ1LCAxLCAyMzAsIDIwNSwgMjI2LCAxNDUsIDEsIDIyNywgMTgyLCAyMjYsIDE0NSwgMSwgMjEyLCAKKyAgICAzMCwgMjI2LCAxNDUsIDEsIDE2MiwgMjI2LCAxNDUsIDEsIDE5MiwgMjI2LCAxNDUsIDEsIDYxLCAyMjYsIDE0NSwgMSwgNzYsIAorICAgIDIyNiwgMTQ1LCAxLCA3NCwgMjI2LCAxNDUsIDEsIDc4LCAyMjYsIDE0NSwgMSwgNjksIDIyNiwgMTQ1LCAxLCAyNTUsIDgyLCAKKyAgICAyMjYsIDE0NSwgMSwgMjQ1LCAyMTcsIDIyNiwgMTQ1LCAxLCAyMjYsIDE4NywgMjI2LCAxNDUsIDIxLCAyMTAsIDg2LCAyMjYsIAorICAgIDE0NSwgMjEsIDExMSwgMjI2LCAxNDUsIDIxLCAxMDUsIDIyNiwgMTQ1LCAyMSwgMTU4LCAyMjYsIDE0NSwgMjEsIDE2MSwgCisgICAgMjI2LCAxNDUsIDIxLCAxOTAsIDIyNiwgMTQ1LCAyMSwgMTk1LCAyMjYsIDE0NSwgMjEsIDE5OSwgMjI2LCAxNDUsIDIxLCAKKyAgICAxOTYsIDIyNiwgMTQ1LCAyMSwgMjAxLCAyNDksIDc1LCAzLCA2MSwgMjQ5LCA3NSwgMywgNzYsIDI0OSwgNzUsIDMsIDc0LCAKKyAgICAyNDksIDc1LCAzLCA3OCwgMjQ5LCA3NSwgMywgNjksIDI0OSwgNzUsIDMsIDIzNSwgMTQ3LCAyNDksIDc1LCAzLCAyMzUsIAorICAgIDc0LCAyNDksIDc1LCAzLCAxNzYsIDI0OSwgNzUsIDMsIDIzNCwgMTg4LCAyNDksIDc1LCAzLCAyMzQsIDk4LCAyNDksIDc1LCAKKyAgICAzLCAyMzQsIDM0LCAyNDksIDc1LCAzLCAyMzMsIDIyMywgMjQ5LCA3NSwgMywgMjMzLCAxNDEsIDI0OSwgNzUsIDMsIDIzMywgCisgICAgNjQsIDI0OSwgNzUsIDMsIDIzMiwgMjQ3LCAyNDksIDc1LCAzLCAyMzIsIDE2MiwgMjQ5LCA3NSwgMywgMjMyLCAxMDMsIAorICAgIDI0OSwgNzUsIDMsIDE4NiwgMjQ5LCA3NSwgMywgMjMxLCA5NiwgMjQ5LCA3NSwgMywgMjMwLCAyMzUsIDI0OSwgNzUsIDMsIAorICAgIDIzMCwgMTY2LCAyNDksIDc1LCAzLCAyMzAsIDEwNywgMjQ5LCA3NSwgMywgMTk4LCAyNDksIDc1LCAzLCAyMjksIDExMiwgCisgICAgMjQ5LCA3NSwgMywgMjI4LCAyMzgsIDI0OSwgNzUsIDMsIDIyOCwgNzksIDI0OSwgNzUsIDMsIDIyNywgMjQyLCAyNDksIDc1LCAKKyAgICAzLCAxOTEsIDI0OSwgNzUsIDMsIDIyNSwgMjI0LCAyNDksIDc1LCAzLCAyMjUsIDExMSwgMjQ5LCA3NSwgMywgMjI1LCAxOSwgCisgICAgMjQ5LCA3NSwgMywgMjI0LCAxNTMsIDI0OSwgNzUsIDMsIDIwNSwgMjQ5LCA3NSwgMywgMjIzLCAxMzEsIDI0OSwgNzUsIDMsIAorICAgIDIyMywgMzgsIDI0OSwgNzUsIDMsIDIyMiwgMjEzLCAyNDksIDc1LCAzLCAyMjIsIDE0MiwgMjQ5LCA3NSwgMywgMjA2LCAKKyAgICAyNDksIDc1LCAzLCAyMjEsIDE4MywgMjQ5LCA3NSwgMywgMjE5LCAxOTMsIDI0OSwgNzUsIDMsIDIxOSwgNjAsIDI0OSwgNzUsIAorICAgIDMsIDIxOCwgODQsIDI0OSwgNzUsIDMsIDIxNywgMTA2LCAyNDksIDc1LCAzLCAyMTcsIDIzLCAyNDksIDc1LCAzLCAyMTYsIAorICAgIDExOCwgMjQ5LCA3NSwgMywgMTEyLCAyNDksIDc1LCAzLCAyMTUsIDExOSwgMjQ5LCA3NSwgMywgMjEyLCA2NSwgMjQ5LCA3NSwgCisgICAgMywgMjEyLCAyMiwgMjQ5LCA3NSwgMywgMjExLCAyNTAsIDI0OSwgNzUsIDMsIDIxMSwgMjI3LCAyNDksIDc1LCAzLCAyMTEsIAorICAgIDE2NSwgMjQ5LCA3NSwgMywgMjExLCAxNjIsIDI0OSwgNzUsIDMsIDIxMCwgMTE2LCAyNDksIDc1LCAzLCAyMTAsIDIzLCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1NCwgMTc3LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1MiwgMzMsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgMSwgMjQyLCAyMDgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjQ4LCAxOTYsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjQxLCAKKyAgICAyNDUsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEyLCAzMCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTAsIDk3LCAyMzYsIDgsIAorICAgIDI1NCwgMzUsIDEsIDI0MSwgMjAyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxNiwgMjI3LCAyMzYsIDgsIDI1NCwgMzUsIDEsIAorICAgIDIxMCwgMjMyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIzNCwgMjMxLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIzMywgOTksIDIzNiwgCisgICAgOCwgMjU0LCAzNSwgMSwgMjMxLCA3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjcsIDE5OCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAKKyAgICAyMjEsIDI1MSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTMsIDE3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjUsIDIyNCwgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjIsIDI2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNCwgMzcsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgMSwgMjIzLCA3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjAsIDIyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxNywgMzcsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMjIxLCAxNzUsIDUwLCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxMTEsIDIzNiwgOCwgMjU0LCAzNSwgCisgICAgNTQsIDEwNSwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTU4LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAyMTYsIDI0OCwgMjM2LCA4LCAKKyAgICAyNTQsIDM1LCA1NCwgMjE1LCA3MywgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM2LCA4LCAyNTQsIAorICAgIDM1LCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyMjUsIDEyMiwgCisgICAgMSwgMjU0LCAxNzQsIDIyNSwgMTIyLCAxLCAyNTIsIDM2LCAyMjUsIDEyMiwgMSwgMjQzLCAxMTYsIDIyNSwgMTIyLCAxLCAKKyAgICAyNDgsIDY0LCAyMjUsIDEyMiwgMSwgMjQxLCAyNDUsIDIyNSwgMTIyLCAxLCAyMTIsIDM3LCAyMjUsIDEyMiwgMSwgMjEwLCAKKyAgICAxMTAsIDIyNSwgMTIyLCAxLCAyNDEsIDIwNCwgMjI1LCAxMjIsIDEsIDIxNiwgMjMxLCAyMjUsIDEyMiwgMSwgMjEwLCAyMzMsIAorICAgIDIyNSwgMTIyLCAxLCAyMzUsIDAsIDIyNSwgMTIyLCAxLCAyMzMsIDEwNSwgMjI1LCAxMjIsIDEsIDIzMSwgNzAsIDIyNSwgCisgICAgMTIyLCAxLCAyMjcsIDE5OCwgMjI1LCAxMjIsIDEsIDIyMCwgMTQ2LCAyMjUsIDEyMiwgMSwgMjU0LCAyMDUsIDIyNSwgMTIyLCAKKyAgICAxLCAyMjUsIDIyNCwgMjI1LCAxMjIsIDEsIDIyMiwgMjcsIDIyNSwgMTIyLCAxLCAyMjQsIDQyLCAyMjUsIDEyMiwgMSwgCisgICAgMjIyLCAxOTEsIDIyNSwgMTIyLCAxLCAyMjAsIDIyLCAyMjUsIDEyMiwgMSwgMjE3LCA0MiwgMjI1LCAxMjIsIDU0LCAxMTEsIAorICAgIDIyNSwgMTIyLCA1NCwgMjE2LCAyNDgsIDIyNSwgMTIyLCA1NCwgMjE1LCA3MywgMjI1LCAxMjIsIDU0LCAxMjMsIDI0MCwgCisgICAgMjE3LCAyMjUsIDEyMiwgNTQsIDEwNSwgMjI1LCAxMjIsIDU0LCAxNTgsIDIyNSwgMTIyLCAyMTEsIDIwOSwgMjIwLCAxMzksIAorICAgIDIzMiwgNjQsIDEsIDYxLCAyMzIsIDY0LCAxLCAyNTMsIDE2NiwgMjMyLCA2NCwgMSwgMjQzLCAyMDksIDIzMiwgNjQsIDEsIAorICAgIDI0OSwgNjgsIDIzMiwgNjQsIDEsIDc2LCAyMzIsIDY0LCAxLCAyMTQsIDEwNSwgMjMyLCA2NCwgMSwgNzQsIDIzMiwgNjQsIAorICAgIDEsIDIxMSwgMTE3LCAyMzIsIDY0LCAxLCAyMzUsIDI5LCAyMzIsIDY0LCAxLCAxNTYsIDIzMiwgNjQsIDEsIDE5NCwgMjMyLCAKKyAgICA2NCwgMSwgMjMwLCAzMCwgMjMyLCA2NCwgMSwgNzgsIDIzMiwgNjQsIDEsIDE1MywgMjMyLCA2NCwgMSwgMjE4LCAyMjgsIAorICAgIDIzMiwgNjQsIDEsIDIxNywgMTUzLCAyMzIsIDY0LCAxLCA2OSwgMjMyLCA2NCwgMSwgMjQ1LCAxNCwgMjMyLCA2NCwgMSwgCisgICAgMjI0LCA5OSwgMjMyLCA2NCwgMSwgMjIyLCA5MywgMjMyLCA2NCwgMSwgMjE1LCAxNjAsIDIzMiwgNjQsIDEsIDI1NCwgMTMxLCAKKyAgICAyMzIsIDY0LCAxLCAyNDUsIDE1OCwgMjMyLCA2NCwgMSwgMjMyLCA2NywgMjMyLCA2NCwgMSwgMjI4LCAxMTYsIDIzMiwgNjQsIAorICAgIDEsIDI1MSwgNzQsIDIzMiwgNjQsIDIxNSwgMjIzLCA3OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDYxLCAyMzEsIDUzLCAKKyAgICAyNDEsIDE4MSwgMSwgNzYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3NCwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDc4LCAyMzEsIAorICAgIDUzLCAyNDEsIDE4MSwgMSwgMTkyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjEyLCA2NSwgMjMxLCA1MywgMjQxLCAxODEsIAorICAgIDEsIDI1MiwgMTk5LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjUyLCAxOTgsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxOTEsIAorICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxODYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxOTgsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyMjksIDIzMywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjI5LCAKKyAgICAxMTEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDUsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjMsIDE5MCwgMjMxLCA1MywgCisgICAgMjQxLCAxODEsIDEsIDIzMywgMTQxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjM0LCAxMzgsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyNDEsIDE5NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIwNiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMiwgMzUsIAorICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjEsIDE4MywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE3NiwgMjMxLCA1MywgMjQxLCAKKyAgICAxODEsIDEsIDIyNCwgOTEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDEwNiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIAorICAgIDIxNywgMTA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAyMywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjIsIAorICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxMTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyNDgsIDIyOSwgMjMxLCA1MywgMjQxLCAKKyAgICAxODEsIDE2LCAyMTMsIDE3MCwgMjMxLCA1MywgMjQxLCAxODEsIDE2LCAyMTMsIDE2OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAorICAgIDYxLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCA3NCwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDc4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTkyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjEyLCA2NSwgCisgICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI1MiwgMTk5LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTkxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMTg2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTk4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjI5LCAxMTIsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMDUsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICAyMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTQsIDMxLCAyMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjEsIDE4MywgCisgICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE3NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyNCwgOTEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAyMTcsIDEwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICAxMTIsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNDgsIDIyOSwgMjMxLCA1MywgMjQ5LCAxMDIsIDIzMiwgMTUxLCAyMjIsIAorICAgIDIxOSwgMjMxLCA1MywgMjQ5LCAxMDIsIDIzMiwgMTUxLCAyMzYsIDEzLCAyMzQsIDEyNiwgMSwgNjEsIDIzNCwgMTI2LCAyNSwgCisgICAgNSwgNzQsIDIzNCwgMTI2LCAyNSwgNSwgNjksIDIzNCwgMTI2LCAyNSwgNSwgMTQ5LCAxNTMsIDIzNCwgMTI2LCAyNSwgNSwgCisgICAgNzYsIDIzNCwgMTI2LCAyNSwgNSwgNzgsIDIzNCwgMTI2LCAyNSwgMjMzLCAyOSwgNzksIDIzNCwgMTI2LCA1LCA1MiwgMjIyLCAKKyAgICAyMzcsIDUxLCAyMzQsIDEyNiwgNSwgMjU0LCA4MywgMjM0LCAxMjYsIDUsIDIxMywgMTQ3LCAyMzQsIDEyNiwgMSwgMTc2LCAKKyAgICAyMzQsIDEyNiwgMSwgMjM0LCAxMzgsIDIzNCwgMTI2LCAxLCAyNDMsIDE0MiwgMjM0LCAxMjYsIDEsIDI0MywgMCwgMjM0LCAKKyAgICAxMjYsIDEsIDI1MSwgNDEsIDIzNCwgMTI2LCAxLCAyNTAsIDE2NSwgMjM0LCAxMjYsIDEsIDIzNSwgMTQ3LCAyMzQsIDEyNiwgCisgICAgMSwgMjI3LCAxNjksIDIzNCwgMTI2LCAxLCAyMTUsIDE1NywgMjM0LCAxMjYsIDEsIDIxNSwgMTQ1LCAyMzQsIDEyNiwgMSwgCisgICAgMjQ4LCAxNDMsIDIzNCwgMTI2LCAxLCAyNDgsIDEyNywgMjM0LCAxMjYsIDEsIDIyOCwgMTE1LCAyMzQsIDEyNiwgMSwgMjE3LCAKKyAgICAxMDYsIDIzNCwgMTI2LCAxLCAyMTYsIDIwOSwgMjM0LCAxMjYsIDEsIDI0OCwgMjI5LCAyMzQsIDEyNiwgMSwgMjQ4LCAzMywgCisgICAgMjM0LCAxMjYsIDEsIDE5OCwgMjM0LCAxMjYsIDEsIDE5MSwgMjM0LCAxMjYsIDEsIDIyNSwgMTUwLCAyMzQsIDEyNiwgMSwgCisgICAgMjUyLCAxOTksIDIzNCwgMTI2LCAxLCAyNTIsIDI2LCAyMzQsIDEyNiwgMSwgMTg2LCAyMzQsIDEyNiwgMSwgMTkyLCAyMzQsIAorICAgIDEyNiwgMSwgMjA1LCAyMzQsIDEyNiwgMSwgMjMzLCAxNDEsIDIzNCwgMTI2LCAxLCAyMTQsIDI3LCAyMzQsIDEyNiwgMSwgCisgICAgMjIwLCAxMDQsIDIzNCwgMTI2LCAxLCAyMTgsIDIyNSwgMjM0LCAxMjYsIDEsIDIwNiwgMjM0LCAxMjYsIDEsIDIxMCwgMTE2LCAKKyAgICAyMzQsIDEyNiwgMSwgMTYyLCAyMzQsIDEyNiwgMSwgMjM0LCA1MiwgMjM0LCAxMjYsIDEsIDIxNSwgMTI1LCAyMzQsIDEyNiwgCisgICAgNSwgMjUyLCAxNDksIDQ4LCAyMzQsIDEyNiwgNSwgMjUwLCAyMjksIDIzNCwgMTI2LCA1LCA1OSwgNTEsIDIzNCwgMTI2LCAKKyAgICAyMTMsIDE1MiwgMjM0LCAxMjYsIDIxLCAxMTEsIDIzNCwgMTI2LCAyMSwgMTA1LCAyMzQsIDEyNiwgMjEsIDE1OCwgMjM0LCAKKyAgICAxMjYsIDIxLCAxNjEsIDIzNCwgMTI2LCA1NCwgMjE2LCAyNDgsIDIzNCwgMTI2LCA1NCwgMjE1LCA3MywgMjM0LCAxMjYsIAorICAgIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzQsIDEyNiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjQ3LCAKKyAgICAxMjgsIDIzNCwgMTI2LCAyMjQsIDE0NCwgNCwgMjUwLCA0MywgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNTAsIDQzLCAyMzQsIAorICAgIDEyNiwgMjI0LCAxNDQsIDI0OSwgMTQ1LCAxMzAsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjMxLCAxODUsIDIzNCwgMTI2LCAKKyAgICAyMjQsIDE0NCwgMjMyLCAxMjEsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjQ4LCAxODYsIDIzNCwgMTI2LCAyMjQsIDE0NCwgNTIsIAorICAgIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMiwgMjEzLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQxLCAKKyAgICAyNDUsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMzMsIDk5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQxLCAyMDIsIAorICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMzEsIDcwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjI0LCAzNywgNTUsIAorICAgIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMiwgMzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjAsIDIyLCA1NSwgMjE5LCAKKyAgICAzMCwgMjU0LCA0NiwgMSwgMjIzLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MiwgMzMsIDU1LCAyMTksIDMwLCAKKyAgICAyNTQsIDQ2LCAxLCAyMTcsIDM3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIxLCAyMjgsIDU1LCAyMTksIDMwLCAyNTQsIAorICAgIDQ2LCAxLCAyMzQsIDIzMSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNywgMTk4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgCisgICAgMSwgMjM0LCAxMjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjIsIDI2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjIxLCAyNTEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDQsIDE2MiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDI1NCwgMTc5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjUzLCAxNjksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyNDgsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQyLCAyMDgsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDgsIAorICAgIDE5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAKKyAgICAyMjcsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDk2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAyNywgCisgICAgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMCwgMjMyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxOTgsIDU1LCAKKyAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDU0LCAxMTEsIDU1LCAyMTksIAorICAgIDMwLCAyNTQsIDQ2LCA1NCwgMjQ0LCAxMjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxMzIsIDIzNSwgMjQ1LCAyNTMsIDE4MCwgCisgICAgMSwgNjEsIDI1MywgMTgwLCAxLCAyNTUsIDgyLCAyNTMsIDE4MCwgMSwgMjU0LCA4MSwgMjUzLCAxODAsIDEsIDI1NSwgNDEsIAorICAgIDI1MywgMTgwLCAxLCAyNTQsIDEzMSwgMjUzLCAxODAsIDEsIDI1NSwgNDIsIDI1MywgMTgwLCAxLCAyNTQsIDI1MiwgMjUzLCAKKyAgICAxODAsIDEsIDI1NCwgMjQ4LCAyNTMsIDE4MCwgMSwgNzYsIDI1MywgMTgwLCAxLCAyNDUsIDIxNywgMjUzLCAxODAsIDEsIAorICAgIDc4LCAyNTMsIDE4MCwgMSwgMjI2LCAxODcsIDI1MywgMTgwLCAxLCA3NCwgMjUzLCAxODAsIDEsIDIzNiwgNDAsIDI1MywgCisgICAgMTgwLCAxLCA2OSwgMjUzLCAxODAsIDEsIDIxNCwgMTE4LCAyNTMsIDE4MCwgMSwgMjM0LCAxODgsIDI1MywgMTgwLCAxLCAKKyAgICAyMTEsIDE2MiwgMjUzLCAxODAsIDEsIDIxMSwgMTI4LCAyNTMsIDE4MCwgMSwgMjExLCAxMzcsIDI1MywgMTgwLCAxLCAyNDMsIAorICAgIDY5LCAyNTMsIDE4MCwgMSwgMjQzLCAzMSwgMjUzLCAxODAsIDEsIDI0MiwgMjQzLCAyNTMsIDE4MCwgMSwgMjUwLCAxOTgsIAorICAgIDI1MywgMTgwLCAxLCAyMzUsIDEzMiwgMjUzLCAxODAsIDEsIDIxNywgMjMsIDI1MywgMTgwLCAxLCAyMTYsIDE5NiwgMjUzLCAKKyAgICAxODAsIDEsIDI0OCwgOTgsIDI1MywgMTgwLCAxLCAyNDgsIDI1LCAyNTMsIDE4MCwgMSwgMjE1LCAxNTIsIDI1MywgMTgwLCAKKyAgICAxLCAyMjUsIDIyNCwgMjUzLCAxODAsIDEsIDI0NCwgMTYyLCAyNTMsIDE4MCwgMSwgMjUyLCA4MywgMjUzLCAxODAsIDEsIAorICAgIDI1MiwgMjIsIDI1MywgMTgwLCAxLCAyMjksIDY5LCAyNTMsIDE4MCwgMSwgMjI4LCAyNDQsIDI1MywgMTgwLCAxLCAyMjgsIAorICAgIDI0NSwgMjUzLCAxODAsIDEsIDIyOSwgMTEyLCAyNTMsIDE4MCwgMSwgMjI3LCAxNjAsIDI1MywgMTgwLCAxLCAyMjgsIDExMCwgCisgICAgMjUzLCAxODAsIDEsIDIzMSwgOTYsIDI1MywgMTgwLCAxLCAyNDEsIDEyMywgMjUzLCAxODAsIDEsIDIxMCwgMTY2LCAyNTMsIAorICAgIDE4MCwgMSwgMjExLCA0NywgMjUzLCAxODAsIDEsIDIxMywgMjU1LCAyNTMsIDE4MCwgMSwgMjIzLCAxMzEsIDI1MywgMTgwLCAKKyAgICAxLCAyMzMsIDY0LCAyNTMsIDE4MCwgMSwgMjIxLCAxODMsIDI1MywgMTgwLCAxLCAyMTAsIDk0LCAyNTMsIDE4MCwgMSwgCisgICAgMjIwLCA2NSwgMjUzLCAxODAsIDEsIDIxMCwgNzQsIDI1MywgMTgwLCAxLCAyMTksIDIwMCwgMjUzLCAxODAsIDEsIDIxOCwgCisgICAgMTk1LCAyNTMsIDE4MCwgMSwgMjQxLCAyNDUsIDI1MywgMTgwLCAyNTUsIDMwLCA3OSwgMjE2LCA4MCwgMTEzLCAxNzAsIAorICAgIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDQsIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAyMzMsIDkxLCAKKyAgICAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgMTIzLCA1OSwgMTE1LCAxMTMsIDE3MCwgMjI0LCAKKyAgICAxNDMsIDIzMywgOTEsIDExMywgMjIyLCAyMzUsIDExNSwgMTIzLCAyMjIsIDIzNywgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgCisgICAgMjIyLCAyMzcsIDExNSwgMTEzLCAyMjIsIDIzNSwgMjI0LCAxNDMsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1NCwgMTc3LCAKKyAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTIsIDMzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjQ4LCAxOTYsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MSwgMjQ1LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMTIsIDMwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDk3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDIwMiwgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxMCwgMjMyLCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyMzQsIDIzMSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjMxLCA3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI3LCAxOTgsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyMSwgMjUxLCAKKyAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTMsIDE3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDIyMiwgMjYsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNCwgMzcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIyMywgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyMCwgMjIsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNywgMzcsIDIzNSwgCisgICAgMjI1LCAyMjYsIDIsIDU0LCAxMTEsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxMDUsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAKKyAgICAxNTgsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxNjEsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAyMTYsIDI0OCwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgNTQsIDIxNSwgNzMsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzUsIDIyNSwgMjI2LCAKKyAgICAyLCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI1NCwgMTc3LCAyMzUsIDIyNSwgMjI2LCA3NiwgCisgICAgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MiwgMjA4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQ4LCAKKyAgICAxOTYsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxMiwgMjksIDIzNSwgCisgICAgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDk3LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyMDIsIDIzNSwgMjI1LCAyMjYsIAorICAgIDc2LCAxLCAyMTYsIDIyNywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxMCwgMjMyLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgCisgICAgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMzMsIDk5LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMxLCA2OSwgCisgICAgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjIxLCAyNTEsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDc2LCAxLCAyMjUsIDIyNCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMiwgMjYsIDIzNSwgMjI1LCAyMjYsIDc2LCAKKyAgICAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjE3LCAzNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMTEsIAorICAgIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDE1OCwgMjM1LCAyMjUsIDIyNiwgCisgICAgNzYsIDU0LCAxNjEsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMjE1LCAKKyAgICA3MywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEyMywgCisgICAgMjE2LCAxNDgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA2MSwgNTUsIDIwMiwgMSwgMjExLCAzNywgNjEsIDU1LCAyMDIsIDEsIAorICAgIDIxMSwgMzcsIDI1NCwgMjUyLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNzQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDc0LCA1NSwgCisgICAgMjAyLCAxLCAyMTEsIDM3LCA3NiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAKKyAgICAyMzgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMjM4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU1LCAzNCwgNTUsIAorICAgIDIwMiwgMSwgMjExLCAzNywgMjU1LCAzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjUxLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjI1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NiwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgOCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU1LCA4LCA1NSwgMjAyLCAxLCAKKyAgICAyMjYsIDE1MywgMjU0LCAyNTAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDIwLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNDUsIDIwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAxNzUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMTc1LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjMzLCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjU0LCAyNDQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMjYsIAorICAgIDE1MywgMjI2LCAyMzcsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAKKyAgICAxODcsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMTg3LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDMsIDU1LCAKKyAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2OSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTY3LCA1NSwgMjAyLCAxLCAKKyAgICAyMjYsIDE1MywgMjU0LCAxMzEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0MSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDEzOSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxMzksIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE1NSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxNTUsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNDUsIDEyNiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgCisgICAgMzcsIDI1NCwgMTIzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNDYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgCisgICAgMjQwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMTYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE3OSwgNTUsIAorICAgIDIwMiwgMSwgMjI2LCAxNTMsIDI0MCwgMTIwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMjMsIDU1LCAyMDIsIDEsIAorICAgIDIxMSwgMzcsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCA1MywgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCA1MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIzNSwgMTg4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMzUsIDE4OCwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTYzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDE2MywgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1NCwgNDksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgNDksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAKKyAgICAyNTQsIDIzOSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMjQ1LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzcsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDIzOSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAyMzksIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNDUsIDgzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDgzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCisgICAgMjUzLCAyMTQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzQsIAorICAgIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjM0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNDQsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTIsIDEzMywgMjIyLCAxMjksIDIxLCAxMTEsIDIyMiwgMTI5LCAyMSwgMTA1LCAyMjIsIDEyOSwgCisgICAgMjEsIDE1OCwgMjIyLCAxMjksIDIxLCAxNjEsIDIyMiwgMTI5LCAyMSwgMTkwLCAyMjIsIDEyOSwgMjEsIDE5NSwgMjIyLCAKKyAgICAxMjksIDIxLCAxOTksIDIyMiwgMTI5LCAyMSwgMTk2LCAyMjIsIDEyOSwgMjEsIDIwMSwgMjIyLCAxMjksIDU0LCAyMTYsIAorICAgIDI0OCwgMjIyLCAxMjksIDU0LCAyMTUsIDczLCAyMjIsIDEyOSwgNTQsIDIxNiwgMTYzLCAyMjIsIDEyOSwgNTQsIDI0NCwgCisgICAgMjMsIDIyMiwgMTI5LCA1NCwgMjQ0LCAxMjIsIDIyMiwgMTI5LCA1NCwgMjE5LCAxMTMsIDIyMiwgMTI5LCA1NCwgMjIwLCAKKyAgICAxMTgsIDIyMiwgMTI5LCA1NCwgMjQ1LCAxOTIsIDIyMiwgMTI5LCA1NCwgMjI4LCAyMDAsIDIyMiwgMTI5LCA1NCwgMTIzLCAKKyAgICAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMTMsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDEzNCwgMjQwLCAyMTcsIDIyMiwgCisgICAgMTI5LCA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDIyMiwgMTI5LCAKKyAgICA1NCwgMjE5LCAxMjcsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAKKyAgICAyNDUsIDIwMSwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyMjIsIDEyOSwgMjQ0LCAxMCwgCisgICAgMTIzLCAyNDIsIDM0LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTIzLCAKKyAgICAyMTYsIDE2OSwgMjIyLCAxMjksIDI0NCwgMTAsIDExMywgMjE2LCAxNjcsIDExOCwgNSwgMjUxLCA3LCAxMTgsIDUsIDI1NCwgCisgICAgODMsIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDgsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIAorICAgIDExOCwgMSwgMjU1LCA4MiwgMTE4LCAxLCA3NCwgMTE4LCAxLCAyMzYsIDQwLCAxMTgsIDEsIDY5LCAxMTgsIDEsIDIxNCwgCisgICAgMTE4LCAxMTgsIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODIsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgCisgICAgMTQ5LCAyMzIsIDE5MSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTQsIDIxMCwgMTE4LCAxLCA3OCwgMTE4LCAxLCAyNTMsIAorICAgIDIwMCwgMTE4LCAxLCAxNzYsIDExOCwgMSwgMjM0LCAxMzgsIDExOCwgMSwgMjQzLCAxNDIsIDExOCwgMSwgMjQzLCAwLCAKKyAgICAxMTgsIDEsIDIyOSwgODIsIDExOCwgMSwgMjUxLCA0MSwgMTE4LCAxLCAyNTAsIDE2NSwgMTE4LCAxLCAyMzUsIDE0NywgCisgICAgMTE4LCAxLCAyMzUsIDEyMCwgMTE4LCAxLCAyMjcsIDE2OSwgMTE4LCAxLCAyMTUsIDE1NywgMTE4LCAxLCAyMTUsIDE0NSwgCisgICAgMTE4LCAxLCAyNDgsIDE0MywgMTE4LCAxLCAyNDgsIDEyNywgMTE4LCAxLCAyMjgsIDExNSwgMTE4LCAxLCAyMTcsIDEwNiwgCisgICAgMTE4LCAxLCAyMTYsIDIwOSwgMTE4LCAxLCAyNDgsIDIyOSwgMTE4LCAxLCAyNDgsIDMzLCAxMTgsIDEsIDE5OCwgMTE4LCAxLCAKKyAgICAxOTEsIDExOCwgMSwgMjI1LCAxNTAsIDExOCwgMSwgMjUyLCAxOTksIDExOCwgMSwgMjUyLCAyNiwgMTE4LCAxLCAxODYsIAorICAgIDExOCwgMSwgMTkyLCAxMTgsIDEsIDIwNSwgMTE4LCAxLCAyMzMsIDE0MSwgMTE4LCAxLCAyMTQsIDI3LCAxMTgsIDEsIDIyMCwgCisgICAgMTA0LCAxMTgsIDEsIDIxOCwgMjI1LCAxMTgsIDEsIDIwNiwgMTE4LCAxLCAxNjIsIDExOCwgMSwgMjMyLCAxOTAsIDExOCwgCisgICAgMSwgNTUsIDM2LCAyMzIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyMiwgMTgxLCAxMTgsIDEsIDU1LCAzNiwgMjI4LCA5NywgCisgICAgMTE4LCAyNSwgNSwgMjU1LCA4MiwgMTE4LCAyNSwgNSwgMjUyLCAyMywgMjU1LCA4MiwgMTE4LCAyNSwgNSwgNzQsIDExOCwgCisgICAgMjUsIDUsIDIzNiwgNDAsIDExOCwgMjUsIDUsIDY5LCAxMTgsIDI1LCA1LCAyMTQsIDExOCwgMTE4LCAyNSwgNSwgMTQ5LCAKKyAgICAxNTMsIDExOCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDExOCwgMjUsIDUsIDE0OSwgMTU2LCAxMTgsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxMTgsIDI1LCA1LCA3NiwgMTE4LCAyNSwgNSwgMjU0LCAyMTAsIDExOCwgMjUsIDUsIDc4LCAxMTgsIDI1LCAKKyAgICA1LCAyNTMsIDIwMCwgMTE4LCAyMTMsIDE1MiwgMTE4LCAyNDgsIDE4NiwgMTE4LCA1MiwgMjQ4LCAxODYsIDExOCwgMjI0LCAKKyAgICAxNDQsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCA1MiwgMjQ3LCAxMjgsIDExOCwgMjI0LCAxNDQsIDIzMiwgMjE5LCAxMTgsIAorICAgIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDEyMSwgMTE4LCA1NCwgMTExLCAxMTgsIDU0LCAKKyAgICAxMDUsIDExOCwgNTQsIDE1OCwgMTE4LCA1NCwgMTYxLCAxMTgsIDU0LCAxOTAsIDExOCwgNTQsIDE5NSwgMTE4LCA1NCwgCisgICAgMTk5LCAxMTgsIDU0LCAxOTYsIDExOCwgNTQsIDIwMSwgMTE4LCA1NCwgMjE2LCAyNDgsIDExOCwgNTQsIDIxNSwgNzMsIAorICAgIDExOCwgNTQsIDIxNiwgMTYzLCAxMTgsIDU0LCAyNDQsIDIzLCAxMTgsIDU0LCAyNDQsIDEyMiwgMTE4LCA1NCwgMjE5LCAKKyAgICAxMTMsIDExOCwgNTQsIDIyMCwgMTE4LCAxMTgsIDU0LCAyNDUsIDE5MiwgMTE4LCA1NCwgMjI4LCAyMDAsIDExOCwgNTQsIAorICAgIDEyMywgMjQwLCAyMTcsIDExOCwgNTQsIDEyMywgMjE2LCAxNDgsIDExOCwgMjEsIDIxMCwgODYsIDExOCwgMjEsIDExMSwgCisgICAgMTE4LCAyMSwgMTA1LCAxMTgsIDIxLCAxNTgsIDExOCwgMjEsIDE2MSwgMTE4LCAyMSwgMTkwLCAxMTgsIDIxLCAxOTUsIAorICAgIDExOCwgMjEsIDE5OSwgMTE4LCAyMSwgMTk2LCAxMTgsIDIxLCAyMDEsIDIzNCwgMjUwLCA1LCAyNTEsIDcsIDIzNCwgMjUwLCAKKyAgICA1LCAyNTQsIDgzLCAyMzQsIDI1MCwgNSwgMjEzLCAxNDcsIDIzNCwgMjUwLCAxLCA2MSwgMjM0LCAyNTAsIDEsIDI1NSwgODIsIAorICAgIDIzNCwgMjUwLCAxLCA3NCwgMjM0LCAyNTAsIDEsIDIzNiwgNDAsIDIzNCwgMjUwLCAxLCA2OSwgMjM0LCAyNTAsIDEsIDIxNCwgCisgICAgMTE4LCAyMzQsIDI1MCwgMSwgNzYsIDIzNCwgMjUwLCAxLCAyNTQsIDIxMCwgMjM0LCAyNTAsIDEsIDc4LCAyMzQsIDI1MCwgCisgICAgMSwgMjUzLCAyMDAsIDIzNCwgMjUwLCAxLCAxNzYsIDIzNCwgMjUwLCAxLCAyMzQsIDEzOCwgMjM0LCAyNTAsIDEsIDI0MywgCisgICAgMTQyLCAyMzQsIDI1MCwgMSwgMjQzLCAwLCAyMzQsIDI1MCwgMSwgMjI5LCA4MiwgMjM0LCAyNTAsIDEsIDI1MSwgNDEsIAorICAgIDIzNCwgMjUwLCAxLCAyNTAsIDE2NSwgMjM0LCAyNTAsIDEsIDIzNSwgMTQ3LCAyMzQsIDI1MCwgMSwgMjM1LCAxMjAsIDIzNCwgCisgICAgMjUwLCAxLCAyMjcsIDE2OSwgMjM0LCAyNTAsIDEsIDIxNSwgMTU3LCAyMzQsIDI1MCwgMSwgMjE1LCAxNDUsIDIzNCwgMjUwLCAKKyAgICAxLCAyNDgsIDE0MywgMjM0LCAyNTAsIDEsIDI0OCwgMTMyLCAyMzQsIDI1MCwgMSwgMjQ4LCAxMjcsIDIzNCwgMjUwLCAxLCAKKyAgICAyMjMsIDQyLCAyMzQsIDI1MCwgMSwgMjI4LCAxMTUsIDIzNCwgMjUwLCAxLCAyMTcsIDEwNiwgMjM0LCAyNTAsIDEsIDIxNiwgCisgICAgMjA5LCAyMzQsIDI1MCwgMSwgMjQ4LCAyMjksIDIzNCwgMjUwLCAxLCAyNDgsIDMzLCAyMzQsIDI1MCwgMSwgMTk4LCAyMzQsIAorICAgIDI1MCwgMSwgMTkxLCAyMzQsIDI1MCwgMSwgMjI1LCAxNTAsIDIzNCwgMjUwLCAxLCAyNTIsIDE5OSwgMjM0LCAyNTAsIDEsIAorICAgIDI1MiwgMjYsIDIzNCwgMjUwLCAxLCAxODYsIDIzNCwgMjUwLCAxLCAxOTIsIDIzNCwgMjUwLCAxLCAyMDUsIDIzNCwgMjUwLCAKKyAgICAxLCAyMzMsIDE0MSwgMjM0LCAyNTAsIDEsIDIxNCwgMjcsIDIzNCwgMjUwLCAxLCAyMjAsIDEwNCwgMjM0LCAyNTAsIDEsIAorICAgIDIxOCwgMjI1LCAyMzQsIDI1MCwgMSwgMjA2LCAyMzQsIDI1MCwgMSwgMTYyLCAyMzQsIDI1MCwgMjUsIDUsIDI1NSwgODIsIAorICAgIDIzNCwgMjUwLCAyNSwgNSwgNzQsIDIzNCwgMjUwLCAyNSwgNSwgMjM2LCA0MCwgMjM0LCAyNTAsIDI1LCA1LCA2OSwgMjM0LCAKKyAgICAyNTAsIDI1LCA1LCAyMTQsIDExOCwgMjM0LCAyNTAsIDI1LCA1LCA3NiwgMjM0LCAyNTAsIDI1LCA1LCAyNTQsIDIxMCwgCisgICAgMjM0LCAyNTAsIDI1LCA1LCA3OCwgMjM0LCAyNTAsIDI1LCA1LCAyNTMsIDIwMCwgMjM0LCAyNTAsIDUsIDIxMywgMTUyLCAKKyAgICAyMzQsIDI1MCwgNSwgMjI3LCAyMDksIDIzNCwgMjUwLCAyNTUsIDMwLCA1MCwgMjM0LCAyNTAsIDI0NSwgMTI5LCA1MCwgCisgICAgMjM0LCAyNTAsIDU0LCA1MCwgMjM0LCAyNTAsIDIyMSwgMTc1LCA3OSwgMjM0LCAyNTAsIDUyLCAyMjEsIDE3NSwgNzksIAorICAgIDIzNCwgMjUwLCAyNDgsIDE4NiwgMjM0LCAyNTAsIDUyLCAyNDgsIDE4NiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjIyLCAyMCwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjE3LCA4MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjUyLCAxNzYsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDI1MSwgMzEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0OCwgMjExLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKKyAgICAyNDMsIDEyNywgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjMxLCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyOSwgNzksIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMywgMTE4LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDIxOCwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjE0LCAyNCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI2LCA3NywgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjExLCA4NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjIzLCAxNzEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0MiwgNDQsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNCwgMjU0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzUsIDE0MiwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjI3LCAxNjYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1NCwgMjE4LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKKyAgICAyNDUsIDIxNSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM2LCA0MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjE0LCAyMDgsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgMjI2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDUsIDIwNSwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjMxLCAyMjgsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAyMTAsIDg2LCAyMTksIDM4LCAyMTksIDQ2LCAKKyAgICAyMSwgMTExLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTA1LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTU4LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAyMSwgMTYxLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTkwLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk1LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk5LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk2LCAyMTksIDM4LCAyMTksIDQ2LCAKKyAgICAyMSwgMjAxLCAyNTAsIDE1OSwgNSwgMjUxLCA3LCAyNTAsIDE1OSwgNSwgMjU0LCA4MywgMjUwLCAxNTksIDUsIDIxMywgCisgICAgMTQ3LCAyNTAsIDE1OSwgMSwgMjU1LCA4MiwgMjUwLCAxNTksIDEsIDc0LCAyNTAsIDE1OSwgMSwgNjksIDI1MCwgMTU5LCAxLCAKKyAgICA3NiwgMjUwLCAxNTksIDEsIDIzNSwgMTYsIDI1MCwgMTU5LCAxLCAyMzQsIDEzNywgMjUwLCAxNTksIDEsIDI0MywgMTM5LCAKKyAgICAyNTAsIDE1OSwgMSwgMjQyLCAyNTUsIDI1MCwgMTU5LCAxLCAyMjksIDgxLCAyNTAsIDE1OSwgMSwgMjUxLCA0MCwgMjUwLCAKKyAgICAxNTksIDEsIDI1MCwgMTY0LCAyNTAsIDE1OSwgMSwgMjM1LCAxNDYsIDI1MCwgMTU5LCAxLCAyMzUsIDExOSwgMjUwLCAxNTksIAorICAgIDEsIDIyNywgMTY4LCAyNTAsIDE1OSwgMSwgMjE1LCAxNTYsIDI1MCwgMTU5LCAxLCAyMTUsIDE0NCwgMjUwLCAxNTksIDEsIAorICAgIDI0OCwgMTQyLCAyNTAsIDE1OSwgMSwgMjQ4LCAxMjYsIDI1MCwgMTU5LCAxLCAyMjgsIDExNCwgMjUwLCAxNTksIDEsIDIxNywgCisgICAgMTAyLCAyNTAsIDE1OSwgMSwgMjE2LCAyMDgsIDI1MCwgMTU5LCAxLCAyNDgsIDIyOCwgMjUwLCAxNTksIDEsIDI0OCwgMzIsIAorICAgIDI1MCwgMTU5LCAxLCAyMjksIDIzMCwgMjUwLCAxNTksIDEsIDIyNiwgOTMsIDI1MCwgMTU5LCAxLCAyMjUsIDE0OSwgMjUwLCAKKyAgICAxNTksIDEsIDI1MiwgMTk3LCAyNTAsIDE1OSwgMSwgMjUyLCAyNSwgMjUwLCAxNTksIDEsIDIzMSwgMjQyLCAyNTAsIDE1OSwgCisgICAgMSwgMjEwLCAxNjcsIDI1MCwgMTU5LCAxLCAyMTEsIDEwMywgMjUwLCAxNTksIDEsIDIyMywgMTg3LCAyNTAsIDE1OSwgMSwgCisgICAgMjMzLCAxNDAsIDI1MCwgMTU5LCAxLCAyMTIsIDY0LCAyNTAsIDE1OSwgMSwgMjIyLCAzMywgMjUwLCAxNTksIDEsIDI0MiwgCisgICAgNTMsIDI1MCwgMTU5LCAyNSwgNSwgNjEsIDI1MCwgMTU5LCAyNSwgNSwgNzQsIDI1MCwgMTU5LCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMjUwLCAxNTksIDI1LCA1LCA2OSwgMjUwLCAxNTksIDI1LCA1LCAyMTQsIDExOCwgMjUwLCAxNTksIDI1LCA1LCA3NiwgMjUwLCAKKyAgICAxNTksIDI1LCA1LCAyNTQsIDIxMCwgMjUwLCAxNTksIDI1LCA1LCA3OCwgMjUwLCAxNTksIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMjUwLCAxNTksIDI1LCA1LCAyMjYsIDIyMywgMjUwLCAxNTksIDE0NCwgNzksIDI1MCwgMTU5LCAyNTMsIDIwMSwgNzksIAorICAgIDI1MCwgMTU5LCAyMTMsIDE1MiwgMjUwLCAxNTksIDIzMSwgMjQwLCAyNTAsIDE1OSwgMjEsIDIxMCwgODYsIDI1MCwgMTU5LCAKKyAgICAyMSwgMTExLCAyNTAsIDE1OSwgMjEsIDEwNSwgMjUwLCAxNTksIDIxLCAxNTgsIDI1MCwgMTU5LCAyMSwgMTYxLCAyNTAsIAorICAgIDE1OSwgMjEsIDE5MCwgMjUwLCAxNTksIDIxLCAxOTUsIDI1MCwgMTU5LCAyMSwgMTk5LCAyNTAsIDE1OSwgMjEsIDE5NiwgCisgICAgMjUwLCAxNTksIDIxLCAyMDEsIDI1MCwgMTU5LCAyMjEsIDE3NSwgNzksIDI1MCwgMTU5LCAyNDgsIDE4NiwgMjUwLCAxNTksIAorICAgIDUyLCAyNDgsIDE4NiwgMjUwLCAxNTksIDIyNCwgMTYsIDc5LCAxNzQsIDUsIDI1MSwgNywgMTc0LCA1LCAyNTQsIDgzLCAKKyAgICAxNzQsIDUsIDIxMywgMTQ3LCAxNzQsIDEsIDYxLCAxNzQsIDEsIDI1NSwgODIsIDE3NCwgMSwgNzQsIDE3NCwgMSwgMjM2LCAKKyAgICA0MCwgMTc0LCAxLCA2OSwgMTc0LCAxLCAyMTQsIDExOCwgMTc0LCAxLCAxNDksIDE1MywgMTc0LCAxLCAxNDksIDIyMiwgCisgICAgMTgyLCAxNzQsIDEsIDE0OSwgMTU2LCAxNzQsIDEsIDE0OSwgMjMyLCAxOTEsIDE3NCwgMSwgNzYsIDE3NCwgMSwgMjU0LCAKKyAgICAyMTAsIDE3NCwgMSwgNzgsIDE3NCwgMSwgMjUzLCAyMDAsIDE3NCwgMSwgMTc2LCAxNzQsIDEsIDIzNCwgMTM4LCAxNzQsIDEsIAorICAgIDI0MywgMTQyLCAxNzQsIDEsIDI0MywgMCwgMTc0LCAxLCAyMjksIDgyLCAxNzQsIDEsIDI1MSwgNDEsIDE3NCwgMSwgMjUwLCAKKyAgICAxNjUsIDE3NCwgMSwgMjM1LCAxNDcsIDE3NCwgMSwgMjM1LCAxMjAsIDE3NCwgMSwgMjI3LCAxNjksIDE3NCwgMSwgMjE1LCAKKyAgICAxNTcsIDE3NCwgMSwgMjE1LCAxNDUsIDE3NCwgMSwgMjQ4LCAxNDMsIDE3NCwgMSwgMjQ4LCAxMjcsIDE3NCwgMSwgMjI4LCAKKyAgICAxMTUsIDE3NCwgMSwgMjE3LCAxMDYsIDE3NCwgMSwgMjE2LCAyMDksIDE3NCwgMSwgMjQ4LCAyMjksIDE3NCwgMSwgMjQ4LCAKKyAgICAzMywgMTc0LCAxLCAxOTgsIDE3NCwgMSwgMTkxLCAxNzQsIDEsIDIyNSwgMTUwLCAxNzQsIDEsIDI1MiwgMTk5LCAxNzQsIDEsIAorICAgIDI1MiwgMjYsIDE3NCwgMSwgMTg2LCAxNzQsIDEsIDE5MiwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxNDEsIDE3NCwgMSwgCisgICAgMjMyLCAxOTAsIDE3NCwgMSwgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwNCwgMTc0LCAxLCAyMTgsIDIyNSwgMTc0LCAxLCAKKyAgICAyMDYsIDE3NCwgMSwgMTYyLCAxNzQsIDI1LCA1LCAyNTUsIDgyLCAxNzQsIDI1LCA1LCA3NCwgMTc0LCAyNSwgNSwgMjM2LCAKKyAgICA0MCwgMTc0LCAyNSwgNSwgNjksIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgCisgICAgNSwgMTQ5LCAyMjIsIDE4MiwgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3NCwgCisgICAgMjUsIDUsIDc2LCAxNzQsIDI1LCA1LCAyNTQsIDIxMCwgMTc0LCAyNSwgNSwgNzgsIDE3NCwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIDUsIDI1MywgMTgzLCAxNzQsIDUsIDIzNSwgMTA4LCAxNzQsIDUsIDIxNCwgMTYxLCAKKyAgICAxNzQsIDIyNiwgMjA4LCAxNzQsIDI0OCwgMTg2LCAxNzQsIDUyLCAyNDgsIDE4NiwgMTc0LCAyNTUsIDMwLCA1MCwgMTc0LCAKKyAgICAyMjAsIDEzOSwgMTc0LCAyMSwgMjEwLCA4NiwgMTc0LCAyMSwgMTExLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgCisgICAgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxOTAsIDE3NCwgMjEsIDE5NSwgMTc0LCAyMSwgMTk5LCAxNzQsIDIxLCAxOTYsIAorICAgIDE3NCwgMjEsIDIwMSwgMjE3LCA3MCwgMSwgNjEsIDIxNywgNzAsIDEsIDI1NSwgODIsIDIxNywgNzAsIDEsIDc0LCAyMTcsIAorICAgIDcwLCAxLCAyMzYsIDQwLCAyMTcsIDcwLCAxLCA2OSwgMjE3LCA3MCwgMSwgMjE0LCAxMTgsIDIxNywgNzAsIDEsIDc2LCAKKyAgICAyMTcsIDcwLCAxLCAyNTQsIDIxMCwgMjE3LCA3MCwgMSwgNzgsIDIxNywgNzAsIDEsIDI1MywgMjAwLCAyMTcsIDcwLCAxLCAKKyAgICAxNzYsIDIxNywgNzAsIDEsIDIzNCwgMTM4LCAyMTcsIDcwLCAxLCAyNDMsIDE0MiwgMjE3LCA3MCwgMSwgMjQzLCAwLCAyMTcsIAorICAgIDcwLCAxLCAyMjksIDgyLCAyMTcsIDcwLCAxLCAyNTEsIDQxLCAyMTcsIDcwLCAxLCAyNTAsIDE2NSwgMjE3LCA3MCwgMSwgCisgICAgMjM1LCAxNDcsIDIxNywgNzAsIDEsIDIzNSwgMTIwLCAyMTcsIDcwLCAxLCAyMjcsIDE2OSwgMjE3LCA3MCwgMSwgMjE1LCAKKyAgICAxNTcsIDIxNywgNzAsIDEsIDIxNSwgMTQ1LCAyMTcsIDcwLCAxLCAyNDgsIDE0MywgMjE3LCA3MCwgMSwgMjQ4LCAxMjcsIAorICAgIDIxNywgNzAsIDEsIDIyOCwgMTE1LCAyMTcsIDcwLCAxLCAyMTcsIDEwNiwgMjE3LCA3MCwgMSwgMjE2LCAyMDksIDIxNywgCisgICAgNzAsIDEsIDI0OCwgMjI5LCAyMTcsIDcwLCAxLCAyNDgsIDMzLCAyMTcsIDcwLCAxLCAxOTgsIDIxNywgNzAsIDEsIDE5MSwgCisgICAgMjE3LCA3MCwgMSwgMjI1LCAxNTAsIDIxNywgNzAsIDEsIDI1MiwgMTk5LCAyMTcsIDcwLCAxLCAyNTIsIDI2LCAyMTcsIDcwLCAKKyAgICAxLCAxODYsIDIxNywgNzAsIDEsIDE5MiwgMjE3LCA3MCwgMSwgMjA1LCAyMTcsIDcwLCAxLCAyMzMsIDE0MSwgMjE3LCA3MCwgCisgICAgMSwgMjE0LCAyNywgMjE3LCA3MCwgMSwgMjIwLCAxMDQsIDIxNywgNzAsIDEsIDIwNiwgMjE3LCA3MCwgMSwgMTYyLCAyMTcsIAorICAgIDcwLCAxLCAyMjIsIDE4MSwgMjE3LCA3MCwgNSwgMjU0LCA4MywgMjE3LCA3MCwgNSwgMjEzLCAxNDcsIDIxNywgNzAsIDI1LCAKKyAgICA1LCAyNTUsIDgyLCAyMTcsIDcwLCAyNSwgNSwgNzQsIDIxNywgNzAsIDI1LCA1LCAyMzYsIDQwLCAyMTcsIDcwLCAyNSwgNSwgCisgICAgNjksIDIxNywgNzAsIDI1LCA1LCAyMTQsIDExOCwgMjE3LCA3MCwgMjUsIDUsIDc2LCAyMTcsIDcwLCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDIxNywgNzAsIDI1LCA1LCA3OCwgMjE3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCAyMTcsIDcwLCA1LCAyMTMsIDE1MiwgCisgICAgMjE3LCA3MCwgNSwgMjI3LCAyMDksIDIxNywgNzAsIDIxLCAyMTAsIDg2LCAyMTcsIDcwLCAyMSwgMTExLCAyMTcsIDcwLCAKKyAgICAyMSwgMTA1LCAyMTcsIDcwLCAyMSwgMTU4LCAyMTcsIDcwLCAyMSwgMTYxLCAyMTcsIDcwLCAyMSwgMTkwLCAyMTcsIDcwLCAKKyAgICAyMSwgMTk1LCAyMTcsIDcwLCAyMSwgMTk5LCAyMTcsIDcwLCAyMSwgMTk2LCAyMTcsIDcwLCAyMSwgMjAxLCAxNSwgNSwgNjEsIAorICAgIDE1LCA1LCAxMTYsIDMwLCA2MSwgMTUsIDUsIDExNiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMTE2LCAzMCwgMjQzLCAxMTIsIAorICAgIDIxNiwgMjQwLCAxNSwgNSwgMTE2LCAzMCwgMTYyLCAxNSwgNSwgMTE2LCAzMCwgMjM2LCA0MiwgMTUsIDUsIDExNiwgMzAsIAorICAgIDIzMywgMTIyLCAyNDIsIDEwMSwgMTUsIDUsIDExNiwgMzAsIDIzMCwgNjYsIDE1LCA1LCAxMTYsIDMwLCAyMjIsIDIzLCAxNSwgCisgICAgNSwgMjU1LCA4NCwgMTUsIDUsIDI1NSwgMzQsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyNTUsIDM1LCAKKyAgICAzMCwgMjQ2LCA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAyNTUsIDM1LCAzMCwgCisgICAgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzYsIDQzLCAKKyAgICAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzMywgMTIzLCAxNSwgCisgICAgNSwgMjU1LCAzNSwgMzAsIDIyMCwgNTAsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNjksIDE1LCA1LCAKKyAgICAyNTUsIDM1LCAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAKKyAgICAyNTUsIDMzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjU1LCAzMywgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIAorICAgIDE1OCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMTcsIDczLCAxNSwgNSwgCisgICAgMjU1LCA4LCAxNSwgNSwgMjU0LCAxOTUsIDE1LCA1LCAyNTQsIDE5NiwgMzAsIDI0NSwgOTUsIDE1LCA1LCAyNTQsIDE5NiwgCisgICAgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5NywgMTUsIDUsIDI1NCwgMTg3LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjQ3LCAyMjQsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgCisgICAgMjU0LCAxODgsIDMwLCAxNjIsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNSwgNSwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjM0LCAKKyAgICA5OCwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAKKyAgICAyNTQsIDE4NCwgMTUsIDUsIDI1NCwgMTc3LCAxNSwgNSwgMjU0LCAxNDAsIDE1LCA1LCAyNTQsIDE0MSwgMzAsIDIyMCwgNjUsIAorICAgIDE1LCA1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMTUsIDI1NCwgMTMxLCAxNSwgNSwgMjU0LCAxMzIsIDEzNCwgCisgICAgMjE2LCA4NiwgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIxLCAKKyAgICAxNSwgNSwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMiwgMjE4LCAyMzUsIDE1LCA1LCAyNTQsIDEwMiwgMTUsIDUsIDI1NCwgNzUsIAorICAgIDE1LCA1LCAyNTQsIDQzLCAxNSwgNSwgMjU0LCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjU0LCAxNiwgMTUsIDUsIDI1MywgCisgICAgMjQ0LCAxNSwgNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMjEwLCA0MCwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIAorICAgIDI0MCwgMjM1LCA5LCAyMTYsIDI0MCwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAyMTUsIDExNSwgMTE1LCAKKyAgICAyMTUsIDExNSwgMjE1LCAxMTUsIDExNSwgMjE1LCAxMTUsIDIyNiwgMjUsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIAorICAgIDI0MCwgMTE1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAyNDksIAorICAgIDEzMywgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDIzNywgMTUsIDUsIDI1MywgCisgICAgMjM0LCAxNSwgNSwgMjUyLCAxOTksIDE1LCA1LCAyNTIsIDE4NCwgMTUsIDUsIDI1MiwgMTc5LCAxNSwgNSwgMjUyLCAxNzUsIAorICAgIDE1LCA1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTcwLCAxMTUsIDI1MiwgMTY5LCAxNSwgNSwgMjUyLCAxNjgsIDE1LCA1LCAKKyAgICAxMzAsIDE1LCA1LCAyNTIsIDE0OCwgMTUsIDUsIDI1MiwgMTQsIDE1LCA1LCAyNTIsIDE1LCAzMCwgNjEsIDE1LCA1LCAyNTIsIAorICAgIDE1LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNTIsIDE1LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNTEsIDEzMywgCisgICAgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAyNTUsIDM0LCAxNSwgNSwgMjUxLCAxMzQsIDExNSwgMjUxLCAxMzQsIAorICAgIDIxNCwgMTkwLCAxNSwgNSwgMjUxLCAxMzQsIDI0OSwgMTMzLCAyNTEsIDEzMywgMTUsIDUsIDI1MSwgMTE3LCAxNSwgNSwgCisgICAgMjUxLCAxMTgsIDExNSwgMjUxLCAxMTcsIDE1LCA1LCAyNTEsIDEwNiwgMTUsIDUsIDI1MSwgMTA1LCAxNSwgNSwgMjQ4LCAKKyAgICAyMjksIDE1LCA1LCAyNDgsIDIyMCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMTE2LCA5NiwgMjMxLCAxNTIsIAorICAgIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1NCwgMTQwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyNTIsIDE2OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjUyLCAxNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIAorICAgIDcyLCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MywgMTQzLCA5NiwgMjMxLCAxNTIsIAorICAgIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyNDIsIDIwNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQyLCAxMTAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKKyAgICA3MiwgMzAsIDE2MiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjM1LCAxODYsIDE1LCA1LCAyNDgsIDIyMSwgCisgICAgMjM0LCA3MiwgMzAsIDIzNSwgMTg3LCA5NiwgMjMyLCAxMDMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNCwgCisgICAgMjQ4LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAKKyAgICAzMCwgMjMyLCAxMDMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMiwgMTA0LCA5NiwgMjMxLCAxNTEsIDE1LCAKKyAgICA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMiwgODksIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIyOSwgCisgICAgMTEyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjYsIDI2LCA5NiwgMjI2LCAyNSwgMTUsIDUsIDI0OCwgMjIxLCAKKyAgICAyMzQsIDcyLCAzMCwgMjE5LCAxOTMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDgsIAorICAgIDIyMSwgMjM0LCA3MiwgMzAsIDIxNCwgMjMxLCA5NiwgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAorICAgIDIxNCwgMTI2LCAxNSwgNSwgMjQ4LCAxOTUsIDE1LCA1LCAyNDgsIDE3NCwgMTUsIDUsIDI0OCwgMTczLCAxNSwgNSwgMjQ4LCAKKyAgICAxNzIsIDE1LCA1LCAyNDgsIDExLCAxNSwgNSwgMjQ3LCAyNTAsIDE1LCA1LCAyNDcsIDIyNSwgMTUsIDUsIDI0NywgMjI2LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0NywgMjI0LCAxNSwgNSwgMjQ3LCAyMTQsIDE1LCA1LCAyNDcsIDIxNSwgMjM0LCAyMTQsIAorICAgIDEwNCwgMjQyLCAxMDIsIDI0NywgMTk1LCAxNSwgNSwgMjQ3LCAxOTUsIDE1LCA1LCAyNDYsIDg2LCAxNSwgNSwgMjQ2LCA4NywgCisgICAgMTE1LCAyNDYsIDg2LCAxNSwgNSwgMjQ2LCA4NywgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDg3LCAyMjAsIDQ3LCAxNSwgNSwgCisgICAgMjQ2LCA4NCwgMTUsIDUsIDI0NiwgODUsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjQ2LCA4MywgMTUsIDUsIDI0NiwgODIsIDE1LCAKKyAgICA1LCAyNDYsIDgxLCAxNSwgNSwgMjQ2LCA4MCwgMTUsIDUsIDI0NiwgNzYsIDE1LCA1LCAyNDYsIDc0LCAxNSwgNSwgMjQ2LCAKKyAgICA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDc1LCAyNDIsIDEwMiwgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDczLCAxNSwgNSwgCisgICAgMjQ2LCA2NiwgMTUsIDUsIDc2LCAxNSwgNSwgMTYwLCAzMCwgMjI2LCAyNSwgMTUsIDUsIDE2MCwgMTE1LCAxNjAsIDIyNywgCisgICAgMTk5LCAxMTUsIDIyNywgMTk4LCAxNSwgNSwgMjQ1LCAyNDIsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDExNiwgOTYsIDI0MiwgCisgICAgNTYsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDUsIDI0MywgMzAsIAorICAgIDIzMCwgMjM1LCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyMjAsIDY1LCAxNSwgCisgICAgNSwgMjQ1LCAyNDMsIDMwLCA2OSwgMTUsIDUsIDI0NSwgMjE5LCAxNSwgNSwgMjQ1LCAyMDgsIDE1LCA1LCAyNDUsIDE4MiwgCisgICAgMTUsIDUsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMSwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAKKyAgICAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgMjQ1LCAxNTksIDI0OSwgMTMzLCAKKyAgICAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAyMjYsIDE2OCwgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjE4LCAyMzUsIAorICAgIDE1LCA1LCAyNDUsIDk3LCAxNSwgNSwgMjQ1LCA5NSwgMTUsIDUsIDI0NSwgODAsIDE1LCA1LCAyNDUsIDE4LCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgCisgICAgMzAsIDExNiwgOTYsIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjQ2LCA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIAorICAgIDE5LCAzMCwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgCisgICAgMTksIDMwLCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCAyMzQsIDIxMywgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzQsIDIxNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjMzLCAyMjEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCisgICAgMjMzLCAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzIsIDI0NywgMTUsIDUsIDI0NSwgMTksIDMwLCAKKyAgICAyMzIsIDEwMywgMTUsIDUsIDI0NSwgMTksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMTQsIDIxOSwgMTUsIAorICAgIDUsIDI0MywgMTQyLCAxNSwgNSwgMjQzLCAxNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDE0MSwgCisgICAgMzAsIDExNiwgOTYsIDI0OCwgMjMwLCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAxNjIsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDExNiwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NSwgMzMsIDIxNiwgMjQxLCAKKyAgICA5NiwgMjE3LCA5NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MywgCisgICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIDIzOCwgOTYsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUyLCAxNDksIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI1MSwgMTA2LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTEsIDEwNywgOTYsIDIwNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjQ4LCAyMjksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0OCwgMTEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NywgMjI2LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxODIsIAorICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgzLCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgCisgICAgMTU4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE1OSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjQyLCAyMjEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMjE5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNDIsIDIyMCwgOTYsIDYxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIwNSwgOTYsIDIxOCwgODQsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MiwgNTYsIDk2LCAyMzIsIDEwNCwgOTYsIDI0NSwgODAsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgCisgICAgMzcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMzgsIDk2LCAyMzMsIDE0MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQxLCAKKyAgICAxODgsIDk2LCAyMzIsIDI0NywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQwLCAyMjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzUsIDE3MywgOTYsIDI0MCwgMjMwLCA5NiwgMjUzLCAKKyAgICAyMzksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDIxMywgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjM0LCA5NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCA5NiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMzMsIDIyMiwgOTYsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzMsIDE0MSwgMTUsIAorICAgIDUsIDI0MywgMTQxLCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzAsIDIzNSwgCisgICAgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk5LCAxMTUsIDIyNywgCisgICAgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAxOTEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDIyMSwgMjMzLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMjAsIDY2LCA5NiwgMjE1LCA5OSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCAzMiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjE4LCA0NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE3LCA3MywgMTUsIDUsIDI0MywgMTQxLCAzMCwgNjksIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMTQsIDIyMCwgOTYsIDI0NiwgODYsIDE1LCAKKyAgICA1LCAyNDMsIDE0MSwgMTE1LCAyNDMsIDE0MCwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0OSwgMTMzLCAKKyAgICAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgMTA0LCAxMTUsIAorICAgIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAxMjUsIDE1LCA1LCAyNDMsIDEyNiwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgCisgICAgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAxMjQsIDE1LCA1LCAyNDMsIDEyMiwgMTUsIDUsIDI0MywgMTEzLCAKKyAgICAxNSwgNSwgMjQzLCAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIDExMiwgMTE1LCAyNDMsIAorICAgIDExMSwgMTUsIDUsIDI0MywgMTEyLCAyNDksIDEzMywgMjQzLCAxMTEsIDE1LCA1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgCisgICAgMTAyLCAxNSwgNSwgMjQzLCA5NywgMTUsIDUsIDI0MywgNDMsIDE1LCA1LCAyNDMsIDQ0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAKKyAgICAyNDIsIDIyMSwgMTUsIDUsIDI0MiwgMjIyLCAzMCwgNzYsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDY5LCAxNSwgNSwgMjQyLCAKKyAgICAyMjIsIDI0OSwgMTMzLCAyNDIsIDIyMSwgMTUsIDUsIDI0MiwgMjE5LCAxNSwgNSwgMjQyLCAyMjAsIDExNSwgMjQyLCAyMTksIAorICAgIDE1LCA1LCAyNDIsIDIyMCwgMjQ5LCAxMzMsIDI0MiwgMjE5LCAxNSwgNSwgMjQyLCAyMTYsIDE1LCA1LCAyNDIsIDIwNCwgCisgICAgMTUsIDUsIDI0MiwgMjA1LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMjAyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAxMTYsIDk2LCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDIzMiwgMTA0LCA5NiwgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgCisgICAgMTkxLCAxNSwgNSwgMjQyLCAxOTksIDE1LCA1LCAyNDIsIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAyNDksIDEzMywgMjQyLCAKKyAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyMTcsIDczLCAxNSwgNSwgCisgICAgMjQyLCAxOTgsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAxMjAsIDE1LCA1LCAyNDIsIDEyMSwgMjQ5LCAxMzMsIDI0MiwgMTIwLCAKKyAgICAxNSwgNSwgMjQyLCAxMTgsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIAorICAgIDI0OSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MiwgCisgICAgMTE5LCAzMCwgMjIyLCAxMSwgOTYsIDIxNSwgMTE0LCAxNSwgNSwgMjQyLCAxMTksIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAKKyAgICAxMTAsIDE1LCA1LCAyNDIsIDExMSwgMzAsIDExNiwgOTYsIDIzMywgMjAyLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAyMzMsIAorICAgIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAxMTUsIDI0MiwgMTExLCAyMzIsIDk2LCAxNSwgNSwgMjQyLCAxMDUsIDE1LCA1LCAKKyAgICAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MiwgOTUsIDE1LCA1LCAyNDIsIDk0LCAKKyAgICAxNSwgNSwgMjQyLCA5MSwgMTUsIDUsIDI0MiwgOTAsIDE1LCA1LCAxNjIsIDE1LCA1LCAyNDIsIDU2LCAyMTYsIDI0MCwgMTUsIAorICAgIDUsIDI0MiwgNTYsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAzNywgMTUsIDUsIDI0MSwgMTg3LCAxNSwgNSwgMjQxLCAxODgsIAorICAgIDMwLCAyNTMsIDIzOSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNDcsIDE5NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQzLCAxMzMsIDE1LCA1LCAKKyAgICAyNDEsIDE4OCwgMzAsIDIzNCwgODcsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQxLCAxODgsIAorICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQxLCAxODgsIDMwLCA2OSwgMTUsIDUsIDI0MCwgMjI5LCAxNSwgNSwgMjQwLCAyMjUsIAorICAgIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjQwLCAKKyAgICAyMjYsIDMwLCAyMzQsIDIxMywgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjMyLCAyMDMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjQwLCAyMjIsIDE1LCA1LCA3NCwgMTUsIDUsIDI0MCwgMTYxLCA2MSwgMTUsIDUsIDI0MCwgCisgICAgMTIyLCAxNSwgNSwgMjM2LCA3MCwgMTUsIDUsIDIzNiwgNzEsIDExNSwgMjM2LCA3MSwgMjUxLCAxMDYsIDE1LCA1LCAyMzYsIAorICAgIDcxLCAxMTUsIDIzNiwgNzEsIDIxOCwgMjM1LCAxNSwgNSwgMjM2LCA0NSwgMTUsIDUsIDIzNiwgNDIsIDE1LCA1LCAyMzYsIAorICAgIDQzLCAyNDcsIDI1MCwgMTUsIDUsIDIzNiwgNDMsIDIyMywgMzgsIDE1LCA1LCAyMzYsIDQzLCAxMTUsIDIzNiwgNDMsIDIyMCwgCisgICAgMTYsIDExNSwgMjIwLCAxNiwgMjE0LCAyMjAsIDExNSwgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIAorICAgIDUsIDIzNiwgMzQsIDE1LCA1LCAyMzYsIDM1LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjM2LCAzMywgMTUsIAorICAgIDUsIDIzNiwgMjMsIDE1LCA1LCAyMzYsIDI0LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIzNiwgMjQsIDI0OSwgMTMzLCAyMzYsIAorICAgIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjI2LCAxNjgsIDIzNiwgMjMsIDE1LCA1LCAyMzYsIDI0LCAyMTgsIDIzNSwgMTUsIDUsIAorICAgIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDYsIDE1LCA1LCAyMzUsIDE4NiwgMTUsIDUsIDIzNSwgMTcyLCAxNSwgNSwgMTc2LCAxNSwgCisgICAgNSwgMjM1LCAxOSwgMzAsIDYxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1NSwgOCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIAorICAgIDksIDk2LCAyMzMsIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTIsIDE2OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAxMzAsIDE1LCA1LCAyMzUsIAorICAgIDE5LCAzMCwgMjUyLCAxNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0NSwgCisgICAgODAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDI0MywgMTA0LCA5NiwgMjIwLCAxMDMsIDk2LCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIAorICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDIwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgOTYsIDIyMSwgCisgICAgMjMzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMTk4LCAyNDksIDEzMywgMjQyLCAxOTcsIDE1LCA1LCAyMzUsIDE5LCAKKyAgICAzMCwgMjQyLCAxMjAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCA5NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDQyLCAKKyAgICAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMzUsIAorICAgIDE5LCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzQsIDk1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMiwgCisgICAgMjQ3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTYsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDI0NiwgODYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDI0MiwgCisgICAgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyMTcsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMCwgCisgICAgMjM1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMCwgMjM2LCA5NiwgMjI3LCAxOTMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI5LCAKKyAgICAxMTIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjIyLCAxNDIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjA2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMSwgCisgICAgMjMzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMCwgMTA0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjIwLCAzMiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTksIDIyNywgMTUsIDUsIDIzNSwgMTksIDMwLCAKKyAgICAyMTksIDE4NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTgsIDUyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNywgNTEsIDE1LCAKKyAgICA1LCAyMzUsIDE5LCAzMCwgNjksIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAxOTMsIDMwLCAxOTEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAKKyAgICAxMjYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjEwLCA0NCwgMTUsIDUsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDE4LCAyNDksIAorICAgIDEzMywgMjM1LCAxNywgMTUsIDUsIDIzNSwgMTAsIDE1LCA1LCAyMzUsIDcsIDE1LCA1LCAyMzUsIDUsIDE1LCA1LCAyMzUsIAorICAgIDQsIDE1LCA1LCAyMzUsIDIsIDE1LCA1LCAyMzUsIDMsIDExNSwgMjM1LCAyLCAxNSwgNSwgMjM0LCAyNDgsIDE1LCA1LCAKKyAgICAyMzQsIDI0OSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0NSwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjM0LCAyNDUsIDI0OSwgMTMzLCAyMzQsIDI0NCwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgCisgICAgMjM0LCAyNDEsIDE1LCA1LCAyMzQsIDIxMywgMTUsIDUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAorICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAyMTQsIDExNSwgMjM0LCAyMTQsIDIzMywgMTI0LCAzMCwgMTA0LCAxMTUsIDIzMywgCisgICAgMTI0LCAzMCwgNjksIDE1LCA1LCAyMzQsIDE2MywgMTUsIDUsIDIzNCwgOTgsIDE1LCA1LCAyMzQsIDk5LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMzQsIDk5LCAzMCwgNjksIDE1LCA1LCAyMzQsIDk5LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIAorICAgIDk1LCAxNSwgNSwgMjM0LCA4NywgMTUsIDUsIDIzNCwgNzQsIDE1LCA1LCAyMzQsIDczLCAxNSwgNSwgMjM0LCA3MSwgMTUsIAorICAgIDUsIDIzNCwgNzIsIDExNSwgMjM0LCA3MSwgMTUsIDUsIDIzMywgMjIzLCAxNSwgNSwgMjMzLCAyMjQsIDExNSwgMjQxLCAKKyAgICAxODgsIDMwLCAyNTMsIDIzOCwgMjMzLCAyMjQsIDExNSwgMjQxLCAxODgsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIzMywgCisgICAgMjIxLCAxNSwgNSwgMjMzLCAyMTksIDE1LCA1LCAyMzMsIDIyMCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxOCwgMTUsIAorICAgIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTYsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAyMTQsIDE1LCA1LCAyMzMsIDIwMiwgCisgICAgMTUsIDUsIDIzMywgMjAzLCAyMjYsIDE2OCwgMjMzLCAyMDIsIDE1LCA1LCAyMzMsIDE5NywgMTUsIDUsIDIzMywgMTc4LCAKKyAgICAxNSwgNSwgMjMzLCAxNDEsIDE1LCA1LCAyMzMsIDEyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjEsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDExNiwgOTYsIDI0OCwgMjMwLCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMTYsIDk2LCAyNDMsIAorICAgIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUzLCAyNDAsIDIxMCwgCisgICAgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAKKyAgICAxNCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQ4LCAxNzQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0NSwgMTU4LCAxNSwgNSwgCisgICAgMjMzLCAxMjQsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDExMSwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MiwgMzcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MSwgCisgICAgMTg4LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDI0LCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMzYsIDI0LCA5NiwgMjMyLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDIzNCwgODcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIAorICAgIDIxNSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAyMTYsIDk2LCAyNDEsIDE4OCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAyMzMsIDEyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCAyMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAorICAgIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzEsIDk2LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMCwgNjYsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMjAsIDY2LCA5NiwgMjE4LCA0NCwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjIwLCAxMiwgOTYsIDI0MiwgMTk4LCA5NiwgMjQ1LCA5NSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgCisgICAgMjIwLCAxMiwgOTYsIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAKKyAgICAyMzMsIDEyNCwgMzAsIDIxOSwgMjI2LCA5NiwgMjE5LCAyMjUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOCwgNDQsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIxNywgODUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDIxNywgMjQsIDk2LCAxMTYsIDk2LCAyMTgsIDg1LCA5NiwgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCA2OSwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAKKyAgICAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIAorICAgIDIxOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMzMsIDEyNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyMzMsIDEyMSwgMTUsIDUsIDIzMywgMTIyLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTIyLCAzMCwgMjIwLCA2NiwgOTYsIAorICAgIDIxOCwgNDQsIDE1LCA1LCAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIDEyMiwgMjQyLCAxMDIsIDExNSwgMjMzLCAKKyAgICAxMjIsIDI0MiwgMTAyLCAyMjAsIDY1LCAxNSwgNSwgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExMCwgMTUsIDUsIDIzMywgCisgICAgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIDEwOCwgMTUsIDUsIDIzMywgMTA5LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAKKyAgICAyMzMsIDEwOSwgMzAsIDIzMywgMjAzLCA5NiwgMjIyLCAxNDIsIDE1LCA1LCAyMzIsIDI0NywgMTUsIDUsIDIzMiwgMjMyLCAKKyAgICAxNSwgNSwgMjMyLCAyMjIsIDE1LCA1LCAyMzIsIDIwMywgMTUsIDUsIDIzMiwgMTAzLCAxNSwgNSwgMjMyLCAxMDQsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNTQsIDE4NywgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI0NSwgODAsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDI0NSwgODEsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDI0MSwgMTg4LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNiwgMjMsIDE1LCA1LCAKKyAgICAyMzIsIDEwMiwgMzAsIDIzNSwgNywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM1LCA1LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyMzUsIDYsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjMzLCAxNDIsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzIsIDEwMiwgCisgICAgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDIyNywgMjQyLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMTksIDE5NCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjMyLCAxMDIsIDMwLCAyMTksIDE3NiwgOTYsIDI1MSwgMTMzLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMTUsIDExNCwgMTUsIAorICAgIDUsIDIzMiwgMTAyLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAyNDksIDEzMywgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMjI2LCAxNjgsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAxMDIsIDIxOCwgMjM1LCAxNSwgNSwgMjMyLCAxMDIsIDIyMCwgCisgICAgNDcsIDE1LCA1LCAyMzIsIDEwMCwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAxMTUsIDIzMiwgOTYsIDE1LCA1LCAKKyAgICAyMzIsIDk3LCAyMjYsIDE2OCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIyMCwgNDcsIDE1LCA1LCAyMzIsIDk0LCAxNSwgCisgICAgNSwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgODksIDE1LCA1LCAyMzIsIDkwLCAxMTUsIDIzMiwgODksIDE1LCA1LCAyMzIsIDkwLCAKKyAgICAxMTUsIDIzMiwgOTAsIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMTg2LCAxNSwgNSwgMjMxLCAyNDQsIDMwLCAKKyAgICAyMTcsIDczLCAxNSwgNSwgMjMxLCAyNDQsIDI0MiwgMTAxLCAxNSwgNSwgMjMxLCAyNDMsIDE1LCA1LCAyMzEsIDIxNSwgMTUsIAorICAgIDUsIDIzMSwgMTcxLCAxNSwgNSwgMjMxLCAxNTIsIDE1LCA1LCAyMzEsIDE1MSwgMTUsIDUsIDIzMSwgOTYsIDE1LCA1LCAKKyAgICAyMzEsIDUyLCAxNSwgNSwgMjMwLCAyMzUsIDE1LCA1LCAyMzAsIDE5MywgMTUsIDUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCAKKyAgICAxMDgsIDExNSwgMjMwLCAxMDcsIDE1LCA1LCAyMzAsIDk4LCAxNSwgNSwgMjMwLCA5OSwgMjQyLCAxMDEsIDE1LCA1LCAyMzAsIAorICAgIDgzLCAxNSwgNSwgMjMwLCA2OSwgMTUsIDUsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY3LCAzMCwgNjEsIDE1LCA1LCAyMzAsIAorICAgIDY3LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMzAsIDY3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDY3LCAxMTUsIDIzMCwgCisgICAgNjYsIDE1LCA1LCAyMzAsIDY3LCAxMTUsIDIzMCwgNjcsIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMzAsIDY3LCAyNDksIAorICAgIDEzMywgMjMwLCA2NiwgMTUsIDUsIDIzMCwgNjQsIDE1LCA1LCAyMzAsIDY1LCAzMCwgNjEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgCisgICAgMTE2LCA5NiwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjMwLCA2NSwgMjQyLCAxMDEsIAorICAgIDE1LCA1LCAxOTgsIDE1LCA1LCAyMjksIDIzMiwgMTUsIDUsIDIyOSwgMjIxLCAxNSwgNSwgMjI5LCAyMjIsIDIzNSwgMTk5LCAKKyAgICAxNSwgNSwgMjI5LCAyMjIsIDMwLCAyMTksIDIyOCwgMjE2LCAyNDAsIDE1LCA1LCAyMjksIDIyMiwgMjI2LCAxNjgsIDIyOSwgCisgICAgMjIxLCAxNSwgNSwgMjI5LCAyMjAsIDE1LCA1LCAyMjksIDIxMywgMjI3LCAxODQsIDE1LCA1LCAyMjksIDIxMiwgMTUsIDUsIAorICAgIDIyOSwgMjExLCAxNSwgNSwgMjI5LCAxMTIsIDE1LCA1LCAyMjksIDExMywgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDIyOSwgMTEzLCAyMjAsIDQ3LCAxNSwgNSwgMjI4LCAyMzgsIDE1LCA1LCAyMjgsIDIzOSwgMzAsIAorICAgIDc2LCAxNSwgNSwgMjI4LCAyMzcsIDE1LCA1LCAyMjgsIDIwOCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMTIsIDIxNiwgCisgICAgMjQwLCAxNSwgNSwgMjI4LCAyMDksIDMwLCAyNDMsIDEwNCwgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgCisgICAgMjA2LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjUzLCAyMzksIDE1LCA1LCAKKyAgICAyMjgsIDIwNywgMzAsIDI1MywgMjQwLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI0MiwgMTEwLCAxNSwgCisgICAgNSwgMjI4LCAyMDcsIDMwLCAyMzEsIDk3LCA5NiwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAKKyAgICAyMjksIDExMiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjUsIAorICAgIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjYsIDk2LCAxMTYsIDI1NCwgMTMxLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAKKyAgICAyMjAsIDY2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjYsIDk2LCAyNTMsIDI0MCwgOTYsIAorICAgIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIAorICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyOCwgMTk1LCAxNSwgNSwgMjI3LCAyNDIsIDE1LCA1LCAyMjcsIDIxNCwgMTUsIDUsIAorICAgIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAKKyAgICAxMjIsIDMwLCAyMzEsIDE1MiwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyMjcsIAorICAgIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDExLCAxMTUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTAsIDE1LCA1LCAKKyAgICAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyNywgMTk5LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgCisgICAgMTk5LCAxMTUsIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIDI0OSwgMTMzLCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAKKyAgICAyNDksIDEzMywgMjI3LCAxOTksIDIzMywgMTIyLCAxMTUsIDIzMywgMTIxLCAxNSwgNSwgMjI3LCAxOTMsIDE1LCA1LCAyMjcsIAorICAgIDE5NCwgMjU1LCAzMywgMzAsIDI1MywgMjM0LCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNTIsIDE0LCAxNSwgNSwgCisgICAgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNDYsIDgyLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNDIsIDExMCwgCisgICAgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAKKyAgICAzMywgMzAsIDIzNSwgNSwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyMjcsIDE5NCwgCisgICAgMjU1LCAzMywgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMTksIDE3MywgMTUsIDUsIAorICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjcsIDE5NCwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIAorICAgIDE1LCA1LCAyMjcsIDE5NCwgMjM0LCA3MiwgMzAsIDI1MiwgMTUsIDY5LCAxNSwgNSwgMTkxLCAxNSwgNSwgMjI2LCA4NCwgCisgICAgMTUsIDUsIDIyNiwgNTEsIDE1LCA1LCAyMjYsIDI1LCAxNSwgNSwgMjI1LCAxNjQsIDE1LCA1LCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIyNSwgMTEyLCAzMCwgNjEsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1NSwgMzQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1MiwgCisgICAgMTQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1MSwgMTMzLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCA3NiwgMTUsIDUsIDIyNSwgCisgICAgMTEyLCAzMCwgNzQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI0MCwgMTIyLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCA2OSwgMTUsIAorICAgIDUsIDIyNSwgMTEyLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjUsIDExMiwgMjQ5LCAxMzMsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjI1LCA1NiwgMTUsIDUsIDIyNSwgNTcsIDMwLCAyMzQsIDI0NCwgMTUsIDUsIDIyNSwgNTcsIDMwLCAyMTQsIDIxOSwgMTUsIAorICAgIDUsIDIyNSwgNTcsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIyNSwgNTcsIDIyNiwgMTY4LCAyMjUsIDU2LCAxNSwgNSwgMjA1LCAKKyAgICAxNSwgNSwgMjIzLCAxODUsIDE1LCA1LCAyMjMsIDM4LCAxNSwgNSwgMjIyLCAxNDIsIDE1LCA1LCAyMDYsIDE1LCA1LCAyMjIsIAorICAgIDI0LCAyMjcsIDE4NCwgMTUsIDUsIDIyMiwgMjMsIDE1LCA1LCAyMjIsIDI0LCAzMCwgNjEsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjQ2LCA4NiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyNDYsIDg0LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDE2MiwgMTUsIDUsIAorICAgIDIyMiwgMjQsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKKyAgICAyMzIsIDg5LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIzMCwgMjM1LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyNywgMTk4LCAxNSwgCisgICAgNSwgMjIyLCAyNCwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjIwLCAzMiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKKyAgICAyMTcsIDk0LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMjI1LCAxNSwgCisgICAgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyNCwgCisgICAgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjIyLCAyNCwgMTE1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMjQyLCAxMDEsIDE1LCAKKyAgICA1LCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAxMSwgMjMzLCAxMjQsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIyMSwgMjQxLCAxNSwgCisgICAgNSwgMjIxLCAyMzMsIDE1LCA1LCAyMjAsIDEwNCwgMTUsIDUsIDIyMCwgMTAyLCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2MSwgCisgICAgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjIwLCAKKyAgICAxMDMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMjAsIDEwMywgMzAsIAorICAgIDIxNSwgOTksIDE1LCA1LCAyMjAsIDEwMywgMzAsIDY5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIAorICAgIDUsIDIyMCwgMTAxLCAxNSwgNSwgMjIwLCA5OSwgMTUsIDUsIDIyMCwgODAsIDE1LCA1LCAyMjAsIDY1LCAxNSwgNSwgMjIwLCAKKyAgICA2NiwgMjQwLCAyMjksIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAorICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgNjYsIDExNSwgMjIwLCA2NiwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKKyAgICAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgNTgsIDE1LCA1LCAyMjAsIDUzLCAxNSwgNSwgMjIwLCA1MCwgCisgICAgMTUsIDUsIDIyMCwgNDksIDE1LCA1LCAyMjAsIDQ2LCAxNSwgNSwgMjIwLCAzMiwgMTUsIDUsIDIyMCwgMzMsIDMwLCA2MSwgCisgICAgMTUsIDUsIDIyMCwgMzMsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjIwLCAyNiwgMTUsIDUsIDIyMCwgMjcsIDMwLCA2MSwgMTUsIAorICAgIDUsIDIyMCwgMjcsIDMwLCAyNTIsIDE2OSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyNTEsIDExNywgMTUsIDUsIDIyMCwgMjcsIAorICAgIDMwLCAyNDcsIDIxNCwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQyLCAKKyAgICAxNSwgNSwgMjIwLCAyNywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMywgMTk3LCAxNSwgCisgICAgNSwgMjIwLCAyNywgMzAsIDIzMiwgOTEsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjMwLCA5OCwgMTUsIDUsIDIyMCwgMjcsIDMwLCAKKyAgICAyMjIsIDEwLCAxNSwgNSwgMjIwLCAyMCwgMTUsIDUsIDIyMCwgMTUsIDE1LCA1LCAyMjAsIDE2LCAyMTYsIDI0MCwgMTUsIDUsIAorICAgIDIyMCwgMTYsIDExNSwgMjIwLCAxNiwgMjUxLCAxMDcsIDExNSwgMjUxLCAxMDYsIDE1LCA1LCAyMjAsIDExLCAxNSwgNSwgCisgICAgMjE5LCAyMjcsIDE1LCA1LCAyMTksIDIyOCwgMTE1LCAyMzUsIDIwMCwgMjE5LCAyMjcsIDE1LCA1LCAyMTksIDIyNSwgMTUsIAorICAgIDUsIDIxOSwgMjI0LCAxNSwgNSwgMjE5LCAxOTMsIDE1LCA1LCAyMTksIDE5NCwgMjQyLCAxMDEsIDE1LCA1LCAyMTksIDE4NCwgCisgICAgMTUsIDUsIDIxOSwgMTgyLCAxNSwgNSwgMjE5LCAxODMsIDExNSwgMjE5LCAxODMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKKyAgICAxNzUsIDE1LCA1LCAyMTksIDE3MywgMTUsIDUsIDIxOCwgODQsIDE1LCA1LCAyMTgsIDg1LCAxMTUsIDIxOCwgODQsIDE1LCAKKyAgICA1LCAyMTgsIDU1LCAxNSwgNSwgMjE4LCA1NCwgMTUsIDUsIDIxOCwgNTIsIDE1LCA1LCAyMTgsIDQ0LCAxNSwgNSwgMjE4LCAKKyAgICA0MywgMTUsIDUsIDIxOCwgMTgsIDE1LCA1LCAyMTgsIDE3LCAxNSwgNSwgMjE3LCAxMDYsIDE1LCA1LCAyMTcsIDEwNywgCisgICAgMjUzLCAyMjQsIDE1LCA1LCAyMTcsIDEwNywgMzAsIDI0MSwgMTg3LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyMzAsIDIzNSwgCisgICAgMTUsIDUsIDIxNywgMTA3LCAyNDIsIDEwMSwgMTUsIDUsIDIxNywgOTQsIDE1LCA1LCAyMTcsIDk1LCAxMTUsIDIxNywgOTUsIAorICAgIDIyOCwgMjM5LCAxMTUsIDIyOCwgMjM5LCAyNDcsIDE5NiwgMTE1LCAyNDcsIDE5NSwgMTUsIDUsIDIxNywgOTUsIDIxOCwgCisgICAgMjM1LCAxNSwgNSwgMjE3LCA4NSwgMTUsIDUsIDEyOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAxMjksIDMwLCAyNDIsIDExMCwgCisgICAgMTUsIDUsIDEyOSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAxMjksIDMwLCAyMTksIDIyNywgMTUsIDUsIDEyOSwgMzAsIDIxNSwgCisgICAgMTE0LCAxNSwgNSwgMTI5LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMTcsIDczLCAxNSwgNSwgMjE3LCA1MSwgMTUsIDUsIAorICAgIDIxNywgMjMsIDE1LCA1LCAyMTcsIDI0LCAyNDIsIDEwMSwgMTUsIDUsIDIxNiwgMTE4LCAxNSwgNSwgMjE2LCAxMTksIDIxNiwgCisgICAgMjQwLCAxNSwgNSwgMjE2LCA5MSwgMTUsIDUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDIxNiwgNzQsIDExNSwgMjE2LCA3MywgMTUsIDUsIDIxNiwgNzQsIDExNSwgMjE2LCA3NCwgMjQzLCAxMzQsIDExNSwgMjQzLCAKKyAgICAxMzQsIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjE1LCAxMTksIDE1LCA1LCAyMTUsIDExNCwgMTUsIDUsIAorICAgIDIxNSwgMTEyLCAxNSwgNSwgMjE1LCAxMDksIDE1LCA1LCAyMTUsIDk5LCAxNSwgNSwgMjE1LCAxMDAsIDExNSwgMjE1LCAKKyAgICAxMDAsIDIxMCwgMTE3LCAxMTUsIDIxMCwgMTE2LCAxNSwgNSwgNjksIDE1LCA1LCAxMDQsIDI0MiwgMTEwLCAxNSwgNSwgCisgICAgMTA0LCAxMDQsIDY5LCAxNSwgNSwgMTA0LCAxMTUsIDEwNCwgMjI2LCA5NCwgMTE1LCAyMjYsIDk0LCAyNDMsIDEwNCwgMTE1LCAKKyAgICAyNDMsIDEwMywgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIxOCwgMTksIDExNSwgMjE4LCAxOCwgMTUsIDUsIDEwNCwgMTE1LCAKKyAgICAxMDQsIDEwNCwgMjIzLCA1MiwgMTE1LCAxMDQsIDIyMywgNTEsIDE1LCA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAKKyAgICAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTcsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCAKKyAgICA5NiwgNjksIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDEwNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIAorICAgIDIyMCwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0NywgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ4LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMTQsIDIxNSwgMTUsIDUsIDIxNCwgMTk3LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzMsIAorICAgIDEyMywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMxLCA5NywgOTYsIDI0OCwgMjI5LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAKKyAgICAyMjAsIDEwMiwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgNjksIDE1LCA1LCAyMTQsIDE5NiwgMTUsIDUsIDIxNCwgMTkyLCAxNSwgCisgICAgNSwgMjE0LCAxOTMsIDMwLCAyMzQsIDIxMywgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxOTAsIDE1LCAKKyAgICA1LCAyMTQsIDE5MSwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyNDksIDEzMywgMjE0LCAKKyAgICAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NywgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIAorICAgIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNiwgOTYsIDE5OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMTQsIAorICAgIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgMTQsIDE1LCA1LCAyMTQsIDE0NywgMTUsIDUsIDIxNCwgMTQ0LCAKKyAgICAxNSwgNSwgMjE0LCAxNDMsIDE1LCA1LCAyMTQsIDEzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgNjEsIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDI1MywgMjM0LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMzAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0NiwgCisgICAgNzYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEyNSwgMTUsIDUsIAorICAgIDIxNCwgMTQwLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwMywgMTUsIDUsIAorICAgIDIxNCwgMTQwLCAzMCwgMjQyLCAxMjAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM1LCAxNzIsIDE1LCAKKyAgICA1LCAyMTQsIDE0MCwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzMiwgODksIDE1LCA1LCAyMTQsIDE0MCwgCisgICAgMzAsIDIzMCwgMTkzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxOTEsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIyMCwgNjUsIDE1LCAKKyAgICA1LCAyMTQsIDE0MCwgMzAsIDIxOSwgMTgyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTUsIDExOSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMTA0LCA5NiwgMjQyLCAxMTAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzgsIDMwLCA2OSwgMTUsIDUsIDIxNCwgCisgICAgMTI2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCA2MSwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAyMjMsIDE1LCA1LCAyMTQsIAorICAgIDEyNywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjE0LCAxMjIsIDE1LCA1LCAKKyAgICAyMTQsIDEyNSwgMTUsIDUsIDIxNCwgMTIzLCAxNSwgNSwgMjE0LCAxMTksIDE1LCA1LCAyMTQsIDEwOCwgMTUsIDUsIDIxNCwgCisgICAgMTA5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDEwNywgMTUsIDUsIDIxMCwgMTE2LCAxNSwgNSwgMjEwLCAxMTcsIAorICAgIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAxMTcsIDkyLCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMTAsIDExMywgMTUsIDUsIDIxMCwgCisgICAgMTA2LCAxNSwgNSwgMjEwLCA5MywgMTUsIDUsIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQ1LCAxMTUsIDIxMCwgNDQsIDE1LCA1LCAKKyAgICAyMTAsIDQzLCAxNSwgNSwgMjEwLCA0MSwgMTUsIDUsIDIxMCwgNDIsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyMTAsIAorICAgIDM2LCAxNSwgNSwgMjEwLCAyOCwgMTUsIDUsIDIxMCwgMTMsIDE1LCA1LCAyMTAsIDExLCAxNSwgNSwgMjEwLCAxMiwgMzAsIAorICAgIDYxLCAxNSwgNSwgMjEwLCAxMCwgMTUsIDUsIDIxMCwgOSwgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MywgCisgICAgMjM5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNTMsIDIzOSwgMTUsIAorICAgIDEzMiwgNSwgMjQ1LCAyMDEsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDcsIAorICAgIDE5NSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQ3LCAxOTUsIDE1LCAKKyAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAKKyAgICAyNDQsIDE5LCA2OSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgNjksIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCA2OSwgMTUsIDEzMiwgCisgICAgNSwgMjIwLCAxMjQsIDY5LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgNjksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCA2OSwgMTUsIAorICAgIDEzMiwgNSwgMTIzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCA0NSwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgCisgICAgMjE5LCAxMjcsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgCisgICAgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCA0MiwgMTUsIAorICAgIDEzMiwgNSwgMTEzLCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDIsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgCisgICAgNDIsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDIsIDE1LCAxMzIsIDUsIDExMywgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgODEsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAKKyAgICAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjIwLCA4MCwgMTUsIAorICAgIDEzMiwgNSwgMjIwLCAxMjQsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAKKyAgICAyMjgsIDIwNSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTIzLCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgNzUsIAorICAgIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc2LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgCisgICAgNSwgMjQ0LCAxOSwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMjIwLCA4MSwgCisgICAgMzAsIDI0MywgMTI2LCA5NiwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIDMwLCAyNDMsIDEyNiwgOTYsIDIzMCwgCisgICAgMTkzLCAxNSwgMTMyLCA1LCAxMjMsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgMTA0LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAKKyAgICAxOSwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIAorICAgIDI0NCwgMjgsIDI0NSwgODIsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjQ1LCA3OSwgMTUsIDEzMiwgNSwgCisgICAgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjMsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgCisgICAgMjgsIDIzMiwgMjIxLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgNjEsIDE1LCAKKyAgICAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjI0LCAyNTMsIDE2NiwgMTUsIDEzMiwgNSwgMjE5LCAKKyAgICAxMjcsIDIxNCwgMTIsIDI0NCwgMjgsIDI1MywgMjM2LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgCisgICAgMjM2LCAxNSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDYxLCAxNSwgMTMyLCA1LCAKKyAgICAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAxNywgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIAorICAgIDEyLCAyNDQsIDI4LCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIxNCwgMTIsIDI0NCwgMjgsIDIxNCwgMTIwLCAKKyAgICAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIAorICAgIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzAsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIAorICAgIDI5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMiwgNjEsIDE1LCAxMzIsIDUsIDExMywgCisgICAgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCAKKyAgICAxOSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIAorICAgIDUsIDIxOSwgMTI3LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIAorICAgIDExMywgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MiwgMTU4LCAKKyAgICAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MiwgCisgICAgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIDE1OSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDIyOCwgMjE1LCAKKyAgICAxNSwgMTMyLCA1LCAyMjgsIDIxNiwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDc4LCAxNSwgMTMyLCA1LCAxMTMsIDI0NSwgNzgsIAorICAgIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNzAsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY4LCAyNDcsIDE5NSwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjE5LCAxMTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyMTQsIAorICAgIDEyLCAyNDQsIDI4LCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjE0LCAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAKKyAgICAxMzIsIDUsIDEyMywgMjQ1LCAxOTcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAxMjMsIDIyNCwgMjUsIDI1MywgMjM5LCAxNSwgCisgICAgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjE5LCAxMTcsIDE1LCAxMzIsIDUsIDU1LCAyNTMsIDIyNywgMTIzLCAyMjQsIAorICAgIDI0LCAxNSwgMjI0LCAxNDQsIDUsIDU1LCAyNTMsIDIyNywgMjExLCAyMDksIDI0NywgMTgwLCAxNSwgMjI0LCAxNDQsIDUsIAorICAgIDY3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIDI0OSwgMjM0LCAxNSwgMjI0LCAxNDQsIDUsIDI0OCwgNywgCisgICAgMjE1LCAyMjIsIDEyLCAxMywgMjU1LCAxNjQsIDEyLCAxMywgMjU1LCAxNjMsIDEyLCAxMywgMjU1LCAxNjIsIDEyLCAxMywgCisgICAgMjU1LCAxNjEsIDEyLCAxMywgMjU1LCAxNjAsIDEyLCAxMywgMjU1LCAxNTksIDEyLCAxMywgMjU1LCAxNTgsIDEyLCAxMywgCisgICAgMjU1LCAxNTcsIDEyLCAxMywgMjU1LCAxNTYsIDEyLCAxMywgMjU1LCAxNTUsIDEyLCAxMywgMjU1LCAxNTQsIDEyLCAxMywgCisgICAgMjU1LCAxNTMsIDEyLCAxMywgMjU1LCAxNTIsIDEyLCAxMywgMjU1LCAxNTEsIDEyLCAxMywgMjU1LCAxNTAsIDEyLCAxMywgCisgICAgMjU1LCAxNDksIDEyLCAxMywgMjU1LCAxNDgsIDEyLCAxMywgMjU1LCAxNDcsIDEyLCAxMywgMjU1LCAxNDYsIDEyLCAxMywgCisgICAgMjU1LCAxNDUsIDEyLCAxMywgMjU1LCAxNDQsIDEyLCAxMywgMjU1LCAxNDMsIDEyLCAxMywgMjU1LCAxNDIsIDEyLCAxMywgCisgICAgMjU1LCAxNDEsIDEyLCAxMywgMjU1LCAxNDAsIDEyLCAxMywgMjU1LCAxMzksIDEyLCAxMywgMjU1LCAxMzgsIDEyLCAxMywgCisgICAgMjU1LCAxMzcsIDEyLCAxMywgMjU1LCAxMzYsIDEyLCAxMywgMjU1LCAxMzUsIDEyLCAxMywgMjU1LCAxMzQsIDEyLCAxMywgCisgICAgMjU1LCAxMzMsIDEyLCAxMywgMjU1LCAxMzIsIDEyLCAxMywgMjU1LCAxMzEsIDEyLCAxMywgMjU1LCAxMzAsIDEyLCAxMywgCisgICAgMjU1LCAxMjksIDEyLCAxMywgMjU1LCAxMjgsIDEyLCAxMywgMjU1LCAxMjcsIDEyLCAxMywgMjU1LCAxMjYsIDEyLCAxMywgCisgICAgMjU1LCAxMjUsIDEyLCAxMywgMjU1LCAxMjQsIDEyLCAxMywgMjU1LCAxMjMsIDEyLCAxMywgMjU1LCAxMjIsIDEyLCAxMywgCisgICAgMjU1LCAxMjEsIDEyLCAxMywgMjU1LCAxMjAsIDEyLCAxMywgMjU1LCAxMTksIDEyLCAxMywgMjU1LCAxMTgsIDEyLCAxMywgCisgICAgMjU1LCAxMTcsIDEyLCAxMywgMjU1LCAxMTYsIDEyLCAxMywgMjU1LCAxMTUsIDEyLCAxMywgMjU1LCAxMTQsIDEyLCAxMywgCisgICAgMjU1LCAxMTMsIDEyLCAxMywgMjU1LCAxMTIsIDEyLCAxMywgMjU1LCAxMTEsIDEyLCAxMywgMjU1LCAxMTAsIDEyLCAxMywgCisgICAgMjU1LCAxMDksIDEyLCAxMywgMjU1LCAxMDgsIDEyLCAxMywgMjU1LCAxMDcsIDEyLCAxMywgMjU1LCAxMDYsIDEyLCAxMywgCisgICAgMjU1LCAxMDUsIDEyLCAxMywgMjU1LCAxMDQsIDEyLCAxMywgMjU1LCAxMDMsIDEyLCAxMywgMjU1LCAxMDIsIDEyLCAxMywgCisgICAgMjU1LCAxMDEsIDEyLCAxMywgMjU1LCAxMDAsIDEyLCAxMywgMjU1LCA5OSwgMTIsIDEzLCAyNTUsIDk4LCAxMiwgMTMsIAorICAgIDI1NSwgOTcsIDEyLCAxMywgMjU1LCA5NiwgMTIsIDEzLCAyNTUsIDk1LCAxMiwgMTMsIDI1NSwgOTQsIDEyLCAxMywgMjU1LCAKKyAgICA5MywgMTIsIDEzLCAyNTUsIDkyLCAxMiwgMTMsIDI1NSwgOTEsIDEyLCAxMywgMjU1LCA5MCwgMTIsIDEzLCAyNTUsIDg5LCAKKyAgICAxMiwgMTMsIDI1NSwgODgsIDEyLCAxMywgMjU1LCA4NywgMTIsIDEzLCAyNTUsIDg2LCAxMiwgMTMsIDI1NSwgODUsIDEyLCAKKyAgICAxMywgMjUzLCAxNjQsIDEyLCAxMywgMjUzLCAxNjIsIDEyLCAxMywgMjUzLCAxNjAsIDEyLCAxMywgMjUzLCAxNTgsIDEyLCAKKyAgICAxMywgMjUzLCAxNTYsIDEyLCAxMywgMjUzLCAxNTUsIDEyLCAxMywgMjUzLCAxNTMsIDEyLCAxMywgMjUzLCAxNTEsIDEyLCAKKyAgICAxMywgMjUzLCAxNDksIDEyLCAxMywgMjUzLCAxNDcsIDEyLCAxMywgMjUxLCA3MCwgMTIsIDEzLCAyNTEsIDY5LCAxMiwgMTMsIAorICAgIDI1MSwgNjgsIDEyLCAxMywgMjUxLCA2NywgMTIsIDEzLCAyNTEsIDY2LCAxMiwgMTMsIDI1MSwgNjUsIDEyLCAxMywgMjUxLCAKKyAgICA2NCwgMTIsIDEzLCAyNTEsIDYzLCAxMiwgMTMsIDI1MSwgNjIsIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAKKyAgICAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAKKyAgICAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAKKyAgICAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgCisgICAgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgCisgICAgMTIsIDEzLCAyNDksIDY3LCAxMiwgMTMsIDI0OSwgNjYsIDEyLCAxMywgMjQ5LCA2NSwgMTIsIDEzLCAyNDksIDY0LCAxMiwgCisgICAgMTMsIDI0OSwgNjMsIDEyLCAxMywgMjQ5LCA2MiwgMTIsIDEzLCAyNDksIDYxLCAxMiwgMTMsIDI0OSwgNjAsIDEyLCAxMywgCisgICAgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIAorICAgIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIAorICAgIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIAorICAgIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIAorICAgIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAKKyAgICAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAKKyAgICAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAKKyAgICAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAKKyAgICAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgCisgICAgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgCisgICAgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgCisgICAgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAKKyAgICAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAKKyAgICAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAKKyAgICAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAKKyAgICAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAKKyAgICAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAKKyAgICAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAKKyAgICAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAKKyAgICAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAKKyAgICAyNDYsIDMxLCAxMiwgMTMsIDI0NiwgMzAsIDEyLCAxMywgMjQ2LCAyOSwgMTIsIDEzLCAyNDYsIDI4LCAxMiwgMTMsIDI0NiwgCisgICAgMjcsIDEyLCAxMywgMjQ2LCAyNiwgMTIsIDEzLCAyNDYsIDI1LCAxMiwgMTMsIDI0NiwgMjQsIDEyLCAxMywgMjQ2LCAyMywgCisgICAgMTIsIDEzLCAyNDYsIDIyLCAxMiwgMTMsIDI0NiwgMjEsIDEyLCAxMywgMjQ2LCAyMCwgMTIsIDEzLCAyNDYsIDE5LCAxMiwgCisgICAgMTMsIDI0NiwgMTgsIDEyLCAxMywgMjQ2LCAxNywgMTIsIDEzLCAyNDYsIDE2LCAxMiwgMTMsIDI0NiwgMTUsIDEyLCAxMywgCisgICAgMjQ2LCAxNCwgMTIsIDEzLCAyNDYsIDEzLCAxMiwgMTMsIDI0NiwgMTIsIDEyLCAxMywgMjQ2LCAxMSwgMTIsIDEzLCAyNDYsIAorICAgIDEwLCAxMiwgMTMsIDI0NiwgOSwgMTIsIDEzLCAyNDYsIDgsIDEyLCAxMywgMjQ2LCA3LCAxMiwgMTMsIDI0NiwgNiwgMTIsIAorICAgIDEzLCAyNDYsIDUsIDEyLCAxMywgMjQ2LCA0LCAxMiwgMTMsIDI0NiwgMywgMTIsIDEzLCAyNDYsIDIsIDEyLCAxMywgMjQ2LCAKKyAgICAxLCAxMiwgMTMsIDI0NiwgMCwgMTIsIDEzLCAyNDUsIDI1NSwgMTIsIDEzLCAyNDUsIDI1NCwgMTIsIDEzLCAyNDUsIDI1MywgCisgICAgMTIsIDEzLCAyNDUsIDI1MiwgMTIsIDEzLCAyNDUsIDI1MSwgMTIsIDEzLCAyNDUsIDI1MCwgMTIsIDEzLCAyNDUsIDI0OSwgCisgICAgMTIsIDEzLCAyNDUsIDI0OCwgMTIsIDEzLCAyNDUsIDI0NywgMTIsIDEzLCAyNDUsIDI0NiwgMTIsIDEzLCAyNDUsIDI0NSwgCisgICAgMTIsIDEzLCAyNDUsIDI0NCwgMTIsIDEzLCAyNDUsIDEzLCAxMiwgMTMsIDI0NSwgMTIsIDEyLCAxMywgMjQ1LCAxMSwgMTIsIAorICAgIDEzLCAyNDUsIDEwLCAxMiwgMTMsIDI0NSwgOSwgMTIsIDEzLCAyNDUsIDgsIDEyLCAxMywgMjQ1LCA3LCAxMiwgMTMsIDI0NSwgCisgICAgNiwgMTIsIDEzLCAyNDUsIDUsIDEyLCAxMywgMjQ1LCA0LCAxMiwgMTMsIDI0NSwgMywgMTIsIDEzLCAyNDUsIDIsIDEyLCAKKyAgICAxMywgMjQ1LCAxLCAxMiwgMTMsIDI0NSwgMCwgMTIsIDEzLCAyNDQsIDI1NSwgMTIsIDEzLCAyNDQsIDI1NCwgMTIsIDEzLCAKKyAgICAyNDQsIDI1MywgMTIsIDEzLCAyNDQsIDI1MiwgMTIsIDEzLCAyNDQsIDI1MSwgMTIsIDEzLCAyNDQsIDI1MCwgMTIsIDEzLCAKKyAgICAyNDQsIDI0OSwgMTIsIDEzLCAyNDQsIDI0OCwgMTIsIDEzLCAyNDQsIDI0NywgMTIsIDEzLCAyNDQsIDI0NiwgMTIsIDEzLCAKKyAgICAyNDQsIDI0NSwgMTIsIDEzLCAyNDQsIDI0NCwgMTIsIDEzLCAyNDQsIDI0MywgMTIsIDEzLCAyNDQsIDI0MiwgMTIsIDEzLCAKKyAgICAyNDQsIDI0MSwgMTIsIDEzLCAyNDQsIDI0MCwgMTIsIDEzLCAyNDQsIDIzOSwgMTIsIDEzLCAyNDQsIDIzOCwgMTIsIDEzLCAKKyAgICAyNDQsIDIzNywgMTIsIDEzLCAyNDQsIDIzNiwgMTIsIDEzLCAyNDQsIDIzNSwgMTIsIDEzLCAyNDQsIDIzNCwgMTIsIDEzLCAKKyAgICAyNDQsIDIzMywgMTIsIDEzLCAyNDQsIDIzMiwgMTIsIDEzLCAyNDQsIDIzMSwgMTIsIDEzLCAyNDQsIDIzMCwgMTIsIDEzLCAKKyAgICAyNDQsIDIyOSwgMTIsIDEzLCAyNDQsIDIyOCwgMTIsIDEzLCAyNDQsIDIyNywgMTIsIDEzLCAyNDQsIDIyNiwgMTIsIDEzLCAKKyAgICAyNDQsIDIyNSwgMTIsIDEzLCAyNDQsIDIyNCwgMTIsIDEzLCAyNDQsIDIyMywgMTIsIDEzLCAyNDQsIDIyMiwgMTIsIDEzLCAKKyAgICAyNDQsIDIyMSwgMTIsIDEzLCAyNDQsIDIyMCwgMTIsIDEzLCAyNDQsIDIxOSwgMTIsIDEzLCAyNDQsIDIxOCwgMTIsIDEzLCAKKyAgICAyNDQsIDIxNywgMTIsIDEzLCAyNDQsIDIxNiwgMTIsIDEzLCAyNDQsIDIxNSwgMTIsIDEzLCAyNDQsIDIxNCwgMTIsIDEzLCAKKyAgICAyNDQsIDIxMywgMTIsIDEzLCAyNDQsIDIxMiwgMTIsIDEzLCAyNDQsIDIxMSwgMTIsIDEzLCAyNDQsIDIxMCwgMTIsIDEzLCAKKyAgICAyNDQsIDIwOSwgMTIsIDEzLCAyNDQsIDIwOCwgMTIsIDEzLCAyNDQsIDIwNywgMTIsIDEzLCAyNDQsIDIwNiwgMTIsIDEzLCAKKyAgICAyNDQsIDIwNSwgMTIsIDEzLCAyNDMsIDIwOCwgMTIsIDEzLCAyNDMsIDIwNywgMTIsIDEzLCAyNDMsIDIwNiwgMTIsIDEzLCAKKyAgICAyNDMsIDIwNSwgMTIsIDEzLCAyNDMsIDIwNCwgMTIsIDEzLCAyNDMsIDIwMywgMTIsIDEzLCAyNDMsIDIwMiwgMTIsIDEzLCAKICAgICAyNDMsIDIwMSwgMTIsIDEzLCAyNDMsIDIwMCwgMTIsIDEzLCAyNDMsIDE5OSwgMTIsIDEzLCAyNDMsIDE5OCwgMTIsIDEzLCAKICAgICAyNDMsIDE5NywgMTIsIDEzLCAyNDMsIDE5NiwgMTIsIDEzLCAyNDMsIDE5NSwgMTIsIDEzLCAyNDMsIDE5NCwgMTIsIDEzLCAKICAgICAyNDMsIDE5MywgMTIsIDEzLCAyNDMsIDE5MiwgMTIsIDEzLCAyNDMsIDE5MSwgMTIsIDEzLCAyNDMsIDE5MCwgMTIsIDEzLCAKQEAgLTEyMDE1LDgxICsxMjAxNiw4MCBAQAogICAgIDI0MywgMTU3LCAxMiwgMTMsIDI0MywgMTU2LCAxMiwgMTMsIDI0MywgMTU1LCAxMiwgMTMsIDI0MywgMTU0LCAxMiwgMTMsIAogICAgIDI0MywgMTUzLCAxMiwgMTMsIDI0MywgMTUyLCAxMiwgMTMsIDI0MywgMTUxLCAxMiwgMTMsIDI0MywgMTUwLCAxMiwgMTMsIAogICAgIDI0MywgMTQ5LCAxMiwgMTMsIDI0MywgMTQ4LCAxMiwgMTMsIDI0MywgMTQ3LCAxMiwgMTMsIDI0MywgMTQ2LCAxMiwgMTMsIAotICAgIDI0MywgMTQ1LCAxMiwgMTMsIDI0MywgMTQ0LCAxMiwgMTMsIDI0MywgMTQzLCAxMiwgMTMsIDI0MywgMTQyLCAxMiwgMTMsIAotICAgIDI0MywgMTQxLCAxMiwgMTMsIDI0MywgMTQwLCAxMiwgMTMsIDI0MywgMTM5LCAxMiwgMTMsIDI0MywgMTM4LCAxMiwgMTMsIAotICAgIDI0MiwgNTgsIDEyLCAxMywgMjQyLCA1NywgMTIsIDEzLCAyNDIsIDU2LCAxMiwgMTMsIDI0MiwgNTUsIDEyLCAxMywgMjQyLCAKLSAgICA1NCwgMTIsIDEzLCAyNDIsIDUzLCAxMiwgMTMsIDI0MiwgNTIsIDEyLCAxMywgMjQyLCA1MSwgMTIsIDEzLCAyNDIsIDUwLCAKKyAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDIsIDY1LCAxMiwgMTMsIDI0MiwgNjQsIDEyLCAxMywgMjQyLCA2MywgMTIsIDEzLCAyNDIsIAorICAgIDYyLCAxMiwgMTMsIDI0MiwgNjEsIDEyLCAxMywgMjQyLCA2MCwgMTIsIDEzLCAyNDIsIDU5LCAxMiwgMTMsIDI0MiwgNTgsIAorICAgIDEyLCAxMywgMjQyLCA1NywgMTIsIDEzLCAyNDAsIDE0NSwgMTIsIDEzLCAyNDAsIDE0NCwgMTIsIDEzLCAyNDAsIDE0MywgCisgICAgMTIsIDEzLCAyNDAsIDE0MiwgMTIsIDEzLCAyNDAsIDE0MSwgMTIsIDEzLCAyNDAsIDE0MCwgMTIsIDEzLCAyNDAsIDEzOSwgCiAgICAgMTIsIDEzLCAyNDAsIDEzOCwgMTIsIDEzLCAyNDAsIDEzNywgMTIsIDEzLCAyNDAsIDEzNiwgMTIsIDEzLCAyNDAsIDEzNSwgCiAgICAgMTIsIDEzLCAyNDAsIDEzNCwgMTIsIDEzLCAyNDAsIDEzMywgMTIsIDEzLCAyNDAsIDEzMiwgMTIsIDEzLCAyNDAsIDEzMSwgCiAgICAgMTIsIDEzLCAyNDAsIDEzMCwgMTIsIDEzLCAyNDAsIDEyOSwgMTIsIDEzLCAyNDAsIDEyOCwgMTIsIDEzLCAyNDAsIDEyNywgCi0gICAgMTIsIDEzLCAyNDAsIDEyNiwgMTIsIDEzLCAyNDAsIDEyNSwgMTIsIDEzLCAyNDAsIDEyNCwgMTIsIDEzLCAyNDAsIDEyMywgCi0gICAgMTIsIDEzLCAyNDAsIDEyMiwgMTIsIDEzLCAyNDAsIDEyMSwgMTIsIDEzLCAyNDAsIDEyMCwgMTIsIDEzLCAyMzUsIDIyLCAKLSAgICAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgMjM1LCAyMCwgMTIsIDEzLCAyMzUsIDE5LCAxMiwgMTMsIDIzNSwgMTgsIDEyLCAKLSAgICAxMywgMjM1LCAxNywgMTIsIDEzLCAyMzUsIDE2LCAxMiwgMTMsIDIzNSwgMTUsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgCi0gICAgMjMzLCAxNDUsIDEyLCAxMywgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMzLCAxNDIsIDEyLCAxMywgCi0gICAgMjMzLCAxNDEsIDEyLCAxMywgMjMzLCAxNDAsIDEyLCAxMywgMjMzLCAxMzksIDEyLCAxMywgMjMzLCAxMzgsIDEyLCAxMywgCi0gICAgMjMzLCAxMzcsIDEyLCAxMywgMjMyLCA0OSwgMTIsIDEzLCAyMzIsIDQ4LCAxMiwgMTMsIDIzMiwgNDcsIDEyLCAxMywgMjMyLCAKLSAgICA0NiwgMTIsIDEzLCAyMzIsIDQ1LCAxMiwgMTMsIDIzMiwgNDQsIDEyLCAxMywgMjMyLCA0MywgMTIsIDEzLCAyMzIsIDQyLCAKLSAgICAxMiwgMTMsIDIzMiwgNDEsIDEyLCAxMywgMjMyLCA0MCwgMTIsIDEzLCAyMzIsIDM5LCAxMiwgMTMsIDIzMiwgMzgsIDEyLCAKLSAgICAxMywgMjMyLCAzNywgMTIsIDEzLCAyMzIsIDM2LCAxMiwgMTMsIDIzMiwgMzUsIDEyLCAxMywgMjMyLCAzNCwgMTIsIDEzLCAKLSAgICAyMzIsIDMzLCAxMiwgMTMsIDIzMiwgMzIsIDEyLCAxMywgMjMyLCAzMSwgMTIsIDEzLCAyMzIsIDMwLCAxMiwgMTMsIDIzMiwgCi0gICAgMjksIDEyLCAxMywgMjMyLCAyOCwgMTIsIDEzLCAyMzIsIDI3LCAxMiwgMTMsIDIzMiwgMjYsIDEyLCAxMywgMjMyLCAyNSwgCi0gICAgMTIsIDEzLCAyMzIsIDI0LCAxMiwgMTMsIDIzMiwgMjMsIDEyLCAxMywgMjMyLCAyMiwgMTIsIDEzLCAyMzIsIDIxLCAxMiwgCi0gICAgMTMsIDIzMiwgMjAsIDEyLCAxMywgMjMyLCAxOSwgMTIsIDEzLCAyMzIsIDE4LCAxMiwgMTMsIDIzMiwgMTcsIDEyLCAxMywgCi0gICAgMjMyLCAxNiwgMTIsIDEzLCAyMzIsIDE1LCAxMiwgMTMsIDIzMiwgMTQsIDEyLCAxMywgMjMyLCAxMywgMTIsIDEzLCAyMzIsIAotICAgIDEyLCAxMiwgMTMsIDIzMiwgMTEsIDEyLCAxMywgMjMyLCAxMCwgMTIsIDEzLCAyMzIsIDksIDEyLCAxMywgMjMyLCA4LCAxMiwgCi0gICAgMTMsIDIzMiwgNywgMTIsIDEzLCAyMzIsIDYsIDEyLCAxMywgMjMyLCA1LCAxMiwgMTMsIDIzMiwgNCwgMTIsIDEzLCAyMzIsIAotICAgIDMsIDEyLCAxMywgMjMyLCAyLCAxMiwgMTMsIDIzMiwgMSwgMTIsIDEzLCAyMzIsIDAsIDEyLCAxMywgMjMxLCAyNTUsIDEyLCAKLSAgICAxMywgMjMxLCAyNTQsIDEyLCAxMywgMjMxLCAyNTMsIDEyLCAxMywgMjMxLCAyNTIsIDEyLCAxMywgMjMxLCAyNTEsIDEyLCAKLSAgICAxMywgMjMxLCAyNTAsIDEyLCAxMywgMjMxLCAyNDksIDEyLCAxMywgMjMxLCAyNDgsIDEyLCAxMywgMjMxLCAyNDcsIDEyLCAKLSAgICAxMywgMjMxLCAyNDYsIDEyLCAxMywgMjMxLCAyNDUsIDEyLCAxMywgMjMxLCAyNDQsIDEyLCAxMywgMjMxLCAyNDMsIDEyLCAKLSAgICAxMywgMjMxLCAyNDIsIDEyLCAxMywgMjMxLCAyNDEsIDEyLCAxMywgMjMxLCAyNDAsIDEyLCAxMywgMjMwLCAyMiwgMTIsIAotICAgIDEzLCAyMzAsIDIxLCAxMiwgMTMsIDIzMCwgMjAsIDEyLCAxMywgMjMwLCAxOSwgMTIsIDEzLCAyMzAsIDE4LCAxMiwgMTMsIAotICAgIDIzMCwgMTcsIDEyLCAxMywgMjMwLCAxNiwgMTIsIDEzLCAyMzAsIDE1LCAxMiwgMTMsIDIzMCwgMTQsIDEyLCAxMywgMjMwLCAKLSAgICAxMywgMTIsIDEzLCAyMzAsIDEyLCAxMiwgMTMsIDIzMCwgMTEsIDEyLCAxMywgMjMwLCAxMCwgMTIsIDEzLCAyMzAsIDksIAotICAgIDEyLCAxMywgMjMwLCA4LCAxMiwgMTMsIDIzMCwgNywgMTIsIDEzLCAyMzAsIDYsIDEyLCAxMywgMjMwLCA1LCAxMiwgMTMsIAotICAgIDIzMCwgNCwgMTIsIDEzLCAyMzAsIDMsIDEyLCAxMywgMjMwLCAyLCAxMiwgMTMsIDIzMCwgMSwgMTIsIDEzLCAyMzAsIDAsIAotICAgIDEyLCAxMywgMjI5LCAyNTUsIDEyLCAxMywgMjI5LCAyNTQsIDEyLCAxMywgMjI5LCAyNTMsIDEyLCAxMywgMjI5LCAyNTIsIAotICAgIDEyLCAxMywgMjI5LCAyNTEsIDEyLCAxMywgMjI5LCAyNTAsIDEyLCAxMywgMjI5LCAyNDksIDEyLCAxMywgMjI5LCAyNDgsIAotICAgIDEyLCAxMywgMjI5LCAyNDcsIDEyLCAxMywgMjI5LCAyNDYsIDEyLCAxMywgMjI5LCAyNDUsIDEyLCAxMywgMjI5LCAyNDQsIAotICAgIDEyLCAxMywgMjI5LCAyNDMsIDEyLCAxMywgMjI5LCAyNDIsIDEyLCAxMywgMjI5LCAyNDEsIDEyLCAxMywgMjI5LCAyNDAsIAotICAgIDEyLCAxMywgMjI5LCAyMzksIDEyLCAxMywgMjI5LCAyMzgsIDEyLCAxMywgMjI5LCAyMzcsIDEyLCAxMywgMjI5LCAyMzYsIAotICAgIDEyLCAxMywgMjI5LCAyMzUsIDEyLCAxMywgMjI5LCAyMzQsIDEyLCAxMywgMjI5LCAyMzMsIDEyLCAxMywgMjI5LCAyMzIsIAotICAgIDEyLCAxMywgMjI5LCAyMzEsIDEyLCAxMywgMjI5LCAyMzAsIDEyLCAxMywgMjI4LCAxMzQsIDEyLCAxMywgMjI4LCAxMzMsIAotICAgIDEyLCAxMywgMjI4LCAxMzIsIDEyLCAxMywgMjI4LCAxMzEsIDEyLCAxMywgMjI4LCAxMzAsIDEyLCAxMywgMjI4LCAxMjksIAotICAgIDEyLCAxMywgMjI4LCAxMjgsIDEyLCAxMywgMjI4LCAxMjcsIDEyLCAxMywgMjI4LCAxMjYsIDEyLCAxMywgMjI4LCAxMjUsIAotICAgIDEyLCAxMywgMjI4LCAxMjQsIDEyLCAxMywgMjI4LCAxMjMsIDEyLCAxMywgMjI4LCAxMjIsIDEyLCAxMywgMjI4LCAxMjEsIAotICAgIDEyLCAxMywgMjI4LCAxMjAsIDEyLCAxMywgMjI4LCAxMTksIDEyLCAxMywgMjI4LCAxMTgsIDEyLCAxMywgMjI4LCAxMTcsIAotICAgIDEyLCAxMywgMjI4LCAxMTYsIDEyLCAxMywgMjI4LCAxMTUsIDEyLCAxMywgMjI4LCAxMTQsIDEyLCAxMywgMjI4LCAxMTMsIAotICAgIDEyLCAxMywgMjI3LCAyMzYsIDEyLCAxMywgMjI3LCAyMzUsIDEyLCAxMywgMjI3LCAyMzQsIDEyLCAxMywgMjI3LCAyMzMsIAotICAgIDEyLCAxMywgMjI3LCAyMzIsIDEyLCAxMywgMjI3LCAyMzEsIDEyLCAxMywgMjI3LCAyMzAsIDEyLCAxMywgMjI3LCAyMjksIAotICAgIDEyLCAxMywgMjI3LCAyMjgsIDEyLCAxMywgMjI3LCAyMjcsIDEyLCAxMywgMjI3LCAyMjYsIDEyLCAxMywgMjI3LCAyMjUsIAotICAgIDEyLCAxMywgMjI3LCAyMjQsIDEyLCAxMywgMjI3LCAyMjMsIDEyLCAxMywgMjI3LCAyMjIsIDEyLCAxMywgMjI3LCAyMjEsIAotICAgIDEyLCAxMywgMjI3LCAyMjAsIDEyLCAxMywgMjI3LCAyMTksIDEyLCAxMywgMjI3LCAyMTgsIDEyLCAxMywgMjI3LCAyMTcsIAotICAgIDEyLCAxMywgMjI3LCAyMTYsIDEyLCAxMywgMjI3LCAyMTUsIDEyLCAxMywgMjI3LCAyMTQsIDEyLCAxMywgMjI3LCAyMTMsIAotICAgIDEyLCAxMywgMjI3LCAyMTIsIDEyLCAxMywgMjI3LCAyMTEsIDEyLCAxMywgMjI3LCA3NiwgMTIsIDEzLCAyMjcsIDc1LCAxMiwgCi0gICAgMTMsIDIyNywgNzQsIDEyLCAxMywgMjI3LCA3MywgMTIsIDEzLCAyMjcsIDcyLCAxMiwgMTMsIDIyNywgNzEsIDEyLCAxMywgCi0gICAgMjI3LCA3MCwgMTIsIDEzLCAyMjcsIDY5LCAxMiwgMTMsIDIyNywgNjgsIDEyLCAxMywgMjI3LCA2NywgMTIsIDEzLCAyMjcsIAotICAgIDY2LCAxMiwgMTMsIDIyNywgNjUsIDEyLCAxMywgMjI3LCA2NCwgMTIsIDEzLCAyMjcsIDYzLCAxMiwgMTMsIDIyNywgNjIsIAotICAgIDEyLCAxMywgMjI3LCA2MSwgMTIsIDEzLCAyMjcsIDYwLCAxMiwgMTMsIDIyNywgNTksIDEyLCAxMywgMjI3LCA1OCwgMTIsIAotICAgIDEzLCAyMjcsIDU3LCAxMiwgMTMsIDIyNywgNTYsIDEyLCAxMywgMjI3LCA1NSwgMTIsIDEzLCAyMjcsIDU0LCAxMiwgMTMsIAotICAgIDIyNywgNTMsIDEyLCAxMywgMjI3LCA1MiwgMTIsIDEzLCAyMjcsIDUxLCAxMiwgMTMsIDIyNywgNTAsIDEyLCAxMywgMjI3LCAKLSAgICA0OSwgMTIsIDEzLCAyMjcsIDQ4LCAxMiwgMTMsIDIyNywgNDcsIDEyLCAxMywgMjI3LCA0NiwgMTIsIDEzLCAyMjcsIDQ1LCAKLSAgICAxMiwgMTMsIDIyNywgNDQsIDEyLCAxMywgMjI3LCA0MywgMTIsIDEzLCAyMjcsIDQyLCAxMiwgMTMsIDIyNywgNDEsIDEyLCAKLSAgICAxMywgMjI3LCA0MCwgMTIsIDEzLCAyMjcsIDM5LCAxMiwgMTMsIDIyNywgMzgsIDEyLCAxMywgMjI3LCAzNywgMTIsIDEzLCAKLSAgICAyMjcsIDM2LCAxMiwgMTMsIDIyNywgMzUsIDEyLCAxMywgMjI3LCAzNCwgMTIsIDEzLCAyMjcsIDMzLCAxMiwgMTMsIDIyNywgCi0gICAgMzIsIDEyLCAxMywgMjI3LCAzMSwgMTIsIDEzLCAyMjcsIDMwLCAxMiwgMTMsIDIyNywgMjksIDEyLCAxMywgMjI3LCAyOCwgCi0gICAgMTIsIDEzLCAyMjcsIDI3LCAxMiwgMTMsIDIyNywgMjYsIDEyLCAxMywgMjI3LCAyNSwgMTIsIDEzLCAyMjcsIDI0LCAxMiwgCi0gICAgMTMsIDIyNywgMjMsIDEyLCAxMywgMjI3LCAyMiwgMTIsIDEzLCAyMjcsIDIxLCAxMiwgMTMsIDIyNywgMjAsIDEyLCAxMywgCi0gICAgMjI3LCAxOSwgMTIsIDEzLCAyMjcsIDE4LCAxMiwgMTMsIDIyNywgMTcsIDEyLCAxMywgMjI3LCAxNiwgMTIsIDEzLCAyMjcsIAotICAgIDE1LCAxMiwgMTMsIDIyNywgMTQsIDEyLCAxMywgMjI3LCAxMywgMTIsIDEzLCAyMjcsIDEyLCAxMiwgMTMsIDIyNywgMTEsIAotICAgIDEyLCAxMywgMjI3LCAxMCwgMTIsIDEzLCAyMjcsIDksIDEyLCAxMywgMjI3LCA4LCAxMiwgMTMsIDIyNywgNywgMTIsIDEzLCAKLSAgICAyMjcsIDYsIDEyLCAxMywgMjI3LCA1LCAxMiwgMTMsIDIyNywgNCwgMTIsIDEzLCAyMjcsIDMsIDEyLCAxMywgMjI3LCAyLCAKLSAgICAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgMTMsIDIyNiwgMTAxLCAKLSAgICAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAyMjYsIDk3LCAxMiwgCi0gICAgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI2LCA5NSwgMTIsIDEzLCAyMjYsIDk0LCAxMiwgMTMsIDIyNiwgOTMsIDEyLCAxMywgCi0gICAgMjI2LCA5MiwgMTIsIDEzLCAyMjQsIDk1LCAxMiwgMTMsIDIyNCwgOTQsIDEyLCAxMywgMjI0LCA5MywgMTIsIDEzLCAyMjQsIAotICAgIDkyLCAxMiwgMTMsIDIyNCwgOTEsIDEyLCAxMywgMjI0LCA5MCwgMTIsIDEzLCAyMjQsIDg5LCAxMiwgMTMsIDIyMywgMjIyLCAKKyAgICAxMiwgMTMsIDIzNSwgMjgsIDEyLCAxMywgMjM1LCAyNywgMTIsIDEzLCAyMzUsIDI2LCAxMiwgMTMsIDIzNSwgMjUsIDEyLCAKKyAgICAxMywgMjM1LCAyNCwgMTIsIDEzLCAyMzUsIDIzLCAxMiwgMTMsIDIzNSwgMjIsIDEyLCAxMywgMjM1LCAyMSwgMTIsIDEzLCAKKyAgICAyMzMsIDE1MiwgMTIsIDEzLCAyMzMsIDE1MSwgMTIsIDEzLCAyMzMsIDE1MCwgMTIsIDEzLCAyMzMsIDE0OSwgMTIsIDEzLCAKKyAgICAyMzMsIDE0OCwgMTIsIDEzLCAyMzMsIDE0NywgMTIsIDEzLCAyMzMsIDE0NiwgMTIsIDEzLCAyMzMsIDE0NSwgMTIsIDEzLCAKKyAgICAyMzMsIDE0NCwgMTIsIDEzLCAyMzMsIDE0MywgMTIsIDEzLCAyMzIsIDU0LCAxMiwgMTMsIDIzMiwgNTMsIDEyLCAxMywgCisgICAgMjMyLCA1MiwgMTIsIDEzLCAyMzIsIDUxLCAxMiwgMTMsIDIzMiwgNTAsIDEyLCAxMywgMjMyLCA0OSwgMTIsIDEzLCAyMzIsIAorICAgIDQ4LCAxMiwgMTMsIDIzMiwgNDcsIDEyLCAxMywgMjMyLCA0NiwgMTIsIDEzLCAyMzIsIDQ1LCAxMiwgMTMsIDIzMiwgNDQsIAorICAgIDEyLCAxMywgMjMyLCA0MywgMTIsIDEzLCAyMzIsIDQyLCAxMiwgMTMsIDIzMiwgNDEsIDEyLCAxMywgMjMyLCA0MCwgMTIsIAorICAgIDEzLCAyMzIsIDM5LCAxMiwgMTMsIDIzMiwgMzgsIDEyLCAxMywgMjMyLCAzNywgMTIsIDEzLCAyMzIsIDM2LCAxMiwgMTMsIAorICAgIDIzMiwgMzUsIDEyLCAxMywgMjMyLCAzNCwgMTIsIDEzLCAyMzIsIDMzLCAxMiwgMTMsIDIzMiwgMzIsIDEyLCAxMywgMjMyLCAKKyAgICAzMSwgMTIsIDEzLCAyMzIsIDMwLCAxMiwgMTMsIDIzMiwgMjksIDEyLCAxMywgMjMyLCAyOCwgMTIsIDEzLCAyMzIsIDI3LCAKKyAgICAxMiwgMTMsIDIzMiwgMjYsIDEyLCAxMywgMjMyLCAyNSwgMTIsIDEzLCAyMzIsIDI0LCAxMiwgMTMsIDIzMiwgMjMsIDEyLCAKKyAgICAxMywgMjMyLCAyMiwgMTIsIDEzLCAyMzIsIDIxLCAxMiwgMTMsIDIzMiwgMjAsIDEyLCAxMywgMjMyLCAxOSwgMTIsIDEzLCAKKyAgICAyMzIsIDE4LCAxMiwgMTMsIDIzMiwgMTcsIDEyLCAxMywgMjMyLCAxNiwgMTIsIDEzLCAyMzIsIDE1LCAxMiwgMTMsIDIzMiwgCisgICAgMTQsIDEyLCAxMywgMjMyLCAxMywgMTIsIDEzLCAyMzIsIDEyLCAxMiwgMTMsIDIzMiwgMTEsIDEyLCAxMywgMjMyLCAxMCwgCisgICAgMTIsIDEzLCAyMzIsIDksIDEyLCAxMywgMjMyLCA4LCAxMiwgMTMsIDIzMiwgNywgMTIsIDEzLCAyMzIsIDYsIDEyLCAxMywgCisgICAgMjMyLCA1LCAxMiwgMTMsIDIzMiwgNCwgMTIsIDEzLCAyMzIsIDMsIDEyLCAxMywgMjMyLCAyLCAxMiwgMTMsIDIzMiwgMSwgCisgICAgMTIsIDEzLCAyMzIsIDAsIDEyLCAxMywgMjMxLCAyNTUsIDEyLCAxMywgMjMxLCAyNTQsIDEyLCAxMywgMjMxLCAyNTMsIDEyLCAKKyAgICAxMywgMjMxLCAyNTIsIDEyLCAxMywgMjMxLCAyNTEsIDEyLCAxMywgMjMxLCAyNTAsIDEyLCAxMywgMjMxLCAyNDksIDEyLCAKKyAgICAxMywgMjMxLCAyNDgsIDEyLCAxMywgMjMxLCAyNDcsIDEyLCAxMywgMjMxLCAyNDYsIDEyLCAxMywgMjMxLCAyNDUsIDEyLCAKKyAgICAxMywgMjMwLCAyNywgMTIsIDEzLCAyMzAsIDI2LCAxMiwgMTMsIDIzMCwgMjUsIDEyLCAxMywgMjMwLCAyNCwgMTIsIDEzLCAKKyAgICAyMzAsIDIzLCAxMiwgMTMsIDIzMCwgMjIsIDEyLCAxMywgMjMwLCAyMSwgMTIsIDEzLCAyMzAsIDIwLCAxMiwgMTMsIDIzMCwgCisgICAgMTksIDEyLCAxMywgMjMwLCAxOCwgMTIsIDEzLCAyMzAsIDE3LCAxMiwgMTMsIDIzMCwgMTYsIDEyLCAxMywgMjMwLCAxNSwgCisgICAgMTIsIDEzLCAyMzAsIDE0LCAxMiwgMTMsIDIzMCwgMTMsIDEyLCAxMywgMjMwLCAxMiwgMTIsIDEzLCAyMzAsIDExLCAxMiwgCisgICAgMTMsIDIzMCwgMTAsIDEyLCAxMywgMjMwLCA5LCAxMiwgMTMsIDIzMCwgOCwgMTIsIDEzLCAyMzAsIDcsIDEyLCAxMywgMjMwLCAKKyAgICA2LCAxMiwgMTMsIDIzMCwgNSwgMTIsIDEzLCAyMzAsIDQsIDEyLCAxMywgMjMwLCAzLCAxMiwgMTMsIDIzMCwgMiwgMTIsIAorICAgIDEzLCAyMzAsIDEsIDEyLCAxMywgMjMwLCAwLCAxMiwgMTMsIDIyOSwgMjU1LCAxMiwgMTMsIDIyOSwgMjU0LCAxMiwgMTMsIAorICAgIDIyOSwgMjUzLCAxMiwgMTMsIDIyOSwgMjUyLCAxMiwgMTMsIDIyOSwgMjUxLCAxMiwgMTMsIDIyOSwgMjUwLCAxMiwgMTMsIAorICAgIDIyOSwgMjQ5LCAxMiwgMTMsIDIyOSwgMjQ4LCAxMiwgMTMsIDIyOSwgMjQ3LCAxMiwgMTMsIDIyOSwgMjQ2LCAxMiwgMTMsIAorICAgIDIyOSwgMjQ1LCAxMiwgMTMsIDIyOSwgMjQ0LCAxMiwgMTMsIDIyOSwgMjQzLCAxMiwgMTMsIDIyOSwgMjQyLCAxMiwgMTMsIAorICAgIDIyOSwgMjQxLCAxMiwgMTMsIDIyOSwgMjQwLCAxMiwgMTMsIDIyOSwgMjM5LCAxMiwgMTMsIDIyOSwgMjM4LCAxMiwgMTMsIAorICAgIDIyOSwgMjM3LCAxMiwgMTMsIDIyOSwgMjM2LCAxMiwgMTMsIDIyOSwgMjM1LCAxMiwgMTMsIDIyOCwgMTM5LCAxMiwgMTMsIAorICAgIDIyOCwgMTM4LCAxMiwgMTMsIDIyOCwgMTM3LCAxMiwgMTMsIDIyOCwgMTM2LCAxMiwgMTMsIDIyOCwgMTM1LCAxMiwgMTMsIAorICAgIDIyOCwgMTM0LCAxMiwgMTMsIDIyOCwgMTMzLCAxMiwgMTMsIDIyOCwgMTMyLCAxMiwgMTMsIDIyOCwgMTMxLCAxMiwgMTMsIAorICAgIDIyOCwgMTMwLCAxMiwgMTMsIDIyOCwgMTI5LCAxMiwgMTMsIDIyOCwgMTI4LCAxMiwgMTMsIDIyOCwgMTI3LCAxMiwgMTMsIAorICAgIDIyOCwgMTI2LCAxMiwgMTMsIDIyOCwgMTI1LCAxMiwgMTMsIDIyOCwgMTI0LCAxMiwgMTMsIDIyOCwgMTIzLCAxMiwgMTMsIAorICAgIDIyOCwgMTIyLCAxMiwgMTMsIDIyOCwgMTIxLCAxMiwgMTMsIDIyOCwgMTIwLCAxMiwgMTMsIDIyOCwgMTE5LCAxMiwgMTMsIAorICAgIDIyOCwgMTE4LCAxMiwgMTMsIDIyNywgMjQxLCAxMiwgMTMsIDIyNywgMjQwLCAxMiwgMTMsIDIyNywgMjM5LCAxMiwgMTMsIAorICAgIDIyNywgMjM4LCAxMiwgMTMsIDIyNywgMjM3LCAxMiwgMTMsIDIyNywgMjM2LCAxMiwgMTMsIDIyNywgMjM1LCAxMiwgMTMsIAorICAgIDIyNywgMjM0LCAxMiwgMTMsIDIyNywgMjMzLCAxMiwgMTMsIDIyNywgMjMyLCAxMiwgMTMsIDIyNywgMjMxLCAxMiwgMTMsIAorICAgIDIyNywgMjMwLCAxMiwgMTMsIDIyNywgMjI5LCAxMiwgMTMsIDIyNywgMjI4LCAxMiwgMTMsIDIyNywgMjI3LCAxMiwgMTMsIAorICAgIDIyNywgMjI2LCAxMiwgMTMsIDIyNywgMjI1LCAxMiwgMTMsIDIyNywgMjI0LCAxMiwgMTMsIDIyNywgMjIzLCAxMiwgMTMsIAorICAgIDIyNywgMjIyLCAxMiwgMTMsIDIyNywgMjIxLCAxMiwgMTMsIDIyNywgMjIwLCAxMiwgMTMsIDIyNywgMjE5LCAxMiwgMTMsIAorICAgIDIyNywgMjE4LCAxMiwgMTMsIDIyNywgMjE3LCAxMiwgMTMsIDIyNywgMjE2LCAxMiwgMTMsIDIyNywgODAsIDEyLCAxMywgCisgICAgMjI3LCA3OSwgMTIsIDEzLCAyMjcsIDc4LCAxMiwgMTMsIDIyNywgNzcsIDEyLCAxMywgMjI3LCA3NiwgMTIsIDEzLCAyMjcsIAorICAgIDc1LCAxMiwgMTMsIDIyNywgNzQsIDEyLCAxMywgMjI3LCA3MywgMTIsIDEzLCAyMjcsIDcyLCAxMiwgMTMsIDIyNywgNzEsIAorICAgIDEyLCAxMywgMjI3LCA3MCwgMTIsIDEzLCAyMjcsIDY5LCAxMiwgMTMsIDIyNywgNjgsIDEyLCAxMywgMjI3LCA2NywgMTIsIAorICAgIDEzLCAyMjcsIDY2LCAxMiwgMTMsIDIyNywgNjUsIDEyLCAxMywgMjI3LCA2NCwgMTIsIDEzLCAyMjcsIDYzLCAxMiwgMTMsIAorICAgIDIyNywgNjIsIDEyLCAxMywgMjI3LCA2MSwgMTIsIDEzLCAyMjcsIDYwLCAxMiwgMTMsIDIyNywgNTksIDEyLCAxMywgMjI3LCAKKyAgICA1OCwgMTIsIDEzLCAyMjcsIDU3LCAxMiwgMTMsIDIyNywgNTYsIDEyLCAxMywgMjI3LCA1NSwgMTIsIDEzLCAyMjcsIDU0LCAKKyAgICAxMiwgMTMsIDIyNywgNTMsIDEyLCAxMywgMjI3LCA1MiwgMTIsIDEzLCAyMjcsIDUxLCAxMiwgMTMsIDIyNywgNTAsIDEyLCAKKyAgICAxMywgMjI3LCA0OSwgMTIsIDEzLCAyMjcsIDQ4LCAxMiwgMTMsIDIyNywgNDcsIDEyLCAxMywgMjI3LCA0NiwgMTIsIDEzLCAKKyAgICAyMjcsIDQ1LCAxMiwgMTMsIDIyNywgNDQsIDEyLCAxMywgMjI3LCA0MywgMTIsIDEzLCAyMjcsIDQyLCAxMiwgMTMsIDIyNywgCisgICAgNDEsIDEyLCAxMywgMjI3LCA0MCwgMTIsIDEzLCAyMjcsIDM5LCAxMiwgMTMsIDIyNywgMzgsIDEyLCAxMywgMjI3LCAzNywgCisgICAgMTIsIDEzLCAyMjcsIDM2LCAxMiwgMTMsIDIyNywgMzUsIDEyLCAxMywgMjI3LCAzNCwgMTIsIDEzLCAyMjcsIDMzLCAxMiwgCisgICAgMTMsIDIyNywgMzIsIDEyLCAxMywgMjI3LCAzMSwgMTIsIDEzLCAyMjcsIDMwLCAxMiwgMTMsIDIyNywgMjksIDEyLCAxMywgCisgICAgMjI3LCAyOCwgMTIsIDEzLCAyMjcsIDI3LCAxMiwgMTMsIDIyNywgMjYsIDEyLCAxMywgMjI3LCAyNSwgMTIsIDEzLCAyMjcsIAorICAgIDI0LCAxMiwgMTMsIDIyNywgMjMsIDEyLCAxMywgMjI3LCAyMiwgMTIsIDEzLCAyMjcsIDIxLCAxMiwgMTMsIDIyNywgMjAsIAorICAgIDEyLCAxMywgMjI3LCAxOSwgMTIsIDEzLCAyMjcsIDE4LCAxMiwgMTMsIDIyNywgMTcsIDEyLCAxMywgMjI3LCAxNiwgMTIsIAorICAgIDEzLCAyMjcsIDE1LCAxMiwgMTMsIDIyNywgMTQsIDEyLCAxMywgMjI3LCAxMywgMTIsIDEzLCAyMjcsIDEyLCAxMiwgMTMsIAorICAgIDIyNywgMTEsIDEyLCAxMywgMjI3LCAxMCwgMTIsIDEzLCAyMjcsIDksIDEyLCAxMywgMjI3LCA4LCAxMiwgMTMsIDIyNywgNywgCisgICAgMTIsIDEzLCAyMjcsIDYsIDEyLCAxMywgMjI2LCAxMDgsIDEyLCAxMywgMjI2LCAxMDcsIDEyLCAxMywgMjI2LCAxMDYsIDEyLCAKKyAgICAxMywgMjI2LCAxMDUsIDEyLCAxMywgMjI2LCAxMDQsIDEyLCAxMywgMjI2LCAxMDMsIDEyLCAxMywgMjI2LCAxMDIsIDEyLCAKKyAgICAxMywgMjI2LCAxMDEsIDEyLCAxMywgMjI2LCAxMDAsIDEyLCAxMywgMjI2LCA5OSwgMTIsIDEzLCAyMjYsIDk4LCAxMiwgMTMsIAorICAgIDIyNiwgOTcsIDEyLCAxMywgMjI2LCA5NiwgMTIsIDEzLCAyMjQsIDk4LCAxMiwgMTMsIDIyNCwgOTcsIDEyLCAxMywgMjI0LCAKKyAgICA5NiwgMTIsIDEzLCAyMjQsIDk1LCAxMiwgMTMsIDIyNCwgOTQsIDEyLCAxMywgMjI0LCA5MywgMTIsIDEzLCAyMjQsIDkyLCAKKyAgICAxMiwgMTMsIDIyMywgMjI1LCAxMiwgMTMsIDIyMywgMjI0LCAxMiwgMTMsIDIyMywgMjIzLCAxMiwgMTMsIDIyMywgMjIyLCAKICAgICAxMiwgMTMsIDIyMywgMjIxLCAxMiwgMTMsIDIyMywgMjIwLCAxMiwgMTMsIDIyMywgMjE5LCAxMiwgMTMsIDIyMywgMjE4LCAKICAgICAxMiwgMTMsIDIyMywgMjE3LCAxMiwgMTMsIDIyMywgMjE2LCAxMiwgMTMsIDIyMywgMjE1LCAxMiwgMTMsIDIyMywgMjE0LCAKICAgICAxMiwgMTMsIDIyMywgMjEzLCAxMiwgMTMsIDIyMywgMjEyLCAxMiwgMTMsIDIyMywgMjExLCAxMiwgMTMsIDIyMywgMjEwLCAKQEAgLTEyMDk3LDE3MjYgKzEyMDk3LDE3NDMgQEAKICAgICAxMiwgMTMsIDIyMywgMjA1LCAxMiwgMTMsIDIyMywgMjA0LCAxMiwgMTMsIDIyMywgMjAzLCAxMiwgMTMsIDIyMywgMjAyLCAKICAgICAxMiwgMTMsIDIyMywgMjAxLCAxMiwgMTMsIDIyMywgMjAwLCAxMiwgMTMsIDIyMywgMTk5LCAxMiwgMTMsIDIyMywgMTk4LCAKICAgICAxMiwgMTMsIDIyMywgMTk3LCAxMiwgMTMsIDIyMywgMTk2LCAxMiwgMTMsIDIyMywgMTk1LCAxMiwgMTMsIDIyMywgMTk0LCAKLSAgICAxMiwgMTMsIDIyMywgMTkzLCAxMiwgMTMsIDIyMywgMTkyLCAxMiwgMTMsIDIyMywgMTkxLCAxMiwgMTMsIDIyMywgMTkwLCAKLSAgICAxMiwgMTMsIDIyMywgMTg5LCAxMiwgMTMsIDIyMiwgODgsIDEyLCAxMywgMjIyLCA4NywgMTIsIDEzLCAyMjIsIDg2LCAxMiwgCi0gICAgMTMsIDIyMiwgODUsIDEyLCAxMywgMjIyLCA4NCwgMTIsIDEzLCAyMjIsIDgzLCAxMiwgMTMsIDIyMiwgODIsIDEyLCAxMywgCi0gICAgMjIyLCA4MSwgMTIsIDEzLCAyMjIsIDgwLCAxMiwgMTMsIDIyMiwgNzksIDEyLCAxMywgMjIyLCA3OCwgMTIsIDEzLCAyMjIsIAotICAgIDc3LCAxMiwgMTMsIDIyMiwgNzYsIDEyLCAxMywgMjIyLCA3NSwgMTIsIDEzLCAyMjIsIDc0LCAxMiwgMTMsIDIyMiwgNzMsIAotICAgIDEyLCAxMywgMjIyLCA3MiwgMTIsIDEzLCAyMjIsIDcxLCAxMiwgMTMsIDIyMiwgNzAsIDEyLCAxMywgMjIyLCA2OSwgMTIsIAotICAgIDEzLCAyMjIsIDY4LCAxMiwgMTMsIDIyMiwgNjcsIDEyLCAxMywgMjIyLCA2NiwgMTIsIDEzLCAyMjIsIDY1LCAxMiwgMTMsIAotICAgIDIyMiwgNjQsIDEyLCAxMywgMjIyLCA2MywgMTIsIDEzLCAyMjIsIDYyLCAxMiwgMTMsIDIyMiwgNjEsIDEyLCAxMywgMjIyLCAKLSAgICA2MCwgMTIsIDEzLCAyMjIsIDU5LCAxMiwgMTMsIDIyMiwgNTgsIDEyLCAxMywgMjIyLCA1NywgMTIsIDEzLCAyMjIsIDU2LCAKLSAgICAxMiwgMTMsIDIyMiwgNTUsIDEyLCAxMywgMjIyLCA1NCwgMTIsIDEzLCAyMjIsIDUzLCAxMiwgMTMsIDIyMiwgNTIsIDEyLCAKLSAgICAxMywgMjIyLCA1MSwgMTIsIDEzLCAyMjIsIDUwLCAxMiwgMTMsIDIyMiwgNDksIDEyLCAxMywgMjIyLCA0OCwgMTIsIDEzLCAKLSAgICAyMjIsIDQ3LCAxMiwgMTMsIDIyMiwgNDYsIDEyLCAxMywgMjIyLCA0NSwgMTIsIDEzLCAyMjIsIDQ0LCAxMiwgMTMsIDIyMiwgCi0gICAgNDMsIDEyLCAxMywgMjIyLCA0MiwgMTIsIDEzLCAyMjIsIDQxLCAxMiwgMTMsIDIyMiwgNDAsIDEyLCAxMywgMjIyLCAzOSwgCi0gICAgMTIsIDEzLCAyMjIsIDM4LCAxMiwgMTMsIDIyMiwgMzcsIDEyLCAxMywgMjIyLCAzNiwgMTIsIDEzLCAyMjIsIDM1LCAxMiwgCi0gICAgMTMsIDIxNywgMTUwLCAxMiwgMTMsIDIxNywgMTQ5LCAxMiwgMTMsIDIxNywgMTQ4LCAxMiwgMTMsIDIxNywgMTQ3LCAxMiwgCi0gICAgMTMsIDIxNywgMTQ2LCAxMiwgMTMsIDIxNywgMTQ1LCAxMiwgMTMsIDIxNywgMTQ0LCAxMiwgMTMsIDIxNywgMTQzLCAxMiwgCi0gICAgMTMsIDIxNywgMTQyLCAxMiwgMTMsIDIxNywgMTQxLCAxMiwgMTMsIDIxNywgMTQwLCAxMiwgMTMsIDIxNywgMTM5LCAxMiwgCi0gICAgMTMsIDIxNywgMTM4LCAxMiwgMTMsIDIxNywgMTM3LCAxMiwgMTMsIDIxNywgMTM2LCAxMiwgMTMsIDIxNywgMTM1LCAxMiwgCi0gICAgMTMsIDIxNywgMTM0LCAxMiwgMTMsIDIxNywgMTMzLCAxMiwgMTMsIDIxNywgMTMyLCAxMiwgMTMsIDIxNywgMTMxLCAxMiwgCi0gICAgMTMsIDIxNywgMTMwLCAxMiwgMTMsIDIxNywgMTI5LCAxMiwgMTMsIDIxNywgMTI4LCAxMiwgMTMsIDIxNywgMTI3LCAxMiwgCi0gICAgMTMsIDIxNywgMTI2LCAxMiwgMTMsIDIxNywgMTI1LCAxMiwgMTMsIDIxNywgMTI0LCAxMiwgMTMsIDIxNywgMTIzLCAxMiwgCi0gICAgMTMsIDIxNywgMTIyLCAxMiwgMTMsIDIxNywgMTIxLCAxMiwgMTMsIDIxNywgMTIwLCAxMiwgMTMsIDIxNywgMTE5LCAxMiwgCi0gICAgMTMsIDIxNywgMTE4LCAxMiwgMTMsIDIxNywgMTE3LCAxMiwgMTMsIDIxNywgMTE2LCAxMiwgMTMsIDIxNywgMTE1LCAxMiwgCi0gICAgMTMsIDIxNywgMTE0LCAxMiwgMTMsIDIxNywgMTEzLCAxMiwgMTMsIDIxNywgMTEyLCAxMiwgMTMsIDIxNywgMTExLCAxMiwgCi0gICAgMTMsIDIxNywgMTEwLCAxMiwgMTMsIDIxNywgMTA5LCAxMiwgMTMsIDIxNywgMTA4LCAxMiwgMTMsIDIxNywgMTA3LCAxMiwgCi0gICAgMTMsIDIxNSwgMjIsIDEyLCAxMywgMjE1LCAyMSwgMTIsIDEzLCAyMTUsIDIwLCAxMiwgMTMsIDIxNSwgMTksIDEyLCAxMywgCi0gICAgMjE1LCAxOCwgMTIsIDEzLCAyMTUsIDE3LCAxMiwgMTMsIDIxNSwgMTYsIDEyLCAxMywgMjE1LCAxNSwgMTIsIDEzLCAyMTUsIAotICAgIDE0LCAxMiwgMTMsIDIxNSwgMTMsIDEyLCAxMywgMjE1LCAxMiwgMTIsIDEzLCAyMTUsIDExLCAxMiwgMTMsIDIxNSwgMTAsIAotICAgIDEyLCAxMywgMjE1LCA5LCAxMiwgMTMsIDIxNSwgOCwgMTIsIDEzLCAyMTUsIDcsIDEyLCAxMywgMjE1LCA2LCAxMiwgMTMsIAotICAgIDIxNSwgNSwgMTIsIDEzLCAyMTUsIDQsIDEyLCAxMywgMjE1LCAzLCAxMiwgMTMsIDIxNSwgMiwgMTIsIDEzLCAyMTUsIDEsIAotICAgIDEyLCAxMywgMjE1LCAwLCAxMiwgMTMsIDIxNCwgMjU1LCAxMiwgMTMsIDIxNCwgMjU0LCAxMiwgMTMsIDIxNCwgMjUzLCAxMiwgCi0gICAgMTMsIDIxNCwgMjUyLCAxMiwgMTMsIDIxNCwgMjUxLCAxMiwgMTMsIDIxNCwgMjUwLCAxMiwgMTMsIDIxNCwgMjQ5LCAxMiwgCi0gICAgMTMsIDIxNCwgMjQ4LCAxMiwgMTMsIDIxNCwgMjQ3LCAxMiwgMTMsIDIxNCwgMjQ2LCAxMiwgMTMsIDIxNCwgMjQ1LCAxMiwgCi0gICAgMTMsIDIxNCwgMjQ0LCAxMiwgMTMsIDIxNCwgMjQzLCAxMiwgMTMsIDIxNCwgMjQyLCAxMiwgMTMsIDIxNCwgMjQxLCAxMiwgCi0gICAgMTMsIDIxNCwgMjQwLCAxMiwgMTMsIDIxNCwgMjM5LCAxMiwgMTMsIDIxNCwgMjM4LCAxMiwgMTMsIDIxNCwgMjM3LCAxMiwgCi0gICAgMTMsIDIxNCwgMjM2LCAxMiwgMTMsIDIxNCwgMjM1LCAxMiwgMTMsIDIxNCwgMjM0LCAxMiwgMTMsIDIxNCwgMjMzLCAxMiwgCi0gICAgMTMsIDIxNCwgMjMyLCAxMiwgMTMsIDIxNCwgMTA0LCAxMiwgMTMsIDIxNCwgMTAzLCAxMiwgMTMsIDIxNCwgMTAyLCAxMiwgCi0gICAgMTMsIDIxNCwgMTAxLCAxMiwgMTMsIDIxNCwgMTAwLCAxMiwgMTMsIDIxNCwgOTksIDEyLCAxMywgMjE0LCA5OCwgMTIsIDEzLCAKLSAgICAyMTQsIDk3LCAxMiwgMTMsIDIxNCwgOTYsIDEyLCAxMywgMjE0LCA5NSwgMTIsIDEzLCAyMTQsIDk0LCAxMiwgMTMsIDIxNCwgCi0gICAgOTMsIDEyLCAxMywgMjE0LCA5MiwgMTIsIDEzLCAyMTQsIDkxLCAxMiwgMTMsIDIxNCwgOTAsIDEyLCAxMywgMjE0LCA4OSwgCi0gICAgMTIsIDEzLCAyMTQsIDg4LCAxMiwgMTMsIDIxNCwgODcsIDEyLCAxMywgMjE0LCA4NiwgMTIsIDEzLCAyMTQsIDg1LCAxMiwgCi0gICAgMTMsIDIxNCwgODQsIDEyLCAxMywgMjE0LCA4MywgMTIsIDEzLCAyMTQsIDgyLCAxMiwgMTMsIDIxNCwgODEsIDEyLCAxMywgCi0gICAgMjE0LCA4MCwgMTIsIDEzLCAyMTQsIDc5LCAxMiwgMTMsIDIxNCwgNzgsIDEyLCAxMywgMjE0LCA3NywgMTIsIDEzLCAyMTQsIAotICAgIDc2LCAxMiwgMTMsIDIxNCwgNzUsIDEyLCAxMywgMjE0LCA3NCwgMTIsIDEzLCAyMTQsIDczLCAxMiwgMTMsIDIxNCwgNzIsIAotICAgIDEyLCAxMywgMjE0LCA3MSwgMTIsIDEzLCAyMTQsIDcwLCAxMiwgMTMsIDIxNCwgNjksIDEyLCAxMywgMjE0LCA2OCwgMTIsIAotICAgIDEzLCAyMTQsIDY3LCAxMiwgMTMsIDIxNCwgNjYsIDEyLCAxMywgMjE0LCA2NSwgMTIsIDEzLCAyMTQsIDY0LCAxMiwgMTMsIAotICAgIDIxNCwgNjMsIDEyLCAxMywgMjE0LCA2MiwgMTIsIDEzLCAyMTQsIDYxLCAxMiwgMTMsIDIxNCwgNjAsIDEyLCAxMywgMjE0LCAKLSAgICA1OSwgMTIsIDEzLCAyMTQsIDU4LCAxMiwgMTMsIDIxNCwgNTcsIDEyLCAxMywgMjE0LCA1NiwgMTIsIDEzLCAyMTQsIDU1LCAKLSAgICAxMiwgMTMsIDIxNCwgNTQsIDEyLCAxMywgMjE0LCA1MywgMTIsIDEzLCAyMTQsIDUyLCAxMiwgMTMsIDIxNCwgNTEsIDEyLCAKLSAgICAxMywgMjE0LCA1MCwgMTIsIDEzLCAyMTQsIDQ5LCAxMiwgMTMsIDIxNCwgNDgsIDEyLCAxMywgMjE0LCA0NywgMTIsIDEzLCAKLSAgICAyMTQsIDQ2LCAxMiwgMTMsIDIxNCwgNDUsIDEyLCAxMywgMjE0LCA0NCwgMTIsIDEzLCAyMTQsIDQzLCAxMiwgMTMsIDIxNCwgCi0gICAgNDIsIDEyLCAxMywgMjE0LCA0MSwgMTIsIDEzLCAyMTQsIDQwLCAxMiwgMTMsIDIxNCwgMzksIDEyLCAxMywgMjE0LCAzOCwgCi0gICAgMTIsIDEzLCAyMTQsIDM3LCAxMiwgMTMsIDIxNCwgMzYsIDEyLCAxMywgMjE0LCAzNSwgMTIsIDEzLCAyMTQsIDM0LCAxMiwgCi0gICAgMTMsIDIxNCwgMzMsIDEyLCAxMywgMjE0LCAzMiwgMTIsIDEzLCAyMTQsIDMxLCAxMiwgMTMsIDIxNCwgMzAsIDEyLCAxMywgCi0gICAgMjE0LCAyOSwgMTIsIDEzLCAyMTQsIDI4LCAxMiwgMTMsIDIxMiwgOTcsIDEyLCAxMywgMjEyLCA5NiwgMTIsIDEzLCAyMTIsIAotICAgIDk1LCAxMiwgMTMsIDIxMiwgOTQsIDEyLCAxMywgMjEyLCA5MywgMTIsIDEzLCAyMTIsIDkyLCAxMiwgMTMsIDIxMiwgOTEsIAotICAgIDEyLCAxMywgMjEyLCA5MCwgMTIsIDEzLCAyMTIsIDg5LCAxMiwgMTMsIDIxMiwgODgsIDEyLCAxMywgMjEyLCA4NywgMTIsIAotICAgIDEzLCAyMTIsIDg2LCAxMiwgMTMsIDIxMiwgODUsIDEyLCAxMywgMjEyLCA4NCwgMTIsIDEzLCAyMTIsIDgzLCAxMiwgMTMsIAotICAgIDIxMiwgODIsIDEyLCAxMywgMjEyLCA4MSwgMTIsIDEzLCAyMTIsIDgwLCAxMiwgMTMsIDIxMiwgNzksIDEyLCAxMywgMjEyLCAKLSAgICA3OCwgMTIsIDEzLCAyMTIsIDc3LCAxMiwgMTMsIDIxMiwgNzYsIDEyLCAxMywgMjEyLCA3NSwgMTIsIDEzLCAyMTIsIDc0LCAKLSAgICAxMiwgMTMsIDIxMiwgNzMsIDEyLCAxMywgMjEyLCA3MiwgMTIsIDEzLCAyMTIsIDcxLCAxMiwgMTMsIDIxMiwgNzAsIDEyLCAKLSAgICAxMywgMjEyLCA2OSwgMTIsIDEzLCAyMTIsIDY4LCAxMiwgMTMsIDIxMiwgNjcsIDEyLCAxMywgMjEyLCA2NiwgMTIsIDEzLCAKLSAgICAyMTEsIDE3NywgMTIsIDEzLCAyMTEsIDE3NiwgMTIsIDEzLCAyMTEsIDE3NSwgMTIsIDEzLCAyMTEsIDE3NCwgMTIsIDEzLCAKLSAgICAyMTEsIDE3MywgMTIsIDEzLCAyMTEsIDE3MiwgMTIsIDEzLCAyMTEsIDE3MSwgMTIsIDEzLCAyMTEsIDE3MCwgMTIsIDEzLCAKLSAgICAyMTEsIDE2OSwgMTIsIDEzLCAyMTEsIDE2OCwgMTIsIDEzLCAyMTEsIDE2NywgMTIsIDEzLCAyMTEsIDE2NiwgMTIsIDEzLCAKLSAgICAyMTEsIDExNSwgMTIsIDEzLCAyMTEsIDExNCwgMTIsIDEzLCAyMTEsIDExMywgMTIsIDEzLCAyMTEsIDExMiwgMTIsIDEzLCAKLSAgICAyMTEsIDExMSwgMTIsIDEzLCAyMTEsIDExMCwgMTIsIDEzLCAyMTEsIDEwOSwgMTIsIDEzLCAyMTEsIDEwOCwgMTIsIDEzLCAKLSAgICAyMTEsIDEwNywgMTIsIDEzLCAyMTAsIDE1OCwgMTIsIDEzLCAyMTAsIDE1NywgMTIsIDEzLCAyMTAsIDE1NiwgMTIsIDEzLCAKLSAgICAyMTAsIDE1NSwgMTIsIDEzLCAyMTAsIDE1NCwgMTIsIDEzLCAyMTAsIDE1MywgMTIsIDEzLCAyMTAsIDE1MiwgMTIsIDEzLCAKLSAgICAyMTAsIDE1MSwgMTIsIDEzLCAyMTAsIDE1MCwgMTIsIDEzLCAyMTAsIDE0OSwgMTIsIDEzLCAyMTAsIDE0OCwgMTIsIDEzLCAKLSAgICAyMTAsIDE0NywgMTIsIDEzLCAyMTAsIDE0NiwgMTIsIDEzLCAyMTAsIDE0NSwgMTIsIDEzLCAyMTAsIDE0NCwgMTIsIDEzLCAKLSAgICAyMTAsIDE0MywgMTIsIDEzLCAyMTAsIDE0MiwgMTIsIDEzLCAyMTAsIDE0MSwgMTIsIDEzLCAyMTAsIDE0MCwgMTIsIDEzLCAKLSAgICAyMTAsIDEzOSwgMTIsIDEzLCAyMTAsIDEzOCwgMTIsIDEzLCAyMTAsIDEzNywgMTIsIDEzLCAyMTAsIDEzNiwgMTIsIDEzLCAKLSAgICAyMTAsIDEzNSwgMTIsIDEzLCAyMTAsIDEzNCwgMTIsIDEzLCAyMTAsIDEzMywgMTIsIDEzLCAyMTAsIDEzMiwgMTIsIDEzLCAKLSAgICAyMTAsIDEzMSwgMTIsIDEzLCAyMTAsIDEzMCwgMTIsIDEzLCAyMTAsIDEyOSwgMTIsIDEzLCAyMTAsIDEyOCwgMTIsIDEzLCAKLSAgICAyMTAsIDEyNywgMTIsIDEzLCAyMTAsIDEyNiwgMTIsIDEzLCAyMTAsIDEyNSwgMTIsIDEzLCAyMTAsIDEyNCwgMTIsIDEzLCAKLSAgICAyMTAsIDEyMywgMTIsIDEzLCAyMTAsIDEyMiwgMTIsIDEzLCAyMTAsIDEyMSwgMTIsIDEzLCAyMTAsIDEyMCwgMTIsIDEzLCAKLSAgICAyMTAsIDExOSwgMTIsIDEzLCAyMTAsIDExOCwgMTIsIDEzLCAyNTUsIDcyLCAxMiwgMTMsIDI1NSwgNzEsIDEyLCAxMywgCi0gICAgMjU1LCA3MCwgMTIsIDEzLCAyNTUsIDY5LCAxMiwgMTMsIDI1NSwgNjgsIDEyLCAxMywgMjU1LCA2NywgMTIsIDEzLCAyNTUsIAotICAgIDY2LCAxMiwgMTMsIDI1NSwgNjUsIDEyLCAxMywgMjU1LCA2NCwgMTIsIDEzLCAyNTUsIDYzLCAxMiwgMTMsIDI1NSwgNjIsIAotICAgIDEyLCAxMywgMjU1LCA2MSwgMTIsIDEzLCAyNTUsIDYwLCAxMiwgMTMsIDI1NSwgNTksIDEyLCAxMywgMjU1LCA1OCwgMTIsIAotICAgIDEzLCAyNTUsIDU3LCAxMiwgMTMsIDI1NSwgNTYsIDEyLCAxMywgMjU1LCA1NSwgMTIsIDEzLCAyNTUsIDU0LCAxMiwgMTMsIAotICAgIDI1NSwgNTMsIDEyLCAxMywgMjU1LCA1MiwgMTIsIDEzLCAyNTUsIDUxLCAxMiwgMTMsIDI1NSwgNTAsIDEyLCAxMywgMjU1LCAKLSAgICA0OSwgMTIsIDEzLCAyNTUsIDQ4LCAxMiwgMTMsIDI1NSwgNDcsIDEyLCAxMywgMjU1LCA0NiwgMTIsIDEzLCAyNTUsIDQ1LCAKLSAgICAxMiwgMTMsIDI1NSwgNDQsIDEyLCAxMywgMjU1LCA0MywgMTIsIDEzLCAyNTUsIDQyLCAxMiwgMTMsIDI1NSwgNDEsIDEyLCAKLSAgICAxMywgMjU1LCA0MCwgMTIsIDEzLCAyNTUsIDM5LCAyMCwgMSwgMTY3LCAyMjksIDEyLCAyMzEsIDE2LCAyMCwgMSwgMTY3LCAKLSAgICAyNDMsIDcwLCAyNDQsIDM2LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjMxLCAxNywgMjI1LCA1NywgMjAsIDEsIDE2NywgCi0gICAgMjI0LCAyNTEsIDIzMSwgMTcsIDIyNSwgNTgsIDIwLCAxLCAxNjcsIDIyOSwgMjI2LCAyMzEsIDE2LCAyMCwgMSwgMTY3LCAKLSAgICAyMTksIDIyMSwgMjAsIDEsIDE2NywgMjE2LCA2NiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgMjI3LCAxMTgsIDIzMSwgMTYsIAotICAgIDIwLCAxLCAxNjcsIDIyMCwgMTksIDIyNiwgOTAsIDIyOCwgMTY5LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjI2LCA5MCwgCi0gICAgMjI4LCAxNzAsIDIyNSwgNTcsIDIwLCAxLCAxNjcsIDIyNCwgMjUxLCAyMjYsIDkwLCAyMjgsIDE3MCwgMjI1LCA1OCwgMjAsIAotICAgIDEsIDE2NywgMjMxLCAyMTgsIDIwLCAxLCAxNjcsIDIxNSwgMTE5LCAyMzEsIDIxOSwgMjAsIDEsIDE2NywgMjI5LCA3MSwgCi0gICAgMjAsIDEsIDE2NywgMjMxLCAyMTUsIDIwLCAxLCAxNjcsIDIzMSwgMTc2LCAyMCwgMSwgMTY3LCAyMzAsIDQ4LCAyMCwgMSwgCi0gICAgMTY3LCAyMjAsIDEyNCwgMjAsIDEsIDE2NywgMjI3LCAyNDEsIDIwLCAxLCAxNjcsIDIzNCwgMTQ5LCAyMCwgMSwgMTY3LCAKLSAgICAyMjgsIDEzOCwgMjAsIDEsIDE2NywgMjE4LCA0LCAyMCwgMSwgMTY3LCAyMjksIDExLCAyMCwgMSwgMTY3LCAyMzMsIDg3LCAKLSAgICAyMCwgMSwgMTY3LCAyMzMsIDEyLCAyMzMsIDE4OSwgMjAsIDEsIDE2NywgMjI3LCAyNDgsIDIzMSwgMjQsIDIwLCAxLCAxNjcsIAotICAgIDIzMSwgMjIyLCAyMCwgMSwgMTY3LCAyMjUsIDI0NiwgMjAsIDEsIDE2NywgMjQyLCAyMzEsIDIwLCAxLCAxNjcsIDIyNiwgCi0gICAgNTAsIDIwLCAxLCAxNjcsIDIzMCwgMTUxLCAyMjksIDQ1LCAyMCwgMSwgMTY3LCAyMjcsIDk5LCAyMzEsIDI3LCAyMCwgMSwgCi0gICAgMTY3LCAxMDQsIDIxMCwgMTg4LCAyMjksIDIyMCwgMjAsIDEsIDE2NywgMjQyLCAyMzIsIDIwLCAxLCAxNjcsIDIyNywgMjQ4LCAKLSAgICAyMjcsIDI0OSwgMjAsIDEsIDE2NywgMjE5LCAxMjgsIDIwLCAxLCAxNjcsIDIzMSwgOSwgMjAsIDEsIDE2NywgMjMxLCAzMCwgCi0gICAgMjAsIDEsIDE2NywgMjMwLCAxMzAsIDIwLCAxLCAxNjcsIDIzNCwgMjQ5LCAyMCwgMSwgMTY3LCAyMjYsIDkwLCAyMzMsIDQ3LCAKLSAgICAyMCwgMSwgMTY3LCAyMjksIDE0OSwgMjMzLCA0NywgMjAsIDEsIDE2NywgMjI1LCAxNTgsIDIwLCAxLCAxNjcsIDIzMSwgCi0gICAgMjE2LCAyMCwgMSwgMTY3LCAyMjgsIDIwNywgMjAsIDEsIDE2NywgMjI0LCAxMzQsIDIwLCAxLCAxNjcsIDIxNSwgMTE2LCAKLSAgICAyMCwgMSwgMTY3LCAyMzIsIDk0LCAyMCwgMSwgMTY3LCAyMTksIDQxLCAyMCwgMSwgMTY3LCAyMTYsIDIxNiwgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMTMsIDIwLCAxLCAxNjcsIDIzNCwgMTU2LCAyMCwgMSwgMTY3LCAyMjksIDE0NSwgMjAsIDEsIDE2NywgCi0gICAgMjMzLCAyMDEsIDIwLCAxLCAxNjcsIDIzMCwgMTMxLCAyMCwgMSwgMTY3LCAyMTksIDIxOCwgMjAsIDEsIDE2NywgMjMyLCAKLSAgICAxMzgsIDIwLCAxLCAxNjcsIDI0NCwgOTMsIDIwLCAxLCAxNjcsIDIyMiwgMTk5LCAyMCwgMSwgMTY3LCAyMzMsIDI0MSwgMjAsIAotICAgIDEsIDE2NywgMjE5LCAzNywgMjAsIDEsIDE2NywgMjMxLCAxNzMsIDIyNSwgOTksIDIwLCAxLCAxNjcsIDIyMCwgMTIsIDIwLCAKLSAgICAxLCAxNjcsIDIyNywgMjQ3LCAyMCwgMSwgMTY3LCAyMTksIDI1MywgMjI4LCAyLCAyMTAsIDE5NiwgMjAsIDEsIDE2NywgCi0gICAgMjI3LCAxMzgsIDIzMCwgMTQ4LCAyMCwgMSwgMTY3LCAyMjYsIDg1LCAyMCwgMSwgMTY3LCAyMjgsIDEzOSwgMjAsIDEsIAotICAgIDE2NywgMjE0LCAxNzAsIDIwLCAxLCAxNjcsIDIyOSwgNDgsIDIwLCAxLCAxNjcsIDIzMSwgMjEyLCAyMCwgMSwgMTY3LCAKLSAgICAyMjgsIDE4MSwgMjAsIDEsIDE2NywgMjMxLCAxMTksIDIwLCAxLCAxNjcsIDIyNywgMTUxLCAyMCwgMSwgMTY3LCAyMTYsIAotICAgIDIyMCwgMjAsIDEsIDE2NywgMjE5LCAzNCwgMjAsIDEsIDE2NywgMjI2LCA4NiwgMjAsIDEsIDE2NywgMjI4LCA2LCAyMCwgMSwgCi0gICAgMTY3LCAyMzEsIDIyMCwgMjAsIDEsIDE2NywgMjI3LCAxNDgsIDIwLCAxLCAxNjcsIDIzNCwgMjE2LCAyMCwgMSwgMTY3LCAKLSAgICAyMjgsIDksIDIwLCAxLCAxNjcsIDIxMywgMjUwLCAyMCwgMSwgMTY3LCAyMzIsIDk4LCAyMCwgMSwgMTY3LCAyMjksIDk4LCAKLSAgICAyMCwgMSwgMTY3LCAyMjksIDE5NiwgMjAsIDEsIDE2NywgMjMxLCAxMTgsIDIwLCAxLCAyMjUsIDEzOCwgMjI4LCA0LCAyMCwgCi0gICAgMSwgMjI1LCAxMzgsIDIxNSwgMTE5LCAyMzEsIDIxNywgMjAsIDEsIDIyNSwgMTM4LCAyMTksIDE4NSwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMjAsIDEyOCwgMjE1LCAxMTgsIDIwLCAxLCAyMjUsIDEzOCwgMjMyLCAxNDAsIDIyNywgMjQ0LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIzMSwgMTI1LCAyMzEsIDIyMSwgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDg3LCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgCi0gICAgMTUsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxMjAsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAyMzcsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjI1LCAyMDgsIDIwLCAxLCAyMjUsIDEzOCwgMjExLCA4OSwgMjMzLCA0NywgMjAsIDEsIDIyNSwgMTM4LCAyMzMsIAotICAgIDEwMywgMjI4LCAyLCAyMjcsIDE2MCwgMjAsIDEsIDIyNSwgMTM4LCAyMjcsIDI0MiwgMjIwLCAzOCwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMjksIDExNiwgMjI4LCAxODQsIDIwLCAxLCAyMjUsIDEzOCwgMjQyLCAyMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI1LCAKLSAgICA0OSwgMjAsIDEsIDIyNSwgMTM4LCAyMTUsIDExOSwgMjI4LCAwLCAyMCwgMSwgMjI1LCAxMzgsIDIyMCwgNDMsIDIyOCwgCi0gICAgMTc5LCAyMCwgMSwgMjI1LCAxMzgsIDIyMCwgMzksIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxNywgMjE2LCAyMTksIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjMxLCAxMDcsIDIzMSwgMTIxLCAyMCwgMSwgMjI1LCAxMzgsIDIyNywgMTQ5LCAyMjcsIDI0NCwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyMzQsIDE0NSwgMjAsIDEsIDIyNSwgMTM4LCAyNDIsIDIzMCwgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDE0MSwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMzMsIDEyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjUsIDI0OSwgMjAsIDEsIDIyNSwgMTM4LCAKLSAgICAyMTMsIDE4MiwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDEzLCAyMzAsIDQ2LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgNDcsIAotICAgIDIzMSwgMTAzLCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgMTkzLCAyMCwgMSwgMjI1LCAxMzgsIDIyMiwgMTEsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjE3LCA5NywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMzIsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAzMywgMjMzLCA4NCwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDE5LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIxOCwgNTIsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxMTEsIDIwLCAxLCAyMjUsIDEzOCwgMjMwLCAxMzMsIDIwLCAKLSAgICAxLCAyMjUsIDEzOCwgMjI3LCAxNjMsIDIwLCAxLCAyMjUsIDEzOCwgMjI0LCAxMzgsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAKLSAgICAyOCwgMjI5LCA0OSwgMjAsIDEsIDIyNSwgMTM4LCAyNDQsIDEyNiwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDk4LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDI0NCwgMTQ3LCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMTUzLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMjM5LCAKLSAgICAyMjgsIDE3MywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDIzOSwgMjI4LCAxNDksIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAxMSwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDU1LCAyMCwgMSwgMjI1LCAxMzgsIDIyOCwgMTEsIDIwLCAxLCAyMjUsIDEzOCwgMTg0LCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgNzQsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAxLCAyMCwgMSwgMTM3LCAyMjksIDEyLCAKLSAgICAyMzEsIDIxOSwgMjAsIDEsIDEzNywgMjI3LCAxMTcsIDIwLCAxLCAxMzcsIDIxMCwgMTk2LCAyMCwgMSwgMTM3LCAyMTIsIAotICAgIDUzLCAyMCwgMSwgMTM3LCAyMjksIDQ4LCAyMCwgMSwgMTM3LCAyMjksIDEzNywgMjAsIDEsIDEzNywgMjI5LCAxOSwgMjAsIAotICAgIDEsIDEzNywgMjQyLCAyMzksIDIwLCAxLCAxMzcsIDIzMSwgMTE1LCAyMCwgMSwgMTM3LCAyNDMsIDc3LCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDE0MCwgMjMwLCAxNzAsIDIzMSwgMzEsIDIwLCAxLCAxMzcsIDIyNywgMjQwLCAyMzEsIDEwNiwgMjAsIDEsIDEzNywgCi0gICAgMjMxLCAxMTIsIDIwLCAxLCAxMzcsIDIyNSwgNTUsIDIwLCAxLCAxMzcsIDIyOSwgMTIyLCAyMCwgMSwgMTM3LCAyMzEsIAotICAgIDEyMywgMjUxLCAyOSwgMjAsIDEsIDEzNywgMjM0LCAxNDMsIDIwLCAxLCAxMzcsIDI0MiwgMjQwLCAyMCwgMSwgMTM3LCAKLSAgICAyMzQsIDE1MCwgMjAsIDEsIDEzNywgMjEwLCAyMTMsIDIzMCwgNzYsIDIwLCAxLCAxMzcsIDIyNywgMTExLCAyMCwgMSwgCi0gICAgMTM3LCAyMzEsIDEwMCwgMjAsIDEsIDEzNywgMjI4LCAxMCwgMjAsIDEsIDEzNywgMjMxLCAxMDYsIDIwLCAxLCAxMzcsIAotICAgIDIxMSwgMTYsIDIwLCAxLCAxMzcsIDIzMywgMjQ5LCAyMCwgMSwgMTM3LCAyMzUsIDEwLCAyMCwgMSwgMTM3LCAyMjAsIDEyMywgCi0gICAgMjAsIDEsIDEzNywgMjI5LCAxMzEsIDIwLCAxLCAxMzcsIDIxNywgOTUsIDIwLCAxLCAxMzcsIDIyOCwgMTUzLCAyMCwgMSwgCi0gICAgMTM3LCAyMTYsIDY2LCAyMTAsIDE5OCwgMjAsIDEsIDEzNywgMjE4LCA3OSwgMjAsIDEsIDEzNywgMjI5LCAzOSwgMjI3LCAKLSAgICAxNjAsIDIwLCAxLCAxMzcsIDIxMywgMTgxLCAyMCwgMSwgMTM3LCAyMjksIDE5OSwgMjAsIDEsIDEzNywgMjMxLCAyMzksIAotICAgIDIzNCwgMTUyLCAyMCwgMSwgMTM3LCAyMjcsIDI0OSwgMjAsIDEsIDEzNywgMjI5LCAzNCwgMjAsIDEsIDEzNywgMjMzLCA4OCwgCi0gICAgMjAsIDEsIDEzNywgMjMxLCAxMDgsIDIwLCAxLCAxMzcsIDIzMSwgOCwgMjAsIDEsIDEzNywgMjI3LCAyNDMsIDIwLCAxLCAKLSAgICAxMzcsIDIxNiwgMjE1LCAyMCwgMSwgMTM3LCAyMjksIDM2LCAyMCwgMSwgMTM3LCAyNDMsIDIzMywgMjAsIDEsIDEzNywgCi0gICAgMjI5LCAxMzYsIDIwLCAxLCAxMzcsIDIyOCwgMTIsIDIwLCAxLCAxMzcsIDIyOCwgOCwgMjAsIDEsIDEzNywgMjUxLCAxMDcsIAotICAgIDIwLCAxLCAxMzcsIDIxMywgMTgzLCAyMCwgMSwgMTM3LCAyMzEsIDExMywgMjAsIDEsIDEzNywgMjIyLCAxNDAsIDIwLCAxLCAKLSAgICAxMzcsIDIyOCwgMTgzLCAyMCwgMSwgMTM3LCAyMzMsIDEwMiwgMjAsIDEsIDEzNywgMjE2LCA2NCwgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAyNTAsIDIyOSwgMSwgMjAsIDEsIDEzNywgMjI4LCAxNzUsIDIwLCAxLCAxMzcsIDIzNCwgMTU2LCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDQwLCAyMCwgMSwgMTM3LCAyMzEsIDIxMiwgMjAsIDEsIDEzNywgMjMxLCAxMDEsIDIwLCAxLCAxMzcsIDIzMiwgOTgsIAotICAgIDIwLCAxLCAxMzcsIDIzMywgMTg5LCAyMCwgMSwgMTM3LCAyMjgsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAxLCAyMCwgMSwgCi0gICAgMTM3LCAyMTEsIDE4NCwgMjAsIDEsIDEzNywgMjI5LCAzNywgMjAsIDEsIDEzNywgMjI3LCAyNTMsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMjQ1LCAyMCwgMSwgMTM3LCAyMzMsIDIwMywgMjI4LCAxMzksIDIwLCAxLCAxMzcsIDIyNywgMjUxLCAyMCwgMSwgCi0gICAgMTM3LCAyMjksIDE0NCwgMjAsIDEsIDEzNywgMjMxLCAyMzksIDIyOCwgMCwgMjAsIDEsIDEzNywgMjExLCAxMDMsIDIwLCAxLCAKLSAgICAxMzcsIDIyOSwgMTQzLCAyMCwgMSwgMTM3LCAyMTksIDIyMCwgMjAsIDEsIDEzNywgMjIwLCAxMjYsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTA5LCAyMCwgMSwgMTM3LCAyMzEsIDIxOSwgMjAsIDEsIDEzNywgMjMxLCAxMTksIDIwLCAxLCAxMzcsIDIzNCwgCi0gICAgMTQ0LCAyMCwgMSwgMTM3LCAyMzEsIDExMCwgMjAsIDEsIDEzNywgMjM0LCAxNDgsIDIwLCAxLCAxMzcsIDIzMSwgMTIzLCAKLSAgICAyMjUsIDEwMywgMjAsIDEsIDEzNywgMjEwLCAxNzksIDIwLCAxLCAxMzcsIDIyOCwgMTcxLCAyMCwgMSwgMTM3LCAyMzAsIAotICAgIDIyMCwgMjAsIDEsIDEzNywgMjMwLCAxMDAsIDIwLCAxLCAxMzcsIDIyMCwgMTUsIDIwLCAxLCAxMzcsIDIzNCwgMTY2LCAKLSAgICAyMzMsIDcwLCAyMCwgMSwgMTM3LCAyMzQsIDE2NiwgMjQ0LCAxNjAsIDIwLCAxLCAxMzcsIDIyOSwgNjksIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgMTk2LCAyMCwgMSwgMTM3LCAyMzIsIDIwMCwgMjAsIDEsIDEzNywgMjI1LCA2NSwgMjAsIDEsIDEzNywgMjI1LCAKLSAgICAxOTksIDIwLCAxLCAxMzcsIDIxNiwgMjMwLCAyMCwgMSwgMTA3LCAyMzEsIDk5LCAyMCwgMSwgMTA3LCAyMTIsIDUxLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE2OSwgMjAsIDEsIDEwNywgMjMxLCAxNiwgMjAsIDEsIDEwNywgMjI4LCAxNjcsIDIwLCAxLCAxMDcsIAotICAgIDIzMiwgMjM1LCAyMCwgMSwgMTA3LCAyMjgsIDE3MiwgMjAsIDEsIDEwNywgMjI4LCA3LCAyMCwgMSwgMTA3LCAyMjksIDU0LCAKLSAgICAyMCwgMSwgMTA3LCAyMjcsIDE2MCwgMjAsIDEsIDEwNywgMjExLCAxOTQsIDIwLCAxLCAxMDcsIDIyOSwgOSwgMjAsIDEsIAotICAgIDEwNywgMjIwLCA2MSwgMjAsIDEsIDEwNywgMjI5LCAyMCwgMjAsIDEsIDEwNywgMjM0LCAxNTEsIDIwLCAxLCAxMDcsIDIxNiwgCi0gICAgMjE3LCAyMCwgMSwgMTA3LCAyMjAsIDQxLCAyMCwgMSwgMTA3LCAyMjgsIDE4MCwgMjAsIDEsIDEwNywgMjE4LCA1MiwgMjAsIAotICAgIDEsIDEwNywgMjM0LCAxNTYsIDIwLCAxLCAxMDcsIDIxMSwgOTEsIDIwLCAxLCAxMDcsIDIzMywgMjA0LCAyMCwgMSwgMTA3LCAKLSAgICAyMjEsIDIzNCwgMjAsIDEsIDEwNywgMjMxLCAyMSwgMjAsIDEsIDEwNywgMjI5LCAxMzUsIDIwLCAxLCAxMDcsIDIzMSwgCi0gICAgMTg4LCAyMCwgMSwgMTA3LCAyMzEsIDI3LCAyMCwgMSwgMTA3LCAyMjAsIDEyNSwgMjAsIDEsIDEwNywgMjExLCAzOSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNzQsIDIwLCAxLCAxMDcsIDIzNCwgMTQ3LCAyMzEsIDEwMiwgMjAsIDEsIDEwNywgMjI5LCAxNiwgCi0gICAgMjAsIDEsIDEwNywgMjE1LCAxMTgsIDIwLCAxLCAxMDcsIDI0MiwgMjQ4LCAyMCwgMSwgMTA3LCAyMjksIDYsIDIwLCAxLCAKLSAgICAxMDcsIDI0NCwgMTI3LCAyMCwgMSwgMTA3LCAyMjksIDEzOSwgMjAsIDEsIDEwNywgMjMxLCAwLCAyMCwgMSwgMTA3LCAyMzMsIAotICAgIDUsIDIwLCAxLCAxMDcsIDIyOSwgMTIxLCAyMCwgMSwgMTA3LCAyMzAsIDE0NywgMjAsIDEsIDEwNywgMjMxLCA0LCAyMCwgMSwgCi0gICAgMTA3LCAyMjQsIDExOCwgMjAsIDEsIDEwNywgMjMxLCAyLCAyMCwgMSwgMTA3LCAyMzEsIDE4LCAyMCwgMSwgMTA3LCAyMzIsIAotICAgIDg0LCAyMCwgMSwgMTA3LCAyMjcsIDI1NSwgMjAsIDEsIDEwNywgMjMxLCAxMjIsIDIwLCAxLCAxMDcsIDIzMywgMTgwLCAyMCwgCi0gICAgMSwgMTA3LCAyMjcsIDE1MSwgMjAsIDEsIDEwNywgMjE2LCAyMjAsIDIwLCAxLCAxMDcsIDIxOSwgMzQsIDIwLCAxLCAxMDcsIAotICAgIDIxMCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE0OCwgMjAsIDEsIDEwNywgMjIzLCAxNzAsIDIwLCAxLCAxMDcsIDIxNywgCi0gICAgMTAsIDIwLCAxLCAxMDcsIDIyOSwgMTcsIDIwLCAxLCAxMDcsIDIzMSwgMjMsIDIwLCAxLCAxMDcsIDIyNywgMjU0LCAyMCwgCi0gICAgMSwgMTA3LCAyMzQsIDE0NiwgMjAsIDEsIDEwNywgMjI1LCA1OSwgMjAsIDEsIDEwNywgMjI1LCAxNTIsIDIwLCAxLCAxMDcsIAotICAgIDIyNywgMTI3LCAyMCwgMSwgMTA3LCAyMzMsIDExLCAyMCwgMSwgMTA3LCAyMjksIDU1LCAyMCwgMSwgMTA3LCAyMzEsIDIwLCAKLSAgICAyMCwgMSwgMTA3LCAyMjksIDI5LCAyMCwgMSwgMTA3LCAyMTAsIDE5MywgMjAsIDEsIDEwNywgMjI2LCAyMSwgMjAsIDEsIAotICAgIDEwNywgMjEwLCAxOTIsIDIwLCAxLCAxMDcsIDIyOSwgMTQ0LCAyMCwgMSwgMTA3LCAyMjcsIDI0NCwgMjAsIDEsIDEwNywgCi0gICAgMjE4LCA4MSwgMjAsIDEsIDEwNywgMjMzLCAyMDgsIDIwLCAxLCAxMDcsIDIyOSwgNDQsIDIwLCAxLCAxMDcsIDIyOSwgMTQsIAotICAgIDIwLCAxLCAxMDcsIDIxNSwgMTAyLCAyMCwgMSwgMTA3LCAyMzEsIDMxLCAyMCwgMSwgMTA3LCAyMzMsIDE5OCwgMjAsIDEsIAotICAgIDEwNywgMjI3LCAyNTIsIDIwLCAxLCAxMDcsIDIxNiwgMjE4LCAyMCwgMSwgMTA3LCAyMzEsIDIxNCwgMjAsIDEsIDEwNywgCi0gICAgMjI5LCA1MywgMjAsIDEsIDEwNywgMjMzLCA0LCAyMCwgMSwgMTA3LCAyMjksIDM1LCAyMCwgMSwgMTA3LCAyMjgsIDEsIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTUzLCAyMCwgMSwgMTA3LCAyNDIsIDIzMywgMjAsIDEsIDEwNywgMjMzLCAyMTcsIDIwLCAxLCAxMDcsIAotICAgIDIyMywgODQsIDIyNiwgMjA5LCAyMCwgMSwgMTA3LCAyMTcsIDg2LCAyMCwgMSwgMTA3LCAyMTYsIDEwLCAyMCwgMSwgMTA3LCAKLSAgICAyMjcsIDE0OCwgMjAsIDEsIDEwNywgMjIyLCAyMzksIDIwLCAxLCAxMDcsIDIzMywgNDksIDIwLCAxLCAxMDcsIDIzMSwgNzksIAotICAgIDIwLCAxLCAxMDcsIDE5MywgMjAsIDEsIDEwNywgMjE4LCA0LCAyMCwgMSwgMTA3LCAyMzAsIDEwMiwgMjAsIDEsIDEwNywgCi0gICAgMjIwLCAyNywgMjAsIDEsIDEwNywgMjIwLCAzNywgMjAsIDEsIDEwNywgMjMzLCAxNTUsIDIwLCAxLCAxMDcsIDIyNywgMjM3LCAKLSAgICAyMCwgMSwgMTA3LCAyMTksIDIyNSwgMjAsIDEsIDEwNywgMjI3LCAyNDYsIDIwLCAxLCAxMDcsIDIyNSwgMjExLCAyMCwgMSwgCi0gICAgMTA3LCAyMjgsIDIzMywgMjAsIDEsIDEwNywgMjE5LCAyNTIsIDIwLCAxLCAxMDcsIDIyNCwgMTMzLCAyMCwgMSwgMTA3LCAKLSAgICAyMzAsIDQ2LCAyMCwgMSwgMTA3LCAyMzIsIDExOSwgMjAsIDEsIDEwNywgMjIzLCA4NCwgMjMwLCA5NiwgMjAsIDEsIDEwNywgCi0gICAgMjE2LCAxMTcsIDIwLCAxLCAxMDcsIDIyNywgMjM4LCAyMCwgMSwgMTA3LCAyMzEsIDEyMywgMTk4LCAyMCwgMSwgMTA3LCAKLSAgICAyMjEsIDIzMiwgMjAsIDEsIDEwNywgMjQ0LCAxOTUsIDIwLCAxLCA4MiwgMjI5LCAxNDMsIDIwLCAxLCA4MiwgMjE2LCAxNiwgCi0gICAgMjAsIDEsIDgyLCAyMzEsIDExMiwgMjAsIDEsIDgyLCAyMzMsIDg4LCAyMCwgMSwgODIsIDIxMywgMTI4LCAyMCwgMSwgODIsIAotICAgIDIzMiwgMTI1LCAyMCwgMSwgODIsIDIyNiwgODksIDIwLCAxLCA4MiwgMjE5LCA0NSwgMjAsIDEsIDgyLCAyMjMsIDE0NSwgCi0gICAgMjAsIDEsIDgyLCAyMjgsIDMsIDIwLCAxLCA4MiwgMjI5LCAxMTQsIDIwLCAxLCA4MiwgMjI0LCAxNDcsIDIwLCAxLCA4MiwgCi0gICAgMjE3LCA2MiwgMjAsIDEsIDgyLCAyMjksIDIyLCAyMCwgMSwgODIsIDIzMywgMjQ1LCAyMCwgMSwgODIsIDIxMSwgMTg3LCAKLSAgICAyMCwgMSwgODIsIDIyMSwgMTcwLCAyMCwgMSwgODIsIDIyOSwgNDUsIDIwLCAxLCA4MiwgMjI2LCA4NiwgMjAsIDEsIDgyLCAKLSAgICAyMTYsIDE3LCAyMCwgMSwgODIsIDIzMywgMjAyLCAyMCwgMSwgODIsIDIzMiwgMTM5LCAyMCwgMSwgODIsIDIyOCwgNiwgMjAsIAotICAgIDEsIDgyLCAyMjgsIDI1NCwgMjAsIDEsIDgyLCAyMzEsIDIyMCwgMjAsIDEsIDgyLCAyMjksIDE1LCAyMCwgMSwgODIsIDIyOCwgCi0gICAgMjUzLCAyMCwgMSwgODIsIDIyOCwgNSwgMjAsIDEsIDgyLCAyMjIsIDIzNywgMjAsIDEsIDgyLCAyMjgsIDE3MSwgMjAsIDEsIAotICAgIDgyLCAyMjUsIDIxMCwgMjAsIDEsIDgyLCAyMjIsIDMxLCAyMCwgMSwgODIsIDIyOSwgMzAsIDIwLCAxLCA4MiwgMjMxLCAxMCwgCi0gICAgMjAsIDEsIDgyLCAyNDIsIDIyNywgMjAsIDEsIDgyLCAyMjksIDE4LCAyMCwgMSwgODIsIDIyOCwgMTgyLCAyMCwgMSwgODIsIAotICAgIDIzMSwgMTcyLCAyMCwgMSwgODIsIDIzMiwgMTIxLCAyMCwgMSwgODIsIDIyOSwgNTAsIDIwLCAxLCA4MiwgMjI5LCAxMjcsIAotICAgIDIwLCAxLCA4MiwgMjE3LCA4NSwgMjI3LCAyNDQsIDIwLCAxLCA4MiwgMjIwLCAxMjcsIDIwLCAxLCA4MiwgMjI0LCAxNDMsIAotICAgIDIwLCAxLCA4MiwgMjI5LCAxNDcsIDIxOSwgNTEsIDIwLCAxLCA4MiwgMjI5LCAzOCwgMjI3LCAxNjAsIDIwLCAxLCA4MiwgCi0gICAgMjExLCA0LCAyMCwgMSwgODIsIDI0MiwgMjI4LCAyMCwgMSwgODIsIDIxNSwgMTE3LCAyMCwgMSwgODIsIDIxMSwgMTksIDIwLCAKLSAgICAxLCA4MiwgMjI1LCAxNiwgMjAsIDEsIDgyLCAyMTUsIDEwNywgMjAsIDEsIDgyLCAyMzQsIDE1NCwgMjAsIDEsIDgyLCAyMTgsIAotICAgIDgwLCAyMCwgMSwgODIsIDIxNiwgMjE5LCAyMCwgMSwgODIsIDIxMywgMTg0LCAyMCwgMSwgODIsIDIxMiwgNiwgMjAsIDEsIAotICAgIDgyLCAyMzMsIDEzMiwgMjAsIDEsIDgyLCAyMjQsIDE1MCwgMjAsIDEsIDgyLCAyMTcsIDk2LCAyMCwgMSwgODIsIDI0MiwgCi0gICAgMjQ3LCAyMCwgMSwgODIsIDIyOSwgNTksIDIwLCAxLCA4MiwgMjIwLCA0MCwgMjAsIDEsIDgyLCAyMzEsIDUsIDIwLCAxLCAKLSAgICA4MiwgMjMxLCAxMTYsIDIwLCAxLCA4MiwgMjI3LCAxMTUsIDIwLCAxLCA4MiwgMjI4LCAxMzYsIDIwLCAxLCA4MiwgMjQzLCAKLSAgICA3MywgMjAsIDEsIDgyLCAyMTUsIDEwOCwgMjAsIDEsIDgyLCAyMzMsIDIxMSwgMjAsIDEsIDgyLCAyMTEsIDY3LCAyMCwgMSwgCi0gICAgODIsIDIyNywgMTQ5LCAyNTAsIDE2LCAyMCwgMSwgODIsIDIxMCwgMjUwLCAyMCwgMSwgODIsIDIzMSwgMjIsIDIwLCAxLCAKLSAgICA4MiwgMjI5LCAxMzIsIDIwLCAxLCA4MiwgMjI1LCAxMDAsIDIwLCAxLCA4MiwgMjEwLCAxOTcsIDIwLCAxLCA4MiwgMjMzLCAKLSAgICA2LCAyMCwgMSwgODIsIDI0MywgMjMzLCAyMCwgMSwgODIsIDI0MywgNzIsIDIwLCAxLCA4MiwgMjI5LCA4LCAyMCwgMSwgODIsIAotICAgIDIzNCwgMTU2LCAyMCwgMSwgODIsIDIzMSwgMjIzLCAyMCwgMSwgODIsIDIyOSwgMjEsIDIwLCAxLCA4MiwgMjQyLCAyMzQsIAotICAgIDIwLCAxLCA4MiwgMjQ0LCAxOTYsIDIwLCAxLCA4MiwgMjI3LCAyMzksIDIwLCAxLCA4MiwgMjI1LCAxNTMsIDIwLCAxLCA4MiwgCi0gICAgMjExLCAxNywgMjAsIDEsIDgyLCAyMjksIDQ2LCAyMCwgMSwgODIsIDIyNywgMTQ5LCAyNTIsIDIzLCAyMCwgMSwgODIsIAotICAgIDIyNywgOTUsIDIwLCAxLCA4MiwgMjI0LCAyNDcsIDIwLCAxLCA4MiwgMjMwLCAyMjAsIDIwLCAxLCA4MiwgMjQzLCAyMzEsIAotICAgIDIwLCAxLCA4MiwgMjI5LCAyMjAsIDIwLCAxLCA4MiwgMjMwLCAxMDAsIDIwLCAxLCA4MiwgMjQyLCAyMzMsIDIwLCAxLCA4MiwgCi0gICAgMjQzLCAyMzUsIDczLCAyMCwgMSwgODIsIDIzMCwgNDcsIDIwLCAxLCA4MiwgMjI0LCAxNDYsIDIwLCAxLCA4MiwgMjI5LCAKLSAgICAxMCwgMjAsIDEsIDgyLCAyMzMsIDE4OSwgMjAsIDEsIDgyLCAyMjUsIDk3LCAyMCwgMSwgODIsIDIyNywgMjQ3LCAyMCwgMSwgCi0gICAgODIsIDIxMSwgMTgsIDIwLCAxLCA4MiwgMjI5LCAzMSwgMjAsIDEsIDgyLCAyMjYsIDkwLCAyMjUsIDE4NywgMjAsIDEsIDgyLCAKLSAgICAyNDMsIDIzNSwgMjUxLCAxNSwgMjAsIDEsIDgyLCAyNDQsIDM3LCAyMCwgMSwgODIsIDIyOCwgMTc2LCAyMCwgMSwgODIsIAotICAgIDYxLCAyMCwgMSwgODIsIDIxNiwgMTAsIDIwLCAxLCA4MiwgNzYsIDIwLCAxLCA4MiwgNzMsIDIwLCAxLCA4MiwgMjMzLCA4NiwgCi0gICAgMjAsIDEsIDgyLCAyMjYsIDkwLCAyMjUsIDIzLCAyMCwgMSwgODIsIDIxNywgMTAxLCAyMCwgMSwgODIsIDIxNywgNTEsIDIwLCAKLSAgICAxLCA4MiwgMjI5LCAxNDcsIDIzMCwgMzQsIDI0MCwgMjM0LCAyMCwgMSwgODIsIDIyMCwgMTUsIDIwLCAxLCA4MiwgMjExLCAKLSAgICAxNCwgMjAsIDEsIDgyLCAyMjgsIDI0NywgMjAsIDEsIDgyLCAyMTAsIDIwMiwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjE3LCAKLSAgICAyNDAsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDI0OSwgMTQ3LCAyMCwgMSwgODIsIDIxMCwgMTg3LCAyMCwgMSwgODIsIDIxMCwgCi0gICAgMTk1LCAyMCwgMSwgODIsIDIzNCwgMTQyLCAyMCwgMSwgODIsIDIyNSwgMTUxLCAyMCwgMSwgODIsIDIyOCwgMTc3LCAyNDUsIAotICAgIDEwMiwgMjAsIDEsIDgyLCAyMjQsIDE0NCwgMjAsIDEsIDgyLCAyMTEsIDE5MiwgMjAsIDEsIDgyLCAyNDQsIDE0NywgMjAsIAotICAgIDEsIDgyLCAyMTMsIDI1MCwgMjAsIDEsIDgyLCAyMzIsIDk4LCAyMCwgMSwgODIsIDIzMCwgMjMwLCAyMCwgMSwgODIsIDIyMywgCi0gICAgNTEsIDIwLCAxLCA4MiwgMjIzLCAxNzEsIDIwLCAxLCA4MiwgMjI4LCAyNDYsIDIwLCAxLCA4MiwgMjI5LCA3NywgMjAsIDEsIAotICAgIDgyLCAyMjAsIDcsIDIwLCAxLCA4MiwgMjE5LCAyNTIsIDIwLCAxLCA4MiwgMjQzLCAyMzUsIDIyMywgODYsIDIwLCAxLCA4MiwgCi0gICAgMTk3LCAyMCwgMSwgODIsIDIyNSwgMTA4LCAyMCwgMSwgODIsIDIzMiwgMTE5LCAyMCwgMSwgODIsIDIzNCwgMjgsIDIwLCAxLCAKLSAgICA4MiwgMjMxLCA1OCwgMjAsIDEsIDgyLCAxODQsIDIwLCAxLCA4MiwgMjMxLCAxNjksIDIwLCAxLCA4MiwgMjE2LCAyMjEsIAotICAgIDIwLCAxLCA4MiwgMjM0LCA5MiwgMjAsIDEsIDgyLCAyMzAsIDE1MCwgMjAsIDEsIDgyLCAyMTYsIDI0NywgMjAsIDEsIDgyLCAKLSAgICAyNDQsIDE2OSwgMjAsIDEsIDgyLCAyNDIsIDIyMywgMjAsIDEsIDIyNSwgMTM3LCAxNzYsIDIwLCAxLCAyMjUsIDEzNywgNzAsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjMzLCAyMTcsIDIwLCAxLCAyMjUsIDEzNywgMjQ1LCAyMDksIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjIzLCAxMDgsIDIwLCAxLCAyMjUsIDEzNywgMjE3LCA4NiwgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDE0OCwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMzMsIDEzNSwgMjAsIDEsIDIyNSwgMTM3LCAyMjIsIDIzOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjMsIDI5LCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMSwgNzksIDIwLCAxLCAyMjUsIDEzNywgMjE3LCAxMDEsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjI5LCAxNDYsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCAxODMsIDIwLCAxLCAyMjUsIDEzNywgMTkzLCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIxOCwgNCwgMjAsIDEsIDIyNSwgMTM3LCAyMjAsIDI3LCAyMCwgMSwgMjI1LCAxMzcsIDIxOSwgMTkxLCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIyMCwgMTIzLCAyMCwgMSwgMjI1LCAxMzcsIDIzMywgMTU1LCAyMCwgMSwgMjI1LCAxMzcsIDIzNCwgMTU2LCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIyNywgMjA5LCAyMCwgMSwgMjI1LCAxMzcsIDIyNywgMjM3LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyOCwgMTU0LCAyMCwgMSwgMjI1LCAxMzcsIDIxMCwgMjI2LCAyMCwgMSwgMjI1LCAxMzcsIDIxOSwgMjI1LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDE5MSwgMjAsIDEsIDIyNSwgMTM3LCAyMjgsIDksIDIwLCAxLCAyMjUsIDEzNywgMjI1LCAxNTEsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjI3LCAyNDYsIDIwLCAxLCAyMjUsIDEzNywgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDEzNywgMjI1LCAyMTEsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjIyLCAxNDAsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCAyMzMsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjIzLCA1MSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDE2NSwgMjAsIDEsIDIyNSwgMTM3LCAyMjksIDcsIDIwLCAxLCAyMjUsIAotICAgIDEzNywgMjI5LCA1NiwgMjAsIDEsIDIyNSwgMTM3LCAyMjAsIDcsIDIwLCAxLCAyMjUsIDEzNywgMjI0LCAxNDcsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjQ0LCAzNywgMjAsIDEsIDIyNSwgMTM3LCAyMTIsIDY1LCAyMCwgMSwgMjI1LCAxMzcsIDIzMiwgMjQxLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMiwgMTE5LCAyMCwgMSwgMjI1LCAxMzcsIDIzNCwgMjgsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjMxLCAxMTQsIDIwLCAxLCAyMjUsIDEzNywgMjIzLCA4MywgMjAsIDEsIDIyNSwgMTM3LCAxODQsIDIwLCAxLCAyMjUsIAotICAgIDEzNywgMjMwLCAxNjEsIDIwLCAxLCAyMjUsIDEzNywgMjMxLCAxMjIsIDIwLCAxLCAyMjUsIDEzNywgMjE2LCAyMzAsIDIwLCAKLSAgICAxLCAyMjUsIDEzNywgMjMzLCAyNTEsIDIwLCAxLCAyMjUsIDEzNywgMjIxLCAyNTEsIDIwLCAxLCAyMjUsIDEzNywgMjEyLCAKLSAgICAxMTUsIDk1LCAxLCAxOTAsIDk1LCAxLCAyNTIsIDE5MSwgOTUsIDEsIDgsIDE5MCwgOTUsIDEsIDIyNSwgNDIsIDk1LCAxLCAKLSAgICAxODQsIDk1LCAxLCAyMzAsIDIzMywgOTUsIDEsIDI1NCwgMjMsIDE4NCwgOTUsIDEsIDI0NCwgMTk2LCA5NSwgMSwgMjE0LCAKLSAgICAyNywgOTUsIDEsIDIxMywgMTc3LCA5NSwgMSwgMjE3LCAxMDUsIDk1LCAxLCAyNDgsIDIyMSwgOTUsIDEsIDgsIDIxNSwgCi0gICAgMTU2LCA5NSwgMSwgOCwgMjE3LCAxMDUsIDk1LCAxLCAyMTUsIDE1NiwgOTUsIDEsIDI0OCwgMTM1LCA5NSwgMSwgMTk3LCAKLSAgICA5NSwgMSwgMjI4LCAyMzcsIDk1LCAxLCA4LCAyMjgsIDExMCwgOTUsIDEsIDI1NCwgMjMsIDE5NywgOTUsIDEsIDIyOCwgCi0gICAgMTEwLCA5NSwgMSwgMjI4LCA5NiwgOTUsIDEsIDIzMywgMTM1LCA5NSwgMSwgMjMyLCA2MSwgOTUsIDEsIDIzMiwgMjU0LCAKLSAgICA5NSwgMSwgMjMyLCAyNDMsIDk1LCAxLCAyMTYsIDU2LCA5NSwgMSwgMjQ3LCAxNTMsIDk1LCAxLCAyMTYsIDQ4LCA5NSwgMSwgCi0gICAgMjQ3LCAxNTIsIDk1LCAxLCAxNzYsIDk1LCAxLCAyNDMsIDEzNSwgOTUsIDEsIDgsIDE3NiwgOTUsIDEsIDIyNCwgODgsIDk1LCAKLSAgICAxLCAyMjQsIDY2LCA5NSwgMSwgMjI5LCA3NywgOTUsIDEsIDIyOSwgMjgsIDk1LCAxLCAyNTQsIDIzLCAyMjksIDc3LCA5NSwgCi0gICAgMSwgMTYyLCA5NSwgMSwgMjExLCAxNjUsIDk1LCAxLCAyNDIsIDI0OSwgOTUsIDEsIDI0MiwgMjI2LCA5NSwgMSwgMjE1LCAKLSAgICAxNjUsIDk1LCAxLCAyNDYsIDI2LCA5NSwgMSwgMjI3LCAxNjUsIDk1LCAxLCAyMjcsIDE1MCwgOTUsIDEsIDIxNSwgMTc1LCAKLSAgICA5NSwgMSwgMjQ2LCAzMywgOTUsIDEsIDgsIDIxNSwgMTc1LCA5NSwgMSwgOCwgMjQ2LCAzMywgOTUsIDEsIDIyMywgMTA2LCAKLSAgICAyMTUsIDE3NSwgOTUsIDEsIDIyMCwgMTAyLCA5NSwgMSwgMjE4LCAyMjMsIDk1LCAxLCAyMTAsIDgyLCA5NSwgMSwgMjEwLCAKLSAgICAxNCwgOTUsIDEsIDIxNSwgMTgzLCA5NSwgMSwgMjQ2LCAzOCwgOTUsIDEsIDgsIDIxNSwgMTgzLCA5NSwgMSwgMjA2LCA5NSwgCi0gICAgMSwgMjEwLCAxMTYsIDk1LCAxLCAyMTAsIDE1LCA5NSwgMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIDIyMywgOTUsIDEsIAotICAgIDI1NCwgMjMsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMTUsIDk1LCAxLCAyMDksIDIyMiwgOTUsIDEsIDIxMiwgNjUsIDk1LCAKLSAgICAxLCAyNTQsIDIwOSwgOTUsIDEsIDI0MSwgMTg5LCA5NSwgMSwgMjI5LCAxOTIsIDk1LCA1LCAyNTMsIDIyMiwgOTUsIDUsIAotICAgIDIyMywgMTA2LCAyMTMsIDEzMywgOTUsIDUsIDIyMywgMTA2LCAyNTMsIDIyMiwgOTUsIDI1LCA1LCA2MSwgOTUsIDI1LCA1LCAKLSAgICAyNTUsIDczLCA5NSwgMjUsIDUsIDI1NCwgMjA1LCA5NSwgMjUsIDUsIDI1NCwgMTIzLCA5NSwgMjUsIDUsIDI1NCwgMTE1LCAKLSAgICA5NSwgMjUsIDUsIDc2LCA5NSwgMjUsIDUsIDIyNiwgMTgzLCA5NSwgMjUsIDUsIDIxMSwgMjI3LCA5NSwgMjUsIDUsIDIxMiwgCi0gICAgOTgsIDk1LCAyNSwgNSwgNzUsIDk1LCAyNSwgNSwgMjQ1LCAxNTAsIDk1LCAyNSwgNSwgMjQ1LCAxMzgsIDk1LCAyNSwgNSwgCi0gICAgMjI2LCAyMzIsIDk1LCAyNSwgNSwgNzMsIDk1LCAyNSwgNSwgMjQwLCAxMTksIDk1LCAyNSwgNSwgMjQwLCAxMTgsIDk1LCAKLSAgICAyNSwgNSwgMjQwLCAxMTcsIDk1LCAyNSwgNSwgMjM1LCAxODksIDk1LCAyNSwgNSwgMjM2LCA2MCwgOTUsIDI1LCA1LCAyMzYsIAotICAgIDMzLCA5NSwgMjUsIDUsIDIzNSwgMTU2LCA5NSwgMjUsIDUsIDIzNSwgMjMxLCA5NSwgMjUsIDUsIDcwLCA5NSwgMjUsIDUsIAotICAgIDIxNCwgMjI5LCA5NSwgMjUsIDUsIDIxNCwgMjI4LCA5NSwgMjUsIDUsIDIxNCwgMjI3LCA5NSwgMjUsIDUsIDIxNCwgMTE4LCAKLSAgICA5NSwgMjUsIDUsIDIxNCwgMjExLCA5NSwgMjUsIDUsIDIxNCwgMTc4LCA5NSwgMjUsIDUsIDIxMSwgMTE3LCA5NSwgMjUsIDUsIAotICAgIDIxMSwgOCwgOTUsIDI1LCA1LCAyNTQsIDI0MywgOTUsIDI1LCA1LCAyNTQsIDIzOSwgOTUsIDI1LCA1LCAyNDUsIDg2LCA5NSwgCi0gICAgMjUsIDUsIDIyMiwgMTgzLCAyNDUsIDg2LCA5NSwgMjUsIDUsIDI0NSwgOTIsIDk1LCAyNSwgNSwgMjIyLCAxODMsIDI0NSwgCi0gICAgOTIsIDk1LCAyNSwgNSwgMjU0LCAyMDEsIDk1LCAyNSwgNSwgMjQ1LCAxOTUsIDk1LCAyNSwgNSwgMjUzLCAxOTIsIDk1LCAKLSAgICAyNSwgNSwgMjI2LCAxMzQsIDk1LCAyNSwgNSwgMjMwLCAyNSwgOTUsIDI1LCA1LCAyMjksIDc5LCA5NSwgMTM4LCAyMjIsIAotICAgIDI1MSwgOTUsIDEzOCwgMjE2LCAxNCwgMjIyLCAyNTEsIDk1LCAxMzgsIDQ4LCA5NSwgMTM4LCA1MSwgOTUsIDEsIDIxNiwgCi0gICAgMjgsIDk1LCAxLCAyMTYsIDI3LCA5NSwgMSwgMjE2LCAyNiwgOTUsIDEsIDIxNiwgMjUsIDk1LCAxLCAyMTYsIDI0LCA5NSwgCi0gICAgMSwgMjE2LCAyMywgOTUsIDEsIDIxNiwgMjIsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyOSwgOTUsIDEsIDIyMywgMTA2LCAKLSAgICAyMTYsIDI4LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjYsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyNSwgOTUsIDEsIDIyMywgCi0gICAgMTA2LCAyMTYsIDI0LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjIsIDU2LCAxLCAyNTQsIDIzLCA3NSwgMTQxLCAxLCAyNTQsIAotICAgIDIzLCAyMTEsIDQ3LCA0OSwgMjgsIDE2LCAyMjQsIDE1NCwgNDksIDI4LCAxNiwgMjQ4LCAxNTgsIDQ5LCAyOCwgMTYsIDIyNSwgCi0gICAgMTc1LCA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyNDcsIDIwMSwgNDksIAotICAgIDI4LCAxNiwgMjE0LCAxNiwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAKLSAgICAyMzQsIDE5NywgNDksIDI4LCAxNiwgMjE3LCAxNjksIDQ5LCAyOCwgMTYsIDIyNiwgOSwgNDksIDI4LCAxNiwgMjEwLCAyMTcsIAotICAgIDQ5LCAyOCwgMTYsIDIxMCwgMjE4LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgMjMzLCAyMzQsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgNjgsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyNDUsIDI2LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjE3LCAyLCA0OSwgMjgsIAotICAgIDE2LCAyMzQsIDE2MSwgNDksIDI4LCAxNiwgMjU0LCA1OCwgNDksIDI4LCAxNiwgMjU0LCA1OSwgMjQ3LCAyMDEsIDQ5LCAyOCwgCi0gICAgMTYsIDIxNywgMTc1LCA0OSwgMjgsIDE2LCAyMTYsIDE1OSwgNDksIDI4LCAxNiwgMjI2LCAyMDYsIDI1NCwgMjEsIDQ5LCAKLSAgICAyOCwgMTYsIDI0MiwgMTU5LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjQsIDE1MywgNDksIDI4LCAxNiwgMjUwLCAxNDksIAotICAgIDQ5LCAyOCwgMTYsIDIxNCwgNiwgNDksIDI4LCAxNiwgMjM1LCAxNjQsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAKLSAgICAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjIxLCAyMTMsIDQ5LCAyOCwgMTYsIAotICAgIDIyNiwgMCwgNDksIDI4LCAxNiwgMjE4LCAxNDYsIDI1NCwgNjEsIDQ5LCAyOCwgMTYsIDIyNiwgMTEyLCAyNTQsIDIxLCA0OSwgCi0gICAgMjgsIDE2LCAyMTQsIDE1LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIDYyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDU2LCA0OSwgMjgsIDE2LCAyMzQsIDM3LCA0OSwgMjgsIDE2LCAyMjMsIDQ2LCA0OSwgMjgsIDE2LCAyMjUsIDEwNiwgMjU0LCAKLSAgICAyMSwgNDksIDI4LCAxNiwgMjE2LCA4MywgNDksIDI4LCAxNiwgMjU0LCAxMjEsIDQ5LCAyOCwgMTYsIDIyMSwgMTU5LCA0OSwgCi0gICAgMjgsIDE2LCAyMTcsIDE3OCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjE3LCAxNzgsIDIzMSwgNDAsIDIxOCwgMTQ0LCA0OSwgCi0gICAgMjgsIDE2LCAyMjYsIDEwNywgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjE2LCAxOTAsIDQ5LCAyOCwgMTYsIDIzMywgMjcsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NiwgNDEsIDQ5LCAyOCwgMTYsIDIxNSwgMjI3LCA0OSwgMjgsIDE2LCAyMTYsIDIzMiwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyMzcsIDQ5LCAyOCwgMTYsIDI1NCwgNjgsIDI0NSwgMjYsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAKLSAgICAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzYsIDEyLCA0OSwgMjgsIDE2LCAyMTUsIDE5OSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAyMDAsIDIxNSwgMTk4LCA0OSwgMjgsIDE2LCAyMjUsIDIwMCwgNDksIDI4LCAxNiwgMjI0LCAxNTgsIDQ5LCAyOCwgCi0gICAgMTYsIDIzNCwgMTEsIDQ5LCAyOCwgMTYsIDI1MCwgODAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyMywgMTQ2LCA0OSwgMjgsIAotICAgIDE2LCAyMjYsIDEyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjYsIDEwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNDAsIDEwOSwgCi0gICAgNDksIDI4LCAxNiwgMjI5LCAyMDMsIDQ5LCAyOCwgMTYsIDIyNSwgMTU2LCA0OSwgMjgsIDE2LCAyMzQsIDEyLCAyNTQsIAotICAgIDE0OSwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDI1NCwgMTQ5LCA0OSwgMjgsIDE2LCAyMTgsIDEyMywgNDksIDI4LCAxNiwgCi0gICAgMjQyLCAxMjMsIDQ5LCAyOCwgMTYsIDIzNSwgMTY0LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIDIwNiwgMjI5LCA5NSwgCi0gICAgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNSwgMTU1LCA0OSwgMjgsIDE2LCAyMzMsIAotICAgIDI1NCwgNDksIDI4LCAxNiwgMjI1LCAxNTQsIDQ5LCAyOCwgMTYsIDIzMywgMjM2LCA0OSwgMjgsIDE2LCAyMjUsIDIwMSwgCi0gICAgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDIyOSwgOTYsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAKLSAgICAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMTAsIDIxNSwgNDksIDI4LCAxNiwgMjU0LCA1OSwgMjI5LCA5NSwgNDksIAotICAgIDI4LCAxNiwgMjU0LCA2MCwgMjE3LCAxNzYsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxMCwgMjE2LCA0OSwgMjgsIDE2LCAKLSAgICAyMzMsIDIzNSwgNDksIDI4LCAxNiwgMjQ1LCAxNzMsIDQ5LCAyOCwgMTYsIDI1MCwgMTUwLCA0OSwgMjgsIDE2LCAyMzAsIAotICAgIDE5OCwgMjM1LCAxNjMsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNSwgMTA2LCAyMjksIAotICAgIDk1LCA0OSwgMjgsIDE2LCAyMjQsIDE1OSwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAyMDMsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgODQsIDQ5LCAyOCwgMTYsIDIzMiwgNTgsIDQ5LCAyOCwgMTYsIDIyNiwgMTAsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgCi0gICAgMTIsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgNjAsIDIyNiwgMTEsIDQ5LCAyOCwgMTYsIDIzMywgMTUzLCA0OSwgMjgsIAotICAgIDE2LCAyNTQsIDg1LCA0OSwgMjgsIDE2LCAyMTUsIDE5OSwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjQ1LCAxNzYsIDQ5LCAyOCwgCi0gICAgMTYsIDIxNywgMTc4LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTcsIDE3MCwgNDksIDI4LCAxNiwgMjUwLCA4MCwgMjI5LCAKLSAgICA5NSwgNDksIDI4LCAxNiwgMjQ1LCAxMDYsIDQ5LCAyOCwgMTYsIDIyMSwgMTYwLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTEsIAotICAgIDE1MSwgMjM0LCAzNywgNDksIDI4LCAxNiwgMjE1LCAxOTYsIDQ5LCAyOCwgMTYsIDIyNCwgMTYwLCA0OSwgMjgsIDE2LCAKLSAgICAyMTUsIDIwMCwgNDksIDI4LCAxNiwgMjE1LCAxOTcsIDQ5LCAyOCwgMTYsIDIyNCwgMTU3LCA0OSwgMjgsIDE2LCAyMTUsIAotICAgIDE5NSwgNDksIDI4LCAxNiwgMjI0LCAxNTYsIDQ5LCAyOCwgMTYsIDI0MiwgMTU4LCA0OSwgMjgsIDE2LCAyNTQsIDE0LCA0OSwgCi0gICAgMjgsIDE2LCAyNDUsIDYwLCAyNTQsIDE0LCA0OSwgMjgsIDE2LCAyMjYsIDEwNywgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjE2LCAKLSAgICAxODksIDI0NSwgNjksIDQ5LCAyOCwgMTYsIDIxNiwgMTg5LCAyNDUsIDI1LCA0OSwgMjgsIDE2LCAyMTYsIDE5MSwgMjU0LCAKLSAgICA2MywgNDksIDI4LCAxNiwgMjE2LCAxODQsIDIzNCwgMjQ3LCAyNTQsIDU1LCA0OSwgMjgsIDE2LCAyMzQsIDE5OSwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAKLSAgICAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMTgsIDE0NSwgNDksIDI4LCAxNiwgMjM0LCAzOCwgMjU0LCA5NiwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyMDIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzMywgMjM4LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgCi0gICAgMjU0LCAxNDksIDQ5LCAyOCwgMTYsIDIzMywgMjM4LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNTQsIDYyLCAyMjksIDk1LCAKLSAgICA0OSwgMjgsIDE2LCAyNTQsIDY0LCA0OSwgMjgsIDE2LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgMjE1LCAyMTAsIDQ5LCAyOCwgCi0gICAgMTYsIDIxNiwgMjI0LCA0OSwgMjgsIDE2LCAyMzQsIDIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDI0NSwgMTM0LCAyNTAsIDcxLCAKLSAgICA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyNDYsIDQyLCAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyMTUsIDIxMiwgCi0gICAgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjE2LCAyMzQsIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIAotICAgIDIzNiwgNywgMjUwLCA3MSwgNDksIDI4LCAxNiwgMjQyLCAxNTksIDIyOSwgOTYsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDI0MiwgCi0gICAgMTU5LCAyMjYsIDEsIDI1NCwgMTAsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjYsIDEsIDI0OCwgMjksIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjI1LCA0OSwgMjgsIDE2LCAyNDcsIDIyNiwgMjI2LCAxLCAyNTQsIDExLCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyMjYsIDIyNiwgMSwgMjU0LCAxMSwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjQ3LCAyMjYsIDIyNiwgMSwgMjQ4LCAKLSAgICAyOSwgNDksIDI4LCAxNiwgMjE1LCAyMTYsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDQ5LCAyOCwgMTYsIDIzNiwgMTQsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NywgMjQ2LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjI1LCAwLCAyNTQsIDE2LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDIxMSwgMjU0LCAxMywgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDI1NCwgMTYsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMzEsIAotICAgIDM0LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjMxLCA0NSwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDI0MiwgMTYwLCA0OSwgCi0gICAgMjgsIDE2LCAyNTQsIDIxMSwgMjQyLCAxNTcsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMjUsIDAsIDI0MiwgMTYwLCA0OSwgCi0gICAgMjgsIDE2LCAyMzEsIDE1MSwgMjI0LCAxNjUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjU0LCAxNTEsIAotICAgIDIyNCwgMTY1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDI0OCwgMjgsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMzEsIDE1MSwgMjU0LCAxNTEsIDI0OCwgMjgsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE1LCAyMDUsIAotICAgIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE1LCAyMTcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTYsIDIyOCwgCi0gICAgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTYsIDIyOCwgMjMzLCAzNSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIAotICAgIDIzMSwgMTUxLCAyMzMsIDM1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIyNSwgMzksIDI0MCwgMTA3LCA0OSwgCi0gICAgMjgsIDE2LCAyMzUsIDE2OSwgMjE2LCAyNTEsIDI0MCwgMTA4LCA0OSwgMjgsIDE2LCAyNTQsIDYwLCAyMTYsIDI1MSwgMjQwLCAKLSAgICAxMDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTcyLCAyMTYsIDIyNSwgNDksIDI4LCAxNiwgMjQ0LCAxNzIsIDIzMCwgMTQzLCA0OSwgCi0gICAgMjgsIDE2LCAyNDQsIDE3MiwgMjQ3LCAyMzAsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTQsIDEwLCAyNDAsIDEwNywgNDksIAotICAgIDI4LCAxNiwgMjMxLCAxNTEsIDIyNCwgMTY0LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIyNSwgMzksIDIxNiwgCi0gICAgMjI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjQyLCAxNTUsIDIzMCwgMjYsIDI1NCwgNjMsIDQ5LCAyOCwgMTYsIDI0MiwgCi0gICAgMTU1LCAyMzAsIDI2LCAyNDcsIDIwMCwgNDksIDI4LCAxNiwgMjQ1LCAxNDgsIDIzNCwgMjQ3LCAyNDMsIDIzNiwgMjEzLCAKLSAgICAxMjQsIDQ5LCAyOCwgMTYsIDIzNiwgMTMsIDQ5LCAyOCwgMTYsIDIzNiwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNTQsIAotICAgIDIyLCAyNDgsIDI3LCAyNDAsIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAxOTAsIDQ5LCAyOCwgMTYsIAotICAgIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI5LCAyMDMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMjksIDE5OCwgMjQwLCAxMDcsIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjE5LCAxMDIsIAotICAgIDI0NywgMjQzLCAyNDgsIDMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjM0LCAxODIsIDQ5LCAyOCwgMTYsIAotICAgIDI0MywgMjM2LCAyNDcsIDI0NCwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMjgsIDIzNCwgCi0gICAgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI4LCAyMzQsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0MywgMjM2LCAyMzEsIDE5MSwgMjUwLCA3MywgMjQ3LCAyMzAsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMzEsIDE5MSwgCi0gICAgMjUwLCA3MywgMjMwLCAxNDMsIDQ5LCAyOCwgMTYsIDI0NCwgMTIyLCAyMTksIDEwMiwgMjUwLCA3MywgMjE0LCA5LCA0OSwgCi0gICAgMjgsIDE2LCAyNDMsIDIzNiwgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNywgMTc5LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjI5LCAKLSAgICA5NywgNDksIDI4LCAxNiwgMjUwLCA3NCwgMjA5LCAyNDksIDQ5LCAyOCwgMTYsIDI1MCwgNzQsIDIzNCwgMzYsIDQ5LCAyOCwgCi0gICAgMTYsIDI1MCwgNzQsIDIxOSwgOSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0MCwgMTU0LCAyMTEsIDEwLCAyMTYsIDIyOSwgCi0gICAgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NSwgMTQ5LCAyNTQsIDg2LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMTUsIDIwNiwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNSwgMjA2LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE2LCAyMjksIDQ5LCAyOCwgCi0gICAgMTYsIDI0NywgMjM4LCAyNTQsIDY1LCAyNDYsIDQyLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIzMCwgMTQxLCAKLSAgICAyMTYsIDIzMywgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyNDcsIDIyMiwgMjQ1LCAzNiwgMjQ3LCAxMzksIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTUsIDIxNCwgMjI2LCAyMTEsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAKLSAgICAyNTQsIDY1LCAyNDYsIDQyLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjMwLCAxNDEsIDIxNiwgMjMzLCAyNDcsIAotICAgIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjQ3LCAyMjIsIDI0NSwgMzYsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIAotICAgIDEwLCAyMTUsIDIxNCwgMjI2LCAyMTEsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDMsIDQ5LCAyNDcsIDIzNywgNDksIDI4LCAKLSAgICAxNiwgMjQzLCA0OSwgMjExLCA5LCA0OSwgMjgsIDE2LCAyNDcsIDI0NSwgMjU0LCA2NSwgMjMwLCAxOTksIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjQ1LCAyNTQsIDY1LCAyMzEsIDczLCA0OSwgMjgsIDE2LCAyNDcsIDI0NSwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjQ1LCAyMTYsIDE4MiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDIxNiwgMTgyLCA0OSwgMjgsIDE2LCAyMTksIDE2MywgCi0gICAgMjE2LCAxODMsIDI0NywgMTg2LCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjE2LCAxODMsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2MywgMjE2LCAxODMsIDIxNiwgMjIyLCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDQsIDQ5LCAyOCwgMTYsIAotICAgIDIxOSwgMTYzLCAyNTMsIDI0NSwgMjQ3LCAxODYsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyNTMsIDI0NSwgMjE1LCAyMDcsIAotICAgIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyNTMsIDI0NSwgMjE2LCAyMjIsIDQ5LCAyOCwgMTYsIDI0NywgMjIzLCAyNDMsIDMwLCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIyOSwgMjI2LCAxMzQsIDQ5LCAyOCwgMTYsIDIxOCwgMTM3LCA0OSwgMjgsIDE2LCAyNTQsIDcsIAotICAgIDE5MCwgNDksIDI4LCAxNiwgMjU0LCA3LCAyMTMsIDEyNCwgNDksIDI4LCAxNiwgMjU0LCA3LCAyNDMsIDEzNSwgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA3LCAyNDgsIDMsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjM0LCAxODIsIDQ5LCAyOCwgMTYsIDI1NCwgNywgCi0gICAgMjEwLCAyMywgNDksIDI4LCAxNiwgMjU0LCA3LCAyMjgsIDIzMywgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDIyOSwgOTYsIAotICAgIDIzMSwgNDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAyMjksIDk2LCAyMzEsIDQ0LCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgCi0gICAgMjI5LCA5NiwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAyMjksIDk2LCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAzOCwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjksIDk2LCAyMzQsIDE5NiwgMjgsIDE2LCAyMTksIAotICAgIDE1NSwgMjUyLCAxMzUsIDI4LCAxNiwgNTIsIDI1MiwgMTM1LCAyOCwgMTYsIDQwLCAyNTIsIDEzNSwgMjgsIDE2LCAyMjMsIAotICAgIDUwLCA0MCwgMjUyLCAxMzUsIDI4LCAxNiwgMjQ4LCAxNTUsIDI1MiwgMTM1LCAyOCwgMTYsIDIxOSwgMjUxLCAyNTIsIDEzNSwgCi0gICAgMjgsIDE2LCA0MywgMjIzLCA3NywgNTAsIDI4LCAxNiwgNDQsIDIyMywgNzcsIDUwLCAyOCwgMTYsIDIyMywgNzcsIDI0NywgCi0gICAgMTE4LCAyOCwgMTYsIDI0OCwgMTk2LCAyMjEsIDE2MywgMjgsIDE2LCAyNDgsIDIyMiwgMjUwLCAyNDksIDI4LCAxNiwgMjIxLCAKLSAgICAxNjMsIDI4LCAxNiwgMjQ5LCAyMzQsIDI4LCAxNiwgMjIzLCA3NSwgMjQ0LCAxMTEsIDI4LCAxNiwgMjIzLCA3NSwgMjQ0LCAKLSAgICAxMTAsIDI4LCAxNiwgMjIzLCA3NSwgMjQ0LCAxMDksIDI4LCAxNiwgMjQ0LCAxMzEsIDI4LCAxNiwgMjQ0LCAxMzIsIDUxLCAKLSAgICAyOCwgMTYsIDI1MSwgMTQ4LCA3OCwgMjgsIDE2LCAyNTEsIDI0LCAyOCwgMTYsIDI1MSwgMTU5LCAyOCwgMTYsIDEyNywgMjgsIAotICAgIDE2LCAyMjYsIDE5MywgMjE4LCAxNjMsIDI4LCAxNiwgMjE1LCA1NywgMjE4LCAxNjMsIDI4LCAxNiwgMjE2LCAxNDIsIDIxOCwgCi0gICAgMTYzLCAyOCwgMTYsIDI0NCwgMTAsIDIxOCwgMTYzLCAyOCwgMTYsIDI0NCwgODAsIDIxOCwgMTYzLCAyOCwgMTYsIDIxOSwgCi0gICAgMTI0LCAyMTgsIDE2MywgMjgsIDE2LCAyMTksIDEyMiwgMjQzLCAyNTAsIDI4LCAxNiwgMjQ0LCA4LCAyNDMsIDI1MCwgMjgsIAotICAgIDE2LCAyNDMsIDIwMywgMjUwLCAxNCwgMjgsIDE2LCAyNDMsIDIwMywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgCi0gICAgMTYsIDI0MywgMjAzLCAyNTAsIDE1LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAxNiwgMjUxLCA2NywgMjUwLCAxNCwgMjgsIAotICAgIDE2LCAyNDUsIDcsIDI1MCwgMTQsIDI4LCAxNiwgMjQ1LCA3LCAyNTAsIDE1LCAyMjYsIDEzNiwgMjU0LCAxNDIsIDI4LCAxNiwgCi0gICAgMjQ1LCA3LCAyNTAsIDE1LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAxNiwgMjQ2LCA4MywgMjUwLCAxMywgMjgsIDE2LCAKLSAgICAyNDYsIDgzLCAyNTAsIDEyLCAyOCwgMTYsIDIzMCwgODUsIDIzMSwgOTAsIDIyMywgNjEsIDI4LCAxNiwgNTIsIDIyMCwgNzUsIAotICAgIDI4LCAxNiwgNTIsIDI0NCwgNjUsIDI4LCAxNiwgMjQ0LCA2NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjQ0LCA2NiwgMjQ2LCAKLSAgICAxMDYsIDI4LCAxNiwgMjI5LCAxODgsIDIxNCwgMTYzLCAyOCwgMTYsIDIyOSwgMTg4LCAyNDYsIDEwNiwgMjgsIDE2LCAyMjAsIAotICAgIDc2LCAyMTQsIDE2MywgMjgsIDE2LCAyMjAsIDc2LCAyNDYsIDEwNiwgMjgsIDE2LCAyMjQsIDIyLCAxMzgsIDIyMCwgNzUsIAotICAgIDI4LCAxNiwgMjI0LCAyMiwgMTM4LCAyNDQsIDY1LCAyOCwgMTYsIDI0OSwgMjE2LCAyMTYsIDg3LCAyOCwgMTYsIDI0OSwgCi0gICAgODUsIDIxNiwgODcsIDI4LCAxNiwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgMTYsIDIyNiwgMTM2LCAyNTIsIDEyMiwgMjgsIAotICAgIDE2LCAyMjQsIDQsIDI1NCwgMTQyLCAyOCwgMTYsIDIyNCwgNCwgMjUyLCAxMjIsIDI4LCAxNiwgMjMwLCA4OCwgMjIzLCA2MSwgCi0gICAgMjgsIDE2LCAyMTEsIDI1MSwgMjIzLCA2MSwgMjgsIDE2LCAxNjMsIDIyMywgNjEsIDI4LCAxNiwgMjI0LCAyMiwgMjIzLCAKLSAgICA2MSwgMjgsIDE2LCAyNDUsIDE4OSwgMjIzLCA2MSwgMjgsIDE2LCAyMTksIDExOCwgMjIzLCA2MSwgMjgsIDE2LCAyMTYsIAotICAgIDE2MCwgMjIzLCA2MSwgMjgsIDE2LCAyMTksIDExMCwgMjIzLCA2MSwgMjgsIDE2LCAxMjMsIDI0MCwgMjExLCAyMTUsIDcxLCAKLSAgICAyMjMsIDYxLCAyOCwgMTYsIDIxMSwgMTc5LCAyMjgsIDQzLCAyOCwgMTYsIDk2LCAyMjgsIDQzLCAyOCwgMTYsIDI1MCwgMzYsIAotICAgIDIxMSwgMTc5LCAyMjgsIDQzLCAyOCwgMTYsIDQyLCAyMjgsIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCA0MiwgMjI4LCA0NCwgCi0gICAgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIAotICAgIDIyOCwgNDQsIDEyMCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDQzLCAyMTEsIDI1MywgMjgsIDE2LCAKLSAgICAyMTUsIDIyNiwgMjI4LCA0NCwgNDMsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0NCwgMjExLCAyNTMsIAotICAgIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTI0LCAKLSAgICAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTI0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgCi0gICAgMjI4LCA0NCwgMTIwLCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyMCwgNDQsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIzMCwgMTI5LCAyMjgsIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMzAsIDEyOSwgMjI4LCA0NCwgMjUxLCAyMjEsIAotICAgIDI4LCAxNiwgMjE1LCAyMjMsIDIyOCwgNDQsIDEyNCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjMsIDIyOCwgNDQsIDEyNCwgCi0gICAgMjUxLCAyMjEsIDI4LCAxNiwgMjI2LCA0LCAyMjgsIDQzLCAyOCwgMTYsIDIxMywgMTMyLCAyMjgsIDQzLCAyOCwgMTYsIAotICAgIDIyOCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDIyNywgMjAzLCAyMjgsIDQzLCAyOCwgMTYsIDI0OSwgMjQxLCAyMjgsIDQ0LCAKLSAgICAyMTEsIDI1MywgMjgsIDE2LCAyNDksIDI0MSwgMjI4LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjUxLCAxNDYsIDI4LCAxNiwgCi0gICAgMjExLCAyNTEsIDIyOCwgNDcsIDI4LCAxNiwgMTYzLCAyMjgsIDQ3LCAyOCwgMTYsIDIyNCwgMjIsIDIyOCwgNDcsIDI4LCAKLSAgICAxNiwgMjQ1LCAxODksIDIyOCwgNDcsIDI4LCAxNiwgMjE5LCAxMTgsIDIyOCwgNDcsIDI4LCAxNiwgMjE2LCAxNjAsIDIyOCwgCi0gICAgNDcsIDI4LCAxNiwgMjE5LCAxMTAsIDIyOCwgNDcsIDI4LCAxNiwgMTIzLCAyNDAsIDIxMSwgMjE1LCA3MSwgMjI4LCA0NywgCi0gICAgMjgsIDE2LCAzOCwgMjE4LCAxMzksIDI4LCAxNiwgMzgsIDIxOCwgMjQwLCAyMTgsIDEzOSwgMjgsIDE2LCAzOCwgMjE1LCAKLSAgICAyMzQsIDI4LCAxNiwgMzgsIDIxNSwgMjMzLCAyOCwgMTYsIDM4LCAyMTUsIDIzMiwgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAKLSAgICAyMzQsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgMjMzLCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIDIzMiwgMjgsIDE2LCAzOCwgCi0gICAgMjUzLCAxODksIDI0NywgMTIwLCAyOCwgMTYsIDM4LCAyNDQsIDcyLCAyOCwgMTYsIDM4LCAyNDQsIDcxLCAyOCwgMTYsIDM4LCAKLSAgICAyNDQsIDcwLCAyOCwgMTYsIDM4LCAyNDQsIDY5LCAyOCwgMTYsIDM4LCAyNDQsIDY4LCAyOCwgMTYsIDI1MiwgNTgsIDI1MiwgCi0gICAgNzQsIDI4LCAxNiwgMjQ1LCAxNDMsIDI1MiwgNzQsIDI4LCAxNiwgMjUyLCA1OCwgMjE2LCAxMTEsIDI4LCAxNiwgMjQ1LCAKLSAgICAxNDMsIDIxNiwgMTExLCAyOCwgMTYsIDI1MiwgNTgsIDIxOSwgODAsIDI4LCAxNiwgMjQ1LCAxNDMsIDIxOSwgODAsIDI4LCAKLSAgICAxNiwgMjUyLCA1OCwgMjI1LCAxMTUsIDI4LCAxNiwgMjQ1LCAxNDMsIDIyNSwgMTE1LCAyOCwgMTYsIDM4LCAyNTUsIDE0LCAKLSAgICAyOCwgMTYsIDM4LCAyMTgsIDE2NSwgMjgsIDE2LCAzOCwgMjE2LCAyMzgsIDI4LCAxNiwgMzgsIDIxOCwgMTY2LCAyOCwgMTYsIAotICAgIDM4LCAyMzEsIDE2MiwgMjgsIDE2LCAzOCwgMjMxLCAxNjEsIDI4LCAxNiwgMzgsIDI1NSwgMTMsIDI4LCAxNiwgMzgsIDIzMiwgCi0gICAgMTEyLCAyOCwgMTYsIDI1MywgMjU0LCAyMTQsIDE2MywgMjgsIDE2LCAyNTMsIDI1NCwgMjQ2LCAxMDYsIDI4LCAxNiwgMzgsIAotICAgIDI0NywgMTM1LCAyOCwgMTYsIDM4LCAyMjIsIDIzMSwgMjgsIDE2LCAzOCwgMjQ0LCA1OCwgMjgsIDE2LCAzOCwgMjE5LCA3NiwgCi0gICAgMjgsIDE2LCAzOCwgMjUyLCAzOCwgMjgsIDE2LCAzOCwgNTIsIDIxNiwgMTksIDI4LCAxNiwgMzgsIDIxNSwgMjExLCAyMTYsIAotICAgIDE5LCAyOCwgMTYsIDIyMiwgMjM1LCAyOCwgMTYsIDIxOCwgNzUsIDI4LCAxNiwgMjEwLCAxNTksIDI4LCAxNiwgMjI1LCAKLSAgICAxMDcsIDI4LCAxNiwgMjMxLCAyNSwgMjgsIDE2LCAyNDQsIDE3LCAyOCwgMTYsIDI0OSwgMTM4LCAyOCwgMTYsIDI0OCwgNzgsIAotICAgIDI4LCAxNiwgMjQyLCAxNTAsIDIyOCwgNDgsIDIxOSwgOTUsIDI4LCAxNiwgMjQyLCAxNTAsIDIyOCwgNDgsIDIyOCwgNzUsIAotICAgIDIxOSwgOTUsIDI4LCAxNiwgMjE2LCAwLCAyOCwgMTYsIDIxNSwgOTUsIDI4LCAxNiwgMjM1LCAxOTMsIDIxNSwgOTUsIDI4LCAKLSAgICAxNiwgMjE1LCA5NiwgMjE5LCA5NSwgMjgsIDE2LCAyMTUsIDk2LCAyMTQsIDE2MywgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAKLSAgICAxMDIsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTksIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTgsIDI4LCAxNiwgMjI2LCAKLSAgICAxNDgsIDIxOCwgOTcsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTYsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTUsIDI4LCAKLSAgICAxNiwgMjI2LCAxNDgsIDIxOCwgOTQsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTMsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgCi0gICAgOTIsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgMTAxLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDEwMCwgMjgsIDE2LCAyNDEsIAotICAgIDI0NSwgMjgsIDE2LCAyMjksIDEwNSwgMjgsIDE2LCAyNDUsIDE0MywgNjQsIDIxOCwgMTMzLCAyOCwgMTYsIDI0OCwgNzEsIAotICAgIDIxOSwgOTUsIDI4LCAxNiwgMzgsIDEyNCwgMjUxLCAxNjksIDI4LCAxNiwgMzgsIDEyMCwgMjUxLCAxNjksIDI4LCAxNiwgCi0gICAgMzgsIDI0MiwgMCwgMjgsIDE2LCAzOCwgMjE5LCA2NywgMjI1LCA0MywgMjgsIDE2LCAyMjUsIDIxNiwgNzgsIDI4LCAxNiwgCi0gICAgMjI1LCAyMTYsIDEyMCwgNzgsIDI4LCAxNiwgMTYzLCAyMjUsIDIxNiwgNzgsIDI4LCAxNiwgMjQyLCAxODIsIDIxNCwgMTYzLCAKLSAgICAyOCwgMTYsIDI0MiwgMTgyLCAyNDYsIDEwNiwgMjgsIDE2LCAyLCAyNDQsIDEwMCwgMjgsIDE2LCAyNDgsIDE4MCwgMjgsIAotICAgIDE2LCAyNDgsIDE4MSwgMjU0LCAxNTQsIDI4LCAxNiwgMjMxLCAxMzMsIDI4LCAxNiwgMjMyLCAxMjksIDI4LCAxNiwgMjUxLCAKLSAgICAxNDMsIDI4LCAxNiwgMjIwLCAxNTQsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTU0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMzAsIAotICAgIDE4NCwgMjgsIDE2LCAyMzAsIDE4NSwgMjUxLCAyMjEsIDI4LCAxNiwgMjIwLCAxNDgsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgCi0gICAgMTQ4LCAyNTEsIDIyMSwgMjgsIDE2LCAyNDMsIDIyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjQzLCAyMjAsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIzMiwgMTMwLCAyMjUsIDE4MCwgMjIzLCA2MSwgMjgsIDE2LCAyMzIsIDEzMCwgMjM2LCA0LCAyMjMsIDYxLCAKLSAgICAyOCwgMTYsIDI1MSwgMTQ0LCAyMjMsIDYxLCAyOCwgMTYsIDIyMCwgMTU0LCAyMjMsIDYxLCAyOCwgMTYsIDIzMCwgMTg1LCAKLSAgICAyMjMsIDYxLCAyOCwgMTYsIDIyMCwgMTQ4LCAyMjMsIDYxLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMjUsIDE3OCwgMjQ5LCAxMDcsIAotICAgIDIyNCwgMTc0LCAyMjUsIDE3OSwgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjM2LCAKLSAgICAzLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMjUsIDE3OCwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMjUsIDE4MCwgMjQ3LCAyMTEsIAotICAgIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMjUsIDE3OSwgMjgsIDE2LCAyMTYsIDI0OSwgCi0gICAgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgMywgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgCi0gICAgMjI0LCAxNzQsIDIzNiwgNCwgMjQ3LCAyMTEsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAKLSAgICAyMzYsIDQsIDI0NywgMjEwLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjM2LCA0LCAKLSAgICAyNDcsIDIwOSwgMjgsIDE2LCAyNDksIDEzMywgMjgsIDE2LCAyNDIsIDEyNiwgMjUxLCA2NywgMjUwLCAxNCwgMjgsIDE2LCAKLSAgICAyNDIsIDEyNiwgMjQ1LCA3LCAyNTAsIDE0LCAyOCwgMTYsIDQyLCAyNTMsIDE1OCwgMjgsIDE2LCAyMTMsIDE1MSwgMjgsIAotICAgIDE2LCAyMjUsIDE0LCAyOCwgMTYsIDI1MCwgNSwgMjgsIDE2LCAyMjEsIDIwMywgMjgsIDE2LCAyNTAsIDksIDI4LCAxNiwgCi0gICAgMjE2LCA3LCAyOCwgMTYsIDIyNCwgMjQyLCAyOCwgMTYsIDIyNCwgMjQzLCAyNDQsIDYwLCAyOCwgMTYsIDIyMSwgMjA0LCAKLSAgICAyNDQsIDYwLCAyOCwgMTYsIDIxNiwgOCwgMjIzLCA1OCwgMjgsIDE2LCAyMjUsIDE2MywgMjE4LCA2NiwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjI5LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTgsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIwOCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjAxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTMsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDE4NywgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg2LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAxODUsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4NCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI4LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMjcsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyNiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjI1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyMywgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjIyLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjEsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIyMCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE5LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTcsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIxNiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMTQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxMywgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkyLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAxOTEsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMTg5LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyOSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjE4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5MywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxODUsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIyNywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjI2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMjUsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjIxLCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMjAsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxOSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjE0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxMiwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjExLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTAsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIwOSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA3LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDYsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIwNSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMDMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAwLCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxOTksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5OCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMTk3LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTYsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5NSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTk0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTIsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5MSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTkwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxODksIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE4OCwgMzgsIDI2LCAyOCwgMjE1LCAyMDgsIDM4LCAyNiwgMjgsIDIxNiwgMjIzLCAzOCwgMjYsIAotICAgIDI4LCAyMjUsIDE4OCwgMjYsIDI4LCAyMzMsIDMxLCAyMzAsIDE0MiwgMzEsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0MSwgCi0gICAgMjIyLCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDAsIDIxNCwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjIsIAotICAgIDI0MSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIyLCAyNDAsIDIxMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMywgMTgwLCAKLSAgICAzMSwgMjUwLCAxNzQsIDE4MCwgMzEsIDI0MywgMjI5LCAyNTAsIDM1LCAxODAsIDMxLCAyMzAsIDE3NywgMTgwLCAzMSwgCi0gICAgMjUyLCAxMzAsIDE4MCwgMzEsIDIzNCwgMTc5LCAyMTksIDc5LCAxODAsIDMxLCAyNDksIDE3OSwgMTgwLCAzMSwgMjUzLCAKLSAgICAyMzMsIDE4MCwgMzEsIDIyNiwgMTYzLCAxODAsIDMxLCAyNTEsIDE1MywgMjI2LCAxMzAsIDE4MCwgMzEsIDI0OCwgNzMsIAotICAgIDE3NywgMjQ3LCAxNzksIDE4MCwgMzEsIDI0NywgMTc2LCAxODAsIDMxLCAyMTAsIDIyMiwgMTgwLCAzMSwgMjM1LCAyNDcsIAotICAgIDE4MCwgMzEsIDIyNSwgMTk3LCAxODAsIDMxLCAyMjMsIDEyNywgMTgwLCAzMSwgMjQ5LCAxODksIDE4MCwgMzEsIDI0MSwgCi0gICAgNjAsIDI1MiwgMTg0LCAxODAsIDMxLCAyMTIsIDU5LCAxODAsIDMxLCAyNDQsIDM5LCAxODAsIDMxLCAyNTQsIDI0NiwgMTgwLCAKLSAgICAzMSwgMjIzLCA4OSwgMTgwLCAzMSwgMjIzLCA2NSwgMTgwLCAzMSwgMjQ1LCAyMjEsIDE4MCwgMzEsIDIzNSwgNTMsIDE4MCwgCi0gICAgMzEsIDI0OSwgMTg0LCAxODAsIDMxLCAyNDUsIDE0MiwgMTgwLCAzMSwgMjQ2LCA1MiwgMTgwLCAzMSwgMjUwLCAxNDUsIAotICAgIDE4MCwgMzEsIDI0OCwgODIsIDE4MCwgMzEsIDIzLCAyMjMsIDY0LCAxODAsIDMxLCAyMjYsIDgxLCAxODAsIDMxLCAyMzMsIAotICAgIDM0LCAxODAsIDMxLCAyNDksIDI1NCwgMTgwLCAzMSwgMjM0LCA3NywgMTgwLCAzMSwgMjQzLCA4NiwgMTgwLCAzMSwgMjE4LCAKLSAgICAxMTIsIDE4MCwgMzEsIDIyNCwgMTMwLCAxODAsIDMxLCAyNDMsIDIyOCwgMTgwLCAzMSwgMjIzLCA2NiwgMTgwLCAzMSwgCi0gICAgMjMzLCA3MSwgMTc3LCAyMzAsIDE1NywgMTgwLCAzMSwgMjIzLCA2MiwgMTgwLCAzMSwgMjQyLCAxNjgsIDIxNiwgNDIsIAotICAgIDIzMSwgNzYsIDE4MCwgMzEsIDI0NSwgMTQ0LCAxODAsIDMxLCAyMTgsIDEyNCwgMTgwLCAzMSwgMjQyLCAxMjgsIDE4MCwgCi0gICAgMzEsIDI0NSwgMTM2LCAxODAsIDMxLCAyMjUsIDIzNSwgMTgwLCAzMSwgMjIyLCAyMjUsIDE4MCwgMzEsIDI0NCwgNTksIAotICAgIDE4MCwgMzEsIDIxNCwgOCwgMTc3LCAyMTIsIDQ0LCAxODAsIDMxLCAyNDksIDE5MywgMTgwLCAzMSwgMjMxLCA4OSwgMTgwLCAKLSAgICAzMSwgMjQ1LCA2MSwgMTgwLCAzMSwgMjE0LCAxNzIsIDE4MCwgMzEsIDI0NywgMjEyLCAxODAsIDMxLCAyNTAsIDAsIDIzMCwgCi0gICAgMTEwLCAxODAsIDMxLCAyNDIsIDEwNiwgMTgwLCAzMSwgMjQzLCA4NywgMjM1LCAyNTUsIDE4MCwgMzEsIDIzMSwgMTQxLCAKLSAgICAxODAsIDMxLCAyNTUsIDEwLCAxODAsIDMxLCAyNDUsIDE1NywgMTgwLCAzMSwgMjQ2LCAxMDksIDE4MCwgMzEsIDIxMiwgNDIsIAotICAgIDE4MCwgMzEsIDIxOSwgMTUwLCAxODAsIDMxLCAyMzUsIDIyMiwgMTgwLCAzMSwgMjQ4LCA0MiwgMTgwLCAzMSwgMjQ4LCAKLSAgICAxNjAsIDE4MCwgMzEsIDI0NywgMjA4LCAxODAsIDMxLCAyNDUsIDI5LCAxODAsIDMxLCAyMjAsIDExNSwgMTgwLCAzMSwgCi0gICAgMjE4LCAxMjgsIDE4MCwgMzEsIDI0MiwgMiwgMTgwLCAzMSwgMjQ5LCAyMTIsIDE4MCwgMzEsIDI0OSwgMjUxLCAxODAsIDMxLCAKLSAgICAyNDQsIDE3NywgMTgwLCAzMSwgMjU0LCAyMTIsIDE4MCwgMzEsIDI0OSwgMjExLCAxODAsIDMxLCAyMjYsIDE5NywgMjE2LCAKLSAgICAxOTYsIDIxMywgMjQyLCAxODAsIDMxLCAyNDcsIDIzMiwgMTgwLCAzMSwgMjMzLCAxMjQsIDE4MCwgMzEsIDI0NCwgMTMsIAotICAgIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxMTAsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAKLSAgICAxMDUsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxNTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIAotICAgIDIxLCAxNjEsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxODksIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAKLSAgICAxNzQsIDIxLCAxOTQsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxOTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgCi0gICAgMjE0LCAxNzQsIDIxLCAxOTUsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAyMDAsIDI0OSwgMTQ5LCAyMjIsIAotICAgIDIwMiwgMjE2LCAyNDMsIDIxLCAxMTAsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxMDUsIDI0OSwgMTQ5LCAKLSAgICAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxNTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxNjEsIDI0OSwgCi0gICAgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxODksIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxOTQsIAotICAgIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxOTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAKLSAgICAxOTUsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAyMDAsIDExLCAyMywgNiwgNjEsIDExLCAyMywgNiwgCi0gICAgMjUzLCAxNTgsIDExLCAyMywgNiwgMjUxLCA2NiwgMTEsIDIzLCA2LCAyNDksIDYwLCAxMSwgMjMsIDYsIDc1LCAxMSwgMjMsIAotICAgIDYsIDI0NSwgNiwgMTEsIDIzLCA2LCAyNDMsIDIwMiwgMTEsIDIzLCA2LCAyNDIsIDYwLCAxMSwgMjMsIDYsIDczLCAxMSwgCi0gICAgMjMsIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIDYsIDIzNSwgMjMsIDExLCAyMywgNiwgMTU2LCAxMSwgMjMsIDYsIDE5MywgMTEsIAotICAgIDIzLCA2LCAyMzAsIDI1LCAxMSwgMjMsIDYsIDc2LCAxMSwgMjMsIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDYsIDIyNCwgOTYsIAotICAgIDExLCAyMywgNiwgMTUzLCAxMSwgMjMsIDYsIDIyMiwgOTEsIDExLCAyMywgNiwgMjE3LCAxNTIsIDExLCAyMywgNiwgNzAsIAotICAgIDExLCAyMywgNiwgMjE0LCAxMDUsIDExLCAyMywgNiwgMjEyLCA5OCwgMTEsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDIzLCA2LCAKLSAgICAyMTEsIDExNywgMTEsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCA0LCA2MSwgMTEsIDIzLCA0LCAyNTMsIDE1OCwgMTEsIAotICAgIDIzLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDQsIDI0OSwgNjAsIDExLCAyMywgNCwgNzUsIDExLCAyMywgNCwgMjQ1LCA2LCAxMSwgCi0gICAgMjMsIDQsIDI0MywgMjAyLCAxMSwgMjMsIDQsIDI0MiwgNjAsIDExLCAyMywgNCwgNzMsIDExLCAyMywgNCwgMjM1LCAxNDQsIAotICAgIDExLCAyMywgNCwgMjM1LCAyMywgMTEsIDIzLCA0LCAxNTYsIDExLCAyMywgNCwgMTkzLCAxMSwgMjMsIDQsIDIzMCwgMjUsIAotICAgIDExLCAyMywgNCwgNzYsIDExLCAyMywgNCwgMjI2LCAxMDUsIDExLCAyMywgNCwgMjI0LCA5NiwgMTEsIDIzLCA0LCAxNTMsIAotICAgIDExLCAyMywgNCwgMjIyLCA5MSwgMTEsIDIzLCA0LCAyMTcsIDE1MiwgMTEsIDIzLCA0LCA3MCwgMTEsIDIzLCA0LCAyMTQsIAotICAgIDEwNSwgMTEsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgCi0gICAgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzIsIDYsIDYxLCAxMSwgMzIsIDYsIDI1MywgMTU4LCAxMSwgMzIsIDYsIDI1MSwgNjYsIAotICAgIDExLCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDMyLCA2LCA3NSwgMTEsIDMyLCA2LCAyNDUsIDYsIDExLCAzMiwgNiwgMjQzLCAKLSAgICAyMDIsIDExLCAzMiwgNiwgMjQyLCA2MCwgMTEsIDMyLCA2LCA3MywgMTEsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDMyLCA2LCAKLSAgICAyMzUsIDIzLCAxMSwgMzIsIDYsIDE1NiwgMTEsIDMyLCA2LCAxOTMsIDExLCAzMiwgNiwgMjMwLCAyNSwgMTEsIDMyLCA2LCAKLSAgICA3NiwgMTEsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMzIsIDYsIDE1MywgMTEsIDMyLCA2LCAKLSAgICAyMjIsIDkxLCAxMSwgMzIsIDYsIDIxNywgMTUyLCAxMSwgMzIsIDYsIDcwLCAxMSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzIsIAotICAgIDYsIDIxMiwgOTgsIDExLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzMiwgNiwgMjEwLCAKLSAgICAxNTksIDExLCAzMiwgNCwgNjEsIDExLCAzMiwgNCwgMjUzLCAxNTgsIDExLCAzMiwgNCwgMjUxLCA2NiwgMTEsIDMyLCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMzIsIDQsIDc1LCAxMSwgMzIsIDQsIDI0NSwgNiwgMTEsIDMyLCA0LCAyNDMsIDIwMiwgMTEsIDMyLCAKLSAgICA0LCA3MywgMTEsIDMyLCA0LCAyMzUsIDE0NCwgMTEsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMzIsIDQsIDE1NiwgMTEsIDMyLCAKLSAgICA0LCAxOTMsIDExLCAzMiwgNCwgMjMwLCAyNSwgMTEsIDMyLCA0LCA3NiwgMTEsIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDMyLCAKLSAgICA0LCAyMjQsIDk2LCAxMSwgMzIsIDQsIDE1MywgMTEsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzIsIDQsIDIxNywgMTUyLCAxMSwgCi0gICAgMzIsIDQsIDcwLCAxMSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzIsIDQsIDIxMiwgOTgsIDExLCAzMiwgNCwgMjExLCAxNzgsIAotICAgIDExLCAzMiwgNCwgMjExLCAxMTcsIDExLCAzMiwgNCwgMjEwLCAxNTksIDExLCAyMywgMzIsIDYsIDYxLCAxMSwgMjMsIDMyLCAKLSAgICA2LCAyNTMsIDE1OCwgMTEsIDIzLCAzMiwgNiwgMjUxLCA2NiwgMTEsIDIzLCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDIzLCAzMiwgCi0gICAgNiwgNzUsIDExLCAyMywgMzIsIDYsIDI0NSwgNiwgMTEsIDIzLCAzMiwgNiwgMjQzLCAyMDIsIDExLCAyMywgMzIsIDYsIAotICAgIDI0MiwgNjAsIDExLCAyMywgMzIsIDYsIDczLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAKLSAgICAyMywgMTEsIDIzLCAzMiwgNiwgMTU2LCAxMSwgMjMsIDMyLCA2LCAxOTMsIDExLCAyMywgMzIsIDYsIDIzMCwgMjUsIDExLCAKLSAgICAyMywgMzIsIDYsIDc2LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDIzLCAKLSAgICAzMiwgNiwgMTUzLCAxMSwgMjMsIDMyLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDIzLCAzMiwgCi0gICAgNiwgNzAsIDExLCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyMTEsIDE3OCwgMTEsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCAKLSAgICA0LCA2MSwgMTEsIDIzLCAzMiwgNCwgMjUzLCAxNTgsIDExLCAyMywgMzIsIDQsIDI1MSwgNjYsIDExLCAyMywgMzIsIDQsIAotICAgIDI0OSwgNjAsIDExLCAyMywgMzIsIDQsIDc1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDYsIDExLCAyMywgMzIsIDQsIDI0MywgCi0gICAgMjAyLCAxMSwgMjMsIDMyLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDMyLCA0LCA3MywgMTEsIDIzLCAzMiwgNCwgMjM1LCAxNDQsIAotICAgIDExLCAyMywgMzIsIDQsIDIzNSwgMjMsIDExLCAyMywgMzIsIDQsIDE1NiwgMTEsIDIzLCAzMiwgNCwgMTkzLCAxMSwgMjMsIAotICAgIDMyLCA0LCAyMzAsIDI1LCAxMSwgMjMsIDMyLCA0LCA3NiwgMTEsIDIzLCAzMiwgNCwgMjI2LCAxMDUsIDExLCAyMywgMzIsIAotICAgIDQsIDIyNCwgOTYsIDExLCAyMywgMzIsIDQsIDE1MywgMTEsIDIzLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjE3LCAxNTIsIDExLCAyMywgMzIsIDQsIDcwLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNCwgMjEyLCAKLSAgICA5OCwgMTEsIDIzLCAzMiwgNCwgMjExLCAxNzgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDExOSwgNiwgNjEsIDExLCAxMTksIDYsIDI1MSwgNjYsIDExLCAxMTksIDYsIDI0OSwgNjAsIDExLCAxMTksIAotICAgIDYsIDI0MywgMjAyLCAxMSwgMTE5LCA2LCAyMzUsIDE0NCwgMTEsIDExOSwgNiwgMjM1LCAyMywgMTEsIDExOSwgNiwgMjMwLCAKLSAgICAyNSwgMTEsIDExOSwgNiwgNzYsIDExLCAxMTksIDYsIDIyNiwgMTA1LCAxMSwgMTE5LCA2LCAyMjQsIDk2LCAxMSwgMTE5LCAKLSAgICA2LCAyMjIsIDkxLCAxMSwgMTE5LCA2LCAyMTcsIDE1MiwgMTEsIDExOSwgNiwgNzAsIDExLCAxMTksIDYsIDIxNCwgMTA1LCAKLSAgICAxMSwgMTE5LCA2LCAyMTIsIDk4LCAxMSwgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDExOSwgNiwgMjExLCAxMTcsIDExLCAxMTksIAotICAgIDYsIDIxMCwgMTU5LCAxMSwgMTE5LCA0LCA2MSwgMTEsIDExOSwgNCwgMjUzLCAxNTgsIDExLCAxMTksIDQsIDI1MSwgNjYsIAotICAgIDExLCAxMTksIDQsIDI0OSwgNjAsIDExLCAxMTksIDQsIDI0NSwgNiwgMTEsIDExOSwgNCwgMjQyLCA2MCwgMTEsIDExOSwgNCwgCi0gICAgNzMsIDExLCAxMTksIDQsIDIzNSwgMTQ0LCAxMSwgMTE5LCA0LCAyMzUsIDIzLCAxMSwgMTE5LCA0LCAxNTYsIDExLCAxMTksIAotICAgIDQsIDE5MywgMTEsIDExOSwgNCwgMjMwLCAyNSwgMTEsIDExOSwgNCwgMjI2LCAxMDUsIDExLCAxMTksIDQsIDIyNCwgOTYsIAotICAgIDExLCAxMTksIDQsIDE1MywgMTEsIDExOSwgNCwgMjIyLCA5MSwgMTEsIDExOSwgNCwgMjE3LCAxNTIsIDExLCAxMTksIDQsIAotICAgIDcwLCAxMSwgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDExOSwgNCwgMjExLCAxNzgsIDExLCAKLSAgICAxMTksIDQsIDIxMSwgMTE3LCAxMSwgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDYsIDYxLCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjUzLCAxNTgsIDExLCAyMywgMTE5LCA2LCAyNTEsIDY2LCAxMSwgMjMsIDExOSwgNiwgMjQ5LCA2MCwgMTEsIDIzLCAKLSAgICAxMTksIDYsIDc1LCAxMSwgMjMsIDExOSwgNiwgMjQ1LCA2LCAxMSwgMjMsIDExOSwgNiwgMjQzLCAyMDIsIDExLCAyMywgCi0gICAgMTE5LCA2LCAyNDIsIDYwLCAxMSwgMjMsIDExOSwgNiwgNzMsIDExLCAyMywgMTE5LCA2LCAyMzUsIDE0NCwgMTEsIDIzLCAKLSAgICAxMTksIDYsIDIzNSwgMjMsIDExLCAyMywgMTE5LCA2LCAxNTYsIDExLCAyMywgMTE5LCA2LCAxOTMsIDExLCAyMywgMTE5LCAKLSAgICA2LCAyMzAsIDI1LCAxMSwgMjMsIDExOSwgNiwgNzYsIDExLCAyMywgMTE5LCA2LCAyMjYsIDEwNSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIyNCwgOTYsIDExLCAyMywgMTE5LCA2LCAxNTMsIDExLCAyMywgMTE5LCA2LCAyMjIsIDkxLCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjE3LCAxNTIsIDExLCAyMywgMTE5LCA2LCA3MCwgMTEsIDIzLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjEyLCA5OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxMTcsIDExLCAyMywgMTE5LCAKLSAgICA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDQsIDYxLCAxMSwgMjMsIDExOSwgNCwgMjUzLCAxNTgsIDExLCAyMywgMTE5LCAKLSAgICA0LCAyNTEsIDY2LCAxMSwgMjMsIDExOSwgNCwgMjQ5LCA2MCwgMTEsIDIzLCAxMTksIDQsIDc1LCAxMSwgMjMsIDExOSwgNCwgCi0gICAgMjQ1LCA2LCAxMSwgMjMsIDExOSwgNCwgMjQzLCAyMDIsIDExLCAyMywgMTE5LCA0LCAyNDIsIDYwLCAxMSwgMjMsIDExOSwgCi0gICAgNCwgNzMsIDExLCAyMywgMTE5LCA0LCAyMzUsIDE0NCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMjMsIDExLCAyMywgMTE5LCA0LCAKLSAgICAxNTYsIDExLCAyMywgMTE5LCA0LCAxOTMsIDExLCAyMywgMTE5LCA0LCAyMzAsIDI1LCAxMSwgMjMsIDExOSwgNCwgNzYsIAotICAgIDExLCAyMywgMTE5LCA0LCAyMjYsIDEwNSwgMTEsIDIzLCAxMTksIDQsIDIyNCwgOTYsIDExLCAyMywgMTE5LCA0LCAxNTMsIAotICAgIDExLCAyMywgMTE5LCA0LCAyMjIsIDkxLCAxMSwgMjMsIDExOSwgNCwgMjE3LCAxNTIsIDExLCAyMywgMTE5LCA0LCA3MCwgCisgICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjIsIDkwLCAxMiwgMTMsIDIyMiwgODksIDEyLCAKKyAgICAxMywgMjIyLCA4OCwgMTIsIDEzLCAyMjIsIDg3LCAxMiwgMTMsIDIyMiwgODYsIDEyLCAxMywgMjIyLCA4NSwgMTIsIDEzLCAKKyAgICAyMjIsIDg0LCAxMiwgMTMsIDIyMiwgODMsIDEyLCAxMywgMjIyLCA4MiwgMTIsIDEzLCAyMjIsIDgxLCAxMiwgMTMsIDIyMiwgCisgICAgODAsIDEyLCAxMywgMjIyLCA3OSwgMTIsIDEzLCAyMjIsIDc4LCAxMiwgMTMsIDIyMiwgNzcsIDEyLCAxMywgMjIyLCA3NiwgCisgICAgMTIsIDEzLCAyMjIsIDc1LCAxMiwgMTMsIDIyMiwgNzQsIDEyLCAxMywgMjIyLCA3MywgMTIsIDEzLCAyMjIsIDcyLCAxMiwgCisgICAgMTMsIDIyMiwgNzEsIDEyLCAxMywgMjIyLCA3MCwgMTIsIDEzLCAyMjIsIDY5LCAxMiwgMTMsIDIyMiwgNjgsIDEyLCAxMywgCisgICAgMjIyLCA2NywgMTIsIDEzLCAyMjIsIDY2LCAxMiwgMTMsIDIyMiwgNjUsIDEyLCAxMywgMjIyLCA2NCwgMTIsIDEzLCAyMjIsIAorICAgIDYzLCAxMiwgMTMsIDIyMiwgNjIsIDEyLCAxMywgMjIyLCA2MSwgMTIsIDEzLCAyMjIsIDYwLCAxMiwgMTMsIDIyMiwgNTksIAorICAgIDEyLCAxMywgMjIyLCA1OCwgMTIsIDEzLCAyMjIsIDU3LCAxMiwgMTMsIDIyMiwgNTYsIDEyLCAxMywgMjIyLCA1NSwgMTIsIAorICAgIDEzLCAyMjIsIDU0LCAxMiwgMTMsIDIyMiwgNTMsIDEyLCAxMywgMjIyLCA1MiwgMTIsIDEzLCAyMjIsIDUxLCAxMiwgMTMsIAorICAgIDIyMiwgNTAsIDEyLCAxMywgMjIyLCA0OSwgMTIsIDEzLCAyMjIsIDQ4LCAxMiwgMTMsIDIyMiwgNDcsIDEyLCAxMywgMjIyLCAKKyAgICA0NiwgMTIsIDEzLCAyMjIsIDQ1LCAxMiwgMTMsIDIyMiwgNDQsIDEyLCAxMywgMjIyLCA0MywgMTIsIDEzLCAyMjIsIDQyLCAKKyAgICAxMiwgMTMsIDIyMiwgNDEsIDEyLCAxMywgMjIyLCA0MCwgMTIsIDEzLCAyMjIsIDM5LCAxMiwgMTMsIDIyMiwgMzgsIDEyLCAKKyAgICAxMywgMjIyLCAzNywgMTIsIDEzLCAyMTcsIDE1MSwgMTIsIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIAorICAgIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIAorICAgIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIAorICAgIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIAorICAgIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIAorICAgIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIAorICAgIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIAorICAgIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIAorICAgIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIAorICAgIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIAorICAgIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIAorICAgIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAKKyAgICAyMTUsIDE5LCAxMiwgMTMsIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgCisgICAgMTUsIDEyLCAxMywgMjE1LCAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgCisgICAgMTIsIDEzLCAyMTUsIDEwLCAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIAorICAgIDIxNSwgNiwgMTIsIDEzLCAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIAorICAgIDEyLCAxMywgMjE1LCAxLCAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIAorICAgIDEzLCAyMTQsIDI1MywgMTIsIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIAorICAgIDEzLCAyMTQsIDI0OSwgMTIsIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIAorICAgIDEzLCAyMTQsIDI0NSwgMTIsIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIAorICAgIDEzLCAyMTQsIDI0MSwgMTIsIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIAorICAgIDEzLCAyMTQsIDIzNywgMTIsIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIAorICAgIDEzLCAyMTQsIDIzMywgMTIsIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIAorICAgIDEzLCAyMTQsIDEwMiwgMTIsIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgCisgICAgMTMsIDIxNCwgOTgsIDEyLCAxMywgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgCisgICAgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIAorICAgIDkwLCAxMiwgMTMsIDIxNCwgODksIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIAorICAgIDEyLCAxMywgMjE0LCA4NSwgMTIsIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIAorICAgIDEzLCAyMTQsIDgxLCAxMiwgMTMsIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIAorICAgIDIxNCwgNzcsIDEyLCAxMywgMjE0LCA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCAKKyAgICA3MywgMTIsIDEzLCAyMTQsIDcyLCAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAKKyAgICAxMiwgMTMsIDIxNCwgNjgsIDEyLCAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAKKyAgICAxMywgMjE0LCA2NCwgMTIsIDEzLCAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAKKyAgICAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgCisgICAgNTYsIDEyLCAxMywgMjE0LCA1NSwgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgCisgICAgMTIsIDEzLCAyMTQsIDUxLCAxMiwgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgCisgICAgMTMsIDIxNCwgNDcsIDEyLCAxMywgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgCisgICAgMjE0LCA0MywgMTIsIDEzLCAyMTQsIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIAorICAgIDM5LCAxMiwgMTMsIDIxNCwgMzgsIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIAorICAgIDEyLCAxMywgMjE0LCAzNCwgMTIsIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIAorICAgIDEzLCAyMTQsIDMwLCAxMiwgMTMsIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIAorICAgIDIxMiwgOTYsIDEyLCAxMywgMjEyLCA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCAKKyAgICA5MiwgMTIsIDEzLCAyMTIsIDkxLCAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAKKyAgICAxMiwgMTMsIDIxMiwgODcsIDEyLCAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAKKyAgICAxMywgMjEyLCA4MywgMTIsIDEzLCAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAKKyAgICAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgCisgICAgNzUsIDEyLCAxMywgMjEyLCA3NCwgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgCisgICAgMTIsIDEzLCAyMTIsIDcwLCAxMiwgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgCisgICAgMTMsIDIxMiwgNjYsIDEyLCAxMywgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAKKyAgICAxMywgMjExLCAxNzQsIDEyLCAxMywgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAKKyAgICAxMywgMjExLCAxNzAsIDEyLCAxMywgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAKKyAgICAxMywgMjExLCAxNjYsIDEyLCAxMywgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAKKyAgICAxMywgMjExLCAxMTIsIDEyLCAxMywgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAKKyAgICAxMywgMjExLCAxMDgsIDEyLCAxMywgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAKKyAgICAxMywgMjEwLCAxNTYsIDEyLCAxMywgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAKKyAgICAxMywgMjEwLCAxNTIsIDEyLCAxMywgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAKKyAgICAxMywgMjEwLCAxNDgsIDEyLCAxMywgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAKKyAgICAxMywgMjEwLCAxNDQsIDEyLCAxMywgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAKKyAgICAxMywgMjEwLCAxNDAsIDEyLCAxMywgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAKKyAgICAxMywgMjEwLCAxMzYsIDEyLCAxMywgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAKKyAgICAxMywgMjEwLCAxMzIsIDEyLCAxMywgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAKKyAgICAxMywgMjEwLCAxMjgsIDEyLCAxMywgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAKKyAgICAxMywgMjEwLCAxMjQsIDEyLCAxMywgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAKKyAgICAxMywgMjEwLCAxMjAsIDEyLCAxMywgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA4MSwgMTIsIAorICAgIDEzLCAyNTUsIDgwLCAxMiwgMTMsIDI1NSwgNzksIDEyLCAxMywgMjU1LCA3OCwgMTIsIDEzLCAyNTUsIDc3LCAxMiwgMTMsIAorICAgIDI1NSwgNzYsIDEyLCAxMywgMjU1LCA3NSwgMTIsIDEzLCAyNTUsIDc0LCAxMiwgMTMsIDI1NSwgNzMsIDEyLCAxMywgMjU1LCAKKyAgICA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAKKyAgICAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAKKyAgICAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAKKyAgICAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgCisgICAgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgCisgICAgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgNDksIDEyLCAxMywgMjU1LCA0OCwgMjAsIDEsIDE2NywgMjI5LCAxNywgCisgICAgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjQzLCA3NywgMjQ0LCA0NCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIzMSwgMjIsIAorICAgIDIyNSwgNjAsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMjksIDIzMSwgCisgICAgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjE5LCAyMjMsIDIwLCAxLCAxNjcsIDIxNiwgNjcsIDIzMSwgMjEsIDIwLCAxLCAxNjcsIAorICAgIDIyNywgMTIyLCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyMjAsIDIxLCAyMjYsIDk0LCAyMjgsIDE3NCwgMjAsIDEsIDE2NywgCisgICAgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgMTc1LCAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjI2LCA5NCwgMjI4LCAKKyAgICAxNzUsIDIyNSwgNjEsIDIwLCAxLCAxNjcsIDIzMSwgMjIzLCAyMCwgMSwgMTY3LCAyMTUsIDEyMCwgMjMxLCAyMjQsIDIwLCAKKyAgICAxLCAxNjcsIDIyOSwgNzYsIDIwLCAxLCAxNjcsIDIzMSwgMjIwLCAyMCwgMSwgMTY3LCAyMzEsIDE4MSwgMjAsIDEsIDE2NywgCisgICAgMjMwLCA1MywgMjAsIDEsIDE2NywgMjIwLCAxMjYsIDIwLCAxLCAxNjcsIDIyNywgMjQ2LCAyMCwgMSwgMTY3LCAyMzQsIAorICAgIDE1NSwgMjAsIDEsIDE2NywgMjI4LCAxNDMsIDIwLCAxLCAxNjcsIDIxOCwgNSwgMjAsIDEsIDE2NywgMjI5LCAxNiwgMjAsIAorICAgIDEsIDE2NywgMjMzLCA5MywgMjAsIDEsIDE2NywgMjMzLCAxOCwgMjMzLCAxOTUsIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAKKyAgICAyMzEsIDI5LCAyMCwgMSwgMTY3LCAyMzEsIDIyNywgMjAsIDEsIDE2NywgMjI1LCAyNTAsIDIwLCAxLCAxNjcsIDI0MiwgCisgICAgMjM4LCAyMCwgMSwgMTY3LCAyMjYsIDU0LCAyMCwgMSwgMTY3LCAyMzAsIDE1NiwgMjI5LCA1MCwgMjAsIDEsIDE2NywgMjI3LCAKKyAgICAxMDMsIDIzMSwgMzIsIDIwLCAxLCAxNjcsIDEwNCwgMjEwLCAxODgsIDIyOSwgMjI1LCAyMCwgMSwgMTY3LCAyNDIsIDIzOSwgCisgICAgMjAsIDEsIDE2NywgMjI3LCAyNTMsIDIyNywgMjU0LCAyMCwgMSwgMTY3LCAyMTksIDEzMCwgMjAsIDEsIDE2NywgMjMxLCAKKyAgICAxNCwgMjAsIDEsIDE2NywgMjMxLCAzNSwgMjAsIDEsIDE2NywgMjMwLCAxMzUsIDIwLCAxLCAxNjcsIDIzNCwgMjU1LCAyMCwgCisgICAgMSwgMTY3LCAyMjYsIDk0LCAyMzMsIDUzLCAyMCwgMSwgMTY3LCAyMjksIDE1NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI1LCAKKyAgICAxNjEsIDIwLCAxLCAxNjcsIDIzMSwgMjIxLCAyMCwgMSwgMTY3LCAyMjgsIDIxMiwgMjAsIDEsIDE2NywgMjI0LCAxMzcsIAorICAgIDIwLCAxLCAxNjcsIDIxNSwgMTE3LCAyMCwgMSwgMTY3LCAyMzIsIDk5LCAyMCwgMSwgMTY3LCAyMTksIDQzLCAyMCwgMSwgCisgICAgMTY3LCAyMTYsIDIxNywgMjAsIDEsIDE2NywgMjMxLCAyMTgsIDIwLCAxLCAxNjcsIDIzNCwgMTYyLCAyMCwgMSwgMTY3LCAKKyAgICAyMjksIDE1MCwgMjAsIDEsIDE2NywgMjMzLCAyMDcsIDIwLCAxLCAxNjcsIDIzMCwgMTM2LCAyMCwgMSwgMTY3LCAyMTksIAorICAgIDIyMCwgMjAsIDEsIDE2NywgMjMyLCAxNDQsIDIwLCAxLCAxNjcsIDI0NCwgMTAxLCAyMCwgMSwgMTY3LCAyMjIsIDIwMSwgCisgICAgMjAsIDEsIDE2NywgMjMzLCAyNDcsIDIwLCAxLCAxNjcsIDIxOSwgMzksIDIwLCAxLCAxNjcsIDIzMSwgMTc4LCAyMjUsIAorICAgIDEwMiwgMjAsIDEsIDE2NywgMjIwLCAxNCwgMjAsIDEsIDE2NywgMjI3LCAyNTIsIDIwLCAxLCAxNjcsIDIxOSwgMjU1LCAKKyAgICAyMjgsIDcsIDIxMCwgMTk2LCAyMCwgMSwgMTY3LCAyMjcsIDE0MiwgMjMwLCAxNTMsIDIwLCAxLCAxNjcsIDIyNiwgODksIAorICAgIDIwLCAxLCAxNjcsIDIyOCwgMTQ0LCAyMCwgMSwgMTY3LCAyMTQsIDE3MCwgMjAsIDEsIDE2NywgMjI5LCA1MywgMjAsIDEsIAorICAgIDE2NywgMjMxLCAyMTcsIDIwLCAxLCAxNjcsIDIyOCwgMTg2LCAyMCwgMSwgMTY3LCAyMzEsIDEyNCwgMjAsIDEsIDE2NywgCisgICAgMjI3LCAxNTUsIDIwLCAxLCAxNjcsIDIxNiwgMjIxLCAyMCwgMSwgMTY3LCAyMTksIDM2LCAyMCwgMSwgMTY3LCAyMjYsIDkwLCAKKyAgICAyMCwgMSwgMTY3LCAyMjgsIDExLCAyMCwgMSwgMTY3LCAyMzEsIDIyNSwgMjAsIDEsIDE2NywgMjI3LCAxNTIsIDIwLCAxLCAKKyAgICAxNjcsIDIzNCwgMjIyLCAyMCwgMSwgMTY3LCAyMjgsIDE0LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgCisgICAgMjMyLCAxMDMsIDIwLCAxLCAxNjcsIDIyOSwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDIwMSwgMjAsIDEsIDE2NywgMjMxLCAKKyAgICAxMjMsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCA5LCAyMCwgMSwgMjI1LCAxNDEsIDIxNSwgMTIwLCAyMzEsIDIyMiwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMTksIDE4NywgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDEzMCwgMjE1LCAxMTksIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjMyLCAxNDYsIDIyNywgMjQ5LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTMwLCAyMzEsIDIyNiwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMzQsIDkzLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgMTUsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMjUsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjM0LCAyNDMsIDIwLCAxLCAyMjUsIDE0MSwgMjI1LCAyMTEsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCA4OSwgMjMzLCAKKyAgICA1MywgMjAsIDEsIDIyNSwgMTQxLCAyMzMsIDEwOSwgMjI4LCA3LCAyMjcsIDE2NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjcsIAorICAgIDI0NywgMjIwLCA0MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDEyMSwgMjI4LCAxODksIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAKKyAgICAyMzYsIDIwLCAxLCAyMjUsIDE0MSwgMjI1LCA1MiwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjI4LCA1LCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIyMCwgNDUsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxNDEsIDIyMCwgNDEsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjMxLCAyMiwgMjE2LCAyMjAsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMTIsIDIzMSwgMTI2LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIyNywgMTUzLCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE1MSwgMjAsIDEsIDIyNSwgMTQxLCAyNDIsIDIzNywgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE0NywgMjAsIDEsIDIyNSwgMTQxLCAyMzMsIDEzNSwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMjUsIDI1MywgMjAsIDEsIDIyNSwgMTQxLCAyMTMsIDE4MiwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDE4LCAyMzAsIDUxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNTIsIDIzMSwgMTA4LCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgMTkzLCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIyMiwgMTMsIDIwLCAxLCAyMjUsIDE0MSwgMjE3LCA5OCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDM0LCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzcsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAzOCwgMjMzLCA5MCwgMjAsIDEsIDIyNSwgCisgICAgMTQxLCAyMzEsIDI0LCAyMCwgMSwgMjI1LCAxNDEsIDIxOCwgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMTYsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjMwLCAxMzgsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAxNjcsIDIwLCAxLCAyMjUsIDE0MSwgMjI0LCAxNDEsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzMywgMjI5LCA1NCwgMjAsIDEsIDIyNSwgMTQxLCAyNDQsIDEzNCwgMjAsIDEsIDIyNSwgCisgICAgMTQxLCAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTQxLCAyNDQsIDE1NSwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE1OSwgMjAsIAorICAgIDEsIDIyNSwgMTQxLCAyMzEsIDI0NCwgMjI4LCAxNzgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTU0LCAyMCwgCisgICAgMSwgMjI1LCAxNDEsIDIzMywgMTcsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA2MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjgsIDE2LCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDE4NiwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDgwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNiwgCisgICAgMjAsIDEsIDEzNywgMjI5LCAxNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIyNywgMTIxLCAyMCwgMSwgMTM3LCAyMTAsIAorICAgIDE5NiwgMjAsIDEsIDEzNywgMjEyLCA1MywgMjAsIDEsIDEzNywgMjI5LCA1MywgMjAsIDEsIDEzNywgMjI5LCAxNDIsIDIwLCAKKyAgICAxLCAxMzcsIDIyOSwgMjQsIDIwLCAxLCAxMzcsIDI0MiwgMjQ2LCAyMCwgMSwgMTM3LCAyMzEsIDEyMCwgMjAsIDEsIDEzNywgCisgICAgMjQzLCA4NCwgMjAsIDEsIDEzNywgMjI3LCAxNDQsIDIzMCwgMTc1LCAyMzEsIDM2LCAyMCwgMSwgMTM3LCAyMjcsIDI0NSwgCisgICAgMjMxLCAxMTEsIDIwLCAxLCAxMzcsIDIzMSwgMTE3LCAyMCwgMSwgMTM3LCAyMjUsIDU4LCAyMCwgMSwgMTM3LCAyMjksIAorICAgIDEyNywgMjAsIDEsIDEzNywgMjMxLCAxMjgsIDI1MSwgMzcsIDIwLCAxLCAxMzcsIDIzNCwgMTQ5LCAyMCwgMSwgMTM3LCAKKyAgICAyNDIsIDI0NywgMjAsIDEsIDEzNywgMjM0LCAxNTYsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDgxLCAyMCwgMSwgCisgICAgMTM3LCAyMjcsIDExNSwgMjAsIDEsIDEzNywgMjMxLCAxMDUsIDIwLCAxLCAxMzcsIDIyOCwgMTUsIDIwLCAxLCAxMzcsIAorICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI1NSwgMjAsIDEsIDEzNywgMjM1LCAxNiwgCisgICAgMjAsIDEsIDEzNywgMjIwLCAxMjUsIDIwLCAxLCAxMzcsIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMTcsIDk2LCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDE1OCwgMjAsIDEsIDEzNywgMjE2LCA2NywgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgODAsIDIwLCAxLCAKKyAgICAxMzcsIDIyOSwgNDQsIDIyNywgMTY0LCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAyMDQsIDIwLCAKKyAgICAxLCAxMzcsIDIzMSwgMjQ0LCAyMzQsIDE1OCwgMjAsIDEsIDEzNywgMjI3LCAyNTQsIDIwLCAxLCAxMzcsIDIyOSwgMzksIAorICAgIDIwLCAxLCAxMzcsIDIzMywgOTQsIDIwLCAxLCAxMzcsIDIzMSwgMTEzLCAyMCwgMSwgMTM3LCAyMzEsIDEzLCAyMCwgMSwgCisgICAgMTM3LCAyMjcsIDI0OCwgMjAsIDEsIDEzNywgMjE2LCAyMTYsIDIwLCAxLCAxMzcsIDIyOSwgNDEsIDIwLCAxLCAxMzcsIAorICAgIDI0MywgMjQwLCAyMCwgMSwgMTM3LCAyMjksIDE0MSwgMjAsIDEsIDEzNywgMjI4LCAxNywgMjAsIDEsIDEzNywgMjI4LCAxMywgCisgICAgMjAsIDEsIDEzNywgMjUxLCAxMTUsIDIwLCAxLCAxMzcsIDIxMywgMTgzLCAyMCwgMSwgMTM3LCAyMzEsIDExOCwgMjAsIDEsIAorICAgIDEzNywgMjIyLCAxNDIsIDIwLCAxLCAxMzcsIDIyOCwgMTg4LCAyMCwgMSwgMTM3LCAyMzMsIDEwOCwgMjAsIDEsIDEzNywgCisgICAgMjE2LCA2NSwgMjAsIDEsIDEzNywgMjI3LCAyNTUsIDIyOSwgNiwgMjAsIDEsIDEzNywgMjI4LCAxODAsIDIwLCAxLCAxMzcsIAorICAgIDIzNCwgMTYyLCAyMCwgMSwgMTM3LCAyMjksIDQ1LCAyMCwgMSwgMTM3LCAyMzEsIDIxNywgMjAsIDEsIDEzNywgMjMxLCAKKyAgICAxMDYsIDIwLCAxLCAxMzcsIDIzMiwgMTAzLCAyMCwgMSwgMTM3LCAyMzMsIDE5NSwgMjAsIDEsIDEzNywgMjI4LCAxODYsIAorICAgIDIwLCAxLCAxMzcsIDIyOSwgNiwgMjAsIDEsIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgNDIsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMiwgMjAsIDEsIDEzNywgMjI3LCAyNTAsIDIwLCAxLCAxMzcsIDIzMywgMjA5LCAyMjgsIDE0NCwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAwLCAyMCwgMSwgMTM3LCAyMjksIDE0OSwgMjAsIDEsIDEzNywgMjMxLCAyNDQsIDIyOCwgNSwgMjAsIDEsIAorICAgIDEzNywgMjExLCAxMDMsIDIwLCAxLCAxMzcsIDIyOSwgMTQ4LCAyMCwgMSwgMTM3LCAyMTksIDIyMiwgMjAsIDEsIDEzNywgCisgICAgMjIwLCAxMjgsIDIwLCAxLCAxMzcsIDIzMSwgMTE0LCAyMCwgMSwgMTM3LCAyMzEsIDIyNCwgMjAsIDEsIDEzNywgMjMxLCAKKyAgICAxMjQsIDIwLCAxLCAxMzcsIDIzNCwgMTUwLCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjM0LCAxNTQsIAorICAgIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyMjUsIDEwNiwgMjAsIDEsIDEzNywgMjEwLCAxNzksIDIwLCAxLCAxMzcsIDIyOCwgCisgICAgMTc2LCAyMCwgMSwgMTM3LCAyMzAsIDIyNSwgMjAsIDEsIDEzNywgMjMwLCAxMDUsIDIwLCAxLCAxMzcsIDIyMCwgMTcsIDIwLCAKKyAgICAxLCAxMzcsIDIzNCwgMTcyLCAyMzMsIDc2LCAyMCwgMSwgMTM3LCAyMzQsIDE3MiwgMjQ0LCAxNjgsIDIwLCAxLCAxMzcsIAorICAgIDIyOSwgNzQsIDIwLCAxLCAxMzcsIDIyOSwgMjAxLCAyMCwgMSwgMTM3LCAyMzIsIDIwNiwgMjAsIDEsIDEzNywgMjI1LCA2OCwgCisgICAgMjAsIDEsIDEzNywgMjI1LCAyMDIsIDIwLCAxLCAxMzcsIDIxNiwgMjMxLCAyMCwgMSwgMTA3LCAyMzEsIDEwNCwgMjAsIDEsIAorICAgIDEwNywgMjEyLCA1MSwgMjAsIDEsIDEwNywgMjI4LCAxNzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOCwgCisgICAgMTcyLCAyMCwgMSwgMTA3LCAyMzIsIDI0MSwgMjAsIDEsIDEwNywgMjI4LCAxNzcsIDIwLCAxLCAxMDcsIDIyOCwgMTIsIDIwLCAKKyAgICAxLCAxMDcsIDIyOSwgNTksIDIwLCAxLCAxMDcsIDIyNywgMTY0LCAyMCwgMSwgMTA3LCAyMTEsIDE5NCwgMjAsIDEsIDEwNywgCisgICAgMjI5LCAxNCwgMjAsIDEsIDEwNywgMjIwLCA2MywgMjAsIDEsIDEwNywgMjI5LCAyNSwgMjAsIDEsIDEwNywgMjM0LCAxNTcsIAorICAgIDIwLCAxLCAxMDcsIDIxNiwgMjE4LCAyMCwgMSwgMTA3LCAyMjAsIDQzLCAyMCwgMSwgMTA3LCAyMjgsIDE4NSwgMjAsIDEsIAorICAgIDEwNywgMjE4LCA1MywgMjAsIDEsIDEwNywgMjM0LCAxNjIsIDIwLCAxLCAxMDcsIDIxMSwgOTEsIDIwLCAxLCAxMDcsIDIzMywgCisgICAgMjEwLCAyMCwgMSwgMTA3LCAyMjEsIDIzNiwgMjAsIDEsIDEwNywgMjMxLCAyNiwgMjAsIDEsIDEwNywgMjI5LCAxNDAsIDIwLCAKKyAgICAxLCAxMDcsIDIzMSwgMTkzLCAyMCwgMSwgMTA3LCAyMzEsIDMyLCAyMCwgMSwgMTA3LCAyMjAsIDEyNywgMjAsIDEsIDEwNywgCisgICAgMjExLCAzOSwgMjAsIDEsIDEwNywgMjI4LCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTUzLCAyMzEsIDEwNywgMjAsIDEsIAorICAgIDEwNywgMjI5LCAyMSwgMjAsIDEsIDEwNywgMjE1LCAxMTksIDIwLCAxLCAxMDcsIDI0MiwgMjU1LCAyMCwgMSwgMTA3LCAKKyAgICAyMjksIDExLCAyMCwgMSwgMTA3LCAyNDQsIDEzNSwgMjAsIDEsIDEwNywgMjI5LCAxNDQsIDIwLCAxLCAxMDcsIDIzMSwgNSwgCisgICAgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCAxMjYsIDIwLCAxLCAxMDcsIDIzMCwgMTUyLCAyMCwgMSwgCisgICAgMTA3LCAyMzEsIDksIDIwLCAxLCAxMDcsIDIyNCwgMTIxLCAyMCwgMSwgMTA3LCAyMzEsIDcsIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMjMsIDIwLCAxLCAxMDcsIDIzMiwgODksIDIwLCAxLCAxMDcsIDIyOCwgNCwgMjAsIDEsIDEwNywgMjMxLCAxMjcsIDIwLCAxLCAKKyAgICAxMDcsIDIzMywgMTg2LCAyMCwgMSwgMTA3LCAyMjcsIDE1NSwgMjAsIDEsIDEwNywgMjE2LCAyMjEsIDIwLCAxLCAxMDcsIAorICAgIDIxOSwgMzYsIDIwLCAxLCAxMDcsIDIxMCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1NCwgMjAsIDEsIDEwNywgMjIzLCAKKyAgICAxNzMsIDIwLCAxLCAxMDcsIDIxNywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMjIsIDIwLCAxLCAxMDcsIDIzMSwgMjgsIDIwLCAKKyAgICAxLCAxMDcsIDIyOCwgMywgMjAsIDEsIDEwNywgMjM0LCAxNTIsIDIwLCAxLCAxMDcsIDIyNSwgNjIsIDIwLCAxLCAxMDcsIAorICAgIDIyNSwgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDEzMSwgMjAsIDEsIDEwNywgMjMzLCAxNywgMjAsIDEsIDEwNywgMjI5LCA2MCwgCisgICAgMjAsIDEsIDEwNywgMjMxLCAyNSwgMjAsIDEsIDEwNywgMjI5LCAzNCwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAKKyAgICAxMDcsIDIyNiwgMjUsIDIwLCAxLCAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0OSwgMjAsIDEsIDEwNywgCisgICAgMjI3LCAyNDksIDIwLCAxLCAxMDcsIDIxOCwgODIsIDIwLCAxLCAxMDcsIDIzMywgMjE0LCAyMCwgMSwgMTA3LCAyMjksIDQ5LCAKKyAgICAyMCwgMSwgMTA3LCAyMjksIDE5LCAyMCwgMSwgMTA3LCAyMTUsIDEwMywgMjAsIDEsIDEwNywgMjMxLCAzNiwgMjAsIDEsIAorICAgIDEwNywgMjMzLCAyMDQsIDIwLCAxLCAxMDcsIDIyOCwgMSwgMjAsIDEsIDEwNywgMjE2LCAyMTksIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMjE5LCAyMCwgMSwgMTA3LCAyMjksIDU4LCAyMCwgMSwgMTA3LCAyMzMsIDEwLCAyMCwgMSwgMTA3LCAyMjksIDQwLCAyMCwgCisgICAgMSwgMTA3LCAyMjgsIDYsIDIwLCAxLCAxMDcsIDIyOCwgMTU4LCAyMCwgMSwgMTA3LCAyNDIsIDI0MCwgMjAsIDEsIDEwNywgCisgICAgMjMzLCAyMjMsIDIwLCAxLCAxMDcsIDIyMywgODcsIDIyNiwgMjEzLCAyMCwgMSwgMTA3LCAyMTcsIDg3LCAyMCwgMSwgMTA3LCAKKyAgICAyMTYsIDExLCAyMCwgMSwgMTA3LCAyMjcsIDE1MiwgMjAsIDEsIDEwNywgMjIyLCAyNDIsIDIwLCAxLCAxMDcsIDIzMywgNTUsIAorICAgIDIwLCAxLCAxMDcsIDIzMSwgODQsIDIwLCAxLCAxMDcsIDE5NCwgMjAsIDEsIDEwNywgMjE4LCA1LCAyMCwgMSwgMTA3LCAKKyAgICAyMzAsIDEwNywgMjAsIDEsIDEwNywgMjIwLCAyOSwgMjAsIDEsIDEwNywgMjIwLCAzOSwgMjAsIDEsIDEwNywgMjMzLCAxNjEsIAorICAgIDIwLCAxLCAxMDcsIDIyNywgMjQyLCAyMCwgMSwgMTA3LCAyMTksIDIyNywgMjAsIDEsIDEwNywgMjI3LCAyNTEsIDIwLCAxLCAKKyAgICAxMDcsIDIyNSwgMjE0LCAyMCwgMSwgMTA3LCAyMjgsIDIzOCwgMjAsIDEsIDEwNywgMjE5LCAyNTQsIDIwLCAxLCAxMDcsIAorICAgIDIyNCwgMTM2LCAyMCwgMSwgMTA3LCAyMzAsIDUxLCAyMCwgMSwgMTA3LCAyMzIsIDEyNSwgMjAsIDEsIDEwNywgMjIzLCA4NywgCisgICAgMjMwLCAxMDEsIDIwLCAxLCAxMDcsIDIxNiwgMTE4LCAyMCwgMSwgMTA3LCAyMjcsIDI0MywgMjAsIDEsIDEwNywgMjMxLCAKKyAgICAxMjgsIDE5OSwgMjAsIDEsIDEwNywgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDI0NCwgMjAzLCAyMCwgMSwgODIsIDIyOSwgCisgICAgMTQ4LCAyMCwgMSwgODIsIDIxNiwgMTcsIDIwLCAxLCA4MiwgMjMxLCAxMTcsIDIwLCAxLCA4MiwgMjMzLCA5NCwgMjAsIDEsIAorICAgIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAyMzIsIDEzMSwgMjAsIDEsIDgyLCAyMjYsIDkzLCAyMCwgMSwgODIsIDIxOSwgCisgICAgNDcsIDIwLCAxLCA4MiwgMjIzLCAxNDgsIDIwLCAxLCA4MiwgMjI4LCA4LCAyMCwgMSwgODIsIDIyOSwgMTE5LCAyMCwgMSwgCisgICAgODIsIDIyNCwgMTUwLCAyMCwgMSwgODIsIDIxNywgNjMsIDIwLCAxLCA4MiwgMjI5LCAyNywgMjAsIDEsIDgyLCAyMzMsIAorICAgIDI1MSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgMjAsIDEsIDgyLCAyMjEsIDE3MiwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgCisgICAgODIsIDIyNiwgOTAsIDIwLCAxLCA4MiwgMjE2LCAxOCwgMjAsIDEsIDgyLCAyMzMsIDIwOCwgMjAsIDEsIDgyLCAyMzIsIAorICAgIDE0NSwgMjAsIDEsIDgyLCAyMjgsIDExLCAyMCwgMSwgODIsIDIyOSwgMywgMjAsIDEsIDgyLCAyMzEsIDIyNSwgMjAsIDEsIAorICAgIDgyLCAyMjksIDIwLCAyMCwgMSwgODIsIDIyOSwgMiwgMjAsIDEsIDgyLCAyMjgsIDEwLCAyMCwgMSwgODIsIDIyMiwgMjQwLCAKKyAgICAyMCwgMSwgODIsIDIyOCwgMTc2LCAyMCwgMSwgODIsIDIyNSwgMjEzLCAyMCwgMSwgODIsIDIyMiwgMzMsIDIwLCAxLCA4MiwgCisgICAgMjI5LCAzNSwgMjAsIDEsIDgyLCAyMzEsIDE1LCAyMCwgMSwgODIsIDI0MiwgMjM0LCAyMCwgMSwgODIsIDIyOSwgMjMsIDIwLCAKKyAgICAxLCA4MiwgMjI4LCAxODcsIDIwLCAxLCA4MiwgMjMxLCAxNzcsIDIwLCAxLCA4MiwgMjMyLCAxMjcsIDIwLCAxLCA4MiwgCisgICAgMjI5LCA1NSwgMjAsIDEsIDgyLCAyMjksIDEzMiwgMjAsIDEsIDgyLCAyMTcsIDg2LCAyMjcsIDI0OSwgMjAsIDEsIDgyLCAKKyAgICAyMjAsIDEyOSwgMjAsIDEsIDgyLCAyMjQsIDE0NiwgMjAsIDEsIDgyLCAyMjksIDE1MiwgMjE5LCA1MywgMjAsIDEsIDgyLCAKKyAgICAyMjksIDQzLCAyMjcsIDE2NCwgMjAsIDEsIDgyLCAyMTEsIDQsIDIwLCAxLCA4MiwgMjQyLCAyMzUsIDIwLCAxLCA4MiwgCisgICAgMjE1LCAxMTgsIDIwLCAxLCA4MiwgMjExLCAxOSwgMjAsIDEsIDgyLCAyMjUsIDE5LCAyMCwgMSwgODIsIDIxNSwgMTA4LCAKKyAgICAyMCwgMSwgODIsIDIzNCwgMTYwLCAyMCwgMSwgODIsIDIxOCwgODEsIDIwLCAxLCA4MiwgMjE2LCAyMjAsIDIwLCAxLCA4MiwgCisgICAgMjEzLCAxODQsIDIwLCAxLCA4MiwgMjEyLCA2LCAyMCwgMSwgODIsIDIzMywgMTM4LCAyMCwgMSwgODIsIDIyNCwgMTUzLCAKKyAgICAyMCwgMSwgODIsIDIxNywgOTcsIDIwLCAxLCA4MiwgMjQyLCAyNTQsIDIwLCAxLCA4MiwgMjI5LCA2NCwgMjAsIDEsIDgyLCAKKyAgICAyMjAsIDQyLCAyMCwgMSwgODIsIDIzMSwgMTAsIDIwLCAxLCA4MiwgMjMxLCAxMjEsIDIwLCAxLCA4MiwgMjI3LCAxMTksIAorICAgIDIwLCAxLCA4MiwgMjI4LCAxNDEsIDIwLCAxLCA4MiwgMjQzLCA4MCwgMjAsIDEsIDgyLCAyMTUsIDEwOSwgMjAsIDEsIDgyLCAKKyAgICAyMzMsIDIxNywgMjAsIDEsIDgyLCAyMTEsIDY3LCAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTAsIDI0LCAyMCwgMSwgODIsIAorICAgIDIxMCwgMjUwLCAyMCwgMSwgODIsIDIzMSwgMjcsIDIwLCAxLCA4MiwgMjI5LCAxMzcsIDIwLCAxLCA4MiwgMjI1LCAxMDMsIAorICAgIDIwLCAxLCA4MiwgMjEwLCAxOTcsIDIwLCAxLCA4MiwgMjMzLCAxMiwgMjAsIDEsIDgyLCAyNDMsIDI0MCwgMjAsIDEsIDgyLCAKKyAgICAyNDMsIDc5LCAyMCwgMSwgODIsIDIyOSwgMTMsIDIwLCAxLCA4MiwgMjM0LCAxNjIsIDIwLCAxLCA4MiwgMjMxLCAyMjgsIAorICAgIDIwLCAxLCA4MiwgMjI5LCAyNiwgMjAsIDEsIDgyLCAyNDIsIDI0MSwgMjAsIDEsIDgyLCAyNDQsIDIwNCwgMjAsIDEsIDgyLCAKKyAgICAyMjcsIDI0NCwgMjAsIDEsIDgyLCAyMjUsIDE1NiwgMjAsIDEsIDgyLCAyMTEsIDE3LCAyMCwgMSwgODIsIDIyOSwgNTEsIAorICAgIDIwLCAxLCA4MiwgMjI3LCAxNTMsIDI1MiwgMzEsIDIwLCAxLCA4MiwgMjI3LCA5OSwgMjAsIDEsIDgyLCAyMjQsIDI1MCwgCisgICAgMjAsIDEsIDgyLCAyMzAsIDIyNSwgMjAsIDEsIDgyLCAyNDMsIDIzOCwgMjAsIDEsIDgyLCAyMjksIDIyNSwgMjAsIDEsIDgyLCAKKyAgICAyMzAsIDEwNSwgMjAsIDEsIDgyLCAyNDIsIDI0MCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgNzQsIDIwLCAxLCA4MiwgMjMwLCAKKyAgICA1MiwgMjAsIDEsIDgyLCAyMjQsIDE0OSwgMjAsIDEsIDgyLCAyMjksIDE1LCAyMCwgMSwgODIsIDIzMywgMTk1LCAyMCwgMSwgCisgICAgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIyNywgMjUyLCAyMCwgMSwgODIsIDIxMSwgMTgsIDIwLCAxLCA4MiwgMjI5LCAKKyAgICAzNiwgMjAsIDEsIDgyLCAyMjYsIDk0LCAyMjUsIDE5MCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjUxLCAyMywgMjAsIDEsIAorICAgIDgyLCAyNDQsIDQ1LCAyMCwgMSwgODIsIDIyOCwgMTgxLCAyMCwgMSwgODIsIDYxLCAyMCwgMSwgODIsIDIxNiwgMTEsIDIwLCAKKyAgICAxLCA4MiwgNzgsIDIwLCAxLCA4MiwgNzQsIDIwLCAxLCA4MiwgMjMzLCA5MiwgMjAsIDEsIDgyLCAyMjYsIDk0LCAyMjUsIAorICAgIDI2LCAyMCwgMSwgODIsIDIxNywgMTAyLCAyMCwgMSwgODIsIDIxNywgNTIsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIzMCwgCisgICAgMzksIDI0MCwgMjQxLCAyMCwgMSwgODIsIDIyMCwgMTcsIDIwLCAxLCA4MiwgMjExLCAxNCwgMjAsIDEsIDgyLCAyMjgsIAorICAgIDI1MiwgMjAsIDEsIDgyLCAyMTAsIDIwMiwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjE3LCAyNDEsIDIwLCAxLCA4MiwgMjEwLCAKKyAgICAyMjcsIDI0OSwgMTU1LCAyMCwgMSwgODIsIDIxMCwgMTg3LCAyMCwgMSwgODIsIDIxMCwgMTk1LCAyMCwgMSwgODIsIDIzNCwgCisgICAgMTQ4LCAyMCwgMSwgODIsIDIyNSwgMTU0LCAyMCwgMSwgODIsIDIyOCwgMTgyLCAyNDUsIDExMCwgMjAsIDEsIDgyLCAyMjQsIAorICAgIDE0NywgMjAsIDEsIDgyLCAyMTEsIDE5MiwgMjAsIDEsIDgyLCAyNDQsIDE1NSwgMjAsIDEsIDgyLCAyMTMsIDI1MCwgMjAsIAorICAgIDEsIDgyLCAyMzIsIDEwMywgMjAsIDEsIDgyLCAyMzAsIDIzNSwgMjAsIDEsIDgyLCAyMjMsIDU0LCAyMCwgMSwgODIsIDIyMywgCisgICAgMTc0LCAyMCwgMSwgODIsIDIyOCwgMjUxLCAyMCwgMSwgODIsIDIyOSwgODIsIDIwLCAxLCA4MiwgMjIwLCA5LCAyMCwgMSwgCisgICAgODIsIDIxOSwgMjU0LCAyMCwgMSwgODIsIDI0MywgMjQyLCAyMjMsIDg5LCAyMCwgMSwgODIsIDE5OCwgMjAsIDEsIDgyLCAKKyAgICAyMjUsIDExMSwgMjAsIDEsIDgyLCAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMzQsIDM0LCAyMCwgMSwgODIsIDIzMSwgNjMsIAorICAgIDIwLCAxLCA4MiwgMTg2LCAyMCwgMSwgODIsIDIzMSwgMTc0LCAyMCwgMSwgODIsIDIxNiwgMjIyLCAyMCwgMSwgODIsIDIzNCwgCisgICAgOTgsIDIwLCAxLCA4MiwgMjMwLCAxNTUsIDIwLCAxLCA4MiwgMjE2LCAyNDgsIDIwLCAxLCA4MiwgMjQ0LCAxNzcsIDIwLCAxLCAKKyAgICA4MiwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDE0MCwgMTc2LCAyMCwgMSwgMjI1LCAxNDAsIDY5LCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzMywgMjIzLCAyMCwgMSwgMjI1LCAxNDAsIDI0NSwgMjE3LCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMTExLCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIxNywgODcsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAxNTIsIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNDEsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjIyLCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCAzMiwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzEsIDg0LCAyMCwgMSwgMjI1LCAxNDAsIDIxNywgMTAyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgMTUxLCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIyOCwgMTg4LCAyMCwgMSwgMjI1LCAxNDAsIDE5NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTgsIDUsIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjIwLCAyOSwgMjAsIDEsIDIyNSwgMTQwLCAyMTksIDE5MywgMjAsIDEsIDIyNSwgMTQwLCAyMjAsIDEyNSwgCisgICAgMjAsIDEsIDIyNSwgMTQwLCAyMzMsIDE2MSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDE2MiwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMjcsIDIxMywgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIDI0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjgsIDE1OSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTQwLCAyMTksIDIyNywgMjAsIDEsIDIyNSwgMTQwLCAxOTIsIDIwLCAKKyAgICAxLCAyMjUsIDE0MCwgMjI4LCAxNCwgMjAsIDEsIDIyNSwgMTQwLCAyMjUsIDE1NCwgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIAorICAgIDI1MSwgMjAsIDEsIDIyNSwgMTQwLCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjUsIDIxNCwgMjAsIDEsIDIyNSwgCisgICAgMTQwLCAyMjIsIDE0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjgsIDIzOCwgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDU0LCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIzNCwgMTcxLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgMTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAKKyAgICA2MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjAsIDksIDIwLCAxLCAyMjUsIDE0MCwgMjI0LCAxNTAsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjQ0LCA0NSwgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDY1LCAyMCwgMSwgMjI1LCAxNDAsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAKKyAgICAxNDAsIDIzMiwgMTI1LCAyMCwgMSwgMjI1LCAxNDAsIDIzNCwgMzQsIDIwLCAxLCAyMjUsIDE0MCwgMjMxLCAxMTksIDIwLCAKKyAgICAxLCAyMjUsIDE0MCwgMjIzLCA4NiwgMjAsIDEsIDIyNSwgMTQwLCAxODYsIDIwLCAxLCAyMjUsIDE0MCwgMjMwLCAxNjYsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMxLCAxMjcsIDIwLCAxLCAyMjUsIDE0MCwgMjE2LCAyMzEsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjM0LCAxLCAyMCwgMSwgMjI1LCAxNDAsIDIyMSwgMjUzLCAyMCwgMSwgMjI1LCAxNDAsIDIxMiwgMTE1LCA5NSwgMSwgMTkxLCAKKyAgICA5NSwgMSwgMjUyLCAxOTksIDk1LCAxLCA4LCAxOTEsIDk1LCAxLCAyMjUsIDQ1LCA5NSwgMSwgMTg2LCA5NSwgMSwgMjMwLCAKKyAgICAyMzgsIDk1LCAxLCAyNTQsIDMxLCAxODYsIDk1LCAxLCAyNDQsIDIwNCwgOTUsIDEsIDIxNCwgMjcsIDk1LCAxLCAyMTMsIAorICAgIDE3NywgOTUsIDEsIDIxNywgMTA2LCA5NSwgMSwgMjQ4LCAyMjksIDk1LCAxLCA4LCAyMTUsIDE1NywgOTUsIDEsIDgsIDIxNywgCisgICAgMTA2LCA5NSwgMSwgMjE1LCAxNTcsIDk1LCAxLCAyNDgsIDE0MywgOTUsIDEsIDE5OCwgOTUsIDEsIDIyOCwgMjQyLCA5NSwgCisgICAgMSwgOCwgMjI4LCAxMTUsIDk1LCAxLCAyNTQsIDMxLCAxOTgsIDk1LCAxLCAyMjgsIDExNSwgOTUsIDEsIDIyOCwgMTAxLCAKKyAgICA5NSwgMSwgMjMzLCAxNDEsIDk1LCAxLCAyMzIsIDY2LCA5NSwgMSwgMjMzLCA0LCA5NSwgMSwgMjMyLCAyNDksIDk1LCAxLCAKKyAgICAyMTYsIDU3LCA5NSwgMSwgMjQ3LCAxNjEsIDk1LCAxLCAyMTYsIDQ5LCA5NSwgMSwgMjQ3LCAxNjAsIDk1LCAxLCAxNzYsIAorICAgIDk1LCAxLCAyNDMsIDE0MiwgOTUsIDEsIDgsIDE3NiwgOTUsIDEsIDIyNCwgOTEsIDk1LCAxLCAyMjQsIDY5LCA5NSwgMSwgCisgICAgMjI5LCA4MiwgOTUsIDEsIDIyOSwgMzMsIDk1LCAxLCAyNTQsIDMxLCAyMjksIDgyLCA5NSwgMSwgMTYyLCA5NSwgMSwgMjExLCAKKyAgICAxNjUsIDk1LCAxLCAyNDMsIDAsIDk1LCAxLCAyNDIsIDIzMywgOTUsIDEsIDIxNSwgMTY2LCA5NSwgMSwgMjQ2LCAzNCwgOTUsIAorICAgIDEsIDIyNywgMTY5LCA5NSwgMSwgMjI3LCAxNTQsIDk1LCAxLCAyMTUsIDE3NiwgOTUsIDEsIDI0NiwgNDEsIDk1LCAxLCA4LCAKKyAgICAyMTUsIDE3NiwgOTUsIDEsIDgsIDI0NiwgNDEsIDk1LCAxLCAyMjMsIDEwOSwgMjE1LCAxNzYsIDk1LCAxLCAyMjAsIDEwNCwgCisgICAgOTUsIDEsIDIxOCwgMjI1LCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgMTQsIDk1LCAxLCAyMTUsIDE4NCwgOTUsIDEsIAorICAgIDI0NiwgNDYsIDk1LCAxLCA4LCAyMTUsIDE4NCwgOTUsIDEsIDIwNiwgOTUsIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgCisgICAgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAyNTQsIDMxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgCisgICAgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgMSwgMjU0LCAyMTgsIDk1LCAxLCAyNDEsIDE5NiwgCisgICAgOTUsIDEsIDIyOSwgMTk3LCA5NSwgNSwgMjUzLCAyMzAsIDk1LCA1LCAyMjMsIDEwOSwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIAorICAgIDEwOSwgMjUzLCAyMzAsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgMjU1LCA4MiwgOTUsIDI1LCA1LCAyNTQsIDIxNCwgCisgICAgOTUsIDI1LCA1LCAyNTQsIDEzMSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCA3OCwgOTUsIDI1LCA1LCAyMjYsIAorICAgIDE4NywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIDk4LCA5NSwgMjUsIDUsIDc2LCA5NSwgMjUsIDUsIAorICAgIDI0NSwgMTU4LCA5NSwgMjUsIDUsIDI0NSwgMTQ2LCA5NSwgMjUsIDUsIDIyNiwgMjM2LCA5NSwgMjUsIDUsIDc0LCA5NSwgCisgICAgMjUsIDUsIDI0MCwgMTI2LCA5NSwgMjUsIDUsIDI0MCwgMTI1LCA5NSwgMjUsIDUsIDI0MCwgMTI0LCA5NSwgMjUsIDUsIAorICAgIDIzNSwgMTk2LCA5NSwgMjUsIDUsIDIzNiwgNjcsIDk1LCAyNSwgNSwgMjM2LCA0MCwgOTUsIDI1LCA1LCAyMzUsIDE2MiwgCisgICAgOTUsIDI1LCA1LCAyMzUsIDIzOCwgOTUsIDI1LCA1LCA2OSwgOTUsIDI1LCA1LCAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIAorICAgIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIAorICAgIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAKKyAgICAyNTIsIDk1LCAyNSwgNSwgMjU0LCAyNDgsIDk1LCAyNSwgNSwgMjQ1LCA5NCwgOTUsIDI1LCA1LCAyMjIsIDE4NSwgMjQ1LCAKKyAgICA5NCwgOTUsIDI1LCA1LCAyNDUsIDEwMCwgOTUsIDI1LCA1LCAyMjIsIDE4NSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDk1LCAyNSwgNSwgMjQ1LCAyMDMsIDk1LCAyNSwgNSwgMjUzLCAyMDAsIDk1LCAyNSwgNSwgMjI2LCAxMzgsIDk1LCAKKyAgICAyNSwgNSwgMjMwLCAzMCwgOTUsIDI1LCA1LCAyMjksIDg0LCA5NSwgMTM4LCAyMjIsIDI1NCwgOTUsIDEzOCwgMjE2LCAxNSwgCisgICAgMjIyLCAyNTQsIDk1LCAxMzgsIDQ4LCA5NSwgMTM4LCA1MSwgOTUsIDEsIDIxNiwgMjksIDk1LCAxLCAyMTYsIDI4LCA5NSwgCisgICAgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIDEsIDIxNiwgCisgICAgMjMsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAzMCwgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI5LCA5NSwgMSwgMjIzLCAxMDksIAorICAgIDIxNiwgMjcsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNiwgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI1LCA5NSwgMSwgMjIzLCAKKyAgICAxMDksIDIxNiwgMjMsIDU2LCAxLCAyNTQsIDMxLCA3NiwgMTQxLCAxLCAyNTQsIDMxLCAyMTEsIDQ3LCA0OSwgMjgsIDE2LCAKKyAgICAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjQ4LCAxNjYsIDQ5LCAyOCwgMTYsIDIyNSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDExNywgMjQ1LCAxODYsIDQ5LCAyOCwgMTYsIDIyNiwgMTE3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ1LCAKKyAgICAxODYsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzQsIDIwMywgNDksIDI4LCAxNiwgCisgICAgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDIyNiwgMTMsIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCA0OSwgMjgsIDE2LCAyMTAsIAorICAgIDIxOCwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIzMywgMjQwLCA0OSwgMjgsIDE2LCAyNTQsIDc2LCAyNDUsIDE4NiwgNDksIAorICAgIDI4LCAxNiwgMjQ1LCAzNCwgMjQ1LCAxODYsIDQ5LCAyOCwgMTYsIDIxNywgMywgNDksIDI4LCAxNiwgMjM0LCAxNjcsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgNjYsIDQ5LCAyOCwgMTYsIDI1NCwgNjcsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTcsIDE3NiwgNDksIAorICAgIDI4LCAxNiwgMjE2LCAxNjAsIDQ5LCAyOCwgMTYsIDIyNiwgMjEwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgCisgICAgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjI0LCAxNTYsIDQ5LCAyOCwgMTYsIDI1MCwgMTU3LCA0OSwgMjgsIDE2LCAyMTQsIDYsIAorICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCisgICAgMjM0LCAxNjgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMSwgMjE1LCA0OSwgMjgsIDE2LCAyMjYsIDQsIDQ5LCAyOCwgMTYsIAorICAgIDIxOCwgMTQ4LCAyNTQsIDY5LCA0OSwgMjgsIDE2LCAyMjYsIDExNiwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE0LCAxNSwgCisgICAgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjU0LCA3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgCisgICAgMjM0LCA0MywgNDksIDI4LCAxNiwgMjIzLCA0OSwgNDksIDI4LCAxNiwgMjI1LCAxMDksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIxNiwgODQsIDQ5LCAyOCwgMTYsIDI1NCwgMTI5LCA0OSwgMjgsIDE2LCAyMjEsIDE2MSwgNDksIDI4LCAxNiwgMjE3LCAKKyAgICAxNzksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNywgMTc5LCAyMzEsIDQ1LCAyMTgsIDE0NiwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxMTEsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNiwgMTkxLCA0OSwgMjgsIDE2LCAyMzMsIDMzLCA0OSwgMjgsIDE2LCAyNDYsIAorICAgIDQ5LCA0OSwgMjgsIDE2LCAyMTUsIDIyOCwgNDksIDI4LCAxNiwgMjE2LCAyMzMsIDQ5LCAyOCwgMTYsIDIzMywgMjQzLCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDc2LCAyNDUsIDM0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI1NCwgMjksIDQ5LCAKKyAgICAyOCwgMTYsIDIzNiwgMTksIDQ5LCAyOCwgMTYsIDIxNSwgMjAwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzQsIDIwNiwgCisgICAgMjE1LCAxOTksIDQ5LCAyOCwgMTYsIDIyNSwgMjAzLCA0OSwgMjgsIDE2LCAyMjQsIDE2MSwgNDksIDI4LCAxNiwgMjM0LCAKKyAgICAxNywgNDksIDI4LCAxNiwgMjUwLCA4OCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjIzLCAxNDksIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNiwgMTQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI0MCwgMTE2LCA0OSwgMjgsIAorICAgIDE2LCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjI1LCAxNTksIDQ5LCAyOCwgMTYsIDIzNCwgMTgsIDI1NCwgMTU4LCA0OSwgCisgICAgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAxNTgsIDQ5LCAyOCwgMTYsIDIxOCwgMTI1LCA0OSwgMjgsIDE2LCAyNDIsIDEzMCwgCisgICAgNDksIDI4LCAxNiwgMjM1LCAxNzAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIyNiwgMTE3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI1LCAxNTgsIDQ5LCAyOCwgMTYsIDIzNCwgNCwgNDksIDI4LCAKKyAgICAxNiwgMjI1LCAxNTcsIDQ5LCAyOCwgMTYsIDIzMywgMjQyLCA0OSwgMjgsIDE2LCAyMjUsIDIwNCwgMjI5LCAxMDAsIDQ5LCAKKyAgICAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAyMjksIDEwMSwgCisgICAgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIxMCwgMjE1LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjU0LCA2OCwgMjE3LCAxNzcsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgMjMzLCAKKyAgICAyNDEsIDQ5LCAyOCwgMTYsIDI0NSwgMTgxLCA0OSwgMjgsIDE2LCAyNTAsIDE1OCwgNDksIDI4LCAxNiwgMjMwLCAyMDMsIAorICAgIDIzNSwgMTY5LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI1LCAxMDksIDIyOSwgMTAwLCAKKyAgICA0OSwgMjgsIDE2LCAyMjQsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgMjA3LCA0OSwgMjgsIDE2LCAyNTQsIAorICAgIDkyLCA0OSwgMjgsIDE2LCAyMzIsIDYzLCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDIyNiwgMTUsIDQ5LCAyOCwgMTYsIDIzMywgMTU5LCA0OSwgMjgsIAorICAgIDE2LCAyNTQsIDkzLCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTg0LCA0OSwgCisgICAgMjgsIDE2LCAyMTcsIDE3OSwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIxNywgMTcxLCA0OSwgMjgsIDE2LCAyNTAsIDg4LCAKKyAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCAxMTQsIDQ5LCAyOCwgMTYsIDIyMSwgMTYyLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjExLCAxNTEsIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE2MywgNDksIAorICAgIDI4LCAxNiwgMjE1LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMTk4LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCisgICAgMjE1LCAxOTYsIDQ5LCAyOCwgMTYsIDIyNCwgMTU5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NSwgNDksIDI4LCAxNiwgMjU0LCAKKyAgICAyMiwgNDksIDI4LCAxNiwgMjQ1LCA2OCwgMjU0LCAyMiwgNDksIDI4LCAxNiwgMjI2LCAxMTEsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMTYsIDE5MCwgMjQ1LCA3NywgNDksIDI4LCAxNiwgMjE2LCAxOTAsIDI0NSwgMzMsIDQ5LCAyOCwgMTYsIDIxNiwgCisgICAgMTkyLCAyNTQsIDcxLCA0OSwgMjgsIDE2LCAyMTYsIDE4NSwgMjM0LCAyNTMsIDI1NCwgNjMsIDQ5LCAyOCwgMTYsIDIzNCwgCisgICAgMjA1LCA0OSwgMjgsIDE2LCAyNDUsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDIxMSwgMTEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTgsIDE0NywgNDksIDI4LCAxNiwgMjM0LCA0NCwgMjU0LCAxMDQsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjEwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzMsIDI0NCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCisgICAgMjMzLCAyNDQsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMzMsIDI0NCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIAorICAgIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcyLCA0OSwgMjgsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE1LCAKKyAgICAyMTEsIDQ5LCAyOCwgMTYsIDIxNiwgMjI1LCA0OSwgMjgsIDE2LCAyMzQsIDgsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDI0NSwgCisgICAgMTQyLCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDYsIDUwLCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAKKyAgICAyMTUsIDIxMywgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjE2LCAyMzUsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIAorICAgIDIzMywgMzgsIDIzNiwgMTQsIDI1MCwgNzksIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAyMjksIDEwMSwgMjU0LCAxMDQsIDQ5LCAKKyAgICAyOCwgMTYsIDI0MiwgMTY2LCAyMjYsIDUsIDI1NCwgMTgsIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAyMjYsIDUsIDI0OCwgMzcsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjMzLCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgMjI2LCA1LCAyNTQsIDE5LCAyMzQsIDIwMiwgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAKKyAgICAyMjYsIDUsIDI0OCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyNTQsIDIzLCA0OSwgMjgsIDE2LCAKKyAgICAyMzYsIDIxLCA0OSwgMjgsIDE2LCAyNDcsIDI1NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgMjU0LCAyNCwgNDksIAorICAgIDI4LCAxNiwgMjU0LCAyMjAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDI0LCA0OSwgMjgsIDE2LCAKKyAgICAyNTQsIDIyMCwgMjMxLCAzOSwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIzMSwgNTAsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAKKyAgICAyNDIsIDE2NywgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDI0MiwgMTY0LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjI1LCAzLCAKKyAgICAyNDIsIDE2NywgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNCwgMTY4LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDI1NCwgMTYwLCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNDgsIDM2LCAyNDAsIDExNCwgCisgICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDI1NCwgMTYwLCAyNDgsIDM2LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIxNSwgMjA2LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNSwgMjE4LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE2LCAyMjksIDIzMywgNDEsIDI0MCwgMTE0LCAKKyAgICA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjMzLCA0MSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjUsIDQyLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjM1LCAxNzYsIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjU0LCA2OCwgCisgICAgMjE2LCAyNTIsIDI0MCwgMTE1LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgMjE2LCAyMjYsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAKKyAgICAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDI0NywgMjM4LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE0LCAxMCwgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2NywgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMjUsIDQyLCAyMTYsIDIyOSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDI0MiwgMTYyLCAyMzAsIDMxLCAyNTQsIDcxLCA0OSwgCisgICAgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjQ3LCAyMDgsIDQ5LCAyOCwgMTYsIDI0NSwgMTU2LCAyMzQsIDI1MywgMjQzLCAKKyAgICAyNDMsIDIxMywgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDIwLCA0OSwgMjgsIDE2LCAyMzYsIDE4LCA0OSwgMjgsIDE2LCAyNDMsIAorICAgIDI0MywgMjU0LCAzMCwgMjQ4LCAzNSwgMjQwLCAxMTMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMTkxLCA0OSwgCisgICAgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOSwgMjA4LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjI5LCAyMDMsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAKKyAgICAyMTksIDEwNCwgMjQ3LCAyNTEsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjM0LCAxODgsIAorICAgIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAKKyAgICAyMjgsIDIzOSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjI4LCAyMzksIDI1NCwgMTA0LCAKKyAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjMxLCAxOTYsIDI1MCwgODEsIDI0NywgMjM4LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCisgICAgMjMxLCAxOTYsIDI1MCwgODEsIDIzMCwgMTQ4LCA0OSwgMjgsIDE2LCAyNDQsIDEzMCwgMjE5LCAxMDQsIDI1MCwgODEsIAorICAgIDIxNCwgOSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTcsIDE4MCwgNDksIDI4LCAxNiwgCisgICAgMjQzLCAyNDMsIDIyOSwgMTAyLCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAyMDksIDI0OSwgNDksIDI4LCAxNiwgMjUwLCA4MiwgCisgICAgMjM0LCA0MiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjE5LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0MCwgMTYxLCAKKyAgICAyMTEsIDEwLCAyMTYsIDIzMCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NSwgMTU3LCAyNTQsIDk0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTEsIDEwLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgCisgICAgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyNTQsIDczLCAyNDYsIDUwLCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCisgICAgMjQ3LCAyNDYsIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyNDcsIDIzMCwgCisgICAgMjQ1LCA0NCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIxNSwgMjI2LCAyMTUsIDI0NywgMTQ3LCAKKyAgICA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNTQsIDczLCAyNDYsIDUwLCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgCisgICAgMjMwLCAxNDYsIDIxNiwgMjM0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjQ3LCAyMzAsIDI0NSwgNDQsIAorICAgIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMTUsIDIxNSwgMjI2LCAyMTUsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAKKyAgICAyNDMsIDU2LCAyNDcsIDI0NSwgNDksIDI4LCAxNiwgMjQzLCA1NiwgMjExLCA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgCisgICAgMjU0LCA3MywgMjMwLCAyMDQsIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAyNTQsIDczLCAyMzEsIDc4LCA0OSwgMjgsIDE2LCAKKyAgICAyNDcsIDI1MywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAorICAgIDIxNiwgMTgzLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjE2LCAxODQsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgCisgICAgMjE2LCAxODQsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjE2LCAxODQsIDIxNiwgMjIzLCA0OSwgMjgsIDE2LCAKKyAgICAyMTksIDE2NSwgMjUzLCAyNTIsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyNTMsIDI1MywgMjQ3LCAxOTQsIDQ5LCAyOCwgMTYsIAorICAgIDIxOSwgMTY1LCAyNTMsIDI1MywgMjE1LCAyMDgsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyNTMsIDI1MywgMjE2LCAyMjMsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjMxLCAyNDMsIDM3LCA0OSwgMjgsIDE2LCAyNDcsIDIzNywgMjI2LCAxMzgsIDQ5LCAyOCwgCisgICAgMTYsIDIxOCwgMTM5LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAxOTEsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDIxMywgMTI0LCAKKyAgICA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyNDMsIDE0MiwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgCisgICAgMjU0LCAxNSwgMjM0LCAxODgsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIAorICAgIDIyOCwgMjM4LCA0OSwgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAKKyAgICAyMjksIDEwMSwgMjMxLCA0OSwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCisgICAgMjM0LCAxNjksIDIyOSwgMTAxLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgMjM0LCA0NCwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDI0MiwgMTY2LCAyMjksIDEwMSwgMjM0LCAyMDIsIDI4LCAxNiwgMjE5LCAxNTcsIDI1MiwgMTQzLCAyOCwgMTYsIDUyLCAKKyAgICAyNTIsIDE0MywgMjgsIDE2LCA0MCwgMjUyLCAxNDMsIDI4LCAxNiwgMjIzLCA1MywgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIAorICAgIDI0OCwgMTYzLCAyNTIsIDE0MywgMjgsIDE2LCAyMTksIDI1MywgMjUyLCAxNDMsIDI4LCAxNiwgNDMsIDIyMywgODAsIDUwLCAKKyAgICAyOCwgMTYsIDQ0LCAyMjMsIDgwLCA1MCwgMjgsIDE2LCAyMjMsIDgwLCAyNDcsIDEyNiwgMjgsIDE2LCAyNDgsIDIwNCwgCisgICAgMjIxLCAxNjUsIDI4LCAxNiwgMjQ4LCAyMzAsIDI1MSwgMSwgMjgsIDE2LCAyMjEsIDE2NSwgMjgsIDE2LCAyNDksIDI0MiwgCisgICAgMjgsIDE2LCAyMjMsIDc4LCAyNDQsIDExOSwgMjgsIDE2LCAyMjMsIDc4LCAyNDQsIDExOCwgMjgsIDE2LCAyMjMsIDc4LCAKKyAgICAyNDQsIDExNywgMjgsIDE2LCAyNDQsIDEzOSwgMjgsIDE2LCAyNDQsIDE0MCwgNTEsIDI4LCAxNiwgMjUxLCAxNTYsIDc5LCAKKyAgICAyOCwgMTYsIDI1MSwgMzIsIDI4LCAxNiwgMjUxLCAxNjcsIDI4LCAxNiwgMTI3LCAyOCwgMTYsIDIyNiwgMTk3LCAyMTgsIAorICAgIDE2NSwgMjgsIDE2LCAyMTUsIDU3LCAyMTgsIDE2NSwgMjgsIDE2LCAyMTYsIDE0MywgMjE4LCAxNjUsIDI4LCAxNiwgMjQ0LCAKKyAgICAxOCwgMjE4LCAxNjUsIDI4LCAxNiwgMjQ0LCA4OCwgMjE4LCAxNjUsIDI4LCAxNiwgMjE5LCAxMjYsIDIxOCwgMTY1LCAyOCwgCisgICAgMTYsIDIxOSwgMTI0LCAyNDQsIDIsIDI4LCAxNiwgMjQ0LCAxNiwgMjQ0LCAyLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjMsIAorICAgIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyNTEsIDc1LCAyNTAsIDIyLCAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIAorICAgIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIxLCAyOCwgMTYsIDI0NiwgOTEsIDI1MCwgMjAsIAorICAgIDI4LCAxNiwgMjMwLCA5MCwgMjMxLCA5NSwgMjIzLCA2NCwgMjgsIDE2LCA1MiwgMjIwLCA3NywgMjgsIDE2LCA1MiwgMjQ0LCAKKyAgICA3MywgMjgsIDE2LCAyNDQsIDc0LCAyMTQsIDE2MywgMjgsIDE2LCAyNDQsIDc0LCAyNDYsIDExNCwgMjgsIDE2LCAyMjksIAorICAgIDE5MywgMjE0LCAxNjMsIDI4LCAxNiwgMjI5LCAxOTMsIDI0NiwgMTE0LCAyOCwgMTYsIDIyMCwgNzgsIDIxNCwgMTYzLCAyOCwgCisgICAgMTYsIDIyMCwgNzgsIDI0NiwgMTE0LCAyOCwgMTYsIDIyNCwgMjUsIDEzOCwgMjIwLCA3NywgMjgsIDE2LCAyMjQsIDI1LCAKKyAgICAxMzgsIDI0NCwgNzMsIDI4LCAxNiwgMjQ5LCAyMjQsIDIxNiwgODgsIDI4LCAxNiwgMjQ5LCA5MywgMjE2LCA4OCwgMjgsIAorICAgIDE2LCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDIyNCwgNywgMjU0LCAKKyAgICAxNTAsIDI4LCAxNiwgMjI0LCA3LCAyNTIsIDEzMCwgMjgsIDE2LCAyMzAsIDkzLCAyMjMsIDY0LCAyOCwgMTYsIDIxMSwgCisgICAgMjUxLCAyMjMsIDY0LCAyOCwgMTYsIDE2MywgMjIzLCA2NCwgMjgsIDE2LCAyMjQsIDI1LCAyMjMsIDY0LCAyOCwgMTYsIAorICAgIDI0NSwgMTk3LCAyMjMsIDY0LCAyOCwgMTYsIDIxOSwgMTIwLCAyMjMsIDY0LCAyOCwgMTYsIDIxNiwgMTYxLCAyMjMsIDY0LCAKKyAgICAyOCwgMTYsIDIxOSwgMTEyLCAyMjMsIDY0LCAyOCwgMTYsIDEyMywgMjQwLCAyMTgsIDIxNSwgNzEsIDIyMywgNjQsIDI4LCAKKyAgICAxNiwgMjExLCAxNzksIDIyOCwgNDgsIDI4LCAxNiwgOTYsIDIyOCwgNDgsIDI4LCAxNiwgMjUwLCA0NCwgMjExLCAxNzksIAorICAgIDIyOCwgNDgsIDI4LCAxNiwgNDIsIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyNTEsIDIyOSwgCisgICAgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCAKKyAgICAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgNDMsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIAorICAgIDQ5LCA0MywgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIAorICAgIDIyNywgMjI4LCA0OSwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjQsIDIxMSwgMjUzLCAyOCwgCisgICAgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjQsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDQ0LCAKKyAgICAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxMzQsIAorICAgIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIDIzMCwgMTM0LCAyMjgsIDQ5LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNCwgCisgICAgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNCwgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAKKyAgICAyMjYsIDgsIDIyOCwgNDgsIDI4LCAxNiwgMjEzLCAxMzIsIDIyOCwgNDgsIDI4LCAxNiwgMjI4LCA0OSwgMjUxLCAyMjksIAorICAgIDI4LCAxNiwgMjI3LCAyMDcsIDIyOCwgNDgsIDI4LCAxNiwgMjQ5LCAyNDksIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIAorICAgIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyNTEsIDIyOSwgMjgsIDE2LCAyNTEsIDE1NCwgMjgsIDE2LCAyMTEsIDI1MSwgMjI4LCA1MiwgCisgICAgMjgsIDE2LCAxNjMsIDIyOCwgNTIsIDI4LCAxNiwgMjI0LCAyNSwgMjI4LCA1MiwgMjgsIDE2LCAyNDUsIDE5NywgMjI4LCAKKyAgICA1MiwgMjgsIDE2LCAyMTksIDEyMCwgMjI4LCA1MiwgMjgsIDE2LCAyMTYsIDE2MSwgMjI4LCA1MiwgMjgsIDE2LCAyMTksIAorICAgIDExMiwgMjI4LCA1MiwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjgsIDUyLCAyOCwgMTYsIDM4LCAyMTgsIAorICAgIDE0MSwgMjgsIDE2LCAzOCwgMjE4LCAyNDIsIDIxOCwgMTQxLCAyOCwgMTYsIDM4LCAyMTUsIDIzNSwgMjgsIDE2LCAzOCwgCisgICAgMjE1LCAyMzQsIDI4LCAxNiwgMzgsIDIxNSwgMjMzLCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzNSwgMjgsIDE2LCAyNDQsIAorICAgIDEwOSwgMjE1LCAyMzQsIDI4LCAxNiwgMjQ0LCAxMDksIDIxNSwgMjMzLCAyOCwgMTYsIDM4LCAyNTMsIDE5NywgMjQ3LCAKKyAgICAxMjgsIDI4LCAxNiwgMzgsIDI0NCwgODAsIDI4LCAxNiwgMzgsIDI0NCwgNzksIDI4LCAxNiwgMzgsIDI0NCwgNzgsIDI4LCAKKyAgICAxNiwgMzgsIDI0NCwgNzcsIDI4LCAxNiwgMzgsIDI0NCwgNzYsIDI4LCAxNiwgMjUyLCA2NiwgMjUyLCA4MiwgMjgsIDE2LCAKKyAgICAyNDUsIDE1MSwgMjUyLCA4MiwgMjgsIDE2LCAyNTIsIDY2LCAyMTYsIDExMiwgMjgsIDE2LCAyNDUsIDE1MSwgMjE2LCAxMTIsIAorICAgIDI4LCAxNiwgMjUyLCA2NiwgMjE5LCA4MiwgMjgsIDE2LCAyNDUsIDE1MSwgMjE5LCA4MiwgMjgsIDE2LCAyNTIsIDY2LCAKKyAgICAyMjUsIDExOCwgMjgsIDE2LCAyNDUsIDE1MSwgMjI1LCAxMTgsIDI4LCAxNiwgMzgsIDI1NSwgMjMsIDI4LCAxNiwgMzgsIAorICAgIDIxOCwgMTY3LCAyOCwgMTYsIDM4LCAyMTYsIDIzOSwgMjgsIDE2LCAzOCwgMjE4LCAxNjgsIDI4LCAxNiwgMzgsIDIzMSwgCisgICAgMTY3LCAyOCwgMTYsIDM4LCAyMzEsIDE2NiwgMjgsIDE2LCAzOCwgMjU1LCAyMiwgMjgsIDE2LCAzOCwgMjMyLCAxMTgsIDI4LCAKKyAgICAxNiwgMjU0LCA2LCAyMTQsIDE2MywgMjgsIDE2LCAyNTQsIDYsIDI0NiwgMTE0LCAyOCwgMTYsIDM4LCAyNDcsIDE0MywgMjgsIAorICAgIDE2LCAzOCwgMjIyLCAyMzQsIDI4LCAxNiwgMzgsIDI0NCwgNjYsIDI4LCAxNiwgMzgsIDIxOSwgNzgsIDI4LCAxNiwgMzgsIAorICAgIDI1MiwgNDYsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDIwLCAyOCwgMTYsIDM4LCAyMTUsIDIxMiwgMjE2LCAyMCwgMjgsIDE2LCAKKyAgICAyMjIsIDIzOCwgMjgsIDE2LCAyMTgsIDc2LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgMTEwLCAyOCwgMTYsIAorICAgIDIzMSwgMzAsIDI4LCAxNiwgMjQ0LCAyNSwgMjgsIDE2LCAyNDksIDE0NiwgMjgsIDE2LCAyNDgsIDg2LCAyOCwgMTYsIDI0MiwgCisgICAgMTU3LCAyMjgsIDUzLCAyMTksIDk3LCAyOCwgMTYsIDI0MiwgMTU3LCAyMjgsIDUzLCAyMjgsIDgwLCAyMTksIDk3LCAyOCwgCisgICAgMTYsIDIxNiwgMSwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMjAwLCAyMTUsIDk1LCAyOCwgMTYsIDIxNSwgOTYsIAorICAgIDIxOSwgOTcsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTA0LCAyOCwgMTYsIAorICAgIDIyNiwgMTUyLCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDAsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgCisgICAgOTksIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTgsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTcsIDI4LCAxNiwgMjI2LCAKKyAgICAxNTIsIDIxOCwgOTYsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTUsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTQsIDI4LCAKKyAgICAxNiwgMjI2LCAxNTIsIDIxOCwgMTAzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMiwgMjgsIDE2LCAyNDEsIDI1MiwgMjgsIAorICAgIDE2LCAyMjksIDExMCwgMjgsIDE2LCAyNDUsIDE1MSwgNjQsIDIxOCwgMTM1LCAyOCwgMTYsIDI0OCwgNzksIDIxOSwgOTcsIAorICAgIDI4LCAxNiwgMzgsIDEyNCwgMjUxLCAxNzcsIDI4LCAxNiwgMzgsIDEyMCwgMjUxLCAxNzcsIDI4LCAxNiwgMzgsIDI0MiwgNywgCisgICAgMjgsIDE2LCAzOCwgMjE5LCA2OSwgMjI1LCA0NiwgMjgsIDE2LCAyMjUsIDIxOSwgNzksIDI4LCAxNiwgMjI1LCAyMTksIAorICAgIDEyMCwgNzksIDI4LCAxNiwgMTYzLCAyMjUsIDIxOSwgNzksIDI4LCAxNiwgMjQyLCAxODksIDIxNCwgMTYzLCAyOCwgMTYsIAorICAgIDI0MiwgMTg5LCAyNDYsIDExNCwgMjgsIDE2LCAyLCAyNDQsIDEwOCwgMjgsIDE2LCAyNDgsIDE4OCwgMjgsIDE2LCAyNDgsIAorICAgIDE4OSwgMjU0LCAxNjMsIDI4LCAxNiwgMjMxLCAxMzgsIDI4LCAxNiwgMjMyLCAxMzUsIDI4LCAxNiwgMjUxLCAxNTEsIDI4LCAKKyAgICAxNiwgMjIwLCAxNTYsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTU2LCAyNTEsIDIyOSwgMjgsIDE2LCAyMzAsIDE4OSwgMjgsIAorICAgIDE2LCAyMzAsIDE5MCwgMjUxLCAyMjksIDI4LCAxNiwgMjIwLCAxNTAsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTUwLCAKKyAgICAyNTEsIDIyOSwgMjgsIDE2LCAyNDMsIDIyNywgMjExLCAyNTMsIDI4LCAxNiwgMjQzLCAyMjcsIDI1MSwgMjI5LCAyOCwgMTYsIAorICAgIDIzMiwgMTM2LCAyMjUsIDE4MywgMjIzLCA2NCwgMjgsIDE2LCAyMzIsIDEzNiwgMjM2LCAxMSwgMjIzLCA2NCwgMjgsIDE2LCAKKyAgICAyNTEsIDE1MiwgMjIzLCA2NCwgMjgsIDE2LCAyMjAsIDE1NiwgMjIzLCA2NCwgMjgsIDE2LCAyMzAsIDE5MCwgMjIzLCA2NCwgCisgICAgMjgsIDE2LCAyMjAsIDE1MCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIAorICAgIDE3NywgMjI1LCAxODIsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIAorICAgIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAxNzcsIDIyNSwgMTgzLCAyNDcsIDIxOSwgMjgsIAorICAgIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAKKyAgICAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgMjM2LCAxMCwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgCisgICAgMjI0LCAxNzcsIDIzNiwgMTEsIDI0NywgMjE5LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIAorICAgIDE3NywgMjM2LCAxMSwgMjQ3LCAyMTgsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAKKyAgICAyMzYsIDExLCAyNDcsIDIxNywgMjgsIDE2LCAyNDksIDE0MSwgMjgsIDE2LCAyNDIsIDEzMywgMjUxLCA3NSwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDIsIDEzMywgMjQ1LCAxNSwgMjUwLCAyMiwgMjgsIDE2LCA0MiwgMjUzLCAxNjYsIDI4LCAxNiwgMjEzLCAKKyAgICAxNTEsIDI4LCAxNiwgMjI1LCAxNywgMjgsIDE2LCAyNTAsIDEzLCAyOCwgMTYsIDIyMSwgMjA1LCAyOCwgMTYsIDI1MCwgMTcsIAorICAgIDI4LCAxNiwgMjE2LCA4LCAyOCwgMTYsIDIyNCwgMjQ1LCAyOCwgMTYsIDIyNCwgMjQ2LCAyNDQsIDY4LCAyOCwgMTYsIDIyMSwgCisgICAgMjA2LCAyNDQsIDY4LCAyOCwgMTYsIDIxNiwgOSwgMjIzLCA2MSwgMjgsIDE2LCAyMjUsIDE2NiwgMjE4LCA2NywgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjMwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTksIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIwOSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjAyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTQsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDE4OCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg3LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAxODYsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI5LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNywgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjI2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNCwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjIzLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjIsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIyMSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTgsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE2LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMTUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTkzLCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTIsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MSwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMTkwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODksIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIzMCwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjE5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDIsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5NCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODYsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjI3LCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMjYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjIyLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjEsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMCwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjE1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMywgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjEyLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTEsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIxMCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDcsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA1LCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMDQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAxLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5OSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMTk4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTcsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMTk1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTMsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5MiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTAsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4OSwgMzgsIDI2LCAyOCwgMjE1LCAyMDksIDM4LCAyNiwgMjgsIDIxNiwgMjI0LCAzOCwgCisgICAgMjYsIDI4LCAyMjUsIDE5MSwgMjYsIDI4LCAyMzMsIDM3LCAyMzAsIDE0NywgMzEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIAorICAgIDI0MSwgMjI5LCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAyNDAsIDIyMSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQ1LCAKKyAgICAyMzAsIDI0MSwgMjMwLCAyNDcsIDIzMiwgMzEsIDI0NSwgMjMwLCAyNDAsIDIyMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMSwgCisgICAgMTgwLCAzMSwgMjUwLCAxODIsIDE4MCwgMzEsIDI0MywgMjM2LCAyNTAsIDQzLCAxODAsIDMxLCAyMzAsIDE4MiwgMTgwLCAKKyAgICAzMSwgMjUyLCAxMzgsIDE4MCwgMzEsIDIzNCwgMTg1LCAyMTksIDgxLCAxODAsIDMxLCAyNDksIDE4NywgMTgwLCAzMSwgCisgICAgMjUzLCAyNDEsIDE4MCwgMzEsIDIyNiwgMTY3LCAxODAsIDMxLCAyNTEsIDE2MSwgMjI2LCAxMzQsIDE4MCwgMzEsIDI0OCwgCisgICAgODEsIDE3NywgMjQ3LCAxODcsIDE4MCwgMzEsIDI0NywgMTg0LCAxODAsIDMxLCAyMTAsIDIyMiwgMTgwLCAzMSwgMjM1LCAKKyAgICAyNTQsIDE4MCwgMzEsIDIyNSwgMjAwLCAxODAsIDMxLCAyMjMsIDEzMCwgMTgwLCAzMSwgMjQ5LCAxOTcsIDE4MCwgMzEsIAorICAgIDI0MSwgNjcsIDI1MiwgMTkyLCAxODAsIDMxLCAyMTIsIDU5LCAxODAsIDMxLCAyNDQsIDQ3LCAxODAsIDMxLCAyNTQsIDI1NSwgCisgICAgMTgwLCAzMSwgMjIzLCA5MiwgMTgwLCAzMSwgMjIzLCA2OCwgMTgwLCAzMSwgMjQ1LCAyMjksIDE4MCwgMzEsIDIzNSwgNTksIAorICAgIDE4MCwgMzEsIDI0OSwgMTkyLCAxODAsIDMxLCAyNDUsIDE1MCwgMTgwLCAzMSwgMjQ2LCA2MCwgMTgwLCAzMSwgMjUwLCAKKyAgICAxNTMsIDE4MCwgMzEsIDI0OCwgOTAsIDE4MCwgMzEsIDIzLCAyMjMsIDY3LCAxODAsIDMxLCAyMjYsIDg1LCAxODAsIDMxLCAKKyAgICAyMzMsIDQwLCAxODAsIDMxLCAyNTAsIDYsIDE4MCwgMzEsIDIzNCwgODMsIDE4MCwgMzEsIDI0MywgOTMsIDE4MCwgMzEsIAorICAgIDIxOCwgMTE0LCAxODAsIDMxLCAyMjQsIDEzMywgMTgwLCAzMSwgMjQzLCAyMzUsIDE4MCwgMzEsIDIyMywgNjksIDE4MCwgCisgICAgMzEsIDIzMywgNzcsIDE3NywgMjMwLCAxNjIsIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0MiwgMTc1LCAyMTYsIDQzLCAKKyAgICAyMzEsIDgxLCAxODAsIDMxLCAyNDUsIDE1MiwgMTgwLCAzMSwgMjE4LCAxMjYsIDE4MCwgMzEsIDI0MiwgMTM1LCAxODAsIAorICAgIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjI1LCAyMzksIDE4MCwgMzEsIDIyMiwgMjI4LCAxODAsIDMxLCAyNDQsIDY3LCAKKyAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAyMDEsIDE4MCwgMzEsIDIzMSwgOTQsIDE4MCwgCisgICAgMzEsIDI0NSwgNjksIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIyMCwgMTgwLCAzMSwgMjUwLCA4LCAyMzAsIAorICAgIDExNSwgMTgwLCAzMSwgMjQyLCAxMTMsIDE4MCwgMzEsIDI0MywgOTQsIDIzNiwgNiwgMTgwLCAzMSwgMjMxLCAxNDYsIDE4MCwgCisgICAgMzEsIDI1NSwgMTksIDE4MCwgMzEsIDI0NSwgMTY1LCAxODAsIDMxLCAyNDYsIDExNywgMTgwLCAzMSwgMjEyLCA0MiwgMTgwLCAKKyAgICAzMSwgMjE5LCAxNTIsIDE4MCwgMzEsIDIzNSwgMjI5LCAxODAsIDMxLCAyNDgsIDUwLCAxODAsIDMxLCAyNDgsIDE2OCwgCisgICAgMTgwLCAzMSwgMjQ3LCAyMTYsIDE4MCwgMzEsIDI0NSwgMzcsIDE4MCwgMzEsIDIyMCwgMTE3LCAxODAsIDMxLCAyMTgsIAorICAgIDEzMCwgMTgwLCAzMSwgMjQyLCA5LCAxODAsIDMxLCAyNDksIDIyMCwgMTgwLCAzMSwgMjUwLCAzLCAxODAsIDMxLCAyNDQsIAorICAgIDE4NSwgMTgwLCAzMSwgMjU0LCAyMjEsIDE4MCwgMzEsIDI0OSwgMjE5LCAxODAsIDMxLCAyMjYsIDIwMSwgMjE2LCAxOTcsIAorICAgIDIxMywgMjQyLCAxODAsIDMxLCAyNDcsIDI0MCwgMTgwLCAzMSwgMjMzLCAxMzAsIDE4MCwgMzEsIDI0NCwgMjEsIDI0OSwgCisgICAgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxMTEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxMDUsIAorICAgIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxNTgsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAKKyAgICAxNjEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxOTAsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIAorICAgIDIxLCAxOTUsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxOTksIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAKKyAgICAxNzQsIDIxLCAxOTYsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAyMDEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgCisgICAgMjE2LCAyNDQsIDIxLCAxMTEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxMDUsIDI0OSwgMTU3LCAyMjIsIAorICAgIDIwNCwgMjE2LCAyNDQsIDIxLCAxNTgsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxNjEsIDI0OSwgMTU3LCAKKyAgICAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTAsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTUsIDI0OSwgCisgICAgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTksIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTYsIAorICAgIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAyMDEsIDExLCAyMywgNiwgNjEsIDExLCAyMywgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMywgNiwgMjUxLCA3NCwgMTEsIDIzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDYsIDc2LCAxMSwgMjMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAyMywgNiwgMjQzLCAyMDksIDExLCAyMywgNiwgMjQyLCA2NywgMTEsIDIzLCA2LCA3NCwgMTEsIDIzLCAKKyAgICA2LCAyMzUsIDE1MCwgMTEsIDIzLCA2LCAyMzUsIDI5LCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTQsIDExLCAyMywgCisgICAgNiwgMjMwLCAzMCwgMTEsIDIzLCA2LCA3OCwgMTEsIDIzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCA2LCAyMjQsIDk5LCAxMSwgCisgICAgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDYsIDY5LCAxMSwgCisgICAgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgMjExLCAKKyAgICAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNjYsIDExLCAyMywgNCwgCisgICAgMjUxLCA3NCwgMTEsIDIzLCA0LCAyNDksIDY4LCAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDI0NSwgMTQsIDExLCAyMywgCisgICAgNCwgMjQzLCAyMDksIDExLCAyMywgNCwgMjQyLCA2NywgMTEsIDIzLCA0LCA3NCwgMTEsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIAorICAgIDIzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDQsIDE1NiwgMTEsIDIzLCA0LCAxOTQsIDExLCAyMywgNCwgMjMwLCAzMCwgMTEsIAorICAgIDIzLCA0LCA3OCwgMTEsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDIzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDQsIDE1MywgMTEsIAorICAgIDIzLCA0LCAyMjIsIDkzLCAxMSwgMjMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDQsIDY5LCAxMSwgMjMsIDQsIDIxNCwgMTA1LCAKKyAgICAxMSwgMjMsIDQsIDIxMiwgOTgsIDExLCAyMywgNCwgMjExLCAxNzgsIDExLCAyMywgNCwgMjExLCAxMTcsIDExLCAyMywgNCwgCisgICAgMjEwLCAxNTksIDExLCAzMiwgNiwgNjEsIDExLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzMiwgNiwgMjUxLCA3NCwgMTEsIDMyLCAKKyAgICA2LCAyNDksIDY4LCAxMSwgMzIsIDYsIDc2LCAxMSwgMzIsIDYsIDI0NSwgMTQsIDExLCAzMiwgNiwgMjQzLCAyMDksIDExLCAKKyAgICAzMiwgNiwgMjQyLCA2NywgMTEsIDMyLCA2LCA3NCwgMTEsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDMyLCA2LCAyMzUsIDI5LCAKKyAgICAxMSwgMzIsIDYsIDE1NiwgMTEsIDMyLCA2LCAxOTQsIDExLCAzMiwgNiwgMjMwLCAzMCwgMTEsIDMyLCA2LCA3OCwgMTEsIAorICAgIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzIsIDYsIDE1MywgMTEsIDMyLCA2LCAyMjIsIDkzLCAKKyAgICAxMSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzIsIDYsIDY5LCAxMSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzIsIDYsIDIxMiwgCisgICAgOTgsIDExLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzMiwgNiwgMjEwLCAxNTksIDExLCAKKyAgICAzMiwgNCwgNjEsIDExLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDMyLCA0LCAyNDksIDY4LCAKKyAgICAxMSwgMzIsIDQsIDc2LCAxMSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzMiwgNCwgMjQzLCAyMDksIDExLCAzMiwgNCwgNzQsIAorICAgIDExLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgNCwgMTk0LCAKKyAgICAxMSwgMzIsIDQsIDIzMCwgMzAsIDExLCAzMiwgNCwgNzgsIDExLCAzMiwgNCwgMjI2LCAxMDksIDExLCAzMiwgNCwgMjI0LCAKKyAgICA5OSwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MywgMTEsIDMyLCA0LCAyMTcsIDE1MywgMTEsIDMyLCA0LCAKKyAgICA2OSwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzIsIAorICAgIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMywgMzIsIDYsIDI1MSwgNzQsIDExLCAyMywgMzIsIDYsIDI0OSwgNjgsIDExLCAyMywgMzIsIDYsIDc2LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAzMiwgNiwgMjQyLCA2NywgCisgICAgMTEsIDIzLCAzMiwgNiwgNzQsIDExLCAyMywgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDI5LCAxMSwgCisgICAgMjMsIDMyLCA2LCAxNTYsIDExLCAyMywgMzIsIDYsIDE5NCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAzMCwgMTEsIDIzLCAzMiwgCisgICAgNiwgNzgsIDExLCAyMywgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAxNTMsIDExLCAyMywgMzIsIDYsIDIyMiwgOTMsIDExLCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDMyLCA2LCA2OSwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTc4LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAyMywgMzIsIDQsIDYxLCAxMSwgCisgICAgMjMsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDIzLCAzMiwgNCwgMjQ5LCA2OCwgMTEsIAorICAgIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAyMywgMzIsIDQsIDI0MywgMjA5LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDMyLCA0LCA3NCwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAyMywgMzIsIAorICAgIDQsIDIzNSwgMjksIDExLCAyMywgMzIsIDQsIDE1NiwgMTEsIDIzLCAzMiwgNCwgMTk0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIAorICAgIDMwLCAxMSwgMjMsIDMyLCA0LCA3OCwgMTEsIDIzLCAzMiwgNCwgMjI2LCAxMDksIDExLCAyMywgMzIsIDQsIDIyNCwgOTksIAorICAgIDExLCAyMywgMzIsIDQsIDE1MywgMTEsIDIzLCAzMiwgNCwgMjIyLCA5MywgMTEsIDIzLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAKKyAgICAyMywgMzIsIDQsIDY5LCAxMSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjExLCAxNzgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIAorICAgIDExOSwgNiwgNjEsIDExLCAxMTksIDYsIDI1MSwgNzQsIDExLCAxMTksIDYsIDI0OSwgNjgsIDExLCAxMTksIDYsIDI0MywgCisgICAgMjA5LCAxMSwgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDExOSwgNiwgMjM1LCAyOSwgMTEsIDExOSwgNiwgMjMwLCAzMCwgMTEsIAorICAgIDExOSwgNiwgNzgsIDExLCAxMTksIDYsIDIyNiwgMTA5LCAxMSwgMTE5LCA2LCAyMjQsIDk5LCAxMSwgMTE5LCA2LCAyMjIsIAorICAgIDkzLCAxMSwgMTE5LCA2LCAyMTcsIDE1MywgMTEsIDExOSwgNiwgNjksIDExLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMTE5LCAKKyAgICA2LCAyMTIsIDk4LCAxMSwgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDExOSwgNiwgMjExLCAxMTcsIDExLCAxMTksIDYsIDIxMCwgCisgICAgMTU5LCAxMSwgMTE5LCA0LCA2MSwgMTEsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAxMTksIDQsIDI1MSwgNzQsIDExLCAxMTksIAorICAgIDQsIDI0OSwgNjgsIDExLCAxMTksIDQsIDI0NSwgMTQsIDExLCAxMTksIDQsIDI0MiwgNjcsIDExLCAxMTksIDQsIDc0LCAxMSwgCisgICAgMTE5LCA0LCAyMzUsIDE1MCwgMTEsIDExOSwgNCwgMjM1LCAyOSwgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCA0LCAxOTQsIAorICAgIDExLCAxMTksIDQsIDIzMCwgMzAsIDExLCAxMTksIDQsIDIyNiwgMTA5LCAxMSwgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMTE5LCAKKyAgICA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTMsIDExLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMTE5LCA0LCA2OSwgMTEsIAorICAgIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgMTE5LCA0LCAKKyAgICAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA3NCwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjgsIDExLCAyMywgMTE5LCA2LCAKKyAgICA3NiwgMTEsIDIzLCAxMTksIDYsIDI0NSwgMTQsIDExLCAyMywgMTE5LCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAxMTksIDYsIAorICAgIDI0MiwgNjcsIDExLCAyMywgMTE5LCA2LCA3NCwgMTEsIDIzLCAxMTksIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDExOSwgNiwgCisgICAgMjM1LCAyOSwgMTEsIDIzLCAxMTksIDYsIDE1NiwgMTEsIDIzLCAxMTksIDYsIDE5NCwgMTEsIDIzLCAxMTksIDYsIDIzMCwgCisgICAgMzAsIDExLCAyMywgMTE5LCA2LCA3OCwgMTEsIDIzLCAxMTksIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDExOSwgNiwgMjI0LCAKKyAgICA5OSwgMTEsIDIzLCAxMTksIDYsIDE1MywgMTEsIDIzLCAxMTksIDYsIDIyMiwgOTMsIDExLCAyMywgMTE5LCA2LCAyMTcsIAorICAgIDE1MywgMTEsIDIzLCAxMTksIDYsIDY5LCAxMSwgMjMsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA2LCAyMTIsIAorICAgIDk4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxNzgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIDYsIAorICAgIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNCwgNjEsIDExLCAyMywgMTE5LCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAxMTksIDQsIAorICAgIDI1MSwgNzQsIDExLCAyMywgMTE5LCA0LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNCwgNzYsIDExLCAyMywgMTE5LCA0LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNCwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMjMsIDExOSwgCisgICAgNCwgNzQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMjksIDExLCAyMywgMTE5LCA0LCAKKyAgICAxNTYsIDExLCAyMywgMTE5LCA0LCAxOTQsIDExLCAyMywgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMjMsIDExOSwgNCwgNzgsIAorICAgIDExLCAyMywgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDQsIDIyNCwgOTksIDExLCAyMywgMTE5LCA0LCAxNTMsIAorICAgIDExLCAyMywgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNCwgMjE3LCAxNTMsIDExLCAyMywgMTE5LCA0LCA2OSwgCiAgICAgMTEsIDIzLCAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgCiAgICAgMTc4LCAxMSwgMjMsIDExOSwgNCwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDEzMywgNiwgNjEsIAotICAgIDExLCAxMzMsIDYsIDI1MywgMTU4LCAxMSwgMTMzLCA2LCAyNDksIDYwLCAxMSwgMTMzLCA2LCA3NSwgMTEsIDEzMywgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMTMzLCA2LCAyNDMsIDIwMiwgMTEsIDEzMywgNiwgMjM1LCAxNDQsIDExLCAxMzMsIDYsIDIzNSwgMjMsIAotICAgIDExLCAxMzMsIDYsIDE1NiwgMTEsIDEzMywgNiwgMTkzLCAxMSwgMTMzLCA2LCAyMzAsIDI1LCAxMSwgMTMzLCA2LCA3NiwgCi0gICAgMTEsIDEzMywgNiwgMjI2LCAxMDUsIDExLCAxMzMsIDYsIDIyNCwgOTYsIDExLCAxMzMsIDYsIDIyMiwgOTEsIDExLCAxMzMsIAotICAgIDYsIDIxNywgMTUyLCAxMSwgMTMzLCA2LCA3MCwgMTEsIDEzMywgNiwgMjE0LCAxMDUsIDExLCAxMzMsIDYsIDIxMiwgOTgsIAorICAgIDExLCAxMzMsIDYsIDI1MywgMTY2LCAxMSwgMTMzLCA2LCAyNDksIDY4LCAxMSwgMTMzLCA2LCA3NiwgMTEsIDEzMywgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDEzMywgNiwgMjQzLCAyMDksIDExLCAxMzMsIDYsIDIzNSwgMTUwLCAxMSwgMTMzLCA2LCAyMzUsIDI5LCAKKyAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5NCwgMTEsIDEzMywgNiwgMjMwLCAzMCwgMTEsIDEzMywgNiwgNzgsIAorICAgIDExLCAxMzMsIDYsIDIyNiwgMTA5LCAxMSwgMTMzLCA2LCAyMjQsIDk5LCAxMSwgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMTMzLCAKKyAgICA2LCAyMTcsIDE1MywgMTEsIDEzMywgNiwgNjksIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKICAgICAxMSwgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIDEzMywgNiwgMjExLCAxMTcsIDExLCAxMzMsIDQsIDYxLCAxMSwgMTMzLCA0LCAKLSAgICAyNTMsIDE1OCwgMTEsIDEzMywgNCwgMjUxLCA2NiwgMTEsIDEzMywgNCwgMjQ5LCA2MCwgMTEsIDEzMywgNCwgNzUsIDExLCAKLSAgICAxMzMsIDQsIDI0NSwgNiwgMTEsIDEzMywgNCwgMjQzLCAyMDIsIDExLCAxMzMsIDQsIDI0MiwgNjAsIDExLCAxMzMsIDQsIAotICAgIDczLCAxMSwgMTMzLCA0LCAyMzUsIDE0NCwgMTEsIDEzMywgNCwgMjM1LCAyMywgMTEsIDEzMywgNCwgMTU2LCAxMSwgMTMzLCAKLSAgICA0LCAxOTMsIDExLCAxMzMsIDQsIDIzMCwgMjUsIDExLCAxMzMsIDQsIDc2LCAxMSwgMTMzLCA0LCAyMjYsIDEwNSwgMTEsIAotICAgIDEzMywgNCwgMjI0LCA5NiwgMTEsIDEzMywgNCwgMTUzLCAxMSwgMTMzLCA0LCAyMjIsIDkxLCAxMSwgMTMzLCA0LCAyMTcsIAotICAgIDE1MiwgMTEsIDEzMywgNCwgNzAsIDExLCAxMzMsIDQsIDIxNCwgMTA1LCAxMSwgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMTMzLCAKKyAgICAyNTMsIDE2NiwgMTEsIDEzMywgNCwgMjUxLCA3NCwgMTEsIDEzMywgNCwgMjQ5LCA2OCwgMTEsIDEzMywgNCwgNzYsIDExLCAKKyAgICAxMzMsIDQsIDI0NSwgMTQsIDExLCAxMzMsIDQsIDI0MywgMjA5LCAxMSwgMTMzLCA0LCAyNDIsIDY3LCAxMSwgMTMzLCA0LCAKKyAgICA3NCwgMTEsIDEzMywgNCwgMjM1LCAxNTAsIDExLCAxMzMsIDQsIDIzNSwgMjksIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCisgICAgNCwgMTk0LCAxMSwgMTMzLCA0LCAyMzAsIDMwLCAxMSwgMTMzLCA0LCA3OCwgMTEsIDEzMywgNCwgMjI2LCAxMDksIDExLCAKKyAgICAxMzMsIDQsIDIyNCwgOTksIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MywgMTEsIDEzMywgNCwgMjE3LCAKKyAgICAxNTMsIDExLCAxMzMsIDQsIDY5LCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCiAgICAgNCwgMjExLCAxNzgsIDExLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDEzOSwgNiwgNjEsIAotICAgIDExLCAxMzksIDYsIDI1MywgMTU4LCAxMSwgMTM5LCA2LCAyNDksIDYwLCAxMSwgMTM5LCA2LCA3NSwgMTEsIDEzOSwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMTM5LCA2LCAyNDMsIDIwMiwgMTEsIDEzOSwgNiwgNzMsIDExLCAxMzksIDYsIDIzNSwgMTQ0LCAxMSwgCi0gICAgMTM5LCA2LCAyMzUsIDIzLCAxMSwgMTM5LCA2LCAxNTYsIDExLCAxMzksIDYsIDE5MywgMTEsIDEzOSwgNiwgNzYsIDExLCAKLSAgICAxMzksIDYsIDIyMiwgOTEsIDExLCAxMzksIDYsIDIxNywgMTUyLCAxMSwgMTM5LCA2LCA3MCwgMTEsIDEzOSwgNiwgMjE0LCAKKyAgICAxMSwgMTM5LCA2LCAyNTMsIDE2NiwgMTEsIDEzOSwgNiwgMjQ5LCA2OCwgMTEsIDEzOSwgNiwgNzYsIDExLCAxMzksIDYsIAorICAgIDI0NSwgMTQsIDExLCAxMzksIDYsIDI0MywgMjA5LCAxMSwgMTM5LCA2LCA3NCwgMTEsIDEzOSwgNiwgMjM1LCAxNTAsIDExLCAKKyAgICAxMzksIDYsIDIzNSwgMjksIDExLCAxMzksIDYsIDE1NiwgMTEsIDEzOSwgNiwgMTk0LCAxMSwgMTM5LCA2LCA3OCwgMTEsIAorICAgIDEzOSwgNiwgMjIyLCA5MywgMTEsIDEzOSwgNiwgMjE3LCAxNTMsIDExLCAxMzksIDYsIDY5LCAxMSwgMTM5LCA2LCAyMTQsIAogICAgIDEwNSwgMTEsIDEzOSwgNiwgMjEyLCA5OCwgMTEsIDEzOSwgNiwgMjExLCAxNzgsIDExLCAxMzksIDYsIDIxMSwgMTE3LCAxMSwgCi0gICAgMTM5LCA0LCA2MSwgMTEsIDEzOSwgNCwgMjUzLCAxNTgsIDExLCAxMzksIDQsIDI1MSwgNjYsIDExLCAxMzksIDQsIDI0OSwgCi0gICAgNjAsIDExLCAxMzksIDQsIDc1LCAxMSwgMTM5LCA0LCAyNDUsIDYsIDExLCAxMzksIDQsIDI0MywgMjAyLCAxMSwgMTM5LCA0LCAKLSAgICAyNDIsIDYwLCAxMSwgMTM5LCA0LCA3MywgMTEsIDEzOSwgNCwgMjM1LCAxNDQsIDExLCAxMzksIDQsIDIzNSwgMjMsIDExLCAKLSAgICAxMzksIDQsIDE1NiwgMTEsIDEzOSwgNCwgMTkzLCAxMSwgMTM5LCA0LCAyMzAsIDI1LCAxMSwgMTM5LCA0LCA3NiwgMTEsIAotICAgIDEzOSwgNCwgMjI2LCAxMDUsIDExLCAxMzksIDQsIDIyNCwgOTYsIDExLCAxMzksIDQsIDE1MywgMTEsIDEzOSwgNCwgMjIyLCAKLSAgICA5MSwgMTEsIDEzOSwgNCwgMjE3LCAxNTIsIDExLCAxMzksIDQsIDcwLCAxMSwgMTM5LCA0LCAyMTQsIDEwNSwgMTEsIDEzOSwgCi0gICAgNCwgMjEyLCA5OCwgMTEsIDEzOSwgNCwgMjExLCAxNzgsIDExLCAxMzksIDQsIDIxMSwgMTE3LCAxMSwgMTM5LCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzLCAxMzMsIDYsIDYxLCAxMSwgMjMsIDEzMywgNiwgMjUzLCAxNTgsIDExLCAyMywgMTMzLCA2LCAyNTEsIAotICAgIDY2LCAxMSwgMjMsIDEzMywgNiwgMjQ5LCA2MCwgMTEsIDIzLCAxMzMsIDYsIDc1LCAxMSwgMjMsIDEzMywgNiwgMjQ1LCA2LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjQzLCAyMDIsIDExLCAyMywgMTMzLCA2LCAyNDIsIDYwLCAxMSwgMjMsIDEzMywgNiwgNzMsIAotICAgIDExLCAyMywgMTMzLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMjMsIDExLCAyMywgMTMzLCA2LCAxNTYsIAotICAgIDExLCAyMywgMTMzLCA2LCAxOTMsIDExLCAyMywgMTMzLCA2LCAyMzAsIDI1LCAxMSwgMjMsIDEzMywgNiwgNzYsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIyNCwgOTYsIDExLCAyMywgMTMzLCA2LCAxNTMsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDEzMywgNiwgMjE3LCAxNTIsIDExLCAyMywgMTMzLCA2LCA3MCwgMTEsIDIzLCAKLSAgICAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgMTc4LCAxMSwgCi0gICAgMjMsIDEzMywgNiwgMjExLCAxMTcsIDExLCAyMywgMTMzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDQsIDYxLCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjUzLCAxNTgsIDExLCAyMywgMTMzLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDEzMywgNCwgMjQ5LCA2MCwgCi0gICAgMTEsIDIzLCAxMzMsIDQsIDc1LCAxMSwgMjMsIDEzMywgNCwgMjQ1LCA2LCAxMSwgMjMsIDEzMywgNCwgMjQzLCAyMDIsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDEzMywgNCwgNzMsIDExLCAyMywgMTMzLCA0LCAyMzUsIDE0NCwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDIzNSwgMjMsIDExLCAyMywgMTMzLCA0LCAxNTYsIDExLCAyMywgMTMzLCA0LCAxOTMsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMzAsIDI1LCAxMSwgMjMsIDEzMywgNCwgNzYsIDExLCAyMywgMTMzLCA0LCAyMjYsIDEwNSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIyNCwgOTYsIDExLCAyMywgMTMzLCA0LCAxNTMsIDExLCAyMywgMTMzLCA0LCAyMjIsIDkxLCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjE3LCAxNTIsIDExLCAyMywgMTMzLCA0LCA3MCwgMTEsIDIzLCAxMzMsIDQsIDIxNCwgMTA1LCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxMTcsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCA2LCA2MSwgMTEsIDM1LCA2LCAyNTMsIDE1OCwgMTEsIDM1LCA2LCAyNTEsIAotICAgIDY2LCAxMSwgMzUsIDYsIDI0OSwgNjAsIDExLCAzNSwgNiwgNzUsIDExLCAzNSwgNiwgMjQ1LCA2LCAxMSwgMzUsIDYsIDI0MywgCi0gICAgMjAyLCAxMSwgMzUsIDYsIDI0MiwgNjAsIDExLCAzNSwgNiwgNzMsIDExLCAzNSwgNiwgMjM1LCAxNDQsIDExLCAzNSwgNiwgCi0gICAgMjM1LCAyMywgMTEsIDM1LCA2LCAxNTYsIDExLCAzNSwgNiwgMTkzLCAxMSwgMzUsIDYsIDIzMCwgMjUsIDExLCAzNSwgNiwgCi0gICAgNzYsIDExLCAzNSwgNiwgMjI2LCAxMDUsIDExLCAzNSwgNiwgMjI0LCA5NiwgMTEsIDM1LCA2LCAxNTMsIDExLCAzNSwgNiwgCi0gICAgMjIyLCA5MSwgMTEsIDM1LCA2LCAyMTcsIDE1MiwgMTEsIDM1LCA2LCA3MCwgMTEsIDM1LCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMzUsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzUsIDQsIDYxLCAxMSwgMzUsIDQsIDI1MywgMTU4LCAxMSwgMzUsIDQsIDI1MSwgNjYsIDExLCAzNSwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDM1LCA0LCA3NSwgMTEsIDM1LCA0LCAyNDUsIDYsIDExLCAzNSwgNCwgMjQzLCAyMDIsIDExLCAzNSwgCi0gICAgNCwgMjQyLCA2MCwgMTEsIDM1LCA0LCA3MywgMTEsIDM1LCA0LCAyMzUsIDE0NCwgMTEsIDM1LCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMzUsIDQsIDE1NiwgMTEsIDM1LCA0LCAxOTMsIDExLCAzNSwgNCwgMjMwLCAyNSwgMTEsIDM1LCA0LCA3NiwgMTEsIDM1LCA0LCAKLSAgICAyMjYsIDEwNSwgMTEsIDM1LCA0LCAyMjQsIDk2LCAxMSwgMzUsIDQsIDE1MywgMTEsIDM1LCA0LCAyMjIsIDkxLCAxMSwgMzUsIAotICAgIDQsIDIxNywgMTUyLCAxMSwgMzUsIDQsIDcwLCAxMSwgMzUsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDQsIDIxMiwgOTgsIDExLCAKLSAgICAzNSwgNCwgMjExLCAxNzgsIDExLCAzNSwgNCwgMjExLCAxMTcsIDExLCAzNSwgNCwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDYsIAotICAgIDYxLCAxMSwgMzUsIDIzLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAyMywgNiwgMjUxLCA2NiwgMTEsIDM1LCAyMywgNiwgMjQ5LCAKLSAgICA2MCwgMTEsIDM1LCAyMywgNiwgNzUsIDExLCAzNSwgMjMsIDYsIDI0NSwgNiwgMTEsIDM1LCAyMywgNiwgMjQzLCAyMDIsIAotICAgIDExLCAzNSwgMjMsIDYsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDYsIDczLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE0NCwgMTEsIAotICAgIDM1LCAyMywgNiwgMjM1LCAyMywgMTEsIDM1LCAyMywgNiwgMTU2LCAxMSwgMzUsIDIzLCA2LCAxOTMsIDExLCAzNSwgMjMsIAotICAgIDYsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDYsIDc2LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjI0LCA5NiwgMTEsIDM1LCAyMywgNiwgMTUzLCAxMSwgMzUsIDIzLCA2LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCA2LCAyMTcsIAotICAgIDE1MiwgMTEsIDM1LCAyMywgNiwgNzAsIDExLCAzNSwgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCA2LCAyMTIsIDk4LCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzUsIDIzLCA0LCA2MSwgMTEsIDM1LCAyMywgNCwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDQsIDI1MSwgNjYsIAotICAgIDExLCAzNSwgMjMsIDQsIDI0OSwgNjAsIDExLCAzNSwgMjMsIDQsIDc1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIDYsIDExLCAzNSwgCi0gICAgMjMsIDQsIDI0MywgMjAyLCAxMSwgMzUsIDIzLCA0LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCA0LCA3MywgMTEsIDM1LCAyMywgCi0gICAgNCwgMjM1LCAxNDQsIDExLCAzNSwgMjMsIDQsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDQsIDE1NiwgMTEsIDM1LCAyMywgNCwgCi0gICAgMTkzLCAxMSwgMzUsIDIzLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCA0LCA3NiwgMTEsIDM1LCAyMywgNCwgMjI2LCAxMDUsIAotICAgIDExLCAzNSwgMjMsIDQsIDIyNCwgOTYsIDExLCAzNSwgMjMsIDQsIDE1MywgMTEsIDM1LCAyMywgNCwgMjIyLCA5MSwgMTEsIAotICAgIDM1LCAyMywgNCwgMjE3LCAxNTIsIDExLCAzNSwgMjMsIDQsIDcwLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAKLSAgICAyMywgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNiwgNjEsIDExLCAzNSwgMzIsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDMyLCAKLSAgICA2LCAyNTEsIDY2LCAxMSwgMzUsIDMyLCA2LCAyNDksIDYwLCAxMSwgMzUsIDMyLCA2LCA3NSwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMzUsIDMyLCA2LCAyNDMsIDIwMiwgMTEsIDM1LCAzMiwgNiwgMjQyLCA2MCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgNzMsIDExLCAzNSwgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDMyLCA2LCAyMzUsIDIzLCAxMSwgMzUsIDMyLCA2LCAxNTYsIAotICAgIDExLCAzNSwgMzIsIDYsIDE5MywgMTEsIDM1LCAzMiwgNiwgMjMwLCAyNSwgMTEsIDM1LCAzMiwgNiwgNzYsIDExLCAzNSwgCi0gICAgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMzUsIDMyLCA2LCAxNTMsIDExLCAzNSwgMzIsIAotICAgIDYsIDIyMiwgOTEsIDExLCAzNSwgMzIsIDYsIDIxNywgMTUyLCAxMSwgMzUsIDMyLCA2LCA3MCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyMTEsIDExNywgMTEsIDM1LCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDQsIDYxLCAxMSwgMzUsIDMyLCA0LCAyNTMsIAotICAgIDE1OCwgMTEsIDM1LCAzMiwgNCwgMjUxLCA2NiwgMTEsIDM1LCAzMiwgNCwgMjQ5LCA2MCwgMTEsIDM1LCAzMiwgNCwgNzUsIAotICAgIDExLCAzNSwgMzIsIDQsIDI0NSwgNiwgMTEsIDM1LCAzMiwgNCwgMjQzLCAyMDIsIDExLCAzNSwgMzIsIDQsIDI0MiwgNjAsIAotICAgIDExLCAzNSwgMzIsIDQsIDczLCAxMSwgMzUsIDMyLCA0LCAyMzUsIDE0NCwgMTEsIDM1LCAzMiwgNCwgMjM1LCAyMywgMTEsIAotICAgIDM1LCAzMiwgNCwgMTU2LCAxMSwgMzUsIDMyLCA0LCAxOTMsIDExLCAzNSwgMzIsIDQsIDIzMCwgMjUsIDExLCAzNSwgMzIsIAotICAgIDQsIDc2LCAxMSwgMzUsIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjI0LCA5NiwgMTEsIDM1LCAzMiwgNCwgCi0gICAgMTUzLCAxMSwgMzUsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzUsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIDM1LCAzMiwgNCwgNzAsIAotICAgIDExLCAzNSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDE3OCwgCi0gICAgMTEsIDM1LCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNiwgNjEsIAotICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA2LCAyNDksIDYwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA2LCAyNDMsIDIwMiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDMyLCA2LCA3MywgMTEsIAotICAgIDM1LCAyMywgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM1LCAyMywgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDE1NiwgMTEsIDM1LCAyMywgMzIsIDYsIDE5MywgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA2LCA3NiwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDIyMiwgOTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDE1MiwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDcwLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIAotICAgIDM1LCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNCwgNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTMsIAotICAgIDE1OCwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDksIDYwLCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgNzUsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDMsIDIwMiwgMTEsIAotICAgIDM1LCAyMywgMzIsIDQsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDMyLCA0LCA3MywgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgCi0gICAgMTQ0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAyMywgMTEsIDM1LCAyMywgMzIsIDQsIDE1NiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDE5MywgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDMyLCA0LCA3NiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCA5NiwgMTEsIDM1LCAyMywgMzIsIDQsIDE1MywgMTEsIAotICAgIDM1LCAyMywgMzIsIDQsIDIyMiwgOTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIDM1LCAyMywgMzIsIDQsIAotICAgIDcwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMwLCAxMzgsIDYsIDYxLCAxMSwgMjMwLCAxMzgsIDYsIDI1MywgMTU4LCAxMSwgMjMwLCAxMzgsIDYsIAotICAgIDI1MSwgNjYsIDExLCAyMzAsIDEzOCwgNiwgMjQ5LCA2MCwgMTEsIDIzMCwgMTM4LCA2LCA3NSwgMTEsIDIzMCwgMTM4LCA2LCAKLSAgICAyNDUsIDYsIDExLCAyMzAsIDEzOCwgNiwgMjQzLCAyMDIsIDExLCAyMzAsIDEzOCwgNiwgMjQyLCA2MCwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCA3MywgMTEsIDIzMCwgMTM4LCA2LCAyMzUsIDE0NCwgMTEsIDIzMCwgMTM4LCA2LCAyMzUsIDIzLCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDE1NiwgMTEsIDIzMCwgMTM4LCA2LCAxOTMsIDExLCAyMzAsIDEzOCwgNiwgMjMwLCAyNSwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCA3NiwgMTEsIDIzMCwgMTM4LCA2LCAyMjYsIDEwNSwgMTEsIDIzMCwgMTM4LCA2LCAyMjQsIDk2LCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDE1MywgMTEsIDIzMCwgMTM4LCA2LCAyMjIsIDkxLCAxMSwgMjMwLCAxMzgsIDYsIDIxNywgMTUyLCAxMSwgCi0gICAgMjMwLCAxMzgsIDYsIDcwLCAxMSwgMjMwLCAxMzgsIDYsIDIxNCwgMTA1LCAxMSwgMjMwLCAxMzgsIDYsIDIxMiwgOTgsIDExLCAKLSAgICAyMzAsIDEzOCwgNiwgMjExLCAxNzgsIDExLCAyMzAsIDEzOCwgNiwgMjExLCAxMTcsIDExLCAyMzAsIDEzOCwgNiwgMjEwLCAKLSAgICAxNTksIDExLCAyMzAsIDEzOCwgNCwgNjEsIDExLCAyMzAsIDEzOCwgNCwgMjUzLCAxNTgsIDExLCAyMzAsIDEzOCwgNCwgCi0gICAgMjUxLCA2NiwgMTEsIDIzMCwgMTM4LCA0LCAyNDksIDYwLCAxMSwgMjMwLCAxMzgsIDQsIDc1LCAxMSwgMjMwLCAxMzgsIDQsIAotICAgIDI0NSwgNiwgMTEsIDIzMCwgMTM4LCA0LCAyNDMsIDIwMiwgMTEsIDIzMCwgMTM4LCA0LCAyNDIsIDYwLCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDczLCAxMSwgMjMwLCAxMzgsIDQsIDIzNSwgMTQ0LCAxMSwgMjMwLCAxMzgsIDQsIDIzNSwgMjMsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgMTU2LCAxMSwgMjMwLCAxMzgsIDQsIDE5MywgMTEsIDIzMCwgMTM4LCA0LCAyMzAsIDI1LCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDc2LCAxMSwgMjMwLCAxMzgsIDQsIDIyNiwgMTA1LCAxMSwgMjMwLCAxMzgsIDQsIDIyNCwgOTYsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgMTUzLCAxMSwgMjMwLCAxMzgsIDQsIDIyMiwgOTEsIDExLCAyMzAsIDEzOCwgNCwgMjE3LCAxNTIsIDExLCAKLSAgICAyMzAsIDEzOCwgNCwgNzAsIDExLCAyMzAsIDEzOCwgNCwgMjE0LCAxMDUsIDExLCAyMzAsIDEzOCwgNCwgMjEyLCA5OCwgMTEsIAotICAgIDIzMCwgMTM4LCA0LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTM4LCA0LCAyMTEsIDExNywgMTEsIDIzMCwgMTM4LCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDMyLCA0LCAyNDcsIDExOSwgNzMsIDExLCAzMiwgNCwgMjQ3LCAxMTksIDIzNSwgMTQ0LCAxMSwgMjMsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMjMsIDYsIDI1MiwgMjYsIDExLCAyMywgNiwgMjQzLCAxMDcsIDExLCAyMywgNiwgMjQ4LCA1NCwgCi0gICAgMTEsIDIzLCA2LCAyNDUsIDEwMCwgMTEsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDYsIDI0NSwgNjMsIDExLCAyMywgNiwgCi0gICAgMjE2LCAxNzksIDExLCAyMywgNiwgMjM1LCAxODUsIDExLCAyMywgNiwgMjM0LCAyMjIsIDExLCAyMywgNiwgMjMzLCA5OCwgCi0gICAgMTEsIDIzLCA2LCAyMzAsIDEwMiwgMTEsIDIzLCA2LCAyMjcsIDIzNywgMTEsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDIzLCA2LCAKLSAgICAyMjYsIDE5OSwgMTEsIDIzLCA2LCAyMjUsIDEwOCwgMTEsIDIzLCA2LCAyMjMsIDM3LCAxMSwgMjMsIDYsIDIxNiwgMTgwLCAKLSAgICA4NywgMTEsIDIzLCA2LCAyMTksIDE3NywgMTEsIDIzLCA2LCAyMTcsIDQxLCAxMSwgMjMsIDYsIDIxNCwgMTU3LCAxMSwgMjMsIAotICAgIDYsIDIyNSwgMTMzLCAxMSwgMjMsIDYsIDI1MCwgMTEwLCAxMSwgMjMsIDYsIDIyNCwgMTYxLCAxMSwgMjMsIDYsIDIyNiwgCi0gICAgMjAxLCAxMSwgMjMsIDIyOSwgMjIxLCAxMSwgMjMsIDQsIDI1NCwgMTQzLCAxMSwgMjMsIDQsIDI1MiwgMjYsIDExLCAyMywgCi0gICAgNCwgMjQzLCAxMDcsIDExLCAyMywgNCwgMjQ4LCA1NCwgMTEsIDIzLCA0LCAyNDUsIDEwMCwgMTEsIDIzLCA0LCAyMTAsIDg1LCAKLSAgICAxMSwgMjMsIDQsIDI0NSwgNjMsIDExLCAyMywgNCwgMjE2LCAxNzksIDExLCAyMywgNCwgMjM1LCAxODUsIDExLCAyMywgNCwgCi0gICAgMjM0LCAyMjIsIDExLCAyMywgNCwgMjMzLCA5OCwgMTEsIDIzLCA0LCAyMzAsIDEwMiwgMTEsIDIzLCA0LCAyMjcsIDIzNywgCi0gICAgMTEsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDIzLCA0LCAyMjYsIDE5OSwgMTEsIDIzLCA0LCAyMjUsIDEwOCwgMTEsIDIzLCA0LCAKLSAgICAyMjMsIDM3LCAxMSwgMjMsIDQsIDQwLCAyMTksIDE3NywgMTEsIDIzLCA0LCAyMTksIDE3NywgMTEsIDIzLCA0LCAyMTcsIAotICAgIDQxLCAxMSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDQsIDIyNSwgMTMzLCAxMSwgMjMsIDQsIDI1MCwgMTEwLCAxMSwgCi0gICAgMjMsIDQsIDIyNCwgMTYxLCAxMSwgMjMsIDQsIDIyNiwgMjAxLCAxMSwgMjMsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDIzLCAKLSAgICAyNDUsIDEwMSwgODcsIDExLCAyMywgMjE2LCAxODAsIDg3LCAxMSwgMjMsIDIzNCwgMjIzLCA4NywgMTEsIDIzLCAyMjUsIAotICAgIDEzNCwgODcsIDExLCAyMywgMjIzLCAzOCwgODcsIDExLCAyMywgMjI1LCAxMDksIDg3LCAxMSwgMzIsIDYsIDI1NCwgMTQzLCAKLSAgICAxMSwgMzIsIDYsIDI1MiwgMjYsIDExLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAzMiwgNiwgMjQ4LCA1NCwgMTEsIDMyLCA2LCAKLSAgICAyNDUsIDEwMCwgMTEsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMzIsIDYsIDI0NSwgNjMsIDExLCAzMiwgNiwgMjE2LCAxNzksIAotICAgIDExLCAzMiwgNiwgMjM1LCAxODUsIDExLCAzMiwgNiwgMjM0LCAyMjIsIDExLCAzMiwgNiwgMjMzLCA5OCwgMTEsIDMyLCA2LCAKLSAgICAyMzAsIDEwMiwgMTEsIDMyLCA2LCAyMjcsIDIzNywgMTEsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDMyLCA2LCAyMjYsIDE5OSwgCi0gICAgMTEsIDMyLCA2LCAyMjUsIDEwOCwgMTEsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDMyLCAKLSAgICA2LCAyMTksIDE3NywgMTEsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMzIsIDYsIDIxNCwgMTU3LCAxMSwgMzIsIDYsIDIyNSwgCi0gICAgMTMzLCAxMSwgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMzIsIDYsIDIyNCwgMTYxLCAxMSwgMzIsIDYsIDIyNiwgMjAxLCAxMSwgCi0gICAgMzIsIDIyOSwgMjIxLCAxMSwgMzIsIDQsIDI1NCwgMTQzLCAxMSwgMzIsIDQsIDI1MiwgMjYsIDExLCAzMiwgNCwgMjQzLCAKLSAgICAxMDcsIDExLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIDMyLCA0LCAyNDUsIDEwMCwgMTEsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzIsIAotICAgIDQsIDI0NSwgNjMsIDExLCAzMiwgNCwgMjE2LCAxNzksIDExLCAzMiwgNCwgMjM1LCAxODUsIDExLCAzMiwgNCwgMjM0LCAKLSAgICAyMjIsIDExLCAzMiwgNCwgMjMzLCA5OCwgMTEsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDMyLCA0LCAyMjcsIDIzNywgMTEsIAotICAgIDMyLCA0LCAyMTEsIDE1NywgMTEsIDMyLCA0LCAyMjYsIDE5OSwgMTEsIDMyLCA0LCAyMjUsIDEwOCwgMTEsIDMyLCA0LCAKLSAgICAyMjMsIDM3LCAxMSwgMzIsIDQsIDQwLCAyMTksIDE3NywgMTEsIDMyLCA0LCAyMTksIDE3NywgMTEsIDMyLCA0LCAyMTcsIAotICAgIDQxLCAxMSwgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzIsIDQsIDIyNSwgMTMzLCAxMSwgMzIsIDQsIDI1MCwgMTEwLCAxMSwgCi0gICAgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMzIsIDQsIDIyNiwgMjAxLCAxMSwgMzIsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDMyLCAKLSAgICAyNDUsIDEwMSwgODcsIDExLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMzIsIDIzNCwgMjIzLCA4NywgMTEsIDMyLCAyMjUsIAotICAgIDEzNCwgODcsIDExLCAzMiwgMjIzLCAzOCwgODcsIDExLCAzMiwgMjI1LCAxMDksIDg3LCAxMSwgMjMsIDMyLCA2LCAyNTQsIAotICAgIDE0MywgMTEsIDIzLCAzMiwgNiwgMjUyLCAyNiwgMTEsIDIzLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAyMywgMzIsIDYsIDI0OCwgCi0gICAgNTQsIDExLCAyMywgMzIsIDYsIDI0NSwgMTAwLCAxMSwgMjMsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA2LCAyNDUsIAotICAgIDYzLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE3OSwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxODUsIDExLCAyMywgMzIsIDYsIDIzNCwgCi0gICAgMjIyLCAxMSwgMjMsIDMyLCA2LCAyMzMsIDk4LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDEwMiwgMTEsIDIzLCAzMiwgNiwgMjI3LCAKLSAgICAyMzcsIDExLCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDE5OSwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjI1LCAxMDgsIDExLCAyMywgMzIsIDYsIDIyMywgMzcsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAKLSAgICAzMiwgNiwgMjE5LCAxNzcsIDExLCAyMywgMzIsIDYsIDIxNywgNDEsIDExLCAyMywgMzIsIDYsIDIxNCwgMTU3LCAxMSwgMjMsIAotICAgIDMyLCA2LCAyMjUsIDEzMywgMTEsIDIzLCAzMiwgNiwgMjUwLCAxMTAsIDExLCAyMywgMzIsIDYsIDIyNCwgMTYxLCAxMSwgCi0gICAgMjMsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIDIzLCAzMiwgMjI5LCAyMjEsIDExLCAyMywgMzIsIDQsIDI1NCwgMTQzLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDEwNywgMTEsIDIzLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIAotICAgIDIzLCAzMiwgNCwgMjQ1LCAxMDAsIDExLCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAyMywgMzIsIDQsIDI0NSwgNjMsIDExLCAKLSAgICAyMywgMzIsIDQsIDIxNiwgMTc5LCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE4NSwgMTEsIDIzLCAzMiwgNCwgMjM0LCAyMjIsIAotICAgIDExLCAyMywgMzIsIDQsIDIzMywgOTgsIDExLCAyMywgMzIsIDQsIDIzMCwgMTAyLCAxMSwgMjMsIDMyLCA0LCAyMjcsIDIzNywgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAyMywgMzIsIDQsIDIyNiwgMTk5LCAxMSwgMjMsIDMyLCA0LCAyMjUsIAotICAgIDEwOCwgMTEsIDIzLCAzMiwgNCwgMjIzLCAzNywgMTEsIDIzLCAzMiwgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMTksIDE3NywgMTEsIDIzLCAzMiwgNCwgMjE3LCA0MSwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAyMywgMzIsIDQsIAotICAgIDIyNSwgMTMzLCAxMSwgMjMsIDMyLCA0LCAyNTAsIDExMCwgMTEsIDIzLCAzMiwgNCwgMjI0LCAxNjEsIDExLCAyMywgMzIsIAotICAgIDQsIDIyNiwgMjAxLCAxMSwgMjMsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAyMywgMzIsIDI0NSwgMTAxLCA4NywgCi0gICAgMTEsIDIzLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMjMsIDMyLCAyMzQsIDIyMywgODcsIDExLCAyMywgMzIsIDIyNSwgMTM0LCAKLSAgICA4NywgMTEsIDIzLCAzMiwgMjIzLCAzOCwgODcsIDExLCAyMywgMzIsIDIyNSwgMTA5LCA4NywgMTEsIDM1LCAyMywgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDYsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDYsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyNDgsIDU0LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjQ1LCA2MywgMTEsIDM1LCAyMywgNiwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDYsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMzQsIDIyMiwgMTEsIDM1LCAyMywgNiwgMjMzLCA5OCwgMTEsIDM1LCAyMywgNiwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNywgMjM3LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNiwgMjI2LCAxOTksIDExLCAzNSwgMjMsIAotICAgIDYsIDIyNSwgMTA4LCAxMSwgMzUsIDIzLCA2LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzNSwgCi0gICAgMjMsIDYsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA2LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDE1NywgMTEsIDM1LCAKLSAgICAyMywgNiwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDYsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCA2LCAyMjQsIDE2MSwgMTEsIAotICAgIDM1LCAyMywgNiwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDIyOSwgMjIxLCAxMSwgMzUsIDIzLCA0LCAyNTQsIDE0MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjUyLCAyNiwgMTEsIDM1LCAyMywgNCwgMjQzLCAxMDcsIDExLCAzNSwgMjMsIDQsIDI0OCwgNTQsIDExLCAKLSAgICAzNSwgMjMsIDQsIDI0NSwgMTAwLCAxMSwgMzUsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIDYzLCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgNCwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgNCwgMjI3LCAyMzcsIAotICAgIDExLCAzNSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA0LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgNCwgMjI1LCAKLSAgICAxMDgsIDExLCAzNSwgMjMsIDQsIDIyMywgMzcsIDExLCAzNSwgMjMsIDQsIDQwLCAyMTksIDE3NywgMTEsIDM1LCAyMywgNCwgCi0gICAgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDQsIDIxNywgNDEsIDExLCAzNSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAyMjUsIDEzMywgMTEsIDM1LCAyMywgNCwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDQsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAKLSAgICA0LCAyMjYsIDIwMSwgMTEsIDM1LCAyMywgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzUsIDIzLCAyNDUsIDEwMSwgODcsIAotICAgIDExLCAzNSwgMjMsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAyMywgMjM0LCAyMjMsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDEzNCwgCi0gICAgODcsIDExLCAzNSwgMjMsIDIyMywgMzgsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDEwOSwgODcsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDM1LCAyMywgMzIsIDYsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDEwNywgMTEsIAotICAgIDM1LCAyMywgMzIsIDYsIDI0OCwgNTQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDYzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxNzksIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNCwgMjIyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMzLCAKLSAgICA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI3LCAyMzcsIDExLCAzNSwgMjMsIAotICAgIDMyLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAKLSAgICAxMDgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE0LCAKLSAgICAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIDEzMywgMTEsIDM1LCAyMywgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjI0LCAxNjEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIDM1LCAyMywgMzIsIDIyOSwgCi0gICAgMjIxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjQzLCAxMDcsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDgsIDU0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCAxMDAsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA2MywgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIzMywgOTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDIyNywgMjM3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDE5OSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjIzLCAzNywgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDQwLCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDQsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCA0MSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAyMDEsIAotICAgIDExLCAzNSwgMjMsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzNSwgMjMsIDMyLCAyNDUsIDEwMSwgODcsIDExLCAzNSwgCi0gICAgMjMsIDMyLCAyMTYsIDE4MCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMzQsIDIyMywgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIAotICAgIDEzNCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjMsIDM4LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgMTA5LCA4NywgMTEsIAotICAgIDIzLCA2LCAyNDcsIDIyNywgMTEsIDIzLCA0LCAyNDcsIDIyNywgMTEsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDIzLCAyMSwgCi0gICAgMTEwLCAxMSwgMjMsIDIxLCAxMDUsIDExLCAyMywgMjEsIDE1OCwgMTEsIDIzLCAyMSwgMTYxLCAxMSwgMjMsIDIxLCAxODksIAotICAgIDExLCAyMywgMjEsIDE5NCwgMTEsIDIzLCAyMSwgMTk4LCAxMSwgMjMsIDIxLCAxOTUsIDExLCAyMywgMjEsIDIwMCwgMTEsIAotICAgIDEzOSwgMjEsIDIxMCwgODYsIDExLCAxMzksIDIxLCAxMTAsIDExLCAxMzksIDIxLCAxMDUsIDExLCAxMzksIDIxLCAxNTgsIAotICAgIDExLCAxMzksIDIxLCAxNjEsIDExLCAxMzksIDIxLCAxODksIDExLCAxMzksIDIxLCAxOTQsIDExLCAxMzksIDIxLCAxOTgsIAotICAgIDExLCAxMzksIDIxLCAxOTUsIDExLCAxMzksIDIxLCAyMDAsIDExLCAzNSwgMjEsIDIxMCwgODYsIDExLCAzNSwgMjEsIDExMCwgCi0gICAgMTEsIDM1LCAyMSwgMTA1LCAxMSwgMzUsIDIxLCAxNTgsIDExLCAzNSwgMjEsIDE2MSwgMTEsIDM1LCAyMSwgMTg5LCAxMSwgCi0gICAgMzUsIDIxLCAxOTQsIDExLCAzNSwgMjEsIDE5OCwgMTEsIDM1LCAyMSwgMTk1LCAxMSwgMzUsIDIxLCAyMDAsIDExLCAzNSwgCi0gICAgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIzLCAyMSwgMTEwLCAxMSwgMzUsIDIzLCAyMSwgMTA1LCAxMSwgMzUsIDIzLCAKLSAgICAyMSwgMTU4LCAxMSwgMzUsIDIzLCAyMSwgMTYxLCAxMSwgMzUsIDIzLCAyMSwgMTg5LCAxMSwgMzUsIDIzLCAyMSwgMTk0LCAKLSAgICAxMSwgMzUsIDIzLCAyMSwgMTk4LCAxMSwgMzUsIDIzLCAyMSwgMTk1LCAxMSwgMzUsIDIzLCAyMSwgMjAwLCAxMSwgMjMwLCAKLSAgICAxMzgsIDIxLCAyMTAsIDg2LCAxMSwgMjMwLCAxMzgsIDIxLCAxMTAsIDExLCAyMzAsIDEzOCwgMjEsIDEwNSwgMTEsIDIzMCwgCi0gICAgMTM4LCAyMSwgMTU4LCAxMSwgMjMwLCAxMzgsIDIxLCAxNjEsIDExLCAyMzAsIDEzOCwgMjEsIDE4OSwgMTEsIDIzMCwgMTM4LCAKLSAgICAyMSwgMTk0LCAxMSwgMjMwLCAxMzgsIDIxLCAxOTgsIDExLCAyMzAsIDEzOCwgMjEsIDE5NSwgMTEsIDIzMCwgMTM4LCAyMSwgCi0gICAgMjAwLCAxMCwgMTEsIDI1NCwgMTcwLCAxMCwgMTEsIDI1MiwgNTQsIDEwLCAxMSwgMjM1LCAxMjMsIDEwLCAxMSwgMjQ4LCAKLSAgICAxOTUsIDEwLCAxMSwgMjEyLCAzMCwgMTAsIDExLCAyMTAsIDEwOCwgMTAsIDExLCAyNDIsIDM3LCAxMCwgMTEsIDIxNywgODAsIAotICAgIDEwLCAxMSwgMjExLCA0MywgMTAsIDExLCAyMzQsIDI1MCwgMTAsIDExLCAyMzMsIDEwMiwgMTAsIDExLCAyMzEsIDc4LCAxMCwgCi0gICAgMTEsIDIyOCwgNjIsIDEwLCAxMSwgMjIxLCAxNjYsIDEwLCAxMSwgMjU0LCAxOTYsIDEwLCAxMSwgMjQ0LCAxNDIsIDEwLCAKLSAgICAxMSwgMjIyLCAyNiwgMTAsIDExLCAyMjQsIDgxLCAxMCwgMTEsIDIyMywgOTUsIDEwLCAxMSwgMjIwLCA1OSwgMTAsIDExLCAKLSAgICAyMTcsIDcsIDEwLCAxMSwgMjE2LCAxOTIsIDEwLCAxMSwgMjM0LCAxMjksIDEwLCAxMSwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMjQ4LCAyMTYsIDEwLCAxMSwgMjEwLCAxMTEsIDEwLCAxMSwgMjQyLCAyNDQsIDEwLCAxMSwgMjQ3LCAxMTksIDI1MiwgNTQsIAotICAgIDEwLCAxMSwgMjQ3LCAxMTksIDIyOCwgNjIsIDEwLCAxMSwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMTEsIDI0NywgMTE5LCAKLSAgICAyMjQsIDgxLCAxMCwgMTEsIDY1LCAyNTIsIDU0LCAxMCwgMTEsIDY1LCAyMzUsIDEyMywgMTAsIDExLCA2NSwgMjQxLCAyMTgsIAotICAgIDEwLCAxMSwgNjUsIDI0MiwgMzcsIDEwLCAxMSwgNjUsIDIxMSwgNDMsIDEwLCAxMSwgNjUsIDIzNCwgMjUwLCAxMCwgMTEsIAotICAgIDY1LCAyMzMsIDEwMiwgMTAsIDExLCA2NSwgMjMxLCA3OCwgMTAsIDExLCA2NSwgMjI4LCA2MiwgMTAsIDExLCA2NSwgMjIxLCAKLSAgICAxNjYsIDEwLCAxMSwgNjUsIDI1NCwgMTk2LCAxMCwgMTEsIDY1LCAyNDQsIDE0MiwgMTAsIDExLCA2NSwgMjIyLCAyNiwgMTAsIAotICAgIDExLCA2NSwgMjI0LCA4MSwgMTAsIDExLCA2NSwgMjIwLCA1OSwgMTAsIDExLCA2NSwgMjE3LCA3LCAxMCwgMTEsIDY1LCAKLSAgICAyMTYsIDE5MiwgMTAsIDExLCA2NSwgMjM0LCAxMjksIDEwLCAxMSwgNjUsIDI0OCwgMjE2LCAxMCwgMTEsIDY1LCAyNDIsIAotICAgIDI0NCwgMTAsIDExLCAyMTcsIDc2LCAyMzUsIDEyMywgMTAsIDExLCAyMTcsIDc2LCAyNDIsIDM3LCAxMCwgMTEsIDIxNywgCi0gICAgNzYsIDIxMSwgNDMsIDEwLCAxMSwgMjE3LCA3NiwgMjMzLCAxMDIsIDEwLCAxMSwgMjE3LCA3NiwgMjI4LCA2MiwgMTAsIDExLCAKLSAgICAyMTcsIDc2LCAyMjEsIDE2NiwgMTAsIDExLCAyMTcsIDc2LCAyNTQsIDE5NiwgMTAsIDExLCAyMTcsIDc2LCAyMjIsIDI2LCAKLSAgICAxMCwgMTEsIDIxNywgNzYsIDIyNCwgODEsIDEwLCAxMSwgMjE3LCA3NiwgMjIwLCA1OSwgMTAsIDExLCAyMTcsIDc2LCAyMzQsIAotICAgIDEyOSwgMTAsIDExLCAyMTcsIDc2LCAyNDgsIDIxNiwgMTAsIDExLCAyMTcsIDc2LCAyNDIsIDI0NCwgMTAsIDExLCAyMTcsIAotICAgIDc2LCAyNDcsIDExOSwgMjI4LCA2MiwgMTAsIDExLCAyMTcsIDc2LCAyNDcsIDExOSwgMjI0LCA4MSwgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjUyLCA1NCwgMTAsIDExLCAyMTgsIDExMCwgMjM1LCAxMjMsIDEwLCAxMSwgMjE4LCAxMTAsIDI0MSwgMjE4LCAxMCwgCi0gICAgMTEsIDIxOCwgMTEwLCAyNDIsIDM3LCAxMCwgMTEsIDIxOCwgMTEwLCAyMTcsIDgwLCAxMCwgMTEsIDIxOCwgMTEwLCAyMTEsIAotICAgIDQzLCAxMCwgMTEsIDIxOCwgMTEwLCAyMzQsIDI1MCwgMTAsIDExLCAyMTgsIDExMCwgMjMxLCA3OCwgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjI4LCA2MiwgMTAsIDExLCAyMTgsIDExMCwgMjIxLCAxNjYsIDEwLCAxMSwgMjE4LCAxMTAsIDI1NCwgMTk2LCAxMCwgCi0gICAgMTEsIDIxOCwgMTEwLCAyNDQsIDE0MiwgMTAsIDExLCAyMTgsIDExMCwgMjIyLCAyNiwgMTAsIDExLCAyMTgsIDExMCwgMjI0LCAKLSAgICA4MSwgMTAsIDExLCAyMTgsIDExMCwgMjIwLCA1OSwgMTAsIDExLCAyMTgsIDExMCwgMjE3LCA3LCAxMCwgMTEsIDIxOCwgCi0gICAgMTEwLCAyMTYsIDE5MiwgMTAsIDExLCAyMTgsIDExMCwgMjM0LCAxMjksIDEwLCAxMSwgMjE4LCAxMTAsIDI0OCwgMjE2LCAKLSAgICAxMCwgMTEsIDIxOCwgMTEwLCAyMTAsIDExMSwgMTAsIDExLCAyMTgsIDExMCwgMjQyLCAyNDQsIDEwLCAxMSwgMjE4LCAxMTAsIAotICAgIDI0NywgMTE5LCAyNTIsIDU0LCAxMCwgMTEsIDIxOCwgMTEwLCAyNDcsIDExOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMjMyLCAKLSAgICAxMjIsIDI1NCwgMTcwLCAxMCwgMTEsIDIzMiwgMTIyLCAyNTIsIDU0LCAxMCwgMTEsIDIzMiwgMTIyLCAyMzUsIDEyMywgMTAsIAotICAgIDExLCAyMzIsIDEyMiwgMjQ4LCAxOTUsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MSwgMjE4LCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMTIsIDMwLCAxMCwgMTEsIDIzMiwgMTIyLCAyMTAsIDEwOCwgMTAsIDExLCAyMzIsIDEyMiwgMjQyLCAzNywgMTAsIDExLCAKLSAgICAyMzIsIDEyMiwgMjE3LCA4MCwgMTAsIDExLCAyMzIsIDEyMiwgMjExLCA0MywgMTAsIDExLCAyMzIsIDEyMiwgMjMzLCAxMDIsIAotICAgIDEwLCAxMSwgMjMyLCAxMjIsIDIzMSwgNzgsIDEwLCAxMSwgMjMyLCAxMjIsIDIyOCwgNjIsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIyMSwgMTY2LCAxMCwgMTEsIDIzMiwgMTIyLCAyNTQsIDE5NiwgMTAsIDExLCAyMzIsIDEyMiwgMjQ0LCAxNDIsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDIyMiwgMjYsIDEwLCAxMSwgMjMyLCAxMjIsIDIyNCwgODEsIDEwLCAxMSwgMjMyLCAxMjIsIDIyMywgOTUsIAotICAgIDEwLCAxMSwgMjMyLCAxMjIsIDIyMCwgNTksIDEwLCAxMSwgMjMyLCAxMjIsIDIxNywgNywgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjE2LCAxOTIsIDEwLCAxMSwgMjMyLCAxMjIsIDIzNCwgMTI5LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTYsIDIwMiwgMTAsIDExLCAKLSAgICAyMzIsIDEyMiwgMjQ4LCAyMTYsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMCwgMTExLCAxMCwgMTEsIDIzMiwgMTIyLCAyNDIsIAotICAgIDI0NCwgMTAsIDExLCAxMzksIDI1MiwgNTQsIDEwLCAxMSwgMTM5LCAyMzUsIDEyMywgMTAsIDExLCAxMzksIDI0OCwgMTk1LCAKLSAgICAxMCwgMTEsIDEzOSwgMjEyLCAzMCwgMTAsIDExLCAxMzksIDIxMCwgMTA4LCAxMCwgMTEsIDEzOSwgMjQyLCAzNywgMTAsIAotICAgIDExLCAxMzksIDIxNywgODAsIDEwLCAxMSwgMTM5LCAyMTEsIDQzLCAxMCwgMTEsIDEzOSwgMjMzLCAxMDIsIDEwLCAxMSwgCi0gICAgMTM5LCAyMzEsIDc4LCAxMCwgMTEsIDEzOSwgMjI4LCA2MiwgMTAsIDExLCAxMzksIDIyMSwgMTY2LCAxMCwgMTEsIDEzOSwgCi0gICAgMjU0LCAxOTYsIDEwLCAxMSwgMTM5LCAyNDQsIDE0MiwgMTAsIDExLCAxMzksIDIyMiwgMjYsIDEwLCAxMSwgMTM5LCAyMjQsIAotICAgIDgxLCAxMCwgMTEsIDEzOSwgMjIzLCA5NSwgMTAsIDExLCAxMzksIDIyMCwgNTksIDEwLCAxMSwgMTM5LCAyMTcsIDcsIDEwLCAKLSAgICAxMSwgMTM5LCAyMTYsIDE5MiwgMTAsIDExLCAxMzksIDIzNCwgMTI5LCAxMCwgMTEsIDEzOSwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMTM5LCAyNDgsIDIxNiwgMTAsIDExLCAxMzksIDIxMCwgMTExLCAxMCwgMTEsIDEzOSwgMjQyLCAyNDQsIDEwLCAxMSwgMjI2LCAKLSAgICAxNjgsIDY2LCAyLCAxMjIsIDIsIDIxNywgNDMsIDEwLCAxMSwgMjI2LCAxNjgsIDEyMiwgMiwgMjQ4LCAxOTUsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ1LCAyMjAsIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIxOSwgMjgsIDIxMSwgMjM5LCAyMzEsIDIwNSwgCi0gICAgODYsIDIxMiwgOSwgMjExLCAyMzksIDIzMSwgMjA1LCA4NiwgMjI4LCA1NiwgMjExLCAyMzksIDIzMSwgMjA1LCA4NiwgMjIzLCAKLSAgICAxMTEsIDI0NiwgOTYsIDIzMSwgMjA1LCA4NiwgMjQyLCAxMjcsIDI0NiwgOTYsIDIzMSwgMjA1LCA4NiwgNzEsIDI0NiwgOTYsIAotICAgIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMTEzLCA2NCwgMjUwLCAxNDEsIDIzMSwgCi0gICAgMjA1LCA4NiwgMTM0LCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MCwgMTQxLCAyMzEsIAotICAgIDIwNSwgODYsIDI0NCwgODEsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAyMTksIDEyNSwgNjQsIDI1MCwgMTQxLCAKLSAgICAyMzEsIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjQ1LCAxOTMsIDY0LCAyNTAsIAotICAgIDE0MSwgMjMxLCAyMDUsIDg2LCAyMjgsIDIwMCwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MiwgCi0gICAgMTUzLCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDEzNCwgNjQsIDI1MiwgMTUzLCAKLSAgICAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUyLCAxNTMsIAotICAgIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MiwgCi0gICAgMTUzLCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAKLSAgICAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MCwgMzQsIAotICAgIDIzMSwgMjA1LCA4NiwgMTM0LCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUwLCAzNCwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyMTksIDEyNSwgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUwLCAzNCwgMjMxLCAKLSAgICAyMDUsIDg2LCAyMjgsIDIwMCwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjI1LCAyNSwgMjMxLCAyMDUsIDg2LCAyMjYsIAotICAgIDE1NiwgMjMxLCAyMDUsIDg2LCAyNTIsIDE1NCwgMjMxLCAyMDUsIDg2LCAyNTAsIDcwLCAyMzEsIDIwNSwgODYsIDIxOCwgCi0gICAgMjM5LCAyMzEsIDIwNSwgODYsIDIxOCwgMzksIDIzMSwgMjA1LCA4NiwgMjUzLCAxNzksIDIzMSwgMjA1LCA4NiwgMjExLCAKLSAgICAyMzIsIDIzMSwgMjA1LCA4NiwgMjM1LCA2MiwgMjMxLCAyMDUsIDg2LCAyNTIsIDE4NCwgMTMxLCA4NiwgMjAzLCAyNTIsIAotICAgIDE4NCwgMTMxLCA4NiwgMjQxLCA0MywgMTMxLCA4NiwgMjQxLCA0MiwgMTMxLCA4NiwgMjQxLCA0MSwgMTMxLCA4NiwgMjQxLCAKLSAgICA0MCwgMTMxLCA4NiwgMjQxLCAzOSwgMTMxLCA4NiwgMjQxLCAzOCwgMTMxLCA4NiwgMjQxLCAzNywgMTMxLCA4NiwgMjQxLCAKLSAgICAzNiwgMTMxLCA4NiwgMjQxLCAzNSwgMTMxLCA4NiwgMjQxLCAzNCwgMTMxLCA4NiwgMjQxLCAzMywgMTMxLCA4NiwgMjQxLCAKLSAgICAzMiwgMTMxLCA4NiwgMjQxLCAzMSwgMTMxLCA4NiwgMjQxLCAzMCwgMTMxLCA4NiwgMjQxLCAyOSwgMTMxLCA4NiwgMjQxLCAKLSAgICAyOCwgMTMxLCA4NiwgMjQxLCAyNywgMTMxLCA4NiwgMjQxLCAyNiwgMTMxLCA4NiwgMjQxLCAyNSwgMTMxLCA4NiwgMjQxLCAKLSAgICAyNCwgMTMxLCA4NiwgMjQxLCAyMywgMTMxLCA4NiwgMjQxLCAyMiwgMTMxLCA4NiwgMjQxLCAyMSwgMTMxLCA4NiwgMjQxLCAKLSAgICAyMCwgMTMxLCA4NiwgMjQxLCAxOSwgMTMxLCA4NiwgMjQxLCAxOCwgMTMxLCA4NiwgMjQxLCAxNywgMTMxLCA4NiwgMjQxLCAKLSAgICAxNiwgMTMxLCA4NiwgMjQxLCAxNSwgMTMxLCA4NiwgMjQxLCAxNCwgMTMxLCA4NiwgMjQxLCAxMywgMTMxLCA4NiwgMjQxLCAKLSAgICAxMiwgMTMxLCA4NiwgMjQxLCAxMSwgMTMxLCA4NiwgMjQxLCAxMCwgMTMxLCA4NiwgMjQxLCA5LCAxMzEsIDg2LCAyNDEsIDgsIAotICAgIDEzMSwgODYsIDI0MSwgNywgMTMxLCA4NiwgMjQxLCA2LCAxMzEsIDg2LCAyNDEsIDUsIDEzMSwgODYsIDI0MSwgNCwgMTMxLCAKLSAgICA4NiwgMjQxLCAzLCAxMzEsIDg2LCAyNDEsIDIsIDEzMSwgODYsIDI0MSwgMSwgMTMxLCA4NiwgMjQxLCAwLCAxMzEsIDg2LCAKLSAgICAyNDAsIDI1NSwgMTMxLCA4NiwgMjQwLCAyNTQsIDEzMSwgODYsIDI0MCwgMjUzLCAxMzEsIDg2LCAyNDAsIDI1MiwgMTMxLCAKLSAgICA4NiwgMjQwLCAyNTEsIDEzMSwgODYsIDY3LCAyNTIsIDE4NCwgMTMxLCA4NiwgMjEzLCAyMzgsIDEzMSwgODYsIDIxMywgCi0gICAgMjM3LCAxMzEsIDg2LCAyMTMsIDIzNiwgMTMxLCA4NiwgMjEzLCAyMzUsIDEzMSwgODYsIDIxMywgMjM0LCAxMzEsIDg2LCAKLSAgICAyMTMsIDIzMywgMTMxLCA4NiwgMjEzLCAyMzIsIDEzMSwgODYsIDIxMywgMjMxLCAxMzEsIDg2LCAyMTMsIDIzMCwgMTMxLCAKLSAgICA4NiwgMjEzLCAyMjksIDEzMSwgODYsIDIxMywgMjI4LCAxMzEsIDg2LCAyMTMsIDIyNywgMTMxLCA4NiwgMjEzLCAyMjYsIAotICAgIDEzMSwgODYsIDIxMywgMjI1LCAxMzEsIDg2LCAyMTMsIDIyNCwgMTMxLCA4NiwgMjEzLCAyMjMsIDEzMSwgODYsIDIxMywgCi0gICAgMjIyLCAxMzEsIDg2LCAyMTMsIDIyMSwgMTMxLCA4NiwgMjEzLCAyMjAsIDEzMSwgODYsIDIxMywgMjE5LCAxMzEsIDg2LCAKLSAgICAyMTMsIDIxOCwgMTMxLCA4NiwgMjEzLCAyMTcsIDEzMSwgODYsIDIxMywgMjE2LCAxMzEsIDg2LCAyMTMsIDIxNSwgMTMxLCAKLSAgICA4NiwgMjEzLCAyMTQsIDEzMSwgODYsIDIxMywgMjEzLCAxMzEsIDg2LCAyMTMsIDIxMiwgMTMxLCA4NiwgMjEzLCAyMTEsIAotICAgIDEzMSwgODYsIDIxMywgMjEwLCAxMzEsIDg2LCAyMTMsIDIwOSwgMTMxLCA4NiwgMjEzLCAyMDgsIDEzMSwgODYsIDIxMywgCi0gICAgMjA3LCAxMzEsIDg2LCAyMTMsIDIwNiwgMTMxLCA4NiwgMjEzLCAyMDUsIDEzMSwgODYsIDIxMywgMjA0LCAxMzEsIDg2LCAKLSAgICAyMTMsIDIwMywgMTMxLCA4NiwgMjEzLCAyMDIsIDEzMSwgODYsIDIxMywgMjAxLCAxMzEsIDg2LCAyMTMsIDIwMCwgMTMxLCAKLSAgICA4NiwgMjEzLCAxOTksIDEzMSwgODYsIDIxMywgMTk4LCAxMzEsIDg2LCAyMTMsIDE5NywgMTMxLCA4NiwgMjEzLCAxOTYsIAotICAgIDEzMSwgODYsIDIxMywgMTk1LCAxMzEsIDg2LCAyMTMsIDE5NCwgMTMxLCA4NiwgMjEzLCAxOTMsIDEzMSwgODYsIDIxMywgCi0gICAgMTkyLCAxMzEsIDg2LCAyMTMsIDE5MSwgMTMxLCA4NiwgMjEzLCAxOTAsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTIsIDE4NCwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyMTksIAotICAgIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgMTEsIDY0LCAKLSAgICAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTksIAotICAgIDEyNSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyNDUsIDE5MywgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIDIxOSwgMTUsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTYsIDI0OCwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzUsIDEzOSwgCi0gICAgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDIyNCwgMTUsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIAotICAgIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDI0MSwgMjI1LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgCi0gICAgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDgxLCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMTksIDEyNSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDEsIDIyNSwgMjI1LCAKLSAgICAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIAotICAgIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDIzNSwgMTM5LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQxLCAyMjUsIDIyNSwgCi0gICAgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjQxLCAKLSAgICAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIAotICAgIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIAotICAgIDExLCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDgxLCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMTksIDEyNSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDcsIDI0NywgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgCi0gICAgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDIzNSwgMTM5LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQ3LCAyNDcsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgCi0gICAgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCA4NSwgMjM1LCA2MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIAotICAgIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIAotICAgIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgMTEsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDI0NCwgODEsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIxOSwgMTI1LCA2NCwgMjQ5LCAyNDIsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ1LCAxOTMsIAotICAgIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMTYsIDI0OCwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjM1LCAxMzksIDY0LCAyNDksIDI0MiwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIyNCwgMTUsIDY0LCAKLSAgICAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDcxLCAyMzUsIDYyLCAyMSwgMjEwLCA4NywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjEwLCA4NywgMjQ5LCAyMTksIDIxLCAKLSAgICAxMjMsIDI0OSwgMjE5LCAyMSwgMTEzLCAyNDksIDIxOSwgMjEsIDEzNCwgMjQ5LCAyMTksIDIxLCAyNDQsIDExLCAyNDksIAotICAgIDIxOSwgMjEsIDI0NCwgODEsIDI0OSwgMjE5LCAyMSwgMjE5LCAxMjUsIDI0OSwgMjE5LCAyMSwgMjIwLCAxMjIsIDI0OSwgCi0gICAgMjE5LCAyMSwgMjQ1LCAxOTMsIDI0OSwgMjE5LCAyMSwgMjI4LCAyMDAsIDI0OSwgMjE5LCA4OCwgNywgNiwgMSwgNjEsIDg4LCAKLSAgICA3LCA2LCAxLCAyNTMsIDE1OCwgODgsIDcsIDYsIDEsIDI1MSwgNjYsIDg4LCA3LCA2LCAxLCAyNDksIDYwLCA4OCwgNywgNiwgCi0gICAgMSwgNzUsIDg4LCA3LCA2LCAxLCAyNDUsIDYsIDg4LCA3LCA2LCAxLCAyNDMsIDIwMiwgODgsIDcsIDYsIDEsIDI0MiwgNjAsIAotICAgIDg4LCA3LCA2LCAxLCA3MywgODgsIDcsIDYsIDEsIDIzNSwgMTQ0LCA4OCwgNywgNiwgMSwgMjM1LCAyMywgODgsIDcsIDYsIAotICAgIDEsIDE1NiwgODgsIDcsIDYsIDEsIDE5MywgODgsIDcsIDYsIDEsIDIzMCwgMjUsIDg4LCA3LCA2LCAxLCA3NiwgODgsIDcsIAotICAgIDYsIDEsIDIyNiwgMTA1LCA4OCwgNywgNiwgMSwgMjI0LCA5NiwgODgsIDcsIDYsIDEsIDE1MywgODgsIDcsIDYsIDEsIDIyMiwgCi0gICAgOTEsIDg4LCA3LCA2LCAxLCAyMTcsIDE1MiwgODgsIDcsIDYsIDEsIDcwLCA4OCwgNywgNiwgMSwgMjE0LCAxMDUsIDg4LCA3LCAKLSAgICA2LCAxLCAyMTIsIDk4LCA4OCwgNywgNiwgMSwgMjExLCAxNzgsIDg4LCA3LCA2LCAxLCAyMTEsIDExNywgODgsIDcsIDYsIDEsIAotICAgIDIxMCwgMTU5LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA3LCA2LCAxLCAyMjIsIDkxLCAzNywgMzIsIDcsIDYsIDEsIAotICAgIDI1MSwgNjYsIDM3LCAzMiwgNywgNiwgMSwgMTUzLCAzNywgMjUwLCAxOTEsIDM3LCAyMTEsIDE4MCwgOTIsIDcsIDYsIDEsIAotICAgIDYxLCA5MiwgNywgNiwgMSwgMjUzLCAxNTgsIDkyLCA3LCA2LCAxLCAyNTEsIDY2LCA5MiwgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgOTIsIDcsIDYsIDEsIDc1LCA5MiwgNywgNiwgMSwgMjQ1LCA2LCA5MiwgNywgNiwgMSwgMjQzLCAyMDIsIDkyLCA3LCA2LCAxLCAKLSAgICAyNDIsIDYwLCA5MiwgNywgNiwgMSwgNzMsIDkyLCA3LCA2LCAxLCAyMzUsIDE0NCwgOTIsIDcsIDYsIDEsIDIzNSwgMjMsIAotICAgIDkyLCA3LCA2LCAxLCAxNTYsIDkyLCA3LCA2LCAxLCAxOTMsIDkyLCA3LCA2LCAxLCAyMzAsIDI1LCA5MiwgNywgNiwgMSwgCi0gICAgNzYsIDkyLCA3LCA2LCAxLCAyMjYsIDEwNSwgOTIsIDcsIDYsIDEsIDIyNCwgOTYsIDkyLCA3LCA2LCAxLCAxNTMsIDkyLCA3LCAKLSAgICA2LCAxLCAyMjIsIDkxLCA5MiwgNywgNiwgMSwgMjE3LCAxNTIsIDkyLCA3LCA2LCAxLCA3MCwgOTIsIDcsIDYsIDEsIDIxNCwgCi0gICAgMTA1LCA5MiwgNywgNiwgMSwgMjEyLCA5OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIAotICAgIDkyLCA3LCA2LCAxLCAyMTAsIDE1OSwgOTIsIDI0MCwgMjAxLCA5MiwgMjMwLCA0OSwgOTIsIDIyMSwgMTgzLCA5MiwgMjE4LCAKLSAgICAyMjYsIDkyLCAyMjQsIDIxOCwgOTIsIDIxMiwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDYxLCAxNTIsIDM3LCA3LCA2LCAxLCAKLSAgICAyNTMsIDE1OCwgMTUyLCAzNywgNywgNiwgMSwgMjUxLCA2NiwgMTUyLCAzNywgNywgNiwgMSwgMjQ5LCA2MCwgMTUyLCAzNywgCi0gICAgNywgNiwgMSwgNzUsIDE1MiwgMzcsIDcsIDYsIDEsIDI0NSwgNiwgMTUyLCAzNywgNywgNiwgMSwgMjQzLCAyMDIsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDI0MiwgNjAsIDE1MiwgMzcsIDcsIDYsIDEsIDczLCAxNTIsIDM3LCA3LCA2LCAxLCAyMzUsIDE0NCwgCi0gICAgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAyMywgMTUyLCAzNywgNywgNiwgMSwgMTU2LCAxNTIsIDM3LCA3LCA2LCAxLCAxOTMsIAotICAgIDE1MiwgMzcsIDcsIDYsIDEsIDIzMCwgMjUsIDE1MiwgMzcsIDcsIDYsIDEsIDc2LCAxNTIsIDM3LCA3LCA2LCAxLCAyMjYsIAotICAgIDEwNSwgMTUyLCAzNywgNywgNiwgMSwgMjI0LCA5NiwgMTUyLCAzNywgNywgNiwgMSwgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCAKLSAgICAyMjIsIDkxLCAxNTIsIDM3LCA3LCA2LCAxLCAyMTcsIDE1MiwgMTUyLCAzNywgNywgNiwgMSwgNzAsIDE1MiwgMzcsIDcsIDYsIAotICAgIDEsIDIxNCwgMTA1LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCAKLSAgICAzNywgNywgNiwgMSwgMjExLCAxMTcsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMjMsIDE1NywgMjMxLCA5NywgNTAsIAotICAgIDIyMywgMTU3LCAyMzEsIDk0LCA1MCwgMTUyLCA5MiwgNywgNiwgMSwgNjEsIDE1MiwgOTIsIDcsIDYsIDEsIDI1MywgMTU4LCAKLSAgICAxNTIsIDkyLCA3LCA2LCAxLCAyNTEsIDY2LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDksIDYwLCAxNTIsIDkyLCA3LCA2LCAxLCAKLSAgICA3NSwgMTUyLCA5MiwgNywgNiwgMSwgMjQ1LCA2LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDMsIDIwMiwgMTUyLCA5MiwgNywgNiwgCi0gICAgMSwgMjQyLCA2MCwgMTUyLCA5MiwgNywgNiwgMSwgNzMsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgMTQ0LCAxNTIsIDkyLCA3LCAKLSAgICA2LCAxLCAyMzUsIDIzLCAxNTIsIDkyLCA3LCA2LCAxLCAxNTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE5MywgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjMwLCAyNSwgMTUyLCA5MiwgNywgNiwgMSwgNzYsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA1LCAxNTIsIDkyLCAKLSAgICA3LCA2LCAxLCAyMjQsIDk2LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDIyMiwgOTEsIDE1MiwgCi0gICAgOTIsIDcsIDYsIDEsIDIxNywgMTUyLCAxNTIsIDkyLCA3LCA2LCAxLCA3MCwgMTUyLCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIAotICAgIDE1MiwgOTIsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDkyLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExNywgMTUyLCA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDI0OSwgMTI4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIAotICAgIDEwNSwgMTUyLCA5MiwgMjQwLCAxMTMsIDE1MiwgOTIsIDE5MCwgMTUyLCA5MiwgMjA2LCAxNTIsIDkyLCAyNTUsIDI1LCAKLSAgICAxNTIsIDkyLCAyMTIsIDIzLCA0MiwgMjQ3LCAxNjQsIDkyLCAyNTAsIDIzLCA5MiwgMjQ5LCAxNzAsIDkyLCAyNDMsIDI1MiwgCi0gICAgOTIsIDI0MCwgMTA1LCA5MiwgMjI5LCA4NiwgOTIsIDIyOSwgNzksIDkyLCAyMjYsIDIxNCwgOTIsIDIxOSwgMzUsIDkyLCAKLSAgICAxMjAsIDIsIDI0NSwgMzEsIDc4LCA5MiwgMjEzLCAxMTksIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDYxLCAyMjMsIAotICAgIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNTMsIDE1OCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjUxLCA2NiwgMjIzLCAKLSAgICAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjQ5LCA2MCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzUsIDIyMywgMTAzLCAKLSAgICAyMzUsIDIzOSwgMTYsIDEsIDI0NSwgNiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjQzLCAyMDIsIDIyMywgMTAzLCAKLSAgICAyMzUsIDIzOSwgMTYsIDEsIDI0MiwgNjAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDczLCAyMjMsIDEwMywgMjM1LCAKLSAgICAyMzksIDE2LCAxLCAyMzUsIDE0NCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjM1LCAyMywgMjIzLCAxMDMsIDIzNSwgCi0gICAgMjM5LCAxNiwgMSwgMTU2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAxOTMsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIAotICAgIDEsIDIzMCwgMjUsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDc2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAKLSAgICAyMjYsIDEwNSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjI0LCA5NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgCi0gICAgMTUzLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMjIsIDkxLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTcsIAotICAgIDE1MiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxNCwgMTA1LCAKLSAgICAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTIsIDk4LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTEsIDE3OCwgCi0gICAgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjExLCAxMTcsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMCwgMTU5LCAKLSAgICA0MiwgMTQxLCAyNDEsIDYzLCA5MiwgNTYsIDIzNCwgMTgsIDkyLCA1NiwgMjA2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTAsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYyLCA5MiwgNTYsIDI0OCwgOTAsIDkyLCAKLSAgICA5LCAyMTQsIDE3NywgMjM4LCA2OSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjgsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY4LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNDIsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzNSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ0LCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgNjUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY3LCA5MiwgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNDMsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI5LCA5MiwgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMzQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyNywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU3LCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzNywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDQ4LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA3MiwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDcxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1MiwgOTIsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDcwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NywgOTIsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDI2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzMSwgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDMwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICAzOCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDEsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCAzMywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTgsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDM5LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNjksIDIxNiwgNiwgCi0gICAgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDUzLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAzNiwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNDksIDIxNiwgCi0gICAgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDMyLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCA2MywgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNDUsIDM3LCAKLSAgICAxNTQsIDI1NCwgMjQ1LCAzNywgMTU0LCAyNTUsIDEyLCAyNDksIDcxLCAyNDQsIDQyLCAyNTAsIDAsIDIxNCwgMTk0LCAyMjgsIAotICAgIDIxMywgMiwgMjE4LCAxNTMsIDIxOCwgMzMsIDExNywgMjMwLCAxMTQsIDIxOCwgMzIsIDI1MCwgMjYsIDI1MywgMjA3LCAKLSAgICAyNDYsIDU0LCAyMTgsIDMxLCAxMTcsIDI1MSwgMTE4LCAyMjMsIDE1OCwgMjUxLCAxNDAsIDI1MywgMjA3LCAyMjgsIDIxMiwgCi0gICAgMjEyLCA0MSwgMjEyLCAzNSwgMjEzLCAxMzEsIDIzMCwgMTk1LCAyMTIsIDI1LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI0NSwgCi0gICAgNDUsIDI0NSwgMjI0LCAyNDIsIDE4MSwgMjU0LCAxMjgsIDI0NSwgMjI0LCAyNDIsIDE4MSwgMjUzLCAyMjUsIDI0MiwgMTgxLCAKLSAgICAyLCAyMzEsIDUxLCAxNjYsIDIzMCwgMTI5LCA4NywgMjEyLCAyNywgMjQ5LCAxMzcsIDIzMCwgMTI5LCA4NywgMjQ0LCA5MiwgCi0gICAgMjI0LCAyMiwgMjMwLCAxMjksIDg3LCAyMTIsIDI3LCAyNDIsIDIxMCwgMjMwLCAxMjksIDg3LCAyNDMsIDIyOSwgMjMwLCAKLSAgICAxMjksIDg3LCAyMTIsIDUyLCAyNDIsIDIxMCwgMjMwLCAxMjksIDg3LCAyMzMsIDgwLCAyMjQsIDIyLCAyMzAsIDEyOSwgODcsIAotICAgIDIxMiwgNTIsIDI0OSwgMTM3LCAyMzAsIDEyOSwgODcsIDI0OSwgMTM3LCAyMzAsIDEyOCwgMTY2LCAyMzAsIDEyOSwgMiwgCi0gICAgMjQ0LCAxOTAsIDI0NCwgOTIsIDIyNCwgMjIsIDIzMCwgMTI5LCAyLCAyNDQsIDE5MCwgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAKLSAgICAxMjksIDIsIDI0NCwgMTkwLCAyNDMsIDIyOSwgMjMwLCAxMjksIDIsIDI0NCwgMTkwLCAyMTgsIDM4LCAyLCAyNDQsIDE5MCwgCi0gICAgMjQyLCAxNzksIDIxOCwgMTU2LCAyMTksIDI1NSwgMjE4LCAxNTYsIDI1MCwgMTE2LCAyMjEsIDE2OCwgMjQ1LCAzOSwgMjE1LCAKLSAgICAyMzUsIDI0OCwgODQsIDIxNSwgMjM1LCAyMjYsIDU5LCAyMTUsIDIzNSwgMjUxLCAyNywgMjE1LCAxMDksIDI1MCwgMTE4LCAKLSAgICAyNTEsIDIxMCwgMjIyLCAxOTEsIDI0MSwgMTc5LCAyMTgsIDM2LCAyNTEsIDIxMCwgMjQ1LCAyMjgsIDY0LCAyMzEsIDE5NCwgCi0gICAgMjQ1LCAyMjgsIDY0LCAyMjMsIDMxLCAyNDEsIDIwNCwgMjQ0LCAxMSwgMjMzLCA1NCwgMjQ5LCAyNDYsIDIzMSwgMTcwLCAKLSAgICAyMzMsIDUzLCAyNDQsIDE3NiwgMjMzLCA1MywgMjMzLCA1NCwgMjQ0LCA0NywgMjM2LCAwLCAyMTEsIDIzOSwgMjMwLCA1OCwgCi0gICAgMjE2LCAzNCwgMjUzLCAxOTEsIDI0MiwgMTQzLCAyMzEsIDY3LCAyMTIsIDM5LCAyMTcsIDU3LCAyMzMsIDI2LCAyNTIsIAotICAgIDE0OSwgMjI1LCA2MiwgMjIzLCAxMTEsIDI1NCwgNTQsIDI0MiwgMTI3LCAyNTQsIDU0LCAyMjUsIDIxNywgMjI1LCAyMTgsIAotICAgIDI1MCwgMTE5LCAyMTgsIDExNCwgMjQyLCAyMywgMjE5LCA5MCwgNjQsIDIyNSwgNDQsIDIzMSwgODcsIDIyNiwgMTk3LCAKLSAgICAyNTEsIDE5NCwgMjI0LCAyMjksIDIzMywgMzYsIDIyMywgMzIsIDI0OSwgMTQyLCAyMjMsIDMyLCAyNTIsIDE1OSwgMjQ5LCAKLSAgICAxNzMsIDIyMywgMzEsIDI0OSwgOTUsIDIyLCAyMjMsIDMxLCAyMTgsIDE0MSwgMjUxLCAxNjcsIDIxOSwgMTQsIDI1MSwgCi0gICAgMTUxLCAyNDMsIDI1MSwgMjQzLCAyNDcsIDIyMiwgMjA3LCAyMTcsIDI0NiwgMjI0LCAyMzEsIDI0OCwgMTc1LCAyMjYsIAotICAgIDIzNiwgMjE4LCA3LCAyNDMsIDI0OCwgMjE5LCAyMzAsIDI0NCwgOTEsIDI1MSwgMjEsIDIsIDIxNywgMjM5LCAyNDgsIDM1LCAKLSAgICAyMTksIDUyLCAyNDAsIDExMiwgMjQ5LCAxNDEsIDIyMCwgNzAsIDI0MCwgMTExLCAyNDAsIDExMiwgMjQ5LCAxNDEsIDI0NiwgCi0gICAgMTA4LCAyNDksIDE3MiwgMjUwLCA4NCwgMTMwLCAyNTAsIDI1NCwgMjMyLCAxNDEsIDI0OSwgODgsIDI0MSwgNTUsIDIyNCwgCi0gICAgMjMzLCAyMTksIDI0MCwgMjUyLCAzNiwgMjUxLCAxNjMsIDIyNCwgMjM0LCA2NCwgMjQ0LCAzMywgMjQ5LCAxNzEsIDI0NCwgCi0gICAgMjQsIDIyLCAyMzQsIDMyLCAyMTcsIDE5LCAyMTEsIDIzMCwgMjQyLCAxMywgMjIyLCAxMiwgMjUxLCAxNzcsIDIyLCAyNDksIAotICAgIDEwMiwgMjExLCAyMzcsIDI0MiwgMTg0LCAyNDksIDIzNSwgMjQyLCAxODQsIDIxNSwgMTkzLCAyNDYsIDkwLCAyNTIsIDYyLCAKLSAgICAyMzAsIDkzLCAyNTAsIDcsIDI1MiwgNjIsIDIzMCwgOTIsIDI1MiwgMTg3LCAyNTEsIDE3NiwgMjIzLCAzMywgMjExLCAyMDEsIAotICAgIDIyNCwgMTk1LCAyNTEsIDIzNSwgMjUxLCAyMCwgMjM1LCAxMzgsIDI1MCwgNzcsIDIxNSwgMjM1LCAyNDQsIDE2MiwgMjUwLCAKLSAgICA3NiwgMjQ0LCA5NCwgMjQ0LCA5NSwgMjE5LCAxMiwgMjUyLCAxNTgsIDIyNSwgMjUwLCAyMjQsIDI0NCwgMjQ5LCAyMDQsIAotICAgIDI1MiwgMTU5LCAyMTcsIDU5LCAyMTUsIDIzNSwgMjQ5LCAxMjgsIDI0NCwgNjcsIDIyNSwgNjMsIDI0OCwgODEsIDIzNSwgCi0gICAgMTMxLCAyNDcsIDEzMSwgMjUwLCAyMzIsIDIxOCwgMTEzLCAyMTEsIDI0MCwgMjUwLCA5OCwgMjMwLCAxMjksIDIxMywgMTY0LCAKLSAgICAyNTAsIDE2MiwgMjIxLCAxOTksIDIyMSwgMjI0LCAyNDIsIDE0OCwgMjUwLCAyNTEsIDI1MCwgMjMzLCAyNDAsIDI0NSwgCi0gICAgMjQ0LCAxMzAsIDIxMiwgMCwgMjIyLCAyMDAsIDI0OSwgMjM2LCAyNDQsIDg2LCAyMjUsIDIsIDIyLCAyNDQsIDkwLCAyMzAsIAotICAgIDIyNywgMjMwLCAxMDgsIDI1MSwgMTAsIDI1MCwgMzksIDI0MSwgMjMyLCAyNTMsIDI0MSwgMjI2LCA2MiwgMjE2LCAxNCwgCi0gICAgMjQxLCAyNTEsIDI1MCwgMjksIDIxNiwgMjQyLCAyMTYsIDExMywgMjUwLCAyMCwgMjUxLCAyMDIsIDIyNSwgMTc3LCAyNTMsIAotICAgIDI0MCwgMjEzLCAxNzIsIDI0MywgMTEwLCAyNDcsIDE5NywgMjQxLCAxNTYsIDIxOSwgODQsIDIzMSwgMjM0LCAyNTEsIDI0NSwgCi0gICAgMjQzLCAxMTEsIDI0NywgMjQwLCAyNTEsIDE2NiwgMjQ0LCA1MiwgMjI1LCAzMywgMjUwLCAyNDEsIDI4LCAyMjgsIDQ3LCAKLSAgICAyMzAsIDg1LCAyOCwgMjI4LCA0MiwgMjIxLCAyMTIsIDI0MiwgOTksIDI4LCAyMzQsIDEzNywgMjE1LCAxOTAsIDIxMywgCi0gICAgMTU0LCAyOCwgMjIxLCAxOTIsIDIyMiwgMTI0LCAyMjAsIDExLCAyLCAyMjEsIDIyNywgMjE2LCAyNDQsIDIyMywgMTc4LCAKLSAgICAyMiwgMjUyLCAxNTksIDIxOSwgMTA1LCAyMiwgMjE5LCAxMDUsIDI1MSwgMTg3LCAyNTIsIDEyMywgMjIsIDI0MSwgNDksIAotICAgIDI1MCwgMTIwLCAyNDQsIDczLCAyMTksIDYzLCAyMjIsIDEyNSwgMjE4LCAxMiwgMjE1LCAxOTQsIDI0MCwgMjQ2LCAyMjMsIAotICAgIDE3OSwgMjU0LCAxMjksIDI0NCwgMzEsIDIyMiwgMTM2LCAyNDQsIDMxLCAyMTcsIDI0MSwgMjQwLCAyMzUsIDI1MSwgMTE5LCAKLSAgICAyNDAsIDIzNSwgMiwgMjQzLCA5NCwgMjI2LCAyMjksIDI1MSwgMTE5LCAyMzUsIDEzMSwgMjI0LCAyMzksIDIyNiwgMjI4LCAKLSAgICAyNDUsIDQ0LCAyMjQsIDIzOSwgMjI2LCAyMjgsIDI0MCwgMjQ0LCAyNTIsIDE0NSwgMjUzLCAxODEsIDIxNiwgMjUyLCAyMzEsIAotICAgIDIzNCwgMjQwLCAyNDAsIDIzMiwgMTExLCAyNDAsIDI0MCwgMjQ5LCAxNzYsIDIxOCwgMTI1LCAyMjEsIDE5OCwgMjQ4LCA0MywgCi0gICAgMjE4LCAxMjUsIDI0NCwgMTgwLCAyMzUsIDE0OSwgMjMzLCA4OSwgMjM1LCAxMzEsIDI1MCwgMjI2LCAyNDUsIDQ0LCAyNTAsIAotICAgIDIyNiwgMjIzLCAxNDEsIDIzMCwgMTEyLCAyMjYsIDExNCwgMjEyLCA0MSwgMjUxLCAxMjMsIDI0OSwgMTQ1LCAyMTYsIDEwNiwgCi0gICAgMjMzLCAxOCwgMjIzLCAxODAsIDI1MCwgMjI0LCAyNDYsIDk2LCAyNDksIDEzNSwgMjEyLCAzLCAyMTksIDcwLCAyMTksIDY4LCAKLSAgICAyNDAsIDI0NSwgMjIzLCAxNTMsIDI0MiwgMTcwLCAyMjAsIDU3LCAyMzAsIDE0NSwgMjIyLCAxOTQsIDI1MCwgMTA4LCAyNDcsIAotICAgIDEzNiwgMjI1LCA3MywgMjUxLCAyMDMsIDI0NSwgMTY5LCAyMjYsIDIzOCwgMjE4LCAyNTIsIDIyMCwgNTIsIDI1MSwgMTIyLCAKLSAgICAyNTQsIDkyLCAyNDEsIDU0LCAyMzMsIDEyMSwgMjUyLCA2MCwgMjQ0LCA5MCwgMjE1LCAxOTMsIDI0NCwgOTAsIDI1MSwgCi0gICAgMjA5LCAyMTUsIDkxLCAyNDEsIDI0OSwgMjUwLCAxMDksIDI1MiwgMTg3LCAyNTAsIDEwOSwgMjQzLCAyNDIsIDI1MiwgMTg3LCAKLSAgICAyNTAsIDEwOSwgMjUxLCAyMzcsIDIyNSwgMTk1LCAyMzQsIDI2LCAyMjQsIDI0OCwgMjQ2LCA4NywgMjUxLCAxMSwgMjUyLCAKLSAgICAxNzcsIDI1MSwgMTEsIDI0NywgMTMwLCAyMzAsIDExMywgMjQ0LCAxOTAsIDI0OSwgMTQ2LCAyNDQsIDE5MCwgMjE2LCAxMDcsIAotICAgIDI0NCwgMTkwLCAyMjMsIDE4MSwgMjQ0LCAxOTAsIDI1MCwgMjI1LCAyNDQsIDE5MCwgMjQ2LCA5NywgMjQ0LCAxOTAsIDIxOCwgCi0gICAgMjQxLCAyMTIsIDMsIDI0MCwgMjQ2LCAyNDQsIDE5MCwgMjMwLCAxNDYsIDI0NCwgMTkwLCAyNDcsIDEzNywgMjQ0LCAxOTAsIAotICAgIDIyNSwgNzQsIDI0NCwgMTkwLCAyNDMsIDI0NSwgMjQ0LCAxOTAsIDI0MiwgMjAsIDI0NCwgMTkwLCAyMTEsIDIyNCwgMjQ0LCAKLSAgICAxOTAsIDI1MiwgNzEsIDI0NCwgMTkwLCAyMjYsIDQ1LCAyNDQsIDE5MCwgMjI1LCA3NCwgMjI4LCA1MywgMjI1LCAyMzIsIAotICAgIDIyNCwgMTg2LCAyNDUsIDEzLCAyNDUsIDIyNywgMjI4LCA1MywgMjMwLCAxMTAsIDIxNiwgMTksIDcxLCAxMjAsIDIyNSwgNywgCi0gICAgMjUyLCAxODIsIDIzNSwgMjQyLCA3MSwgMTI0LCAyMjUsIDcsIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDQzLCAyMjUsIDcsIAotICAgIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDQ0LCAyMjUsIDcsIDI1MiwgMTgyLCAyMzUsIDI0MiwgMjQ0LCA4NCwgMjQyLCAxNiwgCi0gICAgNTAsIDIxMiwgMzMsIDI0MiwgMTYsIDUwLCAyMjYsIDIxNSwgMjQyLCAxNiwgNTAsIDIxNiwgMTM1LCAxMjAsIDUwLCAyMTYsIAotICAgIDEzNSwgMTI0LCA1MCwgMjUwLCAxOSwgMjQyLCAxMSwgNTAsIDIwNCwgMjQyLCAxMSwgNTAsIDI0OSwgMTIzLCAyMTEsIDIyMCwgCi0gICAgMjQxLCAyNTEsIDI0NSwgMTQsIDIyOSwgMTA0LCAyMTcsIDE1MSwgMjM1LCAxMjUsIDI0NiwgOTIsIDIzNCwgODIsIDI1MSwgCi0gICAgMjQ3LCAyMTEsIDIyMCwgMjQ5LCAyNDksIDIyNCwgMTI3LCAyNDIsIDE0LCAyMjQsIDIzMCwgMjMxLCAxNzcsIDIyMCwgNCwgCi0gICAgMjUzLCAyMDMsIDIyMCwgNCwgMjQxLCAxNjQsIDIyMCwgNCwgMjExLCAyMjAsIDIyMSwgMjQwLCAyMTEsIDIyMCwgMjUxLCAKLSAgICAxODYsIDI0NCwgMjksIDI1MSwgOTAsIDIzNiwgMCwgMjE5LCAxNjksIDI1MSwgODksIDIzNiwgMCwgMjE5LCAxNjksIDI1MSwgCi0gICAgMTYyLCAyNDIsIDE5NCwgMjMxLCAxODUsIDIxMSwgMjIxLCAyNDQsIDE3NCwgMjMxLCAxODYsIDIyLCAyMTEsIDIyMiwgMjQxLCAKLSAgICA2MCwgMjQyLCAxMCwgMTEzLCAyMzEsIDU5LCAyNDEsIDYwLCAyNDIsIDEwLCAxMTMsIDIxMSwgMjE5LCAyNDEsIDYwLCAyNDIsIAotICAgIDEwLCAyMjQsIDI1NSwgMjI2LCAyMjcsIDIxMSwgMjIyLCAyLCAyNTEsIDEwNiwgMjQ1LCAyMjUsIDI1MSwgMTQxLCAyLCAKLSAgICAyMTMsIDI0NiwgMjI1LCAxNjgsIDIsIDI1MSwgMjEyLCAyNDIsIDM0LCAyMzEsIDE4NiwgMiwgMjQyLCAxMTAsIDIyNSwgCi0gICAgMTA5LCAyMzEsIDE3NCwgMjMxLCAxODYsIDIsIDIxNSwgOTcsIDIyNiwgMjA4LCAyMzEsIDE4NSwgMjI2LCAyMDgsIDIxMSwgCi0gICAgMjIxLCAyNTIsIDE4NiwgMjQ5LCAxOTAsIDIxMSwgMjA1LCAyMjQsIDE4OSwgMjM1LCAxMzEsIDIyNiwgMjIzLCAyMzUsIAotICAgIDEzMSwgMjQyLCAxNjksIDI0MiwgMjIyLCAyNTIsIDE4NywgMjU0LCAxMTMsIDI0NSwgMTgsIDI1NCwgMTYwLCAyNTQsIDE2MSwgCi0gICAgMjMwLCAxMzYsIDIzNiwgNSwgMjE5LCAxMDAsIDIzNSwgMjMyLCAyNDgsIDM0LCAyMjUsIDE2NywgMjQyLCAxMDUsIDI0OCwgCi0gICAgMTc5LCAyMzIsIDIwMSwgMjI5LCAyMTEsIDIyNCwgMjU0LCAyNDQsIDE5MSwgMjMxLCAxNDIsIDI0MiwgMzMsIDI1MiwgMTM4LCAKLSAgICAyMjUsIDEsIDIxNywgMTcxLCAyMjUsIDY2LCAyMzQsIDY0LCA3OCwgMjMyLCAxMTEsIDIzMywgMTAsIDIyMiwgMjMzLCAyNDMsIAotICAgIDU0LCAyMTgsIDEzMSwgMjM0LCA2MywgMjUxLCAxNzEsIDI0OSwgMTQ4LCAyLCAyNDEsIDIyNywgMjEyLCAxOSwgMjUyLCA2OSwgCi0gICAgMjQxLCAyMjcsIDI1MSwgMTM1LCAyNDEsIDIyNywgMTEzLCAyNDEsIDIyNSwgMjE5LCAxMCwgMjQxLCAyMjcsIDI0MiwgMTIwLCAKLSAgICAyNDEsIDIyNywgMjQxLCAyMjgsIDIsIDc0LCAyNTEsIDIwOCwgMjQxLCAyMjcsIDI0MiwgMTI3LCAyNDEsIDIyNywgMjExLCAKLSAgICA0MiwgMjQxLCAyMjcsIDIyNCwgMTI4LCAyNDEsIDIyNywgMjQxLCAyMjgsIDIsIDIyMywgMzMsIDIyMywgNDQsIDI0MSwgCi0gICAgMjI1LCAyNDEsIDIyOCwgMjQ4LCA4MSwgMjQ3LCAyNDksIDIyMCwgODIsIDIsIDExNSwgNTksIDIzNSwgMjE1LCAyNDUsIAotICAgIDE3MiwgMTkyLCAyNTEsIDExNiwgMjU0LCAxMTIsIDg3LCAyNTEsIDE5NSwgMjE5LCA5MiwgODcsIDI0OSwgMjI4LCA4NywgCi0gICAgMjE4LCAyNDYsIDIxNywgMjQ4LCA4NywgMjQ2LCA4NSwgMjQ4LCAxNTcsIDg3LCAyMjUsIDY3LCA2NCwgMjI0LCAyNDksIAotICAgIDI0NCwgNjEsIDI1MiwgMywgMjQ3LCAxNjUsIDg3LCAyMTksIDMsIDI1MiwgMTU4LCAyMTYsIDE0OSwgMjUyLCAxNTgsIDcxLCAKLSAgICAyNDQsIDUxLCAyNDAsIDIxMSwgMjI1LCA1LCA4NywgMjMwLCAxNDksIDI1MiwgMTcyLCAyNDksIDk4LCAyNDUsIDMyLCAxMTQsIAotICAgIDI0NywgMTMyLCA1MCwgMjQ5LCAxMzksIDI1MCwgMjQyLCAyNTIsIDE0NCwgMiwgMjExLCA0MCwgNTAsIDI1MiwgMTQ0LCAyLCAKLSAgICAyNDcsIDEzMiwgNTAsIDI1MiwgMTQ0LCAyLCAyNDUsIDQ3LCA1MCwgMjUyLCAxNDQsIDIsIDIyNCwgMjI4LCA1MCwgMjMwLCAKLSAgICAxNDksIDIsIDIxMSwgMjM1LCAyNTAsIDEzOCwgMiwgMjE0LCAxNTMsIDIxNSwgMjMxLCAyMiwgMjExLCA0MCwgNTAsIDIyMSwgCi0gICAgMTc4LCAyMjUsIDE2NiwgMjQ5LCAyMDgsIDI1MSwgMTM5LCAyMzAsIDE4NiwgMjQ0LCA1NiwgMjQ3LCAxODUsIDIyNiwgMTYxLCAKLSAgICAyNDcsIDE5MCwgMjQ2LCA0OSwgMjQ0LCAxMDcsIDI0NCwgNDAsIDIwNCwgMjQ0LCAxMDcsIDI0NCwgNDAsIDIyNiwgNzYsIDIsIAotICAgIDI0OSwgMTAwLCAyMjYsIDc2LCAyNDQsIDE4MywgMjE0LCAxNjMsIDI1MSwgMTYsIDIxNywgMTgsIDI1MSwgMTYsIDI1MCwgCi0gICAgMjQzLCAyMzUsIDI0MiwgMjUwLCAxMzgsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMCwgMjUwLCAxMzgsIDIsIDI0NiwgMTA0LCAKLSAgICAyMTUsIDIzMCwgMjUyLCAxNDEsIDI1MCwgMTM3LCAyNTAsIDYsIDIyNCwgMTIzLCAyMjIsIDE4NSwgMjI0LCAxMjMsIDIyNiwgCi0gICAgMTksIDIxOCwgMTIxLCAyMjIsIDEzMSwgMjE1LCAyMjIsIDIyMiwgMTMxLCAyNTEsIDE5MSwgMjE3LCA5MSwgMjMzLCA1MSwgCi0gICAgMjI4LCA0NSwgMjI4LCA0NiwgMiwgMjQ4LCA4MCwgMjQ5LCAxNDcsIDI1MCwgMCwgMjUxLCAxOTIsIDIwNCwgMjUxLCAxOTIsIAotICAgIDI0MiwgMTI3LCAyNTEsIDE5MiwgMjUxLCAyMDgsIDI1MSwgMTkyLCAyMjYsIDE1NywgMjUxLCAxOTIsIDI1MSwgMTg5LCAKLSAgICAyMjksIDIwNSwgMjUyLCAxNzUsIDIyMSwgMTg2LCAyMzEsIDYwLCAyMTcsIDEsIDIyMywgMTIzLCAyMjYsIDc0LCAyNDQsIAotICAgIDE1OSwgMjMxLCAyMzQsIDIyMSwgMjIzLCAyNTQsIDg5LCAyMjQsIDE0NSwgMjU0LCAyNTIsIDIzMiwgMTEzLCAyNTAsIDEyNywgCi0gICAgMjMxLCA3MiwgMjI2LCAxMjksIDIxNSwgMjM4LCAyMzUsIDI1MiwgMjE1LCAyMzgsIDIyNiwgODIsIDI0NiwgMjQsIDg3LCAKLSAgICAyMzUsIDI0OSwgMjQ1LCAxMTksIDI0NSwgMTIwLCAyLCAyNDYsIDEwNCwgODAsIDQ4LCAyNTAsIDAsIDIzMSwgMjAwLCAyLCAKLSAgICAyMzIsIDEwNywgMjQ0LCA3MywgMjUwLCAwLCAyMzEsIDIwMCwgMiwgMjIzLCAxNTcsIDI0NCwgNzMsIDIwNCwgMjMxLCAyMDAsIAotICAgIDIsIDIyMywgMTU3LCAyNDQsIDczLCAyMDQsIDIzMSwgMjAwLCAyLCAyMzIsIDEwNywgMjQ0LCA3MywgMjI0LCAyMzYsIDIyNCwgCi0gICAgMjM3LCAyNDAsIDI0OCwgMjI5LCA4NCwgMjMwLCAxNTksIDIyNSwgMTE3LCAyMzAsIDE1OSwgMjI1LCAxMTgsIDIsIDk3LCAKLSAgICA4MCwgMjUzLCAyMDcsIDIzMywgNDYsIDIxMywgMTc1LCAyMzAsIDE1OCwgMjMwLCAxNTksIDIyNSwgMTE4LCAyMjYsIDIzMCwgCi0gICAgMjI4LCA3NSwgMjMwLCAxNTksIDIyNSwgMTE2LCAyNTQsIDkwLCAyLCAyNTIsIDEyOSwgMjUxLCAxMCwgMjEzLCAxNzIsIAotICAgIDI1MSwgMTAsIDIxNiwgMjU0LCAyMjMsIDE3MywgMjEzLCAxNzEsIDIxNSwgNjAsIDk3LCAyNTMsIDI0NywgMjUwLCAyLCA5NywgCi0gICAgMjIsIDE0MCwgMjA0LCAyNTAsIDM2LCAyNTMsIDI0NywgMjUwLCAyLCA5NywgMjIsIDE0MCwgMjA0LCAyNTAsIDM2LCAyNTMsIAotICAgIDI0OCwgMiwgMzcsIDEyMywgMjI2LCAxMjAsIDI1MCwgMiwgMjQ2LCAxMDQsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDM2LCAKLSAgICAyNTMsIDI0NywgMjU0LCA4OCwgMjQ2LCAxMDQsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDM2LCAyNTMsIDI0NywgMTIxLCAKLSAgICAyNTEsIDEzOCwgODcsIDEyNSwgMjUxLCAxMzgsIDg3LCAyMTksIDcsIDIsIDI1MSwgNCwgOTEsIDIxOSwgNiwgMjE5LCA3LCAKLSAgICAyLCAxMjMsIDIxOSwgMzEsIDIxMiwgMzUsIDIxOSwgNywgMiwgMTM0LCAyMTksIDMxLCAyMTIsIDM0LCAyNTIsIDExNSwgCi0gICAgMjQ1LCAxNzIsIDIyNSwgMjcsIDIzMywgNDIsIDIzMSwgMjExLCAyNDIsIDE4NCwgMjIyLCAyNDcsIDIzMSwgMjExLCAyNDIsIAotICAgIDE4NCwgMjMyLCAxNTIsIDIsIDIzNSwgMjI1LCAyMjUsIDE5OSwgMjUwLCAwLCAyMzIsIDE1MiwgMiwgMjM0LCAxMzgsIDIzNCwgCi0gICAgMTM4LCAyMzIsIDE1MSwgMjA0LCAyMzIsIDE1MSwgMjUyLCA0NCwgMjUyLCA0NSwgMiwgMjUxLCA0LCA5MSwgMjUxLCAxOTAsIAotICAgIDIzMiwgMjA0LCA4NywgMjIzLCAxNzQsIDI1MSwgODYsIDI1MiwgMTg1LCAyLCAxNDAsIDgwLCA0OCwgMjQ1LCAxNDMsIDIsIAotICAgIDE0MCwgODAsIDQ4LCAyMjYsIDE5NywgMiwgMjQ1LCAzMSwgMTY0LCAyLCA0MywgNDQsIDgwLCA0OCwgMjE5LCAzOSwgMiwgCi0gICAgOTcsIDgwLCA0OCwgMjE2LCAxNCwgMiwgMjE0LCAxNTMsIDgwLCA0OCwgMjI4LCA3NSwgMTIzLCAyMTQsIDE4NCwgMjQ1LCAKLSAgICAxOTEsIDg3LCAyMzQsIDEzNiwgMjE2LCAyNDcsIDIzNSwgMjE5LCAxNiwgMzEsIDcsIDYsIDIzMywgOSwgMjM1LCAyMTksIAotICAgIDE2LCAzMSwgNywgNCwgMjMzLCA5LCAyMzUsIDIxOSwgMTYsIDMxLCAyMjcsIDE5OSwgMjM1LCAyMTksIDE2LCAzMSwgMjE3LCAKLSAgICAxODMsIDIzNSwgMjE5LCAxNiwgMzEsIDcsIDIzMywgOSwgMjQ0LCA5NiwgMjQ1LCAxNzIsIDIxNiwgOSwgMjExLCAxOTksIAotICAgIDI0MiwgMjEsIDIyNywgMTgyLCAyMiwgMjUxLCAxOTcsIDI0MSwgNjYsIDIyNSwgNTAsIDIzMCwgMjI2LCAyMTYsIDI1NSwgCi0gICAgMjQ5LCAxMTQsIDI1MiwgMTU5LCAyMTksIDEyNSwgMjI1LCA5LCAyMTgsIDE1NywgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCAKLSAgICAyMzUsIDEzMSwgMTYsIDMxLCAyNTIsIDU3LCAyMTUsIDIyMCwgMjQ1LCAxNTYsIDg1LCA0MiwgMjUxLCA4NiwgNzEsIDQyLCAKLSAgICAyNTEsIDg2LCAyMzMsIDg1LCAyMjMsIDExMSwgMjUwLCAzNSwgMjMzLCA4NSwgMjUxLCAyMDgsIDI1MCwgMzUsIDIzMywgODUsIAotICAgIDIyNiwgMTU3LCAyNDcsIDI0OCwgMjMzLCA4NSwgMjUxLCAyMDgsIDI0NywgMjQ4LCA0LCAyMjYsIDE1NywgMjQ3LCAyNDgsIAotICAgIDQsIDI1MSwgMjA4LCAyNDcsIDI0OCwgMjE0LCAxNjIsIDIyMywgMTExLCAyMTUsIDIyNSwgMjQ2LCAxMDUsIDIyMywgMTExLCAKLSAgICAyMTUsIDIyNSwgMjE0LCAxNjIsIDQsIDIyMywgMTExLCAyMTUsIDIyNSwgMjQ2LCAxMDUsIDQsIDIyMywgMTExLCAyMTUsIAotICAgIDIyNSwgMzcsIDI0OSwgMTMxLCAyMjQsIDI1MiwgMjQ5LCAxMzEsIDIyNCwgMjUzLCAyLCAyNDIsIDI2LCA1MSwgMjQ5LCAKLSAgICAxMzEsIDIyNCwgMjUyLCAyMjgsIDQ5LCA0MywgMjIwLCAxNTMsIDIsIDEzNCwgMjQ3LCAxMTgsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDEyMywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDExMywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDEzNCwgCi0gICAgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgMTEsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDgxLCAKLSAgICAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE5LCAxMjUsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMjAsIAotICAgIDEyMiwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NSwgMTkzLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgCi0gICAgMjI4LCAyMDAsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTYsIDI0OCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAKLSAgICAxOTEsIDI0NSwgMTY4LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA3NywgMjI2LCAyNDIsIDI1MCwgNCwgCi0gICAgMjQ0LCAxOTEsIDIyNiwgMTkyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTUsIDU2LCAyNTAsIDQsIDI0NCwgMTkxLCAyMTYsIAotICAgIDE0MCwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA3LCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDc5LCAyNTAsIDQsIDI0NCwgCi0gICAgMTkxLCAyMTksIDEyMSwgMjUwLCA0LCAyNDQsIDE5MSwgMjIwLCAxMjEsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NSwgMTkyLCAKLSAgICAyNTAsIDQsIDI0NCwgMTkxLCAyMjgsIDE5OSwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAyNDYsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDI0NSwgMTY2LCAyNTAsIDQsIDI0NCwgMTkxLCAyMTUsIDc1LCAyMzAsIDExNywgMjQzLCAyMzAsIDIxNiwgMzYsIDIxNiwgMiwgCi0gICAgMjE4LCAxNDgsIDY0LCAyMzIsIDIzOSwgMjE5LCAxNzAsIDY0LCAyMzUsIDEzMiwgMjMwLCAxMDYsIDI0MiwgMTI0LCAyNDQsIAotICAgIDE5MCwgMjQyLCAxMjQsIDI0NCwgMTkxLCAyLCAyMTksIDc0LCAyNDUsIDEzLCAyNDQsIDE5MSwgMiwgMjE3LCAxNCwgNjQsIAotICAgIDIzNSwgNTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAKLSAgICAyMzAsIDExMSwgMjIsIDIxOSwgNzQsIDI0NSwgMTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTExLCAyMiwgCi0gICAgMjQ5LCAyMzAsIDIxNywgMjQ3LCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMSwgMjIsIDIxNiwgMTA0LCAKLSAgICAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjQyLCAyNSwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MCwgMjQ3LCAKLSAgICAyMTEsIDIzMywgMjQ0LCAxOTAsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMTksIDc0LCAyNDUsIDEzLCAyNDQsIDE5MSwgCi0gICAgMjIxLCAyMTcsIDI0OCwgNjIsIDI0NCwgMzMsIDIyMywgODgsIDI0NCwgMTkwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjQxLCAKLSAgICAyMjYsIDI0NSwgMTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMTgsIDM0LCAyMTksIDczLCAyNDQsIDE5MCwgMjI5LCA4NywgCi0gICAgMjQ0LCAxOTAsIDI0NSwgMjMsIDI0NCwgMTkwLCAyMTQsIDE4OCwgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyLCAyNDksIDIzMCwgCi0gICAgMjE3LCAyNDcsIDIyNSwgMTkyLCAyNDQsIDE5MCwgMjQ5LCAyMDEsIDI0NCwgMTkwLCAyNDksIDIwMiwgMjQ0LCAxOTAsIAotICAgIDIzNCwgNjIsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMjE2LCAxMzcsIDExNSwgMjM0LCA2MywgMjM0LCA2MiwgMjQ0LCAxOTEsIAotICAgIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDIzNCwgNjIsIDI0NCwgMTkxLCAyLCAyNTAsIDAsIDI0NSwgMTMsIDI0NCwgMTkxLCAyLCAKLSAgICAyMTgsIDg4LCAyMTYsIDE5LCAyNDQsIDE5MSwgMiwgMjE4LCA4OCwgMjE2LCAyMCwgMjIsIDIxMSwgMjMzLCAyNDUsIDE1LCAKLSAgICAyNDQsIDE5MSwgMiwgMjE4LCA4OCwgMjE2LCAyMCwgMjIsIDIxNiwgMTA0LCAyNDUsIDEzLCAyNDcsIDE5MiwgMjQ0LCAxOTAsIAotICAgIDIxMSwgMjA0LCAyNDQsIDE5MCwgMjU0LCAxMDgsIDI0NCwgMTkwLCAyMjQsIDIyNywgMjQ0LCAxOTAsIDI0OSwgMTE2LCAKLSAgICAyNDQsIDE5MCwgMjI1LCAxNzAsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjMyLCAxMjYsIDY0LCAyMTUsIDIwNCwgMjQ3LCAKLSAgICAxOTIsIDI1MSwgODgsIDIyMywgODgsIDI0NCwgMTkwLCAyNDMsIDIzOSwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIAotICAgIDI1NCwgMTA2LCAyNDQsIDE5MCwgMjQ0LCAxNTIsIDI0NCwgMTkwLCAyMTIsIDIwLCAyNDQsIDE5MCwgMjE5LCA5MSwgMjQ0LCAKLSAgICAxOTAsIDIxNiwgNzEsIDI0NCwgMTkwLCAyNDIsIDEyNSwgMjQ0LCAxOTAsIDIzMiwgMTE0LCAyNDksIDExNiwgMjQ0LCAxOTAsIAotICAgIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAyNDAsIDIwMywgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgCi0gICAgMTExLCAyMiwgMjQ5LCAyMzAsIDIxNywgMjQ3LCAyNDQsIDE5MSwgMjIxLCAxOTAsIDIzNiwgMCwgMjQ0LCAxNTMsIDI1MywgCi0gICAgMjEzLCAyNDQsIDE5MCwgMjQ0LCA0OSwgMjQ0LCAxOTAsIDIxOSwgOTIsIDI0NCwgMTkwLCAyNDcsIDE2NSwgMjQ0LCAxOTAsIAotICAgIDI0NCwgMTkxLCAyMTEsIDIzMCwgMjMwLCAxMTAsIDI0NCwgMTkxLCAyLCAyMzEsIDg0LCAyMzEsIDE0NCwgMjQyLCAxMjQsIAotICAgIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTcsIDE0LCAKLSAgICA2NCwgMjM1LCA1MywgMjE5LCA3NCwgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAyMTksIDc0LCAyNTAsIAotICAgIDIyNSwgMjQ0LCAxOTEsIDIsIDI0MSwgMjI2LCAyNDUsIDEzLCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxMSwgMTk2LCAKLSAgICAyMTksIDc1LCAyMzQsIDYyLCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDI1MCwgMCwgMjQ1LCAxMywgMjI0LCAyMjcsIDI1MCwgCi0gICAgMjI1LCAyNDQsIDE5MCwgMjQ5LCAxMTYsIDI1MCwgMjI1LCAyNDQsIDE5MCwgMjEyLCAyMCwgMjUwLCAyMjUsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMiwgMjI4LCA3NSwgMjQyLCAxNjMsIDI0MywgMzQsIDI0NCwgMTkxLCAyLCAyMjYsIDIxNSwgMjQzLCAzNCwgCi0gICAgMjI1LCAxNjgsIDI1MSwgMTY4LCAyNDgsIDc1LCAyMjEsIDE2OSwgMjMwLCAxNDUsIDI0MSwgMjI5LCAyMzAsIDE0NSwgMjE5LCAKLSAgICA4LCAyMzAsIDE0NSwgMjQyLCA1LCAyMjUsIDE2OCwgMjIzLCAxNTYsIDEyMywgMjQyLCAxNSwgMjI1LCAxNjgsIDIyMywgCi0gICAgMTU2LCAyNTEsIDE3OCwgMjQyLCAxMSwgMjM2LCAwLCAyNTAsIDE3OSwgMjI1LCAxNjgsIDI0MywgMjM4LCAyMjUsIDE2OCwgCi0gICAgMiwgMjI0LCAyMjcsIDI0NCwgMTkwLCAyMjUsIDE2OCwgMiwgMjQ0LCA0MSwgMjQyLCAxMCwgMjIyLCAyMDMsIDI0MSwgMjE0LCAKLSAgICAyMTgsIDE0MywgMjMyLCAxNDksIDIyMywgMTYyLCAyNTAsIDI0NCwgMjQxLCAxNjIsIDIxNSwgMjQ4LCAyNDEsIDE2MiwgCi0gICAgMjE1LCAyNDksIDIsIDI1MSwgMTE0LCAyMjgsIDUzLCAyMTUsIDI0OCwgMjMxLCAzMiwgMTkyLCAyMjMsIDE2MywgMjE4LCAKLSAgICAxNDksIDIxNSwgMjQ2LCAyMTUsIDI0NywgMjUwLCAyNDQsIDI1MSwgOTIsIDIyNiwgMTk0LCAyNTEsIDkyLCAyMTUsIDIwMSwgCi0gICAgMjUxLCA5MywgMjE4LCAxMjksIDIzMCwgMTg3LCAyNTQsIDEzMCwgMjQ0LCA5NywgMjQ1LCAxMzcsIDIyNCwgMjU1LCAyNTAsIAotICAgIDI0NCwgMjI2LCAxOTQsIDIyNCwgMjU1LCAyNTAsIDI0NCwgMjE3LCAzMiwgMjI2LCAxOTQsIDIxNywgMzIsIDI1MywgMTgwLCAKLSAgICAyMjYsIDE5NCwgMjUzLCAxODAsIDIyMywgMTE4LCAyMTMsIDI0NywgMjQ4LCA1OCwgMjE1LCAxOTIsIDI1MywgMjQyLCAyMzIsIAotICAgIDExNywgMjE1LCAyNTQsIDIzMCwgMTM5LCAyMzAsIDExNiwgMjIzLCAxNjEsIDIxOCwgNiwgMjIzLCAxNjEsIDIzMCwgMTE2LCAKLSAgICAyNTEsIDI4LCAyNTQsIDIyOSwgMjE1LCAyNDUsIDIyMCwgMTYsIDIyMiwgMTgyLCAyMTksIDEsIDIwMywgMjE1LCAyNTIsIAotICAgIDIzMiwgMjMwLCA2NywgMjE1LCAyNTIsIDIzMiwgMjMwLCAyNDksIDE5MCwgNTAsIDIyNCwgMjU1LCAyNTAsIDIyOSwgMjIzLCAKLSAgICA0NCwgMjMyLCAyMzAsIDIxNSwgMjIyLCAyNDQsIDc0LCAyMjYsIDE5NywgMjI0LCAyMzgsIDI0NywgMTIzLCAyMjgsIDc1LCAKLSAgICAyNDUsIDEyNSwgNTAsIDIxOSwgNzIsIDg3LCAyMjgsIDc1LCAyMTksIDcyLCA4NywgMjI0LCAxMjIsIDIzMiwgMTkzLCAyMzYsIAotICAgIDAsIDIzNSwgMTU3LCAyMjUsIDQxLCA4NywgMjQ3LCAxNDYsIDIyOCwgNTIsIDIzMiwgMTkzLCA4NywgMjI0LCAyMzIsIDIxMiwgCi0gICAgNDEsIDg3LCAyMjgsIDY2LCAyMTIsIDQxLCA4NywgMjUyLCAyLCAyMjgsIDc1LCAyNTIsIDEsIDI1MiwgMCwgMjMwLCAxMTYsIAotICAgIDI1MiwgMCwgMjI1LCAyMTMsIDIyOCwgNzUsIDIyNSwgMjEyLCAyNTAsIDEwMCwgMjQ5LCAxMjQsIDIzMSwgNTYsIDg3LCAKLSAgICAyMTEsIDIxOCwgODcsIDIyMywgNTksIDI1MiwgMTg3LCA4NywgMjE2LCAzNywgMjEyLCA0MSwgMjQ5LCAyNTMsIDIxOSwgCi0gICAgMjM0LCAyNTIsIDExOCwgMjUyLCAxMTYsIDIyNSwgMjQyLCAyNDksIDE3NywgMjQ5LCA4NiwgMjUyLCAxNjksIDI1MCwgMjIsIAotICAgIDQzLCAyMzIsIDkwLCAxMDgsIDE2LCAzMSwgMjI0LCAzLCAxMDgsIDE2LCAzMSwgMjU0LCAxOTIsIDEwOCwgMTYsIDMxLCAKLSAgICAyNDQsIDk2LCAxMDgsIDE2LCAzMSwgMjQ1LCAyMjMsIDEwOCwgMTYsIDMxLCAyMTIsIDQwLCAxMDgsIDE2LCAzMSwgMjU0LCAKLSAgICA0MywgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIyMywgMTA1LCAxMDgsIDE2LCAzMSwgMjU0LCA0NCwgMjIzLCAxMDQsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTQsIDQ0LCAyMTMsIDE0MywgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIxMywgMTQyLCAxMDgsIDE2LCAzMSwgCisgICAgMTM5LCA0LCA2MSwgMTEsIDEzOSwgNCwgMjUzLCAxNjYsIDExLCAxMzksIDQsIDI1MSwgNzQsIDExLCAxMzksIDQsIDI0OSwgCisgICAgNjgsIDExLCAxMzksIDQsIDc2LCAxMSwgMTM5LCA0LCAyNDUsIDE0LCAxMSwgMTM5LCA0LCAyNDMsIDIwOSwgMTEsIDEzOSwgCisgICAgNCwgMjQyLCA2NywgMTEsIDEzOSwgNCwgNzQsIDExLCAxMzksIDQsIDIzNSwgMTUwLCAxMSwgMTM5LCA0LCAyMzUsIDI5LCAKKyAgICAxMSwgMTM5LCA0LCAxNTYsIDExLCAxMzksIDQsIDE5NCwgMTEsIDEzOSwgNCwgMjMwLCAzMCwgMTEsIDEzOSwgNCwgNzgsIAorICAgIDExLCAxMzksIDQsIDIyNiwgMTA5LCAxMSwgMTM5LCA0LCAyMjQsIDk5LCAxMSwgMTM5LCA0LCAxNTMsIDExLCAxMzksIDQsIAorICAgIDIyMiwgOTMsIDExLCAxMzksIDQsIDIxNywgMTUzLCAxMSwgMTM5LCA0LCA2OSwgMTEsIDEzOSwgNCwgMjE0LCAxMDUsIDExLCAKKyAgICAxMzksIDQsIDIxMiwgOTgsIDExLCAxMzksIDQsIDIxMSwgMTc4LCAxMSwgMTM5LCA0LCAyMTEsIDExNywgMTEsIDEzOSwgNCwgCisgICAgMjEwLCAxNTksIDExLCAyMywgMTMzLCA2LCA2MSwgMTEsIDIzLCAxMzMsIDYsIDI1MywgMTY2LCAxMSwgMjMsIDEzMywgNiwgCisgICAgMjUxLCA3NCwgMTEsIDIzLCAxMzMsIDYsIDI0OSwgNjgsIDExLCAyMywgMTMzLCA2LCA3NiwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAyMywgMTMzLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAxMzMsIDYsIDI0MiwgNjcsIDExLCAyMywgMTMzLCAKKyAgICA2LCA3NCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDEzMywgNiwgMjM1LCAyOSwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDE1NiwgMTEsIDIzLCAxMzMsIDYsIDE5NCwgMTEsIDIzLCAxMzMsIDYsIDIzMCwgMzAsIDExLCAyMywgMTMzLCA2LCA3OCwgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDEzMywgNiwgMjI0LCA5OSwgMTEsIDIzLCAxMzMsIDYsIDE1MywgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIyMiwgOTMsIDExLCAyMywgMTMzLCA2LCAyMTcsIDE1MywgMTEsIDIzLCAxMzMsIDYsIDY5LCAKKyAgICAxMSwgMjMsIDEzMywgNiwgMjE0LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAKKyAgICAxNzgsIDExLCAyMywgMTMzLCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNCwgCisgICAgNjEsIDExLCAyMywgMTMzLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAxMzMsIDQsIDI1MSwgNzQsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyNDksIDY4LCAxMSwgMjMsIDEzMywgNCwgNzYsIDExLCAyMywgMTMzLCA0LCAyNDUsIDE0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjQzLCAyMDksIDExLCAyMywgMTMzLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDEzMywgNCwgNzQsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyMzUsIDE1MCwgMTEsIDIzLCAxMzMsIDQsIDIzNSwgMjksIDExLCAyMywgMTMzLCA0LCAxNTYsIDExLCAyMywgMTMzLCA0LCAKKyAgICAxOTQsIDExLCAyMywgMTMzLCA0LCAyMzAsIDMwLCAxMSwgMjMsIDEzMywgNCwgNzgsIDExLCAyMywgMTMzLCA0LCAyMjYsIAorICAgIDEwOSwgMTEsIDIzLCAxMzMsIDQsIDIyNCwgOTksIDExLCAyMywgMTMzLCA0LCAxNTMsIDExLCAyMywgMTMzLCA0LCAyMjIsIAorICAgIDkzLCAxMSwgMjMsIDEzMywgNCwgMjE3LCAxNTMsIDExLCAyMywgMTMzLCA0LCA2OSwgMTEsIDIzLCAxMzMsIDQsIDIxNCwgCisgICAgMTA1LCAxMSwgMjMsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjExLCAxMTcsIDExLCAyMywgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCA2LCA2MSwgMTEsIDM1LCA2LCAyNTMsIDE2NiwgCisgICAgMTEsIDM1LCA2LCAyNTEsIDc0LCAxMSwgMzUsIDYsIDI0OSwgNjgsIDExLCAzNSwgNiwgNzYsIDExLCAzNSwgNiwgMjQ1LCAKKyAgICAxNCwgMTEsIDM1LCA2LCAyNDMsIDIwOSwgMTEsIDM1LCA2LCAyNDIsIDY3LCAxMSwgMzUsIDYsIDc0LCAxMSwgMzUsIDYsIAorICAgIDIzNSwgMTUwLCAxMSwgMzUsIDYsIDIzNSwgMjksIDExLCAzNSwgNiwgMTU2LCAxMSwgMzUsIDYsIDE5NCwgMTEsIDM1LCA2LCAKKyAgICAyMzAsIDMwLCAxMSwgMzUsIDYsIDc4LCAxMSwgMzUsIDYsIDIyNiwgMTA5LCAxMSwgMzUsIDYsIDIyNCwgOTksIDExLCAzNSwgCisgICAgNiwgMTUzLCAxMSwgMzUsIDYsIDIyMiwgOTMsIDExLCAzNSwgNiwgMjE3LCAxNTMsIDExLCAzNSwgNiwgNjksIDExLCAzNSwgCisgICAgNiwgMjE0LCAxMDUsIDExLCAzNSwgNiwgMjEyLCA5OCwgMTEsIDM1LCA2LCAyMTEsIDE3OCwgMTEsIDM1LCA2LCAyMTEsIAorICAgIDExNywgMTEsIDM1LCA2LCAyMTAsIDE1OSwgMTEsIDM1LCA0LCA2MSwgMTEsIDM1LCA0LCAyNTMsIDE2NiwgMTEsIDM1LCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMzUsIDQsIDI0OSwgNjgsIDExLCAzNSwgNCwgNzYsIDExLCAzNSwgNCwgMjQ1LCAxNCwgMTEsIDM1LCAKKyAgICA0LCAyNDMsIDIwOSwgMTEsIDM1LCA0LCAyNDIsIDY3LCAxMSwgMzUsIDQsIDc0LCAxMSwgMzUsIDQsIDIzNSwgMTUwLCAxMSwgCisgICAgMzUsIDQsIDIzNSwgMjksIDExLCAzNSwgNCwgMTU2LCAxMSwgMzUsIDQsIDE5NCwgMTEsIDM1LCA0LCAyMzAsIDMwLCAxMSwgCisgICAgMzUsIDQsIDc4LCAxMSwgMzUsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDQsIDIyNCwgOTksIDExLCAzNSwgNCwgMTUzLCAxMSwgCisgICAgMzUsIDQsIDIyMiwgOTMsIDExLCAzNSwgNCwgMjE3LCAxNTMsIDExLCAzNSwgNCwgNjksIDExLCAzNSwgNCwgMjE0LCAxMDUsIAorICAgIDExLCAzNSwgNCwgMjEyLCA5OCwgMTEsIDM1LCA0LCAyMTEsIDE3OCwgMTEsIDM1LCA0LCAyMTEsIDExNywgMTEsIDM1LCA0LCAKKyAgICAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNiwgNjEsIDExLCAzNSwgMjMsIDYsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCA2LCAyNTEsIAorICAgIDc0LCAxMSwgMzUsIDIzLCA2LCAyNDksIDY4LCAxMSwgMzUsIDIzLCA2LCA3NiwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxNCwgCisgICAgMTEsIDM1LCAyMywgNiwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDYsIDI0MiwgNjcsIDExLCAzNSwgMjMsIDYsIDc0LCAxMSwgCisgICAgMzUsIDIzLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgNiwgMjM1LCAyOSwgMTEsIDM1LCAyMywgNiwgMTU2LCAxMSwgMzUsIAorICAgIDIzLCA2LCAxOTQsIDExLCAzNSwgMjMsIDYsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDYsIDc4LCAxMSwgMzUsIDIzLCA2LCAKKyAgICAyMjYsIDEwOSwgMTEsIDM1LCAyMywgNiwgMjI0LCA5OSwgMTEsIDM1LCAyMywgNiwgMTUzLCAxMSwgMzUsIDIzLCA2LCAyMjIsIAorICAgIDkzLCAxMSwgMzUsIDIzLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgNiwgNjksIDExLCAzNSwgMjMsIDYsIDIxNCwgMTA1LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxMTcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA0LCA2MSwgMTEsIDM1LCAyMywgNCwgMjUzLCAxNjYsIDExLCAKKyAgICAzNSwgMjMsIDQsIDI1MSwgNzQsIDExLCAzNSwgMjMsIDQsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDQsIDc2LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyNDUsIDE0LCAxMSwgMzUsIDIzLCA0LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgNCwgMjQyLCA2NywgMTEsIDM1LCAKKyAgICAyMywgNCwgNzQsIDExLCAzNSwgMjMsIDQsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAKKyAgICA0LCAxNTYsIDExLCAzNSwgMjMsIDQsIDE5NCwgMTEsIDM1LCAyMywgNCwgMjMwLCAzMCwgMTEsIDM1LCAyMywgNCwgNzgsIAorICAgIDExLCAzNSwgMjMsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCA0LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCA0LCAxNTMsIDExLCAKKyAgICAzNSwgMjMsIDQsIDIyMiwgOTMsIDExLCAzNSwgMjMsIDQsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCA0LCA2OSwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMTEsIDExNywgMTEsIDM1LCAyMywgNCwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDYsIDYxLCAxMSwgMzUsIDMyLCAKKyAgICA2LCAyNTMsIDE2NiwgMTEsIDM1LCAzMiwgNiwgMjUxLCA3NCwgMTEsIDM1LCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDM1LCAzMiwgCisgICAgNiwgNzYsIDExLCAzNSwgMzIsIDYsIDI0NSwgMTQsIDExLCAzNSwgMzIsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDMyLCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMzUsIDMyLCA2LCA3NCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzNSwgMzIsIDYsIDIzNSwgCisgICAgMjksIDExLCAzNSwgMzIsIDYsIDE1NiwgMTEsIDM1LCAzMiwgNiwgMTk0LCAxMSwgMzUsIDMyLCA2LCAyMzAsIDMwLCAxMSwgCisgICAgMzUsIDMyLCA2LCA3OCwgMTEsIDM1LCAzMiwgNiwgMjI2LCAxMDksIDExLCAzNSwgMzIsIDYsIDIyNCwgOTksIDExLCAzNSwgCisgICAgMzIsIDYsIDE1MywgMTEsIDM1LCAzMiwgNiwgMjIyLCA5MywgMTEsIDM1LCAzMiwgNiwgMjE3LCAxNTMsIDExLCAzNSwgMzIsIAorICAgIDYsIDY5LCAxMSwgMzUsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNiwgCisgICAgMjExLCAxNzgsIDExLCAzNSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgCisgICAgNCwgNjEsIDExLCAzNSwgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDMyLCA0LCAKKyAgICAyNDksIDY4LCAxMSwgMzUsIDMyLCA0LCA3NiwgMTEsIDM1LCAzMiwgNCwgMjQ1LCAxNCwgMTEsIDM1LCAzMiwgNCwgMjQzLCAKKyAgICAyMDksIDExLCAzNSwgMzIsIDQsIDI0MiwgNjcsIDExLCAzNSwgMzIsIDQsIDc0LCAxMSwgMzUsIDMyLCA0LCAyMzUsIDE1MCwgCisgICAgMTEsIDM1LCAzMiwgNCwgMjM1LCAyOSwgMTEsIDM1LCAzMiwgNCwgMTU2LCAxMSwgMzUsIDMyLCA0LCAxOTQsIDExLCAzNSwgCisgICAgMzIsIDQsIDIzMCwgMzAsIDExLCAzNSwgMzIsIDQsIDc4LCAxMSwgMzUsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAzMiwgCisgICAgNCwgMjI0LCA5OSwgMTEsIDM1LCAzMiwgNCwgMTUzLCAxMSwgMzUsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDMyLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDM1LCAzMiwgNCwgNjksIDExLCAzNSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA0LCAyMTIsIAorICAgIDk4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDQsIDIxMCwgCisgICAgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNiwgNjEsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDI1MSwgNzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDksIDY4LCAxMSwgMzUsIDIzLCAzMiwgNiwgNzYsIDExLCAzNSwgCisgICAgMjMsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDMyLCA2LCAyNDIsIAorICAgIDY3LCAxMSwgMzUsIDIzLCAzMiwgNiwgNzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIzNSwgMjksIDExLCAzNSwgMjMsIDMyLCA2LCAxNTYsIDExLCAzNSwgMjMsIDMyLCA2LCAxOTQsIDExLCAzNSwgMjMsIAorICAgIDMyLCA2LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIyNCwgOTksIDExLCAzNSwgMjMsIDMyLCA2LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjIsIAorICAgIDkzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCA2OSwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTc4LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgMzIsIDQsIDc2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCAxNCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDQsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQyLCA2NywgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDc0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMTk0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAzMCwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAxMDksIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDk5LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjIyLCA5MywgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDIxNywgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNCwgNjksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTE3LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCAxNTksIDExLCAyMzAsIDE0MywgNiwgNjEsIDExLCAyMzAsIDE0MywgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMzAsIDE0MywgNiwgMjUxLCA3NCwgMTEsIDIzMCwgMTQzLCA2LCAyNDksIDY4LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDc2LCAxMSwgMjMwLCAxNDMsIDYsIDI0NSwgMTQsIDExLCAyMzAsIDE0MywgNiwgMjQzLCAyMDksIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjQyLCA2NywgMTEsIDIzMCwgMTQzLCA2LCA3NCwgMTEsIDIzMCwgMTQzLCA2LCAyMzUsIDE1MCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMzUsIDI5LCAxMSwgMjMwLCAxNDMsIDYsIDE1NiwgMTEsIDIzMCwgMTQzLCA2LCAxOTQsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjMwLCAzMCwgMTEsIDIzMCwgMTQzLCA2LCA3OCwgMTEsIDIzMCwgMTQzLCA2LCAyMjYsIDEwOSwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMjQsIDk5LCAxMSwgMjMwLCAxNDMsIDYsIDE1MywgMTEsIDIzMCwgMTQzLCA2LCAyMjIsIDkzLCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIxNywgMTUzLCAxMSwgMjMwLCAxNDMsIDYsIDY5LCAxMSwgMjMwLCAxNDMsIDYsIDIxNCwgMTA1LCAxMSwgMjMwLCAxNDMsIAorICAgIDYsIDIxMiwgOTgsIDExLCAyMzAsIDE0MywgNiwgMjExLCAxNzgsIDExLCAyMzAsIDE0MywgNiwgMjExLCAxMTcsIDExLCAKKyAgICAyMzAsIDE0MywgNiwgMjEwLCAxNTksIDExLCAyMzAsIDE0MywgNCwgNjEsIDExLCAyMzAsIDE0MywgNCwgMjUzLCAxNjYsIAorICAgIDExLCAyMzAsIDE0MywgNCwgMjUxLCA3NCwgMTEsIDIzMCwgMTQzLCA0LCAyNDksIDY4LCAxMSwgMjMwLCAxNDMsIDQsIDc2LCAKKyAgICAxMSwgMjMwLCAxNDMsIDQsIDI0NSwgMTQsIDExLCAyMzAsIDE0MywgNCwgMjQzLCAyMDksIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjQyLCA2NywgMTEsIDIzMCwgMTQzLCA0LCA3NCwgMTEsIDIzMCwgMTQzLCA0LCAyMzUsIDE1MCwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMzUsIDI5LCAxMSwgMjMwLCAxNDMsIDQsIDE1NiwgMTEsIDIzMCwgMTQzLCA0LCAxOTQsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjMwLCAzMCwgMTEsIDIzMCwgMTQzLCA0LCA3OCwgMTEsIDIzMCwgMTQzLCA0LCAyMjYsIDEwOSwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMjQsIDk5LCAxMSwgMjMwLCAxNDMsIDQsIDE1MywgMTEsIDIzMCwgMTQzLCA0LCAyMjIsIDkzLCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIxNywgMTUzLCAxMSwgMjMwLCAxNDMsIDQsIDY5LCAxMSwgMjMwLCAxNDMsIDQsIDIxNCwgMTA1LCAxMSwgMjMwLCAxNDMsIAorICAgIDQsIDIxMiwgOTgsIDExLCAyMzAsIDE0MywgNCwgMjExLCAxNzgsIDExLCAyMzAsIDE0MywgNCwgMjExLCAxMTcsIDExLCAKKyAgICAyMzAsIDE0MywgNCwgMjEwLCAxNTksIDExLCAzMiwgNCwgMjQ3LCAxMjcsIDc0LCAxMSwgMzIsIDQsIDI0NywgMTI3LCAyMzUsIAorICAgIDE1MCwgMTEsIDIzLCA2LCAyNTQsIDE1MSwgMTEsIDIzLCA2LCAyNTIsIDM0LCAxMSwgMjMsIDYsIDI0MywgMTE0LCAxMSwgCisgICAgMjMsIDYsIDI0OCwgNjIsIDExLCAyMywgNiwgMjQ1LCAxMDgsIDExLCAyMywgNiwgMjEwLCA4NSwgMTEsIDIzLCA2LCAyNDUsIAorICAgIDcxLCAxMSwgMjMsIDYsIDIxNiwgMTgwLCAxMSwgMjMsIDYsIDIzNSwgMTkyLCAxMSwgMjMsIDYsIDIzNCwgMjI4LCAxMSwgCisgICAgMjMsIDYsIDIzMywgMTA0LCAxMSwgMjMsIDYsIDIzMCwgMTA3LCAxMSwgMjMsIDYsIDIyNywgMjQyLCAxMSwgMjMsIDYsIAorICAgIDIxMSwgMTU3LCAxMSwgMjMsIDYsIDIyNiwgMjAzLCAxMSwgMjMsIDYsIDIyNSwgMTExLCAxMSwgMjMsIDYsIDIyMywgNDAsIAorICAgIDExLCAyMywgNiwgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDYsIDIxOSwgMTc5LCAxMSwgMjMsIDYsIDIxNywgNDIsIDExLCAyMywgCisgICAgNiwgMjE0LCAxNTcsIDExLCAyMywgNiwgMjI1LCAxMzYsIDExLCAyMywgNiwgMjUwLCAxMTgsIDExLCAyMywgNiwgMjI0LCAKKyAgICAxNjQsIDExLCAyMywgNiwgMjI2LCAyMDUsIDExLCAyMywgMjI5LCAyMjYsIDExLCAyMywgNCwgMjU0LCAxNTEsIDExLCAyMywgCisgICAgNCwgMjUyLCAzNCwgMTEsIDIzLCA0LCAyNDMsIDExNCwgMTEsIDIzLCA0LCAyNDgsIDYyLCAxMSwgMjMsIDQsIDI0NSwgMTA4LCAKKyAgICAxMSwgMjMsIDQsIDIxMCwgODUsIDExLCAyMywgNCwgMjQ1LCA3MSwgMTEsIDIzLCA0LCAyMTYsIDE4MCwgMTEsIDIzLCA0LCAKKyAgICAyMzUsIDE5MiwgMTEsIDIzLCA0LCAyMzQsIDIyOCwgMTEsIDIzLCA0LCAyMzMsIDEwNCwgMTEsIDIzLCA0LCAyMzAsIDEwNywgCisgICAgMTEsIDIzLCA0LCAyMjcsIDI0MiwgMTEsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDIzLCA0LCAyMjYsIDIwMywgMTEsIDIzLCA0LCAKKyAgICAyMjUsIDExMSwgMTEsIDIzLCA0LCAyMjMsIDQwLCAxMSwgMjMsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDIzLCA0LCAyMTksIAorICAgIDE3OSwgMTEsIDIzLCA0LCAyMTcsIDQyLCAxMSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDQsIDIyNSwgMTM2LCAxMSwgCisgICAgMjMsIDQsIDI1MCwgMTE4LCAxMSwgMjMsIDQsIDIyNCwgMTY0LCAxMSwgMjMsIDQsIDIyNiwgMjA1LCAxMSwgMjMsIDIyNiwgCisgICAgMSwgMjQ3LCAyNDEsIDExLCAyMywgMjQ1LCAxMDksIDg3LCAxMSwgMjMsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCAyMzQsIAorICAgIDIyOSwgODcsIDExLCAyMywgMjI1LCAxMzcsIDg3LCAxMSwgMjMsIDIyMywgNDEsIDg3LCAxMSwgMjMsIDIyNSwgMTEyLCA4NywgCisgICAgMTEsIDMyLCA2LCAyNTQsIDE1MSwgMTEsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMzIsIDYsIDI0MywgMTE0LCAxMSwgMzIsIDYsIAorICAgIDI0OCwgNjIsIDExLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDMyLCA2LCAyNDUsIDcxLCAxMSwgCisgICAgMzIsIDYsIDIxNiwgMTgwLCAxMSwgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMzIsIDYsIDIzNCwgMjI4LCAxMSwgMzIsIDYsIAorICAgIDIzMywgMTA0LCAxMSwgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMzIsIDYsIDIyNywgMjQyLCAxMSwgMzIsIDYsIDIxMSwgMTU3LCAKKyAgICAxMSwgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMzIsIDYsIDIyNSwgMTExLCAxMSwgMzIsIDYsIDIyMywgNDAsIDExLCAzMiwgNiwgCisgICAgMjE2LCAxODEsIDg3LCAxMSwgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMzIsIDYsIDIxNywgNDIsIDExLCAzMiwgNiwgMjE0LCAKKyAgICAxNTcsIDExLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAzMiwgNiwgMjUwLCAxMTgsIDExLCAzMiwgNiwgMjI0LCAxNjQsIDExLCAKKyAgICAzMiwgNiwgMjI2LCAyMDUsIDExLCAzMiwgMjI5LCAyMjYsIDExLCAzMiwgNCwgMjU0LCAxNTEsIDExLCAzMiwgNCwgMjUyLCAKKyAgICAzNCwgMTEsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDMyLCA0LCAyNDgsIDYyLCAxMSwgMzIsIDQsIDI0NSwgMTA4LCAxMSwgMzIsIAorICAgIDQsIDIxMCwgODUsIDExLCAzMiwgNCwgMjQ1LCA3MSwgMTEsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDMyLCA0LCAyMzUsIDE5MiwgCisgICAgMTEsIDMyLCA0LCAyMzQsIDIyOCwgMTEsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDMyLCA0LCAKKyAgICAyMjcsIDI0MiwgMTEsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDMyLCA0LCAyMjYsIDIwMywgMTEsIDMyLCA0LCAyMjUsIDExMSwgCisgICAgMTEsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDMyLCA0LCAyMTksIDE3OSwgMTEsIDMyLCAKKyAgICA0LCAyMTcsIDQyLCAxMSwgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMzIsIDQsIDI1MCwgCisgICAgMTE4LCAxMSwgMzIsIDQsIDIyNCwgMTY0LCAxMSwgMzIsIDQsIDIyNiwgMjA1LCAxMSwgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIAorICAgIDExLCAzMiwgMjQ1LCAxMDksIDg3LCAxMSwgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAzMiwgCisgICAgMjI1LCAxMzcsIDg3LCAxMSwgMzIsIDIyMywgNDEsIDg3LCAxMSwgMzIsIDIyNSwgMTEyLCA4NywgMTEsIDIzLCAzMiwgNiwgCisgICAgMjU0LCAxNTEsIDExLCAyMywgMzIsIDYsIDI1MiwgMzQsIDExLCAyMywgMzIsIDYsIDI0MywgMTE0LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyNDgsIDYyLCAxMSwgMjMsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDIzLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjQ1LCA3MSwgMTEsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDExLCAyMywgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyMzQsIDIyOCwgMTEsIDIzLCAzMiwgNiwgMjMzLCAxMDQsIDExLCAyMywgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMjMsIDMyLCAKKyAgICA2LCAyMjcsIDI0MiwgMTEsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAyMywgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMjMsIAorICAgIDMyLCA2LCAyMjUsIDExMSwgMTEsIDIzLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDIzLCAzMiwgNiwgMjE2LCAxODEsIDg3LCAxMSwgCisgICAgMjMsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDIzLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDIzLCAzMiwgNiwgMjE0LCAxNTcsIDExLCAKKyAgICAyMywgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMjMsIDMyLCA2LCAyNTAsIDExOCwgMTEsIDIzLCAzMiwgNiwgMjI0LCAxNjQsIAorICAgIDExLCAyMywgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMjMsIDMyLCAyMjksIDIyNiwgMTEsIDIzLCAzMiwgNCwgMjU0LCAxNTEsIAorICAgIDExLCAyMywgMzIsIDQsIDI1MiwgMzQsIDExLCAyMywgMzIsIDQsIDI0MywgMTE0LCAxMSwgMjMsIDMyLCA0LCAyNDgsIDYyLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyNDUsIDEwOCwgMTEsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA3MSwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjE2LCAxODAsIDExLCAyMywgMzIsIDQsIDIzNSwgMTkyLCAxMSwgMjMsIDMyLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDIzLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAyMywgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMjMsIDMyLCA0LCAKKyAgICAyMjcsIDI0MiwgMTEsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAyMywgMzIsIDQsIDIyNiwgMjAzLCAxMSwgMjMsIDMyLCAKKyAgICA0LCAyMjUsIDExMSwgMTEsIDIzLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDIzLCAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMTksIDE3OSwgMTEsIDIzLCAzMiwgNCwgMjE3LCA0MiwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAyMywgCisgICAgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMjMsIDMyLCA0LCAyNTAsIDExOCwgMTEsIDIzLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAKKyAgICAyMywgMzIsIDQsIDIyNiwgMjA1LCAxMSwgMjMsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMjMsIDMyLCAyNDUsIDEwOSwgCisgICAgODcsIDExLCAyMywgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMjMsIDMyLCAyMjUsIAorICAgIDEzNywgODcsIDExLCAyMywgMzIsIDIyMywgNDEsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDExMiwgODcsIDExLCAzNSwgMjMsIAorICAgIDYsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCA2LCAyNTIsIDM0LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDExNCwgMTEsIDM1LCAyMywgCisgICAgNiwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIAorICAgIDYsIDI0NSwgNzEsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgCisgICAgNiwgMjM0LCAyMjgsIDExLCAzNSwgMjMsIDYsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDEwNywgMTEsIDM1LCAKKyAgICAyMywgNiwgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDIwMywgMTEsIAorICAgIDM1LCAyMywgNiwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDYsIDIyMywgNDAsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTgxLCA4NywgCisgICAgMTEsIDM1LCAyMywgNiwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDYsIDIxNywgNDIsIDExLCAzNSwgMjMsIDYsIDIxNCwgMTU3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgNiwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDYsIDIyNCwgCisgICAgMTY0LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMjI5LCAyMjYsIDExLCAzNSwgMjMsIDQsIDI1NCwgCisgICAgMTUxLCAxMSwgMzUsIDIzLCA0LCAyNTIsIDM0LCAxMSwgMzUsIDIzLCA0LCAyNDMsIDExNCwgMTEsIDM1LCAyMywgNCwgMjQ4LCAKKyAgICA2MiwgMTEsIDM1LCAyMywgNCwgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDQsIDI0NSwgCisgICAgNzEsIDExLCAzNSwgMjMsIDQsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAzNSwgMjMsIDQsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDEwNywgMTEsIDM1LCAyMywgNCwgCisgICAgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA0LCAyMjYsIDIwMywgMTEsIDM1LCAyMywgCisgICAgNCwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDQsIDIyMywgNDAsIDExLCAzNSwgMjMsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDQsIDIxNywgNDIsIDExLCAzNSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgNCwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDQsIDIyNCwgMTY0LCAxMSwgCisgICAgMzUsIDIzLCA0LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDM1LCAyMywgMjQ1LCAxMDksIAorICAgIDg3LCAxMSwgMzUsIDIzLCAyMTYsIDE4MSwgODcsIDExLCAzNSwgMjMsIDIzNCwgMjI5LCA4NywgMTEsIDM1LCAyMywgMjI1LCAKKyAgICAxMzcsIDg3LCAxMSwgMzUsIDIzLCAyMjMsIDQxLCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMTIsIDg3LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNiwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAxMTQsIAorICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA3MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgwLCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzQsIDIyOCwgMTEsIDM1LCAyMywgMzIsIDYsIAorICAgIDIzMywgMTA0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjcsIDI0MiwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAzNSwgMjMsIDMyLCA2LCAKKyAgICAyMjUsIDExMSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyMywgNDAsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MSwgODcsIAorICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgNDIsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUwLCAxMTgsIAorICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyMjQsIDE2NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgMjI5LCAyMjYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MiwgMzQsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDM1LCAyMywgMzIsIDQsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICAyNDUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDcxLCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNCwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDIyNywgMjQyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIAorICAgIDIwMywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCAKKyAgICA0MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgMTY0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAKKyAgICAyMDUsIDExLCAzNSwgMjMsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMzUsIDIzLCAzMiwgMjQ1LCAxMDksIDg3LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgMjI1LCAxMzcsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjIzLCA0MSwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIDExMiwgODcsIAorICAgIDExLCAyMywgNiwgMjQ3LCAyMzUsIDExLCAyMywgNCwgMjQ3LCAyMzUsIDExLCAyMywgMjEsIDIxMCwgODYsIDExLCAyMywgCisgICAgMjEsIDExMSwgMTEsIDIzLCAyMSwgMTA1LCAxMSwgMjMsIDIxLCAxNTgsIDExLCAyMywgMjEsIDE2MSwgMTEsIDIzLCAyMSwgCisgICAgMTkwLCAxMSwgMjMsIDIxLCAxOTUsIDExLCAyMywgMjEsIDE5OSwgMTEsIDIzLCAyMSwgMTk2LCAxMSwgMjMsIDIxLCAyMDEsIAorICAgIDExLCAxMzksIDIxLCAyMTAsIDg2LCAxMSwgMTM5LCAyMSwgMTExLCAxMSwgMTM5LCAyMSwgMTA1LCAxMSwgMTM5LCAyMSwgCisgICAgMTU4LCAxMSwgMTM5LCAyMSwgMTYxLCAxMSwgMTM5LCAyMSwgMTkwLCAxMSwgMTM5LCAyMSwgMTk1LCAxMSwgMTM5LCAyMSwgCisgICAgMTk5LCAxMSwgMTM5LCAyMSwgMTk2LCAxMSwgMTM5LCAyMSwgMjAxLCAxMSwgMzUsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIxLCAKKyAgICAxMTEsIDExLCAzNSwgMjEsIDEwNSwgMTEsIDM1LCAyMSwgMTU4LCAxMSwgMzUsIDIxLCAxNjEsIDExLCAzNSwgMjEsIDE5MCwgCisgICAgMTEsIDM1LCAyMSwgMTk1LCAxMSwgMzUsIDIxLCAxOTksIDExLCAzNSwgMjEsIDE5NiwgMTEsIDM1LCAyMSwgMjAxLCAxMSwgCisgICAgMzUsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMywgMjEsIDExMSwgMTEsIDM1LCAyMywgMjEsIDEwNSwgMTEsIDM1LCAKKyAgICAyMywgMjEsIDE1OCwgMTEsIDM1LCAyMywgMjEsIDE2MSwgMTEsIDM1LCAyMywgMjEsIDE5MCwgMTEsIDM1LCAyMywgMjEsIAorICAgIDE5NSwgMTEsIDM1LCAyMywgMjEsIDE5OSwgMTEsIDM1LCAyMywgMjEsIDE5NiwgMTEsIDM1LCAyMywgMjEsIDIwMSwgMTEsIAorICAgIDIzMCwgMTQzLCAyMSwgMjEwLCA4NiwgMTEsIDIzMCwgMTQzLCAyMSwgMTExLCAxMSwgMjMwLCAxNDMsIDIxLCAxMDUsIDExLCAKKyAgICAyMzAsIDE0MywgMjEsIDE1OCwgMTEsIDIzMCwgMTQzLCAyMSwgMTYxLCAxMSwgMjMwLCAxNDMsIDIxLCAxOTAsIDExLCAyMzAsIAorICAgIDE0MywgMjEsIDE5NSwgMTEsIDIzMCwgMTQzLCAyMSwgMTk5LCAxMSwgMjMwLCAxNDMsIDIxLCAxOTYsIDExLCAyMzAsIDE0MywgCisgICAgMjEsIDIwMSwgOSwgMTEsIDI1NCwgMTc5LCA5LCAxMSwgMjUyLCA2MiwgOSwgMTEsIDIzNSwgMTI5LCA5LCAxMSwgMjQ4LCAKKyAgICAyMDMsIDksIDExLCAyMTIsIDMwLCA5LCAxMSwgMjEwLCAxMDgsIDksIDExLCAyNDIsIDQ0LCA5LCAxMSwgMjE3LCA4MSwgOSwgCisgICAgMTEsIDIxMSwgNDMsIDksIDExLCAyMzUsIDAsIDksIDExLCAyMzMsIDEwOCwgOSwgMTEsIDIzMSwgODMsIDksIDExLCAyMjgsIAorICAgIDY3LCA5LCAxMSwgMjIxLCAxNjgsIDksIDExLCAyNTQsIDIwNSwgOSwgMTEsIDI0NCwgMTUwLCA5LCAxMSwgMjIyLCAyOCwgOSwgCisgICAgMTEsIDIyNCwgODQsIDksIDExLCAyMjMsIDk4LCA5LCAxMSwgMjIwLCA2MSwgOSwgMTEsIDIxNywgOCwgOSwgMTEsIDIxNiwgCisgICAgMTkzLCA5LCAxMSwgMjM0LCAxMzUsIDksIDExLCAyMTYsIDIwMywgOSwgMTEsIDI0OCwgMjI0LCA5LCAxMSwgMjEwLCAxMTEsIAorICAgIDksIDExLCAyNDIsIDI1MSwgOSwgMTEsIDI0NywgMTI3LCAyNTIsIDYyLCA5LCAxMSwgMjQ3LCAxMjcsIDIyOCwgNjcsIDksIAorICAgIDExLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDExLCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMTEsIDY1LCAyNTIsIDYyLCA5LCAKKyAgICAxMSwgNjUsIDIzNSwgMTI5LCA5LCAxMSwgNjUsIDI0MSwgMjI1LCA5LCAxMSwgNjUsIDI0MiwgNDQsIDksIDExLCA2NSwgCisgICAgMjExLCA0MywgOSwgMTEsIDY1LCAyMzUsIDAsIDksIDExLCA2NSwgMjMzLCAxMDgsIDksIDExLCA2NSwgMjMxLCA4MywgOSwgCisgICAgMTEsIDY1LCAyMjgsIDY3LCA5LCAxMSwgNjUsIDIyMSwgMTY4LCA5LCAxMSwgNjUsIDI1NCwgMjA1LCA5LCAxMSwgNjUsIAorICAgIDI0NCwgMTUwLCA5LCAxMSwgNjUsIDIyMiwgMjgsIDksIDExLCA2NSwgMjI0LCA4NCwgOSwgMTEsIDY1LCAyMjAsIDYxLCA5LCAKKyAgICAxMSwgNjUsIDIxNywgOCwgOSwgMTEsIDY1LCAyMTYsIDE5MywgOSwgMTEsIDY1LCAyMzQsIDEzNSwgOSwgMTEsIDY1LCAyNDgsIAorICAgIDIyNCwgOSwgMTEsIDY1LCAyNDIsIDI1MSwgOSwgMTEsIDIxNywgNzcsIDIzNSwgMTI5LCA5LCAxMSwgMjE3LCA3NywgMjQyLCAKKyAgICA0NCwgOSwgMTEsIDIxNywgNzcsIDIxMSwgNDMsIDksIDExLCAyMTcsIDc3LCAyMzMsIDEwOCwgOSwgMTEsIDIxNywgNzcsIAorICAgIDIyOCwgNjcsIDksIDExLCAyMTcsIDc3LCAyMjEsIDE2OCwgOSwgMTEsIDIxNywgNzcsIDI1NCwgMjA1LCA5LCAxMSwgMjE3LCAKKyAgICA3NywgMjIyLCAyOCwgOSwgMTEsIDIxNywgNzcsIDIyNCwgODQsIDksIDExLCAyMTcsIDc3LCAyMjAsIDYxLCA5LCAxMSwgCisgICAgMjE3LCA3NywgMjM0LCAxMzUsIDksIDExLCAyMTcsIDc3LCAyNDgsIDIyNCwgOSwgMTEsIDIxNywgNzcsIDI0MiwgMjUxLCA5LCAKKyAgICAxMSwgMjE3LCA3NywgMjQ3LCAxMjcsIDIyOCwgNjcsIDksIDExLCAyMTcsIDc3LCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMTEsIAorICAgIDIxOCwgMTEyLCAyNTIsIDYyLCA5LCAxMSwgMjE4LCAxMTIsIDIzNSwgMTI5LCA5LCAxMSwgMjE4LCAxMTIsIDI0MSwgMjI1LCAKKyAgICA5LCAxMSwgMjE4LCAxMTIsIDI0MiwgNDQsIDksIDExLCAyMTgsIDExMiwgMjE3LCA4MSwgOSwgMTEsIDIxOCwgMTEyLCAyMTEsIAorICAgIDQzLCA5LCAxMSwgMjE4LCAxMTIsIDIzNSwgMCwgOSwgMTEsIDIxOCwgMTEyLCAyMzEsIDgzLCA5LCAxMSwgMjE4LCAxMTIsIAorICAgIDIyOCwgNjcsIDksIDExLCAyMTgsIDExMiwgMjIxLCAxNjgsIDksIDExLCAyMTgsIDExMiwgMjU0LCAyMDUsIDksIDExLCAKKyAgICAyMTgsIDExMiwgMjQ0LCAxNTAsIDksIDExLCAyMTgsIDExMiwgMjIyLCAyOCwgOSwgMTEsIDIxOCwgMTEyLCAyMjQsIDg0LCAKKyAgICA5LCAxMSwgMjE4LCAxMTIsIDIyMCwgNjEsIDksIDExLCAyMTgsIDExMiwgMjE3LCA4LCA5LCAxMSwgMjE4LCAxMTIsIDIxNiwgCisgICAgMTkzLCA5LCAxMSwgMjE4LCAxMTIsIDIzNCwgMTM1LCA5LCAxMSwgMjE4LCAxMTIsIDI0OCwgMjI0LCA5LCAxMSwgMjE4LCAKKyAgICAxMTIsIDIxMCwgMTExLCA5LCAxMSwgMjE4LCAxMTIsIDI0MiwgMjUxLCA5LCAxMSwgMjE4LCAxMTIsIDI0NywgMTI3LCAyNTIsIAorICAgIDYyLCA5LCAxMSwgMjE4LCAxMTIsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMTEsIDIzMiwgMTI4LCAyNTQsIDE3OSwgOSwgCisgICAgMTEsIDIzMiwgMTI4LCAyNTIsIDYyLCA5LCAxMSwgMjMyLCAxMjgsIDIzNSwgMTI5LCA5LCAxMSwgMjMyLCAxMjgsIDI0OCwgCisgICAgMjAzLCA5LCAxMSwgMjMyLCAxMjgsIDI0MSwgMjI1LCA5LCAxMSwgMjMyLCAxMjgsIDIxMiwgMzAsIDksIDExLCAyMzIsIAorICAgIDEyOCwgMjEwLCAxMDgsIDksIDExLCAyMzIsIDEyOCwgMjQyLCA0NCwgOSwgMTEsIDIzMiwgMTI4LCAyMTcsIDgxLCA5LCAxMSwgCisgICAgMjMyLCAxMjgsIDIxMSwgNDMsIDksIDExLCAyMzIsIDEyOCwgMjMzLCAxMDgsIDksIDExLCAyMzIsIDEyOCwgMjMxLCA4MywgCisgICAgOSwgMTEsIDIzMiwgMTI4LCAyMjgsIDY3LCA5LCAxMSwgMjMyLCAxMjgsIDIyMSwgMTY4LCA5LCAxMSwgMjMyLCAxMjgsIAorICAgIDI1NCwgMjA1LCA5LCAxMSwgMjMyLCAxMjgsIDI0NCwgMTUwLCA5LCAxMSwgMjMyLCAxMjgsIDIyMiwgMjgsIDksIDExLCAKKyAgICAyMzIsIDEyOCwgMjI0LCA4NCwgOSwgMTEsIDIzMiwgMTI4LCAyMjMsIDk4LCA5LCAxMSwgMjMyLCAxMjgsIDIyMCwgNjEsIDksIAorICAgIDExLCAyMzIsIDEyOCwgMjE3LCA4LCA5LCAxMSwgMjMyLCAxMjgsIDIxNiwgMTkzLCA5LCAxMSwgMjMyLCAxMjgsIDIzNCwgCisgICAgMTM1LCA5LCAxMSwgMjMyLCAxMjgsIDIxNiwgMjAzLCA5LCAxMSwgMjMyLCAxMjgsIDI0OCwgMjI0LCA5LCAxMSwgMjMyLCAKKyAgICAxMjgsIDIxMCwgMTExLCA5LCAxMSwgMjMyLCAxMjgsIDI0MiwgMjUxLCA5LCAxMSwgMTM5LCAyNTIsIDYyLCA5LCAxMSwgCisgICAgMTM5LCAyMzUsIDEyOSwgOSwgMTEsIDEzOSwgMjQ4LCAyMDMsIDksIDExLCAxMzksIDIxMiwgMzAsIDksIDExLCAxMzksIAorICAgIDIxMCwgMTA4LCA5LCAxMSwgMTM5LCAyNDIsIDQ0LCA5LCAxMSwgMTM5LCAyMTcsIDgxLCA5LCAxMSwgMTM5LCAyMTEsIDQzLCAKKyAgICA5LCAxMSwgMTM5LCAyMzMsIDEwOCwgOSwgMTEsIDEzOSwgMjMxLCA4MywgOSwgMTEsIDEzOSwgMjI4LCA2NywgOSwgMTEsIAorICAgIDEzOSwgMjIxLCAxNjgsIDksIDExLCAxMzksIDI1NCwgMjA1LCA5LCAxMSwgMTM5LCAyNDQsIDE1MCwgOSwgMTEsIDEzOSwgCisgICAgMjIyLCAyOCwgOSwgMTEsIDEzOSwgMjI0LCA4NCwgOSwgMTEsIDEzOSwgMjIzLCA5OCwgOSwgMTEsIDEzOSwgMjIwLCA2MSwgCisgICAgOSwgMTEsIDEzOSwgMjE3LCA4LCA5LCAxMSwgMTM5LCAyMTYsIDE5MywgOSwgMTEsIDEzOSwgMjM0LCAxMzUsIDksIDExLCAKKyAgICAxMzksIDIxNiwgMjAzLCA5LCAxMSwgMTM5LCAyNDgsIDIyNCwgOSwgMTEsIDEzOSwgMjEwLCAxMTEsIDksIDExLCAxMzksIAorICAgIDI0MiwgMjUxLCA5LCAxMSwgMjI2LCAxNzIsIDY2LCAyLCAxMjIsIDIsIDIxNywgNDQsIDksIDExLCAyMjYsIDE3MiwgMTIyLCAKKyAgICAyLCAyNDgsIDIwMywgMjMxLCAyMTAsIDg2LCAyNDUsIDIyOCwgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjE5LCAzMCwgCisgICAgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjEyLCA5LCAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMjgsIDYxLCAyMTEsIAorICAgIDIzOSwgMjMxLCAyMTAsIDg2LCAyMjMsIDExNCwgMjQ2LCAxMDQsIDIzMSwgMjEwLCA4NiwgMjQyLCAxMzQsIDI0NiwgMTA0LCAKKyAgICAyMzEsIDIxMCwgODYsIDcxLCAyNDYsIDEwNCwgMjMxLCAyMTAsIDg2LCAxMjMsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIAorICAgIDg2LCAxMTMsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAxMzQsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDE5LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjQ0LCA4OSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIAorICAgIDIxOSwgMTI3LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjIwLCAxMjQsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIAorICAgIDg2LCAyNDUsIDIwMSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUwLCAxNDksIDIzMSwgCisgICAgMjEwLCA4NiwgMTIzLCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMTEzLCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCAKKyAgICA4NiwgMTM0LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjQ0LCAxOSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NCwgODksIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyMTksIDEyNywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgCisgICAgODYsIDIyMCwgMTI0LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjQ1LCAyMDEsIDY0LCAyNTIsIDE2MSwgMjMxLCAKKyAgICAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDEyMywgNjQsIDI1MCwgNDIsIDIzMSwgCisgICAgMjEwLCA4NiwgMTEzLCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAxMzQsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NCwgMTksIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDI0NCwgODksIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDIxOSwgMTI3LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyMjAsIDEyNCwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ1LCAyMDEsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMjUsIDI4LCAyMzEsIDIxMCwgODYsIDIyNiwgMTYwLCAyMzEsIDIxMCwgODYsIDI1MiwgMTYyLCAyMzEsIDIxMCwgODYsIAorICAgIDI1MCwgNzgsIDIzMSwgMjEwLCA4NiwgMjE4LCAyNDEsIDIzMSwgMjEwLCA4NiwgMjE4LCA0MCwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTMsIDE4NywgMjMxLCAyMTAsIDg2LCAyMTEsIDIzMiwgMjMxLCAyMTAsIDg2LCAyMzUsIDY4LCAyMzEsIDIxMCwgODYsIAorICAgIDI1MiwgMTkyLCAxMzEsIDg2LCAyMDMsIDI1MiwgMTkyLCAxMzEsIDg2LCAyNDEsIDUwLCAxMzEsIDg2LCAyNDEsIDQ5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDQ4LCAxMzEsIDg2LCAyNDEsIDQ3LCAxMzEsIDg2LCAyNDEsIDQ2LCAxMzEsIDg2LCAyNDEsIDQ1LCAKKyAgICAxMzEsIDg2LCAyNDEsIDQ0LCAxMzEsIDg2LCAyNDEsIDQzLCAxMzEsIDg2LCAyNDEsIDQyLCAxMzEsIDg2LCAyNDEsIDQxLCAKKyAgICAxMzEsIDg2LCAyNDEsIDQwLCAxMzEsIDg2LCAyNDEsIDM5LCAxMzEsIDg2LCAyNDEsIDM4LCAxMzEsIDg2LCAyNDEsIDM3LCAKKyAgICAxMzEsIDg2LCAyNDEsIDM2LCAxMzEsIDg2LCAyNDEsIDM1LCAxMzEsIDg2LCAyNDEsIDM0LCAxMzEsIDg2LCAyNDEsIDMzLCAKKyAgICAxMzEsIDg2LCAyNDEsIDMyLCAxMzEsIDg2LCAyNDEsIDMxLCAxMzEsIDg2LCAyNDEsIDMwLCAxMzEsIDg2LCAyNDEsIDI5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDI4LCAxMzEsIDg2LCAyNDEsIDI3LCAxMzEsIDg2LCAyNDEsIDI2LCAxMzEsIDg2LCAyNDEsIDI1LCAKKyAgICAxMzEsIDg2LCAyNDEsIDI0LCAxMzEsIDg2LCAyNDEsIDIzLCAxMzEsIDg2LCAyNDEsIDIyLCAxMzEsIDg2LCAyNDEsIDIxLCAKKyAgICAxMzEsIDg2LCAyNDEsIDIwLCAxMzEsIDg2LCAyNDEsIDE5LCAxMzEsIDg2LCAyNDEsIDE4LCAxMzEsIDg2LCAyNDEsIDE3LCAKKyAgICAxMzEsIDg2LCAyNDEsIDE2LCAxMzEsIDg2LCAyNDEsIDE1LCAxMzEsIDg2LCAyNDEsIDE0LCAxMzEsIDg2LCAyNDEsIDEzLCAKKyAgICAxMzEsIDg2LCAyNDEsIDEyLCAxMzEsIDg2LCAyNDEsIDExLCAxMzEsIDg2LCAyNDEsIDEwLCAxMzEsIDg2LCAyNDEsIDksIAorICAgIDEzMSwgODYsIDI0MSwgOCwgMTMxLCA4NiwgMjQxLCA3LCAxMzEsIDg2LCAyNDEsIDYsIDEzMSwgODYsIDI0MSwgNSwgMTMxLCAKKyAgICA4NiwgMjQxLCA0LCAxMzEsIDg2LCAyNDEsIDMsIDEzMSwgODYsIDI0MSwgMiwgMTMxLCA4NiwgNjcsIDI1MiwgMTkyLCAxMzEsIAorICAgIDg2LCAyMTMsIDIzOCwgMTMxLCA4NiwgMjEzLCAyMzcsIDEzMSwgODYsIDIxMywgMjM2LCAxMzEsIDg2LCAyMTMsIDIzNSwgCisgICAgMTMxLCA4NiwgMjEzLCAyMzQsIDEzMSwgODYsIDIxMywgMjMzLCAxMzEsIDg2LCAyMTMsIDIzMiwgMTMxLCA4NiwgMjEzLCAKKyAgICAyMzEsIDEzMSwgODYsIDIxMywgMjMwLCAxMzEsIDg2LCAyMTMsIDIyOSwgMTMxLCA4NiwgMjEzLCAyMjgsIDEzMSwgODYsIAorICAgIDIxMywgMjI3LCAxMzEsIDg2LCAyMTMsIDIyNiwgMTMxLCA4NiwgMjEzLCAyMjUsIDEzMSwgODYsIDIxMywgMjI0LCAxMzEsIAorICAgIDg2LCAyMTMsIDIyMywgMTMxLCA4NiwgMjEzLCAyMjIsIDEzMSwgODYsIDIxMywgMjIxLCAxMzEsIDg2LCAyMTMsIDIyMCwgCisgICAgMTMxLCA4NiwgMjEzLCAyMTksIDEzMSwgODYsIDIxMywgMjE4LCAxMzEsIDg2LCAyMTMsIDIxNywgMTMxLCA4NiwgMjEzLCAKKyAgICAyMTYsIDEzMSwgODYsIDIxMywgMjE1LCAxMzEsIDg2LCAyMTMsIDIxNCwgMTMxLCA4NiwgMjEzLCAyMTMsIDEzMSwgODYsIAorICAgIDIxMywgMjEyLCAxMzEsIDg2LCAyMTMsIDIxMSwgMTMxLCA4NiwgMjEzLCAyMTAsIDEzMSwgODYsIDIxMywgMjA5LCAxMzEsIAorICAgIDg2LCAyMTMsIDIwOCwgMTMxLCA4NiwgMjEzLCAyMDcsIDEzMSwgODYsIDIxMywgMjA2LCAxMzEsIDg2LCAyMTMsIDIwNSwgCisgICAgMTMxLCA4NiwgMjEzLCAyMDQsIDEzMSwgODYsIDIxMywgMjAzLCAxMzEsIDg2LCAyMTMsIDIwMiwgMTMxLCA4NiwgMjEzLCAKKyAgICAyMDEsIDEzMSwgODYsIDIxMywgMjAwLCAxMzEsIDg2LCAyMTMsIDE5OSwgMTMxLCA4NiwgMjEzLCAxOTgsIDEzMSwgODYsIAorICAgIDIxMywgMTk3LCAxMzEsIDg2LCAyMTMsIDE5NiwgMTMxLCA4NiwgMjEzLCAxOTUsIDEzMSwgODYsIDIxMywgMTk0LCAxMzEsIAorICAgIDg2LCAyMTMsIDE5MywgMTMxLCA4NiwgMjEzLCAxOTIsIDEzMSwgODYsIDIxMywgMTkxLCAxMzEsIDg2LCAyMTMsIDE5MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDI1MiwgMTkyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDIxOSwgMTcsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAxMTMsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjE5LCAxNywgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIAorICAgIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAKKyAgICAyMjAsIDEyNCwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDIxOSwgCisgICAgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDM3LCAKKyAgICA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMjM0LCA4NSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAxMTMsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0MSwgMjMyLCAyMjUsIAorICAgIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIDI0MSwgCisgICAgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyMCwgCisgICAgMTI0LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjQxLCAKKyAgICAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAKKyAgICAzNywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjM0LCA4NSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0NywgMjU1LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMTEzLCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDcsIAorICAgIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgCisgICAgODksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMjAsIDEyNCwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDcsIAorICAgIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIAorICAgIDI0OSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIzNCwgMzcsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDcsIAorICAgIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgODUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDg1LCAKKyAgICAyMzUsIDY4LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMTEzLCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDI0NCwgMTksIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAyNDksIDI1MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjAsIDEyNCwgCisgICAgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIyOCwgMjA1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDI0OSwgMjUwLCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgMzcsIAorICAgIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIzNCwgODUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDcxLCAyMzUsIDY4LCAyMSwgMjEwLCA4NywgCisgICAgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjEwLCA4NywgMjQ5LCAyMjcsIDIxLCAxMjMsIDI0OSwgMjI3LCAyMSwgMTEzLCAKKyAgICAyNDksIDIyNywgMjEsIDEzNCwgMjQ5LCAyMjcsIDIxLCAyNDQsIDE5LCAyNDksIDIyNywgMjEsIDI0NCwgODksIDI0OSwgCisgICAgMjI3LCAyMSwgMjE5LCAxMjcsIDI0OSwgMjI3LCAyMSwgMjIwLCAxMjQsIDI0OSwgMjI3LCAyMSwgMjQ1LCAyMDEsIDI0OSwgCisgICAgMjI3LCAyMSwgMjI4LCAyMDUsIDI0OSwgMjI3LCA4OCwgNywgNiwgMSwgNjEsIDg4LCA3LCA2LCAxLCAyNTMsIDE2NiwgODgsIAorICAgIDcsIDYsIDEsIDI1MSwgNzQsIDg4LCA3LCA2LCAxLCAyNDksIDY4LCA4OCwgNywgNiwgMSwgNzYsIDg4LCA3LCA2LCAxLCAKKyAgICAyNDUsIDE0LCA4OCwgNywgNiwgMSwgMjQzLCAyMDksIDg4LCA3LCA2LCAxLCAyNDIsIDY3LCA4OCwgNywgNiwgMSwgNzQsIAorICAgIDg4LCA3LCA2LCAxLCAyMzUsIDE1MCwgODgsIDcsIDYsIDEsIDIzNSwgMjksIDg4LCA3LCA2LCAxLCAxNTYsIDg4LCA3LCA2LCAKKyAgICAxLCAxOTQsIDg4LCA3LCA2LCAxLCAyMzAsIDMwLCA4OCwgNywgNiwgMSwgNzgsIDg4LCA3LCA2LCAxLCAyMjYsIDEwOSwgODgsIAorICAgIDcsIDYsIDEsIDIyNCwgOTksIDg4LCA3LCA2LCAxLCAxNTMsIDg4LCA3LCA2LCAxLCAyMjIsIDkzLCA4OCwgNywgNiwgMSwgCisgICAgMjE3LCAxNTMsIDg4LCA3LCA2LCAxLCA2OSwgODgsIDcsIDYsIDEsIDIxNCwgMTA1LCA4OCwgNywgNiwgMSwgMjEyLCA5OCwgCisgICAgODgsIDcsIDYsIDEsIDIxMSwgMTc4LCA4OCwgNywgNiwgMSwgMjExLCAxMTcsIDg4LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjE2LCAKKyAgICA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgNywgNiwgMSwgMjIyLCA5MywgMzcsIDMyLCA3LCA2LCAxLCAyNTEsIDc0LCAzNywgMzIsIAorICAgIDcsIDYsIDEsIDE1MywgMzcsIDI1MCwgMTk5LCAzNywgMjExLCAxODAsIDkyLCA3LCA2LCAxLCA2MSwgOTIsIDcsIDYsIDEsIAorICAgIDI1MywgMTY2LCA5MiwgNywgNiwgMSwgMjUxLCA3NCwgOTIsIDcsIDYsIDEsIDI0OSwgNjgsIDkyLCA3LCA2LCAxLCA3NiwgCisgICAgOTIsIDcsIDYsIDEsIDI0NSwgMTQsIDkyLCA3LCA2LCAxLCAyNDMsIDIwOSwgOTIsIDcsIDYsIDEsIDI0MiwgNjcsIDkyLCA3LCAKKyAgICA2LCAxLCA3NCwgOTIsIDcsIDYsIDEsIDIzNSwgMTUwLCA5MiwgNywgNiwgMSwgMjM1LCAyOSwgOTIsIDcsIDYsIDEsIDE1NiwgCisgICAgOTIsIDcsIDYsIDEsIDE5NCwgOTIsIDcsIDYsIDEsIDIzMCwgMzAsIDkyLCA3LCA2LCAxLCA3OCwgOTIsIDcsIDYsIDEsIAorICAgIDIyNiwgMTA5LCA5MiwgNywgNiwgMSwgMjI0LCA5OSwgOTIsIDcsIDYsIDEsIDE1MywgOTIsIDcsIDYsIDEsIDIyMiwgOTMsIAorICAgIDkyLCA3LCA2LCAxLCAyMTcsIDE1MywgOTIsIDcsIDYsIDEsIDY5LCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIDkyLCA3LCA2LCAKKyAgICAxLCAyMTIsIDk4LCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgOTIsIDcsIDYsIDEsIAorICAgIDIxMCwgMTU5LCA5MiwgMjQwLCAyMDgsIDkyLCAyMzAsIDU0LCA5MiwgMjIxLCAxODUsIDkyLCAyMTgsIDIyOCwgOTIsIDIyNCwgCisgICAgMjIxLCA5MiwgMjEyLCAyMywgMTUyLCAzNywgNywgNiwgMSwgNjEsIDE1MiwgMzcsIDcsIDYsIDEsIDI1MywgMTY2LCAxNTIsIAorICAgIDM3LCA3LCA2LCAxLCAyNTEsIDc0LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDksIDY4LCAxNTIsIDM3LCA3LCA2LCAxLCA3NiwgCisgICAgMTUyLCAzNywgNywgNiwgMSwgMjQ1LCAxNCwgMTUyLCAzNywgNywgNiwgMSwgMjQzLCAyMDksIDE1MiwgMzcsIDcsIDYsIDEsIAorICAgIDI0MiwgNjcsIDE1MiwgMzcsIDcsIDYsIDEsIDc0LCAxNTIsIDM3LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTUyLCAzNywgNywgNiwgCisgICAgMSwgMjM1LCAyOSwgMTUyLCAzNywgNywgNiwgMSwgMTU2LCAxNTIsIDM3LCA3LCA2LCAxLCAxOTQsIDE1MiwgMzcsIDcsIDYsIAorICAgIDEsIDIzMCwgMzAsIDE1MiwgMzcsIDcsIDYsIDEsIDc4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCAzNywgNywgCisgICAgNiwgMSwgMjI0LCA5OSwgMTUyLCAzNywgNywgNiwgMSwgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCAyMjIsIDkzLCAxNTIsIDM3LCAKKyAgICA3LCA2LCAxLCAyMTcsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgNjksIDE1MiwgMzcsIDcsIDYsIDEsIDIxNCwgMTA1LCAxNTIsIAorICAgIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAKKyAgICAxMTcsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMjMsIDE2MCwgMjMxLCAxMDIsIDUwLCAyMjMsIDE2MCwgMjMxLCAKKyAgICA5OSwgNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDYxLCAxNTIsIDkyLCA3LCA2LCAxLCAyNTMsIDE2NiwgMTUyLCA5MiwgNywgNiwgCisgICAgMSwgMjUxLCA3NCwgMTUyLCA5MiwgNywgNiwgMSwgMjQ5LCA2OCwgMTUyLCA5MiwgNywgNiwgMSwgNzYsIDE1MiwgOTIsIDcsIAorICAgIDYsIDEsIDI0NSwgMTQsIDE1MiwgOTIsIDcsIDYsIDEsIDI0MywgMjA5LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDIsIDY3LCAKKyAgICAxNTIsIDkyLCA3LCA2LCAxLCA3NCwgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAxNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgCisgICAgMjksIDE1MiwgOTIsIDcsIDYsIDEsIDE1NiwgMTUyLCA5MiwgNywgNiwgMSwgMTk0LCAxNTIsIDkyLCA3LCA2LCAxLCAyMzAsIAorICAgIDMwLCAxNTIsIDkyLCA3LCA2LCAxLCA3OCwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgOTIsIDcsIDYsIDEsIAorICAgIDIyNCwgOTksIDE1MiwgOTIsIDcsIDYsIDEsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgMjIyLCA5MywgMTUyLCA5MiwgNywgNiwgCisgICAgMSwgMjE3LCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDY5LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgMTUyLCA5MiwgCisgICAgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCAKKyAgICAxNTIsIDkyLCA3LCA2LCAxLCAyMTAsIDE1OSwgMjQ5LCAxMzYsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIAorICAgIDkyLCAyNDAsIDEyMCwgMTUyLCA5MiwgMTkxLCAxNTIsIDkyLCAyMDYsIDE1MiwgOTIsIDI1NSwgMzQsIDE1MiwgOTIsIDIxMiwgCisgICAgMjMsIDQyLCAyNDcsIDE3MiwgOTIsIDI1MCwgMzEsIDkyLCAyNDksIDE3OCwgOTIsIDI0NCwgNCwgOTIsIDI0MCwgMTEyLCAKKyAgICA5MiwgMjI5LCA5MSwgOTIsIDIyOSwgODQsIDkyLCAyMjYsIDIxOCwgOTIsIDIxOSwgMzcsIDkyLCAxMjAsIDIsIDI0NSwgMzksIAorICAgIDc5LCA5MiwgMjEzLCAxMTksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDYxLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAKKyAgICAxLCAyNTMsIDE2NiwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjUxLCA3NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgCisgICAgMSwgMjQ5LCA2OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzYsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIAorICAgIDI0NSwgMTQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDI0MywgMjA5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAKKyAgICAyNDIsIDY3LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjM1LCAKKyAgICAxNTAsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzNSwgMjksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE1NiwgCisgICAgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTk0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzAsIDMwLCAyMjMsIAorICAgIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjI2LCAxMDksIDIyMywgMTA2LCAKKyAgICAyMzUsIDI0NiwgMTYsIDEsIDIyNCwgOTksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE1MywgMjIzLCAxMDYsIDIzNSwgCisgICAgMjQ2LCAxNiwgMSwgMjIyLCA5MywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjE3LCAxNTMsIDIyMywgMTA2LCAyMzUsIAorICAgIDI0NiwgMTYsIDEsIDY5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTQsIDEwNSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAKKyAgICAxNiwgMSwgMjEyLCA5OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjExLCAxNzgsIDIyMywgMTA2LCAyMzUsIDI0NiwgCisgICAgMTYsIDEsIDIxMSwgMTE3LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTAsIDE1OSwgNDIsIDE0MSwgMjQxLCA3MCwgCisgICAgOTIsIDU2LCAyMzQsIDI0LCA5MiwgNTYsIDIwNiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1NywgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2OSwgOTIsIDU2LCAyNDgsIDk4LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDc2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDYzLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM1LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDYyLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc1LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDQ5LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQyLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDUxLCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDcyLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDU4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc0LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDUwLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDczLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDM2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM0LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDY0LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQ0LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDU1LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDUzLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDc5LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDMyLCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDU5LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc3LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY4LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDU0LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDMzLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDU2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM3LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDY3LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQ1LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQ3LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDQ4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQwLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDcxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY1LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIAorICAgIDIzOCwgNDYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3OCwgMjE2LCA3LCAyMjAsIAorICAgIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDc2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjAsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA0MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDU2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgCisgICAgMjE0LCAxNzcsIDIzOCwgMzksIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3MCwgMjE2LCAKKyAgICA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDUyLCAzNywgMTU0LCAyNTQsIDI1NCwgMzcsIDE1NCwgCisgICAgMjU1LCAyMSwgMjQ5LCA3OSwgMjQ0LCA1MCwgMjUwLCA4LCAyMTQsIDE5NCwgMjI4LCAyMTgsIDIsIDIxOCwgMTU1LCAyMTgsIAorICAgIDM0LCAxMTUsIDIzMCwgMTE5LCAyMTgsIDMzLCAyNTAsIDM0LCAyNTMsIDIxNSwgMjQ2LCA2MiwgMjE4LCAzMiwgMTE1LCAKKyAgICAyNTEsIDEyNiwgMjIzLCAxNjEsIDI1MSwgMTQ4LCAyNTMsIDIxNSwgMjI4LCAyMTcsIDIxMiwgNDEsIDIxMiwgMzUsIDIxMywgCisgICAgMTMxLCAyMzAsIDIwMCwgMjEyLCAyNSwgMjQ1LCAyMzIsIDI0MiwgMTg4LCAyNDUsIDUzLCAyNDUsIDIzMiwgMjQyLCAxODgsIAorICAgIDI1NCwgMTM2LCAyNDUsIDIzMiwgMjQyLCAxODgsIDI1MywgMjMzLCAyNDIsIDE4OCwgMiwgMjMxLCA1NiwgMTY2LCAyMzAsIAorICAgIDEzNCwgODcsIDIxMiwgMjcsIDI0OSwgMTQ1LCAyMzAsIDEzNCwgODcsIDI0NCwgMTAwLCAyMjQsIDI1LCAyMzAsIDEzNCwgCisgICAgODcsIDIxMiwgMjcsIDI0MiwgMjE3LCAyMzAsIDEzNCwgODcsIDI0MywgMjM2LCAyMzAsIDEzNCwgODcsIDIxMiwgNTIsIAorICAgIDI0MiwgMjE3LCAyMzAsIDEzNCwgODcsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTM0LCA4NywgMjEyLCA1MiwgMjQ5LCAKKyAgICAxNDUsIDIzMCwgMTM0LCA4NywgMjQ5LCAxNDUsIDIzMCwgMTMzLCAxNjYsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjQ0LCAKKyAgICAxMDAsIDIyNCwgMjUsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzQsIDIsIDI0NCwgCisgICAgMTk4LCAyNDMsIDIzNiwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyMTgsIDM5LCAyLCAyNDQsIDE5OCwgMjQyLCAxODYsIAorICAgIDIxOCwgMTU4LCAyMjAsIDEsIDIxOCwgMTU4LCAyNTAsIDEyNCwgMjIxLCAxNzAsIDI0NSwgNDcsIDIxNSwgMjM2LCAyNDgsIAorICAgIDkyLCAyMTUsIDIzNiwgMjI2LCA2MywgMjE1LCAyMzYsIDI1MSwgMzUsIDIxNSwgMTEwLCAyNTAsIDEyNiwgMjUxLCAyMTgsIAorICAgIDIyMiwgMTkzLCAyNDEsIDE4NiwgMjE4LCAzNywgMjUxLCAyMTgsIDI0NSwgMjM2LCA2NCwgMjMxLCAxOTksIDI0NSwgMjM2LCAKKyAgICA2NCwgMjIzLCAzNCwgMjQxLCAyMTEsIDI0NCwgMTksIDIzMywgNjAsIDI0OSwgMjU0LCAyMzEsIDE3NSwgMjMzLCA1OSwgCisgICAgMjQ0LCAxODQsIDIzMywgNTksIDIzMywgNjAsIDI0NCwgNTUsIDIzNiwgNywgMjExLCAyMzksIDIzMCwgNjMsIDIxNiwgMzUsIAorICAgIDI1MywgMTk5LCAyNDIsIDE1MCwgMjMxLCA3MiwgMjEyLCAzOSwgMjE3LCA1OCwgMjMzLCAzMiwgMjUyLCAxNTcsIDIyNSwgCisgICAgNjUsIDIyMywgMTE0LCAyNTQsIDYyLCAyNDIsIDEzNCwgMjU0LCA2MiwgMjI1LCAyMjAsIDIyNSwgMjIxLCAyNTAsIDEyNywgCisgICAgMjE4LCAxMTYsIDI0MiwgMzAsIDIxOSwgOTIsIDY0LCAyMjUsIDQ3LCAyMzEsIDkyLCAyMjYsIDIwMSwgMjUxLCAyMDIsIAorICAgIDIyNCwgMjMyLCAyMzMsIDQyLCAyMjMsIDM1LCAyNDksIDE1MCwgMjIzLCAzNSwgMjUyLCAxNjcsIDI0OSwgMTgxLCAyMjMsIAorICAgIDM0LCAyNDksIDEwMywgMjIsIDIyMywgMzQsIDIxOCwgMTQzLCAyNTEsIDE3NSwgMjE5LCAxNiwgMjUxLCAxNTksIDI0NCwgMywgCisgICAgMjQzLCAyNTUsIDIyMiwgMjA5LCAyMTcsIDI0NywgMjI0LCAyMzQsIDI0OCwgMTgzLCAyMjYsIDI0MCwgMjE4LCA4LCAyNDQsIAorICAgIDAsIDIxOSwgMjMyLCAyNDQsIDk5LCAyNTEsIDI5LCAyLCAyMTcsIDI0MCwgMjQ4LCA0MywgMjE5LCA1NCwgMjQwLCAxMTksIAorICAgIDI0OSwgMTQ5LCAyMjAsIDcyLCAyNDAsIDExOCwgMjQwLCAxMTksIDI0OSwgMTQ5LCAyNDYsIDExNiwgMjQ5LCAxODAsIDI1MCwgCisgICAgOTIsIDEzMCwgMjUxLCA2LCAyMzIsIDE0NywgMjQ5LCA5NiwgMjQxLCA2MiwgMjI0LCAyMzYsIDIxOSwgMjQyLCAyNTIsIDQ0LCAKKyAgICAyNTEsIDE3MSwgMjI0LCAyMzcsIDY0LCAyNDQsIDQxLCAyNDksIDE3OSwgMjQ0LCAzMiwgMjIsIDIzNCwgMzgsIDIxNywgMjAsIAorICAgIDIxMSwgMjMwLCAyNDIsIDIwLCAyMjIsIDE0LCAyNTEsIDE4NSwgMjIsIDI0OSwgMTEwLCAyMTEsIDIzNywgMjQyLCAxOTEsIAorICAgIDI0OSwgMjQzLCAyNDIsIDE5MSwgMjE1LCAxOTQsIDI0NiwgOTgsIDI1MiwgNzAsIDIzMCwgOTgsIDI1MCwgMTUsIDI1MiwgCisgICAgNzAsIDIzMCwgOTcsIDI1MiwgMTk1LCAyNTEsIDE4NCwgMjIzLCAzNiwgMjExLCAyMDEsIDIyNCwgMTk4LCAyNTEsIDI0MywgCisgICAgMjUxLCAyOCwgMjM1LCAxNDQsIDI1MCwgODUsIDIxNSwgMjM2LCAyNDQsIDE3MCwgMjUwLCA4NCwgMjQ0LCAxMDIsIDI0NCwgCisgICAgMTAzLCAyMTksIDE0LCAyNTIsIDE2NiwgMjI1LCAyNTQsIDIyNCwgMjQ3LCAyNDksIDIxMiwgMjUyLCAxNjcsIDIxNywgNjAsIAorICAgIDIxNSwgMjM2LCAyNDksIDEzNiwgMjQ0LCA3NSwgMjI1LCA2NiwgMjQ4LCA4OSwgMjM1LCAxMzcsIDI0NywgMTM5LCAyNTAsIAorICAgIDI0MCwgMjE4LCAxMTUsIDIxMSwgMjQwLCAyNTAsIDEwNiwgMjMwLCAxMzQsIDIxMywgMTY0LCAyNTAsIDE3MCwgMjIxLCAKKyAgICAyMDEsIDIyMSwgMjI2LCAyNDIsIDE1NSwgMjUxLCAzLCAyNTAsIDI0MSwgMjQwLCAyNTIsIDI0NCwgMTM4LCAyMTIsIDAsIAorICAgIDIyMiwgMjAyLCAyNDksIDI0NCwgMjQ0LCA5NCwgMjI1LCA1LCAyMiwgMjQ0LCA5OCwgMjMwLCAyMzIsIDIzMCwgMTEzLCAKKyAgICAyNTEsIDE4LCAyNTAsIDQ3LCAyNDEsIDIzOSwgMjUzLCAyNDksIDIyNiwgNjYsIDIxNiwgMTUsIDI0MiwgMiwgMjUwLCAzNywgCisgICAgMjE2LCAyNDMsIDIxNiwgMTE0LCAyNTAsIDI4LCAyNTEsIDIxMCwgMjI1LCAxODAsIDI1MywgMjQ4LCAyMTMsIDE3MiwgMjQzLCAKKyAgICAxMTcsIDI0NywgMjA1LCAyNDEsIDE2MywgMjE5LCA4NiwgMjMxLCAyMzksIDI1MSwgMjUzLCAyNDMsIDExOCwgMjQ3LCAyNDgsIAorICAgIDI1MSwgMTc0LCAyNDQsIDYwLCAyMjUsIDM2LCAyNTAsIDI0OSwgMjgsIDIyOCwgNTIsIDIzMCwgOTAsIDI4LCAyMjgsIDQ3LCAKKyAgICAyMjEsIDIxNCwgMjQyLCAxMDYsIDI4LCAyMzQsIDE0MywgMjE1LCAxOTEsIDIxMywgMTU0LCAyOCwgMjIxLCAxOTQsIDIyMiwgCisgICAgMTI2LCAyMjAsIDEzLCAyLCAyMjEsIDIyOSwgMjE2LCAyNDUsIDIyMywgMTgxLCAyMiwgMjUyLCAxNjcsIDIxOSwgMTA3LCAKKyAgICAyMiwgMjE5LCAxMDcsIDI1MSwgMTk1LCAyNTIsIDEzMSwgMjIsIDI0MSwgNTYsIDI1MCwgMTI4LCAyNDQsIDgxLCAyMTksIAorICAgIDY1LCAyMjIsIDEyNywgMjE4LCAxMywgMjE1LCAxOTUsIDI0MCwgMjUzLCAyMjMsIDE4MiwgMjU0LCAxMzcsIDI0NCwgMzksIAorICAgIDIyMiwgMTM4LCAyNDQsIDM5LCAyMTcsIDI0MiwgMjQwLCAyNDIsIDI1MSwgMTI3LCAyNDAsIDI0MiwgMiwgMjQzLCAxMDEsIAorICAgIDIyNiwgMjMzLCAyNTEsIDEyNywgMjM1LCAxMzcsIDIyNCwgMjQyLCAyMjYsIDIzMiwgMjQ1LCA1MiwgMjI0LCAyNDIsIDIyNiwgCisgICAgMjMyLCAyNDAsIDI1MSwgMjUyLCAxNTMsIDI1MywgMTg5LCAyMTYsIDI1MywgMjMxLCAyMzksIDI0MCwgMjQ3LCAyMzIsIAorICAgIDExNywgMjQwLCAyNDcsIDI0OSwgMTg0LCAyMTgsIDEyNywgMjIxLCAyMDAsIDI0OCwgNTEsIDIxOCwgMTI3LCAyNDQsIDE4OCwgCisgICAgMjM1LCAxNTUsIDIzMywgOTUsIDIzNSwgMTM3LCAyNTAsIDIzNCwgMjQ1LCA1MiwgMjUwLCAyMzQsIDIyMywgMTQ0LCAyMzAsIAorICAgIDExNywgMjI2LCAxMTgsIDIxMiwgNDEsIDI1MSwgMTMxLCAyNDksIDE1MywgMjE2LCAxMDcsIDIzMywgMjQsIDIyMywgMTgzLCAKKyAgICAyNTAsIDIzMiwgMjQ2LCAxMDQsIDI0OSwgMTQzLCAyMTIsIDMsIDIxOSwgNzIsIDIxOSwgNzAsIDI0MCwgMjUyLCAyMjMsIAorICAgIDE1NiwgMjQyLCAxNzcsIDIyMCwgNTksIDIzMCwgMTUwLCAyMjIsIDE5NiwgMjUwLCAxMTYsIDI0NywgMTQ0LCAyMjUsIDc2LCAKKyAgICAyNTEsIDIxMSwgMjQ1LCAxNzcsIDIyNiwgMjQyLCAyMTgsIDI1NCwgMjIwLCA1NCwgMjUxLCAxMzAsIDI1NCwgMTAwLCAyNDEsIAorICAgIDYxLCAyMzMsIDEyNywgMjUyLCA2OCwgMjQ0LCA5OCwgMjE1LCAxOTQsIDI0NCwgOTgsIDI1MSwgMjE3LCAyMTUsIDkxLCAKKyAgICAyNDIsIDAsIDI1MCwgMTE3LCAyNTIsIDE5NSwgMjUwLCAxMTcsIDI0MywgMjUwLCAyNTIsIDE5NSwgMjUwLCAxMTcsIDI1MSwgCisgICAgMjQ1LCAyMjUsIDE5OCwgMjM0LCAzMiwgMjI0LCAyNTEsIDI0NiwgOTUsIDI1MSwgMTksIDI1MiwgMTg1LCAyNTEsIDE5LCAKKyAgICAyNDcsIDEzOCwgMjMwLCAxMTgsIDI0NCwgMTk4LCAyNDksIDE1NCwgMjQ0LCAxOTgsIDIxNiwgMTA4LCAyNDQsIDE5OCwgCisgICAgMjIzLCAxODQsIDI0NCwgMTk4LCAyNTAsIDIzMywgMjQ0LCAxOTgsIDI0NiwgMTA1LCAyNDQsIDE5OCwgMjE4LCAyNDMsIAorICAgIDIxMiwgMywgMjQwLCAyNTMsIDI0NCwgMTk4LCAyMzAsIDE1MSwgMjQ0LCAxOTgsIDI0NywgMTQ1LCAyNDQsIDE5OCwgMjI1LCAKKyAgICA3NywgMjQ0LCAxOTgsIDI0MywgMjUzLCAyNDQsIDE5OCwgMjQyLCAyNywgMjQ0LCAxOTgsIDIxMSwgMjI0LCAyNDQsIDE5OCwgCisgICAgMjUyLCA3OSwgMjQ0LCAxOTgsIDIyNiwgNDksIDI0NCwgMTk4LCAyMjUsIDc3LCAyMjgsIDU4LCAyMjUsIDIzNiwgMjI0LCAKKyAgICAxODksIDI0NSwgMjEsIDI0NSwgMjM1LCAyMjgsIDU4LCAyMzAsIDExNSwgMjE2LCAyMCwgNzEsIDEyMCwgMjI1LCAxMCwgCisgICAgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgMTI0LCAyMjUsIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCA0MywgMjI1LCAKKyAgICAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgNDQsIDIyNSwgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgMjQ0LCA5MiwgCisgICAgMjQyLCAyMywgNTAsIDIxMiwgMzMsIDI0MiwgMjMsIDUwLCAyMjYsIDIxOSwgMjQyLCAyMywgNTAsIDIxNiwgMTM2LCAxMjAsIAorICAgIDUwLCAyMTYsIDEzNiwgMTI0LCA1MCwgMjUwLCAyNywgMjQyLCAxOCwgNTAsIDIwNCwgMjQyLCAxOCwgNTAsIDI0OSwgMTMxLCAKKyAgICAyMTEsIDIyMCwgMjQyLCAyLCAyNDUsIDIyLCAyMjksIDEwOSwgMjE3LCAxNTIsIDIzNSwgMTMxLCAyNDYsIDEwMCwgMjM0LCAKKyAgICA4OCwgMjUxLCAyNTUsIDIxMSwgMjIwLCAyNTAsIDEsIDIyNCwgMTMwLCAyNDIsIDIxLCAyMjQsIDIzMywgMjMxLCAxODIsIAorICAgIDIyMCwgNiwgMjUzLCAyMTEsIDIyMCwgNiwgMjQxLCAxNzEsIDIyMCwgNiwgMjExLCAyMjAsIDIyMSwgMjQyLCAyMTEsIDIyMCwgCisgICAgMjUxLCAxOTQsIDI0NCwgMzcsIDI1MSwgOTgsIDIzNiwgNywgMjE5LCAxNzEsIDI1MSwgOTcsIDIzNiwgNywgMjE5LCAxNzEsIAorICAgIDI1MSwgMTcwLCAyNDIsIDIwMSwgMjMxLCAxOTAsIDIxMSwgMjIxLCAyNDQsIDE4MiwgMjMxLCAxOTEsIDIyLCAyMTEsIDIyMiwgCisgICAgMjQxLCA2NywgMjQyLCAxNywgMTEzLCAyMzEsIDY0LCAyNDEsIDY3LCAyNDIsIDE3LCAxMTMsIDIxMSwgMjE5LCAyNDEsIDY3LCAKKyAgICAyNDIsIDE3LCAyMjUsIDIsIDIyNiwgMjMxLCAyMTEsIDIyMiwgMiwgMjUxLCAxMTQsIDI0NSwgMjMzLCAyNTEsIDE0OSwgMiwgCisgICAgMjEzLCAyNDYsIDIyNSwgMTcxLCAyLCAyNTEsIDIyMCwgMjQyLCA0MSwgMjMxLCAxOTEsIDIsIDI0MiwgMTE3LCAyMjUsIAorICAgIDExMiwgMjMxLCAxNzksIDIzMSwgMTkxLCAyLCAyMTUsIDk4LCAyMjYsIDIxMiwgMjMxLCAxOTAsIDIyNiwgMjEyLCAyMTEsIAorICAgIDIyMSwgMjUyLCAxOTQsIDI0OSwgMTk4LCAyMTEsIDIwNSwgMjI0LCAxOTIsIDIzNSwgMTM3LCAyMjYsIDIyNywgMjM1LCAKKyAgICAxMzcsIDI0MiwgMTc2LCAyNDIsIDIyOSwgMjUyLCAxOTUsIDI1NCwgMTIxLCAyNDUsIDI2LCAyNTQsIDE2OSwgMjU0LCAxNzAsIAorICAgIDIzMCwgMTQxLCAyMzYsIDEyLCAyMTksIDEwMiwgMjM1LCAyMzksIDI0OCwgNDIsIDIyNSwgMTcwLCAyNDIsIDExMiwgMjQ4LCAKKyAgICAxODcsIDIzMiwgMjA3LCAyMjksIDIxNiwgMjI1LCAxLCAyNDQsIDE5OSwgMjMxLCAxNDcsIDI0MiwgNDAsIDI1MiwgMTQ2LCAKKyAgICAyMjUsIDQsIDIxNywgMTcyLCAyMjUsIDY5LCAyMzQsIDcwLCA3OSwgMjMyLCAxMTcsIDIzMywgMTYsIDIyMiwgMjM2LCAyNDMsIAorICAgIDYxLCAyMTgsIDEzMywgMjM0LCA2OSwgMjUxLCAxNzksIDI0OSwgMTU2LCAyLCAyNDEsIDIzNCwgMjEyLCAxOSwgMjUyLCA3NywgCisgICAgMjQxLCAyMzQsIDI1MSwgMTQzLCAyNDEsIDIzNCwgMTEzLCAyNDEsIDIzMiwgMjE5LCAxMiwgMjQxLCAyMzQsIDI0MiwgMTI3LCAKKyAgICAyNDEsIDIzNCwgMjQxLCAyMzUsIDIsIDc1LCAyNTEsIDIxNiwgMjQxLCAyMzQsIDI0MiwgMTM0LCAyNDEsIDIzNCwgMjExLCAKKyAgICA0MiwgMjQxLCAyMzQsIDIyNCwgMTMxLCAyNDEsIDIzNCwgMjQxLCAyMzUsIDIsIDIyMywgMzYsIDIyMywgNDcsIDI0MSwgCisgICAgMjMyLCAyNDEsIDIzNSwgMjQ4LCA4OSwgMjQ4LCAxLCAyMjAsIDg0LCAyLCAxMTYsIDU5LCAyMzUsIDIyMiwgMjQ1LCAxODAsIAorICAgIDE5MywgMjUxLCAxMjQsIDI1NCwgMTIwLCA4NywgMjUxLCAyMDMsIDIxOSwgOTQsIDg3LCAyNDksIDIzNiwgODcsIDIxOCwgCisgICAgMjQ4LCAyMTcsIDI0OSwgODcsIDI0NiwgOTMsIDI0OCwgMTY1LCA4NywgMjI1LCA3MCwgNjQsIDIyNCwgMjUyLCAyNDQsIDY5LCAKKyAgICAyNTIsIDExLCAyNDcsIDE3MywgODcsIDIxOSwgNSwgMjUyLCAxNjYsIDIxNiwgMTUwLCAyNTIsIDE2NiwgNzEsIDI0NCwgNTksIAorICAgIDI0MCwgMjE4LCAyMjUsIDgsIDg3LCAyMzAsIDE1NCwgMjUyLCAxODAsIDI0OSwgMTA2LCAyNDUsIDQwLCAxMTQsIDI0NywgCisgICAgMTQwLCA1MCwgMjQ5LCAxNDcsIDI1MCwgMjUwLCAyNTIsIDE1MiwgMiwgMjExLCA0MCwgNTAsIDI1MiwgMTUyLCAyLCAyNDcsIAorICAgIDE0MCwgNTAsIDI1MiwgMTUyLCAyLCAyNDUsIDU1LCA1MCwgMjUyLCAxNTIsIDIsIDIyNCwgMjMxLCA1MCwgMjMwLCAxNTQsIAorICAgIDIsIDIxMSwgMjM1LCAyNTAsIDE0NiwgMiwgMjE0LCAxNTMsIDIxNSwgMjMyLCAyMiwgMjExLCA0MCwgNTAsIDIyMSwgMTgwLCAKKyAgICAyMjUsIDE2OSwgMjQ5LCAyMTYsIDI1MSwgMTQ3LCAyMzAsIDE5MSwgMjQ0LCA2NCwgMjQ3LCAxOTMsIDIyNiwgMTY1LCAyNDcsIAorICAgIDE5OCwgMjQ2LCA1NywgMjQ0LCAxMTUsIDI0NCwgNDgsIDIwNCwgMjQ0LCAxMTUsIDI0NCwgNDgsIDIyNiwgODAsIDIsIDI0OSwgCisgICAgMTA4LCAyMjYsIDgwLCAyNDQsIDE5MSwgMjE0LCAxNjMsIDI1MSwgMjQsIDIxNywgMTksIDI1MSwgMjQsIDI1MCwgMjUxLCAKKyAgICAyMzUsIDI0OSwgMjUwLCAxNDYsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMSwgMjUwLCAxNDYsIDIsIDI0NiwgMTEyLCAyMTUsIAorICAgIDIzMSwgMjUyLCAxNDksIDI1MCwgMTQ1LCAyNTAsIDE0LCAyMjQsIDEyNiwgMjIyLCAxODcsIDIyNCwgMTI2LCAyMjYsIDIzLCAKKyAgICAyMTgsIDEyMywgMjIyLCAxMzMsIDIxNSwgMjIzLCAyMjIsIDEzMywgMjUxLCAxOTksIDIxNywgOTIsIDIzMywgNTcsIDIyOCwgCisgICAgNTAsIDIyOCwgNTEsIDIsIDI0OCwgODgsIDI0OSwgMTU1LCAyNTAsIDgsIDI1MSwgMjAwLCAyMDQsIDI1MSwgMjAwLCAyNDIsIAorICAgIDEzNCwgMjUxLCAyMDAsIDI1MSwgMjE2LCAyNTEsIDIwMCwgMjI2LCAxNjEsIDI1MSwgMjAwLCAyNTEsIDE5NywgMjI5LCAKKyAgICAyMTAsIDI1MiwgMTgzLCAyMjEsIDE4OCwgMjMxLCA2NSwgMjE3LCAyLCAyMjMsIDEyNiwgMjI2LCA3OCwgMjQ0LCAxNjcsIAorICAgIDIzMSwgMjM5LCAyMjEsIDIyNSwgMjU0LCA5NywgMjI0LCAxNDgsIDI1NSwgNSwgMjMyLCAxMTksIDI1MCwgMTM1LCAyMzEsIAorICAgIDc3LCAyMjYsIDEzMywgMjE1LCAyMzksIDIzNiwgMywgMjE1LCAyMzksIDIyNiwgODYsIDI0NiwgMzIsIDg3LCAyMzYsIDAsIAorICAgIDI0NSwgMTI3LCAyNDUsIDEyOCwgMiwgMjQ2LCAxMTIsIDgwLCA0OCwgMjUwLCA4LCAyMzEsIDIwNSwgMiwgMjMyLCAxMTMsIAorICAgIDI0NCwgODEsIDI1MCwgOCwgMjMxLCAyMDUsIDIsIDIyMywgMTYwLCAyNDQsIDgxLCAyMDQsIDIzMSwgMjA1LCAyLCAyMjMsIAorICAgIDE2MCwgMjQ0LCA4MSwgMjA0LCAyMzEsIDIwNSwgMiwgMjMyLCAxMTMsIDI0NCwgODEsIDIyNCwgMjM5LCAyMjQsIDI0MCwgCisgICAgMjQwLCAyNTUsIDIyOSwgODksIDIzMCwgMTY0LCAyMjUsIDEyMCwgMjMwLCAxNjQsIDIyNSwgMTIxLCAyLCA5NywgODAsIAorICAgIDI1MywgMjE1LCAyMzMsIDUyLCAyMTMsIDE3NSwgMjMwLCAxNjMsIDIzMCwgMTY0LCAyMjUsIDEyMSwgMjI2LCAyMzQsIDIyOCwgCisgICAgODAsIDIzMCwgMTY0LCAyMjUsIDExOSwgMjU0LCA5OCwgMiwgMjUyLCAxMzcsIDI1MSwgMTgsIDIxMywgMTcyLCAyNTEsIDE4LCAKKyAgICAyMTYsIDI1NSwgMjIzLCAxNzYsIDIxMywgMTcxLCAyMTUsIDYwLCA5NywgMjUzLCAyNTUsIDI1MCwgMTAsIDk3LCAyMiwgCisgICAgMTQwLCAyMDQsIDI1MCwgNDQsIDI1MywgMjU1LCAyNTAsIDEwLCA5NywgMjIsIDE0MCwgMjA0LCAyNTAsIDQ0LCAyNTQsIDAsIAorICAgIDIsIDM3LCAxMjMsIDIyNiwgMTI0LCAyNTAsIDEwLCAyNDYsIDExMiwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgNDQsIDI1MywgCisgICAgMjU1LCAyNTQsIDk2LCAyNDYsIDExMiwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgNDQsIDI1MywgMjU1LCAxMjEsIDI1MSwgCisgICAgMTQ2LCA4NywgMTI1LCAyNTEsIDE0NiwgODcsIDIxOSwgOSwgMiwgMjUxLCAxMiwgOTEsIDIxOSwgOCwgMjE5LCA5LCAyLCAKKyAgICAxMjMsIDIxOSwgMzMsIDIxMiwgMzUsIDIxOSwgOSwgMiwgMTM0LCAyMTksIDMzLCAyMTIsIDM0LCAyNTIsIDEyMywgMjQ1LCAKKyAgICAxODAsIDIyNSwgMzAsIDIzMywgNDgsIDIzMSwgMjE2LCAyNDIsIDE5MSwgMjIyLCAyNTAsIDIzMSwgMjE2LCAyNDIsIDE5MSwgCisgICAgMjMyLCAxNTgsIDIsIDIzNSwgMjMyLCAyMjUsIDIwMiwgMjUwLCA4LCAyMzIsIDE1OCwgMiwgMjM0LCAxNDQsIDIzNCwgMTQ0LCAKKyAgICAyMzIsIDE1NywgMjA0LCAyMzIsIDE1NywgMjUyLCA1MiwgMjUyLCA1MywgMiwgMjUxLCAxMiwgOTEsIDI1MSwgMTk4LCAyMzIsIAorICAgIDIxMCwgODcsIDIyMywgMTc3LCAyNTEsIDk0LCAyNTIsIDE5MywgMiwgMTQwLCA4MCwgNDgsIDI0NSwgMTUxLCAyLCAxNDAsIAorICAgIDgwLCA0OCwgMjI2LCAyMDEsIDIsIDI0NSwgMzksIDE2NCwgMiwgNDMsIDQ0LCA4MCwgNDgsIDIxOSwgNDEsIDIsIDk3LCA4MCwgCisgICAgNDgsIDIxNiwgMTUsIDIsIDIxNCwgMTUzLCA4MCwgNDgsIDIyOCwgODAsIDEyMywgMjE0LCAxODQsIDI0NSwgMTk5LCA4NywgCisgICAgMjM0LCAxNDIsIDIxNiwgMjQ4LCAyMzUsIDIyNiwgMTYsIDMxLCA3LCA2LCAyMzMsIDE1LCAyMzUsIDIyNiwgMTYsIDMxLCA3LCAKKyAgICA0LCAyMzMsIDE1LCAyMzUsIDIyNiwgMTYsIDMxLCAyMjcsIDIwMywgMjM1LCAyMjYsIDE2LCAzMSwgMjE3LCAxODQsIDIzNSwgCisgICAgMjI2LCAxNiwgMzEsIDcsIDIzMywgMTUsIDI0NCwgMTA0LCAyNDUsIDE4MCwgMjE2LCAxMCwgMjExLCAxOTksIDI0MiwgMjgsIAorICAgIDIyNywgMTg2LCAyMiwgMjUxLCAyMDUsIDI0MSwgNzMsIDIyNSwgNTMsIDIzMCwgMjMxLCAyMTcsIDAsIDI0OSwgMTIyLCAKKyAgICAyNTIsIDE2NywgMjE5LCAxMjcsIDIyNSwgMTIsIDIxOCwgMTU5LCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIzNSwgMTM3LCAKKyAgICAxNiwgMzEsIDI1MiwgNjUsIDIxNSwgMjIxLCAyNDUsIDE2NCwgODUsIDQyLCAyNTEsIDk0LCA3MSwgNDIsIDI1MSwgOTQsIAorICAgIDIzMywgOTEsIDIyMywgMTE0LCAyNTAsIDQzLCAyMzMsIDkxLCAyNTEsIDIxNiwgMjUwLCA0MywgMjMzLCA5MSwgMjI2LCAKKyAgICAxNjEsIDI0OCwgMCwgMjMzLCA5MSwgMjUxLCAyMTYsIDI0OCwgMCwgNCwgMjI2LCAxNjEsIDI0OCwgMCwgNCwgMjUxLCAyMTYsIAorICAgIDI0OCwgMCwgMjE0LCAxNjIsIDIyMywgMTE0LCAyMTUsIDIyNiwgMjQ2LCAxMTMsIDIyMywgMTE0LCAyMTUsIDIyNiwgMjE0LCAKKyAgICAxNjIsIDQsIDIyMywgMTE0LCAyMTUsIDIyNiwgMjQ2LCAxMTMsIDQsIDIyMywgMTE0LCAyMTUsIDIyNiwgMzcsIDI0OSwgCisgICAgMTM5LCAyMjQsIDI1NSwgMjQ5LCAxMzksIDIyNSwgMCwgMiwgMjQyLCAzMywgNTEsIDI0OSwgMTM5LCAyMjQsIDI1NSwgMjI4LCAKKyAgICA1NCwgNDMsIDIyMCwgMTU1LCAyLCAxMzQsIDI0NywgMTI2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMTIzLCAyMjYsIDI0NiwgCisgICAgMjUwLCAxMiwgMjQ0LCAxOTksIDExMywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAxMzQsIDIyNiwgMjQ2LCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjQ0LCAxOSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDQsIDg5LCAyMjYsIDI0NiwgCisgICAgMjUwLCAxMiwgMjQ0LCAxOTksIDIxOSwgMTI3LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIyMCwgMTI0LCAyMjYsIAorICAgIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgMjAxLCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIyOCwgMjA1LCAKKyAgICAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMjQ5LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgCisgICAgMTc2LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNzcsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjI2LCAxOTYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDU2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAxNDEsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyNDQsIDE1LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ0LCA4NywgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDIxOSwgMTIzLCAyNTAsIDEyLCAyNDQsIDE5OSwgMjIwLCAxMjMsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIDIwMCwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDIyOCwgMjA0LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAyNDcsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyNDUsIDE3NCwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNzUsIDIzMCwgMTIyLCAyNDMsIDIzNywgMjE2LCAzNywgMjE2LCAKKyAgICAzLCAyMTgsIDE1MCwgNjQsIDIzMiwgMjQ1LCAyMTksIDE3MiwgNjQsIDIzNSwgMTM4LCAyMzAsIDExMSwgMjQyLCAxMzEsIAorICAgIDI0NCwgMTk4LCAyNDIsIDEzMSwgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI0NCwgMTk5LCAyLCAyMTcsIDE1LCAKKyAgICA2NCwgMjM1LCA1OSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTUsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAKKyAgICAyMDQsIDIzMCwgMTE2LCAyMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTYsIAorICAgIDIyLCAyNDksIDIzOCwgMjE3LCAyNDgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE2LCAyMiwgMjE2LCAKKyAgICAxMDUsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyNDIsIDMyLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjQwLCAKKyAgICAyNTQsIDIxMSwgMjMzLCAyNDQsIDE5OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI0NCwgCisgICAgMTk5LCAyMjEsIDIxOSwgMjQ4LCA3MCwgMjQ0LCA0MSwgMjIzLCA5MSwgMjQ0LCAxOTgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAKKyAgICAyNDEsIDIzMywgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIxOCwgMzUsIDIxOSwgNzUsIDI0NCwgMTk4LCAyMjksIAorICAgIDkyLCAyNDQsIDE5OCwgMjQ1LCAzMSwgMjQ0LCAxOTgsIDIxNCwgMTg4LCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDI0OSwgCisgICAgMjM4LCAyMTcsIDI0OCwgMjI1LCAxOTUsIDI0NCwgMTk4LCAyNDksIDIwOSwgMjQ0LCAxOTgsIDI0OSwgMjEwLCAyNDQsIAorICAgIDE5OCwgMjM0LCA2OCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyMTYsIDEzOCwgMTE2LCAyMzQsIDY5LCAyMzQsIDY4LCAyNDQsIAorICAgIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjM0LCA2OCwgMjQ0LCAxOTksIDIsIDI1MCwgOCwgMjQ1LCAyMSwgMjQ0LCAKKyAgICAxOTksIDIsIDIxOCwgODksIDIxNiwgMjAsIDI0NCwgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIxLCAyMiwgMjExLCAyMzMsIAorICAgIDI0NSwgMjMsIDI0NCwgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIxLCAyMiwgMjE2LCAxMDUsIDI0NSwgMjEsIDI0NywgMjAwLCAKKyAgICAyNDQsIDE5OCwgMjExLCAyMDQsIDI0NCwgMTk4LCAyNTQsIDExNiwgMjQ0LCAxOTgsIDIyNCwgMjMwLCAyNDQsIDE5OCwgCisgICAgMjQ5LCAxMjQsIDI0NCwgMTk4LCAyMjUsIDE3MywgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyMzIsIDEzMiwgNjQsIDIxNSwgCisgICAgMjA1LCAyNDcsIDIwMCwgMjUxLCA5NiwgMjIzLCA5MSwgMjQ0LCAxOTgsIDI0MywgMjQ3LCAyNDQsIDE5OSwgMiwgMjA0LCAKKyAgICAyMzAsIDExNSwgMjU0LCAxMTQsIDI0NCwgMTk4LCAyNDQsIDE2MCwgMjQ0LCAxOTgsIDIxMiwgMjAsIDI0NCwgMTk4LCAyMTksIAorICAgIDkzLCAyNDQsIDE5OCwgMjE2LCA3MiwgMjQ0LCAxOTgsIDI0MiwgMTMyLCAyNDQsIDE5OCwgMjMyLCAxMjAsIDI0OSwgMTI0LCAKKyAgICAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTUsIDI0MCwgMjEwLCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIAorICAgIDIwNCwgMjMwLCAxMTYsIDIyLCAyNDksIDIzOCwgMjE3LCAyNDgsIDI0NCwgMTk5LCAyMjEsIDE5MiwgMjM2LCA3LCAyNDQsIAorICAgIDE2MSwgMjUzLCAyMjEsIDI0NCwgMTk4LCAyNDQsIDU3LCAyNDQsIDE5OCwgMjE5LCA5NCwgMjQ0LCAxOTgsIDI0NywgMTczLCAKKyAgICAyNDQsIDE5OCwgMjQ0LCAxOTksIDIxMSwgMjMwLCAyMzAsIDExNSwgMjQ0LCAxOTksIDIsIDIzMSwgODksIDIzMSwgMTQ5LCAKKyAgICAyNDIsIDEzMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIAorICAgIDIxNywgMTUsIDY0LCAyMzUsIDU5LCAyMTksIDc2LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTUsIDIxOSwgCisgICAgNzYsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjQxLCAyMzMsIDI0NSwgMjEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjExLCAKKyAgICAxOTYsIDIxOSwgNzcsIDIzNCwgNjgsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjUwLCA4LCAyNDUsIDIxLCAyMjQsIDIzMCwgCisgICAgMjUwLCAyMzMsIDI0NCwgMTk4LCAyNDksIDEyNCwgMjUwLCAyMzMsIDI0NCwgMTk4LCAyMTIsIDIwLCAyNTAsIDIzMywgMjQ0LCAKKyAgICAxOTgsIDI0NCwgMTk5LCAyLCAyMjgsIDgwLCAyNDIsIDE3MCwgMjQzLCA0MSwgMjQ0LCAxOTksIDIsIDIyNiwgMjE5LCAyNDMsIAorICAgIDQxLCAyMjUsIDE3MSwgMjUxLCAxNzYsIDI0OCwgODMsIDIyMSwgMTcxLCAyMzAsIDE1MCwgMjQxLCAyMzYsIDIzMCwgMTUwLCAKKyAgICAyMTksIDEwLCAyMzAsIDE1MCwgMjQyLCAxMiwgMjI1LCAxNzEsIDIyMywgMTU5LCAxMjMsIDI0MiwgMjIsIDIyNSwgMTcxLCAKKyAgICAyMjMsIDE1OSwgMjUxLCAxODYsIDI0MiwgMTgsIDIzNiwgNywgMjUwLCAxODcsIDIyNSwgMTcxLCAyNDMsIDI0NiwgMjI1LCAKKyAgICAxNzEsIDIsIDIyNCwgMjMwLCAyNDQsIDE5OCwgMjI1LCAxNzEsIDIsIDI0NCwgNDksIDI0MiwgMTcsIDIyMiwgMjA1LCAyNDEsIAorICAgIDIyMSwgMjE4LCAxNDUsIDIzMiwgMTU1LCAyMjMsIDE2NSwgMjUwLCAyNTIsIDI0MSwgMTY5LCAyMTUsIDI0OSwgMjQxLCAKKyAgICAxNjksIDIxNSwgMjUwLCAyLCAyNTEsIDEyMiwgMjI4LCA1OCwgMjE1LCAyNDksIDIzMSwgMzcsIDE5MywgMjIzLCAxNjYsIAorICAgIDIxOCwgMTUxLCAyMTUsIDI0NywgMjE1LCAyNDgsIDI1MCwgMjUyLCAyNTEsIDEwMCwgMjI2LCAxOTgsIDI1MSwgMTAwLCAKKyAgICAyMTUsIDIwMiwgMjUxLCAxMDEsIDIxOCwgMTMxLCAyMzAsIDE5MiwgMjU0LCAxMzgsIDI0NCwgMTA1LCAyNDUsIDE0NSwgCisgICAgMjI1LCAyLCAyNTAsIDI1MiwgMjI2LCAxOTgsIDIyNSwgMiwgMjUwLCAyNTIsIDIxNywgMzMsIDIyNiwgMTk4LCAyMTcsIDMzLCAKKyAgICAyNTMsIDE4OCwgMjI2LCAxOTgsIDI1MywgMTg4LCAyMjMsIDEyMSwgMjEzLCAyNDcsIDI0OCwgNjYsIDIxNSwgMTkzLCAyNTMsIAorICAgIDI1MCwgMjMyLCAxMjMsIDIxNSwgMjU1LCAyMzAsIDE0NCwgMjMwLCAxMjEsIDIyMywgMTY0LCAyMTgsIDcsIDIyMywgMTY0LCAKKyAgICAyMzAsIDEyMSwgMjUxLCAzNiwgMjU0LCAyMzgsIDIxNSwgMjQ2LCAyMjAsIDE4LCAyMjIsIDE4NCwgMjE5LCAzLCAyMDMsIAorICAgIDIxNSwgMjUzLCAyMzIsIDIzNiwgNjcsIDIxNSwgMjUzLCAyMzIsIDIzNiwgMjQ5LCAxOTgsIDUwLCAyMjUsIDIsIDI1MCwgCisgICAgMjM3LCAyMjMsIDQ3LCAyMzIsIDIzNiwgMjE1LCAyMjMsIDI0NCwgODIsIDIyNiwgMjAxLCAyMjQsIDI0MSwgMjQ3LCAxMzEsIAorICAgIDIyOCwgODAsIDI0NSwgMTMzLCA1MCwgMjE5LCA3NCwgODcsIDIyOCwgODAsIDIxOSwgNzQsIDg3LCAyMjQsIDEyNSwgMjMyLCAKKyAgICAxOTksIDIzNiwgNywgMjM1LCAxNjMsIDIyNSwgNDQsIDg3LCAyNDcsIDE1NCwgMjI4LCA1NywgMjMyLCAxOTksIDg3LCAyMjQsIAorICAgIDIzNSwgMjEyLCA0MSwgODcsIDIyOCwgNzEsIDIxMiwgNDEsIDg3LCAyNTIsIDEwLCAyMjgsIDgwLCAyNTIsIDksIDI1MiwgOCwgCisgICAgMjMwLCAxMjEsIDI1MiwgOCwgMjI1LCAyMTYsIDIyOCwgODAsIDIyNSwgMjE1LCAyNTAsIDEwOCwgMjQ5LCAxMzIsIDIzMSwgCisgICAgNjEsIDg3LCAyMTEsIDIxOCwgODcsIDIyMywgNjIsIDI1MiwgMTk1LCA4NywgMjE2LCAzOCwgMjEyLCA0MSwgMjUwLCA1LCAKKyAgICAyMTksIDIzNiwgMjUyLCAxMjYsIDI1MiwgMTI0LCAyMjUsIDI0NiwgMjQ5LCAxODUsIDI0OSwgOTQsIDI1MiwgMTc3LCAyNTAsIAorICAgIDMwLCA0MywgMjMyLCA5NSwgMTA4LCAxNiwgMzEsIDIyNCwgNiwgMTA4LCAxNiwgMzEsIDI1NCwgMjAxLCAxMDgsIDE2LCAzMSwgCisgICAgMjQ0LCAxMDQsIDEwOCwgMTYsIDMxLCAyNDUsIDIzMSwgMTA4LCAxNiwgMzEsIDIxMiwgNDAsIDEwOCwgMTYsIDMxLCAyNTQsIAorICAgIDUxLCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjIzLCAxMDgsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMjMsIDEwNywgMTA4LCAKKyAgICAxNiwgMzEsIDI1NCwgNTIsIDIxMywgMTQzLCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjEzLCAxNDIsIDEwOCwgMTYsIDMxLCAKICAgICAyMTMsIDE1NywgMTA4LCAxNiwgMzEsIDIxMywgMTU2LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTUsIDEwOCwgMTYsIDMxLCAyMTgsIAotICAgIDQ0LCAxMDgsIDE2LCAzMSwgMjI1LCAxMjUsIDIxOCwgNDQsIDEwOCwgMTYsIDMxLCA4NSwgMjE4LCA0NCwgMTA4LCAxNiwgCi0gICAgMzEsIDIzMSwgNTUsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIDU1LCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjMxLCAKLSAgICA1NSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDI1MCwgMzgsIDEwOCwgMTYsIDMxLCAyMjIsIDEsIDEwOCwgMTYsIDMxLCAyMjgsIAotICAgIDE4OCwgMTA4LCAxNiwgMzEsIDIxMywgMTQxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDAsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNCwgCi0gICAgMjIyLCAxLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDQsIDIyMiwgMCwgMTA4LCAxNiwgMzEsIDI0MiwgMTY2LCAxMDgsIDE2LCAKLSAgICAzMSwgMjE5LCAxNjYsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NywgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NywgCi0gICAgMjI2LCAxNTIsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDIzNSwgMTc2LCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAKLSAgICAyMzUsIDE3NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTY4LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIzNSwgMTc1LCAyMjYsIAotICAgIDE1MywgMTA4LCAxNiwgMzEsIDIxOCwgNzIsIDY0LCAyNDksIDE2NywgMTA4LCAxNiwgMzEsIDI0OSwgMTM0LCA2NCwgMjQ5LCAKLSAgICAxNjcsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDI0OSwgMTY2LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNjgsIDI1NCwgODMsIAotICAgIDEwOCwgMTYsIDMxLCAyMjIsIDIsIDY0LCAyNDksIDE2OCwgMjU0LCA4MywgMTA4LCAxNiwgMzEsIDIxOCwgNzIsIDY0LCAKLSAgICAyMjIsIDIsIDY0LCAyNDksIDE2NywgMTA4LCAxNiwgMzEsIDIxMywgMjQzLCAxMDgsIDE2LCAzMSwgMjE2LCA4NCwgMjI2LCAKLSAgICAxNTMsIDEwOCwgMTYsIDMxLCAyMzMsIDU3LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDI1NCwgODIsIDIyNiwgMTUzLCAxMDgsIAotICAgIDE2LCAzMSwgMjE4LCA3MiwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIDMxLCAyMjIsIDIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAKLSAgICAzMSwgMjE4LCA3MiwgNjQsIDIyMiwgMiwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIDMxLCAyMTMsIDE1OCwgNjQsIDI1NCwgODEsIAotICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgNjQsIDI1NCwgODAsIAotICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwMCwgMTA4LCAxNiwgMzEsIDIyMywgOTksIDEwOCwgMTYsIDMxLCAyMjMsIDk4LCAxMDgsIAotICAgIDE2LCAzMSwgMjIzLCA5NywgMTA4LCAxNiwgMzEsIDI1NCwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCAxNTYsIDEwOCwgMTYsIAotICAgIDMxLCAyMzEsIDE2MywgMTA4LCAxNiwgMzEsIDIyMiwgNywgMTA4LCAxNiwgMzEsIDI1MywgMjQ2LCAxMDgsIDE2LCAzMSwgCi0gICAgMjIzLCAxMjUsIDEwOCwgMTYsIDMxLCAyMjMsIDEyNCwgMTA4LCAxNiwgMzEsIDI1MywgMTgzLCAxMDgsIDE2LCAzMSwgMjUxLCAKLSAgICAyMjksIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIDIxNywgNDgsIDEwOCwgMTYsIDMxLCAKLSAgICAyMjQsIDgsIDIzMiwgMjIyLCAxMDgsIDE2LCAzMSwgMjUxLCAxODMsIDEwOCwgMTYsIDMxLCAyNTEsIDE4MiwgMTA4LCAxNiwgCi0gICAgMzEsIDI1MSwgMTgxLCAxMDgsIDE2LCAzMSwgMjU0LCAxMzgsIDEwOCwgMTYsIDMxLCAyMjYsIDIxOCwgMTA4LCAxNiwgMzEsIAotICAgIDIxOCwgMjQ4LCAxMDgsIDE2LCAzMSwgMjE2LCA4MiwgMTA4LCAxNiwgMzEsIDI0MiwgOTYsIDEwOCwgMTYsIDMxLCAyMTIsIAotICAgIDI4LCAxMDgsIDE2LCAzMSwgMjI0LCAyMjYsIDEwOCwgMTYsIDMxLCAyNTEsIDE0LCAxMDgsIDE2LCAzMSwgMjE1LCA4NiwgCi0gICAgMTA4LCAxNiwgMzEsIDI1MCwgMjQ2LCAyMzAsIDEyMiwgMTA4LCAxNiwgMzEsIDIyMSwgMjAyLCA2NCwgMjM1LCA1NSwgMTA4LCAKLSAgICAxNiwgMzEsIDI1MSwgMjUsIDEwOCwgMTYsIDMxLCAyMTUsIDIxOSwgMTA4LCAxNiwgMzEsIDIxOCwgMTU0LCAyMTUsIDIxOSwgCi0gICAgMTA4LCAxNiwgMzEsIDIzMiwgMTQ4LCAxMDgsIDE2LCAzMSwgMjE5LCA1NiwgMTA4LCAxNiwgMzEsIDIxNCwgMTQyLCAxMDgsIAotICAgIDE2LCAzMSwgMjQwLCAyNDYsIDI0NiwgNjQsIDEwOCwgMTYsIDMxLCAyNTMsIDIyNywgMTA4LCAxNiwgMzEsIDIyNCwgMjM0LCAKLSAgICAyNTMsIDIyNywgMTA4LCAxNiwgMzEsIDI1MSwgMTQyLCAxMDgsIDE2LCAzMSwgMjI0LCAyMjUsIDI1MSwgMTQyLCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCAxMzUsIDEwOCwgMTYsIDMxLCAyMTgsIDExNywgMjE4LCAyNiwgMjE4LCAxMTYsIDEwOCwgMTYsIDMxLCAKLSAgICAyMTgsIDExNywgMjE4LCAyNiwgMjE4LCAxMTUsIDEwOCwgMTYsIDMxLCAyMTgsIDY4LCAxMDgsIDE2LCAzMSwgMjI0LCAyMDAsIAotICAgIDEwOCwgMTYsIDMxLCAyNDcsIDE4MSwgMTA4LCAxNiwgMzEsIDI0NywgMTgzLCAxMDgsIDE2LCAzMSwgMjQ3LCAxODIsIDEwOCwgCi0gICAgMTYsIDMxLCAyMjQsIDEzMSwgMTA4LCAxNiwgMzEsIDIyNCwgMTIwLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjIsIDEwOCwgMTYsIAotICAgIDMxLCAyNDksIDEyMSwgMTA4LCAxNiwgMzEsIDI0OSwgMTIwLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMTksIDEwOCwgMTYsIDMxLCAKLSAgICAyNDksIDExOCwgMTA4LCAxNiwgMzEsIDI1NCwgMTY5LCAxMDgsIDE2LCAzMSwgMjUyLCAxMTksIDY0LCAyMzEsIDE0OSwgCi0gICAgMTA4LCAxNiwgMzEsIDI1MiwgMTE5LCA2NCwgMjE0LCAxNywgMTA4LCAxNiwgMzEsIDIyMywgNTcsIDEwOCwgMTYsIDMxLCAKLSAgICAyNDAsIDIzOCwgMTA4LCAxNiwgMzEsIDIyOCwgMjEyLCAxMDgsIDE2LCAzMSwgMjQ4LCAxNDUsIDEwOCwgMTYsIDMxLCAyMzAsIAotICAgIDEzNCwgMTA4LCAxNiwgMzEsIDE2MywgMjQ2LCA5NCwgMTA4LCAxNiwgMzEsIDE2MywgMjI2LCAxMzIsIDksIDE0LCAyNDAsIAotICAgIDEwMiwgOSwgMTQsIDI0MCwgMTAxLCA5LCAxNCwgMjQwLCAxMDAsIDksIDE0LCAyNDAsIDk5LCA5LCAxNCwgMjQwLCA5OCwgOSwgCi0gICAgMTQsIDI0MCwgOTcsIDksIDE0LCAyNDAsIDk2LCA5LCAxNCwgMjQwLCA5NSwgOSwgMTQsIDI0MCwgOTQsIDksIDE0LCAyNDAsIAotICAgIDkzLCA5LCAxNCwgMjQwLCA5MiwgOSwgMTQsIDI0MCwgOTEsIDksIDE0LCAyNDAsIDkwLCA5LCAxNCwgMjQwLCA4OSwgOSwgCi0gICAgMTQsIDI0MCwgODgsIDksIDE0LCAyNDAsIDg3LCA5LCAxNCwgMjQwLCA4NiwgOSwgMTQsIDI0MCwgODUsIDksIDE0LCAyNDAsIAotICAgIDg0LCA5LCAxNCwgMjQwLCA4MywgOSwgMTQsIDI0MCwgODIsIDksIDE0LCAyNDAsIDgxLCA5LCAxNCwgMjQwLCA4MCwgOSwgCi0gICAgMTQsIDI0MCwgNzksIDksIDE0LCAyNDAsIDc4LCA5LCAxNCwgMjQwLCA3NywgOSwgMTQsIDI0MCwgNzYsIDksIDE0LCAyNDAsIAotICAgIDc1LCA5LCAxNCwgMjQwLCA3NCwgOSwgMTQsIDI0MCwgNzMsIDksIDE0LCAyNDAsIDcyLCA5LCAxNCwgMjQwLCA3MSwgOSwgCi0gICAgMTQsIDI0MCwgNzAsIDksIDE0LCAyNDAsIDY5LCA5LCAxNCwgMjQwLCA2OCwgOSwgMTQsIDI0MCwgNjcsIDksIDE0LCAyNDAsIAotICAgIDY2LCA5LCAxNCwgMjQwLCA2NSwgOSwgMTQsIDI0MCwgNjQsIDksIDE0LCAyNDAsIDYzLCA5LCAxNCwgMjQwLCA2MiwgOSwgCi0gICAgMTQsIDI0MCwgNjEsIDksIDE0LCAyNDAsIDYwLCA5LCAxNCwgMjQwLCA1OSwgOSwgMTQsIDI0MCwgNTgsIDksIDE0LCAyNDAsIAotICAgIDU3LCA5LCAxNCwgMjQwLCA1NiwgOSwgMTQsIDI0MCwgNTUsIDksIDE0LCAyNDAsIDU0LCA5LCAxNCwgMjQwLCA1MywgOSwgCi0gICAgMTQsIDI0MCwgNTIsIDksIDE0LCAyNDAsIDUxLCA5LCAxNCwgMjQwLCA1MCwgOSwgMTQsIDI0MCwgNDksIDksIDE0LCAyNDAsIAotICAgIDQ4LCA5LCAxNCwgMjQwLCA0NywgOSwgMTQsIDI0MCwgNDYsIDksIDE0LCAyNDAsIDQ1LCA5LCAxNCwgMjQwLCA0NCwgOSwgCi0gICAgMTQsIDI0MCwgNDMsIDksIDE0LCAyNDAsIDQyLCA5LCAxNCwgMjQwLCA0MSwgOSwgMTQsIDI0MCwgNDAsIDksIDE0LCAyNDAsIAotICAgIDM5LCA5LCAxNCwgMjQwLCAzOCwgOSwgMTQsIDI0MCwgMzcsIDksIDE0LCAyNDAsIDM2LCA5LCAxNCwgMjQwLCAzNSwgOSwgCi0gICAgMTQsIDI0MCwgMzQsIDksIDE0LCAyNDAsIDMzLCA5LCAxNCwgMjQwLCAzMiwgOSwgMTQsIDI0MCwgMzEsIDksIDE0LCAyNDAsIAotICAgIDMwLCA5LCAxNCwgMjQwLCAyOSwgOSwgMTQsIDI0MCwgMjgsIDksIDE0LCAyNDAsIDI3LCA5LCAxNCwgMjQwLCAyNiwgOSwgCi0gICAgMTQsIDI0MCwgMjUsIDksIDE0LCAyNDAsIDI0LCA5LCAxNCwgMjQwLCAyMywgOSwgMTQsIDI0MCwgMjIsIDksIDE0LCAyNDAsIAotICAgIDIxLCA5LCAxNCwgMjQwLCAyMCwgOSwgMTQsIDI0MCwgMTksIDksIDE0LCAyNDAsIDE4LCA5LCAxNCwgMjQwLCAxNywgOSwgCi0gICAgMTQsIDI0MCwgMTYsIDksIDE0LCAyNDAsIDE1LCA5LCAxNCwgMjQwLCAxNCwgOSwgMTQsIDI0MCwgMTMsIDksIDE0LCAyNDAsIAotICAgIDEyLCA5LCAxNCwgMjQwLCAxMSwgOSwgMTQsIDI0MCwgMTAsIDksIDE0LCAyNDAsIDksIDksIDE0LCAyNDAsIDgsIDksIDE0LCAKLSAgICAyNDAsIDcsIDksIDE0LCAyNDAsIDYsIDksIDE0LCAyNDAsIDUsIDksIDE0LCAyNDAsIDQsIDksIDE0LCAyNDAsIDMsIDksIAotICAgIDE0LCAyNDAsIDIsIDksIDE0LCAyNDAsIDEsIDksIDE0LCAyNDAsIDAsIDksIDE0LCAyMzksIDI1NSwgOSwgMTQsIDIzOSwgCi0gICAgMjU0LCA5LCAxNCwgMjM5LCAyNTMsIDksIDE0LCAyMzksIDI1MiwgOSwgMTQsIDIzOSwgMjUxLCA5LCAxNCwgMjM5LCAyNTAsIAotICAgIDksIDE0LCAyMzksIDI0OSwgOSwgMTQsIDIzOSwgMjQ4LCA5LCAxNCwgMjM5LCAyNDcsIDksIDE0LCAyMzksIDI0NiwgOSwgCi0gICAgMTQsIDIzOSwgMjQ1LCA5LCAxNCwgMjM5LCAyNDQsIDksIDE0LCAyMzksIDI0MywgOSwgMTQsIDIzOSwgMjQyLCA5LCAxNCwgCi0gICAgMjM5LCAyNDEsIDksIDE0LCAyMzksIDI0MCwgOSwgMTQsIDIzOSwgMjM5LCA5LCAxNCwgMjM5LCAyMzgsIDksIDE0LCAyMzksIAotICAgIDIzNywgOSwgMTQsIDIzOSwgMjM2LCA5LCAxNCwgMjM5LCAyMzUsIDksIDE0LCAyMzksIDIzNCwgOSwgMTQsIDIzOSwgMjMzLCAKLSAgICA5LCAxNCwgMjM5LCAyMzIsIDksIDE0LCAyMzksIDIzMSwgOSwgMTQsIDIzOSwgMjMwLCA5LCAxNCwgMjM5LCAyMjksIDksIAotICAgIDE0LCAyMzksIDIyOCwgOSwgMTQsIDIzOSwgMjI3LCA5LCAxNCwgMjM5LCAyMjYsIDksIDE0LCAyMzksIDIyNSwgOSwgMTQsIAotICAgIDIzOSwgMjI0LCA5LCAxNCwgMjM5LCAyMjMsIDksIDE0LCAyMzksIDIyMiwgOSwgMTQsIDIzOSwgMjIxLCA5LCAxNCwgMjM5LCAKLSAgICAyMjAsIDksIDE0LCAyMzksIDIxOSwgOSwgMTQsIDIzOSwgMjE4LCA5LCAxNCwgMjM5LCAyMTcsIDksIDE0LCAyMzksIDIxNiwgCi0gICAgOSwgMTQsIDIzOSwgMjE1LCA5LCAxNCwgMjM5LCAyMTQsIDksIDE0LCAyMzksIDIxMywgOSwgMTQsIDIzOSwgMjEyLCA5LCAKLSAgICAxNCwgMjM5LCAyMTEsIDksIDE0LCAyMzksIDIxMCwgOSwgMTQsIDIzOSwgMjA5LCA5LCAxNCwgMjM5LCAyMDgsIDksIDE0LCAKLSAgICAyMzksIDIwNywgOSwgMTQsIDIzOSwgMjA2LCA5LCAxNCwgMjM5LCAyMDUsIDksIDE0LCAyMzksIDIwNCwgOSwgMTQsIDIzOSwgCi0gICAgMjAzLCA5LCAxNCwgMjM5LCAyMDIsIDksIDE0LCAyMzksIDIwMSwgOSwgMTQsIDIzOSwgMjAwLCA5LCAxNCwgMjM5LCAxOTksIAotICAgIDksIDE0LCAyMzksIDE5OCwgOSwgMTQsIDIzOSwgMTk3LCA5LCAxNCwgMjM5LCAxOTYsIDksIDE0LCAyMzksIDE5NSwgOSwgCi0gICAgMTQsIDIzOSwgMTk0LCA5LCAxNCwgMjM5LCAxOTMsIDksIDE0LCAyMzksIDE5MiwgOSwgMTQsIDIzOSwgMTkxLCA5LCAxNCwgCi0gICAgMjM5LCAxOTAsIDksIDE0LCAyMzksIDE4OSwgOSwgMTQsIDIzOSwgMTg4LCA5LCAxNCwgMjM5LCAxODcsIDksIDE0LCAyMzksIAotICAgIDE4NiwgOSwgMTQsIDIzOSwgMTg1LCA5LCAxNCwgMjM5LCAxODQsIDksIDE0LCAyMzksIDE4MywgOSwgMTQsIDIzOSwgMTgyLCAKLSAgICA5LCAxNCwgMjM5LCAxODEsIDksIDE0LCAyMzksIDE4MCwgOSwgMTQsIDIzOSwgMTc5LCA5LCAxNCwgMjM5LCAxNzgsIDksIAotICAgIDE0LCAyMzksIDE3NywgOSwgMTQsIDIzOSwgMTc2LCA5LCAxNCwgMjM5LCAxNzUsIDksIDE0LCAyMzksIDE3NCwgOSwgMTQsIAotICAgIDIzOSwgMTczLCA5LCAxNCwgMjM5LCAxNzIsIDksIDE0LCAyMzksIDE3MSwgOSwgMTQsIDIzOSwgMTcwLCA5LCAxNCwgMjM5LCAKLSAgICAxNjksIDksIDE0LCAyMzksIDE2OCwgOSwgMTQsIDIzOSwgMTY3LCA5LCAxNCwgMjM5LCAxNjYsIDksIDE0LCAyMzksIDE2NSwgCi0gICAgOSwgMTQsIDIzOSwgMTY0LCA5LCAxNCwgMjM5LCAxNjMsIDksIDE0LCAyMzksIDE2MiwgOSwgMTQsIDIzOSwgMTYxLCA5LCAKLSAgICAxNCwgMjM5LCAxNjAsIDksIDE0LCAyMzksIDE1OSwgOSwgMTQsIDIzOSwgMTU4LCA5LCAxNCwgMjM5LCAxNTcsIDksIDE0LCAKLSAgICAyMzksIDE1NiwgOSwgMTQsIDIzOSwgMTU1LCA5LCAxNCwgMjM5LCAxNTQsIDksIDE0LCAyMzksIDE1MywgOSwgMTQsIDIzOSwgCi0gICAgMTUyLCA5LCAxNCwgMjM5LCAxNTEsIDksIDE0LCAyMzksIDE1MCwgOSwgMTQsIDIzOSwgMTQ5LCA5LCAxNCwgMjM5LCAxNDgsIAotICAgIDksIDE0LCAyMzksIDE0NywgOSwgMTQsIDIzOSwgMTQ2LCA5LCAxNCwgMjM5LCAxNDUsIDksIDE0LCAyMzksIDE0NCwgOSwgCi0gICAgMTQsIDIzOSwgMTQzLCA5LCAxNCwgMjM5LCAxNDIsIDksIDE0LCAyMzksIDE0MSwgOSwgMTQsIDIzOSwgMTQwLCA5LCAxNCwgCi0gICAgMjM5LCAxMzksIDksIDE0LCAyMzksIDEzOCwgOSwgMTQsIDIzOSwgMTM3LCA5LCAxNCwgMjM5LCAxMzYsIDksIDE0LCAyMzksIAotICAgIDEzNSwgOSwgMTQsIDIzOSwgMTM0LCA5LCAxNCwgMjM5LCAxMzMsIDksIDE0LCAyMzksIDEzMiwgOSwgMTQsIDIzOSwgMTMxLCAKLSAgICA5LCAxNCwgMjM5LCAxMzAsIDksIDE0LCAyMzksIDEyOSwgOSwgMTQsIDIzOSwgMTI4LCA5LCAxNCwgMjM5LCAxMjcsIDksIAotICAgIDE0LCAyMzksIDEyNiwgOSwgMTQsIDIzOSwgMTI1LCA5LCAxNCwgMjM5LCAxMjQsIDksIDE0LCAyMzksIDEyMywgOSwgMTQsIAotICAgIDIzOSwgMTIyLCA5LCAxNCwgMjM5LCAxMjEsIDksIDE0LCAyMzksIDEyMCwgOSwgMTQsIDIzOSwgMTE5LCA5LCAxNCwgMjM5LCAKLSAgICAxMTgsIDksIDE0LCAyMzksIDExNywgOSwgMTQsIDIzOSwgMTE2LCA5LCAxNCwgMjM5LCAxMTUsIDksIDE0LCAyMzksIDExNCwgCi0gICAgOSwgMTQsIDIzOSwgMTEzLCA5LCAxNCwgMjM5LCAxMTIsIDksIDE0LCAyMzksIDExMSwgOSwgMTQsIDIzOSwgMTEwLCA5LCAKLSAgICAxNCwgMjM5LCAxMDksIDksIDE0LCAyMzksIDEwOCwgOSwgMTQsIDIzOSwgMTA3LCA5LCAxNCwgMjM5LCAxMDYsIDksIDE0LCAKLSAgICAyMzksIDEwNSwgOSwgMTQsIDIzOSwgMTA0LCA5LCAxNCwgMjM5LCAxMDMsIDksIDE0LCAyMzksIDEwMiwgOSwgMTQsIDIzOSwgCi0gICAgMTAxLCA5LCAxNCwgMjM5LCAxMDAsIDksIDE0LCAyMzksIDk5LCA5LCAxNCwgMjM5LCA5OCwgOSwgMTQsIDIzOSwgOTcsIDksIAotICAgIDE0LCAyMzksIDk2LCA5LCAxNCwgMjM5LCA5NSwgOSwgMTQsIDIzOSwgOTQsIDksIDE0LCAyMzksIDkzLCA5LCAxNCwgMjM5LCAKLSAgICA5MiwgOSwgMTQsIDIzOSwgOTEsIDksIDE0LCAyMzksIDkwLCA5LCAxNCwgMjM5LCA4OSwgOSwgMTQsIDIzOSwgODgsIDksIAotICAgIDE0LCAyMzksIDg3LCA5LCAxNCwgMjM5LCA4NiwgOSwgMTQsIDIzOSwgODUsIDksIDE0LCAyMzksIDg0LCA5LCAxNCwgMjM5LCAKLSAgICA4MywgOSwgMTQsIDIzOSwgODIsIDksIDE0LCAyMzksIDgxLCA5LCAxNCwgMjM5LCA4MCwgOSwgMTQsIDIzOSwgNzksIDksIAotICAgIDE0LCAyMzksIDc4LCA5LCAxNCwgMjM5LCA3NywgOSwgMTQsIDIzOSwgNzYsIDksIDE0LCAyMzksIDc1LCA5LCAxNCwgMjM5LCAKLSAgICA3NCwgOSwgMTQsIDIzOSwgNzMsIDksIDE0LCAyMzksIDcyLCA5LCAxNCwgMjM5LCA3MSwgOSwgMTQsIDIzOSwgNzAsIDksIAotICAgIDE0LCAyMzksIDY5LCA5LCAxNCwgMjM5LCA2OCwgOSwgMTQsIDIzOSwgNjcsIDksIDE0LCAyMzksIDY2LCA5LCAxNCwgMjM5LCAKLSAgICA2NSwgOSwgMTQsIDIzOSwgNjQsIDksIDE0LCAyMzksIDYzLCA5LCAxNCwgMjM5LCA2MiwgOSwgMTQsIDIzOSwgNjEsIDksIAotICAgIDE0LCAyMzksIDYwLCA5LCAxNCwgMjM5LCA1OSwgOSwgMTQsIDIzOSwgNTgsIDksIDE0LCAyMzksIDU3LCA5LCAxNCwgMjM5LCAKLSAgICA1NiwgOSwgMTQsIDIzOSwgNTUsIDksIDE0LCAyMzksIDU0LCA5LCAxNCwgMjM5LCA1MywgOSwgMTQsIDIzOSwgNTIsIDksIAotICAgIDE0LCAyMzksIDUxLCA5LCAxNCwgMjM5LCA1MCwgOSwgMTQsIDIzOSwgNDksIDksIDE0LCAyMzksIDQ4LCA5LCAxNCwgMjM5LCAKLSAgICA0NywgOSwgMTQsIDIzOSwgNDYsIDksIDE0LCAyMzksIDQ1LCA5LCAxNCwgMjM5LCA0NCwgOSwgMTQsIDIzOSwgNDMsIDksIAotICAgIDE0LCAyMzksIDQyLCA5LCAxNCwgMjM5LCA0MSwgOSwgMTQsIDIzOSwgNDAsIDksIDE0LCAyMzksIDM5LCA5LCAxNCwgMjM5LCAKLSAgICAzOCwgOSwgMTQsIDIzOSwgMzcsIDksIDE0LCAyMzksIDM2LCA5LCAxNCwgMjM5LCAzNSwgOSwgMTQsIDIzOSwgMzQsIDksIAotICAgIDE0LCAyMzksIDMzLCA5LCAxNCwgMjM5LCAzMiwgOSwgMTQsIDIzOSwgMzEsIDksIDE0LCAyMzksIDMwLCA5LCAxNCwgMjM5LCAKLSAgICAyOSwgOSwgMTQsIDIzOSwgMjgsIDksIDE0LCAyMzksIDI3LCA5LCAxNCwgMjM5LCAyNiwgOSwgMTQsIDIzOSwgMjUsIDksIAotICAgIDE0LCAyMzksIDI0LCA5LCAxNCwgMjM5LCAyMywgOSwgMTQsIDIzOSwgMjIsIDksIDE0LCAyMzksIDIxLCA5LCAxNCwgMjM5LCAKLSAgICAyMCwgOSwgMTQsIDIzOSwgMTksIDksIDE0LCAyMzksIDE4LCA5LCAxNCwgMjM5LCAxNywgOSwgMTQsIDIzOSwgMTYsIDksIAotICAgIDE0LCAyMzksIDE1LCA5LCAxNCwgMjM5LCAxNCwgOSwgMTQsIDIzOSwgMTMsIDksIDE0LCAyMzksIDEyLCA5LCAxNCwgMjM5LCAKLSAgICAxMSwgOSwgMTQsIDIzOSwgMTAsIDksIDE0LCAyMzksIDksIDksIDE0LCAyMzksIDgsIDksIDE0LCAyMzksIDcsIDksIDE0LCAKLSAgICAyMzksIDYsIDksIDE0LCAyMzksIDUsIDksIDE0LCAyMzksIDQsIDksIDE0LCAyMzksIDMsIDksIDE0LCAyMzksIDIsIDksIAotICAgIDE0LCAyMzksIDEsIDksIDE0LCAyMzksIDAsIDksIDE0LCAyMzgsIDI1NSwgOSwgMTQsIDIzOCwgMjU0LCA5LCAxNCwgMjM4LCAKLSAgICAyNTMsIDksIDE0LCAyMzgsIDI1MiwgOSwgMTQsIDIzOCwgMjUxLCA5LCAxNCwgMjM4LCAyNTAsIDksIDE0LCAyMzgsIDI0OSwgCi0gICAgOSwgMTQsIDIzOCwgMjQ4LCA5LCAxNCwgMjM4LCAyNDcsIDksIDE0LCAyMzgsIDI0NiwgOSwgMTQsIDIzOCwgMjQ1LCA5LCAKLSAgICAxNCwgMjM4LCAyNDQsIDksIDE0LCAyMzgsIDI0MywgOSwgMTQsIDIzOCwgMjQyLCA5LCAxNCwgMjM4LCAyNDEsIDksIDE0LCAKLSAgICAyMzgsIDI0MCwgOSwgMTQsIDIzOCwgMjM5LCA5LCAxNCwgMjM4LCAyMzgsIDksIDE0LCAyMzgsIDIzNywgOSwgMTQsIDIzOCwgCi0gICAgMjM2LCA5LCAxNCwgMjM4LCAyMzUsIDksIDE0LCAyMzgsIDIzNCwgOSwgMTQsIDIzOCwgMjMzLCA5LCAxNCwgMjM4LCAyMzIsIAotICAgIDksIDE0LCAyMzgsIDIzMSwgOSwgMTQsIDIzOCwgMjMwLCA5LCAxNCwgMjM4LCAyMjksIDksIDE0LCAyMzgsIDIyOCwgOSwgCi0gICAgMTQsIDIzOCwgMjI3LCA5LCAxNCwgMjM4LCAyMjYsIDksIDE0LCAyMzgsIDIyNSwgOSwgMTQsIDIzOCwgMjI0LCA5LCAxNCwgCi0gICAgMjM4LCAyMjMsIDksIDE0LCAyMzgsIDIyMiwgOSwgMTQsIDIzOCwgMjIxLCA5LCAxNCwgMjM4LCAyMjAsIDksIDE0LCAyMzgsIAotICAgIDIxOSwgOSwgMTQsIDIzOCwgMjE4LCA5LCAxNCwgMjM4LCAyMTcsIDksIDE0LCAyMzgsIDIxNiwgOSwgMTQsIDIzOCwgMjE1LCAKLSAgICA5LCAxNCwgMjM4LCAyMTQsIDksIDE0LCAyMzgsIDIxMywgOSwgMTQsIDIzOCwgMjEyLCA5LCAxNCwgMjM4LCAyMTEsIDksIAotICAgIDE0LCAyMzgsIDIxMCwgOSwgMTQsIDIzOCwgMjA5LCA5LCAxNCwgMjM4LCAyMDgsIDksIDE0LCAyMzgsIDIwNywgOSwgMTQsIAotICAgIDIzOCwgMjA2LCA5LCAxNCwgMjM4LCAyMDUsIDksIDE0LCAyMzgsIDIwNCwgOSwgMTQsIDIzOCwgMjAzLCA5LCAxNCwgMjM4LCAKLSAgICAyMDIsIDksIDE0LCAyMzgsIDIwMSwgOSwgMTQsIDIzOCwgMjAwLCA5LCAxNCwgMjM4LCAxOTksIDksIDE0LCAyMzgsIDE5OCwgCi0gICAgOSwgMTQsIDIzOCwgMTk3LCA5LCAxNCwgMjM4LCAxOTYsIDksIDE0LCAyMzgsIDE5NSwgOSwgMTQsIDIzOCwgMTk0LCA5LCAKLSAgICAxNCwgMjM4LCAxOTMsIDksIDE0LCAyMzgsIDE5MiwgOSwgMTQsIDIzOCwgMTkxLCA5LCAxNCwgMjM4LCAxOTAsIDksIDE0LCAKLSAgICAyMzgsIDE4OSwgOSwgMTQsIDIzOCwgMTg4LCA5LCAxNCwgMjM4LCAxODcsIDksIDE0LCAyMzgsIDE4NiwgOSwgMTQsIDIzOCwgCi0gICAgMTg1LCA5LCAxNCwgMjM4LCAxODQsIDksIDE0LCAyMzgsIDE4MywgOSwgMTQsIDIzOCwgMTgyLCA5LCAxNCwgMjM4LCAxODEsIAotICAgIDksIDE0LCAyMzgsIDE4MCwgOSwgMTQsIDIzOCwgMTc5LCA5LCAxNCwgMjM4LCAxNzgsIDksIDE0LCAyMzgsIDE3NywgOSwgCi0gICAgMTQsIDIzOCwgMTc2LCA5LCAxNCwgMjM4LCAxNzUsIDksIDE0LCAyMzgsIDE3NCwgOSwgMTQsIDIzOCwgMTczLCA5LCAxNCwgCi0gICAgMjM4LCAxNzIsIDksIDE0LCAyMzgsIDE3MSwgOSwgMTQsIDIzOCwgMTcwLCA5LCAxNCwgMjM4LCAxNjksIDksIDE0LCAyMzgsIAotICAgIDE2OCwgOSwgMTQsIDIzOCwgMTY3LCA5LCAxNCwgMjM4LCAxNjYsIDksIDE0LCAyMzgsIDE2NSwgOSwgMTQsIDIzOCwgMTY0LCAKLSAgICA5LCAxNCwgMjM4LCAxNjMsIDksIDE0LCAyMzgsIDE2MiwgOSwgMTQsIDIzOCwgMTYxLCA5LCAxNCwgMjM4LCAxNjAsIDksIAotICAgIDE0LCAyMzgsIDE1OSwgOSwgMTQsIDIzOCwgMTU4LCA5LCAxNCwgMjM4LCAxNTcsIDksIDE0LCAyMzgsIDE1NiwgOSwgMTQsIAotICAgIDIzOCwgMTU1LCA5LCAxNCwgMjM4LCAxNTQsIDksIDE0LCAyMzgsIDE1MywgOSwgMTQsIDIzOCwgMTUyLCA5LCAxNCwgMjM4LCAKLSAgICAxNTEsIDksIDE0LCAyMzgsIDE1MCwgOSwgMTQsIDIzOCwgMTQ5LCA5LCAxNCwgMjM4LCAxNDgsIDksIDE0LCAyMzgsIDE0NywgCi0gICAgOSwgMTQsIDIzOCwgMTQ2LCA5LCAxNCwgMjM4LCAxNDUsIDksIDE0LCAyMzgsIDE0NCwgOSwgMTQsIDIzOCwgMTQzLCA5LCAKLSAgICAxNCwgMjM4LCAxNDIsIDksIDE0LCAyMzgsIDE0MSwgOSwgMTQsIDIzOCwgMTQwLCA5LCAxNCwgMjM4LCAxMzksIDksIDE0LCAKLSAgICAyMzgsIDEzOCwgOSwgMTQsIDIzOCwgMTM3LCA5LCAxNCwgMjM4LCAxMzYsIDksIDE0LCAyMzgsIDEzNSwgOSwgMTQsIDIzOCwgCi0gICAgMTM0LCA5LCAxNCwgMjM4LCAxMzMsIDksIDE0LCAyMzgsIDEzMiwgOSwgMTQsIDIzOCwgMTMxLCA5LCAxNCwgMjM4LCAxMzAsIAotICAgIDksIDE0LCAyMzgsIDEyOSwgOSwgMTQsIDIzOCwgMTI4LCA5LCAxNCwgMjM4LCAxMjcsIDksIDE0LCAyMzgsIDEyNiwgOSwgCi0gICAgMTQsIDIzOCwgMTI1LCA5LCAxNCwgMjM4LCAxMjQsIDksIDE0LCAyMzgsIDEyMywgOSwgMTQsIDIzOCwgMTIyLCA5LCAxNCwgCi0gICAgMjM4LCAxMjEsIDksIDE0LCAyMzgsIDEyMCwgOSwgMTQsIDIzOCwgMTE5LCA5LCAxNCwgMjM4LCAxMTgsIDksIDE0LCAyMzgsIAotICAgIDExNywgOSwgMTQsIDIzOCwgMTE2LCA5LCAxNCwgMjM4LCAxMTUsIDksIDE0LCAyMzgsIDExNCwgOSwgMTQsIDIzOCwgMTEzLCAKLSAgICA5LCAxNCwgMjM4LCAxMTIsIDksIDE0LCAyMzgsIDExMSwgOSwgMTQsIDIzOCwgMTEwLCA5LCAxNCwgMjM4LCAxMDksIDksIAotICAgIDE0LCAyMzgsIDEwOCwgOSwgMTQsIDIzOCwgMTA3LCA5LCAxNCwgMjM4LCAxMDYsIDksIDE0LCAyMzgsIDEwNSwgOSwgMTQsIAotICAgIDIzOCwgMTA0LCA5LCAxNCwgMjM4LCAxMDMsIDksIDE0LCAyMzgsIDEwMiwgOSwgMTQsIDIzOCwgMTAxLCA5LCAxNCwgMjM4LCAKLSAgICAxMDAsIDksIDE0LCAyMzgsIDk5LCA5LCAxNCwgMjM4LCA5OCwgOSwgMTQsIDIzOCwgOTcsIDksIDE0LCAyMzgsIDk2LCA5LCAKLSAgICAxNCwgMjM4LCA5NSwgOSwgMTQsIDIzOCwgOTQsIDksIDE0LCAyMzgsIDkzLCA5LCAxNCwgMjM4LCA5MiwgOSwgMTQsIDIzOCwgCi0gICAgOTEsIDksIDE0LCAyMzgsIDkwLCA5LCAxNCwgMjM4LCA4OSwgOSwgMTQsIDIzOCwgODgsIDksIDE0LCAyMzgsIDg3LCA5LCAKLSAgICAxNCwgMjM4LCA4NiwgOSwgMTQsIDIzOCwgODUsIDksIDE0LCAyMzgsIDg0LCA5LCAxNCwgMjM4LCA4MywgOSwgMTQsIDIzOCwgCi0gICAgODIsIDksIDE0LCAyMzgsIDgxLCA5LCAxNCwgMjM4LCA4MCwgOSwgMTQsIDIzOCwgNzksIDksIDE0LCAyMzgsIDc4LCA5LCAKLSAgICAxNCwgMjM4LCA3NywgOSwgMTQsIDIzOCwgNzYsIDksIDE0LCAyMzgsIDc1LCA5LCAxNCwgMjM4LCA3NCwgOSwgMTQsIDIzOCwgCi0gICAgNzMsIDIzMywgOTAsIDIxNywgODQsIDEyOSwgMjE5LCAxOCwgMTI5LCAyNDUsIDMxLCA3OCwgMTI5LCAyMjMsIDI1NCwgNzgsIAotICAgIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgMTMyLCA1MCwgMTI5LCAyMjUsIDE4MiwgNTAsIDEyOSwgMjU0LCAxMjYsIDEyOSwgCi0gICAgMjU0LCA1NywgMTI5LCA0MywgMjI2LCAzLCAxMjksIDQ0LCAyMjYsIDMsIDEyOSwgMjUzLCAyMTYsIDEyOSwgOTYsIDUwLCAKLSAgICAxMjksIDI0OSwgMjE5LCAxMjksIDI0MCwgMTY3LCAxMjksIDI0MywgMjI5LCAyMTgsIDEyOSwgMTI5LCAyMTksIDQ2LCAxMjksIAotICAgIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAxMTAsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgCi0gICAgMjEsIDE4OSwgMTI5LCAyMSwgMTk0LCAxMjksIDIxLCAxOTgsIDEyOSwgMjEsIDE5NSwgMTI5LCAyMSwgMjAwLCAxMjksIAotICAgIDI0OSwgMjI2LCAxMjksIDIyMCwgMTUwLCAxMjksIDIzMywgMTUsIDUwLCAxMjksIDI0NSwgOTgsIDUwLCAxMjksIDI0MiwgCi0gICAgMTMwLCA1MCwgMTI5LCAyMjQsIDEzLCA3OCwgMTI5LCAyNDksIDIxNywgMjUzLCAyMDYsIDEyOSwgNywgNiwgMSwgNjEsIAotICAgIDEyOSwgNywgNiwgMSwgMjUzLCAxNTgsIDEyOSwgNywgNiwgMSwgMjUxLCA2NiwgMTI5LCA3LCA2LCAxLCAyNDksIDYwLCAKLSAgICAxMjksIDcsIDYsIDEsIDc1LCAxMjksIDcsIDYsIDEsIDI0NSwgNiwgMTI5LCA3LCA2LCAxLCAyNDMsIDIwMiwgMTI5LCA3LCAKLSAgICA2LCAxLCAyNDIsIDYwLCAxMjksIDcsIDYsIDEsIDczLCAxMjksIDcsIDYsIDEsIDIzNSwgMTQ0LCAxMjksIDcsIDYsIDEsIAotICAgIDIzNSwgMjMsIDEyOSwgNywgNiwgMSwgMTU2LCAxMjksIDcsIDYsIDEsIDE5MywgMTI5LCA3LCA2LCAxLCAyMzAsIDI1LCAKLSAgICAxMjksIDcsIDYsIDEsIDc2LCAxMjksIDcsIDYsIDEsIDIyNiwgMTA1LCAxMjksIDcsIDYsIDEsIDIyNCwgOTYsIDEyOSwgNywgCi0gICAgNiwgMSwgMTUzLCAxMjksIDcsIDYsIDEsIDIyMiwgOTEsIDEyOSwgNywgNiwgMSwgMjE3LCAxNTIsIDEyOSwgNywgNiwgMSwgCi0gICAgNzAsIDEyOSwgNywgNiwgMSwgMjE0LCAxMDUsIDEyOSwgNywgNiwgMSwgMjEyLCA5OCwgMTI5LCA3LCA2LCAxLCAyMTEsIAotICAgIDE3OCwgMTI5LCA3LCA2LCAxLCAyMTEsIDExNywgMTI5LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgNDIsIDEyNywgCi0gICAgMTI5LCAyMjMsIDUwLCAyMTksIDQ2LCAxMjksIDQ0LCA0MiwgMTI3LCAxMjksIDI1MCwgMzEsIDI1NSwgMTQsIDEyOSwgMTIxLCAKLSAgICAyMzIsIDIxMywgMTI5LCAyNDIsIDEzNywgMjU1LCAxNCwgMTI5LCA3LCA0LCAxLCA2MSwgMTI5LCA3LCA0LCAxLCAyNTMsIAotICAgIDE1OCwgMTI5LCA3LCA0LCAxLCAyNTEsIDY2LCAxMjksIDcsIDQsIDEsIDI0OSwgNjAsIDEyOSwgNywgNCwgMSwgNzUsIDEyOSwgCi0gICAgNywgNCwgMSwgMjQ1LCA2LCAxMjksIDcsIDQsIDEsIDI0MywgMjAyLCAxMjksIDcsIDQsIDEsIDI0MiwgNjAsIDEyOSwgNywgCi0gICAgNCwgMSwgNzMsIDEyOSwgNywgNCwgMSwgMjM1LCAxNDQsIDEyOSwgNywgNCwgMSwgMjM1LCAyMywgMTI5LCA3LCA0LCAxLCAKLSAgICAxNTYsIDEyOSwgNywgNCwgMSwgMTkzLCAxMjksIDcsIDQsIDEsIDIzMCwgMjUsIDEyOSwgNywgNCwgMSwgNzYsIDEyOSwgNywgCi0gICAgNCwgMSwgMjI2LCAxMDUsIDEyOSwgNywgNCwgMSwgMjI0LCA5NiwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgCi0gICAgMjIyLCA5MSwgMTI5LCA3LCA0LCAxLCAyMTcsIDE1MiwgMTI5LCA3LCA0LCAxLCA3MCwgMTI5LCA3LCA0LCAxLCAyMTQsIAotICAgIDEwNSwgMTI5LCA3LCA0LCAxLCAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE3LCAxMjksIDcsIDQsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDk5LCAxMjcsIDEyOSwgNjcsIDIzMiwgMjEzLCAKLSAgICAxMjksIDQ0LCAyNDksIDk5LCAxMjcsIDEyOSwgMTgyLCAyNTEsIDYsIDIxNywgODQsIDQ1LCAyMjEsIDc4LCA0NSwgMjIxLCAKLSAgICA2NywgNDUsIDIyMSwgNTYsIDQ1LCAyMjEsIDQ0LCA0NSwgMjIxLCAzMywgNDUsIDIyMSwgMjIsIDQ1LCAyMjEsIDExLCA0NSwgCi0gICAgMjIxLCAwLCA0NSwgMjIwLCAyNDUsIDQ1LCAyMjAsIDIzNywgNDUsIDIyMCwgMjM2LCA0NSwgMjIwLCAyMzUsIDQ1LCAyMjAsIAotICAgIDIzNCwgNDUsIDIyMCwgMjMyLCA0NSwgMjIwLCAyMzEsIDQ1LCAyMjAsIDIzMCwgNDUsIDIyMCwgMjI5LCA0NSwgMjIwLCAKLSAgICAyMjgsIDQ1LCAyMjAsIDIyNywgNDUsIDIyMCwgMjI2LCA0NSwgMjIwLCAyMjUsIDQ1LCAyMjAsIDIyNCwgNDUsIDIyMCwgCi0gICAgMjIzLCA0NSwgMjIwLCAyMjEsIDQ1LCAyMjAsIDIyMCwgNDUsIDIyMCwgMjE5LCA0NSwgMjIwLCAyMTgsIDQ1LCAyMjAsIAotICAgIDIxNywgNDUsIDIyMCwgMjE2LCA0NSwgMjIwLCAyMTUsIDQ1LCAyMjAsIDIxNCwgNDUsIDIyMCwgMjEzLCA0NSwgMjIwLCAKLSAgICAyMTIsIDQ1LCAyMjAsIDIxMCwgNDUsIDIyMCwgMjA5LCA0NSwgMjIwLCAyMDgsIDQ1LCAyMjAsIDIwNywgNDUsIDIyMCwgCi0gICAgMjA2LCA0NSwgMjIwLCAyMDUsIDQ1LCAyMjAsIDIwNCwgNDUsIDIyMCwgMjAzLCA0NSwgMjIwLCAyMDIsIDQ1LCAyMjAsIAotICAgIDIwMSwgNDUsIDIyMCwgMTk5LCA0NSwgMjIwLCAxOTgsIDQ1LCAyMjAsIDE5NywgNDUsIDIyMCwgMTk2LCA0NSwgMjIwLCAKLSAgICAxOTUsIDQ1LCAyMjAsIDE5NCwgNDUsIDIyMCwgMTkzLCA0NSwgMjIwLCAxOTIsIDQ1LCAyMjAsIDE5MSwgNDUsIDIyMCwgCi0gICAgMTkwLCA0NSwgMjIwLCAxODgsIDQ1LCAyMjAsIDE4NywgNDUsIDIyMCwgMTg2LCA0NSwgMjIwLCAxODUsIDQ1LCAyMjAsIAotICAgIDE4NCwgNDUsIDIyMCwgMTgzLCA0NSwgMjIwLCAxODIsIDQ1LCAyMjAsIDE4MSwgNDUsIDIyMCwgMTgwLCA0NSwgMjIwLCAKLSAgICAxNzksIDQ1LCAyMjAsIDE3NywgNDUsIDIyMCwgMTc2LCA0NSwgMjIwLCAxNzUsIDQ1LCAyMjAsIDE3NCwgNDUsIDIyMCwgCi0gICAgMTczLCA0NSwgMjIwLCAxNzIsIDQ1LCAyMjAsIDE3MSwgNDUsIDIyMCwgMTcwLCA0NSwgMjIwLCAxNjksIDQ1LCAyMjAsIAotICAgIDE2OCwgNDUsIDIyMCwgMTY2LCA0NSwgMjIwLCAxNjUsIDQ1LCAyMjAsIDE2NCwgNDUsIDIyMCwgMTYzLCA0NSwgMjIwLCAKLSAgICAxNjIsIDQ1LCAyMjAsIDE2MSwgNDUsIDIyMCwgMTYwLCA0NSwgMjIwLCAxNTksIDQ1LCAyMjAsIDE1OCwgNDUsIDIyMCwgCi0gICAgMTU3LCA0NSwgMjIxLCAxNTQsIDQ1LCAyMjEsIDE1MywgNDUsIDIyMSwgMTUyLCA0NSwgMjIxLCAxNTEsIDQ1LCAyMjEsIAotICAgIDE1MCwgNDUsIDIyMSwgMTQ5LCA0NSwgMjIxLCAxNDgsIDQ1LCAyMjEsIDE0NywgNDUsIDIyMSwgMTQ2LCA0NSwgMjIxLCAKLSAgICAxNDUsIDQ1LCAyMjEsIDE0MywgNDUsIDIyMSwgMTQyLCA0NSwgMjIxLCAxNDEsIDQ1LCAyMjEsIDE0MCwgNDUsIDIyMSwgCi0gICAgMTM5LCA0NSwgMjIxLCAxMzgsIDQ1LCAyMjEsIDEzNywgNDUsIDIyMSwgMTM2LCA0NSwgMjIxLCAxMzUsIDQ1LCAyMjEsIAotICAgIDEzNCwgNDUsIDIyMSwgMTMyLCA0NSwgMjIxLCAxMzEsIDQ1LCAyMjEsIDEzMCwgNDUsIDIyMSwgMTI5LCA0NSwgMjIxLCAKLSAgICAxMjgsIDQ1LCAyMjEsIDEyNywgNDUsIDIyMSwgMTI2LCA0NSwgMjIxLCAxMjUsIDQ1LCAyMjEsIDEyNCwgNDUsIDIyMSwgCi0gICAgMTIzLCA0NSwgMjIxLCAxMjEsIDQ1LCAyMjEsIDEyMCwgNDUsIDIyMSwgMTE5LCA0NSwgMjIxLCAxMTgsIDQ1LCAyMjEsIAotICAgIDExNywgNDUsIDIyMSwgMTE2LCA0NSwgMjIxLCAxMTUsIDQ1LCAyMjEsIDExNCwgNDUsIDIyMSwgMTEzLCA0NSwgMjIxLCAKLSAgICAxMTIsIDQ1LCAyMjEsIDExMCwgNDUsIDIyMSwgMTA5LCA0NSwgMjIxLCAxMDgsIDQ1LCAyMjEsIDEwNywgNDUsIDIyMSwgCi0gICAgMTA2LCA0NSwgMjIxLCAxMDUsIDQ1LCAyMjEsIDEwNCwgNDUsIDIyMSwgMTAzLCA0NSwgMjIxLCAxMDIsIDQ1LCAyMjEsIAotICAgIDEwMSwgNDUsIDIyMSwgOTksIDQ1LCAyMjEsIDk4LCA0NSwgMjIxLCA5NywgNDUsIDIyMSwgOTYsIDQ1LCAyMjEsIDk1LCA0NSwgCi0gICAgMjIxLCA5NCwgNDUsIDIyMSwgOTMsIDQ1LCAyMjEsIDkyLCA0NSwgMjIxLCA5MSwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIDg4LCAKLSAgICA0NSwgMjIxLCA4NywgNDUsIDIyMSwgODYsIDQ1LCAyMjEsIDg1LCA0NSwgMjIxLCA4NCwgNDUsIDIyMSwgODMsIDQ1LCAyMjEsIAotICAgIDgyLCA0NSwgMjIxLCA4MSwgNDUsIDIyMSwgODAsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3NywgNDUsIDIyMSwgNzYsIDQ1LCAKLSAgICAyMjEsIDc1LCA0NSwgMjIxLCA3NCwgNDUsIDIyMSwgNzMsIDQ1LCAyMjEsIDcyLCA0NSwgMjIxLCA3MSwgNDUsIDIyMSwgNzAsIAotICAgIDQ1LCAyMjEsIDY5LCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjYsIDQ1LCAyMjEsIDY1LCA0NSwgMjIxLCA2NCwgNDUsIDIyMSwgCi0gICAgNjMsIDQ1LCAyMjEsIDYyLCA0NSwgMjIxLCA2MSwgNDUsIDIyMSwgNjAsIDQ1LCAyMjEsIDU5LCA0NSwgMjIxLCA1OCwgNDUsIAotICAgIDIyMSwgNTcsIDQ1LCAyMjEsIDU1LCA0NSwgMjIxLCA1NCwgNDUsIDIyMSwgNTMsIDQ1LCAyMjEsIDUyLCA0NSwgMjIxLCA1MSwgCi0gICAgNDUsIDIyMSwgNTAsIDQ1LCAyMjEsIDQ5LCA0NSwgMjIxLCA0OCwgNDUsIDIyMSwgNDcsIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAKLSAgICA0MywgNDUsIDIyMSwgNDIsIDQ1LCAyMjEsIDQxLCA0NSwgMjIxLCA0MCwgNDUsIDIyMSwgMzksIDQ1LCAyMjEsIDM4LCA0NSwgCi0gICAgMjIxLCAzNywgNDUsIDIyMSwgMzYsIDQ1LCAyMjEsIDM1LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzIsIDQ1LCAyMjEsIDMxLCAKLSAgICA0NSwgMjIxLCAzMCwgNDUsIDIyMSwgMjksIDQ1LCAyMjEsIDI4LCA0NSwgMjIxLCAyNywgNDUsIDIyMSwgMjYsIDQ1LCAyMjEsIAotICAgIDI1LCA0NSwgMjIxLCAyNCwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIxLCA0NSwgMjIxLCAyMCwgNDUsIDIyMSwgMTksIDQ1LCAKLSAgICAyMjEsIDE4LCA0NSwgMjIxLCAxNywgNDUsIDIyMSwgMTYsIDQ1LCAyMjEsIDE1LCA0NSwgMjIxLCAxNCwgNDUsIDIyMSwgMTMsIAotICAgIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMCwgNDUsIDIyMSwgOSwgNDUsIDIyMSwgOCwgNDUsIDIyMSwgNywgNDUsIDIyMSwgNiwgCi0gICAgNDUsIDIyMSwgNSwgNDUsIDIyMSwgNCwgNDUsIDIyMSwgMywgNDUsIDIyMSwgMiwgNDUsIDIyMSwgMSwgNDUsIDIyMCwgMjU1LCAKLSAgICA0NSwgMjIwLCAyNTQsIDQ1LCAyMjAsIDI1MywgNDUsIDIyMCwgMjUyLCA0NSwgMjIwLCAyNTEsIDQ1LCAyMjAsIDI1MCwgNDUsIAotICAgIDIyMCwgMjQ5LCA0NSwgMjIwLCAyNDgsIDQ1LCAyMjAsIDI0NywgNDUsIDIyMCwgMjQ2LCA0NSwgMjIwLCAyNDQsIDQ1LCAKLSAgICAyMjAsIDI0MywgNDUsIDIyMCwgMjQyLCA0NSwgMjIwLCAyNDEsIDQ1LCAyMjAsIDI0MCwgNDUsIDIyMCwgMjM5LCA0NSwgCi0gICAgMjIwLCAyMzgsIDIyNywgMjAyLCAyMjcsIDIwNCwgMjE4LCAxNTIsIDY0LCAyNDEsIDIzMywgMjE5LCA0OCwgMjE4LCAxNTIsIAotICAgIDY0LCAyMTYsIDIxMiwgMjE4LCA4NSwgMjQ1LCAxNDMsIDY0LCAyMTYsIDIxMiwgMjQ1LCA1NiwgMjQ1LCAxNDMsIDY0LCAKLSAgICAyMTUsIDI0MywgMjQ1LCAxMDksIDI0NSwgMTMyLCAyNDUsIDEzMywgMjU1LCA3LCAyNTUsIDgsIDI1NCwgMTY3LCAyNTIsIAotICAgIDQ3LCAyNTIsIDE3OSwgMjUxLCAxMzEsIDEzNSwgMjE3LCA4OSwgMjAzLCAyMTcsIDg5LCAyNDAsIDIyNywgMjE3LCA5MywgCi0gICAgMjMyLCAyMTQsIDI0NCwgMTQ1LCAxNjYsIDIzMiwgMjEzLCAyNDUsIDE0MywgNjQsIDIzMiwgMjEzLCAyMzMsIDAsIDIyOCwgCi0gICAgMTM1LCAyNDUsIDExMiwgMjMyLCAyMTQsIDIxNywgODksIDY3LCAyMTcsIDg5LCAyMTIsIDExOCwgMjQ0LCAyMCwgMjQ0LCAKLSAgICAxNDUsIDI0NCwgMTI1LCAyNTAsIDIzMCwgMjIzLCA1MywgMjQ5LCAxNDMsIDIyMCwgMjgsIDIyNiwgMTMwLCAyMzIsIDE1MCwgCi0gICAgMTEwLCAyMTksIDU4LCAyMjAsIDI4LCAyMzUsIDI1NSwgMjMyLCAxNTAsIDIxMCwgODYsIDIxOSwgMTkxLCAyNDgsIDE1MSwgCi0gICAgMjMyLCAyMDQsIDI0NSwgNzcsIDI0NywgMTU1LCAyNDgsIDMxLCAyNDksIDE3OCwgMTEwLCAyNDgsIDE0MSwgMjQ4LCAzMSwgCi0gICAgMjQ5LCAxNzgsIDEwNSwgMjQ4LCAxNDAsIDI0OCwgMzEsIDI0OSwgMTc4LCAxNTgsIDI0OCwgMTM5LCAyNDgsIDMxLCAyNDksIAotICAgIDE3OCwgMTYxLCAyNDgsIDEzOCwgMTUyLCAyNTUsIDcsIDIyOSwgMjA5LCAyMTcsIDE3NywgMjM2LCA2MiwgMjE3LCAxODAsIAotICAgIDI0NSwgMTQzLCA2NCwgMjE1LCAyNDQsIDI1MSwgMjEzLCAyNDUsIDYyLCAyNTEsIDUsIDI1MSwgNywgMjQ1LCAxNDMsIDY0LCAKLSAgICAyMzEsIDgxLCAyNDUsIDExMCwgMjE4LCA2MSwgMjE4LCA3OCwgMjQ1LCA3NywgMjQ1LCA3OCwgMjM1LCAyMzIsIDIyMCwgCi0gICAgMTM4LCAxNjEsIDI0NCwgMTA3LCAyMjAsIDEzNywgMjQzLCAyMzcsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTU4LCAyNDIsIAotICAgIDEyMSwgMjIwLCAxMzcsIDI0MiwgMTE4LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDEwNSwgMjIzLCAxMjEsIDIyMCwgMTM3LCAKLSAgICAyMjIsIDE0NSwgMjM1LCAyMzIsIDIyMCwgMTM4LCAxMTAsIDIxNCwgMTc0LCAyMjAsIDEzNywgMjE0LCAxMzMsIDIxOSwgMjEsIAotICAgIDI0OCwgNjMsIDI0OCwgNjUsIDIyNiwgNzgsIDI1MCwgMTQyLCAyMjYsIDgwLCAxMjUsIDIyNiwgMjQwLCAyMjQsIDE5MywgCi0gICAgMjQxLCA0NywgMjUxLCAxNTAsIDIyNSwgMTczLCAyNDEsIDIwMywgMjUxLCAxNjEsIDIyOCwgNzUsIDI1MSwgMTUwLCAyNDEsIAotICAgIDIwMywgMjI5LCAxNzUsIDIzNSwgMjQyLCAyMzUsIDI0NCwgMjI5LCA4MiwgMjMyLCAyMTMsIDIyOSwgOTksIDIxOCwgMTUyLCAKLSAgICA2NCwgMjIxLCAxNTgsIDI1NCwgMTgsIDIxOCwgMjIzLCAyNDUsIDE0MywgNjQsIDIyMSwgMTU4LCAyNTQsIDE4LCAyNDUsIAotICAgIDgwLCAxMzUsIDIxNywgOTAsIDIyMCwgMTI3LCAyMDMsIDIxNywgOTAsIDIyMCwgMTI3LCAyNDAsIDIyNCwgMTM1LCAyMTcsIAotICAgIDkwLCAyLCAyMzUsIDM1LCAyMDMsIDIxNywgOTAsIDIsIDIzNSwgMzUsIDI0MCwgMjI1LCAyMzIsIDIxNCwgMjE3LCA5MCwgCi0gICAgMjIwLCAxMjcsIDY3LCAyMTcsIDkwLCAyMjAsIDEyNywgMjEyLCAxMTcsIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjQ0LCAxNCwgCi0gICAgMjI1LCAyNTMsIDIzMiwgMjE0LCAyNDYsIDEwNiwgMjI1LCAzMiwgMjI1LCAyNTMsIDIzMiwgMjE0LCAyNTIsIDE3OCwgMjI1LCAKLSAgICAyNTMsIDIzMiwgMjE0LCAyMTQsIDE2MywgMjI1LCAyOCwgMjIzLCA1MCwgMjMyLCAyMTQsIDI0NCwgMTQ1LCAyMjMsIDUwLCAKLSAgICAyMzUsIDI0MiwgMjIzLCAzNSwgMjE5LCAxNTUsIDIyMCwgMjgsIDEwNSwgMjE5LCAxNTIsIDIxOCwgMjI1LCAyMTksIDE1NSwgCi0gICAgMjIwLCAyOCwgMTU4LCAyMTksIDE1MSwgMjE4LCAyMjQsIDI0OCwgMzEsIDI0OSwgMTc4LCAyMTgsIDEwNSwgMjQ4LCAxMzcsIAotICAgIDIyNCwgMTgzLCAyMTQsIDEzMiwgMTEwLCAyMjQsIDE4MywgMjE0LCAxMzAsIDIyNCwgMTQ5LCAyMjQsIDE4MywgMjE0LCAKLSAgICAxMzIsIDEwNSwgMjI0LCAxODMsIDIxNCwgMTI5LCAyMjQsIDE0OCwgMjIwLCAxMjgsIDIxNSwgMjQyLCAyMTgsIDE1MSwgCi0gICAgMjE4LCA4OSwgMjUxLCA2LCAyNTAsIDE0MiwgMjUwLCAyMDksIDIzMSwgNDMsIDIxMiwgNTksIDIzMCwgNDMsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjQyLCAxMDcsIDI1NCwgMTgsIDIxOCwgMTUyLCA2NCwgMjI0LCAxNjYsIDI1NCwgMTgsIDIxOSwgMjAsIDI0NSwgCi0gICAgMTQzLCA2NCwgMjQyLCAxMDcsIDI1NCwgMTgsIDI0NSwgMTQzLCA2NCwgMjI0LCAxNjYsIDI1NCwgMTgsIDI0NSwgMTA3LCAKLSAgICAyMTgsIDE1MiwgNjQsIDIxOCwgMTA1LCAyMTksIDM1LCAyMTksIDE1NSwgMjQyLCAxNDEsIDEzNSwgMjM1LCAxOTUsIDIyMCwgCi0gICAgMTA3LCAyMTksIDE1NSwgMTM1LCAyMzUsIDE5NSwgMjIxLCAxOTQsIDI0OSwgMTc4LCAyMjAsIDEzNSwgMjM1LCAxOTUsIAotICAgIDI0OSwgMTEzLCAyMTgsIDEwNiwgMjE2LCAyMzYsIDIxOCwgMTY4LCAyMjYsIDE2OSwgMjE3LCAxNjcsIDI0OSwgMjE4LCAKLSAgICAyMjYsIDE0MiwgMjI0LCAxODQsIDIzMSwgNDIsIDIyNSwgMTksIDI1NCwgNTMsIDIyNCwgMTc4LCAyNDksIDIxOCwgMjU0LCAKLSAgICA2OSwgMjI5LCAxNjMsIDIxOSwgMjAwLCA3LCA2LCAxLCAyNDIsIDI0OSwgNywgNCwgMSwgMjQyLCAyNDksIDI1MCwgMTU5LCAKLSAgICAxNjUsIDEsIDIzMiwgMTc1LCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgMjQ0LCAzNiwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIAotICAgIDI0NCwgMTU3LCAyMDksIDIwOSwgMSwgMjIyLCAyMTEsIDIwOSwgMjA5LCAxLCAyMzIsIDE1NiwgNjMsIDE2NCwgMjUxLCAKLSAgICAyMjMsIDIyMCwgMywgMjQyLCAyMTUsIDIzMCwgMjQ4LCAyMjMsIDQxLCAyNDMsIDIxNiwgMjQzLCAyMTUsIDI0MywgMjE0LCAKLSAgICAyMzAsIDQ1LCAyMDksIDI1MSwgMjA5LCAyNTIsIDIwOSwgMjU0LCAyMzIsIDEwMiwgMjIyLCAyMTksIDIzMiwgMTAzLCAyMjIsIAotICAgIDIyMCwgMjI1LCAyMjMsIDIzMiwgMTAxLCAyMjIsIDIxOCwgMjI4LCAxMDYsIDIzMCwgMTY1LCAyMTEsIDIyOSwgMjEyLCAxNSwgCi0gICAgMjQ1LCAxNjIsIDI0MywgMjI2LCAyMzAsIDIyOSwgMjI2LCAxOTcsIDIxNCwgMTM0LCA4NywgMjMwLCAyMjksIDI0OCwgMTU3LCAKLSAgICA4NywgOCwgMywgMjM1LCAxNTgsIDc4LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDIzMywgMjAsIDEyNywgCi0gICAgMjEzLCAxMTgsIDIxMywgNywgMjEyLCAxOTUsIDIxMiwgMTg0LCAyMTIsIDE3MywgMjEyLCAxNjIsIDIxMiwgMTUxLCAyMTIsIAotICAgIDE0MCwgMjEyLCAxMjksIDIxMywgMTE3LCAyMTMsIDEwNiwgMjEzLCA5NSwgMjEzLCA4NCwgMjEzLCA3MywgMjEzLCA2MiwgCi0gICAgMjEzLCA1MSwgMjUxLCA3MSwgMjI2LCAxNTUsIDc4LCAyNTEsIDE5NiwgMjA5LCAyNTMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAKLSAgICAyMTksIDEwMiwgMjUwLCA3MywgMjE0LCA5LCAyMTMsIDQwLCAyMTMsIDI5LCAyMTMsIDE4LCAyMTMsIDYsIDIxMiwgMjUxLCAKLSAgICAyMTIsIDI0MCwgMjEyLCAyMjksIDIxMiwgMjE4LCAyMTIsIDIwNywgMjEyLCAxOTksIDIxMiwgMTk4LCAyMTIsIDE5NywgCi0gICAgMjEyLCAxOTYsIDIxMiwgMTk0LCAyMTIsIDE5MywgMjEyLCAxOTIsIDIxMiwgMTkxLCAyMTIsIDE5MCwgMjEyLCAxODksIAotICAgIDIxMiwgMTg4LCAyMTIsIDE4NywgMjEyLCAxODYsIDIxMiwgMTg1LCAyMTIsIDE4MywgMjEyLCAxODIsIDIxMiwgMTgxLCAKLSAgICAyMTIsIDE4MCwgMjEyLCAxNzksIDIxMiwgMTc4LCAyMTIsIDE3NywgMjEyLCAxNzYsIDIxMiwgMTc1LCAyMTIsIDE3NCwgCi0gICAgMjEyLCAxNzIsIDIxMiwgMTcxLCAyMTIsIDE3MCwgMjEyLCAxNjksIDIxMiwgMTY4LCAyMTIsIDE2NywgMjEyLCAxNjYsIAotICAgIDIxMiwgMTY1LCAyMTIsIDE2NCwgMjEyLCAxNjMsIDIxMiwgMTYxLCAyMTIsIDE2MCwgMjEyLCAxNTksIDIxMiwgMTU4LCAKLSAgICAyMTIsIDE1NywgMjEyLCAxNTYsIDIxMiwgMTU1LCAyMTIsIDE1NCwgMjEyLCAxNTMsIDIxMiwgMTUyLCAyMTIsIDE1MCwgCi0gICAgMjEyLCAxNDksIDIxMiwgMTQ4LCAyMTIsIDE0NywgMjEyLCAxNDYsIDIxMiwgMTQ1LCAyMTIsIDE0NCwgMjEyLCAxNDMsIAotICAgIDIxMiwgMTQyLCAyMTIsIDE0MSwgMjEyLCAxMzksIDIxMiwgMTM4LCAyMTIsIDEzNywgMjEyLCAxMzYsIDIxMiwgMTM1LCAKLSAgICAyMTIsIDEzNCwgMjEyLCAxMzMsIDIxMiwgMTMyLCAyMTIsIDEzMSwgMjEyLCAxMzAsIDIxMiwgMTI4LCAyMTIsIDEyNywgCi0gICAgMjEyLCAxMjYsIDIxMiwgMTI1LCAyMTIsIDEyNCwgMjEyLCAxMjMsIDIxMiwgMTIyLCAyMTIsIDEyMSwgMjEyLCAxMjAsIAotICAgIDIxMiwgMTE5LCAyMTMsIDExNiwgMjEzLCAxMTUsIDIxMywgMTE0LCAyMTMsIDExMywgMjEzLCAxMTIsIDIxMywgMTExLCAKLSAgICAyMTMsIDExMCwgMjEzLCAxMDksIDIxMywgMTA4LCAyMTMsIDEwNywgMjEzLCAxMDUsIDIxMywgMTA0LCAyMTMsIDEwMywgCi0gICAgMjEzLCAxMDIsIDIxMywgMTAxLCAyMTMsIDEwMCwgMjEzLCA5OSwgMjEzLCA5OCwgMjEzLCA5NywgMjEzLCA5NiwgMjEzLCAKLSAgICA5NCwgMjEzLCA5MywgMjEzLCA5MiwgMjEzLCA5MSwgMjEzLCA5MCwgMjEzLCA4OSwgMjEzLCA4OCwgMjEzLCA4NywgMjEzLCAKLSAgICA4NiwgMjEzLCA4NSwgMjEzLCA4MywgMjEzLCA4MiwgMjEzLCA4MSwgMjEzLCA4MCwgMjEzLCA3OSwgMjEzLCA3OCwgMjEzLCAKLSAgICA3NywgMjEzLCA3NiwgMjEzLCA3NSwgMjEzLCA3NCwgMjEzLCA3MiwgMjEzLCA3MSwgMjEzLCA3MCwgMjEzLCA2OSwgMjEzLCAKLSAgICA2OCwgMjEzLCA2NywgMjEzLCA2NiwgMjEzLCA2NSwgMjEzLCA2NCwgMjEzLCA2MywgMjEzLCA2MSwgMjEzLCA2MCwgMjEzLCAKLSAgICA1OSwgMjEzLCA1OCwgMjEzLCA1NywgMjEzLCA1NiwgMjEzLCA1NSwgMjEzLCA1NCwgMjEzLCA1MywgMjEzLCA1MiwgMjEzLCAKLSAgICA1MCwgMjEzLCA0OSwgMjEzLCA0OCwgMjEzLCA0NywgMjEzLCA0NiwgMjEzLCA0NSwgMjEzLCA0NCwgMjEzLCA0MywgMjEzLCAKLSAgICA0MiwgMjEzLCA0MSwgMjEzLCAzOSwgMjEzLCAzOCwgMjEzLCAzNywgMjEzLCAzNiwgMjEzLCAzNSwgMjEzLCAzNCwgMjEzLCAKLSAgICAzMywgMjEzLCAzMiwgMjEzLCAzMSwgMjEzLCAzMCwgMjEzLCAyOCwgMjEzLCAyNywgMjEzLCAyNiwgMjEzLCAyNSwgMjEzLCAKLSAgICAyNCwgMjEzLCAyMywgMjEzLCAyMiwgMjEzLCAyMSwgMjEzLCAyMCwgMjEzLCAxOSwgMjEzLCAxNywgMjEzLCAxNiwgMjEzLCAKLSAgICAxNSwgMjEzLCAxNCwgMjEzLCAxMywgMjEzLCAxMiwgMjEzLCAxMSwgMjEzLCAxMCwgMjEzLCA5LCAyMTMsIDgsIDIxMywgNSwgCi0gICAgMjEzLCA0LCAyMTMsIDMsIDIxMywgMiwgMjEzLCAxLCAyMTMsIDAsIDIxMiwgMjU1LCAyMTIsIDI1NCwgMjEyLCAyNTMsIAotICAgIDIxMiwgMjUyLCAyMTIsIDI1MCwgMjEyLCAyNDksIDIxMiwgMjQ4LCAyMTIsIDI0NywgMjEyLCAyNDYsIDIxMiwgMjQ1LCAKLSAgICAyMTIsIDI0NCwgMjEyLCAyNDMsIDIxMiwgMjQyLCAyMTIsIDI0MSwgMjEyLCAyMzksIDIxMiwgMjM4LCAyMTIsIDIzNywgCi0gICAgMjEyLCAyMzYsIDIxMiwgMjM1LCAyMTIsIDIzNCwgMjEyLCAyMzMsIDIxMiwgMjMyLCAyMTIsIDIzMSwgMjEyLCAyMzAsIAotICAgIDIxMiwgMjI4LCAyMTIsIDIyNywgMjEyLCAyMjYsIDIxMiwgMjI1LCAyMTIsIDIyNCwgMjEyLCAyMjMsIDIxMiwgMjIyLCAKLSAgICAyMTIsIDIyMSwgMjEyLCAyMjAsIDIxMiwgMjE5LCAyMTIsIDIxNywgMjEyLCAyMTYsIDIxMiwgMjE1LCAyMTIsIDIxNCwgCi0gICAgMjEyLCAyMTMsIDIxMiwgMjEyLCAyMTIsIDIxMSwgMjEyLCAyMTAsIDIxMiwgMjA5LCAyMTIsIDIwOCwgMjEyLCAyMDYsIAotICAgIDIxMiwgMjA1LCAyMTIsIDIwNCwgMjEyLCAyMDMsIDIxMiwgMjAyLCAyMTIsIDIwMSwgMjEyLCAyMDAsIDcsIDYsIDEsIDExNSwgCi0gICAgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgCi0gICAgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAKLSAgICAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAKLSAgICAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDI1MCwgMzEsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIAotICAgIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgNTksIDc3LCAyMiwgMTQyLCA3LCA0LCAxLCAyMjksIAotICAgIDgwLCAyLCAyMTYsIDg5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIAotICAgIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgCi0gICAgMjIsIDE0MiwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgNjcsIAotICAgIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDc3LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIAotICAgIDU5LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIAotICAgIDc3LCAyMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgNTksIDc3LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI1LCAyMiwgNTksIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAKLSAgICAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDU5LCA3NywgMjIsIDE4MiwgNywgNiwgCi0gICAgMSwgMjM1LCAxNDUsIDIsIDE4MiwgNywgNCwgMSwgMjM1LCAxNDUsIDIsIDU5LCA3NywgMjIsIDE4MiwgNywgNiwgMSwgMjMzLCAKLSAgICAxNDksIDIsIDE4MiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDE4MiwgNywgNiwgMSwgMjMyLCA1MCwgMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUwLCAyLCAxODIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAxODIsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAxODIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxODIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxODIsIAotICAgIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjA0LCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAKLSAgICAyMDQsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDIxNCwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjIxLCAxOTYsIAotICAgIDIsIDE0MiwgNywgNCwgMSwgMjQxLCA1MSwgMjIxLCAxOTYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDEsIDUxLCAyMjEsIAotICAgIDE5NiwgMiwgMTQyLCAxNDYsIDEsIDIzNCwgMTA5LCAzNiwgMTE2LCAyMzUsIDIzLCAzNiwgMTE2LCAyMjksIDc5LCAzNiwgCi0gICAgMTE2LCAyNTEsIDY2LCAzNiwgMTE2LCAyMjcsIDE2NywgMzYsIDExNiwgMjE1LCAxNTksIDM2LCAxMTYsIDIyOCwgMTExLCAKLSAgICAzNiwgMTE2LCAyMTcsIDE1MiwgMzYsIDExNiwgMjMwLCAyNSwgMzYsIDExNiwgMjI2LCAxMDUsIDM2LCAxMTYsIDE5MywgMzYsIAotICAgIDExNiwgMjExLCAxMTcsIDM2LCAxMTYsIDE1MywgMzYsIDExNiwgMTU2LCAzNiwgMTE2LCAyMTQsIDEwNSwgMzYsIDExNiwgCi0gICAgMjMyLCAxNzYsIDM2LCAxMTYsIDIzMiwgMTg1LCAzNiwgMTE2LCAyMjIsIDE4MCwgMzYsIDExNiwgMjI4LCA5MywgMzYsIAotICAgIDExNiwgMjM1LCAxNDQsIDM2LCAxMTYsIDIyMCwgMTA0LCAzNiwgMTE2LCAyMTgsIDIyNiwgMzYsIDExNiwgMjIyLCA5MSwgCi0gICAgMzYsIDExNiwgMjQyLCA2MCwgMzYsIDExNiwgMjMzLCAyMzIsIDM2LCAzLCAyMzUsIDEwLCAzNiwgMywgMjM0LCA5MiwgMzYsIAotICAgIDMsIDIzNCwgODMsIDM2LCAzLCAyMzMsIDIxNywgMzYsIDMsIDIzMywgMTg4LCAzNiwgMywgMjM0LCAxODIsIDM2LCAzLCAKLSAgICAyMzQsIDE4MSwgMzYsIDMsIDIzNCwgMjQ2LCAzNiwgMywgMjM0LCAyOCwgMzYsIDMsIDIzNCwgMTAsIDM2LCAzLCAyMzQsIAotICAgIDE5NSwgMzYsIDMsIDIyOSwgNzYsIDM2LCAzLCAyMjksIDI3LCAzNiwgMywgMjI5LCAyMywgMzYsIDMsIDIyOCwgMjQ4LCAzNiwgCi0gICAgMywgMjI4LCAyNDEsIDM2LCAzLCAyMjksIDY0LCAzNiwgMywgMjI5LCA2MiwgMzYsIDMsIDIyOSwgNzMsIDM2LCAzLCAyMjksIAotICAgIDQsIDM2LCAzLCAyMjgsIDI1NSwgMzYsIDMsIDIyOSwgNjYsIDM2LCAzLCAyNTEsIDMyLCAzNiwgMywgMjUwLCA1MSwgMzYsIAotICAgIDMsIDI1MCwgNDEsIDM2LCAzLCAyNDksIDExMiwgMzYsIDMsIDI0OSwgODMsIDM2LCAzLCAyNTAsIDE5MCwgMzYsIDMsIDI1MCwgCi0gICAgMTgyLCAzNiwgMywgMjUxLCAyMiwgMzYsIDMsIDI0OSwgMjM4LCAzNiwgMywgMjQ5LCAxNzQsIDM2LCAzLCAyNTAsIDIyMiwgCi0gICAgMzYsIDMsIDIyNywgMTY0LCAzNiwgMywgMjI3LCAxNDgsIDM2LCAzLCAyMjcsIDE0MywgMzYsIDMsIDIyNywgMTI4LCAzNiwgCi0gICAgMywgMjI3LCAxMjEsIDM2LCAzLCAyMjcsIDE1NiwgMzYsIDMsIDIyNywgMTU1LCAzNiwgMywgMjI3LCAxNjEsIDM2LCAzLCAKLSAgICAyMjcsIDEzNCwgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxNTksIDM2LCAzLCAyMTUsIDE1NSwgMzYsIDMsIDIxNSwgCi0gICAgMTM1LCAzNiwgMywgMjE1LCAxMzQsIDM2LCAzLCAyMTUsIDEyMywgMzYsIDMsIDIxNSwgMTIwLCAzNiwgMywgMjE1LCAxNTEsIAotICAgIDM2LCAzLCAyMTUsIDE1MCwgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjE1LCAxMzMsIDM2LCAzLCAyMTUsIDEzMiwgMzYsIAotICAgIDMsIDIxNSwgMTUzLCAzNiwgMywgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDk1LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIyOCwgCi0gICAgNzgsIDM2LCAzLCAyMjgsIDc3LCAzNiwgMywgMjI4LCAxMDUsIDM2LCAzLCAyMjgsIDEwNCwgMzYsIDMsIDIyOCwgMTA4LCAKLSAgICAzNiwgMywgMjI4LCA4MCwgMzYsIDMsIDIyOCwgNzksIDM2LCAzLCAyMjgsIDEwNywgMzYsIDMsIDIxNywgMTAxLCAzNiwgMywgCi0gICAgMjE2LCAxMTcsIDM2LCAzLCAyMTYsIDEwMywgMzYsIDMsIDIxNSwgMTE4LCAzNiwgMywgMjE1LCA4NSwgMzYsIDMsIDIxNywgCi0gICAgMjIsIDM2LCAzLCAyMTcsIDExLCAzNiwgMywgMjE3LCA3OSwgMzYsIDMsIDExMSwgMzYsIDMsIDIxNiwgMTcsIDM2LCAzLCAKLSAgICAyMTcsIDQxLCAzNiwgMywgMjI5LCAyMjUsIDM2LCAzLCAyMjgsIDIzMywgMzYsIDMsIDIyOCwgMjA4LCAzNiwgMywgMjI3LCAKLSAgICAyMzcsIDM2LCAzLCAyMjcsIDE3OSwgMzYsIDMsIDIyOSwgMTA3LCAzNiwgMywgMjI5LCAxMDMsIDM2LCAzLCAyMjksIDIxMiwgCi0gICAgMzYsIDMsIDIyOCwgNzQsIDM2LCAzLCAyMjgsIDY0LCAzNiwgMywgMjI5LCAxODcsIDM2LCAzLCAyMjYsIDg5LCAzNiwgMywgCi0gICAgMjI1LCAxMDgsIDM2LCAzLCAyMjUsIDcxLCAzNiwgMywgMjI0LCAxNTAsIDM2LCAzLCAyMjQsIDExOSwgMzYsIDMsIDIyNSwgCi0gICAgMjIxLCAzNiwgMywgMjI1LCAyMTEsIDM2LCAzLCAyMjYsIDcxLCAzNiwgMywgMjI1LCAxNiwgMzYsIDMsIDIyNCwgMjQ5LCAKLSAgICAzNiwgMywgMjI1LCAyMzQsIDM2LCAzLCAyMzEsIDIzNywgMzYsIDMsIDIzMCwgMjMwLCAzNiwgMywgMjMwLCAyMDEsIDM2LCAKLSAgICAzLCAyMzAsIDEwMiwgMzYsIDMsIDIzMCwgNTQsIDM2LCAzLCAyMzEsIDkxLCAzNiwgMywgMjMxLCA4MCwgMzYsIDMsIDIzMSwgCi0gICAgMjAzLCAzNiwgMywgMjMwLCAxNjEsIDM2LCAzLCAyMzAsIDEzMiwgMzYsIDMsIDIzMSwgMTM1LCAzNiwgMywgMjExLCAxMDMsIAotICAgIDM2LCAzLCAyMTEsIDgsIDM2LCAzLCAyMTAsIDI1NSwgMzYsIDMsIDIxMCwgMjEyLCAzNiwgMywgMjEwLCAxODEsIDM2LCAzLCAKLSAgICAyMTEsIDQ3LCAzNiwgMywgMjExLCA0NCwgMzYsIDMsIDIxMSwgODIsIDM2LCAzLCAyMTAsIDI0NCwgMzYsIDMsIDIxMCwgCi0gICAgMjI5LCAzNiwgMywgMjExLCA1NSwgMzYsIDMsIDIyMywgMTg0LCAzNiwgMywgMjIzLCAzNSwgMzYsIDMsIDIyMiwgMjM5LCAKLSAgICAzNiwgMywgMjIyLCAxNDAsIDM2LCAzLCAyMjIsIDExMiwgMzYsIDMsIDIyMywgMTI4LCAzNiwgMywgMjIzLCAxMDgsIDM2LCAKLSAgICAzLCAyMjMsIDE2NiwgMzYsIDMsIDIyMiwgMjExLCAzNiwgMywgMjIyLCAxOTcsIDM2LCAzLCAyMjMsIDEzNiwgMzYsIDMsIAotICAgIDIzMywgMTM0LCAzNiwgMywgMjMyLCAyNDEsIDM2LCAzLCAyMzIsIDIyNywgMzYsIDMsIDIzMiwgOTgsIDM2LCAzLCAyMzIsIAotICAgIDczLCAzNiwgMywgMjMzLCA1OCwgMzYsIDMsIDIzMywgNTAsIDM2LCAzLCAyMzMsIDEwOSwgMzYsIDMsIDIzMiwgMTU2LCAzNiwgCi0gICAgMywgMjMyLCAxMjcsIDM2LCAzLCAyMzMsIDc0LCAzNiwgMywgMjE0LCAyNiwgMzYsIDMsIDIxMywgMTc2LCAzNiwgMywgMjEzLCAKLSAgICAxNjIsIDM2LCAzLCAyMTIsIDExNiwgMzYsIDMsIDIxMiwgMTA5LCAzNiwgMywgMjEzLCAyNTUsIDM2LCAzLCAyMTMsIDI1MCwgCi0gICAgMzYsIDMsIDIxNCwgMjMsIDM2LCAzLCAyMTMsIDEzOCwgMzYsIDMsIDIxMywgMTI3LCAzNiwgMywgMjE0LCA1LCAzNiwgMywgCi0gICAgMjMyLCAxNzQsIDM2LCAzLCAyMzIsIDE2OSwgMzYsIDMsIDIzMiwgMTY4LCAzNiwgMywgMjMyLCAxNjUsIDM2LCAzLCAyMzIsIAotICAgIDE2NCwgMzYsIDMsIDIzMiwgMTcxLCAzNiwgMywgMjMyLCAxNzAsIDM2LCAzLCAyMzIsIDE3MywgMzYsIDMsIDIzMiwgMTY3LCAKLSAgICAzNiwgMywgMjMyLCAxNjYsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNzgsIDM2LCAKLSAgICAzLCAyMzIsIDE3NywgMzYsIDMsIDIzMiwgMTYxLCAzNiwgMywgMjMyLCAxNjAsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIAotICAgIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxODIsIDM2LCAzLCAyMzIsIDE2MywgMzYsIDMsIDIzMiwgMTYyLCAzNiwgMywgMjMyLCAKLSAgICAxODEsIDM2LCAzLCAyMjIsIDE3OCwgMzYsIDMsIDIyMiwgMTY3LCAzNiwgMywgMjIyLCAxNjYsIDM2LCAzLCAyMjIsIDE2MCwgCi0gICAgMzYsIDMsIDIyMiwgMTUzLCAzNiwgMywgMjIyLCAxNzQsIDM2LCAzLCAyMjIsIDE3MywgMzYsIDMsIDIyMiwgMTc3LCAzNiwgCi0gICAgMywgMjIyLCAxNjUsIDM2LCAzLCAyMjIsIDE2NCwgMzYsIDMsIDIyMiwgMTc2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIAotICAgIDIyOCwgODYsIDM2LCAzLCAyMjgsIDg1LCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgODEsIDM2LCAzLCAyMjgsIDg4LCAKLSAgICAzNiwgMywgMjI4LCA4NywgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCA4MywgMzYsIDMsIAotICAgIDIyOCwgODksIDM2LCAzLCAyMzUsIDE0MCwgMzYsIDMsIDIzNSwgMTA4LCAzNiwgMywgMjM1LCAxMDEsIDM2LCAzLCAyMzUsIAotICAgIDUxLCAzNiwgMywgMjM1LCAzMywgMzYsIDMsIDIzNSwgMTI2LCAzNiwgMywgMjM1LCAxMjQsIDM2LCAzLCAyMzUsIDEzNSwgCi0gICAgMzYsIDMsIDIzNSwgNjgsIDM2LCAzLCAyMzUsIDU5LCAzNiwgMywgMjM1LCAxMjksIDM2LCAzLCAyMjAsIDk4LCAzNiwgMywgCi0gICAgMjIwLCAzMiwgMzYsIDMsIDIyMCwgMjcsIDM2LCAzLCAyMTksIDIyNSwgMzYsIDMsIDIxOSwgMjEwLCAzNiwgMywgMjIwLCAKLSAgICA2MywgMzYsIDMsIDIyMCwgNjEsIDM2LCAzLCAyMjAsIDkwLCAzNiwgMywgMjIwLCA3LCAzNiwgMywgMjIwLCAxLCAzNiwgMywgCi0gICAgMjIwLCA3MSwgMzYsIDMsIDIxOCwgMjIyLCAzNiwgMywgMjE4LCAxOTIsIDM2LCAzLCAyMTgsIDE4OCwgMzYsIDMsIDIxOCwgCi0gICAgMTc5LCAzNiwgMywgMjE4LCAxNzYsIDM2LCAzLCAyMTgsIDE5NywgMzYsIDMsIDIxOCwgMTk2LCAzNiwgMywgMjE4LCAyMjEsIAotICAgIDM2LCAzLCAyMTgsIDE4NCwgMzYsIDMsIDIxOCwgMTgzLCAzNiwgMywgMjE4LCAxOTksIDM2LCAzLCAyMjIsIDMxLCAzNiwgMywgCi0gICAgMjE5LCAxOTEsIDM2LCAzLCAyMTksIDE3NSwgMzYsIDMsIDIxOCwgODMsIDM2LCAzLCAyMTgsIDQsIDM2LCAzLCAyMjEsIAotICAgIDE4MSwgMzYsIDMsIDIyMSwgMTcwLCAzNiwgMywgMjIyLCAxNywgMzYsIDMsIDIxOSwgNTgsIDM2LCAzLCAyMTksIDQwLCAzNiwgCi0gICAgMywgMjIxLCAyMTksIDM2LCAzLCAyNDIsIDQ2LCAzNiwgMywgMjQxLCAxODAsIDM2LCAzLCAyNDEsIDE2MSwgMzYsIDMsIAotICAgIDI0MCwgMjIyLCAzNiwgMywgMjQwLCAyMDIsIDM2LCAzLCAyNDEsIDIzOCwgMzYsIDMsIDI0MSwgMjIwLCAzNiwgMywgMjQyLCAKLSAgICAzNiwgMzYsIDMsIDI0MSwgNjgsIDM2LCAzLCAyNDEsIDUzLCAzNiwgMywgMjQxLCAyNDYsIDM2LCAzLCAyMzMsIDIzMSwgMzYsIAotICAgIDMsIDIzMywgMjMwLCAzNiwgMywgMjMzLCAyMjUsIDM2LCAzLCAyMzMsIDIyNCwgMzYsIDMsIDIzMywgMjIxLCAzNiwgMywgCi0gICAgMjMzLCAyMjAsIDM2LCAzLCAyMzMsIDIyNywgMzYsIDMsIDIzMywgMjI2LCAzNiwgMywgMjMzLCAyMjksIDM2LCAzLCAyMzMsIAotICAgIDIyMywgMzYsIDMsIDIzMywgMjIyLCAzNiwgMywgMjMzLCAyMjgsIDM2LCAzLCAyMTksIDIzMSwgMTc1LCAxMTYsIDUsIDIxMSwgCi0gICAgNjgsIDE3NSwgMTE2LCA1LCAyMjMsIDE1NSwgMTc1LCAxMTYsIDUsIDIyMywgNzgsIDk4LCAxLCAyMTUsIDI4LCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMTc2LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjM0LCAxMzIsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAKLSAgICAyMzQsIDI4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjM0LCAxMDUsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjksIDQsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTEsIDMzLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUwLCAxNTcsIDY5LCAxMTYsIAotICAgIDUsIDI0OSwgMjMzLCAyNDksIDIzOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MCwgODYsIDY5LCAxMTYsIDUsIDI0OSwgCi0gICAgMjMzLCAyMjcsIDEzNCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI0OCwgMjIxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE1LCAKLSAgICAxNDQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNDcsIDE0NSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNSwgMTM5LCA2OSwgCi0gICAgMTE2LCA1LCAyNDksIDIzMywgMTk3LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE3LCAxMDUsIDY5LCAxMTYsIDUsIDI0OSwgCi0gICAgMjMzLCAyMTYsIDIwOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDExMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNiwgMTU2LCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI4LCA3NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MiwgMTkxLCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMjI1LCAxNDcsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjUsIDE2LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjI1LCAxMjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzAsIDE2MSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxMCwgCi0gICAgMjQ0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjIyLCAyMTEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzIsIDE1NiwgNjksIAotICAgIDExNiwgNSwgMjQ5LCAyMzMsIDIxMywgMTM4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjIwLCAxMDIsIDY5LCAxMTYsIDUsIAotICAgIDI0OSwgMjMzLCAyMTgsIDIyMywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIwNiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDE2MiwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzMywgMTM1LCA2OSwgMjUsIDUsIDI0OSwgMjMzLCAyMjQsIDg4LCA2OSwgMjM1LCAKLSAgICAyNDMsIDI1LCA1LCAyNDksIDIzMywgMjI0LCAzMCwgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyMiwgMTAwLCAKLSAgICA2OSwgMjM1LCAyNDMsIDI1LCA1LCAyNDksIDIzMywgMjIyLCA5MywgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIAotICAgIDIyNCwgNjksIDY5LCAyNSwgNSwgMjI2LCAyMDQsIDY5LCAyNSwgNSwgMjU1LCAzNCwgMTQxLCAxLCAyNTEsIDI1NSwgMjI5LCAKLSAgICA3NywgMTQxLCAxLCAyNTEsIDI1NSwgMjI5LCAyNywgMTQxLCAxLCAyNTEsIDI1NSwgMjI4LCAyNDgsIDE0MSwgMSwgMjUxLCAKLSAgICAyNTUsIDIyOSwgNjQsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgNCwgNTYsIDEsIDI1MSwgMjU1LCAyMjksIDc3LCA1NiwgMSwgCi0gICAgMjUxLCAyNTUsIDIyOSwgMjcsIDU2LCAxLCAyNTEsIDI1NSwgMjI4LCAyNDgsIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA2NCwgCi0gICAgNTYsIDEsIDI1MSwgMjU1LCAyMjksIDQsIDU2LCAxLCAyNTQsIDE5NCwgMjUwLCAxOTAsIDU2LCAxLCAyNTQsIDE5NCwgMjE1LCAKLSAgICAxMTgsIDU2LCAxLCAyNTQsIDE5NCwgMTExLCA1NiwgMSwgMjU0LCAxOTQsIDIyNiwgMTA1LCA1OCwgMSwgMjQ1LCAyMCwgCi0gICAgMjQ1LCAxOSwgMjQ5LCAxODIsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjQ1LCAyMCwgMjQ5LCAxODIsIDEzOCwgMTMwLCAKKyAgICA0NSwgMTA4LCAxNiwgMzEsIDIyNSwgMTI4LCAyMTgsIDQ1LCAxMDgsIDE2LCAzMSwgODUsIDIxOCwgNDUsIDEwOCwgMTYsIAorICAgIDMxLCAyMzEsIDYwLCAyMTgsIDcyLCAxMDgsIDE2LCAzMSwgMjMxLCA2MCwgMjE4LCA3MSwgMTA4LCAxNiwgMzEsIDIzMSwgCisgICAgNjAsIDIxOCwgNzAsIDEwOCwgMTYsIDMxLCAyNTAsIDQ2LCAxMDgsIDE2LCAzMSwgMjIyLCAzLCAxMDgsIDE2LCAzMSwgMjI4LCAKKyAgICAxOTMsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MSwgMTA4LCAxNiwgMzEsIDIxMywgMTQwLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDYsIAorICAgIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAyMjIsIDIsIDEwOCwgMTYsIDMxLCAyNDIsIDE3MywgMTA4LCAxNiwgCisgICAgMzEsIDIxOSwgMTY4LCAxMDgsIDE2LCAzMSwgMjM1LCAxODQsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODQsIAorICAgIDIyNiwgMTU2LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyMzUsIDE4MywgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgCisgICAgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMzUsIDE4MiwgMjI2LCAKKyAgICAxNTcsIDEwOCwgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjQ5LCAxNzUsIDEwOCwgMTYsIDMxLCAyNDksIDE0MiwgNjQsIDI0OSwgCisgICAgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIDE3NCwgMTA4LCAxNiwgMzEsIDI0OSwgMTc2LCAyNTQsIDkxLCAKKyAgICAxMDgsIDE2LCAzMSwgMjIyLCA0LCA2NCwgMjQ5LCAxNzYsIDI1NCwgOTEsIDEwOCwgMTYsIDMxLCAyMTgsIDczLCA2NCwgCisgICAgMjIyLCA0LCA2NCwgMjQ5LCAxNzUsIDEwOCwgMTYsIDMxLCAyMTMsIDI0MywgMTA4LCAxNiwgMzEsIDIxNiwgODUsIDIyNiwgCisgICAgMTU3LCAxMDgsIDE2LCAzMSwgMjMzLCA2MywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyNTQsIDkwLCAyMjYsIDE1NywgMTA4LCAKKyAgICAxNiwgMzEsIDIxOCwgNzMsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAzMSwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgCisgICAgMzEsIDIxOCwgNzMsIDY0LCAyMjIsIDQsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTgsIDY0LCAyNTQsIDg5LCAKKyAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDQsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAzMSwgMjIzLCAxMDQsIDY0LCAyNTQsIDg4LCAKKyAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMiwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCAxMDgsIAorICAgIDE2LCAzMSwgMjIzLCAxMDAsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NiwgMTA4LCAxNiwgMzEsIDI1NCwgMTY1LCAxMDgsIDE2LCAKKyAgICAzMSwgMjMxLCAxNjgsIDEwOCwgMTYsIDMxLCAyMjIsIDksIDEwOCwgMTYsIDMxLCAyNTMsIDI1NCwgMTA4LCAxNiwgMzEsIAorICAgIDIyMywgMTI4LCAxMDgsIDE2LCAzMSwgMjIzLCAxMjcsIDEwOCwgMTYsIDMxLCAyNTMsIDE5MSwgMTA4LCAxNiwgMzEsIDI1MSwgCisgICAgMjM3LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIxNywgNTAsIDEwOCwgMTYsIDMxLCAyMTcsIDQ5LCAxMDgsIDE2LCAzMSwgCisgICAgMjI0LCAxMSwgMjMyLCAyMjgsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MSwgMTA4LCAxNiwgMzEsIDI1MSwgMTkwLCAxMDgsIDE2LCAKKyAgICAzMSwgMjUxLCAxODksIDEwOCwgMTYsIDMxLCAyNTQsIDE0NiwgMTA4LCAxNiwgMzEsIDIyNiwgMjIyLCAxMDgsIDE2LCAzMSwgCisgICAgMjE4LCAyNTAsIDEwOCwgMTYsIDMxLCAyMTYsIDgzLCAxMDgsIDE2LCAzMSwgMjQyLCAxMDMsIDEwOCwgMTYsIDMxLCAyMTIsIAorICAgIDI4LCAxMDgsIDE2LCAzMSwgMjI0LCAyMjksIDEwOCwgMTYsIDMxLCAyNTEsIDIyLCAxMDgsIDE2LCAzMSwgMjE1LCA4NiwgCisgICAgMTA4LCAxNiwgMzEsIDI1MCwgMjU0LCAyMzAsIDEyNywgMTA4LCAxNiwgMzEsIDIyMSwgMjA0LCA2NCwgMjM1LCA2MSwgMTA4LCAKKyAgICAxNiwgMzEsIDI1MSwgMzMsIDEwOCwgMTYsIDMxLCAyMTUsIDIyMCwgMTA4LCAxNiwgMzEsIDIxOCwgMTU2LCAyMTUsIDIyMCwgCisgICAgMTA4LCAxNiwgMzEsIDIzMiwgMTU0LCAxMDgsIDE2LCAzMSwgMjE5LCA1OCwgMTA4LCAxNiwgMzEsIDIxNCwgMTQyLCAxMDgsIAorICAgIDE2LCAzMSwgMjQwLCAyNTMsIDI0NiwgNzIsIDEwOCwgMTYsIDMxLCAyNTMsIDIzNSwgMTA4LCAxNiwgMzEsIDIyNCwgMjM3LCAKKyAgICAyNTMsIDIzNSwgMTA4LCAxNiwgMzEsIDI1MSwgMTUwLCAxMDgsIDE2LCAzMSwgMjI0LCAyMjgsIDI1MSwgMTUwLCAxMDgsIAorICAgIDE2LCAzMSwgMjU0LCAxNDMsIDEwOCwgMTYsIDMxLCAyMTgsIDExOSwgMjE4LCAyNywgMjE4LCAxMTgsIDEwOCwgMTYsIDMxLCAKKyAgICAyMTgsIDExOSwgMjE4LCAyNywgMjE4LCAxMTcsIDEwOCwgMTYsIDMxLCAyMTgsIDY5LCAxMDgsIDE2LCAzMSwgMjI0LCAyMDMsIAorICAgIDEwOCwgMTYsIDMxLCAyNDcsIDE4OSwgMTA4LCAxNiwgMzEsIDI0NywgMTkxLCAxMDgsIDE2LCAzMSwgMjQ3LCAxOTAsIDEwOCwgCisgICAgMTYsIDMxLCAyMjQsIDEzNCwgMTA4LCAxNiwgMzEsIDIyNCwgMTIzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzAsIDEwOCwgMTYsIAorICAgIDMxLCAyNDksIDEyOSwgMTA4LCAxNiwgMzEsIDI0OSwgMTI4LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjcsIDEwOCwgMTYsIDMxLCAKKyAgICAyNDksIDEyNiwgMTA4LCAxNiwgMzEsIDI1NCwgMTc4LCAxMDgsIDE2LCAzMSwgMjUyLCAxMjcsIDY0LCAyMzEsIDE1NCwgCisgICAgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjE0LCAxNywgMTA4LCAxNiwgMzEsIDIyMywgNjAsIDEwOCwgMTYsIDMxLCAKKyAgICAyNDAsIDI0NSwgMTA4LCAxNiwgMzEsIDIyOCwgMjE3LCAxMDgsIDE2LCAzMSwgMjQ4LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzAsIAorICAgIDEzOSwgMTA4LCAxNiwgMzEsIDE2MywgMjQ2LCAxMDIsIDEwOCwgMTYsIDMxLCAxNjMsIDIyNiwgMTM2LCAxMCwgMTQsIDI0MCwgCisgICAgMTA5LCAxMCwgMTQsIDI0MCwgMTA4LCAxMCwgMTQsIDI0MCwgMTA3LCAxMCwgMTQsIDI0MCwgMTA2LCAxMCwgMTQsIDI0MCwgCisgICAgMTA1LCAxMCwgMTQsIDI0MCwgMTA0LCAxMCwgMTQsIDI0MCwgMTAzLCAxMCwgMTQsIDI0MCwgMTAyLCAxMCwgMTQsIDI0MCwgCisgICAgMTAxLCAxMCwgMTQsIDI0MCwgMTAwLCAxMCwgMTQsIDI0MCwgOTksIDEwLCAxNCwgMjQwLCA5OCwgMTAsIDE0LCAyNDAsIDk3LCAKKyAgICAxMCwgMTQsIDI0MCwgOTYsIDEwLCAxNCwgMjQwLCA5NSwgMTAsIDE0LCAyNDAsIDk0LCAxMCwgMTQsIDI0MCwgOTMsIDEwLCAKKyAgICAxNCwgMjQwLCA5MiwgMTAsIDE0LCAyNDAsIDkxLCAxMCwgMTQsIDI0MCwgOTAsIDEwLCAxNCwgMjQwLCA4OSwgMTAsIDE0LCAKKyAgICAyNDAsIDg4LCAxMCwgMTQsIDI0MCwgODcsIDEwLCAxNCwgMjQwLCA4NiwgMTAsIDE0LCAyNDAsIDg1LCAxMCwgMTQsIDI0MCwgCisgICAgODQsIDEwLCAxNCwgMjQwLCA4MywgMTAsIDE0LCAyNDAsIDgyLCAxMCwgMTQsIDI0MCwgODEsIDEwLCAxNCwgMjQwLCA4MCwgCisgICAgMTAsIDE0LCAyNDAsIDc5LCAxMCwgMTQsIDI0MCwgNzgsIDEwLCAxNCwgMjQwLCA3NywgMTAsIDE0LCAyNDAsIDc2LCAxMCwgCisgICAgMTQsIDI0MCwgNzUsIDEwLCAxNCwgMjQwLCA3NCwgMTAsIDE0LCAyNDAsIDczLCAxMCwgMTQsIDI0MCwgNzIsIDEwLCAxNCwgCisgICAgMjQwLCA3MSwgMTAsIDE0LCAyNDAsIDcwLCAxMCwgMTQsIDI0MCwgNjksIDEwLCAxNCwgMjQwLCA2OCwgMTAsIDE0LCAyNDAsIAorICAgIDY3LCAxMCwgMTQsIDI0MCwgNjYsIDEwLCAxNCwgMjQwLCA2NSwgMTAsIDE0LCAyNDAsIDY0LCAxMCwgMTQsIDI0MCwgNjMsIAorICAgIDEwLCAxNCwgMjQwLCA2MiwgMTAsIDE0LCAyNDAsIDYxLCAxMCwgMTQsIDI0MCwgNjAsIDEwLCAxNCwgMjQwLCA1OSwgMTAsIAorICAgIDE0LCAyNDAsIDU4LCAxMCwgMTQsIDI0MCwgNTcsIDEwLCAxNCwgMjQwLCA1NiwgMTAsIDE0LCAyNDAsIDU1LCAxMCwgMTQsIAorICAgIDI0MCwgNTQsIDEwLCAxNCwgMjQwLCA1MywgMTAsIDE0LCAyNDAsIDUyLCAxMCwgMTQsIDI0MCwgNTEsIDEwLCAxNCwgMjQwLCAKKyAgICA1MCwgMTAsIDE0LCAyNDAsIDQ5LCAxMCwgMTQsIDI0MCwgNDgsIDEwLCAxNCwgMjQwLCA0NywgMTAsIDE0LCAyNDAsIDQ2LCAKKyAgICAxMCwgMTQsIDI0MCwgNDUsIDEwLCAxNCwgMjQwLCA0NCwgMTAsIDE0LCAyNDAsIDQzLCAxMCwgMTQsIDI0MCwgNDIsIDEwLCAKKyAgICAxNCwgMjQwLCA0MSwgMTAsIDE0LCAyNDAsIDQwLCAxMCwgMTQsIDI0MCwgMzksIDEwLCAxNCwgMjQwLCAzOCwgMTAsIDE0LCAKKyAgICAyNDAsIDM3LCAxMCwgMTQsIDI0MCwgMzYsIDEwLCAxNCwgMjQwLCAzNSwgMTAsIDE0LCAyNDAsIDM0LCAxMCwgMTQsIDI0MCwgCisgICAgMzMsIDEwLCAxNCwgMjQwLCAzMiwgMTAsIDE0LCAyNDAsIDMxLCAxMCwgMTQsIDI0MCwgMzAsIDEwLCAxNCwgMjQwLCAyOSwgCisgICAgMTAsIDE0LCAyNDAsIDI4LCAxMCwgMTQsIDI0MCwgMjcsIDEwLCAxNCwgMjQwLCAyNiwgMTAsIDE0LCAyNDAsIDI1LCAxMCwgCisgICAgMTQsIDI0MCwgMjQsIDEwLCAxNCwgMjQwLCAyMywgMTAsIDE0LCAyNDAsIDIyLCAxMCwgMTQsIDI0MCwgMjEsIDEwLCAxNCwgCisgICAgMjQwLCAyMCwgMTAsIDE0LCAyNDAsIDE5LCAxMCwgMTQsIDI0MCwgMTgsIDEwLCAxNCwgMjQwLCAxNywgMTAsIDE0LCAyNDAsIAorICAgIDE2LCAxMCwgMTQsIDI0MCwgMTUsIDEwLCAxNCwgMjQwLCAxNCwgMTAsIDE0LCAyNDAsIDEzLCAxMCwgMTQsIDI0MCwgMTIsIAorICAgIDEwLCAxNCwgMjQwLCAxMSwgMTAsIDE0LCAyNDAsIDEwLCAxMCwgMTQsIDI0MCwgOSwgMTAsIDE0LCAyNDAsIDgsIDEwLCAxNCwgCisgICAgMjQwLCA3LCAxMCwgMTQsIDI0MCwgNiwgMTAsIDE0LCAyNDAsIDUsIDEwLCAxNCwgMjQwLCA0LCAxMCwgMTQsIDI0MCwgMywgCisgICAgMTAsIDE0LCAyNDAsIDIsIDEwLCAxNCwgMjQwLCAxLCAxMCwgMTQsIDI0MCwgMCwgMTAsIDE0LCAyMzksIDI1NSwgMTAsIDE0LCAKKyAgICAyMzksIDI1NCwgMTAsIDE0LCAyMzksIDI1MywgMTAsIDE0LCAyMzksIDI1MiwgMTAsIDE0LCAyMzksIDI1MSwgMTAsIDE0LCAKKyAgICAyMzksIDI1MCwgMTAsIDE0LCAyMzksIDI0OSwgMTAsIDE0LCAyMzksIDI0OCwgMTAsIDE0LCAyMzksIDI0NywgMTAsIDE0LCAKKyAgICAyMzksIDI0NiwgMTAsIDE0LCAyMzksIDI0NSwgMTAsIDE0LCAyMzksIDI0NCwgMTAsIDE0LCAyMzksIDI0MywgMTAsIDE0LCAKKyAgICAyMzksIDI0MiwgMTAsIDE0LCAyMzksIDI0MSwgMTAsIDE0LCAyMzksIDI0MCwgMTAsIDE0LCAyMzksIDIzOSwgMTAsIDE0LCAKKyAgICAyMzksIDIzOCwgMTAsIDE0LCAyMzksIDIzNywgMTAsIDE0LCAyMzksIDIzNiwgMTAsIDE0LCAyMzksIDIzNSwgMTAsIDE0LCAKKyAgICAyMzksIDIzNCwgMTAsIDE0LCAyMzksIDIzMywgMTAsIDE0LCAyMzksIDIzMiwgMTAsIDE0LCAyMzksIDIzMSwgMTAsIDE0LCAKKyAgICAyMzksIDIzMCwgMTAsIDE0LCAyMzksIDIyOSwgMTAsIDE0LCAyMzksIDIyOCwgMTAsIDE0LCAyMzksIDIyNywgMTAsIDE0LCAKKyAgICAyMzksIDIyNiwgMTAsIDE0LCAyMzksIDIyNSwgMTAsIDE0LCAyMzksIDIyNCwgMTAsIDE0LCAyMzksIDIyMywgMTAsIDE0LCAKKyAgICAyMzksIDIyMiwgMTAsIDE0LCAyMzksIDIyMSwgMTAsIDE0LCAyMzksIDIyMCwgMTAsIDE0LCAyMzksIDIxOSwgMTAsIDE0LCAKKyAgICAyMzksIDIxOCwgMTAsIDE0LCAyMzksIDIxNywgMTAsIDE0LCAyMzksIDIxNiwgMTAsIDE0LCAyMzksIDIxNSwgMTAsIDE0LCAKKyAgICAyMzksIDIxNCwgMTAsIDE0LCAyMzksIDIxMywgMTAsIDE0LCAyMzksIDIxMiwgMTAsIDE0LCAyMzksIDIxMSwgMTAsIDE0LCAKKyAgICAyMzksIDIxMCwgMTAsIDE0LCAyMzksIDIwOSwgMTAsIDE0LCAyMzksIDIwOCwgMTAsIDE0LCAyMzksIDIwNywgMTAsIDE0LCAKKyAgICAyMzksIDIwNiwgMTAsIDE0LCAyMzksIDIwNSwgMTAsIDE0LCAyMzksIDIwNCwgMTAsIDE0LCAyMzksIDIwMywgMTAsIDE0LCAKKyAgICAyMzksIDIwMiwgMTAsIDE0LCAyMzksIDIwMSwgMTAsIDE0LCAyMzksIDIwMCwgMTAsIDE0LCAyMzksIDE5OSwgMTAsIDE0LCAKKyAgICAyMzksIDE5OCwgMTAsIDE0LCAyMzksIDE5NywgMTAsIDE0LCAyMzksIDE5NiwgMTAsIDE0LCAyMzksIDE5NSwgMTAsIDE0LCAKKyAgICAyMzksIDE5NCwgMTAsIDE0LCAyMzksIDE5MywgMTAsIDE0LCAyMzksIDE5MiwgMTAsIDE0LCAyMzksIDE5MSwgMTAsIDE0LCAKKyAgICAyMzksIDE5MCwgMTAsIDE0LCAyMzksIDE4OSwgMTAsIDE0LCAyMzksIDE4OCwgMTAsIDE0LCAyMzksIDE4NywgMTAsIDE0LCAKKyAgICAyMzksIDE4NiwgMTAsIDE0LCAyMzksIDE4NSwgMTAsIDE0LCAyMzksIDE4NCwgMTAsIDE0LCAyMzksIDE4MywgMTAsIDE0LCAKKyAgICAyMzksIDE4MiwgMTAsIDE0LCAyMzksIDE4MSwgMTAsIDE0LCAyMzksIDE4MCwgMTAsIDE0LCAyMzksIDE3OSwgMTAsIDE0LCAKKyAgICAyMzksIDE3OCwgMTAsIDE0LCAyMzksIDE3NywgMTAsIDE0LCAyMzksIDE3NiwgMTAsIDE0LCAyMzksIDE3NSwgMTAsIDE0LCAKKyAgICAyMzksIDE3NCwgMTAsIDE0LCAyMzksIDE3MywgMTAsIDE0LCAyMzksIDE3MiwgMTAsIDE0LCAyMzksIDE3MSwgMTAsIDE0LCAKKyAgICAyMzksIDE3MCwgMTAsIDE0LCAyMzksIDE2OSwgMTAsIDE0LCAyMzksIDE2OCwgMTAsIDE0LCAyMzksIDE2NywgMTAsIDE0LCAKKyAgICAyMzksIDE2NiwgMTAsIDE0LCAyMzksIDE2NSwgMTAsIDE0LCAyMzksIDE2NCwgMTAsIDE0LCAyMzksIDE2MywgMTAsIDE0LCAKKyAgICAyMzksIDE2MiwgMTAsIDE0LCAyMzksIDE2MSwgMTAsIDE0LCAyMzksIDE2MCwgMTAsIDE0LCAyMzksIDE1OSwgMTAsIDE0LCAKKyAgICAyMzksIDE1OCwgMTAsIDE0LCAyMzksIDE1NywgMTAsIDE0LCAyMzksIDE1NiwgMTAsIDE0LCAyMzksIDE1NSwgMTAsIDE0LCAKKyAgICAyMzksIDE1NCwgMTAsIDE0LCAyMzksIDE1MywgMTAsIDE0LCAyMzksIDE1MiwgMTAsIDE0LCAyMzksIDE1MSwgMTAsIDE0LCAKKyAgICAyMzksIDE1MCwgMTAsIDE0LCAyMzksIDE0OSwgMTAsIDE0LCAyMzksIDE0OCwgMTAsIDE0LCAyMzksIDE0NywgMTAsIDE0LCAKKyAgICAyMzksIDE0NiwgMTAsIDE0LCAyMzksIDE0NSwgMTAsIDE0LCAyMzksIDE0NCwgMTAsIDE0LCAyMzksIDE0MywgMTAsIDE0LCAKKyAgICAyMzksIDE0MiwgMTAsIDE0LCAyMzksIDE0MSwgMTAsIDE0LCAyMzksIDE0MCwgMTAsIDE0LCAyMzksIDEzOSwgMTAsIDE0LCAKKyAgICAyMzksIDEzOCwgMTAsIDE0LCAyMzksIDEzNywgMTAsIDE0LCAyMzksIDEzNiwgMTAsIDE0LCAyMzksIDEzNSwgMTAsIDE0LCAKKyAgICAyMzksIDEzNCwgMTAsIDE0LCAyMzksIDEzMywgMTAsIDE0LCAyMzksIDEzMiwgMTAsIDE0LCAyMzksIDEzMSwgMTAsIDE0LCAKKyAgICAyMzksIDEzMCwgMTAsIDE0LCAyMzksIDEyOSwgMTAsIDE0LCAyMzksIDEyOCwgMTAsIDE0LCAyMzksIDEyNywgMTAsIDE0LCAKKyAgICAyMzksIDEyNiwgMTAsIDE0LCAyMzksIDEyNSwgMTAsIDE0LCAyMzksIDEyNCwgMTAsIDE0LCAyMzksIDEyMywgMTAsIDE0LCAKKyAgICAyMzksIDEyMiwgMTAsIDE0LCAyMzksIDEyMSwgMTAsIDE0LCAyMzksIDEyMCwgMTAsIDE0LCAyMzksIDExOSwgMTAsIDE0LCAKKyAgICAyMzksIDExOCwgMTAsIDE0LCAyMzksIDExNywgMTAsIDE0LCAyMzksIDExNiwgMTAsIDE0LCAyMzksIDExNSwgMTAsIDE0LCAKKyAgICAyMzksIDExNCwgMTAsIDE0LCAyMzksIDExMywgMTAsIDE0LCAyMzksIDExMiwgMTAsIDE0LCAyMzksIDExMSwgMTAsIDE0LCAKKyAgICAyMzksIDExMCwgMTAsIDE0LCAyMzksIDEwOSwgMTAsIDE0LCAyMzksIDEwOCwgMTAsIDE0LCAyMzksIDEwNywgMTAsIDE0LCAKKyAgICAyMzksIDEwNiwgMTAsIDE0LCAyMzksIDEwNSwgMTAsIDE0LCAyMzksIDEwNCwgMTAsIDE0LCAyMzksIDEwMywgMTAsIDE0LCAKKyAgICAyMzksIDEwMiwgMTAsIDE0LCAyMzksIDEwMSwgMTAsIDE0LCAyMzksIDEwMCwgMTAsIDE0LCAyMzksIDk5LCAxMCwgMTQsIAorICAgIDIzOSwgOTgsIDEwLCAxNCwgMjM5LCA5NywgMTAsIDE0LCAyMzksIDk2LCAxMCwgMTQsIDIzOSwgOTUsIDEwLCAxNCwgMjM5LCAKKyAgICA5NCwgMTAsIDE0LCAyMzksIDkzLCAxMCwgMTQsIDIzOSwgOTIsIDEwLCAxNCwgMjM5LCA5MSwgMTAsIDE0LCAyMzksIDkwLCAKKyAgICAxMCwgMTQsIDIzOSwgODksIDEwLCAxNCwgMjM5LCA4OCwgMTAsIDE0LCAyMzksIDg3LCAxMCwgMTQsIDIzOSwgODYsIDEwLCAKKyAgICAxNCwgMjM5LCA4NSwgMTAsIDE0LCAyMzksIDg0LCAxMCwgMTQsIDIzOSwgODMsIDEwLCAxNCwgMjM5LCA4MiwgMTAsIDE0LCAKKyAgICAyMzksIDgxLCAxMCwgMTQsIDIzOSwgODAsIDEwLCAxNCwgMjM5LCA3OSwgMTAsIDE0LCAyMzksIDc4LCAxMCwgMTQsIDIzOSwgCisgICAgNzcsIDEwLCAxNCwgMjM5LCA3NiwgMTAsIDE0LCAyMzksIDc1LCAxMCwgMTQsIDIzOSwgNzQsIDEwLCAxNCwgMjM5LCA3MywgCisgICAgMTAsIDE0LCAyMzksIDcyLCAxMCwgMTQsIDIzOSwgNzEsIDEwLCAxNCwgMjM5LCA3MCwgMTAsIDE0LCAyMzksIDY5LCAxMCwgCisgICAgMTQsIDIzOSwgNjgsIDEwLCAxNCwgMjM5LCA2NywgMTAsIDE0LCAyMzksIDY2LCAxMCwgMTQsIDIzOSwgNjUsIDEwLCAxNCwgCisgICAgMjM5LCA2NCwgMTAsIDE0LCAyMzksIDYzLCAxMCwgMTQsIDIzOSwgNjIsIDEwLCAxNCwgMjM5LCA2MSwgMTAsIDE0LCAyMzksIAorICAgIDYwLCAxMCwgMTQsIDIzOSwgNTksIDEwLCAxNCwgMjM5LCA1OCwgMTAsIDE0LCAyMzksIDU3LCAxMCwgMTQsIDIzOSwgNTYsIAorICAgIDEwLCAxNCwgMjM5LCA1NSwgMTAsIDE0LCAyMzksIDU0LCAxMCwgMTQsIDIzOSwgNTMsIDEwLCAxNCwgMjM5LCA1MiwgMTAsIAorICAgIDE0LCAyMzksIDUxLCAxMCwgMTQsIDIzOSwgNTAsIDEwLCAxNCwgMjM5LCA0OSwgMTAsIDE0LCAyMzksIDQ4LCAxMCwgMTQsIAorICAgIDIzOSwgNDcsIDEwLCAxNCwgMjM5LCA0NiwgMTAsIDE0LCAyMzksIDQ1LCAxMCwgMTQsIDIzOSwgNDQsIDEwLCAxNCwgMjM5LCAKKyAgICA0MywgMTAsIDE0LCAyMzksIDQyLCAxMCwgMTQsIDIzOSwgNDEsIDEwLCAxNCwgMjM5LCA0MCwgMTAsIDE0LCAyMzksIDM5LCAKKyAgICAxMCwgMTQsIDIzOSwgMzgsIDEwLCAxNCwgMjM5LCAzNywgMTAsIDE0LCAyMzksIDM2LCAxMCwgMTQsIDIzOSwgMzUsIDEwLCAKKyAgICAxNCwgMjM5LCAzNCwgMTAsIDE0LCAyMzksIDMzLCAxMCwgMTQsIDIzOSwgMzIsIDEwLCAxNCwgMjM5LCAzMSwgMTAsIDE0LCAKKyAgICAyMzksIDMwLCAxMCwgMTQsIDIzOSwgMjksIDEwLCAxNCwgMjM5LCAyOCwgMTAsIDE0LCAyMzksIDI3LCAxMCwgMTQsIDIzOSwgCisgICAgMjYsIDEwLCAxNCwgMjM5LCAyNSwgMTAsIDE0LCAyMzksIDI0LCAxMCwgMTQsIDIzOSwgMjMsIDEwLCAxNCwgMjM5LCAyMiwgCisgICAgMTAsIDE0LCAyMzksIDIxLCAxMCwgMTQsIDIzOSwgMjAsIDEwLCAxNCwgMjM5LCAxOSwgMTAsIDE0LCAyMzksIDE4LCAxMCwgCisgICAgMTQsIDIzOSwgMTcsIDEwLCAxNCwgMjM5LCAxNiwgMTAsIDE0LCAyMzksIDE1LCAxMCwgMTQsIDIzOSwgMTQsIDEwLCAxNCwgCisgICAgMjM5LCAxMywgMTAsIDE0LCAyMzksIDEyLCAxMCwgMTQsIDIzOSwgMTEsIDEwLCAxNCwgMjM5LCAxMCwgMTAsIDE0LCAyMzksIAorICAgIDksIDEwLCAxNCwgMjM5LCA4LCAxMCwgMTQsIDIzOSwgNywgMTAsIDE0LCAyMzksIDYsIDEwLCAxNCwgMjM5LCA1LCAxMCwgCisgICAgMTQsIDIzOSwgNCwgMTAsIDE0LCAyMzksIDMsIDEwLCAxNCwgMjM5LCAyLCAxMCwgMTQsIDIzOSwgMSwgMTAsIDE0LCAyMzksIAorICAgIDAsIDEwLCAxNCwgMjM4LCAyNTUsIDEwLCAxNCwgMjM4LCAyNTQsIDEwLCAxNCwgMjM4LCAyNTMsIDEwLCAxNCwgMjM4LCAKKyAgICAyNTIsIDEwLCAxNCwgMjM4LCAyNTEsIDEwLCAxNCwgMjM4LCAyNTAsIDEwLCAxNCwgMjM4LCAyNDksIDEwLCAxNCwgMjM4LCAKKyAgICAyNDgsIDEwLCAxNCwgMjM4LCAyNDcsIDEwLCAxNCwgMjM4LCAyNDYsIDEwLCAxNCwgMjM4LCAyNDUsIDEwLCAxNCwgMjM4LCAKKyAgICAyNDQsIDEwLCAxNCwgMjM4LCAyNDMsIDEwLCAxNCwgMjM4LCAyNDIsIDEwLCAxNCwgMjM4LCAyNDEsIDEwLCAxNCwgMjM4LCAKKyAgICAyNDAsIDEwLCAxNCwgMjM4LCAyMzksIDEwLCAxNCwgMjM4LCAyMzgsIDEwLCAxNCwgMjM4LCAyMzcsIDEwLCAxNCwgMjM4LCAKKyAgICAyMzYsIDEwLCAxNCwgMjM4LCAyMzUsIDEwLCAxNCwgMjM4LCAyMzQsIDEwLCAxNCwgMjM4LCAyMzMsIDEwLCAxNCwgMjM4LCAKKyAgICAyMzIsIDEwLCAxNCwgMjM4LCAyMzEsIDEwLCAxNCwgMjM4LCAyMzAsIDEwLCAxNCwgMjM4LCAyMjksIDEwLCAxNCwgMjM4LCAKKyAgICAyMjgsIDEwLCAxNCwgMjM4LCAyMjcsIDEwLCAxNCwgMjM4LCAyMjYsIDEwLCAxNCwgMjM4LCAyMjUsIDEwLCAxNCwgMjM4LCAKKyAgICAyMjQsIDEwLCAxNCwgMjM4LCAyMjMsIDEwLCAxNCwgMjM4LCAyMjIsIDEwLCAxNCwgMjM4LCAyMjEsIDEwLCAxNCwgMjM4LCAKKyAgICAyMjAsIDEwLCAxNCwgMjM4LCAyMTksIDEwLCAxNCwgMjM4LCAyMTgsIDEwLCAxNCwgMjM4LCAyMTcsIDEwLCAxNCwgMjM4LCAKKyAgICAyMTYsIDEwLCAxNCwgMjM4LCAyMTUsIDEwLCAxNCwgMjM4LCAyMTQsIDEwLCAxNCwgMjM4LCAyMTMsIDEwLCAxNCwgMjM4LCAKKyAgICAyMTIsIDEwLCAxNCwgMjM4LCAyMTEsIDEwLCAxNCwgMjM4LCAyMTAsIDEwLCAxNCwgMjM4LCAyMDksIDEwLCAxNCwgMjM4LCAKKyAgICAyMDgsIDEwLCAxNCwgMjM4LCAyMDcsIDEwLCAxNCwgMjM4LCAyMDYsIDEwLCAxNCwgMjM4LCAyMDUsIDEwLCAxNCwgMjM4LCAKKyAgICAyMDQsIDEwLCAxNCwgMjM4LCAyMDMsIDEwLCAxNCwgMjM4LCAyMDIsIDEwLCAxNCwgMjM4LCAyMDEsIDEwLCAxNCwgMjM4LCAKKyAgICAyMDAsIDEwLCAxNCwgMjM4LCAxOTksIDEwLCAxNCwgMjM4LCAxOTgsIDEwLCAxNCwgMjM4LCAxOTcsIDEwLCAxNCwgMjM4LCAKKyAgICAxOTYsIDEwLCAxNCwgMjM4LCAxOTUsIDEwLCAxNCwgMjM4LCAxOTQsIDEwLCAxNCwgMjM4LCAxOTMsIDEwLCAxNCwgMjM4LCAKKyAgICAxOTIsIDEwLCAxNCwgMjM4LCAxOTEsIDEwLCAxNCwgMjM4LCAxOTAsIDEwLCAxNCwgMjM4LCAxODksIDEwLCAxNCwgMjM4LCAKKyAgICAxODgsIDEwLCAxNCwgMjM4LCAxODcsIDEwLCAxNCwgMjM4LCAxODYsIDEwLCAxNCwgMjM4LCAxODUsIDEwLCAxNCwgMjM4LCAKKyAgICAxODQsIDEwLCAxNCwgMjM4LCAxODMsIDEwLCAxNCwgMjM4LCAxODIsIDEwLCAxNCwgMjM4LCAxODEsIDEwLCAxNCwgMjM4LCAKKyAgICAxODAsIDEwLCAxNCwgMjM4LCAxNzksIDEwLCAxNCwgMjM4LCAxNzgsIDEwLCAxNCwgMjM4LCAxNzcsIDEwLCAxNCwgMjM4LCAKKyAgICAxNzYsIDEwLCAxNCwgMjM4LCAxNzUsIDEwLCAxNCwgMjM4LCAxNzQsIDEwLCAxNCwgMjM4LCAxNzMsIDEwLCAxNCwgMjM4LCAKKyAgICAxNzIsIDEwLCAxNCwgMjM4LCAxNzEsIDEwLCAxNCwgMjM4LCAxNzAsIDEwLCAxNCwgMjM4LCAxNjksIDEwLCAxNCwgMjM4LCAKKyAgICAxNjgsIDEwLCAxNCwgMjM4LCAxNjcsIDEwLCAxNCwgMjM4LCAxNjYsIDEwLCAxNCwgMjM4LCAxNjUsIDEwLCAxNCwgMjM4LCAKKyAgICAxNjQsIDEwLCAxNCwgMjM4LCAxNjMsIDEwLCAxNCwgMjM4LCAxNjIsIDEwLCAxNCwgMjM4LCAxNjEsIDEwLCAxNCwgMjM4LCAKKyAgICAxNjAsIDEwLCAxNCwgMjM4LCAxNTksIDEwLCAxNCwgMjM4LCAxNTgsIDEwLCAxNCwgMjM4LCAxNTcsIDEwLCAxNCwgMjM4LCAKKyAgICAxNTYsIDEwLCAxNCwgMjM4LCAxNTUsIDEwLCAxNCwgMjM4LCAxNTQsIDEwLCAxNCwgMjM4LCAxNTMsIDEwLCAxNCwgMjM4LCAKKyAgICAxNTIsIDEwLCAxNCwgMjM4LCAxNTEsIDEwLCAxNCwgMjM4LCAxNTAsIDEwLCAxNCwgMjM4LCAxNDksIDEwLCAxNCwgMjM4LCAKKyAgICAxNDgsIDEwLCAxNCwgMjM4LCAxNDcsIDEwLCAxNCwgMjM4LCAxNDYsIDEwLCAxNCwgMjM4LCAxNDUsIDEwLCAxNCwgMjM4LCAKKyAgICAxNDQsIDEwLCAxNCwgMjM4LCAxNDMsIDEwLCAxNCwgMjM4LCAxNDIsIDEwLCAxNCwgMjM4LCAxNDEsIDEwLCAxNCwgMjM4LCAKKyAgICAxNDAsIDEwLCAxNCwgMjM4LCAxMzksIDEwLCAxNCwgMjM4LCAxMzgsIDEwLCAxNCwgMjM4LCAxMzcsIDEwLCAxNCwgMjM4LCAKKyAgICAxMzYsIDEwLCAxNCwgMjM4LCAxMzUsIDEwLCAxNCwgMjM4LCAxMzQsIDEwLCAxNCwgMjM4LCAxMzMsIDEwLCAxNCwgMjM4LCAKKyAgICAxMzIsIDEwLCAxNCwgMjM4LCAxMzEsIDEwLCAxNCwgMjM4LCAxMzAsIDEwLCAxNCwgMjM4LCAxMjksIDEwLCAxNCwgMjM4LCAKKyAgICAxMjgsIDEwLCAxNCwgMjM4LCAxMjcsIDEwLCAxNCwgMjM4LCAxMjYsIDEwLCAxNCwgMjM4LCAxMjUsIDEwLCAxNCwgMjM4LCAKKyAgICAxMjQsIDEwLCAxNCwgMjM4LCAxMjMsIDEwLCAxNCwgMjM4LCAxMjIsIDEwLCAxNCwgMjM4LCAxMjEsIDEwLCAxNCwgMjM4LCAKKyAgICAxMjAsIDEwLCAxNCwgMjM4LCAxMTksIDEwLCAxNCwgMjM4LCAxMTgsIDEwLCAxNCwgMjM4LCAxMTcsIDEwLCAxNCwgMjM4LCAKKyAgICAxMTYsIDEwLCAxNCwgMjM4LCAxMTUsIDEwLCAxNCwgMjM4LCAxMTQsIDEwLCAxNCwgMjM4LCAxMTMsIDEwLCAxNCwgMjM4LCAKKyAgICAxMTIsIDEwLCAxNCwgMjM4LCAxMTEsIDEwLCAxNCwgMjM4LCAxMTAsIDEwLCAxNCwgMjM4LCAxMDksIDEwLCAxNCwgMjM4LCAKKyAgICAxMDgsIDEwLCAxNCwgMjM4LCAxMDcsIDEwLCAxNCwgMjM4LCAxMDYsIDEwLCAxNCwgMjM4LCAxMDUsIDEwLCAxNCwgMjM4LCAKKyAgICAxMDQsIDEwLCAxNCwgMjM4LCAxMDMsIDEwLCAxNCwgMjM4LCAxMDIsIDEwLCAxNCwgMjM4LCAxMDEsIDEwLCAxNCwgMjM4LCAKKyAgICAxMDAsIDEwLCAxNCwgMjM4LCA5OSwgMTAsIDE0LCAyMzgsIDk4LCAxMCwgMTQsIDIzOCwgOTcsIDEwLCAxNCwgMjM4LCA5NiwgCisgICAgMTAsIDE0LCAyMzgsIDk1LCAxMCwgMTQsIDIzOCwgOTQsIDEwLCAxNCwgMjM4LCA5MywgMTAsIDE0LCAyMzgsIDkyLCAxMCwgCisgICAgMTQsIDIzOCwgOTEsIDEwLCAxNCwgMjM4LCA5MCwgMTAsIDE0LCAyMzgsIDg5LCAxMCwgMTQsIDIzOCwgODgsIDEwLCAxNCwgCisgICAgMjM4LCA4NywgMTAsIDE0LCAyMzgsIDg2LCAxMCwgMTQsIDIzOCwgODUsIDEwLCAxNCwgMjM4LCA4NCwgMTAsIDE0LCAyMzgsIAorICAgIDgzLCAxMCwgMTQsIDIzOCwgODIsIDEwLCAxNCwgMjM4LCA4MSwgMTAsIDE0LCAyMzgsIDgwLCAyMzMsIDk2LCAyMTcsIDg1LCAKKyAgICAxMjksIDIxOSwgMjAsIDEyOSwgMjQ1LCAzOSwgNzksIDEyOSwgMjI0LCAxLCA3OSwgMTI5LCA1NCwgNTAsIDEyOSwgMjQ3LCAKKyAgICAxNDAsIDUwLCAxMjksIDIyNSwgMTg1LCA1MCwgMTI5LCAyNTQsIDEzNCwgMTI5LCAyNTQsIDY1LCAxMjksIDQzLCAyMjYsIDcsIAorICAgIDEyOSwgNDQsIDIyNiwgNywgMTI5LCAyNTMsIDIyNCwgMTI5LCA5NiwgNTAsIDEyOSwgMjQ5LCAyMjcsIDEyOSwgMjQwLCAKKyAgICAxNzQsIDEyOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxMjksIDIxOSwgNDgsIDEyOSwgMjEsIDIxMCwgODYsIDEyOSwgMjEsIAorICAgIDExMSwgMTI5LCAyMSwgMTA1LCAxMjksIDIxLCAxNTgsIDEyOSwgMjEsIDE2MSwgMTI5LCAyMSwgMTkwLCAxMjksIDIxLCAKKyAgICAxOTUsIDEyOSwgMjEsIDE5OSwgMTI5LCAyMSwgMTk2LCAxMjksIDIxLCAyMDEsIDEyOSwgMjQ5LCAyMzQsIDEyOSwgMjIwLCAKKyAgICAxNTIsIDEyOSwgMjMzLCAyMSwgNTAsIDEyOSwgMjQ1LCAxMDYsIDUwLCAxMjksIDI0MiwgMTM3LCA1MCwgMTI5LCAyMjQsIAorICAgIDE2LCA3OSwgMTI5LCAyNDksIDIyNSwgMjUzLCAyMTQsIDEyOSwgNywgNiwgMSwgNjEsIDEyOSwgNywgNiwgMSwgMjUzLCAKKyAgICAxNjYsIDEyOSwgNywgNiwgMSwgMjUxLCA3NCwgMTI5LCA3LCA2LCAxLCAyNDksIDY4LCAxMjksIDcsIDYsIDEsIDc2LCAxMjksIAorICAgIDcsIDYsIDEsIDI0NSwgMTQsIDEyOSwgNywgNiwgMSwgMjQzLCAyMDksIDEyOSwgNywgNiwgMSwgMjQyLCA2NywgMTI5LCA3LCAKKyAgICA2LCAxLCA3NCwgMTI5LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTI5LCA3LCA2LCAxLCAyMzUsIDI5LCAxMjksIDcsIDYsIDEsIAorICAgIDE1NiwgMTI5LCA3LCA2LCAxLCAxOTQsIDEyOSwgNywgNiwgMSwgMjMwLCAzMCwgMTI5LCA3LCA2LCAxLCA3OCwgMTI5LCA3LCAKKyAgICA2LCAxLCAyMjYsIDEwOSwgMTI5LCA3LCA2LCAxLCAyMjQsIDk5LCAxMjksIDcsIDYsIDEsIDE1MywgMTI5LCA3LCA2LCAxLCAKKyAgICAyMjIsIDkzLCAxMjksIDcsIDYsIDEsIDIxNywgMTUzLCAxMjksIDcsIDYsIDEsIDY5LCAxMjksIDcsIDYsIDEsIDIxNCwgCisgICAgMTA1LCAxMjksIDcsIDYsIDEsIDIxMiwgOTgsIDEyOSwgNywgNiwgMSwgMjExLCAxNzgsIDEyOSwgNywgNiwgMSwgMjExLCAKKyAgICAxMTcsIDEyOSwgNywgNiwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDQyLCAxMjcsIDEyOSwgMjIzLCA1MywgMjE5LCA0OCwgCisgICAgMTI5LCA0NCwgNDIsIDEyNywgMTI5LCAyNTAsIDM5LCAyNTUsIDIzLCAxMjksIDEyMSwgMjMyLCAyMTksIDEyOSwgMjQyLCAKKyAgICAxNDQsIDI1NSwgMjMsIDEyOSwgNywgNCwgMSwgNjEsIDEyOSwgNywgNCwgMSwgMjUzLCAxNjYsIDEyOSwgNywgNCwgMSwgCisgICAgMjUxLCA3NCwgMTI5LCA3LCA0LCAxLCAyNDksIDY4LCAxMjksIDcsIDQsIDEsIDc2LCAxMjksIDcsIDQsIDEsIDI0NSwgMTQsIAorICAgIDEyOSwgNywgNCwgMSwgMjQzLCAyMDksIDEyOSwgNywgNCwgMSwgMjQyLCA2NywgMTI5LCA3LCA0LCAxLCA3NCwgMTI5LCA3LCAKKyAgICA0LCAxLCAyMzUsIDE1MCwgMTI5LCA3LCA0LCAxLCAyMzUsIDI5LCAxMjksIDcsIDQsIDEsIDE1NiwgMTI5LCA3LCA0LCAxLCAKKyAgICAxOTQsIDEyOSwgNywgNCwgMSwgMjMwLCAzMCwgMTI5LCA3LCA0LCAxLCA3OCwgMTI5LCA3LCA0LCAxLCAyMjYsIDEwOSwgCisgICAgMTI5LCA3LCA0LCAxLCAyMjQsIDk5LCAxMjksIDcsIDQsIDEsIDE1MywgMTI5LCA3LCA0LCAxLCAyMjIsIDkzLCAxMjksIDcsIAorICAgIDQsIDEsIDIxNywgMTUzLCAxMjksIDcsIDQsIDEsIDY5LCAxMjksIDcsIDQsIDEsIDIxNCwgMTA1LCAxMjksIDcsIDQsIDEsIAorICAgIDIxMiwgOTgsIDEyOSwgNywgNCwgMSwgMjExLCAxNzgsIDEyOSwgNywgNCwgMSwgMjExLCAxMTcsIDEyOSwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDEyOSwgNDMsIDI0OSwgMTA3LCAxMjcsIDEyOSwgNjcsIDIzMiwgMjE5LCAxMjksIDQ0LCAyNDksIDEwNywgCisgICAgMTI3LCAxMjksIDE4NCwgMjUxLCAxNCwgMjE3LCA4NSwgNDUsIDIyMSwgODAsIDQ1LCAyMjEsIDY5LCA0NSwgMjIxLCA1OCwgCisgICAgNDUsIDIyMSwgNDYsIDQ1LCAyMjEsIDM1LCA0NSwgMjIxLCAyNCwgNDUsIDIyMSwgMTMsIDQ1LCAyMjEsIDIsIDQ1LCAyMjAsIAorICAgIDI0NywgNDUsIDIyMCwgMjM5LCA0NSwgMjIwLCAyMzgsIDQ1LCAyMjAsIDIzNywgNDUsIDIyMCwgMjM2LCA0NSwgMjIwLCAKKyAgICAyMzQsIDQ1LCAyMjAsIDIzMywgNDUsIDIyMCwgMjMyLCA0NSwgMjIwLCAyMzEsIDQ1LCAyMjAsIDIzMCwgNDUsIDIyMCwgCisgICAgMjI5LCA0NSwgMjIwLCAyMjgsIDQ1LCAyMjAsIDIyNywgNDUsIDIyMCwgMjI2LCA0NSwgMjIwLCAyMjUsIDQ1LCAyMjAsIAorICAgIDIyMywgNDUsIDIyMCwgMjIyLCA0NSwgMjIwLCAyMjEsIDQ1LCAyMjAsIDIyMCwgNDUsIDIyMCwgMjE5LCA0NSwgMjIwLCAKKyAgICAyMTgsIDQ1LCAyMjAsIDIxNywgNDUsIDIyMCwgMjE2LCA0NSwgMjIwLCAyMTUsIDQ1LCAyMjAsIDIxNCwgNDUsIDIyMCwgCisgICAgMjEyLCA0NSwgMjIwLCAyMTEsIDQ1LCAyMjAsIDIxMCwgNDUsIDIyMCwgMjA5LCA0NSwgMjIwLCAyMDgsIDQ1LCAyMjAsIAorICAgIDIwNywgNDUsIDIyMCwgMjA2LCA0NSwgMjIwLCAyMDUsIDQ1LCAyMjAsIDIwNCwgNDUsIDIyMCwgMjAzLCA0NSwgMjIwLCAKKyAgICAyMDEsIDQ1LCAyMjAsIDIwMCwgNDUsIDIyMCwgMTk5LCA0NSwgMjIwLCAxOTgsIDQ1LCAyMjAsIDE5NywgNDUsIDIyMCwgCisgICAgMTk2LCA0NSwgMjIwLCAxOTUsIDQ1LCAyMjAsIDE5NCwgNDUsIDIyMCwgMTkzLCA0NSwgMjIwLCAxOTIsIDQ1LCAyMjAsIAorICAgIDE5MCwgNDUsIDIyMCwgMTg5LCA0NSwgMjIwLCAxODgsIDQ1LCAyMjAsIDE4NywgNDUsIDIyMCwgMTg2LCA0NSwgMjIwLCAKKyAgICAxODUsIDQ1LCAyMjAsIDE4NCwgNDUsIDIyMCwgMTgzLCA0NSwgMjIwLCAxODIsIDQ1LCAyMjAsIDE4MSwgNDUsIDIyMCwgCisgICAgMTc5LCA0NSwgMjIwLCAxNzgsIDQ1LCAyMjAsIDE3NywgNDUsIDIyMCwgMTc2LCA0NSwgMjIwLCAxNzUsIDQ1LCAyMjAsIAorICAgIDE3NCwgNDUsIDIyMCwgMTczLCA0NSwgMjIwLCAxNzIsIDQ1LCAyMjAsIDE3MSwgNDUsIDIyMCwgMTcwLCA0NSwgMjIwLCAKKyAgICAxNjgsIDQ1LCAyMjAsIDE2NywgNDUsIDIyMCwgMTY2LCA0NSwgMjIwLCAxNjUsIDQ1LCAyMjAsIDE2NCwgNDUsIDIyMCwgCisgICAgMTYzLCA0NSwgMjIwLCAxNjIsIDQ1LCAyMjAsIDE2MSwgNDUsIDIyMCwgMTYwLCA0NSwgMjIwLCAxNTksIDQ1LCAyMjEsIAorICAgIDE1NiwgNDUsIDIyMSwgMTU1LCA0NSwgMjIxLCAxNTQsIDQ1LCAyMjEsIDE1MywgNDUsIDIyMSwgMTUyLCA0NSwgMjIxLCAKKyAgICAxNTEsIDQ1LCAyMjEsIDE1MCwgNDUsIDIyMSwgMTQ5LCA0NSwgMjIxLCAxNDgsIDQ1LCAyMjEsIDE0NywgNDUsIDIyMSwgCisgICAgMTQ1LCA0NSwgMjIxLCAxNDQsIDQ1LCAyMjEsIDE0MywgNDUsIDIyMSwgMTQyLCA0NSwgMjIxLCAxNDEsIDQ1LCAyMjEsIAorICAgIDE0MCwgNDUsIDIyMSwgMTM5LCA0NSwgMjIxLCAxMzgsIDQ1LCAyMjEsIDEzNywgNDUsIDIyMSwgMTM2LCA0NSwgMjIxLCAKKyAgICAxMzQsIDQ1LCAyMjEsIDEzMywgNDUsIDIyMSwgMTMyLCA0NSwgMjIxLCAxMzEsIDQ1LCAyMjEsIDEzMCwgNDUsIDIyMSwgCisgICAgMTI5LCA0NSwgMjIxLCAxMjgsIDQ1LCAyMjEsIDEyNywgNDUsIDIyMSwgMTI2LCA0NSwgMjIxLCAxMjUsIDQ1LCAyMjEsIAorICAgIDEyMywgNDUsIDIyMSwgMTIyLCA0NSwgMjIxLCAxMjEsIDQ1LCAyMjEsIDEyMCwgNDUsIDIyMSwgMTE5LCA0NSwgMjIxLCAKKyAgICAxMTgsIDQ1LCAyMjEsIDExNywgNDUsIDIyMSwgMTE2LCA0NSwgMjIxLCAxMTUsIDQ1LCAyMjEsIDExNCwgNDUsIDIyMSwgCisgICAgMTEyLCA0NSwgMjIxLCAxMTEsIDQ1LCAyMjEsIDExMCwgNDUsIDIyMSwgMTA5LCA0NSwgMjIxLCAxMDgsIDQ1LCAyMjEsIAorICAgIDEwNywgNDUsIDIyMSwgMTA2LCA0NSwgMjIxLCAxMDUsIDQ1LCAyMjEsIDEwNCwgNDUsIDIyMSwgMTAzLCA0NSwgMjIxLCAKKyAgICAxMDEsIDQ1LCAyMjEsIDEwMCwgNDUsIDIyMSwgOTksIDQ1LCAyMjEsIDk4LCA0NSwgMjIxLCA5NywgNDUsIDIyMSwgOTYsIAorICAgIDQ1LCAyMjEsIDk1LCA0NSwgMjIxLCA5NCwgNDUsIDIyMSwgOTMsIDQ1LCAyMjEsIDkyLCA0NSwgMjIxLCA5MCwgNDUsIDIyMSwgCisgICAgODksIDQ1LCAyMjEsIDg4LCA0NSwgMjIxLCA4NywgNDUsIDIyMSwgODYsIDQ1LCAyMjEsIDg1LCA0NSwgMjIxLCA4NCwgNDUsIAorICAgIDIyMSwgODMsIDQ1LCAyMjEsIDgyLCA0NSwgMjIxLCA4MSwgNDUsIDIyMSwgNzksIDQ1LCAyMjEsIDc4LCA0NSwgMjIxLCA3NywgCisgICAgNDUsIDIyMSwgNzYsIDQ1LCAyMjEsIDc1LCA0NSwgMjIxLCA3NCwgNDUsIDIyMSwgNzMsIDQ1LCAyMjEsIDcyLCA0NSwgMjIxLCAKKyAgICA3MSwgNDUsIDIyMSwgNzAsIDQ1LCAyMjEsIDY4LCA0NSwgMjIxLCA2NywgNDUsIDIyMSwgNjYsIDQ1LCAyMjEsIDY1LCA0NSwgCisgICAgMjIxLCA2NCwgNDUsIDIyMSwgNjMsIDQ1LCAyMjEsIDYyLCA0NSwgMjIxLCA2MSwgNDUsIDIyMSwgNjAsIDQ1LCAyMjEsIDU5LCAKKyAgICA0NSwgMjIxLCA1NywgNDUsIDIyMSwgNTYsIDQ1LCAyMjEsIDU1LCA0NSwgMjIxLCA1NCwgNDUsIDIyMSwgNTMsIDQ1LCAyMjEsIAorICAgIDUyLCA0NSwgMjIxLCA1MSwgNDUsIDIyMSwgNTAsIDQ1LCAyMjEsIDQ5LCA0NSwgMjIxLCA0OCwgNDUsIDIyMSwgNDUsIDQ1LCAKKyAgICAyMjEsIDQ0LCA0NSwgMjIxLCA0MywgNDUsIDIyMSwgNDIsIDQ1LCAyMjEsIDQxLCA0NSwgMjIxLCA0MCwgNDUsIDIyMSwgMzksIAorICAgIDQ1LCAyMjEsIDM4LCA0NSwgMjIxLCAzNywgNDUsIDIyMSwgMzYsIDQ1LCAyMjEsIDM0LCA0NSwgMjIxLCAzMywgNDUsIDIyMSwgCisgICAgMzIsIDQ1LCAyMjEsIDMxLCA0NSwgMjIxLCAzMCwgNDUsIDIyMSwgMjksIDQ1LCAyMjEsIDI4LCA0NSwgMjIxLCAyNywgNDUsIAorICAgIDIyMSwgMjYsIDQ1LCAyMjEsIDI1LCA0NSwgMjIxLCAyMywgNDUsIDIyMSwgMjIsIDQ1LCAyMjEsIDIxLCA0NSwgMjIxLCAyMCwgCisgICAgNDUsIDIyMSwgMTksIDQ1LCAyMjEsIDE4LCA0NSwgMjIxLCAxNywgNDUsIDIyMSwgMTYsIDQ1LCAyMjEsIDE1LCA0NSwgMjIxLCAKKyAgICAxNCwgNDUsIDIyMSwgMTIsIDQ1LCAyMjEsIDExLCA0NSwgMjIxLCAxMCwgNDUsIDIyMSwgOSwgNDUsIDIyMSwgOCwgNDUsIAorICAgIDIyMSwgNywgNDUsIDIyMSwgNiwgNDUsIDIyMSwgNSwgNDUsIDIyMSwgNCwgNDUsIDIyMSwgMywgNDUsIDIyMSwgMSwgNDUsIAorICAgIDIyMSwgMCwgNDUsIDIyMCwgMjU1LCA0NSwgMjIwLCAyNTQsIDQ1LCAyMjAsIDI1MywgNDUsIDIyMCwgMjUyLCA0NSwgMjIwLCAKKyAgICAyNTEsIDQ1LCAyMjAsIDI1MCwgNDUsIDIyMCwgMjQ5LCA0NSwgMjIwLCAyNDgsIDQ1LCAyMjAsIDI0NiwgNDUsIDIyMCwgCisgICAgMjQ1LCA0NSwgMjIwLCAyNDQsIDQ1LCAyMjAsIDI0MywgNDUsIDIyMCwgMjQyLCA0NSwgMjIwLCAyNDEsIDQ1LCAyMjAsIAorICAgIDI0MCwgMjI3LCAyMDYsIDIyNywgMjA4LCAyMTgsIDE1NCwgNjQsIDI0MSwgMjQwLCAyMTksIDUwLCAyMTgsIDE1NCwgNjQsIAorICAgIDIxNiwgMjEzLCAyMTgsIDg2LCAyNDUsIDE1MSwgNjQsIDIxNiwgMjEzLCAyNDUsIDY0LCAyNDUsIDE1MSwgNjQsIDIxNSwgCisgICAgMjQ0LCAyNDUsIDExNywgMjQ1LCAxNDAsIDI0NSwgMTQxLCAyNTUsIDE2LCAyNTUsIDE3LCAyNTQsIDE3NiwgMjUyLCA1NSwgCisgICAgMjUyLCAxODcsIDI1MSwgMTM5LCAxMzUsIDIxNywgOTAsIDIwMywgMjE3LCA5MCwgMjQwLCAyMzQsIDIxNywgOTQsIDIzMiwgCisgICAgMjIwLCAyNDQsIDE1MywgMTY2LCAyMzIsIDIxOSwgMjQ1LCAxNTEsIDY0LCAyMzIsIDIxOSwgMjMzLCA2LCAyMjgsIDE0MCwgCisgICAgMjQ1LCAxMjAsIDIzMiwgMjIwLCAyMTcsIDkwLCA2NywgMjE3LCA5MCwgMjEyLCAxMTgsIDI0NCwgMjgsIDI0NCwgMTUzLCAKKyAgICAyNDQsIDEzMywgMjUwLCAyMzgsIDIyMywgNTYsIDI0OSwgMTUxLCAyMjAsIDMwLCAyMjYsIDEzNCwgMjMyLCAxNTYsIDExMSwgCisgICAgMjE5LCA2MCwgMjIwLCAzMCwgMjM2LCA2LCAyMzIsIDE1NiwgMjEwLCA4NiwgMjE5LCAxOTMsIDI0OCwgMTU5LCAyMzIsIAorICAgIDIxMCwgMjQ1LCA4NSwgMjQ3LCAxNjMsIDI0OCwgMzksIDI0OSwgMTg2LCAxMTEsIDI0OCwgMTQ5LCAyNDgsIDM5LCAyNDksIAorICAgIDE4NiwgMTA1LCAyNDgsIDE0OCwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE1OCwgMjQ4LCAxNDcsIDI0OCwgMzksIDI0OSwgMTg2LCAKKyAgICAxNjEsIDI0OCwgMTQ2LCAxNTIsIDI1NSwgMTYsIDIyOSwgMjE0LCAyMTcsIDE3OCwgMjM2LCA2OSwgMjE3LCAxODEsIDI0NSwgCisgICAgMTUxLCA2NCwgMjE1LCAyNDUsIDI1MSwgMjIxLCAyNDUsIDcwLCAyNTEsIDEzLCAyNTEsIDE1LCAyNDUsIDE1MSwgNjQsIAorICAgIDIzMSwgODYsIDI0NSwgMTE4LCAyMTgsIDYyLCAyMTgsIDc5LCAyNDUsIDg1LCAyNDUsIDg2LCAyMzUsIDIzOSwgMjIwLCAKKyAgICAxNDAsIDE2MSwgMjQ0LCAxMTUsIDIyMCwgMTM5LCAyNDMsIDI0NSwgMjM1LCAyMzksIDIyMCwgMTQwLCAxNTgsIDI0MiwgCisgICAgMTI4LCAyMjAsIDEzOSwgMjQyLCAxMjUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTA1LCAyMjMsIDEyNCwgMjIwLCAxMzksIAorICAgIDIyMiwgMTQ3LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDExMSwgMjE0LCAxNzQsIDIyMCwgMTM5LCAyMTQsIDEzMywgMjE5LCAyMywgCisgICAgMjQ4LCA3MSwgMjQ4LCA3MywgMjI2LCA4MiwgMjUwLCAxNTAsIDIyNiwgODQsIDEyNSwgMjI2LCAyNDQsIDIyNCwgMTk2LCAKKyAgICAyNDEsIDU0LCAyNTEsIDE1OCwgMjI1LCAxNzYsIDI0MSwgMjEwLCAyNTEsIDE2OSwgMjI4LCA4MCwgMjUxLCAxNTgsIDI0MSwgCisgICAgMjEwLCAyMjksIDE4MCwgMjM1LCAyNDksIDIzNSwgMjUxLCAyMjksIDg3LCAyMzIsIDIxOSwgMjI5LCAxMDQsIDIxOCwgMTU0LCAKKyAgICA2NCwgMjIxLCAxNjAsIDI1NCwgMjYsIDIxOCwgMjI1LCAyNDUsIDE1MSwgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyNDUsIAorICAgIDg4LCAxMzUsIDIxNywgOTEsIDIyMCwgMTI5LCAyMDMsIDIxNywgOTEsIDIyMCwgMTI5LCAyNDAsIDIzMSwgMTM1LCAyMTcsIAorICAgIDkxLCAyLCAyMzUsIDQxLCAyMDMsIDIxNywgOTEsIDIsIDIzNSwgNDEsIDI0MCwgMjMyLCAyMzIsIDIyMCwgMjE3LCA5MSwgCisgICAgMjIwLCAxMjksIDY3LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjEyLCAxMTcsIDIyNiwgMSwgMjMyLCAyMjAsIDI0NCwgMjIsIAorICAgIDIyNiwgMSwgMjMyLCAyMjAsIDI0NiwgMTE0LCAyMjUsIDM1LCAyMjYsIDEsIDIzMiwgMjIwLCAyNTIsIDE4NiwgMjI2LCAxLCAKKyAgICAyMzIsIDIyMCwgMjE0LCAxNjMsIDIyNSwgMzEsIDIyMywgNTMsIDIzMiwgMjIwLCAyNDQsIDE1MywgMjIzLCA1MywgMjM1LCAKKyAgICAyNDksIDIyMywgMzgsIDIxOSwgMTU3LCAyMjAsIDMwLCAxMDUsIDIxOSwgMTU0LCAyMTgsIDIyNywgMjE5LCAxNTcsIDIyMCwgCisgICAgMzAsIDE1OCwgMjE5LCAxNTMsIDIxOCwgMjI2LCAyNDgsIDM5LCAyNDksIDE4NiwgMjE4LCAxMDcsIDI0OCwgMTQ1LCAyMjQsIAorICAgIDE4NiwgMjE0LCAxMzIsIDExMSwgMjI0LCAxODYsIDIxNCwgMTMwLCAyMjQsIDE1MiwgMjI0LCAxODYsIDIxNCwgMTMyLCAKKyAgICAxMDUsIDIyNCwgMTg2LCAyMTQsIDEyOSwgMjI0LCAxNTEsIDIyMCwgMTMwLCAyMTUsIDI0MywgMjE4LCAxNTMsIDIxOCwgOTAsIAorICAgIDI1MSwgMTQsIDI1MCwgMTUwLCAyNTAsIDIxNywgMjMxLCA0OCwgMjEyLCA1OSwgMjMwLCA0OCwgMjE4LCAxNTQsIDY0LCAKKyAgICAyNDIsIDExNCwgMjU0LCAyNiwgMjE4LCAxNTQsIDY0LCAyMjQsIDE2OSwgMjU0LCAyNiwgMjE5LCAyMiwgMjQ1LCAxNTEsIAorICAgIDY0LCAyNDIsIDExNCwgMjU0LCAyNiwgMjQ1LCAxNTEsIDY0LCAyMjQsIDE2OSwgMjU0LCAyNiwgMjQ1LCAxMTUsIDIxOCwgCisgICAgMTU0LCA2NCwgMjE4LCAxMDcsIDIxOSwgMzcsIDIxOSwgMTU3LCAyNDIsIDE0OCwgMTM1LCAyMzUsIDIwMiwgMjIwLCAxMDksIAorICAgIDIxOSwgMTU3LCAxMzUsIDIzNSwgMjAyLCAyMjEsIDE5NiwgMjQ5LCAxODYsIDIyMCwgMTM3LCAyMzUsIDIwMiwgMjQ5LCAKKyAgICAxMjEsIDIxOCwgMTA4LCAyMTYsIDIzNywgMjE4LCAxNzAsIDIyNiwgMTczLCAyMTcsIDE2OCwgMjQ5LCAyMjYsIDIyNiwgCisgICAgMTQ2LCAyMjQsIDE4NywgMjMxLCA0NywgMjI1LCAyMiwgMjU0LCA2MSwgMjI0LCAxODEsIDI0OSwgMjI2LCAyNTQsIDc3LCAKKyAgICAyMjksIDE2OCwgMjE5LCAyMDIsIDcsIDYsIDEsIDI0MywgMCwgNywgNCwgMSwgMjQzLCAwLCAyNTAsIDE2NywgMjU0LCAxNTcsIAorICAgIDE4MywgMjE4LCA2OCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMzMsIDUyLCAxNjUsIDEsIDIzMiwgMTgxLCAyMDksIDIwOSwgMSwgCisgICAgMjQ0LCA1MiwgMjQ0LCA0NCwgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDI0NCwgMTY1LCAyMDksIDIwOSwgMSwgMjIyLCAyMTMsIAorICAgIDIwOSwgMjA5LCAxLCAyMzIsIDE2MiwgNjMsIDE2NCwgMjUxLCAyMzEsIDIyMCwgNSwgMjQyLCAyMjIsIDIzMCwgMjUzLCAKKyAgICAyMjMsIDQ0LCAyNDMsIDIyMywgMjQzLCAyMjIsIDI0MywgMjIxLCAyMzAsIDUwLCAyMDksIDI1MSwgMjA5LCAyNTIsIDIwOSwgCisgICAgMjU0LCAyMzIsIDEwNywgMjIyLCAyMjEsIDIzMiwgMTA5LCAyMjIsIDIyMywgMjI1LCAyMjcsIDIzMiwgMTA2LCAyMjIsIAorICAgIDIyMCwgMjI4LCAxMTEsIDIzMCwgMTcwLCAyMTEsIDIyOSwgMjMyLCAxMDgsIDIyMiwgMjIyLCAyNDMsIDI0NCwgMjI1LCAKKyAgICAyMjYsIDIxMiwgMTUsIDI0NSwgMTcwLCAyNDMsIDIzMywgMjMwLCAyMzQsIDIyNiwgMjAxLCAyMTQsIDEzNCwgODcsIDIzMCwgCisgICAgMjM0LCAyNDgsIDE2NSwgODcsIDgsIDMsIDIzNSwgMTY0LCA3OSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDcxLCAKKyAgICAyMzMsIDI2LCAxMjcsIDIxMywgMTE4LCAyMTMsIDcsIDIxMiwgMTk1LCAyMTIsIDE4NCwgMjEyLCAxNzMsIDIxMiwgMTYyLCAKKyAgICAyMTIsIDE1MSwgMjEyLCAxNDAsIDIxMiwgMTI5LCAyMTMsIDExNywgMjEzLCAxMDYsIDIxMywgOTUsIDIxMywgODQsIDIxMywgCisgICAgNzMsIDIxMywgNjIsIDIxMywgNTEsIDI1MSwgNzksIDIyNiwgMTU5LCA3OSwgMjUxLCAyMDQsIDIwOSwgMjUzLCAxNSwgNSwgCisgICAgMjI3LCAyMTUsIDIxNiwgMjQwLCAxNSwgNSwgMjI3LCAyMTUsIDExNSwgMjI3LCAyMTUsIDI1MSwgMTA3LCAxMTUsIDI1MSwgCisgICAgMTA2LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjE5LCAxMDQsIDI1MCwgODEsIDIxNCwgOSwgMjEzLCA0MCwgMjEzLCAyOSwgCisgICAgMjEzLCAxOCwgMjEzLCA2LCAyMTIsIDI1MSwgMjEyLCAyNDAsIDIxMiwgMjI5LCAyMTIsIDIxOCwgMjEyLCAyMDcsIDIxMiwgCisgICAgMTk5LCAyMTIsIDE5OCwgMjEyLCAxOTcsIDIxMiwgMTk2LCAyMTIsIDE5NCwgMjEyLCAxOTMsIDIxMiwgMTkyLCAyMTIsIAorICAgIDE5MSwgMjEyLCAxOTAsIDIxMiwgMTg5LCAyMTIsIDE4OCwgMjEyLCAxODcsIDIxMiwgMTg2LCAyMTIsIDE4NSwgMjEyLCAKKyAgICAxODMsIDIxMiwgMTgyLCAyMTIsIDE4MSwgMjEyLCAxODAsIDIxMiwgMTc5LCAyMTIsIDE3OCwgMjEyLCAxNzcsIDIxMiwgCisgICAgMTc2LCAyMTIsIDE3NSwgMjEyLCAxNzQsIDIxMiwgMTcyLCAyMTIsIDE3MSwgMjEyLCAxNzAsIDIxMiwgMTY5LCAyMTIsIAorICAgIDE2OCwgMjEyLCAxNjcsIDIxMiwgMTY2LCAyMTIsIDE2NSwgMjEyLCAxNjQsIDIxMiwgMTYzLCAyMTIsIDE2MSwgMjEyLCAKKyAgICAxNjAsIDIxMiwgMTU5LCAyMTIsIDE1OCwgMjEyLCAxNTcsIDIxMiwgMTU2LCAyMTIsIDE1NSwgMjEyLCAxNTQsIDIxMiwgCisgICAgMTUzLCAyMTIsIDE1MiwgMjEyLCAxNTAsIDIxMiwgMTQ5LCAyMTIsIDE0OCwgMjEyLCAxNDcsIDIxMiwgMTQ2LCAyMTIsIAorICAgIDE0NSwgMjEyLCAxNDQsIDIxMiwgMTQzLCAyMTIsIDE0MiwgMjEyLCAxNDEsIDIxMiwgMTM5LCAyMTIsIDEzOCwgMjEyLCAKKyAgICAxMzcsIDIxMiwgMTM2LCAyMTIsIDEzNSwgMjEyLCAxMzQsIDIxMiwgMTMzLCAyMTIsIDEzMiwgMjEyLCAxMzEsIDIxMiwgCisgICAgMTMwLCAyMTIsIDEyOCwgMjEyLCAxMjcsIDIxMiwgMTI2LCAyMTIsIDEyNSwgMjEyLCAxMjQsIDIxMiwgMTIzLCAyMTIsIAorICAgIDEyMiwgMjEyLCAxMjEsIDIxMiwgMTIwLCAyMTIsIDExOSwgMjEzLCAxMTYsIDIxMywgMTE1LCAyMTMsIDExNCwgMjEzLCAKKyAgICAxMTMsIDIxMywgMTEyLCAyMTMsIDExMSwgMjEzLCAxMTAsIDIxMywgMTA5LCAyMTMsIDEwOCwgMjEzLCAxMDcsIDIxMywgCisgICAgMTA1LCAyMTMsIDEwNCwgMjEzLCAxMDMsIDIxMywgMTAyLCAyMTMsIDEwMSwgMjEzLCAxMDAsIDIxMywgOTksIDIxMywgOTgsIAorICAgIDIxMywgOTcsIDIxMywgOTYsIDIxMywgOTQsIDIxMywgOTMsIDIxMywgOTIsIDIxMywgOTEsIDIxMywgOTAsIDIxMywgODksIAorICAgIDIxMywgODgsIDIxMywgODcsIDIxMywgODYsIDIxMywgODUsIDIxMywgODMsIDIxMywgODIsIDIxMywgODEsIDIxMywgODAsIAorICAgIDIxMywgNzksIDIxMywgNzgsIDIxMywgNzcsIDIxMywgNzYsIDIxMywgNzUsIDIxMywgNzQsIDIxMywgNzIsIDIxMywgNzEsIAorICAgIDIxMywgNzAsIDIxMywgNjksIDIxMywgNjgsIDIxMywgNjcsIDIxMywgNjYsIDIxMywgNjUsIDIxMywgNjQsIDIxMywgNjMsIAorICAgIDIxMywgNjEsIDIxMywgNjAsIDIxMywgNTksIDIxMywgNTgsIDIxMywgNTcsIDIxMywgNTYsIDIxMywgNTUsIDIxMywgNTQsIAorICAgIDIxMywgNTMsIDIxMywgNTIsIDIxMywgNTAsIDIxMywgNDksIDIxMywgNDgsIDIxMywgNDcsIDIxMywgNDYsIDIxMywgNDUsIAorICAgIDIxMywgNDQsIDIxMywgNDMsIDIxMywgNDIsIDIxMywgNDEsIDIxMywgMzksIDIxMywgMzgsIDIxMywgMzcsIDIxMywgMzYsIAorICAgIDIxMywgMzUsIDIxMywgMzQsIDIxMywgMzMsIDIxMywgMzIsIDIxMywgMzEsIDIxMywgMzAsIDIxMywgMjgsIDIxMywgMjcsIAorICAgIDIxMywgMjYsIDIxMywgMjUsIDIxMywgMjQsIDIxMywgMjMsIDIxMywgMjIsIDIxMywgMjEsIDIxMywgMjAsIDIxMywgMTksIAorICAgIDIxMywgMTcsIDIxMywgMTYsIDIxMywgMTUsIDIxMywgMTQsIDIxMywgMTMsIDIxMywgMTIsIDIxMywgMTEsIDIxMywgMTAsIAorICAgIDIxMywgOSwgMjEzLCA4LCAyMTMsIDUsIDIxMywgNCwgMjEzLCAzLCAyMTMsIDIsIDIxMywgMSwgMjEzLCAwLCAyMTIsIDI1NSwgCisgICAgMjEyLCAyNTQsIDIxMiwgMjUzLCAyMTIsIDI1MiwgMjEyLCAyNTAsIDIxMiwgMjQ5LCAyMTIsIDI0OCwgMjEyLCAyNDcsIAorICAgIDIxMiwgMjQ2LCAyMTIsIDI0NSwgMjEyLCAyNDQsIDIxMiwgMjQzLCAyMTIsIDI0MiwgMjEyLCAyNDEsIDIxMiwgMjM5LCAKKyAgICAyMTIsIDIzOCwgMjEyLCAyMzcsIDIxMiwgMjM2LCAyMTIsIDIzNSwgMjEyLCAyMzQsIDIxMiwgMjMzLCAyMTIsIDIzMiwgCisgICAgMjEyLCAyMzEsIDIxMiwgMjMwLCAyMTIsIDIyOCwgMjEyLCAyMjcsIDIxMiwgMjI2LCAyMTIsIDIyNSwgMjEyLCAyMjQsIAorICAgIDIxMiwgMjIzLCAyMTIsIDIyMiwgMjEyLCAyMjEsIDIxMiwgMjIwLCAyMTIsIDIxOSwgMjEyLCAyMTcsIDIxMiwgMjE2LCAKKyAgICAyMTIsIDIxNSwgMjEyLCAyMTQsIDIxMiwgMjEzLCAyMTIsIDIxMiwgMjEyLCAyMTEsIDIxMiwgMjEwLCAyMTIsIDIwOSwgCisgICAgMjEyLCAyMDgsIDIxMiwgMjA2LCAyMTIsIDIwNSwgMjEyLCAyMDQsIDIxMiwgMjAzLCAyMTIsIDIwMiwgMjEyLCAyMDEsIAorICAgIDIxMiwgMjAwLCA3LCA2LCAxLCAxMTYsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMjMxLCAKKyAgICAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIAorICAgIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgCisgICAgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgCisgICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKKyAgICAzOSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTYwLCAKKyAgICAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCAKKyAgICA3MiwgMjIsIDE0MiwgNywgNCwgMSwgMjI5LCA4NSwgMiwgMjE2LCA5MCwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgCisgICAgMjIwLCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAorICAgIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAKKyAgICAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIAorICAgIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTg0LCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDU5LCAKKyAgICA3MiwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDcyLCAKKyAgICAyMiwgMTg0LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgCisgICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDU5LCA3MiwgMjIsIAorICAgIDE0MiwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDYsIDEsIDIzNSwgMTUxLCAyLCAxODQsIDcsIDQsIDEsIDIzNSwgMTUxLCAKKyAgICAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxODQsIAorICAgIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTg0LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTg0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTg0LCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIAorICAgIDIwNCwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjA0LCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAKKyAgICAxMDYsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjEsIDE5OCwgCisgICAgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIyMSwgMTk4LCAyLCAxNDIsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMjQxLCA1OCwgMjIxLCAxOTgsIDIsIDE0MiwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyNTQsIDE3OSwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTIsIDMwLCA5LCAyMjAsIDEzNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTcsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAKKyAgICAyMzgsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjEwLCAyMTIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgNzYsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjU0LCAyNTIsIDksIDIyMCwgMTM3LCAyMjgsIDY4LCAyLCAyMzQsIDE4MCwgMTQ2LCAxLCAyMzQsIDExNSwgMzYsIAorICAgIDExNywgMjM1LCAyOSwgMzYsIDExNywgMjI5LCA4NCwgMzYsIDExNywgMjUxLCA3NCwgMzYsIDExNywgMjI3LCAxNzEsIDM2LCAKKyAgICAxMTcsIDIxNSwgMTYwLCAzNiwgMTE3LCAyMjgsIDExNiwgMzYsIDExNywgMjE3LCAxNTMsIDM2LCAxMTcsIDIzMCwgMzAsIAorICAgIDM2LCAxMTcsIDIyNiwgMTA5LCAzNiwgMTE3LCAxOTQsIDM2LCAxMTcsIDIxMSwgMTE3LCAzNiwgMTE3LCAxNTMsIDM2LCAKKyAgICAxMTcsIDE1NiwgMzYsIDExNywgMjE0LCAxMDUsIDM2LCAxMTcsIDIzMiwgMTgyLCAzNiwgMTE3LCAyMzIsIDE5MSwgMzYsIAorICAgIDExNywgMjIyLCAxODIsIDM2LCAxMTcsIDIyOCwgOTgsIDM2LCAxMTcsIDIzNSwgMTUwLCAzNiwgMTE3LCAyMjAsIDEwNiwgCisgICAgMzYsIDExNywgMjE4LCAyMjgsIDM2LCAxMTcsIDIyMiwgOTMsIDM2LCAxMTcsIDI0MiwgNjcsIDM2LCAxMTcsIDIzMywgMjM4LCAKKyAgICAzNiwgMywgMjM1LCAxNiwgMzYsIDMsIDIzNCwgOTgsIDM2LCAzLCAyMzQsIDg5LCAzNiwgMywgMjMzLCAyMjMsIDM2LCAzLCAKKyAgICAyMzMsIDE5NCwgMzYsIDMsIDIzNCwgMTg4LCAzNiwgMywgMjM0LCAxODcsIDM2LCAzLCAyMzQsIDI1MiwgMzYsIDMsIDIzNCwgCisgICAgMzQsIDM2LCAzLCAyMzQsIDE2LCAzNiwgMywgMjM0LCAyMDEsIDM2LCAzLCAyMjksIDgxLCAzNiwgMywgMjI5LCAzMiwgMzYsIAorICAgIDMsIDIyOSwgMjgsIDM2LCAzLCAyMjgsIDI1MywgMzYsIDMsIDIyOCwgMjQ2LCAzNiwgMywgMjI5LCA2OSwgMzYsIDMsIDIyOSwgCisgICAgNjcsIDM2LCAzLCAyMjksIDc4LCAzNiwgMywgMjI5LCA5LCAzNiwgMywgMjI5LCA0LCAzNiwgMywgMjI5LCA3MSwgMzYsIDMsIAorICAgIDI1MSwgNDAsIDM2LCAzLCAyNTAsIDU5LCAzNiwgMywgMjUwLCA0OSwgMzYsIDMsIDI0OSwgMTIwLCAzNiwgMywgMjQ5LCA5MSwgCisgICAgMzYsIDMsIDI1MCwgMTk4LCAzNiwgMywgMjUwLCAxOTAsIDM2LCAzLCAyNTEsIDMwLCAzNiwgMywgMjQ5LCAyNDYsIDM2LCAzLCAKKyAgICAyNDksIDE4MiwgMzYsIDMsIDI1MCwgMjMwLCAzNiwgMywgMjI3LCAxNjgsIDM2LCAzLCAyMjcsIDE1MiwgMzYsIDMsIDIyNywgCisgICAgMTQ3LCAzNiwgMywgMjI3LCAxMzIsIDM2LCAzLCAyMjcsIDEyNSwgMzYsIDMsIDIyNywgMTYwLCAzNiwgMywgMjI3LCAxNTksIAorICAgIDM2LCAzLCAyMjcsIDE2NSwgMzYsIDMsIDIyNywgMTM4LCAzNiwgMywgMjI3LCAxMzYsIDM2LCAzLCAyMjcsIDE2MywgMzYsIAorICAgIDMsIDIxNSwgMTU2LCAzNiwgMywgMjE1LCAxMzYsIDM2LCAzLCAyMTUsIDEzNSwgMzYsIDMsIDIxNSwgMTI0LCAzNiwgMywgCisgICAgMjE1LCAxMjEsIDM2LCAzLCAyMTUsIDE1MiwgMzYsIDMsIDIxNSwgMTUxLCAzNiwgMywgMjE1LCAxNTUsIDM2LCAzLCAyMTUsIAorICAgIDEzNCwgMzYsIDMsIDIxNSwgMTMzLCAzNiwgMywgMjE1LCAxNTQsIDM2LCAzLCAyMjgsIDExNCwgMzYsIDMsIDIyOCwgMTAwLCAKKyAgICAzNiwgMywgMjI4LCA5OSwgMzYsIDMsIDIyOCwgODMsIDM2LCAzLCAyMjgsIDgyLCAzNiwgMywgMjI4LCAxMTAsIDM2LCAzLCAKKyAgICAyMjgsIDEwOSwgMzYsIDMsIDIyOCwgMTEzLCAzNiwgMywgMjI4LCA4NSwgMzYsIDMsIDIyOCwgODQsIDM2LCAzLCAyMjgsIAorICAgIDExMiwgMzYsIDMsIDIxNywgMTAyLCAzNiwgMywgMjE2LCAxMTgsIDM2LCAzLCAyMTYsIDEwNCwgMzYsIDMsIDIxNSwgMTE5LCAKKyAgICAzNiwgMywgMjE1LCA4NSwgMzYsIDMsIDIxNywgMjMsIDM2LCAzLCAyMTcsIDEyLCAzNiwgMywgMjE3LCA4MCwgMzYsIDMsIAorICAgIDExMiwgMzYsIDMsIDIxNiwgMTgsIDM2LCAzLCAyMTcsIDQyLCAzNiwgMywgMjI5LCAyMzAsIDM2LCAzLCAyMjgsIDIzOCwgCisgICAgMzYsIDMsIDIyOCwgMjEzLCAzNiwgMywgMjI3LCAyNDIsIDM2LCAzLCAyMjcsIDE4MywgMzYsIDMsIDIyOSwgMTEyLCAzNiwgCisgICAgMywgMjI5LCAxMDgsIDM2LCAzLCAyMjksIDIxNywgMzYsIDMsIDIyOCwgNzksIDM2LCAzLCAyMjgsIDY5LCAzNiwgMywgMjI5LCAKKyAgICAxOTIsIDM2LCAzLCAyMjYsIDkzLCAzNiwgMywgMjI1LCAxMTEsIDM2LCAzLCAyMjUsIDc0LCAzNiwgMywgMjI0LCAxNTMsIAorICAgIDM2LCAzLCAyMjQsIDEyMiwgMzYsIDMsIDIyNSwgMjI0LCAzNiwgMywgMjI1LCAyMTQsIDM2LCAzLCAyMjYsIDc1LCAzNiwgMywgCisgICAgMjI1LCAxOSwgMzYsIDMsIDIyNCwgMjUyLCAzNiwgMywgMjI1LCAyMzgsIDM2LCAzLCAyMzEsIDI0MiwgMzYsIDMsIDIzMCwgCisgICAgMjM1LCAzNiwgMywgMjMwLCAyMDYsIDM2LCAzLCAyMzAsIDEwNywgMzYsIDMsIDIzMCwgNTksIDM2LCAzLCAyMzEsIDk2LCAKKyAgICAzNiwgMywgMjMxLCA4NSwgMzYsIDMsIDIzMSwgMjA4LCAzNiwgMywgMjMwLCAxNjYsIDM2LCAzLCAyMzAsIDEzNywgMzYsIDMsIAorICAgIDIzMSwgMTQwLCAzNiwgMywgMjExLCAxMDMsIDM2LCAzLCAyMTEsIDgsIDM2LCAzLCAyMTAsIDI1NSwgMzYsIDMsIDIxMCwgCisgICAgMjEyLCAzNiwgMywgMjEwLCAxODEsIDM2LCAzLCAyMTEsIDQ3LCAzNiwgMywgMjExLCA0NCwgMzYsIDMsIDIxMSwgODIsIDM2LCAKKyAgICAzLCAyMTAsIDI0NCwgMzYsIDMsIDIxMCwgMjI5LCAzNiwgMywgMjExLCA1NSwgMzYsIDMsIDIyMywgMTg3LCAzNiwgMywgCisgICAgMjIzLCAzOCwgMzYsIDMsIDIyMiwgMjQyLCAzNiwgMywgMjIyLCAxNDIsIDM2LCAzLCAyMjIsIDExNCwgMzYsIDMsIDIyMywgCisgICAgMTMxLCAzNiwgMywgMjIzLCAxMTEsIDM2LCAzLCAyMjMsIDE2OSwgMzYsIDMsIDIyMiwgMjEzLCAzNiwgMywgMjIyLCAxOTksIAorICAgIDM2LCAzLCAyMjMsIDEzOSwgMzYsIDMsIDIzMywgMTQwLCAzNiwgMywgMjMyLCAyNDcsIDM2LCAzLCAyMzIsIDIzMywgMzYsIAorICAgIDMsIDIzMiwgMTAzLCAzNiwgMywgMjMyLCA3OCwgMzYsIDMsIDIzMywgNjQsIDM2LCAzLCAyMzMsIDU2LCAzNiwgMywgMjMzLCAKKyAgICAxMTUsIDM2LCAzLCAyMzIsIDE2MiwgMzYsIDMsIDIzMiwgMTMzLCAzNiwgMywgMjMzLCA4MCwgMzYsIDMsIDIxNCwgMjYsIAorICAgIDM2LCAzLCAyMTMsIDE3NiwgMzYsIDMsIDIxMywgMTYyLCAzNiwgMywgMjEyLCAxMTYsIDM2LCAzLCAyMTIsIDEwOSwgMzYsIAorICAgIDMsIDIxMywgMjU1LCAzNiwgMywgMjEzLCAyNTAsIDM2LCAzLCAyMTQsIDIzLCAzNiwgMywgMjEzLCAxMzgsIDM2LCAzLCAKKyAgICAyMTMsIDEyNywgMzYsIDMsIDIxNCwgNSwgMzYsIDMsIDIzMiwgMTgwLCAzNiwgMywgMjMyLCAxNzUsIDM2LCAzLCAyMzIsIAorICAgIDE3NCwgMzYsIDMsIDIzMiwgMTcxLCAzNiwgMywgMjMyLCAxNzAsIDM2LCAzLCAyMzIsIDE3NywgMzYsIDMsIDIzMiwgMTc2LCAKKyAgICAzNiwgMywgMjMyLCAxNzksIDM2LCAzLCAyMzIsIDE3MywgMzYsIDMsIDIzMiwgMTcyLCAzNiwgMywgMjMyLCAxNzgsIDM2LCAKKyAgICAzLCAyMzIsIDE4OSwgMzYsIDMsIDIzMiwgMTg0LCAzNiwgMywgMjMyLCAxODMsIDM2LCAzLCAyMzIsIDE2NywgMzYsIDMsIAorICAgIDIzMiwgMTY2LCAzNiwgMywgMjMyLCAxODYsIDM2LCAzLCAyMzIsIDE4NSwgMzYsIDMsIDIzMiwgMTg4LCAzNiwgMywgMjMyLCAKKyAgICAxNjksIDM2LCAzLCAyMzIsIDE2OCwgMzYsIDMsIDIzMiwgMTg3LCAzNiwgMywgMjIyLCAxODAsIDM2LCAzLCAyMjIsIDE2OSwgCisgICAgMzYsIDMsIDIyMiwgMTY4LCAzNiwgMywgMjIyLCAxNjIsIDM2LCAzLCAyMjIsIDE1NSwgMzYsIDMsIDIyMiwgMTc2LCAzNiwgCisgICAgMywgMjIyLCAxNzUsIDM2LCAzLCAyMjIsIDE3OSwgMzYsIDMsIDIyMiwgMTY3LCAzNiwgMywgMjIyLCAxNjYsIDM2LCAzLCAKKyAgICAyMjIsIDE3OCwgMzYsIDMsIDIyOCwgOTYsIDM2LCAzLCAyMjgsIDkxLCAzNiwgMywgMjI4LCA5MCwgMzYsIDMsIDIyOCwgODcsIAorICAgIDM2LCAzLCAyMjgsIDg2LCAzNiwgMywgMjI4LCA5MywgMzYsIDMsIDIyOCwgOTIsIDM2LCAzLCAyMjgsIDk1LCAzNiwgMywgCisgICAgMjI4LCA4OSwgMzYsIDMsIDIyOCwgODgsIDM2LCAzLCAyMjgsIDk0LCAzNiwgMywgMjM1LCAxNDYsIDM2LCAzLCAyMzUsIAorICAgIDExNCwgMzYsIDMsIDIzNSwgMTA3LCAzNiwgMywgMjM1LCA1NywgMzYsIDMsIDIzNSwgMzksIDM2LCAzLCAyMzUsIDEzMiwgCisgICAgMzYsIDMsIDIzNSwgMTMwLCAzNiwgMywgMjM1LCAxNDEsIDM2LCAzLCAyMzUsIDc0LCAzNiwgMywgMjM1LCA2NSwgMzYsIDMsIAorICAgIDIzNSwgMTM1LCAzNiwgMywgMjIwLCAxMDAsIDM2LCAzLCAyMjAsIDM0LCAzNiwgMywgMjIwLCAyOSwgMzYsIDMsIDIxOSwgCisgICAgMjI3LCAzNiwgMywgMjE5LCAyMTIsIDM2LCAzLCAyMjAsIDY1LCAzNiwgMywgMjIwLCA2MywgMzYsIDMsIDIyMCwgOTIsIDM2LCAKKyAgICAzLCAyMjAsIDksIDM2LCAzLCAyMjAsIDMsIDM2LCAzLCAyMjAsIDczLCAzNiwgMywgMjE4LCAyMjQsIDM2LCAzLCAyMTgsIAorICAgIDE5NCwgMzYsIDMsIDIxOCwgMTkwLCAzNiwgMywgMjE4LCAxODEsIDM2LCAzLCAyMTgsIDE3OCwgMzYsIDMsIDIxOCwgMTk5LCAKKyAgICAzNiwgMywgMjE4LCAxOTgsIDM2LCAzLCAyMTgsIDIyMywgMzYsIDMsIDIxOCwgMTg2LCAzNiwgMywgMjE4LCAxODUsIDM2LCAKKyAgICAzLCAyMTgsIDIwMSwgMzYsIDMsIDIyMiwgMzMsIDM2LCAzLCAyMTksIDE5MywgMzYsIDMsIDIxOSwgMTc3LCAzNiwgMywgCisgICAgMjE4LCA4NCwgMzYsIDMsIDIxOCwgNSwgMzYsIDMsIDIyMSwgMTgzLCAzNiwgMywgMjIxLCAxNzIsIDM2LCAzLCAyMjIsIDE5LCAKKyAgICAzNiwgMywgMjE5LCA2MCwgMzYsIDMsIDIxOSwgNDIsIDM2LCAzLCAyMjEsIDIyMSwgMzYsIDMsIDI0MiwgNTMsIDM2LCAzLCAKKyAgICAyNDEsIDE4NywgMzYsIDMsIDI0MSwgMTY4LCAzNiwgMywgMjQwLCAyMjksIDM2LCAzLCAyNDAsIDIwOSwgMzYsIDMsIDI0MSwgCisgICAgMjQ1LCAzNiwgMywgMjQxLCAyMjcsIDM2LCAzLCAyNDIsIDQzLCAzNiwgMywgMjQxLCA3NSwgMzYsIDMsIDI0MSwgNjAsIDM2LCAKKyAgICAzLCAyNDEsIDI1MywgMzYsIDMsIDIzMywgMjM3LCAzNiwgMywgMjMzLCAyMzYsIDM2LCAzLCAyMzMsIDIzMSwgMzYsIDMsIAorICAgIDIzMywgMjMwLCAzNiwgMywgMjMzLCAyMjcsIDM2LCAzLCAyMzMsIDIyNiwgMzYsIDMsIDIzMywgMjMzLCAzNiwgMywgMjMzLCAKKyAgICAyMzIsIDM2LCAzLCAyMzMsIDIzNSwgMzYsIDMsIDIzMywgMjI5LCAzNiwgMywgMjMzLCAyMjgsIDM2LCAzLCAyMzMsIDIzNCwgCisgICAgMzYsIDMsIDIxOSwgMjMzLCAxNzUsIDExNywgNSwgMjExLCA2OCwgMTc1LCAxMTcsIDUsIDIyMywgMTU4LCAxNzUsIDExNywgCisgICAgNSwgMjIzLCA4MSwgOTgsIDEsIDIxNSwgMjgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAxNzYsIDcwLCAxMTcsIDUsIDI0OSwgCisgICAgMjQxLCAyMzQsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzNCwgMzQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIAorICAgIDExMSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyOSwgOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDI1MSwgNDEsIDcwLCAKKyAgICAxMTcsIDUsIDI0OSwgMjQxLCAyNTAsIDE2NSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDI0OSwgMjQ2LCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjUwLCA5NCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyNywgMTM4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgCisgICAgMjQ4LCAyMjksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTUsIDE0NSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDI0NywgMTUzLCAKKyAgICA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDAsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAxOTgsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyMTcsIDEwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMjA5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgCisgICAgMTEyLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE2LCAxNTcsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjgsIDc5LCA3MCwgCisgICAgMTE3LCA1LCAyNDksIDI0MSwgMjUyLCAxOTksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjUsIDE1MCwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDIyNSwgMTksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjUsIDEyNCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDIzMCwgMTY2LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjEwLCAyNDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjIsIDIxMywgCisgICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMiwgMTYyLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjEzLCAxMzgsIDcwLCAxMTcsIAorICAgIDUsIDI0OSwgMjQxLCAyMjAsIDEwNCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxOCwgMjI1LCA3MCwgMTE3LCA1LCAyNDksIAorICAgIDI0MSwgMjA2LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTYyLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjMzLCAxNDEsIDcwLCAKKyAgICAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgOTEsIDcwLCAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDMzLCA3MCwgCisgICAgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAxMDIsIDcwLCAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjIsIAorICAgIDk1LCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCA3MiwgNzAsIDI1LCA1LCAyMjYsIDIwOCwgNzAsIDI1LCAKKyAgICA1LCAyNTUsIDQzLCAxNDEsIDEsIDI1MiwgNywgMjI5LCA4MiwgMTQxLCAxLCAyNTIsIDcsIDIyOSwgMzIsIDE0MSwgMSwgCisgICAgMjUyLCA3LCAyMjgsIDI1MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgNjksIDE0MSwgMSwgMjUyLCA3LCAyMjksIDksIDU2LCAxLCAKKyAgICAyNTIsIDcsIDIyOSwgODIsIDU2LCAxLCAyNTIsIDcsIDIyOSwgMzIsIDU2LCAxLCAyNTIsIDcsIDIyOCwgMjUzLCA1NiwgMSwgCisgICAgMjUyLCA3LCAyMjksIDY5LCA1NiwgMSwgMjUyLCA3LCAyMjksIDksIDU2LCAxLCAyNTQsIDIwMywgMjUwLCAxOTgsIDU2LCAxLCAKKyAgICAyNTQsIDIwMywgMjE1LCAxMTksIDU2LCAxLCAyNTQsIDIwMywgMTEyLCA1NiwgMSwgMjU0LCAyMDMsIDIyNiwgMTA5LCA1OCwgCisgICAgMSwgMjQ1LCAyOCwgMjQ1LCAyNywgMjQ5LCAxOTAsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMjQ1LCAyOCwgMjQ5LCAKKyAgICAxOTAsIDEzOCwgMTMwLCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tfb2Zmc2V0MVtdID0gewpAQCAtMTQ0MzEsMjQ1MSArMTQ0NDgsMjQ1MSBAQAogICAgIDg2NDcsIDAsIDAsIDAsIDAsIDAsIDg2NTEsIDg2NTgsIDg2NjYsIDg2NzMsIDg2NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDg2ODMsIDg2ODYsIDg2OTAsIDg2OTUsIDg2OTksIDAsIDg3MDMsIDg3MDksIDg3MTUsIDg3MTgsIAogICAgIDg3MjUsIDg3MzQsIDg3MzcsIDg3NDAsIDg3NDUsIDg3NTEsIDg3NTUsIDg3NjMsIDg3NjksIDg3NzUsIDg3ODMsIDg3ODcsIAotICAgIDg3OTIsIDg4MDMsIDg4MDgsIDg4MTIsIDg4MTYsIDg4MjAsIDAsIDAsIDg4MjMsIDg4MzAsIDg4MzQsIDg4NDAsIDg4NDQsIAotICAgIDg4NTEsIDg4NTcsIDg4NjQsIDg4NzAsIDg4NzYsIDg4ODAsIDg4ODQsIDg4OTAsIDg4OTQsIDg4OTgsIDg5MDIsIDg5MDYsIAotICAgIDg5MTAsIDg5MTQsIDg5MTgsIDg5MjIsIDg5MjYsIDg5MzAsIDg5MzQsIDg5MzgsIDg5NDIsIDg5NDYsIDg5NTAsIDg5NTQsIAotICAgIDg5NTgsIDg5NjYsIDg5NzQsIDg5ODQsIDg5OTMsIDkwMDIsIDkwMDUsIDkwMDksIDkwMTMsIDkwMTcsIDkwMjEsIDkwMjUsIAotICAgIDkwMjksIDkwMzMsIDkwMzcsIDkwNDIsIDkwNDYsIDkwNDksIDkwNTIsIDkwNTUsIDkwNTgsIDkwNjEsIDkwNjQsIDkwNjcsIAotICAgIDkwNzAsIDkwNzQsIDkwNzcsIDkwODAsIDkwODUsIDkwOTAsIDkwOTYsIDkwOTksIDkxMDYsIDkxMTUsIDkxMjAsIDkxMjUsIAotICAgIDkxMzIsIDkxMzcsIDkxNDIsIDkxNDYsIDkxNTAsIDkxNTQsIDkxNTgsIDkxNjIsIDkxNjYsIDkxNzAsIDkxNzQsIDkxNzgsIAotICAgIDkxODIsIDkxODcsIDkxOTIsIDkxOTksIDkyMDUsIDkyMTEsIDkyMTcsIDkyMjIsIDkyMzAsIDkyMzgsIDkyNDMsIDkyNDksIAotICAgIDkyNTUsIDkyNjEsIDkyNjcsIDkyNzEsIDkyNzUsIDkyNzksIDkyODYsIDkyOTYsIDkzMDAsIDkzMDQsIDkzMDgsIDkzMTQsIAotICAgIDkzMjIsIDkzMjYsIDkzMzAsIDkzMzcsIDkzNDEsIDkzNDUsIDkzNDksIDkzNTYsIDkzNjMsIDkzNzUsIDkzNzksIDkzODMsIAotICAgIDkzODcsIDkzOTcsIDk0MDYsIDk0MTAsIDk0MTgsIDk0MjUsIDk0MzIsIDk0NDEsIDk0NTIsIDk0NjAsIDk0NjQsIDk0NzMsIAotICAgIDk0ODQsIDk0OTIsIDk1MDUsIDk1MTMsIDk1MjEsIDk1MjksIDk1MzcsIDk1NDMsIDk1NTIsIDk1NTksIDk1NjMsIDk1NzEsIAotICAgIDk1NzUsIDk1ODIsIDk1OTAsIDk1OTQsIDk2MDAsIDk2MDcsIDk2MTQsIDk2MTgsIDk2MjYsIDk2MzAsIDk2MzcsIDk2NDEsIAotICAgIDk2NDksIDk2NTMsIDk2NjEsIDk2NjksIDk2NzYsIDk2ODQsIDk2OTIsIDk2OTksIDk3MDUsIDk3MDksIDk3MTYsIDk3MjQsIAotICAgIDk3MzAsIDk3MzcsIDk3NDQsIDk3NTAsIDk3NTksIDk3NjcsIDk3NzQsIDk3ODAsIDk3ODQsIDk3ODcsIDk3OTEsIDk3OTcsIAotICAgIDk4MDUsIDk4MDksIDk4MTUsIDk4MjEsIDk4MjgsIDk4MzUsIDk4MzgsIDk4NDUsIDk4NTAsIDk4NTgsIDk4NjMsIDk4NjcsIAotICAgIDk4ODAsIDk4OTMsIDk4OTksIDk5MDYsIDk5MTEsIDk5MTcsIDk5MjIsIDk5MjgsIDk5MzgsIDk5NDUsIDk5NTQsIDk5NjQsIAotICAgIDk5NzAsIDk5NzUsIDk5ODAsIDk5ODQsIDk5ODgsIDk5OTMsIDk5OTgsIDEwMDA0LCAxMDAxMiwgMTAwMjAsIDEwMDMxLCAKLSAgICAxMDAzNiwgMTAwNDUsIDEwMDU0LCAxMDA2MSwgMTAwNjcsIDEwMDczLCAxMDA3OSwgMTAwODUsIDEwMDkxLCAxMDA5NywgCi0gICAgMTAxMDMsIDEwMTA5LCAxMDExNSwgMTAxMjIsIDEwMTI5LCAxMDEzNiwgMTAxNDIsIDEwMTUwLCAxMDE1OSwgMTAxNjUsIAotICAgIDEwMTcyLCAxMDE3OSwgMTAxODQsIDEwMTg5LCAxMDE5MywgMTAyMDAsIDEwMjA3LCAxMDIxNiwgMTAyMjUsIDEwMjI4LCAKLSAgICAxMDIzMywgMTAyMzgsIDAsIDEwMjQzLCAxMDI0NywgMTAyNTEsIDEwMjU3LCAxMDI2MSwgMTAyNjUsIDEwMjcxLCAxMDI3NSwgCi0gICAgMTAyODMsIDEwMjg3LCAxMDI5MSwgMTAyOTUsIDEwMjk5LCAxMDMwMywgMTAzMDksIDEwMzEzLCAxMDMxOSwgMTAzMjMsIAotICAgIDEwMzI3LCAxMDMzMSwgMTAzMzUsIDEwMzM5LCAxMDM0NCwgMTAzNDcsIDEwMzUxLCAxMDM1NywgMTAzNjEsIDEwMzY1LCAKLSAgICAxMDM2OSwgMTAzNzMsIDEwMzc3LCAxMDM4MywgMTAzODksIDEwMzk1LCAxMDM5OSwgMTA0MDMsIDEwNDA4LCAxMDQxMiwgCi0gICAgMTA0MTYsIDEwNDIxLCAxMDQyNSwgMTA0MjksIDEwNDM2LCAxMDQ0MywgMTA0NDcsIDEwNDUxLCAxMDQ1NiwgMTA0NjAsIAotICAgIDEwNDY0LCAxMDQ2NywgMTA0NzIsIDEwNDc1LCAxMDQ3OCwgMTA0ODMsIDEwNDg4LCAxMDQ5MiwgMTA0OTYsIDEwNTAyLCAKLSAgICAxMDUwOCwgMTA1MTEsIDAsIDAsIDEwNTE0LCAxMDUyMCwgMTA1MjYsIDEwNTMyLCAxMDU0MiwgMTA1NTQsIDEwNTY2LCAKLSAgICAxMDU4MywgMTA1OTUsIDEwNjA2LCAxMDYxNCwgMTA2MjEsIDEwNjMyLCAxMDY0NywgMTA2NTgsIDEwNjY0LCAxMDY3MywgCi0gICAgMTA2ODEsIDEwNjkzLCAxMDcwMywgMTA3MTEsIDEwNzIzLCAxMDczMCwgMTA3MzgsIDEwNzUwLCAxMDc1NiwgMTA3NjIsIAotICAgIDEwNzcwLCAxMDc3OCwgMTA3ODYsIDEwNzkyLCAxMDgwMiwgMTA4MDksIDEwODE5LCAxMDgyOSwgMTA4NDIsIDEwODU2LCAKLSAgICAxMDg3MCwgMTA4ODAsIDEwODkxLCAxMDkwMiwgMTA5MTUsIDEwOTI4LCAxMDk0MiwgMTA5NTQsIDEwOTY2LCAxMDk3OSwgCi0gICAgMTA5OTIsIDExMDA0LCAxMTAxNywgMTEwMjYsIDExMDM0LCAxMTAzOSwgMTEwNDQsIDExMDQ5LCAxMTA1NCwgMTEwNTksIAotICAgIDExMDY0LCAxMTA2OSwgMTEwNzQsIDExMDc5LCAxMTA4NCwgMTEwODksIDExMDk0LCAxMTA5OSwgMTExMDQsIDExMTA5LCAKLSAgICAxMTExNCwgMTExMTksIDExMTI0LCAxMTEyOSwgMTExMzQsIDExMTM5LCAxMTE0NCwgMTExNDksIDExMTU0LCAxMTE1OSwgCi0gICAgMTExNjQsIDExMTY5LCAxMTE3NCwgMTExNzksIDExMTg0LCAxMTE4OSwgMTExOTQsIDExMTk4LCAxMTIwMywgMTEyMDgsIAotICAgIDExMjEzLCAxMTIxOCwgMTEyMjMsIDExMjI3LCAxMTIzMSwgMTEyMzUsIDExMjM5LCAxMTI0MywgMTEyNDcsIDExMjUxLCAKLSAgICAxMTI1NSwgMTEyNTksIDExMjYzLCAxMTI2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTEyNzIsIDExMjc3LCAxMTI4MSwgMTEyODUsIDExMjg5LCAxMTI5MywgMTEyOTcsIDExMzAxLCAxMTMwNSwgMTEzMDksIAotICAgIDExMzEzLCAxMTMxNywgMTEzMjIsIDExMzI2LCAxMTMzMCwgMTEzMzQsIDExMzM5LCAxMTM0MywgMTEzNDgsIDExMzUzLCAKLSAgICAxMTM1OCwgMTEzNjIsIDExMzY3LCAxMTM3MiwgMTEzNzcsIDExMzgyLCAxMTM4NiwgMTEzOTEsIDExMzk1LCAxMTQwMCwgCi0gICAgMTE0MDUsIDExNDA5LCAxMTQxNCwgMTE0MjEsIDExNDI1LCAxMTQzMCwgMTE0MzQsIDExNDM4LCAxMTQ0MywgMTE0NDcsIAotICAgIDExNDU0LCAxMTQ2MSwgMTE0NjgsIDExNDc0LCAxMTQ4MiwgMTE0OTAsIDExNDk5LCAxMTUwNywgMTE1MTQsIDExNTIxLCAKLSAgICAxMTUyOSwgMTE1MzUsIDExNTQxLCAxMTU0NywgMTE1NTMsIDExNTYwLCAxMTU2NSwgMTE1NjksIDExNTc0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMTU3OCwgMTE1ODMsIDExNTg4LCAxMTU5MywgMTE1OTgsIDExNjAzLCAxMTYwOCwgMTE2MTMsIDExNjE4LCAKLSAgICAxMTYyMywgMTE2MjgsIDExNjMzLCAxMTYzOCwgMTE2NDMsIDExNjQ4LCAxMTY1MywgMTE2NTgsIDExNjYzLCAxMTY2OCwgCi0gICAgMTE2NzMsIDExNjc4LCAxMTY4MywgMTE2ODgsIDExNjkzLCAxMTY5OCwgMTE3MDMsIDExNzA4LCAxMTcxNiwgMTE3MjMsIAotICAgIDExNzI5LCAxMTczNCwgMTE3NDIsIDExNzQ5LCAxMTc1NSwgMTE3NjIsIDExNzY4LCAxMTc3MywgMTE3ODAsIDExNzg3LCAKLSAgICAxMTc5MywgMTE3OTgsIDExODAzLCAxMTgwOSwgMTE4MTQsIDExODE5LCAxMTgyNSwgMCwgMCwgMTE4MzAsIDExODM2LCAKLSAgICAxMTg0MiwgMTE4NDgsIDExODU0LCAxMTg2MCwgMTE4NjYsIDExODcxLCAxMTg3OSwgMTE4ODUsIDExODkxLCAxMTg5NywgCi0gICAgMTE5MDMsIDExOTA5LCAxMTkxNywgMCwgMTE5MjMsIDExOTI4LCAxMTkzMywgMTE5MzgsIDExOTQzLCAxMTk0OCwgMTE5NTMsIAotICAgIDExOTU4LCAxMTk2MywgMTE5NjgsIDExOTczLCAxMTk3OCwgMTE5ODMsIDExOTg4LCAxMTk5MywgMTE5OTgsIDEyMDAzLCAKLSAgICAxMjAwOCwgMTIwMTMsIDEyMDE4LCAxMjAyMywgMTIwMjgsIDEyMDMzLCAxMjAzOCwgMTIwNDMsIDEyMDQ4LCAxMjA1MywgCi0gICAgMTIwNTgsIDAsIDAsIDEyMDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4NzkyLCA4ODAzLCA4ODA4LCA4ODEyLCA4ODE2LCA4ODIwLCA4ODIzLCAwLCA4ODI2LCA4ODMzLCA4ODM3LCA4ODQzLCAKKyAgICA4ODQ3LCA4ODU0LCA4ODYwLCA4ODY3LCA4ODczLCA4ODc5LCA4ODgzLCA4ODg3LCA4ODkzLCA4ODk3LCA4OTAxLCA4OTA1LCAKKyAgICA4OTA5LCA4OTEzLCA4OTE3LCA4OTIxLCA4OTI1LCA4OTI5LCA4OTMzLCA4OTM3LCA4OTQxLCA4OTQ1LCA4OTQ5LCA4OTUzLCAKKyAgICA4OTU3LCA4OTYxLCA4OTY5LCA4OTc3LCA4OTg3LCA4OTk2LCA5MDA1LCA5MDA4LCA5MDEyLCA5MDE2LCA5MDIwLCA5MDI0LCAKKyAgICA5MDI4LCA5MDMyLCA5MDM2LCA5MDQwLCA5MDQ1LCA5MDQ5LCA5MDUyLCA5MDU1LCA5MDU4LCA5MDYxLCA5MDY0LCA5MDY3LCAKKyAgICA5MDcwLCA5MDczLCA5MDc3LCA5MDgwLCA5MDgzLCA5MDg4LCA5MDkzLCA5MDk5LCA5MTAyLCA5MTA5LCA5MTE4LCA5MTIzLCAKKyAgICA5MTI4LCA5MTM1LCA5MTQwLCA5MTQ1LCA5MTQ5LCA5MTUzLCA5MTU3LCA5MTYxLCA5MTY1LCA5MTY5LCA5MTczLCA5MTc3LCAKKyAgICA5MTgxLCA5MTg1LCA5MTkwLCA5MTk1LCA5MjAyLCA5MjA4LCA5MjE0LCA5MjIwLCA5MjI1LCA5MjMzLCA5MjQxLCA5MjQ2LCAKKyAgICA5MjUyLCA5MjU4LCA5MjY0LCA5MjcwLCA5Mjc0LCA5Mjc4LCA5MjgyLCA5Mjg5LCA5Mjk5LCA5MzAzLCA5MzA3LCA5MzExLCAKKyAgICA5MzE3LCA5MzI1LCA5MzI5LCA5MzMzLCA5MzQwLCA5MzQ0LCA5MzQ4LCA5MzUyLCA5MzU5LCA5MzY2LCA5Mzc4LCA5MzgyLCAKKyAgICA5Mzg2LCA5MzkwLCA5NDAwLCA5NDA5LCA5NDEzLCA5NDIxLCA5NDI4LCA5NDM1LCA5NDQ0LCA5NDU1LCA5NDYzLCA5NDY3LCAKKyAgICA5NDc2LCA5NDg3LCA5NDk1LCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTQwLCA5NTQ2LCA5NTU1LCA5NTYyLCA5NTY2LCAKKyAgICA5NTc0LCA5NTc4LCA5NTg1LCA5NTkzLCA5NTk3LCA5NjAzLCA5NjEwLCA5NjE3LCA5NjIxLCA5NjI5LCA5NjMzLCA5NjQwLCAKKyAgICA5NjQ0LCA5NjUyLCA5NjU2LCA5NjY0LCA5NjcyLCA5Njc5LCA5Njg3LCA5Njk1LCA5NzAyLCA5NzA4LCA5NzEyLCA5NzE5LCAKKyAgICA5NzI3LCA5NzMzLCA5NzQwLCA5NzQ3LCA5NzUzLCA5NzYyLCA5NzcwLCA5Nzc3LCA5NzgzLCA5Nzg3LCA5NzkwLCA5Nzk0LCAKKyAgICA5ODAwLCA5ODA4LCA5ODEyLCA5ODE4LCA5ODI0LCA5ODMxLCA5ODM4LCA5ODQxLCA5ODQ4LCA5ODUzLCA5ODYxLCA5ODY2LCAKKyAgICA5ODcwLCA5ODgzLCA5ODk2LCA5OTAyLCA5OTA5LCA5OTE0LCA5OTIwLCA5OTI1LCA5OTMxLCA5OTQxLCA5OTQ4LCA5OTU3LCAKKyAgICA5OTY3LCA5OTczLCA5OTc4LCA5OTgzLCA5OTg3LCA5OTkxLCA5OTk2LCAxMDAwMSwgMTAwMDcsIDEwMDE1LCAxMDAyMywgCisgICAgMTAwMzQsIDEwMDM5LCAxMDA0OCwgMTAwNTcsIDEwMDY0LCAxMDA3MCwgMTAwNzYsIDEwMDgyLCAxMDA4OCwgMTAwOTQsIAorICAgIDEwMTAwLCAxMDEwNiwgMTAxMTIsIDEwMTE4LCAxMDEyNSwgMTAxMzIsIDEwMTM5LCAxMDE0NSwgMTAxNTMsIDEwMTYyLCAKKyAgICAxMDE2OCwgMTAxNzUsIDEwMTgyLCAxMDE4NywgMTAxOTIsIDEwMTk2LCAxMDIwMywgMTAyMTAsIDEwMjE5LCAxMDIyOCwgCisgICAgMTAyMzEsIDEwMjM2LCAxMDI0MSwgMCwgMTAyNDYsIDEwMjUwLCAxMDI1NCwgMTAyNjAsIDEwMjY0LCAxMDI2OCwgMTAyNzQsIAorICAgIDEwMjc4LCAxMDI4NiwgMTAyOTAsIDEwMjk0LCAxMDI5OCwgMTAzMDIsIDEwMzA2LCAxMDMxMiwgMTAzMTYsIDEwMzIyLCAKKyAgICAxMDMyNiwgMTAzMzAsIDEwMzM0LCAxMDMzOCwgMTAzNDIsIDEwMzQ3LCAxMDM1MCwgMTAzNTQsIDEwMzYwLCAxMDM2NCwgCisgICAgMTAzNjgsIDEwMzcyLCAxMDM3NiwgMTAzODAsIDEwMzg2LCAxMDM5MiwgMTAzOTgsIDEwNDAyLCAxMDQwNiwgMTA0MTEsIAorICAgIDEwNDE1LCAxMDQxOSwgMTA0MjQsIDEwNDI4LCAxMDQzMiwgMTA0MzksIDEwNDQ2LCAxMDQ1MCwgMTA0NTQsIDEwNDU5LCAKKyAgICAxMDQ2MywgMTA0NjcsIDEwNDcwLCAxMDQ3NSwgMTA0NzgsIDEwNDgxLCAxMDQ4NiwgMTA0OTEsIDEwNDk1LCAxMDQ5OSwgCisgICAgMTA1MDUsIDEwNTExLCAxMDUxNCwgMCwgMCwgMTA1MTcsIDEwNTIzLCAxMDUyOSwgMTA1MzUsIDEwNTQ1LCAxMDU1NywgCisgICAgMTA1NjksIDEwNTg2LCAxMDU5OCwgMTA2MDksIDEwNjE3LCAxMDYyNCwgMTA2MzUsIDEwNjUwLCAxMDY2MSwgMTA2NjcsIAorICAgIDEwNjc2LCAxMDY4NCwgMTA2OTYsIDEwNzA2LCAxMDcxNCwgMTA3MjYsIDEwNzMzLCAxMDc0MSwgMTA3NTMsIDEwNzU5LCAKKyAgICAxMDc2NSwgMTA3NzMsIDEwNzgxLCAxMDc4OSwgMTA3OTUsIDEwODA1LCAxMDgxMiwgMTA4MjIsIDEwODMyLCAxMDg0NSwgCisgICAgMTA4NTksIDEwODczLCAxMDg4MywgMTA4OTQsIDEwOTA1LCAxMDkxOCwgMTA5MzEsIDEwOTQ1LCAxMDk1NywgMTA5NjksIAorICAgIDEwOTgyLCAxMDk5NSwgMTEwMDcsIDExMDIwLCAxMTAyOSwgMTEwMzcsIDExMDQyLCAxMTA0NywgMTEwNTIsIDExMDU3LCAKKyAgICAxMTA2MiwgMTEwNjcsIDExMDcyLCAxMTA3NywgMTEwODIsIDExMDg3LCAxMTA5MiwgMTEwOTcsIDExMTAyLCAxMTEwNywgCisgICAgMTExMTIsIDExMTE3LCAxMTEyMiwgMTExMjcsIDExMTMyLCAxMTEzNywgMTExNDIsIDExMTQ3LCAxMTE1MiwgMTExNTcsIAorICAgIDExMTYyLCAxMTE2NywgMTExNzIsIDExMTc3LCAxMTE4MiwgMTExODcsIDExMTkyLCAxMTE5NywgMTEyMDEsIDExMjA2LCAKKyAgICAxMTIxMSwgMTEyMTYsIDExMjIxLCAxMTIyNiwgMTEyMzAsIDExMjM0LCAxMTIzOCwgMTEyNDIsIDExMjQ2LCAxMTI1MCwgCisgICAgMTEyNTQsIDExMjU4LCAxMTI2MiwgMTEyNjYsIDExMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMTI3NSwgMTEyODAsIDExMjg0LCAxMTI4OCwgMTEyOTIsIDExMjk2LCAxMTMwMCwgMTEzMDQsIDExMzA4LCAxMTMxMiwgCisgICAgMTEzMTYsIDExMzIwLCAxMTMyNSwgMTEzMjksIDExMzMzLCAxMTMzNywgMTEzNDIsIDExMzQ2LCAxMTM1MSwgMTEzNTYsIAorICAgIDExMzYxLCAxMTM2NSwgMTEzNzAsIDExMzc1LCAxMTM4MCwgMTEzODUsIDExMzg5LCAxMTM5NCwgMTEzOTgsIDExNDAzLCAKKyAgICAxMTQwOCwgMTE0MTIsIDExNDE3LCAxMTQyNCwgMTE0MjgsIDExNDMzLCAxMTQzNywgMTE0NDEsIDExNDQ2LCAxMTQ1MCwgCisgICAgMTE0NTcsIDExNDY0LCAxMTQ3MSwgMTE0NzcsIDExNDg1LCAxMTQ5MywgMTE1MDIsIDExNTEwLCAxMTUxNywgMTE1MjQsIAorICAgIDExNTMyLCAxMTUzOCwgMTE1NDQsIDExNTUwLCAxMTU1NiwgMTE1NjMsIDExNTY4LCAxMTU3MiwgMTE1NzcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDExNTgxLCAxMTU4NiwgMTE1OTEsIDExNTk2LCAxMTYwMSwgMTE2MDYsIDExNjExLCAxMTYxNiwgMTE2MjEsIAorICAgIDExNjI2LCAxMTYzMSwgMTE2MzYsIDExNjQxLCAxMTY0NiwgMTE2NTEsIDExNjU2LCAxMTY2MSwgMTE2NjYsIDExNjcxLCAKKyAgICAxMTY3NiwgMTE2ODEsIDExNjg2LCAxMTY5MSwgMTE2OTYsIDExNzAxLCAxMTcwNiwgMTE3MTEsIDExNzE5LCAxMTcyNiwgCisgICAgMTE3MzIsIDExNzM3LCAxMTc0NSwgMTE3NTIsIDExNzU4LCAxMTc2NSwgMTE3NzEsIDExNzc2LCAxMTc4MywgMTE3OTAsIAorICAgIDExNzk2LCAxMTgwMSwgMTE4MDYsIDExODEyLCAxMTgxNywgMTE4MjIsIDExODI4LCAwLCAwLCAxMTgzMywgMTE4MzksIAorICAgIDExODQ1LCAxMTg1MSwgMTE4NTcsIDExODYzLCAxMTg2OSwgMTE4NzQsIDExODgyLCAxMTg4OCwgMTE4OTQsIDExOTAwLCAKKyAgICAxMTkwNiwgMTE5MTIsIDExOTIwLCAwLCAxMTkyNiwgMTE5MzEsIDExOTM2LCAxMTk0MSwgMTE5NDYsIDExOTUxLCAxMTk1NiwgCisgICAgMTE5NjEsIDExOTY2LCAxMTk3MSwgMTE5NzYsIDExOTgxLCAxMTk4NiwgMTE5OTEsIDExOTk2LCAxMjAwMSwgMTIwMDYsIAorICAgIDEyMDExLCAxMjAxNiwgMTIwMjEsIDEyMDI2LCAxMjAzMSwgMTIwMzYsIDEyMDQxLCAxMjA0NiwgMTIwNTEsIDEyMDU2LCAKKyAgICAxMjA2MSwgMCwgMCwgMTIwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMDY3LCAwLCAxMjA3NiwgMTIwODMsIDEyMDkxLCAxMjEwMywgMTIxMTAsIDEyMTE3LCAxMjEyNCwgMTIxMzUsIDEyMTQ2LCAKLSAgICAxMjE1MywgMTIxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyMDcwLCAwLCAxMjA3OSwgMTIwODYsIDEyMDk0LCAxMjEwNiwgMTIxMTMsIDEyMTIwLCAxMjEyNywgMTIxMzgsIDEyMTQ5LCAKKyAgICAxMjE1NiwgMTIxNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTY3LCAxMjE3MiwgMTIxNzcsIDEyMTgyLCAxMjE4NywgCi0gICAgMTIxOTIsIDEyMTk3LCAxMjIwMiwgMTIyMDcsIDEyMjEyLCAxMjIxNywgMTIyMjIsIDEyMjI3LCAxMjIzMSwgMTIyMzUsIAotICAgIDEyMjM5LCAxMjI0NCwgMTIyNTAsIDEyMjU2LCAxMjI2MiwgMTIyNjcsIDEyMjcyLCAxMjI3NywgMTIyODIsIDEyMjg4LCAKLSAgICAxMjI5NywgMTIzMDUsIDAsIDEyMzExLCAxMjMxNywgMTIzMjEsIDEyMzI1LCAxMjMyOSwgMTIzMzQsIDEyMzM3LCAxMjM0MSwgCi0gICAgMTIzNDQsIDEyMzQ4LCAxMjM1MSwgMTIzNTUsIDEyMzU5LCAxMjM2MywgMTIzNjgsIDEyMzczLCAxMjM3NiwgMTIzODAsIAotICAgIDEyMzg1LCAxMjM5MCwgMTIzOTMsIDEyMzk3LCAxMjQwMCwgMTI0MDQsIDEyNDA4LCAxMjQxMiwgMTI0MTYsIDEyNDIwLCAKLSAgICAxMjQyNCwgMTI0MjgsIDEyNDMyLCAxMjQzNiwgMTI0NDAsIDEyNDQ0LCAxMjQ0OCwgMTI0NTIsIDEyNDU2LCAxMjQ2MCwgCi0gICAgMTI0NjQsIDEyNDY4LCAxMjQ3MiwgMTI0NzUsIDEyNDc5LCAxMjQ4MiwgMTI0ODYsIDEyNDkwLCAxMjQ5NCwgMTI0OTcsIAotICAgIDEyNTAwLCAxMjUwMywgMTI1MDcsIDEyNTExLCAxMjUxNSwgMTI1MTksIDEyNTIzLCAxMjUyNywgMTI1MzEsIDEyNTM0LCAKLSAgICAxMjUzNywgMTI1NDIsIDEyNTQ3LCAxMjU1MSwgMTI1NTUsIDEyNTYwLCAxMjU2NCwgMTI1NjksIDEyNTczLCAxMjU3OCwgCi0gICAgMTI1ODMsIDEyNTg5LCAxMjU5NSwgMTI2MDEsIDEyNjA1LCAxMjYxMCwgMTI2MTYsIDEyNjIyLCAxMjYyNiwgMTI2MzEsIAotICAgIDEyNjM1LCAxMjY0MSwgMTI2NDYsIDEyNjQ5LCAxMjY1NSwgMTI2NjEsIDEyNjY2LCAxMjY3MSwgMTI2NzgsIDEyNjgzLCAKLSAgICAxMjY4OCwgMTI2OTIsIDEyNjk2LCAxMjcwMCwgMTI3MDQsIDEyNzA4LCAxMjcxMiwgMTI3MTYsIDEyNzIwLCAxMjcyNSwgCi0gICAgMTI3MzAsIDEyNzM1LCAxMjc0MSwgMTI3NDQsIDEyNzQ4LCAxMjc1MiwgMTI3NTUsIDEyNzU4LCAxMjc2MSwgMTI3NjQsIAotICAgIDEyNzY3LCAxMjc3MCwgMTI3NzMsIDEyNzc2LCAxMjc3OSwgMTI3ODMsIDEyNzkwLCAxMjc5NSwgMTI3OTksIDEyODAzLCAKLSAgICAxMjgwNywgMTI4MTEsIDAsIDEyODE1LCAxMjgxOSwgMTI4MjMsIDEyODI3LCAxMjgzMSwgMTI4MzcsIDEyODQxLCAwLCAKLSAgICAxMjg0NSwgMTI4NDksIDEyODUzLCAwLCAxMjg1NywgMTI4NjAsIDEyODY0LCAxMjg2NywgMTI4NzEsIDEyODc0LCAxMjg3OCwgCi0gICAgMTI4ODIsIDAsIDAsIDEyODg2LCAxMjg4OSwgMCwgMCwgMTI4OTMsIDEyODk2LCAxMjkwMCwgMTI5MDMsIDEyOTA3LCAKLSAgICAxMjkxMSwgMTI5MTUsIDEyOTE5LCAxMjkyMywgMTI5MjcsIDEyOTMxLCAxMjkzNSwgMTI5MzksIDEyOTQzLCAxMjk0NywgCi0gICAgMTI5NTEsIDEyOTU1LCAxMjk1OSwgMTI5NjMsIDEyOTY3LCAxMjk3MSwgMTI5NzUsIDAsIDEyOTc4LCAxMjk4MSwgMTI5ODUsIAotICAgIDEyOTg5LCAxMjk5MywgMTI5OTYsIDEyOTk5LCAwLCAxMzAwMiwgMCwgMCwgMCwgMTMwMDYsIDEzMDEwLCAxMzAxNCwgCi0gICAgMTMwMTcsIDAsIDAsIDEzMDIwLCAxMzAyNCwgMTMwMjgsIDEzMDMzLCAxMzAzNywgMTMwNDIsIDEzMDQ2LCAxMzA1MSwgCi0gICAgMTMwNTYsIDAsIDAsIDEzMDYyLCAxMzA2NiwgMCwgMCwgMTMwNzEsIDEzMDc1LCAxMzA4MCwgMTMwODQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEzMDkwLCAwLCAwLCAwLCAwLCAxMzA5NiwgMTMxMDAsIDAsIDEzMTA0LCAxMzEwOCwgMTMxMTMsIAotICAgIDEzMTE4LCAxMzEyMywgMCwgMCwgMTMxMjksIDEzMTMzLCAxMzEzNiwgMTMxMzksIDEzMTQyLCAxMzE0NSwgMTMxNDgsIAotICAgIDEzMTUxLCAxMzE1NCwgMTMxNTcsIDEzMTYwLCAxMzE2OSwgMTMxNzgsIDEzMTgyLCAxMzE4NiwgMTMxOTIsIDEzMTk4LCAKLSAgICAxMzIwNCwgMTMyMTAsIDEzMjI0LCAxMzIzMSwgMTMyMzQsIDAsIDAsIDAsIDAsIDAsIDEzMjM4LCAxMzI0NCwgMTMyNDgsIDAsIAotICAgIDEzMjUyLCAxMzI1NSwgMTMyNTksIDEzMjYyLCAxMzI2NiwgMTMyNjksIDAsIDAsIDAsIDAsIDEzMjczLCAxMzI3NywgMCwgMCwgCi0gICAgMTMyODEsIDEzMjg1LCAxMzI4OSwgMTMyOTIsIDEzMjk2LCAxMzMwMCwgMTMzMDQsIDEzMzA4LCAxMzMxMiwgMTMzMTYsIAotICAgIDEzMzIwLCAxMzMyNCwgMTMzMjgsIDEzMzMyLCAxMzMzNiwgMTMzNDAsIDEzMzQ0LCAxMzM0OCwgMTMzNTIsIDEzMzU2LCAKLSAgICAxMzM2MCwgMTMzNjQsIDAsIDEzMzY3LCAxMzM3MCwgMTMzNzQsIDEzMzc4LCAxMzM4MiwgMTMzODUsIDEzMzg4LCAwLCAKLSAgICAxMzM5MSwgMTMzOTUsIDAsIDEzMzk5LCAxMzQwMywgMCwgMTM0MDcsIDEzNDEwLCAwLCAwLCAxMzQxMywgMCwgMTM0MTcsIAotICAgIDEzNDIyLCAxMzQyNiwgMTM0MzEsIDEzNDM1LCAwLCAwLCAwLCAwLCAxMzQ0MCwgMTM0NDUsIDAsIDAsIDEzNDUwLCAxMzQ1NSwgCi0gICAgMTM0NjAsIDAsIDAsIDAsIDEzNDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ2OCwgMTM0NzIsIDEzNDc2LCAxMzQ4MCwgCi0gICAgMCwgMTM0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDg4LCAxMzQ5MiwgMTM0OTUsIDEzNDk4LCAxMzUwMSwgMTM1MDQsIAotICAgIDEzNTA3LCAxMzUxMCwgMTM1MTMsIDEzNTE2LCAxMzUxOSwgMTM1MjIsIDEzNTI1LCAxMzUyOCwgMTM1MzEsIDEzNTM2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzU0MCwgMTM1NDQsIDEzNTQ4LCAwLCAxMzU1MiwgMTM1NTUsIAotICAgIDEzNTU5LCAxMzU2MiwgMTM1NjYsIDEzNTY5LCAxMzU3MywgMTM1NzcsIDEzNTgxLCAwLCAxMzU4NiwgMTM1ODksIDEzNTkzLCAKLSAgICAwLCAxMzU5OCwgMTM2MDEsIDEzNjA1LCAxMzYwOCwgMTM2MTIsIDEzNjE2LCAxMzYyMCwgMTM2MjQsIDEzNjI4LCAxMzYzMiwgCi0gICAgMTM2MzYsIDEzNjQwLCAxMzY0NCwgMTM2NDgsIDEzNjUyLCAxMzY1NiwgMTM2NjAsIDEzNjY0LCAxMzY2OCwgMTM2NzIsIAotICAgIDEzNjc2LCAxMzY4MCwgMCwgMTM2ODMsIDEzNjg2LCAxMzY5MCwgMTM2OTQsIDEzNjk4LCAxMzcwMSwgMTM3MDQsIDAsIAotICAgIDEzNzA3LCAxMzcxMSwgMCwgMTM3MTUsIDEzNzE5LCAxMzcyMywgMTM3MjcsIDEzNzMwLCAwLCAwLCAxMzczMywgMTM3MzcsIAotICAgIDEzNzQxLCAxMzc0NiwgMTM3NTAsIDEzNzU1LCAxMzc1OSwgMTM3NjQsIDEzNzY5LCAxMzc3NSwgMCwgMTM3ODEsIDEzNzg1LCAKLSAgICAxMzc5MCwgMCwgMTM3OTYsIDEzODAwLCAxMzgwNSwgMCwgMCwgMTM4MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEzODEyLCAxMzgxNywgMTM4MjIsIDEzODI3LCAwLCAwLCAxMzgzMywgMTM4MzcsIDEzODQwLCAKLSAgICAxMzg0MywgMTM4NDYsIDEzODQ5LCAxMzg1MiwgMTM4NTUsIDEzODU4LCAxMzg2MSwgMTM4NjQsIDEzODY4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzg3MiwgMTM4NzYsIDEzODgwLCAwLCAxMzg4NCwgMTM4ODcsIAotICAgIDEzODkxLCAxMzg5NCwgMTM4OTgsIDEzOTAxLCAxMzkwNSwgMTM5MDksIDAsIDAsIDEzOTEzLCAxMzkxNiwgMCwgMCwgCi0gICAgMTM5MjAsIDEzOTIzLCAxMzkyNywgMTM5MzAsIDEzOTM0LCAxMzkzOCwgMTM5NDIsIDEzOTQ2LCAxMzk1MCwgMTM5NTQsIAotICAgIDEzOTU4LCAxMzk2MiwgMTM5NjYsIDEzOTcwLCAxMzk3NCwgMTM5NzgsIDEzOTgyLCAxMzk4NiwgMTM5OTAsIDEzOTk0LCAKLSAgICAxMzk5OCwgMTQwMDIsIDAsIDE0MDA1LCAxNDAwOCwgMTQwMTIsIDE0MDE2LCAxNDAyMCwgMTQwMjMsIDE0MDI2LCAwLCAKLSAgICAxNDAyOSwgMTQwMzMsIDAsIDE0MDM3LCAxNDA0MSwgMTQwNDUsIDE0MDQ5LCAxNDA1MiwgMCwgMCwgMTQwNTUsIDE0MDU5LCAKLSAgICAxNDA2MywgMTQwNjgsIDE0MDcyLCAxNDA3NywgMTQwODEsIDE0MDg2LCAxNDA5MSwgMCwgMCwgMTQwOTcsIDE0MTAxLCAwLCAKLSAgICAwLCAxNDEwNiwgMTQxMTAsIDE0MTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDExOSwgMTQxMjUsIDAsIDAsIDAsIDAsIAotICAgIDE0MTMxLCAxNDEzNSwgMCwgMTQxMzksIDE0MTQzLCAxNDE0OCwgMTQxNTMsIDE0MTU4LCAwLCAwLCAxNDE2NCwgMTQxNjgsIAotICAgIDE0MTcxLCAxNDE3NCwgMTQxNzcsIDE0MTgwLCAxNDE4MywgMTQxODYsIDE0MTg5LCAxNDE5MiwgMTQxOTUsIDE0MTk4LCAKLSAgICAxNDIwMiwgMTQyMDgsIDE0MjE0LCAxNDIyMCwgMTQyMjYsIDE0MjMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNDIzOCwgMTQyNDIsIDAsIDE0MjQ2LCAxNDI0OSwgMTQyNTMsIDE0MjU2LCAxNDI2MCwgMTQyNjMsIDAsIDAsIDAsIAotICAgIDE0MjY3LCAxNDI3MCwgMTQyNzQsIDAsIDE0Mjc4LCAxNDI4MSwgMTQyODUsIDE0Mjg5LCAwLCAwLCAwLCAxNDI5MiwgCi0gICAgMTQyOTYsIDAsIDE0MzAwLCAwLCAxNDMwNCwgMTQzMDgsIDAsIDAsIDAsIDE0MzEyLCAxNDMxNiwgMCwgMCwgMCwgMTQzMjAsIAotICAgIDE0MzIzLCAxNDMyNywgMCwgMCwgMCwgMTQzMzAsIDE0MzMzLCAxNDMzNiwgMTQzMzksIDE0MzQzLCAxNDM0NywgMTQzNTEsIAotICAgIDE0MzU1LCAxNDM1OSwgMTQzNjMsIDE0MzY3LCAxNDM3MCwgMCwgMCwgMCwgMCwgMTQzNzMsIDE0Mzc4LCAxNDM4MiwgCi0gICAgMTQzODcsIDE0MzkxLCAwLCAwLCAwLCAxNDM5NiwgMTQ0MDAsIDE0NDA1LCAwLCAxNDQxMCwgMTQ0MTQsIDE0NDE5LCAKLSAgICAxNDQyNCwgMCwgMCwgMTQ0MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNDQzNywgMTQ0NDEsIDE0NDQ0LCAxNDQ0NywgMTQ0NTAsIDE0NDUzLCAxNDQ1NiwgMTQ0NTksIAotICAgIDE0NDYyLCAxNDQ2NSwgMTQ0NjgsIDE0NDcyLCAxNDQ3NywgMTQ0ODIsIDE0NDg2LCAxNDQ5MCwgMTQ0OTQsIDE0NDk4LCAKLSAgICAxNDUwMiwgMTQ1MDcsIDE0NTExLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDUxNCwgMTQ1MTgsIDE0NTIyLCAwLCAxNDUyNiwgCi0gICAgMTQ1MjksIDE0NTMzLCAxNDUzNiwgMTQ1NDAsIDE0NTQzLCAxNDU0NywgMTQ1NTEsIDAsIDE0NTU1LCAxNDU1OCwgMTQ1NjIsIAotICAgIDAsIDE0NTY2LCAxNDU2OSwgMTQ1NzMsIDE0NTc3LCAxNDU4MCwgMTQ1ODQsIDE0NTg4LCAxNDU5MiwgMTQ1OTYsIDE0NjAwLCAKLSAgICAxNDYwNCwgMTQ2MDgsIDE0NjEyLCAxNDYxNiwgMTQ2MjAsIDE0NjI0LCAxNDYyOCwgMTQ2MzIsIDE0NjM2LCAxNDY0MCwgCi0gICAgMTQ2NDQsIDE0NjQ4LCAxNDY1MiwgMCwgMTQ2NTUsIDE0NjU4LCAxNDY2MiwgMTQ2NjYsIDE0NjcwLCAxNDY3MywgMTQ2NzYsIAotICAgIDE0Njc5LCAxNDY4MywgMTQ2ODcsIDAsIDE0NjkxLCAxNDY5NSwgMTQ2OTksIDE0NzAzLCAxNDcwNiwgMCwgMCwgMCwgCi0gICAgMTQ3MDksIDE0NzEzLCAxNDcxOCwgMTQ3MjIsIDE0NzI3LCAxNDczMSwgMTQ3MzYsIDE0NzQxLCAwLCAxNDc0NywgMTQ3NTEsIAotICAgIDE0NzU2LCAwLCAxNDc2MSwgMTQ3NjUsIDE0NzcwLCAxNDc3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ3NzksIDE0NzgzLCAKLSAgICAwLCAxNDc4OSwgMTQ3OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDE0Nzk3LCAxNDgwMiwgMTQ4MDcsIDE0ODEyLCAwLCAwLCAKLSAgICAxNDgxOCwgMTQ4MjIsIDE0ODI1LCAxNDgyOCwgMTQ4MzEsIDE0ODM0LCAxNDgzNywgMTQ4NDAsIDE0ODQzLCAxNDg0NiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4NDksIDE0ODYyLCAxNDg3NCwgMTQ4ODYsIDE0ODk4LCAxNDkxMCwgMTQ5MjIsIAotICAgIDE0OTM0LCAwLCAwLCAxNDkzOCwgMTQ5NDIsIDAsIDE0OTQ2LCAxNDk0OSwgMTQ5NTMsIDE0OTU2LCAxNDk2MCwgMTQ5NjMsIAotICAgIDE0OTY3LCAxNDk3MSwgMCwgMTQ5NzUsIDE0OTc4LCAxNDk4MiwgMCwgMTQ5ODYsIDE0OTg5LCAxNDk5MywgMTQ5OTcsIAotICAgIDE1MDAwLCAxNTAwNCwgMTUwMDgsIDE1MDEyLCAxNTAxNiwgMTUwMjAsIDE1MDI0LCAxNTAyOCwgMTUwMzIsIDE1MDM2LCAKLSAgICAxNTA0MCwgMTUwNDQsIDE1MDQ4LCAxNTA1MiwgMTUwNTYsIDE1MDYwLCAxNTA2NCwgMTUwNjgsIDE1MDcyLCAwLCAxNTA3NSwgCi0gICAgMTUwNzgsIDE1MDgyLCAxNTA4NiwgMTUwOTAsIDE1MDkzLCAxNTA5NiwgMTUwOTksIDE1MTAzLCAxNTEwNywgMCwgMTUxMTEsIAotICAgIDE1MTE1LCAxNTExOSwgMTUxMjMsIDE1MTI2LCAwLCAwLCAxNTEyOSwgMTUxMzMsIDE1MTM3LCAxNTE0MiwgMTUxNDYsIAotICAgIDE1MTUxLCAxNTE1NSwgMTUxNjAsIDE1MTY1LCAwLCAxNTE3MSwgMTUxNzUsIDE1MTgwLCAwLCAxNTE4NSwgMTUxODksIAotICAgIDE1MTk0LCAxNTE5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyMDMsIDE1MjA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNTIxMywgMCwgMTUyMTcsIDE1MjIyLCAxNTIyNywgMTUyMzIsIDAsIDAsIDE1MjM4LCAxNTI0MiwgMTUyNDUsIDE1MjQ4LCAKLSAgICAxNTI1MSwgMTUyNTQsIDE1MjU3LCAxNTI2MCwgMTUyNjMsIDE1MjY2LCAwLCAxNTI2OSwgMTUyNzMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1Mjc3LCAxNTI4MSwgMCwgMTUyODUsIDE1Mjg4LCAxNTI5MiwgCi0gICAgMTUyOTUsIDE1Mjk5LCAxNTMwMiwgMTUzMDYsIDE1MzEwLCAwLCAxNTMxNCwgMTUzMTcsIDE1MzIxLCAwLCAxNTMyNSwgCi0gICAgMTUzMjgsIDE1MzMyLCAxNTMzNiwgMTUzMzksIDE1MzQzLCAxNTM0NywgMTUzNTEsIDE1MzU1LCAxNTM1OSwgMTUzNjMsIAotICAgIDE1MzY3LCAxNTM3MSwgMTUzNzUsIDE1Mzc5LCAxNTM4MywgMTUzODcsIDE1MzkxLCAxNTM5NSwgMTUzOTksIDE1NDAzLCAKLSAgICAxNTQwNywgMTU0MTEsIDE1NDE0LCAxNTQxOCwgMTU0MjEsIDE1NDI1LCAxNTQyOSwgMTU0MzMsIDE1NDM2LCAxNTQzOSwgCi0gICAgMTU0NDIsIDE1NDQ2LCAxNTQ1MCwgMTU0NTQsIDE1NDU4LCAxNTQ2MiwgMTU0NjYsIDE1NDcwLCAxNTQ3MywgMTU0NzYsIDAsIAotICAgIDAsIDE1NDgwLCAxNTQ4NCwgMTU0ODksIDE1NDkzLCAxNTQ5OCwgMTU1MDIsIDE1NTA3LCAxNTUxMiwgMCwgMTU1MTgsIAotICAgIDE1NTIyLCAxNTUyNywgMCwgMTU1MzIsIDE1NTM2LCAxNTU0MSwgMTU1NDYsIDE1NTUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxNTU1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1NjEsIDE1NTY2LCAxNTU3MSwgMTU1NzYsIDAsIDAsIAotICAgIDE1NTgyLCAxNTU4NiwgMTU1ODksIDE1NTkyLCAxNTU5NSwgMTU1OTgsIDE1NjAxLCAxNTYwNCwgMTU2MDcsIDE1NjEwLCAKLSAgICAxNTYxMywgMTU2MTcsIDE1NjIyLCAxNTYyNywgMTU2MzMsIDE1NjM5LCAwLCAwLCAwLCAxNTY0NSwgMTU2NDksIDE1NjU1LCAKLSAgICAxNTY2MSwgMTU2NjcsIDE1NjcyLCAxNTY3OCwgMCwgMCwgMTU2ODQsIDE1Njg4LCAwLCAxNTY5MiwgMTU2OTYsIDE1NzAwLCAKLSAgICAxNTcwNCwgMTU3MDgsIDE1NzEyLCAxNTcxNiwgMTU3MjAsIDE1NzI0LCAxNTcyOCwgMTU3MzIsIDE1NzM2LCAxNTc0MCwgCi0gICAgMTU3NDQsIDE1NzQ4LCAxNTc1MiwgMTU3NTYsIDE1NzYwLCAwLCAwLCAwLCAxNTc2NCwgMTU3NzAsIDE1Nzc2LCAxNTc4MiwgCi0gICAgMTU3ODgsIDE1Nzk0LCAxNTgwMCwgMTU4MDYsIDE1ODEyLCAxNTgxOCwgMTU4MjQsIDE1ODMwLCAxNTgzOCwgMTU4NDQsIAotICAgIDE1ODUwLCAxNTg1NiwgMTU4NjIsIDE1ODY4LCAxNTg3NCwgMTU4ODAsIDE1ODg2LCAxNTg5MiwgMTU4OTgsIDE1OTA0LCAwLCAKLSAgICAxNTkxMCwgMTU5MTYsIDE1OTIyLCAxNTkyOCwgMTU5MzQsIDE1OTQwLCAxNTk0NCwgMTU5NTAsIDE1OTU0LCAwLCAxNTk1OCwgCi0gICAgMCwgMCwgMTU5NjQsIDE1OTY4LCAxNTk3NCwgMTU5ODAsIDE1OTg2LCAxNTk5MCwgMTU5OTYsIDAsIDAsIDAsIDE2MDAwLCAwLCAKLSAgICAwLCAwLCAwLCAxNjAwNCwgMTYwMDksIDE2MDE2LCAxNjAyMywgMTYwMzAsIDE2MDM3LCAwLCAxNjA0NCwgMCwgMTYwNTEsIAotICAgIDE2MDU2LCAxNjA2MSwgMTYwNjgsIDE2MDc1LCAxNjA4NCwgMTYwOTUsIDE2MTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjEwOSwgMTYxMTYsIDE2MTIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNjEyOCwgMTYxMzQsIDE2MTQwLCAxNjE0NiwgMTYxNTIsIDE2MTU4LCAxNjE2NCwgMTYxNzAsIAotICAgIDE2MTc2LCAxNjE4MiwgMTYxODgsIDE2MTk0LCAxNjIwMCwgMTYyMDYsIDE2MjEyLCAxNjIxOCwgMTYyMjQsIDE2MjMwLCAKLSAgICAxNjIzNiwgMTYyNDIsIDE2MjQ4LCAxNjI1NCwgMTYyNjAsIDE2MjY2LCAxNjI3MiwgMTYyNzgsIDE2Mjg0LCAxNjI5MCwgCi0gICAgMTYyOTYsIDE2MzAyLCAxNjMwOCwgMTYzMTQsIDE2MzIwLCAxNjMyNSwgMTYzMzEsIDE2MzM3LCAxNjM0MSwgMTYzNDcsIAotICAgIDE2MzUxLCAxNjM1NywgMTYzNjMsIDE2MzY5LCAxNjM3NSwgMTYzODEsIDE2Mzg3LCAxNjM5MiwgMTYzOTgsIDE2NDAyLCAKLSAgICAxNjQwNywgMTY0MTMsIDE2NDE5LCAxNjQyNSwgMTY0MzAsIDE2NDM2LCAxNjQ0MiwgMTY0NDgsIDE2NDUzLCAxNjQ1OSwgMCwgCi0gICAgMCwgMCwgMCwgMTY0NjMsIDE2NDY5LCAxNjQ3NCwgMTY0ODAsIDE2NDg1LCAxNjQ5MywgMTY1MDEsIDE2NTA1LCAxNjUwOSwgCi0gICAgMTY1MTMsIDE2NTE5LCAxNjUyNSwgMTY1MzEsIDE2NTM3LCAxNjU0MSwgMTY1NDUsIDE2NTQ5LCAxNjU1MywgMTY1NTcsIAotICAgIDE2NTYwLCAxNjU2MywgMTY1NjYsIDE2NTY5LCAxNjU3MiwgMTY1NzUsIDE2NTc4LCAxNjU4MSwgMTY1ODQsIDE2NTg4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE3MCwgMTIxNzUsIDEyMTgwLCAxMjE4NSwgMTIxOTAsIAorICAgIDEyMTk1LCAxMjIwMCwgMTIyMDUsIDEyMjEwLCAxMjIxNSwgMTIyMjAsIDEyMjI1LCAxMjIzMCwgMTIyMzQsIDEyMjM4LCAKKyAgICAxMjI0MiwgMTIyNDcsIDEyMjUzLCAxMjI1OSwgMTIyNjUsIDEyMjcwLCAxMjI3NSwgMTIyODAsIDEyMjg1LCAxMjI5MSwgCisgICAgMTIzMDAsIDEyMzA4LCAwLCAxMjMxNCwgMTIzMjAsIDEyMzI0LCAxMjMyOCwgMTIzMzIsIDEyMzM3LCAxMjM0MCwgMTIzNDQsIAorICAgIDEyMzQ3LCAxMjM1MSwgMTIzNTQsIDEyMzU4LCAxMjM2MiwgMTIzNjYsIDEyMzcxLCAxMjM3NiwgMTIzNzksIDEyMzgzLCAKKyAgICAxMjM4OCwgMTIzOTMsIDEyMzk2LCAxMjQwMCwgMTI0MDMsIDEyNDA3LCAxMjQxMSwgMTI0MTUsIDEyNDE5LCAxMjQyMywgCisgICAgMTI0MjcsIDEyNDMxLCAxMjQzNSwgMTI0MzksIDEyNDQzLCAxMjQ0NywgMTI0NTEsIDEyNDU1LCAxMjQ1OSwgMTI0NjMsIAorICAgIDEyNDY3LCAxMjQ3MSwgMTI0NzUsIDEyNDc4LCAxMjQ4MiwgMTI0ODUsIDEyNDg5LCAxMjQ5MywgMTI0OTcsIDEyNTAwLCAKKyAgICAxMjUwMywgMTI1MDYsIDEyNTEwLCAxMjUxNCwgMTI1MTgsIDEyNTIyLCAxMjUyNiwgMTI1MzAsIDEyNTM0LCAxMjUzNywgCisgICAgMTI1NDAsIDEyNTQ1LCAxMjU1MCwgMTI1NTQsIDEyNTU4LCAxMjU2MywgMTI1NjcsIDEyNTcyLCAxMjU3NiwgMTI1ODEsIAorICAgIDEyNTg2LCAxMjU5MiwgMTI1OTgsIDEyNjA0LCAxMjYwOCwgMTI2MTMsIDEyNjE5LCAxMjYyNSwgMTI2MjksIDEyNjM0LCAKKyAgICAxMjYzOCwgMTI2NDQsIDEyNjQ5LCAxMjY1MiwgMTI2NTgsIDEyNjY0LCAxMjY2OSwgMTI2NzQsIDEyNjgxLCAxMjY4NiwgCisgICAgMTI2OTEsIDEyNjk1LCAxMjY5OSwgMTI3MDMsIDEyNzA3LCAxMjcxMSwgMTI3MTUsIDEyNzE5LCAxMjcyMywgMTI3MjgsIAorICAgIDEyNzMzLCAxMjczOCwgMTI3NDQsIDEyNzQ3LCAxMjc1MSwgMTI3NTUsIDEyNzU4LCAxMjc2MSwgMTI3NjQsIDEyNzY3LCAKKyAgICAxMjc3MCwgMTI3NzMsIDEyNzc2LCAxMjc3OSwgMTI3ODIsIDEyNzg2LCAxMjc5MywgMTI3OTgsIDEyODAyLCAxMjgwNiwgCisgICAgMTI4MTAsIDEyODE0LCAwLCAxMjgxOCwgMTI4MjIsIDEyODI2LCAxMjgzMCwgMTI4MzQsIDEyODQwLCAxMjg0NCwgMCwgCisgICAgMTI4NDgsIDEyODUyLCAxMjg1NiwgMCwgMTI4NjAsIDEyODYzLCAxMjg2NywgMTI4NzAsIDEyODc0LCAxMjg3NywgMTI4ODEsIAorICAgIDEyODg1LCAwLCAwLCAxMjg4OSwgMTI4OTIsIDAsIDAsIDEyODk2LCAxMjg5OSwgMTI5MDMsIDEyOTA2LCAxMjkxMCwgCisgICAgMTI5MTQsIDEyOTE4LCAxMjkyMiwgMTI5MjYsIDEyOTMwLCAxMjkzNCwgMTI5MzgsIDEyOTQyLCAxMjk0NiwgMTI5NTAsIAorICAgIDEyOTU0LCAxMjk1OCwgMTI5NjIsIDEyOTY2LCAxMjk3MCwgMTI5NzQsIDEyOTc4LCAwLCAxMjk4MSwgMTI5ODQsIDEyOTg4LCAKKyAgICAxMjk5MiwgMTI5OTYsIDEyOTk5LCAxMzAwMiwgMCwgMTMwMDUsIDAsIDAsIDAsIDEzMDA5LCAxMzAxMywgMTMwMTcsIAorICAgIDEzMDIwLCAwLCAwLCAxMzAyMywgMTMwMjcsIDEzMDMxLCAxMzAzNiwgMTMwNDAsIDEzMDQ1LCAxMzA0OSwgMTMwNTQsIAorICAgIDEzMDU5LCAwLCAwLCAxMzA2NSwgMTMwNjksIDAsIDAsIDEzMDc0LCAxMzA3OCwgMTMwODMsIDEzMDg3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMzA5MywgMCwgMCwgMCwgMCwgMTMwOTksIDEzMTAzLCAwLCAxMzEwNywgMTMxMTEsIDEzMTE2LCAKKyAgICAxMzEyMSwgMTMxMjYsIDAsIDAsIDEzMTMyLCAxMzEzNiwgMTMxMzksIDEzMTQyLCAxMzE0NSwgMTMxNDgsIDEzMTUxLCAKKyAgICAxMzE1NCwgMTMxNTcsIDEzMTYwLCAxMzE2MywgMTMxNzIsIDEzMTgxLCAxMzE4NSwgMTMxODksIDEzMTk1LCAxMzIwMSwgCisgICAgMTMyMDcsIDEzMjEzLCAxMzIyNywgMTMyMzQsIDEzMjM3LCAwLCAwLCAwLCAwLCAwLCAxMzI0MSwgMTMyNDcsIDEzMjUxLCAwLCAKKyAgICAxMzI1NSwgMTMyNTgsIDEzMjYyLCAxMzI2NSwgMTMyNjksIDEzMjcyLCAwLCAwLCAwLCAwLCAxMzI3NiwgMTMyODAsIDAsIDAsIAorICAgIDEzMjg0LCAxMzI4OCwgMTMyOTIsIDEzMjk1LCAxMzI5OSwgMTMzMDMsIDEzMzA3LCAxMzMxMSwgMTMzMTUsIDEzMzE5LCAKKyAgICAxMzMyMywgMTMzMjcsIDEzMzMxLCAxMzMzNSwgMTMzMzksIDEzMzQzLCAxMzM0NywgMTMzNTEsIDEzMzU1LCAxMzM1OSwgCisgICAgMTMzNjMsIDEzMzY3LCAwLCAxMzM3MCwgMTMzNzMsIDEzMzc3LCAxMzM4MSwgMTMzODUsIDEzMzg4LCAxMzM5MSwgMCwgCisgICAgMTMzOTQsIDEzMzk4LCAwLCAxMzQwMiwgMTM0MDYsIDAsIDEzNDEwLCAxMzQxMywgMCwgMCwgMTM0MTYsIDAsIDEzNDIwLCAKKyAgICAxMzQyNSwgMTM0MjksIDEzNDM0LCAxMzQzOCwgMCwgMCwgMCwgMCwgMTM0NDMsIDEzNDQ4LCAwLCAwLCAxMzQ1MywgMTM0NTgsIAorICAgIDEzNDYzLCAwLCAwLCAwLCAxMzQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0NzEsIDEzNDc1LCAxMzQ3OSwgMTM0ODMsIAorICAgIDAsIDEzNDg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ5MSwgMTM0OTUsIDEzNDk4LCAxMzUwMSwgMTM1MDQsIDEzNTA3LCAKKyAgICAxMzUxMCwgMTM1MTMsIDEzNTE2LCAxMzUxOSwgMTM1MjIsIDEzNTI1LCAxMzUyOCwgMTM1MzEsIDEzNTM0LCAxMzUzOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDMsIDEzNTQ3LCAxMzU1MSwgMCwgMTM1NTUsIDEzNTU4LCAKKyAgICAxMzU2MiwgMTM1NjUsIDEzNTY5LCAxMzU3MiwgMTM1NzYsIDEzNTgwLCAxMzU4NCwgMCwgMTM1ODksIDEzNTkyLCAxMzU5NiwgCisgICAgMCwgMTM2MDEsIDEzNjA0LCAxMzYwOCwgMTM2MTEsIDEzNjE1LCAxMzYxOSwgMTM2MjMsIDEzNjI3LCAxMzYzMSwgMTM2MzUsIAorICAgIDEzNjM5LCAxMzY0MywgMTM2NDcsIDEzNjUxLCAxMzY1NSwgMTM2NTksIDEzNjYzLCAxMzY2NywgMTM2NzEsIDEzNjc1LCAKKyAgICAxMzY3OSwgMTM2ODMsIDAsIDEzNjg2LCAxMzY4OSwgMTM2OTMsIDEzNjk3LCAxMzcwMSwgMTM3MDQsIDEzNzA3LCAwLCAKKyAgICAxMzcxMCwgMTM3MTQsIDAsIDEzNzE4LCAxMzcyMiwgMTM3MjYsIDEzNzMwLCAxMzczMywgMCwgMCwgMTM3MzYsIDEzNzQwLCAKKyAgICAxMzc0NCwgMTM3NDksIDEzNzUzLCAxMzc1OCwgMTM3NjIsIDEzNzY3LCAxMzc3MiwgMTM3NzgsIDAsIDEzNzg0LCAxMzc4OCwgCisgICAgMTM3OTMsIDAsIDEzNzk5LCAxMzgwMywgMTM4MDgsIDAsIDAsIDEzODEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzgxNSwgMTM4MjAsIDEzODI1LCAxMzgzMCwgMCwgMCwgMTM4MzYsIDEzODQwLCAxMzg0MywgCisgICAgMTM4NDYsIDEzODQ5LCAxMzg1MiwgMTM4NTUsIDEzODU4LCAxMzg2MSwgMTM4NjQsIDEzODY3LCAxMzg3MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4NzUsIDEzODc5LCAxMzg4MywgMCwgMTM4ODcsIDEzODkwLCAKKyAgICAxMzg5NCwgMTM4OTcsIDEzOTAxLCAxMzkwNCwgMTM5MDgsIDEzOTEyLCAwLCAwLCAxMzkxNiwgMTM5MTksIDAsIDAsIAorICAgIDEzOTIzLCAxMzkyNiwgMTM5MzAsIDEzOTMzLCAxMzkzNywgMTM5NDEsIDEzOTQ1LCAxMzk0OSwgMTM5NTMsIDEzOTU3LCAKKyAgICAxMzk2MSwgMTM5NjUsIDEzOTY5LCAxMzk3MywgMTM5NzcsIDEzOTgxLCAxMzk4NSwgMTM5ODksIDEzOTkzLCAxMzk5NywgCisgICAgMTQwMDEsIDE0MDA1LCAwLCAxNDAwOCwgMTQwMTEsIDE0MDE1LCAxNDAxOSwgMTQwMjMsIDE0MDI2LCAxNDAyOSwgMCwgCisgICAgMTQwMzIsIDE0MDM2LCAwLCAxNDA0MCwgMTQwNDQsIDE0MDQ4LCAxNDA1MiwgMTQwNTUsIDAsIDAsIDE0MDU4LCAxNDA2MiwgCisgICAgMTQwNjYsIDE0MDcxLCAxNDA3NSwgMTQwODAsIDE0MDg0LCAxNDA4OSwgMTQwOTQsIDAsIDAsIDE0MTAwLCAxNDEwNCwgMCwgCisgICAgMCwgMTQxMDksIDE0MTEzLCAxNDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMjIsIDE0MTI4LCAwLCAwLCAwLCAwLCAKKyAgICAxNDEzNCwgMTQxMzgsIDAsIDE0MTQyLCAxNDE0NiwgMTQxNTEsIDE0MTU2LCAxNDE2MSwgMCwgMCwgMTQxNjcsIDE0MTcxLCAKKyAgICAxNDE3NCwgMTQxNzcsIDE0MTgwLCAxNDE4MywgMTQxODYsIDE0MTg5LCAxNDE5MiwgMTQxOTUsIDE0MTk4LCAxNDIwMSwgCisgICAgMTQyMDUsIDE0MjExLCAxNDIxNywgMTQyMjMsIDE0MjI5LCAxNDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTQyNDEsIDE0MjQ1LCAwLCAxNDI0OSwgMTQyNTIsIDE0MjU2LCAxNDI1OSwgMTQyNjMsIDE0MjY2LCAwLCAwLCAwLCAKKyAgICAxNDI3MCwgMTQyNzMsIDE0Mjc3LCAwLCAxNDI4MSwgMTQyODQsIDE0Mjg4LCAxNDI5MiwgMCwgMCwgMCwgMTQyOTUsIAorICAgIDE0Mjk5LCAwLCAxNDMwMywgMCwgMTQzMDcsIDE0MzExLCAwLCAwLCAwLCAxNDMxNSwgMTQzMTksIDAsIDAsIDAsIDE0MzIzLCAKKyAgICAxNDMyNiwgMTQzMzAsIDAsIDAsIDAsIDE0MzMzLCAxNDMzNiwgMTQzMzksIDE0MzQyLCAxNDM0NiwgMTQzNTAsIDE0MzU0LCAKKyAgICAxNDM1OCwgMTQzNjIsIDE0MzY2LCAxNDM3MCwgMTQzNzMsIDAsIDAsIDAsIDAsIDE0Mzc2LCAxNDM4MSwgMTQzODUsIAorICAgIDE0MzkwLCAxNDM5NCwgMCwgMCwgMCwgMTQzOTksIDE0NDAzLCAxNDQwOCwgMCwgMTQ0MTMsIDE0NDE3LCAxNDQyMiwgCisgICAgMTQ0MjcsIDAsIDAsIDE0NDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTQ0NDAsIDE0NDQ0LCAxNDQ0NywgMTQ0NTAsIDE0NDUzLCAxNDQ1NiwgMTQ0NTksIDE0NDYyLCAKKyAgICAxNDQ2NSwgMTQ0NjgsIDE0NDcxLCAxNDQ3NSwgMTQ0ODAsIDE0NDg1LCAxNDQ4OSwgMTQ0OTMsIDE0NDk3LCAxNDUwMSwgCisgICAgMTQ1MDUsIDE0NTEwLCAxNDUxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1MTcsIDE0NTIxLCAxNDUyNSwgMCwgMTQ1MjksIAorICAgIDE0NTMyLCAxNDUzNiwgMTQ1MzksIDE0NTQzLCAxNDU0NiwgMTQ1NTAsIDE0NTU0LCAwLCAxNDU1OCwgMTQ1NjEsIDE0NTY1LCAKKyAgICAwLCAxNDU2OSwgMTQ1NzIsIDE0NTc2LCAxNDU4MCwgMTQ1ODMsIDE0NTg3LCAxNDU5MSwgMTQ1OTUsIDE0NTk5LCAxNDYwMywgCisgICAgMTQ2MDcsIDE0NjExLCAxNDYxNSwgMTQ2MTksIDE0NjIzLCAxNDYyNywgMTQ2MzEsIDE0NjM1LCAxNDYzOSwgMTQ2NDMsIAorICAgIDE0NjQ3LCAxNDY1MSwgMTQ2NTUsIDAsIDE0NjU4LCAxNDY2MSwgMTQ2NjUsIDE0NjY5LCAxNDY3MywgMTQ2NzYsIDE0Njc5LCAKKyAgICAxNDY4MiwgMTQ2ODYsIDE0NjkwLCAwLCAxNDY5NCwgMTQ2OTgsIDE0NzAyLCAxNDcwNiwgMTQ3MDksIDAsIDAsIDAsIAorICAgIDE0NzEyLCAxNDcxNiwgMTQ3MjEsIDE0NzI1LCAxNDczMCwgMTQ3MzQsIDE0NzM5LCAxNDc0NCwgMCwgMTQ3NTAsIDE0NzU0LCAKKyAgICAxNDc1OSwgMCwgMTQ3NjQsIDE0NzY4LCAxNDc3MywgMTQ3NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NzgyLCAxNDc4NiwgCisgICAgMCwgMTQ3OTIsIDE0Nzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgwMCwgMTQ4MDUsIDE0ODEwLCAxNDgxNSwgMCwgMCwgCisgICAgMTQ4MjEsIDE0ODI1LCAxNDgyOCwgMTQ4MzEsIDE0ODM0LCAxNDgzNywgMTQ4NDAsIDE0ODQzLCAxNDg0NiwgMTQ4NDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODUyLCAxNDg2NSwgMTQ4NzcsIDE0ODg5LCAxNDkwMSwgMTQ5MTMsIDE0OTI1LCAKKyAgICAxNDkzNywgMCwgMCwgMTQ5NDEsIDE0OTQ1LCAwLCAxNDk0OSwgMTQ5NTIsIDE0OTU2LCAxNDk1OSwgMTQ5NjMsIDE0OTY2LCAKKyAgICAxNDk3MCwgMTQ5NzQsIDAsIDE0OTc4LCAxNDk4MSwgMTQ5ODUsIDAsIDE0OTg5LCAxNDk5MiwgMTQ5OTYsIDE1MDAwLCAKKyAgICAxNTAwMywgMTUwMDcsIDE1MDExLCAxNTAxNSwgMTUwMTksIDE1MDIzLCAxNTAyNywgMTUwMzEsIDE1MDM1LCAxNTAzOSwgCisgICAgMTUwNDMsIDE1MDQ3LCAxNTA1MSwgMTUwNTUsIDE1MDU5LCAxNTA2MywgMTUwNjcsIDE1MDcxLCAxNTA3NSwgMCwgMTUwNzgsIAorICAgIDE1MDgxLCAxNTA4NSwgMTUwODksIDE1MDkzLCAxNTA5NiwgMTUwOTksIDE1MTAyLCAxNTEwNiwgMTUxMTAsIDAsIDE1MTE0LCAKKyAgICAxNTExOCwgMTUxMjIsIDE1MTI2LCAxNTEyOSwgMCwgMCwgMTUxMzIsIDE1MTM2LCAxNTE0MCwgMTUxNDUsIDE1MTQ5LCAKKyAgICAxNTE1NCwgMTUxNTgsIDE1MTYzLCAxNTE2OCwgMCwgMTUxNzQsIDE1MTc4LCAxNTE4MywgMCwgMTUxODgsIDE1MTkyLCAKKyAgICAxNTE5NywgMTUyMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjA2LCAxNTIxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTUyMTYsIDAsIDE1MjIwLCAxNTIyNSwgMTUyMzAsIDE1MjM1LCAwLCAwLCAxNTI0MSwgMTUyNDUsIDE1MjQ4LCAxNTI1MSwgCisgICAgMTUyNTQsIDE1MjU3LCAxNTI2MCwgMTUyNjMsIDE1MjY2LCAxNTI2OSwgMCwgMTUyNzIsIDE1Mjc2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI4MCwgMTUyODQsIDAsIDE1Mjg4LCAxNTI5MSwgMTUyOTUsIAorICAgIDE1Mjk4LCAxNTMwMiwgMTUzMDUsIDE1MzA5LCAxNTMxMywgMCwgMTUzMTcsIDE1MzIwLCAxNTMyNCwgMCwgMTUzMjgsIAorICAgIDE1MzMxLCAxNTMzNSwgMTUzMzksIDE1MzQyLCAxNTM0NiwgMTUzNTAsIDE1MzU0LCAxNTM1OCwgMTUzNjIsIDE1MzY2LCAKKyAgICAxNTM3MCwgMTUzNzQsIDE1Mzc4LCAxNTM4MiwgMTUzODYsIDE1MzkwLCAxNTM5NCwgMTUzOTgsIDE1NDAyLCAxNTQwNiwgCisgICAgMTU0MTAsIDE1NDE0LCAxNTQxNywgMTU0MjEsIDE1NDI0LCAxNTQyOCwgMTU0MzIsIDE1NDM2LCAxNTQzOSwgMTU0NDIsIAorICAgIDE1NDQ1LCAxNTQ0OSwgMTU0NTMsIDE1NDU3LCAxNTQ2MSwgMTU0NjUsIDE1NDY5LCAxNTQ3MywgMTU0NzYsIDE1NDc5LCAwLCAKKyAgICAwLCAxNTQ4MywgMTU0ODcsIDE1NDkyLCAxNTQ5NiwgMTU1MDEsIDE1NTA1LCAxNTUxMCwgMTU1MTUsIDAsIDE1NTIxLCAKKyAgICAxNTUyNSwgMTU1MzAsIDAsIDE1NTM1LCAxNTUzOSwgMTU1NDQsIDE1NTQ5LCAxNTU1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTU1NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTY0LCAxNTU2OSwgMTU1NzQsIDE1NTc5LCAwLCAwLCAKKyAgICAxNTU4NSwgMTU1ODksIDE1NTkyLCAxNTU5NSwgMTU1OTgsIDE1NjAxLCAxNTYwNCwgMTU2MDcsIDE1NjEwLCAxNTYxMywgCisgICAgMTU2MTYsIDE1NjIwLCAxNTYyNSwgMTU2MzAsIDE1NjM2LCAxNTY0MiwgMCwgMCwgMCwgMTU2NDgsIDE1NjUyLCAxNTY1OCwgCisgICAgMTU2NjQsIDE1NjcwLCAxNTY3NSwgMTU2ODEsIDAsIDAsIDE1Njg3LCAxNTY5MSwgMCwgMTU2OTUsIDE1Njk5LCAxNTcwMywgCisgICAgMTU3MDcsIDE1NzExLCAxNTcxNSwgMTU3MTksIDE1NzIzLCAxNTcyNywgMTU3MzEsIDE1NzM1LCAxNTczOSwgMTU3NDMsIAorICAgIDE1NzQ3LCAxNTc1MSwgMTU3NTUsIDE1NzU5LCAxNTc2MywgMCwgMCwgMCwgMTU3NjcsIDE1NzczLCAxNTc3OSwgMTU3ODUsIAorICAgIDE1NzkxLCAxNTc5NywgMTU4MDMsIDE1ODA5LCAxNTgxNSwgMTU4MjEsIDE1ODI3LCAxNTgzMywgMTU4NDEsIDE1ODQ3LCAKKyAgICAxNTg1MywgMTU4NTksIDE1ODY1LCAxNTg3MSwgMTU4NzcsIDE1ODgzLCAxNTg4OSwgMTU4OTUsIDE1OTAxLCAxNTkwNywgMCwgCisgICAgMTU5MTMsIDE1OTE5LCAxNTkyNSwgMTU5MzEsIDE1OTM3LCAxNTk0MywgMTU5NDcsIDE1OTUzLCAxNTk1NywgMCwgMTU5NjEsIAorICAgIDAsIDAsIDE1OTY3LCAxNTk3MSwgMTU5NzcsIDE1OTgzLCAxNTk4OSwgMTU5OTMsIDE1OTk5LCAwLCAwLCAwLCAxNjAwMywgMCwgCisgICAgMCwgMCwgMCwgMTYwMDcsIDE2MDEyLCAxNjAxOSwgMTYwMjYsIDE2MDMzLCAxNjA0MCwgMCwgMTYwNDcsIDAsIDE2MDU0LCAKKyAgICAxNjA1OSwgMTYwNjQsIDE2MDcxLCAxNjA3OCwgMTYwODcsIDE2MDk4LCAxNjEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMTIsIDE2MTE5LCAxNjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTYxMzEsIDE2MTM3LCAxNjE0MywgMTYxNDksIDE2MTU1LCAxNjE2MSwgMTYxNjcsIDE2MTczLCAKKyAgICAxNjE3OSwgMTYxODUsIDE2MTkxLCAxNjE5NywgMTYyMDMsIDE2MjA5LCAxNjIxNSwgMTYyMjEsIDE2MjI3LCAxNjIzMywgCisgICAgMTYyMzksIDE2MjQ1LCAxNjI1MSwgMTYyNTcsIDE2MjYzLCAxNjI2OSwgMTYyNzUsIDE2MjgxLCAxNjI4NywgMTYyOTMsIAorICAgIDE2Mjk5LCAxNjMwNSwgMTYzMTEsIDE2MzE3LCAxNjMyMywgMTYzMjgsIDE2MzM0LCAxNjM0MCwgMTYzNDQsIDE2MzUwLCAKKyAgICAxNjM1NCwgMTYzNjAsIDE2MzY2LCAxNjM3MiwgMTYzNzgsIDE2Mzg0LCAxNjM5MCwgMTYzOTUsIDE2NDAxLCAxNjQwNSwgCisgICAgMTY0MTAsIDE2NDE2LCAxNjQyMiwgMTY0MjgsIDE2NDMzLCAxNjQzOSwgMTY0NDUsIDE2NDUxLCAxNjQ1NiwgMTY0NjIsIDAsIAorICAgIDAsIDAsIDAsIDE2NDY2LCAxNjQ3MiwgMTY0NzcsIDE2NDgzLCAxNjQ4OCwgMTY0OTYsIDE2NTA0LCAxNjUwOCwgMTY1MTIsIAorICAgIDE2NTE2LCAxNjUyMiwgMTY1MjgsIDE2NTM0LCAxNjU0MCwgMTY1NDQsIDE2NTQ4LCAxNjU1MiwgMTY1NTYsIDE2NTYwLCAKKyAgICAxNjU2MywgMTY1NjYsIDE2NTY5LCAxNjU3MiwgMTY1NzUsIDE2NTc4LCAxNjU4MSwgMTY1ODQsIDE2NTg3LCAxNjU5MSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OTIsIDE2NTk3LCAwLCAxNjYwNCwgMCwgMCwgMTY2MTEsIAotICAgIDE2NjE2LCAwLCAxNjYyMSwgMCwgMCwgMTY2MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NjMzLCAxNjYzOCwgMTY2NDIsIAotICAgIDE2NjQ5LCAwLCAxNjY1NiwgMTY2NjEsIDE2NjY2LCAxNjY3MSwgMTY2NzgsIDE2Njg1LCAxNjY5MiwgMCwgMTY2OTksIAotICAgIDE2NzA0LCAxNjcwOSwgMCwgMTY3MTYsIDAsIDE2NzIzLCAwLCAwLCAxNjcyOCwgMTY3MzUsIDAsIDE2NzQyLCAxNjc0NiwgCi0gICAgMTY3NTMsIDE2NzU3LCAxNjc2MiwgMTY3NzAsIDE2Nzc2LCAxNjc4MiwgMTY3ODcsIDE2NzkzLCAxNjc5OSwgMTY4MDUsIAotICAgIDE2ODEwLCAwLCAxNjgxNiwgMTY4MjQsIDE2ODMxLCAwLCAwLCAxNjgzOCwgMTY4NDMsIDE2ODQ5LCAxNjg1NCwgMTY4NjAsIAotICAgIDAsIDE2ODY2LCAwLCAxNjg3MiwgMTY4NzksIDE2ODg2LCAxNjg5MywgMTY5MDAsIDE2OTA1LCAwLCAwLCAxNjkwOSwgCi0gICAgMTY5MTQsIDE2OTE4LCAxNjkyMiwgMTY5MjYsIDE2OTMwLCAxNjkzNCwgMTY5MzgsIDE2OTQyLCAxNjk0NiwgMCwgMCwgCi0gICAgMTY5NTAsIDE2OTU2LCAxNjk2MiwgMTY5NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTc2LCAxNjk4MCwgMTY5OTEsIAotICAgIDE3MDA2LCAxNzAyMSwgMTcwMzEsIDE3MDQyLCAxNzA1NSwgMTcwNjYsIDE3MDcyLCAxNzA4MCwgMTcwOTAsIDE3MDk2LCAKLSAgICAxNzEwNCwgMTcxMDgsIDE3MTE0LCAxNzEyMCwgMTcxMjgsIDE3MTM4LCAxNzE0NiwgMTcxNTksIDE3MTY1LCAxNzE3MywgCi0gICAgMTcxODEsIDE3MTkzLCAxNzIwMCwgMTcyMDgsIDE3MjE2LCAxNzIyNCwgMTcyMzIsIDE3MjQwLCAxNzI0OCwgMTcyNTgsIAotICAgIDE3MjYyLCAxNzI2NSwgMTcyNjgsIDE3MjcxLCAxNzI3NCwgMTcyNzcsIDE3MjgwLCAxNzI4MywgMTcyODYsIDE3Mjg5LCAKLSAgICAxNzI5MywgMTcyOTcsIDE3MzAxLCAxNzMwNSwgMTczMDksIDE3MzEzLCAxNzMxNywgMTczMjEsIDE3MzI1LCAxNzMzMCwgCi0gICAgMTczMzYsIDE3MzQ2LCAxNzM2MCwgMTczNzAsIDE3Mzc2LCAxNzM4MiwgMTczOTAsIDE3Mzk4LCAxNzQwNiwgMTc0MTQsIAotICAgIDE3NDIwLCAxNzQyNiwgMTc0MjksIDE3NDMzLCAxNzQzNywgMTc0NDEsIDE3NDQ1LCAxNzQ0OSwgMTc0NTMsIDAsIDE3NDU3LCAKLSAgICAxNzQ2MSwgMTc0NjUsIDE3NDY5LCAxNzQ3MywgMTc0NzcsIDE3NDgxLCAxNzQ4NSwgMTc0ODksIDE3NDkzLCAxNzQ5NywgCi0gICAgMTc1MDAsIDE3NTAzLCAxNzUwNywgMTc1MTEsIDE3NTE1LCAxNzUxOCwgMTc1MjIsIDE3NTI2LCAxNzUzMCwgMTc1MzQsIAotICAgIDE3NTM4LCAxNzU0MiwgMTc1NDYsIDE3NTUwLCAxNzU1MywgMTc1NTYsIDE3NTYwLCAxNzU2NCwgMTc1NjgsIDE3NTcxLCAKLSAgICAxNzU3NCwgMTc1NzcsIDE3NTgxLCAxNzU4NiwgMTc1OTAsIDAsIDAsIDAsIDAsIDE3NTk0LCAxNzU5OSwgMTc2MDMsIAotICAgIDE3NjA4LCAxNzYxMiwgMTc2MTcsIDE3NjIyLCAxNzYyOCwgMTc2MzMsIDE3NjM5LCAxNzY0MywgMTc2NDgsIDE3NjUyLCAKLSAgICAxNzY1NywgMTc2NjcsIDE3NjczLCAxNzY3OSwgMTc2ODYsIDE3Njk2LCAxNzcwMiwgMTc3MDYsIDE3NzEwLCAxNzcxNiwgCi0gICAgMTc3MjIsIDE3NzMwLCAxNzczNiwgMTc3NDQsIDE3NzUyLCAxNzc2MCwgMTc3NzAsIDE3Nzc4LCAxNzc4OCwgMTc3OTMsIAotICAgIDE3Nzk5LCAxNzgwNSwgMTc4MTEsIDE3ODE3LCAxNzgyMywgMTc4MjksIDAsIDE3ODM1LCAxNzg0MSwgMTc4NDcsIDE3ODUzLCAKLSAgICAxNzg1OSwgMTc4NjUsIDE3ODcxLCAxNzg3NywgMTc4ODMsIDE3ODg5LCAxNzg5NSwgMTc5MDAsIDE3OTA1LCAxNzkxMSwgCi0gICAgMTc5MTcsIDE3OTIzLCAxNzkyOCwgMTc5MzQsIDE3OTQwLCAxNzk0NiwgMTc5NTIsIDE3OTU4LCAxNzk2NCwgMTc5NzAsIAotICAgIDE3OTc2LCAxNzk4MSwgMTc5ODYsIDE3OTkyLCAxNzk5OCwgMTgwMDQsIDE4MDA5LCAxODAxNCwgMTgwMTksIDE4MDI1LCAKLSAgICAxODAzMywgMTgwNDAsIDAsIDE4MDQ3LCAxODA1NCwgMTgwNjcsIDE4MDc0LCAxODA4MSwgMTgwODksIDE4MDk3LCAxODEwMywgCi0gICAgMTgxMDksIDE4MTE1LCAxODEyNSwgMTgxMzAsIDE4MTM2LCAxODE0NiwgMTgxNTYsIDAsIDE4MTY2LCAxODE3NiwgMTgxODQsIAotICAgIDE4MTk2LCAxODIwOCwgMTgyMTQsIDE4MjI4LCAxODI0MywgMTgyNDgsIDE4MjUzLCAxODI2MSwgMTgyNjksIDE4Mjc3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjU5NSwgMTY2MDAsIDAsIDE2NjA3LCAwLCAwLCAxNjYxNCwgCisgICAgMTY2MTksIDAsIDE2NjI0LCAwLCAwLCAxNjYzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2MzYsIDE2NjQxLCAxNjY0NSwgCisgICAgMTY2NTIsIDAsIDE2NjU5LCAxNjY2NCwgMTY2NjksIDE2Njc0LCAxNjY4MSwgMTY2ODgsIDE2Njk1LCAwLCAxNjcwMiwgCisgICAgMTY3MDcsIDE2NzEyLCAwLCAxNjcxOSwgMCwgMTY3MjYsIDAsIDAsIDE2NzMxLCAxNjczOCwgMCwgMTY3NDUsIDE2NzQ5LCAKKyAgICAxNjc1NiwgMTY3NjAsIDE2NzY1LCAxNjc3MywgMTY3NzksIDE2Nzg1LCAxNjc5MCwgMTY3OTYsIDE2ODAyLCAxNjgwOCwgCisgICAgMTY4MTMsIDAsIDE2ODE5LCAxNjgyNywgMTY4MzQsIDAsIDAsIDE2ODQxLCAxNjg0NiwgMTY4NTIsIDE2ODU3LCAxNjg2MywgCisgICAgMCwgMTY4NjksIDAsIDE2ODc1LCAxNjg4MiwgMTY4ODksIDE2ODk2LCAxNjkwMywgMTY5MDgsIDAsIDAsIDE2OTEyLCAKKyAgICAxNjkxNywgMTY5MjEsIDE2OTI1LCAxNjkyOSwgMTY5MzMsIDE2OTM3LCAxNjk0MSwgMTY5NDUsIDE2OTQ5LCAwLCAwLCAKKyAgICAxNjk1MywgMTY5NTksIDE2OTY1LCAxNjk3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5NzksIDE2OTgzLCAxNjk5NCwgCisgICAgMTcwMDksIDE3MDI0LCAxNzAzNCwgMTcwNDUsIDE3MDU4LCAxNzA2OSwgMTcwNzUsIDE3MDgzLCAxNzA5MywgMTcwOTksIAorICAgIDE3MTA3LCAxNzExMSwgMTcxMTcsIDE3MTIzLCAxNzEzMSwgMTcxNDEsIDE3MTQ5LCAxNzE2MiwgMTcxNjgsIDE3MTc2LCAKKyAgICAxNzE4NCwgMTcxOTYsIDE3MjAzLCAxNzIxMSwgMTcyMTksIDE3MjI3LCAxNzIzNSwgMTcyNDMsIDE3MjUxLCAxNzI2MSwgCisgICAgMTcyNjUsIDE3MjY4LCAxNzI3MSwgMTcyNzQsIDE3Mjc3LCAxNzI4MCwgMTcyODMsIDE3Mjg2LCAxNzI4OSwgMTcyOTIsIAorICAgIDE3Mjk2LCAxNzMwMCwgMTczMDQsIDE3MzA4LCAxNzMxMiwgMTczMTYsIDE3MzIwLCAxNzMyNCwgMTczMjgsIDE3MzMzLCAKKyAgICAxNzMzOSwgMTczNDksIDE3MzYzLCAxNzM3MywgMTczNzksIDE3Mzg1LCAxNzM5MywgMTc0MDEsIDE3NDA5LCAxNzQxNywgCisgICAgMTc0MjMsIDE3NDI5LCAxNzQzMiwgMTc0MzYsIDE3NDQwLCAxNzQ0NCwgMTc0NDgsIDE3NDUyLCAxNzQ1NiwgMCwgMTc0NjAsIAorICAgIDE3NDY0LCAxNzQ2OCwgMTc0NzIsIDE3NDc2LCAxNzQ4MCwgMTc0ODQsIDE3NDg4LCAxNzQ5MiwgMTc0OTYsIDE3NTAwLCAKKyAgICAxNzUwMywgMTc1MDYsIDE3NTEwLCAxNzUxNCwgMTc1MTgsIDE3NTIxLCAxNzUyNSwgMTc1MjksIDE3NTMzLCAxNzUzNywgCisgICAgMTc1NDEsIDE3NTQ1LCAxNzU0OSwgMTc1NTMsIDE3NTU2LCAxNzU1OSwgMTc1NjMsIDE3NTY3LCAxNzU3MSwgMTc1NzQsIAorICAgIDE3NTc3LCAxNzU4MCwgMTc1ODQsIDE3NTg5LCAxNzU5MywgMCwgMCwgMCwgMCwgMTc1OTcsIDE3NjAyLCAxNzYwNiwgCisgICAgMTc2MTEsIDE3NjE1LCAxNzYyMCwgMTc2MjUsIDE3NjMxLCAxNzYzNiwgMTc2NDIsIDE3NjQ2LCAxNzY1MSwgMTc2NTUsIAorICAgIDE3NjYwLCAxNzY3MCwgMTc2NzYsIDE3NjgyLCAxNzY4OSwgMTc2OTksIDE3NzA1LCAxNzcwOSwgMTc3MTMsIDE3NzE5LCAKKyAgICAxNzcyNSwgMTc3MzMsIDE3NzM5LCAxNzc0NywgMTc3NTUsIDE3NzYzLCAxNzc3MywgMTc3ODEsIDE3NzkxLCAxNzc5NiwgCisgICAgMTc4MDIsIDE3ODA4LCAxNzgxNCwgMTc4MjAsIDE3ODI2LCAxNzgzMiwgMCwgMTc4MzgsIDE3ODQ0LCAxNzg1MCwgMTc4NTYsIAorICAgIDE3ODYyLCAxNzg2OCwgMTc4NzQsIDE3ODgwLCAxNzg4NiwgMTc4OTIsIDE3ODk4LCAxNzkwMywgMTc5MDgsIDE3OTE0LCAKKyAgICAxNzkyMCwgMTc5MjYsIDE3OTMxLCAxNzkzNywgMTc5NDMsIDE3OTQ5LCAxNzk1NSwgMTc5NjEsIDE3OTY3LCAxNzk3MywgCisgICAgMTc5NzksIDE3OTg0LCAxNzk4OSwgMTc5OTUsIDE4MDAxLCAxODAwNywgMTgwMTIsIDE4MDE3LCAxODAyMiwgMTgwMjgsIAorICAgIDE4MDM2LCAxODA0MywgMCwgMTgwNTAsIDE4MDU3LCAxODA3MCwgMTgwNzcsIDE4MDg0LCAxODA5MiwgMTgxMDAsIDE4MTA2LCAKKyAgICAxODExMiwgMTgxMTgsIDE4MTI4LCAxODEzMywgMTgxMzksIDE4MTQ5LCAxODE1OSwgMCwgMTgxNjksIDE4MTc5LCAxODE4NywgCisgICAgMTgxOTksIDE4MjExLCAxODIxNywgMTgyMzEsIDE4MjQ2LCAxODI1MSwgMTgyNTYsIDE4MjY0LCAxODI3MiwgMTgyODAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4Mjg1LCAxODI4OCwgMTgyOTIsIDE4Mjk2LCAxODMwMCwgCi0gICAgMTgzMDQsIDE4MzA4LCAxODMxMiwgMTgzMTYsIDE4MzIwLCAxODMyNCwgMTgzMjgsIDE4MzMyLCAxODMzNiwgMTgzNDAsIAotICAgIDE4MzQ0LCAxODM0OCwgMTgzNTIsIDE4MzU2LCAxODM2MCwgMTgzNjQsIDE4MzY3LCAxODM3MCwgMTgzNzQsIDE4Mzc4LCAKLSAgICAxODM4MiwgMTgzODUsIDE4Mzg4LCAxODM5MSwgMTgzOTUsIDE4Mzk5LCAxODQwMiwgMTg0MDUsIDE4NDA5LCAxODQxMiwgCi0gICAgMTg0MTcsIDE4NDIwLCAxODQyNCwgMTg0MjcsIDE4NDMxLCAxODQzNCwgMTg0MzksIDE4NDQyLCAxODQ0NiwgMTg0NTMsIAotICAgIDE4NDU4LCAxODQ2MiwgMTg0NjcsIDE4NDcxLCAxODQ3NiwgMTg0ODAsIDE4NDg1LCAxODQ5MiwgMTg0OTgsIDE4NTAzLCAKLSAgICAxODUwNywgMTg1MTEsIDE4NTE1LCAxODUxOSwgMTg1MjMsIDE4NTI4LCAxODUzMywgMTg1MzksIDE4NTQ0LCAxODU0OSwgCi0gICAgMTg1NTMsIDE4NTU2LCAxODU1OSwgMTg1NjIsIDE4NTY1LCAxODU2OCwgMTg1NzEsIDE4NTc0LCAxODU3NywgMTg1ODAsIAotICAgIDE4NTg2LCAxODU5MCwgMTg1OTQsIDE4NTk4LCAxODYwMiwgMTg2MDYsIDE4NjEwLCAxODYxNCwgMTg2MTgsIDE4NjIzLCAKLSAgICAxODYyNywgMTg2MzIsIDE4NjM3LCAxODY0MywgMTg2NDgsIDE4NjU0LCAxODY2MCwgMTg2NjYsIDE4NjcyLCAxODY3OCwgCi0gICAgMTg2ODUsIDE4NjkyLCAxODcwMCwgMTg3MDgsIDE4NzE3LCAxODcyNiwgMTg3MzcsIDE4NzQ3LCAxODc1NywgMTg3NjgsIAotICAgIDE4Nzc5LCAxODc4OSwgMTg3OTksIDE4ODA5LCAxODgxOSwgMTg4MjksIDE4ODM5LCAxODg0OSwgMTg4NTksIDE4ODY3LCAKLSAgICAxODg3NCwgMTg4ODAsIDE4ODg3LCAxODg5MiwgMTg4OTgsIDE4OTA0LCAxODkxMCwgMTg5MTYsIDE4OTIyLCAxODkyOCwgCi0gICAgMTg5MzMsIDE4OTM5LCAxODk0NSwgMTg5NTEsIDE4OTU3LCAxODk2MiwgMTg5NzAsIDE4OTc3LCAxODk4MywgMTg5OTAsIAotICAgIDE4OTk4LCAxOTAwNCwgMTkwMTAsIDE5MDE2LCAxOTAyMiwgMTkwMzAsIDE5MDM4LCAxOTA0OCwgMTkwNTYsIDE5MDY0LCAKLSAgICAxOTA3MCwgMTkwNzUsIDE5MDgwLCAxOTA4NSwgMTkwOTAsIDE5MDk1LCAxOTEwMCwgMTkxMDUsIDE5MTEwLCAxOTExNSwgCi0gICAgMTkxMjEsIDE5MTI3LCAxOTEzMywgMTkxNDAsIDE5MTQ1LCAxOTE1MSwgMTkxNTYsIDE5MTYxLCAxOTE2NiwgMTkxNzEsIAotICAgIDE5MTc2LCAxOTE4MSwgMTkxODYsIDE5MTkxLCAxOTE5NiwgMTkyMDEsIDE5MjA2LCAxOTIxMSwgMTkyMTYsIDE5MjIxLCAKLSAgICAxOTIyNiwgMTkyMzEsIDE5MjM2LCAxOTI0MSwgMTkyNDYsIDE5MjUxLCAxOTI1NiwgMTkyNjEsIDE5MjY2LCAxOTI3MSwgCi0gICAgMTkyNzYsIDE5MjgxLCAxOTI4NiwgMTkyOTEsIDE5Mjk2LCAxOTMwMSwgMTkzMDYsIDE5MzExLCAxOTMxNiwgMTkzMjEsIAotICAgIDE5MzI2LCAxOTMzMSwgMTkzMzYsIDAsIDE5MzQxLCAwLCAwLCAwLCAwLCAwLCAxOTM0NiwgMCwgMCwgMTkzNTEsIDE5MzU1LCAKLSAgICAxOTM1OSwgMTkzNjMsIDE5MzY3LCAxOTM3MSwgMTkzNzUsIDE5Mzc5LCAxOTM4MywgMTkzODcsIDE5MzkxLCAxOTM5NSwgCi0gICAgMTkzOTksIDE5NDAzLCAxOTQwNywgMTk0MTEsIDE5NDE1LCAxOTQxOSwgMTk0MjMsIDE5NDI3LCAxOTQzMSwgMTk0MzUsIAotICAgIDE5NDM5LCAxOTQ0MywgMTk0NDcsIDE5NDUxLCAxOTQ1NSwgMTk0NTksIDE5NDYzLCAxOTQ2NywgMTk0NzEsIDE5NDc1LCAKLSAgICAxOTQ3OSwgMTk0ODMsIDE5NDg3LCAxOTQ5MSwgMTk0OTUsIDE5NDk5LCAxOTUwMywgMTk1MDcsIDE5NTExLCAxOTUxNSwgCi0gICAgMTk1MjEsIDE5NTI1LCAxOTUzMCwgMTk1MzUsIDE5NTM5LCAxOTU0NCwgMTk1NDksIDE5NTUzLCAxOTU1NywgMTk1NjEsIAotICAgIDE5NTY1LCAxOTU2OSwgMTk1NzMsIDE5NTc3LCAxOTU4MSwgMTk1ODUsIDE5NTg5LCAxOTU5MywgMTk1OTcsIDE5NjAxLCAKLSAgICAxOTYwNSwgMTk2MDksIDE5NjEzLCAxOTYxNywgMTk2MjEsIDE5NjI1LCAxOTYyOSwgMTk2MzMsIDE5NjM3LCAxOTY0MSwgCi0gICAgMTk2NDUsIDE5NjQ5LCAxOTY1MywgMTk2NTcsIDE5NjYxLCAxOTY2NSwgMTk2NjksIDE5NjczLCAxOTY3NywgMTk2ODEsIAotICAgIDE5Njg1LCAxOTY4OSwgMTk2OTMsIDE5Njk3LCAxOTcwMSwgMTk3MDUsIDE5NzA5LCAxOTcxMywgMTk3MTcsIDE5NzIxLCAKLSAgICAxOTcyNSwgMTk3MjksIDE5NzMzLCAxOTczNywgMTk3NDEsIDE5NzQ1LCAxOTc0OSwgMTk3NTMsIDE5NzU3LCAxOTc2MSwgCi0gICAgMTk3NjUsIDE5NzY5LCAxOTc3MywgMTk3NzcsIDE5NzgxLCAxOTc4NSwgMTk3ODksIDE5NzkzLCAxOTc5NywgMTk4MDEsIAotICAgIDE5ODA1LCAxOTgwOSwgMTk4MTMsIDE5ODE3LCAxOTgyMSwgMTk4MjUsIDE5ODI5LCAxOTgzMywgMTk4MzcsIDE5ODQxLCAKLSAgICAxOTg0NSwgMTk4NDksIDE5ODUzLCAxOTg1NywgMTk4NjEsIDE5ODY1LCAxOTg2OSwgMTk4NzMsIDE5ODc3LCAxOTg4MSwgCi0gICAgMTk4ODUsIDE5ODg5LCAxOTg5MywgMTk4OTcsIDE5OTAxLCAxOTkwNSwgMTk5MDksIDE5OTEzLCAxOTkxNywgMTk5MjEsIAotICAgIDE5OTI1LCAxOTkyOSwgMTk5MzMsIDE5OTM3LCAxOTk0MCwgMTk5NDQsIDE5OTQ3LCAxOTk1MSwgMTk5NTUsIDE5OTU4LCAKLSAgICAxOTk2MiwgMTk5NjYsIDE5OTY5LCAxOTk3MywgMTk5NzcsIDE5OTgxLCAxOTk4NSwgMTk5ODgsIDE5OTkyLCAxOTk5NiwgCi0gICAgMjAwMDAsIDIwMDA0LCAyMDAwOCwgMjAwMTIsIDIwMDE1LCAyMDAxOSwgMjAwMjMsIDIwMDI3LCAyMDAzMSwgMjAwMzUsIAotICAgIDIwMDM5LCAyMDA0MywgMjAwNDcsIDIwMDUxLCAyMDA1NSwgMjAwNTksIDIwMDYzLCAyMDA2NywgMjAwNzEsIDIwMDc1LCAKLSAgICAyMDA3OSwgMjAwODMsIDIwMDg3LCAyMDA5MSwgMjAwOTUsIDIwMDk5LCAyMDEwMywgMjAxMDcsIDIwMTExLCAyMDExNSwgCi0gICAgMjAxMTksIDIwMTIzLCAyMDEyNywgMjAxMzEsIDIwMTM1LCAyMDEzOSwgMjAxNDMsIDIwMTQ3LCAyMDE1MSwgMjAxNTUsIAotICAgIDIwMTU5LCAyMDE2MywgMjAxNjcsIDIwMTcxLCAyMDE3NSwgMjAxNzksIDIwMTgzLCAyMDE4NywgMjAxOTEsIDIwMTk1LCAKLSAgICAyMDE5OSwgMjAyMDMsIDIwMjA3LCAyMDIxMSwgMjAyMTUsIDIwMjE5LCAyMDIyMywgMjAyMjcsIDIwMjMxLCAyMDIzNSwgCi0gICAgMjAyMzksIDIwMjQzLCAyMDI0NywgMjAyNTEsIDIwMjU1LCAyMDI1OSwgMjAyNjMsIDIwMjY3LCAyMDI3MSwgMjAyNzUsIAotICAgIDIwMjc5LCAyMDI4MywgMjAyODcsIDIwMjkxLCAyMDI5NSwgMjAyOTksIDIwMzAzLCAyMDMwNywgMjAzMTEsIDIwMzE1LCAKLSAgICAyMDMxOSwgMjAzMjMsIDIwMzI3LCAyMDMzMSwgMjAzMzUsIDIwMzM5LCAyMDM0MywgMjAzNDcsIDIwMzUxLCAyMDM1NSwgCi0gICAgMjAzNTksIDIwMzYzLCAyMDM2NywgMjAzNzEsIDIwMzc1LCAyMDM3OSwgMjAzODMsIDIwMzg3LCAyMDM5MSwgMjAzOTUsIAotICAgIDIwMzk5LCAyMDQwMywgMjA0MDcsIDIwNDExLCAyMDQxNSwgMjA0MTksIDIwNDIzLCAyMDQyNywgMjA0MzEsIDIwNDM1LCAKLSAgICAyMDQzOSwgMjA0NDMsIDIwNDQ3LCAyMDQ1MSwgMjA0NTUsIDIwNDU5LCAyMDQ2MywgMjA0NjcsIDIwNDcxLCAyMDQ3NSwgCi0gICAgMjA0NzksIDIwNDgzLCAyMDQ4NywgMjA0OTEsIDIwNDk1LCAyMDQ5OSwgMjA1MDMsIDIwNTA3LCAyMDUxMSwgMjA1MTUsIAotICAgIDIwNTE5LCAyMDUyMywgMjA1MjcsIDIwNTMxLCAyMDUzNSwgMjA1MzksIDIwNTQzLCAyMDU0NywgMjA1NTEsIDIwNTU1LCAKLSAgICAyMDU1OSwgMjA1NjMsIDIwNTY3LCAyMDU3MCwgMjA1NzQsIDIwNTc4LCAyMDU4MiwgMjA1ODYsIDIwNTkwLCAyMDU5NCwgCi0gICAgMjA1OTgsIDIwNjAyLCAyMDYwNiwgMjA2MTAsIDIwNjE0LCAyMDYxOCwgMjA2MjIsIDIwNjI2LCAyMDYzMCwgMjA2MzQsIAotICAgIDIwNjM4LCAyMDY0MiwgMjA2NDYsIDIwNjUwLCAyMDY1NCwgMjA2NTgsIDIwNjYyLCAyMDY2NSwgMjA2NjksIDIwNjczLCAKLSAgICAyMDY3NywgMjA2ODEsIDIwNjg1LCAyMDY4OSwgMjA2OTMsIDIwNjk3LCAyMDcwMSwgMjA3MDUsIDIwNzA5LCAyMDcxMywgCi0gICAgMjA3MTcsIDIwNzIxLCAyMDcyNSwgMjA3MjgsIDIwNzMyLCAyMDczNiwgMjA3NDAsIDIwNzQ0LCAyMDc0OCwgMjA3NTIsIAotICAgIDIwNzU2LCAyMDc1OSwgMjA3NjMsIDIwNzY3LCAyMDc3MSwgMjA3NzUsIDIwNzc5LCAyMDc4MywgMjA3ODcsIDIwNzkxLCAKLSAgICAyMDc5NSwgMjA3OTksIDIwODAzLCAyMDgwNywgMjA4MTEsIDIwODE1LCAyMDgxOSwgMjA4MjMsIDIwODI3LCAyMDgzMSwgCi0gICAgMjA4MzUsIDIwODM5LCAyMDg0MywgMjA4NDcsIDIwODUxLCAwLCAyMDg1NSwgMjA4NTksIDIwODYzLCAyMDg2NywgMCwgMCwgCi0gICAgMjA4NzEsIDIwODc1LCAyMDg3OSwgMjA4ODMsIDIwODg3LCAyMDg5MSwgMjA4OTUsIDAsIDIwODk5LCAwLCAyMDkwMywgCi0gICAgMjA5MDcsIDIwOTExLCAyMDkxNSwgMCwgMCwgMjA5MTksIDIwOTIzLCAyMDkyNywgMjA5MzEsIDIwOTM1LCAyMDkzOSwgCi0gICAgMjA5NDMsIDIwOTQ3LCAyMDk1MSwgMjA5NTUsIDIwOTU5LCAyMDk2MywgMjA5NjcsIDIwOTcxLCAyMDk3NSwgMjA5NzksIAotICAgIDIwOTgzLCAyMDk4NywgMjA5OTEsIDIwOTk1LCAyMDk5OSwgMjEwMDMsIDIxMDA3LCAyMTAxMCwgMjEwMTQsIDIxMDE4LCAKLSAgICAyMTAyMiwgMjEwMjYsIDIxMDMwLCAyMTAzNCwgMjEwMzgsIDIxMDQyLCAyMTA0NiwgMjEwNTAsIDIxMDU0LCAyMTA1OCwgCi0gICAgMjEwNjIsIDIxMDY2LCAyMTA3MCwgMjEwNzQsIDIxMDc4LCAwLCAyMTA4MiwgMjEwODYsIDIxMDkwLCAyMTA5NCwgMCwgMCwgCi0gICAgMjEwOTgsIDIxMTAxLCAyMTEwNSwgMjExMDksIDIxMTEzLCAyMTExNywgMjExMjEsIDIxMTI1LCAyMTEyOSwgMjExMzMsIAotICAgIDIxMTM3LCAyMTE0MSwgMjExNDUsIDIxMTQ5LCAyMTE1MywgMjExNTcsIDIxMTYxLCAyMTE2NiwgMjExNzEsIDIxMTc2LCAKLSAgICAyMTE4MiwgMjExODgsIDIxMTkzLCAyMTE5OCwgMjEyMDQsIDIxMjA3LCAyMTIxMSwgMjEyMTUsIDIxMjE5LCAyMTIyMywgCi0gICAgMjEyMjcsIDIxMjMxLCAyMTIzNSwgMCwgMjEyMzksIDIxMjQzLCAyMTI0NywgMjEyNTEsIDAsIDAsIDIxMjU1LCAyMTI1OSwgCi0gICAgMjEyNjMsIDIxMjY3LCAyMTI3MSwgMjEyNzUsIDIxMjc5LCAwLCAyMTI4MywgMCwgMjEyODcsIDIxMjkxLCAyMTI5NSwgCi0gICAgMjEyOTksIDAsIDAsIDIxMzAzLCAyMTMwNywgMjEzMTEsIDIxMzE1LCAyMTMxOSwgMjEzMjMsIDIxMzI3LCAyMTMzMSwgCi0gICAgMjEzMzUsIDIxMzQwLCAyMTM0NSwgMjEzNTAsIDIxMzU2LCAyMTM2MiwgMjEzNjcsIDAsIDIxMzcyLCAyMTM3NiwgMjEzODAsIAotICAgIDIxMzg0LCAyMTM4OCwgMjEzOTIsIDIxMzk2LCAyMTQwMCwgMjE0MDQsIDIxNDA4LCAyMTQxMiwgMjE0MTYsIDIxNDIwLCAKLSAgICAyMTQyNCwgMjE0MjgsIDIxNDMyLCAyMTQzNiwgMjE0MzksIDIxNDQzLCAyMTQ0NywgMjE0NTEsIDIxNDU1LCAyMTQ1OSwgCi0gICAgMjE0NjMsIDIxNDY3LCAyMTQ3MSwgMjE0NzUsIDIxNDc5LCAyMTQ4MywgMjE0ODcsIDIxNDkxLCAyMTQ5NSwgMjE0OTksIAotICAgIDIxNTAzLCAyMTUwNywgMjE1MTEsIDIxNTE1LCAyMTUxOSwgMjE1MjMsIDIxNTI3LCAyMTUzMSwgMjE1MzUsIDIxNTM5LCAKLSAgICAyMTU0MywgMjE1NDcsIDIxNTUxLCAyMTU1NSwgMjE1NTksIDIxNTYzLCAyMTU2NywgMjE1NzEsIDIxNTc1LCAyMTU3OSwgCi0gICAgMjE1ODMsIDIxNTg3LCAyMTU5MSwgMjE1OTUsIDAsIDIxNTk5LCAyMTYwMywgMjE2MDcsIDIxNjExLCAwLCAwLCAyMTYxNSwgCi0gICAgMjE2MTksIDIxNjIzLCAyMTYyNywgMjE2MzEsIDIxNjM1LCAyMTYzOSwgMjE2NDMsIDIxNjQ3LCAyMTY1MSwgMjE2NTUsIAotICAgIDIxNjU5LCAyMTY2MywgMjE2NjcsIDIxNjcxLCAyMTY3NSwgMjE2NzksIDIxNjgzLCAyMTY4NywgMjE2OTEsIDIxNjk1LCAKLSAgICAyMTY5OSwgMjE3MDMsIDIxNzA3LCAyMTcxMSwgMjE3MTUsIDIxNzE5LCAyMTcyMywgMjE3MjcsIDIxNzMxLCAyMTczNSwgCi0gICAgMjE3MzksIDIxNzQzLCAyMTc0NywgMjE3NTEsIDIxNzU1LCAyMTc1OSwgMjE3NjMsIDIxNzY3LCAyMTc3MSwgMjE3NzUsIAotICAgIDIxNzc5LCAyMTc4MywgMjE3ODcsIDIxNzkxLCAyMTc5NSwgMjE3OTksIDIxODAzLCAyMTgwNywgMjE4MTEsIDIxODE1LCAKLSAgICAyMTgxOSwgMjE4MjMsIDIxODI3LCAyMTgzMSwgMjE4MzUsIDIxODM5LCAyMTg0MiwgMjE4NDYsIDIxODUwLCAyMTg1NCwgCi0gICAgMjE4NTgsIDIxODYyLCAyMTg2NiwgMjE4NzAsIDIxODc0LCAyMTg3OCwgMCwgMCwgMjE4ODIsIDIxODkxLCAyMTg5NywgCi0gICAgMjE5MDIsIDIxOTA2LCAyMTkwOSwgMjE5MTQsIDIxOTE3LCAyMTkyMCwgMjE5MjMsIDIxOTI4LCAyMTkzMiwgMjE5MzcsIAotICAgIDIxOTQwLCAyMTk0MywgMjE5NDYsIDIxOTQ5LCAyMTk1MiwgMjE5NTUsIDIxOTU4LCAyMTk2MSwgMjE5NjQsIDIxOTY4LCAKLSAgICAyMTk3MiwgMjE5NzYsIDIxOTgwLCAyMTk4NCwgMjE5ODgsIDIxOTkyLCAyMTk5NiwgMjIwMDAsIDIyMDA0LCAwLCAwLCAwLCAKLSAgICAyMjAxMCwgMjIwMTYsIDIyMDIwLCAyMjAyNCwgMjIwMjgsIDIyMDM0LCAyMjAzOCwgMjIwNDIsIDIyMDQ2LCAyMjA1MiwgCi0gICAgMjIwNTYsIDIyMDYwLCAyMjA2NCwgMjIwNzAsIDIyMDc0LCAyMjA3OCwgMjIwODIsIDIyMDg4LCAyMjA5NCwgMjIxMDAsIAotICAgIDIyMTA4LCAyMjExNCwgMjIxMjAsIDIyMTI2LCAyMjEzMiwgMjIxMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTQ0LCAyMjE0NywgCi0gICAgMjIxNTAsIDIyMTUzLCAyMjE1NiwgMjIxNTksIDIyMTYzLCAyMjE2NywgMjIxNzAsIDIyMTc0LCAyMjE3OCwgMjIxODIsIAotICAgIDIyMTg2LCAyMjE5MCwgMjIxOTMsIDIyMTk3LCAyMjIwMSwgMjIyMDUsIDIyMjA5LCAyMjIxMywgMjIyMTcsIDIyMjIxLCAKLSAgICAyMjIyNSwgMjIyMjksIDIyMjMzLCAyMjIzNywgMjIyNDAsIDIyMjQ0LCAyMjI0OCwgMjIyNTIsIDIyMjU2LCAyMjI1OSwgCi0gICAgMjIyNjMsIDIyMjY3LCAyMjI3MSwgMjIyNzUsIDIyMjc5LCAyMjI4MywgMjIyODcsIDIyMjkxLCAyMjI5NSwgMjIyOTksIAotICAgIDIyMzAzLCAyMjMwNywgMjIzMTEsIDIyMzE0LCAyMjMxOCwgMjIzMjIsIDIyMzI2LCAyMjMzMCwgMjIzMzQsIDIyMzM4LCAKLSAgICAyMjM0MiwgMjIzNDYsIDIyMzUwLCAyMjM1NCwgMjIzNTgsIDIyMzYyLCAyMjM2NiwgMjIzNzAsIDIyMzc0LCAyMjM3OCwgCi0gICAgMjIzODIsIDIyMzg2LCAyMjM5MCwgMjIzOTQsIDIyMzk4LCAyMjQwMiwgMjI0MDYsIDIyNDEwLCAyMjQxNCwgMjI0MTgsIAotICAgIDIyNDIyLCAyMjQyNiwgMjI0MzAsIDIyNDM0LCAyMjQzOCwgMjI0NDIsIDIyNDQ2LCAyMjQ1MCwgMjI0NTMsIDIyNDU3LCAKLSAgICAyMjQ2MSwgMjI0NjUsIDIyNDY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjQ3MywgMjI0NzcsIAotICAgIDIyNDgwLCAyMjQ4NCwgMjI0ODcsIDIyNDkxLCAyMjQ5NCwgMjI0OTgsIDIyNTA0LCAyMjUwOSwgMjI1MTMsIDIyNTE2LCAKLSAgICAyMjUyMCwgMjI1MjQsIDIyNTI5LCAyMjUzMywgMjI1MzgsIDIyNTQyLCAyMjU0NywgMjI1NTEsIDIyNTU2LCAyMjU2MCwgCi0gICAgMjI1NjUsIDIyNTcxLCAyMjU3NSwgMjI1ODAsIDIyNTg0LCAyMjU4OSwgMjI1OTUsIDIyNTk5LCAyMjYwNSwgMjI2MTEsIAotICAgIDIyNjE1LCAyMjYyMCwgMjI2MjgsIDIyNjM2LCAyMjY0MywgMjI2NDgsIDIyNjUzLCAyMjY2MiwgMjI2NjksIDIyNjc2LCAKLSAgICAyMjY4MSwgMjI2ODcsIDIyNjkxLCAyMjY5NSwgMjI2OTksIDIyNzAzLCAyMjcwNywgMjI3MTEsIDIyNzE1LCAyMjcxOSwgCi0gICAgMjI3MjMsIDIyNzI3LCAyMjczMywgMjI3MzgsIDIyNzQzLCAyMjc0NiwgMjI3NTAsIDIyNzU0LCAyMjc1OSwgMjI3NjMsIAotICAgIDIyNzY4LCAyMjc3MiwgMjI3NzcsIDIyNzgxLCAyMjc4NiwgMjI3OTAsIDIyNzk1LCAyMjc5OSwgMjI4MDQsIDIyODA4LCAKLSAgICAyMjgxMywgMjI4MTksIDIyODIzLCAyMjgyOCwgMjI4MzMsIDIyODM3LCAyMjg0MSwgMjI4NDUsIDIyODQ5LCAyMjg1MiwgCi0gICAgMjI4NTYsIDIyODYyLCAyMjg2NywgMjI4NzIsIDIyODc2LCAyMjg4MCwgMjI4ODQsIDIyODg5LCAyMjg5MywgMjI4OTgsIAotICAgIDIyOTAyLCAyMjkwNywgMjI5MTAsIDIyOTE0LCAyMjkxOCwgMjI5MjMsIDIyOTI3LCAyMjkzMiwgMjI5MzYsIDIyOTQxLCAKLSAgICAyMjk0NywgMjI5NTEsIDIyOTU1LCAyMjk1OSwgMjI5NjMsIDIyOTY3LCAyMjk3MSwgMjI5NzUsIDIyOTc5LCAyMjk4MywgCi0gICAgMjI5ODcsIDIyOTkxLCAyMjk5NywgMjMwMDAsIDIzMDA0LCAyMzAwOCwgMjMwMTMsIDIzMDE3LCAyMzAyMiwgMjMwMjYsIAotICAgIDIzMDMxLCAyMzAzNSwgMjMwNDAsIDIzMDQ0LCAyMzA0OSwgMjMwNTMsIDIzMDU4LCAyMzA2MiwgMjMwNjcsIDIzMDczLCAKLSAgICAyMzA3NywgMjMwODEsIDIzMDg3LCAyMzA5MywgMjMwOTksIDIzMTA1LCAyMzEwOSwgMjMxMTMsIDIzMTE3LCAyMzEyMSwgCi0gICAgMjMxMjUsIDIzMTI5LCAyMzEzNSwgMjMxMzksIDIzMTQzLCAyMzE0NywgMjMxNTIsIDIzMTU2LCAyMzE2MSwgMjMxNjUsIAotICAgIDIzMTcwLCAyMzE3NCwgMjMxNzksIDIzMTgzLCAyMzE4OCwgMjMxOTIsIDIzMTk3LCAyMzIwMSwgMjMyMDYsIDIzMjEyLCAKLSAgICAyMzIxNiwgMjMyMjIsIDIzMjI2LCAyMzIzMCwgMjMyMzQsIDIzMjM4LCAyMzI0MiwgMjMyNDYsIDIzMjUyLCAyMzI1NSwgCi0gICAgMjMyNTksIDIzMjYzLCAyMzI2OCwgMjMyNzIsIDIzMjc3LCAyMzI4MSwgMjMyODYsIDIzMjkwLCAyMzI5NSwgMjMyOTksIAotICAgIDIzMzA0LCAyMzMwOCwgMjMzMTMsIDIzMzE3LCAyMzMyMiwgMjMzMjgsIDIzMzMxLCAyMzMzNSwgMjMzMzksIDIzMzQ0LCAKLSAgICAyMzM0OSwgMjMzNTMsIDIzMzU3LCAyMzM2MSwgMjMzNjUsIDIzMzY5LCAyMzM3MywgMjMzNzksIDIzMzgyLCAyMzM4NiwgCi0gICAgMjMzOTAsIDIzMzk1LCAyMzM5OSwgMjM0MDQsIDIzNDA4LCAyMzQxMywgMjM0MTksIDIzNDIzLCAyMzQyOCwgMjM0MzIsIAotICAgIDIzNDM2LCAyMzQ0MCwgMjM0NDQsIDIzNDQ4LCAyMzQ1MiwgMjM0NTYsIDIzNDYyLCAyMzQ2NiwgMjM0NzAsIDIzNDc0LCAKLSAgICAyMzQ3OSwgMjM0ODMsIDIzNDg4LCAyMzQ5MiwgMjM0OTcsIDIzNTAxLCAyMzUwNiwgMjM1MTAsIDIzNTE1LCAyMzUxOSwgCi0gICAgMjM1MjQsIDIzNTI4LCAyMzUzMywgMjM1MzYsIDIzNTQwLCAyMzU0NCwgMjM1NDgsIDIzNTUyLCAyMzU1NiwgMjM1NjAsIAotICAgIDIzNTY0LCAyMzU2OCwgMjM1NzQsIDIzNTc3LCAyMzU4MSwgMjM1ODUsIDIzNTkwLCAyMzU5NCwgMjM1OTksIDIzNjAzLCAKLSAgICAyMzYwOCwgMjM2MTIsIDIzNjE3LCAyMzYyMSwgMjM2MjYsIDIzNjMwLCAyMzYzNSwgMjM2MzksIDIzNjQ0LCAyMzY1MCwgCi0gICAgMjM2NTQsIDIzNjYwLCAyMzY2NCwgMjM2NzAsIDIzNjc2LCAyMzY4MiwgMjM2ODgsIDIzNjk0LCAyMzcwMCwgMjM3MDYsIAotICAgIDIzNzEyLCAyMzcxNiwgMjM3MjAsIDIzNzI0LCAyMzcyOCwgMjM3MzIsIDIzNzM2LCAyMzc0MCwgMjM3NDQsIDIzNzQ5LCAKLSAgICAyMzc1MywgMjM3NTgsIDIzNzYyLCAyMzc2NywgMjM3NzEsIDIzNzc2LCAyMzc4MCwgMjM3ODUsIDIzNzg5LCAyMzc5NCwgCi0gICAgMjM3OTgsIDIzODAzLCAyMzgwNywgMjM4MTEsIDIzODE1LCAyMzgxOSwgMjM4MjMsIDIzODI3LCAyMzgzMSwgMjM4MzcsIAotICAgIDIzODQwLCAyMzg0NCwgMjM4NDgsIDIzODUzLCAyMzg1NywgMjM4NjIsIDIzODY2LCAyMzg3MSwgMjM4NzUsIDIzODgwLCAKLSAgICAyMzg4NCwgMjM4ODksIDIzODkzLCAyMzg5OCwgMjM5MDIsIDIzOTA3LCAyMzkxMywgMjM5MTcsIDIzOTIzLCAyMzkyOCwgCi0gICAgMjM5MzQsIDIzOTM4LCAyMzk0NCwgMjM5NDksIDIzOTUzLCAyMzk1NywgMjM5NjEsIDIzOTY1LCAyMzk2OSwgMjM5NzQsIAotICAgIDIzOTc3LCAyMzk4MSwgMjM5ODYsIDIzOTkwLCAyMzk5NSwgMjM5OTgsIDI0MDAyLCAyNDAwNiwgMjQwMTAsIDI0MDE0LCAKLSAgICAyNDAxOCwgMjQwMjIsIDI0MDI2LCAyNDAzMCwgMjQwMzQsIDI0MDM4LCAyNDA0MiwgMjQwNDcsIDI0MDUxLCAyNDA1NSwgCi0gICAgMjQwNjEsIDI0MDY1LCAyNDA3MSwgMjQwNzUsIDI0MDgxLCAyNDA4NSwgMjQwODksIDI0MDkzLCAyNDA5NywgMjQxMDEsIAotICAgIDI0MTA2LCAyNDExMCwgMjQxMTQsIDI0MTE4LCAyNDEyMiwgMjQxMjYsIDI0MTMwLCAyNDEzNCwgMjQxMzgsIDI0MTQyLCAKLSAgICAyNDE0NiwgMjQxNTIsIDI0MTU4LCAyNDE2NCwgMjQxNzAsIDI0MTc2LCAyNDE4MSwgMjQxODcsIDI0MTkzLCAyNDE5OSwgCi0gICAgMjQyMDMsIDI0MjA3LCAyNDIxMSwgMjQyMTUsIDI0MjE5LCAyNDIyMywgMjQyMjcsIDI0MjMxLCAyNDIzNSwgMjQyMzksIAotICAgIDI0MjQzLCAyNDI0NywgMjQyNTEsIDI0MjU2LCAyNDI2MSwgMjQyNjYsIDI0MjcwLCAyNDI3NCwgMjQyNzgsIDI0MjgyLCAKLSAgICAyNDI4NiwgMjQyOTAsIDI0Mjk0LCAyNDI5OCwgMjQzMDIsIDI0MzA2LCAyNDMxMiwgMjQzMTgsIDI0MzI0LCAyNDMzMCwgCi0gICAgMjQzMzYsIDI0MzQyLCAyNDM0OCwgMjQzNTQsIDI0MzYwLCAyNDM2NCwgMjQzNjgsIDI0MzcyLCAyNDM3NiwgMjQzODAsIAotICAgIDI0Mzg0LCAyNDM4OCwgMjQzOTQsIDI0NDAwLCAyNDQwNiwgMjQ0MTIsIDI0NDE4LCAyNDQyNCwgMjQ0MzAsIDI0NDM2LCAKLSAgICAyNDQ0MiwgMjQ0NDcsIDI0NDUyLCAyNDQ1NywgMjQ0NjIsIDI0NDY4LCAyNDQ3NCwgMjQ0ODAsIDI0NDg2LCAyNDQ5MiwgCi0gICAgMjQ0OTgsIDI0NTA0LCAyNDUwOSwgMjQ1MTUsIDI0NTIxLCAyNDUyNywgMjQ1MzIsIDI0NTM4LCAyNDU0NCwgMjQ1NTAsIAotICAgIDI0NTU1LCAyNDU2MCwgMjQ1NjUsIDI0NTcwLCAyNDU3NSwgMjQ1ODAsIDI0NTg1LCAyNDU5MCwgMjQ1OTUsIDI0NjAwLCAKLSAgICAyNDYwNSwgMjQ2MTAsIDI0NjE0LCAyNDYxOSwgMjQ2MjQsIDI0NjI5LCAyNDYzNCwgMjQ2MzksIDI0NjQ0LCAyNDY0OSwgCi0gICAgMjQ2NTQsIDI0NjU5LCAyNDY2NCwgMjQ2NjksIDI0Njc0LCAyNDY3OSwgMjQ2ODQsIDI0Njg5LCAyNDY5NCwgMjQ2OTksIAotICAgIDI0NzA0LCAyNDcwOSwgMjQ3MTQsIDI0NzE5LCAyNDcyNCwgMjQ3MjksIDI0NzM0LCAyNDczOSwgMjQ3NDQsIDI0NzQ5LCAKLSAgICAyNDc1NCwgMjQ3NTksIDI0NzYzLCAyNDc2OCwgMjQ3NzMsIDI0Nzc4LCAyNDc4MywgMjQ3ODgsIDI0NzkzLCAyNDc5OCwgCi0gICAgMjQ4MDMsIDI0ODA4LCAyNDgxMywgMjQ4MTgsIDI0ODIzLCAyNDgyOCwgMjQ4MzMsIDI0ODM4LCAyNDg0MywgMjQ4NDgsIAotICAgIDI0ODUzLCAyNDg1OCwgMjQ4NjMsIDI0ODY4LCAyNDg3MywgMjQ4NzgsIDI0ODgzLCAyNDg4OCwgMjQ4OTIsIDI0ODk3LCAKLSAgICAyNDkwMiwgMjQ5MDcsIDI0OTEyLCAyNDkxNywgMjQ5MjEsIDI0OTI2LCAyNDkzMSwgMjQ5MzYsIDI0OTQxLCAyNDk0NiwgCi0gICAgMjQ5NTAsIDI0OTU1LCAyNDk2MSwgMjQ5NjYsIDI0OTcxLCAyNDk3NiwgMjQ5ODEsIDI0OTg3LCAyNDk5MiwgMjQ5OTcsIAotICAgIDI1MDAyLCAyNTAwNywgMjUwMTIsIDI1MDE3LCAyNTAyMiwgMjUwMjcsIDI1MDMyLCAyNTAzNywgMjUwNDIsIDI1MDQ3LCAKLSAgICAyNTA1MiwgMjUwNTcsIDI1MDYyLCAyNTA2NywgMjUwNzIsIDI1MDc3LCAyNTA4MiwgMjUwODcsIDI1MDkyLCAyNTA5NywgCi0gICAgMjUxMDIsIDI1MTA3LCAyNTExMiwgMjUxMTcsIDI1MTIyLCAyNTEyNywgMjUxMzIsIDI1MTM3LCAyNTE0MiwgMjUxNDcsIAotICAgIDI1MTUyLCAyNTE1NywgMjUxNjIsIDI1MTY3LCAyNTE3MiwgMjUxNzcsIDI1MTgyLCAyNTE4NywgMjUxOTIsIDI1MTk3LCAKLSAgICAyNTIwMiwgMjUyMDcsIDI1MjEzLCAyNTIxOCwgMjUyMjMsIDI1MjI4LCAyNTIzMywgMjUyMzgsIDI1MjQzLCAyNTI0OCwgCi0gICAgMjUyNTMsIDI1MjU4LCAyNTI2MywgMjUyNjgsIDI1MjcyLCAyNTI3NywgMjUyODIsIDI1Mjg3LCAyNTI5MiwgMjUyOTcsIAotICAgIDI1MzAyLCAyNTMwNywgMjUzMTIsIDI1MzE3LCAyNTMyMiwgMjUzMjcsIDI1MzMyLCAyNTMzNywgMjUzNDIsIDI1MzQ3LCAKLSAgICAyNTM1MiwgMjUzNTcsIDI1MzYyLCAyNTM2NywgMjUzNzIsIDI1Mzc3LCAyNTM4MiwgMjUzODcsIDI1MzkyLCAyNTM5NywgCi0gICAgMjU0MDIsIDI1NDA4LCAyNTQxMiwgMjU0MTYsIDI1NDIwLCAyNTQyNCwgMjU0MjgsIDI1NDMyLCAyNTQzNiwgMjU0NDAsIAotICAgIDI1NDQ2LCAyNTQ1MiwgMjU0NTgsIDI1NDY0LCAyNTQ3MCwgMjU0NzYsIDI1NDgyLCAyNTQ4OSwgMjU0OTUsIDI1NTAwLCAKLSAgICAyNTUwNSwgMjU1MTAsIDI1NTE1LCAyNTUyMCwgMjU1MjUsIDI1NTMwLCAyNTUzNSwgMjU1NDAsIDI1NTQ1LCAyNTU1MCwgCi0gICAgMjU1NTUsIDI1NTYwLCAyNTU2NSwgMjU1NzAsIDI1NTc1LCAyNTU4MCwgMjU1ODUsIDI1NTkwLCAyNTU5NSwgMjU2MDAsIAotICAgIDI1NjA1LCAyNTYxMCwgMjU2MTUsIDI1NjIwLCAyNTYyNSwgMjU2MzAsIDI1NjM1LCAwLCAwLCAwLCAyNTY0MiwgMjU2NTIsIAotICAgIDI1NjU2LCAyNTY2MywgMjU2NjcsIDI1NjcxLCAyNTY3NSwgMjU2ODMsIDI1Njg3LCAyNTY5MiwgMjU2OTcsIDI1NzAyLCAKLSAgICAyNTcwNiwgMjU3MTEsIDI1NzE2LCAyNTcxOSwgMjU3MjMsIDI1NzI3LCAyNTczNiwgMjU3NDAsIDI1NzQ0LCAyNTc1MCwgCi0gICAgMjU3NTQsIDI1NzU4LCAyNTc2NiwgMjU3NzAsIDI1Nzc4LCAyNTc4NCwgMjU3OTAsIDI1Nzk2LCAyNTgwMiwgMjU4MTIsIAotICAgIDI1ODE4LCAyNTgyMiwgMjU4MzEsIDI1ODM0LCAyNTg0MCwgMjU4NDQsIDI1ODUwLCAyNTg1NSwgMjU4NjEsIDI1ODY5LCAKLSAgICAyNTg3NSwgMjU4ODEsIDI1ODg5LCAyNTg5NSwgMjU4OTksIDI1OTAzLCAyNTkxMywgMjU5MTksIDI1OTIzLCAyNTkzMywgCi0gICAgMjU5MzksIDI1OTQzLCAyNTk0NywgMjU5NTQsIDI1OTYxLCAyNTk2NiwgMjU5NzEsIDI1OTgwLCAyNTk4NCwgMjU5ODgsIAotICAgIDI1OTkyLCAyNjAwMCwgMjYwMDcsIDI2MDExLCAyNjAxNSwgMjYwMTksIDI2MDIzLCAyNjAyNywgMjYwMzEsIDI2MDM1LCAKLSAgICAyNjAzOSwgMjYwNDMsIDI2MDQ3LCAyNjA1MSwgMjYwNTYsIDI2MDYxLCAyNjA2NiwgMjYwNzAsIDI2MDc0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjA3OCwgMjYwODIsIDI2MDg2LCAyNjA5MCwgMjYwOTQsIAotICAgIDI2MDk5LCAyNjEwNCwgMjYxMDksIDI2MTE0LCAyNjExOCwgMjYxMjIsIDI2MTI3LCAyNjEzMSwgMCwgMjYxMzUsIDI2MTQwLCAKLSAgICAyNjE0NSwgMjYxNDksIDI2MTUzLCAyNjE1OCwgMjYxNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI2MTY4LCAyNjE3MiwgMjYxNzYsIDI2MTgwLCAyNjE4NCwgMjYxODksIDI2MTk0LCAyNjE5OSwgMjYyMDQsIDI2MjA4LCAKLSAgICAyNjIxMiwgMjYyMTcsIDI2MjIxLCAyNjIyNSwgMjYyMjksIDI2MjM0LCAyNjIzOSwgMjYyNDMsIDI2MjQ3LCAyNjI1MiwgCi0gICAgMjYyNTcsIDI2MjYyLCAyNjI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyNzMsIDI2Mjc3LCAyNjI4MSwgCi0gICAgMjYyODUsIDI2Mjg5LCAyNjI5NCwgMjYyOTksIDI2MzA0LCAyNjMwOSwgMjYzMTMsIDI2MzE3LCAyNjMyMiwgMjYzMjYsIAotICAgIDI2MzMwLCAyNjMzNCwgMjYzMzksIDI2MzQ0LCAyNjM0OCwgMjYzNTIsIDI2MzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAyNjM2MiwgMjYzNjYsIDI2MzcwLCAyNjM3NCwgMjYzNzgsIDI2MzgzLCAyNjM4OCwgMjYzOTMsIAotICAgIDI2Mzk4LCAyNjQwMiwgMjY0MDYsIDI2NDExLCAyNjQxNSwgMCwgMjY0MTksIDI2NDI0LCAyNjQyOSwgMCwgMjY0MzMsIAotICAgIDI2NDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQ0MywgMjY0NDYsIDI2NDUwLCAyNjQ1NCwgCi0gICAgMjY0NTgsIDI2NDYyLCAyNjQ2NiwgMjY0NzAsIDI2NDc0LCAyNjQ3OCwgMjY0ODIsIDI2NDg2LCAyNjQ5MCwgMjY0OTQsIAotICAgIDI2NDk4LCAyNjUwMiwgMjY1MDYsIDI2NTEwLCAyNjUxMywgMjY1MTcsIDI2NTIxLCAyNjUyNSwgMjY1MjksIDI2NTMzLCAKLSAgICAyNjUzNywgMjY1NDEsIDI2NTQ1LCAyNjU0OSwgMjY1NTMsIDI2NTU3LCAyNjU2MSwgMjY1NjUsIDI2NTY4LCAyNjU3MSwgCi0gICAgMjY1NzUsIDI2NTc5LCAyNjU4NSwgMjY1OTEsIDI2NTk3LCAyNjYwMywgMjY2MDksIDI2NjE1LCAyNjYyMSwgMjY2MjcsIAotICAgIDI2NjMzLCAyNjYzOSwgMjY2NDUsIDI2NjUxLCAyNjY1NywgMjY2NjMsIDI2NjcyLCAyNjY4MSwgMjY2ODcsIDI2NjkzLCAKLSAgICAyNjY5OSwgMjY3MDQsIDI2NzA4LCAyNjcxMywgMjY3MTgsIDI2NzIzLCAyNjcyNywgMjY3MzIsIDI2NzM3LCAyNjc0MiwgCi0gICAgMjY3NDYsIDI2NzUxLCAyNjc1NSwgMjY3NjAsIDI2NzY1LCAyNjc3MCwgMjY3NzUsIDI2Nzc5LCAyNjc4MywgMjY3ODcsIAotICAgIDI2NzkxLCAyNjc5NSwgMjY3OTksIDI2ODAzLCAyNjgwNywgMjY4MTEsIDI2ODE1LCAyNjgyMSwgMjY4MjUsIDI2ODI5LCAKLSAgICAyNjgzMywgMjY4MzcsIDI2ODQxLCAyNjg0OSwgMjY4NTUsIDI2ODU5LCAyNjg2NSwgMjY4NjksIDI2ODc1LCAyNjg3OSwgMCwgCi0gICAgMCwgMjY4ODMsIDI2ODg3LCAyNjg5MCwgMjY4OTMsIDI2ODk2LCAyNjg5OSwgMjY5MDIsIDI2OTA1LCAyNjkwOCwgMjY5MTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTE0LCAyNjkyMiwgMjY5MzAsIDI2OTM4LCAyNjk0NiwgMjY5NTQsIDI2OTYyLCAyNjk3MCwgCi0gICAgMjY5NzgsIDI2OTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAyNjk5NCwgMjY5OTcsIDI3MDAwLCAyNzAwMywgMjcwMDgsIDI3MDExLCAKLSAgICAyNzAxNiwgMjcwMjMsIDI3MDMxLCAyNzAzNiwgMjcwNDMsIDI3MDQ2LCAyNzA1MywgMjcwNjAsIDI3MDY3LCAwLCAyNzA3MSwgCi0gICAgMjcwNzUsIDI3MDc4LCAyNzA4MSwgMjcwODQsIDI3MDg3LCAyNzA5MCwgMjcwOTMsIDI3MDk2LCAyNzA5OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjcxMDIsIDI3MTA1LCAyNzEwOCwgMjcxMTEsIDI3MTE0LCAyNzExNywgMjcxMjEsIDI3MTI1LCAyNzEyOSwgCi0gICAgMjcxMzIsIDI3MTM2LCAyNzE0MCwgMjcxNDMsIDI3MTQ3LCAyNzE1MSwgMjcxNTQsIDI3MTU4LCAyNzE2MSwgMjcxNjUsIAotICAgIDI3MTY5LCAyNzE3MywgMjcxNzcsIDI3MTgxLCAyNzE4NCwgMjcxODcsIDI3MTkxLCAyNzE5NSwgMjcxOTgsIDI3MjAyLCAKLSAgICAyNzIwNiwgMjcyMTAsIDI3MjE0LCAyNzIxOCwgMjcyMjIsIDI3MjI2LCAyNzIzMCwgMjcyMzcsIDI3MjQyLCAyNzI0NywgCi0gICAgMjcyNTIsIDI3MjU3LCAyNzI2MywgMjcyNjksIDI3Mjc1LCAyNzI4MSwgMjcyODYsIDI3MjkyLCAyNzI5OCwgMjczMDMsIAotICAgIDI3MzA5LCAyNzMxNSwgMjczMjEsIDI3MzI3LCAyNzMzMywgMjczMzgsIDI3MzQ0LCAyNzM0OSwgMjczNTUsIDI3MzYxLCAKLSAgICAyNzM2NywgMjczNzMsIDI3Mzc5LCAyNzM4NCwgMjczODksIDI3Mzk1LCAyNzQwMSwgMjc0MDYsIDI3NDEyLCAyNzQxNywgCi0gICAgMjc0MjMsIDI3NDI4LCAyNzQzMywgMjc0MzksIDI3NDQ1LCAyNzQ1MSwgMjc0NTcsIDI3NDYzLCAyNzQ2OSwgMjc0NzUsIAotICAgIDI3NDgxLCAyNzQ4NywgMjc0OTMsIDI3NDk5LCAyNzUwNSwgMjc1MTAsIDI3NTE1LCAyNzUyMCwgMjc1MjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI3NTMyLCAyNzU0MSwgMjc1NTAsIDI3NTU4LCAyNzU2NiwgMjc1NzYsIDI3NTg0LCAyNzU5MywgCi0gICAgMjc2MDAsIDI3NjA3LCAyNzYxNCwgMjc2MjIsIDI3NjMwLCAyNzYzOCwgMjc2NDYsIDI3NjU0LCAyNzY2MiwgMjc2NzAsIAotICAgIDI3Njc4LCAyNzY4NSwgMjc2OTMsIDI3NzAxLCAyNzcwOSwgMjc3MTcsIDI3NzI1LCAyNzczNSwgMjc3NDUsIDI3NzU1LCAKLSAgICAyNzc2NSwgMjc3NzUsIDI3Nzg1LCAyNzc5NSwgMjc4MDUsIDI3ODE1LCAyNzgyNSwgMjc4MzUsIDI3ODQ1LCAyNzg1NSwgCi0gICAgMjc4NjUsIDI3ODczLCAyNzg4MSwgMjc4OTEsIDI3ODk5LCAwLCAwLCAwLCAwLCAwLCAyNzkwOSwgMjc5MTMsIDI3OTE3LCAKLSAgICAyNzkyMSwgMjc5MjUsIDI3OTI5LCAyNzkzMywgMjc5MzcsIDI3OTQxLCAyNzk0NSwgMjc5NDksIDI3OTUzLCAyNzk1NywgCi0gICAgMjc5NjEsIDI3OTY1LCAyNzk2OSwgMjc5NzMsIDI3OTc3LCAyNzk4MSwgMjc5ODUsIDI3OTg5LCAyNzk5MywgMjc5OTcsIAotICAgIDI4MDAxLCAyODAwNywgMjgwMTEsIDI4MDE3LCAyODAyMSwgMjgwMjcsIDI4MDMxLCAyODAzNywgMjgwNDEsIDI4MDQ1LCAKLSAgICAyODA0OSwgMjgwNTMsIDI4MDU3LCAyODA2MSwgMjgwNjcsIDI4MDczLCAyODA3OSwgMjgwODUsIDI4MDkwLCAyODA5NiwgCi0gICAgMjgxMDIsIDI4MTA4LCAyODExNCwgMjgxMjAsIDI4MTI2LCAyODEzMywgMjgxMzksIDI4MTQ0LCAyODE0OSwgMjgxNTMsIAotICAgIDI4MTU3LCAyODE2MSwgMjgxNjUsIDI4MTY5LCAyODE3MywgMjgxNzcsIDI4MTgzLCAyODE4OSwgMjgxOTUsIDI4MjAwLCAKLSAgICAyODIwNywgMjgyMTIsIDI4MjE3LCAyODIyMywgMjgyMjgsIDI4MjM1LCAyODI0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjgyNDksIDI4MjU1LCAyODI1OSwgMjgyNjQsIDI4MjY5LCAyODI3NCwgMjgyNzksIDI4Mjg0LCAyODI4OSwgCi0gICAgMjgyOTQsIDI4Mjk5LCAyODMwNCwgMjgzMDksIDI4MzE0LCAyODMxOSwgMjgzMjQsIDI4MzI4LCAyODMzMiwgMjgzMzcsIAotICAgIDI4MzQyLCAyODM0NywgMjgzNTEsIDI4MzU1LCAyODM1OSwgMjgzNjQsIDI4MzY5LCAyODM3NCwgMjgzNzksIDI4MzgzLCAwLCAKLSAgICAwLCAwLCAyODM4NywgMjgzOTIsIDI4Mzk3LCAyODQwMiwgMjg0MDgsIDI4NDE0LCAyODQyMCwgMjg0MjYsIDI4NDMxLCAKLSAgICAyODQzNiwgMjg0NDIsIDI4NDQ4LCAwLCAwLCAwLCAwLCAyODQ1NSwgMjg0NjAsIDI4NDY2LCAyODQ3MiwgMjg0NzgsIAotICAgIDI4NDgzLCAyODQ4OCwgMjg0OTMsIDI4NDk4LCAyODUwNCwgMjg1MDksIDI4NTE0LCAwLCAwLCAwLCAwLCAyODUxOSwgMCwgMCwgCi0gICAgMCwgMjg1MjQsIDI4NTI5LCAyODUzNCwgMjg1MzksIDI4NTQzLCAyODU0NywgMjg1NTEsIDI4NTU1LCAyODU1OSwgMjg1NjMsIAotICAgIDI4NTY3LCAyODU3MSwgMjg1NzUsIDI4NTgwLCAyODU4NiwgMjg1OTIsIDI4NTk4LCAyODYwMywgMjg2MDgsIDI4NjE0LCAKLSAgICAyODYyMCwgMjg2MjYsIDI4NjMxLCAyODYzNywgMjg2NDIsIDI4NjQ4LCAyODY1NCwgMjg2NTksIDI4NjY1LCAyODY3MSwgCi0gICAgMjg2NzcsIDI4NjgyLCAyODY4NywgMjg2OTIsIDI4Njk4LCAyODcwNCwgMjg3MDksIDI4NzE1LCAyODcyMCwgMjg3MjYsIAotICAgIDI4NzMxLCAyODczNywgMCwgMCwgMjg3NDMsIDI4NzQ5LCAyODc1NSwgMjg3NjEsIDI4NzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyODc3MywgMjg3ODAsIDI4Nzg3LCAyODc5MywgMjg4MDAsIDI4ODA3LCAyODgxMywgMjg4MjAsIAotICAgIDI4ODI3LCAyODgzNCwgMjg4NDAsIDI4ODQ2LCAyODg1MywgMjg4NTksIDI4ODY1LCAyODg3MiwgMjg4NzksIDI4ODg1LCAKLSAgICAyODg5MiwgMjg4OTksIDI4OTA1LCAyODkxMSwgMjg5MTgsIDI4OTI0LCAyODkzMCwgMjg5MzcsIDI4OTQzLCAyODk1MCwgCi0gICAgMjg5NTcsIDI4OTY0LCAyODk3MSwgMjg5NzgsIDI4OTg1LCAyODk5MSwgMjg5OTgsIDI5MDA1LCAyOTAxMSwgMjkwMTgsIAotICAgIDI5MDI1LCAyOTAzMiwgMjkwMzksIDI5MDQ2LCAyOTA1MywgMjkwNjAsIDAsIDAsIDAsIDAsIDI5MDY3LCAyOTA3NSwgCi0gICAgMjkwODIsIDI5MDg5LCAyOTA5NSwgMjkxMDIsIDI5MTA4LCAyOTExNSwgMjkxMjEsIDI5MTI4LCAyOTEzNSwgMjkxNDIsIAotICAgIDI5MTQ5LCAyOTE1NiwgMjkxNjMsIDI5MTcwLCAyOTE3NywgMjkxODQsIDI5MTkxLCAyOTE5OCwgMjkyMDUsIDI5MjExLCAKLSAgICAyOTIxOCwgMjkyMjUsIDI5MjMyLCAyOTIzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNDQsIDI5MjUwLCAyOTI1NSwgMjkyNjAsIAotICAgIDI5MjY1LCAyOTI3MCwgMjkyNzUsIDI5MjgwLCAyOTI4NSwgMjkyOTAsIDI5Mjk1LCAwLCAwLCAwLCAyOTMwMSwgMjkzMDcsIAotICAgIDI5MzEzLCAyOTMxNywgMjkzMjMsIDI5MzI5LCAyOTMzNSwgMjkzNDEsIDI5MzQ3LCAyOTM1MywgMjkzNTksIDI5MzY1LCAKLSAgICAyOTM3MSwgMjkzNzcsIDI5MzgzLCAyOTM4OSwgMjkzOTUsIDI5NDAxLCAyOTQwNywgMjk0MTEsIDI5NDE3LCAyOTQyMywgCi0gICAgMjk0MjksIDI5NDM1LCAyOTQ0MSwgMjk0NDcsIDI5NDUzLCAyOTQ1OSwgMjk0NjUsIDI5NDcxLCAyOTQ3NywgMjk0ODMsIAotICAgIDI5NDg5LCAyOTQ5NSwgMjk1MDEsIDI5NTA1LCAyOTUxMCwgMjk1MTUsIDI5NTIwLCAyOTUyNCwgMjk1MjksIDI5NTMzLCAKLSAgICAyOTUzOCwgMjk1NDMsIDI5NTQ4LCAyOTU1MiwgMjk1NTcsIDI5NTYyLCAyOTU2NywgMjk1NzIsIDI5NTc3LCAyOTU4MSwgCi0gICAgMjk1ODUsIDI5NTkwLCAyOTU5NSwgMjk1OTksIDI5NjAzLCAyOTYwNywgMjk2MTIsIDI5NjE3LCAyOTYyMiwgMjk2MjcsIDAsIAotICAgIDAsIDI5NjMzLCAyOTYzNywgMjk2NDQsIDI5NjQ5LCAyOTY1NSwgMjk2NjEsIDI5NjY2LCAyOTY3MiwgMjk2NzgsIDI5NjgzLCAKLSAgICAyOTY4OSwgMjk2OTUsIDI5NzAxLCAyOTcwNiwgMjk3MTIsIDI5NzE3LCAyOTcyMiwgMjk3MjgsIDI5NzMzLCAyOTczOSwgCi0gICAgMjk3NDQsIDI5NzUwLCAyOTc1NiwgMjk3NjIsIDI5NzY4LCAyOTc3MiwgMjk3NzcsIDI5NzgyLCAyOTc4OCwgMjk3OTQsIAotICAgIDI5Nzk5LCAyOTgwNSwgMjk4MTEsIDI5ODE1LCAyOTgyMCwgMjk4MjUsIDI5ODI5LCAyOTgzNCwgMjk4MzksIDI5ODQ0LCAKLSAgICAyOTg0OSwgMjk4NTUsIDI5ODYxLCAyOTg2NiwgMjk4NzEsIDI5ODc2LCAyOTg4MCwgMjk4ODUsIDI5ODg5LCAyOTg5NCwgCi0gICAgMjk4OTgsIDI5OTAzLCAyOTkwOCwgMjk5MTMsIDI5OTE4LCAyOTkyNCwgMjk5MzAsIDI5OTM3LCAyOTk0NywgMjk5NTYsIAotICAgIDI5OTYzLCAyOTk2OSwgMjk5NzksIDI5OTg0LCAyOTk5MCwgMCwgMjk5OTUsIDMwMDAwLCAzMDAwNSwgMzAwMTMsIDMwMDE5LCAKLSAgICAzMDAyNywgMzAwMzIsIDMwMDM4LCAzMDA0NCwgMzAwNTAsIDMwMDU1LCAzMDA2MSwgMzAwNjYsIDMwMDczLCAzMDA3OSwgCi0gICAgMzAwODQsIDMwMDkwLCAzMDA5NiwgMzAxMDIsIDMwMTA5LCAzMDExNiwgMzAxMjMsIDMwMTI4LCAzMDEzMywgMzAxNDAsIAotICAgIDMwMTQ3LCAzMDE1NCwgMzAxNjEsIDMwMTY4LCAwLCAwLCAzMDE3NSwgMzAxODIsIDMwMTg5LCAzMDE5NSwgMzAyMDEsIAotICAgIDMwMjA3LCAzMDIxMywgMzAyMTksIDMwMjI1LCAzMDIzMSwgMzAyMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMjQzLCAzMDI0OSwgCi0gICAgMzAyNTQsIDMwMjU5LCAzMDI2NCwgMzAyNjksIDMwMjc0LCAzMDI3OSwgMzAyODQsIDMwMjg5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzMDI5NCwgMzAyOTksIDMwMzA0LCAzMDMwOSwgMzAzMTQsIDMwMzE5LCAzMDMyNCwgMzAzMzMsIDMwMzQwLCAzMDM0NSwgCi0gICAgMzAzNTAsIDMwMzU1LCAzMDM2MCwgMzAzNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4Mjg4LCAxODI5MSwgMTgyOTUsIDE4Mjk5LCAxODMwMywgCisgICAgMTgzMDcsIDE4MzExLCAxODMxNSwgMTgzMTksIDE4MzIzLCAxODMyNywgMTgzMzEsIDE4MzM1LCAxODMzOSwgMTgzNDMsIAorICAgIDE4MzQ3LCAxODM1MSwgMTgzNTUsIDE4MzU5LCAxODM2MywgMTgzNjcsIDE4MzcwLCAxODM3MywgMTgzNzcsIDE4MzgxLCAKKyAgICAxODM4NSwgMTgzODgsIDE4MzkxLCAxODM5NCwgMTgzOTgsIDE4NDAyLCAxODQwNSwgMTg0MDgsIDE4NDEyLCAxODQxNSwgCisgICAgMTg0MjAsIDE4NDIzLCAxODQyNywgMTg0MzAsIDE4NDM0LCAxODQzNywgMTg0NDIsIDE4NDQ1LCAxODQ0OSwgMTg0NTYsIAorICAgIDE4NDYxLCAxODQ2NSwgMTg0NzAsIDE4NDc0LCAxODQ3OSwgMTg0ODMsIDE4NDg4LCAxODQ5NSwgMTg1MDEsIDE4NTA2LCAKKyAgICAxODUxMCwgMTg1MTQsIDE4NTE4LCAxODUyMiwgMTg1MjYsIDE4NTMxLCAxODUzNiwgMTg1NDIsIDE4NTQ3LCAxODU1MiwgCisgICAgMTg1NTYsIDE4NTU5LCAxODU2MiwgMTg1NjUsIDE4NTY4LCAxODU3MSwgMTg1NzQsIDE4NTc3LCAxODU4MCwgMTg1ODMsIAorICAgIDE4NTg5LCAxODU5MywgMTg1OTcsIDE4NjAxLCAxODYwNSwgMTg2MDksIDE4NjEzLCAxODYxNywgMTg2MjEsIDE4NjI2LCAKKyAgICAxODYzMCwgMTg2MzUsIDE4NjQwLCAxODY0NiwgMTg2NTEsIDE4NjU3LCAxODY2MywgMTg2NjksIDE4Njc1LCAxODY4MSwgCisgICAgMTg2ODgsIDE4Njk1LCAxODcwMywgMTg3MTEsIDE4NzIwLCAxODcyOSwgMTg3NDAsIDE4NzUwLCAxODc2MCwgMTg3NzEsIAorICAgIDE4NzgyLCAxODc5MiwgMTg4MDIsIDE4ODEyLCAxODgyMiwgMTg4MzIsIDE4ODQyLCAxODg1MiwgMTg4NjIsIDE4ODcwLCAKKyAgICAxODg3NywgMTg4ODMsIDE4ODkwLCAxODg5NSwgMTg5MDEsIDE4OTA3LCAxODkxMywgMTg5MTksIDE4OTI1LCAxODkzMSwgCisgICAgMTg5MzYsIDE4OTQyLCAxODk0OCwgMTg5NTQsIDE4OTYwLCAxODk2NSwgMTg5NzMsIDE4OTgwLCAxODk4NiwgMTg5OTMsIAorICAgIDE5MDAxLCAxOTAwNywgMTkwMTMsIDE5MDE5LCAxOTAyNSwgMTkwMzMsIDE5MDQxLCAxOTA1MSwgMTkwNTksIDE5MDY3LCAKKyAgICAxOTA3MywgMTkwNzgsIDE5MDgzLCAxOTA4OCwgMTkwOTMsIDE5MDk4LCAxOTEwMywgMTkxMDgsIDE5MTEzLCAxOTExOCwgCisgICAgMTkxMjQsIDE5MTMwLCAxOTEzNiwgMTkxNDMsIDE5MTQ4LCAxOTE1NCwgMTkxNTksIDE5MTY0LCAxOTE2OSwgMTkxNzQsIAorICAgIDE5MTc5LCAxOTE4NCwgMTkxODksIDE5MTk0LCAxOTE5OSwgMTkyMDQsIDE5MjA5LCAxOTIxNCwgMTkyMTksIDE5MjI0LCAKKyAgICAxOTIyOSwgMTkyMzQsIDE5MjM5LCAxOTI0NCwgMTkyNDksIDE5MjU0LCAxOTI1OSwgMTkyNjQsIDE5MjY5LCAxOTI3NCwgCisgICAgMTkyNzksIDE5Mjg0LCAxOTI4OSwgMTkyOTQsIDE5Mjk5LCAxOTMwNCwgMTkzMDksIDE5MzE0LCAxOTMxOSwgMTkzMjQsIAorICAgIDE5MzI5LCAxOTMzNCwgMTkzMzksIDAsIDE5MzQ0LCAwLCAwLCAwLCAwLCAwLCAxOTM0OSwgMCwgMCwgMTkzNTQsIDE5MzU4LCAKKyAgICAxOTM2MiwgMTkzNjYsIDE5MzcwLCAxOTM3NCwgMTkzNzgsIDE5MzgyLCAxOTM4NiwgMTkzOTAsIDE5Mzk0LCAxOTM5OCwgCisgICAgMTk0MDIsIDE5NDA2LCAxOTQxMCwgMTk0MTQsIDE5NDE4LCAxOTQyMiwgMTk0MjYsIDE5NDMwLCAxOTQzNCwgMTk0MzgsIAorICAgIDE5NDQyLCAxOTQ0NiwgMTk0NTAsIDE5NDU0LCAxOTQ1OCwgMTk0NjIsIDE5NDY2LCAxOTQ3MCwgMTk0NzQsIDE5NDc4LCAKKyAgICAxOTQ4MiwgMTk0ODYsIDE5NDkwLCAxOTQ5NCwgMTk0OTgsIDE5NTAyLCAxOTUwNiwgMTk1MTAsIDE5NTE0LCAxOTUxOCwgCisgICAgMTk1MjQsIDE5NTI4LCAxOTUzMywgMTk1MzgsIDE5NTQyLCAxOTU0NywgMTk1NTIsIDE5NTU2LCAxOTU2MCwgMTk1NjQsIAorICAgIDE5NTY4LCAxOTU3MiwgMTk1NzYsIDE5NTgwLCAxOTU4NCwgMTk1ODgsIDE5NTkyLCAxOTU5NiwgMTk2MDAsIDE5NjA0LCAKKyAgICAxOTYwOCwgMTk2MTIsIDE5NjE2LCAxOTYyMCwgMTk2MjQsIDE5NjI4LCAxOTYzMiwgMTk2MzYsIDE5NjQwLCAxOTY0NCwgCisgICAgMTk2NDgsIDE5NjUyLCAxOTY1NiwgMTk2NjAsIDE5NjY0LCAxOTY2OCwgMTk2NzIsIDE5Njc2LCAxOTY4MCwgMTk2ODQsIAorICAgIDE5Njg4LCAxOTY5MiwgMTk2OTYsIDE5NzAwLCAxOTcwNCwgMTk3MDgsIDE5NzEyLCAxOTcxNiwgMTk3MjAsIDE5NzI0LCAKKyAgICAxOTcyOCwgMTk3MzIsIDE5NzM2LCAxOTc0MCwgMTk3NDQsIDE5NzQ4LCAxOTc1MiwgMTk3NTYsIDE5NzYwLCAxOTc2NCwgCisgICAgMTk3NjgsIDE5NzcyLCAxOTc3NiwgMTk3ODAsIDE5Nzg0LCAxOTc4OCwgMTk3OTIsIDE5Nzk2LCAxOTgwMCwgMTk4MDQsIAorICAgIDE5ODA4LCAxOTgxMiwgMTk4MTYsIDE5ODIwLCAxOTgyNCwgMTk4MjgsIDE5ODMyLCAxOTgzNiwgMTk4NDAsIDE5ODQ0LCAKKyAgICAxOTg0OCwgMTk4NTIsIDE5ODU2LCAxOTg2MCwgMTk4NjQsIDE5ODY4LCAxOTg3MiwgMTk4NzYsIDE5ODgwLCAxOTg4NCwgCisgICAgMTk4ODgsIDE5ODkyLCAxOTg5NiwgMTk5MDAsIDE5OTA0LCAxOTkwOCwgMTk5MTIsIDE5OTE2LCAxOTkyMCwgMTk5MjQsIAorICAgIDE5OTI4LCAxOTkzMiwgMTk5MzYsIDE5OTQwLCAxOTk0MywgMTk5NDcsIDE5OTUwLCAxOTk1NCwgMTk5NTgsIDE5OTYxLCAKKyAgICAxOTk2NSwgMTk5NjksIDE5OTcyLCAxOTk3NiwgMTk5ODAsIDE5OTg0LCAxOTk4OCwgMTk5OTEsIDE5OTk1LCAxOTk5OSwgCisgICAgMjAwMDMsIDIwMDA3LCAyMDAxMSwgMjAwMTUsIDIwMDE4LCAyMDAyMiwgMjAwMjYsIDIwMDMwLCAyMDAzNCwgMjAwMzgsIAorICAgIDIwMDQyLCAyMDA0NiwgMjAwNTAsIDIwMDU0LCAyMDA1OCwgMjAwNjIsIDIwMDY2LCAyMDA3MCwgMjAwNzQsIDIwMDc4LCAKKyAgICAyMDA4MiwgMjAwODYsIDIwMDkwLCAyMDA5NCwgMjAwOTgsIDIwMTAyLCAyMDEwNiwgMjAxMTAsIDIwMTE0LCAyMDExOCwgCisgICAgMjAxMjIsIDIwMTI2LCAyMDEzMCwgMjAxMzQsIDIwMTM4LCAyMDE0MiwgMjAxNDYsIDIwMTUwLCAyMDE1NCwgMjAxNTgsIAorICAgIDIwMTYyLCAyMDE2NiwgMjAxNzAsIDIwMTc0LCAyMDE3OCwgMjAxODIsIDIwMTg2LCAyMDE5MCwgMjAxOTQsIDIwMTk4LCAKKyAgICAyMDIwMiwgMjAyMDYsIDIwMjEwLCAyMDIxNCwgMjAyMTgsIDIwMjIyLCAyMDIyNiwgMjAyMzAsIDIwMjM0LCAyMDIzOCwgCisgICAgMjAyNDIsIDIwMjQ2LCAyMDI1MCwgMjAyNTQsIDIwMjU4LCAyMDI2MiwgMjAyNjYsIDIwMjcwLCAyMDI3NCwgMjAyNzgsIAorICAgIDIwMjgyLCAyMDI4NiwgMjAyOTAsIDIwMjk0LCAyMDI5OCwgMjAzMDIsIDIwMzA2LCAyMDMxMCwgMjAzMTQsIDIwMzE4LCAKKyAgICAyMDMyMiwgMjAzMjYsIDIwMzMwLCAyMDMzNCwgMjAzMzgsIDIwMzQyLCAyMDM0NiwgMjAzNTAsIDIwMzU0LCAyMDM1OCwgCisgICAgMjAzNjIsIDIwMzY2LCAyMDM3MCwgMjAzNzQsIDIwMzc4LCAyMDM4MiwgMjAzODYsIDIwMzkwLCAyMDM5NCwgMjAzOTgsIAorICAgIDIwNDAyLCAyMDQwNiwgMjA0MTAsIDIwNDE0LCAyMDQxOCwgMjA0MjIsIDIwNDI2LCAyMDQzMCwgMjA0MzQsIDIwNDM4LCAKKyAgICAyMDQ0MiwgMjA0NDYsIDIwNDUwLCAyMDQ1NCwgMjA0NTgsIDIwNDYyLCAyMDQ2NiwgMjA0NzAsIDIwNDc0LCAyMDQ3OCwgCisgICAgMjA0ODIsIDIwNDg2LCAyMDQ5MCwgMjA0OTQsIDIwNDk4LCAyMDUwMiwgMjA1MDYsIDIwNTEwLCAyMDUxNCwgMjA1MTgsIAorICAgIDIwNTIyLCAyMDUyNiwgMjA1MzAsIDIwNTM0LCAyMDUzOCwgMjA1NDIsIDIwNTQ2LCAyMDU1MCwgMjA1NTQsIDIwNTU4LCAKKyAgICAyMDU2MiwgMjA1NjYsIDIwNTcwLCAyMDU3MywgMjA1NzcsIDIwNTgxLCAyMDU4NSwgMjA1ODksIDIwNTkzLCAyMDU5NywgCisgICAgMjA2MDEsIDIwNjA1LCAyMDYwOSwgMjA2MTMsIDIwNjE3LCAyMDYyMSwgMjA2MjUsIDIwNjI5LCAyMDYzMywgMjA2MzcsIAorICAgIDIwNjQxLCAyMDY0NSwgMjA2NDksIDIwNjUzLCAyMDY1NywgMjA2NjEsIDIwNjY1LCAyMDY2OCwgMjA2NzIsIDIwNjc2LCAKKyAgICAyMDY4MCwgMjA2ODQsIDIwNjg4LCAyMDY5MiwgMjA2OTYsIDIwNzAwLCAyMDcwNCwgMjA3MDgsIDIwNzEyLCAyMDcxNiwgCisgICAgMjA3MjAsIDIwNzI0LCAyMDcyOCwgMjA3MzEsIDIwNzM1LCAyMDczOSwgMjA3NDMsIDIwNzQ3LCAyMDc1MSwgMjA3NTUsIAorICAgIDIwNzU5LCAyMDc2MiwgMjA3NjYsIDIwNzcwLCAyMDc3NCwgMjA3NzgsIDIwNzgyLCAyMDc4NiwgMjA3OTAsIDIwNzk0LCAKKyAgICAyMDc5OCwgMjA4MDIsIDIwODA2LCAyMDgxMCwgMjA4MTQsIDIwODE4LCAyMDgyMiwgMjA4MjYsIDIwODMwLCAyMDgzNCwgCisgICAgMjA4MzgsIDIwODQyLCAyMDg0NiwgMjA4NTAsIDIwODU0LCAwLCAyMDg1OCwgMjA4NjIsIDIwODY2LCAyMDg3MCwgMCwgMCwgCisgICAgMjA4NzQsIDIwODc4LCAyMDg4MiwgMjA4ODYsIDIwODkwLCAyMDg5NCwgMjA4OTgsIDAsIDIwOTAyLCAwLCAyMDkwNiwgCisgICAgMjA5MTAsIDIwOTE0LCAyMDkxOCwgMCwgMCwgMjA5MjIsIDIwOTI2LCAyMDkzMCwgMjA5MzQsIDIwOTM4LCAyMDk0MiwgCisgICAgMjA5NDYsIDIwOTUwLCAyMDk1NCwgMjA5NTgsIDIwOTYyLCAyMDk2NiwgMjA5NzAsIDIwOTc0LCAyMDk3OCwgMjA5ODIsIAorICAgIDIwOTg2LCAyMDk5MCwgMjA5OTQsIDIwOTk4LCAyMTAwMiwgMjEwMDYsIDIxMDEwLCAyMTAxMywgMjEwMTcsIDIxMDIxLCAKKyAgICAyMTAyNSwgMjEwMjksIDIxMDMzLCAyMTAzNywgMjEwNDEsIDIxMDQ1LCAyMTA0OSwgMjEwNTMsIDIxMDU3LCAyMTA2MSwgCisgICAgMjEwNjUsIDIxMDY5LCAyMTA3MywgMjEwNzcsIDIxMDgxLCAwLCAyMTA4NSwgMjEwODksIDIxMDkzLCAyMTA5NywgMCwgMCwgCisgICAgMjExMDEsIDIxMTA0LCAyMTEwOCwgMjExMTIsIDIxMTE2LCAyMTEyMCwgMjExMjQsIDIxMTI4LCAyMTEzMiwgMjExMzYsIAorICAgIDIxMTQwLCAyMTE0NCwgMjExNDgsIDIxMTUyLCAyMTE1NiwgMjExNjAsIDIxMTY0LCAyMTE2OSwgMjExNzQsIDIxMTc5LCAKKyAgICAyMTE4NSwgMjExOTEsIDIxMTk2LCAyMTIwMSwgMjEyMDcsIDIxMjEwLCAyMTIxNCwgMjEyMTgsIDIxMjIyLCAyMTIyNiwgCisgICAgMjEyMzAsIDIxMjM0LCAyMTIzOCwgMCwgMjEyNDIsIDIxMjQ2LCAyMTI1MCwgMjEyNTQsIDAsIDAsIDIxMjU4LCAyMTI2MiwgCisgICAgMjEyNjYsIDIxMjcwLCAyMTI3NCwgMjEyNzgsIDIxMjgyLCAwLCAyMTI4NiwgMCwgMjEyOTAsIDIxMjk0LCAyMTI5OCwgCisgICAgMjEzMDIsIDAsIDAsIDIxMzA2LCAyMTMxMCwgMjEzMTQsIDIxMzE4LCAyMTMyMiwgMjEzMjYsIDIxMzMwLCAyMTMzNCwgCisgICAgMjEzMzgsIDIxMzQzLCAyMTM0OCwgMjEzNTMsIDIxMzU5LCAyMTM2NSwgMjEzNzAsIDAsIDIxMzc1LCAyMTM3OSwgMjEzODMsIAorICAgIDIxMzg3LCAyMTM5MSwgMjEzOTUsIDIxMzk5LCAyMTQwMywgMjE0MDcsIDIxNDExLCAyMTQxNSwgMjE0MTksIDIxNDIzLCAKKyAgICAyMTQyNywgMjE0MzEsIDIxNDM1LCAyMTQzOSwgMjE0NDIsIDIxNDQ2LCAyMTQ1MCwgMjE0NTQsIDIxNDU4LCAyMTQ2MiwgCisgICAgMjE0NjYsIDIxNDcwLCAyMTQ3NCwgMjE0NzgsIDIxNDgyLCAyMTQ4NiwgMjE0OTAsIDIxNDk0LCAyMTQ5OCwgMjE1MDIsIAorICAgIDIxNTA2LCAyMTUxMCwgMjE1MTQsIDIxNTE4LCAyMTUyMiwgMjE1MjYsIDIxNTMwLCAyMTUzNCwgMjE1MzgsIDIxNTQyLCAKKyAgICAyMTU0NiwgMjE1NTAsIDIxNTU0LCAyMTU1OCwgMjE1NjIsIDIxNTY2LCAyMTU3MCwgMjE1NzQsIDIxNTc4LCAyMTU4MiwgCisgICAgMjE1ODYsIDIxNTkwLCAyMTU5NCwgMjE1OTgsIDAsIDIxNjAyLCAyMTYwNiwgMjE2MTAsIDIxNjE0LCAwLCAwLCAyMTYxOCwgCisgICAgMjE2MjIsIDIxNjI2LCAyMTYzMCwgMjE2MzQsIDIxNjM4LCAyMTY0MiwgMjE2NDYsIDIxNjUwLCAyMTY1NCwgMjE2NTgsIAorICAgIDIxNjYyLCAyMTY2NiwgMjE2NzAsIDIxNjc0LCAyMTY3OCwgMjE2ODIsIDIxNjg2LCAyMTY5MCwgMjE2OTQsIDIxNjk4LCAKKyAgICAyMTcwMiwgMjE3MDYsIDIxNzEwLCAyMTcxNCwgMjE3MTgsIDIxNzIyLCAyMTcyNiwgMjE3MzAsIDIxNzM0LCAyMTczOCwgCisgICAgMjE3NDIsIDIxNzQ2LCAyMTc1MCwgMjE3NTQsIDIxNzU4LCAyMTc2MiwgMjE3NjYsIDIxNzcwLCAyMTc3NCwgMjE3NzgsIAorICAgIDIxNzgyLCAyMTc4NiwgMjE3OTAsIDIxNzk0LCAyMTc5OCwgMjE4MDIsIDIxODA2LCAyMTgxMCwgMjE4MTQsIDIxODE4LCAKKyAgICAyMTgyMiwgMjE4MjYsIDIxODMwLCAyMTgzNCwgMjE4MzgsIDIxODQyLCAyMTg0NSwgMjE4NDksIDIxODUzLCAyMTg1NywgCisgICAgMjE4NjEsIDIxODY1LCAyMTg2OSwgMjE4NzMsIDIxODc3LCAyMTg4MSwgMCwgMCwgMjE4ODUsIDIxODk0LCAyMTkwMCwgCisgICAgMjE5MDUsIDIxOTA5LCAyMTkxMiwgMjE5MTcsIDIxOTIwLCAyMTkyMywgMjE5MjYsIDIxOTMxLCAyMTkzNSwgMjE5NDAsIAorICAgIDIxOTQzLCAyMTk0NiwgMjE5NDksIDIxOTUyLCAyMTk1NSwgMjE5NTgsIDIxOTYxLCAyMTk2NCwgMjE5NjcsIDIxOTcxLCAKKyAgICAyMTk3NSwgMjE5NzksIDIxOTgzLCAyMTk4NywgMjE5OTEsIDIxOTk1LCAyMTk5OSwgMjIwMDMsIDIyMDA3LCAwLCAwLCAwLCAKKyAgICAyMjAxMywgMjIwMTksIDIyMDIzLCAyMjAyNywgMjIwMzEsIDIyMDM3LCAyMjA0MSwgMjIwNDUsIDIyMDQ5LCAyMjA1NSwgCisgICAgMjIwNTksIDIyMDYzLCAyMjA2NywgMjIwNzMsIDIyMDc3LCAyMjA4MSwgMjIwODUsIDIyMDkxLCAyMjA5NywgMjIxMDMsIAorICAgIDIyMTExLCAyMjExNywgMjIxMjMsIDIyMTI5LCAyMjEzNSwgMjIxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTQ3LCAyMjE1MCwgCisgICAgMjIxNTMsIDIyMTU2LCAyMjE1OSwgMjIxNjIsIDIyMTY2LCAyMjE3MCwgMjIxNzMsIDIyMTc3LCAyMjE4MSwgMjIxODUsIAorICAgIDIyMTg5LCAyMjE5MywgMjIxOTYsIDIyMjAwLCAyMjIwNCwgMjIyMDgsIDIyMjEyLCAyMjIxNiwgMjIyMjAsIDIyMjI0LCAKKyAgICAyMjIyOCwgMjIyMzIsIDIyMjM2LCAyMjI0MCwgMjIyNDMsIDIyMjQ3LCAyMjI1MSwgMjIyNTUsIDIyMjU5LCAyMjI2MiwgCisgICAgMjIyNjYsIDIyMjcwLCAyMjI3NCwgMjIyNzgsIDIyMjgyLCAyMjI4NiwgMjIyOTAsIDIyMjk0LCAyMjI5OCwgMjIzMDIsIAorICAgIDIyMzA2LCAyMjMxMCwgMjIzMTQsIDIyMzE3LCAyMjMyMSwgMjIzMjUsIDIyMzI5LCAyMjMzMywgMjIzMzcsIDIyMzQxLCAKKyAgICAyMjM0NSwgMjIzNDksIDIyMzUzLCAyMjM1NywgMjIzNjEsIDIyMzY1LCAyMjM2OSwgMjIzNzMsIDIyMzc3LCAyMjM4MSwgCisgICAgMjIzODUsIDIyMzg5LCAyMjM5MywgMjIzOTcsIDIyNDAxLCAyMjQwNSwgMjI0MDksIDIyNDEzLCAyMjQxNywgMjI0MjEsIAorICAgIDIyNDI1LCAyMjQyOSwgMjI0MzMsIDIyNDM3LCAyMjQ0MSwgMjI0NDUsIDIyNDQ5LCAyMjQ1MywgMjI0NTYsIDIyNDYwLCAKKyAgICAyMjQ2NCwgMjI0NjgsIDIyNDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjQ3NiwgMjI0ODAsIAorICAgIDIyNDgzLCAyMjQ4NywgMjI0OTAsIDIyNDk0LCAyMjQ5NywgMjI1MDEsIDIyNTA3LCAyMjUxMiwgMjI1MTYsIDIyNTE5LCAKKyAgICAyMjUyMywgMjI1MjcsIDIyNTMyLCAyMjUzNiwgMjI1NDEsIDIyNTQ1LCAyMjU1MCwgMjI1NTQsIDIyNTU5LCAyMjU2MywgCisgICAgMjI1NjgsIDIyNTc0LCAyMjU3OCwgMjI1ODMsIDIyNTg3LCAyMjU5MiwgMjI1OTgsIDIyNjAyLCAyMjYwOCwgMjI2MTQsIAorICAgIDIyNjE4LCAyMjYyMywgMjI2MzEsIDIyNjM5LCAyMjY0NiwgMjI2NTEsIDIyNjU2LCAyMjY2NSwgMjI2NzIsIDIyNjc5LCAKKyAgICAyMjY4NCwgMjI2OTAsIDIyNjk0LCAyMjY5OCwgMjI3MDIsIDIyNzA2LCAyMjcxMCwgMjI3MTQsIDIyNzE4LCAyMjcyMiwgCisgICAgMjI3MjYsIDIyNzMwLCAyMjczNiwgMjI3NDEsIDIyNzQ2LCAyMjc0OSwgMjI3NTMsIDIyNzU3LCAyMjc2MiwgMjI3NjYsIAorICAgIDIyNzcxLCAyMjc3NSwgMjI3ODAsIDIyNzg0LCAyMjc4OSwgMjI3OTMsIDIyNzk4LCAyMjgwMiwgMjI4MDcsIDIyODExLCAKKyAgICAyMjgxNiwgMjI4MjIsIDIyODI2LCAyMjgzMSwgMjI4MzYsIDIyODQwLCAyMjg0NCwgMjI4NDgsIDIyODUyLCAyMjg1NSwgCisgICAgMjI4NTksIDIyODY1LCAyMjg3MCwgMjI4NzUsIDIyODc5LCAyMjg4MywgMjI4ODcsIDIyODkyLCAyMjg5NiwgMjI5MDEsIAorICAgIDIyOTA1LCAyMjkxMCwgMjI5MTMsIDIyOTE3LCAyMjkyMSwgMjI5MjYsIDIyOTMwLCAyMjkzNSwgMjI5MzksIDIyOTQ0LCAKKyAgICAyMjk1MCwgMjI5NTQsIDIyOTU4LCAyMjk2MiwgMjI5NjYsIDIyOTcwLCAyMjk3NCwgMjI5NzgsIDIyOTgyLCAyMjk4NiwgCisgICAgMjI5OTAsIDIyOTk0LCAyMzAwMCwgMjMwMDMsIDIzMDA3LCAyMzAxMSwgMjMwMTYsIDIzMDIwLCAyMzAyNSwgMjMwMjksIAorICAgIDIzMDM0LCAyMzAzOCwgMjMwNDMsIDIzMDQ3LCAyMzA1MiwgMjMwNTYsIDIzMDYxLCAyMzA2NSwgMjMwNzAsIDIzMDc2LCAKKyAgICAyMzA4MCwgMjMwODQsIDIzMDkwLCAyMzA5NiwgMjMxMDIsIDIzMTA4LCAyMzExMiwgMjMxMTYsIDIzMTIwLCAyMzEyNCwgCisgICAgMjMxMjgsIDIzMTMyLCAyMzEzOCwgMjMxNDIsIDIzMTQ2LCAyMzE1MCwgMjMxNTUsIDIzMTU5LCAyMzE2NCwgMjMxNjgsIAorICAgIDIzMTczLCAyMzE3NywgMjMxODIsIDIzMTg2LCAyMzE5MSwgMjMxOTUsIDIzMjAwLCAyMzIwNCwgMjMyMDksIDIzMjE1LCAKKyAgICAyMzIxOSwgMjMyMjUsIDIzMjI5LCAyMzIzMywgMjMyMzcsIDIzMjQxLCAyMzI0NSwgMjMyNDksIDIzMjU1LCAyMzI1OCwgCisgICAgMjMyNjIsIDIzMjY2LCAyMzI3MSwgMjMyNzUsIDIzMjgwLCAyMzI4NCwgMjMyODksIDIzMjkzLCAyMzI5OCwgMjMzMDIsIAorICAgIDIzMzA3LCAyMzMxMSwgMjMzMTYsIDIzMzIwLCAyMzMyNSwgMjMzMzEsIDIzMzM0LCAyMzMzOCwgMjMzNDIsIDIzMzQ3LCAKKyAgICAyMzM1MiwgMjMzNTYsIDIzMzYwLCAyMzM2NCwgMjMzNjgsIDIzMzcyLCAyMzM3NiwgMjMzODIsIDIzMzg1LCAyMzM4OSwgCisgICAgMjMzOTMsIDIzMzk4LCAyMzQwMiwgMjM0MDcsIDIzNDExLCAyMzQxNiwgMjM0MjIsIDIzNDI2LCAyMzQzMSwgMjM0MzUsIAorICAgIDIzNDM5LCAyMzQ0MywgMjM0NDcsIDIzNDUxLCAyMzQ1NSwgMjM0NTksIDIzNDY1LCAyMzQ2OSwgMjM0NzMsIDIzNDc3LCAKKyAgICAyMzQ4MiwgMjM0ODYsIDIzNDkxLCAyMzQ5NSwgMjM1MDAsIDIzNTA0LCAyMzUwOSwgMjM1MTMsIDIzNTE4LCAyMzUyMiwgCisgICAgMjM1MjcsIDIzNTMxLCAyMzUzNiwgMjM1MzksIDIzNTQzLCAyMzU0NywgMjM1NTEsIDIzNTU1LCAyMzU1OSwgMjM1NjMsIAorICAgIDIzNTY3LCAyMzU3MSwgMjM1NzcsIDIzNTgwLCAyMzU4NCwgMjM1ODgsIDIzNTkzLCAyMzU5NywgMjM2MDIsIDIzNjA2LCAKKyAgICAyMzYxMSwgMjM2MTUsIDIzNjIwLCAyMzYyNCwgMjM2MjksIDIzNjMzLCAyMzYzOCwgMjM2NDIsIDIzNjQ3LCAyMzY1MywgCisgICAgMjM2NTcsIDIzNjYzLCAyMzY2NywgMjM2NzMsIDIzNjc5LCAyMzY4NSwgMjM2OTEsIDIzNjk3LCAyMzcwMywgMjM3MDksIAorICAgIDIzNzE1LCAyMzcxOSwgMjM3MjMsIDIzNzI3LCAyMzczMSwgMjM3MzUsIDIzNzM5LCAyMzc0MywgMjM3NDcsIDIzNzUyLCAKKyAgICAyMzc1NiwgMjM3NjEsIDIzNzY1LCAyMzc3MCwgMjM3NzQsIDIzNzc5LCAyMzc4MywgMjM3ODgsIDIzNzkyLCAyMzc5NywgCisgICAgMjM4MDEsIDIzODA2LCAyMzgxMCwgMjM4MTQsIDIzODE4LCAyMzgyMiwgMjM4MjYsIDIzODMwLCAyMzgzNCwgMjM4NDAsIAorICAgIDIzODQzLCAyMzg0NywgMjM4NTEsIDIzODU2LCAyMzg2MCwgMjM4NjUsIDIzODY5LCAyMzg3NCwgMjM4NzgsIDIzODgzLCAKKyAgICAyMzg4NywgMjM4OTIsIDIzODk2LCAyMzkwMSwgMjM5MDUsIDIzOTEwLCAyMzkxNiwgMjM5MjAsIDIzOTI2LCAyMzkzMSwgCisgICAgMjM5MzcsIDIzOTQxLCAyMzk0NywgMjM5NTIsIDIzOTU2LCAyMzk2MCwgMjM5NjQsIDIzOTY4LCAyMzk3MiwgMjM5NzcsIAorICAgIDIzOTgwLCAyMzk4NCwgMjM5ODksIDIzOTkzLCAyMzk5OCwgMjQwMDEsIDI0MDA1LCAyNDAwOSwgMjQwMTMsIDI0MDE3LCAKKyAgICAyNDAyMSwgMjQwMjUsIDI0MDI5LCAyNDAzMywgMjQwMzcsIDI0MDQxLCAyNDA0NSwgMjQwNTAsIDI0MDU0LCAyNDA1OCwgCisgICAgMjQwNjQsIDI0MDY4LCAyNDA3NCwgMjQwNzgsIDI0MDg0LCAyNDA4OCwgMjQwOTIsIDI0MDk2LCAyNDEwMCwgMjQxMDQsIAorICAgIDI0MTA5LCAyNDExMywgMjQxMTcsIDI0MTIxLCAyNDEyNSwgMjQxMjksIDI0MTMzLCAyNDEzNywgMjQxNDEsIDI0MTQ1LCAKKyAgICAyNDE0OSwgMjQxNTUsIDI0MTYxLCAyNDE2NywgMjQxNzMsIDI0MTc5LCAyNDE4NCwgMjQxOTAsIDI0MTk2LCAyNDIwMiwgCisgICAgMjQyMDYsIDI0MjEwLCAyNDIxNCwgMjQyMTgsIDI0MjIyLCAyNDIyNiwgMjQyMzAsIDI0MjM0LCAyNDIzOCwgMjQyNDIsIAorICAgIDI0MjQ2LCAyNDI1MCwgMjQyNTQsIDI0MjU5LCAyNDI2NCwgMjQyNjksIDI0MjczLCAyNDI3NywgMjQyODEsIDI0Mjg1LCAKKyAgICAyNDI4OSwgMjQyOTMsIDI0Mjk3LCAyNDMwMSwgMjQzMDUsIDI0MzA5LCAyNDMxNSwgMjQzMjEsIDI0MzI3LCAyNDMzMywgCisgICAgMjQzMzksIDI0MzQ1LCAyNDM1MSwgMjQzNTcsIDI0MzYzLCAyNDM2NywgMjQzNzEsIDI0Mzc1LCAyNDM3OSwgMjQzODMsIAorICAgIDI0Mzg3LCAyNDM5MSwgMjQzOTcsIDI0NDAzLCAyNDQwOSwgMjQ0MTUsIDI0NDIxLCAyNDQyNywgMjQ0MzMsIDI0NDM5LCAKKyAgICAyNDQ0NSwgMjQ0NTAsIDI0NDU1LCAyNDQ2MCwgMjQ0NjUsIDI0NDcxLCAyNDQ3NywgMjQ0ODMsIDI0NDg5LCAyNDQ5NSwgCisgICAgMjQ1MDEsIDI0NTA3LCAyNDUxMiwgMjQ1MTgsIDI0NTI0LCAyNDUzMCwgMjQ1MzUsIDI0NTQxLCAyNDU0NywgMjQ1NTMsIAorICAgIDI0NTU4LCAyNDU2MywgMjQ1NjgsIDI0NTczLCAyNDU3OCwgMjQ1ODMsIDI0NTg4LCAyNDU5MywgMjQ1OTgsIDI0NjAzLCAKKyAgICAyNDYwOCwgMjQ2MTMsIDI0NjE3LCAyNDYyMiwgMjQ2MjcsIDI0NjMyLCAyNDYzNywgMjQ2NDIsIDI0NjQ3LCAyNDY1MiwgCisgICAgMjQ2NTcsIDI0NjYyLCAyNDY2NywgMjQ2NzIsIDI0Njc3LCAyNDY4MiwgMjQ2ODcsIDI0NjkyLCAyNDY5NywgMjQ3MDIsIAorICAgIDI0NzA3LCAyNDcxMiwgMjQ3MTcsIDI0NzIyLCAyNDcyNywgMjQ3MzIsIDI0NzM3LCAyNDc0MiwgMjQ3NDcsIDI0NzUyLCAKKyAgICAyNDc1NywgMjQ3NjIsIDI0NzY2LCAyNDc3MSwgMjQ3NzYsIDI0NzgxLCAyNDc4NiwgMjQ3OTEsIDI0Nzk2LCAyNDgwMSwgCisgICAgMjQ4MDYsIDI0ODExLCAyNDgxNiwgMjQ4MjEsIDI0ODI2LCAyNDgzMSwgMjQ4MzYsIDI0ODQxLCAyNDg0NiwgMjQ4NTEsIAorICAgIDI0ODU2LCAyNDg2MSwgMjQ4NjYsIDI0ODcxLCAyNDg3NiwgMjQ4ODEsIDI0ODg2LCAyNDg5MSwgMjQ4OTUsIDI0OTAwLCAKKyAgICAyNDkwNSwgMjQ5MTAsIDI0OTE1LCAyNDkyMCwgMjQ5MjQsIDI0OTI5LCAyNDkzNCwgMjQ5MzksIDI0OTQ0LCAyNDk0OSwgCisgICAgMjQ5NTMsIDI0OTU4LCAyNDk2NCwgMjQ5NjksIDI0OTc0LCAyNDk3OSwgMjQ5ODQsIDI0OTkwLCAyNDk5NSwgMjUwMDAsIAorICAgIDI1MDA1LCAyNTAxMCwgMjUwMTUsIDI1MDIwLCAyNTAyNSwgMjUwMzAsIDI1MDM1LCAyNTA0MCwgMjUwNDUsIDI1MDUwLCAKKyAgICAyNTA1NSwgMjUwNjAsIDI1MDY1LCAyNTA3MCwgMjUwNzUsIDI1MDgwLCAyNTA4NSwgMjUwOTAsIDI1MDk1LCAyNTEwMCwgCisgICAgMjUxMDUsIDI1MTEwLCAyNTExNSwgMjUxMjAsIDI1MTI1LCAyNTEzMCwgMjUxMzUsIDI1MTQwLCAyNTE0NSwgMjUxNTAsIAorICAgIDI1MTU1LCAyNTE2MCwgMjUxNjUsIDI1MTcwLCAyNTE3NSwgMjUxODAsIDI1MTg1LCAyNTE5MCwgMjUxOTUsIDI1MjAwLCAKKyAgICAyNTIwNSwgMjUyMTAsIDI1MjE2LCAyNTIyMSwgMjUyMjYsIDI1MjMxLCAyNTIzNiwgMjUyNDEsIDI1MjQ2LCAyNTI1MSwgCisgICAgMjUyNTYsIDI1MjYxLCAyNTI2NiwgMjUyNzEsIDI1Mjc1LCAyNTI4MCwgMjUyODUsIDI1MjkwLCAyNTI5NSwgMjUzMDAsIAorICAgIDI1MzA1LCAyNTMxMCwgMjUzMTUsIDI1MzIwLCAyNTMyNSwgMjUzMzAsIDI1MzM1LCAyNTM0MCwgMjUzNDUsIDI1MzUwLCAKKyAgICAyNTM1NSwgMjUzNjAsIDI1MzY1LCAyNTM3MCwgMjUzNzUsIDI1MzgwLCAyNTM4NSwgMjUzOTAsIDI1Mzk1LCAyNTQwMCwgCisgICAgMjU0MDUsIDI1NDExLCAyNTQxNSwgMjU0MTksIDI1NDIzLCAyNTQyNywgMjU0MzEsIDI1NDM1LCAyNTQzOSwgMjU0NDMsIAorICAgIDI1NDQ5LCAyNTQ1NSwgMjU0NjEsIDI1NDY3LCAyNTQ3MywgMjU0NzksIDI1NDg1LCAyNTQ5MiwgMjU0OTgsIDI1NTAzLCAKKyAgICAyNTUwOCwgMjU1MTMsIDI1NTE4LCAyNTUyMywgMjU1MjgsIDI1NTMzLCAyNTUzOCwgMjU1NDMsIDI1NTQ4LCAyNTU1MywgCisgICAgMjU1NTgsIDI1NTYzLCAyNTU2OCwgMjU1NzMsIDI1NTc4LCAyNTU4MywgMjU1ODgsIDI1NTkzLCAyNTU5OCwgMjU2MDMsIAorICAgIDI1NjA4LCAyNTYxMywgMjU2MTgsIDI1NjIzLCAyNTYyOCwgMjU2MzMsIDI1NjM4LCAwLCAwLCAwLCAyNTY0NSwgMjU2NTUsIAorICAgIDI1NjU5LCAyNTY2NiwgMjU2NzAsIDI1Njc0LCAyNTY3OCwgMjU2ODYsIDI1NjkwLCAyNTY5NSwgMjU3MDAsIDI1NzA1LCAKKyAgICAyNTcwOSwgMjU3MTQsIDI1NzE5LCAyNTcyMiwgMjU3MjYsIDI1NzMwLCAyNTczOSwgMjU3NDMsIDI1NzQ3LCAyNTc1MywgCisgICAgMjU3NTcsIDI1NzYxLCAyNTc2OSwgMjU3NzMsIDI1NzgxLCAyNTc4NywgMjU3OTMsIDI1Nzk5LCAyNTgwNSwgMjU4MTUsIAorICAgIDI1ODIxLCAyNTgyNSwgMjU4MzQsIDI1ODM3LCAyNTg0MywgMjU4NDcsIDI1ODUzLCAyNTg1OCwgMjU4NjQsIDI1ODcyLCAKKyAgICAyNTg3OCwgMjU4ODQsIDI1ODkyLCAyNTg5OCwgMjU5MDIsIDI1OTA2LCAyNTkxNiwgMjU5MjIsIDI1OTI2LCAyNTkzNiwgCisgICAgMjU5NDIsIDI1OTQ2LCAyNTk1MCwgMjU5NTcsIDI1OTY0LCAyNTk2OSwgMjU5NzQsIDI1OTgzLCAyNTk4NywgMjU5OTEsIAorICAgIDI1OTk1LCAyNjAwMywgMjYwMTAsIDI2MDE0LCAyNjAxOCwgMjYwMjIsIDI2MDI2LCAyNjAzMCwgMjYwMzQsIDI2MDM4LCAKKyAgICAyNjA0MiwgMjYwNDYsIDI2MDUwLCAyNjA1NCwgMjYwNTksIDI2MDY0LCAyNjA2OSwgMjYwNzMsIDI2MDc3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjA4MSwgMjYwODUsIDI2MDg5LCAyNjA5MywgMjYwOTcsIAorICAgIDI2MTAyLCAyNjEwNywgMjYxMTIsIDI2MTE3LCAyNjEyMSwgMjYxMjUsIDI2MTMwLCAyNjEzNCwgMCwgMjYxMzgsIDI2MTQzLCAKKyAgICAyNjE0OCwgMjYxNTIsIDI2MTU2LCAyNjE2MSwgMjYxNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2MTcxLCAyNjE3NSwgMjYxNzksIDI2MTgzLCAyNjE4NywgMjYxOTIsIDI2MTk3LCAyNjIwMiwgMjYyMDcsIDI2MjExLCAKKyAgICAyNjIxNSwgMjYyMjAsIDI2MjI0LCAyNjIyOCwgMjYyMzIsIDI2MjM3LCAyNjI0MiwgMjYyNDYsIDI2MjUwLCAyNjI1NSwgCisgICAgMjYyNjAsIDI2MjY1LCAyNjI3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyNzYsIDI2MjgwLCAyNjI4NCwgCisgICAgMjYyODgsIDI2MjkyLCAyNjI5NywgMjYzMDIsIDI2MzA3LCAyNjMxMiwgMjYzMTYsIDI2MzIwLCAyNjMyNSwgMjYzMjksIAorICAgIDI2MzMzLCAyNjMzNywgMjYzNDIsIDI2MzQ3LCAyNjM1MSwgMjYzNTUsIDI2MzYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNjM2NSwgMjYzNjksIDI2MzczLCAyNjM3NywgMjYzODEsIDI2Mzg2LCAyNjM5MSwgMjYzOTYsIAorICAgIDI2NDAxLCAyNjQwNSwgMjY0MDksIDI2NDE0LCAyNjQxOCwgMCwgMjY0MjIsIDI2NDI3LCAyNjQzMiwgMCwgMjY0MzYsIAorICAgIDI2NDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQ0NiwgMjY0NDksIDI2NDUzLCAyNjQ1NywgCisgICAgMjY0NjEsIDI2NDY1LCAyNjQ2OSwgMjY0NzMsIDI2NDc3LCAyNjQ4MSwgMjY0ODUsIDI2NDg5LCAyNjQ5MywgMjY0OTcsIAorICAgIDI2NTAxLCAyNjUwNSwgMjY1MDksIDI2NTEzLCAyNjUxNiwgMjY1MjAsIDI2NTI0LCAyNjUyOCwgMjY1MzIsIDI2NTM2LCAKKyAgICAyNjU0MCwgMjY1NDQsIDI2NTQ4LCAyNjU1MiwgMjY1NTYsIDI2NTYwLCAyNjU2NCwgMjY1NjgsIDI2NTcxLCAyNjU3NCwgCisgICAgMjY1NzgsIDI2NTgyLCAyNjU4OCwgMjY1OTQsIDI2NjAwLCAyNjYwNiwgMjY2MTIsIDI2NjE4LCAyNjYyNCwgMjY2MzAsIAorICAgIDI2NjM2LCAyNjY0MiwgMjY2NDgsIDI2NjU0LCAyNjY2MCwgMjY2NjYsIDI2Njc1LCAyNjY4NCwgMjY2OTAsIDI2Njk2LCAKKyAgICAyNjcwMiwgMjY3MDcsIDI2NzExLCAyNjcxNiwgMjY3MjEsIDI2NzI2LCAyNjczMCwgMjY3MzUsIDI2NzQwLCAyNjc0NSwgCisgICAgMjY3NDksIDI2NzU0LCAyNjc1OCwgMjY3NjMsIDI2NzY4LCAyNjc3MywgMjY3NzgsIDI2NzgyLCAyNjc4NiwgMjY3OTAsIAorICAgIDI2Nzk0LCAyNjc5OCwgMjY4MDIsIDI2ODA2LCAyNjgxMCwgMjY4MTQsIDI2ODE4LCAyNjgyNCwgMjY4MjgsIDI2ODMyLCAKKyAgICAyNjgzNiwgMjY4NDAsIDI2ODQ0LCAyNjg1MiwgMjY4NTgsIDI2ODYyLCAyNjg2OCwgMjY4NzIsIDI2ODc4LCAyNjg4MiwgMCwgCisgICAgMCwgMjY4ODYsIDI2ODkwLCAyNjg5MywgMjY4OTYsIDI2ODk5LCAyNjkwMiwgMjY5MDUsIDI2OTA4LCAyNjkxMSwgMjY5MTQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTE3LCAyNjkyNSwgMjY5MzMsIDI2OTQxLCAyNjk0OSwgMjY5NTcsIDI2OTY1LCAyNjk3MywgCisgICAgMjY5ODEsIDI2OTg5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNjk5NywgMjcwMDAsIDI3MDAzLCAyNzAwNiwgMjcwMTEsIDI3MDE0LCAKKyAgICAyNzAxOSwgMjcwMjYsIDI3MDM0LCAyNzAzOSwgMjcwNDYsIDI3MDQ5LCAyNzA1NiwgMjcwNjMsIDI3MDcwLCAwLCAyNzA3NCwgCisgICAgMjcwNzgsIDI3MDgxLCAyNzA4NCwgMjcwODcsIDI3MDkwLCAyNzA5MywgMjcwOTYsIDI3MDk5LCAyNzEwMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjcxMDUsIDI3MTA4LCAyNzExMSwgMjcxMTQsIDI3MTE3LCAyNzEyMCwgMjcxMjQsIDI3MTI4LCAyNzEzMiwgCisgICAgMjcxMzUsIDI3MTM5LCAyNzE0MywgMjcxNDYsIDI3MTUwLCAyNzE1NCwgMjcxNTcsIDI3MTYxLCAyNzE2NCwgMjcxNjgsIAorICAgIDI3MTcyLCAyNzE3NiwgMjcxODAsIDI3MTg0LCAyNzE4NywgMjcxOTAsIDI3MTk0LCAyNzE5OCwgMjcyMDEsIDI3MjA1LCAKKyAgICAyNzIwOSwgMjcyMTMsIDI3MjE3LCAyNzIyMSwgMjcyMjUsIDI3MjI5LCAyNzIzMywgMjcyNDAsIDI3MjQ1LCAyNzI1MCwgCisgICAgMjcyNTUsIDI3MjYwLCAyNzI2NiwgMjcyNzIsIDI3Mjc4LCAyNzI4NCwgMjcyODksIDI3Mjk1LCAyNzMwMSwgMjczMDYsIAorICAgIDI3MzEyLCAyNzMxOCwgMjczMjQsIDI3MzMwLCAyNzMzNiwgMjczNDEsIDI3MzQ3LCAyNzM1MiwgMjczNTgsIDI3MzY0LCAKKyAgICAyNzM3MCwgMjczNzYsIDI3MzgyLCAyNzM4NywgMjczOTIsIDI3Mzk4LCAyNzQwNCwgMjc0MDksIDI3NDE1LCAyNzQyMCwgCisgICAgMjc0MjYsIDI3NDMxLCAyNzQzNiwgMjc0NDIsIDI3NDQ4LCAyNzQ1NCwgMjc0NjAsIDI3NDY2LCAyNzQ3MiwgMjc0NzgsIAorICAgIDI3NDg0LCAyNzQ5MCwgMjc0OTYsIDI3NTAyLCAyNzUwOCwgMjc1MTMsIDI3NTE4LCAyNzUyMywgMjc1MjksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI3NTM1LCAyNzU0NCwgMjc1NTMsIDI3NTYxLCAyNzU2OSwgMjc1NzksIDI3NTg3LCAyNzU5NiwgCisgICAgMjc2MDMsIDI3NjEwLCAyNzYxNywgMjc2MjUsIDI3NjMzLCAyNzY0MSwgMjc2NDksIDI3NjU3LCAyNzY2NSwgMjc2NzMsIAorICAgIDI3NjgxLCAyNzY4OCwgMjc2OTYsIDI3NzA0LCAyNzcxMiwgMjc3MjAsIDI3NzI4LCAyNzczOCwgMjc3NDgsIDI3NzU4LCAKKyAgICAyNzc2OCwgMjc3NzgsIDI3Nzg4LCAyNzc5OCwgMjc4MDgsIDI3ODE4LCAyNzgyOCwgMjc4MzgsIDI3ODQ4LCAyNzg1OCwgCisgICAgMjc4NjgsIDI3ODc2LCAyNzg4NCwgMjc4OTQsIDI3OTAyLCAwLCAwLCAwLCAwLCAwLCAyNzkxMiwgMjc5MTYsIDI3OTIwLCAKKyAgICAyNzkyNCwgMjc5MjgsIDI3OTMyLCAyNzkzNiwgMjc5NDAsIDI3OTQ0LCAyNzk0OCwgMjc5NTIsIDI3OTU2LCAyNzk2MCwgCisgICAgMjc5NjQsIDI3OTY4LCAyNzk3MiwgMjc5NzYsIDI3OTgwLCAyNzk4NCwgMjc5ODgsIDI3OTkyLCAyNzk5NiwgMjgwMDAsIAorICAgIDI4MDA0LCAyODAxMCwgMjgwMTQsIDI4MDIwLCAyODAyNCwgMjgwMzAsIDI4MDM0LCAyODA0MCwgMjgwNDQsIDI4MDQ4LCAKKyAgICAyODA1MiwgMjgwNTYsIDI4MDYwLCAyODA2NCwgMjgwNzAsIDI4MDc2LCAyODA4MiwgMjgwODgsIDI4MDkzLCAyODA5OSwgCisgICAgMjgxMDUsIDI4MTExLCAyODExNywgMjgxMjMsIDI4MTI5LCAyODEzNiwgMjgxNDIsIDI4MTQ3LCAyODE1MiwgMjgxNTYsIAorICAgIDI4MTYwLCAyODE2NCwgMjgxNjgsIDI4MTcyLCAyODE3NiwgMjgxODAsIDI4MTg2LCAyODE5MiwgMjgxOTgsIDI4MjAzLCAKKyAgICAyODIxMCwgMjgyMTUsIDI4MjIwLCAyODIyNiwgMjgyMzEsIDI4MjM4LCAyODI0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjgyNTIsIDI4MjU4LCAyODI2MiwgMjgyNjcsIDI4MjcyLCAyODI3NywgMjgyODIsIDI4Mjg3LCAyODI5MiwgCisgICAgMjgyOTcsIDI4MzAyLCAyODMwNywgMjgzMTIsIDI4MzE3LCAyODMyMiwgMjgzMjcsIDI4MzMxLCAyODMzNSwgMjgzNDAsIAorICAgIDI4MzQ1LCAyODM1MCwgMjgzNTQsIDI4MzU4LCAyODM2MiwgMjgzNjcsIDI4MzcyLCAyODM3NywgMjgzODIsIDI4Mzg2LCAwLCAKKyAgICAwLCAwLCAyODM5MCwgMjgzOTUsIDI4NDAwLCAyODQwNSwgMjg0MTEsIDI4NDE3LCAyODQyMywgMjg0MjksIDI4NDM0LCAKKyAgICAyODQzOSwgMjg0NDUsIDI4NDUxLCAwLCAwLCAwLCAwLCAyODQ1OCwgMjg0NjMsIDI4NDY5LCAyODQ3NSwgMjg0ODEsIAorICAgIDI4NDg2LCAyODQ5MSwgMjg0OTYsIDI4NTAxLCAyODUwNywgMjg1MTIsIDI4NTE3LCAwLCAwLCAwLCAwLCAyODUyMiwgMCwgMCwgCisgICAgMCwgMjg1MjcsIDI4NTMyLCAyODUzNywgMjg1NDIsIDI4NTQ2LCAyODU1MCwgMjg1NTQsIDI4NTU4LCAyODU2MiwgMjg1NjYsIAorICAgIDI4NTcwLCAyODU3NCwgMjg1NzgsIDI4NTgzLCAyODU4OSwgMjg1OTUsIDI4NjAxLCAyODYwNiwgMjg2MTEsIDI4NjE3LCAKKyAgICAyODYyMywgMjg2MjksIDI4NjM0LCAyODY0MCwgMjg2NDUsIDI4NjUxLCAyODY1NywgMjg2NjIsIDI4NjY4LCAyODY3NCwgCisgICAgMjg2ODAsIDI4Njg1LCAyODY5MCwgMjg2OTUsIDI4NzAxLCAyODcwNywgMjg3MTIsIDI4NzE4LCAyODcyMywgMjg3MjksIAorICAgIDI4NzM0LCAyODc0MCwgMCwgMCwgMjg3NDYsIDI4NzUyLCAyODc1OCwgMjg3NjQsIDI4NzcwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyODc3NiwgMjg3ODMsIDI4NzkwLCAyODc5NiwgMjg4MDMsIDI4ODEwLCAyODgxNiwgMjg4MjMsIAorICAgIDI4ODMwLCAyODgzNywgMjg4NDMsIDI4ODQ5LCAyODg1NiwgMjg4NjIsIDI4ODY4LCAyODg3NSwgMjg4ODIsIDI4ODg4LCAKKyAgICAyODg5NSwgMjg5MDIsIDI4OTA4LCAyODkxNCwgMjg5MjEsIDI4OTI3LCAyODkzMywgMjg5NDAsIDI4OTQ2LCAyODk1MywgCisgICAgMjg5NjAsIDI4OTY3LCAyODk3NCwgMjg5ODEsIDI4OTg4LCAyODk5NCwgMjkwMDEsIDI5MDA4LCAyOTAxNCwgMjkwMjEsIAorICAgIDI5MDI4LCAyOTAzNSwgMjkwNDIsIDI5MDQ5LCAyOTA1NiwgMjkwNjMsIDAsIDAsIDAsIDAsIDI5MDcwLCAyOTA3OCwgCisgICAgMjkwODUsIDI5MDkyLCAyOTA5OCwgMjkxMDUsIDI5MTExLCAyOTExOCwgMjkxMjQsIDI5MTMxLCAyOTEzOCwgMjkxNDUsIAorICAgIDI5MTUyLCAyOTE1OSwgMjkxNjYsIDI5MTczLCAyOTE4MCwgMjkxODcsIDI5MTk0LCAyOTIwMSwgMjkyMDgsIDI5MjE0LCAKKyAgICAyOTIyMSwgMjkyMjgsIDI5MjM1LCAyOTI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNDcsIDI5MjUzLCAyOTI1OCwgMjkyNjMsIAorICAgIDI5MjY4LCAyOTI3MywgMjkyNzgsIDI5MjgzLCAyOTI4OCwgMjkyOTMsIDI5Mjk4LCAwLCAwLCAwLCAyOTMwNCwgMjkzMTAsIAorICAgIDI5MzE2LCAyOTMyMCwgMjkzMjYsIDI5MzMyLCAyOTMzOCwgMjkzNDQsIDI5MzUwLCAyOTM1NiwgMjkzNjIsIDI5MzY4LCAKKyAgICAyOTM3NCwgMjkzODAsIDI5Mzg2LCAyOTM5MiwgMjkzOTgsIDI5NDA0LCAyOTQxMCwgMjk0MTQsIDI5NDIwLCAyOTQyNiwgCisgICAgMjk0MzIsIDI5NDM4LCAyOTQ0NCwgMjk0NTAsIDI5NDU2LCAyOTQ2MiwgMjk0NjgsIDI5NDc0LCAyOTQ4MCwgMjk0ODYsIAorICAgIDI5NDkyLCAyOTQ5OCwgMjk1MDQsIDI5NTA4LCAyOTUxMywgMjk1MTgsIDI5NTIzLCAyOTUyNywgMjk1MzIsIDI5NTM2LCAKKyAgICAyOTU0MSwgMjk1NDYsIDI5NTUxLCAyOTU1NSwgMjk1NjAsIDI5NTY1LCAyOTU3MCwgMjk1NzUsIDI5NTgwLCAyOTU4NCwgCisgICAgMjk1ODgsIDI5NTkzLCAyOTU5OCwgMjk2MDIsIDI5NjA2LCAyOTYxMCwgMjk2MTUsIDI5NjIwLCAyOTYyNSwgMjk2MzAsIDAsIAorICAgIDAsIDI5NjM2LCAyOTY0MCwgMjk2NDcsIDI5NjUyLCAyOTY1OCwgMjk2NjQsIDI5NjY5LCAyOTY3NSwgMjk2ODEsIDI5Njg2LCAKKyAgICAyOTY5MiwgMjk2OTgsIDI5NzA0LCAyOTcwOSwgMjk3MTUsIDI5NzIwLCAyOTcyNSwgMjk3MzEsIDI5NzM2LCAyOTc0MiwgCisgICAgMjk3NDcsIDI5NzUzLCAyOTc1OSwgMjk3NjUsIDI5NzcxLCAyOTc3NSwgMjk3ODAsIDI5Nzg1LCAyOTc5MSwgMjk3OTcsIAorICAgIDI5ODAyLCAyOTgwOCwgMjk4MTQsIDI5ODE4LCAyOTgyMywgMjk4MjgsIDI5ODMyLCAyOTgzNywgMjk4NDIsIDI5ODQ3LCAKKyAgICAyOTg1MiwgMjk4NTgsIDI5ODY0LCAyOTg2OSwgMjk4NzQsIDI5ODc5LCAyOTg4MywgMjk4ODgsIDI5ODkyLCAyOTg5NywgCisgICAgMjk5MDEsIDI5OTA2LCAyOTkxMSwgMjk5MTYsIDI5OTIxLCAyOTkyNywgMjk5MzMsIDI5OTQwLCAyOTk1MCwgMjk5NTksIAorICAgIDI5OTY2LCAyOTk3MiwgMjk5ODIsIDI5OTg3LCAyOTk5MywgMCwgMjk5OTgsIDMwMDAzLCAzMDAwOCwgMzAwMTYsIDMwMDIyLCAKKyAgICAzMDAzMCwgMzAwMzUsIDMwMDQxLCAzMDA0NywgMzAwNTMsIDMwMDU4LCAzMDA2NCwgMzAwNjksIDMwMDc2LCAzMDA4MiwgCisgICAgMzAwODcsIDMwMDkzLCAzMDA5OSwgMzAxMDUsIDMwMTEyLCAzMDExOSwgMzAxMjYsIDMwMTMxLCAzMDEzNiwgMzAxNDMsIAorICAgIDMwMTUwLCAzMDE1NywgMzAxNjQsIDMwMTcxLCAwLCAwLCAzMDE3OCwgMzAxODUsIDMwMTkyLCAzMDE5OCwgMzAyMDQsIAorICAgIDMwMjEwLCAzMDIxNiwgMzAyMjIsIDMwMjI4LCAzMDIzNCwgMzAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMjQ2LCAzMDI1MiwgCisgICAgMzAyNTcsIDMwMjYyLCAzMDI2NywgMzAyNzIsIDMwMjc3LCAzMDI4MiwgMzAyODcsIDMwMjkyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzMDI5NywgMzAzMDIsIDMwMzA3LCAzMDMxMiwgMzAzMTcsIDMwMzIyLCAzMDMyNywgMzAzMzYsIDMwMzQzLCAzMDM0OCwgCisgICAgMzAzNTMsIDMwMzU4LCAzMDM2MywgMzAzNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMzcwLCAzMDM3NiwgCi0gICAgMzAzODIsIDMwMzg2LCAzMDM5MCwgMzAzOTQsIDMwMzk4LCAzMDQwNCwgMzA0MDgsIDMwNDE0LCAzMDQxOCwgMzA0MjQsIAotICAgIDMwNDMwLCAzMDQzOCwgMzA0NDQsIDMwNDUyLCAzMDQ1NiwgMzA0NjAsIDMwNDY0LCAzMDQ3MCwgMzA0NzMsIDMwNDc5LCAKLSAgICAzMDQ4MywgMzA0ODksIDMwNDkzLCAzMDQ5NywgMzA1MDMsIDMwNTA3LCAzMDUxMywgMzA1MTcsIDMwNTIzLCAzMDUzMSwgCi0gICAgMzA1MzksIDMwNTQ3LCAzMDU1MywgMzA1NTcsIDMwNTYzLCAzMDU2NywgMzA1NzMsIDMwNTc2LCAzMDU3OSwgMzA1ODUsIAotICAgIDMwNTg5LCAzMDU5NSwgMzA1OTgsIDMwNjAxLCAzMDYwNCwgMzA2MDgsIDMwNjEyLCAzMDYxOCwgMzA2MjQsIDMwNjI3LCAKLSAgICAzMDYzMCwgMzA2MzQsIDMwNjM5LCAzMDY0NCwgMzA2NTEsIDMwNjU2LCAzMDY2MywgMzA2NzAsIDMwNjc5LCAzMDY4NiwgCi0gICAgMzA2OTUsIDMwNzAwLCAzMDcwNywgMzA3MTQsIDMwNzIzLCAzMDcyOCwgMzA3MzUsIDMwNzQwLCAzMDc0NiwgMzA3NTIsIAotICAgIDMwNzU4LCAzMDc2NCwgMzA3NzAsIDMwNzc2LCAwLCAwLCAwLCAwLCAzMDc4MiwgMzA3ODYsIDMwNzg5LCAzMDc5MiwgCi0gICAgMzA3OTUsIDMwNzk4LCAzMDgwMSwgMzA4MDQsIDMwODA3LCAzMDgxMCwgMzA4MTMsIDMwODE2LCAzMDgxOSwgMzA4MjIsIAotICAgIDMwODI3LCAzMDgzMiwgMzA4MzcsIDMwODQwLCAzMDg0NSwgMzA4NTAsIDMwODU1LCAzMDg2MCwgMzA4NjcsIDMwODcyLCAKLSAgICAzMDg3NywgMzA4ODIsIDMwODg3LCAzMDg5NCwgMzA5MDAsIDMwOTA2LCAzMDkxMiwgMzA5MTgsIDMwOTI0LCAzMDkzMywgCi0gICAgMzA5NDIsIDMwOTQ4LCAzMDk1NCwgMzA5NjIsIDMwOTcwLCAzMDk3OSwgMzA5ODgsIDMwOTk2LCAzMTAwNCwgMzEwMTMsIAotICAgIDMxMDIyLCAwLCAwLCAwLCAzMTAzMCwgMzEwMzQsIDMxMDM4LCAzMTA0MiwgMzEwNDUsIDMxMDQ4LCAzMTA1MSwgMzEwNTUsIAotICAgIDMxMDU4LCAzMTA2MSwgMzEwNjUsIDMxMDY4LCAzMTA3MiwgMzEwNzYsIDMxMDgwLCAzMTA4NCwgMzEwODgsIDMxMDkyLCAKLSAgICAzMTA5NiwgMzExMDAsIDMxMTA0LCAzMTEwNywgMzExMTAsIDMxMTE0LCAzMTExOCwgMzExMjIsIDMxMTI1LCAzMTEyOCwgCi0gICAgMzExMzEsIDMxMTM1LCAzMTEzOSwgMzExNDIsIDMxMTQ2LCAzMTE0OSwgMzExNTQsIDMxMTU5LCAzMTE2NCwgMzExNjksIAotICAgIDMxMTc0LCAzMTE3OSwgMzExODQsIDMxMTg5LCAzMTE5NCwgMzExOTgsIDMxMjAyLCAzMTIwOCwgMzEyMTUsIDMxMjE5LCAKLSAgICAzMTIyMywgMzEyMjcsIDMxMjMwLCAzMTIzMywgMzEyMzYsIDMxMjM5LCAzMTI0MiwgMzEyNDUsIDMxMjQ4LCAzMTI1MSwgCi0gICAgMzEyNTQsIDMxMjU3LCAzMTI2MSwgMzEyNjUsIDMxMjY5LCAzMTI3NCwgMzEyNzgsIDMxMjgyLCAzMTI4OCwgMzEyOTIsIAotICAgIDMxMjk4LCAzMTMwNCwgMzEzMDksIDMxMzE2LCAzMTMyMCwgMzEzMjYsIDMxMzMwLCAzMTMzNiwgMzEzNDEsIDMxMzQ4LCAKLSAgICAzMTM1NSwgMzEzNjAsIDMxMzY3LCAzMTM3MiwgMzEzNzcsIDMxMzgxLCAzMTM4NywgMzEzOTEsIDMxMzk3LCAzMTQwNCwgCi0gICAgMzE0MTEsIDMxNDE1LCAzMTQyMSwgMzE0MjcsIDMxNDMxLCAzMTQzNywgMzE0NDIsIDMxNDQ3LCAzMTQ1NCwgMzE0NTksIAotICAgIDMxNDY0LCAzMTQ2OSwgMzE0NzQsIDMxNDc4LCAzMTQ4MiwgMzE0ODcsIDMxNDkyLCAzMTQ5OSwgMzE1MDUsIDMxNTEwLCAKLSAgICAzMTUxNywgMzE1MjIsIDMxNTI5LCAzMTUzNCwgMzE1NDMsIDMxNTQ5LCAzMTU1NSwgMzE1NTksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDMxNTYzLCAzMTU3MiwgMzE1NzksIDMxNTg2LCAzMTU5MywgMzE1OTYsIDMxNjAwLCAzMTYwNCwgMzE2MDgsIAotICAgIDMxNjEyLCAzMTYxNiwgMzE2MjAsIDMxNjI0LCAzMTYyOCwgMzE2MzIsIDMxNjM2LCAzMTY0MCwgMzE2NDQsIDMxNjQ3LCAKLSAgICAzMTY1MCwgMzE2NTQsIDMxNjU4LCAzMTY2MiwgMzE2NjYsIDMxNjcwLCAzMTY3NCwgMzE2NzcsIDMxNjgxLCAzMTY4NSwgCi0gICAgMzE2ODksIDMxNjkzLCAzMTY5NiwgMzE2OTksIDMxNzAzLCAzMTcwNiwgMzE3MTAsIDMxNzE0LCAzMTcxNywgMzE3MjEsIAotICAgIDMxNzI1LCAzMTcyOCwgMzE3MzMsIDMxNzM4LCAzMTc0MywgMzE3NDcsIDMxNzUxLCAzMTc1NiwgMzE3NjAsIDMxNzY1LCAKLSAgICAzMTc2OSwgMzE3NzQsIDMxNzc4LCAzMTc4MiwgMzE3ODcsIDMxNzkyLCAzMTc5NiwgMzE4MDEsIDMxODA2LCAzMTgxMSwgCi0gICAgMzE4MTUsIDAsIDAsIDAsIDMxODE5LCAzMTgyNCwgMzE4MzMsIDMxODM4LCAzMTg0NSwgMzE4NTAsIDMxODU0LCAzMTg1NywgCi0gICAgMzE4NjAsIDMxODYzLCAzMTg2NiwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDAsIDAsIDAsIDMxODgxLCAzMTg4NSwgCi0gICAgMzE4ODksIDMxODkzLCAzMTkwMCwgMzE5MDYsIDMxOTEyLCAzMTkxOCwgMzE5MjQsIDMxOTMwLCAzMTkzNiwgMzE5NDIsIAotICAgIDMxOTQ4LCAzMTk1NCwgMzE5NjEsIDMxOTY4LCAzMTk3NSwgMzE5ODIsIDMxOTg5LCAzMTk5NiwgMzIwMDMsIDMyMDEwLCAKLSAgICAzMjAxNywgMzIwMjQsIDMyMDMxLCAzMjAzOCwgMzIwNDUsIDMyMDUyLCAzMjA1OSwgMzIwNjYsIDMyMDczLCAzMjA4MCwgCi0gICAgMzIwODcsIDMyMDk0LCAzMjEwMSwgMzIxMDgsIDMyMTE1LCAzMjEyMiwgMzIxMjksIDMyMTM2LCAzMjE0MywgMzIxNTAsIAotICAgIDMyMTU3LCAzMjE2NCwgMzIxNzIsIDMyMTgwLCAzMjE4OCwgMzIxOTQsIDMyMjAwLCAzMjIwNiwgMzIyMTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMzczLCAzMDM3OSwgCisgICAgMzAzODUsIDMwMzg5LCAzMDM5MywgMzAzOTcsIDMwNDAxLCAzMDQwNywgMzA0MTEsIDMwNDE3LCAzMDQyMSwgMzA0MjcsIAorICAgIDMwNDMzLCAzMDQ0MSwgMzA0NDcsIDMwNDU1LCAzMDQ1OSwgMzA0NjMsIDMwNDY3LCAzMDQ3MywgMzA0NzYsIDMwNDgyLCAKKyAgICAzMDQ4NiwgMzA0OTIsIDMwNDk2LCAzMDUwMCwgMzA1MDYsIDMwNTEwLCAzMDUxNiwgMzA1MjAsIDMwNTI2LCAzMDUzNCwgCisgICAgMzA1NDIsIDMwNTUwLCAzMDU1NiwgMzA1NjAsIDMwNTY2LCAzMDU3MCwgMzA1NzYsIDMwNTc5LCAzMDU4MiwgMzA1ODgsIAorICAgIDMwNTkyLCAzMDU5OCwgMzA2MDEsIDMwNjA0LCAzMDYwNywgMzA2MTEsIDMwNjE1LCAzMDYyMSwgMzA2MjcsIDMwNjMwLCAKKyAgICAzMDYzMywgMzA2MzcsIDMwNjQyLCAzMDY0NywgMzA2NTQsIDMwNjU5LCAzMDY2NiwgMzA2NzMsIDMwNjgyLCAzMDY4OSwgCisgICAgMzA2OTgsIDMwNzAzLCAzMDcxMCwgMzA3MTcsIDMwNzI2LCAzMDczMSwgMzA3MzgsIDMwNzQzLCAzMDc0OSwgMzA3NTUsIAorICAgIDMwNzYxLCAzMDc2NywgMzA3NzMsIDMwNzc5LCAwLCAwLCAwLCAwLCAzMDc4NSwgMzA3ODksIDMwNzkyLCAzMDc5NSwgCisgICAgMzA3OTgsIDMwODAxLCAzMDgwNCwgMzA4MDcsIDMwODEwLCAzMDgxMywgMzA4MTYsIDMwODE5LCAzMDgyMiwgMzA4MjUsIAorICAgIDMwODMwLCAzMDgzNSwgMzA4NDAsIDMwODQzLCAzMDg0OCwgMzA4NTMsIDMwODU4LCAzMDg2MywgMzA4NzAsIDMwODc1LCAKKyAgICAzMDg4MCwgMzA4ODUsIDMwODkwLCAzMDg5NywgMzA5MDMsIDMwOTA5LCAzMDkxNSwgMzA5MjEsIDMwOTI3LCAzMDkzNiwgCisgICAgMzA5NDUsIDMwOTUxLCAzMDk1NywgMzA5NjUsIDMwOTczLCAzMDk4MiwgMzA5OTEsIDMwOTk5LCAzMTAwNywgMzEwMTYsIAorICAgIDMxMDI1LCAwLCAwLCAwLCAzMTAzMywgMzEwMzcsIDMxMDQxLCAzMTA0NSwgMzEwNDgsIDMxMDUxLCAzMTA1NCwgMzEwNTgsIAorICAgIDMxMDYxLCAzMTA2NCwgMzEwNjgsIDMxMDcxLCAzMTA3NSwgMzEwNzksIDMxMDgzLCAzMTA4NywgMzEwOTEsIDMxMDk1LCAKKyAgICAzMTA5OSwgMzExMDMsIDMxMTA3LCAzMTExMCwgMzExMTMsIDMxMTE3LCAzMTEyMSwgMzExMjUsIDMxMTI4LCAzMTEzMSwgCisgICAgMzExMzQsIDMxMTM4LCAzMTE0MiwgMzExNDUsIDMxMTQ5LCAzMTE1MiwgMzExNTcsIDMxMTYyLCAzMTE2NywgMzExNzIsIAorICAgIDMxMTc3LCAzMTE4MiwgMzExODcsIDMxMTkyLCAzMTE5NywgMzEyMDEsIDMxMjA1LCAzMTIxMSwgMzEyMTgsIDMxMjIyLCAKKyAgICAzMTIyNiwgMzEyMzAsIDMxMjMzLCAzMTIzNiwgMzEyMzksIDMxMjQyLCAzMTI0NSwgMzEyNDgsIDMxMjUxLCAzMTI1NCwgCisgICAgMzEyNTcsIDMxMjYwLCAzMTI2NCwgMzEyNjgsIDMxMjcyLCAzMTI3NywgMzEyODEsIDMxMjg1LCAzMTI5MSwgMzEyOTUsIAorICAgIDMxMzAxLCAzMTMwNywgMzEzMTIsIDMxMzE5LCAzMTMyMywgMzEzMjksIDMxMzMzLCAzMTMzOSwgMzEzNDQsIDMxMzUxLCAKKyAgICAzMTM1OCwgMzEzNjMsIDMxMzcwLCAzMTM3NSwgMzEzODAsIDMxMzg0LCAzMTM5MCwgMzEzOTQsIDMxNDAwLCAzMTQwNywgCisgICAgMzE0MTQsIDMxNDE4LCAzMTQyNCwgMzE0MzAsIDMxNDM0LCAzMTQ0MCwgMzE0NDUsIDMxNDUwLCAzMTQ1NywgMzE0NjIsIAorICAgIDMxNDY3LCAzMTQ3MiwgMzE0NzcsIDMxNDgxLCAzMTQ4NSwgMzE0OTAsIDMxNDk1LCAzMTUwMiwgMzE1MDgsIDMxNTEzLCAKKyAgICAzMTUyMCwgMzE1MjUsIDMxNTMyLCAzMTUzNywgMzE1NDYsIDMxNTUyLCAzMTU1OCwgMzE1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMxNTY2LCAzMTU3NSwgMzE1ODIsIDMxNTg5LCAzMTU5NiwgMzE1OTksIDMxNjAzLCAzMTYwNywgMzE2MTEsIAorICAgIDMxNjE1LCAzMTYxOSwgMzE2MjMsIDMxNjI3LCAzMTYzMSwgMzE2MzUsIDMxNjM5LCAzMTY0MywgMzE2NDcsIDMxNjUwLCAKKyAgICAzMTY1MywgMzE2NTcsIDMxNjYxLCAzMTY2NSwgMzE2NjksIDMxNjczLCAzMTY3NywgMzE2ODAsIDMxNjg0LCAzMTY4OCwgCisgICAgMzE2OTIsIDMxNjk2LCAzMTY5OSwgMzE3MDIsIDMxNzA2LCAzMTcwOSwgMzE3MTMsIDMxNzE3LCAzMTcyMCwgMzE3MjQsIAorICAgIDMxNzI4LCAzMTczMSwgMzE3MzYsIDMxNzQxLCAzMTc0NiwgMzE3NTAsIDMxNzU0LCAzMTc1OSwgMzE3NjMsIDMxNzY4LCAKKyAgICAzMTc3MiwgMzE3NzcsIDMxNzgxLCAzMTc4NSwgMzE3OTAsIDMxNzk1LCAzMTc5OSwgMzE4MDQsIDMxODA5LCAzMTgxNCwgCisgICAgMzE4MTgsIDAsIDAsIDAsIDMxODIyLCAzMTgyNywgMzE4MzYsIDMxODQxLCAzMTg0OCwgMzE4NTMsIDMxODU3LCAzMTg2MCwgCisgICAgMzE4NjMsIDMxODY2LCAzMTg2OSwgMzE4NzIsIDMxODc1LCAzMTg3OCwgMzE4ODEsIDAsIDAsIDAsIDMxODg0LCAzMTg4OCwgCisgICAgMzE4OTIsIDMxODk2LCAzMTkwMywgMzE5MDksIDMxOTE1LCAzMTkyMSwgMzE5MjcsIDMxOTMzLCAzMTkzOSwgMzE5NDUsIAorICAgIDMxOTUxLCAzMTk1NywgMzE5NjQsIDMxOTcxLCAzMTk3OCwgMzE5ODUsIDMxOTkyLCAzMTk5OSwgMzIwMDYsIDMyMDEzLCAKKyAgICAzMjAyMCwgMzIwMjcsIDMyMDM0LCAzMjA0MSwgMzIwNDgsIDMyMDU1LCAzMjA2MiwgMzIwNjksIDMyMDc2LCAzMjA4MywgCisgICAgMzIwOTAsIDMyMDk3LCAzMjEwNCwgMzIxMTEsIDMyMTE4LCAzMjEyNSwgMzIxMzIsIDMyMTM5LCAzMjE0NiwgMzIxNTMsIAorICAgIDMyMTYwLCAzMjE2NywgMzIxNzUsIDMyMTgzLCAzMjE5MSwgMzIxOTcsIDMyMjAzLCAzMjIwOSwgMzIyMTcsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjIzLCAzMjIzMCwgMzIyMzcsIDMyMjQ0LCAzMjI1MSwgCi0gICAgMzIyNjAsIDMyMjY5LCAzMjI3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyODcsIDMyMjkyLCAzMjI5NywgMzIzMDIsIAotICAgIDMyMzA3LCAzMjMxNiwgMzIzMjcsIDMyMzM2LCAzMjM0NywgMzIzNTMsIDMyMzY2LCAzMjM3MiwgMzIzNzksIDMyMzg2LCAKLSAgICAzMjM5MSwgMzIzOTcsIDMyNDAzLCAzMjQxNCwgMzI0MjMsIDMyNDMwLCAzMjQzNywgMzI0NDYsIDMyNDUzLCAzMjQ2MiwgCi0gICAgMzI0NzIsIDMyNDgyLCAzMjQ4OSwgMzI0OTYsIDMyNTAzLCAzMjUxMywgMzI1MTgsIDMyNTI2LCAzMjUzMiwgMzI1NDAsIAotICAgIDMyNTQ5LCAzMjU1NCwgMzI1NjEsIDMyNTY3LCAzMjU3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI1NzcsIAotICAgIDMyNTgyLCAzMjU4OCwgMzI1OTUsIDMyNjAzLCAzMjYwOSwgMzI2MTUsIDMyNjIxLCAzMjYyNiwgMzI2MzMsIDMyNjM5LCAKLSAgICAzMjY0NSwgMzI2NTEsIDMyNjU5LCAzMjY2NCwgMzI2NzIsIDMyNjc3LCAzMjY4MywgMzI2ODksIDMyNjk2LCAzMjcwNCwgCi0gICAgMzI3MTEsIDMyNzE3LCAzMjcyNCwgMzI3MzEsIDMyNzM3LCAzMjc0NCwgMzI3NTEsIDMyNzU3LCAzMjc2MiwgMzI3NjgsIAotICAgIDMyNzc2LCAzMjc4NCwgMzI3OTAsIDMyNzk2LCAzMjgwMiwgMzI4MDgsIDMyODE2LCAzMjgyMCwgMzI4MjYsIDMyODMyLCAKLSAgICAzMjgzOCwgMzI4NDQsIDMyODUwLCAzMjg1NiwgMzI4NjAsIDMyODY1LCAzMjg3MCwgMzI4NzcsIDMyODgyLCAzMjg4NiwgCi0gICAgMzI4OTIsIDMyODk3LCAzMjkwMiwgMzI5MDYsIDMyOTExLCAzMjkxNiwgMzI5MjAsIDMyOTI0LCAzMjkyOSwgMzI5MzYsIAotICAgIDMyOTQwLCAzMjk0NSwgMzI5NTAsIDMyOTU0LCAzMjk1OSwgMzI5NjMsIDMyOTY4LCAzMjk3MiwgMzI5NzgsIDMyOTgzLCAKLSAgICAzMjk5MCwgMzI5OTUsIDMzMDAwLCAzMzAwNCwgMzMwMDksIDMzMDE0LCAzMzAyMSwgMzMwMjYsIDMzMDMyLCAzMzAzNywgCi0gICAgMzMwNDEsIDMzMDQ2LCAzMzA1MCwgMzMwNTUsIDMzMDYyLCAzMzA2OSwgMzMwNzQsIDMzMDc5LCAzMzA4MywgMzMwODksIAotICAgIDMzMDk1LCAzMzEwMCwgMzMxMDUsIDMzMTEwLCAzMzExNiwgMzMxMjEsIDMzMTI3LCAzMzEzMiwgMzMxMzgsIDMzMTQ0LCAKLSAgICAzMzE1MCwgMzMxNTcsIDMzMTY0LCAzMzE3MSwgMzMxNzgsIDMzMTg1LCAzMzE5MiwgMzMxOTcsIDMzMjA1LCAzMzIxNCwgCi0gICAgMzMyMjMsIDMzMjMyLCAzMzI0MSwgMzMyNTAsIDMzMjU5LCAzMzI3MSwgMzMyODAsIDMzMjg5LCAzMzI5OCwgMzMzMDUsIAotICAgIDMzMzEwLCAzMzMxNywgMzMzMjUsIDMzMzMzLCAzMzM0MCwgMzMzNDcsIDMzMzU0LCAzMzM2MSwgMzMzNjksIDMzMzc4LCAKLSAgICAzMzM4NywgMzMzOTYsIDMzNDA1LCAzMzQxNCwgMzM0MjMsIDMzNDMyLCAzMzQ0MSwgMzM0NTAsIDMzNDU5LCAzMzQ2OCwgCi0gICAgMzM0NzcsIDMzNDg2LCAzMzQ5NSwgMzM1MDMsIDMzNTEyLCAzMzUyMywgMzM1MzEsIDMzNTQwLCAzMzU1MSwgMzM1NjAsIAotICAgIDMzNTY5LCAzMzU3OCwgMzM1ODcsIDMzNTk1LCAzMzYwNCwgMzM2MTEsIDMzNjE2LCAzMzYyNCwgMzM2MjksIDMzNjM2LCAKLSAgICAzMzY0MSwgMzM2NTAsIDMzNjU2LCAzMzY2MywgMzM2NzAsIDMzNjc1LCAzMzY4MCwgMzM2ODgsIDMzNjk2LCAzMzcwNSwgCi0gICAgMzM3MTQsIDMzNzE5LCAzMzcyNiwgMzM3MzcsIDMzNzQ1LCAzMzc1NCwgMzM3NjAsIDMzNzY2LCAzMzc3MSwgMzM3NzgsIAotICAgIDMzNzgzLCAzMzc5MiwgMzM3OTcsIDMzODAyLCAzMzgwNywgMzM4MTQsIDMzODIxLCAzMzgyNiwgMzM4MzUsIDMzODQzLCAKLSAgICAzMzg0OCwgMzM4NTMsIDMzODYwLCAzMzg2NywgMzM4NzEsIDMzODc1LCAzMzg3OCwgMzM4ODEsIDMzODg0LCAzMzg4NywgCi0gICAgMzM4OTAsIDMzODkzLCAzMzkwMCwgMzM5MDMsIDMzOTA2LCAzMzkxMSwgMzM5MTUsIDMzOTE5LCAzMzkyMywgMzM5MjcsIAotICAgIDMzOTMxLCAzMzk0MCwgMzM5NDYsIDMzOTUyLCAzMzk1OCwgMzM5NjYsIDMzOTc0LCAzMzk4MCwgMzM5ODYsIDMzOTkzLCAKLSAgICAzMzk5OSwgMzQwMDQsIDM0MDEwLCAzNDAxNiwgMzQwMjIsIDM0MDI5LCAzNDAzNSwgMzQwNDMsIDM0MDQ5LCAzNDA1NiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQwNjIsIDM0MDY5LCAKLSAgICAzNDA3NiwgMzQwODEsIDM0MDkwLCAzNDA5OCwgMzQxMDYsIDM0MTEzLCAzNDEyMCwgMzQxMjcsIDM0MTM0LCAzNDE0MiwgCi0gICAgMzQxNTAsIDM0MTYwLCAzNDE3MCwgMzQxNzgsIDM0MTg2LCAzNDE5NCwgMzQyMDIsIDM0MjExLCAzNDIyMCwgMzQyMjgsIAotICAgIDM0MjM2LCAzNDI0NSwgMzQyNTQsIDM0MjY0LCAzNDI3NCwgMzQyODMsIDM0MjkyLCAzNDMwMCwgMzQzMDgsIDM0MzE2LCAKLSAgICAzNDMyNCwgMzQzMzQsIDM0MzQ0LCAzNDM1MiwgMzQzNjAsIDM0MzY4LCAzNDM3NiwgMzQzODQsIDM0MzkyLCAzNDQwMCwgCi0gICAgMzQ0MDgsIDM0NDE2LCAzNDQyNCwgMzQ0MzIsIDM0NDQwLCAzNDQ0OSwgMzQ0NTgsIDM0NDY3LCAzNDQ3NiwgMzQ0ODYsIAotICAgIDM0NDk2LCAzNDUwMywgMzQ1MTAsIDM0NTE4LCAzNDUyNiwgMzQ1MzUsIDM0NTQ0LCAzNDU1MiwgMzQ1NjAsIDM0NTcyLCAKLSAgICAzNDU4NCwgMzQ1OTMsIDM0NjAyLCAzNDYxMSwgMzQ2MjAsIDM0NjI3LCAzNDYzNCwgMzQ2NDIsIDM0NjUwLCAzNDY1OCwgCi0gICAgMzQ2NjYsIDM0Njc0LCAzNDY4MiwgMzQ2OTAsIDM0Njk4LCAzNDcwNywgMzQ3MTYsIDM0NzI1LCAzNDczNCwgMzQ3NDMsIAotICAgIDM0NzUyLCAzNDc2MiwgMzQ3NzIsIDM0NzgyLCAzNDc5MiwgMzQ4MDEsIDM0ODEwLCAzNDgxNywgMzQ4MjQsIDM0ODMyLCAKLSAgICAzNDg0MCwgMzQ4NDgsIDM0ODU2LCAzNDg2NCwgMzQ4NzIsIDM0ODg0LCAzNDg5NiwgMzQ5MDUsIDM0OTE0LCAzNDkyMiwgCi0gICAgMzQ5MzAsIDM0OTM4LCAzNDk0NiwgMzQ5NTcsIDM0OTY4LCAzNDk3OSwgMzQ5OTAsIDM1MDAyLCAzNTAxNCwgMzUwMjIsIAotICAgIDM1MDMwLCAzNTAzOCwgMzUwNDYsIDM1MDU1LCAzNTA2NCwgMzUwNzMsIDM1MDgyLCAzNTA5MCwgMzUwOTgsIDM1MTA2LCAKLSAgICAzNTExNCwgMzUxMjIsIDM1MTMwLCAzNTEzOSwgMzUxNDgsIDM1MTU4LCAzNTE2OCwgMzUxNzUsIDM1MTgyLCAzNTE5MCwgCi0gICAgMzUxOTgsIDM1MjA2LCAzNTIxNCwgMzUyMjEsIDM1MjI4LCAzNTIzNiwgMzUyNDQsIDM1MjUyLCAzNTI2MCwgMzUyNjgsIAotICAgIDM1Mjc2LCAzNTI4NCwgMzUyOTIsIDM1MzAwLCAzNTMwOCwgMzUzMTYsIDM1MzI0LCAzNTMzMiwgMzUzNDAsIDM1MzQ4LCAKLSAgICAzNTM1NiwgMzUzNjUsIDM1Mzc0LCAzNTM4MywgMzUzOTEsIDM1NDAwLCAzNTQwOSwgMzU0MTgsIDM1NDI3LCAzNTQzNywgCi0gICAgMzU0NDYsIDM1NDUzLCAzNTQ1OCwgMzU0NjUsIDM1NDcyLCAzNTQ4MCwgMzU0ODgsIDM1NDk3LCAzNTUwNiwgMzU1MTYsIAotICAgIDM1NTI2LCAzNTUzNywgMzU1NDgsIDM1NTU3LCAzNTU2NiwgMzU1NzYsIDM1NTg2LCAzNTU5NSwgMzU2MDQsIDM1NjE0LCAKLSAgICAzNTYyNCwgMzU2MzUsIDM1NjQ2LCAzNTY1NSwgMzU2NjQsIDM1Njc0LCAzNTY4NCwgMzU2OTEsIDM1Njk4LCAzNTcwNiwgCi0gICAgMzU3MTQsIDM1NzIwLCAzNTcyNiwgMzU3MzUsIDM1NzQ0LCAzNTc1NCwgMzU3NjQsIDM1Nzc1LCAzNTc4NiwgMzU3OTUsIAotICAgIDM1ODA0LCAzNTgxNCwgMzU4MjQsIDM1ODMzLCAzNTg0MiwgMzU4NTAsIDM1ODU4LCAzNTg2NSwgMzU4NzIsIDM1ODgwLCAKLSAgICAzNTg4OCwgMzU4OTcsIDM1OTA2LCAzNTkxNiwgMzU5MjYsIDM1OTM3LCAzNTk0OCwgMzU5NTcsIDM1OTY2LCAzNTk3NiwgCi0gICAgMzU5ODYsIDM1OTk1LCAzNjAwNCwgMzYwMTQsIDM2MDI0LCAzNjAzNSwgMzYwNDYsIDM2MDU1LCAzNjA2NCwgMzYwNzQsIAotICAgIDM2MDg0LCAzNjA5MSwgMzYwOTgsIDM2MTA2LCAzNjExNCwgMzYxMjMsIDM2MTMyLCAzNjE0MiwgMzYxNTIsIDM2MTYzLCAKLSAgICAzNjE3NCwgMzYxODMsIDM2MTkyLCAzNjIwMiwgMzYyMTIsIDM2MjIwLCAzNjIyOCwgMzYyMzYsIDM2MjQ0LCAzNjI1MywgCi0gICAgMzYyNjIsIDM2MjY5LCAzNjI3NiwgMzYyODMsIDM2MjkwLCAzNjI5NywgMzYzMDQsIDM2MzEyLCAzNjMyMCwgMzYzMjgsIAotICAgIDM2MzM2LCAzNjM0NywgMzYzNTgsIDM2MzY5LCAzNjM4MCwgMzYzOTEsIDM2NDAyLCAzNjQxMCwgMzY0MTgsIDM2NDI5LCAKLSAgICAzNjQ0MCwgMzY0NTEsIDM2NDYyLCAzNjQ3MywgMzY0ODQsIDM2NDkyLCAzNjUwMCwgMzY1MTEsIDM2NTIyLCAzNjUzMywgMCwgCi0gICAgMCwgMzY1NDQsIDM2NTUyLCAzNjU2MCwgMzY1NzEsIDM2NTgyLCAzNjU5MywgMCwgMCwgMzY2MDQsIDM2NjEyLCAzNjYyMCwgCi0gICAgMzY2MzEsIDM2NjQyLCAzNjY1MywgMzY2NjQsIDM2Njc1LCAzNjY4NiwgMzY2OTQsIDM2NzAyLCAzNjcxMywgMzY3MjQsIAotICAgIDM2NzM1LCAzNjc0NiwgMzY3NTcsIDM2NzY4LCAzNjc3NiwgMzY3ODQsIDM2Nzk1LCAzNjgwNiwgMzY4MTcsIDM2ODI4LCAKLSAgICAzNjgzOSwgMzY4NTAsIDM2ODU4LCAzNjg2NiwgMzY4NzcsIDM2ODg4LCAzNjg5OSwgMzY5MTAsIDM2OTIxLCAzNjkzMiwgCi0gICAgMzY5NDAsIDM2OTQ4LCAzNjk1OSwgMzY5NzAsIDM2OTgxLCAwLCAwLCAzNjk5MiwgMzcwMDAsIDM3MDA4LCAzNzAxOSwgCi0gICAgMzcwMzAsIDM3MDQxLCAwLCAwLCAzNzA1MiwgMzcwNjAsIDM3MDY4LCAzNzA3OSwgMzcwOTAsIDM3MTAxLCAzNzExMiwgCi0gICAgMzcxMjMsIDAsIDM3MTM0LCAwLCAzNzE0MiwgMCwgMzcxNTMsIDAsIDM3MTY0LCAzNzE3NSwgMzcxODMsIDM3MTkxLCAKLSAgICAzNzIwMiwgMzcyMTMsIDM3MjI0LCAzNzIzNSwgMzcyNDYsIDM3MjU3LCAzNzI2NSwgMzcyNzMsIDM3Mjg0LCAzNzI5NSwgCi0gICAgMzczMDYsIDM3MzE3LCAzNzMyOCwgMzczMzksIDM3MzQ3LCAzNzM1NSwgMzczNjMsIDM3MzcxLCAzNzM3OSwgMzczODcsIAotICAgIDM3Mzk1LCAzNzQwMywgMzc0MTEsIDM3NDE5LCAzNzQyNywgMzc0MzUsIDM3NDQzLCAwLCAwLCAzNzQ1MSwgMzc0NjIsIAotICAgIDM3NDczLCAzNzQ4NywgMzc1MDEsIDM3NTE1LCAzNzUyOSwgMzc1NDMsIDM3NTU3LCAzNzU2OCwgMzc1NzksIDM3NTkzLCAKLSAgICAzNzYwNywgMzc2MjEsIDM3NjM1LCAzNzY0OSwgMzc2NjMsIDM3Njc0LCAzNzY4NSwgMzc2OTksIDM3NzEzLCAzNzcyNywgCi0gICAgMzc3NDEsIDM3NzU1LCAzNzc2OSwgMzc3ODAsIDM3NzkxLCAzNzgwNSwgMzc4MTksIDM3ODMzLCAzNzg0NywgMzc4NjEsIAotICAgIDM3ODc1LCAzNzg4NiwgMzc4OTcsIDM3OTExLCAzNzkyNSwgMzc5MzksIDM3OTUzLCAzNzk2NywgMzc5ODEsIDM3OTkyLCAKLSAgICAzODAwMywgMzgwMTcsIDM4MDMxLCAzODA0NSwgMzgwNTksIDM4MDczLCAzODA4NywgMzgwOTUsIDM4MTAzLCAzODExNCwgCi0gICAgMzgxMjIsIDAsIDM4MTMzLCAzODE0MSwgMzgxNTIsIDM4MTYwLCAzODE2OCwgMzgxNzYsIDM4MTg0LCAzODE5MiwgMzgxOTUsIAotICAgIDM4MTk4LCAzODIwMSwgMzgyMDQsIDM4MjEwLCAzODIyMSwgMzgyMjksIDAsIDM4MjQwLCAzODI0OCwgMzgyNTksIDM4MjY3LCAKLSAgICAzODI3NSwgMzgyODMsIDM4MjkxLCAzODI5OSwgMzgzMDUsIDM4MzExLCAzODMxNywgMzgzMjUsIDM4MzMzLCAzODM0NCwgMCwgCi0gICAgMCwgMzgzNTUsIDM4MzYzLCAzODM3NCwgMzgzODIsIDM4MzkwLCAzODM5OCwgMCwgMzg0MDYsIDM4NDEyLCAzODQxOCwgCi0gICAgMzg0MjQsIDM4NDMyLCAzODQ0MCwgMzg0NTEsIDM4NDYyLCAzODQ3MCwgMzg0NzgsIDM4NDg2LCAzODQ5NywgMzg1MDUsIAotICAgIDM4NTEzLCAzODUyMSwgMzg1MjksIDM4NTM3LCAzODU0MywgMzg1NDksIDAsIDAsIDM4NTUyLCAzODU2MywgMzg1NzEsIDAsIAotICAgIDM4NTgyLCAzODU5MCwgMzg2MDEsIDM4NjA5LCAzODYxNywgMzg2MjUsIDM4NjMzLCAzODY0MSwgMzg2NDQsIDAsIDM4NjQ3LCAKLSAgICAzODY1MSwgMzg2NTUsIDM4NjU5LCAzODY2MywgMzg2NjcsIDM4NjcxLCAzODY3NSwgMzg2NzksIDM4NjgzLCAzODY4NywgCi0gICAgMzg2OTEsIDM4Njk3LCAzODcwMywgMzg3MDksIDM4NzEyLCAzODcxNSwgMzg3MTcsIDM4NzIxLCAzODcyNSwgMzg3MjksIAotICAgIDM4NzMzLCAzODczNSwgMzg3MzksIDM4NzQzLCAzODc0OSwgMzg3NTUsIDM4NzYyLCAzODc2OSwgMzg3NzQsIDM4Nzc5LCAKLSAgICAzODc4NSwgMzg3OTEsIDM4NzkzLCAzODc5NiwgMzg3OTgsIDM4ODAyLCAzODgwNiwgMzg4MTAsIDM4ODEzLCAzODgxNywgCi0gICAgMzg4MjEsIDM4ODI1LCAzODgyOSwgMzg4MzMsIDM4ODM5LCAzODg0MywgMzg4NDcsIDM4ODUzLCAzODg1OCwgMzg4NjUsIAotICAgIDM4ODY3LCAzODg3MCwgMzg4NzQsIDM4ODc4LCAzODg4MywgMzg4ODksIDM4ODkxLCAzODkwMCwgMzg5MDksIDM4OTEyLCAKLSAgICAzODkxNiwgMzg5MTgsIDM4OTIwLCAzODkyMiwgMzg5MjUsIDM4OTMxLCAzODkzMywgMzg5MzcsIDM4OTQxLCAzODk0OCwgCi0gICAgMzg5NTUsIDM4OTU5LCAzODk2NCwgMzg5NjksIDM4OTc0LCAzODk3OSwgMzg5ODMsIDM4OTg3LCAzODk5MCwgMzg5OTQsIAotICAgIDM4OTk4LCAzOTAwNSwgMzkwMTAsIDM5MDE0LCAzOTAxOCwgMzkwMjMsIDM5MDI3LCAzOTAzMSwgMzkwMzYsIDM5MDQxLCAKLSAgICAzOTA0NSwgMzkwNDksIDM5MDUzLCAzOTA1NSwgMzkwNjAsIDM5MDY1LCAzOTA2OSwgMzkwNzMsIDM5MDc3LCAzOTA4MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzkwODUsIDM5MDkxLCAzOTA5NywgMzkxMDQsIDM5MTExLCAzOTExNiwgMzkxMjEsIDM5MTI1LCAwLCAwLCAKLSAgICAzOTEzMSwgMzkxMzQsIDM5MTM3LCAzOTE0MCwgMzkxNDMsIDM5MTQ2LCAzOTE0OSwgMzkxNTMsIDM5MTU3LCAzOTE2MiwgCi0gICAgMzkxNjcsIDM5MTcyLCAzOTE3OSwgMzkxODMsIDM5MTg2LCAzOTE4OSwgMzkxOTIsIDM5MTk1LCAzOTE5OCwgMzkyMDEsIAotICAgIDM5MjA0LCAzOTIwNywgMzkyMTAsIDM5MjE0LCAzOTIxOCwgMzkyMjMsIDM5MjI4LCAwLCAzOTIzMywgMzkyMzksIDM5MjQ1LCAKLSAgICAzOTI1MSwgMzkyNTgsIDM5MjY1LCAzOTI3MiwgMzkyNzksIDM5Mjg1LCAzOTI5MSwgMzkyOTgsIDM5MzA1LCAzOTMxMiwgMCwgCi0gICAgMCwgMCwgMzkzMTksIDM5MzIyLCAzOTMyNSwgMzkzMjgsIDM5MzMzLCAzOTMzNiwgMzkzMzksIDM5MzQyLCAzOTM0NSwgCi0gICAgMzkzNDgsIDM5MzUxLCAzOTM1NSwgMzkzNTgsIDM5MzYxLCAzOTM2NCwgMzkzNjcsIDM5MzcwLCAzOTM3NSwgMzkzNzgsIAotICAgIDM5MzgxLCAzOTM4NCwgMzkzODcsIDM5MzkwLCAzOTM5NSwgMzkzOTgsIDM5NDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQwNiwgMzk0MTEsIDM5NDE2LCAzOTQyMywgCi0gICAgMzk0MzEsIDM5NDM2LCAzOTQ0MSwgMzk0NDUsIDM5NDQ5LCAzOTQ1NCwgMzk0NjEsIDM5NDY4LCAzOTQ3MiwgMzk0NzcsIAotICAgIDM5NDgyLCAzOTQ4NywgMzk0OTIsIDM5NDk5LCAzOTUwNCwgMzk1MDksIDM5NTE0LCAzOTUyMywgMzk1MzAsIDM5NTM3LCAKLSAgICAzOTU0MSwgMzk1NDYsIDM5NTUyLCAzOTU1NywgMzk1NjQsIDM5NTczLCAzOTU4MiwgMzk1ODYsIDM5NTkwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTU5NCwgMzk1OTgsIDM5NjA2LCAzOTYxMCwgMzk2MTQsIAotICAgIDM5NjE5LCAzOTYyMywgMzk2MjcsIDM5NjMxLCAzOTYzMywgMzk2MzcsIDM5NjQxLCAzOTY0NSwgMzk2NTAsIDM5NjU0LCAKLSAgICAzOTY1OCwgMzk2NjYsIDM5NjY5LCAzOTY3MywgMzk2NzYsIDM5Njc5LCAzOTY4NSwgMzk2ODksIDM5NjkyLCAzOTY5OCwgCi0gICAgMzk3MDIsIDM5NzA2LCAzOTcxMCwgMzk3MTMsIDM5NzE3LCAzOTcyMCwgMzk3MjQsIDM5NzI2LCAzOTcyOSwgMzk3MzIsIAotICAgIDM5NzM2LCAzOTczOCwgMzk3NDIsIDM5NzQ1LCAzOTc0OCwgMzk3NTMsIDM5NzU4LCAzOTc2NSwgMzk3NjgsIDM5NzcxLCAKLSAgICAzOTc3NSwgMzk3ODAsIDM5NzgzLCAzOTc4NiwgMzk3ODksIDM5NzkzLCAzOTc5OCwgMzk4MDEsIDM5ODA0LCAzOTgwNiwgCi0gICAgMzk4MDksIDM5ODEyLCAzOTgxNSwgMzk4MTksIDM5ODI0LCAzOTgyNywgMzk4MzEsIDM5ODM1LCAzOTgzOSwgMzk4NDMsIAotICAgIDM5ODQ4LCAzOTg1NCwgMzk4NTksIDM5ODY0LCAzOTg3MCwgMzk4NzUsIDM5ODgwLCAzOTg4NCwgMzk4ODgsIDM5ODkzLCAKLSAgICAzOTg5NywgMzk5MDEsIDM5OTA0LCAzOTkwNiwgMzk5MTEsIDM5OTE3LCAzOTkyNCwgMzk5MzEsIDM5OTM4LCAzOTk0NSwgCi0gICAgMzk5NTIsIDM5OTU5LCAzOTk2NiwgMzk5NzMsIDM5OTgxLCAzOTk4OCwgMzk5OTYsIDQwMDAzLCA0MDAxMCwgNDAwMTgsIAotICAgIDQwMDI2LCA0MDAzMSwgNDAwMzYsIDQwMDQxLCA0MDA0NiwgNDAwNTEsIDQwMDU2LCA0MDA2MSwgNDAwNjYsIDQwMDcxLCAKLSAgICA0MDA3NiwgNDAwODIsIDQwMDg4LCA0MDA5NCwgNDAxMDAsIDQwMTA3LCA0MDExNSwgNDAxMjIsIDQwMTI4LCA0MDEzNCwgCi0gICAgNDAxNDAsIDQwMTQ2LCA0MDE1MiwgNDAxNTgsIDQwMTY0LCA0MDE3MCwgNDAxNzYsIDQwMTgzLCA0MDE5MCwgNDAxOTcsIAotICAgIDQwMjA0LCA0MDIxMiwgNDAyMjEsIDQwMjI5LCA0MDI0MCwgNDAyNDgsIDQwMjU2LCA0MDI2NSwgNDAyNzIsIDQwMjgxLCAKLSAgICA0MDI5MCwgNDAyOTgsIDQwMzA3LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDMxNSwgNDAzMTcsIDQwMzIwLCA0MDMyMiwgNDAzMjUsIAotICAgIDQwMzI4LCA0MDMzMSwgNDAzMzYsIDQwMzQxLCA0MDM0NiwgNDAzNTEsIDQwMzU1LCA0MDM1OSwgNDAzNjMsIDQwMzY3LCAKLSAgICA0MDM3MiwgNDAzNzgsIDQwMzgzLCA0MDM4OSwgNDAzOTQsIDQwMzk5LCA0MDQwNCwgNDA0MTAsIDQwNDE1LCA0MDQyMSwgCi0gICAgNDA0MjcsIDQwNDMxLCA0MDQzNSwgNDA0NDAsIDQwNDQ1LCA0MDQ1MCwgNDA0NTUsIDQwNDYwLCA0MDQ2OCwgNDA0NzYsIAotICAgIDQwNDg0LCA0MDQ5MiwgNDA0OTksIDQwNTA3LCA0MDUxNCwgNDA1MjEsIDQwNTMwLCA0MDU0MiwgNDA1NDgsIDQwNTU0LCAKLSAgICA0MDU2MiwgNDA1NzAsIDQwNTc5LCA0MDU4OCwgNDA1OTYsIDQwNjA0LCA0MDYxMywgNDA2MjIsIDQwNjI3LCA0MDYzNSwgCi0gICAgNDA2NDAsIDQwNjQ1LCA0MDY1MSwgNDA2NTYsIDQwNjYyLCA0MDY2OSwgNDA2NzYsIDQwNjgxLCA0MDY4NywgNDA2OTIsIAotICAgIDQwNjk1LCA0MDY5OSwgNDA3MDIsIDQwNzA2LCA0MDcxMCwgNDA3MTQsIDQwNzIwLCA0MDcyNiwgNDA3MzIsIDQwNzM4LCAKLSAgICA0MDc0MiwgNDA3NDYsIDQwNzUwLCA0MDc1NCwgNDA3NjAsIDQwNzY2LCA0MDc3MCwgNDA3NzUsIDQwNzc5LCA0MDc4NCwgCi0gICAgNDA3ODksIDQwNzk0LCA0MDc5NywgNDA4MDEsIDQwODA0LCA0MDgwOCwgNDA4MTUsIDQwODIzLCA0MDgzNCwgNDA4NDUsIAotICAgIDQwODUwLCA0MDg1OSwgNDA4NjYsIDQwODc1LCA0MDg4NCwgNDA4ODgsIDQwODk0LCA0MDkwMiwgNDA5MDYsIDQwOTExLCAKLSAgICA0MDkxNiwgNDA5MjIsIDQwOTI4LCA0MDkzNCwgNDA5NDEsIDQwOTQ1LCA0MDk0OSwgNDA5NTQsIDQwOTU3LCA0MDk1OSwgCi0gICAgNDA5NjMsIDQwOTY3LCA0MDk3NSwgNDA5NzksIDQwOTgxLCA0MDk4MywgNDA5ODcsIDQwOTk1LCA0MTAwMCwgNDEwMDYsIAotICAgIDQxMDE2LCA0MTAyMywgNDEwMjgsIDQxMDMyLCA0MTAzNiwgNDEwNDAsIDQxMDQzLCA0MTA0NiwgNDEwNDksIDQxMDUzLCAKLSAgICA0MTA1NywgNDEwNjEsIDQxMDY1LCA0MTA2OSwgNDEwNzIsIDQxMDc2LCA0MTA4MCwgNDEwODMsIDQxMDg1LCA0MTA4OCwgCi0gICAgNDEwOTAsIDQxMDk0LCA0MTA5OCwgNDExMDAsIDQxMTA2LCA0MTEwOSwgNDExMTQsIDQxMTE4LCA0MTEyMiwgNDExMjQsIAotICAgIDQxMTI2LCA0MTEyOCwgNDExMzEsIDQxMTM1LCA0MTEzOSwgNDExNDMsIDQxMTQ3LCA0MTE1MSwgNDExNTcsIDQxMTYzLCAKLSAgICA0MTE2NSwgNDExNjcsIDQxMTY5LCA0MTE3MSwgNDExNzQsIDQxMTc2LCA0MTE4MCwgNDExODIsIDQxMTg2LCA0MTE4OSwgCi0gICAgNDExOTUsIDQxMTk5LCA0MTIwMywgNDEyMDYsIDQxMjA5LCA0MTIxMywgNDEyMTksIDQxMjIzLCA0MTIzMywgNDEyNDMsIAotICAgIDQxMjQ3LCA0MTI1MywgNDEyNTksIDQxMjYyLCA0MTI2NiwgNDEyNjksIDQxMjc0LCA0MTI3OCwgNDEyODQsIDQxMjg4LCAKLSAgICA0MTMwMCwgNDEzMDgsIDQxMzEyLCA0MTMxNiwgNDEzMjIsIDQxMzI2LCA0MTMyOSwgNDEzMzEsIDQxMzM0LCA0MTMzOCwgCi0gICAgNDEzNDIsIDQxMzQ5LCA0MTM1MywgNDEzNTcsIDQxMzYxLCA0MTM2NCwgNDEzNjksIDQxMzc0LCA0MTM3OSwgNDEzODQsIAotICAgIDQxMzg5LCA0MTM5NCwgNDE0MDIsIDQxNDEwLCA0MTQxNCwgNDE0MTgsIDQxNDIwLCA0MTQyNSwgNDE0MjksIDQxNDMzLCAKLSAgICA0MTQ0MSwgNDE0NDksIDQxNDU1LCA0MTQ2MSwgNDE0NzAsIDQxNDc5LCA0MTQ4NCwgNDE0ODksIDQxNDk3LCA0MTUwNSwgCi0gICAgNDE1MDcsIDQxNTA5LCA0MTUxNCwgNDE1MTksIDQxNTI1LCA0MTUzMSwgNDE1MzcsIDQxNTQzLCA0MTU0NywgNDE1NTEsIAotICAgIDQxNTU4LCA0MTU2NSwgNDE1NzEsIDQxNTc3LCA0MTU4NywgNDE1OTcsIDQxNjA1LCA0MTYxMywgNDE2MTUsIDQxNjE5LCAKLSAgICA0MTYyMywgNDE2MjgsIDQxNjMzLCA0MTY0MCwgNDE2NDcsIDQxNjUwLCA0MTY1MywgNDE2NTYsIDQxNjU5LCA0MTY2MiwgCi0gICAgNDE2NjcsIDQxNjcxLCA0MTY3NiwgNDE2ODEsIDQxNjg0LCA0MTY4NywgNDE2OTAsIDQxNjkzLCA0MTY5NiwgNDE3MDAsIAotICAgIDQxNzAzLCA0MTcwNiwgNDE3MDksIDQxNzEyLCA0MTcxNCwgNDE3MTYsIDQxNzE4LCA0MTcyMCwgNDE3MjgsIDQxNzM2LCAKLSAgICA0MTc0MiwgNDE3NDYsIDQxNzUyLCA0MTc2MiwgNDE3NjgsIDQxNzc0LCA0MTc4MCwgNDE3ODgsIDQxNzk2LCA0MTgwNywgCi0gICAgNDE4MTEsIDQxODE1LCA0MTgxNywgNDE4MjMsIDQxODI1LCA0MTgyNywgNDE4MjksIDQxODMxLCA0MTgzNywgNDE4NDAsIAotICAgIDQxODQ2LCA0MTg1MiwgNDE4NTYsIDQxODYwLCA0MTg2NCwgNDE4NjcsIDQxODcxLCA0MTg3NSwgNDE4NzcsIDQxODg2LCAKLSAgICA0MTg5NSwgNDE5MDAsIDQxOTA1LCA0MTkxMSwgNDE5MTcsIDQxOTIzLCA0MTkyNiwgNDE5MjksIDQxOTMyLCA0MTkzNSwgCi0gICAgNDE5MzcsIDQxOTQyLCA0MTk0NywgNDE5NTIsIDQxOTU4LCA0MTk2NCwgNDE5NzIsIDQxOTgwLCA0MTk4NiwgNDE5OTIsIAotICAgIDQxOTk4LCA0MjAwNCwgNDIwMTMsIDQyMDIyLCA0MjAzMSwgNDIwNDAsIDQyMDQ5LCA0MjA1OCwgNDIwNjcsIDQyMDc2LCAKLSAgICA0MjA4NSwgNDIwOTQsIDQyMTAyLCA0MjExNCwgNDIxMjQsIDQyMTM5LCA0MjE0MiwgNDIxNDcsIDQyMTUzLCA0MjE1OSwgCi0gICAgNDIxNjYsIDQyMTgwLCA0MjE5NSwgNDIyMDEsIDQyMjA3LCA0MjIxNCwgNDIyMjAsIDQyMjI4LCA0MjIzNCwgNDIyNDcsIAotICAgIDQyMjYxLCA0MjI2NiwgNDIyNzIsIDQyMjc5LCA0MjI4MiwgNDIyODUsIDQyMjg3LCA0MjI5MCwgNDIyOTMsIDQyMjk1LCAKLSAgICA0MjI5NywgNDIzMDEsIDQyMzA0LCA0MjMwNywgNDIzMTAsIDQyMzEzLCA0MjMxOCwgNDIzMjMsIDQyMzI4LCA0MjMzMywgCi0gICAgNDIzMzgsIDQyMzQxLCA0MjM0MywgNDIzNDUsIDQyMzQ3LCA0MjM1MSwgNDIzNTUsIDQyMzU5LCA0MjM2NSwgNDIzNzAsIAotICAgIDQyMzcyLCA0MjM3NCwgNDIzNzksIDQyMzg0LCA0MjM4OSwgNDIzOTQsIDQyMzk5LCA0MjQwNCwgNDI0MDYsIDQyNDA4LCAKLSAgICA0MjQxNywgNDI0MjEsIDQyNDI5LCA0MjQzOCwgNDI0NDAsIDQyNDQ1LCA0MjQ1MCwgNDI0NTgsIDQyNDYyLCA0MjQ2NCwgCi0gICAgNDI0NjgsIDQyNDcwLCA0MjQ3NCwgNDI0NzgsIDQyNDgyLCA0MjQ4NCwgNDI0ODYsIDQyNDg4LCA0MjQ5NSwgNDI1MDQsIAotICAgIDQyNTEzLCA0MjUyMiwgNDI1MzEsIDQyNTQwLCA0MjU0OSwgNDI1NTgsIDQyNTY3LCA0MjU3NSwgNDI1ODMsIDQyNTkyLCAKLSAgICA0MjYwMSwgNDI2MTAsIDQyNjE5LCA0MjYyNywgNDI2MzUsIDQyNjQ0LCA0MjY1MywgNDI2NjIsIDQyNjcyLCA0MjY4MSwgCi0gICAgNDI2OTEsIDQyNzAwLCA0MjcxMCwgNDI3MTksIDQyNzI5LCA0MjczOSwgNDI3NDgsIDQyNzU4LCA0Mjc2NywgNDI3NzcsIAotICAgIDQyNzg2LCA0Mjc5NiwgNDI4MDUsIDQyODE0LCA0MjgyMywgNDI4MzIsIDQyODQxLCA0Mjg1MSwgNDI4NjAsIDQyODY5LCAKLSAgICA0Mjg3OCwgNDI4ODgsIDQyODk3LCA0MjkwNiwgNDI5MTUsIDQyOTI0LCA0MjkzNCwgNDI5NDQsIDQyOTUzLCA0Mjk2MiwgCi0gICAgNDI5NzAsIDQyOTc4LCA0Mjk4NSwgNDI5OTMsIDQzMDAyLCA0MzAxMywgNDMwMjIsIDQzMDMxLCA0MzA0MCwgNDMwNDcsIAotICAgIDQzMDU0LCA0MzA2MSwgNDMwNzAsIDQzMDc5LCA0MzA4OCwgNDMwOTcsIDQzMTA0LCA0MzEwOSwgNDMxMTgsIDQzMTIzLCAKLSAgICA0MzEyNiwgNDMxMzQsIDQzMTM3LCA0MzE0MiwgNDMxNDcsIDQzMTUwLCA0MzE1MywgNDMxNjEsIDQzMTY0LCA0MzE2OSwgCi0gICAgNDMxNzIsIDQzMTc5LCA0MzE4NCwgNDMxOTIsIDQzMTk1LCA0MzE5OCwgNDMyMDEsIDQzMjA2LCA0MzIxMSwgNDMyMTQsIAotICAgIDQzMjE3LCA0MzIyNSwgNDMyMjgsIDQzMjM1LCA0MzI0MiwgNDMyNDYsIDQzMjUwLCA0MzI1NSwgNDMyNjAsIDQzMjY2LCAKLSAgICA0MzI3MSwgNDMyNzcsIDQzMjgzLCA0MzI4OCwgNDMyOTQsIDQzMzAyLCA0MzMwOCwgNDMzMTYsIDQzMzI0LCA0MzMzMCwgCi0gICAgNDMzMzgsIDQzMzQ2LCA0MzM1NSwgNDMzNjMsIDQzMzY5LCA0MzM3NywgNDMzODYsIDQzMzk0LCA0MzM5OCwgNDM0MDMsIAotICAgIDQzNDE2LCA0MzQyOSwgNDM0MzMsIDQzNDM3LCA0MzQ0MSwgNDM0NDUsIDQzNDU1LCA0MzQ1OSwgNDM0NjQsIDQzNDY5LCAKLSAgICA0MzQ3NCwgNDM0NzksIDQzNDg0LCA0MzQ4OSwgNDM0OTksIDQzNTA5LCA0MzUxNywgNDM1MjcsIDQzNTM3LCA0MzU0NSwgCi0gICAgNDM1NTUsIDQzNTY1LCA0MzU3MywgNDM1ODMsIDQzNTkzLCA0MzYwMSwgNDM2MDksIDQzNjE5LCA0MzYyOSwgNDM2MzIsIAotICAgIDQzNjM1LCA0MzYzOCwgNDM2NDMsIDQzNjQ3LCA0MzY1MywgNDM2NjAsIDQzNjY3LCA0MzY3NSwgNDM2ODIsIDQzNjg2LCAKLSAgICA0MzY5MCwgNDM2OTQsIDQzNjk4LCA0MzcwMCwgNDM3MDQsIDQzNzA4LCA0MzcxMywgNDM3MTgsIDQzNzI1LCA0MzczMiwgCi0gICAgNDM3MzUsIDQzNzQyLCA0Mzc0NCwgNDM3NDYsIDQzNzUwLCA0Mzc1NCwgNDM3NTksIDQzNzY1LCA0Mzc3MSwgNDM3NzcsIAotICAgIDQzNzgzLCA0Mzc5MiwgNDM4MDEsIDQzODEwLCA0MzgxNCwgNDM4MTYsIDQzODIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MzgyNywgNDM4MzEsIDQzODM4LCA0Mzg0NSwgNDM4NTIsIDQzODU5LCA0Mzg2MywgNDM4NjcsIAotICAgIDQzODcxLCA0Mzg3NSwgNDM4ODAsIDQzODg2LCA0Mzg5MSwgNDM4OTcsIDQzOTAzLCA0MzkwOSwgNDM5MTUsIDQzOTIzLCAKLSAgICA0MzkzMCwgNDM5MzcsIDQzOTQ0LCA0Mzk1MSwgNDM5NTYsIDQzOTYyLCA0Mzk3MSwgNDM5NzUsIDQzOTgyLCA0Mzk4NiwgCi0gICAgNDM5OTAsIDQzOTk2LCA0NDAwMiwgNDQwMDgsIDQ0MDE0LCA0NDAxOCwgNDQwMjIsIDQ0MDI1LCA0NDAyOCwgNDQwMzIsIAotICAgIDQ0MDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NDA0NiwgNDQwNDksIDQ0MDUzLCA0NDA1NywgNDQwNjMsIDQ0MDY5LCA0NDA3NSwgNDQwODMsIDQ0MDkwLCAKLSAgICA0NDA5NCwgNDQxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ0MTA3LCA0NDExMCwgNDQxMTMsIDQ0MTE2LCA0NDExOSwgNDQxMjIsIDQ0MTI1LCA0NDEyOCwgNDQxMzEsIDQ0MTM0LCAKLSAgICA0NDEzOCwgNDQxNDIsIDQ0MTQ2LCA0NDE1MCwgNDQxNTQsIDQ0MTU4LCA0NDE2MiwgNDQxNjYsIDQ0MTcwLCA0NDE3NCwgCi0gICAgNDQxNzgsIDQ0MTgxLCA0NDE4NCwgNDQxODcsIDQ0MTkwLCA0NDE5MywgNDQxOTYsIDQ0MTk5LCA0NDIwMiwgNDQyMDUsIAotICAgIDQ0MjA5LCA0NDIxMywgNDQyMTcsIDQ0MjIxLCA0NDIyNSwgNDQyMjksIDQ0MjMzLCA0NDIzNywgNDQyNDEsIDQ0MjQ1LCAKLSAgICA0NDI0OSwgNDQyNTUsIDQ0MjYxLCA0NDI2NywgNDQyNzQsIDQ0MjgxLCA0NDI4OCwgNDQyOTUsIDQ0MzAyLCA0NDMwOSwgCi0gICAgNDQzMTYsIDQ0MzIzLCA0NDMzMCwgNDQzMzcsIDQ0MzQ0LCA0NDM1MSwgNDQzNTgsIDQ0MzY1LCA0NDM3MiwgNDQzNzksIAotICAgIDQ0Mzg2LCA0NDM5MSwgNDQzOTcsIDQ0NDAzLCA0NDQwOSwgNDQ0MTQsIDQ0NDIwLCA0NDQyNiwgNDQ0MzIsIDQ0NDM3LCAKLSAgICA0NDQ0MywgNDQ0NDksIDQ0NDU0LCA0NDQ1OSwgNDQ0NjUsIDQ0NDcwLCA0NDQ3NiwgNDQ0ODIsIDQ0NDg3LCA0NDQ5MywgCi0gICAgNDQ0OTksIDQ0NTA0LCA0NDUxMCwgNDQ1MTYsIDQ0NTIyLCA0NDUyOCwgNDQ1MzQsIDQ0NTM5LCA0NDU0NSwgNDQ1NTEsIAotICAgIDQ0NTU3LCA0NDU2MiwgNDQ1NjgsIDQ0NTc0LCA0NDU4MCwgNDQ1ODUsIDQ0NTkxLCA0NDU5NywgNDQ2MDIsIDQ0NjA3LCAKLSAgICA0NDYxMywgNDQ2MTgsIDQ0NjI0LCA0NDYzMCwgNDQ2MzUsIDQ0NjQxLCA0NDY0NywgNDQ2NTIsIDQ0NjU4LCA0NDY2NCwgCi0gICAgNDQ2NzAsIDQ0Njc2LCA0NDY4MiwgNDQ2ODcsIDQ0NjkzLCA0NDY5OSwgNDQ3MDUsIDQ0NzEwLCA0NDcxNiwgNDQ3MjIsIAotICAgIDQ0NzI4LCA0NDczMywgNDQ3MzksIDQ0NzQ1LCA0NDc1MCwgNDQ3NTUsIDQ0NzYxLCA0NDc2NiwgNDQ3NzIsIDQ0Nzc4LCAKLSAgICA0NDc4MywgNDQ3ODksIDQ0Nzk1LCA0NDgwMCwgNDQ4MDYsIDQ0ODEyLCA0NDgxOCwgNDQ4MjQsIDQ0ODMwLCA0NDgzNCwgCi0gICAgNDQ4MzksIDQ0ODQ0LCA0NDg0OSwgNDQ4NTQsIDQ0ODU5LCA0NDg2NCwgNDQ4NjksIDQ0ODc0LCA0NDg3OSwgNDQ4ODQsIAotICAgIDQ0ODg4LCA0NDg5MiwgNDQ4OTYsIDQ0OTAwLCA0NDkwNCwgNDQ5MDgsIDQ0OTEyLCA0NDkxNiwgNDQ5MjAsIDQ0OTI1LCAKLSAgICA0NDkzMCwgNDQ5MzUsIDQ0OTQwLCA0NDk0NSwgNDQ5NTAsIDQ0OTU5LCA0NDk2OCwgNDQ5NzcsIDQ0OTg2LCA0NDk5NSwgCi0gICAgNDUwMDQsIDQ1MDEzLCA0NTAyMiwgNDUwMjksIDQ1MDM3LCA0NTA0NSwgNDUwNTIsIDQ1MDU5LCA0NTA2NywgNDUwNzUsIAotICAgIDQ1MDgyLCA0NTA4OSwgNDUwOTcsIDQ1MTA1LCA0NTExMiwgNDUxMTksIDQ1MTI3LCA0NTEzNSwgNDUxNDIsIDQ1MTQ5LCAKLSAgICA0NTE1NywgNDUxNjYsIDQ1MTc1LCA0NTE4MywgNDUxOTIsIDQ1MjAxLCA0NTIwOCwgNDUyMTUsIDQ1MjIzLCA0NTIzMiwgCi0gICAgNDUyNDEsIDQ1MjQ5LCA0NTI1OCwgNDUyNjcsIDQ1Mjc0LCA0NTI4MSwgNDUyOTAsIDQ1Mjk5LCA0NTMwNywgNDUzMTUsIAotICAgIDQ1MzI0LCA0NTMzMywgNDUzNDAsIDQ1MzQ3LCA0NTM1NiwgNDUzNjUsIDQ1MzczLCA0NTM4MSwgNDUzOTAsIDQ1Mzk5LCAKLSAgICA0NTQwNiwgNDU0MTMsIDQ1NDIyLCA0NTQzMSwgNDU0MzksIDQ1NDQ4LCA0NTQ1NywgNDU0NjUsIDQ1NDc1LCA0NTQ4NSwgCi0gICAgNDU0OTUsIDQ1NTA1LCA0NTUxNCwgNDU1MjMsIDQ1NTMyLCA0NTU0MSwgNDU1NDgsIDQ1NTU2LCA0NTU2NCwgNDU1NzIsIAotICAgIDQ1NTgwLCA0NTU4NSwgNDU1OTAsIDQ1NTk5LCA0NTYwNywgNDU2MTQsIDQ1NjIzLCA0NTYzMSwgNDU2MzgsIDQ1NjQ3LCAKLSAgICA0NTY1NSwgNDU2NjIsIDQ1NjcxLCA0NTY3OSwgNDU2ODYsIDQ1Njk1LCA0NTcwMywgNDU3MTAsIDQ1NzE5LCA0NTcyNywgCi0gICAgNDU3MzQsIDQ1NzQzLCA0NTc1MSwgNDU3NTgsIDQ1NzY3LCA0NTc3NSwgNDU3ODIsIDQ1NzkxLCA0NTc5OSwgNDU4MDYsIAotICAgIDQ1ODE1LCA0NTgyNCwgNDU4MzMsIDQ1ODQyLCA0NTg1NiwgNDU4NzAsIDQ1ODc3LCA0NTg4MiwgNDU4ODcsIDQ1ODkyLCAKLSAgICA0NTg5NywgNDU5MDIsIDQ1OTA3LCA0NTkxMiwgNDU5MTcsIDQ1OTI1LCA0NTkzMywgNDU5NDEsIDQ1OTQ5LCA0NTk1NCwgCi0gICAgNDU5NjEsIDQ1OTY4LCA0NTk3NSwgNDU5ODAsIDQ1OTg4LCA0NTk5NSwgNDYwMDMsIDQ2MDA3LCA0NjAxNCwgNDYwMjAsIAotICAgIDQ2MDI3LCA0NjAzMSwgNDYwMzcsIDQ2MDQzLCA0NjA0OSwgNDYwNTMsIDQ2MDU2LCA0NjA2MCwgNDYwNjQsIDQ2MDcxLCAKLSAgICA0NjA3NywgNDYwODMsIDQ2MDg5LCA0NjA5NSwgNDYxMDksIDQ2MTE5LCA0NjEzMywgNDYxNDcsIDQ2MTUzLCA0NjE2MywgCi0gICAgNDYxNzcsIDQ2MTgwLCA0NjE4MywgNDYxOTAsIDQ2MTk4LCA0NjIwMywgNDYyMDgsIDQ2MjE2LCA0NjIyOCwgNDYyNDAsIAotICAgIDQ2MjQ4LCA0NjI1MiwgNDYyNTYsIDQ2MjU5LCA0NjI2MiwgNDYyNjYsIDQ2MjcwLCA0NjI3MywgNDYyNzYsIDQ2MjgxLCAKLSAgICA0NjI4NiwgNDYyOTIsIDQ2Mjk4LCA0NjMwMywgNDYzMDgsIDQ2MzE0LCA0NjMyMCwgNDYzMjUsIDQ2MzMwLCA0NjMzNSwgCi0gICAgNDYzNDAsIDQ2MzQ2LCA0NjM1MiwgNDYzNTcsIDQ2MzYyLCA0NjM2OCwgNDYzNzQsIDQ2Mzc5LCA0NjM4NCwgNDYzODcsIAotICAgIDQ2MzkwLCA0NjM5OSwgNDY0MDEsIDQ2NDAzLCA0NjQwNiwgNDY0MTAsIDQ2NDE2LCA0NjQxOCwgNDY0MjEsIDQ2NDI4LCAKLSAgICA0NjQzNSwgNDY0NDMsIDQ2NDUxLCA0NjQ2MSwgNDY0NzUsIDQ2NDgwLCA0NjQ4NSwgNDY0ODksIDQ2NDk0LCA0NjUwMiwgCi0gICAgNDY1MTAsIDQ2NTE5LCA0NjUyOCwgNDY1MzcsIDQ2NTQ2LCA0NjU1MSwgNDY1NTYsIDQ2NTYyLCA0NjU2OCwgNDY1NzQsIAotICAgIDQ2NTgwLCA0NjU4MywgNDY1ODksIDQ2NTk1LCA0NjYwNSwgNDY2MTUsIDQ2NjIzLCA0NjYzMSwgNDY2NDAsIDQ2NjQ5LCAKLSAgICA0NjY1MywgNDY2NjEsIDQ2NjY5LCA0NjY3NywgNDY2ODUsIDQ2Njk0LCA0NjcwMywgNDY3MTIsIDQ2NzIxLCA0NjcyNiwgCi0gICAgNDY3MzEsIDQ2NzM2LCA0Njc0MSwgNDY3NDYsIDQ2NzUyLCA0Njc1OCwgNDY3NjMsIDQ2NzY5LCA0Njc3MSwgNDY3NzMsIAotICAgIDQ2Nzc1LCA0Njc3NywgNDY3ODAsIDQ2NzgzLCA0Njc4NSwgNDY3ODcsIDQ2Nzg5LCA0Njc5MywgNDY3OTcsIDQ2Nzk5LCAKLSAgICA0NjgwMSwgNDY4MDQsIDQ2ODA3LCA0NjgxMSwgNDY4MTcsIDQ2ODIzLCA0NjgyNSwgNDY4MzIsIDQ2ODM2LCA0Njg0MSwgCi0gICAgNDY4NDYsIDQ2ODQ4LCA0Njg1OCwgNDY4NjQsIDQ2ODcwLCA0Njg3NiwgNDY4ODIsIDQ2ODg4LCA0Njg5NCwgNDY4OTksIAotICAgIDQ2OTAyLCA0NjkwNSwgNDY5MDgsIDQ2OTEwLCA0NjkxMiwgNDY5MTYsIDQ2OTIwLCA0NjkyNSwgNDY5MzAsIDQ2OTM1LCAKLSAgICA0NjkzOCwgNDY5NDIsIDQ2OTQ3LCA0Njk1MCwgNDY5NTQsIDQ2OTU5LCA0Njk2NCwgNDY5NjksIDQ2OTc0LCA0Njk3OSwgCi0gICAgNDY5ODQsIDQ2OTg5LCA0Njk5NCwgNDY5OTksIDQ3MDA0LCA0NzAwOSwgNDcwMTQsIDQ3MDIwLCA0NzAyNiwgNDcwMzIsIAotICAgIDQ3MDM0LCA0NzAzNywgNDcwMzksIDQ3MDQyLCA0NzA0NCwgNDcwNDYsIDQ3MDQ4LCA0NzA1MCwgNDcwNTIsIDQ3MDU0LCAKLSAgICA0NzA1NiwgNDcwNTgsIDQ3MDYwLCA0NzA2MiwgNDcwNjQsIDQ3MDY2LCA0NzA2OCwgNDcwNzAsIDQ3MDcyLCA0NzA3NCwgCi0gICAgNDcwNzYsIDQ3MDgxLCA0NzA4NiwgNDcwOTEsIDQ3MDk2LCA0NzEwMSwgNDcxMDYsIDQ3MTExLCA0NzExNiwgNDcxMjEsIAotICAgIDQ3MTI2LCA0NzEzMSwgNDcxMzYsIDQ3MTQxLCA0NzE0NiwgNDcxNTEsIDQ3MTU2LCA0NzE2MSwgNDcxNjYsIDQ3MTcxLCAKLSAgICA0NzE3NiwgNDcxODAsIDQ3MTg0LCA0NzE4OCwgNDcxOTQsIDQ3MjAwLCA0NzIwNSwgNDcyMTAsIDQ3MjE1LCA0NzIyMCwgCi0gICAgNDcyMjUsIDQ3MjMwLCA0NzIzOCwgNDcyNDYsIDQ3MjU0LCA0NzI2MiwgNDcyNzAsIDQ3Mjc4LCA0NzI4NiwgNDcyOTQsIAotICAgIDQ3MzAwLCA0NzMwNSwgNDczMTAsIDQ3MzE1LCA0NzMxOCwgNDczMjIsIDQ3MzI2LCA0NzMzMCwgNDczMzQsIDQ3MzM4LCAKLSAgICA0NzM0MiwgNDczNDksIDQ3MzU2LCA0NzM2NCwgNDczNzIsIDQ3Mzc3LCA0NzM4MiwgNDczODksIDQ3Mzk2LCA0NzQwMywgCi0gICAgNDc0MTAsIDQ3NDEzLCA0NzQxNiwgNDc0MjEsIDQ3NDIzLCA0NzQyNywgNDc0MzIsIDQ3NDM0LCA0NzQzNiwgNDc0MzgsIAotICAgIDQ3NDQwLCA0NzQ0NSwgNDc0NDgsIDQ3NDUwLCA0NzQ1NSwgNDc0NjIsIDQ3NDY5LCA0NzQ3MiwgNDc0NzYsIDQ3NDgxLCAKLSAgICA0NzQ4NiwgNDc0OTQsIDQ3NTAwLCA0NzUwNiwgNDc1MTgsIDQ3NTI1LCA0NzUzMiwgNDc1MzcsIDQ3NTQyLCA0NzU0OCwgCi0gICAgNDc1NTEsIDQ3NTU0LCA0NzU1OSwgNDc1NjEsIDQ3NTY1LCA0NzU2NywgNDc1NjksIDQ3NTcxLCA0NzU3MywgNDc1NzUsIAotICAgIDQ3NTc3LCA0NzU4MiwgNDc1ODQsIDQ3NTg2LCA0NzU4OCwgNDc1OTAsIDQ3NTk0LCA0NzU5NiwgNDc1OTksIDQ3NjA0LCAKLSAgICA0NzYwOSwgNDc2MTQsIDQ3NjE5LCA0NzYyNSwgNDc2MzEsIDQ3NjMzLCA0NzYzNiwgNDc2NDMsIDQ3NjUwLCA0NzY1NywgCi0gICAgNDc2NjQsIDQ3NjY4LCA0NzY3MiwgNDc2NzQsIDQ3Njc2LCA0NzY4MCwgNDc2ODYsIDQ3NjkxLCA0NzY5MywgNDc2OTcsIAotICAgIDQ3NzA2LCA0NzcxNCwgNDc3MjIsIDQ3NzI4LCA0NzczNCwgNDc3MzksIDQ3NzQ1LCA0Nzc1MCwgNDc3NTMsIDQ3NzY3LCAKLSAgICA0Nzc3MCwgNDc3NzUsIDQ3NzgwLCA0Nzc4NiwgNDc3OTYsIDQ3Nzk4LCA0NzgwNCwgNDc4MTAsIDQ3ODE0LCA0NzgyMSwgCi0gICAgNDc4MjUsIDQ3ODI3LCA0NzgyOSwgNDc4MzMsIDQ3ODM5LCA0Nzg0NCwgNDc4NTAsIDQ3ODUyLCA0Nzg1OCwgNDc4NjAsIAotICAgIDQ3ODY2LCA0Nzg2OCwgNDc4NzAsIDQ3ODc1LCA0Nzg3NywgNDc4ODEsIDQ3ODg2LCA0Nzg4OCwgNDc4OTMsIDQ3ODk4LCAKLSAgICA0NzkwMiwgNDc5MDksIDAsIDQ3OTE5LCA0NzkyNSwgNDc5MjgsIDQ3OTM0LCA0NzkzNywgNDc5NDIsIDQ3OTQ3LCA0Nzk1MSwgCi0gICAgNDc5NTMsIDQ3OTU1LCA0Nzk1OSwgNDc5NjMsIDQ3OTY3LCA0Nzk3MSwgNDc5NzYsIDQ3OTc4LCA0Nzk4MywgNDc5ODYsIAotICAgIDQ3OTg5LCA0Nzk5MiwgNDc5OTYsIDQ4MDAwLCA0ODAwNSwgNDgwMDksIDQ4MDE0LCA0ODAxOSwgNDgwMjMsIDQ4MDI4LCAKLSAgICA0ODAzNCwgNDgwMzcsIDQ4MDQzLCA0ODA0OCwgNDgwNTIsIDQ4MDU3LCA0ODA2MywgNDgwNjksIDQ4MDc2LCA0ODA4MiwgCi0gICAgNDgwODksIDQ4MDk2LCA0ODA5OCwgNDgxMDUsIDQ4MTA5LCA0ODExNSwgNDgxMjEsIDQ4MTI2LCA0ODEzMiwgNDgxMzYsIAotICAgIDQ4MTQxLCA0ODE0NCwgNDgxNDksIDQ4MTU1LCA0ODE2MiwgNDgxNzAsIDQ4MTc3LCA0ODE4NiwgNDgxOTYsIDQ4MjAzLCAKLSAgICA0ODIwOSwgNDgyMTMsIDQ4MjIwLCA0ODIyNSwgNDgyMzQsIDQ4MjM3LCA0ODI0MCwgNDgyNDksIDQ4MjU5LCA0ODI2NiwgCi0gICAgNDgyNjgsIDQ4Mjc0LCA0ODI3OSwgNDgyODEsIDQ4Mjg0LCA0ODI4OCwgNDgyOTYsIDQ4MzA1LCA0ODMwOCwgNDgzMTMsIAotICAgIDQ4MzE4LCA0ODMyNiwgNDgzMzQsIDQ4MzQyLCA0ODM1MCwgNDgzNTYsIDQ4MzYyLCA0ODM2OCwgNDgzNzYsIDQ4MzgxLCAKLSAgICA0ODM4NCwgNDgzODgsIDQ4MzkxLCA0ODQwMywgNDg0MTMsIDQ4NDI0LCA0ODQzMywgNDg0NDQsIDQ4NDU0LCA0ODQ2MywgCi0gICAgNDg0NjksIDQ4NDc3LCA0ODQ4MSwgNDg0ODksIDQ4NDkzLCA0ODUwMSwgNDg1MDgsIDQ4NTE1LCA0ODUyNCwgNDg1MzMsIAotICAgIDQ4NTQzLCA0ODU1MywgNDg1NjMsIDQ4NTczLCA0ODU4MiwgNDg1OTEsIDQ4NjAxLCA0ODYxMSwgNDg2MjAsIDQ4NjI5LCAKLSAgICA0ODYzNSwgNDg2NDEsIDQ4NjQ3LCA0ODY1MywgNDg2NTksIDQ4NjY1LCA0ODY3MSwgNDg2NzcsIDQ4NjgzLCA0ODY5MCwgCi0gICAgNDg2OTYsIDQ4NzAyLCA0ODcwOCwgNDg3MTQsIDQ4NzIwLCA0ODcyNiwgNDg3MzIsIDQ4NzM4LCA0ODc0NCwgNDg3NTEsIAotICAgIDQ4NzU4LCA0ODc2NSwgNDg3NzIsIDQ4Nzc5LCA0ODc4NiwgNDg3OTMsIDQ4ODAwLCA0ODgwNywgNDg4MTQsIDQ4ODIyLCAKLSAgICA0ODgyNywgNDg4MzAsIDQ4ODM0LCA0ODgzOCwgNDg4NDQsIDQ4ODQ3LCA0ODg1MywgNDg4NTksIDQ4ODY0LCA0ODg2OCwgCi0gICAgNDg4NzMsIDQ4ODc5LCA0ODg4NiwgNDg4ODksIDQ4ODk2LCA0ODkwMywgNDg5MDcsIDQ4OTE2LCA0ODkyNSwgNDg5MzAsIAotICAgIDQ4OTM2LCA0ODk0MSwgNDg5NDYsIDQ4OTUzLCA0ODk2MCwgNDg5NjgsIDQ4OTc2LCA0ODk4NSwgNDg5ODksIDQ4OTk4LCAKLSAgICA0OTAwMywgNDkwMDcsIDQ5MDE0LCA0OTAxOCwgNDkwMjUsIDQ5MDMzLCA0OTAzOCwgNDkwNDYsIDQ5MDUwLCA0OTA1NSwgCi0gICAgNDkwNTksIDQ5MDY0LCA0OTA2OCwgNDkwNzMsIDQ5MDc4LCA0OTA4NywgNDkwODksIDQ5MDkyLCA0OTA5NSwgNDkxMDIsIAotICAgIDQ5MTA5LCA0OTExNCwgNDkxMjIsIDQ5MTI4LCA0OTEzNCwgNDkxMzksIDQ5MTQyLCA0OTE0NywgNDkxNTIsIDQ5MTU3LCAKLSAgICA0OTE2NSwgNDkxNjksIDQ5MTc2LCA0OTE4NCwgNDkxOTIsIDQ5MTk3LCA0OTIwMiwgNDkyMDgsIDQ5MjEzLCA0OTIxOCwgCi0gICAgNDkyMjQsIDQ5MjI5LCA0OTIzMiwgNDkyMzYsIDQ5MjQwLCA0OTI0NywgNDkyNTYsIDQ5MjYxLCA0OTI3MCwgNDkyNzksIAotICAgIDQ5Mjg1LCA0OTI5MSwgNDkyOTYsIDQ5MzAxLCA0OTMwNiwgNDkzMTEsIDQ5MzE3LCA0OTMyMywgNDkzMzEsIDQ5MzM5LCAKLSAgICA0OTM0NSwgNDkzNTEsIDQ5MzU2LCA0OTM2MSwgNDkzNjgsIDQ5Mzc1LCA0OTM4MSwgNDkzODQsIDQ5Mzg3LCA0OTM5MSwgCi0gICAgNDkzOTUsIDQ5Mzk5LCA0OTQwNCwgNDk0MTAsIDQ5NDE2LCA0OTQyMywgNDk0MzAsIDQ5NDM1LCA0OTQzOSwgNDk0NDMsIAotICAgIDQ5NDQ3LCA0OTQ1MSwgNDk0NTUsIDQ5NDU5LCA0OTQ2MywgNDk0NjcsIDQ5NDcxLCA0OTQ3NSwgNDk0NzksIDQ5NDgzLCAKLSAgICA0OTQ4NywgNDk0OTEsIDQ5NDk1LCA0OTQ5OSwgNDk1MDMsIDQ5NTA3LCA0OTUxMSwgNDk1MTUsIDQ5NTE5LCA0OTUyMywgCi0gICAgNDk1MjcsIDQ5NTMxLCA0OTUzNSwgNDk1MzksIDQ5NTQzLCA0OTU0NywgNDk1NTEsIDQ5NTU1LCA0OTU1OSwgNDk1NjMsIAotICAgIDQ5NTY3LCA0OTU3MSwgNDk1NzUsIDQ5NTc5LCA0OTU4MywgNDk1ODcsIDQ5NTkxLCA0OTU5NSwgNDk1OTksIDQ5NjAzLCAKLSAgICA0OTYwNywgNDk2MTEsIDQ5NjE1LCA0OTYxOSwgNDk2MjMsIDQ5NjI3LCA0OTYzMSwgNDk2MzUsIDQ5NjM5LCA0OTY0MywgCi0gICAgNDk2NDcsIDQ5NjUxLCA0OTY1NSwgNDk2NTksIDQ5NjYzLCA0OTY2NywgNDk2NzEsIDQ5Njc1LCA0OTY3OSwgNDk2ODMsIAotICAgIDQ5Njg3LCA0OTY5MSwgNDk2OTUsIDQ5Njk5LCA0OTcwMywgNDk3MDcsIDQ5NzExLCA0OTcxNSwgNDk3MTksIDQ5NzIzLCAKLSAgICA0OTcyNywgNDk3MzEsIDQ5NzM1LCA0OTczOSwgNDk3NDMsIDQ5NzQ3LCA0OTc1MSwgNDk3NTUsIDQ5NzU5LCA0OTc2MywgCi0gICAgNDk3NjcsIDQ5NzcxLCA0OTc3NSwgNDk3NzksIDQ5NzgzLCA0OTc4NywgNDk3OTEsIDQ5Nzk1LCA0OTc5OSwgNDk4MDMsIAotICAgIDQ5ODA3LCA0OTgxMSwgNDk4MTUsIDQ5ODE5LCA0OTgyMywgNDk4MjcsIDQ5ODMxLCA0OTgzNSwgNDk4MzksIDQ5ODQzLCAKLSAgICA0OTg0NywgNDk4NTEsIDQ5ODU1LCA0OTg1OSwgNDk4NjMsIDQ5ODY3LCA0OTg3MSwgNDk4NzUsIDQ5ODc5LCA0OTg4MywgCi0gICAgNDk4ODcsIDQ5ODkxLCA0OTg5NSwgNDk4OTksIDQ5OTAzLCA0OTkwNywgNDk5MTEsIDQ5OTE1LCA0OTkxOSwgNDk5MjMsIAotICAgIDQ5OTI3LCA0OTkzMSwgNDk5MzUsIDQ5OTM5LCA0OTk0MywgNDk5NDcsIDQ5OTUxLCA0OTk1NSwgNDk5NTksIDQ5OTYzLCAKLSAgICA0OTk2NywgNDk5NzEsIDQ5OTc1LCA0OTk3OSwgNDk5ODMsIDQ5OTg3LCA0OTk5MSwgNDk5OTUsIDQ5OTk5LCA1MDAwMywgCi0gICAgNTAwMDcsIDUwMDExLCA1MDAxNSwgNTAwMTksIDUwMDIzLCA1MDAyNywgNTAwMzEsIDUwMDM1LCA1MDAzOSwgNTAwNDMsIAotICAgIDUwMDQ3LCA1MDA1MSwgNTAwNTUsIDUwMDU5LCA1MDA2MywgNTAwNjcsIDUwMDcxLCA1MDA3NSwgNTAwNzksIDUwMDgzLCAKLSAgICA1MDA4NywgNTAwOTEsIDUwMDk1LCA1MDA5OSwgNTAxMDMsIDUwMTA3LCA1MDExMSwgNTAxMTUsIDUwMTE5LCA1MDEyMywgCi0gICAgNTAxMjcsIDUwMTMxLCA1MDEzNSwgNTAxMzksIDUwMTQzLCA1MDE0NywgNTAxNTEsIDUwMTU1LCA1MDE1OSwgNTAxNjMsIAotICAgIDUwMTY3LCA1MDE3MSwgNTAxNzUsIDUwMTc5LCA1MDE4MywgNTAxODcsIDUwMTkxLCA1MDE5NSwgNTAxOTksIDUwMjAzLCAKLSAgICA1MDIwNywgNTAyMTEsIDUwMjE1LCA1MDIxOSwgNTAyMjMsIDUwMjI3LCA1MDIzMSwgNTAyMzUsIDUwMjM5LCA1MDI0MywgCi0gICAgNTAyNDcsIDUwMjUxLCA1MDI1NSwgNTAyNTksIDUwMjYzLCA1MDI2NywgNTAyNzEsIDUwMjc1LCA1MDI3OSwgNTAyODMsIAotICAgIDUwMjg3LCA1MDI5MSwgNTAyOTUsIDUwMjk5LCA1MDMwMywgNTAzMDcsIDUwMzExLCA1MDMxNSwgNTAzMTksIDUwMzIzLCAKLSAgICA1MDMyNywgNTAzMzEsIDUwMzM1LCA1MDMzOSwgNTAzNDMsIDUwMzQ3LCA1MDM1MSwgNTAzNTUsIDUwMzU5LCA1MDM2MywgCi0gICAgNTAzNjcsIDUwMzcxLCA1MDM3NSwgNTAzNzksIDUwMzgzLCA1MDM4NywgNTAzOTEsIDUwMzk1LCA1MDM5OSwgNTA0MDMsIAotICAgIDUwNDA3LCA1MDQxMSwgNTA0MTUsIDUwNDE5LCA1MDQyMywgNTA0MjcsIDUwNDMxLCA1MDQzNSwgNTA0MzksIDUwNDQzLCAKLSAgICA1MDQ0NywgNTA0NTEsIDUwNDU1LCA1MDQ1OSwgNTA0NjYsIDUwNDc0LCA1MDQ4MCwgNTA0ODYsIDUwNDkzLCA1MDUwMCwgCi0gICAgNTA1MDYsIDUwNTEyLCA1MDUxOCwgNTA1MjQsIDUwNTI5LCA1MDUzNCwgNTA1MzksIDUwNTQ0LCA1MDU1MCwgNTA1NTYsIAotICAgIDUwNTY0LCA1MDU3MSwgNTA1NzcsIDUwNTgzLCA1MDU5MSwgNTA2MDAsIDUwNjA3LCA1MDYxNywgNTA2MjgsIDUwNjMxLCAKLSAgICA1MDYzNCwgNTA2MzgsIDUwNjQyLCA1MDY0OSwgNTA2NTYsIDUwNjY3LCA1MDY3OCwgNTA2ODgsIDUwNjk4LCA1MDcwNSwgCi0gICAgNTA3MTIsIDUwNzE5LCA1MDcyNiwgNTA3MzcsIDUwNzQ4LCA1MDc1OSwgNTA3NzAsIDUwNzgwLCA1MDc5MCwgNTA4MDIsIAotICAgIDUwODE0LCA1MDgyNSwgNTA4MzYsIDUwODQ4LCA1MDg2MCwgNTA4NjksIDUwODc5LCA1MDg4OSwgNTA5MDAsIDUwOTExLCAKLSAgICA1MDkxOCwgNTA5MjUsIDUwOTMyLCA1MDkzOSwgNTA5NDksIDUwOTU5LCA1MDk2NywgNTA5NzUsIDUwOTgyLCA1MDk4OSwgCi0gICAgNTA5OTYsIDUxMDAzLCA1MTAxMCwgNTEwMTUsIDUxMDIwLCA1MTAyNiwgNTEwMzQsIDUxMDQ0LCA1MTA1NCwgNTEwNjQsIAotICAgIDUxMDc0LCA1MTA4NCwgNTEwOTQsIDUxMTA0LCA1MTExNCwgNTExMjQsIDUxMTM0LCA1MTE0NCwgNTExNTUsIDUxMTY2LCAKLSAgICA1MTE3NiwgNTExODYsIDUxMTk3LCA1MTIwOCwgNTEyMTgsIDUxMjI4LCA1MTIzOSwgNTEyNTAsIDUxMjYwLCA1MTI3MCwgCi0gICAgNTEyODEsIDUxMjkyLCA1MTMwOCwgNTEzMjcsIDUxMzQzLCA1MTM2MiwgNTEzNzgsIDUxMzk0LCA1MTQxMCwgNTE0MjYsIAotICAgIDUxNDM3LCA1MTQ0OSwgNTE0NjAsIDUxNDcyLCA1MTQ5MSwgNTE1MTAsIDUxNTE4LCA1MTUyNCwgNTE1MzEsIDUxNTM4LCAKLSAgICA1MTU0NSwgNTE1NTIsIDUxNTU3LCA1MTU2MywgNTE1NjgsIDUxNTczLCA1MTU3OSwgNTE1ODQsIDUxNTg5LCA1MTU5NCwgCi0gICAgNTE1OTksIDUxNjA0LCA1MTYxMSwgNTE2MTYsIDUxNjIzLCA1MTYyOCwgNTE2MzMsIDUxNjM3LCA1MTY0MSwgNTE2NDgsIAotICAgIDUxNjU1LCA1MTY2MiwgNTE2NjksIDUxNjc2LCA1MTY4MywgNTE2OTYsIDUxNzA5LCA1MTcyMiwgNTE3MzUsIDUxNzQzLCAKLSAgICA1MTc1MSwgNTE3NTcsIDUxNzYzLCA1MTc3MCwgNTE3NzcsIDUxNzg0LCA1MTc5MSwgNTE3OTUsIDUxODAwLCA1MTgwOCwgCi0gICAgNTE4MTYsIDUxODI0LCA1MTgzMSwgNTE4MzUsIDUxODQzLCA1MTg1MSwgNTE4NTUsIDUxODU5LCA1MTg2NCwgNTE4NzEsIAotICAgIDUxODc5LCA1MTg4NywgNTE5MDYsIDUxOTI1LCA1MTk0NCwgNTE5NjMsIDUxOTgyLCA1MjAwMSwgNTIwMjAsIDUyMDM5LCAKLSAgICA1MjA0NSwgNTIwNTIsIDUyMDYxLCA1MjA2OSwgNTIwNzcsIDUyMDgyLCA1MjA4NSwgNTIwODgsIDUyMDkzLCA1MjA5NiwgCi0gICAgNTIxMTUsIDUyMTIyLCA1MjEyOCwgNTIxMzQsIDUyMTM4LCA1MjE0MSwgNTIxNDQsIDUyMTQ3LCA1MjE1OSwgNTIxNzIsIAotICAgIDUyMTc5LCA1MjE4NiwgNTIxODksIDUyMTkzLCA1MjE5NiwgNTIyMDEsIDUyMjA2LCA1MjIxMSwgNTIyMTcsIDUyMjI2LCAKLSAgICA1MjIzMywgNTIyNDAsIDUyMjQ4LCA1MjI1NSwgNTIyNjIsIDUyMjY1LCA1MjI3MSwgNTIyNzcsIDUyMjgwLCA1MjI4MywgCi0gICAgNTIyODgsIDUyMjkzLCA1MjI5OSwgNTIzMDUsIDUyMzA5LCA1MjMxNCwgNTIzMjEsIDUyMzI1LCA1MjMzMSwgNTIzMzUsIAotICAgIDUyMzM5LCA1MjM0NywgNTIzNTksIDUyMzY4LCA1MjM3MiwgNTIzNzQsIDUyMzgzLCA1MjM5MiwgNTIzOTgsIDUyNDAxLCAKLSAgICA1MjQwNywgNTI0MTMsIDUyNDE4LCA1MjQyMywgNTI0MjgsIDUyNDMzLCA1MjQzOCwgNTI0NDMsIDUyNDQ1LCA1MjQ1MSwgCi0gICAgNTI0NTYsIDUyNDYzLCA1MjQ2NywgNTI0NzMsIDUyNDc2LCA1MjQ4MCwgNTI0ODcsIDUyNDk0LCA1MjQ5NiwgNTI0OTgsIAotICAgIDUyNTA0LCA1MjUxMCwgNTI1MTYsIDUyNTI1LCA1MjUzNCwgNTI1NDEsIDUyNTQ4LCA1MjU1NCwgNTI1NjAsIDUyNTY1LCAKLSAgICA1MjU3MCwgNTI1NzUsIDUyNTgxLCA1MjU4NywgNTI1OTIsIDUyNTk5LCA1MjYwMywgNTI2MDcsIDUyNjIwLCA1MjYzMywgCi0gICAgNTI2NDUsIDUyNjU0LCA1MjY2MCwgNTI2NjcsIDUyNjcyLCA1MjY3NywgNTI2ODIsIDUyNjg3LCA1MjY5MiwgNTI2OTQsIAotICAgIDUyNzAxLCA1MjcwOCwgNTI3MTUsIDUyNzIyLCA1MjcyOSwgNTI3MzcsIDUyNzQzLCA1Mjc0OCwgNTI3NTQsIDUyNzYwLCAKLSAgICA1Mjc2NiwgNTI3NzMsIDUyNzc5LCA1Mjc4NywgNTI3OTUsIDUyODAzLCA1MjgxMSwgNTI4MTgsIDUyODI0LCA1MjgzMCwgCi0gICAgNTI4MzksIDUyODQzLCA1Mjg1MiwgNTI4NjEsIDUyODcwLCA1Mjg3OCwgNTI4ODIsIDUyODg4LCA1Mjg5NSwgNTI5MDIsIAotICAgIDUyOTA2LCA1MjkxMiwgNTI5MTksIDUyOTI0LCA1MjkyOSwgNTI5MzUsIDUyOTQwLCA1Mjk0NSwgNTI5NTIsIDUyOTU5LCAKLSAgICA1Mjk2NCwgNTI5NjksIDUyOTc3LCA1Mjk4NSwgNTI5OTUsIDUzMDA1LCA1MzAxMiwgNTMwMTksIDUzMDIzLCA1MzAyNywgCi0gICAgNTMwMzksIDUzMDQ1LCA1MzA1MSwgNTMwNTYsIDUzMDYxLCA1MzA2OCwgNTMwNzUsIDUzMDgxLCA1MzA4NywgNTMwOTYsIAotICAgIDUzMTA0LCA1MzExMiwgNTMxMTksIDUzMTI2LCA1MzEzMywgNTMxMzksIDUzMTQ2LCA1MzE1MiwgNTMxNTksIDUzMTY2LCAKLSAgICA1MzE3MywgNTMxODAsIDUzMTg2LCA1MzE5MSwgNTMyMDAsIDUzMjEwLCA1MzIxNywgNTMyMjYsIDUzMjMyLCA1MzIzNywgCi0gICAgNTMyNDIsIDUzMjUyLCA1MzI1OCwgNTMyNjQsIDUzMjcwLCA1MzI3OCwgNTMyODMsIDUzMjkwLCA1MzI5NywgNTMzMDgsIAotICAgIDUzMzE1LCA1MzMyMiwgNTMzMjksIDUzMzM2LCA1MzM0MywgNTMzNTAsIDUzMzU3LCA1MzM2OSwgNTMzODEsIDUzMzkyLCAKLSAgICA1MzQwMywgNTM0MTYsIDUzNDI5LCA1MzQzNCwgNTM0MzksIDUzNDQ4LCA1MzQ1NywgNTM0NjQsIDUzNDcxLCA1MzQ4MCwgCi0gICAgNTM0ODksIDUzNDk3LCA1MzUwNSwgNTM1MTMsIDUzNTIxLCA1MzUzMSwgNTM1NDEsIDUzNTU1LCA1MzU2OSwgNTM1NzcsIAotICAgIDUzNTg1LCA1MzU5NywgNTM2MDksIDUzNjE3LCA1MzYyNSwgNTM2MzUsIDUzNjQ1LCA1MzY1MCwgNTM2NTUsIDUzNjY0LCAKLSAgICA1MzY3MywgNTM2NzgsIDUzNjgzLCA1MzY5MSwgNTM2OTcsIDUzNzAzLCA1MzcxMSwgNTM3MTksIDUzNzMyLCA1Mzc0NSwgCi0gICAgNTM3NDksIDUzNzUzLCA1Mzc2MCwgNTM3NjcsIDUzNzc0LCA1Mzc4MiwgNTM3OTAsIDUzNzk5LCA1MzgwOCwgNTM4MTQsIAotICAgIDUzODIwLCA1MzgyNywgNTM4MzQsIDUzODQxLCA1Mzg0OCwgNTM4NTcsIDUzODY2LCA1Mzg2OSwgNTM4NzIsIDUzODc3LCAKLSAgICA1Mzg4MiwgNTM4ODgsIDUzODk0LCA1MzkwMSwgNTM5MDgsIDUzOTE4LCA1MzkyOCwgNTM5MzUsIDUzOTQyLCA1Mzk1MCwgCi0gICAgNTM5NTgsIDUzOTY2LCA1Mzk3NCwgNTM5ODIsIDUzOTkwLCA1Mzk5NiwgNTQwMDIsIDU0MDA2LCA1NDAxMCwgNTQwMTcsIAotICAgIDU0MDI0LCA1NDAyOSwgNTQwMzQsIDU0MDM5LCA1NDA0NCwgNTQwNTAsIDU0MDY0LCA1NDA3MSwgNTQwNzgsIDU0MDgyLCAKLSAgICA1NDA4NCwgNTQwODYsIDU0MDkxLCA1NDA5NiwgNTQxMDEsIDU0MTA2LCA1NDExNCwgNTQxMjEsIDU0MTI4LCA1NDEzNiwgCi0gICAgNTQxNDgsIDU0MTU2LCA1NDE2NCwgNTQxNzUsIDU0MTc5LCA1NDE4MywgNTQxODksIDU0MTk3LCA1NDIxMCwgNTQyMTcsIAotICAgIDU0MjI0LCA1NDIzMSwgNTQyMzYsIDU0MjQzLCA1NDI1MiwgNTQyNjAsIDU0MjY2LCA1NDI3MiwgNTQyNzgsIDU0Mjg3LCAKLSAgICA1NDI5NiwgNTQzMDQsIDU0MzEzLCA1NDMxOCwgNTQzMjEsIDU0MzI2LCA1NDMzMiwgNTQzMzgsIDU0MzQ0LCA1NDM1MCwgCi0gICAgNTQzNTQsIDU0MzU3LCA1NDM2MSwgNTQzNjUsIDU0MzcxLCA1NDM3NywgNTQzODMsIDU0Mzg5LCA1NDM5MywgNTQzOTcsIAotICAgIDU0NDA0LCA1NDQxMSwgNTQ0MTgsIDU0NDI1LCA1NDQzMiwgNTQ0MzksIDU0NDQ5LCA1NDQ1OSwgNTQ0NjYsIDU0NDczLCAKLSAgICA1NDQ4MSwgNTQ0ODksIDU0NDkzLCA1NDQ5OCwgNTQ1MDMsIDU0NTA5LCA1NDUxNSwgNTQ1MTgsIDU0NTIxLCA1NDUyNCwgCi0gICAgNTQ1MjcsIDU0NTMxLCA1NDUzNiwgNTQ1NDEsIDU0NTQ2LCA1NDU1MSwgNTQ1NTYsIDU0NTYwLCA1NDU2NCwgNTQ1NjgsIAotICAgIDU0NTcyLCA1NDU3NiwgNTQ1ODAsIDU0NTg0LCA1NDU5MCwgNTQ1OTQsIDU0NjAwLCA1NDYwNSwgNTQ2MTIsIDU0NjIwLCAKLSAgICA1NDYyNywgNTQ2MzUsIDU0NjQyLCA1NDY1MCwgNTQ2NTksIDU0NjY2LCA1NDY3NiwgNTQ2ODcsIDU0NjkzLCA1NDcwMiwgCi0gICAgNTQ3MDgsIDU0NzE3LCA1NDcyNiwgNTQ3MzIsIDU0NzM4LCA1NDc0MiwgNTQ3NDYsIDU0NzU1LCA1NDc2NCwgNTQ3NzEsIAotICAgIDU0Nzc4LCA1NDc4NywgMCwgMCwgMCwgNTQ3OTYsIDU0ODAxLCA1NDgwNSwgNTQ4MDksIDU0ODE0LCA1NDgxOSwgNTQ4MjQsIAotICAgIDU0ODMyLCA1NDg0MCwgNTQ4NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjI2LCAzMjIzMywgMzIyNDAsIDMyMjQ3LCAzMjI1NCwgCisgICAgMzIyNjMsIDMyMjcyLCAzMjI4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyOTAsIDMyMjk1LCAzMjMwMCwgMzIzMDUsIAorICAgIDMyMzEwLCAzMjMxOSwgMzIzMzAsIDMyMzM5LCAzMjM1MCwgMzIzNTYsIDMyMzY5LCAzMjM3NSwgMzIzODIsIDMyMzg5LCAKKyAgICAzMjM5NCwgMzI0MDAsIDMyNDA2LCAzMjQxNywgMzI0MjYsIDMyNDMzLCAzMjQ0MCwgMzI0NDksIDMyNDU2LCAzMjQ2NSwgCisgICAgMzI0NzUsIDMyNDg1LCAzMjQ5MiwgMzI0OTksIDMyNTA2LCAzMjUxNiwgMzI1MjEsIDMyNTI5LCAzMjUzNSwgMzI1NDMsIAorICAgIDMyNTUyLCAzMjU1NywgMzI1NjQsIDMyNTcwLCAzMjU3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI1ODAsIAorICAgIDMyNTg1LCAzMjU5MSwgMzI1OTgsIDMyNjA2LCAzMjYxMiwgMzI2MTgsIDMyNjI0LCAzMjYyOSwgMzI2MzYsIDMyNjQyLCAKKyAgICAzMjY0OCwgMzI2NTQsIDMyNjYyLCAzMjY2NywgMzI2NzUsIDMyNjgwLCAzMjY4NiwgMzI2OTIsIDMyNjk5LCAzMjcwNywgCisgICAgMzI3MTQsIDMyNzIwLCAzMjcyNywgMzI3MzQsIDMyNzQwLCAzMjc0NywgMzI3NTQsIDMyNzYwLCAzMjc2NSwgMzI3NzEsIAorICAgIDMyNzc5LCAzMjc4NywgMzI3OTMsIDMyNzk5LCAzMjgwNSwgMzI4MTEsIDMyODE5LCAzMjgyMywgMzI4MjksIDMyODM1LCAKKyAgICAzMjg0MSwgMzI4NDcsIDMyODUzLCAzMjg1OSwgMzI4NjMsIDMyODY4LCAzMjg3MywgMzI4ODAsIDMyODg1LCAzMjg4OSwgCisgICAgMzI4OTUsIDMyOTAwLCAzMjkwNSwgMzI5MDksIDMyOTE0LCAzMjkxOSwgMzI5MjMsIDMyOTI3LCAzMjkzMiwgMzI5MzksIAorICAgIDMyOTQzLCAzMjk0OCwgMzI5NTMsIDMyOTU3LCAzMjk2MiwgMzI5NjYsIDMyOTcxLCAzMjk3NSwgMzI5ODEsIDMyOTg2LCAKKyAgICAzMjk5MywgMzI5OTgsIDMzMDAzLCAzMzAwNywgMzMwMTIsIDMzMDE3LCAzMzAyNCwgMzMwMjksIDMzMDM1LCAzMzA0MCwgCisgICAgMzMwNDQsIDMzMDQ5LCAzMzA1MywgMzMwNTgsIDMzMDY1LCAzMzA3MiwgMzMwNzcsIDMzMDgyLCAzMzA4NiwgMzMwOTIsIAorICAgIDMzMDk4LCAzMzEwMywgMzMxMDgsIDMzMTEzLCAzMzExOSwgMzMxMjQsIDMzMTMwLCAzMzEzNSwgMzMxNDEsIDMzMTQ3LCAKKyAgICAzMzE1MywgMzMxNjAsIDMzMTY3LCAzMzE3NCwgMzMxODEsIDMzMTg4LCAzMzE5NSwgMzMyMDAsIDMzMjA4LCAzMzIxNywgCisgICAgMzMyMjYsIDMzMjM1LCAzMzI0NCwgMzMyNTMsIDMzMjYyLCAzMzI3NCwgMzMyODMsIDMzMjkyLCAzMzMwMSwgMzMzMDgsIAorICAgIDMzMzEzLCAzMzMyMCwgMzMzMjgsIDMzMzM2LCAzMzM0MywgMzMzNTAsIDMzMzU3LCAzMzM2NCwgMzMzNzIsIDMzMzgxLCAKKyAgICAzMzM5MCwgMzMzOTksIDMzNDA4LCAzMzQxNywgMzM0MjYsIDMzNDM1LCAzMzQ0NCwgMzM0NTMsIDMzNDYyLCAzMzQ3MSwgCisgICAgMzM0ODAsIDMzNDg5LCAzMzQ5OCwgMzM1MDYsIDMzNTE1LCAzMzUyNiwgMzM1MzQsIDMzNTQzLCAzMzU1NCwgMzM1NjMsIAorICAgIDMzNTcyLCAzMzU4MSwgMzM1OTAsIDMzNTk4LCAzMzYwNywgMzM2MTQsIDMzNjE5LCAzMzYyNywgMzM2MzIsIDMzNjM5LCAKKyAgICAzMzY0NCwgMzM2NTMsIDMzNjU5LCAzMzY2NiwgMzM2NzMsIDMzNjc4LCAzMzY4MywgMzM2OTEsIDMzNjk5LCAzMzcwOCwgCisgICAgMzM3MTcsIDMzNzIyLCAzMzcyOSwgMzM3NDAsIDMzNzQ4LCAzMzc1NywgMzM3NjMsIDMzNzY5LCAzMzc3NCwgMzM3ODEsIAorICAgIDMzNzg2LCAzMzc5NSwgMzM4MDAsIDMzODA1LCAzMzgxMCwgMzM4MTcsIDMzODI0LCAzMzgyOSwgMzM4MzgsIDMzODQ2LCAKKyAgICAzMzg1MSwgMzM4NTYsIDMzODYzLCAzMzg3MCwgMzM4NzQsIDMzODc4LCAzMzg4MSwgMzM4ODQsIDMzODg3LCAzMzg5MCwgCisgICAgMzM4OTMsIDMzODk2LCAzMzkwMywgMzM5MDYsIDMzOTA5LCAzMzkxNCwgMzM5MTgsIDMzOTIyLCAzMzkyNiwgMzM5MzAsIAorICAgIDMzOTM0LCAzMzk0MywgMzM5NDksIDMzOTU1LCAzMzk2MSwgMzM5NjksIDMzOTc3LCAzMzk4MywgMzM5ODksIDMzOTk2LCAKKyAgICAzNDAwMiwgMzQwMDcsIDM0MDEzLCAzNDAxOSwgMzQwMjUsIDM0MDMyLCAzNDAzOCwgMzQwNDYsIDM0MDUyLCAzNDA1OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQwNjUsIDM0MDcyLCAKKyAgICAzNDA3OSwgMzQwODQsIDM0MDkzLCAzNDEwMSwgMzQxMDksIDM0MTE2LCAzNDEyMywgMzQxMzAsIDM0MTM3LCAzNDE0NSwgCisgICAgMzQxNTMsIDM0MTYzLCAzNDE3MywgMzQxODEsIDM0MTg5LCAzNDE5NywgMzQyMDUsIDM0MjE0LCAzNDIyMywgMzQyMzEsIAorICAgIDM0MjM5LCAzNDI0OCwgMzQyNTcsIDM0MjY3LCAzNDI3NywgMzQyODYsIDM0Mjk1LCAzNDMwMywgMzQzMTEsIDM0MzE5LCAKKyAgICAzNDMyNywgMzQzMzcsIDM0MzQ3LCAzNDM1NSwgMzQzNjMsIDM0MzcxLCAzNDM3OSwgMzQzODcsIDM0Mzk1LCAzNDQwMywgCisgICAgMzQ0MTEsIDM0NDE5LCAzNDQyNywgMzQ0MzUsIDM0NDQzLCAzNDQ1MiwgMzQ0NjEsIDM0NDcwLCAzNDQ3OSwgMzQ0ODksIAorICAgIDM0NDk5LCAzNDUwNiwgMzQ1MTMsIDM0NTIxLCAzNDUyOSwgMzQ1MzgsIDM0NTQ3LCAzNDU1NSwgMzQ1NjMsIDM0NTc1LCAKKyAgICAzNDU4NywgMzQ1OTYsIDM0NjA1LCAzNDYxNCwgMzQ2MjMsIDM0NjMwLCAzNDYzNywgMzQ2NDUsIDM0NjUzLCAzNDY2MSwgCisgICAgMzQ2NjksIDM0Njc3LCAzNDY4NSwgMzQ2OTMsIDM0NzAxLCAzNDcxMCwgMzQ3MTksIDM0NzI4LCAzNDczNywgMzQ3NDYsIAorICAgIDM0NzU1LCAzNDc2NSwgMzQ3NzUsIDM0Nzg1LCAzNDc5NSwgMzQ4MDQsIDM0ODEzLCAzNDgyMCwgMzQ4MjcsIDM0ODM1LCAKKyAgICAzNDg0MywgMzQ4NTEsIDM0ODU5LCAzNDg2NywgMzQ4NzUsIDM0ODg3LCAzNDg5OSwgMzQ5MDgsIDM0OTE3LCAzNDkyNSwgCisgICAgMzQ5MzMsIDM0OTQxLCAzNDk0OSwgMzQ5NjAsIDM0OTcxLCAzNDk4MiwgMzQ5OTMsIDM1MDA1LCAzNTAxNywgMzUwMjUsIAorICAgIDM1MDMzLCAzNTA0MSwgMzUwNDksIDM1MDU4LCAzNTA2NywgMzUwNzYsIDM1MDg1LCAzNTA5MywgMzUxMDEsIDM1MTA5LCAKKyAgICAzNTExNywgMzUxMjUsIDM1MTMzLCAzNTE0MiwgMzUxNTEsIDM1MTYxLCAzNTE3MSwgMzUxNzgsIDM1MTg1LCAzNTE5MywgCisgICAgMzUyMDEsIDM1MjA5LCAzNTIxNywgMzUyMjQsIDM1MjMxLCAzNTIzOSwgMzUyNDcsIDM1MjU1LCAzNTI2MywgMzUyNzEsIAorICAgIDM1Mjc5LCAzNTI4NywgMzUyOTUsIDM1MzAzLCAzNTMxMSwgMzUzMTksIDM1MzI3LCAzNTMzNSwgMzUzNDMsIDM1MzUxLCAKKyAgICAzNTM1OSwgMzUzNjgsIDM1Mzc3LCAzNTM4NiwgMzUzOTQsIDM1NDAzLCAzNTQxMiwgMzU0MjEsIDM1NDMwLCAzNTQ0MCwgCisgICAgMzU0NDksIDM1NDU2LCAzNTQ2MSwgMzU0NjgsIDM1NDc1LCAzNTQ4MywgMzU0OTEsIDM1NTAwLCAzNTUwOSwgMzU1MTksIAorICAgIDM1NTI5LCAzNTU0MCwgMzU1NTEsIDM1NTYwLCAzNTU2OSwgMzU1NzksIDM1NTg5LCAzNTU5OCwgMzU2MDcsIDM1NjE3LCAKKyAgICAzNTYyNywgMzU2MzgsIDM1NjQ5LCAzNTY1OCwgMzU2NjcsIDM1Njc3LCAzNTY4NywgMzU2OTQsIDM1NzAxLCAzNTcwOSwgCisgICAgMzU3MTcsIDM1NzIzLCAzNTcyOSwgMzU3MzgsIDM1NzQ3LCAzNTc1NywgMzU3NjcsIDM1Nzc4LCAzNTc4OSwgMzU3OTgsIAorICAgIDM1ODA3LCAzNTgxNywgMzU4MjcsIDM1ODM2LCAzNTg0NSwgMzU4NTMsIDM1ODYxLCAzNTg2OCwgMzU4NzUsIDM1ODgzLCAKKyAgICAzNTg5MSwgMzU5MDAsIDM1OTA5LCAzNTkxOSwgMzU5MjksIDM1OTQwLCAzNTk1MSwgMzU5NjAsIDM1OTY5LCAzNTk3OSwgCisgICAgMzU5ODksIDM1OTk4LCAzNjAwNywgMzYwMTcsIDM2MDI3LCAzNjAzOCwgMzYwNDksIDM2MDU4LCAzNjA2NywgMzYwNzcsIAorICAgIDM2MDg3LCAzNjA5NCwgMzYxMDEsIDM2MTA5LCAzNjExNywgMzYxMjYsIDM2MTM1LCAzNjE0NSwgMzYxNTUsIDM2MTY2LCAKKyAgICAzNjE3NywgMzYxODYsIDM2MTk1LCAzNjIwNSwgMzYyMTUsIDM2MjIzLCAzNjIzMSwgMzYyMzksIDM2MjQ3LCAzNjI1NiwgCisgICAgMzYyNjUsIDM2MjcyLCAzNjI3OSwgMzYyODYsIDM2MjkzLCAzNjMwMCwgMzYzMDcsIDM2MzE1LCAzNjMyMywgMzYzMzEsIAorICAgIDM2MzM5LCAzNjM1MCwgMzYzNjEsIDM2MzcyLCAzNjM4MywgMzYzOTQsIDM2NDA1LCAzNjQxMywgMzY0MjEsIDM2NDMyLCAKKyAgICAzNjQ0MywgMzY0NTQsIDM2NDY1LCAzNjQ3NiwgMzY0ODcsIDM2NDk1LCAzNjUwMywgMzY1MTQsIDM2NTI1LCAzNjUzNiwgMCwgCisgICAgMCwgMzY1NDcsIDM2NTU1LCAzNjU2MywgMzY1NzQsIDM2NTg1LCAzNjU5NiwgMCwgMCwgMzY2MDcsIDM2NjE1LCAzNjYyMywgCisgICAgMzY2MzQsIDM2NjQ1LCAzNjY1NiwgMzY2NjcsIDM2Njc4LCAzNjY4OSwgMzY2OTcsIDM2NzA1LCAzNjcxNiwgMzY3MjcsIAorICAgIDM2NzM4LCAzNjc0OSwgMzY3NjAsIDM2NzcxLCAzNjc3OSwgMzY3ODcsIDM2Nzk4LCAzNjgwOSwgMzY4MjAsIDM2ODMxLCAKKyAgICAzNjg0MiwgMzY4NTMsIDM2ODYxLCAzNjg2OSwgMzY4ODAsIDM2ODkxLCAzNjkwMiwgMzY5MTMsIDM2OTI0LCAzNjkzNSwgCisgICAgMzY5NDMsIDM2OTUxLCAzNjk2MiwgMzY5NzMsIDM2OTg0LCAwLCAwLCAzNjk5NSwgMzcwMDMsIDM3MDExLCAzNzAyMiwgCisgICAgMzcwMzMsIDM3MDQ0LCAwLCAwLCAzNzA1NSwgMzcwNjMsIDM3MDcxLCAzNzA4MiwgMzcwOTMsIDM3MTA0LCAzNzExNSwgCisgICAgMzcxMjYsIDAsIDM3MTM3LCAwLCAzNzE0NSwgMCwgMzcxNTYsIDAsIDM3MTY3LCAzNzE3OCwgMzcxODYsIDM3MTk0LCAKKyAgICAzNzIwNSwgMzcyMTYsIDM3MjI3LCAzNzIzOCwgMzcyNDksIDM3MjYwLCAzNzI2OCwgMzcyNzYsIDM3Mjg3LCAzNzI5OCwgCisgICAgMzczMDksIDM3MzIwLCAzNzMzMSwgMzczNDIsIDM3MzUwLCAzNzM1OCwgMzczNjYsIDM3Mzc0LCAzNzM4MiwgMzczOTAsIAorICAgIDM3Mzk4LCAzNzQwNiwgMzc0MTQsIDM3NDIyLCAzNzQzMCwgMzc0MzgsIDM3NDQ2LCAwLCAwLCAzNzQ1NCwgMzc0NjUsIAorICAgIDM3NDc2LCAzNzQ5MCwgMzc1MDQsIDM3NTE4LCAzNzUzMiwgMzc1NDYsIDM3NTYwLCAzNzU3MSwgMzc1ODIsIDM3NTk2LCAKKyAgICAzNzYxMCwgMzc2MjQsIDM3NjM4LCAzNzY1MiwgMzc2NjYsIDM3Njc3LCAzNzY4OCwgMzc3MDIsIDM3NzE2LCAzNzczMCwgCisgICAgMzc3NDQsIDM3NzU4LCAzNzc3MiwgMzc3ODMsIDM3Nzk0LCAzNzgwOCwgMzc4MjIsIDM3ODM2LCAzNzg1MCwgMzc4NjQsIAorICAgIDM3ODc4LCAzNzg4OSwgMzc5MDAsIDM3OTE0LCAzNzkyOCwgMzc5NDIsIDM3OTU2LCAzNzk3MCwgMzc5ODQsIDM3OTk1LCAKKyAgICAzODAwNiwgMzgwMjAsIDM4MDM0LCAzODA0OCwgMzgwNjIsIDM4MDc2LCAzODA5MCwgMzgwOTgsIDM4MTA2LCAzODExNywgCisgICAgMzgxMjUsIDAsIDM4MTM2LCAzODE0NCwgMzgxNTUsIDM4MTYzLCAzODE3MSwgMzgxNzksIDM4MTg3LCAzODE5NSwgMzgxOTgsIAorICAgIDM4MjAxLCAzODIwNCwgMzgyMDcsIDM4MjEzLCAzODIyNCwgMzgyMzIsIDAsIDM4MjQzLCAzODI1MSwgMzgyNjIsIDM4MjcwLCAKKyAgICAzODI3OCwgMzgyODYsIDM4Mjk0LCAzODMwMiwgMzgzMDgsIDM4MzE0LCAzODMyMCwgMzgzMjgsIDM4MzM2LCAzODM0NywgMCwgCisgICAgMCwgMzgzNTgsIDM4MzY2LCAzODM3NywgMzgzODUsIDM4MzkzLCAzODQwMSwgMCwgMzg0MDksIDM4NDE1LCAzODQyMSwgCisgICAgMzg0MjcsIDM4NDM1LCAzODQ0MywgMzg0NTQsIDM4NDY1LCAzODQ3MywgMzg0ODEsIDM4NDg5LCAzODUwMCwgMzg1MDgsIAorICAgIDM4NTE2LCAzODUyNCwgMzg1MzIsIDM4NTQwLCAzODU0NiwgMzg1NTIsIDAsIDAsIDM4NTU1LCAzODU2NiwgMzg1NzQsIDAsIAorICAgIDM4NTg1LCAzODU5MywgMzg2MDQsIDM4NjEyLCAzODYyMCwgMzg2MjgsIDM4NjM2LCAzODY0NCwgMzg2NDcsIDAsIDM4NjUwLCAKKyAgICAzODY1NCwgMzg2NTgsIDM4NjYyLCAzODY2NiwgMzg2NzAsIDM4Njc0LCAzODY3OCwgMzg2ODIsIDM4Njg2LCAzODY5MCwgCisgICAgMzg2OTQsIDM4NzAwLCAzODcwNiwgMzg3MTIsIDM4NzE1LCAzODcxOCwgMzg3MjAsIDM4NzI0LCAzODcyOCwgMzg3MzIsIAorICAgIDM4NzM2LCAzODczOCwgMzg3NDIsIDM4NzQ2LCAzODc1MiwgMzg3NTgsIDM4NzY1LCAzODc3MiwgMzg3NzcsIDM4NzgyLCAKKyAgICAzODc4OCwgMzg3OTQsIDM4Nzk2LCAzODc5OSwgMzg4MDEsIDM4ODA1LCAzODgwOSwgMzg4MTMsIDM4ODE2LCAzODgyMCwgCisgICAgMzg4MjQsIDM4ODI4LCAzODgzMiwgMzg4MzYsIDM4ODQyLCAzODg0NiwgMzg4NTAsIDM4ODU2LCAzODg2MSwgMzg4NjgsIAorICAgIDM4ODcwLCAzODg3MywgMzg4NzcsIDM4ODgxLCAzODg4NiwgMzg4OTIsIDM4ODk0LCAzODkwMywgMzg5MTIsIDM4OTE1LCAKKyAgICAzODkxOSwgMzg5MjEsIDM4OTIzLCAzODkyNSwgMzg5MjgsIDM4OTM0LCAzODkzNiwgMzg5NDAsIDM4OTQ0LCAzODk1MSwgCisgICAgMzg5NTgsIDM4OTYyLCAzODk2NywgMzg5NzIsIDM4OTc3LCAzODk4MiwgMzg5ODYsIDM4OTkwLCAzODk5MywgMzg5OTcsIAorICAgIDM5MDAxLCAzOTAwOCwgMzkwMTMsIDM5MDE3LCAzOTAyMSwgMzkwMjYsIDM5MDMwLCAzOTAzNCwgMzkwMzksIDM5MDQ0LCAKKyAgICAzOTA0OCwgMzkwNTIsIDM5MDU2LCAzOTA1OCwgMzkwNjMsIDM5MDY4LCAzOTA3MiwgMzkwNzYsIDM5MDgwLCAzOTA4NCwgMCwgCisgICAgMzkwODgsIDM5MDkyLCAzOTA5NiwgMzkxMDIsIDM5MTA4LCAzOTExNCwgMzkxMjAsIDM5MTI3LCAzOTEzNCwgMzkxMzksIAorICAgIDM5MTQ0LCAzOTE0OCwgMCwgMCwgMzkxNTQsIDM5MTU3LCAzOTE2MCwgMzkxNjMsIDM5MTY2LCAzOTE2OSwgMzkxNzIsIAorICAgIDM5MTc2LCAzOTE4MCwgMzkxODUsIDM5MTkwLCAzOTE5NSwgMzkyMDIsIDM5MjA2LCAzOTIwOSwgMzkyMTIsIDM5MjE1LCAKKyAgICAzOTIxOCwgMzkyMjEsIDM5MjI0LCAzOTIyNywgMzkyMzAsIDM5MjMzLCAzOTIzNywgMzkyNDEsIDM5MjQ2LCAzOTI1MSwgMCwgCisgICAgMzkyNTYsIDM5MjYyLCAzOTI2OCwgMzkyNzQsIDM5MjgxLCAzOTI4OCwgMzkyOTUsIDM5MzAyLCAzOTMwOCwgMzkzMTQsIAorICAgIDM5MzIxLCAzOTMyOCwgMzkzMzUsIDAsIDAsIDAsIDM5MzQyLCAzOTM0NSwgMzkzNDgsIDM5MzUxLCAzOTM1NiwgMzkzNTksIAorICAgIDM5MzYyLCAzOTM2NSwgMzkzNjgsIDM5MzcxLCAzOTM3NCwgMzkzNzgsIDM5MzgxLCAzOTM4NCwgMzkzODcsIDM5MzkwLCAKKyAgICAzOTM5MywgMzkzOTgsIDM5NDAxLCAzOTQwNCwgMzk0MDcsIDM5NDEwLCAzOTQxMywgMzk0MTgsIDM5NDIxLCAzOTQyNCwgCisgICAgMzk0MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM5NDM0LCAzOTQzOSwgMzk0NDQsIDM5NDUxLCAzOTQ1OSwgMzk0NjQsIDM5NDY5LCAzOTQ3MywgMzk0NzcsIDM5NDgyLCAKKyAgICAzOTQ4OSwgMzk0OTYsIDM5NTAwLCAzOTUwNSwgMzk1MTAsIDM5NTE1LCAzOTUyMCwgMzk1MjcsIDM5NTMyLCAzOTUzNywgCisgICAgMzk1NDIsIDM5NTUxLCAzOTU1OCwgMzk1NjUsIDM5NTY5LCAzOTU3NCwgMzk1ODAsIDM5NTg1LCAzOTU5MiwgMzk2MDEsIAorICAgIDM5NjEwLCAzOTYxNCwgMzk2MTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NjIyLCAKKyAgICAzOTYyNiwgMzk2MzQsIDM5NjM4LCAzOTY0MiwgMzk2NDcsIDM5NjUxLCAzOTY1NSwgMzk2NTksIDM5NjYxLCAzOTY2NSwgCisgICAgMzk2NjksIDM5NjczLCAzOTY3OCwgMzk2ODIsIDM5Njg2LCAzOTY5NCwgMzk2OTcsIDM5NzAxLCAzOTcwNCwgMzk3MDcsIAorICAgIDM5NzEzLCAzOTcxNywgMzk3MjAsIDM5NzI2LCAzOTczMCwgMzk3MzQsIDM5NzM4LCAzOTc0MSwgMzk3NDUsIDM5NzQ4LCAKKyAgICAzOTc1MiwgMzk3NTQsIDM5NzU3LCAzOTc2MCwgMzk3NjQsIDM5NzY2LCAzOTc3MCwgMzk3NzMsIDM5Nzc2LCAzOTc4MSwgCisgICAgMzk3ODYsIDM5NzkzLCAzOTc5NiwgMzk3OTksIDM5ODAzLCAzOTgwOCwgMzk4MTEsIDM5ODE0LCAzOTgxNywgMzk4MjEsIAorICAgIDM5ODI2LCAzOTgyOSwgMzk4MzIsIDM5ODM0LCAzOTgzNywgMzk4NDAsIDM5ODQzLCAzOTg0NywgMzk4NTIsIDM5ODU1LCAKKyAgICAzOTg1OSwgMzk4NjMsIDM5ODY3LCAzOTg3MSwgMzk4NzYsIDM5ODgyLCAzOTg4NywgMzk4OTIsIDM5ODk4LCAzOTkwMywgCisgICAgMzk5MDgsIDM5OTEyLCAzOTkxNiwgMzk5MjEsIDM5OTI1LCAzOTkyOSwgMzk5MzIsIDM5OTM0LCAzOTkzOSwgMzk5NDUsIAorICAgIDM5OTUyLCAzOTk1OSwgMzk5NjYsIDM5OTczLCAzOTk4MCwgMzk5ODcsIDM5OTk0LCA0MDAwMSwgNDAwMDksIDQwMDE2LCAKKyAgICA0MDAyNCwgNDAwMzEsIDQwMDM4LCA0MDA0NiwgNDAwNTQsIDQwMDU5LCA0MDA2NCwgNDAwNjksIDQwMDc0LCA0MDA3OSwgCisgICAgNDAwODQsIDQwMDg5LCA0MDA5NCwgNDAwOTksIDQwMTA0LCA0MDExMCwgNDAxMTYsIDQwMTIyLCA0MDEyOCwgNDAxMzUsIAorICAgIDQwMTQzLCA0MDE1MCwgNDAxNTYsIDQwMTYyLCA0MDE2OCwgNDAxNzQsIDQwMTgwLCA0MDE4NiwgNDAxOTIsIDQwMTk4LCAKKyAgICA0MDIwNCwgNDAyMTEsIDQwMjE4LCA0MDIyNSwgNDAyMzIsIDQwMjQwLCA0MDI0OSwgNDAyNTcsIDQwMjY4LCA0MDI3NiwgCisgICAgNDAyODQsIDQwMjkzLCA0MDMwMCwgNDAzMDksIDQwMzE4LCA0MDMyNiwgNDAzMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMzQzLCAKKyAgICA0MDM0NSwgNDAzNDgsIDQwMzUwLCA0MDM1MywgNDAzNTYsIDQwMzU5LCA0MDM2NCwgNDAzNjksIDQwMzc0LCA0MDM3OSwgCisgICAgNDAzODMsIDQwMzg3LCA0MDM5MSwgNDAzOTUsIDQwNDAwLCA0MDQwNiwgNDA0MTEsIDQwNDE3LCA0MDQyMiwgNDA0MjcsIAorICAgIDQwNDMyLCA0MDQzOCwgNDA0NDMsIDQwNDQ5LCA0MDQ1NSwgNDA0NTksIDQwNDYzLCA0MDQ2OCwgNDA0NzMsIDQwNDc4LCAKKyAgICA0MDQ4MywgNDA0ODgsIDQwNDk2LCA0MDUwNCwgNDA1MTIsIDQwNTIwLCA0MDUyNywgNDA1MzUsIDQwNTQyLCA0MDU0OSwgCisgICAgNDA1NTgsIDQwNTcwLCA0MDU3NiwgNDA1ODIsIDQwNTkwLCA0MDU5OCwgNDA2MDcsIDQwNjE2LCA0MDYyNCwgNDA2MzIsIAorICAgIDQwNjQxLCA0MDY1MCwgNDA2NTUsIDQwNjYzLCA0MDY2OCwgNDA2NzMsIDQwNjc5LCA0MDY4NCwgNDA2OTAsIDQwNjk3LCAKKyAgICA0MDcwNCwgNDA3MDksIDQwNzE1LCA0MDcyMCwgNDA3MjMsIDQwNzI3LCA0MDczMCwgNDA3MzQsIDQwNzM4LCA0MDc0MiwgCisgICAgNDA3NDgsIDQwNzU0LCA0MDc2MCwgNDA3NjYsIDQwNzcwLCA0MDc3NCwgNDA3NzgsIDQwNzgyLCA0MDc4OCwgNDA3OTQsIAorICAgIDQwNzk4LCA0MDgwMywgNDA4MDcsIDQwODEyLCA0MDgxNywgNDA4MjIsIDQwODI1LCA0MDgyOSwgNDA4MzIsIDQwODM2LCAKKyAgICA0MDg0MywgNDA4NTEsIDQwODYyLCA0MDg3MywgNDA4NzgsIDQwODg3LCA0MDg5NCwgNDA5MDMsIDQwOTEyLCA0MDkxNiwgCisgICAgNDA5MjIsIDQwOTMwLCA0MDkzNCwgNDA5MzksIDQwOTQ0LCA0MDk1MCwgNDA5NTYsIDQwOTYyLCA0MDk2OSwgNDA5NzMsIAorICAgIDQwOTc3LCA0MDk4MiwgNDA5ODUsIDQwOTg3LCA0MDk5MSwgNDA5OTUsIDQxMDAzLCA0MTAwNywgNDEwMDksIDQxMDExLCAKKyAgICA0MTAxNSwgNDEwMjMsIDQxMDI4LCA0MTAzNCwgNDEwNDQsIDQxMDUxLCA0MTA1NiwgNDEwNjAsIDQxMDY0LCA0MTA2OCwgCisgICAgNDEwNzEsIDQxMDc0LCA0MTA3NywgNDEwODEsIDQxMDg1LCA0MTA4OSwgNDEwOTMsIDQxMDk3LCA0MTEwMCwgNDExMDQsIAorICAgIDQxMTA4LCA0MTExMSwgNDExMTMsIDQxMTE2LCA0MTExOCwgNDExMjIsIDQxMTI2LCA0MTEyOCwgNDExMzQsIDQxMTM3LCAKKyAgICA0MTE0MiwgNDExNDYsIDQxMTUwLCA0MTE1MiwgNDExNTQsIDQxMTU2LCA0MTE1OSwgNDExNjMsIDQxMTY3LCA0MTE3MSwgCisgICAgNDExNzUsIDQxMTc5LCA0MTE4NSwgNDExOTEsIDQxMTkzLCA0MTE5NSwgNDExOTcsIDQxMTk5LCA0MTIwMiwgNDEyMDQsIAorICAgIDQxMjA4LCA0MTIxMCwgNDEyMTQsIDQxMjE3LCA0MTIyMywgNDEyMjcsIDQxMjMxLCA0MTIzNCwgNDEyMzcsIDQxMjQxLCAKKyAgICA0MTI0NywgNDEyNTEsIDQxMjYxLCA0MTI3MSwgNDEyNzUsIDQxMjgxLCA0MTI4NywgNDEyOTAsIDQxMjk0LCA0MTI5NywgCisgICAgNDEzMDIsIDQxMzA2LCA0MTMxMiwgNDEzMTYsIDQxMzI4LCA0MTMzNiwgNDEzNDAsIDQxMzQ0LCA0MTM1MCwgNDEzNTQsIAorICAgIDQxMzU3LCA0MTM1OSwgNDEzNjIsIDQxMzY2LCA0MTM3MCwgNDEzNzcsIDQxMzgxLCA0MTM4NSwgNDEzODksIDQxMzkyLCAKKyAgICA0MTM5NywgNDE0MDIsIDQxNDA3LCA0MTQxMiwgNDE0MTcsIDQxNDIyLCA0MTQzMCwgNDE0MzgsIDQxNDQyLCA0MTQ0NiwgCisgICAgNDE0NDgsIDQxNDUzLCA0MTQ1NywgNDE0NjEsIDQxNDY5LCA0MTQ3NywgNDE0ODMsIDQxNDg5LCA0MTQ5OCwgNDE1MDcsIAorICAgIDQxNTEyLCA0MTUxNywgNDE1MjUsIDQxNTMzLCA0MTUzNSwgNDE1MzcsIDQxNTQyLCA0MTU0NywgNDE1NTMsIDQxNTU5LCAKKyAgICA0MTU2NSwgNDE1NzEsIDQxNTc1LCA0MTU3OSwgNDE1ODYsIDQxNTkzLCA0MTU5OSwgNDE2MDUsIDQxNjE1LCA0MTYyNSwgCisgICAgNDE2MzMsIDQxNjQxLCA0MTY0MywgNDE2NDcsIDQxNjUxLCA0MTY1NiwgNDE2NjEsIDQxNjY4LCA0MTY3NSwgNDE2NzgsIAorICAgIDQxNjgxLCA0MTY4NCwgNDE2ODcsIDQxNjkwLCA0MTY5NSwgNDE2OTksIDQxNzA0LCA0MTcwOSwgNDE3MTIsIDQxNzE1LCAKKyAgICA0MTcxOCwgNDE3MjEsIDQxNzI0LCA0MTcyOCwgNDE3MzEsIDQxNzM0LCA0MTczNywgNDE3NDAsIDQxNzQyLCA0MTc0NCwgCisgICAgNDE3NDYsIDQxNzQ4LCA0MTc1NiwgNDE3NjQsIDQxNzcwLCA0MTc3NCwgNDE3ODAsIDQxNzkwLCA0MTc5NiwgNDE4MDIsIAorICAgIDQxODA4LCA0MTgxNiwgNDE4MjQsIDQxODM1LCA0MTgzOSwgNDE4NDMsIDQxODQ1LCA0MTg1MSwgNDE4NTMsIDQxODU1LCAKKyAgICA0MTg1NywgNDE4NTksIDQxODY1LCA0MTg2OCwgNDE4NzQsIDQxODgwLCA0MTg4NCwgNDE4ODgsIDQxODkyLCA0MTg5NSwgCisgICAgNDE4OTksIDQxOTAzLCA0MTkwNSwgNDE5MTQsIDQxOTIzLCA0MTkyOCwgNDE5MzMsIDQxOTM5LCA0MTk0NSwgNDE5NTEsIAorICAgIDQxOTU0LCA0MTk1NywgNDE5NjAsIDQxOTYzLCA0MTk2NSwgNDE5NzAsIDQxOTc1LCA0MTk4MCwgNDE5ODYsIDQxOTkyLCAKKyAgICA0MjAwMCwgNDIwMDgsIDQyMDE0LCA0MjAyMCwgNDIwMjYsIDQyMDMyLCA0MjA0MSwgNDIwNTAsIDQyMDU5LCA0MjA2OCwgCisgICAgNDIwNzcsIDQyMDg2LCA0MjA5NSwgNDIxMDQsIDQyMTEzLCA0MjEyMiwgNDIxMzAsIDQyMTQyLCA0MjE1MiwgNDIxNjcsIAorICAgIDQyMTcwLCA0MjE3NSwgNDIxODEsIDQyMTg3LCA0MjE5NCwgNDIyMDgsIDQyMjIzLCA0MjIyOSwgNDIyMzUsIDQyMjQyLCAKKyAgICA0MjI0OCwgNDIyNTYsIDQyMjYyLCA0MjI3NSwgNDIyODksIDQyMjk0LCA0MjMwMCwgNDIzMDcsIDQyMzEwLCA0MjMxMywgCisgICAgNDIzMTUsIDQyMzE4LCA0MjMyMSwgNDIzMjMsIDQyMzI1LCA0MjMyOSwgNDIzMzIsIDQyMzM1LCA0MjMzOCwgNDIzNDEsIAorICAgIDQyMzQ2LCA0MjM1MSwgNDIzNTYsIDQyMzYxLCA0MjM2NiwgNDIzNjksIDQyMzcxLCA0MjM3MywgNDIzNzUsIDQyMzc5LCAKKyAgICA0MjM4MywgNDIzODcsIDQyMzkzLCA0MjM5OCwgNDI0MDAsIDQyNDAyLCA0MjQwNywgNDI0MTIsIDQyNDE3LCA0MjQyMiwgCisgICAgNDI0MjcsIDQyNDMyLCA0MjQzNCwgNDI0MzYsIDQyNDQ1LCA0MjQ0OSwgNDI0NTcsIDQyNDY2LCA0MjQ2OCwgNDI0NzMsIAorICAgIDQyNDc4LCA0MjQ4NiwgNDI0OTAsIDQyNDkyLCA0MjQ5NiwgNDI0OTgsIDQyNTAyLCA0MjUwNiwgNDI1MTAsIDQyNTEyLCAKKyAgICA0MjUxNCwgNDI1MTYsIDQyNTIzLCA0MjUzMiwgNDI1NDEsIDQyNTUwLCA0MjU1OSwgNDI1NjgsIDQyNTc3LCA0MjU4NiwgCisgICAgNDI1OTUsIDQyNjAzLCA0MjYxMSwgNDI2MjAsIDQyNjI5LCA0MjYzOCwgNDI2NDcsIDQyNjU1LCA0MjY2MywgNDI2NzIsIAorICAgIDQyNjgxLCA0MjY5MCwgNDI3MDAsIDQyNzA5LCA0MjcxOSwgNDI3MjgsIDQyNzM4LCA0Mjc0NywgNDI3NTcsIDQyNzY3LCAKKyAgICA0Mjc3NiwgNDI3ODYsIDQyNzk1LCA0MjgwNSwgNDI4MTQsIDQyODI0LCA0MjgzMywgNDI4NDIsIDQyODUxLCA0Mjg2MCwgCisgICAgNDI4NjksIDQyODc5LCA0Mjg4OCwgNDI4OTcsIDQyOTA2LCA0MjkxNiwgNDI5MjUsIDQyOTM0LCA0Mjk0MywgNDI5NTIsIAorICAgIDQyOTYyLCA0Mjk3MiwgNDI5ODEsIDQyOTkwLCA0Mjk5OCwgNDMwMDYsIDQzMDEzLCA0MzAyMSwgNDMwMzAsIDQzMDQxLCAKKyAgICA0MzA1MCwgNDMwNTksIDQzMDY4LCA0MzA3NSwgNDMwODIsIDQzMDg5LCA0MzA5OCwgNDMxMDcsIDQzMTE2LCA0MzEyNSwgCisgICAgNDMxMzIsIDQzMTM3LCA0MzE0NiwgNDMxNTEsIDQzMTU0LCA0MzE2MiwgNDMxNjUsIDQzMTcwLCA0MzE3NSwgNDMxNzgsIAorICAgIDQzMTgxLCA0MzE4OSwgNDMxOTIsIDQzMTk3LCA0MzIwMCwgNDMyMDcsIDQzMjEyLCA0MzIyMCwgNDMyMjMsIDQzMjI2LCAKKyAgICA0MzIyOSwgNDMyMzQsIDQzMjM5LCA0MzI0MiwgNDMyNDUsIDQzMjUzLCA0MzI1NiwgNDMyNjMsIDQzMjcwLCA0MzI3NCwgCisgICAgNDMyNzgsIDQzMjgzLCA0MzI4OCwgNDMyOTQsIDQzMjk5LCA0MzMwNSwgNDMzMTEsIDQzMzE2LCA0MzMyMiwgNDMzMzAsIAorICAgIDQzMzM2LCA0MzM0NCwgNDMzNTIsIDQzMzU4LCA0MzM2NiwgNDMzNzQsIDQzMzgzLCA0MzM5MSwgNDMzOTcsIDQzNDA1LCAKKyAgICA0MzQxNCwgNDM0MjIsIDQzNDI2LCA0MzQzMSwgNDM0NDQsIDQzNDU3LCA0MzQ2MSwgNDM0NjUsIDQzNDY5LCA0MzQ3MywgCisgICAgNDM0ODMsIDQzNDg3LCA0MzQ5MiwgNDM0OTcsIDQzNTAyLCA0MzUwNywgNDM1MTIsIDQzNTE3LCA0MzUyNywgNDM1MzcsIAorICAgIDQzNTQ1LCA0MzU1NSwgNDM1NjUsIDQzNTczLCA0MzU4MywgNDM1OTMsIDQzNjAxLCA0MzYxMSwgNDM2MjEsIDQzNjI5LCAKKyAgICA0MzYzNywgNDM2NDcsIDQzNjU3LCA0MzY2MCwgNDM2NjMsIDQzNjY2LCA0MzY3MSwgNDM2NzUsIDQzNjgxLCA0MzY4OCwgCisgICAgNDM2OTUsIDQzNzAzLCA0MzcxMCwgNDM3MTQsIDQzNzE4LCA0MzcyMiwgNDM3MjYsIDQzNzI4LCA0MzczMiwgNDM3MzYsIAorICAgIDQzNzQxLCA0Mzc0NiwgNDM3NTMsIDQzNzYwLCA0Mzc2MywgNDM3NzAsIDQzNzcyLCA0Mzc3NCwgNDM3NzgsIDQzNzgyLCAKKyAgICA0Mzc4NywgNDM3OTMsIDQzNzk5LCA0MzgwNSwgNDM4MTEsIDQzODIwLCA0MzgyOSwgNDM4MzgsIDQzODQyLCA0Mzg0NCwgCisgICAgNDM4NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzODU1LCA0Mzg1OSwgNDM4NjYsIDQzODczLCAKKyAgICA0Mzg4MCwgNDM4ODcsIDQzODkxLCA0Mzg5NSwgNDM4OTksIDQzOTAzLCA0MzkwOCwgNDM5MTQsIDQzOTE5LCA0MzkyNSwgCisgICAgNDM5MzEsIDQzOTM3LCA0Mzk0MywgNDM5NTEsIDQzOTU4LCA0Mzk2NSwgNDM5NzIsIDQzOTc5LCA0Mzk4NCwgNDM5OTAsIAorICAgIDQzOTk5LCA0NDAwMywgNDQwMTAsIDQ0MDE0LCA0NDAxOCwgNDQwMjQsIDQ0MDMwLCA0NDAzNiwgNDQwNDIsIDQ0MDQ2LCAKKyAgICA0NDA1MCwgNDQwNTMsIDQ0MDU2LCA0NDA2MCwgNDQwNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MDc0LCA0NDA3NywgNDQwODEsIDQ0MDg1LCA0NDA5MSwgCisgICAgNDQwOTcsIDQ0MTAzLCA0NDExMSwgNDQxMTgsIDQ0MTIyLCA0NDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQxMzUsIDQ0MTM4LCA0NDE0MSwgNDQxNDQsIDQ0MTQ3LCAKKyAgICA0NDE1MCwgNDQxNTMsIDQ0MTU2LCA0NDE1OSwgNDQxNjIsIDQ0MTY2LCA0NDE3MCwgNDQxNzQsIDQ0MTc4LCA0NDE4MiwgCisgICAgNDQxODYsIDQ0MTkwLCA0NDE5NCwgNDQxOTgsIDQ0MjAyLCA0NDIwNiwgNDQyMDksIDQ0MjEyLCA0NDIxNSwgNDQyMTgsIAorICAgIDQ0MjIxLCA0NDIyNCwgNDQyMjcsIDQ0MjMwLCA0NDIzMywgNDQyMzcsIDQ0MjQxLCA0NDI0NSwgNDQyNDksIDQ0MjUzLCAKKyAgICA0NDI1NywgNDQyNjEsIDQ0MjY1LCA0NDI2OSwgNDQyNzMsIDQ0Mjc3LCA0NDI4MywgNDQyODksIDQ0Mjk1LCA0NDMwMiwgCisgICAgNDQzMDksIDQ0MzE2LCA0NDMyMywgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTEsIDQ0MzU4LCA0NDM2NSwgNDQzNzIsIAorICAgIDQ0Mzc5LCA0NDM4NiwgNDQzOTMsIDQ0NDAwLCA0NDQwNywgNDQ0MTQsIDQ0NDE5LCA0NDQyNSwgNDQ0MzEsIDQ0NDM3LCAKKyAgICA0NDQ0MiwgNDQ0NDgsIDQ0NDU0LCA0NDQ2MCwgNDQ0NjUsIDQ0NDcxLCA0NDQ3NywgNDQ0ODIsIDQ0NDg3LCA0NDQ5MywgCisgICAgNDQ0OTgsIDQ0NTA0LCA0NDUxMCwgNDQ1MTUsIDQ0NTIxLCA0NDUyNywgNDQ1MzIsIDQ0NTM4LCA0NDU0NCwgNDQ1NTAsIAorICAgIDQ0NTU2LCA0NDU2MiwgNDQ1NjcsIDQ0NTczLCA0NDU3OSwgNDQ1ODUsIDQ0NTkwLCA0NDU5NiwgNDQ2MDIsIDQ0NjA4LCAKKyAgICA0NDYxMywgNDQ2MTksIDQ0NjI1LCA0NDYzMCwgNDQ2MzUsIDQ0NjQxLCA0NDY0NiwgNDQ2NTIsIDQ0NjU4LCA0NDY2MywgCisgICAgNDQ2NjksIDQ0Njc1LCA0NDY4MCwgNDQ2ODYsIDQ0NjkyLCA0NDY5OCwgNDQ3MDQsIDQ0NzEwLCA0NDcxNSwgNDQ3MjEsIAorICAgIDQ0NzI3LCA0NDczMywgNDQ3MzgsIDQ0NzQ0LCA0NDc1MCwgNDQ3NTYsIDQ0NzYxLCA0NDc2NywgNDQ3NzMsIDQ0Nzc4LCAKKyAgICA0NDc4MywgNDQ3ODksIDQ0Nzk0LCA0NDgwMCwgNDQ4MDYsIDQ0ODExLCA0NDgxNywgNDQ4MjMsIDQ0ODI4LCA0NDgzNCwgCisgICAgNDQ4NDAsIDQ0ODQ2LCA0NDg1MiwgNDQ4NTgsIDQ0ODYyLCA0NDg2NywgNDQ4NzIsIDQ0ODc3LCA0NDg4MiwgNDQ4ODcsIAorICAgIDQ0ODkyLCA0NDg5NywgNDQ5MDIsIDQ0OTA3LCA0NDkxMiwgNDQ5MTYsIDQ0OTIwLCA0NDkyNCwgNDQ5MjgsIDQ0OTMyLCAKKyAgICA0NDkzNiwgNDQ5NDAsIDQ0OTQ0LCA0NDk0OCwgNDQ5NTMsIDQ0OTU4LCA0NDk2MywgNDQ5NjgsIDQ0OTczLCA0NDk3OCwgCisgICAgNDQ5ODcsIDQ0OTk2LCA0NTAwNSwgNDUwMTQsIDQ1MDIzLCA0NTAzMiwgNDUwNDEsIDQ1MDUwLCA0NTA1NywgNDUwNjUsIAorICAgIDQ1MDczLCA0NTA4MCwgNDUwODcsIDQ1MDk1LCA0NTEwMywgNDUxMTAsIDQ1MTE3LCA0NTEyNSwgNDUxMzMsIDQ1MTQwLCAKKyAgICA0NTE0NywgNDUxNTUsIDQ1MTYzLCA0NTE3MCwgNDUxNzcsIDQ1MTg1LCA0NTE5NCwgNDUyMDMsIDQ1MjExLCA0NTIyMCwgCisgICAgNDUyMjksIDQ1MjM2LCA0NTI0MywgNDUyNTEsIDQ1MjYwLCA0NTI2OSwgNDUyNzcsIDQ1Mjg2LCA0NTI5NSwgNDUzMDIsIAorICAgIDQ1MzA5LCA0NTMxOCwgNDUzMjcsIDQ1MzM1LCA0NTM0MywgNDUzNTIsIDQ1MzYxLCA0NTM2OCwgNDUzNzUsIDQ1Mzg0LCAKKyAgICA0NTM5MywgNDU0MDEsIDQ1NDA5LCA0NTQxOCwgNDU0MjcsIDQ1NDM0LCA0NTQ0MSwgNDU0NTAsIDQ1NDU5LCA0NTQ2NywgCisgICAgNDU0NzYsIDQ1NDg1LCA0NTQ5MywgNDU1MDMsIDQ1NTEzLCA0NTUyMywgNDU1MzMsIDQ1NTQyLCA0NTU1MSwgNDU1NjAsIAorICAgIDQ1NTY5LCA0NTU3NiwgNDU1ODQsIDQ1NTkyLCA0NTYwMCwgNDU2MDgsIDQ1NjEzLCA0NTYxOCwgNDU2MjcsIDQ1NjM1LCAKKyAgICA0NTY0MiwgNDU2NTEsIDQ1NjU5LCA0NTY2NiwgNDU2NzUsIDQ1NjgzLCA0NTY5MCwgNDU2OTksIDQ1NzA3LCA0NTcxNCwgCisgICAgNDU3MjMsIDQ1NzMxLCA0NTczOCwgNDU3NDcsIDQ1NzU1LCA0NTc2MiwgNDU3NzEsIDQ1Nzc5LCA0NTc4NiwgNDU3OTUsIAorICAgIDQ1ODAzLCA0NTgxMCwgNDU4MTksIDQ1ODI3LCA0NTgzNCwgNDU4NDMsIDQ1ODUyLCA0NTg2MSwgNDU4NzAsIDQ1ODg0LCAKKyAgICA0NTg5OCwgNDU5MDUsIDQ1OTEwLCA0NTkxNSwgNDU5MjAsIDQ1OTI1LCA0NTkzMCwgNDU5MzUsIDQ1OTQwLCA0NTk0NSwgCisgICAgNDU5NTMsIDQ1OTYxLCA0NTk2OSwgNDU5NzcsIDQ1OTgyLCA0NTk4OSwgNDU5OTYsIDQ2MDAzLCA0NjAwOCwgNDYwMTYsIAorICAgIDQ2MDIzLCA0NjAzMSwgNDYwMzUsIDQ2MDQyLCA0NjA0OCwgNDYwNTUsIDQ2MDU5LCA0NjA2NSwgNDYwNzEsIDQ2MDc3LCAKKyAgICA0NjA4MSwgNDYwODQsIDQ2MDg4LCA0NjA5MiwgNDYwOTksIDQ2MTA1LCA0NjExMSwgNDYxMTcsIDQ2MTIzLCA0NjEzNywgCisgICAgNDYxNDcsIDQ2MTYxLCA0NjE3NSwgNDYxODEsIDQ2MTkxLCA0NjIwNSwgNDYyMDgsIDQ2MjExLCA0NjIxOCwgNDYyMjYsIAorICAgIDQ2MjMxLCA0NjIzNiwgNDYyNDQsIDQ2MjU2LCA0NjI2OCwgNDYyNzYsIDQ2MjgwLCA0NjI4NCwgNDYyODcsIDQ2MjkwLCAKKyAgICA0NjI5NCwgNDYyOTgsIDQ2MzAxLCA0NjMwNCwgNDYzMDksIDQ2MzE0LCA0NjMyMCwgNDYzMjYsIDQ2MzMxLCA0NjMzNiwgCisgICAgNDYzNDIsIDQ2MzQ4LCA0NjM1MywgNDYzNTgsIDQ2MzYzLCA0NjM2OCwgNDYzNzQsIDQ2MzgwLCA0NjM4NSwgNDYzOTAsIAorICAgIDQ2Mzk2LCA0NjQwMiwgNDY0MDcsIDQ2NDEyLCA0NjQxNSwgNDY0MTgsIDQ2NDI3LCA0NjQyOSwgNDY0MzEsIDQ2NDM0LCAKKyAgICA0NjQzOCwgNDY0NDQsIDQ2NDQ2LCA0NjQ0OSwgNDY0NTYsIDQ2NDYzLCA0NjQ3MSwgNDY0NzksIDQ2NDg5LCA0NjUwMywgCisgICAgNDY1MDgsIDQ2NTEzLCA0NjUxNywgNDY1MjIsIDQ2NTMwLCA0NjUzOCwgNDY1NDcsIDQ2NTU2LCA0NjU2NSwgNDY1NzQsIAorICAgIDQ2NTc5LCA0NjU4NCwgNDY1OTAsIDQ2NTk2LCA0NjYwMiwgNDY2MDgsIDQ2NjExLCA0NjYxNywgNDY2MjMsIDQ2NjMzLCAKKyAgICA0NjY0MywgNDY2NTEsIDQ2NjU5LCA0NjY2OCwgNDY2NzcsIDQ2NjgxLCA0NjY4OSwgNDY2OTcsIDQ2NzA1LCA0NjcxMywgCisgICAgNDY3MjIsIDQ2NzMxLCA0Njc0MCwgNDY3NDksIDQ2NzU0LCA0Njc1OSwgNDY3NjQsIDQ2NzY5LCA0Njc3NCwgNDY3ODAsIAorICAgIDQ2Nzg2LCA0Njc5MSwgNDY3OTcsIDQ2Nzk5LCA0NjgwMSwgNDY4MDMsIDQ2ODA1LCA0NjgwOCwgNDY4MTEsIDQ2ODEzLCAKKyAgICA0NjgxNSwgNDY4MTcsIDQ2ODIxLCA0NjgyNSwgNDY4MjcsIDQ2ODI5LCA0NjgzMiwgNDY4MzUsIDQ2ODM5LCA0Njg0NSwgCisgICAgNDY4NTEsIDQ2ODUzLCA0Njg2MCwgNDY4NjQsIDQ2ODY5LCA0Njg3NCwgNDY4NzYsIDQ2ODg2LCA0Njg5MiwgNDY4OTgsIAorICAgIDQ2OTA0LCA0NjkxMCwgNDY5MTYsIDQ2OTIyLCA0NjkyNywgNDY5MzAsIDQ2OTMzLCA0NjkzNiwgNDY5MzgsIDQ2OTQwLCAKKyAgICA0Njk0NCwgNDY5NDgsIDQ2OTUzLCA0Njk1OCwgNDY5NjMsIDQ2OTY2LCA0Njk3MCwgNDY5NzUsIDQ2OTc4LCA0Njk4MiwgCisgICAgNDY5ODcsIDQ2OTkyLCA0Njk5NywgNDcwMDIsIDQ3MDA3LCA0NzAxMiwgNDcwMTcsIDQ3MDIyLCA0NzAyNywgNDcwMzIsIAorICAgIDQ3MDM3LCA0NzA0MiwgNDcwNDgsIDQ3MDU0LCA0NzA2MCwgNDcwNjIsIDQ3MDY1LCA0NzA2NywgNDcwNzAsIDQ3MDcyLCAKKyAgICA0NzA3NCwgNDcwNzYsIDQ3MDc4LCA0NzA4MCwgNDcwODIsIDQ3MDg0LCA0NzA4NiwgNDcwODgsIDQ3MDkwLCA0NzA5MiwgCisgICAgNDcwOTQsIDQ3MDk2LCA0NzA5OCwgNDcxMDAsIDQ3MTAyLCA0NzEwNCwgNDcxMDksIDQ3MTE0LCA0NzExOSwgNDcxMjQsIAorICAgIDQ3MTI5LCA0NzEzNCwgNDcxMzksIDQ3MTQ0LCA0NzE0OSwgNDcxNTQsIDQ3MTU5LCA0NzE2NCwgNDcxNjksIDQ3MTc0LCAKKyAgICA0NzE3OSwgNDcxODQsIDQ3MTg5LCA0NzE5NCwgNDcxOTksIDQ3MjA0LCA0NzIwOCwgNDcyMTIsIDQ3MjE2LCA0NzIyMiwgCisgICAgNDcyMjgsIDQ3MjMzLCA0NzIzOCwgNDcyNDMsIDQ3MjQ4LCA0NzI1MywgNDcyNTgsIDQ3MjY2LCA0NzI3NCwgNDcyODIsIAorICAgIDQ3MjkwLCA0NzI5OCwgNDczMDYsIDQ3MzE0LCA0NzMyMiwgNDczMjgsIDQ3MzMzLCA0NzMzOCwgNDczNDMsIDQ3MzQ2LCAKKyAgICA0NzM1MCwgNDczNTQsIDQ3MzU4LCA0NzM2MiwgNDczNjYsIDQ3MzcwLCA0NzM3NywgNDczODQsIDQ3MzkyLCA0NzQwMCwgCisgICAgNDc0MDUsIDQ3NDEwLCA0NzQxNywgNDc0MjQsIDQ3NDMxLCA0NzQzOCwgNDc0NDEsIDQ3NDQ0LCA0NzQ0OSwgNDc0NTEsIAorICAgIDQ3NDU1LCA0NzQ2MCwgNDc0NjIsIDQ3NDY0LCA0NzQ2NiwgNDc0NjgsIDQ3NDczLCA0NzQ3NiwgNDc0NzgsIDQ3NDgzLCAKKyAgICA0NzQ5MCwgNDc0OTcsIDQ3NTAwLCA0NzUwNCwgNDc1MDksIDQ3NTE0LCA0NzUyMiwgNDc1MjgsIDQ3NTM0LCA0NzU0NiwgCisgICAgNDc1NTMsIDQ3NTYwLCA0NzU2NSwgNDc1NzAsIDQ3NTc2LCA0NzU3OSwgNDc1ODIsIDQ3NTg3LCA0NzU4OSwgNDc1OTMsIAorICAgIDQ3NTk1LCA0NzU5NywgNDc1OTksIDQ3NjAxLCA0NzYwMywgNDc2MDUsIDQ3NjEwLCA0NzYxMiwgNDc2MTQsIDQ3NjE2LCAKKyAgICA0NzYxOCwgNDc2MjIsIDQ3NjI0LCA0NzYyNywgNDc2MzIsIDQ3NjM3LCA0NzY0MiwgNDc2NDcsIDQ3NjUzLCA0NzY1OSwgCisgICAgNDc2NjEsIDQ3NjY0LCA0NzY3MSwgNDc2NzgsIDQ3Njg1LCA0NzY5MiwgNDc2OTYsIDQ3NzAwLCA0NzcwMiwgNDc3MDQsIAorICAgIDQ3NzA4LCA0NzcxNCwgNDc3MTksIDQ3NzIxLCA0NzcyNSwgNDc3MzQsIDQ3NzQyLCA0Nzc1MCwgNDc3NTYsIDQ3NzYyLCAKKyAgICA0Nzc2NywgNDc3NzMsIDQ3Nzc4LCA0Nzc4MSwgNDc3OTUsIDQ3Nzk4LCA0NzgwMywgNDc4MDgsIDQ3ODE0LCA0NzgyNCwgCisgICAgNDc4MjYsIDQ3ODMyLCA0NzgzOCwgNDc4NDIsIDQ3ODQ5LCA0Nzg1MywgNDc4NTUsIDQ3ODU3LCA0Nzg2MSwgNDc4NjcsIAorICAgIDQ3ODcyLCA0Nzg3OCwgNDc4ODAsIDQ3ODg2LCA0Nzg4OCwgNDc4OTQsIDQ3ODk2LCA0Nzg5OCwgNDc5MDMsIDQ3OTA1LCAKKyAgICA0NzkwOSwgNDc5MTQsIDQ3OTE2LCA0NzkyMSwgNDc5MjYsIDQ3OTMwLCA0NzkzNywgMCwgNDc5NDcsIDQ3OTUzLCA0Nzk1NiwgCisgICAgNDc5NjIsIDQ3OTY1LCA0Nzk3MCwgNDc5NzUsIDQ3OTc5LCA0Nzk4MSwgNDc5ODMsIDQ3OTg3LCA0Nzk5MSwgNDc5OTUsIAorICAgIDQ3OTk5LCA0ODAwNCwgNDgwMDYsIDQ4MDExLCA0ODAxNCwgNDgwMTcsIDQ4MDIwLCA0ODAyNCwgNDgwMjgsIDQ4MDMzLCAKKyAgICA0ODAzNywgNDgwNDIsIDQ4MDQ3LCA0ODA1MSwgNDgwNTYsIDQ4MDYyLCA0ODA2NSwgNDgwNzEsIDQ4MDc2LCA0ODA4MCwgCisgICAgNDgwODUsIDQ4MDkxLCA0ODA5NywgNDgxMDQsIDQ4MTEwLCA0ODExNywgNDgxMjQsIDQ4MTI2LCA0ODEzMywgNDgxMzcsIAorICAgIDQ4MTQzLCA0ODE0OSwgNDgxNTQsIDQ4MTYwLCA0ODE2NCwgNDgxNjksIDQ4MTcyLCA0ODE3NywgNDgxODMsIDQ4MTkwLCAKKyAgICA0ODE5OCwgNDgyMDUsIDQ4MjE0LCA0ODIyNCwgNDgyMzEsIDQ4MjM3LCA0ODI0MSwgNDgyNDgsIDQ4MjUzLCA0ODI2MiwgCisgICAgNDgyNjUsIDQ4MjY4LCA0ODI3NywgNDgyODcsIDQ4Mjk0LCA0ODI5NiwgNDgzMDIsIDQ4MzA3LCA0ODMwOSwgNDgzMTIsIAorICAgIDQ4MzE2LCA0ODMyNCwgNDgzMzMsIDQ4MzM2LCA0ODM0MSwgNDgzNDYsIDQ4MzU0LCA0ODM2MiwgNDgzNzAsIDQ4Mzc4LCAKKyAgICA0ODM4NCwgNDgzOTAsIDQ4Mzk2LCA0ODQwNCwgNDg0MDksIDQ4NDEyLCA0ODQxNiwgNDg0MTksIDQ4NDMxLCA0ODQ0MSwgCisgICAgNDg0NTIsIDQ4NDYxLCA0ODQ3MiwgNDg0ODIsIDQ4NDkxLCA0ODQ5NywgNDg1MDUsIDQ4NTA5LCA0ODUxNywgNDg1MjEsIAorICAgIDQ4NTI5LCA0ODUzNiwgNDg1NDMsIDQ4NTUyLCA0ODU2MSwgNDg1NzEsIDQ4NTgxLCA0ODU5MSwgNDg2MDEsIDQ4NjEwLCAKKyAgICA0ODYxOSwgNDg2MjksIDQ4NjM5LCA0ODY0OCwgNDg2NTcsIDQ4NjYzLCA0ODY2OSwgNDg2NzUsIDQ4NjgxLCA0ODY4NywgCisgICAgNDg2OTMsIDQ4Njk5LCA0ODcwNSwgNDg3MTEsIDQ4NzE4LCA0ODcyNCwgNDg3MzAsIDQ4NzM2LCA0ODc0MiwgNDg3NDgsIAorICAgIDQ4NzU0LCA0ODc2MCwgNDg3NjYsIDQ4NzcyLCA0ODc3OSwgNDg3ODYsIDQ4NzkzLCA0ODgwMCwgNDg4MDcsIDQ4ODE0LCAKKyAgICA0ODgyMSwgNDg4MjgsIDQ4ODM1LCA0ODg0MiwgNDg4NTAsIDQ4ODU1LCA0ODg1OCwgNDg4NjIsIDQ4ODY2LCA0ODg3MiwgCisgICAgNDg4NzUsIDQ4ODgxLCA0ODg4NywgNDg4OTIsIDQ4ODk2LCA0ODkwMSwgNDg5MDcsIDQ4OTE0LCA0ODkxNywgNDg5MjQsIAorICAgIDQ4OTMxLCA0ODkzNSwgNDg5NDQsIDQ4OTUzLCA0ODk1OCwgNDg5NjQsIDQ4OTY5LCA0ODk3NCwgNDg5ODEsIDQ4OTg4LCAKKyAgICA0ODk5NiwgNDkwMDQsIDQ5MDEzLCA0OTAxNywgNDkwMjYsIDQ5MDMxLCA0OTAzNSwgNDkwNDIsIDQ5MDQ2LCA0OTA1MywgCisgICAgNDkwNjEsIDQ5MDY2LCA0OTA3NCwgNDkwNzgsIDQ5MDgzLCA0OTA4NywgNDkwOTIsIDQ5MDk2LCA0OTEwMSwgNDkxMDYsIAorICAgIDQ5MTE1LCA0OTExNywgNDkxMjAsIDQ5MTIzLCA0OTEzMCwgNDkxMzcsIDQ5MTQyLCA0OTE1MCwgNDkxNTYsIDQ5MTYyLCAKKyAgICA0OTE2NywgNDkxNzAsIDQ5MTc1LCA0OTE4MCwgNDkxODUsIDQ5MTkzLCA0OTE5NywgNDkyMDQsIDQ5MjEyLCA0OTIyMCwgCisgICAgNDkyMjUsIDQ5MjMwLCA0OTIzNiwgNDkyNDEsIDQ5MjQ2LCA0OTI1MiwgNDkyNTcsIDQ5MjYwLCA0OTI2NCwgNDkyNjgsIAorICAgIDQ5Mjc1LCA0OTI4NCwgNDkyODksIDQ5Mjk4LCA0OTMwNywgNDkzMTMsIDQ5MzE5LCA0OTMyNCwgNDkzMjksIDQ5MzM0LCAKKyAgICA0OTMzOSwgNDkzNDUsIDQ5MzUxLCA0OTM1OSwgNDkzNjcsIDQ5MzczLCA0OTM3OSwgNDkzODQsIDQ5Mzg5LCA0OTM5NiwgCisgICAgNDk0MDMsIDQ5NDA5LCA0OTQxMiwgNDk0MTUsIDQ5NDE5LCA0OTQyMywgNDk0MjcsIDQ5NDMyLCA0OTQzOCwgNDk0NDQsIAorICAgIDQ5NDUxLCA0OTQ1OCwgNDk0NjMsIDQ5NDY3LCA0OTQ3MSwgNDk0NzUsIDQ5NDc5LCA0OTQ4MywgNDk0ODcsIDQ5NDkxLCAKKyAgICA0OTQ5NSwgNDk0OTksIDQ5NTAzLCA0OTUwNywgNDk1MTEsIDQ5NTE1LCA0OTUxOSwgNDk1MjMsIDQ5NTI3LCA0OTUzMSwgCisgICAgNDk1MzUsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTUxLCA0OTU1NSwgNDk1NTksIDQ5NTYzLCA0OTU2NywgNDk1NzEsIAorICAgIDQ5NTc1LCA0OTU3OSwgNDk1ODMsIDQ5NTg3LCA0OTU5MSwgNDk1OTUsIDQ5NTk5LCA0OTYwMywgNDk2MDcsIDQ5NjExLCAKKyAgICA0OTYxNSwgNDk2MTksIDQ5NjIzLCA0OTYyNywgNDk2MzEsIDQ5NjM1LCA0OTYzOSwgNDk2NDMsIDQ5NjQ3LCA0OTY1MSwgCisgICAgNDk2NTUsIDQ5NjU5LCA0OTY2MywgNDk2NjcsIDQ5NjcxLCA0OTY3NSwgNDk2NzksIDQ5NjgzLCA0OTY4NywgNDk2OTEsIAorICAgIDQ5Njk1LCA0OTY5OSwgNDk3MDMsIDQ5NzA3LCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgNDk3MjcsIDQ5NzMxLCAKKyAgICA0OTczNSwgNDk3MzksIDQ5NzQzLCA0OTc0NywgNDk3NTEsIDQ5NzU1LCA0OTc1OSwgNDk3NjMsIDQ5NzY3LCA0OTc3MSwgCisgICAgNDk3NzUsIDQ5Nzc5LCA0OTc4MywgNDk3ODcsIDQ5NzkxLCA0OTc5NSwgNDk3OTksIDQ5ODAzLCA0OTgwNywgNDk4MTEsIAorICAgIDQ5ODE1LCA0OTgxOSwgNDk4MjMsIDQ5ODI3LCA0OTgzMSwgNDk4MzUsIDQ5ODM5LCA0OTg0MywgNDk4NDcsIDQ5ODUxLCAKKyAgICA0OTg1NSwgNDk4NTksIDQ5ODYzLCA0OTg2NywgNDk4NzEsIDQ5ODc1LCA0OTg3OSwgNDk4ODMsIDQ5ODg3LCA0OTg5MSwgCisgICAgNDk4OTUsIDQ5ODk5LCA0OTkwMywgNDk5MDcsIDQ5OTExLCA0OTkxNSwgNDk5MTksIDQ5OTIzLCA0OTkyNywgNDk5MzEsIAorICAgIDQ5OTM1LCA0OTkzOSwgNDk5NDMsIDQ5OTQ3LCA0OTk1MSwgNDk5NTUsIDQ5OTU5LCA0OTk2MywgNDk5NjcsIDQ5OTcxLCAKKyAgICA0OTk3NSwgNDk5NzksIDQ5OTgzLCA0OTk4NywgNDk5OTEsIDQ5OTk1LCA0OTk5OSwgNTAwMDMsIDUwMDA3LCA1MDAxMSwgCisgICAgNTAwMTUsIDUwMDE5LCA1MDAyMywgNTAwMjcsIDUwMDMxLCA1MDAzNSwgNTAwMzksIDUwMDQzLCA1MDA0NywgNTAwNTEsIAorICAgIDUwMDU1LCA1MDA1OSwgNTAwNjMsIDUwMDY3LCA1MDA3MSwgNTAwNzUsIDUwMDc5LCA1MDA4MywgNTAwODcsIDUwMDkxLCAKKyAgICA1MDA5NSwgNTAwOTksIDUwMTAzLCA1MDEwNywgNTAxMTEsIDUwMTE1LCA1MDExOSwgNTAxMjMsIDUwMTI3LCA1MDEzMSwgCisgICAgNTAxMzUsIDUwMTM5LCA1MDE0MywgNTAxNDcsIDUwMTUxLCA1MDE1NSwgNTAxNTksIDUwMTYzLCA1MDE2NywgNTAxNzEsIAorICAgIDUwMTc1LCA1MDE3OSwgNTAxODMsIDUwMTg3LCA1MDE5MSwgNTAxOTUsIDUwMTk5LCA1MDIwMywgNTAyMDcsIDUwMjExLCAKKyAgICA1MDIxNSwgNTAyMTksIDUwMjIzLCA1MDIyNywgNTAyMzEsIDUwMjM1LCA1MDIzOSwgNTAyNDMsIDUwMjQ3LCA1MDI1MSwgCisgICAgNTAyNTUsIDUwMjU5LCA1MDI2MywgNTAyNjcsIDUwMjcxLCA1MDI3NSwgNTAyNzksIDUwMjgzLCA1MDI4NywgNTAyOTEsIAorICAgIDUwMjk1LCA1MDI5OSwgNTAzMDMsIDUwMzA3LCA1MDMxMSwgNTAzMTUsIDUwMzE5LCA1MDMyMywgNTAzMjcsIDUwMzMxLCAKKyAgICA1MDMzNSwgNTAzMzksIDUwMzQzLCA1MDM0NywgNTAzNTEsIDUwMzU1LCA1MDM1OSwgNTAzNjMsIDUwMzY3LCA1MDM3MSwgCisgICAgNTAzNzUsIDUwMzc5LCA1MDM4MywgNTAzODcsIDUwMzkxLCA1MDM5NSwgNTAzOTksIDUwNDAzLCA1MDQwNywgNTA0MTEsIAorICAgIDUwNDE1LCA1MDQxOSwgNTA0MjMsIDUwNDI3LCA1MDQzMSwgNTA0MzUsIDUwNDM5LCA1MDQ0MywgNTA0NDcsIDUwNDUxLCAKKyAgICA1MDQ1NSwgNTA0NTksIDUwNDYzLCA1MDQ2NywgNTA0NzEsIDUwNDc1LCA1MDQ3OSwgNTA0ODMsIDUwNDg3LCA1MDQ5NCwgCisgICAgNTA1MDIsIDUwNTA4LCA1MDUxNCwgNTA1MjEsIDUwNTI4LCA1MDUzNCwgNTA1NDAsIDUwNTQ2LCA1MDU1MiwgNTA1NTcsIAorICAgIDUwNTYyLCA1MDU2NywgNTA1NzIsIDUwNTc4LCA1MDU4NCwgNTA1OTIsIDUwNTk5LCA1MDYwNSwgNTA2MTEsIDUwNjE5LCAKKyAgICA1MDYyOCwgNTA2MzUsIDUwNjQ1LCA1MDY1NiwgNTA2NTksIDUwNjYyLCA1MDY2NiwgNTA2NzAsIDUwNjc3LCA1MDY4NCwgCisgICAgNTA2OTUsIDUwNzA2LCA1MDcxNiwgNTA3MjYsIDUwNzMzLCA1MDc0MCwgNTA3NDcsIDUwNzU0LCA1MDc2NSwgNTA3NzYsIAorICAgIDUwNzg3LCA1MDc5OCwgNTA4MDgsIDUwODE4LCA1MDgzMCwgNTA4NDIsIDUwODUzLCA1MDg2NCwgNTA4NzYsIDUwODg4LCAKKyAgICA1MDg5NywgNTA5MDcsIDUwOTE3LCA1MDkyOCwgNTA5MzksIDUwOTQ2LCA1MDk1MywgNTA5NjAsIDUwOTY3LCA1MDk3NywgCisgICAgNTA5ODcsIDUwOTk1LCA1MTAwMywgNTEwMTAsIDUxMDE3LCA1MTAyNCwgNTEwMzEsIDUxMDM4LCA1MTA0MywgNTEwNDgsIAorICAgIDUxMDU0LCA1MTA2MiwgNTEwNzIsIDUxMDgyLCA1MTA5MiwgNTExMDIsIDUxMTEyLCA1MTEyMiwgNTExMzIsIDUxMTQyLCAKKyAgICA1MTE1MiwgNTExNjIsIDUxMTcyLCA1MTE4MywgNTExOTQsIDUxMjA0LCA1MTIxNCwgNTEyMjUsIDUxMjM2LCA1MTI0NiwgCisgICAgNTEyNTYsIDUxMjY3LCA1MTI3OCwgNTEyODgsIDUxMjk4LCA1MTMwOSwgNTEzMjAsIDUxMzM2LCA1MTM1NSwgNTEzNzEsIAorICAgIDUxMzkwLCA1MTQwNiwgNTE0MjIsIDUxNDM4LCA1MTQ1NCwgNTE0NjUsIDUxNDc3LCA1MTQ4OCwgNTE1MDAsIDUxNTE5LCAKKyAgICA1MTUzOCwgNTE1NDYsIDUxNTUyLCA1MTU1OSwgNTE1NjYsIDUxNTczLCA1MTU4MCwgNTE1ODUsIDUxNTkxLCA1MTU5NiwgCisgICAgNTE2MDEsIDUxNjA3LCA1MTYxMiwgNTE2MTcsIDUxNjIyLCA1MTYyNywgNTE2MzIsIDUxNjM5LCA1MTY0NCwgNTE2NTEsIAorICAgIDUxNjU2LCA1MTY2MSwgNTE2NjUsIDUxNjY5LCA1MTY3NiwgNTE2ODMsIDUxNjkwLCA1MTY5NywgNTE3MDQsIDUxNzExLCAKKyAgICA1MTcyNCwgNTE3MzcsIDUxNzUwLCA1MTc2MywgNTE3NzEsIDUxNzc5LCA1MTc4NSwgNTE3OTEsIDUxNzk4LCA1MTgwNSwgCisgICAgNTE4MTIsIDUxODE5LCA1MTgyMywgNTE4MjgsIDUxODM2LCA1MTg0NCwgNTE4NTIsIDUxODU5LCA1MTg2MywgNTE4NzEsIAorICAgIDUxODc5LCA1MTg4MywgNTE4ODcsIDUxODkyLCA1MTg5OSwgNTE5MDcsIDUxOTE1LCA1MTkzNCwgNTE5NTMsIDUxOTcyLCAKKyAgICA1MTk5MSwgNTIwMTAsIDUyMDI5LCA1MjA0OCwgNTIwNjcsIDUyMDczLCA1MjA4MCwgNTIwODksIDUyMDk3LCA1MjEwNSwgCisgICAgNTIxMTAsIDUyMTEzLCA1MjExNiwgNTIxMjEsIDUyMTI0LCA1MjE0MywgNTIxNTAsIDUyMTU2LCA1MjE2MiwgNTIxNjYsIAorICAgIDUyMTY5LCA1MjE3MiwgNTIxNzUsIDUyMTg3LCA1MjIwMCwgNTIyMDcsIDUyMjE0LCA1MjIxNywgNTIyMjEsIDUyMjI0LCAKKyAgICA1MjIyOSwgNTIyMzQsIDUyMjM5LCA1MjI0NSwgNTIyNTQsIDUyMjYxLCA1MjI2OCwgNTIyNzYsIDUyMjgzLCA1MjI5MCwgCisgICAgNTIyOTMsIDUyMjk5LCA1MjMwNSwgNTIzMDgsIDUyMzExLCA1MjMxNiwgNTIzMjEsIDUyMzI3LCA1MjMzMywgNTIzMzcsIAorICAgIDUyMzQyLCA1MjM0OSwgNTIzNTMsIDUyMzU5LCA1MjM2MywgNTIzNjcsIDUyMzc1LCA1MjM4NywgNTIzOTYsIDUyNDAwLCAKKyAgICA1MjQwMiwgNTI0MTEsIDUyNDIwLCA1MjQyNiwgNTI0MjksIDUyNDM1LCA1MjQ0MSwgNTI0NDYsIDUyNDUxLCA1MjQ1NiwgCisgICAgNTI0NjEsIDUyNDY2LCA1MjQ3MSwgNTI0NzMsIDUyNDc5LCA1MjQ4NCwgNTI0OTEsIDUyNDk1LCA1MjUwMSwgNTI1MDQsIAorICAgIDUyNTA4LCA1MjUxNSwgNTI1MjIsIDUyNTI0LCA1MjUyNiwgNTI1MzIsIDUyNTM4LCA1MjU0NCwgNTI1NTMsIDUyNTYyLCAKKyAgICA1MjU2OSwgNTI1NzYsIDUyNTgyLCA1MjU4OCwgNTI1OTMsIDUyNTk4LCA1MjYwMywgNTI2MDksIDUyNjE1LCA1MjYyMCwgCisgICAgNTI2MjcsIDUyNjMxLCA1MjYzNSwgNTI2NDgsIDUyNjYxLCA1MjY3MywgNTI2ODIsIDUyNjg4LCA1MjY5NSwgNTI3MDAsIAorICAgIDUyNzA1LCA1MjcxMCwgNTI3MTUsIDUyNzIwLCA1MjcyMiwgNTI3MjksIDUyNzM2LCA1Mjc0MywgNTI3NTAsIDUyNzU3LCAKKyAgICA1Mjc2NSwgNTI3NzEsIDUyNzc2LCA1Mjc4MiwgNTI3ODgsIDUyNzk0LCA1MjgwMSwgNTI4MDcsIDUyODE1LCA1MjgyMywgCisgICAgNTI4MzEsIDUyODM5LCA1Mjg0NiwgNTI4NTIsIDUyODU4LCA1Mjg2NywgNTI4NzEsIDUyODgwLCA1Mjg4OSwgNTI4OTgsIAorICAgIDUyOTA2LCA1MjkxMCwgNTI5MTYsIDUyOTIzLCA1MjkzMCwgNTI5MzQsIDUyOTQwLCA1Mjk0NywgNTI5NTIsIDUyOTU3LCAKKyAgICA1Mjk2MywgNTI5NjgsIDUyOTczLCA1Mjk4MCwgNTI5ODcsIDUyOTkyLCA1Mjk5NywgNTMwMDUsIDUzMDEzLCA1MzAyMywgCisgICAgNTMwMzMsIDUzMDQwLCA1MzA0NywgNTMwNTEsIDUzMDU1LCA1MzA2NywgNTMwNzMsIDUzMDc5LCA1MzA4NCwgNTMwODksIAorICAgIDUzMDk2LCA1MzEwMywgNTMxMDksIDUzMTE1LCA1MzEyNCwgNTMxMzIsIDUzMTQwLCA1MzE0NywgNTMxNTQsIDUzMTYxLCAKKyAgICA1MzE2NywgNTMxNzQsIDUzMTgwLCA1MzE4NywgNTMxOTQsIDUzMjAxLCA1MzIwOCwgNTMyMTQsIDUzMjE5LCA1MzIyOCwgCisgICAgNTMyMzgsIDUzMjQ1LCA1MzI1NCwgNTMyNjAsIDUzMjY1LCA1MzI3MCwgNTMyODAsIDUzMjg2LCA1MzI5MiwgNTMyOTgsIAorICAgIDUzMzA2LCA1MzMxMSwgNTMzMTgsIDUzMzI1LCA1MzMzNiwgNTMzNDMsIDUzMzUwLCA1MzM1NywgNTMzNjQsIDUzMzcxLCAKKyAgICA1MzM3OCwgNTMzODUsIDUzMzk3LCA1MzQwOSwgNTM0MjAsIDUzNDMxLCA1MzQ0NCwgNTM0NTcsIDUzNDYyLCA1MzQ2NywgCisgICAgNTM0NzYsIDUzNDg1LCA1MzQ5MiwgNTM0OTksIDUzNTA4LCA1MzUxNywgNTM1MjUsIDUzNTMzLCA1MzU0MSwgNTM1NDksIAorICAgIDUzNTU5LCA1MzU2OSwgNTM1ODMsIDUzNTk3LCA1MzYwNSwgNTM2MTMsIDUzNjI1LCA1MzYzNywgNTM2NDUsIDUzNjUzLCAKKyAgICA1MzY2MywgNTM2NzMsIDUzNjc4LCA1MzY4MywgNTM2OTIsIDUzNzAxLCA1MzcwNiwgNTM3MTEsIDUzNzE5LCA1MzcyNSwgCisgICAgNTM3MzEsIDUzNzM5LCA1Mzc0NywgNTM3NjAsIDUzNzczLCA1Mzc3NywgNTM3ODEsIDUzNzg4LCA1Mzc5NSwgNTM4MDIsIAorICAgIDUzODEwLCA1MzgxOCwgNTM4MjcsIDUzODM2LCA1Mzg0MiwgNTM4NDgsIDUzODU1LCA1Mzg2MiwgNTM4NjksIDUzODc2LCAKKyAgICA1Mzg4NSwgNTM4OTQsIDUzODk3LCA1MzkwMCwgNTM5MDUsIDUzOTEwLCA1MzkxNiwgNTM5MjIsIDUzOTI5LCA1MzkzNiwgCisgICAgNTM5NDYsIDUzOTU2LCA1Mzk2MywgNTM5NzAsIDUzOTc4LCA1Mzk4NiwgNTM5OTQsIDU0MDAyLCA1NDAxMCwgNTQwMTgsIAorICAgIDU0MDI0LCA1NDAzMCwgNTQwMzQsIDU0MDM4LCA1NDA0NSwgNTQwNTIsIDU0MDU3LCA1NDA2MiwgNTQwNjcsIDU0MDcyLCAKKyAgICA1NDA3OCwgNTQwOTIsIDU0MDk5LCA1NDEwNiwgNTQxMTAsIDU0MTEyLCA1NDExNCwgNTQxMTksIDU0MTI0LCA1NDEyOSwgCisgICAgNTQxMzQsIDU0MTQyLCA1NDE0OSwgNTQxNTYsIDU0MTY0LCA1NDE3NiwgNTQxODQsIDU0MTkyLCA1NDIwMywgNTQyMDcsIAorICAgIDU0MjExLCA1NDIxNywgNTQyMjUsIDU0MjM4LCA1NDI0NSwgNTQyNTIsIDU0MjU5LCA1NDI2NCwgNTQyNzEsIDU0MjgwLCAKKyAgICA1NDI4OCwgNTQyOTQsIDU0MzAwLCA1NDMwNiwgNTQzMTUsIDU0MzI0LCA1NDMzMiwgNTQzNDEsIDU0MzQ2LCA1NDM0OSwgCisgICAgNTQzNTQsIDU0MzYwLCA1NDM2NiwgNTQzNzIsIDU0Mzc4LCA1NDM4MiwgNTQzODUsIDU0Mzg5LCA1NDM5MywgNTQzOTksIAorICAgIDU0NDA1LCA1NDQxMSwgNTQ0MTcsIDU0NDIxLCA1NDQyNSwgNTQ0MzIsIDU0NDM5LCA1NDQ0NiwgNTQ0NTMsIDU0NDYwLCAKKyAgICA1NDQ2NywgNTQ0NzcsIDU0NDg3LCA1NDQ5NCwgNTQ1MDEsIDU0NTA5LCA1NDUxNywgNTQ1MjEsIDU0NTI2LCA1NDUzMSwgCisgICAgNTQ1MzcsIDU0NTQzLCA1NDU0NiwgNTQ1NDksIDU0NTUyLCA1NDU1NSwgNTQ1NTksIDU0NTY0LCA1NDU2OSwgNTQ1NzQsIAorICAgIDU0NTc5LCA1NDU4NCwgNTQ1ODgsIDU0NTkyLCA1NDU5NiwgNTQ2MDAsIDU0NjA0LCA1NDYwOCwgNTQ2MTIsIDU0NjE4LCAKKyAgICA1NDYyMiwgNTQ2MjgsIDU0NjMzLCA1NDY0MCwgNTQ2NDgsIDU0NjU1LCA1NDY2MywgNTQ2NzAsIDU0Njc4LCA1NDY4NywgCisgICAgNTQ2OTQsIDU0NzA0LCA1NDcxNSwgNTQ3MjEsIDU0NzMwLCA1NDczNiwgNTQ3NDUsIDU0NzU0LCA1NDc2MCwgNTQ3NjYsIAorICAgIDU0NzcwLCA1NDc3NCwgNTQ3ODMsIDU0NzkyLCA1NDc5OSwgNTQ4MDYsIDU0ODE1LCAwLCAwLCAwLCA1NDgyNCwgNTQ4MjksIAorICAgIDU0ODMzLCA1NDgzNywgNTQ4NDIsIDU0ODQ3LCA1NDg1MiwgNTQ4NjAsIDU0ODY4LCA1NDg3MSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTQ4NDcsIDU0ODUyLCA1NDg1NywgNTQ4NjIsIDU0ODY3LCA1NDg3MiwgNTQ4NzcsIDU0ODgyLCAKLSAgICA1NDg4NywgNTQ4OTIsIDU0ODk3LCA1NDkwMywgNTQ5MDcsIDU0OTEyLCA1NDkxNywgNTQ5MjIsIDU0OTI3LCA1NDkzMiwgCi0gICAgNTQ5MzcsIDU0OTQyLCA1NDk0NywgNTQ5NTIsIDU0OTU3LCA1NDk2MiwgNTQ5NjcsIDU0OTcyLCA1NDk3NywgNTQ5ODIsIAotICAgIDU0OTg3LCA1NDk5MiwgNTQ5OTcsIDU1MDAyLCA1NTAwNywgNTUwMTIsIDU1MDE3LCA1NTAyMywgNTUwMjgsIDU1MDM0LCAKLSAgICA1NTA0MywgNTUwNDgsIDU1MDU2LCA1NTA2MywgNTUwNzIsIDU1MDc3LCA1NTA4MiwgNTUwODcsIDU1MDkzLCAwLCA1NTEwMCwgCi0gICAgNTUxMDUsIDU1MTEwLCA1NTExNSwgNTUxMjAsIDU1MTI1LCA1NTEzMCwgNTUxMzUsIDU1MTQwLCA1NTE0NSwgNTUxNTAsIAotICAgIDU1MTU2LCA1NTE2MCwgNTUxNjUsIDU1MTcwLCA1NTE3NSwgNTUxODAsIDU1MTg1LCA1NTE5MCwgNTUxOTUsIDU1MjAwLCAKLSAgICA1NTIwNSwgNTUyMTAsIDU1MjE1LCA1NTIyMCwgNTUyMjUsIDU1MjMwLCA1NTIzNSwgNTUyNDAsIDU1MjQ1LCA1NTI1MCwgCi0gICAgNTUyNTUsIDU1MjYwLCA1NTI2NSwgNTUyNzAsIDU1Mjc2LCA1NTI4MSwgNTUyODcsIDU1Mjk2LCA1NTMwMSwgNTUzMDksIAotICAgIDU1MzE2LCA1NTMyNSwgNTUzMzAsIDU1MzM1LCA1NTM0MCwgNTUzNDYsIDAsIDU1MzUzLCA1NTM2MSwgNTUzNjksIDU1Mzc4LCAKLSAgICA1NTM4NSwgNTUzOTMsIDU1Mzk5LCA1NTQwOCwgNTU0MTYsIDU1NDI0LCA1NTQzMiwgNTU0NDAsIDU1NDQ4LCA1NTQ1NiwgCi0gICAgNTU0NjEsIDU1NDY4LCA1NTQ3NCwgNTU0ODEsIDU1NDg5LCA1NTQ5NiwgNTU1MDMsIDU1NTExLCA1NTUxNywgNTU1MjMsIAotICAgIDU1NTMwLCA1NTUzNywgNTU1NDcsIDU1NTU3LCA1NTU2NCwgNTU1NzEsIDU1NTc2LCA1NTU4NiwgNTU1OTYsIDU1NjAxLCAKLSAgICA1NTYwNiwgNTU2MTEsIDU1NjE2LCA1NTYyMSwgNTU2MjYsIDU1NjMxLCA1NTYzNiwgNTU2NDEsIDU1NjQ2LCA1NTY1MSwgCi0gICAgNTU2NTYsIDU1NjYxLCA1NTY2NiwgNTU2NzEsIDU1Njc2LCA1NTY4MSwgNTU2ODYsIDU1NjkxLCA1NTY5NiwgNTU3MDEsIAotICAgIDU1NzA2LCA1NTcxMSwgNTU3MTYsIDU1NzIxLCA1NTcyNiwgNTU3MzEsIDU1NzM2LCA1NTc0MSwgNTU3NDYsIDU1NzUwLCAKLSAgICA1NTc1NCwgNTU3NTksIDU1NzY0LCA1NTc2OSwgNTU3NzQsIDU1Nzc5LCA1NTc4NCwgNTU3ODksIDU1Nzk0LCA1NTc5OSwgCi0gICAgNTU4MDQsIDU1ODA5LCA1NTgxNCwgNTU4MTksIDU1ODI0LCA1NTgyOSwgNTU4MzQsIDU1ODM5LCA1NTg0NCwgNTU4NTEsIAotICAgIDU1ODU4LCA1NTg2NSwgNTU4NzIsIDU1ODc5LCA1NTg4NiwgNTU4OTMsIDU1OTAwLCA1NTkwNywgNTU5MTQsIDU1OTIxLCAKLSAgICA1NTkyOCwgNTU5MzUsIDU1OTQyLCA1NTk0NywgNTU5NTIsIDU1OTU5LCA1NTk2NiwgNTU5NzMsIDU1OTgwLCA1NTk4NywgCi0gICAgNTU5OTQsIDU2MDAxLCA1NjAwOCwgNTYwMTUsIDU2MDIyLCA1NjAyOSwgNTYwMzYsIDU2MDQyLCA1NjA0OCwgNTYwNTQsIAotICAgIDU2MDYwLCA1NjA2NywgNTYwNzQsIDU2MDgxLCA1NjA4OCwgNTYwOTUsIDU2MTAyLCA1NjEwOSwgNTYxMTYsIDU2MTIzLCAKLSAgICA1NjEzMCwgNTYxMzgsIDU2MTQ2LCA1NjE1NCwgNTYxNjIsIDU2MTcwLCA1NjE3OCwgNTYxODYsIDU2MTk0LCA1NjE5OCwgCi0gICAgNTYyMDQsIDU2MjEwLCA1NjIxNCwgNTYyMjAsIDU2MjI2LCA1NjIzMiwgNTYyMzksIDU2MjQ2LCA1NjI1MywgNTYyNjAsIAotICAgIDU2MjY1LCA1NjI3MSwgNTYyNzcsIDU2Mjg0LCAwLCAwLCAwLCAwLCAwLCA1NjI5MSwgNTYyOTksIDU2MzA4LCA1NjMxNywgCi0gICAgNTYzMjUsIDU2MzMxLCA1NjMzNiwgNTYzNDEsIDU2MzQ2LCA1NjM1MSwgNTYzNTYsIDU2MzYxLCA1NjM2NiwgNTYzNzEsIAotICAgIDU2Mzc2LCA1NjM4MSwgNTYzODYsIDU2MzkxLCA1NjM5NiwgNTY0MDEsIDU2NDA2LCA1NjQxMSwgNTY0MTYsIDU2NDIxLCAKLSAgICA1NjQyNiwgNTY0MzEsIDU2NDM2LCA1NjQ0MSwgNTY0NDYsIDU2NDUxLCA1NjQ1NiwgNTY0NjEsIDU2NDY2LCA1NjQ3MSwgCi0gICAgNTY0NzYsIDU2NDgxLCA1NjQ4NiwgNTY0OTEsIDU2NDk2LCA1NjUwMSwgNTY1MDYsIDU2NTExLCA1NjUxNiwgNTY1MjEsIAotICAgIDU2NTI2LCAwLCA1NjUzMSwgMCwgMCwgMCwgMCwgMCwgNTY1MzYsIDAsIDAsIDU2NTQxLCA1NjU0NSwgNTY1NTAsIDU2NTU1LCAKLSAgICA1NjU2MCwgNTY1NjUsIDU2NTc0LCA1NjU3OSwgNTY1ODQsIDU2NTg5LCA1NjU5NCwgNTY1OTksIDU2NjA0LCA1NjYwOSwgCi0gICAgNTY2MTQsIDU2NjIxLCA1NjYyNiwgNTY2MzEsIDU2NjQwLCA1NjY0NywgNTY2NTIsIDU2NjU3LCA1NjY2MiwgNTY2NjksIAotICAgIDU2Njc0LCA1NjY4MSwgNTY2ODYsIDU2NjkxLCA1NjY5OCwgNTY3MDUsIDU2NzEwLCA1NjcxNSwgNTY3MjAsIDU2NzI3LCAKLSAgICA1NjczNCwgNTY3MzksIDU2NzQ0LCA1Njc0OSwgNTY3NTQsIDU2NzU5LCA1Njc2NiwgNTY3NzMsIDU2Nzc4LCA1Njc4MywgCi0gICAgNTY3ODgsIDU2NzkzLCA1Njc5OCwgNTY4MDMsIDU2ODA4LCA1NjgxMywgNTY4MTgsIDU2ODIzLCA1NjgyOCwgNTY4MzUsIAotICAgIDU2ODQwLCA1Njg0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY4NTAsIDU2ODU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1Njg2MiwgNTY4NjcsIDU2ODcxLCA1Njg3NSwgNTY4NzksIDU2ODgzLCA1Njg4NywgNTY4OTEsIAotICAgIDU2ODk1LCA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMywgNTY5MTcsIDU2OTIxLCA1NjkyNSwgNTY5MjksIDU2OTMzLCAKLSAgICA1NjkzNywgNTY5NDEsIDU2OTQ1LCA1Njk0OSwgNTY5NTMsIDU2OTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIDU2OTgxLCA1Njk4NSwgMCwgNTY5ODksIDU2OTkzLCA1Njk5NywgCi0gICAgNTcwMDEsIDU3MDA1LCA1NzAwOSwgNTcwMTMsIDAsIDU3MDE3LCA1NzAyMSwgNTcwMjUsIDU3MDI5LCA1NzAzMywgNTcwMzcsIAotICAgIDU3MDQxLCAwLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgMCwgNTcwNzMsIAotICAgIDU3MDc3LCA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIDAsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCAKLSAgICA1NzExNywgNTcxMjEsIDU3MTI1LCAwLCA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgCi0gICAgMCwgNTcxNTcsIDU3MTYxLCA1NzE2NSwgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDAsIDU3MTg1LCA1NzE5MCwgCi0gICAgNTcxOTUsIDU3MjAwLCA1NzIwNSwgNTcyMTAsIDU3MjE1LCA1NzIxOSwgNTcyMjQsIDU3MjI5LCA1NzIzNCwgNTcyMzgsIAotICAgIDU3MjQzLCA1NzI0OCwgNTcyNTMsIDU3MjU4LCA1NzI2MiwgNTcyNjcsIDU3MjcyLCA1NzI3NywgNTcyODIsIDU3Mjg3LCAKLSAgICA1NzI5MiwgNTcyOTYsIDU3MzAxLCA1NzMwNiwgNTczMTMsIDU3MzE4LCA1NzMyMywgNTczMjksIDU3MzM2LCA1NzM0MywgCi0gICAgNTczNTIsIDU3MzU5LCA1NzM2OCwgNTczNzIsIDU3Mzc2LCA1NzM4MiwgNTczODgsIDU3Mzk0LCA1NzQwMiwgNTc0MDgsIAotICAgIDU3NDEyLCA1NzQxNiwgNTc0MjAsIDU3NDI2LCA1NzQzMiwgNTc0MzYsIDU3NDM4LCA1NzQ0MiwgNTc0NDgsIDU3NDUwLCAKLSAgICA1NzQ1NCwgNTc0NTgsIDU3NDYyLCA1NzQ2OCwgNTc0NzMsIDU3NDc3LCA1NzQ4MSwgNTc0ODYsIDU3NDkyLCA1NzQ5NywgCi0gICAgNTc1MDIsIDU3NTA3LCA1NzUxMiwgNTc1MTksIDU3NTI2LCA1NzUzMSwgNTc1MzYsIDU3NTQxLCA1NzU0NiwgNTc1NTEsIAotICAgIDU3NTU2LCA1NzU2MCwgNTc1NjQsIDU3NTcxLCA1NzU3OCwgNTc1ODQsIDU3NTg4LCA1NzU5MywgNTc1OTUsIDU3NTk5LCAKLSAgICA1NzYwNywgNTc2MTEsIDU3NjE1LCA1NzYxOSwgNTc2MjMsIDU3NjI5LCA1NzYzNSwgNTc2MzksIDU3NjQ1LCA1NzY0OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ4NzUsIDU0ODgwLCA1NDg4NSwgCisgICAgNTQ4OTAsIDU0ODk1LCA1NDkwMCwgNTQ5MDUsIDU0OTEwLCA1NDkxNSwgNTQ5MjAsIDU0OTI1LCA1NDkzMSwgNTQ5MzUsIAorICAgIDU0OTQwLCA1NDk0NSwgNTQ5NTAsIDU0OTU1LCA1NDk2MCwgNTQ5NjUsIDU0OTcwLCA1NDk3NSwgNTQ5ODAsIDU0OTg1LCAKKyAgICA1NDk5MCwgNTQ5OTUsIDU1MDAwLCA1NTAwNSwgNTUwMTAsIDU1MDE1LCA1NTAyMCwgNTUwMjUsIDU1MDMwLCA1NTAzNSwgCisgICAgNTUwNDAsIDU1MDQ1LCA1NTA1MSwgNTUwNTYsIDU1MDYyLCA1NTA3MSwgNTUwNzYsIDU1MDg0LCA1NTA5MSwgNTUxMDAsIAorICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIxLCAwLCA1NTEyOCwgNTUxMzMsIDU1MTM4LCA1NTE0MywgNTUxNDgsIDU1MTUzLCAKKyAgICA1NTE1OCwgNTUxNjMsIDU1MTY4LCA1NTE3MywgNTUxNzgsIDU1MTg0LCA1NTE4OCwgNTUxOTMsIDU1MTk4LCA1NTIwMywgCisgICAgNTUyMDgsIDU1MjEzLCA1NTIxOCwgNTUyMjMsIDU1MjI4LCA1NTIzMywgNTUyMzgsIDU1MjQzLCA1NTI0OCwgNTUyNTMsIAorICAgIDU1MjU4LCA1NTI2MywgNTUyNjgsIDU1MjczLCA1NTI3OCwgNTUyODMsIDU1Mjg4LCA1NTI5MywgNTUyOTgsIDU1MzA0LCAKKyAgICA1NTMwOSwgNTUzMTUsIDU1MzI0LCA1NTMyOSwgNTUzMzcsIDU1MzQ0LCA1NTM1MywgNTUzNTgsIDU1MzYzLCA1NTM2OCwgCisgICAgNTUzNzQsIDAsIDU1MzgxLCA1NTM4OSwgNTUzOTcsIDU1NDA2LCA1NTQxMywgNTU0MjEsIDU1NDI3LCA1NTQzNiwgNTU0NDQsIAorICAgIDU1NDUyLCA1NTQ2MCwgNTU0NjgsIDU1NDc2LCA1NTQ4NCwgNTU0ODksIDU1NDk2LCA1NTUwMiwgNTU1MDksIDU1NTE3LCAKKyAgICA1NTUyNCwgNTU1MzEsIDU1NTM5LCA1NTU0NSwgNTU1NTEsIDU1NTU4LCA1NTU2NSwgNTU1NzUsIDU1NTg1LCA1NTU5MiwgCisgICAgNTU1OTksIDU1NjA0LCA1NTYxNCwgNTU2MjQsIDU1NjI5LCA1NTYzNCwgNTU2MzksIDU1NjQ0LCA1NTY0OSwgNTU2NTQsIAorICAgIDU1NjU5LCA1NTY2NCwgNTU2NjksIDU1Njc0LCA1NTY3OSwgNTU2ODQsIDU1Njg5LCA1NTY5NCwgNTU2OTksIDU1NzA0LCAKKyAgICA1NTcwOSwgNTU3MTQsIDU1NzE5LCA1NTcyNCwgNTU3MjksIDU1NzM0LCA1NTczOSwgNTU3NDQsIDU1NzQ5LCA1NTc1NCwgCisgICAgNTU3NTksIDU1NzY0LCA1NTc2OSwgNTU3NzQsIDU1Nzc4LCA1NTc4MiwgNTU3ODcsIDU1NzkyLCA1NTc5NywgNTU4MDIsIAorICAgIDU1ODA3LCA1NTgxMiwgNTU4MTcsIDU1ODIyLCA1NTgyNywgNTU4MzIsIDU1ODM3LCA1NTg0MiwgNTU4NDcsIDU1ODUyLCAKKyAgICA1NTg1NywgNTU4NjIsIDU1ODY3LCA1NTg3MiwgNTU4NzksIDU1ODg2LCA1NTg5MywgNTU5MDAsIDU1OTA3LCA1NTkxNCwgCisgICAgNTU5MjEsIDU1OTI4LCA1NTkzNSwgNTU5NDIsIDU1OTQ5LCA1NTk1NiwgNTU5NjMsIDU1OTcwLCA1NTk3NSwgNTU5ODAsIAorICAgIDU1OTg3LCA1NTk5NCwgNTYwMDEsIDU2MDA4LCA1NjAxNSwgNTYwMjIsIDU2MDI5LCA1NjAzNiwgNTYwNDMsIDU2MDUwLCAKKyAgICA1NjA1NywgNTYwNjQsIDU2MDcwLCA1NjA3NiwgNTYwODIsIDU2MDg4LCA1NjA5NSwgNTYxMDIsIDU2MTA5LCA1NjExNiwgCisgICAgNTYxMjMsIDU2MTMwLCA1NjEzNywgNTYxNDQsIDU2MTUxLCA1NjE1OCwgNTYxNjYsIDU2MTc0LCA1NjE4MiwgNTYxOTAsIAorICAgIDU2MTk4LCA1NjIwNiwgNTYyMTQsIDU2MjIyLCA1NjIyNiwgNTYyMzIsIDU2MjM4LCA1NjI0MiwgNTYyNDgsIDU2MjU0LCAKKyAgICA1NjI2MCwgNTYyNjcsIDU2Mjc0LCA1NjI4MSwgNTYyODgsIDU2MjkzLCA1NjI5OSwgNTYzMDUsIDU2MzEyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NjMxOSwgNTYzMjcsIDU2MzM2LCA1NjM0NSwgNTYzNTMsIDU2MzU5LCA1NjM2NCwgNTYzNjksIDU2Mzc0LCAKKyAgICA1NjM3OSwgNTYzODQsIDU2Mzg5LCA1NjM5NCwgNTYzOTksIDU2NDA0LCA1NjQwOSwgNTY0MTQsIDU2NDE5LCA1NjQyNCwgCisgICAgNTY0MjksIDU2NDM0LCA1NjQzOSwgNTY0NDQsIDU2NDQ5LCA1NjQ1NCwgNTY0NTksIDU2NDY0LCA1NjQ2OSwgNTY0NzQsIAorICAgIDU2NDc5LCA1NjQ4NCwgNTY0ODksIDU2NDk0LCA1NjQ5OSwgNTY1MDQsIDU2NTA5LCA1NjUxNCwgNTY1MTksIDU2NTI0LCAKKyAgICA1NjUyOSwgNTY1MzQsIDU2NTM5LCA1NjU0NCwgNTY1NDksIDU2NTU0LCAwLCA1NjU1OSwgMCwgMCwgMCwgMCwgMCwgNTY1NjQsIAorICAgIDAsIDAsIDU2NTY5LCA1NjU3MywgNTY1NzgsIDU2NTgzLCA1NjU4OCwgNTY1OTMsIDU2NjAyLCA1NjYwNywgNTY2MTIsIAorICAgIDU2NjE3LCA1NjYyMiwgNTY2MjcsIDU2NjMyLCA1NjYzNywgNTY2NDIsIDU2NjQ5LCA1NjY1NCwgNTY2NTksIDU2NjY4LCAKKyAgICA1NjY3NSwgNTY2ODAsIDU2Njg1LCA1NjY5MCwgNTY2OTcsIDU2NzAyLCA1NjcwOSwgNTY3MTQsIDU2NzE5LCA1NjcyNiwgCisgICAgNTY3MzMsIDU2NzM4LCA1Njc0MywgNTY3NDgsIDU2NzU1LCA1Njc2MiwgNTY3NjcsIDU2NzcyLCA1Njc3NywgNTY3ODIsIAorICAgIDU2Nzg3LCA1Njc5NCwgNTY4MDEsIDU2ODA2LCA1NjgxMSwgNTY4MTYsIDU2ODIxLCA1NjgyNiwgNTY4MzEsIDU2ODM2LCAKKyAgICA1Njg0MSwgNTY4NDYsIDU2ODUxLCA1Njg1NiwgNTY4NjMsIDU2ODY4LCA1Njg3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTY4NzgsIDU2ODg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njg5MCwgNTY4OTUsIAorICAgIDU2ODk5LCA1NjkwMywgNTY5MDcsIDU2OTExLCA1NjkxNSwgNTY5MTksIDU2OTIzLCA1NjkyNywgNTY5MzEsIDU2OTM1LCAKKyAgICA1Njk0MSwgNTY5NDUsIDU2OTQ5LCA1Njk1MywgNTY5NTcsIDU2OTYxLCA1Njk2NSwgNTY5NjksIDU2OTczLCA1Njk3NywgCisgICAgNTY5ODEsIDU2OTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njk4OSwgNTY5OTMsIDU2OTk3LCA1NzAwMSwgCisgICAgNTcwMDUsIDU3MDA5LCA1NzAxMywgMCwgNTcwMTcsIDU3MDIxLCA1NzAyNSwgNTcwMjksIDU3MDMzLCA1NzAzNywgNTcwNDEsIAorICAgIDAsIDU3MDQ1LCA1NzA0OSwgNTcwNTMsIDU3MDU3LCA1NzA2MSwgNTcwNjUsIDU3MDY5LCAwLCA1NzA3MywgNTcwNzcsIAorICAgIDU3MDgxLCA1NzA4NSwgNTcwODksIDU3MDkzLCA1NzA5NywgMCwgNTcxMDEsIDU3MTA1LCA1NzEwOSwgNTcxMTMsIDU3MTE3LCAKKyAgICA1NzEyMSwgNTcxMjUsIDAsIDU3MTI5LCA1NzEzMywgNTcxMzcsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDU3MTUzLCAwLCAKKyAgICA1NzE1NywgNTcxNjEsIDU3MTY1LCA1NzE2OSwgNTcxNzMsIDU3MTc3LCA1NzE4MSwgMCwgNTcxODUsIDU3MTg5LCA1NzE5MywgCisgICAgNTcxOTcsIDU3MjAxLCA1NzIwNSwgNTcyMDksIDAsIDU3MjEzLCA1NzIxOCwgNTcyMjMsIDU3MjI4LCA1NzIzMywgNTcyMzgsIAorICAgIDU3MjQzLCA1NzI0NywgNTcyNTIsIDU3MjU3LCA1NzI2MiwgNTcyNjYsIDU3MjcxLCA1NzI3NiwgNTcyODEsIDU3Mjg2LCAKKyAgICA1NzI5MCwgNTcyOTUsIDU3MzAwLCA1NzMwNSwgNTczMTAsIDU3MzE1LCA1NzMyMCwgNTczMjQsIDU3MzI5LCA1NzMzNCwgCisgICAgNTczNDEsIDU3MzQ2LCA1NzM1MSwgNTczNTcsIDU3MzY0LCA1NzM3MSwgNTczODAsIDU3Mzg3LCA1NzM5NiwgNTc0MDAsIAorICAgIDU3NDA0LCA1NzQxMCwgNTc0MTYsIDU3NDIyLCA1NzQzMCwgNTc0MzYsIDU3NDQwLCA1NzQ0NCwgNTc0NDgsIDU3NDU0LCAKKyAgICA1NzQ2MCwgNTc0NjQsIDU3NDY2LCA1NzQ3MCwgNTc0NzYsIDU3NDc4LCA1NzQ4MiwgNTc0ODYsIDU3NDkwLCA1NzQ5NiwgCisgICAgNTc1MDEsIDU3NTA1LCA1NzUwOSwgNTc1MTQsIDU3NTIwLCA1NzUyNSwgNTc1MzAsIDU3NTM1LCA1NzU0MCwgNTc1NDcsIAorICAgIDU3NTU0LCA1NzU1OSwgNTc1NjQsIDU3NTY5LCA1NzU3NCwgNTc1NzksIDU3NTg0LCA1NzU4OCwgNTc1OTIsIDU3NTk5LCAKKyAgICA1NzYwNiwgNTc2MTIsIDU3NjE2LCA1NzYyMSwgNTc2MjMsIDU3NjI3LCA1NzYzNSwgNTc2MzksIDU3NjQzLCA1NzY0NywgCisgICAgNTc2NTEsIDU3NjU3LCA1NzY2MywgNTc2NjcsIDU3NjczLCA1NzY3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc2NTMsIDU3NjU3LCAKLSAgICA1NzY2MSwgNTc2NjYsIDU3NjcxLCA1NzY3NiwgNTc2ODAsIDU3Njg0LCA1NzY4OCwgNTc2OTMsIDU3Njk4LCA1NzcwMiwgCi0gICAgNTc3MDYsIDU3NzEwLCA1NzcxNCwgNTc3MTksIDU3NzI0LCA1NzcyOSwgNTc3MzQsIDU3NzM4LCA1Nzc0MiwgNTc3NDcsIAotICAgIDU3NzUyLCA1Nzc1NywgNTc3NjIsIDU3NzY2LCAwLCA1Nzc3MCwgNTc3NzQsIDU3Nzc4LCA1Nzc4MiwgNTc3ODYsIDU3NzkwLCAKLSAgICA1Nzc5NCwgNTc3OTksIDU3ODA0LCA1NzgwOCwgNTc4MTMsIDU3ODE4LCA1NzgyNywgNTc4MzEsIDU3ODM1LCA1NzgzOSwgCi0gICAgNTc4NDYsIDU3ODUwLCA1Nzg1NSwgNTc4NjAsIDU3ODY0LCA1Nzg2OCwgNTc4NzQsIDU3ODc5LCA1Nzg4NCwgNTc4ODksIAotICAgIDU3ODk0LCA1Nzg5OCwgNTc5MDIsIDU3OTA2LCA1NzkxMCwgNTc5MTQsIDU3OTE5LCA1NzkyNCwgNTc5MjgsIDU3OTMyLCAKLSAgICA1NzkzNywgNTc5NDIsIDU3OTQ3LCA1Nzk1MSwgNTc5NTUsIDU3OTYwLCA1Nzk2NSwgNTc5NzEsIDU3OTc3LCA1Nzk4MSwgCi0gICAgNTc5ODcsIDU3OTkzLCA1Nzk5NywgNTgwMDMsIDU4MDA5LCA1ODAxNCwgNTgwMTksIDU4MDIzLCA1ODAyOSwgNTgwMzMsIAotICAgIDU4MDM3LCA1ODA0MywgNTgwNDksIDU4MDU0LCA1ODA1OSwgNTgwNjMsIDU4MDY3LCA1ODA3NSwgNTgwODEsIDU4MDg3LCAKLSAgICA1ODA5MywgNTgwOTgsIDU4MTAzLCA1ODEwOCwgNTgxMTQsIDU4MTE4LCA1ODEyNCwgNTgxMjgsIDU4MTMyLCA1ODEzOCwgCi0gICAgNTgxNDQsIDU4MTUwLCA1ODE1NiwgNTgxNjIsIDU4MTY4LCA1ODE3NCwgNTgxODAsIDU4MTg2LCA1ODE5MiwgNTgxOTgsIAotICAgIDU4MjA0LCA1ODIwOCwgNTgyMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MjIwLCA1ODIyMywgCi0gICAgNTgyMjcsIDU4MjMxLCA1ODIzNSwgNTgyMzksIDU4MjQyLCA1ODI0NSwgNTgyNDksIDU4MjUzLCA1ODI1NywgNTgyNjEsIAotICAgIDU4MjY0LCA1ODI2OSwgNTgyNzMsIDU4Mjc3LCA1ODI4MSwgNTgyODYsIDU4MjkwLCA1ODI5NCwgNTgyOTgsIDU4MzAyLCAKLSAgICA1ODMwOCwgNTgzMTQsIDU4MzE4LCA1ODMyMiwgNTgzMjYsIDU4MzMwLCA1ODMzNCwgNTgzMzgsIDU4MzQyLCA1ODM0NiwgCi0gICAgNTgzNTAsIDU4MzU0LCA1ODM1OCwgNTgzNjQsIDU4MzY4LCA1ODM3MiwgNTgzNzYsIDU4MzgwLCA1ODM4NCwgNTgzODgsIAotICAgIDU4MzkyLCA1ODM5NiwgNTg0MDAsIDU4NDA0LCA1ODQwOCwgNTg0MTIsIDU4NDE2LCA1ODQyMCwgNTg0MjQsIDU4NDI4LCAKLSAgICA1ODQzNCwgNTg0NDAsIDU4NDQ1LCA1ODQ1MCwgNTg0NTQsIDU4NDU4LCA1ODQ2MiwgNTg0NjYsIDU4NDcwLCA1ODQ3NCwgCi0gICAgNTg0NzgsIDU4NDgyLCA1ODQ4NiwgNTg0OTAsIDU4NDk0LCA1ODQ5OCwgNTg1MDIsIDU4NTA2LCA1ODUxMCwgNTg1MTQsIAotICAgIDU4NTE4LCA1ODUyMiwgNTg1MjYsIDU4NTMwLCA1ODUzNCwgNTg1MzgsIDU4NTQyLCA1ODU0NiwgNTg1NTIsIDU4NTU2LCAKLSAgICA1ODU2MCwgNTg1NjQsIDU4NTY4LCA1ODU3MiwgNTg1NzYsIDU4NTgwLCA1ODU4NCwgNTg1ODksIDU4NTk2LCA1ODYwMCwgCi0gICAgNTg2MDQsIDU4NjA4LCA1ODYxMiwgNTg2MTYsIDU4NjIwLCA1ODYyNCwgNTg2MjgsIDU4NjMyLCA1ODYzNiwgNTg2NDAsIAotICAgIDU4NjQ0LCA1ODY1MSwgNTg2NTUsIDU4NjYxLCA1ODY2NSwgNTg2NjksIDU4NjczLCA1ODY3NywgNTg2ODEsIDU4Njg0LCAKLSAgICA1ODY4OCwgNTg2OTIsIDU4Njk2LCA1ODcwMCwgNTg3MDQsIDU4NzA4LCA1ODcxMiwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgCi0gICAgNTg3MjgsIDU4NzMyLCA1ODczNiwgNTg3NDAsIDU4NzQ0LCA1ODc0OCwgNTg3NTIsIDU4NzU2LCA1ODc2MCwgNTg3NjQsIAotICAgIDU4NzY4LCA1ODc3MiwgNTg3NzYsIDU4NzgwLCA1ODc4NCwgNTg3ODgsIDU4NzkyLCA1ODc5NiwgNTg4MDAsIDU4ODA0LCAKLSAgICA1ODgwOCwgNTg4MTIsIDU4ODE4LCA1ODgyMiwgNTg4MjYsIDU4ODMwLCA1ODgzNCwgNTg4MzgsIDU4ODQyLCA1ODg0NiwgCi0gICAgNTg4NTAsIDU4ODU0LCA1ODg1OCwgNTg4NjIsIDU4ODY2LCA1ODg3MCwgNTg4NzQsIDU4ODc4LCA1ODg4MiwgNTg4ODYsIAotICAgIDU4ODkwLCA1ODg5NCwgNTg4OTgsIDU4OTAyLCA1ODkwNiwgNTg5MTAsIDU4OTE0LCA1ODkxOCwgNTg5MjIsIDU4OTI2LCAKLSAgICA1ODkzNCwgNTg5MzgsIDU4OTQyLCA1ODk0NiwgNTg5NTAsIDU4OTU0LCA1ODk2MCwgNTg5NjQsIDU4OTY4LCA1ODk3MiwgCi0gICAgNTg5NzYsIDU4OTgwLCA1ODk4NCwgNTg5ODgsIDU4OTkyLCA1ODk5NiwgNTkwMDAsIDU5MDA0LCA1OTAwOCwgNTkwMTIsIAotICAgIDU5MDE4LCA1OTAyMiwgNTkwMjYsIDU5MDMwLCA1OTAzNCwgNTkwMzgsIDU5MDQyLCA1OTA0NiwgNTkwNTAsIDU5MDU0LCAKLSAgICA1OTA1OCwgNTkwNjIsIDU5MDY2LCA1OTA3MCwgNTkwNzQsIDU5MDc4LCA1OTA4MiwgNTkwODYsIDU5MDkwLCA1OTA5NCwgCi0gICAgNTkwOTgsIDU5MTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1OTEwNiwgNTkxMTUsIDU5MTIzLCA1OTEzNSwgNTkxNDYsIDU5MTU0LCA1OTE2MywgNTkxNzIsIAotICAgIDU5MTgyLCA1OTE5NCwgNTkyMDYsIDU5MjE4LCAwLCAwLCAwLCAwLCA1OTIyNCwgNTkyMjcsIDU5MjMwLCA1OTIzNSwgCi0gICAgNTkyMzgsIDU5MjQ1LCA1OTI0OSwgNTkyNTMsIDU5MjU3LCA1OTI2MSwgNTkyNjUsIDU5MjcwLCA1OTI3NSwgNTkyNzksIAotICAgIDU5MjgzLCA1OTI4OCwgNTkyOTMsIDU5Mjk4LCA1OTMwMywgNTkzMDYsIDU5MzA5LCA1OTMxNSwgNTkzMjEsIDU5MzI2LCAKLSAgICA1OTMzMSwgNTkzMzgsIDU5MzQ1LCA1OTM0OSwgNTkzNTMsIDU5MzU3LCA1OTM2NSwgNTkzNzEsIDU5Mzc4LCA1OTM4MywgCi0gICAgNTkzODgsIDU5MzkzLCA1OTM5OCwgNTk0MDMsIDU5NDA4LCA1OTQxMywgNTk0MTgsIDU5NDIzLCA1OTQyOCwgNTk0MzMsIAotICAgIDU5NDM4LCA1OTQ0MywgNTk0NDgsIDU5NDU0LCA1OTQ1OSwgNTk0NjMsIDU5NDY5LCA1OTQ4MCwgNTk0OTAsIDU5NTA1LCAKLSAgICA1OTUxNSwgNTk1MTksIDU5NTI5LCA1OTUzNSwgNTk1NDEsIDU5NTQ3LCA1OTU1MiwgNTk1NTUsIDU5NTYwLCA1OTU2NCwgMCwgCi0gICAgNTk1NzAsIDU5NTc0LCA1OTU3NywgNTk1ODEsIDU5NTg0LCA1OTU4OCwgNTk1OTEsIDU5NTk1LCA1OTU5OCwgNTk2MDIsIAotICAgIDU5NjA1LCA1OTYwOCwgNTk2MTIsIDU5NjE2LCA1OTYyMCwgNTk2MjQsIDU5NjI4LCA1OTYzMiwgNTk2MzYsIDU5NjQwLCAKLSAgICA1OTY0NCwgNTk2NDcsIDU5NjUxLCA1OTY1NSwgNTk2NTksIDU5NjYzLCA1OTY2NywgNTk2NzEsIDU5Njc1LCA1OTY3OSwgCi0gICAgNTk2ODMsIDU5Njg3LCA1OTY5MSwgNTk2OTUsIDU5Njk5LCA1OTcwNCwgNTk3MDgsIDU5NzEyLCA1OTcxNiwgNTk3MjAsIAotICAgIDU5NzIzLCA1OTcyNywgNTk3MzAsIDU5NzM0LCA1OTczOCwgNTk3NDIsIDU5NzQ2LCA1OTc0OSwgNTk3NTMsIDU5NzU2LCAKLSAgICA1OTc2MCwgNTk3NjQsIDU5NzY4LCA1OTc3MiwgNTk3NzYsIDU5NzgwLCA1OTc4NCwgNTk3ODgsIDU5NzkyLCA1OTc5NiwgCi0gICAgNTk4MDAsIDU5ODA0LCA1OTgwNywgNTk4MTEsIDU5ODE1LCA1OTgxOSwgNTk4MjMsIDU5ODI3LCA1OTgzMCwgNTk4MzUsIAotICAgIDU5ODM5LCA1OTg0NCwgNTk4NDgsIDU5ODUxLCA1OTg1NSwgNTk4NTksIDU5ODYzLCA1OTg2NywgNTk4NzIsIDU5ODc2LCAKLSAgICA1OTg4MCwgNTk4ODQsIDU5ODg4LCA1OTg5MiwgNTk4OTYsIDU5OTAwLCAwLCAwLCA1OTkwNSwgNTk5MTMsIDU5OTIxLCAKLSAgICA1OTkyOCwgNTk5MzUsIDU5OTM5LCA1OTk0NSwgNTk5NTAsIDU5OTU1LCA1OTk1OSwgNTk5NjIsIDU5OTY2LCA1OTk2OSwgCi0gICAgNTk5NzMsIDU5OTc2LCA1OTk4MCwgNTk5ODMsIDU5OTg3LCA1OTk5MCwgNTk5OTMsIDU5OTk3LCA2MDAwMSwgNjAwMDUsIAotICAgIDYwMDA5LCA2MDAxMywgNjAwMTcsIDYwMDIxLCA2MDAyNSwgNjAwMjksIDYwMDMyLCA2MDAzNiwgNjAwNDAsIDYwMDQ0LCAKLSAgICA2MDA0OCwgNjAwNTIsIDYwMDU2LCA2MDA2MCwgNjAwNjQsIDYwMDY4LCA2MDA3MiwgNjAwNzYsIDYwMDgwLCA2MDA4NCwgCi0gICAgNjAwODksIDYwMDkzLCA2MDA5NywgNjAxMDEsIDYwMTA1LCA2MDEwOCwgNjAxMTIsIDYwMTE1LCA2MDExOSwgNjAxMjMsIAotICAgIDYwMTI3LCA2MDEzMSwgNjAxMzQsIDYwMTM4LCA2MDE0MSwgNjAxNDUsIDYwMTQ5LCA2MDE1MywgNjAxNTcsIDYwMTYxLCAKLSAgICA2MDE2NSwgNjAxNjksIDYwMTczLCA2MDE3NywgNjAxODEsIDYwMTg1LCA2MDE4OSwgNjAxOTIsIDYwMTk2LCA2MDIwMCwgCi0gICAgNjAyMDQsIDYwMjA4LCA2MDIxMiwgNjAyMTUsIDYwMjIwLCA2MDIyNCwgNjAyMjksIDYwMjMzLCA2MDIzNiwgNjAyNDAsIAotICAgIDYwMjQ0LCA2MDI0OCwgNjAyNTIsIDYwMjU3LCA2MDI2MSwgNjAyNjUsIDYwMjY5LCA2MDI3MywgNjAyNzcsIDYwMjgxLCAKLSAgICA2MDI4NSwgNjAyOTAsIDYwMjk0LCA2MDI5OCwgNjAzMDIsIDYwMzA2LCA2MDMxMSwgNjAzMTgsIDYwMzIyLCA2MDMyOCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNjAzMzMsIDYwMzM4LCA2MDM0MywgNjAzNDcsIDYwMzUyLCA2MDM1NywgNjAzNjIsIDYwMzY3LCAKLSAgICA2MDM3MSwgNjAzNzYsIDYwMzgxLCA2MDM4NiwgNjAzOTEsIDYwMzk2LCA2MDQwMSwgNjA0MDYsIDYwNDExLCA2MDQxNiwgCi0gICAgNjA0MjAsIDYwNDI1LCA2MDQzMCwgNjA0MzUsIDYwNDM5LCA2MDQ0MywgNjA0NDcsIDYwNDUyLCA2MDQ1NywgNjA0NjIsIAotICAgIDYwNDY3LCA2MDQ3MiwgNjA0NzcsIDYwNDgyLCA2MDQ4NywgNjA0OTIsIDYwNDk3LCA2MDUwMSwgNjA1MDUsIDYwNTEwLCAKLSAgICA2MDUxNSwgNjA1MjAsIDYwNTI1LCAwLCAwLCAwLCA2MDUzMCwgNjA1MzQsIDYwNTM4LCA2MDU0MiwgNjA1NDYsIDYwNTUwLCAKLSAgICA2MDU1NCwgNjA1NTgsIDYwNTYyLCA2MDU2NiwgNjA1NzAsIDYwNTc0LCA2MDU3OCwgNjA1ODIsIDYwNTg2LCA2MDU5MCwgCi0gICAgNjA1OTQsIDYwNTk4LCA2MDYwMiwgNjA2MDYsIDYwNjEwLCA2MDYxNCwgNjA2MTgsIDYwNjIyLCA2MDYyNiwgNjA2MzAsIAotICAgIDYwNjM0LCA2MDYzOCwgNjA2NDIsIDYwNjQ2LCA2MDY1MCwgNjA2NTMsIDYwNjU3LCA2MDY2MCwgNjA2NjQsIDYwNjY4LCAKLSAgICA2MDY3MSwgNjA2NzUsIDYwNjc5LCA2MDY4MiwgNjA2ODYsIDYwNjkwLCA2MDY5NCwgNjA2OTgsIDYwNzAxLCA2MDcwNSwgCi0gICAgNjA3MDksIDYwNzEzLCA2MDcxNywgNjA3MjEsIDYwNzI1LCA2MDcyOCwgNjA3MzEsIDYwNzM1LCA2MDczOSwgNjA3NDMsIAotICAgIDYwNzQ3LCA2MDc1MSwgNjA3NTUsIDYwNzU5LCA2MDc2MywgNjA3NjcsIDYwNzcxLCA2MDc3NSwgNjA3NzksIDYwNzgzLCAKLSAgICA2MDc4NywgNjA3OTEsIDYwNzk1LCA2MDc5OSwgNjA4MDMsIDYwODA3LCA2MDgxMSwgNjA4MTUsIDYwODE5LCA2MDgyMywgCi0gICAgNjA4MjcsIDYwODMxLCA2MDgzNSwgNjA4MzksIDYwODQzLCA2MDg0NywgNjA4NTEsIDYwODU1LCA2MDg1OSwgNjA4NjMsIAotICAgIDYwODY3LCA2MDg3MSwgNjA4NzUsIDYwODc5LCA2MDg4MywgNjA4ODcsIDYwODkxLCA2MDg5NSwgMCwgNjA4OTksIDYwOTA1LCAKLSAgICA2MDkxMSwgNjA5MTYsIDYwOTIxLCA2MDkyNiwgNjA5MzIsIDYwOTM4LCA2MDk0NCwgNjA5NTAsIDYwOTU2LCA2MDk2MiwgCi0gICAgNjA5NjgsIDYwOTc0LCA2MDk4MCwgNjA5ODYsIDYwOTkyLCA2MDk5NywgNjEwMDIsIDYxMDA3LCA2MTAxMiwgNjEwMTcsIAotICAgIDYxMDIyLCA2MTAyNywgNjEwMzIsIDYxMDM3LCA2MTA0MiwgNjEwNDcsIDYxMDUyLCA2MTA1NywgNjEwNjIsIDYxMDY3LCAKLSAgICA2MTA3MiwgNjEwNzcsIDYxMDgyLCA2MTA4NywgNjEwOTIsIDYxMDk4LCA2MTEwNCwgNjExMTAsIDYxMTE2LCA2MTEyMSwgCi0gICAgNjExMjYsIDAsIDAsIDAsIDAsIDAsIDYxMTMxLCA2MTEzNiwgNjExNDEsIDYxMTQ2LCA2MTE1MSwgNjExNTYsIDYxMTYxLCAKLSAgICA2MTE2NiwgNjExNzEsIDYxMTc2LCA2MTE4MSwgNjExODYsIDYxMTkxLCA2MTE5NiwgNjEyMDEsIDYxMjA2LCA2MTIxMSwgCi0gICAgNjEyMTYsIDYxMjIxLCA2MTIyNiwgNjEyMzEsIDYxMjM2LCA2MTI0MSwgNjEyNDYsIDYxMjUxLCA2MTI1NiwgNjEyNjEsIAotICAgIDYxMjY2LCA2MTI3MSwgNjEyNzYsIDYxMjgxLCA2MTI4NiwgNjEyOTEsIDYxMjk2LCA2MTMwMSwgNjEzMDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMzExLCA2MTMxNiwgNjEzMjEsIDYxMzI2LCA2MTMzMCwgNjEzMzUsIAotICAgIDYxMzM5LCA2MTM0NCwgNjEzNDksIDYxMzU0LCA2MTM1OSwgNjEzNjQsIDYxMzY4LCA2MTM3MywgNjEzNzgsIDYxMzgzLCAKLSAgICA2MTM4OCwgNjEzOTIsIDYxMzk2LCA2MTQwMCwgNjE0MDQsIDYxNDA4LCA2MTQxMiwgNjE0MTYsIDYxNDIwLCA2MTQyNCwgCi0gICAgNjE0MjgsIDYxNDMyLCA2MTQzNiwgNjE0NDAsIDYxNDQ0LCA2MTQ0OSwgNjE0NTQsIDYxNDU5LCA2MTQ2NCwgNjE0NjksIAotICAgIDYxNDc0LCA2MTQ3OSwgNjE0ODQsIDYxNDg5LCA2MTQ5NCwgNjE0OTksIDYxNTA0LCA2MTUwOSwgNjE1MTQsIDYxNTE5LCAKLSAgICA2MTUyNSwgMCwgNjE1MzIsIDYxNTM1LCA2MTUzOCwgNjE1NDEsIDYxNTQ0LCA2MTU0NywgNjE1NTAsIDYxNTUzLCA2MTU1NiwgCi0gICAgNjE1NTksIDYxNTYzLCA2MTU2NywgNjE1NzEsIDYxNTc1LCA2MTU3OSwgNjE1ODMsIDYxNTg3LCA2MTU5MSwgNjE1OTUsIAotICAgIDYxNTk5LCA2MTYwMywgNjE2MDcsIDYxNjExLCA2MTYxNSwgNjE2MTksIDYxNjIzLCA2MTYyNywgNjE2MzEsIDYxNjM1LCAKLSAgICA2MTYzOSwgNjE2NDMsIDYxNjQ3LCA2MTY1MSwgNjE2NTUsIDYxNjU5LCA2MTY2MywgNjE2NjcsIDYxNjcxLCA2MTY3NSwgCi0gICAgNjE2NzksIDYxNjgzLCA2MTY5MiwgNjE3MDEsIDYxNzEwLCA2MTcxOSwgNjE3MjgsIDYxNzM3LCA2MTc0NiwgNjE3NTUsIAotICAgIDYxNzU4LCA2MTc2MywgNjE3NjgsIDYxNzczLCA2MTc3OCwgNjE3ODMsIDYxNzg4LCA2MTc5MywgNjE3OTgsIDYxODAzLCAKLSAgICA2MTgwNywgNjE4MTIsIDYxODE3LCA2MTgyMiwgNjE4MjcsIDYxODMyLCA2MTgzNiwgNjE4NDAsIDYxODQ0LCA2MTg0OCwgCi0gICAgNjE4NTIsIDYxODU2LCA2MTg2MCwgNjE4NjQsIDYxODY4LCA2MTg3MiwgNjE4NzYsIDYxODgwLCA2MTg4NCwgNjE4ODgsIAotICAgIDYxODkzLCA2MTg5OCwgNjE5MDMsIDYxOTA4LCA2MTkxMywgNjE5MTgsIDYxOTIzLCA2MTkyOCwgNjE5MzMsIDYxOTM4LCAKLSAgICA2MTk0MywgNjE5NDgsIDYxOTUzLCA2MTk1OCwgNjE5NjQsIDYxOTcwLCA2MTk3NSwgNjE5ODAsIDYxOTgzLCA2MTk4NiwgCi0gICAgNjE5ODksIDYxOTkyLCA2MTk5NSwgNjE5OTgsIDYyMDAxLCA2MjAwNCwgNjIwMDcsIDYyMDExLCA2MjAxNSwgNjIwMTksIAotICAgIDYyMDIzLCA2MjAyNywgNjIwMzEsIDYyMDM1LCA2MjAzOSwgNjIwNDMsIDYyMDQ3LCA2MjA1MSwgNjIwNTUsIDYyMDU5LCAKLSAgICA2MjA2MywgNjIwNjcsIDYyMDcxLCA2MjA3NSwgNjIwNzksIDYyMDgzLCA2MjA4NywgNjIwOTEsIDYyMDk1LCA2MjA5OSwgCi0gICAgNjIxMDMsIDYyMTA3LCA2MjExMSwgNjIxMTUsIDYyMTE5LCA2MjEyMywgNjIxMjcsIDYyMTMxLCA2MjEzNSwgNjIxMzksIAotICAgIDYyMTQzLCA2MjE0NywgNjIxNTEsIDYyMTU1LCA2MjE1OSwgNjIxNjMsIDYyMTY3LCA2MjE3MiwgNjIxNzcsIDYyMTgyLCAKLSAgICA2MjE4NywgNjIxOTEsIDYyMTk2LCA2MjIwMSwgNjIyMDYsIDYyMjExLCA2MjIxNiwgNjIyMjEsIDYyMjI2LCA2MjIzMSwgCi0gICAgNjIyMzYsIDYyMjQwLCA2MjI0NywgNjIyNTQsIDYyMjYxLCA2MjI2OCwgNjIyNzUsIDYyMjgyLCA2MjI4OSwgNjIyOTYsIAotICAgIDYyMzAzLCA2MjMxMCwgNjIzMTcsIDYyMzI0LCA2MjMyNywgNjIzMzAsIDYyMzMzLCA2MjMzOCwgNjIzNDEsIDYyMzQ0LCAKLSAgICA2MjM0NywgNjIzNTAsIDYyMzUzLCA2MjM1NiwgNjIzNjAsIDYyMzY0LCA2MjM2OCwgNjIzNzIsIDYyMzc1LCA2MjM3OSwgCi0gICAgNjIzODMsIDYyMzg3LCA2MjM5MSwgNjIzOTUsIDYyMzk5LCA2MjQwMywgNjI0MDcsIDYyNDEwLCA2MjQxMywgNjI0MTcsIAotICAgIDYyNDIxLCA2MjQyNSwgNjI0MjksIDYyNDMyLCA2MjQzNiwgNjI0NDAsIDYyNDQ0LCA2MjQ0OCwgNjI0NTEsIDYyNDU1LCAKLSAgICA2MjQ1OSwgNjI0NjMsIDYyNDY3LCA2MjQ3MCwgNjI0NzQsIDYyNDc4LCA2MjQ4MSwgNjI0ODUsIDYyNDg5LCA2MjQ5MywgCi0gICAgNjI0OTcsIDYyNTAxLCA2MjUwNSwgNjI1MDksIDAsIDYyNTEzLCA2MjUxNiwgNjI1MTksIDYyNTIyLCA2MjUyNSwgNjI1MjgsIAotICAgIDYyNTMxLCA2MjUzNCwgNjI1MzcsIDYyNTQwLCA2MjU0MywgNjI1NDYsIDYyNTQ5LCA2MjU1MiwgNjI1NTUsIDYyNTU4LCAKLSAgICA2MjU2MSwgNjI1NjQsIDYyNTY3LCA2MjU3MCwgNjI1NzMsIDYyNTc2LCA2MjU3OSwgNjI1ODIsIDYyNTg1LCA2MjU4OCwgCi0gICAgNjI1OTEsIDYyNTk0LCA2MjU5NywgNjI2MDAsIDYyNjAzLCA2MjYwNiwgNjI2MDksIDYyNjEyLCA2MjYxNSwgNjI2MTgsIAotICAgIDYyNjIxLCA2MjYyNCwgNjI2MjcsIDYyNjMwLCA2MjYzMywgNjI2MzYsIDYyNjM5LCA2MjY0MiwgNjI2NDUsIDYyNjQ4LCAKLSAgICA2MjY1MSwgNjI2NTQsIDYyNjU3LCA2MjY2MCwgNjI2NjMsIDYyNjY2LCA2MjY2OSwgNjI2NzIsIDYyNjc1LCA2MjY3OCwgCi0gICAgNjI2ODEsIDYyNjg0LCA2MjY4NywgNjI2OTAsIDYyNjkzLCA2MjY5NiwgNjI2OTksIDYyNzAyLCA2MjcwNSwgNjI3MDgsIAotICAgIDYyNzExLCA2MjcxNCwgNjI3MTcsIDYyNzIwLCA2MjcyMywgNjI3MjYsIDYyNzI5LCA2MjczMiwgNjI3MzUsIDYyNzM4LCAKLSAgICA2Mjc0MSwgNjI3NDQsIDYyNzQ3LCA2Mjc1MCwgNjI3NTMsIDYyNzU2LCA2Mjc1OSwgNjI3NjIsIDYyNzY1LCA2Mjc2OCwgCi0gICAgNjI3NzEsIDYyNzc0LCA2Mjc3NywgNjI3ODYsIDYyNzk0LCA2MjgwMiwgNjI4MTAsIDYyODE4LCA2MjgyNiwgNjI4MzQsIAotICAgIDYyODQyLCA2Mjg1MCwgNjI4NTgsIDYyODY3LCA2Mjg3NiwgNjI4ODUsIDYyODk0LCA2MjkwMywgNjI5MTIsIDYyOTIxLCAKLSAgICA2MjkzMCwgNjI5MzksIDYyOTQ4LCA2Mjk1NywgNjI5NjYsIDYyOTc1LCA2Mjk4NCwgNjI5OTMsIDYyOTk2LCA2Mjk5OSwgCi0gICAgNjMwMDIsIDYzMDA0LCA2MzAwNywgNjMwMTAsIDYzMDEzLCA2MzAxOCwgNjMwMjMsIDYzMDI2LCA2MzAzMywgNjMwNDAsIAotICAgIDYzMDQ3LCA2MzA1NCwgNjMwNTcsIDYzMDYyLCA2MzA2NCwgNjMwNjgsIDYzMDcwLCA2MzA3MiwgNjMwNzUsIDYzMDc4LCAKLSAgICA2MzA4MSwgNjMwODQsIDYzMDg3LCA2MzA5MCwgNjMwOTMsIDYzMDk4LCA2MzEwMywgNjMxMDYsIDYzMTA5LCA2MzExMiwgCi0gICAgNjMxMTUsIDYzMTE4LCA2MzEyMSwgNjMxMjQsIDYzMTI4LCA2MzEzMSwgNjMxMzQsIDYzMTM3LCA2MzE0MCwgNjMxNDMsIAotICAgIDYzMTQ3LCA2MzE1MCwgNjMxNTMsIDYzMTU2LCA2MzE2MSwgNjMxNjYsIDYzMTcxLCA2MzE3NiwgNjMxODEsIDYzMTg2LCAKLSAgICA2MzE5MSwgNjMxOTYsIDYzMjAyLCA2MzIxMCwgNjMyMTIsIDYzMjE1LCA2MzIxOCwgNjMyMjEsIDYzMjI0LCA2MzIzMCwgCi0gICAgNjMyMzgsIDYzMjQxLCA2MzI0NCwgNjMyNDksIDYzMjUyLCA2MzI1NSwgNjMyNTgsIDYzMjYzLCA2MzI2NiwgNjMyNjksIAotICAgIDYzMjc0LCA2MzI3NywgNjMyODAsIDYzMjg1LCA2MzI4OCwgNjMyOTEsIDYzMjk2LCA2MzMwMSwgNjMzMDYsIDYzMzA5LCAKLSAgICA2MzMxMiwgNjMzMTUsIDYzMzE4LCA2MzMyNCwgNjMzMjcsIDYzMzMwLCA2MzMzMywgNjMzMzUsIDYzMzM4LCA2MzM0MSwgCi0gICAgNjMzNDQsIDYzMzQ5LCA2MzM1MiwgNjMzNTUsIDYzMzU4LCA2MzM2MSwgNjMzNjQsIDYzMzY5LCA2MzM3MiwgNjMzNzUsIAotICAgIDYzMzc4LCA2MzM4MSwgNjMzODQsIDYzMzg3LCA2MzM5MCwgNjMzOTMsIDYzMzk2LCA2MzQwMSwgNjM0MDUsIDYzNDEzLCAKLSAgICA2MzQyMSwgNjM0MjksIDYzNDM3LCA2MzQ0NSwgNjM0NTMsIDYzNDYxLCA2MzQ2OSwgNjM0NzcsIDYzNDg2LCA2MzQ5NSwgCi0gICAgNjM1MDQsIDYzNTEzLCA2MzUyMiwgNjM1MzEsIDYzNTQwLCA2MzU0OSwgNjM1NTgsIDYzNTY3LCA2MzU3NiwgNjM1ODUsIAotICAgIDYzNTk0LCA2MzYwMywgNjM2MTIsIDYzNjIxLCA2MzYzMCwgNjM2MzksIDYzNjQ4LCA2MzY1NywgNjM2NjYsIDYzNjc1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzY4MSwgNTc2ODUsIDU3Njg5LCA1NzY5NCwgNTc2OTksIDU3NzA0LCAKKyAgICA1NzcwOCwgNTc3MTIsIDU3NzE2LCA1NzcyMSwgNTc3MjYsIDU3NzMwLCA1NzczNCwgNTc3MzgsIDU3NzQyLCA1Nzc0NywgCisgICAgNTc3NTIsIDU3NzU3LCA1Nzc2MiwgNTc3NjYsIDU3NzcwLCA1Nzc3NSwgNTc3ODAsIDU3Nzg1LCA1Nzc5MCwgNTc3OTQsIDAsIAorICAgIDU3Nzk4LCA1NzgwMiwgNTc4MDYsIDU3ODEwLCA1NzgxNCwgNTc4MTgsIDU3ODIyLCA1NzgyNywgNTc4MzIsIDU3ODM2LCAKKyAgICA1Nzg0MSwgNTc4NDYsIDU3ODU1LCA1Nzg1OSwgNTc4NjMsIDU3ODY3LCA1Nzg3NCwgNTc4NzgsIDU3ODgzLCA1Nzg4OCwgCisgICAgNTc4OTIsIDU3ODk2LCA1NzkwMiwgNTc5MDcsIDU3OTEyLCA1NzkxNywgNTc5MjIsIDU3OTI2LCA1NzkzMCwgNTc5MzQsIAorICAgIDU3OTM4LCA1Nzk0MiwgNTc5NDcsIDU3OTUyLCA1Nzk1NiwgNTc5NjAsIDU3OTY1LCA1Nzk3MCwgNTc5NzUsIDU3OTc5LCAKKyAgICA1Nzk4MywgNTc5ODgsIDU3OTkzLCA1Nzk5OSwgNTgwMDUsIDU4MDA5LCA1ODAxNSwgNTgwMjEsIDU4MDI1LCA1ODAzMSwgCisgICAgNTgwMzcsIDU4MDQyLCA1ODA0NywgNTgwNTEsIDU4MDU3LCA1ODA2MSwgNTgwNjUsIDU4MDcxLCA1ODA3NywgNTgwODIsIAorICAgIDU4MDg3LCA1ODA5MSwgNTgwOTUsIDU4MTAzLCA1ODEwOSwgNTgxMTUsIDU4MTIxLCA1ODEyNiwgNTgxMzEsIDU4MTM2LCAKKyAgICA1ODE0MiwgNTgxNDYsIDU4MTUyLCA1ODE1NiwgNTgxNjAsIDU4MTY2LCA1ODE3MiwgNTgxNzgsIDU4MTg0LCA1ODE5MCwgCisgICAgNTgxOTYsIDU4MjAyLCA1ODIwOCwgNTgyMTQsIDU4MjIwLCA1ODIyNiwgNTgyMzIsIDU4MjM2LCA1ODI0MiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyNDgsIDU4MjUxLCA1ODI1NSwgNTgyNTksIDU4MjYzLCA1ODI2NywgCisgICAgNTgyNzAsIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg1LCA1ODI4OSwgNTgyOTIsIDU4Mjk3LCA1ODMwMSwgNTgzMDUsIAorICAgIDU4MzA5LCA1ODMxNCwgNTgzMTgsIDU4MzIyLCA1ODMyNiwgNTgzMzAsIDU4MzM2LCA1ODM0MiwgNTgzNDYsIDU4MzUwLCAKKyAgICA1ODM1NCwgNTgzNTgsIDU4MzYyLCA1ODM2NiwgNTgzNzAsIDU4Mzc0LCA1ODM3OCwgNTgzODIsIDU4Mzg2LCA1ODM5MiwgCisgICAgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgNTg0MzIsIAorICAgIDU4NDM2LCA1ODQ0MCwgNTg0NDQsIDU4NDQ4LCA1ODQ1MiwgNTg0NTYsIDU4NDYyLCA1ODQ2OCwgNTg0NzMsIDU4NDc4LCAKKyAgICA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCA1ODUxOCwgCisgICAgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUwLCA1ODU1NCwgNTg1NTgsIAorICAgIDU4NTYyLCA1ODU2NiwgNTg1NzAsIDU4NTc0LCA1ODU4MCwgNTg1ODQsIDU4NTg4LCA1ODU5MiwgNTg1OTYsIDU4NjAwLCAKKyAgICA1ODYwNCwgNTg2MDgsIDU4NjEyLCA1ODYxNywgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCA1ODY0NCwgCisgICAgNTg2NDgsIDU4NjUyLCA1ODY1NiwgNTg2NjAsIDU4NjY0LCA1ODY2OCwgNTg2NzIsIDU4Njc5LCA1ODY4MywgNTg2ODksIAorICAgIDU4NjkzLCA1ODY5NywgNTg3MDEsIDU4NzA1LCA1ODcwOSwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIDU4NzI4LCAKKyAgICA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCA1ODc2OCwgCisgICAgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgNTg4MDgsIAorICAgIDU4ODEyLCA1ODgxNiwgNTg4MjAsIDU4ODI0LCA1ODgyOCwgNTg4MzIsIDU4ODM2LCA1ODg0MCwgNTg4NDYsIDU4ODUwLCAKKyAgICA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCA1ODg5MCwgCisgICAgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgNTg5MzAsIAorICAgIDU4OTM0LCA1ODkzOCwgNTg5NDIsIDU4OTQ2LCA1ODk1MCwgNTg5NTQsIDU4OTYyLCA1ODk2NiwgNTg5NzAsIDU4OTc0LCAKKyAgICA1ODk3OCwgNTg5ODIsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCA1OTAxNiwgCisgICAgNTkwMjAsIDU5MDI0LCA1OTAyOCwgNTkwMzIsIDU5MDM2LCA1OTA0MCwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgNTkwNTgsIAorICAgIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIDU5MDk4LCAKKyAgICA1OTEwMiwgNTkxMDYsIDU5MTEwLCA1OTExNCwgNTkxMTgsIDU5MTIyLCA1OTEyNiwgNTkxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5MTM0LCA1OTE0MywgCisgICAgNTkxNTEsIDU5MTYzLCA1OTE3NCwgNTkxODIsIDU5MTkxLCA1OTIwMCwgNTkyMTAsIDU5MjIyLCA1OTIzNCwgNTkyNDYsIDAsIAorICAgIDAsIDAsIDAsIDU5MjUyLCA1OTI1NSwgNTkyNTgsIDU5MjYzLCA1OTI2NiwgNTkyNzMsIDU5Mjc3LCA1OTI4MSwgNTkyODUsIAorICAgIDU5Mjg5LCA1OTI5MywgNTkyOTgsIDU5MzAzLCA1OTMwNywgNTkzMTEsIDU5MzE2LCA1OTMyMSwgNTkzMjYsIDU5MzMxLCAKKyAgICA1OTMzNCwgNTkzMzcsIDU5MzQzLCA1OTM0OSwgNTkzNTQsIDU5MzU5LCA1OTM2NiwgNTkzNzMsIDU5Mzc3LCA1OTM4MSwgCisgICAgNTkzODUsIDU5MzkzLCA1OTM5OSwgNTk0MDYsIDU5NDExLCA1OTQxNiwgNTk0MjEsIDU5NDI2LCA1OTQzMSwgNTk0MzYsIAorICAgIDU5NDQxLCA1OTQ0NiwgNTk0NTEsIDU5NDU2LCA1OTQ2MSwgNTk0NjYsIDU5NDcxLCA1OTQ3NiwgNTk0ODIsIDU5NDg3LCAKKyAgICA1OTQ5MSwgNTk0OTcsIDU5NTA4LCA1OTUxOCwgNTk1MzMsIDU5NTQzLCA1OTU0NywgNTk1NTcsIDU5NTYzLCA1OTU2OSwgCisgICAgNTk1NzUsIDU5NTgwLCA1OTU4MywgNTk1ODgsIDU5NTkyLCAwLCA1OTU5OCwgNTk2MDIsIDU5NjA1LCA1OTYwOSwgNTk2MTIsIAorICAgIDU5NjE2LCA1OTYxOSwgNTk2MjMsIDU5NjI2LCA1OTYzMCwgNTk2MzMsIDU5NjM2LCA1OTY0MCwgNTk2NDQsIDU5NjQ4LCAKKyAgICA1OTY1MiwgNTk2NTYsIDU5NjYwLCA1OTY2NCwgNTk2NjgsIDU5NjcyLCA1OTY3NSwgNTk2NzksIDU5NjgzLCA1OTY4NywgCisgICAgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDMsIDU5NzA3LCA1OTcxMSwgNTk3MTUsIDU5NzE5LCA1OTcyMywgNTk3MjcsIAorICAgIDU5NzMyLCA1OTczNiwgNTk3NDAsIDU5NzQ0LCA1OTc0OCwgNTk3NTEsIDU5NzU1LCA1OTc1OCwgNTk3NjIsIDU5NzY2LCAKKyAgICA1OTc3MCwgNTk3NzQsIDU5Nzc3LCA1OTc4MSwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIDU5ODAwLCA1OTgwNCwgCisgICAgNTk4MDgsIDU5ODEyLCA1OTgxNiwgNTk4MjAsIDU5ODI0LCA1OTgyOCwgNTk4MzIsIDU5ODM1LCA1OTgzOSwgNTk4NDMsIAorICAgIDU5ODQ3LCA1OTg1MSwgNTk4NTUsIDU5ODU4LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgNTk4NzksIDU5ODgzLCAKKyAgICA1OTg4NywgNTk4OTEsIDU5ODk1LCA1OTkwMCwgNTk5MDQsIDU5OTA4LCA1OTkxMiwgNTk5MTYsIDU5OTIwLCA1OTkyNCwgCisgICAgNTk5MjgsIDAsIDAsIDU5OTMzLCA1OTk0MSwgNTk5NDksIDU5OTU2LCA1OTk2MywgNTk5NjcsIDU5OTczLCA1OTk3OCwgCisgICAgNTk5ODMsIDU5OTg3LCA1OTk5MCwgNTk5OTQsIDU5OTk3LCA2MDAwMSwgNjAwMDQsIDYwMDA4LCA2MDAxMSwgNjAwMTUsIAorICAgIDYwMDE4LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMywgNjAwMzcsIDYwMDQxLCA2MDA0NSwgNjAwNDksIDYwMDUzLCAKKyAgICA2MDA1NywgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIDYwMDg4LCA2MDA5MiwgCisgICAgNjAwOTYsIDYwMTAwLCA2MDEwNCwgNjAxMDgsIDYwMTEyLCA2MDExNywgNjAxMjEsIDYwMTI1LCA2MDEyOSwgNjAxMzMsIAorICAgIDYwMTM2LCA2MDE0MCwgNjAxNDMsIDYwMTQ3LCA2MDE1MSwgNjAxNTUsIDYwMTU5LCA2MDE2MiwgNjAxNjYsIDYwMTY5LCAKKyAgICA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkzLCA2MDE5NywgNjAyMDEsIDYwMjA1LCA2MDIwOSwgCisgICAgNjAyMTMsIDYwMjE3LCA2MDIyMCwgNjAyMjQsIDYwMjI4LCA2MDIzMiwgNjAyMzYsIDYwMjQwLCA2MDI0MywgNjAyNDgsIAorICAgIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY0LCA2MDI2OCwgNjAyNzIsIDYwMjc2LCA2MDI4MCwgNjAyODUsIDYwMjg5LCAKKyAgICA2MDI5MywgNjAyOTcsIDYwMzAxLCA2MDMwNSwgNjAzMDksIDYwMzEzLCA2MDMxOCwgNjAzMjIsIDYwMzI2LCA2MDMzMCwgCisgICAgNjAzMzQsIDYwMzM5LCA2MDM0NiwgNjAzNTAsIDYwMzU2LCAwLCAwLCAwLCAwLCAwLCA2MDM2MSwgNjAzNjYsIDYwMzcxLCAKKyAgICA2MDM3NSwgNjAzODAsIDYwMzg1LCA2MDM5MCwgNjAzOTUsIDYwMzk5LCA2MDQwNCwgNjA0MDksIDYwNDE0LCA2MDQxOSwgCisgICAgNjA0MjQsIDYwNDI5LCA2MDQzNCwgNjA0MzksIDYwNDQ0LCA2MDQ0OCwgNjA0NTMsIDYwNDU4LCA2MDQ2MywgNjA0NjcsIAorICAgIDYwNDcxLCA2MDQ3NSwgNjA0ODAsIDYwNDg1LCA2MDQ5MCwgNjA0OTUsIDYwNTAwLCA2MDUwNSwgNjA1MTAsIDYwNTE1LCAKKyAgICA2MDUyMCwgNjA1MjUsIDYwNTI5LCA2MDUzMywgNjA1MzgsIDYwNTQzLCA2MDU0OCwgNjA1NTMsIDAsIDAsIDAsIDYwNTU4LCAKKyAgICA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIDYwNTk0LCA2MDU5OCwgCisgICAgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCA2MDYzNCwgNjA2MzgsIAorICAgIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjU0LCA2MDY1OCwgNjA2NjIsIDYwNjY2LCA2MDY3MCwgNjA2NzQsIDYwNjc4LCAKKyAgICA2MDY4MSwgNjA2ODUsIDYwNjg4LCA2MDY5MiwgNjA2OTYsIDYwNjk5LCA2MDcwMywgNjA3MDcsIDYwNzEwLCA2MDcxNCwgCisgICAgNjA3MTgsIDYwNzIyLCA2MDcyNiwgNjA3MjksIDYwNzMzLCA2MDczNywgNjA3NDEsIDYwNzQ1LCA2MDc0OSwgNjA3NTMsIAorICAgIDYwNzU2LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgNjA3ODcsIDYwNzkxLCAKKyAgICA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIDYwODI3LCA2MDgzMSwgCisgICAgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCA2MDg2NywgNjA4NzEsIAorICAgIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDYwODk5LCA2MDkwMywgNjA5MDcsIDYwOTExLCAKKyAgICA2MDkxNSwgNjA5MTksIDYwOTIzLCAwLCA2MDkyNywgNjA5MzMsIDYwOTM5LCA2MDk0NCwgNjA5NDksIDYwOTU0LCA2MDk2MCwgCisgICAgNjA5NjYsIDYwOTcyLCA2MDk3OCwgNjA5ODQsIDYwOTkwLCA2MDk5NiwgNjEwMDIsIDYxMDA4LCA2MTAxNCwgNjEwMjAsIAorICAgIDYxMDI1LCA2MTAzMCwgNjEwMzUsIDYxMDQwLCA2MTA0NSwgNjEwNTAsIDYxMDU1LCA2MTA2MCwgNjEwNjUsIDYxMDcwLCAKKyAgICA2MTA3NSwgNjEwODAsIDYxMDg1LCA2MTA5MCwgNjEwOTUsIDYxMTAwLCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTEyMCwgCisgICAgNjExMjYsIDYxMTMyLCA2MTEzOCwgNjExNDQsIDYxMTQ5LCA2MTE1NCwgMCwgMCwgMCwgMCwgMCwgNjExNTksIDYxMTY0LCAKKyAgICA2MTE2OSwgNjExNzQsIDYxMTc5LCA2MTE4NCwgNjExODksIDYxMTk0LCA2MTE5OSwgNjEyMDQsIDYxMjA5LCA2MTIxNCwgCisgICAgNjEyMTksIDYxMjI0LCA2MTIyOSwgNjEyMzQsIDYxMjM5LCA2MTI0NCwgNjEyNDksIDYxMjU0LCA2MTI1OSwgNjEyNjQsIAorICAgIDYxMjY5LCA2MTI3NCwgNjEyNzksIDYxMjg0LCA2MTI4OSwgNjEyOTQsIDYxMjk5LCA2MTMwNCwgNjEzMDksIDYxMzE0LCAKKyAgICA2MTMxOSwgNjEzMjQsIDYxMzI5LCA2MTMzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjEzMzksIAorICAgIDYxMzQ0LCA2MTM0OSwgNjEzNTQsIDYxMzU4LCA2MTM2MywgNjEzNjcsIDYxMzcyLCA2MTM3NywgNjEzODIsIDYxMzg3LCAKKyAgICA2MTM5MiwgNjEzOTYsIDYxNDAxLCA2MTQwNiwgNjE0MTEsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIDYxNDI4LCA2MTQzMiwgCisgICAgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDgsIDYxNDUyLCA2MTQ1NiwgNjE0NjAsIDYxNDY0LCA2MTQ2OCwgNjE0NzIsIAorICAgIDYxNDc3LCA2MTQ4MiwgNjE0ODcsIDYxNDkyLCA2MTQ5NywgNjE1MDIsIDYxNTA3LCA2MTUxMiwgNjE1MTcsIDYxNTIyLCAKKyAgICA2MTUyNywgNjE1MzIsIDYxNTM3LCA2MTU0MiwgNjE1NDcsIDYxNTUzLCAwLCA2MTU2MCwgNjE1NjMsIDYxNTY2LCA2MTU2OSwgCisgICAgNjE1NzIsIDYxNTc1LCA2MTU3OCwgNjE1ODEsIDYxNTg0LCA2MTU4NywgNjE1OTEsIDYxNTk1LCA2MTU5OSwgNjE2MDMsIAorICAgIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgNjE2MzksIDYxNjQzLCAKKyAgICA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4MywgCisgICAgNjE2ODcsIDYxNjkxLCA2MTY5NSwgNjE2OTksIDYxNzAzLCA2MTcwNywgNjE3MTEsIDYxNzIwLCA2MTcyOSwgNjE3MzgsIAorICAgIDYxNzQ3LCA2MTc1NiwgNjE3NjUsIDYxNzc0LCA2MTc4MywgNjE3ODYsIDYxNzkxLCA2MTc5NiwgNjE4MDEsIDYxODA2LCAKKyAgICA2MTgxMSwgNjE4MTYsIDYxODIxLCA2MTgyNiwgNjE4MzEsIDYxODM1LCA2MTg0MCwgNjE4NDUsIDYxODUwLCA2MTg1NSwgCisgICAgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCA2MTg5MiwgNjE4OTYsIAorICAgIDYxOTAwLCA2MTkwNCwgNjE5MDgsIDYxOTEyLCA2MTkxNiwgNjE5MjEsIDYxOTI2LCA2MTkzMSwgNjE5MzYsIDYxOTQxLCAKKyAgICA2MTk0NiwgNjE5NTEsIDYxOTU2LCA2MTk2MSwgNjE5NjYsIDYxOTcxLCA2MTk3NiwgNjE5ODEsIDYxOTg2LCA2MTk5MiwgCisgICAgNjE5OTgsIDYyMDAzLCA2MjAwOCwgNjIwMTEsIDYyMDE0LCA2MjAxNywgNjIwMjAsIDYyMDIzLCA2MjAyNiwgNjIwMjksIAorICAgIDYyMDMyLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgNjIwNjMsIDYyMDY3LCAKKyAgICA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIDYyMTAzLCA2MjEwNywgCisgICAgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCA2MjE0MywgNjIxNDcsIAorICAgIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzEsIDYyMTc1LCA2MjE3OSwgNjIxODMsIDYyMTg3LCAKKyAgICA2MjE5MSwgNjIxOTUsIDYyMjAwLCA2MjIwNSwgNjIyMTAsIDYyMjE1LCA2MjIxOSwgNjIyMjQsIDYyMjI5LCA2MjIzNCwgCisgICAgNjIyMzksIDYyMjQ0LCA2MjI0OSwgNjIyNTQsIDYyMjU5LCA2MjI2NCwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIAorICAgIDYyMjk2LCA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMzEsIDYyMzM4LCA2MjM0NSwgNjIzNTIsIDYyMzU1LCAKKyAgICA2MjM1OCwgNjIzNjEsIDYyMzY2LCA2MjM2OSwgNjIzNzIsIDYyMzc1LCA2MjM3OCwgNjIzODEsIDYyMzg0LCA2MjM4OCwgCisgICAgNjIzOTIsIDYyMzk2LCA2MjQwMCwgNjI0MDMsIDYyNDA3LCA2MjQxMSwgNjI0MTUsIDYyNDE5LCA2MjQyMywgNjI0MjcsIAorICAgIDYyNDMxLCA2MjQzNSwgNjI0MzgsIDYyNDQxLCA2MjQ0NSwgNjI0NDksIDYyNDUzLCA2MjQ1NywgNjI0NjAsIDYyNDY0LCAKKyAgICA2MjQ2OCwgNjI0NzIsIDYyNDc2LCA2MjQ3OSwgNjI0ODMsIDYyNDg3LCA2MjQ5MSwgNjI0OTUsIDYyNDk4LCA2MjUwMiwgCisgICAgNjI1MDYsIDYyNTA5LCA2MjUxMywgNjI1MTcsIDYyNTIxLCA2MjUyNSwgNjI1MjksIDYyNTMzLCA2MjUzNywgMCwgNjI1NDEsIAorICAgIDYyNTQ0LCA2MjU0NywgNjI1NTAsIDYyNTUzLCA2MjU1NiwgNjI1NTksIDYyNTYyLCA2MjU2NSwgNjI1NjgsIDYyNTcxLCAKKyAgICA2MjU3NCwgNjI1NzcsIDYyNTgwLCA2MjU4MywgNjI1ODYsIDYyNTg5LCA2MjU5MiwgNjI1OTUsIDYyNTk4LCA2MjYwMSwgCisgICAgNjI2MDQsIDYyNjA3LCA2MjYxMCwgNjI2MTMsIDYyNjE2LCA2MjYxOSwgNjI2MjIsIDYyNjI1LCA2MjYyOCwgNjI2MzEsIAorICAgIDYyNjM0LCA2MjYzNywgNjI2NDAsIDYyNjQzLCA2MjY0NiwgNjI2NDksIDYyNjUyLCA2MjY1NSwgNjI2NTgsIDYyNjYxLCAKKyAgICA2MjY2NCwgNjI2NjcsIDYyNjcwLCA2MjY3MywgNjI2NzYsIDYyNjc5LCA2MjY4MiwgNjI2ODUsIDYyNjg4LCA2MjY5MSwgCisgICAgNjI2OTQsIDYyNjk3LCA2MjcwMCwgNjI3MDMsIDYyNzA2LCA2MjcwOSwgNjI3MTIsIDYyNzE1LCA2MjcxOCwgNjI3MjEsIAorICAgIDYyNzI0LCA2MjcyNywgNjI3MzAsIDYyNzMzLCA2MjczNiwgNjI3MzksIDYyNzQyLCA2Mjc0NSwgNjI3NDgsIDYyNzUxLCAKKyAgICA2Mjc1NCwgNjI3NTcsIDYyNzYwLCA2Mjc2MywgNjI3NjYsIDYyNzY5LCA2Mjc3MiwgNjI3NzUsIDYyNzc4LCA2Mjc4MSwgCisgICAgNjI3ODQsIDYyNzg3LCA2Mjc5MCwgNjI3OTMsIDYyNzk2LCA2Mjc5OSwgNjI4MDIsIDYyODA1LCA2MjgxNCwgNjI4MjIsIAorICAgIDYyODMwLCA2MjgzOCwgNjI4NDYsIDYyODU0LCA2Mjg2MiwgNjI4NzAsIDYyODc4LCA2Mjg4NiwgNjI4OTUsIDYyOTA0LCAKKyAgICA2MjkxMywgNjI5MjIsIDYyOTMxLCA2Mjk0MCwgNjI5NDksIDYyOTU4LCA2Mjk2NywgNjI5NzYsIDYyOTg1LCA2Mjk5NCwgCisgICAgNjMwMDMsIDYzMDEyLCA2MzAyMSwgNjMwMjQsIDYzMDI3LCA2MzAzMCwgNjMwMzIsIDYzMDM1LCA2MzAzOCwgNjMwNDEsIAorICAgIDYzMDQ2LCA2MzA1MSwgNjMwNTQsIDYzMDYxLCA2MzA2OCwgNjMwNzUsIDYzMDgyLCA2MzA4NSwgNjMwOTAsIDYzMDkyLCAKKyAgICA2MzA5NiwgNjMwOTgsIDYzMTAwLCA2MzEwMywgNjMxMDYsIDYzMTA5LCA2MzExMiwgNjMxMTUsIDYzMTE4LCA2MzEyMSwgCisgICAgNjMxMjYsIDYzMTMxLCA2MzEzNCwgNjMxMzcsIDYzMTQwLCA2MzE0MywgNjMxNDYsIDYzMTQ5LCA2MzE1MiwgNjMxNTYsIAorICAgIDYzMTU5LCA2MzE2MiwgNjMxNjUsIDYzMTY4LCA2MzE3MSwgNjMxNzUsIDYzMTc4LCA2MzE4MSwgNjMxODQsIDYzMTg5LCAKKyAgICA2MzE5NCwgNjMxOTksIDYzMjA0LCA2MzIwOSwgNjMyMTQsIDYzMjE5LCA2MzIyNCwgNjMyMzAsIDYzMjM4LCA2MzI0MCwgCisgICAgNjMyNDMsIDYzMjQ2LCA2MzI0OSwgNjMyNTIsIDYzMjU4LCA2MzI2NiwgNjMyNjksIDYzMjcyLCA2MzI3NywgNjMyODAsIAorICAgIDYzMjgzLCA2MzI4NiwgNjMyOTEsIDYzMjk0LCA2MzI5NywgNjMzMDIsIDYzMzA1LCA2MzMwOCwgNjMzMTMsIDYzMzE2LCAKKyAgICA2MzMxOSwgNjMzMjQsIDYzMzI5LCA2MzMzNCwgNjMzMzcsIDYzMzQwLCA2MzM0MywgNjMzNDYsIDYzMzUyLCA2MzM1NSwgCisgICAgNjMzNTgsIDYzMzYxLCA2MzM2MywgNjMzNjYsIDYzMzY5LCA2MzM3MiwgNjMzNzcsIDYzMzgwLCA2MzM4MywgNjMzODYsIAorICAgIDYzMzg5LCA2MzM5MiwgNjMzOTcsIDYzNDAwLCA2MzQwMywgNjM0MDYsIDYzNDA5LCA2MzQxMiwgNjM0MTUsIDYzNDE4LCAKKyAgICA2MzQyMSwgNjM0MjQsIDYzNDI5LCA2MzQzMywgNjM0NDEsIDYzNDQ5LCA2MzQ1NywgNjM0NjUsIDYzNDczLCA2MzQ4MSwgCisgICAgNjM0ODksIDYzNDk3LCA2MzUwNSwgNjM1MTQsIDYzNTIzLCA2MzUzMiwgNjM1NDEsIDYzNTUwLCA2MzU1OSwgNjM1NjgsIAorICAgIDYzNTc3LCA2MzU4NiwgNjM1OTUsIDYzNjA0LCA2MzYxMywgNjM2MjIsIDYzNjMxLCA2MzY0MCwgNjM2NDksIDYzNjU4LCAKKyAgICA2MzY2NywgNjM2NzYsIDYzNjg1LCA2MzY5NCwgNjM3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNjc4LCA2MzY4NywgNjM2OTYsIDYzNzA3LCAKLSAgICA2MzcxNCwgNjM3MTksIDYzNzI0LCA2MzczMSwgNjM3MzgsIDYzNzQ0LCA2Mzc0OSwgNjM3NTQsIDYzNzU5LCA2Mzc2NCwgCi0gICAgNjM3NzEsIDYzNzc2LCA2Mzc4MSwgNjM3ODYsIDYzNzk3LCA2MzgwMiwgNjM4MDcsIDYzODE0LCA2MzgxOSwgNjM4MjYsIAotICAgIDYzODMxLCA2MzgzNiwgNjM4NDMsIDYzODUwLCA2Mzg1NywgNjM4NjYsIDYzODc1LCA2Mzg4MCwgNjM4ODUsIDYzODkwLCAKLSAgICA2Mzg5NywgNjM5MDIsIDYzOTEyLCA2MzkxOSwgNjM5MjQsIDYzOTI5LCA2MzkzNCwgNjM5MzksIDYzOTQ0LCA2Mzk0OSwgCi0gICAgNjM5NTgsIDYzOTY1LCA2Mzk3MiwgNjM5NzcsIDYzOTg0LCA2Mzk4OSwgNjM5OTYsIDY0MDA1LCA2NDAxNiwgNjQwMjEsIAotICAgIDY0MDMwLCA2NDAzNSwgNjQwNDIsIDY0MDUxLCA2NDA2MCwgNjQwNjUsIDY0MDcwLCA2NDA3NywgNjQwODMsIDY0MDkwLCAKLSAgICA2NDA5NywgNjQxMDEsIDY0MTA1LCA2NDEwOCwgNjQxMTIsIDY0MTE2LCA2NDEyMCwgNjQxMjQsIDY0MTI4LCA2NDEzMiwgCi0gICAgNjQxMzYsIDY0MTM5LCA2NDE0MywgNjQxNDcsIDY0MTUxLCA2NDE1NSwgNjQxNTksIDY0MTYzLCA2NDE2NiwgNjQxNzAsIAotICAgIDY0MTc0LCA2NDE3NywgNjQxODEsIDY0MTg1LCA2NDE4OSwgNjQxOTMsIDY0MTk3LCA2NDIwMSwgNjQyMDUsIDY0MjA5LCAKLSAgICA2NDIxMywgNjQyMTcsIDY0MjIxLCA2NDIyNSwgNjQyMjksIDY0MjMzLCA2NDIzNywgNjQyNDEsIDY0MjQ1LCA2NDI0OSwgCi0gICAgNjQyNTMsIDY0MjU3LCA2NDI2MSwgNjQyNjUsIDY0MjY5LCA2NDI3MywgNjQyNzcsIDY0MjgxLCA2NDI4NSwgNjQyODksIAotICAgIDY0MjkzLCA2NDI5NywgNjQzMDEsIDY0MzA1LCA2NDMwOSwgNjQzMTMsIDY0MzE3LCA2NDMyMSwgNjQzMjUsIDY0MzI5LCAKLSAgICA2NDMzMywgNjQzMzcsIDY0MzQxLCA2NDM0NSwgNjQzNDksIDY0MzUzLCA2NDM1NiwgNjQzNjAsIDY0MzY0LCA2NDM2OCwgCi0gICAgNjQzNzIsIDY0Mzc2LCA2NDM4MCwgNjQzODQsIDY0Mzg4LCA2NDM5MiwgNjQzOTYsIDY0NDAwLCA2NDQwNCwgNjQ0MDgsIAotICAgIDY0NDEyLCA2NDQxNiwgNjQ0MjAsIDY0NDI0LCA2NDQyOCwgNjQ0MzIsIDY0NDM2LCA2NDQ0MCwgNjQ0NDQsIDY0NDQ4LCAKLSAgICA2NDQ1MiwgNjQ0NTYsIDY0NDYwLCA2NDQ2NCwgNjQ0NjgsIDY0NDcyLCA2NDQ3NiwgNjQ0ODAsIDY0NDg0LCA2NDQ4OCwgCi0gICAgNjQ0OTIsIDY0NDk2LCA2NDUwMCwgNjQ1MDQsIDY0NTA4LCA2NDUxMiwgNjQ1MTYsIDY0NTIwLCA2NDUyNCwgNjQ1MjgsIAotICAgIDY0NTMyLCA2NDUzNiwgNjQ1NDAsIDY0NTQ0LCA2NDU0OCwgNjQ1NTIsIDY0NTU2LCA2NDU2MCwgNjQ1NjQsIDY0NTY4LCAKLSAgICA2NDU3MiwgNjQ1NzYsIDY0NTgwLCA2NDU4NCwgNjQ1ODgsIDY0NTkyLCA2NDU5NiwgNjQ2MDAsIDY0NjA0LCA2NDYwOCwgCi0gICAgNjQ2MTIsIDY0NjE2LCA2NDYyMCwgNjQ2MjQsIDY0NjI4LCA2NDYzMiwgNjQ2MzYsIDY0NjQwLCA2NDY0NCwgNjQ2NDgsIAotICAgIDY0NjUyLCA2NDY1NiwgNjQ2NjAsIDY0NjY0LCA2NDY2OCwgNjQ2NzIsIDY0Njc2LCA2NDY4MCwgNjQ2ODQsIDY0Njg4LCAKLSAgICA2NDY5MiwgNjQ2OTYsIDY0NzAwLCA2NDcwNCwgNjQ3MDgsIDY0NzEyLCA2NDcxNiwgNjQ3MjAsIDY0NzI0LCA2NDcyOCwgCi0gICAgNjQ3MzIsIDY0NzM2LCA2NDc0MCwgNjQ3NDQsIDY0NzQ4LCA2NDc1MiwgNjQ3NTYsIDY0NzYwLCA2NDc2NCwgNjQ3NjgsIAotICAgIDY0NzcyLCA2NDc3NiwgNjQ3ODAsIDY0Nzg0LCA2NDc4OCwgNjQ3OTIsIDY0Nzk2LCA2NDgwMCwgNjQ4MDQsIDY0ODA4LCAKLSAgICA2NDgxMiwgNjQ4MTYsIDY0ODIwLCA2NDgyNCwgNjQ4MjcsIDY0ODMxLCA2NDgzNSwgNjQ4MzksIDY0ODQzLCA2NDg0NywgCi0gICAgNjQ4NTEsIDY0ODU1LCA2NDg1OSwgNjQ4NjMsIDY0ODY3LCA2NDg3MSwgNjQ4NzUsIDY0ODc5LCA2NDg4MywgNjQ4ODcsIAotICAgIDY0ODkxLCA2NDg5NSwgNjQ4OTksIDY0OTAzLCA2NDkwNywgNjQ5MTEsIDY0OTE1LCA2NDkxOSwgNjQ5MjMsIDY0OTI3LCAKLSAgICA2NDkzMSwgNjQ5MzUsIDY0OTM5LCA2NDk0MywgNjQ5NDcsIDY0OTUxLCA2NDk1NSwgNjQ5NTksIDY0OTYzLCA2NDk2NywgCi0gICAgNjQ5NzEsIDY0OTc1LCA2NDk3OSwgNjQ5ODMsIDY0OTg3LCA2NDk5MSwgNjQ5OTUsIDY0OTk5LCA2NTAwMywgNjUwMDcsIAotICAgIDY1MDExLCA2NTAxNSwgNjUwMTksIDY1MDIzLCA2NTAyNywgNjUwMzEsIDY1MDM1LCA2NTAzOSwgNjUwNDMsIDY1MDQ3LCAKLSAgICA2NTA1MSwgNjUwNTUsIDY1MDU5LCA2NTA2MywgNjUwNjcsIDY1MDcxLCA2NTA3NSwgNjUwNzksIDY1MDgzLCA2NTA4NywgCi0gICAgNjUwOTEsIDY1MDk1LCA2NTA5OSwgNjUxMDMsIDY1MTA3LCA2NTExMSwgNjUxMTUsIDY1MTE5LCA2NTEyMywgNjUxMjcsIAotICAgIDY1MTMxLCA2NTEzNSwgNjUxMzksIDY1MTQzLCA2NTE0NywgNjUxNTEsIDY1MTU1LCA2NTE1OSwgNjUxNjMsIDY1MTY3LCAKLSAgICA2NTE3MSwgNjUxNzUsIDY1MTc5LCA2NTE4MywgNjUxODcsIDY1MTkxLCA2NTE5NSwgNjUxOTksIDY1MjAzLCA2NTIwNywgCi0gICAgNjUyMTEsIDY1MjE1LCA2NTIxOSwgNjUyMjMsIDY1MjI3LCA2NTIzMSwgNjUyMzUsIDY1MjM5LCA2NTI0MywgNjUyNDcsIAotICAgIDY1MjUxLCA2NTI1NSwgNjUyNTksIDY1MjYzLCA2NTI2NywgNjUyNzEsIDY1Mjc1LCA2NTI3OSwgNjUyODMsIDY1Mjg3LCAKLSAgICA2NTI5MCwgNjUyOTQsIDY1Mjk4LCA2NTMwMiwgNjUzMDYsIDY1MzEwLCA2NTMxNCwgNjUzMTgsIDY1MzIyLCA2NTMyNiwgCi0gICAgNjUzMzAsIDY1MzM0LCA2NTMzOCwgNjUzNDIsIDY1MzQ2LCA2NTM1MCwgNjUzNTQsIDY1MzU4LCA2NTM2MiwgNjUzNjYsIAotICAgIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCA2NTM4NiwgNjUzOTAsIDY1Mzk0LCA2NTM5OCwgNjU0MDIsIDY1NDA2LCAKLSAgICA2NTQxMCwgNjU0MTQsIDY1NDE4LCA2NTQyMiwgNjU0MjYsIDY1NDMwLCA2NTQzNCwgNjU0MzgsIDY1NDQyLCA2NTQ0NiwgCi0gICAgNjU0NTAsIDY1NDU0LCA2NTQ1OCwgNjU0NjIsIDY1NDY2LCA2NTQ3MCwgNjU0NzQsIDY1NDc4LCA2NTQ4MiwgNjU0ODYsIAotICAgIDY1NDkwLCA2NTQ5NCwgNjU0OTgsIDY1NTAyLCA2NTUwNiwgNjU1MTAsIDY1NTE0LCA2NTUxOCwgNjU1MjIsIDY1NTI2LCAKLSAgICA2NTUzMCwgNjU1MzQsIDY1NTM4LCA2NTU0MiwgNjU1NDYsIDY1NTUwLCA2NTU1NCwgNjU1NTgsIDY1NTYyLCA2NTU2NiwgCi0gICAgNjU1NzAsIDY1NTc0LCA2NTU3OCwgNjU1ODIsIDY1NTg2LCA2NTU5MCwgNjU1OTQsIDY1NTk4LCA2NTYwMiwgNjU2MDYsIAotICAgIDY1NjEwLCA2NTYxNCwgNjU2MTgsIDY1NjIyLCA2NTYyNiwgNjU2MzAsIDY1NjM0LCA2NTYzOCwgNjU2NDIsIDY1NjQ2LCAKLSAgICA2NTY0OSwgNjU2NTMsIDY1NjU3LCA2NTY2MSwgNjU2NjUsIDY1NjY5LCA2NTY3MywgNjU2NzcsIDY1NjgxLCA2NTY4NSwgCi0gICAgNjU2ODksIDY1NjkzLCA2NTY5NywgNjU3MDEsIDY1NzA1LCA2NTcwOSwgNjU3MTMsIDY1NzE3LCA2NTcyMSwgNjU3MjUsIAotICAgIDY1NzI5LCA2NTczMywgNjU3MzcsIDY1NzQxLCA2NTc0NSwgNjU3NDksIDY1NzUzLCA2NTc1NywgNjU3NjEsIDY1NzY1LCAKLSAgICA2NTc2OSwgNjU3NzMsIDY1Nzc3LCA2NTc4MSwgNjU3ODUsIDY1Nzg5LCA2NTc5MywgNjU3OTcsIDY1ODAxLCA2NTgwNSwgCi0gICAgNjU4MDksIDY1ODEzLCA2NTgxNywgNjU4MjEsIDY1ODI1LCA2NTgyOSwgNjU4MzMsIDY1ODM3LCA2NTg0MSwgNjU4NDUsIAotICAgIDY1ODQ5LCA2NTg1MywgNjU4NTcsIDY1ODYxLCA2NTg2NSwgNjU4NjksIDY1ODczLCA2NTg3NywgNjU4ODEsIDY1ODg1LCAKLSAgICA2NTg4OSwgNjU4OTMsIDY1ODk3LCA2NTkwMSwgNjU5MDUsIDY1OTA5LCA2NTkxMywgNjU5MTcsIDY1OTIxLCA2NTkyNSwgCi0gICAgNjU5MjksIDY1OTMzLCA2NTkzNywgNjU5NDEsIDY1OTQ1LCA2NTk0OSwgNjU5NTMsIDY1OTU3LCA2NTk2MSwgNjU5NjUsIAotICAgIDY1OTY5LCA2NTk3MywgNjU5NzcsIDY1OTgxLCA2NTk4NSwgNjU5ODksIDY1OTkzLCA2NTk5NywgNjYwMDEsIDY2MDA1LCAKLSAgICA2NjAwOSwgNjYwMTMsIDY2MDE3LCA2NjAyMSwgNjYwMjUsIDY2MDI5LCA2NjAzMywgNjYwMzcsIDY2MDQxLCA2NjA0NSwgCi0gICAgNjYwNDksIDY2MDUzLCA2NjA1NywgNjYwNjEsIDY2MDY1LCA2NjA2OSwgNjYwNzMsIDY2MDc3LCA2NjA4MSwgNjYwODUsIAotICAgIDY2MDg5LCA2NjA5MywgNjYwOTcsIDY2MTAxLCA2NjEwNSwgNjYxMDksIDY2MTEzLCA2NjExNywgNjYxMjEsIDY2MTI1LCAKLSAgICA2NjEyOSwgNjYxMzMsIDY2MTM3LCA2NjE0MSwgNjYxNDQsIDY2MTQ4LCA2NjE1MiwgNjYxNTYsIDY2MTYwLCA2NjE2NCwgCi0gICAgNjYxNjgsIDY2MTcyLCA2NjE3NiwgNjYxODAsIDY2MTg0LCA2NjE4OCwgNjYxOTIsIDY2MTk2LCA2NjIwMCwgNjYyMDQsIAotICAgIDY2MjA4LCA2NjIxMiwgNjYyMTYsIDY2MjIwLCA2NjIyNCwgNjYyMjgsIDY2MjMyLCA2NjIzNiwgNjYyNDAsIDY2MjQ0LCAKLSAgICA2NjI0OCwgNjYyNTIsIDY2MjU2LCA2NjI2MCwgNjYyNjQsIDY2MjY4LCA2NjI3MiwgNjYyNzYsIDY2MjgwLCA2NjI4NCwgCi0gICAgNjYyODgsIDY2MjkyLCA2NjI5NiwgNjYzMDAsIDY2MzA0LCA2NjMwOCwgNjYzMTIsIDY2MzE2LCA2NjMyMCwgNjYzMjQsIAotICAgIDY2MzI4LCA2NjMzMiwgNjYzMzYsIDY2MzQwLCA2NjM0NCwgNjYzNDgsIDY2MzUyLCA2NjM1NiwgNjYzNjAsIDY2MzY0LCAKLSAgICA2NjM2OCwgNjYzNzIsIDY2Mzc2LCA2NjM4MCwgNjYzODQsIDY2Mzg4LCA2NjM5MiwgNjYzOTYsIDY2NDAwLCA2NjQwNCwgCi0gICAgNjY0MDgsIDY2NDEyLCA2NjQxNiwgNjY0MjAsIDY2NDI0LCA2NjQyOCwgNjY0MzIsIDY2NDM2LCA2NjQ0MCwgNjY0NDQsIAotICAgIDY2NDQ4LCA2NjQ1MiwgNjY0NTYsIDY2NDYwLCA2NjQ2NCwgNjY0NjgsIDY2NDcyLCA2NjQ3NiwgNjY0ODAsIDY2NDg0LCAKLSAgICA2NjQ4OCwgNjY0OTIsIDY2NDk2LCA2NjUwMCwgNjY1MDQsIDY2NTA4LCA2NjUxMiwgNjY1MTYsIDY2NTIwLCA2NjUyNCwgCi0gICAgNjY1MjgsIDY2NTMyLCA2NjUzNiwgNjY1NDAsIDY2NTQ0LCA2NjU0OCwgNjY1NTIsIDY2NTU2LCA2NjU2MCwgNjY1NjQsIAotICAgIDY2NTY4LCA2NjU3MiwgNjY1NzYsIDY2NTgwLCA2NjU4NCwgNjY1ODgsIDY2NTkyLCA2NjU5NiwgNjY1OTksIDY2NjAzLCAKLSAgICA2NjYwNywgNjY2MTEsIDY2NjE1LCA2NjYxOSwgNjY2MjMsIDY2NjI3LCA2NjYzMSwgNjY2MzUsIDY2NjM5LCA2NjY0MywgCi0gICAgNjY2NDcsIDY2NjUxLCA2NjY1NSwgNjY2NTksIDY2NjYzLCA2NjY2NywgNjY2NzEsIDY2Njc1LCA2NjY3OSwgNjY2ODMsIAotICAgIDY2Njg3LCA2NjY5MSwgNjY2OTUsIDY2Njk5LCA2NjcwMywgNjY3MDcsIDY2NzExLCA2NjcxNSwgNjY3MTksIDY2NzIzLCAKLSAgICA2NjcyNywgNjY3MzEsIDY2NzM1LCA2NjczOSwgNjY3NDMsIDY2NzQ3LCA2Njc1MSwgNjY3NTUsIDY2NzU5LCA2Njc2MywgCi0gICAgNjY3NjcsIDY2NzcxLCA2Njc3NSwgNjY3NzksIDY2NzgzLCA2Njc4NywgNjY3OTEsIDY2Nzk1LCA2Njc5OSwgNjY4MDMsIAotICAgIDY2ODA3LCA2NjgxMSwgNjY4MTUsIDY2ODE5LCA2NjgyMywgNjY4MjcsIDY2ODMxLCA2NjgzNSwgNjY4MzksIDY2ODQzLCAKLSAgICA2Njg0NywgNjY4NTEsIDY2ODU1LCA2Njg1OSwgNjY4NjMsIDY2ODY3LCA2Njg3MSwgNjY4NzUsIDY2ODc5LCA2Njg4MywgCi0gICAgNjY4ODcsIDY2ODkxLCA2Njg5NSwgNjY4OTksIDY2OTAzLCA2NjkwNywgNjY5MTEsIDY2OTE1LCA2NjkxOSwgNjY5MjMsIAotICAgIDY2OTI3LCA2NjkzMSwgNjY5MzUsIDY2OTM5LCA2Njk0MywgNjY5NDcsIDY2OTUxLCA2Njk1NSwgNjY5NTksIDY2OTYzLCAKLSAgICA2Njk2NywgNjY5NzEsIDY2OTc1LCA2Njk3OSwgNjY5ODMsIDY2OTg3LCA2Njk5MSwgNjY5OTUsIDY2OTk5LCA2NzAwMywgCi0gICAgNjcwMDcsIDY3MDExLCA2NzAxNSwgNjcwMTksIDY3MDIzLCA2NzAyNywgNjcwMzEsIDY3MDM1LCA2NzAzOSwgNjcwNDMsIAotICAgIDY3MDQ3LCA2NzA1MSwgNjcwNTUsIDY3MDU5LCA2NzA2MywgNjcwNjcsIDY3MDcxLCA2NzA3NSwgNjcwNzksIDY3MDgzLCAKLSAgICA2NzA4NywgNjcwOTEsIDY3MDk1LCA2NzA5OSwgNjcxMDMsIDY3MTA3LCA2NzExMSwgNjcxMTUsIDY3MTE5LCA2NzEyMywgCi0gICAgNjcxMjcsIDY3MTMxLCA2NzEzNSwgNjcxMzksIDY3MTQzLCA2NzE0NywgNjcxNTEsIDY3MTU1LCA2NzE1OSwgNjcxNjMsIAotICAgIDY3MTY3LCA2NzE3MSwgNjcxNzUsIDY3MTc5LCA2NzE4MywgNjcxODcsIDY3MTkxLCA2NzE5NSwgNjcxOTksIDY3MjAyLCAKLSAgICA2NzIwNiwgNjcyMTAsIDY3MjE0LCA2NzIxOCwgNjcyMjIsIDY3MjI2LCA2NzIzMCwgNjcyMzMsIDY3MjM3LCA2NzI0MSwgCi0gICAgNjcyNDUsIDY3MjQ5LCA2NzI1MywgNjcyNTcsIDY3MjYxLCA2NzI2NSwgNjcyNjksIDY3MjczLCA2NzI3NywgNjcyODEsIAotICAgIDY3Mjg1LCA2NzI4OSwgNjcyOTMsIDY3Mjk3LCA2NzMwMSwgNjczMDUsIDY3MzA5LCA2NzMxMywgNjczMTcsIDY3MzIxLCAKLSAgICA2NzMyNSwgNjczMjksIDY3MzMzLCA2NzMzNywgNjczNDEsIDY3MzQ1LCA2NzM0OSwgNjczNTMsIDY3MzU3LCA2NzM2MSwgCi0gICAgNjczNjUsIDY3MzY5LCA2NzM3MywgNjczNzcsIDY3MzgxLCA2NzM4NSwgNjczODksIDY3MzkzLCA2NzM5NywgNjc0MDEsIAotICAgIDY3NDA1LCA2NzQwOSwgNjc0MTMsIDY3NDE3LCA2NzQyMSwgNjc0MjUsIDY3NDI5LCA2NzQzMywgNjc0MzcsIDY3NDQxLCAKLSAgICA2NzQ0NSwgNjc0NDksIDY3NDUzLCA2NzQ1NywgNjc0NjEsIDY3NDY1LCA2NzQ2OSwgNjc0NzMsIDY3NDc3LCA2NzQ4MSwgCi0gICAgNjc0ODUsIDY3NDg5LCA2NzQ5MywgNjc0OTcsIDY3NTAxLCA2NzUwNSwgNjc1MDksIDY3NTEzLCA2NzUxNywgNjc1MjEsIAotICAgIDY3NTI1LCA2NzUyOSwgNjc1MzMsIDY3NTM3LCA2NzU0MSwgNjc1NDUsIDY3NTQ5LCA2NzU1MywgNjc1NTcsIDY3NTYxLCAKLSAgICA2NzU2NSwgNjc1NjksIDY3NTczLCA2NzU3NywgNjc1ODEsIDY3NTg1LCA2NzU4OSwgNjc1OTMsIDY3NTk3LCA2NzYwMSwgCi0gICAgNjc2MDUsIDY3NjA5LCA2NzYxMywgNjc2MTcsIDY3NjIxLCA2NzYyNSwgNjc2MjksIDY3NjMzLCA2NzYzNywgNjc2NDEsIAotICAgIDY3NjQ1LCA2NzY0OSwgNjc2NTMsIDY3NjU3LCA2NzY2MSwgNjc2NjUsIDY3NjY5LCA2NzY3MywgNjc2NzcsIDY3NjgxLCAKLSAgICA2NzY4NSwgNjc2ODksIDY3NjkzLCA2NzY5NywgNjc3MDEsIDY3NzA1LCA2NzcwOSwgNjc3MTMsIDY3NzE3LCA2NzcyMSwgCi0gICAgNjc3MjUsIDY3NzI5LCA2NzczMywgNjc3MzcsIDY3NzQxLCA2Nzc0NSwgNjc3NDksIDY3NzUzLCA2Nzc1NywgNjc3NjEsIAotICAgIDY3NzY1LCA2Nzc2OSwgNjc3NzMsIDY3Nzc3LCA2Nzc4MSwgNjc3ODUsIDY3Nzg5LCA2Nzc5MywgNjc3OTcsIDY3ODAxLCAKLSAgICA2NzgwNSwgNjc4MDksIDY3ODEzLCA2NzgxNywgNjc4MjEsIDY3ODI1LCA2NzgyOSwgNjc4MzMsIDY3ODM3LCA2Nzg0MSwgCi0gICAgNjc4NDUsIDY3ODQ5LCA2Nzg1MywgNjc4NTcsIDY3ODYxLCA2Nzg2NSwgNjc4NjksIDY3ODczLCA2Nzg3NywgNjc4ODEsIAotICAgIDY3ODg1LCA2Nzg4OSwgNjc4OTMsIDY3ODk3LCA2NzkwMSwgNjc5MDUsIDY3OTA5LCA2NzkxMywgNjc5MTcsIDY3OTIxLCAKLSAgICA2NzkyNSwgNjc5MjksIDY3OTMzLCA2NzkzNywgNjc5NDEsIDY3OTQ1LCA2Nzk0OSwgNjc5NTMsIDY3OTU3LCA2Nzk2MCwgCi0gICAgNjc5NjQsIDY3OTY4LCA2Nzk3MiwgNjc5NzYsIDY3OTgwLCA2Nzk4NCwgNjc5ODgsIDY3OTkyLCA2Nzk5NiwgNjgwMDAsIAotICAgIDY4MDA0LCA2ODAwOCwgNjgwMTIsIDY4MDE2LCA2ODAyMCwgNjgwMjQsIDY4MDI4LCA2ODAzMiwgNjgwMzYsIDY4MDQwLCAKLSAgICA2ODA0NCwgNjgwNDgsIDY4MDUyLCA2ODA1NiwgNjgwNjAsIDY4MDY0LCA2ODA2OCwgNjgwNzIsIDY4MDc2LCA2ODA4MCwgCi0gICAgNjgwODQsIDY4MDg4LCA2ODA5MiwgNjgwOTYsIDY4MTAwLCA2ODEwNCwgNjgxMDgsIDY4MTEyLCA2ODExNiwgNjgxMjAsIAotICAgIDY4MTI0LCA2ODEyOCwgNjgxMzIsIDY4MTM2LCA2ODE0MCwgNjgxNDQsIDY4MTQ4LCA2ODE1MiwgNjgxNTYsIDY4MTYwLCAKLSAgICA2ODE2NCwgNjgxNjgsIDY4MTcyLCA2ODE3NiwgNjgxODAsIDY4MTg0LCA2ODE4OCwgNjgxOTIsIDY4MTk2LCA2ODIwMCwgCi0gICAgNjgyMDQsIDY4MjA4LCA2ODIxMiwgNjgyMTYsIDY4MjIwLCA2ODIyNCwgNjgyMjgsIDY4MjMyLCA2ODIzNiwgNjgyNDAsIAotICAgIDY4MjQ0LCA2ODI0OCwgNjgyNTIsIDY4MjU2LCA2ODI2MCwgNjgyNjQsIDY4MjY4LCA2ODI3MiwgNjgyNzYsIDY4MjgwLCAKLSAgICA2ODI4NCwgNjgyODgsIDY4MjkyLCA2ODI5NiwgNjgzMDAsIDY4MzA0LCA2ODMwOCwgNjgzMTIsIDY4MzE2LCA2ODMyMCwgCi0gICAgNjgzMjQsIDY4MzI4LCA2ODMzMiwgNjgzMzYsIDY4MzQwLCA2ODM0NCwgNjgzNDgsIDY4MzUyLCA2ODM1NiwgNjgzNjAsIAotICAgIDY4MzY0LCA2ODM2OCwgNjgzNzIsIDY4Mzc2LCA2ODM4MCwgNjgzODQsIDY4Mzg4LCA2ODM5MiwgNjgzOTYsIDY4NDAwLCAKLSAgICA2ODQwNCwgNjg0MDgsIDY4NDEyLCA2ODQxNiwgNjg0MjAsIDY4NDI0LCA2ODQyOCwgNjg0MzIsIDY4NDM2LCA2ODQ0MCwgCi0gICAgNjg0NDQsIDY4NDQ4LCA2ODQ1MiwgNjg0NTYsIDY4NDYwLCA2ODQ2NCwgNjg0NjgsIDY4NDcyLCA2ODQ3NiwgNjg0ODAsIAotICAgIDY4NDg0LCA2ODQ4OCwgNjg0OTIsIDY4NDk2LCA2ODUwMCwgNjg1MDQsIDY4NTA4LCA2ODUxMiwgNjg1MTYsIDY4NTIwLCAKLSAgICA2ODUyNCwgNjg1MjgsIDY4NTMyLCA2ODUzNiwgNjg1NDAsIDY4NTQ0LCA2ODU0OCwgNjg1NTIsIDY4NTU2LCA2ODU2MCwgCi0gICAgNjg1NjQsIDY4NTY4LCA2ODU3MiwgNjg1NzYsIDY4NTgwLCA2ODU4NCwgNjg1ODgsIDY4NTkyLCA2ODU5NiwgNjg2MDAsIAotICAgIDY4NjA0LCA2ODYwOCwgNjg2MTIsIDY4NjE2LCA2ODYyMCwgNjg2MjQsIDY4NjI4LCA2ODYzMiwgNjg2MzYsIDY4NjQwLCAKLSAgICA2ODY0NCwgNjg2NDgsIDY4NjUyLCA2ODY1NiwgNjg2NjAsIDY4NjY0LCA2ODY2OCwgNjg2NzIsIDY4Njc2LCA2ODY4MCwgCi0gICAgNjg2ODQsIDY4Njg4LCA2ODY5MiwgNjg2OTYsIDY4NzAwLCA2ODcwNCwgNjg3MDgsIDY4NzEyLCA2ODcxNiwgNjg3MjAsIAotICAgIDY4NzI0LCA2ODcyOCwgNjg3MzIsIDY4NzM2LCA2ODc0MCwgMCwgMCwgMCwgNjg3NDQsIDY4NzQ4LCA2ODc1MiwgNjg3NTYsIAotICAgIDY4NzYwLCA2ODc2NCwgNjg3NjgsIDY4NzcyLCA2ODc3NiwgNjg3ODAsIDY4Nzg0LCA2ODc4OCwgNjg3OTIsIDY4Nzk2LCAKLSAgICA2ODgwMCwgNjg4MDQsIDY4ODA4LCA2ODgxMiwgNjg4MTYsIDY4ODIwLCA2ODgyNCwgNjg4MjgsIDY4ODMyLCA2ODgzNiwgCi0gICAgNjg4NDAsIDY4ODQ0LCA2ODg0OCwgNjg4NTIsIDY4ODU2LCA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIAotICAgIDY4ODgwLCA2ODg4NCwgNjg4ODgsIDY4ODkyLCA2ODg5NiwgNjg5MDAsIDY4OTA0LCA2ODkwOCwgNjg5MTIsIDY4OTE2LCAKLSAgICA2ODkyMCwgNjg5MjQsIDY4OTI4LCA2ODkzMiwgNjg5MzYsIDY4OTQwLCA2ODk0NCwgNjg5NDgsIDY4OTUyLCA2ODk1NiwgCi0gICAgNjg5NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4OTY0LCA2ODk2OSwgNjg5NzMsIDY4OTc4LCA2ODk4MywgCi0gICAgNjg5ODgsIDY4OTkzLCA2ODk5OCwgNjkwMDIsIDY5MDA3LCA2OTAxMiwgNjkwMTcsIDY5MDIyLCA2OTAyNywgNjkwMzIsIAotICAgIDY5MDM3LCA2OTA0MSwgNjkwNDUsIDY5MDUwLCA2OTA1NCwgNjkwNTksIDY5MDY0LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCAKLSAgICA2OTA4MywgNjkwODgsIDY5MDkzLCA2OTA5OCwgNjkxMDIsIDY5MTA3LCA2OTExMSwgNjkxMTYsIDY5MTIwLCA2OTEyNSwgCi0gICAgNjkxMjksIDY5MTMzLCA2OTEzNywgNjkxNDIsIDY5MTQ3LCA2OTE1MiwgNjkxNjAsIDY5MTY4LCA2OTE3NiwgNjkxODQsIAotICAgIDY5MTkxLCA2OTE5OSwgNjkyMDUsIDY5MjEzLCA2OTIxNywgNjkyMjEsIDY5MjI1LCA2OTIyOSwgNjkyMzMsIDY5MjM3LCAKLSAgICA2OTI0MSwgNjkyNDUsIDY5MjQ5LCA2OTI1MywgNjkyNTcsIDY5MjYxLCA2OTI2NSwgNjkyNjksIDY5MjczLCA2OTI3NywgCi0gICAgNjkyODEsIDY5Mjg1LCA2OTI4OSwgNjkyOTMsIDY5Mjk3LCA2OTMwMSwgNjkzMDUsIDY5MzA5LCA2OTMxMywgNjkzMTcsIAotICAgIDY5MzIxLCA2OTMyNSwgNjkzMjksIDY5MzMzLCA2OTMzNywgNjkzNDEsIDY5MzQ1LCA2OTM0OSwgNjkzNTMsIDY5MzU3LCAKLSAgICA2OTM2MCwgNjkzNjQsIDY5MzY4LCA2OTM3MiwgNjkzNzYsIDY5MzgwLCA2OTM4NCwgNjkzODgsIDY5MzkyLCA2OTM5NiwgCi0gICAgNjk0MDAsIDY5NDA0LCA2OTQwOCwgNjk0MTIsIDY5NDE2LCA2OTQyMCwgNjk0MjQsIDY5NDI4LCA2OTQzMiwgNjk0MzYsIAotICAgIDY5NDQwLCA2OTQ0NCwgNjk0NDgsIDY5NDUyLCA2OTQ1NiwgNjk0NjAsIDY5NDY0LCA2OTQ2OCwgNjk0NzIsIDY5NDc2LCAKLSAgICA2OTQ4MCwgNjk0ODQsIDY5NDg4LCA2OTQ5MiwgNjk0OTYsIDY5NTAwLCA2OTUwNCwgNjk1MDcsIDY5NTExLCA2OTUxNSwgCi0gICAgNjk1MTgsIDY5NTIyLCA2OTUyNiwgNjk1MzAsIDY5NTMzLCA2OTUzNywgNjk1NDEsIDY5NTQ1LCA2OTU0OSwgNjk1NTMsIAotICAgIDY5NTU3LCA2OTU2MSwgNjk1NjUsIDY5NTY5LCA2OTU3MywgNjk1NzcsIDY5NTgxLCA2OTU4NSwgNjk1ODksIDY5NTkyLCAKLSAgICA2OTU5NiwgNjk2MDAsIDY5NjAzLCA2OTYwNywgNjk2MTEsIDY5NjE1LCA2OTYxOSwgNjk2MjMsIDY5NjI3LCA2OTYzMCwgCi0gICAgNjk2MzMsIDY5NjM3LCA2OTY0MSwgNjk2NDUsIDY5NjQ4LCA2OTY1MSwgNjk2NTUsIDY5NjU5LCA2OTY2MywgNjk2NjcsIAotICAgIDY5NjcxLCA2OTY3NSwgNjk2NzksIDY5NjgzLCA2OTY4NywgNjk2OTEsIDY5Njk1LCA2OTY5OSwgNjk3MDMsIDY5NzA3LCAKLSAgICA2OTcxMSwgNjk3MTUsIDY5NzE5LCA2OTcyMywgNjk3MjcsIDY5NzMxLCA2OTczNSwgNjk3MzksIDY5NzQzLCA2OTc0NywgCi0gICAgNjk3NTEsIDY5NzU1LCA2OTc1OSwgNjk3NjMsIDY5NzY3LCA2OTc3MSwgNjk3NzUsIDY5Nzc5LCA2OTc4MywgNjk3ODcsIAotICAgIDY5NzkxLCA2OTc5NSwgNjk3OTksIDY5ODAyLCA2OTgwNiwgNjk4MTAsIDY5ODE0LCA2OTgxOCwgNjk4MjIsIDY5ODI2LCAKLSAgICA2OTgzMCwgNjk4MzQsIDY5ODM4LCA2OTg0MiwgNjk4NDYsIDY5ODUwLCA2OTg1NCwgNjk4NTgsIDY5ODYyLCA2OTg2NiwgCi0gICAgNjk4NzAsIDY5ODc0LCA2OTg3OCwgNjk4ODIsIDY5ODg2LCA2OTg5MCwgNjk4OTQsIDY5ODk4LCA2OTkwMiwgNjk5MDYsIAotICAgIDY5OTEwLCA2OTkxNCwgNjk5MTgsIDY5OTIyLCA2OTkyNiwgNjk5MzAsIDY5OTM0LCA2OTkzOCwgNjk5NDIsIDY5OTQ2LCAKLSAgICA2OTk0OSwgNjk5NTMsIDY5OTU3LCA2OTk2MSwgNjk5NjUsIDY5OTY5LCA2OTk3MywgNjk5NzcsIDY5OTgxLCA2OTk4NSwgCi0gICAgNjk5ODksIDY5OTkzLCA2OTk5NywgNzAwMDEsIDcwMDA1LCA3MDAwOSwgNzAwMTMsIDcwMDE2LCA3MDAyMCwgNzAwMjQsIAotICAgIDcwMDI4LCA3MDAzMiwgNzAwMzYsIDcwMDQwLCA3MDA0NCwgNzAwNDgsIDcwMDUyLCA3MDA1NiwgNzAwNjAsIDcwMDY0LCAKLSAgICA3MDA2OCwgNzAwNzIsIDcwMDc2LCA3MDA4MCwgNzAwODQsIDcwMDg4LCA3MDA5MiwgNzAwOTYsIDcwMTAwLCA3MDEwMywgCi0gICAgNzAxMDcsIDcwMTExLCA3MDExNSwgNzAxMTksIDcwMTIzLCA3MDEyNywgNzAxMzEsIDcwMTM1LCA3MDEzOSwgNzAxNDMsIAotICAgIDcwMTQ3LCA3MDE1MSwgNzAxNTUsIDcwMTU5LCA3MDE2MywgNzAxNjcsIDcwMTcxLCA3MDE3NSwgNzAxNzksIDcwMTgzLCAKLSAgICA3MDE4NywgNzAxOTEsIDcwMTk1LCA3MDE5OSwgNzAyMDMsIDcwMjA3LCA3MDIxMSwgNzAyMTUsIDcwMjE5LCA3MDIyMywgCi0gICAgNzAyMjcsIDcwMjMxLCA3MDIzNSwgNzAyMzksIDcwMjQzLCA3MDI0NywgNzAyNTEsIDcwMjU1LCA3MDI1OSwgNzAyNjMsIAotICAgIDcwMjY3LCA3MDI3MSwgNzAyNzUsIDcwMjc4LCA3MDI4MywgNzAyODcsIDcwMjkzLCA3MDI5OCwgNzAzMDQsIDcwMzA4LCAKLSAgICA3MDMxMiwgNzAzMTYsIDcwMzIwLCA3MDMyNCwgNzAzMjgsIDcwMzMyLCA3MDMzNiwgNzAzNDAsIDcwMzQ0LCA3MDM0OCwgCi0gICAgNzAzNTIsIDcwMzU2LCA3MDM2MCwgNzAzNjMsIDcwMzY2LCA3MDM2OSwgNzAzNzIsIDcwMzc1LCA3MDM3OCwgNzAzODEsIAotICAgIDcwMzg0LCA3MDM4NywgNzAzOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDcwMzk4LCA3MDQwMywgNzA0MDgsIDcwNDEzLCA3MDQxOCwgNzA0MjUsIDcwNDMyLCA3MDQzNywgNzA0NDIsIAotICAgIDcwNDQ3LCA3MDQ1MiwgNzA0NTksIDcwNDY2LCA3MDQ3MywgNzA0ODAsIDcwNDg3LCA3MDQ5NCwgNzA1MDQsIDcwNTE0LCAKLSAgICA3MDUyMSwgNzA1MjgsIDcwNTM1LCA3MDU0MiwgNzA1NDgsIDcwNTU0LCA3MDU2MywgNzA1NzIsIDcwNTc5LCA3MDU4NiwgCi0gICAgNzA1OTcsIDcwNjA4LCA3MDYxMywgNzA2MTgsIDcwNjI1LCA3MDYzMiwgNzA2MzksIDcwNjQ2LCA3MDY1MywgNzA2NjAsIAotICAgIDcwNjY3LCA3MDY3NCwgNzA2ODAsIDcwNjg2LCA3MDY5MiwgNzA2OTgsIDcwNzA1LCA3MDcxMiwgNzA3MTcsIDcwNzIxLCAKLSAgICA3MDcyOCwgNzA3MzUsIDcwNzQyLCA3MDc0NiwgNzA3NTMsIDcwNzU3LCA3MDc2MiwgNzA3NjYsIDcwNzcyLCA3MDc3NywgCi0gICAgNzA3ODMsIDcwNzg4LCA3MDc5MiwgNzA3OTYsIDcwNzk5LCA3MDgwMiwgNzA4MDcsIDcwODEyLCA3MDgxNywgNzA4MjIsIAotICAgIDcwODI3LCA3MDgzMiwgNzA4MzcsIDcwODQyLCA3MDg0NywgNzA4NTIsIDcwODYxLCA3MDg3MCwgNzA4NzUsIDcwODgwLCAKLSAgICA3MDg4NSwgNzA4OTAsIDcwODk1LCA3MDkwMCwgNzA5MDUsIDcwOTEwLCA3MDkxNSwgNzA5MjAsIDcwOTI1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3MDkzMCwgNzA5MzYsIDcwOTM5LCA3MDk0MiwgNzA5NDUsIDcwOTQ5LCA3MDk1MywgNzA5NTcsIAotICAgIDcwOTYxLCA3MDk2NCwgNzA5NjgsIDcwOTcxLCA3MDk3NSwgNzA5NzgsIDcwOTgyLCA3MDk4NiwgNzA5OTAsIDcwOTk0LCAKLSAgICA3MDk5OCwgNzEwMDIsIDcxMDA2LCA3MTAwOSwgNzEwMTMsIDcxMDE3LCA3MTAyMSwgNzEwMjUsIDcxMDI5LCA3MTAzMywgCi0gICAgNzEwMzcsIDcxMDQxLCA3MTA0NSwgNzEwNDksIDcxMDUzLCA3MTA1NywgNzEwNjEsIDcxMDY1LCA3MTA2OCwgNzEwNzIsIAotICAgIDcxMDc2LCA3MTA4MCwgNzEwODQsIDcxMDg4LCA3MTA5MiwgNzEwOTYsIDcxMTAwLCA3MTEwNCwgNzExMDgsIDcxMTEyLCAKLSAgICA3MTExNiwgNzExMjAsIDcxMTI0LCA3MTEyOCwgNzExMzIsIDcxMTM2LCA3MTE0MCwgNzExNDQsIDcxMTQ4LCA3MTE1MiwgCi0gICAgNzExNTYsIDcxMTYwLCA3MTE2NCwgNzExNjcsIDcxMTcxLCA3MTE3NSwgNzExNzksIDcxMTgzLCA3MTE4NywgNzExOTEsIAotICAgIDcxMTk1LCA3MTE5OCwgNzEyMDIsIDcxMjA2LCA3MTIxMCwgNzEyMTQsIDcxMjE4LCA3MTIyMiwgNzEyMjYsIDcxMjMwLCAKLSAgICA3MTIzNCwgNzEyMzgsIDcxMjQyLCA3MTI0NiwgNzEyNTEsIDcxMjU2LCA3MTI1OSwgNzEyNjQsIDcxMjY3LCA3MTI3MCwgCi0gICAgNzEyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMjc3LCA3MTI4NiwgNzEyOTUsIDcxMzA0LCA3MTMxMywgNzEzMjIsIAotICAgIDcxMzMxLCA3MTM0MCwgNzEzNDksIDcxMzU3LCA3MTM2NCwgNzEzNzIsIDcxMzc5LCA3MTM4NywgNzEzOTcsIDcxNDA2LCAKLSAgICA3MTQxNiwgNzE0MjUsIDcxNDM1LCA3MTQ0MywgNzE0NTAsIDcxNDU4LCA3MTQ2NSwgNzE0NzMsIDcxNDc4LCA3MTQ4MywgCi0gICAgNzE0ODgsIDcxNDk3LCA3MTUwMywgNzE1MDksIDcxNTE2LCA3MTUyNSwgNzE1MzMsIDcxNTQxLCA3MTU0OSwgNzE1NTYsIAotICAgIDcxNTYzLCA3MTU3MCwgNzE1NzcsIDcxNTgyLCA3MTU4NywgNzE1OTIsIDcxNTk3LCA3MTYwMiwgNzE2MDcsIDcxNjEyLCAKLSAgICA3MTYxNywgNzE2MjUsIDcxNjMzLCA3MTYzOSwgNzE2NDUsIDcxNjUwLCA3MTY1NSwgNzE2NjAsIDcxNjY1LCA3MTY3MCwgCi0gICAgNzE2NzUsIDcxNjgwLCA3MTY4NSwgNzE2OTMsIDcxNzAxLCA3MTcwNiwgNzE3MTEsIDcxNzIxLCA3MTczMSwgNzE3MzgsIAotICAgIDcxNzQ1LCA3MTc1NCwgNzE3NjMsIDcxNzc1LCA3MTc4NywgNzE3OTMsIDcxNzk5LCA3MTgwNywgNzE4MTUsIDcxODI1LCAKLSAgICA3MTgzNSwgNzE4NDIsIDcxODQ5LCA3MTg1NCwgNzE4NTksIDcxODcxLCA3MTg4MywgNzE4OTEsIDcxODk5LCA3MTkwOSwgCi0gICAgNzE5MTksIDcxOTMxLCA3MTk0MywgNzE5NTIsIDcxOTYxLCA3MTk2OCwgNzE5NzUsIDcxOTgyLCA3MTk4OSwgNzE5OTgsIAotICAgIDcyMDA3LCA3MjAxMiwgNzIwMTcsIDcyMDI0LCA3MjAzMSwgNzIwMzgsIDcyMDQ1LCA3MjA1NywgNzIwNjksIDcyMDc0LCAKLSAgICA3MjA3OSwgNzIwODQsIDcyMDg5LCA3MjA5NCwgNzIwOTksIDcyMTA0LCA3MjEwOSwgNzIxMTMsIDcyMTE4LCA3MjEyMywgCi0gICAgNzIxMjgsIDcyMTMzLCA3MjEzOCwgNzIxNDQsIDcyMTQ5LCA3MjE1NCwgNzIxNjEsIDcyMTY4LCA3MjE3NSwgNzIxODIsIAotICAgIDcyMTg5LCA3MjE5OCwgNzIyMDcsIDcyMjEzLCA3MjIxOSwgNzIyMjUsIDcyMjMxLCA3MjIzOCwgNzIyNDUsIDcyMjUyLCAKLSAgICA3MjI1OSwgNzIyNjYsIDcyMjcwLCA3MjI3NywgNzIyODIsIDcyMjg3LCA3MjI5NCwgMCwgNzIzMDcsIDcyMzE1LCA3MjMyMywgCi0gICAgNzIzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMzM3LCA3MjM0NiwgNzIzNTUsIDcyMzY0LCAKLSAgICA3MjM3MywgNzIzODIsIDcyMzkxLCA3MjQwMCwgNzI0MDksIDcyNDE4LCA3MjQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjM3MDYsIDYzNzE1LCA2MzcyNCwgNjM3MzUsIDYzNzQyLCA2Mzc0NywgNjM3NTIsIDYzNzU5LCA2Mzc2NiwgCisgICAgNjM3NzIsIDYzNzc3LCA2Mzc4MiwgNjM3ODcsIDYzNzkyLCA2Mzc5OSwgNjM4MDQsIDYzODA5LCA2MzgxNCwgNjM4MjUsIAorICAgIDYzODMwLCA2MzgzNSwgNjM4NDIsIDYzODQ3LCA2Mzg1NCwgNjM4NTksIDYzODY0LCA2Mzg3MSwgNjM4NzgsIDYzODg1LCAKKyAgICA2Mzg5NCwgNjM5MDMsIDYzOTA4LCA2MzkxMywgNjM5MTgsIDYzOTI1LCA2MzkzMCwgNjM5NDAsIDYzOTQ3LCA2Mzk1MiwgCisgICAgNjM5NTcsIDYzOTYyLCA2Mzk2NywgNjM5NzIsIDYzOTc3LCA2Mzk4NiwgNjM5OTMsIDY0MDAwLCA2NDAwNSwgNjQwMTIsIAorICAgIDY0MDE3LCA2NDAyNCwgNjQwMzMsIDY0MDQ0LCA2NDA0OSwgNjQwNTgsIDY0MDYzLCA2NDA3MCwgNjQwNzksIDY0MDg4LCAKKyAgICA2NDA5MywgNjQwOTgsIDY0MTA1LCA2NDExMSwgNjQxMTgsIDY0MTI1LCA2NDEyOSwgNjQxMzMsIDY0MTM2LCA2NDE0MCwgCisgICAgNjQxNDQsIDY0MTQ4LCA2NDE1MiwgNjQxNTYsIDY0MTYwLCA2NDE2NCwgNjQxNjcsIDY0MTcxLCA2NDE3NSwgNjQxNzksIAorICAgIDY0MTgzLCA2NDE4NywgNjQxOTEsIDY0MTk0LCA2NDE5OCwgNjQyMDIsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE3LCAKKyAgICA2NDIyMSwgNjQyMjUsIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIDY0MjUzLCA2NDI1NywgCisgICAgNjQyNjEsIDY0MjY1LCA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCA2NDI5MywgNjQyOTcsIAorICAgIDY0MzAxLCA2NDMwNSwgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgNjQzMzMsIDY0MzM3LCAKKyAgICA2NDM0MSwgNjQzNDUsIDY0MzQ5LCA2NDM1MywgNjQzNTcsIDY0MzYxLCA2NDM2NSwgNjQzNjksIDY0MzczLCA2NDM3NywgCisgICAgNjQzODEsIDY0Mzg0LCA2NDM4OCwgNjQzOTIsIDY0Mzk2LCA2NDQwMCwgNjQ0MDQsIDY0NDA4LCA2NDQxMiwgNjQ0MTYsIAorICAgIDY0NDIwLCA2NDQyNCwgNjQ0MjgsIDY0NDMyLCA2NDQzNiwgNjQ0NDAsIDY0NDQ0LCA2NDQ0OCwgNjQ0NTIsIDY0NDU2LCAKKyAgICA2NDQ2MCwgNjQ0NjQsIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIDY0NDkyLCA2NDQ5NiwgCisgICAgNjQ1MDAsIDY0NTA0LCA2NDUwOCwgNjQ1MTIsIDY0NTE2LCA2NDUyMCwgNjQ1MjQsIDY0NTI4LCA2NDUzMiwgNjQ1MzYsIAorICAgIDY0NTQwLCA2NDU0NCwgNjQ1NDgsIDY0NTUyLCA2NDU1NiwgNjQ1NjAsIDY0NTY0LCA2NDU2OCwgNjQ1NzIsIDY0NTc2LCAKKyAgICA2NDU4MCwgNjQ1ODQsIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIDY0NjEyLCA2NDYxNiwgCisgICAgNjQ2MjAsIDY0NjI0LCA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCA2NDY1MiwgNjQ2NTYsIAorICAgIDY0NjYwLCA2NDY2NCwgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgNjQ2OTIsIDY0Njk2LCAKKyAgICA2NDcwMCwgNjQ3MDQsIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIDY0NzMyLCA2NDczNiwgCisgICAgNjQ3NDAsIDY0NzQ0LCA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCA2NDc3MiwgNjQ3NzYsIAorICAgIDY0NzgwLCA2NDc4NCwgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgNjQ4MTIsIDY0ODE2LCAKKyAgICA2NDgyMCwgNjQ4MjQsIDY0ODI4LCA2NDgzMiwgNjQ4MzYsIDY0ODQwLCA2NDg0NCwgNjQ4NDgsIDY0ODUyLCA2NDg1NSwgCisgICAgNjQ4NTksIDY0ODYzLCA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCA2NDg5MSwgNjQ4OTUsIAorICAgIDY0ODk5LCA2NDkwMywgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgNjQ5MzEsIDY0OTM1LCAKKyAgICA2NDkzOSwgNjQ5NDMsIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIDY0OTcxLCA2NDk3NSwgCisgICAgNjQ5NzksIDY0OTgzLCA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCA2NTAxMSwgNjUwMTUsIAorICAgIDY1MDE5LCA2NTAyMywgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgNjUwNTEsIDY1MDU1LCAKKyAgICA2NTA1OSwgNjUwNjMsIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIDY1MDkxLCA2NTA5NSwgCisgICAgNjUwOTksIDY1MTAzLCA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCA2NTEzMSwgNjUxMzUsIAorICAgIDY1MTM5LCA2NTE0MywgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgNjUxNzEsIDY1MTc1LCAKKyAgICA2NTE3OSwgNjUxODMsIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjExLCA2NTIxNSwgCisgICAgNjUyMTksIDY1MjIzLCA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCA2NTI1MSwgNjUyNTUsIAorICAgIDY1MjU5LCA2NTI2MywgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgNjUyOTEsIDY1Mjk1LCAKKyAgICA2NTI5OSwgNjUzMDMsIDY1MzA3LCA2NTMxMSwgNjUzMTUsIDY1MzE4LCA2NTMyMiwgNjUzMjYsIDY1MzMwLCA2NTMzNCwgCisgICAgNjUzMzgsIDY1MzQyLCA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCA2NTM3MCwgNjUzNzQsIAorICAgIDY1Mzc4LCA2NTM4MiwgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgNjU0MTAsIDY1NDE0LCAKKyAgICA2NTQxOCwgNjU0MjIsIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIDY1NDUwLCA2NTQ1NCwgCisgICAgNjU0NTgsIDY1NDYyLCA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCA2NTQ5MCwgNjU0OTQsIAorICAgIDY1NDk4LCA2NTUwMiwgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgNjU1MzAsIDY1NTM0LCAKKyAgICA2NTUzOCwgNjU1NDIsIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIDY1NTcwLCA2NTU3NCwgCisgICAgNjU1NzgsIDY1NTgyLCA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCA2NTYxMCwgNjU2MTQsIAorICAgIDY1NjE4LCA2NTYyMiwgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgNjU2NTAsIDY1NjU0LCAKKyAgICA2NTY1OCwgNjU2NjIsIDY1NjY2LCA2NTY3MCwgNjU2NzQsIDY1Njc3LCA2NTY4MSwgNjU2ODUsIDY1Njg5LCA2NTY5MywgCisgICAgNjU2OTcsIDY1NzAxLCA2NTcwNSwgNjU3MDksIDY1NzEzLCA2NTcxNywgNjU3MjEsIDY1NzI1LCA2NTcyOSwgNjU3MzMsIAorICAgIDY1NzM3LCA2NTc0MSwgNjU3NDUsIDY1NzQ5LCA2NTc1MywgNjU3NTcsIDY1NzYxLCA2NTc2NSwgNjU3NjksIDY1NzczLCAKKyAgICA2NTc3NywgNjU3ODEsIDY1Nzg1LCA2NTc4OSwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIDY1ODA5LCA2NTgxMywgCisgICAgNjU4MTcsIDY1ODIxLCA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCA2NTg0OSwgNjU4NTMsIAorICAgIDY1ODU3LCA2NTg2MSwgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgNjU4ODksIDY1ODkzLCAKKyAgICA2NTg5NywgNjU5MDEsIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIDY1OTI5LCA2NTkzMywgCisgICAgNjU5MzcsIDY1OTQxLCA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCA2NTk2OSwgNjU5NzMsIAorICAgIDY1OTc3LCA2NTk4MSwgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgNjYwMDksIDY2MDEzLCAKKyAgICA2NjAxNywgNjYwMjEsIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIDY2MDQ5LCA2NjA1MywgCisgICAgNjYwNTcsIDY2MDYxLCA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCA2NjA4OSwgNjYwOTMsIAorICAgIDY2MDk3LCA2NjEwMSwgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgNjYxMjksIDY2MTMzLCAKKyAgICA2NjEzNywgNjYxNDEsIDY2MTQ1LCA2NjE0OSwgNjYxNTMsIDY2MTU3LCA2NjE2MSwgNjYxNjUsIDY2MTY5LCA2NjE3MiwgCisgICAgNjYxNzYsIDY2MTgwLCA2NjE4NCwgNjYxODgsIDY2MTkyLCA2NjE5NiwgNjYyMDAsIDY2MjA0LCA2NjIwOCwgNjYyMTIsIAorICAgIDY2MjE2LCA2NjIyMCwgNjYyMjQsIDY2MjI4LCA2NjIzMiwgNjYyMzYsIDY2MjQwLCA2NjI0NCwgNjYyNDgsIDY2MjUyLCAKKyAgICA2NjI1NiwgNjYyNjAsIDY2MjY0LCA2NjI2OCwgNjYyNzIsIDY2Mjc2LCA2NjI4MCwgNjYyODQsIDY2Mjg4LCA2NjI5MiwgCisgICAgNjYyOTYsIDY2MzAwLCA2NjMwNCwgNjYzMDgsIDY2MzEyLCA2NjMxNiwgNjYzMjAsIDY2MzI0LCA2NjMyOCwgNjYzMzIsIAorICAgIDY2MzM2LCA2NjM0MCwgNjYzNDQsIDY2MzQ4LCA2NjM1MiwgNjYzNTYsIDY2MzYwLCA2NjM2NCwgNjYzNjgsIDY2MzcyLCAKKyAgICA2NjM3NiwgNjYzODAsIDY2Mzg0LCA2NjM4OCwgNjYzOTIsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIDY2NDA4LCA2NjQxMiwgCisgICAgNjY0MTYsIDY2NDIwLCA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCA2NjQ0OCwgNjY0NTIsIAorICAgIDY2NDU2LCA2NjQ2MCwgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgNjY0ODgsIDY2NDkyLCAKKyAgICA2NjQ5NiwgNjY1MDAsIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIDY2NTI4LCA2NjUzMiwgCisgICAgNjY1MzYsIDY2NTQwLCA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCA2NjU2OCwgNjY1NzIsIAorICAgIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NjAwLCA2NjYwNCwgNjY2MDgsIDY2NjEyLCAKKyAgICA2NjYxNiwgNjY2MjAsIDY2NjI0LCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIDY2NjQ3LCA2NjY1MSwgCisgICAgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCA2NjY4NywgNjY2OTEsIAorICAgIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgNjY3MjcsIDY2NzMxLCAKKyAgICA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIDY2NzY3LCA2Njc3MSwgCisgICAgNjY3NzUsIDY2Nzc5LCA2Njc4MywgNjY3ODcsIDY2NzkxLCA2Njc5NSwgNjY3OTksIDY2ODAzLCA2NjgwNywgNjY4MTEsIAorICAgIDY2ODE1LCA2NjgxOSwgNjY4MjMsIDY2ODI3LCA2NjgzMSwgNjY4MzUsIDY2ODM5LCA2Njg0MywgNjY4NDcsIDY2ODUxLCAKKyAgICA2Njg1NSwgNjY4NTksIDY2ODYzLCA2Njg2NywgNjY4NzEsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIDY2ODg3LCA2Njg5MSwgCisgICAgNjY4OTUsIDY2ODk5LCA2NjkwMywgNjY5MDcsIDY2OTExLCA2NjkxNSwgNjY5MTksIDY2OTIzLCA2NjkyNywgNjY5MzEsIAorICAgIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MSwgNjY5NTUsIDY2OTU5LCA2Njk2MywgNjY5NjcsIDY2OTcxLCAKKyAgICA2Njk3NSwgNjY5NzksIDY2OTgzLCA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIDY3MDA3LCA2NzAxMSwgCisgICAgNjcwMTUsIDY3MDE5LCA2NzAyMywgNjcwMjcsIDY3MDMxLCA2NzAzNSwgNjcwMzksIDY3MDQzLCA2NzA0NywgNjcwNTEsIAorICAgIDY3MDU1LCA2NzA1OSwgNjcwNjMsIDY3MDY3LCA2NzA3MSwgNjcwNzUsIDY3MDc5LCA2NzA4MywgNjcwODcsIDY3MDkxLCAKKyAgICA2NzA5NSwgNjcwOTksIDY3MTAzLCA2NzEwNywgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjMsIDY3MTI3LCA2NzEzMSwgCisgICAgNjcxMzUsIDY3MTM5LCA2NzE0MywgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTksIDY3MTYzLCA2NzE2NywgNjcxNzEsIAorICAgIDY3MTc1LCA2NzE3OSwgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMywgNjcyMDcsIDY3MjExLCAKKyAgICA2NzIxNSwgNjcyMTksIDY3MjIzLCA2NzIyNywgNjcyMzAsIDY3MjM0LCA2NzIzOCwgNjcyNDIsIDY3MjQ2LCA2NzI1MCwgCisgICAgNjcyNTQsIDY3MjU4LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCA2NzI4NSwgNjcyODksIAorICAgIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgNjczMjUsIDY3MzI5LCAKKyAgICA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIDY3MzY1LCA2NzM2OSwgCisgICAgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCA2NzQwNSwgNjc0MDksIAorICAgIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgNjc0NDUsIDY3NDQ5LCAKKyAgICA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIDY3NDg1LCA2NzQ4OSwgCisgICAgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCA2NzUyNSwgNjc1MjksIAorICAgIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgNjc1NjUsIDY3NTY5LCAKKyAgICA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIDY3NjA1LCA2NzYwOSwgCisgICAgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCA2NzY0NSwgNjc2NDksIAorICAgIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgNjc2ODUsIDY3Njg5LCAKKyAgICA2NzY5MywgNjc2OTcsIDY3NzAxLCA2NzcwNSwgNjc3MDksIDY3NzEzLCA2NzcxNywgNjc3MjEsIDY3NzI1LCA2NzcyOSwgCisgICAgNjc3MzMsIDY3NzM3LCA2Nzc0MSwgNjc3NDUsIDY3NzQ5LCA2Nzc1MywgNjc3NTcsIDY3NzYxLCA2Nzc2NSwgNjc3NjksIAorICAgIDY3NzczLCA2Nzc3NywgNjc3ODEsIDY3Nzg1LCA2Nzc4OSwgNjc3OTMsIDY3Nzk3LCA2NzgwMSwgNjc4MDUsIDY3ODA5LCAKKyAgICA2NzgxMywgNjc4MTcsIDY3ODIxLCA2NzgyNSwgNjc4MjksIDY3ODMzLCA2NzgzNywgNjc4NDEsIDY3ODQ1LCA2Nzg0OSwgCisgICAgNjc4NTMsIDY3ODU3LCA2Nzg2MSwgNjc4NjUsIDY3ODY5LCA2Nzg3MywgNjc4NzcsIDY3ODgxLCA2Nzg4NSwgNjc4ODksIAorICAgIDY3ODkzLCA2Nzg5NywgNjc5MDEsIDY3OTA1LCA2NzkwOSwgNjc5MTMsIDY3OTE3LCA2NzkyMSwgNjc5MjUsIDY3OTI5LCAKKyAgICA2NzkzMywgNjc5MzcsIDY3OTQxLCA2Nzk0NSwgNjc5NDksIDY3OTUzLCA2Nzk1NywgNjc5NjEsIDY3OTY1LCA2Nzk2OSwgCisgICAgNjc5NzMsIDY3OTc3LCA2Nzk4MSwgNjc5ODUsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCA2ODAwNCwgNjgwMDgsIAorICAgIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgNjgwNDQsIDY4MDQ4LCAKKyAgICA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIDY4MDg0LCA2ODA4OCwgCisgICAgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCA2ODEyNCwgNjgxMjgsIAorICAgIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgNjgxNjQsIDY4MTY4LCAKKyAgICA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIDY4MjA0LCA2ODIwOCwgCisgICAgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCA2ODI0NCwgNjgyNDgsIAorICAgIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgNjgyODQsIDY4Mjg4LCAKKyAgICA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIDY4MzI0LCA2ODMyOCwgCisgICAgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCA2ODM2NCwgNjgzNjgsIAorICAgIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgNjg0MDQsIDY4NDA4LCAKKyAgICA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIDY4NDQ0LCA2ODQ0OCwgCisgICAgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCA2ODQ4NCwgNjg0ODgsIAorICAgIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgNjg1MjQsIDY4NTI4LCAKKyAgICA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NiwgNjg1NjAsIDY4NTY0LCA2ODU2OCwgCisgICAgNjg1NzIsIDY4NTc2LCA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCA2ODYwNCwgNjg2MDgsIAorICAgIDY4NjEyLCA2ODYxNiwgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgNjg2NDQsIDY4NjQ4LCAKKyAgICA2ODY1MiwgNjg2NTYsIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIDY4Njg0LCA2ODY4OCwgCisgICAgNjg2OTIsIDY4Njk2LCA2ODcwMCwgNjg3MDQsIDY4NzA4LCA2ODcxMiwgNjg3MTYsIDY4NzIwLCA2ODcyNCwgNjg3MjgsIAorICAgIDY4NzMyLCA2ODczNiwgNjg3NDAsIDY4NzQ0LCA2ODc0OCwgNjg3NTIsIDY4NzU2LCA2ODc2MCwgNjg3NjQsIDY4NzY4LCAwLCAKKyAgICAwLCAwLCA2ODc3MiwgNjg3NzYsIDY4NzgwLCA2ODc4NCwgNjg3ODgsIDY4NzkyLCA2ODc5NiwgNjg4MDAsIDY4ODA0LCAKKyAgICA2ODgwOCwgNjg4MTIsIDY4ODE2LCA2ODgyMCwgNjg4MjQsIDY4ODI4LCA2ODgzMiwgNjg4MzYsIDY4ODQwLCA2ODg0NCwgCisgICAgNjg4NDgsIDY4ODUyLCA2ODg1NiwgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCA2ODg4MCwgNjg4ODQsIAorICAgIDY4ODg4LCA2ODg5MiwgNjg4OTYsIDY4OTAwLCA2ODkwNCwgNjg5MDgsIDY4OTEyLCA2ODkxNiwgNjg5MjAsIDY4OTI0LCAKKyAgICA2ODkyOCwgNjg5MzIsIDY4OTM2LCA2ODk0MCwgNjg5NDQsIDY4OTQ4LCA2ODk1MiwgNjg5NTYsIDY4OTYwLCA2ODk2NCwgCisgICAgNjg5NjgsIDY4OTcyLCA2ODk3NiwgNjg5ODAsIDY4OTg0LCA2ODk4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjg5OTIsIDY4OTk3LCA2OTAwMSwgNjkwMDYsIDY5MDExLCA2OTAxNiwgNjkwMjEsIDY5MDI2LCA2OTAzMCwgNjkwMzUsIAorICAgIDY5MDQwLCA2OTA0NSwgNjkwNTAsIDY5MDU1LCA2OTA2MCwgNjkwNjUsIDY5MDY5LCA2OTA3MywgNjkwNzgsIDY5MDgyLCAKKyAgICA2OTA4NywgNjkwOTIsIDY5MDk3LCA2OTEwMSwgNjkxMDYsIDY5MTExLCA2OTExNiwgNjkxMjEsIDY5MTI2LCA2OTEzMCwgCisgICAgNjkxMzUsIDY5MTM5LCA2OTE0NCwgNjkxNDgsIDY5MTUzLCA2OTE1NywgNjkxNjEsIDY5MTY1LCA2OTE3MCwgNjkxNzUsIAorICAgIDY5MTgwLCA2OTE4OCwgNjkxOTYsIDY5MjA0LCA2OTIxMiwgNjkyMTksIDY5MjI3LCA2OTIzMywgNjkyNDEsIDY5MjQ1LCAKKyAgICA2OTI0OSwgNjkyNTMsIDY5MjU3LCA2OTI2MSwgNjkyNjUsIDY5MjY5LCA2OTI3MywgNjkyNzcsIDY5MjgxLCA2OTI4NSwgCisgICAgNjkyODksIDY5MjkzLCA2OTI5NywgNjkzMDEsIDY5MzA1LCA2OTMwOSwgNjkzMTMsIDY5MzE3LCA2OTMyMSwgNjkzMjUsIAorICAgIDY5MzI5LCA2OTMzMywgNjkzMzcsIDY5MzQxLCA2OTM0NSwgNjkzNDksIDY5MzUzLCA2OTM1NywgNjkzNjEsIDY5MzY1LCAKKyAgICA2OTM2OSwgNjkzNzMsIDY5Mzc3LCA2OTM4MSwgNjkzODUsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIDY5NDAwLCA2OTQwNCwgCisgICAgNjk0MDgsIDY5NDEyLCA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCA2OTQ0MCwgNjk0NDQsIAorICAgIDY5NDQ4LCA2OTQ1MiwgNjk0NTYsIDY5NDYwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgNjk0ODAsIDY5NDg0LCAKKyAgICA2OTQ4OCwgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA4LCA2OTUxMiwgNjk1MTYsIDY5NTIwLCA2OTUyNCwgCisgICAgNjk1MjgsIDY5NTMyLCA2OTUzNSwgNjk1MzksIDY5NTQzLCA2OTU0NiwgNjk1NTAsIDY5NTU0LCA2OTU1OCwgNjk1NjEsIAorICAgIDY5NTY1LCA2OTU2OSwgNjk1NzMsIDY5NTc3LCA2OTU4MSwgNjk1ODUsIDY5NTg5LCA2OTU5MywgNjk1OTcsIDY5NjAxLCAKKyAgICA2OTYwNSwgNjk2MDksIDY5NjEzLCA2OTYxNywgNjk2MjAsIDY5NjI0LCA2OTYyOCwgNjk2MzEsIDY5NjM1LCA2OTYzOSwgCisgICAgNjk2NDMsIDY5NjQ3LCA2OTY1MSwgNjk2NTUsIDY5NjU4LCA2OTY2MSwgNjk2NjUsIDY5NjY5LCA2OTY3MywgNjk2NzYsIAorICAgIDY5Njc5LCA2OTY4MywgNjk2ODcsIDY5NjkxLCA2OTY5NSwgNjk2OTksIDY5NzAzLCA2OTcwNywgNjk3MTEsIDY5NzE1LCAKKyAgICA2OTcxOSwgNjk3MjMsIDY5NzI3LCA2OTczMSwgNjk3MzUsIDY5NzM5LCA2OTc0MywgNjk3NDcsIDY5NzUxLCA2OTc1NSwgCisgICAgNjk3NTksIDY5NzYzLCA2OTc2NywgNjk3NzEsIDY5Nzc1LCA2OTc3OSwgNjk3ODMsIDY5Nzg3LCA2OTc5MSwgNjk3OTUsIAorICAgIDY5Nzk5LCA2OTgwMywgNjk4MDcsIDY5ODExLCA2OTgxNSwgNjk4MTksIDY5ODIzLCA2OTgyNywgNjk4MzAsIDY5ODM0LCAKKyAgICA2OTgzOCwgNjk4NDIsIDY5ODQ2LCA2OTg1MCwgNjk4NTQsIDY5ODU4LCA2OTg2MiwgNjk4NjYsIDY5ODcwLCA2OTg3NCwgCisgICAgNjk4NzgsIDY5ODgyLCA2OTg4NiwgNjk4OTAsIDY5ODk0LCA2OTg5OCwgNjk5MDIsIDY5OTA2LCA2OTkxMCwgNjk5MTQsIAorICAgIDY5OTE4LCA2OTkyMiwgNjk5MjYsIDY5OTMwLCA2OTkzNCwgNjk5MzgsIDY5OTQyLCA2OTk0NiwgNjk5NTAsIDY5OTU0LCAKKyAgICA2OTk1OCwgNjk5NjIsIDY5OTY2LCA2OTk3MCwgNjk5NzQsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIDY5OTg5LCA2OTk5MywgCisgICAgNjk5OTcsIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNywgNzAwMjEsIDcwMDI1LCA3MDAyOSwgNzAwMzMsIAorICAgIDcwMDM3LCA3MDA0MSwgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgNzAwNjgsIDcwMDcyLCAKKyAgICA3MDA3NiwgNzAwODAsIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDQsIDcwMTA4LCA3MDExMiwgCisgICAgNzAxMTYsIDcwMTIwLCA3MDEyNCwgNzAxMjgsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCA3MDE0NywgNzAxNTEsIAorICAgIDcwMTU1LCA3MDE1OSwgNzAxNjMsIDcwMTY3LCA3MDE3MSwgNzAxNzUsIDcwMTc5LCA3MDE4MywgNzAxODcsIDcwMTkxLCAKKyAgICA3MDE5NSwgNzAxOTksIDcwMjAzLCA3MDIwNywgNzAyMTEsIDcwMjE1LCA3MDIxOSwgNzAyMjMsIDcwMjI3LCA3MDIzMSwgCisgICAgNzAyMzUsIDcwMjM5LCA3MDI0MywgNzAyNDcsIDcwMjUxLCA3MDI1NSwgNzAyNTksIDcwMjYzLCA3MDI2NywgNzAyNzEsIAorICAgIDcwMjc1LCA3MDI3OSwgNzAyODMsIDcwMjg3LCA3MDI5MSwgNzAyOTUsIDcwMjk5LCA3MDMwMywgNzAzMDYsIDcwMzExLCAKKyAgICA3MDMxNSwgNzAzMjEsIDcwMzI2LCA3MDMzMiwgNzAzMzYsIDcwMzQwLCA3MDM0NCwgNzAzNDgsIDcwMzUyLCA3MDM1NiwgCisgICAgNzAzNjAsIDcwMzY0LCA3MDM2OCwgNzAzNzIsIDcwMzc2LCA3MDM4MCwgNzAzODQsIDcwMzg4LCA3MDM5MSwgNzAzOTQsIAorICAgIDcwMzk3LCA3MDQwMCwgNzA0MDMsIDcwNDA2LCA3MDQwOSwgNzA0MTIsIDcwNDE1LCA3MDQyMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA0MjYsIDcwNDMxLCA3MDQzNiwgNzA0NDEsIAorICAgIDcwNDQ2LCA3MDQ1MywgNzA0NjAsIDcwNDY1LCA3MDQ3MCwgNzA0NzUsIDcwNDgwLCA3MDQ4NywgNzA0OTQsIDcwNTAxLCAKKyAgICA3MDUwOCwgNzA1MTUsIDcwNTIyLCA3MDUzMiwgNzA1NDIsIDcwNTQ5LCA3MDU1NiwgNzA1NjMsIDcwNTcwLCA3MDU3NiwgCisgICAgNzA1ODIsIDcwNTkxLCA3MDYwMCwgNzA2MDcsIDcwNjE0LCA3MDYyNSwgNzA2MzYsIDcwNjQxLCA3MDY0NiwgNzA2NTMsIAorICAgIDcwNjYwLCA3MDY2NywgNzA2NzQsIDcwNjgxLCA3MDY4OCwgNzA2OTUsIDcwNzAyLCA3MDcwOCwgNzA3MTQsIDcwNzIwLCAKKyAgICA3MDcyNiwgNzA3MzMsIDcwNzQwLCA3MDc0NSwgNzA3NDksIDcwNzU2LCA3MDc2MywgNzA3NzAsIDcwNzc0LCA3MDc4MSwgCisgICAgNzA3ODUsIDcwNzkwLCA3MDc5NCwgNzA4MDAsIDcwODA1LCA3MDgxMSwgNzA4MTYsIDcwODIwLCA3MDgyNCwgNzA4MjcsIAorICAgIDcwODMwLCA3MDgzNSwgNzA4NDAsIDcwODQ1LCA3MDg1MCwgNzA4NTUsIDcwODYwLCA3MDg2NSwgNzA4NzAsIDcwODc1LCAKKyAgICA3MDg4MCwgNzA4ODksIDcwODk4LCA3MDkwMywgNzA5MDgsIDcwOTEzLCA3MDkxOCwgNzA5MjMsIDcwOTI4LCA3MDkzMywgCisgICAgNzA5MzgsIDcwOTQzLCA3MDk0OCwgNzA5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwOTU4LCA3MDk2NCwgNzA5NjcsIAorICAgIDcwOTcwLCA3MDk3MywgNzA5NzcsIDcwOTgxLCA3MDk4NSwgNzA5ODksIDcwOTkyLCA3MDk5NiwgNzA5OTksIDcxMDAzLCAKKyAgICA3MTAwNiwgNzEwMTAsIDcxMDE0LCA3MTAxOCwgNzEwMjIsIDcxMDI2LCA3MTAzMCwgNzEwMzQsIDcxMDM3LCA3MTA0MSwgCisgICAgNzEwNDUsIDcxMDQ5LCA3MTA1MywgNzEwNTcsIDcxMDYxLCA3MTA2NSwgNzEwNjksIDcxMDczLCA3MTA3NywgNzEwODEsIAorICAgIDcxMDg1LCA3MTA4OSwgNzEwOTMsIDcxMDk2LCA3MTEwMCwgNzExMDQsIDcxMTA4LCA3MTExMiwgNzExMTYsIDcxMTIwLCAKKyAgICA3MTEyNCwgNzExMjgsIDcxMTMyLCA3MTEzNiwgNzExNDAsIDcxMTQ0LCA3MTE0OCwgNzExNTIsIDcxMTU2LCA3MTE2MCwgCisgICAgNzExNjQsIDcxMTY4LCA3MTE3MiwgNzExNzYsIDcxMTgwLCA3MTE4NCwgNzExODgsIDcxMTkyLCA3MTE5NSwgNzExOTksIAorICAgIDcxMjAzLCA3MTIwNywgNzEyMTEsIDcxMjE1LCA3MTIxOSwgNzEyMjMsIDcxMjI2LCA3MTIzMCwgNzEyMzQsIDcxMjM4LCAKKyAgICA3MTI0MiwgNzEyNDYsIDcxMjUwLCA3MTI1NCwgNzEyNTgsIDcxMjYyLCA3MTI2NiwgNzEyNzAsIDcxMjc0LCA3MTI3OSwgCisgICAgNzEyODQsIDcxMjg3LCA3MTI5MiwgNzEyOTUsIDcxMjk4LCA3MTMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzEzMDUsIAorICAgIDcxMzE0LCA3MTMyMywgNzEzMzIsIDcxMzQxLCA3MTM1MCwgNzEzNTksIDcxMzY4LCA3MTM3NywgNzEzODUsIDcxMzkyLCAKKyAgICA3MTQwMCwgNzE0MDcsIDcxNDE1LCA3MTQyNSwgNzE0MzQsIDcxNDQ0LCA3MTQ1MywgNzE0NjMsIDcxNDcxLCA3MTQ3OCwgCisgICAgNzE0ODYsIDcxNDkzLCA3MTUwMSwgNzE1MDYsIDcxNTExLCA3MTUxNiwgNzE1MjUsIDcxNTMxLCA3MTUzNywgNzE1NDQsIAorICAgIDcxNTUzLCA3MTU2MSwgNzE1NjksIDcxNTc3LCA3MTU4NCwgNzE1OTEsIDcxNTk4LCA3MTYwNSwgNzE2MTAsIDcxNjE1LCAKKyAgICA3MTYyMCwgNzE2MjUsIDcxNjMwLCA3MTYzNSwgNzE2NDAsIDcxNjQ1LCA3MTY1MywgNzE2NjEsIDcxNjY3LCA3MTY3MywgCisgICAgNzE2NzgsIDcxNjgzLCA3MTY4OCwgNzE2OTMsIDcxNjk4LCA3MTcwMywgNzE3MDgsIDcxNzEzLCA3MTcyMSwgNzE3MjksIAorICAgIDcxNzM0LCA3MTczOSwgNzE3NDksIDcxNzU5LCA3MTc2NiwgNzE3NzMsIDcxNzgyLCA3MTc5MSwgNzE4MDMsIDcxODE1LCAKKyAgICA3MTgyMSwgNzE4MjcsIDcxODM1LCA3MTg0MywgNzE4NTMsIDcxODYzLCA3MTg3MCwgNzE4NzcsIDcxODgyLCA3MTg4NywgCisgICAgNzE4OTksIDcxOTExLCA3MTkxOSwgNzE5MjcsIDcxOTM3LCA3MTk0NywgNzE5NTksIDcxOTcxLCA3MTk4MCwgNzE5ODksIAorICAgIDcxOTk2LCA3MjAwMywgNzIwMTAsIDcyMDE3LCA3MjAyNiwgNzIwMzUsIDcyMDQwLCA3MjA0NSwgNzIwNTIsIDcyMDU5LCAKKyAgICA3MjA2NiwgNzIwNzMsIDcyMDg1LCA3MjA5NywgNzIxMDIsIDcyMTA3LCA3MjExMiwgNzIxMTcsIDcyMTIyLCA3MjEyNywgCisgICAgNzIxMzIsIDcyMTM3LCA3MjE0MSwgNzIxNDYsIDcyMTUxLCA3MjE1NiwgNzIxNjEsIDcyMTY2LCA3MjE3MiwgNzIxNzcsIAorICAgIDcyMTgyLCA3MjE4OSwgNzIxOTYsIDcyMjAzLCA3MjIxMCwgNzIyMTcsIDcyMjI2LCA3MjIzNSwgNzIyNDEsIDcyMjQ3LCAKKyAgICA3MjI1MywgNzIyNTksIDcyMjY2LCA3MjI3MywgNzIyODAsIDcyMjg3LCA3MjI5NCwgNzIyOTgsIDcyMzA1LCA3MjMxMCwgCisgICAgNzIzMTUsIDcyMzIyLCAwLCA3MjMzNSwgNzIzNDMsIDcyMzUxLCA3MjM1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzIzNjUsIDcyMzc0LCA3MjM4MywgNzIzOTIsIDcyNDAxLCA3MjQxMCwgNzI0MTksIDcyNDI4LCA3MjQzNywgCisgICAgNzI0NDYsIDcyNDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjQzNCwgCi0gICAgNzI0NDEsIDcyNDQ3LCA3MjQ1NCwgNzI0NjIsIDcyNDcwLCA3MjQ3NywgNzI0ODUsIDcyNDkyLCA3MjQ5OCwgNzI1MDQsIAotICAgIDcyNTExLCA3MjUxNywgNzI1MjMsIDcyNTI5LCA3MjUzNiwgNzI1NDMsIDcyNTUwLCA3MjU1NywgNzI1NjQsIDcyNTcxLCAKLSAgICA3MjU3OCwgNzI1ODUsIDcyNTkyLCA3MjU5OSwgNzI2MDYsIDcyNjEzLCA3MjYyMCwgNzI2MjcsIDcyNjMzLCA3MjY0MCwgCi0gICAgNzI2NDcsIDcyNjU0LCA3MjY2MSwgNzI2NjgsIDcyNjc1LCA3MjY4MiwgNzI2ODksIDcyNjk2LCA3MjcwMywgNzI3MTAsIAotICAgIDcyNzE3LCA3MjcyNCwgNzI3MzEsIDcyNzM4LCA3Mjc0NSwgNzI3NTIsIDcyNzU5LCA3Mjc2NywgNzI3NzUsIDcyNzgzLCAKLSAgICA3Mjc5MSwgMCwgMCwgMCwgMCwgNzI3OTksIDcyODA4LCA3MjgxNywgNzI4MjYsIDcyODM1LCA3Mjg0NCwgNzI4NTMsIAotICAgIDcyODYwLCA3Mjg2NywgNzI4NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDcyODgxLCA3Mjg4NSwgNzI4OTAsIDcyODk1LCA3MjkwMCwgCi0gICAgNzI5MDUsIDcyOTEwLCA3MjkxNSwgNzI5MjAsIDcyOTI1LCA3MjkzMCwgNzI5MzUsIDcyOTM5LCA3Mjk0MywgNzI5NDgsIAotICAgIDcyOTUzLCA3Mjk1NywgNzI5NjIsIDcyOTY3LCA3Mjk3MiwgNzI5NzcsIDcyOTgyLCA3Mjk4NywgNzI5OTIsIDcyOTk2LCAKLSAgICA3MzAwMCwgNzMwMDUsIDczMDEwLCA3MzAxNCwgNzMwMTgsIDczMDIyLCA3MzAyNiwgNzMwMzAsIDczMDM0LCA3MzAzOCwgCi0gICAgNzMwNDMsIDczMDQ4LCA3MzA1MywgNzMwNTgsIDczMDYzLCA3MzA3MCwgNzMwNzYsIDczMDgxLCA3MzA4NiwgNzMwOTEsIAotICAgIDczMDk2LCA3MzEwMiwgNzMxMDksIDczMTE1LCA3MzEyMiwgNzMxMjgsIDczMTM0LCA3MzEzOSwgNzMxNDYsIDczMTUyLCAKLSAgICA3MzE1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMxNjMsIDczMTY3LCA3MzE3MSwgNzMxNzQsIDczMTc4LCA3MzE4MSwgCi0gICAgNzMxODUsIDczMTg4LCA3MzE5MiwgNzMxOTYsIDczMjAxLCA3MzIwNSwgNzMyMTAsIDczMjEzLCA3MzIxNywgNzMyMjEsIAotICAgIDczMjI0LCA3MzIyOCwgNzMyMzIsIDczMjM1LCA3MzIzOSwgNzMyNDMsIDczMjQ3LCA3MzI1MSwgNzMyNTUsIDczMjU5LCAKLSAgICA3MzI2MywgNzMyNjcsIDczMjcxLCA3MzI3NSwgNzMyNzksIDczMjgzLCA3MzI4NywgNzMyOTEsIDczMjk1LCA3MzI5OSwgCi0gICAgNzMzMDMsIDczMzA3LCA3MzMxMCwgNzMzMTMsIDczMzE3LCA3MzMyMSwgNzMzMjUsIDczMzI4LCA3MzMzMSwgNzMzMzQsIAotICAgIDczMzM4LCA3MzM0MiwgNzMzNDYsIDczMzUwLCA3MzM1MywgNzMzNTYsIDczMzYwLCA3MzM2NSwgNzMzNzAsIDczMzc0LCAKLSAgICA3MzM3OSwgNzMzODMsIDczMzg4LCA3MzM5MywgNzMzOTksIDczNDA0LCA3MzQxMCwgNzM0MTQsIDczNDE5LCA3MzQyNCwgCi0gICAgNzM0MjgsIDczNDMzLCA3MzQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzM0NDIsIDczNDQ1LCA3MzQ0OSwgCi0gICAgNzM0NTMsIDczNDU2LCA3MzQ1OSwgNzM0NjIsIDczNDY1LCA3MzQ2OCwgNzM0NzEsIDczNDc0LCA3MzQ3NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzM0ODAsIDczNDg1LCA3MzQ4OSwgNzM0OTMsIDczNDk3LCA3MzUwMSwgNzM1MDUsIDczNTA5LCA3MzUxMywgCi0gICAgNzM1MTcsIDczNTIxLCA3MzUyNSwgNzM1MjksIDczNTMzLCA3MzUzNywgNzM1NDEsIDczNTQ1LCA3MzU1MCwgNzM1NTUsIAotICAgIDczNTYxLCA3MzU2NywgNzM1NzQsIDczNTc5LCA3MzU4NCwgNzM1OTAsIDczNTk0LCA3MzU5OSwgNzM2MDIsIDAsIDAsIDAsIAotICAgIDAsIDczNjA1LCA3MzYxMiwgNzM2MTgsIDczNjI0LCA3MzYzMCwgNzM2MzYsIDczNjQyLCA3MzY0OCwgNzM2NTQsIDczNjYwLCAKLSAgICA3MzY2NiwgNzM2NzIsIDczNjc5LCA3MzY4NiwgNzM2OTMsIDczNjk5LCA3MzcwNiwgNzM3MTMsIDczNzIwLCA3MzcyNywgCi0gICAgNzM3MzQsIDczNzQwLCA3Mzc0NiwgNzM3NTMsIDczNzU5LCA3Mzc2NiwgNzM3NzMsIDczNzc5LCA3Mzc4NSwgNzM3OTIsIAotICAgIDczNzk5LCA3MzgwNiwgNzM4MTIsIDczODE5LCA3MzgyNiwgNzM4MzIsIDczODM5LCA3Mzg0NSwgNzM4NTIsIDczODU5LCAKLSAgICA3Mzg2NSwgNzM4NzEsIDczODc4LCA3Mzg4NCwgNzM4OTEsIDczODk4LCA3MzkwNywgNzM5MTQsIDczOTIxLCA3MzkyNSwgCi0gICAgNzM5MzAsIDczOTM1LCA3Mzk0MCwgNzM5NDUsIDczOTQ5LCA3Mzk1MywgNzM5NTgsIDczOTYyLCA3Mzk2NywgNzM5NzIsIAotICAgIDczOTc3LCA3Mzk4MSwgNzM5ODUsIDczOTkwLCA3Mzk5NCwgNzM5OTksIDc0MDAzLCA3NDAwOCwgNzQwMTMsIDc0MDE4LCAKLSAgICA3NDAyMywgNzQwMjcsIDc0MDMyLCA3NDAzNywgNzQwNDIsIDc0MDQ4LCA3NDA1MywgNzQwNTksIDc0MDY1LCA3NDA3MSwgCi0gICAgNzQwNzcsIDc0MDgzLCA3NDA4OCwgNzQwOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MDk4LCAKLSAgICA3NDEwMywgNzQxMDcsIDc0MTExLCA3NDExNSwgNzQxMTksIDc0MTIzLCA3NDEyNywgNzQxMzEsIDc0MTM1LCA3NDEzOSwgCi0gICAgNzQxNDMsIDc0MTQ3LCA3NDE1MSwgNzQxNTUsIDc0MTU5LCA3NDE2MywgNzQxNjcsIDc0MTcxLCA3NDE3NSwgNzQxNzksIAotICAgIDc0MTgzLCA3NDE4NywgNzQxOTEsIDc0MTk1LCA3NDE5OSwgNzQyMDMsIDc0MjA3LCA3NDIxMSwgNzQyMTUsIDAsIDAsIDAsIAotICAgIDc0MjE5LCA3NDIyMywgNzQyMjcsIDc0MjMxLCA3NDIzNSwgNzQyMzgsIDc0MjQ0LCA3NDI0NywgNzQyNTEsIDc0MjU0LCAKLSAgICA3NDI2MCwgNzQyNjYsIDc0Mjc0LCA3NDI3NywgNzQyODEsIDc0Mjg0LCA3NDI4NywgNzQyOTMsIDc0Mjk5LCA3NDMwMywgCi0gICAgNzQzMDksIDc0MzEzLCA3NDMxNywgNzQzMjMsIDc0MzI3LCA3NDMzMywgNzQzMzksIDc0MzQzLCA3NDM0NywgNzQzNTMsIAotICAgIDc0MzU3LCA3NDM2MywgNzQzNjksIDc0MzczLCA3NDM3OSwgNzQzODMsIDc0Mzg5LCA3NDM5MiwgNzQzOTUsIDc0NDAxLCAKLSAgICA3NDQwNSwgNzQ0MTEsIDc0NDE0LCA3NDQxNywgNzQ0MjAsIDc0NDI2LCA3NDQzMCwgNzQ0MzQsIDc0NDQwLCA3NDQ0NiwgCi0gICAgNzQ0NDksIDc0NDUyLCA3NDQ1OCwgNzQ0NjMsIDc0NDY4LCA3NDQ3MywgNzQ0ODAsIDc0NDg1LCA3NDQ5MiwgNzQ0OTcsIAotICAgIDc0NTA0LCA3NDUwOSwgNzQ1MTQsIDc0NTE5LCA3NDUyNCwgNzQ1MjcsIDc0NTMxLCA3NDUzNSwgNzQ1NDAsIDc0NTQ1LCAKLSAgICA3NDU1MCwgNzQ1NTUsIDc0NTYwLCA3NDU2NSwgNzQ1NzAsIDc0NTc1LCA3NDU4MiwgNzQ1ODcsIDAsIDc0NTk0LCA3NDU5NywgCi0gICAgNzQ2MDEsIDc0NjA0LCA3NDYwNywgNzQ2MTAsIDc0NjEzLCA3NDYxNiwgNzQ2MTksIDc0NjIyLCA3NDYyNSwgMCwgMCwgMCwgCi0gICAgMCwgNzQ2MjgsIDc0NjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDY0MCwgNzQ2NDMsIDc0NjQ2LCA3NDY0OSwgNzQ2NTIsIAotICAgIDc0NjU2LCA3NDY1OSwgNzQ2NjIsIDc0NjY2LCA3NDY3MCwgNzQ2NzQsIDc0Njc4LCA3NDY4MiwgNzQ2ODYsIDc0NjkwLCAKLSAgICA3NDY5NCwgNzQ2OTgsIDc0NzAyLCA3NDcwNiwgNzQ3MTAsIDc0NzE0LCA3NDcxOCwgNzQ3MjIsIDc0NzI2LCA3NDczMCwgCi0gICAgNzQ3MzMsIDc0NzM3LCA3NDc0MCwgNzQ3NDQsIDc0NzQ4LCA3NDc1MiwgNzQ3NTYsIDc0NzYwLCA3NDc2MywgNzQ3NjcsIAotICAgIDc0NzcwLCA3NDc3MywgNzQ3NzcsIDc0NzgxLCA3NDc4NSwgNzQ3ODgsIDc0NzkxLCA3NDc5NiwgNzQ4MDAsIDc0ODA1LCAKLSAgICA3NDgxMCwgNzQ4MTQsIDc0ODE5LCA3NDgyMywgNzQ4MjgsIDc0ODMzLCA3NDgzOCwgNzQ4NDIsIDc0ODQ2LCA3NDg1MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ4NTYsIDc0ODYxLCA3NDg2NiwgNzQ4NzEsIDc0ODc3LCA3NDg4MiwgNzQ4ODcsIAotICAgIDc0ODkyLCA3NDg5NywgNzQ5MDIsIDc0OTA2LCA3NDkxMCwgNzQ5MTUsIDc0OTIwLCAwLCAwLCA3NDkyNiwgNzQ5MzAsIAotICAgIDc0OTMzLCA3NDkzNiwgNzQ5MzksIDc0OTQyLCA3NDk0NSwgNzQ5NDgsIDc0OTUxLCA3NDk1NCwgMCwgMCwgNzQ5NTcsIAotICAgIDc0OTYyLCA3NDk2NywgNzQ5NzMsIDc0OTgwLCA3NDk4NiwgNzQ5OTIsIDc0OTk4LCA3NTAwNCwgNzUwMTAsIDc1MDE2LCAKLSAgICA3NTAyMiwgNzUwMjgsIDc1MDM0LCA3NTA0MCwgNzUwNDYsIDc1MDUxLCA3NTA1NiwgNzUwNjEsIDc1MDY3LCA3NTA3MywgCi0gICAgNzUwODAsIDc1MDg2LCA3NTA5MiwgNzUwOTcsIDc1MTA0LCA3NTExMSwgNzUxMTgsIDc1MTI0LCA3NTEyOSwgNzUxMzQsIAotICAgIDc1MTM5LCAwLCAwLCAwLCAwLCA3NTE0NywgNzUxNTMsIDc1MTU5LCA3NTE2NSwgNzUxNzEsIDc1MTc3LCA3NTE4MywgCi0gICAgNzUxODksIDc1MTk1LCA3NTIwMSwgNzUyMDcsIDc1MjEzLCA3NTIxOSwgNzUyMjUsIDc1MjMxLCA3NTIzNywgNzUyNDMsIAotICAgIDc1MjQ5LCA3NTI1NSwgNzUyNjEsIDc1MjY3LCA3NTI3MiwgNzUyNzcsIDc1MjgzLCA3NTI4OSwgNzUyOTUsIDc1MzAxLCAKLSAgICA3NTMwNywgNzUzMTMsIDc1MzE5LCA3NTMyNSwgNzUzMzEsIDc1MzM3LCA3NTM0MywgNzUzNDksIDc1MzU1LCA3NTM2MSwgCi0gICAgNzUzNjcsIDc1MzczLCA3NTM3OSwgNzUzODUsIDc1MzkxLCA3NTM5NywgNzU0MDMsIDc1NDA5LCA3NTQxNSwgNzU0MjEsIAotICAgIDc1NDI2LCA3NTQzMSwgNzU0MzcsIDc1NDQyLCA3NTQ0NiwgNzU0NTEsIDc1NDU1LCA3NTQ1OSwgNzU0NjMsIDc1NDY5LCAKLSAgICA3NTQ3NCwgNzU0NzksIDc1NDg0LCA3NTQ4OSwgNzU0OTQsIDc1NDk5LCA3NTUwNCwgNzU1MTEsIDc1NTE4LCA3NTUyNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0NjIsIDcyNDY5LCA3MjQ3NSwgNzI0ODIsIDcyNDkwLCA3MjQ5OCwgCisgICAgNzI1MDUsIDcyNTEzLCA3MjUyMCwgNzI1MjYsIDcyNTMyLCA3MjUzOSwgNzI1NDUsIDcyNTUxLCA3MjU1NywgNzI1NjQsIAorICAgIDcyNTcxLCA3MjU3OCwgNzI1ODUsIDcyNTkyLCA3MjU5OSwgNzI2MDYsIDcyNjEzLCA3MjYyMCwgNzI2MjcsIDcyNjM0LCAKKyAgICA3MjY0MSwgNzI2NDgsIDcyNjU1LCA3MjY2MSwgNzI2NjgsIDcyNjc1LCA3MjY4MiwgNzI2ODksIDcyNjk2LCA3MjcwMywgCisgICAgNzI3MTAsIDcyNzE3LCA3MjcyNCwgNzI3MzEsIDcyNzM4LCA3Mjc0NSwgNzI3NTIsIDcyNzU5LCA3Mjc2NiwgNzI3NzMsIAorICAgIDcyNzgwLCA3Mjc4NywgNzI3OTUsIDcyODAzLCA3MjgxMSwgNzI4MTksIDAsIDAsIDAsIDAsIDcyODI3LCA3MjgzNiwgCisgICAgNzI4NDUsIDcyODU0LCA3Mjg2MywgNzI4NzIsIDcyODgxLCA3Mjg4OCwgNzI4OTUsIDcyOTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3MjkwOSwgNzI5MTMsIDcyOTE4LCA3MjkyMywgNzI5MjgsIDcyOTMzLCA3MjkzOCwgNzI5NDMsIDcyOTQ4LCA3Mjk1MywgCisgICAgNzI5NTgsIDcyOTYzLCA3Mjk2NywgNzI5NzEsIDcyOTc2LCA3Mjk4MSwgNzI5ODUsIDcyOTkwLCA3Mjk5NSwgNzMwMDAsIAorICAgIDczMDA1LCA3MzAxMCwgNzMwMTUsIDczMDIwLCA3MzAyNCwgNzMwMjgsIDczMDMzLCA3MzAzOCwgNzMwNDIsIDczMDQ2LCAKKyAgICA3MzA1MCwgNzMwNTQsIDczMDU4LCA3MzA2MiwgNzMwNjYsIDczMDcxLCA3MzA3NiwgNzMwODEsIDczMDg2LCA3MzA5MSwgCisgICAgNzMwOTgsIDczMTA0LCA3MzEwOSwgNzMxMTQsIDczMTE5LCA3MzEyNCwgNzMxMzAsIDczMTM3LCA3MzE0MywgNzMxNTAsIAorICAgIDczMTU2LCA3MzE2MiwgNzMxNjcsIDczMTc0LCA3MzE4MCwgNzMxODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTkxLCAKKyAgICA3MzE5NSwgNzMxOTksIDczMjAyLCA3MzIwNiwgNzMyMDksIDczMjEzLCA3MzIxNiwgNzMyMjAsIDczMjI0LCA3MzIyOSwgCisgICAgNzMyMzMsIDczMjM4LCA3MzI0MSwgNzMyNDUsIDczMjQ5LCA3MzI1MiwgNzMyNTYsIDczMjYwLCA3MzI2MywgNzMyNjcsIAorICAgIDczMjcxLCA3MzI3NSwgNzMyNzksIDczMjgzLCA3MzI4NywgNzMyOTEsIDczMjk1LCA3MzI5OSwgNzMzMDMsIDczMzA3LCAKKyAgICA3MzMxMSwgNzMzMTUsIDczMzE5LCA3MzMyMywgNzMzMjcsIDczMzMxLCA3MzMzNSwgNzMzMzgsIDczMzQxLCA3MzM0NSwgCisgICAgNzMzNDksIDczMzUzLCA3MzM1NiwgNzMzNTksIDczMzYyLCA3MzM2NiwgNzMzNzAsIDczMzc0LCA3MzM3OCwgNzMzODEsIAorICAgIDczMzg0LCA3MzM4OCwgNzMzOTMsIDczMzk4LCA3MzQwMiwgNzM0MDcsIDczNDExLCA3MzQxNiwgNzM0MjEsIDczNDI3LCAKKyAgICA3MzQzMiwgNzM0MzgsIDczNDQyLCA3MzQ0NywgNzM0NTIsIDczNDU2LCA3MzQ2MSwgNzM0NjYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDczNDcwLCA3MzQ3MywgNzM0NzcsIDczNDgxLCA3MzQ4NCwgNzM0ODcsIDczNDkwLCA3MzQ5MywgNzM0OTYsIAorICAgIDczNDk5LCA3MzUwMiwgNzM1MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDczNTA4LCA3MzUxMywgNzM1MTcsIDczNTIxLCA3MzUyNSwgCisgICAgNzM1MjksIDczNTMzLCA3MzUzNywgNzM1NDEsIDczNTQ1LCA3MzU0OSwgNzM1NTMsIDczNTU3LCA3MzU2MSwgNzM1NjUsIAorICAgIDczNTY5LCA3MzU3MywgNzM1NzgsIDczNTgzLCA3MzU4OSwgNzM1OTUsIDczNjAyLCA3MzYwNywgNzM2MTIsIDczNjE4LCAKKyAgICA3MzYyMiwgNzM2MjcsIDczNjMwLCAwLCAwLCAwLCAwLCA3MzYzMywgNzM2NDAsIDczNjQ2LCA3MzY1MiwgNzM2NTgsIAorICAgIDczNjY0LCA3MzY3MCwgNzM2NzYsIDczNjgyLCA3MzY4OCwgNzM2OTQsIDczNzAwLCA3MzcwNywgNzM3MTQsIDczNzIxLCAKKyAgICA3MzcyNywgNzM3MzQsIDczNzQxLCA3Mzc0OCwgNzM3NTUsIDczNzYyLCA3Mzc2OCwgNzM3NzQsIDczNzgxLCA3Mzc4NywgCisgICAgNzM3OTQsIDczODAxLCA3MzgwNywgNzM4MTMsIDczODIwLCA3MzgyNywgNzM4MzQsIDczODQwLCA3Mzg0NywgNzM4NTQsIAorICAgIDczODYwLCA3Mzg2NywgNzM4NzMsIDczODgwLCA3Mzg4NywgNzM4OTMsIDczODk5LCA3MzkwNiwgNzM5MTIsIDczOTE5LCAKKyAgICA3MzkyNiwgNzM5MzUsIDczOTQyLCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MywgNzM5NjgsIDczOTczLCA3Mzk3NywgCisgICAgNzM5ODEsIDczOTg2LCA3Mzk5MCwgNzM5OTUsIDc0MDAwLCA3NDAwNSwgNzQwMDksIDc0MDEzLCA3NDAxOCwgNzQwMjIsIAorICAgIDc0MDI3LCA3NDAzMSwgNzQwMzYsIDc0MDQxLCA3NDA0NiwgNzQwNTEsIDc0MDU1LCA3NDA2MCwgNzQwNjUsIDc0MDcwLCAKKyAgICA3NDA3NiwgNzQwODEsIDc0MDg3LCA3NDA5MywgNzQwOTksIDc0MTA1LCA3NDExMSwgNzQxMTYsIDc0MTIyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDEyNiwgNzQxMzEsIDc0MTM1LCA3NDEzOSwgNzQxNDMsIDc0MTQ3LCA3NDE1MSwgCisgICAgNzQxNTUsIDc0MTU5LCA3NDE2MywgNzQxNjcsIDc0MTcxLCA3NDE3NSwgNzQxNzksIDc0MTgzLCA3NDE4NywgNzQxOTEsIAorICAgIDc0MTk1LCA3NDE5OSwgNzQyMDMsIDc0MjA3LCA3NDIxMSwgNzQyMTUsIDc0MjE5LCA3NDIyMywgNzQyMjcsIDc0MjMxLCAKKyAgICA3NDIzNSwgNzQyMzksIDc0MjQzLCAwLCAwLCAwLCA3NDI0NywgNzQyNTEsIDc0MjU1LCA3NDI1OSwgNzQyNjMsIDc0MjY2LCAKKyAgICA3NDI3MiwgNzQyNzUsIDc0Mjc5LCA3NDI4MiwgNzQyODgsIDc0Mjk0LCA3NDMwMiwgNzQzMDUsIDc0MzA5LCA3NDMxMiwgCisgICAgNzQzMTUsIDc0MzIxLCA3NDMyNywgNzQzMzEsIDc0MzM3LCA3NDM0MSwgNzQzNDUsIDc0MzUxLCA3NDM1NSwgNzQzNjEsIAorICAgIDc0MzY3LCA3NDM3MSwgNzQzNzUsIDc0MzgxLCA3NDM4NSwgNzQzOTEsIDc0Mzk3LCA3NDQwMSwgNzQ0MDcsIDc0NDExLCAKKyAgICA3NDQxNywgNzQ0MjAsIDc0NDIzLCA3NDQyOSwgNzQ0MzMsIDc0NDM5LCA3NDQ0MiwgNzQ0NDUsIDc0NDQ4LCA3NDQ1NCwgCisgICAgNzQ0NTgsIDc0NDYyLCA3NDQ2OCwgNzQ0NzQsIDc0NDc3LCA3NDQ4MCwgNzQ0ODYsIDc0NDkxLCA3NDQ5NiwgNzQ1MDEsIAorICAgIDc0NTA4LCA3NDUxMywgNzQ1MjAsIDc0NTI1LCA3NDUzMiwgNzQ1MzcsIDc0NTQyLCA3NDU0NywgNzQ1NTIsIDc0NTU1LCAKKyAgICA3NDU1OSwgNzQ1NjMsIDc0NTY4LCA3NDU3MywgNzQ1NzgsIDc0NTgzLCA3NDU4OCwgNzQ1OTMsIDc0NTk4LCA3NDYwMywgCisgICAgNzQ2MTAsIDc0NjE1LCAwLCA3NDYyMiwgNzQ2MjUsIDc0NjI5LCA3NDYzMiwgNzQ2MzUsIDc0NjM4LCA3NDY0MSwgNzQ2NDQsIAorICAgIDc0NjQ3LCA3NDY1MCwgNzQ2NTMsIDAsIDAsIDAsIDAsIDc0NjU2LCA3NDY2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzU1MzIsIDc1NTM3LCA3NTU0MiwgNzU1NDcsIDc1NTU0LCA3NTU2MSwgNzU1NjUsIDc1NTY5LCA3NTU3NCwgNzU1NzksIAotICAgIDc1NTg0LCA3NTU4OSwgNzU1OTQsIDc1NTk5LCA3NTYwNCwgNzU2MDksIDc1NjE0LCA3NTYyMCwgNzU2MjYsIDc1NjMyLCAKLSAgICA3NTYzOCwgNzU2NDQsIDc1NjQ4LCA3NTY1NCwgNzU2NTgsIDc1NjY0LCA3NTY3MSwgNzU2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc1NjgxLCA3NTY4NSwgNzU2ODksIDc1NjkzLCA3NTY5NywgNzU3MDEsIDAsIDAsIDc1NzA1LCA3NTcwOSwgCi0gICAgNzU3MTMsIDc1NzE3LCA3NTcyMSwgNzU3MjUsIDAsIDAsIDc1NzI5LCA3NTczMywgNzU3MzcsIDc1NzQxLCA3NTc0NSwgCi0gICAgNzU3NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NzUzLCA3NTc1NywgNzU3NjEsIDc1NzY1LCA3NTc2OSwgCi0gICAgNzU3NzMsIDc1Nzc3LCAwLCA3NTc4MSwgNzU3ODUsIDc1Nzg5LCA3NTc5MywgNzU3OTcsIDc1ODAxLCA3NTgwNSwgMCwgMCwgCisgICAgNzQ2NjgsIDc0NjcxLCA3NDY3NCwgNzQ2NzcsIDc0NjgwLCA3NDY4NCwgNzQ2ODcsIDc0NjkwLCA3NDY5NCwgNzQ2OTgsIAorICAgIDc0NzAyLCA3NDcwNiwgNzQ3MTAsIDc0NzE0LCA3NDcxOCwgNzQ3MjIsIDc0NzI2LCA3NDczMCwgNzQ3MzQsIDc0NzM4LCAKKyAgICA3NDc0MiwgNzQ3NDYsIDc0NzUwLCA3NDc1NCwgNzQ3NTgsIDc0NzYxLCA3NDc2NSwgNzQ3NjgsIDc0NzcyLCA3NDc3NiwgCisgICAgNzQ3ODAsIDc0Nzg0LCA3NDc4OCwgNzQ3OTEsIDc0Nzk1LCA3NDc5OCwgNzQ4MDEsIDc0ODA1LCA3NDgwOSwgNzQ4MTMsIAorICAgIDc0ODE2LCA3NDgxOSwgNzQ4MjQsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NywgNzQ4NTEsIDc0ODU2LCAKKyAgICA3NDg2MSwgNzQ4NjYsIDc0ODcwLCA3NDg3NCwgNzQ4NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODg0LCAKKyAgICA3NDg4OSwgNzQ4OTQsIDc0ODk5LCA3NDkwNSwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgNzQ5MjUsIDc0OTMwLCA3NDkzNCwgCisgICAgNzQ5MzgsIDc0OTQzLCA3NDk0OCwgMCwgMCwgNzQ5NTQsIDc0OTU4LCA3NDk2MSwgNzQ5NjQsIDc0OTY3LCA3NDk3MCwgCisgICAgNzQ5NzMsIDc0OTc2LCA3NDk3OSwgNzQ5ODIsIDAsIDAsIDc0OTg1LCA3NDk5MCwgNzQ5OTUsIDc1MDAxLCA3NTAwOCwgCisgICAgNzUwMTQsIDc1MDIwLCA3NTAyNiwgNzUwMzIsIDc1MDM4LCA3NTA0NCwgNzUwNTAsIDc1MDU2LCA3NTA2MiwgNzUwNjgsIAorICAgIDc1MDc0LCA3NTA3OSwgNzUwODQsIDc1MDg5LCA3NTA5NSwgNzUxMDEsIDc1MTA4LCA3NTExNCwgNzUxMjAsIDc1MTI1LCAKKyAgICA3NTEzMiwgNzUxMzksIDc1MTQ2LCA3NTE1MiwgNzUxNTcsIDc1MTYyLCA3NTE2NywgMCwgMCwgMCwgMCwgNzUxNzUsIAorICAgIDc1MTgxLCA3NTE4NywgNzUxOTMsIDc1MTk5LCA3NTIwNSwgNzUyMTEsIDc1MjE3LCA3NTIyMywgNzUyMjksIDc1MjM1LCAKKyAgICA3NTI0MSwgNzUyNDcsIDc1MjUzLCA3NTI1OSwgNzUyNjUsIDc1MjcxLCA3NTI3NywgNzUyODMsIDc1Mjg5LCA3NTI5NSwgCisgICAgNzUzMDAsIDc1MzA1LCA3NTMxMSwgNzUzMTcsIDc1MzIzLCA3NTMyOSwgNzUzMzUsIDc1MzQxLCA3NTM0NywgNzUzNTMsIAorICAgIDc1MzU5LCA3NTM2NSwgNzUzNzEsIDc1Mzc3LCA3NTM4MywgNzUzODksIDc1Mzk1LCA3NTQwMSwgNzU0MDcsIDc1NDEzLCAKKyAgICA3NTQxOSwgNzU0MjUsIDc1NDMxLCA3NTQzNywgNzU0NDMsIDc1NDQ5LCA3NTQ1NCwgNzU0NTksIDc1NDY1LCA3NTQ3MCwgCisgICAgNzU0NzQsIDc1NDc5LCA3NTQ4MywgNzU0ODcsIDc1NDkxLCA3NTQ5NywgNzU1MDIsIDc1NTA3LCA3NTUxMiwgNzU1MTcsIAorICAgIDc1NTIyLCA3NTUyNywgNzU1MzIsIDc1NTM5LCA3NTU0NiwgNzU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NTYwLCA3NTU2NSwgNzU1NzAsIDc1NTc1LCAKKyAgICA3NTU4MiwgNzU1ODksIDc1NTkzLCA3NTU5NywgNzU2MDIsIDc1NjA3LCA3NTYxMiwgNzU2MTcsIDc1NjIyLCA3NTYyNywgCisgICAgNzU2MzIsIDc1NjM3LCA3NTY0MiwgNzU2NDgsIDc1NjU0LCA3NTY2MCwgNzU2NjYsIDc1NjcyLCA3NTY3NiwgNzU2ODIsIAorICAgIDc1Njg2LCA3NTY5MiwgNzU2OTksIDc1NzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTcwOSwgNzU3MTMsIAorICAgIDc1NzE3LCA3NTcyMSwgNzU3MjUsIDc1NzI5LCAwLCAwLCA3NTczMywgNzU3MzcsIDc1NzQxLCA3NTc0NSwgNzU3NDksIAorICAgIDc1NzUzLCAwLCAwLCA3NTc1NywgNzU3NjEsIDc1NzY1LCA3NTc2OSwgNzU3NzMsIDc1Nzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3NTc4MSwgNzU3ODUsIDc1Nzg5LCA3NTc5MywgNzU3OTcsIDc1ODAxLCA3NTgwNSwgMCwgNzU4MDksIAorICAgIDc1ODEzLCA3NTgxNywgNzU4MjEsIDc1ODI1LCA3NTgyOSwgNzU4MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc1ODA5LCA3NTgxNCwgNzU4MTksIDc1ODI0LCA3NTgyOSwgNzU4MzMsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKLSAgICA3NTg1NywgNzU4NjIsIDc1ODY3LCA3NTg3MiwgNzU4NzcsIDc1ODgyLCA3NTg4NiwgNzU4OTEsIDc1ODk2LCA3NTkwMSwgCi0gICAgNzU5MDYsIDc1OTExLCA3NTkxNiwgNzU5MjEsIDc1OTI2LCA3NTkzMSwgNzU5MzYsIDc1OTQxLCA3NTk0OCwgNzU5NTUsIAotICAgIDc1OTYyLCA3NTk2OSwgNzU5NzYsIDc1OTgzLCA3NTk5MCwgNzU5OTcsIDc2MDAzLCA3NjAwOSwgNzYwMTUsIDc2MDIxLCAKLSAgICA3NjAyNywgNzYwMzMsIDc2MDM5LCA3NjA0NSwgNzYwNDksIDc2MDU1LCAwLCAwLCA3NjA2MSwgNzYwNjYsIDc2MDcwLCAKLSAgICA3NjA3NCwgNzYwNzgsIDc2MDgyLCA3NjA4NiwgNzYwOTAsIDc2MDk0LCA3NjA5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU4MzcsIDc1ODQyLCA3NTg0NywgNzU4NTIsIAorICAgIDc1ODU3LCA3NTg2MSwgNzU4NjUsIDc1ODcwLCA3NTg3NSwgNzU4ODAsIDc1ODg1LCA3NTg5MCwgNzU4OTUsIDc1OTAwLCAKKyAgICA3NTkwNSwgNzU5MTAsIDc1OTE0LCA3NTkxOSwgNzU5MjQsIDc1OTI5LCA3NTkzNCwgNzU5MzksIDc1OTQ0LCA3NTk0OSwgCisgICAgNzU5NTQsIDc1OTU5LCA3NTk2NCwgNzU5NjksIDc1OTc2LCA3NTk4MywgNzU5OTAsIDc1OTk3LCA3NjAwNCwgNzYwMTEsIAorICAgIDc2MDE4LCA3NjAyNSwgNzYwMzEsIDc2MDM3LCA3NjA0MywgNzYwNDksIDc2MDU1LCA3NjA2MSwgNzYwNjcsIDc2MDczLCAKKyAgICA3NjA3NywgNzYwODMsIDAsIDAsIDc2MDg5LCA3NjA5NCwgNzYwOTgsIDc2MTAyLCA3NjEwNiwgNzYxMTAsIDc2MTE0LCAKKyAgICA3NjExOCwgNzYxMjIsIDc2MTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjEwMiwgCi0gICAgNzYxMDYsIDc2MTEwLCA3NjExNCwgNzYxMTgsIDc2MTIyLCA3NjEyNiwgNzYxMzAsIDc2MTM0LCA3NjEzOCwgNzYxNDIsIAotICAgIDc2MTQ2LCA3NjE1MCwgNzYxNTQsIDc2MTU4LCA3NjE2MiwgNzYxNjYsIDc2MTcwLCA3NjE3NCwgNzYxNzgsIDc2MTgyLCAKLSAgICA3NjE4NiwgNzYxOTAsIDAsIDAsIDAsIDAsIDc2MTk0LCA3NjE5OCwgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIAotICAgIDc2MjE4LCA3NjIyMiwgNzYyMjYsIDc2MjMwLCA3NjIzNCwgNzYyMzgsIDc2MjQyLCA3NjI0NiwgNzYyNTAsIDc2MjU0LCAKLSAgICA3NjI1OCwgNzYyNjIsIDc2MjY2LCA3NjI3MCwgNzYyNzQsIDc2Mjc4LCA3NjI4MiwgNzYyODYsIDc2MjkwLCA3NjI5NCwgCi0gICAgNzYyOTgsIDc2MzAyLCA3NjMwNiwgNzYzMTAsIDc2MzE0LCA3NjMxOCwgNzYzMjIsIDc2MzI2LCA3NjMzMCwgNzYzMzQsIAotICAgIDc2MzM4LCA3NjM0MiwgNzYzNDYsIDc2MzUwLCA3NjM1NCwgNzYzNTgsIDc2MzYyLCA3NjM2NiwgNzYzNzAsIDc2Mzc0LCAKLSAgICA3NjM3OCwgNzYzODIsIDc2Mzg2LCAwLCAwLCAwLCAwLCA3NjM5MCwgNzYzOTQsIDc2Mzk4LCA3NjQwMiwgNzY0MDYsIAotICAgIDc2NDEwLCA3NjQxNCwgNzY0MTgsIDc2NDIyLCA3NjQyNiwgNzY0MzAsIDc2NDM0LCA3NjQzOCwgNzY0NDIsIDc2NDQ2LCAKLSAgICA3NjQ1MCwgNzY0NTQsIDc2NDU4LCA3NjQ2MiwgNzY0NjYsIDc2NDcwLCA3NjQ3NCwgNzY0NzgsIDc2NDgyLCA3NjQ4NiwgCi0gICAgNzY0OTAsIDc2NDk0LCA3NjQ5OCwgNzY1MDIsIDc2NTA2LCA3NjUxMCwgNzY1MTQsIDc2NTE4LCA3NjUyMiwgNzY1MjYsIAotICAgIDc2NTMwLCA3NjUzNCwgNzY1MzgsIDc2NTQyLCA3NjU0NiwgNzY1NTAsIDc2NTU0LCA3NjU1OCwgNzY1NjIsIDc2NTY2LCAKLSAgICA3NjU3MCwgNzY1NzQsIDc2NTc4LCA3NjU4MiwgNzY1ODYsIDc2NTkwLCA3NjU5NCwgNzY1OTgsIDc2NjAyLCA3NjYwNiwgCi0gICAgNzY2MTAsIDc2NjE0LCA3NjYxOCwgNzY2MjIsIDc2NjI2LCA3NjYzMCwgNzY2MzQsIDc2NjM4LCA3NjY0MiwgNzY2NDYsIAotICAgIDc2NjUwLCA3NjY1NCwgNzY2NTgsIDc2NjYyLCA3NjY2NiwgNzY2NzAsIDc2Njc0LCA3NjY3OCwgNzY2ODIsIDc2Njg2LCAKLSAgICA3NjY5MCwgNzY2OTQsIDc2Njk4LCA3NjcwMiwgNzY3MDYsIDc2NzEwLCA3NjcxNCwgNzY3MTgsIDc2NzIyLCA3NjcyNiwgCi0gICAgNzY3MzAsIDc2NzM0LCA3NjczOCwgNzY3NDIsIDc2NzQ2LCA3Njc1MCwgNzY3NTQsIDc2NzU4LCA3Njc2MiwgNzY3NjYsIAotICAgIDc2NzcwLCA3Njc3NCwgNzY3NzgsIDc2NzgyLCA3Njc4NiwgNzY3OTAsIDc2Nzk0LCA3Njc5OCwgNzY4MDIsIDc2ODA2LCAKLSAgICA3NjgxMCwgNzY4MTQsIDc2ODE4LCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzNCwgNzY4MzgsIDc2ODQyLCA3Njg0NiwgCi0gICAgNzY4NTAsIDc2ODU0LCA3Njg1OCwgNzY4NjIsIDc2ODY2LCA3Njg3MCwgNzY4NzQsIDc2ODc4LCA3Njg4MiwgNzY4ODYsIAotICAgIDc2ODkwLCA3Njg5NCwgNzY4OTgsIDc2OTAyLCA3NjkwNiwgNzY5MTAsIDc2OTE0LCA3NjkxOCwgNzY5MjIsIDc2OTI2LCAKLSAgICA3NjkzMCwgNzY5MzQsIDc2OTM4LCA3Njk0MiwgNzY5NDYsIDc2OTUwLCA3Njk1NCwgNzY5NTgsIDc2OTYyLCA3Njk2NiwgCi0gICAgNzY5NzAsIDc2OTc0LCA3Njk3OCwgNzY5ODIsIDc2OTg2LCA3Njk5MCwgNzY5OTQsIDc2OTk4LCA3NzAwMiwgNzcwMDYsIAotICAgIDc3MDEwLCA3NzAxNCwgNzcwMTgsIDc3MDIyLCA3NzAyNiwgNzcwMzAsIDc3MDM0LCA3NzAzOCwgNzcwNDIsIDc3MDQ2LCAKLSAgICA3NzA1MCwgNzcwNTQsIDc3MDU4LCA3NzA2MiwgNzcwNjYsIDc3MDcwLCA3NzA3NCwgNzcwNzgsIDc3MDgyLCA3NzA4NiwgCi0gICAgNzcwOTAsIDc3MDk0LCA3NzA5OCwgNzcxMDIsIDc3MTA2LCA3NzExMCwgNzcxMTQsIDc3MTE4LCA3NzEyMiwgNzcxMjYsIAotICAgIDc3MTMwLCA3NzEzNCwgNzcxMzgsIDc3MTQyLCA3NzE0NiwgNzcxNTAsIDc3MTU0LCA3NzE1OCwgNzcxNjIsIDc3MTY2LCAKLSAgICA3NzE3MCwgNzcxNzQsIDc3MTc4LCA3NzE4MiwgNzcxODYsIDc3MTkwLCA3NzE5NCwgNzcxOTgsIDc3MjAyLCA3NzIwNiwgCi0gICAgNzcyMTAsIDc3MjE0LCA3NzIxOCwgNzcyMjIsIDc3MjI2LCA3NzIzMCwgNzcyMzQsIDc3MjM4LCA3NzI0MiwgNzcyNDYsIAotICAgIDc3MjUwLCA3NzI1NCwgNzcyNTgsIDc3MjYyLCA3NzI2NiwgNzcyNzAsIDc3Mjc0LCA3NzI3OCwgNzcyODIsIDc3Mjg2LCAKLSAgICA3NzI5MCwgNzcyOTQsIDc3Mjk4LCA3NzMwMiwgNzczMDYsIDc3MzEwLCA3NzMxNCwgNzczMTgsIDc3MzIyLCA3NzMyNiwgCi0gICAgNzczMzAsIDc3MzM0LCA3NzMzOCwgNzczNDIsIDc3MzQ2LCA3NzM1MCwgNzczNTQsIDc3MzU4LCA3NzM2MiwgNzczNjYsIAotICAgIDc3MzcwLCA3NzM3NCwgNzczNzgsIDc3MzgyLCA3NzM4NiwgNzczOTAsIDc3Mzk0LCA3NzM5OCwgNzc0MDIsIDc3NDA2LCAKLSAgICA3NzQxMCwgNzc0MTQsIDc3NDE4LCA3NzQyMiwgNzc0MjYsIDc3NDMwLCA3NzQzNCwgNzc0MzgsIDc3NDQyLCA3NzQ0NiwgCi0gICAgNzc0NTAsIDc3NDU0LCA3NzQ1OCwgNzc0NjIsIDc3NDY2LCA3NzQ3MCwgNzc0NzQsIDc3NDc4LCA3NzQ4MiwgNzc0ODYsIAotICAgIDc3NDkwLCA3NzQ5NCwgNzc0OTgsIDc3NTAyLCA3NzUwNiwgNzc1MTAsIDc3NTE0LCA3NzUxOCwgNzc1MjIsIDc3NTI2LCAKLSAgICA3NzUzMCwgNzc1MzQsIDc3NTM4LCA3NzU0MiwgNzc1NDYsIDc3NTUwLCA3NzU1NCwgNzc1NTgsIDc3NTYyLCA3NzU2NiwgCi0gICAgNzc1NzAsIDc3NTc0LCA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTQsIDc3NTk4LCA3NzYwMiwgNzc2MDYsIAotICAgIDc3NjEwLCA3NzYxNCwgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzAsIDc3NjM0LCA3NzYzOCwgNzc2NDIsIDc3NjQ2LCAKLSAgICA3NzY1MCwgNzc2NTQsIDc3NjU4LCA3NzY2MiwgNzc2NjYsIDc3NjcwLCA3NzY3NCwgNzc2NzgsIDc3NjgyLCA3NzY4NiwgCi0gICAgNzc2OTAsIDc3Njk0LCA3NzY5OCwgNzc3MDIsIDc3NzA2LCA3NzcxMCwgNzc3MTQsIDc3NzE4LCA3NzcyMiwgNzc3MjYsIAotICAgIDc3NzMwLCA3NzczNCwgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY2LCAKLSAgICA3Nzc3MCwgNzc3NzQsIDc3Nzc4LCA3Nzc4MiwgNzc3ODYsIDc3NzkwLCA3Nzc5NCwgNzc3OTgsIDc3ODAyLCA3NzgwNiwgCi0gICAgNzc4MTAsIDc3ODE0LCA3NzgxOCwgNzc4MjIsIDc3ODI2LCA3NzgzMCwgNzc4MzQsIDc3ODM4LCA3Nzg0MiwgNzc4NDYsIAotICAgIDc3ODUwLCAwLCAwLCA3Nzg1NCwgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgNzc4ODIsIAotICAgIDc3ODg2LCA3Nzg5MCwgNzc4OTQsIDc3ODk4LCA3NzkwMiwgNzc5MDYsIDc3OTEwLCA3NzkxNCwgNzc5MTgsIDc3OTIyLCAKLSAgICA3NzkyNiwgNzc5MzAsIDc3OTM0LCA3NzkzOCwgNzc5NDIsIDc3OTQ2LCA3Nzk1MCwgNzc5NTQsIDc3OTU4LCA3Nzk2MiwgCi0gICAgNzc5NjYsIDc3OTcwLCA3Nzk3NCwgNzc5NzgsIDc3OTgyLCA3Nzk4NiwgNzc5OTAsIDc3OTk0LCA3Nzk5OCwgNzgwMDIsIAotICAgIDc4MDA2LCA3ODAxMCwgNzgwMTQsIDc4MDE4LCA3ODAyMiwgNzgwMjYsIDc4MDMwLCA3ODAzNCwgNzgwMzgsIDc4MDQyLCAKLSAgICA3ODA0NiwgNzgwNTAsIDc4MDU0LCA3ODA1OCwgNzgwNjIsIDc4MDY2LCA3ODA3MCwgNzgwNzQsIDc4MDc4LCA3ODA4MiwgCi0gICAgNzgwODYsIDc4MDkwLCA3ODA5NCwgNzgwOTgsIDc4MTAyLCA3ODEwNiwgNzgxMTAsIDc4MTE0LCA3ODExOCwgNzgxMjIsIAotICAgIDc4MTI2LCA3ODEzMCwgNzgxMzQsIDc4MTM4LCA3ODE0MiwgNzgxNDYsIDc4MTUwLCA3ODE1NCwgNzgxNTgsIDc4MTYyLCAKLSAgICA3ODE2NiwgNzgxNzAsIDc4MTc0LCA3ODE3OCwgNzgxODIsIDc4MTg2LCA3ODE5MCwgNzgxOTQsIDc4MTk4LCA3ODIwMiwgCi0gICAgNzgyMDYsIDc4MjEwLCA3ODIxNCwgNzgyMTgsIDc4MjIyLCA3ODIyNiwgNzgyMzAsIDc4MjM0LCA3ODIzOCwgNzgyNDIsIAotICAgIDc4MjQ2LCA3ODI1MCwgNzgyNTQsIDc4MjU4LCA3ODI2MiwgNzgyNjYsIDc4MjcwLCA3ODI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMzAsIDc2MTM0LCA3NjEzOCwgNzYxNDIsIDc2MTQ2LCAKKyAgICA3NjE1MCwgNzYxNTQsIDc2MTU4LCA3NjE2MiwgNzYxNjYsIDc2MTcwLCA3NjE3NCwgNzYxNzgsIDc2MTgyLCA3NjE4NiwgCisgICAgNzYxOTAsIDc2MTk0LCA3NjE5OCwgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIDc2MjE4LCAwLCAwLCAwLCAwLCAKKyAgICA3NjIyMiwgNzYyMjYsIDc2MjMwLCA3NjIzNCwgNzYyMzgsIDc2MjQyLCA3NjI0NiwgNzYyNTAsIDc2MjU0LCA3NjI1OCwgCisgICAgNzYyNjIsIDc2MjY2LCA3NjI3MCwgNzYyNzQsIDc2Mjc4LCA3NjI4MiwgNzYyODYsIDc2MjkwLCA3NjI5NCwgNzYyOTgsIAorICAgIDc2MzAyLCA3NjMwNiwgNzYzMTAsIDc2MzE0LCA3NjMxOCwgNzYzMjIsIDc2MzI2LCA3NjMzMCwgNzYzMzQsIDc2MzM4LCAKKyAgICA3NjM0MiwgNzYzNDYsIDc2MzUwLCA3NjM1NCwgNzYzNTgsIDc2MzYyLCA3NjM2NiwgNzYzNzAsIDc2Mzc0LCA3NjM3OCwgCisgICAgNzYzODIsIDc2Mzg2LCA3NjM5MCwgNzYzOTQsIDc2Mzk4LCA3NjQwMiwgNzY0MDYsIDc2NDEwLCA3NjQxNCwgMCwgMCwgMCwgCisgICAgMCwgNzY0MTgsIDc2NDIyLCA3NjQyNiwgNzY0MzAsIDc2NDM0LCA3NjQzOCwgNzY0NDIsIDc2NDQ2LCA3NjQ1MCwgNzY0NTQsIAorICAgIDc2NDU4LCA3NjQ2MiwgNzY0NjYsIDc2NDcwLCA3NjQ3NCwgNzY0NzgsIDc2NDgyLCA3NjQ4NiwgNzY0OTAsIDc2NDk0LCAKKyAgICA3NjQ5OCwgNzY1MDIsIDc2NTA2LCA3NjUxMCwgNzY1MTQsIDc2NTE4LCA3NjUyMiwgNzY1MjYsIDc2NTMwLCA3NjUzNCwgCisgICAgNzY1MzgsIDc2NTQyLCA3NjU0NiwgNzY1NTAsIDc2NTU0LCA3NjU1OCwgNzY1NjIsIDc2NTY2LCA3NjU3MCwgNzY1NzQsIAorICAgIDc2NTc4LCA3NjU4MiwgNzY1ODYsIDc2NTkwLCA3NjU5NCwgNzY1OTgsIDc2NjAyLCA3NjYwNiwgNzY2MTAsIDc2NjE0LCAKKyAgICA3NjYxOCwgNzY2MjIsIDc2NjI2LCA3NjYzMCwgNzY2MzQsIDc2NjM4LCA3NjY0MiwgNzY2NDYsIDc2NjUwLCA3NjY1NCwgCisgICAgNzY2NTgsIDc2NjYyLCA3NjY2NiwgNzY2NzAsIDc2Njc0LCA3NjY3OCwgNzY2ODIsIDc2Njg2LCA3NjY5MCwgNzY2OTQsIAorICAgIDc2Njk4LCA3NjcwMiwgNzY3MDYsIDc2NzEwLCA3NjcxNCwgNzY3MTgsIDc2NzIyLCA3NjcyNiwgNzY3MzAsIDc2NzM0LCAKKyAgICA3NjczOCwgNzY3NDIsIDc2NzQ2LCA3Njc1MCwgNzY3NTQsIDc2NzU4LCA3Njc2MiwgNzY3NjYsIDc2NzcwLCA3Njc3NCwgCisgICAgNzY3NzgsIDc2NzgyLCA3Njc4NiwgNzY3OTAsIDc2Nzk0LCA3Njc5OCwgNzY4MDIsIDc2ODA2LCA3NjgxMCwgNzY4MTQsIAorICAgIDc2ODE4LCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzNCwgNzY4MzgsIDc2ODQyLCA3Njg0NiwgNzY4NTAsIDc2ODU0LCAKKyAgICA3Njg1OCwgNzY4NjIsIDc2ODY2LCA3Njg3MCwgNzY4NzQsIDc2ODc4LCA3Njg4MiwgNzY4ODYsIDc2ODkwLCA3Njg5NCwgCisgICAgNzY4OTgsIDc2OTAyLCA3NjkwNiwgNzY5MTAsIDc2OTE0LCA3NjkxOCwgNzY5MjIsIDc2OTI2LCA3NjkzMCwgNzY5MzQsIAorICAgIDc2OTM4LCA3Njk0MiwgNzY5NDYsIDc2OTUwLCA3Njk1NCwgNzY5NTgsIDc2OTYyLCA3Njk2NiwgNzY5NzAsIDc2OTc0LCAKKyAgICA3Njk3OCwgNzY5ODIsIDc2OTg2LCA3Njk5MCwgNzY5OTQsIDc2OTk4LCA3NzAwMiwgNzcwMDYsIDc3MDEwLCA3NzAxNCwgCisgICAgNzcwMTgsIDc3MDIyLCA3NzAyNiwgNzcwMzAsIDc3MDM0LCA3NzAzOCwgNzcwNDIsIDc3MDQ2LCA3NzA1MCwgNzcwNTQsIAorICAgIDc3MDU4LCA3NzA2MiwgNzcwNjYsIDc3MDcwLCA3NzA3NCwgNzcwNzgsIDc3MDgyLCA3NzA4NiwgNzcwOTAsIDc3MDk0LCAKKyAgICA3NzA5OCwgNzcxMDIsIDc3MTA2LCA3NzExMCwgNzcxMTQsIDc3MTE4LCA3NzEyMiwgNzcxMjYsIDc3MTMwLCA3NzEzNCwgCisgICAgNzcxMzgsIDc3MTQyLCA3NzE0NiwgNzcxNTAsIDc3MTU0LCA3NzE1OCwgNzcxNjIsIDc3MTY2LCA3NzE3MCwgNzcxNzQsIAorICAgIDc3MTc4LCA3NzE4MiwgNzcxODYsIDc3MTkwLCA3NzE5NCwgNzcxOTgsIDc3MjAyLCA3NzIwNiwgNzcyMTAsIDc3MjE0LCAKKyAgICA3NzIxOCwgNzcyMjIsIDc3MjI2LCA3NzIzMCwgNzcyMzQsIDc3MjM4LCA3NzI0MiwgNzcyNDYsIDc3MjUwLCA3NzI1NCwgCisgICAgNzcyNTgsIDc3MjYyLCA3NzI2NiwgNzcyNzAsIDc3Mjc0LCA3NzI3OCwgNzcyODIsIDc3Mjg2LCA3NzI5MCwgNzcyOTQsIAorICAgIDc3Mjk4LCA3NzMwMiwgNzczMDYsIDc3MzEwLCA3NzMxNCwgNzczMTgsIDc3MzIyLCA3NzMyNiwgNzczMzAsIDc3MzM0LCAKKyAgICA3NzMzOCwgNzczNDIsIDc3MzQ2LCA3NzM1MCwgNzczNTQsIDc3MzU4LCA3NzM2MiwgNzczNjYsIDc3MzcwLCA3NzM3NCwgCisgICAgNzczNzgsIDc3MzgyLCA3NzM4NiwgNzczOTAsIDc3Mzk0LCA3NzM5OCwgNzc0MDIsIDc3NDA2LCA3NzQxMCwgNzc0MTQsIAorICAgIDc3NDE4LCA3NzQyMiwgNzc0MjYsIDc3NDMwLCA3NzQzNCwgNzc0MzgsIDc3NDQyLCA3NzQ0NiwgNzc0NTAsIDc3NDU0LCAKKyAgICA3NzQ1OCwgNzc0NjIsIDc3NDY2LCA3NzQ3MCwgNzc0NzQsIDc3NDc4LCA3NzQ4MiwgNzc0ODYsIDc3NDkwLCA3NzQ5NCwgCisgICAgNzc0OTgsIDc3NTAyLCA3NzUwNiwgNzc1MTAsIDc3NTE0LCA3NzUxOCwgNzc1MjIsIDc3NTI2LCA3NzUzMCwgNzc1MzQsIAorICAgIDc3NTM4LCA3NzU0MiwgNzc1NDYsIDc3NTUwLCA3NzU1NCwgNzc1NTgsIDc3NTYyLCA3NzU2NiwgNzc1NzAsIDc3NTc0LCAKKyAgICA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTQsIDc3NTk4LCA3NzYwMiwgNzc2MDYsIDc3NjEwLCA3NzYxNCwgCisgICAgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzAsIDc3NjM0LCA3NzYzOCwgNzc2NDIsIDc3NjQ2LCA3NzY1MCwgNzc2NTQsIAorICAgIDc3NjU4LCA3NzY2MiwgNzc2NjYsIDc3NjcwLCA3NzY3NCwgNzc2NzgsIDc3NjgyLCA3NzY4NiwgNzc2OTAsIDc3Njk0LCAKKyAgICA3NzY5OCwgNzc3MDIsIDc3NzA2LCA3NzcxMCwgNzc3MTQsIDc3NzE4LCA3NzcyMiwgNzc3MjYsIDc3NzMwLCA3NzczNCwgCisgICAgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY2LCA3Nzc3MCwgNzc3NzQsIAorICAgIDc3Nzc4LCA3Nzc4MiwgNzc3ODYsIDc3NzkwLCA3Nzc5NCwgNzc3OTgsIDc3ODAyLCA3NzgwNiwgNzc4MTAsIDc3ODE0LCAKKyAgICA3NzgxOCwgNzc4MjIsIDc3ODI2LCA3NzgzMCwgNzc4MzQsIDc3ODM4LCA3Nzg0MiwgNzc4NDYsIDc3ODUwLCA3Nzg1NCwgCisgICAgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgMCwgMCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCisgICAgNzc4OTQsIDc3ODk4LCA3NzkwMiwgNzc5MDYsIDc3OTEwLCA3NzkxNCwgNzc5MTgsIDc3OTIyLCA3NzkyNiwgNzc5MzAsIAorICAgIDc3OTM0LCA3NzkzOCwgNzc5NDIsIDc3OTQ2LCA3Nzk1MCwgNzc5NTQsIDc3OTU4LCA3Nzk2MiwgNzc5NjYsIDc3OTcwLCAKKyAgICA3Nzk3NCwgNzc5NzgsIDc3OTgyLCA3Nzk4NiwgNzc5OTAsIDc3OTk0LCA3Nzk5OCwgNzgwMDIsIDc4MDA2LCA3ODAxMCwgCisgICAgNzgwMTQsIDc4MDE4LCA3ODAyMiwgNzgwMjYsIDc4MDMwLCA3ODAzNCwgNzgwMzgsIDc4MDQyLCA3ODA0NiwgNzgwNTAsIAorICAgIDc4MDU0LCA3ODA1OCwgNzgwNjIsIDc4MDY2LCA3ODA3MCwgNzgwNzQsIDc4MDc4LCA3ODA4MiwgNzgwODYsIDc4MDkwLCAKKyAgICA3ODA5NCwgNzgwOTgsIDc4MTAyLCA3ODEwNiwgNzgxMTAsIDc4MTE0LCA3ODExOCwgNzgxMjIsIDc4MTI2LCA3ODEzMCwgCisgICAgNzgxMzQsIDc4MTM4LCA3ODE0MiwgNzgxNDYsIDc4MTUwLCA3ODE1NCwgNzgxNTgsIDc4MTYyLCA3ODE2NiwgNzgxNzAsIAorICAgIDc4MTc0LCA3ODE3OCwgNzgxODIsIDc4MTg2LCA3ODE5MCwgNzgxOTQsIDc4MTk4LCA3ODIwMiwgNzgyMDYsIDc4MjEwLCAKKyAgICA3ODIxNCwgNzgyMTgsIDc4MjIyLCA3ODIyNiwgNzgyMzAsIDc4MjM0LCA3ODIzOCwgNzgyNDIsIDc4MjQ2LCA3ODI1MCwgCisgICAgNzgyNTQsIDc4MjU4LCA3ODI2MiwgNzgyNjYsIDc4MjcwLCA3ODI3NCwgNzgyNzgsIDc4MjgyLCA3ODI4NiwgNzgyOTAsIAorICAgIDc4Mjk0LCA3ODI5OCwgNzgzMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzA2LCAKKyAgICA3ODMxMSwgNzgzMTYsIDc4MzIxLCA3ODMyNiwgNzgzMzEsIDc4MzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3ODM0NCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzIsIDAsIDAsIDAsIDAsIDAsIDc4Mzc5LCA3ODM4NiwgCisgICAgNzgzOTMsIDc4NDAzLCA3ODQwOSwgNzg0MTUsIDc4NDIxLCA3ODQyNywgNzg0MzMsIDc4NDM5LCA3ODQ0NiwgNzg0NTIsIAorICAgIDc4NDU4LCA3ODQ2NCwgNzg0NzMsIDc4NDgyLCA3ODQ5NCwgNzg1MDYsIDc4NTEyLCA3ODUxOCwgNzg1MjQsIDc4NTMxLCAKKyAgICA3ODUzOCwgNzg1NDUsIDc4NTUyLCA3ODU1OSwgMCwgNzg1NjYsIDc4NTczLCA3ODU4MCwgNzg1ODgsIDc4NTk1LCAwLCAKKyAgICA3ODYwMiwgMCwgNzg2MDksIDc4NjE2LCAwLCA3ODYyMywgNzg2MzEsIDAsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCAKKyAgICA3ODY2NiwgNzg2NzMsIDc4NjgwLCA3ODY4NywgNzg2OTQsIDc4NzAxLCA3ODcwNiwgNzg3MTMsIDc4NzIwLCA3ODcyNiwgCisgICAgNzg3MzIsIDc4NzM4LCA3ODc0NCwgNzg3NTAsIDc4NzU2LCA3ODc2MiwgNzg3NjgsIDc4Nzc0LCA3ODc4MCwgNzg3ODYsIAorICAgIDc4NzkyLCA3ODc5OCwgNzg4MDQsIDc4ODEwLCA3ODgxNiwgNzg4MjIsIDc4ODI4LCA3ODgzNCwgNzg4NDAsIDc4ODQ2LCAKKyAgICA3ODg1MiwgNzg4NTgsIDc4ODY0LCA3ODg3MCwgNzg4NzYsIDc4ODgyLCA3ODg4OCwgNzg4OTQsIDc4OTAwLCA3ODkwNiwgCisgICAgNzg5MTIsIDc4OTE4LCA3ODkyNCwgNzg5MzAsIDc4OTM2LCA3ODk0MiwgNzg5NDgsIDc4OTU0LCA3ODk2MCwgNzg5NjYsIAorICAgIDc4OTcyLCA3ODk3OCwgNzg5ODQsIDc4OTkwLCA3ODk5NiwgNzkwMDIsIDc5MDA4LCA3OTAxNCwgNzkwMjAsIDc5MDI2LCAKKyAgICA3OTAzMiwgNzkwMzgsIDc5MDQ0LCA3OTA1MCwgNzkwNTYsIDc5MDYyLCA3OTA2OCwgNzkwNzQsIDc5MDgwLCA3OTA4NiwgCisgICAgNzkwOTIsIDc5MDk4LCA3OTEwNCwgNzkxMTAsIDc5MTE2LCA3OTEyMiwgNzkxMjgsIDc5MTM0LCA3OTE0MCwgNzkxNDYsIAorICAgIDc5MTUyLCA3OTE1OCwgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODQsIDc5MTkyLCA3OTE5OCwgNzkyMDQsIDc5MjEwLCAKKyAgICA3OTIxNiwgNzkyMjUsIDc5MjM0LCA3OTI0MiwgNzkyNTAsIDc5MjU4LCA3OTI2NiwgNzkyNzQsIDc5MjgyLCA3OTI5MCwgCisgICAgNzkyOTgsIDc5MzA1LCA3OTMxMiwgNzkzMjIsIDc5MzMyLCA3OTMzNiwgNzkzNDAsIDc5MzQ1LCA3OTM1MCwgNzkzNTUsIAorICAgIDc5MzYwLCA3OTM2OSwgNzkzNzgsIDc5Mzg0LCA3OTM5MCwgNzkzOTcsIDc5NDA0LCA3OTQxMSwgNzk0MTUsIDc5NDIxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTQyNywgNzk0MzMsIDc5NDM5LCAKKyAgICA3OTQ0NSwgNzk0NTEsIDc5NDU2LCA3OTQ2MSwgNzk0NjcsIDc5NDczLCA3OTQ3OSwgNzk0ODUsIDc5NDkzLCA3OTQ5OSwgCisgICAgNzk1MDUsIDc5NTEzLCA3OTUyMSwgNzk1MjksIDc5NTM3LCA3OTU0MiwgNzk1NDcsIDc5NTUyLCA3OTU1NywgNzk1NzAsIAorICAgIDc5NTgzLCA3OTU5MywgNzk2MDMsIDc5NjE0LCA3OTYyNSwgNzk2MzYsIDc5NjQ3LCA3OTY1NywgNzk2NjcsIDc5Njc4LCAKKyAgICA3OTY4OSwgNzk3MDAsIDc5NzExLCA3OTcyMSwgNzk3MzEsIDc5NzQxLCA3OTc1NywgNzk3NzMsIDc5Nzg5LCA3OTc5NiwgCisgICAgNzk4MDMsIDc5ODEwLCA3OTgxNywgNzk4MjcsIDc5ODM3LCA3OTg0NywgNzk4NTksIDc5ODY5LCA3OTg3NywgNzk4ODUsIAorICAgIDc5ODk0LCA3OTkwMiwgNzk5MTIsIDc5OTIwLCA3OTkyOCwgNzk5MzYsIDc5OTQ1LCA3OTk1MywgNzk5NjMsIDc5OTcxLCAKKyAgICA3OTk3OSwgNzk5ODcsIDc5OTk3LCA4MDAwNSwgODAwMTIsIDgwMDE5LCA4MDAyNiwgODAwMzMsIDgwMDQxLCA4MDA0OSwgCisgICAgODAwNTcsIDgwMDY1LCA4MDA3MywgODAwODIsIDgwMDkwLCA4MDA5OCwgODAxMDYsIDgwMTE0LCA4MDEyMiwgODAxMzEsIAorICAgIDgwMTM5LCA4MDE0NywgODAxNTUsIDgwMTYzLCA4MDE3MSwgODAxNzksIDgwMTg3LCA4MDE5NSwgODAyMDMsIDgwMjExLCAKKyAgICA4MDIyMCwgODAyMjgsIDgwMjM4LCA4MDI0NiwgODAyNTQsIDgwMjYyLCA4MDI3MiwgODAyODAsIDgwMjg4LCA4MDI5NiwgCisgICAgODAzMDQsIDgwMzEzLCA4MDMyMiwgODAzMzAsIDgwMzQwLCA4MDM0OCwgODAzNTYsIDgwMzY0LCA4MDM3MywgODAzODEsIAorICAgIDgwMzkxLCA4MDM5OSwgODA0MDYsIDgwNDEzLCA4MDQyMSwgODA0MjgsIDgwNDM3LCA4MDQ0NCwgODA0NTIsIDgwNDYwLCAKKyAgICA4MDQ2OSwgODA0NzcsIDgwNDg3LCA4MDQ5NSwgODA1MDMsIDgwNTExLCA4MDUyMSwgODA1MjksIDgwNTM2LCA4MDU0MywgCisgICAgODA1NTEsIDgwNTU4LCA4MDU2NywgODA1NzQsIDgwNTg0LCA4MDU5NCwgODA2MDUsIDgwNjE0LCA4MDYyMywgODA2MzIsIAorICAgIDgwNjQxLCA4MDY1MCwgODA2NjAsIDgwNjcxLCA4MDY4MiwgODA2OTIsIDgwNzAzLCA4MDcxNSwgODA3MjUsIDgwNzM0LCAKKyAgICA4MDc0MywgODA3NTEsIDgwNzYwLCA4MDc3MCwgODA3NzgsIDgwNzg3LCA4MDc5NiwgODA4MDQsIDgwODEzLCA4MDgyMywgCisgICAgODA4MzEsIDgwODQwLCA4MDg0OSwgODA4NTcsIDgwODY2LCA4MDg3NiwgODA4ODQsIDgwODk0LCA4MDkwMiwgODA5MTIsIAorICAgIDgwOTIwLCA4MDkyOCwgODA5MzcsIDgwOTQ1LCA4MDk1NSwgODA5NjMsIDgwOTcxLCA4MDk4MSwgODA5ODksIDgwOTk2LCAKKyAgICA4MTAwMywgODEwMTIsIDgxMDIxLCA4MTAyOSwgODEwMzgsIDgxMDQ4LCA4MTA1NiwgODEwNjcsIDgxMDc1LCA4MTA4MywgCisgICAgODEwOTAsIDgxMDk4LCA4MTEwNywgODExMTQsIDgxMTI0LCA4MTEzNCwgODExNDUsIDgxMTU1LCA4MTE2NiwgODExNzQsIAorICAgIDgxMTgyLCA4MTE5MSwgODExOTksIDgxMjA4LCA4MTIxNiwgODEyMjQsIDgxMjMzLCA4MTI0MSwgODEyNTAsIDgxMjU4LCAKKyAgICA4MTI2NSwgODEyNzIsIDgxMjc5LCA4MTI4NiwgODEyOTQsIDgxMzAyLCA4MTMxMCwgODEzMTgsIDgxMzI3LCA4MTMzNSwgCisgICAgODEzNDMsIDgxMzUyLCA4MTM2MCwgODEzNjgsIDgxMzc2LCA4MTM4NSwgODEzOTMsIDgxNDAxLCA4MTQwOSwgODE0MTcsIAorICAgIDgxNDI1LCA4MTQzMywgODE0NDEsIDgxNDQ5LCA4MTQ1NywgODE0NjYsIDgxNDc0LCA4MTQ4MiwgODE0OTAsIDgxNDk4LCAKKyAgICA4MTUwNiwgODE1MTUsIDgxNTI0LCA4MTUzMiwgODE1NDAsIDgxNTQ4LCA4MTU1NywgODE1NjUsIDgxNTc0LCA4MTU4MSwgCisgICAgODE1ODgsIDgxNTk2LCA4MTYwMywgODE2MTEsIDgxNjE5LCA4MTYyOCwgODE2MzYsIDgxNjQ1LCA4MTY1MywgODE2NjEsIAorICAgIDgxNjcxLCA4MTY3OCwgODE2ODUsIDgxNjkzLCA4MTcwMCwgODE3MDgsIDgxNzE4LCA4MTcyOSwgODE3MzcsIDgxNzQ2LCAKKyAgICA4MTc1NCwgODE3NjMsIDgxNzcxLCA4MTc4MCwgODE3ODgsIDgxNzk3LCA4MTgwNSwgODE4MTQsIDgxODIzLCA4MTgzMSwgCisgICAgODE4MzksIDgxODQ3LCA4MTg1NiwgODE4NjMsIDgxODcxLCA4MTg4MCwgODE4ODksIDgxODk4LCA4MTkwOCwgODE5MTYsIAorICAgIDgxOTI2LCA4MTkzNCwgODE5NDQsIDgxOTUyLCA4MTk2MiwgODE5NzAsIDgxOTgwLCA4MTk4OCwgODE5OTcsIDgyMDA0LCAKKyAgICA4MjAxMywgODIwMjAsIDgyMDMwLCA4MjAzOCwgODIwNDgsIDgyMDU2LCA4MjA2NiwgODIwNzQsIDgyMDgyLCA4MjA5MCwgCisgICAgODIwOTksIDgyMTA3LCA4MjExNiwgODIxMjUsIDgyMTM0LCA4MjE0MywgODIxNTMsIDgyMTYxLCA4MjE3MSwgODIxNzksIAorICAgIDgyMTg5LCA4MjE5NywgODIyMDcsIDgyMjE1LCA4MjIyNSwgODIyMzMsIDgyMjQyLCA4MjI0OSwgODIyNTgsIDgyMjY1LCAKKyAgICA4MjI3NSwgODIyODMsIDgyMjkzLCA4MjMwMSwgODIzMTEsIDgyMzE5LCA4MjMyNywgODIzMzUsIDgyMzQ0LCA4MjM1MiwgCisgICAgODIzNjEsIDgyMzcwLCA4MjM3OSwgODIzODgsIDgyMzk2LCA4MjQwNCwgODI0MTMsIDgyNDIxLCA4MjQzMCwgODI0MzksIAorICAgIDgyNDQ3LCA4MjQ1NSwgODI0NjMsIDgyNDcyLCA4MjQ4MCwgODI0ODgsIDgyNDk3LCA4MjUwNSwgODI1MTMsIDgyNTIxLCAKKyAgICA4MjUyOSwgODI1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyNTM5LCAKKyAgICA4MjU0OSwgODI1NTksIDgyNTY5LCA4MjU3OSwgODI1OTAsIDgyNjAwLCA4MjYxMCwgODI2MjEsIDgyNjMwLCA4MjYzOSwgCisgICAgODI2NDgsIDgyNjU5LCA4MjY2OSwgODI2NzksIDgyNjkxLCA4MjcwMSwgODI3MTEsIDgyNzIxLCA4MjczMSwgODI3NDEsIAorICAgIDgyNzUxLCA4Mjc2MSwgODI3NzEsIDgyNzgxLCA4Mjc5MSwgODI4MDEsIDgyODEyLCA4MjgyMywgODI4MzMsIDgyODQzLCAKKyAgICA4Mjg1NSwgODI4NjYsIDgyODc3LCA4Mjg4NywgODI4OTcsIDgyOTA3LCA4MjkxNywgODI5MjcsIDgyOTM3LCA4Mjk0NywgCisgICAgODI5NTksIDgyOTY5LCA4Mjk3OSwgODI5OTEsIDgzMDAyLCA4MzAxMywgODMwMjMsIDgzMDMzLCA4MzA0MywgODMwNTMsIAorICAgIDgzMDY1LCA4MzA3NSwgODMwODUsIDgzMDk2LCA4MzEwNywgODMxMTcsIDgzMTI3LCA4MzEzNiwgODMxNDUsIDgzMTU0LCAKKyAgICA4MzE2MywgODMxNzIsIDgzMTgyLCAwLCAwLCA4MzE5MiwgODMyMDIsIDgzMjEyLCA4MzIyMiwgODMyMzIsIDgzMjQ0LCAKKyAgICA4MzI1NCwgODMyNjQsIDgzMjc2LCA4MzI4NiwgODMyOTgsIDgzMzA3LCA4MzMxNiwgODMzMjcsIDgzMzM3LCA4MzM0OSwgCisgICAgODMzNjAsIDgzMzczLCA4MzM4MywgODMzOTUsIDgzNDA0LCA4MzQxNSwgODM0MjYsIDgzNDM5LCA4MzQ0OSwgODM0NTksIAorICAgIDgzNDY5LCA4MzQ3OSwgODM0ODksIDgzNDk4LCA4MzUwNywgODM1MTYsIDgzNTI1LCA4MzUzNSwgODM1NDUsIDgzNTU1LCAKKyAgICA4MzU2NSwgODM1NzUsIDgzNTg1LCA4MzU5NSwgODM2MDUsIDgzNjE1LCA4MzYyNSwgODM2MzUsIDgzNjQ1LCA4MzY1NCwgCisgICAgODM2NjMsIDgzNjcyLCA4MzY4MiwgODM2OTIsIDgzNzAyLCA4MzcxMiwgODM3MjIsIDgzNzMzLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODI3OCwgNzgyODMsIDc4Mjg4LCA3ODI5MywgNzgyOTgsIDc4MzAzLCA3ODMxMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgzMTYsIDc4MzIzLCA3ODMzMCwgNzgzMzcsIDc4MzQ0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3ODM1MSwgNzgzNTgsIDc4MzY1LCA3ODM3NSwgNzgzODEsIDc4Mzg3LCA3ODM5MywgNzgzOTksIAotICAgIDc4NDA1LCA3ODQxMSwgNzg0MTgsIDc4NDI0LCA3ODQzMCwgNzg0MzYsIDc4NDQ1LCA3ODQ1NCwgNzg0NjYsIDc4NDc4LCAKLSAgICA3ODQ4NCwgNzg0OTAsIDc4NDk2LCA3ODUwMywgNzg1MTAsIDc4NTE3LCA3ODUyNCwgNzg1MzEsIDAsIDc4NTM4LCA3ODU0NSwgCi0gICAgNzg1NTIsIDc4NTYwLCA3ODU2NywgMCwgNzg1NzQsIDAsIDc4NTgxLCA3ODU4OCwgMCwgNzg1OTUsIDc4NjAzLCAwLCAKLSAgICA3ODYxMCwgNzg2MTcsIDc4NjI0LCA3ODYzMSwgNzg2MzgsIDc4NjQ1LCA3ODY1MiwgNzg2NTksIDc4NjY2LCA3ODY3MywgCi0gICAgNzg2NzgsIDc4Njg1LCA3ODY5MiwgNzg2OTgsIDc4NzA0LCA3ODcxMCwgNzg3MTYsIDc4NzIyLCA3ODcyOCwgNzg3MzQsIAotICAgIDc4NzQwLCA3ODc0NiwgNzg3NTIsIDc4NzU4LCA3ODc2NCwgNzg3NzAsIDc4Nzc2LCA3ODc4MiwgNzg3ODgsIDc4Nzk0LCAKLSAgICA3ODgwMCwgNzg4MDYsIDc4ODEyLCA3ODgxOCwgNzg4MjQsIDc4ODMwLCA3ODgzNiwgNzg4NDIsIDc4ODQ4LCA3ODg1NCwgCi0gICAgNzg4NjAsIDc4ODY2LCA3ODg3MiwgNzg4NzgsIDc4ODg0LCA3ODg5MCwgNzg4OTYsIDc4OTAyLCA3ODkwOCwgNzg5MTQsIAotICAgIDc4OTIwLCA3ODkyNiwgNzg5MzIsIDc4OTM4LCA3ODk0NCwgNzg5NTAsIDc4OTU2LCA3ODk2MiwgNzg5NjgsIDc4OTc0LCAKLSAgICA3ODk4MCwgNzg5ODYsIDc4OTkyLCA3ODk5OCwgNzkwMDQsIDc5MDEwLCA3OTAxNiwgNzkwMjIsIDc5MDI4LCA3OTAzNCwgCi0gICAgNzkwNDAsIDc5MDQ2LCA3OTA1MiwgNzkwNTgsIDc5MDY0LCA3OTA3MCwgNzkwNzYsIDc5MDgyLCA3OTA4OCwgNzkwOTQsIAotICAgIDc5MTAwLCA3OTEwNiwgNzkxMTIsIDc5MTE4LCA3OTEyNCwgNzkxMzAsIDc5MTM2LCA3OTE0MiwgNzkxNDgsIDc5MTU2LCAKLSAgICA3OTE2NCwgNzkxNzAsIDc5MTc2LCA3OTE4MiwgNzkxODgsIDc5MTk3LCA3OTIwNiwgNzkyMTQsIDc5MjIyLCA3OTIzMCwgCi0gICAgNzkyMzgsIDc5MjQ2LCA3OTI1NCwgNzkyNjIsIDc5MjcwLCA3OTI3NywgNzkyODQsIDc5Mjk0LCA3OTMwNCwgNzkzMDgsIAotICAgIDc5MzEyLCA3OTMxNywgNzkzMjIsIDc5MzI3LCA3OTMzMiwgNzkzNDEsIDc5MzUwLCA3OTM1NiwgNzkzNjIsIDc5MzY5LCAKLSAgICA3OTM3NiwgNzkzODMsIDc5Mzg3LCA3OTM5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzkzOTksIDc5NDA1LCA3OTQxMSwgNzk0MTcsIDc5NDIzLCA3OTQyOCwgNzk0MzMsIDc5NDM5LCA3OTQ0NSwgCi0gICAgNzk0NTEsIDc5NDU3LCA3OTQ2NSwgNzk0NzEsIDc5NDc3LCA3OTQ4NSwgNzk0OTMsIDc5NTAxLCA3OTUwOSwgNzk1MTQsIAotICAgIDc5NTE5LCA3OTUyNCwgNzk1MjksIDc5NTQyLCA3OTU1NSwgNzk1NjUsIDc5NTc1LCA3OTU4NiwgNzk1OTcsIDc5NjA4LCAKLSAgICA3OTYxOSwgNzk2MjksIDc5NjM5LCA3OTY1MCwgNzk2NjEsIDc5NjcyLCA3OTY4MywgNzk2OTMsIDc5NzAzLCA3OTcxMywgCi0gICAgNzk3MjksIDc5NzQ1LCA3OTc2MSwgNzk3NjgsIDc5Nzc1LCA3OTc4MiwgNzk3ODksIDc5Nzk5LCA3OTgwOSwgNzk4MTksIAotICAgIDc5ODMxLCA3OTg0MSwgNzk4NDksIDc5ODU3LCA3OTg2NiwgNzk4NzQsIDc5ODg0LCA3OTg5MiwgNzk5MDAsIDc5OTA4LCAKLSAgICA3OTkxNywgNzk5MjUsIDc5OTM1LCA3OTk0MywgNzk5NTEsIDc5OTU5LCA3OTk2OSwgNzk5NzcsIDc5OTg0LCA3OTk5MSwgCi0gICAgNzk5OTgsIDgwMDA1LCA4MDAxMywgODAwMjEsIDgwMDI5LCA4MDAzNywgODAwNDUsIDgwMDU0LCA4MDA2MiwgODAwNzAsIAotICAgIDgwMDc4LCA4MDA4NiwgODAwOTQsIDgwMTAzLCA4MDExMSwgODAxMTksIDgwMTI3LCA4MDEzNSwgODAxNDMsIDgwMTUxLCAKLSAgICA4MDE1OSwgODAxNjcsIDgwMTc1LCA4MDE4MywgODAxOTIsIDgwMjAwLCA4MDIxMCwgODAyMTgsIDgwMjI2LCA4MDIzNCwgCi0gICAgODAyNDQsIDgwMjUyLCA4MDI2MCwgODAyNjgsIDgwMjc2LCA4MDI4NSwgODAyOTQsIDgwMzAyLCA4MDMxMiwgODAzMjAsIAotICAgIDgwMzI4LCA4MDMzNiwgODAzNDUsIDgwMzUzLCA4MDM2MywgODAzNzEsIDgwMzc4LCA4MDM4NSwgODAzOTMsIDgwNDAwLCAKLSAgICA4MDQwOSwgODA0MTYsIDgwNDI0LCA4MDQzMiwgODA0NDEsIDgwNDQ5LCA4MDQ1OSwgODA0NjcsIDgwNDc1LCA4MDQ4MywgCi0gICAgODA0OTMsIDgwNTAxLCA4MDUwOCwgODA1MTUsIDgwNTIzLCA4MDUzMCwgODA1MzksIDgwNTQ2LCA4MDU1NiwgODA1NjYsIAotICAgIDgwNTc3LCA4MDU4NiwgODA1OTUsIDgwNjA0LCA4MDYxMywgODA2MjIsIDgwNjMyLCA4MDY0MywgODA2NTQsIDgwNjY0LCAKLSAgICA4MDY3NSwgODA2ODcsIDgwNjk3LCA4MDcwNiwgODA3MTUsIDgwNzIzLCA4MDczMiwgODA3NDIsIDgwNzUwLCA4MDc1OSwgCi0gICAgODA3NjgsIDgwNzc2LCA4MDc4NSwgODA3OTUsIDgwODAzLCA4MDgxMiwgODA4MjEsIDgwODI5LCA4MDgzOCwgODA4NDgsIAotICAgIDgwODU2LCA4MDg2NiwgODA4NzQsIDgwODg0LCA4MDg5MiwgODA5MDAsIDgwOTA5LCA4MDkxNywgODA5MjcsIDgwOTM1LCAKLSAgICA4MDk0MywgODA5NTMsIDgwOTYxLCA4MDk2OCwgODA5NzUsIDgwOTg0LCA4MDk5MywgODEwMDEsIDgxMDEwLCA4MTAyMCwgCi0gICAgODEwMjgsIDgxMDM5LCA4MTA0NywgODEwNTUsIDgxMDYyLCA4MTA3MCwgODEwNzksIDgxMDg2LCA4MTA5NiwgODExMDYsIAotICAgIDgxMTE3LCA4MTEyNywgODExMzgsIDgxMTQ2LCA4MTE1NCwgODExNjMsIDgxMTcxLCA4MTE4MCwgODExODgsIDgxMTk2LCAKLSAgICA4MTIwNSwgODEyMTMsIDgxMjIyLCA4MTIzMCwgODEyMzcsIDgxMjQ0LCA4MTI1MSwgODEyNTgsIDgxMjY2LCA4MTI3NCwgCi0gICAgODEyODIsIDgxMjkwLCA4MTI5OSwgODEzMDcsIDgxMzE1LCA4MTMyNCwgODEzMzIsIDgxMzQwLCA4MTM0OCwgODEzNTcsIAotICAgIDgxMzY1LCA4MTM3MywgODEzODEsIDgxMzg5LCA4MTM5NywgODE0MDUsIDgxNDEzLCA4MTQyMSwgODE0MjksIDgxNDM4LCAKLSAgICA4MTQ0NiwgODE0NTQsIDgxNDYyLCA4MTQ3MCwgODE0NzgsIDgxNDg3LCA4MTQ5NiwgODE1MDQsIDgxNTEyLCA4MTUyMCwgCi0gICAgODE1MjksIDgxNTM3LCA4MTU0NiwgODE1NTMsIDgxNTYwLCA4MTU2OCwgODE1NzUsIDgxNTgzLCA4MTU5MSwgODE2MDAsIAotICAgIDgxNjA4LCA4MTYxNywgODE2MjUsIDgxNjMzLCA4MTY0MywgODE2NTAsIDgxNjU3LCA4MTY2NSwgODE2NzIsIDgxNjgwLCAKLSAgICA4MTY5MCwgODE3MDEsIDgxNzA5LCA4MTcxOCwgODE3MjYsIDgxNzM1LCA4MTc0MywgODE3NTIsIDgxNzYwLCA4MTc2OSwgCi0gICAgODE3NzcsIDgxNzg2LCA4MTc5NSwgODE4MDMsIDgxODExLCA4MTgxOSwgODE4MjgsIDgxODM1LCA4MTg0MywgODE4NTIsIAotICAgIDgxODYxLCA4MTg3MCwgODE4ODAsIDgxODg4LCA4MTg5OCwgODE5MDYsIDgxOTE2LCA4MTkyNCwgODE5MzQsIDgxOTQyLCAKLSAgICA4MTk1MiwgODE5NjAsIDgxOTY5LCA4MTk3NiwgODE5ODUsIDgxOTkyLCA4MjAwMiwgODIwMTAsIDgyMDIwLCA4MjAyOCwgCi0gICAgODIwMzgsIDgyMDQ2LCA4MjA1NCwgODIwNjIsIDgyMDcxLCA4MjA3OSwgODIwODgsIDgyMDk3LCA4MjEwNiwgODIxMTUsIAotICAgIDgyMTI1LCA4MjEzMywgODIxNDMsIDgyMTUxLCA4MjE2MSwgODIxNjksIDgyMTc5LCA4MjE4NywgODIxOTcsIDgyMjA1LCAKLSAgICA4MjIxNCwgODIyMjEsIDgyMjMwLCA4MjIzNywgODIyNDcsIDgyMjU1LCA4MjI2NSwgODIyNzMsIDgyMjgzLCA4MjI5MSwgCi0gICAgODIyOTksIDgyMzA3LCA4MjMxNiwgODIzMjQsIDgyMzMzLCA4MjM0MiwgODIzNTEsIDgyMzYwLCA4MjM2OCwgODIzNzYsIAotICAgIDgyMzg1LCA4MjM5MywgODI0MDIsIDgyNDExLCA4MjQxOSwgODI0MjcsIDgyNDM1LCA4MjQ0NCwgODI0NTIsIDgyNDYwLCAKLSAgICA4MjQ2OSwgODI0NzcsIDgyNDg1LCA4MjQ5MywgODI1MDEsIDgyNTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MjUxMSwgODI1MjEsIDgyNTMxLCA4MjU0MSwgODI1NTEsIDgyNTYyLCA4MjU3MiwgODI1ODIsIAotICAgIDgyNTkzLCA4MjYwMiwgODI2MTEsIDgyNjIwLCA4MjYzMSwgODI2NDEsIDgyNjUxLCA4MjY2MywgODI2NzMsIDgyNjgzLCAKLSAgICA4MjY5MywgODI3MDMsIDgyNzEzLCA4MjcyMywgODI3MzMsIDgyNzQzLCA4Mjc1MywgODI3NjMsIDgyNzczLCA4Mjc4NCwgCi0gICAgODI3OTUsIDgyODA1LCA4MjgxNSwgODI4MjcsIDgyODM4LCA4Mjg0OSwgODI4NTksIDgyODY5LCA4Mjg3OSwgODI4ODksIAotICAgIDgyODk5LCA4MjkwOSwgODI5MTksIDgyOTMxLCA4Mjk0MSwgODI5NTEsIDgyOTYzLCA4Mjk3NCwgODI5ODUsIDgyOTk1LCAKLSAgICA4MzAwNSwgODMwMTUsIDgzMDI1LCA4MzAzNywgODMwNDcsIDgzMDU3LCA4MzA2OCwgODMwNzksIDgzMDg5LCA4MzA5OSwgCi0gICAgODMxMDgsIDgzMTE3LCA4MzEyNiwgODMxMzUsIDgzMTQ0LCA4MzE1NCwgMCwgMCwgODMxNjQsIDgzMTc0LCA4MzE4NCwgCi0gICAgODMxOTQsIDgzMjA0LCA4MzIxNiwgODMyMjYsIDgzMjM2LCA4MzI0OCwgODMyNTgsIDgzMjcwLCA4MzI3OSwgODMyODgsIAotICAgIDgzMjk5LCA4MzMwOSwgODMzMjEsIDgzMzMyLCA4MzM0NSwgODMzNTUsIDgzMzY3LCA4MzM3NiwgODMzODcsIDgzMzk4LCAKLSAgICA4MzQxMSwgODM0MjEsIDgzNDMxLCA4MzQ0MSwgODM0NTEsIDgzNDYxLCA4MzQ3MCwgODM0NzksIDgzNDg4LCA4MzQ5NywgCi0gICAgODM1MDcsIDgzNTE3LCA4MzUyNywgODM1MzcsIDgzNTQ3LCA4MzU1NywgODM1NjcsIDgzNTc3LCA4MzU4NywgODM1OTcsIAotICAgIDgzNjA3LCA4MzYxNywgODM2MjYsIDgzNjM1LCA4MzY0NCwgODM2NTQsIDgzNjY0LCA4MzY3NCwgODM2ODQsIDgzNjk0LCAKLSAgICA4MzcwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODM3MTUsIDgzNzMwLCAKLSAgICA4Mzc0NSwgODM3NTEsIDgzNzU3LCA4Mzc2MywgODM3NjksIDgzNzc1LCA4Mzc4MSwgODM3ODcsIDgzNzkzLCA4MzgwMSwgCi0gICAgODM4MDUsIDgzODA4LCAwLCAwLCA4MzgxNiwgODM4MTksIDgzODIyLCA4MzgyNSwgODM4MjgsIDgzODMxLCA4MzgzNCwgCi0gICAgODM4MzcsIDgzODQwLCA4Mzg0MywgODM4NDYsIDgzODQ5LCA4Mzg1MiwgODM4NTUsIDgzODU4LCA4Mzg2MSwgODM4NjQsIAotICAgIDgzODcyLCA4Mzg4MSwgODM4OTIsIDgzOTAwLCA4MzkwOCwgODM5MTcsIDgzOTI2LCA4MzkzNywgODM5NDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgzOTU4LCA4Mzk2MywgODM5NjgsIDgzOTc1LCA4Mzk4MiwgODM5ODgsIDgzOTk0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA4Mzk5OSwgODQwMDksIDg0MDE5LCA4NDAyOSwgODQwMzgsIDg0MDQ5LCA4NDA1OCwgODQwNjcsIAotICAgIDg0MDc3LCA4NDA4NywgODQwOTksIDg0MTExLCA4NDEyMiwgODQxMzMsIDg0MTQ0LCA4NDE1NSwgODQxNjUsIDg0MTc1LCAKLSAgICA4NDE4NSwgODQxOTUsIDg0MjA2LCA4NDIxNywgODQyMjEsIDg0MjI2LCA4NDIzNSwgODQyNDQsIDg0MjQ4LCA4NDI1MiwgCi0gICAgODQyNTYsIDg0MjYxLCA4NDI2NiwgODQyNzEsIDg0Mjc2LCA4NDI3OSwgODQyODMsIDAsIDg0Mjg4LCA4NDI5MSwgODQyOTQsIAotICAgIDg0Mjk4LCA4NDMwMiwgODQzMDcsIDg0MzExLCA4NDMxNSwgODQzMjAsIDg0MzI1LCA4NDMzMiwgODQzMzksIDg0MzQyLCAKLSAgICA4NDM0NSwgODQzNDgsIDg0MzUxLCA4NDM1NCwgODQzNTgsIDg0MzYyLCAwLCA4NDM2NiwgODQzNzEsIDg0Mzc1LCA4NDM3OSwgCi0gICAgMCwgMCwgMCwgMCwgODQzODQsIDg0Mzg5LCA4NDM5NiwgODQ0MDEsIDg0NDA2LCAwLCA4NDQxMSwgODQ0MTYsIDg0NDIxLCAKLSAgICA4NDQyNiwgODQ0MzEsIDg0NDM2LCA4NDQ0MSwgODQ0NDYsIDg0NDUxLCA4NDQ1NiwgODQ0NjEsIDg0NDY2LCA4NDQ3NSwgCi0gICAgODQ0ODQsIDg0NDkyLCA4NDUwMCwgODQ1MDksIDg0NTE4LCA4NDUyNywgODQ1MzYsIDg0NTQ0LCA4NDU1MiwgODQ1NjAsIAotICAgIDg0NTY4LCA4NDU3MywgODQ1NzgsIDg0NTg0LCA4NDU5MCwgODQ1OTYsIDg0NjAyLCA4NDYxMCwgODQ2MTgsIDg0NjI0LCAKLSAgICA4NDYzMCwgODQ2MzYsIDg0NjQyLCA4NDY0OCwgODQ2NTQsIDg0NjYwLCA4NDY2NiwgODQ2NzEsIDg0Njc2LCA4NDY4MSwgCi0gICAgODQ2ODYsIDg0NjkxLCA4NDY5NiwgODQ3MDEsIDg0NzA2LCA4NDcxMiwgODQ3MTgsIDg0NzI0LCA4NDczMCwgODQ3MzYsIAotICAgIDg0NzQyLCA4NDc0OCwgODQ3NTQsIDg0NzYwLCA4NDc2NiwgODQ3NzIsIDg0Nzc4LCA4NDc4NCwgODQ3OTAsIDg0Nzk2LCAKLSAgICA4NDgwMiwgODQ4MDgsIDg0ODE0LCA4NDgyMCwgODQ4MjYsIDg0ODMyLCA4NDgzOCwgODQ4NDQsIDg0ODUwLCA4NDg1NiwgCi0gICAgODQ4NjIsIDg0ODY4LCA4NDg3NCwgODQ4ODAsIDg0ODg2LCA4NDg5MiwgODQ4OTgsIDg0OTA0LCA4NDkxMCwgODQ5MTYsIAotICAgIDg0OTIyLCA4NDkyOCwgODQ5MzQsIDg0OTQwLCA4NDk0NiwgODQ5NTIsIDg0OTU4LCA4NDk2NCwgODQ5NzAsIDg0OTc2LCAKLSAgICA4NDk4MiwgODQ5ODgsIDg0OTk0LCA4NTAwMCwgODUwMDYsIDg1MDEyLCA4NTAxOCwgODUwMjQsIDg1MDMwLCA4NTAzNiwgCi0gICAgODUwNDIsIDg1MDQ4LCA4NTA1NCwgODUwNjAsIDg1MDY2LCA4NTA3MSwgODUwNzYsIDg1MDgxLCA4NTA4NiwgODUwOTIsIAotICAgIDg1MDk4LCA4NTEwNCwgODUxMTAsIDg1MTE2LCA4NTEyMiwgODUxMjgsIDg1MTM0LCA4NTE0MCwgODUxNDYsIDg1MTUzLCAKLSAgICA4NTE2MCwgODUxNjUsIDg1MTcwLCA4NTE3NSwgODUxODAsIDg1MTkyLCA4NTIwNCwgODUyMTUsIDg1MjI2LCA4NTIzOCwgCi0gICAgODUyNTAsIDg1MjU4LCAwLCAwLCA4NTI2NiwgMCwgODUyNzQsIDg1Mjc4LCA4NTI4MiwgODUyODUsIDg1Mjg5LCA4NTI5MywgCi0gICAgODUyOTYsIDg1Mjk5LCA4NTMwMywgODUzMDcsIDg1MzEwLCA4NTMxMywgODUzMTYsIDg1MzE5LCA4NTMyNCwgODUzMjcsIAotICAgIDg1MzMxLCA4NTMzNCwgODUzMzcsIDg1MzQwLCA4NTM0MywgODUzNDYsIDg1MzQ5LCA4NTM1MiwgODUzNTUsIDg1MzU4LCAKLSAgICA4NTM2MSwgODUzNjQsIDg1MzY4LCA4NTM3MiwgODUzNzYsIDg1MzgwLCA4NTM4NSwgODUzOTAsIDg1Mzk2LCA4NTQwMiwgCi0gICAgODU0MDgsIDg1NDEzLCA4NTQxOSwgODU0MjUsIDg1NDMxLCA4NTQzNiwgODU0NDIsIDg1NDQ4LCA4NTQ1MywgODU0NTgsIAotICAgIDg1NDY0LCA4NTQ2OSwgODU0NzUsIDg1NDgxLCA4NTQ4NiwgODU0OTIsIDg1NDk4LCA4NTUwMywgODU1MDksIDg1NTE1LCAKLSAgICA4NTUyMSwgODU1MjcsIDg1NTMzLCA4NTUzNywgODU1NDIsIDg1NTQ2LCA4NTU1MSwgODU1NTUsIDg1NTYwLCA4NTU2NSwgCi0gICAgODU1NzEsIDg1NTc3LCA4NTU4MywgODU1ODgsIDg1NTk0LCA4NTYwMCwgODU2MDYsIDg1NjExLCA4NTYxNywgODU2MjMsIAotICAgIDg1NjI4LCA4NTYzMywgODU2MzksIDg1NjQ0LCA4NTY1MCwgODU2NTYsIDg1NjYxLCA4NTY2NywgODU2NzMsIDg1Njc4LCAKLSAgICA4NTY4NCwgODU2OTAsIDg1Njk2LCA4NTcwMiwgODU3MDgsIDg1NzEzLCA4NTcxNywgODU3MjIsIDg1NzI0LCA4NTcyOSwgCi0gICAgODU3MzQsIDg1NzQwLCA4NTc0NSwgODU3NTAsIDg1NzU0LCA4NTc2MCwgODU3NjUsIDg1NzcwLCA4NTc3NSwgODU3ODAsIAotICAgIDg1Nzg1LCA4NTc5MCwgODU3OTUsIDg1ODAxLCA4NTgwNywgODU4MTMsIDg1ODIxLCA4NTgyNSwgODU4MjksIDg1ODMzLCAKLSAgICA4NTgzNywgODU4NDEsIDg1ODQ1LCA4NTg1MCwgODU4NTUsIDg1ODYwLCA4NTg2NSwgODU4NjksIDg1ODc0LCA4NTg3OSwgCi0gICAgODU4ODQsIDg1ODg5LCA4NTg5NCwgODU4OTksIDg1OTA0LCA4NTkwOSwgODU5MTMsIDg1OTE3LCA4NTkyMiwgODU5MjcsIAotICAgIDg1OTMyLCA4NTkzNywgODU5NDEsIDg1OTQ2LCA4NTk1MSwgODU5NTYsIDg1OTYxLCA4NTk2NSwgODU5NzAsIDg1OTc1LCAKLSAgICA4NTk4MCwgODU5ODUsIDg1OTg5LCA4NTk5NCwgODU5OTksIDg2MDAzLCA4NjAwOCwgODYwMTMsIDg2MDE4LCA4NjAyMywgCi0gICAgODYwMjgsIDg2MDMzLCA4NjA0MCwgODYwNDcsIDg2MDUxLCA4NjA1NiwgODYwNjEsIDg2MDY2LCA4NjA3MSwgODYwNzYsIAotICAgIDg2MDgxLCA4NjA4NiwgODYwOTEsIDg2MDk2LCA4NjEwMSwgODYxMDYsIDg2MTExLCA4NjExNiwgODYxMjEsIDg2MTI2LCAKLSAgICA4NjEzMSwgODYxMzYsIDg2MTQxLCA4NjE0NiwgODYxNTEsIDg2MTU2LCA4NjE2MSwgODYxNjYsIDg2MTcxLCA4NjE3NiwgCi0gICAgODYxODEsIDg2MTg2LCA4NjE5MSwgODYxOTYsIDAsIDAsIDAsIDg2MjAxLCA4NjIwNSwgODYyMTAsIDg2MjE0LCA4NjIxOSwgCi0gICAgODYyMjQsIDAsIDAsIDg2MjI4LCA4NjIzMywgODYyMzgsIDg2MjQyLCA4NjI0NywgODYyNTIsIDAsIDAsIDg2MjU3LCAKLSAgICA4NjI2MiwgODYyNjYsIDg2MjcxLCA4NjI3NiwgODYyODEsIDAsIDAsIDg2Mjg2LCA4NjI5MSwgODYyOTYsIDAsIDAsIDAsIAotICAgIDg2MzAwLCA4NjMwNCwgODYzMDgsIDg2MzEyLCA4NjMxNSwgODYzMTksIDg2MzIzLCAwLCA4NjMyNywgODYzMzMsIDg2MzM2LCAKLSAgICA4NjM0MCwgODYzNDMsIDg2MzQ3LCA4NjM1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODYzNTUsIDg2MzYxLCAKLSAgICA4NjM2NywgODYzNzMsIDg2Mzc5LCAwLCAwLCA4NjM4MywgODYzODksIDg2Mzk1LCA4NjQwMSwgODY0MDcsIDg2NDEzLCAKLSAgICA4NjQyMCwgODY0MjcsIDg2NDM0LCA4NjQ0MSwgODY0NDgsIDg2NDU1LCAwLCA4NjQ2MiwgODY0NjksIDg2NDc2LCA4NjQ4MiwgCi0gICAgODY0ODksIDg2NDk2LCA4NjUwMywgODY1MTAsIDg2NTE2LCA4NjUyMywgODY1MzAsIDg2NTM3LCA4NjU0NCwgODY1NTAsIAotICAgIDg2NTU3LCA4NjU2NCwgODY1NzEsIDg2NTc4LCA4NjU4NCwgODY1OTEsIDg2NTk4LCA4NjYwNSwgODY2MTIsIDg2NjE5LCAKLSAgICA4NjYyNiwgODY2MzMsIDAsIDg2NjQwLCA4NjY0NiwgODY2NTMsIDg2NjYwLCA4NjY2NywgODY2NzQsIDg2NjgwLCA4NjY4NywgCi0gICAgODY2OTQsIDg2NzAxLCA4NjcwOCwgODY3MTUsIDg2NzIyLCA4NjcyOSwgODY3MzUsIDg2NzQyLCA4Njc0OSwgODY3NTYsIAotICAgIDg2NzYzLCAwLCA4Njc3MCwgODY3NzcsIDAsIDg2Nzg0LCA4Njc5MSwgODY3OTgsIDg2ODA1LCA4NjgxMiwgODY4MTksIAotICAgIDg2ODI2LCA4NjgzMywgODY4NDAsIDg2ODQ3LCA4Njg1NCwgODY4NjEsIDg2ODY4LCA4Njg3NSwgODY4ODIsIDAsIDAsIAotICAgIDg2ODg4LCA4Njg5MywgODY4OTgsIDg2OTAzLCA4NjkwOCwgODY5MTMsIDg2OTE4LCA4NjkyMywgODY5MjgsIDg2OTMzLCAKLSAgICA4NjkzOCwgODY5NDMsIDg2OTQ4LCA4Njk1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODY5NTgsIDg2OTY1LCAKLSAgICA4Njk3MiwgODY5NzksIDg2OTg2LCA4Njk5MywgODcwMDAsIDg3MDA3LCA4NzAxNCwgODcwMjEsIDg3MDI4LCA4NzAzNSwgCi0gICAgODcwNDIsIDg3MDQ5LCA4NzA1NiwgODcwNjMsIDg3MDcwLCA4NzA3NywgODcwODQsIDg3MDkxLCA4NzA5OSwgODcxMDcsIAotICAgIDg3MTE0LCA4NzEyMSwgODcxMjYsIDg3MTM0LCA4NzE0MiwgODcxNDksIDg3MTU2LCA4NzE2MSwgODcxNjgsIDg3MTczLCAKLSAgICA4NzE3OCwgODcxODUsIDg3MTkwLCA4NzE5NSwgODcyMDAsIDg3MjA4LCA4NzIxMywgODcyMTgsIDg3MjI1LCA4NzIzMCwgCi0gICAgODcyMzUsIDg3MjQyLCA4NzI0OSwgODcyNTQsIDg3MjU5LCA4NzI2NCwgODcyNjksIDg3Mjc0LCA4NzI3OSwgODcyODQsIAotICAgIDg3Mjg5LCA4NzI5NCwgODczMDEsIDg3MzA2LCA4NzMxMywgODczMTgsIDg3MzIzLCA4NzMyOCwgODczMzMsIDg3MzM4LCAKLSAgICA4NzM0MywgODczNDgsIDg3MzUzLCA4NzM1OCwgODczNjMsIDg3MzY4LCA4NzM3NSwgODczODIsIDg3Mzg5LCA4NzM5NiwgCi0gICAgODc0MDIsIDg3NDA3LCA4NzQxNCwgODc0MTksIDg3NDI0LCA4NzQzMywgODc0NDAsIDg3NDQ5LCA4NzQ1NiwgODc0NjEsIAotICAgIDg3NDY2LCA4NzQ3NCwgODc0NzksIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NDk5LCA4NzUwNiwgODc1MTEsIDg3NTE2LCAKLSAgICA4NzUyMSwgODc1MjYsIDg3NTMxLCA4NzUzOCwgODc1NDUsIDg3NTUyLCA4NzU1OSwgODc1NjYsIDg3NTczLCA4NzU4MCwgCi0gICAgODc1ODcsIDg3NTk0LCA4NzYwMSwgODc2MDgsIDg3NjE1LCA4NzYyMiwgODc2MjksIDg3NjM2LCA4NzY0MywgODc2NTAsIAotICAgIDg3NjU3LCA4NzY2NCwgODc2NzEsIDg3Njc4LCA4NzY4NSwgODc2OTIsIDg3Njk5LCA4NzcwNiwgODc3MTMsIDg3NzIwLCAKLSAgICA4NzcyNywgMCwgMCwgMCwgMCwgMCwgODc3MzQsIDg3NzQyLCA4Nzc1MCwgMCwgMCwgMCwgMCwgODc3NTUsIDg3NzU5LCAKLSAgICA4Nzc2MywgODc3NjcsIDg3NzcxLCA4Nzc3NSwgODc3NzksIDg3NzgzLCA4Nzc4NywgODc3OTEsIDg3Nzk2LCA4NzgwMSwgCi0gICAgODc4MDYsIDg3ODExLCA4NzgxNiwgODc4MjEsIDg3ODI2LCA4NzgzMSwgODc4MzYsIDg3ODQyLCA4Nzg0OCwgODc4NTQsIAotICAgIDg3ODYxLCA4Nzg2OCwgODc4NzUsIDg3ODgyLCA4Nzg4OSwgODc4OTYsIDg3OTAyLCA4NzkwOCwgODc5MTQsIDg3OTIxLCAKLSAgICA4NzkyOCwgODc5MzUsIDg3OTQyLCA4Nzk0OSwgODc5NTYsIDg3OTYzLCA4Nzk3MCwgODc5NzcsIDg3OTg0LCA4Nzk5MSwgCi0gICAgODc5OTgsIDg4MDA1LCA4ODAxMiwgMCwgMCwgMCwgODgwMTksIDg4MDI3LCA4ODAzNSwgODgwNDMsIDg4MDUxLCA4ODA1OSwgCi0gICAgODgwNjksIDg4MDc5LCA4ODA4NywgODgwOTUsIDg4MTAzLCA4ODExMSwgODgxMTksIDg4MTI1LCA4ODEzMiwgODgxNDEsIAotICAgIDg4MTUwLCA4ODE1OSwgODgxNjgsIDg4MTc3LCA4ODE4NiwgODgxOTYsIDg4MjA3LCA4ODIxNywgODgyMjgsIDg4MjM3LCAKLSAgICA4ODI0NiwgODgyNTUsIDg4MjY1LCA4ODI3NiwgODgyODYsIDg4Mjk3LCA4ODMwOCwgODgzMTcsIDg4MzI1LCA4ODMzMSwgCi0gICAgODgzMzcsIDg4MzQzLCA4ODM0OSwgODgzNTcsIDg4MzY1LCA4ODM3MSwgODgzNzgsIDg4Mzg4LCA4ODM5NSwgODg0MDIsIAotICAgIDg4NDA5LCA4ODQxNiwgODg0MjMsIDg4NDMzLCA4ODQ0MCwgODg0NDcsIDg4NDU1LCA4ODQ2MywgODg0NzIsIDg4NDgxLCAKLSAgICA4ODQ5MCwgODg0OTksIDg4NTA4LCA4ODUxNiwgODg1MjUsIDg4NTM0LCA4ODU0MywgODg1NDcsIDg4NTU0LCA4ODU1OSwgCi0gICAgODg1NjQsIDg4NTY4LCA4ODU3MiwgODg1NzYsIDg4NTgwLCA4ODU4NSwgODg1OTAsIDg4NTk2LCA4ODYwMiwgODg2MDYsIAotICAgIDg4NjEyLCA4ODYxNiwgODg2MjAsIDg4NjI0LCA4ODYyOCwgODg2MzIsIDg4NjM2LCA4ODY0MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODg2NDYsIDg4NjUxLCA4ODY1NiwgODg2NjEsIDg4NjY2LCA4ODY3MywgODg2NzgsIDg4NjgzLCA4ODY4OCwgODg2OTMsIAotICAgIDg4Njk4LCA4ODcwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODM3NDMsIDgzNzU4LCA4Mzc3MywgODM3NzksIDgzNzg1LCA4Mzc5MSwgCisgICAgODM3OTcsIDgzODAzLCA4MzgwOSwgODM4MTUsIDgzODIxLCA4MzgyOSwgODM4MzMsIDgzODM2LCAwLCAwLCA4Mzg0NCwgCisgICAgODM4NDcsIDgzODUwLCA4Mzg1MywgODM4NTYsIDgzODU5LCA4Mzg2MiwgODM4NjUsIDgzODY4LCA4Mzg3MSwgODM4NzQsIAorICAgIDgzODc3LCA4Mzg4MCwgODM4ODMsIDgzODg2LCA4Mzg4OSwgODM4OTIsIDgzOTAwLCA4MzkwOSwgODM5MjAsIDgzOTI4LCAKKyAgICA4MzkzNiwgODM5NDUsIDgzOTU0LCA4Mzk2NSwgODM5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDgzOTg2LCA4Mzk5MSwgODM5OTYsIAorICAgIDg0MDAzLCA4NDAxMCwgODQwMTYsIDg0MDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NDAyNywgODQwMzcsIAorICAgIDg0MDQ3LCA4NDA1NywgODQwNjYsIDg0MDc3LCA4NDA4NiwgODQwOTUsIDg0MTA1LCA4NDExNSwgODQxMjcsIDg0MTM5LCAKKyAgICA4NDE1MCwgODQxNjEsIDg0MTcyLCA4NDE4MywgODQxOTMsIDg0MjAzLCA4NDIxMywgODQyMjMsIDg0MjM0LCA4NDI0NSwgCisgICAgODQyNDksIDg0MjU0LCA4NDI2MywgODQyNzIsIDg0Mjc2LCA4NDI4MCwgODQyODQsIDg0Mjg5LCA4NDI5NCwgODQyOTksIAorICAgIDg0MzA0LCA4NDMwNywgODQzMTEsIDAsIDg0MzE2LCA4NDMxOSwgODQzMjIsIDg0MzI2LCA4NDMzMCwgODQzMzUsIDg0MzM5LCAKKyAgICA4NDM0MywgODQzNDgsIDg0MzUzLCA4NDM2MCwgODQzNjcsIDg0MzcwLCA4NDM3MywgODQzNzYsIDg0Mzc5LCA4NDM4MiwgCisgICAgODQzODYsIDg0MzkwLCAwLCA4NDM5NCwgODQzOTksIDg0NDAzLCA4NDQwNywgMCwgMCwgMCwgMCwgODQ0MTIsIDg0NDE3LCAKKyAgICA4NDQyNCwgODQ0MjksIDg0NDM0LCAwLCA4NDQzOSwgODQ0NDQsIDg0NDQ5LCA4NDQ1NCwgODQ0NTksIDg0NDY0LCA4NDQ2OSwgCisgICAgODQ0NzQsIDg0NDc5LCA4NDQ4NCwgODQ0ODksIDg0NDk0LCA4NDUwMywgODQ1MTIsIDg0NTIwLCA4NDUyOCwgODQ1MzcsIAorICAgIDg0NTQ2LCA4NDU1NSwgODQ1NjQsIDg0NTcyLCA4NDU4MCwgODQ1ODgsIDg0NTk2LCA4NDYwMSwgODQ2MDYsIDg0NjEyLCAKKyAgICA4NDYxOCwgODQ2MjQsIDg0NjMwLCA4NDYzOCwgODQ2NDYsIDg0NjUyLCA4NDY1OCwgODQ2NjQsIDg0NjcwLCA4NDY3NiwgCisgICAgODQ2ODIsIDg0Njg4LCA4NDY5NCwgODQ2OTksIDg0NzA0LCA4NDcwOSwgODQ3MTQsIDg0NzE5LCA4NDcyNCwgODQ3MjksIAorICAgIDg0NzM0LCA4NDc0MCwgODQ3NDYsIDg0NzUyLCA4NDc1OCwgODQ3NjQsIDg0NzcwLCA4NDc3NiwgODQ3ODIsIDg0Nzg4LCAKKyAgICA4NDc5NCwgODQ4MDAsIDg0ODA2LCA4NDgxMiwgODQ4MTgsIDg0ODI0LCA4NDgzMCwgODQ4MzYsIDg0ODQyLCA4NDg0OCwgCisgICAgODQ4NTQsIDg0ODYwLCA4NDg2NiwgODQ4NzIsIDg0ODc4LCA4NDg4NCwgODQ4OTAsIDg0ODk2LCA4NDkwMiwgODQ5MDgsIAorICAgIDg0OTE0LCA4NDkyMCwgODQ5MjYsIDg0OTMyLCA4NDkzOCwgODQ5NDQsIDg0OTUwLCA4NDk1NiwgODQ5NjIsIDg0OTY4LCAKKyAgICA4NDk3NCwgODQ5ODAsIDg0OTg2LCA4NDk5MiwgODQ5OTgsIDg1MDA0LCA4NTAxMCwgODUwMTYsIDg1MDIyLCA4NTAyOCwgCisgICAgODUwMzQsIDg1MDQwLCA4NTA0NiwgODUwNTIsIDg1MDU4LCA4NTA2NCwgODUwNzAsIDg1MDc2LCA4NTA4MiwgODUwODgsIAorICAgIDg1MDk0LCA4NTA5OSwgODUxMDQsIDg1MTA5LCA4NTExNCwgODUxMjAsIDg1MTI2LCA4NTEzMiwgODUxMzgsIDg1MTQ0LCAKKyAgICA4NTE1MCwgODUxNTYsIDg1MTYyLCA4NTE2OCwgODUxNzQsIDg1MTgxLCA4NTE4OCwgODUxOTMsIDg1MTk4LCA4NTIwMywgCisgICAgODUyMDgsIDg1MjIwLCA4NTIzMiwgODUyNDMsIDg1MjU0LCA4NTI2NiwgODUyNzgsIDg1Mjg2LCAwLCAwLCA4NTI5NCwgMCwgCisgICAgODUzMDIsIDg1MzA2LCA4NTMxMCwgODUzMTMsIDg1MzE3LCA4NTMyMSwgODUzMjQsIDg1MzI3LCA4NTMzMSwgODUzMzUsIAorICAgIDg1MzM4LCA4NTM0MSwgODUzNDQsIDg1MzQ3LCA4NTM1MiwgODUzNTUsIDg1MzU5LCA4NTM2MiwgODUzNjUsIDg1MzY4LCAKKyAgICA4NTM3MSwgODUzNzQsIDg1Mzc3LCA4NTM4MCwgODUzODMsIDg1Mzg2LCA4NTM4OSwgODUzOTIsIDg1Mzk2LCA4NTQwMCwgCisgICAgODU0MDQsIDg1NDA4LCA4NTQxMywgODU0MTgsIDg1NDI0LCA4NTQzMCwgODU0MzYsIDg1NDQxLCA4NTQ0NywgODU0NTMsIAorICAgIDg1NDU5LCA4NTQ2NCwgODU0NzAsIDg1NDc2LCA4NTQ4MSwgODU0ODYsIDg1NDkyLCA4NTQ5NywgODU1MDMsIDg1NTA5LCAKKyAgICA4NTUxNCwgODU1MjAsIDg1NTI2LCA4NTUzMSwgODU1MzcsIDg1NTQzLCA4NTU0OSwgODU1NTUsIDg1NTYxLCA4NTU2NSwgCisgICAgODU1NzAsIDg1NTc0LCA4NTU3OSwgODU1ODMsIDg1NTg4LCA4NTU5MywgODU1OTksIDg1NjA1LCA4NTYxMSwgODU2MTYsIAorICAgIDg1NjIyLCA4NTYyOCwgODU2MzQsIDg1NjM5LCA4NTY0NSwgODU2NTEsIDg1NjU2LCA4NTY2MSwgODU2NjcsIDg1NjcyLCAKKyAgICA4NTY3OCwgODU2ODQsIDg1Njg5LCA4NTY5NSwgODU3MDEsIDg1NzA2LCA4NTcxMiwgODU3MTgsIDg1NzI0LCA4NTczMCwgCisgICAgODU3MzYsIDg1NzQxLCA4NTc0NSwgODU3NTAsIDg1NzUyLCA4NTc1NywgODU3NjIsIDg1NzY4LCA4NTc3MywgODU3NzgsIAorICAgIDg1NzgyLCA4NTc4OCwgODU3OTMsIDg1Nzk4LCA4NTgwMywgODU4MDgsIDg1ODEzLCA4NTgxOCwgODU4MjMsIDg1ODI5LCAKKyAgICA4NTgzNSwgODU4NDEsIDg1ODQ5LCA4NTg1MywgODU4NTcsIDg1ODYxLCA4NTg2NSwgODU4NjksIDg1ODczLCA4NTg3OCwgCisgICAgODU4ODMsIDg1ODg4LCA4NTg5MywgODU4OTcsIDg1OTAyLCA4NTkwNywgODU5MTIsIDg1OTE3LCA4NTkyMiwgODU5MjcsIAorICAgIDg1OTMyLCA4NTkzNywgODU5NDEsIDg1OTQ1LCA4NTk1MCwgODU5NTUsIDg1OTYwLCA4NTk2NSwgODU5NjksIDg1OTc0LCAKKyAgICA4NTk3OSwgODU5ODQsIDg1OTg5LCA4NTk5MywgODU5OTgsIDg2MDAzLCA4NjAwOCwgODYwMTMsIDg2MDE3LCA4NjAyMiwgCisgICAgODYwMjcsIDg2MDMxLCA4NjAzNiwgODYwNDEsIDg2MDQ2LCA4NjA1MSwgODYwNTYsIDg2MDYxLCA4NjA2OCwgODYwNzUsIAorICAgIDg2MDc5LCA4NjA4NCwgODYwODksIDg2MDk0LCA4NjA5OSwgODYxMDQsIDg2MTA5LCA4NjExNCwgODYxMTksIDg2MTI0LCAKKyAgICA4NjEyOSwgODYxMzQsIDg2MTM5LCA4NjE0NCwgODYxNDksIDg2MTU0LCA4NjE1OSwgODYxNjQsIDg2MTY5LCA4NjE3NCwgCisgICAgODYxNzksIDg2MTg0LCA4NjE4OSwgODYxOTQsIDg2MTk5LCA4NjIwNCwgODYyMDksIDg2MjE0LCA4NjIxOSwgODYyMjQsIDAsIAorICAgIDAsIDAsIDg2MjI5LCA4NjIzMywgODYyMzgsIDg2MjQyLCA4NjI0NywgODYyNTIsIDAsIDAsIDg2MjU2LCA4NjI2MSwgCisgICAgODYyNjYsIDg2MjcwLCA4NjI3NSwgODYyODAsIDAsIDAsIDg2Mjg1LCA4NjI5MCwgODYyOTQsIDg2Mjk5LCA4NjMwNCwgCisgICAgODYzMDksIDAsIDAsIDg2MzE0LCA4NjMxOSwgODYzMjQsIDAsIDAsIDAsIDg2MzI4LCA4NjMzMiwgODYzMzYsIDg2MzQwLCAKKyAgICA4NjM0MywgODYzNDcsIDg2MzUxLCAwLCA4NjM1NSwgODYzNjEsIDg2MzY0LCA4NjM2OCwgODYzNzEsIDg2Mzc1LCA4NjM3OSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODYzODMsIDg2Mzg5LCA4NjM5NSwgODY0MDEsIDg2NDA3LCAwLCAwLCAKKyAgICA4NjQxMSwgODY0MTcsIDg2NDIzLCA4NjQyOSwgODY0MzUsIDg2NDQxLCA4NjQ0OCwgODY0NTUsIDg2NDYyLCA4NjQ2OSwgCisgICAgODY0NzYsIDg2NDgzLCAwLCA4NjQ5MCwgODY0OTcsIDg2NTA0LCA4NjUxMCwgODY1MTcsIDg2NTI0LCA4NjUzMSwgODY1MzgsIAorICAgIDg2NTQ0LCA4NjU1MSwgODY1NTgsIDg2NTY1LCA4NjU3MiwgODY1NzgsIDg2NTg1LCA4NjU5MiwgODY1OTksIDg2NjA2LCAKKyAgICA4NjYxMiwgODY2MTksIDg2NjI2LCA4NjYzMywgODY2NDAsIDg2NjQ3LCA4NjY1NCwgODY2NjEsIDAsIDg2NjY4LCA4NjY3NCwgCisgICAgODY2ODEsIDg2Njg4LCA4NjY5NSwgODY3MDIsIDg2NzA4LCA4NjcxNSwgODY3MjIsIDg2NzI5LCA4NjczNiwgODY3NDMsIAorICAgIDg2NzUwLCA4Njc1NywgODY3NjMsIDg2NzcwLCA4Njc3NywgODY3ODQsIDg2NzkxLCAwLCA4Njc5OCwgODY4MDUsIDAsIAorICAgIDg2ODEyLCA4NjgxOSwgODY4MjYsIDg2ODMzLCA4Njg0MCwgODY4NDcsIDg2ODU0LCA4Njg2MSwgODY4NjgsIDg2ODc1LCAKKyAgICA4Njg4MiwgODY4ODksIDg2ODk2LCA4NjkwMywgODY5MTAsIDAsIDAsIDg2OTE2LCA4NjkyMSwgODY5MjYsIDg2OTMxLCAKKyAgICA4NjkzNiwgODY5NDEsIDg2OTQ2LCA4Njk1MSwgODY5NTYsIDg2OTYxLCA4Njk2NiwgODY5NzEsIDg2OTc2LCA4Njk4MSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg3MDgsIDg4NzE1LCA4ODcyNCwgODg3MzMsIDg4NzQwLCA4ODc0NywgODg3NTQsIAotICAgIDg4NzYxLCA4ODc2OCwgODg3NzUsIDg4NzgxLCA4ODc4OCwgODg3OTUsIDg4ODAyLCA4ODgwOSwgODg4MTYsIDg4ODIzLCAKLSAgICA4ODgzMCwgODg4MzcsIDg4ODQ2LCA4ODg1MywgODg4NjAsIDg4ODY3LCA4ODg3NCwgODg4ODEsIDg4ODg4LCA4ODg5NSwgCi0gICAgODg5MDIsIDg4OTExLCA4ODkxOCwgODg5MjUsIDg4OTMyLCA4ODkzOSwgODg5NDYsIDg4OTUzLCA4ODk2MiwgODg5NjksIAotICAgIDg4OTc2LCA4ODk4MywgODg5OTAsIDg4OTk5LCA4OTAwNiwgODkwMTMsIDg5MDIwLCA4OTAyOCwgODkwMzcsIDAsIDAsIAotICAgIDg5MDQ2LCA4OTA1MCwgODkwNTQsIDg5MDU5LCA4OTA2NCwgODkwNjksIDg5MDc0LCA4OTA3OCwgODkwODMsIDg5MDg4LCAKLSAgICA4OTA5MywgODkwOTgsIDg5MTAzLCA4OTEwOCwgODkxMTIsIDg5MTE2LCA4OTEyMSwgODkxMjYsIDg5MTMxLCA4OTEzNSwgCi0gICAgODkxNDAsIDg5MTQ1LCA4OTE0OSwgODkxNTQsIDg5MTU5LCA4OTE2NCwgODkxNjksIDg5MTc0LCA4OTE3OSwgMCwgMCwgMCwgCi0gICAgODkxODQsIDg5MTg4LCA4OTE5MywgODkxOTgsIDg5MjAyLCA4OTIwNywgODkyMTEsIDg5MjE2LCA4OTIyMSwgODkyMjYsIAotICAgIDg5MjMxLCA4OTIzNSwgODkyMzksIDg5MjQ0LCA4OTI0OSwgODkyNTQsIDg5MjU5LCA4OTI2NCwgODkyNjksIDg5MjczLCAKLSAgICA4OTI3OCwgODkyODMsIDg5Mjg4LCA4OTI5MywgODkyOTgsIDg5MzAzLCA4OTMwNywgODkzMTEsIDg5MzE2LCA4OTMyMSwgCi0gICAgODkzMjYsIDg5MzMxLCA4OTMzNiwgODkzNDEsIDg5MzQ2LCA4OTM1MSwgODkzNTYsIDg5MzYxLCA4OTM2NiwgODkzNzEsIAotICAgIDg5Mzc2LCA4OTM4MSwgODkzODYsIDg5MzkxLCA4OTM5NiwgODk0MDEsIDg5NDA2LCA4OTQxMSwgODk0MTYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTg2LCA4Njk5MywgODcwMDAsIDg3MDA3LCA4NzAxNCwgODcwMjEsIAorICAgIDg3MDI4LCA4NzAzNSwgODcwNDIsIDg3MDQ5LCA4NzA1NiwgODcwNjMsIDg3MDcwLCA4NzA3NywgODcwODQsIDg3MDkxLCAKKyAgICA4NzA5OCwgODcxMDUsIDg3MTEyLCA4NzExOSwgODcxMjcsIDg3MTM1LCA4NzE0MiwgODcxNDksIDg3MTU0LCA4NzE2MiwgCisgICAgODcxNzAsIDg3MTc3LCA4NzE4NCwgODcxODksIDg3MTk2LCA4NzIwMSwgODcyMDYsIDg3MjEzLCA4NzIxOCwgODcyMjMsIAorICAgIDg3MjI4LCA4NzIzNiwgODcyNDEsIDg3MjQ2LCA4NzI1MywgODcyNTgsIDg3MjYzLCA4NzI3MCwgODcyNzcsIDg3MjgyLCAKKyAgICA4NzI4NywgODcyOTIsIDg3Mjk3LCA4NzMwMiwgODczMDcsIDg3MzEyLCA4NzMxNywgODczMjIsIDg3MzI5LCA4NzMzNCwgCisgICAgODczNDEsIDg3MzQ2LCA4NzM1MSwgODczNTYsIDg3MzYxLCA4NzM2NiwgODczNzEsIDg3Mzc2LCA4NzM4MSwgODczODYsIAorICAgIDg3MzkxLCA4NzM5NiwgODc0MDMsIDg3NDEwLCA4NzQxNywgODc0MjQsIDg3NDMwLCA4NzQzNSwgODc0NDIsIDg3NDQ3LCAKKyAgICA4NzQ1MiwgODc0NjEsIDg3NDY4LCA4NzQ3NywgODc0ODQsIDg3NDg5LCA4NzQ5NCwgODc1MDIsIDg3NTA3LCA4NzUxMiwgCisgICAgODc1MTcsIDg3NTIyLCA4NzUyNywgODc1MzQsIDg3NTM5LCA4NzU0NCwgODc1NDksIDg3NTU0LCA4NzU1OSwgODc1NjYsIAorICAgIDg3NTczLCA4NzU4MCwgODc1ODcsIDg3NTk0LCA4NzYwMSwgODc2MDgsIDg3NjE1LCA4NzYyMiwgODc2MjksIDg3NjM2LCAKKyAgICA4NzY0MywgODc2NTAsIDg3NjU3LCA4NzY2NCwgODc2NzEsIDg3Njc4LCA4NzY4NSwgODc2OTIsIDg3Njk5LCA4NzcwNiwgCisgICAgODc3MTMsIDg3NzIwLCA4NzcyNywgODc3MzQsIDg3NzQxLCA4Nzc0OCwgODc3NTUsIDAsIDAsIDAsIDAsIDAsIDg3NzYyLCAKKyAgICA4Nzc3MCwgODc3NzgsIDAsIDAsIDAsIDAsIDg3NzgzLCA4Nzc4NywgODc3OTEsIDg3Nzk1LCA4Nzc5OSwgODc4MDMsIAorICAgIDg3ODA3LCA4NzgxMSwgODc4MTUsIDg3ODE5LCA4NzgyNCwgODc4MjksIDg3ODM0LCA4NzgzOSwgODc4NDQsIDg3ODQ5LCAKKyAgICA4Nzg1NCwgODc4NTksIDg3ODY0LCA4Nzg3MCwgODc4NzYsIDg3ODgyLCA4Nzg4OSwgODc4OTYsIDg3OTAzLCA4NzkxMCwgCisgICAgODc5MTcsIDg3OTI0LCA4NzkzMCwgODc5MzYsIDg3OTQyLCA4Nzk0OSwgODc5NTYsIDg3OTYzLCA4Nzk3MCwgODc5NzcsIAorICAgIDg3OTg0LCA4Nzk5MSwgODc5OTgsIDg4MDA1LCA4ODAxMiwgODgwMTksIDg4MDI2LCA4ODAzMywgODgwNDAsIDAsIDAsIDAsIAorICAgIDg4MDQ3LCA4ODA1NSwgODgwNjMsIDg4MDcxLCA4ODA3OSwgODgwODcsIDg4MDk3LCA4ODEwNywgODgxMTUsIDg4MTIzLCAKKyAgICA4ODEzMSwgODgxMzksIDg4MTQ3LCA4ODE1MywgODgxNjAsIDg4MTY5LCA4ODE3OCwgODgxODcsIDg4MTk2LCA4ODIwNSwgCisgICAgODgyMTQsIDg4MjI0LCA4ODIzNSwgODgyNDUsIDg4MjU2LCA4ODI2NSwgODgyNzQsIDg4MjgzLCA4ODI5MywgODgzMDQsIAorICAgIDg4MzE0LCA4ODMyNSwgODgzMzYsIDg4MzQ1LCA4ODM1MywgODgzNTksIDg4MzY1LCA4ODM3MSwgODgzNzcsIDg4Mzg1LCAKKyAgICA4ODM5MywgODgzOTksIDg4NDA2LCA4ODQxNiwgODg0MjMsIDg4NDMwLCA4ODQzNywgODg0NDQsIDg4NDUxLCA4ODQ2MSwgCisgICAgODg0NjgsIDg4NDc1LCA4ODQ4MywgODg0OTEsIDg4NTAwLCA4ODUwOSwgODg1MTgsIDg4NTI3LCA4ODUzNiwgODg1NDQsIAorICAgIDg4NTUzLCA4ODU2MiwgODg1NzEsIDg4NTc1LCA4ODU4MiwgODg1ODcsIDg4NTkyLCA4ODU5NiwgODg2MDAsIDg4NjA0LCAKKyAgICA4ODYwOCwgODg2MTMsIDg4NjE4LCA4ODYyNCwgODg2MzAsIDg4NjM0LCA4ODY0MCwgODg2NDQsIDg4NjQ4LCA4ODY1MiwgCisgICAgODg2NTYsIDg4NjYwLCA4ODY2NCwgODg2NzAsIDAsIDAsIDAsIDAsIDAsIDg4Njc0LCA4ODY3OSwgODg2ODQsIDg4Njg5LCAKKyAgICA4ODY5NCwgODg3MDEsIDg4NzA2LCA4ODcxMSwgODg3MTYsIDg4NzIxLCA4ODcyNiwgODg3MzEsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NDIxLCA4OTQyNSwgCi0gICAgODk0MzAsIDg5NDM1LCA4OTQ0MCwgODk0NDQsIDg5NDQ5LCA4OTQ1NCwgODk0NTksIDg5NDY0LCA4OTQ2OCwgODk0NzIsIAotICAgIDg5NDc3LCA4OTQ4MiwgODk0ODcsIDg5NDkyLCA4OTQ5NiwgODk1MDEsIDg5NTA2LCA4OTUxMSwgODk1MTYsIDg5NTIxLCAKLSAgICA4OTUyNiwgODk1MzAsIDg5NTM1LCA4OTU0MCwgODk1NDUsIDg5NTUwLCA4OTU1NSwgODk1NjAsIDg5NTY1LCAwLCA4OTU3MCwgCi0gICAgODk1NzUsIDg5NTgwLCA4OTU4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk1OTIsIDg5NTk3LCAKLSAgICA4OTYwMiwgODk2MDcsIDg5NjEyLCA4OTYxNywgODk2MjIsIDg5NjI3LCA4OTYzMiwgODk2MzcsIDg5NjQyLCA4OTY0NywgCi0gICAgODk2NTIsIDg5NjU3LCA4OTY2MiwgODk2NjcsIDg5NjcyLCA4OTY3NywgODk2ODIsIDg5Njg3LCA4OTY5MiwgODk2OTcsIAotICAgIDg5NzAyLCA4OTcwNywgODk3MTIsIDg5NzE3LCA4OTcyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg3MzYsIAorICAgIDg4NzQzLCA4ODc1MiwgODg3NjEsIDg4NzY4LCA4ODc3NSwgODg3ODIsIDg4Nzg5LCA4ODc5NiwgODg4MDMsIDg4ODA5LCAKKyAgICA4ODgxNiwgODg4MjMsIDg4ODMwLCA4ODgzNywgODg4NDQsIDg4ODUxLCA4ODg1OCwgODg4NjUsIDg4ODc0LCA4ODg4MSwgCisgICAgODg4ODgsIDg4ODk1LCA4ODkwMiwgODg5MDksIDg4OTE2LCA4ODkyMywgODg5MzAsIDg4OTM5LCA4ODk0NiwgODg5NTMsIAorICAgIDg4OTYwLCA4ODk2NywgODg5NzQsIDg4OTgxLCA4ODk5MCwgODg5OTcsIDg5MDA0LCA4OTAxMSwgODkwMTgsIDg5MDI3LCAKKyAgICA4OTAzNCwgODkwNDEsIDg5MDQ4LCA4OTA1NiwgODkwNjUsIDAsIDAsIDg5MDc0LCA4OTA3OCwgODkwODIsIDg5MDg3LCAKKyAgICA4OTA5MiwgODkwOTcsIDg5MTAyLCA4OTEwNiwgODkxMTEsIDg5MTE2LCA4OTEyMSwgODkxMjYsIDg5MTMxLCA4OTEzNiwgCisgICAgODkxNDAsIDg5MTQ0LCA4OTE0OSwgODkxNTQsIDg5MTU5LCA4OTE2MywgODkxNjgsIDg5MTczLCA4OTE3NywgODkxODIsIAorICAgIDg5MTg3LCA4OTE5MiwgODkxOTcsIDg5MjAyLCA4OTIwNywgMCwgMCwgMCwgODkyMTIsIDg5MjE2LCA4OTIyMSwgODkyMjYsIAorICAgIDg5MjMwLCA4OTIzNSwgODkyMzksIDg5MjQ0LCA4OTI0OSwgODkyNTQsIDg5MjU5LCA4OTI2MywgODkyNjcsIDg5MjcyLCAKKyAgICA4OTI3NywgODkyODIsIDg5Mjg3LCA4OTI5MiwgODkyOTcsIDg5MzAxLCA4OTMwNiwgODkzMTEsIDg5MzE2LCA4OTMyMSwgCisgICAgODkzMjYsIDg5MzMxLCA4OTMzNSwgODkzMzksIDg5MzQ0LCA4OTM0OSwgODkzNTQsIDg5MzU5LCA4OTM2NCwgODkzNjksIAorICAgIDg5Mzc0LCA4OTM3OSwgODkzODQsIDg5Mzg5LCA4OTM5NCwgODkzOTksIDg5NDA0LCA4OTQwOSwgODk0MTQsIDg5NDE5LCAKKyAgICA4OTQyNCwgODk0MjksIDg5NDM0LCA4OTQzOSwgODk0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzI5LCA4OTczNCwgODk3MzksIAotICAgIDg5NzQ0LCA4OTc0OSwgODk3NTQsIDg5NzU5LCA4OTc2NCwgODk3NjksIDg5Nzc0LCA4OTc3OSwgODk3ODQsIDg5Nzg5LCAKLSAgICA4OTc5NCwgODk3OTksIDg5ODA0LCA4OTgwOSwgODk4MTQsIDg5ODE5LCA4OTgyNCwgODk4MjksIDg5ODM0LCA4OTgzOSwgCi0gICAgODk4NDQsIDg5ODQ5LCA4OTg1NCwgODk4NTksIDg5ODYzLCA4OTg2NywgODk4NzEsIDAsIDg5ODc2LCA4OTg4MiwgODk4ODcsIAotICAgIDg5ODkyLCA4OTg5NywgODk5MDIsIDg5OTA4LCA4OTkxNCwgODk5MjAsIDg5OTI2LCA4OTkzMiwgODk5MzgsIDg5OTQ0LCAKLSAgICA4OTk1MCwgODk5NTYsIDg5OTYyLCA4OTk2OCwgODk5NzQsIDg5OTgwLCA4OTk4NSwgODk5OTEsIDg5OTk3LCA5MDAwMiwgCi0gICAgOTAwMDgsIDkwMDEzLCA5MDAxOSwgOTAwMjUsIDkwMDMwLCA5MDAzNiwgOTAwNDIsIDkwMDQ3LCA5MDA1MywgOTAwNTksIAotICAgIDkwMDY0LCA5MDA3MCwgOTAwNzYsIDkwMDgyLCAwLCAwLCAwLCAwLCA5MDA4NywgOTAwOTMsIDkwMDk5LCA5MDEwNSwgCi0gICAgOTAxMTEsIDkwMTE3LCA5MDEyMywgOTAxMjksIDkwMTM1LCA5MDE0MiwgOTAxNDcsIDkwMTUyLCA5MDE1OCwgOTAxNjQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NDQ5LCA4OTQ1MywgODk0NTgsIDg5NDYzLCA4OTQ2OCwgODk0NzIsIAorICAgIDg5NDc3LCA4OTQ4MiwgODk0ODcsIDg5NDkyLCA4OTQ5NiwgODk1MDAsIDg5NTA1LCA4OTUxMCwgODk1MTUsIDg5NTIwLCAKKyAgICA4OTUyNCwgODk1MjksIDg5NTM0LCA4OTUzOSwgODk1NDQsIDg5NTQ5LCA4OTU1NCwgODk1NTgsIDg5NTYzLCA4OTU2OCwgCisgICAgODk1NzMsIDg5NTc4LCA4OTU4MywgODk1ODgsIDg5NTkzLCAwLCA4OTU5OCwgODk2MDMsIDg5NjA4LCA4OTYxNCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk2MjAsIDg5NjI1LCA4OTYzMCwgODk2MzUsIDg5NjQwLCA4OTY0NSwgCisgICAgODk2NTAsIDg5NjU1LCA4OTY2MCwgODk2NjUsIDg5NjcwLCA4OTY3NSwgODk2ODAsIDg5Njg1LCA4OTY5MCwgODk2OTUsIAorICAgIDg5NzAwLCA4OTcwNSwgODk3MTAsIDg5NzE1LCA4OTcyMCwgODk3MjUsIDg5NzMwLCA4OTczNSwgODk3NDAsIDg5NzQ1LCAKKyAgICA4OTc1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTAxNzAsIDkwMTc1LCA5MDE4MCwgCi0gICAgOTAxODUsIDkwMTkxLCA5MDE5NiwgOTAyMDIsIDkwMjA4LCA5MDIxNCwgOTAyMjAsIDkwMjI3LCA5MDIzMywgOTAyNDAsIAotICAgIDkwMjQ1LCA5MDI1MCwgOTAyNTUsIDkwMjYwLCA5MDI2NSwgOTAyNzAsIDkwMjc1LCA5MDI4MCwgOTAyODUsIDkwMjkwLCAKLSAgICA5MDI5NSwgOTAzMDAsIDkwMzA1LCA5MDMxMCwgOTAzMTUsIDkwMzIwLCA5MDMyNSwgOTAzMzAsIDkwMzM1LCA5MDM0MCwgCi0gICAgOTAzNDUsIDkwMzUwLCA5MDM1NSwgOTAzNjAsIDkwMzY1LCA5MDM3MCwgOTAzNzUsIDkwMzgwLCA5MDM4NSwgOTAzOTAsIAotICAgIDkwMzk1LCA5MDQwMSwgOTA0MDYsIDkwNDEyLCA5MDQxOCwgOTA0MjQsIDkwNDMwLCA5MDQzNywgOTA0NDMsIDkwNDUwLCAKLSAgICA5MDQ1NSwgOTA0NjAsIDkwNDY1LCA5MDQ3MCwgOTA0NzUsIDkwNDgwLCA5MDQ4NSwgOTA0OTAsIDkwNDk1LCA5MDUwMCwgCi0gICAgOTA1MDUsIDkwNTEwLCA5MDUxNSwgOTA1MjAsIDkwNTI1LCA5MDUzMCwgOTA1MzUsIDkwNTQwLCA5MDU0NSwgOTA1NTAsIAotICAgIDkwNTU1LCA5MDU2MCwgOTA1NjUsIDkwNTcwLCA5MDU3NSwgOTA1ODAsIDkwNTg1LCA5MDU5MCwgOTA1OTUsIDkwNjAwLCAKLSAgICA5MDYwNSwgOTA2MTAsIDkwNjE1LCA5MDYyMCwgOTA2MjUsIDkwNjMwLCA5MDYzNSwgOTA2NDAsIDkwNjQ1LCA5MDY1MCwgCi0gICAgOTA2NTUsIDkwNjYwLCA5MDY2NSwgOTA2NzAsIDkwNjc1LCA5MDY4MCwgOTA2ODUsIDkwNjkwLCA5MDY5NSwgOTA3MDAsIAotICAgIDkwNzA1LCA5MDcxMCwgOTA3MTUsIDkwNzIwLCA5MDcyNSwgOTA3MzAsIDkwNzM1LCA5MDc0MCwgOTA3NDUsIDkwNzUwLCAKLSAgICA5MDc1NSwgOTA3NjAsIDkwNzY1LCA5MDc3MCwgOTA3NzUsIDkwNzgwLCA5MDc4NSwgOTA3OTAsIDkwNzk1LCA5MDgwMCwgCi0gICAgOTA4MDUsIDkwODEwLCA5MDgxNSwgOTA4MjAsIDkwODI1LCA5MDgzMCwgOTA4MzUsIDkwODQwLCA5MDg0NSwgOTA4NTAsIAotICAgIDkwODU1LCA5MDg2MCwgOTA4NjUsIDkwODY5LCA5MDg3MywgOTA4NzgsIDkwODgzLCA5MDg4OCwgOTA4OTMsIDkwODk4LCAKLSAgICA5MDkwMywgOTA5MDgsIDkwOTEzLCA5MDkxOCwgOTA5MjMsIDkwOTI4LCA5MDkzMiwgOTA5MzYsIDkwOTQwLCA5MDk0NCwgCi0gICAgOTA5NDgsIDkwOTUyLCA5MDk1NiwgOTA5NjEsIDkwOTY2LCAwLCAwLCA5MDk3MSwgOTA5NzYsIDkwOTgwLCA5MDk4NCwgCi0gICAgOTA5ODgsIDkwOTkyLCA5MDk5NiwgOTEwMDAsIDkxMDA0LCA5MTAwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk3NTcsIDg5NzYyLCA4OTc2NywgODk3NzIsIDg5Nzc3LCA4OTc4MiwgODk3ODcsIAorICAgIDg5NzkyLCA4OTc5NywgODk4MDIsIDg5ODA3LCA4OTgxMiwgODk4MTcsIDg5ODIyLCA4OTgyNywgODk4MzIsIDg5ODM3LCAKKyAgICA4OTg0MiwgODk4NDcsIDg5ODUyLCA4OTg1NywgODk4NjIsIDg5ODY3LCA4OTg3MiwgODk4NzcsIDg5ODgyLCA4OTg4NywgCisgICAgODk4OTEsIDg5ODk1LCA4OTg5OSwgMCwgODk5MDQsIDg5OTEwLCA4OTkxNSwgODk5MjAsIDg5OTI1LCA4OTkzMCwgODk5MzYsIAorICAgIDg5OTQyLCA4OTk0OCwgODk5NTQsIDg5OTYwLCA4OTk2NiwgODk5NzIsIDg5OTc4LCA4OTk4NCwgODk5OTAsIDg5OTk2LCAKKyAgICA5MDAwMiwgOTAwMDgsIDkwMDEzLCA5MDAxOSwgOTAwMjUsIDkwMDMwLCA5MDAzNiwgOTAwNDEsIDkwMDQ3LCA5MDA1MywgCisgICAgOTAwNTgsIDkwMDY0LCA5MDA3MCwgOTAwNzUsIDkwMDgxLCA5MDA4NywgOTAwOTIsIDkwMDk4LCA5MDEwNCwgOTAxMTAsIDAsIAorICAgIDAsIDAsIDAsIDkwMTE1LCA5MDEyMSwgOTAxMjcsIDkwMTMzLCA5MDEzOSwgOTAxNDUsIDkwMTUxLCA5MDE1NywgOTAxNjMsIAorICAgIDkwMTcwLCA5MDE3NSwgOTAxODAsIDkwMTg2LCA5MDE5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOTAxOTgsIDkwMjAzLCA5MDIwOCwgOTAyMTMsIDkwMjE5LCA5MDIyNCwgOTAyMzAsIDkwMjM2LCAKKyAgICA5MDI0MiwgOTAyNDgsIDkwMjU1LCA5MDI2MSwgOTAyNjgsIDkwMjczLCA5MDI3OCwgOTAyODMsIDkwMjg4LCA5MDI5MywgCisgICAgOTAyOTgsIDkwMzAzLCA5MDMwOCwgOTAzMTMsIDkwMzE4LCA5MDMyMywgOTAzMjgsIDkwMzMzLCA5MDMzOCwgOTAzNDMsIAorICAgIDkwMzQ4LCA5MDM1MywgOTAzNTgsIDkwMzYzLCA5MDM2OCwgOTAzNzMsIDkwMzc4LCA5MDM4MywgOTAzODgsIDkwMzkzLCAKKyAgICA5MDM5OCwgOTA0MDMsIDkwNDA4LCA5MDQxMywgOTA0MTgsIDkwNDIzLCA5MDQyOSwgOTA0MzQsIDkwNDQwLCA5MDQ0NiwgCisgICAgOTA0NTIsIDkwNDU4LCA5MDQ2NSwgOTA0NzEsIDkwNDc4LCA5MDQ4MywgOTA0ODgsIDkwNDkzLCA5MDQ5OCwgOTA1MDMsIAorICAgIDkwNTA4LCA5MDUxMywgOTA1MTgsIDkwNTIzLCA5MDUyOCwgOTA1MzMsIDkwNTM4LCA5MDU0MywgOTA1NDgsIDkwNTUzLCAKKyAgICA5MDU1OCwgOTA1NjMsIDkwNTY4LCA5MDU3MywgOTA1NzgsIDkwNTgzLCA5MDU4OCwgOTA1OTMsIDkwNTk4LCA5MDYwMywgCisgICAgOTA2MDgsIDkwNjEzLCA5MDYxOCwgOTA2MjMsIDkwNjI4LCA5MDYzMywgOTA2MzgsIDkwNjQzLCA5MDY0OCwgOTA2NTMsIAorICAgIDkwNjU4LCA5MDY2MywgOTA2NjgsIDkwNjczLCA5MDY3OCwgOTA2ODMsIDkwNjg4LCA5MDY5MywgOTA2OTgsIDkwNzAzLCAKKyAgICA5MDcwOCwgOTA3MTMsIDkwNzE4LCA5MDcyMywgOTA3MjgsIDkwNzMzLCA5MDczOCwgOTA3NDMsIDkwNzQ4LCA5MDc1MywgCisgICAgOTA3NTgsIDkwNzYzLCA5MDc2OCwgOTA3NzMsIDkwNzc4LCA5MDc4MywgOTA3ODgsIDkwNzkzLCA5MDc5OCwgOTA4MDMsIAorICAgIDkwODA4LCA5MDgxMywgOTA4MTgsIDkwODIzLCA5MDgyOCwgOTA4MzMsIDkwODM4LCA5MDg0MywgOTA4NDgsIDkwODUzLCAKKyAgICA5MDg1OCwgOTA4NjMsIDkwODY4LCA5MDg3MywgOTA4NzgsIDkwODgzLCA5MDg4OCwgOTA4OTMsIDkwODk3LCA5MDkwMSwgCisgICAgOTA5MDYsIDkwOTExLCA5MDkxNiwgOTA5MjEsIDkwOTI2LCA5MDkzMSwgOTA5MzYsIDkwOTQxLCA5MDk0NiwgOTA5NTEsIAorICAgIDkwOTU2LCA5MDk2MCwgOTA5NjQsIDkwOTY4LCA5MDk3MiwgOTA5NzYsIDkwOTgwLCA5MDk4NCwgOTA5ODksIDkwOTk0LCAwLCAKKyAgICAwLCA5MDk5OSwgOTEwMDQsIDkxMDA4LCA5MTAxMiwgOTEwMTYsIDkxMDIwLCA5MTAyNCwgOTEwMjgsIDkxMDMyLCA5MTAzNiwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTEwMTIsIDkxMDE2LCA5MTAyMCwgOTEwMjQsIDkxMDI4LCA5MTAzMiwgMCwgMCwgOTEwMzcsIDAsIAotICAgIDkxMDQyLCA5MTA0NiwgOTEwNTEsIDkxMDU2LCA5MTA2MSwgOTEwNjYsIDkxMDcxLCA5MTA3NiwgOTEwODEsIDkxMDg2LCAKLSAgICA5MTA5MSwgOTEwOTUsIDkxMTAwLCA5MTEwNSwgOTExMTAsIDkxMTE1LCA5MTExOSwgOTExMjQsIDkxMTI5LCA5MTEzNCwgCi0gICAgOTExMzksIDkxMTQzLCA5MTE0OCwgOTExNTMsIDkxMTU4LCA5MTE2MywgOTExNjcsIDkxMTcyLCA5MTE3NywgOTExODIsIAotICAgIDkxMTg3LCA5MTE5MSwgOTExOTYsIDkxMjAxLCA5MTIwNiwgOTEyMTEsIDkxMjE2LCA5MTIyMSwgOTEyMjYsIDkxMjMwLCAKLSAgICA5MTIzNSwgOTEyNDAsIDkxMjQ1LCA5MTI1MCwgMCwgOTEyNTUsIDkxMjYwLCAwLCAwLCAwLCA5MTI2NSwgMCwgMCwgOTEyNzAsIAotICAgIDkxMjc1LCA5MTI4MiwgOTEyODksIDkxMjk2LCA5MTMwMywgOTEzMTAsIDkxMzE3LCA5MTMyNCwgOTEzMzEsIDkxMzM4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTA0MCwgOTEwNDQsIDkxMDQ4LCA5MTA1MiwgCisgICAgOTEwNTYsIDkxMDYwLCAwLCAwLCA5MTA2NSwgMCwgOTEwNzAsIDkxMDc0LCA5MTA3OSwgOTEwODQsIDkxMDg5LCA5MTA5NCwgCisgICAgOTEwOTksIDkxMTA0LCA5MTEwOSwgOTExMTQsIDkxMTE5LCA5MTEyMywgOTExMjgsIDkxMTMzLCA5MTEzOCwgOTExNDMsIAorICAgIDkxMTQ3LCA5MTE1MiwgOTExNTcsIDkxMTYyLCA5MTE2NywgOTExNzEsIDkxMTc2LCA5MTE4MSwgOTExODYsIDkxMTkxLCAKKyAgICA5MTE5NSwgOTEyMDAsIDkxMjA1LCA5MTIxMCwgOTEyMTUsIDkxMjE5LCA5MTIyNCwgOTEyMjksIDkxMjM0LCA5MTIzOSwgCisgICAgOTEyNDQsIDkxMjQ5LCA5MTI1NCwgOTEyNTgsIDkxMjYzLCA5MTI2OCwgOTEyNzMsIDkxMjc4LCAwLCA5MTI4MywgOTEyODgsIAorICAgIDAsIDAsIDAsIDkxMjkzLCAwLCAwLCA5MTI5OCwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCiAgICAgOTEzNDUsIDkxMzUyLCA5MTM1OSwgOTEzNjYsIDkxMzczLCA5MTM4MCwgOTEzODcsIDkxMzk0LCA5MTQwMSwgOTE0MDgsIAotICAgIDkxNDE1LCA5MTQyMiwgMCwgOTE0MjksIDkxNDM2LCA5MTQ0MiwgOTE0NDgsIDkxNDU0LCA5MTQ2MSwgOTE0NjgsIDkxNDc2LCAKLSAgICA5MTQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE0OTMsIDkxNDk4LCA5MTUwMywgOTE1MDgsIDkxNTEzLCA5MTUxOCwgCi0gICAgOTE1MjMsIDkxNTI4LCA5MTUzMywgOTE1MzgsIDkxNTQzLCA5MTU0OCwgOTE1NTMsIDkxNTU4LCA5MTU2MywgOTE1NjgsIAotICAgIDkxNTczLCA5MTU3OCwgOTE1ODMsIDkxNTg4LCA5MTU5MywgOTE1OTgsIDkxNjAzLCA5MTYwNywgOTE2MTIsIDkxNjE3LCAKLSAgICA5MTYyMywgOTE2MjcsIDAsIDAsIDAsIDkxNjMxLCA5MTYzNywgOTE2NDEsIDkxNjQ2LCA5MTY1MSwgOTE2NTYsIDkxNjYwLCAKLSAgICA5MTY2NSwgOTE2NjksIDkxNjc0LCA5MTY3OSwgOTE2ODMsIDkxNjg3LCA5MTY5MiwgOTE2OTYsIDkxNzAwLCA5MTcwNSwgCi0gICAgOTE3MTAsIDkxNzE0LCA5MTcxOSwgOTE3MjQsIDkxNzI5LCA5MTczNCwgOTE3MzksIDkxNzQ0LCA5MTc0OSwgOTE3NTQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkxNzU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc2NCwgCi0gICAgOTE3NzAsIDkxNzc2LCA5MTc4MiwgOTE3ODgsIDkxNzk0LCA5MTgwMSwgOTE4MDgsIDkxODE1LCA5MTgyMSwgOTE4MjcsIAotICAgIDkxODMzLCA5MTg0MCwgOTE4NDcsIDkxODU0LCA5MTg2MCwgOTE4NjcsIDkxODc0LCA5MTg4MSwgOTE4ODgsIDkxODk0LCAKLSAgICA5MTkwMSwgOTE5MDgsIDkxOTE0LCA5MTkyMSwgOTE5MjgsIDkxOTM1LCA5MTk0MiwgOTE5NDksIDkxOTU1LCA5MTk2MiwgCi0gICAgOTE5NjksIDkxOTc2LCA5MTk4MiwgOTE5ODgsIDkxOTk0LCA5MjAwMCwgOTIwMDYsIDkyMDEzLCA5MjAyMCwgOTIwMjYsIAotICAgIDkyMDMyLCA5MjAzOCwgOTIwNDUsIDkyMDUxLCA5MjA1OCwgOTIwNjUsIDkyMDcyLCA5MjA3OCwgOTIwODYsIDkyMDkzLCAKLSAgICA5MjA5OSwgOTIxMDYsIDkyMTEzLCA5MjEyMCwgOTIxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDkyMTMzLCA5MjE0MSwgMCwgMCwgCisgICAgOTE0MTUsIDkxNDIyLCA5MTQyOSwgOTE0MzYsIDkxNDQzLCA5MTQ1MCwgMCwgOTE0NTcsIDkxNDY0LCA5MTQ3MCwgOTE0NzYsIAorICAgIDkxNDgyLCA5MTQ4OSwgOTE0OTYsIDkxNTA0LCA5MTUxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE1MjEsIDkxNTI2LCAKKyAgICA5MTUzMSwgOTE1MzYsIDkxNTQxLCA5MTU0NiwgOTE1NTEsIDkxNTU2LCA5MTU2MSwgOTE1NjYsIDkxNTcxLCA5MTU3NiwgCisgICAgOTE1ODEsIDkxNTg2LCA5MTU5MSwgOTE1OTYsIDkxNjAxLCA5MTYwNiwgOTE2MTEsIDkxNjE2LCA5MTYyMSwgOTE2MjYsIAorICAgIDkxNjMxLCA5MTYzNSwgOTE2NDAsIDkxNjQ1LCA5MTY1MSwgOTE2NTUsIDAsIDAsIDAsIDkxNjU5LCA5MTY2NSwgOTE2NjksIAorICAgIDkxNjc0LCA5MTY3OSwgOTE2ODQsIDkxNjg4LCA5MTY5MywgOTE2OTcsIDkxNzAyLCA5MTcwNywgOTE3MTEsIDkxNzE1LCAKKyAgICA5MTcyMCwgOTE3MjQsIDkxNzI4LCA5MTczMywgOTE3MzgsIDkxNzQyLCA5MTc0NywgOTE3NTIsIDkxNzU3LCA5MTc2MiwgCisgICAgOTE3NjcsIDkxNzcyLCA5MTc3NywgOTE3ODIsIDAsIDAsIDAsIDAsIDAsIDkxNzg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MjE0OSwgOTIxNTMsIDkyMTU4LCA5MjE2MywgMCwgCi0gICAgOTIxNjksIDkyMTc0LCAwLCAwLCAwLCAwLCAwLCA5MjE3OSwgOTIxODUsIDkyMTkyLCA5MjE5NywgOTIyMDIsIDkyMjA2LCAKLSAgICA5MjIxMSwgOTIyMTYsIDAsIDkyMjIxLCA5MjIyNiwgOTIyMzEsIDAsIDkyMjM2LCA5MjI0MSwgOTIyNDYsIDkyMjUxLCAKLSAgICA5MjI1NiwgOTIyNjEsIDkyMjY2LCA5MjI3MSwgOTIyNzYsIDkyMjgxLCA5MjI4NiwgOTIyOTAsIDkyMjk0LCA5MjI5OSwgCi0gICAgOTIzMDQsIDkyMzA5LCA5MjMxMywgOTIzMTcsIDkyMzIxLCA5MjMyNiwgOTIzMzEsIDkyMzM2LCA5MjM0MSwgOTIzNDUsIAotICAgIDkyMzUwLCA5MjM1NCwgOTIzNTksIDAsIDAsIDAsIDAsIDkyMzY0LCA5MjM3MCwgOTIzNzUsIDAsIDAsIDAsIDAsIDkyMzgwLCAKLSAgICA5MjM4NCwgOTIzODgsIDkyMzkyLCA5MjM5NiwgOTI0MDAsIDkyNDA1LCA5MjQxMCwgOTI0MTYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDkyNDIyLCA5MjQyOCwgOTI0MzUsIDkyNDQxLCA5MjQ0OCwgOTI0NTQsIDkyNDYwLCA5MjQ2NiwgOTI0NzMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDkyNDc5LCA5MjQ4NywgOTI0OTUsIDkyNTAzLCA5MjUxMSwgOTI1MTksIDkyNTI3LCA5MjUzNSwgCi0gICAgOTI1NDMsIDkyNTUxLCA5MjU1OSwgOTI1NjcsIDkyNTc1LCA5MjU4MywgOTI1OTEsIDkyNTk5LCA5MjYwNywgOTI2MTUsIAotICAgIDkyNjIzLCA5MjYzMSwgOTI2MzksIDkyNjQ3LCA5MjY1NSwgOTI2NjMsIDkyNjcxLCA5MjY3OSwgOTI2ODcsIDkyNjk1LCAKLSAgICA5MjcwMywgOTI3MTEsIDkyNzE4LCA5MjcyNiwgOTI3MzQsIDkyNzM4LCA5Mjc0MywgOTI3NDgsIDkyNzUzLCA5Mjc1OCwgCi0gICAgOTI3NjMsIDkyNzY4LCA5Mjc3MywgOTI3NzcsIDkyNzgyLCA5Mjc4NiwgOTI3OTEsIDkyNzk1LCA5MjgwMCwgOTI4MDQsIAotICAgIDkyODA5LCA5MjgxNCwgOTI4MTksIDkyODI0LCA5MjgyOSwgOTI4MzQsIDkyODM5LCA5Mjg0NCwgOTI4NDksIDkyODU0LCAKLSAgICA5Mjg1OSwgOTI4NjQsIDkyODY5LCA5Mjg3NCwgOTI4NzksIDkyODg0LCA5Mjg4OSwgOTI4OTQsIDkyODk5LCA5MjkwNCwgCi0gICAgOTI5MDksIDkyOTE0LCA5MjkxOSwgOTI5MjQsIDkyOTI5LCA5MjkzNCwgOTI5MzksIDkyOTQ0LCA5Mjk0OSwgOTI5NTQsIAotICAgIDkyOTU5LCA5Mjk2NCwgOTI5NjksIDkyOTc0LCA5Mjk3OSwgOTI5ODQsIDkyOTg5LCA5Mjk5NCwgMCwgMCwgMCwgOTI5OTksIAotICAgIDkzMDA0LCA5MzAxMywgOTMwMjEsIDkzMDMwLCA5MzAzOSwgOTMwNTAsIDkzMDYxLCA5MzA2OCwgOTMwNzUsIDkzMDgyLCAKLSAgICA5MzA4OSwgOTMwOTYsIDkzMTAzLCA5MzExMCwgOTMxMTcsIDkzMTI0LCA5MzEzMSwgOTMxMzgsIDkzMTQ1LCA5MzE1MiwgCi0gICAgOTMxNTksIDkzMTY2LCA5MzE3MywgOTMxODAsIDkzMTg3LCA5MzE5NCwgOTMyMDEsIDkzMjA4LCAwLCAwLCA5MzIxNSwgCi0gICAgOTMyMjEsIDkzMjI3LCA5MzIzMywgOTMyMzksIDkzMjQ2LCA5MzI1MywgOTMyNjEsIDkzMjY5LCA5MzI3NiwgOTMyODMsIAotICAgIDkzMjkwLCA5MzI5NywgOTMzMDQsIDkzMzExLCA5MzMxOCwgOTMzMjUsIDkzMzMyLCA5MzMzOSwgOTMzNDYsIDkzMzUzLCAKLSAgICA5MzM2MCwgOTMzNjcsIDkzMzc0LCA5MzM4MSwgOTMzODgsIDkzMzk1LCAwLCAwLCAwLCAwLCAwLCA5MzQwMiwgOTM0MDgsIAotICAgIDkzNDE0LCA5MzQyMCwgOTM0MjYsIDkzNDMzLCA5MzQ0MCwgOTM0NDgsIDkzNDU2LCA5MzQ2MiwgOTM0NjgsIDkzNDc1LCAKLSAgICA5MzQ4MSwgOTM0ODcsIDkzNDkzLCA5MzQ5OSwgOTM1MDYsIDkzNTEzLCA5MzUyMCwgOTM1MjcsIDkzNTM0LCA5MzU0MSwgCi0gICAgOTM1NDgsIDkzNTU1LCA5MzU2MiwgOTM1NjksIDkzNTc2LCA5MzU4MywgOTM1OTAsIDkzNTk3LCA5MzYwNCwgOTM2MTEsIAotICAgIDkzNjE4LCA5MzYyNSwgOTM2MzIsIDkzNjM5LCA5MzY0NiwgOTM2NTMsIDkzNjYwLCA5MzY2NywgOTM2NzQsIDkzNjgxLCAKLSAgICA5MzY4OCwgOTM2OTUsIDkzNzAyLCA5MzcwOSwgOTM3MTYsIDkzNzIzLCA5MzczMCwgOTM3MzcsIDkzNzQ0LCA5Mzc1MSwgCi0gICAgOTM3NTgsIDkzNzY1LCA5Mzc3MiwgOTM3NzksIDkzNzg2LCA5Mzc5MywgOTM4MDAsIDkzODA3LCA5MzgxNCwgOTM4MjEsIAotICAgIDkzODI4LCA5MzgzNSwgOTM4NDIsIDkzODQ5LCA5Mzg1NiwgOTM4NjMsIDkzODcwLCA5Mzg3NywgOTM4ODQsIDkzODkxLCAKLSAgICA5Mzg5OCwgOTM5MDUsIDkzOTEyLCA5MzkxOSwgOTM5MjYsIDkzOTMzLCA5Mzk0MCwgOTM5NDcsIDkzOTU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5Mzk2MSwgOTM5NjUsIDkzOTY5LCA5Mzk3MywgOTM5NzcsIDkzOTgxLCA5Mzk4NSwgOTM5ODksIAotICAgIDkzOTkzLCA5Mzk5NywgOTQwMDIsIDk0MDA3LCA5NDAxMiwgOTQwMTcsIDk0MDIyLCA5NDAyNywgOTQwMzIsIDk0MDM3LCAKLSAgICA5NDA0MiwgOTQwNDgsIDk0MDU0LCA5NDA2MCwgOTQwNjcsIDk0MDc0LCA5NDA4MSwgOTQwODgsIDk0MDk1LCA5NDEwMiwgCi0gICAgOTQxMDksIDk0MTE2LCA5NDEyMywgMCwgOTQxMzAsIDk0MTM0LCA5NDEzOCwgOTQxNDIsIDk0MTQ2LCA5NDE1MCwgOTQxNTMsIAotICAgIDk0MTU3LCA5NDE2MCwgOTQxNjQsIDk0MTY3LCA5NDE3MSwgOTQxNzUsIDk0MTgwLCA5NDE4NCwgOTQxODksIDk0MTkyLCAKLSAgICA5NDE5NiwgOTQxOTksIDk0MjAzLCA5NDIwNiwgOTQyMTAsIDk0MjE0LCA5NDIxOCwgOTQyMjIsIDk0MjI2LCA5NDIzMCwgCi0gICAgOTQyMzQsIDk0MjM4LCA5NDI0MiwgOTQyNDYsIDk0MjUwLCA5NDI1NCwgOTQyNTgsIDk0MjYyLCA5NDI2NiwgOTQyNzAsIAotICAgIDk0Mjc0LCA5NDI3OCwgOTQyODEsIDk0Mjg0LCA5NDI4OCwgOTQyOTIsIDk0Mjk2LCA5NDI5OSwgOTQzMDIsIDk0MzA1LCAKLSAgICA5NDMwOSwgOTQzMTMsIDk0MzE3LCA5NDMyMSwgOTQzMjQsIDk0MzI3LCA5NDMzMSwgOTQzMzcsIDk0MzQzLCA5NDM0OSwgCi0gICAgOTQzNTQsIDk0MzYxLCA5NDM2NSwgOTQzNzAsIDk0Mzc0LCA5NDM3OSwgOTQzODQsIDk0MzkwLCA5NDM5NSwgOTQ0MDEsIAotICAgIDk0NDA1LCA5NDQxMCwgOTQ0MTQsIDk0NDE5LCA5NDQyMiwgOTQ0MjUsIDk0NDI5LCA5NDQzNCwgOTQ0NDAsIDk0NDQ1LCAKLSAgICA5NDQ1MSwgMCwgMCwgMCwgMCwgOTQ0NTYsIDk0NDU5LCA5NDQ2MiwgOTQ0NjUsIDk0NDY4LCA5NDQ3MSwgOTQ0NzQsIAotICAgIDk0NDc3LCA5NDQ4MCwgOTQ0ODMsIDk0NDg3LCA5NDQ5MSwgOTQ0OTUsIDk0NDk5LCA5NDUwMywgOTQ1MDcsIDk0NTExLCAKLSAgICA5NDUxNSwgOTQ1MTksIDk0NTI0LCA5NDUyOSwgOTQ1MzMsIDk0NTM2LCA5NDUzOSwgOTQ1NDIsIDk0NTQ1LCA5NDU0OCwgCi0gICAgOTQ1NTEsIDk0NTU0LCA5NDU1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTQ1NjAsIDk0NTY1LCA5NDU3MCwgOTQ1NzUsIDk0NTc5LCA5NDU4NCwgOTQ1ODgsIDk0NTkzLCA5NDU5NywgOTQ2MDIsIAotICAgIDk0NjA2LCA5NDYxMSwgOTQ2MTUsIDk0NjIwLCA5NDYyNCwgOTQ2MjksIDk0NjM0LCA5NDYzOSwgOTQ2NDQsIDk0NjQ5LCAKLSAgICA5NDY1NCwgOTQ2NTksIDk0NjY0LCA5NDY2OSwgOTQ2NzQsIDk0Njc5LCA5NDY4NCwgOTQ2ODksIDk0Njk0LCA5NDY5OSwgCi0gICAgOTQ3MDQsIDk0NzA5LCA5NDcxNCwgOTQ3MTksIDk0NzI0LCA5NDcyOCwgOTQ3MzIsIDk0NzM3LCA5NDc0MiwgOTQ3NDcsIAotICAgIDk0NzUxLCA5NDc1NSwgOTQ3NTksIDk0NzY0LCA5NDc2OSwgOTQ3NzQsIDk0Nzc5LCA5NDc4MywgOTQ3ODcsIDk0NzkzLCAKLSAgICA5NDc5OCwgOTQ4MDQsIDk0ODA5LCA5NDgxNSwgOTQ4MjAsIDk0ODI2LCA5NDgzMSwgOTQ4MzcsIDk0ODQyLCA5NDg0NywgCi0gICAgOTQ4NTIsIDk0ODU3LCA5NDg2MSwgOTQ4NjYsIDk0ODcyLCA5NDg3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTQ4ODEsIDk0ODg4LCA5NDg5NSwgOTQ5MDIsIDk0OTA5LCA5NDkxNiwgOTQ5MjMsIDk0OTMwLCAKLSAgICA5NDkzNywgOTQ5NDQsIDk0OTUxLCA5NDk1OCwgOTQ5NjUsIDk0OTcyLCA5NDk3OSwgOTQ5ODYsIDk0OTkzLCA5NTAwMCwgCi0gICAgOTUwMDcsIDk1MDE0LCA5NTAyMSwgOTUwMjgsIDk1MDM1LCA5NTA0MiwgOTUwNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk1MDU2LCA5NTA2MywgOTUwNjksIDk1MDc1LCA5NTA4MSwgOTUwODcsIDk1MDkzLCA5NTA5OSwgOTUxMDUsIDk1MTExLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5NTExNywgOTUxMjIsIDk1MTI3LCA5NTEzMiwgOTUxMzcsIDk1MTQxLCA5NTE0NSwgOTUxNDksIAotICAgIDk1MTU0LCA5NTE1OSwgOTUxNjQsIDk1MTY5LCA5NTE3NCwgOTUxNzksIDk1MTg0LCA5NTE4OSwgOTUxOTQsIDk1MTk5LCAKLSAgICA5NTIwNCwgOTUyMDksIDk1MjE0LCA5NTIxOSwgOTUyMjQsIDk1MjI5LCA5NTIzNCwgOTUyMzksIDk1MjQ0LCA5NTI0OSwgCi0gICAgOTUyNTQsIDk1MjU5LCA5NTI2NCwgOTUyNjksIDk1Mjc0LCA5NTI3OSwgOTUyODQsIDk1Mjg5LCA5NTI5NCwgOTUyOTksIAotICAgIDk1MzA0LCA5NTMwOSwgOTUzMTQsIDk1MzE5LCA5NTMyNSwgOTUzMzAsIDk1MzM2LCA5NTM0MSwgOTUzNDcsIDk1MzUyLCAKLSAgICA5NTM1OCwgOTUzNjQsIDk1MzY4LCA5NTM3MywgOTUzNzcsIDAsIDk1MzgxLCA5NTM4NiwgOTUzOTAsIDk1Mzk0LCA5NTM5OCwgCi0gICAgOTU0MDIsIDk1NDA2LCA5NTQxMCwgOTU0MTQsIDk1NDE4LCA5NTQyMiwgOTU0MjcsIDk1NDMxLCA5NTQzNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU0NDEsIDk1NDQ1LCA5NTQ0OSwgOTU0NTMsIDk1NDU2LCA5NTQ2MCwgCi0gICAgOTU0NjMsIDk1NDY3LCA5NTQ3MCwgOTU0NzQsIDk1NDc4LCA5NTQ4MywgOTU0ODcsIDk1NDkyLCA5NTQ5NSwgOTU0OTksIAotICAgIDk1NTAyLCA5NTUwNiwgOTU1MDksIDk1NTEzLCA5NTUxNywgOTU1MjEsIDk1NTI1LCA5NTUyOSwgOTU1MzMsIDk1NTM3LCAKLSAgICA5NTU0MSwgOTU1NDUsIDk1NTQ5LCA5NTU1MywgOTU1NTcsIDk1NTYxLCA5NTU2NSwgOTU1NjksIDk1NTczLCA5NTU3NywgCi0gICAgOTU1ODEsIDk1NTg0LCA5NTU4NywgOTU1OTEsIDk1NTk1LCA5NTU5OSwgOTU2MDIsIDk1NjA1LCA5NTYwOCwgOTU2MTIsIAotICAgIDk1NjE2LCA5NTYyMCwgOTU2MjQsIDk1NjI4LCA5NTYzMSwgOTU2MzQsIDk1NjM5LCA5NTY0MywgOTU2NDgsIDk1NjUyLCAKLSAgICA5NTY1NywgOTU2NjIsIDk1NjY4LCA5NTY3MywgOTU2NzksIDk1NjgzLCA5NTY4OCwgOTU2OTIsIDk1Njk3LCA5NTcwMSwgCi0gICAgOTU3MDUsIDk1NzA5LCA5NTcxMywgOTU3MTYsIDk1NzE5LCA5NTcyMywgOTU3MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk1NzMwLCA5NTczNCwgOTU3MzcsIDk1NzQwLCA5NTc0MywgOTU3NDYsIDk1NzQ5LCA5NTc1MiwgOTU3NTUsIDk1NzU4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTc2MSwgOTU3NjUsIDk1NzcwLCA5NTc3NCwgOTU3NzksIAotICAgIDk1NzgzLCA5NTc4OCwgOTU3OTIsIDk1Nzk3LCA5NTgwMSwgOTU4MDYsIDk1ODEwLCA5NTgxNSwgOTU4MjAsIDk1ODI1LCAKLSAgICA5NTgzMCwgOTU4MzUsIDk1ODQwLCA5NTg0NSwgOTU4NTAsIDk1ODU1LCA5NTg2MCwgOTU4NjUsIDk1ODcwLCA5NTg3NSwgCi0gICAgOTU4ODAsIDk1ODg1LCA5NTg5MCwgOTU4OTUsIDk1OTAwLCA5NTkwNCwgOTU5MDgsIDk1OTEzLCA5NTkxOCwgOTU5MjMsIAotICAgIDk1OTI3LCA5NTkzMSwgOTU5MzUsIDk1OTQwLCA5NTk0NSwgOTU5NTAsIDk1OTU0LCA5NTk1OCwgOTU5NjMsIDk1OTY4LCAKLSAgICA5NTk3MywgOTU5NzksIDk1OTg0LCA5NTk5MCwgOTU5OTUsIDk2MDAxLCA5NjAwNiwgOTYwMTIsIDk2MDE3LCA5NjAyMywgCi0gICAgOTYwMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2MDMzLCA5NjAzOCwgOTYwNDIsIDk2MDQ2LCA5NjA1MCwgOTYwNTQsIAotICAgIDk2MDU4LCA5NjA2MiwgOTYwNjYsIDk2MDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjA3NCwgOTYwNzcsIDk2MDgyLCA5NjA4OCwgCi0gICAgOTYwOTYsIDk2MTAxLCA5NjEwNywgOTYxMTUsIDk2MTIxLCA5NjEyNywgOTYxMzEsIDk2MTM1LCA5NjE0MiwgOTYxNTEsIAotICAgIDk2MTU4LCA5NjE2NywgOTYxNzMsIDk2MTgyLCA5NjE4OSwgOTYxOTYsIDk2MjAzLCA5NjIxMywgOTYyMTksIDk2MjIzLCAKLSAgICA5NjIzMCwgOTYyMzksIDk2MjQ5LCA5NjI1NiwgOTYyNjMsIDk2MjY3LCA5NjI3MSwgOTYyNzgsIDk2Mjg4LCA5NjI5MiwgCi0gICAgOTYyOTksIDk2MzA2LCA5NjMxMywgOTYzMTksIDk2MzI2LCA5NjMzMywgOTYzNDAsIDk2MzQ3LCA5NjM1MSwgOTYzNTUsIAotICAgIDk2MzU5LCA5NjM2NiwgOTYzNzAsIDk2Mzc3LCA5NjM4NCwgOTYzOTgsIDk2NDA3LCA5NjQxMSwgOTY0MTUsIDk2NDE5LCAKLSAgICA5NjQyNiwgOTY0MzAsIDk2NDM0LCA5NjQzOCwgOTY0NDYsIDk2NDU0LCA5NjQ3MywgOTY0ODMsIDk2NTAzLCA5NjUwNywgCi0gICAgOTY1MTEsIDk2NTE1LCA5NjUxOSwgOTY1MjMsIDk2NTI3LCA5NjUzMSwgOTY1MzgsIDk2NTQyLCA5NjU0NSwgOTY1NDksIAotICAgIDk2NTUzLCA5NjU1OSwgOTY1NjYsIDk2NTc1LCA5NjU3OSwgOTY1ODgsIDk2NTk3LCA5NjYwNSwgOTY2MDksIDk2NjE2LCAKLSAgICA5NjYyMCwgOTY2MjQsIDk2NjI4LCA5NjYzMiwgOTY2NDMsIDk2NjUyLCA5NjY2MSwgOTY2NzAsIDk2Njc5LCA5NjY5MSwgCi0gICAgOTY3MDAsIDk2NzA5LCA5NjcxOCwgOTY3MjYsIDk2NzM1LCA5Njc0NywgOTY3NTYsIDk2NzY1LCA5Njc3NCwgOTY3ODYsIAotICAgIDk2Nzk1LCA5NjgwNCwgOTY4MTYsIDk2ODI1LCA5NjgzNCwgOTY4NDYsIDk2ODU1LCA5Njg1OSwgOTY4NjMsIDk2ODY3LCAKLSAgICA5Njg3MSwgOTY4NzUsIDk2ODc5LCA5Njg4MywgOTY4OTAsIDk2ODk0LCA5Njg5OCwgOTY5MDksIDk2OTEzLCA5NjkxNywgCi0gICAgOTY5MjQsIDk2OTMwLCA5NjkzNiwgOTY5NDAsIDk2OTQ3LCA5Njk1MSwgOTY5NTUsIDk2OTU5LCA5Njk2MywgOTY5NjcsIAotICAgIDk2OTcxLCA5Njk3NywgOTY5ODUsIDk2OTg5LCA5Njk5MywgOTY5OTYsIDk3MDAyLCA5NzAxMiwgOTcwMTYsIDk3MDI4LCAKLSAgICA5NzAzNSwgOTcwNDIsIDk3MDQ5LCA5NzA1NiwgOTcwNjIsIDk3MDY2LCA5NzA3MCwgOTcwNzQsIDk3MDc4LCA5NzA4NSwgCi0gICAgOTcwOTQsIDk3MTAxLCA5NzEwOSwgOTcxMTcsIDk3MTIzLCA5NzEyNywgOTcxMzEsIDk3MTM1LCA5NzEzOSwgOTcxNDUsIAotICAgIDk3MTU0LCA5NzE2NiwgOTcxNzMsIDk3MTgwLCA5NzE4OSwgOTcyMDAsIDk3MjA2LCA5NzIxNSwgOTcyMjQsIDk3MjMxLCAKLSAgICA5NzI0MCwgOTcyNDcsIDk3MjU0LCA5NzI2NCwgOTcyNzEsIDk3Mjc4LCA5NzI4NSwgOTcyOTIsIDk3Mjk2LCA5NzMwMiwgCi0gICAgOTczMDYsIDk3MzE3LCA5NzMyNSwgOTczMzQsIDk3MzQ2LCA5NzM1MywgOTczNjAsIDk3MzcwLCA5NzM3NywgOTczODYsIAotICAgIDk3MzkzLCA5NzQwMiwgOTc0MDksIDk3NDE2LCA5NzQyNiwgOTc0MzMsIDk3NDQwLCA5NzQ1MCwgOTc0NTcsIDk3NDY5LCAKLSAgICA5NzQ3OCwgOTc0ODUsIDk3NDkyLCA5NzQ5OSwgOTc1MDgsIDk3NTE4LCA5NzUzMSwgOTc1MzgsIDk3NTQ4LCA5NzU1OCwgCi0gICAgOTc1NjUsIDk3NTc0LCA5NzU4NywgOTc1OTQsIDk3NjAxLCA5NzYwOCwgOTc2MTgsIDk3NjI4LCA5NzYzNSwgOTc2NDUsIAotICAgIDk3NjUyLCA5NzY1OSwgOTc2NjksIDk3Njc1LCA5NzY4MiwgOTc2ODksIDk3Njk2LCA5NzcwNiwgOTc3MTMsIDk3NzIwLCAKLSAgICA5NzcyNywgOTc3MzMsIDk3NzQwLCA5Nzc1MCwgOTc3NTcsIDk3NzYxLCA5Nzc2OSwgOTc3NzMsIDk3Nzg1LCA5Nzc4OSwgCi0gICAgOTc4MDMsIDk3ODA3LCA5NzgxMSwgOTc4MTUsIDk3ODE5LCA5NzgyNSwgOTc4MzIsIDk3ODQwLCA5Nzg0NCwgOTc4NDgsIAotICAgIDk3ODUyLCA5Nzg1NiwgOTc4NjMsIDk3ODY3LCA5Nzg3MywgOTc4NzksIDk3ODg3LCA5Nzg5MSwgOTc4OTgsIDk3OTA2LCAKLSAgICA5NzkxMCwgOTc5MTQsIDk3OTIwLCA5NzkyNCwgOTc5MzMsIDk3OTQyLCA5Nzk0OSwgOTc5NTksIDk3OTY1LCA5Nzk2OSwgCi0gICAgOTc5NzMsIDk3OTgxLCA5Nzk4OCwgOTc5OTUsIDk4MDAxLCA5ODAwNSwgOTgwMTMsIDk4MDE3LCA5ODAyNCwgOTgwMzYsIAotICAgIDk4MDQzLCA5ODA1MywgOTgwNTksIDk4MDYzLCA5ODA3MiwgOTgwNzksIDk4MDg4LCA5ODA5MiwgOTgwOTYsIDk4MTAzLCAKLSAgICA5ODEwNywgOTgxMTEsIDk4MTE1LCA5ODExOSwgOTgxMjIsIDk4MTI4LCA5ODEzNCwgOTgxMzgsIDk4MTQyLCA5ODE0OSwgCi0gICAgOTgxNTYsIDk4MTYzLCA5ODE3MCwgOTgxNzcsIDk4MTg0LCA5ODE5MSwgOTgxOTgsIDk4MjA0LCA5ODIwOCwgOTgyMTIsIAotICAgIDk4MjE5LCA5ODIyNiwgOTgyMzMsIDk4MjQwLCA5ODI0NywgOTgyNTEsIDk4MjU0LCA5ODI1OSwgOTgyNjMsIDk4MjY3LCAKLSAgICA5ODI3NiwgOTgyODUsIDk4Mjg5LCA5ODI5MywgOTgyOTksIDk4MzA1LCA5ODMyMiwgOTgzMjgsIDk4MzMyLCA5ODM0MSwgCi0gICAgOTgzNDUsIDk4MzQ5LCA5ODM1NiwgOTgzNjQsIDk4MzcyLCA5ODM3OCwgOTgzODIsIDk4Mzg2LCA5ODM5MCwgOTgzOTQsIAotICAgIDk4Mzk3LCA5ODQwMywgOTg0MTAsIDk4NDIwLCA5ODQyNywgOTg0MzQsIDk4NDQxLCA5ODQ0NywgOTg0NTQsIDk4NDYxLCAKLSAgICA5ODQ2OCwgOTg0NzUsIDk4NDgyLCA5ODQ5MSwgOTg0OTgsIDk4NTEwLCA5ODUxNywgOTg1MjQsIDk4NTM0LCA5ODU0NSwgCi0gICAgOTg1NTIsIDk4NTU5LCA5ODU2NiwgOTg1NzMsIDk4NTgwLCA5ODU4NywgOTg1OTQsIDk4NjAxLCA5ODYwOCwgOTg2MTUsIAotICAgIDk4NjI1LCA5ODYzNSwgOTg2NDUsIDk4NjUyLCA5ODY2MiwgOTg2NjksIDk4Njc2LCA5ODY4MywgOTg2OTAsIDk4Njk2LCAKLSAgICA5ODcwMywgOTg3MTAsIDk4NzE3LCA5ODcyNCwgOTg3MzEsIDk4NzM4LCA5ODc0NSwgOTg3NTIsIDk4NzU4LCA5ODc2NSwgCi0gICAgOTg3NzIsIDk4NzgxLCA5ODc4OCwgOTg3OTUsIDk4Nzk5LCA5ODgwNywgOTg4MTEsIDk4ODE1LCA5ODgxOSwgOTg4MjMsIAotICAgIDk4ODI3LCA5ODgzNCwgOTg4MzgsIDk4ODQ3LCA5ODg1MSwgOTg4NTgsIDk4ODY2LCA5ODg3MCwgOTg4NzQsIDk4ODc4LCAKLSAgICA5ODg5MSwgOTg5MDcsIDk4OTExLCA5ODkxNSwgOTg5MjIsIDk4OTI4LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk0NywgCi0gICAgOTg5NTEsIDk4OTU1LCA5ODk2MiwgOTg5NjYsIDk4OTg0LCA5ODk4OCwgOTg5OTIsIDk4OTk5LCA5OTAwMywgOTkwMDcsIAotICAgIDk5MDEzLCA5OTAxNywgOTkwMjEsIDk5MDI5LCA5OTAzMywgOTkwMzcsIDk5MDQxLCA5OTA0NSwgOTkwNTEsIDk5MDYyLCAKLSAgICA5OTA3MSwgOTkwODAsIDk5MDg3LCA5OTA5NCwgOTkxMDUsIDk5MTEyLCA5OTExOSwgOTkxMjYsIDk5MTMzLCA5OTE0MCwgCi0gICAgOTkxNDcsIDk5MTU0LCA5OTE2NCwgOTkxNzAsIDk5MTc3LCA5OTE4NywgOTkxOTYsIDk5MjAzLCA5OTIxMiwgOTkyMjIsIAotICAgIDk5MjI5LCA5OTIzNiwgOTkyNDMsIDk5MjUwLCA5OTI2MiwgOTkyNjksIDk5Mjc2LCA5OTI4MywgOTkyOTAsIDk5Mjk3LCAKLSAgICA5OTMwNywgOTkzMTQsIDk5MzIxLCA5OTMzMSwgOTkzNDQsIDk5MzU2LCA5OTM2MywgOTkzNzMsIDk5MzgwLCA5OTM4NywgCi0gICAgOTkzOTQsIDk5NDA4LCA5OTQxNCwgOTk0MjIsIDk5NDMyLCA5OTQ0MiwgOTk0NDksIDk5NDU2LCA5OTQ2MiwgOTk0NjYsIAotICAgIDk5NDczLCA5OTQ4MywgOTk0ODksIDk5NTAyLCA5OTUwNiwgOTk1MTAsIDk5NTE3LCA5OTUyMSwgOTk1MjgsIDk5NTM4LCAKLSAgICA5OTU0MiwgOTk1NDYsIDk5NTUwLCA5OTU1NCwgOTk1NTgsIDk5NTY1LCA5OTU2OSwgOTk1NzYsIDk5NTgzLCA5OTU5MCwgCi0gICAgOTk1OTksIDk5NjA4LCA5OTYxOCwgOTk2MjUsIDk5NjMyLCA5OTYzOSwgOTk2NDksIDk5NjU2LCA5OTY2NiwgOTk2NzMsIAotICAgIDk5NjgzLCA5OTY5MCwgOTk2OTcsIDk5NzA3LCA5OTcxNywgOTk3MjQsIDk5NzMwLCA5OTczOCwgOTk3NDYsIDk5NzUyLCAKLSAgICA5OTc1OCwgOTk3NjIsIDk5NzY2LCA5OTc3MywgOTk3ODEsIDk5Nzg3LCA5OTc5MSwgOTk3OTUsIDk5Nzk5LCA5OTgwNiwgCi0gICAgOTk4MTgsIDk5ODIxLCA5OTgyOCwgOTk4MzQsIDk5ODM4LCA5OTg0MiwgOTk4NDYsIDk5ODUwLCA5OTg1NCwgOTk4NTgsIAotICAgIDk5ODYyLCA5OTg2NiwgOTk4NzAsIDk5ODc0LCA5OTg4MSwgOTk4ODUsIDk5ODkxLCA5OTg5NSwgOTk4OTksIDk5OTAzLCAKLSAgICA5OTkwOSwgOTk5MTYsIDk5OTIzLCA5OTkzMCwgOTk5NDEsIDk5OTQ5LCA5OTk1MywgOTk5NTksIDk5OTY4LCA5OTk3NSwgCi0gICAgOTk5ODEsIDk5OTg0LCA5OTk4OCwgOTk5OTIsIDk5OTk4LCAxMDAwMDcsIDEwMDAxNSwgMTAwMDE5LCAxMDAwMjUsIAotICAgIDEwMDAyOSwgMTAwMDMzLCAxMDAwMzcsIDEwMDA0MywgMTAwMDUwLCAxMDAwNTYsIDEwMDA2MCwgMTAwMDY2LCAxMDAwNzAsIAotICAgIDEwMDA3NCwgMTAwMDgzLCAxMDAwOTUsIDEwMDA5OSwgMTAwMTA2LCAxMDAxMTMsIDEwMDEyMywgMTAwMTMwLCAxMDAxNDIsIAotICAgIDEwMDE0OSwgMTAwMTU2LCAxMDAxNjMsIDEwMDE3NCwgMTAwMTg0LCAxMDAxOTcsIDEwMDIwNywgMTAwMjE0LCAxMDAyMTgsIAotICAgIDEwMDIyMiwgMTAwMjI2LCAxMDAyMzAsIDEwMDIzOSwgMTAwMjQ4LCAxMDAyNTcsIDEwMDI3NCwgMTAwMjgzLCAxMDAyODksIAotICAgIDEwMDI5NiwgMTAwMzA0LCAxMDAzMTcsIDEwMDMyMSwgMTAwMzMwLCAxMDAzMzksIDEwMDM0OCwgMTAwMzU3LCAxMDAzNjgsIAotICAgIDEwMDM3NywgMTAwMzg2LCAxMDAzOTUsIDEwMDQwNCwgMTAwNDEzLCAxMDA0MjIsIDEwMDQzMiwgMTAwNDM1LCAxMDA0MzksIAotICAgIDEwMDQ0MywgMTAwNDQ3LCAxMDA0NTEsIDEwMDQ1NSwgMTAwNDYxLCAxMDA0NjgsIDEwMDQ3NSwgMTAwNDgyLCAxMDA0ODgsIAotICAgIDEwMDQ5NCwgMTAwNTAxLCAxMDA1MDcsIDEwMDUxNCwgMTAwNTIyLCAxMDA1MjYsIDEwMDUzMywgMTAwNTQwLCAxMDA1NDcsIAotICAgIDEwMDU1NSwgMTAwNTU4LCAxMDA1NjIsIDEwMDU2NiwgMTAwNTcwLCAxMDA1NzMsIDEwMDU3OSwgMTAwNTgzLCAxMDA1ODksIAotICAgIDEwMDU5NiwgMTAwNjAzLCAxMDA2MDksIDEwMDYxNiwgMTAwNjIzLCAxMDA2MzAsIDEwMDYzNywgMTAwNjQ0LCAxMDA2NTEsIAotICAgIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAxMDA3MTMsIAotICAgIDEwMDcxNywgMTAwNzI2LCAxMDA3MzAsIDEwMDczNCwgMTAwNzM4LCAxMDA3NDIsIDEwMDc0OCwgMTAwNzU1LCAxMDA3NjIsIAotICAgIDEwMDc2OSwgMTAwNzc2LCAxMDA3ODMsIDEwMDc4OSwgMTAwNzk3LCAxMDA4MDEsIDEwMDgwNSwgMTAwODA5LCAxMDA4MTMsIAotICAgIDEwMDgxOSwgMTAwODM2LCAxMDA4NTMsIDEwMDg1NywgMTAwODYxLCAxMDA4NjUsIDEwMDg2OSwgMTAwODczLCAxMDA4NzcsIAotICAgIDEwMDg4MywgMTAwODkwLCAxMDA4OTQsIDEwMDkwMCwgMTAwOTA3LCAxMDA5MTQsIDEwMDkyMSwgMTAwOTI4LCAxMDA5MzUsIAotICAgIDEwMDk0NCwgMTAwOTUxLCAxMDA5NTgsIDEwMDk2NSwgMTAwOTcyLCAxMDA5NzYsIDEwMDk4MCwgMTAwOTg2LCAxMDA5OTgsIAotICAgIDEwMTAwMiwgMTAxMDA2LCAxMDEwMTUsIDEwMTAxOSwgMTAxMDIzLCAxMDEwMjcsIDEwMTAzMywgMTAxMDM3LCAxMDEwNDEsIAotICAgIDEwMTA1MCwgMTAxMDU0LCAxMDEwNTgsIDEwMTA2MiwgMTAxMDY5LCAxMDEwNzMsIDEwMTA3NywgMTAxMDgxLCAxMDEwODUsIAotICAgIDEwMTA4OSwgMTAxMDkzLCAxMDEwOTcsIDEwMTEwMSwgMTAxMTA3LCAxMDExMTQsIDEwMTEyMSwgMTAxMTI3LCAxMDExMzEsIAotICAgIDEwMTE0OCwgMTAxMTU0LCAxMDExNTgsIDEwMTE2NCwgMTAxMTcwLCAxMDExNzYsIDEwMTE4MiwgMTAxMTg4LCAxMDExOTQsIAotICAgIDEwMTE5OCwgMTAxMjAyLCAxMDEyMDYsIDEwMTIxMiwgMTAxMjE2LCAxMDEyMjIsIDEwMTIyNiwgMTAxMjMwLCAxMDEyMzcsIAotICAgIDEwMTI0NCwgMTAxMjYxLCAxMDEyNjUsIDEwMTI2OSwgMTAxMjczLCAxMDEyNzcsIDEwMTI4MSwgMTAxMjkzLCAxMDEyOTYsIAotICAgIDEwMTMwMSwgMTAxMzA2LCAxMDEzMjEsIDEwMTMzMSwgMTAxMzQzLCAxMDEzNDcsIDEwMTM1MSwgMTAxMzU1LCAxMDEzNjEsIAotICAgIDEwMTM2OCwgMTAxMzc1LCAxMDEzODUsIDEwMTM5NywgMTAxNDAzLCAxMDE0MDksIDEwMTQxOCwgMTAxNDIyLCAxMDE0MjYsIAotICAgIDEwMTQzMywgMTAxNDQzLCAxMDE0NTAsIDEwMTQ1NiwgMTAxNDYwLCAxMDE0NjQsIDEwMTQ3MSwgMTAxNDc3LCAxMDE0ODEsIAotICAgIDEwMTQ4NywgMTAxNDkxLCAxMDE0OTksIDEwMTUwNSwgMTAxNTA5LCAxMDE1MTcsIDEwMTUyNSwgMTAxNTMyLCAxMDE1MzgsIAotICAgIDEwMTU0NSwgMTAxNTUyLCAxMDE1NjIsIDEwMTU3MiwgMTAxNTc2LCAxMDE1ODAsIDEwMTU4NCwgMTAxNTg4LCAxMDE1OTQsIAotICAgIDEwMTYwMSwgMTAxNjA3LCAxMDE2MTQsIDEwMTYyMSwgMTAxNjI4LCAxMDE2MzcsIDEwMTY0NCwgMTAxNjUxLCAxMDE2NTcsIAotICAgIDEwMTY2NCwgMTAxNjcxLCAxMDE2NzgsIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNSwgMTAxNzEyLCAxMDE3MTksIAotICAgIDEwMTcyNiwgMTAxNzM1LCAxMDE3NDIsIDEwMTc0OSwgMTAxNzUzLCAxMDE3NTksIDEwMTc2MywgMTAxNzY5LCAxMDE3NzYsIAotICAgIDEwMTc4MywgMTAxNzkwLCAxMDE3OTQsIDEwMTc5OCwgMTAxODAyLCAxMDE4MDYsIDEwMTgxMCwgMTAxODE3LCAxMDE4MjEsIAotICAgIDEwMTgyNSwgMTAxODMxLCAxMDE4MzksIDEwMTg0MywgMTAxODQ3LCAxMDE4NTEsIDEwMTg1NSwgMTAxODYyLCAxMDE4NjYsIAotICAgIDEwMTg3MCwgMTAxODc4LCAxMDE4ODIsIDEwMTg4NiwgMTAxODkwLCAxMDE4OTQsIDEwMTkwMCwgMTAxOTA0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDE5MDgsIDEwMTkxNCwgMTAxOTIwLCAxMDE5MjcsIAotICAgIDEwMTkzNCwgMTAxOTQxLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjgsIDEwMTk3NSwgMTAxOTgyLCAxMDE5ODksIAotICAgIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNiwgMTAyMDIyLCAxMDIwMjgsIDEwMjAzNCwgMTAyMDQwLCAxMDIwNDYsIAotICAgIDEwMjA1MiwgMTAyMDU4LCAxMDIwNjQsIDEwMjA3MSwgMTAyMDc4LCAxMDIwODUsIDEwMjA5MiwgMTAyMDk5LCAxMDIxMDYsIAotICAgIDEwMjExMiwgMTAyMTE4LCAxMDIxMjQsIDEwMjEzMSwgMTAyMTM4LCAxMDIxNDQsIDEwMjE1MCwgMTAyMTU5LCAxMDIxNjYsIAotICAgIDEwMjE3MywgMTAyMTgwLCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDcsIDEwMjIxMywgMTAyMjE5LCAxMDIyMjgsIAotICAgIDEwMjIzNSwgMTAyMjQyLCAxMDIyNTMsIDEwMjI2NCwgMTAyMjcwLCAxMDIyNzYsIDEwMjI4MiwgMTAyMjkxLCAxMDIyOTgsIAotICAgIDEwMjMwNSwgMTAyMzE1LCAxMDIzMjUsIDEwMjMzNiwgMTAyMzQ3LCAxMDIzNTksIDEwMjM3MiwgMTAyMzgzLCAxMDIzOTQsIAotICAgIDEwMjQwNiwgMTAyNDE5LCAxMDI0MzAsIDEwMjQ0MSwgMTAyNDUyLCAxMDI0NjMsIDEwMjQ3NCwgMTAyNDg2LCAxMDI0OTQsIAotICAgIDEwMjUwMiwgMTAyNTExLCAxMDI1MjAsIDEwMjUyOSwgMTAyNTM1LCAxMDI1NDEsIDEwMjU0NywgMTAyNTU0LCAxMDI1NjQsIAotICAgIDEwMjU3MSwgMTAyNTgxLCAxMDI1ODYsIDEwMjU5MSwgMTAyNTk3LCAxMDI2MDMsIDEwMjYxMSwgMTAyNjE5LCAxMDI2MjgsIAotICAgIDEwMjYzOSwgMTAyNjUwLCAxMDI2NTgsIDEwMjY2NiwgMTAyNjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDI2ODQsIDEwMjY5NSwgMTAyNzAyLCAxMDI3MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwMjcxOCwgMTAyNzIyLCAxMDI3MjYsIDEwMjczMCwgMTAyNzM0LCAxMDI3MzgsIDEwMjc0MiwgMTAyNzQ2LCAxMDI3NTAsIAotICAgIDEwMjc1NCwgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIAotICAgIDEwMjc5MCwgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIAotICAgIDEwMjgyNiwgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIAotICAgIDEwMjg2MiwgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIAotICAgIDEwMjg5OCwgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIAotICAgIDEwMjkzNCwgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIAotICAgIDEwMjk3MCwgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIAotICAgIDEwMzAwNiwgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIAotICAgIDEwMzA0MiwgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIAotICAgIDEwMzA3OCwgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIAotICAgIDEwMzExNCwgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIAotICAgIDEwMzE1MCwgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIAotICAgIDEwMzE4NiwgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIAotICAgIDEwMzIyMiwgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIAotICAgIDEwMzI1OCwgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIAotICAgIDEwMzI5NCwgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIAotICAgIDEwMzMzMCwgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIAotICAgIDEwMzM2NiwgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIAotICAgIDEwMzQwMiwgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIAotICAgIDEwMzQzOCwgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIAotICAgIDEwMzQ3NCwgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIAotICAgIDEwMzUxMCwgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIAotICAgIDEwMzU0NiwgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIAotICAgIDEwMzU4MiwgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIAotICAgIDEwMzYxOCwgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIAotICAgIDEwMzY1NCwgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIAotICAgIDEwMzY5MCwgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIAotICAgIDEwMzcyNiwgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIAotICAgIDEwMzc2MiwgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIAotICAgIDEwMzc5OCwgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIAotICAgIDEwMzgzNCwgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIAotICAgIDEwMzg3MCwgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIAotICAgIDEwMzkwNiwgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIAotICAgIDEwMzk0MiwgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIAotICAgIDEwMzk3OCwgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIAotICAgIDEwNDAxNCwgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIAotICAgIDEwNDA1MCwgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIAotICAgIDEwNDA4NiwgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIAotICAgIDEwNDEyMiwgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIAotICAgIDEwNDE1OCwgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIAotICAgIDEwNDE5NCwgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIAotICAgIDEwNDIzMCwgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIAotICAgIDEwNDI2NiwgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIAotICAgIDEwNDMwMiwgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIAotICAgIDEwNDMzOCwgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIAotICAgIDEwNDM3NCwgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIAotICAgIDEwNDQxMCwgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIAotICAgIDEwNDQ0NiwgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIAotICAgIDEwNDQ4MiwgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIAotICAgIDEwNDUxOCwgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIAotICAgIDEwNDU1NCwgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIAotICAgIDEwNDU5MCwgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIAotICAgIDEwNDYyNiwgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIAotICAgIDEwNDY2MiwgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIAotICAgIDEwNDY5OCwgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIAotICAgIDEwNDczNCwgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIAotICAgIDEwNDc3MCwgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIAotICAgIDEwNDgwNiwgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIAotICAgIDEwNDg0MiwgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIAotICAgIDEwNDg3OCwgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIAotICAgIDEwNDkxNCwgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIAotICAgIDEwNDk1MCwgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIAotICAgIDEwNDk4NiwgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIAotICAgIDEwNTAyMiwgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIAotICAgIDEwNTA1OCwgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIAotICAgIDEwNTA5NCwgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIAotICAgIDEwNTEzMCwgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIAotICAgIDEwNTE2NiwgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIAotICAgIDEwNTIwMiwgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIAotICAgIDEwNTIzOCwgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIAotICAgIDEwNTI3NCwgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIAotICAgIDEwNTMxMCwgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIAotICAgIDEwNTM0NiwgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIAotICAgIDEwNTM4MiwgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIAotICAgIDEwNTQxOCwgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIAotICAgIDEwNTQ1NCwgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIAotICAgIDEwNTQ5MCwgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIAotICAgIDEwNTUyNiwgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIAotICAgIDEwNTU2MiwgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIAotICAgIDEwNTU5OCwgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIAotICAgIDEwNTYzNCwgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIAotICAgIDEwNTY3MCwgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIAotICAgIDEwNTcwNiwgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIAotICAgIDEwNTc0MiwgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIAotICAgIDEwNTc3OCwgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIAotICAgIDEwNTgxNCwgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIAotICAgIDEwNTg1MCwgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIAotICAgIDEwNTg4NiwgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIAotICAgIDEwNTkyMiwgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIAotICAgIDEwNTk1OCwgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIAotICAgIDEwNTk5NCwgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIAotICAgIDEwNjAzMCwgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIAotICAgIDEwNjA2NiwgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIAotICAgIDEwNjEwMiwgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIAotICAgIDEwNjEzOCwgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIAotICAgIDEwNjE3NCwgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIAotICAgIDEwNjIxMCwgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIAotICAgIDEwNjI0NiwgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIAotICAgIDEwNjI4MiwgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIAotICAgIDEwNjMxOCwgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIAotICAgIDEwNjM1NCwgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIAotICAgIDEwNjM5MCwgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIAotICAgIDEwNjQyNiwgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIAotICAgIDEwNjQ2MiwgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIAotICAgIDEwNjQ5OCwgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIAotICAgIDEwNjUzNCwgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIAotICAgIDEwNjU3MCwgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIAotICAgIDEwNjYwNiwgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIAotICAgIDEwNjY0MiwgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIAotICAgIDEwNjY3OCwgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIAotICAgIDEwNjcxNCwgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIAotICAgIDEwNjc1MCwgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIAotICAgIDEwNjc4NiwgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIAotICAgIDEwNjgyMiwgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIAotICAgIDEwNjg1OCwgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIAotICAgIDEwNjg5NCwgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIAotICAgIDEwNjkzMCwgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIAotICAgIDEwNjk2NiwgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNzAwMiwgMTA3MDA5LCAxMDcwMTYsIDEwNzAyNSwgMTA3MDM0LCAKLSAgICAxMDcwNDEsIDEwNzA0NiwgMTA3MDUzLCAxMDcwNjAsIDEwNzA2OSwgMTA3MDgwLCAxMDcwOTEsIDEwNzA5NiwgMTA3MTAzLCAKLSAgICAxMDcxMDgsIDEwNzExMywgMTA3MTE4LCAxMDcxMjMsIDEwNzEyOCwgMTA3MTMzLCAxMDcxMzgsIDEwNzE0MywgMTA3MTQ4LCAKLSAgICAxMDcxNTMsIDEwNzE1OCwgMTA3MTY1LCAxMDcxNzIsIDEwNzE3NywgMTA3MTgyLCAxMDcxODcsIDEwNzE5MiwgMTA3MTk5LCAKLSAgICAxMDcyMDYsIDEwNzIxNCwgMTA3MjE5LCAxMDcyMjYsIDEwNzIzMSwgMTA3MjM2LCAxMDcyNDEsIDEwNzI0NiwgMTA3MjUxLCAKLSAgICAxMDcyNTgsIDEwNzI2NSwgMTA3MjcwLCAxMDcyNzUsIDEwNzI4MCwgMTA3Mjg1LCAxMDcyOTAsIDEwNzI5NSwgMTA3MzAwLCAKLSAgICAxMDczMDUsIDEwNzMxMCwgMTA3MzE1LCAxMDczMjAsIDEwNzMyNSwgMTA3MzMwLCAxMDczMzUsIDEwNzM0MCwgMTA3MzQ1LCAKLSAgICAxMDczNTAsIDEwNzM1NSwgMTA3MzYwLCAxMDczNjcsIDEwNzM3MiwgMTA3Mzc3LCAxMDczODYsIDEwNzM5MywgMTA3Mzk4LCAKLSAgICAxMDc0MDMsIDEwNzQwOCwgMTA3NDEzLCAxMDc0MTgsIDEwNzQyMywgMTA3NDI4LCAxMDc0MzMsIDEwNzQzOCwgMTA3NDQzLCAKLSAgICAxMDc0NDgsIDEwNzQ1MywgMTA3NDU4LCAxMDc0NjMsIDEwNzQ2OCwgMTA3NDczLCAxMDc0NzgsIDEwNzQ4MywgMTA3NDg4LCAKLSAgICAxMDc0OTMsIDEwNzQ5OCwgMTA3NTA0LCAxMDc1MTIsIDEwNzUxOCwgMTA3NTI2LCAxMDc1MzQsIDEwNzU0MiwgMTA3NTQ4LCAKLSAgICAxMDc1NTQsIDEwNzU2MCwgMTA3NTY2LCAxMDc1NzIsIDEwNzU4MCwgMTA3NTkwLCAxMDc1OTgsIDEwNzYwNiwgMTA3NjEyLCAKLSAgICAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0OCwgMTA3NjU2LCAxMDc2NjQsIDEwNzY3MCwgMTA3Njc2LCAKLSAgICAxMDc2ODIsIDEwNzY4OCwgMTA3Njk0LCAxMDc3MDAsIDEwNzcwOCwgMTA3NzE2LCAxMDc3MjIsIDEwNzcyOCwgMTA3NzM0LCAKLSAgICAxMDc3NDAsIDEwNzc0NiwgMTA3NzU0LCAxMDc3NjAsIDEwNzc2NiwgMTA3NzcyLCAxMDc3NzgsIDEwNzc4NCwgMTA3NzkwLCAKLSAgICAxMDc3OTgsIDEwNzgwNCwgMTA3ODEwLCAxMDc4MTYsIDEwNzgyMiwgMTA3ODMwLCAxMDc4MzgsIDEwNzg0NCwgMTA3ODUwLCAKLSAgICAxMDc4NTYsIDEwNzg2MSwgMTA3ODY3LCAxMDc4NzMsIDEwNzg4MCwgMTA3ODg1LCAxMDc4OTAsIDEwNzg5NSwgMTA3OTAwLCAKLSAgICAxMDc5MDUsIDEwNzkxMCwgMTA3OTE1LCAxMDc5MjAsIDEwNzkyNSwgMTA3OTM0LCAxMDc5NDEsIDEwNzk0NiwgMTA3OTUxLCAKLSAgICAxMDc5NTYsIDEwNzk2MywgMTA3OTY4LCAxMDc5NzMsIDEwNzk3OCwgMTA3OTg1LCAxMDc5OTAsIDEwNzk5NSwgMTA4MDAwLCAKLSAgICAxMDgwMDUsIDEwODAxMCwgMTA4MDE1LCAxMDgwMjAsIDEwODAyNSwgMTA4MDMwLCAxMDgwMzUsIDEwODA0MCwgMTA4MDQ3LCAKLSAgICAxMDgwNTIsIDEwODA1OSwgMTA4MDY0LCAxMDgwNjksIDEwODA3NiwgMTA4MDgxLCAxMDgwODYsIDEwODA5MSwgMTA4MDk2LCAKLSAgICAxMDgxMDEsIDEwODEwNiwgMTA4MTExLCAxMDgxMTYsIDEwODEyMSwgMTA4MTI2LCAxMDgxMzEsIDEwODEzNiwgMTA4MTQxLCAKLSAgICAxMDgxNDYsIDEwODE1MSwgMTA4MTU2LCAxMDgxNjEsIDEwODE2NiwgMTA4MTcxLCAxMDgxNzgsIDEwODE4MywgMTA4MTg4LCAKLSAgICAxMDgxOTMsIDEwODE5OCwgMTA4MjAzLCAxMDgyMDgsIDEwODIxMywgMTA4MjE4LCAxMDgyMjMsIDEwODIyOCwgMTA4MjMzLCAKLSAgICAxMDgyMzgsIDEwODI0MywgMTA4MjUwLCAxMDgyNTUsIDEwODI2MCwgMTA4MjY3LCAxMDgyNzIsIDEwODI3NywgMTA4MjgyLCAKLSAgICAxMDgyODcsIDEwODI5MiwgMTA4Mjk3LCAxMDgzMDIsIDEwODMwNywgMTA4MzEyLCAxMDgzMTcsIDEwODMyNCwgMTA4MzI5LCAKLSAgICAxMDgzMzQsIDEwODMzOSwgMTA4MzQ0LCAxMDgzNDksIDEwODM1NiwgMTA4MzYzLCAxMDgzNjgsIDEwODM3MywgMTA4Mzc4LCAKLSAgICAxMDgzODMsIDEwODM4OCwgMTA4MzkzLCAxMDgzOTgsIDEwODQwMywgMTA4NDA4LCAxMDg0MTMsIDEwODQxOCwgMTA4NDIzLCAKLSAgICAxMDg0MjgsIDEwODQzMywgMTA4NDM4LCAxMDg0NDMsIDEwODQ0OCwgMTA4NDUzLCAxMDg0NTgsIDEwODQ2MywgMTA4NDY4LCAKLSAgICAxMDg0NzMsIDEwODQ3OCwgMTA4NDgzLCAxMDg0ODgsIDEwODQ5MywgMTA4NDk4LCAxMDg1MDMsIDEwODUwOCwgMTA4NTEzLCAKLSAgICAxMDg1MTgsIDEwODUyMywgMTA4NTI4LCAxMDg1MzMsIDEwODUzOCwgMTA4NTQzLCAxMDg1NTAsIDEwODU1NSwgMTA4NTYwLCAKLSAgICAxMDg1NjUsIDEwODU3MCwgMTA4NTc1LCAxMDg1ODAsIDEwODU4NSwgMTA4NTkwLCAxMDg1OTUsIDEwODYwMCwgMTA4NjA1LCAKLSAgICAxMDg2MTAsIDEwODYxNSwgMTA4NjIwLCAxMDg2MjUsIDEwODYzMCwgMTA4NjM1LCAxMDg2NDAsIDEwODY0NSwgMTA4NjUwLCAKLSAgICAxMDg2NTUsIDEwODY2MCwgMTA4NjY1LCAxMDg2NzAsIDEwODY3NSwgMTA4NjgwLCAxMDg2ODUsIDEwODY5MCwgMTA4Njk1LCAKLSAgICAxMDg3MDAsIDEwODcwNSwgMTA4NzEwLCAxMDg3MTUsIDEwODcyMCwgMTA4NzI1LCAxMDg3MzAsIDEwODczNSwgMTA4NzQwLCAKLSAgICAxMDg3NDUsIDEwODc1MCwgMTA4NzU1LCAxMDg3NjAsIDEwODc2NSwgMTA4NzcwLCAxMDg3NzUsIDEwODc4MCwgMTA4Nzg1LCAKLSAgICAxMDg3OTAsIDEwODc5NSwgMTA4ODAwLCAxMDg4MDUsIDEwODgxMCwgMTA4ODE1LCAxMDg4MjAsIDEwODgyNSwgMTA4ODMwLCAKLSAgICAxMDg4MzUsIDEwODg0MCwgMTA4ODQ3LCAxMDg4NTIsIDEwODg1NywgMTA4ODYyLCAxMDg4NjcsIDEwODg3MiwgMTA4ODc3LCAKLSAgICAxMDg4ODEsIDEwODg4NiwgMTA4ODkxLCAxMDg4OTYsIDEwODkwMSwgMTA4OTA2LCAxMDg5MTEsIDEwODkxNiwgMTA4OTIxLCAKLSAgICAxMDg5MjYsIDEwODkzMSwgMTA4OTM2LCAxMDg5NDEsIDEwODk0NiwgMTA4OTUxLCAxMDg5NTgsIDEwODk2MywgMTA4OTY4LCAKLSAgICAxMDg5NzQsIDEwODk3OSwgMTA4OTg0LCAxMDg5ODksIDEwODk5NCwgMTA4OTk5LCAxMDkwMDQsIDEwOTAwOSwgMTA5MDE0LCAKLSAgICAxMDkwMTksIDEwOTAyNCwgMTA5MDI5LCAxMDkwMzQsIDEwOTAzOSwgMTA5MDQ0LCAxMDkwNDksIDEwOTA1NCwgMTA5MDU5LCAKLSAgICAxMDkwNjQsIDEwOTA2OSwgMTA5MDc0LCAxMDkwNzksIDEwOTA4NCwgMTA5MDg5LCAxMDkwOTQsIDEwOTA5OSwgMTA5MTA0LCAKLSAgICAxMDkxMDksIDEwOTExNCwgMTA5MTE5LCAxMDkxMjQsIDEwOTEyOSwgMTA5MTM0LCAxMDkxMzksIDEwOTE0NCwgMTA5MTQ5LCAKLSAgICAxMDkxNTQsIDEwOTE1OSwgMTA5MTY0LCAxMDkxNjksIDEwOTE3NCwgMTA5MTc5LCAxMDkxODQsIDEwOTE4OSwgMTA5MTk2LCAKLSAgICAxMDkyMDEsIDEwOTIwNiwgMTA5MjEzLCAxMDkyMjAsIDEwOTIyNSwgMTA5MjMwLCAxMDkyMzUsIDEwOTI0MCwgMTA5MjQ1LCAKLSAgICAxMDkyNTAsIDEwOTI1NSwgMTA5MjYwLCAxMDkyNjUsIDEwOTI3MCwgMTA5Mjc1LCAxMDkyODAsIDEwOTI4NSwgMTA5MjkwLCAKLSAgICAxMDkyOTUsIDEwOTMwMCwgMTA5MzA1LCAxMDkzMTAsIDEwOTMxNSwgMTA5MzIwLCAxMDkzMjUsIDEwOTMzMCwgMTA5MzM1LCAKLSAgICAxMDkzNDAsIDEwOTM0NSwgMTA5MzUyLCAxMDkzNTcsIDEwOTM2MiwgMTA5MzY3LCAxMDkzNzIsIDEwOTM3NywgMTA5MzgyLCAKLSAgICAxMDkzODcsIDEwOTM5MiwgMTA5Mzk3LCAxMDk0MDIsIDEwOTQwNywgMTA5NDEyLCAxMDk0MTcsIDEwOTQyMiwgMTA5NDI3LCAKLSAgICAxMDk0MzIsIDEwOTQzNywgMTA5NDQyLCAxMDk0NDksIDEwOTQ1NCwgMTA5NDU5LCAxMDk0NjQsIDEwOTQ2OSwgMTA5NDc0LCAKLSAgICAxMDk0NzksIDEwOTQ4NCwgMTA5NDkwLCAxMDk0OTUsIDEwOTUwMCwgMTA5NTA1LCAxMDk1MTAsIDEwOTUxNSwgMTA5NTIwLCAKLSAgICAxMDk1MjUsIDEwOTUzMCwgMTA5NTM3LCAxMDk1NDQsIDEwOTU0OSwgMTA5NTU0LCAxMDk1NTgsIDEwOTU2MywgMTA5NTY3LCAKLSAgICAxMDk1NzEsIDEwOTU3NiwgMTA5NTgzLCAxMDk1ODgsIDEwOTU5MywgMTA5NjAyLCAxMDk2MDcsIDEwOTYxMiwgMTA5NjE3LCAKLSAgICAxMDk2MjIsIDEwOTYyOSwgMTA5NjM2LCAxMDk2NDEsIDEwOTY0NiwgMTA5NjUxLCAxMDk2NTYsIDEwOTY2MywgMTA5NjY4LCAKLSAgICAxMDk2NzMsIDEwOTY3OCwgMTA5NjgzLCAxMDk2ODgsIDEwOTY5MywgMTA5Njk4LCAxMDk3MDMsIDEwOTcwOCwgMTA5NzEzLCAKLSAgICAxMDk3MTgsIDEwOTcyMywgMTA5NzMwLCAxMDk3MzQsIDEwOTczOSwgMTA5NzQ0LCAxMDk3NDksIDEwOTc1NCwgMTA5NzU4LCAKLSAgICAxMDk3NjMsIDEwOTc2OCwgMTA5NzczLCAxMDk3NzgsIDEwOTc4MywgMTA5Nzg4LCAxMDk3OTMsIDEwOTc5OCwgMTA5ODAzLCAKLSAgICAxMDk4MDksIDEwOTgxNSwgMTA5ODIxLCAxMDk4MjcsIDEwOTgzMywgMTA5ODM5LCAxMDk4NDUsIDEwOTg1MSwgMTA5ODU3LCAKLSAgICAxMDk4NjMsIDEwOTg2OSwgMTA5ODc1LCAxMDk4ODAsIDEwOTg4NiwgMTA5ODkyLCAxMDk4OTgsIDEwOTkwNCwgMTA5OTEwLCAKLSAgICAxMDk5MTYsIDEwOTkyMiwgMTA5OTI4LCAxMDk5MzQsIDEwOTk0MCwgMTA5OTQ2LCAxMDk5NTEsIDEwOTk1NywgMTA5OTYzLCAKLSAgICAxMDk5NjksIDEwOTk3NSwgMTA5OTgxLCAxMDk5ODcsIDEwOTk5MywgMTA5OTk5LCAxMTAwMDUsIDExMDAxMSwgMTEwMDE3LCAKLSAgICAxMTAwMjMsIDExMDAyOSwgMTEwMDM1LCAxMTAwNDEsIDExMDA0NywgMTEwMDUzLCAxMTAwNTksIDExMDA2NSwgMTEwMDcxLCAKLSAgICAxMTAwNzYsIDExMDA4MiwgMTEwMDg4LCAxMTAwOTQsIDExMDEwMCwgMTEwMTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAxMTIsIDExMDExNSwgMTEwMTE5LCAKLSAgICAxMTAxMjMsIDExMDEyNywgMTEwMTMwLCAxMTAxMzQsIDExMDEzOSwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAKLSAgICAxMTAxNTksIDExMDE2NCwgMTEwMTY5LCAxMTAxNzMsIDExMDE3NywgMTEwMTgwLCAxMTAxODQsIDExMDE4OSwgMTEwMTk0LCAKLSAgICAxMTAxOTgsIDExMDIwMiwgMTEwMjA2LCAxMTAyMTAsIDExMDIxNCwgMTEwMjE4LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAKLSAgICAxMTAyMzQsIDExMDIzNywgMTEwMjQxLCAxMTAyNDUsIDExMDI0OSwgMTEwMjUzLCAxMTAyNTcsIDExMDI2MSwgMTEwMjY3LCAKLSAgICAxMTAyNzAsIDExMDI3NCwgMTEwMjc4LCAxMTAyODIsIDExMDI4NiwgMTEwMjkwLCAxMTAyOTQsIDExMDI5OCwgMTEwMzAyLCAKLSAgICAxMTAzMDYsIDExMDMxMSwgMTEwMzE2LCAxMTAzMjIsIDExMDMyNiwgMTEwMzMwLCAxMTAzMzQsIDExMDMzOCwgMTEwMzQyLCAKLSAgICAxMTAzNDYsIDExMDM1MSwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NiwgMTEwMzgwLCAKLSAgICAxMTAzODQsIDExMDM4OCwgMTEwMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAzOTYsIDExMDQwMCwgCi0gICAgMTEwNDA0LCAxMTA0MTAsIDExMDQxNiwgMTEwNDIwLCAxMTA0MjUsIDExMDQzMCwgMTEwNDM1LCAxMTA0NDAsIDExMDQ0NCwgCi0gICAgMTEwNDQ5LCAxMTA0NTQsIDExMDQ1OSwgMTEwNDYzLCAxMTA0NjgsIDExMDQ3MywgMTEwNDc4LCAxMTA0ODIsIDExMDQ4NywgCi0gICAgMTEwNDkyLCAxMTA0OTcsIDExMDUwMiwgMTEwNTA3LCAxMTA1MTIsIDExMDUxNywgMTEwNTIyLCAxMTA1MjYsIDExMDUzMSwgCi0gICAgMTEwNTM2LCAxMTA1NDEsIDExMDU0NiwgMTEwNTUxLCAxMTA1NTYsIDExMDU2MSwgMTEwNTY2LCAxMTA1NzEsIDExMDU3NiwgCi0gICAgMTEwNTgxLCAxMTA1ODgsIDExMDU5MywgMTEwNjAwLCAxMTA2MDUsIDExMDYxMCwgMTEwNjE1LCAxMTA2MjAsIDExMDYyNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNjMwLCAxMTA2MzQsIDExMDY0MCwgCi0gICAgMTEwNjQzLCAxMTA2NDYsIDExMDY1MCwgMTEwNjU0LCAxMTA2NTgsIDExMDY2MiwgMTEwNjY2LCAxMTA2NzAsIDExMDY3NCwgCi0gICAgMTEwNjgwLCAxMTA2ODYsIDExMDY5MiwgMTEwNjk4LCAxMTA3MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDcxMCwgMTEwNzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTA3MjEsIDExMDcyNiwgMTEwNzMxLCAxMTA3MzYsIDExMDc0MywgMTEwNzUwLCAxMTA3NTcsIDExMDc2NCwgMTEwNzY5LCAKLSAgICAxMTA3NzQsIDExMDc3OSwgMTEwNzg0LCAxMTA3OTEsIDExMDc5NiwgMTEwODAzLCAxMTA4MTAsIDExMDgxNSwgMTEwODIwLCAKLSAgICAxMTA4MjUsIDExMDgzMiwgMTEwODM3LCAxMTA4NDIsIDExMDg0OSwgMTEwODU2LCAxMTA4NjEsIDExMDg2NiwgMTEwODcxLCAKLSAgICAxMTA4NzgsIDExMDg4NSwgMTEwODkyLCAxMTA4OTcsIDExMDkwMiwgMTEwOTA5LCAxMTA5MTYsIDExMDkyMywgMTEwOTMwLCAKLSAgICAxMTA5MzUsIDExMDk0MCwgMTEwOTQ1LCAxMTA5NTIsIDExMDk1NywgMTEwOTYyLCAxMTA5NjcsIDExMDk3NCwgMTEwOTgzLCAKLSAgICAxMTA5OTAsIDExMDk5NSwgMTExMDAwLCAxMTEwMDUsIDExMTAxMCwgMTExMDE1LCAxMTEwMjAsIDExMTAyOSwgMTExMDM2LCAKLSAgICAxMTEwNDEsIDExMTA0OCwgMTExMDU1LCAxMTEwNjAsIDExMTA2NSwgMTExMDcwLCAxMTEwNzcsIDExMTA4MiwgMTExMDg5LCAKLSAgICAxMTEwOTYsIDExMTEwMSwgMTExMTA2LCAxMTExMTEsIDExMTExOCwgMTExMTI1LCAxMTExMzAsIDExMTEzNSwgMTExMTQyLCAKLSAgICAxMTExNDksIDExMTE1NiwgMTExMTYxLCAxMTExNjYsIDExMTE3MSwgMTExMTc2LCAxMTExODMsIDExMTE5MiwgMTExMjAxLCAKLSAgICAxMTEyMDYsIDExMTIxMywgMTExMjIyLCAxMTEyMjcsIDExMTIzMiwgMTExMjM3LCAxMTEyNDIsIDExMTI0OSwgMTExMjU2LCAKLSAgICAxMTEyNjMsIDExMTI3MCwgMTExMjc1LCAxMTEyODAsIDExMTI4NSwgMTExMjkyLCAxMTEyOTksIDExMTMwNiwgMTExMzExLCAKLSAgICAxMTEzMTYsIDExMTMyMywgMTExMzI4LCAxMTEzMzUsIDExMTM0MCwgMTExMzQ3LCAxMTEzNTIsIDExMTM1OSwgMTExMzY2LCAKLSAgICAxMTEzNzEsIDExMTM3NiwgMTExMzgxLCAxMTEzODYsIDExMTM5MSwgMTExMzk2LCAxMTE0MDEsIDExMTQwNiwgMTExNDExLCAKLSAgICAxMTE0MTgsIDExMTQyNSwgMTExNDMyLCAxMTE0MzksIDExMTQ0NiwgMTExNDU1LCAxMTE0NjAsIDExMTQ2NSwgMTExNDcyLCAKLSAgICAxMTE0NzksIDExMTQ4NCwgMTExNDkxLCAxMTE0OTgsIDExMTUwNSwgMTExNTEyLCAxMTE1MTksIDExMTUyNiwgMTExNTMxLCAKLSAgICAxMTE1MzYsIDExMTU0MSwgMTExNTQ2LCAxMTE1NTEsIDExMTU2MCwgMTExNTY5LCAxMTE1NzgsIDExMTU4NywgMTExNTk2LCAKLSAgICAxMTE2MDUsIDExMTYxNCwgMTExNjIzLCAxMTE2MjgsIDExMTYzOSwgMTExNjUwLCAxMTE2NTksIDExMTY2NCwgMTExNjY5LCAKLSAgICAxMTE2NzQsIDExMTY3OSwgMTExNjg4LCAxMTE2OTUsIDExMTcwMiwgMTExNzA5LCAxMTE3MTYsIDExMTcyMywgMTExNzMwLCAKLSAgICAxMTE3MzksIDExMTc0OCwgMTExNzU5LCAxMTE3NjgsIDExMTc3OSwgMTExNzg4LCAxMTE3OTUsIDExMTgwNCwgMTExODE1LCAKLSAgICAxMTE4MjQsIDExMTgzMywgMTExODQyLCAxMTE4NTEsIDExMTg1OCwgMTExODY1LCAxMTE4NzIsIDExMTg4MSwgMTExODkwLCAKLSAgICAxMTE5MDEsIDExMTkxMCwgMTExOTE5LCAxMTE5MzAsIDExMTkzNSwgMTExOTQwLCAxMTE5NTEsIDExMTk1OSwgMTExOTY4LCAKLSAgICAxMTE5NzcsIDExMTk4NiwgMTExOTk3LCAxMTIwMDYsIDExMjAxNSwgMTEyMDI2LCAxMTIwMzcsIDExMjA0OCwgMTEyMDU5LCAKLSAgICAxMTIwNzAsIDExMjA4MSwgMTEyMDg4LCAxMTIwOTUsIDExMjEwMiwgMTEyMTA5LCAxMTIxMjAsIDExMjEyOSwgMTEyMTM2LCAKLSAgICAxMTIxNDMsIDExMjE1MCwgMTEyMTYxLCAxMTIxNzIsIDExMjE4MywgMTEyMTk0LCAxMTIyMDUsIDExMjIxNiwgMTEyMjI3LCAKLSAgICAxMTIyMzgsIDExMjI0NSwgMTEyMjUyLCAxMTIyNjEsIDExMjI3MCwgMTEyMjc3LCAxMTIyODQsIDExMjI5MSwgMTEyMzAwLCAKLSAgICAxMTIzMDksIDExMjMxOCwgMTEyMzI1LCAxMTIzMzQsIDExMjM0MywgMTEyMzUyLCAxMTIzNTksIDExMjM2NiwgMTEyMzcxLCAKLSAgICAxMTIzNzcsIDExMjM4NCwgMTEyMzkxLCAxMTIzOTgsIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIDExMjQyOCwgMTEyNDM3LCAKLSAgICAxMTI0NDYsIDExMjQ1NSwgMTEyNDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI0NzEsIDExMjQ3NywgCi0gICAgMTEyNDgyLCAxMTI0ODcsIDExMjQ5NCwgMTEyNTAwLCAxMTI1MDYsIDExMjUxMiwgMTEyNTE4LCAxMTI1MjQsIDExMjUzMCwgCi0gICAgMTEyNTM2LCAxMTI1NDAsIDExMjU0NCwgMTEyNTUwLCAxMTI1NTYsIDExMjU2MiwgMTEyNTY2LCAxMTI1NzEsIDExMjU3NiwgCi0gICAgMTEyNTgwLCAxMTI1ODQsIDExMjU4NywgMTEyNTkzLCAxMTI1OTksIDExMjYwNSwgMTEyNjExLCAxMTI2MTcsIDExMjYyMywgCi0gICAgMTEyNjI5LCAxMTI2MzUsIDExMjY0MSwgMTEyNjUxLCAxMTI2NjEsIDExMjY2NywgMTEyNjczLCAxMTI2ODMsIDExMjY5MywgCi0gICAgMTEyNjk5LCAwLCAwLCAxMTI3MDUsIDExMjcxMywgMTEyNzE4LCAxMTI3MjMsIDExMjcyOSwgMTEyNzM1LCAxMTI3NDEsIAotICAgIDExMjc0NywgMTEyNzUzLCAxMTI3NTksIDExMjc2NiwgMTEyNzczLCAxMTI3NzksIDExMjc4NSwgMTEyNzkxLCAxMTI3OTcsIAotICAgIDExMjgwMywgMTEyODA5LCAxMTI4MTUsIDExMjgyMSwgMTEyODI2LCAxMTI4MzIsIDExMjgzOCwgMTEyODQ0LCAxMTI4NTAsIAotICAgIDExMjg1NiwgMTEyODY1LCAxMTI4NzEsIDExMjg3NiwgMTEyODg0LCAxMTI4OTEsIDExMjg5OCwgMTEyOTA3LCAxMTI5MTYsIAotICAgIDExMjkyNSwgMTEyOTM0LCAxMTI5NDMsIDExMjk1MiwgMTEyOTYxLCAxMTI5NzAsIDExMjk4MCwgMTEyOTkwLCAxMTI5OTgsIAotICAgIDExMzAwNiwgMTEzMDE1LCAxMTMwMjQsIDExMzAzMCwgMTEzMDM2LCAxMTMwNDIsIDExMzA0OCwgMTEzMDU2LCAxMTMwNjQsIAotICAgIDExMzA2OCwgMTEzMDc0LCAxMTMwNzksIDExMzA4NSwgMTEzMDkxLCAxMTMwOTcsIDExMzEwMywgMTEzMTA5LCAxMTMxMTgsIAotICAgIDExMzEyMywgMTEzMTMwLCAxMTMxMzUsIDExMzE0MCwgMTEzMTQ1LCAxMTMxNTEsIDExMzE1NywgMTEzMTYzLCAxMTMxNzAsIAotICAgIDExMzE3NSwgMTEzMTgwLCAxMTMxODUsIDExMzE5MCwgMTEzMTk1LCAxMTMyMDEsIDExMzIwNywgMTEzMjEzLCAxMTMyMTksIAotICAgIDExMzIyNSwgMTEzMjMxLCAxMTMyMzcsIDExMzI0MywgMTEzMjQ4LCAxMTMyNTMsIDExMzI1OCwgMTEzMjYzLCAxMTMyNjgsIAotICAgIDExMzI3MywgMTEzMjc4LCAxMTMyODMsIDExMzI4OSwgMTEzMjk1LCAxMTMzMDAsIDExMzMwNSwgMTEzMzEwLCAxMTMzMTUsIAotICAgIDExMzMyMCwgMTEzMzI2LCAxMTMzMzMsIDExMzMzNywgMTEzMzQxLCAxMTMzNDUsIDExMzM0OSwgMTEzMzUzLCAxMTMzNTcsIAotICAgIDExMzM2MSwgMTEzMzY1LCAxMTMzNzMsIDExMzM4MywgMTEzMzg3LCAxMTMzOTEsIDExMzM5NywgMTEzNDAzLCAxMTM0MDksIAotICAgIDExMzQxNSwgMTEzNDIxLCAxMTM0MjcsIDExMzQzMywgMTEzNDM5LCAxMTM0NDUsIDExMzQ1MSwgMTEzNDU3LCAxMTM0NjMsIAotICAgIDExMzQ2OSwgMTEzNDc1LCAxMTM0NzksIDExMzQ4MywgMTEzNDkwLCAxMTM0OTYsIDExMzUwMiwgMTEzNTA4LCAxMTM1MTMsIAotICAgIDExMzUyMCwgMTEzNTI1LCAxMTM1MzEsIDExMzUzNywgMTEzNTQzLCAxMTM1NDksIDExMzU1NCwgMTEzNTU4LCAxMTM1NjQsIAotICAgIDExMzU2OCwgMTEzNTcyLCAxMTM1NzYsIDExMzU4MiwgMTEzNTg4LCAxMTM1OTIsIDExMzU5OCwgMTEzNjA0LCAxMTM2MTAsIAotICAgIDExMzYxNiwgMTEzNjIyLCAxMTM2MzAsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1NiwgMTEzNjYyLCAxMTM2NzQsIAotICAgIDExMzY4NiwgMTEzNzAwLCAxMTM3MTIsIDExMzcyNCwgMTEzNzM4LCAxMTM3NTIsIDExMzc2NiwgMTEzNzcwLCAxMTM3NzgsIAotICAgIDExMzc4NiwgMTEzNzkxLCAxMTM3OTUsIDExMzc5OSwgMTEzODAzLCAxMTM4MDcsIDExMzgxMSwgMTEzODE1LCAxMTM4MTksIAotICAgIDExMzgyNSwgMTEzODMxLCAxMTM4MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzg0MywgMTEzODQ5LCAKLSAgICAxMTM4NTUsIDExMzg2MSwgMTEzODY3LCAxMTM4NzMsIDExMzg3OSwgMTEzODg1LCAxMTM4OTEsIDExMzg5NywgMTEzOTAzLCAKLSAgICAxMTM5MDksIDExMzkxNSwgMTEzOTIxLCAxMTM5MjcsIDExMzkzMywgMTEzOTM5LCAxMTM5NDUsIDExMzk1MSwgMTEzOTU3LCAKLSAgICAxMTM5NjMsIDExMzk2OSwgMTEzOTc1LCAxMTM5ODEsIDExMzk4NywgMTEzOTkzLCAxMTM5OTksIDExNDAwNSwgMTE0MDExLCAKLSAgICAxMTQwMTcsIDExNDAyMywgMTE0MDI5LCAxMTQwMzUsIDExNDA0MSwgMTE0MDQ3LCAxMTQwNTMsIDExNDA1OSwgMTE0MDY1LCAKLSAgICAxMTQwNzEsIDExNDA3NywgMTE0MDgzLCAxMTQwODksIDExNDA5NSwgMTE0MTAxLCAxMTQxMDcsIDExNDExMywgMTE0MTE5LCAKLSAgICAxMTQxMjUsIDExNDEzMSwgMTE0MTM3LCAxMTQxNDMsIDExNDE0OSwgMTE0MTU1LCAxMTQxNjEsIDExNDE2NywgMTE0MTczLCAKLSAgICAxMTQxNzksIDExNDE4NSwgMTE0MTkxLCAxMTQxOTcsIDExNDIwMywgMTE0MjA5LCAxMTQyMTUsIDExNDIyMSwgMTE0MjI3LCAKLSAgICAxMTQyMzMsIDExNDIzOSwgMTE0MjQ0LCAxMTQyNDksIDExNDI1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3OTIsIDkxNzk4LCA5MTgwNCwgOTE4MTAsIDkxODE2LCA5MTgyMiwgOTE4MjksIAorICAgIDkxODM2LCA5MTg0MywgOTE4NDksIDkxODU1LCA5MTg2MSwgOTE4NjgsIDkxODc1LCA5MTg4MiwgOTE4ODgsIDkxODk1LCAKKyAgICA5MTkwMiwgOTE5MDksIDkxOTE2LCA5MTkyMiwgOTE5MjksIDkxOTM2LCA5MTk0MiwgOTE5NDksIDkxOTU2LCA5MTk2MywgCisgICAgOTE5NzAsIDkxOTc3LCA5MTk4MywgOTE5OTAsIDkxOTk3LCA5MjAwNCwgOTIwMTAsIDkyMDE2LCA5MjAyMiwgOTIwMjgsIAorICAgIDkyMDM0LCA5MjA0MSwgOTIwNDgsIDkyMDU0LCA5MjA2MCwgOTIwNjYsIDkyMDczLCA5MjA3OSwgOTIwODYsIDkyMDkzLCAKKyAgICA5MjEwMCwgOTIxMDYsIDkyMTE0LCA5MjEyMSwgOTIxMjcsIDkyMTM0LCA5MjE0MSwgOTIxNDgsIDkyMTU0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5MjE2MSwgOTIxNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExNDI1OCwgMTE0MjYzLCAxMTQyNzAsIDExNDI3NywgMTE0Mjg0LCAxMTQyOTEsIDExNDI5NiwgMTE0MzAwLCAxMTQzMDYsIAotICAgIDExNDMxMCwgMTE0MzE0LCAxMTQzMjAsIDExNDMyNCwgMTE0MzI4LCAxMTQzMzIsIDExNDMzOCwgMTE0MzQ1LCAxMTQzNDksIAotICAgIDExNDM1MywgMTE0MzU3LCAxMTQzNjEsIDExNDM2NSwgMTE0MzY5LCAxMTQzNzUsIDExNDM3OSwgMTE0MzgzLCAxMTQzODcsIAotICAgIDExNDM5MSwgMTE0Mzk1LCAxMTQzOTksIDExNDQwMywgMTE0NDA3LCAxMTQ0MTEsIDExNDQxNSwgMTE0NDE5LCAxMTQ0MjMsIAotICAgIDExNDQyOCwgMTE0NDMyLCAxMTQ0MzYsIDExNDQ0MCwgMTE0NDQ0LCAxMTQ0NDgsIDExNDQ1MiwgMTE0NDU2LCAxMTQ0NjAsIAotICAgIDExNDQ2NCwgMTE0NDcxLCAxMTQ0NzUsIDExNDQ4MywgMTE0NDg3LCAxMTQ0OTEsIDExNDQ5NSwgMTE0NDk5LCAxMTQ1MDMsIAotICAgIDExNDUwNywgMTE0NTExLCAxMTQ1MTgsIDExNDUyMiwgMTE0NTI2LCAxMTQ1MzAsIDExNDUzNCwgMTE0NTM4LCAxMTQ1NDQsIAotICAgIDExNDU0OCwgMTE0NTU0LCAxMTQ1NTgsIDExNDU2MiwgMTE0NTY2LCAxMTQ1NzAsIDExNDU3NCwgMTE0NTc4LCAxMTQ1ODIsIAotICAgIDExNDU4NiwgMTE0NTkwLCAxMTQ1OTQsIDExNDU5OCwgMTE0NjAyLCAxMTQ2MDYsIDExNDYxMCwgMTE0NjE0LCAxMTQ2MTgsIAotICAgIDExNDYyMiwgMTE0NjI2LCAxMTQ2MzAsIDExNDYzOCwgMTE0NjQyLCAxMTQ2NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExNDY1MCwgMTE0NjU4LCAxMTQ2NjYsIDExNDY3NCwgMTE0NjgyLCAxMTQ2OTAsIDExNDY5OCwgMTE0NzA2LCAKLSAgICAxMTQ3MTQsIDExNDcyMiwgMTE0NzMwLCAxMTQ3MzgsIDExNDc0NiwgMTE0NzU0LCAxMTQ3NjIsIDExNDc3MCwgMTE0Nzc4LCAKLSAgICAxMTQ3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDc5NCwgMTE0Nzk4LCAxMTQ4MDMsIAotICAgIDExNDgwOCwgMTE0ODEzLCAxMTQ4MTcsIDExNDgyMiwgMTE0ODI3LCAxMTQ4MzIsIDExNDgzNiwgMTE0ODQxLCAxMTQ4NDYsIAotICAgIDExNDg1MCwgMTE0ODU0LCAxMTQ4NTksIDExNDg2MywgMTE0ODY4LCAxMTQ4NzMsIDExNDg3NywgMTE0ODgyLCAxMTQ4ODcsIAotICAgIDExNDg5MSwgMTE0ODk2LCAxMTQ5MDEsIDExNDkwNiwgMTE0OTExLCAxMTQ5MTYsIDExNDkyMCwgMTE0OTI1LCAxMTQ5MzAsIAotICAgIDExNDkzNSwgMTE0OTM5LCAxMTQ5NDQsIDExNDk0OSwgMTE0OTU0LCAxMTQ5NTgsIDExNDk2MywgMTE0OTY4LCAxMTQ5NzIsIAotICAgIDExNDk3NiwgMTE0OTgxLCAxMTQ5ODUsIDExNDk5MCwgMTE0OTk1LCAxMTQ5OTksIDExNTAwNCwgMTE1MDA5LCAxMTUwMTMsIAotICAgIDExNTAxOCwgMTE1MDIzLCAxMTUwMjgsIDExNTAzMywgMTE1MDM4LCAxMTUwNDIsIDExNTA0NywgMTE1MDUyLCAxMTUwNTcsIAotICAgIDExNTA2MSwgMTE1MDY2LCAxMTUwNzEsIDExNTA3NiwgMTE1MDgwLCAxMTUwODUsIDExNTA5MCwgMTE1MDk0LCAxMTUwOTgsIAotICAgIDExNTEwMywgMTE1MTA3LCAxMTUxMTIsIDExNTExNywgMTE1MTIxLCAxMTUxMjYsIDExNTEzMSwgMTE1MTM1LCAxMTUxNDAsIAotICAgIDExNTE0NSwgMTE1MTUwLCAxMTUxNTUsIDExNTE2MCwgMTE1MTY0LCAxMTUxNjksIDExNTE3NCwgMTE1MTc5LCAxMTUxODMsIAotICAgIDExNTE4OCwgMCwgMTE1MTkzLCAxMTUxOTcsIDExNTIwMiwgMTE1MjA3LCAxMTUyMTEsIDExNTIxNSwgMTE1MjIwLCAKLSAgICAxMTUyMjQsIDExNTIyOSwgMTE1MjM0LCAxMTUyMzgsIDExNTI0MywgMTE1MjQ4LCAxMTUyNTIsIDExNTI1NywgMTE1MjYyLCAKLSAgICAxMTUyNjcsIDExNTI3MiwgMTE1Mjc3LCAxMTUyODIsIDExNTI4OCwgMTE1Mjk0LCAxMTUzMDAsIDExNTMwNSwgMTE1MzExLCAKLSAgICAxMTUzMTcsIDExNTMyMywgMTE1MzI4LCAxMTUzMzQsIDExNTM0MCwgMTE1MzQ1LCAxMTUzNTAsIDExNTM1NiwgMTE1MzYxLCAKLSAgICAxMTUzNjcsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM5MCwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNywgMTE1NDEzLCAKLSAgICAxMTU0MTksIDExNTQyNSwgMTE1NDMwLCAxMTU0MzYsIDExNTQ0MiwgMTE1NDQ4LCAxMTU0NTMsIDExNTQ1OSwgMTE1NDY1LCAKLSAgICAxMTU0NzEsIDExNTQ3NiwgMTE1NDgyLCAxMTU0ODgsIDExNTQ5MywgMTE1NDk4LCAxMTU1MDQsIDExNTUwOSwgMTE1NTE1LCAKLSAgICAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzgsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTUsIDExNTU2MSwgMTE1NTY3LCAKLSAgICAxMTU1NzMsIDAsIDExNTU3NywgMTE1NTgyLCAwLCAwLCAxMTU1ODcsIDAsIDAsIDExNTU5MiwgMTE1NTk3LCAwLCAwLCAKLSAgICAxMTU2MDIsIDExNTYwNywgMTE1NjExLCAxMTU2MTYsIDAsIDExNTYyMSwgMTE1NjI2LCAxMTU2MzEsIDExNTYzNSwgCi0gICAgMTE1NjQwLCAxMTU2NDUsIDExNTY1MCwgMTE1NjU1LCAxMTU2NjAsIDExNTY2NCwgMTE1NjY5LCAxMTU2NzQsIDAsIAotICAgIDExNTY3OSwgMCwgMTE1Njg0LCAxMTU2ODksIDExNTY5MywgMTE1Njk4LCAxMTU3MDMsIDExNTcwNywgMTE1NzExLCAwLCAKLSAgICAxMTU3MTYsIDExNTcyMSwgMTE1NzI2LCAxMTU3MzAsIDExNTczNSwgMTE1NzQwLCAxMTU3NDQsIDExNTc0OSwgMTE1NzU0LCAKLSAgICAxMTU3NTksIDExNTc2NCwgMTE1NzY5LCAxMTU3NzQsIDExNTc4MCwgMTE1Nzg2LCAxMTU3OTIsIDExNTc5NywgMTE1ODAzLCAKLSAgICAxMTU4MDksIDExNTgxNSwgMTE1ODIwLCAxMTU4MjYsIDExNTgzMiwgMTE1ODM3LCAxMTU4NDIsIDExNTg0OCwgMTE1ODUzLCAKLSAgICAxMTU4NTksIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MiwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OSwgMTE1OTA1LCAKLSAgICAxMTU5MTEsIDExNTkxNywgMTE1OTIyLCAxMTU5MjgsIDExNTkzNCwgMTE1OTQwLCAxMTU5NDUsIDExNTk1MSwgMTE1OTU3LCAKLSAgICAxMTU5NjMsIDExNTk2OCwgMTE1OTc0LCAxMTU5ODAsIDExNTk4NSwgMTE1OTkwLCAxMTU5OTYsIDExNjAwMSwgMTE2MDA3LCAKLSAgICAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMzAsIDExNjAzNSwgMTE2MDQxLCAxMTYwNDcsIDExNjA1MywgMTE2MDU5LCAKLSAgICAxMTYwNjUsIDExNjA2OSwgMCwgMTE2MDc0LCAxMTYwNzksIDExNjA4MywgMTE2MDg4LCAwLCAwLCAxMTYwOTMsIDExNjA5OCwgCi0gICAgMTE2MTAzLCAxMTYxMDcsIDExNjExMSwgMTE2MTE2LCAxMTYxMjAsIDExNjEyNSwgMCwgMTE2MTMwLCAxMTYxMzUsIAotICAgIDExNjE0MCwgMTE2MTQ0LCAxMTYxNDksIDExNjE1NCwgMTE2MTU5LCAwLCAxMTYxNjQsIDExNjE2OCwgMTE2MTczLCAKLSAgICAxMTYxNzgsIDExNjE4MywgMTE2MTg3LCAxMTYxOTIsIDExNjE5NywgMTE2MjAyLCAxMTYyMDYsIDExNjIxMSwgMTE2MjE2LCAKLSAgICAxMTYyMjAsIDExNjIyNCwgMTE2MjI5LCAxMTYyMzMsIDExNjIzOCwgMTE2MjQzLCAxMTYyNDcsIDExNjI1MiwgMTE2MjU3LCAKLSAgICAxMTYyNjEsIDExNjI2NiwgMTE2MjcxLCAxMTYyNzYsIDExNjI4MSwgMTE2Mjg2LCAxMTYyOTAsIDAsIDExNjI5NSwgCi0gICAgMTE2MzAwLCAxMTYzMDQsIDExNjMwOSwgMCwgMTE2MzE0LCAxMTYzMTgsIDExNjMyMywgMTE2MzI4LCAxMTYzMzIsIDAsIAotICAgIDExNjMzNiwgMCwgMCwgMCwgMTE2MzQwLCAxMTYzNDUsIDExNjM1MCwgMTE2MzU0LCAxMTYzNTksIDExNjM2NCwgMTE2MzY5LCAKLSAgICAwLCAxMTYzNzQsIDExNjM3OCwgMTE2MzgzLCAxMTYzODgsIDExNjM5MywgMTE2Mzk3LCAxMTY0MDIsIDExNjQwNywgCi0gICAgMTE2NDEyLCAxMTY0MTYsIDExNjQyMSwgMTE2NDI2LCAxMTY0MzAsIDExNjQzNCwgMTE2NDM5LCAxMTY0NDMsIDExNjQ0OCwgCi0gICAgMTE2NDUzLCAxMTY0NTcsIDExNjQ2MiwgMTE2NDY3LCAxMTY0NzEsIDExNjQ3NiwgMTE2NDgxLCAxMTY0ODYsIDExNjQ5MSwgCi0gICAgMTE2NDk2LCAxMTY1MDEsIDExNjUwNywgMTE2NTEzLCAxMTY1MTksIDExNjUyNCwgMTE2NTMwLCAxMTY1MzYsIDExNjU0MiwgCi0gICAgMTE2NTQ3LCAxMTY1NTMsIDExNjU1OSwgMTE2NTY0LCAxMTY1NjksIDExNjU3NSwgMTE2NTgwLCAxMTY1ODYsIDExNjU5MiwgCi0gICAgMTE2NTk3LCAxMTY2MDMsIDExNjYwOSwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNiwgMTE2NjMyLCAxMTY2MzgsIDExNjY0NCwgCi0gICAgMTE2NjQ5LCAxMTY2NTUsIDExNjY2MSwgMTE2NjY3LCAxMTY2NzIsIDExNjY3OCwgMTE2Njg0LCAxMTY2OTAsIDExNjY5NSwgCi0gICAgMTE2NzAxLCAxMTY3MDcsIDExNjcxMiwgMTE2NzE3LCAxMTY3MjMsIDExNjcyOCwgMTE2NzM0LCAxMTY3NDAsIDExNjc0NSwgCi0gICAgMTE2NzUxLCAxMTY3NTcsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzQsIDExNjc4MCwgMTE2Nzg2LCAxMTY3OTIsIDExNjc5NiwgCi0gICAgMTE2ODAxLCAxMTY4MDYsIDExNjgxMSwgMTE2ODE1LCAxMTY4MjAsIDExNjgyNSwgMTE2ODMwLCAxMTY4MzQsIDExNjgzOSwgCi0gICAgMTE2ODQ0LCAxMTY4NDgsIDExNjg1MiwgMTE2ODU3LCAxMTY4NjEsIDExNjg2NiwgMTE2ODcxLCAxMTY4NzUsIDExNjg4MCwgCi0gICAgMTE2ODg1LCAxMTY4ODksIDExNjg5NCwgMTE2ODk5LCAxMTY5MDQsIDExNjkwOSwgMTE2OTE0LCAxMTY5MTgsIDExNjkyMywgCi0gICAgMTE2OTI4LCAxMTY5MzMsIDExNjkzNywgMTE2OTQyLCAxMTY5NDcsIDExNjk1MiwgMTE2OTU2LCAxMTY5NjEsIDExNjk2NiwgCi0gICAgMTE2OTcwLCAxMTY5NzQsIDExNjk3OSwgMTE2OTgzLCAxMTY5ODgsIDExNjk5MywgMTE2OTk3LCAxMTcwMDIsIDExNzAwNywgCi0gICAgMTE3MDExLCAxMTcwMTYsIDExNzAyMSwgMTE3MDI2LCAxMTcwMzEsIDExNzAzNiwgMTE3MDQxLCAxMTcwNDcsIDExNzA1MywgCi0gICAgMTE3MDU5LCAxMTcwNjQsIDExNzA3MCwgMTE3MDc2LCAxMTcwODIsIDExNzA4NywgMTE3MDkzLCAxMTcwOTksIDExNzEwNCwgCi0gICAgMTE3MTA5LCAxMTcxMTUsIDExNzEyMCwgMTE3MTI2LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAxMTcxNDksIDExNzE1NCwgCi0gICAgMTE3MTYwLCAxMTcxNjYsIDExNzE3MiwgMTE3MTc4LCAxMTcxODQsIDExNzE4OSwgMTE3MTk1LCAxMTcyMDEsIDExNzIwNywgCi0gICAgMTE3MjEyLCAxMTcyMTgsIDExNzIyNCwgMTE3MjMwLCAxMTcyMzUsIDExNzI0MSwgMTE3MjQ3LCAxMTcyNTIsIDExNzI1NywgCi0gICAgMTE3MjYzLCAxMTcyNjgsIDExNzI3NCwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk3LCAxMTczMDIsIDExNzMwOCwgCi0gICAgMTE3MzE0LCAxMTczMjAsIDExNzMyNiwgMTE3MzMyLCAxMTczMzcsIDExNzM0MywgMTE3MzQ5LCAxMTczNTUsIDExNzM2MCwgCi0gICAgMTE3MzY2LCAxMTczNzIsIDExNzM3OCwgMTE3MzgzLCAxMTczODksIDExNzM5NSwgMTE3NDAwLCAxMTc0MDUsIDExNzQxMSwgCi0gICAgMTE3NDE2LCAxMTc0MjIsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NSwgMTE3NDUwLCAxMTc0NTYsIDExNzQ2MiwgCi0gICAgMTE3NDY4LCAxMTc0NzQsIDExNzQ4MCwgMTE3NDg1LCAxMTc0OTEsIDExNzQ5NywgMTE3NTAzLCAxMTc1MDgsIDExNzUxNCwgCi0gICAgMTE3NTIwLCAxMTc1MjYsIDExNzUzMSwgMTE3NTM3LCAxMTc1NDMsIDExNzU0OCwgMTE3NTUzLCAxMTc1NTksIDExNzU2NCwgCi0gICAgMTE3NTcwLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTMsIDExNzU5OCwgMTE3NjA0LCAxMTc2MTAsIDExNzYxNiwgCi0gICAgMTE3NjIyLCAxMTc2MjgsIDExNzYzNCwgMTE3NjQxLCAxMTc2NDgsIDExNzY1NSwgMTE3NjYxLCAxMTc2NjgsIDExNzY3NSwgCi0gICAgMTE3NjgyLCAxMTc2ODgsIDExNzY5NSwgMTE3NzAyLCAxMTc3MDgsIDExNzcxNCwgMTE3NzIxLCAxMTc3MjcsIDExNzczNCwgCi0gICAgMTE3NzQxLCAxMTc3NDcsIDExNzc1NCwgMTE3NzYxLCAxMTc3NjcsIDExNzc3NCwgMTE3NzgxLCAxMTc3ODgsIDExNzc5NSwgCi0gICAgMTE3ODAyLCAxMTc4MDgsIDExNzgxNSwgMTE3ODIyLCAxMTc4MjksIDExNzgzNSwgMTE3ODQyLCAxMTc4NDksIDExNzg1NiwgCi0gICAgMTE3ODYyLCAxMTc4NjksIDExNzg3NiwgMTE3ODgyLCAxMTc4ODgsIDExNzg5NSwgMTE3OTAxLCAxMTc5MDgsIDExNzkxNSwgCi0gICAgMTE3OTIxLCAxMTc5MjgsIDExNzkzNSwgMTE3OTQxLCAxMTc5NDgsIDExNzk1NSwgMTE3OTYyLCAxMTc5NjksIDExNzk3NiwgCi0gICAgMTE3OTgxLCAxMTc5ODcsIDExNzk5MywgMTE3OTk5LCAxMTgwMDQsIDExODAxMCwgMTE4MDE2LCAxMTgwMjIsIDExODAyNywgCi0gICAgMTE4MDMzLCAxMTgwMzksIDExODA0NCwgMTE4MDQ5LCAxMTgwNTUsIDExODA2MCwgMTE4MDY2LCAxMTgwNzIsIDExODA3NywgCi0gICAgMTE4MDgzLCAxMTgwODksIDExODA5NCwgMTE4MTAwLCAxMTgxMDYsIDExODExMiwgMTE4MTE4LCAxMTgxMjQsIDExODEyOSwgCi0gICAgMTE4MTM1LCAxMTgxNDEsIDExODE0NywgMTE4MTUyLCAxMTgxNTgsIDExODE2NCwgMTE4MTcwLCAxMTgxNzUsIDExODE4MSwgCi0gICAgMTE4MTg3LCAxMTgxOTIsIDExODE5NywgMTE4MjAzLCAxMTgyMDgsIDExODIxNCwgMTE4MjIwLCAxMTgyMjUsIDExODIzMSwgCi0gICAgMTE4MjM3LCAxMTgyNDIsIDExODI0OCwgMTE4MjU0LCAxMTgyNjAsIDExODI2NiwgMTE4MjcyLCAxMTgyNzgsIDAsIDAsIAotICAgIDExODI4NSwgMTE4MjkwLCAxMTgyOTUsIDExODMwMCwgMTE4MzA1LCAxMTgzMTAsIDExODMxNSwgMTE4MzIwLCAxMTgzMjUsIAotICAgIDExODMzMCwgMTE4MzM1LCAxMTgzNDAsIDExODM0NSwgMTE4MzUwLCAxMTgzNTUsIDExODM2MCwgMTE4MzY1LCAxMTgzNzAsIAotICAgIDExODM3NiwgMTE4MzgxLCAxMTgzODYsIDExODM5MSwgMTE4Mzk2LCAxMTg0MDEsIDExODQwNiwgMTE4NDExLCAxMTg0MTUsIAotICAgIDExODQyMCwgMTE4NDI1LCAxMTg0MzAsIDExODQzNSwgMTE4NDQwLCAxMTg0NDUsIDExODQ1MCwgMTE4NDU1LCAxMTg0NjAsIAotICAgIDExODQ2NSwgMTE4NDcwLCAxMTg0NzUsIDExODQ4MCwgMTE4NDg1LCAxMTg0OTAsIDExODQ5NSwgMTE4NTAwLCAxMTg1MDYsIAotICAgIDExODUxMSwgMTE4NTE2LCAxMTg1MjEsIDExODUyNiwgMTE4NTMxLCAxMTg1MzYsIDExODU0MSwgMTE4NTQ3LCAxMTg1NTIsIAotICAgIDExODU1NywgMTE4NTYyLCAxMTg1NjcsIDExODU3MiwgMTE4NTc3LCAxMTg1ODIsIDExODU4NywgMTE4NTkyLCAxMTg1OTcsIAotICAgIDExODYwMiwgMTE4NjA3LCAxMTg2MTIsIDExODYxNywgMTE4NjIyLCAxMTg2MjcsIDExODYzMiwgMTE4NjM3LCAxMTg2NDIsIAotICAgIDExODY0NywgMTE4NjUyLCAxMTg2NTcsIDExODY2MiwgMTE4NjY4LCAxMTg2NzMsIDExODY3OCwgMTE4NjgzLCAxMTg2ODgsIAotICAgIDExODY5MywgMTE4Njk4LCAxMTg3MDMsIDExODcwNywgMTE4NzEyLCAxMTg3MTcsIDExODcyMiwgMTE4NzI3LCAxMTg3MzIsIAotICAgIDExODczNywgMTE4NzQyLCAxMTg3NDcsIDExODc1MiwgMTE4NzU3LCAxMTg3NjIsIDExODc2NywgMTE4NzcyLCAxMTg3NzcsIAotICAgIDExODc4MiwgMTE4Nzg3LCAxMTg3OTIsIDExODc5OCwgMTE4ODAzLCAxMTg4MDgsIDExODgxMywgMTE4ODE4LCAxMTg4MjMsIAotICAgIDExODgyOCwgMTE4ODMzLCAxMTg4MzksIDExODg0NCwgMTE4ODQ5LCAxMTg4NTQsIDExODg1OSwgMTE4ODY0LCAxMTg4NjksIAotICAgIDExODg3NSwgMTE4ODgxLCAxMTg4ODcsIDExODg5MywgMTE4ODk5LCAxMTg5MDUsIDExODkxMSwgMTE4OTE3LCAxMTg5MjMsIAotICAgIDExODkyOSwgMTE4OTM1LCAxMTg5NDEsIDExODk0NywgMTE4OTUzLCAxMTg5NTksIDExODk2NSwgMTE4OTcxLCAxMTg5NzgsIAotICAgIDExODk4NCwgMTE4OTkwLCAxMTg5OTYsIDExOTAwMiwgMTE5MDA4LCAxMTkwMTQsIDExOTAyMCwgMTE5MDI1LCAxMTkwMzEsIAotICAgIDExOTAzNywgMTE5MDQzLCAxMTkwNDksIDExOTA1NSwgMTE5MDYxLCAxMTkwNjcsIDExOTA3MywgMTE5MDc5LCAxMTkwODUsIAotICAgIDExOTA5MSwgMTE5MDk3LCAxMTkxMDMsIDExOTEwOSwgMTE5MTE1LCAxMTkxMjEsIDExOTEyNywgMTE5MTM0LCAxMTkxNDAsIAotICAgIDExOTE0NiwgMTE5MTUyLCAxMTkxNTgsIDExOTE2NCwgMTE5MTcwLCAxMTkxNzYsIDExOTE4MywgMTE5MTg5LCAxMTkxOTUsIAotICAgIDExOTIwMSwgMTE5MjA3LCAxMTkyMTMsIDExOTIxOSwgMTE5MjI1LCAxMTkyMzEsIDExOTIzNywgMTE5MjQzLCAxMTkyNDksIAotICAgIDExOTI1NSwgMTE5MjYxLCAxMTkyNjcsIDExOTI3MywgMTE5Mjc5LCAxMTkyODUsIDExOTI5MSwgMTE5Mjk3LCAxMTkzMDMsIAotICAgIDExOTMwOSwgMTE5MzE1LCAxMTkzMjEsIDExOTMyOCwgMTE5MzM0LCAxMTkzNDAsIDExOTM0NiwgMTE5MzUyLCAxMTkzNTgsIAotICAgIDExOTM2NCwgMTE5MzcwLCAxMTkzNzUsIDExOTM4MSwgMTE5Mzg3LCAxMTkzOTMsIDExOTM5OSwgMTE5NDA1LCAxMTk0MTEsIAotICAgIDExOTQxNywgMTE5NDIzLCAxMTk0MjksIDExOTQzNSwgMTE5NDQxLCAxMTk0NDcsIDExOTQ1MywgMTE5NDU5LCAxMTk0NjUsIAotICAgIDExOTQ3MSwgMTE5NDc3LCAxMTk0ODQsIDExOTQ5MCwgMTE5NDk2LCAxMTk1MDIsIDExOTUwOCwgMTE5NTE0LCAxMTk1MjAsIAotICAgIDExOTUyNiwgMTE5NTMzLCAxMTk1MzksIDExOTU0NSwgMTE5NTUxLCAxMTk1NTcsIDExOTU2MywgMTE5NTY5LCAxMTk1NzYsIAotICAgIDExOTU4MywgMTE5NTkwLCAxMTk1OTcsIDExOTYwNCwgMTE5NjExLCAxMTk2MTgsIDExOTYyNSwgMTE5NjMyLCAxMTk2MzksIAotICAgIDExOTY0NiwgMTE5NjUzLCAxMTk2NjAsIDExOTY2NywgMTE5Njc0LCAxMTk2ODEsIDExOTY4OCwgMTE5Njk2LCAxMTk3MDMsIAotICAgIDExOTcxMCwgMTE5NzE3LCAxMTk3MjQsIDExOTczMSwgMTE5NzM4LCAxMTk3NDUsIDExOTc1MSwgMTE5NzU4LCAxMTk3NjUsIAotICAgIDExOTc3MiwgMTE5Nzc5LCAxMTk3ODYsIDExOTc5MywgMTE5ODAwLCAxMTk4MDcsIDExOTgxNCwgMTE5ODIxLCAxMTk4MjgsIAotICAgIDExOTgzNSwgMTE5ODQyLCAxMTk4NDksIDExOTg1NiwgMTE5ODYzLCAxMTk4NzAsIDExOTg3OCwgMTE5ODg1LCAxMTk4OTIsIAotICAgIDExOTg5OSwgMTE5OTA2LCAxMTk5MTMsIDExOTkyMCwgMTE5OTI3LCAxMTk5MzUsIDExOTk0MiwgMTE5OTQ5LCAxMTk5NTYsIAotICAgIDExOTk2MywgMTE5OTcwLCAxMTk5NzcsIDExOTk4MiwgMCwgMCwgMTE5OTg3LCAxMTk5OTIsIDExOTk5NiwgMTIwMDAwLCAKLSAgICAxMjAwMDQsIDEyMDAwOCwgMTIwMDEyLCAxMjAwMTYsIDEyMDAyMCwgMTIwMDI0LCAxMjAwMjgsIDEyMDAzMywgMTIwMDM3LCAKLSAgICAxMjAwNDEsIDEyMDA0NSwgMTIwMDQ5LCAxMjAwNTMsIDEyMDA1NywgMTIwMDYxLCAxMjAwNjUsIDEyMDA2OSwgMTIwMDc0LCAKLSAgICAxMjAwNzgsIDEyMDA4MiwgMTIwMDg2LCAxMjAwOTAsIDEyMDA5NCwgMTIwMDk4LCAxMjAxMDIsIDEyMDEwNiwgMTIwMTEwLCAKLSAgICAxMjAxMTYsIDEyMDEyMSwgMTIwMTI2LCAxMjAxMzEsIDEyMDEzNiwgMTIwMTQxLCAxMjAxNDYsIDEyMDE1MSwgMTIwMTU2LCAKLSAgICAxMjAxNjEsIDEyMDE2NywgMTIwMTcyLCAxMjAxNzcsIDEyMDE4MiwgMTIwMTg3LCAxMjAxOTIsIDEyMDE5NywgMTIwMjAyLCAKLSAgICAxMjAyMDcsIDEyMDIxMiwgMTIwMjE2LCAxMjAyMjAsIDEyMDIyNCwgMCwgMTIwMjI4LCAxMjAyMzIsIDEyMDIzNiwgCi0gICAgMTIwMjQwLCAxMjAyNDQsIDEyMDI0OCwgMTIwMjUyLCAxMjAyNTYsIDEyMDI2MCwgMTIwMjY0LCAxMjAyNjgsIDEyMDI3MiwgCisgICAgOTIxNzcsIDkyMTgxLCA5MjE4NiwgOTIxOTEsIDAsIDkyMTk3LCA5MjIwMiwgMCwgMCwgMCwgMCwgMCwgOTIyMDcsIDkyMjEzLCAKKyAgICA5MjIyMCwgOTIyMjUsIDkyMjMwLCA5MjIzNCwgOTIyMzksIDkyMjQ0LCAwLCA5MjI0OSwgOTIyNTQsIDkyMjU5LCAwLCAKKyAgICA5MjI2NCwgOTIyNjksIDkyMjc0LCA5MjI3OSwgOTIyODQsIDkyMjg5LCA5MjI5NCwgOTIyOTksIDkyMzA0LCA5MjMwOSwgCisgICAgOTIzMTQsIDkyMzE4LCA5MjMyMiwgOTIzMjcsIDkyMzMyLCA5MjMzNywgOTIzNDEsIDkyMzQ1LCA5MjM0OSwgOTIzNTQsIAorICAgIDkyMzU5LCA5MjM2NCwgOTIzNjksIDkyMzczLCA5MjM3OCwgOTIzODIsIDkyMzg3LCAwLCAwLCAwLCAwLCA5MjM5MiwgCisgICAgOTIzOTgsIDkyNDAzLCAwLCAwLCAwLCAwLCA5MjQwOCwgOTI0MTIsIDkyNDE2LCA5MjQyMCwgOTI0MjQsIDkyNDI4LCAKKyAgICA5MjQzMywgOTI0MzgsIDkyNDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MjQ1MCwgOTI0NTYsIDkyNDYzLCA5MjQ2OSwgCisgICAgOTI0NzYsIDkyNDgyLCA5MjQ4OCwgOTI0OTQsIDkyNTAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MjUwNywgOTI1MTUsIAorICAgIDkyNTIzLCA5MjUzMSwgOTI1MzksIDkyNTQ3LCA5MjU1NSwgOTI1NjMsIDkyNTcxLCA5MjU3OSwgOTI1ODcsIDkyNTk1LCAKKyAgICA5MjYwMywgOTI2MTEsIDkyNjE5LCA5MjYyNywgOTI2MzUsIDkyNjQzLCA5MjY1MSwgOTI2NTksIDkyNjY3LCA5MjY3NSwgCisgICAgOTI2ODMsIDkyNjkxLCA5MjY5OSwgOTI3MDcsIDkyNzE1LCA5MjcyMywgOTI3MzEsIDkyNzM5LCA5Mjc0NiwgOTI3NTQsIAorICAgIDkyNzYyLCA5Mjc2NiwgOTI3NzEsIDkyNzc2LCA5Mjc4MSwgOTI3ODYsIDkyNzkxLCA5Mjc5NiwgOTI4MDEsIDkyODA1LCAKKyAgICA5MjgxMCwgOTI4MTQsIDkyODE5LCA5MjgyMywgOTI4MjgsIDkyODMyLCA5MjgzNywgOTI4NDIsIDkyODQ3LCA5Mjg1MiwgCisgICAgOTI4NTcsIDkyODYyLCA5Mjg2NywgOTI4NzIsIDkyODc3LCA5Mjg4MiwgOTI4ODcsIDkyODkyLCA5Mjg5NywgOTI5MDIsIAorICAgIDkyOTA3LCA5MjkxMiwgOTI5MTcsIDkyOTIyLCA5MjkyNywgOTI5MzIsIDkyOTM3LCA5Mjk0MiwgOTI5NDcsIDkyOTUyLCAKKyAgICA5Mjk1NywgOTI5NjIsIDkyOTY3LCA5Mjk3MiwgOTI5NzcsIDkyOTgyLCA5Mjk4NywgOTI5OTIsIDkyOTk3LCA5MzAwMiwgCisgICAgOTMwMDcsIDkzMDEyLCA5MzAxNywgOTMwMjIsIDAsIDAsIDAsIDkzMDI3LCA5MzAzMiwgOTMwNDEsIDkzMDQ5LCA5MzA1OCwgCisgICAgOTMwNjcsIDkzMDc4LCA5MzA4OSwgOTMwOTYsIDkzMTAzLCA5MzExMCwgOTMxMTcsIDkzMTI0LCA5MzEzMSwgOTMxMzgsIAorICAgIDkzMTQ1LCA5MzE1MiwgOTMxNTksIDkzMTY2LCA5MzE3MywgOTMxODAsIDkzMTg3LCA5MzE5NCwgOTMyMDEsIDkzMjA4LCAKKyAgICA5MzIxNSwgOTMyMjIsIDkzMjI5LCA5MzIzNiwgMCwgMCwgOTMyNDMsIDkzMjQ5LCA5MzI1NSwgOTMyNjEsIDkzMjY3LCAKKyAgICA5MzI3NCwgOTMyODEsIDkzMjg5LCA5MzI5NywgOTMzMDQsIDkzMzExLCA5MzMxOCwgOTMzMjUsIDkzMzMyLCA5MzMzOSwgCisgICAgOTMzNDYsIDkzMzUzLCA5MzM2MCwgOTMzNjcsIDkzMzc0LCA5MzM4MSwgOTMzODgsIDkzMzk1LCA5MzQwMiwgOTM0MDksIAorICAgIDkzNDE2LCA5MzQyMywgMCwgMCwgMCwgMCwgMCwgOTM0MzAsIDkzNDM2LCA5MzQ0MiwgOTM0NDgsIDkzNDU0LCA5MzQ2MSwgCisgICAgOTM0NjgsIDkzNDc2LCA5MzQ4NCwgOTM0OTAsIDkzNDk2LCA5MzUwMywgOTM1MDksIDkzNTE1LCA5MzUyMSwgOTM1MjcsIAorICAgIDkzNTM0LCA5MzU0MSwgOTM1NDgsIDkzNTU1LCA5MzU2MiwgOTM1NjksIDkzNTc2LCA5MzU4MywgOTM1OTAsIDkzNTk3LCAKKyAgICA5MzYwNCwgOTM2MTEsIDkzNjE4LCA5MzYyNSwgOTM2MzIsIDkzNjM5LCA5MzY0NiwgOTM2NTMsIDkzNjYwLCA5MzY2NywgCisgICAgOTM2NzQsIDkzNjgxLCA5MzY4OCwgOTM2OTUsIDkzNzAyLCA5MzcwOSwgOTM3MTYsIDkzNzIzLCA5MzczMCwgOTM3MzcsIAorICAgIDkzNzQ0LCA5Mzc1MSwgOTM3NTgsIDkzNzY1LCA5Mzc3MiwgOTM3NzksIDkzNzg2LCA5Mzc5MywgOTM4MDAsIDkzODA3LCAKKyAgICA5MzgxNCwgOTM4MjEsIDkzODI4LCA5MzgzNSwgOTM4NDIsIDkzODQ5LCA5Mzg1NiwgOTM4NjMsIDkzODcwLCA5Mzg3NywgCisgICAgOTM4ODQsIDkzODkxLCA5Mzg5OCwgOTM5MDUsIDkzOTEyLCA5MzkxOSwgOTM5MjYsIDkzOTMzLCA5Mzk0MCwgOTM5NDcsIAorICAgIDkzOTU0LCA5Mzk2MSwgOTM5NjgsIDkzOTc1LCA5Mzk4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTM5ODksIDkzOTkzLCAKKyAgICA5Mzk5NywgOTQwMDEsIDk0MDA1LCA5NDAwOSwgOTQwMTMsIDk0MDE3LCA5NDAyMSwgOTQwMjUsIDk0MDMwLCA5NDAzNSwgCisgICAgOTQwNDAsIDk0MDQ1LCA5NDA1MCwgOTQwNTUsIDk0MDYwLCA5NDA2NSwgOTQwNzAsIDk0MDc2LCA5NDA4MiwgOTQwODgsIAorICAgIDk0MDk1LCA5NDEwMiwgOTQxMDksIDk0MTE2LCA5NDEyMywgOTQxMzAsIDk0MTM3LCA5NDE0NCwgOTQxNTEsIDAsIDk0MTU4LCAKKyAgICA5NDE2MiwgOTQxNjYsIDk0MTcwLCA5NDE3NCwgOTQxNzgsIDk0MTgxLCA5NDE4NSwgOTQxODgsIDk0MTkyLCA5NDE5NSwgCisgICAgOTQxOTksIDk0MjAzLCA5NDIwOCwgOTQyMTIsIDk0MjE3LCA5NDIyMCwgOTQyMjQsIDk0MjI3LCA5NDIzMSwgOTQyMzQsIAorICAgIDk0MjM4LCA5NDI0MiwgOTQyNDYsIDk0MjUwLCA5NDI1NCwgOTQyNTgsIDk0MjYyLCA5NDI2NiwgOTQyNzAsIDk0Mjc0LCAKKyAgICA5NDI3OCwgOTQyODIsIDk0Mjg2LCA5NDI5MCwgOTQyOTQsIDk0Mjk4LCA5NDMwMiwgOTQzMDYsIDk0MzA5LCA5NDMxMiwgCisgICAgOTQzMTYsIDk0MzIwLCA5NDMyNCwgOTQzMjcsIDk0MzMwLCA5NDMzMywgOTQzMzcsIDk0MzQxLCA5NDM0NSwgOTQzNDksIAorICAgIDk0MzUyLCA5NDM1NSwgOTQzNTksIDk0MzY1LCA5NDM3MSwgOTQzNzcsIDk0MzgyLCA5NDM4OSwgOTQzOTMsIDk0Mzk4LCAKKyAgICA5NDQwMiwgOTQ0MDcsIDk0NDEyLCA5NDQxOCwgOTQ0MjMsIDk0NDI5LCA5NDQzMywgOTQ0MzgsIDk0NDQyLCA5NDQ0NywgCisgICAgOTQ0NTAsIDk0NDUzLCA5NDQ1NywgOTQ0NjIsIDk0NDY4LCA5NDQ3MywgOTQ0NzksIDAsIDAsIDAsIDAsIDk0NDg0LCAKKyAgICA5NDQ4NywgOTQ0OTAsIDk0NDkzLCA5NDQ5NiwgOTQ0OTksIDk0NTAyLCA5NDUwNSwgOTQ1MDgsIDk0NTExLCA5NDUxNSwgCisgICAgOTQ1MTksIDk0NTIzLCA5NDUyNywgOTQ1MzEsIDk0NTM1LCA5NDUzOSwgOTQ1NDMsIDk0NTQ3LCA5NDU1MiwgOTQ1NTcsIAorICAgIDk0NTYxLCA5NDU2NCwgOTQ1NjcsIDk0NTcwLCA5NDU3MywgOTQ1NzYsIDk0NTc5LCA5NDU4MiwgOTQ1ODUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0NTg4LCA5NDU5MywgOTQ1OTgsIDk0NjAzLCA5NDYwNywgCisgICAgOTQ2MTIsIDk0NjE2LCA5NDYyMSwgOTQ2MjUsIDk0NjMwLCA5NDYzNCwgOTQ2MzksIDk0NjQzLCA5NDY0OCwgOTQ2NTIsIAorICAgIDk0NjU3LCA5NDY2MiwgOTQ2NjcsIDk0NjcyLCA5NDY3NywgOTQ2ODIsIDk0Njg3LCA5NDY5MiwgOTQ2OTcsIDk0NzAyLCAKKyAgICA5NDcwNywgOTQ3MTIsIDk0NzE3LCA5NDcyMiwgOTQ3MjcsIDk0NzMyLCA5NDczNywgOTQ3NDIsIDk0NzQ3LCA5NDc1MiwgCisgICAgOTQ3NTYsIDk0NzYwLCA5NDc2NSwgOTQ3NzAsIDk0Nzc1LCA5NDc3OSwgOTQ3ODMsIDk0Nzg3LCA5NDc5MiwgOTQ3OTcsIAorICAgIDk0ODAyLCA5NDgwNywgOTQ4MTEsIDk0ODE1LCA5NDgyMSwgOTQ4MjYsIDk0ODMyLCA5NDgzNywgOTQ4NDMsIDk0ODQ4LCAKKyAgICA5NDg1NCwgOTQ4NTksIDk0ODY1LCA5NDg3MCwgOTQ4NzUsIDk0ODgwLCA5NDg4NSwgOTQ4ODksIDk0ODk0LCA5NDkwMCwgCisgICAgOTQ5MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0OTA5LCA5NDkxNiwgOTQ5MjMsIAorICAgIDk0OTMwLCA5NDkzNywgOTQ5NDQsIDk0OTUxLCA5NDk1OCwgOTQ5NjUsIDk0OTcyLCA5NDk3OSwgOTQ5ODYsIDk0OTkzLCAKKyAgICA5NTAwMCwgOTUwMDcsIDk1MDE0LCA5NTAyMSwgOTUwMjgsIDk1MDM1LCA5NTA0MiwgOTUwNDksIDk1MDU2LCA5NTA2MywgCisgICAgOTUwNzAsIDk1MDc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTA4NCwgOTUwOTEsIDk1MDk3LCA5NTEwMywgOTUxMDksIAorICAgIDk1MTE1LCA5NTEyMSwgOTUxMjcsIDk1MTMzLCA5NTEzOSwgMCwgMCwgMCwgMCwgMCwgMCwgOTUxNDUsIDk1MTUwLCA5NTE1NSwgCisgICAgOTUxNjAsIDk1MTY1LCA5NTE2OSwgOTUxNzMsIDk1MTc3LCA5NTE4MiwgOTUxODcsIDk1MTkyLCA5NTE5NywgOTUyMDIsIAorICAgIDk1MjA3LCA5NTIxMiwgOTUyMTcsIDk1MjIyLCA5NTIyNywgOTUyMzIsIDk1MjM3LCA5NTI0MiwgOTUyNDcsIDk1MjUyLCAKKyAgICA5NTI1NywgOTUyNjIsIDk1MjY3LCA5NTI3MiwgOTUyNzcsIDk1MjgyLCA5NTI4NywgOTUyOTIsIDk1Mjk3LCA5NTMwMiwgCisgICAgOTUzMDcsIDk1MzEyLCA5NTMxNywgOTUzMjIsIDk1MzI3LCA5NTMzMiwgOTUzMzcsIDk1MzQyLCA5NTM0NywgOTUzNTMsIAorICAgIDk1MzU4LCA5NTM2NCwgOTUzNjksIDk1Mzc1LCA5NTM4MCwgOTUzODYsIDk1MzkyLCA5NTM5NiwgOTU0MDEsIDk1NDA1LCAwLCAKKyAgICA5NTQwOSwgOTU0MTQsIDk1NDE4LCA5NTQyMiwgOTU0MjYsIDk1NDMwLCA5NTQzNCwgOTU0MzgsIDk1NDQyLCA5NTQ0NiwgCisgICAgOTU0NTAsIDk1NDU1LCA5NTQ1OSwgOTU0NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NDY5LCAKKyAgICA5NTQ3MywgOTU0NzcsIDk1NDgxLCA5NTQ4NCwgOTU0ODgsIDk1NDkxLCA5NTQ5NSwgOTU0OTgsIDk1NTAyLCA5NTUwNiwgCisgICAgOTU1MTEsIDk1NTE1LCA5NTUyMCwgOTU1MjMsIDk1NTI3LCA5NTUzMCwgOTU1MzQsIDk1NTM3LCA5NTU0MSwgOTU1NDUsIAorICAgIDk1NTQ5LCA5NTU1MywgOTU1NTcsIDk1NTYxLCA5NTU2NSwgOTU1NjksIDk1NTczLCA5NTU3NywgOTU1ODEsIDk1NTg1LCAKKyAgICA5NTU4OSwgOTU1OTMsIDk1NTk3LCA5NTYwMSwgOTU2MDUsIDk1NjA5LCA5NTYxMiwgOTU2MTUsIDk1NjE5LCA5NTYyMywgCisgICAgOTU2MjcsIDk1NjMwLCA5NTYzMywgOTU2MzYsIDk1NjQwLCA5NTY0NCwgOTU2NDgsIDk1NjUyLCA5NTY1NiwgOTU2NTksIAorICAgIDk1NjYyLCA5NTY2NywgOTU2NzEsIDk1Njc2LCA5NTY4MCwgOTU2ODUsIDk1NjkwLCA5NTY5NiwgOTU3MDEsIDk1NzA3LCAKKyAgICA5NTcxMSwgOTU3MTYsIDk1NzIwLCA5NTcyNSwgOTU3MjksIDk1NzMzLCA5NTczNywgOTU3NDEsIDk1NzQ0LCA5NTc0NywgCisgICAgOTU3NTEsIDk1NzU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTc1OCwgOTU3NjIsIDk1NzY1LCA5NTc2OCwgOTU3NzEsIAorICAgIDk1Nzc0LCA5NTc3NywgOTU3ODAsIDk1NzgzLCA5NTc4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOTU3ODksIDk1NzkzLCA5NTc5OCwgOTU4MDIsIDk1ODA3LCA5NTgxMSwgOTU4MTYsIDk1ODIwLCA5NTgyNSwgOTU4MjksIAorICAgIDk1ODM0LCA5NTgzOCwgOTU4NDMsIDk1ODQ4LCA5NTg1MywgOTU4NTgsIDk1ODYzLCA5NTg2OCwgOTU4NzMsIDk1ODc4LCAKKyAgICA5NTg4MywgOTU4ODgsIDk1ODkzLCA5NTg5OCwgOTU5MDMsIDk1OTA4LCA5NTkxMywgOTU5MTgsIDk1OTIzLCA5NTkyOCwgCisgICAgOTU5MzIsIDk1OTM2LCA5NTk0MSwgOTU5NDYsIDk1OTUxLCA5NTk1NSwgOTU5NTksIDk1OTYzLCA5NTk2OCwgOTU5NzMsIAorICAgIDk1OTc4LCA5NTk4MiwgOTU5ODYsIDk1OTkxLCA5NTk5NiwgOTYwMDEsIDk2MDA3LCA5NjAxMiwgOTYwMTgsIDk2MDIzLCAKKyAgICA5NjAyOSwgOTYwMzQsIDk2MDQwLCA5NjA0NSwgOTYwNTEsIDk2MDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjA2MSwgCisgICAgOTYwNjYsIDk2MDcwLCA5NjA3NCwgOTYwNzgsIDk2MDgyLCA5NjA4NiwgOTYwOTAsIDk2MDk0LCA5NjA5OCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOTYxMDIsIDk2MTA1LCA5NjExMCwgOTYxMTYsIDk2MTI0LCA5NjEyOSwgOTYxMzUsIDk2MTQzLCA5NjE0OSwgCisgICAgOTYxNTUsIDk2MTU5LCA5NjE2MywgOTYxNzAsIDk2MTc5LCA5NjE4NiwgOTYxOTUsIDk2MjAxLCA5NjIxMCwgOTYyMTcsIAorICAgIDk2MjI0LCA5NjIzMSwgOTYyNDEsIDk2MjQ3LCA5NjI1MSwgOTYyNTgsIDk2MjY3LCA5NjI3NywgOTYyODQsIDk2MjkxLCAKKyAgICA5NjI5NSwgOTYyOTksIDk2MzA2LCA5NjMxNiwgOTYzMjAsIDk2MzI3LCA5NjMzNCwgOTYzNDEsIDk2MzQ3LCA5NjM1NCwgCisgICAgOTYzNjEsIDk2MzY4LCA5NjM3NSwgOTYzNzksIDk2MzgzLCA5NjM4NywgOTYzOTQsIDk2Mzk4LCA5NjQwNSwgOTY0MTIsIAorICAgIDk2NDI2LCA5NjQzNSwgOTY0MzksIDk2NDQzLCA5NjQ0NywgOTY0NTQsIDk2NDU4LCA5NjQ2MiwgOTY0NjYsIDk2NDc0LCAKKyAgICA5NjQ4MiwgOTY1MDEsIDk2NTExLCA5NjUzMSwgOTY1MzUsIDk2NTM5LCA5NjU0MywgOTY1NDcsIDk2NTUxLCA5NjU1NSwgCisgICAgOTY1NTksIDk2NTY2LCA5NjU3MCwgOTY1NzMsIDk2NTc3LCA5NjU4MSwgOTY1ODcsIDk2NTk0LCA5NjYwMywgOTY2MDcsIAorICAgIDk2NjE2LCA5NjYyNSwgOTY2MzMsIDk2NjM3LCA5NjY0NCwgOTY2NDgsIDk2NjUyLCA5NjY1NiwgOTY2NjAsIDk2NjcxLCAKKyAgICA5NjY4MCwgOTY2ODksIDk2Njk4LCA5NjcwNywgOTY3MTksIDk2NzI4LCA5NjczNywgOTY3NDYsIDk2NzU0LCA5Njc2MywgCisgICAgOTY3NzUsIDk2Nzg0LCA5Njc5MywgOTY4MDIsIDk2ODE0LCA5NjgyMywgOTY4MzIsIDk2ODQ0LCA5Njg1MywgOTY4NjIsIAorICAgIDk2ODc0LCA5Njg4MywgOTY4ODcsIDk2ODkxLCA5Njg5NSwgOTY4OTksIDk2OTAzLCA5NjkwNywgOTY5MTEsIDk2OTE4LCAKKyAgICA5NjkyMiwgOTY5MjYsIDk2OTM3LCA5Njk0MSwgOTY5NDUsIDk2OTUyLCA5Njk1OCwgOTY5NjQsIDk2OTY4LCA5Njk3NSwgCisgICAgOTY5NzksIDk2OTgzLCA5Njk4NywgOTY5OTEsIDk2OTk1LCA5Njk5OSwgOTcwMDUsIDk3MDEzLCA5NzAxNywgOTcwMjEsIAorICAgIDk3MDI0LCA5NzAzMCwgOTcwNDAsIDk3MDQ0LCA5NzA1NiwgOTcwNjMsIDk3MDcwLCA5NzA3NywgOTcwODQsIDk3MDkwLCAKKyAgICA5NzA5NCwgOTcwOTgsIDk3MTAyLCA5NzEwNiwgOTcxMTMsIDk3MTIyLCA5NzEyOSwgOTcxMzcsIDk3MTQ1LCA5NzE1MSwgCisgICAgOTcxNTUsIDk3MTU5LCA5NzE2MywgOTcxNjcsIDk3MTczLCA5NzE4MiwgOTcxOTQsIDk3MjAxLCA5NzIwOCwgOTcyMTcsIAorICAgIDk3MjI4LCA5NzIzNCwgOTcyNDMsIDk3MjUyLCA5NzI1OSwgOTcyNjgsIDk3Mjc1LCA5NzI4MiwgOTcyOTIsIDk3Mjk5LCAKKyAgICA5NzMwNiwgOTczMTMsIDk3MzIwLCA5NzMyNCwgOTczMzAsIDk3MzM0LCA5NzM0NSwgOTczNTMsIDk3MzYyLCA5NzM3NCwgCisgICAgOTczODEsIDk3Mzg4LCA5NzM5OCwgOTc0MDUsIDk3NDE0LCA5NzQyMSwgOTc0MzAsIDk3NDM3LCA5NzQ0NCwgOTc0NTQsIAorICAgIDk3NDYxLCA5NzQ2OCwgOTc0NzgsIDk3NDg1LCA5NzQ5NywgOTc1MDYsIDk3NTEzLCA5NzUyMCwgOTc1MjcsIDk3NTM2LCAKKyAgICA5NzU0NiwgOTc1NTksIDk3NTY2LCA5NzU3NiwgOTc1ODYsIDk3NTkzLCA5NzYwMiwgOTc2MTUsIDk3NjIyLCA5NzYyOSwgCisgICAgOTc2MzYsIDk3NjQ2LCA5NzY1NiwgOTc2NjMsIDk3NjczLCA5NzY4MCwgOTc2ODcsIDk3Njk3LCA5NzcwMywgOTc3MTAsIAorICAgIDk3NzE3LCA5NzcyNCwgOTc3MzQsIDk3NzQxLCA5Nzc0OCwgOTc3NTUsIDk3NzYxLCA5Nzc2OCwgOTc3NzgsIDk3Nzg1LCAKKyAgICA5Nzc4OSwgOTc3OTcsIDk3ODAxLCA5NzgxMywgOTc4MTcsIDk3ODMxLCA5NzgzNSwgOTc4MzksIDk3ODQzLCA5Nzg0NywgCisgICAgOTc4NTMsIDk3ODYwLCA5Nzg2OCwgOTc4NzIsIDk3ODc2LCA5Nzg4MCwgOTc4ODQsIDk3ODkxLCA5Nzg5NSwgOTc5MDEsIAorICAgIDk3OTA3LCA5NzkxNSwgOTc5MTksIDk3OTI2LCA5NzkzNCwgOTc5MzgsIDk3OTQyLCA5Nzk0OCwgOTc5NTIsIDk3OTYxLCAKKyAgICA5Nzk3MCwgOTc5NzcsIDk3OTg3LCA5Nzk5MywgOTc5OTcsIDk4MDAxLCA5ODAwOSwgOTgwMTYsIDk4MDIzLCA5ODAyOSwgCisgICAgOTgwMzMsIDk4MDQxLCA5ODA0NSwgOTgwNTIsIDk4MDY0LCA5ODA3MSwgOTgwODEsIDk4MDg3LCA5ODA5MSwgOTgxMDAsIAorICAgIDk4MTA3LCA5ODExNiwgOTgxMjAsIDk4MTI0LCA5ODEzMSwgOTgxMzUsIDk4MTM5LCA5ODE0MywgOTgxNDcsIDk4MTUwLCAKKyAgICA5ODE1NiwgOTgxNjIsIDk4MTY2LCA5ODE3MCwgOTgxNzcsIDk4MTg0LCA5ODE5MSwgOTgxOTgsIDk4MjA1LCA5ODIxMiwgCisgICAgOTgyMTksIDk4MjI2LCA5ODIzMiwgOTgyMzYsIDk4MjQwLCA5ODI0NywgOTgyNTQsIDk4MjYxLCA5ODI2OCwgOTgyNzUsIAorICAgIDk4Mjc5LCA5ODI4MiwgOTgyODcsIDk4MjkxLCA5ODI5NSwgOTgzMDQsIDk4MzEzLCA5ODMxNywgOTgzMjEsIDk4MzI3LCAKKyAgICA5ODMzMywgOTgzNTAsIDk4MzU2LCA5ODM2MCwgOTgzNjksIDk4MzczLCA5ODM3NywgOTgzODQsIDk4MzkyLCA5ODQwMCwgCisgICAgOTg0MDYsIDk4NDEwLCA5ODQxNCwgOTg0MTgsIDk4NDIyLCA5ODQyNSwgOTg0MzEsIDk4NDM4LCA5ODQ0OCwgOTg0NTUsIAorICAgIDk4NDYyLCA5ODQ2OSwgOTg0NzUsIDk4NDgyLCA5ODQ4OSwgOTg0OTYsIDk4NTAzLCA5ODUxMCwgOTg1MTksIDk4NTI2LCAKKyAgICA5ODUzOCwgOTg1NDUsIDk4NTUyLCA5ODU2MiwgOTg1NzMsIDk4NTgwLCA5ODU4NywgOTg1OTQsIDk4NjAxLCA5ODYwOCwgCisgICAgOTg2MTUsIDk4NjIyLCA5ODYyOSwgOTg2MzYsIDk4NjQzLCA5ODY1MywgOTg2NjMsIDk4NjczLCA5ODY4MCwgOTg2OTAsIAorICAgIDk4Njk3LCA5ODcwNCwgOTg3MTEsIDk4NzE4LCA5ODcyNCwgOTg3MzEsIDk4NzM4LCA5ODc0NSwgOTg3NTIsIDk4NzU5LCAKKyAgICA5ODc2NiwgOTg3NzMsIDk4NzgwLCA5ODc4NiwgOTg3OTMsIDk4ODAwLCA5ODgwOSwgOTg4MTYsIDk4ODIzLCA5ODgyNywgCisgICAgOTg4MzUsIDk4ODM5LCA5ODg0MywgOTg4NDcsIDk4ODUxLCA5ODg1NSwgOTg4NjIsIDk4ODY2LCA5ODg3NSwgOTg4NzksIAorICAgIDk4ODg2LCA5ODg5NCwgOTg4OTgsIDk4OTAyLCA5ODkwNiwgOTg5MTksIDk4OTM1LCA5ODkzOSwgOTg5NDMsIDk4OTUwLCAKKyAgICA5ODk1NiwgOTg5NjMsIDk4OTY3LCA5ODk3MSwgOTg5NzUsIDk4OTc5LCA5ODk4MywgOTg5OTAsIDk4OTk0LCA5OTAxMiwgCisgICAgOTkwMTYsIDk5MDIwLCA5OTAyNywgOTkwMzEsIDk5MDM1LCA5OTA0MSwgOTkwNDUsIDk5MDQ5LCA5OTA1NywgOTkwNjEsIAorICAgIDk5MDY1LCA5OTA2OSwgOTkwNzMsIDk5MDc5LCA5OTA5MCwgOTkwOTksIDk5MTA4LCA5OTExNSwgOTkxMjIsIDk5MTMzLCAKKyAgICA5OTE0MCwgOTkxNDcsIDk5MTU0LCA5OTE2MSwgOTkxNjgsIDk5MTc1LCA5OTE4MiwgOTkxOTIsIDk5MTk4LCA5OTIwNSwgCisgICAgOTkyMTUsIDk5MjI0LCA5OTIzMSwgOTkyNDAsIDk5MjUwLCA5OTI1NywgOTkyNjQsIDk5MjcxLCA5OTI3OCwgOTkyOTAsIAorICAgIDk5Mjk3LCA5OTMwNCwgOTkzMTEsIDk5MzE4LCA5OTMyNSwgOTkzMzUsIDk5MzQyLCA5OTM0OSwgOTkzNTksIDk5MzcyLCAKKyAgICA5OTM4NCwgOTkzOTEsIDk5NDAxLCA5OTQwOCwgOTk0MTUsIDk5NDIyLCA5OTQzNiwgOTk0NDIsIDk5NDUwLCA5OTQ2MCwgCisgICAgOTk0NzAsIDk5NDc3LCA5OTQ4NCwgOTk0OTAsIDk5NDk0LCA5OTUwMSwgOTk1MTEsIDk5NTE3LCA5OTUzMCwgOTk1MzQsIAorICAgIDk5NTM4LCA5OTU0NSwgOTk1NDksIDk5NTU2LCA5OTU2NiwgOTk1NzAsIDk5NTc0LCA5OTU3OCwgOTk1ODIsIDk5NTg2LCAKKyAgICA5OTU5MywgOTk1OTcsIDk5NjA0LCA5OTYxMSwgOTk2MTgsIDk5NjI3LCA5OTYzNiwgOTk2NDYsIDk5NjUzLCA5OTY2MCwgCisgICAgOTk2NjcsIDk5Njc3LCA5OTY4NCwgOTk2OTQsIDk5NzAxLCA5OTcxMSwgOTk3MTgsIDk5NzI1LCA5OTczNSwgOTk3NDUsIAorICAgIDk5NzUyLCA5OTc1OCwgOTk3NjYsIDk5Nzc0LCA5OTc4MCwgOTk3ODYsIDk5NzkwLCA5OTc5NCwgOTk4MDEsIDk5ODA5LCAKKyAgICA5OTgxNSwgOTk4MTksIDk5ODIzLCA5OTgyNywgOTk4MzQsIDk5ODQ2LCA5OTg0OSwgOTk4NTYsIDk5ODYyLCA5OTg2NiwgCisgICAgOTk4NzAsIDk5ODc0LCA5OTg3OCwgOTk4ODIsIDk5ODg2LCA5OTg5MCwgOTk4OTQsIDk5ODk4LCA5OTkwMiwgOTk5MDksIAorICAgIDk5OTEzLCA5OTkxOSwgOTk5MjMsIDk5OTI3LCA5OTkzMSwgOTk5MzcsIDk5OTQ0LCA5OTk1MSwgOTk5NTgsIDk5OTY5LCAKKyAgICA5OTk3NywgOTk5ODEsIDk5OTg3LCA5OTk5NiwgMTAwMDAzLCAxMDAwMDksIDEwMDAxMiwgMTAwMDE2LCAxMDAwMjAsIAorICAgIDEwMDAyNiwgMTAwMDM1LCAxMDAwNDMsIDEwMDA0NywgMTAwMDUzLCAxMDAwNTcsIDEwMDA2MSwgMTAwMDY1LCAxMDAwNzEsIAorICAgIDEwMDA3OCwgMTAwMDg0LCAxMDAwODgsIDEwMDA5NCwgMTAwMDk4LCAxMDAxMDIsIDEwMDExMSwgMTAwMTIzLCAxMDAxMjcsIAorICAgIDEwMDEzNCwgMTAwMTQxLCAxMDAxNTEsIDEwMDE1OCwgMTAwMTcwLCAxMDAxNzcsIDEwMDE4NCwgMTAwMTkxLCAxMDAyMDIsIAorICAgIDEwMDIxMiwgMTAwMjI1LCAxMDAyMzUsIDEwMDI0MiwgMTAwMjQ2LCAxMDAyNTAsIDEwMDI1NCwgMTAwMjU4LCAxMDAyNjcsIAorICAgIDEwMDI3NiwgMTAwMjg1LCAxMDAzMDIsIDEwMDMxMSwgMTAwMzE3LCAxMDAzMjQsIDEwMDMzMiwgMTAwMzQ1LCAxMDAzNDksIAorICAgIDEwMDM1OCwgMTAwMzY3LCAxMDAzNzYsIDEwMDM4NSwgMTAwMzk2LCAxMDA0MDUsIDEwMDQxNCwgMTAwNDIzLCAxMDA0MzIsIAorICAgIDEwMDQ0MSwgMTAwNDUwLCAxMDA0NjAsIDEwMDQ2MywgMTAwNDY3LCAxMDA0NzEsIDEwMDQ3NSwgMTAwNDc5LCAxMDA0ODMsIAorICAgIDEwMDQ4OSwgMTAwNDk2LCAxMDA1MDMsIDEwMDUxMCwgMTAwNTE2LCAxMDA1MjIsIDEwMDUyOSwgMTAwNTM1LCAxMDA1NDIsIAorICAgIDEwMDU1MCwgMTAwNTU0LCAxMDA1NjEsIDEwMDU2OCwgMTAwNTc1LCAxMDA1ODMsIDEwMDU4NiwgMTAwNTkwLCAxMDA1OTQsIAorICAgIDEwMDU5OCwgMTAwNjAxLCAxMDA2MDcsIDEwMDYxMSwgMTAwNjE3LCAxMDA2MjQsIDEwMDYzMSwgMTAwNjM3LCAxMDA2NDQsIAorICAgIDEwMDY1MSwgMTAwNjU4LCAxMDA2NjUsIDEwMDY3MiwgMTAwNjc5LCAxMDA2ODYsIDEwMDY5MywgMTAwNzAwLCAxMDA3MDcsIAorICAgIDEwMDcxNCwgMTAwNzIxLCAxMDA3MjgsIDEwMDczNSwgMTAwNzQxLCAxMDA3NDUsIDEwMDc1NCwgMTAwNzU4LCAxMDA3NjIsIAorICAgIDEwMDc2NiwgMTAwNzcwLCAxMDA3NzYsIDEwMDc4MywgMTAwNzkwLCAxMDA3OTcsIDEwMDgwNCwgMTAwODExLCAxMDA4MTcsIAorICAgIDEwMDgyNSwgMTAwODI5LCAxMDA4MzMsIDEwMDgzNywgMTAwODQxLCAxMDA4NDcsIDEwMDg2NCwgMTAwODgxLCAxMDA4ODUsIAorICAgIDEwMDg4OSwgMTAwODkzLCAxMDA4OTcsIDEwMDkwMSwgMTAwOTA1LCAxMDA5MTEsIDEwMDkxOCwgMTAwOTIyLCAxMDA5MjgsIAorICAgIDEwMDkzNSwgMTAwOTQyLCAxMDA5NDksIDEwMDk1NiwgMTAwOTYzLCAxMDA5NzIsIDEwMDk3OSwgMTAwOTg2LCAxMDA5OTMsIAorICAgIDEwMTAwMCwgMTAxMDA0LCAxMDEwMDgsIDEwMTAxNCwgMTAxMDI2LCAxMDEwMzAsIDEwMTAzNCwgMTAxMDQzLCAxMDEwNDcsIAorICAgIDEwMTA1MSwgMTAxMDU1LCAxMDEwNjEsIDEwMTA2NSwgMTAxMDY5LCAxMDEwNzgsIDEwMTA4MiwgMTAxMDg2LCAxMDEwOTAsIAorICAgIDEwMTA5NywgMTAxMTAxLCAxMDExMDUsIDEwMTEwOSwgMTAxMTEzLCAxMDExMTcsIDEwMTEyMSwgMTAxMTI1LCAxMDExMjksIAorICAgIDEwMTEzNSwgMTAxMTQyLCAxMDExNDksIDEwMTE1NSwgMTAxMTU5LCAxMDExNzYsIDEwMTE4MiwgMTAxMTg2LCAxMDExOTIsIAorICAgIDEwMTE5OCwgMTAxMjA0LCAxMDEyMTAsIDEwMTIxNiwgMTAxMjIyLCAxMDEyMjYsIDEwMTIzMCwgMTAxMjM0LCAxMDEyNDAsIAorICAgIDEwMTI0NCwgMTAxMjUwLCAxMDEyNTQsIDEwMTI1OCwgMTAxMjY1LCAxMDEyNzIsIDEwMTI4OSwgMTAxMjkzLCAxMDEyOTcsIAorICAgIDEwMTMwMSwgMTAxMzA1LCAxMDEzMDksIDEwMTMyMSwgMTAxMzI0LCAxMDEzMjksIDEwMTMzNCwgMTAxMzQ5LCAxMDEzNTksIAorICAgIDEwMTM3MSwgMTAxMzc1LCAxMDEzNzksIDEwMTM4MywgMTAxMzg5LCAxMDEzOTYsIDEwMTQwMywgMTAxNDEzLCAxMDE0MjUsIAorICAgIDEwMTQzMSwgMTAxNDM3LCAxMDE0NDYsIDEwMTQ1MCwgMTAxNDU0LCAxMDE0NjEsIDEwMTQ3MSwgMTAxNDc4LCAxMDE0ODQsIAorICAgIDEwMTQ4OCwgMTAxNDkyLCAxMDE0OTksIDEwMTUwNSwgMTAxNTA5LCAxMDE1MTUsIDEwMTUxOSwgMTAxNTI3LCAxMDE1MzMsIAorICAgIDEwMTUzNywgMTAxNTQ1LCAxMDE1NTMsIDEwMTU2MCwgMTAxNTY2LCAxMDE1NzMsIDEwMTU4MCwgMTAxNTkwLCAxMDE2MDAsIAorICAgIDEwMTYwNCwgMTAxNjA4LCAxMDE2MTIsIDEwMTYxNiwgMTAxNjIyLCAxMDE2MjksIDEwMTYzNSwgMTAxNjQyLCAxMDE2NDksIAorICAgIDEwMTY1NiwgMTAxNjY1LCAxMDE2NzIsIDEwMTY3OSwgMTAxNjg1LCAxMDE2OTIsIDEwMTY5OSwgMTAxNzA2LCAxMDE3MTMsIAorICAgIDEwMTcyMCwgMTAxNzI3LCAxMDE3MzMsIDEwMTc0MCwgMTAxNzQ3LCAxMDE3NTQsIDEwMTc2MywgMTAxNzcwLCAxMDE3NzcsIAorICAgIDEwMTc4MSwgMTAxNzg3LCAxMDE3OTEsIDEwMTc5NywgMTAxODA0LCAxMDE4MTEsIDEwMTgxOCwgMTAxODIyLCAxMDE4MjYsIAorICAgIDEwMTgzMCwgMTAxODM0LCAxMDE4MzgsIDEwMTg0NSwgMTAxODQ5LCAxMDE4NTMsIDEwMTg1OSwgMTAxODY3LCAxMDE4NzEsIAorICAgIDEwMTg3NSwgMTAxODc5LCAxMDE4ODMsIDEwMTg5MCwgMTAxODk0LCAxMDE4OTgsIDEwMTkwNiwgMTAxOTEwLCAxMDE5MTQsIAorICAgIDEwMTkxOCwgMTAxOTIyLCAxMDE5MjgsIDEwMTkzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTAxOTM2LCAxMDE5NDIsIDEwMTk0OCwgMTAxOTU1LCAxMDE5NjIsIDEwMTk2OSwgMTAxOTc2LCAxMDE5ODMsIAorICAgIDEwMTk5MCwgMTAxOTk2LCAxMDIwMDMsIDEwMjAxMCwgMTAyMDE3LCAxMDIwMjQsIDEwMjAzMSwgMTAyMDM4LCAxMDIwNDQsIAorICAgIDEwMjA1MCwgMTAyMDU2LCAxMDIwNjIsIDEwMjA2OCwgMTAyMDc0LCAxMDIwODAsIDEwMjA4NiwgMTAyMDkyLCAxMDIwOTksIAorICAgIDEwMjEwNiwgMTAyMTEzLCAxMDIxMjAsIDEwMjEyNywgMTAyMTM0LCAxMDIxNDAsIDEwMjE0NiwgMTAyMTUyLCAxMDIxNTksIAorICAgIDEwMjE2NiwgMTAyMTcyLCAxMDIxNzgsIDEwMjE4NywgMTAyMTk0LCAxMDIyMDEsIDEwMjIwOCwgMTAyMjE1LCAxMDIyMjIsIAorICAgIDEwMjIyOSwgMTAyMjM1LCAxMDIyNDEsIDEwMjI0NywgMTAyMjU2LCAxMDIyNjMsIDEwMjI3MCwgMTAyMjgxLCAxMDIyOTIsIAorICAgIDEwMjI5OCwgMTAyMzA0LCAxMDIzMTAsIDEwMjMxOSwgMTAyMzI2LCAxMDIzMzMsIDEwMjM0MywgMTAyMzUzLCAxMDIzNjQsIAorICAgIDEwMjM3NSwgMTAyMzg3LCAxMDI0MDAsIDEwMjQxMSwgMTAyNDIyLCAxMDI0MzQsIDEwMjQ0NywgMTAyNDU4LCAxMDI0NjksIAorICAgIDEwMjQ4MCwgMTAyNDkxLCAxMDI1MDIsIDEwMjUxNCwgMTAyNTIyLCAxMDI1MzAsIDEwMjUzOSwgMTAyNTQ4LCAxMDI1NTcsIAorICAgIDEwMjU2MywgMTAyNTY5LCAxMDI1NzUsIDEwMjU4MiwgMTAyNTkyLCAxMDI1OTksIDEwMjYwOSwgMTAyNjE0LCAxMDI2MTksIAorICAgIDEwMjYyNSwgMTAyNjMxLCAxMDI2MzksIDEwMjY0NywgMTAyNjU2LCAxMDI2NjcsIDEwMjY3OCwgMTAyNjg2LCAxMDI2OTQsIAorICAgIDEwMjcwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzEyLCAxMDI3MjMsIDEwMjczMCwgCisgICAgMTAyNzM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDI3NDYsIDEwMjc1MCwgMTAyNzU0LCAKKyAgICAxMDI3NTgsIDEwMjc2MiwgMTAyNzY2LCAxMDI3NzAsIDEwMjc3NCwgMTAyNzc4LCAxMDI3ODIsIDEwMjc4NiwgMTAyNzkwLCAKKyAgICAxMDI3OTQsIDEwMjc5OCwgMTAyODAyLCAxMDI4MDYsIDEwMjgxMCwgMTAyODE0LCAxMDI4MTgsIDEwMjgyMiwgMTAyODI2LCAKKyAgICAxMDI4MzAsIDEwMjgzNCwgMTAyODM4LCAxMDI4NDIsIDEwMjg0NiwgMTAyODUwLCAxMDI4NTQsIDEwMjg1OCwgMTAyODYyLCAKKyAgICAxMDI4NjYsIDEwMjg3MCwgMTAyODc0LCAxMDI4NzgsIDEwMjg4MiwgMTAyODg2LCAxMDI4OTAsIDEwMjg5NCwgMTAyODk4LCAKKyAgICAxMDI5MDIsIDEwMjkwNiwgMTAyOTEwLCAxMDI5MTQsIDEwMjkxOCwgMTAyOTIyLCAxMDI5MjYsIDEwMjkzMCwgMTAyOTM0LCAKKyAgICAxMDI5MzgsIDEwMjk0MiwgMTAyOTQ2LCAxMDI5NTAsIDEwMjk1NCwgMTAyOTU4LCAxMDI5NjIsIDEwMjk2NiwgMTAyOTcwLCAKKyAgICAxMDI5NzQsIDEwMjk3OCwgMTAyOTgyLCAxMDI5ODYsIDEwMjk5MCwgMTAyOTk0LCAxMDI5OTgsIDEwMzAwMiwgMTAzMDA2LCAKKyAgICAxMDMwMTAsIDEwMzAxNCwgMTAzMDE4LCAxMDMwMjIsIDEwMzAyNiwgMTAzMDMwLCAxMDMwMzQsIDEwMzAzOCwgMTAzMDQyLCAKKyAgICAxMDMwNDYsIDEwMzA1MCwgMTAzMDU0LCAxMDMwNTgsIDEwMzA2MiwgMTAzMDY2LCAxMDMwNzAsIDEwMzA3NCwgMTAzMDc4LCAKKyAgICAxMDMwODIsIDEwMzA4NiwgMTAzMDkwLCAxMDMwOTQsIDEwMzA5OCwgMTAzMTAyLCAxMDMxMDYsIDEwMzExMCwgMTAzMTE0LCAKKyAgICAxMDMxMTgsIDEwMzEyMiwgMTAzMTI2LCAxMDMxMzAsIDEwMzEzNCwgMTAzMTM4LCAxMDMxNDIsIDEwMzE0NiwgMTAzMTUwLCAKKyAgICAxMDMxNTQsIDEwMzE1OCwgMTAzMTYyLCAxMDMxNjYsIDEwMzE3MCwgMTAzMTc0LCAxMDMxNzgsIDEwMzE4MiwgMTAzMTg2LCAKKyAgICAxMDMxOTAsIDEwMzE5NCwgMTAzMTk4LCAxMDMyMDIsIDEwMzIwNiwgMTAzMjEwLCAxMDMyMTQsIDEwMzIxOCwgMTAzMjIyLCAKKyAgICAxMDMyMjYsIDEwMzIzMCwgMTAzMjM0LCAxMDMyMzgsIDEwMzI0MiwgMTAzMjQ2LCAxMDMyNTAsIDEwMzI1NCwgMTAzMjU4LCAKKyAgICAxMDMyNjIsIDEwMzI2NiwgMTAzMjcwLCAxMDMyNzQsIDEwMzI3OCwgMTAzMjgyLCAxMDMyODYsIDEwMzI5MCwgMTAzMjk0LCAKKyAgICAxMDMyOTgsIDEwMzMwMiwgMTAzMzA2LCAxMDMzMTAsIDEwMzMxNCwgMTAzMzE4LCAxMDMzMjIsIDEwMzMyNiwgMTAzMzMwLCAKKyAgICAxMDMzMzQsIDEwMzMzOCwgMTAzMzQyLCAxMDMzNDYsIDEwMzM1MCwgMTAzMzU0LCAxMDMzNTgsIDEwMzM2MiwgMTAzMzY2LCAKKyAgICAxMDMzNzAsIDEwMzM3NCwgMTAzMzc4LCAxMDMzODIsIDEwMzM4NiwgMTAzMzkwLCAxMDMzOTQsIDEwMzM5OCwgMTAzNDAyLCAKKyAgICAxMDM0MDYsIDEwMzQxMCwgMTAzNDE0LCAxMDM0MTgsIDEwMzQyMiwgMTAzNDI2LCAxMDM0MzAsIDEwMzQzNCwgMTAzNDM4LCAKKyAgICAxMDM0NDIsIDEwMzQ0NiwgMTAzNDUwLCAxMDM0NTQsIDEwMzQ1OCwgMTAzNDYyLCAxMDM0NjYsIDEwMzQ3MCwgMTAzNDc0LCAKKyAgICAxMDM0NzgsIDEwMzQ4MiwgMTAzNDg2LCAxMDM0OTAsIDEwMzQ5NCwgMTAzNDk4LCAxMDM1MDIsIDEwMzUwNiwgMTAzNTEwLCAKKyAgICAxMDM1MTQsIDEwMzUxOCwgMTAzNTIyLCAxMDM1MjYsIDEwMzUzMCwgMTAzNTM0LCAxMDM1MzgsIDEwMzU0MiwgMTAzNTQ2LCAKKyAgICAxMDM1NTAsIDEwMzU1NCwgMTAzNTU4LCAxMDM1NjIsIDEwMzU2NiwgMTAzNTcwLCAxMDM1NzQsIDEwMzU3OCwgMTAzNTgyLCAKKyAgICAxMDM1ODYsIDEwMzU5MCwgMTAzNTk0LCAxMDM1OTgsIDEwMzYwMiwgMTAzNjA2LCAxMDM2MTAsIDEwMzYxNCwgMTAzNjE4LCAKKyAgICAxMDM2MjIsIDEwMzYyNiwgMTAzNjMwLCAxMDM2MzQsIDEwMzYzOCwgMTAzNjQyLCAxMDM2NDYsIDEwMzY1MCwgMTAzNjU0LCAKKyAgICAxMDM2NTgsIDEwMzY2MiwgMTAzNjY2LCAxMDM2NzAsIDEwMzY3NCwgMTAzNjc4LCAxMDM2ODIsIDEwMzY4NiwgMTAzNjkwLCAKKyAgICAxMDM2OTQsIDEwMzY5OCwgMTAzNzAyLCAxMDM3MDYsIDEwMzcxMCwgMTAzNzE0LCAxMDM3MTgsIDEwMzcyMiwgMTAzNzI2LCAKKyAgICAxMDM3MzAsIDEwMzczNCwgMTAzNzM4LCAxMDM3NDIsIDEwMzc0NiwgMTAzNzUwLCAxMDM3NTQsIDEwMzc1OCwgMTAzNzYyLCAKKyAgICAxMDM3NjYsIDEwMzc3MCwgMTAzNzc0LCAxMDM3NzgsIDEwMzc4MiwgMTAzNzg2LCAxMDM3OTAsIDEwMzc5NCwgMTAzNzk4LCAKKyAgICAxMDM4MDIsIDEwMzgwNiwgMTAzODEwLCAxMDM4MTQsIDEwMzgxOCwgMTAzODIyLCAxMDM4MjYsIDEwMzgzMCwgMTAzODM0LCAKKyAgICAxMDM4MzgsIDEwMzg0MiwgMTAzODQ2LCAxMDM4NTAsIDEwMzg1NCwgMTAzODU4LCAxMDM4NjIsIDEwMzg2NiwgMTAzODcwLCAKKyAgICAxMDM4NzQsIDEwMzg3OCwgMTAzODgyLCAxMDM4ODYsIDEwMzg5MCwgMTAzODk0LCAxMDM4OTgsIDEwMzkwMiwgMTAzOTA2LCAKKyAgICAxMDM5MTAsIDEwMzkxNCwgMTAzOTE4LCAxMDM5MjIsIDEwMzkyNiwgMTAzOTMwLCAxMDM5MzQsIDEwMzkzOCwgMTAzOTQyLCAKKyAgICAxMDM5NDYsIDEwMzk1MCwgMTAzOTU0LCAxMDM5NTgsIDEwMzk2MiwgMTAzOTY2LCAxMDM5NzAsIDEwMzk3NCwgMTAzOTc4LCAKKyAgICAxMDM5ODIsIDEwMzk4NiwgMTAzOTkwLCAxMDM5OTQsIDEwMzk5OCwgMTA0MDAyLCAxMDQwMDYsIDEwNDAxMCwgMTA0MDE0LCAKKyAgICAxMDQwMTgsIDEwNDAyMiwgMTA0MDI2LCAxMDQwMzAsIDEwNDAzNCwgMTA0MDM4LCAxMDQwNDIsIDEwNDA0NiwgMTA0MDUwLCAKKyAgICAxMDQwNTQsIDEwNDA1OCwgMTA0MDYyLCAxMDQwNjYsIDEwNDA3MCwgMTA0MDc0LCAxMDQwNzgsIDEwNDA4MiwgMTA0MDg2LCAKKyAgICAxMDQwOTAsIDEwNDA5NCwgMTA0MDk4LCAxMDQxMDIsIDEwNDEwNiwgMTA0MTEwLCAxMDQxMTQsIDEwNDExOCwgMTA0MTIyLCAKKyAgICAxMDQxMjYsIDEwNDEzMCwgMTA0MTM0LCAxMDQxMzgsIDEwNDE0MiwgMTA0MTQ2LCAxMDQxNTAsIDEwNDE1NCwgMTA0MTU4LCAKKyAgICAxMDQxNjIsIDEwNDE2NiwgMTA0MTcwLCAxMDQxNzQsIDEwNDE3OCwgMTA0MTgyLCAxMDQxODYsIDEwNDE5MCwgMTA0MTk0LCAKKyAgICAxMDQxOTgsIDEwNDIwMiwgMTA0MjA2LCAxMDQyMTAsIDEwNDIxNCwgMTA0MjE4LCAxMDQyMjIsIDEwNDIyNiwgMTA0MjMwLCAKKyAgICAxMDQyMzQsIDEwNDIzOCwgMTA0MjQyLCAxMDQyNDYsIDEwNDI1MCwgMTA0MjU0LCAxMDQyNTgsIDEwNDI2MiwgMTA0MjY2LCAKKyAgICAxMDQyNzAsIDEwNDI3NCwgMTA0Mjc4LCAxMDQyODIsIDEwNDI4NiwgMTA0MjkwLCAxMDQyOTQsIDEwNDI5OCwgMTA0MzAyLCAKKyAgICAxMDQzMDYsIDEwNDMxMCwgMTA0MzE0LCAxMDQzMTgsIDEwNDMyMiwgMTA0MzI2LCAxMDQzMzAsIDEwNDMzNCwgMTA0MzM4LCAKKyAgICAxMDQzNDIsIDEwNDM0NiwgMTA0MzUwLCAxMDQzNTQsIDEwNDM1OCwgMTA0MzYyLCAxMDQzNjYsIDEwNDM3MCwgMTA0Mzc0LCAKKyAgICAxMDQzNzgsIDEwNDM4MiwgMTA0Mzg2LCAxMDQzOTAsIDEwNDM5NCwgMTA0Mzk4LCAxMDQ0MDIsIDEwNDQwNiwgMTA0NDEwLCAKKyAgICAxMDQ0MTQsIDEwNDQxOCwgMTA0NDIyLCAxMDQ0MjYsIDEwNDQzMCwgMTA0NDM0LCAxMDQ0MzgsIDEwNDQ0MiwgMTA0NDQ2LCAKKyAgICAxMDQ0NTAsIDEwNDQ1NCwgMTA0NDU4LCAxMDQ0NjIsIDEwNDQ2NiwgMTA0NDcwLCAxMDQ0NzQsIDEwNDQ3OCwgMTA0NDgyLCAKKyAgICAxMDQ0ODYsIDEwNDQ5MCwgMTA0NDk0LCAxMDQ0OTgsIDEwNDUwMiwgMTA0NTA2LCAxMDQ1MTAsIDEwNDUxNCwgMTA0NTE4LCAKKyAgICAxMDQ1MjIsIDEwNDUyNiwgMTA0NTMwLCAxMDQ1MzQsIDEwNDUzOCwgMTA0NTQyLCAxMDQ1NDYsIDEwNDU1MCwgMTA0NTU0LCAKKyAgICAxMDQ1NTgsIDEwNDU2MiwgMTA0NTY2LCAxMDQ1NzAsIDEwNDU3NCwgMTA0NTc4LCAxMDQ1ODIsIDEwNDU4NiwgMTA0NTkwLCAKKyAgICAxMDQ1OTQsIDEwNDU5OCwgMTA0NjAyLCAxMDQ2MDYsIDEwNDYxMCwgMTA0NjE0LCAxMDQ2MTgsIDEwNDYyMiwgMTA0NjI2LCAKKyAgICAxMDQ2MzAsIDEwNDYzNCwgMTA0NjM4LCAxMDQ2NDIsIDEwNDY0NiwgMTA0NjUwLCAxMDQ2NTQsIDEwNDY1OCwgMTA0NjYyLCAKKyAgICAxMDQ2NjYsIDEwNDY3MCwgMTA0Njc0LCAxMDQ2NzgsIDEwNDY4MiwgMTA0Njg2LCAxMDQ2OTAsIDEwNDY5NCwgMTA0Njk4LCAKKyAgICAxMDQ3MDIsIDEwNDcwNiwgMTA0NzEwLCAxMDQ3MTQsIDEwNDcxOCwgMTA0NzIyLCAxMDQ3MjYsIDEwNDczMCwgMTA0NzM0LCAKKyAgICAxMDQ3MzgsIDEwNDc0MiwgMTA0NzQ2LCAxMDQ3NTAsIDEwNDc1NCwgMTA0NzU4LCAxMDQ3NjIsIDEwNDc2NiwgMTA0NzcwLCAKKyAgICAxMDQ3NzQsIDEwNDc3OCwgMTA0NzgyLCAxMDQ3ODYsIDEwNDc5MCwgMTA0Nzk0LCAxMDQ3OTgsIDEwNDgwMiwgMTA0ODA2LCAKKyAgICAxMDQ4MTAsIDEwNDgxNCwgMTA0ODE4LCAxMDQ4MjIsIDEwNDgyNiwgMTA0ODMwLCAxMDQ4MzQsIDEwNDgzOCwgMTA0ODQyLCAKKyAgICAxMDQ4NDYsIDEwNDg1MCwgMTA0ODU0LCAxMDQ4NTgsIDEwNDg2MiwgMTA0ODY2LCAxMDQ4NzAsIDEwNDg3NCwgMTA0ODc4LCAKKyAgICAxMDQ4ODIsIDEwNDg4NiwgMTA0ODkwLCAxMDQ4OTQsIDEwNDg5OCwgMTA0OTAyLCAxMDQ5MDYsIDEwNDkxMCwgMTA0OTE0LCAKKyAgICAxMDQ5MTgsIDEwNDkyMiwgMTA0OTI2LCAxMDQ5MzAsIDEwNDkzNCwgMTA0OTM4LCAxMDQ5NDIsIDEwNDk0NiwgMTA0OTUwLCAKKyAgICAxMDQ5NTQsIDEwNDk1OCwgMTA0OTYyLCAxMDQ5NjYsIDEwNDk3MCwgMTA0OTc0LCAxMDQ5NzgsIDEwNDk4MiwgMTA0OTg2LCAKKyAgICAxMDQ5OTAsIDEwNDk5NCwgMTA0OTk4LCAxMDUwMDIsIDEwNTAwNiwgMTA1MDEwLCAxMDUwMTQsIDEwNTAxOCwgMTA1MDIyLCAKKyAgICAxMDUwMjYsIDEwNTAzMCwgMTA1MDM0LCAxMDUwMzgsIDEwNTA0MiwgMTA1MDQ2LCAxMDUwNTAsIDEwNTA1NCwgMTA1MDU4LCAKKyAgICAxMDUwNjIsIDEwNTA2NiwgMTA1MDcwLCAxMDUwNzQsIDEwNTA3OCwgMTA1MDgyLCAxMDUwODYsIDEwNTA5MCwgMTA1MDk0LCAKKyAgICAxMDUwOTgsIDEwNTEwMiwgMTA1MTA2LCAxMDUxMTAsIDEwNTExNCwgMTA1MTE4LCAxMDUxMjIsIDEwNTEyNiwgMTA1MTMwLCAKKyAgICAxMDUxMzQsIDEwNTEzOCwgMTA1MTQyLCAxMDUxNDYsIDEwNTE1MCwgMTA1MTU0LCAxMDUxNTgsIDEwNTE2MiwgMTA1MTY2LCAKKyAgICAxMDUxNzAsIDEwNTE3NCwgMTA1MTc4LCAxMDUxODIsIDEwNTE4NiwgMTA1MTkwLCAxMDUxOTQsIDEwNTE5OCwgMTA1MjAyLCAKKyAgICAxMDUyMDYsIDEwNTIxMCwgMTA1MjE0LCAxMDUyMTgsIDEwNTIyMiwgMTA1MjI2LCAxMDUyMzAsIDEwNTIzNCwgMTA1MjM4LCAKKyAgICAxMDUyNDIsIDEwNTI0NiwgMTA1MjUwLCAxMDUyNTQsIDEwNTI1OCwgMTA1MjYyLCAxMDUyNjYsIDEwNTI3MCwgMTA1Mjc0LCAKKyAgICAxMDUyNzgsIDEwNTI4MiwgMTA1Mjg2LCAxMDUyOTAsIDEwNTI5NCwgMTA1Mjk4LCAxMDUzMDIsIDEwNTMwNiwgMTA1MzEwLCAKKyAgICAxMDUzMTQsIDEwNTMxOCwgMTA1MzIyLCAxMDUzMjYsIDEwNTMzMCwgMTA1MzM0LCAxMDUzMzgsIDEwNTM0MiwgMTA1MzQ2LCAKKyAgICAxMDUzNTAsIDEwNTM1NCwgMTA1MzU4LCAxMDUzNjIsIDEwNTM2NiwgMTA1MzcwLCAxMDUzNzQsIDEwNTM3OCwgMTA1MzgyLCAKKyAgICAxMDUzODYsIDEwNTM5MCwgMTA1Mzk0LCAxMDUzOTgsIDEwNTQwMiwgMTA1NDA2LCAxMDU0MTAsIDEwNTQxNCwgMTA1NDE4LCAKKyAgICAxMDU0MjIsIDEwNTQyNiwgMTA1NDMwLCAxMDU0MzQsIDEwNTQzOCwgMTA1NDQyLCAxMDU0NDYsIDEwNTQ1MCwgMTA1NDU0LCAKKyAgICAxMDU0NTgsIDEwNTQ2MiwgMTA1NDY2LCAxMDU0NzAsIDEwNTQ3NCwgMTA1NDc4LCAxMDU0ODIsIDEwNTQ4NiwgMTA1NDkwLCAKKyAgICAxMDU0OTQsIDEwNTQ5OCwgMTA1NTAyLCAxMDU1MDYsIDEwNTUxMCwgMTA1NTE0LCAxMDU1MTgsIDEwNTUyMiwgMTA1NTI2LCAKKyAgICAxMDU1MzAsIDEwNTUzNCwgMTA1NTM4LCAxMDU1NDIsIDEwNTU0NiwgMTA1NTUwLCAxMDU1NTQsIDEwNTU1OCwgMTA1NTYyLCAKKyAgICAxMDU1NjYsIDEwNTU3MCwgMTA1NTc0LCAxMDU1NzgsIDEwNTU4MiwgMTA1NTg2LCAxMDU1OTAsIDEwNTU5NCwgMTA1NTk4LCAKKyAgICAxMDU2MDIsIDEwNTYwNiwgMTA1NjEwLCAxMDU2MTQsIDEwNTYxOCwgMTA1NjIyLCAxMDU2MjYsIDEwNTYzMCwgMTA1NjM0LCAKKyAgICAxMDU2MzgsIDEwNTY0MiwgMTA1NjQ2LCAxMDU2NTAsIDEwNTY1NCwgMTA1NjU4LCAxMDU2NjIsIDEwNTY2NiwgMTA1NjcwLCAKKyAgICAxMDU2NzQsIDEwNTY3OCwgMTA1NjgyLCAxMDU2ODYsIDEwNTY5MCwgMTA1Njk0LCAxMDU2OTgsIDEwNTcwMiwgMTA1NzA2LCAKKyAgICAxMDU3MTAsIDEwNTcxNCwgMTA1NzE4LCAxMDU3MjIsIDEwNTcyNiwgMTA1NzMwLCAxMDU3MzQsIDEwNTczOCwgMTA1NzQyLCAKKyAgICAxMDU3NDYsIDEwNTc1MCwgMTA1NzU0LCAxMDU3NTgsIDEwNTc2MiwgMTA1NzY2LCAxMDU3NzAsIDEwNTc3NCwgMTA1Nzc4LCAKKyAgICAxMDU3ODIsIDEwNTc4NiwgMTA1NzkwLCAxMDU3OTQsIDEwNTc5OCwgMTA1ODAyLCAxMDU4MDYsIDEwNTgxMCwgMTA1ODE0LCAKKyAgICAxMDU4MTgsIDEwNTgyMiwgMTA1ODI2LCAxMDU4MzAsIDEwNTgzNCwgMTA1ODM4LCAxMDU4NDIsIDEwNTg0NiwgMTA1ODUwLCAKKyAgICAxMDU4NTQsIDEwNTg1OCwgMTA1ODYyLCAxMDU4NjYsIDEwNTg3MCwgMTA1ODc0LCAxMDU4NzgsIDEwNTg4MiwgMTA1ODg2LCAKKyAgICAxMDU4OTAsIDEwNTg5NCwgMTA1ODk4LCAxMDU5MDIsIDEwNTkwNiwgMTA1OTEwLCAxMDU5MTQsIDEwNTkxOCwgMTA1OTIyLCAKKyAgICAxMDU5MjYsIDEwNTkzMCwgMTA1OTM0LCAxMDU5MzgsIDEwNTk0MiwgMTA1OTQ2LCAxMDU5NTAsIDEwNTk1NCwgMTA1OTU4LCAKKyAgICAxMDU5NjIsIDEwNTk2NiwgMTA1OTcwLCAxMDU5NzQsIDEwNTk3OCwgMTA1OTgyLCAxMDU5ODYsIDEwNTk5MCwgMTA1OTk0LCAKKyAgICAxMDU5OTgsIDEwNjAwMiwgMTA2MDA2LCAxMDYwMTAsIDEwNjAxNCwgMTA2MDE4LCAxMDYwMjIsIDEwNjAyNiwgMTA2MDMwLCAKKyAgICAxMDYwMzQsIDEwNjAzOCwgMTA2MDQyLCAxMDYwNDYsIDEwNjA1MCwgMTA2MDU0LCAxMDYwNTgsIDEwNjA2MiwgMTA2MDY2LCAKKyAgICAxMDYwNzAsIDEwNjA3NCwgMTA2MDc4LCAxMDYwODIsIDEwNjA4NiwgMTA2MDkwLCAxMDYwOTQsIDEwNjA5OCwgMTA2MTAyLCAKKyAgICAxMDYxMDYsIDEwNjExMCwgMTA2MTE0LCAxMDYxMTgsIDEwNjEyMiwgMTA2MTI2LCAxMDYxMzAsIDEwNjEzNCwgMTA2MTM4LCAKKyAgICAxMDYxNDIsIDEwNjE0NiwgMTA2MTUwLCAxMDYxNTQsIDEwNjE1OCwgMTA2MTYyLCAxMDYxNjYsIDEwNjE3MCwgMTA2MTc0LCAKKyAgICAxMDYxNzgsIDEwNjE4MiwgMTA2MTg2LCAxMDYxOTAsIDEwNjE5NCwgMTA2MTk4LCAxMDYyMDIsIDEwNjIwNiwgMTA2MjEwLCAKKyAgICAxMDYyMTQsIDEwNjIxOCwgMTA2MjIyLCAxMDYyMjYsIDEwNjIzMCwgMTA2MjM0LCAxMDYyMzgsIDEwNjI0MiwgMTA2MjQ2LCAKKyAgICAxMDYyNTAsIDEwNjI1NCwgMTA2MjU4LCAxMDYyNjIsIDEwNjI2NiwgMTA2MjcwLCAxMDYyNzQsIDEwNjI3OCwgMTA2MjgyLCAKKyAgICAxMDYyODYsIDEwNjI5MCwgMTA2Mjk0LCAxMDYyOTgsIDEwNjMwMiwgMTA2MzA2LCAxMDYzMTAsIDEwNjMxNCwgMTA2MzE4LCAKKyAgICAxMDYzMjIsIDEwNjMyNiwgMTA2MzMwLCAxMDYzMzQsIDEwNjMzOCwgMTA2MzQyLCAxMDYzNDYsIDEwNjM1MCwgMTA2MzU0LCAKKyAgICAxMDYzNTgsIDEwNjM2MiwgMTA2MzY2LCAxMDYzNzAsIDEwNjM3NCwgMTA2Mzc4LCAxMDYzODIsIDEwNjM4NiwgMTA2MzkwLCAKKyAgICAxMDYzOTQsIDEwNjM5OCwgMTA2NDAyLCAxMDY0MDYsIDEwNjQxMCwgMTA2NDE0LCAxMDY0MTgsIDEwNjQyMiwgMTA2NDI2LCAKKyAgICAxMDY0MzAsIDEwNjQzNCwgMTA2NDM4LCAxMDY0NDIsIDEwNjQ0NiwgMTA2NDUwLCAxMDY0NTQsIDEwNjQ1OCwgMTA2NDYyLCAKKyAgICAxMDY0NjYsIDEwNjQ3MCwgMTA2NDc0LCAxMDY0NzgsIDEwNjQ4MiwgMTA2NDg2LCAxMDY0OTAsIDEwNjQ5NCwgMTA2NDk4LCAKKyAgICAxMDY1MDIsIDEwNjUwNiwgMTA2NTEwLCAxMDY1MTQsIDEwNjUxOCwgMTA2NTIyLCAxMDY1MjYsIDEwNjUzMCwgMTA2NTM0LCAKKyAgICAxMDY1MzgsIDEwNjU0MiwgMTA2NTQ2LCAxMDY1NTAsIDEwNjU1NCwgMTA2NTU4LCAxMDY1NjIsIDEwNjU2NiwgMTA2NTcwLCAKKyAgICAxMDY1NzQsIDEwNjU3OCwgMTA2NTgyLCAxMDY1ODYsIDEwNjU5MCwgMTA2NTk0LCAxMDY1OTgsIDEwNjYwMiwgMTA2NjA2LCAKKyAgICAxMDY2MTAsIDEwNjYxNCwgMTA2NjE4LCAxMDY2MjIsIDEwNjYyNiwgMTA2NjMwLCAxMDY2MzQsIDEwNjYzOCwgMTA2NjQyLCAKKyAgICAxMDY2NDYsIDEwNjY1MCwgMTA2NjU0LCAxMDY2NTgsIDEwNjY2MiwgMTA2NjY2LCAxMDY2NzAsIDEwNjY3NCwgMTA2Njc4LCAKKyAgICAxMDY2ODIsIDEwNjY4NiwgMTA2NjkwLCAxMDY2OTQsIDEwNjY5OCwgMTA2NzAyLCAxMDY3MDYsIDEwNjcxMCwgMTA2NzE0LCAKKyAgICAxMDY3MTgsIDEwNjcyMiwgMTA2NzI2LCAxMDY3MzAsIDEwNjczNCwgMTA2NzM4LCAxMDY3NDIsIDEwNjc0NiwgMTA2NzUwLCAKKyAgICAxMDY3NTQsIDEwNjc1OCwgMTA2NzYyLCAxMDY3NjYsIDEwNjc3MCwgMTA2Nzc0LCAxMDY3NzgsIDEwNjc4MiwgMTA2Nzg2LCAKKyAgICAxMDY3OTAsIDEwNjc5NCwgMTA2Nzk4LCAxMDY4MDIsIDEwNjgwNiwgMTA2ODEwLCAxMDY4MTQsIDEwNjgxOCwgMTA2ODIyLCAKKyAgICAxMDY4MjYsIDEwNjgzMCwgMTA2ODM0LCAxMDY4MzgsIDEwNjg0MiwgMTA2ODQ2LCAxMDY4NTAsIDEwNjg1NCwgMTA2ODU4LCAKKyAgICAxMDY4NjIsIDEwNjg2NiwgMTA2ODcwLCAxMDY4NzQsIDEwNjg3OCwgMTA2ODgyLCAxMDY4ODYsIDEwNjg5MCwgMTA2ODk0LCAKKyAgICAxMDY4OTgsIDEwNjkwMiwgMTA2OTA2LCAxMDY5MTAsIDEwNjkxNCwgMTA2OTE4LCAxMDY5MjIsIDEwNjkyNiwgMTA2OTMwLCAKKyAgICAxMDY5MzQsIDEwNjkzOCwgMTA2OTQyLCAxMDY5NDYsIDEwNjk1MCwgMTA2OTU0LCAxMDY5NTgsIDEwNjk2MiwgMTA2OTY2LCAKKyAgICAxMDY5NzAsIDEwNjk3NCwgMTA2OTc4LCAxMDY5ODIsIDEwNjk4NiwgMTA2OTkwLCAxMDY5OTQsIDEwNjk5OCwgMTA3MDAyLCAKKyAgICAxMDcwMDYsIDEwNzAxMCwgMTA3MDE0LCAxMDcwMTgsIDEwNzAyMiwgMTA3MDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMDcwMzAsIDEwNzAzNywgMTA3MDQ0LCAxMDcwNTMsIDEwNzA2MiwgMTA3MDY5LCAxMDcwNzQsIDEwNzA4MSwgCisgICAgMTA3MDg4LCAxMDcwOTcsIDEwNzEwOCwgMTA3MTE5LCAxMDcxMjQsIDEwNzEzMSwgMTA3MTM2LCAxMDcxNDEsIDEwNzE0NiwgCisgICAgMTA3MTUxLCAxMDcxNTYsIDEwNzE2MSwgMTA3MTY2LCAxMDcxNzEsIDEwNzE3NiwgMTA3MTgxLCAxMDcxODYsIDEwNzE5MywgCisgICAgMTA3MjAwLCAxMDcyMDUsIDEwNzIxMCwgMTA3MjE1LCAxMDcyMjAsIDEwNzIyNywgMTA3MjM0LCAxMDcyNDIsIDEwNzI0NywgCisgICAgMTA3MjU0LCAxMDcyNTksIDEwNzI2NCwgMTA3MjY5LCAxMDcyNzQsIDEwNzI3OSwgMTA3Mjg2LCAxMDcyOTMsIDEwNzI5OCwgCisgICAgMTA3MzAzLCAxMDczMDgsIDEwNzMxMywgMTA3MzE4LCAxMDczMjMsIDEwNzMyOCwgMTA3MzMzLCAxMDczMzgsIDEwNzM0MywgCisgICAgMTA3MzQ4LCAxMDczNTMsIDEwNzM1OCwgMTA3MzYzLCAxMDczNjgsIDEwNzM3MywgMTA3Mzc4LCAxMDczODMsIDEwNzM4OCwgCisgICAgMTA3Mzk1LCAxMDc0MDAsIDEwNzQwNSwgMTA3NDE0LCAxMDc0MjEsIDEwNzQyNiwgMTA3NDMxLCAxMDc0MzYsIDEwNzQ0MSwgCisgICAgMTA3NDQ2LCAxMDc0NTEsIDEwNzQ1NiwgMTA3NDYxLCAxMDc0NjYsIDEwNzQ3MSwgMTA3NDc2LCAxMDc0ODEsIDEwNzQ4NiwgCisgICAgMTA3NDkxLCAxMDc0OTYsIDEwNzUwMSwgMTA3NTA2LCAxMDc1MTEsIDEwNzUxNiwgMTA3NTIxLCAxMDc1MjYsIDEwNzUzMiwgCisgICAgMTA3NTQwLCAxMDc1NDYsIDEwNzU1NCwgMTA3NTYyLCAxMDc1NzAsIDEwNzU3NiwgMTA3NTgyLCAxMDc1ODgsIDEwNzU5NCwgCisgICAgMTA3NjAwLCAxMDc2MDgsIDEwNzYxOCwgMTA3NjI2LCAxMDc2MzQsIDEwNzY0MCwgMTA3NjQ2LCAxMDc2NTQsIDEwNzY2MiwgCisgICAgMTA3NjY4LCAxMDc2NzYsIDEwNzY4NCwgMTA3NjkyLCAxMDc2OTgsIDEwNzcwNCwgMTA3NzEwLCAxMDc3MTYsIDEwNzcyMiwgCisgICAgMTA3NzI4LCAxMDc3MzYsIDEwNzc0NCwgMTA3NzUwLCAxMDc3NTYsIDEwNzc2MiwgMTA3NzY4LCAxMDc3NzQsIDEwNzc4MiwgCisgICAgMTA3Nzg4LCAxMDc3OTQsIDEwNzgwMCwgMTA3ODA2LCAxMDc4MTIsIDEwNzgxOCwgMTA3ODI2LCAxMDc4MzIsIDEwNzgzOCwgCisgICAgMTA3ODQ0LCAxMDc4NTAsIDEwNzg1OCwgMTA3ODY2LCAxMDc4NzIsIDEwNzg3OCwgMTA3ODg0LCAxMDc4ODksIDEwNzg5NSwgCisgICAgMTA3OTAxLCAxMDc5MDgsIDEwNzkxMywgMTA3OTE4LCAxMDc5MjMsIDEwNzkyOCwgMTA3OTMzLCAxMDc5MzgsIDEwNzk0MywgCisgICAgMTA3OTQ4LCAxMDc5NTMsIDEwNzk2MiwgMTA3OTY5LCAxMDc5NzQsIDEwNzk3OSwgMTA3OTg0LCAxMDc5OTEsIDEwNzk5NiwgCisgICAgMTA4MDAxLCAxMDgwMDYsIDEwODAxMywgMTA4MDE4LCAxMDgwMjMsIDEwODAyOCwgMTA4MDMzLCAxMDgwMzgsIDEwODA0MywgCisgICAgMTA4MDQ4LCAxMDgwNTMsIDEwODA1OCwgMTA4MDYzLCAxMDgwNjgsIDEwODA3NSwgMTA4MDgwLCAxMDgwODcsIDEwODA5MiwgCisgICAgMTA4MDk3LCAxMDgxMDQsIDEwODEwOSwgMTA4MTE0LCAxMDgxMTksIDEwODEyNCwgMTA4MTI5LCAxMDgxMzQsIDEwODEzOSwgCisgICAgMTA4MTQ0LCAxMDgxNDksIDEwODE1NCwgMTA4MTU5LCAxMDgxNjQsIDEwODE2OSwgMTA4MTc0LCAxMDgxNzksIDEwODE4NCwgCisgICAgMTA4MTg5LCAxMDgxOTQsIDEwODE5OSwgMTA4MjA2LCAxMDgyMTEsIDEwODIxNiwgMTA4MjIxLCAxMDgyMjYsIDEwODIzMSwgCisgICAgMTA4MjM2LCAxMDgyNDEsIDEwODI0NiwgMTA4MjUxLCAxMDgyNTYsIDEwODI2MSwgMTA4MjY2LCAxMDgyNzEsIDEwODI3OCwgCisgICAgMTA4MjgzLCAxMDgyODgsIDEwODI5NSwgMTA4MzAwLCAxMDgzMDUsIDEwODMxMCwgMTA4MzE1LCAxMDgzMjAsIDEwODMyNSwgCisgICAgMTA4MzMwLCAxMDgzMzUsIDEwODM0MCwgMTA4MzQ1LCAxMDgzNTIsIDEwODM1NywgMTA4MzYyLCAxMDgzNjcsIDEwODM3MiwgCisgICAgMTA4Mzc3LCAxMDgzODQsIDEwODM5MSwgMTA4Mzk2LCAxMDg0MDEsIDEwODQwNiwgMTA4NDExLCAxMDg0MTYsIDEwODQyMSwgCisgICAgMTA4NDI2LCAxMDg0MzEsIDEwODQzNiwgMTA4NDQxLCAxMDg0NDYsIDEwODQ1MSwgMTA4NDU2LCAxMDg0NjEsIDEwODQ2NiwgCisgICAgMTA4NDcxLCAxMDg0NzYsIDEwODQ4MSwgMTA4NDg2LCAxMDg0OTEsIDEwODQ5NiwgMTA4NTAxLCAxMDg1MDYsIDEwODUxMSwgCisgICAgMTA4NTE2LCAxMDg1MjEsIDEwODUyNiwgMTA4NTMxLCAxMDg1MzYsIDEwODU0MSwgMTA4NTQ2LCAxMDg1NTEsIDEwODU1NiwgCisgICAgMTA4NTYxLCAxMDg1NjYsIDEwODU3MSwgMTA4NTc4LCAxMDg1ODMsIDEwODU4OCwgMTA4NTkzLCAxMDg1OTgsIDEwODYwMywgCisgICAgMTA4NjA4LCAxMDg2MTMsIDEwODYxOCwgMTA4NjIzLCAxMDg2MjgsIDEwODYzMywgMTA4NjM4LCAxMDg2NDMsIDEwODY0OCwgCisgICAgMTA4NjUzLCAxMDg2NTgsIDEwODY2MywgMTA4NjY4LCAxMDg2NzMsIDEwODY3OCwgMTA4NjgzLCAxMDg2ODgsIDEwODY5MywgCisgICAgMTA4Njk4LCAxMDg3MDMsIDEwODcwOCwgMTA4NzEzLCAxMDg3MTgsIDEwODcyMywgMTA4NzI4LCAxMDg3MzMsIDEwODczOCwgCisgICAgMTA4NzQzLCAxMDg3NDgsIDEwODc1MywgMTA4NzU4LCAxMDg3NjMsIDEwODc2OCwgMTA4NzczLCAxMDg3NzgsIDEwODc4MywgCisgICAgMTA4Nzg4LCAxMDg3OTMsIDEwODc5OCwgMTA4ODAzLCAxMDg4MDgsIDEwODgxMywgMTA4ODE4LCAxMDg4MjMsIDEwODgyOCwgCisgICAgMTA4ODMzLCAxMDg4MzgsIDEwODg0MywgMTA4ODQ4LCAxMDg4NTMsIDEwODg1OCwgMTA4ODYzLCAxMDg4NjgsIDEwODg3NSwgCisgICAgMTA4ODgwLCAxMDg4ODUsIDEwODg5MCwgMTA4ODk1LCAxMDg5MDAsIDEwODkwNSwgMTA4OTA5LCAxMDg5MTQsIDEwODkxOSwgCisgICAgMTA4OTI0LCAxMDg5MjksIDEwODkzNCwgMTA4OTM5LCAxMDg5NDQsIDEwODk0OSwgMTA4OTU0LCAxMDg5NTksIDEwODk2NCwgCisgICAgMTA4OTY5LCAxMDg5NzQsIDEwODk3OSwgMTA4OTg2LCAxMDg5OTEsIDEwODk5NiwgMTA5MDAyLCAxMDkwMDcsIDEwOTAxMiwgCisgICAgMTA5MDE3LCAxMDkwMjIsIDEwOTAyNywgMTA5MDMyLCAxMDkwMzcsIDEwOTA0MiwgMTA5MDQ3LCAxMDkwNTIsIDEwOTA1NywgCisgICAgMTA5MDYyLCAxMDkwNjcsIDEwOTA3MiwgMTA5MDc3LCAxMDkwODIsIDEwOTA4NywgMTA5MDkyLCAxMDkwOTcsIDEwOTEwMiwgCisgICAgMTA5MTA3LCAxMDkxMTIsIDEwOTExNywgMTA5MTIyLCAxMDkxMjcsIDEwOTEzMiwgMTA5MTM3LCAxMDkxNDIsIDEwOTE0NywgCisgICAgMTA5MTUyLCAxMDkxNTcsIDEwOTE2MiwgMTA5MTY3LCAxMDkxNzIsIDEwOTE3NywgMTA5MTgyLCAxMDkxODcsIDEwOTE5MiwgCisgICAgMTA5MTk3LCAxMDkyMDIsIDEwOTIwNywgMTA5MjEyLCAxMDkyMTcsIDEwOTIyNCwgMTA5MjI5LCAxMDkyMzQsIDEwOTI0MSwgCisgICAgMTA5MjQ4LCAxMDkyNTMsIDEwOTI1OCwgMTA5MjYzLCAxMDkyNjgsIDEwOTI3MywgMTA5Mjc4LCAxMDkyODMsIDEwOTI4OCwgCisgICAgMTA5MjkzLCAxMDkyOTgsIDEwOTMwMywgMTA5MzA4LCAxMDkzMTMsIDEwOTMxOCwgMTA5MzIzLCAxMDkzMjgsIDEwOTMzMywgCisgICAgMTA5MzM4LCAxMDkzNDMsIDEwOTM0OCwgMTA5MzUzLCAxMDkzNTgsIDEwOTM2MywgMTA5MzY4LCAxMDkzNzMsIDEwOTM4MCwgCisgICAgMTA5Mzg1LCAxMDkzOTAsIDEwOTM5NSwgMTA5NDAwLCAxMDk0MDUsIDEwOTQxMCwgMTA5NDE1LCAxMDk0MjAsIDEwOTQyNSwgCisgICAgMTA5NDMwLCAxMDk0MzUsIDEwOTQ0MCwgMTA5NDQ1LCAxMDk0NTAsIDEwOTQ1NSwgMTA5NDYwLCAxMDk0NjUsIDEwOTQ3MCwgCisgICAgMTA5NDc3LCAxMDk0ODIsIDEwOTQ4NywgMTA5NDkyLCAxMDk0OTcsIDEwOTUwMiwgMTA5NTA3LCAxMDk1MTIsIDEwOTUxOCwgCisgICAgMTA5NTIzLCAxMDk1MjgsIDEwOTUzMywgMTA5NTM4LCAxMDk1NDMsIDEwOTU0OCwgMTA5NTUzLCAxMDk1NTgsIDEwOTU2NSwgCisgICAgMTA5NTcyLCAxMDk1NzcsIDEwOTU4MiwgMTA5NTg2LCAxMDk1OTEsIDEwOTU5NSwgMTA5NTk5LCAxMDk2MDQsIDEwOTYxMSwgCisgICAgMTA5NjE2LCAxMDk2MjEsIDEwOTYzMCwgMTA5NjM1LCAxMDk2NDAsIDEwOTY0NSwgMTA5NjUwLCAxMDk2NTcsIDEwOTY2NCwgCisgICAgMTA5NjY5LCAxMDk2NzQsIDEwOTY3OSwgMTA5Njg0LCAxMDk2OTEsIDEwOTY5NiwgMTA5NzAxLCAxMDk3MDYsIDEwOTcxMSwgCisgICAgMTA5NzE2LCAxMDk3MjEsIDEwOTcyNiwgMTA5NzMxLCAxMDk3MzYsIDEwOTc0MSwgMTA5NzQ2LCAxMDk3NTEsIDEwOTc1OCwgCisgICAgMTA5NzYyLCAxMDk3NjcsIDEwOTc3MiwgMTA5Nzc3LCAxMDk3ODIsIDEwOTc4NiwgMTA5NzkxLCAxMDk3OTYsIDEwOTgwMSwgCisgICAgMTA5ODA2LCAxMDk4MTEsIDEwOTgxNiwgMTA5ODIxLCAxMDk4MjYsIDEwOTgzMSwgMTA5ODM3LCAxMDk4NDMsIDEwOTg0OSwgCisgICAgMTA5ODU1LCAxMDk4NjEsIDEwOTg2NywgMTA5ODczLCAxMDk4NzksIDEwOTg4NSwgMTA5ODkxLCAxMDk4OTcsIDEwOTkwMywgCisgICAgMTA5OTA4LCAxMDk5MTQsIDEwOTkyMCwgMTA5OTI2LCAxMDk5MzIsIDEwOTkzOCwgMTA5OTQ0LCAxMDk5NTAsIDEwOTk1NiwgCisgICAgMTA5OTYyLCAxMDk5NjgsIDEwOTk3NCwgMTA5OTc5LCAxMDk5ODUsIDEwOTk5MSwgMTA5OTk3LCAxMTAwMDMsIDExMDAwOSwgCisgICAgMTEwMDE1LCAxMTAwMjEsIDExMDAyNywgMTEwMDMzLCAxMTAwMzksIDExMDA0NSwgMTEwMDUxLCAxMTAwNTcsIDExMDA2MywgCisgICAgMTEwMDY5LCAxMTAwNzUsIDExMDA4MSwgMTEwMDg3LCAxMTAwOTMsIDExMDA5OSwgMTEwMTA0LCAxMTAxMTAsIDExMDExNiwgCisgICAgMTEwMTIyLCAxMTAxMjgsIDExMDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMTQwLCAxMTAxNDMsIDExMDE0NywgMTEwMTUxLCAxMTAxNTUsIDExMDE1OCwgCisgICAgMTEwMTYyLCAxMTAxNjcsIDExMDE3MSwgMTEwMTc1LCAxMTAxNzksIDExMDE4MywgMTEwMTg3LCAxMTAxOTIsIDExMDE5NywgCisgICAgMTEwMjAxLCAxMTAyMDUsIDExMDIwOCwgMTEwMjEyLCAxMTAyMTcsIDExMDIyMiwgMTEwMjI2LCAxMTAyMzAsIDExMDIzNCwgCisgICAgMTEwMjM4LCAxMTAyNDIsIDExMDI0NiwgMTEwMjUwLCAxMTAyNTQsIDExMDI1OCwgMTEwMjYyLCAxMTAyNjUsIDExMDI2OSwgCisgICAgMTEwMjczLCAxMTAyNzcsIDExMDI4MSwgMTEwMjg1LCAxMTAyODksIDExMDI5NSwgMTEwMjk4LCAxMTAzMDIsIDExMDMwNiwgCisgICAgMTEwMzEwLCAxMTAzMTQsIDExMDMxOCwgMTEwMzIyLCAxMTAzMjYsIDExMDMzMCwgMTEwMzM0LCAxMTAzMzksIDExMDM0NCwgCisgICAgMTEwMzUwLCAxMTAzNTQsIDExMDM1OCwgMTEwMzYyLCAxMTAzNjYsIDExMDM3MCwgMTEwMzc0LCAxMTAzNzksIDExMDM4MiwgCisgICAgMTEwMzg2LCAxMTAzOTAsIDExMDM5NCwgMTEwMzk4LCAxMTA0MDQsIDExMDQwOCwgMTEwNDEyLCAxMTA0MTYsIDExMDQyMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNDI0LCAxMTA0MjgsIDExMDQzMiwgMTEwNDM4LCAxMTA0NDQsIAorICAgIDExMDQ0OCwgMTEwNDUzLCAxMTA0NTgsIDExMDQ2MywgMTEwNDY4LCAxMTA0NzIsIDExMDQ3NywgMTEwNDgyLCAxMTA0ODcsIAorICAgIDExMDQ5MSwgMTEwNDk2LCAxMTA1MDEsIDExMDUwNiwgMTEwNTEwLCAxMTA1MTUsIDExMDUyMCwgMTEwNTI1LCAxMTA1MzAsIAorICAgIDExMDUzNSwgMTEwNTQwLCAxMTA1NDUsIDExMDU1MCwgMTEwNTU0LCAxMTA1NTksIDExMDU2NCwgMTEwNTY5LCAxMTA1NzQsIAorICAgIDExMDU3OSwgMTEwNTg0LCAxMTA1ODksIDExMDU5NCwgMTEwNTk5LCAxMTA2MDQsIDExMDYwOSwgMTEwNjE2LCAxMTA2MjEsIAorICAgIDExMDYyOCwgMTEwNjMzLCAxMTA2MzgsIDExMDY0MywgMTEwNjQ4LCAxMTA2NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDY1OCwgMTEwNjYyLCAxMTA2NjgsIDExMDY3MSwgMTEwNjc0LCAxMTA2NzgsIAorICAgIDExMDY4MiwgMTEwNjg2LCAxMTA2OTAsIDExMDY5NCwgMTEwNjk4LCAxMTA3MDIsIDExMDcwOCwgMTEwNzE0LCAxMTA3MjAsIAorICAgIDExMDcyNiwgMTEwNzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMTA3MzgsIDExMDc0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNzQ5LCAxMTA3NTQsIDExMDc1OSwgCisgICAgMTEwNzY0LCAxMTA3NzEsIDExMDc3OCwgMTEwNzg1LCAxMTA3OTIsIDExMDc5NywgMTEwODAyLCAxMTA4MDcsIDExMDgxMiwgCisgICAgMTEwODE5LCAxMTA4MjQsIDExMDgzMSwgMTEwODM4LCAxMTA4NDMsIDExMDg0OCwgMTEwODUzLCAxMTA4NjAsIDExMDg2NSwgCisgICAgMTEwODcwLCAxMTA4NzcsIDExMDg4NCwgMTEwODg5LCAxMTA4OTQsIDExMDg5OSwgMTEwOTA2LCAxMTA5MTMsIDExMDkyMCwgCisgICAgMTEwOTI1LCAxMTA5MzAsIDExMDkzNywgMTEwOTQ0LCAxMTA5NTEsIDExMDk1OCwgMTEwOTYzLCAxMTA5NjgsIDExMDk3MywgCisgICAgMTEwOTgwLCAxMTA5ODUsIDExMDk5MCwgMTEwOTk1LCAxMTEwMDIsIDExMTAxMSwgMTExMDE4LCAxMTEwMjMsIDExMTAyOCwgCisgICAgMTExMDMzLCAxMTEwMzgsIDExMTA0MywgMTExMDQ4LCAxMTEwNTcsIDExMTA2NCwgMTExMDY5LCAxMTEwNzYsIDExMTA4MywgCisgICAgMTExMDg4LCAxMTEwOTMsIDExMTA5OCwgMTExMTA1LCAxMTExMTAsIDExMTExNywgMTExMTI0LCAxMTExMjksIDExMTEzNCwgCisgICAgMTExMTM5LCAxMTExNDYsIDExMTE1MywgMTExMTU4LCAxMTExNjMsIDExMTE3MCwgMTExMTc3LCAxMTExODQsIDExMTE4OSwgCisgICAgMTExMTk0LCAxMTExOTksIDExMTIwNCwgMTExMjExLCAxMTEyMjAsIDExMTIyOSwgMTExMjM0LCAxMTEyNDEsIDExMTI1MCwgCisgICAgMTExMjU1LCAxMTEyNjAsIDExMTI2NSwgMTExMjcwLCAxMTEyNzcsIDExMTI4NCwgMTExMjkxLCAxMTEyOTgsIDExMTMwMywgCisgICAgMTExMzA4LCAxMTEzMTMsIDExMTMyMCwgMTExMzI3LCAxMTEzMzQsIDExMTMzOSwgMTExMzQ0LCAxMTEzNTEsIDExMTM1NiwgCisgICAgMTExMzYzLCAxMTEzNjgsIDExMTM3NSwgMTExMzgwLCAxMTEzODcsIDExMTM5NCwgMTExMzk5LCAxMTE0MDQsIDExMTQwOSwgCisgICAgMTExNDE0LCAxMTE0MTksIDExMTQyNCwgMTExNDI5LCAxMTE0MzQsIDExMTQzOSwgMTExNDQ2LCAxMTE0NTMsIDExMTQ2MCwgCisgICAgMTExNDY3LCAxMTE0NzQsIDExMTQ4MywgMTExNDg4LCAxMTE0OTMsIDExMTUwMCwgMTExNTA3LCAxMTE1MTIsIDExMTUxOSwgCisgICAgMTExNTI2LCAxMTE1MzMsIDExMTU0MCwgMTExNTQ3LCAxMTE1NTQsIDExMTU1OSwgMTExNTY0LCAxMTE1NjksIDExMTU3NCwgCisgICAgMTExNTc5LCAxMTE1ODgsIDExMTU5NywgMTExNjA2LCAxMTE2MTUsIDExMTYyNCwgMTExNjMzLCAxMTE2NDIsIDExMTY1MSwgCisgICAgMTExNjU2LCAxMTE2NjcsIDExMTY3OCwgMTExNjg3LCAxMTE2OTIsIDExMTY5NywgMTExNzAyLCAxMTE3MDcsIDExMTcxNiwgCisgICAgMTExNzIzLCAxMTE3MzAsIDExMTczNywgMTExNzQ0LCAxMTE3NTEsIDExMTc1OCwgMTExNzY3LCAxMTE3NzYsIDExMTc4NywgCisgICAgMTExNzk2LCAxMTE4MDcsIDExMTgxNiwgMTExODIzLCAxMTE4MzIsIDExMTg0MywgMTExODUyLCAxMTE4NjEsIDExMTg3MCwgCisgICAgMTExODc5LCAxMTE4ODYsIDExMTg5MywgMTExOTAwLCAxMTE5MDksIDExMTkxOCwgMTExOTI5LCAxMTE5MzgsIDExMTk0NywgCisgICAgMTExOTU4LCAxMTE5NjMsIDExMTk2OCwgMTExOTc5LCAxMTE5ODcsIDExMTk5NiwgMTEyMDA1LCAxMTIwMTQsIDExMjAyNSwgCisgICAgMTEyMDM0LCAxMTIwNDMsIDExMjA1NCwgMTEyMDY1LCAxMTIwNzYsIDExMjA4NywgMTEyMDk4LCAxMTIxMDksIDExMjExNiwgCisgICAgMTEyMTIzLCAxMTIxMzAsIDExMjEzNywgMTEyMTQ4LCAxMTIxNTcsIDExMjE2NCwgMTEyMTcxLCAxMTIxNzgsIDExMjE4OSwgCisgICAgMTEyMjAwLCAxMTIyMTEsIDExMjIyMiwgMTEyMjMzLCAxMTIyNDQsIDExMjI1NSwgMTEyMjY2LCAxMTIyNzMsIDExMjI4MCwgCisgICAgMTEyMjg5LCAxMTIyOTgsIDExMjMwNSwgMTEyMzEyLCAxMTIzMTksIDExMjMyOCwgMTEyMzM3LCAxMTIzNDYsIDExMjM1MywgCisgICAgMTEyMzYyLCAxMTIzNzEsIDExMjM4MCwgMTEyMzg3LCAxMTIzOTQsIDExMjM5OSwgMTEyNDA1LCAxMTI0MTIsIDExMjQxOSwgCisgICAgMTEyNDI2LCAxMTI0MzMsIDExMjQ0MCwgMTEyNDQ3LCAxMTI0NTYsIDExMjQ2NSwgMTEyNDc0LCAxMTI0ODMsIDExMjQ5MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNDk5LCAxMTI1MDUsIDExMjUxMCwgMTEyNTE1LCAxMTI1MjIsIAorICAgIDExMjUyOCwgMTEyNTM0LCAxMTI1NDAsIDExMjU0NiwgMTEyNTUyLCAxMTI1NTgsIDExMjU2NCwgMTEyNTY4LCAxMTI1NzIsIAorICAgIDExMjU3OCwgMTEyNTg0LCAxMTI1OTAsIDExMjU5NCwgMTEyNTk5LCAxMTI2MDQsIDExMjYwOCwgMTEyNjEyLCAxMTI2MTUsIAorICAgIDExMjYyMSwgMTEyNjI3LCAxMTI2MzMsIDExMjYzOSwgMTEyNjQ1LCAxMTI2NTEsIDExMjY1NywgMTEyNjYzLCAxMTI2NjksIAorICAgIDExMjY3OSwgMTEyNjg5LCAxMTI2OTUsIDExMjcwMSwgMTEyNzExLCAxMTI3MjEsIDExMjcyNywgMCwgMCwgMTEyNzMzLCAKKyAgICAxMTI3NDEsIDExMjc0NiwgMTEyNzUxLCAxMTI3NTcsIDExMjc2MywgMTEyNzY5LCAxMTI3NzUsIDExMjc4MSwgMTEyNzg3LCAKKyAgICAxMTI3OTQsIDExMjgwMSwgMTEyODA3LCAxMTI4MTMsIDExMjgxOSwgMTEyODI1LCAxMTI4MzEsIDExMjgzNywgMTEyODQzLCAKKyAgICAxMTI4NDksIDExMjg1NCwgMTEyODYwLCAxMTI4NjYsIDExMjg3MiwgMTEyODc4LCAxMTI4ODQsIDExMjg5MywgMTEyODk5LCAKKyAgICAxMTI5MDQsIDExMjkxMiwgMTEyOTE5LCAxMTI5MjYsIDExMjkzNSwgMTEyOTQ0LCAxMTI5NTMsIDExMjk2MiwgMTEyOTcxLCAKKyAgICAxMTI5ODAsIDExMjk4OSwgMTEyOTk4LCAxMTMwMDgsIDExMzAxOCwgMTEzMDI2LCAxMTMwMzQsIDExMzA0MywgMTEzMDUyLCAKKyAgICAxMTMwNTgsIDExMzA2NCwgMTEzMDcwLCAxMTMwNzYsIDExMzA4NCwgMTEzMDkyLCAxMTMwOTYsIDExMzEwMiwgMTEzMTA3LCAKKyAgICAxMTMxMTMsIDExMzExOSwgMTEzMTI1LCAxMTMxMzEsIDExMzEzNywgMTEzMTQ2LCAxMTMxNTEsIDExMzE1OCwgMTEzMTYzLCAKKyAgICAxMTMxNjgsIDExMzE3MywgMTEzMTc5LCAxMTMxODUsIDExMzE5MSwgMTEzMTk4LCAxMTMyMDMsIDExMzIwOCwgMTEzMjEzLCAKKyAgICAxMTMyMTgsIDExMzIyMywgMTEzMjI5LCAxMTMyMzUsIDExMzI0MSwgMTEzMjQ3LCAxMTMyNTMsIDExMzI1OSwgMTEzMjY1LCAKKyAgICAxMTMyNzEsIDExMzI3NiwgMTEzMjgxLCAxMTMyODYsIDExMzI5MSwgMTEzMjk2LCAxMTMzMDEsIDExMzMwNiwgMTEzMzExLCAKKyAgICAxMTMzMTcsIDExMzMyMywgMTEzMzI4LCAxMTMzMzMsIDExMzMzOCwgMTEzMzQzLCAxMTMzNDgsIDExMzM1NCwgMTEzMzYxLCAKKyAgICAxMTMzNjUsIDExMzM2OSwgMTEzMzczLCAxMTMzNzcsIDExMzM4MSwgMTEzMzg1LCAxMTMzODksIDExMzM5MywgMTEzNDAxLCAKKyAgICAxMTM0MTEsIDExMzQxNSwgMTEzNDE5LCAxMTM0MjUsIDExMzQzMSwgMTEzNDM3LCAxMTM0NDMsIDExMzQ0OSwgMTEzNDU1LCAKKyAgICAxMTM0NjEsIDExMzQ2NywgMTEzNDczLCAxMTM0NzksIDExMzQ4NSwgMTEzNDkxLCAxMTM0OTcsIDExMzUwMywgMTEzNTA3LCAKKyAgICAxMTM1MTEsIDExMzUxOCwgMTEzNTI0LCAxMTM1MzAsIDExMzUzNiwgMTEzNTQxLCAxMTM1NDgsIDExMzU1MywgMTEzNTU5LCAKKyAgICAxMTM1NjUsIDExMzU3MSwgMTEzNTc3LCAxMTM1ODIsIDExMzU4NiwgMTEzNTkyLCAxMTM1OTYsIDExMzYwMCwgMTEzNjA0LCAKKyAgICAxMTM2MTAsIDExMzYxNiwgMTEzNjIwLCAxMTM2MjYsIDExMzYzMiwgMTEzNjM4LCAxMTM2NDQsIDExMzY1MCwgMTEzNjU4LCAKKyAgICAxMTM2NjYsIDExMzY3MiwgMTEzNjc4LCAxMTM2ODQsIDExMzY5MCwgMTEzNzAyLCAxMTM3MTQsIDExMzcyOCwgMTEzNzQwLCAKKyAgICAxMTM3NTIsIDExMzc2NiwgMTEzNzgwLCAxMTM3OTQsIDExMzc5OCwgMTEzODA2LCAxMTM4MTQsIDExMzgxOSwgMTEzODIzLCAKKyAgICAxMTM4MjcsIDExMzgzMSwgMTEzODM1LCAxMTM4MzksIDExMzg0MywgMTEzODQ3LCAxMTM4NTMsIDExMzg1OSwgMTEzODY1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM4NzEsIDExMzg3NywgMTEzODgzLCAxMTM4ODksIDExMzg5NSwgCisgICAgMTEzOTAxLCAxMTM5MDcsIDExMzkxMywgMTEzOTE5LCAxMTM5MjUsIDExMzkzMSwgMTEzOTM3LCAxMTM5NDMsIDExMzk0OSwgCisgICAgMTEzOTU1LCAxMTM5NjEsIDExMzk2NywgMTEzOTczLCAxMTM5NzksIDExMzk4NSwgMTEzOTkxLCAxMTM5OTcsIDExNDAwMywgCisgICAgMTE0MDA5LCAxMTQwMTUsIDExNDAyMSwgMTE0MDI3LCAxMTQwMzMsIDExNDAzOSwgMTE0MDQ1LCAxMTQwNTEsIDExNDA1NywgCisgICAgMTE0MDYzLCAxMTQwNjksIDExNDA3NSwgMTE0MDgxLCAxMTQwODcsIDExNDA5MywgMTE0MDk5LCAxMTQxMDUsIDExNDExMSwgCisgICAgMTE0MTE3LCAxMTQxMjMsIDExNDEyOSwgMTE0MTM1LCAxMTQxNDEsIDExNDE0NywgMTE0MTUzLCAxMTQxNTksIDExNDE2NSwgCisgICAgMTE0MTcxLCAxMTQxNzcsIDExNDE4MywgMTE0MTg5LCAxMTQxOTUsIDExNDIwMSwgMTE0MjA3LCAxMTQyMTMsIDExNDIxOSwgCisgICAgMTE0MjI1LCAxMTQyMzEsIDExNDIzNywgMTE0MjQzLCAxMTQyNDksIDExNDI1NSwgMTE0MjYxLCAxMTQyNjcsIDExNDI3MiwgCisgICAgMTE0Mjc3LCAxMTQyODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDI4NiwgMTE0MjkxLCAxMTQyOTgsIAorICAgIDExNDMwNSwgMTE0MzEyLCAxMTQzMTksIDExNDMyNCwgMTE0MzI4LCAxMTQzMzQsIDExNDMzOCwgMTE0MzQyLCAxMTQzNDgsIAorICAgIDExNDM1MiwgMTE0MzU2LCAxMTQzNjAsIDExNDM2NiwgMTE0MzczLCAxMTQzNzcsIDExNDM4MSwgMTE0Mzg1LCAxMTQzODksIAorICAgIDExNDM5MywgMTE0Mzk3LCAxMTQ0MDMsIDExNDQwNywgMTE0NDExLCAxMTQ0MTUsIDExNDQxOSwgMTE0NDIzLCAxMTQ0MjcsIAorICAgIDExNDQzMSwgMTE0NDM1LCAxMTQ0MzksIDExNDQ0MywgMTE0NDQ3LCAxMTQ0NTEsIDExNDQ1NiwgMTE0NDYwLCAxMTQ0NjQsIAorICAgIDExNDQ2OCwgMTE0NDcyLCAxMTQ0NzYsIDExNDQ4MCwgMTE0NDg0LCAxMTQ0ODgsIDExNDQ5MiwgMTE0NDk5LCAxMTQ1MDMsIAorICAgIDExNDUxMSwgMTE0NTE1LCAxMTQ1MTksIDExNDUyMywgMTE0NTI3LCAxMTQ1MzEsIDExNDUzNSwgMTE0NTM5LCAxMTQ1NDYsIAorICAgIDExNDU1MCwgMTE0NTU0LCAxMTQ1NTgsIDExNDU2MiwgMTE0NTY2LCAxMTQ1NzIsIDExNDU3NiwgMTE0NTgyLCAxMTQ1ODYsIAorICAgIDExNDU5MCwgMTE0NTk0LCAxMTQ1OTgsIDExNDYwMiwgMTE0NjA2LCAxMTQ2MTAsIDExNDYxNCwgMTE0NjE4LCAxMTQ2MjIsIAorICAgIDExNDYyNiwgMTE0NjMwLCAxMTQ2MzQsIDExNDYzOCwgMTE0NjQyLCAxMTQ2NDYsIDExNDY1MCwgMTE0NjU0LCAxMTQ2NTgsIAorICAgIDExNDY2NiwgMTE0NjcwLCAxMTQ2NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDY3OCwgMTE0Njg2LCAKKyAgICAxMTQ2OTQsIDExNDcwMiwgMTE0NzEwLCAxMTQ3MTgsIDExNDcyNiwgMTE0NzM0LCAxMTQ3NDIsIDExNDc1MCwgMTE0NzU4LCAKKyAgICAxMTQ3NjYsIDExNDc3NCwgMTE0NzgyLCAxMTQ3OTAsIDExNDc5OCwgMTE0ODA2LCAxMTQ4MTQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDgyMiwgMTE0ODI2LCAxMTQ4MzEsIDExNDgzNiwgMTE0ODQxLCAxMTQ4NDUsIAorICAgIDExNDg1MCwgMTE0ODU1LCAxMTQ4NjAsIDExNDg2NCwgMTE0ODY5LCAxMTQ4NzQsIDExNDg3OCwgMTE0ODgyLCAxMTQ4ODcsIAorICAgIDExNDg5MSwgMTE0ODk2LCAxMTQ5MDEsIDExNDkwNSwgMTE0OTEwLCAxMTQ5MTUsIDExNDkxOSwgMTE0OTI0LCAxMTQ5MjksIAorICAgIDExNDkzNCwgMTE0OTM5LCAxMTQ5NDQsIDExNDk0OCwgMTE0OTUzLCAxMTQ5NTgsIDExNDk2MywgMTE0OTY3LCAxMTQ5NzIsIAorICAgIDExNDk3NywgMTE0OTgyLCAxMTQ5ODYsIDExNDk5MSwgMTE0OTk2LCAxMTUwMDAsIDExNTAwNCwgMTE1MDA5LCAxMTUwMTMsIAorICAgIDExNTAxOCwgMTE1MDIzLCAxMTUwMjcsIDExNTAzMiwgMTE1MDM3LCAxMTUwNDEsIDExNTA0NiwgMTE1MDUxLCAxMTUwNTYsIAorICAgIDExNTA2MSwgMTE1MDY2LCAxMTUwNzAsIDExNTA3NSwgMTE1MDgwLCAxMTUwODUsIDExNTA4OSwgMTE1MDk0LCAxMTUwOTksIAorICAgIDExNTEwNCwgMTE1MTA4LCAxMTUxMTMsIDExNTExOCwgMTE1MTIyLCAxMTUxMjYsIDExNTEzMSwgMTE1MTM1LCAxMTUxNDAsIAorICAgIDExNTE0NSwgMTE1MTQ5LCAxMTUxNTQsIDExNTE1OSwgMTE1MTYzLCAxMTUxNjgsIDExNTE3MywgMTE1MTc4LCAxMTUxODMsIAorICAgIDExNTE4OCwgMTE1MTkyLCAxMTUxOTcsIDExNTIwMiwgMTE1MjA3LCAxMTUyMTEsIDExNTIxNiwgMCwgMTE1MjIxLCAKKyAgICAxMTUyMjUsIDExNTIzMCwgMTE1MjM1LCAxMTUyMzksIDExNTI0MywgMTE1MjQ4LCAxMTUyNTIsIDExNTI1NywgMTE1MjYyLCAKKyAgICAxMTUyNjYsIDExNTI3MSwgMTE1Mjc2LCAxMTUyODAsIDExNTI4NSwgMTE1MjkwLCAxMTUyOTUsIDExNTMwMCwgMTE1MzA1LCAKKyAgICAxMTUzMTAsIDExNTMxNiwgMTE1MzIyLCAxMTUzMjgsIDExNTMzMywgMTE1MzM5LCAxMTUzNDUsIDExNTM1MSwgMTE1MzU2LCAKKyAgICAxMTUzNjIsIDExNTM2OCwgMTE1MzczLCAxMTUzNzgsIDExNTM4NCwgMTE1Mzg5LCAxMTUzOTUsIDExNTQwMSwgMTE1NDA2LCAKKyAgICAxMTU0MTIsIDExNTQxOCwgMTE1NDIzLCAxMTU0MjksIDExNTQzNSwgMTE1NDQxLCAxMTU0NDcsIDExNTQ1MywgMTE1NDU4LCAKKyAgICAxMTU0NjQsIDExNTQ3MCwgMTE1NDc2LCAxMTU0ODEsIDExNTQ4NywgMTE1NDkzLCAxMTU0OTksIDExNTUwNCwgMTE1NTEwLCAKKyAgICAxMTU1MTYsIDExNTUyMSwgMTE1NTI2LCAxMTU1MzIsIDExNTUzNywgMTE1NTQzLCAxMTU1NDksIDExNTU1NCwgMTE1NTYwLCAKKyAgICAxMTU1NjYsIDExNTU3MSwgMTE1NTc3LCAxMTU1ODMsIDExNTU4OSwgMTE1NTk1LCAxMTU2MDEsIDAsIDExNTYwNSwgCisgICAgMTE1NjEwLCAwLCAwLCAxMTU2MTUsIDAsIDAsIDExNTYyMCwgMTE1NjI1LCAwLCAwLCAxMTU2MzAsIDExNTYzNSwgMTE1NjM5LCAKKyAgICAxMTU2NDQsIDAsIDExNTY0OSwgMTE1NjU0LCAxMTU2NTksIDExNTY2MywgMTE1NjY4LCAxMTU2NzMsIDExNTY3OCwgCisgICAgMTE1NjgzLCAxMTU2ODgsIDExNTY5MiwgMTE1Njk3LCAxMTU3MDIsIDAsIDExNTcwNywgMCwgMTE1NzEyLCAxMTU3MTcsIAorICAgIDExNTcyMSwgMTE1NzI2LCAxMTU3MzEsIDExNTczNSwgMTE1NzM5LCAwLCAxMTU3NDQsIDExNTc0OSwgMTE1NzU0LCAKKyAgICAxMTU3NTgsIDExNTc2MywgMTE1NzY4LCAxMTU3NzIsIDExNTc3NywgMTE1NzgyLCAxMTU3ODcsIDExNTc5MiwgMTE1Nzk3LCAKKyAgICAxMTU4MDIsIDExNTgwOCwgMTE1ODE0LCAxMTU4MjAsIDExNTgyNSwgMTE1ODMxLCAxMTU4MzcsIDExNTg0MywgMTE1ODQ4LCAKKyAgICAxMTU4NTQsIDExNTg2MCwgMTE1ODY1LCAxMTU4NzAsIDExNTg3NiwgMTE1ODgxLCAxMTU4ODcsIDExNTg5MywgMTE1ODk4LCAKKyAgICAxMTU5MDQsIDExNTkxMCwgMTE1OTE1LCAxMTU5MjEsIDExNTkyNywgMTE1OTMzLCAxMTU5MzksIDExNTk0NSwgMTE1OTUwLCAKKyAgICAxMTU5NTYsIDExNTk2MiwgMTE1OTY4LCAxMTU5NzMsIDExNTk3OSwgMTE1OTg1LCAxMTU5OTEsIDExNTk5NiwgMTE2MDAyLCAKKyAgICAxMTYwMDgsIDExNjAxMywgMTE2MDE4LCAxMTYwMjQsIDExNjAyOSwgMTE2MDM1LCAxMTYwNDEsIDExNjA0NiwgMTE2MDUyLCAKKyAgICAxMTYwNTgsIDExNjA2MywgMTE2MDY5LCAxMTYwNzUsIDExNjA4MSwgMTE2MDg3LCAxMTYwOTMsIDExNjA5NywgMCwgCisgICAgMTE2MTAyLCAxMTYxMDcsIDExNjExMSwgMTE2MTE2LCAwLCAwLCAxMTYxMjEsIDExNjEyNiwgMTE2MTMxLCAxMTYxMzUsIAorICAgIDExNjEzOSwgMTE2MTQ0LCAxMTYxNDgsIDExNjE1MywgMCwgMTE2MTU4LCAxMTYxNjMsIDExNjE2OCwgMTE2MTcyLCAKKyAgICAxMTYxNzcsIDExNjE4MiwgMTE2MTg3LCAwLCAxMTYxOTIsIDExNjE5NiwgMTE2MjAxLCAxMTYyMDYsIDExNjIxMSwgCisgICAgMTE2MjE1LCAxMTYyMjAsIDExNjIyNSwgMTE2MjMwLCAxMTYyMzQsIDExNjIzOSwgMTE2MjQ0LCAxMTYyNDgsIDExNjI1MiwgCisgICAgMTE2MjU3LCAxMTYyNjEsIDExNjI2NiwgMTE2MjcxLCAxMTYyNzUsIDExNjI4MCwgMTE2Mjg1LCAxMTYyODksIDExNjI5NCwgCisgICAgMTE2Mjk5LCAxMTYzMDQsIDExNjMwOSwgMTE2MzE0LCAxMTYzMTgsIDAsIDExNjMyMywgMTE2MzI4LCAxMTYzMzIsIAorICAgIDExNjMzNywgMCwgMTE2MzQyLCAxMTYzNDYsIDExNjM1MSwgMTE2MzU2LCAxMTYzNjAsIDAsIDExNjM2NCwgMCwgMCwgMCwgCisgICAgMTE2MzY4LCAxMTYzNzMsIDExNjM3OCwgMTE2MzgyLCAxMTYzODcsIDExNjM5MiwgMTE2Mzk3LCAwLCAxMTY0MDIsIAorICAgIDExNjQwNiwgMTE2NDExLCAxMTY0MTYsIDExNjQyMSwgMTE2NDI1LCAxMTY0MzAsIDExNjQzNSwgMTE2NDQwLCAxMTY0NDQsIAorICAgIDExNjQ0OSwgMTE2NDU0LCAxMTY0NTgsIDExNjQ2MiwgMTE2NDY3LCAxMTY0NzEsIDExNjQ3NiwgMTE2NDgxLCAxMTY0ODUsIAorICAgIDExNjQ5MCwgMTE2NDk1LCAxMTY0OTksIDExNjUwNCwgMTE2NTA5LCAxMTY1MTQsIDExNjUxOSwgMTE2NTI0LCAxMTY1MjksIAorICAgIDExNjUzNSwgMTE2NTQxLCAxMTY1NDcsIDExNjU1MiwgMTE2NTU4LCAxMTY1NjQsIDExNjU3MCwgMTE2NTc1LCAxMTY1ODEsIAorICAgIDExNjU4NywgMTE2NTkyLCAxMTY1OTcsIDExNjYwMywgMTE2NjA4LCAxMTY2MTQsIDExNjYyMCwgMTE2NjI1LCAxMTY2MzEsIAorICAgIDExNjYzNywgMTE2NjQyLCAxMTY2NDgsIDExNjY1NCwgMTE2NjYwLCAxMTY2NjYsIDExNjY3MiwgMTE2Njc3LCAxMTY2ODMsIAorICAgIDExNjY4OSwgMTE2Njk1LCAxMTY3MDAsIDExNjcwNiwgMTE2NzEyLCAxMTY3MTgsIDExNjcyMywgMTE2NzI5LCAxMTY3MzUsIAorICAgIDExNjc0MCwgMTE2NzQ1LCAxMTY3NTEsIDExNjc1NiwgMTE2NzYyLCAxMTY3NjgsIDExNjc3MywgMTE2Nzc5LCAxMTY3ODUsIAorICAgIDExNjc5MCwgMTE2Nzk2LCAxMTY4MDIsIDExNjgwOCwgMTE2ODE0LCAxMTY4MjAsIDExNjgyNCwgMTE2ODI5LCAxMTY4MzQsIAorICAgIDExNjgzOSwgMTE2ODQzLCAxMTY4NDgsIDExNjg1MywgMTE2ODU4LCAxMTY4NjIsIDExNjg2NywgMTE2ODcyLCAxMTY4NzYsIAorICAgIDExNjg4MCwgMTE2ODg1LCAxMTY4ODksIDExNjg5NCwgMTE2ODk5LCAxMTY5MDMsIDExNjkwOCwgMTE2OTEzLCAxMTY5MTcsIAorICAgIDExNjkyMiwgMTE2OTI3LCAxMTY5MzIsIDExNjkzNywgMTE2OTQyLCAxMTY5NDYsIDExNjk1MSwgMTE2OTU2LCAxMTY5NjEsIAorICAgIDExNjk2NSwgMTE2OTcwLCAxMTY5NzUsIDExNjk4MCwgMTE2OTg0LCAxMTY5ODksIDExNjk5NCwgMTE2OTk4LCAxMTcwMDIsIAorICAgIDExNzAwNywgMTE3MDExLCAxMTcwMTYsIDExNzAyMSwgMTE3MDI1LCAxMTcwMzAsIDExNzAzNSwgMTE3MDM5LCAxMTcwNDQsIAorICAgIDExNzA0OSwgMTE3MDU0LCAxMTcwNTksIDExNzA2NCwgMTE3MDY5LCAxMTcwNzUsIDExNzA4MSwgMTE3MDg3LCAxMTcwOTIsIAorICAgIDExNzA5OCwgMTE3MTA0LCAxMTcxMTAsIDExNzExNSwgMTE3MTIxLCAxMTcxMjcsIDExNzEzMiwgMTE3MTM3LCAxMTcxNDMsIAorICAgIDExNzE0OCwgMTE3MTU0LCAxMTcxNjAsIDExNzE2NSwgMTE3MTcxLCAxMTcxNzcsIDExNzE4MiwgMTE3MTg4LCAxMTcxOTQsIAorICAgIDExNzIwMCwgMTE3MjA2LCAxMTcyMTIsIDExNzIxNywgMTE3MjIzLCAxMTcyMjksIDExNzIzNSwgMTE3MjQwLCAxMTcyNDYsIAorICAgIDExNzI1MiwgMTE3MjU4LCAxMTcyNjMsIDExNzI2OSwgMTE3Mjc1LCAxMTcyODAsIDExNzI4NSwgMTE3MjkxLCAxMTcyOTYsIAorICAgIDExNzMwMiwgMTE3MzA4LCAxMTczMTMsIDExNzMxOSwgMTE3MzI1LCAxMTczMzAsIDExNzMzNiwgMTE3MzQyLCAxMTczNDgsIAorICAgIDExNzM1NCwgMTE3MzYwLCAxMTczNjUsIDExNzM3MSwgMTE3Mzc3LCAxMTczODMsIDExNzM4OCwgMTE3Mzk0LCAxMTc0MDAsIAorICAgIDExNzQwNiwgMTE3NDExLCAxMTc0MTcsIDExNzQyMywgMTE3NDI4LCAxMTc0MzMsIDExNzQzOSwgMTE3NDQ0LCAxMTc0NTAsIAorICAgIDExNzQ1NiwgMTE3NDYxLCAxMTc0NjcsIDExNzQ3MywgMTE3NDc4LCAxMTc0ODQsIDExNzQ5MCwgMTE3NDk2LCAxMTc1MDIsIAorICAgIDExNzUwOCwgMTE3NTEzLCAxMTc1MTksIDExNzUyNSwgMTE3NTMxLCAxMTc1MzYsIDExNzU0MiwgMTE3NTQ4LCAxMTc1NTQsIAorICAgIDExNzU1OSwgMTE3NTY1LCAxMTc1NzEsIDExNzU3NiwgMTE3NTgxLCAxMTc1ODcsIDExNzU5MiwgMTE3NTk4LCAxMTc2MDQsIAorICAgIDExNzYwOSwgMTE3NjE1LCAxMTc2MjEsIDExNzYyNiwgMTE3NjMyLCAxMTc2MzgsIDExNzY0NCwgMTE3NjUwLCAxMTc2NTYsIAorICAgIDExNzY2MiwgMTE3NjY5LCAxMTc2NzYsIDExNzY4MywgMTE3Njg5LCAxMTc2OTYsIDExNzcwMywgMTE3NzEwLCAxMTc3MTYsIAorICAgIDExNzcyMywgMTE3NzMwLCAxMTc3MzYsIDExNzc0MiwgMTE3NzQ5LCAxMTc3NTUsIDExNzc2MiwgMTE3NzY5LCAxMTc3NzUsIAorICAgIDExNzc4MiwgMTE3Nzg5LCAxMTc3OTUsIDExNzgwMiwgMTE3ODA5LCAxMTc4MTYsIDExNzgyMywgMTE3ODMwLCAxMTc4MzYsIAorICAgIDExNzg0MywgMTE3ODUwLCAxMTc4NTcsIDExNzg2MywgMTE3ODcwLCAxMTc4NzcsIDExNzg4NCwgMTE3ODkwLCAxMTc4OTcsIAorICAgIDExNzkwNCwgMTE3OTEwLCAxMTc5MTYsIDExNzkyMywgMTE3OTI5LCAxMTc5MzYsIDExNzk0MywgMTE3OTQ5LCAxMTc5NTYsIAorICAgIDExNzk2MywgMTE3OTY5LCAxMTc5NzYsIDExNzk4MywgMTE3OTkwLCAxMTc5OTcsIDExODAwNCwgMTE4MDA5LCAxMTgwMTUsIAorICAgIDExODAyMSwgMTE4MDI3LCAxMTgwMzIsIDExODAzOCwgMTE4MDQ0LCAxMTgwNTAsIDExODA1NSwgMTE4MDYxLCAxMTgwNjcsIAorICAgIDExODA3MiwgMTE4MDc3LCAxMTgwODMsIDExODA4OCwgMTE4MDk0LCAxMTgxMDAsIDExODEwNSwgMTE4MTExLCAxMTgxMTcsIAorICAgIDExODEyMiwgMTE4MTI4LCAxMTgxMzQsIDExODE0MCwgMTE4MTQ2LCAxMTgxNTIsIDExODE1NywgMTE4MTYzLCAxMTgxNjksIAorICAgIDExODE3NSwgMTE4MTgwLCAxMTgxODYsIDExODE5MiwgMTE4MTk4LCAxMTgyMDMsIDExODIwOSwgMTE4MjE1LCAxMTgyMjAsIAorICAgIDExODIyNSwgMTE4MjMxLCAxMTgyMzYsIDExODI0MiwgMTE4MjQ4LCAxMTgyNTMsIDExODI1OSwgMTE4MjY1LCAxMTgyNzAsIAorICAgIDExODI3NiwgMTE4MjgyLCAxMTgyODgsIDExODI5NCwgMTE4MzAwLCAxMTgzMDYsIDAsIDAsIDExODMxMywgMTE4MzE4LCAKKyAgICAxMTgzMjMsIDExODMyOCwgMTE4MzMzLCAxMTgzMzgsIDExODM0MywgMTE4MzQ4LCAxMTgzNTMsIDExODM1OCwgMTE4MzYzLCAKKyAgICAxMTgzNjgsIDExODM3MywgMTE4Mzc4LCAxMTgzODMsIDExODM4OCwgMTE4MzkzLCAxMTgzOTgsIDExODQwNCwgMTE4NDA5LCAKKyAgICAxMTg0MTQsIDExODQxOSwgMTE4NDI0LCAxMTg0MjksIDExODQzNCwgMTE4NDM5LCAxMTg0NDMsIDExODQ0OCwgMTE4NDUzLCAKKyAgICAxMTg0NTgsIDExODQ2MywgMTE4NDY4LCAxMTg0NzMsIDExODQ3OCwgMTE4NDgzLCAxMTg0ODgsIDExODQ5MywgMTE4NDk4LCAKKyAgICAxMTg1MDMsIDExODUwOCwgMTE4NTEzLCAxMTg1MTgsIDExODUyMywgMTE4NTI4LCAxMTg1MzQsIDExODUzOSwgMTE4NTQ0LCAKKyAgICAxMTg1NDksIDExODU1NCwgMTE4NTU5LCAxMTg1NjQsIDExODU2OSwgMTE4NTc1LCAxMTg1ODAsIDExODU4NSwgMTE4NTkwLCAKKyAgICAxMTg1OTUsIDExODYwMCwgMTE4NjA1LCAxMTg2MTAsIDExODYxNSwgMTE4NjIwLCAxMTg2MjUsIDExODYzMCwgMTE4NjM1LCAKKyAgICAxMTg2NDAsIDExODY0NSwgMTE4NjUwLCAxMTg2NTUsIDExODY2MCwgMTE4NjY1LCAxMTg2NzAsIDExODY3NSwgMTE4NjgwLCAKKyAgICAxMTg2ODUsIDExODY5MCwgMTE4Njk2LCAxMTg3MDEsIDExODcwNiwgMTE4NzExLCAxMTg3MTYsIDExODcyMSwgMTE4NzI2LCAKKyAgICAxMTg3MzEsIDExODczNSwgMTE4NzQwLCAxMTg3NDUsIDExODc1MCwgMTE4NzU1LCAxMTg3NjAsIDExODc2NSwgMTE4NzcwLCAKKyAgICAxMTg3NzUsIDExODc4MCwgMTE4Nzg1LCAxMTg3OTAsIDExODc5NSwgMTE4ODAwLCAxMTg4MDUsIDExODgxMCwgMTE4ODE1LCAKKyAgICAxMTg4MjAsIDExODgyNiwgMTE4ODMxLCAxMTg4MzYsIDExODg0MSwgMTE4ODQ2LCAxMTg4NTEsIDExODg1NiwgMTE4ODYxLCAKKyAgICAxMTg4NjcsIDExODg3MiwgMTE4ODc3LCAxMTg4ODIsIDExODg4NywgMTE4ODkyLCAxMTg4OTcsIDExODkwMywgMTE4OTA5LCAKKyAgICAxMTg5MTUsIDExODkyMSwgMTE4OTI3LCAxMTg5MzMsIDExODkzOSwgMTE4OTQ1LCAxMTg5NTEsIDExODk1NywgMTE4OTYzLCAKKyAgICAxMTg5NjksIDExODk3NSwgMTE4OTgxLCAxMTg5ODcsIDExODk5MywgMTE4OTk5LCAxMTkwMDYsIDExOTAxMiwgMTE5MDE4LCAKKyAgICAxMTkwMjQsIDExOTAzMCwgMTE5MDM2LCAxMTkwNDIsIDExOTA0OCwgMTE5MDUzLCAxMTkwNTksIDExOTA2NSwgMTE5MDcxLCAKKyAgICAxMTkwNzcsIDExOTA4MywgMTE5MDg5LCAxMTkwOTUsIDExOTEwMSwgMTE5MTA3LCAxMTkxMTMsIDExOTExOSwgMTE5MTI1LCAKKyAgICAxMTkxMzEsIDExOTEzNywgMTE5MTQzLCAxMTkxNDksIDExOTE1NSwgMTE5MTYyLCAxMTkxNjgsIDExOTE3NCwgMTE5MTgwLCAKKyAgICAxMTkxODYsIDExOTE5MiwgMTE5MTk4LCAxMTkyMDQsIDExOTIxMSwgMTE5MjE3LCAxMTkyMjMsIDExOTIyOSwgMTE5MjM1LCAKKyAgICAxMTkyNDEsIDExOTI0NywgMTE5MjUzLCAxMTkyNTksIDExOTI2NSwgMTE5MjcxLCAxMTkyNzcsIDExOTI4MywgMTE5Mjg5LCAKKyAgICAxMTkyOTUsIDExOTMwMSwgMTE5MzA3LCAxMTkzMTMsIDExOTMxOSwgMTE5MzI1LCAxMTkzMzEsIDExOTMzNywgMTE5MzQzLCAKKyAgICAxMTkzNDksIDExOTM1NiwgMTE5MzYyLCAxMTkzNjgsIDExOTM3NCwgMTE5MzgwLCAxMTkzODYsIDExOTM5MiwgMTE5Mzk4LCAKKyAgICAxMTk0MDMsIDExOTQwOSwgMTE5NDE1LCAxMTk0MjEsIDExOTQyNywgMTE5NDMzLCAxMTk0MzksIDExOTQ0NSwgMTE5NDUxLCAKKyAgICAxMTk0NTcsIDExOTQ2MywgMTE5NDY5LCAxMTk0NzUsIDExOTQ4MSwgMTE5NDg3LCAxMTk0OTMsIDExOTQ5OSwgMTE5NTA1LCAKKyAgICAxMTk1MTIsIDExOTUxOCwgMTE5NTI0LCAxMTk1MzAsIDExOTUzNiwgMTE5NTQyLCAxMTk1NDgsIDExOTU1NCwgMTE5NTYxLCAKKyAgICAxMTk1NjcsIDExOTU3MywgMTE5NTc5LCAxMTk1ODUsIDExOTU5MSwgMTE5NTk3LCAxMTk2MDQsIDExOTYxMSwgMTE5NjE4LCAKKyAgICAxMTk2MjUsIDExOTYzMiwgMTE5NjM5LCAxMTk2NDYsIDExOTY1MywgMTE5NjYwLCAxMTk2NjcsIDExOTY3NCwgMTE5NjgxLCAKKyAgICAxMTk2ODgsIDExOTY5NSwgMTE5NzAyLCAxMTk3MDksIDExOTcxNiwgMTE5NzI0LCAxMTk3MzEsIDExOTczOCwgMTE5NzQ1LCAKKyAgICAxMTk3NTIsIDExOTc1OSwgMTE5NzY2LCAxMTk3NzMsIDExOTc3OSwgMTE5Nzg2LCAxMTk3OTMsIDExOTgwMCwgMTE5ODA3LCAKKyAgICAxMTk4MTQsIDExOTgyMSwgMTE5ODI4LCAxMTk4MzUsIDExOTg0MiwgMTE5ODQ5LCAxMTk4NTYsIDExOTg2MywgMTE5ODcwLCAKKyAgICAxMTk4NzcsIDExOTg4NCwgMTE5ODkxLCAxMTk4OTgsIDExOTkwNiwgMTE5OTEzLCAxMTk5MjAsIDExOTkyNywgMTE5OTM0LCAKKyAgICAxMTk5NDEsIDExOTk0OCwgMTE5OTU1LCAxMTk5NjMsIDExOTk3MCwgMTE5OTc3LCAxMTk5ODQsIDExOTk5MSwgMTE5OTk4LCAKKyAgICAxMjAwMDUsIDEyMDAxMCwgMCwgMCwgMTIwMDE1LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI4LCAxMjAwMzIsIDEyMDAzNiwgCisgICAgMTIwMDQwLCAxMjAwNDQsIDEyMDA0OCwgMTIwMDUyLCAxMjAwNTYsIDEyMDA2MSwgMTIwMDY1LCAxMjAwNjksIDEyMDA3MywgCisgICAgMTIwMDc3LCAxMjAwODEsIDEyMDA4NSwgMTIwMDg5LCAxMjAwOTMsIDEyMDA5NywgMTIwMTAyLCAxMjAxMDYsIDEyMDExMCwgCisgICAgMTIwMTE0LCAxMjAxMTgsIDEyMDEyMiwgMTIwMTI2LCAxMjAxMzAsIDEyMDEzNCwgMTIwMTM4LCAxMjAxNDQsIDEyMDE0OSwgCisgICAgMTIwMTU0LCAxMjAxNTksIDEyMDE2NCwgMTIwMTY5LCAxMjAxNzQsIDEyMDE3OSwgMTIwMTg0LCAxMjAxODksIDEyMDE5NSwgCisgICAgMTIwMjAwLCAxMjAyMDUsIDEyMDIxMCwgMTIwMjE1LCAxMjAyMjAsIDEyMDIyNSwgMTIwMjMwLCAxMjAyMzUsIDEyMDI0MCwgCisgICAgMTIwMjQ0LCAxMjAyNDgsIDEyMDI1MiwgMCwgMTIwMjU2LCAxMjAyNjAsIDEyMDI2NCwgMTIwMjY4LCAxMjAyNzIsIAogICAgIDEyMDI3NiwgMTIwMjgwLCAxMjAyODQsIDEyMDI4OCwgMTIwMjkyLCAxMjAyOTYsIDEyMDMwMCwgMTIwMzA0LCAxMjAzMDgsIAotICAgIDEyMDMxMiwgMTIwMzE2LCAxMjAzMjAsIDEyMDMyNiwgMTIwMzMyLCAxMjAzMzgsIDAsIDEyMDM0NCwgMTIwMzQ5LCAwLCAKLSAgICAxMjAzNTQsIDAsIDAsIDEyMDM1OSwgMCwgMTIwMzY0LCAxMjAzNjksIDEyMDM3NCwgMTIwMzc5LCAxMjAzODQsIDEyMDM4OSwgCi0gICAgMTIwMzk0LCAxMjAzOTksIDEyMDQwNCwgMTIwNDA5LCAwLCAxMjA0MTQsIDEyMDQxOSwgMTIwNDI0LCAxMjA0MjksIDAsIAotICAgIDEyMDQzNCwgMCwgMTIwNDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA0NDQsIDAsIDAsIDAsIDAsIDEyMDQ1MCwgMCwgCi0gICAgMTIwNDU2LCAwLCAxMjA0NjIsIDAsIDEyMDQ2OCwgMTIwNDc0LCAxMjA0ODAsIDAsIDEyMDQ4NiwgMTIwNDkyLCAwLCAKLSAgICAxMjA0OTgsIDAsIDAsIDEyMDUwNCwgMCwgMTIwNTEwLCAwLCAxMjA1MTYsIDAsIDEyMDUyMiwgMCwgMTIwNTMwLCAwLCAKLSAgICAxMjA1MzgsIDEyMDU0NCwgMCwgMTIwNTUwLCAwLCAwLCAxMjA1NTYsIDEyMDU2MiwgMTIwNTY4LCAxMjA1NzQsIDAsIAotICAgIDEyMDU4MCwgMTIwNTg2LCAxMjA1OTIsIDEyMDU5OCwgMTIwNjA0LCAxMjA2MTAsIDEyMDYxNiwgMCwgMTIwNjIyLCAKLSAgICAxMjA2MjgsIDEyMDYzNCwgMTIwNjQwLCAwLCAxMjA2NDYsIDEyMDY1MiwgMTIwNjU4LCAxMjA2NjQsIDAsIDEyMDY3MiwgMCwgCi0gICAgMTIwNjgwLCAxMjA2ODYsIDEyMDY5MiwgMTIwNjk4LCAxMjA3MDQsIDEyMDcxMCwgMTIwNzE2LCAxMjA3MjIsIDEyMDcyOCwgCi0gICAgMTIwNzM0LCAwLCAxMjA3NDAsIDEyMDc0NiwgMTIwNzUyLCAxMjA3NTgsIDEyMDc2NCwgMTIwNzcwLCAxMjA3NzYsIAotICAgIDEyMDc4MiwgMTIwNzg4LCAxMjA3OTQsIDEyMDgwMCwgMTIwODA2LCAxMjA4MTIsIDEyMDgxOCwgMTIwODI0LCAxMjA4MzAsIAotICAgIDEyMDgzNiwgMCwgMCwgMCwgMCwgMCwgMTIwODQyLCAxMjA4NDcsIDEyMDg1MiwgMCwgMTIwODU3LCAxMjA4NjIsIDEyMDg2NywgCi0gICAgMTIwODcyLCAxMjA4NzcsIDAsIDEyMDg4MiwgMTIwODg3LCAxMjA4OTIsIDEyMDg5NywgMTIwOTAyLCAxMjA5MDcsIAotICAgIDEyMDkxMiwgMTIwOTE3LCAxMjA5MjIsIDEyMDkyNywgMTIwOTMyLCAxMjA5MzcsIDEyMDk0MiwgMTIwOTQ3LCAxMjA5NTIsIAotICAgIDEyMDk1NywgMTIwOTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA5NjcsIDEyMDk3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTIwOTg1LCAxMjA5OTIsIDEyMDk5OSwgMTIxMDA2LCAxMjEwMTMsIDEyMTAyMCwgMTIxMDI3LCAKLSAgICAxMjEwMzMsIDEyMTA0MCwgMTIxMDQ3LCAxMjEwNTQsIDEyMTA2MiwgMTIxMDcwLCAxMjEwNzgsIDEyMTA4NiwgMTIxMDk0LCAKLSAgICAxMjExMDIsIDEyMTEwOSwgMTIxMTE2LCAxMjExMjMsIDEyMTEzMSwgMTIxMTM5LCAxMjExNDcsIDEyMTE1NSwgMTIxMTYzLCAKLSAgICAxMjExNzEsIDEyMTE3OCwgMTIxMTg1LCAxMjExOTIsIDEyMTIwMCwgMTIxMjA4LCAxMjEyMTYsIDEyMTIyNCwgMTIxMjMyLCAKLSAgICAxMjEyNDAsIDEyMTI0NSwgMTIxMjUwLCAxMjEyNTUsIDEyMTI2MCwgMTIxMjY1LCAxMjEyNzAsIDEyMTI3NSwgMTIxMjgwLCAKLSAgICAxMjEyODUsIDAsIDAsIDAsIDAsIDEyMTI5MCwgMTIxMjk1LCAxMjEyOTksIDEyMTMwMywgMTIxMzA3LCAxMjEzMTEsIAotICAgIDEyMTMxNSwgMTIxMzE5LCAxMjEzMjMsIDEyMTMyNywgMTIxMzMxLCAxMjEzMzUsIDEyMTMzOSwgMTIxMzQzLCAxMjEzNDcsIAotICAgIDEyMTM1MSwgMTIxMzU1LCAxMjEzNTksIDEyMTM2MywgMTIxMzY3LCAxMjEzNzEsIDEyMTM3NSwgMTIxMzc5LCAxMjEzODMsIAotICAgIDEyMTM4NywgMTIxMzkxLCAxMjEzOTUsIDEyMTM5OSwgMTIxNDAzLCAxMjE0MDcsIDEyMTQxMSwgMTIxNDE1LCAxMjE0MTksIAotICAgIDEyMTQyMywgMTIxNDI3LCAxMjE0MzEsIDEyMTQzNSwgMTIxNDM5LCAxMjE0NDMsIDEyMTQ0NywgMTIxNDUxLCAxMjE0NTUsIAotICAgIDEyMTQ1OSwgMTIxNDYzLCAxMjE0NjcsIDEyMTQ3MSwgMTIxNDc1LCAxMjE0NzksIDEyMTQ4MywgMTIxNDg3LCAxMjE0OTEsIAotICAgIDEyMTQ5NiwgMTIxNTAwLCAxMjE1MDQsIDEyMTUwOCwgMTIxNTEyLCAxMjE1MTYsIDEyMTUyMCwgMTIxNTI0LCAxMjE1MjgsIAotICAgIDEyMTUzMiwgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIAotICAgIDEyMTU2OCwgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIAotICAgIDEyMTYwNCwgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIAotICAgIDEyMTY0MCwgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIAotICAgIDEyMTY3NiwgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIxNjkyLCAxMjE2OTgsIDEyMTcwNywgMTIxNzE1LCAxMjE3MjMsIDEyMTczMiwgMTIxNzQxLCAxMjE3NTAsIDEyMTc1OSwgCi0gICAgMTIxNzY4LCAxMjE3NzcsIDEyMTc4NiwgMTIxNzk1LCAxMjE4MDQsIDEyMTgxMywgMCwgMCwgMTIxODIyLCAxMjE4MzEsIAotICAgIDEyMTgzOSwgMTIxODQ3LCAxMjE4NTYsIDEyMTg2NSwgMTIxODc0LCAxMjE4ODMsIDEyMTg5MiwgMTIxOTAxLCAxMjE5MTAsIAotICAgIDEyMTkxOSwgMTIxOTI4LCAxMjE5MzcsIDAsIDAsIDEyMTk0NiwgMTIxOTU1LCAxMjE5NjMsIDEyMTk3MSwgMTIxOTgwLCAKLSAgICAxMjE5ODksIDEyMTk5OCwgMTIyMDA3LCAxMjIwMTYsIDEyMjAyNSwgMTIyMDM0LCAxMjIwNDMsIDEyMjA1MiwgMTIyMDYxLCAKLSAgICAxMjIwNzAsIDAsIDEyMjA3NywgMTIyMDg2LCAxMjIwOTQsIDEyMjEwMiwgMTIyMTExLCAxMjIxMjAsIDEyMjEyOSwgCi0gICAgMTIyMTM4LCAxMjIxNDcsIDEyMjE1NiwgMTIyMTY1LCAxMjIxNzQsIDEyMjE4MywgMTIyMTkyLCAxMjIyMDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyMjIwOCwgMTIyMjE1LCAxMjIyMjAsIDEyMjIyNCwgMTIyMjI4LCAxMjIyMzIsIDEyMjIzNywgCi0gICAgMTIyMjQyLCAxMjIyNDcsIDEyMjI1MiwgMTIyMjU3LCAwLCAwLCAwLCAwLCAwLCAxMjIyNjIsIDEyMjI2NywgMTIyMjczLCAKLSAgICAxMjIyNzksIDEyMjI4NSwgMTIyMjkwLCAxMjIyOTYsIDEyMjMwMiwgMTIyMzA4LCAxMjIzMTMsIDEyMjMxOSwgMTIyMzI1LCAKLSAgICAxMjIzMzAsIDEyMjMzNSwgMTIyMzQxLCAxMjIzNDYsIDEyMjM1MiwgMTIyMzU4LCAxMjIzNjMsIDEyMjM2OSwgMTIyMzc1LCAKLSAgICAxMjIzODAsIDEyMjM4NiwgMTIyMzkyLCAxMjIzOTgsIDEyMjQwNCwgMTIyNDEwLCAxMjI0MjEsIDEyMjQyOCwgMTIyNDM0LCAKLSAgICAxMjI0MzcsIDAsIDEyMjQ0MCwgMTIyNDQ1LCAxMjI0NTEsIDEyMjQ1NywgMTIyNDYzLCAxMjI0NjgsIDEyMjQ3NCwgCi0gICAgMTIyNDgwLCAxMjI0ODYsIDEyMjQ5MSwgMTIyNDk3LCAxMjI1MDMsIDEyMjUwOCwgMTIyNTEzLCAxMjI1MTksIDEyMjUyNCwgCi0gICAgMTIyNTMwLCAxMjI1MzYsIDEyMjU0MSwgMTIyNTQ3LCAxMjI1NTMsIDEyMjU1OCwgMTIyNTY0LCAxMjI1NzAsIDEyMjU3NiwgCi0gICAgMTIyNTgyLCAxMjI1ODgsIDEyMjU5MSwgMTIyNTk0LCAxMjI1OTcsIDEyMjYwMCwgMTIyNjAzLCAxMjI2MDYsIDEyMjYxMiwgCi0gICAgMTIyNjE5LCAxMjI2MjYsIDEyMjYzMywgMTIyNjM5LCAxMjI2NDYsIDEyMjY1MywgMTIyNjYwLCAxMjI2NjYsIDEyMjY3MywgCi0gICAgMTIyNjgwLCAxMjI2ODYsIDEyMjY5MiwgMTIyNjk5LCAxMjI3MDUsIDEyMjcxMiwgMTIyNzE5LCAxMjI3MjUsIDEyMjczMiwgCi0gICAgMTIyNzM5LCAxMjI3NDUsIDEyMjc1MiwgMTIyNzU5LCAxMjI3NjYsIDEyMjc3MywgMTIyNzgwLCAxMjI3ODUsIDAsIDAsIDAsIAotICAgIDAsIDEyMjc5MCwgMTIyNzk2LCAxMjI4MDMsIDEyMjgxMCwgMTIyODE3LCAxMjI4MjMsIDEyMjgzMCwgMTIyODM3LCAKLSAgICAxMjI4NDQsIDEyMjg1MCwgMTIyODU3LCAxMjI4NjQsIDEyMjg3MCwgMTIyODc2LCAxMjI4ODMsIDEyMjg4OSwgMTIyODk2LCAKLSAgICAxMjI5MDMsIDEyMjkwOSwgMTIyOTE2LCAxMjI5MjMsIDEyMjkyOSwgMTIyOTM2LCAxMjI5NDMsIDEyMjk1MCwgMTIyOTU3LCAKLSAgICAxMjI5NjQsIDEyMjk3MywgMTIyOTc3LCAxMjI5ODAsIDEyMjk4MywgMTIyOTg3LCAxMjI5OTEsIDEyMjk5NCwgMTIyOTk3LCAKLSAgICAxMjMwMDAsIDEyMzAwMywgMTIzMDA2LCAxMjMwMDksIDEyMzAxMiwgMTIzMDE1LCAxMjMwMTgsIDEyMzAyNCwgMCwgMCwgMCwgCisgICAgMTIwMzEyLCAxMjAzMTYsIDEyMDMyMCwgMTIwMzI0LCAxMjAzMjgsIDEyMDMzMiwgMTIwMzM2LCAxMjAzNDAsIDEyMDM0NCwgCisgICAgMTIwMzQ4LCAxMjAzNTQsIDEyMDM2MCwgMTIwMzY2LCAwLCAxMjAzNzIsIDEyMDM3NywgMCwgMTIwMzgyLCAwLCAwLCAKKyAgICAxMjAzODcsIDAsIDEyMDM5MiwgMTIwMzk3LCAxMjA0MDIsIDEyMDQwNywgMTIwNDEyLCAxMjA0MTcsIDEyMDQyMiwgCisgICAgMTIwNDI3LCAxMjA0MzIsIDEyMDQzNywgMCwgMTIwNDQyLCAxMjA0NDcsIDEyMDQ1MiwgMTIwNDU3LCAwLCAxMjA0NjIsIDAsIAorICAgIDEyMDQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDcyLCAwLCAwLCAwLCAwLCAxMjA0NzgsIDAsIDEyMDQ4NCwgMCwgCisgICAgMTIwNDkwLCAwLCAxMjA0OTYsIDEyMDUwMiwgMTIwNTA4LCAwLCAxMjA1MTQsIDEyMDUyMCwgMCwgMTIwNTI2LCAwLCAwLCAKKyAgICAxMjA1MzIsIDAsIDEyMDUzOCwgMCwgMTIwNTQ0LCAwLCAxMjA1NTAsIDAsIDEyMDU1OCwgMCwgMTIwNTY2LCAxMjA1NzIsIDAsIAorICAgIDEyMDU3OCwgMCwgMCwgMTIwNTg0LCAxMjA1OTAsIDEyMDU5NiwgMTIwNjAyLCAwLCAxMjA2MDgsIDEyMDYxNCwgMTIwNjIwLCAKKyAgICAxMjA2MjYsIDEyMDYzMiwgMTIwNjM4LCAxMjA2NDQsIDAsIDEyMDY1MCwgMTIwNjU2LCAxMjA2NjIsIDEyMDY2OCwgMCwgCisgICAgMTIwNjc0LCAxMjA2ODAsIDEyMDY4NiwgMTIwNjkyLCAwLCAxMjA3MDAsIDAsIDEyMDcwOCwgMTIwNzE0LCAxMjA3MjAsIAorICAgIDEyMDcyNiwgMTIwNzMyLCAxMjA3MzgsIDEyMDc0NCwgMTIwNzUwLCAxMjA3NTYsIDEyMDc2MiwgMCwgMTIwNzY4LCAKKyAgICAxMjA3NzQsIDEyMDc4MCwgMTIwNzg2LCAxMjA3OTIsIDEyMDc5OCwgMTIwODA0LCAxMjA4MTAsIDEyMDgxNiwgMTIwODIyLCAKKyAgICAxMjA4MjgsIDEyMDgzNCwgMTIwODQwLCAxMjA4NDYsIDEyMDg1MiwgMTIwODU4LCAxMjA4NjQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyMDg3MCwgMTIwODc1LCAxMjA4ODAsIDAsIDEyMDg4NSwgMTIwODkwLCAxMjA4OTUsIDEyMDkwMCwgMTIwOTA1LCAwLCAKKyAgICAxMjA5MTAsIDEyMDkxNSwgMTIwOTIwLCAxMjA5MjUsIDEyMDkzMCwgMTIwOTM1LCAxMjA5NDAsIDEyMDk0NSwgMTIwOTUwLCAKKyAgICAxMjA5NTUsIDEyMDk2MCwgMTIwOTY1LCAxMjA5NzAsIDEyMDk3NSwgMTIwOTgwLCAxMjA5ODUsIDEyMDk5MCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTIwOTk1LCAxMjEwMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTAxMywgCisgICAgMTIxMDIwLCAxMjEwMjcsIDEyMTAzNCwgMTIxMDQxLCAxMjEwNDgsIDEyMTA1NSwgMTIxMDYxLCAxMjEwNjgsIDEyMTA3NSwgCisgICAgMTIxMDgyLCAxMjEwOTAsIDEyMTA5OCwgMTIxMTA2LCAxMjExMTQsIDEyMTEyMiwgMTIxMTMwLCAxMjExMzcsIDEyMTE0NCwgCisgICAgMTIxMTUxLCAxMjExNTksIDEyMTE2NywgMTIxMTc1LCAxMjExODMsIDEyMTE5MSwgMTIxMTk5LCAxMjEyMDYsIDEyMTIxMywgCisgICAgMTIxMjIwLCAxMjEyMjgsIDEyMTIzNiwgMTIxMjQ0LCAxMjEyNTIsIDEyMTI2MCwgMTIxMjY4LCAxMjEyNzMsIDEyMTI3OCwgCisgICAgMTIxMjgzLCAxMjEyODgsIDEyMTI5MywgMTIxMjk4LCAxMjEzMDMsIDEyMTMwOCwgMTIxMzEzLCAwLCAwLCAwLCAwLCAKKyAgICAxMjEzMTgsIDEyMTMyMywgMTIxMzI3LCAxMjEzMzEsIDEyMTMzNSwgMTIxMzM5LCAxMjEzNDMsIDEyMTM0NywgMTIxMzUxLCAKKyAgICAxMjEzNTUsIDEyMTM1OSwgMTIxMzYzLCAxMjEzNjcsIDEyMTM3MSwgMTIxMzc1LCAxMjEzNzksIDEyMTM4MywgMTIxMzg3LCAKKyAgICAxMjEzOTEsIDEyMTM5NSwgMTIxMzk5LCAxMjE0MDMsIDEyMTQwNywgMTIxNDExLCAxMjE0MTUsIDEyMTQxOSwgMTIxNDIzLCAKKyAgICAxMjE0MjcsIDEyMTQzMSwgMTIxNDM1LCAxMjE0MzksIDEyMTQ0MywgMTIxNDQ3LCAxMjE0NTEsIDEyMTQ1NSwgMTIxNDU5LCAKKyAgICAxMjE0NjMsIDEyMTQ2NywgMTIxNDcxLCAxMjE0NzUsIDEyMTQ3OSwgMTIxNDgzLCAxMjE0ODcsIDEyMTQ5MSwgMTIxNDk1LCAKKyAgICAxMjE0OTksIDEyMTUwMywgMTIxNTA3LCAxMjE1MTEsIDEyMTUxNSwgMTIxNTE5LCAxMjE1MjQsIDEyMTUyOCwgMTIxNTMyLCAKKyAgICAxMjE1MzYsIDEyMTU0MCwgMTIxNTQ0LCAxMjE1NDgsIDEyMTU1MiwgMTIxNTU2LCAxMjE1NjAsIDEyMTU2NCwgMTIxNTY4LCAKKyAgICAxMjE1NzIsIDEyMTU3NiwgMTIxNTgwLCAxMjE1ODQsIDEyMTU4OCwgMTIxNTkyLCAxMjE1OTYsIDEyMTYwMCwgMTIxNjA0LCAKKyAgICAxMjE2MDgsIDEyMTYxMiwgMTIxNjE2LCAxMjE2MjAsIDEyMTYyNCwgMTIxNjI4LCAxMjE2MzIsIDEyMTYzNiwgMTIxNjQwLCAKKyAgICAxMjE2NDQsIDEyMTY0OCwgMTIxNjUyLCAxMjE2NTYsIDEyMTY2MCwgMTIxNjY0LCAxMjE2NjgsIDEyMTY3MiwgMTIxNjc2LCAKKyAgICAxMjE2ODAsIDEyMTY4NCwgMTIxNjg4LCAxMjE2OTIsIDEyMTY5NiwgMTIxNzAwLCAxMjE3MDQsIDEyMTcwOCwgMTIxNzEyLCAKKyAgICAxMjE3MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTcyMCwgMTIxNzI2LCAxMjE3MzUsIAorICAgIDEyMTc0MywgMTIxNzUxLCAxMjE3NjAsIDEyMTc2OSwgMTIxNzc4LCAxMjE3ODcsIDEyMTc5NiwgMTIxODA1LCAxMjE4MTQsIAorICAgIDEyMTgyMywgMTIxODMyLCAxMjE4NDEsIDAsIDAsIDEyMTg1MCwgMTIxODU5LCAxMjE4NjcsIDEyMTg3NSwgMTIxODg0LCAKKyAgICAxMjE4OTMsIDEyMTkwMiwgMTIxOTExLCAxMjE5MjAsIDEyMTkyOSwgMTIxOTM4LCAxMjE5NDcsIDEyMTk1NiwgMTIxOTY1LCAKKyAgICAwLCAwLCAxMjE5NzQsIDEyMTk4MywgMTIxOTkxLCAxMjE5OTksIDEyMjAwOCwgMTIyMDE3LCAxMjIwMjYsIDEyMjAzNSwgCisgICAgMTIyMDQ0LCAxMjIwNTMsIDEyMjA2MiwgMTIyMDcxLCAxMjIwODAsIDEyMjA4OSwgMTIyMDk4LCAwLCAxMjIxMDUsIAorICAgIDEyMjExNCwgMTIyMTIyLCAxMjIxMzAsIDEyMjEzOSwgMTIyMTQ4LCAxMjIxNTcsIDEyMjE2NiwgMTIyMTc1LCAxMjIxODQsIAorICAgIDEyMjE5MywgMTIyMjAyLCAxMjIyMTEsIDEyMjIyMCwgMTIyMjI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjIyMzYsIAorICAgIDEyMjI0MywgMTIyMjQ4LCAxMjIyNTIsIDEyMjI1NiwgMTIyMjYwLCAxMjIyNjUsIDEyMjI3MCwgMTIyMjc1LCAxMjIyODAsIAorICAgIDEyMjI4NSwgMCwgMCwgMCwgMCwgMCwgMTIyMjkwLCAxMjIyOTUsIDEyMjMwMSwgMTIyMzA3LCAxMjIzMTMsIDEyMjMxOCwgCisgICAgMTIyMzI0LCAxMjIzMzAsIDEyMjMzNiwgMTIyMzQxLCAxMjIzNDcsIDEyMjM1MywgMTIyMzU4LCAxMjIzNjMsIDEyMjM2OSwgCisgICAgMTIyMzc0LCAxMjIzODAsIDEyMjM4NiwgMTIyMzkxLCAxMjIzOTcsIDEyMjQwMywgMTIyNDA4LCAxMjI0MTQsIDEyMjQyMCwgCisgICAgMTIyNDI2LCAxMjI0MzIsIDEyMjQzOCwgMTIyNDQ5LCAxMjI0NTYsIDEyMjQ2MiwgMTIyNDY1LCAwLCAxMjI0NjgsIAorICAgIDEyMjQ3MywgMTIyNDc5LCAxMjI0ODUsIDEyMjQ5MSwgMTIyNDk2LCAxMjI1MDIsIDEyMjUwOCwgMTIyNTE0LCAxMjI1MTksIAorICAgIDEyMjUyNSwgMTIyNTMxLCAxMjI1MzYsIDEyMjU0MSwgMTIyNTQ3LCAxMjI1NTIsIDEyMjU1OCwgMTIyNTY0LCAxMjI1NjksIAorICAgIDEyMjU3NSwgMTIyNTgxLCAxMjI1ODYsIDEyMjU5MiwgMTIyNTk4LCAxMjI2MDQsIDEyMjYxMCwgMTIyNjE2LCAxMjI2MTksIAorICAgIDEyMjYyMiwgMTIyNjI1LCAxMjI2MjgsIDEyMjYzMSwgMTIyNjM0LCAxMjI2NDAsIDEyMjY0NywgMTIyNjU0LCAxMjI2NjEsIAorICAgIDEyMjY2NywgMTIyNjc0LCAxMjI2ODEsIDEyMjY4OCwgMTIyNjk0LCAxMjI3MDEsIDEyMjcwOCwgMTIyNzE0LCAxMjI3MjAsIAorICAgIDEyMjcyNywgMTIyNzMzLCAxMjI3NDAsIDEyMjc0NywgMTIyNzUzLCAxMjI3NjAsIDEyMjc2NywgMTIyNzczLCAxMjI3ODAsIAorICAgIDEyMjc4NywgMTIyNzk0LCAxMjI4MDEsIDEyMjgwOCwgMTIyODEzLCAwLCAwLCAwLCAwLCAxMjI4MTgsIDEyMjgyNCwgCisgICAgMTIyODMxLCAxMjI4MzgsIDEyMjg0NSwgMTIyODUxLCAxMjI4NTgsIDEyMjg2NSwgMTIyODcyLCAxMjI4NzgsIDEyMjg4NSwgCisgICAgMTIyODkyLCAxMjI4OTgsIDEyMjkwNCwgMTIyOTExLCAxMjI5MTcsIDEyMjkyNCwgMTIyOTMxLCAxMjI5MzcsIDEyMjk0NCwgCisgICAgMTIyOTUxLCAxMjI5NTcsIDEyMjk2NCwgMTIyOTcxLCAxMjI5NzgsIDEyMjk4NSwgMTIyOTkyLCAxMjMwMDEsIDEyMzAwNSwgCisgICAgMTIzMDA4LCAxMjMwMTEsIDEyMzAxNSwgMTIzMDE5LCAxMjMwMjIsIDEyMzAyNSwgMTIzMDI4LCAxMjMwMzEsIDEyMzAzNCwgCisgICAgMTIzMDM3LCAxMjMwNDAsIDEyMzA0MywgMTIzMDQ2LCAxMjMwNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMzAyNywgMTIzMDM0LCAxMjMwNDIsIDEyMzA1MCwgMTIzMDU4LCAxMjMwNjUsIDEyMzA3MywgMTIzMDgxLCAxMjMwODksIAotICAgIDEyMzA5NiwgMTIzMTA0LCAxMjMxMTIsIDEyMzExOSwgMTIzMTI2LCAxMjMxMzQsIDEyMzE0MSwgMTIzMTQ5LCAxMjMxNTcsIAotICAgIDEyMzE2NCwgMTIzMTcyLCAxMjMxODAsIDEyMzE4NywgMTIzMTk1LCAxMjMyMDMsIDEyMzIxMSwgMTIzMjE5LCAxMjMyMjcsIAotICAgIDEyMzIzMSwgMTIzMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMyMzgsIDEyMzI0NCwgCi0gICAgMTIzMjUwLCAxMjMyNTYsIDEyMzI2MCwgMTIzMjY2LCAxMjMyNzIsIDEyMzI3OCwgMTIzMjg0LCAxMjMyOTAsIDEyMzI5NiwgCi0gICAgMTIzMzAyLCAxMjMzMDgsIDEyMzMxNCwgMTIzMzIwLCAxMjMzMjYsIDEyMzMzMiwgMTIzMzM4LCAxMjMzNDQsIDEyMzM1MCwgCi0gICAgMTIzMzU2LCAxMjMzNjIsIDEyMzM2OCwgMTIzMzc0LCAxMjMzODAsIDEyMzM4NiwgMTIzMzkyLCAxMjMzOTgsIDEyMzQwNCwgCi0gICAgMTIzNDEwLCAxMjM0MTYsIDEyMzQyMiwgMTIzNDI4LCAxMjM0MzQsIDEyMzQ0MCwgMTIzNDQ2LCAxMjM0NTIsIDEyMzQ1OCwgCi0gICAgMTIzNDY0LCAxMjM0NzAsIDEyMzQ3NiwgMTIzNDgyLCAxMjM0ODgsIDAsIDAsIDAsIDAsIDAsIDEyMzQ5NCwgMTIzNTA1LCAKLSAgICAxMjM1MTYsIDEyMzUyNywgMTIzNTM4LCAxMjM1NDksIDEyMzU2MCwgMTIzNTcxLCAxMjM1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyMzU5MywgMTIzNTk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMjM2MDEsIDEyMzYwMywgMTIzNjA1LCAxMjM2MDksIDEyMzYxNCwgMTIzNjE5LCAxMjM2MjEsIAotICAgIDEyMzYyNywgMTIzNjMyLCAxMjM2MzQsIDEyMzY0MCwgMTIzNjQ0LCAxMjM2NDYsIDEyMzY1MCwgMTIzNjU2LCAxMjM2NjIsIAotICAgIDEyMzY2OCwgMTIzNjczLCAxMjM2NzcsIDEyMzY4NCwgMTIzNjkxLCAxMjM2OTgsIDEyMzcwMywgMTIzNzEwLCAxMjM3MTcsIAotICAgIDEyMzcyNCwgMTIzNzI4LCAxMjM3MzQsIDEyMzc0MywgMTIzNzUyLCAxMjM3NTksIDEyMzc2NCwgMTIzNzY4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM3NzIsIDEyMzc3NCwgMTIzNzc2LCAxMjM3ODAsIAotICAgIDEyMzc4NCwgMTIzNzg4LCAwLCAxMjM3OTAsIDEyMzc5MiwgMTIzNzk2LCAxMjM3OTgsIDEyMzgwMCwgMTIzODAyLCAKLSAgICAxMjM4MDQsIDEyMzgwOSwgMTIzODE0LCAxMjM4MTYsIDEyMzgyMiwgMTIzODI2LCAxMjM4MzAsIDEyMzgzOCwgMTIzODQwLCAKLSAgICAxMjM4NDIsIDEyMzg0NCwgMTIzODQ2LCAxMjM4NDgsIDEyMzg1MCwgMTIzODUyLCAxMjM4NTQsIDEyMzg1NiwgMTIzODU4LCAKLSAgICAxMjM4NjIsIDEyMzg2NiwgMTIzODY4LCAxMjM4NzAsIDEyMzg3MiwgMTIzODc0LCAxMjM4NzYsIDEyMzg4MSwgMTIzODg3LCAKLSAgICAxMjM4OTEsIDEyMzg5NSwgMTIzODk5LCAxMjM5MDMsIDEyMzkwOCwgMTIzOTEyLCAxMjM5MTQsIDEyMzkxNiwgMTIzOTIwLCAKLSAgICAxMjM5MjYsIDEyMzkyOCwgMTIzOTMwLCAxMjM5MzIsIDEyMzkzNiwgMTIzOTQ1LCAxMjM5NTEsIDEyMzk1NSwgMTIzOTU5LCAKLSAgICAxMjM5NjEsIDEyMzk2MywgMTIzOTY2LCAxMjM5NjgsIDEyMzk3MCwgMTIzOTcyLCAxMjM5NzYsIDEyMzk3OCwgMTIzOTgyLCAKLSAgICAxMjM5ODcsIDEyMzk4OSwgMTIzOTk0LCAxMjQwMDAsIDEyNDAwNywgMTI0MDExLCAxMjQwMTUsIDEyNDAxOSwgMTI0MDIzLCAKLSAgICAxMjQwMjksIDAsIDAsIDAsIDEyNDAzMywgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ1LCAxMjQwNDksIDEyNDA1MywgCi0gICAgMTI0MDU1LCAxMjQwNTksIDEyNDA2MSwgMTI0MDY1LCAxMjQwNjksIDEyNDA3MywgMTI0MDc3LCAxMjQwODEsIDEyNDA4NSwgCi0gICAgMTI0MDg5LCAxMjQwOTMsIDEyNDA5OSwgMTI0MTAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjQxMDcsIDEyNDExMSwgMTI0MTE1LCAxMjQxMTksIDEyNDEyNiwgMTI0MTI4LCAxMjQxMzIsIDEyNDEzNCwgMTI0MTM2LCAKLSAgICAxMjQxNDAsIDEyNDE0NCwgMTI0MTQ4LCAxMjQxNTAsIDEyNDE1NCwgMTI0MTU4LCAxMjQxNjIsIDEyNDE2NiwgMTI0MTcwLCAKLSAgICAxMjQxNzIsIDEyNDE3NiwgMTI0MTc4LCAxMjQxODQsIDEyNDE4NywgMTI0MTkyLCAxMjQxOTQsIDEyNDE5NiwgMTI0MTk5LCAKLSAgICAxMjQyMDEsIDEyNDIwMywgMTI0MjA2LCAxMjQyMTMsIDEyNDIyMCwgMTI0MjI3LCAxMjQyMzIsIDEyNDIzNiwgMTI0MjM4LCAKLSAgICAxMjQyNDAsIDAsIDEyNDI0MiwgMTI0MjQ0LCAxMjQyNDgsIDEyNDI1MiwgMTI0MjU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQyNTgsIDEyNDI2MiwgMTI0MjY3LCAxMjQyNzEsIAotICAgIDEyNDI3NywgMTI0MjgzLCAxMjQyODUsIDEyNDI4NywgMTI0MjkzLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzAzLCAxMjQzMDUsIAotICAgIDEyNDMwOSwgMTI0MzExLCAxMjQzMTUsIDEyNDMxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI0MzIzLCAxMjQzMjUsIDEyNDMyNywgMTI0MzI5LCAxMjQzMzMsIDEyNDMzNSwgMTI0MzM3LCAxMjQzMzksIAotICAgIDEyNDM0MSwgMTI0MzQzLCAxMjQzNDUsIDEyNDM0NywgMTI0MzQ5LCAxMjQzNTEsIDEyNDM1MywgMTI0MzU1LCAxMjQzNTcsIAotICAgIDEyNDM1OSwgMTI0MzYxLCAxMjQzNjMsIDEyNDM2NSwgMTI0MzY3LCAxMjQzNjksIDEyNDM3MSwgMTI0MzczLCAxMjQzNzUsIAotICAgIDEyNDM3NywgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzOTEsIDEyNDM5MywgMTI0Mzk3LCAxMjQzOTksIAotICAgIDEyNDQwMSwgMTI0NDA1LCAxMjQ0MDksIDEyNDQxNSwgMTI0NDE3LCAxMjQ0MTksIDEyNDQyMSwgMTI0NDIzLCAxMjQ0MjcsIAotICAgIDEyNDQzMSwgMTI0NDMzLCAxMjQ0MzcsIDEyNDQ0MSwgMTI0NDQ1LCAxMjQ0NDksIDEyNDQ1MywgMTI0NDU3LCAxMjQ0NjEsIAotICAgIDEyNDQ2NSwgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIAotICAgIDEyNDUwMSwgMCwgMTI0NTA1LCAwLCAxMjQ1MDcsIDEyNDUwOSwgMTI0NTExLCAxMjQ1MTMsIDEyNDUxNSwgMTI0NTIzLCAKLSAgICAxMjQ1MzEsIDEyNDUzOSwgMTI0NTQ3LCAxMjQ1NTIsIDEyNDU1NywgMTI0NTYyLCAxMjQ1NjYsIDEyNDU3MCwgMTI0NTc1LCAKLSAgICAxMjQ1NzksIDEyNDU4MSwgMTI0NTg1LCAxMjQ1ODcsIDEyNDU4OSwgMTI0NTkxLCAxMjQ1OTMsIDEyNDU5NSwgMTI0NTk3LCAKLSAgICAxMjQ1OTksIDEyNDYwMywgMTI0NjA1LCAxMjQ2MDcsIDEyNDYwOSwgMTI0NjEzLCAxMjQ2MTcsIDEyNDYyMSwgMTI0NjI1LCAKLSAgICAxMjQ2MjksIDEyNDYzMSwgMTI0NjM3LCAxMjQ2NDMsIDEyNDY0NSwgMTI0NjQ3LCAxMjQ2NDksIDEyNDY1MSwgMTI0NjUzLCAKLSAgICAxMjQ2NjIsIDEyNDY2OSwgMTI0Njc2LCAxMjQ2ODAsIDEyNDY4NywgMTI0NjkyLCAxMjQ2OTksIDEyNDcwOCwgMTI0NzEzLCAKLSAgICAxMjQ3MTcsIDEyNDcyMSwgMTI0NzIzLCAxMjQ3MjcsIDEyNDcyOSwgMTI0NzMzLCAxMjQ3MzcsIDEyNDczOSwgMTI0NzQzLCAKLSAgICAxMjQ3NDcsIDEyNDc1MSwgMTI0NzUzLCAxMjQ3NTUsIDEyNDc2MSwgMTI0NzYzLCAxMjQ3NjUsIDEyNDc2NywgMTI0NzcxLCAKLSAgICAxMjQ3NzUsIDEyNDc3NywgMTI0NzgxLCAxMjQ3ODMsIDEyNDc4NSwgMTI0Nzg4LCAxMjQ3OTIsIDEyNDc5NCwgMTI0Nzk4LCAKLSAgICAxMjQ4MDAsIDEyNDgwMiwgMTI0ODA3LCAxMjQ4MDksIDEyNDgxMywgMTI0ODE3LCAxMjQ4MjAsIDEyNDgyNCwgMTI0ODI4LCAKLSAgICAxMjQ4MzIsIDEyNDgzNiwgMTI0ODQwLCAxMjQ4NDQsIDEyNDg0OCwgMTI0ODUzLCAxMjQ4NTcsIDEyNDg2MSwgMTI0ODcwLCAKLSAgICAxMjQ4NzUsIDEyNDg3OCwgMTI0ODgwLCAxMjQ4ODMsIDEyNDg4NiwgMTI0ODkxLCAxMjQ4OTMsIDEyNDg5NiwgMTI0OTAxLCAKLSAgICAxMjQ5MDUsIDEyNDkwOCwgMTI0OTEyLCAxMjQ5MTYsIDEyNDkxOSwgMTI0OTI0LCAxMjQ5MjgsIDEyNDkzMiwgMTI0OTM2LCAKLSAgICAxMjQ5NDAsIDEyNDk0NiwgMTI0OTUyLCAxMjQ5NTgsIDEyNDk2NCwgMTI0OTY5LCAxMjQ5ODAsIDEyNDk4MiwgMTI0OTg2LCAKLSAgICAxMjQ5ODgsIDEyNDk5MCwgMTI0OTk0LCAxMjQ5OTgsIDEyNTAwMCwgMTI1MDA0LCAxMjUwMDksIDEyNTAxNCwgMTI1MDIwLCAKLSAgICAxMjUwMjIsIDEyNTAyNiwgMTI1MDMwLCAxMjUwMzcsIDEyNTA0NCwgMTI1MDQ4LCAxMjUwNTAsIDEyNTA1MiwgMTI1MDU2LCAKLSAgICAxMjUwNTgsIDEyNTA2MiwgMTI1MDY2LCAxMjUwNzAsIDEyNTA3MiwgMTI1MDc0LCAxMjUwODEsIDEyNTA4NSwgMTI1MDg4LCAKLSAgICAxMjUwOTIsIDEyNTA5NiwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwNiwgMTI1MTA4LCAxMjUxMTAsIDEyNTExNCwgMTI1MTE2LCAKLSAgICAxMjUxMjAsIDEyNTEyNCwgMTI1MTMwLCAxMjUxMzQsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0NywgMTI1MTUxLCAKLSAgICAxMjUxNTgsIDEyNTE2NywgMTI1MTc2LCAxMjUxODQsIDEyNTE5MiwgMTI1MTk0LCAxMjUxOTgsIDEyNTIwMCwgMTI1MjA0LCAKLSAgICAxMjUyMTUsIDEyNTIxOSwgMTI1MjI1LCAxMjUyMzEsIDEyNTIzNiwgMCwgMTI1MjM4LCAxMjUyNDIsIDEyNTI0NCwgCi0gICAgMTI1MjQ2LCAwLCAwLCAwLCAxMjUyNDgsIDEyNTI1MywgMTI1MjYzLCAxMjUyNzgsIDEyNTI5MCwgMTI1MzAyLCAxMjUzMDYsIAotICAgIDEyNTMxMCwgMTI1MzE2LCAxMjUzMTgsIDEyNTMyNiwgMTI1MzM0LCAxMjUzMzYsIDEyNTM0MCwgMTI1MzQ2LCAxMjUzNTIsIAotICAgIDEyNTM1OSwgMTI1MzY2LCAxMjUzNjgsIDEyNTM3MCwgMTI1MzczLCAxMjUzNzUsIDEyNTM4MSwgMTI1MzgzLCAxMjUzODYsIAotICAgIDEyNTM5MCwgMTI1Mzk2LCAxMjU0MDIsIDEyNTQxMywgMTI1NDE5LCAxMjU0MjYsIDEyNTQzNCwgMTI1NDM4LCAxMjU0NDYsIAotICAgIDEyNTQ1NCwgMTI1NDYwLCAxMjU0NjYsIDEyNTQ3MywgMTI1NDc1LCAxMjU0NzksIDEyNTQ4MSwgMTI1NDgzLCAxMjU0ODgsIAotICAgIDEyNTQ5MCwgMTI1NDkyLCAxMjU0OTQsIDEyNTQ5NiwgMTI1NTAwLCAxMjU1MTEsIDEyNTUxNywgMTI1NTIxLCAxMjU1MjUsIAotICAgIDEyNTUyOSwgMTI1NTM1LCAxMjU1NDEsIDEyNTU0NywgMTI1NTUzLCAxMjU1NTgsIDEyNTU2MywgMTI1NTY5LCAxMjU1NzUsIAotICAgIDEyNTU4MiwgMCwgMCwgMTI1NTg5LCAxMjU1OTQsIDEyNTYwMiwgMTI1NjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjU2MTUsIDEyNTYyMiwgMTI1NjI5LCAxMjU2MzYsIDEyNTY0NCwgMTI1NjUyLCAxMjU2NjAsIDEyNTY2OCwgCi0gICAgMTI1Njc2LCAxMjU2ODQsIDEyNTY5MiwgMTI1NzAwLCAxMjU3MDgsIDEyNTcxNCwgMTI1NzIwLCAxMjU3MjYsIDEyNTczMiwgCi0gICAgMTI1NzM4LCAxMjU3NDQsIDEyNTc1MCwgMTI1NzU2LCAxMjU3NjIsIDEyNTc2OCwgMTI1Nzc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMwNTUsIDEyMzA2MiwgMTIzMDcwLCAKKyAgICAxMjMwNzgsIDEyMzA4NiwgMTIzMDkzLCAxMjMxMDEsIDEyMzEwOSwgMTIzMTE3LCAxMjMxMjQsIDEyMzEzMiwgMTIzMTQwLCAKKyAgICAxMjMxNDcsIDEyMzE1NCwgMTIzMTYyLCAxMjMxNjksIDEyMzE3NywgMTIzMTg1LCAxMjMxOTIsIDEyMzIwMCwgMTIzMjA4LCAKKyAgICAxMjMyMTUsIDEyMzIyMywgMTIzMjMxLCAxMjMyMzksIDEyMzI0NywgMTIzMjU1LCAxMjMyNTksIDEyMzI2MywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMjY2LCAxMjMyNzIsIDEyMzI3OCwgMTIzMjg0LCAxMjMyODgsIAorICAgIDEyMzI5NCwgMTIzMzAwLCAxMjMzMDYsIDEyMzMxMiwgMTIzMzE4LCAxMjMzMjQsIDEyMzMzMCwgMTIzMzM2LCAxMjMzNDIsIAorICAgIDEyMzM0OCwgMTIzMzU0LCAxMjMzNjAsIDEyMzM2NiwgMTIzMzcyLCAxMjMzNzgsIDEyMzM4NCwgMTIzMzkwLCAxMjMzOTYsIAorICAgIDEyMzQwMiwgMTIzNDA4LCAxMjM0MTQsIDEyMzQyMCwgMTIzNDI2LCAxMjM0MzIsIDEyMzQzOCwgMTIzNDQ0LCAxMjM0NTAsIAorICAgIDEyMzQ1NiwgMTIzNDYyLCAxMjM0NjgsIDEyMzQ3NCwgMTIzNDgwLCAxMjM0ODYsIDEyMzQ5MiwgMTIzNDk4LCAxMjM1MDQsIAorICAgIDEyMzUxMCwgMTIzNTE2LCAwLCAwLCAwLCAwLCAwLCAxMjM1MjIsIDEyMzUzMywgMTIzNTQ0LCAxMjM1NTUsIDEyMzU2NiwgCisgICAgMTIzNTc3LCAxMjM1ODgsIDEyMzU5OSwgMTIzNjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM2MjEsIDEyMzYyNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjI5LCAKKyAgICAxMjM2MzEsIDEyMzYzMywgMTIzNjM3LCAxMjM2NDIsIDEyMzY0NywgMTIzNjQ5LCAxMjM2NTUsIDEyMzY2MCwgMTIzNjYyLCAKKyAgICAxMjM2NjgsIDEyMzY3MiwgMTIzNjc0LCAxMjM2NzgsIDEyMzY4NCwgMTIzNjkwLCAxMjM2OTYsIDEyMzcwMSwgMTIzNzA1LCAKKyAgICAxMjM3MTIsIDEyMzcxOSwgMTIzNzI2LCAxMjM3MzEsIDEyMzczOCwgMTIzNzQ1LCAxMjM3NTIsIDEyMzc1NiwgMTIzNzYyLCAKKyAgICAxMjM3NzEsIDEyMzc4MCwgMTIzNzg3LCAxMjM3OTIsIDEyMzc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTIzODAwLCAxMjM4MDIsIDEyMzgwNCwgMTIzODA4LCAxMjM4MTIsIDEyMzgxNiwgMCwgMTIzODE4LCAKKyAgICAxMjM4MjAsIDEyMzgyNCwgMTIzODI2LCAxMjM4MjgsIDEyMzgzMCwgMTIzODMyLCAxMjM4MzcsIDEyMzg0MiwgMTIzODQ0LCAKKyAgICAxMjM4NTAsIDEyMzg1NCwgMTIzODU4LCAxMjM4NjYsIDEyMzg2OCwgMTIzODcwLCAxMjM4NzIsIDEyMzg3NCwgMTIzODc2LCAKKyAgICAxMjM4NzgsIDEyMzg4MCwgMTIzODgyLCAxMjM4ODQsIDEyMzg4NiwgMTIzODkwLCAxMjM4OTQsIDEyMzg5NiwgMTIzODk4LCAKKyAgICAxMjM5MDAsIDEyMzkwMiwgMTIzOTA0LCAxMjM5MDksIDEyMzkxNSwgMTIzOTE5LCAxMjM5MjMsIDEyMzkyNywgMTIzOTMxLCAKKyAgICAxMjM5MzYsIDEyMzk0MCwgMTIzOTQyLCAxMjM5NDQsIDEyMzk0OCwgMTIzOTU0LCAxMjM5NTYsIDEyMzk1OCwgMTIzOTYwLCAKKyAgICAxMjM5NjQsIDEyMzk3MywgMTIzOTc5LCAxMjM5ODMsIDEyMzk4NywgMTIzOTg5LCAxMjM5OTEsIDEyMzk5NCwgMTIzOTk2LCAKKyAgICAxMjM5OTgsIDEyNDAwMCwgMTI0MDA0LCAxMjQwMDYsIDEyNDAxMCwgMTI0MDE1LCAxMjQwMTcsIDEyNDAyMiwgMTI0MDI4LCAKKyAgICAxMjQwMzUsIDEyNDAzOSwgMTI0MDQzLCAxMjQwNDcsIDEyNDA1MSwgMTI0MDU3LCAwLCAwLCAwLCAxMjQwNjEsIDEyNDA2MywgCisgICAgMTI0MDY3LCAxMjQwNzEsIDEyNDA3MywgMTI0MDc3LCAxMjQwODEsIDEyNDA4MywgMTI0MDg3LCAxMjQwODksIDEyNDA5MywgCisgICAgMTI0MDk3LCAxMjQxMDEsIDEyNDEwNSwgMTI0MTA5LCAxMjQxMTMsIDEyNDExNywgMTI0MTIxLCAxMjQxMjcsIDEyNDEzMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MTM1LCAxMjQxMzksIDEyNDE0MywgMTI0MTQ3LCAKKyAgICAxMjQxNTQsIDEyNDE1NiwgMTI0MTYwLCAxMjQxNjIsIDEyNDE2NCwgMTI0MTY4LCAxMjQxNzIsIDEyNDE3NiwgMTI0MTc4LCAKKyAgICAxMjQxODIsIDEyNDE4NiwgMTI0MTkwLCAxMjQxOTQsIDEyNDE5OCwgMTI0MjAwLCAxMjQyMDQsIDEyNDIwNiwgMTI0MjEyLCAKKyAgICAxMjQyMTUsIDEyNDIyMCwgMTI0MjIyLCAxMjQyMjQsIDEyNDIyNywgMTI0MjI5LCAxMjQyMzEsIDEyNDIzNCwgMTI0MjQxLCAKKyAgICAxMjQyNDgsIDEyNDI1NSwgMTI0MjYwLCAxMjQyNjQsIDEyNDI2NiwgMTI0MjY4LCAwLCAxMjQyNzAsIDEyNDI3MiwgCisgICAgMTI0Mjc2LCAxMjQyODAsIDEyNDI4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTI0Mjg2LCAxMjQyOTAsIDEyNDI5NSwgMTI0Mjk5LCAxMjQzMDUsIDEyNDMxMSwgMTI0MzEzLCAKKyAgICAxMjQzMTUsIDEyNDMyMSwgMTI0MzIzLCAxMjQzMjcsIDEyNDMzMSwgMTI0MzMzLCAxMjQzMzcsIDEyNDMzOSwgMTI0MzQzLCAKKyAgICAxMjQzNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDM1MSwgMTI0MzUzLCAKKyAgICAxMjQzNTUsIDEyNDM1NywgMTI0MzYxLCAxMjQzNjMsIDEyNDM2NSwgMTI0MzY3LCAxMjQzNjksIDEyNDM3MSwgMTI0MzczLCAKKyAgICAxMjQzNzUsIDEyNDM3NywgMTI0Mzc5LCAxMjQzODEsIDEyNDM4MywgMTI0Mzg1LCAxMjQzODcsIDEyNDM4OSwgMTI0MzkxLCAKKyAgICAxMjQzOTMsIDEyNDM5NSwgMTI0Mzk3LCAxMjQzOTksIDEyNDQwMSwgMTI0NDAzLCAxMjQ0MDUsIDEyNDQwOSwgMTI0NDExLCAKKyAgICAxMjQ0MTMsIDEyNDQxNSwgMTI0NDE5LCAxMjQ0MjEsIDEyNDQyNSwgMTI0NDI3LCAxMjQ0MjksIDEyNDQzMywgMTI0NDM3LCAKKyAgICAxMjQ0NDMsIDEyNDQ0NSwgMTI0NDQ3LCAxMjQ0NDksIDEyNDQ1MSwgMTI0NDU1LCAxMjQ0NTksIDEyNDQ2MSwgMTI0NDY1LCAKKyAgICAxMjQ0NjksIDEyNDQ3MywgMTI0NDc3LCAxMjQ0ODEsIDEyNDQ4NSwgMTI0NDg5LCAxMjQ0OTMsIDEyNDQ5NywgMTI0NTAxLCAKKyAgICAxMjQ1MDUsIDEyNDUwOSwgMTI0NTEzLCAxMjQ1MTcsIDEyNDUyMSwgMTI0NTI1LCAxMjQ1MjksIDAsIDEyNDUzMywgMCwgCisgICAgMTI0NTM1LCAxMjQ1MzcsIDEyNDUzOSwgMTI0NTQxLCAxMjQ1NDMsIDEyNDU1MSwgMTI0NTU5LCAxMjQ1NjcsIDEyNDU3NSwgCisgICAgMTI0NTgwLCAxMjQ1ODUsIDEyNDU5MCwgMTI0NTk0LCAxMjQ1OTgsIDEyNDYwMywgMTI0NjA3LCAxMjQ2MDksIDEyNDYxMywgCisgICAgMTI0NjE1LCAxMjQ2MTcsIDEyNDYxOSwgMTI0NjIxLCAxMjQ2MjMsIDEyNDYyNSwgMTI0NjI3LCAxMjQ2MzEsIDEyNDYzMywgCisgICAgMTI0NjM1LCAxMjQ2MzcsIDEyNDY0MSwgMTI0NjQ1LCAxMjQ2NDksIDEyNDY1MywgMTI0NjU3LCAxMjQ2NTksIDEyNDY2NSwgCisgICAgMTI0NjcxLCAxMjQ2NzMsIDEyNDY3NSwgMTI0Njc3LCAxMjQ2NzksIDEyNDY4MSwgMTI0NjkwLCAxMjQ2OTcsIDEyNDcwNCwgCisgICAgMTI0NzA4LCAxMjQ3MTUsIDEyNDcyMCwgMTI0NzI3LCAxMjQ3MzYsIDEyNDc0MSwgMTI0NzQ1LCAxMjQ3NDksIDEyNDc1MSwgCisgICAgMTI0NzU1LCAxMjQ3NTcsIDEyNDc2MSwgMTI0NzY1LCAxMjQ3NjcsIDEyNDc3MSwgMTI0Nzc1LCAxMjQ3NzksIDEyNDc4MSwgCisgICAgMTI0NzgzLCAxMjQ3ODksIDEyNDc5MSwgMTI0NzkzLCAxMjQ3OTUsIDEyNDc5OSwgMTI0ODAzLCAxMjQ4MDUsIDEyNDgwOSwgCisgICAgMTI0ODExLCAxMjQ4MTMsIDEyNDgxNiwgMTI0ODIwLCAxMjQ4MjIsIDEyNDgyNiwgMTI0ODI4LCAxMjQ4MzAsIDEyNDgzNSwgCisgICAgMTI0ODM3LCAxMjQ4NDEsIDEyNDg0NSwgMTI0ODQ4LCAxMjQ4NTIsIDEyNDg1NiwgMTI0ODYwLCAxMjQ4NjQsIDEyNDg2OCwgCisgICAgMTI0ODcyLCAxMjQ4NzYsIDEyNDg4MSwgMTI0ODg1LCAxMjQ4ODksIDEyNDg5OCwgMTI0OTAzLCAxMjQ5MDYsIDEyNDkwOCwgCisgICAgMTI0OTExLCAxMjQ5MTQsIDEyNDkxOSwgMTI0OTIxLCAxMjQ5MjQsIDEyNDkyOSwgMTI0OTMzLCAxMjQ5MzYsIDEyNDk0MCwgCisgICAgMTI0OTQ0LCAxMjQ5NDcsIDEyNDk1MiwgMTI0OTU2LCAxMjQ5NjAsIDEyNDk2NCwgMTI0OTY4LCAxMjQ5NzQsIDEyNDk4MCwgCisgICAgMTI0OTg2LCAxMjQ5OTIsIDEyNDk5NywgMTI1MDA4LCAxMjUwMTAsIDEyNTAxNCwgMTI1MDE2LCAxMjUwMTgsIDEyNTAyMiwgCisgICAgMTI1MDI2LCAxMjUwMjgsIDEyNTAzMiwgMTI1MDM3LCAxMjUwNDIsIDEyNTA0OCwgMTI1MDUwLCAxMjUwNTQsIDEyNTA1OCwgCisgICAgMTI1MDY1LCAxMjUwNzIsIDEyNTA3NiwgMTI1MDc4LCAxMjUwODAsIDEyNTA4NCwgMTI1MDg2LCAxMjUwOTAsIDEyNTA5NCwgCisgICAgMTI1MDk4LCAxMjUxMDAsIDEyNTEwMiwgMTI1MTA5LCAxMjUxMTMsIDEyNTExNiwgMTI1MTIwLCAxMjUxMjQsIDEyNTEyOCwgCisgICAgMTI1MTMwLCAxMjUxMzQsIDEyNTEzNiwgMTI1MTM4LCAxMjUxNDIsIDEyNTE0NCwgMTI1MTQ4LCAxMjUxNTIsIDEyNTE1OCwgCisgICAgMTI1MTYyLCAxMjUxNjYsIDEyNTE3MCwgMTI1MTcyLCAxMjUxNzUsIDEyNTE3OSwgMTI1MTg2LCAxMjUxOTUsIDEyNTIwNCwgCisgICAgMTI1MjEyLCAxMjUyMjAsIDEyNTIyMiwgMTI1MjI2LCAxMjUyMjgsIDEyNTIzMiwgMTI1MjQzLCAxMjUyNDcsIDEyNTI1MywgCisgICAgMTI1MjU5LCAxMjUyNjQsIDAsIDEyNTI2NiwgMTI1MjcwLCAxMjUyNzIsIDEyNTI3NCwgMCwgMCwgMCwgMTI1Mjc2LCAKKyAgICAxMjUyODEsIDEyNTI5MSwgMTI1MzA2LCAxMjUzMTgsIDEyNTMzMCwgMTI1MzM0LCAxMjUzMzgsIDEyNTM0NCwgMTI1MzQ2LCAKKyAgICAxMjUzNTQsIDEyNTM2MiwgMTI1MzY0LCAxMjUzNjgsIDEyNTM3NCwgMTI1MzgwLCAxMjUzODcsIDEyNTM5NCwgMTI1Mzk2LCAKKyAgICAxMjUzOTgsIDEyNTQwMSwgMTI1NDAzLCAxMjU0MDksIDEyNTQxMSwgMTI1NDE0LCAxMjU0MTgsIDEyNTQyNCwgMTI1NDMwLCAKKyAgICAxMjU0NDEsIDEyNTQ0NywgMTI1NDU0LCAxMjU0NjIsIDEyNTQ2NiwgMTI1NDc0LCAxMjU0ODIsIDEyNTQ4OCwgMTI1NDk0LCAKKyAgICAxMjU1MDEsIDEyNTUwMywgMTI1NTA3LCAxMjU1MDksIDEyNTUxMSwgMTI1NTE2LCAxMjU1MTgsIDEyNTUyMCwgMTI1NTIyLCAKKyAgICAxMjU1MjQsIDEyNTUyOCwgMTI1NTM5LCAxMjU1NDUsIDEyNTU0OSwgMTI1NTUzLCAxMjU1NTcsIDEyNTU2MywgMTI1NTY5LCAKKyAgICAxMjU1NzUsIDEyNTU4MSwgMTI1NTg2LCAxMjU1OTEsIDEyNTU5NywgMTI1NjAzLCAxMjU2MTAsIDAsIDAsIDEyNTYxNywgCisgICAgMTI1NjIyLCAxMjU2MzAsIDEyNTYzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1NjQzLCAKKyAgICAxMjU2NTAsIDEyNTY1NywgMTI1NjY0LCAxMjU2NzIsIDEyNTY4MCwgMTI1Njg4LCAxMjU2OTYsIDEyNTcwNCwgMTI1NzEyLCAKKyAgICAxMjU3MjAsIDEyNTcyOCwgMTI1NzM2LCAxMjU3NDIsIDEyNTc0OCwgMTI1NzU0LCAxMjU3NjAsIDEyNTc2NiwgMTI1NzcyLCAKKyAgICAxMjU3NzgsIDEyNTc4NCwgMTI1NzkwLCAxMjU3OTYsIDEyNTgwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1NzgwLCAKLSAgICAxMjU3ODQsIDEyNTc4OCwgMTI1NzkzLCAxMjU3OTgsIDEyNTgwMCwgMTI1ODA0LCAxMjU4MTMsIDEyNTgyMSwgMTI1ODI5LCAKLSAgICAxMjU4NDIsIDEyNTg1NSwgMTI1ODY4LCAxMjU4NzUsIDEyNTg4MiwgMTI1ODg2LCAxMjU4OTUsIDEyNTkwMywgMTI1OTA3LCAKLSAgICAxMjU5MTYsIDEyNTkyMywgMTI1OTI3LCAxMjU5MzEsIDEyNTkzNSwgMTI1OTM5LCAxMjU5NDYsIDEyNTk1MCwgMTI1OTU0LCAKLSAgICAxMjU5NTgsIDEyNTk2MiwgMTI1OTY5LCAxMjU5NzgsIDEyNTk4NywgMTI1OTk0LCAxMjYwMDYsIDEyNjAxOCwgMTI2MDIyLCAKLSAgICAxMjYwMjYsIDEyNjAzMCwgMTI2MDM0LCAxMjYwMzgsIDEyNjA0MiwgMTI2MDUwLCAxMjYwNTgsIDEyNjA2NiwgMTI2MDcwLCAKLSAgICAxMjYwNzQsIDEyNjA3OCwgMTI2MDgyLCAxMjYwODYsIDEyNjA5MCwgMTI2MDk2LCAxMjYxMDIsIDEyNjEwNiwgMTI2MTE3LCAKLSAgICAxMjYxMjUsIDEyNjEyOSwgMTI2MTMzLCAxMjYxMzcsIDEyNjE0MSwgMTI2MTQ3LCAxMjYxNTQsIDEyNjE2NSwgMTI2MTc1LCAKLSAgICAxMjYxODUsIDEyNjE5NiwgMTI2MjA1LCAxMjYyMTYsIDEyNjIyMiwgMTI2MjI4LCAwLCAwLCAwLCAwLCAxMjYyMzQsIAotICAgIDEyNjI0MywgMTI2MjUwLCAxMjYyNTYsIDEyNjI2MCwgMTI2MjY0LCAxMjYyNjgsIDEyNjI3NywgMTI2Mjg5LCAxMjYyOTMsIAotICAgIDEyNjMwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1ODA4LCAxMjU4MTIsIDEyNTgxNiwgCisgICAgMTI1ODIxLCAxMjU4MjYsIDEyNTgyOCwgMTI1ODMyLCAxMjU4NDEsIDEyNTg0OSwgMTI1ODU3LCAxMjU4NzAsIDEyNTg4MywgCisgICAgMTI1ODk2LCAxMjU5MDMsIDEyNTkxMCwgMTI1OTE0LCAxMjU5MjMsIDEyNTkzMSwgMTI1OTM1LCAxMjU5NDQsIDEyNTk1MSwgCisgICAgMTI1OTU1LCAxMjU5NTksIDEyNTk2MywgMTI1OTY3LCAxMjU5NzQsIDEyNTk3OCwgMTI1OTgyLCAxMjU5ODYsIDEyNTk5MCwgCisgICAgMTI1OTk3LCAxMjYwMDYsIDEyNjAxNSwgMTI2MDIyLCAxMjYwMzQsIDEyNjA0NiwgMTI2MDUwLCAxMjYwNTQsIDEyNjA1OCwgCisgICAgMTI2MDYyLCAxMjYwNjYsIDEyNjA3MCwgMTI2MDc4LCAxMjYwODYsIDEyNjA5NCwgMTI2MDk4LCAxMjYxMDIsIDEyNjEwNiwgCisgICAgMTI2MTEwLCAxMjYxMTQsIDEyNjExOCwgMTI2MTI0LCAxMjYxMzAsIDEyNjEzNCwgMTI2MTQ1LCAxMjYxNTMsIDEyNjE1NywgCisgICAgMTI2MTYxLCAxMjYxNjUsIDEyNjE2OSwgMTI2MTc1LCAxMjYxODIsIDEyNjE5MywgMTI2MjAzLCAxMjYyMTMsIDEyNjIyNCwgCisgICAgMTI2MjMzLCAxMjYyNDQsIDEyNjI1MCwgMTI2MjU2LCAwLCAwLCAwLCAwLCAxMjYyNjIsIDEyNjI3MSwgMTI2Mjc4LCAKKyAgICAxMjYyODQsIDEyNjI4OCwgMTI2MjkyLCAxMjYyOTYsIDEyNjMwNSwgMTI2MzE3LCAxMjYzMjEsIDEyNjMyOCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTI2MzA3LCAxMjYzMDksIDEyNjMxMSwgMTI2MzE1LCAxMjYzMTksIDEyNjMyMywgMTI2MzMyLCAxMjYzMzQsIAotICAgIDEyNjMzNiwgMTI2MzM5LCAxMjYzNDEsIDEyNjM0MywgMTI2MzQ3LCAxMjYzNDksIDEyNjM1MywgMTI2MzU1LCAxMjYzNTksIAotICAgIDEyNjM2MSwgMTI2MzYzLCAxMjYzNjcsIDEyNjM3MSwgMTI2Mzc3LCAxMjYzNzksIDEyNjM4MywgMTI2Mzg1LCAxMjYzODksIAotICAgIDEyNjM5MywgMTI2Mzk3LCAxMjY0MDEsIDEyNjQwMywgMTI2NDA1LCAxMjY0MDksIDEyNjQxMywgMTI2NDE3LCAxMjY0MjEsIAotICAgIDEyNjQyMywgMTI2NDI1LCAxMjY0MjcsIDEyNjQzMiwgMTI2NDM3LCAxMjY0NDAsIDEyNjQ0OCwgMTI2NDU2LCAxMjY0NTgsIAotICAgIDEyNjQ2MywgMTI2NDY2LCAxMjY0NzEsIDEyNjQ4MiwgMTI2NDg5LCAxMjY0OTQsIDEyNjQ5OSwgMTI2NTAxLCAxMjY1MDUsIAotICAgIDEyNjUwNywgMTI2NTExLCAxMjY1MTMsIDEyNjUxNywgMTI2NTIxLCAxMjY1MjQsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzIsIAotICAgIDEyNjUzNCwgMTI2NTM4LCAxMjY1NDAsIDEyNjU0MiwgMTI2NTQ0LCAxMjY1NDgsIDEyNjU1MCwgMTI2NTU0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjYzMzUsIAorICAgIDEyNjMzNywgMTI2MzM5LCAxMjYzNDMsIDEyNjM0NywgMTI2MzUxLCAxMjYzNjAsIDEyNjM2MiwgMTI2MzY0LCAxMjYzNjcsIAorICAgIDEyNjM2OSwgMTI2MzcxLCAxMjYzNzUsIDEyNjM3NywgMTI2MzgxLCAxMjYzODMsIDEyNjM4NywgMTI2Mzg5LCAxMjYzOTEsIAorICAgIDEyNjM5NSwgMTI2Mzk5LCAxMjY0MDUsIDEyNjQwNywgMTI2NDExLCAxMjY0MTMsIDEyNjQxNywgMTI2NDIxLCAxMjY0MjUsIAorICAgIDEyNjQyOSwgMTI2NDMxLCAxMjY0MzMsIDEyNjQzNywgMTI2NDQxLCAxMjY0NDUsIDEyNjQ0OSwgMTI2NDUxLCAxMjY0NTMsIAorICAgIDEyNjQ1NSwgMTI2NDYwLCAxMjY0NjUsIDEyNjQ2OCwgMTI2NDc2LCAxMjY0ODQsIDEyNjQ4NiwgMTI2NDkxLCAxMjY0OTQsIAorICAgIDEyNjQ5OSwgMTI2NTEwLCAxMjY1MTcsIDEyNjUyMiwgMTI2NTI3LCAxMjY1MjksIDEyNjUzMywgMTI2NTM1LCAxMjY1MzksIAorICAgIDEyNjU0MSwgMTI2NTQ1LCAxMjY1NDksIDEyNjU1MiwgMTI2NTU1LCAxMjY1NTcsIDEyNjU2MCwgMTI2NTYyLCAxMjY1NjYsIAorICAgIDEyNjU2OCwgMTI2NTcwLCAxMjY1NzIsIDEyNjU3NiwgMTI2NTc4LCAxMjY1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjU1NywgMTI2NTYyLCAxMjY1NjcsIDEyNjU3MiwgMTI2NTc3LCAxMjY1ODIsIAotICAgIDEyNjU4NywgMTI2NTk0LCAxMjY2MDEsIDEyNjYwOCwgMTI2NjE1LCAxMjY2MjAsIDEyNjYyNSwgMTI2NjMwLCAxMjY2MzUsIAotICAgIDEyNjY0MiwgMTI2NjQ4LCAxMjY2NTUsIDEyNjY2MiwgMTI2NjY5LCAxMjY2NzQsIDEyNjY3OSwgMTI2Njg0LCAxMjY2ODksIAotICAgIDEyNjY5NCwgMTI2NzAxLCAxMjY3MDgsIDEyNjcxMywgMTI2NzE4LCAxMjY3MjUsIDEyNjczMiwgMTI2NzQwLCAxMjY3NDgsIAotICAgIDEyNjc1NSwgMTI2NzYyLCAxMjY3NzAsIDEyNjc3OCwgMTI2Nzg2LCAxMjY3OTMsIDEyNjgwMywgMTI2ODE0LCAxMjY4MTksIAotICAgIDEyNjgyNiwgMTI2ODMzLCAxMjY4NDAsIDEyNjg0OCwgMTI2ODU2LCAxMjY4NjcsIDEyNjg3NSwgMTI2ODgzLCAxMjY4OTEsIAotICAgIDEyNjg5NiwgMTI2OTAxLCAxMjY5MDYsIDEyNjkxMSwgMTI2OTE2LCAxMjY5MjEsIDEyNjkyNiwgMTI2OTMxLCAxMjY5MzYsIAotICAgIDEyNjk0MSwgMTI2OTQ2LCAxMjY5NTEsIDEyNjk1OCwgMTI2OTYzLCAxMjY5NjgsIDEyNjk3NSwgMTI2OTgwLCAxMjY5ODUsIAotICAgIDEyNjk5MCwgMTI2OTk1LCAxMjcwMDAsIDEyNzAwNSwgMTI3MDEwLCAxMjcwMTUsIDEyNzAyMCwgMTI3MDI1LCAxMjcwMzAsIAotICAgIDEyNzAzNSwgMTI3MDQyLCAxMjcwNTAsIDEyNzA1NSwgMTI3MDYwLCAxMjcwNjcsIDEyNzA3MiwgMTI3MDc3LCAxMjcwODIsIAotICAgIDEyNzA4OSwgMTI3MDk0LCAxMjcxMDEsIDEyNzEwNiwgMTI3MTEzLCAxMjcxMTgsIDEyNzEyNywgMTI3MTM2LCAxMjcxNDEsIAotICAgIDEyNzE0NiwgMTI3MTUxLCAxMjcxNTYsIDEyNzE2MSwgMTI3MTY2LCAxMjcxNzEsIDEyNzE3NiwgMTI3MTgxLCAxMjcxODYsIAotICAgIDEyNzE5MSwgMTI3MTk2LCAxMjcyMDEsIDEyNzIwOSwgMTI3MjE3LCAxMjcyMjIsIDEyNzIyNywgMTI3MjMyLCAxMjcyMzcsIAotICAgIDEyNzI0MiwgMTI3MjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyNTQsIDEyNzI1OCwgCi0gICAgMTI3MjYyLCAxMjcyNjYsIDEyNzI3MCwgMTI3Mjc0LCAxMjcyNzgsIDEyNzI4MiwgMTI3Mjg2LCAxMjcyOTAsIDEyNzI5NCwgCisgICAgMCwgMCwgMTI2NTg1LCAxMjY1OTAsIDEyNjU5NSwgMTI2NjAwLCAxMjY2MDUsIDEyNjYxMCwgMTI2NjE1LCAxMjY2MjIsIAorICAgIDEyNjYyOSwgMTI2NjM2LCAxMjY2NDMsIDEyNjY0OCwgMTI2NjUzLCAxMjY2NTgsIDEyNjY2MywgMTI2NjcwLCAxMjY2NzYsIAorICAgIDEyNjY4MywgMTI2NjkwLCAxMjY2OTcsIDEyNjcwMiwgMTI2NzA3LCAxMjY3MTIsIDEyNjcxNywgMTI2NzIyLCAxMjY3MjksIAorICAgIDEyNjczNiwgMTI2NzQxLCAxMjY3NDYsIDEyNjc1MywgMTI2NzYwLCAxMjY3NjgsIDEyNjc3NiwgMTI2NzgzLCAxMjY3OTAsIAorICAgIDEyNjc5OCwgMTI2ODA2LCAxMjY4MTQsIDEyNjgyMSwgMTI2ODMxLCAxMjY4NDIsIDEyNjg0NywgMTI2ODU0LCAxMjY4NjEsIAorICAgIDEyNjg2OCwgMTI2ODc2LCAxMjY4ODQsIDEyNjg5NSwgMTI2OTAzLCAxMjY5MTEsIDEyNjkxOSwgMTI2OTI0LCAxMjY5MjksIAorICAgIDEyNjkzNCwgMTI2OTM5LCAxMjY5NDQsIDEyNjk0OSwgMTI2OTU0LCAxMjY5NTksIDEyNjk2NCwgMTI2OTY5LCAxMjY5NzQsIAorICAgIDEyNjk3OSwgMTI2OTg2LCAxMjY5OTEsIDEyNjk5NiwgMTI3MDAzLCAxMjcwMDgsIDEyNzAxMywgMTI3MDE4LCAxMjcwMjMsIAorICAgIDEyNzAyOCwgMTI3MDMzLCAxMjcwMzgsIDEyNzA0MywgMTI3MDQ4LCAxMjcwNTMsIDEyNzA1OCwgMTI3MDYzLCAxMjcwNzAsIAorICAgIDEyNzA3OCwgMTI3MDgzLCAxMjcwODgsIDEyNzA5NSwgMTI3MTAwLCAxMjcxMDUsIDEyNzExMCwgMTI3MTE3LCAxMjcxMjIsIAorICAgIDEyNzEyOSwgMTI3MTM0LCAxMjcxNDEsIDEyNzE0NiwgMTI3MTU1LCAxMjcxNjQsIDEyNzE2OSwgMTI3MTc0LCAxMjcxNzksIAorICAgIDEyNzE4NCwgMTI3MTg5LCAxMjcxOTQsIDEyNzE5OSwgMTI3MjA0LCAxMjcyMDksIDEyNzIxNCwgMTI3MjE5LCAxMjcyMjQsIAorICAgIDEyNzIyOSwgMTI3MjM3LCAxMjcyNDUsIDEyNzI1MCwgMTI3MjU1LCAxMjcyNjAsIDEyNzI2NSwgMTI3MjcwLCAxMjcyNzYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI4MiwgMTI3Mjg2LCAxMjcyOTAsIDEyNzI5NCwgCiAgICAgMTI3Mjk4LCAxMjczMDIsIDEyNzMwNiwgMTI3MzEwLCAxMjczMTQsIDEyNzMxOCwgMTI3MzIyLCAxMjczMjYsIDEyNzMzMCwgCiAgICAgMTI3MzM0LCAxMjczMzgsIDEyNzM0MiwgMTI3MzQ2LCAxMjczNTAsIDEyNzM1NCwgMTI3MzU4LCAxMjczNjIsIDEyNzM2NiwgCiAgICAgMTI3MzcwLCAxMjczNzQsIDEyNzM3OCwgMTI3MzgyLCAxMjczODYsIDEyNzM5MCwgMTI3Mzk0LCAxMjczOTgsIDEyNzQwMiwgCkBAIC0xNjkzNSwxNzcgKzE2OTUyLDE3OSBAQAogICAgIDEyOTMxNCwgMTI5MzE4LCAxMjkzMjIsIDEyOTMyNiwgMTI5MzMwLCAxMjkzMzQsIDEyOTMzOCwgMTI5MzQyLCAxMjkzNDYsIAogICAgIDEyOTM1MCwgMTI5MzU0LCAxMjkzNTgsIDEyOTM2MiwgMTI5MzY2LCAxMjkzNzAsIDEyOTM3NCwgMTI5Mzc4LCAxMjkzODIsIAogICAgIDEyOTM4NiwgMTI5MzkwLCAxMjkzOTQsIDEyOTM5OCwgMTI5NDAyLCAxMjk0MDYsIDEyOTQxMCwgMTI5NDE0LCAxMjk0MTgsIAorICAgIDEyOTQyMiwgMTI5NDI2LCAxMjk0MzAsIDEyOTQzNCwgMTI5NDM4LCAxMjk0NDIsIDEyOTQ0NiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NDUwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjk0MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQyNiwgMTI5NDI5LCAxMjk0MzMsIDEyOTQzNywgMTI5NDQwLCAKLSAgICAxMjk0NDQsIDEyOTQ0OCwgMTI5NDUxLCAxMjk0NTQsIDEyOTQ1OCwgMTI5NDYyLCAxMjk0NjUsIDEyOTQ2OCwgMTI5NDcxLCAKLSAgICAxMjk0NzQsIDEyOTQ3OSwgMTI5NDgyLCAxMjk0ODYsIDEyOTQ4OSwgMTI5NDkyLCAxMjk0OTUsIDEyOTQ5OCwgMTI5NTAxLCAKLSAgICAxMjk1MDQsIDEyOTUwNywgMTI5NTEwLCAxMjk1MTMsIDEyOTUxNiwgMTI5NTE5LCAxMjk1MjMsIDEyOTUyNywgMTI5NTMxLCAKLSAgICAxMjk1MzUsIDEyOTU0MCwgMTI5NTQ1LCAxMjk1NTEsIDEyOTU1NywgMTI5NTYzLCAxMjk1NjgsIDEyOTU3NCwgMTI5NTgwLCAKLSAgICAxMjk1ODYsIDEyOTU5MSwgMTI5NTk3LCAxMjk2MDMsIDEyOTYwOCwgMTI5NjEzLCAxMjk2MTksIDEyOTYyNCwgMTI5NjMwLCAKLSAgICAxMjk2MzYsIDEyOTY0MSwgMTI5NjQ3LCAxMjk2NTMsIDEyOTY1OCwgMTI5NjY0LCAxMjk2NzAsIDEyOTY3NiwgMTI5NjgyLCAKLSAgICAxMjk2ODgsIDEyOTY5MiwgMTI5Njk3LCAxMjk3MDEsIDEyOTcwNiwgMTI5NzEwLCAxMjk3MTUsIDEyOTcyMCwgMTI5NzI2LCAKLSAgICAxMjk3MzIsIDEyOTczOCwgMTI5NzQzLCAxMjk3NDksIDEyOTc1NSwgMTI5NzYxLCAxMjk3NjYsIDEyOTc3MiwgMTI5Nzc4LCAKLSAgICAxMjk3ODMsIDEyOTc4OCwgMTI5Nzk0LCAxMjk3OTksIDEyOTgwNSwgMTI5ODExLCAxMjk4MTYsIDEyOTgyMiwgMTI5ODI4LCAKLSAgICAxMjk4MzMsIDEyOTgzOSwgMTI5ODQ1LCAxMjk4NTEsIDEyOTg1NywgMTI5ODYzLCAxMjk4NjgsIDEyOTg3MiwgMTI5ODc3LCAKLSAgICAxMjk4NzksIDEyOTg4MywgMTI5ODg2LCAxMjk4ODksIDEyOTg5MiwgMTI5ODk1LCAxMjk4OTgsIDEyOTkwMSwgMTI5OTA0LCAKLSAgICAxMjk5MDcsIDEyOTkxMCwgMTI5OTEzLCAxMjk5MTYsIDEyOTkxOSwgMTI5OTIyLCAxMjk5MjUsIDEyOTkyOCwgMTI5OTMxLCAKLSAgICAxMjk5MzQsIDEyOTkzNywgMTI5OTQwLCAxMjk5NDMsIDEyOTk0NiwgMTI5OTQ5LCAxMjk5NTIsIDEyOTk1NSwgMTI5OTU4LCAKLSAgICAxMjk5NjEsIDEyOTk2NCwgMTI5OTY3LCAxMjk5NzAsIDEyOTk3MywgMTI5OTc2LCAxMjk5NzksIDEyOTk4MiwgMTI5OTg1LCAKLSAgICAxMjk5ODgsIDEyOTk5MSwgMTI5OTk0LCAxMjk5OTcsIDEzMDAwMCwgMTMwMDAzLCAxMzAwMDYsIDEzMDAwOSwgMTMwMDEyLCAKLSAgICAxMzAwMTUsIDEzMDAxOCwgMTMwMDIxLCAxMzAwMjQsIDEzMDAyNywgMTMwMDMwLCAxMzAwMzMsIDEzMDAzNiwgMTMwMDM5LCAKLSAgICAxMzAwNDIsIDEzMDA0NSwgMTMwMDQ4LCAxMzAwNTEsIDEzMDA1NCwgMTMwMDU3LCAxMzAwNjAsIDEzMDA2MywgMTMwMDY2LCAKLSAgICAxMzAwNjksIDEzMDA3MiwgMTMwMDc1LCAxMzAwNzgsIDEzMDA4MSwgMTMwMDg0LCAxMzAwODcsIDEzMDA5MCwgMTMwMDkzLCAKLSAgICAxMzAwOTYsIDEzMDA5OSwgMTMwMTAyLCAxMzAxMDUsIDEzMDEwOCwgMTMwMTExLCAxMzAxMTQsIDEzMDExNywgMTMwMTIwLCAKLSAgICAxMzAxMjMsIDEzMDEyNiwgMTMwMTI5LCAxMzAxMzIsIDEzMDEzNSwgMTMwMTM4LCAxMzAxNDEsIDEzMDE0NCwgMTMwMTQ3LCAKLSAgICAxMzAxNTAsIDEzMDE1MywgMTMwMTU2LCAxMzAxNTksIDEzMDE2MiwgMTMwMTY1LCAxMzAxNjgsIDEzMDE3MSwgMTMwMTc0LCAKLSAgICAxMzAxNzcsIDEzMDE4MCwgMTMwMTgzLCAxMzAxODYsIDEzMDE4OSwgMTMwMTkyLCAxMzAxOTUsIDEzMDE5OCwgMTMwMjAxLCAKLSAgICAxMzAyMDQsIDEzMDIwNywgMTMwMjEwLCAxMzAyMTMsIDEzMDIxNiwgMTMwMjE5LCAxMzAyMjIsIDEzMDIyNSwgMTMwMjI4LCAKLSAgICAxMzAyMzEsIDEzMDIzNCwgMTMwMjM3LCAxMzAyNDAsIDEzMDI0MywgMTMwMjQ2LCAxMzAyNDksIDEzMDI1MiwgMTMwMjU1LCAKLSAgICAxMzAyNTgsIDEzMDI2MSwgMTMwMjY0LCAxMzAyNjcsIDEzMDI3MCwgMTMwMjczLCAxMzAyNzYsIDEzMDI3OSwgMTMwMjgyLCAKLSAgICAxMzAyODUsIDEzMDI4OCwgMTMwMjkxLCAxMzAyOTQsIDEzMDI5NywgMTMwMzAwLCAxMzAzMDMsIDEzMDMwNiwgMTMwMzA5LCAKLSAgICAxMzAzMTIsIDEzMDMxNSwgMTMwMzE4LCAxMzAzMjEsIDEzMDMyNCwgMTMwMzI3LCAxMzAzMzAsIDEzMDMzMywgMTMwMzM2LCAKLSAgICAxMzAzMzksIDEzMDM0MiwgMTMwMzQ1LCAxMzAzNDgsIDEzMDM1MSwgMTMwMzU0LCAxMzAzNTcsIDEzMDM2MCwgMTMwMzYzLCAKLSAgICAxMzAzNjYsIDEzMDM2OSwgMTMwMzcyLCAxMzAzNzUsIDEzMDM3OCwgMTMwMzgxLCAxMzAzODQsIDEzMDM4NywgMTMwMzkwLCAKLSAgICAxMzAzOTMsIDEzMDM5NiwgMTMwMzk5LCAxMzA0MDIsIDEzMDQwNSwgMTMwNDA4LCAxMzA0MTEsIDEzMDQxNCwgMTMwNDE3LCAKLSAgICAxMzA0MjAsIDEzMDQyMywgMTMwNDI2LCAxMzA0MjksIDEzMDQzMiwgMTMwNDM1LCAxMzA0MzgsIDEzMDQ0MSwgMTMwNDQ0LCAKLSAgICAxMzA0NDcsIDEzMDQ1MCwgMTMwNDUzLCAxMzA0NTYsIDEzMDQ1OSwgMTMwNDYyLCAxMzA0NjUsIDEzMDQ2OCwgMTMwNDcxLCAKLSAgICAxMzA0NzQsIDEzMDQ3NywgMTMwNDgwLCAxMzA0ODMsIDEzMDQ4NiwgMTMwNDg5LCAxMzA0OTIsIDEzMDQ5NSwgMTMwNDk4LCAKLSAgICAxMzA1MDEsIDEzMDUwNCwgMTMwNTA3LCAxMzA1MTAsIDEzMDUxMywgMTMwNTE2LCAxMzA1MTksIDEzMDUyMiwgMTMwNTI1LCAKLSAgICAxMzA1MjgsIDEzMDUzMSwgMTMwNTM0LCAxMzA1MzcsIDEzMDU0MCwgMTMwNTQzLCAxMzA1NDYsIDEzMDU0OSwgMTMwNTUyLCAKLSAgICAxMzA1NTUsIDEzMDU1OCwgMTMwNTYxLCAxMzA1NjQsIDEzMDU2NywgMTMwNTcwLCAxMzA1NzMsIDEzMDU3NiwgMTMwNTc5LCAKLSAgICAxMzA1ODIsIDEzMDU4NSwgMTMwNTg4LCAxMzA1OTEsIDEzMDU5NCwgMTMwNTk3LCAxMzA2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDYwMywgMTMwNjA1LCAxMzA2MDcsIDEzMDYxMiwgMTMwNjE0LCAKLSAgICAxMzA2MTksIDEzMDYyMSwgMTMwNjI2LCAxMzA2MjgsIDEzMDYzMywgMTMwNjM1LCAxMzA2MzcsIDEzMDYzOSwgMTMwNjQxLCAKLSAgICAxMzA2NDMsIDEzMDY0NSwgMTMwNjQ3LCAxMzA2NDksIDEzMDY1MSwgMTMwNjU0LCAxMzA2NTcsIDEzMDY1OSwgMTMwNjYxLCAKLSAgICAxMzA2NjUsIDEzMDY2OCwgMTMwNjczLCAxMzA2NzUsIDEzMDY3NywgMTMwNjc5LCAxMzA2ODMsIDEzMDY4NiwgMTMwNjg4LCAKLSAgICAxMzA2OTIsIDEzMDY5NCwgMTMwNjk4LCAxMzA3MDAsIDEzMDcwNCwgMTMwNzA3LCAxMzA3MDksIDEzMDcxMywgMTMwNzE3LCAKLSAgICAxMzA3MTksIDEzMDcyNSwgMTMwNzI3LCAxMzA3MzIsIDEzMDczNCwgMTMwNzM5LCAxMzA3NDEsIDEzMDc0NiwgMTMwNzQ4LCAKLSAgICAxMzA3NTMsIDEzMDc1NSwgMTMwNzU4LCAxMzA3NjAsIDEzMDc2NCwgMTMwNzY2LCAxMzA3NzMsIDEzMDc3NSwgMTMwNzc3LCAKLSAgICAxMzA3NzksIDEzMDc4NCwgMTMwNzg2LCAxMzA3ODgsIDEzMDc5MCwgMTMwNzkyLCAxMzA3OTQsIDEzMDc5OSwgMTMwODAzLCAKLSAgICAxMzA4MDUsIDEzMDgxMCwgMTMwODE0LCAxMzA4MTYsIDEzMDgyMSwgMTMwODI1LCAxMzA4MjcsIDEzMDgzMiwgMTMwODM2LCAKLSAgICAxMzA4MzgsIDEzMDg0MCwgMTMwODQyLCAxMzA4NDQsIDEzMDg0OCwgMTMwODUwLCAxMzA4NTUsIDEzMDg1NywgMTMwODYzLCAKLSAgICAxMzA4NjUsIDEzMDg3MSwgMTMwODczLCAxMzA4NzUsIDEzMDg3NywgMTMwODgxLCAxMzA4ODMsIDEzMDg5MCwgMTMwODkyLCAKLSAgICAxMzA4OTksIDEzMDkwMSwgMTMwOTA2LCAxMzA5MTEsIDEzMDkxMywgMTMwOTE5LCAxMzA5MjUsIDEzMDkyNywgMTMwOTMzLCAKLSAgICAxMzA5MzgsIDEzMDk0MCwgMTMwOTQ2LCAxMzA5NTIsIDEzMDk1NCwgMTMwOTYwLCAxMzA5NjYsIDEzMDk2OCwgMTMwOTc0LCAKLSAgICAxMzA5NzgsIDEzMDk4MCwgMTMwOTg1LCAxMzA5ODcsIDEzMDk4OSwgMTMwOTk0LCAxMzA5OTYsIDEzMDk5OCwgMTMxMDA0LCAKLSAgICAxMzEwMDYsIDEzMTAxMSwgMTMxMDE1LCAxMzEwMTcsIDEzMTAyMiwgMTMxMDI2LCAxMzEwMjgsIDEzMTAzNCwgMTMxMDM2LCAKLSAgICAxMzEwNDAsIDEzMTA0MiwgMTMxMDQ2LCAxMzEwNDgsIDEzMTA1NSwgMTMxMDYyLCAxMzEwNjQsIDEzMTA3MSwgMTMxMDc4LCAKLSAgICAxMzEwODAsIDEzMTA4NSwgMTMxMDg3LCAxMzEwOTQsIDEzMTA5NiwgMTMxMTAxLCAxMzExMDMsIDEzMTEwOSwgMTMxMTExLCAKLSAgICAxMzExMTUsIDEzMTExNywgMTMxMTIzLCAxMzExMjUsIDEzMTEyOSwgMTMxMTMxLCAxMzExMzcsIDEzMTEzOSwgMTMxMTQxLCAKLSAgICAxMzExNDMsIDEzMTE0OCwgMTMxMTUzLCAxMzExNTUsIDEzMTE1OSwgMTMxMTY2LCAxMzExNzMsIDEzMTE3OCwgMTMxMTgzLCAKLSAgICAxMzExOTUsIDEzMTE5NywgMTMxMTk5LCAxMzEyMDEsIDEzMTIwMywgMTMxMjA1LCAxMzEyMDcsIDEzMTIwOSwgMTMxMjExLCAKLSAgICAxMzEyMTMsIDEzMTIxNSwgMTMxMjE3LCAxMzEyMTksIDEzMTIyMSwgMTMxMjIzLCAxMzEyMjUsIDEzMTIyNywgMTMxMjI5LCAKLSAgICAxMzEyMzUsIDEzMTI0MiwgMTMxMjQ3LCAxMzEyNTIsIDEzMTI2MywgMTMxMjY1LCAxMzEyNjcsIDEzMTI2OSwgMTMxMjcxLCAKLSAgICAxMzEyNzMsIDEzMTI3NSwgMTMxMjc3LCAxMzEyNzksIDEzMTI4MSwgMTMxMjgzLCAxMzEyODUsIDEzMTI4NywgMTMxMjg5LCAKLSAgICAxMzEyOTEsIDEzMTI5MywgMTMxMjk1LCAxMzEzMDAsIDEzMTMwMiwgMTMxMzA0LCAxMzEzMTUsIDEzMTMxNywgMTMxMzE5LCAKLSAgICAxMzEzMjEsIDEzMTMyMywgMTMxMzI1LCAxMzEzMjcsIDEzMTMyOSwgMTMxMzMxLCAxMzEzMzMsIDEzMTMzNSwgMTMxMzM3LCAKLSAgICAxMzEzMzksIDEzMTM0MSwgMTMxMzQzLCAxMzEzNDUsIDEzMTM0NywgMTMxMzQ5LCAxMzEzNTEsIDEzMTM1MywgMTMxMzU1LCAKLSAgICAxMzEzNTcsIDEzMTM1OSwgMTMxMzYxLCAxMzEzNjMsIDEzMTM2NSwgMTMxMzY3LCAxMzEzNjksIDEzMTM3MSwgMTMxMzczLCAKLSAgICAxMzEzNzUsIDEzMTM3NywgMTMxMzc5LCAxMzEzODEsIDEzMTM4MywgMTMxMzg1LCAxMzEzODcsIDEzMTM4OSwgMTMxMzkxLCAKLSAgICAxMzEzOTMsIDEzMTM5NSwgMTMxMzk3LCAxMzEzOTksIDEzMTQwMSwgMTMxNDAzLCAxMzE0MDUsIDEzMTQwNywgMTMxNDA5LCAKLSAgICAxMzE0MTEsIDEzMTQxMywgMTMxNDE1LCAxMzE0MTcsIDEzMTQxOSwgMTMxNDIxLCAxMzE0MjMsIDEzMTQyNSwgMTMxNDI3LCAKLSAgICAxMzE0MjksIDEzMTQzMSwgMTMxNDMzLCAxMzE0MzUsIDEzMTQzNywgMTMxNDM5LCAxMzE0NDEsIDEzMTQ0MywgMTMxNDQ1LCAKLSAgICAxMzE0NDcsIDEzMTQ0OSwgMTMxNDUxLCAxMzE0NTMsIDEzMTQ1NSwgMTMxNDU3LCAxMzE0NTksIDEzMTQ2MSwgMTMxNDYzLCAKLSAgICAxMzE0NjUsIDEzMTQ2NywgMTMxNDY5LCAxMzE0NzEsIDEzMTQ3MywgMTMxNDc1LCAxMzE0NzcsIDEzMTQ3OSwgMTMxNDgxLCAKLSAgICAxMzE0ODMsIDEzMTQ4NSwgMTMxNDg3LCAxMzE0ODksIDEzMTQ5MSwgMTMxNDkzLCAxMzE0OTUsIDEzMTQ5NywgMTMxNDk5LCAKLSAgICAxMzE1MDEsIDEzMTUwMywgMTMxNTA1LCAxMzE1MDcsIDEzMTUwOSwgMTMxNTExLCAxMzE1MTMsIDEzMTUxNSwgMTMxNTE3LCAKLSAgICAxMzE1MTksIDEzMTUyMSwgMTMxNTIzLCAxMzE1MjUsIDEzMTUyNywgMTMxNTI5LCAxMzE1MzEsIDEzMTUzMywgMTMxNTM1LCAKLSAgICAxMzE1MzcsIDEzMTUzOSwgMTMxNTQxLCAxMzE1NDMsIDEzMTU0NSwgMTMxNTQ3LCAxMzE1NDksIDEzMTU1MSwgMTMxNTUzLCAKLSAgICAxMzE1NTUsIDEzMTU1NywgMTMxNTU5LCAxMzE1NjEsIDEzMTU2MywgMTMxNTY1LCAxMzE1NjcsIDEzMTU2OSwgMTMxNTcxLCAKLSAgICAxMzE1NzMsIDEzMTU3NSwgMTMxNTc3LCAxMzE1NzksIDEzMTU4MSwgMTMxNTgzLCAxMzE1ODUsIDEzMTU4NywgMTMxNTg5LCAKLSAgICAxMzE1OTEsIDEzMTU5MywgMTMxNTk1LCAxMzE1OTcsIDEzMTU5OSwgMTMxNjAxLCAxMzE2MDMsIDEzMTYwNSwgMTMxNjA3LCAKLSAgICAxMzE2MDksIDEzMTYxMSwgMTMxNjEzLCAxMzE2MTUsIDEzMTYxNywgMTMxNjE5LCAxMzE2MjEsIDEzMTYyMywgMTMxNjI1LCAKLSAgICAxMzE2MjcsIDEzMTYyOSwgMTMxNjMxLCAxMzE2MzMsIDEzMTYzNSwgMTMxNjM3LCAxMzE2MzksIDEzMTY0MSwgMTMxNjQzLCAKLSAgICAxMzE2NDUsIDEzMTY0NywgMTMxNjQ5LCAxMzE2NTEsIDEzMTY1MywgMTMxNjU1LCAxMzE2NTcsIDEzMTY1OSwgMTMxNjYxLCAKLSAgICAxMzE2NjMsIDEzMTY2NSwgMTMxNjY3LCAxMzE2NjksIDEzMTY3MSwgMTMxNjczLCAxMzE2NzUsIDEzMTY3NywgMTMxNjc5LCAKLSAgICAxMzE2ODEsIDEzMTY4MywgMTMxNjg1LCAxMzE2ODcsIDEzMTY4OSwgMTMxNjkxLCAxMzE2OTMsIDEzMTY5NSwgMTMxNjk3LCAKLSAgICAxMzE2OTksIDEzMTcwMSwgMTMxNzAzLCAxMzE3MDUsIDEzMTcwNywgMTMxNzA5LCAxMzE3MTEsIDEzMTcxMywgMTMxNzE1LCAKLSAgICAxMzE3MTcsIDEzMTcxOSwgMTMxNzIxLCAxMzE3MjMsIDEzMTcyNSwgMTMxNzI3LCAxMzE3MjksIDEzMTczMSwgMTMxNzMzLCAKLSAgICAxMzE3MzUsIDEzMTczNywgMTMxNzM5LCAxMzE3NDEsIDEzMTc0MywgMTMxNzQ1LCAxMzE3NDcsIDEzMTc0OSwgMTMxNzUxLCAKLSAgICAxMzE3NTMsIDEzMTc1NSwgMTMxNzU3LCAxMzE3NTksIDEzMTc2MSwgMTMxNzYzLCAxMzE3NjUsIDEzMTc2NywgMTMxNzY5LCAKLSAgICAxMzE3NzEsIDEzMTc3MywgMTMxNzc1LCAxMzE3NzcsIDEzMTc3OSwgMTMxNzgxLCAxMzE3ODMsIDEzMTc4NSwgMTMxNzg3LCAKLSAgICAxMzE3ODksIDEzMTc5MSwgMTMxNzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzE3OTUsIDEzMTgwNSwgMTMxODE1LCAxMzE4MjQsIDEzMTgzMywgMTMxODQ2LCAxMzE4NTksIDEzMTg3MSwgMTMxODgzLCAKLSAgICAxMzE4OTMsIDEzMTkwMywgMTMxOTEzLCAxMzE5MjMsIDEzMTkzNCwgMTMxOTQ1LCAxMzE5NTUsIDEzMTk2NCwgMTMxOTczLCAKLSAgICAxMzE5ODIsIDEzMTk5NSwgMTMyMDA4LCAxMzIwMjAsIDEzMjAzMiwgMTMyMDQyLCAxMzIwNTIsIDEzMjA2MiwgMTMyMDcyLCAKLSAgICAxMzIwODEsIDEzMjA5MCwgMTMyMDk5LCAxMzIxMDgsIDEzMjExNywgMTMyMTI2LCAxMzIxMzUsIDEzMjE0NCwgMTMyMTUzLCAKLSAgICAxMzIxNjIsIDEzMjE3MSwgMTMyMTgwLCAxMzIxOTEsIDEzMjIwMSwgMTMyMjExLCAxMzIyMjQsIDEzMjIzNCwgMTMyMjQ3LCAKLSAgICAxMzIyNTQsIDEzMjI2NCwgMTMyMjcxLCAxMzIyNzgsIDEzMjI4NSwgMTMyMjkyLCAxMzIyOTksIDEzMjMwNiwgMTMyMzE1LCAKLSAgICAxMzIzMjQsIDEzMjMzMywgMTMyMzQyLCAxMzIzNTEsIDEzMjM2MCwgMTMyMzY5LCAxMzIzNzgsIDEzMjM4NiwgMTMyMzk0LCAKLSAgICAxMzI0MDEsIDEzMjQxMSwgMTMyNDIwLCAxMzI0MjgsIDEzMjQzNSwgMTMyNDQ1LCAxMzI0NTQsIDEzMjQ1OCwgMTMyNDYyLCAKLSAgICAxMzI0NjYsIDEzMjQ3MCwgMTMyNDc0LCAxMzI0NzgsIDEzMjQ4MiwgMTMyNDg2LCAxMzI0OTAsIDEzMjQ5NCwgMTMyNDk3LCAKLSAgICAxMzI1MDEsIDEzMjUwNCwgMTMyNTA3LCAxMzI1MTEsIDEzMjUxNSwgMTMyNTE5LCAxMzI1MjMsIDEzMjUyNywgMTMyNTMxLCAKLSAgICAxMzI1MzUsIDEzMjUzOSwgMTMyNTQzLCAxMzI1NDcsIDEzMjU1MSwgMTMyNTU1LCAxMzI1NTksIDEzMjU2MywgMTMyNTY3LCAKLSAgICAxMzI1NzEsIDEzMjU3NSwgMTMyNTc5LCAxMzI1ODMsIDEzMjU4NywgMTMyNTkxLCAxMzI1OTUsIDEzMjU5OSwgMTMyNjAzLCAKLSAgICAxMzI2MDcsIDEzMjYxMSwgMTMyNjE1LCAxMzI2MTksIDEzMjYyMywgMTMyNjI3LCAxMzI2MzEsIDEzMjYzNSwgMTMyNjM5LCAKLSAgICAxMzI2NDMsIDEzMjY0NywgMTMyNjUxLCAxMzI2NTUsIDEzMjY1OSwgMTMyNjYzLCAxMzI2NjcsIDEzMjY3MSwgMTMyNjc1LCAKLSAgICAxMzI2NzksIDEzMjY4MywgMTMyNjg3LCAxMzI2OTEsIDEzMjY5NSwgMTMyNjk5LCAxMzI3MDMsIDEzMjcwNywgMTMyNzExLCAKLSAgICAxMzI3MTUsIDEzMjcxOSwgMTMyNzIzLCAxMzI3MjcsIDEzMjczMSwgMTMyNzM1LCAxMzI3MzksIDEzMjc0MywgMTMyNzQ3LCAKLSAgICAxMzI3NTEsIDEzMjc1NSwgMTMyNzU5LCAxMzI3NjMsIDEzMjc2NywgMTMyNzcxLCAxMzI3NzUsIDEzMjc3OSwgMTMyNzgzLCAKLSAgICAxMzI3ODcsIDEzMjc5MSwgMTMyNzk1LCAxMzI3OTksIDEzMjgwMywgMTMyODA3LCAxMzI4MTEsIDEzMjgxNSwgMTMyODE5LCAKLSAgICAxMzI4MjMsIDEzMjgyNywgMTMyODMxLCAxMzI4MzUsIDEzMjgzOSwgMTMyODQzLCAxMzI4NDcsIDEzMjg1MCwgMTMyODU0LCAKLSAgICAxMzI4NTgsIDEzMjg2MiwgMTMyODY2LCAxMzI4NzAsIDEzMjg3NCwgMTMyODc4LCAxMzI4ODIsIDEzMjg4NiwgMTMyODkwLCAKLSAgICAxMzI4OTQsIDEzMjg5OCwgMTMyOTAyLCAxMzI5MDYsIDEzMjkxMCwgMTMyOTE0LCAxMzI5MTgsIDEzMjkyMiwgMTMyOTI2LCAKLSAgICAxMzI5MzAsIDEzMjkzNCwgMTMyOTM4LCAxMzI5NDIsIDEzMjk0NiwgMTMyOTUwLCAxMzI5NTQsIDEzMjk1OCwgMTMyOTYyLCAKLSAgICAxMzI5NjYsIDEzMjk3MCwgMTMyOTc0LCAxMzI5NzgsIDEzMjk4MiwgMTMyOTg2LCAxMzI5OTAsIDEzMjk5NCwgMTMyOTk4LCAKLSAgICAxMzMwMDIsIDEzMzAwNiwgMTMzMDEwLCAxMzMwMTQsIDEzMzAxOCwgMTMzMDIyLCAxMzMwMjYsIDEzMzAzMCwgMTMzMDM0LCAKLSAgICAxMzMwMzgsIDEzMzA0MiwgMTMzMDQ2LCAxMzMwNTAsIDEzMzA1NCwgMTMzMDU4LCAxMzMwNjIsIDEzMzA2NiwgMTMzMDcwLCAKLSAgICAxMzMwNzQsIDEzMzA3OCwgMTMzMDgyLCAxMzMwODYsIDEzMzA5MCwgMTMzMDk0LCAxMzMwOTgsIDEzMzEwMiwgMTMzMTA2LCAKLSAgICAxMzMxMTAsIDEzMzExNCwgMTMzMTE4LCAxMzMxMjIsIDEzMzEyNiwgMTMzMTMwLCAxMzMxMzQsIDEzMzEzOCwgMTMzMTQyLCAKLSAgICAxMzMxNDYsIDEzMzE1MCwgMTMzMTU0LCAxMzMxNTgsIDEzMzE2MiwgMTMzMTY2LCAxMzMxNzAsIDEzMzE3NCwgMTMzMTc4LCAKLSAgICAxMzMxODIsIDEzMzE4NiwgMTMzMTkwLCAxMzMxOTQsIDEzMzE5OCwgMTMzMjAyLCAxMzMyMDYsIDEzMzIxMCwgMTMzMjE0LCAKLSAgICAxMzMyMTgsIDEzMzIyMiwgMTMzMjI2LCAxMzMyMzAsIDEzMzIzNCwgMTMzMjM4LCAxMzMyNDIsIDEzMzI0NiwgMTMzMjUwLCAKLSAgICAxMzMyNTQsIDEzMzI1OCwgMTMzMjYyLCAxMzMyNjYsIDEzMzI3MCwgMTMzMjc0LCAxMzMyNzgsIDEzMzI4MiwgMTMzMjg2LCAKLSAgICAxMzMyOTAsIDEzMzI5NCwgMTMzMjk4LCAxMzMzMDIsIDEzMzMwNiwgMTMzMzEwLCAxMzMzMTQsIDEzMzMxOCwgMTMzMzIyLCAKLSAgICAxMzMzMjYsIDEzMzMzMCwgMTMzMzM0LCAxMzMzMzgsIDEzMzM0MiwgMTMzMzQ2LCAxMzMzNTAsIDEzMzM1NCwgMTMzMzU4LCAKLSAgICAxMzMzNjIsIDEzMzM2NiwgMTMzMzcwLCAxMzMzNzQsIDEzMzM3OCwgMTMzMzgyLCAxMzMzODYsIDEzMzM5MCwgMTMzMzk0LCAKLSAgICAxMzMzOTgsIDEzMzQwMiwgMTMzNDA2LCAxMzM0MTAsIDEzMzQxNCwgMTMzNDE4LCAxMzM0MjIsIDEzMzQyNiwgMTMzNDMwLCAKLSAgICAxMzM0MzQsIDEzMzQzOCwgMTMzNDQyLCAxMzM0NDYsIDEzMzQ1MCwgMTMzNDU0LCAxMzM0NTgsIDEzMzQ2MiwgMTMzNDY2LCAKLSAgICAxMzM0NzAsIDEzMzQ3NCwgMTMzNDc4LCAxMzM0ODIsIDEzMzQ4NiwgMTMzNDkwLCAxMzM0OTQsIDEzMzQ5OCwgMTMzNTAyLCAKLSAgICAxMzM1MDYsIDEzMzUxMCwgMTMzNTE0LCAxMzM1MTgsIDEzMzUyMiwgMTMzNTI2LCAxMzM1MzAsIDEzMzUzNCwgMTMzNTM4LCAKLSAgICAxMzM1NDIsIDEzMzU0NiwgMTMzNTUwLCAxMzM1NTQsIDEzMzU1OCwgMTMzNTYyLCAxMzM1NjYsIDEzMzU3MCwgMTMzNTc0LCAKLSAgICAxMzM1NzgsIDEzMzU4MiwgMTMzNTg2LCAxMzM1OTAsIDEzMzU5NCwgMTMzNTk4LCAxMzM2MDIsIDEzMzYwNiwgMTMzNjEwLCAKLSAgICAxMzM2MTQsIDEzMzYxOSwgMTMzNjI0LCAxMzM2MjksIDEzMzYzMywgMTMzNjM5LCAxMzM2NDYsIDEzMzY1MywgMTMzNjYwLCAKLSAgICAxMzM2NjcsIDEzMzY3NCwgMTMzNjgxLCAxMzM2ODgsIDEzMzY5NSwgMTMzNzAyLCAxMzM3MDksIDEzMzcxNiwgMTMzNzIzLCAKLSAgICAxMzM3MzAsIDEzMzczNiwgMTMzNzQzLCAxMzM3NTAsIDEzMzc1NiwgMTMzNzYzLCAxMzM3NzAsIDEzMzc3NywgMTMzNzg0LCAKLSAgICAxMzM3OTEsIDEzMzc5OCwgMTMzODA1LCAxMzM4MTIsIDEzMzgxOSwgMTMzODI2LCAxMzM4MzMsIDEzMzg0MCwgMTMzODQ3LCAKLSAgICAxMzM4NTMsIDEzMzg1OSwgMTMzODY2LCAxMzM4NzMsIDEzMzg4MiwgMTMzODkxLCAxMzM5MDAsIDEzMzkwOSwgMTMzOTE0LCAKLSAgICAxMzM5MTksIDEzMzkyNSwgMTMzOTMxLCAxMzM5MzcsIDEzMzk0MywgMTMzOTQ5LCAxMzM5NTUsIDEzMzk2MSwgMTMzOTY3LCAKLSAgICAxMzM5NzMsIDEzMzk3OSwgMTMzOTg1LCAxMzM5OTEsIDEzMzk5NiwgMTM0MDAyLCAxMzQwMTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyOTQ1NCwgMTI5NDU3LCAxMjk0NjEsIDEyOTQ2NSwgMTI5NDY4LCAxMjk0NzIsIDEyOTQ3NiwgCisgICAgMTI5NDc5LCAxMjk0ODIsIDEyOTQ4NiwgMTI5NDkwLCAxMjk0OTMsIDEyOTQ5NiwgMTI5NDk5LCAxMjk1MDIsIDEyOTUwNywgCisgICAgMTI5NTEwLCAxMjk1MTQsIDEyOTUxNywgMTI5NTIwLCAxMjk1MjMsIDEyOTUyNiwgMTI5NTI5LCAxMjk1MzIsIDEyOTUzNSwgCisgICAgMTI5NTM4LCAxMjk1NDEsIDEyOTU0NCwgMTI5NTQ3LCAxMjk1NTEsIDEyOTU1NSwgMTI5NTU5LCAxMjk1NjMsIDEyOTU2OCwgCisgICAgMTI5NTczLCAxMjk1NzksIDEyOTU4NSwgMTI5NTkxLCAxMjk1OTYsIDEyOTYwMiwgMTI5NjA4LCAxMjk2MTQsIDEyOTYxOSwgCisgICAgMTI5NjI1LCAxMjk2MzEsIDEyOTYzNiwgMTI5NjQxLCAxMjk2NDcsIDEyOTY1MiwgMTI5NjU4LCAxMjk2NjQsIDEyOTY2OSwgCisgICAgMTI5Njc1LCAxMjk2ODEsIDEyOTY4NiwgMTI5NjkyLCAxMjk2OTgsIDEyOTcwNCwgMTI5NzEwLCAxMjk3MTYsIDEyOTcyMCwgCisgICAgMTI5NzI1LCAxMjk3MjksIDEyOTczNCwgMTI5NzM4LCAxMjk3NDMsIDEyOTc0OCwgMTI5NzU0LCAxMjk3NjAsIDEyOTc2NiwgCisgICAgMTI5NzcxLCAxMjk3NzcsIDEyOTc4MywgMTI5Nzg5LCAxMjk3OTQsIDEyOTgwMCwgMTI5ODA2LCAxMjk4MTEsIDEyOTgxNiwgCisgICAgMTI5ODIyLCAxMjk4MjcsIDEyOTgzMywgMTI5ODM5LCAxMjk4NDQsIDEyOTg1MCwgMTI5ODU2LCAxMjk4NjEsIDEyOTg2NywgCisgICAgMTI5ODczLCAxMjk4NzksIDEyOTg4NSwgMTI5ODkxLCAxMjk4OTYsIDEyOTkwMCwgMTI5OTA1LCAxMjk5MDcsIDEyOTkxMSwgCisgICAgMTI5OTE0LCAxMjk5MTcsIDEyOTkyMCwgMTI5OTIzLCAxMjk5MjYsIDEyOTkyOSwgMTI5OTMyLCAxMjk5MzUsIDEyOTkzOCwgCisgICAgMTI5OTQxLCAxMjk5NDQsIDEyOTk0NywgMTI5OTUwLCAxMjk5NTMsIDEyOTk1NiwgMTI5OTU5LCAxMjk5NjIsIDEyOTk2NSwgCisgICAgMTI5OTY4LCAxMjk5NzEsIDEyOTk3NCwgMTI5OTc3LCAxMjk5ODAsIDEyOTk4MywgMTI5OTg2LCAxMjk5ODksIDEyOTk5MiwgCisgICAgMTI5OTk1LCAxMjk5OTgsIDEzMDAwMSwgMTMwMDA0LCAxMzAwMDcsIDEzMDAxMCwgMTMwMDEzLCAxMzAwMTYsIDEzMDAxOSwgCisgICAgMTMwMDIyLCAxMzAwMjUsIDEzMDAyOCwgMTMwMDMxLCAxMzAwMzQsIDEzMDAzNywgMTMwMDQwLCAxMzAwNDMsIDEzMDA0NiwgCisgICAgMTMwMDQ5LCAxMzAwNTIsIDEzMDA1NSwgMTMwMDU4LCAxMzAwNjEsIDEzMDA2NCwgMTMwMDY3LCAxMzAwNzAsIDEzMDA3MywgCisgICAgMTMwMDc2LCAxMzAwNzksIDEzMDA4MiwgMTMwMDg1LCAxMzAwODgsIDEzMDA5MSwgMTMwMDk0LCAxMzAwOTcsIDEzMDEwMCwgCisgICAgMTMwMTAzLCAxMzAxMDYsIDEzMDEwOSwgMTMwMTEyLCAxMzAxMTUsIDEzMDExOCwgMTMwMTIxLCAxMzAxMjQsIDEzMDEyNywgCisgICAgMTMwMTMwLCAxMzAxMzMsIDEzMDEzNiwgMTMwMTM5LCAxMzAxNDIsIDEzMDE0NSwgMTMwMTQ4LCAxMzAxNTEsIDEzMDE1NCwgCisgICAgMTMwMTU3LCAxMzAxNjAsIDEzMDE2MywgMTMwMTY2LCAxMzAxNjksIDEzMDE3MiwgMTMwMTc1LCAxMzAxNzgsIDEzMDE4MSwgCisgICAgMTMwMTg0LCAxMzAxODcsIDEzMDE5MCwgMTMwMTkzLCAxMzAxOTYsIDEzMDE5OSwgMTMwMjAyLCAxMzAyMDUsIDEzMDIwOCwgCisgICAgMTMwMjExLCAxMzAyMTQsIDEzMDIxNywgMTMwMjIwLCAxMzAyMjMsIDEzMDIyNiwgMTMwMjI5LCAxMzAyMzIsIDEzMDIzNSwgCisgICAgMTMwMjM4LCAxMzAyNDEsIDEzMDI0NCwgMTMwMjQ3LCAxMzAyNTAsIDEzMDI1MywgMTMwMjU2LCAxMzAyNTksIDEzMDI2MiwgCisgICAgMTMwMjY1LCAxMzAyNjgsIDEzMDI3MSwgMTMwMjc0LCAxMzAyNzcsIDEzMDI4MCwgMTMwMjgzLCAxMzAyODYsIDEzMDI4OSwgCisgICAgMTMwMjkyLCAxMzAyOTUsIDEzMDI5OCwgMTMwMzAxLCAxMzAzMDQsIDEzMDMwNywgMTMwMzEwLCAxMzAzMTMsIDEzMDMxNiwgCisgICAgMTMwMzE5LCAxMzAzMjIsIDEzMDMyNSwgMTMwMzI4LCAxMzAzMzEsIDEzMDMzNCwgMTMwMzM3LCAxMzAzNDAsIDEzMDM0MywgCisgICAgMTMwMzQ2LCAxMzAzNDksIDEzMDM1MiwgMTMwMzU1LCAxMzAzNTgsIDEzMDM2MSwgMTMwMzY0LCAxMzAzNjcsIDEzMDM3MCwgCisgICAgMTMwMzczLCAxMzAzNzYsIDEzMDM3OSwgMTMwMzgyLCAxMzAzODUsIDEzMDM4OCwgMTMwMzkxLCAxMzAzOTQsIDEzMDM5NywgCisgICAgMTMwNDAwLCAxMzA0MDMsIDEzMDQwNiwgMTMwNDA5LCAxMzA0MTIsIDEzMDQxNSwgMTMwNDE4LCAxMzA0MjEsIDEzMDQyNCwgCisgICAgMTMwNDI3LCAxMzA0MzAsIDEzMDQzMywgMTMwNDM2LCAxMzA0MzksIDEzMDQ0MiwgMTMwNDQ1LCAxMzA0NDgsIDEzMDQ1MSwgCisgICAgMTMwNDU0LCAxMzA0NTcsIDEzMDQ2MCwgMTMwNDYzLCAxMzA0NjYsIDEzMDQ2OSwgMTMwNDcyLCAxMzA0NzUsIDEzMDQ3OCwgCisgICAgMTMwNDgxLCAxMzA0ODQsIDEzMDQ4NywgMTMwNDkwLCAxMzA0OTMsIDEzMDQ5NiwgMTMwNDk5LCAxMzA1MDIsIDEzMDUwNSwgCisgICAgMTMwNTA4LCAxMzA1MTEsIDEzMDUxNCwgMTMwNTE3LCAxMzA1MjAsIDEzMDUyMywgMTMwNTI2LCAxMzA1MjksIDEzMDUzMiwgCisgICAgMTMwNTM1LCAxMzA1MzgsIDEzMDU0MSwgMTMwNTQ0LCAxMzA1NDcsIDEzMDU1MCwgMTMwNTUzLCAxMzA1NTYsIDEzMDU1OSwgCisgICAgMTMwNTYyLCAxMzA1NjUsIDEzMDU2OCwgMTMwNTcxLCAxMzA1NzQsIDEzMDU3NywgMTMwNTgwLCAxMzA1ODMsIDEzMDU4NiwgCisgICAgMTMwNTg5LCAxMzA1OTIsIDEzMDU5NSwgMTMwNTk4LCAxMzA2MDEsIDEzMDYwNCwgMTMwNjA3LCAxMzA2MTAsIDEzMDYxMywgCisgICAgMTMwNjE2LCAxMzA2MTksIDEzMDYyMiwgMTMwNjI1LCAxMzA2MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMDYzMSwgMTMwNjMzLCAxMzA2MzUsIDEzMDY0MCwgMTMwNjQyLCAxMzA2NDcsIDEzMDY0OSwgCisgICAgMTMwNjU0LCAxMzA2NTYsIDEzMDY2MSwgMTMwNjYzLCAxMzA2NjUsIDEzMDY2NywgMTMwNjY5LCAxMzA2NzEsIDEzMDY3MywgCisgICAgMTMwNjc1LCAxMzA2NzcsIDEzMDY3OSwgMTMwNjgyLCAxMzA2ODUsIDEzMDY4NywgMTMwNjg5LCAxMzA2OTMsIDEzMDY5NiwgCisgICAgMTMwNzAxLCAxMzA3MDMsIDEzMDcwNSwgMTMwNzA3LCAxMzA3MTEsIDEzMDcxNCwgMTMwNzE2LCAxMzA3MjAsIDEzMDcyMiwgCisgICAgMTMwNzI2LCAxMzA3MjgsIDEzMDczMiwgMTMwNzM1LCAxMzA3MzcsIDEzMDc0MSwgMTMwNzQ1LCAxMzA3NDcsIDEzMDc1MywgCisgICAgMTMwNzU1LCAxMzA3NjAsIDEzMDc2MiwgMTMwNzY3LCAxMzA3NjksIDEzMDc3NCwgMTMwNzc2LCAxMzA3ODEsIDEzMDc4MywgCisgICAgMTMwNzg2LCAxMzA3ODgsIDEzMDc5MiwgMTMwNzk0LCAxMzA4MDEsIDEzMDgwMywgMTMwODA1LCAxMzA4MDcsIDEzMDgxMiwgCisgICAgMTMwODE0LCAxMzA4MTYsIDEzMDgxOCwgMTMwODIwLCAxMzA4MjIsIDEzMDgyNywgMTMwODMxLCAxMzA4MzMsIDEzMDgzOCwgCisgICAgMTMwODQyLCAxMzA4NDQsIDEzMDg0OSwgMTMwODUzLCAxMzA4NTUsIDEzMDg2MCwgMTMwODY0LCAxMzA4NjYsIDEzMDg2OCwgCisgICAgMTMwODcwLCAxMzA4NzIsIDEzMDg3NiwgMTMwODc4LCAxMzA4ODMsIDEzMDg4NSwgMTMwODkxLCAxMzA4OTMsIDEzMDg5OSwgCisgICAgMTMwOTAxLCAxMzA5MDMsIDEzMDkwNSwgMTMwOTA5LCAxMzA5MTEsIDEzMDkxOCwgMTMwOTIwLCAxMzA5MjcsIDEzMDkyOSwgCisgICAgMTMwOTM0LCAxMzA5MzksIDEzMDk0MSwgMTMwOTQ3LCAxMzA5NTMsIDEzMDk1NSwgMTMwOTYxLCAxMzA5NjYsIDEzMDk2OCwgCisgICAgMTMwOTc0LCAxMzA5ODAsIDEzMDk4MiwgMTMwOTg4LCAxMzA5OTQsIDEzMDk5NiwgMTMxMDAyLCAxMzEwMDYsIDEzMTAwOCwgCisgICAgMTMxMDEzLCAxMzEwMTUsIDEzMTAxNywgMTMxMDIyLCAxMzEwMjQsIDEzMTAyNiwgMTMxMDMyLCAxMzEwMzQsIDEzMTAzOSwgCisgICAgMTMxMDQzLCAxMzEwNDUsIDEzMTA1MCwgMTMxMDU0LCAxMzEwNTYsIDEzMTA2MiwgMTMxMDY0LCAxMzEwNjgsIDEzMTA3MCwgCisgICAgMTMxMDc0LCAxMzEwNzYsIDEzMTA4MywgMTMxMDkwLCAxMzEwOTIsIDEzMTA5OSwgMTMxMTA2LCAxMzExMDgsIDEzMTExMywgCisgICAgMTMxMTE1LCAxMzExMjIsIDEzMTEyNCwgMTMxMTI5LCAxMzExMzEsIDEzMTEzNywgMTMxMTM5LCAxMzExNDMsIDEzMTE0NSwgCisgICAgMTMxMTUxLCAxMzExNTMsIDEzMTE1NywgMTMxMTU5LCAxMzExNjUsIDEzMTE2NywgMTMxMTY5LCAxMzExNzEsIDEzMTE3NiwgCisgICAgMTMxMTgxLCAxMzExODMsIDEzMTE4NSwgMTMxMTk0LCAxMzExOTgsIDEzMTIwNSwgMTMxMjEyLCAxMzEyMTcsIDEzMTIyMiwgCisgICAgMTMxMjM0LCAxMzEyMzYsIDEzMTIzOCwgMTMxMjQwLCAxMzEyNDIsIDEzMTI0NCwgMTMxMjQ2LCAxMzEyNDgsIDEzMTI1MCwgCisgICAgMTMxMjUyLCAxMzEyNTQsIDEzMTI1NiwgMTMxMjU4LCAxMzEyNjAsIDEzMTI2MiwgMTMxMjY0LCAxMzEyNjYsIDEzMTI2OCwgCisgICAgMTMxMjcwLCAxMzEyNzIsIDEzMTI3NCwgMTMxMjc2LCAxMzEyODIsIDEzMTI4OSwgMTMxMjk0LCAxMzEyOTksIDEzMTMxMCwgCisgICAgMTMxMzEyLCAxMzEzMTQsIDEzMTMxNiwgMTMxMzE4LCAxMzEzMjAsIDEzMTMyMiwgMTMxMzI0LCAxMzEzMjYsIDEzMTMyOCwgCisgICAgMTMxMzMwLCAxMzEzMzIsIDEzMTMzNCwgMTMxMzM2LCAxMzEzMzgsIDEzMTM0MCwgMTMxMzQyLCAxMzEzNDcsIDEzMTM0OSwgCisgICAgMTMxMzUxLCAxMzEzNTcsIDEzMTM2OSwgMTMxMzgwLCAxMzEzODIsIDEzMTM4NCwgMTMxMzg2LCAxMzEzODgsIDEzMTM5MCwgCisgICAgMTMxMzkyLCAxMzEzOTQsIDEzMTM5NiwgMTMxMzk4LCAxMzE0MDAsIDEzMTQwMiwgMTMxNDA0LCAxMzE0MDYsIDEzMTQwOCwgCisgICAgMTMxNDEwLCAxMzE0MTIsIDEzMTQxNCwgMTMxNDE2LCAxMzE0MTgsIDEzMTQyMCwgMTMxNDIyLCAxMzE0MjQsIDEzMTQyNiwgCisgICAgMTMxNDI4LCAxMzE0MzAsIDEzMTQzMiwgMTMxNDM0LCAxMzE0MzYsIDEzMTQzOCwgMTMxNDQwLCAxMzE0NDIsIDEzMTQ0NCwgCisgICAgMTMxNDQ2LCAxMzE0NDgsIDEzMTQ1MCwgMTMxNDUyLCAxMzE0NTQsIDEzMTQ1NiwgMTMxNDU4LCAxMzE0NjAsIDEzMTQ2MiwgCisgICAgMTMxNDY0LCAxMzE0NjYsIDEzMTQ2OCwgMTMxNDcwLCAxMzE0NzIsIDEzMTQ3NCwgMTMxNDc2LCAxMzE0NzgsIDEzMTQ4MCwgCisgICAgMTMxNDgyLCAxMzE0ODQsIDEzMTQ4NiwgMTMxNDg4LCAxMzE0OTAsIDEzMTQ5MiwgMTMxNDk0LCAxMzE0OTYsIDEzMTQ5OCwgCisgICAgMTMxNTAwLCAxMzE1MDIsIDEzMTUwNCwgMTMxNTA2LCAxMzE1MDgsIDEzMTUxMCwgMTMxNTEyLCAxMzE1MTQsIDEzMTUxNiwgCisgICAgMTMxNTE4LCAxMzE1MjAsIDEzMTUyMiwgMTMxNTI0LCAxMzE1MjYsIDEzMTUyOCwgMTMxNTMwLCAxMzE1MzIsIDEzMTUzNCwgCisgICAgMTMxNTM2LCAxMzE1MzgsIDEzMTU0MCwgMTMxNTQyLCAxMzE1NDQsIDEzMTU0NiwgMTMxNTQ4LCAxMzE1NTAsIDEzMTU1MiwgCisgICAgMTMxNTU0LCAxMzE1NTYsIDEzMTU1OCwgMTMxNTYwLCAxMzE1NjIsIDEzMTU2NCwgMTMxNTY2LCAxMzE1NjgsIDEzMTU3MCwgCisgICAgMTMxNTcyLCAxMzE1NzQsIDEzMTU3NiwgMTMxNTc4LCAxMzE1ODAsIDEzMTU4MiwgMTMxNTg0LCAxMzE1ODYsIDEzMTU4OCwgCisgICAgMTMxNTkwLCAxMzE1OTIsIDEzMTU5NCwgMTMxNTk2LCAxMzE1OTgsIDEzMTYwMCwgMTMxNjAyLCAxMzE2MDQsIDEzMTYwNiwgCisgICAgMTMxNjA4LCAxMzE2MTAsIDEzMTYxMiwgMTMxNjE0LCAxMzE2MTYsIDEzMTYxOCwgMTMxNjIwLCAxMzE2MjIsIDEzMTYyNCwgCisgICAgMTMxNjI2LCAxMzE2MjgsIDEzMTYzMCwgMTMxNjMyLCAxMzE2MzQsIDEzMTYzNiwgMTMxNjM4LCAxMzE2NDAsIDEzMTY0MiwgCisgICAgMTMxNjQ0LCAxMzE2NDYsIDEzMTY0OCwgMTMxNjUwLCAxMzE2NTIsIDEzMTY1NCwgMTMxNjU2LCAxMzE2NTgsIDEzMTY2MCwgCisgICAgMTMxNjYyLCAxMzE2NjQsIDEzMTY2NiwgMTMxNjY4LCAxMzE2NzAsIDEzMTY3MiwgMTMxNjc0LCAxMzE2NzYsIDEzMTY3OCwgCisgICAgMTMxNjgwLCAxMzE2ODIsIDEzMTY4NCwgMTMxNjg2LCAxMzE2ODgsIDEzMTY5MCwgMTMxNjkyLCAxMzE2OTQsIDEzMTY5NiwgCisgICAgMTMxNjk4LCAxMzE3MDAsIDEzMTcwMiwgMTMxNzA0LCAxMzE3MDYsIDEzMTcwOCwgMTMxNzEwLCAxMzE3MTIsIDEzMTcxNCwgCisgICAgMTMxNzE2LCAxMzE3MTgsIDEzMTcyMCwgMTMxNzIyLCAxMzE3MjQsIDEzMTcyNiwgMTMxNzI4LCAxMzE3MzAsIDEzMTczMiwgCisgICAgMTMxNzM0LCAxMzE3MzYsIDEzMTczOCwgMTMxNzQwLCAxMzE3NDIsIDEzMTc0NCwgMTMxNzQ2LCAxMzE3NDgsIDEzMTc1MCwgCisgICAgMTMxNzUyLCAxMzE3NTQsIDEzMTc1NiwgMTMxNzU4LCAxMzE3NjAsIDEzMTc2MiwgMTMxNzY0LCAxMzE3NjYsIDEzMTc2OCwgCisgICAgMTMxNzcwLCAxMzE3NzIsIDEzMTc3NCwgMTMxNzc2LCAxMzE3NzgsIDEzMTc4MCwgMTMxNzgyLCAxMzE3ODQsIDEzMTc4NiwgCisgICAgMTMxNzg4LCAxMzE3OTAsIDEzMTc5MiwgMTMxNzk0LCAxMzE3OTYsIDEzMTc5OCwgMTMxODAwLCAxMzE4MDIsIDEzMTgwNCwgCisgICAgMTMxODA2LCAxMzE4MDgsIDEzMTgxMCwgMTMxODEyLCAxMzE4MTQsIDEzMTgxNiwgMTMxODE4LCAxMzE4MjAsIDEzMTgyMiwgCisgICAgMTMxODI0LCAxMzE4MjYsIDEzMTgyOCwgMTMxODMwLCAxMzE4MzIsIDEzMTgzNCwgMTMxODM2LCAxMzE4MzgsIDEzMTg0MCwgCisgICAgMTMxODQyLCAxMzE4NDQsIDEzMTg0NiwgMTMxODQ4LCAxMzE4NTAsIDEzMTg1MiwgMTMxODU0LCAxMzE4NTYsIDEzMTg1OCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxODYwLCAxMzE4NzAsIDEzMTg4MCwgMTMxODg5LCAxMzE4OTgsIDEzMTkxMSwgCisgICAgMTMxOTI0LCAxMzE5MzYsIDEzMTk0OCwgMTMxOTU4LCAxMzE5NjgsIDEzMTk3OCwgMTMxOTg4LCAxMzE5OTksIDEzMjAxMCwgCisgICAgMTMyMDIwLCAxMzIwMjksIDEzMjAzOCwgMTMyMDQ3LCAxMzIwNjAsIDEzMjA3MywgMTMyMDg1LCAxMzIwOTcsIDEzMjEwNywgCisgICAgMTMyMTE3LCAxMzIxMjcsIDEzMjEzNywgMTMyMTQ2LCAxMzIxNTUsIDEzMjE2NCwgMTMyMTczLCAxMzIxODIsIDEzMjE5MSwgCisgICAgMTMyMjAwLCAxMzIyMDksIDEzMjIxOCwgMTMyMjI3LCAxMzIyMzYsIDEzMjI0NSwgMTMyMjU2LCAxMzIyNjYsIDEzMjI3NiwgCisgICAgMTMyMjg5LCAxMzIyOTksIDEzMjMxMiwgMTMyMzE5LCAxMzIzMjksIDEzMjMzNiwgMTMyMzQzLCAxMzIzNTAsIDEzMjM1NywgCisgICAgMTMyMzY0LCAxMzIzNzEsIDEzMjM4MCwgMTMyMzg5LCAxMzIzOTgsIDEzMjQwNywgMTMyNDE2LCAxMzI0MjUsIDEzMjQzNCwgCisgICAgMTMyNDQzLCAxMzI0NTEsIDEzMjQ1OSwgMTMyNDY2LCAxMzI0NzYsIDEzMjQ4NSwgMTMyNDkzLCAxMzI1MDAsIDEzMjUxMCwgCisgICAgMTMyNTE5LCAxMzI1MjksIDEzMjUzOSwgMTMyNTUwLCAxMzI1NjAsIDEzMjU2OSwgMTMyNTc5LCAxMzI1ODgsIDEzMjU5OCwgCisgICAgMTMyNjA2LCAxMzI2MTAsIDEzMjYxNCwgMTMyNjE4LCAxMzI2MjIsIDEzMjYyNiwgMTMyNjMwLCAxMzI2MzQsIDEzMjYzOCwgCisgICAgMTMyNjQyLCAxMzI2NDYsIDEzMjY0OSwgMTMyNjUzLCAxMzI2NTYsIDEzMjY1OSwgMTMyNjYzLCAxMzI2NjcsIDEzMjY3MSwgCisgICAgMTMyNjc1LCAxMzI2NzksIDEzMjY4MywgMTMyNjg3LCAxMzI2OTEsIDEzMjY5NSwgMTMyNjk5LCAxMzI3MDMsIDEzMjcwNywgCisgICAgMTMyNzExLCAxMzI3MTUsIDEzMjcxOSwgMTMyNzIzLCAxMzI3MjcsIDEzMjczMSwgMTMyNzM1LCAxMzI3MzksIDEzMjc0MywgCisgICAgMTMyNzQ3LCAxMzI3NTEsIDEzMjc1NSwgMTMyNzU5LCAxMzI3NjMsIDEzMjc2NywgMTMyNzcxLCAxMzI3NzUsIDEzMjc3OSwgCisgICAgMTMyNzgzLCAxMzI3ODcsIDEzMjc5MSwgMTMyNzk1LCAxMzI3OTksIDEzMjgwMywgMTMyODA3LCAxMzI4MTEsIDEzMjgxNSwgCisgICAgMTMyODE5LCAxMzI4MjMsIDEzMjgyNywgMTMyODMxLCAxMzI4MzUsIDEzMjgzOSwgMTMyODQzLCAxMzI4NDcsIDEzMjg1MSwgCisgICAgMTMyODU1LCAxMzI4NTksIDEzMjg2MywgMTMyODY3LCAxMzI4NzEsIDEzMjg3NSwgMTMyODc5LCAxMzI4ODMsIDEzMjg4NywgCisgICAgMTMyODkxLCAxMzI4OTUsIDEzMjg5OSwgMTMyOTAzLCAxMzI5MDcsIDEzMjkxMSwgMTMyOTE1LCAxMzI5MTksIDEzMjkyMywgCisgICAgMTMyOTI3LCAxMzI5MzEsIDEzMjkzNSwgMTMyOTM5LCAxMzI5NDMsIDEzMjk0NywgMTMyOTUxLCAxMzI5NTUsIDEzMjk1OSwgCisgICAgMTMyOTYzLCAxMzI5NjcsIDEzMjk3MSwgMTMyOTc1LCAxMzI5NzksIDEzMjk4MywgMTMyOTg3LCAxMzI5OTEsIDEzMjk5NSwgCisgICAgMTMyOTk5LCAxMzMwMDIsIDEzMzAwNiwgMTMzMDEwLCAxMzMwMTQsIDEzMzAxOCwgMTMzMDIyLCAxMzMwMjYsIDEzMzAzMCwgCisgICAgMTMzMDM0LCAxMzMwMzgsIDEzMzA0MiwgMTMzMDQ2LCAxMzMwNTAsIDEzMzA1NCwgMTMzMDU4LCAxMzMwNjIsIDEzMzA2NiwgCisgICAgMTMzMDcwLCAxMzMwNzQsIDEzMzA3OCwgMTMzMDgyLCAxMzMwODYsIDEzMzA5MCwgMTMzMDk0LCAxMzMwOTgsIDEzMzEwMiwgCisgICAgMTMzMTA2LCAxMzMxMTAsIDEzMzExNCwgMTMzMTE4LCAxMzMxMjIsIDEzMzEyNiwgMTMzMTMwLCAxMzMxMzQsIDEzMzEzOCwgCisgICAgMTMzMTQyLCAxMzMxNDYsIDEzMzE1MCwgMTMzMTU0LCAxMzMxNTgsIDEzMzE2MiwgMTMzMTY2LCAxMzMxNzAsIDEzMzE3NCwgCisgICAgMTMzMTc4LCAxMzMxODIsIDEzMzE4NiwgMTMzMTkwLCAxMzMxOTQsIDEzMzE5OCwgMTMzMjAyLCAxMzMyMDYsIDEzMzIxMCwgCisgICAgMTMzMjE0LCAxMzMyMTgsIDEzMzIyMiwgMTMzMjI2LCAxMzMyMzAsIDEzMzIzNCwgMTMzMjM4LCAxMzMyNDIsIDEzMzI0NiwgCisgICAgMTMzMjUwLCAxMzMyNTQsIDEzMzI1OCwgMTMzMjYyLCAxMzMyNjYsIDEzMzI3MCwgMTMzMjc0LCAxMzMyNzgsIDEzMzI4MiwgCisgICAgMTMzMjg2LCAxMzMyOTAsIDEzMzI5NCwgMTMzMjk4LCAxMzMzMDIsIDEzMzMwNiwgMTMzMzEwLCAxMzMzMTQsIDEzMzMxOCwgCisgICAgMTMzMzIyLCAxMzMzMjYsIDEzMzMzMCwgMTMzMzM0LCAxMzMzMzgsIDEzMzM0MiwgMTMzMzQ2LCAxMzMzNTAsIDEzMzM1NCwgCisgICAgMTMzMzU4LCAxMzMzNjIsIDEzMzM2NiwgMTMzMzcwLCAxMzMzNzQsIDEzMzM3OCwgMTMzMzgyLCAxMzMzODYsIDEzMzM5MCwgCisgICAgMTMzMzk0LCAxMzMzOTgsIDEzMzQwMiwgMTMzNDA2LCAxMzM0MTAsIDEzMzQxNCwgMTMzNDE4LCAxMzM0MjIsIDEzMzQyNiwgCisgICAgMTMzNDMwLCAxMzM0MzQsIDEzMzQzOCwgMTMzNDQyLCAxMzM0NDYsIDEzMzQ1MCwgMTMzNDU0LCAxMzM0NTgsIDEzMzQ2MiwgCisgICAgMTMzNDY2LCAxMzM0NzAsIDEzMzQ3NCwgMTMzNDc4LCAxMzM0ODIsIDEzMzQ4NiwgMTMzNDkwLCAxMzM0OTQsIDEzMzQ5OCwgCisgICAgMTMzNTAyLCAxMzM1MDYsIDEzMzUxMCwgMTMzNTE0LCAxMzM1MTgsIDEzMzUyMiwgMTMzNTI2LCAxMzM1MzAsIDEzMzUzNCwgCisgICAgMTMzNTM4LCAxMzM1NDIsIDEzMzU0NiwgMTMzNTUwLCAxMzM1NTQsIDEzMzU1OCwgMTMzNTYyLCAxMzM1NjYsIDEzMzU3MCwgCisgICAgMTMzNTc0LCAxMzM1NzgsIDEzMzU4MiwgMTMzNTg2LCAxMzM1OTAsIDEzMzU5NCwgMTMzNTk4LCAxMzM2MDIsIDEzMzYwNiwgCisgICAgMTMzNjEwLCAxMzM2MTQsIDEzMzYxOCwgMTMzNjIyLCAxMzM2MjYsIDEzMzYzMCwgMTMzNjM0LCAxMzM2MzgsIDEzMzY0MiwgCisgICAgMTMzNjQ2LCAxMzM2NTAsIDEzMzY1NCwgMTMzNjU4LCAxMzM2NjIsIDEzMzY2NiwgMTMzNjcwLCAxMzM2NzQsIDEzMzY3OCwgCisgICAgMTMzNjgyLCAxMzM2ODYsIDEzMzY5MCwgMTMzNjk0LCAxMzM2OTgsIDEzMzcwMiwgMTMzNzA2LCAxMzM3MTAsIDEzMzcxNCwgCisgICAgMTMzNzE4LCAxMzM3MjIsIDEzMzcyNiwgMTMzNzMwLCAxMzM3MzQsIDEzMzczOCwgMTMzNzQyLCAxMzM3NDYsIDEzMzc1MCwgCisgICAgMTMzNzU0LCAxMzM3NTgsIDEzMzc2MiwgMTMzNzY2LCAxMzM3NzEsIDEzMzc3NiwgMTMzNzgxLCAxMzM3ODUsIDEzMzc5MSwgCisgICAgMTMzNzk4LCAxMzM4MDUsIDEzMzgxMiwgMTMzODE5LCAxMzM4MjYsIDEzMzgzMywgMTMzODQwLCAxMzM4NDcsIDEzMzg1NCwgCisgICAgMTMzODYxLCAxMzM4NjgsIDEzMzg3NSwgMTMzODgyLCAxMzM4ODgsIDEzMzg5NSwgMTMzOTAyLCAxMzM5MDgsIDEzMzkxNSwgCisgICAgMTMzOTIyLCAxMzM5MjksIDEzMzkzNiwgMTMzOTQzLCAxMzM5NTAsIDEzMzk1NywgMTMzOTY0LCAxMzM5NzEsIDEzMzk3OCwgCisgICAgMTMzOTg1LCAxMzM5OTIsIDEzMzk5OSwgMTM0MDA1LCAxMzQwMTEsIDEzNDAxOCwgMTM0MDI1LCAxMzQwMzQsIDEzNDA0MywgCisgICAgMTM0MDUyLCAxMzQwNjEsIDEzNDA2NiwgMTM0MDcxLCAxMzQwNzcsIDEzNDA4MywgMTM0MDg5LCAxMzQwOTUsIDEzNDEwMSwgCisgICAgMTM0MTA3LCAxMzQxMTMsIDEzNDExOSwgMTM0MTI1LCAxMzQxMzEsIDEzNDEzNywgMTM0MTQzLCAxMzQxNDgsIDEzNDE1NCwgCisgICAgMTM0MTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKIH07CiAKIC8qIG5hbWUtPmNvZGUgZGljdGlvbmFyeSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBjb2RlX2hhc2hbXSA9IHsKICAgICA3NDIyNCwgNDg1MSwgMCwgNzgxNTYsIDc4NDk5LCAxMjg2ODUsIDc5MjksIDAsIDE5NDY4MiwgMTI3NzY2LCA3ODUwMCwgCi0gICAgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgMTIwNjQsIDAsIDU5NiwgOTgzODEyLCA2OTg1MCwgMTMxOTIsIDg2NTEsIDAsIDAsIAorICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDk4MzgyMSwgNjk4NTAsIDEzMTkyLCA4NjUxLCAwLCAwLCAKICAgICAxMjAyMTgsIDEyOTk1LCA2NDg2NSwgMTM3MywgMCwgMCwgNTgxNiwgMTE5MDY3LCA2NDgxMCwgNDIzMSwgNjgyNSwgNDI4OTcsIAogICAgIDQyMzMsIDQyMzQsIDQyMzIsIDkxNzgzNiwgNzQ0MTUsIDEyMDIxMCwgNjM4NCwgOTE3ODQwLCA3ODEwOCwgODg1MSwgMCwgCi0gICAgMTI4NTUzLCAwLCA0MTYwMSwgODg3NCwgOTgzNzc0LCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCAKKyAgICAxMjg1NTMsIDAsIDQxNjAxLCA4ODc0LCA5ODM3ODMsIDc3NDgsIDAsIDAsIDAsIDEyNzkzOSwgNDE2MDMsIDk3ODQsIDAsIAogICAgIDkxODgsIDQxNjAwLCAwLCAxMjA2MTgsIDEyODM0MywgMTQ1NywgMzUzNSwgMCwgMCwgMCwgMCwgNjUyNDAsIDExOTUxLCAwLCAKICAgICAzNDA0LCAwLCAwLCAwLCAxNzU5LCAwLCA0MTA3NiwgNjgzODMsIDEyMDU3MiwgMTE5MjA1LCA2NjU3NywgOTQwMTQsIAotICAgIDEyNzc2NCwgNjU4NTksIDAsIDc0MDQsIDAsIDAsIDAsIDAsIDY1OTA4LCA5ODM0LCAzMDU1LCA5ODUyLCA5ODM4NTEsIAorICAgIDEyNzc2NCwgNjU4NTksIDAsIDc0MDQsIDAsIDAsIDAsIDAsIDY1OTA4LCA5ODM0LCAzMDU1LCA5ODUyLCA5ODM4NjAsIAogICAgIDY1Mjg4LCAwLCAxMTM5OCwgMCwgOTI0MTcsIDExOTI1NSwgMCwgMCwgNjAzLCA3NDM5OCwgNDM1NDgsIDAsIDAsIDkxNzgyNCwgCiAgICAgMzM1MCwgMTIwODE3LCA2NDMxOCwgOTE3ODI4LCAxMjcwODksIDMzOTAsIDc0NDgzLCA0MzI2NSwgMTIwNTk5LCA5MTc4MzAsIAogICAgIDc4NTczLCAwLCAxOTE5LCAzNDAwLCAxMjA2NTEsIDEyNzk0NCwgMTE2NDcsIDkxNzU0MCwgNjY0NDYsIDY0MTQxLCA4NTYyLCAKLSAgICAyMTIxLCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAxMTI5NywgOTgzNjc5LCA5ODMxNTIsIDExOTY2LCAKLSAgICA2NDEyOCwgMTI4NTg3LCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgOTgzODM1LCA0MzM3NCwgOTc3OSwgCisgICAgMjEyMSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDk4MzY4OCwgOTgzMTUyLCAxMTk2NiwgCisgICAgNjQxMjgsIDEyODU4NywgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDk4Mzg0NCwgNDMzNzQsIDk3NzksIAogICAgIDI3NjQsIDY2MDAyLCAxMDE2NywgOTQ3MSwgMCwgNjYwMjEsIDAsIDAsIDU0NTcsIDU0NDAsIDg4NTcsIDkzOTgxLCA2NTI4MiwgCi0gICAgMjg0MywgNTM1NSwgMTI3OTI4LCA5ODM5NTYsIDAsIDUxOTQsIDExNjU3LCA0Mzk4NCwgMTI4MjkyLCAwLCA5ODM2MjAsIDAsIAorICAgIDI4NDMsIDUzNTUsIDEyNzkyOCwgOTgzOTY1LCAwLCA1MTk0LCAxMTY1NywgNDM5ODQsIDEyODI5MiwgMCwgOTgzNjIwLCAwLCAKICAgICAwLCAxMjcwMjcsIDEwNzE3LCA2NDU3MCwgNTYzMCwgNTM5NiwgNjQxNDMsIDEwNjgyLCAwLCAxMDYwMiwgODAwLCA0MjQ5OSwgCiAgICAgNjYxODYsIDAsIDAsIDY0OTMwLCAxMTYzMSwgNjQxNDYsIDY0MTQ1LCA2NDE0NCwgNzYyLCAxMzE3MiwgMTE4ODU5LCAKICAgICAxOTQ2NjEsIDY0NDY4LCAxMDkwNiwgMTM1MywgNjk2MCwgMCwgMCwgNTgyOCwgODcyNCwgOTE3ODA2LCA4OTMzLCAxNjAxLCAKICAgICA0MjI0NCwgODU4LCA3MDgwLCA2NDEwOSwgNjQxMDgsIDgwOTAsIDAsIDc0NDAxLCA5MTc4MTEsIDU4NywgMCwgMTI4MTMxLCAKLSAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA5ODM5NDAsIDEyMjEzLCAxOTQ2NzgsIAorICAgIDAsIDAsIDAsIDc4MjE0LCAyNzUwLCA3NDIxOCwgNTU2LCA2NDE1OCwgNjQxNTcsIDk4Mzk0OSwgMTIyMTMsIDE5NDY3OCwgCiAgICAgMjc2MCwgMCwgMCwgMCwgMTk0Nzk0LCA2NDE1NiwgNjQxNTUsIDQyNDk2LCAwLCA2NDE1MSwgNjQxNTAsIDEyNjc5LCAKICAgICAxMDA1MywgMTA0MjEsIDExMDkzLCA2NDE1MywgNjQxNTIsIDAsIDAsIDQ4MzksIDAsIDAsIDE4NzQsIDExOTAxNiwgMCwgCiAgICAgNjU3NywgNjQxMjUsIDY0MTI0LCA2NDEyMywgMCwgMTI3NTMxLCA5MjUzNCwgNzAwNywgNzU5MCwgNjU0NDMsIDkwMzYsIApAQCAtMTcxMTQsMTIgKzE3MTMzLDEyIEBACiAgICAgNjQxMDIsIDc4NTksIDE5NDUsIDY0MDk5LCAwLCAxMDQ1MywgNjQxMDQsIDcxODgsIDc5OTcsIDAsIDczODksIDk4MzE2MSwgCiAgICAgODcwNSwgNjQwOTcsIDY0MDk2LCA5NTcxLCA1MjgsIDEyODY3MSwgNDQwMTcsIDExNDI5LCA3MTM0NywgMCwgOTgzMDc3LCAKICAgICA5MTc5OTAsIDczODQxLCAwLCAwLCA5MDU2LCA2NDMxMywgNjE4OCwgMTIwMDE5LCA2MTU1LCA2NDA2OCwgMTgyMywgNjQwNjYsIAotICAgIDY0MDY1LCA2NDA3MiwgNjQwNzEsIDYzLCA3MjMzLCA5MjIxMiwgMCwgNDE5MDQsIDY2MzksIDY0MDY0LCA5ODM3NjYsIAotICAgIDEyODM0NCwgMCwgMTE3NiwgMTE4OTU5LCAxMjc5MzAsIDgxNjIsIDEyODY2NywgOTgzODIyLCAwLCAxMjA1MTksIDY2Mzc2LCAKKyAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzc1LCAKKyAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgzMSwgMCwgMTIwNTE5LCA2NjM3NiwgCiAgICAgNjYyNDIsIDExNDE1LCA0MzMzLCA5ODU1LCA2NDExMiwgNjQ2NDIsIDAsIDUzODgsIDAsIDAsIDAsIDc3MTQsIDY2MjIyLCAKLSAgICA2OTkwMiwgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDk4MzQxMywgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCAKKyAgICA2OTkwMiwgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDk4MzQyMSwgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCAKICAgICA4OTk2LCA0OTkyLCA0NDcxLCA0MjYyMiwgNjQwNzksIDY0MDc4LCA5MjE3OSwgMCwgMTI2NTcwLCAwLCA2NDYxNSwgNDE5MTUsIAotICAgIDAsIDEyMDc1LCA3MDA2MiwgMCwgNTE3NCwgOTgzMjE1LCAwLCAxMjc1NTcsIDMxMjMsIDAsIDEyNjg1LCAxMjc5MDQsIAorICAgIDAsIDEyMDc1LCA3MDA2MiwgMCwgNTE3NCwgOTgzMjE3LCAwLCAxMjc1NTcsIDMxMjMsIDAsIDEyNjg1LCAxMjc5MDQsIAogICAgIDg0MDgsIDY0NzA0LCAwLCAwLCA5MjIzLCAwLCA0MTYxNiwgNjc5OTksIDczNzk3LCAwLCAxMTE2LCAxMjgyMDQsIDQzMDQ5LCAKICAgICA3MTM2LCA0MzA1MCwgODU0OCwgMTIwNDg1LCAwLCAxMTkwNjEsIDkxNzk5OSwgMCwgMTMxMTUsIDQzNjc1LCA2NDA5MSwgCiAgICAgOTMyMiwgMCwgMTIwNTk1LCA2NDA5NSwgNjQwOTQsIDgxMTEsIDY2MjQ3LCA0MjMzMiwgNjQwODksIDY0MDg4LCA2MTk5LCAwLCAKQEAgLTE3MTI3LDEwICsxNzE0NiwxMCBAQAogICAgIDk5MjcsIDQxMzM1LCA0MTE4LCAxNzk3LCAwLCA0MTMzNCwgMCwgNDYsIDQzNDQ4LCAxMjc4ODEsIDI5OCwgMCwgMTI4MTE0LCAKICAgICAwLCA0MjYyNywgMCwgMzIsIDYxODcsIDExOTA1MiwgMTE0OTUsIDExNDU5LCAzNjY1LCA5ODM2MDAsIDQyODcxLCAwLCAKICAgICAxOTkyMywgNzQzMzUsIDAsIDEyNzE5MiwgNjYyMzksIDQyMjY0LCA2NDQwMywgNDQxMiwgNzI0MCwgOTI0OTUsIDAsIAotICAgIDk4MzQ1OCwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCA2OTgwOSwgNjE4MSwgCisgICAgOTgzNDY2LCA2NTc1OCwgMTI3NTAsIDQxODEsIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCAKICAgICA2NTAxNCwgMCwgMCwgOTgzMTk2LCAzNjM5LCAxMTk1ODgsIDAsIDAsIDExODkwNCwgMTAwNzMsIDEyMDIwNiwgMTI4ODYyLCAKICAgICAxMjcxODYsIDY4NDA5LCA0Mjg0NCwgNzQ5OCwgMTA5OCwgOTI1NjUsIDEyMDIwNSwgMCwgOTgzMTE4LCAxMDIwNywgODc4OSwgCi0gICAgOTgzMjIzLCAwLCAwLCA5ODM0NjQsIDkyMzQsIDAsIDYxODIsIDk4MzQ2NiwgNjUwNTgsIDAsIDk4MzQ3MCwgOTgzNDY3LCAwLCAKKyAgICA5ODMyMjUsIDAsIDAsIDk4MzQ3MiwgOTIzNCwgMCwgNjE4MiwgOTgzNDc0LCA2NTA1OCwgMCwgOTgzNDc4LCA5ODM0NzUsIDAsIAogICAgIDU0NzEsIDk0NjEsIDU1NzMsIDExODkzNiwgNTQ3MywgNDQsIDAsIDY2MjQ0LCA5NDA3MiwgMCwgNjYyMzgsIDEyODQ0LCAwLCAKICAgICAxNjIyLCA3NzY3LCAxOTAwLCA0MTMzOSwgMTE0NTgsIDAsIDAsIDY1ODEsIDU1NzYsIDAsIDY0NDA1LCA0MTMzNywgMCwgCiAgICAgNDE2MzEsIDg5NDcsIDY4MzkwLCAxMjc4NDQsIDQxNjk0LCAwLCAwLCA3OTA4LCAwLCAxMDQwOCwgNjU3OSwgMCwgNjQ2MTgsIApAQCAtMTcxMzgsMTAgKzE3MTU3LDEwIEBACiAgICAgOTk5MiwgMTI4Mjk5LCA1MDU3LCAwLCAwLCA3NDUzOCwgNTA1NCwgMTE4OTUxLCAxOTQ5NzEsIDc4NjA2LCAwLCAxNDM3LCAKICAgICA0MTYxNywgNjU4LCAzNDk3LCAxMjg1MDksIDc0ODYsIDUwNjEsIDUwNjAsIDQyMzUsIDEyNzg3OCwgMCwgMTI4NTI5LCAKICAgICAxMjExMywgNDIzNiwgNDcyNywgMCwgMCwgNzY5MywgMTA3NDksIDAsIDc0ODgsIDU3NzMsIDk3OCwgMTI4MTM0LCAwLCAKLSAgICA0MTYxOSwgMTAyMzksIDY4NjExLCAwLCA2NjIwOSwgMCwgMTI4NzAwLCA5NzQ4LCA5ODM5NDcsIDEyNzUyNCwgMCwgMCwgMCwgCi0gICAgMCwgMTk1MDgzLCAwLCA5ODM4MzQsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIDExOTU5NiwgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCAKLSAgICA2Nzg1NCwgODEyNSwgMTIwNTQ1LCA2NzQzLCAxMTkxNzUsIDkxNzk0MCwgMjM2OSwgMCwgOTgzOTYzLCA5ODM5NjQsIAotICAgIDExOTIzNSwgNzQwOTIsIDczOTM2LCA3MDA4LCA0MzY2MCwgMCwgMCwgMCwgMjM2NywgMTI3ODI3LCA5ODM4NDgsIDI2NCwgCisgICAgNDE2MTksIDEwMjM5LCA2ODYxMSwgMCwgNjYyMDksIDAsIDEyODcwMCwgOTc0OCwgOTgzOTU2LCAxMjc1MjQsIDAsIDAsIDAsIAorICAgIDAsIDE5NTA4MywgMCwgOTgzODQzLCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgCisgICAgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIDAsIDk4Mzk3MiwgOTgzOTczLCAKKyAgICAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgOTgzODU3LCAyNjQsIAogICAgIDIzNzUsIDgwNjAsIDYxOTQsIDExOTg1OCwgMTg0NCwgMTE5MDg0LCAwLCA2MDE5LCAwLCAwLCA2OTYxLCAwLCAxMTg4MzksIAogICAgIDAsIDg4MDAsIDAsIDQyODYyLCA0NDYzLCA2NTU4MSwgNjE5MiwgMTk0Njc2LCA0Mjc3MSwgMCwgOTIzMzMsIDcyNSwgCiAgICAgNjUwNDIsIDExODc5NywgMTIwODAwLCA5ODMwNDAsIDEyODkyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyNjEsIDEyMDcwNywgCkBAIC0xNzE1OSw2MzQgKzE3MTc4LDYzNCBAQAogICAgIDEyNjUwMywgNDE2MDcsIDEyMDExNSwgMTY3OSwgMTIwMTE2LCAxMjAxODAsIDEyMDExMywgMTI3NDYyLCA3MDA1LCA0MTYwOSwgCiAgICAgOTU4MCwgMCwgNDAxLCA2OTk0OSwgNDM3NzksIDY5NjgsIDU3NjEsIDM0MiwgODU1MywgMCwgODE0MywgMTI3MTE1LCAKICAgICAxMTk4MywgOTIyNDksIDYyNCwgNzQ1MDgsIDQwNTcsIDQzNzg4LCA1MDc4LCA3NDI1OCwgMTI0NzgsIDAsIDUwNzYsIDAsIAotICAgIDE5NDYwOSwgMCwgMTIwMDk3LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgMTIwMTAyLCAKLSAgICA3MTM4LCAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgCi0gICAgNTAzNiwgNTAzNSwgMTIwNTkwLCA0MjYwNCwgOTgzNjQ3LCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgCi0gICAgNDQzMiwgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgCi0gICAgMTI3MjYyLCA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAKLSAgICAxMjcyNTYsIDEyMDI1MiwgMTI4MTAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIAotICAgIDYwOTQsIDc2NDEsIDQyNDQ1LCAwLCA5MjQ4NywgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDk4MzE3NywgNTAzMCwgMCwgCi0gICAgMCwgMCwgNzM4NjksIDk2MjIsIDAsIDY5OTQ0LCA2Nzg3LCAwLCAwLCAwLCA5ODM1ODMsIDEwNTQ0LCAxMjkxOSwgMCwgCi0gICAgOTIyMTgsIDAsIDAsIDY5OTA2LCAxMjA3ODksIDAsIDk0NywgMTE5ODM1LCAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIAotICAgIDExOTkzNSwgNzYxMywgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgCi0gICAgMTIwMjY4LCAwLCA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgCi0gICAgNzIxOCwgNzg5NSwgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgCi0gICAgNzIxNSwgOTgzODI3LCA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCAKLSAgICA0Mjg2MSwgMTExMywgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAKLSAgICAyNDg5LCA2NTYyNCwgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIAotICAgIDEyMDg0LCAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAKLSAgICAxMjI4MywgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgCi0gICAgMzIzOSwgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCAKLSAgICA1MDQwLCAwLCAwLCA5ODM0MzUsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIAotICAgIDc0MjkzLCAwLCA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIAotICAgIDczOTA5LCA0ODM1LCA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIAotICAgIDAsIDQyNTg5LCA1NjksIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIAotICAgIDE5NDU3MCwgNDEzMzEsIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgCi0gICAgNzc5MDgsIDQyNzM4LCA2NTc4NCwgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCAKLSAgICA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAKLSAgICAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIAotICAgIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgODcxNCwgOTgzODExLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgCi0gICAgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgCi0gICAgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIAotICAgIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIAotICAgIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgCi0gICAgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgCi0gICAgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIAotICAgIDk4Mzk2NywgMzUzMCwgOTc1MCwgMTI4MzE3LCAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCAKLSAgICA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgCi0gICAgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgCi0gICAgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgCi0gICAgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgCi0gICAgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAKLSAgICAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIAotICAgIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIAotICAgIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCAKLSAgICA3NzI2LCAwLCAxOTkyMiwgMjY3LCAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgCi0gICAgNDEwNzQsIDQyNjYsIDEwNjUyLCA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0MCwgMCwgMzM5MSwgCi0gICAgNDEwNzUsIDI0NzYsIDAsIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgCi0gICAgMTI3NTM3LCAxMzAxNCwgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzMzQsIDAsIDk4Mzg3MSwgCi0gICAgMTI2NjM4LCA5MDUzLCAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgxOSwgNjY2MCwgNzg3NTgsIAotICAgIDkxNzc2MCwgOTE3NzkzLCA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzMzLCAKLSAgICA3NDU0NywgMTI2NTg1LCA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIAotICAgIDc4MDk5LCAxMjcwODUsIDAsIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAKLSAgICAwLCA0MjUzMywgMTY4LCA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAKLSAgICAwLCA3OTEsIDkxNjIsIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIAotICAgIDk4MzQ0MSwgNzU1NywgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIAotICAgIDEyODExLCA2NTkyNSwgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIAotICAgIDc0NTk5LCA3ODQ0OSwgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgCi0gICAgNzgwODMsIDEyODgyNCwgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIAotICAgIDExMDM5LCA4NzIzLCAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIAotICAgIDExOTMwMCwgMTE5Mjk5LCAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgCi0gICAgMCwgMCwgNDE5NTIsIDAsIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgCi0gICAgMTk5MTUsIDUyNzcsIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgCi0gICAgMTI3MSwgOTgzNjMxLCAwLCA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgCi0gICAgNDU3NCwgMCwgNzU2NywgNzQ1OSwgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgCi0gICAgOTgzOTAzLCAwLCA0MTM4OCwgNjQ0NDYsIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAKLSAgICAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgCi0gICAgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIAotICAgIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgCi0gICAgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQwLCA0MjY5LCAKLSAgICA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgCi0gICAgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgCi0gICAgMTI4ODcwLCA5ODM2OTIsIDM2NTEsIDAsIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIAotICAgIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgCi0gICAgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAKLSAgICAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgCi0gICAgMCwgNzM4MTIsIDYxOTAsIDg1OTksIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIAotICAgIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIAotICAgIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIAotICAgIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAKLSAgICAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIAotICAgIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCAKLSAgICA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgNTEwNCwgOTgzNzQwLCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgCi0gICAgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIAotICAgIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAKLSAgICAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAKLSAgICAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCAKLSAgICA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIAotICAgIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAKLSAgICAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCAKLSAgICA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgCi0gICAgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgCi0gICAgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgCi0gICAgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIAotICAgIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIAotICAgIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIAotICAgIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIAotICAgIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAKLSAgICAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM3OTQsIDAsIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgCi0gICAgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIAotICAgIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCAKLSAgICA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIAotICAgIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAKLSAgICAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAKLSAgICAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAKLSAgICAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgCi0gICAgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3NzIsIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgCi0gICAgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAKLSAgICAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzcwLCAwLCAKLSAgICA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIAotICAgIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIAotICAgIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCA5ODMzNjksIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgCi0gICAgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAKLSAgICAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgCi0gICAgMCwgNzEzMDEsIDk4Mzg1MywgMzQ3MywgNzcxOCwgMCwgMCwgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzODIsIAotICAgIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzYyLCA4MDgwLCA3MDA2LCAwLCA5ODMzNjMsIDY3NTcsIDY0MzUxLCAKLSAgICAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNjQsIDYxNDYsIDAsIDc3MSwgOTgzMzY1LCAwLCAxMjgxMiwgCi0gICAgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAKLSAgICAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc2NCwgOTUyNCwgNzQ5MCwgMTEzODksIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIAotICAgIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgCi0gICAgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAKLSAgICAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIAotICAgIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIAotICAgIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCAKLSAgICA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCAKLSAgICA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIAotICAgIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIAotICAgIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgCi0gICAgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCAKLSAgICA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIDAsIDAsIDk4MzczMiwgMTI3MTUsIDY4MDAyLCAKLSAgICA5ODM0NzEsIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIAotICAgIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgCi0gICAgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIAotICAgIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzc5LCAwLCA0MjI3OSwgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCAKLSAgICA5ODMzNzYsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCAKLSAgICA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIDk4MzY4NSwgMjQ2MCwgMCwgMTE5NDQsIAotICAgIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIAotICAgIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCAKLSAgICA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIAotICAgIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAxMDk0NiwgMTI3MzEwLCA1MDAwLCAKLSAgICAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIDY3MDksIDAsIDc4ODg1LCAKLSAgICA5ODM2OTksIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgMCwgNzM3OTEsIDAsIDAsIAotICAgIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAzODkzLCA5ODMyNTYsIDAsIAotICAgIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAxMjUxNiwgNDQ0NCwgMCwgCi0gICAgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgMzU5MSwgNDE5NjksIDAsIAotICAgIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCA0MTk2MiwgMzIwMiwgCi0gICAgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAxMTk4MDksIDQ4ODMsIAotICAgIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgMjQwLCAxOTkwNiwgMCwgCi0gICAgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIDk4MzMzNSwgNDM0MzcsIAotICAgIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgMTE5MDIzLCAxNzI5LCAKLSAgICAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIDY2NTc4LCA1MDAxLCAKLSAgICA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCA3Mzg4OSwgNzQxODIsIAotICAgIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgNjM4NzMsIDg0OTEsIAotICAgIDAsIDAsIDAsIDQ1MzAsIDQyNDA5LCA3MTI2LCAxOTQ1NzUsIDI3MjEsIDEyMDA3NCwgMTE5MDk2LCAxOTkyOSwgMCwgCi0gICAgMTk0NTc0LCAwLCA0MjQyLCA0MjY0LCAxMjAwNzcsIDEyMDUzMCwgNjYxNzksIDQyNDEyLCA2NTk0MSwgMTMxMTQsIDY0NTIyLCAKLSAgICAxMDc0MCwgMzA5NCwgMCwgOTc1NCwgMTE5MTAyLCA0NDM3LCA3Mzk0OCwgMTI3MDc0LCA5ODMyMzIsIDU1MjgwLCA0MjE3NCwgCi0gICAgMTk0OTI1LCA0MjQzMCwgMCwgMCwgNDIzNTUsIDY2MDI2LCA0MzA2LCA0MTM4MCwgNjg0MzIsIDkyNTg2LCAwLCA2NjY2NywgCi0gICAgMTI3MzA5LCAwLCAxMjY1MjEsIDQyMjAwLCA0MjU2NiwgMCwgMCwgNTA4OCwgNjk0OCwgMCwgODUyNCwgMCwgMCwgMTIzODUsIAotICAgIDAsIDAsIDY5NjQ2LCAxMzg2LCA2NDU4MCwgMTE0ODAsIDYxMTYsIDY1MDM5LCA2NTAzOCwgMTIzOTIsIDY1MDM2LCA4MDY0LCAKLSAgICAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIDc3OTk5LCAxMTY2MywgMTY2NiwgNDIwOTEsIDExOTY1NywgCi0gICAgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDAsIDYzODk2LCAxMjA2MSwgNDIwOTYsIDQzNjIxLCAzMzYyLCAKLSAgICAxMjM3NywgOTgzODIzLCA5ODM4MjUsIDY4NDQ5LCA3NDYxLCA3MzkwMSwgMTI0NCwgMzMxLCA3Mzc4NiwgMTI2ODMsIAotICAgIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgMCwgMTIzNzksIDE5NDg3NywgMTIwODE4LCA0MTk2NCwgNDIyMDgsIDYzODQzLCAKLSAgICAyMDg0LCA0MTk2NSwgMCwgNjU4NjYsIDQzMjcsIDAsIDYzODQwLCA3ODU0OSwgNDEyMjAsIDEzMDMyLCAwLCA1ODQsIAotICAgIDEyOTMzLCA0MzE3NywgMTIzNzMsIDY5ODU1LCAxMzAwMCwgMTM1MSwgMjkzNSwgODY5OCwgMTI2NjUsIDAsIDE5MzAsIDAsIAotICAgIDc4MjI5LCAxMjQyNywgNjY1MTQsIDY5ODU5LCAxMzAzMSwgMCwgNjM5MDEsIDAsIDM2NTcsIDEyODU3MiwgNjUyMDIsIAotICAgIDYwMDAsIDExOTIwNiwgMTI0MjYsIDEyNzE4MSwgMCwgNDE3NDAsIDEyNDI4LCA0MTI4MywgNDE5MTYsIDExOTIxMCwgMCwgMCwgCi0gICAgMTI0MjksIDY3MjcsIDAsIDc1NjIsIDAsIDUxNzAsIDAsIDQxNzU1LCA2NzYsIDAsIDY2NzA0LCA2NjY2NCwgOTk3OCwgCi0gICAgNjY0OTEsIDM1MzYsIDAsIDk3NTIsIDkyMzk3LCA2MTYyLCAwLCA2OTIyOCwgMTAxMTMsIDQxODI5LCA2NTg4NiwgNTE1OSwgCi0gICAgMTI0MjIsIDQxODMyLCA0MzksIDQzMDc3LCAwLCA0MjIwNywgNzQ1NDksIDExNzk2LCA0MDk3MCwgNDE4MzAsIDAsIAotICAgIDkxNzc5OSwgODMwOCwgOTE3Nzk3LCA5MTc3OTYsIDAsIDY3ODY0LCA5MTc4MDEsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIAotICAgIDY5ODA1LCAzNDEsIDI3MjcsIDQxMjksIDM1MzksIDAsIDYzODYxLCAwLCA3OTEzLCAwLCA2Mzg1OSwgNDEzMSwgNjM4NjgsIAotICAgIDAsIDYzODY3LCA0MTMzLCAxMTM3MSwgMjEwLCA0NjAwLCAwLCA3NDU2MCwgNDEzNywgODA4MiwgNzg1MDYsIDExOTA2MiwgCi0gICAgNzg1MDQsIDY3MDQsIDQ1OTEsIDEyODAyOSwgMCwgMCwgOTY4MCwgMCwgMTIwNjIzLCA1NjEsIDEyMTU5LCAxOTUsIDc4NTA4LCAKLSAgICA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDQyNjg3LCA4MzY4LCAwLCA0MTQ5OSwgMCwgMCwgNDIyNDIsIDQxNDk4LCAKLSAgICA5MTc3OTQsIDQyMDI1LCA3ODU2NSwgNjU4MDUsIDQyNDYzLCAwLCAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIDExOTIxMywgCi0gICAgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIDE5OTIsIDk2NTIsIDczOTc3LCA3MjQ2LCAKLSAgICA0MjA4NiwgMTI2NjE1LCAyMjE5LCAwLCAwLCAxMjg4MDEsIDE5NDgzNywgMCwgMzI3LCAwLCA5MDQyLCA5MTc3NzcsIAotICAgIDkxNzc3NiwgNjUxNDgsIDEyNDMzLCA5MTc3ODEsIDEyNzI3NiwgOTE3Nzc5LCAxMjQzMSwgODY2OCwgMTI0MzQsIDk4MzgyNiwgCi0gICAgOTE3NzgyLCA1OTk5LCAwLCA3NzEyLCAxMjQzMiwgMTI4MjQzLCA0MzY1MywgMTcyNiwgMTAxNSwgMCwgODIxMiwgMCwgCi0gICAgMTI4MDE0LCA0MjQyMywgMTE5MDY2LCAwLCAxMjgxMDgsIDY2NzA5LCAwLCA4ODExLCA5MjcsIDAsIDAsIDEyNDM2LCAKLSAgICA5ODMyMzksIDQyMDIxLCAwLCAwLCAxMjk5LCAxMjI0MCwgNDIzNTAsIDY1MTQzLCAwLCAxOTUwMTYsIDAsIDc4MTk3LCAKLSAgICAxMTM0OCwgMCwgNzgwMzcsIDkxOTQsIDk4MzE4NCwgMCwgMTk5MTQsIDEyMTc5LCA5ODM4MDMsIDIyOTYsIDE5NDkyMywgCi0gICAgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIDY0NjUxLCAwLCA0MTUwMywgCi0gICAgMTI3NDc4LCAxMTI2NSwgMCwgMTIwNzU2LCAxOTQ5MjIsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIDAsIDEyODUwOCwgMTI0MTYsIAotICAgIDkxNzc2NCwgMTE5NjA4LCAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgMzg4MiwgODUzMiwgOTE3NzcxLCAKLSAgICAxNTczLCAxMjg2NDgsIDExOTg0NywgNDU5NiwgNjYzMzksIDEyNDE3LCA2NjAwMSwgNjUzNDMsIDEyNjQ5MSwgMTI0MTQsIAotICAgIDgyODcsIDY4MjE5LCAxOTUwMTcsIDY4MTA4LCAxMTQzLCAxMTkxNjksIDExOTg0NiwgMTI0MTUsIDY2MjYsIDQyNzYzLCAwLCAKLSAgICAxMTg4ODQsIDkwMjEsIDEyMDc4MywgMCwgMTE3MjQsIDAsIDAsIDEyNzEwNCwgMTI2NjE5LCAwLCAwLCA4MDI3LCAxMDk5NywgCi0gICAgOTE3MSwgMTI3NDEsIDExNDAwLCA3MTMwNSwgMTk0Nzk5LCAwLCAxMjgyMzksIDAsIDEyODg4MSwgMTE5NjA0LCAxMjc1MjMsIAotICAgIDEyMDE5MCwgMTk0NzczLCA2NzYwOCwgMTI4MjE0LCA0MjM2OCwgMCwgNzcxNSwgMzg4MSwgNDE0ODcsIDEyMTE4LCA0MjUxNCwgCi0gICAgNjg2NTEsIDAsIDk4Mzg4NiwgMzAwOSwgNDE0NzYsIDQxNDg5LCA2OTgyNSwgMzAwNywgMTQ0OCwgMzAxOCwgMTk0ODA5LCAKLSAgICAzODg5LCA4NTIxLCA1MDgzLCA1MDgyLCAxMTk4NTksIDEyMDE4NCwgODUxOSwgOTgzMjM1LCAzMDE0LCA1MDgxLCA2NTg1MywgCi0gICAgMTIwNzE1LCAwLCA2ODAxNCwgNjk5NTEsIDUwNzksIDY0ODAyLCA0MjIxMCwgNDU5NywgNjU1MzIsIDExODI4LCAxMjAxODUsIAotICAgIDEyMzcxLCAwLCA4NDA3LCAwLCAxMDgwNSwgODUxOCwgMTA3NzksIDEyMDE4OCwgNzEzMDMsIDk4MzkyNCwgMTIzNjcsIAotICAgIDQyMTcwLCAwLCA5MjU1NywgNjI5LCAxOTI0LCAwLCAxMjAzNywgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCAKLSAgICA2MzkzMywgNjk3MzUsIDEyMDgxNSwgMTIzNjksIDEwNjQ5LCA2Nzk4MSwgNTA3NywgMTIwMTc0LCAxMDg4MCwgNjM5MjcsIAotICAgIDUwNzUsIDkxNzg4MSwgMCwgNjUwNzUsIDAsIDExMDA3LCA5ODM2OTYsIDY2NjU5LCA5MjYwNywgMCwgNjY2ODQsIDAsIAotICAgIDM0MzQsIDQ5NTQsIDE5MDQsIDAsIDUyNjYsIDEyNjk4MCwgNTI3MiwgMTA0OTksIDQ1MDcsIDk1NzgsIDYzOTIzLCAKLSAgICAxMjAxNzcsIDc5NzksIDAsIDk4MzEsIDAsIDE5NDkyNiwgNDYxLCA5ODAzLCAwLCA0NTA0LCAxNTA1LCAwLCA2MzI1LCAKLSAgICA1Mjc2LCA0MzAyMSwgMTIwNDg4LCAwLCA1NTIzNiwgMCwgNjY0NjEsIDUxNzcsIDQxMzI0LCAxMjA1NSwgODcyMiwgMCwgCi0gICAgNDEzMjcsIDAsIDY2Njk1LCA0MTE0LCA0MDksIDQzODMsIDg5MDAsIDg5NDgsIDQxMzI1LCAwLCA3MjEsIDEwMTgyLCA5MTA4LCAKLSAgICA3MTMxMSwgMCwgMTE5MTg1LCA0MjIyOSwgMTk0OTEyLCAwLCA1OTk4LCAwLCA0MjM1MywgNzQ4MjUsIDAsIDEyNTg3LCAKLSAgICA5NDEwNCwgNzg1NzEsIDAsIDcxMzI4LCAxOTQ1NjIsIDQxNTc2LCA0MjIxNSwgNzg1NzAsIDExOTIwNywgMCwgODU3OCwgCi0gICAgNTk5NSwgNzU3MywgNDE1NzUsIDc0Nzg5LCA3NDc1MiwgNjM5NDQsIDYzOTQ5LCA2NDc2NywgMjY3MCwgNDE2NywgMTk0Nzk2LCAKLSAgICAxMTcyMywgMCwgNzQxMjAsIDAsIDY1MDc2LCA5MzgsIDQzNDE0LCA3Mzg1NCwgMTE3MzcsIDk3MjEsIDAsIDAsIDAsIAotICAgIDExNzQyLCAyNDE5LCAwLCAxMTQ5MywgMTIzMzQsIDE5NDkxMywgNDE1MywgMTIzMDIsIDEwNzkzLCA1MjUwLCAxMjQwNywgCi0gICAgMTE5NzgsIDQ0MDQsIDkxODksIDEyNDAxLCA0MjAwNywgNTc3NSwgNjc1OSwgNjU4MDYsIDQzOTk3LCAwLCA0MjAwMiwgCi0gICAgMTI0MDQsIDk4MzU1MywgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDczNzI5LCA0OTgzLCAxMjA1MDcsIDg2MSwgMCwgCi0gICAgMCwgMCwgMCwgNDM3NTcsIDQzMzcwLCAwLCAwLCAxMTk1NiwgMCwgMCwgMCwgOTYxNiwgNjYzMSwgMCwgMTI4MTYsIDQzNzU5LCAKLSAgICA0MjIxOCwgMTI3MTAsIDY4Njc0LCAxMjcyMSwgNDEwMSwgNjYxODUsIDAsIDU5OTIsIDc2MTYsIDE5NTA0NCwgMCwgMTI1NzcsIAotICAgIDAsIDk4Mzg3NSwgODUzLCA0MjY5MywgMTk1MDE0LCAwLCA5ODM2MzgsIDUwMTYsIDQzNTM1LCA2Mzg5MywgNDI4MzUsIAotICAgIDk0OTEsIDkxNzkxMywgMCwgOTE3OTE0LCAwLCAxMjcxMiwgNzEwNSwgMTI3ODA3LCA2NTA2MCwgMTIwNzk3LCA5OTAwLCAKLSAgICA3NzUwLCAwLCAxOTQ5MTksIDAsIDEyNzgzMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgMTI4MTUxLCAxMjE3NywgMCwgMCwgCi0gICAgMCwgNzc4MjQsIDAsIDQ5MDAsIDEyNzg3NCwgMTI4NzgsIDkyNjMwLCA4OTg0LCA0MTE5LCA3NDc2OCwgODk3MSwgNzg1OTMsIAotICAgIDQzMTEzLCA5NzAyLCA3ODU5NCwgMTEwMjUsIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCA3NDE4NSwgOTI0ODEsIDkyNzEwLCAKLSAgICAxMjM5NywgNzc4MjcsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgMCwgMTMwNTMsIDAsIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCAKLSAgICA1MDEwLCAxNjgwLCAxMDUwNywgNzg1OTAsIDc4NTgzLCAwLCAwLCAwLCAxOTQ5MTUsIDcyNjcsIDAsIDc0ODMzLCAxMjgxODEsIAotICAgIDU5OTMsIDI4MTksIDAsIDEyNzA2LCA3Nzg0MCwgMTg5MywgNzI2NiwgNjM5MTUsIDcyNjQsIDcyNjUsIDAsIDEzNjMsIDAsIAotICAgIDYzOTk3LCA2MzkxMCwgNjM5OTYsIDMwNzcsIDAsIDAsIDE1MTIsIDY5OTI5LCAxMjU4OSwgNDE0NzksIDEyODMxMywgMCwgCi0gICAgNDMzMzksIDAsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgCi0gICAgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIAotICAgIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIAotICAgIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIAotICAgIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAKLSAgICAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIAotICAgIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgCi0gICAgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCAKLSAgICA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCAKLSAgICA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCA5ODM2NTIsIDAsIDQzMTE5LCAwLCAKLSAgICAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCA3NDExMywgMjM0MywgNDEwMywgCi0gICAgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAxMjAxNDgsIDY2MzY5LCA1ODYxLCAKLSAgICAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODMwLCAxMjY0NSwgNTE0NiwgMTEzMjAsIDY4NDEwLCA2NzQ4LCA2NTA0MCwgCi0gICAgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgNzQ1MjQsIDAsIDE5MjgsIDAsIAotICAgIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAwLCA3Nzg2OCwgNDIwNiwgMCwgCi0gICAgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCA0MTI0LCA3Nzg2MiwgNjU4MzYsIAotICAgIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIDEyNDA1LCAxMjAxNTAsIAotICAgIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIDk5NzAsIDEyNDAyLCAKLSAgICA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgMTI5NjksIDEyMDgyNCwgCi0gICAgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIDExOTE2MywgMCwgOTA5MywgCi0gICAgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDczNzc2LCA2NzUwLCAxOTUwMTgsIDAsIAotICAgIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIDE5NDcwMywgMTk1MDIzLCA1ODA1LCAwLCA2NzI2LCAwLCA0MjE3NiwgCi0gICAgMTIzNzAsIDExNjU1LCAxMTkwOTUsIDEwNTkxLCAyMjgwLCAwLCAxMjM3MiwgMTIwNjQyLCAxMjAzMDcsIDAsIDkyMzQzLCAwLCAKLSAgICAxMjM2NiwgMTA5NjMsIDYwNjYsIDEzMjksIDAsIDMwNTIsIDkyMjAsIDAsIDY0NDc4LCAxOTQ3MDEsIDEwODAzLCA0MTMyLCAKLSAgICAxMjAzMDYsIDY4NDc0LCA5MjQ3MywgMCwgOTgzMzA1LCA3NDgzNywgMTIwMTU1LCAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgCi0gICAgNjM5NjUsIDAsIDYzOTYyLCA3NDA0MiwgODkyNCwgNDMxMjMsIDU5ODgsIDM2NjAsIDYzOTY5LCAxMTc4MSwgNDI3MTgsIAotICAgIDg3ODgsIDEzNTcsIDY0ODUxLCA2NTc0MywgMCwgODc3NCwgMCwgMTI3MDg2LCA5OTQxLCAxMjAxNzIsIDAsIDE5MzMsIAotICAgIDY5NjU1LCA5NTY0LCAwLCA5MjQzNSwgNzM4NjYsIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAxODA0LCAzMzExLCA2NzYxNSwgCi0gICAgNzAwODEsIDc4MzAyLCAxMjIyMCwgNjc2MTYsIDEyMDU5OCwgMTI3NDc1LCAwLCA2ODIwMCwgNjY3NSwgMTI4MTQ0LCAwLCAKLSAgICA2NzU5MiwgMTIwNjg1LCAwLCA2NDc3MSwgMTE5OCwgOTEzMiwgMCwgNjQ2MTksIDUxMCwgNjQ2NjMsIDAsIDAsIDQ1NjEsIAotICAgIDIxMDEsIDEzOTgsIDAsIDkyNTU0LCA3NDAzNCwgNDE1NjksIDkyNjg0LCAxMTQwNiwgODE2NywgMTIxMjcsIDAsIDg0MCwgMCwgCi0gICAgMTI2NTE4LCA3MTAxLCA2OTY3LCAwLCAxOTQ4OTgsIDk3OTYsIDAsIDMzMywgNjk4OTEsIDAsIDgxNDQsIDIxMTcsIDAsIAotICAgIDk4MzU5NSwgMTI0MDYsIDAsIDE5OTMxLCAxMTkwODksIDY2NzgsIDc3NjksIDAsIDEyNjIxLCAwLCAxMjczNjYsIDEwMjI3LCAKLSAgICA0NzY0LCA0MzEwMSwgOTk4MSwgMCwgNDA5ODYsIDQxMjcsIDY2NDg3LCAwLCA0MjIwMiwgMTI3NTQsIDE5NTAyMiwgMCwgMCwgCi0gICAgOTQwOTcsIDY3NTk0LCAyMDQ4LCAxMjk0NCwgNDA1MCwgNjc1OTUsIDkxNzk2NywgNDMxMDIsIDEwNTgxLCAxMjk4NSwgCi0gICAgNDUzMywgMTk1MDIxLCA3NDAwMywgNjQ5MCwgMCwgMTIwMzgsIDAsIDAsIDEyMDcwNCwgNjU0NjEsIDk3OTgsIDY5NzA0LCAwLCAKLSAgICAxOTQ4LCA2OTg0MSwgMCwgOTUyLCAxMjgyMzUsIDAsIDAsIDEyMDgwMiwgNjQ0OSwgOTQ5NCwgMTIwMzEzLCAwLCA0MzA5OCwgCi0gICAgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCAwLCAwLCAzNDM2LCAxMTk5NzMsIDAsIDEyODE3LCA2NzU5NywgCi0gICAgNjY3NiwgMzkzMCwgNDI2MTUsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAKLSAgICAwLCA4NTAwLCA0MjIyMiwgMTIwMTQyLCA3Mzc0MywgMTIwNDAwLCA0MzE3LCAxMTU0MywgNjc2NzYsIDY0Njc2LCAwLCAwLCAKLSAgICA2NzYwNiwgMTE5MDgzLCAwLCA0MjIxNywgMTMxMDIsIDAsIDY2MDAzLCA2NjcyLCAwLCAwLCAwLCA5ODM3MzgsIDYzODQxLCAKLSAgICA5NjEzLCA5MDAxLCA0NTI2LCAxMTI3NCwgNjc2MDEsIDY0NTIwLCA2NDIxMCwgNjY2NCwgNzg3MDQsIDQyMDU2LCAxMDIyOCwgCi0gICAgNjQ5NTcsIDExMjgxLCAwLCAzODA3LCAxNDY5LCA2NjY0MCwgNjUzODEsIDQyMTk3LCA0OTg4LCA0MjM3MiwgMCwgOTU5OCwgCi0gICAgOTA0LCAzNTIsIDQyMjI1LCAxNDUxLCA4MDYxLCA4NDUzLCA0MTM0LCAwLCA3NDg0NywgNjY1NzYsIDEyNzkxNiwgMCwgCi0gICAgMTA1MjAsIDg1NzUsIDk5NjAsIDEyMDEsIDEyNzI4OSwgMTI4NDYsIDEyNzI5MSwgMTI3MjkyLCAxMTkxOSwgNjQ5NjIsIAotICAgIDEyNzI4NywgNDM3MzksIDEyNzI4MSwgODUxMSwgOTQ2MCwgODIzLCAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAxMjczMDUsIAotICAgIDEyMzg3LCAxMjUzLCAxMzE4MywgNjU3NjYsIDUwMCwgNDI3ODMsIDY1NzY1LCA2NDIwOCwgNjQzNjksIDY1NzYwLCA2NTc2MSwgCi0gICAgMTE5NTg1LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCA2NjQ5OCwgOTgyMSwgNjQzMDQsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCAKLSAgICA2ODM2NiwgNjQ0MTAsIDkyMzA1LCAwLCA0MzIzLCAxMjAwNjIsIDkyNjY5LCA3MTMzMiwgMTI3MDUyLCA0MjU4NywgNDIyMTQsIAotICAgIDQxMzk0LCAwLCA0NzYzLCA0MTEyLCAxMTg5MzUsIDAsIDUyNjAsIDQzMTQzLCA5NDAzOCwgMzI2LCAxMjAxMzEsIDY4NDIzLCAKLSAgICAwLCAxMDc3MSwgMjg3NiwgNzQwNzQsIDkyNTMwLCAxOTQ5MjQsIDQxMzk4LCA3MzgyLCA5ODAyLCAxMjcwNzcsIDEyNzA3NiwgCi0gICAgNDUzLCA0MTM5NiwgMTIwNTI0LCA0MjcyMCwgMTIxNDAsIDk1NzIsIDAsIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIAotICAgIDEyNjQ5MCwgMTk0ODg1LCA0MzE0NCwgNDEyMywgODQ5NCwgNDMxNDYsIDk5NzcsIDAsIDAsIDY1NzU5LCAxMDc2NSwgCi0gICAgNjQwNjEsIDQ0NjUsIDk4MDgsIDY0MDU2LCA2NTU4MiwgNDEyNiwgMCwgOTUyMSwgOTU4OSwgNjQ3NTUsIDAsIDY0MDIwLCAKLSAgICAxMjY2MDQsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAxMTUyOCwgNjQwMjQsIDEyODA3MiwgNjc5LCA2NDAxMywgMCwgCi0gICAgNTg1MCwgNzU4LCA3NTM2LCAwLCA5MjIzNCwgNDE0NDEsIDEwNjkzLCA2NDAwNiwgOTgzNTY3LCA2NDAwNSwgNDA1OCwgCi0gICAgMTE5MDE5LCAxMjY0ODcsIDY0NjYwLCAwLCAxMTkwNTAsIDAsIDk4MzA2OSwgMTEzOSwgNDMyOTgsIDY0MDI3LCA2NDAyOSwgCi0gICAgODk3MCwgMCwgOTkzNCwgOTgzMDk0LCAxMDc3NCwgMTI4MDIwLCA0MjIwMSwgMTI0MjEsIDEyODIxNiwgMCwgMTg1MiwgCi0gICAgMzA1NywgNjQwNDYsIDczNzQ0LCA2NDAzNCwgNjQwMzksIDAsIDAsIDAsIDE5NDg5OSwgOTIzMjIsIDc2NDUsIDEyODU0LCAKLSAgICA3NDMzOCwgMzQ5NiwgMCwgMCwgMCwgOTEwMiwgNjI3LCAxMjc3OTUsIDYxNTgsIDgzMjcsIDc0NTUzLCA2NjYzMiwgMTI0MTksIAotICAgIDEzMzA5LCAxMTU3MCwgMTI3ODExLCAxOTk2MCwgMTE2OTYsIDAsIDEwMTgsIDExODk3MCwgMTk0OTA5LCAxOTQ4OTcsIAotICAgIDE2ODIsIDE5NDg5NiwgMTk0OTExLCA0Mjc1NiwgNjc2NSwgMTk0OTA2LCAwLCAwLCA3MzgxNCwgMTE0MTIsIDY3NjgsIAotICAgIDEwNzI4LCAxOTQ4MzAsIDcxMzE2LCAxMTg4NjMsIDQzMzExLCA2NDk2NiwgMTE1NzcsIDAsIDQzMDQwLCAxODMzLCAxMTU3NiwgCi0gICAgMCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgMTk0ODQ4LCA3NTM1LCA4MDg1LCA0MjUyNSwgMTIwMzg3LCAKLSAgICA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgMTIwNDg5LCAxOTQ3MTEsIDY0NDgzLCA2NTY5MywgMCwgMCwgCi0gICAgMCwgNjk2OTUsIDQyMjQwLCAwLCAxMjY2NTEsIDQyODY0LCAxMjY0OTgsIDY0NjY3LCA0MTg2OCwgMTE4NCwgMCwgODE1LCAKLSAgICAxMTQ4NCwgMTI3NTM1LCA2Nzg0MCwgOTgzNjQyLCAwLCA2NjE5NywgMCwgMTA5ODYsIDY0NjgzLCA5ODM3NzYsIDAsIDM0NTUsIAotICAgIDAsIDAsIDk4NzksIDAsIDAsIDQxNTgsIDEyODA1MCwgNjgxNjYsIDAsIDAsIDAsIDAsIDY5NjQ1LCAzMzIsIDExODgwOCwgMCwgCi0gICAgNTE0MiwgMjQwNywgNjk2NDMsIDQyMTk5LCAwLCA5MjQwNCwgNzQzNzMsIDAsIDU1MjE3LCAwLCA2Mzg3MCwgNDMxNjMsIDAsIAotICAgIDAsIDkyMzkwLCA0Mjg2NywgMTgzNCwgMCwgOTI0NjEsIDY5ODE3LCAxMDk0MCwgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgCi0gICAgMjY1MiwgMTIwNTI3LCA3MTY0LCAxMDc4NCwgMTk1MDkzLCA2NzY3NCwgMCwgOTIyMzMsIDkyNDgyLCAxOTQ3NDksIDc0NTYyLCAKLSAgICA5MTc1MDUsIDE4MjgsIDc0NDc0LCAxMjAzMjcsIDc4NjIwLCA4NTMxLCAxMjQ5OSwgNjI4MCwgMTIzMjQsIDExODg1NCwgCi0gICAgNjUyMzgsIDY4Mzc0LCA0ODMyLCA2NTU3MywgMCwgNjI3OSwgMTI1MDgsIDEyOTA0LCAxMjUwMiwgOTE2MSwgMCwgMTYyMCwgCi0gICAgNjQ0MzYsIDM2MDEsIDE5NTA5NCwgMTI4MDczLCA5ODM1NjIsIDYwOSwgMTE1NTUsIDk4MzA5OSwgMTI0OTYsIDEyNzgzOSwgCi0gICAgNzQxODEsIDQzNDMsIDEyNTA1LCAwLCAxMjc4NjMsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDI2NzEsIDAsIDAsIAotICAgIDAsIDQzNTY1LCA3MTMwNiwgMTI2NDkzLCAxMjY5NiwgMTI4MjU2LCAwLCA5NDA2MiwgMTI5MjksIDAsIDcxMiwgMCwgNDE5NywgCi0gICAgOTgzMjA0LCA0MjgxOCwgMTI2NjMyLCAwLCAxMjA0OTAsIDAsIDExOTEzNywgMTUwNiwgNDM1NjIsIDAsIDkyNDkxLCAwLCAKLSAgICAxMjY1MSwgMCwgNjQ2MjgsIDc0NTE3LCAxMjA1OCwgNzQwODQsIDkxNzgzOCwgNzQ5NCwgMCwgNDkyNCwgNjU1OTIsIAotICAgIDExODg0NCwgMCwgMTI3MDg4LCAzNTUsIDk3MTksIDEyNzA4NywgMTMwNjYsIDY0Nzk2LCAwLCAwLCAxMjAzMywgNDIxNzgsIAotICAgIDAsIDY5NzYwLCA0MjU3MSwgOTI2MzUsIDAsIDAsIDAsIDAsIDAsIDEyNzE3NiwgMzE3OCwgMCwgMCwgOTI3MDQsIDAsIAotICAgIDkwODAsIDEyNzAwMCwgMTIwMzUyLCAwLCA2ODIwOSwgMCwgMTEwODIsIDAsIDU2OTksIDE5NTEwMCwgNjYwMDAsIDk0ODgsIAotICAgIDY1MTY2LCAxMTkxMTIsIDAsIDAsIDAsIDAsIDcxMzEzLCAwLCA1MjY1LCA2OTIzNSwgMCwgMTE0ODcsIDY3ODU4LCAxMjQ2NCwgCi0gICAgMCwgNDMwNDUsIDAsIDAsIDQzMzQ1LCAwLCAxMDc3MCwgMTE4OTk0LCA2ODA3LCA0NjUsIDk4MjksIDAsIDc0MzQ4LCAwLCAKLSAgICA0MzM0NiwgODExNiwgNzk1LCAwLCAwLCAxMjQ2MiwgMTA5MzAsIDEwODMxLCAwLCAxMTg5NTIsIDY0MzYyLCA3NDMzNCwgCi0gICAgOTgzNjAyLCAxMjA4MTEsIDAsIDEyNDY4LCA4NjA3LCAxMDA4LCAwLCAxMDA5MiwgMTk1MDc4LCA5MTc4NDIsIDY3ODU1LCAKLSAgICA1NTI1NywgNzM3NzEsIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDEyODY2NSwgCi0gICAgNjQ1OTUsIDEyNzI5NCwgMCwgOTIzMTEsIDQzNDUsIDEyNjE2LCAwLCAwLCAwLCA3NDQ2NywgMCwgMCwgMCwgNTM4MiwgMCwgCi0gICAgMCwgMCwgMTE5MDYwLCA2NDk1MywgNTQwNiwgMTk5MjAsIDY5ODk3LCA2NjUxMCwgMzU5MCwgMTk0ODY0LCAxMTMwLCAwLCAwLCAKLSAgICA0MjAxNiwgMTE4MjMsIDQzMDIzLCAwLCAxMTg4OTYsIDc3NDIsIDAsIDEzMjgwLCA3MTMyMywgOTMyNiwgNzM4MjYsIDUzMTAsIAotICAgIDc0ODEyLCA3ODU4NCwgOTIyMjksIDg5NTksIDQzNTg5LCA2NzQ3LCA2NjcyMywgMCwgODU2OCwgMCwgMTIwNDk2LCA3MzgxNiwgCi0gICAgMTIwODAzLCA5ODM4MzksIDQyNjcwLCAwLCAxMTYyMSwgMTI0NjAsIDAsIDEyMDYzMSwgMCwgNDMwNjMsIDc0NTE5LCAKLSAgICAxMjcxODIsIDAsIDczOTE3LCA3ODQzLCA2OTc4MywgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAKLSAgICAxMTU5NCwgMTI4MjQ3LCAwLCAxMTg5OTAsIDEwNDkxLCA2OTg0MiwgNjQ0MTIsIDAsIDAsIDU1ODcsIDQyODY1LCA2NDQwNCwgCi0gICAgODI2OCwgNDkyMywgNjUwODYsIDg5ODEsIDEyMzgyLCA0MjEzMywgMTIwNzU1LCA5NzA2LCA2OTczOCwgMCwgNjY2MTAsIAotICAgIDEwNDYxLCAxMjEwMywgMCwgODY0MiwgMCwgNDI3NjYsIDk4Mzg1NywgMjIxMCwgOTk4MywgMCwgOTQwMDksIDAsIDAsIDAsIAotICAgIDczOTgsIDQxNTE1LCAwLCAxMTgwMiwgODA0MSwgMTQ2MSwgOTEwLCAxMTkxMzMsIDAsIDY3NDksIDM2NTgsIDkzOTY0LCAKLSAgICAxMjA1MjUsIDAsIDc2MTcsIDE5NDg0MSwgMTI4ODgsIDEyNzk4MywgNjc2NjgsIDEzMTQzLCAwLCA5MTkzLCAxMTA5NywgCi0gICAgNTcwMywgMCwgNDE1MTcsIDQxNTA0LCA0MTUxOSwgMTAwMTYsIDY0MzA1LCAwLCA2NTg2NCwgNjIzLCA3ODEsIDY3MCwgCi0gICAgMTA2NjAsIDU3NjksIDYxMywgNzU0MywgMTIwMjc5LCA0NzcsIDQxMDgzLCA5MjUyMSwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgCi0gICAgNDM0NDksIDAsIDAsIDgyMjUsIDAsIDY1NCwgMTEzNDUsIDY1MywgNjUyLCAwLCA2NDcsIDAsIDYzMywgMTIwNzQ0LCAwLCAKLSAgICAxMjY0NzIsIDEyNDgwLCA0MzI0MywgMCwgMzksIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIAotICAgIDMxOTUsIDU1NTAsIDk4MzU1NCwgNzg5NywgMCwgMTIwMywgNzQzOTYsIDE4MTMsIDY0NTQ0LCA0MTMxMSwgMTIwOTAsIDAsIAotICAgIDI4NzcsIDAsIDAsIDE2NzUsIDY5ODQwLCAwLCAwLCAwLCAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMTk0Nzc3LCAKLSAgICA5ODM2MTEsIDAsIDAsIDAsIDQzMjQ0LCAwLCAwLCA5ODM5MDcsIDExOTU2MSwgOTgzMDc4LCAwLCAxOTQ5MjEsIDEyODE2MCwgCi0gICAgOTkzOSwgMCwgOTgzMTUxLCA3Nzg2MCwgMCwgMCwgMjcwLCAwLCAxMDcxNCwgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIAotICAgIDc0MDM4LCAxMTk1NTgsIDYyNzMsIDY2Njc5LCAzNjQsIDk1OTUsIDE5NDkwOCwgMCwgMCwgNzA3LCAwLCAwLCA5MjgyLCAKLSAgICA2NjQ4OSwgMjI0LCAwLCA2ODY3MCwgOTMzMiwgNDk2NiwgNjg2NzcsIDAsIDY4NjQ0LCAwLCAzODQxLCA2ODYzNCwgMCwgCi0gICAgMTA3MzIsIDY4NjQwLCA4NTAsIDQ5NzIsIDAsIDEyODkwLCAyOTA5LCA2ODYxOSwgNDQwMDgsIDY4NjI3LCA5ODM3MDksIAotICAgIDExNTQ0LCAxMDIwMywgOTYwOCwgMCwgMCwgMTE5NjIsIDE5NDY5NCwgMTI1MDcsIDExOTYsIDEyODY4NywgMTI4MzExLCAKLSAgICA3NzcsIDEyMDE4NywgNDM3NSwgNjUyNzEsIDY3Njc4LCAwLCAxMjE5OCwgMCwgNjQ4MjQsIDExOTM0MywgOTgzMjMwLCAKLSAgICA5NDU0LCA2Mzc3OCwgODY1OCwgNDI1MjgsIDc4MDAwLCAyNzA1LCA5MTc5NzUsIDQxNTIwLCAwLCAwLCAxMTk4NiwgNzc2NSwgCi0gICAgNDI1MDIsIDgyODAsIDc0NTIwLCAyNzAxLCAwLCAxMjcwMDIsIDU3NjcsIDAsIDAsIDk4MDksIDgzNTMsIDYzNzQ3LCAKLSAgICA2NjcwMSwgNjM3NzIsIDk4MzgwNSwgNjM3NDUsIDE3NDgsIDYzNzcwLCAwLCAwLCAwLCA2NTU0MiwgNjM3NjYsIDU1MjQ0LCAKLSAgICAzMDYxLCAwLCA2Mzc2NCwgNjM3ODcsIDkwNjcsIDYwOTYsIDAsIDc2OTQsIDAsIDcyNTcsIDYzNzY4LCAzNDg1LCAxMjk4NywgCi0gICAgMCwgMTI3NTIyLCAxMjA2MjgsIDYzODA3LCAxNTkxLCAwLCA2Mzg2LCA2Mzc4MywgMCwgMCwgOTI1MzUsIDAsIDAsIDAsIAotICAgIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAzMTM4LCAKLSAgICAxMDk5NiwgOTIyNDcsIDE5MjIsIDAsIDEyNDk4LCAxMDk4NywgNjk5MzYsIDY5OTM5LCAzODk0LCA2NTU0MywgMCwgCi0gICAgMTk0ODQyLCA5ODM1ODgsIDQ5MywgMCwgNDMxOTcsIDE3MTcsIDQyMjgsIDQ3OSwgMTAzMDMsIDc0MDIwLCAwLCA5MTc5MzUsIAotICAgIDEwMzM1LCAzNTIwLCA5MTc5MzIsIDEyNDkwLCA2NDMxNSwgMCwgMTI3MDM5LCAxMjQ5MywgNjIzMywgNDI2ODEsIDEwMDIsIAotICAgIDEyNDkxLCAwLCA2NDkxMSwgOTI2MTUsIDIwOTYsIDY1MTIwLCAwLCA3ODIxOSwgOTgzMDgxLCAxMTYxMSwgMTE2MzIsIAotICAgIDEyNzA0MSwgNjYyMTMsIDYzODY0LCA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCAKLSAgICA2NjIzNiwgNjYyMTEsIDY2MjE4LCA5MjY3MiwgNjYyNDAsIDc4MDQxLCA2NjIzMywgODkyOCwgOTgzNTUyLCA3OTA5LCAKLSAgICA2NjIzNCwgMTE2MDUsIDYzNzU5LCA5ODM2NDUsIDY2MjA4LCA3Mzk5OSwgNjM3OTksIDYzODAzLCAyNDQsIDExNTQyLCAKLSAgICAxMjg5OCwgMTI0OTQsIDczNzYxLCAxMjQ5MiwgMTI2NjksIDAsIDAsIDc0MTUzLCAwLCAxMjgyNzgsIDEyMDY4MCwgNDg4MiwgCi0gICAgMTMwNDAsIDAsIDg2MTIsIDQ4ODUsIDc0MDUzLCAwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIDI0MjksIDEzNjAsIDI0OCwgMCwgCi0gICAgNjM3OTcsIDkyMzk0LCA0MjM1OCwgMCwgNzI5MiwgMCwgNjM3NTYsIDQyNzg2LCA2NjY5MywgMCwgMTg3MCwgNzgwNDAsIAotICAgIDQ3MCwgNzgwMzgsIDc4MDM1LCA3ODAzNiwgNzAwMjgsIDc4MDM0LCA0NTc5LCAxMjgwOTAsIDAsIDEyNTExLCA3NDQ1MywgCi0gICAgMTI1MTQsIDAsIDc0NTc5LCA3MjM5LCA3MDAxLCA4NjIzLCA5NDAxMSwgMTI4MDUyLCAxMjgwNDgsIDczNzgsIDEyNTEyLCAKLSAgICAxMTYxNSwgNjEwNCwgMCwgMCwgNjU5LCA2MDk4LCAwLCAxMjIzNCwgMTI3MzA3LCAxMjcwNjcsIDgzMTEsIDEyNTEwLCAKLSAgICA0MTgwMywgMTMwMzksIDEyNzA3MiwgMTI1MTMsIDEwMjAyLCAxMjQ3MSwgMCwgODc0NywgOTgzOTExLCAwLCAwLCAyMzIzLCAKLSAgICAwLCAyMzE5LCA3NzkxNywgMTI0NzcsIDc3OTE2LCAyMzExLCAwLCA0NDE1LCAyMzcsIDYyODEsIDEyNzI4MCwgMCwgMCwgCi0gICAgMjMwOSwgMTMxMiwgODE3MywgMTI4ODcxLCAxMjQ2OSwgMCwgNzg1MDUsIDY0MzM1LCAxMDYwOSwgMCwgMTI4MTExLCA5Mzk3LCAKLSAgICAxMTUyNCwgOTM5NSwgOTM5NiwgOTM5MywgOTM5NCwgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgOTM4OCwgNDkzMiwgCi0gICAgOTM4NiwgOTM4MywgOTM4NCwgNjc0MCwgMCwgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCA2NzY1OSwgCi0gICAgMjMxMywgMTI4MTY3LCA3OTQ4LCA5MjM2LCA5MjU3MSwgMCwgMCwgMTA1NzAsIDQzNDczLCA2Mjg5LCAxMDQ4NCwgMCwgMCwgCi0gICAgMTE5OTgsIDEyMDgyLCAxMDkyNCwgMzE0NywgMCwgMTIwNjg0LCAxMjUyNCwgMTE5MDgxLCAyMzEwLCAxMTgxOCwgOTM4MSwgCi0gICAgOTM4MiwgOTM3OSwgOTM4MCwgOTM3NywgOTM3OCwgOTM3NSwgOTM3NiwgMTY4MywgOTM3NCwgOTgzNzY5LCA5MzcyLCAKLSAgICAxMjQ0NCwgMCwgMCwgMTMwMTYsIDgyMTAsIDk4Mzk0OSwgNDIwMjksIDExMDc5LCAxMjMzMSwgNDM0NTEsIDQyMDMyLCAKLSAgICA4NzQ0LCA3MjYsIDAsIDk4MzgyOCwgNDE1NSwgMCwgMCwgNDIwMzAsIDUwMDcsIDEyNTIyLCA0MzA4OCwgMCwgNDk1MSwgCi0gICAgMTI3ODA1LCAxMjcyNDAsIDAsIDk5MjIsIDQzMzA5LCA5ODM4MzIsIDEyNTI1LCA5ODM0NjMsIDEyMDE2LCA2NTc3MCwgCi0gICAgOTU0OCwgNjc2NjUsIDQwMywgNzgyMzAsIDEyNTAzLCAwLCAwLCAxMTAzMCwgMCwgOTI1NjcsIDY1NjkxLCA2Mzk5OCwgCi0gICAgMTgxOSwgMTA0OTYsIDAsIDAsIDExOTkyMCwgMCwgMTk0NjY4LCAwLCAxMjUwNiwgMCwgMTIyMzEsIDAsIDEyNTAwLCAKLSAgICA0NDAyMywgMTI1MDksIDY0MzkzLCA3ODgzMCwgMzM4OSwgMTA1ODksIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDc4Mzk1LCAKLSAgICA3ODM5NCwgNzQwNjksIDc3OTk1LCA3ODM5MSwgMzYwOCwgODI4MSwgMTIwMzIwLCAxMTA3LCAwLCA5MDc2LCA4ODYyLCAKLSAgICA2OTc0MywgNDEwNTIsIDEzMDg0LCA2NDc2NiwgNDMyMTcsIDc4MDMsIDEzMjIyLCA3NDE2NSwgNzQ3ODIsIDEyNjUxNCwgCi0gICAgODU0NiwgMTE1NTMsIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgOTgzOTM4LCA0OTgsIDY0NDcxLCAxMjAzMjQsIAotICAgIDEyODU2NywgMTI1MjksIDgwNDIsIDAsIDIzNDQsIDEyNTI4LCA4MDMxLCAyNDE0LCAwLCA2OTcxOSwgMzIzMSwgMCwgNjQyMiwgCi0gICAgNjY1MTIsIDY5NjUzLCAxMjUzMCwgMjUzNywgNzg0MDUsIDQxNDI5LCAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCA3ODczOCwgCi0gICAgNDE0MzMsIDQ3MTksIDQ2OSwgMCwgNDM2MywgMzMxMywgNDE0MjgsIDc4NDA3LCAyMDIzLCAxNzcyLCA3ODIyNCwgNzgyMjUsIAotICAgIDY1NzA2LCAxMDA1MSwgNjQ4MTIsIDc4MjIwLCAwLCA5OTIwLCAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgCi0gICAgOTYwNywgMCwgOTY2MywgMCwgMTE5NjM0LCA2NTAzLCA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMTI3MzA0LCA0MTA2MSwgMCwgCi0gICAgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgCi0gICAgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIAotICAgIDEyNzc3NiwgOTk0MCwgMTI3Mjk5LCA3NjkyLCA5ODM4MjQsIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIDY1MDgzLCA0MTEzMywgCi0gICAgOTgxNiwgMTI2NTE3LCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAxMjcyOTgsIDY0MTM5LCAKLSAgICA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAwLCA2NDEzNiwgMTI1MzYsIAotICAgIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgOTgzMTAzLCAxMzAzMCwgNjcwMiwgNDUyNywgMCwgMTI1MzgsIDEyODgxMCwgCi0gICAgOTgzNjM2LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAKLSAgICAwLCA2MTE3LCA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgMjMyNSwgNDE1MTEsIDEyNjYyNSwgMTAxNDksIDc0MTE4LCAKLSAgICAwLCAxMjcyODYsIDEyNDgxLCAwLCAxMjQ4OCwgNjY3MTMsIDAsIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCA0MjYxOSwgCi0gICAgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIDY1MDMyLCA0MTUxMywgOTgzMTY2LCAxMTkyNywgNjY1ODQsIAotICAgIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDc4NTU4LCAwLCA3ODU1NiwgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCAKLSAgICA2OTkyMiwgNzQwMzEsIDc4NTYzLCA3ODU2NCwgMjM1MiwgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCA2Nzk3MywgCi0gICAgMCwgMTMwMjYsIDY3NjIsIDc4NTc5LCA3ODU4MCwgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAKLSAgICAxMzQzLCA5ODM4MTQsIDAsIDkzMjUsIDY4MTgsIDYyODMsIDExNzM4LCAwLCA5ODM5MjUsIDAsIDExNzQxLCAwLCAwLCAKLSAgICA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCA5ODM4MTYsIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIAotICAgIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgNDI3MzcsIDk5NTYsIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgCi0gICAgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCA3NDM0MCwgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3NzEsIAotICAgIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgMTk0NzQ4LCA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgCi0gICAgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCA3ODU4MSwgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAKLSAgICAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgCi0gICAgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgODgzOCwgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIAotICAgIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgNjQ5OSwgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAKLSAgICAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgOTQwNzMsIDEyODA2OSwgMzI3NywgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgCi0gICAgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCA2NDYyNiwgNjYwMzQsIDc3NTEsIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAKLSAgICAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIDQxMDU0LCAxMDc4LCA5NzU3LCA2OTczNiwgCi0gICAgNDEwNTcsIDAsIDAsIDAsIDAsIDk4Mzc4MiwgOTIyMTAsIDkyNDExLCAwLCA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIAotICAgIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAKLSAgICAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAyMDgsIDEyNzM4MiwgNDE1MTQsIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCAKLSAgICA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMTI2NTk2LCAwLCAxMTk5MzMsIAotICAgIDAsIDMxMTUsIDk5MTgsIDAsIDExMzIxLCA0MjkxMiwgMCwgMCwgMTk0NzI2LCA0ODc2LCA2NTgwNCwgMCwgMCwgNDM0NjgsIAotICAgIDk4MzI2NiwgNDE1NTgsIDQxNDcxLCA3Mzk1MCwgODE1OCwgOTk0NCwgNDE0NzIsIDEyMDI5OCwgMTMwNTEsIDc4Njg5LCAKLSAgICAzMTQzLCAxOTQ2NzQsIDY3MDEsIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgNTY2NSwgMCwgMTE5MDcxLCAKLSAgICA3MDI1LCA2Mzk3NCwgMCwgNzQzNTIsIDc0MTYxLCA0MTU0LCA5ODYzLCA0MzU1MCwgMTIzMTAsIDU2NjIsIDQyMzgyLCAKLSAgICAxOTQ2ODYsIDczOTI0LCAxMTIxLCA3ODMxOSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgCi0gICAgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIAotICAgIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIAotICAgIDYzOTc4LCAxMTA0NCwgMzIyOSwgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIDcwODUsIAotICAgIDYxMzcsIDAsIDc1MjQsIDAsIDkxNzgwOSwgODM0NiwgMCwgODMzOCwgMTI4MzE1LCA2NTA0MywgMCwgODIyLCAxMjc5ODQsIAotICAgIDk5MDMsIDY0NzIxLCA0MjcyMiwgNjk4NzcsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIDc4NjYyLCA0MTI2NSwgCi0gICAgNTMxMSwgMTc5NSwgOTY1LCAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAxOTQ2NDAsIDAsIDEyOTQ2LCAKLSAgICAxOTQ2NDEsIDExOTM0MSwgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIAotICAgIDAsIDk4Mzk1MSwgNzQ4LCA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgMTA1NTYsIAotICAgIDI0NzUsIDEyMzg4LCA0ODg5LCA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgCi0gICAgMTk0NjM1LCA0ODkwLCAxOTQ2MzcsIDkxNzgwNCwgNTgxLCA0ODkzLCA5ODM2MTYsIDY1NzEsIDY1NTQ1LCA0ODg4LCA0MTU3LCAKLSAgICA3ODA0OCwgNzgwNDksIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCA2OTcwMiwgMCwgMCwgMTEzNzUsIAotICAgIDY0NzQ2LCAyMzMyLCA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIAotICAgIDc4MDY2LCAxMjIwMywgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAKLSAgICAxMTg4ODgsIDkzNDQsIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAKLSAgICAwLCAzMTM0LCAwLCA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIAotICAgIDc4NDE0LCA3ODQxMywgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAxMDczNCwgCi0gICAgMTI3MDE0LCAwLCAxMjc5MTQsIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAwLCAKLSAgICA3ODA1NCwgNDkxNywgNzQ1MTYsIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIDc5NzEsIAotICAgIDc4MDcyLCA3ODA3MywgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgNDA5NzcsIAotICAgIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDk4MzYwOCwgNDA5ODAsIDk4Mzk1NSwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgCi0gICAgOTgzMDQ4LCA2OTg1NiwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMTI3OTQ2LCA1NjUzLCA0MjQwMCwgMTA4OTEsIAotICAgIDc2OTgsIDU2NTgsIDc0MDQ1LCA3MDAzOSwgMCwgMCwgNDkxMywgMCwgOTgzOTUwLCA3MTMzMywgNDIzMjYsIDEyODE5NCwgCi0gICAgMTI3MjgsIDkyNjg1LCA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIAotICAgIDYxNTMsIDI4NjcsIDE5NDcwOCwgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3MDAxNywgMTk0NzEzLCAKLSAgICA2NTEsIDEyNjQxLCAwLCAwLCAwLCAwLCA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIAotICAgIDc4NDYxLCAxOTQ2OTcsIDc0MzU2LCA2NDk0NSwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAKLSAgICAxOTQ3MDAsIDU1MjY0LCA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDk4MzQ4NywgMTAxMDEsIDAsIAotICAgIDcwMDQ5LCA4NDc5LCA0MTUxLCA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIAotICAgIDc0MDUwLCA5MjcwMSwgMCwgMCwgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgCi0gICAgMCwgMjY5OSwgMCwgNzM4NDUsIDI5ODUsIDkyNTY4LCAxMjY0NzUsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCAKLSAgICA5ODI3LCAxMTkzMTAsIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIAotICAgIDM1LCA3ODQ4MSwgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIAotICAgIDEwNTM0LCAwLCA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIAotICAgIDc4NDg3LCA0MzMwNiwgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCAyMjkyLCA2ODIxNiwgMCwgOTE3ODI2LCA1MjQ0LCAKLSAgICA0MTg5LCA5NDEwOCwgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMjI3OSwgCi0gICAgMCwgOTE3ODI3LCA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgCi0gICAgMTI1NzgsIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIAotICAgIDExODg1MCwgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIAotICAgIDk2MzIsIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMCwgMCwgMCwgMzEwLCAwLCA0MTI4MSwgMTA5NzYsIDAsIAotICAgIDcxMzI1LCAwLCA3NDI2NiwgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCAKLSAgICAxMjczMCwgNjUxNjMsIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDEyMDE2MSwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIAotICAgIDEyODE2OCwgOTgzMjYwLCA0NzE1LCA2MTAxLCA5NDEwNiwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIAotICAgIDEyNzE0NywgOTU4NSwgNTM3NCwgOTgzMjU5LCAxMjgwNTksIDAsIDAsIDEyNjYxOCwgMTIwMzkwLCAwLCA2NTU2NywgCi0gICAgMTIwNjE0LCAxOTI5LCAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDE5NDYyMywgCi0gICAgNTM3OCwgNzg3OTEsIDEyODY3OSwgNDE0MjEsIDAsIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIAotICAgIDU4MDAsIDEyMDE1NywgOTgzMTE1LCAxNzYwLCAyNDIxLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIDc4NDAwLCA3NTcsIAotICAgIDExODUsIDAsIDc4NzcwLCA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDQzOTcxLCAwLCAwLCAxMDYzNCwgCi0gICAgMTA5NDIsIDc3MTMsIDIzNDgsIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgOTk4MiwgNjQzMjQsIDQxMjQwLCAKLSAgICA4NjIsIDY1NjI2LCA3ODQ2MiwgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgCi0gICAgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCA3ODA5MiwgNzQzNTcsIDE5NDU5NywgNDc0OCwgOTIyMjgsIDE5NDU5OCwgMTk0NjAxLCAKLSAgICA0MjI2MCwgNTg3MSwgMTE5MDc1LCAwLCA3NDU3NiwgNDQwMTksIDAsIDEyODE4OSwgMzk2NywgMTk0NjA0LCAxMzEzNywgCi0gICAgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAwLCA4NDEwLCA0NDU0LCA3MjMsIDEyNzg4MiwgOTY2LCA0NDQ5LCA5MjMzMCwgCi0gICAgOTIyMzgsIDAsIDc4MTksIDIzMjAsIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIAotICAgIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCAKLSAgICA5ODM3NTQsIDE1ODQsIDY2NjQ1LCA2MDQ1LCA2NzI5LCAxMjA2NDAsIDY1MjE4LCAxMTU1OSwgMCwgNzgwNjIsIDc1MzcsIDAsIAotICAgIDExMzcwLCAwLCAxMDMzMCwgMCwgMTAzOTQsIDAsIDc0MTk0LCAwLCAxMjc5MjksIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIAotICAgIDc3OTUwLCAxOTQ1NzgsIDcwNzQsIDkyNjQ4LCAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIAotICAgIDAsIDAsIDQyMTEsIDEyNTksIDc1MTcsIDAsIDAsIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIAotICAgIDk0MDM0LCAxOTQ1NjYsIDExMDY0LCA0MTEyOSwgMCwgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAKLSAgICAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIDE5NDU3MywgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDk4MzQ0NCwgCi0gICAgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyNzkzNCwgMTI2NjA4LCAwLCAwLCAwLCAwLCAKLSAgICA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgMTIzMzgsIDQ2NTEsIDY5ODk1LCAKLSAgICAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIDAsIDQxOTAzLCA0MzQ0NywgMTEwMDEsIDAsIDQyMjU1LCAwLCA5MjY2MSwgNjk4MjEsIAotICAgIDQxOTA1LCAwLCAwLCAxMDc3NSwgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCA5ODMwNjMsIDQyNTM1LCA2OTgxMiwgCi0gICAgNjQ1MjksIDQxNDA4LCA0Mjg1MywgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgOTgzNzY3LCAKLSAgICAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgNDc0NywgMTI4MDU4LCA2OTg0NCwgCi0gICAgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIDQyNjAwLCAwLCA0MzIwMywgMCwgOTgzNzkwLCA0MzI4NiwgMCwgMTI4MjExLCAKLSAgICA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIAotICAgIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMTIwNDgxLCAxMjA3ODYsIAotICAgIDQyMjMzLCA2NDE0MCwgOTk0NiwgNjM4ODUsIDE5NDc5MiwgMTE4MjIsIDAsIDQzMTg5LCA5ODM4ODksIDAsIDE3ODgsIAotICAgIDE1NzksIDEyMDQ4MiwgNzEyOTgsIDAsIDAsIDAsIDkwMjgsIDExOTU3MSwgNjkyMzQsIDk0MDU1LCAwLCAxMjg1LCA2NDg4MiwgCi0gICAgNDEyNDIsIDcwMDg2LCAwLCAxMjY0MCwgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAwLCA3MDA4MiwgMzk0MCwgNDE1OTcsIAotICAgIDQzNzU0LCAzMzk2LCAxMjY0MiwgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgMTAxNTMsIDAsIDYxNjYsIAotICAgIDEyMDUxNiwgMTE4OTg5LCAwLCA4ODE1LCA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExOTMxNywgMTE5MzE4LCAKLSAgICAyMTQyLCA2ODQ1NCwgNDI0ODUsIDk0MDEyLCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIAotICAgIDEyMDMyLCAwLCA5NzI1LCAwLCA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgCi0gICAgNDI3NzcsIDEwMTM5LCA5ODAsIDQzNjk4LCA2NTM4NiwgMjIwOCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIAotICAgIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIAotICAgIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAKLSAgICAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMjIxNywgOTE3ODU0LCA3Mzk3NSwgNjM2NywgNjM1MSwgNjY2ODgsIDAsIDc4MTA3LCAKLSAgICAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIDAsIAotICAgIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIAotICAgIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMTI4MjI1LCAxMzIxMywgCi0gICAgNDI0NTIsIDc4MzMxLCAxMjA2NjQsIDc4NDQ1LCAwLCAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgCi0gICAgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAKLSAgICAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAKLSAgICAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIDY2MzA5LCAwLCAwLCAxNDk0LCA5ODMxNDYsIDEyNjYxMywgMCwgCi0gICAgMTE2OTMsIDEyNjUxMywgMTA0OTQsIDkyNjU1LCA2NTg3MiwgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgCi0gICAgNzM3OTQsIDAsIDgwMjIsIDAsIDEyMDQ2MiwgNzQxMDYsIDEyNDEzLCA5NDA2OSwgOTE3OTk0LCA5MTc5OTMsIDkxNzk5NSwgCi0gICAgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgNDM3NTIsIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDk4MzIzNiwgCi0gICAgNDIzMzksIDAsIDYwNjMsIDAsIDc4MzgzLCAxMTk1OTQsIDYwNTMsIDY1NjAyLCAwLCA5MjIwMSwgNjQ3MjcsIDkxNjAsIAotICAgIDE5NDgyNywgMCwgMCwgOTIxODAsIDEwNTAzLCAxMTg4MTAsIDYwNTUsIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgCi0gICAgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCA5ODMxMTYsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgCi0gICAgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgCi0gICAgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgMTIwMTAxLCA1ODksIDcwNTAsIDk4Mzc5MSwgNDMyODEsIAotICAgIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIDAsIDE5NDgxNSwgODU4MywgCi0gICAgMCwgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCA2NjU5MiwgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCAKLSAgICA0MjU2MSwgMTIwNjI2LCA5ODMyNDUsIDAsIDgxMjAsIDEyMDcwMSwgMCwgMCwgMTI4MDEyLCA0MTA2MywgMCwgMTA2NjQsIDAsIAotICAgIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgMCwgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAKLSAgICAxMjUxNywgNTU3LCA5NDU3LCAxMjAzNCwgOTgzNjYyLCA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDE5NTAyNSwgNzQwOTQsIDAsIAotICAgIDAsIDc3OTcwLCA5ODM1NjAsIDAsIDEyODE3NSwgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgCi0gICAgNjkyMywgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIAotICAgIDE2MTgsIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIDkxNzk1OSwgNTg1MywgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgCi0gICAgMTI4MTY5LCAxMjA3MjksIDExMzE0LCA5MTc1ODIsIDEyMDYwLCAwLCA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCAKLSAgICA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIDEyNzA1NCwgNzgzOTgsIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIAotICAgIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIDY3NjE3LCAxMTg5NzEsIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgCi0gICAgMTE2NCwgMTI4ODE3LCAwLCA0MTkxOCwgOTgzMTY4LCAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgMTI4MDAxLCAKLSAgICA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgCi0gICAgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgNDI4NDMsIAotICAgIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIDg5MjIsIAotICAgIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgCi0gICAgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgCi0gICAgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAKLSAgICAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgCi0gICAgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIAotICAgIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAxMjEwNCwgNzc5NDIsIDYyMjAsIDkwMDQsIDY1NTYxLCAwLCA3Nzk0OSwgMCwgCi0gICAgNjgxMzUsIDkxNzU3NiwgNzc5NDYsIDAsIDY5Njc5LCA2OTY4NCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIAotICAgIDczODk4LCAxMTk3OSwgNzAwNTEsIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgCi0gICAgNzQyMjcsIDAsIDY1MzA0LCA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCAKLSAgICA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgNzQ2MDYsIAotICAgIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCA3ODU2NiwgMCwgOTgzMTg5LCA2NTg5OCwgOTgzMjM4LCA2NTMxMiwgNTQ0NywgMCwgCi0gICAgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCA0MTEwNiwgMCwgNjQ0NDgsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgCi0gICAgMTI4MjgwLCAwLCA0MzYwOCwgMTE5MDkxLCAwLCA2NTM4LCA0MzM1LCA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCAKLSAgICA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIDEyMTU1LCA5ODM2NjUsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIAotICAgIDY1ODMyLCAwLCAwLCAwLCA3Nzk3NSwgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAKLSAgICAwLCAwLCA1MTMzLCAwLCAwLCA5NTAwLCAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCAwLCAwLCAyNDk2LCAKLSAgICAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIDEyMTY4LCAxNDM4LCAwLCA5ODMxMTcsIDAsIDQxOTQ3LCAxMjIwLCAxMjA4MjgsIAotICAgIDEyODU1NSwgMCwgMCwgMTU3MSwgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIAotICAgIDk4MzkzNSwgMCwgNzgxMjAsIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCAKLSAgICA2NTEyMSwgMTA4NjIsIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgCi0gICAgMTE1MzIsIDc0MDczLCAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDkxNzg5NSwgNjQyODcsIDAsIDc4MTE1LCAKLSAgICAxMTQyOCwgMTczMCwgMjQ1NywgOTE3ODA4LCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIAotICAgIDkyMjMwLCAwLCA2MTI5LCAwLCAxMjg1MjgsIDEyODI2OCwgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgCi0gICAgNzAxMDIsIDYzODg2LCAxMTg4ODEsIDk2MDUsIDcxMzA4LCAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIAotICAgIDAsIDAsIDAsIDUyNDAsIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA5ODMzNDMsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgCi0gICAgOTUwMSwgMCwgMTI3MiwgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAKLSAgICAwLCA5MTc4MTIsIDAsIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDk4MzM0NSwgMTk5MzUsIDAsIDkyMTYyLCA2OTY3NiwgCi0gICAgMCwgMCwgMCwgNTI3NSwgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCAKLSAgICA2NjMzMiwgNjY2MDMsIDEyODEzOCwgMjQyNiwgMTIwNDIsIDkyMTk0LCA5ODM5MDIsIDk1MzcsIDM5NjEsIDEyMTE1LCAKLSAgICA3Nzk1MywgMjYwNSwgNDUwMCwgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIDQyNjg2LCA3Nzk3MywgCi0gICAgNDIzNjIsIDY0Njg2LCA0NDk5LCA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDkxNzkwNCwgODU0MSwgCi0gICAgNzgyOTgsIDcwMDM0LCA0MTg2NiwgMCwgMCwgMCwgMCwgNjk5MjQsIDQzNTU1LCAyODIzLCA5NTU5LCAxMDA2MCwgNDE5NDAsIAotICAgIDgyOTksIDQxOTQ1LCA3MTMyLCA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgCi0gICAgNDE2OTksIDEwNzYyLCA0Mzc4MCwgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDYyNzQsIDQ0OTQsIDAsIDQwMTIsIAotICAgIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCA2NTQ0NywgMTI2NTExLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgCi0gICAgNDI3NTUsIDc0ODAyLCA5MjI3LCA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIDc1MTIsIDc1MTUsIDM4NjgsIAotICAgIDY4OCwgNDE4NDcsIDY5MCwgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDkxNzkxMSwgMCwgMTI4Njg4LCAzOTg1LCAKLSAgICA5MTc5MTIsIDY1ODYwLCA2MzkyMSwgNzA1MSwgNjk3NzcsIDQ2ODIsIDkxNzgwNSwgMTI4MDksIDY0MDYsIDQ2ODUsIAotICAgIDkyNTA1LCAxMDg3OSwgMTAzNDcsIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIDAsIAotICAgIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgMCwgNDI2NTcsIDkyNDY4LCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCAKLSAgICA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIAotICAgIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAwLCAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDk4MzEzNSwgMCwgCi0gICAgNDM1NjEsIDAsIDAsIDc0MTQ2LCAxODYwLCA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAxMTkxNDAsIDEyNzg1MywgCi0gICAgMCwgMTIwMzQ3LCA3NzI3LCAwLCA4NDk4LCA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAKLSAgICAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIDEyNTMzLCA5ODM4NzAsIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAwLCA3NDgwMCwgCi0gICAgMCwgNjc5NzQsIDExOTgwLCAxMjg2NTAsIDk4Mzc5MiwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgCi0gICAgODg1MCwgNzQyNzUsIDkyMzgsIDEwNjE3LCA5MTc1NDUsIDAsIDkyNjI1LCAwLCAxMjc5MSwgMCwgMCwgMTI3ODQzLCA0NDQ3LCAKLSAgICA3MzczMiwgMTI3OTMsIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgNDE0MDAsIDExOTEyOCwgNjY2MDcsIAotICAgIDEyNzkyLCA0MjIzMiwgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgOTgzODYwLCA0MTM5OSwgMCwgCi0gICAgMCwgNTUyNTgsIDAsIDEyNjkwLCAwLCAwLCA0MzY3MiwgMTI3ODQwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIAotICAgIDI3OCwgMCwgNDE0MDUsIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIAotICAgIDQzNTUzLCAwLCA2NzkwMywgMCwgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgOTgzMTg2LCAKLSAgICA3NzgyOSwgNzEzNjAsIDAsIDY0MTMsIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIAotICAgIDEwMDQ0LCAxMjgzMjIsIDAsIDAsIDY4NjU5LCA2NDAzLCA1NzA3LCAxMDM5MywgMTI3NTMyLCAwLCA2NjYxNCwgMCwgMCwgMCwgCi0gICAgMTAyOTcsIDAsIDM3NDIsIDAsIDM5NTksIDAsIDAsIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCAKLSAgICA0Mzc1OCwgNDE4MiwgNzgxNzEsIDQ2NzYsIDEyMDUwMSwgMCwgMCwgMjUxMCwgMCwgMTAyMDgsIDc4MTY4LCA5MjM2MSwgCi0gICAgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCA0MTA2MCwgMCwgNDY2OCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCAKLSAgICA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIAotICAgIDEyODIzNiwgMCwgMTIwNDcyLCA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgMTIwNDUsIAotICAgIDYyNzgsIDAsIDU1MTUsIDAsIDAsIDk4MzA1MSwgNjUzMzksIDQzMjIxLCAyMjExLCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgCi0gICAgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAxMjcxODgsIAotICAgIDE5MDIsIDY3ODg3LCA5NjM4LCAxMjk3NiwgMTI2NTQ2LCAxMjQ4MywgMTIzNjgsIDQxNzY5LCA0MjcyNiwgNDE3NjUsIAotICAgIDczNjEsIDY2NjcsIDY3ODc0LCA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCA2Nzg4OSwgMCwgMTMxMSwgCi0gICAgOTE3OTY2LCA0MzI2LCAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMTI4ODgwLCA2OTE3LCA3ODE1NSwgMCwgOTQ5LCAKLSAgICA3ODE2MiwgMCwgNjE0OCwgODYwNSwgNDIyNTMsIDc4MTc3LCAwLCAwLCA0MjcxNSwgMCwgMCwgMCwgNjM4NzEsIDAsIAotICAgIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIDQyNzE2LCAwLCA0NDMxLCA0MzMxLCAKLSAgICA5ODM3MjAsIDEyODY3NSwgNDE4MzQsIDUyNzksIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMTI4ODI1LCAwLCA3ODE2NSwgCi0gICAgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAKLSAgICAxMjEzMSwgOTgzNzEzLCA5NDkzLCA5ODM5NTksIDQxMDE0LCAxMTc5MywgMTk0OTIwLCAwLCA3NDM5NCwgNDM0NjAsIAotICAgIDEwNjUzLCA0MjcyMywgOTgzODQ1LCAxMTk2MzIsIDAsIDY1NjAsIDcwMTYsIDc0Mjc0LCA5ODM2MTUsIDQzNTU2LCAzOTI5LCAKLSAgICA2Nzk3NywgNjYxNCwgMjc2OCwgOTI1MDQsIDk3NDYsIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDY5NzYxLCAKLSAgICA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgNTE2OCwgNzg1NTIsIDEyNzc1MywgNzQzMTUsIDc0MzYxLCAKLSAgICA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgOTIyMzIsIDAsIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgCi0gICAgOTgzNjA3LCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCAKLSAgICA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIDYzODYzLCA0Mzc5NSwgCi0gICAgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgMTA0NzAsIDAsIAotICAgIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDExOTMyOCwgMCwgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgCi0gICAgNDQwMDksIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgMTE4Nzk5LCA5ODMyMTcsIDEwOTI3LCAxNzAxLCA5ODM2NTUsIAotICAgIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCAKLSAgICA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDk4MzA0NCwgMCwgNjU4MTIsIAotICAgIDkxNzgzMSwgMCwgNDE4MjQsIDY3OTg1LCAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIAotICAgIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgCi0gICAgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCA3MTMzMSwgMCwgMTk0NzkzLCAxOTEyLCAKLSAgICA0MjM4NSwgMTAzMDYsIDEwMzcwLCAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCAKLSAgICA5MjY3MSwgOTgzMjQ0LCAxMTg4NzgsIDAsIDAsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIAotICAgIDc4MTg4LCA0ODkyLCA3NDAxNiwgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAKLSAgICAyMDc5LCA2NTI0OCwgMTI3ODgsIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAxMjY1NzMsIDM2NjgsIAotICAgIDY1NzU0LCA0MzU2MCwgMTIyMjYsIDY3OTkxLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIAotICAgIDQzNjE4LCA2NTc0NywgMTA5MzcsIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgCi0gICAgNDI3MTQsIDk5NTEsIDQzNDA5LCAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIAotICAgIDQxODIwLCAyMzAwLCAyMzk1LCAxMjg1NjMsIDk5NzYsIDEyMDA0MywgMTIwMDUwLCAxMjAwNTgsIDY4MjIwLCAxMjgxNDMsIAotICAgIDQyODA5LCA0MjgwNywgMCwgMTIwMDQ2LCAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCA2Nzk3NiwgNDE4OTgsIAotICAgIDIzNjAsIDQxNzk0LCA5MTc5NDIsIDcxMzE0LCAxMjc4MTgsIDAsIDAsIDI0MTgsIDk4MzA5OCwgMjQxMSwgMTEzMzYsIDc5OSwgCi0gICAgNjM4MjMsIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCAKLSAgICA1NTI4NCwgOTIyMDMsIDAsIDEwMzg0LCA5ODMyMTgsIDAsIDAsIDc3NTMsIDIzNTEsIDY2NTUsIDY0NDg5LCA2OTkzMSwgMCwgCi0gICAgNzc4NzIsIDQ0NDMsIDQyNzc5LCAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAKLSAgICAxMDI4OCwgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIAotICAgIDc0MTQ1LCAxMjc5NDMsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIDQxODg3LCAwLCAKLSAgICA0ODYyLCA5NzM1LCA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgOTM5NzYsIDkwNjUsIDEyOTYxLCAwLCAwLCAKLSAgICA5MjI1MywgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCAKLSAgICA0MjcyNCwgMCwgNDY4OCwgMTIwNDU0LCAwLCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCA5ODM4OTksIDEyMDE2MywgCi0gICAgNjUyOCwgMTI3NTUzLCA0MzAzNSwgNjk4OTgsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDQ2MDIsIDAsIAotICAgIDc4MTY3LCAxMDA4OCwgNjU0OCwgMCwgMTIwMTU2LCA0Mzk3OCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIAotICAgIDczOTAyLCA2OTc0MCwgMCwgMCwgOTk3NSwgMTI4MDM5LCAxMTk5MDIsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIAotICAgIDc0NDQxLCA3ODgxMCwgMCwgMCwgNjc5ODcsIDAsIDAsIDAsIDY3OTg5LCAwLCAxMDA2NSwgODIwNywgMCwgOTI2MTMsIAotICAgIDEyODAxMSwgMCwgNjYyLCAwLCA5MjQ0LCAxOTQ4NjMsIDAsIDExOTI2MSwgOTgzNDIwLCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgCi0gICAgNjY2NzQsIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDY4MDEzLCA1MiwgMTMxMTgsIAotICAgIDY0NzUsIDAsIDEyMDM0MSwgMTIwOTUsIDEwMjI1LCA0ODEyLCA5MjU3OCwgMCwgNjc5OTIsIDc0MDg1LCAwLCAzOTc4LCAwLCAKLSAgICA5MTc5NDUsIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIAotICAgIDEyODU1NywgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAKLSAgICAyMDM2LCA5ODYsIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCAKLSAgICA2NDMzNCwgNzgyMDMsIDEyNzgwOCwgMCwgOTIyNjYsIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3NDE5MSwgCi0gICAgMTIwNDEwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCAKLSAgICA2NTUxNCwgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIAotICAgIDQzMzc1LCA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCA5ODM5MDEsIDY5NDMsIDkxNzkzNCwgNTg1OSwgMCwgMjg1OCwgCi0gICAgOTgzMzUzLCA3NDI5NCwgOTgzOTA1LCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzAwNzgsIDkyNTc0LCAKKyAgICAxOTQ2MDksIDAsIDgyOTUsIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDkyNTIzLCAxMjAxMDIsIDcxMzgsIAorICAgIDEyMDU1MiwgMCwgMTk0NjExLCA3ODc1MiwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIDY0Nzc1LCA1MDM2LCAKKyAgICA1MDM1LCAxMjA1OTAsIDQyNjA0LCA5ODM2NTYsIDAsIDgwNzQsIDI3NSwgMTMyOTEsIDE5MDcsIDc4ODM4LCA0NDMyLCAKKyAgICAxMjcyNzEsIDUwMzMsIDEyNzI3MywgMTI3MjcyLCA0ODM2LCAzODg4LCA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAxMjcyNjIsIAorICAgIDQzNzA0LCAxMjcyNjQsIDEyNzI1MSwgNjc1ODgsIDExOTAwMCwgMTI3MjUyLCAxMjcyNTUsIDg4NTgsIDY0MDksIDEyNzI1NiwgCisgICAgMTIwMjUyLCAxMjgxMDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMTI3MjQ4LCAzNDMyLCAxMDIxOCwgMCwgNjA5NCwgCisgICAgNzY0MSwgNDI0NDUsIDAsIDkyNDg3LCA0MjQwNiwgMTY3NiwgNzQzMjAsIDE5NDYwNywgOTgzMTc3LCA1MDMwLCAwLCAwLCAwLCAKKyAgICA3Mzg2OSwgOTYyMiwgMCwgNjk5NDQsIDY3ODcsIDAsIDAsIDAsIDk4MzU4MywgMTA1NDQsIDEyOTE5LCAwLCA5MjIxOCwgMCwgCisgICAgMCwgNjk5MDYsIDEyMDc4OSwgMCwgOTQ3LCAxMTk4MzUsIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgMTE5OTM1LCA3NjEzLCAKKyAgICA5MjU2MiwgMTE5OTM2LCA0Nzk1LCAxMTk5MzAsIDcwMTgsIDczNzYsIDEyMDE4MSwgMTIwMTkyLCAxMjAyNjgsIDAsIAorICAgIDQzNTY3LCA3NDA1NiwgOTE3OTEwLCAxMTgzMywgMTE5OTE5LCA3MjE2LCA2NTIzMiwgNzIxNywgMjUxLCA3MjE4LCA3ODk1LCAKKyAgICA0Mzk1LCA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgMTE5OTIyLCA3MjE0LCA3MjE1LCA5ODM4MzYsIAorICAgIDc0MTQxLCA4ODgwLCA3Njg1LCA2NjQ1OSwgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIDgxODcsIDQyODYxLCAxMTEzLCAKKyAgICA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgMTA5ODAsIDI0ODksIDY1NjI0LCAKKyAgICA4MTUwLCAxMzU5LCA2NzY1MiwgMTI3MzI5LCAxMjczMzAsIDczNzU2LCA1MDQyLCA1MDQxLCA0Mjc2OSwgMTIwODQsIAorICAgIDEyNzMyNCwgMTI3MzIxLCA5MjI3OSwgMTI3MzE5LCAxMjczMjAsIDEyNzMxNywgMTI3MzE4LCAxMjczMTUsIDEyMjgzLCAKKyAgICAxNjE2LCAzNzk1LCAwLCA4Nzk1LCA2NjI0NSwgMCwgMCwgMCwgMTEzOCwgNzM5MDUsIDEyNjc3LCAwLCAwLCAzMjM5LCAKKyAgICAxMjczMTEsIDAsIDAsIDg0MzEsIDAsIDQyMTY0LCAwLCAxMTc3OCwgMTI2MjAsIDY4MjYsIDczNzczLCAxMTkwNzMsIDUwNDAsIAorICAgIDAsIDAsIDk4MzQ0MywgNzg0MjAsIDAsIDUwMzksIDAsIDc4NDE4LCAwLCA1MDM4LCAwLCAwLCAxMzE4NCwgNzQyOTMsIDAsIAorICAgIDY0NjQ4LCAwLCA5MzU5LCA3ODQxNiwgMCwgMTI4NzcwLCA2NTE1NywgNjY2MiwgMCwgMCwgMzg2MywgNzM5MDksIDQ4MzUsIAorICAgIDU1MjY2LCA0MzQzMiwgMTI3ODIyLCA0MzA5LCA3MTI3LCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgMCwgNDI1ODksIDU2OSwgCisgICAgMCwgNzM4MTMsIDcxMSwgNDM4OSwgNzEzMywgMCwgNzM4ODAsIDExNjEwLCAxMTM2OCwgMCwgMTk0NTcwLCA0MTMzMSwgCisgICAgMTAwNiwgNzQyNDAsIDAsIDE1NTAsIDgyMDEsIDczNzM3LCA3NjI3LCA1NDk5LCA1MDMxLCA3NzkwOCwgNDI3MzgsIDY1Nzg0LCAKKyAgICA3NzkwNywgNjUyNjcsIDM3NTgsIDAsIDY1NzgxLCA2NDczNCwgNzAwNzMsIDI0NDAsIDY1NzgwLCA3NzkxMywgODQ0OSwgMCwgCisgICAgNTAwOCwgOTgzNTcyLCAyMTE4LCAwLCAxMjEyMSwgODI1NSwgNTUxMiwgNzM4NzUsIDIxMjgsIDIxMzAsIDIxMzEsIDIxMjYsIAorICAgIDIxMzMsIDExMTksIDEyNzA2OCwgMjExNCwgMjExNiwgMjQ1NSwgMCwgMjEyMiwgMjEyMywgMjEyNCwgMjEyNSwgMTI3NDg2LCAKKyAgICA4NzE0LCA5ODM4MjAsIDIxMTMsIDAsIDIxMTUsIDEyODE3NywgMTI3OTA3LCA0MzcxMywgNTA1MiwgNjYyMjAsIDU4MjEsIAorICAgIDYxODYsIDY1Nzc4LCA2NTc3NSwgNTA1MSwgNjU3NzMsIDE0MjksIDQyNjQ3LCA1MDUwLCAzMDIsIDM4OCwgNDExMTUsIDczNSwgCisgICAgNjYzNywgNTkwNywgNjUwODgsIDAsIDEyNzI2LCA3NDU5NCwgOTExNywgOTgzMTgxLCAxMjAwMywgNTUxMywgNjY2NiwgCisgICAgNTA1MywgNzQyMzAsIDU1MTAsIDc4NDUxLCAwLCA3ODQ0NywgMjQ3MCwgNzg0MzcsIDAsIDE5MjUsIDAsIDkyMjM3LCAKKyAgICA3NDgwNywgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgOTIzMTMsIDAsIDc0NDk3LCA5MjM5NSwgODA4OSwgNjkyOSwgNjM5LCAKKyAgICA5ODM1NjMsIDY4MTc5LCA2NDQ0MiwgMCwgOTIzNDgsIDQ1OTksIDQxNDAyLCA2Njc0LCA0MzM5NywgNDMyOTQsIDE0NzYsIAorICAgIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDQxNzgyLCA2OTUxLCA5NDAxNywgOTgzOTc2LCAzNTMwLCA5NzUwLCAxMjgzMTcsIAorICAgIDAsIDY2NTYsIDQyNjE4LCAwLCA1MDQ2LCA4NTEyLCA2NTg1NiwgNzQyNjEsIDg5NjcsIDAsIDUwNDUsIDQyMDI2LCAxOTE2LCAKKyAgICA3OTg2LCA1MDQ0LCAxMjA1NTYsIDkwMDYsIDEzMTI4LCA1MDQzLCAwLCA3ODUzLCA3NDA2OCwgNzQwMDQsIDk2NjksIAorICAgIDEyMzQxLCAxMjcwMywgODQwMiwgMCwgMTE5MDcwLCA5MTc2MDAsIDQxNzUwLCAzNTg2LCA2NDUwOCwgNDMxNDgsIDAsIDAsIAorICAgIDExOTYwNiwgNjc5ODMsIDEzMjk2LCA1MTcsIDAsIDEyODUzNCwgMTk0OTQ2LCA0MTUyOCwgMTIzLCA2NTQ1NCwgMCwgMCwgCisgICAgNzQ0NzgsIDEwNTMxLCA3Nzg0LCA0MTUyNiwgMTA4MjksIDczOTkxLCA4MDU3LCAxMTI2LCA3Mzg5NSwgMCwgMTk0NTkxLCAwLCAKKyAgICAzOTI1LCA0MjUxLCA4MDY5LCAxMDUxNywgMTIwNDM5LCA0ODksIDAsIDQyNTAsIDEyMDQ0MSwgMTIwNDUyLCA0MzE1MSwgCisgICAgOTgzMTc4LCAxOTQ4NTEsIDY2MjAwLCAwLCAwLCAwLCA3ODQyMywgMCwgMCwgODcxMSwgNjE4MywgMCwgMCwgMCwgMTIwNDQ4LCAKKyAgICA3NjIzLCAxMTg5MjUsIDExODg4OSwgOTIzNSwgMTI3NjAsIDc0MTc2LCA2OTY2MiwgNjY0NDUsIDQzNTQwLCAxMDA2MiwgCisgICAgMzc0MywgMTE1MTQsIDExMDc4LCAwLCAxMjEzNiwgMCwgMTI2NTk3LCAxMjA0MzUsIDAsIDc3MjYsIDAsIDE5OTIyLCAyNjcsIAorICAgIDMzOTMsIDQyMTk4LCAxMzcxLCAxOTQ4NDksIDY5MjMzLCAyNDU4LCAwLCA2MjAxLCAwLCA0MTA3NCwgNDI2NiwgMTA2NTIsIAorICAgIDQxNjEyLCA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgOTgzMzQ4LCAwLCAzMzkxLCA0MTA3NSwgMjQ3NiwgMCwgCisgICAgMTI4MDE3LCAwLCAxMDYyNSwgMCwgMTI3NjcsIDEzMDE3LCA3ODc0MywgNjQyNjEsIDY0OTM0LCAxMjc1MzcsIDEzMDE0LCAKKyAgICAxMzAxMywgMCwgNjY3MywgMCwgMCwgMCwgMTI0MzgsIDAsIDk4MzM0MiwgMCwgOTgzODgwLCAxMjY2MzgsIDkwNTMsIAorICAgIDEzMDE1LCA3NDUyMywgMCwgNzA0LCA2NjIxNSwgNjE5NSwgOTgzODI4LCA2NjYwLCA3ODc1OCwgOTE3NzYwLCA5MTc3OTMsIAorICAgIDQyMjEyLCAxMjYyOSwgMTE0MzUsIDAsIDU1MjU2LCA2NTUzOCwgMCwgMTI3OTQwLCA5ODMzNDEsIDc0NTQ3LCAxMjY1ODUsIAorICAgIDY1NDQ4LCA3ODEwMCwgMTI5NDgsIDExOTAwMSwgMTk1MDAyLCAxMTkyMzgsIDE5NTAwNCwgNzgwOTksIDEyNzA4NSwgMCwgCisgICAgMTI4MzIwLCA0Mjg3LCA4Mjc2LCA0OTAyLCAxMTMxLCAwLCA3ODQ1OCwgNjY3MjgsIDE4MTYsIDAsIDQyNTMzLCAxNjgsIAorICAgIDQyODQ1LCA0ODk4LCA2NDI5OCwgOTgzMTQxLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIDM2NTMsIDAsIDc5MSwgOTE2MiwgCisgICAgNjk3NywgMCwgNzg4ODksIDc0NTYxLCAwLCA3MzczMSwgODM1NCwgNDM1OTAsIDExOTMwMywgOTgzNDQ5LCA3NTU3LCAKKyAgICAxMTkzMzksIDExOTMwMSwgODIzNCwgNzI0MSwgMCwgMTIwNjcxLCAxMTkxNjcsIDE5NDk5NiwgMTI4MTEsIDY1OTI1LCAKKyAgICAzOTQ2LCA3ODA3OCwgMTA5OTgsIDc4MDgwLCA2NzMsIDE5NDg2NywgNjQzOTcsIDEyODI3NiwgNzQ1OTksIDc4NDQ5LCAKKyAgICA4ODkwLCAxOTQ5NzcsIDE5NDk3NiwgMjQ0OCwgNzgwODUsIDEwMjY3LCA4NDI0LCAyNDUyLCA3ODA4MywgMTI4ODI0LCAKKyAgICA4NzI5LCA3ODQ1NiwgMCwgNzg0NSwgOTE3OTE3LCA3MTMwMiwgNDQwOCwgNDEyMiwgNjc3MiwgMTEwMzksIDg3MjMsIAorICAgIDE5NDk5MCwgNzEzMTAsIDExOTMwMiwgNzMxLCAxMTkzMDQsIDkyMjg2LCAyNDM4LCA2NDg1NSwgMTE5MzAwLCAxMTkyOTksIAorICAgIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgMjExOSwgMTE0NTcsIDExNTIxLCA3NzIzLCAwLCAwLCAwLCA0MTk1MiwgMCwgCisgICAgNTI3MywgMjEyNywgNTI2OSwgNjMzNywgNTIwMiwgMjQwNCwgNTI2NywgNDI4MjMsIDExMjkxLCAxOTkxNSwgNTI3NywgCisgICAgMTI5NjMsIDEyNzg2NCwgNjE4OSwgNDEyNSwgMTMxNCwgMTIxMzMsIDEyMDM0MCwgMTE4ODczLCAxMjcxLCA5ODM2NDAsIDAsIAorICAgIDY2MDI0LCA0MTQ4MiwgMzg2NCwgNzQ1MzksIDAsIDM4NzksIDAsIDEyOTc4LCA0MTY2LCA0NTc0LCAwLCA3NTY3LCA3NDU5LCAKKyAgICA5ODMxNjAsIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIDkyNTQ4LCA1NzU5LCA5ODM5MTIsIDAsIDQxMzg4LCA2NDQ0NiwgCisgICAgNDEzOTIsIDY0Mjg4LCA0MTM4NywgMCwgODcwNiwgNTU1MiwgOTgzMTg3LCA3MDAsIDAsIDU1NTMsIDAsIDcwODgsIDUzNTYsIAorICAgIDc0OTksIDY4MDA3LCA2NjU5NiwgNzQwNjYsIDAsIDEwMjYzLCA1NTU0LCAwLCAxMjM0NCwgMTAzMTEsIDc4MTEzLCA2NjY1LCAKKyAgICA5MjYyNiwgMCwgNzYxOCwgODUxNywgMTE0NTUsIDc4NDQwLCA2NDYzMiwgNjQ0NDcsIDU1NTUsIDc4MDg4LCA3ODA5MywgCisgICAgNzgwOTEsIDAsIDQyODAzLCA2NTAzMywgOTE0MywgNjY2OCwgMTk1MDY3LCA2Nzk5NSwgMTk1MDY5LCA2NTYsIDE5NTA3MSwgCisgICAgNjUwMzcsIDQ1NzcsIDY0NjI0LCAwLCAwLCAwLCA5ODM2NDksIDQyNjksIDczODg1LCA5MTc3NzUsIDQyODQ2LCA2OTY0NCwgCisgICAgOTUwLCAwLCA5MjI3MywgNjY1ODAsIDExODg5NSwgNjY2ODMsIDEwNTU0LCA5MTc3NzgsIDExOTEyMSwgMCwgNTA5OCwgCisgICAgOTE3NzcwLCAwLCAxMTkwOTksIDUwOTcsIDQ5MzUsIDk4NDgsIDEwMzgxLCAwLCAxMjg4NzAsIDk4MzcwMSwgMzY1MSwgMCwgCisgICAgMTIwNzMwLCAxMjc1NTYsIDUxMDIsIDUxMDEsIDEwMjY5LCAxMjk4MywgODEzOCwgNDUxNywgMTkzMiwgNTEwMCwgMTQzOSwgCisgICAgMTIwOTMsIDEyNDcsIDEwMDM0LCAxOTUwNjQsIDUwOTksIDc4MzczLCAxNDQxLCA0MjA4NywgMzA2MywgNjUwLCAwLCA3ODM4LCAKKyAgICAwLCAxOTUwNDEsIDE5NTA0MCwgMTE5MTQyLCA5MDMxLCAxMjA3OTAsIDEyODU4MiwgOTA3OCwgODU0NSwgNjYzNTYsIAorICAgIDEyODc5OSwgMCwgOTE1NCwgOTExOCwgMTI2NTQzLCAwLCAyNjc2LCAyMjc3LCAwLCA3MzgxMiwgNjE5MCwgODU5OSwgCisgICAgMTk1MDUzLCA2OTkxOCwgMTA3OTUsIDk4NTcsIDcwMTQsIDk4NTYsIDE5NTAzMywgOTI2MjAsIDEyMTI5LCAwLCA4NDgxLCAwLCAKKyAgICA2MjAyLCAxOTUwMzUsIDEwOTIwLCAxMjgyMzcsIDUyMDMsIDE5NTAzOSwgMTk1MDM4LCA1MTA4LCA1MTA3LCA2NTgxOCwgCisgICAgNjYwMTksIDk3NjIsIDAsIDU1NDEsIDc0NzcyLCAwLCAxMjYxMywgNTI4NCwgNjY1NywgMjA3LCAxMjg4MDYsIDQyNzUsIAorICAgIDc0ODE5LCA4NTQsIDY4MTQ3LCA3NDM4MSwgMCwgNzg3ODYsIDUxMDMsIDEyNzg2MSwgNjQzNDgsIDQxMzY4LCA0Mzk3NCwgCisgICAgNDg4LCA2OTgxMSwgMCwgNzEzMzksIDEwMTU3LCAwLCA0MzAzNCwgMTE0MzgsIDY0Njc0LCAwLCA5MjY5NCwgNjg0MzEsIAorICAgIDQxNzcxLCA1MTA2LCA2NjY5LCA4NTA0LCA2NTE1NCwgNjk4MTMsIDQxMzY3LCA1MTA1LCAxMjc1MDksIDY5NzIwLCA2NDc2LCAKKyAgICA1MTA0LCA5ODM3NDksIDMwNCwgMzE3NiwgMTE5MDEwLCAwLCA5MzIsIDEyMDYzMywgNjU2NywgMjM4LCA2OTY1NiwgCisgICAgMTk1MDExLCAxOTQ1OTUsIDE5OTA1LCAxMjA1NzcsIDE5NTAxNSwgNzg4NzAsIDQxMDQ0LCA2NzY0MCwgMTk0OTAyLCAKKyAgICA0MjA1NSwgOTkxMiwgNjU5MzksIDEwNjcwLCA3NDA5MywgMTMyNzMsIDAsIDEyNTUyLCAxOTUwMTksIDg4MDMsIDMwOSwgCisgICAgNjYyMiwgODE1MSwgMTA4NTgsIDc4NzA2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIDEyNTUzLCAxMDgxNCwgNDMyNzUsIDY5NTAsIAorICAgIDk3MTIsIDY4NjgwLCA0Mzk3MCwgOTgzMTk4LCA2NTE2NSwgOTI3MjUsIDAsIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgCisgICAgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDQzNzYzLCAwLCA0MTc1NCwgNjc2MzUsIDkzNzAsIDI3MjAsIDE5NDk3NSwgCisgICAgNjg0NjIsIDgyMzIsIDExODgxNywgMCwgMzIyMiwgMCwgMCwgMCwgNjY2NjMsIDAsIDAsIDEwODM0LCAwLCAwLCA2NTczMiwgCisgICAgOTQwOTUsIDkxNzU0NywgOTI2ODIsIDY3Njc5LCAxOTUwMjAsIDAsIDc3ODEsIDQxMzgzLCA2NDU2OCwgMCwgMTIwNzM4LCAKKyAgICAxMjA3NywgMCwgNjQ1ODYsIDkxNzYyMCwgNDIzOTYsIDU1MjU1LCAzNDc1LCAxMjgwMzUsIDI0NzksIDAsIDM2MzIsIAorICAgIDEyMDcyOCwgMTA2OTgsIDgzNzYsIDM2NDgsIDE5NDk2MCwgNzQ4NDQsIDY3NjM5LCAzNjM2LCA2Nzg5NCwgMzY1MCwgODgzNywgCisgICAgNjUyMjksIDE4NDMsIDQyMjgzLCA0MzI1MCwgNDE1NjIsIDkxMDAsIDc0NTQ4LCA5MTc2MzAsIDM2NDAsIDEyNzE5MCwgCisgICAgNDIzMjEsIDcyODQsIDE5NDk3NCwgMTk0OTczLCAxOTQ5NTAsIDE5NDk0OSwgMTk0OTUyLCAxOTQ5NTEsIDEyNjY0OSwgCisgICAgMTk0OTUzLCA0MjA4MCwgMjUyOSwgMCwgMCwgMCwgNDIwODMsIDEyMDY3OCwgNjgzOTgsIDE5NDk1NywgNjc2MTksIDY2MzY3LCAKKyAgICAxOTQ5NTgsIDk2MzQsIDkyMzgwLCA5OTg4LCAwLCA0MTA2OCwgMCwgNDI5NSwgNjUyNjQsIDY4MDA2LCAwLCA5MjU0NSwgMCwgCisgICAgNzg1LCA4MjM2LCAxMjg2NDcsIDkwMjcsIDY4MTYwLCA2NzYyMywgNjQzODMsIDEyMDI2NSwgOTI1LCAxMjcxNTYsIDAsIAorICAgIDQxOTg1LCA0MTA3MSwgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIDAsIDkxODYsIDIwNjcsIDQwMTYsIDk4MzgwMywgMCwgCisgICAgMzgxLCAxMjkzNiwgMCwgNDIwNzcsIDAsIDY5ODgwLCA1MTg0LCA0MjA3OCwgMTk0OTQ3LCAxMDgxMCwgMTI4NTMxLCA0NTg1LCAKKyAgICAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIDgxMiwgMzYxNSwgMCwgNTE3OCwgNDQwMDAsIDEyMDU0OCwgNzg4MDcsIDUxODgsIAorICAgIDc0Mjg3LCA2NzYyOSwgMzYwNSwgMTA2OTIsIDExNjYsIDY0NDI5LCA0MjYzOSwgOTI0LCAwLCA2NzYzMSwgNDI2MTYsIAorICAgIDEyMDY3MCwgMjQ0MiwgMTA3MDMsIDc4Nzg5LCA2NzYzMiwgOTE3OTI0LCAxMjc3MSwgMTI3MzYsIDEyNzUzLCA2NjcwOCwgCisgICAgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgNjk4NzIsIDEyNzM3MywgNDIyODgsIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgCisgICAgMTk0OTYzLCAyNDY4LCA2NjcwNiwgNDEyOTQsIDM2MjYsIDM4ODMsIDY0Mzg4LCA0MjQ3OSwgMCwgNDExMTcsIDAsIDkyNTgwLCAKKyAgICAwLCAwLCA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIDI3MTUsIDgwNiwgNjUyMDgsIDQxODg0LCA5MTc4ODMsIDEzMTgsIAorICAgIDY0NzMxLCAxMjY1NzgsIDAsIDAsIDY2MzI1LCAzNDY1LCAyNDA1LCA5MjQwLCAwLCAxMjc1NiwgNjUyNTksIDAsIDk4Mzc4MSwgCisgICAgMTI3NTIsIDU4MzMsIDE0MzIsIDAsIDQxODgzLCA3MzkxMiwgOTc5OSwgMCwgNDE4ODYsIDI0ODAsIDAsIDIwNjIsIAorICAgIDEyNzI5MywgNjQ5NCwgNTUzNywgNzg2NTYsIDAsIDE5NDU4NywgMCwgMTIxMSwgMCwgMCwgMCwgMTE4ODMyLCAxMjMxOCwgMCwgCisgICAgMCwgNjgwMDUsIDEwNjIyLCA5ODM3NzksIDAsIDc4NjU0LCA2NTY2LCA3ODY1OSwgMCwgNzM3ODAsIDExOTE5NiwgNjQ4NjQsIAorICAgIDAsIDc4NjYwLCAwLCA4Mjg0LCAxMzA4MSwgMCwgMzU4OSwgNDIwNTEsIDQwMzUsIDY0OTIsIDkyMjM2LCA0MjY1LCA2NjQyLCAKKyAgICAzOTc3LCA3NDE4NiwgNDE3NzgsIDgzNiwgMTE5MjE2LCAyNDg4LCAwLCA0NTgyLCAwLCAwLCA0MTc3NywgMTI5MjYsIAorICAgIDk4MzM3NywgNzUyOCwgMTA1NTAsIDAsIDkyNzA2LCAwLCAxMDk2MSwgMCwgMTM3NCwgNjQ4NzgsIDExOTAxNCwgMCwgCisgICAgNDIzODksIDQxMzc0LCAyMjg2LCAwLCA3ODQ5MiwgNDEzNzcsIDEyNzkwOSwgMCwgNDAwLCAxMjU5NywgMTIwNTg2LCAwLCAwLCAKKyAgICA2NjYxLCA5ODMxNDUsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAwLCA3MTMwMSwgOTgzODYyLCAzNDczLCA3NzE4LCAwLCAwLCAKKyAgICAwLCA1NTI4NSwgMCwgMCwgMCwgMTE5NjksIDk4MzM5MCwgMTI3ODQxLCA2MzY1LCAxODg3LCA2NzYzLCA5ODMzNzAsIDgwODAsIAorICAgIDcwMDYsIDAsIDk4MzM3MSwgNjc1NywgNjQzNTEsIDE1NDQsIDAsIDY3NjYsIDY0Njc3LCAxMjA3MTYsIDk4MzM3MiwgNjE0NiwgCisgICAgMCwgNzcxLCA5ODMzNzMsIDAsIDEyODEyLCAxMzE2OCwgNDIyNzIsIDEyMjAwLCA5MTc5MjcsIDc5MDQsIDAsIDk1MywgCisgICAgMTI5MTcsIDExOTU2MCwgMTIzMDAsIDAsIDExNDkxLCA5NzI0LCAxMDM0MSwgOTgzNzczLCA5NTI0LCA3NDkwLCAxMTM4OSwgCisgICAgNzQ4OSwgMzM3OSwgMCwgNzQ4NywgMCwgNDcxLCA3NDg0LCA3NDgyLCA2NzUzLCA3NDgwLCA1NzY0LCA3NDc4LCA3NDc3LCAKKyAgICA2NTAxLCA3NDc1LCA2OTE4LCA3NDczLCA3NDcyLCAyNDc0LCA3NDcwLCA3NDY4LCAxMDIzMiwgMTA2MTUsIDEwMjEzLCAKKyAgICAxMjcyODgsIDkyMzU3LCAxMDA0OSwgMTE4MzQsIDM1NDQsIDAsIDYwMTcsIDY1MzExLCAxMjc0ODEsIDEyMDIxNiwgMTMzMDYsIAorICAgIDEwNTMzLCA3ODcwLCA3Mzk0OSwgNzYyNSwgMCwgMTIwNTQ0LCAwLCAwLCA5MjY2MCwgMCwgMCwgMCwgMTk5NjEsIDI0NzIsIAorICAgIDQyNjY1LCA5MjM0MSwgMCwgMjEzOSwgNDI1NiwgMTIwNzc2LCA3NDM4MCwgMCwgNDI2NzUsIDQyNjU4LCAxMjg0NSwgMCwgMCwgCisgICAgNjUxMzgsIDExOTM1NSwgNjc4NjIsIDAsIDY1NjcxLCA3MDgzLCAxMjAwMDgsIDgwNjYsIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAKKyAgICAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIDQ0NSwgMTIwNTY2LCAxMjgzMDgsIDAsIDAsIDgzMzAsIDAsIDAsIDQyNzk3LCAKKyAgICA5ODMxNTAsIDEyMDIxNSwgMCwgMzkwMiwgMCwgMTc3MCwgMCwgMTI4ODY2LCAxNTYwLCAxMjAyMDksIDE5NDk3MiwgNDU4NCwgCisgICAgNzM4NDMsIDAsIDExNzEyLCAxMDg2NiwgMTE4OTI4LCAxMTE4LCA3MTMzNCwgMCwgMCwgMTA4MSwgNzQzNiwgNjg0MjAsIAorICAgIDcyNTIsIDAsIDU5OTYsIDY5OTIxLCA0OTAzLCAwLCA0MTM4NiwgNTE2MiwgMTE5MTg5LCAxMzMwLCAwLCA3MTM5LCAwLCAKKyAgICAxMjA0NywgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIDYzMjQsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAxMjE4NiwgCisgICAgMCwgMCwgOTgzNzQxLCAxMjcxNSwgNjgwMDIsIDk4MzQ3OSwgMTI2NjMwLCAyMDE4LCA2NjY3MiwgNDE5NzksIDY2Njg1LCAKKyAgICAxMTkxNTcsIDY4MDAwLCA5MjQ2NCwgMCwgMTI2OTg0LCA2ODAwMSwgOTMzNCwgOTI3MDUsIDkyMzE1LCA3MDEwMSwgNzk3NSwgCisgICAgMCwgNzc5NTcsIDAsIDY2NjIxLCA0ODg0LCA2NjU5NywgNjk3MzIsIDAsIDAsIDYzMTMsIDY1NTEzLCA2OTg1NywgMCwgMCwgCisgICAgMCwgMjM0NSwgNDM2OTcsIDQ2MywgMCwgMCwgMTE5NjA3LCAzMTE3LCA1NDYwLCAwLCAwLCA5ODMzODcsIDAsIDQyMjc5LCAKKyAgICAxOTQ1NzcsIDAsIDc4NDE1LCAwLCAxOTUwMDgsIDk4MzM4NCwgMTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NjMsIDAsIDAsIAorICAgIDAsIDAsIDI0ODIsIDE0NzEsIDAsIDAsIDQyMjQ3LCAxMjM3OCwgNzM5MjUsIDY5NjY0LCAwLCAxMjM3NCwgMCwgMCwgMCwgCisgICAgOTgzNjk0LCAyNDYwLCAwLCAxMTk0NCwgMTIzNzYsIDEyNzg2OCwgNjQ2NzksIDAsIDEyMzgwLCAxMDU1NywgNjQ0NzMsIAorICAgIDU4NzAsIDAsIDIwMjQsIDEyNzE4MCwgMCwgMCwgNTM5LCAwLCAxMjc3NjUsIDk0MDUyLCAzODUzLCA2NTE4MCwgMTI3OTIzLCAKKyAgICAxMjA3OTYsIDEyMDI0NSwgOTIzMjQsIDAsIDg2NTksIDAsIDEyNDc0LCA5MjU3OSwgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCAKKyAgICA0MTYyLCAwLCA0MjYwLCAxMjk1MywgNjk2MzMsIDEyMDA4OSwgMTI0NzAsIDAsIDc0MTg5LCAyNzQyLCAxMjQ3NiwgMTE3OTgsIAorICAgIDEwOTQ2LCAxMjczMTAsIDUwMDAsIDAsIDk4MzU3OSwgMCwgNjk2NzIsIDgyMTMsIDc0MDE3LCA3NzcxLCA2MTYxLCA2ODAxOCwgCisgICAgNjcwOSwgMCwgNzg4ODUsIDk4MzcwOCwgMTI3OTcxLCAxMjA1ODIsIDc4NTQ3LCAwLCAxMDMwMSwgMTAzMzMsIDEwMzk3LCAwLCAKKyAgICAwLCA3Mzc5MSwgMCwgMCwgMCwgMCwgMTE5MTIzLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAxMjcyOTAsIDgyNzUsIAorICAgIDM4OTMsIDk4MzI2NCwgMCwgMTIyMTAsIDcyMjEsIDQyMTQ3LCAwLCA3NDU1MCwgNzQ0NjUsIDY0NzQ3LCAxMTg4NDEsIDAsIAorICAgIDEyNTE2LCA0NDQ0LCAwLCA5MjI3MSwgNzQ1MzcsIDEwODkyLCA4MjMxLCAwLCA2NDczLCA0MTk2OCwgNzgzODgsIDQxOTczLCAKKyAgICAzNTkxLCA0MTk2OSwgMCwgMjQ1MywgMTI4NTQ5LCA5MjY2NiwgNjQ3MDUsIDAsIDAsIDEwMzQ5LCAxMDQxMywgNDM1OTEsIAorICAgIDQxOTYyLCAzMjAyLCA3NDM1MywgMCwgODMxNiwgMCwgMCwgOTQwNjAsIDY4NywgMCwgMCwgMCwgMTg0MCwgMCwgNjg2NzEsIAorICAgIDExOTgwOSwgNDg4MywgMjg1LCA0NzIzLCA3MDA5OSwgOTI2OTIsIDQ0NTksIDc0NTc3LCA0MjkyMSwgNDE3MjAsIDExMDg5LCAKKyAgICAyNDAsIDE5OTA2LCAwLCA0MjMyMywgMCwgOTc0MywgMTIwMjMyLCAxMzEzNCwgMTI2NTM1LCAwLCAwLCAwLCAwLCA0MjYzNCwgCisgICAgOTgzMzQzLCA0MzQzNywgMzA4MSwgMTE0NjMsIDEyMDE1NCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAKKyAgICAxMTkwMjMsIDE3MjksIDAsIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDY1MTk0LCA2NjIwMSwgMCwgCisgICAgNjY1NzgsIDUwMDEsIDQxODc5LCA3NDQyNywgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIAorICAgIDczODg5LCA3NDE4MiwgMTI3OTE1LCA2NDMsIDMwODYsIDAsIDQyNDQ4LCA0MjI5OSwgNTgsIDAsIDkxNzk1MiwgMTIwMDgzLCAKKyAgICA2Mzg3MywgODQ5MSwgMCwgMCwgOTgzNjIzLCA0NTMwLCA0MjQwOSwgNzEyNiwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIAorICAgIDExOTA5NiwgMTk5MjksIDAsIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAxMjA1MzAsIDY2MTc5LCA0MjQxMiwgCisgICAgNjU5NDEsIDEzMTE0LCA2NDUyMiwgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgNDQzNywgNzM5NDgsIDEyNzA3NCwgCisgICAgOTgzMjM4LCA1NTI4MCwgNDIxNzQsIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIAorICAgIDY4NDMyLCA5MjU4NiwgMCwgNjY2NjcsIDEyNzMwOSwgMCwgMTI2NTIxLCA0MjIwMCwgNDI1NjYsIDAsIDAsIDUwODgsIAorICAgIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAwLCAwLCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgCisgICAgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCA3Nzk5OSwgCisgICAgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCA2Mzg5NiwgCisgICAgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgMTIzNzcsIDk4MzgzMiwgOTgzODM0LCA2ODQ0OSwgNzQ2MSwgNzM5MDEsIAorICAgIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIDAsIDEyMzc5LCAxOTQ4NzcsIAorICAgIDEyMDgxOCwgNDE5NjQsIDQyMjA4LCA2Mzg0MywgMjA4NCwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCA2Mzg0MCwgCisgICAgNzg1NDksIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIAorICAgIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIAorICAgIDYzOTAxLCAwLCAzNjU3LCAxMjg1NzIsIDY1MjAyLCA2MDAwLCAxMTkyMDYsIDEyNDI2LCAxMjcxODEsIDAsIDQxNzQwLCAKKyAgICAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIDEyNDI5LCA2NzI3LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCAKKyAgICA0MTc1NSwgNjc2LCAwLCA2NjcwNCwgNjY2NjQsIDk5NzgsIDY2NDkxLCAzNTM2LCAwLCA5NzUyLCA5MjM5NywgNjE2MiwgMCwgCisgICAgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIAorICAgIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgCisgICAgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgCisgICAgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIAorICAgIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIDc4NTA0LCA2NzA0LCA0NTkxLCAxMjgwMjksIDAsIDAsIDk2ODAsIDAsIAorICAgIDEyMDYyMywgNTYxLCAxMjE1OSwgMTk1LCA3ODUwOCwgNDE1MDEsIDAsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgCisgICAgMCwgNDE0OTksIDAsIDAsIDQyMjQyLCA0MTQ5OCwgOTE3Nzk0LCA0MjAyNSwgNzg1NjUsIDY1ODA1LCA0MjQ2MywgMCwgCisgICAgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAxMTkyMTMsIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAKKyAgICAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgNDIwODYsIDEyNjYxNSwgMjIxOSwgMCwgMCwgMTI4ODAxLCAxOTQ4MzcsIDAsIAorICAgIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCA5MTc3NzYsIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgCisgICAgMTI0MzEsIDg2NjgsIDEyNDM0LCA5ODM4MzUsIDkxNzc4MiwgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIAorICAgIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIDEyODAxNCwgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgCisgICAgOTI3LCAwLCAwLCAxMjQzNiwgOTgzMjQ1LCA0MjAyMSwgMCwgMCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgCisgICAgMTk1MDE2LCAwLCA3ODE5NywgMTEzNDgsIDAsIDc4MDM3LCA5MTk0LCA5ODMxODQsIDAsIDE5OTE0LCAxMjE3OSwgOTgzODEyLCAKKyAgICAyMjk2LCAxOTQ5MjMsIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCAKKyAgICA2NDY1MSwgMCwgNDE1MDMsIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAKKyAgICAwLCAxMjg1MDgsIDEyNDE2LCA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIAorICAgIDM4ODIsIDg1MzIsIDkxNzc3MSwgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIAorICAgIDY1MzQzLCAxMjY0OTEsIDEyNDE0LCA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAxMTk4NDYsIAorICAgIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIDExNzI0LCAwLCAwLCAxMjcxMDQsIAorICAgIDEyNjYxOSwgMCwgMCwgODAyNywgMTA5OTcsIDkxNzEsIDEyNzQxLCAxMTQwMCwgNzEzMDUsIDE5NDc5OSwgMCwgMTI4MjM5LCAKKyAgICAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIAorICAgIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIDY4NjUxLCAwLCA5ODM4OTUsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIAorICAgIDMwMDcsIDE0NDgsIDMwMTgsIDE5NDgwOSwgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCAxMjAxODQsIDg1MTksIAorICAgIDk4MzI0MSwgMzAxNCwgNTA4MSwgNjU4NTMsIDEyMDcxNSwgMCwgNjgwMTQsIDY5OTUxLCA1MDc5LCA2NDgwMiwgNDIyMTAsIAorICAgIDQ1OTcsIDY1NTMyLCAxMTgyOCwgMTIwMTg1LCAxMjM3MSwgMCwgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAKKyAgICAxMjAxODgsIDcxMzAzLCA5ODM5MzMsIDEyMzY3LCA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgMTIwMzcsIAorICAgIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAxMDY0OSwgCisgICAgNjc5ODEsIDUwNzcsIDEyMDE3NCwgMTA4ODAsIDYzOTI3LCA1MDc1LCA5MTc4ODEsIDAsIDY1MDc1LCAwLCAxMTAwNywgCisgICAgOTgzNzA1LCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIAorICAgIDUyNzIsIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgCisgICAgOTgwMywgMCwgNDUwNCwgMTUwNSwgMCwgNjMyNSwgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCAKKyAgICA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCAKKyAgICA4OTQ4LCA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgNzEzMTEsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgCisgICAgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgOTQxMDQsIDc4NTcxLCAwLCA3MTMyOCwgMTk0NTYyLCA0MTU3NiwgCisgICAgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCAKKyAgICA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgCisgICAgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAxMTc0MiwgMjQxOSwgMCwgMTE0OTMsIDEyMzM0LCAxOTQ5MTMsIDQxNTMsIAorICAgIDEyMzAyLCAxMDc5MywgNTI1MCwgMTI0MDcsIDExOTc4LCA0NDA0LCA5MTg5LCAxMjQwMSwgNDIwMDcsIDU3NzUsIDY3NTksIAorICAgIDY1ODA2LCA0Mzk5NywgMCwgNDIwMDIsIDEyNDA0LCA5ODM1NTMsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgCisgICAgNDk4MywgMTIwNTA3LCA4NjEsIDAsIDAsIDAsIDAsIDQzNzU3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIAorICAgIDY2MzEsIDAsIDEyODE2LCA0Mzc1OSwgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCAKKyAgICA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAwLCA5ODM4ODQsIDg1MywgNDI2OTMsIDE5NTAxNCwgMCwgOTgzNjQ3LCA1MDE2LCAKKyAgICA0MzUzNSwgNjM4OTMsIDQyODM1LCA5NDkxLCA5MTc5MTMsIDAsIDkxNzkxNCwgMCwgMTI3MTIsIDcxMDUsIDEyNzgwNywgCisgICAgNjUwNjAsIDEyMDc5NywgOTkwMCwgNzc1MCwgMCwgMTk0OTE5LCAwLCAxMjc4MzAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIAorICAgIDEyODE1MSwgMTIxNzcsIDAsIDAsIDAsIDc3ODI0LCAwLCA0OTAwLCAxMjc4NzQsIDEyODc4LCA5MjYzMCwgODk4NCwgNDExOSwgCisgICAgNzQ3NjgsIDg5NzEsIDc4NTkzLCA0MzExMywgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgCisgICAgNzQxODUsIDkyNDgxLCA5MjcxMCwgMTIzOTcsIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAKKyAgICAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgNTAxMCwgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCAKKyAgICA3MjY3LCAwLCA3NDgzMywgMTI4MTgxLCA1OTkzLCAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCAKKyAgICA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCA2Mzk5NywgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCA2OTkyOSwgCisgICAgMTI1ODksIDQxNDc5LCAxMjgzMTMsIDAsIDQzMzM5LCA3Mzc3NiwgOTgzNiwgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIAorICAgIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgODE3LCAxNjY0LCAxODUwLCAxMjg4NDEsIDMwNzksIDExMzQwLCA0MjQwOCwgCisgICAgNDI0NDcsIDEyNzE0MCwgMTIwMDIwLCA0MjMwNywgMTIzODYsIDQyMzA0LCA5MTc1NTUsIDAsIDEyMzg5LCAwLCA5MjM2NiwgCisgICAgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgMTE0NywgNjM5OTIsIDQyODg3LCAxOTg3LCA5MjcxOCwgNTQ4MCwgNzg1OCwgCisgICAgMTE2NTMsIDQxMTYsIDEyMzkxLCA2NjE5MywgMCwgNDkzOSwgMTIzODQsIDAsIDAsIDQxNjg2LCA2MzkwNSwgMTE5NjAxLCAKKyAgICAxOTQ2ODgsIDk4MzE5MCwgMCwgMTI2NDksIDAsIDAsIDgyNDcsIDUwNywgOTEsIDIwNDIsIDEyMDc3NSwgNDM2NDMsIAorICAgIDE5NDY4OSwgNjYwMjgsIDEwMDM2LCA0MTg0NCwgMTE5ODEzLCA3NzQsIDExOTgyOSwgMCwgMTE5ODE1LCA1OTk0LCAxMjUzOSwgCisgICAgMCwgNzgzNzUsIDEyMDU5NywgMTE5ODMzLCA5ODMxMDUsIDExOTYwMCwgMCwgMCwgNzcxOSwgNjAyNiwgMjQ4NiwgMTI4MzEyLCAKKyAgICAxMTk4MDgsIDE2MiwgMCwgNjUyMTksIDQxMDczLCA5Njg3LCA0MTY4MSwgNjMwNCwgMTE5ODEyLCA2NjE5NiwgMTk0ODgxLCAKKyAgICA1MjYyLCAwLCA1NTIzMywgMTI2ODEsIDQyMzc5LCAwLCA3NTM0LCAxMjIxOSwgMCwgMTI3NTI4LCA0MjgxMCwgMTA0OTIsIDAsIAorICAgIDk4MzY2MSwgMCwgNDMxMTksIDAsIDEyMDc1MywgMTI0MDMsIDI1MDAsIDE5NTAxMywgMCwgNDg5OSwgMTI3MjksIDAsIDAsIAorICAgIDc0MTEzLCAyMzQzLCA0MTAzLCAxOTk0NiwgNzQxMTIsIDc3ODUxLCAxMzExMiwgMCwgMTk1MDEyLCAxMjg1OSwgNzAwODcsIAorICAgIDEyMDE0OCwgNjYzNjksIDU4NjEsIDEyNzc1OCwgMTE5OTksIDEyNDAwLCAwLCA5ODM4MzksIDEyNjQ1LCA1MTQ2LCAxMTMyMCwgCisgICAgNjg0MTAsIDY3NDgsIDY1MDQwLCAwLCA2NDE4NCwgMTI5NzQsIDY0MTgzLCA2NzYxMywgMTIwNjQ1LCA1MTQ3LCAwLCAwLCAKKyAgICA3NDUyNCwgMCwgMTkyOCwgMCwgNjc2NDksIDU5OTEsIDM0NDUsIDY3NjA5LCA0OTc2LCA2NDE3NiwgMCwgNjc2MTAsIDgyNDEsIAorICAgIDAsIDc3ODY4LCA0MjA2LCAwLCAwLCAwLCAxMjgyOTgsIDAsIDEwMTM4LCAwLCAwLCA4ODk3LCAxMjAyMzQsIDAsIDgzNTcsIAorICAgIDQxMjQsIDc3ODYyLCA2NTgzNiwgMTIwNjQxLCAxMjc5MjYsIDc3ODU5LCAwLCAwLCAxMTIzLCA5NjMsIDQxNTUzLCAxMDEyMCwgCisgICAgMTI0MDUsIDEyMDE1MCwgOTI2NjQsIDM5OCwgMTMyNzgsIDk3MjMsIDYzNjYsIDEyMDMxMSwgNzk0NSwgMCwgNDQwMiwgCisgICAgOTk3MCwgMTI0MDIsIDk4MzEzNiwgNDIzOTIsIDEzMDUsIDEyNDA4LCAwLCA0NDAwNywgMCwgMCwgNDE0NjQsIDEyNDExLCAKKyAgICAxMjk2OSwgMTIwODI0LCA0MTQ2NSwgOTgzNTY1LCA4NTI4LCAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgCisgICAgMTE5MTYzLCAwLCA5MDkzLCAwLCA5MTQ3LCAxMjg3ODcsIDYzOTU4LCAwLCA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgODI5NiwgCisgICAgNjc1MCwgMTk1MDE4LCAwLCA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAxOTQ3MDMsIDE5NTAyMywgNTgwNSwgMCwgCisgICAgNjcyNiwgMCwgNDIxNzYsIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMjI4MCwgMCwgMTIzNzIsIDEyMDY0MiwgCisgICAgMTIwMzA3LCAwLCA5MjM0MywgMCwgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgCisgICAgMTk0NzAxLCAxMDgwMywgNDEzMiwgMTIwMzA2LCA2ODQ3NCwgOTI0NzMsIDAsIDk4MzMxMywgNzQ4MzcsIDEyMDE1NSwgCisgICAgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIDYzOTY1LCAwLCA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCAKKyAgICA2Mzk2OSwgMTE3ODEsIDQyNzE4LCA4Nzg4LCAxMzU3LCA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgCisgICAgMTIwMTcyLCAwLCAxOTMzLCA2OTY1NSwgOTU2NCwgMCwgOTI0MzUsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgCisgICAgMTgwNCwgMzMxMSwgNjc2MTUsIDcwMDgxLCA3ODMwMiwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIDEyNzQ3NSwgMCwgNjgyMDAsIAorICAgIDY2NzUsIDEyODE0NCwgMCwgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCA1MTAsIAorICAgIDY0NjYzLCAwLCAwLCA0NTYxLCAyMTAxLCAxMzk4LCAwLCA5MjU1NCwgNzQwMzQsIDQxNTY5LCA5MjY4NCwgMTE0MDYsIAorICAgIDgxNjcsIDEyMTI3LCAwLCA4NDAsIDAsIDEyNjUxOCwgNzEwMSwgNjk2NywgMCwgMTk0ODk4LCA5Nzk2LCAwLCAzMzMsIAorICAgIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCA5ODM1OTUsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAKKyAgICAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgCisgICAgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIDk0MDk3LCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCAKKyAgICA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAKKyAgICAxMjA3MDQsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgMCwgMTk0OCwgNjk4NDEsIDAsIDk1MiwgMTI4MjM1LCAwLCAwLCAxMjA4MDIsIAorICAgIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCA2NDE3MCwgMCwgMCwgMzQzNiwgCisgICAgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIDY2NzYsIDM5MzAsIDQyNjE1LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIAorICAgIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgCisgICAgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgCisgICAgNjY3MiwgMCwgMCwgMCwgOTgzNzQ3LCA2Mzg0MSwgOTYxMywgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgCisgICAgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIDY0OTU3LCAxMTI4MSwgMCwgMzgwNywgMTQ2OSwgNjY2NDAsIAorICAgIDY1MzgxLCA0MjE5NywgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIDkwNCwgMzUyLCA0MjIyNSwgMTQ1MSwgODA2MSwgODQ1MywgCisgICAgNDEzNCwgMCwgNzQ4NDcsIDY2NTc2LCAxMjc5MTYsIDAsIDEwNTIwLCA4NTc1LCA5OTYwLCAxMjAxLCAxMjcyODksIDEyODQ2LCAKKyAgICAxMjcyOTEsIDEyNzI5MiwgMTE5MTksIDY0OTYyLCAxMjcyODcsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgCisgICAgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCAKKyAgICA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIAorICAgIDk4MjEsIDY0MzA0LCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgNjgzNjYsIDY0NDEwLCA5MjMwNSwgMCwgNDMyMywgMTIwMDYyLCAKKyAgICA5MjY2OSwgNzEzMzIsIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCAKKyAgICA1MjYwLCA0MzE0MywgOTQwMzgsIDMyNiwgMTIwMTMxLCA2ODQyMywgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgCisgICAgMTk0OTI0LCA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIAorICAgIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAxMjY0OTAsIDE5NDg4NSwgNDMxNDQsIDQxMjMsIAorICAgIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgMTA3NjUsIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIAorICAgIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCA2NDAyMCwgMTI2NjA0LCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgCisgICAgMTE1MjgsIDY0MDI0LCAxMjgwNzIsIDY3OSwgNjQwMTMsIDAsIDU4NTAsIDc1OCwgNzUzNiwgMCwgOTIyMzQsIDQxNDQxLCAKKyAgICAxMDY5MywgNjQwMDYsIDk4MzU2NywgNjQwMDUsIDQwNTgsIDExOTAxOSwgMTI2NDg3LCA2NDY2MCwgMCwgMTE5MDUwLCAwLCAKKyAgICA5ODMwNjksIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIDg5NzAsIDAsIDk5MzQsIDk4MzA5NCwgMTA3NzQsIDEyODAyMCwgCisgICAgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIDMwNTcsIDY0MDQ2LCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAwLCAwLCAKKyAgICAxOTQ4OTksIDkyMzIyLCA3NjQ1LCAxMjg1NCwgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMTI3Nzk1LCAKKyAgICA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAxMzMwOSwgMTE1NzAsIDEyNzgxMSwgMTk5NjAsIDExNjk2LCAwLCAKKyAgICAxMDE4LCAxMTg5NzAsIDE5NDkwOSwgMTk0ODk3LCAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgCisgICAgMCwgMCwgNzM4MTQsIDExNDEyLCA2NzY4LCAxMDcyOCwgMTk0ODMwLCA3MTMxNiwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIAorICAgIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIDAsIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIAorICAgIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIAorICAgIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIDAsIDY5Njk1LCA0MjI0MCwgMCwgMTI2NjUxLCA0Mjg2NCwgCisgICAgMTI2NDk4LCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDk4MzY1MSwgMCwgCisgICAgNjYxOTcsIDAsIDEwOTg2LCA2NDY4MywgOTgzNzg1LCAwLCAzNDU1LCAwLCAwLCA5ODc5LCAwLCAwLCA0MTU4LCAxMjgwNTAsIAorICAgIDY4MTY2LCAwLCAwLCAwLCAwLCA2OTY0NSwgMzMyLCAxMTg4MDgsIDAsIDUxNDIsIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgCisgICAgOTI0MDQsIDc0MzczLCAwLCA1NTIxNywgMCwgNjM4NzAsIDQzMTYzLCAwLCAwLCA5MjM5MCwgNDI4NjcsIDE4MzQsIDAsIAorICAgIDkyNDYxLCA2OTgxNywgMTA5NDAsIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIDI2NTIsIDEyMDUyNywgNzE2NCwgCisgICAgMTA3ODQsIDE5NTA5MywgNjc2NzQsIDAsIDkyMjMzLCA5MjQ4MiwgMTk0NzQ5LCA3NDU2MiwgOTE3NTA1LCAxODI4LCAKKyAgICA3NDQ3NCwgMTIwMzI3LCA3ODYyMCwgODUzMSwgMTI0OTksIDYyODAsIDEyMzI0LCAxMTg4NTQsIDY1MjM4LCA2ODM3NCwgCisgICAgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIDE2MjAsIDY0NDM2LCAzNjAxLCAKKyAgICAxOTUwOTQsIDEyODA3MywgOTgzNTYyLCA2MDksIDExNTU1LCA5ODMwOTksIDEyNDk2LCAxMjc4MzksIDc0MTgxLCA0MzQzLCAKKyAgICAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAwLCA0MzU2NSwgCisgICAgNzEzMDYsIDEyNjQ5MywgMTI2OTYsIDEyODI1NiwgMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIDk4MzIwNiwgCisgICAgNDI4MTgsIDEyNjYzMiwgMCwgMTIwNDkwLCAwLCAxMTkxMzcsIDE1MDYsIDQzNTYyLCAwLCA5MjQ5MSwgMCwgMTI2NTEsIDAsIAorICAgIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAxMTg4NDQsIDAsIAorICAgIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAwLCA2OTc2MCwgCisgICAgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCA5MDgwLCAxMjcwMDAsIAorICAgIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCA2NTE2NiwgMTE5MTEyLCAKKyAgICAwLCAwLCAwLCAwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIDAsIDQzMDQ1LCAwLCAKKyAgICAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgNDMzNDYsIDgxMTYsIAorICAgIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIDk4MzYwMiwgMTIwODExLCAKKyAgICAwLCAxMjQ2OCwgODYwNywgMTAwOCwgMCwgMTAwOTIsIDE5NTA3OCwgOTE3ODQyLCA2Nzg1NSwgNTUyNTcsIDczNzcxLCAKKyAgICAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAxMjg2NjUsIDY0NTk1LCAxMjcyOTQsIAorICAgIDAsIDkyMzExLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIDUzODIsIDAsIDAsIDAsIDExOTA2MCwgCisgICAgNjQ5NTMsIDU0MDYsIDE5OTIwLCA2OTg5NywgNjY1MTAsIDM1OTAsIDE5NDg2NCwgMTEzMCwgMCwgMCwgNDIwMTYsIDExODIzLCAKKyAgICA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCA3NDgxMiwgNzg1ODQsIAorICAgIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIDEyMDgwMywgCisgICAgOTgzODQ4LCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgMTI3MTgyLCAwLCAKKyAgICA3MzkxNywgNzg0MywgNjk3ODMsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgMTE1OTQsIDEyODI0NywgCisgICAgMCwgMTE4OTkwLCAxMDQ5MSwgNjk4NDIsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIDgyNjgsIDQ5MjMsIAorICAgIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIDAsIDY2NjEwLCAxMDQ2MSwgMTIxMDMsIAorICAgIDAsIDg2NDIsIDAsIDQyNzY2LCA5ODM4NjYsIDIyMTAsIDk5ODMsIDAsIDk0MDA5LCAwLCAwLCAwLCA3Mzk4LCA0MTUxNSwgMCwgCisgICAgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgMTIwNTI1LCAwLCA3NjE3LCAKKyAgICAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAxMzE0MywgMCwgOTE5MywgMTEwOTcsIDU3MDMsIDAsIDQxNTE3LCAKKyAgICA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIDEwNjYwLCA1NzY5LCA2MTMsIAorICAgIDc1NDMsIDEyMDI3OSwgNDc3LCA0MTA4MywgOTI1MjEsIDAsIDU5MiwgMTU3OCwgMTI0NTksIDQzNDQ5LCAwLCAwLCA4MjI1LCAKKyAgICAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIDEyMDc0NCwgMCwgMTI2NDcyLCAxMjQ4MCwgNDMyNDMsIAorICAgIDAsIDM5LCAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAzMTk1LCA1NTUwLCA5ODM1NTQsIAorICAgIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAyODc3LCAwLCAwLCAxNjc1LCAKKyAgICA2OTg0MCwgMCwgMCwgMCwgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDE5NDc3NywgOTgzNjExLCAwLCAwLCAwLCA0MzI0NCwgCisgICAgMCwgMCwgOTgzOTE2LCAxMTk1NjEsIDk4MzA3OCwgMCwgMTk0OTIxLCAxMjgxNjAsIDk5MzksIDAsIDk4MzE1MSwgNzc4NjAsIAorICAgIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgCisgICAgMzY0LCA5NTk1LCAxOTQ5MDgsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIAorICAgIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgMCwgMzg0MSwgNjg2MzQsIDAsIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCAKKyAgICAxMjg5MCwgMjkwOSwgNjg2MTksIDQ0MDA4LCA2ODYyNywgOTgzNzE4LCAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIAorICAgIDExOTYyLCAxOTQ2OTQsIDEyNTA3LCAxMTk2LCAxMjg2ODcsIDEyODMxMSwgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCAKKyAgICA2NzY3OCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAxMTkzNDMsIDk4MzIzNiwgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCAKKyAgICA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIDQyNTAyLCA4MjgwLCA3NDUyMCwgMjcwMSwgCisgICAgMCwgMTI3MDAyLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgNjY3MDEsIDYzNzcyLCA5ODM4MTQsIDYzNzQ1LCAKKyAgICAxNzQ4LCA2Mzc3MCwgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCAKKyAgICA2MDk2LCAwLCA3Njk0LCAwLCA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgCisgICAgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDAsIDAsIDkyNTM1LCAwLCAwLCAwLCA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCAKKyAgICA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgMTA5OTYsIDkyMjQ3LCAxOTIyLCAwLCAKKyAgICAxMjQ5OCwgMTA5ODcsIDY5OTM2LCA2OTkzOSwgMzg5NCwgNjU1NDMsIDAsIDE5NDg0MiwgOTgzNTg4LCA0OTMsIDAsIAorICAgIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAxMDMzNSwgMzUyMCwgOTE3OTMyLCAKKyAgICAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAxMjQ5MSwgMCwgNjQ5MTEsIAorICAgIDkyNjE1LCAyMDk2LCA2NTEyMCwgMCwgNzgyMTksIDk4MzA4MSwgODM3OCwgMTE2MzIsIDEyNzA0MSwgNjYyMTMsIDYzODY0LCAKKyAgICA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCA2NjIzNiwgNjYyMTEsIDY2MjE4LCAKKyAgICA5MjY3MiwgNjYyNDAsIDc4MDQxLCA2NjIzMywgODkyOCwgOTgzNTUyLCA3OTA5LCA2NjIzNCwgMTE2MDUsIDYzNzU5LCAKKyAgICA5ODM2NTQsIDY2MjA4LCA3Mzk5OSwgNjM3OTksIDYzODAzLCAyNDQsIDExNTQyLCAxMjg5OCwgMTI0OTQsIDczNzYxLCAKKyAgICAxMjQ5MiwgMTI2NjksIDAsIDAsIDc0MTUzLCAwLCAxMjgyNzgsIDEyMDY4MCwgNDg4MiwgMTMwNDAsIDAsIDg2MTIsIDQ4ODUsIAorICAgIDc0MDUzLCAwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIDI0MjksIDEzNjAsIDI0OCwgMCwgNjM3OTcsIDkyMzk0LCA0MjM1OCwgMCwgCisgICAgNzI5MiwgMCwgNjM3NTYsIDQyNzg2LCA2NjY5MywgMCwgMTg3MCwgNzgwNDAsIDQ3MCwgNzgwMzgsIDc4MDM1LCA3ODAzNiwgCisgICAgNzAwMjgsIDc4MDM0LCA0NTc5LCAxMjgwOTAsIDAsIDEyNTExLCA3NDQ1MywgMTI1MTQsIDAsIDc0NTc5LCA3MjM5LCA3MDAxLCAKKyAgICA4NjIzLCA5NDAxMSwgMTI4MDUyLCAxMjgwNDgsIDczNzgsIDEyNTEyLCAxMTYxNSwgNjEwNCwgMCwgMCwgNjU5LCA2MDk4LCAKKyAgICAwLCAxMjIzNCwgMTI3MzA3LCAxMjcwNjcsIDgzMTEsIDEyNTEwLCA0MTgwMywgMTMwMzksIDEyNzA3MiwgMTI1MTMsIAorICAgIDEwMjAyLCAxMjQ3MSwgMCwgODc0NywgOTgzOTIwLCAwLCAwLCAyMzIzLCAwLCAyMzE5LCA3NzkxNywgMTI0NzcsIDc3OTE2LCAKKyAgICAyMzExLCAwLCA0NDE1LCAyMzcsIDYyODEsIDEyNzI4MCwgMCwgMCwgMjMwOSwgMTMxMiwgODE3MywgMTI4ODcxLCAxMjQ2OSwgCisgICAgMCwgNzg1MDUsIDY0MzM1LCAxMDYwOSwgMCwgMTI4MTExLCA5Mzk3LCAxMTUyNCwgOTM5NSwgOTM5NiwgOTM5MywgOTM5NCwgCisgICAgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgOTM4OCwgNDkzMiwgOTM4NiwgOTM4MywgOTM4NCwgNjc0MCwgMCwgCisgICAgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCA2NzY1OSwgMjMxMywgMTI4MTY3LCA3OTQ4LCA5MjM2LCAKKyAgICA5MjU3MSwgMCwgMCwgMTA1NzAsIDQzNDczLCA2Mjg5LCAxMDQ4NCwgMCwgMCwgMTE5OTgsIDEyMDgyLCAxMDkyNCwgMzE0NywgCisgICAgMCwgMTIwNjg0LCAxMjUyNCwgMTE5MDgxLCAyMzEwLCAxMTgxOCwgOTM4MSwgOTM4MiwgOTM3OSwgOTM4MCwgOTM3NywgCisgICAgOTM3OCwgOTM3NSwgOTM3NiwgMTY4MywgOTM3NCwgOTgzNzc4LCA5MzcyLCAxMjQ0NCwgMCwgMCwgMTMwMTYsIDgyMTAsIAorICAgIDk4Mzk1OCwgNDIwMjksIDExMDc5LCAxMjMzMSwgNDM0NTEsIDQyMDMyLCA4NzQ0LCA3MjYsIDAsIDk4MzgzNywgNDE1NSwgMCwgCisgICAgMCwgNDIwMzAsIDUwMDcsIDEyNTIyLCA0MzA4OCwgMCwgNDk1MSwgMTI3ODA1LCAxMjcyNDAsIDAsIDk5MjIsIDQzMzA5LCAKKyAgICA5ODM4NDEsIDEyNTI1LCA5ODM0NzEsIDEyMDE2LCA2NTc3MCwgOTU0OCwgNjc2NjUsIDQwMywgNzgyMzAsIDEyNTAzLCAwLCAKKyAgICAwLCAxMTAzMCwgMCwgOTI1NjcsIDY1NjkxLCA2Mzk5OCwgMTgxOSwgMTA0OTYsIDAsIDAsIDExOTkyMCwgMCwgMTk0NjY4LCAKKyAgICAwLCAxMjUwNiwgMCwgMTIyMzEsIDAsIDEyNTAwLCA0NDAyMywgMTI1MDksIDY0MzkzLCA3ODgzMCwgMzM4OSwgMTA1ODksIAorICAgIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDc4Mzk1LCA3ODM5NCwgNzQwNjksIDc3OTk1LCA3ODM5MSwgMzYwOCwgODI4MSwgCisgICAgMTIwMzIwLCAxMTA3LCAwLCA5MDc2LCA4ODYyLCA2OTc0MywgNDEwNTIsIDEzMDg0LCA2NDc2NiwgNDMyMTcsIDc4MDMsIAorICAgIDEzMjIyLCA3NDE2NSwgNzQ3ODIsIDEyNjUxNCwgODU0NiwgMTE1NTMsIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgCisgICAgOTgzOTQ3LCA0OTgsIDY0NDcxLCAxMjAzMjQsIDEyODU2NywgMTI1MjksIDgwNDIsIDAsIDIzNDQsIDEyNTI4LCA4MDMxLCAKKyAgICAyNDE0LCAwLCA2OTcxOSwgMzIzMSwgMCwgNjQyMiwgNjY1MTIsIDY5NjUzLCAxMjUzMCwgMjUzNywgNzg0MDUsIDQxNDI5LCAKKyAgICAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCA3ODczOCwgNDE0MzMsIDQ3MTksIDQ2OSwgMCwgNDM2MywgMzMxMywgNDE0MjgsIAorICAgIDc4NDA3LCAyMDIzLCAxNzcyLCA3ODIyNCwgNzgyMjUsIDY1NzA2LCAxMDA1MSwgNjQ4MTIsIDc4MjIwLCAwLCA5OTIwLCAKKyAgICAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgOTYwNywgMCwgOTY2MywgOTgzMjI4LCAxMTk2MzQsIDY1MDMsIAorICAgIDQxMTEwLCAwLCAxNDkxLCAwLCAwLCAxMjczMDQsIDQxMDYxLCAwLCAxOTQ4MzgsIDEyNzE4NywgNjUwMjYsIDQxOTkzLCAKKyAgICA0MTUwOSwgMTEwNDUsIDY1MDI4LCA3ODYwMiwgNjY0NzYsIDQxMTA4LCA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIAorICAgIDQxOTkyLCA0MTUwNiwgMCwgNDE2ODcsIDAsIDEyMDcxNywgMTI3Nzc2LCA5OTQwLCAxMjcyOTksIDc2OTIsIDk4MzgzMywgCisgICAgODAwOCwgNDExMzEsIDMzMCwgODU2NiwgNjUwODMsIDQxMTMzLCA5ODE2LCAxMjY1MTcsIDEyNTMyLCA3ODU1MCwgNzg1NDYsIAorICAgIDM1MDgsIDEyNzA1OCwgNDMyMzUsIDAsIDEyNzI5OCwgNjQxMzksIDc4MjMxLCA2NDExLCAxMjkxMCwgNzg1NTQsIDY2NjQ0LCAKKyAgICAxMzAyOCwgNjczNywgMTI1MzcsIDAsIDAsIDY0MTM2LCAxMjUzNiwgMjM1MCwgMTMwMjksIDc4MjMzLCAwLCA5ODMxMDMsIAorICAgIDEzMDMwLCA2NzAyLCA0NTI3LCAwLCAxMjUzOCwgMTI4ODEwLCA5ODM2NDUsIDY1NTk5LCA2NTcxNywgOTk2NiwgMCwgNDk0OCwgCisgICAgMTI0ODQsIDQwMzIsIDEyODE0OSwgMTI2MjMsIDAsIDYyMDcsIDAsIDYxMTcsIDY1OTMwLCA4NDEyLCAwLCA3NDM4LCAxMjk2LCAKKyAgICAyMzI1LCA0MTUxMSwgMTI2NjI1LCAxMDE0OSwgNzQxMTgsIDAsIDEyNzI4NiwgMTI0ODEsIDAsIDEyNDg4LCA2NjcxMywgMCwgCisgICAgNDE1NTYsIDY0NDE0LCAxMTg4MDIsIDIzNTQsIDQyNjE5LCA3Mzc2NiwgMCwgNjI5NSwgOTAxLCA0MTUxMCwgNzk1MywgMCwgCisgICAgNjUwMzIsIDQxNTEzLCA5ODMxNjYsIDExOTI3LCA2NjU4NCwgNzg1NTksIDc4NTYwLCA3ODU1NywgNzg1NTgsIDAsIDc4NTU2LCAKKyAgICA4NDgsIDk4NjgsIDAsIDY0MjQsIDc4NTY4LCAxMTkzMzgsIDY5OTIyLCA3NDAzMSwgNzg1NjMsIDc4NTY0LCAyMzUyLCAKKyAgICA3ODU3MiwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDY3OTczLCAwLCAxMzAyNiwgNjc2MiwgNzg1NzksIDc4NTgwLCAKKyAgICAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIDEzNDMsIDk4MzgyMywgMCwgOTMyNSwgNjgxOCwgCisgICAgNjI4MywgMTE3MzgsIDAsIDk4MzkzNCwgMCwgMTE3NDEsIDAsIDAsIDkyMTYsIDgyNjMsIDExMjc5LCAxOTQ3NTIsIAorICAgIDk4MzgyNSwgMTk0NzU0LCAxMzAyMSwgNjQ0OTQsIDMxMzYsIDE5NDc1OCwgMTk0NzU3LCAxOTQ3NjAsIDEzMDIyLCA0MjczNywgCisgICAgOTk1NiwgMCwgMCwgNzQ1NTIsIDEwMDE0LCAwLCA0MTI2MCwgMTE5MzQwLCAxMzAyMCwgMTAwMjQsIDE5NDc2NCwgNzQ1ODMsIAorICAgIDc0MzQwLCA2OTY4MSwgMCwgNDMwMDEsIDgwMjksIDAsIDAsIDk4Mzc4MCwgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAKKyAgICAxOTQ3NDgsIDUyMTUsIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAzMzQyLCA3ODU4MiwgNTM2MywgMTI5NTcsIAorICAgIDc4NTgxLCA0MTU2LCAwLCAwLCA2NDIxLCA3ODU5MSwgMTYxMSwgNzg1ODksIDEzMDE4LCA3NDI1NywgNzg1ODgsIDc0NTQyLCAKKyAgICAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDY4NjA4LCA2NDgyLCA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCAKKyAgICA4ODM4LCA0MjUsIDQwMjUsIDEwNzA5LCA3ODU5NSwgMjEwOCwgMjM5MiwgMTMwNDcsIDAsIDAsIDY4MTksIDEzMDQ5LCAKKyAgICA2NDk5LCA5MjI0MywgMTI0MjQsIDY4NjE0LCA3Mzk0NCwgMTMwNTAsIDk5MjQsIDE5NDc0NSwgNjUwNywgMTI3OTE5LCAKKyAgICA5NDA3MywgMTI4MDY5LCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIAorICAgIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgCisgICAgMTI0MjAsIDQwMjQsIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCA0MTA1NywgMCwgMCwgMCwgMCwgOTgzNzkxLCAKKyAgICA5MjIxMCwgOTI0MTEsIDAsIDQxNDk2LCAwLCA5MTY1LCAxNTcyLCAxMTkxMSwgMCwgMTE4ODQyLCAyMzQ2LCAxMzI3MCwgCisgICAgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIDY0MDEsIDU4MzEsIDAsIDAsIDEzMDQzLCA4MDU2LCA5MjQ5NCwgNjU2ODEsIAorICAgIDIwOCwgMTI3MzgyLCA0MTUxNCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIDkyMjI3LCA3ODI1LCA1NjYxLCAwLCAxMjA2MzAsIAorICAgIDM2MDMsIDQxMTA5LCAyMzk4LCAzNTQ4LCAxMjY1OTYsIDAsIDExOTkzMywgMCwgMzExNSwgOTkxOCwgMCwgODI5NCwgCisgICAgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCA5ODMyNzQsIDQxNTU4LCA0MTQ3MSwgCisgICAgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgMzE0MywgMTk0Njc0LCA2NzAxLCAKKyAgICA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgNzAyNSwgNjM5NzQsIDAsIAorICAgIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgMTU2NCwgNzM5MjQsIDExMjEsIAorICAgIDc4MzE5LCA2Mzk1OSwgMCwgOTk0MiwgMTMyMzEsIDAsIDY0NzUyLCA0NzMyLCAxOTQ2NjYsIDExNTk2LCAxMTk5MzEsIAorICAgIDY1MTg3LCAxNjI2LCA2Mzk4MywgMTAxMTAsIDY0NzcyLCA0MjAyNCwgNjQyMCwgNDIwMjgsIDAsIDEwNTA5LCAyNzk1LCAKKyAgICA0OTEwLCAxOTQ3MjgsIDY5MjMxLCA2NDc1MywgNjI3NSwgOTM5NTcsIDExODgzMCwgNjM5NzgsIDExMDQ0LCAzMjI5LCAKKyAgICA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgNzA4NSwgNjEzNywgMCwgNzUyNCwgMCwgCisgICAgOTE3ODA5LCA4MzQ2LCAwLCA4MzM4LCAxMjgzMTUsIDY1MDQzLCAwLCA4MjIsIDEyNzk4NCwgOTkwMywgNjQ3MjEsIDQyNzIyLCAKKyAgICA2OTg3NywgMTk0NjU5LCA3ODY1NSwgNzg2NjEsIDE5NDY2MCwgNzg2NjIsIDQxMjY1LCA1MzExLCAxNzk1LCA5NjUsIAorICAgIDExODc5MSwgMTA1ODcsIDc4MDU1LCAxMTI3OCwgNzg2MzIsIDE5NDY0MCwgMCwgMTI5NDYsIDE5NDY0MSwgMTE5MzQxLCAKKyAgICAxMjAzNDksIDYyOTQsIDMxNDQsIDE5NDY0OCwgMTk0NjQ3LCA2NTAxOSwgMTk0NjQ5LCA3Mzk5MCwgMCwgOTgzOTYwLCA3NDgsIAorICAgIDQxMDY3LCAyMzMwLCA1MzUsIDMxNDgsIDEyMzc1LCA3ODc5OSwgMTk0NjI5LCAxMDU1NiwgMjQ3NSwgMTIzODgsIDQ4ODksIAorICAgIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAxOTQ2MzUsIDQ4OTAsIAorICAgIDE5NDYzNywgOTE3ODA0LCA1ODEsIDQ4OTMsIDk4MzYxNiwgNjU3MSwgNjU1NDUsIDQ4ODgsIDQxNTcsIDc4MDQ4LCA3ODA0OSwgCisgICAgNzgwNDYsIDc4MDQ3LCAwLCAxMDExOSwgNjQxNSwgNDI4OTMsIDAsIDY5NzAyLCAwLCAwLCAxMTM3NSwgNjQ3NDYsIDIzMzIsIAorICAgIDc4MDYzLCA0MTIsIDc4MDYxLCA2NDkzMiwgNDI4ODAsIDQzNTg3LCAwLCAwLCAwLCAwLCA2NTE5NywgNzgwNjYsIDEyMjAzLCAKKyAgICA3ODA2NCwgNzgwNjUsIDg5MTMsIDY1ODU0LCA0ODc1LCA2NTgxMSwgMTIwMzgxLCAxMjAzODksIDExODg4OCwgOTM0NCwgCisgICAgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCA3NDc4MSwgMTE5OTcsIDEyMDM5MywgNzgwNzUsIDAsIDMxMzQsIDAsIAorICAgIDY1Njk2LCA5MjMzMSwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgNzg0MTQsIDc4NDEzLCAKKyAgICAxMTg5NTAsIDc0MDExLCAwLCAwLCAwLCAwLCAxOTA4LCAxMjAxNjcsIDQzMjgsIDEwNzM0LCAxMjcwMTQsIDAsIDEyNzkxNCwgCisgICAgNzgwNCwgNzgyNzIsIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgMTEzNjcsIDAsIDc4MDU0LCA0OTE3LCA3NDUxNiwgCisgICAgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAxMjc4MzYsIDExODg5MywgMjM2MSwgNzk3MSwgNzgwNzIsIDc4MDczLCAKKyAgICA1NTI0MywgNzgwNzEsIDAsIDgwODYsIDc0MzE3LCA2NzA3LCA4MzE5LCAyMzEyLCA0MDk3NywgMTA5NjAsIDQwOTYyLCAKKyAgICA4MzA1LCAxMjU3MywgOTgzNjA4LCA0MDk4MCwgOTgzOTY0LCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCA5ODMwNDgsIAorICAgIDY5ODU2LCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAxMjc5NDYsIDU2NTMsIDQyNDAwLCAxMDg5MSwgNzY5OCwgNTY1OCwgCisgICAgNzQwNDUsIDcwMDM5LCAwLCAwLCA0OTEzLCAwLCA5ODM5NTksIDcxMzMzLCA0MjMyNiwgMTI4MTk0LCAxMjcyOCwgOTI2ODUsIAorICAgIDQyNDc4LCAyMzI3LCAwLCAxMjU2MywgNDIyODcsIDEyNzA1LCAwLCAwLCAxMjU4OCwgODgyMSwgNjE1MywgMjg2NywgCisgICAgMTk0NzA4LCA2NjMxMiwgNjk4LCAxMjgwMDcsIDE5NDYwNiwgMTAzNTYsIDcwMDE3LCAxOTQ3MTMsIDY1MSwgMTI2NDEsIDAsIAorICAgIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgNzg0NjUsIDc4NDY3LCA3ODQ2MywgNzg0NjQsIDEyODg1MSwgNzg0NjEsIDE5NDY5NywgCisgICAgNzQzNTYsIDY0OTQ1LCA0NzE2LCA0MzI3NywgMCwgNzg0NzQsIDEyMzQwLCAxMjA1NjgsIDAsIDE5NDcwMCwgNTUyNjQsIAorICAgIDQxMjExLCAxMjA2NzYsIDg3MDMsIDU0NjIsIDkxNzYyOSwgOTgzNDk1LCAxMDEwMSwgMCwgNzAwNDksIDg0NzksIDQxNTEsIAorICAgIDQxOTMzLCAwLCAwLCA2NjI1NCwgMTIwODIxLCAwLCAwLCAxMjg2NTQsIDAsIDExOTE5NCwgNzQwNTAsIDkyNzAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMjI3OCwgMCwgMCwgMCwgMjcwMCwgMTI1NzYsIDc4NDIsIDEyODk5LCAwLCAwLCAyNjk5LCAwLCA3Mzg0NSwgCisgICAgMjk4NSwgOTI1NjgsIDEyNjQ3NSwgOTE3ODQ1LCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIDk4MjcsIDExOTMxMCwgCisgICAgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgMzUsIDc4NDgxLCAKKyAgICA3ODQ4MiwgNjY2OTQsIDY4NDc5LCA3ODQ3NywgNzg0NzgsIDQzNTk2LCA2MDkwLCA2NDI1NywgNzgxMiwgMTA1MzQsIDAsIAorICAgIDc4NDg1LCA3Mzg0OCwgNjc5NzUsIDQyNzIsIDAsIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgNzg0ODcsIDQzMzA2LCAKKyAgICAwLCA2NDQ5NywgMTIxMzgsIDc5MzAsIDAsIDIyOTIsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIDQxODksIDk0MTA4LCAKKyAgICA2NzU5NiwgMTI3NTA0LCA0MTg4LCAxODc5LCAwLCA5NjgsIDAsIDQzNzQzLCAwLCA4ODczLCAyMjc5LCAwLCA5MTc4MjcsIAorICAgIDY1NTU1LCAxMjU3NCwgMCwgMCwgMCwgNzQ0OTAsIDEyNzA5OSwgNDM2NTcsIDAsIDAsIDAsIDQyNjgyLCAxMjU3OCwgCisgICAgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMTI3MTAxLCA2NDg0OCwgMCwgMCwgNzI1MSwgMCwgMCwgMTE4ODUwLCAKKyAgICAxMTkxNDEsIDEyODU0NiwgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCA3ODgwOCwgOTQ2OSwgOTYzMiwgCisgICAgOTIzMjMsIDc0NzYxLCA2NDMyMywgMTI3MzM1LCAwLCAwLCAwLCAzMTAsIDAsIDQxMjgxLCAxMDk3NiwgMCwgNzEzMjUsIDAsIAorICAgIDc0MjY2LCAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIDEyNzMwLCAKKyAgICA2NTE2MywgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMTIwMTYxLCAwLCAwLCA0MTkzNCwgNzQ2NSwgMCwgMTI4MTY4LCAKKyAgICA5ODMyNjgsIDQ3MTUsIDYxMDEsIDk0MTA2LCA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIDMwNywgMTI3MTQ3LCAKKyAgICA5NTg1LCA1Mzc0LCA5ODMyNjcsIDEyODA1OSwgMCwgMCwgMTI2NjE4LCAxMjAzOTAsIDAsIDY1NTY3LCAxMjA2MTQsIDE5MjksIAorICAgIDAsIDEyMTQyLCAwLCAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTIwNjEwLCAxMjk4MiwgMTk0NjIzLCA1Mzc4LCA3ODc5MSwgCisgICAgMTI4Njc5LCA0MTQyMSwgMCwgNDQ2MiwgMCwgMTI2NTk5LCAxMjgwOTIsIDgyMSwgMCwgMjQ5OCwgNTgwMCwgMTIwMTU3LCAKKyAgICA5ODMxMTUsIDE3NjAsIDI0MjEsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgMTE4NSwgMCwgNzg3NzAsIAorICAgIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIDE5NDU3MiwgNzk5OSwgNDM5NzEsIDAsIDAsIDEwNjM0LCAxMDk0MiwgNzcxMywgMjM0OCwgCisgICAgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCA5OTgyLCA2NDMyNCwgNDEyNDAsIDg2MiwgNjU2MjYsIDc4NDYyLCAKKyAgICAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIAorICAgIDc4MDkyLCA3NDM1NywgMTk0NTk3LCA0NzQ4LCA5MjIyOCwgMTk0NTk4LCAxOTQ2MDEsIDQyMjYwLCA1ODcxLCAxMTkwNzUsIAorICAgIDAsIDc0NTc2LCA0NDAxOSwgMCwgMTI4MTg5LCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCA4Nzc1LCAxMjc5NDUsIDAsIDI5NjMsIAorICAgIDAsIDg0MTAsIDQ0NTQsIDcyMywgMTI3ODgyLCA5NjYsIDQ0NDksIDkyMzMwLCA5MjIzOCwgMCwgNzgxOSwgMjMyMCwgCisgICAgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgMCwgODA0NywgMCwgNzg4MjcsIDEyNjM0LCAKKyAgICA0MTU0MiwgNzg3ODAsIDc0NjYsIDY3MDUsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIDk4Mzc2MywgMTU4NCwgNjY2NDUsIAorICAgIDYwNDUsIDY3MjksIDEyMDY0MCwgNjUyMTgsIDExNTU5LCAwLCA3ODA2MiwgNzUzNywgMCwgMTEzNzAsIDAsIDEwMzMwLCAwLCAKKyAgICAxMDM5NCwgMCwgNzQxOTQsIDAsIDEyNzkyOSwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgNzc5NTAsIDE5NDU3OCwgNzA3NCwgCisgICAgOTI2NDgsIDE5NDU3OSwgMTk0NTgyLCAxMTQxNCwgMTI4ODY4LCAyNTMxLCAxMzAzNCwgMCwgMCwgNDIxMSwgMTI1OSwgCisgICAgNzUxNywgMCwgMCwgMTk0NTYxLCA0MDk5NiwgMTMwMzcsIDcwOTIsIDY0MSwgNTIxOSwgOTQwMzQsIDE5NDU2NiwgMTEwNjQsIAorICAgIDQxMTI5LCAwLCA0Mjg1MCwgMTMwMzUsIDkwNzUsIDkyMzg3LCA1NDY2LCAxMjgxNTMsIDAsIDY0MDk4LCA2NTc5MywgNDUzNSwgCisgICAgMTk0NTczLCA0MjcxLCA3ODQxNywgMTI4MzU3LCA2NzY5LCA0MTQxMCwgOTgzNDUyLCA2NDI2MiwgNjc2NywgNDE0MDcsIDAsIAorICAgIDAsIDY3NTUsIDExODg2NCwgOTA0NiwgMTI3OTM0LCAxMjY2MDgsIDAsIDAsIDAsIDAsIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgCisgICAgMjU2MywgMTMwMzMsIDI0NywgMTE4OTE1LCAwLCAxMjMzOCwgNDY1MSwgNjk4OTUsIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgCisgICAgMCwgNDE5MDMsIDQzNDQ3LCAxMTAwMSwgMCwgNDIyNTUsIDAsIDkyNjYxLCA2OTgyMSwgNDE5MDUsIDAsIDAsIDEwNzc1LCAKKyAgICA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDk4MzA2MywgNDI1MzUsIDY5ODEyLCA2NDUyOSwgNDE0MDgsIDQyODUzLCAKKyAgICAzODc3LCAxMjA3OTUsIDQyNjc0LCA4MTQ3LCA0MzU2NiwgMTE5MDIxLCA5ODM3NzYsIDEwMjM2LCA2NTkxOCwgNDM3ODIsIDAsIAorICAgIDAsIDY0NTA2LCA2OTY1MiwgMTE4OTIxLCA0NzQ3LCAxMjgwNTgsIDY5ODQ0LCA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgCisgICAgNDI2MDAsIDAsIDQzMjAzLCAwLCA5ODM3OTksIDQzMjg2LCAwLCAxMjgyMTEsIDQzNzc4LCAwLCA0MTMwNSwgNzg3NzYsIAorICAgIDQzNzgxLCAxMTMwMywgNjU1NDcsIDAsIDcwMzEsIDg1OSwgMCwgMCwgMCwgNjA1OSwgMTI2OTg1LCA1NTIzNSwgMCwgODUzNSwgCisgICAgMCwgNjUxOTYsIDE5NDc4NywgNjYwMzIsIDExNDg4LCAxMjA0ODEsIDEyMDc4NiwgNDIyMzMsIDY0MTQwLCA5OTQ2LCAKKyAgICA2Mzg4NSwgMTk0NzkyLCAxMTgyMiwgMCwgNDMxODksIDk4Mzg5OCwgMCwgMTc4OCwgMTU3OSwgMTIwNDgyLCA3MTI5OCwgMCwgCisgICAgMCwgMCwgOTAyOCwgMTE5NTcxLCA2OTIzNCwgOTQwNTUsIDAsIDEyODUsIDY0ODgyLCA0MTI0MiwgNzAwODYsIDAsIDEyNjQwLCAKKyAgICAwLCA3NDAxLCAwLCAxMjYyNSwgNjgxOTgsIDAsIDcwMDgyLCAzOTQwLCA0MTU5NywgNDM3NTQsIDMzOTYsIDEyNjQyLCAKKyAgICA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgMTIwNTE2LCAxMTg5ODksIDAsIDg4MTUsIAorICAgIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgMTE5MzE3LCAxMTkzMTgsIDIxNDIsIDY4NDU0LCA0MjQ4NSwgCisgICAgOTQwMTIsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgMCwgOTI2NDMsIDAsIDE5NDY3MywgMTIwMzIsIDAsIDk3MjUsIDAsIAorICAgIDc4NDMxLCA1MjYzLCAxMjgxOCwgNzg0MzAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIDc4NDE5LCA0Mjc3NywgMTAxMzksIDk4MCwgCisgICAgNDM2OTgsIDY1Mzg2LCAyMjA4LCAwLCA0MzcwMSwgNDMxOTgsIDcxODQsIDEyMDY3MywgMTk0Nzk3LCA5MTc4MTksIDEwMDg1LCAKKyAgICAxMTk5OTIsIDAsIDExOTk5MywgNjYzNCwgOTIzNzMsIDAsIDExOTMyMywgODA3MiwgMTE5MzIxLCA0MzcwMCwgMCwgODg3MiwgCisgICAgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIDEyNjk3NywgMTIwNTY1LCA5OTE0LCAyMjE3LCAKKyAgICA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgMCwgNzgxMDcsIDAsIDY0NzM1LCA0MTI0MywgOTIxOTksIDc4MDgsIAorICAgIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgMTIwNDIyLCAwLCAxNzEwLCAwLCAwLCA2NTYwNywgMCwgCisgICAgNDksIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCA3ODY3MiwgOTc0MSwgNzgzMjksIDU2NDksIDc4NDQxLCA0MzQ0MywgNjQ0MTgsIAorICAgIDE2NDMsIDY1MjEzLCA4NDA1LCAzNDcwLCAxMjgyMjUsIDEzMjEzLCA0MjQ1MiwgNzgzMzEsIDEyMDY2NCwgNzg0NDUsIDAsIAorICAgIDEwNzIsIDc4NDU3LCA3ODQ1MiwgNzg0NTQsIDY1NzYsIDQxOTg4LCA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgOTg4NiwgCisgICAgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDAsIDEyNjMyLCAxMDg2LCAxODY5LCA3ODY4NSwgNzY4MCwgMCwgCisgICAgNjU0NTgsIDEyMDcxNCwgMTI2MzksIDMzODAsIDgxMjMsIDEwOTEsIDEyNjM4LCA3OTc3LCA0NTAxLCA0MTA5OSwgMCwgCisgICAgNjYzMDksIDAsIDAsIDE0OTQsIDk4MzE0NiwgMTI2NjEzLCAwLCAxMTY5MywgMTI2NTEzLCAxMDQ5NCwgOTI2NTUsIDY1ODcyLCAKKyAgICAxMjM2MywgMTEzODYsIDAsIDAsIDAsIDAsIDY0NTgyLCAwLCA3Mzc5NCwgMCwgODAyMiwgMCwgMTIwNDYyLCA3NDEwNiwgCisgICAgMTI0MTMsIDk0MDY5LCA5MTc5OTQsIDkxNzk5MywgOTE3OTk1LCA1NTcwLCAxODgxLCA3MjEwLCAwLCAxMDEyLCA0Mzc1MiwgCisgICAgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgOTgzMjQyLCA0MjMzOSwgMCwgNjA2MywgMCwgNzgzODMsIDExOTU5NCwgCisgICAgNjA1MywgNjU2MDIsIDAsIDkyMjAxLCA2NDcyNywgOTE2MCwgMTk0ODI3LCAwLCAwLCA5MjE4MCwgMTA1MDMsIDExODgxMCwgCisgICAgNjA1NSwgMzg3MCwgNDI3OSwgODQ5MCwgMTIwMTE0LCA0MzE5LCA2NDc4NiwgODYwMiwgMTIwMTEwLCAxMTMyNiwgOTIyMDQsIAorICAgIDk4MzExNiwgMCwgMTIwMTE5LCA3ODMzMywgMTIwMTE3LCAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgCisgICAgMzY3NCwgOTc0MCwgOTEyMSwgNTU2OCwgMTIwMTA3LCAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNDIxNTksIDQyODcwLCAKKyAgICAxMjAxMDEsIDU4OSwgNzA1MCwgOTgzODAwLCA0MzI4MSwgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAKKyAgICAxMjY0OTcsIDc0MDk5LCA0MjY0NSwgMCwgMTk0ODE1LCA4NTgzLCAwLCA1ODQ3LCA2OTI4LCAxMjgwNzQsIDAsIDAsIDAsIDAsIAorICAgIDY2NTkyLCAxMjIwNCwgOTE3OTYyLCAxOTk2NiwgNzc4NTYsIDQyNTYxLCAxMjA2MjYsIDk4MzI1MSwgMCwgODEyMCwgCisgICAgMTIwNzAxLCAwLCAwLCAxMjgwMTIsIDQxMDYzLCAwLCAxMDY2NCwgMCwgODM2OSwgMCwgNDU1MSwgMTk0OTY0LCAzMzY5LCAwLCAKKyAgICAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMTg5NjAsIDEyNTE3LCA1NTcsIDk0NTcsIDEyMDM0LCA5ODM2NzEsIAorICAgIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgMTk1MDI1LCA3NDA5NCwgMCwgMCwgNzc5NzAsIDk4MzU2MCwgMCwgMTI4MTc1LCAKKyAgICAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCA2OTIzLCA5MjI4MSwgMTA0NDEsIDczODM2LCAwLCAKKyAgICA0Mzk5MCwgNTQ5MywgMCwgNzQzMTksIDAsIDY2NjM1LCAxMjAxOSwgMCwgMTYxOCwgMCwgMTIwNDc0LCA5NjQ1LCAxMDQzMCwgCisgICAgOTE3OTU5LCA1ODUzLCAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAxMjgxNjksIDEyMDcyOSwgMTEzMTQsIDkxNzU4MiwgCisgICAgMTIwNjAsIDAsIDc4MzkyLCAxMjgyNiwgNjMyOSwgMCwgMTA1MTQsIDY1NTE3LCA3NDM5NSwgMjcwNywgODMwOSwgMCwgCisgICAgMTI3MDU0LCA3ODM5OCwgNDM1NzAsIDI2OTcsIDQzNDIwLCA3ODM5NiwgMTI3MDU3LCAyNjk1LCA0MjE3MSwgMCwgMCwgMCwgCisgICAgNjc2MTcsIDExODk3MSwgMCwgMjY5MywgMTIxMjUsIDEyNzY2LCAwLCAxMTY0LCAxMjg4MTcsIDAsIDQxOTE4LCA5ODMxNjgsIAorICAgIDEyNzU0MiwgODY4NywgNjYwMDksIDEyMTc4LCA3MDUzLCAxMjgwMDEsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIAorICAgIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgCisgICAgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCAyMDUzLCA0Mjg0MywgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCAKKyAgICA3NDQzOCwgNzg4NTIsIDAsIDY3ODQxLCA3NDM3MCwgMCwgODkyMiwgMTI4MDY4LCA3NDYwMCwgMTI3MDAsIDc0ODM2LCAwLCAKKyAgICAxMjU3OSwgMCwgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIAorICAgIDEyNTIsIDAsIDc4NDA0LCA0MTQzMSwgNzQzNjksIDY1MzczLCA1Mjk1LCA5MTc1NjksIDc0MTE0LCAxMjIzLCAxNjQyLCAKKyAgICAxNzQsIDc4Mzk5LCA4ODMsIDQxNjEsIDEyNjkxLCA0MjYwMywgNDE0MTMsIDMyMTIsIDQxNDU5LCAzMjExLCA3NDgxMCwgCisgICAgNDE0MjUsIDEyNzAyOSwgNzg0MTIsIDc0NDUwLCA5NzI4LCAzODQ2LCA4MDcwLCA2MTUwLCA2NjM2LCA0MzcwLCAwLCAwLCAKKyAgICA3NDE3OCwgNzQ1ODcsIDc0MTE3LCAwLCAwLCAwLCA0OTg2LCAxMjE4OSwgMCwgNjc2NDgsIDEyMDQ5OSwgOTQwMDEsIDQyNTcsIAorICAgIDEyMTA0LCA3Nzk0MiwgNjIyMCwgOTAwNCwgNjU1NjEsIDAsIDc3OTQ5LCAwLCA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgMCwgCisgICAgNjk2NzksIDY5Njg0LCA5ODkwLCA3ODU2MSwgMTI5NzEsIDc4NDUzLCA5MjU1NiwgNzM4OTgsIDExOTc5LCA3MDA1MSwgCisgICAgMTE4OTAwLCA5MTc4OTQsIDAsIDk2MzUsIDEyNjAwLCA4ODcxLCAwLCAwLCAwLCA2NDY5LCA3NDIyNywgMCwgNjUzMDQsIAorICAgIDQ2NzksIDEwMjMwLCA2NDMwMCwgNjQ4NjcsIDM0MjcsIDQyNDAsIDAsIDAsIDAsIDAsIDQyOTE2LCAwLCAwLCAwLCA3MjgyLCAKKyAgICA3ODcyOCwgNjU3MzMsIDQ0NDUsIDEyNzEzOCwgMTI4MDgyLCAzNDk0LCA3NDYwNiwgNjU1NSwgMCwgNzc5NzYsIDAsIDAsIAorICAgIDc4NTY2LCAwLCA5ODMxODksIDY1ODk4LCA5ODMyNDQsIDY1MzEyLCA1NDQ3LCAwLCAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIAorICAgIDQxMTA2LCAwLCA2NDQ0OCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAxMjgyODAsIDAsIDQzNjA4LCAxMTkwOTEsIAorICAgIDAsIDY1MzgsIDQzMzUsIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgCisgICAgMTIxNTUsIDk4MzY3NCwgNDI4NzgsIDExNTAwLCAwLCAwLCA3NDU3OCwgMCwgNjU4MzIsIDAsIDAsIDAsIDc3OTc1LCAKKyAgICAxMTkyMzAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgMCwgMCwgOTIzMDcsIDAsIDAsIDUxMzMsIDAsIDAsIDk1MDAsIAorICAgIDAsIDQ5NTcsIDY0NzQxLCAyNDIyLCAyMjEyLCA5ODMwODAsIDAsIDAsIDI0OTYsIDExNTE2LCA5NDQsIDExODg1MSwgMzg5MCwgCisgICAgMTIxNjgsIDE0MzgsIDAsIDk4MzExNywgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgMTI4NTU1LCAwLCAwLCAxNTcxLCAKKyAgICA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgOTgzOTQ0LCAwLCA3ODEyMCwgCisgICAgODg3NywgMjY5LCA0NDI5LCA2MjcyLCA5NjE3LCAxNDYwLCA2OTU0LCA3ODY1NywgNDExMjAsIDY1MTIxLCAxMDg2MiwgCisgICAgNjA2MCwgNDExMTksIDQxNDE2LCA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgOTE3OTg2LCAxMTUzMiwgNzQwNzMsIAorICAgIDEyNzMzOCwgMCwgMTk4NSwgNjI5NiwgOTU4MiwgOTE3ODk1LCA2NDI4NywgMCwgNzgxMTUsIDExNDI4LCAxNzMwLCAyNDU3LCAKKyAgICA5MTc4MDgsIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgOTIyMzAsIDAsIDYxMjksIDAsIAorICAgIDEyODUyOCwgMTI4MjY4LCAwLCA3ODc0LCA4NjgxLCAxMTkwOTIsIDAsIDEzMTM2LCAwLCAwLCA3MDEwMiwgNjM4ODYsIAorICAgIDExODg4MSwgOTYwNSwgNzEzMDgsIDEzMjIwLCAxMjg3NzYsIDEyMDI3NCwgNTUxNCwgMCwgOTIyOCwgMCwgMCwgMCwgNTI0MCwgCisgICAgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDk4MzM1MSwgNjY2NzYsIDY1ODczLCAwLCAwLCAwLCA5NTAxLCAwLCAxMjcyLCAKKyAgICA2NDUzNiwgNjU0NjUsIDY0NjU0LCA3NDY3LCAwLCAxNDY3LCAxMDE1OCwgMTAwNDAsIDAsIDk1MTksIDAsIDkxNzgxMiwgMCwgCisgICAgMTE4ODk5LCAxMjE5MywgMCwgMCwgMCwgMCwgOTgzMzUzLCAxOTkzNSwgMCwgOTIxNjIsIDY5Njc2LCAwLCAwLCAwLCA1Mjc1LCAKKyAgICAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgCisgICAgMTI4MTM4LCAyNDI2LCAxMjA0MiwgOTIxOTQsIDk4MzkxMSwgOTUzNywgMzk2MSwgMTIxMTUsIDc3OTUzLCAyNjA1LCA0NTAwLCAKKyAgICA2NDU2MSwgNTUyMjQsIDQ5ODEsIDAsIDAsIDYzODc2LCAxMTY2NywgNDI2ODYsIDc3OTczLCA0MjM2MiwgNjQ2ODYsIDQ0OTksIAorICAgIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCA2ODIxNSwgOTE3OTA0LCA4NTQxLCA3ODI5OCwgNzAwMzQsIDQxODY2LCAwLCAKKyAgICAwLCAwLCAwLCA2OTkyNCwgNDM1NTUsIDI4MjMsIDk1NTksIDEwMDYwLCA0MTk0MCwgODI5OSwgNDE5NDUsIDcxMzIsIAorICAgIDQxOTQxLCAzMzA4LCA3MTkwLCA2NDg4MCwgODYxNCwgNjUyMjAsIDQxNDkzLCAwLCA0MTY5OSwgMTA3NjIsIDQzNzgwLCAKKyAgICAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgNjI3NCwgNDQ5NCwgMCwgNDAxMiwgMTAzOTUsIDk4MzU5MSwgNDM2MzMsIAorICAgIDY1NDQ3LCAxMjY1MTEsIDAsIDExMDA0LCA2OTUsIDczOSwgNjk2LCA3NjExLCAwLCA0Mjc1NSwgNzQ4MDIsIDkyMjcsIAorICAgIDc1MDYsIDc1MTAsIDY5OTM3LCA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgNjg4LCA0MTg0NywgNjkwLCAKKyAgICAyNTQ4LCA3MzcsIDk3NCwgODAwMywgNzQwNiwgOTE3OTExLCAwLCAxMjg2ODgsIDM5ODUsIDkxNzkxMiwgNjU4NjAsIAorICAgIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgNjQwNiwgNDY4NSwgOTI1MDUsIDEwODc5LCAxMDM0NywgCisgICAgNDY4MCwgNjM0MSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAKKyAgICAwLCA0MjY1NywgOTI0NjgsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIDQzNTY4LCA5ODMxNzUsIDExNzE3LCA3NjUwLCAKKyAgICAxMDU5NCwgNjQ5NTEsIDc2NDcsIDc2NDksIDEyODE1NSwgNzY0NiwgMCwgNzgwODIsIDk2NTEsIDAsIDM4OTEsIDAsIDAsIAorICAgIDIzMzcsIDE3MzUsIDc0MzI0LCA2Nzg2MCwgMjM2MywgOTgzMTM1LCAwLCA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIAorICAgIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDExOTE0MCwgMTI3ODUzLCAwLCAxMjAzNDcsIDc3MjcsIDAsIDg0OTgsIAorICAgIDY5ODE4LCA4OTQ5LCAzMDY1LCA0MjcxOSwgNzEzNSwgMTU2OSwgOTIzNzUsIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgCisgICAgMTI1MzMsIDk4Mzg3OSwgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAwLCA2Nzk3NCwgMTE5ODAsIAorICAgIDEyODY1MCwgOTgzODAxLCA2Mzg5NCwgMTIwNzYwLCAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCA4ODUwLCA3NDI3NSwgOTIzOCwgCisgICAgMTA2MTcsIDkxNzU0NSwgMCwgOTI2MjUsIDAsIDEyNzkxLCAwLCAwLCAxMjc4NDMsIDQ0NDcsIDczNzMyLCAxMjc5MywgCisgICAgMTI5MDAsIDkyMzc3LCAxMDk1MCwgMCwgNzgwODcsIDEyNzkwLCA0MTQwMCwgMTE5MTI4LCA2NjYwNywgMTI3OTIsIDQyMjMyLCAKKyAgICAxOTQ5MzgsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCA5ODM4NjksIDQxMzk5LCAwLCAwLCA1NTI1OCwgMCwgCisgICAgMTI2OTAsIDAsIDAsIDQzNjcyLCAxMjc4NDAsIDQxNjUyLCAyOTc0LCA5MDEwLCAxMTMxNSwgMCwgMjc4LCAwLCA0MTQwNSwgCisgICAgMTE5MjU0LCAwLCAxMDA3NywgNjM4NTMsIDc0NTU3LCA0MjU4NiwgMCwgMCwgNjAwMiwgMCwgNDM1NTMsIDAsIDY3OTAzLCAwLCAKKyAgICAxMjc4NywgNDEzMDgsIDc5MzQsIDY1MzA2LCAwLCAwLCAwLCA4NjQ2LCA5ODMxODYsIDc3ODI5LCA3MTM2MCwgMCwgNjQxMywgCisgICAgNjU1MCwgMCwgMTk0MCwgMCwgNDM2MzcsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgMTAwNDQsIDEyODMyMiwgMCwgMCwgCisgICAgNjg2NTksIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAxMDI5NywgMCwgMzc0MiwgMCwgCisgICAgMzk1OSwgMCwgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIDQzNzU4LCA0MTgyLCA3ODE3MSwgCisgICAgNDY3NiwgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAxMTU0MCwgNDM1NDYsIDY2OTIsIDAsIAorICAgIDQxMDYwLCAwLCA0NjY4LCA5MDgzLCAwLCAwLCA3ODE0NCwgMTU1OSwgNjM4MzEsIDk2NzcsIDEyMDI2MCwgMCwgNjUyNTYsIAorICAgIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCA0MzAyNywgMTIwNDIzLCA0MTcxNiwgMTI4MjM2LCAwLCAxMjA0NzIsIAorICAgIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgNjI3OCwgMCwgNTUxNSwgMCwgMCwgCisgICAgOTgzMDUxLCA2NTMzOSwgNDMyMjEsIDIyMTEsIDAsIDU1MTcsIDAsIDAsIDc0ODQxLCA2Nzg4NCwgMCwgNjc4OTAsIDY3ODg1LCAKKyAgICA2Nzg4MCwgNjc4ODEsIDY3ODgyLCA2Nzg4MywgMCwgMCwgNjc4NzksIDEyNzE4OCwgMTkwMiwgNjc4ODcsIDk2MzgsIAorICAgIDEyOTc2LCAxMjY1NDYsIDEyNDgzLCAxMjM2OCwgNDE3NjksIDQyNzI2LCA0MTc2NSwgNzM2MSwgNjY2NywgNjc4NzQsIAorICAgIDc1NTYsIDY3ODc4LCA3NDM1MSwgMTEyNjQsIDk4OSwgNDI2NzcsIDY3ODg5LCAwLCAxMzExLCA5MTc5NjYsIDQzMjYsIAorICAgIDExMDAwLCA2MzgyNCwgMTMwNjgsIDEwOTMyLCAxMjg4ODAsIDY5MTcsIDc4MTU1LCAwLCA5NDksIDc4MTYyLCAwLCA2MTQ4LCAKKyAgICA4NjA1LCA0MjI1MywgNzgxNzcsIDAsIDAsIDQyNzE1LCAwLCAwLCAwLCA2Mzg3MSwgMCwgNDE3OTYsIDEyNjksIDY1MzAsIDAsIAorICAgIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDAsIDQ0MzEsIDQzMzEsIDk4MzcyOSwgMTI4Njc1LCA0MTgzNCwgNTI3OSwgCisgICAgMCwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCAxMjg4MjUsIDAsIDc4MTY1LCA2NjAzNiwgMCwgMCwgNjQyOCwgNDIyNzAsIDAsIAorICAgIDk4MzU5NiwgNDMwNTksIDQyNjY2LCA1MjU2LCAxMDY3LCAyNTUsIDEyMTMxLCA5ODM3MjIsIDk0OTMsIDk4Mzk2OCwgCisgICAgNDEwMTQsIDExNzkzLCAxOTQ5MjAsIDAsIDc0Mzk0LCA0MzQ2MCwgMTA2NTMsIDQyNzIzLCA5ODM4NTQsIDExOTYzMiwgMCwgCisgICAgNjU2MCwgNzAxNiwgNzQyNzQsIDk4MzYxNSwgNDM1NTYsIDM5MjksIDY3OTc3LCA2NjE0LCAyNzY4LCA5MjUwNCwgOTc0NiwgCisgICAgNTEzNSwgMTE4MTEsIDEyNzk2LCAxMTk1MywgMCwgNjk3NjEsIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCAKKyAgICA1MTY4LCA3ODU1MiwgMTI3NzUzLCA3NDMxNSwgNzQzNjEsIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCA5MjIzMiwgMCwgCisgICAgMTk0NzUwLCA3MzkyLCA4MjMwLCA5MzY1LCAwLCAwLCA5ODM2MDcsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDQzMjQwLCAKKyAgICAxMjc4NiwgMjI5LCAxMTk4ODUsIDExOTg4NCwgNDQwMDQsIDcxNDIsIDExOTg4MSwgMTIzNTAsIDY1NTU0LCAxMTk4ODIsIAorICAgIDExOTg3NywgMTE5ODc2LCAxMjc4NSwgNjM4NjMsIDQzNzk1LCA3NzcwLCAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIAorICAgIDQyMzc1LCAwLCAxMjcyMzgsIDY2MzUyLCAxMDQ3MCwgMCwgMTEwNTksIDEwNzkxLCA5MTc5NDQsIDQ1MCwgMTE5MzI4LCAwLCAKKyAgICAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCA0NDAwOSwgNzgyODQsIDY2MzM4LCAwLCAwLCAxODM5LCAKKyAgICAxMTg3OTksIDk4MzIxOSwgMTA5MjcsIDE3MDEsIDk4MzY2NCwgMjM4OCwgNDE3NDksIDQxNzYxLCA1NDUzLCA4MzYxLCAKKyAgICAxMTk4NjUsIDQxNzU4LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDcxNDMsIDkyNDkzLCA3ODY3NywgMCwgOTI0MjksIDc4MTc0LCAKKyAgICA2NjQzMiwgODgwMSwgMzA1MywgNDM0MCwgOTgzMDQ0LCAwLCA2NTgxMiwgOTE3ODMxLCAwLCA0MTgyNCwgNjc5ODUsIAorICAgIDEyMDIwMywgMTk0ODAwLCAxOTQ4MDMsIDQyNzAwLCAxOTQ4MDUsIDEyNzk4MCwgMTk0ODA3LCA3ODY3NiwgOTIzNTYsIAorICAgIDE5NDgwOCwgMCwgMCwgNDQ5MywgNDMzNiwgMCwgMjMxNCwgNDM2MDIsIDc4ODI2LCAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIAorICAgIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDcxMzMxLCAwLCAxOTQ3OTMsIDE5MTIsIDQyMzg1LCAxMDMwNiwgMTAzNzAsIAorICAgIDAsIDAsIDg4NjcsIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzg4MjEsIDE0MTAsIDkyNjcxLCA5ODMyNTAsIDExODg3OCwgCisgICAgMCwgMCwgOTkxOSwgMTIwNTI4LCA1NTksIDEyODE1NywgNDE4MjUsIDEyNzk3NSwgNzgxODgsIDQ4OTIsIDc0MDE2LCAKKyAgICAxOTQ3ODEsIDY1NDIsIDQxOTU3LCAxMjg4NjUsIDU3NzcsIDAsIDc1OSwgNjU3NDksIDIwNzksIDY1MjQ4LCAxMjc4OCwgCisgICAgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDEyNjU3MywgMzY2OCwgNjU3NTQsIDQzNTYwLCAxMjIyNiwgCisgICAgNjc5OTEsIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgNDM2MTgsIDY1NzQ3LCAxMDkzNywgCisgICAgMjk2MiwgMCwgMjMyMSwgMzU4NywgNjU3NDUsIDkyNDM2LCA4OTIxLCA5OTUyLCAwLCAwLCA0MjcxNCwgOTk1MSwgNDM0MDksIAorICAgIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCA2ODM1OSwgNDE4MjAsIDIzMDAsIDIzOTUsIAorICAgIDEyODU2MywgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDEyMDA1OCwgNjgyMjAsIDEyODE0MywgNDI4MDksIDQyODA3LCAwLCAKKyAgICAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDY3OTc2LCA0MTg5OCwgMjM2MCwgNDE3OTQsIAorICAgIDkxNzk0MiwgNzEzMTQsIDEyNzgxOCwgMCwgMCwgMjQxOCwgOTgzMDk4LCAyNDExLCAxMTMzNiwgNzk5LCA2MzgyMywgCisgICAgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIDU1Mjg0LCAKKyAgICA5MjIwMywgMCwgMTAzODQsIDk4MzIyMCwgMCwgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDY5OTMxLCAwLCA3Nzg3MiwgCisgICAgNDQ0MywgNDI3NzksIDIzMCwgMCwgMCwgNDM1NDksIDQ4NTUsIDQyMTUwLCA2NTczOSwgNTQ0MSwgNDE4OTYsIDEwMjg4LCAKKyAgICAxMDMyMCwgMCwgODU1LCA3MDQ2LCA2MTA5LCA2NTA0NSwgNjM4MzksIDc4MTk4LCAyMDQ5LCAxMDA5OCwgMCwgNzQxNDUsIAorICAgIDEyNzk0MywgMTAyNjQsIDEwMjgwLCA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgMCwgMCwgMCwgNDE4ODcsIDAsIDQ4NjIsIAorICAgIDk3MzUsIDY1MzcsIDEyMDU5MSwgNzQyODYsIDM5MTQsIDkyMTc4LCA5Mzk3NiwgOTA2NSwgMTI5NjEsIDAsIDAsIDkyMjUzLCAKKyAgICAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAxMjA1MTQsIDkxNzk3OCwgNDY5MywgNzM4OTMsIDQyNzI0LCAwLCAKKyAgICA0Njg4LCAxMjA0NTQsIDAsIDAsIDY3OTk0LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDk4MzkwOCwgMTIwMTYzLCA2NTI4LCAKKyAgICAxMjc1NTMsIDQzMDM1LCA2OTg5OCwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgNzgxNjcsIAorICAgIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIAorICAgIDY5NzQwLCAwLCAwLCA5OTc1LCAxMjgwMzksIDExOTkwMiwgNDY4OSwgODkzMiwgMCwgNjU1NjAsIDExOTIwOSwgNzQ0NDEsIAorICAgIDc4ODEwLCAwLCAwLCA2Nzk4NywgMCwgMCwgMCwgNjc5ODksIDAsIDEwMDY1LCA4MjA3LCAwLCA5MjYxMywgMTI4MDExLCAwLCAKKyAgICA2NjIsIDAsIDkyNDQsIDE5NDg2MywgMCwgMTE5MjYxLCA5ODM0MjgsIDAsIDAsIDAsIDQxOTI5LCAwLCAwLCA2NjY3NCwgCisgICAgNDE5MjYsIDEyMDQwOCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDE5NDg2MiwgNjgwMTMsIDUyLCAxMzExOCwgNjQ3NSwgMCwgCisgICAgMTIwMzQxLCAxMjA5NSwgMTAyMjUsIDQ4MTIsIDkyNTc4LCAwLCA2Nzk5MiwgNzQwODUsIDAsIDM5NzgsIDAsIDkxNzk0NSwgCisgICAgMTI3ODIzLCAxMTU4MiwgMTIwNzYxLCAxMjI4MSwgMCwgNjU0NCwgMTMyNDEsIDkzOTYxLCA2OTc4MiwgMTI4NTU3LCAKKyAgICAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIDIwMzYsIDk4NiwgCisgICAgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIDY0MzM0LCAKKyAgICA3ODIwMywgMTI3ODA4LCAwLCA5MjI2NiwgNjUxMDIsIDg5NjEsIDY1ODQyLCAxMDI0MywgMTAyNDUsIDc0MTkxLCAxMjA0MTAsIAorICAgIDAsIDEyMDQ1MywgNjQ4MjEsIDk0NzgsIDI1MDgsIDkyNjgzLCAwLCAyMDIsIDEyODI0NiwgNzQxMzEsIDEyNDIsIDY1NTE0LCAKKyAgICAwLCA2Mzk0MCwgMTI4NzA2LCA2NDUzMywgMTIwMTI5LCAwLCA2Nzg0MiwgMTE5OTAsIDkyNDMwLCA2MzkzOSwgNDMzNzUsIAorICAgIDY1NDQwLCAyNTA0LCAwLCA3ODY3MSwgNjQ4MjksIDk4MzkxMCwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAyODU4LCAKKyAgICA5ODMzNjEsIDc0Mjk0LCA5ODM5MTQsIDY5MjM5LCAwLCAxMTkwMjcsIDEyOTkyLCAyNzUzLCAxOTM2LCA3MDA3OCwgOTI1NzQsIAogICAgIDI3NTEsIDEyNjYyLCAyNzYzLCA4OTUzLCA2NDcwMSwgMTA3MzEsIDEyOTIyLCA3MDUyLCA5MTc4MzksIDAsIDAsIDAsIAogICAgIDYzOTIwLCA3NDEyOCwgMjg1NiwgMTE5OTEwLCA0NywgNjk5MDgsIDEyNjk4NiwgNjU4NTgsIDAsIDAsIDAsIDc4OTksIDAsIAogICAgIDg0MTcsIDQzNzk4LCA3MDcyLCAwLCAwLCA0MDMzLCAxMjgxNjQsIDQzOTkyLCAwLCAwLCAyMTIsIDY0NjAwLCAxOTAzLCAKQEAgLTE3Nzk3LDIzICsxNzgxNiwyMyBAQAogICAgIDEyNjI0LCAwLCAxNjczLCA0ODExLCA5MjM4MywgNTk4NiwgOTMzOCwgMzA0NiwgNzQ0ODAsIDU5ODUsIDkxNzkyOCwgCiAgICAgMTE5NTk4LCA5ODIwLCAwLCAxMjE4NywgMCwgMCwgNTk4NCwgMCwgNDMzMDgsIDQzOTMsIDY3NjUwLCAwLCAwLCAwLCAwLCAKICAgICA3NDgyNiwgNjQ3MzMsIDAsIDAsIDM0OTEsIDAsIDAsIDEyODIxOSwgMzUxNCwgNjU0ODUsIDAsIDc0OTIsIDAsIDc0NjA1LCAKLSAgICA5MjQ4MywgNzUxNCwgOTgzMzU5LCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDY4MzUzLCAwLCAwLCA2MzkyNSwgMCwgNzYxMCwgCisgICAgOTI0ODMsIDc1MTQsIDk4MzM2NywgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAogICAgIDIxOSwgMCwgMCwgNjkyLCA0MzU4OCwgNzQ0MzMsIDQxNjM1LCA0MzI0MSwgOTY4OCwgNzE0NywgOTUzNSwgMCwgOTM5OTEsIAogICAgIDAsIDY0NTMwLCAwLCA2NDYxMCwgMTE4MDQsIDAsIDcxNDksIDc0NTMsIDAsIDgwMTMsIDAsIDkyMzAxLCAwLCA4ODk1LCAKICAgICA1MjUzLCA3MDAyNSwgNTQ1OCwgMCwgMjg2NiwgMCwgMTI3ODYwLCA2NTExMSwgNjg0MzMsIDY3MDAsIDEyMDQ4NCwgMCwgCi0gICAgMTIwNTgzLCAwLCA4OTYyLCA3Nzk2MCwgOTY0MSwgNDM2OTQsIDcwNTksIDk4MzY2OCwgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIAotICAgIDYzODI2LCA2Nzk3MCwgMTE4OTQxLCA2NDM5MiwgMTk0NzM1LCA5ODM2NzgsIDI4NDQsIDk4MzkzMiwgNDE5NzQsIDAsIAotICAgIDEyMTM5LCA2Nzk3MSwgMCwgMCwgMzM1OCwgNjUyOTUsIDAsIDMxMDQsIDE5NDczNCwgMCwgMTk0NzY1LCA5ODMyMjcsIAorICAgIDEyMDU4MywgMCwgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCA5ODM2NzcsIDAsIDk2MDQsIDc4NzAwLCA3NDQxLCAKKyAgICA2MzgyNiwgNjc5NzAsIDExODk0MSwgNjQzOTIsIDE5NDczNSwgOTgzNjg3LCAyODQ0LCA5ODM5NDEsIDQxOTc0LCAwLCAKKyAgICAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIDE5NDc2NSwgOTgzMjMzLCAKICAgICA1MzA4LCAwLCAyOTAsIDAsIDAsIDI4NjIsIDI3OTIsIDE5NTA4OCwgOTgzMDcwLCAwLCAzMjY4LCA2NjU5MSwgMCwgNjU1MiwgCiAgICAgNDIzNjcsIDcwMzUsIDEyMDU1OCwgMCwgMCwgMTgxNCwgMCwgMTAyNDAsIDkyMzM4LCA3NDMwNSwgMCwgNzQ1MjgsIDY1OTAzLCAKICAgICAwLCA0MjY0NiwgNzYwNiwgMjU5MSwgMjgzNywgNDM0MSwgNzc5NTYsIDY0NDgyLCAxMjczMzcsIDgxNjMsIDY1MjcwLCAwLCAKICAgICA3NzkzMiwgMCwgOTExMiwgNzQ0MzEsIDg2MywgOTQ5MCwgMTE5ODk4LCAxMjgzNDksIDQzMzIzLCAxMjA1MTMsIDExOTg5NywgCiAgICAgOTA3MSwgMTI3MzMzLCAwLCAzNjU0LCA3Nzg5LCA5NjM3LCAwLCAyNTM1LCA2NTUwNCwgNzY1MywgNDA5OTMsIDExOTg5OSwgCi0gICAgNjY1ODcsIDE5NTA5OCwgMCwgOTI0MDEsIDk4Mzg4NSwgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAwLCAxMDYyOSwgMCwgCisgICAgNjY1ODcsIDE5NTA5OCwgMCwgOTI0MDEsIDk4Mzg5NCwgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAwLCAxMDYyOSwgMCwgCiAgICAgNzQwODgsIDMwNTYsIDEwODIzLCAxMjg3OTcsIDEyNzMyNywgODc2MiwgMTA1MDgsIDY5Njg5LCA3Mzc3MCwgNDM5NjksIAogICAgIDQzMTkzLCAxMDczNywgMzQ2MywgOTgzMDY1LCAwLCA2NjYzMywgODY5NSwgNDgxNSwgMTEzMjIsIDU4MTEsIDEyMzQ1LCAKICAgICA3MDQ5LCAxMTk5MTEsIDUxOTUsIDE5NTA4MSwgMCwgNjY2MzksIDAsIDAsIDAsIDEyODA0MSwgMCwgOTIzODUsIDEyNjIsIDAsIAotICAgIDY1NjEsIDE5OTM5LCAwLCAwLCAxMjg1MzUsIDExOTkwNiwgMCwgMCwgOTgzMDk3LCAwLCA5ODM2NTgsIDExOTkwNywgCisgICAgNjU2MSwgMTk5MzksIDAsIDAsIDEyODUzNSwgMTE5OTA2LCAwLCAwLCA5ODMwOTcsIDAsIDk4MzY2NywgMTE5OTA3LCAKICAgICA2NDYxMiwgMTE5OTEsIDAsIDAsIDAsIDE1MDIsIDkxNzU2OCwgMCwgOTEwNywgMTI3MzE2LCA1NzAyLCAzNjU1LCA2NzY2MSwgCiAgICAgODQzMCwgMCwgNzQxMzIsIDEyMDc1OCwgMCwgNzQwNTcsIDk2MDMsIDAsIDUyNTQsIDEyMDc0MiwgNzcyNCwgNzQzODgsIAogICAgIDY4Mzc1LCAxMDc5NiwgNTEyOSwgMCwgMCwgNTkwLCA3NTc5LCA1NjE0LCA1ODkzLCA5MjI4MCwgMTE3MjAsIDkyNDk2LCAKQEAgLTE3ODI3LDE3ICsxNzg0NiwxNyBAQAogICAgIDAsIDY1NTU4LCA2NTk0NiwgODExMywgNzA4NywgNTI1NSwgMTc4NiwgNjYxLCAwLCAwLCAwLCA3NDQyMywgNzEzNDUsIDU4NiwgCiAgICAgNzQ0MTQsIDY0MzU5LCAxMjY3LCAxMjgyNjksIDY1NDY4LCAwLCA2NTczMSwgMCwgMTI3MTc5LCAzNjIxLCAxMjA0NzMsIAogICAgIDY2NjY2LCA2NDIxMSwgMCwgNjU2MiwgMTI5MjgsIDAsIDEyMjgsIDY1NDkwLCAxMTM4MywgMCwgMCwgMCwgMTcxNCwgCi0gICAgNzQ0MDYsIDEyNzgzMSwgMCwgOTgzOTEyLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgMTIwNjk0LCAKKyAgICA3NDQwNiwgMTI3ODMxLCAwLCA5ODM5MjEsIDAsIDY2MjI1LCAwLCAwLCA0MjY2MCwgMTE0MzYsIDIwNzAsIDY0LCAxMjA2OTQsIAogICAgIDAsIDEwMjkxLCAxMDMyMywgMjgyNiwgMCwgMCwgMCwgNDIwMDgsIDk3MDgsIDQyNzEwLCAwLCA0MjAxMSwgNDE5OTksIAotICAgIDkyMTY0LCAxMjIwNiwgNTgzOSwgMTcwMiwgMTI0MCwgNzQwNjUsIDYyODYsIDAsIDk4Mzk2MCwgNjU4MzMsIDc3ODQ4LCAwLCAKKyAgICA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCA5ODM5NjksIDY1ODMzLCA3Nzg0OCwgMCwgCiAgICAgMTc2NSwgMCwgMCwgNjU1ODgsIDAsIDAsIDAsIDg0MDEsIDAsIDQyMDE0LCAwLCA3MDMwLCAxOTQ3MDQsIDEwNDc5LCAKICAgICA2NDk1OSwgMjg1MiwgMCwgMCwgMCwgMCwgMTI4NTg2LCA5MTc5NTEsIDY5NjMsIDAsIDEyNjY3LCA2NDU0MCwgNzQ3ODYsIAogICAgIDEwMTQ3LCAxMjkzNSwgMTI3NTY4LCAxMjY0ODMsIDAsIDAsIDAsIDc4NzU3LCAwLCAwLCAwLCAwLCA5OTk0LCAxMjQ2NywgCiAgICAgMjg2NCwgNjQ3MTksIDExNDgsIDEwNDM1LCAxMTQ2MiwgNDE2NzUsIDcwODQsIDI3NjUsIDAsIDQzMzgyLCAwLCAxMjA3MTksIAogICAgIDEyODE4OCwgOTI1MTYsIDY2NjYyLCAwLCA3ODEzMywgOTM2NCwgMTk0Njg1LCA3NDQxNiwgMCwgMCwgNzc5ODgsIDI2MywgCi0gICAgMTA0NDksIDQxMjg4LCAwLCA0MTgzOSwgNzgzODcsIDk4MzczMywgNzc5ODYsIDAsIDY5MzEsIDY5NzIyLCA2NDM1NSwgCisgICAgMTA0NDksIDQxMjg4LCAwLCA0MTgzOSwgNzgzODcsIDk4Mzc0MiwgNzc5ODYsIDAsIDY5MzEsIDY5NzIyLCA2NDM1NSwgCiAgICAgNzE3NywgNzAxMDUsIDAsIDAsIDAsIDQyNjIsIDEwMjg1LCAxMDcyMiwgNDIwMjAsIDEyNjU3NSwgNjgwNiwgNjk5MiwgCi0gICAgNDIwMTksIDAsIDQxMjkwLCA5ODM3MDcsIDc1MCwgMCwgNzEzMDQsIDEwMTYzLCA2MzkxMywgNzEzMDAsIDcwMzIsIDU5NTQsIAorICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzE2LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKICAgICA2NDkzMSwgNDMxNCwgMCwgMTk4LCA2ODQ1MywgNzMwLCAxMjAwOTQsIDYzOTA3LCA3Nzk5MywgNzg4OTEsIDEzMTY1LCAKICAgICA3MTA3LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgNzgwMTUsIDEyODc4NCwgNDEzNzgsIDExMDA4LCA2OTM4LCA3MDAyNiwgCiAgICAgOTI2MzcsIDIwOTcsIDY2MjQ2LCAxMjA1NjAsIDAsIDAsIDAsIDM4OTIsIDY4NjMyLCA2OTY0MiwgNjcxMiwgNjYwNDUsIApAQCAtMTc4NDUsMzEgKzE3ODY0LDMxIEBACiAgICAgNjk2NjksIDQzMjU0LCA3MzgzMSwgMCwgMTAyOTMsIDU5NTIsIDEyODEsIDQzNzQ3LCAwLCAwLCAxMDY3NywgNjA0LCAKICAgICA0MTA5NywgOTE4MiwgMTg1OSwgMCwgOTI2MDMsIDM0MjUsIDEyNzQ4OCwgMCwgMjgzNiwgMCwgMCwgOTcwNywgMCwgNDMyMDIsIAogICAgIDAsIDAsIDY1MTk5LCAxNzM4LCA5MTc4MTgsIDEyODE1OCwgMjgzMiwgOTI3MDIsIDk2NzAsIDEyOTM3LCAwLCA2NjM3NCwgCi0gICAgOTE3OTU2LCAwLCAyODIyLCA2ODEyMiwgNDQzNiwgOTI1MTksIDk4MzcxNCwgNzM3NTIsIDAsIDY0ODcyLCA5MjM0MCwgCisgICAgOTE3OTU2LCAwLCAyODIyLCA2ODEyMiwgNDQzNiwgOTI1MTksIDk4MzcyMywgNzM3NTIsIDAsIDY0ODcyLCA5MjM0MCwgCiAgICAgMTMzMSwgMCwgMCwgMCwgMTI3MDgsIDAsIDUwOTAsIDUwODksIDEyNzk3NywgMCwgMTE5MTA5LCAwLCAxMjg2ODEsIDMxOSwgCiAgICAgMTE4ODQ3LCA0MzQ3OSwgOTQ3NywgMCwgMCwgNTA4NywgOTIzMjUsIDc2NDAsIDk2LCA1MDg2LCAwLCA5MjM3OSwgMCwgCiAgICAgNTA4NSwgNjQyODYsIDkyNjY1LCAwLCA0MTQyMiwgMCwgMTE5OTAxLCA0MjM1NiwgMzc3MiwgMCwgMCwgNTAxMSwgMCwgMCwgCiAgICAgMTI2NTg3LCAwLCAxMjcxNjUsIDEyNzI0MSwgNjY3NywgNzYwMSwgMCwgNTkxLCA2NDQxOSwgMTE4OTUzLCA5MjI2MiwgMCwgCiAgICAgMTE4OTIzLCA3MDA4NCwgMCwgMTA5MzksIDYxMDYsIDY5MzMsIDQxMjcxLCA2NzYwLCA3MTM0MywgNDUzNCwgNDEyNzAsIAogICAgIDEyODg3NiwgMCwgNjU1NzQsIDAsIDkyMjQsIDY5ODUzLCAzNjcxLCA4OTc2LCAxMjY0NzQsIDAsIDQxMjc1LCA2MzcyLCAKLSAgICAxMjgwODQsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCA5ODM3MjEsIDAsIDY3MjgsIDAsIDk3MTUsIDAsIAorICAgIDEyODA4NCwgNTUyNjEsIDc5NjMsIDYzNzEsIDAsIDU2OCwgMCwgNDEyNzMsIDk4MzczMCwgMCwgNjcyOCwgMCwgOTcxNSwgMCwgCiAgICAgODI1OCwgMTE3NTMsIDc0ODIwLCAwLCA5NjAyLCAxMTg5MTksIDQyLCAwLCA0MzY4OCwgMCwgMCwgNzQ1OCwgMCwgMCwgCiAgICAgNjUzODUsIDExOTkwMCwgMCwgMTE5NTgsIDAsIDkxNzgyMiwgMCwgNjI1NCwgNDI3MjEsIDY2MzM2LCA4MDQ1LCAxMTU1MCwgCiAgICAgMCwgMCwgOTgzNTk3LCA0Mjg1OCwgMTE3ODksIDY1ODY4LCA1NTU3LCAxMDEzMywgOTczNywgMTMxMDksIDAsIDk0NjcsIAogICAgIDU1NTgsIDg4NzgsIDEyODEzNiwgMTk1MDM2LCA3NDUxLCA2NzA2LCAxMDE0NiwgMCwgOTA4NiwgNjQ1NjYsIDAsIDY0NTg0LCAKICAgICA3NDM3LCA3NDU0LCAxMjU5NCwgMTI4NjkwLCA2ODM2MiwgNDU0NiwgNzczMSwgMCwgNzAwNDgsIDc0MjQzLCAwLCAzODA1LCAKLSAgICAwLCAxOTQ1NjUsIDQ0MDAxLCA0MTAwOCwgMCwgNjMwNywgMTk5NDksIDk4Mzc4MSwgNzU0NCwgOTgzMDQ1LCA0MzQ2OSwgMCwgCisgICAgMCwgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCA5ODM3OTAsIDc1NDQsIDk4MzA0NSwgNDM0NjksIDAsIAogICAgIDAsIDEwMTUyLCA2NDQyMiwgNjUwOTEsIDExOTExMywgNzYwMiwgNjQ3MjksIDAsIDQzNTIxLCAwLCA0MjMwMiwgNDM3MTEsIAogICAgIDQzNTIzLCA0MTQ0NywgNTU1OSwgMCwgODcwNCwgMjM5NywgNTU1NiwgMCwgMCwgMCwgOTAxMSwgOTYzMCwgOTI2MzMsIDAsIAogICAgIDkzOTk4LCA1NTA2LCAwLCAxOTExLCA2NjY1MiwgMCwgOTk2MSwgODg0NSwgNjY2OTgsIDAsIDEwNzkyLCA4ODg5LCAwLCAKLSAgICAyMDk4LCAwLCA2NDc1MSwgMCwgNjY2MjIsIDAsIDAsIDc0MzY0LCAwLCAwLCA5ODM3OTYsIDc0MzY1LCA3NTUyLCAwLCAwLCAKKyAgICAyMDk4LCAwLCA2NDc1MSwgMCwgNjY2MjIsIDAsIDAsIDc0MzY0LCAwLCAwLCA5ODM4MDUsIDc0MzY1LCA3NTUyLCAwLCAwLCAKICAgICA2NTM4NCwgNzIyMywgNDU1OSwgMCwgMTk1NiwgNDMxMzgsIDcwMjQsIDY1NzI4LCA2NDUwMSwgMTIxMCwgMTk1MDc3LCAKLSAgICA2NTE3NSwgMTAxODQsIDQzMTQwLCA0MzY1NCwgMCwgMCwgMCwgMzgsIDg1MzMsIDY2NjY5LCAxMTkxMjQsIDk4MzI4NSwgCi0gICAgOTgzNzgzLCAwLCA0MzU3LCAwLCAxMTk4MzcsIDkxNzg2MywgNzQyMzMsIDk5NjcsIDc4ODg0LCA0Mjg2MCwgMTE5ODM4LCAKKyAgICA2NTE3NSwgMTAxODQsIDQzMTQwLCA0MzY1NCwgMCwgMCwgMCwgMzgsIDg1MzMsIDY2NjY5LCAxMTkxMjQsIDk4MzI5MywgCisgICAgOTgzNzkyLCAwLCA0MzU3LCAwLCAxMTk4MzcsIDkxNzg2MywgNzQyMzMsIDk5NjcsIDc4ODg0LCA0Mjg2MCwgMTE5ODM4LCAKICAgICAxMDk0MSwgNjU3MjEsIDY5NjIsIDAsIDAsIDExOTMyNCwgMCwgMTEwMTQsIDEyNzk3MiwgODk0MiwgMTIwMDAsIDY5MjI0LCAKICAgICA5MjI2NywgMTI4NTM2LCAxMTk3NCwgOTIyMTMsIDQyNzcyLCAxMjc1MTgsIDExNjUwLCA1MDEzLCA5MjY2MywgMTI2NTgzLCAKLSAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCA5MjQ3NiwgMCwgNDM4MTksIDk4Mzc2MSwgMCwgNjQ3MTQsIDAsIDAsIDEyMTYyLCAKLSAgICAxMjEyMCwgNDM0NzYsIDk4Mzc1NywgMTEwMjQsIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIAorICAgIDY2MjEwLCAxMTg5MTQsIDY2MTMsIDkyNDc2LCAwLCA0MzgxOSwgOTgzNzcwLCAwLCA2NDcxNCwgMCwgMCwgMTIxNjIsIAorICAgIDEyMTIwLCA0MzQ3NiwgOTgzNzY2LCAxMTAyNCwgNzQ4MTEsIDY2MjI4LCAxMDU2MywgMCwgMTI3MTk2LCA0MzUyMiwgMjQ2MiwgCiAgICAgMCwgMTgzNywgMCwgNjM5NzIsIDY5NTcsIDAsIDEyMDU1OSwgNDk1MiwgNjU3MTgsIDY1ODI3LCA1NTA0LCA2NTcyMCwgCiAgICAgNjU3MTQsIDY1NzE1LCA2NTcxNiwgMCwgMTI3MDA1LCAxMjcxMTksIDMxMDksIDYzOTc1LCA3NDAyOCwgMCwgODEwNywgCiAgICAgMTE5MjM0LCAxMTI3LCA0NTUsIDAsIDYzOTY4LCAxMjc5MjQsIDM0ODMsIDExOTU5MywgMTk4OSwgMCwgNjk2NzgsIDkxMDQsIApAQCAtMTc4ODIsNyArMTc5MDEsNyBAQAogICAgIDQxODY5LCAxMjYxOSwgMCwgMTAxNTQsIDk4MzA0MywgNzQ0MzksIDIwMzksIDAsIDc0NDYsIDE2ODQsIDYzOTc5LCAxMDk3NCwgCiAgICAgNDU4LCAxMjA2MjAsIDAsIDY5NzkxLCAxMjcxNjEsIDExOTE2LCA2NTAxNiwgMCwgNjk2NzEsIDQyMTE1LCA5ODMxMzMsIAogICAgIDEyMjg4LCA3ODA1NywgMCwgMTQ5MywgNDIxMTEsIDc1NTMsIDQwOTcsIDEyODE5OSwgMTMwODAsIDAsIDY1ODA4LCA2NjEwLCAKLSAgICA2MDMwLCA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgOTgzNDIzLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAxMjgxOTIsIAorICAgIDYwMzAsIDgwNTksIDc1MDgsIDEzMTMxLCAwLCA5ODM0MzEsIDAsIDg3OTQsIDQxMjc4LCA0MTYyOSwgMTIxNTQsIDEyODE5MiwgCiAgICAgNDEyNzcsIDY0NjU4LCAwLCA2NDM4MCwgNjYyNSwgNzQzNTQsIDE5OTA0LCAwLCAwLCAwLCA2NTM3MSwgNzA3OCwgMCwgODMzLCAKICAgICAwLCA2MzY5LCAwLCAxMDk3OSwgNDE5NTMsIDAsIDQxNDM0LCA2MDYyLCAwLCAwLCAxOTkxNiwgNjkxMywgOTMzLCAxMzQxLCAKICAgICA5ODQyLCA2NzIwLCA2NTc0NCwgMCwgOTgzNTkyLCAxMjgyOTUsIDAsIDc0MDUsIDEwMTA1LCA2NTgxMCwgMCwgNDE2MzIsIApAQCAtMTc4OTcsMjMgKzE3OTE2LDIzIEBACiAgICAgNjc0MSwgNDMwNDcsIDAsIDEzMTgwLCAxMjg1MTcsIDQxOCwgOTE3OTcyLCA2NDQ5NSwgMTAyOTUsIDEwMzI3LCAxMDM5MSwgCiAgICAgNDE3NTIsIDc0MzM5LCA4NjQxLCA0MTQ0OSwgMCwgNzQxMDAsIDAsIDEwOTExLCA2OTQyLCAwLCAxMDI0LCA0Mjg0OSwgCiAgICAgNDE3NTEsIDY5Nzc2LCA4OTQxLCA5ODM1NTYsIDQ1NTQsIDAsIDkwMjMsIDExNjg1LCAwLCA5OTI4LCA3ODYxNywgMCwgCi0gICAgMTE0MzcsIDQzNzQxLCA5MjE2MywgMTIwNzAwLCA2Mzk2NywgOTgzNDc1LCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgCisgICAgMTE0MzcsIDQzNzQxLCA5MjE2MywgMTIwNzAwLCA2Mzk2NywgOTgzNDgzLCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgCiAgICAgNDMxNjYsIDAsIDExNjgwLCA5MjYxOSwgMTE2ODYsIDc4NTQ0LCA2NTIyNCwgNDU2NSwgNDY1NSwgMTE5NTUzLCAwLCAKICAgICA5MjE4MywgNjQ1MjMsIDEwMzQzLCAxMDQwNywgMCwgNjY2NzEsIDExNDY2LCAwLCAxMjgwMDMsIDQyODkwLCA3NDAxMywgCiAgICAgMTIwNTAsIDY4MjAxLCAyODYwLCAwLCAwLCAwLCA0Mjc5MiwgNTc0MywgMTA0MjQsIDEyMDY1LCA0Mjg3MiwgMCwgOTIzNDIsIAogICAgIDAsIDg4NzUsIDAsIDAsIDkxNzk5MSwgNzUzMSwgMTI4NDcsIDI0MTMsIDAsIDc4NjM1LCA5NjIsIDAsIDEyODU1LCA0MTE5NiwgCi0gICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcwNiwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKKyAgICA0MjU2NCwgMCwgMTU4MiwgOTgzNzE1LCA1NTA4LCAwLCAwLCAwLCAxMDgwMSwgNjk4NzYsIDkyMzU0LCAwLCA3MTczLCA0OTYsIAogICAgIDEwNDM5LCA0MzEzLCA2NDYwNywgNjk2MzgsIDc4NjAsIDAsIDkwNiwgNDI3OTMsIDI4NDIsIDY0MDUsIDY0NzIyLCAxMzEzMiwgCiAgICAgNzk4LCA2NDY5NCwgMTI4MDEsIDg0MDYsIDExNTMsIDkyMTczLCA2NDc4OCwgMCwgODA1NCwgOTE3NCwgMTI4NjUyLCAKICAgICA5MTc5NzYsIDk5NjQsIDc0NDA5LCA0MTYxMSwgNDY0MiwgNjY1NzQsIDExNTU2LCA5MTc5ODIsIDAsIDc4ODU3LCA0MjA4OSwgCiAgICAgNzg4NTUsIDkwMDgsIDAsIDEyNjU5MiwgMTk1MDk2LCA0MjA3OSwgOTE3OTgxLCA3NzkyNCwgNDI1MTMsIDc3OTI3LCAKLSAgICA0Mjg0MiwgNzM5ODUsIDY1Mjg1LCAxMTg5NzQsIDEyNzAwMywgOTgzNjkzLCAwLCAwLCAwLCAxMTMzNSwgNjQwNjksIAotICAgIDQyMDkzLCAzOTIwLCAwLCAwLCAwLCAwLCA0NTgwLCA0MTk2NywgOTgzNzIzLCA2NDM4NCwgOTIxNjcsIDkzOTg0LCAzMDIxLCAKKyAgICA0Mjg0MiwgNzM5ODUsIDY1Mjg1LCAxMTg5NzQsIDEyNzAwMywgOTgzNzAyLCAwLCAwLCAwLCAxMTMzNSwgNjQwNjksIAorICAgIDQyMDkzLCAzOTIwLCAwLCAwLCAwLCAwLCA0NTgwLCA0MTk2NywgOTgzNzMyLCA2NDM4NCwgOTIxNjcsIDkzOTg0LCAzMDIxLCAKICAgICA0MjAwNCwgMCwgMCwgNDIzMTcsIDQxOTk4LCAwLCA2OTQ2LCAwLCAwLCAwLCAxMjgxOTMsIDY1MjA0LCAwLCA2ODExMywgCiAgICAgNDI2OTAsIDk4ODAsIDQyMDEwLCA3NDgyNCwgNjQ1ODksIDEwMTExLCA2NDg3NSwgMTI3ODgwLCA2ODM5OSwgNDM5OTgsIAogICAgIDExMzYwLCAwLCAwLCAwLCAxMTg4MjYsIDQyMTQ5LCAwLCAwLCAwLCA2NDk0MSwgNzc5MTksIDEyMDQyMSwgMTI4MDc3LCAwLCAKICAgICA1NTI0NywgNDExMCwgNjYwMDUsIDY5NTksIDEwOTI5LCAxMTkxMTAsIDAsIDY2NzAzLCA3NzkyMSwgODYxNywgNDE5ODIsIAotICAgIDYwMjUsIDY5MjQyLCA5ODMxNzYsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgOTgzMzY4LCAxMDExNywgOTgzMTY5LCAKKyAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM3NiwgMTAxMTcsIDk4MzE2OSwgCiAgICAgOTIyOTcsIDQxNjM2LCAwLCAwLCAxMjA2ODEsIDgzMDEsIDAsIDAsIDE4NywgMCwgNjU2NjksIDEyODMzOSwgNDk2MywgMCwgCiAgICAgMTI3NTE3LCAwLCA4OTY0LCA2NTY3NiwgNzc3NSwgMCwgNDE5NDgsIDAsIDAsIDAsIDQxOTQyLCA2NTQ0OSwgMzE2MCwgCiAgICAgMTAwODEsIDEzMjI2LCA0MjEyMSwgNDI0NzUsIDQyNjYzLCAxMjgyMTAsIDQxNzY2LCAxMTkxMTQsIDY1ODgyLCA3ODg0OSwgCkBAIC0xNzkyMywyMCArMTc5NDIsMjAgQEAKICAgICAzMTAzLCAwLCA0MTc1MywgMTI4NTQwLCAwLCAwLCA3ODg0NCwgNzg4NDUsIDQxNzM5LCA3ODg0MywgNDI1MTUsIDEwOTMxLCAKICAgICA0MTc1NiwgNDMzNDcsIDQyNTYwLCA1MzkxLCA0MTc0NiwgMTE5MTQ3LCA5MjU5MSwgNDEyNTksIDU1NjEsIDY5OTMwLCAKICAgICAyNjkxLCAwLCA2NTU1MywgNzkzMywgNTU2MiwgNjk4MDAsIDEyODI2NSwgNDEyNjIsIDEyODE0NiwgNjQ0MjEsIDc0ODQ2LCAKLSAgICA0MTI1MSwgMCwgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDk4MzczMCwgMCwgMCwgMCwgOTI1MjQsIDQxMjY2LCAwLCA2NjU2NiwgCisgICAgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCA5ODM3MzksIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgNjY1NjYsIAogICAgIDEyODgzNiwgMTA1ODUsIDY1NzQxLCA0MTczNywgOTU3NCwgMjY2NiwgMCwgNDE3MzgsIDgzMSwgNDE5LCAxMzEyNiwgCiAgICAgMTA3MTYsIDAsIDQyODIyLCAwLCA2NDM0LCAwLCA2OTM5LCA3NzY2LCA2NDMyLCAxMjgxMDYsIDY5OTMyLCA5MTYsIDc2OSwgCiAgICAgNDE3NDIsIDExOTY4LCA3NDgwNSwgNjQzMywgNTU2MywgNTQ3LCAxOTQzLCA2NDM5LCA1NTYwLCA0OTk0LCA0ODcsIAogICAgIDEyNjUzNywgNDQ5NywgMzc1NCwgMTI3MDU2LCAxMjA0MjQsIDkwMzksIDAsIDQxNzc2LCAwLCA4NzE2LCAxNTk1LCA0MTYxNSwgCi0gICAgMCwgMCwgNzQyNjAsIDAsIDQyODU0LCA0MzIxOSwgMTI4NzA5LCA5ODM0NTIsIDEyMTg1LCAxMjg4NzksIDcwMDcyLCAKLSAgICA2ODM1NSwgNjgzNTcsIDAsIDQyODU2LCA4NjM0LCAwLCA5ODMzODksIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCAKLSAgICA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgMCwgOTgzNDU2LCA1Njc4LCAxMTgyMSwgMCwgCi0gICAgNjcxMSwgNDYwLCAwLCAwLCA5ODM0NTMsIDAsIDEyMDc0NywgMCwgMCwgNzgwNTAsIDExOTAyMiwgMCwgOTgzNDU0LCAwLCAKKyAgICAwLCAwLCA3NDI2MCwgMCwgNDI4NTQsIDQzMjE5LCAxMjg3MDksIDk4MzQ2MCwgMTIxODUsIDEyODg3OSwgNzAwNzIsIAorICAgIDY4MzU1LCA2ODM1NywgMCwgNDI4NTYsIDg2MzQsIDAsIDk4MzM5NywgNDIwOSwgMTIwNzAyLCAwLCA2NTg3OSwgNDE1MzgsIAorICAgIDY1NjEyLCAxMjc1NDMsIDY2OSwgNTY3OSwgMCwgNjk3ODYsIDkyNTQwLCAwLCA5ODM0NjQsIDU2NzgsIDExODIxLCAwLCAKKyAgICA2NzExLCA0NjAsIDAsIDAsIDk4MzQ2MSwgMCwgMTIwNzQ3LCAwLCAwLCA3ODA1MCwgMTE5MDIyLCAwLCA5ODM0NjIsIDAsIAogICAgIDc3ODIsIDkwNDQsIDQ5NzQsIDExNzYwLCA3ODQ5NCwgNzU3NywgNjU3MTEsIDQxOTEyLCAxMjE2LCAwLCAxMjgwNzksIAotICAgIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCAyOTMzLCAxMjI0NCwgMCwgNTY4MywgOTgzMzg0LCAwLCA3ODExOSwgMTU0OSwgMCwgMCwgCisgICAgNTc5MiwgMCwgMCwgNzg1MDEsIDAsIDI5MzMsIDEyMjQ0LCAwLCA1NjgzLCA5ODMzOTIsIDAsIDc4MTE5LCAxNTQ5LCAwLCAwLCAKICAgICAxMjAzOTgsIDU2ODIsIDYyMDYsIDg2NzAsIDEwMjU2LCA1NjgwLCA2OTkzNSwgMTAwMDEsIDEyODUxMiwgNjk3NjgsIDE0NDksIAogICAgIDEwMjQxLCA3ODI5MCwgMTI4MjI4LCAwLCAxMDU1MiwgNjQzNDIsIDQxOTIyLCAxMjg1NDgsIDg1ODQsIDY4MDMwLCA1NTY3LCAKLSAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNDgsIDEyODAyNiwgMCwgNjU3MDgsIAorICAgIDI3MTcsIDAsIDAsIDU1NjQsIDQyODg2LCA0MTkwOCwgNDI4ODIsIDU1NjUsIDk4MzI1NiwgMTI4MDI2LCAwLCA2NTcwOCwgCiAgICAgNjU3MDksIDU1NjYsIDY5ODAzLCA2NTcwNCwgNjU3MDUsIDExOTA0LCA0Mjg3NSwgNDMzNzMsIDQyNTM5LCA1OTQyLCA4NDY4LCAKICAgICAxMjA1NjEsIDEwMzYxLCAxMDQyNSwgNjU2OTcsIDY1Njk4LCA2NTY5OSwgMCwgNjY1OTgsIDAsIDY0NjY0LCAxMDY0NywgCiAgICAgNzg3MDIsIDc4NzAzLCA3ODY5MCwgNDU3LCA3ODUwMiwgNjU3MDEsIDE5MzQsIDQzMDA2LCAxMTk5MDMsIDg4MDIsIDc4NzEwLCAKQEAgLTE3OTUwLDE0ICsxNzk2OSwxNCBAQAogICAgIDExOTU3MCwgNDIyMzksIDg1MzYsIDc4NzQwLCA3ODMyNCwgNzg3MjYsIDc0NDMyLCA3MjQsIDAsIDE0NTUsIDc4NzQ5LCAKICAgICA3MTgzLCA2NDU4MywgNzg3NDcsIDY4NDQzLCA0MTc1LCA3ODc0MSwgNDM2MTQsIDY5ODAxLCA5MzksIDAsIDQzNTIwLCAKICAgICA2ODYxMywgNzQ1NjksIDkxNzk1OCwgMCwgNzg3NjMsIDc4NzY0LCA3ODc2MCwgMTA3ODgsIDYwODgsIDc4NzU5LCA3ODc1NSwgCi0gICAgMTkwLCAwLCAxMjU5MywgMCwgODE4OCwgNjQ0MDgsIDAsIDQ0MTcsIDk4MzIxMSwgOTIyNjEsIDYzNzAsIDAsIDc4MjcsIAorICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTMsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKICAgICA2ODQ0MSwgNjk2NSwgMCwgMCwgMTMyMDEsIDEyODIwNSwgNjk4OTYsIDAsIDc0MzgyLCA3Mzc4MSwgNzkxOCwgNzM5ODgsIDAsIAotICAgIDAsIDkxNzg4NCwgMTcyOCwgMCwgNDM3NjQsIDE3OCwgMTI5NzIsIDkyNjc5LCAwLCA5MTc4ODcsIDkyNTYzLCA5ODMzNzMsIAorICAgIDAsIDkxNzg4NCwgMTcyOCwgMCwgNDM3NjQsIDE3OCwgMTI5NzIsIDkyNjc5LCAwLCA5MTc4ODcsIDkyNTYzLCA5ODMzODEsIAogICAgIDAsIDc4MzI3LCAxMjA0MDUsIDY1NjkwLCAwLCAwLCAxMTkwNTQsIDAsIDkyNTIsIDkxNzg4OSwgNDY1MiwgNjgzNzEsIDAsIAogICAgIDAsIDAsIDEzMDY1LCA5OTIzLCAxMDgwNiwgMCwgMTE3NjMsIDcwMDE2LCAxMjA2ODgsIDY3MjMsIDc4MTg3LCAwLCA2OTkzLCAKLSAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzA3LCA2OTkxMSwgMTE5MTAsIAorICAgIDAsIDAsIDgzMzMsIDAsIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgOTIzMjAsIDc0MDgwLCA5ODMzMTUsIDY5OTExLCAxMTkxMCwgCiAgICAgOTI1NTksIDgyNzgsIDg5NjMsIDQwMzQsIDEyODU2MCwgMCwgNjUzNDQsIDEyMDUxNywgNDE3NDcsIDAsIDAsIDg2NzcsIDAsIAotICAgIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDk4Mzc0MSwgMCwgNzQ5MSwgCisgICAgMTI3MDcsIDkzNTAsIDY2MDM3LCAxMjgxODAsIDg4MzYsIDEyMzE1LCAxMjc0NywgODMwMCwgOTgzNzUwLCAwLCA3NDkxLCAKICAgICA4ODU2LCA3MTM2MSwgMCwgNDMxNTAsIDEyNzc2OCwgMTIwNDA0LCA2NTM4OSwgMTIwNDAyLCAxMjA0MDMsIDEwODEzLCAKICAgICAyNTkyLCAxMjg1MywgNDMyNjksIDcyNjMsIDEyMDI0NCwgNjUzNiwgMTIwMjM4LCAxMjAyMzksIDY1NTE2LCAxMjMyMSwgCiAgICAgMTIwMzkxLCAxMjAzODgsIDU1Mjg3LCAxMDAwNywgMTIwMjQ2LCA5NTg4LCAxMjAyNDgsIDE1OTYsIDEyMDM4MywgNDE5OTQsIApAQCAtMTc5ODIsMjcgKzE4MDAxLDI3IEBACiAgICAgMTE2LCAxMjk5OCwgMTIyLCAxMjEsIDEyMCwgMTExLCAxMTAsIDEwOSwgMTA4LCAxMTUsIDExNCwgMTEzLCAxMTIsIDEwMywgCiAgICAgMTAyLCAxMDEsIDEwMCwgMTA3LCAxMDYsIDEwNSwgMTA0LCA2NDM2LCA3Mzk3NCwgNTM0LCA0MTIxMiwgNzc5MzEsIDE1MzYsIAogICAgIDY0MDkzLCA3Mzk3MCwgNzc5MzAsIDEyNzE1NywgMCwgNjAyMCwgMTI3MTYsIDEyNzExMiwgMTI3NDQsIDQ3NSwgMTIwMzk0LCAKLSAgICAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgOTgzMjk5LCA4MTM0LCAKLSAgICAxMjgwMjgsIDI5MTMsIDczODcwLCAxMjcxMTMsIDE4NjYsIDAsIDE5NTA5NSwgMCwgODkyMywgMTY0NSwgMTIwNTksIAorICAgIDEzMjY2LCAxMjc4MTMsIDEyNzExMSwgMCwgNzM5MjYsIDAsIDEwNjQ1LCAxMjEyLCA2NTQzLCA5ODMzMDcsIDgxMzQsIAorICAgIDEyODAyOCwgMjkxMywgNzM4NzAsIDEyNzExMywgMTg2NiwgOTgzMjI5LCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCAKICAgICA2NjU4NSwgNzEyOTcsIDMxOTYsIDAsIDAsIDU5MzUsIDEyNTAsIDEyNzA2NiwgODE3NCwgOTc4NywgNjczMywgOTg1OSwgCiAgICAgNzkxNiwgOTg2MSwgOTg2MCwgNTI1OCwgMTg4MiwgMTg5MiwgNjczMSwgMTA4ODIsIDQwNSwgMTE0NTQsIDczOTExLCAwLCAKICAgICAxMjg3ODEsIDQxMTY5LCA4OTM5LCA0MTI0NSwgMCwgNDExNzAsIDE0NTQsIDExMzY5LCA2NDc3LCAxMjE1NywgMCwgMCwgMCwgCi0gICAgNDExNzIsIDc4NTUsIDAsIDAsIDEwNDgwLCAwLCAwLCA3NzkzNiwgODI2NCwgMTI2MTAsIDk4MzMwMCwgNjQ1LCAxMjY2MTYsIAorICAgIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCA5ODMzMDgsIDY0NSwgMTI2NjE2LCAKICAgICA3NjA5LCA0MDk3MywgNjk5NDMsIDczODMzLCA2OTk0OCwgNTgyNCwgOTg0LCA3NzkxOCwgMTA2ODgsIDU4NTEsIDAsIDc3MjksIAogICAgIDczOTgyLCAxMjA1MTgsIDAsIDE5NTA4NiwgNDMzNjksIDAsIDEyODE0MCwgNjg0MTUsIDk4MzA5MywgNDUzOCwgMTIwNDA2LCAKLSAgICA0MzE0MSwgMCwgOTgzMjA4LCA3NDIxNCwgNzM4ODYsIDAsIDAsIDExODkwMiwgNDMwMDUsIDc4NDQ4LCA5NTUyLCAwLCAwLCAKKyAgICA0MzE0MSwgMCwgOTgzMjEwLCA3NDIxNCwgNzM4ODYsIDAsIDAsIDExODkwMiwgNDMwMDUsIDc4NDQ4LCA5NTUyLCAwLCAwLCAKICAgICA5ODMxNTksIDEyOTk3LCAwLCAwLCAwLCAwLCAyMzgxLCAxMjg4MywgMTA5OTQsIDEwNTI5LCA0MTkwNiwgMCwgMCwgMCwgCiAgICAgMTI0MjUsIDEwNjYxLCAxMDg1NiwgOTYxNCwgMjQyOCwgNDE0NzgsIDg1ODIsIDEwMDY0LCA3MzkzMCwgMCwgMCwgMCwgCi0gICAgNjQ4OTYsIDExOTE2MiwgMTk1MiwgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgOTgzNDgyLCAxMTk1NjYsIDAsIDEyODA4LCAKKyAgICA2NDg5NiwgMTE5MTYyLCAxOTUyLCA5MjE4MSwgODQ1NSwgMTAwODIsIDExNTc1LCA5ODM0OTAsIDExOTU2NiwgMCwgMTI4MDgsIAogICAgIDEyMTgzLCA2MTQ1LCAxMTg5NTUsIDY0OTI5LCA5MjQzMywgMCwgOTgzMTkzLCA0MzE4NiwgNDI1MDksIDAsIDM5MjIsIAogICAgIDkxODcsIDk4MzYxNCwgMCwgMTAxOTEsIDExOTA1NywgMTE3NTIsIDMzNTMsIDkzNTgsIDAsIDcxMzY2LCA2NjY4MCwgCi0gICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjg5LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKKyAgICAxMjAwOTAsIDgyNDgsIDc5MzEsIDg1NTgsIDk3OTUsIDY4MzgwLCA5ODMyOTcsIDAsIDEyMDA4MiwgMTIwMDgxLCAxMjAwODQsIAogICAgIDQxMDI3LCAxMjAwODYsIDAsIDEyMDA4OCwgNzM2NiwgNzAxOSwgMTIwMDczLCAwLCAxMTc1MSwgMTIwMDc4LCA3ODI5NCwgCiAgICAgNjQ2NTcsIDg2NTcsIDEyMDA0OCwgODU5NCwgMTIwMDY4LCAwLCAwLCAxMjAwNjksIDEyMDA3MiwgMTIwMDcxLCAwLCAwLCAKICAgICA0MzE1NCwgNDEwMjksIDAsIDExMzMyLCA2NTM4MCwgNzcyOCwgOTQwNzcsIDExMjk0LCAwLCA2NjY2NSwgNzg1MSwgMCwgCi0gICAgODM3NSwgODY5OSwgMCwgNDI1MjQsIDAsIDkwODUsIDk0MDQxLCA3NTA0LCA5MzI3LCA2MTYwLCAxMjgwOTUsIDk4Mzg1NSwgCisgICAgODM3NSwgODY5OSwgMCwgNDI1MjQsIDAsIDkwODUsIDk0MDQxLCA3NTA0LCA5MzI3LCA2MTYwLCAxMjgwOTUsIDk4Mzg2NCwgCiAgICAgMCwgODA4OCwgMCwgNzQwMTIsIDkyNTAwLCAwLCA0NDM5LCA2OTI2LCA5ODMwNDcsIDEyOTI0LCAxMjgyMjcsIDQyMzY5LCAKLSAgICA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIDExMjk2LCA5ODMyNzUsIDAsIDAsIAorICAgIDQzNTAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgMTEyOTYsIDk4MzI4MywgMCwgMCwgCiAgICAgNjU4MjUsIDk1NzcsIDY4MTk5LCAwLCA2NDY3MCwgOTgzMTIxLCA3ODA1NiwgNjc5MywgMTEyOTUsIDAsIDc4MDUzLCAKICAgICA3Mzg3MiwgMCwgMCwgMTA5MDIsIDAsIDAsIDc4MDcwLCA3ODA2OCwgMTA0NzIsIDI5OTUsIDAsIDAsIDY0NjgyLCAyMzcxLCAKICAgICA3ODA2OSwgMTIwODA4LCAyNTksIDEwMDksIDkyMTcxLCAyNDAyLCAyMzMzLCA2NDQwLCAxOTQ3NDEsIDAsIDY1MTI1LCAKQEAgLTE4MDEwLDE5ICsxODAyOSwxOSBAQAogICAgIDEyNzA3MCwgNDEyNjEsIDExOTM2MiwgNDM2NDAsIDg2MTMsIDAsIDk0MDQ5LCA2NzM2LCAxOTUwOTIsIDQxNDkyLCAxMjAwNSwgCiAgICAgNjk5MjcsIDAsIDE4OTAsIDEyMDA1NiwgMCwgMCwgMCwgNzI5MywgNzk5MSwgMCwgMTA1NzgsIDAsIDc4MDc2LCAxOTQ3MzgsIAogICAgIDc4MDc3LCA2OTkyOCwgMCwgNzg4MDAsIDkyNjUzLCA2NDQ0NSwgNDI2NjgsIDY2MzUsIDAsIDYxNjQsIDY1MTcwLCAwLCAwLCAKLSAgICA3Njc2LCAxMTY2NCwgMCwgOTgzNjQ5LCA2OTcwNywgMCwgMTE4ODEyLCAwLCAwLCAxMjgwNDUsIDkxNzUsIDExOTI1LCAKKyAgICA3Njc2LCAxMTY2NCwgMCwgOTgzNjU4LCA2OTcwNywgMCwgMTE4ODEyLCAwLCAwLCAxMjgwNDUsIDkxNzUsIDExOTI1LCAKICAgICA3ODA0NSwgOTA4OCwgMCwgNjQ1NDUsIDEzOTYsIDAsIDc1NDYsIDM4NDcsIDEyNzE3NywgMTI3ODM1LCA0OTg1LCAxMzI4OCwgCiAgICAgNjcyLCA4MDk4LCA0MzE5NiwgMTk0NzQ2LCA5ODMwOTYsIDEyODEyNiwgNDI2NTUsIDc0MDQzLCA2NTA3MiwgMTU3NywgCiAgICAgMTE3NzIsIDEzMDQxLCA1OTI4LCA0NTI1LCAxMDY1OCwgNjU5MTEsIDEyNjYsIDEwMTgwLCAwLCAxMjg1ODQsIDEyNjIyLCAwLCAKICAgICAwLCAwLCAxOTQ3MTQsIDEyNzEzOSwgMTMzMTAsIDc3MywgMTk5MzMsIDE1MzksIDAsIDEyNjk4MywgNDI3MzEsIDY3OTcyLCAKICAgICAwLCAwLCAwLCAzMDUxLCA1ODYyLCA3ODIzLCA5MjQ3OCwgMCwgMTIwNDExLCAzMjUwLCA0Mzk5MSwgNjk2ODcsIDY2NjQ5LCAKLSAgICA5NTEwLCA2NjIzNywgOTgzMjk0LCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAzNTA1LCA4NzA3LCAKKyAgICA5NTEwLCA2NjIzNywgOTgzMzAyLCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAzNTA1LCA4NzA3LCAKICAgICA5MTc5NjgsIDY3MjUsIDEyODAxMywgOTE3OTcxLCA5MjMxNCwgMzQ3MSwgOTE3OTcwLCA1NDc5LCA4ODIsIDY2ODYsIAotICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDk4MzI5OCwgOTI2OTYsIDAsIDAsIDAsIDEyODUyMywgMzIyNSwgCisgICAgMTE5NTg0LCAxMTYxMywgMTIwNzcyLCA0Mjc1NCwgMCwgOTgzMzA2LCA5MjY5NiwgMCwgMCwgMCwgMTI4NTIzLCAzMjI1LCAKICAgICA5MTc5OTYsIDQ0MzMsIDQxMTU2LCA0Mzk3MywgNDMxNzMsIDE0NDMsIDQzODEsIDAsIDAsIDEwOTI2LCAxMTc1NiwgMTE3NTcsIAogICAgIDY0ODc5LCA5MTc5NDksIDkxNzk1MCwgMTI3ODQ4LCAxMzIyNywgMCwgMTAwMjEsIDUxNjAsIDEzODcsIDAsIDkxNzk1MywgCiAgICAgNDE0MTgsIDAsIDY1OTE0LCA2NzIxLCAyMTcsIDkxNzk1NSwgOTE3OTYwLCA5MTc5NjEsIDEwNDQzLCAxMDc4OSwgNDExNTgsIAotICAgIDExOTI1NywgNDI3NCwgOTgzMjkyLCA0MTQ4MywgMCwgNDEyNTAsIDAsIDQyMTc5LCAwLCA1OTMxLCAxMTc0NCwgNjkyMzIsIAorICAgIDExOTI1NywgNDI3NCwgOTgzMzAwLCA0MTQ4MywgMCwgNDEyNTAsIDAsIDQyMTc5LCAwLCA1OTMxLCAxMTc0NCwgNjkyMzIsIAogICAgIDAsIDQxMjUyLCA2NjY4MiwgMCwgMTE5NjM3LCA0MTI0OSwgMTM2NiwgNjQ2MzUsIDY1MDQ3LCAxMjQ2NiwgMCwgMCwgNDM5NywgCiAgICAgMTI4MDM3LCAxMjgzMzYsIDQxMjk2LCA5NTQ1LCA0MTI5MSwgMTI4MDQ5LCAwLCA0MTQ4NSwgMzUxMSwgNDEyODIsIDU5MjMsIAogICAgIDEwNDAwLCAwLCAxMjg4MTgsIDc2MCwgMCwgMTIwODgsIDU3ODYsIDAsIDQyMjU2LCAxMTk4NjksIDExOTg2MCwgNDE3LCAKQEAgLTE4MDMyLDE1ICsxODA1MSwxNSBAQAogICAgIDExOTU3NiwgMCwgMCwgMTM3NSwgNjY3MDUsIDQzNTczLCA2NTI2MCwgNDIwNjMsIDAsIDQyODExLCAxMDMxMiwgNjk4NDUsIAogICAgIDEyMDc5NCwgNzg0MCwgMCwgNDM2MzAsIDEwMjUyLCAwLCAxMjgxMDQsIDQzMTg1LCAwLCA0Mzk2LCAwLCAxMTk4ODAsIAogICAgIDEwNzY5LCA5Njc2LCAxMTkwNDEsIDAsIDk3NTMsIDAsIDg5NDQsIDAsIDAsIDEwNDczLCAwLCAwLCA2MDcyLCA0MzAyNSwgCi0gICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQzOSwgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKLSAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3NzMsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKKyAgICAxMDI5OSwgMCwgMCwgMTIwNjA4LCA2NjMyNiwgOTgzNDQ3LCAxMjc3OTQsIDAsIDQzODExLCA5MzMwLCAxMjA1OTYsIDcyMjIsIAorICAgIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDk4Mzc4MiwgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgNzgzNDMsIDAsIAogICAgIDc4MzQ3LCAwLCAwLCA3NTY1LCA2NjM2MywgMTI5NTIsIDY0ODA2LCA0MzE4MCwgNzc5MjgsIDc0MTQsIDc3OTI5LCA0Mzk4MiwgCiAgICAgNzQyODgsIDYyMiwgNzQwMjMsIDg4NSwgNDM0MDUsIDE2MDIsIDAsIDAsIDg1MiwgMCwgMTIxNjAsIDAsIDEwMjEyLCAKICAgICA2NTQzNSwgMCwgMTIwNzEsIDk2MDksIDEyMTU2LCA5MTc5ODMsIDkxNzk4NCwgNDM1ODYsIDExMDM1LCAxMDQxMSwgCiAgICAgOTE3OTg4LCAxMDI1NSwgNjcxMCwgMTAyNzksIDQxOTQsIDEwMzc1LCA3MzkwMCwgMCwgNDMxNSwgMTI2NDQsIDEyNzUxNiwgCiAgICAgNzc5MzcsIDQzNjM5LCA0MzM0MywgNzg3NzcsIDkxNzk5OCwgMTE1MDEsIDQxMTc3LCAxMjg2ODksIDAsIDkxNzc5MiwgMCwgCiAgICAgOTI0MTMsIDg3MTUsIDAsIDQxMTc5LCAwLCA0MzMxMywgMCwgNDExNzYsIDAsIDk5NCwgMCwgODQ1MiwgMTI3MTAzLCAKLSAgICA3Mzk2NiwgMCwgMCwgNTkyMSwgMCwgMjU5NywgMCwgNTkyMiwgMTE4OTAzLCA3Nzk0MywgNDE4NiwgOTI1MzEsIDEyNzEwNiwgCisgICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMTk5NjcsIAogICAgIDEyNzEwNSwgNjcxOCwgMCwgNDQwNiwgNzQ2MDEsIDg0ODAsIDkxOTIsIDk3NDcsIDEyNjUzMCwgNDQxMywgOTIxOTYsIAogICAgIDQyMjY4LCAzMTk4LCA1OTI0LCA1OTIwLCA5MjQ2OSwgNjkyMSwgNzgwODEsIDc0MDA3LCA0Mjg2OSwgODQxOCwgMTE2ODEsIAogICAgIDQzMTY5LCAxMDE3NiwgMCwgNzQyLCAwLCAyODkzLCAxMDc3MiwgNjUyNzYsIDU5MzcsIDE5MTQsIDI1NTMsIDExNjgyLCAKQEAgLTE4MDYzLDcgKzE4MDgyLDcgQEAKICAgICA3ODMwLCAxMTY1MSwgMTMwOTMsIDY0MDAyLCAwLCA2NTc0MiwgMTI4NzQsIDExOTU5NywgMTE1OTAsIDAsIDc0MDQ4LCAKICAgICAxMjgzNTAsIDg1OTUsIDAsIDkxNzk0NywgNDM3MDMsIDEzMDk3LCAwLCA2NDY0MywgMTMyODMsIDEyNjk3LCAwLCAxMjM4MSwgCiAgICAgMzQ4OCwgNTkzMywgMTAwMzMsIDczNzM4LCA2NjI0MSwgNjU1NzAsIDAsIDEyMjk3LCAxMTkxNTMsIDE5NTUsIDAsIDUzNDksIAotICAgIDQyNTM4LCAwLCAwLCA3NDExLCA5NDYyLCA5MTc1NTQsIDAsIDAsIDAsIDQyNzM2LCAwLCA1NzU2LCA5ODMyMTksIDc2MzgsIAorICAgIDQyNTM4LCAwLCAwLCA3NDExLCA5NDYyLCA5MTc1NTQsIDAsIDAsIDAsIDQyNzM2LCAwLCA1NzU2LCA5ODMyMjEsIDc2MzgsIAogICAgIDQxNjQyLCA0Mjc2NCwgMCwgNDMxMDksIDc2MzcsIDU3NTIsIDc0MDM3LCAwLCA3MzgzMiwgMTI4ODI3LCAxMjA2MzUsIAogICAgIDEyODIzMSwgNzgzMzQsIDAsIDc2MzYsIDY1MTcxLCA5MTI0LCAwLCA3ODg5MiwgMTIwNzk4LCAyOTEsIDAsIDAsIDIwMjcsIAogICAgIDY2MjMwLCAxMDA4MCwgNzgxMzYsIDEwNDAzLCAwLCA0NjQwLCA2NDcxMywgMTAyMjQsIDEyMDQyOSwgNDI1MTIsIDEyMDQzMSwgCkBAIC0xODA3NSwxNyArMTgwOTQsMTcgQEAKICAgICA3ODI3MCwgMTI3OTgyLCA5ODMxNzIsIDY0NzI4LCAwLCA3ODY3MywgNzg2NzQsIDE2NTksIDkxOSwgNDI3ODQsIDE2NzEsIAogICAgIDE5NTA4OSwgNjA2OSwgOTIxOSwgMTI4NTU4LCAxNjYxLCAxMzEyMCwgNjM3ODQsIDY5ODE5LCAxMDE0MCwgOTcxMywgCiAgICAgMTE5MTQzLCAwLCAwLCA5NDA1MCwgMjMwNiwgMTA0ODUsIDExODk0MywgNjA2OCwgMTA2MTIsIDE5NTA5OSwgMTE5NTY3LCAKLSAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgMCwgMCwgMCwgMTAyMjksIAorICAgIDE5NTEwMSwgOTI1NjEsIDQxNDYyLCAxMjA0NzAsIDE5NTA3OSwgNTQyMiwgMTI4MjM0LCA5ODM2MjksIDAsIDAsIDEwMjI5LCAKICAgICAxMDYzNSwgODI2LCAxMjgwODEsIDE5NTA4MiwgMTk1MDg1LCAxOTUwODQsIDE5NTA4NywgNjQ4MywgOTIyMTEsIDE4MDgsIAogICAgIDc4NDgsIDAsIDgxMDAsIDc4MjI3LCA3ODY2OSwgNzg2NzAsIDEzMzAxLCA3ODY2NywgOTY2NywgNzg2NjUsIDc4ODcyLCAwLCAKICAgICAxMTAwMywgOTkwNCwgMCwgMCwgMTIwNjkwLCA5MTQ0LCAxMDkyMSwgMCwgNzg2ODAsIDk4NDAsIDY1MTMxLCA3ODY3OCwgCiAgICAgNzc4NDEsIDEwMzEzLCAwLCAwLCA2NDMyMCwgMTAyNjUsIDc4Njg2LCAxMDk2MiwgNzg2ODQsIDQzMDA4LCA4OTQ1LCAKICAgICA3ODY4MywgMCwgNDEsIDE5NTA3MiwgMTc5MiwgMTIwNTE1LCAxOTUwNzMsIDg2NTUsIDE5NTA3NSwgOTI1NDQsIDc3OTUxLCAKLSAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCA5ODM2OTQsIAorICAgIDEyMDY2LCAwLCAzODUsIDQxNTIsIDI1ODUsIDEyNzgwNCwgMTE5MDY4LCAzMTI2LCAwLCA3NDEzNiwgMTA5NTcsIDk4MzcwMywgCiAgICAgNDMyNTgsIDExOTExNiwgMTI3ODczLCAxMzE1NywgMCwgOTE3NTQ0LCAzNTcwLCAwLCA3NDQzLCAwLCA0NDAwNiwgNjk5NywgCiAgICAgNjgwMDQsIDEyNjYzMSwgNzg3OSwgODczOSwgMTEwNzUsIDAsIDY1MjE2LCAwLCA2OTc5NSwgMjU5MywgODQ2MywgNzgxMCwgCiAgICAgOTE3ODYyLCA3ODM5LCAxMTk5MTMsIDc4ODA2LCAxMTk5MTIsIDk2OTEsIDQ0MTEsIDc4ODAyLCAwLCAwLCA0MzQ0MiwgCi0gICAgNjk4NTEsIDY1MjU0LCAxMDA2NiwgOTgzODgwLCAwLCAwLCAwLCAxMzA2MSwgODAxNiwgNzg2ODcsIDE5OTMyLCA2NDgzMSwgCisgICAgNjk4NTEsIDY1MjU0LCAxMDA2NiwgOTgzODg5LCAwLCAwLCAwLCAxMzA2MSwgODAxNiwgNzg2ODcsIDE5OTMyLCA2NDgzMSwgCiAgICAgMCwgMTE5OTIzLCAxMjM5MCwgMTE5MTcxLCAxNjM0LCA2ODExNSwgMCwgMTEwNTYsIDk4MzU3NCwgMTE5OTI1LCAwLCAKICAgICA0MTE2NSwgMTEzMjgsIDEyNDUwLCAwLCA0MTE2NiwgMCwgMTI0NTYsIDExOTkxNCwgMTcxLCA1OTQxLCAxMjQ1MiwgCiAgICAgMTk0NzA5LCAxMjQ1OCwgMTI1MzEsIDc4Nzc5LCA0MzAxMywgNjM4MDAsIDc0MTYyLCAxMjc1NjksIDEyMDQ4MywgOTk2OSwgCkBAIC0xODEwMCw3ICsxODExOSw3IEBACiAgICAgMTMyNDQsIDEyMDQ2NiwgNDIxNjcsIDc0MzUsIDc4MTkzLCA1MzgwLCAxMTkwODYsIDY5MjI1LCAxMTU1LCAxMTM2NSwgCiAgICAgNDMxMjYsIDc3OTcyLCAwLCA2NTY4NCwgMCwgNTYwMSwgNjUxOTIsIDQyNzY1LCA2Mzc1MiwgMCwgNzk4NywgMTI4NTQzLCAKICAgICAxMTcyLCA2OTc5OSwgNjc4NiwgNDM2MDEsIDEyMDQ3NiwgNzQxMjYsIDU2MDMsIDAsIDQ0NzMsIDAsIDE5NDgyMywgMCwgCi0gICAgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMTI3Mzg0LCA1MzQ3LCA2OTgwMiwgOTgzNjIzLCA3Mzg2OCwgMTE4OTQ0LCAKKyAgICA2NTM0NywgNjUzNDYsIDY1MzQ1LCAwLCAxMjczODQsIDUzNDcsIDY5ODAyLCA5ODM2MzIsIDczODY4LCAxMTg5NDQsIAogICAgIDEwNTg4LCAwLCAwLCA2Mzc1NSwgMCwgNTM0MywgNzg0MjIsIDEyMDY2MSwgNDU1NSwgNTM0MSwgMCwgNzAwNzEsIDEyODY3MCwgCiAgICAgNTM1MSwgNzg2NzUsIDQzMTA0LCA2NTI0NCwgOTE3ODkyLCA2NDU0MSwgNDI1MTksIDc0NDcyLCAwLCAwLCA3NDc2NSwgCiAgICAgOTE3ODg4LCAxMjc1MTAsIDY2MzgsIDAsIDY1MTEzLCAyNzEsIDc0MTgwLCA2NTM3MCwgODgzNSwgNjUzNjgsIDEyNjUzLCAKQEAgLTE4MTEwLDE0ICsxODEyOSwxNCBAQAogICAgIDAsIDQ5MTYsIDAsIDM4MCwgMTA5NTgsIDY2NTYzLCA3Nzk1NSwgNjk3NzMsIDk3NzMsIDEzMTY3LCAxMjkxOCwgNDEwOTYsIAogICAgIDczOTgwLCA2OTI0NSwgNzgyNTQsIDkxNzg5MywgMTA2ODQsIDAsIDkxNzg5NiwgMCwgNzk0NiwgMTI1NDEsIDgxODIsIAogICAgIDY3NTg2LCA2OTc4MCwgMCwgMCwgMCwgMCwgOTAwNSwgMTIyNSwgNjYzMCwgMCwgMCwgMCwgNjgwMTEsIDg4NDcsIDAsIAotICAgIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgOTgzMjA2LCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAKLSAgICA5ODM4NDksIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDQzNzUxLCA3NDIwMCwgNDk3MCwgODc2NCwgCisgICAgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCA5ODMyMDgsIDkyNjA5LCAwLCAwLCAzMTI3LCAyNTk1LCA2NTcxMywgNDIwMTMsIAorICAgIDk4Mzg1OCwgNTYwNywgNDEwODksIDAsIDAsIDc0MjU2LCAyNjY1LCAxMTMwNCwgNDM3NTEsIDc0MjAwLCA0OTcwLCA4NzY0LCAKICAgICAxMjA0NTksIDg5MzQsIDkyNzI2LCA0MTU2NiwgNDQ5MiwgMCwgNjUwMTEsIDQxMDkwLCAwLCAwLCAxMTg4LCA3MjU0LCAKICAgICAxMTAwLCAwLCAxMjgzMDEsIDQxMDgxLCAyOTEyLCAxMTc0OSwgNjk3OTIsIDAsIDY4MDE5LCAzNTcyLCAxMDAyMywgNDk1OSwgCi0gICAgMTMwNzksIDAsIDk4MzI2OCwgOTcyOSwgMCwgMCwgMCwgNDMzNjEsIDAsIDAsIDExODAzLCA3OTk2LCA5OTA3LCA0MTQ1MCwgCi0gICAgMTMzMDQsIDEyODI5MCwgMTI3MjYwLCA0MTQ1MSwgMCwgMTEwOTUsIDgyNzMsIDEyNzUzMywgMzQ1MSwgOTgzMzAxLCA5NzIsIAotICAgIDQxNDUzLCA5ODM0MzQsIDAsIDczODgzLCA2ODAyMiwgNzM5NDUsIDk4MzcyNiwgMjI4OCwgMTk5NTUsIDk1MzgsIDAsIAotICAgIDY5ODA3LCAwLCAwLCAwLCAwLCAxMTM5NiwgOTgzNDMyLCAxMTAxOSwgMCwgMCwgMCwgNjgwMjAsIDQxMDc4LCA3MTM2NSwgCisgICAgMTMwNzksIDAsIDk4MzI3NiwgOTcyOSwgMCwgMCwgMCwgNDMzNjEsIDAsIDAsIDExODAzLCA3OTk2LCA5OTA3LCA0MTQ1MCwgCisgICAgMTMzMDQsIDEyODI5MCwgMTI3MjYwLCA0MTQ1MSwgMCwgMTEwOTUsIDgyNzMsIDEyNzUzMywgMzQ1MSwgOTgzMzA5LCA5NzIsIAorICAgIDQxNDUzLCA5ODM0NDIsIDAsIDczODgzLCA2ODAyMiwgNzM5NDUsIDk4MzczNSwgMjI4OCwgMTk5NTUsIDk1MzgsIDAsIAorICAgIDY5ODA3LCAwLCAwLCAwLCAwLCAxMTM5NiwgOTgzNDQwLCAxMTAxOSwgMCwgMCwgMCwgNjgwMjAsIDQxMDc4LCA3MTM2NSwgCiAgICAgMjYxLCA1OTI3LCA3NzkxLCAwLCA3MzYyLCAwLCAxMDY5NiwgMCwgNjA3MywgOTgzOCwgMTE4OTIwLCAwLCA2MDc1LCAKICAgICA5Mzk5NSwgMjgyLCAxMjY1MTAsIDY0MzcsIDc0MDc4LCAxMjgwMDAsIDk4MDEsIDAsIDc0MTc3LCAwLCAwLCAzNDc0LCAKICAgICAxMTg3ODcsIDAsIDEyMDY1NSwgNjA4MSwgMCwgNzg4NzQsIDc0MDc2LCA3ODg3OSwgMCwgMCwgMCwgMCwgMCwgODc1MSwgCkBAIC0xODEzOCw3ICsxODE1Nyw3IEBACiAgICAgNDU2NCwgMCwgMCwgNzQyNzEsIDczNzUzLCA4Mzc0LCA5ODMxNTYsIDAsIDY4MjksIDUyMjUsIDEyODgwNywgMTI3Mzg1LCAwLCAKICAgICAwLCAxMTk2MTUsIDAsIDc0NzkzLCA1NjI2LCA3MzgwNywgMTE3NzEsIDc0MDc1LCAxMjcyMzYsIDEyODAxOSwgNDI2MTQsIAogICAgIDUzNTMsIDU2MjUsIDc0MTc5LCAwLCAwLCAxMDEwLCA2NDU3MiwgNDE3ODAsIDQyNjIzLCA2NDI3NywgNjk5NDIsIDY5NTIsIAotICAgIDk4MzI2NCwgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgCisgICAgOTgzMjcyLCAxMjA3NTIsIDc4NzYyLCAyNTkwLCA1NjI5LCA2NTU1MiwgNzU1MSwgMTAzMjUsIDU2MzIsIDEwNDcxLCAKICAgICAxMjAwMzgsIDEyMDAyNywgMTIwMDI4LCAxMjAwMjUsIDU2MjgsIDEyMDAzMSwgOTcwLCAxMjAwMjksIDQ3NzIsIDI0MDAsIAogICAgIDU2MjcsIDEyMDAxNywgMTIwMDE4LCAxMjAwMjMsIDY0Mjc1LCAxMjAwMjEsIDg3ODYsIDAsIDIwMywgMCwgMCwgMCwgMCwgCiAgICAgNzgzNTAsIDAsIDY0Mzc4LCA0MjA1NCwgMCwgMCwgNTU0LCAxMTk2NDksIDExMzU4LCAwLCAxMjE4MiwgNDIwNDgsIDExMDY1LCAKQEAgLTE4MTUwLDkgKzE4MTY5LDkgQEAKICAgICAxMTY4LCA5MjUxLCA5MDgyLCAxMTk5NjQsIDY0MDU1LCA0Mjc4MSwgMzg2NiwgMTIzMjMsIDQxNTEyLCA3MzgwNSwgNjgxMjEsIAogICAgIDAsIDQxNDk0LCA5MjMxNiwgNDY2MCwgMCwgMTA0MDUsIDAsIDc4ODAzLCAwLCAwLCA0MjA0MCwgNzM5MTgsIDExOTYyNywgCiAgICAgNzk0NCwgNDE0NTQsIDEyNjA1LCAwLCA0MjIwNSwgNDE0NTUsIDIzNiwgNjQwNTEsIDc4ODY3LCA4MjE0LCAwLCAwLCAwLCAKLSAgICA0MTQ1NywgOTgzOTYxLCAxMTk1ODksIDE5NjksIDIzODQsIDgwOTcsIDkxNzg2NCwgNzQxMywgNjgwMTIsIDc4MDI5LCAKKyAgICA0MTQ1NywgOTgzOTcwLCAxMTk1ODksIDE5NjksIDIzODQsIDgwOTcsIDkxNzg2NCwgNzQxMywgNjgwMTIsIDc4MDI5LCAKICAgICA4NzY2LCAwLCA3ODA3OSwgNTg1NCwgMTI3OTc0LCAxMDU4MywgMCwgMTE5OTg5LCAwLCAxMDQxNiwgOTE3ODY5LCAzODcyLCAKLSAgICA5MTc4NjgsIDAsIDg0MjksIDAsIDExODgwNiwgMjgzOCwgMTI4ODAyLCAwLCA5MTc4NjYsIDAsIDAsIDAsIDk4Mzk1OCwgCisgICAgOTE3ODY4LCAwLCA4NDI5LCAwLCAxMTg4MDYsIDI4MzgsIDEyODgwMiwgMCwgOTE3ODY2LCAwLCAwLCAwLCA5ODM5NjcsIAogICAgIDk0MDA1LCAxMTA5NiwgMTIwODEzLCAxMDU1MywgMTY2MiwgODQ4MywgMTIwMzk2LCA0MzYwNSwgNTg5MiwgNDM0MTgsIDAsIAogICAgIDczNzQyLCA2NiwgNjUsIDY4LCA2NywgNzAsIDY5LCA3MiwgNzEsIDc0LCA3MywgNzYsIDc1LCA3OCwgNzcsIDgwLCA3OSwgCiAgICAgODIsIDgxLCA4NCwgODMsIDg2LCA4NSwgODgsIDg3LCA5MCwgODksIDExOTg2MiwgMTAzNTcsIDczODUsIDgxNzAsIDE3MDQsIApAQCAtMTgxNjcsNyArMTgxODYsNyBAQAogICAgIDEyNDcyLCAwLCA2OTg2NCwgNzY5OSwgMTIzOTMsIDAsIDAsIDAsIDc0NTE4LCA4MjIzLCAwLCA0MjYxLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxMjgzMDIsIDAsIDEyODA0NiwgNDM0MTksIDAsIDY0NTU0LCAxMDU3NCwgMzg3OCwgMCwgNDIzNTIsIDE3NTIsIAogICAgIDczNzg1LCAwLCA0MjUwNiwgMTI4NTQxLCAxMDE5OSwgMCwgMCwgNjgwMjEsIDY1OTE5LCAwLCA2Njk1LCA3MjAsIDMyNCwgMCwgCi0gICAgMCwgNDM0MDYsIDk4MzcyNywgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDQzNDc0LCAwLCA2NDQ4OCwgMCwgMCwgNjQwNDEsIAorICAgIDAsIDQzNDA2LCA5ODM3MzYsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKICAgICA3NDc4NywgMCwgNzg4NjUsIDkyMjU4LCA2NTU5NywgMCwgNzg4NjMsIDAsIDEzMDIsIDAsIDc4ODYxLCAxMTkxMzQsIDAsIDAsIAogICAgIDUyMDQsIDc0Nzc0LCA0MzQwNCwgMTE4MzUsIDAsIDM5OTUsIDY4MzYwLCA2NTYwOCwgMzcxNCwgOTIxOTAsIDAsIDAsIAogICAgIDEwOTk5LCAxMTc1MCwgMCwgNDMyNTEsIDY4NjYwLCA0MzMwMSwgMCwgMTIwNTU3LCA4MTMwLCA4NjcyLCAxMDg0NSwgCkBAIC0xODE3NSwyMiArMTgxOTQsMjIgQEAKICAgICA2MTIsIDAsIDY0NDAxLCA2NjQ0OCwgNjgzNzYsIDAsIDE2NzQsIDAsIDU4MjMsIDk4MzE2MywgMTIyODAsIDAsIDU0MCwgCiAgICAgNzQ1NjQsIDExOTAxNywgMCwgODQzMiwgMCwgMTEwNzMsIDAsIDY0MzE2LCAwLCAwLCA4MjAsIDQxNzQxLCAwLCAxMjA2NjcsIAogICAgIDAsIDY0Njg0LCAxMjY5OTIsIDMzNTksIDc4MDAsIDY5OTM0LCA2NTE3NywgNjIyNiwgMzUzLCAxMjM5NiwgMCwgMTE5NjEyLCAKLSAgICA2NDc0MiwgMTI4NjgyLCAxMjAyODIsIDAsIDk4MzQ0MiwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDc4ODQ3LCAxODg0LCAKKyAgICA2NDc0MiwgMTI4NjgyLCAxMjAyODIsIDAsIDk4MzQ1MCwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDc4ODQ3LCAxODg0LCAKICAgICA5NDgxLCA0MjQxOCwgNzAwNTksIDQxMTU3LCAwLCAxMTk1LCA2NDg5OCwgNzkyNCwgMCwgNDExNTEsIDIwMTAsIDAsIAogICAgIDQxMzI4LCA0MjM0NCwgMCwgMTI0MDksIDAsIDQzNjAsIDEyNzAwOSwgOTczOSwgMTI4NTUwLCA2OTkzMywgNzM5MjEsIDAsIAotICAgIDQyNTIxLCA4NTM5LCA5ODM3MTYsIDAsIDExODk4NiwgMCwgNDc4OCwgMCwgNjgwMjMsIDY1NzM0LCA5ODM0NDcsIDQzNzkwLCAKKyAgICA0MjUyMSwgODUzOSwgOTgzNzI1LCAwLCAxMTg5ODYsIDAsIDQ3ODgsIDAsIDY4MDIzLCA2NTczNCwgOTgzNDU1LCA0Mzc5MCwgCiAgICAgMCwgMTMwNzUsIDc0NDI5LCA5NDA2MywgNjQ1NjksIDQzNTMyLCAxMDgzNywgMjQ5MiwgMTI3MTk3LCAxMTg5MDEsIDY4NjM3LCAKICAgICA0MTEzNiwgNDM3ODUsIDExODEzLCA5NjQ5LCA0MTE1NCwgMTE5NjE3LCA1MTI4LCA0MDM4LCA0MTE0MywgNjU2MDQsIAogICAgIDY0ODU5LCA0MTU5MiwgNjc3MSwgMTY0OCwgNTQzNSwgOTE3ODM3LCA2NzM0LCA0MTM0MywgMTE5ODQ4LCA2NTQzOSwgCiAgICAgMTI3MDksIDY5ODYsIDkyMzY0LCA2ODAxNSwgMCwgNDEzNDksIDcwMDIxLCAxMjU4MSwgMTAzNzQsIDUxNzUsIDAsIDczODA2LCAKICAgICAxMDI1NCwgMCwgMTAyNzgsIDEwMjYyLCA2OTg1OCwgNDEzNDYsIDAsIDYwNywgMCwgMTE5ODUyLCAxMjg4NDYsIDEyOTIzLCAKICAgICAxMDMxNCwgMTAyODIsIDY1NDc3LCAxMDM3OCwgMTIwMjk3LCA0MDk3NiwgODI2NSwgMCwgMTE5ODM0LCA0MDk3NSwgNTg0MCwgCi0gICAgNDI4MzgsIDAsIDQwOTc4LCA5ODM4ODgsIDExOTg0MCwgMCwgOTgzMDcxLCAwLCA2NjQ0NCwgMTA1MzgsIDAsIDI1NTAsIAorICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODk3LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKICAgICAxMTk4MzYsIDY3NzksIDAsIDAsIDM1MjUsIDY4MjQsIDExODg4NiwgMCwgMCwgNTYxOSwgNjU4MjIsIDEyNjU2NywgCiAgICAgMTk0ODgyLCA3NDU1LCAwLCA1NjE2LCAxMTQ4NiwgOTY1NiwgMCwgMCwgMTA3MjcsIDU2MTUsIDAsIDEyMDU1MSwgNDIzODAsIAogICAgIDY0ODk1LCA0MzY5MywgNjY0NTEsIDgwOCwgNTQ1NSwgMTEzNDcsIDAsIDEwMjYsIDU2MjAsIDE5NDg4NywgMCwgMTEzNTAsIAogICAgIDU2MTcsIDAsIDkyMjUsIDY0NjM5LCAxMjcwNzMsIDkxNDUsIDEyODA2MCwgMTMzOCwgMTIwNTgxLCA5ODMxNTgsIDEyNzM5LCAKLSAgICA0NjAzLCAzMDg0LCA5ODMxNTUsIDkyNDg0LCA5ODU4LCA2MDM3LCAwLCAzOTc0LCA3ODIxMywgMTAyOTAsIDk4MzY5NSwgCisgICAgNDYwMywgMzA4NCwgOTgzMTU1LCA5MjQ4NCwgOTg1OCwgNjAzNywgMCwgMzk3NCwgNzgyMTMsIDEwMjkwLCA5ODM3MDQsIAogICAgIDMwODMsIDEwMzIyLCAwLCAwLCAwLCA0MTAzNiwgMCwgMCwgNDMzMjEsIDY1NjA2LCAwLCA0MTAzMiwgNDIzODgsIDAsIAogICAgIDY0NzAwLCAxMDAxMSwgMTQ0NSwgNDA5NjEsIDAsIDExOTEwNSwgMCwgNDA5NjAsIDAsIDE5NDg5MSwgMCwgNDA5NjMsIAogICAgIDY0OTUyLCAxMDQwMiwgMCwgMCwgOTIzMDQsIDEwNjAzLCAwLCAwLCA5ODMxMTMsIDAsIDY3MTQsIDEwMDgzLCAxMjcwNjksIApAQCAtMTgyMDIsOSArMTgyMjEsOSBAQAogICAgIDQxOTc2LCA5NzIwLCA5MTc2MDYsIDExNzY3LCA0MTk3MCwgMTk0NTk2LCA1ODM2LCAxMjM1OCwgMCwgNDM1NSwgOTA0OCwgCiAgICAgMTIxODAsIDY1MDI3LCA2NDY4MCwgMTMwMzgsIDQzNjk5LCAwLCA0MTQ4OCwgMTI4MDg3LCA4NTI3LCAxOTQ5MTcsIDEyMzYyLCAKICAgICAxMjQzNSwgMTIzNjAsIDQxMDUzLCAzMjY2LCAwLCAxMjM1NiwgODYxNiwgNDE0NjYsIDAsIDkyNTg4LCAxMTQ1MCwgMCwgCi0gICAgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIDkyNjA2LCA4NjMzLCAwLCA5ODM3MzYsIDExOTE4MiwgNjkyNDQsIDAsIAorICAgIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAyMzU4LCA5MjYwNiwgODYzMywgMCwgOTgzNzQ1LCAxMTkxODIsIDY5MjQ0LCAwLCAKICAgICAwLCAxMTc1OSwgMTk0OTAzLCA2MzY4LCA3NDgyMywgMCwgNDE0MjMsIDgwNzgsIDEwNTA0LCAxMjc1NTgsIDQxNjk4LCAKLSAgICA0MjIzNywgMCwgNzAwMiwgOTgzNjY5LCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgMCwgNDEwNTAsIDQxNDczLCAKKyAgICA0MjIzNywgMCwgNzAwMiwgOTgzNjc4LCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgMCwgNDEwNTAsIDQxNDczLCAKICAgICAxMDQ2NiwgMTMwOTksIDAsIDAsIDAsIDY0MzUsIDAsIDExMzYyLCAwLCAwLCA2NTM4MiwgMCwgNDE0MjAsIDAsIDM2MjUsIAogICAgIDc4MTU3LCA0MTQwOSwgMCwgNjk2MzksIDIwNDEsIDkxNzgsIDk2NzIsIDQxNDI3LCA0MzU0MSwgNDMzMTcsIDAsIDAsIDAsIAogICAgIDQxNDI0LCA5MTc1OTgsIDEyMDU0NiwgMCwgMTI4MjEyLCAwLCA0MTQxNywgMTI2MSwgMCwgMCwgMTIxMDIsIDExOTY2MiwgCkBAIC0xODIxNCw5ICsxODIzMyw5IEBACiAgICAgNDE0NjEsIDEyODgyMywgMCwgMTI3OTEyLCAwLCA4ODE5LCAxMjY2MywgMCwgNDExODQsIDc0MDE0LCAyMzIsIDc0ODM1LCAKICAgICAxMjA2NDYsIDkxNjgsIDY1Nzg2LCAwLCAwLCAwLCA5MDk0LCAwLCAxMTc1OCwgNjg0MjUsIDAsIDEwNjQsIDQyNDY3LCAKICAgICAxMjgwNDQsIDEwMTE1LCAxOTkyNCwgOTI3MTEsIDAsIDc4NjIsIDY0NTUxLCAxMzIyNCwgODUxNiwgNDE4NjIsIDY2NjUwLCAKLSAgICA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDk4MzI2MSwgMjkxMSwgMCwgNDExNzgsIDU0MjcsIDY0ODIzLCAwLCAwLCAKKyAgICA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDk4MzI2OSwgMjkxMSwgMCwgNDExNzgsIDU0MjcsIDY0ODIzLCAwLCAwLCAKICAgICAzNzg3LCA0MTE3NCwgMCwgNDE0NTgsIDAsIDQxNDYzLCA0MjQxMywgMTEyOTIsIDI0MDYsIDc3NSwgMCwgNjU1ODQsIAotICAgIDY5OTIzLCA2MDc0LCA5NjE4LCAxMjg2NjgsIDk4Mzk0MywgNDM0NDAsIDAsIDE5NDkwMSwgNDE0MzYsIDM2NTYsIDAsIAorICAgIDY5OTIzLCA2MDc0LCA5NjE4LCAxMjg2NjgsIDk4Mzk1MiwgNDM0NDAsIDAsIDE5NDkwMSwgNDE0MzYsIDM2NTYsIDAsIAogICAgIDEyMDYwMCwgNDE0NTYsIDAsIDE1OTksIDExMzMzLCAwLCA2NzAzLCA4NTEzLCAwLCAxNjEzLCAwLCA2ODQ1NiwgMTI1OTgsIAogICAgIDk4MzE5MSwgMTIwNzM0LCA3ODc0NSwgNzQ1MDAsIDQxNDYwLCAxMDE0NSwgMTA1NDIsIDk5MzcsIDc4NzQ2LCA3MDAyOSwgCiAgICAgOTkwNSwgMCwgNjU3MzAsIDAsIDEyMDM3NCwgODQyNywgMTIwMzc1LCA1NTI0NiwgMTIwMzc2LCAwLCAxMTQ5NywgNjQ2ODcsIApAQCAtMTgyMzYsMjEgKzE4MjU1LDIxIEBACiAgICAgNDEyODcsIDkyNjEwLCAwLCAwLCA0MjIxOSwgMTI4MjU3LCAwLCA0MTk4NywgNDE2NzYsIDk4MzA1OSwgMTIwODIzLCAKICAgICA5ODMxNDQsIDQxNjcwLCAwLCA5MjU5MCwgMjc5NiwgNTUyOTEsIDExNjgzLCA5OTAyLCA3NDUyMSwgNjc5ODgsIDExNDUxLCAKICAgICA5ODMxMTEsIDEyODgyMiwgNDI2MzEsIDIzNTksIDAsIDY3ODQ0LCA3NDE2NCwgNDEyMzgsIDU0OCwgMTE0MDUsIDEzMTMzLCAKLSAgICA2NDM2OCwgOTgzMjMzLCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAorICAgIDY0MzY4LCA5ODMyMzksIDEyODc5NSwgMCwgMzk3LCA0MzYyMiwgNDIxMzksIDk1NDcsIDk1OTAsIDEyODIzOCwgMTYxNCwgCiAgICAgNDM2NjEsIDY0MzU2LCA2NjMwNywgNjY1MSwgMTM1OCwgMCwgNDI4LCA5NjIwLCAxNDY2LCA3ODExMiwgMTA5ODIsIAogICAgIDExODgzMSwgMTMzMywgNzEwNCwgNDA3LCA2NDI1LCAxMjg4MzQsIDc0MjUzLCAwLCAwLCAwLCA1ODA0LCAxMTk3NiwgODU1NCwgCiAgICAgOTI3MjEsIDAsIDAsIDkwNTcsIDQyMjk0LCA0MTIxOCwgMCwgMCwgNzgxMzcsIDE4ODMsIDEwOTUyLCA4MDQ4LCA3ODE0MiwgCi0gICAgNDEyMjUsIDkyNjIxLCA0MjkxNSwgOTgzNjY3LCAxMjg2ODQsIDAsIDQ0MDcsIDAsIDY1ODA5LCAxMTkwNzQsIDE5NDgyMSwgCisgICAgNDEyMjUsIDkyNjIxLCA0MjkxNSwgOTgzNjc2LCAxMjg2ODQsIDAsIDQ0MDcsIDAsIDY1ODA5LCAxMTkwNzQsIDE5NDgyMSwgCiAgICAgODQ0OCwgNzE0MSwgNzQxODMsIDAsIDEyNjc1LCAxMjY1OSwgMCwgNDIzNjMsIDEyMDYyNCwgMTk0ODI0LCA1NTI3MywgCiAgICAgMTA3NjYsIDEyMDEyLCAyMzg2LCA2NDczMiwgOTE3MCwgOTE3ODIxLCA5MTIzLCA2NDU4NSwgMTIwNTAwLCAxMTkxNTgsIAogICAgIDcxNDAsIDEwOTc3LCAxMjczNzgsIDQxNjQsIDkwODEsIDAsIDEyMDU2OSwgNDIwNDksIDQyMDQyLCA4NzA5LCAxMjgyODMsIAogICAgIDEyNjQ3NywgMTIwNjM3LCA0MjQxOSwgNjQ3OTksIDQyMDQ3LCAwLCAwLCA4NDcwLCAxMTgwNywgNjU4OTcsIDU3NywgMCwgCi0gICAgOTgzNzUxLCA3NDMwMCwgMCwgMTI3MzA4LCA3NDg0MCwgMCwgMCwgMTI4NzkxLCA5MjIyNCwgODczNiwgMTQxNCwgNDI2NDMsIAorICAgIDk4Mzc2MCwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKICAgICA5NjgzLCA0MzQ4NiwgNzQzNDQsIDAsIDI1MzYsIDAsIDY2MzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMxNywgNjk5NDUsIAogICAgIDY2MzE1LCAyMTA2LCAxMjAyMjIsIDExMjczLCAwLCA0MzAwNCwgNzU0MSwgMCwgMCwgOTYxLCA2NDMwNywgNjYzMjQsIAogICAgIDY0OTA2LCAxMjg1OTEsIDMxMDYsIDY1OTE3LCA0MTI4NCwgMTY5NiwgMCwgODkxLCAxMjEwNSwgMCwgNDI2MjQsIDEyODAyLCAKICAgICAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAwLCAwLCAwLCAxOTQ4MjYsIDkyNjg4LCAwLCAyMzIyLCAxMjAzNzEsIAotICAgIDk4MzU4NCwgMTE0NDksIDEyODE4NywgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAxMjg3OTMsIDk4MzM5MCwgNDMyMTYsIAorICAgIDk4MzU4NCwgMTE0NDksIDEyODE4NywgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAxMjg3OTMsIDk4MzM5OCwgNDMyMTYsIAogICAgIDYwODksIDc4NjgyLCAwLCAxMjA1NzgsIDQxNzAsIDEwMjksIDEyNzc2MSwgMTI3MDM2LCAxMTkyMjQsIDQyMzc0LCAwLCAKICAgICA3NDQsIDAsIDAsIDAsIDY1ODIzLCAxMjc4MjYsIDAsIDM1NTEsIDAsIDAsIDQ2MjMsIDU1MjY4LCAwLCA0NTk4LCA5ODMxNjIsIAogICAgIDY1MTM2LCAxMjcxMzYsIDAsIDAsIDEwODUxLCAwLCA2MTc5LCA5MjYwMiwgNjE4MCwgMCwgMTE5NTIsIDEyMDc3OCwgCkBAIC0xODI2MCwxMCArMTgyNzksMTAgQEAKICAgICAyMzA4LCAwLCA3NDE0OSwgMCwgMjMxOCwgOTgzMTgzLCA2NjM2MSwgODE5OCwgMCwgNjQzNjAsIDEyNjAxLCA0MjUzNiwgCiAgICAgNjUyNjYsIDEyMDgyNywgNzQzMDcsIDkyNDYyLCA2OTcwLCA1NDA0LCA0MzMzMiwgMzY2NywgNzkzNiwgMTI5MjUsIAogICAgIDEyNjk4OSwgNjM4NSwgMCwgMCwgMTE4OTQ5LCAxMDg3NCwgNjU1MDUsIDEyODA4MywgMCwgNDIwNTMsIDIwNzUsIDQyMDU3LCAKLSAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjU3LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAotICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5MzcsIAorICAgIDExMDgzLCA0MjA1MiwgMCwgMCwgNjc2NTEsIDAsIDk2NjUsIDkyMzAwLCA5ODM2NjYsIDEzMTgxLCAwLCAwLCAwLCA3MDA4OCwgCisgICAgNzQxNDgsIDAsIDAsIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgMCwgOTQwOTYsIDk4Mzk0NiwgCiAgICAgNDExNDgsIDg2ODMsIDc1OTQsIDEyNzUxOSwgMCwgMTE5MDkwLCAxMDg2OSwgNDM0NTgsIDQxMTQ2LCA5MjQwNywgMTE0NDEsIAotICAgIDAsIDM1MTIsIDExOTYzMywgOTgzNzAwLCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgCisgICAgMCwgMzUxMiwgMTE5NjMzLCA5ODM3MDksIDgxMDMsIDAsIDAsIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAwLCAKICAgICA2OTc0MiwgNDE1NDQsIDY1MTQ2LCAwLCAwLCAwLCAwLCAxOTk0MiwgMCwgMTE4OTA4LCA3OTg4LCAxMDQzNiwgNzQyNzMsIAogICAgIDMyNzEsIDczODA0LCA2NDcxMSwgMCwgOTQwNjQsIDAsIDAsIDM4MDQsIDEzMDcwLCAxMTU1NywgNDIwNDQsIDAsIDEwOTUsIAogICAgIDAsIDM1OTksIDEyNzc3NCwgMCwgMTI4ODYxLCA4NTE0LCAwLCAwLCAwLCA3NDM0NiwgNjY2OTcsIDAsIDExNjg0LCAwLCAKQEAgLTE4MjcyLDIzICsxODI5MSwyMyBAQAogICAgIDAsIDEyNzc3MiwgMCwgOTE3NTQyLCAwLCAwLCA2NTM5LCAwLCAwLCAwLCAxOTQ4NTYsIDAsIDEyMDQ5MiwgNDExOTAsIAogICAgIDM5NzMsIDExOTM2NSwgNDU3NSwgNDExOTMsIDc5ODIsIDQyOSwgMCwgMTI3MTk0LCAwLCAxOTQ4NTQsIDY1NzkyLCAwLCAKICAgICAxMTg5NjgsIDY0MTcsIDExODkxOCwgNzgxNzgsIDAsIDE5NDg1MCwgMCwgMCwgNDkxOSwgMTA1OTAsIDEyODU1NiwgNzc1NSwgCi0gICAgMCwgMCwgNjQ1NDgsIDEyMDUwNiwgMTYyMSwgMTAyMTQsIDY1MTI2LCAwLCAxMjcwMDQsIDAsIDEyMTg4LCA5ODM2NTksIAorICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjY4LCAKICAgICAxNjE3LCA4MDUwLCAwLCA1MDE1LCAwLCAxMTkxNzQsIDQyNTkwLCAxOTQ4NzEsIDE3NTYsIDc4MTgxLCAwLCA2NTc2OCwgCiAgICAgNjM1MiwgNDE4OTIsIDAsIDc1NTUsIDEzMTAzLCA1NDA4LCAyODE3LCAxMjE0LCA2OTkxOSwgOTIzMzUsIDk4MzEyNSwgMCwgCiAgICAgMCwgMCwgMTI3MTk1LCA3OTU3LCA4Njg5LCA2NDcyMywgMTA1NiwgNDI4OTYsIDc0MTQ3LCAxOTQ4MTMsIDAsIDU1Mjg2LCAKLSAgICA3MDczLCA2NTg1MCwgMTIzMjcsIDk4MzkzOSwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCA4NDg0LCA4NDc0LCAKLSAgICA5ODMyNTIsIDAsIDcwMDc5LCA4NDYxLCAxMjgxMDIsIDEyMTUzLCAxMjc5OSwgMCwgNDM3MDksIDQzNzA4LCA5NDUxLCAKLSAgICA3NTcxLCAxMzA3MywgMCwgMCwgNjgxLCA5ODMyNDYsIDcwMywgMCwgMzI3MiwgODc4MSwgMTI4OTQsIDcwMDc3LCAxMTcwOSwgCisgICAgNzA3MywgNjU4NTAsIDEyMzI3LCA5ODM5NDgsIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgCisgICAgOTgzMjYwLCAwLCA3MDA3OSwgODQ2MSwgMTI4MTAyLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgCisgICAgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgOTgzMjUyLCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAogICAgIDkyMjg4LCA3NDQ0NiwgMCwgOTI1MzIsIDAsIDExMzM4LCAxMjA3NjgsIDMyNzYsIDAsIDAsIDY1OTI4LCAwLCAwLCA2NTAyMSwgCiAgICAgNjQ3OTUsIDc0NTc0LCAwLCAxMDA0NywgNzg4MTQsIDMyNjIsIDc4ODExLCA0MjcxMSwgMCwgMCwgNjg0NzgsIDE2MywgNTc2LCAKICAgICA5ODk1LCAxNjU1LCA3ODgxNywgNzQ1OTEsIDc4ODE1LCA3ODgxNiwgOTgzMTIyLCAwLCAwLCAwLCAxMDAzOSwgMCwgCi0gICAgOTgzOTM2LCA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCA0MTU5MSwgMTEwMzYsIDY1MjUyLCA5MjM4MiwgMCwgMCwgMCwgCisgICAgOTgzOTQ1LCA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCA0MTU5MSwgMTEwMzYsIDY1MjUyLCA5MjM4MiwgMCwgMCwgMCwgCiAgICAgNjc4NDgsIDAsIDAsIDAsIDg4ODcsIDEyNzUyMSwgNzI5NSwgMTEwMzEsIDAsIDQzMTU3LCAwLCA4OTQ2LCAxMDM0OCwgCi0gICAgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgOTgzNzAyLCA4ODEwLCA3NDQ5OSwgNjg2LCAKKyAgICAxMDQxMiwgODc1NSwgMCwgMCwgNTcxOCwgMTMyMjEsIDAsIDAsIDc4MTM1LCAwLCA5ODM3MTEsIDg4MTAsIDc0NDk5LCA2ODYsIAogICAgIDAsIDcxMzYyLCA0NjE5LCAxMTg5NTQsIDY2NTQsIDczNzY5LCA3NDQyNiwgMCwgMTIwNDAsIDY1Njg5LCAxMDEyOCwgCi0gICAgNjUxMTgsIDAsIDExOTE1MSwgNzQyMDUsIDkyNjUxLCAwLCAyNDAxLCA2ODE0NCwgODc5MiwgOTgzNjM5LCAwLCA2NTQ1NSwgCisgICAgNjUxMTgsIDAsIDExOTE1MSwgNzQyMDUsIDkyNjUxLCAwLCAyNDAxLCA2ODE0NCwgODc5MiwgOTgzNjQ4LCAwLCA2NTQ1NSwgCiAgICAgMCwgOTIyNDYsIDAsIDExOTEyOSwgMCwgMTI4ODYsIDEyNzkyMCwgNjY2MjQsIDAsIDQzNTU3LCAxMDMwMCwgMTAxNjEsIAotICAgIDEwMzk2LCA3NDEzNSwgOTgzNDQ1LCAxMTg5NDUsIDc4MTE4LCA3Mzg1MSwgMzAxMCwgNjQ0MSwgNzgxMjIsIDE0NTgsIAorICAgIDEwMzk2LCA3NDEzNSwgOTgzNDUzLCAxMTg5NDUsIDc4MTE4LCA3Mzg1MSwgMzAxMCwgNjQ0MSwgNzgxMjIsIDE0NTgsIAogICAgIDQxNDc1LCAxMjg2NzIsIDkzOTc1LCAwLCAxMTQ3OSwgMCwgMTIwMzU2LCA2MzUwLCAxMjg2NCwgNjk2NzQsIDc4MTE0LCAKICAgICAxMDYxLCA2NDc4MCwgMjAwMSwgNDMxMTEsIDU1MjMwLCAxMjg2ODYsIDQwNTIsIDAsIDc2MjYsIDAsIDAsIDEwNDUsIDAsIAogICAgIDU2MzEsIDQxMTEzLCAwLCAwLCA0MzcwNywgNzQxMjcsIDAsIDAsIDg0ODYsIDAsIDczNzU4LCAyMzM1LCA0MzYyLCAKQEAgLTE4MzA0LDggKzE4MzIzLDggQEAKICAgICA5MjI0NSwgNDQwLCAwLCAxMzA4NSwgOTIzMywgNzQyMTYsIDAsIDAsIDk5NTcsIDEyODI4NSwgNjY0NDcsIDgwNDYsIAogICAgIDY0OTYzLCA2NTc3NywgMTAxMjUsIDc0MjEyLCA0MjgxOSwgMTA5MTAsIDAsIDE1MjEsIDk4OTYsIDkzOTY1LCAxMDQ4NywgCiAgICAgNjk4NzgsIDEyNTI3LCAwLCA3OTcwLCAwLCAxMjg2NjAsIDAsIDY1NzY5LCA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgCi0gICAgOTgzMjI5LCAwLCA1MjM3LCA2OTcxNCwgMCwgMTAxMDMsIDUyNDcsIDQ3NjksIDAsIDExODk3NywgMTI4NzMsIDIyODMsIAotICAgIDk4MzIzMSwgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDU1MjMxLCA0MTEwMywgMCwgNjQ1NjUsIDQ3NzMsIDAsIAorICAgIDk4MzIzNSwgMCwgNTIzNywgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCAyMjgzLCAKKyAgICA5ODMyMzcsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAKICAgICA5MjcxNywgNzAwNzQsIDQ3NzAsIDAsIDkxNzU2NywgODczMSwgNjUzNzgsIDEyNzM2MiwgMTIwNjE5LCA5MTIyLCAxMjgwMzMsIAogICAgIDEyNjYwMCwgNDc3NCwgMzAxOSwgOTk5NywgMTI4MzQsIDAsIDk0NTYsIDEwMjE1LCAxMjA1NDcsIDAsIDAsIDAsIDAsIAogICAgIDc0Nzc2LCA0MjgxLCA0NzY4LCAwLCA0MTUzNSwgNDA5OSwgOTAxNywgMCwgMCwgNzgwOTUsIDAsIDc4MDk2LCAwLCAwLCAwLCAKQEAgLTE4MzE5LDEwICsxODMzOCwxMCBAQAogICAgIDc2MzQsIDY1MTY3LCA5ODQ1LCAwLCAwLCA1NzAxLCA5NzIyLCA0MTQ5MCwgOTgzMTUzLCAxNDI2LCA2ODIxNywgMCwgCiAgICAgNjg0NDcsIDQyMjA0LCA1NTI3MCwgODU3MSwgMTk0OTkxLCA3ODA2NywgMCwgNzg4MTgsIDkyNzE5LCA0MzE4MiwgMTIxODQsIAogICAgIDAsIDQyMDIyLCAwLCAxMDI4MSwgMCwgNTY1MCwgNDMxOTQsIDY0NzEyLCAxMDc0NCwgMCwgOTkwLCA1NjQ3LCAwLCA3Mzg3LCAKLSAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkyMSwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAorICAgIDc4NzM0LCA0MTExNCwgMTE0NzcsIDU2NDYsIDEyODc5LCAxMTAxOCwgOTgzOTMwLCAzOTQ1LCA5MjU4OSwgMCwgMCwgMCwgMCwgCiAgICAgNzgyMTIsIDEyNzc0NiwgMTAyMCwgNzM3NjMsIDAsIDc4NzMxLCA1NjQ4LCA2NDc0OCwgMTk0OTEwLCA3ODczMywgMTAyMDUsIAotICAgIDM1NDUsIDk4MzU4NSwgNjk4NCwgMCwgNzQwNTEsIDk4MzY0NiwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgMCwgMCwgMCwgOTkxMSwgCi0gICAgMCwgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDEyNzE0NSwgOTgzNjUzLCAxMTg4MzYsIDk4MzczOSwgNzg0MjcsIDExNDAsIAorICAgIDM1NDUsIDk4MzU4NSwgNjk4NCwgMCwgNzQwNTEsIDk4MzY1NSwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgMCwgMCwgMCwgOTkxMSwgCisgICAgMCwgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDEyNzE0NSwgOTgzNjYyLCAxMTg4MzYsIDk4Mzc0OCwgNzg0MjcsIDExNDAsIAogICAgIDc4NDI2LCAwLCAxMDE1OSwgMCwgMCwgODEyOCwgMCwgMCwgOTE3OTY1LCAxODE1LCAxOTkxMCwgODkwLCAwLCAzMjY3LCAKICAgICA5MjI5MSwgMCwgMTAxMjMsIDAsIDQ0MTAsIDEwNDEsIDEwNTc2LCA2MzU0LCA5MjU4MSwgNTgwLCA3NDIzMiwgMCwgCiAgICAgMTI4MzQ3LCAwLCAwLCAwLCAxOTkzOCwgNjU5MDYsIDEyNzgxOSwgMCwgMCwgMzI5OCwgNTM3NSwgMTAxNDIsIDAsIDgyMTUsIApAQCAtMTgzMzMsMTYgKzE4MzUyLDE2IEBACiAgICAgNDE1MjEsIDExODkzNCwgNDk0LCAxMzI1MCwgMCwgNjUwOTgsIDYzNjQsIDk1NiwgMCwgMTI4MzAsIDEwNDYyLCA3Mzc0MCwgCiAgICAgNzM3MzQsIDAsIDAsIDAsIDY2NDQ5LCAxMzI2MywgNzQyODEsIDY5MjE3LCAxMzE3MSwgMTI3Nzk2LCAwLCAwLCA5MjI5NCwgCiAgICAgMCwgMTA0NCwgNDEyNzYsIDAsIDAsIDAsIDQyMDY4LCAxMTc5NSwgMCwgMCwgMCwgMCwgNDI0NTAsIDM5MDcsIDAsIDY0NTI2LCAKLSAgICAxMTgyOSwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCA5ODM0NDYsIDcwOTgsIDAsIAorICAgIDExODI5LCA2ODE5NywgMTIyOTUsIDAsIDExNDc1LCAwLCAzMDIwLCAxMTUzNywgMCwgNjY0NDEsIDk4MzQ1NCwgNzA5OCwgMCwgCiAgICAgMCwgMTA1NywgNTY2LCA0MjY5NiwgMCwgMzAxNiwgNDIyNzQsIDQzNDY0LCA2NjQ5MCwgMTI5MjEsIDY2NTcxLCA3ODQ3MiwgCiAgICAgOTI1MTAsIDMwMDYsIDQ2MjAsIDEyNzIzNywgOTgzNTc4LCAwLCAwLCA2NDY1OSwgMCwgMTI3NzQ5LCA1NTI1MywgNjM1NywgCiAgICAgNjM2MiwgODYyNiwgNzEzMzcsIDIyMTYsIDkwOTAsIDY1Mzc3LCA0MTU5NiwgMCwgNDI5MjAsIDE2OTgsIDAsIDY0NDc3LCAwLCAKICAgICA0MzgxMywgMTA1MywgMCwgNzgyNjksIDAsIDEyNjU4NiwgMTA1MiwgMTA1MSwgNDU5LCAxMDYwLCA3NDM0OSwgNjY0NzksIDAsIAogICAgIDAsIDAsIDAsIDQyNDkwLCA2ODksIDY1MDgsIDQxNjMsIDQyMjk4LCA4NjM5LCA2NjY0MSwgNDI0NiwgMCwgMCwgMTIxMzAsIAotICAgIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAxMjc4NTAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCA5ODM3NTksIDAsIAorICAgIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAxMjc4NTAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCA5ODM3NjgsIDAsIAogICAgIDAsIDEyNzI3NCwgMCwgNjM1OCwgNjM2MSwgMTkyNiwgNjM1NiwgOTI2MjcsIDc4OTgsIDgxMTAsIDEwOTM1LCAwLCAxMDA2OSwgCi0gICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4Mzc5OSwgMTIwNDEzLCAwLCAKLSAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MTQsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKKyAgICA1ODMwLCAwLCA0MzY4NSwgMCwgMCwgMCwgMCwgODY5MywgNzg2MTEsIDExOTU2NSwgOTgzODA4LCAxMjA0MTMsIDAsIAorICAgIDEyNzI1NywgNjU4OTQsIDAsIDAsIDAsIDk4MzkyMywgMCwgMCwgMTE5MTg3LCAyMTM1LCA3ODg2OCwgMCwgMCwgNzg4NjksIAogICAgIDQyMzEzLCA1NTc5LCA5MjQxMiwgMCwgOTgzMDgyLCA5NDAwMiwgMCwgNTU3OCwgNDE3NzQsIDEyODExNSwgNDIwMjMsIAogICAgIDYyMzQsIDU2NjksIDkyMjc1LCAwLCAwLCAwLCAxMjc1MDYsIDY4MjAyLCA1NTgzLCAwLCAwLCA0MjQyNiwgNTU4MCwgCiAgICAgNDIyNzYsIDI5MjMsIDg5MiwgMjIyMCwgNDI0NjUsIDQxMzMwLCAxOTQ5ODcsIDU3OTUsIDY1NTEyLCAxMTkwMDYsIDY1NzAyLCAKQEAgLTE4MzUyLDcgKzE4MzcxLDcgQEAKICAgICA2NDkwMCwgNzE1MywgNjA5NSwgNDE4NjUsIDAsIDMwMTUsIDEyODAyMywgMTI2NDY1LCA1MjExLCA5ODMwODMsIDY0MDAsIDAsIAogICAgIDE5NDk4MywgNzAwNTQsIDgxODksIDExMjc2LCAwLCAwLCAzNzIsIDEyODgyOSwgMCwgMTE4ODc0LCA0MjEwMiwgNDE1ODUsIAogICAgIDEyODIwMiwgMCwgNDIxMDEsIDI3NiwgNzg0MDIsIDAsIDMzLCA3NDIyNiwgMTI3MzAzLCA5MDA3LCAxMTg3OTYsIDQxNTg4LCAKLSAgICA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCA5ODM5NzEsIAorICAgIDY2MDMzLCA0MjcsIDEwNzYzLCAxMTg4MTksIDAsIDEyNzg4NCwgMCwgMTAzMSwgNjI1NywgMCwgNDIxMDQsIDAsIDk4Mzk4MCwgCiAgICAgMjMyOCwgOTI0MDksIDEwNzEsIDQyODk5LCAwLCA3NDg0OCwgMCwgOTgzNTgwLCAwLCAxMDQ3LCAwLCAwLCA2NDc5MCwgMCwgCiAgICAgNjk3MjMsIDEwNjUxLCAwLCAwLCAwLCAwLCA5MjIwNiwgMTE5MTgxLCA1NzExLCA0MTYzMywgMTIwOTgsIDY1NTcxLCA5MTY2LCAKICAgICAwLCA1NzEwLCAwLCA2NzkwLCA2NTE2OCwgMTMyMTYsIDAsIDY5NzE2LCA2OTcyNiwgMCwgNjQ2MTEsIDQxNjIzLCAxOTUwMDEsIApAQCAtMTgzNjEsMTIwICsxODM4MCwxMjAgQEAKICAgICA5MTk2LCA2OTY3MCwgMCwgMCwgMCwgMCwgMTE4OTExLCAwLCAwLCAwLCAwLCAwLCAxMjAwMTAsIDAsIDg3MDEsIDY4MTMwLCAKICAgICAxMTk2MTYsIDEyMDUyMiwgMCwgNDI0NzcsIDE5NDk5NCwgMTIxMjMsIDQ0OTUsIDQzNTY5LCAwLCAwLCAwLCA2NDk0NiwgCiAgICAgMTA5OTIsIDAsIDEyMDAwOSwgMCwgMCwgOTMxOCwgOTM5ODYsIDEzMjQ5LCA2NTY3OSwgNzM4MDgsIDAsIDY1NDU3LCAKLSAgICA0MjI0OSwgNzYzOSwgNDM5OTUsIDY3ODQ1LCA0MjY0MSwgNTQ1NCwgMCwgMCwgMTk0OTk3LCAxMjAwMDUsIDAsIDk4Mzk1NywgCisgICAgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCA5ODM5NjYsIAogICAgIDUwODQsIDAsIDAsIDExODg2MSwgMCwgNzMzLCA5MTc4NzYsIDc4MDE0LCA3ODQzNiwgNzg0MzUsIDQxNjc3LCAwLCA5MjE4LCAKLSAgICAxNzMxLCAwLCA5ODM3MzcsIDAsIDY3OTkwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDEyMDAwMCwgCi0gICAgNTM1OCwgOTgzNzM1LCAwLCA5MTc3NjcsIDY0NDI0LCA5ODMyMjUsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgNzgzMTUsIAorICAgIDE3MzEsIDAsIDk4Mzc0NiwgMCwgNjc5OTAsIDAsIDAsIDAsIDEyMDAwMSwgMTI3MDE4LCA5MjQ5MiwgNTE1NSwgMTIwMDAwLCAKKyAgICA1MzU4LCA5ODM3NDQsIDAsIDkxNzc2NywgNjQ0MjQsIDk4MzIzMSwgMzg0MCwgNjQzMTQsIDQxNDMyLCAwLCA3ODMxNSwgCiAgICAgNjg0MzAsIDY3OTgwLCA0MzI1MywgNjU5NDMsIDAsIDMzNzEsIDEwOTg4LCAwLCA4NzcxLCAxNDc5LCAwLCAwLCAxMTA5LCAKLSAgICAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCA2Nzk3OCwgNzQ4NDIsIDk4MzI3NiwgCi0gICAgOTgzNzEyLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCA5MjU3MiwgMCwgMjU0NCwgNjUwNzQsIAorICAgIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIDY0NTA3LCA4ODY4LCAzOTksIDY3OTc4LCA3NDg0MiwgOTgzMjg0LCAKKyAgICA5ODM3MjEsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDkyNTcyLCAwLCAyNTQ0LCA2NTA3NCwgCiAgICAgMTE5MjExLCAwLCAwLCA3ODAxMSwgMzUxLCAxMTkxNDksIDAsIDAsIDU1MjI5LCAwLCA3NDI2OCwgMCwgMCwgMCwgNDIzNzcsIAotICAgIDAsIDAsIDAsIDk4MzkxNSwgMCwgOTAxMywgNDA1NCwgMCwgOTgzNTcwLCAwLCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAorICAgIDAsIDAsIDAsIDk4MzkyNCwgMCwgOTAxMywgNDA1NCwgMCwgOTgzNTcwLCA5ODM2MjgsIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgCiAgICAgMjU0OSwgNzQ0NjksIDAsIDAsIDU1ODQsIDgzNTgsIDAsIDY0MjE1LCA5MjIxOSwgMTA5MTksIDAsIDc5ODAsIDEyNjYwMSwgCi0gICAgOTgzNzc1LCAyMjE4LCA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIAorICAgIDk4Mzc4NCwgMjIxOCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAKICAgICA0MzQ1MiwgNzg2MDksIDAsIDQyNTczLCA2Nzg1NiwgMCwgNzgxMjksIDAsIDAsIDc0MzkyLCA4MTM1LCA2NDUwLCAxMDA1NSwgCiAgICAgNzc5OTYsIDAsIDAsIDExOTIyNSwgNTY1NywgMCwgOTYyNiwgMCwgNzc5OTQsIDEwMTc5LCA1NjU0LCAxMjkzOSwgOTI1NzMsIAogICAgIDEyMDc5OSwgMCwgMCwgNTY1MiwgMTA5NDUsIDAsIDY2NDg2LCAwLCAzNjYxLCA3ODYzLCAwLCAwLCAwLCA3NDUwOSwgCi0gICAgOTgzODQzLCA1NjU5LCAwLCA3ODY5MiwgNjY3MjksIDU2NTUsIDAsIDQyMTY4LCAwLCAxMDU1LCA5MTc2MjgsIDEyNzc5MiwgCi0gICAgNjYzMTAsIDc0MDMwLCAwLCAxMjE0NiwgNzM5NTUsIDczOTU2LCAxMTYxOCwgMCwgMTI2OTkwLCAwLCAxMDI3MiwgMTAzMDQsIAotICAgIDEwMzY4LCA0MjUxOCwgNTk0LCAxMDI0NCwgMTAyNDgsIDc0MDcsIDk4Mzg3OCwgNjQ4NzAsIDAsIDM0NjcsIDk4Mzg4MiwgMCwgCi0gICAgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgODEzMSwgNzQzMzAsIDAsIDk1NjIsIDY5MjIyLCA2NTkyNywgMCwgNzAwMzYsIAotICAgIDY5Njk2LCA2OTc2OSwgNjQ2NTYsIDk4MzcxNywgMCwgOTQwMjAsIDcwMDU2LCA1NjY2LCA2NTIyNywgNTMxOCwgNjM5OTQsIAotICAgIDAsIDkwOTEsIDEwNzk4LCAwLCAxMjgxNjYsIDEwMTg2LCAwLCA3NzMyLCA5ODM3MTUsIDY0NTU2LCAwLCAwLCA1NjY4LCAKLSAgICA3NDQ0NSwgMCwgMTI4NjYzLCA1NjcwLCAxMjY2MTAsIDEyNzI5NywgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIDE5OTUyLCAKLSAgICAxMjA4MDcsIDAsIDEyNzQ5LCA3NDU1MSwgMCwgMCwgNjY0OTYsIDQzNjEsIDExOTI2MCwgMTMwNiwgOTI4NiwgMTQ5NywgCi0gICAgMTI4Mjg2LCA5NDAwNCwgMCwgMCwgMzU3MSwgMTMyNDcsIDAsIDc5NzMsIDY2MzUzLCA2ODQzNSwgNzgyNzgsIDY3ODk2LCAKLSAgICA0MzE5MiwgMCwgNzgyNjUsIDU1MywgMTIwNjUzLCAwLCAxMjg1NTQsIDU4MjksIDAsIDQ1ODcsIDc4Mjg1LCA2NTkxMiwgMCwgCi0gICAgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCA5NDEwMSwgOTQxMDIsIDk0MDk5LCA2NDkwNSwgOTQxMDUsIAotICAgIDk1MTIsIDk0MTAzLCAxMjc0MiwgNjQ0MywgOTgzNzk3LCAwLCA5MTM1LCAwLCA0MTU2NCwgMCwgNTUyMTksIDEyODgzMiwgCi0gICAgOTgzODQyLCAwLCAxMjE0OCwgMCwgNzgyOTcsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgMCwgMTI3MjcwLCAKLSAgICAwLCAxMTg4ODAsIDI0MjUsIDY1MTgyLCAxMjg3NjksIDQzNjM2LCA1MjIxLCA3ODQxMCwgMzI4LCAwLCA5ODM4MDAsIAotICAgIDY5ODE1LCA1NjM2LCAwLCA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCA0MzIyMywgNDM3NjAsIDU2MzUsIAotICAgIDMzNzMsIDI5ODYsIDc4MjkyLCA3NDIyMywgMzQzNywgNzgyOTEsIDYyMDMsIDQyNDcsIDAsIDExOTIwLCA4Mjc0LCAwLCAwLCAKLSAgICAxNjU3LCA0MTU2MSwgNzgyOTksIDc4Mjk1LCA1NjM5LCAyOTU0LCA1NjYwLCA1NjQwLCA3ODMwMywgOTgzNjc2LCA3ODMwMCwgCi0gICAgNDIyMjcsIDAsIDAsIDQxNjM3LCA2Nzg3MiwgMCwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgMTE3MDUsIAotICAgIDU2NDIsIDAsIDU0ODYsIDAsIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgNjk5MzgsIDAsIDU2NDEsIDgyNTksIDAsIDEwNTgsIAotICAgIDAsIDY3NjMwLCAwLCAwLCAxMTQ0LCA3ODc1MCwgMCwgNDIyMjgsIDAsIDczODkwLCAxMTg5NzIsIDAsIDI4MDAsIDAsIAotICAgIDU2NDUsIDY0OTY0LCA4NjUyLCAyNTQ3LCA2NjQ4NCwgNDM2MzQsIDAsIDU2MDgsIDY1ODkwLCA0MzgwOCwgMCwgNjc2MjEsIAotICAgIDExOTkzNCwgOTAwMCwgMCwgMCwgOTI2NzMsIDE4NjUsIDAsIDU2MTMsIDY5OTUwLCAwLCAwLCA1NjEwLCAwLCAwLCA2NTgyNiwgCi0gICAgMjA2OSwgMCwgMTA3ODcsIDQzOTk5LCAyOTk3LCAwLCA1NjA5LCA3ODMxNiwgNjUzMTksIDc4MzEzLCAxMjMxNiwgNjUzNzYsIAotICAgIDI0MTIsIDAsIDgxODYsIDk4MDcsIDc0MjY5LCA5MjU0NywgMTMxMzAsIDY1ODc0LCAwLCA1ODA3LCAwLCAxMDAzMCwgNTMwNiwgCi0gICAgMTIzNjQsIDEyODA2NCwgMCwgMTE3MDQsIDAsIDkyNTgzLCAxMDIxMSwgMCwgMCwgMCwgMCwgMTE3MDYsIDk3MTAsIDAsIDAsIAotICAgIDAsIDQxMywgNjU2MjMsIDcxMTgsIDAsIDkxMzMsIDc0MjYyLCAwLCAxMDQyLCAwLCA2NDc3OSwgMTIxNzEsIDExOTI0MCwgCi0gICAgNjE4NSwgNjQ3NzYsIDQ5ODQsIDAsIDcwOCwgMTEzOTEsIDAsIDEyMjQxLCA5MjcyMCwgOTgzODkwLCAxMzA4LCAwLCAyNTM0LCAKLSAgICA4MTAsIDAsIDAsIDAsIDAsIDAsIDE5MTcsIDMwMDAsIDAsIDAsIDEyMDczOSwgMjM2NCwgOTI0NDMsIDc0NDcwLCA2NjYxOCwgCi0gICAgNjU2ODAsIDEyMDc3OSwgMTAwMjcsIDAsIDEyODE1NCwgMTIzMzcsIDEyMDcyMiwgMTI3MzY4LCA5ODMxNjcsIDI5ODAsIAotICAgIDc1NSwgNjk3NzQsIDkzMSwgMTMxMjQsIDY4MTgyLCA2MzYzLCAyNzQ4LCAwLCAwLCA2NTA0MSwgOTIyNzYsIDQ0MDExLCAKLSAgICA4NzMwLCA5ODMwNjcsIDEyNzg1NCwgNzgzMTIsIDcyNzQsIDExOTI1MCwgMCwgNzI3NSwgNzgzMDQsIDkzNSwgMCwgNjU4NDAsIAotICAgIDM3NywgNDIzMjUsIDExNjQ5LCAxMjczNjMsIDY1MjUzLCA2NDMwMSwgMTI4ODM1LCA3ODMwOCwgNDIzNDEsIDY1Mjg0LCAKLSAgICAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCAwLCAxOTQ5OTgsIDAsIDEwNjczLCAxMTkyMTcsIDcyNDgsIDAsIAotICAgIDEyODM0NiwgMTc4MSwgNTQ5NiwgMzYyNywgNjIsIDE2NDksIDAsIDk2NCwgMCwgMTI3ODc2LCA3ODIyNiwgMTI4Nzc1LCAKLSAgICAxMjc1MTIsIDAsIDAsIDAsIDAsIDQzNjg5LCAxMjc5MTEsIDEzMTQyLCA3ODgxMiwgNDI0MTUsIDY2NTc1LCA0NTQyLCAKLSAgICA2OTkwOSwgNDM1NDcsIDAsIDAsIDc2NzcsIDI5OTEsIDQ5NDYsIDQyNDU0LCAxMTU2NSwgNzk0OSwgMCwgOTgzOTA5LCAKLSAgICAxMTM0MSwgNDI0OTQsIDMwNzMsIDY1NjI1LCA5NzE0LCAxMTY5MiwgNDY1NywgMCwgOTI3MjQsIDY0NzgsIDk4OTgsIAotICAgIDQzNjczLCA2NTIzNywgNjI0MSwgNzEwNiwgNDg3NywgOTgzNzg2LCA2MjM4LCAwLCAxMDU0OCwgMTI3MDQ5LCA0NDA5LCAwLCAKLSAgICAwLCA2NDc5OCwgMCwgNTM0NiwgMCwgOTQwNDcsIDYyMzcsIDQ4NzQsIDAsIDkxNzYsIDAsIDEyNjU1MywgNjUyMzEsIAotICAgIDY1ODg0LCAxMjY3OCwgNzg3NDgsIDExODkxMiwgMTEzNzgsIDQ0MDE4LCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgMCwgNTY4NSwgCi0gICAgMCwgMjQ2MSwgMTEwNTIsIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAxMjc4MjAsIDQzNjM1LCAKLSAgICA3MzkyOCwgMTI3NTI5LCAwLCAwLCAwLCAxMjg1MTAsIDY1NDgyLCAwLCA5MTQyLCAwLCAxMjY0NzAsIDAsIDEwOTM4LCAwLCAKLSAgICAxMTg3OTAsIDExODIsIDI1NDIsIDQ4MjYsIDAsIDAsIDEyODE3NiwgNTI5LCA4NTgwLCAwLCAwLCAxMDU4NiwgMTA3OTAsIAotICAgIDEwODM5LCA2NjAyMywgNDE1OTMsIDQxMjA3LCAwLCAwLCA0MTU5NCwgMjI1LCA0MjgyOCwgMCwgMCwgOTgzOTI5LCAxMTM3NiwgCi0gICAgNzQzNzksIDEwNzIxLCA2NzY2NCwgMzQzOCwgNDIwOTcsIDEyNzI2NywgMTEwODQsIDMxOTQsIDQxODcwLCAyNjYsIDc4MzA1LCAKLSAgICAxMjAxODMsIDQxODczLCAxMjA1NzUsIDExMzI0LCAxMjA1MzEsIDAsIDg0MjAsIDY0OTE4LCAxMjg4NDQsIDQxODcxLCAKLSAgICA0MTMzOCwgMzczNCwgNzczNCwgNDM2ODMsIDg3NTAsIDY2NjA1LCA2NjAxMSwgOTI1MTQsIDQwOTY1LCAxMjc5MzcsIDAsIAotICAgIDUxNjEsIDEwNTcyLCAwLCAwLCAwLCA2NDM0OSwgNzI4NywgNDIxNjIsIDEyNzU1MiwgMCwgMTI2NjA1LCAxMTk0OCwgCi0gICAgNjkyMjAsIDEyMzU5LCA0MzQyOSwgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCA2ODYzMywgNzI4NiwgMCwgNjg2MzUsIDEwMDMxLCAKLSAgICAwLCA5ODcwLCA2ODY0NSwgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAxMTk1NzcsIDQyNjc4LCAwLCAKLSAgICA0MzY3NywgNDE1ODMsIDAsIDY1Nzk5LCA5MjYyMywgMCwgMCwgOTgzOTI3LCA3ODE2OSwgNjYxOTksIDAsIDM2MDksIAorICAgIDk4Mzg1MiwgNTY1OSwgMCwgNzg2OTIsIDY2NzI5LCA1NjU1LCA5ODM2MjYsIDQyMTY4LCAwLCAxMDU1LCA5MTc2MjgsIAorICAgIDEyNzc5MiwgNjYzMTAsIDc0MDMwLCAwLCAxMjE0NiwgNzM5NTUsIDczOTU2LCAxMTYxOCwgMCwgMTI2OTkwLCAwLCAxMDI3MiwgCisgICAgMTAzMDQsIDEwMzY4LCA0MjUxOCwgNTk0LCAxMDI0NCwgMTAyNDgsIDc0MDcsIDk4Mzg4NywgNjQ4NzAsIDAsIDM0NjcsIAorICAgIDk4Mzg5MSwgMCwgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgODEzMSwgNzQzMzAsIDAsIDk1NjIsIDY5MjIyLCA2NTkyNywgMCwgCisgICAgNzAwMzYsIDY5Njk2LCA2OTc2OSwgNjQ2NTYsIDk4MzcyNiwgMCwgOTQwMjAsIDcwMDU2LCA1NjY2LCA2NTIyNywgNTMxOCwgCisgICAgNjM5OTQsIDAsIDkwOTEsIDEwNzk4LCAwLCAxMjgxNjYsIDEwMTg2LCAwLCA3NzMyLCA5ODM3MjQsIDY0NTU2LCAwLCAwLCAKKyAgICA1NjY4LCA3NDQ0NSwgMCwgMTI4NjYzLCA1NjcwLCAxMjY2MTAsIDEyNzI5NywgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIAorICAgIDE5OTUyLCAxMjA4MDcsIDAsIDEyNzQ5LCA3NDU1MSwgMCwgMCwgNjY0OTYsIDQzNjEsIDExOTI2MCwgMTMwNiwgOTI4NiwgCisgICAgMTQ5NywgMTI4Mjg2LCA5NDAwNCwgMCwgMCwgMzU3MSwgMTMyNDcsIDAsIDc5NzMsIDY2MzUzLCA2ODQzNSwgNzgyNzgsIAorICAgIDY3ODk2LCA0MzE5MiwgMCwgNzgyNjUsIDU1MywgMTIwNjUzLCAwLCAxMjg1NTQsIDU4MjksIDAsIDQ1ODcsIDc4Mjg1LCAKKyAgICA2NTkxMiwgMCwgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCA5NDEwMSwgOTQxMDIsIDk0MDk5LCA2NDkwNSwgCisgICAgOTQxMDUsIDk1MTIsIDk0MTAzLCAxMjc0MiwgNjQ0MywgOTgzODA2LCAwLCA5MTM1LCAwLCA0MTU2NCwgMCwgNTUyMTksIAorICAgIDEyODgzMiwgOTgzODUxLCAwLCAxMjE0OCwgMCwgNzgyOTcsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgMCwgCisgICAgMTI3MjcwLCAwLCAxMTg4ODAsIDI0MjUsIDY1MTgyLCAxMjg3NjksIDQzNjM2LCA1MjIxLCA3ODQxMCwgMzI4LCAwLCAKKyAgICA5ODM4MDksIDY5ODE1LCA1NjM2LCAwLCA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCA0MzIyMywgNDM3NjAsIAorICAgIDU2MzUsIDMzNzMsIDI5ODYsIDc4MjkyLCA3NDIyMywgMzQzNywgNzgyOTEsIDYyMDMsIDQyNDcsIDAsIDExOTIwLCA4Mjc0LCAKKyAgICAwLCAwLCAxNjU3LCA0MTU2MSwgNzgyOTksIDc4Mjk1LCA1NjM5LCAyOTU0LCA1NjYwLCA1NjQwLCA3ODMwMywgOTgzNjg1LCAKKyAgICA3ODMwMCwgNDIyMjcsIDAsIDAsIDQxNjM3LCA2Nzg3MiwgMCwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgCisgICAgMTE3MDUsIDU2NDIsIDAsIDU0ODYsIDAsIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgNjk5MzgsIDAsIDU2NDEsIDgyNTksIDAsIAorICAgIDEwNTgsIDAsIDY3NjMwLCAwLCAwLCAxMTQ0LCA3ODc1MCwgMCwgNDIyMjgsIDAsIDczODkwLCAxMTg5NzIsIDAsIDI4MDAsIAorICAgIDAsIDU2NDUsIDY0OTY0LCA4NjUyLCAyNTQ3LCA2NjQ4NCwgNDM2MzQsIDAsIDU2MDgsIDY1ODkwLCA0MzgwOCwgMCwgCisgICAgNjc2MjEsIDExOTkzNCwgOTAwMCwgMCwgMCwgOTI2NzMsIDE4NjUsIDAsIDU2MTMsIDY5OTUwLCAwLCAwLCA1NjEwLCAwLCAwLCAKKyAgICA2NTgyNiwgMjA2OSwgMCwgMTA3ODcsIDQzOTk5LCAyOTk3LCAwLCA1NjA5LCA3ODMxNiwgNjUzMTksIDc4MzEzLCAxMjMxNiwgCisgICAgNjUzNzYsIDI0MTIsIDAsIDgxODYsIDk4MDcsIDc0MjY5LCA5MjU0NywgMTMxMzAsIDY1ODc0LCAwLCA1ODA3LCAwLCAKKyAgICAxMDAzMCwgNTMwNiwgMTIzNjQsIDEyODA2NCwgMCwgMTE3MDQsIDAsIDkyNTgzLCAxMDIxMSwgMCwgMCwgMCwgMCwgMTE3MDYsIAorICAgIDk3MTAsIDAsIDAsIDAsIDQxMywgNjU2MjMsIDcxMTgsIDAsIDkxMzMsIDc0MjYyLCAwLCAxMDQyLCAwLCA2NDc3OSwgCisgICAgMTIxNzEsIDExOTI0MCwgNjE4NSwgNjQ3NzYsIDQ5ODQsIDAsIDcwOCwgMTEzOTEsIDAsIDEyMjQxLCA5MjcyMCwgOTgzODk5LCAKKyAgICAxMzA4LCAwLCAyNTM0LCA4MTAsIDAsIDAsIDAsIDAsIDAsIDE5MTcsIDMwMDAsIDAsIDAsIDEyMDczOSwgMjM2NCwgOTI0NDMsIAorICAgIDc0NDcwLCA2NjYxOCwgNjU2ODAsIDEyMDc3OSwgMTAwMjcsIDAsIDEyODE1NCwgMTIzMzcsIDEyMDcyMiwgMTI3MzY4LCAKKyAgICA5ODMxNjcsIDI5ODAsIDc1NSwgNjk3NzQsIDkzMSwgMTMxMjQsIDY4MTgyLCA2MzYzLCAyNzQ4LCAwLCAwLCA2NTA0MSwgCisgICAgOTIyNzYsIDQ0MDExLCA4NzMwLCA5ODMwNjcsIDEyNzg1NCwgNzgzMTIsIDcyNzQsIDExOTI1MCwgMCwgNzI3NSwgNzgzMDQsIAorICAgIDkzNSwgMCwgNjU4NDAsIDM3NywgNDIzMjUsIDExNjQ5LCAxMjczNjMsIDY1MjUzLCA2NDMwMSwgMTI4ODM1LCA3ODMwOCwgCisgICAgNDIzNDEsIDY1Mjg0LCAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCAwLCAxOTQ5OTgsIDAsIDEwNjczLCAKKyAgICAxMTkyMTcsIDcyNDgsIDAsIDEyODM0NiwgMTc4MSwgNTQ5NiwgMzYyNywgNjIsIDE2NDksIDAsIDk2NCwgMCwgMTI3ODc2LCAKKyAgICA3ODIyNiwgMTI4Nzc1LCAxMjc1MTIsIDAsIDAsIDAsIDAsIDQzNjg5LCAxMjc5MTEsIDEzMTQyLCA3ODgxMiwgNDI0MTUsIAorICAgIDY2NTc1LCA0NTQyLCA2OTkwOSwgNDM1NDcsIDAsIDAsIDc2NzcsIDI5OTEsIDQ5NDYsIDQyNDU0LCAxMTU2NSwgNzk0OSwgMCwgCisgICAgOTgzOTE4LCAxMTM0MSwgNDI0OTQsIDMwNzMsIDY1NjI1LCA5NzE0LCAxMTY5MiwgNDY1NywgMCwgOTI3MjQsIDY0NzgsIAorICAgIDk4OTgsIDQzNjczLCA2NTIzNywgNjI0MSwgNzEwNiwgNDg3NywgOTgzNzk1LCA2MjM4LCAwLCAxMDU0OCwgMTI3MDQ5LCAKKyAgICA0NDA5LCAwLCAwLCA2NDc5OCwgMCwgNTM0NiwgMCwgOTQwNDcsIDYyMzcsIDQ4NzQsIDAsIDkxNzYsIDAsIDEyNjU1MywgCisgICAgNjUyMzEsIDY1ODg0LCAxMjY3OCwgNzg3NDgsIDExODkxMiwgMTEzNzgsIDQ0MDE4LCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgCisgICAgMCwgNTY4NSwgMCwgMjQ2MSwgMTEwNTIsIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAxMjc4MjAsIAorICAgIDQzNjM1LCA3MzkyOCwgMTI3NTI5LCAwLCAwLCAwLCAxMjg1MTAsIDY1NDgyLCAwLCA5MTQyLCAwLCAxMjY0NzAsIDAsIAorICAgIDEwOTM4LCAwLCAxMTg3OTAsIDExODIsIDI1NDIsIDQ4MjYsIDAsIDAsIDEyODE3NiwgNTI5LCA4NTgwLCAwLCAwLCAxMDU4NiwgCisgICAgMTA3OTAsIDEwODM5LCA2NjAyMywgNDE1OTMsIDQxMjA3LCAwLCAwLCA0MTU5NCwgMjI1LCA0MjgyOCwgMCwgMCwgOTgzOTM4LCAKKyAgICAxMTM3NiwgNzQzNzksIDEwNzIxLCA2NzY2NCwgMzQzOCwgNDIwOTcsIDEyNzI2NywgMTEwODQsIDMxOTQsIDQxODcwLCAyNjYsIAorICAgIDc4MzA1LCAxMjAxODMsIDQxODczLCAxMjA1NzUsIDExMzI0LCAxMjA1MzEsIDAsIDg0MjAsIDY0OTE4LCAxMjg4NDQsIAorICAgIDQxODcxLCA0MTMzOCwgMzczNCwgNzczNCwgNDM2ODMsIDg3NTAsIDY2NjA1LCA2NjAxMSwgOTI1MTQsIDQwOTY1LCAKKyAgICAxMjc5MzcsIDAsIDUxNjEsIDEwNTcyLCAwLCAwLCAwLCA2NDM0OSwgNzI4NywgNDIxNjIsIDEyNzU1MiwgMCwgMTI2NjA1LCAKKyAgICAxMTk0OCwgNjkyMjAsIDEyMzU5LCA0MzQyOSwgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCA2ODYzMywgNzI4NiwgMCwgNjg2MzUsIAorICAgIDEwMDMxLCAwLCA5ODcwLCA2ODY0NSwgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAxMTk1NzcsIDQyNjc4LCAKKyAgICAwLCA0MzY3NywgNDE1ODMsIDAsIDY1Nzk5LCA5MjYyMywgMCwgMCwgOTgzOTM2LCA3ODE2OSwgNjYxOTksIDAsIDM2MDksIAogICAgIDY4NjI0LCAwLCA4MzIsIDEyMDY5MywgMTIwNzcwLCA3ODQ3MywgNjYwMDcsIDc4NDcxLCA2NTcwMywgMCwgMCwgNDI3MzIsIAogICAgIDUxODAsIDkyNjk5LCA0MTM5NSwgNDE1MzAsIDExNjkxLCA2NDc3MywgOTIyMTQsIDc0MDAyLCAwLCAwLCAxMjg2NDUsIAotICAgIDYzNDgsIDI0MywgMTMyMDAsIDk4MzgwNCwgNjAyNCwgOTIzMDksIDk5NzksIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIAorICAgIDYzNDgsIDI0MywgMTMyMDAsIDk4MzgxMywgNjAyNCwgOTIzMDksIDk5NzksIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIAogICAgIDQzNjg3LCAwLCAwLCA0Mjg1LCA2NjE5NSwgMCwgNDIzMCwgMCwgNzM2NywgNDMyNTYsIDkyMzUzLCA3NTYzLCA0MjM3NiwgMCwgCiAgICAgNjg0NDIsIDEyMDUxMiwgMCwgMCwgMjE0LCAwLCAwLCA3ODQ2NiwgNjU4OTMsIDEyMjA4LCA5OTczLCAwLCA2NjMxMSwgCiAgICAgNjU1ODksIDEyODI3NywgMjYwMywgMCwgMCwgMCwgNzAwNDcsIDAsIDYwMjIsIDAsIDI4ODQsIDAsIDExNjIwLCAwLCA0MywgCiAgICAgMCwgNjY0NTMsIDEwMTYsIDQxMTA3LCAwLCA0MTEyMSwgMzg4NSwgOTIsIDY1NDU2LCA2NDYwOCwgMCwgNzQ4MDEsIDAsIAotICAgIDIwNzQsIDAsIDc4MjgzLCAwLCAxMjQ1MywgMTI4MTI4LCA5ODM4MTcsIDc0MjQxLCAxMjY1NjgsIDY3OTEsIDEyNDU3LCAKKyAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODI2LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCiAgICAgNzgyNjgsIDAsIDAsIDAsIDc4Mjc5LCAwLCAwLCA5MjM1OCwgNjY2MzcsIDc5OTUsIDg3NTksIDQzNDIxLCA3ODI3NywgCiAgICAgMTI0NDksIDEyODU1MiwgMCwgMCwgODc1MiwgMzE5NywgNDcyMCwgMTAxNjUsIDAsIDExOTI0OSwgMCwgMTE1OTUsIDY0ODkzLCAKICAgICAwLCA0MzQzNSwgMCwgMCwgNDk5MywgMCwgNjE2OCwgMTA5MzQsIDE5NDYsIDc0MSwgMCwgNTQ5NCwgNDYzOSwgOTgzMTQ3LCAKICAgICAxOTkwLCA2NjU4OSwgNDQ5OCwgNzg2NjQsIDExOTE4MywgMCwgMCwgNjk3MzQsIDI5NjAsIDczNzc5LCAwLCA4OTY5LCAKICAgICAxMjgxMTcsIDQzNDI0LCAxMjcwNTksIDAsIDI5NTAsIDExOTU3OSwgNjIxMCwgNjU3NTMsIDM3MCwgMCwgMCwgMCwgNDk1MywgCi0gICAgOTgzNjczLCAwLCAwLCAwLCA2OTIzMCwgMCwgMCwgNjU2ODgsIDk4MzI0MCwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIAorICAgIDk4MzY4MiwgMCwgMCwgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCA5ODMyNDYsIDUwNjMsIDM1MTcsIDI5NjQsIDQzNjYzLCAKICAgICA5MTc3NjIsIDYzNDQsIDc0NzkxLCAxMDU2NiwgMTAxNDQsIDY2MzMzLCA4MjUyLCA3MjksIDY2MDE2LCA3ODI1MywgMCwgCiAgICAgNzEzMTcsIDY0OTIzLCAxMjgwNDAsIDQzNjY5LCA5MDMyLCA3ODI2MywgNzgyNjQsIDAsIDQxMjE1LCAwLCA2NTg4MywgMCwgCiAgICAgOTE3Nzc0LCAxMjA2MDIsIDM3NjEsIDAsIDAsIDcwMDY4LCAwLCAxMjkxMiwgMTE5MDEyLCAzODUwLCAxMjgxOTEsIDAsIDAsIAogICAgIDAsIDAsIDkwOCwgMCwgODYxMSwgMCwgMCwgMTI3NTU1LCA0MzY5MSwgNDExOTcsIDAsIDg5NzgsIDEyMDU0MCwgMTE5MTM1LCAKICAgICA0MTU4NiwgMTA1MjcsIDAsIDkxNzg0OCwgMzg0OCwgNzg3MzksIDE5NDkzNywgMTI3NTM2LCA2NTI0MSwgNTMzNiwgCi0gICAgOTgzMjUxLCAxMjg3ODYsIDY2MywgMCwgMTA3ODAsIDAsIDAsIDc4NzY3LCA5ODMyNDksIDEyNzE2MywgNjgxOTMsIDM0NywgCisgICAgOTgzMjU5LCAxMjg3ODYsIDY2MywgMCwgMTA3ODAsIDAsIDAsIDc4NzY3LCA5ODMyNTcsIDEyNzE2MywgNjgxOTMsIDM0NywgCiAgICAgMCwgMCwgNzg3NzUsIDY0Njc1LCA0MTU4MiwgNzg3NzQsIDc4NzQ0LCA2NTU3OSwgMTI5ODAsIDc4NzY5LCAxMjE0MywgCiAgICAgNjk2NTcsIDc4NTEyLCAwLCA0MzQ0MSwgNDE4MDQsIDc4NTIzLCAwLCA3ODUyNSwgMCwgMTI4ODU5LCA0MTU4NCwgMTA2ODEsIAotICAgIDAsIDk4MzY4NiwgNzM5MzgsIDAsIDEyODAyMiwgNDgwMCwgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgNzg1MzQsIDk1MTgsIAotICAgIDY2MDksIDEwNDM0LCAwLCAxMTMxOSwgMTA5NywgMCwgOTE3ODUwLCA0MTczMCwgOTgzMjEyLCAwLCA3Mzg0NywgNzg3NjEsIAotICAgIDY1MTcyLCA0MTcyOCwgNDE3MjEsIDAsIDAsIDAsIDQxMjAzLCA5MTc2MTIsIDEzMTEwLCA0MTcyNiwgOTgzODQ2LCAwLCAKKyAgICAwLCA5ODM2OTUsIDczOTM4LCAwLCAxMjgwMjIsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCAKKyAgICA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDk4MzIxNCwgMCwgNzM4NDcsIDc4NzYxLCAKKyAgICA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgOTE3NjEyLCAxMzExMCwgNDE3MjYsIDk4Mzg1NSwgMCwgCiAgICAgMTAwMCwgNjk2NTEsIDAsIDQxMTQwLCAxMjA5LCA3Mzk3OCwgMCwgNzM3NTAsIDEwNzMsIDYzMjEsIDc3ODc4LCA0MTEzOCwgCiAgICAgMCwgNjgyMTMsIDAsIDEyMTY3LCAxMTE1LCA0MTYwNSwgOTc5NCwgMTI3MDYyLCA2NzY3MSwgNTUyNDgsIDEyMjM3LCAKICAgICA3ODc4NywgNjYzMTQsIDY1ODcsIDkyOTAsIDc4NzgyLCA3ODc4MywgOTIzMSwgNzg3ODEsIDI5NTksIDc5MjYsIDAsIDAsIDAsIAotICAgIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCA5ODM3MTgsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgCisgICAgNjQzOTgsIDAsIDExOTk3MCwgMTIzMTEsIDk4MzcyNywgNzg3OTYsIDc4Nzk4LCA3ODc5NCwgNzg3OTUsIDY4NDM0LCAKICAgICA3ODc5MywgNjY2NzAsIDAsIDAsIDEyMjkwLCAxMjAxNjksIDAsIDExOTg3MywgNDIxNDIsIDk5NjgsIDgyMDUsIDAsIDUxMzEsIAotICAgIDAsIDk2MjcsIDc4NTM2LCA3ODU0MiwgNzg1MzUsIDk4MzIxMCwgMTk0NCwgMTI0OCwgMTAxNDgsIDEyNzc1NSwgMTE5OTkwLCAKKyAgICAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCA5ODMyMTIsIDE5NDQsIDEyNDgsIDEwMTQ4LCAxMjc3NTUsIDExOTk5MCwgCiAgICAgMTE5OTkxLCAxMjcwMSwgNzgzNzYsIDExMzA4LCAxMTk5OTUsIDAsIDExOTk5NywgMTE5OTk4LCA2NTMwNSwgNjUxMDAsIAogICAgIDQwMzEsIDQyNzk0LCAxMjAwMDMsIDcwNzUsIDgxNTQsIDExOTk4NSwgMTIwMDA3LCA0MTgxNywgNzM5MzQsIDQyMjc1LCAKICAgICAxMjAwMTEsIDEyMDAxMiwgNzg1MjYsIDEyMDAxNCwgMTIwMDE1LCA2MDQxLCAwLCA0MTg5OSwgMCwgODAwMiwgMCwgNDM2NCwgCiAgICAgMCwgMCwgNjQzMzIsIDAsIDc4MTMsIDkwNjQsIDExOTk4NiwgMTAxMjQsIDc1MjYsIDg2MDEsIDcyODEsIDc4NDU1LCA3Mjc5LCAKLSAgICAxMjA0MSwgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCA5ODMyNzIsIDEzMDEyLCA0NTcxLCAwLCAwLCAxMjAxNjQsIAorICAgIDEyMDQxLCAxNDE4LCAxMDg4NSwgMTI2NzMsIDAsIDAsIDk2NjAsIDk4MzI4MCwgMTMwMTIsIDQ1NzEsIDAsIDAsIDEyMDE2NCwgCiAgICAgMTIwNzgsIDI5NzAsIDAsIDEwOTMzLCAwLCA3Nzg3MCwgMCwgMTI3MDE1LCAwLCA0MTU5OSwgMCwgMTI4ODMxLCAwLCAKICAgICAxMjk1MCwgOTIxNjAsIDM0ODYsIDAsIDc4MzExLCA0MjM5LCAwLCAxMjc3OTksIDY2NTExLCAwLCAyNjM3LCA2NDYyOSwgCi0gICAgODQ2MCwgMTI3MDUzLCA4NDc2LCA5ODM5NjYsIDAsIDAsIDAsIDY1NjczLCAxMDE5LCA3ODQ5NSwgNDE0OCwgMCwgMTIyODksIAotICAgIDAsIDQzMTYsIDAsIDEzMTE5LCA4NDg4LCA1NDEyLCA2NjI0MywgOTkzNSwgMCwgNzM4NjQsIDk4MzIwMSwgNDE3MzQsIAorICAgIDg0NjAsIDEyNzA1MywgODQ3NiwgOTgzOTc1LCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAKKyAgICAwLCA0MzE2LCAwLCAxMzExOSwgODQ4OCwgNTQxMiwgNjYyNDMsIDk5MzUsIDAsIDczODY0LCA5ODMyMDMsIDQxNzM0LCAKICAgICA4MjA2LCA3NDA4MSwgOTE2MywgMzI4NiwgOTA3MiwgNTg2NywgMTMzMDIsIDc2MjIsIDcxMjAsIDQxNzM2LCA5MjU0NiwgCiAgICAgNDE3MzEsIDAsIDc0MDAsIDU0MTYsIDY4NjYzLCAxMTg5MjQsIDEwODE3LCAwLCA0MTUzOSwgMTI3Mjg0LCAwLCA3Mzk2MywgCiAgICAgNDE4NTUsIDQxODY3LCA2NTU2NCwgMTEyNzcsIDY1ODkyLCAxMTUzNiwgMTA2MjAsIDkyMjcyLCA3MTE1LCA2NjAzMCwgCiAgICAgNzM5MzIsIDU0OTgsIDczOTQyLCA0MTUzNiwgMCwgNjgyMDQsIDkyNTg3LCAzNDU5LCA4OTk3LCAwLCAwLCAwLCAwLCAKLSAgICA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCA5ODM2OTAsIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgOTIyMjMsIAorICAgIDkyNTEyLCAwLCA2NjM3NywgNjk3ODEsIDAsIDk4MzY5OSwgNzg1MTEsIDMxNjEsIDI5NSwgMTIwMjA3LCAwLCA5MjIyMywgCiAgICAgMTI3ODU2LCA3ODc0MiwgOTAxNiwgNDM0NTQsIDYzOTAzLCA2MzkwMiwgNDM2NDEsIDAsIDM5NzEsIDAsIDcwMDYzLCAyOTUyLCAKICAgICA3ODc2NSwgMTEwMzgsIDEwOTAxLCA2MzkwMCwgNjM4OTksIDYzODk4LCA5NDA0MywgNjY3LCAxMjMzMiwgNjM4ODcsIDYwODYsIAotICAgIDQxNzIyLCAwLCA1MTcyLCAwLCAwLCA0MTU5LCAwLCAwLCA5ODE1LCA2Mzg4NCwgMTk5MzQsIDYzODgyLCA0MTE5OCwgODU1NSwgCi0gICAgNjM4NzgsIDYzODc3LCA0MjQ2MCwgNjA1MCwgNDI3MDgsIDYzODgxLCA2Mzg3MiwgMCwgNDI0MjEsIDAsIDQxNzIzLCAKKyAgICA0MTcyMiwgMCwgNTE3MiwgMCwgOTgzMjc4LCA0MTU5LCAwLCAwLCA5ODE1LCA2Mzg4NCwgMTk5MzQsIDYzODgyLCA0MTE5OCwgCisgICAgODU1NSwgNjM4NzgsIDYzODc3LCA0MjQ2MCwgNjA1MCwgNDI3MDgsIDYzODgxLCA2Mzg3MiwgMCwgNDI0MjEsIDAsIDQxNzIzLCAKICAgICA2Mzg3NSwgNjM4NzQsIDExNDYwLCA3NDMyLCAxOTEzLCA0MTkxMywgNjM4NTIsIDEyNjYzNiwgMCwgNDIzNDgsIDczODkyLCAKICAgICA2NzUyLCA0NDYsIDQxOTExLCAxMjc5MDYsIDYzODUxLCA2Mzg1MCwgNDE5MTAsIDAsIDYzODQ2LCAyOTcyLCAxMjkzMiwgCiAgICAgNzI2MiwgMCwgNjM4NDksIDYzODQ4LCA2Mzg0NywgMTI4MDcwLCA2NTcwLCA4MzAyLCA3MjU5LCA2Mzg0MiwgNDE3OCwgCkBAIC0xODQ4OCw4ICsxODUwNyw4IEBACiAgICAgNzU4MywgNzY3OSwgMjkwMywgMCwgMzAwMSwgMTE1OCwgODc0NSwgNDM3NDYsIDczNzQ4LCA2Mzg2NiwgNzg2MjYsIDE5MTUsIAogICAgIDQ4NDYsIDAsIDY2MzcxLCAxMTg5ODQsIDQyMTA1LCAyOTkwLCAxMjAxMjgsIDgwNSwgNjkyMzgsIDY0NDM4LCAxMjA3MCwgCiAgICAgODc2MCwgMTExNywgMTE4OTg3LCAxMjIxMiwgMTIwMTIzLCA2NTE3NCwgNDIzNTcsIDYzODM1LCA2MzgzNCwgMCwgNzgyNDAsIAotICAgIDEyMjI1LCA2MzgzOCwgNjM4MzcsIDk4Mzg0NCwgOTgzNzk1LCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIAotICAgIDYzODIxLCA2MzgyMCwgNjM4MTksIDYzODE4LCA5ODM4OTUsIDUyMjcsIDkwNDcsIDYzODIyLCAxMjcxNjIsIDYwOTEsIDAsIAorICAgIDEyMjI1LCA2MzgzOCwgNjM4MzcsIDk4Mzg1MywgOTgzODA0LCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIAorICAgIDYzODIxLCA2MzgyMCwgNjM4MTksIDYzODE4LCA5ODM5MDQsIDUyMjcsIDkwNDcsIDYzODIyLCAxMjcxNjIsIDYwOTEsIDAsIAogICAgIDEwNjkxLCA1NjAsIDU2NDMsIDgyMjYsIDExOTU3OCwgNjM4MTIsIDYzODExLCA2MzgxMCwgNjM4MDksIDIyODksIDYzODE1LCAKICAgICA2MzgxNCwgNjM4MTMsIDYwNDcsIDE1OTcsIDEyMDE0MywgNzgwLCAyMDYsIDc3OTI1LCA0OTM2LCA2NTE0NywgODE2OCwgCiAgICAgNjM5MzAsIDIwNzYsIDEwOTMsIDk4ODIsIDYzOTM0LCAyMDgyLCA2MzkzMiwgMTI4MTUwLCA2MzkyOSwgMzU0NiwgMTYwNSwgCkBAIC0xODUwNywyNjIgKzE4NTI2LDI2MiBAQAogICAgIDQzNjU5LCAxMjk1MSwgMTIwNjM4LCA5OTA2LCAyMDU0LCAyMzM0LCA3ODUxNSwgNjM5MTYsIDU0ODMsIDYzOTE0LCA2OTczNywgCiAgICAgNjM5MTEsIDU0ODQsIDYzOTA5LCA2MzkwOCwgMjUzOSwgMCwgNDM5ODAsIDU0ODUsIDAsIDQyNjk3LCA5MDYxLCA1NTM0LCAKICAgICAxMDY3MiwgNDUwMiwgMCwgMjUzLCAwLCA2ODIwOCwgMCwgOTIwMywgNzQyMzEsIDAsIDExNTMwLCA5MjU0MiwgNjg2NjgsIDAsIAotICAgIDExODkwNywgMCwgMTA0NzQsIDQzNDI2LCAxMzI1NywgNDIzNTQsIDEyODA5OSwgOTgzNjg5LCA3MDA0NCwgMTk1MDY1LCAwLCAKLSAgICA4NDEzLCA5ODM4MDcsIDAsIDU2OTMsIDcyNzIsIDAsIDEzMjA5LCA2NDQ3MCwgNjU4MzEsIDc0MzUwLCAxOTUwNjMsIDAsIDAsIAotICAgIDAsIDEyNjYzOSwgMCwgMCwgOTQwNzgsIDEyODEzMywgMTI3NzY3LCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIDQyOTEzLCAKLSAgICA5MjE4NywgNzI3MCwgMCwgNjY2MDYsIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgMTI4MzUzLCAKLSAgICA2Mzk4MiwgNzM5MywgMTI4MDcsIDQzNDEzLCA2MzkwNiwgMTU5OCwgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAxMzA3LCAKLSAgICAwLCAxMDUxNSwgNDE1ODksIDEyODY5OCwgMCwgNjIxOCwgMCwgMTQzMCwgMCwgMCwgMTIwNjA2LCA3ODc1NCwgNTQxMywgCi0gICAgNzYxOSwgMzI1NSwgMzQ5MywgNzQwMzIsIDExNTQ5LCAxMDczNSwgNDE3NDMsIDczOTM3LCA2ODAxLCA5ODM2MjQsIDQ1MTgsIAotICAgIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMTIwMTU4LCAyNzEwLCAwLCA2OTI0MywgNDE3MjQsIDAsIDQzMDczLCAKLSAgICA0MTY5MCwgMTI0NzksIDk4MzYyNiwgMCwgMCwgOTgzODA5LCA3MDA0NiwgMTYyOCwgMTI3MTQ5LCA5ODM0NzksIDk4MzcyMiwgCi0gICAgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDk0MDU2LCAwLCAwLCA1MzM5LCA3NDMyMywgMCwgMTMwMDQsIAotICAgIDAsIDQ0NTcsIDAsIDAsIDAsIDAsIDU2ODQsIDg2NzgsIDEwOTE0LCAwLCA1Njg5LCA2NTgwNywgMCwgNjg0NjQsIDEyNjMzLCAKLSAgICAxMjg3MCwgNjk3MDUsIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgNzQyNTEsIDAsIDEyMDY0NywgCi0gICAgMCwgNTAsIDEwNTU4LCA5ODcxLCA0MjYxMiwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAxMzI1OSwgNDQ0OCwgMCwgCi0gICAgOTgzODM2LCAwLCA3MDA0MywgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgOTE3NjA3LCAxMjc1NDQsIAotICAgIDEyNzA3OSwgMTk1MDUwLCAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIDExODg3MCwgODgxMiwgMCwgCi0gICAgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCA2OTYzMiwgOTg5NCwgMCwgCi0gICAgMCwgMCwgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIDEyMDQ5NSwgMCwgMTI4Mjg0LCAKLSAgICAxMjI3NywgMTk0NjI3LCAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgMCwgOTI0MjYsIDAsIDY1MzEsIAotICAgIDAsIDEyNzg0NiwgNDczLCA0MzQxNSwgMCwgOTgzNjQxLCAxODczLCAxMDg3LCAwLCAwLCAwLCA3ODUyNywgNjY0MzksIAotICAgIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDc0MjgyLCAwLCA5ODM1NzEsIDAsIDk0ODksIDAsIDAsIAotICAgIDQzODQsIDc0MjIwLCA2Mzg0NSwgMjA1OCwgMTI4ODYzLCAxMzI5NSwgNDMxOTEsIDEyODAzMCwgMCwgMTE1NCwgMzg1NywgCi0gICAgMTIwNSwgMCwgMCwgMTMxMDAsIDEyOTU4LCAxMjA3MDYsIDc0MTY4LCAwLCAwLCA0NDIxLCAxMDU5MiwgMCwgNDk1LCAKLSAgICAxMTkwMDcsIDQxNzEyLCA3OTgzLCAwLCA5Mzk5NywgMCwgNjM0NywgMTIwMTY1LCA3NjU0LCA0MTcxMCwgNDE5NiwgMCwgCi0gICAgNDM3LCA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCA0OTk5LCAKLSAgICAxOTQ2NDIsIDAsIDEyNjU4MiwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMTk0NjQzLCA0MTc4OSwgCi0gICAgMTI4MTQyLCAxMDgwOSwgMCwgMCwgMCwgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIDEzMDU4LCAKLSAgICAxMjA0NDksIDEyODc1LCAwLCA5MjE4NiwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIDExMDQsIDAsIDAsIAotICAgIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDY5ODQ5LCA2NzgzLCAwLCAKLSAgICAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCA5ODM3OTgsIDEyODg4MiwgNDc2MSwgNjM4MjgsIDQ3NjYsIAotICAgIDY0NjIzLCAxMjczLCA0MzQwNywgMCwgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCA5ODM2MDMsIAotICAgIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCA1MTIyLCA0MTUyNywgCi0gICAgMCwgNjYzMjAsIDk4MzgwMiwgMCwgMCwgMCwgNDE1MzcsIDY5NjgzLCA4MzAzLCA4MjgyLCAxMTgxNywgNzM4NTcsIDEwMDAzLCAKLSAgICA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIDY0Mjk5LCAxOTQ2NjQsIDAsIAotICAgIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgCi0gICAgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIDAsIDQ3NjIsIDExMDMsIDAsIDAsIAotICAgIDQ3NjUsIDk4MzQ4NCwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAyMDUwLCAxMDg3MSwgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAKLSAgICAxMjg4NjcsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCA4NjI3LCAxMjI3OSwgMTExMSwgMCwgOTIxNjEsIAotICAgIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCA0NTIyLCA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgCi0gICAgOTE3NTYxLCAwLCAxMTk1NzUsIDIyOTMsIDAsIDY2NjU0LCAwLCA5MjY3NiwgMCwgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAKLSAgICAwLCA5MjU2OSwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCA0MTc5MywgNjU3NjMsIDc0MjIxLCAxMjAxNDEsIAotICAgIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIDQzODIxLCA1NzA5LCAwLCA5NDA1MywgNDM4MTYsIDAsIDAsIAotICAgIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgNTcwNSwgODc5MSwgNDAwNSwgMCwgMTAyMzcsIAotICAgIDEwOTkxLCAxMjg4MTYsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgMTMxNzAsIDEyNTQwLCA5MTc1NzcsIDQyNjA1LCAKLSAgICAxMjA3NjUsIDEyNjYxNywgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIDc0ODY3LCAxOTQ2NTQsIDEyNzA3OCwgMzMzOSwgCi0gICAgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIDkxNzU4NywgOTE3NTg2LCA5MTc1ODksIAotICAgIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgOTIyMjYsIDEzMjQ2LCA4NjQsIDAsIAotICAgIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCA5MjUzMywgMTMyNDAsIDE5NTA2OCwgNTE5MiwgNDMzOCwgNjc5ODIsIAotICAgIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCA5MjU3NSwgMTIzNiwgMTMyMDgsIDEzMjYxLCAxMzE4OSwgMTMxODgsIDkzOTkzLCAwLCAKLSAgICA3NDQwLCAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIAotICAgIDYzNzc5LCAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIDQxNTIyLCA5ODM5MDYsIDkyMTY4LCAKLSAgICA5ODM3NjMsIDkxNzg1OCwgMTEzNTQsIDk0MDcxLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgCi0gICAgMTMyNzIsIDEzMTk0LCAxMzM0LCA2OTkyNiwgNDQ3OSwgMTE3OCwgNjU1ODYsIDEyMDY2MywgNjY2ODEsIDExOTE5MywgCi0gICAgNDYwMSwgMCwgMCwgOTgzNzU2LCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIDYzNzg2LCA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIAotICAgIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgMTAxOTIsIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIAotICAgIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCA5ODMxMzEsIDAsIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgCi0gICAgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAKLSAgICAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCAKLSAgICA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIDYzNzk4LCA2MjYwLCAwLCAwLCA5NDA3NCwgNjM3OTMsIAotICAgIDExOTg4LCAzODk4LCAxMjgyNDEsIDEwMjAxLCAxMjIzOCwgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIDEwNDMxLCAKLSAgICA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgOTgzMzIxLCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCAKLSAgICA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAwLCAwLCA2Mzc2OSwgOTUzMCwgOTgzMTE5LCAxMjIzMiwgCi0gICAgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgNzkyLCAwLCA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIAotICAgIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMCwgNzU4OCwgNjM3NDgsIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgNjg0MjYsIAotICAgIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAxMjgzNTYsIDExNjY1LCA3NDEzMywgNDU1OCwgNjU2ODUsIDk1MjMsIDAsIDAsIAotICAgIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAKLSAgICAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIAotICAgIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgOTQwMzksIDAsIDkyNDU1LCA3Mzg2LCAwLCA2NDQ0NCwgMCwgCi0gICAgMTE5ODYzLCA0MzYwMywgOTQwNzUsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIDEwMDI1LCA2OTkxNSwgMjkxOCwgMCwgNjUzMDAsIAotICAgIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAxMjc4MjksIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgCi0gICAgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIDEyODIsIAotICAgIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDk4MzYwNCwgNjUyNDIsIDAsIDMzMzAsIDAsIDAsIDk4Mzk2NSwgMCwgMCwgNzQyNTksIAotICAgIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAxNjI3LCAwLCAwLCAwLCA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCAKLSAgICA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgMCwgOTAzNSwgMCwgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIAotICAgIDE2NCwgMCwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgMCwgNzAwMTksIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIAotICAgIDcwMDMxLCAxMjc3NTYsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgCi0gICAgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIAotICAgIDY1MTk1LCAxMDE2NCwgOTIyNTIsIDc0NDI4LCAwLCA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgCi0gICAgMTMyNzUsIDEyODE2MSwgMTEwNTcsIDAsIDEzMjc2LCAwLCA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAKLSAgICAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCAKLSAgICA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIAotICAgIDY1NDc0LCA0Nzk2LCAxMjI5MiwgMTI2NTk1LCA2NTQ3OSwgMCwgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIAotICAgIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIAotICAgIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIAotICAgIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAKLSAgICAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgNjczNSwgNzM5NzksIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCAKLSAgICA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgNDI4NTUsIDExODg1NiwgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgCi0gICAgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAwLCA5ODM1NjgsIDAsIDAsIDkyNDAyLCAxMjgwNjIsIDEyOTY1LCAKLSAgICAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIAotICAgIDQxNzg3LCA5ODMyMzcsIDEyNjk5NCwgNDEzNzMsIDc4MDM5LCAxMjMwMywgMCwgMTMyMzIsIDEzMjMzLCAzNDksIDQ4NjMsIAotICAgIDQxMzcxLCAxMTY1NiwgMCwgMTIwNzAzLCAxMTk4ODMsIDEyODYxLCA0Mzk4LCA4NTQzLCA2NTYxOCwgMTI4MDE4LCAxMDk2LCAKLSAgICAwLCAwLCA0MjY4OCwgMTI0NDEsIDEyMzU1LCAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAKLSAgICAxMzIzNywgMTI3MTksIDEyNjY0NiwgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIAotICAgIDAsIDEyMDc4NSwgMTE5ODc0LCA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgCi0gICAgMTE5ODc5LCA2NjU5MCwgMTI4MTIzLCA0MTUzMywgNjYzMzcsIDAsIDkyMTg0LCAwLCA0OTY1LCA0MzQ0NSwgOTE3NTM2LCAKLSAgICA3Mzg0OSwgMCwgNDM2MzgsIDc4NTM3LCAxMjgyODcsIDYyNjEsIDExOTM0MiwgNDMxNDcsIDY2NTcwLCAxOTU3LCAxMDQyMCwgCi0gICAgOTgyLCAyNzU2LCAxMzI5MiwgMTMyMDYsIDEyODgyOCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAxMjc1NTksIDEzMjEyLCAKLSAgICA0MzIzOCwgMCwgMTMxOTAsIDEzMTg3LCA5MjU0MSwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgCi0gICAgMTY5NCwgODIxNiwgNzEzNjksIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzE5LCA0MzU0NCwgMTI2NDY2LCAwLCAKLSAgICA0MTQ0NCwgNjU2MjEsIDY5OTU1LCA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgCi0gICAgMTIzMTQsIDY1NjE2LCA1MjM4LCAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAKLSAgICAxMjg1MzcsIDM5MzYsIDExOTMzMSwgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgCi0gICAgMTMyMzksIDEyNjkyLCA3OTY5LCAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIAotICAgIDI5NzksIDEyMDMwMywgNjU2MTksIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAKLSAgICAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgCi0gICAgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgCi0gICAgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAKLSAgICAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCAKLSAgICA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIAotICAgIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIAotICAgIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgCi0gICAgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIAotICAgIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIAotICAgIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgCi0gICAgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIAotICAgIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCAKLSAgICA1NjcxLCAxMjAwNDEsIDAsIDAsIDAsIDEyODg1NSwgMCwgODQ3LCAxMjgyNDIsIDk1MjksIDAsIDY2NjU3LCA2OTgwLCAKLSAgICA3ODQ4MywgMTIwMDM1LCA3ODQ4NCwgOTgzNDgzLCAwLCAxMjAwMzMsIDc4NDg2LCAwLCAwLCAxMjAwMzksIDQyNjgzLCAwLCAKLSAgICA5ODMwNTUsIDcxMTQsIDAsIDAsIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCAKLSAgICA2NzkyLCA0MzIwMSwgMCwgMTk5NjMsIDU2OTgsIDAsIDAsIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgNjk3MjcsIAotICAgIDY4MTQxLCA4MzcyLCAwLCA2NTExNiwgMCwgMTIwMDIyLCAxMDE3NSwgMTAzODgsIDQyNzk5LCA5NDEwMCwgNDEwMTMsIAotICAgIDEwNTY4LCAwLCA5ODM2MTgsIDI4NjksIDAsIDQxMDE1LCAxOTQ2OTIsIDI3ODUsIDQzNjYsIDAsIDEwOTU0LCA0MTgwMiwgMCwgCi0gICAgNDI2MDgsIDc4NDY5LCA5ODg0LCA0NzU5LCAwLCAwLCAxMDI2NiwgNDEzNTksIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIAotICAgIDE2MDksIDkwMiwgMCwgNjM5MzYsIDEyODg3NSwgMTE2NjEsIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAKLSAgICAyNTU0LCA1MTU4LCA1NzE0LCAyMjEzLCAwLCAwLCA4MDcsIDQzMDc5LCAwLCA3ODQ3NSwgOTc2LCA1NTExLCA2NDU1MywgMCwgCi0gICAgNDIxNTUsIDAsIDQxMzU2LCA3NDExMCwgMTE4ODAxLCAxMjY2MTQsIDAsIDg2NzYsIDk4MzI4MywgMCwgNTU4MiwgNDUxLCAKLSAgICA2Mzk0MSwgNTc5OCwgOTM0OSwgNDIwMTgsIDEyNzg1OCwgMCwgMCwgNDM2MDksIDU5MDYsIDEyMDU1MywgMTQ0MCwgMCwgCi0gICAgMTI4ODUzLCAxMjAwMTYsIDc0MjgzLCAxMTAwNSwgMCwgNjY2NTYsIDY2MDQ0LCAwLCAxOTQ2OTgsIDAsIDAsIDQzMzkzLCAKLSAgICAxMDA5NCwgMCwgMTE1MjksIDEwODU3LCAxMjA2NDMsIDY2NDM2LCA2NTQ2LCA5MywgODEwMiwgMCwgNjg0MDUsIDAsIDAsIAotICAgIDgxNzEsIDAsIDExOTA5NywgMTI3MDY0LCA5MTc1NDMsIDM4MywgNzE1NCwgNDE2NTYsIDkyNjM0LCA5NDA0MCwgMCwgNTE4NywgCi0gICAgNzEyOTYsIDEyNzI3NywgMTEyODYsIDY4NjIwLCA2NDIxNywgMCwgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCAKLSAgICA5ODM4MTgsIDgyOTIsIDE5NTA3NCwgNDk4MCwgODg2MCwgNzM5NDcsIDEwMDI4LCA2NTI5MSwgNzA3NiwgMTMxODIsIAotICAgIDE5NDcwNSwgMCwgMCwgMTA2MzEsIDY2MDMxLCA3OTcyLCAwLCA3ODc4NSwgMCwgNzkwMCwgMCwgMTEzMDksIDM4MDYsIAotICAgIDQxOTgsIDQyNzI1LCAwLCA2NzY1NiwgOTk5NSwgMCwgOTI1NTIsIDAsIDEyOTMxLCAwLCA0MjY4NCwgNzQyODUsIDIwODgsIAotICAgIDY0MjEzLCA2NDM2NiwgNjUxNTYsIDg4MTQsIDQyMjM4LCA3NDc3MSwgMCwgMCwgMTI4MzYsIDAsIDAsIDc0MzQyLCA4NTkzLCAKLSAgICAwLCAwLCA2ODQ0NSwgMTMyNTUsIDAsIDAsIDc0NjQsIDAsIDY1ODY1LCAwLCAxOTQ2NTAsIDEyNzE0NCwgMCwgOTM0MiwgCi0gICAgMTIwNDY0LCAwLCA2NDUxNiwgMCwgNzg3OTIsIDEwMTI5LCA0MTAwNywgNzQzNzUsIDAsIDQwOTk1LCAxMjIwOSwgNDEwMTIsIAotICAgIDExOTEzNiwgMCwgMCwgNjk3MjQsIDQwOTkyLCA5MjI2NCwgMTI3MTUzLCA2ODY1MywgNDM1NTgsIDU1MjIsIDAsIDYxLCAwLCAKLSAgICA3NDEwNSwgMzYzMywgOTgzODkxLCA2NTE2MiwgNDEyMzQsIDEyMDg5LCA3ODI4MSwgOTc3MSwgOTgzODk2LCAxMzI1MSwgCi0gICAgMTI4NzAxLCAwLCA2MjYyLCAyNzg0LCA0Mjc0MywgMCwgODEyNiwgNjY0ODMsIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIAotICAgIDQxMDAyLCA0MDk5OSwgMTE5NjIzLCA0MzI2NiwgNzEwOCwgMTk0Nzc5LCAxMDg5MCwgNzQ0ODEsIDY1ODM0LCA4MzI0LCAKLSAgICAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMTI3NDY1LCA2NDczNywgMCwgOTgzNjUwLCA4OTMwLCA2NjY3OCwgNzQyNDksIDExOTMsIAotICAgIDEwMDU2LCAxODAwLCAxMzI1MywgMTMyNTIsIDc4MjksIDAsIDAsIDc3NDMsIDAsIDAsIDc3OTA0LCA5MjY0MCwgNzc5MDUsIAotICAgIDkwMzQsIDYwMzksIDAsIDEwMDc1LCAwLCA0MTAxOCwgNjU2ODMsIDEwMzM4LCA2NjQ2OSwgMCwgMCwgMCwgNDI4MTUsIDAsIAotICAgIDQxOTY2LCAwLCAxMjc0NzEsIDAsIDExNzkyLCA0MzA2NCwgNDEwMjUsIDkxMSwgNzUzOSwgMCwgMCwgMTIwMzM5LCA2NTE1OSwgCi0gICAgNjQzOTAsIDAsIDAsIDU1MjAsIDExNjYyLCAwLCA2NTMzMCwgNDI4MTIsIDAsIDAsIDEyMzI2LCA5ODM4NDcsIDAsIDQyODA4LCAKLSAgICAxMjgzMzcsIDkzNDgsIDY0OTAxLCA5ODM4NTIsIDAsIDAsIDAsIDAsIDAsIDkxNzU4NCwgNDM3MDIsIDk4MzU3NiwgNTg1NywgCi0gICAgNjUzNDIsIDkyNzI3LCAxMTkxMjAsIDEyMDA3OSwgODY0NCwgMCwgMCwgMCwgNzQyOTYsIDQxOTA5LCAwLCAxMjAzMzIsIAotICAgIDI3OTEsIDY5NjYzLCAxODkxLCA2OTgyNCwgMCwgNDE5MDcsIDY2NjQ3LCAxMTg5MzksIDg3NjEsIDEyOTQyLCA1NzQ4LCAwLCAKLSAgICAxMDc3MywgMCwgMCwgODc5NiwgNzgxNDksIDY0MTIsIDIwNjEsIDg1MjAsIDEzMTQ2LCAxMjcxODUsIDYzOTMxLCAwLCAKLSAgICA2NTkwMiwgMjg4MiwgMCwgMCwgMTI4NDMsIDQ1MjAsIDEyMDM0NSwgOTI0NTksIDAsIDk4MzY1MSwgMCwgNzM4NjAsIDAsIDAsIAotICAgIDY0MzQ1LCAwLCA5MjAxLCAxMjgzMTQsIDE5NDk0MCwgMCwgMCwgNDM2NzksIDkxNzU4NSwgNjUxMTcsIDkyMjcwLCAwLCAKLSAgICAxMDQyNywgMCwgMzg0NCwgMTIwNjc1LCA5NzU1LCAxMTEwLCA2NjEyLCAxMjIyMiwgMCwgMTI4Nzg5LCAwLCAwLCA3ODMsIAotICAgIDE5NDkzNSwgMCwgMCwgOTgzMDY0LCAxOTQ3MjAsIDY1MDU2LCAzNjIwLCA0MTE4MCwgNjgzNzgsIDQ1NTYsIDAsIDAsIAotICAgIDE5NDkzMywgNzQyNTAsIDAsIDY3NjU3LCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIDEyNzUyNywgOTE3NywgODkwMiwgCi0gICAgOTM5NTgsIDk4MzksIDAsIDEyODkxLCA5ODM3NDYsIDk4MzYyNywgNjM5OTksIDIwMTYsIDQxOTE3LCA5Nzg4LCA2MzkyOCwgCi0gICAgMCwgMTg2MiwgNjU4MDAsIDkxNTUsIDY2NjIzLCA5Nzg2LCA2NTA4MiwgNDE5MTksIDg1NzksIDQxOTE0LCA3OTgxLCAwLCAKLSAgICA2NjAxNywgNDUwOCwgNjQ4ODMsIDkyNDU2LCA5MjUyMiwgMTI3ODE0LCAwLCA2NDU5MiwgNzQyNzYsIDEyMDA4MCwgNjc4NCwgCi0gICAgNzg3ODgsIDY4MTgxLCAwLCAwLCAwLCAxMjc1MzQsIDEyMTQ3LCA5MDI0LCA2NjM3OCwgNjY0NzIsIDk4MzkyMCwgNjQyODksIAotICAgIDY1Mjg5LCA3ODE1MSwgNjY2NTgsIDE5NDkyOSwgNjQ1MDksIDc4MTUyLCAwLCAxMjY1MDUsIDExMDUxLCA5ODMyODgsIDAsIAotICAgIDExMzU1LCA2NTg4NSwgMCwgMTI4MzEwLCA0MTIxNCwgMCwgMTIyOTksIDAsIDc1MDAsIDQ1MDYsIDc3NzMsIDAsIDAsIAotICAgIDk5NjMsIDY4NjQ5LCAxMjY2MDksIDQwNDAsIDEyMDU3MCwgNjE2NywgMCwgNjM5MjIsIDY1OTQsIDk4MzczMSwgMCwgMCwgCi0gICAgMzYyNCwgNDMwMzYsIDAsIDYzODcsIDYzOTkwLCAxOTk0NywgNjM5ODgsIDQxOTU1LCAwLCA2Mzk5MywgMTA0NDAsIDk2MTEsIAotICAgIDY1NjA1LCA2ODAzLCAwLCA3NzM4LCA2Mzk4NiwgMTE0NDYsIDYzOTg0LCA5MjY0MSwgMzQzNSwgNzgxNjQsIDQzODE0LCAKLSAgICA0MzgxMCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAxMTg4OTgsIDEyNzQ4LCA0Mjc0MiwgOTUxNywgMTE1MTgsIDAsIDc4NzkwLCAKLSAgICAwLCA2Nzk5MywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgNjM5NTMsIDYzOTYwLCA5NTkxLCA0NTE2LCAxMDIxNywgNjgzNzAsIAotICAgIDExNDY5LCA2OTY5NywgNDIzMDYsIDI3MjMsIDExODk0NywgMCwgMCwgMCwgMCwgMCwgMTEzOTcsIDI4ODAsIDAsIDAsIAotICAgIDI4NzIsIDAsIDAsIDM0OTgsIDQzNzgsIDkxNzUzOSwgNDI3MCwgMCwgNjU1NTEsIDY4MjA1LCA2NjMzLCA0MzM4NywgMCwgCi0gICAgNTIzMCwgMCwgMCwgMCwgMCwgMCwgODE2MSwgMzkzLCAxMjAxMywgMCwgMCwgMTI2NDc5LCA0MTUsIDYzOTY0LCA2Mzk2MywgCi0gICAgNDIzNDUsIDkyMzEwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgMCwgNjM5NjEsIDQ0NzIsIDAsIDAsIDc4MTU5LCAKLSAgICA2OTY5OSwgOTE3OTM2LCA0MjM0MCwgNDc1NiwgMTI4MDc4LCA3MDgxLCAxMDczMCwgNzY5MSwgMTAzMzEsIDYzODMwLCAKLSAgICAxMTk2MjUsIDQyOTIyLCA0MjEwMywgODYyOCwgOTgxMywgMCwgNDI0NTMsIDE2MDQsIDk1NjUsIDEwNTM5LCA2OTcwMSwgCi0gICAgNjU3NjQsIDQxNDE1LCA2NTc2NywgMCwgODQ1NywgNDIzMDEsIDExMzcyLCA2NDg3MywgMTE5OTIsIDAsIDAsIDYzOTgwLCAKLSAgICAxMTgwMSwgMzYyMiwgOTgzMTI0LCA2NDMzNiwgMTIwMTcsIDEwNDYzLCA2Mzk4MSwgNDk2NywgNjQxODksIDE5NjYsIAotICAgIDQzNjI4LCAwLCA5ODMyODQsIDAsIDAsIDYzOTcxLCA0MzQ3LCA0NDE2LCA0MjA5OCwgMTEwMDksIDEwNjk0LCA2Mzk3MywgCi0gICAgNDAyLCAwLCAxMzE0NywgMTI4NjkyLCA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAwLCA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCAKLSAgICAwLCAxMTMwMiwgNjI1OSwgNDMzOTUsIDAsIDAsIDE5NDY3MCwgMCwgOTIzNTEsIDAsIDc0NDI1LCAxMTI5OSwgMTU2MSwgMCwgCi0gICAgOTIzNTksIDY0OTQyLCA5ODM1NTksIDE5NDczMywgOTgzNjc3LCAxOTQ3MzIsIDAsIDc0MzAxLCAwLCAxMTI4MCwgMCwgCi0gICAgNjk3ODQsIDc0MDYwLCAwLCAwLCAxMTk2NjQsIDUxNDUsIDEyNDg2LCA2NTAxOCwgNjY1MTYsIDU0MDksIDEyNzM3OSwgCi0gICAgMTk0NjY5LCA3NDAyLCA1Mzk5LCA5Njg1LCA3NDA4OSwgNzk1MiwgNTQwMSwgMCwgNjY2MTYsIDY4NDIxLCA5ODM5MTAsIDAsIAotICAgIDU0MDUsIDEyNzg3NSwgNjQ4NjYsIDAsIDExOTU4MywgMTI4MzQ1LCA3ODc4NCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIAotICAgIDY0NjkwLCAzMjU0LCAwLCAwLCAxMjgyMDcsIDQyMzkwLCA0MzY3OCwgMTk0NzI1LCA5ODM5MDAsIDY1MDc3LCAwLCA2Mzg4LCAKLSAgICAzMzU1LCA5NTA4LCA5ODY3LCA1NzIzLCAxMTUyMCwgNTYxMSwgMCwgMzM3NywgMCwgMCwgMCwgMCwgNzgyMjgsIDAsIAotICAgIDk4Mzc1MywgNDI2OTEsIDkxNzg4NiwgMTI3MTk4LCA3NDc2NywgMCwgMTI3MDc1LCAxMzc5LCAyNDYsIDAsIDk4Mzc1MiwgCi0gICAgMzc4OCwgOTgzMTA2LCAxMTA0MSwgOTI1NDksIDY2MzA0LCAwLCAwLCA4OTE3LCA0MjQwMywgMzAxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5ODM2ODgsIDEwNjU2LCAwLCA2NTIxNCwgMTE5MjQyLCA0MjU2NywgOTIyMTcsIDEzMTYzLCA5ODMyMDIsIDEyMDgzMSwgCi0gICAgNzQ1OTcsIDMxODIsIDAsIDAsIDAsIDY1MDM0LCA2NTg4OSwgNDIxNjksIDQ3NTUsIDc0MjQ0LCAxOTQ2MjEsIDExNDQzLCAwLCAKLSAgICA2NjMxOSwgNzQ1OTgsIDYwOCwgNjAwLCAwLCAxMjE5LCAzOTM0LCA2NDIwNiwgMTE0ODMsIDc0NTEwLCAwLCA3NDQ4NSwgCi0gICAgNDI0NDIsIDY1NDcwLCA5ODM4OTgsIDY0MjAyLCAxMzE2MCwgNzc1OSwgNDI0ODIsIDQ4NSwgMTI4MDA2LCAwLCA5ODI4LCAwLCAKLSAgICAwLCA0MjI4MCwgMCwgOTM1MSwgNzc3OCwgNjQzNzksIDc0OTYsIDQyNDMxLCA2OTE2LCAxMjA4LCAwLCAxMTk2MzEsIAotICAgIDExMDAyLCA0MjQ3MCwgMCwgMTE4OTQ2LCAwLCAwLCA3NDA0MSwgMCwgNzAwNDUsIDQzNTM5LCA1NDExLCA0MjE5NiwgMCwgMCwgCi0gICAgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIDkzMzcsIDEyMDUyLCAxMDY0MywgNTUyNzEsIAotICAgIDk4MzE3OSwgMTIxNjYsIDI1NDYsIDE5NDY4MywgMjEzLCAxMTg4NTIsIDY1NjExLCAwLCAwLCAxOTQ3NTYsIDc0MzEwLCAKLSAgICA2NTU0LCAwLCAxMTkxNCwgNTQ1MiwgMCwgMCwgMCwgMCwgMCwgMTk0NjgxLCA5MjU2MCwgMjcxMywgMCwgOTY1MCwgNDMzMzAsIAotICAgIDAsIDE5NDY3NSwgMTQwNiwgMCwgMCwgOTI2NTksIDAsIDY4MjIzLCA0MTQzLCAxOTQ2NzcsIDAsIDY1NzQ4LCA0MTQxLCAKLSAgICA5NjgyLCA2NTI4NywgMTUwOCwgMTI3MDEzLCA4Nzc5LCAxMDU2OSwgODcyNSwgMTMyOTksIDY2NjM4LCA2NTc1MCwgNDIyNjMsIAotICAgIDQxNDUsIDYzODAsIDY1NzUxLCA2NjYxMywgNDM5OTQsIDY1NzM4LCA1NTI1MCwgOTE4NSwgOTU1MCwgMCwgNDM0MDMsIDAsIAotICAgIDAsIDAsIDY1NzM2LCA0MTk1MSwgNjQ4MTYsIDY1NzU2LCA5ODMyMDMsIDEyOTU1LCAxMDU5NiwgMjg4OCwgMTk0NjQ1LCAwLCAKLSAgICAwLCA5NjU3LCA5MDE5LCAxOTQ3NjYsIDAsIDI4NzgsIDUzOTAsIDAsIDE5NDk2MSwgMCwgNjg2NzksIDQzNTUyLCA3NTAxLCAKLSAgICA2MzI4LCAwLCAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCA1MjM1LCA4MDMsIDY4MzgxLCAwLCAwLCA4OTg2LCAKLSAgICAxMjY1NDIsIDEwNjMyLCAxMTkzNCwgMTE0NTIsIDEzMzIsIDAsIDAsIDEyNjY0NywgMCwgMTE4ODg3LCAxNzkxLCA1MTkxLCAKLSAgICA5Mjg4LCA2NDgyMiwgMjg5MiwgMCwgNDMzOTQsIDU1NSwgMCwgMCwgNjY2NDYsIDAsIDExOTAwMiwgMTMxNTEsIDc0NTEyLCAKLSAgICA3Mjg5LCA3NDA1NSwgNjQxNjEsIDg4NTQsIDY0MTYyLCA1ODU4LCA0MTkyNywgMTA1ODIsIDAsIDE3ODQsIDEzNjEsIAotICAgIDE5NTA0NywgMCwgNzkwNSwgMCwgNjQ4NjgsIDEyODgxMywgMTMxNTgsIDkyMTY2LCA3MjExLCAwLCA5MzcxLCA3Mzk3MywgCi0gICAgOTE3NTUzLCA2ODI4LCAxNjI1LCA5MjMwMiwgMCwgMTM0MiwgNjg0NDAsIDY0MTcxLCAxMjY3MDQsIDEwOTAzLCA5ODM0ODYsIAotICAgIDAsIDAsIDAsIDAsIDQ0ODIsIDQxNjA2LCAwLCAxMjg1NjksIDk4MzExMiwgMCwgNjQzODEsIDAsIDAsIDE5NTA5MCwgCi0gICAgNDIyNDUsIDEyNjQ2NywgNDE5NzIsIDAsIDQ0NCwgMCwgOTEyNywgNjY2ODcsIDY2NjE5LCAxMjY0ODksIDc4MDI1LCAwLCAKLSAgICAxMTM0OSwgNDA5OTEsIDkxNzU3MCwgMCwgMTE5NTk5LCAxMjA4MzAsIDAsIDExOTcsIDEyODI4MiwgMTE0OSwgMTk0OTcwLCAKLSAgICAwLCAwLCA0MDk5MCwgNDM3NjUsIDAsIDM0OTIsIDAsIDEyNzk0MiwgMCwgMCwgMCwgMTI4MzgsIDk4Mzk2OSwgMTk5NDgsIDAsIAotICAgIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCA0MTMwOSwgMCwgMCwgODE1MiwgMCwgNDE1NTAsIAotICAgIDEyMjI3LCA5ODM2MTMsIDAsIDEyODI4LCAxMjc1MTEsIDAsIDAsIDEyMDcwOCwgMCwgMCwgMTAzODYsIDExOTU3NCwgMCwgMCwgCi0gICAgOTI2ODAsIDk4Mzc4MCwgNjgxNTQsIDAsIDE3NDMsIDAsIDAsIDkyMjM5LCA2NTE4NiwgOTE3NTcxLCAwLCA5NjA2LCAwLCAwLCAKLSAgICA2NDQzOSwgMCwgMCwgOTI2ODYsIDAsIDAsIDE5NDk2NywgMCwgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDc4MzYyLCAKLSAgICA2NDgzMCwgMCwgMTI2NTU3LCA0MTA5MSwgMzQyNiwgMTM0NCwgODg3MCwgMCwgMCwgNDczNSwgMTI3MDE3LCA2MTE5LCAKLSAgICAxMjgyMiwgNDI2OTksIDAsIDk4MzgxNSwgNzQ4MTgsIDE0MjMsIDAsIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIDEwNTU5LCAKLSAgICAwLCAxMTg4OTIsIDAsIDk0NzIsIDAsIDExOTI5LCAwLCA3MTcwLCA5NTk2LCA2MTMwLCAxMjg4MjYsIDQzNjI5LCAxMTU3OSwgCi0gICAgNzg3MTMsIDAsIDE5NDc0MCwgMTI4NjkxLCA5MjE4NSwgNjY2OTksIDY0NDQwLCAxMDA0LCA5MjU4NCwgMTk0NzM3LCAKLSAgICA0MzIzNCwgNjYwMDgsIDEyNjI3LCAwLCA2ODQxNCwgMCwgNDM2MTksIDQzMzAzLCAxMTMwMCwgNDMzMDQsIDk2ODYsIDU4OTAsIAotICAgIDExNzc2LCA3NTU4LCAxMjcxNTgsIDY1NjI3LCAwLCAxMDcxOCwgMTMxNTQsIDM0NjEsIDkxMzksIDAsIDAsIDAsIDAsIAotICAgIDY1MzY1LCA3Mzg3NywgNjU2MjgsIDc4MDE5LCAxMjAzMTksIDAsIDQxNzA4LCAxMjg2MCwgMjY0MSwgMTIwNjksIDEwODM4LCAKLSAgICA1NDAzLCAxMDM1MiwgNzAwODUsIDEwMDYxLCA0MzIzNywgMCwgNTE0MCwgMjA5LCAxMjg4NDcsIDQxNzA0LCA0MTA1NiwgCi0gICAgNDMwNzgsIDEyODEyNSwgMTE4ODA5LCAwLCAxMDg5OSwgNjU0NjksIDkyMzYyLCAwLCAwLCAyNDEwLCA5OTMsIDAsIAotICAgIDEyMDU4OSwgMTIwNjg5LCA3ODY5MywgMCwgMCwgNzIzMiwgMCwgMTE5MjUzLCAwLCA3MTEwLCA3NDQ2MiwgMjA2NiwgCi0gICAgMTA0ODksIDQyMTY2LCA0MzQ2MywgMTA2NTksIDM2MDAsIDAsIDQyMjQsIDEzMzYsIDQxNTE4LCAwLCAwLCAwLCAwLCAKLSAgICA0MTEzOSwgNjQ4MjAsIDkyNTM4LCAxMjk2NiwgNDExMzQsIDAsIDAsIDAsIDAsIDI3MiwgNDI2MywgODc5MywgMCwgMCwgCi0gICAgNDE1MDIsIDAsIDk4MywgMTI1NDksIDAsIDAsIDExOTAsIDQxMDksIDEzMzUsIDg0MSwgNTg4OCwgNDEzNTgsIDY0ODYzLCAKLSAgICA5NTQ0LCA0MzQ4MSwgMCwgMTk0ODA2LCA3MDAyNywgMjA5OSwgNTEyMCwgMjQwOSwgNzc5OSwgMCwgNzQ0MjQsIDAsIDAsIAotICAgIDQ3MzEsIDAsIDY2NjI5LCAwLCAwLCAxMjU1LCA0MTQ5LCA5MjQ3LCAwLCA5OTEzLCAwLCAwLCA2NDkxNCwgOTE3Nzg3LCAKLSAgICA2NTEwMSwgMCwgMTE2OTQsIDkyNDc1LCAxMTY5MCwgNTgzNSwgMTI3MTY0LCA2NjYyNSwgMTA4NDIsIDQxMzU0LCA0MjEyMywgCi0gICAgNDMwOTcsIDExNjg4LCA2NjYzNCwgMTA5NCwgMTk0LCA2NDY5MiwgMCwgODE4MCwgMCwgMCwgOTk3MiwgNzM4NjUsIDQ1MTksIAotICAgIDYxMTQsIDEwODk4LCA0MzA3MiwgMCwgMCwgOTM5NjAsIDk4MzMxNCwgMTI2NTgxLCAxMDY5NSwgMCwgNzU0MCwgMCwgODgxLCAKLSAgICA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgMTMzMTEsIDY4NDAzLCA0MTg1NywgNjQzMjEsIDgzNTksIDAsIDEyNjg5LCAKLSAgICAwLCAxOTQ1OTQsIDAsIDk4MzMwNCwgOTgzODcyLCA2ODE4MywgMCwgOTgzMzA2LCAxMjg3LCA1NDM2LCAwLCA5ODMzMDksIAotICAgIDc0MTQyLCA5MjMyOCwgNzQxNTIsIDExOTA3OCwgNjA1MSwgMTA0OTcsIDY5NjY4LCA4OTg1LCAxMjEwOSwgOTgzMzE1LCAwLCAKLSAgICAxMjcyNDIsIDAsIDAsIDM2NTIsIDEwNTM3LCAwLCAxMjc2LCAxMjA0NDAsIDY1NDksIDI3OSwgNzM3NDUsIDAsIDAsIDAsIAotICAgIDE0ODksIDAsIDAsIDAsIDM4OTksIDEwMDcsIDQyMTI0LCA5ODM1NTcsIDQyMTIyLCA5MjMzNywgOTIzNjcsIDAsIDExOTg1LCAKLSAgICAxMzQ1LCA3ODYwMCwgMCwgMCwgODk1NiwgNDMwODMsIDk0MDU3LCA0MjEzOCwgNzg2MTAsIDAsIDEyMTUxLCA3ODYwOCwgCi0gICAgNzg2MDQsIDc4NjA1LCA2Mjg1LCA3ODYwMywgNzg2MTIsIDc4NjEzLCA2NTk0MiwgNDkyLCA4Njg1LCAwLCA5ODM3NTAsIDAsIAotICAgIDc4NjIyLCA0MzcxMiwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCA3ODYxNSwgNzg2MTYsIDIyOTcsIDAsIDczODM3LCAKLSAgICAxMTk4MjMsIDI1MjcsIDExOTgyNCwgMTk3LCAyNzk5LCA5MjU5NCwgNDE5NDQsIDEyMDI3NiwgOTkzMywgMCwgNjY1MTUsIAotICAgIDc2NywgNTUyNCwgNzAyOCwgMCwgMCwgMTE5ODI3LCAxMTk4MTcsIDExOTgyOCwgNzg2MzMsIDEwODk2LCAwLCAxNzk5LCAKLSAgICAxMjA0OTcsIDY5NzEsIDc0MzM2LCAxMjgzNDIsIDAsIDY1MzQwLCAxMTg5NzksIDQxNTUxLCAyNDM0LCA5NDAxOCwgMCwgCi0gICAgMTIwNTc5LCAwLCA0NjMxLCAwLCAwLCA2NDA3LCAwLCA2MzM4LCA0MzIxNCwgMCwgNzU3MCwgMCwgMzE5MiwgMCwgODQxNCwgCi0gICAgMCwgOTM5ODMsIDAsIDAsIDAsIDkxNjQsIDY2NjEyLCA5Mzk1OSwgMzE3MSwgNjYyMywgNDk2MSwgNjgzOTYsIDg4NiwgCi0gICAgNTUyMTYsIDg2NTQsIDc4ODMyLCA5OTkzLCA3NDM5MCwgNjQ2MDMsIDcwMDY2LCA2OTI0MSwgOTU5OSwgNzg2MjksIDQzMDg0LCAKLSAgICA3ODYyNywgNzg2MjgsIDc4NjI1LCAyMzk5LCA2OTY5MywgODk5NCwgMTA5NDQsIDQxMjA4LCA5ODM3MDQsIDQxMTY4LCAKLSAgICA4MTc4LCAwLCAzMzY3LCA5MjMzNCwgNDI1MTAsIDc4NjQxLCA3ODYzNiwgNjgwNCwgNzg2MzQsIDE5NDcsIDAsIDAsIAotICAgIDkyNjgxLCA0Mjc1OSwgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCA5MTgxLCA2NTM1OSwgMCwgODAxNywgMTE5ODMxLCAKLSAgICA2NTA5NiwgNjY3MjAsIDAsIDQzNDc1LCAwLCA0OTA5LCAxMjEyNiwgMTI4NjczLCAxMjA2OTYsIDQ5MDQsIDk4MzMyNSwgCi0gICAgNjk2NTAsIDEzNjUsIDkyNTMsIDQyNzU3LCA0MzQzNiwgNzQ2MiwgMCwgMCwgMCwgMCwgMTE5NTg3LCA2NDQxNSwgMCwgMCwgCi0gICAgNTM5OCwgMCwgMTI3Mzg2LCA5Mzk1MywgMCwgMCwgMTE5MDE1LCAwLCAwLCA5NDc2LCAwLCA5ODM3NjgsIDEyNzYzLCAKLSAgICAxMjY2MDMsIDM2MjksIDAsIDEzMDA1LCAwLCAzNjI4LCAwLCAwLCA5MjUwMiwgMzQ2OSwgNDIxMDcsIDQyMTE2LCA5MTc1NzgsIAotICAgIDY0ODA5LCAyOTI4LCA0OTA1LCA5ODUzLCA4NTEsIDkwNDAsIDAsIDY0NjY1LCA0MzA4NiwgOTExNCwgMCwgNDI1ODMsIAotICAgIDkzMTUsIDQ4MjIsIDQ5MDYsIDM4NTIsIDI4NDcsIDExOTgyMSwgMzIzNiwgMTEzMTcsIDEyNTEsIDc3NzcsIDQxODUyLCAKLSAgICAxMTQxMCwgMTA5NjQsIDAsIDQzMjIyLCAxMjY0NiwgMTIwMjY5LCAxMDI1OSwgOTg2NSwgNjU4MjEsIDAsIDYwMTgsIAotICAgIDkyMjkwLCAwLCAxMjI3NiwgMCwgNjgzNzIsIDAsIDkyMjU5LCAxMTkyNDQsIDAsIDk4MzIyNCwgMTA0NjcsIDAsIDI0NDMsIAotICAgIDEwOTE4LCA3ODIxNywgMTE5ODI1LCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAwLCA3Mzk4NywgMTI3ODg1LCAwLCAwLCAKKyAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY5OCwgNzAwNDQsIDE5NTA2NSwgMCwgCisgICAgODQxMywgOTgzODE2LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKKyAgICAwLCAxMjY2MzksIDEyMDA5NywgMCwgOTQwNzgsIDEyODEzMywgMTI3NzY3LCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIAorICAgIDQyOTEzLCA5MjE4NywgNzI3MCwgMCwgNjY2MDYsIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgCisgICAgMTI4MzUzLCA2Mzk4MiwgNzM5MywgMTI4MDcsIDQzNDEzLCA2MzkwNiwgMTU5OCwgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAKKyAgICAxMzA3LCAwLCAxMDUxNSwgNDE1ODksIDEyODY5OCwgMCwgNjIxOCwgMCwgMTQzMCwgMCwgMCwgMTIwNjA2LCA3ODc1NCwgCisgICAgNTQxMywgNzYxOSwgMzI1NSwgMzQ5MywgNzQwMzIsIDExNTQ5LCAxMDczNSwgNDE3NDMsIDczOTM3LCA2ODAxLCA5ODM2MzMsIAorICAgIDQ1MTgsIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMTIwMTU4LCAyNzEwLCAwLCA2OTI0MywgNDE3MjQsIDAsIAorICAgIDQzMDczLCA0MTY5MCwgMTI0NzksIDk4MzYzNSwgMCwgMCwgOTgzODE4LCA3MDA0NiwgMTYyOCwgMTI3MTQ5LCA5ODM0ODcsIAorICAgIDk4MzczMSwgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDk0MDU2LCAwLCAwLCA1MzM5LCA3NDMyMywgMCwgCisgICAgMTMwMDQsIDAsIDQ0NTcsIDAsIDAsIDE5NDgxOCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCAKKyAgICA2ODQ2NCwgMTI2MzMsIDEyODcwLCA2OTcwNSwgNjUxODMsIDU2ODgsIDExOTI2LCA2MDMzLCA2MzEwLCA1Njg2LCAwLCAKKyAgICA3NDI1MSwgMCwgMTIwNjQ3LCAwLCA1MCwgMTA1NTgsIDk4NzEsIDQyNjEyLCA0MzY1NSwgMCwgMCwgMCwgNjY0NjgsIDAsIAorICAgIDEzMjU5LCA0NDQ4LCAwLCA5ODM4NDUsIDAsIDcwMDQzLCA2Nzg1MywgMCwgMTA2NDAsIDExNTM5LCAxMTUxLCAwLCAKKyAgICA5MTc2MDcsIDEyNzU0NCwgMTI3MDc5LCAxOTUwNTAsIDEyNzg1MiwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgCisgICAgMTE4ODcwLCA4ODEyLCAwLCAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMjEwNSwgODA4NywgNzgxNjMsIAorICAgIDY5NjMyLCA5ODk0LCAwLCAwLCAwLCA0NjM2LCA1NTI2MiwgNzg1MTMsIDQ1MTUsIDIzODIsIDAsIDEyNzA1NSwgMCwgCisgICAgMTIwNDk1LCAwLCAxMjgyODQsIDEyMjc3LCAxOTQ2MjcsIDExOTk1LCA5MjU1MywgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAKKyAgICAwLCA5MjQyNiwgMCwgNjUzMSwgMCwgMTI3ODQ2LCA0NzMsIDQzNDE1LCAwLCA5ODM2NTAsIDE4NzMsIDEwODcsIDAsIDAsIDAsIAorICAgIDc4NTI3LCA2NjQzOSwgNDMyMTgsIDk4MzEyMywgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDk4MzU3MSwgMCwgCisgICAgOTQ4OSwgMCwgMCwgNDM4NCwgNzQyMjAsIDYzODQ1LCAyMDU4LCAxMjg4NjMsIDEzMjk1LCA0MzE5MSwgMTI4MDMwLCAwLCAKKyAgICAxMTU0LCAzODU3LCAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAKKyAgICAwLCA0OTUsIDExOTAwNywgNDE3MTIsIDc5ODMsIDAsIDkzOTk3LCAwLCA2MzQ3LCAxMjAxNjUsIDc2NTQsIDQxNzEwLCAKKyAgICA0MTk2LCAwLCA0MzcsIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgNjQzMDYsIDAsIDAsIAorICAgIDQ5OTksIDE5NDY0MiwgMCwgMTI2NTgyLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIDgwNDQsIDc0ODM0LCAxOTQ2NDMsIAorICAgIDQxNzg5LCAxMjgxNDIsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgCisgICAgMTMwNTgsIDEyMDQ0OSwgMTI4NzUsIDAsIDkyMTg2LCAxMzIyOSwgMCwgMTA1NzUsIDQzMzk5LCAwLCAwLCA0MTc5MSwgCisgICAgMTEwNCwgMCwgMCwgMTA2NTUsIDAsIDAsIDAsIDAsIDEwODIsIDE5NTA0OSwgODQyOCwgNjU2OSwgMCwgMCwgMCwgNjk4NDksIAorICAgIDY3ODMsIDAsIDEyOTkzLCA4MDQ5LCA0MTU0OCwgNDQwMjEsIDY0NTgsIDk4MzgwNywgMTI4ODgyLCA0NzYxLCA2MzgyOCwgCisgICAgNDc2NiwgNjQ2MjMsIDEyNzMsIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgNjMyMiwgMTA0ODMsIAorICAgIDk4MzYwMywgNDE1NDUsIDAsIDkyNDQ5LCAwLCAwLCAwLCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIAorICAgIDUxMjIsIDQxNTI3LCAwLCA2NjMyMCwgOTgzODExLCAwLCAwLCAwLCA0MTUzNywgNjk2ODMsIDgzMDMsIDgyODIsIDExODE3LCAKKyAgICA3Mzg1NywgMTAwMDMsIDczODU5LCA2NTkwNCwgNzM2MywgMTY4NiwgMCwgNzg0MDYsIDExNDY3LCAzNjY0LCA2NTkyMSwgCisgICAgNjQyOTksIDE5NDY2NCwgMCwgMCwgNDMyNCwgMTI2LCA0MjI0NiwgMTE5MTUyLCAwLCA3NDM3OCwgNjU5MjYsIDc3NDQsIAorICAgIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCA3ODA1MiwgNDM4MTcsIDY5NjYsIDQzODIyLCA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgCisgICAgMCwgNDc2MiwgMTEwMywgMCwgMCwgNDc2NSwgOTgzNDkyLCAxMzA3OCwgMCwgNDc2MCwgNjM4MjcsIDIwNTAsIDEwODcxLCAKKyAgICA0MzE5OSwgMTEwMiwgMCwgNDIyMzYsIDEyODg2NywgMTk0NjY3LCAxMTU0NiwgNzQ3OTQsIDMzNywgMCwgNDI1OTEsIDg2MjcsIAorICAgIDEyMjc5LCAxMTExLCAwLCA5MjE2MSwgNDcwNywgNjgyMDYsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIAorICAgIDg2NDUsIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCA5MTc1NjEsIDAsIDExOTU3NSwgMjI5MywgMCwgNjY2NTQsIDAsIDkyNjc2LCAKKyAgICAwLCAxMzAwOCwgMCwgNDM4NSwgMCwgMTMwMTEsIDAsIDkyNTY5LCAxMTkxNjEsIDEzMDA5LCAxNjAsIDI2NzcsIDAsIDAsIAorICAgIDQxNzkzLCA2NTc2MywgNzQyMjEsIDEyMDE0MSwgNDE3OTIsIDQyNzcwLCA5NDA1NCwgNjU3NjIsIDExODgyOSwgNDM4MjEsIAorICAgIDU3MDksIDAsIDk0MDUzLCA0MzgxNiwgMCwgMCwgMTA3OSwgMzg2NywgNTcwOCwgMCwgMCwgNDM3OTcsIDU3MDYsIDY0NzY4LCAKKyAgICA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgMTA5OTEsIDEyODgxNiwgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAKKyAgICAxMzE3MCwgMTI1NDAsIDkxNzU3NywgNDI2MDUsIDEyMDc2NSwgMTI2NjE3LCA2ODY0NywgOTE3NTcyLCAxMDA1OCwgMCwgCisgICAgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgCisgICAgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgOTE3NTg4LCAxMjA1NDEsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCAKKyAgICA5MjIyNiwgMTMyNDYsIDg2NCwgMCwgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDkyNTMzLCAxMzI0MCwgCisgICAgMTk1MDY4LCA1MTkyLCA0MzM4LCA2Nzk4MiwgMTA5NDgsIDkxNzYwMSwgMTMxOTksIDkyNTc1LCAxMjM2LCAxMzIwOCwgCisgICAgMTMyNjEsIDEzMTg5LCAxMzE4OCwgOTM5OTMsIDAsIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAKKyAgICAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgCisgICAgNDE1MjIsIDk4MzkxNSwgOTIxNjgsIDk4Mzc3MiwgOTE3ODU4LCAxMTM1NCwgOTQwNzEsIDAsIDQyNzk1LCAwLCAxMTkxOTUsIAorICAgIDExMzk0LCAxOTQ2NDYsIDEzMjM2LCAxMzI3MiwgMTMxOTQsIDEzMzQsIDY5OTI2LCA0NDc5LCAxMTc4LCA2NTU4NiwgCisgICAgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCA0NjAxLCAwLCAwLCA5ODM3NjUsIDAsIDAsIDE5NDY1OCwgMCwgNjgwOSwgNjM3ODYsIAorICAgIDYwMzEsIDAsIDYzNzkxLCA2Mzc5MCwgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCA0MzE1MywgNzU0LCAxMDE5MiwgCisgICAgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgMCwgMCwgMTA3NDcsIDEyNSwgMCwgNjQ4OTAsIDAsIDk4MzEzMSwgMCwgCisgICAgNDE3MTksIDYzNzU4LCAzNTIzLCAxMDc0LCAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgCisgICAgNDMxNDUsIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCAKKyAgICA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIDYzODA1LCA2MzgwNCwgNDM2MzIsIDYzODAxLCA0MTA4MiwgODE0MCwgCisgICAgNjM3OTgsIDYyNjAsIDAsIDAsIDk0MDc0LCA2Mzc5MywgMTE5ODgsIDM4OTgsIDEyODI0MSwgMTAyMDEsIDEyMjM4LCAKKyAgICA2Mzc5NSwgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCAKKyAgICA5ODMzMjksIDQyMjAzLCA3OTUwLCAxMDgwNCwgNjM3NzEsIDQyNzg3LCA0Mzg2LCAxMjIyNCwgNjk3MywgMjc5MywgMTI0NzUsIAorICAgIDAsIDAsIDYzNzY5LCA5NTMwLCA5ODMxMTksIDEyMjMyLCAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCAKKyAgICA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAxMTA1MywgMTI4Nzk2LCA2Mzc0NCwgMTI4MTA3LCAwLCA3NTg4LCA2Mzc0OCwgCisgICAgMTY5MywgNjM3NDYsIDQzMjA0LCA1MDU1LCA2ODQyNiwgOTE3ODUzLCAxMDkwLCAxMjA2NzksIDEyODM1NiwgMTE2NjUsIAorICAgIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgNzg2ODEsIDExNTEzLCAwLCA2MTU3LCA2Mzc3NSwgNjM3NzQsIAorICAgIDYzNzczLCAxMzE5MSwgMTIxNzAsIDM1MDAsIDMxMzksIDAsIDMxNzAsIDEyNDg1LCAwLCAxMDg3MiwgNzgyNzEsIDEzMDA2LCAKKyAgICA2NDQzMywgMCwgMCwgOTQxLCAwLCAwLCAwLCA2NTU0MSwgMTEwNjMsIDAsIDgyMjgsIDAsIDQyMDY1LCAwLCAwLCA5NDAzOSwgCisgICAgMCwgOTI0NTUsIDczODYsIDAsIDY0NDQ0LCAwLCAxMTk4NjMsIDQzNjAzLCA5NDA3NSwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgCisgICAgMTAwMjUsIDY5OTE1LCAyOTE4LCAwLCA2NTMwMCwgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIAorICAgIDEyNzgyOSwgNjUzOTMsIDAsIDc0MTM4LCAwLCAwLCAwLCA3NDEzOSwgOTI3MTIsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgMCwgCisgICAgNjUzOTYsIDAsIDY1ODEzLCAxMzI1NiwgMTI4MiwgMTIwNzcxLCAwLCAwLCAxMDg4OCwgOTgzNjA0LCA2NTI0MiwgMCwgCisgICAgMzMzMCwgMCwgMCwgOTgzOTc0LCAwLCAwLCA3NDI1OSwgMzMwNCwgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIAorICAgIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAxMTg3OTQsIDAsIDQzMDk0LCA3MDAyMywgNDM2NTAsIDk0MDM3LCAwLCA5MDM1LCAwLCAKKyAgICAwLCAxMjgwMDUsIDAsIDkyMjA3LCA2ODEyNSwgMCwgMTY0LCAwLCA5NDA2NywgOTQwMDAsIDY5NTgsIDAsIDQzMTE2LCAwLCAKKyAgICA3MDAxOSwgMTMyNDUsIDAsIDAsIDEyNzM3NiwgMCwgNzAwMzEsIDEyNzc1NiwgMTI2NjYsIDEzMTc1LCAxMzIwNywgCisgICAgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCA3NDQ3LCA1OTI5LCAwLCA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAKKyAgICAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgOTcxLCAxMzA2MiwgMCwgMCwgNjUxOTUsIDEwMTY0LCA5MjI1MiwgNzQ0MjgsIDAsIAorICAgIDc4MTQ2LCA5MjYxMSwgMCwgMCwgMCwgMTAwNDUsIDEyODgyLCAxMzI3NSwgMTI4MTYxLCAxMTA1NywgMCwgMTMyNzYsIDAsIAorICAgIDQxNTI1LCA3ODE1MCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIDEyMjI5LCA0MTUyMywgMCwgNDM0MTEsIDczNzUxLCAwLCAKKyAgICA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIDY0OTU4LCAwLCAwLCA3Mzk4OSwgNjgxOTIsIDAsIDY5ODQ3LCAKKyAgICAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIDQ3OTYsIDEyMjkyLCAxMjY1OTUsIDY1NDc5LCAwLCAKKyAgICA0MTc4MSwgMTA0ODYsIDQxNDgwLCA0MzAwMiwgOTg5OSwgMCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgNTc4OCwgODA5MiwgCisgICAgNjgyMTIsIDQxMjIyLCAxODMxLCA2NjAyMCwgMzk4MiwgMCwgNDM4OCwgMCwgNzQ2LCAxMjA3ODQsIDAsIDAsIDEyMDE4LCAKKyAgICA2NTI5NCwgMCwgMCwgMCwgMCwgNDQyMiwgNDcwOCwgMzc5OSwgNzQyOTIsIDExOTM1NywgMCwgNzQ0MzAsIDAsIDExNzAwLCAKKyAgICA0Mzc0LCAwLCAxMjgxNzksIDEzNjQsIDAsIDgwMzgsIDAsIDkxNzU5NywgMTI4NjgsIDY5ODE0LCAwLCA2NzM1LCA3Mzk3OSwgCisgICAgMTMxNzQsIDczOTY4LCAxMzIyNSwgMCwgNjk4MDgsIDY1ODM1LCAwLCAyMzY1LCA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCAKKyAgICA0Mjg2NiwgMCwgMCwgMCwgNjY0MzgsIDQxNzg1LCAxMjYxNywgNjQxNzIsIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIAorICAgIDk4MzU2OCwgMCwgMCwgOTI0MDIsIDEyODA2MiwgMTI5NjUsIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAKKyAgICAxNTU2LCA1Mjc0LCAxMzIxMCwgMTIwMTI1LCAxMDAxNywgOTczMywgNDE3ODcsIDk4MzI0MywgMTI2OTk0LCA0MTM3MywgCisgICAgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIAorICAgIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAxMjgwMTgsIDEwOTYsIDAsIDAsIDQyNjg4LCAxMjQ0MSwgCisgICAgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMTI2NjQ2LCAKKyAgICAxMTkxMDEsIDAsIDY0ODg0LCAxMTk4NzIsIDExOTM0NSwgODU5NywgMCwgMCwgOTg2NCwgMCwgMTIwNzg1LCAxMTk4NzQsIAorICAgIDk0MTA3LCAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAxMTk4NzksIDY2NTkwLCAKKyAgICAxMjgxMjMsIDQxNTMzLCA2NjMzNywgMCwgOTIxODQsIDAsIDQ5NjUsIDQzNDQ1LCA5MTc1MzYsIDczODQ5LCAwLCA0MzYzOCwgCisgICAgNzg1MzcsIDEyODI4NywgNjI2MSwgMTE5MzQyLCA0MzE0NywgNjY1NzAsIDE5NTcsIDEwNDIwLCA5ODIsIDI3NTYsIDEzMjkyLCAKKyAgICAxMzIwNiwgMTI4ODI4LCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDEyNzU1OSwgMTMyMTIsIDQzMjM4LCAwLCAxMzE5MCwgCisgICAgMTMxODcsIDkyNTQxLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAxNjk0LCA4MjE2LCA3MTM2OSwgCisgICAgNjc3MCwgNDMzMzEsIDAsIDY1NjIwLCA5ODM3MjgsIDQzNTQ0LCAxMjY0NjYsIDAsIDQxNDQ0LCA2NTYyMSwgNjk5NTUsIAorICAgIDkxOTcsIDUyNDYsIDExOTEwNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAxMjMxNCwgNjU2MTYsIDUyMzgsIAorICAgIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIDEyODUzNywgMzkzNiwgMTE5MzMxLCAKKyAgICAxMTY5OSwgNDEzNDcsIDEyNzI0OSwgMTMyMzUsIDg4NDIsIDQxMjQ4LCAwLCA0Mzc5LCAxMzIzOSwgMTI2OTIsIDc5NjksIAorICAgIDEyNzI2NiwgNzIxOSwgMTI3MjUwLCAxMjgyNTEsIDEyMDUwOSwgMCwgNjYyMjQsIDczNCwgMjk3OSwgMTIwMzAzLCA2NTYxOSwgCisgICAgOTg3MiwgOTU3LCA2NDkyMSwgMTg0NiwgNjY2MzEsIDQxNDc3LCAxMTkyNTYsIDEyMDMxMCwgNzQ1MTEsIDQxNzcwLCAxNjcwLCAKKyAgICA2NDQyLCAxMjAzMTcsIDQyNDQ2LCA1Mzc5LCAxMjAzMTgsIDQxMTYzLCA3NDgzMiwgMTIwMzE1LCAxMjAzMTQsIDExNTA2LCAKKyAgICAwLCA0Mjg0MSwgMTMyNjcsIDAsIDAsIDQxNzc1LCAwLCA3MTMwLCA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIAorICAgIDEyMTEwLCA0MjY3MywgNjU1NzIsIDY1MjkzLCA2NTI1MCwgMTMyNjUsIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgCisgICAgOTI2NDcsIDU4MDgsIDY1OTIyLCAwLCAxMjk2NywgNjYwNDEsIDU2MTIsIDQ1ODMsIDAsIDAsIDY4MDk3LCA2NDU3NSwgCisgICAgMTI2NjM3LCAxMTk2NSwgMCwgNjgzNTgsIDAsIDY5Nzg5LCAwLCA5MjI2MCwgNjgxMDIsIDk2OTgsIDc4MTQsIDc0NDc2LCAKKyAgICAxMTk2NTEsIDEyODUxNCwgMCwgNDE5MjEsIDExODg1OCwgOTc1NiwgNjk4NSwgMTE5MjU4LCA3ODQ5MCwgNzQyMTksIDAsIDAsIAorICAgIDExODk5NywgODAxMiwgNTY3NCwgMTIzNTMsIDAsIDEyMzYxLCA1Njc3LCA1NTg4LCAwLCA0MTkyNSwgMTI4MTI0LCA0MTkyMCwgCisgICAgNTY3MywgMTIwNTM0LCA1Njc2LCA0MTkyMywgMTI2OTQsIDExODk3OCwgNTY3MiwgMTI5NCwgMCwgNzgwNTksIDAsIDQyNTExLCAKKyAgICAxNzI3LCAxMjA3MjUsIDQyNDM2LCAwLCAwLCAwLCA3NDIyMiwgODcxOCwgMzU1MCwgNzM2LCAxMDI2OCwgNDUwNSwgMTAzMTYsIAorICAgIDc0MDkwLCA1ODI2LCA1NTIzMiwgNTgxMywgMCwgMTIwNzEyLCA1ODQxLCA1ODM3LCA1NTIzNCwgMCwgMzEwNSwgMTI4MjksIAorICAgIDU4MzgsIDU3OTYsIDAsIDExOTU5MiwgNTc5MywgMCwgNTg2NiwgNTc5NywgNDEwMTEsIDU4NjUsIDEyMDA5MSwgNzk1NiwgCisgICAgNTk4LCAwLCA2NDY0OSwgNTgwNiwgNDIzOTgsIDAsIDkwMzcsIDU2NzEsIDEyMDA0MSwgOTgzMjU1LCAwLCAwLCAxMjg4NTUsIAorICAgIDAsIDg0NywgMTI4MjQyLCA5NTI5LCAwLCA2NjY1NywgNjk4MCwgNzg0ODMsIDEyMDAzNSwgNzg0ODQsIDk4MzQ5MSwgMCwgCisgICAgMTIwMDMzLCA3ODQ4NiwgMCwgMCwgMTIwMDM5LCA0MjY4MywgMCwgOTgzMDU1LCA3MTE0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIAorICAgIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAKKyAgICAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMTAxNzUsIAorICAgIDEwMzg4LCA0Mjc5OSwgOTQxMDAsIDQxMDEzLCAxMDU2OCwgMCwgOTgzNjE4LCAyODY5LCAwLCA0MTAxNSwgMTk0NjkyLCAKKyAgICAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIDQyNjA4LCA3ODQ2OSwgOTg4NCwgNDc1OSwgMCwgMCwgMTAyNjYsIAorICAgIDQxMzU5LCAxMTcwLCA0MzM2NSwgNjk4MTAsIDczOTA4LCAxNjA5LCA5MDIsIDAsIDYzOTM2LCAxMjg4NzUsIDExNjYxLCAKKyAgICA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgMCwgMCwgODA3LCAKKyAgICA0MzA3OSwgMCwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgCisgICAgMTI2NjE0LCAwLCA4Njc2LCA5ODMyOTEsIDAsIDU1ODIsIDQ1MSwgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIAorICAgIDAsIDAsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIDEyODg1MywgMTIwMDE2LCA3NDI4MywgMTEwMDUsIDAsIAorICAgIDY2NjU2LCA2NjA0NCwgMCwgMTk0Njk4LCAwLCAwLCA0MzM5MywgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCAKKyAgICA2NjQzNiwgNjU0NiwgOTMsIDgxMDIsIDAsIDY4NDA1LCAwLCAwLCA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NCwgOTE3NTQzLCAKKyAgICAzODMsIDcxNTQsIDQxNjU2LCA5MjYzNCwgOTQwNDAsIDAsIDUxODcsIDcxMjk2LCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgCisgICAgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgOTgzODI3LCA4MjkyLCAxOTUwNzQsIDQ5ODAsIAorICAgIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgCisgICAgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCAzODA2LCA0MTk4LCA0MjcyNSwgMCwgNjc2NTYsIDk5OTUsIDAsIDkyNTUyLCAKKyAgICAwLCAxMjkzMSwgMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIAorICAgIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgCisgICAgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgNDEwMDcsIAorICAgIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIDEyNzE1MywgCisgICAgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgNzQxMDUsIDM2MzMsIDk4MzkwMCwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgCisgICAgNzgyODEsIDk3NzEsIDk4MzkwNSwgMTMyNTEsIDEyODcwMSwgMCwgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAKKyAgICAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCA0MTAwMiwgNDA5OTksIDExOTYyMywgNDMyNjYsIDcxMDgsIDE5NDc3OSwgMTA4OTAsIAorICAgIDc0NDgxLCA2NTgzNCwgODMyNCwgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDEyNzQ2NSwgNjQ3MzcsIDAsIDk4MzY1OSwgODkzMCwgCisgICAgNjY2NzgsIDc0MjQ5LCAxMTkzLCAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCAKKyAgICA3NzkwNCwgOTI2NDAsIDc3OTA1LCA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIAorICAgIDAsIDAsIDAsIDQyODE1LCAwLCA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCA5MTEsIDc1MzksIAorICAgIDAsIDAsIDEyMDMzOSwgNjUxNTksIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIDQyODEyLCAwLCAwLCAKKyAgICAxMjMyNiwgOTgzODU2LCAwLCA0MjgwOCwgMTI4MzM3LCA5MzQ4LCA2NDkwMSwgOTgzODYxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5MTc1ODQsIDQzNzAyLCA5ODM1NzYsIDU4NTcsIDY1MzQyLCA5MjcyNywgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIAorICAgIDc0Mjk2LCA0MTkwOSwgMCwgMTIwMzMyLCAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDAsIDQxOTA3LCA2NjY0NywgCisgICAgMTE4OTM5LCA4NzYxLCAxMjk0MiwgNTc0OCwgMCwgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAKKyAgICAxMzE0NiwgMTI3MTg1LCA2MzkzMSwgMCwgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDkyNDU5LCAKKyAgICAwLCA5ODM2NjAsIDAsIDczODYwLCAwLCAwLCA2NDM0NSwgMCwgOTIwMSwgMTI4MzE0LCAxOTQ5NDAsIDAsIDAsIDQzNjc5LCAKKyAgICA5MTc1ODUsIDY1MTE3LCA5MjI3MCwgMCwgMTA0MjcsIDAsIDM4NDQsIDEyMDY3NSwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIAorICAgIDAsIDEyODc4OSwgMCwgMCwgNzgzLCAxOTQ5MzUsIDAsIDAsIDk4MzA2NCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgNDExODAsIAorICAgIDY4Mzc4LCA0NTU2LCAwLCAwLCAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAKKyAgICAxMjc1MjcsIDkxNzcsIDg5MDIsIDkzOTU4LCA5ODM5LCAwLCAxMjg5MSwgOTgzNzU1LCA5ODM2MzYsIDYzOTk5LCAyMDE2LCAKKyAgICA0MTkxNywgOTc4OCwgNjM5MjgsIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCAKKyAgICA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgNjYwMTcsIDQ1MDgsIDY0ODgzLCA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIAorICAgIDc0Mjc2LCAxMjAwODAsIDY3ODQsIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIAorICAgIDY2NDcyLCA5ODM5MjksIDY0Mjg5LCA2NTI4OSwgNzgxNTEsIDY2NjU4LCAxOTQ5MjksIDY0NTA5LCA3ODE1MiwgMCwgCisgICAgMTI2NTA1LCAxMTA1MSwgOTgzMjk2LCAwLCAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIDAsIDEyMjk5LCAwLCAKKyAgICA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCA5OTYzLCA2ODY0OSwgMTI2NjA5LCA0MDQwLCAxMjA1NzAsIDYxNjcsIDAsIAorICAgIDYzOTIyLCA2NTk0LCA5ODM3NDAsIDAsIDAsIDM2MjQsIDQzMDM2LCAwLCA2Mzg3LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCAKKyAgICA0MTk1NSwgMCwgNjM5OTMsIDEwNDQwLCA5NjExLCA2NTYwNSwgNjgwMywgMCwgNzczOCwgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgCisgICAgOTI2NDEsIDM0MzUsIDc4MTY0LCA0MzgxNCwgNDM4MTAsIDcwMjksIDY0MjU4LCA0MTI5MiwgMTE4ODk4LCAxMjc0OCwgCisgICAgNDI3NDIsIDk1MTcsIDExNTE4LCAwLCA3ODc5MCwgMCwgNjc5OTMsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIDYzOTUzLCAKKyAgICA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAxMTQ2OSwgNjk2OTcsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIDAsIAorICAgIDY1NTUxLCA2ODIwNSwgNjYzMywgNDMzODcsIDAsIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIAorICAgIDAsIDEyNjQ3OSwgNDE1LCA2Mzk2NCwgNjM5NjMsIDQyMzQ1LCA5MjMxMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIAorICAgIDAsIDYzOTYxLCA0NDcyLCAwLCAwLCA3ODE1OSwgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgCisgICAgMTA3MzAsIDc2OTEsIDEwMzMxLCA2MzgzMCwgMTE5NjI1LCA0MjkyMiwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAKKyAgICAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgCisgICAgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgMTE4MDEsIDM2MjIsIDk4MzEyNCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgCisgICAgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCA0MzYyOCwgMCwgOTgzMjkyLCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgCisgICAgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIDQwMiwgMCwgMTMxNDcsIDEyODY5MiwgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgCisgICAgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgMCwgMTEzMDIsIDYyNTksIDQzMzk1LCAwLCAwLCAxOTQ2NzAsIDAsIAorICAgIDkyMzUxLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIDkyMzU5LCA2NDk0MiwgOTgzNTU5LCAxOTQ3MzMsIDk4MzY4NiwgCisgICAgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIDY5Nzg0LCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgCisgICAgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIAorICAgIDAsIDY2NjE2LCA2ODQyMSwgOTgzOTE5LCAwLCA1NDA1LCAxMjc4NzUsIDY0ODY2LCAwLCAxMTk1ODMsIDEyODM0NSwgCisgICAgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCA2NDY5MCwgMzI1NCwgMCwgMCwgMTI4MjA3LCA0MjM5MCwgNDM2NzgsIAorICAgIDE5NDcyNSwgOTgzOTA5LCA2NTA3NywgMCwgNjM4OCwgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIDAsIAorICAgIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCA5ODM3NjIsIDQyNjkxLCA5MTc4ODYsIDEyNzE5OCwgNzQ3NjcsIDAsIAorICAgIDEyNzA3NSwgMTM3OSwgMjQ2LCAwLCA5ODM3NjEsIDM3ODgsIDk4MzEwNiwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgCisgICAgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgOTgzNjk3LCAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIAorICAgIDkyMjE3LCAxMzE2MywgOTgzMjA0LCAxMjA4MzEsIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCAKKyAgICA0NzU1LCA3NDI0NCwgMTk0NjIxLCAxMTQ0MywgMCwgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgCisgICAgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIDQyNDQyLCA2NTQ3MCwgOTgzOTA3LCA2NDIwMiwgMTMxNjAsIDc3NTksIAorICAgIDQyNDgyLCA0ODUsIDEyODAwNiwgMCwgOTgyOCwgMCwgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCAKKyAgICA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIAorICAgIDcwMDQ1LCA0MzUzOSwgNTQxMSwgNDIxOTYsIDAsIDAsIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCAKKyAgICA5MzM3LCAxMjA1MiwgMTA2NDMsIDU1MjcxLCA5ODMxNzksIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCAKKyAgICA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgCisgICAgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgCisgICAgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIAorICAgIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgCisgICAgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgOTgzMjA1LCAKKyAgICAxMjk1NSwgMTA1OTYsIDI4ODgsIDE5NDY0NSwgMCwgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAKKyAgICAxOTQ5NjEsIDAsIDY4Njc5LCA0MzU1MiwgNzUwMSwgNjMyOCwgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgCisgICAgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgMTI2NTQyLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAKKyAgICAxMjY2NDcsIDAsIDExODg4NywgMTc5MSwgNTE5MSwgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDQzMzk0LCA1NTUsIDAsIDAsIAorICAgIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgCisgICAgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAxMjg4MTMsIDEzMTU4LCAKKyAgICA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIDkxNzU1MywgNjgyOCwgMTYyNSwgOTIzMDIsIDAsIDEzNDIsIDY4NDQwLCAKKyAgICA2NDE3MSwgMTI2NzA0LCAxMDkwMywgOTgzNDk0LCAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCA5ODMxMTIsIAorICAgIDAsIDY0MzgxLCAwLCAwLCAxOTUwOTAsIDQyMjQ1LCAxMjY0NjcsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCAKKyAgICA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAKKyAgICAxMTk3LCAxMjgyODIsIDExNDksIDE5NDk3MCwgMCwgMCwgNDA5OTAsIDQzNzY1LCAwLCAzNDkyLCAwLCAxMjc5NDIsIDAsIDAsIAorICAgIDAsIDEyODM4LCA5ODM5NzgsIDE5OTQ4LCAwLCAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgCisgICAgNDEzMDksIDAsIDAsIDgxNTIsIDAsIDQxNTUwLCAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAKKyAgICAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIDkyNjgwLCA5ODM3ODksIDY4MTU0LCAwLCAxNzQzLCAwLCAwLCAKKyAgICA5MjIzOSwgNjUxODYsIDkxNzU3MSwgMCwgOTYwNiwgMCwgMCwgNjQ0MzksIDAsIDAsIDkyNjg2LCAwLCAwLCAxOTQ5NjcsIDAsIAorICAgIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgNjQ4MzAsIDAsIDEyNjU1NywgNDEwOTEsIDM0MjYsIDEzNDQsIAorICAgIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MjQsIDc0ODE4LCAxNDIzLCAwLCAKKyAgICA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgCisgICAgOTU5NiwgNjEzMCwgMTI4ODI2LCA0MzYyOSwgMTE1NzksIDc4NzEzLCAwLCAxOTQ3NDAsIDEyODY5MSwgOTIxODUsIDY2Njk5LCAKKyAgICA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNywgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCAKKyAgICA0MzMwMywgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAxMTc3NiwgNzU1OCwgMTI3MTU4LCA2NTYyNywgMCwgMTA3MTgsIAorICAgIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMTIwMzE5LCAwLCAKKyAgICA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgNTQwMywgMTAzNTIsIDcwMDg1LCAxMDA2MSwgNDMyMzcsIDAsIAorICAgIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgMTA4OTksIDY1NDY5LCAKKyAgICA5MjM2MiwgMCwgMCwgMjQxMCwgOTkzLCAwLCAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgCisgICAgMCwgNzExMCwgNzQ0NjIsIDIwNjYsIDEwNDg5LCA0MjE2NiwgNDM0NjMsIDEwNjU5LCAzNjAwLCAwLCA0MjI0LCAxMzM2LCAKKyAgICA0MTUxOCwgMCwgMCwgMCwgMCwgNDExMzksIDY0ODIwLCA5MjUzOCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIAorICAgIDQyNjMsIDg3OTMsIDAsIDAsIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIAorICAgIDU4ODgsIDQxMzU4LCA2NDg2MywgOTU0NCwgNDM0ODEsIDAsIDE5NDgwNiwgNzAwMjcsIDIwOTksIDUxMjAsIDI0MDksIAorICAgIDc3OTksIDAsIDc0NDI0LCAwLCAwLCA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgCisgICAgMCwgNjQ5MTQsIDkxNzc4NywgNjUxMDEsIDAsIDExNjk0LCA5MjQ3NSwgMTE2OTAsIDU4MzUsIDEyNzE2NCwgNjY2MjUsIAorICAgIDEwODQyLCA0MTM1NCwgNDIxMjMsIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIAorICAgIDAsIDk5NzIsIDczODY1LCA0NTE5LCA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDkzOTYwLCA5ODMzMjIsIDEyNjU4MSwgCisgICAgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIDEzMzExLCA2ODQwMywgNDE4NTcsIAorICAgIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgMCwgMTk0NTk0LCAwLCA5ODMzMTIsIDk4Mzg4MSwgNjgxODMsIDAsIDk4MzMxNCwgCisgICAgMTI4NywgNTQzNiwgMCwgOTgzMzE3LCA3NDE0MiwgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgCisgICAgODk4NSwgMTIxMDksIDk4MzMyMywgMCwgMTI3MjQyLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMTIwNDQwLCA2NTQ5LCAKKyAgICAyNzksIDczNzQ1LCAwLCAwLCAwLCAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgOTgzNTU3LCA0MjEyMiwgCisgICAgOTIzMzcsIDkyMzY3LCAwLCAxMTk4NSwgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCA5NDA1NywgNDIxMzgsIAorICAgIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIAorICAgIDQ5MiwgODY4NSwgMCwgOTgzNzU5LCAwLCA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIAorICAgIDc4NjE2LCAyMjk3LCAwLCA3MzgzNywgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgOTI1OTQsIDQxOTQ0LCAKKyAgICAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIAorICAgIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMTI4MzQyLCAwLCA2NTM0MCwgMTE4OTc5LCAKKyAgICA0MTU1MSwgMjQzNCwgOTQwMTgsIDAsIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIAorICAgIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIDAsIDkzOTgzLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgOTM5NTksIDMxNzEsIAorICAgIDY2MjMsIDQ5NjEsIDY4Mzk2LCA4ODYsIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCA3MDA2NiwgCisgICAgNjkyNDEsIDk1OTksIDc4NjI5LCA0MzA4NCwgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgNjk2OTMsIDg5OTQsIDEwOTQ0LCAKKyAgICA0MTIwOCwgOTgzNzEzLCA0MTE2OCwgODE3OCwgMCwgMzM2NywgOTIzMzQsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIAorICAgIDc4NjM0LCAxOTQ3LCAwLCAwLCA5MjY4MSwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgCisgICAgNjUzNTksIDAsIDgwMTcsIDExOTgzMSwgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgCisgICAgMTIwNjk2LCA0OTA0LCA5ODMzMzMsIDY5NjUwLCAxMzY1LCA5MjUzLCA0Mjc1NywgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIAorICAgIDExOTU4NywgNjQ0MTUsIDAsIDAsIDUzOTgsIDAsIDEyNzM4NiwgOTM5NTMsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgCisgICAgOTgzNzc3LCAxMjc2MywgMTI2NjAzLCAzNjI5LCAwLCAxMzAwNSwgMCwgMzYyOCwgMCwgMCwgOTI1MDIsIDM0NjksIDQyMTA3LCAKKyAgICA0MjExNiwgOTE3NTc4LCA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIAorICAgIDAsIDQyNTgzLCA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCAKKyAgICA0MTg1MiwgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCAKKyAgICA2MDE4LCA5MjI5MCwgMCwgMTIyNzYsIDAsIDY4MzcyLCAwLCA5MjI1OSwgMTE5MjQ0LCAwLCA5ODMyMzAsIDEwNDY3LCAwLCAKKyAgICAyNDQzLCAxMDkxOCwgNzgyMTcsIDExOTgyNSwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgCiAgICAgMTE4ODI4LCAxMjAyNzEsIDY1Njc4LCAxMjg2NywgMCwgODI2MCwgNzc5NDUsIDc1MTksIDExNTA1LCAxMjI3NCwgODkwNCwgCiAgICAgNTE4LCA2NTg1NywgMCwgMTI4Njc0LCAxMzIwNCwgNDM4NywgODU3LCAwLCA2NTM2OSwgMCwgOTIzMzYsIDQzMTI1LCAKICAgICAxMjA1OTIsIDAsIDAsIDAsIDAsIDUxMzYsIDE5NjgsIDk4MzA0MSwgMTI2NjI3LCAxMzM3LCA2NDk2NywgMTYyOSwgMCwgCkBAIC0xODc3Nyw0NCArMTg3OTYsNDQgQEAKICAgICA3ODY5OCwgNzg2OTcsIDc4Njk2LCA3ODY5NSwgODcxMCwgNDI0OTUsIDExODk1NiwgMCwgNDA1MSwgMTA0NjAsIDQzMzY0LCAKICAgICAxMTg5MTcsIDEzNTYsIDEyMTYxLCA0MjcxMywgMTI4ODU3LCAxMjcyNjgsIDE2MTksIDk3MDMsIDQzMTUyLCA0MjQ4OSwgCiAgICAgNDIxMTIsIDEyNzk3OCwgMTg3NSwgMTA4MDgsIDQyMTA5LCAxMjAyODQsIDQxODYwLCA2NDg2MiwgMTMzMDUsIDY0OTA3LCAKLSAgICA1Mjg5LCAxMzE0NCwgMTI4NjU4LCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDk4MzI2OSwgCisgICAgNTI4OSwgMTMxNDQsIDEyODY1OCwgMCwgNTU3NSwgOTY3NSwgMCwgNTk0MCwgMjI2LCAyNjQ5LCA2MzM2LCA5ODMyNzcsIAogICAgIDExOTgzMCwgNDMyMzYsIDMzODIsIDQyNDQ5LCA2NDk4LCAxNjU4LCAxMTkzNiwgNzgyMzIsIDAsIDExMjY5LCAxMDE1MSwgCiAgICAgNzM3NTksIDQzMTAwLCA2OTg4OCwgNjU1MDgsIDAsIDAsIDAsIDg5MzUsIDkxNzk4NSwgMCwgMCwgMCwgNjE2LCA3NDc1MywgCiAgICAgNjUxNzgsIDQ2ODQsIDc4NzAxLCAxMTk2NTMsIDAsIDEyNjU1MSwgMCwgNjA0OCwgNzQ0NjAsIDQyMTEwLCA3Mzk2NSwgCiAgICAgMTA4NzAsIDg1NTcsIDExMDU0LCA2ODY2NCwgMTE5MDQ5LCA5NjgxLCA0NDc1LCAwLCA0MTE0MiwgMjEwMCwgMCwgMTIwNzMxLCAKLSAgICA2MDM1LCAwLCA3NjUxLCAxMDI5NiwgNjQ0NDMsIDAsIDk4MzI4NywgOTE3OTg3LCAwLCAxMTg5NjYsIDc0MTQ0LCA0MDk5NywgCisgICAgNjAzNSwgMCwgNzY1MSwgMTAyOTYsIDY0NDQzLCAwLCA5ODMyOTUsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIAogICAgIDAsIDEwMzkyLCAxMDMyOCwgNDA5OTgsIDQzNDYyLCA3NDQ4OCwgMCwgOTgwMCwgODk3OSwgMCwgMTMzMDcsIDQxMDAwLCAwLCAKICAgICAxMTkyMzksIDY0ODcsIDMzODYsIDAsIDEwMzQ0LCAwLCA2NTI5OSwgNTM5NCwgNDMyNDYsIDc4MjQzLCAxMDIyMCwgNjY1MDUsIAogICAgIDQxMjAwLCAxMjg1ODMsIDQ0MjUsIDAsIDAsIDAsIDQzMDc0LCA3Mzc5OSwgOTgzMjAwLCA3ODE0NywgMCwgMTIxNzMsIAogICAgIDc4NTQ1LCAwLCAxMjcwMTEsIDY1MzM4LCAwLCAwLCAxMTk1ODIsIDQ0NzQsIDAsIDQzMDkzLCAxMjg2NDQsIDE1ODcsIDAsIAotICAgIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgMTM2OSwgOTgzNjYzLCA5OTU5LCA3OTI3LCAwLCA0NTYwLCAwLCAwLCA5MjI3NywgMCwgCi0gICAgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgNjY0MzQsIDkzOTU1LCA4MTk0LCA2NTQ2MiwgMTA2MjYsIDEwOTY1LCAKLSAgICAwLCA4ODkzLCA5ODMyOTMsIDEyNTQyLCAwLCA2NTM0MSwgMCwgNjU4MjksIDc5MjUsIDExOTgyMiwgMTA0NzUsIDAsIDAsIAotICAgIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDEyNjQ4NiwgNjUyNzksIDEyNzEwMiwgNjgyMDcsIDEyNzEwMCwgNzA5OSwgCi0gICAgNjA0MCwgMTI3MDk3LCAxMDA3MSwgMCwgOTMzNiwgNDM3NTAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCA2NDI1OSwgNjk4NzMsIAotICAgIDY1MTg4LCA3ODIwLCA0MzAxOCwgMTI3MDgyLCAwLCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIDc3OTgyLCAwLCA1MTI3LCAKLSAgICAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIDI5OTksIDYzNDIsIDY4NjM2LCAKLSAgICA3NDMwNCwgMzcxLCA2NDM3MywgNjAyMywgMTY5LCA1NDk3LCAxMTcwOCwgMCwgMCwgNjMyMywgMTk0Njg0LCA4MjI0LCAwLCAKLSAgICA4OTM4LCA2MDQzLCAxMjczOCwgMCwgOTgzMDc2LCA1MzIxLCAwLCAxOTQ3OTgsIDAsIDI1ODksIDc0MzMyLCAxNjg5LCAKLSAgICA3ODAyLCA0NjgzLCA3NDMxOCwgNDI3MDQsIDEyMDI5NiwgMTE5MDUsIDAsIDAsIDEyODUxNiwgMTI4MTYzLCA3NDUxMywgCi0gICAgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDcxMzEyLCA1NzMxLCAxMzgxLCAyMzg3LCAKLSAgICAwLCAwLCA4Mjg5LCA2NDUyNSwgNjU4MTcsIDI4ODEsIDQzMTQyLCAwLCA5NjAxLCAyODc5LCA5NjY4LCA5NzY2LCAwLCAKLSAgICA1NzI5LCA5MTc4MzMsIDc0NDEwLCA2MDM2LCA2NDg4MSwgNDAyNiwgOTM2MSwgMTI3MDkxLCAyODg3LCAwLCAzNTI2LCAKLSAgICA2Mjk4LCAwLCA3Nzg5NywgMTIwMDk1LCA3ODUxOSwgMCwgODU3MiwgNjAyMSwgNzc4OTYsIDEyODI4OCwgNzc4OTUsIAotICAgIDQzMTU1LCAwLCAxMTk4NDksIDMxNDYsIDEwOTU5LCA5NDgzLCAwLCA3Nzg5MywgMTA5ODEsIDE2NiwgOTE3ODQxLCA4NjM1LCAKLSAgICA5ODM2MDYsIDEwNjIzLCA0MDgsIDExOTA1OCwgMTI3NTA3LCAxMzI5OCwgMCwgNzQyNiwgNDE2NDEsIDEyNzE3LCAwLCAKLSAgICA3NjA3LCAxMDYzOSwgNDMzOTYsIDAsIDAsIDQxNjQzLCA3NDEzNCwgOTgzMDU0LCA4NzEzLCA0MTY0MCwgMTAyMjEsIAotICAgIDQxNjQ1LCA2NjcxMiwgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCA5Mzk5NCwgNzc5MDEsIDM0NzIsIDg2OTcsIAotICAgIDAsIDAsIDk4MzgwNiwgMCwgMCwgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCA5MjQzMiwgNzQ1NzIsIDAsIDQyMTM2LCAwLCAwLCAKLSAgICAwLCAwLCAzMjQ3LCAxMTk4NTQsIDY1MDE3LCA5ODM5NDQsIDY4NDI4LCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIDAsIAotICAgIDQxNTY3LCAwLCAwLCAwLCAxOTQ2MjQsIDExOTg1MywgMCwgMCwgODI4NSwgMCwgNDUwOSwgMCwgNjY0NzEsIDEyMjE2LCAwLCAKLSAgICA0MDk4OCwgOTI1OTIsIDc0ODA5LCA0MTcyNywgMCwgNDI4NDgsIDIzOTYsIDkxNzc2NiwgMCwgNzQwMTgsIDkxNzUzOCwgCisgICAgMTI3MzcyLCA2NDQ3NSwgMTI4MDk4LCAxMzY5LCA5ODM2NzIsIDk5NTksIDc5MjcsIDAsIDQ1NjAsIDAsIDAsIDkyMjc3LCAKKyAgICA5ODM2MjEsIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIDQ1MTQsIDY2NDM0LCA5Mzk1NSwgODE5NCwgNjU0NjIsIAorICAgIDEwNjI2LCAxMDk2NSwgMCwgODg5MywgOTgzMzAxLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIAorICAgIDEwNDc1LCAwLCAwLCAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAxMjY0ODYsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAKKyAgICAxMjcxMDAsIDcwOTksIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDQzNzUwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgCisgICAgNjQyNTksIDY5ODczLCA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCAKKyAgICA3Nzk4MiwgMCwgNTEyNywgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAKKyAgICAyOTk5LCA2MzQyLCA2ODYzNiwgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIAorICAgIDE5NDY4NCwgODIyNCwgMCwgODkzOCwgNjA0MywgMTI3MzgsIDAsIDk4MzA3NiwgNTMyMSwgMCwgMTk0Nzk4LCAwLCAyNTg5LCAKKyAgICA3NDMzMiwgMTY4OSwgNzgwMiwgNDY4MywgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAxMjg1MTYsIAorICAgIDEyODE2MywgNzQ1MTMsIDYwNDksIDAsIDQwMjcsIDgzNCwgMTE4OTYyLCAxODAzLCAwLCAxNTAzLCAwLCAwLCA3MTMxMiwgCisgICAgNTczMSwgMTM4MSwgMjM4NywgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgCisgICAgOTY2OCwgOTc2NiwgMCwgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgCisgICAgMjg4NywgMCwgMzUyNiwgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAKKyAgICAxMjgyODgsIDc3ODk1LCA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIAorICAgIDkxNzg0MSwgODYzNSwgOTgzNjA2LCAxMDYyMywgNDA4LCAxMTkwNTgsIDEyNzUwNywgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAKKyAgICAxMjcxNywgMCwgNzYwNywgMTA2MzksIDQzMzk2LCAwLCAwLCA0MTY0MywgNzQxMzQsIDk4MzA1NCwgODcxMywgNDE2NDAsIAorICAgIDEwMjIxLCA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgOTM5OTQsIDc3OTAxLCAzNDcyLCAKKyAgICA4Njk3LCAwLCAwLCA5ODM4MTUsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDc0NTcyLCAwLCA0MjEzNiwgCisgICAgMCwgMCwgMCwgMCwgMzI0NywgMTE5ODU0LCA2NTAxNywgOTgzOTUzLCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAKKyAgICAwLCA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAxMTk4NTMsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgCisgICAgMCwgNDA5ODgsIDkyNTkyLCA3NDgwOSwgNDE3MjcsIDAsIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIAogICAgIDY0OTQwLCA3MDI3LCAzODg2LCAwLCA0MjQ1NywgMTE5MDA4LCAwLCA5OTYsIDY4MTIzLCA5NDA1OCwgNDI0OSwgMCwgCiAgICAgOTE3NTk0LCAxMTcwNywgODIyMiwgMCwgNzkzOSwgOTI0NTQsIDkyNDYwLCAxMjc4MDEsIDkxNzU5MiwgMTI4MzU5LCA4NTM0LCAKLSAgICAxMjcxNTQsIDQwOTgzLCAwLCA5ODMyMzQsIDAsIDcyMDEsIDEyNTYxLCAwLCA0MjM3MSwgMTI1NTgsIDE1NDAsIDkxNzU0OSwgCisgICAgMTI3MTU0LCA0MDk4MywgMCwgOTgzMjQwLCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAxNTQwLCA5MTc1NDksIAogICAgIDEwMDUyLCA0MDk4MiwgMCwgMCwgMTQ4OCwgMCwgMCwgMCwgOTE3NTU5LCAwLCAwLCAxNTYzLCAxMjgwMzQsIDk2MTksIAotICAgIDk4MzkzMSwgMCwgMCwgMTI3ODcyLCA3MTM2MywgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIAotICAgIDY1MDA5LCA5ODM5MzMsIDEyNTY3LCAxMjg3MDMsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgCisgICAgOTgzOTQwLCAwLCAwLCAxMjc4NzIsIDcxMzYzLCA1ODAzLCA3Nzk3LCA2MDcwLCAxMDAwNiwgMCwgMjkyMiwgNjA4MiwgMCwgCisgICAgNjUwMDksIDk4Mzk0MiwgMTI1NjcsIDEyODcwMywgMCwgNDE0MTIsIDAsIDAsIDM2MDcsIDkyMDAsIDEwMDQ2LCA5NjEyLCAKICAgICA0MjE1MywgODIxOCwgOTQ4NSwgMCwgMjAzMiwgNzgzNTQsIDAsIDAsIDAsIDAsIDAsIDQzMDg1LCA2MDU3LCA1MDgsIAogICAgIDkzOTY4LCAxMjgwMTUsIDY3OTY4LCAwLCA5MjQwNSwgMCwgMCwgNjM4LCA2MDgzLCAxMTkwNzIsIDAsIDAsIDIzMDUsIAogICAgIDc4MzQ4LCA2ODA5NiwgMCwgNjA1NiwgNjY1OSwgNjc5NjksIDAsIDYwODUsIDAsIDAsIDM5MTUsIDQxNjM0LCAwLCA0MTYzOSwgCkBAIC0xODgyMiwxNSArMTg4NDEsMTUgQEAKICAgICAxMjMyOCwgNTAxLCA5Mzk4NSwgMTA2MDEsIDAsIDU4MywgMCwgNDE5NzcsIDAsIDY2MDA0LCAxMTkzNTAsIDY1MDUsIAogICAgIDc0MDEwLCAwLCAxMzA2NCwgNTUyNjcsIDEyMDgxMCwgNjUwMCwgNTUyNiwgNjUwNDksIDAsIDczNzY0LCAwLCA5MjM3NiwgCiAgICAgMTI3NDUsIDk2NzgsIDAsIDEyMDU4NywgOTg2OSwgMTI4ODE1LCAxNzcxLCAwLCA4OTM2LCAwLCAwLCA0MjA4LCA3ODM0MSwgCi0gICAgNzg1NjcsIDc4MzQyLCAwLCA5ODM0NDgsIDc0MTAxLCAwLCAxMTc2MiwgMCwgOTI0MjIsIDc3OTk3LCA2ODAxMCwgNjY0NzUsIAorICAgIDc4NTY3LCA3ODM0MiwgMCwgOTgzNDU2LCA3NDEwMSwgMCwgMTE3NjIsIDAsIDkyNDIyLCA3Nzk5NywgNjgwMTAsIDY2NDc1LCAKICAgICAwLCA1MDI3LCA3ODE3MiwgMTI4ODc4LCAwLCA1MDY5LCA3Mzg2MiwgNTAyOCwgOTg5NywgMCwgNzM3MzksIDUwMjYsIAotICAgIDk4MzI0NywgNjg2MzksIDYzMzEsIDEwMDc5LCA4OTMxLCAwLCAxNDE1LCA4ODY2LCA0MTkwMSwgNzQ3OTAsIDc4MTM4LCAKKyAgICA5ODMyNTMsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCiAgICAgMTE5MzYxLCA5ODM1NjQsIDQzMTA2LCA1MDI5LCA2NTMwOSwgMTU4MCwgMzU5OCwgNjg0MjQsIDQxMDcwLCA3NzkwMywgMCwgCi0gICAgMzQ0MCwgNzgyMTUsIDE1NjIsIDEyODY1NiwgMTI3MTc1LCAxMTkzNTgsIDE3MTYsIDk4MzY3MCwgMTA2MDAsIDkxNzg2NywgCisgICAgMzQ0MCwgNzgyMTUsIDE1NjIsIDEyODY1NiwgMTI3MTc1LCAxMTkzNTgsIDE3MTYsIDk4MzY3OSwgMTA2MDAsIDkxNzg2NywgCiAgICAgNjIwLCA0MTAwMSwgNjAyOCwgMCwgNDI4OTIsIDAsIDc0ODIyLCA1MDI0LCAxMjA4MjksIDQxMDAzLCAwLCA1MDI1LCAKLSAgICA2OTg5MiwgOTgzMjA3LCAwLCAxMTg4ODUsIDAsIDY1NTU3LCAwLCA3NDU0MSwgOTgzNTg3LCAxMTU5OSwgMTI4MjA5LCAKKyAgICA2OTg5MiwgOTgzMjA5LCAwLCAxMTg4ODUsIDAsIDY1NTU3LCAwLCA3NDU0MSwgOTgzNTg3LCAxMTU5OSwgMTI4MjA5LCAKICAgICAxMTYwMiwgNjI0MywgMTE1NzQsIDExNTgxLCAxMTU5NywgMTE1OTgsIDYyNTMsIDYxMDUsIDExNTg0LCA3NDE5NSwgMTE1NjksIAotICAgIDY1Mjc1LCA4OTA2LCAxMjcwOTYsIDU3NTUsIDI2MzYsIDAsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAorICAgIDY1Mjc1LCA4OTA2LCAxMjcwOTYsIDU3NTUsIDI2MzYsIDk4MzIyNywgMTA4MTUsIDExNjE5LCAyMzAxLCA0MTU0MCwgNzgxNSwgCiAgICAgMTE2MTYsIDY5NzksIDEyMDgwLCA3NzIxLCAxMTYwNCwgNzg2OSwgMTU5MiwgMCwgNDIxNTIsIDc4NDk4LCA0MTA0OCwgCiAgICAgOTE3NzYzLCA4MjksIDAsIDkyNDA2LCAxOTk1MCwgMCwgMTI2NDgyLCA2NjE2LCAwLCAxMTg4NzUsIDEwOTUzLCAzOTEsIDAsIAogICAgIDY5Nzg1LCA0ODIsIDQyMjk2LCAxMTU4OCwgMCwgNDM2MDYsIDAsIDY4Mzk3LCA2NjM3MCwgNzQ1MDYsIDQyMzM1LCAKQEAgLTE4ODM5LDkgKzE4ODU4LDkgQEAKICAgICAxMTMzNywgNzgyMDksIDkxNzgyMCwgNjM5ODksIDM5NTgsIDEyMTMyLCAxODQ5LCAwLCA5OTIxLCA0MjQ1MSwgNDI1MywgCiAgICAgNDExNDcsIDQyMDY0LCAxMTk1OSwgNDI0MDQsIDQxMTYwLCAwLCAzNjE4LCA3ODMzOCwgMCwgNDMzMDAsIDUxNTYsIDkyNjI5LCAKICAgICAwLCA5MjksIDY4MjcsIDQyMDM1LCA0MjQzNywgMTU1NSwgMCwgODY5MSwgNjY0MzUsIDIyMTUsIDQxNjYyLCA5NDAxMCwgMCwgCi0gICAgMCwgMCwgOTM5NTIsIDQ1NzgsIDY0NTEzLCA0MTY2NCwgOTgzNzI1LCA0MjU3OCwgMTI4Nzk0LCA0MTY2MSwgNzg3MTUsIAorICAgIDAsIDAsIDkzOTUyLCA0NTc4LCA2NDUxMywgNDE2NjQsIDk4MzczNCwgNDI1NzgsIDEyODc5NCwgNDE2NjEsIDc4NzE1LCAKICAgICA0MzI2NywgOTM1NiwgMCwgMCwgMCwgMTI4NiwgMTAxNjYsIDAsIDAsIDY0NzA3LCA5ODMxMjcsIDQyNDc2LCA3NzMwLCAKLSAgICA5ODM4NTAsIDEyODUyMiwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIAorICAgIDk4Mzg1OSwgMTI4NTIyLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgNDMzNTksIDAsIDY2NDEsIDUyNSwgCiAgICAgNDE2MjcsIDkxNzkyMywgODc2MywgMTI4MzA0LCA0MTYyOCwgNTMzLCAxMTkzMSwgNjUyMjUsIDgzMjEsIDQyNTA0LCAKICAgICA0MjU4MSwgMCwgNjkxNSwgNDIzMTAsIDQzNzcsIDg1NTksIDAsIDc0MzYwLCAwLCAxMzE5MywgNjQzNTAsIDExNjY2LCAKICAgICA4Njc5LCA0MTkyNCwgMTU3NiwgNzczNSwgOTIzOTgsIDAsIDczODQwLCA5ODMwOTIsIDExMzc0LCA3ODA0MywgMTA4ODksIApAQCAtMTg4NTksMjQgKzE4ODc4LDI0IEBACiAgICAgODI0NCwgMzYyLCA5MjQzOSwgMCwgODAzNywgNDM3NzcsIDExNTM1LCAwLCA3NDg0NSwgNTE4NSwgNzE2NSwgNTUyMSwgCiAgICAgMTAzMzQsIDIwOTMsIDcxMzI5LCAxMDMwMiwgMTI4MTEyLCAxMDEwNCwgMTAyNywgNTE4MSwgMCwgMCwgMTA1MjMsIDE0NDYsIAogICAgIDQyMzIwLCA0MTY0NiwgOTkxLCA1MTg5LCA0MjQ3MiwgNDE2NDcsIDEyMDEwNSwgMTcyMiwgNTU4MSwgNDI4OTgsIDM0MDUsIAotICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDkyNDQ3LCA5ODM4MTAsIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgCi0gICAgNDM2ODIsIDAsIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDk4Mzg4NCwgMCwgNzYzMCwgCisgICAgMCwgMTk0NjQ0LCA1NTIzLCAwLCA0MjYyMCwgOTI0NDcsIDk4MzgxOSwgOTU0OSwgMCwgMTA1NDksIDU1MjgyLCA5NjYxLCAKKyAgICA0MzY4MiwgMCwgNzc5MTAsIDEyMDAyNiwgNzg3MDgsIDAsIDc3OTExLCAwLCA0MTk5MSwgOTgzODkzLCAwLCA3NjMwLCAKICAgICA5ODQ2LCA3Njg0LCAxMDM1MCwgMCwgMTE3NCwgNzc5ODEsIDQyNzMzLCA3Nzk3OCwgNzc5ODAsIDY2NDg1LCA3Nzk3NywgCiAgICAgNDIyNzcsIDc3OTc0LCA0MjQ1NiwgNjU2NjcsIDEyNzAzNywgMTIzMzAsIDEyODI3MiwgMCwgNDI0MTcsIDQyMzgzLCAKICAgICA2NjYzMCwgNDEzNDQsIDYyOTMsIDAsIDY2MjUyLCA3Nzk4NCwgNzQ0NDMsIDAsIDEwMjA5LCA4MzEzLCA0MTk1LCA3NDQzNSwgCi0gICAgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIDY1ODcxLCA3ODA2MCwgMTczNiwgOTgzNjc1LCAzOTAxLCAKKyAgICAxMzE2LCA2NjY5MCwgMTIwMDMyLCA2MzMyLCA2NDg5NCwgMCwgNjU4NzEsIDc4MDYwLCAxNzM2LCA5ODM2ODQsIDM5MDEsIAogICAgIDEyMjI4LCAxMjAxNTEsIDY1MjAwLCAzMzgzLCAxMDQ0NiwgNzg4NDEsIDY5MywgOTEzMCwgMzE0LCA2NDE0OSwgNDI0MjAsIAotICAgIDExOTQ5LCA5ODM2NjAsIDEyMDE1MiwgMTEwMjYsIDEyODc4OCwgNTMzMiwgNjk0MCwgNjQxNTQsIDEyNjM1LCAxMjcwMDcsIAorICAgIDExOTQ5LCA5ODM2NjksIDEyMDE1MiwgMTEwMjYsIDEyODc4OCwgNTMzMiwgNjk0MCwgNjQxNTQsIDEyNjM1LCAxMjcwMDcsIAogICAgIDQyNzA2LCAxNzUxLCAyNzMsIDgxNjUsIDEzMTY2LCAxMjA3NjMsIDc4ODQwLCA3MTM2OCwgMTI4MjQsIDAsIDQ1MjgsIAogICAgIDUzMjAsIDYzMDEsIDQzNjYyLCA2MTMzLCA5MzM5LCA5NDYzLCA0MjM0NiwgMTA5MjIsIDY0NTYwLCAzNzU3LCAwLCAwLCAwLCAKLSAgICA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAyNTY1LCA0MjQ1OSwgNzU5NiwgNzkyMSwgOTgzODU5LCAKLSAgICA3NDA5NSwgMTI3OTgxLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDkyNjQ2LCAwLCAxMjIzMywgOTgzODYyLCAKKyAgICA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAyNTY1LCA0MjQ1OSwgNzU5NiwgNzkyMSwgOTgzODY4LCAKKyAgICA3NDA5NSwgMTI3OTgxLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDkyNjQ2LCAwLCAxMjIzMywgOTgzODcxLCAKICAgICAxMDIzLCA0NzQsIDAsIDExOTgxOCwgMCwgMCwgNDI0ODcsIDY1NTU2LCAwLCAxMjc4NjYsIDQyMjk1LCAwLCAwLCA3MTMyMiwgCiAgICAgOTI1MTgsIDk4MzUsIDY2NDk5LCAwLCA1NDE3LCAxMjI3NSwgMTA4OTUsIDAsIDI3NCwgMCwgMTg1OCwgMCwgMCwgNTUyNTEsIAogICAgIDEwMTE4LCAzMTMzLCAxMjgwMDgsIDczNzk1LCAwLCA5NjEwLCA4MDY4LCA4MTk3LCAwLCA2OTksIDAsIDQxNjY1LCA1ODY4LCAKICAgICAwLCA5MjY5NSwgNDIxODIsIDc1ODEsIDE5OTQwLCA0MzY2OCwgNDE2NjcsIDEyODA1NywgMCwgMTkyMywgNjU1ODMsIAogICAgIDY1ODAyLCA5Mzk3MCwgNjQ1OTcsIDQzNDQ0LCAxMTkxODQsIDkyMTk3LCAwLCA2NDY0LCA3MDM2LCAyOTk2LCAxOTM3LCAKLSAgICA5ODM3NDIsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjQxMDcsIDAsIDAsIDExMDE3LCAxMjA2MDEsIDAsIDI5MywgCisgICAgOTgzNzUxLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMTIwNjAxLCAwLCAyOTMsIAogICAgIDc3OTY2LCA5MjE2OSwgNjQ3OTEsIDQxODI3LCA0MjQ2NiwgNDM0MjIsIDEwNTc5LCA4NTYwLCA3MTM1MCwgNjU0MTMsIAogICAgIDc3OTYzLCA0ODAzLCAxMjk2NCwgMTczOSwgMTk0MSwgMzkwMCwgMCwgMTcxMywgNzc5NjksIDAsIDczOTU3LCAxMTQwNywgCiAgICAgNDI0NDEsIDQxOTcxLCA2Mjk3LCAxMjAwOTgsIDY0MTA1LCAxMjgwODAsIDQyNDgxLCAxMTcxNiwgNjY0NzMsIDcxNzksIApAQCAtMTg4OTQsMzM3ICsxODkxMywzMzggQEAKICAgICAzNjU5LCA5NTMzLCAxODQsIDE1NTMsIDEzMTA3LCA2NTQ4NCwgNjk2NDgsIDEwNTAyLCA3NDQ1NywgMCwgMCwgNDE1NTQsIDAsIAogICAgIDgyMjAsIDkxNzk0MywgNDE1NTcsIDAsIDAsIDExMDcwLCAxMTkyMjEsIDUxNTcsIDQwMjAsIDczODU4LCA0MTU1NSwgOTUxNCwgCiAgICAgNjQ4MTgsIDY1MTAzLCA2NDY0MSwgNjQzMDMsIDc4MTMxLCA3NTIwLCAwLCA3NDM3NywgMTEwMjksIDY2NjUxLCA5ODMwNjgsIAotICAgIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCA5ODM3ODksIDEyNzM0OCwgMTIwMDk2LCA3NDYwMiwgOTk1NSwgCisgICAgMCwgMTE4OTMwLCA2NDUyNywgMCwgNzg3NywgNzM4MDMsIDk4Mzc5OCwgMTI3MzQ4LCAxMjAwOTYsIDc0NjAyLCA5OTU1LCAKICAgICAxMTk1NTcsIDQwNTUsIDQyODE3LCAwLCA2NTIxMiwgMTE3MTUsIDEyMTkwLCAxMjMxOSwgNzg2MzAsIDAsIDc4NjMxLCAKICAgICA5NTAyLCA2NTQyNywgMCwgNjU0MjQsIDEyNjA3LCAwLCA5NzM0LCA2NTQyNSwgMCwgMCwgMTI3MzU3LCA3ODgzNSwgOTI0MTAsIAogICAgIDEwMTEyLCAxMDgyNywgMCwgOTg2NiwgNzQ1MjcsIDY2Njc1LCAwLCA4NjI1LCA2NDM0NiwgMTEyOTAsIDEwNDc3LCAwLCAKLSAgICA4NjM2LCA5ODM5MTgsIDgzMTUsIDY1NDQ0LCA5ODM3ODQsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAxMjcxMDgsIAorICAgIDg2MzYsIDk4MzkyNywgODMxNSwgNjU0NDQsIDk4Mzc5MywgMCwgNzQ1OTUsIDYxNTIsIDAsIDAsIDY2MjksIDEyNzEwOCwgCiAgICAgMTIwMTcxLCAwLCA3NDU4OSwgNDM5OTMsIDAsIDY5NzkwLCA2NDQzNSwgMCwgNDM2OTAsIDExMDQ2LCAxMTQ5MCwgNDI3MzAsIAogICAgIDQ0ODUsIDEyNzEwNywgMCwgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIDEyNDM3LCA0MjcyOCwgMCwgNzA0MCwgMzU4OCwgMCwgCi0gICAgMTI4MjUsIDAsIDAsIDEyNzI1LCAwLCAwLCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgNjQ0OTksIAotICAgIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCA3ODYxOSwgCi0gICAgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgMTIxMywgCi0gICAgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDEyNzM2OSwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIDY0MDcwLCAKLSAgICA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCA5NDAyLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgNjU0MzYsIDAsIAotICAgIDIxMjAsIDQzMzAyLCAxMjI0LCAwLCA2NTU3NiwgNzQxOTIsIDEwNzAxLCAxNzY0LCAzMTAxLCAxMjc4MTUsIDEyODU4LCAKLSAgICAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAxMjc4NTksIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIDIxMjksIDAsIAotICAgIDkyMjIsIDk4MzcyOSwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIDQyMzMxLCA2NDkzNSwgCi0gICAgMCwgMCwgMTI5MywgNzk0NywgMjEzMiwgOTgzNzU4LCA3NDU5MywgMTIwMzA4LCAyNDU0LCA0MjcxNywgMzYxMywgMTI4ODM3LCAKLSAgICAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAxMjAzMDQsIAotICAgIDk4MzExNCwgODgyMiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDY5ODQ4LCA4MjM1LCAxMjAzMTYsIAotICAgIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIDEwNzY0LCAKLSAgICAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIDE5OTEsIAotICAgIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCA0MzA3NiwgCi0gICAgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgMTIwMzI1LCAKLSAgICA2NjM3MywgMCwgMCwgNjQ5MDgsIDkyNjkxLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIDEyMDMyNiwgCi0gICAgMCwgNDE3MDUsIDkyMTg4LCA2NTk4LCAwLCA2NTk5LCAxMjAzMzQsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAwLCA2NTk3LCAKLSAgICA5NDEyLCA4MzQwLCAxMTgyNCwgNjQ3NDUsIDIyODEsIDY5OTA0LCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgMjQzMCwgNDE2NzgsIAotICAgIDAsIDEyMDI0MywgMjMzNiwgOTgzODk0LCAwLCA3ODg3MSwgMTIwNDQyLCA5ODM3NjAsIDE5MjEsIDEwOTQ3LCAxOTkyNywgMCwgCi0gICAgNjU0MDYsIDAsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAxMDk1NiwgNDIyODUsIDQxNjc0LCAKLSAgICAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCA4MzI1LCAwLCA2NTQwMywgOTgzMDg5LCAxODU0LCAxMDc5NCwgCi0gICAgMCwgNjc2NjAsIDY5ODQ2LCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIDY1NDMzLCA2MDc2LCA2NDc5MywgCi0gICAgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgCi0gICAgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAKLSAgICAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIAotICAgIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCAKLSAgICA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCAKLSAgICA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCA3Nzk4OSwgNjM3NTEsIDEyMTM3LCAKLSAgICA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCA2NTQ1MiwgMCwgMTEzMDEsIAotICAgIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgMCwgMCwgNzgwMTYsIAotICAgIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIDkyNzA5LCAKLSAgICAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIDEwNTQ1LCAKLSAgICAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgOTIzNjMsIDk5OTYsIAotICAgIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIDU0NSwgOTU3NSwgCi0gICAgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAwLCAwLCA5MTE5LCAKLSAgICAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIDc4MDIyLCA0MTAsIAotICAgIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIDEwMTI2LCAxMjExNiwgCi0gICAgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIDQxMzQ1LCAxMjAzNjIsIAotICAgIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCA2NDg1OCwgMzYxLCAKLSAgICAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgNDU2OSwgNzQxMzAsIDAsIAotICAgIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgCi0gICAgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgMCwgOTgzNTgxLCA3NDA1NCwgCi0gICAgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzExLCA3Njk1LCA4NzY5LCA2NTI0NiwgNDgyOSwgMTk0NjYzLCA0ODU5LCAKLSAgICA2NDQ2NywgMCwgOTgzOTU0LCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIAotICAgIDk4Mzg1NCwgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgCi0gICAgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgCi0gICAgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCAKLSAgICA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIDczODg4LCA5ODMxNDksIDEzMjk0LCAKLSAgICA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgMTIwODE5LCA2ODM4NywgMTIwMTY4LCAKLSAgICA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIAotICAgIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCAKLSAgICA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIAotICAgIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgCi0gICAgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCAKLSAgICA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgCi0gICAgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgCi0gICAgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgCi0gICAgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgCi0gICAgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIAotICAgIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIAotICAgIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgCi0gICAgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgCi0gICAgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIAotICAgIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIAotICAgIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIAotICAgIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDQ5LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgCi0gICAgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCA5ODM5NzAsIDEyMzAsIDAsIDAsIDM1OTcsIAotICAgIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIAotICAgIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIAotICAgIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgCi0gICAgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgCi0gICAgNjc5NzksIDk4MzY4MSwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIAotICAgIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgCi0gICAgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIAotICAgIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCAKLSAgICA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgCi0gICAgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgCi0gICAgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIAotICAgIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgNzAxNywgNDI4NTIsIDAsIDgxNTcsIAotICAgIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODY5LCA3NDAzNSwgMCwgMTE5MTMsIDczODc0LCA2Njk2LCAwLCA4OTIwLCAKLSAgICAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgMCwgMCwgMTAxNzcsIDczNzc3LCAKLSAgICAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCA3ODMyMiwgNDYyNCwgNzgxOCwgCi0gICAgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCA3ODMyNiwgNzgzMjMsIDQzMzI3LCAKLSAgICA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIAotICAgIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTUyLCAwLCAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgCi0gICAgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDUxLCAxOTUwNjIsIDk5NDksIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgCi0gICAgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgNDE0NjgsIDk4Mzc0OCwgMCwgNTI5MiwgNTUyNzIsIAotICAgIDk4Mzg3NCwgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIAotICAgIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgCi0gICAgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIAotICAgIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgCi0gICAgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIAotICAgIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAKLSAgICAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIAotICAgIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgCi0gICAgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCAKLSAgICA5ODM0NTAsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCA5ODM2NDgsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIAotICAgIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIAotICAgIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgCi0gICAgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCAKLSAgICA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgCi0gICAgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCAKLSAgICA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAKLSAgICAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIDYxOSwgNDYzNSwgNjUwODAsIDAsIAotICAgIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgOTM2NiwgNDI3OTAsIDQyMDA2LCAKLSAgICAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgNjUzMjEsIDY1MzIwLCA2NTMzNSwgCi0gICAgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIDkyNDI3LCA5MTI4LCA5NDA0NSwgCi0gICAgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MjEsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCA2NTMxNiwgNDEwNiwgNjUzMTQsIAotICAgIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCA0MTIzOSwgNDM1MzMsIDc4NDU5LCAKLSAgICA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCA0NjE1LCAxMjY5NSwgMTI3NzUyLCAKLSAgICAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIAotICAgIDMyMTksIDY4NjU0LCA5ODM3NzgsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgCi0gICAgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgCi0gICAgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgNzM2NSwgOTgzNzQ0LCAxMjA1OTMsIDEzMDcxLCAwLCAKLSAgICA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgCi0gICAgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzNzcsIAotICAgIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIAotICAgIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgCi0gICAgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIAotICAgIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgCi0gICAgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MTMsIDAsIDAsIAotICAgIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAKLSAgICAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIAotICAgIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCAKLSAgICA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIAotICAgIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgCi0gICAgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgCi0gICAgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAKLSAgICAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIAotICAgIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgCi0gICAgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAKLSAgICAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgCi0gICAgMzYzNSwgNjQzMzcsIDk4MzI3MywgMCwgMCwgNzE5NSwgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgCi0gICAgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgCi0gICAgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCAKLSAgICA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIAotICAgIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgCi0gICAgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCAKLSAgICA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgCi0gICAgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIAotICAgIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAKLSAgICAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgCi0gICAgMCwgNjgzNjQsIDk4MzIyMiwgNDg5MSwgMCwgMTA2NDEsIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgCi0gICAgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCAKLSAgICA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzIzLCA3Mzc4OSwgMCwgCi0gICAgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4MzgzMywgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMjIsIAotICAgIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCAKLSAgICA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIAotICAgIDY1MzA4LCAzMjk0LCA5ODMzMjQsIDg1MjksIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgCi0gICAgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgCi0gICAgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAKLSAgICAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgCi0gICAgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgCi0gICAgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgCi0gICAgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgNzQxOTAsIDAsIDAsIDk4Mzc3NywgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIAotICAgIDE2MzcsIDAsIDc5MDEsIDMyMzgsIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgCi0gICAgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIAotICAgIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAKLSAgICAyNjIwLCAwLCAwLCAwLCA5ODM4NjYsIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4ODEsIAotICAgIDExODk5NiwgMTE5MDA5LCAyODUwLCA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgCi0gICAgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIAotICAgIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIAotICAgIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgCi0gICAgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NjYsIDMyMjgsIDY5NjM2LCA4NzgzLCAKLSAgICAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCAKLSAgICA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgCi0gICAgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIDc0Nzc1LCAxMjczODAsIDk4MzkyMiwgOTIzODksIDc0MDcyLCA1NTI2OSwgCi0gICAgMCwgMCwgOTgzNjc0LCAyMDMzLCA3ODU3NywgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCAKLSAgICA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgCi0gICAgNzQwMTksIDAsIDEyODA2NiwgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIAotICAgIDg3NzgsIDQxNjg4LCAwLCA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgCi0gICAgMTEzNDIsIDEyODU2MSwgMCwgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTQyLCAKLSAgICAxMjY0NjksIDExOTQ2LCAwLCAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIAotICAgIDEwMDg5LCA4NzAsIDc2NDgsIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgCi0gICAgNDM2OTIsIDQ1NjMsIDAsIDAsIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgCi0gICAgMCwgODY5LCA4NzQsIDc2NDQsIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1MCwgCi0gICAgNTQyOSwgMTk1MDU1LCA2NjE4MCwgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4MSwgOTgzMjQyLCA0MjA2NywgMCwgCi0gICAgNTQzMywgMTA2NTcsIDc5MTEsIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIAotICAgIDUzMTcsIDU0MjMsIDQ2MTEsIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCAKLSAgICA0NjI4LCA0MjQ1LCAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgCi0gICAgOTgzMjcwLCA0Mjc3NiwgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCAKLSAgICA2OTg4MSwgMCwgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODczLCAwLCA5ODMyNjIsIDAsIDAsIDc0MjcsIDk5NTgsIAotICAgIDQ1ODgsIDQzNjgwLCAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4NzYsIDAsIAotICAgIDc5MywgNzQ0MDQsIDAsIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAKLSAgICAxMTg4NzcsIDAsIDc4MzcsIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgCi0gICAgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIAotICAgIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAKLSAgICAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgOTgzOTMwLCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIAotICAgIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjU3LCA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgCi0gICAgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIAotICAgIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIAotICAgIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIAotICAgIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIAotICAgIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgCi0gICAgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIAotICAgIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgNDYyNywgOTgzODgzLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCAKLSAgICA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIAotICAgIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIAotICAgIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAKLSAgICAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCAKLSAgICA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgCi0gICAgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NjcsIAotICAgIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk2OCwgODAzNCwgCi0gICAgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgCi0gICAgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAKLSAgICAwLCA5ODMyNTQsIDY2MzY4LCA1MDE3LCA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgCi0gICAgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAKLSAgICAxODgwLCA3NDc2NiwgOTgzODI5LCA4OTA4LCAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAKLSAgICAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIAotICAgIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgCi0gICAgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAKLSAgICAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCA3NTI5LCAwLCAxMjg2OTksIDk4Mzk0OCwgMTIwNzgyLCA0MTEzLCAwLCAKLSAgICAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAKLSAgICAwLCA5ODM5NDYsIDgwMzMsIDY5OTUzLCAwLCA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIAotICAgIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgCi0gICAgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgCi0gICAgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCAKLSAgICA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzEwLCAKLSAgICAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgCi0gICAgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIAotICAgIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgCi0gICAgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MjMsIAotICAgIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgCi0gICAgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgCi0gICAgOTUxLCAwLCAwLCA5ODM4NTgsIDc2MDQsIDk4MzI4MiwgNDAwOSwgMTI3ODE2LCA5ODM3MDEsIDEyMDU2MiwgMCwgOTgzNzExLCAKLSAgICA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIAotICAgIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIAotICAgIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIDk4MzkyNiwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCAKLSAgICA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgOTgzNzA4LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgCi0gICAgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIAotICAgIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCAKLSAgICA5ODMyMTQsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIAotICAgIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgCi0gICAgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgCi0gICAgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIDk4MzIyMSwgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCAKLSAgICA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCA3NzY0LCA5ODM3MDUsIDExMDk0LCAxMjA4MjUsIDAsIDAsIDQyODIsIAotICAgIDgyOTgsIDAsIDAsIDAsIDAsIDAsIDY0NDQ5LCAwLCAxMjY2NTAsIDYzODU0LCA4NDU2LCAwLCA3NDc4MywgNjU2NzAsIDAsIAotICAgIDc4MjUwLCAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIAotICAgIDM0NTgsIDQzNjUsIDcwMDUzLCA5ODM3MDMsIDM2NDcsIDAsIDI2MDIsIDEyODM0MSwgMCwgMTk0NzA3LCA0MTEzNSwgMCwgMCwgCi0gICAgMCwgNjQ2MzEsIDE3MiwgNDk3MSwgNDEyMTksIDQxMTM3LCAxODg5LCA3MjM4LCA2NTQ1LCAxMjY0NzYsIDkyMTkzLCA3NTk3LCAKLSAgICAxMDUyOCwgMCwgMCwgMzczMiwgNzM5MTAsIDE5NDU4OCwgNTM0NCwgMCwgNDMzNjYsIDQzMzYzLCA5MDYyLCAxMTkyNTIsIDAsIAotICAgIDAsIDAsIDY0NDc5LCA5MjMyLCA5MjU5NiwgMCwgMCwgMTk0NzEyLCAxMDkwMCwgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAKLSAgICAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIDEyNzM1NCwgMTI3MzQ1LCAyOTksIAotICAgIDkxNzk1NywgODUyNSwgMTI3MzQ3LCAzNTI0LCA5MTc1NjUsIDg4MzEsIDEyNzM0OSwgOTI1NjQsIDMwNzUsIDY3ODY3LCAKLSAgICAxMjczNTIsIDAsIDY2MzYyLCAwLCA2NDM1MywgMCwgMCwgNTg0NSwgMCwgMCwgMCwgMjU4MSwgODIwMCwgNjUxMTQsIAotICAgIDY4NDYwLCAwLCA0MzI4MywgNTU1MSwgMCwgMTIwNzM1LCAwLCA2MzQwLCAxMTg4NTUsIDAsIDc4MTM0LCA4NjgwLCA3MjA0LCAKLSAgICA3MDA2NSwgMjU4OCwgMjkxNCwgNzAxMSwgNTUyODEsIDAsIDI0NzEsIDE5NDYzMSwgMjg4MywgMjc0OSwgMTE5NTYzLCAKLSAgICA3Mzc3NCwgMTA5MTMsIDAsIDAsIDg2NjYsIDY3NSwgNDI0OTMsIDAsIDQzNTcxLCAwLCA2MjE5LCAwLCA5OTgwLCA0MTIzMiwgCi0gICAgMTA5MjgsIDAsIDQxMTUzLCA0MTIyOSwgMTE4OTY3LCAwLCAzNzM4LCA5NDAxNiwgMCwgMTI3MTEsIDMxODEsIDY2MjEyLCAKLSAgICA3NDI4OSwgNjg0NzIsIDQyODU3LCA4MjYyLCA5ODMzNzEsIDAsIDk4MzIyMCwgMCwgNDIzNDcsIDEyMDkyLCA5NjE1LCAKLSAgICA3MjM0LCA3NDA0NywgOTgzMDg4LCAwLCA0Mzc0NCwgMCwgMCwgNzM4NDYsIDI5MzQsIDEyNzIyLCAxMjA3NjIsIDkyMiwgCi0gICAgNDM5ODMsIDc0NTA3LCA5ODMxMjYsIDc0NDYxLCAzMjE4LCAxMjA0NzEsIDc0MjkwLCAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIAotICAgIDg1NjksIDExNDA0LCAxMTkzMiwgNzM3MjgsIDMyMTQsIDEyMDQ2MSwgMTIwNDY4LCAxMjEyOCwgMzIwNywgNjU0ODYsIAotICAgIDc4NzI5LCAxOTAxLCA3ODcyNywgMTI3MzI2LCAxMjA0NjAsIDc0MjUsIDMyMDUsIDY4MDAzLCA3ODczNywgNzg3MzYsIAotICAgIDc4NzM1LCA0MzM4MywgNjk5NDAsIDY1NDU5LCAyNjA2LCA3ODczMCwgNzM4OTcsIDAsIDExNDk2LCAxMTczLCAwLCA0MTI3MiwgCi0gICAgMTE5NjYxLCAwLCAwLCA5ODMzMTMsIDEyMDczNywgMCwgOTgzOTYyLCA5ODMzMTIsIDM3OCwgMjYxMCwgMCwgNjUwNzksIAotICAgIDk4MzMxNywgNjU2OTUsIDEyNjU1OSwgMzcsIDcwNjgsIDAsIDEyMDQ4MCwgMTIwNDc5LCAzMjA5LCAxMjA0NzcsIDAsIAotICAgIDEwNjM4LCA5NzY4LCA2OTk1MiwgMTE5OTA5LCA5ODMzOTEsIDAsIDAsIDAsIDAsIDY1NTEwLCAwLCAwLCA1MjMzLCAKLSAgICA5ODMzMjcsIDY0NzkyLCA5ODMzMjYsIDAsIDEyNjYzMywgMCwgNzA2MCwgOTg0NywgMTIwMTQ0LCAxNjg1LCA1OTUsIDAsIAotICAgIDczOTcxLCAxMjkyLCA4OTQwLCA3MzgwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgMCwgNjU0MSwgMCwgMCwgMCwgMzI0MywgCi0gICAgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIDY1NDcsIDEyODEzMiwgODIwMywgNzg0ODgsIAotICAgIDk4MzA5MCwgODQ1OCwgNjUyMTEsIDg0OTUsIDExOTkwNCwgMCwgOTE3NTUyLCA3NzksIDc4MzE0LCA2NDM2NywgMjQ2NSwgCi0gICAgNjk5MDEsIDgxOTMsIDU1Mjc5LCA5NzMwLCA5MjgwLCAwLCA3MDY1LCA3NDE1NSwgNDM0NiwgMCwgNzM3OTgsIDUwNCwgMCwgCi0gICAgOTI0MTQsIDg5ODIsIDAsIDAsIDAsIDc4MiwgMCwgMTA4ODMsIDAsIDE5NDg1MiwgNzMyLCAzNzM3LCAxMjcyNTMsIDE1NDgsIAotICAgIDY4NjUwLCA5MjUwNywgMTgzMiwgNTYwNCwgNTczNSwgNDExNDEsIDExOTAyMCwgNDM3NiwgMCwgMTE3ODcsIDM3NDUsIDAsIAotICAgIDAsIDQyODg4LCA2NTcxMiwgOTgzMjk2LCAzODY5LCAxMTkzNywgNTcyNSwgMTI3NTM5LCAxNzgzLCA2ODY0OCwgNTcyOCwgMCwgCi0gICAgMCwgMCwgMTE5MTgsIDY2NTY3LCA1NzI0LCAwLCA1NzI3LCA3ODUyMSwgMCwgMCwgNzY0LCAwLCAxMjgxMTYsIDQzNTMxLCAwLCAKLSAgICA5MDMzLCAwLCA0MjUzMiwgNjIyMywgMTEwNDIsIDEyMDc0OSwgMTE0MjMsIDAsIDExOTg2MSwgNzEzNDQsIDQzNDY1LCAwLCAKLSAgICAxMjgyNjcsIDY1NTksIDY0NTU3LCA3MTM0OCwgOTI2NDksIDEyMDY0OCwgNDMwMTksIDQzNDc3LCAxMDIzOCwgNzQ0OTEsIDAsIAotICAgIDQzMzc3LCA5MjI4MiwgNzEzNDYsIDE0NzgsIDk3ODMsIDExODI1LCAyNjA3LCA2NDc0MCwgMCwgNzczOSwgNzQ1NDMsIDAsIAotICAgIDAsIDAsIDYxMzIsIDAsIDYzNzY1LCAwLCA3MDA1OCwgNDExNDQsIDAsIDkyNDM4LCA0MzUzNywgNjc2MSwgMTAwOTMsIAotICAgIDQzNjksIDkxNzc5MSwgMCwgOTgzMTQ4LCA4ODIwLCAzOTQ3LCAwLCAwLCAxMTUxNSwgNTI2LCAxMjgxMDMsIDQxMjk1LCAKLSAgICAxOTQ2MDMsIDkxNzc4NSwgMTk0OTMyLCAwLCA3Njg4LCA5MTc3ODYsIDc2ODYsIDgyODgsIDExODE1LCAwLCAwLCA5ODMzNzQsIAotICAgIDE1NDMsIDM3MTMsIDQxMjIxLCAxMjQyMywgNDIyODEsIDkxNzc4OCwgNzQwMjQsIDEyMjkzLCAwLCA2NDM1NywgMTE3OTQsIAotICAgIDQyMDgyLCAwLCAxNzM3LCA4OTg3LCA0MjA4MSwgMCwgNzIwNSwgMCwgOTMzNSwgMTI4NTAsIDExOTg3MCwgNjU1MywgNzA1NSwgCi0gICAgMCwgODI3NywgMCwgMCwgNTQ3NSwgNzQ3OTUsIDY3ODAsIDAsIDAsIDEyOTkwLCAxMTYwLCA0MjA4NCwgMTE5NjUwLCAKLSAgICA0MTIxNywgMTE5NjYwLCAxMDAxOCwgMzYwLCAwLCAwLCA2ODE3NiwgNTg2MywgMzEzNywgMCwgNDE0NywgOTgzMTcwLCAKLSAgICA0MTIxNiwgNzg0NCwgMjYxNiwgMTE5MTkwLCA2ODQ2MSwgNjUyMzQsIDk4MzI4NiwgMTMwNzYsIDMxMzUsIDk4MzI3OSwgCi0gICAgNzgxNDMsIDExOTEzOSwgMzE0MiwgOTI0NTEsIDk0MDY4LCAxMDgxOSwgMTE5NTgwLCAxMDE4MywgMCwgMjYwOCwgMTQ3MCwgCi0gICAgNzM5NjcsIDk0MDA4LCA2MjI3LCAwLCAxMjcxNzMsIDY5NzQxLCA5ODM1ODIsIDYxNjMsIDk4MzU1OCwgMCwgMTI3MzE0LCAwLCAKLSAgICAwLCA4NjAzLCAwLCAxMTk4NjYsIDMzMDYsIDEwODc2LCA0MzM5MiwgMTE5NTczLCAxMjc5MzEsIDU3NTEsIDAsIDYyMjIsIDAsIAotICAgIDAsIDEyMDg2LCA3NDAzLCAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIDY0NzgzLCA5MjY1OCwgMTEzMTAsIDAsIDg4ODIsIDAsIAotICAgIDAsIDI1NzAsIDcwMjEsIDAsIDAsIDQzMTEwLCAwLCAxMjM0LCA2NTQwLCA2OTc0LCAwLCAwLCA5ODMyMDksIDUwMDIsIDAsIAotICAgIDQxMjg2LCA2OTk0NiwgMTI3MDE5LCAwLCA0MzU4NSwgMCwgNjU1MSwgOTgzOTUzLCAxMjgyMjksIDAsIDQxMjg5LCAwLCAKLSAgICAxOTQ2MDIsIDAsIDg5NzcsIDYwMiwgMTIwODE0LCAwLCAxMjg3NzgsIDEyODY2MSwgMCwgOTgzMzY3LCA0MTI3OSwgMCwgMCwgCi0gICAgMCwgMTEwODEsIDQzNjE1LCAwLCAwLCAwLCA5ODM2MTIsIDEyNzI3LCAwLCAwLCA3ODM5NywgOTQ3NSwgNzExMiwgNjUxMDUsIAotICAgIDAsIDk2MzMsIDEwODg2LCA0MzU5MiwgNzgzMSwgOTgzODIwLCAxOTQ1NzEsIDAsIDczOTE1LCA4MDc2LCA0MzA0OCwgODI5MCwgCi0gICAgODI5MSwgNDMwNTEsIDkyNTcwLCAwLCAyNTk2LCA0MzU4NCwgMCwgMTMxMTMsIDAsIDEyNzc1NywgMjM5MywgNzA1OCwgCi0gICAgOTA4NywgNzQwNjcsIDY4NjczLCA0MTU3NCwgNzgzMzcsIDAsIDc0MDU4LCA2Mzc2LCAwLCAwLCAwLCAwLCA5ODU0LCAKLSAgICAxMjc3NDgsIDY0Njk2LCAwLCAxMjgyMjAsIDAsIDY5OTQsIDAsIDE3MjAsIDAsIDAsIDAsIDY1MjksIDcwNjMsIDk4MzE4MiwgCi0gICAgMzc1MSwgOTEyMCwgOTgzNDc3LCAwLCAxNzk4LCA3MDksIDAsIDEzNTQsIDE4NzYsIDEzMTUyLCA2NTU3LCAxMjQzMCwgCi0gICAgODEzNywgOTQwOTgsIDkyNjQyLCAwLCAwLCAyNDUsIDEyODA5NywgMTE0NTYsIDQxMjMzLCA3MDcwLCAwLCA5NDA0NiwgCi0gICAgNjEzNiwgOTE3NjA5LCA2NTY3NywgODY4MiwgNDEyMzUsIDkyNTk1LCA0MjA0NSwgOTgwNCwgMTE4OTYzLCA0MzIsIDM1OTUsIAotICAgIDE5NDk0NSwgNjU0MzcsIDAsIDc0NDU1LCA0MjM5OSwgMCwgMCwgMTI4Mjc0LCAwLCAxMTk2NTgsIDAsIDAsIDAsIDc3ODk0LCAKLSAgICA4Nzk3LCAwLCA5MDUyLCA2NDg4OCwgNzE2NywgMjM1NiwgOTUsIDc0Nzg0LCAxMDU4MCwgMCwgNDIyODYsIDAsIDY0NjQwLCAKLSAgICAwLCA5NDEwOSwgMCwgNzQxMzcsIDcwMDM1LCAxMDA2MywgMTI2NTIsIDEyMTk5LCA5MjQ4MCwgMCwgMjU2NiwgMTE5NzEsIAotICAgIDk4MzcyOCwgMCwgMTA2NSwgMCwgMCwgNDM0MDAsIDI1NzYsIDY2Njk2LCA5Mzk5OSwgMCwgNDM2MDQsIDAsIDAsIDc0MDgyLCAKLSAgICA1MTQsIDc0NTAyLCA3MDAzMiwgMjkyMSwgNDMyMTUsIDY0NDkzLCA1NzcyLCAxMjk2OCwgNzAwNTUsIDE5NDk0NCwgNzQ1ODAsIAotICAgIDQzMzk4LCAyNTgwLCA5ODM4MDEsIDQxMzQxLCA0MTIyMywgNjU2NCwgMTQ2MywgNDEzNDIsIDAsIDUyOTMsIDcwMDIwLCAwLCAKLSAgICAzNzMzLCAxMTM0NiwgMCwgMTIwNTQsIDAsIDc0MDk4LCA0MjgyNywgMCwgMTMwOTEsIDAsIDAsIDAsIDkxNzkxNSwgMCwgCi0gICAgMTI3MDI1LCAwLCA3NDgyMSwgMCwgOTgzNzI0LCAxMTkwNDIsIDAsIDEyNzg2NSwgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAKLSAgICAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCA0MjU2OSwgMTI3ODI0LCAwLCA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIAotICAgIDQyNDMyLCAwLCAwLCAxOTQ3ODIsIDAsIDY0NDk2LCA3NDEwOSwgNzAwMzAsIDk5MTUsIDAsIDk4MzIxNiwgNzA2MSwgCi0gICAgNDEzMzYsIDM4NTQsIDY5NzAwLCAxMzE0MSwgNjg0MTMsIDQzNDAxLCA0MjMxOSwgMTMwODIsIDAsIDcwNjcsIDY4MjIxLCAwLCAKLSAgICAxMjczODMsIDEyNzE3MSwgMCwgMCwgMTI3Nzk3LCA5MDI5LCA0MzU0MywgMTE5MzE1LCAyMzUzLCA2MzA4LCAwLCA3NDc5MiwgCi0gICAgMjYxMSwgMTE5MTg2LCAwLCAwLCAwLCA0MzY2NCwgOTIzOTksIDY2NjI3LCAwLCA0NDg0LCA4NTA5LCAxMTg5NzYsIDExMDY2LCAKLSAgICA2NTIzMywgMCwgNDEyMjQsIDQxMDE3LCAwLCAzNzQ3LCAxMDUyMiwgMCwgMCwgMTY5MSwgNDEyMjYsIDAsIDEyMTA3LCAKLSAgICA3MTAwLCAxMDkwNSwgNjUwMTAsIDE5NDk4NiwgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgOTI2NDQsIDEzMTIxLCAKLSAgICAxMjAwMzYsIDAsIDEyMDEwLCAxMjg1NzMsIDEyODIyMSwgMCwgMCwgMCwgMTI3MTkzLCA2NTgxNiwgNjgxMTEsIDAsIAotICAgIDEyNzkzMywgNjU2NjgsIDkyMjU3LCA2NjE4LCAxMTg3ODQsIDY2MzY1LCAwLCA0MjIzNCwgMTI2NDgsIDc4MTEwLCA3MTIzLCAKLSAgICA3MDAzOCwgNTc4NSwgOTE5OCwgOTc2NCwgNDEzMTYsIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAKLSAgICAxMjgyNTgsIDAsIDAsIDAsIDEzMTIyLCAwLCAxOTEsIDcwMDYwLCA4NTg1LCA4MDAwLCA2NDQxMSwgMTIwNjUyLCA0Mjg4OSwgCi0gICAgNjQ4NTAsIDQxMDcyLCA0MTU3OCwgMCwgNDE1NzcsIDAsIDEwMDAyLCAwLCA2NTMzLCA3MzgwMiwgNDE1NzAsIDAsIDY4MywgCi0gICAgMzk2LCA0MTU4MCwgNjgxNDYsIDAsIDEyOTAxLCA0MzA1OCwgMCwgMzQzLCA3MTI5LCA0MjY4MCwgNDEzNjAsIDc4MTU0LCAwLCAKLSAgICA0NzQzLCAwLCAwLCA3NDA0MCwgNzQxMDgsIDg3NDMsIDE3MjQsIDE0MzMsIDExOTMyMiwgMCwgMzczOSwgNjI2MywgNzEzNDksIAotICAgIDAsIDM5NjQsIDY1OTIsIDAsIDEyODY5MywgNjYwNDAsIDAsIDQyNTY4LCA2OTgwNiwgMTI4MTEzLCAxNzc4LCAzOTU2LCAwLCAKLSAgICA0MjA3MCwgNjU2MywgNDMwNzUsIDkwMTgsIDk0MDA2LCA5ODMzODgsIDEyMDY3LCA0MTMxMiwgMCwgNTU0NywgNzQ1MzEsIAotICAgIDEyNzk2OSwgMCwgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAxNzMsIDY2NDYwLCA3MTc0LCA5MjcwMywgCi0gICAgMTE4ODIyLCAxNzUwLCAwLCA0Mzk0LCA2ODM2OCwgMTgwNywgOTgzODc5LCA5MjI5OCwgMCwgNTg4OSwgMCwgNzE4MCwgMCwgCi0gICAgMTE5MTQ1LCAwLCA5MTc1NTgsIDQyNDcxLCA2OTgyLCAxNzIxLCA0NDAyMiwgNzg5MSwgNDIyNDMsIDQyMTYwLCAyNTgzLCAKLSAgICA0NTEyLCAxMTkzNjAsIDY1MjMwLCAxMjgxMDksIDAsIDAsIDM4NTUsIDAsIDAsIDAsIDAsIDc0Mjk1LCAwLCAwLCA5MjQxNiwgCi0gICAgMzk3NSwgMCwgNzQwODcsIDAsIDEyNjcyLCAzNzk4LCAyNzAzLCA5ODM1OTksIDAsIDIxMDksIDk3NzQsIDEyNzUsIDAsIDAsIAotICAgIDQxMDk1LCAzOTYyLCAwLCAyOTMyLCA0MTEwMSwgMzk1NCwgNjQ1NywgNDUxMywgMCwgMCwgNzM5OTQsIDczOTkyLCAxNDY4LCAKLSAgICAwLCAwLCA0MTg1MSwgMTI4MjMwLCA0MTg0NiwgMCwgNTUyMzgsIDc2MzMsIDQxODQ5LCA2ODM4NSwgNDMyMCwgMzIyNCwgMCwgCisgICAgMTI4MjUsIDAsIDAsIDEyNzI1LCAwLCAxMjcxMDYsIDc4NjQyLCAyMjMsIDAsIDY5Njc1LCAxMjAxNjYsIDQyNDQ0LCAwLCAKKyAgICA2NDQ5OSwgNjUyNDUsIDAsIDExNzEsIDAsIDY5NzE3LCAwLCAxODA1LCA4NzcyLCA0MzgyMCwgMCwgOTkzMCwgNjUyNDcsIAorICAgIDc4NjE5LCAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgNDI2NzYsIDAsIDY0ODAwLCA2NTIzNiwgNjc2NDQsIDY4MTI2LCAKKyAgICAxMjEzLCAwLCA2NDA3NSwgNzk3LCA2NDA3NCwgODczNCwgNDIxMiwgMTI3MzY5LCA2NDM4NywgNDExNSwgMCwgNTAwNSwgCisgICAgNjQwNzAsIDY0MDczLCAxMDY3OSwgMCwgNzc5NTQsIDk0MDIsIDY0Mjc2LCA0MjYsIDAsIDAsIDgyNTEsIDEwMTM2LCAKKyAgICA2NTQzNiwgMCwgMjEyMCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCA3NDE5MiwgMTA3MDEsIDE3NjQsIDMxMDEsIDEyNzgxNSwgCisgICAgMTI4NTgsIDEyMDE1OSwgMCwgMTEzNzMsIDYzNzgsIDEyNzg1OSwgMTIwMTAzLCA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgCisgICAgMjEyOSwgMCwgOTIyMiwgOTgzNzM4LCAwLCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgCisgICAgNDIzMzEsIDY0OTM1LCAwLCAwLCAxMjkzLCA3OTQ3LCAyMTMyLCA5ODM3NjcsIDc0NTkzLCAxMjAzMDgsIDI0NTQsIDQyNzE3LCAKKyAgICAzNjEzLCAxMjg4MzcsIDAsIDAsIDY1ODg4LCA4ODE2LCAxMDk3OCwgMTA4NDAsIDAsIDEwNjY4LCAwLCA0MzA4NywgMTI1OTUsIAorICAgIDEyMDMwNCwgOTgzMTE0LCA4ODIyLCAwLCAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgNjk4NDgsIDgyMzUsIAorICAgIDEyMDMxNiwgNDQwNSwgMTAwODYsIDEyMDI0NywgMCwgNjkyMTYsIDAsIDY1NDMwLCA3MTMyMSwgNjA3OSwgNjgxNywgCisgICAgMTA3NjQsIDEyNzkxMCwgNjQyOTEsIDEyODA1MSwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMzE3LCA2NDMyNywgMTU1OCwgMCwgCisgICAgMTk5MSwgNzg4MiwgNDIyNTQsIDAsIDQxNzAwLCA1MzAsIDAsIDEwNDI4LCAxMTkzMzUsIDEyMDAyLCAxMTkzMzYsIDU3NDIsIAorICAgIDQzMDc2LCA0NjkyLCA2NDYzMCwgNDE4MjMsIDQwMDcsIDUwMDQsIDExOTMzNCwgNzg5NiwgNzUxLCA2NTk1LCA2NTk2LCAKKyAgICAxMjAzMjUsIDY2MzczLCAwLCAwLCA2NDkwOCwgOTI2OTEsIDYzMTEsIDAsIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCA0MzEwOCwgCisgICAgMTIwMzI2LCAwLCA0MTcwNSwgOTIxODgsIDY1OTgsIDAsIDY1OTksIDEyMDMzNCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIAorICAgIDAsIDY1OTcsIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMjI4MSwgNjk5MDQsIDAsIDE5ODgsIDU0MDcsIDY3ODY1LCAKKyAgICAyNDMwLCA0MTY3OCwgMCwgMTIwMjQzLCAyMzM2LCA5ODM5MDMsIDAsIDc4ODcxLCAxMjA0NDIsIDk4Mzc2OSwgMTkyMSwgCisgICAgMTA5NDcsIDE5OTI3LCAwLCA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCA0Mzc4OSwgMTI4NDEsIDkyMjksIAorICAgIDEwOTU2LCA0MjI4NSwgNDE2NzQsIDE5OTY0LCA0MTY3OSwgNjUwODQsIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCAKKyAgICA5ODMwODksIDE4NTQsIDEwNzk0LCAwLCA2NzY2MCwgNjk4NDYsIDAsIDc4MzU5LCA1MjgwLCAwLCA0MzQ0LCAxMjkwNSwgCisgICAgNjU0MzMsIDYwNzYsIDY0NzkzLCA0MTYxMCwgNzY4LCAxMjA3NCwgNDQyLCAwLCA2ODE2MiwgNjQwODEsIDEyOTM0LCAKKyAgICA0MTY4MiwgNjU0MzIsIDQxNjkzLCAwLCA2MDcxLCA2NTQzNCwgMTI3NDY3LCA0ODA0LCA0MDUzLCAwLCAxMjc0NjksIAorICAgIDE5NDY1MywgNDE2OTYsIDQ2NywgNjk4MjMsIDEyNzQ2MywgNjk3OTcsIDE5NDY1MiwgMTI3NDczLCA4NDIxLCAxMjc0NzIsIAorICAgIDY5NjgyLCA0MzcwNSwgNTAyLCAwLCA2NTQzMSwgMTE5MDU2LCA2OTk1NCwgMTIwNDMsIDEzMDMsIDMxNiwgNzM2NCwgMjAyOSwgCisgICAgMjEzNiwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIDQzNDgwLCA5MjYzOSwgNDg2MCwgMTI2NjQ4LCAxMjc4NzcsIDQyNDg4LCAwLCAKKyAgICA5NTgzLCAxMjg4NDksIDU1NDYsIDgwMTksIDczODU2LCAwLCAwLCAwLCA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIDU1NDMsIAorICAgIDc3OTg5LCA2Mzc1MSwgMTIxMzcsIDU1NDgsIDc3OTg1LCAwLCA2NTcyNywgNjgzODgsIDY1NzI2LCA2MDc3LCAxMjgzNTIsIAorICAgIDY1NDUyLCAwLCAxMTMwMSwgNzgwMTMsIDc4MDA4LCA3ODAxMCwgOTg3NCwgNzgwMDcsIDAsIDEzMTksIDMwNTAsIDY1NDEwLCAKKyAgICAwLCAwLCA3ODAxNiwgNzgwMTcsIDQyODMwLCA0Mzk5NiwgNjY3MTYsIDEyODEzNywgNDY5MSwgOTIyNDIsIDkzNDUsIDYyMSwgCisgICAgOTI3MDksIDEyODIyMiwgMCwgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCA3ODAyNCwgOTQ3NCwgCisgICAgMTA1NDUsIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCAKKyAgICA5MjM2MywgOTk5NiwgODUwOCwgMCwgNzAxMiwgODE5NSwgMTI3ODM0LCA5NTY2LCAwLCAzNzIyLCAwLCA0MTcwNywgODQ5MywgCisgICAgNTQ1LCA5NTc1LCA0MTM3OSwgMTAwNTAsIDEyNzE4LCA2OTg1NCwgODg1OSwgNjgyMCwgNzQzNDUsIDY1MTEwLCAxMjA3NDAsIAorICAgIDAsIDAsIDkxMTksIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCA3ODAyMSwgCisgICAgNzgwMjIsIDQxMCwgNzgwMjAsIDE4MDIsIDc4MDE4LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgCisgICAgMTAxMjYsIDEyMTE2LCA0MTY3MywgMTIwMzcwLCAxMTQyMiwgNzgxNDEsIDEyMDM3MywgMzg2MCwgMTIwMzY3LCA2ODQxMiwgCisgICAgNDEzNDUsIDEyMDM2MiwgMTIwMzYzLCAxMTc0OCwgNDIxNTgsIDc5NDEsIDExMDc2LCA4NzQ5LCAxMjAzNjEsIDIxMDQsIAorICAgIDY0ODU4LCAzNjEsIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgOTE3OTE5LCAKKyAgICA0NTY5LCA3NDEzMCwgMCwgNDM0ODcsIDE5NDYzMCwgNjExLCA3NDEyOSwgNjQ4NzEsIDExODg5MSwgNjU2MjksIDAsIAorICAgIDE5NDg1OCwgMCwgMCwgMTI3NTQ1LCAxMjA1NDMsIDAsIDAsIDYyOTEsIDAsIDc4NjM5LCA0MTY2OSwgNzA5NCwgOTE3OTIxLCAKKyAgICAwLCA5ODM1ODEsIDc0MDU0LCAxMjc3NTQsIDE5NTAyOSwgMCwgODM5LCA5ODMzMTksIDc2OTUsIDg3NjksIDY1MjQ2LCAKKyAgICA0ODI5LCAxOTQ2NjMsIDQ4NTksIDY0NDY3LCAwLCA5ODM5NjMsIDExODk5OCwgNzIwNiwgMCwgNjY0NywgNDM5ODYsIDAsIAorICAgIDY5NzY2LCAwLCA2NDc2NCwgNDIxMCwgOTgzODYzLCAxMjc5MzYsIDgwNCwgMCwgMCwgMTIyOTgsIDAsIDY2NjUzLCAwLCAKKyAgICA2NDkyNCwgMTAwOTEsIDczOTMxLCA5NDY4LCA3NDI0NSwgMCwgMCwgNzQyNDYsIDkyNTAzLCAxMjgzOSwgNjQ2NjksIAorICAgIDkyMjAyLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAxMTkyMjksIDExMDQ5LCAwLCA5MjY5NywgNDMyMzksIDg0ODIsIDkyNDQwLCAKKyAgICAwLCA1MDMyLCA2OTY3NywgMTE5NDAsIDY3ODg4LCA2NjQsIDEyMDQzNywgNTAzNCwgMCwgMCwgMTI3NTI1LCA0MjcwMiwgCisgICAgNzM4ODgsIDk4MzE0OSwgMTMyOTQsIDY3ODczLCA2NDg2OSwgNjAzMiwgMCwgOTExNSwgNzQzMCwgMTIwMzc3LCAwLCAKKyAgICAxMjA4MTksIDY4Mzg3LCAxMjAxNjgsIDczOTEzLCAxMjAxNzAsIDQxMTYxLCA1NTE4LCA0MTc0LCAxMDk5MywgNDExNjIsIAorICAgIDEyMDE2MCwgNjQ1MjgsIDExNjksIDQzNCwgNDE0MzcsIDE5MDUsIDYwMzQsIDQxMTY0LCA2NDc0NCwgOTUyOCwgMTE4ODY3LCAKKyAgICAxMjg4MDAsIDUyNCwgMCwgNzQwMjksIDc4OCwgNzQwMjcsIDAsIDE5NDYzOCwgMCwgMTY2MywgMTA0MTksIDc0MDI1LCAKKyAgICA0MjYzNiwgMCwgNjk3MjUsIDAsIDEyMDY1NiwgMCwgNjc4NzYsIDAsIDAsIDAsIDY3ODk3LCA3NDAzOSwgMCwgMCwgMTEzOTUsIAorICAgIDAsIDExOTEwNywgNDM2MTIsIDY0MzQ0LCAwLCAwLCAxMDg1NSwgNTQ0NSwgOTM1NSwgMCwgNjUxOTgsIDczOTEsIDg5ODksIAorICAgIDIyMSwgNjU2ODYsIDAsIDAsIDgwMTAsIDcxOTEsIDQ5NjIsIDY5NzcyLCA4ODU1LCAwLCAwLCA2NDQ2OSwgMTIwNDI2LCAKKyAgICAxMDU1NSwgMCwgNDMzMzMsIDkyMjk5LCAwLCAxMjA0MjcsIDEwNDUxLCAwLCA2NzY1MywgNzI0NSwgMTI0NDMsIDc0NDA1LCAKKyAgICA5OTQ3LCAxMjAxNDksIDc4MzE3LCAzODczLCA4MzY3LCAwLCAxMjAxNDYsIDQzNDMzLCA0MzY0OSwgMTE5ODcsIDAsIDAsIAorICAgIDExMDEwLCAxMjcyMywgNzQwNTksIDc0MDYyLCA2MjE3LCA1ODk2LCAwLCA3NjgyLCA3NDA0OSwgMTQ2MiwgMTAyMzUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQyNTk1LCAwLCA3NDQwMiwgMTE4ODYwLCAwLCAxMjA0MTksIDkyNDk3LCA3NDA1MiwgMCwgCisgICAgOTIzNzgsIDEyMDU0OSwgMTE5MDgyLCA2NDI5NSwgMTIwNDE4LCAwLCA2NDc2NSwgNzM5MjMsIDEyMDQxNywgMTIwNjYyLCAKKyAgICA2OTkyMCwgMTk0NzAyLCA2MjE2LCAwLCAxMDc1NSwgOTQ1NSwgMCwgODEyNCwgMTI3MDQyLCA5NDcwLCA2OTQ0LCAxMjc1NDAsIAorICAgIDAsIDY5NjgwLCAyODI4LCAwLCA1MzEsIDQyNjM4LCAwLCAwLCAwLCA0MzQyOCwgODIwNCwgMzYxNCwgMjgyNywgOTY5NiwgMCwgCisgICAgMCwgODcyOCwgNDM1NCwgMTA5MDQsIDc4NTYyLCAxOTkzNiwgNzgzMywgMTIwNjkxLCAwLCA0MjU5OSwgNDI1OTcsIDQyNzA5LCAKKyAgICAxMjA0MDksIDEyNzA0NCwgMCwgODUzNywgMCwgMCwgOTM1NCwgOTgzMTY0LCAxMjg4MzMsIDQxMTk5LCAxMDEyMSwgMjAyOCwgCisgICAgMCwgOTgzMTk0LCA2OTcxNSwgMCwgMzA2MiwgMCwgNzQ0NDcsIDEyNjA4LCAwLCA2NjQ0MCwgNzU0NSwgOTcwMCwgMTI1ODAsIAorICAgIDkyMjA1LCAxMjA3NzcsIDEyMDUwMiwgNDExNTUsIDAsIDc0MDcxLCAwLCA5ODM0NTcsIDEyNzEzLCAwLCAwLCAwLCA3ODc3MiwgCisgICAgMCwgMTczNCwgMCwgMCwgMTI3MDQwLCA2NDU5NCwgMjQ1NiwgMjMxLCAwLCA3NDE2NywgNTQyLCAwLCAxMTg3ODYsIDAsIAorICAgIDk4Mzk3OSwgMTIzMCwgMCwgMCwgMzU5NywgNDQ0NiwgMTA1ODQsIDc0MjM1LCA5MjIxNSwgNDAzNywgMTI3OTM4LCA4MzUyLCAKKyAgICAwLCA1Njg3LCAwLCA2NDUxNSwgMCwgMTk0ODAxLCA1NTI2NSwgNjc4NDYsIDc4NDM0LCA5NzA0LCAwLCAwLCA3MDA4MCwgCisgICAgNzEzMzgsIDAsIDg2NjAsIDEyNjQ5NSwgMCwgMCwgNzg3NzMsIDc0NDgyLCA0NDgzLCAxNzA5LCA2OTcyMSwgOTkwOSwgCisgICAgNjA4MCwgMCwgMTIwMzU4LCAxNzQ2LCAxMzE1LCA4NjY3LCAwLCAwLCAxMzE0MCwgNjU4OTksIDEwNjA0LCAwLCA0NDgwLCAKKyAgICAxMTI2NiwgMTI4MTUyLCAxMjI2LCA2OTMwLCA2Nzk3OSwgOTgzNjkwLCA2MzYwLCAxMDg5NywgNDEyMzAsIDYwNSwgMCwgCisgICAgNzQ3ODUsIDY5ODc1LCAwLCAwLCA0MTUwMCwgMCwgMzExLCAxMTQ1MywgNjIyMSwgMTA2MDgsIDY0OTQzLCA3NDI4MCwgCisgICAgMTA4NzcsIDExODg2OCwgNjQ4ODUsIDc0MjcyLCAwLCAwLCAxMjg1NTksIDEyMDczNiwgNzQzMTIsIDM0NSwgMCwgNzQ0NTYsIAorICAgIDY0NjA2LCA5OTE3LCAwLCA5MjIzMSwgNTAzNywgMCwgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCA0MTUwOCwgNDEyMDEsIDMyMywgCisgICAgNDMzMjgsIDAsIDQyNjk4LCAxMjk1LCAxOTQ4NTMsIDQ2MjUsIDAsIDQ2MzAsIDEzMTE3LCAwLCAxMjg3NzIsIDY1MTIzLCAKKyAgICAxMTI5MywgMjY2OCwgMTEyODgsIDAsIDQyNjQwLCA2NTY2NiwgMjUxOSwgOTIzNjksIDY1NDIwLCA5MjQ3OSwgMCwgNDI1MiwgCisgICAgNTA0OSwgNDI2NTksIDExOTAxMSwgNzA2LCA3NzU0LCAxMDg1NCwgODczOCwgMCwgNjU0MTksIDAsIDAsIDY0OSwgNjU0MjEsIAorICAgIDAsIDY2NzAyLCAwLCAxMjY3MCwgMTAxMywgMCwgNjQ5MTksIDcwNSwgMCwgNjU0MjIsIDEyNzgwMywgMTE4MywgMTI2NTE5LCAKKyAgICA3MDE3LCA0Mjg1MiwgMCwgODE1NywgOTczNiwgNjQ1MDMsIDY1NDE4LCAwLCA5ODM4NzgsIDc0MDM1LCAwLCAxMTkxMywgCisgICAgNzM4NzQsIDY2OTYsIDAsIDg5MjAsIDExOTI5OCwgMCwgNzk2MiwgMTIyMTEsIDk4MzcsIDIwNTEsIDY2MjI3LCAwLCA0MTg0LCAKKyAgICAwLCAwLCAxMDE3NywgNzM3NzcsIDE4NTcsIDE5NDY1NywgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgNzgzMjEsIAorICAgIDc4MzIyLCA0NjI0LCA3ODE4LCAxMTkxNzMsIDAsIDAsIDc4MDUsIDAsIDk0MDA3LCA2OTM1LCA5MjI5MiwgNzgzMjUsIAorICAgIDc4MzI2LCA3ODMyMywgNDMzMjcsIDQzOTg5LCAxMTkwNDYsIDg0OTIsIDgyNTAsIDg0NTksIDAsIDg0OTcsIDg0OTYsIDAsIAorICAgIDAsIDc4MzM2LCA3ODMzOSwgOTU0MywgNzgzMzUsIDc4MzMyLCA3NzgzMiwgNjU4NDksIDc3ODMxLCA5ODM5NjEsIDAsIAorICAgIDEyNDUxLCAwLCA4Njg0LCAwLCA2MTAyLCAwLCA1Mjk4LCAwLCA1Mjk0LCAwLCAwLCA5ODM0NTksIDE5NTA2MiwgOTk0OSwgCisgICAgMTE5ODI2LCA0MzYxNywgMTE5MjE1LCAwLCAxMjA3MywgMCwgMCwgNzc4NjMsIDEzMTA4LCAxMjA2MTcsIDExNDM5LCAKKyAgICA0MTQ2OCwgOTgzNzU3LCAwLCA1MjkyLCA1NTI3MiwgOTgzODgzLCAxOTM5LCA1MzAyLCAzOTcwLCA5MTc4NzksIDEyNDU1LCAKKyAgICAxNzkzLCAwLCAwLCAwLCA2NjQzLCA5MjQ3NywgNjUyNjMsIDAsIDc4MzMwLCA0MTI5MywgNzgzMjgsIDY1OTIzLCAwLCAKKyAgICAxMzIxOSwgOTU2OSwgMCwgNzQzODMsIDAsIDc0MTk3LCAwLCA1NTAwLCA4ODEzLCAwLCAwLCA3NDU2NiwgNTMyMiwgMCwgCisgICAgNzgzNDAsIDQzNjMxLCA1MzI0LCA2NjQ0MywgMzc4NCwgNDE2MTQsIDY1MjY5LCA2MjMwLCA3ODM0OSwgNzgzNDUsIDQzMzI0LCAKKyAgICAzMzYwLCA3ODM0NCwgMTE1MjMsIDAsIDkyNDg4LCA5OTI2LCA3MTk3LCAwLCA2ODQyOSwgNDI4OTQsIDQxODIxLCAxMjQ5LCAKKyAgICA3ODM2MCwgNzgzNjEsIDc4MzU2LCA3ODM1OCwgNzgzNTMsIDY0ODk5LCA2NDc2MywgNDExNDksIDQxODA3LCA0MzE2MiwgCisgICAgNDE4MTUsIDQxMTUwLCAwLCAxMDU3MSwgMTAwOTYsIDAsIDAsIDc4MDc0LCA2OTQ3LCA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCAKKyAgICA3ODUxMCwgNDE5OTAsIDc4NTA5LCA0MTgxMSwgNzQ0NjYsIDkzOTY2LCA2NjcwLCA3Nzg4MiwgMCwgMCwgNDMwOTIsIAorICAgIDQzMzI1LCAwLCAxMDE2OCwgMCwgOTc4MSwgMTI4NjU1LCA5MTkwLCAwLCA5NjY2LCA4MjY5LCA2NTk0NCwgNzQwMDUsIAorICAgIDEzMDE5LCAxMTY3MCwgNjk4NjAsIDMxNSwgMTI4MTMsIDk4MzQ1OCwgNzg0MzIsIDc4MjU2LCA3ODM1MSwgNzgzNTIsIDAsIAorICAgIDk4MzY1NywgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgNzQ0NzUsIDMwNjYsIDkyMjIwLCA2Nzg0NywgMCwgOTIzNTUsIDAsIAorICAgIDc4MzY1LCA4Nzg3LCAxMjAzNzksIDE5NDYxNiwgNDE2MTgsIDE5NDYxNSwgNzgyNjEsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIAorICAgIDE5NDYxMiwgMCwgNzgzNjYsIDQyMDg4LCAwLCAxOTUwNjEsIDcxNzYsIDQzNzU2LCAxMDEzNywgNjEyMSwgMTA5OTUsIAorICAgIDc4MjU5LCA3NDUzNCwgODExOSwgNjQ4NzQsIDkxNzgxNiwgMTI3MTk5LCAxOTQ5MzksIDAsIDc0NTI1LCAwLCAwLCAxMjkzMCwgCisgICAgMTM5NCwgNzQ1MTQsIDAsIDc0NTE1LCAwLCAxMTg4MDQsIDI5OTgsIDk1MjcsIDEyMDY1OSwgNjUxOTAsIDEyOTc3LCAKKyAgICA0MjA5MCwgMTE5MTY1LCAwLCAxMTkxMDAsIDQxMjM2LCA5MjIzNSwgNDIwMDUsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgCisgICAgMzY3MCwgMTI4NjU3LCAxOTQ2MDAsIDAsIDAsIDc4OTAsIDAsIDExMjk4LCA0MzMxNSwgMCwgNjIyOSwgMTU5MywgMCwgMCwgCisgICAgNjE5LCA0NjM1LCA2NTA4MCwgMCwgMTI4MDAyLCA0MTIwLCA2NTMzNywgNjUzMzYsIDAsIDExODA4LCAxMTkyMTQsIDc0MTE1LCAKKyAgICA5MzY2LCA0Mjc5MCwgNDIwMDYsIDExOTExNSwgNjUzMjcsIDY1MzI2LCA2NTMyNSwgMTA3NTcsIDE1MDcsIDQyMjE2LCAKKyAgICA2NTMyMSwgNjUzMjAsIDY1MzM1LCA2NTMzNCwgNjUzMzMsIDY1MzMyLCA2NTMzMSwgNDIwNTksIDY1MzI5LCA0MjY4OSwgCisgICAgOTI0MjcsIDkxMjgsIDk0MDQ1LCA0MjA3MywgNjc4NSwgNjQ1OTAsIDk4MzgzMCwgNDM3MSwgNzE5NiwgNjUzMTgsIDIwMzUsIAorICAgIDY1MzE2LCA0MTA2LCA2NTMxNCwgNjUzMTMsIDQyMDc0LCAxMjc4NDcsIDQxMjI4LCAwLCA2NTYwOSwgNDEyNDEsIDc5MDMsIAorICAgIDQxMjM5LCA0MzUzMywgNzg0NTksIDcxODksIDAsIDAsIDAsIDEyMzU3LCA0MjgwMiwgNzg0NTAsIDg0ODcsIDkxMzEsIDAsIAorICAgIDQ2MTUsIDEyNjk1LCAxMjc3NTIsIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgNTYyLCAxMjE2OSwgNjU5MCwgCisgICAgNjk3NjIsIDY2NDU1LCA2NDczOCwgMzIxOSwgNjg2NTQsIDk4Mzc4NywgMCwgMTAzNywgMCwgMjAyNSwgMTI4MjYzLCAKKyAgICAxMzA5OCwgNzg0NDIsIDEwNjM3LCA0NTY4LCA1NDksIDE1NzAsIDAsIDI4MzUsIDAsIDEwNjI0LCA0MzYyMywgMTEwNzIsIAorICAgIDEyNzE5MSwgMCwgMCwgMTI2MDYsIDc4NDMzLCAyODI1LCAwLCAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDkyMzI3LCAKKyAgICA3MzY1LCA5ODM3NTMsIDEyMDU5MywgMTMwNzEsIDAsIDQ1MiwgNDEwNDksIDQyODQwLCA2MzQ2LCAyODMxLCA1NDYxLCAKKyAgICA3NDU5NiwgMTE0NjUsIDUyMTIsIDAsIDY0NzAzLCAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDAsIAorICAgIDE2NjgsIDAsIDAsIDAsIDExODcsIDk4MzM4NSwgNDI2MjgsIDc4NTc1LCAwLCAxMjg3NzcsIDAsIDMyNDAsIDEyODUxOCwgCisgICAgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAxMjg4NTYsIAorICAgIDU3MSwgMCwgNDkxOCwgMCwgNTI4OCwgMTI3Mjk1LCA4OTE2LCA2NTA0OCwgMTkwOSwgODg2NCwgMCwgMCwgMTA3MzYsIAorICAgIDkyNTA4LCAxMTU3MSwgNzYxNSwgMTI3MzAwLCA5MjI5NiwgNDIzNywgOTI1NzYsIDEwMzUsIDY1ODE1LCAwLCA3ODgxLCAKKyAgICA3MDEsIDY1OTM2LCAzNDg5LCAwLCAwLCAxMjA3NTEsIDExNDAzLCAwLCAwLCAxMjcxNDYsIDM3OTYsIDY4MDAsIDAsIDM5OTQsIAorICAgIDExNDIxLCAwLCAxOTUwNzYsIDAsIDk4MzkyMiwgMCwgMCwgNjQ4NTcsIDEyODEwNSwgMjg1NSwgMTI3ODI4LCA2NjMwOCwgCisgICAgNDE2MjEsIDY4MjE0LCAxMjcyODMsIDEyNzgxNywgMTA2NTQsIDAsIDExOTIyNiwgMTIxNjQsIDMyNDYsIDc5MDYsIDQzOTcyLCAKKyAgICA2NTg0NywgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgNzQyNzAsIDEyODI4OSwgMCwgMCwgMCwgMTQ5NiwgNzQ3LCAwLCA5NDIsIAorICAgIDIzNzgsIDQzMTM2LCAxMjc5MDUsIDg0NjYsIDk4MzU3NSwgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIAorICAgIDExNDA5LCA2ODM3MywgNjM4MiwgMCwgNjQ2MzQsIDEyODI3OSwgMCwgMTE2MTIsIDAsIDY3NjAwLCAyMzc0LCA5NDA2NiwgCisgICAgODQ3NSwgMTE2MDksIDY2MzEzLCAwLCAwLCA1Mjg2LCAxMTkyOTcsIDAsIDAsIDY0OTI1LCAxMjAyODMsIDE5NDU4NCwgCisgICAgMTE4OTgyLCAxOTQ1ODMsIDc3MDUsIDExOTQyLCAxMTMwNSwgMTk0NTgxLCAzMzA5LCAwLCAwLCAwLCAwLCA2ODAyLCAwLCAKKyAgICA0MTY1MywgMTI4MCwgMTI0MSwgNzE2OCwgMTIwOTYsIDAsIDY2NjE1LCA0MjU2NSwgNDE2NTEsIDAsIDAsIDAsIDQxNjUwLCAKKyAgICA2NjUwNywgNjY0NzAsIDAsIDEyOTE0LCA0MTQ5MSwgNjYwMTAsIDExOTU1MiwgNjA3OCwgOTk1NCwgMCwgMTQ3NSwgCisgICAgMTE5MjQ3LCA5OTM4LCA2MDg0LCA5MTc1NDYsIDQxMDY0LCA0MTA2MiwgMCwgMCwgMzI1NiwgMTAxODksIDQyMDc2LCAKKyAgICA0MzI1MiwgNzg4MjMsIDkxNzkwNiwgODcyNywgMCwgNjU4NzUsIDAsIDAsIDEyNzc2MiwgMTA1NjIsIDc0MjE1LCA0MzA2NSwgCisgICAgMCwgMCwgMzI0OCwgNzQyOTcsIDMyNjEsIDkwMTUsIDcxMzUxLCAwLCAzNjM1LCA2NDMzNywgOTgzMjgxLCAwLCAwLCA3MTk1LCAKKyAgICAwLCAyMDA3LCA2NDQzMSwgMCwgMCwgMCwgMCwgNjM1LCAwLCAwLCA2NTYxMywgNzc5MDksIDkyNDIwLCA3Mzk5NywgMCwgMCwgCisgICAgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMTI3NzcwLCA0MTc2LCA3MDA1MCwgMjAzNCwgOTI1NTEsIDEyMDgwNSwgCisgICAgNjU4OTEsIDEyNzAzOCwgMCwgMzE4LCAyMDM4LCAxMjg4NjAsIDc4NTk2LCAwLCAzNjQ5LCAxMzE0OSwgNDIxNDUsIDQyNzk4LCAKKyAgICAzNjM0LCAxMjAyOTEsIDExODkyNywgNjc2NzcsIDEyMDEyNCwgNzg2NiwgMCwgMTE0MDIsIDQyMTQ2LCA5NDAzMiwgNzQyMzgsIAorICAgIDQyNjY0LCAyODQ5LCAxMjcwMzQsIDAsIDc5MzgsIDEyOTYwLCAxNzYxLCAxMTgxMiwgNjUzNzksIDY4Mzg2LCAxMjgxODUsIAorICAgIDExNTksIDAsIDY5NzI5LCAwLCAwLCA3MTc4LCAxOTQ2MzIsIDAsIDQxNjgwLCAwLCAxMjgyMDMsIDExNTM0LCAxNTE0LCAKKyAgICAxMTY2OCwgNjc4OTEsIDkzMTMsIDcwMTUsIDAsIDY3ODc3LCAxOTQ1NjcsIDEyOTg5LCA2NjQ3NCwgOTM2OCwgMTI4NDgsIAorICAgIDE2MjQsIDQzMjcwLCAwLCA3NDI3OCwgMTA4MTgsIDEyNjY0NCwgOTk1MywgMCwgNzg0MjEsIDExOTQsIDMyNDIsIDk3NjEsIAorICAgIDk1NTUsIDg1OTgsIDEyMDI5OSwgNjE2OSwgMTI4NzEsIDE1NTEsIDI3OTgsIDY1MTc2LCA0OTU4LCA0Mjc1MiwgMTE5MDI1LCAKKyAgICAwLCA2Nzg3NSwgMTIwMzAxLCAzNDk1LCA2NjY0OCwgMTk0NzY4LCAwLCA2ODM2NCwgOTgzMjI0LCA0ODkxLCAwLCAxMDY0MSwgCisgICAgMCwgNzM3NDYsIDAsIDY4MzUyLCAwLCA3Mzc4NywgMTk0ODI5LCAxOTQ2MzMsIDcxOTksIDY0OTU1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MjY4NSwgNDI2NzksIDE5MywgMCwgMCwgMCwgNDI2NjcsIDAsIDUyNzEsIDkyMzE4LCA5MjUxNywgMTE4ODgyLCAxMzYyLCAKKyAgICAxMzI5NywgMCwgMTI4MDk0LCAwLCA5ODMzMzEsIDczNzg5LCAwLCA2NjU4LCA0NDI2LCAwLCA5MjYyOCwgOTgzODQyLCAKKyAgICA5MjMxOSwgNzI3NiwgNDIxNjMsIDUyMjAsIDAsIDAsIDk4MzMzMCwgMjQxNiwgMzMxMCwgNDI3MDMsIDAsIDM3OSwgMCwgCisgICAgNDM3NTUsIDAsIDAsIDMyMjMsIDY1NDkyLCAxMjg0LCAxOTQ3NzEsIDQ1NDksIDAsIDAsIDk4MzE1NCwgMTI3NzYzLCAKKyAgICAxMDgwNywgOTU1OCwgMTk0NjEzLCAwLCA4NTE1LCA4Njg4LCAxMjg2NiwgNjUzMDgsIDMyOTQsIDk4MzMzMiwgODUyOSwgCisgICAgMTI4MTAxLCA0MzM4NSwgNzU2NCwgMCwgNDMzMjksIDAsIDkyNDU4LCA3Mzc1NywgNjY0NTYsIDQyMzU5LCAwLCAyMDMxLCAwLCAKKyAgICA3MjAyLCAwLCAxMjY3NiwgNDI3MjksIDkyMTk4LCAzMjE1LCAwLCA3NzEwLCAxNjEwLCA3MzgwMSwgMCwgMCwgNjU2ODIsIDAsIAorICAgIDEyMDUzNywgNjU5MjQsIDk5NzQsIDIyOCwgNjYzNTQsIDE1MDEsIDAsIDY0Mzk1LCA1MTc5LCA3MjAwLCA2MjI1LCAwLCAKKyAgICA2NTc5NCwgMTcyNSwgNjU1MzMsIDgxOTYsIDc0NzYsIDc0Mzk5LCAwLCAwLCA3MTUyLCA4NTAyLCA1NzYyLCAxOTY3LCAKKyAgICA3NDgzLCAwLCAwLCA4MTA0LCAwLCA3NDc0LCA3Nzk3OSwgMCwgMTI2NTA3LCAxMDQxNCwgMTMwMDEsIDgxNDEsIDAsIAorICAgIDQyNTM3LCAxNTU3LCA0MzU5NCwgMTI4NjQyLCA2MzMwLCA2ODA1LCA4NjMxLCAyNTQ1LCA3MDA1MiwgMTI3MTY2LCAwLCAKKyAgICA3NDE5MCwgMCwgMCwgOTgzNzg2LCA0Mjc2MiwgMCwgNDI5MTQsIDE2NTAsIDI2MiwgMTYzNywgMCwgNzkwMSwgMzIzOCwgCisgICAgMTI4MTczLCA0MTg2MSwgMCwgMTI4NTg1LCA2NTE1OCwgMTA4NjAsIDk0MDU5LCA0MzY1OCwgNzUyNywgMCwgNDMzMTksIAorICAgIDY0MTksIDAsIDQ1LCAwLCA2NDU4OCwgOTM5ODksIDAsIDExOTgxMCwgNzE5NCwgNTI5MSwgMCwgNDM2NjYsIDEzMTI5LCAwLCAKKyAgICA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgMTI5MDYsIDk2MzksIDc5MTIsIDI2MjAsIDAsIDAsIDAsIDk4Mzg3NSwgCisgICAgMTc5LCA2NTg5NiwgMCwgNjQ3NTYsIDI4NTMsIDc4NDQzLCAxMTg4MTMsIDk4Mzg5MCwgMTE4OTk2LCAxMTkwMDksIDI4NTAsIAorICAgIDgwODQsIDk4MzA4NSwgNzM4NTAsIDI4MDEsIDkyMjg0LCA0MjA2OSwgMTE5ODM5LCA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgCisgICAgMTE5ODQzLCAxMTk4NDIsIDEwMzk4LCA5ODMwNTYsIDAsIDgzNzcsIDEyNzExNiwgODI0NSwgNjg0MDEsIDMxNTgsIDkyMzk2LCAKKyAgICAzOTgzLCA0MzY1NiwgOTIzLCAxMTk4NTcsIDExOTg1NiwgMjkyLCAxMzAwMiwgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIAorICAgIDkyNDYzLCA0NjEyLCAxMTk4NTEsIDExOTg1MCwgNzI1MywgMTI3MTEwLCA2ODM5MSwgMCwgMTA3ODIsIDM2MzcsIDEyOTk2LCAKKyAgICA0MzU0MiwgMCwgNjQ1NzgsIDk4MzY3NSwgMzIyOCwgNjk2MzYsIDg3ODMsIDAsIDExOTYxNCwgMjczMSwgMCwgMCwgNzg1ODUsIAorICAgIDQxMDIsIDc2OTYsIDczODc4LCAwLCAwLCA3ODU4NiwgNDMzMTYsIDQxNzcsIDExMjgzLCA5MDg5LCAwLCA3Mzk5NiwgCisgICAgOTgzMTczLCA2NDUwMCwgNDM2NzQsIDAsIDY0OTQ3LCAxODU2LCAwLCAwLCA2Mzc5LCAwLCAwLCAwLCAzMjA4LCAxMjk3NSwgCisgICAgNzQ3NzUsIDEyNzM4MCwgOTgzOTMxLCA5MjM4OSwgNzQwNzIsIDU1MjY5LCAwLCAwLCA5ODM2ODMsIDIwMzMsIDc4NTc3LCAKKyAgICA3ODU3NiwgMTk1MDI2LCA1NTI1NCwgNzc0MCwgMCwgMCwgMCwgNzM5NjQsIDAsIDkzOTg4LCA2NzYxMiwgNjU2NzQsIAorICAgIDEyODI0NCwgOTQxMTAsIDQxNjg5LCAwLCA3NDAwNiwgNjQ5MDksIDY2NDYsIDExNzkwLCA3NDAxOSwgMCwgMTI4MDY2LCAKKyAgICAxMjgwMzEsIDg1NjEsIDQ1NzMsIDAsIDUzMjYsIDAsIDEyMDYwNSwgNzIzMCwgODI1NywgMCwgODc3OCwgNDE2ODgsIDAsIAorICAgIDY1Nzc2LCAyMDcxLCA4MzE0LCA2NDU5LCAwLCA3NjI4LCA2NTA5MiwgNzM5MDMsIDY2NzIxLCAxMTM0MiwgMTI4NTYxLCAwLCAKKyAgICAwLCAxMjgyMjYsIDEyNzAwMSwgMCwgMTE4MTAsIDEzMTY0LCAxMDcyMywgOTY3LCA5ODM5NTEsIDEyNjQ2OSwgMTE5NDYsIDAsIAorICAgIDMyNTcsIDAsIDEyMzA3LCAxODQ1LCA5ODMxNTcsIDQzNTI2LCAwLCAwLCAxODg2LCA0MjM0MiwgMTAwODksIDg3MCwgNzY0OCwgCisgICAgMzQ5OSwgODYwOSwgNzY1MiwgODc2LCA4NzEsIDg3NywgMCwgODc4LCA0MjAxNSwgODc5LCA0MzY5MiwgNDU2MywgMCwgMCwgCisgICAgNzU5MSwgNjU4ODcsIDg2NywgOTUyMCwgODcyLCAxMjY2MDcsIDg2OCwgODczLCA3NjQyLCAwLCA4NjksIDg3NCwgNzY0NCwgCisgICAgMTIwNjc0LCA4NzUsIDc5MCwgMTI4MzAzLCAwLCAwLCAwLCA2NjE4MiwgOTgzMjU4LCA1NDI5LCAxOTUwNTUsIDY2MTgwLCAKKyAgICAxMjY0ODAsIDY2MTgxLCA2ODQ1MiwgOTgzMjg5LCA5ODMyNDgsIDQyMDY3LCAwLCA1NDMzLCAxMDY1NywgNzkxMSwgCisgICAgMTk0NjIyLCAxNTQ3LCA2NjE3NiwgNDIwMTIsIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgNTMxNywgNTQyMywgNDYxMSwgCisgICAgMCwgNjc2MzcsIDAsIDk2NzksIDc0MTIyLCAwLCAwLCAwLCA2NjE5NCwgNDQxOCwgNjYxODQsIDQ2MjgsIDQyNDUsIAorICAgIDExOTY0OCwgMCwgMCwgMTg1MSwgMCwgMTI3MTg5LCAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCA5ODMyMDIsIDQyNzc2LCAKKyAgICA2NjE4NywgMTI4MzcsIDg4MjksIDc3MTEsIDkyNzE0LCAwLCA5MjMyMSwgNDMzMTgsIDAsIDg4MDksIDY5ODgxLCAwLCAKKyAgICA5ODMxNDIsIDEyMDYwNCwgOTgzMDUyLCA5ODM4ODIsIDAsIDk4MzI3MCwgMCwgMCwgNzQyNywgOTk1OCwgNDU4OCwgNDM2ODAsIAorICAgIDAsIDc0NDg0LCAxOTQ5NjgsIDI0MzMsIDAsIDExOTYyMiwgMzM1MiwgNzQzNjMsIDk4Mzg4NSwgMCwgNzkzLCA3NDQwNCwgMCwgCisgICAgMzA1LCA1NjcsIDY3NjYyLCA4NDIsIDEyODUxOSwgODIwOCwgMCwgNDE2OTUsIDE2NDcsIDExODg3NywgMCwgNzgzNywgCisgICAgOTE3NjI1LCA4MTgsIDUzMzcsIDE5NDYyOCwgOTE3NjIxLCA0MTM3NiwgMTE5OTc4LCAxMjY1NzYsIDEyMDU5NCwgNzQwODYsIAorICAgIDkxNzYxNSwgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgMTI3MTcyLCA5MTc2MDgsIDQ5NjksIDEyNTQsIAorICAgIDkxNzYwNSwgOTE3NjA0LCA5Mzk2NywgOTE3NjAyLCA2NTIyOCwgNzgyMjEsIDEyNjYxMiwgMCwgMjg0MCwgMCwgMTE5OTgyLCAKKyAgICA5ODM5MzksIDAsIDMyNDUsIDkwNjgsIDY4MTk0LCA2NDcyNSwgMCwgMCwgMTI5OTEsIDAsIDI2NTEsIDY4MDE2LCA5ODMyNjUsIAorICAgIDkxNzYxMSwgMTI3MDI2LCAxMjg4ODMsIDAsIDAsIDQzNjQ4LCAxMjA4MTIsIDAsIDQzMzIyLCA5MjY2MiwgMCwgMCwgCisgICAgNjQzNzIsIDkyNjk4LCAzMjI2LCA2NTUsIDc1MiwgNzQ1NywgNzQ1NiwgNzQ1MiwgMzI4NSwgMTI4Nzc5LCAxMjc4MjEsIAorICAgIDExOTk4OCwgNjU2MTAsIDIzOTEsIDAsIDkyMjQ4LCA2NzEsIDI1MCwgNzQzNCwgNjE4LCA2NjgsIDYxMCwgNDI4MDAsIAorICAgIDc0MzEsIDExNTIsIDQyODAxLCA2NDAsIDEyMDY2NiwgNzQ0OCwgNzQzOSwgNjI4LCAzOTA1LCA3MzgxMCwgMCwgMTI4MjY2LCAKKyAgICA2NDc0OSwgNjc4NTAsIDIxMDcsIDAsIDAsIDQ2MDUsIDEyODE3NCwgOTgzMTkyLCA0MzM3MiwgNjU5NDUsIDEyODgzOCwgMCwgCisgICAgMTE5NTkwLCAwLCAwLCAwLCA5ODcsIDY5MjcsIDExNTcyLCA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDAsIAorICAgIDEyODI5NywgMCwgMCwgMCwgMCwgMTEzMzQsIDQzMzI2LCAxMjYwOSwgMTE1MTksIDExNTAzLCA1NTMwLCA1MjEwLCAwLCAKKyAgICA0NjI3LCA5ODM4OTIsIDUyMDgsIDAsIDEyODg0MiwgMTAzMzIsIDUyMTgsIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIAorICAgIDY5NjQ3LCA3Mzg5NCwgMTI4ODUyLCA1NDMyLCA2NDk2NSwgNTUyNywgNzQwMzMsIDEwNTE2LCA3NzkwLCA1NTI4LCAwLCAKKyAgICA0MjE0MCwgMTIwMjgxLCAwLCAwLCA0MzU0NSwgOTg4NywgMCwgNDAwMCwgNzQyOSwgNzQyOCwgNjY1LCA3NDI0LCAzMjA2LCAKKyAgICAxMjAyNzgsIDc4ODQsIDAsIDEyODU2NiwgOTE3OTg5LCAxMjg2NjYsIDIxMSwgMjUwOSwgMTI4ODU4LCAxMjA1NzMsIAorICAgIDY4NjcyLCAzMjIwLCA0MjIzNSwgMCwgMTA2OTAsIDg5NTEsIDUyMTQsIDQyNDc0LCA4MTE4LCAwLCA3MDQ4LCA0NTkwLCAKKyAgICAxMjcyNTgsIDU4NTIsIDAsIDAsIDEyNzI1OSwgMTcwOCwgMCwgOTgzMTY1LCAyNjIzLCAxMTk0MywgMCwgNjkyMjYsIDAsIAorICAgIDQ2OTgsIDY2NTA5LCAxMDY2LCAxMTk5MjEsIDQ3MDEsIDk4Mzg3NiwgMTIwMjg1LCA3NDIyNSwgOTQxMTEsIDgyNjcsIDAsIAorICAgIDEyNzI2NSwgMCwgNzUxNiwgMCwgMjYyNSwgOTgzOTc3LCA4MDM0LCA3NDMwOSwgMCwgMzYzMSwgMTA5NTUsIDc4NTAsIAorICAgIDEyMDI5MywgODQxNiwgMCwgMCwgMCwgNDMzODQsIDEyNjYwLCAwLCAwLCAwLCA3NDg1MCwgNDEwNjksIDAsIDEyODE1NiwgCisgICAgMTIwOTksIDQzMTAsIDEwMDMyLCA2MjUyLCA3MTMsIDc5OTAsIDAsIDM5OTAsIDAsIDk4MzI2MiwgNjYzNjgsIDUwMTcsIAorICAgIDY0OTU2LCA3MDcxLCAwLCAxMTkxNDQsIDEwMzAsIDExODgwMCwgOTgzMTIwLCA5NTEzLCA0MTA1OSwgOTM1NywgMCwgMTc3MywgCisgICAgMCwgMTIwMzUwLCAwLCA2MzM5LCA3NzQ1LCA5ODQ0LCAwLCA2NDY1MCwgOTQsIDE4ODAsIDc0NzY2LCA5ODM4MzgsIDg5MDgsIAorICAgIDAsIDEyODcwNywgNjU5MTMsIDc4NDcwLCAxMDc1MiwgMTMwMDMsIDAsIDEyNjU3MiwgNDEzMDcsIDg3MzIsIDEyMDMzOCwgMCwgCisgICAgMTc1NywgNjk2NCwgNDY5NiwgMCwgMTIwMzM1LCA2NDc4NSwgNzM5NCwgMzY0MSwgNTQxOSwgMTI4MDU1LCAwLCAxMjc4ODMsIAorICAgIDAsIDEyMDM0NCwgNDM5ODgsIDAsIDg2MTAsIDQzMDYyLCA3NTkyLCA4NTYsIDc0Mjk5LCA5MzYsIDEzMjg5LCA2OTg5NCwgCisgICAgNDMxNzEsIDE0NTksIDAsIDY1MjQzLCA3ODYzOCwgMTk5NTMsIDAsIDE1MDQsIDcwMDY0LCAwLCAxMjkxMywgNzQyMDYsIAorICAgIDc1MjksIDAsIDEyODY5OSwgOTgzOTU3LCAxMjA3ODIsIDQxMTMsIDAsIDIzNzIsIDMzNiwgMCwgNzUwOSwgMTIxNTIsIDAsIAorICAgIDY4MiwgNjY0NTgsIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIDAsIDk4Mzk1NSwgODAzMywgNjk5NTMsIDAsIAorICAgIDk4MTAsIDEyNzI2OSwgMCwgMTI5NzAsIDAsIDQyMzUxLCAxMDEwOSwgOTE3NjIzLCAwLCAxOTQ2OTMsIDAsIDkyNjkwLCAwLCAKKyAgICAwLCA3NDI5MSwgMTk2NSwgNzA2OSwgNDMzMTIsIDAsIDczODg3LCAwLCAyMDg3LCA2NDM3MCwgNjMxNCwgNDE3MTQsIDg1MDEsIAorICAgIDAsIDAsIDc0MjM5LCA0MTMxNywgOTI2MTQsIDIwOTEsIDc0NTQ1LCAyMDkwLCAwLCA5MzUzLCA3MTE3LCAyMDc3LCA3Nzg4NiwgCisgICAgMCwgMTA0OTgsIDIwODMsIDc3ODg4LCAwLCAwLCAxMTkyMzYsIDYzNCwgMCwgMCwgMCwgNjk3NzksIDQxNjUsIDg3NDYsIDAsIAorICAgIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCA5ODM3MTksIDAsIDEyODEzNSwgNDEwMzcsIDQyNjkyLCA3Nzg2LCAxMjk1OSwgCisgICAgNDEwMzksIDEyNzQ4MywgMCwgNjgwLCAyMzAyLCAxMjgyMDAsIDExODEsIDcwNTYsIDMxNzQsIDEyNjUxNiwgMCwgOTI2NjgsIAorICAgIDY1NjY1LCAxMjczNzUsIDEyNjUwNiwgNjkyMCwgMCwgOTIyOTUsIDAsIDExODk2NSwgMCwgNjQ2NDQsIDEyNjk4MSwgCisgICAgNzQxMTksIDAsIDQxMDI4LCAwLCA2MjMxLCAyNjEzLCA2NTMwMiwgNDA5ODksIDAsIDE5NDY5NiwgMCwgNDI3NjAsIDAsIAorICAgIDk4MzU2NiwgMCwgNDA5ODcsIDQ2NjcsIDAsIDk4MzkzMiwgODgyOCwgMCwgMCwgMTI0NiwgNDc0NiwgMCwgMCwgMTEwMjEsIAorICAgIDQ3NDksIDkyNjc1LCAwLCA5MjEsIDQ3NDQsIDAsIDEyNzAyLCAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCA3ODM4NiwgCisgICAgMTI4MTIxLCA3NDAzNiwgNzQ1MDUsIDQzMjc0LCA1MzEzLCA5NTEsIDAsIDAsIDk4Mzg2NywgNzYwNCwgOTgzMjkwLCA0MDA5LCAKKyAgICAxMjc4MTYsIDk4MzcxMCwgMTIwNTYyLCAwLCA5ODM3MjAsIDY0ODYwLCAxMTkxMzgsIDExOTA2OSwgMCwgMTI3MzcwLCAKKyAgICA0MDQ4LCA5ODM1OTgsIDAsIDcwMDI0LCAxNjQ2LCA3Nzg5MCwgNjQ1MzQsIDczOTk1LCAxMjA3MDUsIDAsIDExOTg5MCwgCisgICAgMjU3OSwgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgMzQ0MSwgMTE5ODk0LCAyOTc1LCA3NDQ0MiwgOTgyMiwgCisgICAgOTgzOTM1LCA1NTIyMCwgMTAwODQsIDczOTQzLCAxMTg4NDAsIDAsIDkxNzU2MiwgMTk0NjEwLCAzMzk5LCA5ODUxLCAKKyAgICA5ODM3MTcsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCA2Nzg5LCAwLCAwLCAwLCA3MTM2NywgMCwgMCwgMTc3NywgOTE1MSwgCisgICAgMTEzNywgNjk3NjcsIDc0OSwgNDIzNjYsIDAsIDUzODUsIDEyODU3NCwgMTI4MjE4LCAwLCAwLCA1OTg5LCAwLCAwLCAKKyAgICAxMjgwOTEsIDAsIDQxNjg1LCA2OTIyMywgMCwgOTc2OSwgNDE2ODQsIDk4MzIxNiwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgMCwgCisgICAgMCwgMjYwMCwgODg0OCwgMTIwMTM4LCA0MTI5NywgMCwgMzY2NiwgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIAorICAgIDY5Njg4LCA2OTc3MSwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDY5NzY1LCAxMjA3NTAsIDI1MiwgMCwgNDEzMDIsIDAsIDAsIAorICAgIDAsIDY5NzYzLCAwLCAxMTcyOSwgODcxOSwgOTA2MCwgMCwgMTIwMTM5LCAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgCisgICAgOTgzMjIzLCAxMTczMCwgMCwgOTU5MywgNTc1NywgMjQwMywgNjQ4MDgsIDU1Mjc1LCAwLCAxMTcyOCwgNDM1NzIsIDAsIDAsIAorICAgIDc3NjQsIDk4MzcxNCwgMTEwOTQsIDEyMDgyNSwgMCwgOTgzMjI2LCA0MjgyLCA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgCisgICAgMCwgMTI2NjUwLCA2Mzg1NCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIAorICAgIDAsIDAsIDAsIDAsIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzEyLCAzNjQ3LCAKKyAgICAwLCAyNjAyLCAxMjgzNDEsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCAKKyAgICA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMTI2NDc2LCA5MjE5MywgNzU5NywgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAKKyAgICAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAwLCAwLCA2NDQ3OSwgOTIzMiwgOTI1OTYsIAorICAgIDAsIDAsIDE5NDcxMiwgMTA5MDAsIDQxNTMxLCAxMjYzLCAzNzIwLCAxMjA0OCwgMCwgNjQyOTIsIDQxNTI0LCA3MjI3LCAKKyAgICAxMTk2MzUsIDYwOTksIDQxNTM0LCAwLCAxMjczNTQsIDEyNzM0NSwgMjk5LCA5MTc5NTcsIDg1MjUsIDEyNzM0NywgMzUyNCwgCisgICAgOTE3NTY1LCA4ODMxLCAxMjczNDksIDkyNTY0LCAzMDc1LCA2Nzg2NywgMTI3MzUyLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDAsIAorICAgIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgCisgICAgOTgzMjAxLCA2MzQwLCAxMTg4NTUsIDAsIDc4MTM0LCA4NjgwLCA3MjA0LCA3MDA2NSwgMjU4OCwgMjkxNCwgNzAxMSwgCisgICAgNTUyODEsIDAsIDI0NzEsIDE5NDYzMSwgMjg4MywgMjc0OSwgMTE5NTYzLCA3Mzc3NCwgMTA5MTMsIDAsIDAsIDg2NjYsIAorICAgIDY3NSwgNDI0OTMsIDAsIDQzNTcxLCAwLCA2MjE5LCAwLCA5OTgwLCA0MTIzMiwgMTA5MjgsIDAsIDQxMTUzLCA0MTIyOSwgCisgICAgMTE4OTY3LCAwLCAzNzM4LCA5NDAxNiwgMCwgMTI3MTEsIDMxODEsIDY2MjEyLCA3NDI4OSwgNjg0NzIsIDQyODU3LCA4MjYyLCAKKyAgICA5ODMzNzksIDAsIDk4MzIyMiwgMCwgNDIzNDcsIDEyMDkyLCA5NjE1LCA3MjM0LCA3NDA0NywgOTgzMDg4LCAwLCA0Mzc0NCwgCisgICAgMCwgMCwgNzM4NDYsIDI5MzQsIDEyNzIyLCAxMjA3NjIsIDkyMiwgNDM5ODMsIDc0NTA3LCA5ODMxMjYsIDc0NDYxLCAzMjE4LCAKKyAgICAxMjA0NzEsIDc0MjkwLCAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIDg1NjksIDExNDA0LCAxMTkzMiwgNzM3MjgsIDMyMTQsIAorICAgIDEyMDQ2MSwgMTIwNDY4LCAxMjEyOCwgMzIwNywgNjU0ODYsIDc4NzI5LCAxOTAxLCA3ODcyNywgMTI3MzI2LCAxMjA0NjAsIAorICAgIDc0MjUsIDMyMDUsIDY4MDAzLCA3ODczNywgNzg3MzYsIDc4NzM1LCA0MzM4MywgNjk5NDAsIDY1NDU5LCAyNjA2LCA3ODczMCwgCisgICAgNzM4OTcsIDAsIDExNDk2LCAxMTczLCAwLCA0MTI3MiwgMTE5NjYxLCAwLCAwLCA5ODMzMjEsIDEyMDczNywgMCwgOTgzOTcxLCAKKyAgICA5ODMzMjAsIDM3OCwgMjYxMCwgMCwgNjUwNzksIDk4MzMyNSwgNjU2OTUsIDEyNjU1OSwgMzcsIDcwNjgsIDAsIDEyMDQ4MCwgCisgICAgMTIwNDc5LCAzMjA5LCAxMjA0NzcsIDAsIDEwNjM4LCA5NzY4LCA2OTk1MiwgMTE5OTA5LCA5ODMzOTksIDAsIDAsIDAsIDAsIAorICAgIDY1NTEwLCAwLCAwLCA1MjMzLCA5ODMzMzUsIDY0NzkyLCA5ODMzMzQsIDAsIDEyNjYzMywgMCwgNzA2MCwgOTg0NywgCisgICAgMTIwMTQ0LCAxNjg1LCA1OTUsIDAsIDczOTcxLCAxMjkyLCA4OTQwLCA3MzgwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgCisgICAgMCwgNjU0MSwgMCwgMCwgMCwgMzI0MywgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIAorICAgIDY1NDcsIDEyODEzMiwgODIwMywgNzg0ODgsIDk4MzA5MCwgODQ1OCwgNjUyMTEsIDg0OTUsIDExOTkwNCwgMCwgOTE3NTUyLCAKKyAgICA3NzksIDc4MzE0LCA2NDM2NywgMjQ2NSwgNjk5MDEsIDgxOTMsIDU1Mjc5LCA5NzMwLCA5MjgwLCAwLCA3MDY1LCA3NDE1NSwgCisgICAgNDM0NiwgMCwgNzM3OTgsIDUwNCwgMCwgOTI0MTQsIDg5ODIsIDAsIDAsIDAsIDc4MiwgMCwgMTA4ODMsIDAsIDE5NDg1MiwgCisgICAgNzMyLCAzNzM3LCAxMjcyNTMsIDE1NDgsIDY4NjUwLCA5MjUwNywgMTgzMiwgNTYwNCwgNTczNSwgNDExNDEsIDExOTAyMCwgCisgICAgNDM3NiwgMCwgMTE3ODcsIDM3NDUsIDAsIDAsIDQyODg4LCA2NTcxMiwgOTgzMzA0LCAzODY5LCAxMTkzNywgNTcyNSwgCisgICAgMTI3NTM5LCAxNzgzLCA2ODY0OCwgNTcyOCwgMCwgMCwgMCwgMTE5MTgsIDY2NTY3LCA1NzI0LCAwLCA1NzI3LCA3ODUyMSwgCisgICAgMCwgMCwgNzY0LCAwLCAxMjgxMTYsIDQzNTMxLCAwLCA5MDMzLCAwLCA0MjUzMiwgNjIyMywgMTEwNDIsIDEyMDc0OSwgCisgICAgMTE0MjMsIDAsIDExOTg2MSwgNzEzNDQsIDQzNDY1LCAwLCAxMjgyNjcsIDY1NTksIDY0NTU3LCA3MTM0OCwgOTI2NDksIAorICAgIDEyMDY0OCwgNDMwMTksIDQzNDc3LCAxMDIzOCwgNzQ0OTEsIDAsIDQzMzc3LCA5MjI4MiwgNzEzNDYsIDE0NzgsIDk3ODMsIAorICAgIDExODI1LCAyNjA3LCA2NDc0MCwgMCwgNzczOSwgNzQ1NDMsIDAsIDAsIDAsIDYxMzIsIDAsIDYzNzY1LCAwLCA3MDA1OCwgCisgICAgNDExNDQsIDAsIDkyNDM4LCA0MzUzNywgNjc2MSwgMTAwOTMsIDQzNjksIDkxNzc5MSwgMCwgOTgzMTQ4LCA4ODIwLCAzOTQ3LCAKKyAgICAwLCAwLCAxMTUxNSwgNTI2LCAxMjgxMDMsIDQxMjk1LCAxOTQ2MDMsIDkxNzc4NSwgMTk0OTMyLCAwLCA3Njg4LCA5MTc3ODYsIAorICAgIDc2ODYsIDgyODgsIDExODE1LCAwLCAwLCA5ODMzODIsIDE1NDMsIDM3MTMsIDQxMjIxLCAxMjQyMywgNDIyODEsIDkxNzc4OCwgCisgICAgNzQwMjQsIDEyMjkzLCAwLCA2NDM1NywgMTE3OTQsIDQyMDgyLCAwLCAxNzM3LCA4OTg3LCA0MjA4MSwgMCwgNzIwNSwgMCwgCisgICAgOTMzNSwgMTI4NTAsIDExOTg3MCwgNjU1MywgNzA1NSwgMCwgODI3NywgMCwgMCwgNTQ3NSwgNzQ3OTUsIDY3ODAsIDAsIDAsIAorICAgIDEyOTkwLCAxMTYwLCA0MjA4NCwgMTE5NjUwLCA0MTIxNywgMTE5NjYwLCAxMDAxOCwgMzYwLCAwLCAwLCA2ODE3NiwgNTg2MywgCisgICAgMzEzNywgMCwgNDE0NywgOTgzMTcwLCA0MTIxNiwgNzg0NCwgMjYxNiwgMTE5MTkwLCA2ODQ2MSwgNjUyMzQsIDk4MzI5NCwgCisgICAgMTMwNzYsIDMxMzUsIDk4MzI4NywgNzgxNDMsIDExOTEzOSwgMzE0MiwgOTI0NTEsIDk0MDY4LCAxMDgxOSwgMTE5NTgwLCAKKyAgICAxMDE4MywgMCwgMjYwOCwgMTQ3MCwgNzM5NjcsIDk0MDA4LCA2MjI3LCAwLCAxMjcxNzMsIDY5NzQxLCA5ODM1ODIsIDYxNjMsIAorICAgIDk4MzU1OCwgMCwgMTI3MzE0LCAwLCAwLCA4NjAzLCAwLCAxMTk4NjYsIDMzMDYsIDEwODc2LCA0MzM5MiwgMTE5NTczLCAKKyAgICAxMjc5MzEsIDU3NTEsIDAsIDYyMjIsIDAsIDAsIDEyMDg2LCA3NDAzLCAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIDY0NzgzLCAKKyAgICA5MjY1OCwgMTEzMTAsIDAsIDg4ODIsIDAsIDAsIDI1NzAsIDcwMjEsIDAsIDAsIDQzMTEwLCAwLCAxMjM0LCA2NTQwLCAKKyAgICA2OTc0LCAwLCAwLCA5ODMyMTEsIDUwMDIsIDAsIDQxMjg2LCA2OTk0NiwgMTI3MDE5LCAwLCA0MzU4NSwgMCwgNjU1MSwgCisgICAgOTgzOTYyLCAxMjgyMjksIDAsIDQxMjg5LCAwLCAxOTQ2MDIsIDAsIDg5NzcsIDYwMiwgMTIwODE0LCAwLCAxMjg3NzgsIAorICAgIDEyODY2MSwgMCwgOTgzMzc1LCA0MTI3OSwgMCwgMCwgMCwgMTEwODEsIDQzNjE1LCAwLCAwLCAwLCA5ODM2MTIsIDEyNzI3LCAKKyAgICAwLCAwLCA3ODM5NywgOTQ3NSwgNzExMiwgNjUxMDUsIDAsIDk2MzMsIDEwODg2LCA0MzU5MiwgNzgzMSwgOTgzODI5LCAKKyAgICAxOTQ1NzEsIDAsIDczOTE1LCA4MDc2LCA0MzA0OCwgODI5MCwgODI5MSwgNDMwNTEsIDkyNTcwLCAwLCAyNTk2LCA0MzU4NCwgCisgICAgMCwgMTMxMTMsIDAsIDEyNzc1NywgMjM5MywgNzA1OCwgOTA4NywgNzQwNjcsIDY4NjczLCA0MTU3NCwgNzgzMzcsIDAsIAorICAgIDc0MDU4LCA2Mzc2LCAwLCAwLCAwLCAwLCA5ODU0LCAxMjc3NDgsIDY0Njk2LCAwLCAxMjgyMjAsIDAsIDY5OTQsIDAsIAorICAgIDE3MjAsIDAsIDAsIDAsIDY1MjksIDcwNjMsIDk4MzE4MiwgMzc1MSwgOTEyMCwgOTgzNDg1LCAwLCAxNzk4LCA3MDksIDAsIAorICAgIDEzNTQsIDE4NzYsIDEzMTUyLCA2NTU3LCAxMjQzMCwgODEzNywgOTQwOTgsIDkyNjQyLCAwLCAwLCAyNDUsIDEyODA5NywgCisgICAgMTE0NTYsIDQxMjMzLCA3MDcwLCAwLCA5NDA0NiwgNjEzNiwgOTE3NjA5LCA2NTY3NywgODY4MiwgNDEyMzUsIDkyNTk1LCAKKyAgICA0MjA0NSwgOTgwNCwgMTE4OTYzLCA0MzIsIDM1OTUsIDE5NDk0NSwgNjU0MzcsIDAsIDc0NDU1LCA0MjM5OSwgMCwgMCwgCisgICAgMTI4Mjc0LCAwLCAxMTk2NTgsIDAsIDAsIDAsIDc3ODk0LCA4Nzk3LCAwLCA5MDUyLCA2NDg4OCwgNzE2NywgMjM1NiwgOTUsIAorICAgIDc0Nzg0LCAxMDU4MCwgMCwgNDIyODYsIDAsIDY0NjQwLCAwLCA5NDEwOSwgMCwgNzQxMzcsIDcwMDM1LCAxMDA2MywgCisgICAgMTI2NTIsIDEyMTk5LCA5MjQ4MCwgMCwgMjU2NiwgMTE5NzEsIDk4MzczNywgMCwgMTA2NSwgMCwgMCwgNDM0MDAsIDI1NzYsIAorICAgIDY2Njk2LCA5Mzk5OSwgMCwgNDM2MDQsIDAsIDAsIDc0MDgyLCA1MTQsIDc0NTAyLCA3MDAzMiwgMjkyMSwgNDMyMTUsIAorICAgIDY0NDkzLCA1NzcyLCAxMjk2OCwgNzAwNTUsIDE5NDk0NCwgNzQ1ODAsIDQzMzk4LCAyNTgwLCA5ODM4MTAsIDQxMzQxLCAKKyAgICA0MTIyMywgNjU2NCwgMTQ2MywgNDEzNDIsIDAsIDUyOTMsIDcwMDIwLCAwLCAzNzMzLCAxMTM0NiwgMCwgMTIwNTQsIDAsIAorICAgIDc0MDk4LCA0MjgyNywgMCwgMTMwOTEsIDAsIDAsIDAsIDkxNzkxNSwgMCwgMTI3MDI1LCAwLCA3NDgyMSwgMCwgOTgzNzMzLCAKKyAgICAxMTkwNDIsIDAsIDEyNzg2NSwgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCAKKyAgICA0MjU2OSwgMTI3ODI0LCAwLCA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIDQyNDMyLCAwLCAwLCAxOTQ3ODIsIDAsIDY0NDk2LCAKKyAgICA3NDEwOSwgNzAwMzAsIDk5MTUsIDAsIDk4MzIxOCwgNzA2MSwgNDEzMzYsIDM4NTQsIDY5NzAwLCAxMzE0MSwgNjg0MTMsIAorICAgIDQzNDAxLCA0MjMxOSwgMTMwODIsIDAsIDcwNjcsIDY4MjIxLCAwLCAxMjczODMsIDEyNzE3MSwgMCwgMCwgMTI3Nzk3LCAKKyAgICA5MDI5LCA0MzU0MywgMTE5MzE1LCAyMzUzLCA2MzA4LCAwLCA3NDc5MiwgMjYxMSwgMTE5MTg2LCAwLCAwLCAwLCA0MzY2NCwgCisgICAgOTIzOTksIDY2NjI3LCAwLCA0NDg0LCA4NTA5LCAxMTg5NzYsIDExMDY2LCA2NTIzMywgMCwgNDEyMjQsIDQxMDE3LCAwLCAKKyAgICAzNzQ3LCAxMDUyMiwgMCwgMCwgMTY5MSwgNDEyMjYsIDAsIDEyMTA3LCA3MTAwLCAxMDkwNSwgNjUwMTAsIDE5NDk4NiwgCisgICAgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgOTI2NDQsIDEzMTIxLCAxMjAwMzYsIDAsIDEyMDEwLCAxMjg1NzMsIAorICAgIDEyODIyMSwgMCwgMCwgMCwgMTI3MTkzLCA2NTgxNiwgNjgxMTEsIDAsIDEyNzkzMywgNjU2NjgsIDkyMjU3LCA2NjE4LCAKKyAgICAxMTg3ODQsIDY2MzY1LCAwLCA0MjIzNCwgMTI2NDgsIDc4MTEwLCA3MTIzLCA3MDAzOCwgNTc4NSwgOTE5OCwgOTc2NCwgCisgICAgNDEzMTYsIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAxMjgyNTgsIDAsIDAsIDAsIDEzMTIyLCAwLCAKKyAgICAxOTEsIDcwMDYwLCA4NTg1LCA4MDAwLCA2NDQxMSwgMTIwNjUyLCA0Mjg4OSwgNjQ4NTAsIDQxMDcyLCA0MTU3OCwgMCwgCisgICAgNDE1NzcsIDAsIDEwMDAyLCAwLCA2NTMzLCA3MzgwMiwgNDE1NzAsIDAsIDY4MywgMzk2LCA0MTU4MCwgNjgxNDYsIDAsIAorICAgIDEyOTAxLCA0MzA1OCwgMCwgMzQzLCA3MTI5LCA0MjY4MCwgNDEzNjAsIDc4MTU0LCAwLCA0NzQzLCAwLCAwLCA3NDA0MCwgCisgICAgNzQxMDgsIDg3NDMsIDE3MjQsIDE0MzMsIDExOTMyMiwgMCwgMzczOSwgNjI2MywgNzEzNDksIDAsIDM5NjQsIDY1OTIsIDAsIAorICAgIDEyODY5MywgNjYwNDAsIDAsIDQyNTY4LCA2OTgwNiwgMTI4MTEzLCAxNzc4LCAzOTU2LCAwLCA0MjA3MCwgNjU2MywgCisgICAgNDMwNzUsIDkwMTgsIDk0MDA2LCA5ODMzOTYsIDEyMDY3LCA0MTMxMiwgMCwgNTU0NywgNzQ1MzEsIDEyNzk2OSwgMCwgCisgICAgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAxNzMsIDY2NDYwLCA3MTc0LCA5MjcwMywgMTE4ODIyLCAxNzUwLCAKKyAgICAwLCA0Mzk0LCA2ODM2OCwgMTgwNywgOTgzODg4LCA5MjI5OCwgMCwgNTg4OSwgMCwgNzE4MCwgMCwgMTE5MTQ1LCAwLCAKKyAgICA5MTc1NTgsIDQyNDcxLCA2OTgyLCAxNzIxLCA0NDAyMiwgNzg5MSwgNDIyNDMsIDQyMTYwLCAyNTgzLCA0NTEyLCAxMTkzNjAsIAorICAgIDY1MjMwLCAxMjgxMDksIDAsIDAsIDM4NTUsIDAsIDAsIDAsIDAsIDc0Mjk1LCAwLCAwLCA5MjQxNiwgMzk3NSwgMCwgCisgICAgNzQwODcsIDAsIDEyNjcyLCAzNzk4LCAyNzAzLCA5ODM1OTksIDAsIDIxMDksIDk3NzQsIDEyNzUsIDAsIDAsIDQxMDk1LCAKKyAgICAzOTYyLCAwLCAyOTMyLCA0MTEwMSwgMzk1NCwgNjQ1NywgNDUxMywgMCwgMCwgNzM5OTQsIDczOTkyLCAxNDY4LCAwLCAwLCAKKyAgICA0MTg1MSwgMTI4MjMwLCA0MTg0NiwgMCwgNTUyMzgsIDc2MzMsIDQxODQ5LCA2ODM4NSwgNDMyMCwgMzIyNCwgMCwgCiAgICAgMTI4MDMyLCAwLCA0MjUzMSwgMTE5MTA4LCAxNTEwLCAwLCA4MjU2LCAwLCAxMTM5MywgMCwgODg3OSwgMTI4MDc1LCAKICAgICA5MjQ3NCwgODc3MCwgMCwgMCwgNzgzNzcsIDE5MTAsIDg2NzEsIDc4Mzc0LCA0MjgzLCAwLCAxMjcxMTcsIDY4MzYxLCAKICAgICA3ODMxOCwgMjY1NCwgNzg5MywgMTk1MDA3LCAwLCAwLCAwLCA2NTEwNiwgNDI3NjEsIDEyODU3LCA0NTgxLCA4NDExLCAKQEAgLTE5MjM2LDI4ICsxOTI1NiwyOCBAQAogICAgIDkxNzYxOSwgMCwgMCwgMTAwNDMsIDAsIDExODYsIDQxNTcxLCA2OTk5LCA2MTcsIDk0NjQsIDEyNjY0MiwgMzY3NSwgNTIwNywgCiAgICAgNjUwNjIsIDUyMTMsIDE5NDc2OSwgMjYxNywgNDEzNDgsIDQxNTY4LCAxMjg4MDMsIDMyNTMsIDEyMDUzNSwgMCwgODYzMCwgCiAgICAgMTI4NTQ0LCAwLCA1NTk2LCA1NTQ1LCA3Mjg4LCAyNTg2LCA2NDg4NywgMCwgNTIxNywgNzEzMzYsIDAsIDAsIDAsIDY0MjkzLCAKLSAgICA2ODA5OCwgMjYzNSwgMCwgMCwgOTgzODM3LCAwLCA5ODM2MzIsIDc4MzUsIDcwMDQwLCAwLCAxOTQ5ODgsIDkyMjg1LCAKKyAgICA2ODA5OCwgMjYzNSwgMCwgMCwgOTgzODQ2LCAwLCA5ODM2NDEsIDc4MzUsIDcwMDQwLCAwLCAxOTQ5ODgsIDkyMjg1LCAKICAgICA2NDU1OCwgMTI3MTIyLCAwLCAxMjcxMjEsIDAsIDEyNzkxMywgMCwgNTc4NCwgOTgzMTAyLCAwLCAwLCA3MDAzMywgNDAxMSwgCi0gICAgOTE3NjE2LCA2ODEwMSwgMCwgNzg2NCwgNDI1NCwgNjUwOTUsIDk4MzQ4OCwgNTYwMCwgMzkwMywgMTI3MDgzLCAxMDQ0NywgCisgICAgOTE3NjE2LCA2ODEwMSwgMCwgNzg2NCwgNDI1NCwgNjUwOTUsIDk4MzQ5NiwgNTYwMCwgMzkwMywgMTI3MDgzLCAxMDQ0NywgCiAgICAgNTU5OCwgMTIwNywgMTIwNTIxLCA2NjY4OSwgMzUwMSwgNDI1ODIsIDQzNjAwLCAxOTQ3ODAsIDAsIDExMjQsIDU1OTcsIAotICAgIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0NzYsIDk4MzQ3MywgOTgzNDc0LCAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIAotICAgIDk2NzEsIDExMjUsIDQzOTksIDEyNzQ3OSwgOTE3NjEwLCA5ODM0ODAsIDc2MzEsIDU0ODgsIDcxMjgsIDEyMDUzMiwgMCwgCisgICAgMTk0Nzc4LCAxOTQ3NzIsIDkzMjEsIDk4MzQ4NCwgOTgzNDgxLCA5ODM0ODIsIDAsIDE3MTksIDY4MzU2LCA2ODM1NCwgCisgICAgOTY3MSwgMTEyNSwgNDM5OSwgMTI3NDc5LCA5MTc2MTAsIDk4MzQ4OCwgNzYzMSwgNTQ4OCwgNzEyOCwgMTIwNTMyLCAwLCAKICAgICA1NDkxLCAwLCA4OTM3LCA0MzA0NCwgMjYwNCwgNzQxODcsIDU0OTAsIDQzMDQ2LCA1NDg5LCA3MjEyLCAxMTc2OCwgNDMwNDMsIAogICAgIDYzMDAsIDAsIDcxMjIsIDAsIDQzOTAsIDQ1NCwgNDEzOTcsIDAsIDk4NzUsIDc1OTMsIDE5NDc5MSwgOTIyNzQsIDExODkxMywgCiAgICAgNzIwNywgMCwgNjU5MDEsIDIzOTQsIDI1NzUsIDAsIDM3NDYsIDExMDE2LCA2NTc1MiwgMTIwMDM3LCAwLCA0MzQyMywgCiAgICAgMTI4NjgzLCAxMTk4OSwgMCwgMCwgMCwgMCwgMCwgODI0OSwgMTI4MTcyLCAwLCA3ODUzMSwgNjY0MCwgNzQ4MDYsIDI1OTgsIAotICAgIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTIwNzEwLCA2NTAwOCwgMCwgMTk0Nzg0LCAxOTQ5ODksIDE5NDc5NSwgOTgzNDY1LCAKLSAgICA5MjUxNSwgNjg0NzUsIDkzOTczLCAwLCAwLCA3ODYzNywgMTI2NDcsIDAsIDEyODA0MywgNjk4OTMsIDEwMzYsIDk4MzQ2OSwgCi0gICAgOTI0MTksIDE3MjMsIDEyODA1NiwgNzQyMTcsIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDk4MzQ2MSwgCi0gICAgNzQ0ODYsIDk4MzQ1OSwgNzQwLCAxMTkyMjIsIDE5NDk3OCwgMTk0OTg0LCAwLCA0MjM4LCAxMTA3MSwgOTQ1OSwgNjg0MzcsIAorICAgIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTIwNzEwLCA2NTAwOCwgMCwgMTk0Nzg0LCAxOTQ5ODksIDE5NDc5NSwgOTgzNDczLCAKKyAgICA5MjUxNSwgNjg0NzUsIDkzOTczLCAwLCAwLCA3ODYzNywgMTI2NDcsIDAsIDEyODA0MywgNjk4OTMsIDEwMzYsIDk4MzQ3NywgCisgICAgOTI0MTksIDE3MjMsIDEyODA1NiwgNzQyMTcsIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDk4MzQ2OSwgCisgICAgNzQ0ODYsIDk4MzQ2NywgNzQwLCAxMTkyMjIsIDE5NDk3OCwgMTk0OTg0LCAwLCA0MjM4LCAxMTA3MSwgOTQ1OSwgNjg0MzcsIAogICAgIDc4MTQwLCA3ODEzOSwgMTk0OTg1LCA4MTIxLCAxMDQzOCwgNzQ0ODcsIDQyNTc0LCAxMzI4NSwgNTUyNjMsIDExOTA3LCAKICAgICAxOTUwMDAsIDU2OTAsIDkyMjU1LCA5Mzk5MiwgMCwgNDMxODEsIDEzMDk1LCAwLCAxMjc4NTcsIDY0NDk4LCAwLCA5NTA2LCAKICAgICA2OTc4LCAxOTQ5OTMsIDc3OTkyLCAwLCAwLCAxOTQ5OTIsIDAsIDEyNzg0NSwgMTEyMiwgMzE3LCAwLCAwLCAwLCAwLCAKICAgICAxOTIwLCAwLCAxMDE3MywgODI3LCAwLCAwLCA3ODM3OCwgMTIwMTI2LCA1MjIzLCAxMzA0LCAwLCAxMTk1NjQsIDUyMjYsIAogICAgIDEyNjAyLCA5NDA0NCwgMCwgOTMyOSwgNzc1OCwgOTIzOSwgNDExNzMsIDUyMjQsIDU0ODcsIDEyMjIsIDU2OTIsIDQxNzI1LCAKICAgICA2OTIyOSwgOTY3NCwgNTY5NSwgNDE3MTEsIDY0NjI3LCAxOTkwOSwgMCwgNzQ2MDQsIDU2OTEsIDI4NywgODY2LCAyMzMsIAotICAgIDEyNzQ5MCwgOTgzNDMzLCA0MjgxNiwgOTQwMzYsIDY1MTQwLCA3NDc5NywgMCwgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCAKLSAgICA0MTE3NSwgOTgzNDQwLCA5ODM0MzcsIDk4MzQzOCwgNTI5NiwgOTgzNDM2LCA0MjQ5MiwgNDM0MDIsIDkyNDY2LCAzMzAyLCAKKyAgICAxMjc0OTAsIDk4MzQ0MSwgNDI4MTYsIDk0MDM2LCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgCisgICAgNDExNzUsIDk4MzQ0OCwgOTgzNDQ1LCA5ODM0NDYsIDUyOTYsIDk4MzQ0NCwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgCiAgICAgMCwgMCwgNjUxNiwgNjUxNSwgNjUxNCwgNjUxMywgNjUxMiwgMCwgNzg1NiwgODY5MCwgMCwgMCwgMTIxMjIsIDExOTYwMiwgCiAgICAgNDM5NzYsIDAsIDE3ODUsIDY5OTI1LCA2ODYyMiwgNjUxNTMsIDE5NDgxMCwgNTEzOCwgMCwgMCwgMTE4ODY5LCAwLCA0NTQwLCAKICAgICA0MTE4MSwgMCwgNjIwMCwgMCwgNTEzNCwgMCwgMzIyLCA0NjQzLCA1MTMyLCAwLCA2Mzg5LCAxMjg1MzMsIDUxNDMsIDAsIApAQCAtMTkyNjUsNyArMTkyODUsNyBAQAogICAgIDEyNzAxMiwgMTAyNzAsIDEwMjg2LCAxMDMxOCwgMTAzODIsIDQzNTI5LCA2NjQ3NywgMCwgMCwgNzQxNzAsIDAsIDMyMzQsIAogICAgIDAsIDAsIDc0Mzc2LCA0MzEzOSwgMTE4ODE1LCAxMjcwODQsIDEyMDYyNywgODc2NywgMCwgNzQ0ODksIDk2OTUsIDEyMDc0NiwgCiAgICAgNTIwMSwgMCwgNjIxNSwgMTI3MTQsIDYyMTQsIDEzMTAxLCAwLCAxOTQ5OTksIDY1MjY4LCAwLCAwLCAwLCAxMTAyNywgMCwgCi0gICAgMTAwNTksIDEwNTExLCA0MjA3NSwgOTc2NywgNzg5LCAxNzQ5LCA3ODg5MCwgMTI3MDcxLCA5ODM2NjEsIDMyMCwgMCwgCisgICAgMTAwNTksIDEwNTExLCA0MjA3NSwgOTc2NywgNzg5LCAxNzQ5LCA3ODg5MCwgMTI3MDcxLCA5ODM2NzAsIDMyMCwgMCwgCiAgICAgODY0NywgMCwgMzA0OSwgMCwgNjQ3MSwgNDIwNzEsIDQzMTU2LCA5OTI1LCAxMjczNTYsIDEyNzM1NSwgNjY0NzgsIDQ5NjAsIAogICAgIDU1NDksIDEyNzM1OSwgMTI3MzQ2LCA4NDg1LCA0NjcxLCA1NDE4LCAxMjczNTAsIDMzNTEsIDEyNzAwNiwgMTI3MzUxLCAKICAgICAxMDYxMCwgNTQxNCwgMzA2NCwgNjIxMiwgNDI4NiwgNTQyMSwgMTI3MzQ0LCA5NTU0LCAwLCA5NDA0OCwgMTI3MTA5LCAKQEAgLTE5MjczLDE2ICsxOTI5MywxNiBAQAogICAgIDEyNjAzLCA3MTMxLCAxMTQzMCwgNDU2NiwgNzUxOCwgOTMxNywgMzgwMSwgMTAzNDIsIDEwNDA2LCAwLCAxMTkyNTksIAogICAgIDQyNTc2LCAwLCA1MjAwLCAxMjY2MTEsIDkxNzk0OCwgMCwgOTE4MywgMTI3MzYxLCA3NDQ1OCwgNzM4MjUsIDM5NSwgNTQ4MiwgCiAgICAgNTE5OCwgNDM0OSwgMTAzOTAsIDc0MjAyLCA1MTk2LCA0MzIyNCwgNjExMywgNDIwMDksIDUyMDUsIDAsIDQzMzA3LCAwLCAKLSAgICAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAxMTg4NDMsIDkxMjYsIDQzNSwgMCwgMTIwMTQsIDEwMzc3LCA4MDkzLCA5MDc5LCAKLSAgICAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAxMjgxNzgsIDU3MzgsIAotICAgIDk4MzIxMywgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCA2ODExMiwgNzg3MiwgODU4MSwgMCwgMTI2MCwgCisgICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDk4MzYyNCwgMTIwMTQsIDEwMzc3LCA4MDkzLCAKKyAgICA5MDc5LCAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAxMjgxNzgsIDU3MzgsIAorICAgIDk4MzIxNSwgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCA2ODExMiwgNzg3MiwgODU4MSwgMCwgMTI2MCwgCiAgICAgMzE0OSwgNTM1OSwgMTIwMTM0LCAwLCA3OTE0LCA1MzU3LCA5MjE3MCwgMTI4NjU5LCAyNjI0LCA1MzY0LCAwLCAxMTQzMSwgCiAgICAgMTIwMDMwLCA5MTAxLCAxMTA1OCwgNzgyODgsIDAsIDc4MjkzLCA0MjI3MSwgNzgyODksIDQyOTE3LCAxMjA3OTMsIDAsIAogICAgIDY1NTY2LCA2NzE3LCAxMDYxOSwgNDMzNjAsIDc4Mzg1LCA3ODM4NCwgMTE4MzIsIDc4MzgyLCA3ODM4MSwgNzgzODAsIAogICAgIDc4Mzc5LCA5MzE5LCA3MDk3LCAxMTkwNTUsIDc3OTA2LCAzMjMyLCA3MzgyNCwgNzQ1ODEsIDEyMDYzMiwgMCwgMCwgCiAgICAgNDE4ODksIDkyNDUzLCAwLCAxMTYxLCA0MTg5NSwgNzQxMDMsIDk3MDEsIDg2MjIsIDAsIDAsIDczODE5LCAxMjA1ODgsIAogICAgIDUwMTIsIDc3OTEyLCA0MTM2MiwgNjk4NjIsIDc4Mjk2LCAxMTkyMSwgMCwgMTE3NjksIDAsIDY4NjA5LCA0MTM2NCwgMCwgCi0gICAgNzQyMjgsIDQxMzUyLCA0MTM2MSwgMCwgNDEzNjYsIDAsIDMzNTYsIDAsIDkxNywgNjg0MjIsIDExOTkxNSwgNzEzNCwgCisgICAgNzQyMjgsIDQxMzUyLCA0MTM2MSwgMCwgNDEzNjYsIDAsIDMzNTYsIDExNjExLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAogICAgIDgxOTksIDc4Mzg5LCAxMTk5MTcsIDY3NywgMTE5OTE2LCAwLCAxMTk5MzIsIDEyNzE2OSwgMCwgMCwgMCwgMzM0OSwgCiAgICAgNzQxMjUsIDcwMjIsIDg5MjcsIDQ3MzksIDAsIDU4MDIsIDAsIDg2MTUsIDAsIDAsIDQ5MSwgMTI4ODE5LCAxMDE5MCwgCiAgICAgMTIwNjk4LCA2NTgzNywgMTI4ODIwLCA4NDI2LCAxMTA5MiwgOTg5MSwgMCwgNDI0OTcsIDcxMTMsIDc1ODYsIDQyMzA1LCAKQEAgLTE5MzEwLDMwICsxOTMzMCwzMCBAQAogICAgIDU1MjUyLCA3Mzk3MiwgMTQ0MiwgMCwgNTg5NCwgNzAwNjksIDAsIDQxMTcxLCA5MjUxMSwgNzQzMTMsIDAsIDEzMTYyLCAwLCAKICAgICAzMzM0LCAxOTUwMTAsIDExODgwMywgNzc4ODEsIDY2MDIyLCAwLCAwLCAxNjUxLCAxMjg3NzEsIDg4NjEsIDAsIDAsIDExNDIsIAogICAgIDAsIDgyNzEsIDAsIDk4MzA1OCwgMTI2NjQ1LCAxMjkwMywgMCwgNDAwMiwgNDM2MjYsIDEwNDQyLCAxMDY3NiwgMzM0NCwgMCwgCi0gICAgMCwgMTI5MjAsIDE5NDU2MCwgMCwgMCwgNjY2NDIsIDEyNzcsIDAsIDc4NzEsIDAsIDAsIDc4ODUzLCAwLCA3ODg1NCwgCisgICAgMCwgMTI5MjAsIDE5NDU2MCwgMCwgMCwgNjY2NDIsIDEyNzcsIDAsIDc4NzEsIDAsIDE5NDY4NiwgNzg4NTMsIDAsIDc4ODU0LCAKICAgICAxMjAzNjAsIDAsIDExNzg0LCAwLCA3ODAxMiwgNDcwMCwgNjYzNjYsIDc4ODU4LCAxMjAzNTksIDExMDEyLCAwLCA3ODg1NiwgCiAgICAgOTI0MDAsIDc3ODc5LCA0OTczLCA4Nzg0LCA3Nzg3NywgNzQ4MDQsIDc3ODc0LCA3Nzg2OSwgNzc4NzEsIDQyNDQwLCAwLCAKICAgICA0MzExOCwgMCwgNDIzNjQsIDY3NzQsIDY3NzMsIDkxNzU2MCwgMTIwMzY5LCAxMDM0NiwgMTA0MTAsIDc4ODU5LCA5MjQzLCAKICAgICAyNDY0LCA3NDI2MywgNjEwOCwgMzM3MiwgMCwgNjI0NywgNDMxMTcsIDc0NTI2LCA3MTIxLCA3NDE2NiwgMCwgMTIwMzU1LCAKICAgICA5MjUzNywgMCwgMCwgMTk1MDM0LCAwLCAwLCAwLCA3MDA4MywgMzM1NCwgMTk1MDM3LCA0MTkyLCA5Mjg5LCAxMTg5OTksIAogICAgIDQxMTkxLCAzODc2LCAwLCA3MDA2NywgMTIwNjYwLCA0MzY5NiwgNDMzODAsIDAsIDk4MzA5MSwgMCwgMCwgMTE2MDMsIAotICAgIDk4Mzk0NSwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzY5MSwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCisgICAgOTgzOTU0LCAwLCA2NTg5LCAxMjg1ODgsIDE5NDY3OSwgMCwgMCwgOTgzNzAwLCAwLCAwLCA0MjU3MiwgMTI4MjY0LCAKICAgICAxMDYzMCwgNzQ4MjcsIDE5NjMsIDExNjIyLCAxMjcwOTgsIDExNjU0LCAwLCA3NTUwLCAxMDY4NiwgNTkwMywgMCwgNzgwMDksIAogICAgIDQxMzI5LCA5NjYyLCA5MTc5MzcsIDY0Njk4LCAzMzY2LCAxMDM5OSwgMCwgNTU0MiwgMTEwMTMsIDEyNzkyNywgMTI4MzAwLCAKLSAgICAwLCA3ODYyMSwgMTk0NjcyLCA2OTI1LCAwLCAwLCA5MTc5MjksIDAsIDExNTY4LCA5ODM2NjQsIDQzMzY3LCA2NDU3OSwgCisgICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjczLCA0MzM2NywgNjQ1NzksIAogICAgIDkxNzkzMCwgNzg1MiwgMCwgMCwgNjc1NCwgNjMxMiwgMCwgNjQ2NzIsIDY1Mjk2LCAwLCAxMTg5NTcsIDAsIDQxNiwgCiAgICAgMTIyOTYsIDY4NDU3LCA3MzgzNCwgNjgxNzcsIDExMDUwLCAxMDk4NCwgOTIyMDgsIDAsIDAsIDkyMTgyLCAwLCA5ODM2MDUsIAotICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMjgsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCisgICAgOTUzMiwgNjYzNTUsIDAsIDk4MzIzNCwgOTE3OTI1LCA2NDM0MywgMTk1MDMyLCAxMjgyODEsIDE5NTAzMSwgMCwgMTk1MDMwLCAKICAgICAxOTUwNTcsIDExNDQ1LCAwLCAyMTEyLCAxOTUwNTYsIDEyODgxNCwgMTAxODUsIDEwMjEsIDEyODEzMCwgOTUwNywgMTAyMTAsIAogICAgIDc0NTQ0LCA4MDIzLCAxMjAwLCAxMjI0MywgNzgwMDEsIDUyODIsIDc4MDAzLCA5NjI0LCAxMTU0NSwgMCwgMTIwNDkzLCAKICAgICAzMzQzLCA0NDI0LCAxMTA0NywgMTg4NSwgNDMyNjgsIDM4OTYsIDc4NDQ0LCA2NjQ5NywgMjk0NywgMzkyLCA3ODk0LCAKICAgICA0MzkxLCA2ODEzOSwgOTgzMDYyLCAxMzA1OSwgNzQ4MTYsIDc3OTk4LCAzMzgxLCA3OTQyLCAwLCA2OTIxOSwgMCwgNjQ3NTcsIAogICAgIDAsIDM5MTMsIDAsIDAsIDc4MjM1LCA3MDQ0LCAxMjY1LCAwLCA2MzA5LCA3MDQ1LCA3MTc1LCA3MDQ3LCA3ODIzOSwgCi0gICAgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgMCwgMCwgMTY3LCA5ODM4OTcsIDc4MzAxLCA5ODM2NDQsIAotICAgIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIDkxNzU4MywgOTgzNjI1LCA5NDA2NSwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKKyAgICAxMTc5MSwgMCwgMCwgODIyMSwgNzgzMDcsIDQxODY0LCAwLCAwLCAwLCAwLCAxNjcsIDk4MzkwNiwgNzgzMDEsIDk4MzY1MywgCisgICAgNzQyMTEsIDQxODk3LCA2ODQ3NywgMCwgOTE3NTgzLCA5ODM2MzQsIDk0MDY1LCAyNDkzLCAwLCAxMTg4MTEsIDAsIDAsIAogICAgIDY0MzU0LCAwLCA4Nzc3LCAwLCA0MDYsIDg4ODQsIDIzODUsIDAsIDkyNDUwLCAwLCA5MTc1NzMsIDQzMDMwLCA0MjAyNywgCiAgICAgMTIxMTQsIDAsIDkxNzU3OSwgNjQ5MzYsIDE5NDY5NSwgMCwgMTIwNjI5LCAxMDU2MSwgMCwgODM2NSwgMTIwNTM5LCAKLSAgICA5ODM3NjUsIDY1ODQxLCAxMjA3ODcsIDExNjAxLCAwLCA3NDEyMSwgMCwgOTE3NTc1LCA3ODM0LCA3NDE1OSwgMCwgCisgICAgOTgzNzc0LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIAogICAgIDkxNzU3NCwgMTAyOTgsIDY2MjQsIDQ5MDgsIDkxNzU5NiwgMTYzOSwgMCwgMCwgNzQxNTcsIDYzMjcsIDY3MjQsIDAsIAogICAgIDEyODA4NiwgOTI1NjYsIDY5OTEwLCA0ODE3LCA3ODQ0NiwgMTk0NzU5LCA5MjUzNiwgNzA0MywgOTYwMCwgMTEwMjIsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDc1NDgsIDY0Nzk0LCA0MjA1MCwgMTIyOTEsIDU1Mjg5LCAxOTQ3NjEsIDEyMzQzLCA2NTcsIApAQCAtMTkzNDMsMTQgKzE5MzYzLDE0IEBACiAgICAgNDE0MDYsIDQzMjczLCA3NDE2MCwgMTE5OTgzLCA3MzkzOSwgOTI2MzgsIDExOTk4NCwgMTE5OTc5LCA0MTQwNCwgMTE2NSwgCiAgICAgMTE5OTgwLCA0NDUxLCAxMzA4NywgMCwgMTEyODQsIDExOTk4NywgNzAwOTcsIDY1MTU1LCA0MzAxNCwgNTQzOSwgOTM2MywgCiAgICAgNzAwNzAsIDMzNzUsIDEyODg2OSwgNTkwMCwgOTM5OTAsIDc4ODksIDI3MjIsIDQyMjYyLCAwLCAwLCAxMjg3NzQsIDAsIAotICAgIDIyODIsIDAsIDEyNzgxMCwgMTE0MDEsIDk4MzgxMywgMCwgNjg0NTksIDAsIDAsIDAsIDAsIDY1NDM4LCAwLCA3MjgwLCAKLSAgICAxMjc4ODcsIDAsIDEyNzM4MSwgNDg2OCwgMTE5OTY3LCAxMTk5NjYsIDExODc5OCwgMCwgMCwgNDMxNjEsIDAsIDkyMzYwLCAKLSAgICAwLCA1MTgyLCAwLCAxMjA1NDIsIDAsIDAsIDQyMjYsIDExOTI0MywgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDcxMzMwLCA5NzcsIAorICAgIDIyODIsIDAsIDEyNzgxMCwgMTE0MDEsIDk4MzgyMiwgMCwgNjg0NTksIDAsIDAsIDAsIDAsIDY1NDM4LCAwLCA3MjgwLCAKKyAgICAxMjc4ODcsIDAsIDEyNzM4MSwgNDg2OCwgODI5NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgMCwgCisgICAgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKICAgICA0NDU4LCAwLCAwLCA2NDc3MCwgNzQ4MzgsIDAsIDM0NCwgMCwgMTk0NzkwLCAxMzk1LCA2NDI3OSwgMCwgOTIyNDAsIDAsIAogICAgIDc4NiwgMCwgNDMxNzQsIDY0MzQwLCAwLCAxOTQ3NjcsIDEyMDcyMywgNDMwMjYsIDc2MTIsIDEwMTMyLCA2NDQxMywgCiAgICAgNjUwMjUsIDAsIDAsIDAsIDkzOTU2LCAwLCA2ODQ0NCwgMCwgOTI0MzcsIDAsIDExOTE2MCwgMTAyMDQsIDkyNjU2LCAwLCAKLSAgICAxMjc4MDksIDk4MzYzNSwgMTM5OSwgOTgzNjQzLCA2NTIxNywgMCwgODg1MiwgMTI4NTcxLCAyNDEsIDEyODc4MCwgNDkwNywgCi0gICAgMCwgOTgzNjMwLCA3OTMyLCA5NzI3LCAxMjg4NzMsIDc0MjU1LCA4NzQ4LCAwLCAwLCA5ODM2MzQsIDAsIDQyNzgwLCAwLCAwLCAKKyAgICAxMjc4MDksIDk4MzY0NCwgMTM5OSwgOTgzNjUyLCA2NTIxNywgMCwgODg1MiwgMTI4NTcxLCAyNDEsIDEyODc4MCwgNDkwNywgCisgICAgMCwgOTgzNjM5LCA3OTMyLCA5NzI3LCAxMjg4NzMsIDc0MjU1LCA4NzQ4LCAwLCAwLCA5ODM2NDMsIDAsIDQyNzgwLCAwLCAwLCAKICAgICAwLCA0MjE3LCAwLCA4NjUwLCAwLCAwLCAwLCA2OTkwMCwgMTE4ODcyLCA0MzA5OSwgMzk2NSwgMTE5MTE5LCA2NzE5LCAwLCAKICAgICAxMzMwMCwgNzg0MzksIDkzOTcxLCA0MzA1NywgNjY1ODgsIDExODk5MSwgMCwgMCwgNzM4MTUsIDQ0MjAsIDAsIDY0MTAsIAogICAgIDc3NjAsIDAsIDAsIDAsIDAsIDAsIDcyOTQsIDAsIDAsIDAsIDkwNjYsIDAsIDExOTkzLCA0MzE4OCwgMjYyNiwgNzc2MiwgMCwgCkBAIC0xOTM1OCw0NSArMTkzNzgsNDUgQEAKICAgICA2NjQ1NCwgOTU5MiwgNDI4NTEsIDEyNjk5MywgMTU0MiwgOTIzMDMsIDAsIDAsIDAsIDAsIDc0MzExLCA3ODQ5NywgMCwgCiAgICAgMTAxODEsIDAsIDQzNjI0LCAwLCA3Nzc5LCAwLCAxMDE5NSwgOTQ3OSwgNjAyOSwgMCwgOTIyNjgsIDk2ODksIDAsIDY1NTc3LCAKICAgICA4OTkzLCA2NjM1OCwgMCwgNDIzNzgsIDMzNjgsIDYwNiwgMTI3MDMwLCA3Njk3LCA2OTIzNywgNjk3ODcsIDIwMzAsIDAsIAotICAgIDYwMjcsIDgzNzAsIDQzMjIsIDAsIDY1MjA3LCAwLCA5ODMzMzEsIDk4MzMzMCwgOTgzMzI5LCA5ODMzMjgsIDI3MzUsIAorICAgIDYwMjcsIDgzNzAsIDQzMjIsIDAsIDY1MjA3LCAwLCA5ODMzMzksIDk4MzMzOCwgOTgzMzM3LCA5ODMzMzYsIDI3MzUsIAogICAgIDQyODMxLCA3NzkzNSwgMTI3MTIwLCA3NDg2NiwgODg4MSwgMTE5MDQ3LCAwLCAwLCA3Mzk0NiwgMCwgMCwgMCwgNjgxNDAsIAotICAgIDk4MzkxOSwgOTU3NiwgMTI4ODcyLCAzMzQ3LCA0MTYwLCA1MTU0LCA1NTI4OCwgMzc5NCwgNjY1NjQsIDg1MzAsIDEyNzA2MywgCi0gICAgNzcwOSwgNDExMTIsIDk4MzEzMiwgNjY1NjAsIDQyMDQxLCA0NTcyLCAxMjg3NiwgNjY1NjEsIDk4Mzc0OSwgNjc1OCwgCi0gICAgOTgzOTE3LCAxNjE1LCA1ODU1LCA4MDksIDAsIDkyMjgzLCAxMjgzMTYsIDEyODAwNCwgNTc5OSwgOTgzMzIwLCA3MDEwMCwgCi0gICAgOTgzMzE4LCA3MjYwLCA5ODMzMTYsIDQzMDMxLCA2NDQyNSwgNjUxMjgsIDc4ODE5LCA2NDM4NiwgNjUyNTcsIDAsIDY4NjE2LCAKKyAgICA5ODM5MjgsIDk1NzYsIDEyODg3MiwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAorICAgIDc3MDksIDQxMTEyLCA5ODMxMzIsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCA5ODM3NTgsIDY3NTgsIAorICAgIDk4MzkyNiwgMTYxNSwgNTg1NSwgODA5LCAwLCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIDk4MzMyOCwgNzAxMDAsIAorICAgIDk4MzMyNiwgNzI2MCwgOTgzMzI0LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIDY1MjU3LCAwLCA2ODYxNiwgCiAgICAgMTIwNjA3LCA5MzQ3LCAxMjgwNjcsIDY1MzIsIDAsIDAsIDAsIDEyNzA2MCwgNjU4MjgsIDAsIDI4MywgNjg2NjUsIDc4ODEzLCAKLSAgICA1MzIsIDc4NjYzLCAwLCA5ODM3ODcsIDEyMDYwOSwgMCwgMzM3MCwgMCwgMTEzNjEsIDU0NDMsIDc4Nzc4LCA4MTUzLCAKLSAgICA3Mzc2NywgMCwgMTA3NDEsIDAsIDIyOTgsIDAsIDk4MzkwOCwgNjU0OTUsIDY0NzA2LCA5ODMzMTAsIDQzMzQ0LCA5ODMzMDgsIAotICAgIDcxNDQsIDk0NjYsIDc4ODY2LCA5ODI0LCA5ODMzMDMsIDk4MzMwMiwgMCwgMCwgOTE1LCA0MzQyNSwgMCwgMCwgMCwgMCwgCisgICAgNTMyLCA3ODY2MywgMCwgOTgzNzk2LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCisgICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MTcsIDY1NDk1LCA2NDcwNiwgOTgzMzE4LCA0MzM0NCwgOTgzMzE2LCAKKyAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzExLCA5ODMzMTAsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAogICAgIDEyNzE3OCwgNDMyNjQsIDcwMDk2LCAwLCAwLCA0MzAzOCwgNzg4NjQsIDY3MzAsIDc4ODYyLCA2ODE2MSwgNjQ1NTAsIAogICAgIDUxODYsIDczNjAsIDEyNzgzNywgMCwgMTIxMDgsIDAsIDY1MTI0LCA0MzEyNywgNjYwNDMsIDAsIDYzMjYsIDQzMTA3LCAKLSAgICA3NzgyNiwgMCwgNDI1NjIsIDAsIDEyODgyMSwgMCwgMTI4NTIwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCA5ODMyOTcsIAotICAgIDExNzE4LCA5ODMyOTUsIDEyODg5LCA5MjY1NywgMTI3MTM3LCAwLCAwLCAwLCA1NTI0NSwgMCwgMTYzMCwgMTI4MjMyLCAKKyAgICA3NzgyNiwgMCwgNDI1NjIsIDAsIDEyODgyMSwgMCwgMTI4NTIwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCA5ODMzMDUsIAorICAgIDExNzE4LCA5ODMzMDMsIDEyODg5LCA5MjY1NywgMTI3MTM3LCAwLCAwLCAwLCA1NTI0NSwgMCwgMTYzMCwgMTI4MjMyLCAKICAgICA2NTQ4MywgMCwgMTI1NjUsIDAsIDY1NDc2LCAxMjAwMTMsIDAsIDExOTU1NCwgOTI4MywgNzcwMCwgOTE3NTM3LCA5NjkwLCAKICAgICA2NTQ5OSwgMCwgNjQ1OTMsIDUxMiwgMzM3NiwgNjgyMTAsIDAsIDEyODY3NywgNzc4OTIsIDYzMiwgMTI5NDAsIDc3ODkxLCAKLSAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjkxLCA5ODMyOTAsIDEyODI3MywgMTA3NDUsIAorICAgIDQyNTI5LCA3ODU4NywgMCwgNTk1NywgMTEwNTkzLCA4OTI2LCA5ODMyOTksIDk4MzI5OCwgMTI4MjczLCAxMDc0NSwgCiAgICAgMTAxNzQsIDczNzksIDY0NTgxLCA1Mzg2LCAxMjA2ODYsIDExNzEzLCAxMDYzMywgNjk3MDgsIDUwNTYsIDAsIDAsIDAsIAogICAgIDEyMDc3MywgMCwgOTgxMiwgMCwgNDQ2MCwgMCwgMCwgNzEzMDcsIDEyODAzOCwgMCwgMCwgMTI3MTc0LCA2NDI3OCwgCiAgICAgOTIzNzAsIDQzNDY2LCAwLCAwLCA2NDM4OSwgMjk1MywgNzM4NzksIDE4MDEsIDEyODM1LCAxMTkwMjksIDAsIDczODIzLCAwLCAKLSAgICA2NjM3NSwgMjA4NSwgNzAyLCA0MjU3OSwgNzc4ODQsIDc3ODg1LCAxMzA3NCwgNzc4ODMsIDk4MzI3OCwgOTgzMjc3LCAKLSAgICAxMjg1NzAsIDEyMTA2LCA5ODMyNzQsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDc3ODk4LCAxMTYzLCAyOTUxLCAKKyAgICA2NjM3NSwgMjA4NSwgNzAyLCA0MjU3OSwgNzc4ODQsIDc3ODg1LCAxMzA3NCwgNzc4ODMsIDk4MzI4NiwgOTgzMjg1LCAKKyAgICAxMjg1NzAsIDEyMTA2LCA5ODMyODIsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDc3ODk4LCAxMTYzLCAyOTUxLCAKICAgICA5NTIyLCA3NDA3OSwgNzgyNjYsIDY2NjA0LCAwLCAzMzg0LCA2OTIyNywgMTA3MDIsIDgzMCwgNzc5MDIsIDc3ODk5LCAKICAgICA3NzkwMCwgODQ1MSwgMCwgMCwgMCwgNjk3MzksIDAsIDAsIDAsIDAsIDI5MDgsIDAsIDQzMzg2LCA2NDkwMiwgNDI0MywgMCwgCi0gICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDk4MzI3MSwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDk4MzI2NywgNDExLCA5ODMyNjUsIAotICAgIDkxOTksIDk4MzI2MywgNDA1NiwgMTE4OTkyLCA0MTg5MCwgMCwgMjczMCwgNDE2MDQsIDk4MzkyOCwgNTQyOCwgMTk0NzQzLCAKKyAgICAxMjIzOSwgMCwgMCwgNDQ0MSwgMCwgOTgzMjc5LCA3Mzk0MCwgNjQzNTIsIDEyNzUxMywgOTgzMjc1LCA0MTEsIDk4MzI3MywgCisgICAgOTE5OSwgOTgzMjcxLCA0MDU2LCAxMTg5OTIsIDQxODkwLCAwLCAyNzMwLCA0MTYwNCwgOTgzOTM3LCA1NDI4LCAxOTQ3NDMsIAogICAgIDMzNjQsIDQyMjY1LCA2NDQzNywgMTI3OTM1LCAxMTg4MTYsIDE5NDc0MiwgOTY4NCwgMjE2LCAwLCAxNDAxLCAxMjgwNTMsIAogICAgIDQ0MDEyLCAwLCAwLCA5MjU4NSwgOTE1OCwgNzc4NDIsIDY5OTA1LCA1NzY4LCAwLCAwLCAwLCA0ODQsIDE5NDczOSwgMCwgMCwgCi0gICAgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCA5ODMyNTUsIDkzOTYyLCAyNzk0LCAKKyAgICA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIDU3MiwgNzA0MSwgMjczNiwgNjc2MDUsIDk4MzI2MywgOTM5NjIsIDI3OTQsIAogICAgIDg4MDcsIDY0NDkxLCA3Nzg0NywgNTQzOCwgNTIyMiwgNTM4MSwgNDMxMTQsIDAsIDUxOTMsIDUxMjUsIDU0NTYsIDU1MDksIAogICAgIDc3ODQ2LCAxOTQ3NDcsIDk1MzQsIDAsIDAsIDAsIDM0MzAsIDAsIDAsIDc4NzE3LCAwLCA5ODEsIDAsIDQzMzAsIDczOTI5LCAKICAgICAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCA0MTY4MywgNjQ2MTcsIDAsIDczNzU0LCAzOTU3LCA2NDM1OCwgNjQ1NDcsIAotICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQzLCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCisgICAgMTI4MjU5LCA2NzQsIDYzOTkxLCA5ODMyNDksIDI5NDYsIDUzNTQsIDUyNTEsIDUzMjgsIDUzMDcsIDM3NTksIDExNDExLCAKICAgICA4MzY0LCA1MTIzLCAxMTk2MjgsIDUyODEsIDU0NjksIDUxMjEsIDExOTI0NSwgMTE4OTkzLCAwLCA1MTMwLCAwLCAwLCAKICAgICA3Nzk5MCwgMCwgMTIwNzI2LCAxMjIxLCAyNzMzLCAxMTc0NiwgNzc5OTEsIDUyMTYsIDAsIDAsIDAsIDAsIDM0NjgsIDcwMzMsIAogICAgIDkyMzAsIDU5MzksIDE5NTA1MiwgMCwgMCwgMTIwNjc3LCA2ODQwMCwgNzI3OCwgMTAzMjEsIDEwMjg5LCA2NDYxMywgCi0gICAgMTAzODUsIDQxNzA2LCAwLCAwLCA5ODM0MDUsIDAsIDExNzM5LCA5ODM0MTgsIDQxOTgxLCAwLCA1OTM4LCAwLCA0Mzc2NiwgCisgICAgMTAzODUsIDQxNzA2LCAwLCAwLCA5ODM0MTMsIDAsIDExNzM5LCA5ODM0MjYsIDQxOTgxLCAwLCA1OTM4LCAwLCA0Mzc2NiwgCiAgICAgMTI0NDgsIDc1NzYsIDEwNDAxLCAxMDMzNywgNzM4NTIsIDAsIDEzMDU3LCAwLCAxMjY5NzYsIDAsIDEwMDA5LCAwLCAKLSAgICA0MTcwMywgOTgzNjI5LCAxMjE2NSwgMCwgMCwgOTg4NSwgMCwgODA3NywgMCwgMTI3OTA4LCAwLCAwLCAwLCA5MjQ1NywgMCwgCisgICAgNDE3MDMsIDk4MzYzOCwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAogICAgIDQyMjAsIDEwNzI1LCAxMDQzMywgMCwgNjgzOTUsIDQ5ODcsIDY0NTE5LCAwLCAxMjgzNDAsIDAsIDAsIDAsIDEwOTcwLCAKICAgICAxMTczMywgMCwgMTIwNzkyLCAwLCAxOTk0NCwgMCwgOTAwOSwgODU1MSwgOTIzNDUsIDExNDY4LCA2NDYzNiwgNzU3NSwgMCwgCiAgICAgMjcyNCwgMCwgMCwgMTIzMTMsIDExMDU5MiwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgNzgyODYsIDExOTk0MywgCkBAIC0xOTQwNiw3MyArMTk0MjYsNzMgQEAKICAgICAwLCA0NDc3LCAxMTg5NjQsIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNDM3ODYsIDExOTk2MSwgNjYxOTgsIDQxODgwLCAKICAgICA2NjE4OCwgMTE2MjMsIDc4MTQ4LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgNjYxODksIDczNzg4LCA3Nzg4LCAKICAgICA0ODQ3LCAwLCAxMjc3NTksIDAsIDAsIDAsIDE1ODEsIDY1MzUsIDc4MTYxLCAxMjk1NCwgNDMwLCA3ODE2MCwgNTUyNTksIAotICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzAsIDY4NjI1LCA5ODM0MjgsIDcyNjksIDAsIAotICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyMSwgNDQzLCAKLSAgICA5ODM0MTksIDQ5NDQsIDU0NjcsIDExOTYwMywgMCwgNjUxMzcsIDYwNDQsIDY1MzkyLCAwLCA0MjEzLCAwLCA0MTMwMywgMCwgCi0gICAgMTk0OTMxLCAxMTk5NjIsIDQxMzA2LCA3Mzk4NCwgMjY5OCwgMTI3MTU5LCAwLCAxMjA3MiwgMzE5MywgMCwgNDEzMDQsIAotICAgIDgyNCwgMTI4Njc2LCAxMjA5MSwgNzg4OTMsIDc4ODk0LCAxMTk4MTYsIDQ2NzMsIDY0ODA0LCA0Njc4LCAxMTk4MjAsIAotICAgIDExOTgxOSwgNjUwNTksIDAsIDY3MzksIDAsIDU0ODEsIDM0OTAsIDExOTksIDExOTgxMSwgODM1NiwgNjk5NDcsIDExOTgzMiwgCi0gICAgNDY3NywgMTI2ODgsIDMxMDIsIDAsIDQ2NzIsIDc4MTczLCA3ODE3NSwgNTUzMSwgNjgzNjcsIDQyNTc1LCA3ODE3MCwgCi0gICAgNzgxNjYsIDQ2NzQsIDQ1NDgsIDQ0MDA1LCAxMTk5NDksIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAxMjcwMjQsIAotICAgIDE4NTUsIDk4MzQwNCwgNjg2NjksIDk4MzQwMiwgOTI0NDUsIDEyNzU1NCwgMCwgMTI3MzM5LCAxMTk2NTIsIDI3NDUsIAotICAgIDExNzk3LCA5ODM0MTAsIDEyODE1OSwgOTIwMiwgNDY1NCwgOTgzNDA2LCA5ODM0MDgsIDY4NjM4LCA3Mzk5MywgMTA1MjUsIAotICAgIDQ2NDksIDY1MjA5LCA5ODM0MDksIDAsIDQ2NDgsIDQzMDgwLCA5ODMzOTgsIDk4MzM5OSwgOTgzMzk2LCA2MjQ2LCA2NDk1MCwgCi0gICAgNzgyOCwgNDY1MCwgNjc3NywgNjc3NiwgNjc3NSwgNDY1MywgNzgyMiwgNzgwMDUsIDkyMzg0LCA0MzE4NywgODY2OSwgCi0gICAgOTgzNDA3LCA2ODIxLCA2NTA5MywgMCwgNzg4ODEsIDI3MTYsIDAsIDk4MzA2MCwgOTgzNDExLCAwLCA2ODM2OSwgMTIwMDU0LCAKLSAgICAxMTA2MCwgODU0NywgMjcxMSwgNDIxNjUsIDc4MDI3LCA3ODAyNiwgNzk5MiwgMCwgMCwgNDY2MiwgNzgwMzMsIDc4MDMyLCAKLSAgICA5MTQ5LCA5MTQ2LCA1OTksIDIwODEsIDc4MDMxLCA3ODAzMCwgMTk0OTYyLCA0NjU2LCAxMDEzMCwgNjg0NTAsIDc4MTEsIAotICAgIDQwOTk0LCAxOTQ5NjUsIDY0MTQsIDU5NjcsIDQ2NTgsIDM3MjUsIDU3MTMsIDU4MTQsIDQ2NjEsIDQyNDM0LCA5ODM0MDMsIAotICAgIDAsIDAsIDY0OTA0LCA5MDI2LCAxMDgzMywgNzQ4NjQsIDc1NDcsIDQ4NjcsIDAsIDEwMDA4LCAxMDIyMiwgMzA1NCwgCi0gICAgMTk0OTU2LCA5NzQ0LCA3ODg2MCwgNzYwNSwgNDYyMiwgMTE5NjU2LCA5ODMzODcsIDk0MDcwLCA5ODMzODUsIDk4MzM4NiwgCi0gICAgOTgzMzgzLCA5MDQ1LCA3ODg4OCwgNDIyNSwgMTk5MjYsIDc4ODg3LCAxMjg4MCwgNjUzMDcsIDQ2MTcsIDc4ODgzLCAKLSAgICA5ODMzNzgsIDQxNzMyLCA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCA5ODMzNzIsIDU5NTgsIDAsIDk4MzQyNSwgNDIxNSwgCi0gICAgOTc4OSwgOTE3OTQxLCA0MzIxLCA0NjIxLCA5ODMzODEsIDQxMzEzLCA1MjIsIDUzNjgsIDAsIDY1ODAzLCAwLCA1MzY2LCAKLSAgICAxMjIwMSwgNTM3MiwgMCwgOTgzNDAxLCAwLCA3NzIwLCA3MzkwLCAyNjk2LCA5ODMzOTIsIDAsIDQ2MzgsIDk4MzM5NywgCi0gICAgMTc5MCwgNzgyNDIsIDU5NjUsIDY0MzYzLCA2NjU2OSwgNjg2NDYsIDEyNzgzMywgNTM3NiwgMTgzNSwgNTMzNSwgMTk0OTY2LCAKLSAgICAxMjgwODksIDQ2MzMsIDAsIDY4MTE5LCAxMTgwLCA0NjMyLCAxMjgwOTMsIDUzODcsIDUzMzMsIDAsIDAsIDQyMDk0LCAKLSAgICA1MzMxLCA0NjM0LCAxMTkyOCwgOTgzNTk0LCA1MzM4LCA0NjM3LCAxMjgxNzAsIDU5NzEsIDQyNDE0LCAwLCAxMjY4LCAKLSAgICA2NTA5NywgNDIzNjEsIDAsIDAsIDczODUzLCAxNDI3LCAwLCAwLCA1OTcwLCAzNDMxLCAwLCAxMDM1OCwgMTA0MjIsIDQ3NTgsIAotICAgIDk4MzM2NiwgMTYwOCwgMjczOCwgMCwgMTA0NTUsIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgCi0gICAgNzQzODQsIDk4MzM3MCwgNjgzNzcsIDYyNDgsIDk4MzM1NCwgOTgzMzU1LCA5ODMzNTIsIDQyMzE4LCA5MjU4MiwgNTIyOSwgCisgICAgNzgxNTgsIDEyODAzNiwgNTI3OCwgNDk0NSwgNDI4ODMsIDQ5NTAsIDk4MzQzOCwgNjg2MjUsIDk4MzQzNiwgNzI2OSwgMCwgCisgICAgNTk2NCwgMTI5MDgsIDk4MzU1NSwgMCwgNzQ3NjQsIDc0NDc3LCAxMTkxNDYsIDE5NDkzNiwgNDk0OSwgOTgzNDI5LCA0NDMsIAorICAgIDk4MzQyNywgNDk0NCwgNTQ2NywgMTE5NjAzLCA5ODMyNTQsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgCisgICAgNDEzMDMsIDAsIDE5NDkzMSwgMTE5OTYyLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDEyNzE1OSwgMCwgMTIwNzIsIDMxOTMsIDAsIAorICAgIDQxMzA0LCA4MjQsIDEyODY3NiwgMTIwOTEsIDc4ODkzLCA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgCisgICAgMTE5ODIwLCAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDY5OTQ3LCAKKyAgICAxMTk4MzIsIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgCisgICAgNzgxNzAsIDc4MTY2LCA0Njc0LCA0NTQ4LCA0NDAwNSwgMTE5OTQ5LCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgCisgICAgMTI3MDI0LCAxODU1LCA5ODM0MTIsIDY4NjY5LCA5ODM0MTAsIDkyNDQ1LCAxMjc1NTQsIDAsIDEyNzMzOSwgMTE5NjUyLCAKKyAgICAyNzQ1LCAxMTc5NywgOTgzNDE4LCAxMjgxNTksIDkyMDIsIDQ2NTQsIDk4MzQxNCwgOTgzNDE2LCA2ODYzOCwgNzM5OTMsIAorICAgIDEwNTI1LCA0NjQ5LCA2NTIwOSwgOTgzNDE3LCAwLCA0NjQ4LCA0MzA4MCwgOTgzNDA2LCA5ODM0MDcsIDk4MzQwNCwgNjI0NiwgCisgICAgNjQ5NTAsIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgNDMxODcsIAorICAgIDg2NjksIDk4MzQxNSwgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAyNzE2LCAwLCA5ODMwNjAsIDk4MzQxOSwgMCwgNjgzNjksIAorICAgIDEyMDA1NCwgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCAKKyAgICA3ODAzMiwgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCAKKyAgICA3ODExLCA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgCisgICAgOTgzNDExLCAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDc0ODY0LCA3NTQ3LCA0ODY3LCAwLCAxMDAwOCwgMTAyMjIsIAorICAgIDMwNTQsIDE5NDk1NiwgOTc0NCwgNzg4NjAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgOTgzMzk1LCA5NDA3MCwgOTgzMzkzLCAKKyAgICA5ODMzOTQsIDk4MzM5MSwgOTA0NSwgNzg4ODgsIDQyMjUsIDE5OTI2LCA3ODg4NywgMTI4ODAsIDY1MzA3LCA0NjE3LCAKKyAgICA3ODg4MywgOTgzMzg2LCA0MTczMiwgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgOTgzMzgwLCA1OTU4LCAwLCA5ODM0MzMsIAorICAgIDQyMTUsIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgOTgzMzg5LCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgCisgICAgNTM2NiwgMTIyMDEsIDUzNzIsIDAsIDk4MzQwOSwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzNDAwLCAwLCA0NjM4LCAKKyAgICA5ODM0MDUsIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxMjc4MzMsIDUzNzYsIDE4MzUsIDUzMzUsIAorICAgIDE5NDk2NiwgMTI4MDg5LCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMTI4MDkzLCA1Mzg3LCA1MzMzLCAwLCAwLCAKKyAgICA0MjA5NCwgNTMzMSwgNDYzNCwgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgCisgICAgMTI2OCwgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCAKKyAgICA0NzU4LCA5ODMzNzQsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIAorICAgIDc0Mzg0LCA5ODMzNzgsIDY4Mzc3LCA2MjQ4LCA5ODMzNjIsIDk4MzM2MywgOTgzMzYwLCA0MjMxOCwgOTI1ODIsIDUyMjksIAogICAgIDQ3NTcsIDAsIDAsIDI3MjgsIDQ3NTIsIDY0NTYzLCA2NTIzNSwgNTIzNCwgMCwgMTI4MTQ1LCAwLCAxMDcxMywgNzE2NiwgMCwgCiAgICAgMjYyMiwgNzQ2MCwgMTI3MzAyLCAwLCAwLCA4OTU0LCA3NDc2MCwgNjUxODksIDI2MzIsIDQyNjE3LCAxMDEwOCwgMTAxMSwgCiAgICAgNTU3NCwgMTg1MywgMjcwOSwgNjUxMzksIDU1NzcsIDAsIDAsIDExODg3MSwgNjg2NDEsIDg5NjUsIDc2MzUsIDQyMTc3LCAKLSAgICA1MzE2LCAwLCA1MzE0LCA2NDUxLCA1NTcyLCA2NjQ2NCwgNTMxMiwgMCwgNTUyNSwgNTMzMCwgNTMxOSwgOTgzNDEyLCAKLSAgICA5ODM4NjMsIDE5NDkwNywgNDQwMDMsIDAsIDk4MzQ3MiwgOTgzNDE1LCAxMjA0OTgsIDEyNzg1MSwgMTk1MDA5LCA5ODM4NTYsIAotICAgIDc0MDIyLCA5ODM0MTQsIDY0NjA5LCA2ODY0MywgMTIwNjM0LCA5ODM0ODEsIDU3MjEsIDk4MzM5MywgNTUxOSwgODYzMiwgCi0gICAgNjY0NjUsIDExMjY3LCA3Mzk2MSwgOTIyNzgsIDU3MjAsIDk4MzM0NCwgMTY5MiwgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgCi0gICAgMCwgNDYwOSwgNDM0NzgsIDQ2MTQsIDU0MSwgOTgzMzQ3LCA1Mjg3LCA1MzA5LCA1Mjg1LCA2ODM4OSwgNTk2MSwgNDY0NywgCi0gICAgNTYsIDQyMTYsIDEwNTc3LCA0MTM4MSwgNjAxLCA0NjEzLCA5ODMzNDEsIDk4MzMzOCwgNzc4NDksIDQ2MDgsIDY0MjYwLCAKKyAgICA1MzE2LCAwLCA1MzE0LCA2NDUxLCA1NTcyLCA2NjQ2NCwgNTMxMiwgMCwgNTUyNSwgNTMzMCwgNTMxOSwgOTgzNDIwLCAKKyAgICA5ODM4NzIsIDE5NDkwNywgNDQwMDMsIDAsIDk4MzQ4MCwgOTgzNDIzLCAxMjA0OTgsIDEyNzg1MSwgMTk1MDA5LCA5ODM4NjUsIAorICAgIDc0MDIyLCA5ODM0MjIsIDY0NjA5LCA2ODY0MywgMTIwNjM0LCA5ODM0ODksIDU3MjEsIDk4MzQwMSwgNTUxOSwgODYzMiwgCisgICAgNjY0NjUsIDExMjY3LCA3Mzk2MSwgOTIyNzgsIDU3MjAsIDk4MzM1MiwgMTY5MiwgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgCisgICAgMCwgNDYwOSwgNDM0NzgsIDQ2MTQsIDU0MSwgOTgzMzU1LCA1Mjg3LCA1MzA5LCA1Mjg1LCA2ODM4OSwgNTk2MSwgNDY0NywgCisgICAgNTYsIDQyMTYsIDEwNTc3LCA0MTM4MSwgNjAxLCA0NjEzLCA5ODMzNDksIDk4MzM0NiwgNzc4NDksIDQ2MDgsIDY0MjYwLCAKICAgICA0MTEyNCwgNTE5MCwgNjc2MjgsIDAsIDY4MTQ1LCA3MDg2LCAwLCA2Nzk5OCwgNjc2MjAsIDAsIDI3MzQsIDExMDc0LCAwLCAKICAgICA2NzYyNywgNDM1OTMsIDAsIDY3NjI1LCA1OTYwLCAwLCA4OTkyLCA0MjU5MywgMTI4MjYwLCAxNzgyLCA2NzYyMiwgNjgxMTQsIAogICAgIDExOTkzOSwgMCwgNjgxODAsIDU1MDEsIDExOTk1MiwgNDI1MDgsIDc0NDIsIDQzNjY1LCAzNTksIDQxMjUzLCA2ODM5MiwgCiAgICAgNjIzOSwgMTE5OTU2LCA0MTI1NiwgMCwgNjgxMzQsIDAsIDc0MjA5LCA5MTc1NTAsIDkzNDYsIDY5NjYwLCA0MTI1NCwgCiAgICAgMTI4MDQ3LCA0MzI5MSwgMzc2NywgNTczNywgMCwgNDg2NSwgMCwgNTc0MCwgOTE3OTk3LCA1NzM2LCA0MzY4LCA2NDcyNCwgCi0gICAgNzE5MywgNjgxMzcsIDAsIDU3MzksIDQxMDI0LCA0ODY2LCAwLCA3MzkwNCwgOTgzODMxLCA0ODY5LCAxMjA1NjMsIDAsIAotICAgIDQyMjMsIDEyODIwMSwgNjY1MCwgMTI2NTA5LCAwLCA5ODM0NTUsIDEyNzg5MCwgNDg3MCwgMTIwNDQ1LCA2ODY2MSwgNjcxNiwgCisgICAgNzE5MywgNjgxMzcsIDAsIDU3MzksIDQxMDI0LCA0ODY2LCAwLCA3MzkwNCwgOTgzODQwLCA0ODY5LCAxMjA1NjMsIDAsIAorICAgIDQyMjMsIDEyODIwMSwgNjY1MCwgMTI2NTA5LCAwLCA5ODM0NjMsIDEyNzg5MCwgNDg3MCwgMTIwNDQ1LCA2ODY2MSwgNjcxNiwgCiAgICAgNzgxNzYsIDY4NjY3LCA2ODM4MiwgNjg2NzYsIDEyNzkyNSwgMTAxMjIsIDQ4NjQsIDY2NTY4LCA0MTQ0LCA3OTM3LCAwLCAKICAgICA2MjQ1LCA2ODY1MiwgMjczMiwgNDI3MzQsIDc0NSwgMCwgMTk1MDk3LCA5MjE5NSwgNDc3NywgNzgyMSwgMCwgNjg2MzEsIAotICAgIDQyNzc1LCAwLCAxOTQ5NTQsIDAsIDMwOTcsIDAsIDU5NjYsIDk4MzQ3OCwgNDc3OCwgMCwgMTA4NjMsIDAsIDQ3ODEsIDAsIAorICAgIDQyNzc1LCAwLCAxOTQ5NTQsIDAsIDMwOTcsIDAsIDU5NjYsIDk4MzQ4NiwgNDc3OCwgMCwgMTA4NjMsIDAsIDQ3ODEsIDAsIAogICAgIDY0NDA3LCAwLCAxMjgzMjMsIDg1NzcsIDEyODU2MiwgNjgxOTYsIDQzMjg1LCAxMDIxNiwgNDc4MiwgMCwgMCwgMTIwNzU3LCAKICAgICA2ODYxOCwgMTIzMjUsIDQzMDU2LCA4NzE3LCAwLCAwLCA0Nzc2LCA3MzgxOCwgMTE0OTIsIDg3MDAsIDAsIDEzMTc2LCAKICAgICA2ODM2MywgMTA0MjYsIDAsIDkxNzU5OSwgMTAzNjIsIDE5NDcwNiwgMTcxNSwgNDg0OSwgODI0MiwgOTU2MSwgNzM5MjIsIAogICAgIDQzMjc4LCA0MjYzNSwgMCwgMCwgNTk2MywgOTE3OTI2LCAwLCAwLCA0ODUwLCAwLCAxNjA3LCA0NjYsIDQ4NTMsIDExODk5NSwgCi0gICAgNDg1NCwgMTI3OTE4LCA1MTY0LCA5ODM4NjEsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAKKyAgICA0ODU0LCAxMjc5MTgsIDUxNjQsIDk4Mzg3MCwgMTM1MCwgNTEyNCwgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIDI3MDgsIAogICAgIDkyNDcxLCAxMjQ0NSwgMzc4NSwgMjM0LCAzMTk5LCAwLCA0MTI2OCwgNDg0OCwgMjUzMCwgOTE3OTA5LCAyMDY4LCAxOTY0LCAKICAgICAwLCA3Mzc2MiwgMTA0NTgsIDAsIDg1NzYsIDc4NTQzLCAwLCAyNzA0LCA0Nzk0LCAwLCA2ODIxMSwgODMyMiwgNDc5NywgCi0gICAgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCA5ODM0MTYsIDMwMywgOTgzMTAxLCA5MjYyMiwgCi0gICAgOTgzNDE3LCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCA5MjIxNiwgMCwgMCwgMCwgNzAwNDIsIDAsIDQzMjkyLCAwLCAyNDQxLCAKKyAgICA1NzUzLCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCA2NTEwNCwgNjk4MDQsIDk4MzQyNCwgMzAzLCA5ODMxMDEsIDkyNjIyLCAKKyAgICA5ODM0MjUsIDI0MzcsIDAsIDQyMjEsIDQ4NDQsIDkyMjE2LCAwLCAwLCAwLCA3MDA0MiwgMCwgNDMyOTIsIDAsIDI0NDEsIAogICAgIDEwNzM5LCA2NTA5MCwgMCwgMTE5MzI3LCAxMjY1NDEsIDI0NTEsIDI3MTQsIDExOTMyNiwgMCwgNDMzNzksIDQ5MzcsIAogICAgIDQzMzc2LCA3NTMsIDU4NDksIDEwNTk3LCA0MzA4OSwgMTE3MjIsIDkyNDgsIDkyNTU1LCA0Mjg3OSwgMTE3MjUsIDAsIDAsIAogICAgIDI3MjYsIDMxMDcsIDczOTU4LCA0OTQxLCA2NDkzNywgMTE5MjMzLCA5MTQwLCAxNDA4LCA1MjYxLCA0NjA3LCAwLCAxODEsIAotICAgIDk4MzQyMiwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAKKyAgICA5ODM0MzAsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgCiAgICAgOTgzNjAxLCAwLCA0OTY0LCA1MjY0LCA2NDE3OCwgNjQxNzcsIDEyOTc5LCA0MTQxMSwgNjQxODIsIDY0MTgxLCA2NDE4MCwgCiAgICAgNjQxNzksIDk0ODIsIDQ4NzMsIDQxMjMxLCAxODIyLCA0MjUyNiwgMTI4NTgxLCAxMjc1OCwgMzg2NSwgMCwgMCwgMTA1MDAsIAogICAgIDAsIDExOTAyNCwgNzgwMjgsIDkyNDA4LCA5ODMwLCA0MzY0MiwgMzg5LCAxMDg5MywgNzUyMSwgMTI3ODc5LCA0ODcyLCAKICAgICA1NDYzLCAwLCAzMTI1LCA5NTY3LCAwLCA0ODc4LCA1NDU5LCA0NjA0LCA5MTc5MzEsIDk1NTcsIDU0NjUsIDY4NjE3LCAwLCAKLSAgICAxMTQ5NCwgMTI2NDkyLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgOTgzNDMxLCA3ODcxNCwgNjQxOTEsIAorICAgIDExNDk0LCAxMjY0OTIsIDk1NjMsIDEwODY1LCA3NDU3MCwgNDMyNzksIDY0MTg2LCA5ODM0MzksIDc4NzE0LCA2NDE5MSwgCiAgICAgNjQxOTAsIDg4OTgsIDY0MTg4LCAwLCA0MTAzMCwgNzg4MzYsIDAsIDkxNzgzNSwgNzg4MjAsIDkxNzgzNCwgMCwgNzg4MDUsIAotICAgIDQxMDMxLCA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDk4MzQyOSwgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIAorICAgIDQxMDMxLCA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDk4MzQzNywgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIAogICAgIDcwNzksIDU4NTYsIDEyNzA0MywgNTE2MywgNzg4MDksIDEyODE2MiwgMTgxNywgNjY3MjQsIDc4NTM4LCAwLCAxMDU2NCwgCiAgICAgNzc2MywgMTMwNzcsIDQxODEzLCA0NDAwLCA0MTc0NSwgNjQyMDcsIDEwMjc1LCA4OTI1LCAxMDM3MSwgMTAzMDcsIDQxODE0LCAKICAgICA0MjQ4LCAwLCAwLCA0NTQxLCA2Mjk5LCA2NDIwNCwgNjQyMDMsIDY0MjAxLCA2NDIwMCwgNjQxOTksIDY0MTk4LCAxMjY0NzEsIApAQCAtMTk0ODUsMzMgKzE5NTA1LDMzIEBACiAgICAgNjUyMjIsIDY5OTgsIDc4MTgwLCAwLCAzMTI4LCA0Nzg5LCA1MDY3LCA1MDY2LCAxMTg4NDksIDQ3ODQsIDAsIDg4MjcsIAogICAgIDExNDYsIDUwNjUsIDY5ODkwLCA3ODE5MiwgNjgxMzYsIDc4MTkwLCA0MzQxMiwgNTA2NCwgMjQzMSwgMCwgOTQ1MCwgMTgwOSwgCiAgICAgMCwgNzgyMDAsIDc4MjAxLCA1MDYyLCAxMjY0LCA2NDgxNywgMTMyNTQsIDExNjk3LCAxMjY1OTgsIDk3ODUsIDY0NzE2LCAwLCAKLSAgICAzOTMzLCA3NDU1OSwgNDc0MCwgNzk1NCwgMCwgMCwgNDI2MDksIDAsIDc0MTc1LCAwLCAxMjcwMTYsIDAsIDk4Mzg2NCwgCisgICAgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCA5ODM4NzMsIAogICAgIDQyMTMwLCAwLCA1MTUxLCA5MTc4MjksIDkxNzgyMywgMCwgOTM5ODAsIDAsIDc2MjAsIDM4MDAsIDY1MTIyLCAwLCAwLCAKICAgICA4MzU1LCA3ODU0LCAwLCA5NTQsIDY0OTI3LCA0MTg1LCA0MTA0NSwgMTI3MTQxLCA0MTQzOCwgNDE0MzksIDY4NjY2LCAKLSAgICAxMDcxMSwgNDU5MywgMTI3NzQ1LCAxMjA1ODQsIDk4MzQwMCwgNjQ3NzQsIDgwNTMsIDEwNTMyLCA2NjcyNywgMCwgMCwgMCwgCisgICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDgsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAogICAgIDY0NzU5LCA2MzgxLCA1MTY2LCA5ODg4LCAxMjc4MDAsIDUxNDgsIDQyODM0LCAwLCA3ODIwNSwgNzgyMDYsIDQzNzg3LCAKICAgICA3ODIwNCwgNjQxMzEsIDMxMTksIDkxNzgxNCwgMCwgMzA2MCwgNjQxMzUsIDk5ODYsIDAsIDc3ODc2LCA2MzYsIDExNjk4LCAKLSAgICAwLCA5ODM0NDMsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCi0gICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzM5NCwgOTkwOCwgOTgzOTcyLCAwLCAwLCAzOTM3LCAKLSAgICAxMjMxMiwgMCwgOTgzMzk1LCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCi0gICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ2OCwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAorICAgIDAsIDk4MzQ1MSwgOTkxNiwgMTE3MDEsIDc4MzYsIDQyNzQxLCA2NDEzNywgODMyMCwgNzg2NDAsIDg4NjMsIDkyNDMxLCAKKyAgICAxMTk5NjAsIDE0NzcsIDQzMjg5LCAwLCA3NDM1OCwgODYxOCwgOTgzNDAyLCA5OTA4LCA5ODM5ODEsIDAsIDAsIDM5MzcsIAorICAgIDEyMzEyLCAwLCA5ODM0MDMsIDAsIDY0NzgxLCA5MTIsIDYzNDksIDQ1MzYsIDkzOTU0LCA3NDUzMiwgMTI2NTk0LCA2MjQ0LCAKKyAgICA5MjIwOSwgNzEzNDEsIDM5MzUsIDEyMDY2NSwgOTgzNDc2LCAwLCAxMTk1MCwgNTM5MiwgNDIyNDgsIDY1MTI5LCA2ODY1NiwgCiAgICAgNTM5NywgMCwgMTIwNDYsIDEyNTk5LCAwLCAxMjgyNjEsIDUzOTUsIDAsIDUzOTMsIDM1NCwgNjg2MTUsIDExOTk0OCwgCiAgICAgNzg1MDMsIDAsIDAsIDQyMDM5LCAwLCAwLCA2NDE0MiwgNjI2LCAwLCA1ODk1LCAwLCAwLCA1NzgwLCAwLCAwLCAxMjg4NzQsIAogICAgIDAsIDAsIDQzMjk3LCA5ODMwNzksIDQzMTEsIDQ2NDQsIDg4MTgsIDAsIDEyODE4NiwgMCwgNzE0NSwgMzkxOCwgNjY0NTIsIAogICAgIDM3OTcsIDE2NDQsIDkyMzQ2LCA5NjU4LCA0MTQwLCAxMTM4NSwgNjU5NDcsIDY0NTUsIDkwMzAsIDgxMywgMTE5OTQ1LCAKICAgICA2ODEzMSwgNDE0NiwgMTE5OTU3LCA1MzYwLCAyNDY2LCAwLCA2NzY2OSwgMTE5OTQyLCA2MjQ5LCA0MjExNywgOTIyODcsIAotICAgIDEyODIyNCwgMCwgMCwgNzQwNDYsIDQzNzQ1LCA0OTExLCA5ODgsIDkxNzgwNywgMCwgOTgzNDYwLCA0MzA2MSwgNzA1NCwgCisgICAgMTI4MjI0LCAwLCAwLCA3NDA0NiwgNDM3NDUsIDQ5MTEsIDk4OCwgOTE3ODA3LCAwLCA5ODM0NjgsIDQzMDYxLCA3MDU0LCAKICAgICA2NDE0NywgMCwgNjQ5MjAsIDY4MTk1LCA2Njk4LCAxMTg5MzMsIDkyNTA2LCAwLCAxMjAwMDYsIDExOTgxLCAxMjIwMiwgMCwgCiAgICAgMTEwMzIsIDY3NjU0LCA2MDkzLCAxMTYwOCwgOTc1LCA2ODY2MiwgNjU4NDMsIDE3MCwgMCwgMCwgNDE2OSwgMCwgNDE4NTksIAogICAgIDYwNTgsIDEyMDQwMSwgMTMyMDMsIDEyMDY1NywgMCwgMCwgNjg2NTcsIDk4MTgsIDEwMTc4LCAxMDMyNCwgNDIxMDYsIAogICAgIDU4OTgsIDc0NTQwLCA0NzM4LCA0MTg1NiwgNzA2MiwgOTE3ODY1LCA0NzM3LCAxMTc3OSwgNDc0MiwgMTIwNTY0LCA5MjM5MSwgCi0gICAgNzM3MzYsIDk4MzM1NiwgOTgyNSwgNjQ0OCwgNjcxNSwgMTI3MDA4LCA0ODMxLCAwLCA5MjUyNSwgMCwgNTMwMCwgNDc0MSwgCi0gICAgNDIxMDgsIDk4MzM0NiwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDkyMTkxLCA3ODQ5MSwgNDMyODgsIDAsIDY2NjIwLCAKLSAgICA5MTc5MTYsIDEyNzMzMSwgNjU1NDksIDk0OTYsIDY0NTk4LCAxMTg4NjYsIDk4MzM1OCwgNzg3NiwgNjgxMzIsIDkxNzg3MiwgCisgICAgNzM3MzYsIDk4MzM2NCwgOTgyNSwgNjQ0OCwgNjcxNSwgMTI3MDA4LCA0ODMxLCAwLCA5MjUyNSwgMCwgNTMwMCwgNDc0MSwgCisgICAgNDIxMDgsIDk4MzM1NCwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDkyMTkxLCA3ODQ5MSwgNDMyODgsIDAsIDY2NjIwLCAKKyAgICA5MTc5MTYsIDEyNzMzMSwgNjU1NDksIDk0OTYsIDY0NTk4LCAxMTg4NjYsIDk4MzM2NiwgNzg3NiwgNjgxMzIsIDkxNzg3MiwgCiAgICAgMzkyOCwgOTE3ODcwLCA0MzM3OCwgMTA3MDYsIDcxOTgsIDAsIDQ4NDIsIDEyMDUzLCAxMjgxMjksIDAsIDQ4NDEsIDAsIAogICAgIDQxNzEsIDEyMDA4LCA2MjUxLCAzOTIzLCAxNDkwLCAwLCAxMTk1OTEsIDEyNjUxMiwgNDA5NzIsIDUyNDUsIDAsIDEwMTE0LCAKICAgICA0MjAwMSwgNDE4ODgsIDQ4NDUsIDgzMzIsIDQwOTc0LCA2NDM0NywgNDg0MCwgOTA3NywgNzgzNDYsIDE3NDcsIDkxNzg0OSwgCi0gICAgNDgyNSwgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDk4MzM4MCwgMCwgMCwgNjg2MjgsIDk4MzMzOSwgOTg1MCwgMTE4OTM3LCAKKyAgICA0ODI1LCA2OTI0MCwgOTE3ODUyLCA2ODY1NSwgMCwgOTgzMzg4LCAwLCAwLCA2ODYyOCwgOTgzMzQ3LCA5ODUwLCAxMTg5MzcsIAogICAgIDM2NywgMTQ3MiwgOTE3ODU5LCA2Njg3LCAxMjc0LCAwLCA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgCiAgICAgMTEwMjMsIDExOTU1OSwgNDgzMCwgOTEzNCwgNzg2NjYsIDY0MTI2LCA0MzAxMSwgMCwgMTI2NjI2LCA2NDEwMSwgMCwgMCwgCiAgICAgNDgyNCwgMTA2MTQsIDExOTY1OSwgMCwgMTg4OCwgMTk2MCwgNzg2MSwgOTE3ODU2LCA3ODUyNCwgNDE4MzYsIDQzMDEyLCAKQEAgLTE5NTIwLDEyICsxOTU0MCwxMiBAQAogICAgIDY0MTE4LCAxMjY5OTgsIDEyOTYyLCAwLCAxMjY1ODAsIDQwMTcsIDEyODI3LCA1MjQxLCAxMjAzOTIsIDAsIDQxMTE4LCAKICAgICAzOTI0LCAwLCAxMTM2NiwgOTE3ODQzLCAwLCAwLCA5MTc4NDYsIDQxMTE2LCA5MTc4NDQsIDkxNzU2NCwgMCwgMTEzNjMsIAogICAgIDEyMDU3LCAxMTkxNywgMTU2NywgNzQwMDAsIDQ3MjEsIDEyNjY0MSwgNjYyMDIsIDg5NTcsIDQxMzksIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNzQwLCAxMjg3MDIsIDQ3MjIsIDY4MTYsIDEyNzc5MywgMTI3NTksIDQ3MjUsIDk4MzM3NSwgNDcyNiwgMCwgCi0gICAgMTk0ODkyLCAwLCAxMjgzMjEsIDkxNzkwNSwgMCwgMTI3NTUsIDEyNzYyLCA0MDE1LCAwLCA4MDUyLCA0NzYsIDAsIDAsIAotICAgIDEyODI5NCwgNjQyMTIsIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDQ0MDAyLCA2NDIxNCwgMTY1NiwgNDE4MzEsIDAsIAotICAgIDAsIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDEyNzMyOCwgODU1MiwgNjQxMTMsIDQxODQ1LCAKLSAgICAzODQ5LCA3ODczMiwgNjYyMzIsIDk3NzgsIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDk5NDgsIDExOTA4NSwgMCwgMCwgCi0gICAgNzkzNSwgMjQyMCwgMCwgMTExNCwgOTI1OTksIDY3NTg1LCA3MDEwNCwgMTIwMDUzLCA5MjM1MCwgMTIwMDUxLCAzOTM4LCAKKyAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzODMsIDQ3MjYsIDAsIAorICAgIDE5NDg5MiwgOTgzNjIyLCAxMjgzMjEsIDkxNzkwNSwgMCwgMTI3NTUsIDEyNzYyLCA0MDE1LCAwLCA4MDUyLCA0NzYsIDAsIAorICAgIDAsIDEyODI5NCwgNjQyMTIsIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDQ0MDAyLCA2NDIxNCwgMTY1NiwgNDE4MzEsIAorICAgIDAsIDAsIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDEyNzMyOCwgODU1MiwgNjQxMTMsIAorICAgIDQxODQ1LCAzODQ5LCA3ODczMiwgNjYyMzIsIDk3NzgsIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDk5NDgsIDExOTA4NSwgMCwgCisgICAgMCwgNzkzNSwgMjQyMCwgMCwgMTExNCwgOTI1OTksIDY3NTg1LCA3MDEwNCwgMTIwMDUzLCA5MjM1MCwgMTIwMDUxLCAzOTM4LCAKICAgICAxMjAwNTcsIDY1NDE3LCA2NDcxNywgMTIwMDYwLCAxMjAwNjEsIDY1NDE1LCAxMjAwNTksIDYyOTIsIDY1MzAzLCA3OTU1LCAKICAgICA2NDUyLCA0NzEzLCAxMjgxOTYsIDY2MjQ5LCA5MTc4ODUsIDkxNzg5MCwgOTE3ODkxLCA2NTE1MiwgNzE5LCAxMjAwNDQsIAogICAgIDc4NjIzLCAxMjAwNDIsIDY3MTMsIDQ1MzIsIDY1NDEyLCA2OTgyMiwgMTA4NjgsIDQ3MTcsIDIzNDksIDU5MDIsIDY2NDUwLCAKQEAgLTE5NTM3LDI2ICsxOTU1NywyNiBAQAogICAgIDQ4MTQsIDAsIDQ4MTAsIDAsIDAsIDY0OTI4LCAxMDU0MywgMCwgMzUyMiwgNzEzMzUsIDQxNCwgNjU0MDQsIDAsIDE5NTAyNywgCiAgICAgNjQ1NiwgNzM4MjAsIDAsIDY2OTEsIDQyMTkzLCA5MjIyNSwgMTI4MTcxLCAwLCA3NDQ5NSwgMCwgMCwgMCwgMTE4ODIwLCAKICAgICA5NzUxLCA2NTQwNywgMTI4MDg1LCAxMTc3MCwgMzkxOSwgMCwgMCwgNjUwNjEsIDAsIDAsIDAsIDEyMjM1LCAwLCAwLCAKLSAgICAxMjcyMzMsIDY0MDkyLCA5ODM0NjIsIDY0MDgwLCAwLCA2NDA5MCwgMCwgNjk5MTMsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgCisgICAgMTI3MjMzLCA2NDA5MiwgOTgzNDcwLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDY5OTEzLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIAogICAgIDEyNzg4OCwgNDIwMzgsIDM4NywgNDEzNjMsIDEyNzM3LCAwLCA0NzgwLCA0MzM2OCwgMCwgNjQzMTAsIDY0NjIxLCA2NzMyLCAKLSAgICA3ODExNiwgMCwgOTgzMTM5LCAwLCA5ODMwNzQsIDg4OTYsIDAsIDM3NSwgNjk3NiwgNjY1ODIsIDExOTAwNSwgOTgzODY1LCAKLSAgICAwLCA5ODM0MjYsIDExOTIwMiwgMTE5MjAzLCAxMjUyNiwgNDMxMjAsIDIzMTUsIDAsIDE5MzgsIDExOTE5NywgMCwgNDUyOSwgCi0gICAgMTE5MjAwLCAxMTkyMDEsIDExOTE5OCwgMTE5MTk5LCA2OTY5MiwgOTgzNDI0LCA2OTY5OCwgMTMxNTAsIDY0NDkyLCAwLCAwLCAKKyAgICA3ODExNiwgMCwgOTgzMTM5LCAwLCA5ODMwNzQsIDg4OTYsIDAsIDM3NSwgNjk3NiwgNjY1ODIsIDExOTAwNSwgOTgzODc0LCAKKyAgICAwLCA5ODM0MzQsIDExOTIwMiwgMTE5MjAzLCAxMjUyNiwgNDMxMjAsIDIzMTUsIDAsIDE5MzgsIDExOTE5NywgMCwgNDUyOSwgCisgICAgMTE5MjAwLCAxMTkyMDEsIDExOTE5OCwgMTE5MTk5LCA2OTY5MiwgOTgzNDMyLCA2OTY5OCwgMTMxNTAsIDY0NDkyLCAwLCAwLCAKICAgICAyMjkxLCAxMjkwMiwgMCwgNDI4OTEsIDY2MzI3LCA3NDI5OCwgOTE3ODU3LCAxMDc5OSwgNjk2OTAsIDI1ODcsIDY2MzcyLCAKICAgICAwLCA0MTkzLCA5MjI1MCwgNDI0MSwgOTgzMDU3LCA3OTk4LCAwLCAwLCAwLCAxMjY2NDAsIDIzMTYsIDExODgyMSwgMCwgMCwgCi0gICAgMCwgNjQyOTcsIDc0Nzk5LCA5MjQ0MiwgNzQxNDAsIDAsIDUzNzMsIDAsIDk4Mzg3NywgMzc2MiwgMTAwMTUsIDEyMDY3MiwgCisgICAgMCwgNjQyOTcsIDc0Nzk5LCA5MjQ0MiwgNzQxNDAsIDAsIDUzNzMsIDAsIDk4Mzg4NiwgMzc2MiwgMTAwMTUsIDEyMDY3MiwgCiAgICAgMTE5MjMyLCAwLCA0MTU5MCwgMCwgNzAwOTgsIDM3ODAsIDc0ODUsIDU3NzksIDAsIDQyMDM3LCAwLCAzOTA2LCAxMjM0OSwgCiAgICAgMCwgODMyNiwgMCwgNjU0OTgsIDM3NjMsIDY5ODMsIDU2MTgsIDAsIDM3NzksIDAsIDQzNjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAyODAsIDc0NTU4LCAxMjczMzIsIDY4MTM4LCAxMzA3MiwgMTg5NCwgMCwgMCwgNjU0NzgsIDQzMzEwLCA3MjMxLCAwLCAKLSAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDk4Mzc0MywgMTE5MjM3LCAwLCAxMjg4MDUsIAorICAgIDExNzczLCAwLCAwLCAwLCAwLCAyNTUxLCAwLCA2NDUzLCAxMDIwMCwgNjIzNSwgOTgzNzUyLCAxMTkyMzcsIDAsIDEyODgwNSwgCiAgICAgNDQ3MCwgMTE4MjYsIDkxNzU1NywgNzc4MCwgNTM2OSwgMTE4OTU4LCA1MjQ5LCAwLCA1MzY3LCA4NzU2LCAxMjcxNDMsIDAsIAotICAgIDUzNzcsIDEyMDU4NSwgNjgxNDMsIDE2ODgsIDc4MjQ1LCA5ODMzNDgsIDY5Njg1LCA5ODM3NDcsIDAsIDAsIDQ0MDIwLCAKKyAgICA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgOTgzMzU2LCA2OTY4NSwgOTgzNzU2LCAwLCAwLCA0NDAyMCwgCiAgICAgNjgwOCwgNDEzMTksIDEzMDAsIDEwNjUwLCA0MTY5MiwgNjQ1MDUsIDIyOTAsIDAsIDExOTYyNCwgMTQ2NSwgMTA4NTAsIAogICAgIDM5NDMsIDAsIDQxMjA1LCA0MTMxNSwgMTE4OTYxLCAwLCAwLCA1MzUyLCAwLCAwLCA4ODM5LCA0MTMxNCwgNzM4NCwgNzc4NSwgCiAgICAgNDEyMDQsIDEyNzMyMiwgNDEyMDksIDY5NjM3LCA5MjI0MSwgNDM2MDcsIDAsIDAsIDU0MjAsIDM4OTcsIDEwMTM0LCAwLCAKICAgICA3NDQxNywgNDAxOCwgNzE1MCwgNjgxMjcsIDAsIDAsIDAsIDAsIDEyNzUyNiwgMjU2MSwgNjg2MjEsIDM1NDIsIDcxNDgsIAogICAgIDEyMDc2LCA3OTUxLCA2ODE1MiwgMTE4ODU3LCA1MzAzLCA2Mjc2LCAxNzA2LCAwLCA3ODc1MSwgNzE0NiwgMCwgNjUxNTAsIAotICAgIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIDEwNTA2LCA5ODM0MjcsIDY5NjQxLCAxMDc1MywgCisgICAgNDE4MTksIDAsIDczOTUxLCAxMDg0NywgNDE4MjIsIDk5ODUsIDg2MCwgMCwgMTA1MDYsIDk4MzQzNSwgNjk2NDEsIDEwNzUzLCAKICAgICAxMDgzMCwgMCwgNjE1LCA2NDQ5MCwgNzU3NCwgOTI2MTcsIDc3OTIyLCAwLCAxMjkwOSwgNDMwMTYsIDY0NTU5LCAxMjcwMjgsIAogICAgIDAsIDAsIDY3OTk2LCAyMDIwLCAwLCA0MDIyLCAxMjg3ODMsIDAsIDc3OTIzLCAxMjY1OTMsIDQxNjkxLCAwLCAwLCA3NDMyOSwgCiAgICAgMCwgNjQ2MjIsIDkwNzAsIDAsIDY4NDExLCAzOTExLCA0MjgyOSwgNDMxMjIsIDEwMzMsIDc0NDQwLCAwLCA3MDAwLCAzOTA0LCAKQEAgLTE5NTcxLDcgKzE5NTkxLDcgQEAKICAgICA2ODY3NSwgMTI4MDU0LCAxNTExLCA5MzI0LCA3ODIxMSwgMTA1MTksIDY2MzMxLCAzNDU0LCAxOTkzMCwgMCwgNDEwMTksIDAsIAogICAgIDAsIDY1MjkyLCA2ODIyLCAxMjg2MiwgMCwgMCwgNDIxNDMsIDQxODI4LCA3ODIwNywgNjU1MzEsIDc4MjA4LCAxMTg4NzksIAogICAgIDU1MjIzLCAwLCAxMjgwNzEsIDQxODI2LCA4ODY1LCA2NDAyLCAwLCAxMzI3OSwgNzkxNywgNzQ3NTUsIDAsIDc3MzMsIDAsIAotICAgIDQ5OTgsIDk4Mzg4NywgOTIzMzIsIDQxOTUwLCAwLCA0MjY4LCAwLCAwLCA3MDA2MSwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIAorICAgIDQ5OTgsIDk4Mzg5NiwgOTIzMzIsIDQxOTUwLCAwLCA0MjY4LCAwLCAwLCA3MDA2MSwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIAogICAgIDAsIDc0Nzg4LCAyMDE0LCAwLCAwLCA5NzY1LCAwLCAwLCAwLCAxOTUwNTksIDc4MzU3LCA2NTI4MSwgMTI3ODI1LCAxMDk0OSwgCiAgICAgMCwgMCwgMCwgMjAxNSwgMCwgMCwgMCwgNjYzMTgsIDQzMjMzLCAwLCA0MjUxNywgMCwgMCwgMCwgMTI2OTgsIDgwOTQsIAogICAgIDEwMTM1LCA2NTkwOSwgNjQ3NCwgNzk0LCAwLCAxMjY1NiwgMTI4MTIyLCAxMTkzNTMsIDEyODI3MCwgMTY2NSwgMCwgNDgzMywgCkBAIC0xOTU5MCw5ICsxOTYxMCw5IEBACiAgICAgOTQyNSwgOTQyNiwgOTQyNywgOTQyOCwgOTQyOSwgNjQ3NTgsIDIzNjIsIDk2NTUsIDAsIDIwMDQsIDkwOTYsIDk3ODIsIAogICAgIDEyODg0OCwgOTE3MiwgMTI4NTQ1LCAxOTk2NSwgMCwgNTk1NSwgNjc2NjYsIDExMDgsIDAsIDc0NzczLCAwLCAwLCA2NDc4MiwgCiAgICAgMzkyNiwgOTI0NDgsIDY1MjEwLCA4Nzk4LCAwLCA5MjE2NSwgMTM5MiwgMCwgMCwgMTI3MzY0LCAxMDYwNiwgODA2NSwgCi0gICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjgwLCA0MzI4MCwgODIxOSwgCi0gICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjgzLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKLSAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNTMsIDY4Njc4LCAKKyAgICAxMTg4MDUsIDEwMzUzLCAxMDQxNywgMCwgMCwgNjQ1MjQsIDkyNDE4LCA0MDE5LCAwLCA5ODMyODgsIDQzMjgwLCA4MjE5LCAKKyAgICA2ODQwMiwgMTgxMiwgMTE5OTYzLCA5ODM2OTIsIDAsIDEyNjQ4OCwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIAorICAgIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAzOTA5LCA5OTUwLCAwLCAxMjgxMzksIDk4MzI2MSwgNjg2NzgsIAogICAgIDAsIDAsIDEwNDksIDAsIDY1NzA3LCAyMzA0LCA0MTgwNiwgOTIzMjYsIDQyMzM2LCAzOTIxLCAwLCAxMTc3NSwgNjQ3NjAsIAogICAgIDExNzY2LCAxMDM4LCA0MjMwMywgOTgyMywgMTI3Mjc4LCA2OTIzNiwgNDAwOCwgNjQwMDQsIDg3NzMsIDEwNzMzLCAzNiwgMCwgCiAgICAgNTE1MywgNDE4MDUsIDAsIDczNzM1LCA3NjMsIDQxODA4LCA2NDkxMCwgOTgzMTMwLCAyMDA5LCAwLCAwLCAxMjcxNDIsIApAQCAtMTk2MDcsNyArMTk2MjcsNyBAQAogICAgIDc4MDAyLCAwLCA3NTEzLCAxODYzLCA0NzEwLCAwLCA1OTU2LCA3NjIxLCA3ODAwNiwgOTI2MjQsIDQ3MDUsIDcxNiwgCiAgICAgNzgwMDQsIDAsIDQ3MDQsIDEyMDA0MCwgMTIwMjcwLCA0MjI0MSwgMTYxLCA0Mzk3NywgNzQ1NDYsIDY2MjE0LCA0NzA2LCAwLCAKICAgICA2OTkxNCwgNDI2NzIsIDQ3MDksIDEwNjgwLCAxMTkwNjUsIDQzMjkzLCAxMTk5NDQsIDAsIDExOTE2NCwgMTIwMzI4LCAKLSAgICA5MjQ2NywgMTAxODcsIDE3MDAsIDExOTIyMywgMCwgMCwgMTI4MTE5LCA0MDA0LCAwLCAxMDk2OCwgNDMyOTYsIDk4MzYzMywgCisgICAgOTI0NjcsIDEwMTg3LCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCA5ODM2NDIsIAogICAgIDg1MDYsIDAsIDAsIDEyNjk5NiwgMTAwNSwgOTM3LCA3ODIxNiwgNDczNCwgMjg3MCwgMCwgNzgyMTgsIDk4MzEwOSwgNzQ2MywgCiAgICAgNDcyOSwgMCwgMjM1LCAxMzg0LCA0NzI4LCAwLCAxMjA0MjAsIDkyNDkwLCA3NDQ0OSwgODEwOSwgNDMxMDUsIDk4MzE3NCwgCiAgICAgNDczMCwgNDQ3LCAxMzE4NiwgMTUxMywgNDczMywgMTIwNDE1LCAwLCAwLCA0MjUyNywgMTI5MTEsIDQzNDI3LCAxMzgzLCAKQEAgLTE5NjE4LDcgKzE5NjM4LDcgQEAKICAgICAxMjc2OSwgNjU5MDUsIDQxNjk3LCAxMjgzLCAxMjAzMDIsIDQ3NzksIDAsIDM3MTksIDQwMDYsIDk4MzU2OSwgMTk5NTcsIAogICAgIDEyODc3MywgMjAyMSwgMTE5MzMyLCAxMjA2OTksIDExOTE1MCwgNDMwMjgsIDY1NDkzLCA0MTgzOCwgMzg3NSwgNTk2MiwgCiAgICAgNjQzNDEsIDkyNjE2LCA5ODE0LCA0MzQ1NywgNTgyNywgMzMxNCwgNzc4NywgNzgyMzQsIDY1NDk0LCA2ODE1MywgMCwgMCwgCi0gICAgMTIwNjM2LCA2NDUzMSwgMTIwNjkyLCAxOTQ2MjYsIDAsIDAsIDY2MzE2LCA2NTQ2NywgNTc3MSwgNDEyOTgsIDk4Mzc4NSwgCisgICAgMTIwNjM2LCA2NDUzMSwgMTIwNjkyLCAxOTQ2MjYsIDAsIDAsIDY2MzE2LCA2NTQ2NywgNTc3MSwgNDEyOTgsIDk4Mzc5NCwgCiAgICAgOTc0MiwgNTIxLCAwLCAxMDgwMCwgOTIyMjIsIDg0MDQsIDE5NDYyNSwgNDgzLCA3MDk2LCA3MDg5LCA2NjMyMywgOTI4LCAwLCAKICAgICAwLCAxMTkwMTgsIDEwNTk5LCAxMTU4NiwgMzk4OSwgMTA5NzEsIDQzNzQ4LCA2NTc4MiwgOTg0MSwgODg0MywgMTIxNDUsIAogICAgIDkyNDcwLCAxMDA3NCwgNzg1NDgsIDAsIDM3NjksIDAsIDAsIDAsIDk4MzEwNywgOTU3MywgMCwgNjUyOTAsIDg4NDksIDAsIApAQCAtMTk2MjYsMTcgKzE5NjQ2LDE3IEBACiAgICAgNzM4MzgsIDc4NTUzLCA1ODI1LCAxMzAwNywgNjgxNjUsIDAsIDEyMDQ1NywgMTI2NjEsIDc2MDgsIDEwMzU0LCAxMDQxOCwgCiAgICAgNDI0MTEsIDIwMjIsIDAsIDE0MDksIDEyMTk1LCA0MDAxLCAzMTEyLCAxMDgyNCwgMTIwNjM5LCAxMzkwLCAwLCAwLCA0MjEsIAogICAgIDQzNTM2LCA1ODQ2LCAxMjAxMjAsIDQxMzAsIDEyNzc3NSwgNzU5NSwgNDI1ODgsIDc2MDAsIDEyMDEyMSwgNjYwMzUsIAotICAgIDk4MzkwNCwgMCwgNjU4NTEsIDQyNjA3LCAxMjgxOTAsIDkyNDAzLCAzMTY4LCAwLCA0MjEzNCwgMTE4MzEsIDIzNzAsIAorICAgIDk4MzkxMywgMCwgNjU4NTEsIDQyNjA3LCAxMjgxOTAsIDkyNDAzLCAzMTY4LCAwLCA0MjEzNCwgMTE4MzEsIDIzNzAsIAogICAgIDI4NDYsIDkyNjA1LCAwLCAwLCAxMjAxMzIsIDAsIDE4MzYsIDAsIDAsIDkyNTU4LCAzNzQwLCA2OTg0MywgNjI5MCwgCiAgICAgNjUzNzQsIDEyMDQ1MSwgMjM5MCwgMzk0NCwgNjY2MjgsIDEyMDQzNCwgMCwgNjEzNSwgMzExOCwgNzQyNjUsIDExOTA5MywgCi0gICAgMTIwNDQ2LCAwLCAwLCA4MTI3LCA4OTc1LCA2NDczOSwgNzk0MywgOTgzNzM0LCAwLCAxMDYxOCwgMjU4NCwgMCwgMCwgMCwgCisgICAgMTIwNDQ2LCAwLCAwLCA4MTI3LCA4OTc1LCA2NDczOSwgNzk0MywgOTgzNzQzLCAwLCAxMDYxOCwgMjU4NCwgMCwgMCwgMCwgCiAgICAgOTk5OCwgMTI4NTY0LCAwLCAwLCAwLCAwLCA2MjA0LCAwLCAwLCA4Mjc5LCA4Nzc2LCA2NDk1NCwgNDk3NSwgNzAwNzUsIAogICAgIDEyMDEzMCwgNDI2NywgMTYzMSwgNDIyMDYsIDc3OTgzLCAwLCAxOTUwNDYsIDY1NzAwLCA2NjU2MiwgMCwgNjQ2NDUsIDAsIAotICAgIDAsIDEyNjU4OCwgMTI1ODYsIDAsIDkyNDIsIDEyNzkyMiwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDk4Mzc4OCwgCisgICAgMCwgMTI2NTg4LCAxMjU4NiwgMCwgOTI0MiwgMTI3OTIyLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgMzEyMiwgOTgzNzk3LCAKICAgICA3NzkzLCA3ODI3NSwgOTMyOCwgMTE5MTA0LCA3ODM5MywgMTI2MDQsIDAsIDY2MTUsIDIyODUsIDkyMzQ0LCAzOTg2LCAKLSAgICA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDAsIDk4MzM1MCwgOTU0MSwgNzgyNzYsIDAsIDExMjc1LCA4NTQwLCAKLSAgICAxMTQ5OCwgMCwgOTgzMzQ5LCA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgOTgzMTM4LCAwLCAwLCAKLSAgICA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCA5ODMzNDIsIDAsIDE2MDYsIDEyMDM0OCwgCisgICAgNDQwMjUsIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCA5ODMzNTgsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgCisgICAgMTE0OTgsIDAsIDk4MzM1NywgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgMCwgCisgICAgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgOTgzMzUwLCAwLCAxNjA2LCAxMjAzNDgsIAogICAgIDEyMDM1MSwgMzA5MywgNjg0MzYsIDAsIDk4MzA2MSwgMTE5NjEzLCAwLCAwLCA0MzEyLCA3NDA5MSwgMTIwMzM3LCAKICAgICAxMjAzMzYsIDExOTIzLCA0MDIzLCAxMjAzMzMsIDU3NjMsIDk0MDE1LCA0ODI3LCAxMDg5NCwgMTI4MTAsIDY0NDA2LCAKICAgICAxMTg3ODUsIDQ0NTUsIDc0MzIxLCA0MzMsIDExOTYyMCwgNjY2NjAsIDI0OTksIDAsIDAsIDExODgzNywgMTE5NzMsIApAQCAtMTk2NDYsMjUgKzE5NjY2LDI1IEBACiAgICAgNzAwNCwgMCwgNjU4ODAsIDEyNzg4NiwgMTE5MDQ4LCAyMzgwLCAxMTM4MCwgMCwgOTM5OTYsIDIzNzYsIDAsIDExOTMyMCwgCiAgICAgMCwgNTE5NywgMTI3MDQ2LCAxMjcwNDcsIDEyNzA0OCwgMjM2NiwgMTI3MDUwLCAxMjcwNTEsIDEyMDU1NCwgMTIwMDQ1LCAwLCAKICAgICAwLCAwLCA5ODMwODQsIDAsIDAsIDAsIDc0MTg4LCA3MTM0MiwgOTgzMDg2LCA5ODM1NzMsIDEyMDA0NywgMTI4NTc1LCAwLCAKLSAgICAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIDEwMzM5LCA5ODMzNTcsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIAotICAgIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAwLCA5ODM0NTcsIDAsIDY0Nzk3LCA5ODMzMzcsIDU4MjAsIAotICAgIDk4MzMzNiwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIAorICAgIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDk4MzM2NSwgNDIzODQsIDAsIDQyMjcsIDc0MTU4LCAwLCA5MjUwMSwgCisgICAgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDk4MzQ2NSwgMCwgNjQ3OTcsIDk4MzM0NSwgNTgyMCwgCisgICAgOTgzMzQ0LCAxMjAwNTIsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgCiAgICAgMTIwMDYzLCAwLCA3Mzc3LCAxMjc4NjcsIDQxNzk5LCA2NTUzMCwgMTcxMSwgMTI5ODQsIDQzMDM5LCAzMTE0LCA2MjU1LCAKLSAgICA5ODMzMzIsIDExODkzOCwgMCwgMTA4NTMsIDkyNiwgOTgzMzYxLCA3NDE4NCwgOTgzMzYwLCAxMjAwNTUsIDAsIDQzMTc1LCAKKyAgICA5ODMzNDAsIDExODkzOCwgMCwgMTA4NTMsIDkyNiwgOTgzMzY5LCA3NDE4NCwgOTgzMzY4LCAxMjAwNTUsIDAsIDQzMTc1LCAKICAgICAwLCA0MzAzNywgNDE3OTgsIDQxMDM1LCAxMTU4MywgMTI3NzY5LCA0MTgwMSwgMTE5MDg4LCAxMTk2MDUsIDUyMCwgNDIwMCwgCi0gICAgMTI2OTksIDgzMzEsIDAsIDMwOTEsIDQxMDM0LCAxMjczNTMsIDk4MzY3MiwgODM2MCwgMCwgNzgwNDQsIDMyMSwgNDIyOSwgCisgICAgMTI2OTksIDgzMzEsIDAsIDMwOTEsIDQxMDM0LCAxMjczNTMsIDk4MzY4MSwgODM2MCwgMCwgNzgwNDQsIDMyMSwgNDIyOSwgCiAgICAgNjQ1NDMsIDkxNzk0NiwgNjU1NjMsIDAsIDkxNzk3NCwgMjg2MSwgNDM3OTMsIDEwMDk1LCAwLCA5MTk1LCA5MjM4NiwgCiAgICAgMTg2MSwgMCwgNzM3MzMsIDAsIDAsIDQzMDQxLCAwLCA0Mzc5NCwgMTI4NTMwLCAzODU5LCAxMjE4MSwgNDE2NjAsIDgyMDksIAogICAgIDAsIDczODY3LCAxMjk3MywgMCwgNzQ3NTcsIDEyNzUxNCwgNDE2NTgsIDAsIDAsIDU3NjAsIDAsIDc0MywgNDQxNCwgCiAgICAgMTIwNzY2LCAwLCA0MjYzMiwgOTE3OTczLCA2NTE2MSwgNzM4OTYsIDEyODU4OSwgMCwgMTQwNSwgMTE5MDYzLCA0MzIyMCwgCiAgICAgNDMzNDEsIDAsIDE5OTE5LCAwLCA2NDUzMiwgNjUzNjcsIDQzNzEwLCAwLCAwLCAzNTEzLCAwLCAxMTg4ODMsIDQzMzQyLCAKICAgICAxMTkwNjQsIDY1NTI5LCA2NTM2NCwgMTI4MTk3LCAwLCA2NDg1LCAxMzk3LCAwLCA0MTk4NiwgOTI2NzgsIDAsIDAsIAotICAgIDc0MDk3LCAwLCA3NDcxLCAxMjA3OSwgNjc5OTcsIDEyNjgyLCA0MzI4NywgOTIzMTcsIDAsIDk4MzE0MywgOTgzNjk4LCAwLCAKKyAgICA3NDA5NywgMCwgNzQ3MSwgMTIwNzksIDY3OTk3LCAxMjY4MiwgNDMyODcsIDkyMzE3LCAwLCA5ODMxNDMsIDk4MzcwNywgMCwgCiAgICAgMCwgMTA5OSwgMTA0OTAsIDAsIDEwNTAxLCA2NTE4MSwgNzQ0NjMsIDAsIDQ2NCwgNDE2MjQsIDY1MjgzLCA2NzY2MywgCiAgICAgNzgyMjIsIDEzNDYsIDAsIDkxNzYzMSwgNjQ1NzMsIDY0ODk3LCA0MjMsIDE4MTgsIDY1MTQ0LCAwLCA4MjcyLCAxMjc4MTIsIAotICAgIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDk4Mzg5MywgCisgICAgMTk5MTEsIDQyMTgsIDMwODcsIDY0OTYwLCAxMjcyMzQsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgOTgzOTAyLCAKICAgICA3NDM1OSwgMTI2MjYsIDkxMDYsIDAsIDQyNjQyLCAxMjAyMzAsIDY0NzUwLCA5MzkwLCAwLCA0MTc5NywgMCwgMCwgMjY1LCAKLSAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ4NSwgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAorICAgIDQxNzk1LCA2NDY2NiwgMTI2NTA4LCA0MzUzMCwgMjc1MiwgMCwgMCwgOTgzNDkzLCA1OSwgMCwgOTgzNTkzLCAwLCA5MjM3MSwgCiAgICAgNzc4NzMsIDQxODEwLCAwLCA3MDEwLCAwLCA0MTgwOSwgNDE0OTUsIDExOTM2NCwgMCwgNDIyNTIsIDQyMjEzLCA4MDA5LCAKICAgICAzMzA1LCA0MzAzMywgNTExLCA5MjcwMCwgNjYyNTUsIDEzMTI3LCAxMjAwNjcsIDAsIDc0Mzk3LCAxMjAyMzUsIDkxNzk3NywgCiAgICAgNjU5MTUsIDE0MDAsIDQxODEyLCAxMDY4NSwgMTk0ODcwLCAyMTAzLCAxMDM4NywgNDQ1MywgNDMyNzYsIDkxNzc4MywgCkBAIC0xOTY3NSwxNyArMTk2OTUsMTcgQEAKICAgICAwLCA0MTg0MSwgNDMzMzgsIDAsIDAsIDU3MjYsIDY0OTE1LCA0MjE3NSwgMCwgMCwgNDE0OTcsIDY1MDQ0LCAxMjAxMDksIAogICAgIDI4NTEsIDQzMDE3LCA5ODM1ODksIDAsIDQzNzMsIDc4MDU4LCAwLCA5NTg3LCAxNzg5LCA2NjcxLCAxMjg4NDAsIDMxMDAsIAogICAgIDAsIDY1MzYwLCAwLCA5MjM2NSwgOTE3Nzg5LCA2NDkyMiwgMCwgODE5MCwgMTIwODMsIDAsIDAsIDY1MDYsIDY0MzEyLCAKLSAgICA3NDM3NCwgMjM2OCwgMCwgNDQxOSwgOTgzODM4LCAxMTkxMjUsIDM0MzksIDE4MjUsIDExOTIsIDEyMDEwNiwgODg5MSwgCisgICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4Mzg0NywgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAogICAgIDMwODAsIDEyMDIyOCwgMjM0NywgNTQzMCwgMCwgODk5MCwgMjg0OCwgMCwgMTI4MjIzLCA5MjUyOCwgMjQ5LCAwLCAwLCAwLCAKICAgICAxMjA2NTgsIDAsIDAsIDg4ODMsIDkxNzgwMiwgNzI4LCA2ODE3OCwgOTk1LCAwLCAwLCA2NDgyNiwgMCwgOTE3Nzk4LCAKLSAgICAxMjgzNDgsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAxOTQ4MTQsIDk4Mzg0MSwgMTIxMTIsIDY5OTEyLCAwLCAKKyAgICAxMjgzNDgsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAxOTQ4MTQsIDk4Mzg1MCwgMTIxMTIsIDY5OTEyLCAwLCAKICAgICAwLCA3NDQxOSwgMTIzMzUsIDEyMDEwNCwgOTE3Nzk1LCAzNDQzLCAzMTI5LCAwLCAyMTAyLCA2NTQ0NSwgNzgyNTgsIAogICAgIDY0ODkxLCAwLCA3NzI1LCA2NTEwOCwgNzgyNTUsIDAsIDg2MjQsIDY5MjQ2LCAxMjQ0NiwgNDMyOTUsIDAsIDQxODk0LCAwLCAKICAgICA2Mjc3LCA0MTY3MiwgNDE4OTMsIDEwMDEwLCAxMjg2NzgsIDM1NDAsIDEyODY0OSwgODM1LCA3MTM0MCwgNjk4MTYsIAogICAgIDExOTg2OCwgNzQ0MDgsIDAsIDczOTU5LCA1NDI2LCA0MjU4LCAwLCAwLCA1NDI0LCAxMjgxMjcsIDgyODMsIDAsIDU0MzQsIAogICAgIDk4MzU5MCwgMCwgMTk5MTcsIDExNDA4LCAwLCAxMTk0NywgMCwgMTQwNCwgMzA5NSwgMTE0MzIsIDEyODMwNywgMzQ2NCwgCiAgICAgNjQ4NiwgNDgxOSwgMTI4MjMzLCAwLCA1NzAsIDgwOTUsIDM2NzIsIDExOTg2NCwgMTQ5OCwgNjc4NjYsIDAsIDEyODUzOSwgCi0gICAgNDMxLCAwLCAwLCAxMjgxODIsIDEyODA5NiwgNjgxNjcsIDk4MzY1NCwgMTMwOTYsIDEyODY0MywgMCwgNDM0MDgsIDk1MTYsIAorICAgIDQzMSwgMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NjMsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAKICAgICAxMjg1MzgsIDUyNjgsIDQyMjMwLCA0MjIyMCwgMCwgNDQ1MCwgMTIwNTExLCAxMTU0NywgNDM0MTcsIDEyODU0MiwgMzU2LCAKICAgICAzNDc3LCAyMjcsIDEwNDg4LCA2ODIwMywgMzgyLCAxMTQxOCwgMCwgMTk1MDY2LCAwLCAwLCAwLCAwLCA2NDg0LCAyNTQxLCAKICAgICA2NjAzOSwgMCwgNzg3MTgsIDkyNzIzLCAzNTQ5LCAwLCA5MTEwLCAxMTk2NjUsIDI3NDMsIDAsIDQzMjkwLCAxOTQ4MTIsIApAQCAtMTk2OTQsNyArMTk3MTQsNyBAQAogICAgIDEyODQ5LCAzOTUzLCAxODk3LCAwLCA2NTA5NCwgMTE5OTQsIDQzMzksIDc0NTU2LCA5MjY1NCwgNjc4NDMsIDAsIDAsIDAsIAogICAgIDY4NDczLCA3NDEwNCwgNTIyOCwgMTI4ODA0LCA3ODY4LCA0MzE4NCwgMCwgMCwgNzM5ODYsIDQzNDM4LCAwLCA0MzAyMiwgMCwgCiAgICAgMTE2MiwgOTE3ODQ3LCAyNjcxLCAwLCAwLCA5MjYzMiwgOTI2MzEsIDExODg2NSwgNDU1MywgNzM4MTEsIDAsIDE5NTAwNSwgCi0gICAgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMTk1MDA2LCA0NTY3LCA0MTg5MSwgMCwgOTgzNzc5LCA1NTI0OSwgNDgyMCwgCisgICAgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMTk1MDA2LCA0NTY3LCA0MTg5MSwgMCwgOTgzNzg4LCA1NTI0OSwgNDgyMCwgCiAgICAgNjUyMzksIDE5NDY2MiwgMCwgMTk0NjY1LCA0MzA0MiwgMTE5MjEyLCAxMzc3LCAxMjg2OSwgNDg5NywgNDI4MjEsIDkyNTAsIAogICAgIDAsIDQ0MzgsIDY0Mzg1LCAwLCAxNzUzLCAxMTMzMSwgNjE0NywgMTk0OTQxLCA0MzI4MiwgODgzMywgMCwgMCwgNjUwNCwgCiAgICAgNzg0MDgsIDEyNjk3OSwgMTA3MTksIDAsIDE4OTgsIDE0MTMsIDQyNDQzLCAwLCA4MDIsIDEyMTQxLCAwLCAxOTQ2NzEsIApAQCAtMTk3MDMsNyArMTk3MjMsNyBAQAogICAgIDc4NzE5LCA2NjU3MywgMCwgNzg3MjQsIDc4NzEyLCAxMTc2MSwgMTk0NjU1LCAwLCA0MTA5NCwgMCwgMCwgMTk0ODkzLCAwLCAKICAgICA5MjY4OSwgNjE5NiwgNjk0NSwgOTM5NjksIDE5NDg5MCwgMTI4MTg0LCAxMjA0OTEsIDExODE2LCAxOTQ5NDMsIDU3MzMsIAogICAgIDI5MzAsIDAsIDAsIDQxMDk4LCAwLCA0MTA5MywgMCwgNjY2MjYsIDU4OCwgOTc2MCwgMCwgMTk0NzE3LCAxMjM4LCAyMDAsIAotICAgIDk4MzIwNSwgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzY5NywgMzM5NCwgCisgICAgOTgzMjA3LCAxNjYwLCA3MzkxNiwgMCwgMTE4OTA1LCA3NDM2MiwgMCwgOTI0ODUsIDE5NDY1MSwgMCwgOTgzNzA2LCAzMzk0LCAKICAgICAxOTQ4OTQsIDEyMDY2OCwgMCwgMCwgMTI3MzU4LCA2NjIxOSwgMTI3MTgzLCA0MzI4NCwgMTk0NjU2LCA3ODE3LCAxODQxLCAKICAgICAxMTA1NSwgMTIwNTMzLCAxOTQ5NzksIDE5NDk4MiwgMTY2OSwgMTA3NzYsIDE5NDk4MSwgNzcwMSwgMTk0OTgwLCAwLCAKICAgICAxOTQ5OTUsIDE3MzIsIDQwMzAsIDAsIDM5NjMsIDY2NjExLCAxMjc1MzAsIDQxNzY4LCA2NDkxLCAwLCA2NTMyNCwgOTE0LCAKQEAgLTE5NzExLDMwICsxOTczMSwzMCBAQAogICAgIDEyMDA5LCAxMjM5OSwgMCwgNjc4NTIsIDY1NTM3LCAwLCAxMDg0MSwgNDM0MzAsIDUzMDEsIDAsIDkyNjE4LCA1NzM0LCAKICAgICA4OTYwLCAwLCA5MjUyNywgNjUzMTcsIDc3ODgwLCAwLCAwLCAwLCAxMjMwNCwgMCwgMCwgNjUzMTUsIDkyNjcwLCAxMjg1MTEsIAogICAgIDAsIDAsIDAsIDExOTYyMSwgOTI1MjksIDc0NTM2LCAxMjQ0NywgNjQ0ODYsIDEyNzM3NCwgMTI2NTYyLCA5ODMxMjksIDAsIAotICAgIDAsIDk4Mzc5MywgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgCisgICAgMCwgOTgzODAyLCA0Mjc2NywgMTA5MTUsIDAsIDEyMDA3LCA0MzY5NSwgMTIwNTIwLCAxMTk3NSwgMTk0ODc4LCAwLCAKICAgICA5MjYwNCwgMjU1NSwgODYyOSwgMTI4NjQwLCA0MzE2OCwgNDE4NzIsIDQzNzA2LCA0NDk2LCAxOTQ4NzksIDEyODE0OCwgCiAgICAgMTIwMjQxLCAwLCAwLCAwLCAwLCA2NDczMCwgNzAwNDEsIDY2NzE0LCA2ODIyMiwgMCwgNzAwNzYsIDY1NTk2LCA5MjMwNiwgCiAgICAgMTE0MTYsIDQyODAsIDY3NjU1LCA4NzY1LCAxMjc4NCwgNzc5MiwgMTM5MywgMTI2NDczLCA2Nzg3MSwgNzQzODYsIDAsIAogICAgIDgyMzMsIDEyODIwLCAwLCA2NjgzLCAxOTQ4NzYsIDM0NDIsIDEyMTQ0LCAyODQxLCAxMjU0MywgMCwgMTQ3MywgNDI4MjAsIAogICAgIDY0MzI5LCAxMjc4MzIsIDAsIDY4NjQyLCA2NDg4LCAzNTcsIDEwNDgsIDQxMTAwLCAwLCA0MTEwNCwgOTQwMDMsIDM0MDYsIAogICAgIDEwNTQsIDcxMzIwLCAxMDQwLCA2NTQ1MCwgMCwgNDQzNCwgMTA2OSwgMCwgMTE4ODYyLCA2NTczNywgOTE3NzY1LCAKLSAgICAxMjg3MDUsIDAsIDk4MzY4NCwgOTY5MywgNDE5NDMsIDEyNjU2NCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCi0gICAgMTA1OSwgOTc5MCwgODk5NSwgMTE5OTc0LCA5ODM2ODcsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgCi0gICAgOTIzNzIsIDAsIDc0ODMwLCA3ODU2OSwgMTI3NDMsIDk4MzY4MCwgNjQ4MCwgOTE3NzYxLCA0MTc3OSwgNDI1ODAsIDY2NjAxLCAKLSAgICAxMjIwNywgMTE5NjE5LCA2MzM1LCA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMTE5NjI5LCA5ODM3NTUsIAotICAgIDQzMDIwLCAxMjgyNzEsIDM5NTUsIDc0MjU0LCAwLCA5ODM3NDUsIDkxNzg2MSwgMCwgNzc5MjYsIDk3NzAsIDkyNDYsIAorICAgIDEyODcwNSwgMCwgOTgzNjkzLCA5NjkzLCA0MTk0MywgMTI2NTY0LCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCAwLCAKKyAgICAxMDU5LCA5NzkwLCA4OTk1LCAxMTk5NzQsIDk4MzY5NiwgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAKKyAgICA5MjM3MiwgMCwgNzQ4MzAsIDc4NTY5LCAxMjc0MywgOTgzNjg5LCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIAorICAgIDEyMjA3LCAxMTk2MTksIDYzMzUsIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAxMTk2MjksIDk4Mzc2NCwgCisgICAgNDMwMjAsIDEyODI3MSwgMzk1NSwgNzQyNTQsIDAsIDk4Mzc1NCwgOTE3ODYxLCAwLCA3NzkyNiwgOTc3MCwgOTI0NiwgCiAgICAgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIDEyNzA5MywgMTI3OTcsIDI3NTUsIDY0NTcxLCA3ODU3OCwgCiAgICAgMTk0OTI3LCA0ODU3LCAwLCA0NDI4LCAxMjc5NCwgNzM3NTUsIDEyODA2MSwgNzg1NzQsIDAsIDc0Mjg0LCAwLCA1NzQ3LCAKICAgICA3ODgyNSwgMCwgNzk3OCwgNDEwOTIsIDc0NTcxLCAwLCAxMTkyNCwgNDM4MTIsIDQyMTQ0LCA2NTAxNSwgMCwgNTYzLCAwLCAKLSAgICA5ODM2ODIsIDEyNzk4LCAxMTI3MSwgNTcsIDAsIDAsIDkxNzg2MCwgMTE5MDQzLCAwLCA5NDA1MSwgNDMxMzcsIDY5NCwgMCwgCisgICAgOTgzNjkxLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgOTQwNTEsIDQzMTM3LCA2OTQsIDAsIAogICAgIDk4NzYsIDAsIDExOTE2OCwgMCwgNzg4MjIsIDY0NTM3LCAwLCAyNzcsIDc0Mzg1LCA3MjI5LCAxMjc2MSwgMCwgMCwgCiAgICAgMTMwMjUsIDY0ODExLCA4NzU3LCA3ODgyNCwgMTI2NDc4LCAxNTc0LCA3MzgxLCAwLCAyNTI1LCA0ODUyLCA1NzQ5LCAKICAgICA2ODQ2NSwgMTMwMjcsIDQyODI0LCAxMjA1NzQsIDEwMzksIDcxNTEsIDEwMTU1LCA1NzQ1LCAxODgsIDQxODU4LCAxMTU5MiwgCiAgICAgMCwgNzQwMTUsIDkwNTUsIDQxODUzLCA0ODU4LCA5MTc3ODAsIDAsIDQzNiwgNDc3MSwgMCwgMjc4NiwgMCwgNDg1NiwgCiAgICAgODA1MSwgMCwgMTE5NjA5LCA3MTMyNywgOTY0NCwgMCwgMCwgMCwgMTk0OTE2LCAxMjA3MzIsIDY2NzEwLCAxMTg4MzQsIAotICAgIDk4MzM1MSwgNzM5MDYsIDEyODY4MCwgMTI3MTE0LCAwLCAxMDIzNCwgNTg0MywgMTE5MzksIDAsIDQyMTU3LCAwLCAzMTU3LCAKKyAgICA5ODMzNTksIDczOTA2LCAxMjg2ODAsIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgCiAgICAgMTk0OTE4LCA2ODM5MywgMCwgMzUwNCwgMTE5MTc4LCAwLCAxMDgyMiwgNTE0OSwgNjYwMjksIDEwMjI2LCA2NTE0MiwgCi0gICAgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTk0OTU5LCA0MCwgMTI2NTcsIDk4MzY1NiwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKKyAgICAxMjgwMjUsIDM1OTQsIDQyNDI0LCAxOTQ5NTksIDQwLCAxMjY1NywgOTgzNjY1LCAwLCAzODYsIDAsIDg4MzQsIDAsIAogICAgIDEyODE1LCA0MzU3NCwgMCwgNzM5MDcsIDAsIDc0MTk2LCA3MjIwLCA3NDUwNCwgMCwgNzQzMTYsIDAsIDY1MzIyLCA0MzA0LCAKICAgICA3NDUwMywgODE2MCwgNzg3MDcsIDE5NDc1MywgMCwgMCwgMTI4NTI2LCAxMzQ4LCA5MjM0OSwgNzg1OTcsIDEyNjUzOSwgCiAgICAgMTMzMDMsIDAsIDkyMzkyLCAxOTQ3NTUsIDc1OTksIDEyNzgsIDQzNjE2LCAxMzI2OSwgMCwgMCwgNzQzODcsIDc4MTc5LCAKQEAgLTE5NzQ2LDI1ICsxOTc2NiwyNSBAQAogICAgIDQyNTA3LCAxOTYyLCA0MzMwNSwgNzg0NzYsIDQyNTA1LCAxMTY2MCwgMCwgMjA3MiwgOTIzMTIsIDY5OTUsIDc0MTczLCAKICAgICA1NDM3LCA3NDE3NCwgMTA2NjksIDg3MDIsIDc5NjQsIDkyMzUyLCAwLCAxOTksIDE5NDg0MywgNDEwNSwgMTk0ODQ1LCAKICAgICAxOTQ2OTksIDE5NDg0NywgMTk0NzEwLCAxMTk4NzUsIDEzMTQ4LCA3NTYwLCA3ODQ3OSwgOTIyNiwgNzg0ODAsIDE5NTA3MCwgCi0gICAgNjQ3MiwgNjU4MTQsIDczOTU0LCAwLCA0NzI0LCAwLCAwLCA5MTkxLCAwLCA2NDQzMiwgOTgzODA4LCA5ODMyNDEsIAorICAgIDY0NzIsIDY1ODE0LCA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDk4MzgxNywgOTgzMjQ3LCAKICAgICAxOTUwMjQsIDEwMTk2LCA3ODg2LCAwLCA2NTg1LCAwLCA2NjgwLCAxOTUwNDIsIDAsIDE5NTA1MSwgNjY3OSwgNzQ0MTIsIAotICAgIDkyMjUxLCAxOTQ4NjYsIDc0NDIxLCAxMTM4MiwgOTgzNjIyLCA5ODM2MjgsIDEyNzg5MSwgMTI3NDg0LCAxOTQ4MzMsIAorICAgIDkyMjUxLCAxOTQ4NjYsIDc0NDIxLCAxMTM4MiwgOTgzNjMxLCA5ODM2MzcsIDEyNzg5MSwgMTI3NDg0LCAxOTQ4MzMsIAogICAgIDE5NDgzMiwgNjY4MSwgMTI3NDgyLCAxMjY5MywgMTk0ODM2LCA0MjcyNywgNzgxOTYsIDEyODI1MiwgNzgxOTUsIDY1NDQyLCAKLSAgICAxMTk2MTAsIDY5NzMzLCA5OTg5LCA0MzI0OCwgNjYyNDgsIDE5NDgxNiwgMCwgMTk0ODE4LCAxMjg4NDUsIDE5NDgyMCwgCisgICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDExMzIxLCAxMjg4NDUsIDE5NDgyMCwgCiAgICAgMTk0ODE5LCA1Mjk3LCA3MDQyLCAxMzI4NCwgNjExMiwgNzk2OCwgMTk0ODI1LCA3MzkyNywgOTI0NDQsIDE5NDczNiwgCiAgICAgNjU3NDYsIDEyNzQ3NiwgNjk4ODksIDc0Mzg5LCAxMjg2OTYsIDQzNDIsIDQyODM5LCAxOTQ4MzEsIDE2NzcsIDAsIDAsIAogICAgIDEyNjU5MCwgOTE3ODU1LCAxMTA5MSwgMTEwMTEsIDI3MTksIDAsIDAsIDExOTU5NSwgMTAxNjAsIDAsIDAsIDc1ODUsIAogICAgIDY1MTY5LCAyMDUyLCA0MzA4LCA5MjE3NCwgNDMwMDAsIDc1MDUsIDU0MywgNjQ5MTYsIDY0NzM2LCAwLCAwLCA2NDY1NSwgMCwgCi0gICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjk5NCwgOTI3MjgsIDEwODI4LCA5ODM5MzQsIDYyMjgsIDQzMDcsIDM0ODIsIDEyODUyNywgMCwgMCwgMCwgNTA2LCAKLSAgICA3NDU3MywgNDExOTQsIDY1NzM1LCAyMDU1LCA0MzI1NSwgNDExOTUsIDAsIDgxNjksIDk4MzY3MSwgODg0MSwgMCwgNTE2LCAKKyAgICAxMTg5MjIsIDIwNjQsIDAsIDQzMTU4LCA3OTAyLCAwLCA2NTI2NSwgMTk0NjM5LCAwLCAxMjcxNzAsIDAsIDk4MzYyNSwgMCwgCisgICAgMCwgMTI5OTQsIDkyNzI4LCAxMDgyOCwgOTgzOTQzLCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIDAsIDAsIDUwNiwgCisgICAgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCA5ODM2ODAsIDg4NDEsIDAsIDUxNiwgCiAgICAgOTM5NzQsIDIwNjMsIDExOTA1MSwgMzQsIDEyODg1MCwgMTIwMTg2LCAxMTUwNCwgMTYxMiwgNzQzMzMsIDEyMDE4MiwgCiAgICAgMTE4MjcsIDc0MzA4LCAxMjAwMSwgMTIwMTc4LCAxMDI0MiwgNjQ1NjQsIDEyMDE3OSwgNjc5ODYsIDY1ODQsIDc3NDksIAogICAgIDExMDM3LCAwLCAxNzU4LCAxMjcwOTIsIDEwNjY3LCAxMDU2MCwgMTIwMTk3LCA5MjU5MywgMTkzNSwgMTE1MTcsIDEyMDE5MywgCiAgICAgMTIwMTk2LCAxMjAxOTUsIDE5MzEsIDEyMDE4OSwgNzQ4MzksIDEyMDE5MSwgMTIxNywgNjQ3MDIsIDEyNjQzLCA4MjUsIAogICAgIDEyNzgzOCwgMTk0OTA1LCAxMjI5NCwgOTI0MjgsIDc4ODM0LCA5MTM4LCA3ODgzMSwgNzg4MzMsIDEyNjMxLCA3ODgyOSwgCiAgICAgMTEwODAsIDc0NTU0LCA2NDAwMCwgNTU5MSwgMTIzOSwgMCwgMTEzMTMsIDAsIDM0MDMsIDAsIDAsIDY0MzY0LCA5MjI2OSwgCi0gICAgMCwgNzQ1ODIsIDg5OTgsIDEyOTg4LCAwLCA5MTUyLCA5ODM4NDAsIDAsIDEyNjQ4NCwgNjc1ODksIDQxODUwLCA2NDI5MCwgCisgICAgMCwgNzQ1ODIsIDg5OTgsIDEyOTg4LCAwLCA5MTUyLCA5ODM4NDksIDAsIDEyNjQ4NCwgNjc1ODksIDQxODUwLCA2NDI5MCwgCiAgICAgMzQzMywgOTIzOTMsIDEyNjE1LCAxNTk0LCA0MjE5MiwgNjkxNCwgNjc2MDMsIDAsIDExOTU2OSwgNzQ1NjUsIDQxMzUzLCAKICAgICA2NzYwMiwgNjc2MTEsIDQzMzcsIDAsIDEyNzI5NiwgOTE4LCA2NTAzNSwgNDEzNTEsIDc2ODEsIDE5NDkwMCwgNDI1NzcsIAogICAgIDQxMzkzLCAxMjY2OCwgMTk0OTA0LCAyNDc3LCAxMjcyODUsIDAsIDEyNzMwMSwgMCwgNjc2MDQsIDE5NDg4MCwgMTI3MjM1LCAKQEAgLTE5Nzc2LDE0ICsxOTc5NiwxNCBAQAogICAgIDczNzk2LCAwLCAxMTkyMjgsIDEyMDM1LCAwLCAyODE4LCAwLCA3NDQxMSwgNzM3OTMsIDAsIDQxNzIsIDAsIDAsIDgzNzMsIAogICAgIDEwODczLCAxMjE5NywgMCwgMCwgOTIyNjUsIDY5NzA2LCAwLCA3ODIxMCwgMCwgMTI4MTEwLCAxOTQ4NjUsIDEyNjk4MiwgCiAgICAgNzQ1NjMsIDY0ODI4LCAxMTQxOSwgMTk0ODY4LCA3NjYsIDEyNTcsIDAsIDExODg0NSwgMTEzODEsIDMyNjUsIDY2NjE3LCAKLSAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk0MSwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAorICAgIDMyNzQsIDEyNzM2NSwgMTI2NTIzLCA5NDA0MiwgOTgzOTUwLCA3NDUyMiwgNDE5ODksIDAsIDAsIDEyODc5OCwgMzI2MywgMCwgCiAgICAgNjU2NzIsIDAsIDMyNzAsIDY0NTM5LCAxMTQ4OSwgMCwgMCwgMCwgMCwgOTUwNSwgNjU1MTgsIDE5NDc3NiwgNzU2LCAKICAgICAxOTQ2MDUsIDAsIDAsIDAsIDcyNjEsIDAsIDE4NiwgMCwgMTE5MTU2LCA1NzcwLCAxMzE3OSwgNjU4MzAsIDEyNjEyLCAKLSAgICAxMjk0OSwgNjQ4NTYsIDEyODAwLCA5ODM4OTIsIDc0MjAzLCA2NDcxOCwgMTE1MDcsIDAsIDkyNDM0LCAxMTg5MjksIDAsIAorICAgIDEyOTQ5LCA2NDg1NiwgMTI4MDAsIDk4MzkwMSwgNzQyMDMsIDY0NzE4LCAxMTUwNywgMCwgOTI0MzQsIDExODkyOSwgMCwgCiAgICAgMTE1NzgsIDAsIDExOTI5NiwgMCwgMCwgMCwgMCwgNzQ1NjgsIDkyNTQsIDAsIDE3OTQsIDEyMDIxNywgNjQ1MjEsIDU2MjQsIAogICAgIDEyMDIyMCwgMTIwMjIxLCAxMTk5NTgsIDEyMDIyMywgMzYxNywgNjY2MzYsIDY0ODg2LCA5NDA2MSwgMTIwMjEyLCAKICAgICAxMjAyMTMsIDEyMDIxNCwgMTg3MiwgNjY1MDgsIDEyMDQ2NywgNDEwNzksIDEwNzQ4LCA1NTAyLCAxMTkzMzAsIDQ0NTIsIDAsIAotICAgIDk4Mzc2MiwgOTI1MjYsIDQ1MTEsIDAsIDk4Mzg2OCwgNjQ2NzgsIDExNDI1LCAwLCA0MzI0NSwgMTIzMSwgMTk0NzgzLCAKKyAgICA5ODM3NzEsIDkyNTI2LCA0NTExLCAwLCA5ODM4NzcsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgCiAgICAgNjk5MDMsIDAsIDkwMDMsIDgxOTIsIDAsIDUzMDUsIDk2NTMsIDEwNjE2LCA4Njk0LCA5NTQ2LCAwLCAwLCAxMjA0NzgsIAogICAgIDEyMDIwMCwgNjUyMDUsIDEyMDIwMiwgNjQwNjMsIDk4NzgsIDc0NzgwLCAxMTk2MjYsIDc4MjAyLCA2NDA1OCwgODc5OSwgCiAgICAgNDIxMzEsIDAsIDY0MDYyLCAxMDI4LCA2NDA2MCwgNjQwNTksIDgzNywgMTA1NjcsIDAsIDQzMTAzLCAwLCAxMjA3NTQsIApAQCAtMTk3OTIsMjYgKzE5ODEyLDI2IEBACiAgICAgNjQwMzIsIDQyNzM1LCA2NDAzOCwgNjQwMzcsIDY0MDM2LCA2NDAzNSwgNDI5MSwgMTk0OTI4LCA2NDAxNSwgNjQwMTQsIAogICAgIDY0NjgxLCAxOTQ5MzAsIDAsIDc4MTQ1LCAwLCA0MzA5MCwgMCwgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgCiAgICAgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgNzgxNTMsIDI1MzgsIDY0MDA5LCAyMDQsIDAsIDQ4MDIsIDQxMTEsIAotICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI1OCwgMCwgNDc2NywgOTM0MywgCisgICAgODIzOSwgOTA5OCwgNDgwNSwgNjQwMDEsIDY0MDU3LCA3ODg1LCA3MjQ3LCA2NDA1NCwgOTgzMjY2LCAwLCA0NzY3LCA5MzQzLCAKICAgICA2NDA0OSwgNjQwNDgsIDEyMDAzNCwgMTEzMywgNjQwNTMsIDY0MDUyLCA0MzQ1MywgNjQwNTAsIDQxMzQwLCAxMTg5NzUsIAogICAgIDE5NDgzNSwgMTAwMDUsIDEyMzI5LCA0MTMzMywgMCwgODQ4OSwgMTk0MiwgMCwgMTk0ODM0LCA0MjUyMCwgMTI4MjQ5LCAwLCAKICAgICAwLCAxMDc2MCwgNjQwMjMsIDY0MDIyLCA2NDAyMSwgNjU4MiwgNDM2NzAsIDAsIDY0MDI1LCA5MTY3LCA0MjE1MSwgNzgyNDQsIAotICAgIDk4MzIyNiwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCA3ODI1MiwgNzgyNDgsIAorICAgIDk4MzIzMiwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCA3ODI1MiwgNzgyNDgsIAogICAgIDc3OTE0LCA3ODI0NiwgNzgyNDcsIDAsIDc3OTE1LCA3ODc2NiwgNjc4OCwgMTMwOTQsIDc3OTIwLCA3NTMyLCA0MTQxNCwgCiAgICAgNzg1MjAsIDMxNzksIDc4NTE4LCA2NDc2OSwgNzg1MTQsIDc4NTE3LCAxMTQ2MSwgNzQ0NTQsIDEwNzUxLCA5MDUxLCAKLSAgICAxMjA3MjAsIDY3MDgsIDEwNTM1LCAwLCA2ODIxOCwgNTUyNzQsIDIwMDgsIDY0MDMxLCA2NDAzMCwgMjk0LCA0MTg3NCwgMCwgCi0gICAgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCA0MTc4OCwgMTk0ODQ0LCAwLCA0MzUxLCAKLSAgICA2MzQzLCA0MzI0NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAxMTk4ODksIDExNDMzLCAxMTk4OTUsIAotICAgIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDE5NDgzOSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCAxOTQ5NTUsIDExMzUsIAotICAgIDAsIDAsIDEyODUyNSwgMTk5NSwgNjcyMiwgOTgzOTE2LCAwLCAyNTUyLCA0MTU0NiwgNjAsIDY4Mzk0LCA4NjQ5LCA0MTU0OSwgCi0gICAgNzg0OTYsIDk4MzMxOSwgMCwgNjY4MiwgMCwgNzg2NzksIDY0NzEwLCA0MTU0NywgOTgzNjIxLCAyMDEzLCAxMjgyOTEsIAotICAgIDc4NTMwLCA3ODUzMiwgNzg1MjgsIDc4NTI5LCAxMjgzMiwgNzg0OTMsIDgwODEsIDgzNjIsIDM1MzcsIDExOTkwOCwgOTEzNywgCi0gICAgNzE1NSwgODk5OSwgMCwgNzg1MzMsIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIDIwMDIsIDIwMDAsIAotICAgIDEyMDE3NSwgNTM3LCAwLCA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgOTI2NzQsIDk2MjgsIDY4NDQ2LCAxMjA4MSwgCi0gICAgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIDAsIDAsIDEyMDIwMSwgOTgzNjM3LCAwLCAwLCAzMDU5LCA0NDAyNCwgMTIwMjA0LCAKLSAgICAxMTk5NTMsIDkyNjkzLCAwLCAwLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAzNTkyLCAxMDA3OCwgMCwgCi0gICAgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAxMjg3OTIsIDEwNzQyLCAwLCA0MjkxOCwgMTk5NCwgOTI4MSwgMzI5NiwgCi0gICAgMTI4NjUsIDE5OTcsIDE4OTUsIAorICAgIDEyMDcyMCwgNjcwOCwgMTA1MzUsIDk4MzYyNywgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgCisgICAgNDE4NzQsIDAsIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgCisgICAgMCwgNDM1MSwgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgCisgICAgMTE5ODk1LCAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAKKyAgICAxMTM1LCAwLCAwLCAxMjg1MjUsIDE5OTUsIDY3MjIsIDk4MzkyNSwgMCwgMjU1MiwgNDE1NDYsIDYwLCA2ODM5NCwgODY0OSwgCisgICAgNDE1NDksIDc4NDk2LCA5ODMzMjcsIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDk4MzYzMCwgMjAxMywgCisgICAgMTI4MjkxLCA3ODUzMCwgNzg1MzIsIDc4NTI4LCA3ODUyOSwgMTI4MzIsIDc4NDkzLCA4MDgxLCA4MzYyLCAzNTM3LCAKKyAgICAxMTk5MDgsIDkxMzcsIDcxNTUsIDg5OTksIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAKKyAgICAyMDAyLCAyMDAwLCAxMjAxNzUsIDUzNywgMCwgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDkyNjc0LCA5NjI4LCAKKyAgICA2ODQ0NiwgMTIwODEsIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAwLCAwLCAxMjAyMDEsIDk4MzY0NiwgMCwgMCwgMzA1OSwgCisgICAgNDQwMjQsIDEyMDIwNCwgMTE5OTUzLCA5MjY5MywgMCwgMCwgOTI0NTIsIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgCisgICAgMzU5MiwgMTAwNzgsIDAsIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMTI4NzkyLCAxMDc0MiwgMCwgNDI5MTgsIDE5OTQsIAorICAgIDkyODEsIDMyOTYsIDEyODY1LCAxOTk3LCAxODk1LCAKIH07CiAKICNkZWZpbmUgY29kZV9tYWdpYyA0NwpAQCAtMTk4MTksNyArMTk4MzksNyBAQAogI2RlZmluZSBjb2RlX3BvbHkgMzI3NzEKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX3N0YXJ0ID0gMHhmMDAwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWMxOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX2VuZCA9IDB4ZjAxYzk7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVfYWxpYXNlc1tdID0gewogICAgIDB4MDAwMCwKICAgICAweDAwMDAsCkBAIC0xOTk4Miw2ICsyMDAwMiw4IEBACiAgICAgMHgwMUEyLAogICAgIDB4MDFBMywKICAgICAweDAzNEYsCisgICAgMHgwNjFDLAorICAgIDB4MDcwOSwKICAgICAweDBDREUsCiAgICAgMHgwRTlELAogICAgIDB4MEU5RiwKQEAgLTIwMDA1LDYgKzIwMDI3LDEwIEBACiAgICAgMHgyMDJGLAogICAgIDB4MjA1RiwKICAgICAweDIwNjAsCisgICAgMHgyMDY2LAorICAgIDB4MjA2NywKKyAgICAweDIwNjgsCisgICAgMHgyMDY5LAogICAgIDB4MjExOCwKICAgICAweDI0NDgsCiAgICAgMHgyNDQ5LApAQCAtMjAwMjksNiArMjAwNTUsOCBAQAogICAgIDB4RkVGRiwKICAgICAweEZFRkYsCiAgICAgMHhGRUZGLAorICAgIDB4MTIyRDQsCisgICAgMHgxMjJENSwKICAgICAweDFEMEM1LAogICAgIDB4RTAxMDAsCiAgICAgMHhFMDEwMSwKQEAgLTIwMjc4LDcgKzIwMzA2LDcgQEAKIH0gbmFtZWRfc2VxdWVuY2U7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZWRfc2VxdWVuY2VzX3N0YXJ0ID0gMHhmMDIwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZWRfc2VxdWVuY2VzX2VuZCA9IDB4ZjAzYTU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19lbmQgPSAweGYwM2FlOwogc3RhdGljIGNvbnN0IG5hbWVkX3NlcXVlbmNlIG5hbWVkX3NlcXVlbmNlc1tdID0gewogICAgIHsyLCB7MHgwMTAwLCAweDAzMDB9fSwKICAgICB7MiwgezB4MDEwMSwgMHgwMzAwfX0sCkBAIC0yMDM0OSw2ICsyMDM3NywxNSBAQAogICAgIHsyLCB7MHgwMjU5LCAweDAzMDF9fSwKICAgICB7MiwgezB4MDI1QSwgMHgwMzAwfX0sCiAgICAgezIsIHsweDAyNUEsIDB4MDMwMX19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Mjd9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjQ4fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDY0OX19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2QzZ9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM3fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDOH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2RDB9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkQ1fX0sCisgICAgezIsIHsweDA2NDYsIDB4MDZBOX19LAogICAgIHszLCB7MHgwOTk1LCAweDA5Q0QsIDB4MDlCN319LAogICAgIHsyLCB7MHgwQjk1LCAweDBCQ0R9fSwKICAgICB7MiwgezB4MEI5OSwgMHgwQkNEfX0sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3ppcGltcG9ydC5jIGIvTW9kdWxlcy96aXBpbXBvcnQuYwppbmRleCAyZmViMmE4Li44ZmU5MTk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3ppcGltcG9ydC5jCisrKyBiL01vZHVsZXMvemlwaW1wb3J0LmMKQEAgLTE0LDYgKzE0LDEwIEBACiAgICAgaW50IHR5cGU7CiB9OwogCisjaWZkZWYgQUxUU0VQCitfUHlfSURFTlRJRklFUihyZXBsYWNlKTsKKyNlbmRpZgorCiAvKiB6aXBfc2VhcmNob3JkZXIgZGVmaW5lcyBob3cgd2Ugc2VhcmNoIGZvciBhIG1vZHVsZSBpbiB0aGUgWmlwCiAgICBhcmNoaXZlOiB3ZSBmaXJzdCBzZWFyY2ggZm9yIGEgcGFja2FnZSBfX2luaXRfXywgdGhlbiBmb3IKICAgIG5vbi1wYWNrYWdlIC5weWMsIC5weW8gYW5kIC5weSBlbnRyaWVzLiBUaGUgLnB5YyBhbmQgLnB5byBlbnRyaWVzCkBAIC02Niw5ICs3MCw2IEBACiAgICAgUHlPYmplY3QgKnBhdGgsICpmaWxlcywgKnRtcDsKICAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuLCBmbGVuOwotI2lmZGVmIEFMVFNFUAotICAgIF9QeV9JREVOVElGSUVSKHJlcGxhY2UpOwotI2VuZGlmCiAKICAgICBpZiAoIV9QeUFyZ19Ob0tleXdvcmRzKCJ6aXBpbXBvcnRlcigpIiwga3dkcykpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTExNyw2ICsxMTgsOCBAQAogICAgICAgICBpZiAoZmxlbiA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9TdWJzdHJpbmcocGF0aCwgMCwgZmxlbik7CisgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFppcEltcG9ydEVycm9yLCAibm90IGEgWmlwIGZpbGUiKTsKQEAgLTQ2OSwxMCArNDcyLDEzIEBACiAgICAgaWYgKGlzcGFja2FnZSkgewogICAgICAgICAvKiBhZGQgX19wYXRoX18gdG8gdGhlIG1vZHVsZSAqYmVmb3JlKiB0aGUgY29kZSBnZXRzCiAgICAgICAgICAgIGV4ZWN1dGVkICovCi0gICAgICAgIFB5T2JqZWN0ICpwa2dwYXRoLCAqZnVsbHBhdGg7Ci0gICAgICAgIFB5T2JqZWN0ICpzdWJuYW1lID0gZ2V0X3N1Ym5hbWUoZnVsbG5hbWUpOworICAgICAgICBQeU9iamVjdCAqcGtncGF0aCwgKmZ1bGxwYXRoLCAqc3VibmFtZTsKICAgICAgICAgaW50IGVycjsKIAorICAgICAgICBzdWJuYW1lID0gZ2V0X3N1Ym5hbWUoZnVsbG5hbWUpOworICAgICAgICBpZiAoc3VibmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICBmdWxscGF0aCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlVSVjJVUlVSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmFyY2hpdmUsIFNFUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+cHJlZml4LCBzdWJuYW1lKTsKQEAgLTU1NCw5ICs1NjAsNiBAQAogewogICAgIFppcEltcG9ydGVyICpzZWxmID0gKFppcEltcG9ydGVyICopb2JqOwogICAgIFB5T2JqZWN0ICpwYXRoLCAqa2V5OwotI2lmZGVmIEFMVFNFUAotICAgIF9QeV9JREVOVElGSUVSKHJlcGxhY2UpOwotI2VuZGlmCiAgICAgUHlPYmplY3QgKnRvY19lbnRyeTsKICAgICBQeV9zc2l6ZV90IHBhdGhfc3RhcnQsIHBhdGhfbGVuLCBsZW47CiAKQEAgLTg2Miw2ICs4NjUsNyBAQAogICAgIGxvbmcgbCwgY291bnQ7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGNoYXIgbmFtZVtNQVhQQVRITEVOICsgNV07CisgICAgY2hhciBkdW1teVs4XTsgLyogQnVmZmVyIHRvIHJlYWQgdW51c2VkIGhlYWRlciB2YWx1ZXMgaW50byAqLwogICAgIFB5T2JqZWN0ICpuYW1lb2JqID0gTlVMTDsKICAgICBjaGFyICpwLCBlbmRvZl9jZW50cmFsX2RpclsyMl07CiAgICAgUHlfc3NpemVfdCBhcmNfb2Zmc2V0OyAgLyogQWJzb2x1dGUgb2Zmc2V0IHRvIHN0YXJ0IG9mIHRoZSB6aXAtYXJjaGl2ZS4gKi8KQEAgLTg2OSw3ICs4NzMsNyBAQAogICAgIGNvbnN0IGNoYXIgKmNoYXJzZXQ7CiAgICAgaW50IGJvb3RzdHJhcDsKIAotICAgIGZwID0gX1B5X2ZvcGVuKGFyY2hpdmUsICJyYiIpOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihhcmNoaXZlLCAicmIiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCBvcGVuIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwpAQCAtOTA1LDE3ICs5MDksMjUgQEAKIAogICAgIC8qIFN0YXJ0IG9mIENlbnRyYWwgRGlyZWN0b3J5ICovCiAgICAgY291bnQgPSAwOworICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCwgMCkgPT0gLTEpCisgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFB5T2JqZWN0ICp0OwogICAgICAgICBpbnQgZXJyOwogCi0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCwgMCkgPT0gLTEpICAvKiBTdGFydCBvZiBmaWxlIGhlYWRlciAqLwotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKyAgICAgICAgLyogU3RhcnQgb2YgZmlsZSBoZWFkZXIgKi8KICAgICAgICAgbCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKKyAgICAgICAgaWYgKGwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIGlmIChsICE9IDB4MDIwMTRCNTApCiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIEJhZDogQ2VudHJhbCBEaXIgRmlsZSBIZWFkZXIgKi8KLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0ICsgOCwgMCkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworCisgICAgICAgIC8qIE9uIFdpbmRvd3MsIGNhbGxpbmcgZnNlZWsgdG8gc2tpcCBvdmVyIHRoZSBmaWVsZHMgd2UgZG9uJ3QgdXNlIGlzCisgICAgICAgIHNsb3dlciB0aGFuIHJlYWRpbmcgdGhlIGRhdGEgaW50byBhIGR1bW15IGJ1ZmZlciBiZWNhdXNlIGZzZWVrIGZsdXNoZXMKKyAgICAgICAgc3RkaW8ncyBpbnRlcm5hbCBidWZmZXJzLiBTZWUgaXNzdWUgIzg3NDUuICovCisgICAgICAgIGlmIChmcmVhZChkdW1teSwgMSwgNCwgZnApICE9IDQpIC8qIFNraXAgdW51c2VkIGZpZWxkcywgYXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgIGdvdG8gZmlsZV9lcnJvcjsKKwogICAgICAgICBmbGFncyA9ICh1bnNpZ25lZCBzaG9ydClQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwogICAgICAgICBjb21wcmVzcyA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIHRpbWUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwpAQCAtOTI0LDEyICs5MzYsMTUgQEAKICAgICAgICAgZGF0YV9zaXplID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgICAgICBmaWxlX3NpemUgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgICAgIG5hbWVfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7Ci0gICAgICAgIGhlYWRlcl9zaXplID0gNDYgKyBuYW1lX3NpemUgKworICAgICAgICBoZWFkZXJfc2l6ZSA9IG5hbWVfc2l6ZSArCiAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCkgKwogICAgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQgKyA0MiwgMCkgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGZzZWVrX2Vycm9yOworICAgICAgICBpZiAoZnJlYWQoZHVtbXksIDEsIDgsIGZwKSAhPSA4KSAvKiBTa2lwIHVudXNlZCBmaWVsZHMsIGF2b2lkIGZzZWVrICovCisgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgICAgIGZpbGVfb2Zmc2V0ID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApICsgYXJjX29mZnNldDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCiAgICAgICAgIGlmIChuYW1lX3NpemUgPiBNQVhQQVRITEVOKQogICAgICAgICAgICAgbmFtZV9zaXplID0gTUFYUEFUSExFTjsKIApAQCAtOTQxLDcgKzk1Niw5IEBACiAgICAgICAgICAgICBwKys7CiAgICAgICAgIH0KICAgICAgICAgKnAgPSAwOyAgICAgICAgIC8qIEFkZCB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgKi8KLSAgICAgICAgaGVhZGVyX29mZnNldCArPSBoZWFkZXJfc2l6ZTsKKyAgICAgICAgZm9yICg7IGkgPCBoZWFkZXJfc2l6ZTsgaSsrKSAvKiBTa2lwIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgKi8KKyAgICAgICAgICAgIGlmKGdldGMoZnApID09IEVPRikgLyogQXZvaWQgZnNlZWsgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAKICAgICAgICAgYm9vdHN0cmFwID0gMDsKICAgICAgICAgaWYgKGZsYWdzICYgMHgwODAwKQpAQCAtOTg4LDcgKzEwMDUsNyBAQAogICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgemlwaW1wb3J0OiBmb3VuZCAlbGQgbmFtZXMgaW4gJVJcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwgYXJjaGl2ZSk7CiAgICAgcmV0dXJuIGZpbGVzOwotZnNlZWtfZXJyb3I6CitmaWxlX2Vycm9yOgogICAgIGZjbG9zZShmcCk7CiAgICAgUHlfWERFQ1JFRihmaWxlcyk7CiAgICAgUHlfWERFQ1JFRihuYW1lb2JqKTsKQEAgLTEwNTUsNyArMTA3Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZwID0gX1B5X2ZvcGVuKGFyY2hpdmUsICJyYiIpOworICAgIGZwID0gX1B5X2ZvcGVuX29iaihhcmNoaXZlLCAicmIiKTsKICAgICBpZiAoIWZwKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLApAQCAtMTA3Myw5ICsxMDkwLDEwIEBACiAgICAgbCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICBpZiAobCAhPSAweDA0MDM0QjUwKSB7CiAgICAgICAgIC8qIEJhZDogTG9jYWwgRmlsZSBIZWFkZXIgKi8KLSAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlVSIsCi0gICAgICAgICAgICAgICAgICAgICBhcmNoaXZlKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgbG9jYWwgZmlsZSBoZWFkZXIgaW4gJVUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOwogICAgICAgICBmY2xvc2UoZnApOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDg3LDYgKzExMDUsMTAgQEAKIAogICAgIGwgPSAzMCArIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCkgKwogICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOyAgICAgICAgLyogbG9jYWwgaGVhZGVyIHNpemUgKi8KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgZmlsZV9vZmZzZXQgKz0gbDsgICAgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgZGF0YSAqLwogCiAgICAgYnl0ZXNfc2l6ZSA9IGNvbXByZXNzID09IDAgPyBkYXRhX3NpemUgOiBkYXRhX3NpemUgKyAxOwpAQCAtMTI0OSw3ICsxMjcxLDcgQEAKIH0KIAogLyogR2l2ZW4gYSBzdHJpbmcgYnVmZmVyIGNvbnRhaW5pbmcgUHl0aG9uIHNvdXJjZSBjb2RlLCBjb21waWxlIGl0Ci0gICByZXR1cm4gYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGFzIGEgbmV3IHJlZmVyZW5jZS4gKi8KKyAgIGFuZCByZXR1cm4gYSBjb2RlIG9iamVjdCBhcyBhIG5ldyByZWZlcmVuY2UuICovCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcGlsZV9zb3VyY2UoUHlPYmplY3QgKnBhdGhuYW1lLCBQeU9iamVjdCAqc291cmNlKQogewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0NoYW5nZUxvZyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKaW5kZXggZjMxMGJiMC4uZjIyYWFiYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0NoYW5nZUxvZworKysgYi9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCkBAIC0xLDEyICsxLDI3NiBAQAogCiAgICAgICAgICAgICAgICAgQ2hhbmdlTG9nIGZpbGUgZm9yIHpsaWIKIAorQ2hhbmdlcyBpbiAxLjIuOCAoMjggQXByIDIwMTMpCistIFVwZGF0ZSBjb250cmliL21pbml6aXAvaW93aW4zMi5jIGZvciBXaW5kb3dzIFJUIFtWb2xsYW50XQorLSBEbyBub3QgZm9yY2UgWl9DT05TVCBmb3IgQysrCistIENsZWFuIHVwIGNvbnRyaWIvdnN0dWRpbyBbUm+nXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaAorLSBGaXggbWl4ZWQgbGluZSBlbmRpbmdzIGluIGNvbnRyaWIvdnN0dWRpbworCitDaGFuZ2VzIGluIDEuMi43LjMgKDEzIEFwciAyMDEzKQorLSBGaXggdmVyc2lvbiBudW1iZXJzIGFuZCBETEwgbmFtZXMgaW4gY29udHJpYi92c3R1ZGlvLyovemxpYi5yYworCitDaGFuZ2VzIGluIDEuMi43LjIgKDEzIEFwciAyMDEzKQorLSBDaGFuZ2UgY2hlY2sgZm9yIGEgZm91ci1ieXRlIHR5cGUgYmFjayB0byBoZXhhZGVjaW1hbAorLSBGaXggdHlwbyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MKKy0gQWRkIGNhc3RzIGluIGd6d3JpdGUuYyBmb3IgcG9pbnRlciBkaWZmZXJlbmNlcworCitDaGFuZ2VzIGluIDEuMi43LjEgKDI0IE1hciAyMDEzKQorLSBSZXBsYWNlIHVzZSBvZiB1bnNhZmUgc3RyaW5nIGZ1bmN0aW9ucyB3aXRoIHNucHJpbnRmIGlmIGF2YWlsYWJsZQorLSBBdm9pZCBpbmNsdWRpbmcgc3RkZGVmLmggb24gV2luZG93cyBmb3IgWl9TT0xPIGNvbXBpbGUgW05pZXNzaW5rXQorLSBGaXggZ3pnZXRjIHVuZGVmaW5lIHdoZW4gWl9QUkVGSVggc2V0IFtUdXJrXQorLSBFbGltaW5hdGUgdXNlIG9mIG1rdGVtcCBpbiBNYWtlZmlsZSAobm90IGFsd2F5cyBhdmFpbGFibGUpCistIEZpeCBidWcgaW4gJ0YnIG1vZGUgZm9yIGd6b3BlbigpCistIEFkZCBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGZ1bmN0aW9uCistIENvcnJlY3QgY29tbWVudCBpbiBkZWZsYXRlLmgKKy0gVXNlIF9zbnByaW50ZiBmb3Igc25wcmludGYgaW4gTWljcm9zb2Z0IEMKKy0gT24gRGFyd2luLCBvbmx5IHVzZSAvdXNyL2Jpbi9saWJ0b29sIGlmIGxpYnRvb2wgaXMgbm90IEFwcGxlCistIERlbGV0ZSAiLS12ZXJzaW9uIiBmaWxlIGlmIGNyZWF0ZWQgYnkgImFyIC0tdmVyc2lvbiIgW1JpY2hhcmQgRy5dCistIEZpeCBjb25maWd1cmUgY2hlY2sgZm9yIHZlcmFjaXR5IG9mIGNvbXBpbGVyIGVycm9yIHJldHVybiBjb2RlcworLSBGaXggQ01ha2UgY29tcGlsYXRpb24gb2Ygc3RhdGljIGxpYiBmb3IgTVNWQzIwMTAgeDY0CistIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaW4gaW5mYmFjazkuYworLSBGaXggYXJndW1lbnQgY2hlY2tzIGluIGd6bG9nX2NvbXByZXNzKCkgYW5kIGd6bG9nX3dyaXRlKCkKKy0gQ2xlYW4gdXAgdGhlIHVzYWdlIG9mIHpfY29uc3QgYW5kIHJlc3BlY3QgY29uc3QgdXNhZ2Ugd2l0aGluIHpsaWIKKy0gQ2xlYW4gdXAgZXhhbXBsZXMvZ3psb2cuW2NoXSBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnQgdHlwZXMKKy0gQXZvaWQgc2hpZnQgZXF1YWwgdG8gYml0cyBpbiB0eXBlIChjYXVzZWQgZW5kbGVzcyBsb29wKQorLSBGaXggdW5pbnRpYWxpemVkIHZhbHVlIGJ1ZyBpbiBnenB1dGMoKSBpbnRyb2R1Y2VkIGJ5IGNvbnN0IHBhdGNoZXMKKy0gRml4IG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGluIGV4YW1wbGVzL3pyYW4uYyBbTm9yXQorLSBGaXggYnVnIHdoZXJlIGd6b3BlbigpLCBnemNsb3NlKCkgd291bGQgd3JpdGUgYW4gZW1wdHkgZmlsZQorLSBGaXggYnVnIGluIGd6Y2xvc2UoKSB3aGVuIGd6d3JpdGUoKSBydW5zIG91dCBvZiBtZW1vcnkKKy0gQ2hlY2sgZm9yIGlucHV0IGJ1ZmZlciBtYWxsb2MgZmFpbHVyZSBpbiBleGFtcGxlcy9nemFwcGVuZC5jCistIEFkZCBub3RlIHRvIGNvbnRyaWIvYmxhc3QgdG8gdXNlIGJpbmFyeSBtb2RlIGluIHN0ZGlvCistIEZpeCBjb21wYXJpc29ucyBvZiBkaWZmZXJlbnRseSBzaWduZWQgaW50ZWdlcnMgaW4gY29udHJpYi9ibGFzdAorLSBDaGVjayBmb3IgaW52YWxpZCBjb2RlIGxlbmd0aCBjb2RlcyBpbiBjb250cmliL3B1ZmYKKy0gRml4IHNlcmlvdXMgYnV0IHZlcnkgcmFyZSBkZWNvbXByZXNzaW9uIGJ1ZyBpbiBpbmZ0cmVlcy5jCistIFVwZGF0ZSBpbmZsYXRlQmFjaygpIGNvbW1lbnRzLCBzaW5jZSBpbmZsYXRlKCkgY2FuIGJlIGZhc3RlcgorLSBVc2UgdW5kZXJzY29yZWQgSS9PIGZ1bmN0aW9uIG5hbWVzIGZvciBXSU5BUElfRkFNSUxZCistIEFkZCBfdHJfZmx1c2hfYml0cyB0byB0aGUgZXh0ZXJuYWwgc3ltYm9scyBwcmVmaXhlZCBieSAtLXpwcmVmaXgKKy0gQWRkIGNvbnRyaWIvdnN0dWRpby92YzEwIHByZS1idWlsZCBzdGVwIGZvciBzdGF0aWMgb25seQorLSBRdW90ZSAtLXZlcnNpb24tc2NyaXB0IGFyZ3VtZW50IGluIENNYWtlTGlzdHMudHh0CistIERvbid0IHNwZWNpZnkgLS12ZXJzaW9uLXNjcmlwdCBvbiBBcHBsZSBwbGF0Zm9ybXMgaW4gQ01ha2VMaXN0cy50eHQKKy0gRml4IGNhc3RpbmcgZXJyb3IgaW4gY29udHJpYi90ZXN0emxpYi90ZXN0emxpYi5jCistIEZpeCB0eXBlcyBpbiBjb250cmliL21pbml6aXAgdG8gbWF0Y2ggcmVzdWx0IG9mIGdldF9jcmNfdGFibGUoKQorLSBTaW1wbGlmeSBjb250cmliL3ZzdHVkaW8vdmMxMCB3aXRoICdkJyBzdWZmaXgKKy0gQWRkIFRPUCBzdXBwb3J0IHRvIHdpbjMyL01ha2VmaWxlLm1zYworLSBTdXBvcnQgaTY4NiBhbmQgYW1kNjQgYXNzZW1ibGVyIGJ1aWxkcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggdHlwb3MgaW4gdGhlIHVzZSBvZiBfTEFSR0VGSUxFNjRfU09VUkNFIGluIHpjb25mLmgKKy0gQWRkIHZjMTEgYW5kIHZjMTIgYnVpbGQgZmlsZXMgdG8gY29udHJpYi92c3R1ZGlvCistIEFkZCBnenZwcmludGYoKSBhcyBhbiB1bmRvY3VtZW50ZWQgZnVuY3Rpb24gaW4gemxpYgorLSBGaXggY29uZmlndXJlIGZvciBTdW4gc2hlbGwKKy0gUmVtb3ZlIHJ1bnRpbWUgY2hlY2sgaW4gY29uZmlndXJlIGZvciBmb3VyLWJ5dGUgaW50ZWdlciB0eXBlCistIEFkZCBjYXN0cyBhbmQgY29uc3RzIHRvIGVhc2UgdXNlciBjb252ZXJzaW9uIHRvIEMrKworLSBBZGQgbWFuIHBhZ2VzIGZvciBtaW5pemlwIGFuZCBtaW5pdW56aXAKKy0gSW4gTWFrZWZpbGUgdW5pbnN0YWxsLCBkb24ndCBybSBpZiBwcmVjZWRpbmcgY2QgZmFpbHMKKy0gRG8gbm90IHJldHVybiBaX0JVRl9FUlJPUiBpZiBkZWZsYXRlUGFyYW0oKSBoYXMgbm90aGluZyB0byB3cml0ZQorCitDaGFuZ2VzIGluIDEuMi43ICgyIE1heSAyMDEyKQorLSBSZXBsYWNlIHVzZSBvZiBtZW1tb3ZlKCkgd2l0aCBhIHNpbXBsZSBjb3B5IGZvciBwb3J0YWJpbGl0eQorLSBUZXN0IGZvciBleGlzdGVuY2Ugb2Ygc3RyZXJyb3IKKy0gUmVzdG9yZSBnemdldGNfIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggMS4yLjYKKy0gRml4IGJ1aWxkIHdpdGggbm9uLUdOVSBtYWtlIG9uIFNvbGFyaXMKKy0gUmVxdWlyZSBnY2MgNC4wIG9yIGxhdGVyIG9uIE1hYyBPUyBYIHRvIHVzZSB0aGUgaGlkZGVuIGF0dHJpYnV0ZQorLSBJbmNsdWRlIHVuaXN0ZC5oIGZvciBXYXRjb20gQworLSBVc2UgX19XQVRDT01DX18gaW5zdGVhZCBvZiBfX1dBVENPTV9fCistIERvIG5vdCB1c2UgdGhlIHZpc2liaWxpdHkgYXR0cmlidXRlIGlmIE5PX1ZJWiBkZWZpbmVkCistIEltcHJvdmUgdGhlIGRldGVjdGlvbiBvZiBubyBoaWRkZW4gdmlzaWJpbGl0eSBhdHRyaWJ1dGUKKy0gQXZvaWQgdXNpbmcgX19pbnQ2NCBmb3IgZ2NjIG9yIHNvbG8gY29tcGlsYXRpb24KKy0gQ2FzdCB0byBjaGFyICogaW4gZ3pwcmludGYgdG8gYXZvaWQgd2FybmluZ3MgW1ppbnNlcl0KKy0gRml4IG1ha2Vfdm1zLmNvbSBmb3IgVkFYIFtaaW5zZXJdCistIERvbid0IHVzZSBsaWJyYXJ5IG9yIGJ1aWx0LWluIGJ5dGUgc3dhcHMKKy0gU2ltcGxpZnkgdGVzdCBhbmQgdXNlIG9mIGdjYyBoaWRkZW4gYXR0cmlidXRlCistIEZpeCBidWcgaW4gZ3pjbG9zZV93KCkgd2hlbiBnendyaXRlKCkgZmFpbHMgdG8gYWxsb2NhdGUgbWVtb3J5CistIEFkZCAieCIgKE9fRVhDTCkgYW5kICJlIiAoT19DTE9FWEVDKSBtb2RlcyBzdXBwb3J0IHRvIGd6b3BlbigpCistIEZpeCBidWcgaW4gdGVzdC9taW5pZ3ppcC5jIGZvciBjb25maWd1cmUgLS1zb2xvCistIEZpeCBjb250cmliL3ZzdHVkaW8gcHJvamVjdCBsaW5rIGVycm9ycyBbTW9oYW5hdGhhc10KKy0gQWRkIGFiaWxpdHkgdG8gY2hvb3NlIHRoZSBidWlsZGVyIGluIG1ha2Vfdm1zLmNvbSBbU2Nod2VkYV0KKy0gQWRkIERFU1RESVIgc3VwcG9ydCB0byBtaW5ndzMyIHdpbjMyL01ha2VmaWxlLmdjYworLSBGaXggY29tbWVudHMgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIGZvciBwcm9wZXIgdXNhZ2UKKy0gQWxsb3cgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9ucyBmb3IgY21ha2UKKy0gR2VuZXJhdGUgYW5kIGluc3RhbGwgdGhlIHBrZy1jb25maWcgZmlsZSB3aXRoIGNtYWtlCistIEJ1aWxkIGJvdGggYSBzdGF0aWMgYW5kIGEgc2hhcmVkIHZlcnNpb24gb2YgemxpYiB3aXRoIGNtYWtlCistIEluY2x1ZGUgdmVyc2lvbiBzeW1ib2xzIGZvciBjbWFrZSBidWlsZHMKKy0gSWYgdXNpbmcgY21ha2Ugd2l0aCBNU1ZDLCBhZGQgdGhlIHNvdXJjZSBkaXJlY3RvcnkgdG8gdGhlIGluY2x1ZGVzCistIFJlbW92ZSB1bm5lZWRlZCBFWFRSQV9DRkxBR1MgZnJvbSB3aW4zMi9NYWtlZmlsZS5nY2MgW1RydXRhXQorLSBNb3ZlIG9ic29sZXRlIGVteCBtYWtlZmlsZSB0byBvbGQgW1RydXRhXQorLSBBbGxvdyB0aGUgdXNlIG9mIC1XdW5kZWYgd2hlbiBjb21waWxpbmcgb3IgdXNpbmcgemxpYgorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSAtdSBvcHRpb24gd2l0aCBta3RlbXAKKy0gSW1wcm92ZSBpbmZsYXRlKCkgZG9jdW1lbnRhdGlvbiBvbiB0aGUgdXNlIG9mIFpfRklOSVNICistIFJlY29nbml6ZSBjbGFuZyBhcyBnY2MKKy0gQWRkIGd6b3Blbl93KCkgaW4gV2luZG93cyBmb3Igd2lkZSBjaGFyYWN0ZXIgcGF0aCBuYW1lcworLSBSZW5hbWUgemNvbmYuaCBpbiBDTWFrZUxpc3RzLnR4dCB0byBtb3ZlIGl0IG91dCBvZiB0aGUgd2F5CistIEFkZCBzb3VyY2UgZGlyZWN0b3J5IGluIENNYWtlTGlzdHMudHh0IGZvciBidWlsZGluZyBleGFtcGxlcworLSBMb29rIGluIGJ1aWxkIGRpcmVjdG9yeSBmb3IgemxpYi5wYyBpbiBDTWFrZUxpc3RzLnR4dAorLSBSZW1vdmUgZ3pmbGFncyBmcm9tIHpsaWJ2Yy5kZWYgaW4gdmM5IGFuZCB2YzEwCistIEZpeCBjb250cmliL21pbml6aXAgY29tcGlsYXRpb24gaW4gdGhlIE1pbkdXIGVudmlyb25tZW50CistIFVwZGF0ZSAuL2NvbmZpZ3VyZSBmb3IgU29sYXJpcywgc3VwcG9ydCAtLTY0IFtNb29uZXldCistIFJlbW92ZSAtUi4gZnJvbSBTb2xhcmlzIHNoYXJlZCBidWlsZCAocG9zc2libGUgc2VjdXJpdHkgaXNzdWUpCistIEF2b2lkIHJhY2UgY29uZGl0aW9uIGZvciBwYXJhbGxlbCBtYWtlICgtaikgcnVubmluZyBleGFtcGxlCistIEZpeCB0eXBlIG1pc21hdGNoIGJldHdlZW4gZ2V0X2NyY190YWJsZSgpIGFuZCBjcmNfdGFibGUKKy0gRml4IHBhcnNpbmcgb2YgdmVyc2lvbiB3aXRoICItIiBpbiBDTWFrZUxpc3RzLnR4dCBbU25pZGVyLCBaaWVnbGVyXQorLSBGaXggdGhlIHBhdGggdG8gemxpYi5tYXAgaW4gQ01ha2VMaXN0cy50eHQKKy0gRm9yY2UgdGhlIG5hdGl2ZSBsaWJ0b29sIGluIE1hYyBPUyBYIHRvIGF2b2lkIEdOVSBsaWJ0b29sIFtCZWViZV0KKy0gQWRkIGluc3RydWN0aW9ucyB0byB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHNoYXJlZCBpbnN0YWxsIFtUb3JyaV0KKworQ2hhbmdlcyBpbiAxLjIuNi4xICgxMiBGZWIgMjAxMikKKy0gQXZvaWQgdGhlIHVzZSBvZiB0aGUgT2JqZWN0aXZlLUMgcmVzZXJ2ZWQgbmFtZSAiaWQiCistIEluY2x1ZGUgaW8uaCBpbiBnemd1dHMuaCBmb3IgTWljcm9zb2Z0IGNvbXBpbGVycworLSBGaXggcHJvYmxlbSB3aXRoIC4vY29uZmlndXJlIC0tcHJlZml4IGFuZCBnemdldGMgbWFjcm8KKy0gSW5jbHVkZSBnel9oZWFkZXIgZGVmaW5pdGlvbiB3aGVuIGNvbXBpbGluZyB6bGliIHNvbG8KKy0gUHV0IGd6ZmxhZ3MoKSBmdW5jdGlvbmFsaXR5IGJhY2sgaW4genV0aWwuYworLSBBdm9pZCBsaWJyYXJ5IGhlYWRlciBpbmNsdWRlIGluIGNyYzMyLmMgZm9yIFpfU09MTworLSBVc2UgbmFtZSBpbiBHQ0NfQ0xBU1NJQyBhcyBDIGNvbXBpbGVyIGZvciBjb3ZlcmFnZSB0ZXN0aW5nLCBpZiBzZXQKKy0gTWlub3IgY2xlYW51cCBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIFVwZGF0ZSBtYWtlX3Ztcy5jb20gW1ppbnNlcl0KKy0gUmVtb3ZlIHVubmVjZXNzYXJ5IGd6Z2V0Y18gZnVuY3Rpb24KKy0gVXNlIG9wdGltaXplZCBieXRlIHN3YXAgb3BlcmF0aW9ucyBmb3IgTWljcm9zb2Z0IGFuZCBHTlUgW1NueWRlcl0KKy0gRml4IG1pbm9yIHR5cG8gaW4gemxpYi5oIGNvbW1lbnRzIFtSemVzbmlvd2llY2tpXQorCitDaGFuZ2VzIGluIDEuMi42ICgyOSBKYW4gMjAxMikKKy0gVXBkYXRlIHRoZSBQYXNjYWwgaW50ZXJmYWNlIGluIGNvbnRyaWIvcGFzY2FsCistIEZpeCBmdW5jdGlvbiBudW1iZXJzIGZvciBnemdldGNfIGluIHpsaWJ2Yy5kZWYgZmlsZXMKKy0gRml4IGNvbmZpZ3VyZS5hYyBmb3IgY29udHJpYi9taW5pemlwIFtTY2hpZmZlcl0KKy0gRml4IGxhcmdlLWVudHJ5IGRldGVjdGlvbiBpbiBtaW5pemlwIG9uIDY0LWJpdCBzeXN0ZW1zIFtTY2hpZmZlcl0KKy0gSGF2ZSAuL2NvbmZpZ3VyZSB1c2UgdGhlIGNvbXBpbGVyIHJldHVybiBjb2RlIGZvciBlcnJvciBpbmRpY2F0aW9uCistIEZpeCBDTWFrZUxpc3RzLnR4dCBmb3IgY3Jvc3MgY29tcGlsYXRpb24gW01jQ2x1cmVdCistIEZpeCBjb250cmliL21pbml6aXAvemlwLmMgZm9yIDY0LWJpdCBhcmNoaXRlY3R1cmVzIFtEYWxzbmVzXQorLSBGaXggY29tcGlsYXRpb24gb2YgY29udHJpYi9taW5pemlwIG9uIEZyZWVCU0QgW01hcnF1ZXpdCistIENvcnJlY3Qgc3VnZ2VzdGVkIHVzYWdlcyBpbiB3aW4zMi9NYWtlZmlsZS5tc2MgW1NoYWNoYXIsIEhvcnZhdGhdCistIEluY2x1ZGUgaW8uaCBmb3IgVHVyYm8gQyAvIEJvcmxhbmQgQyBvbiBhbGwgcGxhdGZvcm1zIFtUcnV0YV0KKy0gTWFrZSB2ZXJzaW9uIGV4cGxpY2l0IGluIGNvbnRyaWIvbWluaXppcC9jb25maWd1cmUuYWMgW0Jvc21hbnNdCistIEF2b2lkIHdhcm5pbmcgZm9yIG5vIGVuY3J5cHRpb24gaW4gY29udHJpYi9taW5pemlwL3ppcC5jIFtWb2xsYW50XQorLSBNaW5vciBjbGVhbnVwIHVwIGNvbnRyaWIvbWluaXppcC91bnppcC5jIFtWb2xsYW50XQorLSBGaXggYnVnIHdoZW4gY29tcGlsaW5nIG1pbml6aXAgd2l0aCBDKysgW1ZvbGxhbnRdCistIFByb3RlY3QgZm9yIGxvbmcgbmFtZSBhbmQgZXh0cmEgZmllbGRzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQXZvaWQgc29tZSB3YXJuaW5ncyBpbiBjb250cmliL21pbml6aXAgW1ZvbGxhbnRdCistIEFkZCAtSS4uLy4uIC1MLi4vLi4gdG8gQ0ZMQUdTIGZvciBtaW5pemlwIGFuZCBtaW5pdW56aXAKKy0gQWRkIG1pc3NpbmcgbGlicyB0byBtaW5pemlwIGxpbmtlciBjb21tYW5kCistIEFkZCBzdXBwb3J0IGZvciBWUEFUSCBidWlsZHMgaW4gY29udHJpYi9taW5pemlwCistIEFkZCBhbiAtLWVuYWJsZS1kZW1vcyBvcHRpb24gdG8gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZQorLSBBZGQgdGhlIGdlbmVyYXRpb24gb2YgY29uZmlndXJlLmxvZyBieSAuL2NvbmZpZ3VyZQorLSBFeGl0IHdoZW4gcmVxdWlyZWQgcGFyYW1ldGVycyBub3QgcHJvdmlkZWQgdG8gd2luMzIvTWFrZWZpbGUuZ2NjCistIEhhdmUgZ3pwdXRjIHJldHVybiB0aGUgY2hhcmFjdGVyIHdyaXR0ZW4gaW5zdGVhZCBvZiB0aGUgYXJndW1lbnQKKy0gVXNlIHRoZSAtbSBvcHRpb24gb24gbGRjb25maWcgZm9yIEJTRCBzeXN0ZW1zIFtUb2JpYXNdCistIENvcnJlY3QgaW4gemxpYi5tYXAgd2hlbiBkZWZsYXRlUmVzZXRLZWVwIHdhcyBhZGRlZAorCitDaGFuZ2VzIGluIDEuMi41LjMgKDE1IEphbiAyMDEyKQorLSBSZXN0b3JlIGd6Z2V0YyBmdW5jdGlvbiBmb3IgYmluYXJ5IGNvbXBhdGliaWxpdHkKKy0gRG8gbm90IHVzZSBfbHNlZWtpNjQgdW5kZXIgQm9ybGFuZCBDKysgW1RydXRhXQorLSBVcGRhdGUgd2luMzIvTWFrZWZpbGUubXNjIHRvIGJ1aWxkIHRlc3QvKi5jIFtUcnV0YV0KKy0gUmVtb3ZlIG9sZC92aXN1YWxjNiBnaXZlbiBDTWFrZWZpbGUgYW5kIG90aGVyIGFsdGVybmF0aXZlcworLSBVcGRhdGUgQVM0MDAgYnVpbGQgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24gW01vbm5lcmF0XQorLSBVcGRhdGUgd2luMzIvTWFrZWZpbGUuZ2NjIHRvIGJ1aWxkIHRlc3QvKi5jIFtUcnV0YV0KKy0gUGVybWl0IHN0cm9uZ2VyIGZsdXNoZXMgYWZ0ZXIgWl9CTE9DSyBmbHVzaGVzCistIEF2b2lkIGV4dHJhbmVvdXMgZW1wdHkgYmxvY2tzIHdoZW4gZG9pbmcgZW1wdHkgZmx1c2hlcworLSBQZXJtaXQgWl9OVUxMIGFyZ3VtZW50cyB0byBkZWZsYXRlUGVuZGluZworLSBBbGxvdyBkZWZsYXRlUHJpbWUoKSB0byBpbnNlcnQgYml0cyBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyZWFtCistIFJlbW92ZSBzZWNvbmQgZW1wdHkgc3RhdGljIGJsb2NrIGZvciBaX1BBUlRJQUxfRkxVU0gKKy0gV3JpdGUgb3V0IGFsbCBvZiB0aGUgYXZhaWxhYmxlIGJpdHMgd2hlbiB1c2luZyBaX0JMT0NLCistIEluc2VydCB0aGUgZmlyc3QgdHdvIHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgYWZ0ZXIgYSBmbHVzaAorCitDaGFuZ2VzIGluIDEuMi41LjIgKDE3IERlYyAyMDExKQorLSBmaXggbGQgZXJyb3I6IHVuYWJsZSB0byBmaW5kIHZlcnNpb24gZGVwZW5kZW5jeSAnWkxJQl8xLjIuNScKKy0gdXNlIHJlbGF0aXZlIHN5bWxpbmtzIGZvciBzaGFyZWQgbGlicworLSBBdm9pZCBzZWFyY2hpbmcgcGFzdCB3aW5kb3cgZm9yIFpfUkxFIHN0cmF0ZWd5CistIEFzc3VyZSB0aGF0IGhpZ2gtd2F0ZXIgbWFyayBpbml0aWFsaXphdGlvbiBpcyBhbHdheXMgYXBwbGllZCBpbiBkZWZsYXRlCistIEFkZCBhc3NlcnRpb25zIHRvIGZpbGxfd2luZG93KCkgaW4gZGVmbGF0ZS5jIHRvIG1hdGNoIGNvbW1lbnRzCistIFVwZGF0ZSBweXRob24gbGluayBpbiBSRUFETUUKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiBnenJlYWQuYworLSBGaXggYnVnIGluIGd6Z2V0cygpIGZvciBhIGNvbmNhdGVuYXRlZCBlbXB0eSBnemlwIHN0cmVhbQorLSBDb3JyZWN0IGVycm9yIGluIGNvbW1lbnQgZm9yIGd6X21ha2UoKQorLSBDaGFuZ2UgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gaWdub3JlIGp1bmsgYWZ0ZXIgZ3ppcCBzdHJlYW1zCistIEFsbG93IGd6cmVhZCgpIGFuZCByZWxhdGVkIHRvIGNvbnRpbnVlIGFmdGVyIGd6Y2xlYXJlcnIoKQorLSBBbGxvdyBnenJld2luZCgpIGFuZCBnenNlZWsoKSBhZnRlciBhIHByZW1hdHVyZSBlbmQtb2YtZmlsZQorLSBTaW1wbGlmeSBnenNlZWsoKSBub3cgdGhhdCByYXcgYWZ0ZXIgZ3ppcCBpcyBpZ25vcmVkCistIENoYW5nZSBnemdldGMoKSB0byBhIG1hY3JvIGZvciBzcGVlZCAofjQwJSBzcGVlZHVwIGluIHRlc3RpbmcpCistIEZpeCBnemNsb3NlKCkgdG8gcmV0dXJuIHRoZSBhY3R1YWwgZXJyb3IgbGFzdCBlbmNvdW50ZXJlZAorLSBBbHdheXMgYWRkIGxhcmdlIGZpbGUgc3VwcG9ydCBmb3Igd2luZG93cworLSBJbmNsdWRlIHpjb25mLmggZm9yIHdpbmRvd3MgbGFyZ2UgZmlsZSBzdXBwb3J0CistIEluY2x1ZGUgemNvbmYuaC5jbWFrZWluIGZvciB3aW5kb3dzIGxhcmdlIGZpbGUgc3VwcG9ydAorLSBVcGRhdGUgemNvbmYuaC5jbWFrZWluIG9uIG1ha2UgZGlzdGNsZWFuCistIE1lcmdlIHZlc3RpZ2lhbCB2c25wcmludGYgZGV0ZXJtaW5hdGlvbiBmcm9tIHp1dGlsLmggdG8gZ3pndXRzLmgKKy0gQ2xhcmlmeSBob3cgZ3pvcGVuKCkgYXBwZW5kcyBpbiB6bGliLmggY29tbWVudHMKKy0gQ29ycmVjdCBkb2N1bWVudGF0aW9uIG9mIGd6ZGlyZWN0KCkgc2luY2UganVuayBhdCBlbmQgbm93IGlnbm9yZWQKKy0gQWRkIGEgdHJhbnNwYXJlbnQgd3JpdGUgbW9kZSB0byBnem9wZW4oKSB3aGVuICdUJyBpcyBpbiB0aGUgbW9kZQorLSBVcGRhdGUgcHl0aG9uIGxpbmsgaW4gemxpYiBtYW4gcGFnZQorLSBHZXQgaW5mZml4ZWQuaCBhbmQgTUFLRUZJWEVEIHJlc3VsdCB0byBtYXRjaAorLSBBZGQgYSAuL2NvbmZpZyAtLXNvbG8gb3B0aW9uIHRvIG1ha2UgemxpYiBzdWJzZXQgd2l0aCBubyBsaWJhcnkgdXNlCistIEFkZCB1bmRvY3VtZW50ZWQgaW5mbGF0ZVJlc2V0S2VlcCgpIGZ1bmN0aW9uIGZvciBDQUIgZmlsZSBkZWNvZGluZworLSBBZGQgLS1jb3ZlciBvcHRpb24gdG8gLi9jb25maWd1cmUgZm9yIGdjYyBjb3ZlcmFnZSB0ZXN0aW5nCistIEFkZCAjZGVmaW5lIFpMSUJfQ09OU1Qgb3B0aW9uIHRvIHVzZSBjb25zdCBpbiB0aGUgel9zdHJlYW0gaW50ZXJmYWNlCistIEFkZCBjb21tZW50IHRvIGd6ZG9wZW4oKSBpbiB6bGliLmggdG8gdXNlIGR1cCgpIHdoZW4gdXNpbmcgZmlsZW5vKCkKKy0gTm90ZSBiZWhhdmlvciBvZiB1bmNvbXByZXNzKCkgdG8gcHJvdmlkZSBhcyBtdWNoIGRhdGEgYXMgaXQgY2FuCistIEFkZCBmaWxlcyBpbiBjb250cmliL21pbml6aXAgdG8gYWlkIGluIGJ1aWxkaW5nIGxpYm1pbml6aXAKKy0gU3BsaXQgb2ZmIEFSIG9wdGlvbnMgaW4gTWFrZWZpbGUuaW4gYW5kIGNvbmZpZ3VyZQorLSBDaGFuZ2UgT04gbWFjcm8gdG8gWl9BUkcgdG8gYXZvaWQgYXBwbGljYXRpb24gY29uZmxpY3RzCistIEZhY2lsaXRhdGUgY29tcGlsYXRpb24gd2l0aCBCb3JsYW5kIEMrKyBmb3IgcHJhZ21hcyBhbmQgdnNucHJpbnRmCistIEluY2x1ZGUgaW8uaCBmb3IgVHVyYm8gQyAvIEJvcmxhbmQgQysrCistIE1vdmUgZXhhbXBsZS5jIGFuZCBtaW5pZ3ppcC5jIHRvIHRlc3QvCistIFNpbXBsaWZ5IGluY29tcGxldGUgY29kZSB0YWJsZSBmaWxsaW5nIGluIGluZmxhdGVfdGFibGUoKQorLSBSZW1vdmUgY29kZSBmcm9tIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jIHRoYXQgaXMgaW1wb3NzaWJsZSB0byBleGVjdXRlCistIFRlc3QgdGhlIGluZmxhdGUgY29kZSB3aXRoIGZ1bGwgY292ZXJhZ2UKKy0gQWxsb3cgZGVmbGF0ZVNldERpY3Rpb25hcnksIGluZmxhdGVTZXREaWN0aW9uYXJ5IGF0IGFueSB0aW1lIChpbiByYXcpCistIEFkZCBkZWZsYXRlUmVzZXRLZWVwIGFuZCBmaXggaW5mbGF0ZVJlc2V0S2VlcCB0byByZXRhaW4gZGljdGlvbmFyeQorLSBGaXggZ3p3cml0ZS5jIHRvIGFjY29tbW9kYXRlIHJlZHVjZWQgbWVtb3J5IHpsaWIgY29tcGlsYXRpb24KKy0gSGF2ZSBpbmZsYXRlKCkgd2l0aCBaX0ZJTklTSCBhdm9pZCB0aGUgYWxsb2NhdGlvbiBvZiBhIHdpbmRvdworLSBEbyBub3Qgc2V0IHN0cm0tPmFkbGVyIHdoZW4gZG9pbmcgcmF3IGluZmxhdGUKKy0gRml4IGd6ZW9mKCkgdG8gYmVoYXZlIGp1c3QgbGlrZSBmZW9mKCkgd2hlbiByZWFkIGlzIG5vdCBwYXN0IGVuZCBvZiBmaWxlCistIEZpeCBidWcgaW4gZ3pyZWFkLmMgd2hlbiBlbmQtb2YtZmlsZSBpcyByZWFjaGVkCistIEF2b2lkIHVzZSBvZiBaX0JVRl9FUlJPUiBpbiBneiogZnVuY3Rpb25zIGV4Y2VwdCBmb3IgcHJlbWF0dXJlIEVPRgorLSBEb2N1bWVudCBnenJlYWQoKSBjYXBhYmlsaXR5IHRvIHJlYWQgY29uY3VycmVudGx5IHdyaXR0ZW4gZmlsZXMKKy0gUmVtb3ZlIGhhcmQtY29kaW5nIG9mIHJlc291cmNlIGNvbXBpbGVyIGluIENNYWtlTGlzdHMudHh0IFtCbGFtbW9dCisKK0NoYW5nZXMgaW4gMS4yLjUuMSAoMTAgU2VwIDIwMTEpCistIFVwZGF0ZSBGQVEgZW50cnkgb24gc2hhcmVkIGJ1aWxkcyAoIzEzKQorLSBBdm9pZCBzeW1ib2xpYyBhcmd1bWVudCB0byBjaG1vZCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGFuZCBhZGQgY29uc3RzIGluIGNvbnRyaWIvcHVmZiBbT2Jlcmh1bWVyXQorLSBVcGRhdGUgY29udHJpYi9wdWZmL3plcm9zLnJhdyB0ZXN0IGZpbGUgdG8gaGF2ZSBhbGwgYmxvY2sgdHlwZXMKKy0gQWRkIGZ1bGwgY292ZXJhZ2UgdGVzdCBmb3IgcHVmZiBpbiBjb250cmliL3B1ZmYvTWFrZWZpbGUKKy0gRml4IHN0YXRpYy1vbmx5LWJ1aWxkIGluc3RhbGwgaW4gTWFrZWZpbGUuaW4KKy0gRml4IGJ1ZyBpbiB1bnpHZXRDdXJyZW50RmlsZUluZm8oKSBpbiBjb250cmliL21pbml6aXAgW0t1bm9dCistIEFkZCBsaWJ6LmEgZGVwZW5kZW5jeSB0byBzaGFyZWQgaW4gTWFrZWZpbGUuaW4gZm9yIHBhcmFsbGVsIGJ1aWxkcworLSBTcGVsbCBvdXQgIm51bWJlciIgKGluc3RlYWQgb2YgIm5iIikgaW4gemxpYi5oIGZvciB0b3RhbF9pbiwgdG90YWxfb3V0CistIFJlcGxhY2UgJCguLi4pIHdpdGggYC4uLmAgaW4gY29uZmlndXJlIGZvciBub24tYmFzaCBzaCBbQm93bGVyXQorLSBBZGQgZGFyd2luKiB0byBEYXJ3aW4qIGFuZCBzb2xhcmlzKiB0byBTdW5PU1wgNSogaW4gY29uZmlndXJlIFtHcm9mZmVuXQorLSBBZGQgc29sYXJpcyogdG8gTGludXgqIGluIGNvbmZpZ3VyZSB0byBhbGxvdyBnY2MgdXNlIFtHcm9mZmVuXQorLSBBZGQgKmJzZCogdG8gTGludXgqIGNhc2UgaW4gY29uZmlndXJlIFtCYXItTGV2XQorLSBBZGQgaW5mZmFzdC5vYmogdG8gZGVwZW5kZW5jaWVzIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIGRlZmxhdGUuaCBbS29obGVyXQorLSBDaGFuZ2UgbGliemRsbC5hIGFnYWluIHRvIGxpYnouZGxsLmEgKCEpIGluIHdpbjMyL01ha2VmaWxlLmdjYworLSBBZGQgdGVzdCB0byBjb25maWd1cmUgZm9yIEdOVSBDIGxvb2tpbmcgZm9yIGdjYyBpbiBvdXRwdXQgb2YgJGNjIC12CistIEFkZCB6bGliLnBjIGdlbmVyYXRpb24gdG8gd2luMzIvTWFrZWZpbGUuZ2NjIFtXZWlnZWx0XQorLSBGaXggYnVnIGluIHpsaWIuaCBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgc2V0IGFuZCBfTEFSR0VGSUxFNjRfU09VUkNFIG5vdAorLSBBZGQgY29tbWVudCBpbiB6bGliLmggdGhhdCBhZGxlcjMyX2NvbWJpbmUgd2l0aCBsZW4yIDwgMCBtYWtlcyBubyBzZW5zZQorLSBNYWtlIE5PX0RJVklERSBvcHRpb24gaW4gYWRsZXIzMi5jIG11Y2ggZmFzdGVyICh0aGFua3MgdG8gSm9obiBSZWlzZXIpCistIE1ha2Ugc3Ryb25nZXIgdGVzdCBpbiB6Y29uZi5oIHRvIGluY2x1ZGUgdW5pc3RkLmggZm9yIExGUworLSBBcHBseSBEYXJ3aW4gcGF0Y2hlcyBmb3IgNjQtYml0IGZpbGUgb2Zmc2V0cyB0byBjb250cmliL21pbml6aXAgW1NsYWNrXQorLSBGaXggemxpYi5oIExGUyBzdXBwb3J0IHdoZW4gWl9QUkVGSVggdXNlZAorLSBBZGQgdXBkYXRlZCBhczQwMCBzdXBwb3J0IChyZW1vdmVkIGZyb20gb2xkKSBbTW9ubmVyYXRdCistIEF2b2lkIGRlZmxhdGUgc2Vuc2l0aXZpdHkgdG8gdm9sYXRpbGUgaW5wdXQgZGF0YQorLSBBdm9pZCBkaXZpc2lvbiBpbiBhZGxlcjMyX2NvbWJpbmUgZm9yIE5PX0RJVklERQorLSBDbGFyaWZ5IHRoZSB1c2Ugb2YgWl9GSU5JU0ggd2l0aCBkZWZsYXRlQm91bmQoKSBhbW91bnQgb2Ygc3BhY2UKKy0gU2V0IGJpbmFyeSBmb3Igb3V0cHV0IGZpbGUgaW4gcHVmZi5jCistIFVzZSB1NCB0eXBlIGZvciBjcmNfdGFibGUgdG8gYXZvaWQgY29udmVyc2lvbiB3YXJuaW5ncworLSBBcHBseSBjYXN0cyBpbiB6bGliLmggdG8gYXZvaWQgY29udmVyc2lvbiB3YXJuaW5ncworLSBBZGQgT0YgdG8gcHJvdG90eXBlcyBmb3IgYWRsZXIzMl9jb21iaW5lXyBhbmQgY3JjMzJfY29tYmluZV8gW01pbGxlcl0KKy0gSW1wcm92ZSBpbmZsYXRlU3luYygpIGRvY3VtZW50YXRpb24gdG8gbm90ZSBpbmRldGVybWluYW5jeQorLSBBZGQgZGVmbGF0ZVBlbmRpbmcoKSBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGFtb3VudCBvZiBwZW5kaW5nIG91dHB1dAorLSBDb3JyZWN0IHRoZSBzcGVsbGluZyBvZiAic3BlY2lmaWNhdGlvbiIgaW4gRkFRIFtSYW5kZXJzLVBlaHJzb25dCistIEFkZCBhIGNoZWNrIGluIGNvbmZpZ3VyZSBmb3Igc3RkYXJnLmgsIHVzZSBmb3IgZ3pwcmludGYoKQorLSBDaGVjayB0aGF0IHBvaW50ZXJzIGZpdCBpbiBpbnRzIHdoZW4gZ3pwcmludCgpIGNvbXBpbGVkIG9sZCBzdHlsZQorLSBBZGQgZHVtbXkgbmFtZSBiZWZvcmUgJChTSEFSRURMSUJWKSBpbiBNYWtlZmlsZSBbQmFyLUxldiwgQm93bGVyXQorLSBEZWxldGUgbGluZSBpbiBjb25maWd1cmUgdGhhdCBhZGRzIC1MLiBsaWJ6LmEgdG8gTERGTEFHUyBbV2VpZ2VsdF0KKy0gQWRkIGRlYnVnIHJlY29yZHMgaW4gYXNzbWVibGVyIGNvZGUgW0xvbmRlcl0KKy0gVXBkYXRlIFJGQyByZWZlcmVuY2VzIHRvIHVzZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC8uLi4gW0xpXQorLSBBZGQgLS1hcmNocyBvcHRpb24sIHVzZSBvZiBsaWJ0b29sIHRvIGNvbmZpZ3VyZSBmb3IgTWFjIE9TIFggW0JvcnN0ZWxdCisKIENoYW5nZXMgaW4gMS4yLjUgKDE5IEFwciAyMDEwKQogLSBEaXNhYmxlIHZpc2liaWxpdHkgYXR0cmlidXRlIGluIHdpbjMyL01ha2VmaWxlLmdjYyBbQmFyLUxldl0KIC0gRGVmYXVsdCB0byBsaWJkaXIgYXMgc2hhcmVkbGliZGlyIGluIGNvbmZpZ3VyZSBbTmllZGVyXQogLSBVcGRhdGUgY29weXJpZ2h0IGRhdGVzIG9uIG1vZGlmaWVkIHNvdXJjZSBmaWxlcwogLSBVcGRhdGUgdHJlZXMuYyB0byBiZSBhYmxlIHRvIGdlbmVyYXRlIG1vZGlmaWVkIHRyZWVzLmgKIC0gRXhpdCBjb25maWd1cmUgZm9yIE1pbkdXLCBzdWdnZXN0aW5nIHdpbjMyL01ha2VmaWxlLmdjYworLSBDaGVjayBmb3IgTlVMTCBwYXRoIGluIGd6X29wZW4gW0hvbXVybHVdCiAKIENoYW5nZXMgaW4gMS4yLjQuNSAoMTggQXByIDIwMTApCiAtIFNldCBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtUb3Jva10KQEAgLTI2MSw3ICs1MjUsNyBAQAogLSBDbGVhciBieXRlcyBhZnRlciBkZWZsYXRlIGxvb2thaGVhZCB0byBhdm9pZCB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhCiAtIENoYW5nZSBhIGxpbWl0IGluIGluZnRyZWVzLmMgdG8gYmUgbW9yZSB0cmFuc3BhcmVudCB0byBDb3Zlcml0eSBQcmV2ZW50CiAtIFVwZGF0ZSB3aW4zMi96bGliLmRlZiB3aXRoIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSB6bGliLmgKLS0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiB6bGliLmggW1dpbGxlbV0KKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvcnMgaW4gemxpYi5oIFtXaWxsZW0sIFNvYnJhZG9dCiAtIEFsbG93IFpfQkxPQ0sgZm9yIGRlZmxhdGUoKSB0byBmb3JjZSBhIG5ldyBibG9jawogLSBBbGxvdyBuZWdhdGl2ZSBiaXRzIGluIGluZmxhdGVQcmltZSgpIHRvIGRlbGV0ZSBleGlzdGluZyBiaXQgYnVmZmVyCiAtIEFkZCBaX1RSRUVTIGZsdXNoIG9wdGlvbiB0byBpbmZsYXRlKCkgdG8gcmV0dXJuIGF0IGVuZCBvZiB0cmVlcwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0ZBUSBiL01vZHVsZXMvemxpYi9GQVEKaW5kZXggMWEyMjc1MC4uOTliN2NmOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0ZBUQorKysgYi9Nb2R1bGVzL3psaWIvRkFRCkBAIC00NCw4ICs0NCw4IEBACiAKICA2LiBXaGVyZSdzIHRoZSB6bGliIGRvY3VtZW50YXRpb24gKG1hbiBwYWdlcywgZXRjLik/CiAKLSAgICBJdCdzIGluIHpsaWIuaCAuICBFeGFtcGxlcyBvZiB6bGliIHVzYWdlIGFyZSBpbiB0aGUgZmlsZXMgZXhhbXBsZS5jIGFuZAotICAgIG1pbmlnemlwLmMsIHdpdGggbW9yZSBpbiBleGFtcGxlcy8gLgorICAgIEl0J3MgaW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyB0ZXN0L2V4YW1wbGUuYworICAgIGFuZCB0ZXN0L21pbmlnemlwLmMsIHdpdGggbW9yZSBpbiBleGFtcGxlcy8gLgogCiAgNy4gV2h5IGRvbid0IHlvdSB1c2UgR05VIGF1dG9jb25mIG9yIGxpYnRvb2wgb3IgLi4uPwogCkBAIC04NCw4ICs4NCwxMCBAQAogCiAxMy4gSG93IGNhbiBJIG1ha2UgYSBVbml4IHNoYXJlZCBsaWJyYXJ5PwogCi0gICAgbWFrZSBjbGVhbgotICAgIC4vY29uZmlndXJlIC1zCisgICAgQnkgZGVmYXVsdCBhIHNoYXJlZCAoYW5kIGEgc3RhdGljKSBsaWJyYXJ5IGlzIGJ1aWx0IGZvciBVbml4LiAgU286CisKKyAgICBtYWtlIGRpc3RjbGVhbgorICAgIC4vY29uZmlndXJlCiAgICAgbWFrZQogCiAxNC4gSG93IGRvIEkgaW5zdGFsbCBhIHNoYXJlZCB6bGliIGxpYnJhcnkgb24gVW5peD8KQEAgLTMyNSw3ICszMjcsNyBAQAogICAgIGNvcnJlY3RseSBwb2ludHMgdG8gdGhlIHpsaWIgc3BlY2lmaWNhdGlvbiBpbiBSRkMgMTk1MCBmb3IgdGhlICJkZWZsYXRlIgogICAgIHRyYW5zZmVyIGVuY29kaW5nLCB0aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBzZXJ2ZXJzIGFuZCBicm93c2VycyB0aGF0CiAgICAgaW5jb3JyZWN0bHkgcHJvZHVjZSBvciBleHBlY3QgcmF3IGRlZmxhdGUgZGF0YSBwZXIgdGhlIGRlZmxhdGUKLSAgICBzcGVjZmljaWF0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCisgICAgc3BlY2lmaWNhdGlvbiBpbiBSRkMgMTk1MSwgbW9zdCBub3RhYmx5IE1pY3Jvc29mdC4gIFNvIGV2ZW4gdGhvdWdoIHRoZQogICAgICJkZWZsYXRlIiB0cmFuc2ZlciBlbmNvZGluZyB1c2luZyB0aGUgemxpYiBmb3JtYXQgd291bGQgYmUgdGhlIG1vcmUKICAgICBlZmZpY2llbnQgYXBwcm9hY2ggKGFuZCBpbiBmYWN0IGV4YWN0bHkgd2hhdCB0aGUgemxpYiBmb3JtYXQgd2FzIGRlc2lnbmVkCiAgICAgZm9yKSwgdXNpbmcgdGhlICJnemlwIiB0cmFuc2ZlciBlbmNvZGluZyBpcyBwcm9iYWJseSBtb3JlIHJlbGlhYmxlIGR1ZSB0bwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0lOREVYIGIvTW9kdWxlcy96bGliL0lOREVYCmluZGV4IGY2YzUxY2EuLjJiYTA2NDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9JTkRFWAorKysgYi9Nb2R1bGVzL3psaWIvSU5ERVgKQEAgLTcsNiArNyw5IEBACiBSRUFETUUgICAgICAgICAgZ3Vlc3Mgd2hhdAogY29uZmlndXJlICAgICAgIGNvbmZpZ3VyZSBzY3JpcHQgZm9yIFVuaXgKIG1ha2Vfdm1zLmNvbSAgICBtYWtlZmlsZSBmb3IgVk1TCit0ZXN0L2V4YW1wbGUuYyAgemxpYiB1c2FnZXMgZXhhbXBsZXMgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvbWluaWd6aXAuYyBtaW5pbWFsIGd6aXAtbGlrZSBmdW5jdGlvbmFsaXR5IGZvciBidWlsZCB0ZXN0aW5nCit0ZXN0L2luZmNvdmVyLmMgaW5mKi5jIGNvZGUgY292ZXJhZ2UgZm9yIGJ1aWxkIGNvdmVyYWdlIHRlc3RpbmcKIHRyZWVidWlsZC54bWwgICBYTUwgZGVzY3JpcHRpb24gb2Ygc291cmNlIGZpbGUgZGVwZW5kZW5jaWVzCiB6Y29uZi5oLmNtYWtlaW4gemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY21ha2UKIHpjb25mLmguaW4gICAgICB6Y29uZi5oIHRlbXBsYXRlIGZvciBjb25maWd1cmUKQEAgLTE0LDkgKzE3LDExIEBACiB6bGliLjMucGRmICAgICAgTWFuIHBhZ2UgaW4gUERGIGZvcm1hdAogemxpYi5tYXAgICAgICAgIExpbnV4IHN5bWJvbCBpbmZvcm1hdGlvbgogemxpYi5wYy5pbiAgICAgIFRlbXBsYXRlIGZvciBwa2ctY29uZmlnIGRlc2NyaXB0b3IKK3psaWIucGMuY21ha2VpbiB6bGliLnBjIHRlbXBsYXRlIGZvciBjbWFrZQogemxpYjJhbnNpICAgICAgIHBlcmwgc2NyaXB0IHRvIGNvbnZlcnQgc291cmNlIGZpbGVzIGZvciBDKysgY29tcGlsYXRpb24KIAogYW1pZ2EvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQW1pZ2EgU0FTIEMKK2FzNDAwLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIEFTLzQwMAogZG9jLyAgICAgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGZvcm1hdHMgYW5kIGFsZ29yaXRobXMKIG1zZG9zLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIE1TRE9TCiBuaW50ZW5kb2RzLyAgICAgbWFrZWZpbGUgZm9yIE5pbnRlbmRvIERTCkBAIC01NiwxMCArNjEsOCBAQAogenV0aWwuYwogenV0aWwuaAogCi0gICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciBzYW1wbGUgcHJvZ3JhbXM6Ci1leGFtcGxlLmMKLW1pbmlnemlwLmMKLVNlZSBleGFtcGxlcy9SRUFETUUuZXhhbXBsZXMgZm9yIG1vcmUKKyAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtcworU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcwogCi0gICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQgY29udHJpYnV0aW9uIGJ5IHRoaXJkIHBhcnRpZXMKKyAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb25zIGJ5IHRoaXJkIHBhcnRpZXMKIFNlZSBjb250cmliL1JFQURNRS5jb250cmliCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KaW5kZXggNWIxNWJkMC4uYzYxYWEzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgpAQCAtMSw1ICsxLDUgQEAKICMgTWFrZWZpbGUgZm9yIHpsaWIKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSwgTWFyayBBZGxlcgogIyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAKICMgVG8gY29tcGlsZSBhbmQgdGVzdCwgdHlwZToKQEAgLTMyLDExICszMiwxMiBAQAogCiBTVEFUSUNMSUI9bGliei5hCiBTSEFSRURMSUI9bGliei5zbwotU0hBUkVETElCVj1saWJ6LnNvLjEuMi41CitTSEFSRURMSUJWPWxpYnouc28uMS4yLjgKIFNIQVJFRExJQk09bGliei5zby4xCiBMSUJTPSQoU1RBVElDTElCKSAkKFNIQVJFRExJQlYpCiAKLUFSPWFyIHJjCitBUj1hcgorQVJGTEFHUz1yYwogUkFOTElCPXJhbmxpYgogTERDT05GSUc9bGRjb25maWcKIExEU0hBUkVETElCQz0tbGMKQEAgLTUzLDExICs1NCwxMyBAQAogbWFuM2RpciA9ICR7bWFuZGlyfS9tYW4zCiBwa2djb25maWdkaXIgPSAke2xpYmRpcn0vcGtnY29uZmlnCiAKLU9CSkMgPSBhZGxlcjMyLm8gY29tcHJlc3MubyBjcmMzMi5vIGRlZmxhdGUubyBnemNsb3NlLm8gZ3psaWIubyBnenJlYWQubyBcCi0JZ3p3cml0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGluZnRyZWVzLm8gdHJlZXMubyB1bmNvbXByLm8genV0aWwubworT0JKWiA9IGFkbGVyMzIubyBjcmMzMi5vIGRlZmxhdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8genV0aWwubworT0JKRyA9IGNvbXByZXNzLm8gdW5jb21wci5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubworT0JKQyA9ICQoT0JKWikgJChPQkpHKQogCi1QSUNfT0JKQyA9IGFkbGVyMzIubG8gY29tcHJlc3MubG8gY3JjMzIubG8gZGVmbGF0ZS5sbyBnemNsb3NlLmxvIGd6bGliLmxvIGd6cmVhZC5sbyBcCi0JZ3p3cml0ZS5sbyBpbmZiYWNrLmxvIGluZmZhc3QubG8gaW5mbGF0ZS5sbyBpbmZ0cmVlcy5sbyB0cmVlcy5sbyB1bmNvbXByLmxvIHp1dGlsLmxvCitQSUNfT0JKWiA9IGFkbGVyMzIubG8gY3JjMzIubG8gZGVmbGF0ZS5sbyBpbmZiYWNrLmxvIGluZmZhc3QubG8gaW5mbGF0ZS5sbyBpbmZ0cmVlcy5sbyB0cmVlcy5sbyB6dXRpbC5sbworUElDX09CSkcgPSBjb21wcmVzcy5sbyB1bmNvbXByLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIGd6d3JpdGUubG8KK1BJQ19PQkpDID0gJChQSUNfT0JKWikgJChQSUNfT0JKRykKIAogIyB0byB1c2UgdGhlIGFzbSBjb2RlOiBtYWtlIE9CSkE9bWF0Y2gubywgUElDX09CSkE9bWF0Y2gubG8KIE9CSkEgPQpAQCAtODAsMzUgKzgzLDQ5IEBACiB0ZXN0OiBhbGwgdGVzdHN0YXRpYyB0ZXN0c2hhcmVkCiAKIHRlc3RzdGF0aWM6IHN0YXRpYwotCUBpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlOyB0aGVuIFwKKwlAVE1QU1Q9dG1wc3RfJCQ7IFwKKwlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcCB8IC4vbWluaWd6aXAgLWQgJiYgLi9leGFtcGxlICQkVE1QU1QgOyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBPSyAqKionOyBcCiAJZWxzZSBcCiAJICBlY2hvICcJCSoqKiB6bGliIHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCi0JZmkKLQktQHJtIC1mIGZvby5negorCWZpOyBcCisJcm0gLWYgJCRUTVBTVAogCiB0ZXN0c2hhcmVkOiBzaGFyZWQKIAlATERfTElCUkFSWV9QQVRIPWBwd2RgOiQoTERfTElCUkFSWV9QQVRIKSA7IGV4cG9ydCBMRF9MSUJSQVJZX1BBVEg7IFwKIAlMRF9MSUJSQVJZTjMyX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZTjMyX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllOMzJfUEFUSDsgXAogCURZTERfTElCUkFSWV9QQVRIPWBwd2RgOiQoRFlMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IERZTERfTElCUkFSWV9QQVRIOyBcCiAJU0hMSUJfUEFUSD1gcHdkYDokKFNITElCX1BBVEgpIDsgZXhwb3J0IFNITElCX1BBVEg7IFwKLQlpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcHNoIHwgLi9taW5pZ3ppcHNoIC1kICYmIC4vZXhhbXBsZXNoOyB0aGVuIFwKKwlUTVBTSD10bXBzaF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2ggJCRUTVBTSDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIHNoYXJlZCB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCi0JZmkKLQktQHJtIC1mIGZvby5negorCWZpOyBcCisJcm0gLWYgJCRUTVBTSAogCiB0ZXN0NjQ6IGFsbDY0Ci0JQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQ7IHRoZW4gXAorCUBUTVA2ND10bXA2NF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwNjQgfCAuL21pbmlnemlwNjQgLWQgJiYgLi9leGFtcGxlNjQgJCRUTVA2NDsgdGhlbiBcCiAJICBlY2hvICcJCSoqKiB6bGliIDY0LWJpdCB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgRkFJTEVEICoqKic7IGZhbHNlOyBcCi0JZmkKLQktQHJtIC1mIGZvby5negorCWZpOyBcCisJcm0gLWYgJCRUTVA2NAorCitpbmZjb3Zlci5vOiB0ZXN0L2luZmNvdmVyLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvaW5mY292ZXIuYworCitpbmZjb3ZlcjogaW5mY292ZXIubyBsaWJ6LmEKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgaW5mY292ZXIubyBsaWJ6LmEKKworY292ZXI6IGluZmNvdmVyCisJcm0gLWYgKi5nY2RhCisJLi9pbmZjb3ZlcgorCWdjb3YgaW5mKi5jCiAKIGxpYnouYTogJChPQkpTKQotCSQoQVIpICRAICQoT0JKUykKKwkkKEFSKSAkKEFSRkxBR1MpICRAICQoT0JKUykKIAktQCAoJChSQU5MSUIpICRAIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQogCiBtYXRjaC5vOiBtYXRjaC5TCkBAIC0xMjMsMTEgKzE0MCwxNyBAQAogCW12IF9tYXRjaC5vIG1hdGNoLmxvCiAJcm0gLWYgX21hdGNoLnMKIAotZXhhbXBsZTY0Lm86IGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAotCSQoQ0MpICQoQ0ZMQUdTKSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIGV4YW1wbGUuYworZXhhbXBsZS5vOiB0ZXN0L2V4YW1wbGUuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKIAotbWluaWd6aXA2NC5vOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgbWluaWd6aXAuYworbWluaWd6aXAubzogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L21pbmlnemlwLmMKKworZXhhbXBsZTY0Lm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIHRlc3QvZXhhbXBsZS5jCisKK21pbmlnemlwNjQubzogdGVzdC9taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYwogCiAuU1VGRklYRVM6IC5sbwogCkBAIC0xMzYsNyArMTU5LDcgQEAKIAkkKENDKSAkKFNGTEFHUykgLURQSUMgLWMgLW8gb2Jqcy8kKi5vICQ8CiAJLUBtdiBvYmpzLyQqLm8gJEAKIAotJChTSEFSRURMSUJWKTogJChQSUNfT0JKUykKK3BsYWNlYm8gJChTSEFSRURMSUJWKTogJChQSUNfT0JKUykgbGliei5hCiAJJChMRFNIQVJFRCkgJChTRkxBR1MpIC1vICRAICQoUElDX09CSlMpICQoTERTSEFSRURMSUJDKSAkKExERkxBR1MpCiAJcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSkKIAlsbiAtcyAkQCAkKFNIQVJFRExJQikKQEAgLTE2OCwxNCArMTkxLDE2IEBACiAJLUBpZiBbICEgLWQgJChERVNURElSKSQobWFuM2RpcikgICAgICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKG1hbjNkaXIpOyBmaQogCS1AaWYgWyAhIC1kICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgXTsgdGhlbiBta2RpciAtcCAkKERFU1RESVIpJChwa2djb25maWdkaXIpOyBmaQogCWNwICQoU1RBVElDTElCKSAkKERFU1RESVIpJChsaWJkaXIpCi0JY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpCi0JY2QgJChERVNURElSKSQobGliZGlyKTsgY2htb2QgdT1ydyxnbz1yICQoU1RBVElDTElCKQotCS1AKGNkICQoREVTVERJUikkKGxpYmRpcik7ICQoUkFOTElCKSBsaWJ6LmEgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCi0JLUBjZCAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBpZiB0ZXN0ICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKLQkgIGNobW9kIDc1NSAkKFNIQVJFRExJQlYpOyBcCi0JICBybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQik7IFwKLQkgIGxuIC1zICQoU0hBUkVETElCVikgJChTSEFSRURMSUJNKTsgXAorCWNobW9kIDY0NCAkKERFU1RESVIpJChsaWJkaXIpLyQoU1RBVElDTElCKQorCS1AKCQoUkFOTElCKSAkKERFU1RESVIpJChsaWJkaXIpL2xpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKKwktQGlmIHRlc3QgLW4gIiQoU0hBUkVETElCVikiOyB0aGVuIFwKKwkgIGNwICQoU0hBUkVETElCVikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKTsgXAorCSAgZWNobyAiY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpIjsgXAorCSAgY2htb2QgNzU1ICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJWKTsgXAorCSAgZWNobyAiY2htb2QgNzU1ICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJWKSI7IFwKKwkgIHJtIC1mICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAorCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCKTsgXAorCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpLyQoU0hBUkVETElCTSk7IFwKIAkgICgkKExEQ09ORklHKSB8fCB0cnVlKSAgPi9kZXYvbnVsbCAyPiYxOyBcCiAJZmkKIAljcCB6bGliLjMgJChERVNURElSKSQobWFuM2RpcikKQEAgLTE5MSwyMiArMjE2LDI1IEBACiAJY2htb2QgNjQ0ICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3psaWIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96Y29uZi5oCiAKIHVuaW5zdGFsbDoKLQljZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKTsgcm0gLWYgemxpYi5oIHpjb25mLmgKLQljZCAkKERFU1RESVIpJChsaWJkaXIpOyBybSAtZiBsaWJ6LmE7IFwKLQlpZiB0ZXN0ICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKKwljZCAkKERFU1RESVIpJChpbmNsdWRlZGlyKSAmJiBybSAtZiB6bGliLmggemNvbmYuaAorCWNkICQoREVTVERJUikkKGxpYmRpcikgJiYgcm0gLWYgbGliei5hOyBcCisJaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSIgLWEgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCiAJICBybSAtZiAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCiAJZmkKLQljZCAkKERFU1RESVIpJChtYW4zZGlyKTsgcm0gLWYgemxpYi4zCi0JY2QgJChERVNURElSKSQocGtnY29uZmlnZGlyKTsgcm0gLWYgemxpYi5wYworCWNkICQoREVTVERJUikkKG1hbjNkaXIpICYmIHJtIC1mIHpsaWIuMworCWNkICQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikgJiYgcm0gLWYgemxpYi5wYwogCiBkb2NzOiB6bGliLjMucGRmCiAKIHpsaWIuMy5wZGY6IHpsaWIuMwogCWdyb2ZmIC1tYW5kb2MgLWYgSCAtVCBwcyB6bGliLjMgfCBwczJwZGYgLSB6bGliLjMucGRmCiAKLXpjb25mLmguaW46IHpjb25mLmguY21ha2VpbgotCXNlZCAiL14jY21ha2VkZWZpbmUvRCIgPCB6Y29uZi5oLmNtYWtlaW4gPiB6Y29uZi5oLmluCi0JdG91Y2ggLXIgemNvbmYuaC5jbWFrZWluIHpjb25mLmguaW4KK3pjb25mLmguY21ha2VpbjogemNvbmYuaC5pbgorCS1AIFRFTVBGSUxFPXpjb25maF8kJDsgXAorCWVjaG8gIi8jZGVmaW5lIFpDT05GX0gvIGFcXFxcXG4jY21ha2VkZWZpbmUgWl9QUkVGSVhcXFxcXG4jY21ha2VkZWZpbmUgWl9IQVZFX1VOSVNURF9IXG4iID4+ICQkVEVNUEZJTEUgJiZcCisJc2VkIC1mICQkVEVNUEZJTEUgemNvbmYuaC5pbiA+IHpjb25mLmguY21ha2VpbiAmJlwKKwl0b3VjaCAtciB6Y29uZi5oLmluIHpjb25mLmguY21ha2VpbiAmJlwKKwlybSAkJFRFTVBGSUxFCiAKIHpjb25mOiB6Y29uZi5oLmluCiAJY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCkBAIC0yMTYsMTMgKzI0NCwxNiBAQAogCXJtIC1mICoubyAqLmxvICp+IFwKIAkgICBleGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpIGV4YW1wbGVzaCQoRVhFKSBtaW5pZ3ppcHNoJChFWEUpIFwKIAkgICBleGFtcGxlNjQkKEVYRSkgbWluaWd6aXA2NCQoRVhFKSBcCisJICAgaW5mY292ZXIgXAogCSAgIGxpYnouKiBmb28uZ3ogc29fbG9jYXRpb25zIFwKIAkgICBfbWF0Y2gucyBtYWtldHJlZSBjb250cmliL2luZmJhY2s5LyoubwogCXJtIC1yZiBvYmpzCisJcm0gLWYgKi5nY2RhICouZ2NubyAqLmdjb3YKKwlybSAtZiBjb250cmliL2luZmJhY2s5LyouZ2NkYSBjb250cmliL2luZmJhY2s5LyouZ2NubyBjb250cmliL2luZmJhY2s5LyouZ2NvdgogCiBtYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KLWRpc3RjbGVhbjogY2xlYW4gemNvbmYgZG9jcwotCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMKK2Rpc3RjbGVhbjogY2xlYW4gemNvbmYgemNvbmYuaC5jbWFrZWluIGRvY3MKKwlybSAtZiBNYWtlZmlsZSB6bGliLnBjIGNvbmZpZ3VyZS5sb2cKIAktQHJtIC1mIC5EU19TdG9yZQogCS1AcHJpbnRmICdhbGw6XG5cdC1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iXG4nID4gTWFrZWZpbGUKIAktQHByaW50ZiAnXG5kaXN0Y2xlYW46XG5cdG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdGNsZWFuXG4nID4+IE1ha2VmaWxlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvUkVBRE1FIGIvTW9kdWxlcy96bGliL1JFQURNRQppbmRleCBkNDIxOWJmLi41Y2E5ZDEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvUkVBRE1FCisrKyBiL01vZHVsZXMvemxpYi9SRUFETUUKQEAgLTEsMjIgKzEsMjIgQEAKIFpMSUIgREFUQSBDT01QUkVTU0lPTiBMSUJSQVJZCiAKLXpsaWIgMS4yLjUgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCit6bGliIDEuMi44IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcwogdGhyZWFkIHNhZmUuICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzCiAoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXMKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0ICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkKLWFuZCByZmMxOTUyLnR4dCAoZ3ppcCBmb3JtYXQpLgoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoemxpYiBmb3JtYXQpLCByZmMxOTUxIChkZWZsYXRlIGZvcm1hdCkgYW5kCityZmMxOTUyIChnemlwIGZvcm1hdCkuCiAKIEFsbCBmdW5jdGlvbnMgb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgemxpYi5oCiAodm9sdW50ZWVyIHRvIHdyaXRlIG1hbiBwYWdlcyB3ZWxjb21lLCBjb250YWN0IHpsaWJAZ3ppcC5vcmcpLiAgQSB1c2FnZSBleGFtcGxlCi1vZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSBleGFtcGxlLmMgd2hpY2ggYWxzbyB0ZXN0cyB0aGF0IHRoZSBsaWJyYXJ5Ci1pcyB3b3JraW5nIGNvcnJlY3RseS4gIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZmlsZSBtaW5pZ3ppcC5jLiAgVGhlCi1jb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBvZiBhbGwgc291cmNlIGZpbGVzIGV4Y2VwdCBleGFtcGxlLmMgYW5kCi1taW5pZ3ppcC5jLgorb2YgdGhlIGxpYnJhcnkgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgdGVzdC9leGFtcGxlLmMgd2hpY2ggYWxzbyB0ZXN0cyB0aGF0Cit0aGUgbGlicmFyeSBpcyB3b3JraW5nIGNvcnJlY3RseS4gIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZmlsZQordGVzdC9taW5pZ3ppcC5jLiAgVGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3VyY2UKK2ZpbGVzIGluIHRoZSByb290IGRpcmVjdG9yeS4KIAogVG8gY29tcGlsZSBhbGwgZmlsZXMgYW5kIHJ1biB0aGUgdGVzdCBwcm9ncmFtLCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBnaXZlbiBhdAogdGhlIHRvcCBvZiBNYWtlZmlsZS5pbi4gIEluIHNob3J0ICIuL2NvbmZpZ3VyZTsgbWFrZSB0ZXN0IiwgYW5kIGlmIHRoYXQgZ29lcwotd2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBvZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZSBvbmUKLW9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBpbiB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKK3dlbGwsICJtYWtlIGluc3RhbGwiIHNob3VsZCB3b3JrIGZvciBtb3N0IGZsYXZvcnMgb2YgVW5peC4gIEZvciBXaW5kb3dzLCB1c2UKK29uZSBvZiB0aGUgc3BlY2lhbCBtYWtlZmlsZXMgaW4gd2luMzIvIG9yIGNvbnRyaWIvdnN0dWRpby8gLiAgRm9yIFZNUywgdXNlCiBtYWtlX3Ztcy5jb20uCiAKIFF1ZXN0aW9ucyBhYm91dCB6bGliIHNob3VsZCBiZSBzZW50IHRvIDx6bGliQGd6aXAub3JnPiwgb3IgdG8gR2lsbGVzIFZvbGxhbnQKQEAgLTMxLDcgKzMxLDcgQEAKIGlzc3VlIG9mIERyLiAgRG9iYidzIEpvdXJuYWw7IGEgY29weSBvZiB0aGUgYXJ0aWNsZSBpcyBhdmFpbGFibGUgYXQKIGh0dHA6Ly9tYXJrbmVsc29uLnVzLzE5OTcvMDEvMDEvemxpYi1lbmdpbmUvIC4KIAotVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi41IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KK1RoZSBjaGFuZ2VzIG1hZGUgaW4gdmVyc2lvbiAxLjIuOCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSBDaGFuZ2VMb2cuCiAKIFVuc3VwcG9ydGVkIHRoaXJkIHBhcnR5IGNvbnRyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkIGluIGRpcmVjdG9yeSBjb250cmliLyAuCiAKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogQSBQeXRob24gaW50ZXJmYWNlIHRvIHpsaWIgd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5nIDxhbWtAYW1rLmNhPiBpcwogYXZhaWxhYmxlIGluIFB5dGhvbiAxLjUgYW5kIGxhdGVyIHZlcnNpb25zLCBzZWUKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGliLmh0bWwgLgoraHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3psaWIuaHRtbCAuCiAKIHpsaWIgaXMgYnVpbHQgaW50byB0Y2w6IGh0dHA6Ly93aWtpLnRjbC50ay80NjEwIC4KIApAQCAtODQsNyArODQsNyBAQAogCiBDb3B5cmlnaHQgbm90aWNlOgogCi0gKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2FkbGVyMzIuYyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKaW5kZXggNjVhZDZhNS4uYTg2OGYwNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FkbGVyMzIuYworKysgYi9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCkBAIC0xLDUgKzEsNSBAQAogLyogYWRsZXIzMi5jIC0tIGNvbXB1dGUgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA3IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05LDkgKzksOSBAQAogCiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogCi1sb2NhbCB1TG9uZyBhZGxlcjMyX2NvbWJpbmVfKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMik7Citsb2NhbCB1TG9uZyBhZGxlcjMyX2NvbWJpbmVfIE9GKCh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVyMiwgel9vZmY2NF90IGxlbjIpKTsKIAotI2RlZmluZSBCQVNFIDY1NTIxVUwgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KKyNkZWZpbmUgQkFTRSA2NTUyMSAgICAgIC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCiAjZGVmaW5lIE5NQVggNTU1MgogLyogTk1BWCBpcyB0aGUgbGFyZ2VzdCBuIHN1Y2ggdGhhdCAyNTVuKG4rMSkvMiArIChuKzEpKEJBU0UtMSkgPD0gMl4zMi0xICovCiAKQEAgLTIxLDM5ICsyMSw0NCBAQAogI2RlZmluZSBETzgoYnVmLGkpICBETzQoYnVmLGkpOyBETzQoYnVmLGkrNCk7CiAjZGVmaW5lIERPMTYoYnVmKSAgIERPOChidWYsMCk7IERPOChidWYsOCk7CiAKLS8qIHVzZSBOT19ESVZJREUgaWYgeW91ciBwcm9jZXNzb3IgZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgKi8KKy8qIHVzZSBOT19ESVZJREUgaWYgeW91ciBwcm9jZXNzb3IgZG9lcyBub3QgZG8gZGl2aXNpb24gaW4gaGFyZHdhcmUgLS0KKyAgIHRyeSBpdCBib3RoIHdheXMgdG8gc2VlIHdoaWNoIGlzIGZhc3RlciAqLwogI2lmZGVmIE5PX0RJVklERQotIyAgZGVmaW5lIE1PRChhKSBcCisvKiBub3RlIHRoYXQgdGhpcyBhc3N1bWVzIEJBU0UgaXMgNjU1MjEsIHdoZXJlIDY1NTM2ICUgNjU1MjEgPT0gMTUKKyAgICh0aGFuayB5b3UgdG8gSm9obiBSZWlzZXIgZm9yIHBvaW50aW5nIHRoaXMgb3V0KSAqLworIyAgZGVmaW5lIENIT1AoYSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNikpIGEgLT0gKEJBU0UgPDwgMTYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE1KSkgYSAtPSAoQkFTRSA8PCAxNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTQpKSBhIC09IChCQVNFIDw8IDE0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMykpIGEgLT0gKEJBU0UgPDwgMTMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEyKSkgYSAtPSAoQkFTRSA8PCAxMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTEpKSBhIC09IChCQVNFIDw8IDExKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMCkpIGEgLT0gKEJBU0UgPDwgMTApOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDkpKSBhIC09IChCQVNFIDw8IDkpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDgpKSBhIC09IChCQVNFIDw8IDgpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDcpKSBhIC09IChCQVNFIDw8IDcpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDYpKSBhIC09IChCQVNFIDw8IDYpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDUpKSBhIC09IChCQVNFIDw8IDUpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDQpKSBhIC09IChCQVNFIDw8IDQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDMpKSBhIC09IChCQVNFIDw8IDMpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDIpKSBhIC09IChCQVNFIDw8IDIpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEpKSBhIC09IChCQVNFIDw8IDEpOyBcCisgICAgICAgIHVuc2lnbmVkIGxvbmcgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZlVMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAorICAgIH0gd2hpbGUgKDApCisjICBkZWZpbmUgTU9EMjgoYSkgXAorICAgIGRvIHsgXAorICAgICAgICBDSE9QKGEpOyBcCiAgICAgICAgIGlmIChhID49IEJBU0UpIGEgLT0gQkFTRTsgXAogICAgIH0gd2hpbGUgKDApCi0jICBkZWZpbmUgTU9ENChhKSBcCisjICBkZWZpbmUgTU9EKGEpIFwKICAgICBkbyB7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgQ0hPUChhKTsgXAorICAgICAgICBNT0QyOChhKTsgXAorICAgIH0gd2hpbGUgKDApCisjICBkZWZpbmUgTU9ENjMoYSkgXAorICAgIGRvIHsgLyogdGhpcyBhc3N1bWVzIGEgaXMgbm90IG5lZ2F0aXZlICovIFwKKyAgICAgICAgel9vZmY2NF90IHRtcCA9IGEgPj4gMzI7IFwKKyAgICAgICAgYSAmPSAweGZmZmZmZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgOCkgLSAodG1wIDw8IDUpICsgdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAorICAgICAgICB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmTDsgXAorICAgICAgICBhICs9ICh0bXAgPDwgNCkgLSB0bXA7IFwKICAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjICBkZWZpbmUgTU9EKGEpIGEgJT0gQkFTRQotIyAgZGVmaW5lIE1PRDQoYSkgYSAlPSBCQVNFCisjICBkZWZpbmUgTU9EMjgoYSkgYSAlPSBCQVNFCisjICBkZWZpbmUgTU9ENjMoYSkgYSAlPSBCQVNFCiAjZW5kaWYKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtOTIsNyArOTcsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChhZGxlciA+PSBCQVNFKQogICAgICAgICAgICAgYWRsZXIgLT0gQkFTRTsKLSAgICAgICAgTU9ENChzdW0yKTsgICAgICAgICAgICAgLyogb25seSBhZGRlZCBzbyBtYW55IEJBU0UncyAqLworICAgICAgICBNT0QyOChzdW0yKTsgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCiAgICAgICAgIHJldHVybiBhZGxlciB8IChzdW0yIDw8IDE2KTsKICAgICB9CiAKQEAgLTEzNyw4ICsxNDIsMTMgQEAKICAgICB1bnNpZ25lZCBsb25nIHN1bTI7CiAgICAgdW5zaWduZWQgcmVtOwogCisgICAgLyogZm9yIG5lZ2F0aXZlIGxlbiwgcmV0dXJuIGludmFsaWQgYWRsZXIzMiBhcyBhIGNsdWUgZm9yIGRlYnVnZ2luZyAqLworICAgIGlmIChsZW4yIDwgMCkKKyAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmZVTDsKKwogICAgIC8qIHRoZSBkZXJpdmF0aW9uIG9mIHRoaXMgZm9ybXVsYSBpcyBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyICovCi0gICAgcmVtID0gKHVuc2lnbmVkKShsZW4yICUgQkFTRSk7CisgICAgTU9ENjMobGVuMik7ICAgICAgICAgICAgICAgIC8qIGFzc3VtZXMgbGVuMiA+PSAwICovCisgICAgcmVtID0gKHVuc2lnbmVkKWxlbjI7CiAgICAgc3VtMSA9IGFkbGVyMSAmIDB4ZmZmZjsKICAgICBzdW0yID0gcmVtICogc3VtMTsKICAgICBNT0Qoc3VtMik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvYWxnb3JpdGhtLnR4dCBiL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0CmluZGV4IGIwMjJkZGUuLmM5N2Y0OTUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0CisrKyBiL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0CkBAIC0xMjEsNyArMTIxLDcgQEAKIGtieXRlcy4gIFlvdSBjYW4gaW1hZ2luZSB0aGF0IGZpbGxpbmcgaW4gYSAyXjE1IGVudHJ5IHRhYmxlIGZvciBhIDE1LWJpdCBjb2RlCiB3b3VsZCB0YWtlIHRvbyBsb25nIGlmIHlvdSdyZSBvbmx5IGRlY29kaW5nIHNldmVyYWwgdGhvdXNhbmQgc3ltYm9scy4gIEF0IHRoZQogb3RoZXIgZXh0cmVtZSwgeW91IGNvdWxkIG1ha2UgYSBuZXcgdGFibGUgZm9yIGV2ZXJ5IGJpdCBpbiB0aGUgY29kZS4gIEluIGZhY3QsCi10aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdHdvIG11Y2ggdGltZQordGhhdCdzIGVzc2VudGlhbGx5IGEgSHVmZm1hbiB0cmVlLiAgQnV0IHRoZW4geW91IHNwZW5kIHRvbyBtdWNoIHRpbWUKIHRyYXZlcnNpbmcgdGhlIHRyZWUgd2hpbGUgZGVjb2RpbmcsIGV2ZW4gZm9yIHNob3J0IHN5bWJvbHMuCiAKIFNvIHRoZSBudW1iZXIgb2YgYml0cyBmb3IgdGhlIGZpcnN0IGxvb2t1cCB0YWJsZSBpcyBhIHRyYWRlIG9mIHRoZSB0aW1lIHRvCkBAIC0yMDYsNCArMjA2LDQgQEAKIHBwLiAzMzctMzQzLgogCiBgYERFRkxBVEUgQ29tcHJlc3NlZCBEYXRhIEZvcm1hdCBTcGVjaWZpY2F0aW9uJycgYXZhaWxhYmxlIGluCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dAoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbXByZXNzLmMgYi9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYwppbmRleCBlYTRkZmJlLi42ZTk3NjI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYworKysgYi9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYwpAQCAtMjksNyArMjksNyBAQAogICAgIHpfc3RyZWFtIHN0cmVhbTsKICAgICBpbnQgZXJyOwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwogICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKICNpZmRlZiBNQVhTRUdfNjRLCiAgICAgLyogQ2hlY2sgZm9yIHNvdXJjZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jb25maWd1cmUgYi9Nb2R1bGVzL3psaWIvY29uZmlndXJlCmluZGV4IGJkOWVkZDIuLmI3N2E4YTggMTAwNzU1Ci0tLSBhL01vZHVsZXMvemxpYi9jb25maWd1cmUKKysrIGIvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQpAQCAtMTMsMzkgKzEzLDUyIEBACiAjIElmIHlvdSBoYXZlIHByb2JsZW1zLCB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTIGJlZm9yZSByZXBvcnRpbmcKICMgYW4gZXJyb3IuCiAKKyMgc3RhcnQgb2ZmIGNvbmZpZ3VyZS5sb2cKK2VjaG8gLS0tLS0tLS0tLS0tLS0tLS0tLS0gPj4gY29uZmlndXJlLmxvZworZWNobyAkMCAkKiA+PiBjb25maWd1cmUubG9nCitkYXRlID4+IGNvbmZpZ3VyZS5sb2cKKworIyBzZXQgY29tbWFuZCBwcmVmaXggZm9yIGNyb3NzLWNvbXBpbGF0aW9uCiBpZiBbIC1uICIke0NIT1NUfSIgXTsgdGhlbgotICAgIHVuYW1lPSIkKGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJykiCisgICAgdW5hbWU9ImBlY2hvICIke0NIT1NUfSIgfCBzZWQgLWUgJ3MvXlteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCktLiokL1wxLydgIgogICAgIENST1NTX1BSRUZJWD0iJHtDSE9TVH0tIgogZmkKIAorIyBkZXN0aW5hdGlvbiBuYW1lIGZvciBzdGF0aWMgbGlicmFyeQogU1RBVElDTElCPWxpYnouYQotTERGTEFHUz0iJHtMREZMQUdTfSAtTC4gJHtTVEFUSUNMSUJ9IgorCisjIGV4dHJhY3QgemxpYiB2ZXJzaW9uIG51bWJlcnMgZnJvbSB6bGliLmgKIFZFUj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYAogVkVSMz1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcXC5bMC05XSpcKS4qL1wxL3AnIDwgemxpYi5oYAogVkVSMj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5oYAogVkVSMT1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5oYAorCisjIGVzdGFibGlzaCBjb21tYW5kcyBmb3IgbGlicmFyeSBidWlsZGluZwogaWYgIiR7Q1JPU1NfUFJFRklYfWFyIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBBUj0ke0FSLSIke0NST1NTX1BSRUZJWH1hciJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgICBBUj0ke0FSLSJhciJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCi1BUl9SQz0iJHtBUn0gcmMiCitBUkZMQUdTPSR7QVJGTEFHUy0icmMifQogaWYgIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCiAgICAgUkFOTElCPSR7UkFOTElCLSIke0NST1NTX1BSRUZJWH1yYW5saWIifQotICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke1JBTkxJQn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtSQU5MSUJ9IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgICBSQU5MSUI9JHtSQU5MSUItInJhbmxpYiJ9CiBmaQogaWYgIiR7Q1JPU1NfUFJFRklYfW5tIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBOTT0ke05NLSIke0NST1NTX1BSRUZJWH1ubSJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7Tk19CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7Tk19IHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKICAgICBOTT0ke05NLSJubSJ9CiBmaQorCisjIHNldCBkZWZhdWx0cyBiZWZvcmUgcHJvY2Vzc2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucwogTERDT05GSUc9JHtMRENPTkZJRy0ibGRjb25maWcifQogTERTSEFSRURMSUJDPSIke0xEU0hBUkVETElCQy0tbGN9IgorQVJDSFM9CiBwcmVmaXg9JHtwcmVmaXgtL3Vzci9sb2NhbH0KIGV4ZWNfcHJlZml4PSR7ZXhlY19wcmVmaXgtJyR7cHJlZml4fSd9CiBsaWJkaXI9JHtsaWJkaXItJyR7ZXhlY19wcmVmaXh9L2xpYid9CkBAIC01NCwyMCArNjcsMzkgQEAKIG1hbmRpcj0ke21hbmRpci0nJHtwcmVmaXh9L3NoYXJlL21hbid9CiBzaGFyZWRfZXh0PScuc28nCiBzaGFyZWQ9MQorc29sbz0wCitjb3Zlcj0wCiB6cHJlZml4PTAKK3pjb25zdD0wCiBidWlsZDY0PTAKIGdjYz0wCiBvbGRfY2M9IiRDQyIKIG9sZF9jZmxhZ3M9IiRDRkxBR1MiCitPQkpDPSckKE9CSlopICQoT0JKRyknCitQSUNfT0JKQz0nJChQSUNfT0JKWikgJChQSUNfT0JKRyknCiAKKyMgbGVhdmUgdGhpcyBzY3JpcHQsIG9wdGlvbmFsbHkgaW4gYSBiYWQgd2F5CitsZWF2ZSgpCit7CisgIGlmIHRlc3QgIiQqIiAhPSAiMCI7IHRoZW4KKyAgICBlY2hvICIqKiAkMCBhYm9ydGluZy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZmkKKyAgcm0gLWYgJHRlc3QuW2NvXSAkdGVzdCAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lmdjbm8gLi8tLXZlcnNpb24KKyAgZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZXhpdCAkMQorfQorCisjIHByb2Nlc3MgY29tbWFuZCBsaW5lIG9wdGlvbnMKIHdoaWxlIHRlc3QgJCMgLWdlIDEKIGRvCiBjYXNlICIkMSIgaW4KICAgICAtaCogfCAtLWhlbHApCi0gICAgICBlY2hvICd1c2FnZTonCi0gICAgICBlY2hvICcgIGNvbmZpZ3VyZSBbLS16cHJlZml4XSBbLS1wcmVmaXg9UFJFRklYXSAgWy0tZXByZWZpeD1FWFBSRUZJWF0nCi0gICAgICBlY2hvICcgICAgWy0tc3RhdGljXSBbLS02NF0gWy0tbGliZGlyPUxJQkRJUl0gWy0tc2hhcmVkbGliZGlyPUxJQkRJUl0nCi0gICAgICBlY2hvICcgICAgWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXScKKyAgICAgIGVjaG8gJ3VzYWdlOicgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICBjb25maWd1cmUgWy0tY29uc3RdIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAnICAgIFstLXN0YXRpY10gWy0tNjRdIFstLWxpYmRpcj1MSUJESVJdIFstLXNoYXJlZGxpYmRpcj1MSUJESVJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXSBbLS1hcmNocz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiXScgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgICAgICBleGl0IDAgOzsKICAgICAtcCo9KiB8IC0tcHJlZml4PSopIHByZWZpeD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OwogICAgIC1lKj0qIHwgLS1lcHJlZml4PSopIGV4ZWNfcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CkBAIC04MSw1MSArMTEzLDg4IEBACiAgICAgLWkqIHwgLS1pbmNsdWRlZGlyKSBpbmNsdWRlZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OwogICAgIC1zKiB8IC0tc2hhcmVkIHwgLS1lbmFibGUtc2hhcmVkKSBzaGFyZWQ9MTsgc2hpZnQgOzsKICAgICAtdCB8IC0tc3RhdGljKSBzaGFyZWQ9MDsgc2hpZnQgOzsKKyAgICAtLXNvbG8pIHNvbG89MTsgc2hpZnQgOzsKKyAgICAtLWNvdmVyKSBjb3Zlcj0xOyBzaGlmdCA7OwogICAgIC16KiB8IC0tenByZWZpeCkgenByZWZpeD0xOyBzaGlmdCA7OwogICAgIC02KiB8IC0tNjQpIGJ1aWxkNjQ9MTsgc2hpZnQgOzsKLSAgICAtLXN5c2NvbmZkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tc3lzY29uZmRpciI7IHNoaWZ0IDs7Ci0gICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiOyBzaGlmdCA7OwotICAgICopIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSI7IGVjaG8gIiQwIC0taGVscCBmb3IgaGVscCI7IGV4aXQgMSA7OworICAgIC1hKj0qIHwgLS1hcmNocz0qKSBBUkNIUz1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OworICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OworICAgIC0tbG9jYWxzdGF0ZWRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1sb2NhbHN0YXRlZGlyIiB8IHRlZSAtYSBjb25maWd1cmUubG9nOyBzaGlmdCA7OworICAgIC1jKiB8IC0tY29uc3QpIHpjb25zdD0xOyBzaGlmdCA7OworICAgICopCisgICAgICBlY2hvICJ1bmtub3duIG9wdGlvbjogJDEiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiQwIC0taGVscCBmb3IgaGVscCIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgbGVhdmUgMTs7CiAgICAgZXNhYwogZG9uZQogCisjIHRlbXBvcmFyeSBmaWxlIG5hbWUKIHRlc3Q9enRlc3QkJAorCisjIHB1dCBhcmd1bWVudHMgaW4gbG9nLCBhbHNvIHB1dCB0ZXN0IGZpbGUgaW4gbG9nIGlmIHVzZWQgaW4gYXJndW1lbnRzCitzaG93KCkKK3sKKyAgY2FzZSAiJCoiIGluCisgICAgKiR0ZXN0LmMqKQorICAgICAgZWNobyA9PT0gJHRlc3QuYyA9PT0gPj4gY29uZmlndXJlLmxvZworICAgICAgY2F0ICR0ZXN0LmMgPj4gY29uZmlndXJlLmxvZworICAgICAgZWNobyA9PT0gPj4gY29uZmlndXJlLmxvZzs7CisgIGVzYWMKKyAgZWNobyAkKiA+PiBjb25maWd1cmUubG9nCit9CisKKyMgY2hlY2sgZm9yIGdjYyB2cy4gY2MgYW5kIHNldCBjb21waWxlIGFuZCBsaW5rIGZsYWdzIGJhc2VkIG9uIHRoZSBzeXN0ZW0gaWRlbnRpZmllZCBieSB1bmFtZQogY2F0ID4gJHRlc3QuYyA8PEVPRgogZXh0ZXJuIGludCBnZXRjaGFyKCk7CiBpbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CiBFT0YKIAotdGVzdCAteiAiJENDIiAmJiBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4KK3Rlc3QgLXogIiRDQyIgJiYgZWNobyBDaGVja2luZyBmb3IgJHtDUk9TU19QUkVGSVh9Z2NjLi4uIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGNjPSR7Q0MtJHtDUk9TU19QUkVGSVh9Z2NjfQogY2ZsYWdzPSR7Q0ZMQUdTLSItTzMifQogIyB0byBmb3JjZSB0aGUgYXNtIHZlcnNpb24gdXNlOiBDRkxBR1M9Ii1PMyAtREFTTVYiIC4vY29uZmlndXJlCiBjYXNlICIkY2MiIGluCiAgICpnY2MqKSBnY2M9MSA7OworICAqY2xhbmcqKSBnY2M9MSA7OworZXNhYworY2FzZSBgJGNjIC12IDI+JjFgIGluCisgICpnY2MqKSBnY2M9MSA7OwogZXNhYwogCi1pZiB0ZXN0ICIkZ2NjIiAtZXEgMSAmJiAoJGNjIC1jICRjZmxhZ3MgJHRlc3QuYykgMj4vZGV2L251bGw7IHRoZW4KK3Nob3cgJGNjIC1jICR0ZXN0LmMKK2lmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJHRlc3QuYykgPj4gY29uZmlndXJlLmxvZyAyPiYxOyB0aGVuCisgIGVjaG8gLi4uIHVzaW5nIGdjYyA+PiBjb25maWd1cmUubG9nCiAgIENDPSIkY2MiCisgIENGTEFHUz0iJHtDRkxBR1MtLU8zfSAke0FSQ0hTfSIKICAgU0ZMQUdTPSIke0NGTEFHUy0tTzN9IC1mUElDIgotICBDRkxBR1M9IiR7Q0ZMQUdTLS1PM30iCisgIExERkxBR1M9IiR7TERGTEFHU30gJHtBUkNIU30iCiAgIGlmIHRlc3QgJGJ1aWxkNjQgLWVxIDE7IHRoZW4KICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgogICAgIFNGTEFHUz0iJHtTRkxBR1N9IC1tNjQiCiAgIGZpCiAgIGlmIHRlc3QgIiR7WkxJQkdDQ1dBUk59IiA9ICJZRVMiOyB0aGVuCi0gICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtcGVkYW50aWMiCisgICAgaWYgdGVzdCAiJHpjb25zdCIgLWVxIDE7IHRoZW4KKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLVdjYXN0LXF1YWwgLXBlZGFudGljIC1EWkxJQl9DT05TVCIKKyAgICBlbHNlCisgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBmaQogICBmaQogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtcyB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYAogICBmaQogICBjYXNlICIkdW5hbWUiIGluCi0gIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgKkJTRCB8IERyYWdvbkZseSkgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifSA7OworICBMaW51eCogfCBsaW51eCogfCBHTlUgfCBHTlUvKiB8IHNvbGFyaXMqKQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9IDs7CisgICpCU0QgfCAqYnNkKiB8IERyYWdvbkZseSkKKyAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifQorICAgICAgICBMRENPTkZJRz0ibGRjb25maWcgLW0iIDs7CiAgIENZR1dJTiogfCBDeWd3aW4qIHwgY3lnd2luKiB8IE9TLzIqKQogICAgICAgICBFWEU9Jy5leGUnIDs7Ci0gIE1JTkdXKnxtaW5ndyopCisgIE1JTkdXKiB8IG1pbmd3KikKICMgdGVtcG9yYXJ5IGJ5cGFzcwogICAgICAgICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQKLSAgICAgICAgZWNobyAiUGxlYXNlIHVzZSB3aW4zMi9NYWtlZmlsZS5nY2MgaW5zdGVhZC4iCi0gICAgICAgIGV4aXQgMQorICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgICBsZWF2ZSAxCiAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0KICAgICAgICAgTERTSEFSRURMSUJDPSIiCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKQEAgLTE0MiwxNyArMjExLDI1IEBACiAgICAgICAgICAgICAgICAgIHNoYXJlZF9leHQ9Jy5zbCcKICAgICAgICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6LnNsJyA7OwogICAgICAgICAgZXNhYyA7OwotICBEYXJ3aW4qKSAgIHNoYXJlZF9leHQ9Jy5keWxpYicKKyAgRGFyd2luKiB8IGRhcndpbiopCisgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLmR5bGliJwogICAgICAgICAgICAgIFNIQVJFRExJQj1saWJ6JHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJWPWxpYnouJFZFUiRzaGFyZWRfZXh0CiAgICAgICAgICAgICAgU0hBUkVETElCTT1saWJ6LiRWRVIxJHNoYXJlZF9leHQKLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkbGliZGlyLyRTSEFSRURMSUJNIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJFZFUjEgLWN1cnJlbnRfdmVyc2lvbiAkVkVSMyJ9IDs7CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1keW5hbWljbGliIC1pbnN0YWxsX25hbWUgJGxpYmRpci8kU0hBUkVETElCTSAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICRWRVIxIC1jdXJyZW50X3ZlcnNpb24gJFZFUjMifQorICAgICAgICAgICAgIGlmIGxpYnRvb2wgLVYgMj4mMSB8IGdyZXAgQXBwbGUgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgQVI9ImxpYnRvb2wiCisgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICBBUj0iL3Vzci9iaW4vbGlidG9vbCIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIEFSRkxBR1M9Ii1vIiA7OwogICAqKSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCJ9IDs7CiAgIGVzYWMKIGVsc2UKICAgIyBmaW5kIHN5c3RlbSBuYW1lIGFuZCBjb3JyZXNwb25kaW5nIGNjIG9wdGlvbnMKICAgQ0M9JHtDQy1jY30KICAgZ2NjPTAKKyAgZWNobyAuLi4gdXNpbmcgJENDID4+IGNvbmZpZ3VyZS5sb2cKICAgaWYgdGVzdCAteiAiJHVuYW1lIjsgdGhlbgogICAgIHVuYW1lPWAodW5hbWUgLXNyIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCkBAIC0xODMsMTkgKzI2MCwzNCBAQAogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLTQgLU8ifQogICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIn0KICAgICAgICAgICAgICBSQU5MSUI9JHtSQU5MSUItInRydWUifQotICAgICAgICAgICAgIEFSX1JDPSJjYyAtQSIgOzsKKyAgICAgICAgICAgICBBUj0iY2MiCisgICAgICAgICAgICAgQVJGTEFHUz0iLUEiIDs7CiAgIFNDT19TVlwgMy4yKikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzMgLWR5IC1LUElDICJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzMifQogICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1keSAtS1BJQyAtRyJ9IDs7Ci0gIFN1bk9TXCA1KikgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLUcifQotICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCi0gICAgICAgICBpODYqKQotICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLXhwZW50aXVtIC1mYXN0IC1LUElDIC1SLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSIteHBlbnRpdW0gLWZhc3QifSA7OwotICAgICAgICAgKikKLSAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y2c5MiAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzkyIn0gOzsKLSAgICAgICAgIGVzYWMgOzsKKyAgU3VuT1NcIDUqIHwgc29sYXJpcyopCisgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyAtaCBsaWJ6JHNoYXJlZF9leHQuJFZFUjEifQorICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAtS1BJQyJ9CisgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1mYXN0In0KKyAgICAgICAgIGlmIHRlc3QgJGJ1aWxkNjQgLWVxIDE7IHRoZW4KKyAgICAgICAgICAgICAjIG9sZCB2ZXJzaW9ucyBvZiBTdW5QUk8vV29ya3Nob3AvU3R1ZGlvIGRvbid0IHN1cHBvcnQgLW02NCwKKyAgICAgICAgICAgICAjIGJ1dCBuZXdlciBvbmVzIGRvLiAgQ2hlY2sgZm9yIGl0LgorICAgICAgICAgICAgIGZsYWc2ND1gJENDIC1mbGFncyB8IGVncmVwIC0tICdeLW02NCdgCisgICAgICAgICAgICAgaWYgdGVzdCB4IiRmbGFnNjQiICE9IHgiIiA7IHRoZW4KKyAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLW02NCIKKyAgICAgICAgICAgICAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIGNhc2UgYCh1bmFtZSAtbSB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgorICAgICAgICAgICAgICAgICAgIGk4NiopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1MgLXhhcmNoPWFtZDY0IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD1hbWQ2NCIgOzsKKyAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC14YXJjaD12OSIKKyAgICAgICAgICAgICAgICAgICAgIENGTEFHUz0iJENGTEFHUyAteGFyY2g9djkiIDs7CisgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICBmaQorICAgICAgICAgZmkKKyAgICAgICAgIDs7CiAgIFN1bk9TXCA0KikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzIgLVBJQyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzIifQogICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImxkIn0gOzsKQEAgLTIyNSwyNSArMzE3LDc5IEBACiAgIGVzYWMKIGZpCiAKKyMgZGVzdGluYXRpb24gbmFtZXMgZm9yIHNoYXJlZCBsaWJyYXJ5IGlmIG5vdCBkZWZpbmVkIGFib3ZlCiBTSEFSRURMSUI9JHtTSEFSRURMSUItImxpYnokc2hhcmVkX2V4dCJ9CiBTSEFSRURMSUJWPSR7U0hBUkVETElCVi0ibGlieiRzaGFyZWRfZXh0LiRWRVIifQogU0hBUkVETElCTT0ke1NIQVJFRExJQk0tImxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGRlZmluZSBmdW5jdGlvbnMgZm9yIHRlc3RpbmcgY29tcGlsZXIgYW5kIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzIGFuZCBsb2dnaW5nIHRoZSByZXN1bHRzCisKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNlcnJvciBlcnJvcgorRU9GCitpZiAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4vZGV2L251bGw7IHRoZW4KKyAgdHJ5KCkKKyAgeworICAgIHNob3cgJCoKKyAgICB0ZXN0ICJgKCAkKiApIDI+JjEgfCB0ZWUgLWEgY29uZmlndXJlLmxvZ2AiID0gIiIKKyAgfQorICBlY2hvIC0gdXNpbmcgYW55IG91dHB1dCBmcm9tIGNvbXBpbGVyIHRvIGluZGljYXRlIGFuIGVycm9yID4+IGNvbmZpZ3VyZS5sb2cKK2Vsc2UKK3RyeSgpCit7CisgIHNob3cgJCoKKyAgKCAkKiApID4+IGNvbmZpZ3VyZS5sb2cgMj4mMQorICByZXQ9JD8KKyAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCisgICAgZWNobyAiKGV4aXQgY29kZSAiJHJldCIpIiA+PiBjb25maWd1cmUubG9nCisgIGZpCisgIHJldHVybiAkcmV0Cit9CitmaQorCit0cnlib3RoKCkKK3sKKyAgc2hvdyAkKgorICBnb3Q9YCggJCogKSAyPiYxYAorICByZXQ9JD8KKyAgcHJpbnRmICVzICIkZ290IiA+PiBjb25maWd1cmUubG9nCisgIGlmIHRlc3QgJHJldCAtbmUgMDsgdGhlbgorICAgIHJldHVybiAkcmV0CisgIGZpCisgIHRlc3QgIiRnb3QiID0gIiIKK30KKworY2F0ID4gJHRlc3QuYyA8PCBFT0YKK2ludCBmb28oKSB7IHJldHVybiAwOyB9CitFT0YKK2VjaG8gIkNoZWNraW5nIGZvciBvYnNlc3NpdmUtY29tcHVsc2l2ZSBjb21waWxlciBvcHRpb25zLi4uIiA+PiBjb25maWd1cmUubG9nCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIkNvbXBpbGVyIGVycm9yIHJlcG9ydGluZyBpcyB0b28gaGFyc2ggZm9yICQwIChwZXJoYXBzIHJlbW92ZSAtV2Vycm9yKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgbGVhdmUgMQorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgc2VlIGlmIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIHN1cHBvcnRlZAorY2F0ID4gJHRlc3QuYyA8PEVPRgorZXh0ZXJuIGludCBnZXRjaGFyKCk7CitpbnQgaGVsbG8oKSB7cmV0dXJuIGdldGNoYXIoKTt9CitFT0YKIGlmIHRlc3QgJHNoYXJlZCAtZXEgMTsgdGhlbgotICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uCisgIGVjaG8gQ2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAjIHdlIG11c3QgdGVzdCBpbiB0d28gc3RlcHMgKGNjIHRoZW4gbGQpLCByZXF1aXJlZCBhdCBsZWFzdCBvbiBTdW5PUyA0LngKLSAgaWYgdGVzdCAiYCgkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIiAmJgotICAgICB0ZXN0ICJgKCRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLgorICBpZiB0cnkgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYyAmJgorICAgICB0cnkgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vOyB0aGVuCisgICAgZWNobyBCdWlsZGluZyBzaGFyZWQgbGlicmFyeSAkU0hBUkVETElCViB3aXRoICRDQy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBlbGlmIHRlc3QgLXogIiRvbGRfY2MiIC1hIC16ICIkb2xkX2NmbGFncyI7IHRoZW4KLSAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuCisgICAgZWNobyBObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgc2hhcmVkPTA7CiAgIGVsc2UKLSAgICBlY2hvIFRlc3RlZCAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jCi0gICAgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYwotICAgIGVjaG8gVGVzdGVkICRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubwotICAgICRMRFNIQVJFRCAkU0ZMQUdTIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubwotICAgIGVjaG8gJ05vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQ7IHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MnCisgICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIHNoYXJlZD0wOwogICBmaQogZmkKQEAgLTI1NCwyNSArNDAwLDQzIEBACiAgIFNIQVJFRExJQj0iIgogICBTSEFSRURMSUJWPSIiCiAgIFNIQVJFRExJQk09IiIKLSAgZWNobyBCdWlsZGluZyBzdGF0aWMgbGlicmFyeSAkU1RBVElDTElCIHZlcnNpb24gJFZFUiB3aXRoICRDQy4KKyAgZWNobyBCdWlsZGluZyBzdGF0aWMgbGlicmFyeSAkU1RBVElDTElCIHZlcnNpb24gJFZFUiB3aXRoICRDQy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICBBTEw9InN0YXRpYyBzaGFyZWQiCiAgIFRFU1Q9ImFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQiCiBmaQogCisjIGNoZWNrIGZvciB1bmRlcnNjb3JlcyBpbiBleHRlcm5hbCBuYW1lcyBmb3IgdXNlIGJ5IGFzc2VtYmxlciBjb2RlCitDUFA9JHtDUFAtIiRDQyAtRSJ9CitjYXNlICRDRkxBR1MgaW4KKyAgKkFTTVYqKQorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICAgIHNob3cgIiROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG8iCisgICAgaWYgdGVzdCAiYCROTSAkdGVzdC5vIHwgZ3JlcCBfaGVsbG8gfCB0ZWUgLWEgY29uZmlndXJlLmxvZ2AiID0gIiI7IHRoZW4KKyAgICAgIENQUD0iJENQUCAtRE5PX1VOREVSTElORSIKKyAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBOby4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVsc2UKKyAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBmaSA7OworZXNhYworCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3IgbGFyZ2UgZmlsZSBzdXBwb3J0LCBhbmQgaWYgbm9uZSwgY2hlY2sgZm9yIGZzZWVrbygpCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiBvZmY2NF90IGR1bW15ID0gMDsKIEVPRgotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTIC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xICR0ZXN0LmM7IHRoZW4KICAgQ0ZMQUdTPSIke0NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCiAgIFNGTEFHUz0iJHtTRkxBR1N9IC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xIgogICBBTEw9IiR7QUxMfSBhbGw2NCIKICAgVEVTVD0iJHtURVNUfSB0ZXN0NjQiCi0gIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIFllcy4iCi0gIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gTm8uIgorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogaW50IG1haW4odm9pZCkgewpAQCAtMjgwLDI3MiArNDQ0LDMzNSBAQAogICByZXR1cm4gMDsKIH0KIEVPRgotICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBlbHNlCiAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19GU0VFS08iCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19GU0VFS08iCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBOby4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZmkKIGZpCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdHJlcnJvcigpIGZvciB1c2UgYnkgZ3oqIGZ1bmN0aW9ucworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CitpbnQgbWFpbigpIHsgcmV0dXJuIHN0cmxlbihzdHJlcnJvcihlcnJubykpOyB9CitFT0YKK2lmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitlbHNlCisgIENGTEFHUz0iJHtDRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIFNGTEFHUz0iJHtTRkxBR1N9IC1ETk9fU1RSRVJST1IiCisgIGVjaG8gIkNoZWNraW5nIGZvciBzdHJlcnJvci4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2ZpCisKKyMgY29weSBjbGVhbiB6Y29uZi5oIGZvciBzdWJzZXF1ZW50IGVkaXRzCiBjcCAtcCB6Y29uZi5oLmluIHpjb25mLmgKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHVuaXN0ZC5oIGFuZCBzYXZlIHJlc3VsdCBpbiB6Y29uZi5oCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KIEVPRgotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KICAgc2VkIDwgemNvbmYuaCAiL14jaWZkZWYgSEFWRV9VTklTVERfSC4qIG1heSBiZS9zL2RlZiBIQVZFX1VOSVNURF9IXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCiAgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIgorICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gTm8uIgorICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBmaQogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3Igc3RkYXJnLmggYW5kIHNhdmUgcmVzdWx0IGluIHpjb25mLmgKK2NhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRhcmcuaD4KK2ludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1NUREFSR19ILiogbWF5IGJlL3MvZGVmIEhBVkVfU1REQVJHX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKKyAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0ZGFyZy5oLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0ZGFyZy5oLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBpZiB0aGUgel8gcHJlZml4IHdhcyByZXF1ZXN0ZWQsIHNhdmUgdGhhdCBpbiB6Y29uZi5oCiBpZiB0ZXN0ICR6cHJlZml4IC1lcSAxOyB0aGVuCiAgIHNlZCA8IHpjb25mLmggIi8jaWZkZWYgWl9QUkVGSVguKiBtYXkgYmUvcy9kZWYgWl9QUkVGSVhcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKICAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKLSAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gIlVzaW5nIHpfIHByZWZpeCBvbiBhbGwgc3ltYm9scy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCiAKKyMgaWYgLS1zb2xvIGNvbXBpbGF0aW9uIHdhcyByZXF1ZXN0ZWQsIHNhdmUgdGhhdCBpbiB6Y29uZi5oIGFuZCByZW1vdmUgZ3ogc3R1ZmYgZnJvbSBvYmplY3QgbGlzdHMKK2lmIHRlc3QgJHNvbG8gLWVxIDE7IHRoZW4KKyAgc2VkICcvI2RlZmluZSBaQ09ORl9IL2FcCisjZGVmaW5lIFpfU09MTworCisnIDwgemNvbmYuaCA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorT0JKQz0nJChPQkpaKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKScKK2ZpCisKKyMgaWYgY29kZSBjb3ZlcmFnZSB0ZXN0aW5nIHdhcyByZXF1ZXN0ZWQsIHVzZSBvbGRlciBnY2MgaWYgZGVmaW5lZCwgZS5nLiAiZ2NjLTQuMiIgb24gTWFjIE9TIFgKK2lmIHRlc3QgJGNvdmVyIC1lcSAxOyB0aGVuCisgIENGTEFHUz0iJHtDRkxBR1N9IC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKyAgaWYgdGVzdCAtbiAiJEdDQ19DTEFTU0lDIjsgdGhlbgorICAgIENDPSRHQ0NfQ0xBU1NJQworICBmaQorZmkKKworZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY29uZHVjdCBhIHNlcmllcyBvZiB0ZXN0cyB0byByZXNvbHZlIGVpZ2h0IHBvc3NpYmxlIGNhc2VzIG9mIHVzaW5nICJ2cyIgb3IgInMiIHByaW50ZiBmdW5jdGlvbnMKKyMgKHVzaW5nIHN0ZGFyZyBvciBub3QpLCB3aXRoIG9yIHdpdGhvdXQgIm4iIChwcm92aW5nIHNpemUgb2YgYnVmZmVyKSwgYW5kIHdpdGggb3Igd2l0aG91dCBhCisjIHJldHVybiB2YWx1ZS4gIFRoZSBtb3N0IHNlY3VyZSByZXN1bHQgaXMgdnNucHJpbnRmKCkgd2l0aCBhIHJldHVybiB2YWx1ZS4gIHNucHJpbnRmKCkgd2l0aCBhCisjIHJldHVybiB2YWx1ZSBpcyBzZWN1cmUgYXMgd2VsbCwgYnV0IHRoZW4gZ3pwcmludGYoKSB3aWxsIGJlIGxpbWl0ZWQgdG8gMjAgYXJndW1lbnRzLgogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSAiemNvbmYuaCIKLQogaW50IG1haW4oKQogewogI2lmbmRlZiBTVERDCiAgIGNob2tlIG1lCiAjZW5kaWYKLQogICByZXR1cm4gMDsKIH0KIEVPRgoraWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgdnNbbl1wcmludGYoKS4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAotaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIKLQorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KIGludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gMDsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIgotCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgaW50IG47CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsKICAgdmFfZW5kKGFwKTsKICAgcmV0dXJuIG47CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoIkhlbGxvJWRcbiIsIDEpKTsKIH0KIEVPRgogCi0gICAgaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfdnNucHJpbnRmX3ZvaWQiCiAgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfdnNucHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKLSAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKLSAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZWxzZQogICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX3ZzbnByaW50ZiIKICAgICBTRkxBR1M9IiRTRkxBR1MgLUROT192c25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIgotICAgIGVjaG8gIiAgV0FSTklORzogdnNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gdnNwcmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHZzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+Ci0KIGludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGludCBuOwogICBjaGFyIGJ1ZlsyMF07CiAgIHZhX2xpc3QgYXA7Ci0KICAgdmFfc3RhcnQoYXAsIGZtdCk7CiAgIG4gPSB2c3ByaW50ZihidWYsIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gbjsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfdnNwcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c3ByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZmkKIGVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgc1tuXXByaW50ZigpLiIKKyAgZWNobyAiQ2hlY2tpbmcgd2hldGhlciB0byB1c2UgdnNbbl1wcmludGYoKSBvciBzW25dcHJpbnRmKCkuLi4gdXNpbmcgc1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKICAgcmV0dXJuIDA7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICBpZiB0ZXN0ICJgKCRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIgorICBpZiB0cnkgJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYzsgdGhlbgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KLQogaW50IG15dGVzdCgpCiB7CiAgIGNoYXIgYnVmWzIwXTsKLQogICByZXR1cm4gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVzLiIKKyAgICBpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc25wcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU19zbnByaW50Zl92b2lkIgotICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZWxzZQogICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX3NucHJpbnRmIgogICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3NucHJpbnRmIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIgotICAgIGVjaG8gIiAgV0FSTklORzogc25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byBzcHJpbnRmKCkuIHpsaWIiCi0gICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiCi0gICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBzbnByaW50ZigpIGluIHN0ZGlvLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzIiwgImZvbyIpOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU19zcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBOby4iCi0gICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc3ByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGZpCiAgIGZpCiBmaQogCisjIHNlZSBpZiB3ZSBjYW4gaGlkZSB6bGliIGludGVybmFsIHN5bWJvbHMgdGhhdCBhcmUgbGlua2VkIGJldHdlZW4gc2VwYXJhdGUgc291cmNlIGZpbGVzCiBpZiB0ZXN0ICIkZ2NjIiAtZXEgMTsgdGhlbgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgotI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpCi0jICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQotI2Vsc2UKLSMgIGRlZmluZSBaTElCX0lOVEVSTkFMCi0jZW5kaWYKKyNkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogaW50IFpMSUJfSU5URVJOQUwgZm9vOwogaW50IG1haW4oKQogewogICByZXR1cm4gMDsKIH0KIEVPRgotICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIFllcy4iCisgIGlmIHRyeWJvdGggJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICAgIENGTEFHUz0iJENGTEFHUyAtREhBVkVfSElEREVOIgorICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBVkVfSElEREVOIgorICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsc2UKLSAgICBDRkxBR1M9IiRDRkxBR1MgLUROT19WSVoiCi0gICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fVklaIgotICAgIGVjaG8gIkNoZWNraW5nIGZvciBhdHRyaWJ1dGUodmlzaWJpbGl0eSkgc3VwcG9ydC4uLiBOby4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBmaQogZmkKIAotQ1BQPSR7Q1BQLSIkQ0MgLUUifQotY2FzZSAkQ0ZMQUdTIGluCi0gICpBU01WKikKLSAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsb2AiID0gIiI7IHRoZW4KLSAgICAgIENQUD0iJENQUCAtRE5PX1VOREVSTElORSIKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBOby4KLSAgICBlbHNlCi0gICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gWWVzLgotICAgIGZpIDs7Ci1lc2FjCisjIHNob3cgdGhlIHJlc3VsdHMgaW4gdGhlIGxvZworZWNobyA+PiBjb25maWd1cmUubG9nCitlY2hvIEFMTCA9ICRBTEwgPj4gY29uZmlndXJlLmxvZworZWNobyBBUiA9ICRBUiA+PiBjb25maWd1cmUubG9nCitlY2hvIEFSRkxBR1MgPSAkQVJGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIENDID0gJENDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0ZMQUdTID0gJENGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIENQUCA9ICRDUFAgPj4gY29uZmlndXJlLmxvZworZWNobyBFWEUgPSAkRVhFID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERDT05GSUcgPSAkTERDT05GSUcgPj4gY29uZmlndXJlLmxvZworZWNobyBMREZMQUdTID0gJExERkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBMRFNIQVJFRCA9ICRMRFNIQVJFRCA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVETElCQyA9ICRMRFNIQVJFRExJQkMgPj4gY29uZmlndXJlLmxvZworZWNobyBPQkpDID0gJE9CSkMgPj4gY29uZmlndXJlLmxvZworZWNobyBQSUNfT0JKQyA9ICRQSUNfT0JKQyA+PiBjb25maWd1cmUubG9nCitlY2hvIFJBTkxJQiA9ICRSQU5MSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBTRkxBR1MgPSAkU0ZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCID0gJFNIQVJFRExJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQk0gPSAkU0hBUkVETElCTSA+PiBjb25maWd1cmUubG9nCitlY2hvIFNIQVJFRExJQlYgPSAkU0hBUkVETElCViA+PiBjb25maWd1cmUubG9nCitlY2hvIFNUQVRJQ0xJQiA9ICRTVEFUSUNMSUIgPj4gY29uZmlndXJlLmxvZworZWNobyBURVNUID0gJFRFU1QgPj4gY29uZmlndXJlLmxvZworZWNobyBWRVIgPSAkVkVSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gWl9VNCA9ICRaX1U0ID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gZXhlY19wcmVmaXggPSAkZXhlY19wcmVmaXggPj4gY29uZmlndXJlLmxvZworZWNobyBpbmNsdWRlZGlyID0gJGluY2x1ZGVkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBsaWJkaXIgPSAkbGliZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gbWFuZGlyID0gJG1hbmRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIHByZWZpeCA9ICRwcmVmaXggPj4gY29uZmlndXJlLmxvZworZWNobyBzaGFyZWRsaWJkaXIgPSAkc2hhcmVkbGliZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gdW5hbWUgPSAkdW5hbWUgPj4gY29uZmlndXJlLmxvZwogCi1ybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQKLQotIyB1ZHBhdGUgTWFrZWZpbGUKKyMgdWRwYXRlIE1ha2VmaWxlIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCiBzZWQgPCBNYWtlZmlsZS5pbiAiCiAvXkNDICo9L3MjPS4qIz0kQ0MjCiAvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKQEAgLTU1Nyw3ICs3ODQsOCBAQAogL15TSEFSRURMSUIgKj0vcyM9LiojPSRTSEFSRURMSUIjCiAvXlNIQVJFRExJQlYgKj0vcyM9LiojPSRTSEFSRURMSUJWIwogL15TSEFSRURMSUJNICo9L3MjPS4qIz0kU0hBUkVETElCTSMKLS9eQVIgKj0vcyM9LiojPSRBUl9SQyMKKy9eQVIgKj0vcyM9LiojPSRBUiMKKy9eQVJGTEFHUyAqPS9zIz0uKiM9JEFSRkxBR1MjCiAvXlJBTkxJQiAqPS9zIz0uKiM9JFJBTkxJQiMKIC9eTERDT05GSUcgKj0vcyM9LiojPSRMRENPTkZJRyMKIC9eTERTSEFSRURMSUJDICo9L3MjPS4qIz0kTERTSEFSRURMSUJDIwpAQCAtNTY4LDEwICs3OTYsMTMgQEAKIC9ec2hhcmVkbGliZGlyICo9L3MjPS4qIz0kc2hhcmVkbGliZGlyIwogL15pbmNsdWRlZGlyICo9L3MjPS4qIz0kaW5jbHVkZWRpciMKIC9ebWFuZGlyICo9L3MjPS4qIz0kbWFuZGlyIworL15PQkpDICo9L3MjPS4qIz0gJE9CSkMjCisvXlBJQ19PQkpDICo9L3MjPS4qIz0gJFBJQ19PQkpDIwogL15hbGw6ICovcyM6LiojOiAkQUxMIwogL150ZXN0OiAqL3MjOi4qIzogJFRFU1QjCiAiID4gTWFrZWZpbGUKIAorIyBjcmVhdGUgemxpYi5wYyB3aXRoIHRoZSBjb25maWd1cmUgcmVzdWx0cwogc2VkIDwgemxpYi5wYy5pbiAiCiAvXkNDICo9L3MjPS4qIz0kQ0MjCiAvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKQEAgLTU4MSw3ICs4MTIsOCBAQAogL15TSEFSRURMSUIgKj0vcyM9LiojPSRTSEFSRURMSUIjCiAvXlNIQVJFRExJQlYgKj0vcyM9LiojPSRTSEFSRURMSUJWIwogL15TSEFSRURMSUJNICo9L3MjPS4qIz0kU0hBUkVETElCTSMKLS9eQVIgKj0vcyM9LiojPSRBUl9SQyMKKy9eQVIgKj0vcyM9LiojPSRBUiMKKy9eQVJGTEFHUyAqPS9zIz0uKiM9JEFSRkxBR1MjCiAvXlJBTkxJQiAqPS9zIz0uKiM9JFJBTkxJQiMKIC9eRVhFICo9L3MjPS4qIz0kRVhFIwogL15wcmVmaXggKj0vcyM9LiojPSRwcmVmaXgjCkBAIC01OTQsMyArODI2LDYgQEAKICIgfCBzZWQgLWUgIgogcy9cQFZFUlNJT05cQC8kVkVSL2c7CiAiID4gemxpYi5wYworCisjIGRvbmUKK2xlYXZlIDAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jcmMzMi5jIGIvTW9kdWxlcy96bGliL2NyYzMyLmMKaW5kZXggOTFiZTM3Mi4uOTc5YTcxOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NyYzMyLmMKKysrIGIvTW9kdWxlcy96bGliL2NyYzMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiBjcmMzMi5jIC0tIGNvbXB1dGUgdGhlIENSQy0zMiBvZiBhIGRhdGEgc3RyZWFtCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSwgMjAxMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKgogICogVGhhbmtzIHRvIFJvZG5leSBCcm93biA8cmJyb3duNjRAY3NjLmNvbS5hdT4gZm9yIGhpcyBjb250cmlidXRpb24gb2YgZmFzdGVyCkBAIC0xNyw2ICsxNyw4IEBACiAgIG9mIHRoZSBjcmMgdGFibGVzLiAgVGhlcmVmb3JlLCBpZiB5b3UgI2RlZmluZSBEWU5BTUlDX0NSQ19UQUJMRSwgeW91IHNob3VsZAogICBmaXJzdCBjYWxsIGdldF9jcmNfdGFibGUoKSB0byBpbml0aWFsaXplIHRoZSB0YWJsZXMgYmVmb3JlIGFsbG93aW5nIG1vcmUgdGhhbgogICBvbmUgdGhyZWFkIHRvIHVzZSBjcmMzMigpLgorCisgIERZTkFNSUNfQ1JDX1RBQkxFIGFuZCBNQUtFQ1JDSCBjYW4gYmUgI2RlZmluZWQgdG8gd3JpdGUgb3V0IGNyYzMyLmguCiAgKi8KIAogI2lmZGVmIE1BS0VDUkNICkBAIC0zMCwzMSArMzIsMTEgQEAKIAogI2RlZmluZSBsb2NhbCBzdGF0aWMKIAotLyogRmluZCBhIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUgZm9yIGNyYzMyX2xpdHRsZSgpIGFuZCBjcmMzMl9iaWcoKS4gKi8KLSNpZm5kZWYgTk9CWUZPVVIKLSMgIGlmZGVmIFNUREMgICAgICAgICAgIC8qIG5lZWQgQU5TSSBDIGxpbWl0cy5oIHRvIGRldGVybWluZSBzaXplcyAqLwotIyAgICBpbmNsdWRlIDxsaW1pdHMuaD4KLSMgICAgZGVmaW5lIEJZRk9VUgotIyAgICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQotICAgICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IHU0OwotIyAgICBlbHNlCi0jICAgICAgaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdTQ7Ci0jICAgICAgZWxzZQotIyAgICAgICAgaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTQ7Ci0jICAgICAgICBlbHNlCi0jICAgICAgICAgIHVuZGVmIEJZRk9VUiAgICAgLyogY2FuJ3QgZmluZCBhIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUhICovCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZiAvKiBTVERDICovCi0jZW5kaWYgLyogIU5PQllGT1VSICovCi0KIC8qIERlZmluaXRpb25zIGZvciBkb2luZyB0aGUgY3JjIGZvdXIgZGF0YSBieXRlcyBhdCBhIHRpbWUuICovCisjaWYgIWRlZmluZWQoTk9CWUZPVVIpICYmIGRlZmluZWQoWl9VNCkKKyMgIGRlZmluZSBCWUZPVVIKKyNlbmRpZgogI2lmZGVmIEJZRk9VUgotIyAgZGVmaW5lIFJFVih3KSAoKCgodyk+PjI0KSYweGZmKSsoKCh3KT4+OCkmMHhmZjAwKSsgXAotICAgICAgICAgICAgICAgICgoKHcpJjB4ZmYwMCk8PDgpKygoKHcpJjB4ZmYpPDwyNCkpCiAgICBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2xpdHRsZSBPRigodW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CiAgICBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2JpZyBPRigodW5zaWduZWQgbG9uZywKQEAgLTY4LDE2ICs1MCwxNiBAQAogbG9jYWwgdW5zaWduZWQgbG9uZyBnZjJfbWF0cml4X3RpbWVzIE9GKCh1bnNpZ25lZCBsb25nICptYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmVjKSk7CiBsb2NhbCB2b2lkIGdmMl9tYXRyaXhfc3F1YXJlIE9GKCh1bnNpZ25lZCBsb25nICpzcXVhcmUsIHVuc2lnbmVkIGxvbmcgKm1hdCkpOwotbG9jYWwgdUxvbmcgY3JjMzJfY29tYmluZV8odUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpOworbG9jYWwgdUxvbmcgY3JjMzJfY29tYmluZV8gT0YoKHVMb25nIGNyYzEsIHVMb25nIGNyYzIsIHpfb2ZmNjRfdCBsZW4yKSk7CiAKIAogI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCiAKIGxvY2FsIHZvbGF0aWxlIGludCBjcmNfdGFibGVfZW1wdHkgPSAxOwotbG9jYWwgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl07Citsb2NhbCB6X2NyY190IEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XTsKIGxvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUgT0YoKHZvaWQpKTsKICNpZmRlZiBNQUtFQ1JDSAotICAgbG9jYWwgdm9pZCB3cml0ZV90YWJsZSBPRigoRklMRSAqLCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKSk7CisgICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHpfY3JjX3QgRkFSICopKTsKICNlbmRpZiAvKiBNQUtFQ1JDSCAqLwogLyoKICAgR2VuZXJhdGUgdGFibGVzIGZvciBhIGJ5dGUtd2lzZSAzMi1iaXQgQ1JDIGNhbGN1bGF0aW9uIG9uIHRoZSBwb2x5bm9taWFsOgpAQCAtMTA3LDkgKzg5LDkgQEAKICovCiBsb2NhbCB2b2lkIG1ha2VfY3JjX3RhYmxlKCkKIHsKLSAgICB1bnNpZ25lZCBsb25nIGM7CisgICAgel9jcmNfdCBjOwogICAgIGludCBuLCBrOwotICAgIHVuc2lnbmVkIGxvbmcgcG9seTsgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KKyAgICB6X2NyY190IHBvbHk7ICAgICAgICAgICAgICAgICAgICAgICAvKiBwb2x5bm9taWFsIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuICovCiAgICAgLyogdGVybXMgb2YgcG9seW5vbWlhbCBkZWZpbmluZyB0aGlzIGNyYyAoZXhjZXB0IHheMzIpOiAqLwogICAgIHN0YXRpYyB2b2xhdGlsZSBpbnQgZmlyc3QgPSAxOyAgICAgIC8qIGZsYWcgdG8gbGltaXQgY29uY3VycmVudCBtYWtpbmcgKi8KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwW10gPSB7MCwxLDIsNCw1LDcsOCwxMCwxMSwxMiwxNiwyMiwyMywyNn07CkBAIC0xMjEsMTMgKzEwMywxMyBAQAogICAgICAgICBmaXJzdCA9IDA7CiAKICAgICAgICAgLyogbWFrZSBleGNsdXNpdmUtb3IgcGF0dGVybiBmcm9tIHBvbHlub21pYWwgKDB4ZWRiODgzMjBVTCkgKi8KLSAgICAgICAgcG9seSA9IDBVTDsKLSAgICAgICAgZm9yIChuID0gMDsgbiA8IHNpemVvZihwKS9zaXplb2YodW5zaWduZWQgY2hhcik7IG4rKykKLSAgICAgICAgICAgIHBvbHkgfD0gMVVMIDw8ICgzMSAtIHBbbl0pOworICAgICAgICBwb2x5ID0gMDsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IChpbnQpKHNpemVvZihwKS9zaXplb2YodW5zaWduZWQgY2hhcikpOyBuKyspCisgICAgICAgICAgICBwb2x5IHw9ICh6X2NyY190KTEgPDwgKDMxIC0gcFtuXSk7CiAKICAgICAgICAgLyogZ2VuZXJhdGUgYSBjcmMgZm9yIGV2ZXJ5IDgtYml0IHZhbHVlICovCiAgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewotICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBsb25nKW47CisgICAgICAgICAgICBjID0gKHpfY3JjX3QpbjsKICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspCiAgICAgICAgICAgICAgICAgYyA9IGMgJiAxID8gcG9seSBeIChjID4+IDEpIDogYyA+PiAxOwogICAgICAgICAgICAgY3JjX3RhYmxlWzBdW25dID0gYzsKQEAgLTEzOCwxMSArMTIwLDExIEBACiAgICAgICAgICAgIGFuZCB0aGVuIHRoZSBieXRlIHJldmVyc2FsIG9mIHRob3NlIGFzIHdlbGwgYXMgdGhlIGZpcnN0IHRhYmxlICovCiAgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykgewogICAgICAgICAgICAgYyA9IGNyY190YWJsZVswXVtuXTsKLSAgICAgICAgICAgIGNyY190YWJsZVs0XVtuXSA9IFJFVihjKTsKKyAgICAgICAgICAgIGNyY190YWJsZVs0XVtuXSA9IFpTV0FQMzIoYyk7CiAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDwgNDsgaysrKSB7CiAgICAgICAgICAgICAgICAgYyA9IGNyY190YWJsZVswXVtjICYgMHhmZl0gXiAoYyA+PiA4KTsKICAgICAgICAgICAgICAgICBjcmNfdGFibGVba11bbl0gPSBjOwotICAgICAgICAgICAgICAgIGNyY190YWJsZVtrICsgNF1bbl0gPSBSRVYoYyk7CisgICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFpTV0FQMzIoYyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICNlbmRpZiAvKiBCWUZPVVIgKi8KQEAgLTE2NCw3ICsxNDYsNyBAQAogICAgICAgICBpZiAob3V0ID09IE5VTEwpIHJldHVybjsKICAgICAgICAgZnByaW50ZihvdXQsICIvKiBjcmMzMi5oIC0tIHRhYmxlcyBmb3IgcmFwaWQgQ1JDIGNhbGN1bGF0aW9uXG4iKTsKICAgICAgICAgZnByaW50ZihvdXQsICIgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jXG4gKi9cblxuIik7Ci0gICAgICAgIGZwcmludGYob3V0LCAibG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgIik7CisgICAgICAgIGZwcmludGYob3V0LCAibG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgIik7CiAgICAgICAgIGZwcmludGYob3V0LCAiY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPVxue1xuICB7XG4iKTsKICAgICAgICAgd3JpdGVfdGFibGUob3V0LCBjcmNfdGFibGVbMF0pOwogIyAgaWZkZWYgQllGT1VSCkBAIC0xODQsMTIgKzE2NiwxMyBAQAogI2lmZGVmIE1BS0VDUkNICiBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlKG91dCwgdGFibGUpCiAgICAgRklMRSAqb3V0OwotICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICp0YWJsZTsKKyAgICBjb25zdCB6X2NyY190IEZBUiAqdGFibGU7CiB7CiAgICAgaW50IG47CiAKICAgICBmb3IgKG4gPSAwOyBuIDwgMjU2OyBuKyspCi0gICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsIHRhYmxlW25dLAorICAgICAgICBmcHJpbnRmKG91dCwgIiVzMHglMDhseFVMJXMiLCBuICUgNSA/ICIiIDogIiAgICAiLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh0YWJsZVtuXSksCiAgICAgICAgICAgICAgICAgbiA9PSAyNTUgPyAiXG4iIDogKG4gJSA1ID09IDQgPyAiLFxuIiA6ICIsICIpKTsKIH0KICNlbmRpZiAvKiBNQUtFQ1JDSCAqLwpAQCAtMjA0LDEzICsxODcsMTMgQEAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgYXNtIHZlcnNpb25zIG9mIGNyYzMyKCkKICAqLwotY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQorY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUoKQogewogI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCiAgICAgaWYgKGNyY190YWJsZV9lbXB0eSkKICAgICAgICAgbWFrZV9jcmNfdGFibGUoKTsKICNlbmRpZiAvKiBEWU5BTUlDX0NSQ19UQUJMRSAqLwotICAgIHJldHVybiAoY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKiljcmNfdGFibGU7CisgICAgcmV0dXJuIChjb25zdCB6X2NyY190IEZBUiAqKWNyY190YWJsZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtMjMyLDcgKzIxNSw3IEBACiAKICNpZmRlZiBCWUZPVVIKICAgICBpZiAoc2l6ZW9mKHZvaWQgKikgPT0gc2l6ZW9mKHB0cmRpZmZfdCkpIHsKLSAgICAgICAgdTQgZW5kaWFuOworICAgICAgICB6X2NyY190IGVuZGlhbjsKIAogICAgICAgICBlbmRpYW4gPSAxOwogICAgICAgICBpZiAoKigodW5zaWduZWQgY2hhciAqKSgmZW5kaWFuKSkpCkBAIC0yNjYsMTcgKzI0OSwxNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiAgICAgdW5zaWduZWQgbGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAotICAgIGMgPSAodTQpY3JjOworICAgIGMgPSAoel9jcmNfdCljcmM7CiAgICAgYyA9IH5jOwogICAgIHdoaWxlIChsZW4gJiYgKChwdHJkaWZmX3QpYnVmICYgMykpIHsKICAgICAgICAgYyA9IGNyY190YWJsZVswXVsoYyBeICpidWYrKykgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICBsZW4tLTsKICAgICB9CiAKLSAgICBidWY0ID0gKGNvbnN0IHU0IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKKyAgICBidWY0ID0gKGNvbnN0IHpfY3JjX3QgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOwogICAgIHdoaWxlIChsZW4gPj0gMzIpIHsKICAgICAgICAgRE9MSVQzMjsKICAgICAgICAgbGVuIC09IDMyOwpAQCAtMzA2LDE3ICsyODksMTcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogICAgIHVuc2lnbmVkIGxlbjsKIHsKLSAgICByZWdpc3RlciB1NCBjOwotICAgIHJlZ2lzdGVyIGNvbnN0IHU0IEZBUiAqYnVmNDsKKyAgICByZWdpc3RlciB6X2NyY190IGM7CisgICAgcmVnaXN0ZXIgY29uc3Qgel9jcmNfdCBGQVIgKmJ1ZjQ7CiAKLSAgICBjID0gUkVWKCh1NCljcmMpOworICAgIGMgPSBaU1dBUDMyKCh6X2NyY190KWNyYyk7CiAgICAgYyA9IH5jOwogICAgIHdoaWxlIChsZW4gJiYgKChwdHJkaWZmX3QpYnVmICYgMykpIHsKICAgICAgICAgYyA9IGNyY190YWJsZVs0XVsoYyA+PiAyNCkgXiAqYnVmKytdIF4gKGMgPDwgOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CiAgICAgYnVmNC0tOwogICAgIHdoaWxlIChsZW4gPj0gMzIpIHsKICAgICAgICAgRE9CSUczMjsKQEAgLTMzMyw3ICszMTYsNyBAQAogICAgICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAgICB9IHdoaWxlICgtLWxlbik7CiAgICAgYyA9IH5jOwotICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoUkVWKGMpKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpKFpTV0FQMzIoYykpOwogfQogCiAjZW5kaWYgLyogQllGT1VSICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY3JjMzIuaCBiL01vZHVsZXMvemxpYi9jcmMzMi5oCmluZGV4IDgwNTNiNjEuLjllMGM3NzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jcmMzMi5oCisrKyBiL01vZHVsZXMvemxpYi9jcmMzMi5oCkBAIC0yLDcgKzIsNyBAQAogICogR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY3JjMzIuYwogICovCiAKLWxvY2FsIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdID0KK2xvY2FsIGNvbnN0IHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdID0KIHsKICAgewogICAgIDB4MDAwMDAwMDBVTCwgMHg3NzA3MzA5NlVMLCAweGVlMGU2MTJjVUwsIDB4OTkwOTUxYmFVTCwgMHgwNzZkYzQxOVVMLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2RlZmxhdGUuYyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKaW5kZXggYmNlZjY3Yy4uNjk2OTU3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2RlZmxhdGUuYworKysgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZGVmbGF0ZS5jIC0tIGNvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlvbiBhbGdvcml0aG0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0zNyw3ICszNyw3IEBACiAgKiAgUkVGRVJFTkNFUwogICoKICAqICAgICAgRGV1dHNjaCwgTC5QLiwiREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24iLgotICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MS50eHQKKyAqICAgICAgQXZhaWxhYmxlIGluIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEKICAqCiAgKiAgICAgIEEgZGVzY3JpcHRpb24gb2YgdGhlIFJhYmluIGFuZCBLYXJwIGFsZ29yaXRobSBpcyBnaXZlbiBpbiB0aGUgYm9vawogICogICAgICAgICAiQWxnb3JpdGhtcyIgYnkgUi4gU2VkZ2V3aWNrLCBBZGRpc29uLVdlc2xleSwgcDI1Mi4KQEAgLTUyLDcgKzUyLDcgQEAKICNpbmNsdWRlICJkZWZsYXRlLmgiCiAKIGNvbnN0IGNoYXIgZGVmbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGRlZmxhdGUgMS4yLjUgQ29weXJpZ2h0IDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyICI7CisgICAiIGRlZmxhdGUgMS4yLjggQ29weXJpZ2h0IDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTE1NSw5ICsxNTUsMTIgQEAKIHN0cnVjdCBzdGF0aWNfdHJlZV9kZXNjX3Mge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjZW5kaWYKIAorLyogcmFuayBaX0JMT0NLIGJldHdlZW4gWl9OT19GTFVTSCBhbmQgWl9QQVJUSUFMX0ZMVVNIICovCisjZGVmaW5lIFJBTksoZikgKCgoZikgPDwgMSkgLSAoKGYpID4gNCA/IDkgOiAwKSkKKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBVcGRhdGUgYSBoYXNoIHZhbHVlIHdpdGggdGhlIGdpdmVuIGlucHV0IGJ5dGUKLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gdG8gVVBEQVRFX0hBU0ggYXJlIG1hZGUgd2l0aCBjb25zZWN1dGl2ZQogICogICAgaW5wdXQgY2hhcmFjdGVycywgc28gdGhhdCBhIHJ1bm5pbmcgaGFzaCBrZXkgY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlCiAgKiAgICBwcmV2aW91cyBrZXkgaW5zdGVhZCBvZiBjb21wbGV0ZSByZWNhbGN1bGF0aW9uIGVhY2ggdGltZS4KICAqLwpAQCAtMTcwLDcgKzE3Myw3IEBACiAgKiB0aGUgcHJldmlvdXMgbGVuZ3RoIG9mIHRoZSBoYXNoIGNoYWluLgogICogSWYgdGhpcyBmaWxlIGlzIGNvbXBpbGVkIHdpdGggLURGQVNURVNULCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgZm9yY2VkCiAgKiB0byAxLCBhbmQgbm8gaGFzaCBjaGFpbnMgYXJlIG1haW50YWluZWQuCi0gKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCisgKiBJTiAgYXNzZXJ0aW9uOiBhbGwgY2FsbHMgdG8gdG8gSU5TRVJUX1NUUklORyBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCiAgKiAgICBpbnB1dCBjaGFyYWN0ZXJzIGFuZCB0aGUgZmlyc3QgTUlOX01BVENIIGJ5dGVzIG9mIHN0ciBhcmUgdmFsaWQKICAqICAgIChleGNlcHQgZm9yIHRoZSBsYXN0IE1JTl9NQVRDSC0xIGJ5dGVzIG9mIHRoZSBpbnB1dCBmaWxlKS4KICAqLwpAQCAtMjM1LDEwICsyMzgsMTkgQEAKIAogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsKICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAKICNpZmRlZiBGQVNURVNUCiAgICAgaWYgKGxldmVsICE9IDApIGxldmVsID0gMTsKQEAgLTI5Myw3ICszMDUsNyBAQAogICAgIGlmIChzLT53aW5kb3cgPT0gWl9OVUxMIHx8IHMtPnByZXYgPT0gWl9OVUxMIHx8IHMtPmhlYWQgPT0gWl9OVUxMIHx8CiAgICAgICAgIHMtPnBlbmRpbmdfYnVmID09IFpfTlVMTCkgewogICAgICAgICBzLT5zdGF0dXMgPSBGSU5JU0hfU1RBVEU7Ci0gICAgICAgIHN0cm0tPm1zZyA9IChjaGFyKilFUlJfTVNHKFpfTUVNX0VSUk9SKTsKKyAgICAgICAgc3RybS0+bXNnID0gRVJSX01TRyhaX01FTV9FUlJPUik7CiAgICAgICAgIGRlZmxhdGVFbmQgKHN0cm0pOwogICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgfQpAQCAtMzE0LDQzICszMjYsNzAgQEAKICAgICB1SW50ICBkaWN0TGVuZ3RoOwogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgdUludCBsZW5ndGggPSBkaWN0TGVuZ3RoOwotICAgIHVJbnQgbjsKLSAgICBJUG9zIGhhc2hfaGVhZCA9IDA7CisgICAgdUludCBzdHIsIG47CisgICAgaW50IHdyYXA7CisgICAgdW5zaWduZWQgYXZhaWw7CisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyICpuZXh0OwogCi0gICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBkaWN0aW9uYXJ5ID09IFpfTlVMTCB8fAotICAgICAgICBzdHJtLT5zdGF0ZS0+d3JhcCA9PSAyIHx8Ci0gICAgICAgIChzdHJtLT5zdGF0ZS0+d3JhcCA9PSAxICYmIHN0cm0tPnN0YXRlLT5zdGF0dXMgIT0gSU5JVF9TVEFURSkpCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCB8fCBkaWN0aW9uYXJ5ID09IFpfTlVMTCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICB3cmFwID0gcy0+d3JhcDsKKyAgICBpZiAod3JhcCA9PSAyIHx8ICh3cmFwID09IDEgJiYgcy0+c3RhdHVzICE9IElOSVRfU1RBVEUpIHx8IHMtPmxvb2thaGVhZCkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCi0gICAgcyA9IHN0cm0tPnN0YXRlOwotICAgIGlmIChzLT53cmFwKQorICAgIC8qIHdoZW4gdXNpbmcgemxpYiB3cmFwcGVycywgY29tcHV0ZSBBZGxlci0zMiBmb3IgcHJvdmlkZWQgZGljdGlvbmFyeSAqLworICAgIGlmICh3cmFwID09IDEpCiAgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgcy0+d3JhcCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBhdm9pZCBjb21wdXRpbmcgQWRsZXItMzIgaW4gcmVhZF9idWYgKi8KIAotICAgIGlmIChsZW5ndGggPCBNSU5fTUFUQ0gpIHJldHVybiBaX09LOwotICAgIGlmIChsZW5ndGggPiBzLT53X3NpemUpIHsKLSAgICAgICAgbGVuZ3RoID0gcy0+d19zaXplOwotICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5ndGggLSBsZW5ndGg7IC8qIHVzZSB0aGUgdGFpbCBvZiB0aGUgZGljdGlvbmFyeSAqLworICAgIC8qIGlmIGRpY3Rpb25hcnkgd291bGQgZmlsbCB3aW5kb3csIGp1c3QgcmVwbGFjZSB0aGUgaGlzdG9yeSAqLworICAgIGlmIChkaWN0TGVuZ3RoID49IHMtPndfc2l6ZSkgeworICAgICAgICBpZiAod3JhcCA9PSAwKSB7ICAgICAgICAgICAgLyogYWxyZWFkeSBlbXB0eSBvdGhlcndpc2UgKi8KKyAgICAgICAgICAgIENMRUFSX0hBU0gocyk7CisgICAgICAgICAgICBzLT5zdHJzdGFydCA9IDA7CisgICAgICAgICAgICBzLT5ibG9ja19zdGFydCA9IDBMOworICAgICAgICAgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBkaWN0aW9uYXJ5ICs9IGRpY3RMZW5ndGggLSBzLT53X3NpemU7ICAvKiB1c2UgdGhlIHRhaWwgKi8KKyAgICAgICAgZGljdExlbmd0aCA9IHMtPndfc2l6ZTsKICAgICB9Ci0gICAgem1lbWNweShzLT53aW5kb3csIGRpY3Rpb25hcnksIGxlbmd0aCk7Ci0gICAgcy0+c3Ryc3RhcnQgPSBsZW5ndGg7Ci0gICAgcy0+YmxvY2tfc3RhcnQgPSAobG9uZylsZW5ndGg7CiAKLSAgICAvKiBJbnNlcnQgYWxsIHN0cmluZ3MgaW4gdGhlIGhhc2ggdGFibGUgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgdHdvIGJ5dGVzKS4KLSAgICAgKiBzLT5sb29rYWhlYWQgc3RheXMgbnVsbCwgc28gcy0+aW5zX2ggd2lsbCBiZSByZWNvbXB1dGVkIGF0IHRoZSBuZXh0Ci0gICAgICogY2FsbCBvZiBmaWxsX3dpbmRvdy4KLSAgICAgKi8KLSAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1swXTsKLSAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93WzFdKTsKLSAgICBmb3IgKG4gPSAwOyBuIDw9IGxlbmd0aCAtIE1JTl9NQVRDSDsgbisrKSB7Ci0gICAgICAgIElOU0VSVF9TVFJJTkcocywgbiwgaGFzaF9oZWFkKTsKKyAgICAvKiBpbnNlcnQgZGljdGlvbmFyeSBpbnRvIHdpbmRvdyBhbmQgaGFzaCAqLworICAgIGF2YWlsID0gc3RybS0+YXZhaWxfaW47CisgICAgbmV4dCA9IHN0cm0tPm5leHRfaW47CisgICAgc3RybS0+YXZhaWxfaW4gPSBkaWN0TGVuZ3RoOworICAgIHN0cm0tPm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKWRpY3Rpb25hcnk7CisgICAgZmlsbF93aW5kb3cocyk7CisgICAgd2hpbGUgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgc3RyID0gcy0+c3Ryc3RhcnQ7CisgICAgICAgIG4gPSBzLT5sb29rYWhlYWQgLSAoTUlOX01BVENILTEpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgIHMtPnByZXZbc3RyICYgcy0+d19tYXNrXSA9IHMtPmhlYWRbcy0+aW5zX2hdOworI2VuZGlmCisgICAgICAgICAgICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgc3RyKys7CisgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIHMtPnN0cnN0YXJ0ID0gc3RyOworICAgICAgICBzLT5sb29rYWhlYWQgPSBNSU5fTUFUQ0gtMTsKKyAgICAgICAgZmlsbF93aW5kb3cocyk7CiAgICAgfQotICAgIGlmIChoYXNoX2hlYWQpIGhhc2hfaGVhZCA9IDA7ICAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCisgICAgcy0+c3Ryc3RhcnQgKz0gcy0+bG9va2FoZWFkOworICAgIHMtPmJsb2NrX3N0YXJ0ID0gKGxvbmcpcy0+c3Ryc3RhcnQ7CisgICAgcy0+aW5zZXJ0ID0gcy0+bG9va2FoZWFkOworICAgIHMtPmxvb2thaGVhZCA9IDA7CisgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKKyAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOworICAgIHN0cm0tPm5leHRfaW4gPSBuZXh0OworICAgIHN0cm0tPmF2YWlsX2luID0gYXZhaWw7CisgICAgcy0+d3JhcCA9IHdyYXA7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLWludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKQEAgLTM4MCwxMiArNDE5LDIzIEBACiAgICAgcy0+bGFzdF9mbHVzaCA9IFpfTk9fRkxVU0g7CiAKICAgICBfdHJfaW5pdChzKTsKLSAgICBsbV9pbml0KHMpOwogCiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KK2ludCBaRVhQT1JUIGRlZmxhdGVSZXNldCAoc3RybSkKKyAgICB6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gZGVmbGF0ZVJlc2V0S2VlcChzdHJtKTsKKyAgICBpZiAocmV0ID09IFpfT0spCisgICAgICAgIGxtX2luaXQoc3RybS0+c3RhdGUpOworICAgIHJldHVybiByZXQ7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgKHN0cm0sIGhlYWQpCiAgICAgel9zdHJlYW1wIHN0cm07CiAgICAgZ3pfaGVhZGVycCBoZWFkOwpAQCAtMzk3LDE0ICs0NDcsNDIgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgKHN0cm0sIHBlbmRpbmcsIGJpdHMpCisgICAgdW5zaWduZWQgKnBlbmRpbmc7CisgICAgaW50ICpiaXRzOworICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBpZiAocGVuZGluZyAhPSBaX05VTEwpCisgICAgICAgICpwZW5kaW5nID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgaWYgKGJpdHMgIT0gWl9OVUxMKQorICAgICAgICAqYml0cyA9IHN0cm0tPnN0YXRlLT5iaV92YWxpZDsKKyAgICByZXR1cm4gWl9PSzsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIChzdHJtLCBiaXRzLCB2YWx1ZSkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBpbnQgYml0czsKICAgICBpbnQgdmFsdWU7CiB7CisgICAgZGVmbGF0ZV9zdGF0ZSAqczsKKyAgICBpbnQgcHV0OworCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotICAgIHN0cm0tPnN0YXRlLT5iaV92YWxpZCA9IGJpdHM7Ci0gICAgc3RybS0+c3RhdGUtPmJpX2J1ZiA9ICh1c2gpKHZhbHVlICYgKCgxIDw8IGJpdHMpIC0gMSkpOworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICBpZiAoKEJ5dGVmICopKHMtPmRfYnVmKSA8IHMtPnBlbmRpbmdfb3V0ICsgKChCdWZfc2l6ZSArIDcpID4+IDMpKQorICAgICAgICByZXR1cm4gWl9CVUZfRVJST1I7CisgICAgZG8geworICAgICAgICBwdXQgPSBCdWZfc2l6ZSAtIHMtPmJpX3ZhbGlkOworICAgICAgICBpZiAocHV0ID4gYml0cykKKyAgICAgICAgICAgIHB1dCA9IGJpdHM7CisgICAgICAgIHMtPmJpX2J1ZiB8PSAodXNoKSgodmFsdWUgJiAoKDEgPDwgcHV0KSAtIDEpKSA8PCBzLT5iaV92YWxpZCk7CisgICAgICAgIHMtPmJpX3ZhbGlkICs9IHB1dDsKKyAgICAgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgICAgIHZhbHVlID4+PSBwdXQ7CisgICAgICAgIGJpdHMgLT0gcHV0OworICAgIH0gd2hpbGUgKGJpdHMpOwogICAgIHJldHVybiBaX09LOwogfQogCkBAIC00MzUsNiArNTEzLDggQEAKICAgICAgICAgc3RybS0+dG90YWxfaW4gIT0gMCkgewogICAgICAgICAvKiBGbHVzaCB0aGUgbGFzdCBidWZmZXI6ICovCiAgICAgICAgIGVyciA9IGRlZmxhdGUoc3RybSwgWl9CTE9DSyk7CisgICAgICAgIGlmIChlcnIgPT0gWl9CVUZfRVJST1IgJiYgcy0+cGVuZGluZyA9PSAwKQorICAgICAgICAgICAgZXJyID0gWl9PSzsKICAgICB9CiAgICAgaWYgKHMtPmxldmVsICE9IGxldmVsKSB7CiAgICAgICAgIHMtPmxldmVsID0gbGV2ZWw7CkBAIC01NjIsMTkgKzY0MiwyMiBAQAogbG9jYWwgdm9pZCBmbHVzaF9wZW5kaW5nKHN0cm0pCiAgICAgel9zdHJlYW1wIHN0cm07CiB7Ci0gICAgdW5zaWduZWQgbGVuID0gc3RybS0+c3RhdGUtPnBlbmRpbmc7CisgICAgdW5zaWduZWQgbGVuOworICAgIGRlZmxhdGVfc3RhdGUgKnMgPSBzdHJtLT5zdGF0ZTsKIAorICAgIF90cl9mbHVzaF9iaXRzKHMpOworICAgIGxlbiA9IHMtPnBlbmRpbmc7CiAgICAgaWYgKGxlbiA+IHN0cm0tPmF2YWlsX291dCkgbGVuID0gc3RybS0+YXZhaWxfb3V0OwogICAgIGlmIChsZW4gPT0gMCkgcmV0dXJuOwogCi0gICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0LCBsZW4pOworICAgIHptZW1jcHkoc3RybS0+bmV4dF9vdXQsIHMtPnBlbmRpbmdfb3V0LCBsZW4pOwogICAgIHN0cm0tPm5leHRfb3V0ICArPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmdfb3V0ICArPSBsZW47CisgICAgcy0+cGVuZGluZ19vdXQgICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9vdXQgKz0gbGVuOwogICAgIHN0cm0tPmF2YWlsX291dCAgLT0gbGVuOwotICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nIC09IGxlbjsKLSAgICBpZiAoc3RybS0+c3RhdGUtPnBlbmRpbmcgPT0gMCkgewotICAgICAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZ19idWY7CisgICAgcy0+cGVuZGluZyAtPSBsZW47CisgICAgaWYgKHMtPnBlbmRpbmcgPT0gMCkgeworICAgICAgICBzLT5wZW5kaW5nX291dCA9IHMtPnBlbmRpbmdfYnVmOwogICAgIH0KIH0KIApAQCAtODAxLDcgKzg4NCw3IEBACiAgICAgICogZmx1c2hlcy4gRm9yIHJlcGVhdGVkIGFuZCB1c2VsZXNzIGNhbGxzIHdpdGggWl9GSU5JU0gsIHdlIGtlZXAKICAgICAgKiByZXR1cm5pbmcgWl9TVFJFQU1fRU5EIGluc3RlYWQgb2YgWl9CVUZfRVJST1IuCiAgICAgICovCi0gICAgfSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGZsdXNoIDw9IG9sZF9mbHVzaCAmJgorICAgIH0gZWxzZSBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBSQU5LKGZsdXNoKSA8PSBSQU5LKG9sZF9mbHVzaCkgJiYKICAgICAgICAgICAgICAgIGZsdXNoICE9IFpfRklOSVNIKSB7CiAgICAgICAgIEVSUl9SRVRVUk4oc3RybSwgWl9CVUZfRVJST1IpOwogICAgIH0KQEAgLTg1MCw2ICs5MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICAgICAgICAgICAgICBzLT5pbnNlcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtOTQ1LDEyICsxMDI5LDEyIEBACiAKICAgICBzcyA9IHNvdXJjZS0+c3RhdGU7CiAKLSAgICB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRlc3QsICh2b2lkcGYpc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKIAogICAgIGRzID0gKGRlZmxhdGVfc3RhdGUgKikgWkFMTE9DKGRlc3QsIDEsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKGRzID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgIGRlc3QtPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKikgZHM7Ci0gICAgem1lbWNweShkcywgc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLCAodm9pZHBmKXNzLCBzaXplb2YoZGVmbGF0ZV9zdGF0ZSkpOwogICAgIGRzLT5zdHJtID0gZGVzdDsKIAogICAgIGRzLT53aW5kb3cgPSAoQnl0ZWYgKikgWkFMTE9DKGRlc3QsIGRzLT53X3NpemUsIDIqc2l6ZW9mKEJ5dGUpKTsKQEAgLTk2Niw4ICsxMDUwLDggQEAKICAgICB9CiAgICAgLyogZm9sbG93aW5nIHptZW1jcHkgZG8gbm90IHdvcmsgZm9yIDE2LWJpdCBNU0RPUyAqLwogICAgIHptZW1jcHkoZHMtPndpbmRvdywgc3MtPndpbmRvdywgZHMtPndfc2l6ZSAqIDIgKiBzaXplb2YoQnl0ZSkpOwotICAgIHptZW1jcHkoZHMtPnByZXYsIHNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOwotICAgIHptZW1jcHkoZHMtPmhlYWQsIHNzLT5oZWFkLCBkcy0+aGFzaF9zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+cHJldiwgKHZvaWRwZilzcy0+cHJldiwgZHMtPndfc2l6ZSAqIHNpemVvZihQb3MpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMtPmhlYWQsICh2b2lkcGYpc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CiAgICAgem1lbWNweShkcy0+cGVuZGluZ19idWYsIHNzLT5wZW5kaW5nX2J1ZiwgKHVJbnQpZHMtPnBlbmRpbmdfYnVmX3NpemUpOwogCiAgICAgZHMtPnBlbmRpbmdfb3V0ID0gZHMtPnBlbmRpbmdfYnVmICsgKHNzLT5wZW5kaW5nX291dCAtIHNzLT5wZW5kaW5nX2J1Zik7CkBAIC0xMDAxLDE1ICsxMDg1LDE1IEBACiAKICAgICBzdHJtLT5hdmFpbF9pbiAgLT0gbGVuOwogCisgICAgem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgaWYgKHN0cm0tPnN0YXRlLT53cmFwID09IDEpIHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIGJ1ZiwgbGVuKTsKICAgICB9CiAjaWZkZWYgR1pJUAogICAgIGVsc2UgaWYgKHN0cm0tPnN0YXRlLT53cmFwID09IDIpIHsKLSAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgc3RybS0+bmV4dF9pbiwgbGVuKTsKKyAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOwogICAgIH0KICNlbmRpZgotICAgIHptZW1jcHkoYnVmLCBzdHJtLT5uZXh0X2luLCBsZW4pOwogICAgIHN0cm0tPm5leHRfaW4gICs9IGxlbjsKICAgICBzdHJtLT50b3RhbF9pbiArPSBsZW47CiAKQEAgLTEwMzYsNiArMTEyMCw3IEBACiAgICAgcy0+c3Ryc3RhcnQgPSAwOwogICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CiAgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5pbnNlcnQgPSAwOwogICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPnByZXZfbGVuZ3RoID0gTUlOX01BVENILTE7CiAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICBzLT5pbnNfaCA9IDA7CkBAIC0xMzEwLDYgKzEzOTUsOCBAQAogICAgIHVuc2lnbmVkIG1vcmU7ICAgIC8qIEFtb3VudCBvZiBmcmVlIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHdpbmRvdy4gKi8KICAgICB1SW50IHdzaXplID0gcy0+d19zaXplOwogCisgICAgQXNzZXJ0KHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQsICJhbHJlYWR5IGVub3VnaCBsb29rYWhlYWQiKTsKKwogICAgIGRvIHsKICAgICAgICAgbW9yZSA9ICh1bnNpZ25lZCkocy0+d2luZG93X3NpemUgLSh1bGcpcy0+bG9va2FoZWFkIC0odWxnKXMtPnN0cnN0YXJ0KTsKIApAQCAtMTM2Miw3ICsxNDQ5LDcgQEAKICNlbmRpZgogICAgICAgICAgICAgbW9yZSArPSB3c2l6ZTsKICAgICAgICAgfQotICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPT0gMCkgcmV0dXJuOworICAgICAgICBpZiAocy0+c3RybS0+YXZhaWxfaW4gPT0gMCkgYnJlYWs7CiAKICAgICAgICAgLyogSWYgdGhlcmUgd2FzIG5vIHNsaWRpbmc6CiAgICAgICAgICAqICAgIHN0cnN0YXJ0IDw9IFdTSVpFK01BWF9ESVNULTEgJiYgbG9va2FoZWFkIDw9IE1JTl9MT09LQUhFQUQgLSAxICYmCkBAIC0xMzgxLDEyICsxNDY4LDI0IEBACiAgICAgICAgIHMtPmxvb2thaGVhZCArPSBuOwogCiAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGhhc2ggdmFsdWUgbm93IHRoYXQgd2UgaGF2ZSBzb21lIGlucHV0OiAqLwotICAgICAgICBpZiAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgewotICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdOwotICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzLT5zdHJzdGFydCsxXSk7CisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgKyBzLT5pbnNlcnQgPj0gTUlOX01BVENIKSB7CisgICAgICAgICAgICB1SW50IHN0ciA9IHMtPnN0cnN0YXJ0IC0gcy0+aW5zZXJ0OworICAgICAgICAgICAgcy0+aW5zX2ggPSBzLT53aW5kb3dbc3RyXTsKKyAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgMV0pOwogI2lmIE1JTl9NQVRDSCAhPSAzCiAgICAgICAgICAgICBDYWxsIFVQREFURV9IQVNIKCkgTUlOX01BVENILTMgbW9yZSB0aW1lcwogI2VuZGlmCisgICAgICAgICAgICB3aGlsZSAocy0+aW5zZXJ0KSB7CisgICAgICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyBNSU5fTUFUQ0gtMV0pOworI2lmbmRlZiBGQVNURVNUCisgICAgICAgICAgICAgICAgcy0+cHJldltzdHIgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzLT5oZWFkW3MtPmluc19oXSA9IChQb3Mpc3RyOworICAgICAgICAgICAgICAgIHN0cisrOworICAgICAgICAgICAgICAgIHMtPmluc2VydC0tOworICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgKyBzLT5pbnNlcnQgPCBNSU5fTUFUQ0gpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qIElmIHRoZSB3aG9sZSBpbnB1dCBoYXMgbGVzcyB0aGFuIE1JTl9NQVRDSCBieXRlcywgaW5zX2ggaXMgZ2FyYmFnZSwKICAgICAgICAgICogYnV0IHRoaXMgaXMgbm90IGltcG9ydGFudCBzaW5jZSBvbmx5IGxpdGVyYWwgYnl0ZXMgd2lsbCBiZSBlbWl0dGVkLgpAQCAtMTQyNyw2ICsxNTI2LDkgQEAKICAgICAgICAgICAgIHMtPmhpZ2hfd2F0ZXIgKz0gaW5pdDsKICAgICAgICAgfQogICAgIH0KKworICAgIEFzc2VydCgodWxnKXMtPnN0cnN0YXJ0IDw9IHMtPndpbmRvd19zaXplIC0gTUlOX0xPT0tBSEVBRCwKKyAgICAgICAgICAgIm5vdCBlbm91Z2ggcm9vbSBmb3Igc2VhcmNoIik7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTUwNiw4ICsxNjA4LDE0IEBACiAgICAgICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmICgobG9uZylzLT5zdHJzdGFydCA+IHMtPmJsb2NrX3N0YXJ0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNjAzLDggKzE3MTEsMTQgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogI2lmbmRlZiBGQVNURVNUCkBAIC0xNzI4LDggKzE4NDIsMTQgQEAKICAgICAgICAgX3RyX3RhbGx5X2xpdChzLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnQtMV0sIGJmbHVzaCk7CiAgICAgICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gcy0+c3Ryc3RhcnQgPCBNSU5fTUFUQ0gtMSA/IHMtPnN0cnN0YXJ0IDogTUlOX01BVENILTE7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAjZW5kaWYgLyogRkFTVEVTVCAqLwogCkBAIC0xNzQ5LDExICsxODY5LDExIEBACiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBlbm91Z2ggbG9va2FoZWFkLCBleGNlcHQKICAgICAgICAgICogYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4gV2UgbmVlZCBNQVhfTUFUQ0ggYnl0ZXMKLSAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IGVuY29kYWJsZSBydW4uCisgICAgICAgICAqIGZvciB0aGUgbG9uZ2VzdCBydW4sIHBsdXMgb25lIGZvciB0aGUgdW5yb2xsZWQgbG9vcC4KICAgICAgICAgICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPCBNQVhfTUFUQ0gpIHsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8PSBNQVhfTUFUQ0gpIHsKICAgICAgICAgICAgIGZpbGxfd2luZG93KHMpOwotICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCAmJiBmbHVzaCA9PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgYnJlYWs7IC8qIGZsdXNoIHRoZSBjdXJyZW50IGJsb2NrICovCkBAIC0xNzc2LDYgKzE4OTYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPiBzLT5sb29rYWhlYWQpCiAgICAgICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IHMtPmxvb2thaGVhZDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFzc2VydChzY2FuIDw9IHMtPndpbmRvdysodUludCkocy0+d2luZG93X3NpemUtMSksICJ3aWxkIHNjYW4iKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIEVtaXQgbWF0Y2ggaWYgaGF2ZSBydW4gb2YgTUlOX01BVENIIG9yIGxvbmdlciwgZWxzZSBlbWl0IGxpdGVyYWwgKi8KQEAgLTE3OTYsOCArMTkxNywxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTgyOSw2ICsxOTU2LDEyIEBACiAgICAgICAgIHMtPnN0cnN0YXJ0Kys7CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IDA7CisgICAgaWYgKGZsdXNoID09IFpfRklOSVNIKSB7CisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDEpOworICAgICAgICByZXR1cm4gZmluaXNoX2RvbmU7CisgICAgfQorICAgIGlmIChzLT5sYXN0X2xpdCkKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMCk7CisgICAgcmV0dXJuIGJsb2NrX2RvbmU7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaAppbmRleCBjYmYwZDFlLi5jZTAyOTllIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCisrKyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmggLS0gaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIEplYW4tbG91cCBHYWlsbHkKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC00OCw2ICs0OCw5IEBACiAjZGVmaW5lIE1BWF9CSVRTIDE1CiAvKiBBbGwgY29kZXMgbXVzdCBub3QgZXhjZWVkIE1BWF9CSVRTIGJpdHMgKi8KIAorI2RlZmluZSBCdWZfc2l6ZSAxNgorLyogc2l6ZSBvZiBiaXQgYnVmZmVyIGluIGJpX2J1ZiAqLworCiAjZGVmaW5lIElOSVRfU1RBVEUgICAgNDIKICNkZWZpbmUgRVhUUkFfU1RBVEUgICA2OQogI2RlZmluZSBOQU1FX1NUQVRFICAgIDczCkBAIC0xMDEsNyArMTA0LDcgQEAKICAgICBpbnQgICB3cmFwOyAgICAgICAgICAvKiBiaXQgMCB0cnVlIGZvciB6bGliLCBiaXQgMSB0cnVlIGZvciBnemlwICovCiAgICAgZ3pfaGVhZGVycCAgZ3poZWFkOyAgLyogZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gdG8gd3JpdGUgKi8KICAgICB1SW50ICAgZ3ppbmRleDsgICAgICAvKiB3aGVyZSBpbiBleHRyYSwgbmFtZSwgb3IgY29tbWVudCAqLwotICAgIEJ5dGUgIG1ldGhvZDsgICAgICAgIC8qIFNUT1JFRCAoZm9yIHppcCBvbmx5KSBvciBERUZMQVRFRCAqLworICAgIEJ5dGUgIG1ldGhvZDsgICAgICAgIC8qIGNhbiBvbmx5IGJlIERFRkxBVEVEICovCiAgICAgaW50ICAgbGFzdF9mbHVzaDsgICAgLyogdmFsdWUgb2YgZmx1c2ggcGFyYW0gZm9yIHByZXZpb3VzIGRlZmxhdGUgY2FsbCAqLwogCiAgICAgICAgICAgICAgICAgLyogdXNlZCBieSBkZWZsYXRlLmM6ICovCkBAIC0xODgsNyArMTkxLDcgQEAKICAgICBpbnQgbmljZV9tYXRjaDsgLyogU3RvcCBzZWFyY2hpbmcgd2hlbiBjdXJyZW50IG1hdGNoIGV4Y2VlZHMgdGhpcyAqLwogCiAgICAgICAgICAgICAgICAgLyogdXNlZCBieSB0cmVlcy5jOiAqLwotICAgIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHJlc3MgY29tcGlsZXIgd2FybmluZyAqLworICAgIC8qIERpZG4ndCB1c2UgY3RfZGF0YSB0eXBlZGVmIGJlbG93IHRvIHN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmcgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9sdHJlZVtIRUFQX1NJWkVdOyAgIC8qIGxpdGVyYWwgYW5kIGxlbmd0aCB0cmVlICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBkeW5fZHRyZWVbMipEX0NPREVTKzFdOyAvKiBkaXN0YW5jZSB0cmVlICovCiAgICAgc3RydWN0IGN0X2RhdGFfcyBibF90cmVlWzIqQkxfQ09ERVMrMV07ICAvKiBIdWZmbWFuIHRyZWUgZm9yIGJpdCBsZW5ndGhzICovCkBAIC0yNDQsNyArMjQ3LDcgQEAKICAgICB1bGcgb3B0X2xlbjsgICAgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIG9wdGltYWwgdHJlZXMgKi8KICAgICB1bGcgc3RhdGljX2xlbjsgICAgIC8qIGJpdCBsZW5ndGggb2YgY3VycmVudCBibG9jayB3aXRoIHN0YXRpYyB0cmVlcyAqLwogICAgIHVJbnQgbWF0Y2hlczsgICAgICAgLyogbnVtYmVyIG9mIHN0cmluZyBtYXRjaGVzIGluIGN1cnJlbnQgYmxvY2sgKi8KLSAgICBpbnQgbGFzdF9lb2JfbGVuOyAgIC8qIGJpdCBsZW5ndGggb2YgRU9CIGNvZGUgZm9yIGxhc3QgYmxvY2sgKi8KKyAgICB1SW50IGluc2VydDsgICAgICAgIC8qIGJ5dGVzIGF0IGVuZCBvZiB3aW5kb3cgbGVmdCB0byBpbnNlcnQgKi8KIAogI2lmZGVmIERFQlVHCiAgICAgdWxnIGNvbXByZXNzZWRfbGVuOyAvKiB0b3RhbCBiaXQgbGVuZ3RoIG9mIGNvbXByZXNzZWQgZmlsZSBtb2QgMl4zMiAqLwpAQCAtMjk0LDYgKzI5Nyw3IEBACiBpbnQgWkxJQl9JTlRFUk5BTCBfdHJfdGFsbHkgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHVuc2lnbmVkIGRpc3QsIHVuc2lnbmVkIGxjKSk7CiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHN0b3JlZF9sZW4sIGludCBsYXN0KSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2JpdHMgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24gT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfc3RvcmVkX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHN0b3JlZF9sZW4sIGludCBsYXN0KSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwppbmRleCA2MDQ3MzZmLi4xMzhhNjk5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCisrKyBiL01vZHVsZXMvemxpYi9leGFtcGxlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBleGFtcGxlLmMgLS0gdXNhZ2UgZXhhbXBsZSBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTEgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0yNiw3ICsyNiw3IEBACiAgICAgfSBcCiB9CiAKLWNvbnN0IGNoYXIgaGVsbG9bXSA9ICJoZWxsbywgaGVsbG8hIjsKK3pfY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOwogLyogImhlbGxvIHdvcmxkIiB3b3VsZCBiZSBtb3JlIHN0YW5kYXJkLCBidXQgdGhlIHJlcGVhdGVkICJoZWxsbyIKICAqIHN0cmVzc2VzIHRoZSBjb21wcmVzc2lvbiBjb2RlIGJldHRlciwgc29ycnkuLi4KICAqLwpAQCAtMzQsMTAgKzM0LDYgQEAKIGNvbnN0IGNoYXIgZGljdGlvbmFyeVtdID0gImhlbGxvIjsKIHVMb25nIGRpY3RJZDsgLyogQWRsZXIzMiB2YWx1ZSBvZiB0aGUgZGljdGlvbmFyeSAqLwogCi12b2lkIHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKLXZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CiB2b2lkIHRlc3RfZGVmbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuKSk7CiB2b2lkIHRlc3RfaW5mbGF0ZSAgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKQEAgLTUzLDYgKzQ5LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwogaW50ICBtYWluICAgICAgICAgICAgICAgT0YoKGludCBhcmdjLCBjaGFyICphcmd2W10pKTsKIAorCisjaWZkZWYgWl9TT0xPCisKK3ZvaWQgKm15YWxsb2MgT0YoKHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBPRigodm9pZCAqLCB2b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQgKnE7CisgICAgdW5zaWduZWQgbiwgbTsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIHJldHVybiBjYWxsb2MobiwgbSk7Cit9CisKK3ZvaWQgbXlmcmVlKHZvaWQgKnEsIHZvaWQgKnApCit7CisgICAgcSA9IFpfTlVMTDsKKyAgICBmcmVlKHApOworfQorCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSBteWFsbG9jOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IG15ZnJlZTsKKworI2Vsc2UgLyogIVpfU09MTyAqLworCitzdGF0aWMgYWxsb2NfZnVuYyB6YWxsb2MgPSAoYWxsb2NfZnVuYykwOworc3RhdGljIGZyZWVfZnVuYyB6ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKwordm9pZCB0ZXN0X2NvbXByZXNzICAgICAgT0YoKEJ5dGUgKmNvbXByLCB1TG9uZyBjb21wckxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7Cit2b2lkIHRlc3RfZ3ppbyAgICAgICAgICBPRigoY29uc3QgY2hhciAqZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRlc3QgY29tcHJlc3MoKSBhbmQgdW5jb21wcmVzcygpCiAgKi8KQEAgLTE2Myw2ICsxOTIsOCBAQAogI2VuZGlmCiB9CiAKKyNlbmRpZiAvKiBaX1NPTE8gKi8KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBUZXN0IGRlZmxhdGUoKSB3aXRoIHNtYWxsIGJ1ZmZlcnMKICAqLwpAQCAtMTc0LDE0ICsyMDUsMTQgQEAKICAgICBpbnQgZXJyOwogICAgIHVMb25nIGxlbiA9ICh1TG9uZylzdHJsZW4oaGVsbG8pKzE7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKIAotICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luICA9ICh6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWxsbzsKICAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwogCiAgICAgd2hpbGUgKGNfc3RyZWFtLnRvdGFsX2luICE9IGxlbiAmJiBjX3N0cmVhbS50b3RhbF9vdXQgPCBjb21wckxlbikgewpAQCAtMjEzLDggKzI0NCw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC0yNTIsOCArMjgzLDggQEAKICAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCiAgICAgaW50IGVycjsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfU1BFRUQpOwpAQCAtMzA5LDggKzM0MCw4IEBACiAKICAgICBzdHJjcHkoKGNoYXIqKXVuY29tcHIsICJnYXJiYWdlIik7CiAKLSAgICBkX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGRfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGRfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBkX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGRfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGRfc3RyZWFtLm5leHRfaW4gID0gY29tcHI7CkBAIC0zNDksMTQgKzM4MCwxNCBAQAogICAgIGludCBlcnI7CiAgICAgdUludCBsZW4gPSAodUludClzdHJsZW4oaGVsbG8pKzE7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKIAotICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luICA9ICh6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWxsbzsKICAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwogICAgIGNfc3RyZWFtLmF2YWlsX2luID0gMzsKICAgICBjX3N0cmVhbS5hdmFpbF9vdXQgPSAodUludCkqY29tcHJMZW47CkBAIC0zODgsOCArNDE5LDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTQzMCwyMiArNDYxLDIyIEBACiAgICAgel9zdHJlYW0gY19zdHJlYW07IC8qIGNvbXByZXNzaW9uIHN0cmVhbSAqLwogICAgIGludCBlcnI7CiAKLSAgICBjX3N0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIGNfc3RyZWFtLnpmcmVlID0gKGZyZWVfZnVuYykwOworICAgIGNfc3RyZWFtLnphbGxvYyA9IHphbGxvYzsKKyAgICBjX3N0cmVhbS56ZnJlZSA9IHpmcmVlOwogICAgIGNfc3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKIAogICAgIGVyciA9IGRlZmxhdGVJbml0KCZjX3N0cmVhbSwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZUluaXQiKTsKIAogICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZjX3N0cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIHNpemVvZihkaWN0aW9uYXJ5KSk7CisgICAgICAgICAgICAgICAgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LCAoaW50KXNpemVvZihkaWN0aW9uYXJ5KSk7CiAgICAgQ0hFQ0tfRVJSKGVyciwgImRlZmxhdGVTZXREaWN0aW9uYXJ5Iik7CiAKICAgICBkaWN0SWQgPSBjX3N0cmVhbS5hZGxlcjsKICAgICBjX3N0cmVhbS5uZXh0X291dCA9IGNvbXByOwogICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KWNvbXByTGVuOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopaGVsbG87CisgICAgY19zdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiloZWxsbzsKICAgICBjX3N0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKIAogICAgIGVyciA9IGRlZmxhdGUoJmNfc3RyZWFtLCBaX0ZJTklTSCk7CkBAIC00NjksOCArNTAwLDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTQ5MSw3ICs1MjIsNyBAQAogICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmZF9zdHJlYW0sIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkaWN0aW9uYXJ5KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihkaWN0aW9uYXJ5KSk7CiAgICAgICAgIH0KICAgICAgICAgQ0hFQ0tfRVJSKGVyciwgImluZmxhdGUgd2l0aCBkaWN0Iik7CiAgICAgfQpAQCAtNTQwLDEwICs1NzEsMTUgQEAKICAgICAgICAgcHJpbnRmKCJvdXQgb2YgbWVtb3J5XG4iKTsKICAgICAgICAgZXhpdCgxKTsKICAgICB9CisKKyNpZmRlZiBaX1NPTE8KKyAgICBhcmdjID0gc3RybGVuKGFyZ3ZbMF0pOworI2Vsc2UKICAgICB0ZXN0X2NvbXByZXNzKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CiAKICAgICB0ZXN0X2d6aW8oKGFyZ2MgPiAxID8gYXJndlsxXSA6IFRFU1RGSUxFKSwKICAgICAgICAgICAgICAgdW5jb21wciwgdW5jb21wckxlbik7CisjZW5kaWYKIAogICAgIHRlc3RfZGVmbGF0ZShjb21wciwgY29tcHJMZW4pOwogICAgIHRlc3RfaW5mbGF0ZShjb21wciwgY29tcHJMZW4sIHVuY29tcHIsIHVuY29tcHJMZW4pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oIGIvTW9kdWxlcy96bGliL2d6Z3V0cy5oCmluZGV4IDBmOGZiNzkuLmQ4NzY1OWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nemd1dHMuaAorKysgYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKQEAgLTEsNSArMSw1IEBACiAvKiBnemd1dHMuaCAtLSB6bGliIGludGVybmFsIGhlYWRlciBkZWZpbml0aW9ucyBmb3IgZ3oqIG9wZXJhdGlvbnMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTEyLDcgKzEyLDcgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpICYmICFkZWZpbmVkKE5PX1ZJWikKKyNpZmRlZiBIQVZFX0hJRERFTgogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKICNlbHNlCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTApAQCAtMjcsMTMgKzI3LDgwIEBACiAjZW5kaWYKICNpbmNsdWRlIDxmY250bC5oPgogCisjaWZkZWYgX1dJTjMyCisjICBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9XSU4zMikKKyMgIGluY2x1ZGUgPGlvLmg+CisjZW5kaWYKKworI2lmZGVmIFdJTkFQSV9GQU1JTFkKKyMgIGRlZmluZSBvcGVuIF9vcGVuCisjICBkZWZpbmUgcmVhZCBfcmVhZAorIyAgZGVmaW5lIHdyaXRlIF93cml0ZQorIyAgZGVmaW5lIGNsb3NlIF9jbG9zZQorI2VuZGlmCisKICNpZmRlZiBOT19ERUZMQVRFICAgICAgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGRlZmluaXRpb24gKi8KICMgIGRlZmluZSBOT19HWkNPTVBSRVNTCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19fID49IDB4NTUwKQorIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChNU0RPUykgJiYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIChCT1JMQU5EQyA+IDB4NDEwKQorIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBpZmRlZiBNU0RPUworLyogdnNucHJpbnRmIG1heSBleGlzdCBvbiBzb21lIE1TLURPUyBjb21waWxlcnMgKERKR1BQPyksCisgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19UVVJCT0NfXworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgV0lOMzIKKy8qIEluIFdpbjMyLCB2c25wcmludGYgaXMgYXZhaWxhYmxlIGFzIHRoZSAibm9uLUFOU0kiIF92c25wcmludGYuICovCisjICAgIGlmICFkZWZpbmVkKHZzbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorIyAgICAgIGlmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCAoIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTUwMCApCisjICAgICAgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1NBU0MKKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIFZNUworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgX19PUzQwMF9fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX01WU19fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogdW5saWtlIHNucHJpbnRmICh3aGljaCBpcyByZXF1aXJlZCBpbiBDOTksIHlldCBzdGlsbCBub3Qgc3VwcG9ydGVkIGJ5CisgICBNaWNyb3NvZnQgbW9yZSB0aGFuIGEgZGVjYWRlIGxhdGVyISksIF9zbnByaW50ZiBkb2VzIG5vdCBndWFyYW50ZWUgbnVsbAorICAgdGVybWluYXRpb24gb2YgdGhlIHJlc3VsdCAtLSBob3dldmVyIHRoaXMgaXMgb25seSB1c2VkIGluIGd6bGliLmMgd2hlcmUKKyAgIHRoZSByZXN1bHQgaXMgYXNzdXJlZCB0byBmaXQgaW4gdGhlIHNwYWNlIHByb3ZpZGVkICovCiAjaWZkZWYgX01TQ19WRVIKLSMgIGluY2x1ZGUgPGlvLmg+Ci0jICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgogCiAjaWZuZGVmIGxvY2FsCkBAIC01Miw3ICsxMTksNyBAQAogIyAgaW5jbHVkZSA8d2luZG93cy5oPgogIyAgZGVmaW5lIHpzdHJlcnJvcigpIGd6X3N0cndpbmVycm9yKChEV09SRClHZXRMYXN0RXJyb3IoKSkKICNlbHNlCi0jICBpZmRlZiBTVERDCisjICBpZm5kZWYgTk9fU1RSRVJST1IKICMgICAgaW5jbHVkZSA8ZXJybm8uaD4KICMgICAgZGVmaW5lIHpzdHJlcnJvcigpIHN0cmVycm9yKGVycm5vKQogIyAgZWxzZQpAQCAtNjgsNyArMTM1LDE1IEBACiAgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0IE9GKChnekZpbGUpKTsKICNlbmRpZgogCi0vKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAqLworLyogZGVmYXVsdCBtZW1MZXZlbCAqLworI2lmIE1BWF9NRU1fTEVWRUwgPj0gOAorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgOAorI2Vsc2UKKyMgIGRlZmluZSBERUZfTUVNX0xFVkVMICBNQVhfTUVNX0xFVkVMCisjZW5kaWYKKworLyogZGVmYXVsdCBpL28gYnVmZmVyIHNpemUgLS0gZG91YmxlIHRoaXMgZm9yIG91dHB1dCB3aGVuIHJlYWRpbmcgKHRoaXMgYW5kCisgICB0d2ljZSB0aGlzIG11c3QgYmUgYWJsZSB0byBmaXQgaW4gYW4gdW5zaWduZWQgdHlwZSkgKi8KICNkZWZpbmUgR1pCVUZTSVpFIDgxOTIKIAogLyogZ3ppcCBtb2RlcywgYWxzbyBwcm92aWRlIGEgbGl0dGxlIGludGVncml0eSBjaGVjayBvbiB0aGUgcGFzc2VkIHN0cnVjdHVyZSAqLwpAQCAtODQsMjMgKzE1OSwyNSBAQAogCiAvKiBpbnRlcm5hbCBnemlwIGZpbGUgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHR5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgLyogZXhwb3NlZCBjb250ZW50cyBmb3IgZ3pnZXRjKCkgbWFjcm8gKi8KKyAgICBzdHJ1Y3QgZ3pGaWxlX3MgeDsgICAgICAvKiAieCIgZm9yIGV4cG9zZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4LmhhdmU6IG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgYXQgeC5uZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeC5uZXh0OiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4LnBvczogY3VycmVudCBwb3NpdGlvbiBpbiB1bmNvbXByZXNzZWQgZGF0YSAqLwogICAgICAgICAvKiB1c2VkIGZvciBib3RoIHJlYWRpbmcgYW5kIHdyaXRpbmcgKi8KICAgICBpbnQgbW9kZTsgICAgICAgICAgICAgICAvKiBzZWUgZ3ppcCBtb2RlcyBhYm92ZSAqLwogICAgIGludCBmZDsgICAgICAgICAgICAgICAgIC8qIGZpbGUgZGVzY3JpcHRvciAqLwogICAgIGNoYXIgKnBhdGg7ICAgICAgICAgICAgIC8qIHBhdGggb3IgZmQgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgel9vZmY2NF90IHBvczsgICAgICAgICAgLyogY3VycmVudCBwb3NpdGlvbiBpbiB1bmNvbXByZXNzZWQgZGF0YSAqLwogICAgIHVuc2lnbmVkIHNpemU7ICAgICAgICAgIC8qIGJ1ZmZlciBzaXplLCB6ZXJvIGlmIG5vdCBhbGxvY2F0ZWQgeWV0ICovCiAgICAgdW5zaWduZWQgd2FudDsgICAgICAgICAgLyogcmVxdWVzdGVkIGJ1ZmZlciBzaXplLCBkZWZhdWx0IGlzIEdaQlVGU0laRSAqLwogICAgIHVuc2lnbmVkIGNoYXIgKmluOyAgICAgIC8qIGlucHV0IGJ1ZmZlciAqLwogICAgIHVuc2lnbmVkIGNoYXIgKm91dDsgICAgIC8qIG91dHB1dCBidWZmZXIgKGRvdWJsZS1zaXplZCB3aGVuIHJlYWRpbmcpICovCi0gICAgdW5zaWduZWQgY2hhciAqbmV4dDsgICAgLyogbmV4dCBvdXRwdXQgZGF0YSB0byBkZWxpdmVyIG9yIHdyaXRlICovCisgICAgaW50IGRpcmVjdDsgICAgICAgICAgICAgLyogMCBpZiBwcm9jZXNzaW5nIGd6aXAsIDEgaWYgdHJhbnNwYXJlbnQgKi8KICAgICAgICAgLyoganVzdCBmb3IgcmVhZGluZyAqLwotICAgIHVuc2lnbmVkIGhhdmU7ICAgICAgICAgIC8qIGFtb3VudCBvZiBvdXRwdXQgZGF0YSB1bnVzZWQgYXQgbmV4dCAqLwotICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLwotICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLwotICAgIHpfb2ZmNjRfdCByYXc7ICAgICAgICAgIC8qIHdoZXJlIHRoZSByYXcgZGF0YSBzdGFydGVkLCBmb3Igc2Vla2luZyAqLwogICAgIGludCBob3c7ICAgICAgICAgICAgICAgIC8qIDA6IGdldCBoZWFkZXIsIDE6IGNvcHksIDI6IGRlY29tcHJlc3MgKi8KLSAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiB0cnVlIGlmIGxhc3QgcmVhZCBkaXJlY3QsIGZhbHNlIGlmIGd6aXAgKi8KKyAgICB6X29mZjY0X3Qgc3RhcnQ7ICAgICAgICAvKiB3aGVyZSB0aGUgZ3ppcCBkYXRhIHN0YXJ0ZWQsIGZvciByZXdpbmRpbmcgKi8KKyAgICBpbnQgZW9mOyAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGVuZCBvZiBpbnB1dCBmaWxlIHJlYWNoZWQgKi8KKyAgICBpbnQgcGFzdDsgICAgICAgICAgICAgICAvKiB0cnVlIGlmIHJlYWQgcmVxdWVzdGVkIHBhc3QgZW5kICovCiAgICAgICAgIC8qIGp1c3QgZm9yIHdyaXRpbmcgKi8KICAgICBpbnQgbGV2ZWw7ICAgICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBsZXZlbCAqLwogICAgIGludCBzdHJhdGVneTsgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3ppby5jIGIvTW9kdWxlcy96bGliL2d6aW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U5MGY0OS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL3psaWIvZ3ppby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyNiArMCwwIEBACi0vKiBnemlvLmMgLS0gSU8gb24gLmd6IGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICoKLSAqIENvbXBpbGUgdGhpcyBmaWxlIHdpdGggLUROT19HWkNPTVBSRVNTIHRvIGF2b2lkIHRoZSBjb21wcmVzc2lvbiBjb2RlLgotICovCi0KLS8qIEAoIykgJElkJCAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2luY2x1ZGUgInp1dGlsLmgiCi0KLSNpZmRlZiBOT19ERUZMQVRFICAgICAgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIGRlZmluaXRpb24gKi8KLSMgIGRlZmluZSBOT19HWkNPTVBSRVNTCi0jZW5kaWYKLQotI2lmbmRlZiBOT19EVU1NWV9ERUNMCi1zdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCi0jZW5kaWYKLQotI2lmbmRlZiBaX0JVRlNJWkUKLSMgIGlmZGVmIE1BWFNFR182NEsKLSMgICAgZGVmaW5lIFpfQlVGU0laRSA0MDk2IC8qIG1pbmltaXplIG1lbW9yeSB1c2FnZSBmb3IgMTYtYml0IERPUyAqLwotIyAgZWxzZQotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDE2Mzg0Ci0jICBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIFpfUFJJTlRGX0JVRlNJWkUKLSMgIGRlZmluZSBaX1BSSU5URl9CVUZTSVpFIDQwOTYKLSNlbmRpZgotCi0jaWZkZWYgX19NVlNfXwotIyAgcHJhZ21hIG1hcCAoZmRvcGVuICwgIlwxNzRcMTc0RkRPUEVOIikKLSAgIEZJTEUgKmZkb3BlbihpbnQsIGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKLQotI2lmbmRlZiBTVERDCi1leHRlcm4gdm9pZHAgIG1hbGxvYyBPRigodUludCBzaXplKSk7Ci1leHRlcm4gdm9pZCAgIGZyZWUgICBPRigodm9pZHBmIHB0cikpOwotI2VuZGlmCi0KLSNkZWZpbmUgQUxMT0Moc2l6ZSkgbWFsbG9jKHNpemUpCi0jZGVmaW5lIFRSWUZSRUUocCkge2lmIChwKSBmcmVlKHApO30KLQotc3RhdGljIGludCBjb25zdCBnel9tYWdpY1syXSA9IHsweDFmLCAweDhifTsgLyogZ3ppcCBtYWdpYyBoZWFkZXIgKi8KLQotLyogZ3ppcCBmbGFnIGJ5dGUgKi8KLSNkZWZpbmUgQVNDSUlfRkxBRyAgIDB4MDEgLyogYml0IDAgc2V0OiBmaWxlIHByb2JhYmx5IGFzY2lpIHRleHQgKi8KLSNkZWZpbmUgSEVBRF9DUkMgICAgIDB4MDIgLyogYml0IDEgc2V0OiBoZWFkZXIgQ1JDIHByZXNlbnQgKi8KLSNkZWZpbmUgRVhUUkFfRklFTEQgIDB4MDQgLyogYml0IDIgc2V0OiBleHRyYSBmaWVsZCBwcmVzZW50ICovCi0jZGVmaW5lIE9SSUdfTkFNRSAgICAweDA4IC8qIGJpdCAzIHNldDogb3JpZ2luYWwgZmlsZSBuYW1lIHByZXNlbnQgKi8KLSNkZWZpbmUgQ09NTUVOVCAgICAgIDB4MTAgLyogYml0IDQgc2V0OiBmaWxlIGNvbW1lbnQgcHJlc2VudCAqLwotI2RlZmluZSBSRVNFUlZFRCAgICAgMHhFMCAvKiBiaXRzIDUuLjc6IHJlc2VydmVkICovCi0KLXR5cGVkZWYgc3RydWN0IGd6X3N0cmVhbSB7Ci0gICAgel9zdHJlYW0gc3RyZWFtOwotICAgIGludCAgICAgIHpfZXJyOyAgIC8qIGVycm9yIGNvZGUgZm9yIGxhc3Qgc3RyZWFtIG9wZXJhdGlvbiAqLwotICAgIGludCAgICAgIHpfZW9mOyAgIC8qIHNldCBpZiBlbmQgb2YgaW5wdXQgZmlsZSAqLwotICAgIEZJTEUgICAgICpmaWxlOyAgIC8qIC5neiBmaWxlICovCi0gICAgQnl0ZSAgICAgKmluYnVmOyAgLyogaW5wdXQgYnVmZmVyICovCi0gICAgQnl0ZSAgICAgKm91dGJ1ZjsgLyogb3V0cHV0IGJ1ZmZlciAqLwotICAgIHVMb25nICAgIGNyYzsgICAgIC8qIGNyYzMyIG9mIHVuY29tcHJlc3NlZCBkYXRhICovCi0gICAgY2hhciAgICAgKm1zZzsgICAgLyogZXJyb3IgbWVzc2FnZSAqLwotICAgIGNoYXIgICAgICpwYXRoOyAgIC8qIHBhdGggbmFtZSBmb3IgZGVidWdnaW5nIG9ubHkgKi8KLSAgICBpbnQgICAgICB0cmFuc3BhcmVudDsgLyogMSBpZiBpbnB1dCBmaWxlIGlzIG5vdCBhIC5neiBmaWxlICovCi0gICAgY2hhciAgICAgbW9kZTsgICAgLyogJ3cnIG9yICdyJyAqLwotICAgIHpfb2ZmX3QgIHN0YXJ0OyAgIC8qIHN0YXJ0IG9mIGNvbXByZXNzZWQgZGF0YSBpbiBmaWxlIChoZWFkZXIgc2tpcHBlZCkgKi8KLSAgICB6X29mZl90ICBpbjsgICAgICAvKiBieXRlcyBpbnRvIGRlZmxhdGUgb3IgaW5mbGF0ZSAqLwotICAgIHpfb2ZmX3QgIG91dDsgICAgIC8qIGJ5dGVzIG91dCBvZiBkZWZsYXRlIG9yIGluZmxhdGUgKi8KLSAgICBpbnQgICAgICBiYWNrOyAgICAvKiBvbmUgY2hhcmFjdGVyIHB1c2gtYmFjayAqLwotICAgIGludCAgICAgIGxhc3Q7ICAgIC8qIHRydWUgaWYgcHVzaC1iYWNrIGlzIGxhc3QgY2hhcmFjdGVyICovCi19IGd6X3N0cmVhbTsKLQotCi1sb2NhbCBnekZpbGUgZ3pfb3BlbiAgICAgIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlLCBpbnQgIGZkKSk7Ci1sb2NhbCBpbnQgZG9fZmx1c2ggICAgICAgIE9GKChnekZpbGUgZmlsZSwgaW50IGZsdXNoKSk7Ci1sb2NhbCBpbnQgICAgZ2V0X2J5dGUgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBjaGVja19oZWFkZXIgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgaW50ICAgIGRlc3Ryb3kgICAgICBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCB2b2lkICAgcHV0TG9uZyAgICAgIE9GKChGSUxFICpmaWxlLCB1TG9uZyB4KSk7Ci1sb2NhbCB1TG9uZyAgZ2V0TG9uZyAgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuIFRoZSBtb2RlIHBhcmFtZXRlcgotICAgaXMgYXMgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikuIFRoZSBmaWxlIGlzIGdpdmVuIGVpdGhlciBieSBmaWxlIGRlc2NyaXB0b3IKLSAgIG9yIHBhdGggbmFtZSAoaWYgZmQgPT0gLTEpLgotICAgICBnel9vcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkIG9yIGlmIHRoZXJlIHdhcwotICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgKGRlKWNvbXByZXNzaW9uIHN0YXRlOyBlcnJubwotICAgY2FuIGJlIGNoZWNrZWQgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3byBjYXNlcyAoaWYgZXJybm8gaXMgemVybywgdGhlCi0gICB6bGliIGVycm9yIGlzIFpfTUVNX0VSUk9SKS4KLSovCi1sb2NhbCBnekZpbGUgZ3pfb3BlbiAocGF0aCwgbW9kZSwgZmQpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotICAgIGludCAgZmQ7Ci17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047IC8qIGNvbXByZXNzaW9uIGxldmVsICovCi0gICAgaW50IHN0cmF0ZWd5ID0gWl9ERUZBVUxUX1NUUkFURUdZOyAvKiBjb21wcmVzc2lvbiBzdHJhdGVneSAqLwotICAgIGNoYXIgKnAgPSAoY2hhciopbW9kZTsKLSAgICBnel9zdHJlYW0gKnM7Ci0gICAgY2hhciBmbW9kZVs4MF07IC8qIGNvcHkgb2YgbW9kZSwgd2l0aG91dCB0aGUgY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBjaGFyICptID0gZm1vZGU7Ci0KLSAgICBpZiAoIXBhdGggfHwgIW1vZGUpIHJldHVybiBaX05VTEw7Ci0KLSAgICBzID0gKGd6X3N0cmVhbSAqKUFMTE9DKHNpemVvZihnel9zdHJlYW0pKTsKLSAgICBpZiAoIXMpIHJldHVybiBaX05VTEw7Ci0KLSAgICBzLT5zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7Ci0gICAgcy0+c3RyZWFtLm9wYXF1ZSA9ICh2b2lkcGYpMDsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZiA9IFpfTlVMTDsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gMDsKLSAgICBzLT5maWxlID0gTlVMTDsKLSAgICBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHMtPmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgcy0+bXNnID0gTlVMTDsKLSAgICBzLT50cmFuc3BhcmVudCA9IDA7Ci0KLSAgICBzLT5wYXRoID0gKGNoYXIqKUFMTE9DKHN0cmxlbihwYXRoKSsxKTsKLSAgICBpZiAocy0+cGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICB9Ci0gICAgc3RyY3B5KHMtPnBhdGgsIHBhdGgpOyAvKiBkbyB0aGlzIGVhcmx5IGZvciBkZWJ1Z2dpbmcgKi8KLQotICAgIHMtPm1vZGUgPSAnXDAnOwotICAgIGRvIHsKLSAgICAgICAgaWYgKCpwID09ICdyJykgcy0+bW9kZSA9ICdyJzsKLSAgICAgICAgaWYgKCpwID09ICd3JyB8fCAqcCA9PSAnYScpIHMtPm1vZGUgPSAndyc7Ci0gICAgICAgIGlmICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKSB7Ci0gICAgICAgICAgICBsZXZlbCA9ICpwIC0gJzAnOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdmJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9GSUxURVJFRDsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnaCcpIHsKLSAgICAgICAgICBzdHJhdGVneSA9IFpfSFVGRk1BTl9PTkxZOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdSJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9STEU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqbSsrID0gKnA7IC8qIGNvcHkgdGhlIG1vZGUgKi8KLSAgICAgICAgfQotICAgIH0gd2hpbGUgKCpwKysgJiYgbSAhPSBmbW9kZSArIHNpemVvZihmbW9kZSkpOwotICAgIGlmIChzLT5tb2RlID09ICdcMCcpIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgZXJyID0gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICBlcnIgPSBkZWZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFpfREVGTEFURUQsIC1NQVhfV0JJVFMsIERFRl9NRU1fTEVWRUwsIHN0cmF0ZWd5KTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHN1cHByZXNzIHpsaWIgaGVhZGVyICovCi0KLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKGVyciAhPSBaX09LIHx8IHMtPm91dGJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luICA9IHMtPmluYnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0KLSAgICAgICAgZXJyID0gaW5mbGF0ZUluaXQyKCYocy0+c3RyZWFtKSwgLU1BWF9XQklUUyk7Ci0gICAgICAgIC8qIHdpbmRvd0JpdHMgaXMgcGFzc2VkIDwgMCB0byB0ZWxsIHRoYXQgdGhlcmUgaXMgbm8gemxpYiBoZWFkZXIuCi0gICAgICAgICAqIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgaW5mbGF0ZSAqcmVxdWlyZXMqIGFuIGV4dHJhICJkdW1teSIgYnl0ZQotICAgICAgICAgKiBhZnRlciB0aGUgY29tcHJlc3NlZCBzdHJlYW0gaW4gb3JkZXIgdG8gY29tcGxldGUgZGVjb21wcmVzc2lvbiBhbmQKLSAgICAgICAgICogcmV0dXJuIFpfU1RSRUFNX0VORC4gSGVyZSB0aGUgZ3ppcCBDUkMzMiBlbnN1cmVzIHRoYXQgNCBieXRlcyBhcmUKLSAgICAgICAgICogcHJlc2VudCBhZnRlciB0aGUgY29tcHJlc3NlZCBzdHJlYW0uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZXJyICE9IFpfT0sgfHwgcy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLQotICAgIGVycm5vID0gMDsKLSAgICBzLT5maWxlID0gZmQgPCAwID8gRl9PUEVOKHBhdGgsIGZtb2RlKSA6IChGSUxFKilmZG9wZW4oZmQsIGZtb2RlKTsKLQotICAgIGlmIChzLT5maWxlID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSAgICAgICAgLyogV3JpdGUgYSB2ZXJ5IHNpbXBsZSAuZ3ogaGVhZGVyOgotICAgICAgICAgKi8KLSAgICAgICAgZnByaW50ZihzLT5maWxlLCAiJWMlYyVjJWMlYyVjJWMlYyVjJWMiLCBnel9tYWdpY1swXSwgZ3pfbWFnaWNbMV0sCi0gICAgICAgICAgICAgWl9ERUZMQVRFRCwgMCAvKmZsYWdzKi8sIDAsMCwwLDAgLyp0aW1lKi8sIDAgLyp4ZmxhZ3MqLywgT1NfQ09ERSk7Ci0gICAgICAgIHMtPnN0YXJ0ID0gMTBMOwotICAgICAgICAvKiBXZSB1c2UgMTBMIGluc3RlYWQgb2YgZnRlbGwocy0+ZmlsZSkgdG8gYmVjYXVzZSBmdGVsbCBjYXVzZXMgYW4KLSAgICAgICAgICogZmZsdXNoIG9uIHNvbWUgc3lzdGVtcy4gVGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IGRvZXNuJ3QgdXNlCi0gICAgICAgICAqIHN0YXJ0IGFueXdheSBpbiB3cml0ZSBtb2RlLCBzbyB0aGlzIGluaXRpYWxpemF0aW9uIGlzIG5vdAotICAgICAgICAgKiBuZWNlc3NhcnkuCi0gICAgICAgICAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoZWNrX2hlYWRlcihzKTsgLyogc2tpcCB0aGUgLmd6IGhlYWRlciAqLwotICAgICAgICBzLT5zdGFydCA9IGZ0ZWxsKHMtPmZpbGUpIC0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgIH0KLQotICAgIHJldHVybiAoZ3pGaWxlKXM7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBPcGVucyBhIGd6aXAgKC5neikgZmlsZSBmb3IgcmVhZGluZyBvciB3cml0aW5nLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6b3BlbiAocGF0aCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci17Ci0gICAgcmV0dXJuIGd6X29wZW4gKHBhdGgsIG1vZGUsIC0xKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEFzc29jaWF0ZSBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuIGZkIGlzIG5vdCBkdXAnZWQgaGVyZQotICAgdG8gbWltaWMgdGhlIGJlaGF2aW8odSlyIG9mIGZkb3Blbi4KLSovCi1nekZpbGUgWkVYUE9SVCBnemRvcGVuIChmZCwgbW9kZSkKLSAgICBpbnQgZmQ7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICBjaGFyIG5hbWVbNDZdOyAgICAgIC8qIGFsbG93IGZvciB1cCB0byAxMjgtYml0IGludGVnZXJzICovCi0KLSAgICBpZiAoZmQgPCAwKSByZXR1cm4gKGd6RmlsZSlaX05VTEw7Ci0gICAgc3ByaW50ZihuYW1lLCAiPGZkOiVkPiIsIGZkKTsgLyogZm9yIGRlYnVnZ2luZyAqLwotCi0gICAgcmV0dXJuIGd6X29wZW4gKG5hbWUsIG1vZGUsIGZkKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBVcGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIGFuZCBzdHJhdGVneQotICovCi1pbnQgWkVYUE9SVCBnenNldHBhcmFtcyAoZmlsZSwgbGV2ZWwsIHN0cmF0ZWd5KQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCBsZXZlbDsKLSAgICBpbnQgc3RyYXRlZ3k7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIC8qIE1ha2Ugcm9vbSB0byBhbGxvdyBmbHVzaGluZyAqLwotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgIGlmIChmd3JpdGUocy0+b3V0YnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpICE9IFpfQlVGU0laRSkgewotICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRlZmxhdGVQYXJhbXMgKCYocy0+c3RyZWFtKSwgbGV2ZWwsIHN0cmF0ZWd5KTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJlYWQgYSBieXRlIGZyb20gYSBnel9zdHJlYW07IHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbi4gUmV0dXJuIEVPRgotICAgZm9yIGVuZCBvZiBmaWxlLgotICAgSU4gYXNzZXJ0aW9uOiB0aGUgc3RyZWFtIHMgaGFzIGJlZW4gc3VjZXNzZnVsbHkgb3BlbmVkIGZvciByZWFkaW5nLgotKi8KLWxvY2FsIGludCBnZXRfYnl0ZShzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiBFT0Y7Ci0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgcmV0dXJuIEVPRjsKLSAgICAgICAgfQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4tLTsKLSAgICByZXR1cm4gKihzLT5zdHJlYW0ubmV4dF9pbikrKzsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBDaGVjayB0aGUgZ3ppcCBoZWFkZXIgb2YgYSBnel9zdHJlYW0gb3BlbmVkIGZvciByZWFkaW5nLiBTZXQgdGhlIHN0cmVhbQotICAgIG1vZGUgdG8gdHJhbnNwYXJlbnQgaWYgdGhlIGd6aXAgbWFnaWMgaGVhZGVyIGlzIG5vdCBwcmVzZW50OyBzZXQgcy0+ZXJyCi0gICAgdG8gWl9EQVRBX0VSUk9SIGlmIHRoZSBtYWdpYyBoZWFkZXIgaXMgcHJlc2VudCBidXQgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlcgotICAgIGlzIGluY29ycmVjdC4KLSAgICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYWxyZWFkeSBiZWVuIGNyZWF0ZWQgc3VjZXNzZnVsbHk7Ci0gICAgICAgcy0+c3RyZWFtLmF2YWlsX2luIGlzIHplcm8gZm9yIHRoZSBmaXJzdCB0aW1lLCBidXQgbWF5IGJlIG5vbi16ZXJvCi0gICAgICAgZm9yIGNvbmNhdGVuYXRlZCAuZ3ogZmlsZXMuCi0qLwotbG9jYWwgdm9pZCBjaGVja19oZWFkZXIocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IG1ldGhvZDsgLyogbWV0aG9kIGJ5dGUgKi8KLSAgICBpbnQgZmxhZ3M7ICAvKiBmbGFncyBieXRlICovCi0gICAgdUludCBsZW47Ci0gICAgaW50IGM7Ci0KLSAgICAvKiBBc3N1cmUgdHdvIGJ5dGVzIGluIHRoZSBidWZmZXIgc28gd2UgY2FuIHBlZWsgYWhlYWQgLS0gaGFuZGxlIGNhc2UKLSAgICAgICB3aGVyZSBmaXJzdCBieXRlIG9mIGhlYWRlciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGxhc3QKLSAgICAgICBnemlwIHNlZ21lbnQgKi8KLSAgICBsZW4gPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgaWYgKGxlbiA8IDIpIHsKLSAgICAgICAgaWYgKGxlbikgcy0+aW5idWZbMF0gPSBzLT5zdHJlYW0ubmV4dF9pblswXTsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBsZW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiArIGxlbiwgMSwgWl9CVUZTSVpFID4+IGxlbiwgcy0+ZmlsZSk7Ci0gICAgICAgIGlmIChsZW4gPT0gMCAmJiBmZXJyb3Iocy0+ZmlsZSkpIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luICs9IGxlbjsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gPSBzLT5pbmJ1ZjsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA8IDIpIHsKLSAgICAgICAgICAgIHMtPnRyYW5zcGFyZW50ID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogUGVlayBhaGVhZCB0byBjaGVjayB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgKi8KLSAgICBpZiAocy0+c3RyZWFtLm5leHRfaW5bMF0gIT0gZ3pfbWFnaWNbMF0gfHwKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW5bMV0gIT0gZ3pfbWFnaWNbMV0pIHsKLSAgICAgICAgcy0+dHJhbnNwYXJlbnQgPSAxOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAtPSAyOwotICAgIHMtPnN0cmVhbS5uZXh0X2luICs9IDI7Ci0KLSAgICAvKiBDaGVjayB0aGUgcmVzdCBvZiB0aGUgZ3ppcCBoZWFkZXIgKi8KLSAgICBtZXRob2QgPSBnZXRfYnl0ZShzKTsKLSAgICBmbGFncyA9IGdldF9ieXRlKHMpOwotICAgIGlmIChtZXRob2QgIT0gWl9ERUZMQVRFRCB8fCAoZmxhZ3MgJiBSRVNFUlZFRCkgIT0gMCkgewotICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8qIERpc2NhcmQgdGltZSwgeGZsYWdzIGFuZCBPUyBjb2RlOiAqLwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgNjsgbGVuKyspICh2b2lkKWdldF9ieXRlKHMpOwotCi0gICAgaWYgKChmbGFncyAmIEVYVFJBX0ZJRUxEKSAhPSAwKSB7IC8qIHNraXAgdGhlIGV4dHJhIGZpZWxkICovCi0gICAgICAgIGxlbiAgPSAgKHVJbnQpZ2V0X2J5dGUocyk7Ci0gICAgICAgIGxlbiArPSAoKHVJbnQpZ2V0X2J5dGUocykpPDw4OwotICAgICAgICAvKiBsZW4gaXMgZ2FyYmFnZSBpZiBFT0YgYnV0IHRoZSBsb29wIGJlbG93IHdpbGwgcXVpdCBhbnl3YXkgKi8KLSAgICAgICAgd2hpbGUgKGxlbi0tICE9IDAgJiYgZ2V0X2J5dGUocykgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBPUklHX05BTUUpICE9IDApIHsgLyogc2tpcCB0aGUgb3JpZ2luYWwgZmlsZSBuYW1lICovCi0gICAgICAgIHdoaWxlICgoYyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBDT01NRU5UKSAhPSAwKSB7ICAgLyogc2tpcCB0aGUgLmd6IGZpbGUgY29tbWVudCAqLwotICAgICAgICB3aGlsZSAoKGMgPSBnZXRfYnl0ZShzKSkgIT0gMCAmJiBjICE9IEVPRikgOwotICAgIH0KLSAgICBpZiAoKGZsYWdzICYgSEVBRF9DUkMpICE9IDApIHsgIC8qIHNraXAgdGhlIGhlYWRlciBjcmMgKi8KLSAgICAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCAyOyBsZW4rKykgKHZvaWQpZ2V0X2J5dGUocyk7Ci0gICAgfQotICAgIHMtPnpfZXJyID0gcy0+el9lb2YgPyBaX0RBVEFfRVJST1IgOiBaX09LOwotfQotCi0gLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDbGVhbnVwIHRoZW4gZnJlZSB0aGUgZ2l2ZW4gZ3pfc3RyZWFtLiBSZXR1cm4gYSB6bGliIGVycm9yIGNvZGUuCi0gICBUcnkgZnJlZWluZyBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZiBhbGxvY2F0aW9ucy4KLSAqLwotbG9jYWwgaW50IGRlc3Ryb3kgKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGludCBlcnIgPSBaX09LOwotCi0gICAgaWYgKCFzKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBUUllGUkVFKHMtPm1zZyk7Ci0KLSAgICBpZiAocy0+c3RyZWFtLnN0YXRlICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICAgICAgZXJyID0gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICAgICAgZXJyID0gZGVmbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSBpZiAocy0+bW9kZSA9PSAncicpIHsKLSAgICAgICAgICAgIGVyciA9IGluZmxhdGVFbmQoJihzLT5zdHJlYW0pKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocy0+ZmlsZSAhPSBOVUxMICYmIGZjbG9zZShzLT5maWxlKSkgewotI2lmZGVmIEVTUElQRQotICAgICAgICBpZiAoZXJybm8gIT0gRVNQSVBFKSAvKiBmY2xvc2UgaXMgYnJva2VuIGZvciBwaXBlcyBpbiBIUC9VWCAqLwotI2VuZGlmCi0gICAgICAgICAgICBlcnIgPSBaX0VSUk5POwotICAgIH0KLSAgICBpZiAocy0+el9lcnIgPCAwKSBlcnIgPSBzLT56X2VycjsKLQotICAgIFRSWUZSRUUocy0+aW5idWYpOwotICAgIFRSWUZSRUUocy0+b3V0YnVmKTsKLSAgICBUUllGUkVFKHMtPnBhdGgpOwotICAgIFRSWUZSRUUocyk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6cmVhZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgcmVhZCAoMCBmb3IgZW5kIG9mIGZpbGUpLgotKi8KLWludCBaRVhQT1JUIGd6cmVhZCAoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHAgYnVmOwotICAgIHVuc2lnbmVkIGxlbjsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotICAgIEJ5dGVmICpzdGFydCA9IChCeXRlZiopYnVmOyAvKiBzdGFydGluZyBwb2ludCBmb3IgY3JjIGNvbXB1dGF0aW9uICovCi0gICAgQnl0ZSAgKm5leHRfb3V0OyAvKiA9PSBzdHJlYW0ubmV4dF9vdXQgYnV0IG5vdCBmb3JjZWQgZmFyIChmb3IgTVNET1MpICovCi0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+el9lcnIgPT0gWl9EQVRBX0VSUk9SIHx8IHMtPnpfZXJyID09IFpfRVJSTk8pIHJldHVybiAtMTsKLSAgICBpZiAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKSByZXR1cm4gMDsgIC8qIEVPRiAqLwotCi0gICAgbmV4dF9vdXQgPSAoQnl0ZSopYnVmOwotICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IChCeXRlZiopYnVmOwotICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBsZW47Ci0KLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCAmJiBzLT5iYWNrICE9IEVPRikgewotICAgICAgICAqbmV4dF9vdXQrKyA9IHMtPmJhY2s7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCsrOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0LS07Ci0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPm91dCsrOwotICAgICAgICBzdGFydCsrOwotICAgICAgICBpZiAocy0+bGFzdCkgewotICAgICAgICAgICAgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHdoaWxlIChzLT5zdHJlYW0uYXZhaWxfb3V0ICE9IDApIHsKLQotICAgICAgICBpZiAocy0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgICAgIC8qIENvcHkgZmlyc3QgdGhlIGxvb2thaGVhZCBieXRlczogKi8KLSAgICAgICAgICAgIHVJbnQgbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgICAgIGlmIChuID4gcy0+c3RyZWFtLmF2YWlsX291dCkgbiA9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgICAgICAgICB6bWVtY3B5KHMtPnN0cmVhbS5uZXh0X291dCwgcy0+c3RyZWFtLm5leHRfaW4sIG4pOwotICAgICAgICAgICAgICAgIG5leHRfb3V0ICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gbmV4dF9vdXQ7Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gICArPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gIC09IG47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX291dCA+IDApIHsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0IC09Ci0gICAgICAgICAgICAgICAgICAgICh1SW50KWZyZWFkKG5leHRfb3V0LCAxLCBzLT5zdHJlYW0uYXZhaWxfb3V0LCBzLT5maWxlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICAgICAgcy0+aW4gICs9IGxlbjsKLSAgICAgICAgICAgIHMtPm91dCArPSBsZW47Ci0gICAgICAgICAgICBpZiAobGVuID09IDApIHMtPnpfZW9mID0gMTsKLSAgICAgICAgICAgIHJldHVybiAoaW50KWxlbjsKLSAgICAgICAgfQotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDAgJiYgIXMtPnpfZW9mKSB7Ci0KLSAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmLCAxLCBaX0JVRlNJWkUsIHMtPmZpbGUpOwotICAgICAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgICAgIGlmIChmZXJyb3Iocy0+ZmlsZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gaW5mbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHsKLSAgICAgICAgICAgIC8qIENoZWNrIENSQyBhbmQgb3JpZ2luYWwgc2l6ZSAqLwotICAgICAgICAgICAgcy0+Y3JjID0gY3JjMzIocy0+Y3JjLCBzdGFydCwgKHVJbnQpKHMtPnN0cmVhbS5uZXh0X291dCAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICBzdGFydCA9IHMtPnN0cmVhbS5uZXh0X291dDsKLQotICAgICAgICAgICAgaWYgKGdldExvbmcocykgIT0gcy0+Y3JjKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICh2b2lkKWdldExvbmcocyk7Ci0gICAgICAgICAgICAgICAgLyogVGhlIHVuY29tcHJlc3NlZCBsZW5ndGggcmV0dXJuZWQgYnkgYWJvdmUgZ2V0bG9uZygpIG1heSBiZQotICAgICAgICAgICAgICAgICAqIGRpZmZlcmVudCBmcm9tIHMtPm91dCBpbiBjYXNlIG9mIGNvbmNhdGVuYXRlZCAuZ3ogZmlsZXMuCi0gICAgICAgICAgICAgICAgICogQ2hlY2sgZm9yIHN1Y2ggZmlsZXM6Ci0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2hlY2tfaGVhZGVyKHMpOwotICAgICAgICAgICAgICAgIGlmIChzLT56X2VyciA9PSBaX09LKSB7Ci0gICAgICAgICAgICAgICAgICAgIGluZmxhdGVSZXNldCgmKHMtPnN0cmVhbSkpOwotICAgICAgICAgICAgICAgICAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0sgfHwgcy0+el9lb2YpIGJyZWFrOwotICAgIH0KLSAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLQotICAgIGlmIChsZW4gPT0gcy0+c3RyZWFtLmF2YWlsX291dCAmJgotICAgICAgICAocy0+el9lcnIgPT0gWl9EQVRBX0VSUk9SIHx8IHMtPnpfZXJyID09IFpfRVJSTk8pKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9vdXQpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUKLSAgIG9yIC0xIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgdW5zaWduZWQgY2hhciBjOwotCi0gICAgcmV0dXJuIGd6cmVhZChmaWxlLCAmYywgMSkgPT0gMSA/IGMgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFB1c2ggb25lIGJ5dGUgYmFjayBvbnRvIHRoZSBzdHJlYW0uCi0qLwotaW50IFpFWFBPUlQgZ3p1bmdldGMoYywgZmlsZSkKLSAgICBpbnQgYzsKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJyB8fCBjID09IEVPRiB8fCBzLT5iYWNrICE9IEVPRikgcmV0dXJuIEVPRjsKLSAgICBzLT5iYWNrID0gYzsKLSAgICBzLT5vdXQtLTsKLSAgICBzLT5sYXN0ID0gKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCk7Ci0gICAgaWYgKHMtPmxhc3QpIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBSZWFkcyBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hhcmFjdGVycyBhcmUKLSAgIHJlYWQsIG9yIGEgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJyZWQgdG8gYnVmLCBvciBhbgotICAgZW5kLW9mLWZpbGUgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLiAgVGhlIHN0cmluZyBpcyB0aGVuIHRlcm1pbmF0ZWQKLSAgIHdpdGggYSBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6Z2V0cyByZXR1cm5zIGJ1Ziwgb3IgWl9OVUxMIGluIGNhc2Ugb2YgZXJyb3IuCi0KLSAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG5vdCBvcHRpbWl6ZWQgYXQgYWxsLgotKi8KLWNoYXIgKiBaRVhQT1JUIGd6Z2V0cyhmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGxlbjsKLXsKLSAgICBjaGFyICpiID0gYnVmOwotICAgIGlmIChidWYgPT0gWl9OVUxMIHx8IGxlbiA8PSAwKSByZXR1cm4gWl9OVUxMOwotCi0gICAgd2hpbGUgKC0tbGVuID4gMCAmJiBnenJlYWQoZmlsZSwgYnVmLCAxKSA9PSAxICYmICpidWYrKyAhPSAnXG4nKSA7Ci0gICAgKmJ1ZiA9ICdcMCc7Ci0gICAgcmV0dXJuIGIgPT0gYnVmICYmIGxlbiA+IDAgPyBaX05VTEwgOiBiOwotfQotCi0KLSNpZm5kZWYgTk9fR1pDT01QUkVTUwotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnendyaXRlIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSB3cml0dGVuICgwIGluIGNhc2Ugb2YgZXJyb3IpLgotKi8KLWludCBaRVhQT1JUIGd6d3JpdGUgKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIHZvaWRwYyBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopYnVmOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IGxlbjsKLQotICAgIHdoaWxlIChzLT5zdHJlYW0uYXZhaWxfaW4gIT0gMCkgewotCi0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsKLQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAgICAgICBzLT5pbiArPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBaX05PX0ZMVVNIKTsKLSAgICAgICAgcy0+aW4gLT0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgaWYgKHMtPnpfZXJyICE9IFpfT0spIGJyZWFrOwotICAgIH0KLSAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIChjb25zdCBCeXRlZiAqKWJ1ZiwgbGVuKTsKLQotICAgIHJldHVybiAoaW50KShsZW4gLSBzLT5zdHJlYW0uYXZhaWxfaW4pOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJncyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCi0gICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKLSAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuICgwIGluIGNhc2Ugb2YgZXJyb3IpLgotKi8KLSNpZmRlZiBTVERDCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLWludCBaRVhQT1JUVkEgZ3pwcmludGYgKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC8qIGFyZ3MgKi8gLi4uKQotewotICAgIGNoYXIgYnVmW1pfUFJJTlRGX0JVRlNJWkVdOwotICAgIHZhX2xpc3QgdmE7Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKLSAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSNpZmRlZiBOT192c25wcmludGYKLSMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNwcmludGYoYnVmLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZW9mKGJ1Zik7IGxlbisrKQotICAgICAgICBpZiAoYnVmW2xlbl0gPT0gMCkgYnJlYWs7Ci0jICBlbHNlCi0gICAgbGVuID0gdnNwcmludGYoYnVmLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5kaWYKLSNlbHNlCi0jICBpZmRlZiBIQVNfdnNucHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSMgIGVuZGlmCi0jZW5kaWYKLSAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IChpbnQpc2l6ZW9mKGJ1ZikgfHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCAodW5zaWduZWQpbGVuKTsKLX0KLSNlbHNlIC8qIG5vdCBBTlNJIEMgKi8KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCi0gICAgICAgICAgICAgICAgICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBjb25zdCBjaGFyICpmb3JtYXQ7Ci0gICAgaW50IGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwOwotewotICAgIGNoYXIgYnVmW1pfUFJJTlRGX0JVRlNJWkVdOwotICAgIGludCBsZW47Ci0KLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9IDA7Ci0jaWZkZWYgTk9fc25wcmludGYKLSMgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZW9mKGJ1Zik7IGxlbisrKQotICAgICAgICBpZiAoYnVmW2xlbl0gPT0gMCkgYnJlYWs7Ci0jICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZihidWYsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBsZW4gPSBzdHJsZW4oYnVmKTsKLSMgIGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlmCi0jZW5kaWYKLSAgICBpZiAobGVuIDw9IDAgfHwgbGVuID49IHNpemVvZihidWYpIHx8IGJ1ZltzaXplb2YoYnVmKSAtIDFdICE9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnendyaXRlKGZpbGUsIGJ1ZiwgbGVuKTsKLX0KLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyBjLCBjb252ZXJ0ZWQgdG8gYW4gdW5zaWduZWQgY2hhciwgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pwdXRjIHJldHVybnMgdGhlIHZhbHVlIHRoYXQgd2FzIHdyaXR0ZW4sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0qLwotaW50IFpFWFBPUlQgZ3pwdXRjKGZpbGUsIGMpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGM7Ci17Ci0gICAgdW5zaWduZWQgY2hhciBjYyA9ICh1bnNpZ25lZCBjaGFyKSBjOyAvKiByZXF1aXJlZCBmb3IgYmlnIGVuZGlhbiBzeXN0ZW1zICovCi0KLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCAmY2MsIDEpID09IDEgPyAoaW50KWNjIDogLTE7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVkaW5nCi0gICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnenB1dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dHMoZmlsZSwgcykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBjb25zdCBjaGFyICpzOwotewotICAgIHJldHVybiBnendyaXRlKGZpbGUsIChjaGFyKilzLCAodW5zaWduZWQpc3RybGVuKHMpKTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBUaGUgcGFyYW1ldGVyCi0gICBmbHVzaCBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLgotKi8KLWxvY2FsIGludCBkb19mbHVzaCAoZmlsZSwgZmx1c2gpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGZsdXNoOwotewotICAgIHVJbnQgbGVuOwotICAgIGludCBkb25lID0gMDsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsgLyogc2hvdWxkIGJlIHplcm8gYWxyZWFkeSBhbnl3YXkgKi8KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgbGVuID0gWl9CVUZTSVpFIC0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICBpZiAobGVuICE9IDApIHsKLSAgICAgICAgICAgIGlmICgodUludClmd3JpdGUocy0+b3V0YnVmLCAxLCBsZW4sIHMtPmZpbGUpICE9IGxlbikgewotICAgICAgICAgICAgICAgIHMtPnpfZXJyID0gWl9FUlJOTzsKLSAgICAgICAgICAgICAgICByZXR1cm4gWl9FUlJOTzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgPSBaX0JVRlNJWkU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGRvbmUpIGJyZWFrOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBkZWZsYXRlKCYocy0+c3RyZWFtKSwgZmx1c2gpOwotICAgICAgICBzLT5vdXQgLT0gcy0+c3RyZWFtLmF2YWlsX291dDsKLQotICAgICAgICAvKiBJZ25vcmUgdGhlIHNlY29uZCBvZiB0d28gY29uc2VjdXRpdmUgZmx1c2hlczogKi8KLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIHMtPnpfZXJyID09IFpfQlVGX0VSUk9SKSBzLT56X2VyciA9IFpfT0s7Ci0KLSAgICAgICAgLyogZGVmbGF0ZSBoYXMgZmluaXNoZWQgZmx1c2hpbmcgb25seSB3aGVuIGl0IGhhc24ndCB1c2VkIHVwCi0gICAgICAgICAqIGFsbCB0aGUgYXZhaWxhYmxlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyOgotICAgICAgICAgKi8KLSAgICAgICAgZG9uZSA9IChzLT5zdHJlYW0uYXZhaWxfb3V0ICE9IDAgfHwgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyAmJiBzLT56X2VyciAhPSBaX1NUUkVBTV9FTkQpIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gIHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCA/IFpfT0sgOiBzLT56X2VycjsKLX0KLQotaW50IFpFWFBPUlQgZ3pmbHVzaCAoZmlsZSwgZmx1c2gpCi0gICAgIGd6RmlsZSBmaWxlOwotICAgICBpbnQgZmx1c2g7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLSAgICBpbnQgZXJyID0gZG9fZmx1c2ggKGZpbGUsIGZsdXNoKTsKLQotICAgIGlmIChlcnIpIHJldHVybiBlcnI7Ci0gICAgZmZsdXNoKHMtPmZpbGUpOwotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotI2VuZGlmIC8qIE5PX0daQ09NUFJFU1MgKi8KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBTZXRzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlIGdpdmVuCi0gICBjb21wcmVzc2VkIGZpbGUuIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKLSAgICAgIGd6c2VlayByZXR1cm5zIHRoZSByZXN1bHRpbmcgb2Zmc2V0IGxvY2F0aW9uIGFzIG1lYXN1cmVkIGluIGJ5dGVzIGZyb20KLSAgIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHVuY29tcHJlc3NlZCBzdHJlYW0sIG9yIC0xIGluIGNhc2Ugb2YgZXJyb3IuCi0gICAgICBTRUVLX0VORCBpcyBub3QgaW1wbGVtZW50ZWQsIHJldHVybnMgZXJyb3IuCi0gICAgICBJbiB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGd6c2VlayBjYW4gYmUgZXh0cmVtZWx5IHNsb3cuCi0qLwotel9vZmZfdCBaRVhQT1JUIGd6c2VlayAoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgel9vZmZfdCBvZmZzZXQ7Ci0gICAgaW50IHdoZW5jZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCB3aGVuY2UgPT0gU0VFS19FTkQgfHwKLSAgICAgICAgcy0+el9lcnIgPT0gWl9FUlJOTyB8fCBzLT56X2VyciA9PSBaX0RBVEFfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiAtMUw7Ci0jZWxzZQotICAgICAgICBpZiAod2hlbmNlID09IFNFRUtfU0VUKSB7Ci0gICAgICAgICAgICBvZmZzZXQgLT0gcy0+aW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgLyogQXQgdGhpcyBwb2ludCwgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2YgemVybyBieXRlcyB0byB3cml0ZS4gKi8KLSAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsgLyogZm9yIHNlZWtpbmcgKi8KLSAgICAgICAgICAgIGlmIChzLT5pbmJ1ZiA9PSBaX05VTEwpIHJldHVybiAtMUw7Ci0gICAgICAgICAgICB6bWVtemVybyhzLT5pbmJ1ZiwgWl9CVUZTSVpFKTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAob2Zmc2V0ID4gMCkgIHsKLSAgICAgICAgICAgIHVJbnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgICAgIGlmIChvZmZzZXQgPCBaX0JVRlNJWkUpIHNpemUgPSAodUludClvZmZzZXQ7Ci0KLSAgICAgICAgICAgIHNpemUgPSBnendyaXRlKGZpbGUsIHMtPmluYnVmLCBzaXplKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgICAgIG9mZnNldCAtPSBzaXplOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBzLT5pbjsKLSNlbmRpZgotICAgIH0KLSAgICAvKiBSZXN0IG9mIGZ1bmN0aW9uIGlzIGZvciByZWFkaW5nIG9ubHkgKi8KLQotICAgIC8qIGNvbXB1dGUgYWJzb2x1dGUgcG9zaXRpb24gKi8KLSAgICBpZiAod2hlbmNlID09IFNFRUtfQ1VSKSB7Ci0gICAgICAgIG9mZnNldCArPSBzLT5vdXQ7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgaWYgKHMtPnRyYW5zcGFyZW50KSB7Ci0gICAgICAgIC8qIG1hcCB0byBmc2VlayAqLwotICAgICAgICBzLT5iYWNrID0gRU9GOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAoZnNlZWsocy0+ZmlsZSwgb2Zmc2V0LCBTRUVLX1NFVCkgPCAwKSByZXR1cm4gLTFMOwotCi0gICAgICAgIHMtPmluID0gcy0+b3V0ID0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gb2Zmc2V0OwotICAgIH0KLQotICAgIC8qIEZvciBhIG5lZ2F0aXZlIHNlZWssIHJld2luZCBhbmQgdXNlIHBvc2l0aXZlIHNlZWsgKi8KLSAgICBpZiAob2Zmc2V0ID49IHMtPm91dCkgewotICAgICAgICBvZmZzZXQgLT0gcy0+b3V0OwotICAgIH0gZWxzZSBpZiAoZ3pyZXdpbmQoZmlsZSkgPCAwKSB7Ci0gICAgICAgIHJldHVybiAtMUw7Ci0gICAgfQotICAgIC8qIG9mZnNldCBpcyBub3cgdGhlIG51bWJlciBvZiBieXRlcyB0byBza2lwLiAqLwotCi0gICAgaWYgKG9mZnNldCAhPSAwICYmIHMtPm91dGJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgcy0+b3V0YnVmID0gKEJ5dGUqKUFMTE9DKFpfQlVGU0laRSk7Ci0gICAgICAgIGlmIChzLT5vdXRidWYgPT0gWl9OVUxMKSByZXR1cm4gLTFMOwotICAgIH0KLSAgICBpZiAob2Zmc2V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPm91dCsrOwotICAgICAgICBvZmZzZXQtLTsKLSAgICAgICAgaWYgKHMtPmxhc3QpIHMtPnpfZXJyID0gWl9TVFJFQU1fRU5EOwotICAgIH0KLSAgICB3aGlsZSAob2Zmc2V0ID4gMCkgIHsKLSAgICAgICAgaW50IHNpemUgPSBaX0JVRlNJWkU7Ci0gICAgICAgIGlmIChvZmZzZXQgPCBaX0JVRlNJWkUpIHNpemUgPSAoaW50KW9mZnNldDsKLQotICAgICAgICBzaXplID0gZ3pyZWFkKGZpbGUsIHMtPm91dGJ1ZiwgKHVJbnQpc2l6ZSk7Ci0gICAgICAgIGlmIChzaXplIDw9IDApIHJldHVybiAtMUw7Ci0gICAgICAgIG9mZnNldCAtPSBzaXplOwotICAgIH0KLSAgICByZXR1cm4gcy0+b3V0OwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV3aW5kcyBpbnB1dCBmaWxlLgotKi8KLWludCBaRVhQT1JUIGd6cmV3aW5kIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gLTE7Ci0KLSAgICBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gMDsKLSAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgIGlmICghcy0+dHJhbnNwYXJlbnQpICh2b2lkKWluZmxhdGVSZXNldCgmcy0+c3RyZWFtKTsKLSAgICBzLT5pbiA9IDA7Ci0gICAgcy0+b3V0ID0gMDsKLSAgICByZXR1cm4gZnNlZWsocy0+ZmlsZSwgcy0+c3RhcnQsIFNFRUtfU0VUKTsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUKLSAgIGdpdmVuIGNvbXByZXNzZWQgZmlsZS4gVGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLgotKi8KLXpfb2ZmX3QgWkVYUE9SVCBnenRlbGwgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgcmV0dXJuIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0ZWN0ZWQgcmVhZGluZyB0aGUgZ2l2ZW4KLSAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3plb2YgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIC8qIFdpdGggY29uY2F0ZW5hdGVkIGNvbXByZXNzZWQgZmlsZXMgdGhhdCBjYW4gaGF2ZSBlbWJlZGRlZAotICAgICAqIGNyYyB0cmFpbGVycywgel9lb2YgaXMgbm8gbG9uZ2VyIHRoZSBvbmx5L2Jlc3QgaW5kaWNhdG9yIG9mIEVPRgotICAgICAqIG9uIGEgZ3pfc3RyZWFtLiBIYW5kbGUgZW5kLW9mLXN0cmVhbSBlcnJvciBleHBsaWNpdGx5IGhlcmUuCi0gICAgICovCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgcmV0dXJuIDA7Ci0gICAgaWYgKHMtPnpfZW9mKSByZXR1cm4gMTsKLSAgICByZXR1cm4gcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyAxIGlmIHJlYWRpbmcgYW5kIGRvaW5nIHNvIHRyYW5zcGFyZW50bHksIG90aGVyd2lzZSB6ZXJvLgotKi8KLWludCBaRVhQT1JUIGd6ZGlyZWN0IChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKLSAgICByZXR1cm4gcy0+dHJhbnNwYXJlbnQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgT3V0cHV0cyBhIGxvbmcgaW4gTFNCIG9yZGVyIHRvIHRoZSBnaXZlbiBmaWxlCi0qLwotbG9jYWwgdm9pZCBwdXRMb25nIChmaWxlLCB4KQotICAgIEZJTEUgKmZpbGU7Ci0gICAgdUxvbmcgeDsKLXsKLSAgICBpbnQgbjsKLSAgICBmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7Ci0gICAgICAgIGZwdXRjKChpbnQpKHggJiAweGZmKSwgZmlsZSk7Ci0gICAgICAgIHggPj49IDg7Ci0gICAgfQotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgIFJlYWRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgZnJvbSB0aGUgZ2l2ZW4gZ3pfc3RyZWFtLiBTZXRzIHpfZXJyIGluIGNhc2UKLSAgIG9mIGVycm9yLgotKi8KLWxvY2FsIHVMb25nIGdldExvbmcgKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIHVMb25nIHggPSAodUxvbmcpZ2V0X2J5dGUocyk7Ci0gICAgaW50IGM7Ci0KLSAgICB4ICs9ICgodUxvbmcpZ2V0X2J5dGUocykpPDw4OwotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDE2OwotICAgIGMgPSBnZXRfYnl0ZShzKTsKLSAgICBpZiAoYyA9PSBFT0YpIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgIHggKz0gKCh1TG9uZyljKTw8MjQ7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNlc3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBmaWxlCi0gICBhbmQgZGVhbGxvY2F0ZXMgYWxsIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuCi0qLwotaW50IFpFWFBPUlQgZ3pjbG9zZSAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0jZWxzZQotICAgICAgICBpZiAoZG9fZmx1c2ggKGZpbGUsIFpfRklOSVNIKSAhPSBaX09LKQotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3koKGd6X3N0cmVhbSopZmlsZSk7Ci0KLSAgICAgICAgcHV0TG9uZyAocy0+ZmlsZSwgcy0+Y3JjKTsKLSAgICAgICAgcHV0TG9uZyAocy0+ZmlsZSwgKHVMb25nKShzLT5pbiAmIDB4ZmZmZmZmZmYpKTsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLX0KLQotI2lmZGVmIFNUREMKLSMgIGRlZmluZSB6c3RyZXJyb3IoZXJybnVtKSBzdHJlcnJvcihlcnJudW0pCi0jZWxzZQotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pICIiCi0jZW5kaWYKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBlcnJudW0gaXMgc2V0IHRvIHpsaWIgZXJyb3IgbnVtYmVyLiBJZiBhbgotICAgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGFuZCBub3QgaW4gdGhlIGNvbXByZXNzaW9uIGxpYnJhcnksCi0gICBlcnJudW0gaXMgc2V0IHRvIFpfRVJSTk8gYW5kIHRoZSBhcHBsaWNhdGlvbiBtYXkgY29uc3VsdCBlcnJubwotICAgdG8gZ2V0IHRoZSBleGFjdCBlcnJvciBjb2RlLgotKi8KLWNvbnN0IGNoYXIgKiBaRVhQT1JUIGd6ZXJyb3IgKGZpbGUsIGVycm51bSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgKmVycm51bTsKLXsKLSAgICBjaGFyICptOwotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgICplcnJudW0gPSBaX1NUUkVBTV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIChjb25zdCBjaGFyKilFUlJfTVNHKFpfU1RSRUFNX0VSUk9SKTsKLSAgICB9Ci0gICAgKmVycm51bSA9IHMtPnpfZXJyOwotICAgIGlmICgqZXJybnVtID09IFpfT0spIHJldHVybiAoY29uc3QgY2hhciopIiI7Ci0KLSAgICBtID0gKGNoYXIqKSgqZXJybnVtID09IFpfRVJSTk8gPyB6c3RyZXJyb3IoZXJybm8pIDogcy0+c3RyZWFtLm1zZyk7Ci0KLSAgICBpZiAobSA9PSBOVUxMIHx8ICptID09ICdcMCcpIG0gPSAoY2hhciopRVJSX01TRyhzLT56X2Vycik7Ci0KLSAgICBUUllGUkVFKHMtPm1zZyk7Ci0gICAgcy0+bXNnID0gKGNoYXIqKUFMTE9DKHN0cmxlbihzLT5wYXRoKSArIHN0cmxlbihtKSArIDMpOwotICAgIGlmIChzLT5tc2cgPT0gWl9OVUxMKSByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOwotICAgIHN0cmNweShzLT5tc2csIHMtPnBhdGgpOwotICAgIHN0cmNhdChzLT5tc2csICI6ICIpOwotICAgIHN0cmNhdChzLT5tc2csIG0pOwotICAgIHJldHVybiAoY29uc3QgY2hhciopcy0+bXNnOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQ2xlYXIgdGhlIGVycm9yIGFuZCBlbmQtb2YtZmlsZSBmbGFncywgYW5kIGRvIHRoZSBzYW1lIGZvciB0aGUgcmVhbCBmaWxlLgotKi8KLXZvaWQgWkVYUE9SVCBnemNsZWFyZXJyIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm47Ci0gICAgaWYgKHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICBjbGVhcmVycihzLT5maWxlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemxpYi5jIGIvTW9kdWxlcy96bGliL2d6bGliLmMKaW5kZXggNjAzZTYwZS4uZmFlMjAyZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6bGliLmMKKysrIGIvTW9kdWxlcy96bGliL2d6bGliLmMKQEAgLTEsMTkgKzEsMjMgQEAKIC8qIGd6bGliLmMgLS0gemxpYiBmdW5jdGlvbnMgY29tbW9uIHRvIHJlYWRpbmcgYW5kIHdyaXRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogI2luY2x1ZGUgImd6Z3V0cy5oIgogCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fQk9STEFORENfXykKKyMgIGRlZmluZSBMU0VFSyBfbHNlZWtpNjQKKyNlbHNlCiAjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKICMgIGRlZmluZSBMU0VFSyBsc2VlazY0CiAjZWxzZQogIyAgZGVmaW5lIExTRUVLIGxzZWVrCiAjZW5kaWYKKyNlbmRpZgogCiAvKiBMb2NhbCBmdW5jdGlvbnMgKi8KIGxvY2FsIHZvaWQgZ3pfcmVzZXQgT0YoKGd6X3N0YXRlcCkpOwotbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopKTsKK2xvY2FsIGd6RmlsZSBnel9vcGVuIE9GKChjb25zdCB2b2lkICosIGludCwgY29uc3QgY2hhciAqKSk7CiAKICNpZiBkZWZpbmVkIFVOREVSX0NFCiAKQEAgLTcxLDI4ICs3NSw0MCBAQAogbG9jYWwgdm9pZCBnel9yZXNldChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CisgICAgc3RhdGUtPnguaGF2ZSA9IDA7ICAgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeyAgIC8qIGZvciByZWFkaW5nIC4uLiAqLwotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7ICAgICAgICAgICAgLyogbm8gb3V0cHV0IGRhdGEgYXZhaWxhYmxlICovCiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOyAgICAgICAgICAgICAvKiBub3QgYXQgZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOyAgICAgICAgICAgIC8qIGhhdmUgbm90IHJlYWQgcGFzdCBlbmQgeWV0ICovCiAgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOyAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRlciAqLwotICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsgICAgICAgICAgLyogZGVmYXVsdCBmb3IgZW1wdHkgZmlsZSAqLwogICAgIH0KICAgICBzdGF0ZS0+c2VlayA9IDA7ICAgICAgICAgICAgICAgIC8qIG5vIHNlZWsgcmVxdWVzdCBwZW5kaW5nICovCiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOyAgICAvKiBjbGVhciBlcnJvciAqLwotICAgIHN0YXRlLT5wb3MgPSAwOyAgICAgICAgICAgICAgICAgLyogbm8gdW5jb21wcmVzc2VkIGRhdGEgeWV0ICovCisgICAgc3RhdGUtPngucG9zID0gMDsgICAgICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7ICAgICAgIC8qIG5vIGlucHV0IGRhdGEgeWV0ICovCiB9CiAKIC8qIE9wZW4gYSBnemlwIGZpbGUgZWl0aGVyIGJ5IG5hbWUgb3IgZmlsZSBkZXNjcmlwdG9yLiAqLwogbG9jYWwgZ3pGaWxlIGd6X29wZW4ocGF0aCwgZmQsIG1vZGUpCi0gICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBjb25zdCB2b2lkICpwYXRoOwogICAgIGludCBmZDsKICAgICBjb25zdCBjaGFyICptb2RlOwogewogICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICBzaXplX3QgbGVuOworICAgIGludCBvZmxhZzsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgY2xvZXhlYyA9IDA7CisjZW5kaWYKKyNpZmRlZiBPX0VYQ0wKKyAgICBpbnQgZXhjbHVzaXZlID0gMDsKKyNlbmRpZgorCisgICAgLyogY2hlY2sgaW5wdXQgKi8KKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGFsbG9jYXRlIGd6RmlsZSBzdHJ1Y3R1cmUgdG8gcmV0dXJuICovCi0gICAgc3RhdGUgPSBtYWxsb2Moc2l6ZW9mKGd6X3N0YXRlKSk7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKW1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3RhdGUtPnNpemUgPSAwOyAgICAgICAgICAgIC8qIG5vIGJ1ZmZlcnMgYWxsb2NhdGVkIHlldCAqLwpAQCAtMTAzLDYgKzExOSw3IEBACiAgICAgc3RhdGUtPm1vZGUgPSBHWl9OT05FOwogICAgIHN0YXRlLT5sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7CisgICAgc3RhdGUtPmRpcmVjdCA9IDA7CiAgICAgd2hpbGUgKCptb2RlKSB7CiAgICAgICAgIGlmICgqbW9kZSA+PSAnMCcgJiYgKm1vZGUgPD0gJzknKQogICAgICAgICAgICAgc3RhdGUtPmxldmVsID0gKm1vZGUgLSAnMCc7CkBAIC0xMjQsNiArMTQxLDE2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBjYXNlICdiJzogICAgICAgLyogaWdub3JlIC0tIHdpbGwgcmVxdWVzdCBiaW5hcnkgYW55d2F5ICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgT19DTE9FWEVDCisgICAgICAgICAgICBjYXNlICdlJzoKKyAgICAgICAgICAgICAgICBjbG9leGVjID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgICAgICAgICAgY2FzZSAneCc6CisgICAgICAgICAgICAgICAgZXhjbHVzaXZlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgogICAgICAgICAgICAgY2FzZSAnZic6CiAgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSUxURVJFRDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzNSw2ICsxNjIsMTAgQEAKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfRklYRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdUJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6ICAgICAgICAvKiBjb3VsZCBjb25zaWRlciBhcyBhbiBlcnJvciwgYnV0IGp1c3QgaWdub3JlICovCiAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgfQpAQCAtMTQ3LDMwICsxNzgsNzEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisgICAgLyogY2FuJ3QgZm9yY2UgdHJhbnNwYXJlbnQgcmVhZCAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7CisgICAgICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgIC8qIGZvciBlbXB0eSBmaWxlICovCisgICAgfQorCiAgICAgLyogc2F2ZSB0aGUgcGF0aCBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLwotICAgIHN0YXRlLT5wYXRoID0gbWFsbG9jKHN0cmxlbihwYXRoKSArIDEpOworI2lmZGVmIF9XSU4zMgorICAgIGlmIChmZCA9PSAtMikgeworICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCBwYXRoLCAwKTsKKyAgICAgICAgaWYgKGxlbiA9PSAoc2l6ZV90KS0xKQorICAgICAgICAgICAgbGVuID0gMDsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGxlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKXBhdGgpOworICAgIHN0YXRlLT5wYXRoID0gKGNoYXIgKiltYWxsb2MobGVuICsgMSk7CiAgICAgaWYgKHN0YXRlLT5wYXRoID09IE5VTEwpIHsKICAgICAgICAgZnJlZShzdGF0ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2lmZGVmIF9XSU4zMgorICAgIGlmIChmZCA9PSAtMikKKyAgICAgICAgaWYgKGxlbikKKyAgICAgICAgICAgIHdjc3RvbWJzKHN0YXRlLT5wYXRoLCBwYXRoLCBsZW4gKyAxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKihzdGF0ZS0+cGF0aCkgPSAwOworICAgIGVsc2UKKyNlbmRpZgorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgICAgIHNucHJpbnRmKHN0YXRlLT5wYXRoLCBsZW4gKyAxLCAiJXMiLCAoY29uc3QgY2hhciAqKXBhdGgpOworI2Vsc2UKKyAgICAgICAgc3RyY3B5KHN0YXRlLT5wYXRoLCBwYXRoKTsKKyNlbmRpZgogCi0gICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlIChvciBqdXN0IHVzZSBmZCkgKi8KLSAgICBzdGF0ZS0+ZmQgPSBmZCAhPSAtMSA/IGZkIDoKLSAgICAgICAgb3BlbihwYXRoLAorICAgIC8qIGNvbXB1dGUgdGhlIGZsYWdzIGZvciBvcGVuKCkgKi8KKyAgICBvZmxhZyA9CiAjaWZkZWYgT19MQVJHRUZJTEUKLSAgICAgICAgICAgIE9fTEFSR0VGSUxFIHwKKyAgICAgICAgT19MQVJHRUZJTEUgfAogI2VuZGlmCiAjaWZkZWYgT19CSU5BUlkKLSAgICAgICAgICAgIE9fQklOQVJZIHwKKyAgICAgICAgT19CSU5BUlkgfAogI2VuZGlmCi0gICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/Ci0gICAgICAgICAgICAgICAgT19SRE9OTFkgOgotICAgICAgICAgICAgICAgIChPX1dST05MWSB8IE9fQ1JFQVQgfCAoCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KLSAgICAgICAgICAgICAgICAgICAgICAgIE9fVFJVTkMgOgotICAgICAgICAgICAgICAgICAgICAgICAgT19BUFBFTkQpKSksCi0gICAgICAgICAgICAwNjY2KTsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgKGNsb2V4ZWMgPyBPX0NMT0VYRUMgOiAwKSB8CisjZW5kaWYKKyAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPworICAgICAgICAgT19SRE9OTFkgOgorICAgICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8CisjaWZkZWYgT19FWENMCisgICAgICAgICAgKGV4Y2x1c2l2ZSA/IE9fRVhDTCA6IDApIHwKKyNlbmRpZgorICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9XUklURSA/CisgICAgICAgICAgIE9fVFJVTkMgOgorICAgICAgICAgICBPX0FQUEVORCkpKTsKKworICAgIC8qIG9wZW4gdGhlIGZpbGUgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgKG9yIGp1c3QgdXNlIGZkKSAqLworICAgIHN0YXRlLT5mZCA9IGZkID4gLTEgPyBmZCA6ICgKKyNpZmRlZiBfV0lOMzIKKyAgICAgICAgZmQgPT0gLTIgPyBfd29wZW4ocGF0aCwgb2ZsYWcsIDA2NjYpIDoKKyNlbmRpZgorICAgICAgICBvcGVuKChjb25zdCBjaGFyICopcGF0aCwgb2ZsYWcsIDA2NjYpKTsKICAgICBpZiAoc3RhdGUtPmZkID09IC0xKSB7CiAgICAgICAgIGZyZWUoc3RhdGUtPnBhdGgpOwogICAgICAgICBmcmVlKHN0YXRlKTsKQEAgLTIxNiwxNSArMjg4LDI5IEBACiAgICAgY2hhciAqcGF0aDsgICAgICAgICAvKiBpZGVudGlmaWVyIGZvciBlcnJvciBtZXNzYWdlcyAqLwogICAgIGd6RmlsZSBnejsKIAotICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IG1hbGxvYyg3ICsgMyAqIHNpemVvZihpbnQpKSkgPT0gTlVMTCkKKyAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSAoY2hhciAqKW1hbGxvYyg3ICsgMyAqIHNpemVvZihpbnQpKSkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihwYXRoLCA3ICsgMyAqIHNpemVvZihpbnQpLCAiPGZkOiVkPiIsIGZkKTsgLyogZm9yIGRlYnVnZ2luZyAqLworI2Vsc2UKICAgICBzcHJpbnRmKHBhdGgsICI8ZmQ6JWQ+IiwgZmQpOyAgIC8qIGZvciBkZWJ1Z2dpbmcgKi8KKyNlbmRpZgogICAgIGd6ID0gZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSk7CiAgICAgZnJlZShwYXRoKTsKICAgICByZXR1cm4gZ3o7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KKyNpZmRlZiBfV0lOMzIKK2d6RmlsZSBaRVhQT1JUIGd6b3Blbl93KHBhdGgsIG1vZGUpCisgICAgY29uc3Qgd2NoYXJfdCAqcGF0aDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0yLCBtb2RlKTsKK30KKyNlbmRpZgorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVCBnemJ1ZmZlcihmaWxlLCBzaXplKQogICAgIGd6RmlsZSBmaWxlOwogICAgIHVuc2lnbmVkIHNpemU7CkBAIC0yNDMsOCArMzI5LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogY2hlY2sgYW5kIHNldCByZXF1ZXN0ZWQgc2l6ZSAqLwotICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoc2l6ZSA8IDIpCisgICAgICAgIHNpemUgPSAyOyAgICAgICAgICAgICAgIC8qIG5lZWQgdHdvIGJ5dGVzIHRvIGNoZWNrIG1hZ2ljIGhlYWRlciAqLwogICAgIHN0YXRlLT53YW50ID0gc2l6ZTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI2MSw3ICszNDcsOCBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCiAgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGJhY2sgdXAgYW5kIHN0YXJ0IG92ZXIgKi8KQEAgLTI4OSw3ICszNzYsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjaGVjayB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LKQorICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogY2FuIG9ubHkgc2VlayBmcm9tIHN0YXJ0IG9yIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24gKi8KQEAgLTI5OCwzMSArMzg1LDMyIEBACiAKICAgICAvKiBub3JtYWxpemUgb2Zmc2V0IHRvIGEgU0VFS19DVVIgc3BlY2lmaWNhdGlvbiAqLwogICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpCi0gICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+cG9zOworICAgICAgICBvZmZzZXQgLT0gc3RhdGUtPngucG9zOwogICAgIGVsc2UgaWYgKHN0YXRlLT5zZWVrKQogICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnNraXA7CiAgICAgc3RhdGUtPnNlZWsgPSAwOwogCiAgICAgLyogaWYgd2l0aGluIHJhdyBhcmVhIHdoaWxlIHJlYWRpbmcsIGp1c3QgZ28gdGhlcmUgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IENPUFkgJiYKLSAgICAgICAgc3RhdGUtPnBvcyArIG9mZnNldCA+PSBzdGF0ZS0+cmF3KSB7Ci0gICAgICAgIHJldCA9IExTRUVLKHN0YXRlLT5mZCwgb2Zmc2V0IC0gc3RhdGUtPmhhdmUsIFNFRUtfQ1VSKTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArIG9mZnNldCA+PSAwKSB7CisgICAgICAgIHJldCA9IExTRUVLKHN0YXRlLT5mZCwgb2Zmc2V0IC0gc3RhdGUtPnguaGF2ZSwgU0VFS19DVVIpOwogICAgICAgICBpZiAocmV0ID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOwogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG9mZnNldDsKLSAgICAgICAgcmV0dXJuIHN0YXRlLT5wb3M7CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBzdGF0ZS0+eC5wb3M7CiAgICAgfQogCiAgICAgLyogY2FsY3VsYXRlIHNraXAgYW1vdW50LCByZXdpbmRpbmcgaWYgbmVlZGVkIGZvciBiYWNrIHNlZWsgd2hlbiByZWFkaW5nICovCiAgICAgaWYgKG9mZnNldCA8IDApIHsKICAgICAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpICAgICAgICAgLyogd3JpdGluZyAtLSBjYW4ndCBnbyBiYWNrd2FyZHMgKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT5wb3M7CisgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+eC5wb3M7CiAgICAgICAgIGlmIChvZmZzZXQgPCAwKSAgICAgICAgICAgICAgICAgICAgIC8qIGJlZm9yZSBzdGFydCBvZiBmaWxlISAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoZ3pyZXdpbmQoZmlsZSkgPT0gLTEpICAgICAgICAgICAvKiByZXdpbmQsIHRoZW4gc2tpcCB0byBvZmZzZXQgKi8KQEAgLTMzMSwxMSArNDE5LDExIEBACiAKICAgICAvKiBpZiByZWFkaW5nLCBza2lwIHdoYXQncyBpbiBvdXRwdXQgYnVmZmVyIChvbmUgbGVzcyBnemdldGMoKSBjaGVjaykgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewotICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT5oYXZlID4gb2Zmc2V0ID8KLSAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IG9mZnNldCA/CisgICAgICAgICAgICAodW5zaWduZWQpb2Zmc2V0IDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBuOwogICAgICAgICBvZmZzZXQgLT0gbjsKICAgICB9CiAKQEAgLTM0NCw3ICs0MzIsNyBAQAogICAgICAgICBzdGF0ZS0+c2VlayA9IDE7CiAgICAgICAgIHN0YXRlLT5za2lwID0gb2Zmc2V0OwogICAgIH0KLSAgICByZXR1cm4gc3RhdGUtPnBvcyArIG9mZnNldDsKKyAgICByZXR1cm4gc3RhdGUtPngucG9zICsgb2Zmc2V0OwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC0zNzMsNyArNDYxLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogcmV0dXJuIHBvc2l0aW9uICovCi0gICAgcmV0dXJuIHN0YXRlLT5wb3MgKyAoc3RhdGUtPnNlZWsgPyBzdGF0ZS0+c2tpcCA6IDApOworICAgIHJldHVybiBzdGF0ZS0+eC5wb3MgKyAoc3RhdGUtPnNlZWsgPyBzdGF0ZS0+c2tpcCA6IDApOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC00MzMsOCArNTIxLDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvKiByZXR1cm4gZW5kLW9mLWZpbGUgc3RhdGUgKi8KLSAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/Ci0gICAgICAgIChzdGF0ZS0+ZW9mICYmIHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDAgJiYgc3RhdGUtPmhhdmUgPT0gMCkgOiAwOworICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8gc3RhdGUtPnBhc3QgOiAwOwogfQogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCkBAIC00NTQsNyArNTQxLDggQEAKICAgICAvKiByZXR1cm4gZXJyb3IgaW5mb3JtYXRpb24gKi8KICAgICBpZiAoZXJybnVtICE9IE5VTEwpCiAgICAgICAgICplcnJudW0gPSBzdGF0ZS0+ZXJyOwotICAgIHJldHVybiBzdGF0ZS0+bXNnID09IE5VTEwgPyAiIiA6IHN0YXRlLT5tc2c7CisgICAgcmV0dXJuIHN0YXRlLT5lcnIgPT0gWl9NRU1fRVJST1IgPyAib3V0IG9mIG1lbW9yeSIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZyk7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQ3MSw4ICs1NTksMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyogY2xlYXIgZXJyb3IgYW5kIGVuZC1vZi1maWxlICovCi0gICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKICAgICAgICAgc3RhdGUtPmVvZiA9IDA7CisgICAgICAgIHN0YXRlLT5wYXN0ID0gMDsKKyAgICB9CiAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogfQogCkBAIC00OTQsMjYgKzU4NCwzMyBAQAogICAgICAgICBzdGF0ZS0+bXNnID0gTlVMTDsKICAgICB9CiAKKyAgICAvKiBpZiBmYXRhbCwgc2V0IHN0YXRlLT54LmhhdmUgdG8gMCBzbyB0aGF0IHRoZSBnemdldGMoKSBtYWNybyBmYWlscyAqLworICAgIGlmIChlcnIgIT0gWl9PSyAmJiBlcnIgIT0gWl9CVUZfRVJST1IpCisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAwOworCiAgICAgLyogc2V0IGVycm9yIGNvZGUsIGFuZCBpZiBubyBtZXNzYWdlLCB0aGVuIGRvbmUgKi8KICAgICBzdGF0ZS0+ZXJyID0gZXJyOwogICAgIGlmIChtc2cgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHNhdmUgYXMgc3RhdGljIHN0cmluZyAqLwotICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpIHsKLSAgICAgICAgc3RhdGUtPm1zZyA9IChjaGFyICopbXNnOworICAgIC8qIGZvciBhbiBvdXQgb2YgbWVtb3J5IGVycm9yLCByZXR1cm4gbGl0ZXJhbCBzdHJpbmcgd2hlbiByZXF1ZXN0ZWQgKi8KKyAgICBpZiAoZXJyID09IFpfTUVNX0VSUk9SKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLyogY29uc3RydWN0IGVycm9yIG1lc3NhZ2Ugd2l0aCBwYXRoICovCi0gICAgaWYgKChzdGF0ZS0+bXNnID0gbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMpKSA9PSBOVUxMKSB7CisgICAgaWYgKChzdGF0ZS0+bXNnID0gKGNoYXIgKiltYWxsb2Moc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09CisgICAgICAgICAgICBOVUxMKSB7CiAgICAgICAgIHN0YXRlLT5lcnIgPSBaX01FTV9FUlJPUjsKLSAgICAgICAgc3RhdGUtPm1zZyA9IChjaGFyICopIm91dCBvZiBtZW1vcnkiOwogICAgICAgICByZXR1cm47CiAgICAgfQorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYoc3RhdGUtPm1zZywgc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMywKKyAgICAgICAgICAgICAiJXMlcyVzIiwgc3RhdGUtPnBhdGgsICI6ICIsIG1zZyk7CisjZWxzZQogICAgIHN0cmNweShzdGF0ZS0+bXNnLCBzdGF0ZS0+cGF0aCk7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csICI6ICIpOwogICAgIHN0cmNhdChzdGF0ZS0+bXNnLCBtc2cpOworI2VuZGlmCiAgICAgcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMgYi9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKaW5kZXggNTQ4MjAxYS4uYmY0NTM4ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6cmVhZC5jCisrKyBiL01vZHVsZXMvemxpYi9nenJlYWQuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6cmVhZC5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGd6aXAgZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTgsMTAgKzgsOSBAQAogLyogTG9jYWwgZnVuY3Rpb25zICovCiBsb2NhbCBpbnQgZ3pfbG9hZCBPRigoZ3pfc3RhdGVwLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCB1bnNpZ25lZCAqKSk7CiBsb2NhbCBpbnQgZ3pfYXZhaWwgT0YoKGd6X3N0YXRlcCkpOwotbG9jYWwgaW50IGd6X25leHQ0IE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGxvbmcgKikpOwotbG9jYWwgaW50IGd6X2hlYWQgT0YoKGd6X3N0YXRlcCkpOworbG9jYWwgaW50IGd6X2xvb2sgT0YoKGd6X3N0YXRlcCkpOwogbG9jYWwgaW50IGd6X2RlY29tcCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBpbnQgZ3pfbWFrZSBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfZmV0Y2ggT0YoKGd6X3N0YXRlcCkpOwogbG9jYWwgaW50IGd6X3NraXAgT0YoKGd6X3N0YXRlcCwgel9vZmY2NF90KSk7CiAKIC8qIFVzZSByZWFkKCkgdG8gbG9hZCBhIGJ1ZmZlciAtLSByZXR1cm4gLTEgb24gZXJyb3IsIG90aGVyd2lzZSAwLiAgUmVhZCBmcm9tCkBAIC00Niw3MyArNDUsNTQgQEAKICAgIGVycm9yLCAwIG90aGVyd2lzZS4gIE5vdGUgdGhhdCB0aGUgZW9mIGZsYWcgaXMgc2V0IHdoZW4gdGhlIGVuZCBvZiB0aGUgaW5wdXQKICAgIGZpbGUgaXMgcmVhY2hlZCwgZXZlbiB0aG91Z2ggdGhlcmUgbWF5IGJlIHVudXNlZCBkYXRhIGluIHRoZSBidWZmZXIuICBPbmNlCiAgICB0aGF0IGRhdGEgaGFzIGJlZW4gdXNlZCwgbm8gbW9yZSBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVhZCB0aGUgZmlsZS4KLSAgIGd6X2F2YWlsKCkgYXNzdW1lcyB0aGF0IHN0cm0tPmF2YWlsX2luID09IDAuICovCisgICBJZiBzdHJtLT5hdmFpbF9pbiAhPSAwLCB0aGVuIHRoZSBjdXJyZW50IGRhdGEgaXMgbW92ZWQgdG8gdGhlIGJlZ2lubmluZyBvZgorICAgdGhlIGlucHV0IGJ1ZmZlciwgYW5kIHRoZW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgYnVmZmVyIGlzIGxvYWRlZCB3aXRoIHRoZQorICAgYXZhaWxhYmxlIGRhdGEgZnJvbSB0aGUgaW5wdXQgZmlsZS4gKi8KIGxvY2FsIGludCBnel9hdmFpbChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CisgICAgdW5zaWduZWQgZ290OwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICBpZiAoc3RhdGUtPmVyciAhPSBaX09LKQorICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChzdGF0ZS0+ZW9mID09IDApIHsKLSAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiwgc3RhdGUtPnNpemUsCi0gICAgICAgICAgICAgICAgKHVuc2lnbmVkICopJihzdHJtLT5hdmFpbF9pbikpID09IC0xKQorICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsgICAgICAgLyogY29weSB3aGF0J3MgdGhlcmUgdG8gdGhlIHN0YXJ0ICovCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwID0gc3RhdGUtPmluOworICAgICAgICAgICAgdW5zaWduZWQgY29uc3QgY2hhciAqcSA9IHN0cm0tPm5leHRfaW47CisgICAgICAgICAgICB1bnNpZ25lZCBuID0gc3RybS0+YXZhaWxfaW47CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKnArKyA9ICpxKys7CisgICAgICAgICAgICB9IHdoaWxlICgtLW4pOworICAgICAgICB9CisgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+aW4gKyBzdHJtLT5hdmFpbF9pbiwKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnNpemUgLSBzdHJtLT5hdmFpbF9pbiwgJmdvdCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IGdvdDsKICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIEdldCBuZXh0IGJ5dGUgZnJvbSBpbnB1dCwgb3IgLTEgaWYgZW5kIG9yIGVycm9yLiAqLwotI2RlZmluZSBORVhUKCkgKChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkgPyAtMSA6IFwKLSAgICAgICAgICAgICAgICAoc3RybS0+YXZhaWxfaW4gPT0gMCA/IC0xIDogXAotICAgICAgICAgICAgICAgICAoc3RybS0+YXZhaWxfaW4tLSwgKihzdHJtLT5uZXh0X2luKSsrKSkpCi0KLS8qIEdldCBhIGZvdXItYnl0ZSBsaXR0bGUtZW5kaWFuIGludGVnZXIgYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIHRoZSB2YWx1ZQotICAgaW4gKnJldC4gIE90aGVyd2lzZSAtMSBpcyByZXR1cm5lZCBhbmQgKnJldCBpcyBub3QgbW9kaWZpZWQuICovCi1sb2NhbCBpbnQgZ3pfbmV4dDQoc3RhdGUsIHJldCkKLSAgICBnel9zdGF0ZXAgc3RhdGU7Ci0gICAgdW5zaWduZWQgbG9uZyAqcmV0OwotewotICAgIGludCBjaDsKLSAgICB1bnNpZ25lZCBsb25nIHZhbDsKLSAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwotCi0gICAgdmFsID0gTkVYVCgpOwotICAgIHZhbCArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7Ci0gICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKU5FWFQoKSA8PCAxNjsKLSAgICBjaCA9IE5FWFQoKTsKLSAgICBpZiAoY2ggPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpY2ggPDwgMjQ7Ci0gICAgKnJldCA9IHZhbDsKLSAgICByZXR1cm4gMDsKLX0KLQotLyogTG9vayBmb3IgZ3ppcCBoZWFkZXIsIHNldCB1cCBmb3IgaW5mbGF0ZSBvciBjb3B5LiAgc3RhdGUtPmhhdmUgbXVzdCBiZSB6ZXJvLgorLyogTG9vayBmb3IgZ3ppcCBoZWFkZXIsIHNldCB1cCBmb3IgaW5mbGF0ZSBvciBjb3B5LiAgc3RhdGUtPnguaGF2ZSBtdXN0IGJlIDAuCiAgICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGluLCBhbGxvY2F0ZSByZXF1aXJlZCBtZW1vcnkuICBzdGF0ZS0+aG93IHdpbGwgYmUKICAgIGxlZnQgdW5jaGFuZ2VkIGlmIHRoZXJlIGlzIG5vIG1vcmUgaW5wdXQgZGF0YSBhdmFpbGFibGUsIHdpbGwgYmUgc2V0IHRvIENPUFkKICAgIGlmIHRoZXJlIGlzIG5vIGd6aXAgaGVhZGVyIGFuZCBkaXJlY3QgY29weWluZyB3aWxsIGJlIHBlcmZvcm1lZCwgb3IgaXQgd2lsbAotICAgYmUgc2V0IHRvIEdaSVAgZm9yIGRlY29tcHJlc3Npb24sIGFuZCB0aGUgZ3ppcCBoZWFkZXIgd2lsbCBiZSBza2lwcGVkIHNvCi0gICB0aGF0IHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBkYXRhIGlzIHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0uICBJZiBkaXJlY3QKLSAgIGNvcHlpbmcsIHRoZW4gbGVmdG92ZXIgaW5wdXQgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgd2lsbCBiZSBjb3BpZWQgdG8KLSAgIHRoZSBvdXRwdXQgYnVmZmVyLiAgSW4gdGhhdCBjYXNlLCBhbGwgZnVydGhlciBmaWxlIHJlYWRzIHdpbGwgYmUgZGlyZWN0bHkgdG8KLSAgIGVpdGhlciB0aGUgb3V0cHV0IGJ1ZmZlciBvciBhIHVzZXIgYnVmZmVyLiAgSWYgZGVjb21wcmVzc2luZywgdGhlIGluZmxhdGUKLSAgIHN0YXRlIGFuZCB0aGUgY2hlY2sgdmFsdWUgd2lsbCBiZSBpbml0aWFsaXplZC4gIGd6X2hlYWQoKSB3aWxsIHJldHVybiAwIG9uCi0gICBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuICBGYWlsdXJlcyBtYXkgaW5jbHVkZSByZWFkIGVycm9ycyBvciBnemlwIGhlYWRlcgotICAgZXJyb3JzLiAgKi8KLWxvY2FsIGludCBnel9oZWFkKHN0YXRlKQorICAgYmUgc2V0IHRvIEdaSVAgZm9yIGRlY29tcHJlc3Npb24uICBJZiBkaXJlY3QgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dAorICAgZGF0YSBmcm9tIHRoZSBpbnB1dCBidWZmZXIgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIG91dHB1dCBidWZmZXIuICBJbiB0aGF0CisgICBjYXNlLCBhbGwgZnVydGhlciBmaWxlIHJlYWRzIHdpbGwgYmUgZGlyZWN0bHkgdG8gZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yCisgICBhIHVzZXIgYnVmZmVyLiAgSWYgZGVjb21wcmVzc2luZywgdGhlIGluZmxhdGUgc3RhdGUgd2lsbCBiZSBpbml0aWFsaXplZC4KKyAgIGd6X2xvb2soKSB3aWxsIHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gKi8KK2xvY2FsIGludCBnel9sb29rKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwotICAgIGludCBmbGFnczsKLSAgICB1bnNpZ25lZCBsZW47CiAKICAgICAvKiBhbGxvY2F0ZSByZWFkIGJ1ZmZlcnMgYW5kIGluZmxhdGUgbWVtb3J5ICovCiAgICAgaWYgKHN0YXRlLT5zaXplID09IDApIHsKICAgICAgICAgLyogYWxsb2NhdGUgYnVmZmVycyAqLwotICAgICAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgICAgICBzdGF0ZS0+b3V0ID0gbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOworICAgICAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgICAgIHN0YXRlLT5vdXQgPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKICAgICAgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMIHx8IHN0YXRlLT5vdXQgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKICAgICAgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwpAQCAtMTI5LDcgKzEwOSw3IEBACiAgICAgICAgIHN0YXRlLT5zdHJtLm9wYXF1ZSA9IFpfTlVMTDsKICAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOwogICAgICAgICBzdGF0ZS0+c3RybS5uZXh0X2luID0gWl9OVUxMOwotICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAtMTUpICE9IFpfT0spIHsgICAgLyogcmF3IGluZmxhdGUgKi8KKyAgICAgICAgaWYgKGluZmxhdGVJbml0MigmKHN0YXRlLT5zdHJtKSwgMTUgKyAxNikgIT0gWl9PSykgeyAgICAvKiBndW56aXAgKi8KICAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CiAgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CiAgICAgICAgICAgICBzdGF0ZS0+c2l6ZSA9IDA7CkBAIC0xMzgsODMgKzExOCw0NSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogZ2V0IHNvbWUgZGF0YSBpbiB0aGUgaW5wdXQgYnVmZmVyICovCi0gICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAvKiBnZXQgYXQgbGVhc3QgdGhlIG1hZ2ljIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPCAyKSB7CiAgICAgICAgIGlmIChnel9hdmFpbChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLyogbG9vayBmb3IgdGhlIGd6aXAgbWFnaWMgaGVhZGVyIGJ5dGVzIDMxIGFuZCAxMzkgKi8KLSAgICBpZiAoc3RybS0+bmV4dF9pblswXSA9PSAzMSkgewotICAgICAgICBzdHJtLT5hdmFpbF9pbi0tOwotICAgICAgICBzdHJtLT5uZXh0X2luKys7Ci0gICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIHN0cm0tPm5leHRfaW5bMF0gPT0gMTM5KSB7Ci0gICAgICAgICAgICAvKiB3ZSBoYXZlIGEgZ3ppcCBoZWFkZXIsIHdvbyBob28hICovCi0gICAgICAgICAgICBzdHJtLT5hdmFpbF9pbi0tOwotICAgICAgICAgICAgc3RybS0+bmV4dF9pbisrOwotCi0gICAgICAgICAgICAvKiBza2lwIHJlc3Qgb2YgaGVhZGVyICovCi0gICAgICAgICAgICBpZiAoTkVYVCgpICE9IDgpIHsgICAgICAvKiBjb21wcmVzc2lvbiBtZXRob2QgKi8KLSAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbGFncyA9IE5FWFQoKTsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDB4ZTApIHsgICAgIC8qIHJlc2VydmVkIGZsYWcgYml0cyAqLwotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBtb2RpZmljYXRpb24gdGltZSAqLwotICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogZXh0cmEgZmxhZ3MgKi8KLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi8KLSAgICAgICAgICAgIGlmIChmbGFncyAmIDQpIHsgICAgICAgIC8qIGV4dHJhIGZpZWxkICovCi0gICAgICAgICAgICAgICAgbGVuID0gKHVuc2lnbmVkKU5FWFQoKTsKLSAgICAgICAgICAgICAgICBsZW4gKz0gKHVuc2lnbmVkKU5FWFQoKSA8PCA4OwotICAgICAgICAgICAgICAgIHdoaWxlIChsZW4tLSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKE5FWFQoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbGFncyAmIDgpICAgICAgICAgIC8qIGZpbGUgbmFtZSAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChORVhUKCkgPiAwKQotICAgICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiAxNikgICAgICAgICAvKiBjb21tZW50ICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDIpIHsgICAgICAgIC8qIGhlYWRlciBjcmMgKi8KLSAgICAgICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICAgICAgTkVYVCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogYW4gdW5leHBlY3RlZCBlbmQgb2YgZmlsZSBpcyBub3QgY2hlY2tlZCBmb3IgaGVyZSAtLSBpdCB3aWxsIGJlCi0gICAgICAgICAgICAgICBub3RpY2VkIG9uIHRoZSBmaXJzdCByZXF1ZXN0IGZvciB1bmNvbXByZXNzZWQgZGF0YSAqLwotCi0gICAgICAgICAgICAvKiBzZXQgdXAgZm9yIGRlY29tcHJlc3Npb24gKi8KLSAgICAgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgICAgICBzdGF0ZS0+aG93ID0gR1pJUDsKLSAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAwOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBub3QgYSBnemlwIGZpbGUgLS0gc2F2ZSBmaXJzdCBieXRlICgzMSkgYW5kIGZhbGwgdG8gcmF3IGkvbyAqLwotICAgICAgICAgICAgc3RhdGUtPm91dFswXSA9IDMxOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAxOwotICAgICAgICB9CisgICAgLyogbG9vayBmb3IgZ3ppcCBtYWdpYyBieXRlcyAtLSBpZiB0aGVyZSwgZG8gZ3ppcCBkZWNvZGluZyAobm90ZTogdGhlcmUgaXMKKyAgICAgICBhIGxvZ2ljYWwgZGlsZW1tYSBoZXJlIHdoZW4gY29uc2lkZXJpbmcgdGhlIGNhc2Ugb2YgYSBwYXJ0aWFsbHkgd3JpdHRlbgorICAgICAgIGd6aXAgZmlsZSwgdG8gd2l0LCBpZiBhIHNpbmdsZSAzMSBieXRlIGlzIHdyaXR0ZW4sIHRoZW4gd2UgY2Fubm90IHRlbGwKKyAgICAgICB3aGV0aGVyIHRoaXMgaXMgYSBzaW5nbGUtYnl0ZSBmaWxlLCBvciBqdXN0IGEgcGFydGlhbGx5IHdyaXR0ZW4gZ3ppcAorICAgICAgIGZpbGUgLS0gZm9yIGhlcmUgd2UgYXNzdW1lIHRoYXQgaWYgYSBnemlwIGZpbGUgaXMgYmVpbmcgd3JpdHRlbiwgdGhlbgorICAgICAgIHRoZSBoZWFkZXIgd2lsbCBiZSB3cml0dGVuIGluIGEgc2luZ2xlIG9wZXJhdGlvbiwgc28gdGhhdCByZWFkaW5nIGEKKyAgICAgICBzaW5nbGUgYnl0ZSBpcyBzdWZmaWNpZW50IGluZGljYXRpb24gdGhhdCBpdCBpcyBub3QgYSBnemlwIGZpbGUpICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luID4gMSAmJgorICAgICAgICAgICAgc3RybS0+bmV4dF9pblswXSA9PSAzMSAmJiBzdHJtLT5uZXh0X2luWzFdID09IDEzOSkgeworICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgICAgIHN0YXRlLT5ob3cgPSBHWklQOworICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLyogZG9pbmcgcmF3IGkvbywgc2F2ZSBzdGFydCBvZiByYXcgZGF0YSBmb3Igc2Vla2luZywgY29weSBhbnkgbGVmdG92ZXIKLSAgICAgICBpbnB1dCB0byBvdXRwdXQgLS0gdGhpcyBhc3N1bWVzIHRoYXQgdGhlIG91dHB1dCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4KLSAgICAgICB0aGUgaW5wdXQgYnVmZmVyLCB3aGljaCBhbHNvIGFzc3VyZXMgc3BhY2UgZm9yIGd6dW5nZXRjKCkgKi8KLSAgICBzdGF0ZS0+cmF3ID0gc3RhdGUtPnBvczsKLSAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5vdXQ7CisgICAgLyogbm8gZ3ppcCBoZWFkZXIgLS0gaWYgd2Ugd2VyZSBkZWNvZGluZyBnemlwIGJlZm9yZSwgdGhlbiB0aGlzIGlzIHRyYWlsaW5nCisgICAgICAgZ2FyYmFnZS4gIElnbm9yZSB0aGUgdHJhaWxpbmcgZ2FyYmFnZSBhbmQgZmluaXNoLiAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0ID09IDApIHsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0ZS0+ZW9mID0gMTsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGRvaW5nIHJhdyBpL28sIGNvcHkgYW55IGxlZnRvdmVyIGlucHV0IHRvIG91dHB1dCAtLSB0aGlzIGFzc3VtZXMgdGhhdAorICAgICAgIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdlciB0aGFuIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcworICAgICAgIHNwYWNlIGZvciBnenVuZ2V0YygpICovCisgICAgc3RhdGUtPngubmV4dCA9IHN0YXRlLT5vdXQ7CiAgICAgaWYgKHN0cm0tPmF2YWlsX2luKSB7Ci0gICAgICAgIG1lbWNweShzdGF0ZS0+bmV4dCArIHN0YXRlLT5oYXZlLCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7Ci0gICAgICAgIHN0YXRlLT5oYXZlICs9IHN0cm0tPmF2YWlsX2luOworICAgICAgICBtZW1jcHkoc3RhdGUtPngubmV4dCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gc3RybS0+YXZhaWxfaW47CiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKICAgICB9CiAgICAgc3RhdGUtPmhvdyA9IENPUFk7CkBAIC0yMjMsMTkgKzE2NSwxNSBAQAogfQogCiAvKiBEZWNvbXByZXNzIGZyb20gaW5wdXQgdG8gdGhlIHByb3ZpZGVkIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgaW4gdGhlIHN0YXRlLgotICAgSWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGlzIHJlYWNoZWQsIHRoZW4gdmVyaWZ5IHRoZSBnemlwIHRyYWlsZXIKLSAgIGNoZWNrIHZhbHVlIGFuZCBsZW5ndGggKG1vZHVsbyAyXjMyKS4gIHN0YXRlLT5oYXZlIGFuZCBzdGF0ZS0+bmV4dCBhcmUgc2V0Ci0gICB0byBwb2ludCB0byB0aGUganVzdCBkZWNvbXByZXNzZWQgZGF0YSwgYW5kIHRoZSBjcmMgaXMgdXBkYXRlZC4gIElmIHRoZQotICAgdHJhaWxlciBpcyB2ZXJpZmllZCwgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yIHRoZSBuZXh0IGd6aXAKLSAgIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+aGF2ZSBpcyBkZXBsZXRlZC4gIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMQotICAgb24gZmFpbHVyZS4gIEZhaWx1cmVzIG1heSBpbmNsdWRlIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIG9yIGEgZmFpbGVkIGd6aXAKLSAgIHRyYWlsZXIgdmVyaWZpY2F0aW9uLiAqLworICAgT24gcmV0dXJuLCBzdGF0ZS0+eC5oYXZlIGFuZCBzdGF0ZS0+eC5uZXh0IHBvaW50IHRvIHRoZSBqdXN0IGRlY29tcHJlc3NlZAorICAgZGF0YS4gIElmIHRoZSBnemlwIHN0cmVhbSBjb21wbGV0ZXMsIHN0YXRlLT5ob3cgaXMgcmVzZXQgdG8gTE9PSyB0byBsb29rIGZvcgorICAgdGhlIG5leHQgZ3ppcCBzdHJlYW0gb3IgcmF3IGRhdGEsIG9uY2Ugc3RhdGUtPnguaGF2ZSBpcyBkZXBsZXRlZC4gIFJldHVybnMgMAorICAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZS4gKi8KIGxvY2FsIGludCBnel9kZWNvbXAoc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewotICAgIGludCByZXQ7CisgICAgaW50IHJldCA9IFpfT0s7CiAgICAgdW5zaWduZWQgaGFkOwotICAgIHVuc2lnbmVkIGxvbmcgY3JjLCBsZW47CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAogICAgIC8qIGZpbGwgb3V0cHV0IGJ1ZmZlciB1cCB0byBlbmQgb2YgZGVmbGF0ZSBzdHJlYW0gKi8KQEAgLTI0NSwxNSArMTgzLDE1IEBACiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGRlY29tcHJlc3MgYW5kIGhhbmRsZSBlcnJvcnMgKi8KICAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKICAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUiB8fCByZXQgPT0gWl9ORUVEX0RJQ1QpIHsKICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX1NUUkVBTV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3I6IGluZmxhdGUgc3RyZWFtIGNvcnJ1cHQiKTsKKyAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXQgPT0gWl9NRU1fRVJST1IpIHsKQEAgLTI2Miw2NyArMjAwLDU1IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpIHsgICAgICAgICAgICAgIC8qIGRlZmxhdGUgc3RyZWFtIGludmFsaWQgKi8KICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsCi0gICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID09IE5VTEwgPyAiY29tcHJlc3NlZCBkYXRhIGVycm9yIiA6IHN0cm0tPm1zZyk7CisgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPT0gTlVMTCA/ICJjb21wcmVzc2VkIGRhdGEgZXJyb3IiIDogc3RybS0+bXNnKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCAmJiByZXQgIT0gWl9TVFJFQU1fRU5EKTsKIAotICAgIC8qIHVwZGF0ZSBhdmFpbGFibGUgb3V0cHV0IGFuZCBjcmMgY2hlY2sgdmFsdWUgKi8KLSAgICBzdGF0ZS0+aGF2ZSA9IGhhZCAtIHN0cm0tPmF2YWlsX291dDsKLSAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPmhhdmU7Ci0gICAgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgc3RhdGUtPm5leHQsIHN0YXRlLT5oYXZlKTsKKyAgICAvKiB1cGRhdGUgYXZhaWxhYmxlIG91dHB1dCAqLworICAgIHN0YXRlLT54LmhhdmUgPSBoYWQgLSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPnguaGF2ZTsKIAotICAgIC8qIGNoZWNrIGd6aXAgdHJhaWxlciBpZiBhdCBlbmQgb2YgZGVmbGF0ZSBzdHJlYW0gKi8KLSAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICBpZiAoZ3pfbmV4dDQoc3RhdGUsICZjcmMpID09IC0xIHx8IGd6X25leHQ0KHN0YXRlLCAmbGVuKSA9PSAtMSkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY3JjICE9IHN0cm0tPmFkbGVyKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAiaW5jb3JyZWN0IGRhdGEgY2hlY2siKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVuICE9IChzdHJtLT50b3RhbF9vdXQgJiAweGZmZmZmZmZmTCkpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgLyogcmVhZHkgZm9yIG5leHQgc3RyZWFtLCBvbmNlIGhhdmUgaXMgMCAobGVhdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCB1bmNoYW5nZWQgdG8gcmVtZW1iZXIgaG93KSAqLwotICAgIH0KKyAgICAvKiBpZiB0aGUgZ3ppcCBzdHJlYW0gY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgbG9vayBmb3IgYW5vdGhlciAqLworICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsKIAogICAgIC8qIGdvb2QgZGVjb21wcmVzc2lvbiAqLwogICAgIHJldHVybiAwOwogfQogCi0vKiBNYWtlIGRhdGEgYW5kIHB1dCBpbiB0aGUgb3V0cHV0IGJ1ZmZlci4gIEFzc3VtZXMgdGhhdCBzdGF0ZS0+aGF2ZSA9PSAwLgorLyogRmV0Y2ggZGF0YSBhbmQgcHV0IGl0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyBzdGF0ZS0+eC5oYXZlIGlzIDAuCiAgICBEYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgaW5wdXQgZmlsZSBvciBkZWNvbXByZXNzZWQgZnJvbSB0aGUgaW5wdXQKICAgIGZpbGUgZGVwZW5kaW5nIG9uIHN0YXRlLT5ob3cuICBJZiBzdGF0ZS0+aG93IGlzIExPT0ssIHRoZW4gYSBnemlwIGhlYWRlciBpcwotICAgbG9va2VkIGZvciAoYW5kIHNraXBwZWQgaWYgZm91bmQpIHRvIGRldGVybWluZSB3aXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLgotICAgUmV0dXJucyAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBnel9tYWtlKCkgd2lsbCBsZWF2ZSBzdGF0ZS0+aGF2ZSBhcyBDT1BZCi0gICBvciBHWklQIHVubGVzcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGhhcyBiZWVuIHJlYWNoZWQgYW5kIGFsbCBkYXRhIGhhcwotICAgYmVlbiBwcm9jZXNzZWQuICAqLwotbG9jYWwgaW50IGd6X21ha2Uoc3RhdGUpCisgICBsb29rZWQgZm9yIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGNvcHkgb3IgZGVjb21wcmVzcy4gIFJldHVybnMgLTEgb24gZXJyb3IsCisgICBvdGhlcndpc2UgMC4gIGd6X2ZldGNoKCkgd2lsbCBsZWF2ZSBzdGF0ZS0+aG93IGFzIENPUFkgb3IgR1pJUCB1bmxlc3MgdGhlCisgICBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzIGJlZW4gcHJvY2Vzc2VkLiAgKi8KK2xvY2FsIGludCBnel9mZXRjaChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0spIHsgICAgICAgICAgIC8qIGxvb2sgZm9yIGd6aXAgaGVhZGVyICovCi0gICAgICAgIGlmIChnel9oZWFkKHN0YXRlKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHN0YXRlLT5oYXZlKSAgICAgICAgICAgICAgICAvKiBnb3Qgc29tZSBkYXRhIGZyb20gZ3pfaGVhZCgpICovCisgICAgZG8geworICAgICAgICBzd2l0Y2goc3RhdGUtPmhvdykgeworICAgICAgICBjYXNlIExPT0s6ICAgICAgLyogLT4gTE9PSywgQ09QWSAob25seSBpZiBuZXZlciBHWklQKSwgb3IgR1pJUCAqLworICAgICAgICAgICAgaWYgKGd6X2xvb2soc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0spCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDT1BZOiAgICAgIC8qIC0+IENPUFkgKi8KKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+b3V0LCBzdGF0ZS0+c2l6ZSA8PCAxLCAmKHN0YXRlLT54LmhhdmUpKQorICAgICAgICAgICAgICAgICAgICA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoc3RhdGUtPmhvdyA9PSBDT1BZKSB7ICAgICAgICAgICAvKiBzdHJhaWdodCBjb3B5ICovCi0gICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+b3V0LCBzdGF0ZS0+c2l6ZSA8PCAxLCAmKHN0YXRlLT5oYXZlKSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBHWklQKSB7ICAgICAgLyogZGVjb21wcmVzcyAqLwotICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOwotICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7Ci0gICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICAgICAgY2FzZSBHWklQOiAgICAgIC8qIC0+IEdaSVAgb3IgTE9PSyAoaWYgZW5kIG9mIGd6aXAgc3RyZWFtKSAqLworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemUgPDwgMTsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiAoIXN0YXRlLT5lb2YgfHwgc3RybS0+YXZhaWxfaW4pKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzM2LDEyICsyNjIsMTIgQEAKICAgICAvKiBza2lwIG92ZXIgbGVuIGJ5dGVzIG9yIHJlYWNoIGVuZC1vZi1maWxlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgKi8KICAgICB3aGlsZSAobGVuKQogICAgICAgICAvKiBza2lwIG92ZXIgd2hhdGV2ZXIgaXMgaW4gb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpIHsKLSAgICAgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBsZW4gPwotICAgICAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+eC5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT54LmhhdmUgPiBsZW4gPworICAgICAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgfQogCkBAIC0zNTIsNyArMjc4LDcgQEAKICAgICAgICAgLyogbmVlZCBtb3JlIGRhdGEgdG8gc2tpcCAtLSBsb2FkIHVwIG91dHB1dCBidWZmZXIgKi8KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTM3NCwxNCArMzAwLDE1IEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgogICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIHRoZSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCiAgICAgaWYgKChpbnQpbGVuIDwgMCkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC00MDAsNDkgKzMyNyw1MSBAQAogICAgIGdvdCA9IDA7CiAgICAgZG8gewogICAgICAgICAvKiBmaXJzdCBqdXN0IHRyeSBjb3B5aW5nIGRhdGEgZnJvbSB0aGUgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpIHsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+aGF2ZSA+IGxlbiA/IGxlbiA6IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPm5leHQsIG4pOwotICAgICAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlIC09IG47CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBuID0gc3RhdGUtPnguaGF2ZSA+IGxlbiA/IGxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+eC5uZXh0LCBuKTsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIG91dHB1dCBidWZmZXIgZW1wdHkgLS0gcmV0dXJuIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0ICovCi0gICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2YgJiYgc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdHJtLT5hdmFpbF9pbiA9PSAwKSB7CisgICAgICAgICAgICBzdGF0ZS0+cGFzdCA9IDE7ICAgICAgICAvKiB0cmllZCB0byByZWFkIHBhc3QgZW5kICovCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCiAgICAgICAgIC8qIG5lZWQgb3V0cHV0IGRhdGEgLS0gZm9yIHNtYWxsIGxlbiBvciBuZXcgc3RyZWFtIGxvYWQgdXAgb3VyIG91dHB1dAogICAgICAgICAgICBidWZmZXIgKi8KICAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBMT09LIHx8IGxlbiA8IChzdGF0ZS0+c2l6ZSA8PCAxKSkgewogICAgICAgICAgICAgLyogZ2V0IG1vcmUgb3V0cHV0LCBsb29raW5nIGZvciBoZWFkZXIgaWYgcmVxdWlyZWQgKi8KLSAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9mZXRjaChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIG5vIHByb2dyZXNzIHlldCAtLSBnbyBiYWNrIHRvIG1lbWNweSgpIGFib3ZlICovCisgICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gY29weSBhYm92ZSAqLwogICAgICAgICAgICAgLyogdGhlIGNvcHkgYWJvdmUgYXNzdXJlcyB0aGF0IHdlIHdpbGwgbGVhdmUgd2l0aCBzcGFjZSBpbiB0aGUKICAgICAgICAgICAgICAgIG91dHB1dCBidWZmZXIsIGFsbG93aW5nIGF0IGxlYXN0IG9uZSBnenVuZ2V0YygpIHRvIHN1Y2NlZWQgKi8KICAgICAgICAgfQogCiAgICAgICAgIC8qIGxhcmdlIGxlbiAtLSByZWFkIGRpcmVjdGx5IGludG8gdXNlciBidWZmZXIgKi8KICAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBDT1BZKSB7ICAgICAgLyogcmVhZCBkaXJlY3RseSAqLwotICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIGJ1ZiwgbGVuLCAmbikgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgKHVuc2lnbmVkIGNoYXIgKilidWYsIGxlbiwgJm4pID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGxhcmdlIGxlbiAtLSBkZWNvbXByZXNzIGRpcmVjdGx5IGludG8gdXNlciBidWZmZXIgKi8KICAgICAgICAgZWxzZSB7ICAvKiBzdGF0ZS0+aG93ID09IEdaSVAgKi8KICAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKLSAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gYnVmOworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKICAgICAgICAgICAgIGlmIChnel9kZWNvbXAoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICAvKiB1cGRhdGUgcHJvZ3Jlc3MgKi8KICAgICAgICAgbGVuIC09IG47CiAgICAgICAgIGJ1ZiA9IChjaGFyICopYnVmICsgbjsKICAgICAgICAgZ290ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgfSB3aGlsZSAobGVuKTsKIAogICAgIC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvIHVzZXIgYnVmZmVyICh3aWxsIGZpdCBpbiBpbnQpICovCkBAIC00NTAsNiArMzc5LDExIEBACiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjZWxzZQorIyAgdW5kZWYgZ3pnZXRjCisjZW5kaWYKIGludCBaRVhQT1JUIGd6Z2V0YyhmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewpAQCAtNDYyLDE1ICszOTYsMTYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gKHNlcmlvdXMpIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwKKyAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogdHJ5IG91dHB1dCBidWZmZXIgKG5vIG5lZWQgdG8gY2hlY2sgZm9yIHNraXAgcmVxdWVzdCkgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUpIHsKLSAgICAgICAgc3RhdGUtPmhhdmUtLTsKLSAgICAgICAgc3RhdGUtPnBvcysrOwotICAgICAgICByZXR1cm4gKihzdGF0ZS0+bmV4dCkrKzsKKyAgICBpZiAoc3RhdGUtPnguaGF2ZSkgeworICAgICAgICBzdGF0ZS0+eC5oYXZlLS07CisgICAgICAgIHN0YXRlLT54LnBvcysrOworICAgICAgICByZXR1cm4gKihzdGF0ZS0+eC5uZXh0KSsrOwogICAgIH0KIAogICAgIC8qIG5vdGhpbmcgdGhlcmUgLS0gdHJ5IGd6cmVhZCgpICovCkBAIC00NzgsNiArNDEzLDEyIEBACiAgICAgcmV0dXJuIHJldCA8IDEgPyAtMSA6IGJ1ZlswXTsKIH0KIAoraW50IFpFWFBPUlQgZ3pnZXRjXyhmaWxlKQorZ3pGaWxlIGZpbGU7Cit7CisgICAgcmV0dXJuIGd6Z2V0YyhmaWxlKTsKK30KKwogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwogaW50IFpFWFBPUlQgZ3p1bmdldGMoYywgZmlsZSkKICAgICBpbnQgYzsKQEAgLTQ5MCw4ICs0MzEsOSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCkBAIC01MDYsMzIgKzQ0OCwzNCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBpZiBvdXRwdXQgYnVmZmVyIGVtcHR5LCBwdXQgYnl0ZSBhdCBlbmQgKGFsbG93cyBtb3JlIHB1c2hpbmcpICovCi0gICAgaWYgKHN0YXRlLT5oYXZlID09IDApIHsKLSAgICAgICAgc3RhdGUtPmhhdmUgPSAxOwotICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSkgLSAxOwotICAgICAgICBzdGF0ZS0+bmV4dFswXSA9IGM7Ci0gICAgICAgIHN0YXRlLT5wb3MtLTsKKyAgICBpZiAoc3RhdGUtPnguaGF2ZSA9PSAwKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSAxOworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7CisgICAgICAgIHN0YXRlLT54Lm5leHRbMF0gPSBjOworICAgICAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgICAgICByZXR1cm4gYzsKICAgICB9CiAKICAgICAvKiBpZiBubyByb29tLCBnaXZlIHVwIChtdXN0IGhhdmUgYWxyZWFkeSBkb25lIGEgZ3p1bmdldGMoKSkgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgPT0gKHN0YXRlLT5zaXplIDw8IDEpKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgIm91dCBvZiByb29tIHRvIHB1c2ggY2hhcmFjdGVycyIpOworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IChzdGF0ZS0+c2l6ZSA8PCAxKSkgeworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvKiBzbGlkZSBvdXRwdXQgZGF0YSBpZiBuZWVkZWQgYW5kIGluc2VydCBieXRlIGJlZm9yZSBleGlzdGluZyBkYXRhICovCi0gICAgaWYgKHN0YXRlLT5uZXh0ID09IHN0YXRlLT5vdXQpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUtPm91dCArIHN0YXRlLT5oYXZlOworICAgIGlmIChzdGF0ZS0+eC5uZXh0ID09IHN0YXRlLT5vdXQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUtPm91dCArIHN0YXRlLT54LmhhdmU7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpOwogICAgICAgICB3aGlsZSAoc3JjID4gc3RhdGUtPm91dCkKICAgICAgICAgICAgICotLWRlc3QgPSAqLS1zcmM7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gZGVzdDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IGRlc3Q7CiAgICAgfQotICAgIHN0YXRlLT5oYXZlKys7Ci0gICAgc3RhdGUtPm5leHQtLTsKLSAgICBzdGF0ZS0+bmV4dFswXSA9IGM7Ci0gICAgc3RhdGUtPnBvcy0tOworICAgIHN0YXRlLT54LmhhdmUrKzsKKyAgICBzdGF0ZS0+eC5uZXh0LS07CisgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgc3RhdGUtPngucG9zLS07CisgICAgc3RhdGUtPnBhc3QgPSAwOwogICAgIHJldHVybiBjOwogfQogCkBAIC01NTEsOCArNDk1LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KQEAgLTU2OSwzMiArNTE0LDMxIEBACiAgICAgbGVmdCA9ICh1bnNpZ25lZClsZW4gLSAxOwogICAgIGlmIChsZWZ0KSBkbyB7CiAgICAgICAgIC8qIGFzc3VyZSB0aGF0IHNvbWV0aGluZyBpcyBpbiB0aGUgb3V0cHV0IGJ1ZmZlciAqLwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIGVycm9yICovCi0gICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgeyAgICAgLyogZW5kIG9mIGZpbGUgKi8KLSAgICAgICAgICAgICAgICBpZiAoYnVmID09IHN0cikgICAgICAgICAvKiBnb3QgYnVwa3VzICovCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGdvdCBzb21ldGhpbmcgLS0gcmV0dXJuIGl0ICovCi0gICAgICAgICAgICB9CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDAgJiYgZ3pfZmV0Y2goc3RhdGUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGVycm9yICovCisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsgICAgICAgLyogZW5kIG9mIGZpbGUgKi8KKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgICAgICAvKiByZWFkIHBhc3QgZW5kICovCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgLyogcmV0dXJuIHdoYXQgd2UgaGF2ZSAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogbG9vayBmb3IgZW5kLW9mLWxpbmUgaW4gY3VycmVudCBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIG4gPSBzdGF0ZS0+aGF2ZSA+IGxlZnQgPyBsZWZ0IDogc3RhdGUtPmhhdmU7Ci0gICAgICAgIGVvbCA9IG1lbWNocihzdGF0ZS0+bmV4dCwgJ1xuJywgbik7CisgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBlb2wgPSAodW5zaWduZWQgY2hhciAqKW1lbWNocihzdGF0ZS0+eC5uZXh0LCAnXG4nLCBuKTsKICAgICAgICAgaWYgKGVvbCAhPSBOVUxMKQotICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPm5leHQpICsgMTsKKyAgICAgICAgICAgIG4gPSAodW5zaWduZWQpKGVvbCAtIHN0YXRlLT54Lm5leHQpICsgMTsKIAogICAgICAgICAvKiBjb3B5IHRocm91Z2ggZW5kLW9mLWxpbmUsIG9yIHJlbWFpbmRlciBpZiBub3QgZm91bmQgKi8KLSAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPm5leHQsIG4pOwotICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIGxlZnQgLT0gbjsKICAgICAgICAgYnVmICs9IG47CiAgICAgfSB3aGlsZSAobGVmdCAmJiBlb2wgPT0gTlVMTCk7CiAKLSAgICAvKiBmb3VuZCBlbmQtb2YtbGluZSBvciBvdXQgb2Ygc3BhY2UgLS0gdGVybWluYXRlIHN0cmluZyBhbmQgcmV0dXJuIGl0ICovCisgICAgLyogcmV0dXJuIHRlcm1pbmF0ZWQgc3RyaW5nLCBvciBpZiBub3RoaW5nLCBlbmQgb2YgZmlsZSAqLworICAgIGlmIChidWYgPT0gc3RyKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBidWZbMF0gPSAwOwogICAgIHJldHVybiBzdHI7CiB9CkBAIC02MTAsMTYgKzU1NCwxMiBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEKQotICAgICAgICByZXR1cm4gMDsKLQogICAgIC8qIGlmIHRoZSBzdGF0ZSBpcyBub3Qga25vd24sIGJ1dCB3ZSBjYW4gZmluZCBvdXQsIHRoZW4gZG8gc28gKHRoaXMgaXMKICAgICAgICBtYWlubHkgZm9yIHJpZ2h0IGFmdGVyIGEgZ3pvcGVuKCkgb3IgZ3pkb3BlbigpKSAqLwotICAgIGlmIChzdGF0ZS0+aG93ID09IExPT0sgJiYgc3RhdGUtPmhhdmUgPT0gMCkKLSAgICAgICAgKHZvaWQpZ3pfaGVhZChzdGF0ZSk7CisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQgJiYgc3RhdGUtPmhvdyA9PSBMT09LICYmIHN0YXRlLT54LmhhdmUgPT0gMCkKKyAgICAgICAgKHZvaWQpZ3pfbG9vayhzdGF0ZSk7CiAKLSAgICAvKiByZXR1cm4gMSBpZiByZWFkaW5nIGRpcmVjdCwgMCBpZiBkZWNvbXByZXNzaW5nIGEgZ3ppcCBzdHJlYW0gKi8KKyAgICAvKiByZXR1cm4gMSBpZiB0cmFuc3BhcmVudCwgMCBpZiBwcm9jZXNzaW5nIGEgZ3ppcCBzdHJlYW0gKi8KICAgICByZXR1cm4gc3RhdGUtPmRpcmVjdDsKIH0KIApAQCAtNjI3LDcgKzU2Nyw3IEBACiBpbnQgWkVYUE9SVCBnemNsb3NlX3IoZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQsIGVycjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCkBAIC02NDUsOSArNTg1LDEwIEBACiAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CiAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKICAgICB9CisgICAgZXJyID0gc3RhdGUtPmVyciA9PSBaX0JVRl9FUlJPUiA/IFpfQlVGX0VSUk9SIDogWl9PSzsKICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiAgICAgZnJlZShzdGF0ZS0+cGF0aCk7CiAgICAgcmV0ID0gY2xvc2Uoc3RhdGUtPmZkKTsKICAgICBmcmVlKHN0YXRlKTsKLSAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7CisgICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBlcnI7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jIGIvTW9kdWxlcy96bGliL2d6d3JpdGUuYwppbmRleCBlOGRlZmM2Li5hYTc2N2ZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9nendyaXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBnendyaXRlLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHdyaXRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTgsNDQgKzE4LDU1IEBACiAgICAgaW50IHJldDsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgLyogYWxsb2NhdGUgaW5wdXQgYW5kIG91dHB1dCBidWZmZXJzICovCi0gICAgc3RhdGUtPmluID0gbWFsbG9jKHN0YXRlLT53YW50KTsKLSAgICBzdGF0ZS0+b3V0ID0gbWFsbG9jKHN0YXRlLT53YW50KTsKLSAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmIChzdGF0ZS0+b3V0ICE9IE5VTEwpCi0gICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgICAgICBpZiAoc3RhdGUtPmluICE9IE5VTEwpCi0gICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgLyogYWxsb2NhdGUgaW5wdXQgYnVmZmVyICovCisgICAgc3RhdGUtPmluID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCkgewogICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIG1lbW9yeSwgc2V0IHVwIGZvciBnemlwIGNvbXByZXNzaW9uICovCi0gICAgc3RybS0+emFsbG9jID0gWl9OVUxMOwotICAgIHN0cm0tPnpmcmVlID0gWl9OVUxMOwotICAgIHN0cm0tPm9wYXF1ZSA9IFpfTlVMTDsKLSAgICByZXQgPSBkZWZsYXRlSW5pdDIoc3RybSwgc3RhdGUtPmxldmVsLCBaX0RFRkxBVEVELAotICAgICAgICAgICAgICAgICAgICAgICAxNSArIDE2LCA4LCBzdGF0ZS0+c3RyYXRlZ3kpOwotICAgIGlmIChyZXQgIT0gWl9PSykgewotICAgICAgICBmcmVlKHN0YXRlLT5pbik7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIG9ubHkgbmVlZCBvdXRwdXQgYnVmZmVyIGFuZCBkZWZsYXRlIHN0YXRlIGlmIGNvbXByZXNzaW5nICovCisgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIC8qIGFsbG9jYXRlIG91dHB1dCBidWZmZXIgKi8KKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgaWYgKHN0YXRlLT5vdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAqLworICAgICAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPnpmcmVlID0gWl9OVUxMOworICAgICAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7CisgICAgICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVhfV0JJVFMgKyAxNiwgREVGX01FTV9MRVZFTCwgc3RhdGUtPnN0cmF0ZWd5KTsKKyAgICAgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogbWFyayBzdGF0ZSBhcyBpbml0aWFsaXplZCAqLwogICAgIHN0YXRlLT5zaXplID0gc3RhdGUtPndhbnQ7CiAKLSAgICAvKiBpbml0aWFsaXplIHdyaXRlIGJ1ZmZlciAqLwotICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOwotICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKLSAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyIGlmIGNvbXByZXNzaW5nICovCisgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOworICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIC8qIENvbXByZXNzIHdoYXRldmVyIGlzIGF0IGF2YWlsX2luIGFuZCBuZXh0X2luIGFuZCB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUuCiAgICBSZXR1cm4gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0byB0aGUgb3V0cHV0IGZpbGUsIG90aGVyd2lzZSAwLgogICAgZmx1c2ggaXMgYXNzdW1lZCB0byBiZSBhIHZhbGlkIGRlZmxhdGUoKSBmbHVzaCB2YWx1ZS4gIElmIGZsdXNoIGlzIFpfRklOSVNILAotICAgdGhlbiB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAqLworICAgdGhlbiB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAgSWYgZ3otPmRpcmVjdAorICAgaXMgdHJ1ZSwgdGhlbiBzaW1wbHkgd3JpdGUgdG8gdGhlIG91dHB1dCBmaWxlIHdpdGhvdXQgY29tcHJlc3NpbmcsIGFuZAorICAgaWdub3JlIGZsdXNoLiAqLwogbG9jYWwgaW50IGd6X2NvbXAoc3RhdGUsIGZsdXNoKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICBpbnQgZmx1c2g7CkBAIC02OCw2ICs3OSwxNyBAQAogICAgIGlmIChzdGF0ZS0+c2l6ZSA9PSAwICYmIGd6X2luaXQoc3RhdGUpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICAvKiB3cml0ZSBkaXJlY3RseSBpZiByZXF1ZXN0ZWQgKi8KKyAgICBpZiAoc3RhdGUtPmRpcmVjdCkgeworICAgICAgICBnb3QgPSB3cml0ZShzdGF0ZS0+ZmQsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKKyAgICAgICAgaWYgKGdvdCA8IDAgfHwgKHVuc2lnbmVkKWdvdCAhPSBzdHJtLT5hdmFpbF9pbikgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfRVJSTk8sIHpzdHJlcnJvcigpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIC8qIHJ1biBkZWZsYXRlKCkgb24gcHJvdmlkZWQgaW5wdXQgdW50aWwgaXQgcHJvZHVjZXMgbm8gbW9yZSBvdXRwdXQgKi8KICAgICByZXQgPSBaX09LOwogICAgIGRvIHsKQEAgLTc1LDggKzk3LDggQEAKICAgICAgICAgICAgZG9pbmcgWl9GSU5JU0ggdGhlbiBkb24ndCB3cml0ZSB1bnRpbCB3ZSBnZXQgdG8gWl9TVFJFQU1fRU5EICovCiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0gMCB8fCAoZmx1c2ggIT0gWl9OT19GTFVTSCAmJgogICAgICAgICAgICAgKGZsdXNoICE9IFpfRklOSVNIIHx8IHJldCA9PSBaX1NUUkVBTV9FTkQpKSkgewotICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+bmV4dCk7Ci0gICAgICAgICAgICBpZiAoaGF2ZSAmJiAoKGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPm5leHQsIGhhdmUpKSA8IDAgfHwKKyAgICAgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPngubmV4dCk7CisgICAgICAgICAgICBpZiAoaGF2ZSAmJiAoKGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RhdGUtPngubmV4dCwgaGF2ZSkpIDwgMCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClnb3QgIT0gaGF2ZSkpIHsKICAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTg1LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CiAgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdHJtLT5uZXh0X291dDsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdHJtLT5uZXh0X291dDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGNvbXByZXNzICovCkBAIC0xMzEsNyArMTUzLDcgQEAKICAgICAgICAgfQogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IG47CiAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgbGVuIC09IG47CkBAIC0xNDYsNyArMTY4LDYgQEAKICAgICB1bnNpZ25lZCBsZW47CiB7CiAgICAgdW5zaWduZWQgcHV0ID0gbGVuOwotICAgIHVuc2lnbmVkIG47CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwogCkBAIC0xNjMsNyArMTg0LDcgQEAKICAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KICAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLwogICAgIGlmICgoaW50KWxlbiA8IDApIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xODYsMTYgKzIwNywxOSBAQAogICAgIGlmIChsZW4gPCBzdGF0ZS0+c2l6ZSkgewogICAgICAgICAvKiBjb3B5IHRvIGlucHV0IGJ1ZmZlciwgY29tcHJlc3Mgd2hlbiBmdWxsICovCiAgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGhhdmUsIGNvcHk7CisKICAgICAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgICAgICAgICBuID0gc3RhdGUtPnNpemUgLSBzdHJtLT5hdmFpbF9pbjsKLSAgICAgICAgICAgIGlmIChuID4gbGVuKQotICAgICAgICAgICAgICAgIG4gPSBsZW47Ci0gICAgICAgICAgICBtZW1jcHkoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luLCBidWYsIG4pOwotICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKLSAgICAgICAgICAgIGJ1ZiA9IChjaGFyICopYnVmICsgbjsKLSAgICAgICAgICAgIGxlbiAtPSBuOworICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoKHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbikgLSBzdGF0ZS0+aW4pOworICAgICAgICAgICAgY29weSA9IHN0YXRlLT5zaXplIC0gaGF2ZTsKKyAgICAgICAgICAgIGlmIChjb3B5ID4gbGVuKQorICAgICAgICAgICAgICAgIGNvcHkgPSBsZW47CisgICAgICAgICAgICBtZW1jcHkoc3RhdGUtPmluICsgaGF2ZSwgYnVmLCBjb3B5KTsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IGNvcHk7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gY29weTsKKyAgICAgICAgICAgIGJ1ZiA9IChjb25zdCBjaGFyICopYnVmICsgY29weTsKKyAgICAgICAgICAgIGxlbiAtPSBjb3B5OwogICAgICAgICAgICAgaWYgKGxlbiAmJiBnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSB3aGlsZSAobGVuKTsKQEAgLTIwNyw4ICsyMzEsOCBAQAogCiAgICAgICAgIC8qIGRpcmVjdGx5IGNvbXByZXNzIHVzZXIgYnVmZmVyIHRvIGZpbGUgKi8KICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBsZW47Ci0gICAgICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZHApYnVmOwotICAgICAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopYnVmOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgICAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yMjIsNiArMjQ2LDcgQEAKICAgICBnekZpbGUgZmlsZTsKICAgICBpbnQgYzsKIHsKKyAgICB1bnNpZ25lZCBoYXZlOwogICAgIHVuc2lnbmVkIGNoYXIgYnVmWzFdOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICB6X3N0cmVhbXAgc3RybTsKQEAgLTI0NSwxOSArMjcwLDIzIEBACiAKICAgICAvKiB0cnkgd3JpdGluZyB0byBpbnB1dCBidWZmZXIgZm9yIHNwZWVkIChzdGF0ZS0+c2l6ZSA9PSAwIGlmIGJ1ZmZlciBub3QKICAgICAgICBpbml0aWFsaXplZCkgKi8KLSAgICBpZiAoc3RybS0+YXZhaWxfaW4gPCBzdGF0ZS0+c2l6ZSkgeworICAgIGlmIChzdGF0ZS0+c2l6ZSkgewogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKICAgICAgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgICAgIHN0cm0tPm5leHRfaW5bc3RybS0+YXZhaWxfaW4rK10gPSBjOwotICAgICAgICBzdGF0ZS0+cG9zKys7Ci0gICAgICAgIHJldHVybiBjOworICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CisgICAgICAgIGlmIChoYXZlIDwgc3RhdGUtPnNpemUpIHsKKyAgICAgICAgICAgIHN0YXRlLT5pbltoYXZlXSA9IGM7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9pbisrOworICAgICAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgICAgICByZXR1cm4gYyAmIDB4ZmY7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBubyByb29tIGluIGJ1ZmZlciBvciBub3QgaW5pdGlhbGl6ZWQsIHVzZSBnel93cml0ZSgpICovCiAgICAgYnVmWzBdID0gYzsKICAgICBpZiAoZ3p3cml0ZShmaWxlLCBidWYsIDEpICE9IDEpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gYzsKKyAgICByZXR1cm4gYyAmIDB4ZmY7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTI3NCwxNiArMzAzLDE1IEBACiAgICAgcmV0dXJuIHJldCA9PSAwICYmIGxlbiAhPSAwID8gLTEgOiByZXQ7CiB9CiAKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKICNpbmNsdWRlIDxzdGRhcmcuaD4KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoraW50IFpFWFBPUlRWQSBnenZwcmludGYoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKIHsKICAgICBpbnQgc2l6ZSwgbGVuOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKICAgICB6X3N0cmVhbXAgc3RybTsKLSAgICB2YV9saXN0IHZhOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwogICAgIGlmIChmaWxlID09IE5VTEwpCkBAIC0zMTMsMjUgKzM0MSwyMCBAQAogICAgIC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIsIHB1dCBsZW5ndGggaW4gbGVuICovCiAgICAgc2l6ZSA9IChpbnQpKHN0YXRlLT5zaXplKTsKICAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKLSAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICNpZmRlZiBOT192c25wcmludGYKICMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOworICAgICh2b2lkKXZzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgdmEpOwogICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCiAgICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKICMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CisgICAgbGVuID0gdnNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCB2YSk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2b2lkKXZzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgbGVuID0gc3RybGVuKHN0YXRlLT5pbik7CisgICAgKHZvaWQpdnNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgdmEpOworICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKICMgIGVsc2UKICAgICBsZW4gPSB2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtMzQyLDExICszNjUsMjIgQEAKICAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgZGVmZXIgY29tcHJlc3Npb24gdW50aWwgbmVlZGVkICovCiAgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOwogICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47Ci0gICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgc3RhdGUtPngucG9zICs9IGxlbjsKICAgICByZXR1cm4gbGVuOwogfQogCi0jZWxzZSAvKiAhU1REQyAqLworaW50IFpFWFBPUlRWQSBnenByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCB2YTsKKyAgICBpbnQgcmV0OworCisgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7CisgICAgcmV0ID0gZ3p2cHJpbnRmKGZpbGUsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisgICAgcmV0dXJuIHJldDsKK30KKworI2Vsc2UgLyogIVNUREMgJiYgIVpfSEFWRV9TVERBUkdfSCAqLwogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKQEAgLTM2Niw2ICs0MDAsMTAgQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKICAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKKyAgICAvKiBjaGVjayB0aGF0IGNhbiByZWFsbHkgcGFzcyBwb2ludGVyIGluIGludHMgKi8KKyAgICBpZiAoc2l6ZW9mKGludCkgIT0gc2l6ZW9mKHZvaWQgKikpCisgICAgICAgIHJldHVybiAwOworCiAgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM5MCwyMiArNDI4LDIzIEBACiAgICAgc3RhdGUtPmluW3NpemUgLSAxXSA9IDA7CiAjaWZkZWYgTk9fc25wcmludGYKICMgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICBzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykKICAgICAgICAgaWYgKHN0YXRlLT5pbltsZW5dID09IDApIGJyZWFrOwogIyAgZWxzZQotICAgIGxlbiA9IHNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwogIyAgZW5kaWYKICNlbHNlCiAjICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgIHNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgc25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCiAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSAgICBsZW4gPSBzdHJsZW4oc3RhdGUtPmluKTsKKyAgICBsZW4gPSBzdHJsZW4oKGNoYXIgKikoc3RhdGUtPmluKSk7CiAjICBlbHNlCi0gICAgbGVuID0gc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyAgICBsZW4gPSBzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsCisgICAgICAgICAgICAgICAgICAgYTcsIGE4LCBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwKKyAgICAgICAgICAgICAgICAgICBhMTksIGEyMCk7CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTQxNiw3ICs0NTUsNyBAQAogICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CiAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgIHJldHVybiBsZW47CiB9CiAKQEAgLTUwMCw3ICs1MzksNyBAQAogaW50IFpFWFBPUlQgZ3pjbG9zZV93KGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7Ci0gICAgaW50IHJldCA9IDA7CisgICAgaW50IHJldCA9IFpfT0s7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogCiAgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLwpAQCAtNTE1LDE3ICs1NTQsMjQgQEAKICAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCiAgICAgaWYgKHN0YXRlLT5zZWVrKSB7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKLSAgICAgICAgcmV0ICs9IGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKTsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldCA9IHN0YXRlLT5lcnI7CiAgICAgfQogCiAgICAgLyogZmx1c2gsIGZyZWUgbWVtb3J5LCBhbmQgY2xvc2UgZmlsZSAqLwotICAgIHJldCArPSBnel9jb21wKHN0YXRlLCBaX0ZJTklTSCk7Ci0gICAgKHZvaWQpZGVmbGF0ZUVuZCgmKHN0YXRlLT5zdHJtKSk7Ci0gICAgZnJlZShzdGF0ZS0+b3V0KTsKLSAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfRklOSVNIKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgaWYgKCFzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgICAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgIH0KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiAgICAgZnJlZShzdGF0ZS0+cGF0aCk7Ci0gICAgcmV0ICs9IGNsb3NlKHN0YXRlLT5mZCk7CisgICAgaWYgKGNsb3NlKHN0YXRlLT5mZCkgPT0gLTEpCisgICAgICAgIHJldCA9IFpfRVJSTk87CiAgICAgZnJlZShzdGF0ZSk7Ci0gICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBaX09LOworICAgIHJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mYmFjay5jIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwppbmRleCBhZjNhOGM5Li5mMzgzM2MyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZiYWNrLmMgLS0gaW5mbGF0ZSB1c2luZyBhIGNhbGwtYmFjayBpbnRlcmZhY2UKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDExIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC00MiwxMCArNDIsMTkgQEAKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0cm0tPm1zZyA9IFpfTlVMTDsgICAgICAgICAgICAgICAgIC8qIGluIGNhc2Ugd2UgcmV0dXJuIGFuIGVycm9yICovCiAgICAgaWYgKHN0cm0tPnphbGxvYyA9PSAoYWxsb2NfZnVuYykwKSB7CisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCiAgICAgICAgIHN0cm0tPnphbGxvYyA9IHpjYWxsb2M7CiAgICAgICAgIHN0cm0tPm9wYXF1ZSA9ICh2b2lkcGYpMDsKKyNlbmRpZgogICAgIH0KLSAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKSBzdHJtLT56ZnJlZSA9IHpjZnJlZTsKKyAgICBpZiAoc3RybS0+emZyZWUgPT0gKGZyZWVfZnVuYykwKQorI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQorICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopWkFMTE9DKHN0cm0sIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKQEAgLTI0Niw3ICsyNTUsNyBAQAogdm9pZCBGQVIgKm91dF9kZXNjOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKnB1dDsgICAgIC8qIG5leHQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgaGF2ZSwgbGVmdDsgICAgICAgIC8qIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgbG9uZyBob2xkOyAgICAgICAgIC8qIGJpdCBidWZmZXIgKi8KQEAgLTM5NCw3ICs0MDMsNiBAQAogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZmYXN0LmMgYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCmluZGV4IDJmMWQ2MGIuLmJkYTU5Y2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKKysrIGIvTW9kdWxlcy96bGliL2luZmZhc3QuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmZhc3QuYyAtLSBmYXN0IGRlY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCwgMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOCwgMjAxMCwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNjksOCArNjksOCBAQAogdW5zaWduZWQgc3RhcnQ7ICAgICAgICAgLyogaW5mbGF0ZSgpJ3Mgc3RhcnRpbmcgdmFsdWUgZm9yIHN0cm0tPmF2YWlsX291dCAqLwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY2hhciBGQVIgKmluOyAgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfaW4gKi8KLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogd2hpbGUgaW4gPCBsYXN0LCBlbm91Z2ggaW5wdXQgYXZhaWxhYmxlICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmxhc3Q7ICAgIC8qIGhhdmUgZW5vdWdoIGlucHV0IHdoaWxlIGluIDwgbGFzdCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpvdXQ7ICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X291dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpiZWc7ICAgICAvKiBpbmZsYXRlKCkncyBpbml0aWFsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmVuZDsgICAgIC8qIHdoaWxlIG91dCA8IGVuZCwgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmZpeGVkLmggYi9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaAppbmRleCA3NWVkNGI1Li5kNjI4MzI3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaAorKysgYi9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaApAQCAtMiw5ICsyLDkgQEAKICAgICAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBtYWtlZml4ZWQoKS4KICAgICAgKi8KIAotICAgIC8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0Ci0gICAgICAgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kCi0gICAgICAgaXMgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgorICAgIC8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuCisgICAgICAgSXQgaXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBsaWJyYXJ5IGFuZCBpcworICAgICAgIHN1YmplY3QgdG8gY2hhbmdlLiBBcHBsaWNhdGlvbnMgc2hvdWxkIG9ubHkgdXNlIHpsaWIuaC4KICAgICAgKi8KIAogICAgIHN0YXRpYyBjb25zdCBjb2RlIGxlbmZpeFs1MTJdID0gewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmxhdGUuYyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKaW5kZXggYTg0MzFhYi4uODcwZjg5YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmxhdGUuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mbGF0ZS5jIC0tIHpsaWIgZGVjb21wcmVzc2lvbgotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTkzLDE0ICs5MywxNSBAQAogCiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCiBsb2NhbCB2b2lkIGZpeGVkdGFibGVzIE9GKChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlKSk7Ci1sb2NhbCBpbnQgdXBkYXRld2luZG93IE9GKCh6X3N0cmVhbXAgc3RybSwgdW5zaWduZWQgb3V0KSk7Citsb2NhbCBpbnQgdXBkYXRld2luZG93IE9GKCh6X3N0cmVhbXAgc3RybSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvcHkpKTsKICNpZmRlZiBCVUlMREZJWEVECiAgICB2b2lkIG1ha2VmaXhlZCBPRigodm9pZCkpOwogI2VuZGlmCi1sb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoIE9GKCh1bnNpZ25lZCBGQVIgKmhhdmUsIHVuc2lnbmVkIGNoYXIgRkFSICpidWYsCitsb2NhbCB1bnNpZ25lZCBzeW5jc2VhcmNoIE9GKCh1bnNpZ25lZCBGQVIgKmhhdmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW4pKTsKIAotaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCitpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pCiB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwpAQCAtMTA5LDE1ICsxMTAsMTMgQEAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKICAgICBzdHJtLT50b3RhbF9pbiA9IHN0cm0tPnRvdGFsX291dCA9IHN0YXRlLT50b3RhbCA9IDA7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOwotICAgIHN0cm0tPmFkbGVyID0gMTsgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KKyAgICBpZiAoc3RhdGUtPndyYXApICAgICAgICAvKiB0byBzdXBwb3J0IGlsbC1jb25jZWl2ZWQgSmF2YSB0ZXN0IHN1aXRlICovCisgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPndyYXAgJiAxOwogICAgIHN0YXRlLT5tb2RlID0gSEVBRDsKICAgICBzdGF0ZS0+bGFzdCA9IDA7CiAgICAgc3RhdGUtPmhhdmVkaWN0ID0gMDsKICAgICBzdGF0ZS0+ZG1heCA9IDMyNzY4VTsKICAgICBzdGF0ZS0+aGVhZCA9IFpfTlVMTDsKLSAgICBzdGF0ZS0+d3NpemUgPSAwOwotICAgIHN0YXRlLT53aGF2ZSA9IDA7Ci0gICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICBzdGF0ZS0+aG9sZCA9IDA7CiAgICAgc3RhdGUtPmJpdHMgPSAwOwogICAgIHN0YXRlLT5sZW5jb2RlID0gc3RhdGUtPmRpc3Rjb2RlID0gc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7CkBAIC0xMjcsNiArMTI2LDE5IEBACiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldChzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICBzdGF0ZS0+d3NpemUgPSAwOworICAgIHN0YXRlLT53aGF2ZSA9IDA7CisgICAgc3RhdGUtPnduZXh0ID0gMDsKKyAgICByZXR1cm4gaW5mbGF0ZVJlc2V0S2VlcChzdHJtKTsKK30KKwogaW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKQogel9zdHJlYW1wIHN0cm07CiBpbnQgd2luZG93Qml0czsKQEAgLTE4MCwxMCArMTkyLDE5IEBACiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgICAgIHN0cm0tPnpmcmVlID0gemNmcmVlOworI2VuZGlmCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopCiAgICAgICAgICAgICBaQUxMT0Moc3RybSwgMSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwpAQCAtMzIxLDggKzM0Miw4IEBACiAgICAgbG93ID0gMDsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICgobG93ICUgNykgPT0gMCkgcHJpbnRmKCJcbiAgICAgICAgIik7Ci0gICAgICAgIHByaW50ZigieyV1LCV1LCVkfSIsIHN0YXRlLmxlbmNvZGVbbG93XS5vcCwgc3RhdGUubGVuY29kZVtsb3ddLmJpdHMsCi0gICAgICAgICAgICAgICBzdGF0ZS5sZW5jb2RlW2xvd10udmFsKTsKKyAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9IiwgKGxvdyAmIDEyNykgPT0gOTkgPyA2NCA6IHN0YXRlLmxlbmNvZGVbbG93XS5vcCwKKyAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93XS5iaXRzLCBzdGF0ZS5sZW5jb2RlW2xvd10udmFsKTsKICAgICAgICAgaWYgKCsrbG93ID09IHNpemUpIGJyZWFrOwogICAgICAgICBwdXRjaGFyKCcsJyk7CiAgICAgfQpAQCAtMzU1LDEyICszNzYsMTMgQEAKICAgIG91dHB1dCB3aWxsIGZhbGwgaW4gdGhlIG91dHB1dCBkYXRhLCBtYWtpbmcgbWF0Y2ggY29waWVzIHNpbXBsZXIgYW5kIGZhc3Rlci4KICAgIFRoZSBhZHZhbnRhZ2UgbWF5IGJlIGRlcGVuZGVudCBvbiB0aGUgc2l6ZSBvZiB0aGUgcHJvY2Vzc29yJ3MgZGF0YSBjYWNoZXMuCiAgKi8KLWxvY2FsIGludCB1cGRhdGV3aW5kb3coc3RybSwgb3V0KQorbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBlbmQsIGNvcHkpCiB6X3N0cmVhbXAgc3RybTsKLXVuc2lnbmVkIG91dDsKK2NvbnN0IEJ5dGVmICplbmQ7Cit1bnNpZ25lZCBjb3B5OwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7Ci0gICAgdW5zaWduZWQgY29weSwgZGlzdDsKKyAgICB1bnNpZ25lZCBkaXN0OwogCiAgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CiAKQEAgLTM4MCwxOSArNDAyLDE4IEBACiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZS0+d3NpemUgb3IgbGVzcyBvdXRwdXQgYnl0ZXMgaW50byB0aGUgY2lyY3VsYXIgd2luZG93ICovCi0gICAgY29weSA9IG91dCAtIHN0cm0tPmF2YWlsX291dDsKICAgICBpZiAoY29weSA+PSBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKKyAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBzdGF0ZS0+d3NpemUsIHN0YXRlLT53c2l6ZSk7CiAgICAgICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGRpc3QgPSBzdGF0ZS0+d3NpemUgLSBzdGF0ZS0+d25leHQ7CiAgICAgICAgIGlmIChkaXN0ID4gY29weSkgZGlzdCA9IGNvcHk7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBkaXN0KTsKKyAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBlbmQgLSBjb3B5LCBkaXN0KTsKICAgICAgICAgY29weSAtPSBkaXN0OwogICAgICAgICBpZiAoY29weSkgewotICAgICAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGNvcHkpOworICAgICAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBlbmQgLSBjb3B5LCBjb3B5KTsKICAgICAgICAgICAgIHN0YXRlLT53bmV4dCA9IGNvcHk7CiAgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7CiAgICAgICAgIH0KQEAgLTQ5OSwxMSArNTIwLDYgQEAKICAgICAgICAgYml0cyAtPSBiaXRzICYgNzsgXAogICAgIH0gd2hpbGUgKDApCiAKLS8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCi0jZGVmaW5lIFJFVkVSU0UocSkgXAotICAgICgoKChxKSA+PiAyNCkgJiAweGZmKSArICgoKHEpID4+IDgpICYgMHhmZjAwKSArIFwKLSAgICAgKCgocSkgJiAweGZmMDApIDw8IDgpICsgKCgocSkgJiAweGZmKSA8PCAyNCkpCi0KIC8qCiAgICBpbmZsYXRlKCkgdXNlcyBhIHN0YXRlIG1hY2hpbmUgdG8gcHJvY2VzcyBhcyBtdWNoIGlucHV0IGRhdGEgYW5kIGdlbmVyYXRlIGFzCiAgICBtdWNoIG91dHB1dCBkYXRhIGFzIHBvc3NpYmxlIGJlZm9yZSByZXR1cm5pbmcuICBUaGUgc3RhdGUgbWFjaGluZSBpcwpAQCAtNTkxLDcgKzYwNyw3IEBACiBpbnQgZmx1c2g7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtNzk3LDcgKzgxMyw3IEBACiAjZW5kaWYKICAgICAgICAgY2FzZSBESUNUSUQ6CiAgICAgICAgICAgICBORUVEQklUUygzMik7Ci0gICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFJFVkVSU0UoaG9sZCk7CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9IFpTV0FQMzIoaG9sZCk7CiAgICAgICAgICAgICBJTklUQklUUygpOwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESUNUOwogICAgICAgICBjYXNlIERJQ1Q6CkBAIC05MDUsNyArOTIxLDcgQEAKICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IDE5KQogICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW29yZGVyW3N0YXRlLT5oYXZlKytdXSA9IDA7CiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0gNzsKICAgICAgICAgICAgIHJldCA9IGluZmxhdGVfdGFibGUoQ09ERVMsIHN0YXRlLT5sZW5zLCAxOSwgJihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC05MjUsNyArOTQxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsIDwgMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSBoZXJlLnZhbDsKICAgICAgICAgICAgICAgICB9CkBAIC05ODAsNyArOTk1LDcgQEAKICAgICAgICAgICAgICAgIHZhbHVlcyBoZXJlICg5IGFuZCA2KSB3aXRob3V0IHJlYWRpbmcgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKICAgICAgICAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi8KICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA5OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShMRU5TLCBzdGF0ZS0+bGVucywgc3RhdGUtPm5sZW4sICYoc3RhdGUtPm5leHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHN0YXRlLT5sZW5iaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtOTg5LDcgKzEwMDQsNyBAQAogICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIHN0YXRlLT5kaXN0Y29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+ZGlzdGJpdHMgPSA2OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShESVNUUywgc3RhdGUtPmxlbnMgKyBzdGF0ZS0+bmxlbiwgc3RhdGUtPm5kaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPm5leHQpLCAmKHN0YXRlLT5kaXN0Yml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTExNzAsNyArMTE4NSw3IEBACiAjaWZkZWYgR1VOWklQCiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZmxhZ3MgPyBob2xkIDoKICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgUkVWRVJTRShob2xkKSkgIT0gc3RhdGUtPmNoZWNrKSB7CisgICAgICAgICAgICAgICAgICAgICBaU1dBUDMyKGhvbGQpKSAhPSBzdGF0ZS0+Y2hlY2spIHsKICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW5jb3JyZWN0IGRhdGEgY2hlY2siOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjE0LDggKzEyMjksOSBAQAogICAgICAqLwogICBpbmZfbGVhdmU6CiAgICAgUkVTVE9SRSgpOwotICAgIGlmIChzdGF0ZS0+d3NpemUgfHwgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgJiYgb3V0ICE9IHN0cm0tPmF2YWlsX291dCkpCi0gICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgb3V0KSkgeworICAgIGlmIChzdGF0ZS0+d3NpemUgfHwgKG91dCAhPSBzdHJtLT5hdmFpbF9vdXQgJiYgc3RhdGUtPm1vZGUgPCBCQUQgJiYKKyAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA8IENIRUNLIHx8IGZsdXNoICE9IFpfRklOSVNIKSkpCisgICAgICAgIGlmICh1cGRhdGV3aW5kb3coc3RybSwgc3RybS0+bmV4dF9vdXQsIG91dCAtIHN0cm0tPmF2YWlsX291dCkpIHsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTUVNOwogICAgICAgICAgICAgcmV0dXJuIFpfTUVNX0VSUk9SOwogICAgICAgICB9CkBAIC0xMjQ5LDEzICsxMjY1LDM3IEBACiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKK2ludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5KHN0cm0sIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpCit6X3N0cmVhbXAgc3RybTsKK0J5dGVmICpkaWN0aW9uYXJ5OwordUludCAqZGljdExlbmd0aDsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgLyogY2hlY2sgc3RhdGUgKi8KKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgKi8KKyAgICBpZiAoc3RhdGUtPndoYXZlICYmIGRpY3Rpb25hcnkgIT0gWl9OVUxMKSB7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSwgc3RhdGUtPndpbmRvdyArIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQpOworICAgICAgICB6bWVtY3B5KGRpY3Rpb25hcnkgKyBzdGF0ZS0+d2hhdmUgLSBzdGF0ZS0+d25leHQsCisgICAgICAgICAgICAgICAgc3RhdGUtPndpbmRvdywgc3RhdGUtPnduZXh0KTsKKyAgICB9CisgICAgaWYgKGRpY3RMZW5ndGggIT0gWl9OVUxMKQorICAgICAgICAqZGljdExlbmd0aCA9IHN0YXRlLT53aGF2ZTsKKyAgICByZXR1cm4gWl9PSzsKK30KKwogaW50IFpFWFBPUlQgaW5mbGF0ZVNldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKIHpfc3RyZWFtcCBzdHJtOwogY29uc3QgQnl0ZWYgKmRpY3Rpb25hcnk7CiB1SW50IGRpY3RMZW5ndGg7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nIGlkOworICAgIHVuc2lnbmVkIGxvbmcgZGljdGlkOworICAgIGludCByZXQ7CiAKICAgICAvKiBjaGVjayBzdGF0ZSAqLwogICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKQEAgLTEyNjMsMjkgKzEzMDMsMjEgQEAKICAgICBpZiAoc3RhdGUtPndyYXAgIT0gMCAmJiBzdGF0ZS0+bW9kZSAhPSBESUNUKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKLSAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkICovCisgICAgLyogY2hlY2sgZm9yIGNvcnJlY3QgZGljdGlvbmFyeSBpZGVudGlmaWVyICovCiAgICAgaWYgKHN0YXRlLT5tb2RlID09IERJQ1QpIHsKLSAgICAgICAgaWQgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICBpZCA9IGFkbGVyMzIoaWQsIGRpY3Rpb25hcnksIGRpY3RMZW5ndGgpOwotICAgICAgICBpZiAoaWQgIT0gc3RhdGUtPmNoZWNrKQorICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKDBMLCBaX05VTEwsIDApOworICAgICAgICBkaWN0aWQgPSBhZGxlcjMyKGRpY3RpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7CisgICAgICAgIGlmIChkaWN0aWQgIT0gc3RhdGUtPmNoZWNrKQogICAgICAgICAgICAgcmV0dXJuIFpfREFUQV9FUlJPUjsKICAgICB9CiAKLSAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93ICovCi0gICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLT5hdmFpbF9vdXQpKSB7CisgICAgLyogY29weSBkaWN0aW9uYXJ5IHRvIHdpbmRvdyB1c2luZyB1cGRhdGV3aW5kb3coKSwgd2hpY2ggd2lsbCBhbWVuZCB0aGUKKyAgICAgICBleGlzdGluZyBkaWN0aW9uYXJ5IGlmIGFwcHJvcHJpYXRlICovCisgICAgcmV0ID0gdXBkYXRld2luZG93KHN0cm0sIGRpY3Rpb25hcnkgKyBkaWN0TGVuZ3RoLCBkaWN0TGVuZ3RoKTsKKyAgICBpZiAocmV0KSB7CiAgICAgICAgIHN0YXRlLT5tb2RlID0gTUVNOwogICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgfQotICAgIGlmIChkaWN0TGVuZ3RoID4gc3RhdGUtPndzaXplKSB7Ci0gICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgZGljdGlvbmFyeSArIGRpY3RMZW5ndGggLSBzdGF0ZS0+d3NpemUsCi0gICAgICAgICAgICAgICAgc3RhdGUtPndzaXplKTsKLSAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPndzaXplIC0gZGljdExlbmd0aCwgZGljdGlvbmFyeSwKLSAgICAgICAgICAgICAgICBkaWN0TGVuZ3RoKTsKLSAgICAgICAgc3RhdGUtPndoYXZlID0gZGljdExlbmd0aDsKLSAgICB9CiAgICAgc3RhdGUtPmhhdmVkaWN0ID0gMTsKICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgZGljdGlvbmFyeSBzZXRcbiIpKTsKICAgICByZXR1cm4gWl9PSzsKQEAgLTEzMjEsNyArMTM1Myw3IEBACiAgKi8KIGxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2goaGF2ZSwgYnVmLCBsZW4pCiB1bnNpZ25lZCBGQVIgKmhhdmU7Ci11bnNpZ25lZCBjaGFyIEZBUiAqYnVmOworY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKIHVuc2lnbmVkIGxlbjsKIHsKICAgICB1bnNpZ25lZCBnb3Q7CkBAIC0xNDMzLDggKzE0NjUsOCBAQAogICAgIH0KIAogICAgIC8qIGNvcHkgc3RhdGUgKi8KLSAgICB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgc2l6ZW9mKHpfc3RyZWFtKSk7Ci0gICAgem1lbWNweShjb3B5LCBzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRlc3QsICh2b2lkcGYpc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpY29weSwgKHZvaWRwZilzdGF0ZSwgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlLT5sZW5jb2RlID49IHN0YXRlLT5jb2RlcyAmJgogICAgICAgICBzdGF0ZS0+bGVuY29kZSA8PSBzdGF0ZS0+Y29kZXMgKyBFTk9VR0ggLSAxKSB7CiAgICAgICAgIGNvcHktPmxlbmNvZGUgPSBjb3B5LT5jb2RlcyArIChzdGF0ZS0+bGVuY29kZSAtIHN0YXRlLT5jb2Rlcyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuYyBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jCmluZGV4IDExZTljNTIuLjQ0ZDg5Y2YgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mdHJlZXMuYyAtLSBnZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2llbnQgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC05LDcgKzksNyBAQAogI2RlZmluZSBNQVhCSVRTIDE1CiAKIGNvbnN0IGNoYXIgaW5mbGF0ZV9jb3B5cmlnaHRbXSA9Ci0gICAiIGluZmxhdGUgMS4yLjUgQ29weXJpZ2h0IDE5OTUtMjAxMCBNYXJrIEFkbGVyICI7CisgICAiIGluZmxhdGUgMS4yLjggQ29weXJpZ2h0IDE5OTUtMjAxMyBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDB9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsZXh0WzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAotICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzMsIDE5NX07CisgICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MiwgNzh9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYmFzZVszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGJhc2UgKi8KICAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLAogICAgICAgICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCkBAIC0yMDgsOCArMjA4LDggQEAKICAgICBtYXNrID0gdXNlZCAtIDE7ICAgICAgICAgICAgLyogbWFzayBmb3IgY29tcGFyaW5nIGxvdyAqLwogCiAgICAgLyogY2hlY2sgYXZhaWxhYmxlIHRhYmxlIHNwYWNlICovCi0gICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKLSAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+PSBFTk9VR0hfRElTVFMpKQorICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPiBFTk9VR0hfTEVOUykgfHwKKyAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqLwpAQCAtMjc3LDggKzI3Nyw4IEBACiAKICAgICAgICAgICAgIC8qIGNoZWNrIGZvciBlbm91Z2ggc3BhY2UgKi8KICAgICAgICAgICAgIHVzZWQgKz0gMVUgPDwgY3VycjsKLSAgICAgICAgICAgIGlmICgodHlwZSA9PSBMRU5TICYmIHVzZWQgPj0gRU5PVUdIX0xFTlMpIHx8Ci0gICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+PSBFTk9VR0hfRElTVFMpKQorICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPiBFTk9VR0hfRElTVFMpKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgICAgICAvKiBwb2ludCBlbnRyeSBpbiByb290IHRhYmxlIHRvIHN1Yi10YWJsZSAqLwpAQCAtMjg5LDM4ICsyODksMTQgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qCi0gICAgICAgRmlsbCBpbiByZXN0IG9mIHRhYmxlIGZvciBpbmNvbXBsZXRlIGNvZGVzLiAgVGhpcyBsb29wIGlzIHNpbWlsYXIgdG8gdGhlCi0gICAgICAgbG9vcCBhYm92ZSBpbiBpbmNyZW1lbnRpbmcgaHVmZiBmb3IgdGFibGUgaW5kaWNlcy4gIEl0IGlzIGFzc3VtZWQgdGhhdAotICAgICAgIGxlbiBpcyBlcXVhbCB0byBjdXJyICsgZHJvcCwgc28gdGhlcmUgaXMgbm8gbG9vcCBuZWVkZWQgdG8gaW5jcmVtZW50Ci0gICAgICAgdGhyb3VnaCBoaWdoIGluZGV4IGJpdHMuICBXaGVuIHRoZSBjdXJyZW50IHN1Yi10YWJsZSBpcyBmaWxsZWQsIHRoZSBsb29wCi0gICAgICAgZHJvcHMgYmFjayB0byB0aGUgcm9vdCB0YWJsZSB0byBmaWxsIGluIGFueSByZW1haW5pbmcgZW50cmllcyB0aGVyZS4KLSAgICAgKi8KLSAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KLSAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7Ci0gICAgaGVyZS52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKLSAgICB3aGlsZSAoaHVmZiAhPSAwKSB7Ci0gICAgICAgIC8qIHdoZW4gZG9uZSB3aXRoIHN1Yi10YWJsZSwgZHJvcCBiYWNrIHRvIHJvb3QgdGFibGUgKi8KLSAgICAgICAgaWYgKGRyb3AgIT0gMCAmJiAoaHVmZiAmIG1hc2spICE9IGxvdykgewotICAgICAgICAgICAgZHJvcCA9IDA7Ci0gICAgICAgICAgICBsZW4gPSByb290OwotICAgICAgICAgICAgbmV4dCA9ICp0YWJsZTsKLSAgICAgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIHB1dCBpbnZhbGlkIGNvZGUgbWFya2VyIGluIHRhYmxlICovCi0gICAgICAgIG5leHRbaHVmZiA+PiBkcm9wXSA9IGhlcmU7Ci0KLSAgICAgICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi8KLSAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSAxKTsKLSAgICAgICAgd2hpbGUgKGh1ZmYgJiBpbmNyKQotICAgICAgICAgICAgaW5jciA+Pj0gMTsKLSAgICAgICAgaWYgKGluY3IgIT0gMCkgewotICAgICAgICAgICAgaHVmZiAmPSBpbmNyIC0gMTsKLSAgICAgICAgICAgIGh1ZmYgKz0gaW5jcjsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBodWZmID0gMDsKKyAgICAvKiBmaWxsIGluIHJlbWFpbmluZyB0YWJsZSBlbnRyeSBpZiBjb2RlIGlzIGluY29tcGxldGUgKGd1YXJhbnRlZWQgdG8gaGF2ZQorICAgICAgIGF0IG1vc3Qgb25lIHJlbWFpbmluZyBlbnRyeSwgc2luY2UgaWYgdGhlIGNvZGUgaXMgaW5jb21wbGV0ZSwgdGhlCisgICAgICAgbWF4aW11bSBjb2RlIGxlbmd0aCB0aGF0IHdhcyBhbGxvd2VkIHRvIGdldCB0aGlzIGZhciBpcyBvbmUgYml0KSAqLworICAgIGlmIChodWZmICE9IDApIHsKKyAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KKyAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOworICAgICAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOworICAgICAgICBuZXh0W2h1ZmZdID0gaGVyZTsKICAgICB9CiAKICAgICAvKiBzZXQgcmV0dXJuIHBhcmFtZXRlcnMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKaW5kZXggMjQyMzBjNS4uYmFhNTNhMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKQEAgLTQxLDcgKzQxLDcgQEAKICAgIGV4YW1wbGVzL2Vub3VnaC5jIGZvdW5kIGluIHRoZSB6bGliIGRpc3RyaWJ0dXRpb24uICBUaGUgYXJndW1lbnRzIHRvIHRoYXQKICAgIHByb2dyYW0gYXJlIHRoZSBudW1iZXIgb2Ygc3ltYm9scywgdGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplLCBhbmQgdGhlCiAgICBtYXhpbXVtIGJpdCBsZW5ndGggb2YgYSBjb2RlLiAgImVub3VnaCAyODYgOSAxNSIgZm9yIGxpdGVyYWwvbGVuZ3RoIGNvZGVzCi0gICByZXR1cm5zIDg1MiwgYW5kICJlbm91Z2ggMzAgNiAxNSIgZm9yIGRpc3RhbmNlIGNvZGVzIHJldHVybnMgNTkyLgorICAgcmV0dXJucyByZXR1cm5zIDg1MiwgYW5kICJlbm91Z2ggMzAgNiAxNSIgZm9yIGRpc3RhbmNlIGNvZGVzIHJldHVybnMgNTkyLgogICAgVGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplICg5IG9yIDYpIGlzIGZvdW5kIGluIHRoZSBmaWZ0aCBhcmd1bWVudCBvZiB0aGUKICAgIGluZmxhdGVfdGFibGUoKSBjYWxscyBpbiBpbmZsYXRlLmMgYW5kIGluZmJhY2suYy4gIElmIHRoZSByb290IHRhYmxlIHNpemUgaXMKICAgIGNoYW5nZWQsIHRoZW4gdGhlc2UgbWF4aW11bSBzaXplcyB3b3VsZCBiZSBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCBhbmQKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20gYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCmluZGV4IDY1NzY0OTAuLjY1ZTlkMGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KKysrIGIvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQpAQCAtMyw3ICszLDcgQEAKICQhCiAkISBJbiBjYXNlIG9mIHByb2JsZW1zIHdpdGggdGhlIGluc3RhbGwgeW91IG1pZ2h0IGNvbnRhY3QgbWUgYXQKICQhIHppbnNlckB6aW5zZXIubm8taXAuaW5mbyhwcmVmZXJyZWQpIG9yCi0kISB6aW5zZXJAc3lzZGV2LmRldXRzY2hlLWJvZXJzZS5jb20gKHdvcmspCiskISBtYXJ0aW4uemluc2VyQGV1cmV4Y2hhbmdlLmNvbSAod29yaykKICQhCiAkISBNYWtlIHByb2NlZHVyZSBoaXN0b3J5IGZvciBabGliCiAkIQpAQCAtMTQsOSArMTQsMTYgQEAKICQhIDAuMDMgMjAwOTEyMjQgQWRkIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGUgY2hlY2sKICQhIDAuMDQgMjAxMDAxMTAgQWRkIG5ldyBnemNsb3NlLCBnemxpYiwgZ3pyZWFkLCBnendyaXRlCiAkISAwLjA1IDIwMTAwMjIxIEV4Y2hhbmdlIHpsaWJkZWZzLmggYnkgemNvbmYuaC5pbgorJCEgMC4wNiAyMDEyMDExMSBGaXggbWlzc2luZyBhbWlzc19lcnIsIHVwZGF0ZSB6Y29uZl9oLmluLCBmaXggbmV3IGV4bXBsZXMKKyQhICAgICAgICAgICAgICAgc3ViZGlyIHBhdGgsIHVwZGF0ZSBtb2R1bGUgc2VhcmNoIGluIG1ha2VmaWxlLmluCiskISAwLjA3IDIwMTIwMTE1IFRyaWdnZXJlZCBieSB3b3JrIGRvbmUgYnkgQWxleGV5IENodXBhaGluIGNvbXBsZXRseSByZWRlc2lnbmVkCiskISAgICAgICAgICAgICAgIHNoYXJlZCBpbWFnZSBjcmVhdGlvbgorJCEgMC4wOCAyMDEyMDIxOSBNYWtlIGl0IHdvcmsgb24gVkFYIGFnYWluLCBwcmUtbG9hZCBtaXNzaW5nIHN5bWJvbHMgdG8gc2hhcmVkCiskISAgICAgICAgICAgICAgIGltYWdlCiskISAwLjA5IDIwMTIwMzA1IFNNUy4gIFAxIHNldHMgYnVpbGRlciAoIk1NSyIsICJNTVMiLCAiICIgKGJ1aWx0LWluKSkuCiskISAgICAgICAgICAgICAgICIiIC0+IGF1dG9tYXRpYywgcHJlZmVyZW5jZTogTU1LLCBNTVMsIGJ1aWx0LWluLgogJCEKICQgb24gZXJyb3IgdGhlbiBnb3RvIGVycl9leGl0Ci0kIHNldCBwcm9jL3BhcnNlPWV4dAogJCEKICQgdHJ1ZSAgPSAxCiAkIGZhbHNlID0gMApAQCAtMzIsMzEgKzM5LDQzIEBACiAkIQogJCEgU2V0dXAgdmFyaWFibGVzIGhvbGRpbmcgImNvbmZpZyIgaW5mb3JtYXRpb24KICQhCi0kIE1ha2UgICAgPSAiIgorJCBNYWtlICAgID0gIicncDEnIgogJCBuYW1lICAgICA9ICJabGliIgogJCB2ZXJzaW9uICA9ICI/Lj8uPyIKICQgdl9zdHJpbmcgPSAiWkxJQl9WRVJTSU9OIgogJCB2X2ZpbGUgICA9ICJ6bGliLmgiCi0kIGNjb3B0ICAgPSAiIgorJCBjY29wdCAgID0gIi9pbmNsdWRlID0gW10iCiAkIGxvcHRzICAgPSAiIgogJCBkbnNybCAgID0gIiIKLSQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4iCiskIGFjb25mX2luX2ZpbGUgPSAiemNvbmYuaC5pbiN6Y29uZi5oX2luI3pjb25mX2guaW4iCiAkIGNvbmZfY2hlY2tfc3RyaW5nID0gIiIKICQgbGlua29ubHkgPSBmYWxzZQogJCBvcHRmaWxlICA9IG5hbWUgKyAiLm9wdCIKKyQgbWFwZmlsZSAgPSBuYW1lICsgIi5tYXAiCiAkIGxpYmRlZnMgID0gIiIKKyQgdmF4ICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5sdC4xMDI0CiAkIGF4cCAgICAgID0gZiRnZXRzeWkoIkhXX01PREVMIikuZ2UuMTAyNCAuYW5kLiBmJGdldHN5aSgiSFdfTU9ERUwiKS5sdC40MDk2CiskIGlhNjQgICAgID0gZiRnZXRzeWkoIkhXX01PREVMIikuZ2UuNDA5NgogJCEKLSQgd2hvYW1pID0gZiRwYXJzZShmJGVudmlvcm5tZW50KCJQcm9jZWR1cmUiKSwsLCwiTk9fQ09OQ0VBTCIpCiskISAyMDEyLTAzLTA1IFNNUy4KKyQhIFdoeSBpcyB0aGlzIG5lZWRlZD8gIEFuZCBpZiBpdCBpcyBuZWVkZWQsIHdoeSBub3Qgc2ltcGx5ICIubm90LiB2YXgiPworJCEKKyQhISEgaWYgYXhwIC5vci4gaWE2NCB0aGVuICBzZXQgcHJvYy9wYXJzZT1leHRlbmRlZAorJCEKKyQgd2hvYW1pID0gZiRwYXJzZShmJGVudmlyb25tZW50KCJQcm9jZWR1cmUiKSwsLCwiTk9fQ09OQ0VBTCIpCiAkIG15ZGVmICA9IEYkcGFyc2Uod2hvYW1pLCwsIkRFVklDRSIpCiAkIG15ZGlyICA9IGYkcGFyc2Uod2hvYW1pLCwsIkRJUkVDVE9SWSIpIC0gIl1bIgogJCBteXByb2MgPSBmJHBhcnNlKHdob2FtaSwsLCJOYW1lIikgKyBmJHBhcnNlKHdob2FtaSwsLCJ0eXBlIikKICQhCiAkISBDaGVjayBmb3IgTU1LL01NUwogJCEKLSQgSWYgRiRTZWFyY2ggKCJTeXMkU3lzdGVtOk1NUy5FWEUiKSAubmVzLiAiIiBUaGVuIE1ha2UgPSAiTU1TIgotJCBJZiBGJFR5cGUgKE1NSykgLmVxcy4gIlNUUklORyIgVGhlbiBNYWtlID0gIk1NSyIKLSQhCiskIGlmIChNYWtlIC5lcXMuICIiKQorJCB0aGVuCiskICAgSWYgRiRTZWFyY2ggKCJTeXMkU3lzdGVtOk1NUy5FWEUiKSAubmVzLiAiIiBUaGVuIE1ha2UgPSAiTU1TIgorJCAgIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgorJCBlbHNlCiskICAgTWFrZSA9IGYkZWRpdCggTWFrZSwgInRyaW0iKQorJCBlbmRpZgogJCEKICQgZ29zdWIgZmluZF92ZXJzaW9uCiAkIQpAQCAtNjksNiArODgsNyBAQAogJCEKICQgZ29zdWIgY2hlY2tfY29tcGlsZXIKICQgY2xvc2UgdG9wdAorJCBjbG9zZSBvcHRmCiAkIQogJCBpZiBpdHNfZGVjYwogJCB0aGVuCkBAIC04Myw2ICsxMDMsMTUgQEAKICQgICAgICAgZGVmaW5lIHN5cyBkZWNjJGxpYnJhcnlfaW5jbHVkZToKICQgICAgIGVuZGlmCiAkICAgZW5kaWYKKyQhCiskISAyMDEyLTAzLTA1IFNNUy4KKyQhIFdoeSAvTkFNRVMgPSBBU19JUz8gIFdoeSBub3Qgc2ltcGx5ICIubm90LiB2YXgiPyAgQW5kIHdoeSBub3Qgb24gVkFYPworJCEKKyQgICBpZiBheHAgLm9yLiBpYTY0CiskICAgdGhlbgorJCAgICAgICBjY29wdCA9IGNjb3B0ICsgIi9uYW1lPWFzX2lzL29wdD0oaW5saW5lPXNwZWVkKSIKKyQgICAgICAgc19jYXNlID0gdHJ1ZQorJCAgIGVuZGlmCiAkIGVuZGlmCiAkIGlmIGl0c192YXhjIC5vci4gaXRzX2dudWMKICQgdGhlbgpAQCAtMTIyLDE1ICsxNTEsMjAgQEAKICQgZW5kaWYKICQgZ290byBhY29uZl9sb29wCiAkQUNPTkZfRVhJVDoKKyQgd3JpdGUgYWNvbmYgIiIKKyQgd3JpdGUgYWNvbmYgIi8qIFZNUyBzcGVjaWZpY3MgYWRkZWQgYnkgbWFrZV92bXMuY29tOiAqLyIKICQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgVk1TIDEiCiAkIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5pc3RkLmg+IgogJCB3cml0ZSBhY29uZiAiI2luY2x1ZGUgPHVuaXhpby5oPiIKICQgd3JpdGUgYWNvbmYgIiNpZmRlZiBfTEFSR0VGSUxFIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBvZmY2NF90IF9fb2ZmNjRfdCIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgZm9wZW42NCBmb3BlbiIKLSQgd3JpdGUgYWNvbmYgIiNkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBsc2VlazY0IGxzZWVrIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmdGVsbG82NCBmdGVsbCIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZm9wZW42NCBmb3BlbiIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZzZWVrbzY0IGZzZWVrbyIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGxzZWVrNjQgbHNlZWsiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmdGVsbG82NCBmdGVsbCIKKyQgd3JpdGUgYWNvbmYgIiNlbmRpZiIKKyQgd3JpdGUgYWNvbmYgIiNpZiAhZGVmaW5lZCggX19WQVgpICYmIChfX0NSVExfVkVSID49IDcwMzEyMDAwKSIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIEhBVkVfVlNOUFJJTlRGIgogJCB3cml0ZSBhY29uZiAiI2VuZGlmIgogJCBjbG9zZSBhY29uZl9pbgogJCBjbG9zZSBhY29uZgpAQCAtMTM5LDggKzE3Myw5IEBACiAkIQogJCB3cml0ZSBzeXMkb3V0cHV0ICJDb21waWxpbmcgWmxpYiBzb3VyY2VzIC4uLiIKICQgaWYgbWFrZS5lcXMuIiIKLSQgIHRoZW4KLSQgICBkZWxlIGV4YW1wbGUub2JqOyosbWluaWd6aXAub2JqOyoKKyQgdGhlbgorJCAgIGlmIChmJHNlYXJjaCggImV4YW1wbGUub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgZXhhbXBsZS5vYmo7KgorJCAgIGlmIChmJHNlYXJjaCggIm1pbmlnemlwLm9iajsqIikgLm5lcy4gIiIpIHRoZW4gZGVsZXRlIG1pbmlnemlwLm9iajsqCiAkICAgQ0FMTCBNQUtFIGFkbGVyMzIuT0JKICJDQyAnJ0NDT1BUJyBhZGxlcjMyIiAtCiAgICAgICAgICAgICAgICAgYWRsZXIzMi5jIHpsaWIuaCB6Y29uZi5oCiAkICAgQ0FMTCBNQUtFIGNvbXByZXNzLk9CSiAiQ0MgJydDQ09QVCcgY29tcHJlc3MiIC0KQEAgLTE3NCw0MSArMjA5LDM0IEBACiAkICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgWmxpYiAuLi4iCiAkICAgQ0FMTCBNQUtFIGxpYnouT0xCICJsaWIvY3JlYSBsaWJ6Lm9sYiAqLm9iaiIgKi5PQkoKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBleGFtcGxlLi4uIgotJCAgIENBTEwgTUFLRSBleGFtcGxlLk9CSiAiQ0MgJydDQ09QVCcgZXhhbXBsZSIgLQotICAgICAgICAgICAgICAgIGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAorJCAgIENBTEwgTUFLRSBleGFtcGxlLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XWV4YW1wbGUiIC0KKyAgICAgICAgICAgICAgICBbLnRlc3RdZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiAkICAgY2FsbCBtYWtlIGV4YW1wbGUuZXhlICJMSU5LIGV4YW1wbGUsbGliei5vbGIvbGliIiBleGFtcGxlLm9iaiBsaWJ6Lm9sYgotJCAgIGlmIGYkc2VhcmNoKCJ4MTF2bXM6eHZtc3V0aWxzLm9sYiIpIC5uZXMuICIiCi0kICAgdGhlbgotJCAgICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCi0kICAgICBDQUxMIE1BS0UgbWluaWd6aXAuT0JKICJDQyAnJ0NDT1BUJyBtaW5pZ3ppcCIgLQotICAgICAgICAgICAgICAgIG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLSQgICAgIGNhbGwgbWFrZSBtaW5pZ3ppcC5leGUgLQotICAgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYix4MTF2bXM6eHZtc3V0aWxzLm9sYi9saWIiIC0KLSAgICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKLSQgICBlbmRpZgotJCAgZWxzZQorJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIG1pbmlnemlwLi4uIgorJCAgIENBTEwgTUFLRSBtaW5pZ3ppcC5PQkogIkNDICcnQ0NPUFQnIFsudGVzdF1taW5pZ3ppcCIgLQorICAgICAgICAgICAgICBbLnRlc3RdbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorJCAgIGNhbGwgbWFrZSBtaW5pZ3ppcC5leGUgLQorICAgICAgICAgICAgICAiTElOSyBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIiIC0KKyAgICAgICAgICAgICAgbWluaWd6aXAub2JqIGxpYnoub2xiCiskIGVsc2UKICQgICBnb3N1YiBjcmVhX21tcwogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIk1ha2UgJyduYW1lJyAnJ3ZlcnNpb24nIHdpdGggJydNYWtlJyAiCiAkICAgJ21ha2UnCi0kICBlbmRpZgotJCEKLSQhIEFscGhhIGdldHMgYSBzaGFyZWFibGUgaW1hZ2UKLSQhCi0kIElmIGF4cAotJCBUaGVuCi0kICAgZ29zdWIgY3JlYV9vbGlzdAotJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkNyZWF0aW5nIGxpYnpzaHIuZXhlIgotJCAgIGNhbGwgYW5hbF9vYmpfYXhwIG1vZHVsZXMub3B0IF9saW5rLm9wdAotJCAgIGlmIHNfY2FzZQotJCAgIHRoZW4KLSQgICAgICBvcGVuL2FwcGVuZCBvcHRmIG1vZHVsZXMub3B0Ci0kICAgICAgd3JpdGUgb3B0ZiAiY2FzZV9zZW5zaXRpdmU9WUVTIgotJCAgICAgIGNsb3NlIG9wdGYKLSQgICBlbmRpZgotJCAgIExJTktfJ2xvcHRzJy9TSEFSRT1saWJ6c2hyLmV4ZSBtb2R1bGVzLm9wdC9vcHQsX2xpbmsub3B0L29wdAogJCBlbmRpZgorJCEKKyQhIENyZWF0ZSBzaGFyZWFibGUgaW1hZ2UKKyQhCiskIGdvc3ViIGNyZWFfb2xpc3QKKyQgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgbGlienNoci5leGUiCiskIGNhbGwgbWFwXzJfc2hvcHQgJ21hcGZpbGUnICdvcHRmaWxlJworJCBMSU5LXydsb3B0cycvU0hBUkU9bGlienNoci5leGUgbW9kdWxlcy5vcHQvb3B0LCdvcHRmaWxlJy9vcHQKICQgd3JpdGUgc3lzJG91dHB1dCAiWmxpYiBidWlsZCBjb21wbGV0ZWQiCiskIGRlbGV0ZS9ub2xvZyB0bXAub3B0OyoKICQgZXhpdAorJEFNSVNTX0VSUjoKKyQgd3JpdGUgc3lzJG91dHB1dCAiTm8gc291cmNlIGZvciBjb25maWcuaGluIGZvdW5kLiIKKyQgd3JpdGUgc3lzJG91dHB1dCAiVHJpZWQgYW55IG9mICcnYWNvbmZfaW5fZmlsZSciCiskIGdvdG8gZXJyX2V4aXQKICRDQ19FUlI6CiAkIHdyaXRlIHN5cyRvdXRwdXQgIkMgY29tcGlsZXIgcmVxdWlyZWQgdG8gYnVpbGQgJyduYW1lJyIKICQgZ290byBlcnJfZXhpdApAQCAtMjE2LDcgKzI0NCw2IEBACiAkIHNldCBtZXNzYWdlL2ZhY2lsL2lkZW50L3NldmVyL3RleHQKICQgY2xvc2Uvbm9sb2cgb3B0ZgogJCBjbG9zZS9ub2xvZyB0b3B0Ci0kIGNsb3NlL25vbG9nIGNvbmZfaGluCiAkIGNsb3NlL25vbG9nIGFjb25mX2luCiAkIGNsb3NlL25vbG9nIGFjb25mCiAkIGNsb3NlL25vbG9nIG91dApAQCAtMzk3LDcgKzQyNCw3IEBACiAkIGRlY2sKICMgZGVzY3JpcC5tbXM6IE1NUyBkZXNjcmlwdGlvbiBmaWxlIGZvciBidWlsZGluZyB6bGliIG9uIFZNUwogIyB3cml0dGVuIGJ5IE1hcnRpbiBQLkouIFppbnNlcgotIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbT4KKyMgPHppbnNlckB6aW5zZXIubm8taXAuaW5mbyBvciBtYXJ0aW4uemluc2VyQGV1cmV4Y2hhbmdlLmNvbT4KIAogT0JKUyA9IGFkbGVyMzIub2JqLCBjb21wcmVzcy5vYmosIGNyYzMyLm9iaiwgZ3pjbG9zZS5vYmosIGd6bGliLm9ialwKICAgICAgICBnenJlYWQub2JqLCBnendyaXRlLm9iaiwgdW5jb21wci5vYmosIGluZmJhY2sub2JqXApAQCAtNDA3LDEwICs0MzQsOSBAQAogJCBlb2QKICQgd3JpdGUgb3V0ICJDRkxBR1M9IiwgY2NvcHQKICQgd3JpdGUgb3V0ICJMT1BUUz0iLCBsb3B0cworJCB3cml0ZSBvdXQgImFsbCA6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZSBsaWJ6Lm9sYiIKICQgY29weSBzeXMkaW5wdXQ6IG91dAogJCBkZWNrCi0KLWFsbCA6IGV4YW1wbGUuZXhlIG1pbmlnemlwLmV4ZSBsaWJ6Lm9sYgogICAgICAgICBAIHdyaXRlIHN5cyRvdXRwdXQgIiBFeGFtcGxlIGFwcGxpY2F0aW9ucyBhdmFpbGFibGUiCiAKIGxpYnoub2xiIDogbGliei5vbGIoJChPQkpTKSkKQEAgLTQyMCw3ICs0NDYsNyBAQAogICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIGV4YW1wbGUsbGliei5vbGIvbGliCiAKIG1pbmlnemlwLmV4ZSA6IG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgotICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIG1pbmlnemlwLGxpYnoub2xiL2xpYix4MTF2bXM6eHZtc3V0aWxzLm9sYi9saWIKKyAgICAgICAgICAgICAgbGluayAkKExPUFRTKSBtaW5pZ3ppcCxsaWJ6Lm9sYi9saWIKIAogY2xlYW4gOgogCWRlbGV0ZSAqLm9iajsqLGxpYnoub2xiOyosKi5vcHQ7KiwqLmV4ZTsqCkBAIC00MzEsNyArNDU3LDcgQEAKIGNvbXByZXNzLm9iaiA6IGNvbXByZXNzLmMgemxpYi5oIHpjb25mLmgKIGNyYzMyLm9iaiAgICA6IGNyYzMyLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZGVmbGF0ZS5vYmogIDogZGVmbGF0ZS5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCi1leGFtcGxlLm9iaiAgOiBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKK2V4YW1wbGUub2JqICA6IFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKIGd6Y2xvc2Uub2JqICA6IGd6Y2xvc2UuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBnemxpYi5vYmogICAgOiBnemxpYi5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGd6cmVhZC5vYmogICA6IGd6cmVhZC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKQEAgLTQzOSw3ICs0NjUsNyBAQAogaW5mZmFzdC5vYmogIDogaW5mZmFzdC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZmYXN0LmgKIGluZmxhdGUub2JqICA6IGluZmxhdGUuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBpbmZ0cmVlcy5vYmogOiBpbmZ0cmVlcy5jIHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAotbWluaWd6aXAub2JqIDogbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAorbWluaWd6aXAub2JqIDogWy50ZXN0XW1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKIHRyZWVzLm9iaiAgICA6IHRyZWVzLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIHVuY29tcHIub2JqICA6IHVuY29tcHIuYyB6bGliLmggemNvbmYuaAogenV0aWwub2JqICAgIDogenV0aWwuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCkBAIC00NTUsMTMgKzQ4MSwxOCBAQAogJENSRUFfT0xJU1Q6CiAkIG9wZW4vcmVhZCBtaW4gbWFrZWZpbGUuaW4KICQgb3Blbi93cml0ZSBtb2QgbW9kdWxlcy5vcHQKLSQgc3JjX2NoZWNrID0gIk9CSkMgPSIKKyQgc3JjX2NoZWNrX2xpc3QgPSAiT0JKWiA9I09CSkcgPSIKICRNUkxPT1A6CiAkIHJlYWQvZW5kPW1yZG9uZSBtaW4gcmVjCi0kIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gbXJsb29wCiskIGkgPSAwCiskU1JDX0NIRUNLX0xPT1A6CiskIHNyY19jaGVjayA9IGYkZWxlbWVudChpLCAiIyIsIHNyY19jaGVja19saXN0KQorJCBpID0gaSsxCiskIGlmIHNyY19jaGVjayAuZXFzLiAiIyIgdGhlbiBnb3RvIG1ybG9vcAorJCBpZiAoZiRleHRyYWN0KDAsNixyZWMpIC5uZXMuIHNyY19jaGVjaykgdGhlbiBnb3RvIHNyY19jaGVja19sb29wCiAkIHJlYyA9IHJlYyAtIHNyY19jaGVjawogJCBnb3N1YiBleHRyYV9maWxuYW0KLSQgaWYgKGYkZWxlbWVudCgxLCJcIixyZWMpIC5lcXMuICJcIikgdGhlbiBnb3RvIG1yZG9uZQorJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJsb29wCiAkTVJTTE9PUDoKICQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKICQgZ29zdWIgZXh0cmFfZmlsbmFtCkBAIC02NzIsMTI0ICs3MDMsNiBAQAogJCByZXR1cm4KICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAkIQotJCEgQW5hbHl6ZSBPYmplY3QgZmlsZXMgZm9yIE9wZW5WTVMgQVhQIHRvIGV4dHJhY3QgUHJvY2VkdXJlIGFuZCBEYXRhCi0kISBpbmZvcm1hdGlvbiB0byBidWlsZCBhIHN5bWJvbCB2ZWN0b3IgZm9yIGEgc2hhcmVhYmxlIGltYWdlCi0kISBBbGwgdGhlICJicmFpbnMiIG9mIHRoaXMgbG9naWMgd2FzIHN1Z2dlc3RlZCBieSBIYXJ0bXV0IEJlY2tlcgotJCEgKEhhcnRtdXQuQmVja2VyQGNvbXBhcS5jb20pLiBBbGwgdGhlIGJ1Z3Mgd2VyZSBpbnRyb2R1Y2VkIGJ5IG1lCi0kISAoemluc2VyQHppbnNlci5uby1pcC5pbmZvKSwgc28gaWYgeW91IGRvIGhhdmUgcHJvYmxlbSByZXBvcnRzIHBsZWFzZSBkbyBub3QKLSQhIGJvdGhlciBIYXJ0bXV0L0hQLCBidXQgZ2V0IGluIHRvdWNoIHdpdGggbWUKLSQhCi0kISBWZXJzaW9uIGhpc3RvcnkKLSQhIDAuMDEgMjAwNDA0MDYgU2tpcCBvdmVyIHNoYXJlYWJsZSBpbWFnZXMgaW4gb3B0aW9uIGZpbGUKLSQhIDAuMDIgMjAwNDExMDkgRml4IG9wdGlvbiBmaWxlIGZvciBzaGFyZWFibGUgaW1hZ2VzIHdpdGggY2FzZV9zZW5zaXRpdmU9WUVTCi0kISAwLjAzIDIwMDUwMTA3IFNraXAgb3ZlciBJZGVudGlmaWNhdGlvbiBsYWJlbHMgaW4gb3B0aW9uIGZpbGUKLSQhIDAuMDQgMjAwNjAxMTcgQWRkIHVwcGVyY2FzZSBhbGlhcyB0byBjb2RlIGNvbXBpbGVkIHdpdGggL25hbWU9YXNfaXMKLSQhCi0kIEFOQUxfT0JKX0FYUDogU3Vicm91dGluZQotJCBWID0gJ0YkVmVyaWZ5KDApCi0kIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCi0kCi0kIElGIEYkU0VBUkNIKCInJ1AxJyIpIC5FUVMuICIiCi0kIFRIRU4KLSQgICAgU0FZICJBTkFMX09CSl9BWFAtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgotJCAgICBnb3RvIGV4aXRfYWEKLSQgRU5ESUYKLSQgSUYgIicnUDInIiAuRVFTLiAiIgotJCBUSEVOCi0kICAgIFNBWSAiQU5BTF9PQkpfQVhQOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgotJCAgICBnb3RvIGV4aXRfYWEKLSQgRU5ESUYKLSQKLSQgb3Blbi9yZWFkIGluICdwMQotJCBjcmVhdGUgYS50bXAKLSQgb3Blbi9hcHBlbmQgYXRtcCBhLnRtcAotJCBsb29wOgotJCByZWFkL2VuZD1lbmRfbG9vcCBpbiBsaW5lCi0kIGlmIGYkbG9jYXRlKCIvU0hBUkUiLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQotJCB0aGVuCi0kICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9TS1BfU0hSLWktc2tpcHNoYXJlLCAnJ2xpbmUnIgotJCAgIGdvdG8gbG9vcAotJCBlbmRpZgotJCBpZiBmJGxvY2F0ZSgiSURFTlRJRklDQVRJT049IixmJGVkaXQobGluZSwidXBjYXNlIikpIC5sdC4gZiRsZW5ndGgobGluZSkKLSQgdGhlbgotJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfT0JKX0FYUC1pLWlkZW50OiBJZGVudGlmaWNhdGlvbiAiLCAtCi0gICAgICAgICAgICAgICAgICAgICBmJGVsZW1lbnQoMSwiPSIsbGluZSkKLSQgICBnb3RvIGxvb3AKLSQgZW5kaWYKLSQgZj0gZiRzZWFyY2gobGluZSkKLSQgaWYgZiAuZXFzLiAiIgotJCB0aGVuCi0kCXdyaXRlIHN5cyRvdXRwdXQgIkFOQUxfT0JKX0FYUC13LW5vc3VjaGZpbGUsICcnbGluZSciCi0kCWdvdG8gbG9vcAotJCBlbmRpZgotJCBkZWZpbmUvdXNlciBzeXMkb3V0cHV0IG5sOgotJCBkZWZpbmUvdXNlciBzeXMkZXJyb3Igbmw6Ci0kIGFuYWwvb2JqL2dzZCAnZiAvb3V0PXgudG1wCi0kIG9wZW4vcmVhZCB4dG1wIHgudG1wCi0kIFhMT09QOgotJCByZWFkL2VuZD1lbmRfeGxvb3AgeHRtcCB4bGluZQotJCB4bGluZSA9IGYkZWRpdCh4bGluZSwiY29tcHJlc3MiKQotJCB3cml0ZSBhdG1wIHhsaW5lCi0kIGdvdG8geGxvb3AKLSQgRU5EX1hMT09QOgotJCBjbG9zZSB4dG1wCi0kIGdvdG8gbG9vcAotJCBlbmRfbG9vcDoKLSQgY2xvc2UgaW4KLSQgY2xvc2UgYXRtcAotJCBpZiBmJHNlYXJjaCgiYS50bXAiKSAuZXFzLiAiIiAtCi0JdGhlbiAkIGV4aXQKLSQgISBhbGwgZ2xvYmFsIGRlZmluaXRpb25zCi0kIHNlYXJjaCBhLnRtcCAic3ltYm9sOiIsIkVHU1kkVl9ERUYgMSIsIkVHU1kkVl9OT1JNIDEiL291dD1iLnRtcAotJCAhIGFsbCBwcm9jZWR1cmVzCi0kIHNlYXJjaCBiLnRtcCAiRUdTWSRWX05PUk0gMSIvd2luZD0oMCwxKSAvb3V0PWMudG1wCi0kIHNlYXJjaCBjLnRtcCAic3ltYm9sOiIvb3V0PWQudG1wCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBkLnRtcAotc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKLXN1Yi8iLz1QUk9DRURVUkUpL3dob2xlCi1leGl0Ci0kICEgYWxsIGRhdGEKLSQgc2VhcmNoIGIudG1wICJFR1NZJFZfREVGIDEiL3dpbmQ9KDAsMSkgL291dD1lLnRtcAotJCBzZWFyY2ggZS50bXAgInN5bWJvbDoiL291dD1mLnRtcAotJCBkZWZpbmUvdXNlciBzeXMkb3V0cHV0IG5sOgotJCBlZGl0by9lZHQvY29tbWFuZD1zeXMkaW5wdXQgZi50bXAKLXN1Yi9zeW1ib2w6ICIvc3ltYm9sX3ZlY3Rvcj0oL3dob2xlCi1zdWIvIi89REFUQSkvd2hvbGUKLWV4aXQKLSQgc29ydC9ub2R1cGwgZC50bXAsZi50bXAgZy50bXAKLSQgb3Blbi9yZWFkIHJhd192ZWN0b3IgZy50bXAKLSQgb3Blbi93cml0ZSBjYXNlX3ZlY3RvciAncDInCi0kIFJBV0xPT1A6Ci0kIHJlYWQvZW5kPWVuZF9yYXdsb29wIHJhd192ZWN0b3IgcmF3X2VsZW1lbnQKLSQgd3JpdGUgY2FzZV92ZWN0b3IgcmF3X2VsZW1lbnQKLSQgaWYgZiRsb2NhdGUoIj1QUk9DRURVUkUpIixyYXdfZWxlbWVudCkgLmx0LiBmJGxlbmd0aChyYXdfZWxlbWVudCkKLSQgdGhlbgotJCAgICAgbmFtZSA9IGYkZWxlbWVudCgxLCI9IixyYXdfZWxlbWVudCkgLSAiKCIKLSQgICAgIGlmIGYkZWRpdChuYW1lLCJVUENBU0UiKSAubmVzLiBuYW1lIHRoZW4gLQotICAgICAgICAgIHdyaXRlIGNhc2VfdmVjdG9yIGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwgLQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQotJCBlbmRpZgotJCBpZiBmJGxvY2F0ZSgiPURBVEEpIixyYXdfZWxlbWVudCkgLmx0LiBmJGxlbmd0aChyYXdfZWxlbWVudCkKLSQgdGhlbgotJCAgICAgbmFtZSA9IGYkZWxlbWVudCgxLCI9IixyYXdfZWxlbWVudCkgLSAiKCIKLSQgICAgIGlmIGYkZWRpdChuYW1lLCJVUENBU0UiKSAubmVzLiBuYW1lIHRoZW4gLQotICAgICAgICAgIHdyaXRlIGNhc2VfdmVjdG9yIGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1EQVRBKSIsIC0KLQkgICAgICAgICAgICAgICAgICAgICAgICAgIGYkZWRpdChuYW1lLCJVUENBU0UiKSwgbmFtZSkKLSQgZW5kaWYKLSQgZ290byByYXdsb29wCi0kIEVORF9SQVdMT09QOgotJCBjbG9zZSByYXdfdmVjdG9yCi0kIGNsb3NlIGNhc2VfdmVjdG9yCi0kIGRlbGV0ZSBhLnRtcDsqLGIudG1wOyosYy50bXA7KixkLnRtcDsqLGUudG1wOyosZi50bXA7KixnLnRtcDsqCi0kIGlmIGYkc2VhcmNoKCJ4LnRtcCIpIC5uZXMuICIiIC0KLQl0aGVuICQgZGVsZXRlIHgudG1wOyoKLSQhCi0kIEVYSVRfQUE6Ci0kIGlmIFYgdGhlbiBzZXQgdmVyaWZ5Ci0kIGVuZHN1YnJvdXRpbmUKLSQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0kIQogJCEgV3JpdGUgY29uZmlndXJhdGlvbiB0byBib3RoIHBlcm1hbmVudCBhbmQgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlCiAkIQogJCEgVmVyc2lvbiBoaXN0b3J5CkBAIC04MDIsMyArNzE1LDE1MyBAQAogJCAgY2xvc2UgY29uZmgKICRFTkRTVUJST1VUSU5FCiAkIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEKKyQhIEFuYWx5emUgdGhlIHByb2plY3QgbWFwIGZpbGUgYW5kIGNyZWF0ZSB0aGUgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUKKyQhIGltYWdlIGZyb20gaXQKKyQhCiskISBWZXJzaW9uIGhpc3RvcnkKKyQhIDAuMDEgMjAxMjAxMjggRmlyc3QgdmVyc2lvbgorJCEgMC4wMiAyMDEyMDIyNiBBZGQgcHJlLWxvYWQgbG9naWMKKyQhCiskIE1BUF8yX1NIT1BUOiBTdWJyb3V0aW5lCiskIQorJCBTQVkgOj0gIldSSVRFXyBTWVMkT1VUUFVUIgorJCEKKyQgSUYgRiRTRUFSQ0goIicnUDEnIikgLkVRUy4gIiIKKyQgVEhFTgorJCAgICBTQVkgIk1BUF8yX1NIT1BULUUtTk9TVUNIRklMRTogIEVycm9yLCBpbnB1dGZpbGUgJydwMScgbm90IGF2YWlsYWJsZSIKKyQgICAgZ290byBleGl0X20ycworJCBFTkRJRgorJCBJRiAiJydQMiciIC5FUVMuICIiCiskIFRIRU4KKyQgICAgU0FZICJNQVBfMl9TSE9QVDogIEVycm9yLCBubyBvdXRwdXQgZmlsZSBwcm92aWRlZCIKKyQgICAgZ290byBleGl0X20ycworJCBFTkRJRgorJCEKKyQgbW9kdWxlMSA9ICJkZWZsYXRlI2RlZmxhdGVFbmQjZGVmbGF0ZUluaXRfI2RlZmxhdGVQYXJhbXMjZGVmbGF0ZVNldERpY3Rpb25hcnkiCiskIG1vZHVsZTIgPSAiZ3pjbG9zZSNnemVycm9yI2d6Z2V0YyNnemdldHMjZ3pvcGVuI2d6cHJpbnRmI2d6cHV0YyNnenB1dHMjZ3pyZWFkIgorJCBtb2R1bGUzID0gImd6c2VlayNnenRlbGwjaW5mbGF0ZSNpbmZsYXRlRW5kI2luZmxhdGVJbml0XyNpbmZsYXRlU2V0RGljdGlvbmFyeSIKKyQgbW9kdWxlNCA9ICJpbmZsYXRlU3luYyN1bmNvbXByZXNzI3psaWJWZXJzaW9uI2NvbXByZXNzIgorJCBvcGVuL3JlYWQgbWFwICdwMQorJCBpZiBheHAgLm9yLiBpYTY0CiskIHRoZW4KKyQgICAgIG9wZW4vd3JpdGUgYW9wdCBhLm9wdAorJCAgICAgb3Blbi93cml0ZSBib3B0IGIub3B0CiskICAgICB3cml0ZSBhb3B0ICIgQ0FTRV9TRU5TSVRJVkU9WUVTIgorJCAgICAgd3JpdGUgYm9wdCAiU1lNQk9MX1ZFQ1RPUj0gKC0iCiskICAgICBtb2Rfc3ltX251bSA9IDEKKyQgTU9EX1NZTV9MT09QOgorJCAgICAgaWYgZiR0eXBlKG1vZHVsZSdtb2Rfc3ltX251bScpIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgICAgbW9kX2luID0gMAorJCBNT0RfU1lNX0lOOgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlbGVtZW50KG1vZF9pbiwgIiMiLCBtb2R1bGUnbW9kX3N5bV9udW0nKQorJCAgICAgICAgIGlmIHNoYXJlZF9wcm9jIC5uZXMuICIjIgorJCAgICAgICAgIHRoZW4KKyQgICAgICAgICAgICAgd3JpdGUgYW9wdCBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9UFJPQ0VEVVJFKSIsLQorICAgICAgICAJCSAgICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpLHNoYXJlZF9wcm9jKQorJCAgICAgICAgICAgICB3cml0ZSBib3B0IGYkZmFvKCIhQVM9UFJPQ0VEVVJFLC0iLHNoYXJlZF9wcm9jKQorJCAgICAgICAgICAgICBtb2RfaW4gPSBtb2RfaW4gKyAxCiskICAgICAgICAgICAgIGdvdG8gbW9kX3N5bV9pbgorJCAgICAgICAgIGVuZGlmCiskICAgICAgICAgbW9kX3N5bV9udW0gPSBtb2Rfc3ltX251bSArIDEKKyQgICAgICAgICBnb3RvIG1vZF9zeW1fbG9vcAorJCAgICAgZW5kaWYKKyRNQVBfTE9PUDoKKyQgICAgIHJlYWQvZW5kPW1hcF9lbmQgbWFwIGxpbmUKKyQgICAgIGlmIChmJGxvY2F0ZSgieyIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpKSAub3IuIC0KKyAgICAgICAgIChmJGxvY2F0ZSgiZ2xvYmFsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkpCiskICAgICB0aGVuCiskICAgICAgICAgcHJvYyA9IHRydWUKKyQgICAgICAgICBnb3RvIG1hcF9sb29wCiskICAgICBlbmRpZgorJCAgICAgaWYgZiRsb2NhdGUoIn0iLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgaWYgZiRsb2NhdGUoImxvY2FsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIGlmIHByb2MKKyQgICAgIHRoZW4KKyQgICAgICAgICBzaGFyZWRfcHJvYyA9IGYkZWRpdChsaW5lLCJjb2xsYXBzZSIpCiskICAgICAgICAgY2hvcF9zZW1pID0gZiRsb2NhdGUoIjsiLCBzaGFyZWRfcHJvYykKKyQgICAgICAgICBpZiBjaG9wX3NlbWkgLmx0LiBmJGxlbmd0aChzaGFyZWRfcHJvYykgdGhlbiAtCisgICAgICAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRleHRyYWN0KDAsIGNob3Bfc2VtaSwgc2hhcmVkX3Byb2MpCiskICAgICAgICAgd3JpdGUgYW9wdCBmJGZhbygiIHN5bWJvbF92ZWN0b3I9KCFBUy8hQVM9UFJPQ0VEVVJFKSIsLQorICAgICAgICAJCQkgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSxzaGFyZWRfcHJvYykKKyQgICAgICAgICB3cml0ZSBib3B0IGYkZmFvKCIhQVM9UFJPQ0VEVVJFLC0iLHNoYXJlZF9wcm9jKQorJCAgICAgZW5kaWYKKyQgICAgIGdvdG8gbWFwX2xvb3AKKyRNQVBfRU5EOgorJCAgICAgY2xvc2Uvbm9sb2cgYW9wdAorJCAgICAgY2xvc2Uvbm9sb2cgYm9wdAorJCAgICAgb3Blbi9hcHBlbmQgbGlib3B0ICdwMicKKyQgICAgIG9wZW4vcmVhZCBhb3B0IGEub3B0CiskICAgICBvcGVuL3JlYWQgYm9wdCBiLm9wdAorJEFMT09QOgorJCAgICAgcmVhZC9lbmQ9YWxvb3BfZW5kIGFvcHQgbGluZQorJCAgICAgd3JpdGUgbGlib3B0IGxpbmUKKyQgICAgIGdvdG8gYWxvb3AKKyRBTE9PUF9FTkQ6CiskICAgICBjbG9zZS9ub2xvZyBhb3B0CiskICAgICBzdiA9ICIiCiskQkxPT1A6CiskICAgICByZWFkL2VuZD1ibG9vcF9lbmQgYm9wdCBzdm4KKyQgICAgIGlmIChzdm4ubmVzLiIiKQorJCAgICAgdGhlbgorJCAgICAgICAgaWYgKHN2Lm5lcy4iIikgdGhlbiB3cml0ZSBsaWJvcHQgc3YKKyQgICAgICAgIHN2ID0gc3ZuCiskICAgICBlbmRpZgorJCAgICAgZ290byBibG9vcAorJEJMT09QX0VORDoKKyQgICAgIHdyaXRlIGxpYm9wdCBmJGV4dHJhY3QoMCxmJGxlbmd0aChzdiktMixzdiksICItIgorJCAgICAgd3JpdGUgbGlib3B0ICIpIgorJCAgICAgY2xvc2Uvbm9sb2cgYm9wdAorJCAgICAgZGVsZXRlL25vbG9nL25vY29uZiBhLm9wdDsqLGIub3B0OyoKKyQgZWxzZQorJCAgICAgaWYgdmF4CiskICAgICB0aGVuCiskICAgICBvcGVuL2FwcGVuZCBsaWJvcHQgJ3AyJworJCAgICAgbW9kX3N5bV9udW0gPSAxCiskIFZNT0RfU1lNX0xPT1A6CiskICAgICBpZiBmJHR5cGUobW9kdWxlJ21vZF9zeW1fbnVtJykgLm5lcy4gIiIKKyQgICAgIHRoZW4KKyQgICAgICAgICBtb2RfaW4gPSAwCiskIFZNT0RfU1lNX0lOOgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlbGVtZW50KG1vZF9pbiwgIiMiLCBtb2R1bGUnbW9kX3N5bV9udW0nKQorJCAgICAgICAgIGlmIHNoYXJlZF9wcm9jIC5uZXMuICIjIgorJCAgICAgICAgIHRoZW4KKyQgICAgIAkgICAgICB3cml0ZSBsaWJvcHQgZiRmYW8oIlVOSVZFUlNBTD0hQVMiLC0KKyAgICAgIAkgIAkJCSAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSkKKyQgICAgICAgICAgICAgbW9kX2luID0gbW9kX2luICsgMQorJCAgICAgICAgICAgICBnb3RvIHZtb2Rfc3ltX2luCiskICAgICAgICAgZW5kaWYKKyQgICAgICAgICBtb2Rfc3ltX251bSA9IG1vZF9zeW1fbnVtICsgMQorJCAgICAgICAgIGdvdG8gdm1vZF9zeW1fbG9vcAorJCAgICAgZW5kaWYKKyRWTUFQX0xPT1A6CiskICAgICAJICByZWFkL2VuZD12bWFwX2VuZCBtYXAgbGluZQorJCAgICAgCSAgaWYgKGYkbG9jYXRlKCJ7IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkpIC5vci4gLQorICAgCSAgICAgIChmJGxvY2F0ZSgiZ2xvYmFsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkpCiskICAgICAJICB0aGVuCiskICAgICAJICAgICAgcHJvYyA9IHRydWUKKyQgICAgIAkgICAgICBnb3RvIHZtYXBfbG9vcAorJCAgICAgCSAgZW5kaWYKKyQgICAgIAkgIGlmIGYkbG9jYXRlKCJ9IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIAkgIGlmIGYkbG9jYXRlKCJsb2NhbDoiLCBsaW5lKSAubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICAJICBpZiBwcm9jCiskICAgICAJICB0aGVuCiskICAgICAJICAgICAgc2hhcmVkX3Byb2MgPSBmJGVkaXQobGluZSwiY29sbGFwc2UiKQorJCAgICAgCSAgICAgIGNob3Bfc2VtaSA9IGYkbG9jYXRlKCI7Iiwgc2hhcmVkX3Byb2MpCiskICAgICAJICAgICAgaWYgY2hvcF9zZW1pIC5sdC4gZiRsZW5ndGgoc2hhcmVkX3Byb2MpIHRoZW4gLQorICAgICAgCSAgCSAgc2hhcmVkX3Byb2MgPSBmJGV4dHJhY3QoMCwgY2hvcF9zZW1pLCBzaGFyZWRfcHJvYykKKyQgICAgIAkgICAgICB3cml0ZSBsaWJvcHQgZiRmYW8oIlVOSVZFUlNBTD0hQVMiLC0KKyAgICAgIAkgIAkJCSAgICAgZiRlZGl0KHNoYXJlZF9wcm9jLCJ1cGNhc2UiKSkKKyQgICAgIAkgIGVuZGlmCiskICAgICAJICBnb3RvIHZtYXBfbG9vcAorJFZNQVBfRU5EOgorJCAgICAgZWxzZQorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVua25vd24gQXJjaGl0ZWN0dXJlIChOb3QgVkFYLCBBWFAsIG9yIElBNjQpIgorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIk5vIG9wdGlvbnMgZmlsZSBjcmVhdGVkIgorJCAgICAgZW5kaWYKKyQgZW5kaWYKKyQgRVhJVF9NMlM6CiskIGNsb3NlL25vbG9nIG1hcAorJCBjbG9zZS9ub2xvZyBsaWJvcHQKKyQgZW5kc3Vicm91dGluZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21pbmlnemlwLmMgYi9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYwppbmRleCA5ODI1Y2NjLi5iMzAyNWE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYworKysgYi9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIG1pbmlnemlwLmMgLS0gc2ltdWxhdGUgZ3ppcCB1c2luZyB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDYsIDIwMTAsIDIwMTEgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC00MCw2ICs0MCwxMCBAQAogIyAgZGVmaW5lIFNFVF9CSU5BUllfTU9ERShmaWxlKQogI2VuZGlmCiAKKyNpZmRlZiBfTVNDX1ZFUgorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKICNpZmRlZiBWTVMKICMgIGRlZmluZSB1bmxpbmsgZGVsZXRlCiAjICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCkBAIC0xMzgsNiArMTQyLDE5NyBAQAogIyAgZGVmaW5lIGxvY2FsCiAjZW5kaWYKIAorI2lmZGVmIFpfU09MTworLyogZm9yIFpfU09MTywgY3JlYXRlIHNpbXBsaWZpZWQgZ3oqIGZ1bmN0aW9ucyB1c2luZyBkZWZsYXRlIGFuZCBpbmZsYXRlICovCisKKyNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChaX0xBUkdFKQorIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciB1bmxpbmsoKSAqLworI2VuZGlmCisKK3ZvaWQgKm15YWxsb2MgT0YoKHZvaWQgKiwgdW5zaWduZWQsIHVuc2lnbmVkKSk7Cit2b2lkIG15ZnJlZSBPRigodm9pZCAqLCB2b2lkICopKTsKKwordm9pZCAqbXlhbGxvYyhxLCBuLCBtKQorICAgIHZvaWQgKnE7CisgICAgdW5zaWduZWQgbiwgbTsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIHJldHVybiBjYWxsb2MobiwgbSk7Cit9CisKK3ZvaWQgbXlmcmVlKHEsIHApCisgICAgdm9pZCAqcSwgKnA7Cit7CisgICAgcSA9IFpfTlVMTDsKKyAgICBmcmVlKHApOworfQorCit0eXBlZGVmIHN0cnVjdCBnekZpbGVfcyB7CisgICAgRklMRSAqZmlsZTsKKyAgICBpbnQgd3JpdGU7CisgICAgaW50IGVycjsKKyAgICBjaGFyICptc2c7CisgICAgel9zdHJlYW0gc3RybTsKK30gKmd6RmlsZTsKKworZ3pGaWxlIGd6b3BlbiBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKK2d6RmlsZSBnemRvcGVuIE9GKChpbnQsIGNvbnN0IGNoYXIgKikpOworZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICopKTsKKworZ3pGaWxlIGd6b3BlbihwYXRoLCBtb2RlKQorY29uc3QgY2hhciAqcGF0aDsKK2NvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTEsIG1vZGUpOworfQorCitnekZpbGUgZ3pkb3BlbihmZCwgbW9kZSkKK2ludCBmZDsKK2NvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4oTlVMTCwgZmQsIG1vZGUpOworfQorCitnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGludCBmZDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIGd6RmlsZSBnejsKKyAgICBpbnQgcmV0OworCisgICAgZ3ogPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBnekZpbGVfcykpOworICAgIGlmIChneiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBnei0+d3JpdGUgPSBzdHJjaHIobW9kZSwgJ3cnKSAhPSBOVUxMOworICAgIGd6LT5zdHJtLnphbGxvYyA9IG15YWxsb2M7CisgICAgZ3otPnN0cm0uemZyZWUgPSBteWZyZWU7CisgICAgZ3otPnN0cm0ub3BhcXVlID0gWl9OVUxMOworICAgIGlmIChnei0+d3JpdGUpCisgICAgICAgIHJldCA9IGRlZmxhdGVJbml0MigmKGd6LT5zdHJtKSwgLTEsIDgsIDE1ICsgMTYsIDgsIDApOworICAgIGVsc2UgeworICAgICAgICBnei0+c3RybS5uZXh0X2luID0gMDsKKyAgICAgICAgZ3otPnN0cm0uYXZhaWxfaW4gPSBaX05VTEw7CisgICAgICAgIHJldCA9IGluZmxhdGVJbml0MigmKGd6LT5zdHJtKSwgMTUgKyAxNik7CisgICAgfQorICAgIGlmIChyZXQgIT0gWl9PSykgeworICAgICAgICBmcmVlKGd6KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGd6LT5maWxlID0gcGF0aCA9PSBOVUxMID8gZmRvcGVuKGZkLCBnei0+d3JpdGUgPyAid2IiIDogInJiIikgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9wZW4ocGF0aCwgZ3otPndyaXRlID8gIndiIiA6ICJyYiIpOworICAgIGlmIChnei0+ZmlsZSA9PSBOVUxMKSB7CisgICAgICAgIGd6LT53cml0ZSA/IGRlZmxhdGVFbmQoJihnei0+c3RybSkpIDogaW5mbGF0ZUVuZCgmKGd6LT5zdHJtKSk7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZ3otPmVyciA9IDA7CisgICAgZ3otPm1zZyA9ICIiOworICAgIHJldHVybiBnejsKK30KKworaW50IGd6d3JpdGUgT0YoKGd6RmlsZSwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCkpOworCitpbnQgZ3p3cml0ZShneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIGNvbnN0IHZvaWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgel9zdHJlYW0gKnN0cm07CisgICAgdW5zaWduZWQgY2hhciBvdXRbQlVGTEVOXTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8ICFnei0+d3JpdGUpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBzdHJtLT5uZXh0X2luID0gKHZvaWQgKilidWY7CisgICAgc3RybS0+YXZhaWxfaW4gPSBsZW47CisgICAgZG8geworICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91dDsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQlVGTEVOOworICAgICAgICAodm9pZClkZWZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOworICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5maWxlKTsKKyAgICB9IHdoaWxlIChzdHJtLT5hdmFpbF9vdXQgPT0gMCk7CisgICAgcmV0dXJuIGxlbjsKK30KKworaW50IGd6cmVhZCBPRigoZ3pGaWxlLCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2ludCBnenJlYWQoZ3osIGJ1ZiwgbGVuKQorICAgIGd6RmlsZSBnejsKKyAgICB2b2lkICpidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgZ290OworICAgIHVuc2lnbmVkIGNoYXIgaW5bMV07CisgICAgel9zdHJlYW0gKnN0cm07CisKKyAgICBpZiAoZ3ogPT0gTlVMTCB8fCBnei0+d3JpdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChnei0+ZXJyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgc3RybS0+bmV4dF9vdXQgPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9vdXQgPSBsZW47CisgICAgZG8geworICAgICAgICBnb3QgPSBmcmVhZChpbiwgMSwgMSwgZ3otPmZpbGUpOworICAgICAgICBpZiAoZ290ID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IGluOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDE7CisgICAgICAgIHJldCA9IGluZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7CisgICAgICAgICAgICBnei0+ZXJyID0gWl9EQVRBX0VSUk9SOworICAgICAgICAgICAgZ3otPm1zZyA9IHN0cm0tPm1zZzsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKQorICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOworICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCk7CisgICAgcmV0dXJuIGxlbiAtIHN0cm0tPmF2YWlsX291dDsKK30KKworaW50IGd6Y2xvc2UgT0YoKGd6RmlsZSkpOworCitpbnQgZ3pjbG9zZShneikKKyAgICBnekZpbGUgZ3o7Cit7CisgICAgel9zdHJlYW0gKnN0cm07CisgICAgdW5zaWduZWQgY2hhciBvdXRbQlVGTEVOXTsKKworICAgIGlmIChneiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIGlmIChnei0+d3JpdGUpIHsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IG91dDsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IEJVRkxFTjsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGUoc3RybSwgWl9GSU5JU0gpOworICAgICAgICAgICAgZndyaXRlKG91dCwgMSwgQlVGTEVOIC0gc3RybS0+YXZhaWxfb3V0LCBnei0+ZmlsZSk7CisgICAgICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICAgICAgZGVmbGF0ZUVuZChzdHJtKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBpbmZsYXRlRW5kKHN0cm0pOworICAgIGZjbG9zZShnei0+ZmlsZSk7CisgICAgZnJlZShneik7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKK2NvbnN0IGNoYXIgKmd6ZXJyb3IgT0YoKGd6RmlsZSwgaW50ICopKTsKKworY29uc3QgY2hhciAqZ3plcnJvcihneiwgZXJyKQorICAgIGd6RmlsZSBnejsKKyAgICBpbnQgKmVycjsKK3sKKyAgICAqZXJyID0gZ3otPmVycjsKKyAgICByZXR1cm4gZ3otPm1zZzsKK30KKworI2VuZGlmCisKIGNoYXIgKnByb2c7CiAKIHZvaWQgZXJyb3IgICAgICAgICAgICBPRigoY29uc3QgY2hhciAqbXNnKSk7CkBAIC0yNzIsOCArNDY3LDEyIEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihvdXRmaWxlLCBzaXplb2Yob3V0ZmlsZSksICIlcyVzIiwgZmlsZSwgR1pfU1VGRklYKTsKKyNlbHNlCiAgICAgc3RyY3B5KG91dGZpbGUsIGZpbGUpOwogICAgIHN0cmNhdChvdXRmaWxlLCBHWl9TVUZGSVgpOworI2VuZGlmCiAKICAgICBpbiA9IGZvcGVuKGZpbGUsICJyYiIpOwogICAgIGlmIChpbiA9PSBOVUxMKSB7CkBAIC0zMDgsNyArNTA3LDExIEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCBmaWxlKTsKKyNlbHNlCiAgICAgc3RyY3B5KGJ1ZiwgZmlsZSk7CisjZW5kaWYKIAogICAgIGlmIChsZW4gPiBTVUZGSVhfTEVOICYmIHN0cmNtcChmaWxlK2xlbi1TVUZGSVhfTEVOLCBHWl9TVUZGSVgpID09IDApIHsKICAgICAgICAgaW5maWxlID0gZmlsZTsKQEAgLTMxNyw3ICs1MjAsMTEgQEAKICAgICB9IGVsc2UgewogICAgICAgICBvdXRmaWxlID0gZmlsZTsKICAgICAgICAgaW5maWxlID0gYnVmOworI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgICAgIHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICIlcyIsIEdaX1NVRkZJWCk7CisjZWxzZQogICAgICAgICBzdHJjYXQoaW5maWxlLCBHWl9TVUZGSVgpOworI2VuZGlmCiAgICAgfQogICAgIGluID0gZ3pvcGVuKGluZmlsZSwgInJiIik7CiAgICAgaWYgKGluID09IE5VTEwpIHsKQEAgLTM1NSw3ICs1NjIsMTEgQEAKICAgICBnekZpbGUgZmlsZTsKICAgICBjaGFyICpibmFtZSwgb3V0bW9kZVsyMF07CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dG1vZGUsIHNpemVvZihvdXRtb2RlKSwgIiVzIiwgIndiNiAiKTsKKyNlbHNlCiAgICAgc3RyY3B5KG91dG1vZGUsICJ3YjYgIik7CisjZW5kaWYKIAogICAgIHByb2cgPSBhcmd2WzBdOwogICAgIGJuYW1lID0gc3RycmNocihhcmd2WzBdLCAnLycpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3RyZWVzLmMgYi9Nb2R1bGVzL3psaWIvdHJlZXMuYwppbmRleCA1NmU5YmIxLi4xZmQ3NzU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvdHJlZXMuYworKysgYi9Nb2R1bGVzL3psaWIvdHJlZXMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHRyZWVzLmMgLS0gb3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEyIEplYW4tbG91cCBHYWlsbHkKICAqIGRldGVjdF9kYXRhX3R5cGUoKSBmdW5jdGlvbiBwcm92aWRlZCBmcmVlbHkgYnkgQ29zbWluIFRydXRhLCAyMDA2CiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KQEAgLTc0LDExICs3NCw2IEBACiAgKiBwcm9iYWJpbGl0eSwgdG8gYXZvaWQgdHJhbnNtaXR0aW5nIHRoZSBsZW5ndGhzIGZvciB1bnVzZWQgYml0IGxlbmd0aCBjb2Rlcy4KICAqLwogCi0jZGVmaW5lIEJ1Zl9zaXplICg4ICogMipzaXplb2YoY2hhcikpCi0vKiBOdW1iZXIgb2YgYml0cyB1c2VkIHdpdGhpbiBiaV9idWYuIChiaV9idWYgbWlnaHQgYmUgaW1wbGVtZW50ZWQgb24KLSAqIG1vcmUgdGhhbiAxNiBiaXRzIG9uIHNvbWUgc3lzdGVtcy4pCi0gKi8KLQogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBMb2NhbCBkYXRhLiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLgogICovCkBAIC0xNTEsOCArMTQ2LDggQEAKIGxvY2FsIGludCAgYnVpbGRfYmxfdHJlZSAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHZvaWQgc2VuZF9hbGxfdHJlZXMgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBsY29kZXMsIGludCBkY29kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmxjb2RlcykpOwotbG9jYWwgdm9pZCBjb21wcmVzc19ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY3RfZGF0YSAqbHRyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdF9kYXRhICpkdHJlZSkpOworbG9jYWwgdm9pZCBjb21wcmVzc19ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY29uc3QgY3RfZGF0YSAqbHRyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdF9kYXRhICpkdHJlZSkpOwogbG9jYWwgaW50ICBkZXRlY3RfZGF0YV90eXBlIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CiBsb2NhbCB1bnNpZ25lZCBiaV9yZXZlcnNlIE9GKCh1bnNpZ25lZCB2YWx1ZSwgaW50IGxlbmd0aCkpOwogbG9jYWwgdm9pZCBiaV93aW5kdXAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwpAQCAtMzk5LDcgKzM5NCw2IEBACiAKICAgICBzLT5iaV9idWYgPSAwOwogICAgIHMtPmJpX3ZhbGlkID0gMDsKLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA4OyAvKiBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCiAjaWZkZWYgREVCVUcKICAgICBzLT5jb21wcmVzc2VkX2xlbiA9IDBMOwogICAgIHMtPmJpdHNfc2VudCA9IDBMOwpAQCAtODgzLDE1ICs4NzcsMTcgQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBGbHVzaCB0aGUgYml0cyBpbiB0aGUgYml0IGJ1ZmZlciB0byBwZW5kaW5nIG91dHB1dCAobGVhdmVzIGF0IG1vc3QgNyBiaXRzKQorICovCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2JpdHMocykKKyAgICBkZWZsYXRlX3N0YXRlICpzOworeworICAgIGJpX2ZsdXNoKHMpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFNlbmQgb25lIGVtcHR5IHN0YXRpYyBibG9jayB0byBnaXZlIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUuCiAgKiBUaGlzIHRha2VzIDEwIGJpdHMsIG9mIHdoaWNoIDcgbWF5IHJlbWFpbiBpbiB0aGUgYml0IGJ1ZmZlci4KLSAqIFRoZSBjdXJyZW50IGluZmxhdGUgY29kZSByZXF1aXJlcyA5IGJpdHMgb2YgbG9va2FoZWFkLiBJZiB0aGUKLSAqIGxhc3QgdHdvIGNvZGVzIGZvciB0aGUgcHJldmlvdXMgYmxvY2sgKHJlYWwgY29kZSBwbHVzIEVPQikgd2VyZSBjb2RlZAotICogb24gNSBiaXRzIG9yIGxlc3MsIGluZmxhdGUgbWF5IGhhdmUgb25seSA1KzMgYml0cyBvZiBsb29rYWhlYWQgdG8gZGVjb2RlCi0gKiB0aGUgbGFzdCByZWFsIGNvZGUuIEluIHRoaXMgY2FzZSB3ZSBzZW5kIHR3byBlbXB0eSBzdGF0aWMgYmxvY2tzIGluc3RlYWQKLSAqIG9mIG9uZS4gKFRoZXJlIGFyZSBubyBwcm9ibGVtcyBpZiB0aGUgcHJldmlvdXMgYmxvY2sgaXMgc3RvcmVkIG9yIGZpeGVkLikKLSAqIFRvIHNpbXBsaWZ5IHRoZSBjb2RlLCB3ZSBhc3N1bWUgdGhlIHdvcnN0IGNhc2Ugb2YgbGFzdCByZWFsIGNvZGUgZW5jb2RlZAotICogb24gb25lIGJpdCBvbmx5LgogICovCiB2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduKHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKQEAgLTkwMiwyMCArODk4LDYgQEAKICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAxMEw7IC8qIDMgZm9yIGJsb2NrIHR5cGUsIDcgZm9yIEVPQiAqLwogI2VuZGlmCiAgICAgYmlfZmx1c2gocyk7Ci0gICAgLyogT2YgdGhlIDEwIGJpdHMgZm9yIHRoZSBlbXB0eSBibG9jaywgd2UgaGF2ZSBhbHJlYWR5IHNlbnQKLSAgICAgKiAoMTAgLSBiaV92YWxpZCkgYml0cy4gVGhlIGxvb2thaGVhZCBmb3IgdGhlIGxhc3QgcmVhbCBjb2RlIChiZWZvcmUKLSAgICAgKiB0aGUgRU9CIG9mIHRoZSBwcmV2aW91cyBibG9jaykgd2FzIHRodXMgYXQgbGVhc3Qgb25lIHBsdXMgdGhlIGxlbmd0aAotICAgICAqIG9mIHRoZSBFT0IgcGx1cyB3aGF0IHdlIGhhdmUganVzdCBzZW50IG9mIHRoZSBlbXB0eSBzdGF0aWMgYmxvY2suCi0gICAgICovCi0gICAgaWYgKDEgKyBzLT5sYXN0X2VvYl9sZW4gKyAxMCAtIHMtPmJpX3ZhbGlkIDwgOSkgewotICAgICAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTPDwxLCAzKTsKLSAgICAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgc3RhdGljX2x0cmVlKTsKLSNpZmRlZiBERUJVRwotICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAxMEw7Ci0jZW5kaWYKLSAgICAgICAgYmlfZmx1c2gocyk7Ci0gICAgfQotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDc7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTkwLDcgKzk3Miw4IEBACiAgICAgfSBlbHNlIGlmIChzLT5zdHJhdGVneSA9PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09IG9wdF9sZW5iKSB7CiAjZW5kaWYKICAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVM8PDEpK2xhc3QsIDMpOwotICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwgKGN0X2RhdGEgKilzdGF0aWNfZHRyZWUpOworICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19sdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzdGF0aWNfZHRyZWUpOwogI2lmZGVmIERFQlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5zdGF0aWNfbGVuOwogI2VuZGlmCkBAIC05OTgsNyArOTgxLDggQEAKICAgICAgICAgc2VuZF9iaXRzKHMsIChEWU5fVFJFRVM8PDEpK2xhc3QsIDMpOwogICAgICAgICBzZW5kX2FsbF90cmVlcyhzLCBzLT5sX2Rlc2MubWF4X2NvZGUrMSwgcy0+ZF9kZXNjLm1heF9jb2RlKzEsCiAgICAgICAgICAgICAgICAgICAgICAgIG1heF9ibGluZGV4KzEpOwotICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY3RfZGF0YSAqKXMtPmR5bl9sdHJlZSwgKGN0X2RhdGEgKilzLT5keW5fZHRyZWUpOworICAgICAgICBjb21wcmVzc19ibG9jayhzLCAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9sdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGN0X2RhdGEgKilzLT5keW5fZHRyZWUpOwogI2lmZGVmIERFQlVHCiAgICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDMgKyBzLT5vcHRfbGVuOwogI2VuZGlmCkBAIC0xMDc1LDggKzEwNTksOCBAQAogICovCiBsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrKHMsIGx0cmVlLCBkdHJlZSkKICAgICBkZWZsYXRlX3N0YXRlICpzOwotICAgIGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KLSAgICBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmx0cmVlOyAvKiBsaXRlcmFsIHRyZWUgKi8KKyAgICBjb25zdCBjdF9kYXRhICpkdHJlZTsgLyogZGlzdGFuY2UgdHJlZSAqLwogewogICAgIHVuc2lnbmVkIGRpc3Q7ICAgICAgLyogZGlzdGFuY2Ugb2YgbWF0Y2hlZCBzdHJpbmcgKi8KICAgICBpbnQgbGM7ICAgICAgICAgICAgIC8qIG1hdGNoIGxlbmd0aCBvciB1bm1hdGNoZWQgY2hhciAoaWYgZGlzdCA9PSAwKSAqLwpAQCAtMTExOCw3ICsxMTAyLDYgQEAKICAgICB9IHdoaWxlIChseCA8IHMtPmxhc3RfbGl0KTsKIAogICAgIHNlbmRfY29kZShzLCBFTkRfQkxPQ0ssIGx0cmVlKTsKLSAgICBzLT5sYXN0X2VvYl9sZW4gPSBsdHJlZVtFTkRfQkxPQ0tdLkxlbjsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMjI2LDcgKzEyMDksNiBAQAogICAgIGludCAgICAgIGhlYWRlcjsgIC8qIHRydWUgaWYgYmxvY2sgaGVhZGVyIG11c3QgYmUgd3JpdHRlbiAqLwogewogICAgIGJpX3dpbmR1cChzKTsgICAgICAgIC8qIGFsaWduIG9uIGJ5dGUgYm91bmRhcnkgKi8KLSAgICBzLT5sYXN0X2VvYl9sZW4gPSA4OyAvKiBlbm91Z2ggbG9va2FoZWFkIGZvciBpbmZsYXRlICovCiAKICAgICBpZiAoaGVhZGVyKSB7CiAgICAgICAgIHB1dF9zaG9ydChzLCAodXNoKWxlbik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvdW5jb21wci5jIGIvTW9kdWxlcy96bGliL3VuY29tcHIuYwppbmRleCBhZDk4YmUzLi4yNDJlOTQ5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvdW5jb21wci5jCisrKyBiL01vZHVsZXMvemxpYi91bmNvbXByLmMKQEAgLTMwLDcgKzMwLDcgQEAKICAgICB6X3N0cmVhbSBzdHJlYW07CiAgICAgaW50IGVycjsKIAotICAgIHN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilzb3VyY2U7CisgICAgc3RyZWFtLm5leHRfaW4gPSAoel9jb25zdCBCeXRlZiAqKXNvdXJjZTsKICAgICBzdHJlYW0uYXZhaWxfaW4gPSAodUludClzb3VyY2VMZW47CiAgICAgLyogQ2hlY2sgZm9yIHNvdXJjZSA+IDY0SyBvbiAxNi1iaXQgbWFjaGluZTogKi8KICAgICBpZiAoKHVMb25nKXN0cmVhbS5hdmFpbF9pbiAhPSBzb3VyY2VMZW4pIHJldHVybiBaX0JVRl9FUlJPUjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5oIGIvTW9kdWxlcy96bGliL3pjb25mLmgKaW5kZXggMDJjZTU2Yy4uOTk4N2E3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmgKKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTUsMTEgKzE1LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI3LDkgKzI5LDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDAsNDQgKzQ0LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05MiwxNiArMTA1LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTEsNyArMTMwLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk3LDYgKzIxOCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDMsNiArMjcwLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU2LDEyICszOTEsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzAsMjEgKzQ0MCwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk0LDE4ICs0ODEsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbiBiL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KaW5kZXggYTJmNzFiMS4uMDQzMDE5YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCkBAIC0xLDUgKzEsNSBAQAogLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE3LDExICsxNywxMyBAQAogICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgogICovCiAjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX1BSRUZJWF9TRVQKIAogLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCiAjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQogIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQogIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9iaXRzICAgICAgICB6X190cl9mbHVzaF9iaXRzCiAjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCiAjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKICMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCkBAIC0yOSw5ICszMSwxMSBAQAogIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKICMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAotIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCi0jICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCi0jICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgICAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgorIyAgICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZW5kaWYKICMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgICAgICAgICB6X2NyYzMyX2NvbWJpbmUKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lNjQgICAgICAgel9jcmMzMl9jb21iaW5lNjQKQEAgLTQyLDQ0ICs0Niw1MyBAQAogIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KICMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVBlbmRpbmcgICAgICAgIHpfZGVmbGF0ZVBlbmRpbmcKICMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKKyMgIGRlZmluZSBkZWZsYXRlUmVzZXRLZWVwICAgICAgel9kZWZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKICMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCiAjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKICMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgotIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAotIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCi0jICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKLSMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCi0jICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQotIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgotIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdwotIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0Ci0jICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgotIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCi0jICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgotIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKLSMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKLSMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKLSMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAotIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKLSMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KLSMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAotIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCi0jICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCi0jICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCi0jICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCi0jICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKLSMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKLSMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAotIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCi0jICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCi0jICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKLSMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YwotIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCisjICAgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgICAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICAgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgorIyAgICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCisjICAgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgICAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICAgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCisjICAgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAorIyAgICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICAgIGRlZmluZSBnemdldGNfICAgICAgICAgICAgICAgel9nemdldGNfCisjICAgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgICAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0CisjICAgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICAgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgICAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0CisjICAgIGlmZGVmIF9XSU4zMgorIyAgICAgIGRlZmluZSBnem9wZW5fdyAgICAgICAgICAgICAgel9nem9wZW5fdworIyAgICBlbmRpZgorIyAgICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKKyMgICAgZGVmaW5lIGd6dnByaW50ZiAgICAgICAgICAgICB6X2d6dnByaW50ZgorIyAgICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICAgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKKyMgICAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgICAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlaworIyAgICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICAgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKKyMgICAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICAgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgZW5kaWYKICMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKICMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZApAQCAtOTQsMTYgKzEwNywyMiBAQAogIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAogIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKICMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVHZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVHZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKICMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CiAjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldEtlZXAgICAgICB6X2luZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAogIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAogIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBlbmRpZgogIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotIyAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKLSMgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHpjYWxsb2MgICAgICAgICAgICAgICB6X3pjYWxsb2MKKyMgICAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZW5kaWYKICMgIGRlZmluZSB6bGliQ29tcGlsZUZsYWdzICAgICAgel96bGliQ29tcGlsZUZsYWdzCiAjICBkZWZpbmUgemxpYlZlcnNpb24gICAgICAgICAgIHpfemxpYlZlcnNpb24KIApAQCAtMTEzLDcgKzEzMiw5IEBACiAjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCiAjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCi0jICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCiAjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAogIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKQEAgLTE5OSw2ICsyMjAsMTIgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoWkxJQl9DT05TVCkgJiYgIWRlZmluZWQoel9jb25zdCkKKyMgIGRlZmluZSB6X2NvbnN0IGNvbnN0CisjZWxzZQorIyAgZGVmaW5lIHpfY29uc3QKKyNlbmRpZgorCiAvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLwogI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCiAjICBkZWZpbmUgTk9fRFVNTVlfREVDTApAQCAtMjQ1LDYgKzI3MiwxNCBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWZuZGVmIFpfQVJHIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIHN0ZGFyZyAqLworIyAgaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKwogLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKICAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCiAgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKQEAgLTM1OCwxMiArMzkzLDQ3IEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChaX1U0KSAmJiAhZGVmaW5lZChaX1NPTE8pICYmIGRlZmluZWQoU1REQykKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorIyAgaWYgKFVJTlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQKKyMgIGVsaWYgKFVMT05HX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIGxvbmcKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkIHNob3J0CisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBaX1U0CisgICB0eXBlZGVmIFpfVTQgel9jcmNfdDsKKyNlbHNlCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgel9jcmNfdDsKKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCiAjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU1REQVJHX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9TVERBUkdfSAorI2VuZGlmCisKICNpZmRlZiBTVERDCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkYXJnLmg+ICAgICAgICAgLyogZm9yIHZhX2xpc3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4gICAgICAgICAvKiBmb3Igd2NoYXJfdCAqLworIyAgZW5kaWYKICNlbmRpZgogCiAvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZApAQCAtMzcyLDIxICs0NDIsMzggQEAKICAqIGJvdGggIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQgIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAwIiBhcwogICogZXF1aXZhbGVudGx5IHJlcXVlc3Rpbmcgbm8gNjQtYml0IG9wZXJhdGlvbnMKICAqLwotI2lmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCiAjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGlmbmRlZiB6X29mZl90Ci0jICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjaWYgZGVmaW5lZChfX1dBVENPTUNfXykgJiYgIWRlZmluZWQoWl9IQVZFX1VOSVNURF9IKQorIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisjaWZuZGVmIFpfU09MTworIyAgaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgICAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgLyogZm9yIFNFRUtfKiwgb2ZmX3QsIGFuZCBfTEZTNjRfTEFSR0VGSUxFICovCisjICAgIGlmZGVmIFZNUworIyAgICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgICAgZW5kaWYKKyMgICAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIFNFRUtfU0VUCisjaWYgZGVmaW5lZChfTEZTNjRfTEFSR0VGSUxFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBaX0xGUzY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfTEFSR0U2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9GSUxFX09GRlNFVF9CSVRTKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX1dBTlQ2NAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTRUVLX1NFVCkgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCiAjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLwogIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KQEAgLTM5NiwxOCArNDgzLDE0IEBACiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKFpfTEFSR0U2NCkKICMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAogI2Vsc2UKLSMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChaX1NPTE8pCisjICAgIGRlZmluZSB6X29mZjY0X3QgX19pbnQ2NAorIyAgZWxzZQorIyAgICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96Y29uZi5oLmluIGIvTW9kdWxlcy96bGliL3pjb25mLmguaW4KaW5kZXggMDJjZTU2Yy4uOTk4N2E3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3pjb25mLmguaW4KKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmguaW4KQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTUsMTEgKzE1LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI3LDkgKzI5LDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDAsNDQgKzQ0LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05MiwxNiArMTA1LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTEsNyArMTMwLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk3LDYgKzIxOCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDMsNiArMjcwLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU2LDEyICszOTEsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzAsMjEgKzQ0MCwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk0LDE4ICs0ODEsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmluLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNhOTQzMS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0vKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKLSAqLwotCi0vKiBAKCMpICRJZCQgKi8KLQotI2lmbmRlZiBaQ09ORl9ICi0jZGVmaW5lIFpDT05GX0gKLQotLyoKLSAqIElmIHlvdSAqcmVhbGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywKLSAqIGNvbXBpbGUgd2l0aCAtRFpfUFJFRklYLiBUaGUgInN0YW5kYXJkIiB6bGliIHNob3VsZCBiZSBjb21waWxlZCB3aXRob3V0IGl0LgotICovCi0jaWZkZWYgWl9QUkVGSVgKLSMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KLSMgIGRlZmluZSBkZWZsYXRlICAgICAgICAgICAgICAgel9kZWZsYXRlCi0jICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAgICAgIHpfZGVmbGF0ZUVuZAotIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XwotIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKLSMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCi0jICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwotIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgZGVmbGF0ZUNvcHkgICAgICAgICAgIHpfZGVmbGF0ZUNvcHkKLSMgIGRlZmluZSBkZWZsYXRlUmVzZXQgICAgICAgICAgel9kZWZsYXRlUmVzZXQKLSMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCi0jICBkZWZpbmUgZGVmbGF0ZUJvdW5kICAgICAgICAgIHpfZGVmbGF0ZUJvdW5kCi0jICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCi0jICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXwotIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5Ci0jICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKLSMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50Ci0jICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkKLSMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKLSMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawotIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCi0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcwotIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKLSMgIGRlZmluZSBjcmMzMiAgICAgICAgICAgICAgICAgel9jcmMzMgotIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKLSMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLQotIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKLSMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCi0jICBkZWZpbmUgb3V0X2Z1bmMgICAgICAgICAgICAgIHpfb3V0X2Z1bmMKLSMgIGRlZmluZSBCeXRlICAgICAgICAgICAgICAgICAgel9CeXRlCi0jICBkZWZpbmUgdUludCAgICAgICAgICAgICAgICAgIHpfdUludAotIyAgZGVmaW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nCi0jICBkZWZpbmUgQnl0ZWYgICAgICAgICAgICAgICAgIHpfQnl0ZWYKLSMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgotIyAgZGVmaW5lIGludGYgICAgICAgICAgICAgICAgICB6X2ludGYKLSMgIGRlZmluZSB1SW50ZiAgICAgICAgICAgICAgICAgel91SW50ZgotIyAgZGVmaW5lIHVMb25nZiAgICAgICAgICAgICAgICB6X3VMb25nZgotIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAgICAgICB6X3ZvaWRwZgotIyAgZGVmaW5lIHZvaWRwICAgICAgICAgICAgICAgICB6X3ZvaWRwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NU0RPU19fKSAmJiAhZGVmaW5lZChNU0RPUykKLSMgIGRlZmluZSBNU0RPUwotI2VuZGlmCi0jaWYgKGRlZmluZWQoT1NfMikgfHwgZGVmaW5lZChfX09TMl9fKSkgJiYgIWRlZmluZWQoT1MyKQotIyAgZGVmaW5lIE9TMgotI2VuZGlmCi0jaWYgZGVmaW5lZChfV0lORE9XUykgJiYgIWRlZmluZWQoV0lORE9XUykKLSMgIGRlZmluZSBXSU5ET1dTCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lOMzJfV0NFKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykKLSMgIGlmbmRlZiBXSU4zMgotIyAgICBkZWZpbmUgV0lOMzIKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoV0lORE9XUykpICYmICFkZWZpbmVkKFdJTjMyKQotIyAgaWYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fRkxBVF9fKSAmJiAhZGVmaW5lZChfXzM4Nl9fKQotIyAgICBpZm5kZWYgU1lTMTZCSVQKLSMgICAgICBkZWZpbmUgU1lTMTZCSVQKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyoKLSAqIENvbXBpbGUgd2l0aCAtRE1BWFNFR182NEsgaWYgdGhlIGFsbG9jIGZ1bmN0aW9uIGNhbm5vdCBhbGxvY2F0ZSBtb3JlCi0gKiB0aGFuIDY0ayBieXRlcyBhdCBhIHRpbWUgKG5lZWRlZCBvbiBzeXN0ZW1zIHdpdGggMTYtYml0IGludCkuCi0gKi8KLSNpZmRlZiBTWVMxNkJJVAotIyAgZGVmaW5lIE1BWFNFR182NEsKLSNlbmRpZgotI2lmZGVmIE1TRE9TCi0jICBkZWZpbmUgVU5BTElHTkVEX09LCi0jZW5kaWYKLQotI2lmZGVmIF9fU1REQ19WRVJTSU9OX18KLSMgIGlmbmRlZiBTVERDCi0jICAgIGRlZmluZSBTVERDCi0jICBlbmRpZgotIyAgaWYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jICAgIGlmbmRlZiBTVERDOTkKLSMgICAgICBkZWZpbmUgU1REQzk5Ci0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19TVERDX18pIHx8IGRlZmluZWQoX19jcGx1c3BsdXMpKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKF9fSE9TX0FJWF9fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKSAmJiAhZGVmaW5lZChTVERDKSAgICAvKiBpU2VyaWVzIChmb3JtZXJseSBBUy80MDApLiAqLwotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLSMgIGlmbmRlZiBjb25zdCAvKiBjYW5ub3QgdXNlICFkZWZpbmVkKFNUREMpICYmICFkZWZpbmVkKGNvbnN0KSBvbiBNYWMgKi8KLSMgICAgZGVmaW5lIGNvbnN0ICAgICAgIC8qIG5vdGU6IG5lZWQgYSBtb3JlIGdlbnRsZSBzb2x1dGlvbiBoZXJlICovCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCi0jaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKLSMgIGRlZmluZSBOT19EVU1NWV9ERUNMCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3IgbWVtTGV2ZWwgaW4gZGVmbGF0ZUluaXQyICovCi0jaWZuZGVmIE1BWF9NRU1fTEVWRUwKLSMgIGlmZGVmIE1BWFNFR182NEsKLSMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOAotIyAgZWxzZQotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA5Ci0jICBlbmRpZgotI2VuZGlmCi0KLS8qIE1heGltdW0gdmFsdWUgZm9yIHdpbmRvd0JpdHMgaW4gZGVmbGF0ZUluaXQyIGFuZCBpbmZsYXRlSW5pdDIuCi0gKiBXQVJOSU5HOiByZWR1Y2luZyBNQVhfV0JJVFMgbWFrZXMgbWluaWd6aXAgdW5hYmxlIHRvIGV4dHJhY3QgLmd6IGZpbGVzCi0gKiBjcmVhdGVkIGJ5IGd6aXAuIChGaWxlcyBjcmVhdGVkIGJ5IG1pbmlnemlwIGNhbiBzdGlsbCBiZSBleHRyYWN0ZWQgYnkKLSAqIGd6aXAuKQotICovCi0jaWZuZGVmIE1BWF9XQklUUwotIyAgZGVmaW5lIE1BWF9XQklUUyAgIDE1IC8qIDMySyBMWjc3IHdpbmRvdyAqLwotI2VuZGlmCi0KLS8qIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgotICAgICAgICAgICAgKDEgPDwgKHdpbmRvd0JpdHMrMikpICsgICgxIDw8IChtZW1MZXZlbCs5KSkKLSB0aGF0IGlzOiAxMjhLIGZvciB3aW5kb3dCaXRzPTE1ICArICAxMjhLIGZvciBtZW1MZXZlbCA9IDggIChkZWZhdWx0IHZhbHVlcykKLSBwbHVzIGEgZmV3IGtpbG9ieXRlcyBmb3Igc21hbGwgb2JqZWN0cy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJlZHVjZQotIHRoZSBkZWZhdWx0IG1lbW9yeSByZXF1aXJlbWVudHMgZnJvbSAyNTZLIHRvIDEyOEssIGNvbXBpbGUgd2l0aAotICAgICBtYWtlIENGTEFHUz0iLU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTciCi0gT2YgY291cnNlIHRoaXMgd2lsbCBnZW5lcmFsbHkgZGVncmFkZSBjb21wcmVzc2lvbiAodGhlcmUncyBubyBmcmVlIGx1bmNoKS4KLQotICAgVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGluZmxhdGUgYXJlIChpbiBieXRlcykgMSA8PCB3aW5kb3dCaXRzCi0gdGhhdCBpcywgMzJLIGZvciB3aW5kb3dCaXRzPTE1IChkZWZhdWx0IHZhbHVlKSBwbHVzIGEgZmV3IGtpbG9ieXRlcwotIGZvciBzbWFsbCBvYmplY3RzLgotKi8KLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogVHlwZSBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBPRiAvKiBmdW5jdGlvbiBwcm90b3R5cGVzICovCi0jICBpZmRlZiBTVERDCi0jICAgIGRlZmluZSBPRihhcmdzKSAgYXJncwotIyAgZWxzZQotIyAgICBkZWZpbmUgT0YoYXJncykgICgpCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCi0gKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgotICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCi0gKiB0byBkZWZpbmUgTk9fTUVNQ1BZIGluIHp1dGlsLmguICBJZiB5b3UgZG9uJ3QgbmVlZCB0aGUgbWl4ZWQgbW9kZWwsCi0gKiBqdXN0IGRlZmluZSBGQVIgdG8gYmUgZW1wdHkuCi0gKi8KLSNpZmRlZiBTWVMxNkJJVAotIyAgaWYgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKE1fSTg2TU0pCi0gICAgIC8qIE1TQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAgICBpZmRlZiBfTVNDX1ZFUgotIyAgICAgIGRlZmluZSBGQVIgX2ZhcgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIEZBUiBmYXIKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZiAoZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoX19NRURJVU1fXykpCi0gICAgIC8qIFR1cmJvIEMgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCi0jICAgIGRlZmluZSBTTUFMTF9NRURJVU0KLSMgICAgaWZkZWYgX19CT1JMQU5EQ19fCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKQotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiBhcyBhIERMTCwgZGVmaW5lIFpMSUJfRExMLgotICAgICogVGhpcyBpcyBub3QgbWFuZGF0b3J5LCBidXQgaXQgb2ZmZXJzIGEgbGl0dGxlIHBlcmZvcm1hbmNlIGluY3JlYXNlLgotICAgICovCi0jICBpZmRlZiBaTElCX0RMTAotIyAgICBpZiBkZWZpbmVkKFdJTjMyKSAmJiAoIWRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCAoX19CT1JMQU5EQ19fID49IDB4NTAwKSkKLSMgICAgICBpZmRlZiBaTElCX0lOVEVSTkFMCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZWxzZQotIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZiAgLyogWkxJQl9ETEwgKi8KLSAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgd2l0aCB0aGUgV0lOQVBJL1dJTkFQSVYgY2FsbGluZyBjb252ZW50aW9uLAotICAgICogZGVmaW5lIFpMSUJfV0lOQVBJLgotICAgICogQ2F1dGlvbjogdGhlIHN0YW5kYXJkIFpMSUIxLkRMTCBpcyBOT1QgY29tcGlsZWQgdXNpbmcgWkxJQl9XSU5BUEkuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfV0lOQVBJCi0jICAgIGlmZGVmIEZBUgotIyAgICAgIHVuZGVmIEZBUgotIyAgICBlbmRpZgotIyAgICBpbmNsdWRlIDx3aW5kb3dzLmg+Ci0gICAgIC8qIE5vIG5lZWQgZm9yIF9leHBvcnQsIHVzZSBaTElCLkRFRiBpbnN0ZWFkLiAqLwotICAgICAvKiBGb3IgY29tcGxldGUgV2luZG93cyBjb21wYXRpYmlsaXR5LCB1c2UgV0lOQVBJLCBub3QgX19zdGRjYWxsLiAqLwotIyAgICBkZWZpbmUgWkVYUE9SVCBXSU5BUEkKLSMgICAgaWZkZWYgV0lOMzIKLSMgICAgICBkZWZpbmUgWkVYUE9SVFZBIFdJTkFQSVYKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgRkFSIENERUNMCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX0JFT1NfXykKLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgWkVYUE9SVCAgIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgWkVYVEVSTgotIyAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuCi0jZW5kaWYKLSNpZm5kZWYgWkVYUE9SVAotIyAgZGVmaW5lIFpFWFBPUlQKLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUVkEKLSMgIGRlZmluZSBaRVhQT1JUVkEKLSNlbmRpZgotCi0jaWZuZGVmIEZBUgotIyAgZGVmaW5lIEZBUgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX01BQ1RZUEVTX18pCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgIEJ5dGU7ICAvKiA4IGJpdHMgKi8KLSNlbmRpZgotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICB1SW50OyAgLyogMTYgYml0cyBvciBtb3JlICovCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVMb25nOyAvKiAzMiBiaXRzIG9yIG1vcmUgKi8KLQotI2lmZGVmIFNNQUxMX01FRElVTQotICAgLyogQm9ybGFuZCBDL0MrKyBhbmQgc29tZSBvbGQgTVNDIHZlcnNpb25zIGlnbm9yZSBGQVIgaW5zaWRlIHR5cGVkZWYgKi8KLSMgIGRlZmluZSBCeXRlZiBCeXRlIEZBUgotI2Vsc2UKLSAgIHR5cGVkZWYgQnl0ZSAgRkFSIEJ5dGVmOwotI2VuZGlmCi10eXBlZGVmIGNoYXIgIEZBUiBjaGFyZjsKLXR5cGVkZWYgaW50ICAgRkFSIGludGY7Ci10eXBlZGVmIHVJbnQgIEZBUiB1SW50ZjsKLXR5cGVkZWYgdUxvbmcgRkFSIHVMb25nZjsKLQotI2lmZGVmIFNUREMKLSAgIHR5cGVkZWYgdm9pZCBjb25zdCAqdm9pZHBjOwotICAgdHlwZWRlZiB2b2lkIEZBUiAgICp2b2lkcGY7Ci0gICB0eXBlZGVmIHZvaWQgICAgICAgKnZvaWRwOwotI2Vsc2UKLSAgIHR5cGVkZWYgQnl0ZSBjb25zdCAqdm9pZHBjOwotICAgdHlwZWRlZiBCeXRlIEZBUiAgICp2b2lkcGY7Ci0gICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwotI2VuZGlmCi0KLSNpZiAwICAgICAgICAgICAvKiBIQVZFX1VOSVNURF9IIC0tIHRoaXMgbGluZSBpcyB1cGRhdGVkIGJ5IC4vY29uZmlndXJlICovCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBkZWZpbmUgel9vZmZfdCBvZmZfdAotI2VuZGlmCi0jaWZuZGVmIFNFRUtfU0VUCi0jICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KLSMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCi0jICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwotI2VuZGlmCi0jaWZuZGVmIHpfb2ZmX3QKLSMgIGRlZmluZSB6X29mZl90IGxvbmcKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSMgIGlmZGVmIEZBUgotIyAgICB1bmRlZiBGQVIKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUluaXQyXywiREVJTjIiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdF8sIklOSU4iKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVN5bmMsIklOU1kiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIpCi0jICAgcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX3RhYmxlLCJJTlRBQkwiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi4zIGIvTW9kdWxlcy96bGliL3psaWIuMwppbmRleCAyN2FkYzRjLi4wMTYwZTYyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemxpYi4zCisrKyBiL01vZHVsZXMvemxpYi96bGliLjMKQEAgLTEsNCArMSw0IEBACi0uVEggWkxJQiAzICIxOSBBcHIgMjAxMCIKKy5USCBaTElCIDMgIjI4IEFwciAyMDEzIgogLlNIIE5BTUUKIHpsaWIgXC0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsaWJyYXJ5CiAuU0ggU1lOT1BTSVMKQEAgLTM2LDkgKzM2LDkgQEAKIC5JUiB6bGliLmggLgogVGhlIGRpc3RyaWJ1dGlvbiBzb3VyY2UgaW5jbHVkZXMgZXhhbXBsZXMgb2YgdXNlIG9mIHRoZSBsaWJyYXJ5CiBpbiB0aGUgZmlsZXMKLS5JIGV4YW1wbGUuYworLkkgdGVzdC9leGFtcGxlLmMKIGFuZAotLklSIG1pbmlnemlwLmMsCisuSVIgdGVzdC9taW5pZ3ppcC5jLAogYXMgd2VsbCBhcyBvdGhlciBleGFtcGxlcyBpbiB0aGUKIC5JUiBleGFtcGxlcy8KIGRpcmVjdG9yeS4KQEAgLTY1LDcgKzY1LDcgQEAKIHdyaXR0ZW4gYnkgQS5NLiBLdWNobGluZyAoYW1rQG1hZ25ldC5jb20pLAogaXMgYXZhaWxhYmxlIGluIFB5dGhvbiAxLjUgYW5kIGxhdGVyIHZlcnNpb25zOgogLklQCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2xpYi9tb2R1bGUtemxpYi5odG1sCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sCiAuTFAKIC5JIHpsaWIKIGlzIGJ1aWx0IGludG8KQEAgLTk1LDExICs5NSwxMSBAQAogVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCiAoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXM6CiAuSVAKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0IChmb3IgdGhlIHpsaWIgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dCAoZm9yIHRoZSBkZWZsYXRlIGNvbXByZXNzZWQgZGF0YSBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxIChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKIC5icgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1Mi50eHQgKGZvciB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MiAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuTFAKIE1hcmsgTmVsc29uIHdyb3RlIGFuIGFydGljbGUgYWJvdXQKIC5JIHpsaWIKQEAgLTEyNSw4ICsxMjUsOCBAQAogU2VuZCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHRvIHpsaWJAZ3ppcC5vcmcsCiBvciAoZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uKSB0byBHaWxsZXMgVm9sbGFudCAoaW5mb0B3aW5pbWFnZS5jb20pLgogLlNIIEFVVEhPUlMKLVZlcnNpb24gMS4yLjUKLUNvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgKGpsb3VwQGd6aXAub3JnKQorVmVyc2lvbiAxLjIuOAorQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCiBhbmQgTWFyayBBZGxlciAobWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdSkuCiAuTFAKIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzLWlzLCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLmggYi9Nb2R1bGVzL3psaWIvemxpYi5oCmluZGV4IDc5YTE4N2MuLjNlMGM3NjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLmgKKysrIGIvTW9kdWxlcy96bGliL3psaWIuaApAQCAtMSw3ICsxLDcgQEAKIC8qIHpsaWIuaCAtLSBpbnRlcmZhY2Ugb2YgdGhlICd6bGliJyBnZW5lcmFsIHB1cnBvc2UgY29tcHJlc3Npb24gbGlicmFyeQotICB2ZXJzaW9uIDEuMi41LCBBcHJpbCAxOXRoLCAyMDEwCisgIHZlcnNpb24gMS4yLjgsIEFwcmlsIDI4dGgsIDIwMTMKIAotICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCkBAIC0yNCw4ICsyNCw4IEBACiAKIAogICBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkNzIChSZXF1ZXN0IGZvcgotICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dAotICAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyLnR4dCAoZ3ppcCBmb3JtYXQpLgorICBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwCisgICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQgcmZjMTk1MiAoZ3ppcCBmb3JtYXQpLgogKi8KIAogI2lmbmRlZiBaTElCX0gKQEAgLTM3LDExICszNywxMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi41IgotI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyNTAKKyNkZWZpbmUgWkxJQl9WRVJTSU9OICIxLjIuOCIKKyNkZWZpbmUgWkxJQl9WRVJOVU0gMHgxMjgwCiAjZGVmaW5lIFpMSUJfVkVSX01BSk9SIDEKICNkZWZpbmUgWkxJQl9WRVJfTUlOT1IgMgotI2RlZmluZSBaTElCX1ZFUl9SRVZJU0lPTiA1CisjZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDgKICNkZWZpbmUgWkxJQl9WRVJfU1VCUkVWSVNJT04gMAogCiAvKgpAQCAtODMsMTUgKzgzLDE1IEBACiBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGU7CiAKIHR5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgewotICAgIEJ5dGVmICAgICpuZXh0X2luOyAgLyogbmV4dCBpbnB1dCBieXRlICovCisgICAgel9jb25zdCBCeXRlZiAqbmV4dF9pbjsgICAgIC8qIG5leHQgaW5wdXQgYnl0ZSAqLwogICAgIHVJbnQgICAgIGF2YWlsX2luOyAgLyogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCBuZXh0X2luICovCi0gICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBuYiBvZiBpbnB1dCBieXRlcyByZWFkIHNvIGZhciAqLworICAgIHVMb25nICAgIHRvdGFsX2luOyAgLyogdG90YWwgbnVtYmVyIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCiAKICAgICBCeXRlZiAgICAqbmV4dF9vdXQ7IC8qIG5leHQgb3V0cHV0IGJ5dGUgc2hvdWxkIGJlIHB1dCB0aGVyZSAqLwogICAgIHVJbnQgICAgIGF2YWlsX291dDsgLyogcmVtYWluaW5nIGZyZWUgc3BhY2UgYXQgbmV4dF9vdXQgKi8KLSAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG5iIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KKyAgICB1TG9uZyAgICB0b3RhbF9vdXQ7IC8qIHRvdGFsIG51bWJlciBvZiBieXRlcyBvdXRwdXQgc28gZmFyICovCiAKLSAgICBjaGFyICAgICAqbXNnOyAgICAgIC8qIGxhc3QgZXJyb3IgbWVzc2FnZSwgTlVMTCBpZiBubyBlcnJvciAqLworICAgIHpfY29uc3QgY2hhciAqbXNnOyAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCiAgICAgc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqc3RhdGU7IC8qIG5vdCB2aXNpYmxlIGJ5IGFwcGxpY2F0aW9ucyAqLwogCiAgICAgYWxsb2NfZnVuYyB6YWxsb2M7ICAvKiB1c2VkIHRvIGFsbG9jYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwpAQCAtMzI3LDggKzMyNyw5IEBACiAKICAgICBaX0ZJTklTSCBjYW4gYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCBpZiBhbGwgdGhlIGNvbXByZXNzaW9uCiAgIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gIEluIHRoaXMgY2FzZSwgYXZhaWxfb3V0IG11c3QgYmUgYXQgbGVhc3QgdGhlCi0gIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gIElmIGRlZmxhdGUgZG9lcyBub3QgcmV0dXJuCi0gIFpfU1RSRUFNX0VORCwgdGhlbiBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCisgIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCAoc2VlIGJlbG93KS4gIFRoZW4gZGVmbGF0ZSBpcyBndWFyYW50ZWVkIHRvCisgIHJldHVybiBaX1NUUkVBTV9FTkQuICBJZiBub3QgZW5vdWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgZGVmbGF0ZSB3aWxsCisgIG5vdCByZXR1cm4gWl9TVFJFQU1fRU5ELCBhbmQgaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgogCiAgICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKICAgc28gZmFyICh0aGF0IGlzLCB0b3RhbF9pbiBieXRlcykuCkBAIC00NTEsMjMgKzQ1MiwyOSBAQAogICBlcnJvci4gIEhvd2V2ZXIgaWYgYWxsIGRlY29tcHJlc3Npb24gaXMgdG8gYmUgcGVyZm9ybWVkIGluIGEgc2luZ2xlIHN0ZXAgKGEKICAgc2luZ2xlIGNhbGwgb2YgaW5mbGF0ZSksIHRoZSBwYXJhbWV0ZXIgZmx1c2ggc2hvdWxkIGJlIHNldCB0byBaX0ZJTklTSC4gIEluCiAgIHRoaXMgY2FzZSBhbGwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkOwotICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIHVuY29tcHJlc3NlZCBkYXRhLiAgKFRoZSBzaXplCi0gIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzCi0gIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdCBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUKLSAgdGhlIGRlY29tcHJlc3Npb24gc3RhdGUuICBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5ldmVyIHJlcXVpcmVkLCBidXQgY2FuIGJlCi0gIHVzZWQgdG8gaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBtYXkgYmUgdXNlZCBmb3IgdGhlIHNpbmdsZQotICBpbmZsYXRlKCkgY2FsbC4KKyAgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBmb3IgdGhlCisgIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4gIChUaGUgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEgbWF5IGhhdmUgYmVlbgorICBzYXZlZCBieSB0aGUgY29tcHJlc3NvciBmb3IgdGhpcyBwdXJwb3NlLikgVGhlIHVzZSBvZiBaX0ZJTklTSCBpcyBub3QKKyAgcmVxdWlyZWQgdG8gcGVyZm9ybSBhbiBpbmZsYXRpb24gaW4gb25lIHN0ZXAuICBIb3dldmVyIGl0IG1heSBiZSB1c2VkIHRvCisgIGluZm9ybSBpbmZsYXRlIHRoYXQgYSBmYXN0ZXIgYXBwcm9hY2ggY2FuIGJlIHVzZWQgZm9yIHRoZSBzaW5nbGUgaW5mbGF0ZSgpCisgIGNhbGwuICBaX0ZJTklTSCBhbHNvIGluZm9ybXMgaW5mbGF0ZSB0byBub3QgbWFpbnRhaW4gYSBzbGlkaW5nIHdpbmRvdyBpZiB0aGUKKyAgc3RyZWFtIGNvbXBsZXRlcywgd2hpY2ggcmVkdWNlcyBpbmZsYXRlJ3MgbWVtb3J5IGZvb3RwcmludC4gIElmIHRoZSBzdHJlYW0KKyAgZG9lcyBub3QgY29tcGxldGUsIGVpdGhlciBiZWNhdXNlIG5vdCBhbGwgb2YgdGhlIHN0cmVhbSBpcyBwcm92aWRlZCBvciBub3QKKyAgZW5vdWdoIG91dHB1dCBzcGFjZSBpcyBwcm92aWRlZCwgdGhlbiBhIHNsaWRpbmcgd2luZG93IHdpbGwgYmUgYWxsb2NhdGVkIGFuZAorICBpbmZsYXRlKCkgY2FuIGJlIGNhbGxlZCBhZ2FpbiB0byBjb250aW51ZSB0aGUgb3BlcmF0aW9uIGFzIGlmIFpfTk9fRkxVU0ggaGFkCisgIGJlZW4gdXNlZC4KIAogICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbmZsYXRlKCkgYWx3YXlzIGZsdXNoZXMgYXMgbXVjaCBvdXRwdXQgYXMKICAgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIsIGFuZCBhbHdheXMgdXNlcyB0aGUgZmFzdGVyIGFwcHJvYWNoIG9uIHRoZQotICBmaXJzdCBjYWxsLiAgU28gdGhlIG9ubHkgZWZmZWN0IG9mIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgotICBpcyBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSwgYXMgbm90ZWQgYmVsb3csIG9yIHdoZW4gaXQgcmV0dXJucyBlYXJseQotICBiZWNhdXNlIFpfQkxPQ0sgb3IgWl9UUkVFUyBpcyB1c2VkLgorICBmaXJzdCBjYWxsLiAgU28gdGhlIGVmZmVjdHMgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGFyZQorICBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGluZmxhdGUoKSBhcyBub3RlZCBiZWxvdywgd2hlbiBpbmZsYXRlKCkgcmV0dXJucyBlYXJseQorICB3aGVuIFpfQkxPQ0sgb3IgWl9UUkVFUyBpcyB1c2VkLCBhbmQgd2hlbiBpbmZsYXRlKCkgYXZvaWRzIHRoZSBhbGxvY2F0aW9uIG9mCisgIG1lbW9yeSBmb3IgYSBzbGlkaW5nIHdpbmRvdyB3aGVuIFpfRklOSVNIIGlzIHVzZWQuCiAKICAgICAgSWYgYSBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYWZ0ZXIgdGhpcyBjYWxsIChzZWUgaW5mbGF0ZVNldERpY3Rpb25hcnkKLSAgYmVsb3cpLCBpbmZsYXRlIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKKyAgYmVsb3cpLCBpbmZsYXRlIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIHRoZSBkaWN0aW9uYXJ5CiAgIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMKLSAgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCisgIHN0cm0tPmFkbGVyIHRvIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKICAgdG90YWxfb3V0IGJ5dGVzKSBhbmQgcmV0dXJucyBaX09LLCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IgY29kZSBhcyBkZXNjcmliZWQKICAgYmVsb3cuICBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGluZmxhdGUoKSBjaGVja3MgdGhhdCBpdHMgY29tcHV0ZWQgYWRsZXIzMgogICBjaGVja3N1bSBpcyBlcXVhbCB0byB0aGF0IHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfU1RSRUFNX0VORApAQCAtNDc4LDcgKzQ4NSw5IEBACiAgIGluaXRpYWxpemluZyB3aXRoIGluZmxhdGVJbml0MigpLiAgQW55IGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGUgZ3ppcAogICBoZWFkZXIgaXMgbm90IHJldGFpbmVkLCBzbyBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRoYXQgaW5mb3JtYXRpb24gc2hvdWxkCiAgIGluc3RlYWQgdXNlIHJhdyBpbmZsYXRlLCBzZWUgaW5mbGF0ZUluaXQyKCkgYmVsb3csIG9yIGluZmxhdGVCYWNrKCkgYW5kCi0gIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nlc3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyLgorICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4gIFdoZW4gcHJvY2Vzc2luZworICBnemlwLXdyYXBwZWQgZGVmbGF0ZSBkYXRhLCBzdHJtLT5hZGxlcjMyIGlzIHNldCB0byB0aGUgQ1JDLTMyIG9mIHRoZSBvdXRwdXQKKyAgcHJvZHVjdGVkIHNvIGZhci4gIFRoZSBDUkMtMzIgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnemlwIHRyYWlsZXIuCiAKICAgICBpbmZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dCBwcm9jZXNzZWQKICAgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGhhcwpAQCAtNTgwLDEwICs1ODksMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKIC8qCiAgICAgIEluaXRpYWxpemVzIHRoZSBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IGZyb20gdGhlIGdpdmVuIGJ5dGUgc2VxdWVuY2UKLSAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0LCBkZWZsYXRlSW5pdDIgb3IgZGVmbGF0ZVJlc2V0LCBiZWZvcmUgYW55IGNhbGwKLSAgIG9mIGRlZmxhdGUuICBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUKLSAgIGRpY3Rpb25hcnkgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCisgICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuICBXaGVuIHVzaW5nIHRoZSB6bGliIGZvcm1hdCwgdGhpcworICAgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvcgorICAgZGVmbGF0ZVJlc2V0LCBhbmQgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUuICBXaGVuIGRvaW5nIHJhdyBkZWZsYXRlLCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIGFueSBjYWxsIG9mIGRlZmxhdGUsIG9yIGltbWVkaWF0ZWx5CisgICBhZnRlciB0aGUgY29tcGxldGlvbiBvZiBhIGRlZmxhdGUgYmxvY2ssIGkuZS4gYWZ0ZXIgYWxsIGlucHV0IGhhcyBiZWVuCisgICBjb25zdW1lZCBhbmQgYWxsIG91dHB1dCBoYXMgYmVlbiBkZWxpdmVyZWQgd2hlbiB1c2luZyBhbnkgb2YgdGhlIGZsdXNoCisgICBvcHRpb25zIFpfQkxPQ0ssIFpfUEFSVElBTF9GTFVTSCwgWl9TWU5DX0ZMVVNILCBvciBaX0ZVTExfRkxVU0guICBUaGUKKyAgIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvciBtdXN0IHVzZSBleGFjdGx5IHRoZSBzYW1lIGRpY3Rpb25hcnkgKHNlZQorICAgaW5mbGF0ZVNldERpY3Rpb25hcnkpLgogCiAgICAgIFRoZSBkaWN0aW9uYXJ5IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkKICAgIHRvIGJlIGVuY291bnRlcmVkIGxhdGVyIGluIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQsIHdpdGggdGhlIG1vc3QgY29tbW9ubHkKQEAgLTYxMCw4ICs2MjQsOCBAQAogICAgICBkZWZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgYQogICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUuZy4gIGRpY3Rpb25hcnkgYmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCiAgICBpbmNvbnNpc3RlbnQgKGZvciBleGFtcGxlIGlmIGRlZmxhdGUgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIHRoaXMgc3RyZWFtCi0gICBvciBpZiB0aGUgY29tcHJlc3Npb24gbWV0aG9kIGlzIGJzb3J0KS4gIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMgbm90Ci0gICBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorICAgb3IgaWYgbm90IGF0IGEgYmxvY2sgYm91bmRhcnkgZm9yIHJhdyBkZWZsYXRlKS4gIGRlZmxhdGVTZXREaWN0aW9uYXJ5IGRvZXMKKyAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCkBAIC02ODgsOSArNzAyLDI5IEBACiAgICBkZWZsYXRpb24gb2Ygc291cmNlTGVuIGJ5dGVzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKSBvcgogICAgZGVmbGF0ZUluaXQyKCksIGFuZCBhZnRlciBkZWZsYXRlU2V0SGVhZGVyKCksIGlmIHVzZWQuICBUaGlzIHdvdWxkIGJlIHVzZWQKICAgIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgZm9yIGRlZmxhdGlvbiBpbiBhIHNpbmdsZSBwYXNzLCBhbmQgc28gd291bGQgYmUKLSAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLgorICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuICBJZiB0aGF0IGZpcnN0IGRlZmxhdGUoKSBjYWxsIGlzIHByb3ZpZGVkIHRoZQorICAgc291cmNlTGVuIGlucHV0IGJ5dGVzLCBhbiBvdXRwdXQgYnVmZmVyIGFsbG9jYXRlZCB0byB0aGUgc2l6ZSByZXR1cm5lZCBieQorICAgZGVmbGF0ZUJvdW5kKCksIGFuZCB0aGUgZmx1c2ggdmFsdWUgWl9GSU5JU0gsIHRoZW4gZGVmbGF0ZSgpIGlzIGd1YXJhbnRlZWQKKyAgIHRvIHJldHVybiBaX1NUUkVBTV9FTkQuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIHRoZSBjb21wcmVzc2VkIHNpemUgdG8KKyAgIGJlIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQoKSBpZiBmbHVzaCBvcHRpb25zIG90aGVyCisgICB0aGFuIFpfRklOSVNIIG9yIFpfTk9fRkxVU0ggYXJlIHVzZWQuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQZW5kaW5nIE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpwZW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpiaXRzKSk7CisvKgorICAgICBkZWZsYXRlUGVuZGluZygpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhbmQgYml0cyBvZiBvdXRwdXQgdGhhdCBoYXZlCisgICBiZWVuIGdlbmVyYXRlZCwgYnV0IG5vdCB5ZXQgcHJvdmlkZWQgaW4gdGhlIGF2YWlsYWJsZSBvdXRwdXQuICBUaGUgYnl0ZXMgbm90CisgICBwcm92aWRlZCB3b3VsZCBiZSBkdWUgdG8gdGhlIGF2YWlsYWJsZSBvdXRwdXQgc3BhY2UgaGF2aW5nIGJlaW5nIGNvbnN1bWVkLgorICAgVGhlIG51bWJlciBvZiBiaXRzIG9mIG91dHB1dCBub3QgcHJvdmlkZWQgYXJlIGJldHdlZW4gMCBhbmQgNywgd2hlcmUgdGhleQorICAgYXdhaXQgbW9yZSBiaXRzIHRvIGpvaW4gdGhlbSBpbiBvcmRlciB0byBmaWxsIG91dCBhIGZ1bGwgYnl0ZS4gIElmIHBlbmRpbmcKKyAgIG9yIGJpdHMgYXJlIFpfTlVMTCwgdGhlbiB0aG9zZSB2YWx1ZXMgYXJlIG5vdCBzZXQuCisKKyAgICAgZGVmbGF0ZVBlbmRpbmcgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorICovCisKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpKTsKQEAgLTcwMyw4ICs3MzcsOSBAQAogICAgdGhhbiBvciBlcXVhbCB0byAxNiwgYW5kIHRoYXQgbWFueSBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB2YWx1ZQogICAgd2lsbCBiZSBpbnNlcnRlZCBpbiB0aGUgb3V0cHV0LgogCi0gICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQotICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisgICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKKyAgIHJvb20gaW4gdGhlIGludGVybmFsIGJ1ZmZlciB0byBpbnNlcnQgdGhlIGJpdHMsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTc5MCwxMCArODI1LDExIEBACiAgICBpZiB0aGF0IGNhbGwgcmV0dXJuZWQgWl9ORUVEX0RJQ1QuICBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKICAgIGNhbiBiZSBkZXRlcm1pbmVkIGZyb20gdGhlIGFkbGVyMzIgdmFsdWUgcmV0dXJuZWQgYnkgdGhhdCBjYWxsIG9mIGluZmxhdGUuCiAgICBUaGUgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCi0gICBkZWZsYXRlU2V0RGljdGlvbmFyeSkuICBGb3IgcmF3IGluZmxhdGUsIHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgaW5mbGF0ZUluaXQyKCkgb3IgaW5mbGF0ZVJlc2V0KCkgYW5kIGJlZm9yZSBhbnkgY2FsbCBvZgotICAgaW5mbGF0ZSgpIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluc3VyZSB0aGF0IHRoZQotICAgZGljdGlvbmFyeSB0aGF0IHdhcyB1c2VkIGZvciBjb21wcmVzc2lvbiBpcyBwcm92aWRlZC4KKyAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IGFueQorICAgdGltZSB0byBzZXQgdGhlIGRpY3Rpb25hcnkuICBJZiB0aGUgcHJvdmlkZWQgZGljdGlvbmFyeSBpcyBzbWFsbGVyIHRoYW4gdGhlCisgICB3aW5kb3cgYW5kIHRoZXJlIGlzIGFscmVhZHkgZGF0YSBpbiB0aGUgd2luZG93LCB0aGVuIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5CisgICB3aWxsIGFtZW5kIHdoYXQncyB0aGVyZS4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluc3VyZSB0aGF0IHRoZSBkaWN0aW9uYXJ5CisgICB0aGF0IHdhcyB1c2VkIGZvciBjb21wcmVzc2lvbiBpcyBwcm92aWRlZC4KIAogICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQogICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKGUuZy4gIGRpY3Rpb25hcnkgYmVpbmcgWl9OVUxMKSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCkBAIC04MDMsMTkgKzgzOSwzOCBAQAogICAgaW5mbGF0ZSgpLgogKi8KIAorWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlZiAqZGljdGlvbmFyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgICpkaWN0TGVuZ3RoKSk7CisvKgorICAgICBSZXR1cm5zIHRoZSBzbGlkaW5nIGRpY3Rpb25hcnkgYmVpbmcgbWFpbnRhaW5lZCBieSBpbmZsYXRlLiAgZGljdExlbmd0aCBpcworICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCB0aGF0IG1hbnkgYnl0ZXMgYXJlIGNvcGllZAorICAgdG8gZGljdGlvbmFyeS4gIGRpY3Rpb25hcnkgbXVzdCBoYXZlIGVub3VnaCBzcGFjZSwgd2hlcmUgMzI3NjggYnl0ZXMgaXMKKyAgIGFsd2F5cyBlbm91Z2guICBJZiBpbmZsYXRlR2V0RGljdGlvbmFyeSgpIGlzIGNhbGxlZCB3aXRoIGRpY3Rpb25hcnkgZXF1YWwgdG8KKyAgIFpfTlVMTCwgdGhlbiBvbmx5IHRoZSBkaWN0aW9uYXJ5IGxlbmd0aCBpcyByZXR1cm5lZCwgYW5kIG5vdGhpbmcgaXMgY29waWVkLgorICAgU2ltaWxhcnksIGlmIGRpY3RMZW5ndGggaXMgWl9OVUxMLCB0aGVuIGl0IGlzIG5vdCBzZXQuCisKKyAgICAgaW5mbGF0ZUdldERpY3Rpb25hcnkgcmV0dXJucyBaX09LIG9uIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZQorICAgc3RyZWFtIHN0YXRlIGlzIGluY29uc2lzdGVudC4KKyovCisKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgotICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZSB0aGUKLSAgIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCisgICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlCisgICBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCiAgICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gIE5vIG91dHB1dCBpcyBwcm92aWRlZC4KIAotICAgICBpbmZsYXRlU3luYyByZXR1cm5zIFpfT0sgaWYgYSBmdWxsIGZsdXNoIHBvaW50IGhhcyBiZWVuIGZvdW5kLCBaX0JVRl9FUlJPUgotICAgaWYgbm8gbW9yZSBpbnB1dCB3YXMgcHJvdmlkZWQsIFpfREFUQV9FUlJPUiBpZiBubyBmbHVzaCBwb2ludCBoYXMgYmVlbgotICAgZm91bmQsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuICBJbiB0aGUKLSAgIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRvdGFsX2luCi0gICB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gIEluIHRoZSBlcnJvciBjYXNlLAotICAgdGhlIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlIGlucHV0IGVhY2gKLSAgIHRpbWUsIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLgorICAgICBpbmZsYXRlU3luYyBzZWFyY2hlcyBmb3IgYSAwMCAwMCBGRiBGRiBwYXR0ZXJuIGluIHRoZSBjb21wcmVzc2VkIGRhdGEuCisgICBBbGwgZnVsbCBmbHVzaCBwb2ludHMgaGF2ZSB0aGlzIHBhdHRlcm4sIGJ1dCBub3QgYWxsIG9jY3VycmVuY2VzIG9mIHRoaXMKKyAgIHBhdHRlcm4gYXJlIGZ1bGwgZmx1c2ggcG9pbnRzLgorCisgICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIHBvc3NpYmxlIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCisgICBaX0JVRl9FUlJPUiBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50CisgICBoYXMgYmVlbiBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4KKyAgIEluIHRoZSBzdWNjZXNzIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50IHZhbHVlIG9mCisgICB0b3RhbF9pbiB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgdmFsaWQgY29tcHJlc3NlZCBkYXRhIHdhcyBmb3VuZC4gIEluIHRoZQorICAgZXJyb3IgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlCisgICBpbnB1dCBlYWNoIHRpbWUsIHVudGlsIHN1Y2Nlc3Mgb3IgZW5kIG9mIHRoZSBpbnB1dCBkYXRhLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlQ29weSBPRigoel9zdHJlYW1wIGRlc3QsCkBAIC05NjIsMTIgKzEwMTcsMTMgQEAKICAgICAgU2VlIGluZmxhdGVCYWNrKCkgZm9yIHRoZSB1c2FnZSBvZiB0aGVzZSByb3V0aW5lcy4KIAogICAgICBpbmZsYXRlQmFja0luaXQgd2lsbCByZXR1cm4gWl9PSyBvbiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhbnkgb2YKLSAgIHRoZSBwYXJhbWF0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCisgICB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdCBiZQogICAgYWxsb2NhdGVkLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QgbWF0Y2gKICAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KICovCiAKLXR5cGVkZWYgdW5zaWduZWQgKCppbl9mdW5jKSBPRigodm9pZCBGQVIgKiwgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwordHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICogRkFSICopKTsKIHR5cGVkZWYgaW50ICgqb3V0X2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqLCB1bnNpZ25lZCkpOwogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVCYWNrIE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTk3NSwxMSArMTAzMSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2Z1bmMgb3V0LCB2b2lkIEZBUiAqb3V0X2Rlc2MpKTsKIC8qCiAgICAgIGluZmxhdGVCYWNrKCkgZG9lcyBhIHJhdyBpbmZsYXRlIHdpdGggYSBzaW5nbGUgY2FsbCB1c2luZyBhIGNhbGwtYmFjawotICAgaW50ZXJmYWNlIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGluZmxhdGUoKSBmb3IKLSAgIGZpbGUgaS9vIGFwcGxpY2F0aW9ucyBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlIG91dHB1dCBhbmQgdGhlCi0gICBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQgYnVmZmVyLiAgVGhpcwotICAgZnVuY3Rpb24gdHJ1c3RzIHRoZSBhcHBsaWNhdGlvbiB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQgYnVmZmVyIHBhc3NlZCBieQotICAgdGhlIG91dHB1dCBmdW5jdGlvbiwgYXQgbGVhc3QgdW50aWwgaW5mbGF0ZUJhY2soKSByZXR1cm5zLgorICAgaW50ZXJmYWNlIGZvciBpbnB1dCBhbmQgb3V0cHV0LiAgVGhpcyBpcyBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudCB0aGFuCisgICBpbmZsYXRlKCkgZm9yIGZpbGUgaS9vIGFwcGxpY2F0aW9ucywgaW4gdGhhdCBpdCBhdm9pZHMgY29weWluZyBiZXR3ZWVuIHRoZQorICAgb3V0cHV0IGFuZCB0aGUgc2xpZGluZyB3aW5kb3cgYnkgc2ltcGx5IG1ha2luZyB0aGUgd2luZG93IGl0c2VsZiB0aGUgb3V0cHV0CisgICBidWZmZXIuICBpbmZsYXRlKCkgY2FuIGJlIGZhc3RlciBvbiBtb2Rlcm4gQ1BVcyB3aGVuIHVzZWQgd2l0aCBsYXJnZQorICAgYnVmZmVycy4gIGluZmxhdGVCYWNrKCkgdHJ1c3RzIHRoZSBhcHBsaWNhdGlvbiB0byBub3QgY2hhbmdlIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlciBwYXNzZWQgYnkgdGhlIG91dHB1dCBmdW5jdGlvbiwgYXQgbGVhc3QgdW50aWwgaW5mbGF0ZUJhY2soKSByZXR1cm5zLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCgpIG11c3QgYmUgY2FsbGVkIGZpcnN0IHRvIGFsbG9jYXRlIHRoZSBpbnRlcm5hbCBzdGF0ZQogICAgYW5kIHRvIGluaXRpYWxpemUgdGhlIHN0YXRlIHdpdGggdGhlIHVzZXItcHJvdmlkZWQgd2luZG93IGJ1ZmZlci4KQEAgLTEwODgsNiArMTE0NSw3IEBACiAgICAgIDI3LTMxOiAwIChyZXNlcnZlZCkKICAqLwogCisjaWZuZGVmIFpfU09MTwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogCkBAIC0xMTQ5LDEwICsxMjA3LDExIEBACiAKICAgICAgdW5jb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAogICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0Ci0gICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkIG9yIGluY29tcGxldGUuCisgICBidWZmZXIsIG9yIFpfREFUQV9FUlJPUiBpZiB0aGUgaW5wdXQgZGF0YSB3YXMgY29ycnVwdGVkIG9yIGluY29tcGxldGUuICBJbgorICAgdGhlIGNhc2Ugd2hlcmUgdGhlcmUgaXMgbm90IGVub3VnaCByb29tLCB1bmNvbXByZXNzKCkgd2lsbCBmaWxsIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlciB3aXRoIHRoZSB1bmNvbXByZXNzZWQgZGF0YSB1cCB0byB0aGF0IHBvaW50LgogKi8KIAotCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnemlwIGZpbGUgYWNjZXNzIGZ1bmN0aW9ucyAqLwogCiAvKgpAQCAtMTE2Miw3ICsxMjIxLDcgQEAKICAgIHdyYXBwZXIsIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTIsIHdyYXBwZWQgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0uCiAqLwogCi10eXBlZGVmIHZvaWRwIGd6RmlsZTsgICAgICAgLyogb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCit0eXBlZGVmIHN0cnVjdCBnekZpbGVfcyAqZ3pGaWxlOyAgICAvKiBzZW1pLW9wYXF1ZSBnemlwIGZpbGUgZGVzY3JpcHRvciAqLwogCiAvKgogWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW4gT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpKTsKQEAgLTExNzIsMTMgKzEyMzEsMjggQEAKICAgIGEgc3RyYXRlZ3k6ICdmJyBmb3IgZmlsdGVyZWQgZGF0YSBhcyBpbiAid2I2ZiIsICdoJyBmb3IgSHVmZm1hbi1vbmx5CiAgICBjb21wcmVzc2lvbiBhcyBpbiAid2IxaCIsICdSJyBmb3IgcnVuLWxlbmd0aCBlbmNvZGluZyBhcyBpbiAid2IxUiIsIG9yICdGJwogICAgZm9yIGZpeGVkIGNvZGUgY29tcHJlc3Npb24gYXMgaW4gIndiOUYiLiAgKFNlZSB0aGUgZGVzY3JpcHRpb24gb2YKLSAgIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikgQWxzbyAiYSIKLSAgIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0gdGhhdCB3aWxsIGJlCi0gICB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZSByZWFkaW5nCi0gICBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4KKyAgIGRlZmxhdGVJbml0MiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3RyYXRlZ3kgcGFyYW1ldGVyLikgICdUJyB3aWxsCisgICByZXF1ZXN0IHRyYW5zcGFyZW50IHdyaXRpbmcgb3IgYXBwZW5kaW5nIHdpdGggbm8gY29tcHJlc3Npb24gYW5kIG5vdCB1c2luZworICAgdGhlIGd6aXAgZm9ybWF0LgorCisgICAgICJhIiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJ3IiB0byByZXF1ZXN0IHRoYXQgdGhlIGd6aXAgc3RyZWFtIHRoYXQgd2lsbAorICAgYmUgd3JpdHRlbiBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZS4gICIrIiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciwgc2luY2UKKyAgIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgZ3ppcCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuICBUaGUgYWRkaXRpb24gb2YKKyAgICJ4IiB3aGVuIHdyaXRpbmcgd2lsbCBjcmVhdGUgdGhlIGZpbGUgZXhjbHVzaXZlbHksIHdoaWNoIGZhaWxzIGlmIHRoZSBmaWxlCisgICBhbHJlYWR5IGV4aXN0cy4gIE9uIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LCB0aGUgYWRkaXRpb24gb2YgImUiIHdoZW4KKyAgIHJlYWRpbmcgb3Igd3JpdGluZyB3aWxsIHNldCB0aGUgZmxhZyB0byBjbG9zZSB0aGUgZmlsZSBvbiBhbiBleGVjdmUoKSBjYWxsLgorCisgICAgIFRoZXNlIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBnemlwLCB3aWxsIHJlYWQgYW5kIGRlY29kZSBhIHNlcXVlbmNlIG9mIGd6aXAKKyAgIHN0cmVhbXMgaW4gYSBmaWxlLiAgVGhlIGFwcGVuZCBmdW5jdGlvbiBvZiBnem9wZW4oKSBjYW4gYmUgdXNlZCB0byBjcmVhdGUKKyAgIHN1Y2ggYSBmaWxlLiAgKEFsc28gc2VlIGd6Zmx1c2goKSBmb3IgYW5vdGhlciB3YXkgdG8gZG8gdGhpcy4pICBXaGVuCisgICBhcHBlbmRpbmcsIGd6b3BlbiBkb2VzIG5vdCB0ZXN0IHdoZXRoZXIgdGhlIGZpbGUgYmVnaW5zIHdpdGggYSBnemlwIHN0cmVhbSwKKyAgIG5vciBkb2VzIGl0IGxvb2sgZm9yIHRoZSBlbmQgb2YgdGhlIGd6aXAgc3RyZWFtcyB0byBiZWdpbiBhcHBlbmRpbmcuICBnem9wZW4KKyAgIHdpbGwgc2ltcGx5IGFwcGVuZCBhIGd6aXAgc3RyZWFtIHRvIHRoZSBleGlzdGluZyBmaWxlLgogCiAgICAgIGd6b3BlbiBjYW4gYmUgdXNlZCB0byByZWFkIGEgZmlsZSB3aGljaCBpcyBub3QgaW4gZ3ppcCBmb3JtYXQ7IGluIHRoaXMKLSAgIGNhc2UgZ3pyZWFkIHdpbGwgZGlyZWN0bHkgcmVhZCBmcm9tIHRoZSBmaWxlIHdpdGhvdXQgZGVjb21wcmVzc2lvbi4KKyAgIGNhc2UgZ3pyZWFkIHdpbGwgZGlyZWN0bHkgcmVhZCBmcm9tIHRoZSBmaWxlIHdpdGhvdXQgZGVjb21wcmVzc2lvbi4gIFdoZW4KKyAgIHJlYWRpbmcsIHRoaXMgd2lsbCBiZSBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5IGJ5IGxvb2tpbmcgZm9yIHRoZSBtYWdpYyB0d28tCisgICBieXRlIGd6aXAgaGVhZGVyLgogCiAgICAgIGd6b3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCwgaWYgdGhlcmUgd2FzCiAgICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSBnekZpbGUgc3RhdGUsIG9yIGlmIGFuIGludmFsaWQgbW9kZSB3YXMKQEAgLTExOTcsNyArMTI3MSwxMSBAQAogICAgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQsIG1vZGUpKSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvcgogICAgZmQuICBJZiB5b3Ugd2FudCB0byBrZWVwIGZkIG9wZW4sIHVzZSBmZCA9IGR1cChmZF9rZWVwKTsgZ3ogPSBnemRvcGVuKGZkLAogICAgbW9kZSk7LiAgVGhlIGR1cGxpY2F0ZWQgZGVzY3JpcHRvciBzaG91bGQgYmUgc2F2ZWQgdG8gYXZvaWQgYSBsZWFrLCBzaW5jZQotICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4KKyAgIGd6ZG9wZW4gZG9lcyBub3QgY2xvc2UgZmQgaWYgaXQgZmFpbHMuICBJZiB5b3UgYXJlIHVzaW5nIGZpbGVubygpIHRvIGdldCB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgRklMRSAqLCB0aGVuIHlvdSB3aWxsIGhhdmUgdG8gdXNlIGR1cCgpIHRvIGF2b2lkCisgICBkb3VibGUtY2xvc2UoKWluZyB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgQm90aCBnemNsb3NlKCkgYW5kIGZjbG9zZSgpIHdpbGwKKyAgIGNsb3NlIHRoZSBhc3NvY2lhdGVkIGZpbGUgZGVzY3JpcHRvciwgc28gdGhleSBuZWVkIHRvIGhhdmUgZGlmZmVyZW50IGZpbGUKKyAgIGRlc2NyaXB0b3JzLgogCiAgICAgIGd6ZG9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZXJlIHdhcyBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZQogICAgZ3pGaWxlIHN0YXRlLCBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzIHNwZWNpZmllZCAoYW4gJ3InLCAndycsIG9yICdhJyB3YXMgbm90CkBAIC0xMjM1LDE0ICsxMzEzLDI2IEBACiBaRVhURVJOIGludCBaRVhQT1JUIGd6cmVhZCBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CiAvKgogICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBJZgotICAgdGhlIGlucHV0IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCi0gICBieXRlcyBpbnRvIHRoZSBidWZmZXIuCisgICB0aGUgaW5wdXQgZmlsZSBpcyBub3QgaW4gZ3ppcCBmb3JtYXQsIGd6cmVhZCBjb3BpZXMgdGhlIGdpdmVuIG51bWJlciBvZgorICAgYnl0ZXMgaW50byB0aGUgYnVmZmVyIGRpcmVjdGx5IGZyb20gdGhlIGZpbGUuCiAKICAgICAgQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCBvZiBhIGd6aXAgc3RyZWFtIGluIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgY29udGludWUKLSAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0sIG9yIGZhaWxpbmcgdGhhdCwgcmVhZGluZyB0aGUgcmVzdAotICAgb2YgdGhlIGlucHV0IGZpbGUgZGlyZWN0bHkgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgVGhlIGVudGlyZSBpbnB1dCBmaWxlCi0gICB3aWxsIGJlIHJlYWQgaWYgZ3pyZWFkIGlzIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkCi0gICBsZW4uCisgICB0byByZWFkLCBsb29raW5nIGZvciBhbm90aGVyIGd6aXAgc3RyZWFtLiAgQW55IG51bWJlciBvZiBnemlwIHN0cmVhbXMgbWF5IGJlCisgICBjb25jYXRlbmF0ZWQgaW4gdGhlIGlucHV0IGZpbGUsIGFuZCB3aWxsIGFsbCBiZSBkZWNvbXByZXNzZWQgYnkgZ3pyZWFkKCkuCisgICBJZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGd6aXAgc3RyZWFtIGlzIGVuY291bnRlcmVkIGFmdGVyIGEgZ3ppcCBzdHJlYW0sCisgICB0aGF0IHJlbWFpbmluZyB0cmFpbGluZyBnYXJiYWdlIGlzIGlnbm9yZWQgKGFuZCBubyBlcnJvciBpcyByZXR1cm5lZCkuCisKKyAgICAgZ3pyZWFkIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBnemlwIGZpbGUgdGhhdCBpcyBiZWluZyBjb25jdXJyZW50bHkgd3JpdHRlbi4KKyAgIFVwb24gcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgaW5wdXQsIGd6cmVhZCB3aWxsIHJldHVybiB3aXRoIHRoZSBhdmFpbGFibGUKKyAgIGRhdGEuICBJZiB0aGUgZXJyb3IgY29kZSByZXR1cm5lZCBieSBnemVycm9yIGlzIFpfT0sgb3IgWl9CVUZfRVJST1IsIHRoZW4KKyAgIGd6Y2xlYXJlcnIgY2FuIGJlIHVzZWQgdG8gY2xlYXIgdGhlIGVuZCBvZiBmaWxlIGluZGljYXRvciBpbiBvcmRlciB0byBwZXJtaXQKKyAgIGd6cmVhZCB0byBiZSB0cmllZCBhZ2Fpbi4gIFpfT0sgaW5kaWNhdGVzIHRoYXQgYSBnemlwIHN0cmVhbSB3YXMgY29tcGxldGVkCisgICBvbiB0aGUgbGFzdCBnenJlYWQuICBaX0JVRl9FUlJPUiBpbmRpY2F0ZXMgdGhhdCB0aGUgaW5wdXQgZmlsZSBlbmRlZCBpbiB0aGUKKyAgIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLiAgTm90ZSB0aGF0IGd6cmVhZCBkb2VzIG5vdCByZXR1cm4gLTEgaW4gdGhlIGV2ZW50CisgICBvZiBhbiBpbmNvbXBsZXRlIGd6aXAgc3RyZWFtLiAgVGhpcyBlcnJvciBpcyBkZWZlcnJlZCB1bnRpbCBnemNsb3NlKCksIHdoaWNoCisgICB3aWxsIHJldHVybiBaX0JVRl9FUlJPUiBpZiB0aGUgbGFzdCBnenJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAKKyAgIHN0cmVhbS4gIEFsdGVybmF0aXZlbHksIGd6ZXJyb3IgY2FuIGJlIHVzZWQgYmVmb3JlIGd6Y2xvc2UgdG8gZGV0ZWN0IHRoaXMKKyAgIGNhc2UuCiAKICAgICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCwgbGVzcyB0aGFuCiAgICBsZW4gZm9yIGVuZCBvZiBmaWxlLCBvciAtMSBmb3IgZXJyb3IuCkBAIC0xMjU2LDcgKzEzNDYsNyBAQAogICAgZXJyb3IuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUVkEgZ3pwcmludGYgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOworWkVYVEVSTiBpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKIC8qCiAgICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSB1bmRlcgogICAgY29udHJvbCBvZiB0aGUgZm9ybWF0IHN0cmluZywgYXMgaW4gZnByaW50Zi4gIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgpAQCAtMTMwMSw3ICsxMzkxLDEwIEBACiBaRVhURVJOIGludCBaRVhQT1JUIGd6Z2V0YyBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZSBvciAtMQotICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KKyAgIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuICBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgbWFjcm8gZm9yIHNwZWVkLgorICAgQXMgc3VjaCwgaXQgZG9lcyBub3QgZG8gYWxsIG9mIHRoZSBjaGVja2luZyB0aGUgb3RoZXIgZnVuY3Rpb25zIGRvLiAgSS5lLgorICAgaXQgZG9lcyBub3QgY2hlY2sgdG8gc2VlIGlmIGZpbGUgaXMgTlVMTCwgbm9yIHdoZXRoZXIgdGhlIHN0cnVjdHVyZSBmaWxlCisgICBwb2ludHMgdG8gaGFzIGJlZW4gY2xvYmJlcmVkIG9yIG5vdC4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3p1bmdldGMgT0YoKGludCBjLCBnekZpbGUgZmlsZSkpOwpAQCAtMTM5Nyw5ICsxNDkwLDcgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pkaXJlY3QgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgogICAgICBSZXR1cm5zIHRydWUgKDEpIGlmIGZpbGUgaXMgYmVpbmcgY29waWVkIGRpcmVjdGx5IHdoaWxlIHJlYWRpbmcsIG9yIGZhbHNlCi0gICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4gIFRoaXMgc3RhdGUgY2FuIGNoYW5nZSBmcm9tCi0gICBmYWxzZSB0byB0cnVlIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0IGZpbGUgaWYgdGhlIGVuZCBvZiBhIGd6aXAgc3RyZWFtIGlzCi0gICByZWFjaGVkLCBidXQgaXMgZm9sbG93ZWQgYnkgZGF0YSB0aGF0IGlzIG5vdCBhbm90aGVyIGd6aXAgc3RyZWFtLgorICAgKDApIGlmIGZpbGUgaXMgYSBnemlwIHN0cmVhbSBiZWluZyBkZWNvbXByZXNzZWQuCiAKICAgICAgSWYgdGhlIGlucHV0IGZpbGUgaXMgZW1wdHksIGd6ZGlyZWN0KCkgd2lsbCByZXR1cm4gdHJ1ZSwgc2luY2UgdGhlIGlucHV0CiAgICBkb2VzIG5vdCBjb250YWluIGEgZ3ppcCBzdHJlYW0uCkBAIC0xNDA4LDYgKzE0OTksMTMgQEAKICAgIGNhdXNlIGJ1ZmZlcnMgdG8gYmUgYWxsb2NhdGVkIHRvIGFsbG93IHJlYWRpbmcgdGhlIGZpbGUgdG8gZGV0ZXJtaW5lIGlmIGl0CiAgICBpcyBhIGd6aXAgZmlsZS4gIFRoZXJlZm9yZSBpZiBnemJ1ZmZlcigpIGlzIHVzZWQsIGl0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlCiAgICBnemRpcmVjdCgpLgorCisgICAgIFdoZW4gd3JpdGluZywgZ3pkaXJlY3QoKSByZXR1cm5zIHRydWUgKDEpIGlmIHRyYW5zcGFyZW50IHdyaXRpbmcgd2FzCisgICByZXF1ZXN0ZWQgKCJ3VCIgZm9yIHRoZSBnem9wZW4oKSBtb2RlKSwgb3IgZmFsc2UgKDApIG90aGVyd2lzZS4gIChOb3RlOgorICAgZ3pkaXJlY3QoKSBpcyBub3QgbmVlZGVkIHdoZW4gd3JpdGluZy4gIFRyYW5zcGFyZW50IHdyaXRpbmcgbXVzdCBiZQorICAgZXhwbGljaXRseSByZXF1ZXN0ZWQsIHNvIHRoZSBhcHBsaWNhdGlvbiBhbHJlYWR5IGtub3dzIHRoZSBhbnN3ZXIuICBXaGVuCisgICBsaW5raW5nIHN0YXRpY2FsbHksIHVzaW5nIGd6ZGlyZWN0KCkgd2lsbCBpbmNsdWRlIGFsbCBvZiB0aGUgemxpYiBjb2RlIGZvcgorICAgZ3ppcCBmaWxlIHJlYWRpbmcgYW5kIGRlY29tcHJlc3Npb24sIHdoaWNoIG1heSBub3QgYmUgZGVzaXJlZC4pCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUICAgIGd6Y2xvc2UgT0YoKGd6RmlsZSBmaWxlKSk7CkBAIC0xNDE5LDcgKzE1MTcsOCBAQAogICAgbXVzdCBub3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGFsbG9jYXRpb24uCiAKICAgICAgZ3pjbG9zZSB3aWxsIHJldHVybiBaX1NUUkVBTV9FUlJPUiBpZiBmaWxlIGlzIG5vdCB2YWxpZCwgWl9FUlJOTyBvbiBhCi0gICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgb3IgWl9PSyBvbiBzdWNjZXNzLgorICAgZmlsZSBvcGVyYXRpb24gZXJyb3IsIFpfTUVNX0VSUk9SIGlmIG91dCBvZiBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZQorICAgbGFzdCByZWFkIGVuZGVkIGluIHRoZSBtaWRkbGUgb2YgYSBnemlwIHN0cmVhbSwgb3IgWl9PSyBvbiBzdWNjZXNzLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3IgT0YoKGd6RmlsZSBmaWxlKSk7CkBAIC0xNDU3LDYgKzE1NTYsNyBAQAogICAgZmlsZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5LgogKi8KIAorI2VuZGlmIC8qICFaX1NPTE8gKi8KIAogICAgICAgICAgICAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZnVuY3Rpb25zICovCiAKQEAgLTE0OTIsMTYgKzE1OTIsMTcgQEAKICAgICAgQ29tYmluZSB0d28gQWRsZXItMzIgY2hlY2tzdW1zIGludG8gb25lLiAgRm9yIHR3byBzZXF1ZW5jZXMgb2YgYnl0ZXMsIHNlcTEKICAgIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBBZGxlci0zMiBjaGVja3N1bXMgd2VyZSBjYWxjdWxhdGVkIGZvcgogICAgZWFjaCwgYWRsZXIxIGFuZCBhZGxlcjIuICBhZGxlcjMyX2NvbWJpbmUoKSByZXR1cm5zIHRoZSBBZGxlci0zMiBjaGVja3N1bSBvZgotICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4KKyAgIHNlcTEgYW5kIHNlcTIgY29uY2F0ZW5hdGVkLCByZXF1aXJpbmcgb25seSBhZGxlcjEsIGFkbGVyMiwgYW5kIGxlbjIuICBOb3RlCisgICB0aGF0IHRoZSB6X29mZl90IHR5cGUgKGxpa2Ugb2ZmX3QpIGlzIGEgc2lnbmVkIGludGVnZXIuICBJZiBsZW4yIGlzCisgICBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBoYXMgbm8gbWVhbmluZyBvciB1dGlsaXR5LgogKi8KIAogWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyICAgT0YoKHVMb25nIGNyYywgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKIC8qCiAgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQ1JDLTMyIHdpdGggdGhlIGJ5dGVzIGJ1ZlswLi5sZW4tMV0gYW5kIHJldHVybiB0aGUKICAgIHVwZGF0ZWQgQ1JDLTMyLiAgSWYgYnVmIGlzIFpfTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1aXJlZAotICAgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZvciB0aGUgY3JjLiAgUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzCi0gICBjb21wbGVtZW50KSBpcyBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlCi0gICBhcHBsaWNhdGlvbi4KKyAgIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MgY29tcGxlbWVudCkgaXMKKyAgIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUgYXBwbGljYXRpb24uCiAKICAgIFVzYWdlIGV4YW1wbGU6CiAKQEAgLTE1NDQsMTcgKzE2NDUsNDIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVhbV9zaXplKSk7CiAjZGVmaW5lIGRlZmxhdGVJbml0KHN0cm0sIGxldmVsKSBcCi0gICAgICAgIGRlZmxhdGVJbml0Xygoc3RybSksIChsZXZlbCksICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVJbml0KHN0cm0pIFwKLSAgICAgICAgaW5mbGF0ZUluaXRfKChzdHJtKSwgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgZGVmbGF0ZUluaXQyKHN0cm0sIGxldmVsLCBtZXRob2QsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSkgXAogICAgICAgICBkZWZsYXRlSW5pdDJfKChzdHJtKSwobGV2ZWwpLChtZXRob2QpLCh3aW5kb3dCaXRzKSwobWVtTGV2ZWwpLFwKLSAgICAgICAgICAgICAgICAgICAgICAoc3RyYXRlZ3kpLCAgICAgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlSW5pdDIoc3RybSwgd2luZG93Qml0cykgXAotICAgICAgICBpbmZsYXRlSW5pdDJfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykgXAogICAgICAgICBpbmZsYXRlQmFja0luaXRfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93KSwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCisKKyNpZm5kZWYgWl9TT0xPCisKKy8qIGd6Z2V0YygpIG1hY3JvIGFuZCBpdHMgc3VwcG9ydGluZyBmdW5jdGlvbiBhbmQgZXhwb3NlZCBkYXRhIHN0cnVjdHVyZS4gIE5vdGUKKyAqIHRoYXQgdGhlIHJlYWwgaW50ZXJuYWwgc3RhdGUgaXMgbXVjaCBsYXJnZXIgdGhhbiB0aGUgZXhwb3NlZCBzdHJ1Y3R1cmUuCisgKiBUaGlzIGFiYnJldmlhdGVkIHN0cnVjdHVyZSBleHBvc2VzIGp1c3QgZW5vdWdoIGZvciB0aGUgZ3pnZXRjKCkgbWFjcm8uICBUaGUKKyAqIHVzZXIgc2hvdWxkIG5vdCBtZXNzIHdpdGggdGhlc2UgZXhwb3NlZCBlbGVtZW50cywgc2luY2UgdGhlaXIgbmFtZXMgb3IKKyAqIGJlaGF2aW9yIGNvdWxkIGNoYW5nZSBpbiB0aGUgZnV0dXJlLCBwZXJoYXBzIGV2ZW4gY2FwcmljaW91c2x5LiAgVGhleSBjYW4KKyAqIG9ubHkgYmUgdXNlZCBieSB0aGUgZ3pnZXRjKCkgbWFjcm8uICBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4KKyAqLworc3RydWN0IGd6RmlsZV9zIHsKKyAgICB1bnNpZ25lZCBoYXZlOworICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7CisgICAgel9vZmY2NF90IHBvczsKK307CitaRVhURVJOIGludCBaRVhQT1JUIGd6Z2V0Y18gT0YoKGd6RmlsZSBmaWxlKSk7ICAvKiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisjaWZkZWYgWl9QUkVGSVhfU0VUCisjICB1bmRlZiB6X2d6Z2V0YworIyAgZGVmaW5lIHpfZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZWxzZQorIyAgZGVmaW5lIGd6Z2V0YyhnKSBcCisgICAgICAgICAgKChnKS0+aGF2ZSA/ICgoZyktPmhhdmUtLSwgKGcpLT5wb3MrKywgKigoZyktPm5leHQpKyspIDogZ3pnZXRjKGcpKQorI2VuZGlmCiAKIC8qIHByb3ZpZGUgNjQtYml0IG9mZnNldCBmdW5jdGlvbnMgaWYgX0xBUkdFRklMRTY0X1NPVVJDRSBkZWZpbmVkLCBhbmQvb3IKICAqIGNoYW5nZSB0aGUgcmVndWxhciBmdW5jdGlvbnMgdG8gNjQgYml0cyBpZiBfRklMRV9PRkZTRVRfQklUUyBpcyA2NCAoaWYKQEAgLTE1NjIsNyArMTY4OCw3IEBACiAgKiBmdW5jdGlvbnMgYXJlIGNoYW5nZWQgdG8gNjQgYml0cykgLS0gaW4gY2FzZSB0aGVzZSBhcmUgc2V0IG9uIHN5c3RlbXMKICAqIHdpdGhvdXQgbGFyZ2UgZmlsZSBzdXBwb3J0LCBfTEZTNjRfTEFSR0VGSUxFIG11c3QgYWxzbyBiZSB0cnVlCiAgKi8KLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmZGVmIFpfTEFSR0U2NAogICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgel9vZmY2NF90LCBpbnQpKTsKICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6RmlsZSkpOwpAQCAtMTU3MSwxNCArMTY5NywyMyBAQAogICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZjY0X3QpKTsKICNlbmRpZgogCi0jaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKLSMgIGRlZmluZSBnem9wZW4gZ3pvcGVuNjQKLSMgIGRlZmluZSBnenNlZWsgZ3pzZWVrNjQKLSMgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKLSMgIGRlZmluZSBnem9mZnNldCBnem9mZnNldDY0Ci0jICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lIGFkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKLSMgIGlmZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBkZWZpbmVkKFpfV0FOVDY0KQorIyAgaWZkZWYgWl9QUkVGSVhfU0VUCisjICAgIGRlZmluZSB6X2d6b3BlbiB6X2d6b3BlbjY0CisjICAgIGRlZmluZSB6X2d6c2VlayB6X2d6c2VlazY0CisjICAgIGRlZmluZSB6X2d6dGVsbCB6X2d6dGVsbDY0CisjICAgIGRlZmluZSB6X2d6b2Zmc2V0IHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgel9hZGxlcjMyX2NvbWJpbmUgel9hZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgel9jcmMzMl9jb21iaW5lIHpfY3JjMzJfY29tYmluZTY0CisjICBlbHNlCisjICAgIGRlZmluZSBnem9wZW4gZ3pvcGVuNjQKKyMgICAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAorIyAgICBkZWZpbmUgZ3p0ZWxsIGd6dGVsbDY0CisjICAgIGRlZmluZSBnem9mZnNldCBnem9mZnNldDY0CisjICAgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKKyMgICAgZGVmaW5lIGNyYzMyX2NvbWJpbmUgY3JjMzJfY29tYmluZTY0CisjICBlbmRpZgorIyAgaWZuZGVmIFpfTEFSR0U2NAogICAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOwogICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZl90LCBpbnQpKTsKICAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6RmlsZSkpOwpAQCAtMTU5NSw2ICsxNzMwLDEzIEBACiAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CiAjZW5kaWYKIAorI2Vsc2UgLyogWl9TT0xPICovCisKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworCisjZW5kaWYgLyogIVpfU09MTyAqLworCiAvKiBoYWNrIGZvciBidWdneSBjb21waWxlcnMgKi8KICNpZiAhZGVmaW5lZChaVVRJTF9IKSAmJiAhZGVmaW5lZChOT19EVU1NWV9ERUNMKQogICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307CkBAIC0xNjAzLDggKzE3NDUsMjEgQEAKIC8qIHVuZG9jdW1lbnRlZCBmdW5jdGlvbnMgKi8KIFpFWFRFUk4gY29uc3QgY2hhciAgICogWkVYUE9SVCB6RXJyb3IgICAgICAgICAgIE9GKChpbnQpKTsKIFpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlU3luY1BvaW50IE9GKCh6X3N0cmVhbXApKTsKLVpFWFRFUk4gY29uc3QgdUxvbmdmICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CitaRVhURVJOIGNvbnN0IHpfY3JjX3QgRkFSICogWkVYUE9SVCBnZXRfY3JjX3RhYmxlICAgIE9GKCh2b2lkKSk7CiBaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZSBPRigoel9zdHJlYW1wLCBpbnQpKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVhbXApKTsKK1pFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBkZWZsYXRlUmVzZXRLZWVwIE9GKCh6X3N0cmVhbXApKTsKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoWl9TT0xPKQorWkVYVEVSTiBnekZpbGUgICAgICAgICBaRVhQT1JUIGd6b3Blbl93IE9GKChjb25zdCB3Y2hhcl90ICpwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2RlKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUVkEgZ3p2cHJpbnRmIFpfQVJHKChnekZpbGUgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IHZhKSk7CisjICBlbmRpZgorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIubWFwIGIvTW9kdWxlcy96bGliL3psaWIubWFwCmluZGV4IGYyODJkMzYuLjU1YzY2NDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLm1hcAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKQEAgLTY2LDMgKzY2LDE4IEBACiAgICAgZ3pjbG9zZV9yOwogICAgIGd6Y2xvc2VfdzsKIH0gWkxJQl8xLjIuMy40OworCitaTElCXzEuMi41LjEgeworICAgIGRlZmxhdGVQZW5kaW5nOworfSBaTElCXzEuMi4zLjU7CisKK1pMSUJfMS4yLjUuMiB7CisgICAgZGVmbGF0ZVJlc2V0S2VlcDsKKyAgICBnemdldGNfOworICAgIGluZmxhdGVSZXNldEtlZXA7Cit9IFpMSUJfMS4yLjUuMTsKKworWkxJQl8xLjIuNy4xIHsKKyAgICBpbmZsYXRlR2V0RGljdGlvbmFyeTsKKyAgICBnenZwcmludGY7Cit9IFpMSUJfMS4yLjUuMjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96dXRpbC5jIGIvTW9kdWxlcy96bGliL3p1dGlsLmMKaW5kZXggODk4ZWQzNC4uMjNkMmViZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3p1dGlsLmMKKysrIGIvTW9kdWxlcy96bGliL3p1dGlsLmMKQEAgLTEsMTcgKzEsMjAgQEAKIC8qIHp1dGlsLmMgLS0gdGFyZ2V0IGRlcGVuZGVudCB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKIC8qIEAoIykgJElkJCAqLwogCiAjaW5jbHVkZSAienV0aWwuaCIKKyNpZm5kZWYgWl9TT0xPCisjICBpbmNsdWRlICJnemd1dHMuaCIKKyNlbmRpZgogCiAjaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSAgICAgIHtpbnQgZHVtbXk7fTsgLyogZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2VuZGlmCiAKLWNvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF0gPSB7Cit6X2NvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF0gPSB7CiAibmVlZCBkaWN0aW9uYXJ5IiwgICAgIC8qIFpfTkVFRF9ESUNUICAgICAgIDIgICovCiAic3RyZWFtIGVuZCIsICAgICAgICAgIC8qIFpfU1RSRUFNX0VORCAgICAgIDEgICovCiAiIiwgICAgICAgICAgICAgICAgICAgIC8qIFpfT0sgICAgICAgICAgICAgIDAgICovCkBAIC04NSwyNyArODgsMjcgQEAKICNpZmRlZiBGQVNURVNUCiAgICAgZmxhZ3MgKz0gMUwgPDwgMjE7CiAjZW5kaWYKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSB8fCBkZWZpbmVkKFpfSEFWRV9TVERBUkdfSCkKICMgIGlmZGVmIE5PX3ZzbnByaW50ZgotICAgICAgICBmbGFncyArPSAxTCA8PCAyNTsKKyAgICBmbGFncyArPSAxTCA8PCAyNTsKICMgICAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZWxzZQotICAgICAgICBmbGFncyArPSAxTCA8PCAyNDsKKyAgICBmbGFncyArPSAxTCA8PCAyNDsKICMgIGlmZGVmIE5PX3NucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZWxzZQogIyAgICBpZmRlZiBIQVNfc25wcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKQEAgLTE4MSw2ICsxODQsNyBAQAogfQogI2VuZGlmCiAKKyNpZm5kZWYgWl9TT0xPCiAKICNpZmRlZiBTWVMxNkJJVAogCkBAIC0zMTYsMyArMzIwLDUgQEAKIH0KIAogI2VuZGlmIC8qIE1ZX1pDQUxMT0MgKi8KKworI2VuZGlmIC8qICFaX1NPTE8gKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96dXRpbC5oIGIvTW9kdWxlcy96bGliL3p1dGlsLmgKaW5kZXggMjU4ZmE4OC4uMjRhYjA2YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3p1dGlsLmgKKysrIGIvTW9kdWxlcy96bGliL3p1dGlsLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6dXRpbC5oIC0tIGludGVybmFsIGludGVyZmFjZSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTMsNyArMTMsNyBAQAogI2lmbmRlZiBaVVRJTF9ICiAjZGVmaW5lIFpVVElMX0gKIAotI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpICYmICFkZWZpbmVkKE5PX1ZJWikKKyNpZmRlZiBIQVZFX0hJRERFTgogIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKICNlbHNlCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTApAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5jbHVkZSAiemxpYi5oIgogCi0jaWZkZWYgU1REQworI2lmIGRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgaWYgIShkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIGRlZmluZWQoX01TQ19WRVIpKQogIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4KICMgIGVuZGlmCkBAIC0yOSw2ICsyOSwxMCBAQAogIyAgaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAorI2lmZGVmIFpfU09MTworICAgdHlwZWRlZiBsb25nIHB0cmRpZmZfdDsgIC8qIGd1ZXNzIC0tIHdpbGwgYmUgY2F1Z2h0IGlmIGd1ZXNzIGlzIHdyb25nICovCisjZW5kaWYKKwogI2lmbmRlZiBsb2NhbAogIyAgZGVmaW5lIGxvY2FsIHN0YXRpYwogI2VuZGlmCkBAIC00MCwxMyArNDQsMTMgQEAKIHR5cGVkZWYgdXNoIEZBUiB1c2hmOwogdHlwZWRlZiB1bnNpZ25lZCBsb25nICB1bGc7CiAKLWV4dGVybiBjb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLworZXh0ZXJuIHpfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXTsgLyogaW5kZXhlZCBieSAyLXpsaWJfZXJyb3IgKi8KIC8qIChzaXplIGdpdmVuIHRvIGF2b2lkIHNpbGx5IHdhcm5pbmdzIHdpdGggVmlzdWFsIEMrKykgKi8KIAogI2RlZmluZSBFUlJfTVNHKGVycikgel9lcnJtc2dbWl9ORUVEX0RJQ1QtKGVycildCiAKICNkZWZpbmUgRVJSX1JFVFVSTihzdHJtLGVycikgXAotICByZXR1cm4gKHN0cm0tPm1zZyA9IChjaGFyKilFUlJfTVNHKGVyciksIChlcnIpKQorICByZXR1cm4gKHN0cm0tPm1zZyA9IEVSUl9NU0coZXJyKSwgKGVycikpCiAvKiBUbyBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgc3RhdGUgaXMga25vd24gdG8gYmUgdmFsaWQgKi8KIAogICAgICAgICAvKiBjb21tb24gY29uc3RhbnRzICovCkBAIC03OCwxNiArODIsMTggQEAKIAogI2lmIGRlZmluZWQoTVNET1MpIHx8IChkZWZpbmVkKFdJTkRPV1MpICYmICFkZWZpbmVkKFdJTjMyKSkKICMgIGRlZmluZSBPU19DT0RFICAweDAwCi0jICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQotIyAgICBpZiAoX19TVERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9fKSkKLSAgICAgICAvKiBBbGxvdyBjb21waWxhdGlvbiB3aXRoIEFOU0kga2V5d29yZHMgb25seSBlbmFibGVkICovCi0gICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKLSAgICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOwotIyAgICBlbHNlCi0jICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaWYgZGVmaW5lZChfX1RVUkJPQ19fKSB8fCBkZWZpbmVkKF9fQk9STEFORENfXykKKyMgICAgICBpZiAoX19TVERDX18gPT0gMSkgJiYgKGRlZmluZWQoX19MQVJHRV9fKSB8fCBkZWZpbmVkKF9fQ09NUEFDVF9fKSkKKyAgICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KKyAgICAgICAgIHZvaWQgX0NkZWNsIGZhcmZyZWUoIHZvaWQgKmJsb2NrICk7CisgICAgICAgICB2b2lkICpfQ2RlY2wgZmFybWFsbG9jKCB1bnNpZ25lZCBsb25nIG5ieXRlcyApOworIyAgICAgIGVsc2UKKyMgICAgICAgIGluY2x1ZGUgPGFsbG9jLmg+CisjICAgICAgZW5kaWYKKyMgICAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KKyMgICAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgICAgZW5kaWYKLSMgIGVsc2UgLyogTVNDIG9yIERKR1BQICovCi0jICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0xMDcsMTggKzExMywyMCBAQAogCiAjaWZkZWYgT1MyCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwNgotIyAgaWZkZWYgTV9JODYKKyMgIGlmIGRlZmluZWQoTV9JODYpICYmICFkZWZpbmVkKFpfU09MTykKICMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKICNpZiBkZWZpbmVkKE1BQ09TKSB8fCBkZWZpbmVkKFRBUkdFVF9PU19NQUMpCiAjICBkZWZpbmUgT1NfQ09ERSAgMHgwNwotIyAgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcwotIyAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KLSMgIGVsc2UKLSMgICAgaWZuZGVmIGZkb3BlbgotIyAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCisjICAgICAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmRvcGVuICovCisjICAgIGVsc2UKKyMgICAgICBpZm5kZWYgZmRvcGVuCisjICAgICAgICBkZWZpbmUgZmRvcGVuKGZkLG1vZGUpIE5VTEwgLyogTm8gZmRvcGVuKCkgKi8KKyMgICAgICBlbmRpZgogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgpAQCAtMTUzLDE0ICsxNjEsMTUgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiAhZGVmaW5lZChNU0RPUykKICAgI3ByYWdtYSB3YXJuIC04MDA0CiAgICNwcmFnbWEgd2FybiAtODAwOAogICAjcHJhZ21hIHdhcm4gLTgwNjYKICNlbmRpZgogCiAvKiBwcm92aWRlIHByb3RvdHlwZXMgZm9yIHRoZXNlIHdoZW4gYnVpbGRpbmcgemxpYiB3aXRob3V0IExGUyAqLwotI2lmICFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiBcCisgICAgKCFkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IF9MRlM2NF9MQVJHRUZJTEUtMCA9PSAwKQogICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CiAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CiAjZW5kaWYKQEAgLTE3Nyw0MiArMTg2LDcgQEAKIAogICAgICAgICAgLyogZnVuY3Rpb25zICovCiAKLSNpZiBkZWZpbmVkKFNUREM5OSkgfHwgKGRlZmluZWQoX19UVVJCT0NfXykgJiYgX19UVVJCT0NfXyA+PSAweDU1MCkKLSMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCi0jICBpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCi0jICBlbmRpZgotI2VuZGlmCi0jaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICBpZmRlZiBNU0RPUwotICAgICAvKiB2c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKLSAgICAgICAgYnV0IGZvciBub3cgd2UganVzdCBhc3N1bWUgaXQgZG9lc24ndC4gKi8KLSMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgZW5kaWYKLSMgIGlmZGVmIF9fVFVSQk9DX18KLSMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgZW5kaWYKLSMgIGlmZGVmIFdJTjMyCi0gICAgIC8qIEluIFdpbjMyLCB2c25wcmludGYgaXMgYXZhaWxhYmxlIGFzIHRoZSAibm9uLUFOU0kiIF92c25wcmludGYuICovCi0jICAgIGlmICFkZWZpbmVkKHZzbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQotIyAgICAgIGlmICFkZWZpbmVkKF9NU0NfVkVSKSB8fCAoIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSIDwgMTUwMCApCi0jICAgICAgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZmRlZiBfX1NBU0MKLSMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgZW5kaWYKLSNlbmRpZgotI2lmZGVmIFZNUwotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKHB5cikKKyNpZiBkZWZpbmVkKHB5cikgfHwgZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgTk9fTUVNQ1BZCiAjZW5kaWYKICNpZiBkZWZpbmVkKFNNQUxMX01FRElVTSkgJiYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fU0NfXykKQEAgLTI2MSwxNCArMjM1LDE5IEBACiAjICBkZWZpbmUgVHJhY2VjdihjLHgpCiAjZW5kaWYKIAotCi12b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKLXZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjaWZuZGVmIFpfU09MTworICAgdm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7CisgICB2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOworI2VuZGlmCiAKICNkZWZpbmUgWkFMTE9DKHN0cm0sIGl0ZW1zLCBzaXplKSBcCiAgICAgICAgICAgICgqKChzdHJtKS0+emFsbG9jKSkoKHN0cm0pLT5vcGFxdWUsIChpdGVtcyksIChzaXplKSkKICNkZWZpbmUgWkZSRUUoc3RybSwgYWRkcikgICgqKChzdHJtKS0+emZyZWUpKSgoc3RybSktPm9wYXF1ZSwgKHZvaWRwZikoYWRkcikpCiAjZGVmaW5lIFRSWV9GUkVFKHMsIHApIHtpZiAocCkgWkZSRUUocywgcCk7fQogCisvKiBSZXZlcnNlIHRoZSBieXRlcyBpbiBhIDMyLWJpdCB2YWx1ZSAqLworI2RlZmluZSBaU1dBUDMyKHEpICgoKChxKSA+PiAyNCkgJiAweGZmKSArICgoKHEpID4+IDgpICYgMHhmZjAwKSArIFwKKyAgICAgICAgICAgICAgICAgICAgKCgocSkgJiAweGZmMDApIDw8IDgpICsgKCgocSkgJiAweGZmKSA8PCAyNCkpCisKICNlbmRpZiAvKiBaVVRJTF9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWJtb2R1bGUuYyBiL01vZHVsZXMvemxpYm1vZHVsZS5jCmluZGV4IGU3MTg3OTUuLmJmOGM4ZTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYm1vZHVsZS5jCisrKyBiL01vZHVsZXMvemxpYm1vZHVsZS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgInpsaWIuaCIKIAorCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAjaW5jbHVkZSAicHl0aHJlYWQuaCIKICAgICAjZGVmaW5lIEVOVEVSX1pMSUIob2JqKSBcCkBAIC04MCw2ICs4MSwxMyBAQAogICAgICAgICBQeUVycl9Gb3JtYXQoWmxpYkVycm9yLCAiRXJyb3IgJWQgJXM6ICUuMjAwcyIsIGVyciwgbXNnLCB6bXNnKTsKIH0KIAorLypbY2xpbmljXQorbW9kdWxlIHpsaWIKK2NsYXNzIHpsaWIuQ29tcHJlc3MKK2NsYXNzIHpsaWIuRGVjb21wcmVzcworW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKIFB5RG9jX1NUUlZBUihjb21wcmVzc29ial9fZG9jX18sCiAiY29tcHJlc3NvYmoobGV2ZWw9LTEsIG1ldGhvZD1ERUZMQVRFRCwgd2JpdHM9MTUsIG1lbWxldmVsPTgsXG4iCiAiICAgICAgICAgICAgc3RyYXRlZ3k9Wl9ERUZBVUxUX1NUUkFURUdZWywgemRpY3RdKVxuIgpAQCAtMTMyLDQwICsxNDAsMTE1IEBACiAgICAgfQogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgc2VsZi0+bG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICBpZiAoc2VsZi0+bG9jayA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwgIlVuYWJsZSB0byBhbGxvY2F0ZSBsb2NrIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICNlbmRpZgogICAgIHJldHVybiBzZWxmOwogfQogCi1QeURvY19TVFJWQVIoY29tcHJlc3NfX2RvY19fLAotImNvbXByZXNzKHN0cmluZ1ssIGxldmVsXSkgLS0gUmV0dXJuZWQgY29tcHJlc3NlZCBzdHJpbmcuXG4iCitzdGF0aWMgdm9pZCoKK1B5WmxpYl9NYWxsb2Modm9pZHBmIGN0eCwgdUludCBpdGVtcywgdUludCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDogdGhlIEdJTCBpcyBub3QgaGVsZCB3aGVuCisgICAgICAgaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkgYXJlIGNhbGxlZCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1B5WmxpYl9GcmVlKHZvaWRwZiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pY10KKworemxpYi5jb21wcmVzcworICAgIGJ5dGVzOiBQeV9idWZmZXIKKyAgICAgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC4KKyAgICBbCisgICAgbGV2ZWw6IGludAorICAgICAgICBDb21wcmVzc2lvbiBsZXZlbCwgaW4gMC05LgorICAgIF0KKyAgICAvCisKK1JldHVybnMgY29tcHJlc3NlZCBzdHJpbmcuCisKK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHpsaWJfY29tcHJlc3NfX2RvY19fLAorImNvbXByZXNzKGJ5dGVzLCBbbGV2ZWxdKVxuIgorIlJldHVybnMgY29tcHJlc3NlZCBzdHJpbmcuXG4iCiAiXG4iCi0iT3B0aW9uYWwgYXJnIGxldmVsIGlzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCwgaW4gMC05LiIpOworIiAgYnl0ZXNcbiIKKyIgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC5cbiIKKyIgIGxldmVsXG4iCisiICAgIENvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX2NvbXByZXNzX19kb2NfX30sCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9jb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBncm91cF9yaWdodF8xLCBpbnQgbGV2ZWwpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnl0ZXM7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIGludCBsZXZlbCA9IDA7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJmJ5dGVzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjb21wcmVzcyIsICZieXRlcywgJmxldmVsKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiemxpYi5jb21wcmVzcyByZXF1aXJlcyAxIHRvIDIgYXJndW1lbnRzIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9jb21wcmVzc19pbXBsKG1vZHVsZSwgJmJ5dGVzLCBncm91cF9yaWdodF8xLCBsZXZlbCk7CisKKyAgICAvKiBDbGVhbnVwIGZvciBieXRlcyAqLworICAgIGlmIChieXRlcy5idWYpCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnl0ZXMpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmJ5dGVzLCBpbnQgZ3JvdXBfcmlnaHRfMSwgaW50IGxldmVsKQorLypbY2xpbmljIGNoZWNrc3VtOiBmNDkwNzA4ZWZmODRiZTY1MmI1ZWJlN2ZlNjIyYWI3M2FjMTJjODg4XSovCiB7CiAgICAgUHlPYmplY3QgKlJldHVyblZhbCA9IE5VTEw7Ci0gICAgUHlfYnVmZmVyIHBpbnB1dDsKICAgICBCeXRlICppbnB1dCwgKm91dHB1dCA9IE5VTEw7CiAgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKLSAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBlcnI7CisgICAgaW50IGVycjsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICAvKiByZXF1aXJlIFB5dGhvbiBzdHJpbmcgb2JqZWN0LCBvcHRpb25hbCAnbGV2ZWwnIGFyZyAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8aTpjb21wcmVzcyIsICZwaW5wdXQsICZsZXZlbCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghZ3JvdXBfcmlnaHRfMSkKKyAgICAgICAgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CiAKLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpYnl0ZXMtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGJ5dGVzLT5idWY7CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClieXRlcy0+bGVuOwogCiAgICAgenN0LmF2YWlsX291dCA9IGxlbmd0aCArIGxlbmd0aC8xMDAwICsgMTIgKyAxOwogCi0gICAgb3V0cHV0ID0gKEJ5dGUqKW1hbGxvYyh6c3QuYXZhaWxfb3V0KTsKKyAgICBvdXRwdXQgPSAoQnl0ZSopUHlNZW1fTWFsbG9jKHpzdC5hdmFpbF9vdXQpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNvbXByZXNzIGRhdGEiKTsKQEAgLTE3NSw4ICsyNTgsOSBAQAogICAgIC8qIFBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybi4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgICAgICAgd2UgY2xlYW4gdXAgbWFsbG9jcyAmIElOQ1JFRnMuICovCiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKW91dHB1dDsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwpAQCAtMjE3LDEyICszMDEsNTMgQEAKICAgICAgICAgemxpYl9lcnJvcih6c3QsIGVyciwgIndoaWxlIGZpbmlzaGluZyBjb21wcmVzc2lvbiIpOwogCiAgZXJyb3I6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKLSAgICBmcmVlKG91dHB1dCk7CisgICAgUHlNZW1fRnJlZShvdXRwdXQpOwogCiAgICAgcmV0dXJuIFJldHVyblZhbDsKIH0KIAorLypbcHl0aG9uXQorCitjbGFzcyB1aW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICBjb252ZXJ0ZXIgPSAndWludF9jb252ZXJ0ZXInCisKK2NsYXNzIGNvbXBvYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gImNvbXBvYmplY3QgKiIKKworW3B5dGhvbl0qLworLypbcHl0aG9uIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKK3N0YXRpYyBpbnQKK3VpbnRfY29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnB0cikKK3sKKyAgICBsb25nIHZhbDsKKyAgICB1bnNpZ25lZCBsb25nIHV2YWw7CisKKyAgICB2YWwgPSBQeUxvbmdfQXNMb25nKG9iaik7CisgICAgaWYgKHZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHV2YWwgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcob2JqKTsKKyAgICAgICAgaWYgKHV2YWwgPT0gKHVuc2lnbmVkIGxvbmcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAodXZhbCA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGludCB0b28gbGFyZ2UgZm9yIEMgdW5zaWduZWQgaW50Iik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHZhbCA8IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB1dmFsID0gKHVuc2lnbmVkIGxvbmcpdmFsOworICAgIH0KKworICAgICoodW5zaWduZWQgaW50ICopcHRyID0gUHlfU0FGRV9ET1dOQ0FTVCh1dmFsLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBpbnQpOworICAgIHJldHVybiAxOworfQorCiBQeURvY19TVFJWQVIoZGVjb21wcmVzc19fZG9jX18sCiAiZGVjb21wcmVzcyhzdHJpbmdbLCB3Yml0c1ssIGJ1ZnNpemVdXSkgLS0gUmV0dXJuIGRlY29tcHJlc3NlZCBzdHJpbmcuXG4iCiAiXG4iCkBAIC0yMzgsMzIgKzM2MywzMyBAQAogICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CiAgICAgaW50IGVycjsKICAgICBpbnQgd3NpemU9REVGX1dCSVRTOwotICAgIFB5X3NzaXplX3Qgcl9zdHJsZW49REVGQVVMVEFMTE9DOworICAgIHVuc2lnbmVkIGludCBidWZzaXplID0gREVGQVVMVEFMTE9DLCBuZXdfYnVmc2l6ZTsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGluOmRlY29tcHJlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlucHV0LCAmd3NpemUsICZyX3N0cmxlbikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpTyY6ZGVjb21wcmVzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwaW5wdXQsICZ3c2l6ZSwgdWludF9jb252ZXJ0ZXIsICZidWZzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpcGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBsZW5ndGggPSAodW5zaWduZWQgaW50KXBpbnB1dC5sZW47CiAKLSAgICBpZiAocl9zdHJsZW4gPD0gMCkKLSAgICAgICAgcl9zdHJsZW4gPSAxOworICAgIGlmIChidWZzaXplID09IDApCisgICAgICAgIGJ1ZnNpemUgPSAxOwogCiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwotICAgIHpzdC5hdmFpbF9vdXQgPSByX3N0cmxlbjsKKyAgICB6c3QuYXZhaWxfb3V0ID0gYnVmc2l6ZTsKIAotICAgIGlmICghKHJlc3VsdF9zdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJfc3RybGVuKSkpCisgICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmc2l6ZSkpKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgenN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgenN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgenN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgenN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgenN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgenN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKTsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgZXJyID0gaW5mbGF0ZUluaXQyKCZ6c3QsIHdzaXplKTsKQEAgLTMwMywxNCArNDI5LDE4IEBACiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZShaX09LKToKICAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBtZW1vcnkgKi8KLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIHJfc3RybGVuIDw8IDEpIDwgMCkgeworICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gYnVmc2l6ZSA8PCAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gVUlOVF9NQVg7CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHRfc3RyLCBuZXdfYnVmc2l6ZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgenN0Lm5leHRfb3V0ID0KLSAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpICsgcl9zdHJsZW47Ci0gICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gcl9zdHJsZW47Ci0gICAgICAgICAgICByX3N0cmxlbiA9IHJfc3RybGVuIDw8IDE7CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKSArIGJ1ZnNpemU7CisgICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gYnVmc2l6ZTsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmc2l6ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKQEAgLTM0MCw3ICs0NzAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5WmxpYl9jb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgY29tcG9iamVjdCAqc2VsZjsKKyAgICBjb21wb2JqZWN0ICpzZWxmID0gTlVMTDsKICAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBtZXRob2Q9REVGTEFURUQ7CiAgICAgaW50IHdiaXRzPU1BWF9XQklUUywgbWVtTGV2ZWw9REVGX01FTV9MRVZFTCwgc3RyYXRlZ3k9MCwgZXJyOwogICAgIFB5X2J1ZmZlciB6ZGljdDsKQEAgLTM1MywxMSArNDgzLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1lbUxldmVsLCAmc3RyYXRlZ3ksICZ6ZGljdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKHpkaWN0LmJ1ZiAhPSBOVUxMICYmIChzaXplX3QpemRpY3QubGVuID4gVUlOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiemRpY3QgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKICAgICBzZWxmID0gbmV3Y29tcG9iamVjdCgmQ29tcHR5cGUpOwogICAgIGlmIChzZWxmPT1OVUxMKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIHNlbGYtPnpzdC56YWxsb2MgPSAoYWxsb2NfZnVuYylOVUxMOwotICAgIHNlbGYtPnpzdC56ZnJlZSA9IChmcmVlX2Z1bmMpWl9OVUxMOworICAgIHNlbGYtPnpzdC5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPnpzdC56YWxsb2MgPSBQeVpsaWJfTWFsbG9jOworICAgIHNlbGYtPnpzdC56ZnJlZSA9IFB5WmxpYl9GcmVlOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gTlVMTDsKICAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAwOwogICAgIGVyciA9IGRlZmxhdGVJbml0Migmc2VsZi0+enN0LCBsZXZlbCwgbWV0aG9kLCB3Yml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KTsKQEAgLTM2Nyw3ICs1MDQsOCBAQAogICAgICAgICBpZiAoemRpY3QuYnVmID09IE5VTEwpIHsKICAgICAgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZzZWxmLT56c3QsIHpkaWN0LmJ1ZiwgemRpY3QubGVuKTsKKyAgICAgICAgICAgIGVyciA9IGRlZmxhdGVTZXREaWN0aW9uYXJ5KCZzZWxmLT56c3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZGljdC5idWYsICh1bnNpZ25lZCBpbnQpemRpY3QubGVuKTsKICAgICAgICAgICAgIHN3aXRjaCAoZXJyKSB7CiAgICAgICAgICAgICBjYXNlIChaX09LKToKICAgICAgICAgICAgICAgICBnb3RvIHN1Y2Nlc3M7CkBAIC00MjAsOCArNTU4LDkgQEAKICAgICBzZWxmID0gbmV3Y29tcG9iamVjdCgmRGVjb21wdHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIHNlbGYtPnpzdC56YWxsb2MgPSAoYWxsb2NfZnVuYylOVUxMOwotICAgIHNlbGYtPnpzdC56ZnJlZSA9IChmcmVlX2Z1bmMpWl9OVUxMOworICAgIHNlbGYtPnpzdC5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPnpzdC56YWxsb2MgPSBQeVpsaWJfTWFsbG9jOworICAgIHNlbGYtPnpzdC56ZnJlZSA9IFB5WmxpYl9GcmVlOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gTlVMTDsKICAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAwOwogICAgIGlmICh6ZGljdCAhPSBOVUxMKSB7CkBAIC00OTAsNyArNjI5LDcgQEAKIHsKICAgICBpbnQgZXJyOwogICAgIHVuc2lnbmVkIGludCBpbnBsZW47Ci0gICAgUHlfc3NpemVfdCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IERFRkFVTFRBTExPQywgbmV3X2xlbmd0aDsKICAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKICAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0OwpAQCAtNDk4LDEzICs2MzcsMTMgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6Y29tcHJlc3MiLCAmcGlucHV0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KXBpbnB1dC5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKICAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKICAgICB9CiAgICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47CisgICAgaW5wbGVuID0gKHVuc2lnbmVkIGludClwaW5wdXQubGVuOwogCiAgICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKICAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKQEAgLTUyNCwxNSArNjYzLDE4IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgWl9OT19GTFVTSCk7CkBAIC01NTAsOCArNjkyLDcgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CkBAIC01NzMsNyArNzE0LDcgQEAKICAgICAgICAgICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVudXNlZF9kYXRhKTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3X2RhdGE7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+enN0LmF2YWlsX2luID4gUFlfU1NJWkVfVF9NQVggLSBvbGRfc2l6ZSkgeworICAgICAgICAgICAgaWYgKChzaXplX3Qpc2VsZi0+enN0LmF2YWlsX2luID4gKHNpemVfdClVSU5UX01BWCAtIChzaXplX3Qpb2xkX3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTYwNCw1NSArNzQ1LDk1IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhLCBtYXhfbGVuZ3RoKSAtLSBSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkXG4iCi0idmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKKy8qW2NsaW5pY10KKworemxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3MKKworICAgIHNlbGY6IGNvbXBvYmplY3QKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgICAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy4KKyAgICBtYXhfbGVuZ3RoOiB1aW50ID0gMAorICAgICAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluCisgICAgICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLgorICAgIC8KKworUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpbgoraW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljXSovCisKK1B5RG9jX1NUUlZBUih6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19fZG9jX18sCisiZGVjb21wcmVzcyhkYXRhLCBtYXhfbGVuZ3RoPTApXG4iCisiUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLlxuIgorIlxuIgorIiAgZGF0YVxuIgorIiAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy5cbiIKKyIgIG1heF9sZW5ndGhcbiIKKyIgICAgVGhlIG1heGltdW0gYWxsb3dhYmxlIGxlbmd0aCBvZiB0aGUgZGVjb21wcmVzc2VkIGRhdGEuXG4iCisiICAgIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgorIiAgICB0aGUgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZS5cbiIKICJcbiIKICJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgogImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCi0iQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy5cbiIKLSJJZiB0aGUgbWF4X2xlbmd0aCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlXG4iCi0ibm8gbG9uZ2VyIHRoYW4gbWF4X2xlbmd0aC4gIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgotInRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLiIpOworIkNhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0RFQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywgemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9vYmpkZWNvbXByZXNzKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbChjb21wb2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgZXJyLCBtYXhfbGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaW5wbGVuOwotICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhOworICAgIHVuc2lnbmVkIGludCBtYXhfbGVuZ3RoID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSp8TyY6ZGVjb21wcmVzcyIsCisgICAgICAgICZkYXRhLCB1aW50X2NvbnZlcnRlciwgJm1heF9sZW5ndGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3NfaW1wbCgoY29tcG9iamVjdCAqKXNlbGYsICZkYXRhLCBtYXhfbGVuZ3RoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEuYnVmKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCkKKy8qW2NsaW5pYyBjaGVja3N1bTogMzU5OTY5ODk0OGY1YTcxMmY1YTgzMDk0OTE2NzFjYzJjZTk2OWQyY10qLworeworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IG9sZF9sZW5ndGgsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKICAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwotICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmRlY29tcHJlc3MiLCAmcGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4X2xlbmd0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKLSAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47Ci0gICAgaWYgKG1heF9sZW5ndGggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm1heF9sZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBsaW1pdCBhbW91bnQgb2YgZGF0YSBhbGxvY2F0ZWQgdG8gbWF4X2xlbmd0aCAqLwogICAgIGlmIChtYXhfbGVuZ3RoICYmIGxlbmd0aCA+IG1heF9sZW5ndGgpCiAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAgICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCiAgICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBpbnBsZW47Ci0gICAgc2VsZi0+enN0Lm5leHRfaW4gPSBpbnB1dDsKKyAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKKyAgICBzZWxmLT56c3QubmV4dF9pbiA9IGRhdGEtPmJ1ZjsKICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwogICAgIHNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKIApAQCAtNjY3LDEyICs4NDgsMjEgQEAKICAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9Ci0gICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCYoc2VsZi0+enN0KSwgemRpY3RfYnVmLmJ1ZiwgemRpY3RfYnVmLmxlbik7CisKKyAgICAgICAgaWYgKChzaXplX3QpemRpY3RfYnVmLmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0X2J1Zi5idWYsICh1bnNpZ25lZCBpbnQpemRpY3RfYnVmLmxlbik7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CiAgICAgICAgIGlmIChlcnIgIT0gWl9PSykgewogICAgICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGRlY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgLyogUmVwZWF0IHRoZSBjYWxsIHRvIGluZmxhdGUuICovCkBAIC02OTgsOCArODg4LDcgQEAKICAgICAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGgpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KQEAgLTczMywxNCArOTIyLDExIEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CiAgICAgTEVBVkVfWkxJQihzZWxmKTsKLSBlcnJvcl9vdXRlcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwogICAgIHJldHVybiBSZXRWYWw7CiB9CiAKQEAgLTc1NSw3ICs5NDEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5WmxpYl9mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgZXJyLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGQVVMVEFMTE9DLCBuZXdfbGVuZ3RoOwogICAgIFB5T2JqZWN0ICpSZXRWYWw7CiAgICAgaW50IGZsdXNobW9kZSA9IFpfRklOSVNIOwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwpAQCAtNzg2LDE1ICs5NzMsMTggQEAKICAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQogICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBmbHVzaG1vZGUpOwpAQCAtODI3LDggKzEwMTcsNyBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihSZXRWYWwpOwotICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgIH0KIAogIGVycm9yOgpAQCAtODM4LDExICsxMDI3LDI1IEBACiB9CiAKICNpZmRlZiBIQVZFX1pMSUJfQ09QWQotUHlEb2NfU1RSVkFSKGNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworLypbY2xpbmljXQoremxpYi5Db21wcmVzcy5jb3B5CisKKyAgICBzZWxmOiBjb21wb2JqZWN0CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHpsaWJfQ29tcHJlc3NfY29weV9fZG9jX18sCisiY29weSgpXG4iCisiUmV0dXJuIGEgY29weSBvZiB0aGUgY29tcHJlc3Npb24gb2JqZWN0LiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbil6bGliX0NvbXByZXNzX2NvcHksIE1FVEhfTk9BUkdTLCB6bGliX0NvbXByZXNzX2NvcHlfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0NvbXByZXNzX2NvcHkoY29tcG9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBjaGVja3N1bTogMGIzN2MwN2Y4ZjI3ZGViN2Q0NzY5OTUxZmJlY2Y2MDBhMTAwNmVmOF0qLwogewogICAgIGNvbXBvYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgaW50IGVycjsKQEAgLTk1OCwyNCArMTE2MSwzMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFB5WmxpYl91bmZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBlcnIsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZBVUxUQUxMT0MsIG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKiByZXR2YWwgPSBOVUxMOwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6Zmx1c2giLCAmbGVuZ3RoKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpmbHVzaCIsIHVpbnRfY29udmVydGVyLCAmbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGxlbmd0aCA8PSAwKSB7CisgICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgICAgaWYgKCEocmV0dmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKKyAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShzZWxmLT51bmNvbnN1bWVkX3RhaWwpOworCiAgICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisgICAgLyogc2F2ZV91bmNvbnN1bWVkX2lucHV0KCkgZW5zdXJlcyB0aGF0IHVuY29uc3VtZWRfdGFpbCBsZW5ndGggaXMgbGVzc2VyCisgICAgICAgb3IgZXF1YWwgdGhhbiBVSU5UX01BWCAqLworICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IFB5X1NBRkVfRE9XTkNBU1Qoc2l6ZSwgUHlfc3NpemVfdCwgdW5zaWduZWQgaW50KTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwogICAgIHNlbGYtPnpzdC5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKTsKQEAgLTk4NywxNCArMTE5NywxNyBAQAogICAgIC8qIHdoaWxlIFpfT0sgYW5kIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwsIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0LAogICAgICAgIHNvIGV4dGVuZCB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdHJ5IGFnYWluICovCiAgICAgd2hpbGUgKChlcnIgPT0gWl9PSyB8fCBlcnIgPT0gWl9CVUZfRVJST1IpICYmIHNlbGYtPnpzdC5hdmFpbF9vdXQgPT0gMCkgewotICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIGxlbmd0aCA8PCAxKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmV0dmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHNlbGYtPnpzdC5uZXh0X291dCA9IChCeXRlICopUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBpbmZsYXRlKCYoc2VsZi0+enN0KSwgWl9GSU5JU0gpOwpAQCAtMTAyMSw4ICsxMjM0LDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocmV0dmFsKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICB9CiAKIGVycm9yOgpAQCAtMTAzOSwxNiArMTI1MSwxNCBAQAogICAgIHsiZmx1c2giLCAoYmluYXJ5ZnVuYylQeVpsaWJfZmx1c2gsIE1FVEhfVkFSQVJHUywKICAgICAgICAgICAgICAgY29tcF9mbHVzaF9fZG9jX199LAogI2lmZGVmIEhBVkVfWkxJQl9DT1BZCi0gICAgeyJjb3B5IiwgIChQeUNGdW5jdGlvbilQeVpsaWJfY29weSwgTUVUSF9OT0FSR1MsCi0gICAgICAgICAgICAgIGNvbXBfY29weV9fZG9jX199LAorICAgIFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKICNlbmRpZgogICAgIHtOVUxMLCBOVUxMfQogfTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIERlY29tcF9tZXRob2RzW10gPQogewotICAgIHsiZGVjb21wcmVzcyIsIChiaW5hcnlmdW5jKVB5WmxpYl9vYmpkZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgICAgZGVjb21wX2RlY29tcHJlc3NfX2RvY19ffSwKKyAgICBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYKICAgICB7ImZsdXNoIiwgKGJpbmFyeWZ1bmMpUHlabGliX3VuZmx1c2gsIE1FVEhfVkFSQVJHUywKICAgICAgICAgICAgICAgZGVjb21wX2ZsdXNoX19kb2NfX30sCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKQEAgLTEwODksMTUgKzEyOTksMTUgQEAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICAvKiBBdm9pZCB0cnVuY2F0aW9uIG9mIGxlbmd0aCBmb3IgdmVyeSBsYXJnZSBidWZmZXJzLiBhZGxlcjMyKCkgdGFrZXMKICAgICAgICAgICAgbGVuZ3RoIGFzIGFuIHVuc2lnbmVkIGludCwgd2hpY2ggbWF5IGJlIG5hcnJvd2VyIHRoYW4gUHlfc3NpemVfdC4gKi8KLSAgICAgICAgd2hpbGUgKGxlbiA+IChzaXplX3QpIFVJTlRfTUFYKSB7CisgICAgICAgIHdoaWxlICgoc2l6ZV90KWxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBidWYsIFVJTlRfTUFYKTsKICAgICAgICAgICAgIGJ1ZiArPSAoc2l6ZV90KSBVSU5UX01BWDsKICAgICAgICAgICAgIGxlbiAtPSAoc2l6ZV90KSBVSU5UX01BWDsKICAgICAgICAgfQotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBidWYsIGxlbik7CisgICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgKHVuc2lnbmVkIGludClsZW4pOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIHBidWYuYnVmLCBwYnVmLmxlbik7CisgICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIHBidWYuYnVmLCAodW5zaWduZWQgaW50KXBidWYubGVuKTsKICAgICB9CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGFkbGVyMzJ2YWwgJiAweGZmZmZmZmZmVSk7CkBAIC0xMTI3LDE1ICsxMzM3LDE1IEBACiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gY3JjMzIoKSB0YWtlcwogICAgICAgICAgICBsZW5ndGggYXMgYW4gdW5zaWduZWQgaW50LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiBQeV9zc2l6ZV90LiAqLwotICAgICAgICB3aGlsZSAobGVuID4gKHNpemVfdCkgVUlOVF9NQVgpIHsKKyAgICAgICAgd2hpbGUgKChzaXplX3QpbGVuID4gVUlOVF9NQVgpIHsKICAgICAgICAgICAgIGNyYzMydmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgYnVmLCBsZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgKHVuc2lnbmVkIGludClsZW4pOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMzMnZhbCwgcGJ1Zi5idWYsIHBidWYubGVuKTsKKyAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBwYnVmLmJ1ZiwgKHVuc2lnbmVkIGludClwYnVmLmxlbik7CiAgICAgfQogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhzaWduZWRfdmFsICYgMHhmZmZmZmZmZlUpOwpAQCAtMTE0Niw4ICsxMzU2LDcgQEAKIHsKICAgICB7ImFkbGVyMzIiLCAoUHlDRnVuY3Rpb24pUHlabGliX2FkbGVyMzIsIE1FVEhfVkFSQVJHUywKICAgICAgICAgICAgICAgICBhZGxlcjMyX19kb2NfX30sCi0gICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilQeVpsaWJfY29tcHJlc3MsICBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgIGNvbXByZXNzX19kb2NfX30sCisgICAgWkxJQl9DT01QUkVTU19NRVRIT0RERUYKICAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzc29iaiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb2JqX19kb2NfX30sCiAgICAgeyJjcmMzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfY3JjMzIsIE1FVEhfVkFSQVJHUywKQEAgLTEyNjYsMjAgKzE0NzUsMjAgQEAKICAgICAgICAgUHlfSU5DUkVGKFpsaWJFcnJvcik7CiAgICAgICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZXJyb3IiLCBabGliRXJyb3IpOwogICAgIH0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUFYX1dCSVRTIiwgTUFYX1dCSVRTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGTEFURUQiLCBERUZMQVRFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9NRU1fTEVWRUwiLCBERUZfTUVNX0xFVkVMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9CRVNUX1NQRUVEIiwgWl9CRVNUX1NQRUVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9CRVNUX0NPTVBSRVNTSU9OIiwgWl9CRVNUX0NPTVBSRVNTSU9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9ERUZBVUxUX0NPTVBSRVNTSU9OIiwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9GSUxURVJFRCIsIFpfRklMVEVSRUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0hVRkZNQU5fT05MWSIsIFpfSFVGRk1BTl9PTkxZKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9ERUZBVUxUX1NUUkFURUdZIiwgWl9ERUZBVUxUX1NUUkFURUdZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNQVhfV0JJVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRkxBVEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfTUVNX0xFVkVMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0JFU1RfU1BFRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZJTFRFUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0hVRkZNQU5fT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX1NUUkFURUdZKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTklTSCIsIFpfRklOSVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9OT19GTFVTSCIsIFpfTk9fRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX1NZTkNfRkxVU0giLCBaX1NZTkNfRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZVTExfRkxVU0giLCBaX0ZVTExfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRklOSVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX05PX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX1NZTkNfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRlVMTF9GTFVTSCk7CiAKICAgICB2ZXIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhaTElCX1ZFUlNJT04pOwogICAgIGlmICh2ZXIgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL09iamVjdHMvYWJzdHJhY3QuYyBiL09iamVjdHMvYWJzdHJhY3QuYwppbmRleCAxMzA5YzUxLi45MWRmNWRhIDEwMDY0NAotLS0gYS9PYmplY3RzL2Fic3RyYWN0LmMKKysrIGIvT2JqZWN0cy9hYnN0cmFjdC5jCkBAIC02NCw0OSArNjQsNzIgQEAKIH0KICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAoraW50CitfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKSB7CisgICAgcmV0dXJuIChQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZSAmJiBQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZS0+c3FfbGVuZ3RoKSB8fAorICAgICAgICAoUHlfVFlQRShvKS0+dHBfYXNfbWFwcGluZyAmJiBQeV9UWVBFKG8pLT50cF9hc19tYXBwaW5nLT5tcF9sZW5ndGgpOworfQogCiAvKiBUaGUgbGVuZ3RoIGhpbnQgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSBmcm9tIG8uX19sZW5fXygpCi0gICBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLiAgSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgb3IgcmV0dXJuIGEgbmVnYXRpdmUKLSAgIHZhbHVlLCB0aGVuIHRoZSBkZWZhdWx0dmFsdWUgaXMgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzLAorICAgb3Igby5fX2xlbmd0aF9oaW50X18oKS4gSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgdGhlIGRlZmF1bHR2YWx1ZSBpcworICAgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzIHdpdGggYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gVHlwZUVycm9yCiAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLTEuCiAqLwogCiBQeV9zc2l6ZV90Ci1fUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUpCitQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKIHsKKyAgICBQeU9iamVjdCAqaGludCwgKnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IHJlczsKICAgICBfUHlfSURFTlRJRklFUihfX2xlbmd0aF9oaW50X18pOwotICAgIFB5T2JqZWN0ICpybywgKmhpbnRtZXRoOwotICAgIFB5X3NzaXplX3QgcnY7Ci0KLSAgICAvKiB0cnkgby5fX2xlbl9fKCkgKi8KLSAgICBydiA9IFB5T2JqZWN0X1NpemUobyk7Ci0gICAgaWYgKHJ2ID49IDApCi0gICAgICAgIHJldHVybiBydjsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAoX1B5T2JqZWN0X0hhc0xlbihvKSkgeworICAgICAgICByZXMgPSBQeU9iamVjdF9MZW5ndGgobyk7CisgICAgICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICAvKiB0cnkgby5fX2xlbmd0aF9oaW50X18oKSAqLwotICAgIGhpbnRtZXRoID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKLSAgICBpZiAoaGludG1ldGggPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBoaW50ID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKKyAgICBpZiAoaGludCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7Ci0gICAgfQotICAgIHJvID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50bWV0aCwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKGhpbnRtZXRoKTsKLSAgICBpZiAocm8gPT0gTlVMTCkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwogICAgIH0KLSAgICBydiA9IFB5TG9uZ19DaGVjayhybykgPyBQeUxvbmdfQXNTc2l6ZV90KHJvKSA6IGRlZmF1bHR2YWx1ZTsKLSAgICBQeV9ERUNSRUYocm8pOwotICAgIHJldHVybiBydjsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhpbnQsIE5VTEwpOworICAgIFB5X0RFQ1JFRihoaW50KTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgfQorICAgIGlmICghUHlMb25nX0NoZWNrKHJlc3VsdCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXyBtdXN0IGJlIGFuIGludGVnZXIsIG5vdCAlLjEwMHMiLAorICAgICAgICAgICAgUHlfVFlQRShyZXN1bHQpLT50cF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlMb25nX0FzU3NpemVfdChyZXN1bHQpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXygpIHNob3VsZCByZXR1cm4gPj0gMCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTIwMiw3ICsyMjUsNyBAQAogfQogCiBpbnQKLVB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleTsKICAgICBpbnQgcmV0OwpAQCAtMTIxNyw3ICsxMjQwLDcgQEAKICAgdG8gYmUgYW4gaW50IG9yIGhhdmUgYW4gX19pbnRfXyBtZXRob2QuIFN0ZWFscyBpbnRlZ3JhbCdzCiAgIHJlZmVyZW5jZS4gZXJyb3JfZm9ybWF0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIFR5cGVFcnJvciBpZiBpbnRlZ3JhbAogICBpc24ndCBhY3R1YWxseSBhbiBJbnRlZ3JhbCBpbnN0YW5jZS4gZXJyb3JfZm9ybWF0IHNob3VsZCBiZSBhIGZvcm1hdCBzdHJpbmcKLSAgdGhhdCBjYW4gYWNjZXB0IGEgY2hhciogbmFtaW5nIGludGVncmFsJ3MgdHlwZS4gCisgIHRoYXQgY2FuIGFjY2VwdCBhIGNoYXIqIG5hbWluZyBpbnRlZ3JhbCdzIHR5cGUuCiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGNvbnZlcnRfaW50ZWdyYWxfdG9faW50KFB5T2JqZWN0ICppbnRlZ3JhbCwgY29uc3QgY2hhciAqZXJyb3JfZm9ybWF0KQpAQCAtMTIzNiw3ICsxMjU5LDcgQEAKICAgICB9CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgZXJyb3JfZm9ybWF0LCBQeV9UWVBFKGludGVncmFsKS0+dHBfbmFtZSk7CiAgICAgUHlfREVDUkVGKGludGVncmFsKTsKLSAgICByZXR1cm4gTlVMTDsgICAgCisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtMTY2OSw3ICsxNjkyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBHdWVzcyByZXN1bHQgc2l6ZSBhbmQgYWxsb2NhdGUgc3BhY2UuICovCi0gICAgbiA9IF9QeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKKyAgICBuID0gUHlPYmplY3RfTGVuZ3RoSGludCh2LCAxMCk7CiAgICAgaWYgKG4gPT0gLTEpCiAgICAgICAgIGdvdG8gRmFpbDsKICAgICByZXN1bHQgPSBQeVR1cGxlX05ldyhuKTsKQEAgLTE5MjksNyArMTk1Miw3IEBACiAjZGVmaW5lIFB5TWFwcGluZ19MZW5ndGggUHlNYXBwaW5nX1NpemUKIAogUHlPYmplY3QgKgotUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKm9rZXksICpyOwogCkBAIC0xOTQ1LDcgKzE5NjgsNyBAQAogfQogCiBpbnQKLVB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqb2tleTsKICAgICBpbnQgcjsKQEAgLTE5NjQsNyArMTk4Nyw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwogCkBAIC0yMDYzLDEwICsyMDg2LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmVzdWx0ID0gKCpjYWxsKShmdW5jLCBhcmcsIGt3KTsKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyNpZmRlZiBOREVCVUcKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgIk5VTEwgcmVzdWx0IHdpdGhvdXQgZXJyb3IgaW4gUHlPYmplY3RfQ2FsbCIpOworICAgICAgICB9CisjZWxzZQorICAgICAgICBhc3NlcnQocmVzdWx0ICE9IE5VTEwgfHwgUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiclLjIwMHMnIG9iamVjdCBpcyBub3QgY2FsbGFibGUiLApAQCAtMjEwMSw3ICsyMTI5LDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjExNiwxMiArMjE0NCwxNCBAQAogICAgIH0KICAgICBlbHNlCiAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICBpZiAoYXJncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHJldHVybiBjYWxsX2Z1bmN0aW9uX3RhaWwoY2FsbGFibGUsIGFyZ3MpOwogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUKFB5T2JqZWN0ICpjYWxsYWJsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqYXJnczsKQEAgLTIxNDEsNyArMjE3MSw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLWNhbGxtZXRob2QoUHlPYmplY3QqIGZ1bmMsIGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSwgaW50IGlzX3NpemVfdCkKK2NhbGxtZXRob2QoUHlPYmplY3QqIGZ1bmMsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSwgaW50IGlzX3NpemVfdCkKIHsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBQeU9iamVjdCAqYXJnczsKQEAgLTIxNzAsNyArMjIwMCw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNoYXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMTkxLDcgKzIyMjEsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjEyLDcgKzIyNDMsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVChQeU9iamVjdCAqbywgY2hhciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVChQeU9iamVjdCAqbywgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBOVUxMOwpAQCAtMjIzMiw3ICsyMjY0LDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RJZF9TaXplVChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RJZF9TaXplVChQeU9iamVjdCAqbywgX1B5X0lkZW50aWZpZXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmZ1bmMgPSBOVUxMOwpAQCAtMjMwMiw3ICsyMzM1LDcgQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAorX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLAogICAgICAgICBzdHJ1Y3QgX1B5X0lkZW50aWZpZXIgKm5hbWUsIC4uLikKIHsKICAgICBQeU9iamVjdCAqYXJncywgKnRtcDsKQEAgLTI2NzcsOCArMjcxMCw4IEBACiAgKiBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nIHBvaW50ZXJzIHdpdGggYSBOVUxMIGNoYXIqIHRlcm1pbmF0aW5nIHRoZSBhcnJheS4KICAqIChpZTogYW4gYXJndiBvciBlbnYgbGlzdCkKICAqCi0gKiBNZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgcmV0dXJuZWQgbGlzdCBpcyBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jKCkgYW5kIE1VU1QKLSAqIGJlIGZyZWVkIGJ5IHRoZSBjYWxsZXIgdXNpbmcgYSBmcmVlKCkgbG9vcCBvciBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KKyAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBQeU1lbV9NYWxsb2MoKQorICogYW5kIE1VU1QgYmUgZnJlZWQgYnkgX1B5X0ZyZWVDaGFyUEFycmF5KCkuCiAgKi8KIGNoYXIgKmNvbnN0ICoKIF9QeVNlcXVlbmNlX0J5dGVzVG9DaGFycEFycmF5KFB5T2JqZWN0KiBzZWxmKQpAQCAtMjY4Niw2ICsyNzE5LDcgQEAKICAgICBjaGFyICoqYXJyYXk7CiAgICAgUHlfc3NpemVfdCBpLCBhcmdjOwogICAgIFB5T2JqZWN0ICppdGVtID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBhcmdjID0gUHlTZXF1ZW5jZV9TaXplKHNlbGYpOwogICAgIGlmIChhcmdjID09IC0xKQpAQCAtMjY5OCw3ICsyNzMyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgYXJyYXkgPSBtYWxsb2MoKGFyZ2MgKyAxKSAqIHNpemVvZihjaGFyICopKTsKKyAgICBhcnJheSA9IFB5TWVtX01hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOwogICAgIGlmIChhcnJheSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjcxNywxMSArMjc1MSwxMyBAQAogICAgICAgICAgICAgYXJyYXlbaV0gPSBOVUxMOwogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9Ci0gICAgICAgIGFycmF5W2ldID0gc3RyZHVwKGRhdGEpOworICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShpdGVtKSArIDE7CisgICAgICAgIGFycmF5W2ldID0gUHlNZW1fTWFsbG9jKHNpemUpOwogICAgICAgICBpZiAoIWFycmF5W2ldKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9CisgICAgICAgIG1lbWNweShhcnJheVtpXSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICB9CiAgICAgYXJyYXlbYXJnY10gPSBOVUxMOwpAQCAtMjc0MSw3ICsyNzc3LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgZm9yIChpID0gMDsgYXJyYXlbaV0gIT0gTlVMTDsgKytpKSB7Ci0gICAgICAgIGZyZWUoYXJyYXlbaV0pOworICAgICAgICBQeU1lbV9GcmVlKGFycmF5W2ldKTsKICAgICB9Ci0gICAgZnJlZSgodm9pZCopYXJyYXkpOworICAgIFB5TWVtX0ZyZWUoKHZvaWQqKWFycmF5KTsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCmluZGV4IDYwYjI4MTEuLjMxY2M0Y2MgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwpAQCAtMTUwLDYgKzE1MCw3IEBACiAgICAgfQogICAgIFB5X1NJWkUobmV3KSA9IHNpemU7CiAgICAgbmV3LT5vYl9hbGxvYyA9IGFsbG9jOworICAgIG5ldy0+b2Jfc3RhcnQgPSBuZXctPm9iX2J5dGVzOwogICAgIG5ldy0+b2JfZXhwb3J0cyA9IDA7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwpAQCAtMTc3LDQ4ICsxNzgsNzAgQEAKIFB5Qnl0ZUFycmF5X1Jlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBzaXplKQogewogICAgIHZvaWQgKnN2YWw7Ci0gICAgUHlfc3NpemVfdCBhbGxvYyA9ICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYWxsb2M7CisgICAgUHlCeXRlQXJyYXlPYmplY3QgKm9iaiA9ICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKTsKKyAgICBQeV9zc2l6ZV90IGFsbG9jID0gb2JqLT5vYl9hbGxvYzsKKyAgICBQeV9zc2l6ZV90IGxvZ2ljYWxfb2Zmc2V0ID0gb2JqLT5vYl9zdGFydCAtIG9iai0+b2JfYnl0ZXM7CiAKICAgICBhc3NlcnQoc2VsZiAhPSBOVUxMKTsKICAgICBhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpOwogICAgIGFzc2VydChzaXplID49IDApOworICAgIGFzc2VydChsb2dpY2FsX29mZnNldCA+PSAwKTsKKyAgICBhc3NlcnQobG9naWNhbF9vZmZzZXQgPD0gYWxsb2MpOwogCiAgICAgaWYgKHNpemUgPT0gUHlfU0laRShzZWxmKSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKCFfY2FucmVzaXplKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpKSB7CisgICAgaWYgKCFfY2FucmVzaXplKG9iaikpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChzaXplIDwgYWxsb2MgLyAyKSB7Ci0gICAgICAgIC8qIE1ham9yIGRvd25zaXplOyByZXNpemUgZG93biB0byBleGFjdCBzaXplICovCi0gICAgICAgIGFsbG9jID0gc2l6ZSArIDE7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPCBhbGxvYykgewotICAgICAgICAvKiBXaXRoaW4gYWxsb2NhdGVkIHNpemU7IHF1aWNrIGV4aXQgKi8KLSAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXNbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsICovCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKLSAgICAgICAgLyogTW9kZXJhdGUgdXBzaXplOyBvdmVyYWxsb2NhdGUgc2ltaWxhciB0byBsaXN0X3Jlc2l6ZSgpICovCi0gICAgICAgIGFsbG9jID0gc2l6ZSArIChzaXplID4+IDMpICsgKHNpemUgPCA5ID8gMyA6IDYpOworICAgIGlmIChzaXplICsgbG9naWNhbF9vZmZzZXQgKyAxIDwgYWxsb2MpIHsKKyAgICAgICAgLyogQ3VycmVudCBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvc3QgdGhlIHJlcXVlc3RlZCBzaXplLAorICAgICAgICAgICBkZWNpZGUgb24gYSBzdHJhdGVneS4gKi8KKyAgICAgICAgaWYgKHNpemUgPCBhbGxvYyAvIDIpIHsKKyAgICAgICAgICAgIC8qIE1ham9yIGRvd25zaXplOyByZXNpemUgZG93biB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWlub3IgZG93bnNpemU7IHF1aWNrIGV4aXQgKi8KKyAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOworICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIE1ham9yIHVwc2l6ZTsgcmVzaXplIHVwIHRvIGV4YWN0IHNpemUgKi8KLSAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKKyAgICAgICAgLyogTmVlZCBncm93aW5nLCBkZWNpZGUgb24gYSBzdHJhdGVneSAqLworICAgICAgICBpZiAoc2l6ZSA8PSBhbGxvYyAqIDEuMTI1KSB7CisgICAgICAgICAgICAvKiBNb2RlcmF0ZSB1cHNpemU7IG92ZXJhbGxvY2F0ZSBzaW1pbGFyIHRvIGxpc3RfcmVzaXplKCkgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIChzaXplID4+IDMpICsgKHNpemUgPCA5ID8gMyA6IDYpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgMTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN2YWwgPSBQeU9iamVjdF9SZWFsbG9jKCgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXMsIGFsbG9jKTsKLSAgICBpZiAoc3ZhbCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobG9naWNhbF9vZmZzZXQgPiAwKSB7CisgICAgICAgIHN2YWwgPSBQeU9iamVjdF9NYWxsb2MoYWxsb2MpOworICAgICAgICBpZiAoc3ZhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbWNweShzdmFsLCBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksIFB5X01JTihzaXplLCBQeV9TSVpFKHNlbGYpKSk7CisgICAgICAgIFB5T2JqZWN0X0ZyZWUob2JqLT5vYl9ieXRlcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdmFsID0gUHlPYmplY3RfUmVhbGxvYyhvYmotPm9iX2J5dGVzLCBhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKLSAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2J5dGVzID0gc3ZhbDsKKyAgICBvYmotPm9iX2J5dGVzID0gb2JqLT5vYl9zdGFydCA9IHN2YWw7CiAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYyA9IGFsbG9jOwotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXNbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KKyAgICBvYmotPm9iX2FsbG9jID0gYWxsb2M7CisgICAgb2JqLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yODgsMTMgKzMxMSwxMyBAQAogICAgIH0KICAgICBpZiAoc2l6ZSA8IHNlbGYtPm9iX2FsbG9jKSB7CiAgICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICAgICBzZWxmLT5vYl9ieXRlc1tQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLworICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KICAgICB9CiAgICAgZWxzZSBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIHNpemUpIDwgMCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBteXNpemUsIHZvLmJ1Ziwgdm8ubGVuKTsKKyAgICBtZW1jcHkoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpICsgbXlzaXplLCB2by5idWYsIHZvLmxlbik7CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdm8pOwogICAgIFB5X0lOQ1JFRihzZWxmKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKQEAgLTMzMSw2ICszNTQsNyBAQAogewogICAgIFB5X3NzaXplX3QgbXlzaXplOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpidWY7CiAKICAgICBpZiAoY291bnQgPCAwKQogICAgICAgICBjb3VudCA9IDA7CkBAIC0zMzgsMTkgKzM2MiwxNiBAQAogICAgIGlmIChjb3VudCA+IDAgJiYgbXlzaXplID4gUFlfU1NJWkVfVF9NQVggLyBjb3VudCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgc2l6ZSA9IG15c2l6ZSAqIGNvdW50OwotICAgIGlmIChzaXplIDwgc2VsZi0+b2JfYWxsb2MpIHsKLSAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZildID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCBieXRlICovCi0gICAgfQotICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApCisgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIGlmIChteXNpemUgPT0gMSkKLSAgICAgICAgbWVtc2V0KHNlbGYtPm9iX2J5dGVzLCBzZWxmLT5vYl9ieXRlc1swXSwgc2l6ZSk7CisgICAgICAgIG1lbXNldChidWYsIGJ1ZlswXSwgc2l6ZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X3NzaXplX3QgaTsKICAgICAgICAgZm9yIChpID0gMTsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBpKm15c2l6ZSwgc2VsZi0+b2JfYnl0ZXMsIG15c2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoYnVmICsgaSpteXNpemUsIGJ1ZiwgbXlzaXplKTsKICAgICB9CiAKICAgICBQeV9JTkNSRUYoc2VsZik7CkBAIC0zNjYsNyArMzg3LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJieXRlYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShzZWxmLT5vYl9ieXRlc1tpXSkpOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtpXSkpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzg1LDcgKzQwNiw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImJ5dGVhcnJheSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKHNlbGYtPm9iX2J5dGVzW2ldKSk7CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtpXSkpOwogICAgIH0KICAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGluZGV4KSkgewogICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbmd0aCwgY3VyLCBpOwpAQCAtMzk4LDggKzQxOSw4IEBACiAgICAgICAgIGlmIChzbGljZWxlbmd0aCA8PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsKICAgICAgICAgZWxzZSBpZiAoc3RlcCA9PSAxKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgKyBzdGFydCwgc2xpY2VsZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY2hhciAqc291cmNlX2J1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKQEAgLTQyNSwxMCArNDQ2LDk0IEBACiB9CiAKIHN0YXRpYyBpbnQKK2J5dGVhcnJheV9zZXRzbGljZV9saW5lYXIoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ5dGVzLCBQeV9zc2l6ZV90IGJ5dGVzX2xlbikKK3sKKyAgICBQeV9zc2l6ZV90IGF2YWlsID0gaGkgLSBsbzsKKyAgICBjaGFyICpidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CisgICAgUHlfc3NpemVfdCBncm93dGggPSBieXRlc19sZW4gLSBhdmFpbDsKKyAgICBpbnQgcmVzID0gMDsKKyAgICBhc3NlcnQoYXZhaWwgPj0gMCk7CisKKyAgICBpZiAoZ3Jvd3RoIDwgMCkgeworICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgaWYgKGxvID09IDApIHsKKyAgICAgICAgICAgIC8qIFNocmluayB0aGUgYnVmZmVyIGJ5IGFkdmFuY2luZyBpdHMgbG9naWNhbCBzdGFydCAqLworICAgICAgICAgICAgc2VsZi0+b2Jfc3RhcnQgLT0gZ3Jvd3RoOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgICAgaGkgICAgICAgICAgICAgb2xkX3NpemUKKyAgICAgICAgICAgICAgfCAgIHw8LS0tLWF2YWlsLS0tLS0+fDwtLS0tLXRhaWwtLS0tLS0+fAorICAgICAgICAgICAgICB8ICAgICAgfDwtYnl0ZXNfbGVuLT58PC0tLS0tdGFpbC0tLS0tLT58CisgICAgICAgICAgICAgIDAgICAgbmV3X2xvICAgICAgICAgbmV3X2hpICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAgICAqLworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQorICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAgICAgfCAgIHw8LWJ5dGVzX2xlbi0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICAgICovCisgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGxvICsgYnl0ZXNfbGVuLCBidWYgKyBoaSwKKyAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIGhpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIGdyb3d0aCkgPCAwKSB7CisgICAgICAgICAgICAvKiBJc3N1ZSAjMTk1Nzg6IEhhbmRsaW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGhlcmUgaXMKKyAgICAgICAgICAgICAgIHRyaWNreSBoZXJlIGJlY2F1c2UgdGhlIGJ5dGVhcnJheSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbgorICAgICAgICAgICAgICAgbW9kaWZpZWQuIERlcGVuZGluZyBvbiBncm93dGggYW5kIGxvLCB0aGUgYmVoYXZpb3VyIGlzCisgICAgICAgICAgICAgICBkaWZmZXJlbnQuCisKKyAgICAgICAgICAgICAgIElmIGdyb3d0aCA8IDAgYW5kIGxvICE9IDAsIHRoZSBvcGVyYXRpb24gaXMgY29tcGxldGVkLCBidXQgYQorICAgICAgICAgICAgICAgTWVtb3J5RXJyb3IgaXMgc3RpbGwgcmFpc2VkIGFuZCB0aGUgbWVtb3J5IGJsb2NrIGlzIG5vdAorICAgICAgICAgICAgICAgc2hyaW5rZWQuIE90aGVyd2lzZSwgdGhlIGJ5dGVhcnJheSBpcyByZXN0b3JlZCBpbiBpdHMgcHJldmlvdXMKKyAgICAgICAgICAgICAgIHN0YXRlIGFuZCBhIE1lbW9yeUVycm9yIGlzIHJhaXNlZC4gKi8KKyAgICAgICAgICAgIGlmIChsbyA9PSAwKSB7CisgICAgICAgICAgICAgICAgc2VsZi0+b2Jfc3RhcnQgKz0gZ3Jvd3RoOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIG1lbW1vdmUoKSByZW1vdmVkIGJ5dGVzLCB0aGUgYnl0ZWFycmF5IG9iamVjdCBjYW5ub3QgYmUKKyAgICAgICAgICAgICAgIHJlc3RvcmVkIGluIGl0cyBwcmV2aW91cyBzdGF0ZS4gKi8KKyAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKz0gZ3Jvd3RoOworICAgICAgICAgICAgcmVzID0gLTE7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIH0KKyAgICBlbHNlIGlmIChncm93dGggPiAwKSB7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpID4gKFB5X3NzaXplX3QpUFlfU1NJWkVfVF9NQVggLSBncm93dGgpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIGdyb3d0aCkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgICAgICAvKiBNYWtlIHRoZSBwbGFjZSBmb3IgdGhlIGFkZGl0aW9uYWwgYnl0ZXMgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICAwICAgbG8gICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKKyAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgIHwgICB8PC0tLWJ5dGVzX2xlbi0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgIDAgICBsbyAgICAgICAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKKyAgICAgICAgICovCisgICAgICAgIG1lbW1vdmUoYnVmICsgbG8gKyBieXRlc19sZW4sIGJ1ZiArIGhpLAorICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBsbyAtIGJ5dGVzX2xlbik7CisgICAgfQorCisgICAgaWYgKGJ5dGVzX2xlbiA+IDApCisgICAgICAgIG1lbWNweShidWYgKyBsbywgYnl0ZXMsIGJ5dGVzX2xlbik7CisgICAgcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludAogYnl0ZWFycmF5X3NldHNsaWNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGxvLCBQeV9zc2l6ZV90IGhpLAogICAgICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlcykKIHsKLSAgICBQeV9zc2l6ZV90IGF2YWlsLCBuZWVkZWQ7CisgICAgUHlfc3NpemVfdCBuZWVkZWQ7CiAgICAgdm9pZCAqYnl0ZXM7CiAgICAgUHlfYnVmZmVyIHZieXRlczsKICAgICBpbnQgcmVzID0gMDsKQEAgLTQ2Nyw1MCArNTcyLDkgQEAKICAgICBpZiAoaGkgPiBQeV9TSVpFKHNlbGYpKQogICAgICAgICBoaSA9IFB5X1NJWkUoc2VsZik7CiAKLSAgICBhdmFpbCA9IGhpIC0gbG87Ci0gICAgaWYgKGF2YWlsIDwgMCkKLSAgICAgICAgbG8gPSBoaSA9IGF2YWlsID0gMDsKLQotICAgIGlmIChhdmFpbCAhPSBuZWVkZWQpIHsKLSAgICAgICAgaWYgKGF2YWlsID4gbmVlZGVkKSB7Ci0gICAgICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpIHsKLSAgICAgICAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgfCAgIHw8LS0tLWF2YWlsLS0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIHwgICB8PC1uZWVkZWQtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAwICAgbG8gICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGxvICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIGhpLAotICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gaGkpOwotICAgICAgICB9Ci0gICAgICAgIC8qIFhYWChubm9yd2l0eik6IG5lZWQgdG8gdmVyaWZ5IHRoaXMgY2FuJ3Qgb3ZlcmZsb3chICovCi0gICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBuZWVkZWQgLSBhdmFpbCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmVzID0gLTE7Ci0gICAgICAgICAgICAgICAgZ290byBmaW5pc2g7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGF2YWlsIDwgbmVlZGVkKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICAwICAgbG8gICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgfCAgIHw8LWF2YWlsLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgfCAgIHw8LS0tLW5lZWRlZC0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGxvICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIGhpLAotICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gbG8gLSBuZWVkZWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG5lZWRlZCA+IDApCi0gICAgICAgIG1lbWNweShzZWxmLT5vYl9ieXRlcyArIGxvLCBieXRlcywgbmVlZGVkKTsKLQotCi0gZmluaXNoOgorICAgIHJlcyA9IGJ5dGVhcnJheV9zZXRzbGljZV9saW5lYXIoc2VsZiwgbG8sIGhpLCBieXRlcywgbmVlZGVkKTsKICAgICBpZiAodmJ5dGVzLmxlbiAhPSAtMSkKLSAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZieXRlcyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZieXRlcyk7CiAgICAgcmV0dXJuIHJlczsKIH0KIApAQCAtNTMzLDcgKzU5Nyw3IEBACiAgICAgaWYgKCFfZ2V0Ynl0ZXZhbHVlKHZhbHVlLCAmaXZhbCkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNlbGYtPm9iX2J5dGVzW2ldID0gaXZhbDsKKyAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbaV0gPSBpdmFsOwogICAgIHJldHVybiAwOwogfQogCkBAIC01NDEsNyArNjA1LDggQEAKIGJ5dGVhcnJheV9hc3Nfc3Vic2NyaXB0KFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5kZXgsIFB5T2JqZWN0ICp2YWx1ZXMpCiB7CiAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW4sIG5lZWRlZDsKLSAgICBjaGFyICpieXRlczsKKyAgICBjaGFyICpidWYsICpieXRlczsKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAoUHlJbmRleF9DaGVjayhpbmRleCkpIHsKICAgICAgICAgUHlfc3NpemVfdCBpID0gUHlOdW1iZXJfQXNTc2l6ZV90KGluZGV4LCBQeUV4Y19JbmRleEVycm9yKTsKQEAgLTU2OCw3ICs2MzMsNyBAQAogICAgICAgICAgICAgaW50IGl2YWw7CiAgICAgICAgICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWVzLCAmaXZhbCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXNbaV0gPSAoY2hhcilpdmFsOworICAgICAgICAgICAgYnVmW2ldID0gKGNoYXIpaXZhbDsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNjA2LDcgKzY3MSw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2sodmFsdWVzKSk7Ci0gICAgICAgIGJ5dGVzID0gKChQeUJ5dGVBcnJheU9iamVjdCAqKXZhbHVlcyktPm9iX2J5dGVzOworICAgICAgICBieXRlcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2YWx1ZXMpOwogICAgICAgICBuZWVkZWQgPSBQeV9TSVpFKHZhbHVlcyk7CiAgICAgfQogICAgIC8qIE1ha2Ugc3VyZSBiWzU6Ml0gPSAuLi4gaW5zZXJ0cyBiZWZvcmUgNSwgbm90IGJlZm9yZSAyLiAqLwpAQCAtNjE0LDM4ICs2NzksNyBAQAogICAgICAgICAoc3RlcCA+IDAgJiYgc3RhcnQgPiBzdG9wKSkKICAgICAgICAgc3RvcCA9IHN0YXJ0OwogICAgIGlmIChzdGVwID09IDEpIHsKLSAgICAgICAgaWYgKHNsaWNlbGVuICE9IG5lZWRlZCkgewotICAgICAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChzbGljZWxlbiA+IG5lZWRlZCkgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAwICAgc3RhcnQgICAgICAgICAgIHN0b3AgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgICAgICB8ICAgfDwtLS1zbGljZWxlbi0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIHwgICB8PC1uZWVkZWQtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0ICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gc3RvcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIG5lZWRlZCAtIHNsaWNlbGVuKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHNsaWNlbGVuIDwgbmVlZGVkKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICAgICAgfCAgIHw8LWF2YWlsLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgICAgIHwgICB8PC0tLS1uZWVkZWQtLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCArIG5lZWRlZCwgc2VsZi0+b2JfYnl0ZXMgKyBzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSAtIHN0YXJ0IC0gbmVlZGVkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZWVkZWQgPiAwKQotICAgICAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgc3RhcnQsIGJ5dGVzLCBuZWVkZWQpOwotCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihzZWxmLCBzdGFydCwgc3RvcCwgYnl0ZXMsIG5lZWRlZCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBpZiAobmVlZGVkID09IDApIHsKQEAgLTY3MiwxNCArNzA2LDE0IEBACiAgICAgICAgICAgICAgICAgaWYgKGN1ciArIHN0ZXAgPj0gKHNpemVfdClQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSkKICAgICAgICAgICAgICAgICAgICAgbGltID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgLSBjdXIgLSAxOwogCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGN1ciAtIGksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlcyArIGN1ciArIDEsIGxpbSk7CisgICAgICAgICAgICAgICAgbWVtbW92ZShidWYgKyBjdXIgLSBpLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgY3VyICsgMSwgbGltKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIE1vdmUgdGhlIHRhaWwgb2YgdGhlIGJ5dGVzLCBpbiBvbmUgY2h1bmsgKi8KICAgICAgICAgICAgIGN1ciA9IHN0YXJ0ICsgKHNpemVfdClzbGljZWxlbipzdGVwOwogICAgICAgICAgICAgaWYgKGN1ciA8IChzaXplX3QpUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpIHsKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgY3VyIC0gc2xpY2VsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlcyArIGN1ciwKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGN1ciAtIHNsaWNlbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmICsgY3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgLSBjdXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLApAQCAtNzAxLDcgKzczNSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsgY3VyICs9IHN0ZXAsIGkrKykKLSAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlc1tjdXJdID0gYnl0ZXNbaV07CisgICAgICAgICAgICAgICAgYnVmW2N1cl0gPSBieXRlc1tpXTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNzgxLDcgKzgxNSw3IEBACiAgICAgICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgY291bnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIG1lbXNldChzZWxmLT5vYl9ieXRlcywgMCwgY291bnQpOworICAgICAgICAgICAgbWVtc2V0KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgMCwgY291bnQpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTc5NCw3ICs4MjgsOCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBzaXplID0gdmlldy5sZW47CiAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSBnb3RvIGZhaWw7Ci0gICAgICAgIGlmIChQeUJ1ZmZlcl9Ub0NvbnRpZ3VvdXMoc2VsZi0+b2JfYnl0ZXMsICZ2aWV3LCBzaXplLCAnQycpIDwgMCkKKyAgICAgICAgaWYgKFB5QnVmZmVyX1RvQ29udGlndW91cyhQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksCisgICAgICAgICAgICAmdmlldywgc2l6ZSwgJ0MnKSA8IDApCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTgzOCw3ICs4NzMsNyBAQAogICAgICAgICAgICAgUHlfU0laRShzZWxmKSsrOwogICAgICAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgUHlfU0laRShzZWxmKSsxKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBzZWxmLT5vYl9ieXRlc1tQeV9TSVpFKHNlbGYpLTFdID0gdmFsdWU7CisgICAgICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtQeV9TSVpFKHNlbGYpLTFdID0gdmFsdWU7CiAgICAgfQogCiAgICAgLyogQ2xlYW4gdXAgYW5kIHJldHVybiBzdWNjZXNzICovCkBAIC04NjIsOSArODk3LDEwIEBACiAgICAgLyogMTUgPT0gc3RybGVuKHF1b3RlX3ByZWZpeCkgKyAyICsgc3RybGVuKHF1b3RlX3Bvc3RmaXgpICsgMSAqLwogICAgIHNpemVfdCBuZXdzaXplOwogICAgIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBjaGFyIGM7Ci0gICAgcmVnaXN0ZXIgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgY2hhciAqYnl0ZXM7CisgICAgY2hhciBjOworICAgIGNoYXIgKnA7CiAgICAgaW50IHF1b3RlOwogICAgIGNoYXIgKnRlc3QsICpzdGFydDsKICAgICBjaGFyICpidWZmZXI7CkBAIC04OTksMTEgKzkzNSwxMiBAQAogICAgICAgICAqcCsrID0gKnF1b3RlX3ByZWZpeCsrOwogICAgICpwKysgPSBxdW90ZTsKIAorICAgIGJ5dGVzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAvKiBUaGVyZSdzIGF0IGxlYXN0IGVub3VnaCByb29tIGZvciBhIGhleCBlc2NhcGUKICAgICAgICAgICAgYW5kIGEgY2xvc2luZyBxdW90ZS4gKi8KICAgICAgICAgYXNzZXJ0KG5ld3NpemUgLSAocCAtIGJ1ZmZlcikgPj0gNSk7Ci0gICAgICAgIGMgPSBzZWxmLT5vYl9ieXRlc1tpXTsKKyAgICAgICAgYyA9IGJ5dGVzW2ldOwogICAgICAgICBpZiAoYyA9PSAnXCcnIHx8IGMgPT0gJ1xcJykKICAgICAgICAgICAgICpwKysgPSAnXFwnLCAqcCsrID0gYzsKICAgICAgICAgZWxzZSBpZiAoYyA9PSAnXHQnKQpAQCAtMTAzOCw2ICsxMDc1LDcgQEAKICNkZWZpbmUgRkFTVFNFQVJDSCBmYXN0c2VhcmNoCiAjZGVmaW5lIFNUUklOR0xJQihGKSBzdHJpbmdsaWJfIyNGCiAjZGVmaW5lIFNUUklOR0xJQl9DSEFSIGNoYXIKKyNkZWZpbmUgU1RSSU5HTElCX1NJWkVPRl9DSEFSIDEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiBQeUJ5dGVBcnJheV9HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfU1RSIFB5Qnl0ZUFycmF5X0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTkVXIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCkBAIC0xMDQ5LDYgKzEwODcsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9mYXN0c2VhcmNoLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvam9pbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKQEAgLTE0MjksOSArMTQ2OCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZWFycmF5X3RyYW5zbGF0ZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAqaW5wdXQsICpvdXRwdXQ7Ci0gICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqdGFibGU7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBjOworICAgIGNoYXIgKmlucHV0LCAqb3V0cHV0OworICAgIGNvbnN0IGNoYXIgKnRhYmxlOworICAgIFB5X3NzaXplX3QgaSwgYzsKICAgICBQeU9iamVjdCAqaW5wdXRfb2JqID0gKFB5T2JqZWN0KilzZWxmOwogICAgIGNvbnN0IGNoYXIgKm91dHB1dF9zdGFydDsKICAgICBQeV9zc2l6ZV90IGlubGVuOwpAQCAtMjE5Miw3ICsyMjMxLDcgQEAKICAgICBQeV9zc2l6ZV90IGksIGosIG4gPSBQeV9TSVpFKHNlbGYpOwogCiAgICAgaiA9IG4gLyAyOwotICAgIGhlYWQgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBoZWFkID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIHRhaWwgPSBoZWFkICsgbiAtIDE7CiAgICAgZm9yIChpID0gMDsgaSA8IGo7IGkrKykgewogICAgICAgICBzd2FwID0gKmhlYWQ7CkBAIC0yMjEzLDYgKzIyNTIsNyBAQAogICAgIFB5T2JqZWN0ICp2YWx1ZTsKICAgICBpbnQgaXZhbDsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWY7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIm5POmluc2VydCIsICZ3aGVyZSwgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjI2LDYgKzIyNjYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gKyAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmICh3aGVyZSA8IDApIHsKICAgICAgICAgd2hlcmUgKz0gbjsKQEAgLTIyMzQsOCArMjI3NSw4IEBACiAgICAgfQogICAgIGlmICh3aGVyZSA+IG4pCiAgICAgICAgIHdoZXJlID0gbjsKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBzZWxmLT5vYl9ieXRlcyArIHdoZXJlLCBuIC0gd2hlcmUpOwotICAgIHNlbGYtPm9iX2J5dGVzW3doZXJlXSA9IGl2YWw7CisgICAgbWVtbW92ZShidWYgKyB3aGVyZSArIDEsIGJ1ZiArIHdoZXJlLCBuIC0gd2hlcmUpOworICAgIGJ1Zlt3aGVyZV0gPSBpdmFsOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yMjYwLDcgKzIzMDEsNyBAQAogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5vYl9ieXRlc1tuXSA9IHZhbHVlOworICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtuXSA9IHZhbHVlOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yMjkxLDcgKzIzMzIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIFRyeSB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUgYXJndW1lbnQuIDMyIGlzIGFyYml0cmFyeS4gKi8KLSAgICBidWZfc2l6ZSA9IF9QeU9iamVjdF9MZW5ndGhIaW50KGFyZywgMzIpOworICAgIGJ1Zl9zaXplID0gUHlPYmplY3RfTGVuZ3RoSGludChhcmcsIDMyKTsKICAgICBpZiAoYnVmX3NpemUgPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzUzLDYgKzIzOTQsNyBAQAogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlID0gLTEsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifG46cG9wIiwgJndoZXJlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzcxLDggKzI0MTMsOSBAQAogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICB2YWx1ZSA9IHNlbGYtPm9iX2J5dGVzW3doZXJlXTsKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICB2YWx1ZSA9IGJ1Zlt3aGVyZV07CisgICAgbWVtbW92ZShidWYgKyB3aGVyZSwgYnVmICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiAtIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIzODgsMTIgKzI0MzEsMTMgQEAKIHsKICAgICBpbnQgdmFsdWU7CiAgICAgUHlfc3NpemVfdCB3aGVyZSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKCEgX2dldGJ5dGV2YWx1ZShhcmcsICZ2YWx1ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZm9yICh3aGVyZSA9IDA7IHdoZXJlIDwgbjsgd2hlcmUrKykgewotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXNbd2hlcmVdID09IHZhbHVlKQorICAgICAgICBpZiAoYnVmW3doZXJlXSA9PSB2YWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAod2hlcmUgPT0gbikgewpAQCAtMjQwMyw3ICsyNDQ3LDcgQEAKICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHdoZXJlLCBzZWxmLT5vYl9ieXRlcyArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuIC0gMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjQxMywyMSArMjQ1NywyMSBAQAogLyogWFhYIFRoZXNlIHR3byBoZWxwZXJzIGNvdWxkIGJlIG9wdGltaXplZCBpZiBhcmdzaXplID09IDEgKi8KIAogc3RhdGljIFB5X3NzaXplX3QKLWxzdHJpcF9oZWxwZXIodW5zaWduZWQgY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAorbHN0cmlwX2hlbHBlcihjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCiAgICAgICAgICAgICAgIHZvaWQgKmFyZ3B0ciwgUHlfc3NpemVfdCBhcmdzaXplKQogewogICAgIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgd2hpbGUgKGkgPCBteXNpemUgJiYgbWVtY2hyKGFyZ3B0ciwgbXlwdHJbaV0sIGFyZ3NpemUpKQorICAgIHdoaWxlIChpIDwgbXlzaXplICYmIG1lbWNocihhcmdwdHIsICh1bnNpZ25lZCBjaGFyKSBteXB0cltpXSwgYXJnc2l6ZSkpCiAgICAgICAgIGkrKzsKICAgICByZXR1cm4gaTsKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLXJzdHJpcF9oZWxwZXIodW5zaWduZWQgY2hhciAqbXlwdHIsIFB5X3NzaXplX3QgbXlzaXplLAorcnN0cmlwX2hlbHBlcihjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCiAgICAgICAgICAgICAgIHZvaWQgKmFyZ3B0ciwgUHlfc3NpemVfdCBhcmdzaXplKQogewogICAgIFB5X3NzaXplX3QgaSA9IG15c2l6ZSAtIDE7Ci0gICAgd2hpbGUgKGkgPj0gMCAmJiBtZW1jaHIoYXJncHRyLCBteXB0cltpXSwgYXJnc2l6ZSkpCisgICAgd2hpbGUgKGkgPj0gMCAmJiBtZW1jaHIoYXJncHRyLCAodW5zaWduZWQgY2hhcikgbXlwdHJbaV0sIGFyZ3NpemUpKQogICAgICAgICBpLS07CiAgICAgcmV0dXJuIGkgKyAxOwogfQpAQCAtMjQ0Miw3ICsyNDg2LDcgQEAKIGJ5dGVhcnJheV9zdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86c3RyaXAiLCAmYXJnKSkKQEAgLTI0NTQsMTAgKzI0OTgsMTAgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICBpZiAobGVmdCA9PSBteXNpemUpCkBAIC0yNDY2LDcgKzI1MTAsNyBAQAogICAgICAgICByaWdodCA9IHJzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKIH0KIAogUHlEb2NfU1RSVkFSKGxzdHJpcF9fZG9jX18sCkBAIC0yNDc5LDcgKzI1MjMsNyBAQAogYnl0ZWFycmF5X2xzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBsZWZ0LCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86bHN0cmlwIiwgJmFyZykpCkBAIC0yNDkxLDE2ICsyNTM1LDE2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIGxlZnQgPSBsc3RyaXBfaGVscGVyKG15cHRyLCBteXNpemUsIGFyZ3B0ciwgYXJnc2l6ZSk7CiAgICAgcmlnaHQgPSBteXNpemU7CiAgICAgaWYgKGFyZyAhPSBQeV9Ob25lKQogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2YXJnKTsKLSAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfYnl0ZXMgKyBsZWZ0LCByaWdodCAtIGxlZnQpOworICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CiB9CiAKIFB5RG9jX1NUUlZBUihyc3RyaXBfX2RvY19fLApAQCAtMjUxMyw3ICsyNTU3LDcgQEAKIGJ5dGVhcnJheV9yc3RyaXAoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X3NzaXplX3QgcmlnaHQsIG15c2l6ZSwgYXJnc2l6ZTsKLSAgICB2b2lkICpteXB0ciwgKmFyZ3B0cjsKKyAgICBjaGFyICpteXB0ciwgKmFyZ3B0cjsKICAgICBQeU9iamVjdCAqYXJnID0gUHlfTm9uZTsKICAgICBQeV9idWZmZXIgdmFyZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJzdHJpcCIsICZhcmcpKQpAQCAtMjUyNSwxNSArMjU2OSwxNSBAQAogICAgIGVsc2UgewogICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICByaWdodCA9IHJzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcywgcmlnaHQpOworICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShteXB0ciwgcmlnaHQpOwogfQogCiBQeURvY19TVFJWQVIoZGVjb2RlX2RvYywKQEAgLTI1NzgsNzMgKzI2MjIsOSBAQAogaW4gYmV0d2VlbiBlYWNoIHBhaXIsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBhIG5ldyBieXRlYXJyYXkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlYXJyYXlfam9pbihQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0KQorYnl0ZWFycmF5X2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICBQeU9iamVjdCAqc2VxOwotICAgIFB5X3NzaXplX3QgbXlzaXplID0gUHlfU0laRShzZWxmKTsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlfc3NpemVfdCBuOwotICAgIFB5T2JqZWN0ICoqaXRlbXM7Ci0gICAgUHlfc3NpemVfdCB0b3RhbHNpemUgPSAwOwotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgY2hhciAqZGVzdDsKLQotICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChpdCwgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUiKTsKLSAgICBpZiAoc2VxID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIG4gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsKLSAgICBpdGVtcyA9IFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhzZXEpOwotCi0gICAgLyogQ29tcHV0ZSB0aGUgdG90YWwgc2l6ZSwgYW5kIGNoZWNrIHRoYXQgdGhleSBhcmUgYWxsIGJ5dGVzICovCi0gICAgLyogWFhYIFNob3VsZG4ndCB3ZSB1c2UgX2dldGJ1ZmZlcigpIG9uIHRoZXNlIGl0ZW1zIGluc3RlYWQ/ICovCi0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqb2JqID0gaXRlbXNbaV07Ci0gICAgICAgIGlmICghUHlCeXRlQXJyYXlfQ2hlY2sob2JqKSAmJiAhUHlCeXRlc19DaGVjayhvYmopKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIG9mIGJ5dGVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiKGl0ZW0gJWxkIGhhcyB0eXBlICclLjEwMHMnKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYICVsZCBpc24ndCByaWdodCBvbiBXaW42NCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWksIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgIHRvdGFsc2l6ZSArPSBteXNpemU7Ci0gICAgICAgIHRvdGFsc2l6ZSArPSBQeV9TSVpFKG9iaik7Ci0gICAgICAgIGlmICh0b3RhbHNpemUgPCAwKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEFsbG9jYXRlIHRoZSByZXN1bHQsIGFuZCBjb3B5IHRoZSBieXRlcyAqLwotICAgIHJlc3VsdCA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHRvdGFsc2l6ZSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGRlc3QgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcocmVzdWx0KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYmogPSBpdGVtc1tpXTsKLSAgICAgICAgUHlfc3NpemVfdCBzaXplID0gUHlfU0laRShvYmopOwotICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgIGlmIChQeUJ5dGVBcnJheV9DaGVjayhvYmopKQotICAgICAgICAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcob2JqKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICBidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhvYmopOwotICAgICAgICBpZiAoaSkgewotICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNlbGYtPm9iX2J5dGVzLCBteXNpemUpOwotICAgICAgICAgICAgZGVzdCArPSBteXNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGRlc3QsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIGRlc3QgKz0gc2l6ZTsKLSAgICB9Ci0KLSAgICAvKiBEb25lICovCi0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8qIEVycm9yIGhhbmRsaW5nICovCi0gIGVycm9yOgotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBzdHJpbmdsaWJfYnl0ZXNfam9pbihzZWxmLCBpdGVyYWJsZSk7CiB9CiAKIFB5RG9jX1NUUlZBUihzcGxpdGxpbmVzX19kb2NfXywKQEAgLTI3NDgsNiArMjcyOCw3IEBACiB7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGRpY3QgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX19fZGljdF9fKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKSB7CkBAIC0yNzU2LDE5ICsyNzM3LDIwIEBACiAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKICAgICB9CiAKKyAgICBidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgaWYgKHByb3RvIDwgMykgewogICAgICAgICAvKiB1c2Ugc3RyIGJhc2VkIHJlZHVjdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi54ICovCiAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjE7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlcykKLSAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoc2VsZi0+b2JfYnl0ZXMsIFB5X1NJWkUoc2VsZiksIE5VTEwpOworICAgICAgICBpZiAoUHlfU0laRShzZWxmKSkKKyAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoYnVmLCBQeV9TSVpFKHNlbGYpLCBOVUxMKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOwogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oTnMpTikiLCBQeV9UWVBFKHNlbGYpLCBsYXRpbjEsICJsYXRpbi0xIiwgZGljdCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiB1c2UgbW9yZSBlZmZpY2llbnQgYnl0ZSBiYXNlZCByZWR1Y3Rpb24gKi8KLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oeSMpTikiLCBQeV9UWVBFKHNlbGYpLCBzZWxmLT5vYl9ieXRlcywgUHlfU0laRShzZWxmKSwgZGljdCk7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpKSB7CisgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oeSMpTikiLCBQeV9UWVBFKHNlbGYpLCBidWYsIFB5X1NJWkUoc2VsZiksIGRpY3QpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKClOKSIsIFB5X1RZUEUoc2VsZiksIGRpY3QpOwpAQCAtMjg0OSw3ICsyODMxLDcgQEAKICAgICB7ImNvdW50IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAogICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9kb2N9LAogICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2VuZHN3aXRoLCBNRVRIX1ZBUkFSR1MsIGVuZHN3aXRoX19kb2NfX30sCi0gICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJleHBhbmR0YWJzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCiAgICAgeyJleHRlbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2V4dGVuZCwgTUVUSF9PLCBleHRlbmRfX2RvY19ffSwKICAgICB7ImZpbmQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2ZpbmQsIE1FVEhfVkFSQVJHUywgZmluZF9fZG9jX199LApAQCAtMzAwMCw3ICsyOTgyLDcgQEAKIAogICAgIGlmIChpdC0+aXRfaW5kZXggPCBQeUJ5dGVBcnJheV9HRVRfU0laRShzZXEpKSB7CiAgICAgICAgIGl0ZW0gPSBQeUxvbmdfRnJvbUxvbmcoCi0gICAgICAgICAgICAodW5zaWduZWQgY2hhcilzZXEtPm9iX2J5dGVzW2l0LT5pdF9pbmRleF0pOworICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlcSlbaXQtPml0X2luZGV4XSk7CiAgICAgICAgIGlmIChpdGVtICE9IE5VTEwpCiAgICAgICAgICAgICArK2l0LT5pdF9pbmRleDsKICAgICAgICAgcmV0dXJuIGl0ZW07CmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzX21ldGhvZHMuYyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCmluZGV4IGVmM2MyZjcuLjRlODEwN2IgMTAwNjQ0Ci0tLSBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCisrKyBiL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCkBAIC0xMCw5ICsxMCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc3NwYWNlKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTU1BBQ0UoKnApKQpAQCAtNDAsOSArNDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNhbHBoYShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMUEhBKCpwKSkKQEAgLTcwLDkgKzcwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzYWxudW0oY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNBTE5VTSgqcCkpCkBAIC0xMDAsOSArMTAwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzZGlnaXQoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNESUdJVCgqcCkpCkBAIC0xMzAsOSArMTMwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzbG93ZXIoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKICAgICBpbnQgY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0xNjQsOSArMTY0LDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzdXBwZXIoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKICAgICBpbnQgY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0yMDAsOSArMjAwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzdGl0bGUoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKICAgICBpbnQgY2FzZWQsIHByZXZpb3VzX2lzX2Nhc2VkOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgY2FzZWQgPSAwOwogICAgIHByZXZpb3VzX2lzX2Nhc2VkID0gMDsKICAgICBmb3IgKDsgcCA8IGU7IHArKykgewotICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyIGNoID0gKnA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2ggPSAqcDsKIAogICAgICAgICBpZiAoUHlfSVNVUFBFUihjaCkpIHsKICAgICAgICAgICAgIGlmIChwcmV2aW91c19pc19jYXNlZCkKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZXNvYmplY3QuYyBiL09iamVjdHMvYnl0ZXNvYmplY3QuYwppbmRleCA0Nzg5OGZlLi42M2M2N2Y4IDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9ieXRlc29iamVjdC5jCkBAIC0xMCw5ICsxMCwxOCBAQAogc3RhdGljIFB5X3NzaXplX3QKIF9nZXRidWZmZXIoUHlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3KQogewotICAgIFB5QnVmZmVyUHJvY3MgKmJ1ZmZlciA9IFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyOworICAgIFB5QnVmZmVyUHJvY3MgKmJ1ZmZlcnByb2NzOworICAgIGlmIChQeUJ5dGVzX0NoZWNrRXhhY3Qob2JqKSkgeworICAgICAgICAvKiBGYXN0IHBhdGgsIGUuZy4gZm9yIC5qb2luKCkgb2YgbWFueSBieXRlcyBvYmplY3RzICovCisgICAgICAgIFB5X0lOQ1JFRihvYmopOworICAgICAgICB2aWV3LT5vYmogPSBvYmo7CisgICAgICAgIHZpZXctPmJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaik7CisgICAgICAgIHZpZXctPmxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUob2JqKTsKKyAgICAgICAgcmV0dXJuIHZpZXctPmxlbjsKKyAgICB9CiAKLSAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgYnVmZmVyLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkKKyAgICBidWZmZXJwcm9jcyA9IFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyOworICAgIGlmIChidWZmZXJwcm9jcyA9PSBOVUxMIHx8IGJ1ZmZlcnByb2NzLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkKICAgICB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJIiwKQEAgLTIwLDcgKzI5LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChidWZmZXItPmJmX2dldGJ1ZmZlcihvYmosIHZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKQorICAgIGlmIChidWZmZXJwcm9jcy0+YmZfZ2V0YnVmZmVyKG9iaiwgdmlldywgUHlCVUZfU0lNUExFKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gdmlldy0+bGVuOwogfQpAQCAtNjUsNyArNzQsNyBAQAogUHlPYmplY3QgKgogUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgIk5lZ2F0aXZlIHNpemUgcGFzc2VkIHRvIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUiKTsKQEAgLTk4LDcgKzEwNyw3IEBACiAgICAgb3AgPSAoUHlCeXRlc09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhQeUJ5dGVzT2JqZWN0X1NJWkUgKyBzaXplKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKICAgICBvcC0+b2Jfc2hhc2ggPSAtMTsKICAgICBpZiAoc3RyICE9IE5VTEwpCiAgICAgICAgIFB5X01FTUNQWShvcC0+b2Jfc3ZhbCwgc3RyLCBzaXplKTsKQEAgLTExNyw4ICsxMjYsOCBAQAogUHlPYmplY3QgKgogUHlCeXRlc19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgICByZWdpc3RlciBzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKIAogICAgIGFzc2VydChzdHIgIT0gTlVMTCk7CiAgICAgc2l6ZSA9IHN0cmxlbihzdHIpOwpAQCAtMTQ2LDcgKzE1NSw3IEBACiAgICAgb3AgPSAoUHlCeXRlc09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhQeUJ5dGVzT2JqZWN0X1NJWkUgKyBzaXplKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKICAgICBvcC0+b2Jfc2hhc2ggPSAtMTsKICAgICBQeV9NRU1DUFkob3AtPm9iX3N2YWwsIHN0ciwgc2l6ZSsxKTsKICAgICAvKiBzaGFyZSBzaG9ydCBzdHJpbmdzICovCkBAIC01MDQsNyArNTEzLDcgQEAKIC8qIG9iamVjdCBhcGkgKi8KIAogUHlfc3NpemVfdAotUHlCeXRlc19TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTE1LDcgKzUyNCw3IEBACiB9CiAKIGNoYXIgKgotUHlCeXRlc19Bc1N0cmluZyhyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeUJ5dGVzX0FzU3RyaW5nKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MjYsOSArNTM1LDkgQEAKIH0KIAogaW50Ci1QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShyZWdpc3RlciBQeU9iamVjdCAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgKipzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbikKK1B5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKFB5T2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqbGVuKQogewogICAgIGlmIChzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC01NjAsNiArNTY5LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL2pvaW4uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCkBAIC01NjksNyArNTc5LDcgQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfUmVwcihQeU9iamVjdCAqb2JqLCBpbnQgc21hcnRxdW90ZXMpCiB7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCogb3AgPSAoUHlCeXRlc09iamVjdCopIG9iajsKKyAgICBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOwogICAgIFB5X3NzaXplX3QgaSwgbGVuZ3RoID0gUHlfU0laRShvcCk7CiAgICAgc2l6ZV90IG5ld3NpemUsIHNxdW90ZXMsIGRxdW90ZXM7CiAgICAgUHlPYmplY3QgKnY7CkBAIC03MDgsMTIgKzcxOCwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfcmVwZWF0KHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgbikKK2J5dGVzX3JlcGVhdChQeUJ5dGVzT2JqZWN0ICphLCBQeV9zc2l6ZV90IG4pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IHNpemU7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqb3A7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgajsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlCeXRlc09iamVjdCAqb3A7CiAgICAgc2l6ZV90IG5ieXRlczsKICAgICBpZiAobiA8IDApCiAgICAgICAgIG4gPSAwOwpAQCAtNzM5LDcgKzc0OSw3IEBACiAgICAgb3AgPSAoUHlCeXRlc09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhQeUJ5dGVzT2JqZWN0X1NJWkUgKyBuYnl0ZXMpOwogICAgIGlmIChvcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOwogICAgIG9wLT5vYl9zaGFzaCA9IC0xOwogICAgIG9wLT5vYl9zdmFsW3NpemVdID0gJ1wwJzsKICAgICBpZiAoUHlfU0laRShhKSA9PSAxICYmIG4gPiAwKSB7CkBAIC03ODMsNyArNzkzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2l0ZW0oUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQorYnl0ZXNfaXRlbShQeUJ5dGVzT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtNzkyLDYgKzgwMiwyMyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpYS0+b2Jfc3ZhbFtpXSk7CiB9CiAKK1B5X0xPQ0FMKGludCkKK2J5dGVzX2NvbXBhcmVfZXEoUHlCeXRlc09iamVjdCAqYSwgUHlCeXRlc09iamVjdCAqYikKK3sKKyAgICBpbnQgY21wOworICAgIFB5X3NzaXplX3QgbGVuOworCisgICAgbGVuID0gUHlfU0laRShhKTsKKyAgICBpZiAoUHlfU0laRShiKSAhPSBsZW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGEtPm9iX3N2YWxbMF0gIT0gYi0+b2Jfc3ZhbFswXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjbXAgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbGVuKTsKKyAgICByZXR1cm4gKGNtcCA9PSAwKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgogYnl0ZXNfcmljaGNvbXBhcmUoUHlCeXRlc09iamVjdCAqYSwgUHlCeXRlc09iamVjdCAqYiwgaW50IG9wKQogewpAQCAtODEyLDUzICs4MzksNTUgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgICAgICAgZ290byBvdXQ7CiAgICAgfQotICAgIGlmIChhID09IGIpIHsKKyAgICBlbHNlIGlmIChhID09IGIpIHsKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFB5X0VROmNhc2UgUHlfTEU6Y2FzZSBQeV9HRToKKyAgICAgICAgY2FzZSBQeV9FUToKKyAgICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgY2FzZSBQeV9HRToKKyAgICAgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLwogICAgICAgICAgICAgcmVzdWx0ID0gUHlfVHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICBjYXNlIFB5X05FOmNhc2UgUHlfTFQ6Y2FzZSBQeV9HVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5X05FOgorICAgICAgICBjYXNlIFB5X0xUOgorICAgICAgICBjYXNlIFB5X0dUOgogICAgICAgICAgICAgcmVzdWx0ID0gUHlfRmFsc2U7Ci0gICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChvcCA9PSBQeV9FUSkgewotICAgICAgICAvKiBTdXBwb3J0aW5nIFB5X05FIGhlcmUgYXMgd2VsbCBkb2VzIG5vdCBzYXZlCi0gICAgICAgICAgIG11Y2ggdGltZSwgc2luY2UgUHlfTkUgaXMgcmFyZWx5IHVzZWQuICAqLwotICAgICAgICBpZiAoUHlfU0laRShhKSA9PSBQeV9TSVpFKGIpCi0gICAgICAgICAgICAmJiAoYS0+b2Jfc3ZhbFswXSA9PSBiLT5vYl9zdmFsWzBdCi0gICAgICAgICAgICAmJiBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgUHlfU0laRShhKSkgPT0gMCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeV9GYWxzZTsKKyAgICBlbHNlIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgeworICAgICAgICBpbnQgZXEgPSBieXRlc19jb21wYXJlX2VxKGEsIGIpOworICAgICAgICBlcSBePSAob3AgPT0gUHlfTkUpOworICAgICAgICByZXN1bHQgPSBlcSA/IFB5X1RydWUgOiBQeV9GYWxzZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxlbl9hID0gUHlfU0laRShhKTsKKyAgICAgICAgbGVuX2IgPSBQeV9TSVpFKGIpOworICAgICAgICBtaW5fbGVuID0gUHlfTUlOKGxlbl9hLCBsZW5fYik7CisgICAgICAgIGlmIChtaW5fbGVuID4gMCkgeworICAgICAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCphLT5vYl9zdmFsKSAtIFB5X0NIQVJNQVNLKCpiLT5vYl9zdmFsKTsKKyAgICAgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICAgICAgYyA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBtaW5fbGVuKTsKICAgICAgICAgfQotICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IDA7CisgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICBjID0gKGxlbl9hIDwgbGVuX2IpID8gLTEgOiAobGVuX2EgPiBsZW5fYikgPyAxIDogMDsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFB5X0xUOiBjID0gYyA8ICAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9MRTogYyA9IGMgPD0gMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfR1Q6IGMgPSBjID4gIDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0dFOiBjID0gYyA+PSAwOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBjID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwogICAgIH0KLSAgICBsZW5fYSA9IFB5X1NJWkUoYSk7IGxlbl9iID0gUHlfU0laRShiKTsKLSAgICBtaW5fbGVuID0gKGxlbl9hIDwgbGVuX2IpID8gbGVuX2EgOiBsZW5fYjsKLSAgICBpZiAobWluX2xlbiA+IDApIHsKLSAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCphLT5vYl9zdmFsKSAtIFB5X0NIQVJNQVNLKCpiLT5vYl9zdmFsKTsKLSAgICAgICAgaWYgKGM9PTApCi0gICAgICAgICAgICBjID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIG1pbl9sZW4pOwotICAgIH0gZWxzZQotICAgICAgICBjID0gMDsKLSAgICBpZiAoYyA9PSAwKQotICAgICAgICBjID0gKGxlbl9hIDwgbGVuX2IpID8gLTEgOiAobGVuX2EgPiBsZW5fYikgPyAxIDogMDsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBQeV9MVDogYyA9IGMgPCAgMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9MRTogYyA9IGMgPD0gMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9FUTogYXNzZXJ0KDApOyAgYnJlYWs7IC8qIHVucmVhY2hhYmxlICovCi0gICAgY2FzZSBQeV9ORTogYyA9IGMgIT0gMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9HVDogYyA9IGMgPiAgMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9HRTogYyA9IGMgPj0gMDsgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmVzdWx0ID0gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICByZXN1bHQgPSBjID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwotICBvdXQ6CisKICAgICBQeV9JTkNSRUYocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtODY4LDcgKzg5Nyw3IEBACiB7CiAgICAgaWYgKGEtPm9iX3NoYXNoID09IC0xKSB7CiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgYS0+b2Jfc2hhc2ggPSBfUHlfSGFzaEJ5dGVzKCh1bnNpZ25lZCBjaGFyICopIGEtPm9iX3N2YWwsIFB5X1NJWkUoYSkpOworICAgICAgICBhLT5vYl9zaGFzaCA9IF9QeV9IYXNoQnl0ZXMoYS0+b2Jfc3ZhbCwgUHlfU0laRShhKSk7CiAgICAgfQogICAgIHJldHVybiBhLT5vYl9zaGFzaDsKIH0KQEAgLTExMTIsOTQgKzExNDEsOSBAQAogRXhhbXBsZTogYicuJy5qb2luKFtiJ2FiJywgYidwcScsIGIncnMnXSkgLT4gYidhYi5wcS5ycycuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19qb2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3JpZykKK2J5dGVzX2pvaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppdGVyYWJsZSkKIHsKLSAgICBjaGFyICpzZXAgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKTsKLSAgICBjb25zdCBQeV9zc2l6ZV90IHNlcGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZik7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgY2hhciAqcDsKLSAgICBQeV9zc2l6ZV90IHNlcWxlbiA9IDA7Ci0gICAgc2l6ZV90IHN6ID0gMDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKnNlcSwgKml0ZW07Ci0KLSAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3Qob3JpZywgIiIpOwotICAgIGlmIChzZXEgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoc2VxKTsKLSAgICBpZiAoc2VxbGVuID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoIiIpOwotICAgIH0KLSAgICBpZiAoc2VxbGVuID09IDEpIHsKLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIDApOwotICAgICAgICBpZiAoUHlCeXRlc19DaGVja0V4YWN0KGl0ZW0pKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBpdGVtOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogVGhlcmUgYXJlIGF0IGxlYXN0IHR3byB0aGluZ3MgdG8gam9pbiwgb3IgZWxzZSB3ZSBoYXZlIGEgc3ViY2xhc3MKLSAgICAgKiBvZiB0aGUgYnVpbHRpbiB0eXBlcyBpbiB0aGUgc2VxdWVuY2UuCi0gICAgICogRG8gYSBwcmUtcGFzcyB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbCBhbW91bnQgb2Ygc3BhY2Ugd2UnbGwKLSAgICAgKiBuZWVkIChzeiksIGFuZCBzZWUgd2hldGhlciBhbGwgYXJndW1lbnQgYXJlIGJ5dGVzLgotICAgICAqLwotICAgIC8qIFhYWCBTaG91bGRuJ3Qgd2UgdXNlIF9nZXRidWZmZXIoKSBvbiB0aGVzZSBpdGVtcyBpbnN0ZWFkPyAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47IGkrKykgewotICAgICAgICBjb25zdCBzaXplX3Qgb2xkX3N6ID0gc3o7Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKLSAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGl0ZW0pICYmICFQeUJ5dGVBcnJheV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgaXRlbSAlemQ6IGV4cGVjdGVkIGJ5dGVzLCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiICUuODBzIGZvdW5kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpLCBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgc3ogKz0gUHlfU0laRShpdGVtKTsKLSAgICAgICAgaWYgKGkgIT0gMCkKLSAgICAgICAgICAgIHN6ICs9IHNlcGxlbjsKLSAgICAgICAgaWYgKHN6IDwgb2xkX3N6IHx8IHN6ID4gUFlfU1NJWkVfVF9NQVgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIGZvciBieXRlcyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEFsbG9jYXRlIHJlc3VsdCBzcGFjZS4gKi8KLSAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyKilOVUxMLCBzeik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBDYXRlbmF0ZSBldmVyeXRoaW5nLiAqLwotICAgIC8qIEknbSBub3Qgd29ycmllZCBhYm91dCBhIFB5Qnl0ZUFycmF5IGl0ZW0gZ3Jvd2luZyBiZWNhdXNlIHRoZXJlJ3MKLSAgICAgICBub3doZXJlIGluIHRoaXMgZnVuY3Rpb24gd2hlcmUgd2UgcmVsZWFzZSB0aGUgR0lMLiAqLwotICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgewotICAgICAgICBzaXplX3QgbjsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgaWYgKGkpIHsKLSAgICAgICAgICAgIFB5X01FTUNQWShwLCBzZXAsIHNlcGxlbik7Ci0gICAgICAgICAgICBwICs9IHNlcGxlbjsKLSAgICAgICAgfQotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7Ci0gICAgICAgIG4gPSBQeV9TSVpFKGl0ZW0pOwotICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhpdGVtKSkKLSAgICAgICAgICAgIHEgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcSA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOwotICAgICAgICBwICs9IG47Ci0gICAgfQotCi0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICByZXR1cm4gc3RyaW5nbGliX2J5dGVzX2pvaW4oc2VsZiwgaXRlcmFibGUpOwogfQogCiBQeU9iamVjdCAqCkBAIC0xNDIyLDcgKzEzNjYsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTUzNiw5ICsxNDgwLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc190cmFuc2xhdGUoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CiAgICAgY29uc3QgY2hhciAqdGFibGU7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBjLCBjaGFuZ2VkID0gMDsKKyAgICBQeV9zc2l6ZV90IGksIGMsIGNoYW5nZWQgPSAwOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0LCAqZGVsX3RhYmxlPU5VTEw7CiAgICAgUHlfc3NpemVfdCBpbmxlbiwgdGFibGVuLCBkZWxsZW4gPSAwOwpAQCAtMjMxNiw4ICsyMjYwLDYgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxzczpkZWNvZGUiLCBrd2xpc3QsICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQotICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHNlbGYsIGVuY29kaW5nLCBlcnJvcnMpOwogfQogCkBAIC0yNDQ3LDcgKzIzODksNyBAQAogICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX19kb2NfX30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlc19lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLAogICAgICBlbmRzd2l0aF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAorICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlc19maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7ImZyb21oZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCkBAIC0yNjc5LDcgKzI2MjEsNyBAQAogICAgIH0KIAogICAgIC8qIEZvciBpdGVyYXRvciB2ZXJzaW9uLCBjcmVhdGUgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXNpemUgYXMgbmVlZGVkICovCi0gICAgc2l6ZSA9IF9QeU9iamVjdF9MZW5ndGhIaW50KHgsIDY0KTsKKyAgICBzaXplID0gUHlPYmplY3RfTGVuZ3RoSGludCh4LCA2NCk7CiAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogQWxsb2NhdGUgYW4gZXh0cmEgYnl0ZSB0byBwcmV2ZW50IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKSBmcm9tCkBAIC0yNzM3LDkgKzI2NzksOCBAQAogICAgIHJldHVybiBuZXc7CiAKICAgZXJyb3I6Ci0gICAgLyogRXJyb3IgaGFuZGxpbmcgd2hlbiBuZXcgIT0gTlVMTCAqLwogICAgIFB5X1hERUNSRUYoaXQpOwotICAgIFB5X0RFQ1JFRihuZXcpOworICAgIFB5X1hERUNSRUYobmV3KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjgyNSw5ICsyNzY2LDkgQEAKIH07CiAKIHZvaWQKLVB5Qnl0ZXNfQ29uY2F0KHJlZ2lzdGVyIFB5T2JqZWN0ICoqcHYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorUHlCeXRlc19Db25jYXQoUHlPYmplY3QgKipwdiwgUHlPYmplY3QgKncpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgYXNzZXJ0KHB2ICE9IE5VTEwpOwogICAgIGlmICgqcHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjg0MSw3ICsyNzgyLDcgQEAKIH0KIAogdm9pZAotUHlCeXRlc19Db25jYXRBbmREZWwocmVnaXN0ZXIgUHlPYmplY3QgKipwdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitQeUJ5dGVzX0NvbmNhdEFuZERlbChQeU9iamVjdCAqKnB2LCBQeU9iamVjdCAqdykKIHsKICAgICBQeUJ5dGVzX0NvbmNhdChwdiwgdyk7CiAgICAgUHlfWERFQ1JFRih3KTsKQEAgLTI4NjUsOCArMjgwNiw4IEBACiBpbnQKIF9QeUJ5dGVzX1Jlc2l6ZShQeU9iamVjdCAqKnB2LCBQeV9zc2l6ZV90IG5ld3NpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCAqc3Y7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlCeXRlc09iamVjdCAqc3Y7CiAgICAgdiA9ICpwdjsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sodikgfHwgUHlfUkVGQ05UKHYpICE9IDEgfHwgbmV3c2l6ZSA8IDApIHsKICAgICAgICAgKnB2ID0gMDsKZGlmZiAtLWdpdCBhL09iamVjdHMvY2xhc3NvYmplY3QuYyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwppbmRleCBjZGM5YjFjLi4wYzBiZDQ3IDEwMDY0NAotLS0gYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCkBAIC00NCw3ICs0NCw3IEBACiBQeU9iamVjdCAqCiBQeU1ldGhvZF9OZXcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmKQogewotICAgIHJlZ2lzdGVyIFB5TWV0aG9kT2JqZWN0ICppbTsKKyAgICBQeU1ldGhvZE9iamVjdCAqaW07CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC01Miw3ICs1Miw3IEBACiAgICAgaW0gPSBmcmVlX2xpc3Q7CiAgICAgaWYgKGltICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5TWV0aG9kT2JqZWN0ICopKGltLT5pbV9zZWxmKTsKLSAgICAgICAgUHlPYmplY3RfSU5JVChpbSwgJlB5TWV0aG9kX1R5cGUpOworICAgICAgICAodm9pZClQeU9iamVjdF9JTklUKGltLCAmUHlNZXRob2RfVHlwZSk7CiAgICAgICAgIG51bWZyZWUtLTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC02OSw2ICs2OSwzMCBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKilpbTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK21ldGhvZF9yZWR1Y2UoUHlNZXRob2RPYmplY3QgKmltKQoreworICAgIFB5T2JqZWN0ICpzZWxmID0gUHlNZXRob2RfR0VUX1NFTEYoaW0pOworICAgIFB5T2JqZWN0ICpmdW5jID0gUHlNZXRob2RfR0VUX0ZVTkNUSU9OKGltKTsKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgUHlPYmplY3QgKmZ1bmNuYW1lOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgZnVuY25hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZ1bmMsICZQeUlkX19fbmFtZV9fKTsKKyAgICBpZiAoZnVuY25hbWUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgYnVpbHRpbnMgPSBQeUV2YWxfR2V0QnVpbHRpbnMoKTsKKyAgICBnZXRhdHRyID0gX1B5RGljdF9HZXRJdGVtSWQoYnVpbHRpbnMsICZQeUlkX2dldGF0dHIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9OKSIsIGdldGF0dHIsIHNlbGYsIGZ1bmNuYW1lKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1ldGhvZF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW1ldGhvZF9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIC8qIERlc2NyaXB0b3JzIGZvciBQeU1ldGhvZCBhdHRyaWJ1dGVzICovCiAKIC8qIGltX2Z1bmMgYW5kIGltX3NlbGYgYXJlIHN0b3JlZCBpbiB0aGUgUHlNZXRob2Qgb2JqZWN0ICovCkBAIC0xNjQsNyArMTg4LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1ldGhvZF9kZWFsbG9jKHJlZ2lzdGVyIFB5TWV0aG9kT2JqZWN0ICppbSkKK21ldGhvZF9kZWFsbG9jKFB5TWV0aG9kT2JqZWN0ICppbSkKIHsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhpbSk7CiAgICAgaWYgKGltLT5pbV93ZWFrcmVmbGlzdCAhPSBOVUxMKQpAQCAtMzY3LDcgKzM5MSw3IEBACiAgICAgb2Zmc2V0b2YoUHlNZXRob2RPYmplY3QsIGltX3dlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aG9kX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aG9kX21lbWJlcmxpc3QsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aG9kX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTUwOSw3ICs1MzMsNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKgogaW5zdGFuY2VtZXRob2RfZGVzY3JfZ2V0KFB5T2JqZWN0ICpkZXNjciwgUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnR5cGUpIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqZnVuYyA9IFB5SW5zdGFuY2VNZXRob2RfR0VUX0ZVTkNUSU9OKGRlc2NyKTsKKyAgICBQeU9iamVjdCAqZnVuYyA9IFB5SW5zdGFuY2VNZXRob2RfR0VUX0ZVTkNUSU9OKGRlc2NyKTsKICAgICBpZiAob2JqID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgICAgICByZXR1cm4gZnVuYzsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29kZW9iamVjdC5jIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKaW5kZXggOTcxM2Y2MS4uMzUzZjQxNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKQEAgLTc0LDYgKzc0LDExIEBACiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYSByZWFkeSBVbmljb2RlIHN0cmluZyAqLworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoZmlsZW5hbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBuX2NlbGx2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjZWxsdmFycyk7CiAgICAgaW50ZXJuX3N0cmluZ3MobmFtZXMpOwogICAgIGludGVybl9zdHJpbmdzKHZhcm5hbWVzKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29tcGxleG9iamVjdC5jIGIvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKaW5kZXggYjA4YWE2Zi4uYTViNzZmMCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKQEAgLTIxMSwxMyArMjExLDEzIEBACiBQeU9iamVjdCAqCiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KFB5X2NvbXBsZXggY3ZhbCkKIHsKLSAgICByZWdpc3RlciBQeUNvbXBsZXhPYmplY3QgKm9wOworICAgIFB5Q29tcGxleE9iamVjdCAqb3A7CiAKICAgICAvKiBJbmxpbmUgUHlPYmplY3RfTmV3ICovCiAgICAgb3AgPSAoUHlDb21wbGV4T2JqZWN0ICopIFB5T2JqZWN0X01BTExPQyhzaXplb2YoUHlDb21wbGV4T2JqZWN0KSk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVQob3AsICZQeUNvbXBsZXhfVHlwZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvcCwgJlB5Q29tcGxleF9UeXBlKTsKICAgICBvcC0+Y3ZhbCA9IGN2YWw7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBvcDsKIH0KQEAgLTI3MSw2ICsyNzEsMTIgQEAKICAgICBpZiAoZikgewogICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmLCBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGYpOworICAgICAgICBpZiAocmVzICE9IE5VTEwgJiYgIVB5Q29tcGxleF9DaGVjayhyZXMpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yOTYsMTIgKzMwMiw2IEBACiAgICAgbmV3b3AgPSB0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChvcCk7CiAKICAgICBpZiAobmV3b3ApIHsKLSAgICAgICAgaWYgKCFQeUNvbXBsZXhfQ2hlY2sobmV3b3ApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdvcCk7Ci0gICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgICAgIH0KICAgICAgICAgY3YgPSAoKFB5Q29tcGxleE9iamVjdCAqKW5ld29wKS0+Y3ZhbDsKICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKICAgICAgICAgcmV0dXJuIGN2OwpAQCAtNzA1LDcgKzcwNSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5Q29tcGxleF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTc3Myw4ICs3NzMsOSBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHYsICZzLCAmbGVuKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC05NTMsOCArOTU0LDkgQEAKICAgICAgICAgbmJpID0gaS0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOwogICAgIGlmIChuYnIgPT0gTlVMTCB8fCBuYnItPm5iX2Zsb2F0ID09IE5VTEwgfHwKICAgICAgICAgKChpICE9IE5VTEwpICYmIChuYmkgPT0gTlVMTCB8fCBuYmktPm5iX2Zsb2F0ID09IE5VTEwpKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgUHlfVFlQRShyKS0+dHBfbmFtZSk7CiAgICAgICAgIGlmIChvd25fcikgewogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMgYi9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKaW5kZXggYmE5OGEzMC4uMzEyZmM0MCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9kZXNjcm9iamVjdC5jCisrKyBiL09iamVjdHMvZGVzY3JvYmplY3QuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAoKFB5VHlwZU9iamVjdCAqKXR5cGUpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCB0eXBlKTsKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCB0eXBlLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAgICAgaWYgKGRlc2NyX2NoZWNrKChQeURlc2NyT2JqZWN0ICopZGVzY3IsIG9iaiwgJnJlcykpCiAgICAgICAgIHJldHVybiByZXM7Ci0gICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIG9iaik7CisgICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgb2JqLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIzOSw3ICsyMzksNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgc2VsZik7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgc2VsZiwgTlVMTCk7CiAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYXJncyA9IFB5VHVwbGVfR2V0U2xpY2UoYXJncywgMSwgYXJnYyk7CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHNlbGYpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHNlbGYsIE5VTEwpOwogICAgIGlmIChmdW5jID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGFyZ3MgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDEsIGFyZ2MpOwpAQCAtMzk4LDYgKzM5OCwyNCBAQAogICAgIHJldHVybiBkZXNjci0+ZF9xdWFsbmFtZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2Rlc2NyX3JlZHVjZShQeURlc2NyT2JqZWN0ICpkZXNjcikKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT08pIiwgZ2V0YXR0ciwgUHlEZXNjcl9UWVBFKGRlc2NyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX05BTUUoZGVzY3IpKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGRlc2NyX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVzY3JfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgZGVzY3JfbWVtYmVyc1tdID0gewogICAgIHsiX19vYmpjbGFzc19fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfdHlwZSksIFJFQURPTkxZfSwKICAgICB7Il9fbmFtZV9fIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5RGVzY3JPYmplY3QsIGRfbmFtZSksIFJFQURPTkxZfSwKQEAgLTQ5NCw3ICs1MTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aG9kX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTUzMiw3ICs1NTAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aG9kX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTU2OSw3ICs1ODcsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWVtYmVyX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTY0Myw3ICs2NjEsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgZGVzY3JfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgZGVzY3JfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgd3JhcHBlcmRlc2NyX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTEwMDksNyArMTAyNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogd3JhcHBlcl9yaWNoY29tcGFyZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIsIGludCBvcCkKIHsKLSAgICBpbnQgcmVzdWx0OworICAgIFB5X2ludHB0cl90IHJlc3VsdDsKICAgICBQeU9iamVjdCAqdjsKICAgICBQeVdyYXBwZXJEZXNjck9iamVjdCAqYV9kZXNjciwgKmJfZGVzY3I7CiAKQEAgLTEwODUsNiArMTEwMywyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdwLT5zZWxmKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBwZXJfcmVkdWNlKHdyYXBwZXJvYmplY3QgKndwKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTykiLCBnZXRhdHRyLCB3cC0+c2VsZiwgUHlEZXNjcl9OQU1FKHdwLT5kZXNjcikpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgd3JhcHBlcl9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXdyYXBwZXJfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBzdGF0aWMgUHlNZW1iZXJEZWYgd3JhcHBlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJfX3NlbGZfXyIsIFRfT0JKRUNULCBvZmZzZXRvZih3cmFwcGVyb2JqZWN0LCBzZWxmKSwgUkVBRE9OTFl9LAogICAgIHswfQpAQCAtMTE5Myw3ICsxMjI4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIHdyYXBwZXJfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIHdyYXBwZXJfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIHdyYXBwZXJfZ2V0c2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDdhYTVlYTguLmJmYzczMGIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC02OSw2ICs2OSwxMSBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9lcS5oIgogCisvKltjbGluaWNdCitjbGFzcyBkaWN0CitbY2xpbmljXSovCisvKltjbGluaWMgY2hlY2tzdW06IGRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgbWVfa2V5LiAqLwogICAgIFB5X2hhc2hfdCBtZV9oYXNoOwpAQCAtOTUsMjAgKzEwMCw2IEBACiBpdCdzIFVTQUJMRV9GUkFDVElPTiAoY3VycmVudGx5IHR3by10aGlyZHMpIGZ1bGwuCiAqLwogCi0vKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCi0gKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQotICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KLXN0YXRpYyB2b2lkCi1zZXRfa2V5X2Vycm9yKFB5T2JqZWN0ICphcmcpCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLwotICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLX0KLQogI2RlZmluZSBQRVJUVVJCX1NISUZUIDUKIAogLyoKQEAgLTMwNSw5ICsyOTYsOSBAQAogICogI2RlZmluZSBVU0FCTEVfRlJBQ1RJT04obikgKCgobikgPj4gMSkgKyAoKG4pID4+IDIpIC0gKChuKSA+PiAzKSkKICovCiAKLS8qIEdST1dUSF9SQVRFLiBHcm93dGggcmF0ZSB1cG9uIGhpdHRpbmcgbWF4aW11bSBsb2FkLiAKLSAqIEN1cnJlbnRseSBzZXQgdG8gdXNlZCoyICsgY2FwYWNpdHkvMi4gCi0gKiBUaGlzIG1lYW5zIHRoYXQgZGljdHMgZG91YmxlIGluIHNpemUgd2hlbiBncm93aW5nIHdpdGhvdXQgZGVsZXRpb25zLCAKKy8qIEdST1dUSF9SQVRFLiBHcm93dGggcmF0ZSB1cG9uIGhpdHRpbmcgbWF4aW11bSBsb2FkLgorICogQ3VycmVudGx5IHNldCB0byB1c2VkKjIgKyBjYXBhY2l0eS8yLgorICogVGhpcyBtZWFucyB0aGF0IGRpY3RzIGRvdWJsZSBpbiBzaXplIHdoZW4gZ3Jvd2luZyB3aXRob3V0IGRlbGV0aW9ucywKICAqIGJ1dCBoYXZlIG1vcmUgaGVhZCByb29tIHdoZW4gdGhlIG51bWJlciBvZiBkZWxldGlvbnMgaXMgb24gYSBwYXIgd2l0aCB0aGUKICAqIG51bWJlciBvZiBpbnNlcnRpb25zLgogICogUmFpc2luZyB0aGlzIHRvIHVzZWQqNCBkb3VibGVzIG1lbW9yeSBjb25zdW1wdGlvbiBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YKQEAgLTM4OSw2ICszODAsNyBAQAogbmV3X2RpY3QoUHlEaWN0S2V5c09iamVjdCAqa2V5cywgUHlPYmplY3QgKip2YWx1ZXMpCiB7CiAgICAgUHlEaWN0T2JqZWN0ICptcDsKKyAgICBhc3NlcnQoa2V5cyAhPSBOVUxMKTsKICAgICBpZiAobnVtZnJlZSkgewogICAgICAgICBtcCA9IGZyZWVfbGlzdFstLW51bWZyZWVdOwogICAgICAgICBhc3NlcnQgKG1wICE9IE5VTEwpOwpAQCAtNDMxLDcgKzQyMywxMCBAQAogUHlPYmplY3QgKgogUHlEaWN0X05ldyh2b2lkKQogewotICAgIHJldHVybiBuZXdfZGljdChuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpLCBOVUxMKTsKKyAgICBQeURpY3RLZXlzT2JqZWN0ICprZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKKyAgICBpZiAoa2V5cyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gbmV3X2RpY3Qoa2V5cywgTlVMTCk7CiB9CiAKIC8qCkBAIC00NjMsMTMgKzQ1OCwxMyBAQAogbG9va2RpY3QoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzazsKKyAgICBzaXplX3QgaTsKKyAgICBzaXplX3QgcGVydHVyYjsKKyAgICBQeURpY3RLZXlFbnRyeSAqZnJlZXNsb3Q7CisgICAgc2l6ZV90IG1hc2s7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7Ci0gICAgcmVnaXN0ZXIgaW50IGNtcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgaW50IGNtcDsKICAgICBQeU9iamVjdCAqc3RhcnRrZXk7CiAKIHRvcDoKQEAgLTU1NSwxMiArNTUwLDEyIEBACiBsb29rZGljdF91bmljb2RlKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKKyAgICBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOwogICAgIFB5RGljdEtleUVudHJ5ICplcDAgPSAmbXAtPm1hX2tleXMtPmRrX2VudHJpZXNbMF07Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmVwOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKIAogICAgIC8qIE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSB0byBoYW5kbGUgbm9uLXVuaWNvZGUga2V5cywKICAgICAgICBpbmNsdWRpbmcgc3ViY2xhc3NlcyBvZiBzdHI7IGUuZy4sIG9uZSByZWFzb24gdG8gc3ViY2xhc3MKQEAgLTYyMCwxMSArNjE1LDExIEBACiBsb29rZGljdF91bmljb2RlX25vZHVtbXkoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtNjY1LDExICs2NjAsMTEgQEAKIGxvb2tkaWN0X3NwbGl0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksCiAgICAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaCwgUHlPYmplY3QgKioqdmFsdWVfYWRkcikKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsKLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IERLX01BU0sobXAtPm1hX2tleXMpOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpKSB7CiAgICAgICAgIGVwID0gbG9va2RpY3QobXAsIGtleSwgaGFzaCwgdmFsdWVfYWRkcik7CkBAIC0xMjM3LDcgKzEyMzIsNyBAQAogICAgIGlmIChlcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCp2YWx1ZV9hZGRyID09IE5VTEwpIHsKLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBvbGRfdmFsdWUgPSAqdmFsdWVfYWRkcjsKQEAgLTEzOTEsNyArMTM4Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgREtfREVDUkVGKGtleXMpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmIChrZXlzICE9IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KGtleXMtPmRrX3JlZmNudCA9PSAxKTsKICAgICAgICAgREtfREVDUkVGKGtleXMpOwogICAgIH0KQEAgLTE0MDcsOSArMTQwMiw5IEBACiBkaWN0X3JlcHIoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKnMsICp0ZW1wLCAqY29sb24gPSBOVUxMOwotICAgIFB5T2JqZWN0ICpwaWVjZXMgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CisgICAgaW50IGZpcnN0OwogCiAgICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QgKiltcCk7CiAgICAgaWYgKGkgIT0gMCkgewpAQCAtMTQxNyw3MSArMTQxMiw3MyBAQAogICAgIH0KIAogICAgIGlmIChtcC0+bWFfdXNlZCA9PSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7fSIpOwotICAgICAgICBnb3RvIERvbmU7CisgICAgICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygie30iKTsKICAgICB9CiAKLSAgICBwaWVjZXMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChwaWVjZXMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICAvKiAieyIgKyAiMTogMiIgKyAiLCAzOiA0IiAqIChsZW4gLSAxKSArICJ9IiAqLworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDQgKyAoMiArIDQpICogKG1wLT5tYV91c2VkIC0gMSkgKyAxOwogCi0gICAgY29sb24gPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiOiAiKTsKLSAgICBpZiAoY29sb24gPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAneycpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGtleSt2YWx1ZSBwYWlyLCBhbmQgaW5zZXJ0ICI6ICIgYmV0d2VlbiB0aGVtLgogICAgICAgIE5vdGUgdGhhdCByZXByIG1heSBtdXRhdGUgdGhlIGRpY3QuICovCiAgICAgaSA9IDA7CisgICAgZmlyc3QgPSAxOwogICAgIHdoaWxlIChQeURpY3RfTmV4dCgoUHlPYmplY3QgKiltcCwgJmksICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgaW50IHN0YXR1czsKKyAgICAgICAgUHlPYmplY3QgKnM7CisgICAgICAgIGludCByZXM7CisKICAgICAgICAgLyogUHJldmVudCByZXByIGZyb20gZGVsZXRpbmcga2V5IG9yIHZhbHVlIGR1cmluZyBrZXkgZm9ybWF0LiAqLwogICAgICAgICBQeV9JTkNSRUYoa2V5KTsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKworICAgICAgICBpZiAoIWZpcnN0KSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsICIsIDIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGZpcnN0ID0gMDsKKwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcihrZXkpOwotICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZzLCBjb2xvbik7Ci0gICAgICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnMsIFB5T2JqZWN0X1JlcHIodmFsdWUpKTsKLSAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHN0YXR1cyA9IFB5TGlzdF9BcHBlbmQocGllY2VzLCBzKTsKLSAgICAgICAgUHlfREVDUkVGKHMpOyAgLyogYXBwZW5kIGNyZWF0ZWQgYSBuZXcgcmVmICovCi0gICAgICAgIGlmIChzdGF0dXMgPCAwKQotICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKTsKKyAgICAgICAgUHlfREVDUkVGKHMpOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiOiAiLCAyKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHZhbHVlKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcyk7CisgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIFB5X0NMRUFSKGtleSk7CisgICAgICAgIFB5X0NMRUFSKHZhbHVlKTsKICAgICB9CiAKLSAgICAvKiBBZGQgInt9IiBkZWNvcmF0aW9ucyB0byB0aGUgZmlyc3QgYW5kIGxhc3QgaXRlbXMuICovCi0gICAgYXNzZXJ0KFB5TGlzdF9HRVRfU0laRShwaWVjZXMpID4gMCk7Ci0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7Iik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRlbXAgPSBQeUxpc3RfR0VUX0lURU0ocGllY2VzLCAwKTsKLSAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZzLCB0ZW1wKTsKLSAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCAwLCBzKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICd9JykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ9Iik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRlbXAgPSBQeUxpc3RfR0VUX0lURU0ocGllY2VzLCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSAtIDEpOwotICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnRlbXAsIHMpOwotICAgIFB5TGlzdF9TRVRfSVRFTShwaWVjZXMsIFB5TGlzdF9HRVRfU0laRShwaWVjZXMpIC0gMSwgdGVtcCk7Ci0gICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotCi0gICAgLyogUGFzdGUgdGhlbSBhbGwgdG9nZXRoZXIgd2l0aCAiLCAiIGJldHdlZW4uICovCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICByZXN1bHQgPSBQeVVuaWNvZGVfSm9pbihzLCBwaWVjZXMpOwotICAgIFB5X0RFQ1JFRihzKTsKLQotRG9uZToKLSAgICBQeV9YREVDUkVGKHBpZWNlcyk7Ci0gICAgUHlfWERFQ1JFRihjb2xvbik7CiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKLSAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworCitlcnJvcjoKKyAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKKyAgICBQeV9YREVDUkVGKGtleSk7CisgICAgUHlfWERFQ1JFRih2YWx1ZSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0xNDkxLDcgKzE0ODgsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9zdWJzY3JpcHQoUHlEaWN0T2JqZWN0ICptcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RpY3Rfc3Vic2NyaXB0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlfaGFzaF90IGhhc2g7CkBAIC0xNTIzLDcgKzE1MjAsNyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZQpAQCAtMTU0NywxMCArMTU0NCwxMCBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfa2V5cyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9rZXlzKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CkBAIC0xNTkxLDEwICsxNTg4LDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3ZhbHVlcyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF92YWx1ZXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGo7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbiwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCkBAIC0xNjMzLDEwICsxNjMwLDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2l0ZW1zKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2l0ZW1zKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBuOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgaiwgbjsKICAgICBQeV9zc2l6ZV90IHNpemUsIG9mZnNldDsKICAgICBQeU9iamVjdCAqaXRlbSwgKmtleTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CkBAIC0xOTA4LDggKzE5MDUsOCBAQAogaW50CiBQeURpY3RfTWVyZ2UoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ZlcnJpZGUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgKm90aGVyOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeURpY3RPYmplY3QgKm1wLCAqb3RoZXI7CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIFB5RGljdEtleUVudHJ5ICplbnRyeTsKIAogICAgIC8qIFdlIGFjY2VwdCBmb3IgdGhlIGFyZ3VtZW50IGVpdGhlciBhIGNvbmNyZXRlIGRpY3Rpb25hcnkgb2JqZWN0LApAQCAtMjAwNiw3ICsyMDAzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfY29weShyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9jb3B5KFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgcmV0dXJuIFB5RGljdF9Db3B5KChQeU9iamVjdCopbXApOwogfQpAQCAtMjExOCwxMyArMjExNSwxOCBAQAogICAgICAgICBpZiAoYXZhbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpbnQgY21wOwogICAgICAgICAgICAgUHlPYmplY3QgKmJ2YWw7CisgICAgICAgICAgICBQeU9iamVjdCAqKnZhZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IGVwLT5tZV9rZXk7CiAgICAgICAgICAgICAvKiB0ZW1wb3JhcmlseSBidW1wIGF2YWwncyByZWZjb3VudCB0byBlbnN1cmUgaXQgc3RheXMKICAgICAgICAgICAgICAgIGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCBpdCAqLwogICAgICAgICAgICAgUHlfSU5DUkVGKGF2YWwpOwogICAgICAgICAgICAgLyogZGl0dG8gZm9yIGtleSAqLwogICAgICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgICAgICBidmFsID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoKFB5T2JqZWN0ICopYiwga2V5KTsKKyAgICAgICAgICAgIC8qIHJldXNlIHRoZSBrbm93biBoYXNoIHZhbHVlICovCisgICAgICAgICAgICBpZiAoKGItPm1hX2tleXMtPmRrX2xvb2t1cCkoYiwga2V5LCBlcC0+bWVfaGFzaCwgJnZhZGRyKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJ2YWwgPSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ2YWwgPSAqdmFkZHI7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIGlmIChidmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXZhbCk7CkBAIC0yMTYyLDkgKzIxNjQsMjkgQEAKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWNdCisKK0Bjb2V4aXN0CitkaWN0Ll9fY29udGFpbnNfXworCisgIGtleTogb2JqZWN0CisgIC8KKworVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlIgorW2NsaW5pY10qLworCitQeURvY19TVFJWQVIoZGljdF9fX2NvbnRhaW5zX19fX2RvY19fLAorIl9fY29udGFpbnNfXyhrZXkpXG4iCisiVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlXCIiKTsKKworI2RlZmluZSBESUNUX19fQ09OVEFJTlNfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19jb250YWluc19fIiwgKFB5Q0Z1bmN0aW9uKWRpY3RfX19jb250YWluc19fLCBNRVRIX098TUVUSF9DT0VYSVNULCBkaWN0X19fY29udGFpbnNfX19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9jb250YWlucyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5KQorZGljdF9fX2NvbnRhaW5zX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXkpCisvKltjbGluaWMgY2hlY2tzdW06IDNiYmFjNWNlODk4YWU2MzBkOTY2OGZhMWM4YjNhZmI2NDVmZjIyZThdKi8KIHsKKyAgICByZWdpc3RlciBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKXNlbGY7CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICoqdmFsdWVfYWRkcjsKQEAgLTIxODIsNyArMjIwNCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2dldChyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK2RpY3RfZ2V0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOwpAQCAtMjIxMCwxOSArMjIzMiwxOSBAQAogICAgIHJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3NldGRlZmF1bHQocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCitQeU9iamVjdCAqCitQeURpY3RfU2V0RGVmYXVsdChQeU9iamVjdCAqZCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmRlZmF1bHRvYmopCiB7Ci0gICAgUHlPYmplY3QgKmtleTsKLSAgICBQeU9iamVjdCAqZmFpbG9iaiA9IFB5X05vbmU7CisgICAgUHlEaWN0T2JqZWN0ICptcCA9IChQeURpY3RPYmplY3QgKilkOwogICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJmtleSwgJmZhaWxvYmopKQorICAgIGlmICghUHlEaWN0X0NoZWNrKGQpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIH0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKICAgICAgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKQEAgLTIyNDAsMjMgKzIyNjIsMzUgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGVwID0gZmluZF9lbXB0eV9zbG90KG1wLCBrZXksIGhhc2gsICZ2YWx1ZV9hZGRyKTsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoZmFpbG9iaik7CisgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0b2JqKTsKICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIGZhaWxvYmopOworICAgICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCBkZWZhdWx0b2JqKTsKICAgICAgICAgZXAtPm1lX2tleSA9IGtleTsKICAgICAgICAgZXAtPm1lX2hhc2ggPSBoYXNoOwotICAgICAgICAqdmFsdWVfYWRkciA9IGZhaWxvYmo7Ci0gICAgICAgIHZhbCA9IGZhaWxvYmo7CisgICAgICAgICp2YWx1ZV9hZGRyID0gZGVmYXVsdG9iajsKKyAgICAgICAgdmFsID0gZGVmYXVsdG9iajsKICAgICAgICAgbXAtPm1hX2tleXMtPmRrX3VzYWJsZS0tOwogICAgICAgICBtcC0+bWFfdXNlZCsrOwogICAgIH0KLSAgICBQeV9JTkNSRUYodmFsKTsKICAgICByZXR1cm4gdmFsOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGljdF9zZXRkZWZhdWx0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICprZXksICp2YWw7CisgICAgUHlPYmplY3QgKmRlZmF1bHRvYmogPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0ZGVmYXVsdCIsIDEsIDIsICZrZXksICZkZWZhdWx0b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB2YWwgPSBQeURpY3RfU2V0RGVmYXVsdCgoUHlPYmplY3QgKiltcCwga2V5LCBkZWZhdWx0b2JqKTsKKyAgICBQeV9YSU5DUkVGKHZhbCk7CisgICAgcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfY2xlYXIocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfY2xlYXIoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICBQeURpY3RfQ2xlYXIoKFB5T2JqZWN0ICopbXApOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjI3OCw3ICsyMzEyLDcgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fApAQCAtMjI5Niw3ICsyMzMwLDcgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgICp2YWx1ZV9hZGRyID0gTlVMTDsKQEAgLTI0MzcsOSArMjQ3MSw2IEBACiAgICAgcmV0dXJuIHNpemVvZihQeURpY3RLZXlzT2JqZWN0KSArIChES19TSVpFKGtleXMpLTEpICogc2l6ZW9mKFB5RGljdEtleUVudHJ5KTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbnRhaW5zX19kb2NfXywKLSJELl9fY29udGFpbnNfXyhrKSAtPiBUcnVlIGlmIEQgaGFzIGEga2V5IGssIGVsc2UgRmFsc2UiKTsKLQogUHlEb2NfU1RSVkFSKGdldGl0ZW1fX2RvY19fLCAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKTsKIAogUHlEb2NfU1RSVkFSKHNpemVvZl9fZG9jX18sCkBAIC0yNDYwLDEwICsyNDkxLDEwIEBACiAyLXR1cGxlOyBidXQgcmFpc2UgS2V5RXJyb3IgaWYgRCBpcyBlbXB0eS4iKTsKIAogUHlEb2NfU1RSVkFSKHVwZGF0ZV9fZG9jX18sCi0iRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIGRpY3QvaXRlcmFibGUgRSBhbmQgRi5cbiIKLSJJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba11cblwKLUlmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2XG5cCi1JbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGsgaW4gRjogRFtrXSA9IEZba10iKTsKKyJELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gZGljdC9pdGVyYWJsZSBFIGFuZCBGLlxuXAorSWYgRSBpcyBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgdGhlbiBkb2VzOiAgZm9yIGsgaW4gRTogRFtrXSA9IEVba11cblwKK0lmIEUgaXMgcHJlc2VudCBhbmQgbGFja3MgYSAua2V5cygpIG1ldGhvZCwgdGhlbiBkb2VzOiAgZm9yIGssIHYgaW4gRTogRFtrXSA9IHZcblwKK0luIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgayBpbiBGOiAgRFtrXSA9IEZba10iKTsKIAogUHlEb2NfU1RSVkFSKGZyb21rZXlzX19kb2NfXywKICJkaWN0LmZyb21rZXlzKFNbLHZdKSAtPiBOZXcgZGljdCB3aXRoIGtleXMgZnJvbSBTIGFuZCB2YWx1ZXMgZXF1YWwgdG8gdi5cblwKQEAgLTI0ODgsOCArMjUxOSw3IEBACiAgICAgICAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgbWFwcF9tZXRob2RzW10gPSB7Ci0gICAgeyJfX2NvbnRhaW5zX18iLChQeUNGdW5jdGlvbilkaWN0X2NvbnRhaW5zLCAgICAgTUVUSF9PIHwgTUVUSF9DT0VYSVNULAotICAgICBjb250YWluc19fZG9jX199LAorICAgIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRgogICAgIHsiX19nZXRpdGVtX18iLCAoUHlDRnVuY3Rpb24pZGljdF9zdWJzY3JpcHQsICAgICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCiAgICAgIGdldGl0ZW1fX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilkaWN0X3NpemVvZiwgICAgICAgTUVUSF9OT0FSR1MsCkBAIC0yNTY4LDIyICsyNTk4LDIzIEBACiBkaWN0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqc2VsZjsKKyAgICBQeURpY3RPYmplY3QgKmQ7CiAKICAgICBhc3NlcnQodHlwZSAhPSBOVUxMICYmIHR5cGUtPnRwX2FsbG9jICE9IE5VTEwpOwogICAgIHNlbGYgPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKLSAgICBpZiAoc2VsZiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdE9iamVjdCAqZCA9IChQeURpY3RPYmplY3QgKilzZWxmOwotICAgICAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKLSAgICAgICAgLyogWFhYIC0gU2hvdWxkIHdlIHJhaXNlIGEgbm8tbWVtb3J5IGVycm9yPyAqLwotICAgICAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBES19JTkNSRUYoUHlfRU1QVFlfS0VZUyk7Ci0gICAgICAgICAgICBkLT5tYV9rZXlzID0gUHlfRU1QVFlfS0VZUzsKLSAgICAgICAgICAgIGQtPm1hX3ZhbHVlcyA9IGVtcHR5X3ZhbHVlczsKLSAgICAgICAgfQotICAgICAgICBkLT5tYV91c2VkID0gMDsKLSAgICAgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KLSAgICAgICAgaWYgKHR5cGUgPT0gJlB5RGljdF9UeXBlKQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZCA9IChQeURpY3RPYmplY3QgKilzZWxmOworCisgICAgLyogVGhlIG9iamVjdCBoYXMgYmVlbiBpbXBsaWNpdGx5IHRyYWNrZWQgYnkgdHBfYWxsb2MgKi8KKyAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCisgICAgICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKGQpOworCisgICAgZC0+bWFfdXNlZCA9IDA7CisgICAgZC0+bWFfa2V5cyA9IG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCk7CisgICAgaWYgKGQtPm1hX2tleXMgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTI2NTksOCArMjY5MCwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdjsKICAgICBrdiA9IF9QeVVuaWNvZGVfRnJvbUlkKGtleSk7IC8qIGJvcnJvd2VkICovCi0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBQeURpY3RfR2V0SXRlbShkcCwga3YpOwogfQogCkBAIC0yNjcxLDggKzI3MDQsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqa3YsICpydjsKICAgICBrdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGtleSk7Ci0gICAgaWYgKGt2ID09IE5VTEwpCisgICAgaWYgKGt2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJ2ID0gUHlEaWN0X0dldEl0ZW0odiwga3YpOwogICAgIFB5X0RFQ1JFRihrdik7CiAgICAgcmV0dXJuIHJ2OwpAQCAtMjcwMyw2ICsyNzM4LDE1IEBACiB9CiAKIGludAorX1B5RGljdF9EZWxJdGVtSWQoUHlPYmplY3QgKnYsIF9QeV9JZGVudGlmaWVyICprZXkpCit7CisgICAgUHlPYmplY3QgKmt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeURpY3RfRGVsSXRlbSh2LCBrdik7Cit9CisKK2ludAogUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnYsIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqa3Y7CkBAIC0yNzk1LDggKzI4MzksOCBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGtleShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKLSAgICByZWdpc3RlciBQeURpY3RLZXlzT2JqZWN0ICprOworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5RGljdEtleXNPYmplY3QgKms7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTI4NzgsNyArMjkyMiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0dmFsdWUoZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICp2YWx1ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2ssIG9mZnNldDsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjk1OSw3ICszMDAzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHRpdGVtKGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpyZXN1bHQgPSBkaS0+ZGlfcmVzdWx0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLmFmNDBiYzggMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xMjEsMTEgKzEyMSwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIEJhc2VFeGNlcHRpb25fcmVwcihQeUJhc2VFeGNlcHRpb25PYmplY3QgKnNlbGYpCiB7Ci0gICAgY2hhciAqbmFtZTsKLSAgICBjaGFyICpkb3Q7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBjaGFyICpkb3Q7CiAKLSAgICBuYW1lID0gKGNoYXIgKilQeV9UWVBFKHNlbGYpLT50cF9uYW1lOwotICAgIGRvdCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKKyAgICBuYW1lID0gUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKKyAgICBkb3QgPSAoY29uc3QgY2hhciAqKSBzdHJyY2hyKG5hbWUsICcuJyk7CiAgICAgaWYgKGRvdCAhPSBOVUxMKSBuYW1lID0gZG90KzE7CiAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzJVIiLCBuYW1lLCBzZWxmLT5hcmdzKTsKQEAgLTg0NSw3ICs4NDUsNyBAQAogICAgIC8qIFN0ZWFscyB0aGUgcmVmZXJlbmNlIHRvIGFyZ3MgKi8KICAgICBQeV9DTEVBUihzZWxmLT5hcmdzKTsKICAgICBzZWxmLT5hcmdzID0gYXJnczsKLSAgICBhcmdzID0gTlVMTDsKKyAgICAqcF9hcmdzID0gYXJncyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg4NSwxMSArODg1LDEyIEBACiAgICAgUHlPYmplY3QgKndpbmVycm9yID0gTlVMTDsKICNlbmRpZgogCisgICAgUHlfSU5DUkVGKGFyZ3MpOworCiAgICAgaWYgKCFvc2Vycm9yX3VzZV9pbml0KHR5cGUpKSB7CiAgICAgICAgIGlmICghX1B5QXJnX05vS2V5d29yZHModHlwZS0+dHBfbmFtZSwga3dkcykpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwogICAgICAgICBpZiAob3NlcnJvcl9wYXJzZV9hcmdzKCZhcmdzLCAmbXllcnJubywgJnN0cmVycm9yLCAmZmlsZW5hbWUKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAmd2luZXJyb3IKQEAgLTkzMiw2ICs5MzMsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBQeV9YREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKIAogZXJyb3I6CkBAIC0yMzI3LDcgKzIzMjksNyBAQAogICAgIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3ZXJlIGFkZGVkIHRvIGVycm5vLmggaW4gVlMyMDEwIGJ1dCBoYXZlCiAgICBwcmVmZXJyZWQgV1NBIGVxdWl2YWxlbnRzLiAqLwogI3VuZGVmIEVBRERSSU5VU0UKQEAgLTI1OTEsMyArMjU5MywxMzEgQEAKICAgICBmcmVlX3ByZWFsbG9jYXRlZF9tZW1lcnJvcnMoKTsKICAgICBQeV9DTEVBUihlcnJub21hcCk7CiB9CisKKy8qIEhlbHBlciB0byBkbyB0aGUgZXF1aXZhbGVudCBvZiAicmFpc2UgWCBmcm9tIFkiIGluIEMsIGJ1dCBhbHdheXMgdXNpbmcKKyAqIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiByYXRoZXIgdGhhbiBwYXNzaW5nIG9uZSBpbi4KKyAqCisgKiBXZSBjdXJyZW50bHkgbGltaXQgdGhpcyB0byAqb25seSogZXhjZXB0aW9ucyB0aGF0IHVzZSB0aGUgQmFzZUV4Y2VwdGlvbgorICogdHBfaW5pdCBhbmQgdHBfbmV3IG1ldGhvZHMsIHNpbmNlIHdlIGNhbiBiZSByZWFzb25hYmx5IHN1cmUgd2UgY2FuIHdyYXAKKyAqIHRob3NlIGNvcnJlY3RseSB3aXRob3V0IGxvc2luZyBkYXRhIGFuZCB3aXRob3V0IGxvc2luZyBiYWNrd2FyZHMKKyAqIGNvbXBhdGliaWxpdHkuCisgKgorICogV2UgYWxzbyBhaW0gdG8gcnVsZSBvdXQgKmFsbCogZXhjZXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHN0b3JpbmcgYWRkaXRpb25hbAorICogc3RhdGUsIHdoZXRoZXIgYnkgaGF2aW5nIGEgc2l6ZSBkaWZmZXJlbmNlIHJlbGF0aXZlIHRvIEJhc2VFeGNlcHRpb24sCisgKiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgaW4gZHVyaW5nIGNvbnN0cnVjdGlvbiBvciBieSBoYXZpbmcgYQorICogbm9uLWVtcHR5IGluc3RhbmNlIGRpY3QuCisgKgorICogV2UgbmVlZCB0byBiZSB2ZXJ5IGNhcmVmdWwgd2l0aCB3aGF0IHdlIHdyYXAsIHNpbmNlIGNoYW5naW5nIHR5cGVzIHRvCisgKiBhIGJyb2FkZXIgZXhjZXB0aW9uIHR5cGUgd291bGQgYmUgYmFja3dhcmRzIGluY29tcGF0aWJsZSBmb3IKKyAqIGV4aXN0aW5nIGNvZGVjcywgYW5kIHdpdGggZGlmZmVyZW50IGluaXQgb3IgbmV3IG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMKKyAqIG1heSBlaXRoZXIgbm90IHN1cHBvcnQgaW5zdGFudGlhdGlvbiB3aXRoIFB5RXJyX0Zvcm1hdCBvciBsb3NlCisgKiBpbmZvcm1hdGlvbiB3aGVuIGluc3RhbnRpYXRlZCB0aGF0IHdheS4KKyAqCisgKiBYWFggKG5jb2dobGFuKTogVGhpcyBjb3VsZCBiZSBtYWRlIG1vcmUgY29tcHJlaGVuc2l2ZSBieSBleHBsb2l0aW5nIHRoZQorICogZmFjdCB0aGF0IGV4Y2VwdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHN1cHBvcnQgcGlja2xpbmcuIElmIG1vcmUgYnVpbHRpbgorICogZXhjZXB0aW9ucyAoZS5nLiBBdHRyaWJ1dGVFcnJvcikgc3RhcnQgdG8gYmUgY29udmVydGVkIHRvIHJpY2gKKyAqIGV4Y2VwdGlvbnMgd2l0aCBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIHRoYXQncyBwcm9iYWJseSBhIGJldHRlciBhcHByb2FjaAorICogdG8gcHVyc3VlIG92ZXIgYWRkaW5nIHNwZWNpYWwgY2FzZXMgZm9yIHBhcnRpY3VsYXIgc3RhdGVmdWwgc3ViY2xhc3Nlcy4KKyAqCisgKiBSZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlIHRvIHRoZSBuZXcgZXhjZXB0aW9uIChpZiBhbnkpLCBOVUxMIGlmIHRoZQorICogZXhpc3RpbmcgZXhjZXB0aW9uIHdhcyBsZWZ0IGluIHBsYWNlLgorICovCitQeU9iamVjdCAqCitfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIFB5T2JqZWN0KiBtc2dfcHJlZml4OworICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YjsKKyAgICBQeVR5cGVPYmplY3QgKmNhdWdodF90eXBlOworICAgIFB5T2JqZWN0ICoqZGljdHB0cjsKKyAgICBQeU9iamVjdCAqaW5zdGFuY2VfYXJnczsKKyAgICBQeV9zc2l6ZV90IG51bV9hcmdzLCBjYXVnaHRfdHlwZV9zaXplLCBiYXNlX2V4Y19zaXplOworICAgIFB5T2JqZWN0ICpuZXdfZXhjLCAqbmV3X3ZhbCwgKm5ld190YjsKKyAgICB2YV9saXN0IHZhcmdzOworICAgIGludCBzYW1lX2Jhc2ljX3NpemU7CisKKyAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsLCAmdGIpOworICAgIGNhdWdodF90eXBlID0gKFB5VHlwZU9iamVjdCAqKWV4YzsKKyAgICAvKiBFbnN1cmUgdHlwZSBpbmZvIGluZGljYXRlcyBubyBleHRyYSBzdGF0ZSBpcyBzdG9yZWQgYXQgdGhlIEMgbGV2ZWwKKyAgICAgKiBhbmQgdGhhdCB0aGUgdHlwZSBjYW4gYmUgcmVpbnN0YW50aWF0ZWQgdXNpbmcgUHlFcnJfRm9ybWF0CisgICAgICovCisgICAgY2F1Z2h0X3R5cGVfc2l6ZSA9IGNhdWdodF90eXBlLT50cF9iYXNpY3NpemU7CisgICAgYmFzZV9leGNfc2l6ZSA9IF9QeUV4Y19CYXNlRXhjZXB0aW9uLnRwX2Jhc2ljc2l6ZTsKKyAgICBzYW1lX2Jhc2ljX3NpemUgPSAoCisgICAgICAgIGNhdWdodF90eXBlX3NpemUgPT0gYmFzZV9leGNfc2l6ZSB8fAorICAgICAgICAoUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKGNhdWdodF90eXBlKSAmJgorICAgICAgICAgICAgKGNhdWdodF90eXBlX3NpemUgPT0gYmFzZV9leGNfc2l6ZSArIHNpemVvZihQeU9iamVjdCAqKSkKKyAgICAgICAgKQorICAgICk7CisgICAgaWYgKGNhdWdodF90eXBlLT50cF9pbml0ICE9IChpbml0cHJvYylCYXNlRXhjZXB0aW9uX2luaXQgfHwKKyAgICAgICAgY2F1Z2h0X3R5cGUtPnRwX25ldyAhPSBCYXNlRXhjZXB0aW9uX25ldyB8fAorICAgICAgICAhc2FtZV9iYXNpY19zaXplIHx8CisgICAgICAgIGNhdWdodF90eXBlLT50cF9pdGVtc2l6ZSAhPSBfUHlFeGNfQmFzZUV4Y2VwdGlvbi50cF9pdGVtc2l6ZSkgeworICAgICAgICAvKiBXZSBjYW4ndCBiZSBzdXJlIHdlIGNhbiB3cmFwIHRoaXMgc2FmZWx5LCBzaW5jZSBpdCBtYXkgY29udGFpbgorICAgICAgICAgKiBtb3JlIHN0YXRlIHRoYW4ganVzdCB0aGUgZXhjZXB0aW9uIHR5cGUuIEFjY29yZGluZ2x5LCB3ZSBqdXN0CisgICAgICAgICAqIGxlYXZlIGl0IGFsb25lLgorICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBDaGVjayB0aGUgYXJncyBhcmUgZW1wdHkgb3IgY29udGFpbiBhIHNpbmdsZSBzdHJpbmcgKi8KKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJmV4YywgJnZhbCwgJnRiKTsKKyAgICBpbnN0YW5jZV9hcmdzID0gKChQeUJhc2VFeGNlcHRpb25PYmplY3QgKil2YWwpLT5hcmdzOworICAgIG51bV9hcmdzID0gUHlUdXBsZV9HRVRfU0laRShpbnN0YW5jZV9hcmdzKTsKKyAgICBpZiAobnVtX2FyZ3MgPiAxIHx8CisgICAgICAgIChudW1fYXJncyA9PSAxICYmCisgICAgICAgICAhUHlVbmljb2RlX0NoZWNrRXhhY3QoUHlUdXBsZV9HRVRfSVRFTShpbnN0YW5jZV9hcmdzLCAwKSkpKSB7CisgICAgICAgIC8qIE1vcmUgdGhhbiAxIGFyZywgb3IgdGhlIG9uZSBhcmcgd2UgZG8gaGF2ZSBpc24ndCBhIHN0cmluZworICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBFbnN1cmUgdGhlIGluc3RhbmNlIGRpY3QgaXMgYWxzbyBlbXB0eSAqLworICAgIGRpY3RwdHIgPSBfUHlPYmplY3RfR2V0RGljdFB0cih2YWwpOworICAgIGlmIChkaWN0cHRyICE9IE5VTEwgJiYgKmRpY3RwdHIgIT0gTlVMTCAmJgorICAgICAgICBQeU9iamVjdF9MZW5ndGgoKmRpY3RwdHIpID4gMCkgeworICAgICAgICAvKiBXaGlsZSB3ZSBjb3VsZCBwb3RlbnRpYWxseSBjb3B5IGEgbm9uLWVtcHR5IGluc3RhbmNlIGRpY3Rpb25hcnkKKyAgICAgICAgICogdG8gdGhlIHJlcGxhY2VtZW50IGV4Y2VwdGlvbiwgZm9yIG5vdyB3ZSB0YWtlIHRoZSBtb3JlCisgICAgICAgICAqIGNvbnNlcnZhdGl2ZSBwYXRoIG9mIGxlYXZpbmcgZXhjZXB0aW9ucyB3aXRoIGF0dHJpYnV0ZXMgc2V0CisgICAgICAgICAqIGFsb25lLgorICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBGb3IgZXhjZXB0aW9ucyB0aGF0IHdlIGNhbiB3cmFwIHNhZmVseSwgd2UgY2hhaW4gdGhlIG9yaWdpbmFsCisgICAgICogZXhjZXB0aW9uIHRvIGEgbmV3IG9uZSBvZiB0aGUgZXhhY3Qgc2FtZSB0eXBlIHdpdGggYW4KKyAgICAgKiBlcnJvciBtZXNzYWdlIHRoYXQgbWVudGlvbnMgdGhlIGFkZGl0aW9uYWwgZGV0YWlscyBhbmQgdGhlCisgICAgICogb3JpZ2luYWwgZXhjZXB0aW9uLgorICAgICAqCisgICAgICogSXQgd291bGQgYmUgbmljZSB0byB3cmFwIE9TRXJyb3IgYW5kIHZhcmlvdXMgb3RoZXIgZXhjZXB0aW9uCisgICAgICogdHlwZXMgYXMgd2VsbCwgYnV0IHRoYXQncyBxdWl0ZSBhIGJpdCB0cmlja2llciBkdWUgdG8gdGhlIGV4dHJhCisgICAgICogc3RhdGUgcG90ZW50aWFsbHkgc3RvcmVkIG9uIE9TRXJyb3IgaW5zdGFuY2VzLgorICAgICAqLworCisgICAgUHlfWERFQ1JFRih0Yik7CisKKyNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCisgICAgdmFfc3RhcnQodmFyZ3MsIGZvcm1hdCk7CisjZWxzZQorICAgIHZhX3N0YXJ0KHZhcmdzKTsKKyNlbmRpZgorICAgIG1zZ19wcmVmaXggPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CisgICAgdmFfZW5kKHZhcmdzKTsKKyAgICBpZiAobXNnX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihleGMpOworICAgICAgICBQeV9ERUNSRUYodmFsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgUHlFcnJfRm9ybWF0KGV4YywgIiVVICglczogJVMpIiwKKyAgICAgICAgICAgICAgICAgbXNnX3ByZWZpeCwgUHlfVFlQRSh2YWwpLT50cF9uYW1lLCB2YWwpOworICAgIFB5X0RFQ1JFRihleGMpOworICAgIFB5X0RFQ1JFRihtc2dfcHJlZml4KTsKKyAgICBQeUVycl9GZXRjaCgmbmV3X2V4YywgJm5ld192YWwsICZuZXdfdGIpOworICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmbmV3X2V4YywgJm5ld192YWwsICZuZXdfdGIpOworICAgIFB5RXhjZXB0aW9uX1NldENhdXNlKG5ld192YWwsIHZhbCk7CisgICAgUHlFcnJfUmVzdG9yZShuZXdfZXhjLCBuZXdfdmFsLCBuZXdfdGIpOworICAgIHJldHVybiBuZXdfdmFsOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9maWxlb2JqZWN0LmMgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwppbmRleCA5OGY0MmE5Li41OTZmOTA5IDEwMDY0NAotLS0gYS9PYmplY3RzL2ZpbGVvYmplY3QuYworKysgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwpAQCAtMjYsOCArMjYsOCBAQAogLyogRXh0ZXJuYWwgQyBpbnRlcmZhY2UgKi8KIAogUHlPYmplY3QgKgotUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNoYXIgKm5hbWUsIGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICBjaGFyICplcnJvcnMsIGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQorUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsIGNvbnN0IGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQogewogICAgIFB5T2JqZWN0ICppbywgKnN0cmVhbTsKICAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKQEAgLTM5MCw3ICszOTAsNyBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGVycm5vID0gMDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChuID4gSU5UX01BWCkKICAgICAgICAgbiA9IElOVF9NQVg7CiAgICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBjLCAoaW50KW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IGEwOGE4NTIuLjA1Yjc2NzkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTksMTEgKzksNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KIAotI3VuZGVmIE1BWAotI3VuZGVmIE1JTgotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0KIAogLyogU3BlY2lhbCBmcmVlIGxpc3QKICAgIGZyZWVfbGlzdCBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBhdmFpbGFibGUgUHlGbG9hdE9iamVjdHMsIGxpbmtlZApAQCAtMTE0LDcgKzEwOSw3IEBACiBQeU9iamVjdCAqCiBQeUZsb2F0X0Zyb21Eb3VibGUoZG91YmxlIGZ2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CisgICAgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CiAgICAgaWYgKG9wICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5RmxvYXRPYmplY3QgKikgUHlfVFlQRShvcCk7CiAgICAgICAgIG51bWZyZWUtLTsKQEAgLTEyNCw3ICsxMTksNyBAQAogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KLSAgICBQeU9iamVjdF9JTklUKG9wLCAmUHlGbG9hdF9UeXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlGbG9hdF9UeXBlKTsKICAgICBvcC0+b2JfZnZhbCA9IGZ2YWw7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBvcDsKIH0KQEAgLTE0OSw4ICsxNDQsOSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih2LCAmcywgJmxlbikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJmbG9hdCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJmbG9hdCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGxhc3QgPSBzICsgbGVuOwpAQCAtMjQ2LDcgKzI0Miw3IEBACiBzdGF0aWMgaW50CiBjb252ZXJ0X3RvX2RvdWJsZShQeU9iamVjdCAqKnYsIGRvdWJsZSAqZGJsKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogPSAqdjsKKyAgICBQeU9iamVjdCAqb2JqID0gKnY7CiAKICAgICBpZiAoUHlMb25nX0NoZWNrKG9iaikpIHsKICAgICAgICAgKmRibCA9IFB5TG9uZ19Bc0RvdWJsZShvYmopOwpAQCAtMTEzMSw3ICsxMTI3LDcgQEAKICAgICB9CiAKICAgICBtID0gZnJleHAoZmFicyh4KSwgJmUpOwotICAgIHNoaWZ0ID0gMSAtIE1BWChEQkxfTUlOX0VYUCAtIGUsIDApOworICAgIHNoaWZ0ID0gMSAtIFB5X01BWChEQkxfTUlOX0VYUCAtIGUsIDApOwogICAgIG0gPSBsZGV4cChtLCBzaGlmdCk7CiAgICAgZSAtPSBzaGlmdDsKIApAQCAtMTI4NSw4ICsxMjgxLDggQEAKICAgICBmZGlnaXRzID0gY29lZmZfZW5kIC0gc19zdG9yZTsKICAgICBpZiAobmRpZ2l0cyA9PSAwKQogICAgICAgICBnb3RvIHBhcnNlX2Vycm9yOwotICAgIGlmIChuZGlnaXRzID4gTUlOKERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gTE9OR19NSU4vMiwKLSAgICAgICAgICAgICAgICAgICAgICBMT05HX01BWC8yICsgMSAtIERCTF9NQVhfRVhQKS80KQorICAgIGlmIChuZGlnaXRzID4gUHlfTUlOKERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gTE9OR19NSU4vMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBMT05HX01BWC8yICsgMSAtIERCTF9NQVhfRVhQKS80KQogICAgICAgICBnb3RvIGluc2FuZV9sZW5ndGhfZXJyb3I7CiAKICAgICAvKiBbcCA8ZXhwb25lbnQ+XSAqLwpAQCAtMTM0Miw3ICsxMzM4LDcgQEAKIAogICAgIC8qIGxzYiA9IGV4cG9uZW50IG9mIGxlYXN0IHNpZ25pZmljYW50IGJpdCBvZiB0aGUgKnJvdW5kZWQqIHZhbHVlLgogICAgICAgIFRoaXMgaXMgdG9wX2V4cCAtIERCTF9NQU5UX0RJRyB1bmxlc3MgcmVzdWx0IGlzIHN1Ym5vcm1hbC4gKi8KLSAgICBsc2IgPSBNQVgodG9wX2V4cCwgKGxvbmcpREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHOworICAgIGxzYiA9IFB5X01BWCh0b3BfZXhwLCAobG9uZylEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUc7CiAKICAgICB4ID0gMC4wOwogICAgIGlmIChleHAgPj0gbHNiKSB7CkBAIC0xNDIxLDcgKzE0MTcsNyBAQAogPj4+IGZsb2F0LmZyb21oZXgoJzB4MS5mZmZmcDEwJylcblwKIDIwNDcuOTg0Mzc1XG5cCiA+Pj4gZmxvYXQuZnJvbWhleCgnLTB4MXAtMTA3NCcpXG5cCi0tNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQiKTsKKy01ZS0zMjQiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTcxMSw3ICsxNzA3LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKICAgICByZXQgPSBfUHlGbG9hdF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTE4NTgsNyArMTg1NCw3IEBACiAgICAgZmxvYXRfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CiAKLXZvaWQKK2ludAogX1B5RmxvYXRfSW5pdCh2b2lkKQogewogICAgIC8qIFdlIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWFjaGluZSBpcyB1c2luZyBJRUVFCkBAIC0xOTA4LDggKzE5MDQsMTEgQEAKICAgICBmbG9hdF9mb3JtYXQgPSBkZXRlY3RlZF9mbG9hdF9mb3JtYXQ7CiAKICAgICAvKiBJbml0IGZsb2F0IGluZm8gKi8KLSAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkZsb2F0SW5mb1R5cGUsICZmbG9hdGluZm9fZGVzYyk7CisgICAgaWYgKEZsb2F0SW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIDE7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCmluZGV4IDgwOGU1OTUuLjYzZjAzYTYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZnJhbWVvYmplY3QuYworKysgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKQEAgLTcsMTEgKzcsNiBAQAogI2luY2x1ZGUgIm9wY29kZS5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQotI2RlZmluZSBNQVgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKLQogI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoUHlGcmFtZU9iamVjdCwgeCkKIAogc3RhdGljIFB5TWVtYmVyRGVmIGZyYW1lX21lbWJlcmxpc3RbXSA9IHsKQEAgLTI2LDcgKzIxLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFtZV9nZXRsb2NhbHMoUHlGcmFtZU9iamVjdCAqZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmKTsKKyAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9JTkNSRUYoZi0+Zl9sb2NhbHMpOwogICAgIHJldHVybiBmLT5mX2xvY2FsczsKIH0KQEAgLTE2MCw4ICsxNTYsOCBAQAogCiAgICAgLyogV2UncmUgbm93IHJlYWR5IHRvIGxvb2sgYXQgdGhlIGJ5dGVjb2RlLiAqLwogICAgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGYtPmZfY29kZS0+Y29fY29kZSwgKGNoYXIgKiopJmNvZGUsICZjb2RlX2xlbik7Ci0gICAgbWluX2FkZHIgPSBNSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKLSAgICBtYXhfYWRkciA9IE1BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOworICAgIG1pbl9hZGRyID0gUHlfTUlOKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWF4X2FkZHIgPSBQeV9NQVgobmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKIAogICAgIC8qIFlvdSBjYW4ndCBqdW1wIG9udG8gYSBsaW5lIHdpdGggYW4gJ2V4Y2VwdCcgc3RhdGVtZW50IG9uIGl0IC0KICAgICAgKiB0aGV5IGV4cGVjdCB0byBoYXZlIGFuIGV4Y2VwdGlvbiBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjaywgd2hpY2gKQEAgLTI5Myw3ICsyODksNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBtaW5fZGVsdGFfaWJsb2NrID0gTUlOKG1pbl9kZWx0YV9pYmxvY2ssIGRlbHRhX2libG9jayk7CisgICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBQeV9NSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKIAogICAgICAgICBpZiAob3AgPj0gSEFWRV9BUkdVTUVOVCkgewogICAgICAgICAgICAgYWRkciArPSAyOwpAQCAtNDY2LDcgKzQ2Miw3IEBACiBmcmFtZV90cmF2ZXJzZShQeUZyYW1lT2JqZWN0ICpmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKICAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIFB5X1ZJU0lUKGYtPmZfYmFjayk7CiAgICAgUHlfVklTSVQoZi0+Zl9jb2RlKTsKQEAgLTQ5MywxMCArNDg5LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1mcmFtZV9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQorZnJhbWVfdHBfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKIHsKICAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqcCwgKipvbGR0b3A7Ci0gICAgaW50IGksIHNsb3RzOworICAgIFB5X3NzaXplX3QgaSwgc2xvdHM7CiAKICAgICAvKiBCZWZvcmUgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIHRoYXQgdGhpcyBmcmFtZSBpcyBjbGVhcmx5IG1hcmtlZAogICAgICAqIGFzIGJlaW5nIGRlZnVuY3QhICBFbHNlLCBlLmcuLCBhIGdlbmVyYXRvciByZWFjaGFibGUgZnJvbSB0aGlzCkBAIC01MDUsNiArNTAxLDcgQEAKICAgICAgKi8KICAgICBvbGR0b3AgPSBmLT5mX3N0YWNrdG9wOwogICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOworICAgIGYtPmZfZXhlY3V0aW5nID0gMDsKIAogICAgIFB5X0NMRUFSKGYtPmZfZXhjX3R5cGUpOwogICAgIFB5X0NMRUFSKGYtPmZfZXhjX3ZhbHVlKTsKQEAgLTUyNSw2ICs1MjIsMjUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2ZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaWYgKGYtPmZfZXhlY3V0aW5nKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNsZWFyIGFuIGV4ZWN1dGluZyBmcmFtZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGYtPmZfZ2VuKSB7CisgICAgICAgIF9QeUdlbl9GaW5hbGl6ZShmLT5mX2dlbik7CisgICAgICAgIGFzc2VydChmLT5mX2dlbiA9PSBOVUxMKTsKKyAgICB9CisgICAgZnJhbWVfdHBfY2xlYXIoZik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihjbGVhcl9fZG9jX18sCisiRi5jbGVhcigpOiBjbGVhciBtb3N0IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgZnJhbWUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX3NpemVvZihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5X3NzaXplX3QgcmVzLCBleHRyYXMsIG5jZWxscywgbmZyZWVzOwpAQCAtNTQzLDYgKzU1OSw4IEBACiAiRi5fX3NpemVvZl9fKCkgLT4gc2l6ZSBvZiBGIGluIG1lbW9yeSwgaW4gYnl0ZXMiKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIGZyYW1lX21ldGhvZHNbXSA9IHsKKyAgICB7ImNsZWFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9jbGVhciwgICAgICAgTUVUSF9OT0FSR1MsCisgICAgIGNsZWFyX19kb2NfX30sCiAgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pZnJhbWVfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAogICAgICBzaXplb2ZfX2RvY19ffSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KQEAgLTU3MSw3ICs1ODksNyBAQAogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywvKiB0cF9mbGFncyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylmcmFtZV90cmF2ZXJzZSwgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwotICAgIChpbnF1aXJ5KWZyYW1lX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAoaW5xdWlyeSlmcmFtZV90cF9jbGVhciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KQEAgLTU4MywxMyArNjAxLDEzIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiB9OwogCi1zdGF0aWMgUHlPYmplY3QgKmJ1aWx0aW5fb2JqZWN0OworX1B5X0lERU5USUZJRVIoX19idWlsdGluc19fKTsKIAogaW50IF9QeUZyYW1lX0luaXQoKQogewotICAgIGJ1aWx0aW5fb2JqZWN0ID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fYnVpbHRpbnNfXyIpOwotICAgIGlmIChidWlsdGluX29iamVjdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKKyAgICAvKiBCZWZvcmUsIFB5SWRfX19idWlsdGluc19fIHdhcyBhIHN0cmluZyBjcmVhdGVkIGV4cGxpY2l0bHkgaW4KKyAgICAgICB0aGlzIGZ1bmN0aW9uLiBOb3cgdGhlcmUgaXMgbm90aGluZyB0byBpbml0aWFsaXplIGFueW1vcmUsIGJ1dAorICAgICAgIHRoZSBmdW5jdGlvbiBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogICAgIHJldHVybiAxOwogfQogCkBAIC02MTAsNyArNjI4LDcgQEAKICAgICB9CiAjZW5kaWYKICAgICBpZiAoYmFjayA9PSBOVUxMIHx8IGJhY2stPmZfZ2xvYmFscyAhPSBnbG9iYWxzKSB7Ci0gICAgICAgIGJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW0oZ2xvYmFscywgYnVpbHRpbl9vYmplY3QpOworICAgICAgICBidWlsdGlucyA9IF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXyk7CiAgICAgICAgIGlmIChidWlsdGlucykgewogICAgICAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKGJ1aWx0aW5zKSkgewogICAgICAgICAgICAgICAgIGJ1aWx0aW5zID0gUHlNb2R1bGVfR2V0RGljdChidWlsdGlucyk7CkBAIC03MTMsNiArNzMxLDggQEAKICAgICBmLT5mX2xhc3RpID0gLTE7CiAgICAgZi0+Zl9saW5lbm8gPSBjb2RlLT5jb19maXJzdGxpbmVubzsKICAgICBmLT5mX2libG9jayA9IDA7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOworICAgIGYtPmZfZ2VuID0gTlVMTDsKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhmKTsKICAgICByZXR1cm4gZjsKQEAgLTc1MywxMiArNzczLDkgQEAKICAgIElmIGRlcmVmIGlzIHRydWUsIHRoZW4gdGhlIHZhbHVlcyBiZWluZyBjb3BpZWQgYXJlIGNlbGwgdmFyaWFibGVzCiAgICBhbmQgdGhlIHZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjZWxsIHZhcmlhYmxlIGJlZm9yZSBiZWluZyBwdXQKICAgIGluIGRpY3QuCi0KLSAgIEV4Y2VwdGlvbnMgcmFpc2VkIHdoaWxlIG1vZGlmeWluZyB0aGUgZGljdCBhcmUgc2lsZW50bHkgaWdub3JlZCwKLSAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gcmVwb3J0IHRoZW0uCiAgKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG1hcF90b19kaWN0KFB5T2JqZWN0ICptYXAsIFB5X3NzaXplX3Qgbm1hcCwgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICoqdmFsdWVzLAogICAgICAgICAgICAgaW50IGRlcmVmKQogewpAQCAtNzc1LDE0ICs3OTIsMTkgQEAKICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9EZWxJdGVtKGRpY3QsIGtleSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogLyogQ29weSB2YWx1ZXMgZnJvbSB0aGUgImxvY2FscyIgZGljdCBpbnRvIHRoZSBmYXN0IGxvY2Fscy4KQEAgLTgzOSw0MiArODYxLDQ5IEBACiAgICAgfQogfQogCi12b2lkCi1QeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoraW50CitQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIC8qIE1lcmdlIGZhc3QgbG9jYWxzIGludG8gZi0+Zl9sb2NhbHMgKi8KICAgICBQeU9iamVjdCAqbG9jYWxzLCAqbWFwOwogICAgIFB5T2JqZWN0ICoqZmFzdDsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlfc3NpemVfdCBqOwotICAgIGludCBuY2VsbHMsIG5mcmVldmFyczsKLSAgICBpZiAoZiA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKKworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CiAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIENhbid0IHJlcG9ydCBpdCA6LSggKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGNvID0gZi0+Zl9jb2RlOwogICAgIG1hcCA9IGNvLT5jb192YXJuYW1lczsKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobWFwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb192YXJuYW1lcyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1hcCktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZhc3QgPSBmLT5mX2xvY2Fsc3BsdXM7CiAgICAgaiA9IFB5VHVwbGVfR0VUX1NJWkUobWFwKTsKICAgICBpZiAoaiA+IGNvLT5jb19ubG9jYWxzKQogICAgICAgICBqID0gY28tPmNvX25sb2NhbHM7Ci0gICAgaWYgKGNvLT5jb19ubG9jYWxzKQotICAgICAgICBtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCk7CisgICAgaWYgKGNvLT5jb19ubG9jYWxzKSB7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBuY2VsbHMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CiAgICAgbmZyZWV2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpOwogICAgIGlmIChuY2VsbHMgfHwgbmZyZWV2YXJzKSB7Ci0gICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAotICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscywgMSk7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fY2VsbHZhcnMsIG5jZWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwogICAgICAgICAvKiBJZiB0aGUgbmFtZXNwYWNlIGlzIHVub3B0aW1pemVkLCB0aGVuIG9uZSBvZiB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGNhc2VzIGFwcGxpZXM6CiAgICAgICAgICAgIDEuIEl0IGRvZXMgbm90IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMsIGJlY2F1c2UgaXQKQEAgLTg4NCwxMSArOTEzLDI0IEBACiAgICAgICAgICAgIGludG8gdGhlIGxvY2FscyBkaWN0IHVzZWQgYnkgdGhlIGNsYXNzLgogICAgICAgICAqLwogICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fT1BUSU1JWkVEKSB7Ci0gICAgICAgICAgICBtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKTsKKyAgICAgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscyArIG5jZWxscywgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGludCByZXM7CisKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCisgICAgcmVzID0gUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKIHZvaWQKQEAgLTkwMCw3ICs5NDIsNyBAQAogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOworICAgIFB5X3NzaXplX3QgbmNlbGxzLCBuZnJlZXZhcnM7CiAgICAgaWYgKGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOwpAQCAtOTUyLDggKzk5NCw2IEBACiBQeUZyYW1lX0Zpbmkodm9pZCkKIHsKICAgICAodm9pZClQeUZyYW1lX0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9YREVDUkVGKGJ1aWx0aW5fb2JqZWN0KTsKLSAgICBidWlsdGluX29iamVjdCA9IE5VTEw7CiB9CiAKIC8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggNDk0MTViOS4uYjA0MzkzNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTgsNjAgKzgsNTkgQEAKIFB5T2JqZWN0ICoKIFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIFB5RnVuY3Rpb25PYmplY3QgKm9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RnVuY3Rpb25fVHlwZSk7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpfX25hbWVfXyA9IDA7Ci0gICAgaWYgKG9wICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKmRvYzsKLSAgICAgICAgUHlPYmplY3QgKmNvbnN0czsKLSAgICAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICAgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOwotICAgICAgICBQeV9JTkNSRUYoY29kZSk7Ci0gICAgICAgIG9wLT5mdW5jX2NvZGUgPSBjb2RlOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFscyk7Ci0gICAgICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOwotICAgICAgICBvcC0+ZnVuY19uYW1lID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOwotICAgICAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCi0gICAgICAgIG9wLT5mdW5jX2t3ZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBrZXl3b3JkIG9ubHkgZGVmYXVsdHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7Ci0gICAgICAgIGNvbnN0cyA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX2NvbnN0czsKLSAgICAgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKLSAgICAgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZG9jKSkKLSAgICAgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkb2MpOwotICAgICAgICBvcC0+ZnVuY19kb2MgPSBkb2M7Ci0gICAgICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisgICAgUHlGdW5jdGlvbk9iamVjdCAqb3A7CisgICAgUHlPYmplY3QgKmRvYywgKmNvbnN0cywgKm1vZHVsZTsKKyAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gTlVMTDsKIAotICAgICAgICAvKiBfX21vZHVsZV9fOiBJZiBtb2R1bGUgbmFtZSBpcyBpbiBnbG9iYWxzLCB1c2UgaXQuCi0gICAgICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuCi0gICAgICAgICovCi0gICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAoIV9fbmFtZV9fKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBfX25hbWVfXyk7Ci0gICAgICAgIGlmIChtb2R1bGUpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOwotICAgICAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gbW9kdWxlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWFsbmFtZSkKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKyAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkgeworICAgICAgICBfX25hbWVfXyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOworICAgICAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsICZQeUZ1bmN0aW9uX1R5cGUpOworICAgIGlmIChvcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9wLT5mdW5jX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBQeV9JTkNSRUYoY29kZSk7CisgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7CisgICAgUHlfSU5DUkVGKGdsb2JhbHMpOworICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOworICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19uYW1lKTsKKyAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCisgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLworICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBOVUxMOworCisgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOworICAgIGlmIChQeVR1cGxlX1NpemUoY29uc3RzKSA+PSAxKSB7CisgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQorICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKyAgICBQeV9JTkNSRUYoZG9jKTsKKyAgICBvcC0+ZnVuY19kb2MgPSBkb2M7CisKKyAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKKyAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOworICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKworICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KKyAgICAgICBPdGhlcndpc2UsIHVzZSBOb25lLiAqLworICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKKyAgICBpZiAobW9kdWxlKSB7CisgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOworICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7CisgICAgfQorICAgIGlmIChxdWFsbmFtZSkKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKyAgICBlbHNlCisgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG9wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopb3A7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2dlbm9iamVjdC5jIGIvT2JqZWN0cy9nZW5vYmplY3QuYwppbmRleCAwMTZiZmEyLi4wOGQzMGJmIDEwMDY0NAotLS0gYS9PYmplY3RzL2dlbm9iamVjdC5jCisrKyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKQEAgLTE1LDYgKzE1LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK19QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKKyAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLworICAgICAgICByZXR1cm47CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKIHN0YXRpYyB2b2lkCiBnZW5fZGVhbGxvYyhQeUdlbk9iamVjdCAqZ2VuKQogewpAQCAtMjcsMTIgKzUyLDggQEAKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKIAotICAgIGlmIChnZW4tPmdpX2ZyYW1lICE9IE5VTEwgJiYgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIEdlbmVyYXRvciBpcyBwYXVzZWQsIHNvIHdlIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgUHlfVFlQRShnZW4pLT50cF9kZWwoc2VsZik7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KLSAgICB9CisgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KIAogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIFB5X0NMRUFSKGdlbi0+Z2lfZnJhbWUpOwpAQCAtNDAsNyArNjEsNiBAQAogICAgIFB5T2JqZWN0X0dDX0RlbChnZW4pOwogfQogCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBnZW5fc2VuZF9leChQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJnLCBpbnQgZXhjKQogewpAQCAtMTIwLDYgKzE0MCw3IEBACiAgICAgICAgIFB5X1hERUNSRUYodCk7CiAgICAgICAgIFB5X1hERUNSRUYodik7CiAgICAgICAgIFB5X1hERUNSRUYodGIpOworICAgICAgICBnZW4tPmdpX2ZyYW1lLT5mX2dlbiA9IE5VTEw7CiAgICAgICAgIGdlbi0+Z2lfZnJhbWUgPSBOVUxMOwogICAgICAgICBQeV9ERUNSRUYoZik7CiAgICAgfQpAQCAtMjIyLDY4ICsyNDMsNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZAotZ2VuX2RlbChQeU9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqcmVzOwotICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7Ci0gICAgUHlHZW5PYmplY3QgKmdlbiA9IChQeUdlbk9iamVjdCAqKXNlbGY7Ci0KLSAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKLSAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLwotICAgICAgICByZXR1cm47Ci0KLSAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOwotICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7Ci0KLSAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOwotCi0gICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7Ci0KLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKLSAgICBlbHNlCi0gICAgICAgIFB5X0RFQ1JFRihyZXMpOwotCi0gICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLwotICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICAvKiBVbmRvIHRoZSB0ZW1wb3JhcnkgcmVzdXJyZWN0aW9uOyBjYW4ndCB1c2UgREVDUkVGIGhlcmUsIGl0IHdvdWxkCi0gICAgICogY2F1c2UgYSByZWN1cnNpdmUgY2FsbC4KLSAgICAgKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID4gMCk7Ci0gICAgaWYgKC0tc2VsZi0+b2JfcmVmY250ID09IDApCi0gICAgICAgIHJldHVybjsgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCi0KLSAgICAvKiBjbG9zZSgpIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgotICAgICAqIG5ldmVyIGhhcHBlbmVkLgotICAgICAqLwotICAgIHsKLSAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7Ci0gICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7Ci0gICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKLSAgICB9Ci0gICAgYXNzZXJ0KFB5VHlwZV9JU19HQyhQeV9UWVBFKHNlbGYpKSAmJgotICAgICAgICAgICBfUHlfQVNfR0Moc2VsZiktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwotCi0gICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCi0gICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCi0gICAgX1B5X0RFQ19SRUZUT1RBTDsKLSAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAotICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgotICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAotICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQotICAgICAqIHVuZG9uZS4KLSAgICAgKi8KLSNpZmRlZiBDT1VOVF9BTExPQ1MKLSAgICAtLShQeV9UWVBFKHNlbGYpLT50cF9mcmVlcyk7Ci0gICAgLS0oUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzKTsKLSNlbmRpZgotfQotCi0KIAogUHlEb2NfU1RSVkFSKHRocm93X2RvYywKICJ0aHJvdyh0eXBbLHZhbFssdGJdXSkgLT4gcmFpc2UgZXhjZXB0aW9uIGluIGdlbmVyYXRvcixcblwKQEAgLTUxNyw3ICs0NzYsOCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZ2VuX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC01NDQsNyArNTA0LDkgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLwotICAgIGdlbl9kZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgX1B5R2VuX0ZpbmFsaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogUHlPYmplY3QgKgpAQCAtNTU2LDYgKzUxOCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBnZW4tPmdpX2ZyYW1lID0gZjsKKyAgICBmLT5mX2dlbiA9IChQeU9iamVjdCAqKSBnZW47CiAgICAgUHlfSU5DUkVGKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9jb2RlID0gKFB5T2JqZWN0ICopKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9ydW5uaW5nID0gMDsKZGlmZiAtLWdpdCBhL09iamVjdHMvaXRlcm9iamVjdC5jIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKaW5kZXggM2NmYmVhZi4uNzdmZjgxMCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9pdGVyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKQEAgLTQsNyArNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyAgICAgIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gc2VxaXRlcm9iamVjdDsKIApAQCAtNzYsOSArNzYsMTQgQEAKICAgICBQeV9zc2l6ZV90IHNlcXNpemUsIGxlbjsKIAogICAgIGlmIChpdC0+aXRfc2VxKSB7Ci0gICAgICAgIHNlcXNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXQtPml0X3NlcSk7Ci0gICAgICAgIGlmIChzZXFzaXplID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzTGVuKGl0LT5pdF9zZXEpKSB7CisgICAgICAgICAgICBzZXFzaXplID0gUHlTZXF1ZW5jZV9TaXplKGl0LT5pdF9zZXEpOworICAgICAgICAgICAgaWYgKHNlcXNpemUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgICAgIH0KICAgICAgICAgbGVuID0gc2Vxc2l6ZSAtIGl0LT5pdF9pbmRleDsKICAgICAgICAgaWYgKGxlbiA+PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9saXN0b2JqZWN0LmMgYi9PYmplY3RzL2xpc3RvYmplY3QuYwppbmRleCA2ZTBkMDk0Li41Yjc1OTY4IDEwMDY0NAotLS0gYS9PYmplY3RzL2xpc3RvYmplY3QuYworKysgYi9PYmplY3RzL2xpc3RvYmplY3QuYwpAQCAtMjEzLDExICsyMTMsMTEgQEAKIH0KIAogaW50Ci1QeUxpc3RfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpuZXdpdGVtKQorUHlMaXN0X1NldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGksCisgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3aXRlbSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2xkaXRlbTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlPYmplY3QgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKipwOwogICAgIGlmICghUHlMaXN0X0NoZWNrKG9wKSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTMzOCw1NyArMzM4LDU3IEBACiBsaXN0X3JlcHIoUHlMaXN0T2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqcyA9IE5VTEw7Ci0gICAgX1B5QWNjdSBhY2M7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzZXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgaWYgKFB5X1NJWkUodikgPT0gMCkgewogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIltdIik7CiAgICAgfQogCi0gICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCopdik7CiAgICAgaWYgKGkgIT0gMCkgewogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiWy4uLl0iKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogIlsiICsgIjEiICsgIiwgMiIgKiAobGVuIC0gMSkgKyAiXSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyAxICsgKDIgKyAxKSAqIChQeV9TSVpFKHYpIC0gMSkgKyAxOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICdbJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2ggZWxlbWVudC4gIE5vdGUgdGhhdCB0aGlzIG1heSBtdXRhdGUgdGhlIGxpc3QsCiAgICAgICAgc28gbXVzdCByZWZldGNoIHRoZSBsaXN0IHNpemUgb24gZWFjaCBpdGVyYXRpb24uICovCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUodik7ICsraSkgeworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIGxpc3QiKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHYtPm9iX2l0ZW1baV0pOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKGkgPiAwICYmIF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzZXApKQorICAgICAgICBpZiAocyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUihzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgfQotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICddJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC02NDQsOSArNjQ0LDE0IEBACiAgICAgbWVtY3B5KHJlY3ljbGUsICZpdGVtW2lsb3ddLCBzKTsKIAogICAgIGlmIChkIDwgMCkgeyAvKiBEZWxldGUgLWQgaXRlbXMgKi8KLSAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLAotICAgICAgICAgICAgKFB5X1NJWkUoYSkgLSBpaGlnaCkqc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgbGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpOworICAgICAgICBQeV9zc2l6ZV90IHRhaWw7CisgICAgICAgIHRhaWwgPSAoUHlfU0laRShhKSAtIGloaWdoKSAqIHNpemVvZihQeU9iamVjdCAqKTsKKyAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLCB0YWlsKTsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKGEsIFB5X1NJWkUoYSkgKyBkKSA8IDApIHsKKyAgICAgICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2hdLCAmaXRlbVtpaGlnaCtkXSwgdGFpbCk7CisgICAgICAgICAgICBtZW1jcHkoJml0ZW1baWxvd10sIHJlY3ljbGUsIHMpOworICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgfQogICAgICAgICBpdGVtID0gYS0+b2JfaXRlbTsKICAgICB9CiAgICAgZWxzZSBpZiAoZCA+IDApIHsgLyogSW5zZXJ0IGQgaXRlbXMgKi8KQEAgLTgyNiw3ICs4MzEsNyBAQAogICAgIGl0ZXJuZXh0ID0gKml0LT5vYl90eXBlLT50cF9pdGVybmV4dDsKIAogICAgIC8qIEd1ZXNzIGEgcmVzdWx0IGxpc3Qgc2l6ZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CisgICAgbiA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CiAgICAgaWYgKG4gPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04NzEsOCArODc2LDEwIEBACiAgICAgfQogCiAgICAgLyogQ3V0IGJhY2sgcmVzdWx0IGxpc3QgaWYgaW5pdGlhbCBndWVzcyB3YXMgdG9vIGxhcmdlLiAqLwotICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+YWxsb2NhdGVkKQotICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsgIC8qIHNocmlua2luZyBjYW4ndCBmYWlsICovCisgICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpIHsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGl0KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTkyNSwxNyArOTMyLDE3IEBACiAgICAgdiA9IHNlbGYtPm9iX2l0ZW1baV07CiAgICAgaWYgKGkgPT0gUHlfU0laRShzZWxmKSAtIDEpIHsKICAgICAgICAgc3RhdHVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSAtIDEpOwotICAgICAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHY7IC8qIGFuZCB2IG5vdyBvd25zIHRoZSByZWZlcmVuY2UgdGhlIGxpc3QgaGFkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYodik7CiAgICAgc3RhdHVzID0gbGlzdF9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgIC8qIFVzZSBzdGF0dXMsIHNvIHRoYXQgaW4gYSByZWxlYXNlIGJ1aWxkIGNvbXBpbGVycyBkb24ndAotICAgICAqIGNvbXBsYWluIGFib3V0IHRoZSB1bnVzZWQgbmFtZS4KLSAgICAgKi8KLSAgICAodm9pZCkgc3RhdHVzOwotCisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEwNTEsOSArMTA1OCw5IEBACiBzdGF0aWMgaW50CiBiaW5hcnlzb3J0KHNvcnRzbGljZSBsbywgUHlPYmplY3QgKipoaSwgUHlPYmplY3QgKipzdGFydCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGs7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcGl2b3Q7CisgICAgUHlfc3NpemVfdCBrOworICAgIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7CisgICAgUHlPYmplY3QgKnBpdm90OwogCiAgICAgYXNzZXJ0KGxvLmtleXMgPD0gc3RhcnQgJiYgc3RhcnQgPD0gaGkpOwogICAgIC8qIGFzc2VydCBbbG8sIHN0YXJ0KSBpcyBzb3J0ZWQgKi8KQEAgLTI0NzYsNiArMjQ4Myw3IEBACiAgICAgICAgICAgICBQeU9iamVjdCAqKmdhcmJhZ2U7CiAgICAgICAgICAgICBzaXplX3QgY3VyOwogICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgaW50IHJlczsKIAogICAgICAgICAgICAgaWYgKHNsaWNlbGVuZ3RoIDw9IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTI2LDE0ICsyNTM0LDE0IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLT0gc2xpY2VsZW5ndGg7Ci0gICAgICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsKKyAgICAgICAgICAgIHJlcyA9IGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpOwogCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xpY2VsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihnYXJiYWdlW2ldKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TWVtX0ZSRUUoZ2FyYmFnZSk7CiAKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIGFzc2lnbiBzbGljZSAqLwpAQCAtMjY2MCw3ICsyNjY4LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBsb25nIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlMaXN0T2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IGxpc3RpdGVyb2JqZWN0OwogCkBAIC0yNzk3LDcgKzI4MDUsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGxpc3RpdGVyX3NldHN0YXRlKGxpc3RpdGVyb2JqZWN0ICppdCwgUHlPYmplY3QgKnN0YXRlKQogewotICAgIGxvbmcgaW5kZXggPSBQeUxvbmdfQXNMb25nKHN0YXRlKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gUHlMb25nX0FzU3NpemVfdChzdGF0ZSk7CiAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChpdC0+aXRfc2VxICE9IE5VTEwpIHsKQEAgLTI5NTgsNyArMjk2Niw3IEBACiAgICAgaWYgKGZvcndhcmQpIHsKICAgICAgICAgbGlzdGl0ZXJvYmplY3QgKml0ID0gKGxpc3RpdGVyb2JqZWN0ICopX2l0OwogICAgICAgICBpZiAoaXQtPml0X3NlcSkKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbCIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCisgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKW4iLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQtPml0X3NlcSwgaXQtPml0X2luZGV4KTsKICAgICB9IGVsc2UgewogICAgICAgICBsaXN0cmV2aXRlcm9iamVjdCAqaXQgPSAobGlzdHJldml0ZXJvYmplY3QgKilfaXQ7CmRpZmYgLS1naXQgYS9PYmplY3RzL2xvbmdvYmplY3QuYyBiL09iamVjdHMvbG9uZ29iamVjdC5jCmluZGV4IDYzODM1MDcuLjY4YTY2N2UgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbG9uZ29iamVjdC5jCisrKyBiL09iamVjdHMvbG9uZ29iamVjdC5jCkBAIC0xNyw3ICsxNyw4IEBACiAjZW5kaWYKIAogLyogY29udmVydCBhIFB5TG9uZyBvZiBzaXplIDEsIDAgb3IgLTEgdG8gYW4gc2RpZ2l0ICovCi0jZGVmaW5lIE1FRElVTV9WQUxVRSh4KSAoUHlfU0laRSh4KSA8IDAgPyAtKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdIDogICBcCisjZGVmaW5lIE1FRElVTV9WQUxVRSh4KSAoYXNzZXJ0KC0xIDw9IFB5X1NJWkUoeCkgJiYgUHlfU0laRSh4KSA8PSAxKSwgICBcCisgICAgICAgICBQeV9TSVpFKHgpIDwgMCA/IC0oc2RpZ2l0KSh4KS0+b2JfZGlnaXRbMF0gOiAgIFwKICAgICAgICAgICAgICAoUHlfU0laRSh4KSA9PSAwID8gKHNkaWdpdCkwIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdKSkKICNkZWZpbmUgQUJTKHgpICgoeCkgPCAwID8gLSh4KSA6ICh4KSkKQEAgLTcwLDExICs3MSwyMSBAQAogCiAvKiBJZiBhIGZyZXNobHktYWxsb2NhdGVkIGludCBpcyBhbHJlYWR5IHNoYXJlZCwgaXQgbXVzdAogICAgYmUgYSBzbWFsbCBpbnRlZ2VyLCBzbyBuZWdhdGluZyBpdCBtdXN0IGdvIHRvIFB5TG9uZ19Gcm9tTG9uZyAqLwotI2RlZmluZSBORUdBVEUoeCkgXAotICAgIGRvIGlmIChQeV9SRUZDTlQoeCkgPT0gMSkgUHlfU0laRSh4KSA9IC1QeV9TSVpFKHgpOyAgXAotICAgICAgIGVsc2UgeyBQeU9iamVjdCogdG1wPVB5TG9uZ19Gcm9tTG9uZygtTUVESVVNX1ZBTFVFKHgpKTsgIFwKLSAgICAgICAgICAgUHlfREVDUkVGKHgpOyAoeCkgPSAoUHlMb25nT2JqZWN0Kil0bXA7IH0gICAgICAgICAgICAgICBcCi0gICAgd2hpbGUoMCkKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorX1B5TG9uZ19OZWdhdGUoUHlMb25nT2JqZWN0ICoqeF9wKQoreworICAgIFB5TG9uZ09iamVjdCAqeDsKKworICAgIHggPSAoUHlMb25nT2JqZWN0ICopKnhfcDsKKyAgICBpZiAoUHlfUkVGQ05UKHgpID09IDEpIHsKKyAgICAgICAgUHlfU0laRSh4KSA9IC1QeV9TSVpFKHgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKnhfcCA9IChQeUxvbmdPYmplY3QgKilQeUxvbmdfRnJvbUxvbmcoLU1FRElVTV9WQUxVRSh4KSk7CisgICAgUHlfREVDUkVGKHgpOworfQorCiAvKiBGb3IgaW50IG11bHRpcGxpY2F0aW9uLCB1c2UgdGhlIE8oTioqMikgc2Nob29sIGFsZ29yaXRobSB1bmxlc3MKICAqIGJvdGggb3BlcmFuZHMgY29udGFpbiBtb3JlIHRoYW4gS0FSQVRTVUJBX0NVVE9GRiBkaWdpdHMgKHRoaXMKICAqIGJlaW5nIGFuIGludGVybmFsIFB5dGhvbiBpbnQgZGlnaXQsIGluIGJhc2UgQkFTRSkuCkBAIC04OSwxMSArMTAwLDYgQEAKICAqLwogI2RlZmluZSBGSVZFQVJZX0NVVE9GRiA4CiAKLSN1bmRlZiBNSU4KLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUFYKHgsIHkpICgoeCkgPCAoeSkgPyAoeSkgOiAoeCkpCi0jZGVmaW5lIE1JTih4LCB5KSAoKHgpID4gKHkpID8gKHkpIDogKHgpKQotCiAjZGVmaW5lIFNJR0NIRUNLKFB5VHJ5QmxvY2spICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgUHlUcnlCbG9jayAgICBcCkBAIC0xMDQsNyArMTEwLDcgQEAKICAgIG9mIHRoZSBhbGdvcml0aG1zIHVzZWQsIHRoaXMgY291bGQgc2F2ZSBhdCBtb3N0IGJlIG9uZSB3b3JkIGFueXdheS4gKi8KIAogc3RhdGljIFB5TG9uZ09iamVjdCAqCi1sb25nX25vcm1hbGl6ZShyZWdpc3RlciBQeUxvbmdPYmplY3QgKnYpCitsb25nX25vcm1hbGl6ZShQeUxvbmdPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBqID0gQUJTKFB5X1NJWkUodikpOwogICAgIFB5X3NzaXplX3QgaSA9IGo7CkBAIC0zMzQsNyArMzQwLDcgQEAKIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBsb25nIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC00NTcsNyArNDYzLDcgQEAKIAogUHlfc3NpemVfdAogUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqdnYpIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTUxMyw3ICs1MTksNyBAQAogdW5zaWduZWQgbG9uZwogUHlMb25nX0FzVW5zaWduZWRMb25nKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTU0Myw3ICs1NDksNyBAQAogICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBDIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgIH0KQEAgLTU1Nyw3ICs1NjMsNyBAQAogc2l6ZV90CiBQeUxvbmdfQXNTaXplX3QoUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgc2l6ZV90IHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC02MDAsNyArNjA2LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBfUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtNjI4LDcgKzYzNCw3IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlOdW1iZXJNZXRob2RzICpuYjsKICAgICBQeUxvbmdPYmplY3QgKmxvOwpAQCAtOTU0LDkgKzk2MCw2IEBACiBQeUxvbmdfRnJvbVZvaWRQdHIodm9pZCAqcCkKIHsKICNpZiBTSVpFT0ZfVk9JRF9QIDw9IFNJWkVPRl9MT05HCi0gICAgLyogc3BlY2lhbC1jYXNlIG51bGwgcG9pbnRlciAqLwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoKHVuc2lnbmVkIGxvbmcpKFB5X3VpbnRwdHJfdClwKTsKICNlbHNlCiAKQEAgLTk2Niw5ICs5NjksNiBAQAogI2lmIFNJWkVPRl9MT05HX0xPTkcgPCBTSVpFT0ZfVk9JRF9QCiAjICAgZXJyb3IgIlB5TG9uZ19Gcm9tVm9pZFB0cjogc2l6ZW9mKFBZX0xPTkdfTE9ORykgPCBzaXplb2Yodm9pZCopIgogI2VuZGlmCi0gICAgLyogc3BlY2lhbC1jYXNlIG51bGwgcG9pbnRlciAqLwotICAgIGlmICghcCkKLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKCh1bnNpZ25lZCBQWV9MT05HX0xPTkcpKFB5X3VpbnRwdHJfdClwKTsKICNlbmRpZiAvKiBTSVpFT0ZfVk9JRF9QIDw9IFNJWkVPRl9MT05HICovCiAKQEAgLTEwMTQsNyArMTAxNCw2IEBACiAgKiByZXdyaXR0ZW4gdG8gdXNlIHRoZSBuZXdlciBQeUxvbmdfe0FzLEZyb219Qnl0ZUFycmF5IEFQSS4KICAqLwogCi0jZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gKGludCkqKHVuc2lnbmVkIGNoYXIqKSZvbmUKICNkZWZpbmUgUFlfQUJTX0xMT05HX01JTiAoMC0odW5zaWduZWQgUFlfTE9OR19MT05HKVBZX0xMT05HX01JTikKIAogLyogQ3JlYXRlIGEgbmV3IGludCBvYmplY3QgZnJvbSBhIEMgUFlfTE9OR19MT05HIGludC4gKi8KQEAgLTExNjcsNyArMTE2Niw2IEBACiB7CiAgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIFBZX0xPTkdfTE9ORyBieXRlczsKLSAgICBpbnQgb25lID0gMTsKICAgICBpbnQgcmVzOwogCiAgICAgaWYgKHZ2ID09IE5VTEwpIHsKQEAgLTEyMDIsNyArMTIwMCw3IEBACiAgICAgY2FzZSAxOiByZXR1cm4gdi0+b2JfZGlnaXRbMF07CiAgICAgfQogICAgIHJlcyA9IF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIElTX0xJVFRMRV9FTkRJQU4sIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgUFlfTElUVExFX0VORElBTiwgMSk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTEyMTksNyArMTIxNyw2IEBACiB7CiAgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBieXRlczsKLSAgICBpbnQgb25lID0gMTsKICAgICBpbnQgcmVzOwogCiAgICAgaWYgKHZ2ID09IE5VTEwpIHsKQEAgLTEyMzgsNyArMTIzNSw3IEBACiAgICAgfQogCiAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBQWV9MSVRUTEVfRU5ESUFOLCAwKTsKIAogICAgIC8qIFBsYW4gOSBjYW4ndCBoYW5kbGUgUFlfTE9OR19MT05HIGluID8gOiBleHByZXNzaW9ucyAqLwogICAgIGlmIChyZXMgPCAwKQpAQCAtMTI1Myw3ICsxMjUwLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBQWV9MT05HX0xPTkcKIF9QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CkBAIC0xMjgxLDcgKzEyNzgsNyBAQAogfQogCiB1bnNpZ25lZCBQWV9MT05HX0xPTkcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICpvcCkKIHsKICAgICBQeU51bWJlck1ldGhvZHMgKm5iOwogICAgIFB5TG9uZ09iamVjdCAqbG87CkBAIC0xMzE0LDcgKzEzMTEsNiBAQAogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIFBZX0xPTkdfTE9ORyktMTsKICAgICB9CiB9Ci0jdW5kZWYgSVNfTElUVExFX0VORElBTgogCiAvKiBHZXQgYSBDIGxvbmcgbG9uZyBpbnQgZnJvbSBhbiBpbnQgb2JqZWN0IG9yIGFueSBvYmplY3QgdGhhdCBoYXMgYW4KICAgIF9faW50X18gbWV0aG9kLgpAQCAtMTMzMCw3ICsxMzI2LDcgQEAKIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnZ2LCBpbnQgKm92ZXJmbG93KQogewogICAgIC8qIFRoaXMgdmVyc2lvbiBieSBUaW0gUGV0ZXJzICovCi0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeCwgcHJldjsKICAgICBQWV9MT05HX0xPTkcgcmVzOwogICAgIFB5X3NzaXplX3QgaTsKQEAgLTE2MDYsNyArMTYwMiw3IEBACiAgICAgKi8KICAgICBpZiAoc2l6ZV9hID4gUFlfU1NJWkVfVF9NQVggLyBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAibG9uZyBpcyB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvKiB0aGUgZXhwcmVzc2lvbiBzaXplX2EgKiBQeUxvbmdfU0hJRlQgaXMgbm93IHNhZmUgZnJvbSBvdmVyZmxvdyAqLwpAQCAtMTY3Niw3ICsxNjcyLDYgQEAKICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBwID0gKFRZUEUqKVB5VW5pY29kZV9EQVRBKHN0cikgKyBzdHJsZW47ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKnAgPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIC8qIHBvdXRbMF0gdGhyb3VnaCBwb3V0W3NpemUtMl0gY29udHJpYnV0ZSBleGFjdGx5ICAgICAgICAgICAgXAogICAgICAgICAgICBfUHlMb25nX0RFQ0lNQUxfU0hJRlQgZGlnaXRzIGVhY2ggKi8gICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgZm9yIChpPTA7IGkgPCBzaXplIC0gMTsgaSsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzQ5LDcgKzE3NDQsNyBAQAogbG9uZ19mb3JtYXRfYmluYXJ5KFB5T2JqZWN0ICphYSwgaW50IGJhc2UsIGludCBhbHRlcm5hdGUsCiAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqYSA9IChQeUxvbmdPYmplY3QgKilhYTsKKyAgICBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0ICopYWE7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlfc3NpemVfdCBzejsKICAgICBQeV9zc2l6ZV90IHNpemVfYTsKQEAgLTE3OTAsNyArMTc4NSw3IEBACiAgICAgICAgIC8qIEVuc3VyZSBvdmVyZmxvdyBkb2Vzbid0IG9jY3VyIGR1cmluZyBjb21wdXRhdGlvbiBvZiBzei4gKi8KICAgICAgICAgaWYgKHNpemVfYSA+IChQWV9TU0laRV9UX01BWCAtIDMpIC8gUHlMb25nX1NISUZUKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICBzaXplX2FfaW5fYml0cyA9IChzaXplX2EgLSAxKSAqIFB5TG9uZ19TSElGVCArCkBAIC0xOTQ2LDEwICsxOTQxLDEwIEBACiAgKiBzdHJpbmcgY2hhcmFjdGVycy4KICAqLwogc3RhdGljIFB5TG9uZ09iamVjdCAqCi1sb25nX2Zyb21fYmluYXJ5X2Jhc2UoY2hhciAqKnN0ciwgaW50IGJhc2UpCitsb25nX2Zyb21fYmluYXJ5X2Jhc2UoY29uc3QgY2hhciAqKnN0ciwgaW50IGJhc2UpCiB7Ci0gICAgY2hhciAqcCA9ICpzdHI7Ci0gICAgY2hhciAqc3RhcnQgPSBwOworICAgIGNvbnN0IGNoYXIgKnAgPSAqc3RyOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsKICAgICBpbnQgYml0c19wZXJfY2hhcjsKICAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlMb25nT2JqZWN0ICp6OwpAQCAtMjAxNCwxMCArMjAwOSwxMCBAQAogICogSWYgdW5zdWNjZXNzZnVsLCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIFB5T2JqZWN0ICoKLVB5TG9uZ19Gcm9tU3RyaW5nKGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQorUHlMb25nX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCiB7CiAgICAgaW50IHNpZ24gPSAxLCBlcnJvcl9pZl9ub256ZXJvID0gMDsKLSAgICBjaGFyICpzdGFydCwgKm9yaWdfc3RyID0gc3RyOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0LCAqb3JpZ19zdHIgPSBzdHI7CiAgICAgUHlMb25nT2JqZWN0ICp6ID0gTlVMTDsKICAgICBQeU9iamVjdCAqc3Ryb2JqOwogICAgIFB5X3NzaXplX3Qgc2xlbjsKQEAgLTIxNDYsMTMgKzIxNDEsMTMgQEAKIGp1c3QgMSBkaWdpdCBhdCB0aGUgc3RhcnQsIHNvIHRoYXQgdGhlIGNvcHlpbmcgY29kZSB3YXMgZXhlcmNpc2VkIGZvciBldmVyeQogZGlnaXQgYmV5b25kIHRoZSBmaXJzdC4KICoqKi8KLSAgICAgICAgcmVnaXN0ZXIgdHdvZGlnaXRzIGM7ICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLworICAgICAgICB0d29kaWdpdHMgYzsgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZV96OwogICAgICAgICBpbnQgaTsKICAgICAgICAgaW50IGNvbnZ3aWR0aDsKICAgICAgICAgdHdvZGlnaXRzIGNvbnZtdWx0bWF4LCBjb252bXVsdDsKICAgICAgICAgZGlnaXQgKnB6LCAqcHpzdG9wOwotICAgICAgICBjaGFyKiBzY2FuOworICAgICAgICBjb25zdCBjaGFyKiBzY2FuOwogCiAgICAgICAgIHN0YXRpYyBkb3VibGUgbG9nX2Jhc2VfQkFTRVszN10gPSB7MC4wZTAsfTsKICAgICAgICAgc3RhdGljIGludCBjb252d2lkdGhfYmFzZVszN10gPSB7MCx9OwpAQCAtMjI4MCwxOSArMjI3NSwxOSBAQAogICAgIGlmICh6ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChwZW5kICE9IE5VTEwpCi0gICAgICAgICpwZW5kID0gc3RyOworICAgICAgICAqcGVuZCA9IChjaGFyICopc3RyOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgejsKIAogICBvbkVycm9yOgogICAgIGlmIChwZW5kICE9IE5VTEwpCi0gICAgICAgICpwZW5kID0gc3RyOworICAgICAgICAqcGVuZCA9IChjaGFyICopc3RyOwogICAgIFB5X1hERUNSRUYoeik7CiAgICAgc2xlbiA9IHN0cmxlbihvcmlnX3N0cikgPCAyMDAgPyBzdHJsZW4ob3JpZ19zdHIpIDogMjAwOwogICAgIHN0cm9iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShvcmlnX3N0ciwgc2xlbik7CiAgICAgaWYgKHN0cm9iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJS4yMDBSIiwKICAgICAgICAgICAgICAgICAgYmFzZSwgc3Ryb2JqKTsKICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTIzMTYsNyArMjMxMSw3IEBACiAgICAgc3Ryb2JqID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBQeV9NSU4obGVuLCAyMDApKTsKICAgICBpZiAoc3Ryb2JqICE9IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJS4yMDBSIiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7CiAgICAgICAgIFB5X0RFQ1JFRihzdHJvYmopOwogICAgIH0KQEAgLTIzMzcsNyArMjMzMiw3IEBACiBQeU9iamVjdCAqCiBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QoUHlPYmplY3QgKnUsIGludCBiYXNlKQogewotICAgIFB5T2JqZWN0ICpyZXN1bHQsICphc2NpaWRpZywgKnN0cm9iajsKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXNjaWlkaWc7CiAgICAgY2hhciAqYnVmZmVyLCAqZW5kID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKIApAQCAtMjM1OSwxMyArMjM1NCw5IEBACiAgICAgICAgIFB5X0RFQ1JFRihhc2NpaWRpZyk7CiAgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKICAgICB9Ci0gICAgc3Ryb2JqID0gUHlTZXF1ZW5jZV9HZXRTbGljZSh1LCAwLCAyMDApOwotICAgIGlmIChzdHJvYmogIT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAotICAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3Ryb2JqKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cm9iaik7Ci0gICAgfQorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCisgICAgICAgICAgICAgICAgIGJhc2UsIHUpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yNDE5LDEwICsyNDEwLDIxIEBACiAgICAgICAgVGhlIHF1b3RpZW50IHogaGFzIHRoZSBzaWduIG9mIGEqYjsKICAgICAgICB0aGUgcmVtYWluZGVyIHIgaGFzIHRoZSBzaWduIG9mIGEsCiAgICAgICAgc28gYSA9IGIqeiArIHIuICovCi0gICAgaWYgKChQeV9TSVpFKGEpIDwgMCkgIT0gKFB5X1NJWkUoYikgPCAwKSkKLSAgICAgICAgTkVHQVRFKHopOwotICAgIGlmIChQeV9TSVpFKGEpIDwgMCAmJiBQeV9TSVpFKCpwcmVtKSAhPSAwKQotICAgICAgICBORUdBVEUoKnByZW0pOworICAgIGlmICgoUHlfU0laRShhKSA8IDApICE9IChQeV9TSVpFKGIpIDwgMCkpIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUigqcHJlbSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5X1NJWkUoYSkgPCAwICYmIFB5X1NJWkUoKnByZW0pICE9IDApIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUocHJlbSk7CisgICAgICAgIGlmICgqcHJlbSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoeik7CisgICAgICAgICAgICBQeV9DTEVBUigqcHJlbSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CiAgICAgKnBkaXYgPSBtYXliZV9zbWFsbF9sb25nKHopOwogICAgIHJldHVybiAwOwogfQpAQCAtMjY5OCw3ICsyNzAwLDcgQEAKICAgICB4ID0gX1B5TG9uZ19GcmV4cCgoUHlMb25nT2JqZWN0ICopdiwgJmV4cG9uZW50KTsKICAgICBpZiAoKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB8fCBleHBvbmVudCA+IERCTF9NQVhfRVhQKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7CiAgICAgICAgIHJldHVybiAtMS4wOwogICAgIH0KICAgICByZXR1cm4gbGRleHAoeCwgKGludClleHBvbmVudCk7CkBAIC0yOTE4LDggKzI5MjAsMTEgQEAKICAgICAgICAgYm9ycm93ICY9IDE7IC8qIEtlZXAgb25seSBvbmUgc2lnbiBiaXQgKi8KICAgICB9CiAgICAgYXNzZXJ0KGJvcnJvdyA9PSAwKTsKLSAgICBpZiAoc2lnbiA8IDApCi0gICAgICAgIE5FR0FURSh6KTsKKyAgICBpZiAoc2lnbiA8IDApIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBsb25nX25vcm1hbGl6ZSh6KTsKIH0KIApAQCAtMzA4Niw3ICszMDkxLDcgQEAKICAgICBQeV9zc2l6ZV90IHNpemVfbG8sIHNpemVfaGk7CiAgICAgY29uc3QgUHlfc3NpemVfdCBzaXplX24gPSBBQlMoUHlfU0laRShuKSk7CiAKLSAgICBzaXplX2xvID0gTUlOKHNpemVfbiwgc2l6ZSk7CisgICAgc2l6ZV9sbyA9IFB5X01JTihzaXplX24sIHNpemUpOwogICAgIHNpemVfaGkgPSBzaXplX24gLSBzaXplX2xvOwogCiAgICAgaWYgKChoaSA9IF9QeUxvbmdfTmV3KHNpemVfaGkpKSA9PSBOVUxMKQpAQCAtMzM1Nyw3ICszMzYyLDcgQEAKICAgICBuYmRvbmUgPSAwOwogICAgIHdoaWxlIChic2l6ZSA+IDApIHsKICAgICAgICAgUHlMb25nT2JqZWN0ICpwcm9kdWN0OwotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IG5idG91c2UgPSBNSU4oYnNpemUsIGFzaXplKTsKKyAgICAgICAgY29uc3QgUHlfc3NpemVfdCBuYnRvdXNlID0gUHlfTUlOKGJzaXplLCBhc2l6ZSk7CiAKICAgICAgICAgLyogTXVsdGlwbHkgdGhlIG5leHQgc2xpY2Ugb2YgYiBieSBhLiAqLwogICAgICAgICBtZW1jcHkoYnNsaWNlLT5vYl9kaWdpdCwgYi0+b2JfZGlnaXQgKyBuYmRvbmUsCkBAIC0zNDEwLDggKzM0MTUsMTEgQEAKIAogICAgIHogPSBrX211bChhLCBiKTsKICAgICAvKiBOZWdhdGUgaWYgZXhhY3RseSBvbmUgb2YgdGhlIGlucHV0cyBpcyBuZWdhdGl2ZS4gKi8KLSAgICBpZiAoKChQeV9TSVpFKGEpIF4gUHlfU0laRShiKSkgPCAwKSAmJiB6KQotICAgICAgICBORUdBVEUoeik7CisgICAgaWYgKCgoUHlfU0laRShhKSBeIFB5X1NJWkUoYikpIDwgMCkgJiYgeikgeworICAgICAgICBfUHlMb25nX05lZ2F0ZSgmeik7CisgICAgICAgIGlmICh6ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXo7CiB9CiAKQEAgLTM2NDgsNyArMzY1Niw3IEBACiAgICAgICAgIGdvdG8gdW5kZXJmbG93X29yX3plcm87CiAKICAgICAvKiBDaG9vc2UgdmFsdWUgZm9yIHNoaWZ0OyBzZWUgY29tbWVudHMgZm9yIHN0ZXAgMSBhYm92ZS4gKi8KLSAgICBzaGlmdCA9IE1BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOworICAgIHNoaWZ0ID0gUHlfTUFYKGRpZmYsIERCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRyAtIDI7CiAKICAgICBpbmV4YWN0ID0gMDsKIApAQCAtMzcxOSw3ICszNzI3LDcgQEAKICAgICB4X2JpdHMgPSAoeF9zaXplLTEpKlB5TG9uZ19TSElGVCtiaXRzX2luX2RpZ2l0KHgtPm9iX2RpZ2l0W3hfc2l6ZS0xXSk7CiAKICAgICAvKiBUaGUgbnVtYmVyIG9mIGV4dHJhIGJpdHMgdGhhdCBoYXZlIHRvIGJlIHJvdW5kZWQgYXdheS4gKi8KLSAgICBleHRyYV9iaXRzID0gTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUc7CisgICAgZXh0cmFfYml0cyA9IFB5X01BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHOwogICAgIGFzc2VydChleHRyYV9iaXRzID09IDIgfHwgZXh0cmFfYml0cyA9PSAzKTsKIAogICAgIC8qIFJvdW5kIGJ5IGRpcmVjdGx5IG1vZGlmeWluZyB0aGUgbG93IGRpZ2l0IG9mIHguICovCkBAIC0zODU4LDcgKzM4NjYsOSBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGMpOwogICAgICAgICAgICAgYyA9IHRlbXA7CiAgICAgICAgICAgICB0ZW1wID0gTlVMTDsKLSAgICAgICAgICAgIE5FR0FURShjKTsKKyAgICAgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZjKTsKKyAgICAgICAgICAgIGlmIChjID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGlmIG1vZHVsdXMgPT0gMToKQEAgLTM5NjQsMTAgKzM5NzQsNyBAQAogICAgIGdvdG8gRG9uZTsKIAogICBFcnJvcjoKLSAgICBpZiAoeiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih6KTsKLSAgICAgICAgeiA9IE5VTEw7Ci0gICAgfQorICAgIFB5X0NMRUFSKHopOwogICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICBEb25lOgogICAgIGlmIChQeV9TSVpFKGIpID4gRklWRUFSWV9DVVRPRkYpIHsKQEAgLTQwOTcsMTAgKzQxMDQsMTAgQEAKIAogICAgIHNoaWZ0YnkgPSBQeUxvbmdfQXNTc2l6ZV90KChQeU9iamVjdCAqKWIpOwogICAgIGlmIChzaGlmdGJ5ID09IC0xTCAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHNoaWZ0YnkgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibmVnYXRpdmUgc2hpZnQgY291bnQiKTsKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAvKiB3b3Jkc2hpZnQsIHJlbXNoaWZ0ID0gZGl2bW9kKHNoaWZ0YnksIFB5TG9uZ19TSElGVCkgKi8KICAgICB3b3Jkc2hpZnQgPSBzaGlmdGJ5IC8gUHlMb25nX1NISUZUOwpAQCAtNDExMiw5ICs0MTE5LDExIEBACiAgICAgICAgICsrbmV3c2l6ZTsKICAgICB6ID0gX1B5TG9uZ19OZXcobmV3c2l6ZSk7CiAgICAgaWYgKHogPT0gTlVMTCkKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7Ci0gICAgaWYgKFB5X1NJWkUoYSkgPCAwKQotICAgICAgICBORUdBVEUoeik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeV9TSVpFKGEpIDwgMCkgeworICAgICAgICBhc3NlcnQoUHlfUkVGQ05UKHopID09IDEpOworICAgICAgICBQeV9TSVpFKHopID0gLVB5X1NJWkUoeik7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCB3b3Jkc2hpZnQ7IGkrKykKICAgICAgICAgei0+b2JfZGlnaXRbaV0gPSAwOwogICAgIGFjY3VtID0gMDsKQEAgLTQxMjgsNyArNDEzNyw2IEBACiAgICAgZWxzZQogICAgICAgICBhc3NlcnQoIWFjY3VtKTsKICAgICB6ID0gbG9uZ19ub3JtYWxpemUoeik7Ci0gIGxzaGlmdF9lcnJvcjoKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG1heWJlX3NtYWxsX2xvbmcoeik7CiB9CiAKQEAgLTQxNTMsNyArNDE2MSw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX2JpdHdpc2UoUHlMb25nT2JqZWN0ICphLAotICAgICAgICAgICAgIGludCBvcCwgIC8qICcmJywgJ3wnLCAnXicgKi8KKyAgICAgICAgICAgICBjaGFyIG9wLCAgLyogJyYnLCAnfCcsICdeJyAqLwogICAgICAgICAgICAgIFB5TG9uZ09iamVjdCAqYikKIHsKICAgICBpbnQgbmVnYSwgbmVnYiwgbmVnejsKQEAgLTQzMjgsOCArNDMzNiw3IEBACiBsb25nX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeU9iamVjdCAqb2Jhc2UgPSBOVUxMLCAqeCA9IE5VTEw7Ci0gICAgbG9uZyBiYXNlOwotICAgIGludCBvdmVyZmxvdzsKKyAgICBQeV9zc2l6ZV90IGJhc2U7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ4IiwgImJhc2UiLCAwfTsKIAogICAgIGlmICh0eXBlICE9ICZQeUxvbmdfVHlwZSkKQEAgLTQzNDgsMTAgKzQzNTUsMTAgQEAKICAgICBpZiAob2Jhc2UgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5TnVtYmVyX0xvbmcoeCk7CiAKLSAgICBiYXNlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iYXNlLCAmb3ZlcmZsb3cpOworICAgIGJhc2UgPSBQeU51bWJlcl9Bc1NzaXplX3Qob2Jhc2UsIE5VTEwpOwogICAgIGlmIChiYXNlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChvdmVyZmxvdyB8fCAoYmFzZSAhPSAwICYmIGJhc2UgPCAyKSB8fCBiYXNlID4gMzYpIHsKKyAgICBpZiAoKGJhc2UgIT0gMCAmJiBiYXNlIDwgMikgfHwgYmFzZSA+IDM2KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImludCgpIGJhc2UgbXVzdCBiZSA+PSAyIGFuZCA8PSAzNiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ0MzIsNyArNDQzOSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5TG9uZ19Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTUwODIsMTUgKzUwODksMTcgQEAKICAgICAgICAgICAgIGFzc2VydCh2LT5vYl9kaWdpdFswXSA9PSBhYnMoaXZhbCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3RfSU5JVCh2LCAmUHlMb25nX1R5cGUpOworICAgICAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVCh2LCAmUHlMb25nX1R5cGUpOwogICAgICAgICB9CiAgICAgICAgIFB5X1NJWkUodikgPSBzaXplOwogICAgICAgICB2LT5vYl9kaWdpdFswXSA9IGFicyhpdmFsKTsKICAgICB9CiAjZW5kaWYKICAgICAvKiBpbml0aWFsaXplIGludF9pbmZvICovCi0gICAgaWYgKEludF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkludF9JbmZvVHlwZSwgJmludF9pbmZvX2Rlc2MpOworICAgIGlmIChJbnRfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSW50X0luZm9UeXBlLCAmaW50X2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL21lbW9yeW9iamVjdC5jIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwppbmRleCAxODlhZjg4Li5jYjY0NGI4IDEwMDY0NAotLS0gYS9PYmplY3RzL21lbW9yeW9iamVjdC5jCisrKyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKQEAgLTI0MDIsNyArMjQwMiw3IEBACiAKIC8qIEFzIHNlcXVlbmNlICovCiBzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgbWVtb3J5X2FzX3NlcXVlbmNlID0gewotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCisgICAgICAgIChsZW5mdW5jKW1lbW9yeV9sZW5ndGgsICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfcmVwZWF0ICovCiAgICAgICAgIChzc2l6ZWFyZ2Z1bmMpbWVtb3J5X2l0ZW0sICAgICAgICAvKiBzcV9pdGVtICovCkBAIC0yNzQyLDcgKzI3NDIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgLyogQ2FuJ3QgZmFpbCAqLwotICAgICAgICBzZWxmLT5oYXNoID0gX1B5X0hhc2hCeXRlcygodW5zaWduZWQgY2hhciAqKW1lbSwgdmlldy0+bGVuKTsKKyAgICAgICAgc2VsZi0+aGFzaCA9IF9QeV9IYXNoQnl0ZXMobWVtLCB2aWV3LT5sZW4pOwogCiAgICAgICAgIGlmIChtZW0gIT0gdmlldy0+YnVmKQogICAgICAgICAgICAgUHlNZW1fRnJlZShtZW0pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tZXRob2RvYmplY3QuYyBiL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKaW5kZXggZjA2ODVkZC4uNjE3OWFlZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tZXRob2RvYmplY3QuYworKysgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCkBAIC0xMyw2ICsxMywxNSBAQAogI2RlZmluZSBQeUNGdW5jdGlvbl9NQVhGUkVFTElTVCAyNTYKICNlbmRpZgogCisvKiB1bmRlZmluZSBtYWNybyB0cmFtcG9saW5lIHRvIFB5Q0Z1bmN0aW9uX05ld0V4ICovCisjdW5kZWYgUHlDRnVuY3Rpb25fTmV3CisKK1B5T2JqZWN0ICoKK1B5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChtbCwgc2VsZiwgTlVMTCk7Cit9CisKIFB5T2JqZWN0ICoKIFB5Q0Z1bmN0aW9uX05ld0V4KFB5TWV0aG9kRGVmICptbCwgUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptb2R1bGUpCiB7CkBAIC0yMCw3ICsyOSw3IEBACiAgICAgb3AgPSBmcmVlX2xpc3Q7CiAgICAgaWYgKG9wICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5Q0Z1bmN0aW9uT2JqZWN0ICopKG9wLT5tX3NlbGYpOwotICAgICAgICBQeU9iamVjdF9JTklUKG9wLCAmUHlDRnVuY3Rpb25fVHlwZSk7CisgICAgICAgICh2b2lkKVB5T2JqZWN0X0lOSVQob3AsICZQeUNGdW5jdGlvbl9UeXBlKTsKICAgICAgICAgbnVtZnJlZS0tOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTcwLDIzICs3OSwzNCBAQAogUHlPYmplY3QgKgogUHlDRnVuY3Rpb25fQ2FsbChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3KQogeworI2RlZmluZSBDSEVDS19SRVNVTFQocmVzKSBhc3NlcnQocmVzICE9IE5VTEwgfHwgUHlFcnJfT2NjdXJyZWQoKSkKKwogICAgIFB5Q0Z1bmN0aW9uT2JqZWN0KiBmID0gKFB5Q0Z1bmN0aW9uT2JqZWN0KilmdW5jOwogICAgIFB5Q0Z1bmN0aW9uIG1ldGggPSBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04oZnVuYyk7CiAgICAgUHlPYmplY3QgKnNlbGYgPSBQeUNGdW5jdGlvbl9HRVRfU0VMRihmdW5jKTsKKyAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIHN3aXRjaCAoUHlDRnVuY3Rpb25fR0VUX0ZMQUdTKGZ1bmMpICYgfihNRVRIX0NMQVNTIHwgTUVUSF9TVEFUSUMgfCBNRVRIX0NPRVhJU1QpKSB7CiAgICAgY2FzZSBNRVRIX1ZBUkFSR1M6Ci0gICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgaWYgKGt3ID09IE5VTEwgfHwgUHlEaWN0X1NpemUoa3cpID09IDApIHsKKyAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgYXJnKTsKKyAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFM6Ci0gICAgICAgIHJldHVybiAoKihQeUNGdW5jdGlvbldpdGhLZXl3b3JkcyltZXRoKShzZWxmLCBhcmcsIGt3KTsKKyAgICAgICAgcmVzID0gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7CisgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICByZXR1cm4gcmVzOwogICAgIGNhc2UgTUVUSF9OT0FSR1M6CiAgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CiAgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChzaXplID09IDApIHsKKyAgICAgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIE5VTEwpOworICAgICAgICAgICAgICAgIENIRUNLX1JFU1VMVChyZXMpOworICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICIlLjIwMHMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwpAQCAtOTYsOCArMTE2LDExIEBACiAgICAgY2FzZSBNRVRIX086CiAgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CiAgICAgICAgICAgICBzaXplID0gUHlUdXBsZV9HRVRfU0laRShhcmcpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKCptZXRoKShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCkpOworICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkgeworICAgICAgICAgICAgICAgIHJlcyA9ICgqbWV0aCkoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApKTsKKyAgICAgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQgKCV6ZCBnaXZlbikiLAogICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUsIHNpemUpOwpAQCAtMTE0LDYgKzEzNyw4IEBACiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiUuMjAwcygpIHRha2VzIG5vIGtleXdvcmQgYXJndW1lbnRzIiwKICAgICAgICAgICAgICAgICAgZi0+bV9tbC0+bWxfbmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CisKKyN1bmRlZiBDSEVDS19SRVNVTFQKIH0KIAogLyogTWV0aG9kcyAodGhlIHN0YW5kYXJkIGJ1aWx0LWluIG1ldGhvZHMsIHRoYXQgaXMpICovCkBAIC0xMzUsMTQgKzE2MCw5NCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorbWV0aF9yZWR1Y2UoUHlDRnVuY3Rpb25PYmplY3QgKm0pCit7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIF9QeV9JREVOVElGSUVSKGdldGF0dHIpOworCisgICAgaWYgKG0tPm1fc2VsZiA9PSBOVUxMIHx8IFB5TW9kdWxlX0NoZWNrKG0tPm1fc2VsZikpCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhtLT5tX21sLT5tbF9uYW1lKTsKKworICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPcykiLCBnZXRhdHRyLCBtLT5tX3NlbGYsIG0tPm1fbWwtPm1sX25hbWUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbWV0aF9tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKW1ldGhfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCisvKgorICogZmluZHMgdGhlIGRvY3N0cmluZydzIGludHJvc3BlY3Rpb24gc2lnbmF0dXJlLgorICogaWYgcHJlc2VudCwgcmV0dXJucyBhIHBvaW50ZXIgcG9pbnRpbmcgdG8gdGhlIGZpcnN0ICcoJy4KKyAqIG90aGVyd2lzZSByZXR1cm5zIE5VTEwuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpmaW5kX3NpZ25hdHVyZShQeUNGdW5jdGlvbk9iamVjdCAqbSkKK3sKKyAgICBjb25zdCBjaGFyICp0cmFjZSA9IG0tPm1fbWwtPm1sX2RvYzsKKyAgICBjb25zdCBjaGFyICpuYW1lID0gbS0+bV9tbC0+bWxfbmFtZTsKKyAgICBzaXplX3QgbGVuZ3RoOworICAgIGlmICghdHJhY2UgfHwgIW5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGxlbmd0aCA9IHN0cmxlbihuYW1lKTsKKyAgICBpZiAoc3RybmNtcCh0cmFjZSwgbmFtZSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdHJhY2UgKz0gbGVuZ3RoOworICAgIGlmICgqdHJhY2UgIT0gJygnKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdHJhY2U7Cit9CisKKy8qCisgKiBza2lwcyB0byB0aGUgZW5kIG9mIHRoZSBkb2NzdHJpbmcncyBpbnN0cm9zcGVjdGlvbiBzaWduYXR1cmUuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpza2lwX3NpZ25hdHVyZShjb25zdCBjaGFyICp0cmFjZSkKK3sKKyAgICB3aGlsZSAoKnRyYWNlICYmICp0cmFjZSAhPSAnXG4nKQorICAgICAgICB0cmFjZSsrOworICAgIHJldHVybiB0cmFjZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfZW9scyhjb25zdCBjaGFyICp0cmFjZSkKK3sKKyAgICB3aGlsZSAoKnRyYWNlID09ICdcbicpCisgICAgICAgIHRyYWNlKys7CisgICAgcmV0dXJuIHRyYWNlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWV0aF9nZXRfX3RleHRfc2lnbmF0dXJlX18oUHlDRnVuY3Rpb25PYmplY3QgKm0sIHZvaWQgKmNsb3N1cmUpCit7CisgICAgY29uc3QgY2hhciAqc3RhcnQgPSBmaW5kX3NpZ25hdHVyZShtKTsKKyAgICBjb25zdCBjaGFyICp0cmFjZTsKKworICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICB0cmFjZSA9IHNraXBfc2lnbmF0dXJlKHN0YXJ0KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHN0YXJ0LCB0cmFjZSAtIHN0YXJ0KTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhfZ2V0X19kb2NfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBjb25zdCBjaGFyICpkb2MgPSBtLT5tX21sLT5tbF9kb2M7CisgICAgY29uc3QgY2hhciAqZG9jID0gZmluZF9zaWduYXR1cmUobSk7CiAKLSAgICBpZiAoZG9jICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBpZiAoZG9jKQorICAgICAgICBkb2MgPSBza2lwX2VvbHMoc2tpcF9zaWduYXR1cmUoZG9jKSk7CisgICAgZWxzZQorICAgICAgICBkb2MgPSBtLT5tX21sLT5tbF9kb2M7CisgICAgCisgICAgaWYgKCFkb2MpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoZG9jKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIxMSw2ICszMTYsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19uYW1lX18sIE5VTEwsIE5VTEx9LAogICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlciltZXRoX2dldF9fcXVhbG5hbWVfXywgTlVMTCwgTlVMTH0sCiAgICAgeyJfX3NlbGZfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3NlbGZfXywgTlVMTCwgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTMwOCw3ICs0MTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aF9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aF9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTM0NiwxNyArNDUyLDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5Q0Z1bmN0aW9uT2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeUNGdW5jdGlvbk9iamVjdCkpOwogfQotCi0vKiBQeUNGdW5jdGlvbl9OZXcoKSBpcyBub3cganVzdCBhIG1hY3JvIHRoYXQgY2FsbHMgUHlDRnVuY3Rpb25fTmV3RXgoKSwKLSAgIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIEFQSSBzbyB3ZSBuZWVkIHRvIGtlZXAgYSBmdW5jdGlvbiBhcm91bmQgdGhhdAotICAgZXhpc3RpbmcgQyBleHRlbnNpb25zIGNhbiBjYWxsLgotKi8KLQotI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKiwgUHlPYmplY3QgKik7Ci0KLVB5T2JqZWN0ICoKLVB5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmKQotewotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChtbCwgc2VsZiwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9PYmplY3RzL21vZHVsZW9iamVjdC5jIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwppbmRleCAyZjJiZDM2Li5kNTk0NzVlIDEwMDY0NAotLS0gYS9PYmplY3RzL21vZHVsZW9iamVjdC5jCisrKyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKQEAgLTExLDYgKzExLDggQEAKICAgICBQeU9iamVjdCAqbWRfZGljdDsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKm1kX2RlZjsKICAgICB2b2lkICptZF9zdGF0ZTsKKyAgICBQeU9iamVjdCAqbWRfd2Vha2xpc3Q7CisgICAgUHlPYmplY3QgKm1kX25hbWU7ICAvKiBmb3IgbG9nZ2luZyBwdXJwb3NlcyBhZnRlciBtZF9kaWN0IGlzIGNsZWFyZWQgKi8KIH0gUHlNb2R1bGVPYmplY3Q7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBtb2R1bGVfbWVtYmVyc1tdID0gewpAQCAtMjYsNiArMjgsMzUgQEAKIH07CiAKIAorc3RhdGljIGludAorbW9kdWxlX2luaXRfZGljdChQeU1vZHVsZU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbWRfZGljdCwKKyAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpkb2MpCit7CisgICAgaWYgKG1kX2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChkb2MgPT0gTlVMTCkKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2RvY19fIiwgZG9jKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3BhY2thZ2VfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbG9hZGVyX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3NwZWNfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobmFtZSkpIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZC0+bWRfbmFtZSk7CisgICAgICAgIG1vZC0+bWRfbmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwogUHlPYmplY3QgKgogUHlNb2R1bGVfTmV3T2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewpAQCAtMzUsMTQgKzY2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG0tPm1kX2RlZiA9IE5VTEw7CiAgICAgbS0+bWRfc3RhdGUgPSBOVUxMOworICAgIG0tPm1kX3dlYWtsaXN0ID0gTlVMTDsKKyAgICBtLT5tZF9uYW1lID0gTlVMTDsKICAgICBtLT5tZF9kaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmIChtLT5tZF9kaWN0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19kb2NfXyIsIFB5X05vbmUpICE9IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBtLT5tZF9kaWN0LCBuYW1lLCBOVUxMKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgUHlPYmplY3RfR0NfVHJhY2sobSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW07CkBAIC0zNDcsOSArMzc0LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgbS0+bWRfZGljdCA9IGRpY3Q7CiAgICAgfQotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19uYW1lX18iLCBuYW1lKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl9fZG9jX18iLCBkb2MpIDwgMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBkaWN0LCBuYW1lLCBkb2MpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQpAQCAtMzU4LDEyICszODMsMTUgQEAKIG1vZHVsZV9kZWFsbG9jKFB5TW9kdWxlT2JqZWN0ICptKQogewogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobSk7CisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIG0tPm1kX25hbWUpIHsKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGRlc3Ryb3kgJVNcbiIsIG0tPm1kX25hbWUpOworICAgIH0KKyAgICBpZiAobS0+bWRfd2Vha2xpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbSk7CiAgICAgaWYgKG0tPm1kX2RlZiAmJiBtLT5tZF9kZWYtPm1fZnJlZSkKICAgICAgICAgbS0+bWRfZGVmLT5tX2ZyZWUobSk7Ci0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIoKFB5T2JqZWN0ICopbSk7Ci0gICAgICAgIFB5X0RFQ1JFRihtLT5tZF9kaWN0KTsKLSAgICB9CisgICAgUHlfWERFQ1JFRihtLT5tZF9kaWN0KTsKKyAgICBQeV9YREVDUkVGKG0tPm1kX25hbWUpOwogICAgIGlmIChtLT5tZF9zdGF0ZSAhPSBOVUxMKQogICAgICAgICBQeU1lbV9GUkVFKG0tPm1kX3N0YXRlKTsKICAgICBQeV9UWVBFKG0pLT50cF9mcmVlKChQeU9iamVjdCAqKW0pOwpAQCAtMzcyLDU1ICs0MDAsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtb2R1bGVfcmVwcihQeU1vZHVsZU9iamVjdCAqbSkKIHsKLSAgICBQeU9iamVjdCAqbmFtZSwgKmZpbGVuYW1lLCAqcmVwciwgKmxvYWRlciA9IE5VTEw7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IHRzdGF0ZS0+aW50ZXJwOwogCi0gICAgLyogU2VlIGlmIHRoZSBtb2R1bGUgaGFzIGFuIF9fbG9hZGVyX18uICBJZiBpdCBkb2VzLCBnaXZlIHRoZSBsb2FkZXIgdGhlCi0gICAgICogZmlyc3Qgc2hvdCBhdCBwcm9kdWNpbmcgYSByZXByIGZvciB0aGUgbW9kdWxlLgotICAgICAqLwotICAgIGlmIChtLT5tZF9kaWN0ICE9IE5VTEwpIHsKLSAgICAgICAgbG9hZGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbG9hZGVyX18iKTsKLSAgICB9Ci0gICAgaWYgKGxvYWRlciAhPSBOVUxMKSB7Ci0gICAgICAgIHJlcHIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGxvYWRlciwgIm1vZHVsZV9yZXByIiwgIihPKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKW0sIE5VTEwpOwotICAgICAgICBpZiAocmVwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHJlcHI7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogX19sb2FkZXJfXy5tb2R1bGVfcmVwcihtKSBkaWQgbm90IHByb3ZpZGUgdXMgd2l0aCBhIHJlcHIuICBOZXh0LCBzZWUgaWYKLSAgICAgKiB0aGUgbW9kdWxlIGhhcyBhbiBfX2ZpbGVfXy4gIElmIGl0IGRvZXNuJ3QgdGhlbiB1c2UgcmVwcihfX2xvYWRlcl9fKSBpZgotICAgICAqIGl0IGV4aXN0cywgb3RoZXJ3aXNlLCBqdXN0IHVzZSBtb2R1bGUuX19uYW1lX18uCi0gICAgICovCi0gICAgbmFtZSA9IFB5TW9kdWxlX0dldE5hbWVPYmplY3QoKFB5T2JqZWN0ICopbSk7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCI/IiwgMSk7Ci0gICAgICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZmlsZW5hbWUgPSBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAvKiBUaGVyZSdzIG5vIG0uX19maWxlX18sIHNvIGlmIHRoZXJlIHdhcyBhbiBfX2xvYWRlcl9fLCB1c2UgdGhhdCBpbgotICAgICAgICAgKiB0aGUgcmVwciwgb3RoZXJ3aXNlLCB0aGUgb25seSB0aGluZyB5b3UgY2FuIHVzZSBpcyBtLl9fbmFtZV9fCi0gICAgICAgICAqLwotICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAlUj4iLCBuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAlUiAoJVIpPiIsIG5hbWUsIGxvYWRlcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyogRmluYWxseSwgdXNlIG0uX19maWxlX18gKi8KLSAgICBlbHNlIHsKLSAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSIGZyb20gJVI+IiwgbmFtZSwgZmlsZW5hbWUpOwotICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwotICAgIH0KLSAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmV0dXJuIHJlcHI7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoaW50ZXJwLT5pbXBvcnRsaWIsICJfbW9kdWxlX3JlcHIiLCAiTyIsIG0pOwogfQogCiBzdGF0aWMgaW50CkBAIC01MDksNyArNDkyLDcgQEAKICAgICAodHJhdmVyc2Vwcm9jKW1vZHVsZV90cmF2ZXJzZSwgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbW9kdWxlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YoUHlNb2R1bGVPYmplY3QsIG1kX3dlYWtsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtb2R1bGVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCmluZGV4IGZmMjc4ZDMuLjcyMGFjMGQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYwpAQCAtNDQsNyArNDQsNyBAQAogICAgIGlmIChhcmdzICE9IE5VTEwpIHsKICAgICAgICAgUHlfc3NpemVfdCBhcmdjb3VudCA9IFB5T2JqZWN0X1NpemUoYXJncyk7CiAgICAgICAgIGlmIChhcmdjb3VudCA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnY291bnQ7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGVsc2UgaWYgKGFyZ2NvdW50ID4gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIm5vIHBvc2l0aW9uYWwgYXJndW1lbnRzIGV4cGVjdGVkIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC02NiwxNiArNjYsMjAgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotbmFtZXNwYWNlX3JlcHIoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK25hbWVzcGFjZV9yZXByKFB5T2JqZWN0ICpucykKIHsKICAgICBpbnQgaSwgbG9vcF9lcnJvciA9IDA7CiAgICAgUHlPYmplY3QgKnBhaXJzID0gTlVMTCwgKmQgPSBOVUxMLCAqa2V5cyA9IE5VTEwsICprZXlzX2l0ZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKnNlcGFyYXRvciwgKnBhaXJzcmVwciwgKnJlcHIgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKiBuYW1lOwogCi0gICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QgKilucyk7CisgICAgbmFtZSA9IChQeV9UWVBFKG5zKSA9PSAmX1B5TmFtZXNwYWNlX1R5cGUpID8gIm5hbWVzcGFjZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBucy0+b2JfdHlwZS0+dHBfbmFtZTsKKworICAgIGkgPSBQeV9SZXByRW50ZXIobnMpOwogICAgIGlmIChpICE9IDApIHsKLSAgICAgICAgcmV0dXJuIGkgPiAwID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoIm5hbWVzcGFjZSguLi4pIikgOiBOVUxMOworICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoLi4uKSIsIG5hbWUpIDogTlVMTDsKICAgICB9CiAKICAgICBwYWlycyA9IFB5TGlzdF9OZXcoMCk7CkBAIC05Nyw3ICsxMDEsNyBAQAogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChrZXlzX2l0ZXIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeVVuaWNvZGVfR0VUX1NJWkUoa2V5KSA+IDApIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfTEVOR1RIKGtleSkgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUsICppdGVtOwogCiAgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGQsIGtleSk7CkBAIC0xMjcsOCArMTMxLDcgQEAKICAgICBpZiAocGFpcnNyZXByID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoUHlPYmplY3QgKilucyktPm9iX3R5cGUtPnRwX25hbWUsIHBhaXJzcmVwcik7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyglUykiLCBuYW1lLCBwYWlyc3JlcHIpOwogICAgIFB5X0RFQ1JFRihwYWlyc3JlcHIpOwogCiBlcnJvcjoKQEAgLTEzNiw3ICsxMzksNyBAQAogICAgIFB5X1hERUNSRUYoZCk7CiAgICAgUHlfWERFQ1JFRihrZXlzKTsKICAgICBQeV9YREVDUkVGKGtleXNfaXRlcik7Ci0gICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW5zKTsKKyAgICBQeV9SZXByTGVhdmUobnMpOwogCiAgICAgcmV0dXJuIHJlcHI7CiB9CkBAIC0xNTgsMTQgKzE2MSw0OSBAQAogfQogCiAKK3N0YXRpYyBQeU9iamVjdCAqCituYW1lc3BhY2VfcmljaGNvbXBhcmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlciwgaW50IG9wKQoreworICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKHNlbGYsIChQeU9iamVjdCAqKSZfUHlOYW1lc3BhY2VfVHlwZSkgJiYKKyAgICAgICAgICAgIFB5T2JqZWN0X0lzSW5zdGFuY2Uob3RoZXIsIChQeU9iamVjdCAqKSZfUHlOYW1lc3BhY2VfVHlwZSkpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZSgoKF9QeU5hbWVzcGFjZU9iamVjdCAqKXNlbGYpLT5uc19kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKF9QeU5hbWVzcGFjZU9iamVjdCAqKW90aGVyKS0+bnNfZGljdCwgb3ApOworICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CisgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworfQorCisKK1B5RG9jX1NUUlZBUihuYW1lc3BhY2VfcmVkdWNlX19kb2NfXywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yZWR1Y2UoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXJncyA9IFB5VHVwbGVfTmV3KDApOworCisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjaygzLCAoUHlPYmplY3QgKilQeV9UWVBFKG5zKSwgYXJncywgbnMtPm5zX2RpY3QpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBuYW1lc3BhY2VfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiluYW1lc3BhY2VfcmVkdWNlLCBNRVRIX05PQVJHUywKKyAgICAgbmFtZXNwYWNlX3JlZHVjZV9fZG9jX199LAorICAgIHtOVUxMLCAgICAgICAgIE5VTEx9ICAvKiBzZW50aW5lbCAqLworfTsKKworCiBQeURvY19TVFJWQVIobmFtZXNwYWNlX2RvYywKICJBIHNpbXBsZSBhdHRyaWJ1dGUtYmFzZWQgbmFtZXNwYWNlLlxuXAogXG5cCi1uYW1lc3BhY2UoKiprd2FyZ3MpIik7CitTaW1wbGVOYW1lc3BhY2UoKiprd2FyZ3MpIik7CiAKIFB5VHlwZU9iamVjdCBfUHlOYW1lc3BhY2VfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAgICJuYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJ0eXBlcy5TaW1wbGVOYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIHNpemVvZihfUHlOYW1lc3BhY2VPYmplY3QpLCAgICAgICAgICAgICAgICAgLyogdHBfc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAoZGVzdHJ1Y3RvciluYW1lc3BhY2VfZGVhbGxvYywgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTE4OCwxMSArMjI2LDExIEBACiAgICAgbmFtZXNwYWNlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKW5hbWVzcGFjZV90cmF2ZXJzZSwgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbmFtZXNwYWNlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBuYW1lc3BhY2VfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBuYW1lc3BhY2VfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBuYW1lc3BhY2VfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYmplY3QuYyBiL09iamVjdHMvb2JqZWN0LmMKaW5kZXggZTA3OWQ1MS4uNjJiZGI0OSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYmplY3QuYworKysgYi9PYmplY3RzL29iamVjdC5jCkBAIC04LDYgKzgsMTIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKFB5X1JlcHIpOworX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGlyX18pOworX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworCiAjaWZkZWYgUHlfUkVGX0RFQlVHCiBQeV9zc2l6ZV90IF9QeV9SZWZUb3RhbDsKIApAQCAtMjIsNyArMjgsNyBAQAogICAgIG8gPSBfUHlEaWN0X0R1bW15KCk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwotICAgIG8gPSBfUHlTZXRfRHVtbXkoKTsKKyAgICBvID0gX1B5U2V0X0R1bW15OwogICAgIGlmIChvICE9IE5VTEwpCiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CkBAIC0yNTUsNiArMjYxLDcyIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKIH0KIAordm9pZAorUHlPYmplY3RfQ2FsbEZpbmFsaXplcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShzZWxmKTsKKworICAgIC8qIFRoZSBmb3JtZXIgY291bGQgaGFwcGVuIG9uIGhlYXB0eXBlcyBjcmVhdGVkIGZyb20gdGhlIEMgQVBJLCBlLmcuCisgICAgICAgUHlUeXBlX0Zyb21TcGVjKCkuICovCisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSB8fAorICAgICAgICB0cC0+dHBfZmluYWxpemUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIHRwX2ZpbmFsaXplIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAqLworICAgIGlmIChQeVR5cGVfSVNfR0ModHApICYmIF9QeUdDX0ZJTkFMSVpFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHAtPnRwX2ZpbmFsaXplKHNlbGYpOworICAgIGlmIChQeVR5cGVfSVNfR0ModHApKQorICAgICAgICBfUHlHQ19TRVRfRklOQUxJWkVEKHNlbGYsIDEpOworfQorCitpbnQKK1B5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHJlZmNudDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgIT0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MgY2FsbGVkIG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHdpdGggYSBub24temVybyByZWZjb3VudCIpOworICAgIH0KKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiB0cF9maW5hbGl6ZSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisKKyAgICBpZiAoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpKSB7CisgICAgICAgIGFzc2VydChfUHlHQ19SRUZTKHNlbGYpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICB9CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgcmV0dXJuIC0xOworfQorCiBpbnQKIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvcCwgRklMRSAqZnAsIGludCBmbGFncykKIHsKQEAgLTM0MCwxMSArNDEyLDE3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWw7CiAjZW5kaWYKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9iamVjdCAgOiAiKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBnaWwgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAgICAgICAgICh2b2lkKVB5T2JqZWN0X1ByaW50KG9wLCBzdGRlcnIsIDApOworICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbCk7CiAjZW5kaWYKQEAgLTM3Nyw2ICs0NTUsMTQgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPm9iX3R5cGUtPnRwX25hbWUsIHYpOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9SZXByKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIHJlcyA9ICgqdi0+b2JfdHlwZS0+dHBfcmVwcikodik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQxOSw2ICs1MDUsMTMgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfc3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9SZXByKHYpOwogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9TdHIoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgLyogSXQgaXMgcG9zc2libGUgZm9yIGEgdHlwZSB0byBoYXZlIGEgdHBfc3RyIHJlcHJlc2VudGF0aW9uIHRoYXQgbG9vcHMKICAgICAgICBpbmZpbml0ZWx5LiAqLwogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSBzdHIgb2YgYW4gb2JqZWN0IikpCkBAIC00NTEsNiArNTQ0LDkgQEAKICAgICBpZiAocmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkocmVwcikpCisgICAgICAgIHJldHVybiByZXByOworCiAgICAgLyogcmVwciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgUHlVbmljb2RlIG9iamVjdCBieSBQeU9iamVjdF9SZXByICovCiAgICAgYXNjaWkgPSBfUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcocmVwciwgImJhY2tzbGFzaHJlcGxhY2UiKTsKICAgICBQeV9ERUNSRUYocmVwcik7CkBAIC00NzAsNyArNTY2LDYgQEAKIFB5T2JqZWN0X0J5dGVzKFB5T2JqZWN0ICp2KQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQsICpmdW5jOwotICAgIF9QeV9JREVOVElGSUVSKF9fYnl0ZXNfXyk7CiAKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCI8TlVMTD4iKTsKQEAgLTYzNiwxNTAgKzczMSw2IEBACiAgICAgcmV0dXJuIG9rOwogfQogCi0vKiBTZXQgb2YgaGFzaCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBoZWxwIG1haW50YWluaW5nIHRoZSBpbnZhcmlhbnQgdGhhdAotICAgIGlmIGE9PWIgdGhlbiBoYXNoKGEpPT1oYXNoKGIpCi0KLSAgIEFsbCB0aGUgdXRpbGl0eSBmdW5jdGlvbnMgKF9QeV9IYXNoKigpKSByZXR1cm4gIi0xIiB0byBzaWduaWZ5IGFuIGVycm9yLgotKi8KLQotLyogRm9yIG51bWVyaWMgdHlwZXMsIHRoZSBoYXNoIG9mIGEgbnVtYmVyIHggaXMgYmFzZWQgb24gdGhlIHJlZHVjdGlvbgotICAgb2YgeCBtb2R1bG8gdGhlIHByaW1lIFAgPSAyKipfUHlIQVNIX0JJVFMgLSAxLiAgSXQncyBkZXNpZ25lZCBzbyB0aGF0Ci0gICBoYXNoKHgpID09IGhhc2goeSkgd2hlbmV2ZXIgeCBhbmQgeSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwsIGV2ZW4gaWYKLSAgIHggYW5kIHkgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuCi0KLSAgIEEgcXVpY2sgc3VtbWFyeSBvZiB0aGUgaGFzaGluZyBzdHJhdGVneToKLQotICAgKDEpIEZpcnN0IGRlZmluZSB0aGUgJ3JlZHVjdGlvbiBvZiB4IG1vZHVsbyBQJyBmb3IgYW55IHJhdGlvbmFsCi0gICBudW1iZXIgeDsgdGhpcyBpcyBhIHN0YW5kYXJkIGV4dGVuc2lvbiBvZiB0aGUgdXN1YWwgbm90aW9uIG9mCi0gICByZWR1Y3Rpb24gbW9kdWxvIFAgZm9yIGludGVnZXJzLiAgSWYgeCA9PSBwL3EgKHdyaXR0ZW4gaW4gbG93ZXN0Ci0gICB0ZXJtcyksIHRoZSByZWR1Y3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlZHVjdGlvbiBvZiBwIHRpbWVzCi0gICB0aGUgaW52ZXJzZSBvZiB0aGUgcmVkdWN0aW9uIG9mIHEsIGFsbCBtb2R1bG8gUDsgaWYgcSBpcyBleGFjdGx5Ci0gICBkaXZpc2libGUgYnkgUCB0aGVuIGRlZmluZSB0aGUgcmVkdWN0aW9uIHRvIGJlIGluZmluaXR5LiAgU28gd2UndmUKLSAgIGdvdCBhIHdlbGwtZGVmaW5lZCBtYXAKLQotICAgICAgcmVkdWNlIDogeyByYXRpb25hbCBudW1iZXJzIH0gLT4geyAwLCAxLCAyLCAuLi4sIFAtMSwgaW5maW5pdHkgfS4KLQotICAgKDIpIE5vdyBmb3IgYSByYXRpb25hbCBudW1iZXIgeCwgZGVmaW5lIGhhc2goeCkgYnk6Ci0KLSAgICAgIHJlZHVjZSh4KSAgIGlmIHggPj0gMAotICAgICAgLXJlZHVjZSgteCkgaWYgeCA8IDAKLQotICAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uIGlzIGluZmluaXR5ICh0aGlzIGlzIGltcG9zc2libGUgZm9yCi0gICBpbnRlZ2VycywgZmxvYXRzIGFuZCBEZWNpbWFscykgdGhlbiB1c2UgdGhlIHByZWRlZmluZWQgaGFzaCB2YWx1ZQotICAgX1B5SEFTSF9JTkYgZm9yIHggPj0gMCwgb3IgLV9QeUhBU0hfSU5GIGZvciB4IDwgMCwgaW5zdGVhZC4KLSAgIF9QeUhBU0hfSU5GLCAtX1B5SEFTSF9JTkYgYW5kIF9QeUhBU0hfTkFOIGFyZSBhbHNvIHVzZWQgZm9yIHRoZQotICAgaGFzaGVzIG9mIGZsb2F0IGFuZCBEZWNpbWFsIGluZmluaXRpZXMgYW5kIG5hbnMuCi0KLSAgIEEgc2VsbGluZyBwb2ludCBmb3IgdGhlIGFib3ZlIHN0cmF0ZWd5IGlzIHRoYXQgaXQgbWFrZXMgaXQgcG9zc2libGUKLSAgIHRvIGNvbXB1dGUgaGFzaGVzIG9mIGRlY2ltYWwgYW5kIGJpbmFyeSBmbG9hdGluZy1wb2ludCBudW1iZXJzCi0gICBlZmZpY2llbnRseSwgZXZlbiBpZiB0aGUgZXhwb25lbnQgb2YgdGhlIGJpbmFyeSBvciBkZWNpbWFsIG51bWJlcgotICAgaXMgbGFyZ2UuICBUaGUga2V5IHBvaW50IGlzIHRoYXQKLQotICAgICAgcmVkdWNlKHggKiB5KSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoeSkgKG1vZHVsbyBfUHlIQVNIX01PRFVMVVMpCi0KLSAgIHByb3ZpZGVkIHRoYXQge3JlZHVjZSh4KSwgcmVkdWNlKHkpfSAhPSB7MCwgaW5maW5pdHl9LiAgVGhlIHJlZHVjdGlvbiBvZiBhCi0gICBiaW5hcnkgb3IgZGVjaW1hbCBmbG9hdCBpcyBuZXZlciBpbmZpbml0eSwgc2luY2UgdGhlIGRlbm9taW5hdG9yIGlzIGEgcG93ZXIKLSAgIG9mIDIgKGZvciBiaW5hcnkpIG9yIGEgZGl2aXNvciBvZiBhIHBvd2VyIG9mIDEwIChmb3IgZGVjaW1hbCkuICBTbyB3ZSBoYXZlLAotICAgZm9yIG5vbm5lZ2F0aXZlIHgsCi0KLSAgICAgIHJlZHVjZSh4ICogMioqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDIqKmUpICUgX1B5SEFTSF9NT0RVTFVTCi0KLSAgICAgIHJlZHVjZSh4ICogMTAqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgxMCoqZSkgJSBfUHlIQVNIX01PRFVMVVMKLQotICAgYW5kIHJlZHVjZSgxMCoqZSkgY2FuIGJlIGNvbXB1dGVkIGVmZmljaWVudGx5IGJ5IHRoZSB1c3VhbCBtb2R1bGFyCi0gICBleHBvbmVudGlhdGlvbiBhbGdvcml0aG0uICBGb3IgcmVkdWNlKDIqKmUpIGl0J3MgZXZlbiBiZXR0ZXI6IHNpbmNlCi0gICBQIGlzIG9mIHRoZSBmb3JtIDIqKm4tMSwgcmVkdWNlKDIqKmUpIGlzIDIqKihlIG1vZCBuKSwgYW5kIG11bHRpcGxpY2F0aW9uCi0gICBieSAyKiooZSBtb2QgbikgbW9kdWxvIDIqKm4tMSBqdXN0IGFtb3VudHMgdG8gYSByb3RhdGlvbiBvZiBiaXRzLgotCi0gICAqLwotCi1QeV9oYXNoX3QKLV9QeV9IYXNoRG91YmxlKGRvdWJsZSB2KQotewotICAgIGludCBlLCBzaWduOwotICAgIGRvdWJsZSBtOwotICAgIFB5X3VoYXNoX3QgeCwgeTsKLQotICAgIGlmICghUHlfSVNfRklOSVRFKHYpKSB7Ci0gICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2KSkKLSAgICAgICAgICAgIHJldHVybiB2ID4gMCA/IF9QeUhBU0hfSU5GIDogLV9QeUhBU0hfSU5GOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU47Ci0gICAgfQotCi0gICAgbSA9IGZyZXhwKHYsICZlKTsKLQotICAgIHNpZ24gPSAxOwotICAgIGlmIChtIDwgMCkgewotICAgICAgICBzaWduID0gLTE7Ci0gICAgICAgIG0gPSAtbTsKLSAgICB9Ci0KLSAgICAvKiBwcm9jZXNzIDI4IGJpdHMgYXQgYSB0aW1lOyAgdGhpcyBzaG91bGQgd29yayB3ZWxsIGJvdGggZm9yIGJpbmFyeQotICAgICAgIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gKi8KLSAgICB4ID0gMDsKLSAgICB3aGlsZSAobSkgewotICAgICAgICB4ID0gKCh4IDw8IDI4KSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSAyOCk7Ci0gICAgICAgIG0gKj0gMjY4NDM1NDU2LjA7ICAvKiAyKioyOCAqLwotICAgICAgICBlIC09IDI4OwotICAgICAgICB5ID0gKFB5X3VoYXNoX3QpbTsgIC8qIHB1bGwgb3V0IGludGVnZXIgcGFydCAqLwotICAgICAgICBtIC09IHk7Ci0gICAgICAgIHggKz0geTsKLSAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQotICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7Ci0gICAgfQotCi0gICAgLyogYWRqdXN0IGZvciB0aGUgZXhwb25lbnQ7ICBmaXJzdCByZWR1Y2UgaXQgbW9kdWxvIF9QeUhBU0hfQklUUyAqLwotICAgIGUgPSBlID49IDAgPyBlICUgX1B5SEFTSF9CSVRTIDogX1B5SEFTSF9CSVRTLTEtKCgtMS1lKSAlIF9QeUhBU0hfQklUUyk7Ci0gICAgeCA9ICgoeCA8PCBlKSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSBlKTsKLQotICAgIHggPSB4ICogc2lnbjsKLSAgICBpZiAoeCA9PSAoUHlfdWhhc2hfdCktMSkKLSAgICAgICAgeCA9IChQeV91aGFzaF90KS0yOwotICAgIHJldHVybiAoUHlfaGFzaF90KXg7Ci19Ci0KLVB5X2hhc2hfdAotX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCi17Ci0gICAgUHlfaGFzaF90IHg7Ci0gICAgc2l6ZV90IHkgPSAoc2l6ZV90KXA7Ci0gICAgLyogYm90dG9tIDMgb3IgNCBiaXRzIGFyZSBsaWtlbHkgdG8gYmUgMDsgcm90YXRlIHkgYnkgNCB0byBhdm9pZAotICAgICAgIGV4Y2Vzc2l2ZSBoYXNoIGNvbGxpc2lvbnMgZm9yIGRpY3RzIGFuZCBzZXRzICovCi0gICAgeSA9ICh5ID4+IDQpIHwgKHkgPDwgKDggKiBTSVpFT0ZfVk9JRF9QIC0gNCkpOwotICAgIHggPSAoUHlfaGFzaF90KXk7Ci0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKLSAgICByZXR1cm4geDsKLX0KLQotUHlfaGFzaF90Ci1fUHlfSGFzaEJ5dGVzKHVuc2lnbmVkIGNoYXIgKnAsIFB5X3NzaXplX3QgbGVuKQotewotICAgIFB5X3VoYXNoX3QgeDsKLSAgICBQeV9zc2l6ZV90IGk7Ci0KLSAgICAvKgotICAgICAgV2UgbWFrZSB0aGUgaGFzaCBvZiB0aGUgZW1wdHkgc3RyaW5nIGJlIDAsIHJhdGhlciB0aGFuIHVzaW5nCi0gICAgICAocHJlZml4IF4gc3VmZml4KSwgc2luY2UgdGhpcyBzbGlnaHRseSBvYmZ1c2NhdGVzIHRoZSBoYXNoIHNlY3JldAotICAgICovCi0jaWZkZWYgUHlfREVCVUcKLSAgICBhc3NlcnQoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpOwotI2VuZGlmCi0gICAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICB4ID0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LnByZWZpeDsKLSAgICB4IF49IChQeV91aGFzaF90KSAqcCA8PCA3OwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIChQeV91aGFzaF90KSAqcCsrOwotICAgIHggXj0gKFB5X3VoYXNoX3QpIGxlbjsKLSAgICB4IF49IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5zdWZmaXg7Ci0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKLSAgICByZXR1cm4geDsKLX0KLQogUHlfaGFzaF90CiBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQoUHlPYmplY3QgKnYpCiB7CkBAIC03ODgsOCArNzM5LDYgQEAKICAgICByZXR1cm4gLTE7CiB9CiAKLV9QeV9IYXNoU2VjcmV0X3QgX1B5X0hhc2hTZWNyZXQ7Ci0KIFB5X2hhc2hfdAogUHlPYmplY3RfSGFzaChQeU9iamVjdCAqdikKIHsKQEAgLTg1OSw3ICs4MDgsNiBAQAogewogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QqIGlzYWJzdHJhY3Q7Ci0gICAgX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOwogCiAgICAgaWYgKG9iaiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwMzIsOCArOTgwLDEyIEBACiBQeU9iamVjdCAqCiBfUHlPYmplY3RfR2V0QnVpbHRpbihjb25zdCBjaGFyICpuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2QsICphdHRyOwotICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiYnVpbHRpbnMiKTsKKyAgICBQeU9iamVjdCAqbW9kX25hbWUsICptb2QsICphdHRyOworCisgICAgbW9kX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9idWlsdGlucyk7ICAgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAobW9kX25hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlJbXBvcnRfSW1wb3J0KG1vZF9uYW1lKTsKICAgICBpZiAobW9kID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGF0dHIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG1vZCwgbmFtZSk7CkBAIC0xMzE3LDEyICsxMjY5LDExIEBACiBfZGlyX2xvY2Fscyh2b2lkKQogewogICAgIFB5T2JqZWN0ICpuYW1lczsKLSAgICBQeU9iamVjdCAqbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgIFB5T2JqZWN0ICpsb2NhbHM7CiAKLSAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKKyAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgaWYgKGxvY2FscyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICBuYW1lcyA9IFB5TWFwcGluZ19LZXlzKGxvY2Fscyk7CiAgICAgaWYgKCFuYW1lcykKQEAgLTEzNDcsNyArMTI5OCw2IEBACiBfZGlyX29iamVjdChQeU9iamVjdCAqb2JqKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQsICpzb3J0ZWQ7Ci0gICAgX1B5X0lERU5USUZJRVIoX19kaXJfXyk7CiAgICAgUHlPYmplY3QgKmRpcmZ1bmMgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvYmosICZQeUlkX19fZGlyX18pOwogCiAgICAgYXNzZXJ0KG9iaik7CkBAIC0xNTE1LDYgKzE0NjUsMTcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK05vdEltcGxlbWVudGVkX3JlZHVjZShQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOb3RJbXBsZW1lbnRlZCIpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbm90aW1wbGVtZW50ZWRfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilOb3RJbXBsZW1lbnRlZF9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCiBub3RpbXBsZW1lbnRlZF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSB8fCAoa3dhcmdzICYmIFB5RGljdF9TaXplKGt3YXJncykpKSB7CkBAIC0xNTI0LDEyICsxNDg1LDIxIEBACiAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwogfQogCitzdGF0aWMgdm9pZAorbm90aW1wbGVtZW50ZWRfZGVhbGxvYyhQeU9iamVjdCogaWdub3JlKQoreworICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGdldCBjYWxsZWQsIGJ1dCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gU0VHViBpZgorICAgICAqIHdlIGFjY2lkZW50YWxseSBkZWNyZWYgTm90SW1wbGVtZW50ZWQgb3V0IG9mIGV4aXN0ZW5jZS4KKyAgICAgKi8KKyAgICBQeV9GYXRhbEVycm9yKCJkZWFsbG9jYXRpbmcgTm90SW1wbGVtZW50ZWQiKTsKK30KKwogUHlUeXBlT2JqZWN0IF9QeU5vdEltcGxlbWVudGVkX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAiTm90SW1wbGVtZW50ZWRUeXBlIiwKICAgICAwLAogICAgIDAsCi0gICAgbm9uZV9kZWFsbG9jLCAgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCisgICAgbm90aW1wbGVtZW50ZWRfZGVhbGxvYywgICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KQEAgLTE1NTIsNyArMTUyMiw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyAqLworICAgIG5vdGltcGxlbWVudGVkX21ldGhvZHMsIC8qdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlICovCkBAIC0xNjk5LDE1ICsxNjY5LDYgQEAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1lbWJlckRlc2NyX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBtZW1iZXIgZGVzY3JpcHRvciB0eXBlIik7CiAKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUZpbHRlcl9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgZmlsdGVyIHR5cGUiKTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5TWFwX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBtYXAgdHlwZSIpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlaaXBfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIHppcCB0eXBlIik7Ci0KICAgICBpZiAoUHlUeXBlX1JlYWR5KCZfUHlOYW1lc3BhY2VfVHlwZSkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIG5hbWVzcGFjZSB0eXBlIik7CiAKQEAgLTE3NDksMTAgKzE3MTAsMTAgQEAKIH0KIAogdm9pZAotX1B5X0ZvcmdldFJlZmVyZW5jZShyZWdpc3RlciBQeU9iamVjdCAqb3ApCitfUHlfRm9yZ2V0UmVmZXJlbmNlKFB5T2JqZWN0ICpvcCkKIHsKICNpZmRlZiBTTE9XX1VOUkVGX0NIRUNLCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnA7CisgICAgUHlPYmplY3QgKnA7CiAjZW5kaWYKICAgICBpZiAob3AtPm9iX3JlZmNudCA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlVOUkVGIG5lZ2F0aXZlIHJlZmNudCIpOwpAQCAtMTg1NiwyNiArMTgxNyw2IEBACiBQeV9zc2l6ZV90ICgqX1B5X2Fic3RyYWN0X2hhY2spKFB5T2JqZWN0ICopID0gUHlPYmplY3RfU2l6ZTsKIAogCi0vKiBQeXRob24ncyBtYWxsb2Mgd3JhcHBlcnMgKHNlZSBweW1lbS5oKSAqLwotCi12b2lkICoKLVB5TWVtX01hbGxvYyhzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBQeU1lbV9NQUxMT0MobmJ5dGVzKTsKLX0KLQotdm9pZCAqCi1QeU1lbV9SZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIFB5TWVtX1JFQUxMT0MocCwgbmJ5dGVzKTsKLX0KLQotdm9pZAotUHlNZW1fRnJlZSh2b2lkICpwKQotewotICAgIFB5TWVtX0ZSRUUocCk7Ci19Ci0KIHZvaWQKIF9QeU9iamVjdF9EZWJ1Z1R5cGVTdGF0cyhGSUxFICpvdXQpCiB7CkBAIC0xODg1LDcgKzE4MjYsNiBAQAogICAgIF9QeUZyYW1lX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKICAgICBfUHlMaXN0X0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKICAgICBfUHlNZXRob2RfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwotICAgIF9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5VHVwbGVfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogfQogCkBAIC0xOTAxLDggKzE4NDEsNiBAQAogICAgU2VlIGRpY3RvYmplY3QuYyBhbmQgbGlzdG9iamVjdC5jIGZvciBleGFtcGxlcyBvZiB1c2UuCiAqLwogCi0jZGVmaW5lIEtFWSAiUHlfUmVwciIKLQogaW50CiBQeV9SZXByRW50ZXIoUHlPYmplY3QgKm9iaikKIHsKQEAgLTE5MTMsMTIgKzE4NTEsMTIgQEAKICAgICBkaWN0ID0gUHlUaHJlYWRTdGF0ZV9HZXREaWN0KCk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgbGlzdCA9IF9QeURpY3RfR2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIpOwogICAgIGlmIChsaXN0ID09IE5VTEwpIHsKICAgICAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBLRVksIGxpc3QpIDwgMCkKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIsIGxpc3QpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgIH0KQEAgLTE5MjcsNyArMTg2NSw4IEBACiAgICAgICAgIGlmIChQeUxpc3RfR0VUX0lURU0obGlzdCwgaSkgPT0gb2JqKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgb2JqKTsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTM3LDEzICsxODc2LDE4IEBACiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKIAogICAgIGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKworICAgIGxpc3QgPSBfUHlEaWN0X0dldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByKTsKICAgICBpZiAobGlzdCA9PSBOVUxMIHx8ICFQeUxpc3RfQ2hlY2sobGlzdCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKICAgICAvKiBDb3VudCBiYWNrd2FyZHMgYmVjYXVzZSB3ZSBhbHdheXMgZXhwZWN0IG9iaiB0byBiZSBsaXN0Wy0xXSAqLwogICAgIHdoaWxlICgtLWkgPj0gMCkgewpAQCAtMTk1Miw2ICsxODk2LDEwIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworZmluYWxseToKKyAgICAvKiBpZ25vcmUgZXhjZXB0aW9ucyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgdGhlbS4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwogfQogCiAvKiBUcmFzaGNhbiBzdXBwb3J0LiAqLwpAQCAtMTk3Miw3ICsxOTIwLDcgQEAKIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0KFB5T2JqZWN0ICpvcCkKIHsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKV9QeVRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICBfUHlUcmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKQEAgLTE5ODQsNyArMTkzMiw3IEBACiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKSB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IG9wOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYm1hbGxvYy5jIGIvT2JqZWN0cy9vYm1hbGxvYy5jCmluZGV4IGMyNjFiNjguLjAwNGNmYWEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JtYWxsb2MuYworKysgYi9PYmplY3RzL29ibWFsbG9jLmMKQEAgLTEsMTQgKzEsMzc0IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNpZmRlZiBXSVRIX1BZTUFMTE9DCisvKiBQeXRob24ncyBtYWxsb2Mgd3JhcHBlcnMgKHNlZSBweW1lbS5oKSAqLwogCi0jaWZkZWYgSEFWRV9NTUFQCi0gI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0gI2lmZGVmIE1BUF9BTk9OWU1PVVMKLSAgI2RlZmluZSBBUkVOQVNfVVNFX01NQVAKKyNpZmRlZiBQWU1BTExPQ19ERUJVRyAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgUFlNQUxMT0NfREVCVUcgKi8KKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworCitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhjaGFyIGFwaV9pZCwgY29uc3Qgdm9pZCAqcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkgIC8qIENsYW5nICovCisgI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpICAvKiBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKKyAjZW5kaWYKKyNlbHNlCisgI2lmIGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pICAvKiBHQ0MgNC44LngsIGlzIEFTQU4gZW5hYmxlZD8gKi8KKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fKChub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpcykpIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAjZWxzZQorICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUwogICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTU1BUCkKKyMgIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjICBpZmRlZiBNQVBfQU5PTllNT1VTCisjICAgIGRlZmluZSBBUkVOQVNfVVNFX01NQVAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9SZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fUmF3TWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgLyogUHlNZW1fTWFsbG9jKDApIG1lYW5zIG1hbGxvYygxKS4gU29tZSBzeXN0ZW1zIHdvdWxkIHJldHVybiBOVUxMCisgICAgICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMgd291bGQKKyAgICAgICByZXR1cm4gYSBwb2ludGVyIHdpdGggbm8gbWVtb3J5IGJlaGluZCBpdCwgd2hpY2ggd291bGQgYnJlYWsgcHltYWxsb2MuCisgICAgICAgVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlNZW1fUmF3RnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBWaXJ0dWFsQWxsb2MoTlVMTCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIFZpcnR1YWxGcmVlKHB0ciwgMCwgTUVNX1JFTEVBU0UpOworfQorCisjZWxpZiBkZWZpbmVkKEFSRU5BU19VU0VfTU1BUCkKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYU1tYXAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHI7CisgICAgcHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyAgICBpZiAocHRyID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzc2VydChwdHIgIT0gTlVMTCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYU11bm1hcCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgbXVubWFwKHB0ciwgc2l6ZSk7Cit9CisKKyNlbHNlCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hRnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgZnJlZShwdHIpOworfQorI2VuZGlmCisKKworI2RlZmluZSBQWVJBV19GVU5DUyBfUHlNZW1fUmF3TWFsbG9jLCBfUHlNZW1fUmF3UmVhbGxvYywgX1B5TWVtX1Jhd0ZyZWUKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisjICBkZWZpbmUgUFlPQkpfRlVOQ1MgX1B5T2JqZWN0X01hbGxvYywgX1B5T2JqZWN0X1JlYWxsb2MsIF9QeU9iamVjdF9GcmVlCisjZWxzZQorIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyNkZWZpbmUgUFlNRU1fRlVOQ1MgUFlSQVdfRlVOQ1MKKworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCisgICAgY2hhciBhcGlfaWQ7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7Cit9IGRlYnVnX2FsbG9jX2FwaV90Oworc3RhdGljIHN0cnVjdCB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgcmF3OworICAgIGRlYnVnX2FsbG9jX2FwaV90IG1lbTsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBvYmo7Cit9IF9QeU1lbV9EZWJ1ZyA9IHsKKyAgICB7J3InLCB7TlVMTCwgUFlSQVdfRlVOQ1N9fSwKKyAgICB7J20nLCB7TlVMTCwgUFlNRU1fRlVOQ1N9fSwKKyAgICB7J28nLCB7TlVMTCwgUFlPQkpfRlVOQ1N9fQorICAgIH07CisKKyNkZWZpbmUgUFlEQkdfRlVOQ1MgX1B5TWVtX0RlYnVnTWFsbG9jLCBfUHlNZW1fRGVidWdSZWFsbG9jLCBfUHlNZW1fRGVidWdGcmVlCisjZW5kaWYKKworc3RhdGljIFB5TWVtQWxsb2NhdG9yIF9QeU1lbV9SYXcgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLnJhdywgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlSQVdfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW0gPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm1lbSwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlNRU1fRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlPYmplY3QgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm9iaiwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlPQkpfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKKyN1bmRlZiBQWVJBV19GVU5DUworI3VuZGVmIFBZTUVNX0ZVTkNTCisjdW5kZWYgUFlPQkpfRlVOQ1MKKyN1bmRlZiBQWURCR19GVU5DUworCitzdGF0aWMgUHlPYmplY3RBcmVuYUFsbG9jYXRvciBfUHlPYmplY3RfQXJlbmEgPSB7TlVMTCwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEFsbG9jLCBfUHlPYmplY3RfQXJlbmFWaXJ0dWFsRnJlZQorI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCisgICAgX1B5T2JqZWN0X0FyZW5hTW1hcCwgX1B5T2JqZWN0X0FyZW5hTXVubWFwCisjZWxzZQorICAgIF9QeU9iamVjdF9BcmVuYU1hbGxvYywgX1B5T2JqZWN0X0FyZW5hRnJlZQorI2VuZGlmCisgICAgfTsKKwordm9pZAorUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCit7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIGFsbG9jLm1hbGxvYyA9IF9QeU1lbV9EZWJ1Z01hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gX1B5TWVtX0RlYnVnUmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gX1B5TWVtX0RlYnVnRnJlZTsKKworICAgIGlmIChfUHlNZW1fUmF3Lm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5yYXc7CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmX1B5TWVtX0RlYnVnLnJhdy5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlNZW0ubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm1lbTsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZfUHlNZW1fRGVidWcubWVtLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvYyk7CisgICAgfQorCisgICAgaWYgKF9QeU9iamVjdC5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcub2JqOworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJl9QeU1lbV9EZWJ1Zy5vYmouYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZAorUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6ICphbGxvY2F0b3IgPSBfUHlNZW1fUmF3OyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06ICphbGxvY2F0b3IgPSBfUHlNZW07IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogKmFsbG9jYXRvciA9IF9QeU9iamVjdDsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdW5rbm93biBkb21haW4gKi8KKyAgICAgICAgYWxsb2NhdG9yLT5jdHggPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPm1hbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+cmVhbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+ZnJlZSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkCitQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogX1B5TWVtX1JhdyA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogX1B5TWVtID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBfUHlPYmplY3QgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICAvKiBpZ25vcmUgdW5rbm93biBkb21haW4gKi8KKyAgICB9CisKK30KKwordm9pZAorUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgICphbGxvY2F0b3IgPSBfUHlPYmplY3RfQXJlbmE7Cit9CisKK3ZvaWQKK1B5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBfUHlPYmplY3RfQXJlbmEgPSAqYWxsb2NhdG9yOworfQorCit2b2lkICoKK1B5TWVtX1Jhd01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKgorICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgorICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCisgICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCisgICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3Igc2l6ZSA8IDAgaXMgbm90IHJlcXVpcmVkLgorICAgICAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5tYWxsb2MoX1B5TWVtX1Jhdy5jdHgsIHNpemUpOworfQorCit2b2lkKgorUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5yZWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW1fUmF3LmZyZWUoX1B5TWVtX1Jhdy5jdHgsIHB0cik7Cit9CisKK3ZvaWQgKgorUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5tYWxsb2MoX1B5TWVtLmN0eCwgc2l6ZSk7Cit9CisKK3ZvaWQgKgorUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtLnJlYWxsb2MoX1B5TWVtLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQKK1B5TWVtX0ZyZWUodm9pZCAqcHRyKQoreworICAgIF9QeU1lbS5mcmVlKF9QeU1lbS5jdHgsIHB0cik7Cit9CisKK2NoYXIgKgorX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY2hhciAqCitfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpjb3B5OworCisgICAgc2l6ZSA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbWNweShjb3B5LCBzdHIsIHNpemUpOworICAgIHJldHVybiBjb3B5OworfQorCit2b2lkICoKK1B5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QubWFsbG9jKF9QeU9iamVjdC5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU9iamVjdC5yZWFsbG9jKF9QeU9iamVjdC5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU9iamVjdF9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlPYmplY3QuZnJlZShfUHlPYmplY3QuY3R4LCBwdHIpOworfQorCisKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KIApAQCAtNTI1LDYgKzg4NSwxNSBAQAogLyogSGlnaCB3YXRlciBtYXJrIChtYXggdmFsdWUgZXZlciBzZWVuKSBmb3IgbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkLiAqLwogc3RhdGljIHNpemVfdCBuYXJlbmFzX2hpZ2h3YXRlciA9IDA7CiAKK3N0YXRpYyBQeV9zc2l6ZV90IF9QeV9BbGxvY2F0ZWRCbG9ja3MgPSAwOworCitQeV9zc2l6ZV90CitfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpCit7CisgICAgcmV0dXJuIF9QeV9BbGxvY2F0ZWRCbG9ja3M7Cit9CisKKwogLyogQWxsb2NhdGUgYSBuZXcgYXJlbmEuICBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSwgcmV0dXJuIE5VTEwuICBFbHNlCiAgKiBhbGxvY2F0ZSBhIG5ldyBhcmVuYSwgYW5kIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhbiBhcmVuYV9vYmplY3QKICAqIGRlc2NyaWJpbmcgdGhlIG5ldyBhcmVuYS4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgY2FsbGVyIHdpbGwgc2V0CkBAIC01MzYsNyArOTA1LDYgQEAKICAgICBzdHJ1Y3QgYXJlbmFfb2JqZWN0KiBhcmVuYW9iajsKICAgICB1aW50IGV4Y2VzczsgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBhYm92ZSBwb29sIGFsaWdubWVudCAqLwogICAgIHZvaWQgKmFkZHJlc3M7Ci0gICAgaW50IGVycjsKIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCiAgICAgaWYgKFB5X0dFVEVOVigiUFlUSE9OTUFMTE9DU1RBVFMiKSkKQEAgLTU1OCw3ICs5MjYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIG92ZXJmbG93ICovCiAjZW5kaWYKICAgICAgICAgbmJ5dGVzID0gbnVtYXJlbmFzICogc2l6ZW9mKCphcmVuYXMpOwotICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopcmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CisgICAgICAgIGFyZW5hb2JqID0gKHN0cnVjdCBhcmVuYV9vYmplY3QgKilQeU1lbV9SYXdSZWFsbG9jKGFyZW5hcywgbmJ5dGVzKTsKICAgICAgICAgaWYgKGFyZW5hb2JqID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgYXJlbmFzID0gYXJlbmFvYmo7CkBAIC01ODksMTUgKzk1Nyw4IEBACiAgICAgYXJlbmFvYmogPSB1bnVzZWRfYXJlbmFfb2JqZWN0czsKICAgICB1bnVzZWRfYXJlbmFfb2JqZWN0cyA9IGFyZW5hb2JqLT5uZXh0YXJlbmE7CiAgICAgYXNzZXJ0KGFyZW5hb2JqLT5hZGRyZXNzID09IDApOwotI2lmZGVmIEFSRU5BU19VU0VfTU1BUAotICAgIGFkZHJlc3MgPSBtbWFwKE5VTEwsIEFSRU5BX1NJWkUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gTUFQX0ZBSUxFRCk7Ci0jZWxzZQotICAgIGFkZHJlc3MgPSBtYWxsb2MoQVJFTkFfU0laRSk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gMCk7Ci0jZW5kaWYKLSAgICBpZiAoZXJyKSB7CisgICAgYWRkcmVzcyA9IF9QeU9iamVjdF9BcmVuYS5hbGxvYyhfUHlPYmplY3RfQXJlbmEuY3R4LCBBUkVOQV9TSVpFKTsKKyAgICBpZiAoYWRkcmVzcyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIFRoZSBhbGxvY2F0aW9uIGZhaWxlZDogcmV0dXJuIE5VTEwgYWZ0ZXIgcHV0dGluZyB0aGUKICAgICAgICAgICogYXJlbmFvYmogYmFjay4KICAgICAgICAgICovCkBAIC03NjAsMTUgKzExMjEsMTYgQEAKICAqIFVubGVzcyB0aGUgb3B0aW1pemVyIHJlb3JkZXJzIGV2ZXJ5dGhpbmcsIGJlaW5nIHRvbyBzbWFydC4uLgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9NYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICBibG9jayAqYnA7CiAgICAgcG9vbHAgcG9vbDsKICAgICBwb29scCBuZXh0OwogICAgIHVpbnQgc2l6ZTsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MrKzsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA9PSAtMSkpCiAgICAgICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBSVU5OSU5HX09OX1ZBTEdSSU5EOwpAQCAtNzc3LDE1ICsxMTM5LDYgQEAKICNlbmRpZgogCiAgICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgogICAgICAqIFRoaXMgaW1wbGljaXRseSByZWRpcmVjdHMgbWFsbG9jKDApLgogICAgICAqLwogICAgIGlmICgobmJ5dGVzIC0gMSkgPCBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCkgewpAQCAtOTAxLDYgKzEyNTQsNyBAQAogICAgICAgICAgICAgICAgICAqIGFuZCBmcmVlIGxpc3QgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgYnAgPSBwb29sLT5mcmVlYmxvY2s7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGJwICE9IE5VTEwpOwogICAgICAgICAgICAgICAgIHBvb2wtPmZyZWVibG9jayA9ICooYmxvY2sgKiopYnA7CiAgICAgICAgICAgICAgICAgVU5MT0NLKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYnA7CkBAIC05NTYsMTYgKzEzMTAsMTkgQEAKICAgICAgKiBsYXN0IGNoYW5jZSB0byBzZXJ2ZSB0aGUgcmVxdWVzdCkgb3Igd2hlbiB0aGUgbWF4IG1lbW9yeSBsaW1pdAogICAgICAqIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAgICovCi0gICAgaWYgKG5ieXRlcyA9PSAwKQotICAgICAgICBuYnl0ZXMgPSAxOwotICAgIHJldHVybiAodm9pZCAqKW1hbGxvYyhuYnl0ZXMpOworICAgIHsKKyAgICAgICAgdm9pZCAqcmVzdWx0ID0gUHlNZW1fUmF3TWFsbG9jKG5ieXRlcyk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgX1B5X0FsbG9jYXRlZEJsb2Nrcy0tOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH0KIAogLyogZnJlZSAqLwogCi0jdW5kZWYgUHlPYmplY3RfRnJlZQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKQogewogICAgIHBvb2xwIHBvb2w7CiAgICAgYmxvY2sgKmxhc3RmcmVlOwpAQCAtOTc4LDYgKzEzMzUsOCBAQAogICAgIGlmIChwID09IE5VTEwpICAgICAgLyogZnJlZShOVUxMKSBoYXMgbm8gZWZmZWN0ICovCiAgICAgICAgIHJldHVybjsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA+IDApKQogICAgICAgICBnb3RvIHJlZGlyZWN0OwpAQCAtMTA3MiwxMSArMTQzMSw4IEBACiAgICAgICAgICAgICAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhbzsKIAogICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGVudGlyZSBhcmVuYS4gKi8KLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICAgICAgICAgICAgICBtdW5tYXAoKHZvaWQgKilhby0+YWRkcmVzcywgQVJFTkFfU0laRSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilhby0+YWRkcmVzcyk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBfUHlPYmplY3RfQXJlbmEuZnJlZShfUHlPYmplY3RfQXJlbmEuY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwogICAgICAgICAgICAgICAgIGFvLT5hZGRyZXNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXJrIHVuYXNzb2NpYXRlZCAqLwogICAgICAgICAgICAgICAgIC0tbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkOwogCkBAIC0xMTg1LDcgKzE1NDEsNyBAQAogcmVkaXJlY3Q6CiAjZW5kaWYKICAgICAvKiBXZSBkaWRuJ3QgYWxsb2NhdGUgdGhpcyBhZGRyZXNzLiAqLwotICAgIGZyZWUocCk7CisgICAgUHlNZW1fUmF3RnJlZShwKTsKIH0KIAogLyogcmVhbGxvYy4gIElmIHAgaXMgTlVMTCwgdGhpcyBhY3RzIGxpa2UgbWFsbG9jKG5ieXRlcykuICBFbHNlIGlmIG5ieXRlcz09MCwKQEAgLTExOTMsOSArMTU0OSw5IEBACiAgKiByZXR1cm4gYSBub24tTlVMTCByZXN1bHQuCiAgKi8KIAotI3VuZGVmIFB5T2JqZWN0X1JlYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgdm9pZCAqYnA7CiAgICAgcG9vbHAgcG9vbDsKQEAgLTEyMDUsMTYgKzE1NjEsNyBAQAogI2VuZGlmCiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfTWFsbG9jKG5ieXRlcyk7Ci0KLSAgICAvKgotICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgotICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCi0gICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCi0gICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3IgbmJ5dGVzIDwgMCBpcyBub3QgcmVxdWlyZWQuCi0gICAgICovCi0gICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogCiAjaWZkZWYgV0lUSF9WQUxHUklORAogICAgIC8qIFRyZWF0IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEgdGhlIHNhbWUgYXMgMCAqLwpAQCAtMTI0MiwxMCArMTU4OSwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZSA9IG5ieXRlczsKICAgICAgICAgfQotICAgICAgICBicCA9IFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOworICAgICAgICBicCA9IF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogICAgICAgICBpZiAoYnAgIT0gTlVMTCkgewogICAgICAgICAgICAgbWVtY3B5KGJwLCBwLCBzaXplKTsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUocCk7CisgICAgICAgICAgICBfUHlPYmplY3RfRnJlZShjdHgsIHApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBicDsKICAgICB9CkBAIC0xMjYzLDE0ICsxNjEwLDE0IEBACiAgICAgICogYXQgcC4gIEluc3RlYWQgd2UgcHVudDogIGxldCBDIGNvbnRpbnVlIHRvIG1hbmFnZSB0aGlzIGJsb2NrLgogICAgICAqLwogICAgIGlmIChuYnl0ZXMpCi0gICAgICAgIHJldHVybiByZWFsbG9jKHAsIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBQeU1lbV9SYXdSZWFsbG9jKHAsIG5ieXRlcyk7CiAgICAgLyogQyBkb2Vzbid0IGRlZmluZSB0aGUgcmVzdWx0IG9mIHJlYWxsb2MocCwgMCkgKGl0IG1heSBvciBtYXkgbm90CiAgICAgICogcmV0dXJuIE5VTEwgdGhlbiksIGJ1dCBQeXRob24ncyBkb2NzIHByb21pc2UgdGhhdCBuYnl0ZXM9PTAgbmV2ZXIKICAgICAgKiByZXR1cm5zIE5VTEwuICBXZSBkb24ndCBwYXNzIDAgdG8gcmVhbGxvYygpLCB0byBhdm9pZCB0aGF0IGVuZGNhc2UKICAgICAgKiB0byBiZWdpbiB3aXRoLiAgRXZlbiB0aGVuLCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQgcmVhbGxvYygpIHdvbid0CiAgICAgICogcmV0dXJuIE5VTEwuCiAgICAgICovCi0gICAgYnAgPSByZWFsbG9jKHAsIDEpOworICAgIGJwID0gUHlNZW1fUmF3UmVhbGxvYyhwLCAxKTsKICAgICByZXR1cm4gYnAgPyBicCA6IHA7CiB9CiAKQEAgLTEyODAsMjMgKzE2MjcsMTIgQEAKIC8qIHB5bWFsbG9jIG5vdCBlbmFibGVkOiAgUmVkaXJlY3QgdGhlIGVudHJ5IHBvaW50cyB0byBtYWxsb2MuICBUaGVzZSB3aWxsCiAgKiBvbmx5IGJlIHVzZWQgYnkgZXh0ZW5zaW9ucyB0aGF0IGFyZSBjb21waWxlZCB3aXRoIHB5bWFsbG9jIGVuYWJsZWQuICovCiAKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuKQorUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQogewotICAgIHJldHVybiBQeU1lbV9NQUxMT0Mobik7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKLXsKLSAgICByZXR1cm4gUHlNZW1fUkVBTExPQyhwLCBuKTsKLX0KLQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQotewotICAgIFB5TWVtX0ZSRUUocCk7Ci19CiAjZW5kaWYgLyogV0lUSF9QWU1BTExPQyAqLwogCiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKQEAgLTEzMTYsMTAgKzE2NTIsNiBAQAogI2RlZmluZSBERUFEQllURSAgICAgICAweERCICAgIC8qIGRlYWQgKG5ld2x5IGZyZWVkKSBtZW1vcnkgKi8KICNkZWZpbmUgRk9SQklEREVOQllURSAgMHhGQiAgICAvKiB1bnRvdWNoYWJsZSBieXRlcyBhdCBlYWNoIGVuZCBvZiBhIGJsb2NrICovCiAKLS8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLwotI2RlZmluZSBfUFlNQUxMT0NfTUVNX0lEICdtJyAgIC8qIHRoZSBQeU1lbV9NYWxsb2MoKSBBUEkgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX09CSl9JRCAnbycgICAvKiBUaGUgUHlPYmplY3RfTWFsbG9jKCkgQVBJICovCi0KIHN0YXRpYyBzaXplX3Qgc2VyaWFsbm8gPSAwOyAgICAgLyogaW5jcmVtZW50ZWQgb24gZWFjaCBkZWJ1ZyB7bSxyZX1hbGxvYyAqLwogCiAvKiBzZXJpYWxubyBpcyBhbHdheXMgaW5jcmVtZW50ZWQgdmlhIGNhbGxpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHBvaW50IGlzCkBAIC0xMzkyLDcgKzE3MjQsOSBAQAogcFswOiBTXQogICAgIE51bWJlciBvZiBieXRlcyBvcmlnaW5hbGx5IGFza2VkIGZvci4gIFRoaXMgaXMgYSBzaXplX3QsIGJpZy1lbmRpYW4gKGVhc2llcgogICAgIHRvIHJlYWQgaW4gYSBtZW1vcnkgZHVtcCkuCi1wW1M6IDIqU10KK3BbU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwW1MrMTogMipTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCB1bmRlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMipTOiAyKlMrbl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURS4KQEAgLTE0MDIsNTggKzE3MzYsMTggQEAKIHBbMipTK246IDIqUytuK1NdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIG92ZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUytuK1M6IDIqUytuKzIqU10KLSAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwotICAgIGFuZCBfUHlPYmplY3RfRGVidWdSZWFsbG9jLgorICAgIEEgc2VyaWFsIG51bWJlciwgaW5jcmVtZW50ZWQgYnkgMSBvbiBlYWNoIGNhbGwgdG8gX1B5TWVtX0RlYnVnTWFsbG9jCisgICAgYW5kIF9QeU1lbV9EZWJ1Z1JlYWxsb2MuCiAgICAgVGhpcyBpcyBhIGJpZy1lbmRpYW4gc2l6ZV90LgogICAgIElmICJiYWQgbWVtb3J5IiBpcyBkZXRlY3RlZCBsYXRlciwgdGhlIHNlcmlhbCBudW1iZXIgZ2l2ZXMgYW4KICAgICBleGNlbGxlbnQgd2F5IHRvIHNldCBhIGJyZWFrcG9pbnQgb24gdGhlIG5leHQgcnVuLCB0byBjYXB0dXJlIHRoZQogICAgIGluc3RhbnQgYXQgd2hpY2ggdGhpcyBibG9jayB3YXMgcGFzc2VkIG91dC4KICovCiAKLS8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5TWVtXyogbWVtb3J5IEFQSSAqLwotdm9pZCAqCi1fUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19NRU1fSUQsIHApOwotfQotCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU9iamVjdF8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotCi0KLS8qIGdlbmVyaWMgZGVidWcgbWVtb3J5IGFwaSwgd2l0aCBhbiAiaWQiIHRvIGlkZW50aWZ5IHRoZSBBUEkgaW4gdXNlICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGlkLCBzaXplX3QgbmJ5dGVzKQoteworICAgIGRlYnVnX2FsbG9jX2FwaV90ICphcGkgPSAoZGVidWdfYWxsb2NfYXBpX3QgKiljdHg7CiAgICAgdWNoYXIgKnA7ICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3Mgb2YgbWFsbG9jJ2VkIGJsb2NrICovCiAgICAgdWNoYXIgKnRhaWw7ICAgICAgICAvKiBwICsgMipTU1QgKyBuYnl0ZXMgPT0gcG9pbnRlciB0byB0YWlsIHBhZCBieXRlcyAqLwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KQEAgLTE0NjQsMTQgKzE3NTgsMTQgQEAKICAgICAgICAgLyogb3ZlcmZsb3c6ICBjYW4ndCByZXByZXNlbnQgdG90YWwgYXMgYSBzaXplX3QgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBwID0gKHVjaGFyICopUHlPYmplY3RfTWFsbG9jKHRvdGFsKTsKKyAgICBwID0gKHVjaGFyICopYXBpLT5hbGxvYy5tYWxsb2MoYXBpLT5hbGxvYy5jdHgsIHRvdGFsKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGF0IHAsIHdyaXRlIHNpemUgKFNTVCBieXRlcyksIGlkICgxIGJ5dGUpLCBwYWQgKFNTVC0xIGJ5dGVzKSAqLwogICAgIHdyaXRlX3NpemVfdChwLCBuYnl0ZXMpOwotICAgIHBbU1NUXSA9ICh1Y2hhcilpZDsKLSAgICBtZW1zZXQocCArIFNTVCArIDEgLCBGT1JCSURERU5CWVRFLCBTU1QtMSk7CisgICAgcFtTU1RdID0gKHVjaGFyKWFwaS0+YXBpX2lkOworICAgIG1lbXNldChwICsgU1NUICsgMSwgRk9SQklEREVOQllURSwgU1NULTEpOwogCiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChwICsgMipTU1QsIENMRUFOQllURSwgbmJ5dGVzKTsKQEAgLTE0ODksMzUgKzE3ODMsMzcgQEAKICAgIFRoZW4gZmlsbHMgdGhlIG9yaWdpbmFsIGJ5dGVzIHdpdGggREVBREJZVEUuCiAgICBUaGVuIGNhbGxzIHRoZSB1bmRlcmx5aW5nIGZyZWUuCiAqLwotdm9pZAotX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShjaGFyIGFwaSwgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpxID0gKHVjaGFyICopcCAtIDIqU1NUOyAgLyogYWRkcmVzcyByZXR1cm5lZCBmcm9tIG1hbGxvYyAqLwogICAgIHNpemVfdCBuYnl0ZXM7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBuYnl0ZXMgPSByZWFkX3NpemVfdChxKTsKICAgICBuYnl0ZXMgKz0gNCpTU1Q7CiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChxLCBERUFEQllURSwgbmJ5dGVzKTsKLSAgICBQeU9iamVjdF9GcmVlKHEpOworICAgIGFwaS0+YWxsb2MuZnJlZShhcGktPmFsbG9jLmN0eCwgcSk7CiB9CiAKLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewotICAgIHVjaGFyICpxID0gKHVjaGFyICopcDsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OworICAgIHVjaGFyICpxID0gKHVjaGFyICopcCwgKm9sZHE7CiAgICAgdWNoYXIgKnRhaWw7CiAgICAgc2l6ZV90IHRvdGFsOyAgICAgICAvKiBuYnl0ZXMgKyA0KlNTVCAqLwogICAgIHNpemVfdCBvcmlnaW5hbF9uYnl0ZXM7CiAgICAgaW50IGk7CiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGFwaSwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU1lbV9EZWJ1Z01hbGxvYyhjdHgsIG5ieXRlcyk7CiAKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKKyAgICBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoYXBpLT5hcGlfaWQsIHApOwogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIG9yaWdpbmFsX25ieXRlcyA9IHJlYWRfc2l6ZV90KHEgLSAyKlNTVCk7CiAgICAgdG90YWwgPSBuYnl0ZXMgKyA0KlNTVDsKQEAgLTE1MjUsMjQgKzE4MjEsMjYgQEAKICAgICAgICAgLyogb3ZlcmZsb3c6ICBjYW4ndCByZXByZXNlbnQgdG90YWwgYXMgYSBzaXplX3QgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobmJ5dGVzIDwgb3JpZ2luYWxfbmJ5dGVzKSB7Ci0gICAgICAgIC8qIHNocmlua2luZzogIG1hcmsgb2xkIGV4dHJhIG1lbW9yeSBkZWFkICovCi0gICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzICsgMipTU1QpOwotICAgIH0KLQogICAgIC8qIFJlc2l6ZSBhbmQgYWRkIGRlY29yYXRpb25zLiBXZSBtYXkgZ2V0IGEgbmV3IHBvaW50ZXIgaGVyZSwgaW4gd2hpY2gKICAgICAgKiBjYXNlIHdlIGRpZG4ndCBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIHRoZSBvbGQgbWVtb3J5IHdpdGggREVBREJZVEUsCiAgICAgICogYnV0IHdlIGxpdmUgd2l0aCB0aGF0LgogICAgICAqLwotICAgIHEgPSAodWNoYXIgKilQeU9iamVjdF9SZWFsbG9jKHEgLSAyKlNTVCwgdG90YWwpOworICAgIG9sZHEgPSBxOworICAgIHEgPSAodWNoYXIgKilhcGktPmFsbG9jLnJlYWxsb2MoYXBpLT5hbGxvYy5jdHgsIHEgLSAyKlNTVCwgdG90YWwpOwogICAgIGlmIChxID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKHEgPT0gb2xkcSAmJiBuYnl0ZXMgPCBvcmlnaW5hbF9uYnl0ZXMpIHsKKyAgICAgICAgLyogc2hyaW5raW5nOiAgbWFyayBvbGQgZXh0cmEgbWVtb3J5IGRlYWQgKi8KKyAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMpOworICAgIH0KKwogICAgIHdyaXRlX3NpemVfdChxLCBuYnl0ZXMpOwotICAgIGFzc2VydChxW1NTVF0gPT0gKHVjaGFyKWFwaSk7CisgICAgYXNzZXJ0KHFbU1NUXSA9PSAodWNoYXIpYXBpLT5hcGlfaWQpOwogICAgIGZvciAoaSA9IDE7IGkgPCBTU1Q7ICsraSkKICAgICAgICAgYXNzZXJ0KHFbU1NUICsgaV0gPT0gRk9SQklEREVOQllURSk7CiAgICAgcSArPSAyKlNTVDsKKwogICAgIHRhaWwgPSBxICsgbmJ5dGVzOwogICAgIG1lbXNldCh0YWlsLCBGT1JCSURERU5CWVRFLCBTU1QpOwogICAgIHdyaXRlX3NpemVfdCh0YWlsICsgU1NULCBzZXJpYWxubyk7CkBAIC0xNTYxLDggKzE4NTksOCBAQAogICogYW5kIGNhbGwgUHlfRmF0YWxFcnJvciB0byBraWxsIHRoZSBwcm9ncmFtLgogICogVGhlIEFQSSBpZCwgaXMgYWxzbyBjaGVja2VkLgogICovCi0gdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKQorc3RhdGljIHZvaWQKK19QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhjaGFyIGFwaSwgY29uc3Qgdm9pZCAqcCkKIHsKICAgICBjb25zdCB1Y2hhciAqcSA9IChjb25zdCB1Y2hhciAqKXA7CiAgICAgY2hhciBtc2didWZbNjRdOwpAQCAtMTYxNCw3ICsxOTEyLDcgQEAKIH0KIAogLyogRGlzcGxheSBpbmZvIHRvIHN0ZGVyciBhYm91dCB0aGUgbWVtb3J5IGJsb2NrIGF0IHAuICovCi12b2lkCitzdGF0aWMgdm9pZAogX1B5T2JqZWN0X0RlYnVnRHVtcEFkZHJlc3MoY29uc3Qgdm9pZCAqcCkKIHsKICAgICBjb25zdCB1Y2hhciAqcSA9IChjb25zdCB1Y2hhciAqKXA7CmRpZmYgLS1naXQgYS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKaW5kZXggZDc5MGNhOC4uYTRkOWZiMyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jCisrKyBiL09iamVjdHMvcmFuZ2VvYmplY3QuYwpAQCAtMzE4LDE5NSArMzE4LDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBBZGRpdGlvbmFsIGhlbHBlcnMsIHNpbmNlIHRoZSBzdGFuZGFyZCBzbGljZSBoZWxwZXJzCi0gKiBhbGwgY2xpcCB0byBQWV9TU0laRV9UX01BWAotICovCi0KLS8qIFJlcGxhY2UgX1B5RXZhbF9TbGljZUluZGV4ICovCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcHV0ZV9zbGljZV9lbGVtZW50KFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaWYgKG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUluZGV4X0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX0luZGV4KG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIFJlcGxhY2UgUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAqICAgUmVzdWx0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2xpY2UgaXMgZW1wdHkKLSAqICAgICgtMSA9IGVycm9yLCAwID0gZW1wdHkgc2xpY2UsIDEgPSBzbGljZSBjb250YWlucyBlbGVtZW50cykKLSAqLwotc3RhdGljIGludAotY29tcHV0ZV9zbGljZV9pbmRpY2VzKHJhbmdlb2JqZWN0ICpyLCBQeVNsaWNlT2JqZWN0ICpzbGljZSwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0LCBQeU9iamVjdCAqKnN0b3AsIFB5T2JqZWN0ICoqc3RlcCkKLXsKLSAgICBpbnQgY21wX3Jlc3VsdCwgaGFzX2VsZW1lbnRzOwotICAgIFB5X3NzaXplX3QgY2xhbXBlZF9zdGVwID0gMDsKLSAgICBQeU9iamVjdCAqemVybyA9IE5VTEwsICpvbmUgPSBOVUxMLCAqbmVnX29uZSA9IE5VTEwsICpjYW5kaWRhdGUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0bXBfc3RhcnQgPSBOVUxMLCAqdG1wX3N0b3AgPSBOVUxMLCAqdG1wX3N0ZXAgPSBOVUxMOwotICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKHplcm8gPT0gTlVMTCkgZ290byBGYWlsOwotICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKLSAgICBpZiAob25lID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBuZWdfb25lID0gUHlMb25nX0Zyb21Mb25nKC0xKTsKLSAgICBpZiAobmVnX29uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RlcCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RlcCA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGNsYW1wZWRfc3RlcCA9IDE7Ci0gICAgICAgIHRtcF9zdGVwID0gb25lOwotICAgICAgICBQeV9JTkNSRUYodG1wX3N0ZXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghX1B5RXZhbF9TbGljZUluZGV4KHNsaWNlLT5zdGVwLCAmY2xhbXBlZF9zdGVwKSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwID09IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICBnb3RvIEZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wX3N0ZXAgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0ZXApOwotICAgICAgICBpZiAodG1wX3N0ZXAgPT0gTlVMTCkgZ290byBGYWlsOwotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdGFydCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RhcnQgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0YXJ0KTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9BZGQoci0+bGVuZ3RoLCBjYW5kaWRhdGUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdGFydCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IG5lZ19vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0YXJ0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA+PSAwICovCi0gICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHItPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2FsY3VsYXRlIHN0b3AgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0b3AgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0b3ApOwotICAgICAgICBpZiAoY2FuZGlkYXRlID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjYW5kaWRhdGUsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA8IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgY2FuZGlkYXRlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdG9wLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RvcCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdG9wKTsKLSAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RvcCA+PSByLT5sZW5ndGggKi8KLSAgICAgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgaWYgdGhlIHNsaWNlIGlzIGVtcHR5IG9yIG5vdCAqLwotICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9HVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGFzX2VsZW1lbnRzID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgdG1wX3N0b3AsIFB5X0xUKTsKLSAgICB9Ci0gICAgaWYgKGhhc19lbGVtZW50cyA9PSAtMSkgZ290byBGYWlsOwotCi0gICAgKnN0YXJ0ID0gdG1wX3N0YXJ0OwotICAgICpzdG9wID0gdG1wX3N0b3A7Ci0gICAgKnN0ZXAgPSB0bXBfc3RlcDsKLSAgICBQeV9ERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfREVDUkVGKG9uZSk7Ci0gICAgUHlfREVDUkVGKHplcm8pOwotICAgIHJldHVybiBoYXNfZWxlbWVudHM7Ci0KLSAgRmFpbDoKLSAgICBQeV9YREVDUkVGKHRtcF9zdGFydCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RvcCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RlcCk7Ci0gICAgUHlfWERFQ1JFRihjYW5kaWRhdGUpOwotICAgIFB5X1hERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfWERFQ1JFRihvbmUpOwotICAgIFB5X1hERUNSRUYoemVybyk7Ci0gICAgcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcHV0ZV9zbGljZShyYW5nZW9iamVjdCAqciwgUHlPYmplY3QgKl9zbGljZSkKIHsKQEAgLTUxNCwxMCArMzI1LDExIEBACiAgICAgcmFuZ2VvYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqc3RhcnQgPSBOVUxMLCAqc3RvcCA9IE5VTEwsICpzdGVwID0gTlVMTDsKICAgICBQeU9iamVjdCAqc3Vic3RhcnQgPSBOVUxMLCAqc3Vic3RvcCA9IE5VTEwsICpzdWJzdGVwID0gTlVMTDsKLSAgICBpbnQgaGFzX2VsZW1lbnRzOworICAgIGludCBlcnJvcjsKIAotICAgIGhhc19lbGVtZW50cyA9IGNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyLCBzbGljZSwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOwotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIHJldHVybiBOVUxMOworICAgIGVycm9yID0gX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoc2xpY2UsIHItPmxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIGlmIChlcnJvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzdWJzdGVwID0gUHlOdW1iZXJfTXVsdGlwbHkoci0+c3RlcCwgc3RlcCk7CiAgICAgaWYgKHN1YnN0ZXAgPT0gTlVMTCkgZ290byBmYWlsOwpAQCAtNTI3LDEzICszMzksOCBAQAogICAgIGlmIChzdWJzdGFydCA9PSBOVUxMKSBnb3RvIGZhaWw7CiAgICAgUHlfQ0xFQVIoc3RhcnQpOwogCi0gICAgaWYgKGhhc19lbGVtZW50cykgewotICAgICAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOwotICAgICAgICBpZiAoc3Vic3RvcCA9PSBOVUxMKSBnb3RvIGZhaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3Vic3RvcCA9IHN1YnN0YXJ0OwotICAgICAgICBQeV9JTkNSRUYoc3Vic3RvcCk7Ci0gICAgfQorICAgIHN1YnN0b3AgPSBjb21wdXRlX2l0ZW0ociwgc3RvcCk7CisgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0b3ApOwogCiAgICAgcmVzdWx0ID0gbWFrZV9yYW5nZV9vYmplY3QoUHlfVFlQRShyKSwgc3Vic3RhcnQsIHN1YnN0b3AsIHN1YnN0ZXApOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zZXRvYmplY3QuYyBiL09iamVjdHMvc2V0b2JqZWN0LmMKaW5kZXggZWE1YTI0Yy4uYWRjOTlkYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zZXRvYmplY3QuYworKysgYi9PYmplY3RzL3NldG9iamVjdC5jCkBAIC0xLDE1NCArMSwxMjEgQEAKIAogLyogc2V0IG9iamVjdCBpbXBsZW1lbnRhdGlvbgorCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KICAgIERlcml2ZWQgZnJvbSBMaWIvc2V0cy5weSBhbmQgT2JqZWN0cy9kaWN0b2JqZWN0LmMuCiAKLSAgIENvcHlyaWdodCAoYykgMjAwMy0yMDA4IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMTMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGUgYmFzaWMgbG9va3VwIGZ1bmN0aW9uIHVzZWQgYnkgYWxsIG9wZXJhdGlvbnMuCisgICBUaGlzIGlzIGJhc2VkIG9uIEFsZ29yaXRobSBEIGZyb20gS251dGggVm9sLiAzLCBTZWMuIDYuNC4KKworICAgVGhlIGluaXRpYWwgcHJvYmUgaW5kZXggaXMgY29tcHV0ZWQgYXMgaGFzaCBtb2QgdGhlIHRhYmxlIHNpemUuCisgICBTdWJzZXF1ZW50IHByb2JlIGluZGljZXMgYXJlIGNvbXB1dGVkIGFzIGV4cGxhaW5lZCBpbiBPYmplY3RzL2RpY3RvYmplY3QuYy4KKworICAgVG8gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSwgZWFjaCBwcm9iZSBpbnNwZWN0cyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZQorICAgbmVhcmJ5IGVudHJpZXMgYmVmb3JlIG1vdmluZyBvbiB0byBwcm9iZXMgZWxzZXdoZXJlIGluIG1lbW9yeS4gIFRoaXMgbGVhdmVzCisgICB1cyB3aXRoIGEgaHlicmlkIG9mIGxpbmVhciBwcm9iaW5nIGFuZCBvcGVuIGFkZHJlc3NpbmcuICBUaGUgbGluZWFyIHByb2JpbmcKKyAgIHJlZHVjZXMgdGhlIGNvc3Qgb2YgaGFzaCBjb2xsaXNpb25zIGJlY2F1c2UgY29uc2VjdXRpdmUgbWVtb3J5IGFjY2Vzc2VzCisgICB0ZW5kIHRvIGJlIG11Y2ggY2hlYXBlciB0aGFuIHNjYXR0ZXJlZCBwcm9iZXMuICBBZnRlciBMSU5FQVJfUFJPQkVTIHN0ZXBzLAorICAgd2UgdGhlbiB1c2Ugb3BlbiBhZGRyZXNzaW5nIHdpdGggdGhlIHVwcGVyIGJpdHMgZnJvbSB0aGUgaGFzaCB2YWx1ZS4gIFRoaXMKKyAgIGhlbHBzIGJyZWFrLXVwIGxvbmcgY2hhaW5zIG9mIGNvbGxpc2lvbnMuCisKKyAgIEFsbCBhcml0aG1ldGljIG9uIGhhc2ggc2hvdWxkIGlnbm9yZSBvdmVyZmxvdy4KKworICAgVW5saWtlIHRoZSBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9uLCB0aGUgbG9va2tleSBmdW5jdGlvbnMgY2FuIHJldHVybgorICAgTlVMTCBpZiB0aGUgcmljaCBjb21wYXJpc29uIHJldHVybnMgYW4gZXJyb3IuCiAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2VxLmgiCiAKLS8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKLSAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCi0gKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwotc3RhdGljIHZvaWQKLXNldF9rZXlfZXJyb3IoUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqdHVwOwotICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOwotICAgIGlmICghdHVwKQotICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCi0gICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOwotICAgIFB5X0RFQ1JFRih0dXApOwotfQorLyogT2JqZWN0IHVzZWQgYXMgZHVtbXkga2V5IHRvIGZpbGwgZGVsZXRlZCBlbnRyaWVzICovCitzdGF0aWMgUHlPYmplY3QgX2R1bW15X3N0cnVjdDsKIAotLyogVGhpcyBtdXN0IGJlID49IDEuICovCisjZGVmaW5lIGR1bW15ICgmX2R1bW15X3N0cnVjdCkKKworLyogRXhwb3J0ZWQgZm9yIHRoZSBnZGIgcGx1Z2luJ3MgYmVuZWZpdC4gKi8KK1B5T2JqZWN0ICpfUHlTZXRfRHVtbXkgPSBkdW1teTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT0gQmVnaW4gbG9naWMgZm9yIHByb2JpbmcgdGhlIGhhc2ggdGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisvKiBTZXQgdGhpcyB0byB6ZXJvIHRvIHR1cm4tb2ZmIGxpbmVhciBwcm9iaW5nICovCisjaWZuZGVmIExJTkVBUl9QUk9CRVMKKyNkZWZpbmUgTElORUFSX1BST0JFUyA5CisjZW5kaWYKKworLyogVGhpcyBtdXN0IGJlID49IDEgKi8KICNkZWZpbmUgUEVSVFVSQl9TSElGVCA1CiAKLS8qIE9iamVjdCB1c2VkIGFzIGR1bW15IGtleSB0byBmaWxsIGRlbGV0ZWQgZW50cmllcyAqLwotc3RhdGljIFB5T2JqZWN0ICpkdW1teSA9IE5VTEw7IC8qIEluaXRpYWxpemVkIGJ5IGZpcnN0IGNhbGwgdG8gbWFrZV9uZXdfc2V0KCkgKi8KLQotI2lmZGVmIFB5X1JFRl9ERUJVRwotUHlPYmplY3QgKgotX1B5U2V0X0R1bW15KHZvaWQpCi17Ci0gICAgcmV0dXJuIGR1bW15OwotfQotI2VuZGlmCi0KLSNkZWZpbmUgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+dGFibGUgPSAoc28pLT5zbWFsbHRhYmxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT5oYXNoID0gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotCi0jZGVmaW5lIEVNUFRZX1RPX01JTlNJWkUoc28pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIG1lbXNldCgoc28pLT5zbWFsbHRhYmxlLCAwLCBzaXplb2YoKHNvKS0+c21hbGx0YWJsZSkpOyAgICAgIFwKLSAgICAoc28pLT51c2VkID0gKHNvKS0+ZmlsbCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLQotLyogUmV1c2Ugc2NoZW1lIHRvIHNhdmUgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBhbmQgbWVtc2V0ICovCi0jaWZuZGVmIFB5U2V0X01BWEZSRUVMSVNUCi0jZGVmaW5lIFB5U2V0X01BWEZSRUVMSVNUIDgwCi0jZW5kaWYKLXN0YXRpYyBQeVNldE9iamVjdCAqZnJlZV9saXN0W1B5U2V0X01BWEZSRUVMSVNUXTsKLXN0YXRpYyBpbnQgbnVtZnJlZSA9IDA7Ci0KLQotLyoKLVRoZSBiYXNpYyBsb29rdXAgZnVuY3Rpb24gdXNlZCBieSBhbGwgb3BlcmF0aW9ucy4KLVRoaXMgaXMgYmFzZWQgb24gQWxnb3JpdGhtIEQgZnJvbSBLbnV0aCBWb2wuIDMsIFNlYy4gNi40LgotT3BlbiBhZGRyZXNzaW5nIGlzIHByZWZlcnJlZCBvdmVyIGNoYWluaW5nIHNpbmNlIHRoZSBsaW5rIG92ZXJoZWFkIGZvcgotY2hhaW5pbmcgd291bGQgYmUgc3Vic3RhbnRpYWwgKDEwMCUgd2l0aCB0eXBpY2FsIG1hbGxvYyBvdmVyaGVhZCkuCi0KLVRoZSBpbml0aWFsIHByb2JlIGluZGV4IGlzIGNvbXB1dGVkIGFzIGhhc2ggbW9kIHRoZSB0YWJsZSBzaXplLiBTdWJzZXF1ZW50Ci1wcm9iZSBpbmRpY2VzIGFyZSBjb21wdXRlZCBhcyBleHBsYWluZWQgaW4gT2JqZWN0cy9kaWN0b2JqZWN0LmMuCi0KLUFsbCBhcml0aG1ldGljIG9uIGhhc2ggc2hvdWxkIGlnbm9yZSBvdmVyZmxvdy4KLQotVW5saWtlIHRoZSBkaWN0aW9uYXJ5IGltcGxlbWVudGF0aW9uLCB0aGUgbG9va2tleSBmdW5jdGlvbnMgY2FuIHJldHVybgotTlVMTCBpZiB0aGUgcmljaCBjb21wYXJpc29uIHJldHVybnMgYW4gZXJyb3IuCi0qLwotCiBzdGF0aWMgc2V0ZW50cnkgKgotc2V0X2xvb2trZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKK3NldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwotICAgIHJlZ2lzdGVyIGludCBjbXA7Ci0gICAgUHlPYmplY3QgKnN0YXJ0a2V5OworICAgIHNldGVudHJ5ICpmcmVlc2xvdCA9IE5VTEw7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IHNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOyAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBzaXplX3QgajsKKyAgICBpbnQgY21wOwogCi0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCB8fCBlbnRyeS0+a2V5ID09IGtleSkKKyAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIGVudHJ5OwogCi0gICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpCi0gICAgICAgIGZyZWVzbG90ID0gZW50cnk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoKSB7Ci0gICAgICAgICAgICBzdGFydGtleSA9IGVudHJ5LT5rZXk7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnRrZXkgPSBlbnRyeS0+a2V5OwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOwogICAgICAgICAgICAgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFibGUgPT0gc28tPnRhYmxlICYmIGVudHJ5LT5rZXkgPT0gc3RhcnRrZXkpIHsKKyAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydGtleSA9IGVudHJ5LT5rZXk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKKyAgICAgICAgICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnRrZXksIGtleSwgUHlfRVEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7CisgICAgICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGlmICh0YWJsZSAhPSBzby0+dGFibGUgfHwgZW50cnktPmtleSAhPSBzdGFydGtleSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldF9sb29ra2V5KHNvLCBrZXksIGhhc2gpOwogICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgY29tcGFyZSBkaWQgbWFqb3IgbmFzdHkgc3R1ZmYgdG8gdGhlCi0gICAgICAgICAgICAgICAgICogc2V0OiAgc3RhcnQgb3Zlci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZXNsb3QgPSBOVUxMOwotICAgIH0KIAotICAgIC8qIEluIHRoZSBsb29wLCBrZXkgPT0gZHVtbXkgaXMgYnkgZmFyIChmYWN0b3Igb2YgMTAwcykgdGhlCi0gICAgICAgbGVhc3QgbGlrZWx5IG91dGNvbWUsIHNvIHRlc3QgZm9yIHRoYXQgbGFzdC4gKi8KLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyA7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOworICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKwogICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChmcmVlc2xvdCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGVudHJ5ID0gZnJlZXNsb3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgZW50cnktPmtleSAhPSBkdW1teSkgewotICAgICAgICAgICAgc3RhcnRrZXkgPSBlbnRyeS0+a2V5OwotICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXJ0a2V5KTsKLSAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnRrZXkpOwotICAgICAgICAgICAgaWYgKGNtcCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAodGFibGUgPT0gc28tPnRhYmxlICYmIGVudHJ5LT5rZXkgPT0gc3RhcnRrZXkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY21wID4gMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgY29tcGFyZSBkaWQgbWFqb3IgbmFzdHkgc3R1ZmYgdG8gdGhlCi0gICAgICAgICAgICAgICAgICogc2V0OiAgc3RhcnQgb3Zlci4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQotICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKICAgICB9Ci0gICAgcmV0dXJuIGVudHJ5OworICBmb3VuZF9udWxsOgorICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKIH0KIAogLyoKQEAgLTE1NywxNCArMTI0LDE1IEBACiAgKiBzZWUgaWYgdGhlIGNvbXBhcmlzb24gYWx0ZXJlZCB0aGUgdGFibGUuCiAgKi8KIHN0YXRpYyBzZXRlbnRyeSAqCi1zZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCitzZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZnJlZXNsb3Q7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSBzby0+bWFzazsKICAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICpmcmVlc2xvdCA9IE5VTEw7CisgICAgc2V0ZW50cnkgKmVudHJ5OworICAgIHNpemVfdCBwZXJ0dXJiID0gaGFzaDsKKyAgICBzaXplX3QgbWFzayA9IHNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOworICAgIHNpemVfdCBqOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtMTc0LDQ2ICsxNDIsOTQgQEAKICAgICAgICAgc28tPmxvb2t1cCA9IHNldF9sb29ra2V5OwogICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CiAgICAgfQotICAgIGkgPSAoc2l6ZV90KWhhc2ggJiBtYXNrOwotICAgIGVudHJ5ID0gJnRhYmxlW2ldOwotICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgfHwgZW50cnktPmtleSA9PSBrZXkpCi0gICAgICAgIHJldHVybiBlbnRyeTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSkKLSAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2ggJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKQotICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICBmcmVlc2xvdCA9IE5VTEw7Ci0gICAgfQogCi0gICAgLyogSW4gdGhlIGxvb3AsIGtleSA9PSBkdW1teSBpcyBieSBmYXIgKGZhY3RvciBvZiAxMDBzKSB0aGUKLSAgICAgICBsZWFzdCBsaWtlbHkgb3V0Y29tZSwgc28gdGVzdCBmb3IgdGhhdCBsYXN0LiAqLwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7Ci0gICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBmcmVlc2xvdCA9PSBOVUxMID8gZW50cnkgOiBmcmVlc2xvdDsKKyAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgd2hpbGUgKDEpIHsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0ga2V5CiAgICAgICAgICAgICB8fCAoZW50cnktPmhhc2ggPT0gaGFzaAotICAgICAgICAgICAgJiYgZW50cnktPmtleSAhPSBkdW1teQotICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKKyAgICAgICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15CisgICAgICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkKKyAgICAgICAgICAgICAgICB8fCAoZW50cnktPmhhc2ggPT0gaGFzaAorICAgICAgICAgICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15CisgICAgICAgICAgICAgICAgICAgICYmIHVuaWNvZGVfZXEoZW50cnktPmtleSwga2V5KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkgJiYgZnJlZXNsb3QgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworICAgICAgICB9CisKKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwogICAgIH0KLSAgICBhc3NlcnQoMCk7ICAgICAgICAgIC8qIE5PVCBSRUFDSEVEICovCi0gICAgcmV0dXJuIDA7CisgIGZvdW5kX251bGw6CisgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OwogfQogCiAvKgorSW50ZXJuYWwgcm91dGluZSB1c2VkIGJ5IHNldF90YWJsZV9yZXNpemUoKSB0byBpbnNlcnQgYW4gaXRlbSB3aGljaCBpcwora25vd24gdG8gYmUgYWJzZW50IGZyb20gdGhlIHNldC4gIFRoaXMgcm91dGluZSBhbHNvIGFzc3VtZXMgdGhhdAordGhlIHNldCBjb250YWlucyBubyBkZWxldGVkIGVudHJpZXMuICBCZXNpZGVzIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0LAordXNpbmcgc2V0X2luc2VydF9jbGVhbigpIGluIHNldF90YWJsZV9yZXNpemUoKSBpcyBkYW5nZXJvdXMgKFNGIGJ1ZyAjMTQ1NjIwOSkuCitOb3RlIHRoYXQgbm8gcmVmY291bnRzIGFyZSBjaGFuZ2VkIGJ5IHRoaXMgcm91dGluZTsgaWYgbmVlZGVkLCB0aGUgY2FsbGVyCitpcyByZXNwb25zaWJsZSBmb3IgaW5jcmVmJ2luZyBga2V5YC4KKyovCitzdGF0aWMgdm9pZAorc2V0X2luc2VydF9jbGVhbihQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQoreworICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKKyAgICBzaXplX3QgaSA9IChzaXplX3QpaGFzaDsKKyAgICBzaXplX3QgajsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgZm9yIChqID0gMSA7IGogPD0gTElORUFSX1BST0JFUyA7IGorKykgeworICAgICAgICAgICAgZW50cnkgPSAmdGFibGVbKGkgKyBqKSAmIG1hc2tdOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CisgICAgICAgIH0KKyAgICAgICAgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVDsKKyAgICAgICAgaSA9IGkgKiA1ICsgMSArIHBlcnR1cmI7CisgICAgfQorICBmb3VuZF9udWxsOgorICAgIGVudHJ5LT5rZXkgPSBrZXk7CisgICAgZW50cnktPmhhc2ggPSBoYXNoOworICAgIHNvLT5maWxsKys7CisgICAgc28tPnVzZWQrKzsKK30KKworLyogPT09PT09PT0gRW5kIGxvZ2ljIGZvciBwcm9iaW5nIHRoZSBoYXNoIHRhYmxlID09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworCisvKgogSW50ZXJuYWwgcm91dGluZSB0byBpbnNlcnQgYSBuZXcga2V5IGludG8gdGhlIHRhYmxlLgogVXNlZCBieSB0aGUgcHVibGljIGluc2VydCByb3V0aW5lLgogRWF0cyBhIHJlZmVyZW5jZSB0byBrZXkuCiAqLwogc3RhdGljIGludAotc2V0X2luc2VydF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKK3NldF9pbnNlcnRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCiB7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICplbnRyeTsKIAogICAgIGFzc2VydChzby0+bG9va3VwICE9IE5VTEwpOwogICAgIGVudHJ5ID0gc28tPmxvb2t1cChzbywga2V5LCBoYXNoKTsKQEAgLTIzMCw3ICsyNDYsNiBAQAogICAgICAgICBlbnRyeS0+a2V5ID0ga2V5OwogICAgICAgICBlbnRyeS0+aGFzaCA9IGhhc2g7CiAgICAgICAgIHNvLT51c2VkKys7Ci0gICAgICAgIFB5X0RFQ1JFRihkdW1teSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogQUNUSVZFICovCiAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwpAQCAtMjM5LDM1ICsyNTQsNiBAQAogfQogCiAvKgotSW50ZXJuYWwgcm91dGluZSB1c2VkIGJ5IHNldF90YWJsZV9yZXNpemUoKSB0byBpbnNlcnQgYW4gaXRlbSB3aGljaCBpcwota25vd24gdG8gYmUgYWJzZW50IGZyb20gdGhlIHNldC4gIFRoaXMgcm91dGluZSBhbHNvIGFzc3VtZXMgdGhhdAotdGhlIHNldCBjb250YWlucyBubyBkZWxldGVkIGVudHJpZXMuICBCZXNpZGVzIHRoZSBwZXJmb3JtYW5jZSBiZW5lZml0LAotdXNpbmcgc2V0X2luc2VydF9jbGVhbigpIGluIHNldF90YWJsZV9yZXNpemUoKSBpcyBkYW5nZXJvdXMgKFNGIGJ1ZyAjMTQ1NjIwOSkuCi1Ob3RlIHRoYXQgbm8gcmVmY291bnRzIGFyZSBjaGFuZ2VkIGJ5IHRoaXMgcm91dGluZTsgaWYgbmVlZGVkLCB0aGUgY2FsbGVyCi1pcyByZXNwb25zaWJsZSBmb3IgaW5jcmVmJ2luZyBga2V5YC4KLSovCi1zdGF0aWMgdm9pZAotc2V0X2luc2VydF9jbGVhbihyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQotewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gKHNpemVfdClzby0+bWFzazsKLSAgICBzZXRlbnRyeSAqdGFibGUgPSBzby0+dGFibGU7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwotCi0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgZW50cnktPmtleSAhPSBOVUxMOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKLSAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgIH0KLSAgICBzby0+ZmlsbCsrOwotICAgIGVudHJ5LT5rZXkgPSBrZXk7Ci0gICAgZW50cnktPmhhc2ggPSBoYXNoOwotICAgIHNvLT51c2VkKys7Ci19Ci0KLS8qCiBSZXN0cnVjdHVyZSB0aGUgdGFibGUgYnkgYWxsb2NhdGluZyBhIG5ldyB0YWJsZSBhbmQgcmVpbnNlcnRpbmcgYWxsCiBrZXlzIGFnYWluLiAgV2hlbiBlbnRyaWVzIGhhdmUgYmVlbiBkZWxldGVkLCB0aGUgbmV3IHRhYmxlIG1heQogYWN0dWFsbHkgYmUgc21hbGxlciB0aGFuIHRoZSBvbGQgb25lLgpAQCAtMzMwLDIzICszMTYsMTQgQEAKICAgICBzby0+dGFibGUgPSBuZXd0YWJsZTsKICAgICBzby0+bWFzayA9IG5ld3NpemUgLSAxOwogICAgIG1lbXNldChuZXd0YWJsZSwgMCwgc2l6ZW9mKHNldGVudHJ5KSAqIG5ld3NpemUpOworICAgIGkgPSBzby0+dXNlZDsKICAgICBzby0+dXNlZCA9IDA7Ci0gICAgaSA9IHNvLT5maWxsOwogICAgIHNvLT5maWxsID0gMDsKIAogICAgIC8qIENvcHkgdGhlIGRhdGEgb3ZlcjsgdGhpcyBpcyByZWZjb3VudC1uZXV0cmFsIGZvciBhY3RpdmUgZW50cmllczsKICAgICAgICBkdW1teSBlbnRyaWVzIGFyZW4ndCBjb3BpZWQgb3Zlciwgb2YgY291cnNlICovCiAgICAgZm9yIChlbnRyeSA9IG9sZHRhYmxlOyBpID4gMDsgZW50cnkrKykgewotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBVTlVTRUQgKi8KLSAgICAgICAgICAgIDsKLSAgICAgICAgfSBlbHNlIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KSB7Ci0gICAgICAgICAgICAvKiBEVU1NWSAqLwotICAgICAgICAgICAgLS1pOwotICAgICAgICAgICAgYXNzZXJ0KGVudHJ5LT5rZXkgPT0gZHVtbXkpOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogQUNUSVZFICovCisgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IE5VTEwgJiYgZW50cnktPmtleSAhPSBkdW1teSkgewogICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgc2V0X2luc2VydF9jbGVhbihzbywgZW50cnktPmtleSwgZW50cnktPmhhc2gpOwogICAgICAgICB9CkBAIC0zNjAsOSArMzM3LDkgQEAKIC8qIENBVVRJT046IHNldF9hZGRfa2V5L2VudHJ5KCkgbXVzdCBndWFyYW50ZWUgaXQgd29uJ3QgcmVzaXplIHRoZSB0YWJsZSAqLwogCiBzdGF0aWMgaW50Ci1zZXRfYWRkX2VudHJ5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQorc2V0X2FkZF9lbnRyeShQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICplbnRyeSkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKKyAgICBQeV9zc2l6ZV90IG5fdXNlZDsKICAgICBQeU9iamVjdCAqa2V5ID0gZW50cnktPmtleTsKICAgICBQeV9oYXNoX3QgaGFzaCA9IGVudHJ5LT5oYXNoOwogCkBAIC0zNzksMTAgKzM1NiwxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1zZXRfYWRkX2tleShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCitzZXRfYWRkX2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBuX3VzZWQ7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgUHlfc3NpemVfdCBuX3VzZWQ7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKQEAgLTQwNyw3ICszODQsNyBAQAogCiBzdGF0aWMgaW50CiBzZXRfZGlzY2FyZF9lbnRyeShQeVNldE9iamVjdCAqc28sIHNldGVudHJ5ICpvbGRlbnRyeSkKLXsgICAgICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworeyAgICAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBlbnRyeSA9IChzby0+bG9va3VwKShzbywgb2xkZW50cnktPmtleSwgb2xkZW50cnktPmhhc2gpOwpAQCAtNDE2LDcgKzM5Myw2IEBACiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCAgfHwgIGVudHJ5LT5rZXkgPT0gZHVtbXkpCiAgICAgICAgIHJldHVybiBESVNDQVJEX05PVEZPVU5EOwogICAgIG9sZF9rZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgUHlfREVDUkVGKG9sZF9rZXkpOwpAQCAtNDI2LDggKzQwMiw4IEBACiBzdGF0aWMgaW50CiBzZXRfZGlzY2FyZF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKm9sZF9rZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CkBAIC00NDQsMTMgKzQyMCwyMyBAQAogICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwgIHx8ICBlbnRyeS0+a2V5ID09IGR1bW15KQogICAgICAgICByZXR1cm4gRElTQ0FSRF9OT1RGT1VORDsKICAgICBvbGRfa2V5ID0gZW50cnktPmtleTsKLSAgICBQeV9JTkNSRUYoZHVtbXkpOwogICAgIGVudHJ5LT5rZXkgPSBkdW1teTsKICAgICBzby0+dXNlZC0tOwogICAgIFB5X0RFQ1JFRihvbGRfa2V5KTsKICAgICByZXR1cm4gRElTQ0FSRF9GT1VORDsKIH0KIAorc3RhdGljIHZvaWQKK3NldF9lbXB0eV90b19taW5zaXplKFB5U2V0T2JqZWN0ICpzbykKK3sKKyAgICBtZW1zZXQoc28tPnNtYWxsdGFibGUsIDAsIHNpemVvZihzby0+c21hbGx0YWJsZSkpOworICAgIHNvLT5maWxsID0gMDsKKyAgICBzby0+dXNlZCA9IDA7CisgICAgc28tPm1hc2sgPSBQeVNldF9NSU5TSVpFIC0gMTsKKyAgICBzby0+dGFibGUgPSBzby0+c21hbGx0YWJsZTsKKyAgICBzby0+aGFzaCA9IC0xOworfQorCiBzdGF0aWMgaW50CiBzZXRfY2xlYXJfaW50ZXJuYWwoUHlTZXRPYmplY3QgKnNvKQogewpAQCAtNDU4LDE0ICs0NDQsMTMgQEAKICAgICBpbnQgdGFibGVfaXNfbWFsbG9jZWQ7CiAgICAgUHlfc3NpemVfdCBmaWxsOwogICAgIHNldGVudHJ5IHNtYWxsX2NvcHlbUHlTZXRfTUlOU0laRV07Ci0jaWZkZWYgUHlfREVCVUcKLSAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogCi0gICAgbiA9IHNvLT5tYXNrICsgMTsKLSAgICBpID0gMDsKKyNpZmRlZiBQeV9ERUJVRworICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgUHlfc3NpemVfdCBuID0gc28tPm1hc2sgKyAxOwogI2VuZGlmCiAKKyAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgdGFibGUgPSBzby0+dGFibGU7CiAgICAgYXNzZXJ0KHRhYmxlICE9IE5VTEwpOwogICAgIHRhYmxlX2lzX21hbGxvY2VkID0gdGFibGUgIT0gc28tPnNtYWxsdGFibGU7CkBAIC00NzgsNyArNDYzLDcgQEAKICAgICAgKi8KICAgICBmaWxsID0gc28tPmZpbGw7CiAgICAgaWYgKHRhYmxlX2lzX21hbGxvY2VkKQotICAgICAgICBFTVBUWV9UT19NSU5TSVpFKHNvKTsKKyAgICAgICAgc2V0X2VtcHR5X3RvX21pbnNpemUoc28pOwogCiAgICAgZWxzZSBpZiAoZmlsbCA+IDApIHsKICAgICAgICAgLyogSXQncyBhIHNtYWxsIHRhYmxlIHdpdGggc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgY2xlYXJlZC4KQEAgLTQ4Nyw3ICs0NzIsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgbWVtY3B5KHNtYWxsX2NvcHksIHRhYmxlLCBzaXplb2Yoc21hbGxfY29weSkpOwogICAgICAgICB0YWJsZSA9IHNtYWxsX2NvcHk7Ci0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOworICAgICAgICBzZXRfZW1wdHlfdG9fbWluc2l6ZShzbyk7CiAgICAgfQogICAgIC8qIGVsc2UgaXQncyBhIHNtYWxsIHRhYmxlIHRoYXQncyBhbHJlYWR5IGVtcHR5ICovCiAKQEAgLTUwMiw3ICs0ODcsOCBAQAogI2VuZGlmCiAgICAgICAgIGlmIChlbnRyeS0+a2V5KSB7CiAgICAgICAgICAgICAtLWZpbGw7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSAhPSBkdW1teSkKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7CiAgICAgICAgIH0KICNpZmRlZiBQeV9ERUJVRwogICAgICAgICBlbHNlCkBAIC01MzMsNyArNTE5LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBtYXNrOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICp0YWJsZTsKKyAgICBzZXRlbnRyeSAqdGFibGU7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgaSA9ICpwb3NfcHRyOwpAQCAtNTUzLDcgKzUzOSw3IEBACiBzdGF0aWMgdm9pZAogc2V0X2RlYWxsb2MoUHlTZXRPYmplY3QgKnNvKQogewotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlfc3NpemVfdCBmaWxsID0gc28tPmZpbGw7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhzbyk7CiAgICAgUHlfVFJBU0hDQU5fU0FGRV9CRUdJTihzbykKQEAgLTU2MywxNSArNTQ5LDEzIEBACiAgICAgZm9yIChlbnRyeSA9IHNvLT50YWJsZTsgZmlsbCA+IDA7IGVudHJ5KyspIHsKICAgICAgICAgaWYgKGVudHJ5LT5rZXkpIHsKICAgICAgICAgICAgIC0tZmlsbDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IGR1bW15KQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc28tPnRhYmxlICE9IHNvLT5zbWFsbHRhYmxlKQogICAgICAgICBQeU1lbV9ERUwoc28tPnRhYmxlKTsKLSAgICBpZiAobnVtZnJlZSA8IFB5U2V0X01BWEZSRUVMSVNUICYmIFB5QW55U2V0X0NoZWNrRXhhY3Qoc28pKQotICAgICAgICBmcmVlX2xpc3RbbnVtZnJlZSsrXSA9IHNvOwotICAgIGVsc2UKLSAgICAgICAgUHlfVFlQRShzbyktPnRwX2ZyZWUoc28pOworICAgIFB5X1RZUEUoc28pLT50cF9mcmVlKHNvKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0VORChzbykKIH0KIApAQCAtNjMyLDggKzYxNiw4IEBACiAgICAgUHlTZXRPYmplY3QgKm90aGVyOwogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogCiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhzbykpOwogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2sob3RoZXJzZXQpKTsKQEAgLTcwMSw4ICs2ODUsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9wb3AoUHlTZXRPYmplY3QgKnNvKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSA9IDA7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICprZXk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CkBAIC03MzQsNyArNzE4LDYgQEAKICAgICAgICAgfQogICAgIH0KICAgICBrZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgc28tPnRhYmxlWzBdLmhhc2ggPSBpICsgMTsgIC8qIG5leHQgcGxhY2UgdG8gc3RhcnQgKi8KQEAgLTg2OSw4ICs4NTIsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpzZXRpdGVyX2l0ZXJuZXh0KHNldGl0ZXJvYmplY3QgKnNpKQogewogICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBtYXNrOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2s7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5U2V0T2JqZWN0ICpzbyA9IHNpLT5zaV9zZXQ7CiAKICAgICBpZiAoc28gPT0gTlVMTCkKQEAgLTEwMjQsMzMgKzEwMDcsMTkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX25ld19zZXQoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvID0gTlVMTDsKLQotICAgIGlmIChkdW1teSA9PSBOVUxMKSB7IC8qIEF1dG8taW5pdGlhbGl6ZSBkdW1teSAqLwotICAgICAgICBkdW1teSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZHVtbXkga2V5PiIpOwotICAgICAgICBpZiAoZHVtbXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBQeVNldE9iamVjdCAqc28gPSBOVUxMOwogCiAgICAgLyogY3JlYXRlIFB5U2V0T2JqZWN0IHN0cnVjdHVyZSAqLwotICAgIGlmIChudW1mcmVlICYmCi0gICAgICAgICh0eXBlID09ICZQeVNldF9UeXBlICB8fCAgdHlwZSA9PSAmUHlGcm96ZW5TZXRfVHlwZSkpIHsKLSAgICAgICAgc28gPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKLSAgICAgICAgYXNzZXJ0IChzbyAhPSBOVUxMICYmIFB5QW55U2V0X0NoZWNrRXhhY3Qoc28pKTsKLSAgICAgICAgUHlfVFlQRShzbykgPSB0eXBlOwotICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKChQeU9iamVjdCAqKXNvKTsKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7Ci0gICAgICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNvKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbyA9IChQeVNldE9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwotICAgICAgICBpZiAoc28gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiB0cF9hbGxvYyBoYXMgYWxyZWFkeSB6ZXJvZWQgdGhlIHN0cnVjdHVyZSAqLwotICAgICAgICBhc3NlcnQoc28tPnRhYmxlID09IE5VTEwgJiYgc28tPmZpbGwgPT0gMCAmJiBzby0+dXNlZCA9PSAwKTsKLSAgICAgICAgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbyk7Ci0gICAgfQorICAgIHNvID0gKFB5U2V0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKHNvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc28tPmZpbGwgPSAwOworICAgIHNvLT51c2VkID0gMDsKKyAgICBzby0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOworICAgIHNvLT50YWJsZSA9IHNvLT5zbWFsbHRhYmxlOwogICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleV91bmljb2RlOworICAgIHNvLT5oYXNoID0gLTE7CiAgICAgc28tPndlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIGlmIChpdGVyYWJsZSAhPSBOVUxMKSB7CkBAIC0xMTEzLDM1ICsxMDgyLDE1IEBACiBpbnQKIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCkKIHsKLSAgICBpbnQgZnJlZWxpc3Rfc2l6ZSA9IG51bWZyZWU7Ci0gICAgUHlTZXRPYmplY3QgKnNvOwotCi0gICAgd2hpbGUgKG51bWZyZWUpIHsKLSAgICAgICAgbnVtZnJlZS0tOwotICAgICAgICBzbyA9IGZyZWVfbGlzdFtudW1mcmVlXTsKLSAgICAgICAgUHlPYmplY3RfR0NfRGVsKHNvKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyZWVsaXN0X3NpemU7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQKIFB5U2V0X0Zpbmkodm9pZCkKIHsKLSAgICBQeVNldF9DbGVhckZyZWVMaXN0KCk7Ci0gICAgUHlfQ0xFQVIoZHVtbXkpOwogICAgIFB5X0NMRUFSKGVtcHR5ZnJvemVuc2V0KTsKIH0KIAotLyogUHJpbnQgc3VtbWFyeSBpbmZvIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgb3B0aW1pemVkIGFsbG9jYXRvciAqLwotdm9pZAotX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KQotewotICAgIF9QeURlYnVnQWxsb2NhdG9yU3RhdHMob3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWUgUHlTZXRPYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZnJlZSwgc2l6ZW9mKFB5U2V0T2JqZWN0KSk7Ci19Ci0KLQogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xOTUyLDcgKzE5MDEsNyBAQAogICAgIH0KIAogICAgIGlmIChydiA9PSBESVNDQVJEX05PVEZPVU5EKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTI0MTQsNyArMjM2Myw3IEBACiAgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICBjaGFyICpzOwogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqZWxlbT1OVUxMLCAqZHVwPU5VTEwsICp0LCAqZiwgKmR1cDIsICp4OworICAgIFB5T2JqZWN0ICplbGVtPU5VTEwsICpkdXA9TlVMTCwgKnQsICpmLCAqZHVwMiwgKng9TlVMTDsKICAgICBQeU9iamVjdCAqb2IgPSAoUHlPYmplY3QgKilzbzsKICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeU9iamVjdCAqc3RyOwpAQCAtMjUzNywzICsyNDg2LDQ2IEBACiAjdW5kZWYgYXNzZXJ0UmFpc2VzCiAKICNlbmRpZgorCisvKioqKiogRHVtbXkgU3RydWN0ICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgUHlPYmplY3QgKgorZHVtbXlfcmVwcihQeU9iamVjdCAqb3ApCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZHVtbXkga2V5PiIpOworfQorCitzdGF0aWMgdm9pZAorZHVtbXlfZGVhbGxvYyhQeU9iamVjdCogaWdub3JlKQoreworICAgIFB5X0ZhdGFsRXJyb3IoImRlYWxsb2NhdGluZyA8ZHVtbXkga2V5PiIpOworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IF9QeVNldER1bW15X1R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAiPGR1bW15IGtleT4gdHlwZSIsCisgICAgMCwKKyAgICAwLAorICAgIGR1bW15X2RlYWxsb2MsICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLworICAgIGR1bW15X3JlcHIsICAgICAgICAgLyp0cF9yZXByKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3N0ciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsIC8qdHBfZmxhZ3MgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCBfZHVtbXlfc3RydWN0ID0geworICBfUHlPYmplY3RfRVhUUkFfSU5JVAorICAyLCAmX1B5U2V0RHVtbXlfVHlwZQorfTsKKwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zbGljZW9iamVjdC5jIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCmluZGV4IDE1OTMzMzUuLjEwNDk1MjMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2xpY2VvYmplY3QuYworKysgYi9PYmplY3RzL3NsaWNlb2JqZWN0LmMKQEAgLTMzLDYgKzMzLDE3IEBACiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJFbGxpcHNpcyIpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZWxsaXBzaXNfcmVkdWNlKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBlbGxpcHNpc19tZXRob2RzW10gPSB7CisgICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWVsbGlwc2lzX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogUHlUeXBlT2JqZWN0IFB5RWxsaXBzaXNfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICJlbGxpcHNpcyIsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTYxLDcgKzcyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBlbGxpcHNpc19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTI5OSwyMyArMzEwLDE5OCBAQAogICAgIHswfQogfTsKIAorLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhIFB5TG9uZywgYW5kIHJhaXNlIFR5cGVFcnJvcgorICAgd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4gKi8KKworc3RhdGljIFB5T2JqZWN0KgorZXZhbHVhdGVfc2xpY2VfaW5kZXgoUHlPYmplY3QgKnYpCit7CisgICAgaWYgKFB5SW5kZXhfQ2hlY2sodikpIHsKKyAgICAgICAgcmV0dXJuIFB5TnVtYmVyX0luZGV4KHYpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgIk5vbmUgb3IgaGF2ZSBhbiBfX2luZGV4X18gbWV0aG9kIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworLyogQ29tcHV0ZSBzbGljZSBpbmRpY2VzIGdpdmVuIGEgc2xpY2UgYW5kIGxlbmd0aC4gIFJldHVybiAtMSBvbiBmYWlsdXJlLiAgVXNlZAorICAgYnkgc2xpY2UuaW5kaWNlcyBhbmQgcmFuZ2VvYmplY3Qgc2xpY2luZy4gIEFzc3VtZXMgdGhhdCBgbGVuYCBpcyBhCisgICBub25uZWdhdGl2ZSBpbnN0YW5jZSBvZiBQeUxvbmcuICovCisKK2ludAorX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoUHlTbGljZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqc3RhcnRfcHRyLCBQeU9iamVjdCAqKnN0b3BfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGVwX3B0cikKK3sKKyAgICBQeU9iamVjdCAqc3RhcnQ9TlVMTCwgKnN0b3A9TlVMTCwgKnN0ZXA9TlVMTDsKKyAgICBQeU9iamVjdCAqdXBwZXI9TlVMTCwgKmxvd2VyPU5VTEw7CisgICAgaW50IHN0ZXBfaXNfbmVnYXRpdmUsIGNtcF9yZXN1bHQ7CisKKyAgICAvKiBDb252ZXJ0IHN0ZXAgdG8gYW4gaW50ZWdlcjsgcmFpc2UgZm9yIHplcm8gc3RlcC4gKi8KKyAgICBpZiAoc2VsZi0+c3RlcCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0ZXAgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgICAgICBpZiAoc3RlcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RlcF9pc19uZWdhdGl2ZSA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbnQgc3RlcF9zaWduOworICAgICAgICBzdGVwID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RlcCk7CisgICAgICAgIGlmIChzdGVwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBzdGVwX3NpZ24gPSBfUHlMb25nX1NpZ24oc3RlcCk7CisgICAgICAgIGlmIChzdGVwX3NpZ24gPT0gMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIHN0ZXAgY2Fubm90IGJlIHplcm8iKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc3RlcF9pc19uZWdhdGl2ZSA9IHN0ZXBfc2lnbiA8IDA7CisgICAgfQorCisgICAgLyogRmluZCBsb3dlciBhbmQgdXBwZXIgYm91bmRzIGZvciBzdGFydCBhbmQgc3RvcC4gKi8KKyAgICBpZiAoc3RlcF9pc19uZWdhdGl2ZSkgeworICAgICAgICBsb3dlciA9IFB5TG9uZ19Gcm9tTG9uZygtMUwpOworICAgICAgICBpZiAobG93ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdXBwZXIgPSBQeU51bWJlcl9BZGQobGVuZ3RoLCBsb3dlcik7CisgICAgICAgIGlmICh1cHBlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvd2VyID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKyAgICAgICAgaWYgKGxvd2VyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHVwcGVyID0gbGVuZ3RoOworICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgIH0KKworICAgIC8qIENvbXB1dGUgc3RhcnQuICovCisgICAgaWYgKHNlbGYtPnN0YXJ0ID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RhcnQgPSBzdGVwX2lzX25lZ2F0aXZlID8gdXBwZXIgOiBsb3dlcjsKKyAgICAgICAgUHlfSU5DUkVGKHN0YXJ0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0YXJ0ID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RhcnQpOworICAgICAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeUxvbmdfU2lnbihzdGFydCkgPCAwKSB7CisgICAgICAgICAgICAvKiBzdGFydCArPSBsZW5ndGggKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU51bWJlcl9BZGQoc3RhcnQsIGxlbmd0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgc3RhcnQgPSB0bXA7CisgICAgICAgICAgICBpZiAoc3RhcnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0LCBsb3dlciwgUHlfTFQpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihsb3dlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGxvd2VyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydCwgdXBwZXIsIFB5X0dUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB1cHBlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENvbXB1dGUgc3RvcC4gKi8KKyAgICBpZiAoc2VsZi0+c3RvcCA9PSBQeV9Ob25lKSB7CisgICAgICAgIHN0b3AgPSBzdGVwX2lzX25lZ2F0aXZlID8gbG93ZXIgOiB1cHBlcjsKKyAgICAgICAgUHlfSU5DUkVGKHN0b3ApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNlbGYtPnN0b3ApOworICAgICAgICBpZiAoc3RvcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoX1B5TG9uZ19TaWduKHN0b3ApIDwgMCkgeworICAgICAgICAgICAgLyogc3RvcCArPSBsZW5ndGggKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICp0bXAgPSBQeU51bWJlcl9BZGQoc3RvcCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgIHN0b3AgPSB0bXA7CisgICAgICAgICAgICBpZiAoc3RvcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RvcCwgbG93ZXIsIFB5X0xUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobG93ZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgICAgICBzdG9wID0gbG93ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0b3AsIHVwcGVyLCBQeV9HVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHVwcGVyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcCk7CisgICAgICAgICAgICAgICAgc3RvcCA9IHVwcGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgKnN0YXJ0X3B0ciA9IHN0YXJ0OworICAgICpzdG9wX3B0ciA9IHN0b3A7CisgICAgKnN0ZXBfcHRyID0gc3RlcDsKKyAgICBQeV9ERUNSRUYodXBwZXIpOworICAgIFB5X0RFQ1JFRihsb3dlcik7CisgICAgcmV0dXJuIDA7CisKKyAgZXJyb3I6CisgICAgKnN0YXJ0X3B0ciA9ICpzdG9wX3B0ciA9ICpzdGVwX3B0ciA9IE5VTEw7CisgICAgUHlfWERFQ1JFRihzdGFydCk7CisgICAgUHlfWERFQ1JFRihzdG9wKTsKKyAgICBQeV9YREVDUkVGKHN0ZXApOworICAgIFB5X1hERUNSRUYodXBwZXIpOworICAgIFB5X1hERUNSRUYobG93ZXIpOworICAgIHJldHVybiAtMTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2Ygc2xpY2UuaW5kaWNlcy4gKi8KKwogc3RhdGljIFB5T2JqZWN0Kgogc2xpY2VfaW5kaWNlcyhQeVNsaWNlT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogbGVuKQogewotICAgIFB5X3NzaXplX3QgaWxlbiwgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoOworICAgIFB5T2JqZWN0ICpzdGFydCwgKnN0b3AsICpzdGVwOworICAgIFB5T2JqZWN0ICpsZW5ndGg7CisgICAgaW50IGVycm9yOwogCi0gICAgaWxlbiA9IFB5TnVtYmVyX0FzU3NpemVfdChsZW4sIFB5RXhjX092ZXJmbG93RXJyb3IpOworICAgIC8qIENvbnZlcnQgbGVuZ3RoIHRvIGFuIGludGVnZXIgaWYgbmVjZXNzYXJ5OyByYWlzZSBmb3IgbmVnYXRpdmUgbGVuZ3RoLiAqLworICAgIGxlbmd0aCA9IFB5TnVtYmVyX0luZGV4KGxlbik7CisgICAgaWYgKGxlbmd0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChpbGVuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICBpZiAoX1B5TG9uZ19TaWduKGxlbmd0aCkgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCBzaG91bGQgbm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIFB5X0RFQ1JFRihsZW5ndGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5T2JqZWN0KilzZWxmLCBpbGVuLCAmc3RhcnQsICZzdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKKyAgICBlcnJvciA9IF9QeVNsaWNlX0dldExvbmdJbmRpY2VzKHNlbGYsIGxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIFB5X0RFQ1JFRihsZW5ndGgpOworICAgIGlmIChlcnJvciA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihubm4pIiwgc3RhcnQsIHN0b3AsIHN0ZXApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihOTk4pIiwgc3RhcnQsIHN0b3AsIHN0ZXApOwogfQogCiBQeURvY19TVFJWQVIoc2xpY2VfaW5kaWNlc19kb2MsCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaAppbmRleCBmNjI4MTNkLi5kMGZjMThkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXKFNUUixMRU4pICAgX1B5VW5pY29kZV9Gcm9tQVNDSUkoKGNoYXIqKShTVFIpLChMRU4pKQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaCBiL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCmluZGV4IGYzNTMzNjcuLjJlYjJkMTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oCkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHMsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9zID0gczsKLSAgICAgICAgICAgICAgICByZWdpc3RlciBTVFJJTkdMSUJfQ0hBUiAqX3AgPSBwOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9zID0gczsKKyAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiAqX3AgPSBwOwogICAgICAgICAgICAgICAgIHdoaWxlIChfcyA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIFJlYWQgYSB3aG9sZSBsb25nIGF0IGEgdGltZSAoZWl0aGVyIDQgb3IgOCBieXRlcyksCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBkbyBhIGZhc3QgdW5yb2xsZWQgY29weSBpZiBpdCBvbmx5IGNvbnRhaW5zIEFTQ0lJCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3M7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgICAgICAgICAgICAgICAgICBfcFswXSA9IChTVFJJTkdMSUJfQ0hBUikodmFsdWUgJiAweEZGdSk7CiAgICAgICAgICAgICAgICAgICAgIF9wWzFdID0gKFNUUklOR0xJQl9DSEFSKSgodmFsdWUgPj4gOCkgJiAweEZGdSk7CiAgICAgICAgICAgICAgICAgICAgIF9wWzJdID0gKFNUUklOR0xJQl9DSEFSKSgodmFsdWUgPj4gMTYpICYgMHhGRnUpOwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9ICppbnB0cjsKICAgICBTVFJJTkdMSUJfQ0hBUiAqcCA9IGRlc3QgKyAqb3V0cG9zOwogICAgIC8qIE9mZnNldHMgZnJvbSBxIGZvciByZXRyaWV2aW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpaGkgPSAhIW5hdGl2ZV9vcmRlcmluZywgaWxvID0gIW5hdGl2ZV9vcmRlcmluZzsKICNlbHNlCiAgICAgaW50IGloaSA9ICFuYXRpdmVfb3JkZXJpbmcsIGlsbyA9ICEhbmF0aXZlX29yZGVyaW5nOwpAQCAtNDk5LDcgKzQ5OSw3IEBACiAgICAgICAgICAgIHJlYWRzIGFyZSBtb3JlIGV4cGVuc2l2ZSwgYmV0dGVyIHRvIGRlZmVyIHRvIGFub3RoZXIgaXRlcmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocSwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHJ1bnMgb2YgaW4tcmFuZ2Ugbm9uLXN1cnJvZ2F0ZSBjaGFycy4gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9xID0gcTsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9xID0gcTsKICAgICAgICAgICAgIHdoaWxlIChfcSA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9jayA9ICogKHVuc2lnbmVkIGxvbmcgKikgX3E7CiAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZV9vcmRlcmluZykgewpAQCAtNTE3LDcgKzUxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gU1dBQihibG9jayk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9Ci0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAjIGlmIFNJWkVPRl9MT05HID09IDQKICAgICAgICAgICAgICAgICBwWzBdID0gKFNUUklOR0xJQl9DSEFSKShibG9jayAmIDB4RkZGRnUpOwogICAgICAgICAgICAgICAgIHBbMV0gPSAoU1RSSU5HTElCX0NIQVIpKGJsb2NrID4+IDE2KTsKQEAgLTU5NiwyNiArNTk2LDMwIEBACiAjdW5kZWYgU1dBQgogCiAKLVB5X0xPQ0FMX0lOTElORSh2b2lkKQotU1RSSU5HTElCKHV0ZjE2X2VuY29kZSkodW5zaWduZWQgc2hvcnQgKm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICppbiwKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHg4MAorUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCitTVFJJTkdMSUIodXRmMTZfZW5jb2RlKShjb25zdCBTVFJJTkdMSUJfQ0hBUiAqaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICoqb3V0cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hdGl2ZV9vcmRlcmluZykKIHsKKyAgICB1bnNpZ25lZCBzaG9ydCAqb3V0ID0gKm91dHB0cjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqZW5kID0gaW4gKyBsZW47CiAjaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDEKLSMgZGVmaW5lIFNXQUIyKENIKSAgKChDSCkgPDwgOCkKLSNlbHNlCi0jIGRlZmluZSBTV0FCMihDSCkgICgoKENIKSA8PCA4KSB8ICgoQ0gpID4+IDgpKQotI2VuZGlmCi0jaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAogICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKLSMgaWYgU1RSSU5HTElCX1NJWkVPRl9DSEFSID09IDIKLSAgICAgICAgUHlfTUVNQ1BZKG91dCwgaW4sIDIgKiBsZW4pOwotIyBlbHNlCi0gICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUyhTVFJJTkdMSUJfQ0hBUiwgdW5zaWduZWQgc2hvcnQsIGluLCBlbmQsIG91dCk7Ci0jIGVuZGlmCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICBvdXRbMF0gPSBpblswXTsKKyAgICAgICAgICAgIG91dFsxXSA9IGluWzFdOworICAgICAgICAgICAgb3V0WzJdID0gaW5bMl07CisgICAgICAgICAgICBvdXRbM10gPSBpblszXTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgeworICAgICAgICAgICAgKm91dCsrID0gKmluKys7CisgICAgICAgIH0KICAgICB9IGVsc2UgeworIyBkZWZpbmUgU1dBQjIoQ0gpICAoKENIKSA8PCA4KSAvKiBoaWdoIGJ5dGUgaXMgemVybyAqLwogICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CiAgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgewogICAgICAgICAgICAgb3V0WzBdID0gU1dBQjIoaW5bMF0pOwpAQCAtNjI1LDM3ICs2MjksOTUgQEAKICAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewotICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKmluKTsKLSAgICAgICAgICAgICsraW47CisgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7CisgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CiAgICAgICAgIH0KKyN1bmRlZiBTV0FCMgogICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CiAjZWxzZQogICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPCAweDEwMDAwCisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obGVuLCA0KTsKKyAgICAgICAgd2hpbGUgKGluIDwgdW5yb2xsZWRfZW5kKSB7CisgICAgICAgICAgICAvKiBjaGVjayBpZiBhbnkgY2hhcmFjdGVyIGlzIGEgc3Vycm9nYXRlIGNoYXJhY3RlciAqLworICAgICAgICAgICAgaWYgKCgoaW5bMF0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzFdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsyXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bM10gXiAweGQ4MDApICYgMHhmODAwKSA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgb3V0WzBdID0gaW5bMF07CisgICAgICAgICAgICBvdXRbMV0gPSBpblsxXTsKKyAgICAgICAgICAgIG91dFsyXSA9IGluWzJdOworICAgICAgICAgICAgb3V0WzNdID0gaW5bM107CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIHdoaWxlIChpbiA8IGVuZCkgewotICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOwotICAgICAgICAgICAgaWYgKGNoIDwgMHgxMDAwMCkKKyAgICAgICAgICAgIFB5X1VDUzQgY2g7CisgICAgICAgICAgICBjaCA9ICppbisrOworICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IGNoOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZTAwMCkKKyAgICAgICAgICAgICAgICAvKiByZWplY3Qgc3Vycm9nYXRlIGNoYXJhY3RlcnMgKFUrREM4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHgxMDAwMAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIG91dFswXSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBjaDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CisjZGVmaW5lIFNXQUIyKENIKSAgKCgoQ0gpIDw8IDgpIHwgKChDSCkgPj4gOCkpCisjaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGluWzBdKTsKKyAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGluWzFdKTsKKyAgICAgICAgICAgIG91dFsyXSA9IFNXQUIyKGluWzJdKTsKKyAgICAgICAgICAgIG91dFszXSA9IFNXQUIyKGluWzNdKTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CiAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwKQorICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGUwMDApCisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0RDODAwLVUrREZGRikgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4MTAwMDAKKyAgICAgICAgICAgIGVsc2UgaWYgKGNoID49IDB4MTAwMDApIHsKICAgICAgICAgICAgICAgICBQeV9VQ1MyIGNoMSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIFB5X1VDUzIgY2gyID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgICAgICBvdXRbMF0gPSBTV0FCMihjaDEpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGNoMik7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9CiAjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBTV0FCMigoUHlfVUNTMiljaCk7CisgICAgICAgIH0KICN1bmRlZiBTV0FCMgorICAgIH0KKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW47CisgIGZhaWw6CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuIC0gKGVuZCAtIGluICsgMSk7CisjZW5kaWYKIH0KKyNlbmRpZgorCiAjZW5kaWYgLyogU1RSSU5HTElCX0lTX1VOSUNPREUgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2VxLmggYi9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCmluZGV4IDNlNWY1MTAuLmY4ZmQzODQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2VxLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaApAQCAtNiw4ICs2LDggQEAKIFB5X0xPQ0FMX0lOTElORShpbnQpCiB1bmljb2RlX2VxKFB5T2JqZWN0ICphYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqYSA9IChQeVVuaWNvZGVPYmplY3QgKilhYTsKLSAgICByZWdpc3RlciBQeVVuaWNvZGVPYmplY3QgKmIgPSAoUHlVbmljb2RlT2JqZWN0ICopYmI7CisgICAgUHlVbmljb2RlT2JqZWN0ICphID0gKFB5VW5pY29kZU9iamVjdCAqKWFhOworICAgIFB5VW5pY29kZU9iamVjdCAqYiA9IChQeVVuaWNvZGVPYmplY3QgKiliYjsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYSkgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKGIpID09IC0xKSB7CiAgICAgICAgIGFzc2VydCgwICYmICJ1bmljb2RlX2VxIHJlYWR5IGZhaWwiKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAppbmRleCA1NWFjNzdkLi5jZDdjYWM0IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCkBAIC0xNDIsNiArMTQyLDggQEAKICAgICBtYXNrID0gMDsKIAogICAgIGlmIChtb2RlICE9IEZBU1RfUlNFQVJDSCkgeworICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqc3MgPSBzICsgbSAtIDE7CisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpwcCA9IHAgKyBtIC0gMTsKIAogICAgICAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCiAKQEAgLTE1Niw3ICsxNTgsNyBAQAogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gdzsgaSsrKSB7CiAgICAgICAgICAgICAvKiBub3RlOiB1c2luZyBtbGFzdCBpbiB0aGUgc2tpcCBwYXRoIHNsb3dzIHRoaW5ncyBkb3duIG9uIHg4NiAqLwotICAgICAgICAgICAgaWYgKHNbaSttLTFdID09IHBbbS0xXSkgeworICAgICAgICAgICAgaWYgKHNzW2ldID09IHBwWzBdKSB7CiAgICAgICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCiAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1sYXN0OyBqKyspCiAgICAgICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKQEAgLTE3MiwxMyArMTc0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNzW2krMV0pKQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpID0gaSArIHNraXA7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHNraXA6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc3NbaSsxXSkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCmluZGV4IDA2NTU5YzguLmViM2ZlODggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKQEAgLTI0LDcgKzI0LDcgQEAKICAgICB3aGlsZSAocCA8IGVuZCkgewogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKl9wID0gcDsKICAgICAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWx1ZSA9ICoodW5zaWduZWQgbG9uZyAqKSBfcDsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBVQ1MxX0FTQ0lJX0NIQVJfTUFTSykKQEAgLTY2LDcgKzY2LDcgQEAKICNlbHNlCiAjZXJyb3IgSW52YWxpZCBTVFJJTkdMSUJfU0laRU9GX0NIQVIgKG11c3QgYmUgMSwgMiBvciA0KQogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlfVUNTNCBtYXNrOworICAgIFB5X1VDUzQgbWFzazsKICAgICBQeV9zc2l6ZV90IG4gPSBlbmQgLSBiZWdpbjsKICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqcCA9IGJlZ2luOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICp1bnJvbGxlZF9lbmQgPSBiZWdpbiArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmggYi9PYmplY3RzL3N0cmluZ2xpYi9qb2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2OGIzMQotLS0gL2Rldi9udWxsCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaApAQCAtMCwwICsxLDEzMyBAQAorLyogc3RyaW5nbGliOiBieXRlcyBqb2luaW5nIGltcGxlbWVudGF0aW9uICovCisKKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgIT0gMQorI2Vycm9yIGpvaW4uaCBvbmx5IGNvbXBhdGlibGUgd2l0aCBieXRlLXdpc2Ugc3RyaW5ncworI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorU1RSSU5HTElCKGJ5dGVzX2pvaW4pKFB5T2JqZWN0ICpzZXAsIFB5T2JqZWN0ICppdGVyYWJsZSkKK3sKKyAgICBjaGFyICpzZXBzdHIgPSBTVFJJTkdMSUJfU1RSKHNlcCk7CisgICAgY29uc3QgUHlfc3NpemVfdCBzZXBsZW4gPSBTVFJJTkdMSUJfTEVOKHNlcCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY2hhciAqcDsKKyAgICBQeV9zc2l6ZV90IHNlcWxlbiA9IDA7CisgICAgUHlfc3NpemVfdCBzeiA9IDA7CisgICAgUHlfc3NpemVfdCBpLCBuYnVmczsKKyAgICBQeU9iamVjdCAqc2VxLCAqaXRlbTsKKyAgICBQeV9idWZmZXIgKmJ1ZmZlcnMgPSBOVUxMOworI2RlZmluZSBOQl9TVEFUSUNfQlVGRkVSUyAxMAorICAgIFB5X2J1ZmZlciBzdGF0aWNfYnVmZmVyc1tOQl9TVEFUSUNfQlVGRkVSU107CisKKyAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QoaXRlcmFibGUsICJjYW4gb25seSBqb2luIGFuIGl0ZXJhYmxlIik7CisgICAgaWYgKHNlcSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOworICAgIGlmIChzZXFsZW4gPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgcmV0dXJuIFNUUklOR0xJQl9ORVcoTlVMTCwgMCk7CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChzZXFsZW4gPT0gMSkgeworICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgMCk7CisgICAgICAgIGlmIChTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QoaXRlbSkpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgcmV0dXJuIGl0ZW07CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBpZiAoc2VxbGVuID4gTkJfU1RBVElDX0JVRkZFUlMpIHsKKyAgICAgICAgYnVmZmVycyA9IFB5TWVtX05FVyhQeV9idWZmZXIsIHNlcWxlbik7CisgICAgICAgIGlmIChidWZmZXJzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBidWZmZXJzID0gc3RhdGljX2J1ZmZlcnM7CisgICAgfQorCisgICAgLyogSGVyZSBpcyB0aGUgZ2VuZXJhbCBjYXNlLiAgRG8gYSBwcmUtcGFzcyB0byBmaWd1cmUgb3V0IHRoZSB0b3RhbAorICAgICAqIGFtb3VudCBvZiBzcGFjZSB3ZSdsbCBuZWVkIChzeiksIGFuZCBzZWUgd2hldGhlciBhbGwgYXJndW1lbnRzIGFyZQorICAgICAqIGJ1ZmZlci1jb21wYXRpYmxlLgorICAgICAqLworICAgIGZvciAoaSA9IDAsIG5idWZzID0gMDsgaSA8IHNlcWxlbjsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOworICAgICAgICBpZiAoX2dldGJ1ZmZlcihpdGVtLCAmYnVmZmVyc1tpXSkgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBpdGVtICV6ZDogZXhwZWN0ZWQgYnl0ZXMsIGJ5dGVhcnJheSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJvciBhbiBvYmplY3Qgd2l0aCB0aGUgYnVmZmVyIGludGVyZmFjZSwgJS44MHMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBuYnVmcyA9IGkgKyAxOyAgLyogZm9yIGVycm9yIGNsZWFudXAgKi8KKyAgICAgICAgaXRlbWxlbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBpZiAoaXRlbWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gc3opIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN6ICs9IGl0ZW1sZW47CisgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChzZXBsZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN6ICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VxbGVuICE9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHJlc3VsdCBzcGFjZS4gKi8KKyAgICByZXMgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIHN6KTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBDYXRlbmF0ZSBldmVyeXRoaW5nLiAqLworICAgIHAgPSBTVFJJTkdMSUJfU1RSKHJlcyk7CisgICAgaWYgKCFzZXBsZW4pIHsKKyAgICAgICAgLyogZmFzdCBwYXRoICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgICAgIGNoYXIgKnEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgICAgIHAgKz0gbjsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgY2hhciAqcTsKKyAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBzZXBzdHIsIHNlcGxlbik7CisgICAgICAgICAgICBwICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgIHEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOworICAgICAgICBwICs9IG47CisgICAgfQorICAgIGdvdG8gZG9uZTsKKworZXJyb3I6CisgICAgcmVzID0gTlVMTDsKK2RvbmU6CisgICAgUHlfREVDUkVGKHNlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcnNbaV0pOworICAgIGlmIChidWZmZXJzICE9IHN0YXRpY19idWZmZXJzKQorICAgICAgICBQeU1lbV9GUkVFKGJ1ZmZlcnMpOworICAgIHJldHVybiByZXM7Cit9CisKKyN1bmRlZiBOQl9TVEFUSUNfQlVGRkVSUwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAppbmRleCA0MGNiNTEyLi5lZDMyYTZmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaApAQCAtMjksNiArMjksMTEgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob3V0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAjZWxzZQogICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKQEAgLTc5LDYgKzg0LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzE4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyogc3RyaW5nbGliOiByZXBsYWNlIGltcGxlbWVudGF0aW9uICovCisKKyNpZm5kZWYgU1RSSU5HTElCX0ZBU1RTRUFSQ0hfSAorI2Vycm9yIG11c3QgaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIgYmVmb3JlIGluY2x1ZGluZyB0aGlzIG1vZHVsZQorI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorU1RSSU5HTElCKHJlcGxhY2VfMWNoYXJfaW5wbGFjZSkoU1RSSU5HTElCX0NIQVIqIHMsIFNUUklOR0xJQl9DSEFSKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHUxLCBQeV9VQ1M0IHUyLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgICpzID0gdTI7CisgICAgd2hpbGUgKC0tbWF4Y291bnQgJiYgKytzICE9IGVuZCkgeworICAgICAgICAvKiBGaW5kIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZXBsYWNlZC4KKworICAgICAgICAgICBJZiBpdCBvY2N1cnMgb2Z0ZW4sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhbiBpbmxpbmUKKyAgICAgICAgICAgbG9vcC4gIElmIGl0IG9jY3VycyBzZWxkb20sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhCisgICAgICAgICAgIGZ1bmN0aW9uIGNhbGw7IHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBhbW9ydGl6ZWQKKyAgICAgICAgICAgYWNyb3NzIHRoZSBtYW55IGNoYXJhY3RlcnMgdGhhdCBjYWxsIGNvdmVycy4gIFdlIHN0YXJ0IHdpdGggYW4KKyAgICAgICAgICAgaW5saW5lIGxvb3AgYW5kIHVzZSBhIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBmYWxsIGJhY2sKKyAgICAgICAgICAgdG8gYSBmdW5jdGlvbiBjYWxsLiAqLworICAgICAgICBpZiAoKnMgIT0gdTEpIHsKKyAgICAgICAgICAgIGludCBhdHRlbXB0cyA9IDEwOworICAgICAgICAgICAgLyogc2VhcmNoIHUxIGluIGEgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgqcyA9PSB1MSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCEtLWF0dGVtcHRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGlmIHUxIHdhcyBub3QgZm91bmQgZm9yIGF0dGVtcHRzIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHVzZSBGQVNUU0VBUkNIKCkgb3IgbWVtY2hyKCkgKi8KKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMQorICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIHMgPSBtZW1jaHIocywgdTEsIGVuZCAtIHMpOworICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiBjaDEgPSAoU1RSSU5HTElCX0NIQVIpIHUxOworICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIGkgPSBGQVNUU0VBUkNIKHMsIGVuZCAtIHMsICZjaDEsIDEsIDAsIEZBU1RfU0VBUkNIKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzICs9IGk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzdGFydCB0aGUgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKnMgPSB1MjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAppbmRleCA5NDdkZDI4Li4zMWY3N2E3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKQEAgLTM0NSw4ICszNDUsOCBAQAogICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCiAgICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCiAKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGo7CiAgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpzdWI7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAppbmRleCA3YmI5MWE3Li5jZTI3ZjNlIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeUJ5dGVzX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeUJ5dGVzX0NoZWNrRXhhY3QKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAppbmRleCA5MGZhMTI5Li5kZDAwOTc2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaApAQCAtNSwyMSArNSwyMyBAQAogICAgc2hhcmVkIGNvZGUgaW4gYnl0ZXNfbWV0aG9kcy5jIHRvIGN1dCBkb3duIG9uIGR1cGxpY2F0ZSBjb2RlIGJsb2F0LiAgKi8KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLAotIkIuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IGNvcHkgb2YgQlxuXAorIkIuZXhwYW5kdGFicyh0YWJzaXplPTgpIC0+IGNvcHkgb2YgQlxuXAogXG5cCiBSZXR1cm4gYSBjb3B5IG9mIEIgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSBleHBhbmRlZCB1c2luZyBzcGFjZXMuXG5cCiBJZiB0YWJzaXplIGlzIG5vdCBnaXZlbiwgYSB0YWIgc2l6ZSBvZiA4IGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0Kgotc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjb25zdCBjaGFyICplLCAqcDsKICAgICBjaGFyICpxOwogICAgIHNpemVfdCBpLCBqOwogICAgIFB5T2JqZWN0ICp1OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsidGFic2l6ZSIsIDB9OwogICAgIGludCB0YWJzaXplID0gODsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6ZXhwYW5kdGFicyIsICZ0YWJzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6ZXhwYW5kdGFicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdGFic2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogRmlyc3QgcGFzczogZGV0ZXJtaW5lIHNpemUgb2Ygb3V0cHV0IHN0cmluZyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCmluZGV4IGU4YzZmY2IuLmNlMWViNTcgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTMQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKaW5kZXggNDVlNTcyOS4uZjkwMGNiNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1MyCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaAppbmRleCA2NDdhMjdlLi44NmE0ODBmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzQKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaCBiL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKaW5kZXggMDMxMTdlYy4uZjlkM2YxZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCkBAIC02LDcgKzYsNiBAQAogI3VuZGVmICBTVFJJTkdMSUJfU1RSCiAjdW5kZWYgIFNUUklOR0xJQl9MRU4KICN1bmRlZiAgU1RSSU5HTElCX05FVwotI3VuZGVmICBTVFJJTkdMSUJfUkVTSVpFCiAjdW5kZWYgIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZwogI3VuZGVmIFNUUklOR0xJQl9JU19VTklDT0RFCiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCmluZGV4IGQ0NzE5YTUuLmFlYzIyMWEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaApAQCAtNTQzLDcgKzU0Myw3IEBACiAKIHN0YXRpYyBpbnQKIHBhcnNlX2ZpZWxkKFN1YlN0cmluZyAqc3RyLCBTdWJTdHJpbmcgKmZpZWxkX25hbWUsIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsCi0gICAgICAgICAgICBQeV9VQ1M0ICpjb252ZXJzaW9uKQorICAgICAgICAgICAgaW50ICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcsIFB5X1VDUzQgKmNvbnZlcnNpb24pCiB7CiAgICAgLyogTm90ZSB0aGlzIGZ1bmN0aW9uIHdvcmtzIGlmIHRoZSBmaWVsZCBuYW1lIGlzIHplcm8gbGVuZ3RoLAogICAgICAgIHdoaWNoIGlzIGdvb2QuICBaZXJvIGxlbmd0aCBmaWVsZCBuYW1lcyBhcmUgaGFuZGxlZCBsYXRlciwgaW4KQEAgLTU2MSw2ICs1NjEsMTUgQEAKICAgICBmaWVsZF9uYW1lLT5zdGFydCA9IHN0ci0+c3RhcnQ7CiAgICAgd2hpbGUgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgewogICAgICAgICBzd2l0Y2ggKChjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKSkpIHsKKyAgICAgICAgY2FzZSAneyc6CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuZXhwZWN0ZWQgJ3snIGluIGZpZWxkIG5hbWUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgIGZvciAoOyBzdHItPnN0YXJ0IDwgc3RyLT5lbmQ7IHN0ci0+c3RhcnQrKykKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCkgPT0gJ10nKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjYXNlICd9JzoKICAgICAgICAgY2FzZSAnOic6CiAgICAgICAgIGNhc2UgJyEnOgogICAgICAgICAgICAgYnJlYWs7CkBAIC01NzAsNDEgKzU3OSw2MiBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnN0YXJ0IC0gMTsKICAgICBpZiAoYyA9PSAnIScgfHwgYyA9PSAnOicpIHsKKyAgICAgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICAgICAgLyogd2UgaGF2ZSBhIGZvcm1hdCBzcGVjaWZpZXIgYW5kL29yIGEgY29udmVyc2lvbiAqLwogICAgICAgICAvKiBkb24ndCBpbmNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciAqLwotICAgICAgICBmaWVsZF9uYW1lLT5lbmQgPSBzdHItPnN0YXJ0LTE7Ci0KLSAgICAgICAgLyogdGhlIGZvcm1hdCBzcGVjaWZpZXIgaXMgdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAqLwotICAgICAgICBmb3JtYXRfc3BlYy0+c3RyID0gc3RyLT5zdHI7Ci0gICAgICAgIGZvcm1hdF9zcGVjLT5zdGFydCA9IHN0ci0+c3RhcnQ7Ci0gICAgICAgIGZvcm1hdF9zcGVjLT5lbmQgPSBzdHItPmVuZDsKIAogICAgICAgICAvKiBzZWUgaWYgdGhlcmUncyBhIGNvbnZlcnNpb24gc3BlY2lmaWVyICovCiAgICAgICAgIGlmIChjID09ICchJykgewogICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhbm90aGVyIGNoYXJhY3RlciBwcmVzZW50ICovCi0gICAgICAgICAgICBpZiAoZm9ybWF0X3NwZWMtPnN0YXJ0ID49IGZvcm1hdF9zcGVjLT5lbmQpIHsKKyAgICAgICAgICAgIGlmIChzdHItPnN0YXJ0ID49IHN0ci0+ZW5kKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQgb2YgZm9ybWF0IHdoaWxlIGxvb2tpbmcgZm9yIGNvbnZlcnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIHN0cmluZyB3aGlsZSBsb29raW5nIGZvciBjb252ZXJzaW9uICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllciIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKmNvbnZlcnNpb24gPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGZvcm1hdF9zcGVjLT5zdHIsIGZvcm1hdF9zcGVjLT5zdGFydCsrKTsKKyAgICAgICAgICAgICpjb252ZXJzaW9uID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKTsKIAotICAgICAgICAgICAgLyogaWYgdGhlcmUgaXMgYW5vdGhlciBjaGFyYWN0ZXIsIGl0IG11c3QgYmUgYSBjb2xvbiAqLwotICAgICAgICAgICAgaWYgKGZvcm1hdF9zcGVjLT5zdGFydCA8IGZvcm1hdF9zcGVjLT5lbmQpIHsKLSAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihmb3JtYXRfc3BlYy0+c3RyLCBmb3JtYXRfc3BlYy0+c3RhcnQrKyk7CisgICAgICAgICAgICBpZiAoc3RyLT5zdGFydCA8IHN0ci0+ZW5kKSB7CisgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKyk7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ30nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICBpZiAoYyAhPSAnOicpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJzonIGFmdGVyIGZvcm1hdCBzcGVjaWZpZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAnOicgYWZ0ZXIgY29udmVyc2lvbiBzcGVjaWZpZXIiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGZvcm1hdF9zcGVjLT5zdHIgPSBzdHItPnN0cjsKKyAgICAgICAgZm9ybWF0X3NwZWMtPnN0YXJ0ID0gc3RyLT5zdGFydDsKKyAgICAgICAgY291bnQgPSAxOworICAgICAgICB3aGlsZSAoc3RyLT5zdGFydCA8IHN0ci0+ZW5kKSB7CisgICAgICAgICAgICBzd2l0Y2ggKChjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHItPnN0ciwgc3RyLT5zdGFydCsrKSkpIHsKKyAgICAgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgICAgICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcgPSAxOworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgICAgICBjb3VudC0tOworICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjLT5lbmQgPSBzdHItPnN0YXJ0IC0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5tYXRjaGVkICd7JyBpbiBmb3JtYXQgc3BlYyIpOworICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICAvKiBlbmQgb2Ygc3RyaW5nLCB0aGVyZSdzIG5vIGZvcm1hdF9zcGVjIG9yIGNvbnZlcnNpb24gKi8KLSAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydDsKKyAgICBlbHNlIGlmIChjICE9ICd9JykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImV4cGVjdGVkICd9JyBiZWZvcmUgZW5kIG9mIHN0cmluZyIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICByZXR1cm4gMTsKIH0KQEAgLTYzOCwxMCArNjY4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgU3ViU3RyaW5nICpmb3JtYXRfc3BlYywgUHlfVUNTNCAqY29udmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgaW50ICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpCiB7Ci0gICAgaW50IGF0X2VuZCwgaGl0X2Zvcm1hdF9zcGVjOworICAgIGludCBhdF9lbmQ7CiAgICAgUHlfVUNTNCBjID0gMDsKICAgICBQeV9zc2l6ZV90IHN0YXJ0OwotICAgIGludCBjb3VudDsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgbWFya3VwX2ZvbGxvd3MgPSAwOwogCkBAIC03MTMsNTIgKzc0MiwxMiBAQAogICAgIGlmICghbWFya3VwX2ZvbGxvd3MpCiAgICAgICAgIHJldHVybiAyOwogCi0gICAgLyogdGhpcyBpcyBtYXJrdXAsIGZpbmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIGJ5IGNvdW50aW5nIG5lc3RlZAotICAgICAgIGJyYWNlcy4gIG5vdGUgdGhhdCB0aGlzIHByb2hpYml0cyBlc2NhcGVkIGJyYWNlcywgc28gdGhhdAotICAgICAgIGZvcm1hdF9zcGVjcyBjYW5ub3QgaGF2ZSBicmFjZXMgaW4gdGhlbS4gKi8KKyAgICAvKiB0aGlzIGlzIG1hcmt1cDsgcGFyc2UgdGhlIGZpZWxkICovCiAgICAgKmZpZWxkX3ByZXNlbnQgPSAxOwotICAgIGNvdW50ID0gMTsKLQotICAgIHN0YXJ0ID0gc2VsZi0+c3RyLnN0YXJ0OwotCi0gICAgLyogd2Uga25vdyB3ZSBjYW4ndCBoYXZlIGEgemVybyBsZW5ndGggc3RyaW5nLCBzbyBkb24ndCB3b3JyeQotICAgICAgIGFib3V0IHRoYXQgY2FzZSAqLwotICAgIGhpdF9mb3JtYXRfc3BlYyA9IDA7Ci0gICAgd2hpbGUgKHNlbGYtPnN0ci5zdGFydCA8IHNlbGYtPnN0ci5lbmQpIHsKLSAgICAgICAgc3dpdGNoIChjID0gUHlVbmljb2RlX1JFQURfQ0hBUihzZWxmLT5zdHIuc3RyLCBzZWxmLT5zdHIuc3RhcnQrKykpIHsKLSAgICAgICAgY2FzZSAnOic6Ci0gICAgICAgICAgICBpZiAoIWhpdF9mb3JtYXRfc3BlYykgewotICAgICAgICAgICAgICAgIGNvdW50ID0gMTsKLSAgICAgICAgICAgICAgICBoaXRfZm9ybWF0X3NwZWMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3snOgotICAgICAgICAgICAgLyogdGhlIGZvcm1hdCBzcGVjIG5lZWRzIHRvIGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkLgotICAgICAgICAgICAgICAgdGhpcyBpcyBhbiBvcHRpbWl6YXRpb24sIGFuZCBub3Qgc3RyaWN0bHkgbmVlZGVkICovCi0gICAgICAgICAgICBpZiAoaGl0X2Zvcm1hdF9zcGVjKQotICAgICAgICAgICAgICAgICpmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcgPSAxOwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd9JzoKLSAgICAgICAgICAgIGNvdW50LS07Ci0gICAgICAgICAgICBpZiAoY291bnQgPD0gMCkgewotICAgICAgICAgICAgICAgIC8qIHdlJ3JlIGRvbmUuICBwYXJzZSBhbmQgZ2V0IG91dCAqLwotICAgICAgICAgICAgICAgIFN1YlN0cmluZyBzOwotCi0gICAgICAgICAgICAgICAgU3ViU3RyaW5nX2luaXQoJnMsIHNlbGYtPnN0ci5zdHIsIHN0YXJ0LCBzZWxmLT5zdHIuc3RhcnQgLSAxKTsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VfZmllbGQoJnMsIGZpZWxkX25hbWUsIGZvcm1hdF9zcGVjLCBjb252ZXJzaW9uKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogZW5kIG9mIHN0cmluZyB3aGlsZSBzZWFyY2hpbmcgZm9yIG1hdGNoaW5nICd9JyAqLwotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5tYXRjaGVkICd7JyBpbiBmb3JtYXQiKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIXBhcnNlX2ZpZWxkKCZzZWxmLT5zdHIsIGZpZWxkX25hbWUsIGZvcm1hdF9zcGVjLAorICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBjb252ZXJzaW9uKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDI7CiB9CiAKIApAQCAtODc3LDI1ICs4NjYsMTkgQEAKICAgICBTdWJTdHJpbmcgbGl0ZXJhbDsKICAgICBTdWJTdHJpbmcgZmllbGRfbmFtZTsKICAgICBTdWJTdHJpbmcgZm9ybWF0X3NwZWM7Ci0gICAgUHlfVUNTNCBjb252ZXJzaW9uLCBtYXhjaGFyOwotICAgIFB5X3NzaXplX3Qgc3VibGVuOwotICAgIGludCBlcnI7CisgICAgUHlfVUNTNCBjb252ZXJzaW9uOwogCiAgICAgTWFya3VwSXRlcmF0b3JfaW5pdCgmaXRlciwgaW5wdXQtPnN0ciwgaW5wdXQtPnN0YXJ0LCBpbnB1dC0+ZW5kKTsKICAgICB3aGlsZSAoKHJlc3VsdCA9IE1hcmt1cEl0ZXJhdG9yX25leHQoJml0ZXIsICZsaXRlcmFsLCAmZmllbGRfcHJlc2VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpZWxkX25hbWUsICZmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmb3JtYXRfc3BlY19uZWVkc19leHBhbmRpbmcpKSA9PSAyKSB7Ci0gICAgICAgIHN1YmxlbiA9IGxpdGVyYWwuZW5kIC0gbGl0ZXJhbC5zdGFydDsKLSAgICAgICAgaWYgKHN1YmxlbikgewotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIobGl0ZXJhbC5zdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0YXJ0LCBsaXRlcmFsLmVuZCk7Ci0gICAgICAgICAgICBlcnIgPSBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBzdWJsZW4sIG1heGNoYXIpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAtMSkKKyAgICAgICAgaWYgKGxpdGVyYWwuZW5kICE9IGxpdGVyYWwuc3RhcnQpIHsKKyAgICAgICAgICAgIGlmICghZmllbGRfcHJlc2VudCAmJiBpdGVyLnN0ci5zdGFydCA9PSBpdGVyLnN0ci5lbmQpCisgICAgICAgICAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcod3JpdGVyLCBsaXRlcmFsLnN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwuc3RhcnQsIGxpdGVyYWwuZW5kKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0ciwgbGl0ZXJhbC5zdGFydCwgc3VibGVuKTsKLSAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IHN1YmxlbjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChmaWVsZF9wcmVzZW50KSB7CkBAIC05MjAsNyArOTAzLDYgQEAKICAgICAgICAgICAgICBpbnQgcmVjdXJzaW9uX2RlcHRoLCBBdXRvTnVtYmVyICphdXRvX251bWJlcikKIHsKICAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKLSAgICBQeV9zc2l6ZV90IG1pbmxlbjsKIAogICAgIC8qIGNoZWNrIHRoZSByZWN1cnNpb24gbGV2ZWwgKi8KICAgICBpZiAocmVjdXJzaW9uX2RlcHRoIDw9IDApIHsKQEAgLTkyOSw4ICs5MTEsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBtaW5sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbnB1dC0+c3RyKSArIDEwMDsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgbWlubGVuKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbnB1dC0+c3RyKSArIDEwMDsKIAogICAgIGlmICghZG9fbWFya3VwKGlucHV0LCBhcmdzLCBrd2FyZ3MsICZ3cml0ZXIsIHJlY3Vyc2lvbl9kZXB0aCwKICAgICAgICAgICAgICAgICAgICBhdXRvX251bWJlcikpIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCmluZGV4IGYxNmYyMWUuLjNkYjU2MjkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaApAQCAtMjEsMTcgKzIxLDExIEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIFB5VW5pY29kZV9SZXNpemUKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAwMDAwMAotI2RlZmluZSBTVFJJTkdMSUJfVE9TVFIgICAgICAgICAgUHlPYmplY3RfVW5pY29kZQotI2RlZmluZSBTVFJJTkdMSUJfVE9BU0NJSSAgICAgICAgUHlPYmplY3RfUmVwcgotI2Vsc2UKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgogI2RlZmluZSBTVFJJTkdMSUJfVE9BU0NJSSAgICAgICAgUHlPYmplY3RfQVNDSUkKLSNlbmRpZgogCiAjZGVmaW5lIFNUUklOR0xJQl9XQU5UX0NPTlRBSU5TX09CSiAxCiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RydWN0c2VxLmMgYi9PYmplY3RzL3N0cnVjdHNlcS5jCmluZGV4IGMzYjlhNzIuLjY2NDM0NGIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RydWN0c2VxLmMKKysrIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwpAQCAtMTEsMTcgKzExLDIwIEBACiAvKiBGaWVsZHMgd2l0aCB0aGlzIG5hbWUgaGF2ZSBvbmx5IGEgZmllbGQgaW5kZXgsIG5vdCBhIGZpZWxkIG5hbWUuCiAgICBUaGV5IGFyZSBvbmx5IGFsbG93ZWQgZm9yIGluZGljZXMgPCBuX3Zpc2libGVfZmllbGRzLiAqLwogY2hhciAqUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQgPSAidW5uYW1lZCBmaWVsZCI7CitfUHlfSURFTlRJRklFUihuX3NlcXVlbmNlX2ZpZWxkcyk7CitfUHlfSURFTlRJRklFUihuX2ZpZWxkcyk7CitfUHlfSURFTlRJRklFUihuX3VubmFtZWRfZmllbGRzKTsKIAogI2RlZmluZSBWSVNJQkxFX1NJWkUob3ApIFB5X1NJWkUob3ApCiAjZGVmaW5lIFZJU0lCTEVfU0laRV9UUCh0cCkgUHlMb25nX0FzTG9uZyggXAotICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKCh0cCktPnRwX2RpY3QsIHZpc2libGVfbGVuZ3RoX2tleSkpCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGljdF9HZXRJdGVtSWQoKHRwKS0+dHBfZGljdCwgJlB5SWRfbl9zZXF1ZW5jZV9maWVsZHMpKQogCiAjZGVmaW5lIFJFQUxfU0laRV9UUCh0cCkgUHlMb25nX0FzTG9uZyggXAotICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKCh0cCktPnRwX2RpY3QsIHJlYWxfbGVuZ3RoX2tleSkpCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGljdF9HZXRJdGVtSWQoKHRwKS0+dHBfZGljdCwgJlB5SWRfbl9maWVsZHMpKQogI2RlZmluZSBSRUFMX1NJWkUob3ApIFJFQUxfU0laRV9UUChQeV9UWVBFKG9wKSkKIAogI2RlZmluZSBVTk5BTUVEX0ZJRUxEU19UUCh0cCkgUHlMb25nX0FzTG9uZyggXAotICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKCh0cCktPnRwX2RpY3QsIHVubmFtZWRfZmllbGRzX2tleSkpCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGljdF9HZXRJdGVtSWQoKHRwKS0+dHBfZGljdCwgJlB5SWRfbl91bm5hbWVkX2ZpZWxkcykpCiAjZGVmaW5lIFVOTkFNRURfRklFTERTKG9wKSBVTk5BTUVEX0ZJRUxEU19UUChQeV9UWVBFKG9wKSkKIAogCkBAIC01OSw3ICs2Miw3IEBACiBzdHJ1Y3RzZXFfZGVhbGxvYyhQeVN0cnVjdFNlcXVlbmNlICpvYmopCiB7CiAgICAgUHlfc3NpemVfdCBpLCBzaXplOwotICAgIAorCiAgICAgc2l6ZSA9IFJFQUxfU0laRShvYmopOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUHlfWERFQ1JFRihvYmotPm9iX2l0ZW1baV0pOwpAQCAtMjMwLDggKzIzMyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc3RydWN0c2VxX3JlZHVjZShQeVN0cnVjdFNlcXVlbmNlKiBzZWxmKQogewotICAgIFB5T2JqZWN0KiB0dXA7Ci0gICAgUHlPYmplY3QqIGRpY3Q7CisgICAgUHlPYmplY3QqIHR1cCA9IE5VTEw7CisgICAgUHlPYmplY3QqIGRpY3QgPSBOVUxMOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAgICAgUHlfc3NpemVfdCBuX2ZpZWxkcywgbl92aXNpYmxlX2ZpZWxkcywgbl91bm5hbWVkX2ZpZWxkczsKICAgICBpbnQgaTsKQEAgLTI0MCwxNSArMjQzLDEyIEBACiAgICAgbl92aXNpYmxlX2ZpZWxkcyA9IFZJU0lCTEVfU0laRShzZWxmKTsKICAgICBuX3VubmFtZWRfZmllbGRzID0gVU5OQU1FRF9GSUVMRFMoc2VsZik7CiAgICAgdHVwID0gUHlUdXBsZV9OZXcobl92aXNpYmxlX2ZpZWxkcyk7Ci0gICAgaWYgKCF0dXApIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghdHVwKQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgZGljdCA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoIWRpY3QpIHsKLSAgICAgICAgUHlfREVDUkVGKHR1cCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIWRpY3QpCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgbl92aXNpYmxlX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5vYl9pdGVtW2ldKTsKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCiAgICAgZm9yICg7IGkgPCBuX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIGNoYXIgKm4gPSBQeV9UWVBFKHNlbGYpLT50cF9tZW1iZXJzW2ktbl91bm5hbWVkX2ZpZWxkc10ubmFtZTsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfaXRlbVtpXSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBuLCBzZWxmLT5vYl9pdGVtW2ldKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIihPKE9PKSkiLCBQeV9UWVBFKHNlbGYpLCB0dXAsIGRpY3QpOwpAQCAtMjY3LDYgKzI2NywxMSBAQAogICAgIFB5X0RFQ1JFRihkaWN0KTsKIAogICAgIHJldHVybiByZXN1bHQ7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYodHVwKTsKKyAgICBQeV9YREVDUkVGKGRpY3QpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgc3RydWN0c2VxX21ldGhvZHNbXSA9IHsKQEAgLTMxNSwxMiArMzIwLDEzIEBACiAgICAgc3RydWN0c2VxX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CiAKLXZvaWQKLVB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCitpbnQKK1B5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQogewogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5TWVtYmVyRGVmKiBtZW1iZXJzOwogICAgIGludCBuX21lbWJlcnMsIG5fdW5uYW1lZF9tZW1iZXJzLCBpLCBrOworICAgIFB5T2JqZWN0ICp2OwogCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogICAgIC8qIGlmIHRoZSB0eXBlIG9iamVjdCB3YXMgY2hhaW5lZCwgdW5jaGFpbiBpdCBmaXJzdApAQCAtMzQyLDggKzM0OCwxMCBAQAogICAgIHR5cGUtPnRwX2RvYyA9IGRlc2MtPmRvYzsKIAogICAgIG1lbWJlcnMgPSBQeU1lbV9ORVcoUHlNZW1iZXJEZWYsIG5fbWVtYmVycy1uX3VubmFtZWRfbWVtYmVycysxKTsKLSAgICBpZiAobWVtYmVycyA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgaWYgKG1lbWJlcnMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgZm9yIChpID0gayA9IDA7IGkgPCBuX21lbWJlcnM7ICsraSkgewogICAgICAgICBpZiAoZGVzYy0+ZmllbGRzW2ldLm5hbWUgPT0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQpCkBAIC0zNjEsMzAgKzM2OSw1NiBAQAogICAgIHR5cGUtPnRwX21lbWJlcnMgPSBtZW1iZXJzOwogCiAgICAgaWYgKFB5VHlwZV9SZWFkeSh0eXBlKSA8IDApCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0lOQ1JFRih0eXBlKTsKIAogICAgIGRpY3QgPSB0eXBlLT50cF9kaWN0OwogI2RlZmluZSBTRVRfRElDVF9GUk9NX0lOVChrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7ICAgICAgICAgICAgXAotICAgICAgICBpZiAodiAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIGtleSwgdik7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBrZXksIHYpIDwgMCkgeyAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeV9ERUNSRUYodik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogCiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQodmlzaWJsZV9sZW5ndGhfa2V5LCBkZXNjLT5uX2luX3NlcXVlbmNlKTsKICAgICBTRVRfRElDVF9GUk9NX0lOVChyZWFsX2xlbmd0aF9rZXksIG5fbWVtYmVycyk7CiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQodW5uYW1lZF9maWVsZHNfa2V5LCBuX3VubmFtZWRfbWVtYmVycyk7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZAorUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKK3sKKyAgICAodm9pZClQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMih0eXBlLCBkZXNjKTsKIH0KIAogUHlUeXBlT2JqZWN0KgogUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKIHsKLSAgICBQeVR5cGVPYmplY3QgKnJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZShyZXN1bHQsIGRlc2MpOworICAgIFB5VHlwZU9iamVjdCAqcmVzdWx0OworCisgICAgcmVzdWx0ID0gKFB5VHlwZU9iamVjdCopUHlUeXBlX0dlbmVyaWNBbGxvYygmUHlUeXBlX1R5cGUsIDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKHJlc3VsdCwgZGVzYykgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworaW50IF9QeVN0cnVjdFNlcXVlbmNlX0luaXQodm9pZCkKK3sKKyAgICBpZiAoX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbl9zZXF1ZW5jZV9maWVsZHMpID09IE5VTEwKKyAgICAgICAgfHwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbl9maWVsZHMpID09IE5VTEwKKyAgICAgICAgfHwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfbl91bm5hbWVkX2ZpZWxkcykgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKaW5kZXggZWMzZjkxYi4uNTYyNWE2NSAxMDA2NDQKLS0tIGEvT2JqZWN0cy90dXBsZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwpAQCAtNjMsOSArNjMsOSBAQAogfQogCiBQeU9iamVjdCAqCi1QeVR1cGxlX05ldyhyZWdpc3RlciBQeV9zc2l6ZV90IHNpemUpCitQeVR1cGxlX05ldyhQeV9zc2l6ZV90IHNpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqb3A7CisgICAgUHlUdXBsZU9iamVjdCAqb3A7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTEyMiw3ICsxMjIsNyBAQAogfQogCiBQeV9zc2l6ZV90Ci1QeVR1cGxlX1NpemUocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlUdXBsZV9TaXplKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMTMzLDcgKzEzMyw3IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5VHVwbGVfR2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK1B5VHVwbGVfR2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKIH0KIAogaW50Ci1QeVR1cGxlX1NldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICpuZXdpdGVtKQorUHlUdXBsZV9TZXRJdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqbmV3aXRlbSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2xkaXRlbTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlPYmplY3QgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKipwOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhvcCkgfHwgb3AtPm9iX3JlZmNudCAhPSAxKSB7CiAgICAgICAgIFB5X1hERUNSRUYobmV3aXRlbSk7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwpAQCAtMjI0LDEwICsyMjQsMTAgQEAKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKLXR1cGxlZGVhbGxvYyhyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpvcCkKK3R1cGxlZGVhbGxvYyhQeVR1cGxlT2JqZWN0ICpvcCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBsZW4gPSAgUHlfU0laRShvcCk7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5X3NzaXplX3QgbGVuID0gIFB5X1NJWkUob3ApOwogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sob3ApOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfQkVHSU4ob3ApCiAgICAgaWYgKGxlbiA+IDApIHsKQEAgLTI1NSwyMCArMjU1LDEyIEBACiB0dXBsZXJlcHIoUHlUdXBsZU9iamVjdCAqdikKIHsKICAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgUHlPYmplY3QgKnMgPSBOVUxMOwotICAgIF9QeUFjY3UgYWNjOwotICAgIHN0YXRpYyBQeU9iamVjdCAqc2VwID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIG4gPSBQeV9TSVpFKHYpOwogICAgIGlmIChuID09IDApCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiKCkiKTsKIAotICAgIGlmIChzZXAgPT0gTlVMTCkgewotICAgICAgICBzZXAgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLCAiKTsKLSAgICAgICAgaWYgKHNlcCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCiAgICAgLyogV2hpbGUgbm90IG11dGFibGUsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIGVuZCB1cCB3aXRoIGEgY3ljbGUgaW4gYQogICAgICAgIHR1cGxlIHRocm91Z2ggYW4gb2JqZWN0IHRoYXQgc3RvcmVzIGl0c2VsZiB3aXRoaW4gYSB0dXBsZSAoYW5kIHRodXMKICAgICAgICBpbmZpbml0ZWx5IGFza3MgZm9yIHRoZSByZXByIG9mIGl0c2VsZikuIFRoaXMgc2hvdWxkIG9ubHkgYmUKQEAgLTI3OCw0MCArMjcwLDU4IEBACiAgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIoLi4uKSIpIDogTlVMTDsKICAgICB9CiAKLSAgICBpZiAoX1B5QWNjdV9Jbml0KCZhY2MpKQotICAgICAgICBnb3RvIGVycm9yOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICBpZiAoUHlfU0laRSh2KSA+IDEpIHsKKyAgICAgICAgLyogIigiICsgIjEiICsgIiwgMiIgKiAobGVuIC0gMSkgKyAiKSIgKi8KKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAxICsgMSArICgyICsgMSkgKiAoUHlfU0laRSh2KSAtIDEpICsgMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qICIoMSwpIiAqLworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IDQ7CisgICAgfQogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIoIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICcoJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2ggZWxlbWVudC4gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIFB5T2JqZWN0ICpzOworCisgICAgICAgIGlmIChpID4gMCkgeworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiLCAiLCAyKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBnZXR0aW5nIHRoZSByZXByIG9mIGEgdHVwbGUiKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHYtPm9iX2l0ZW1baV0pOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKGkgPiAwICYmIF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzZXApKQorICAgICAgICBpZiAocyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUihzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgfQotICAgIGlmIChuID4gMSkKLSAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIpIik7Ci0gICAgZWxzZQotICAgICAgICBzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwpIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIocyk7CisKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICBpZiAobiA+IDEpIHsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICcpJykgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwpIiwgMikgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7Ci0gICAgcmV0dXJuIF9QeUFjY3VfRmluaXNoKCZhY2MpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogZXJyb3I6Ci0gICAgX1B5QWNjdV9EZXN0cm95KCZhY2MpOwotICAgIFB5X1hERUNSRUYocyk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKil2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTMyMiwxNSArMzMyLDE4IEBACiAKICAgICAgMTA4MjUyNywgMTE2NTA0OSwgMTA4MjUzMSwgMTE2NTA1NywgMTI0NzU4MSwgMTMzMDEwMywgMTA4MjUzMywKICAgICAgMTMzMDExMSwgMTQxMjYzMywgMTE2NTA2OSwgMTI0NzU5OSwgMTQ5NTE3NywgMTU3NzY5OQorCisgICBUZXN0cyBoYXZlIHNob3duIHRoYXQgaXQncyBub3Qgd29ydGggdG8gY2FjaGUgdGhlIGhhc2ggdmFsdWUsIHNlZQorICAgaXNzdWUgIzk2ODUuCiAqLwogCiBzdGF0aWMgUHlfaGFzaF90CiB0dXBsZWhhc2goUHlUdXBsZU9iamVjdCAqdikKIHsKLSAgICByZWdpc3RlciBQeV91aGFzaF90IHg7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KLSAgICByZWdpc3RlciBQeV9oYXNoX3QgeTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGxlbiA9IFB5X1NJWkUodik7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5X3VoYXNoX3QgeDsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIFB5X2hhc2hfdCB5OworICAgIFB5X3NzaXplX3QgbGVuID0gUHlfU0laRSh2KTsKKyAgICBQeU9iamVjdCAqKnA7CiAgICAgUHlfdWhhc2hfdCBtdWx0ID0gX1B5SEFTSF9NVUxUSVBMSUVSOwogICAgIHggPSAweDM0NTY3OFVMOwogICAgIHAgPSB2LT5vYl9pdGVtOwpAQCAtMzY3LDcgKzM4MCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10dXBsZWl0ZW0ocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQordHVwbGVpdGVtKFB5VHVwbGVPYmplY3QgKmEsIFB5X3NzaXplX3QgaSkKIHsKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAidHVwbGUgaW5kZXggb3V0IG9mIHJhbmdlIik7CkBAIC0zNzgsMTIgKzM5MSwxMiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVzbGljZShyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IGlsb3csCi0gICAgICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaWhpZ2gpCit0dXBsZXNsaWNlKFB5VHVwbGVPYmplY3QgKmEsIFB5X3NzaXplX3QgaWxvdywKKyAgICAgICAgICAgUHlfc3NpemVfdCBpaGlnaCkKIHsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpucDsKKyAgICBQeVR1cGxlT2JqZWN0ICpucDsKICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaWYgKGlsb3cgPCAwKQogICAgICAgICBpbG93ID0gMDsKQEAgLTQyMCwxMCArNDMzLDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10dXBsZWNvbmNhdChyZWdpc3RlciBQeVR1cGxlT2JqZWN0ICphLCByZWdpc3RlciBQeU9iamVjdCAqYmIpCit0dXBsZWNvbmNhdChQeVR1cGxlT2JqZWN0ICphLCBQeU9iamVjdCAqYmIpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CiAgICAgUHlUdXBsZU9iamVjdCAqbnA7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGJiKSkgewpAQCAtODMzLDggKzg0Niw4IEBACiBpbnQKIF9QeVR1cGxlX1Jlc2l6ZShQeU9iamVjdCAqKnB2LCBQeV9zc2l6ZV90IG5ld3NpemUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICpzdjsKKyAgICBQeVR1cGxlT2JqZWN0ICp2OworICAgIFB5VHVwbGVPYmplY3QgKnN2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IG9sZHNpemU7CiAKQEAgLTkyNyw3ICs5NDAsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIGxvbmcgaXRfaW5kZXg7CisgICAgUHlfc3NpemVfdCBpdF9pbmRleDsKICAgICBQeVR1cGxlT2JqZWN0ICppdF9zZXE7IC8qIFNldCB0byBOVUxMIHdoZW4gaXRlcmF0b3IgaXMgZXhoYXVzdGVkICovCiB9IHR1cGxlaXRlcm9iamVjdDsKIApAQCAtOTg1LDcgKzk5OCw3IEBACiB0dXBsZWl0ZXJfcmVkdWNlKHR1cGxlaXRlcm9iamVjdCAqaXQpCiB7CiAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbCIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKE8pbiIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTigoKSkiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpKTsKQEAgLTk5NCw3ICsxMDA3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0dXBsZWl0ZXJfc2V0c3RhdGUodHVwbGVpdGVyb2JqZWN0ICppdCwgUHlPYmplY3QgKnN0YXRlKQogewotICAgIGxvbmcgaW5kZXggPSBQeUxvbmdfQXNMb25nKHN0YXRlKTsKKyAgICBQeV9zc2l6ZV90IGluZGV4ID0gUHlMb25nX0FzU3NpemVfdChzdGF0ZSk7CiAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChpdC0+aXRfc2VxICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvdHlwZW9iamVjdC5jIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKaW5kZXggODg1MWZhZS4uNTMwNjcwZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy90eXBlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90eXBlb2JqZWN0LmMKQEAgLTM1LDE1ICszNSwyMSBAQAogc3RhdGljIHN0cnVjdCBtZXRob2RfY2FjaGVfZW50cnkgbWV0aG9kX2NhY2hlWzEgPDwgTUNBQ0hFX1NJWkVfRVhQXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmV4dF92ZXJzaW9uX3RhZyA9IDA7CiAKKy8qIGFscGhhYmV0aWNhbCBvcmRlciAqLworX1B5X0lERU5USUZJRVIoX19hYnN0cmFjdG1ldGhvZHNfXyk7CiBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOworX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogX1B5X0lERU5USUZJRVIoX19kb2NfXyk7Ci1fUHlfSURFTlRJRklFUihfX2dldGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2dldGF0dHJpYnV0ZV9fKTsKK19QeV9JREVOVElGSUVSKF9fZ2V0aXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9faGFzaF9fKTsKK19QeV9JREVOVElGSUVSKF9fbGVuX18pOwogX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CiBfUHlfSURFTlRJRklFUihfX25ld19fKTsKK19QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIHNsb3RfdHBfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKQEAgLTk0LDE2ICsxMDAsMTcgQEAKICAgICAgICBuZWVkZWQuCiAgICAgICovCiAgICAgUHlPYmplY3QgKnJhdywgKnJlZjsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0eXBlLCBQeV9UUEZMQUdTX1ZBTElEX1ZFUlNJT05fVEFHKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmF3ID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAocmF3ICE9IE5VTEwpIHsKLSAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShyYXcpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0ocmF3LCBpKTsKKyAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHJhdykpOworICAgICAgICBpID0gMDsKKyAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHJhdywgJmksIE5VTEwsICZyZWYpKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICAgICAgcmVmID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgICAgIGlmIChyZWYgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5VHlwZV9Nb2RpZmllZCgoUHlUeXBlT2JqZWN0ICopcmVmKTsKQEAgLTMzNiwxMSArMzQzLDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHlwZV9tb2R1bGUoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQogewotICAgIFB5T2JqZWN0ICptb2Q7CiAgICAgY2hhciAqczsKIAogICAgIGlmICh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpIHsKLSAgICAgICAgbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXyk7CisgICAgICAgIFB5T2JqZWN0ICptb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fKTsKICAgICAgICAgaWYgKCFtb2QpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fbW9kdWxlX18iKTsKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzQ5LDExICszNTUsMTQgQEAKICAgICAgICAgcmV0dXJuIG1vZDsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpuYW1lOwogICAgICAgICBzID0gc3RycmNocih0eXBlLT50cF9uYW1lLCAnLicpOwogICAgICAgICBpZiAocyAhPSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCAoUHlfc3NpemVfdCkocyAtIHR5cGUtPnRwX25hbWUpKTsKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJidWlsdGlucyIpOworICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfYnVpbHRpbnMpOworICAgICAgICBQeV9YSU5DUkVGKG5hbWUpOworICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9CiB9CiAKQEAgLTM3NSw5ICszODQsMTEgQEAKICAgICAvKiB0eXBlIGl0c2VsZiBoYXMgYW4gX19hYnN0cmFjdG1ldGhvZHNfXyBkZXNjcmlwdG9yICh0aGlzKS4gRG9uJ3QgcmV0dXJuCiAgICAgICAgdGhhdC4gKi8KICAgICBpZiAodHlwZSAhPSAmUHlUeXBlX1R5cGUpCi0gICAgICAgIG1vZCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIG1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOwogICAgIGlmICghbW9kKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKKyAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG1lc3NhZ2UpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfWElOQ1JFRihtb2QpOwpAQCAtMzk2LDEzICs0MDcsMTUgQEAKICAgICAgICAgYWJzdHJhY3QgPSBQeU9iamVjdF9Jc1RydWUodmFsdWUpOwogICAgICAgICBpZiAoYWJzdHJhY3QgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIsIHZhbHVlKTsKKyAgICAgICAgcmVzID0gX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXywgdmFsdWUpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYWJzdHJhY3QgPSAwOwotICAgICAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyh0eXBlLT50cF9kaWN0LCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICByZXMgPSBfUHlEaWN0X0RlbEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKICAgICAgICAgaWYgKHJlcyAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fKTsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CkBAIC00MjgsNiArNDQxLDcgQEAKIHN0YXRpYyBpbnQgY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudChQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICosIGNoYXIgKik7CiBzdGF0aWMgaW50IGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QqLCBQeVR5cGVPYmplY3QqKTsKIHN0YXRpYyB2b2lkIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICopOworc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmJhc2VzKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9hbGxfc2xvdHMoUHlUeXBlT2JqZWN0ICopOwogCiB0eXBlZGVmIGludCAoKnVwZGF0ZV9jYWxsYmFjaykoUHlUeXBlT2JqZWN0ICosIHZvaWQgKik7CkBAIC00NDEsMTUgKzQ1NSwxNSBAQAogewogICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7CiAgICAgUHlPYmplY3QgKnJlZiwgKnN1YmNsYXNzZXMsICpvbGRfbXJvOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBzdWJjbGFzc2VzID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAoc3ViY2xhc3NlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHN1YmNsYXNzZXMpKTsKLSAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHN1YmNsYXNzZXMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHN1YmNsYXNzZXMsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChzdWJjbGFzc2VzKSk7CisgICAgaSA9IDA7CisKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKQEAgLTU2OCwxMyArNTgyLDcgQEAKICAgICAvKiBmb3Igbm93LCBzb2QgdGhhdDoganVzdCByZW1vdmUgZnJvbSBhbGwgb2xkX2Jhc2VzLAogICAgICAgIGFkZCB0byBhbGwgbmV3X2Jhc2VzICovCiAKLSAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKG9sZF9iYXNlcykgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBvYiA9IFB5VHVwbGVfR0VUX0lURU0ob2xkX2Jhc2VzLCBpKTsKLSAgICAgICAgaWYgKFB5VHlwZV9DaGVjayhvYikpIHsKLSAgICAgICAgICAgIHJlbW92ZV9zdWJjbGFzcygKLSAgICAgICAgICAgICAgICAoUHlUeXBlT2JqZWN0KilvYiwgdHlwZSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKHR5cGUsIG9sZF9iYXNlcyk7CiAKICAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKHZhbHVlKSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTSh2YWx1ZSwgaSk7CkBAIC03MDQsNyArNzEyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKG1vZCAhPSBOVUxMICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG1vZCwgImJ1aWx0aW5zIikpCisgICAgaWYgKG1vZCAhPSBOVUxMICYmIF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2QsICZQeUlkX2J1aWx0aW5zKSkKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjbGFzcyAnJVUuJVUnPiIsIG1vZCwgbmFtZSk7CiAgICAgZWxzZQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPGNsYXNzICclcyc+IiwgdHlwZS0+dHBfbmFtZSk7CkBAIC03MjYsNiArNzM0LDEzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogdHlwZV9jYWxsKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb29zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIG9iaiA9IHR5cGUtPnRwX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgLyogVWdseSBleGNlcHRpb246IHdoZW4gdGhlIGNhbGwgd2FzIHR5cGUoc29tZXRoaW5nKSwKQEAgLTc0MCwxMCArNzU1LDEyIEBACiAgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShQeV9UWVBFKG9iaiksIHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKLSAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCAmJgotICAgICAgICAgICAgdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICBpZiAodHlwZS0+dHBfaW5pdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpOworICAgICAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBvYmo7CkBAIC03NzAsNyArNzg3LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHR5cGUpOwogCiAgICAgaWYgKHR5cGUtPnRwX2l0ZW1zaXplID09IDApCi0gICAgICAgIFB5T2JqZWN0X0lOSVQob2JqLCB0eXBlKTsKKyAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvYmosIHR5cGUpOwogICAgIGVsc2UKICAgICAgICAgKHZvaWQpIFB5T2JqZWN0X0lOSVRfVkFSKChQeVZhck9iamVjdCAqKW9iaiwgdHlwZSwgbml0ZW1zKTsKIApAQCAtOTAyLDYgKzkxOSw3IEBACiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlLCAqYmFzZTsKICAgICBkZXN0cnVjdG9yIGJhc2VkZWFsbG9jOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgaW50IGhhc19maW5hbGl6ZXI7CiAKICAgICAvKiBFeHRyYWN0IHRoZSB0eXBlOyB3ZSBleHBlY3QgaXQgdG8gYmUgYSBoZWFwIHR5cGUgKi8KICAgICB0eXBlID0gUHlfVFlQRShzZWxmKTsKQEAgLTkxNyw2ICs5MzUsMTAgQEAKICAgICAgICAgICAgY2xlYXJfc2xvdHMoKSwgb3IgREVDUkVGIHRoZSBkaWN0LCBvciBjbGVhciB3ZWFrcmVmcy4gKi8KIAogICAgICAgICAvKiBNYXliZSBjYWxsIGZpbmFsaXplcjsgZXhpdCBlYXJseSBpZiByZXN1cnJlY3RlZCAqLworICAgICAgICBpZiAodHlwZS0+dHBfZmluYWxpemUpIHsKKyAgICAgICAgICAgIGlmIChQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBpZiAodHlwZS0+dHBfZGVsKSB7CiAgICAgICAgICAgICB0eXBlLT50cF9kZWwoc2VsZik7CiAgICAgICAgICAgICBpZiAoc2VsZi0+b2JfcmVmY250ID4gMCkKQEAgLTk2OCwyNSArOTkwLDM2IEBACiAgICAgICAgIGFzc2VydChiYXNlKTsKICAgICB9CiAKLSAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKLSAgICAgICB0aGUgZmluYWxpemVyIChfX2RlbF9fKSwgY2xlYXJpbmcgc2xvdHMsIG9yIGNsZWFyaW5nIHRoZSBpbnN0YW5jZQotICAgICAgIGRpY3QuICovCisgICAgaGFzX2ZpbmFsaXplciA9IHR5cGUtPnRwX2ZpbmFsaXplIHx8IHR5cGUtPnRwX2RlbDsKIAorICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgaWYgKGhhc19maW5hbGl6ZXIpCisgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKKworICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpIDwgMCkgeworICAgICAgICAgICAgLyogUmVzdXJyZWN0ZWQgKi8KKyAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogSWYgd2UgYWRkZWQgYSB3ZWFrbGlzdCwgd2UgY2xlYXIgaXQuICAgICAgRG8gdGhpcyAqYmVmb3JlKiBjYWxsaW5nCisgICAgICAgdHBfZGVsLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlIGRpY3QuICovCiAgICAgaWYgKHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ICYmICFiYXNlLT50cF93ZWFrbGlzdG9mZnNldCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcyhzZWxmKTsKIAotICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCiAgICAgaWYgKHR5cGUtPnRwX2RlbCkgewotICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0soc2VsZik7CiAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCi0gICAgICAgICAgICBnb3RvIGVuZGxhYmVsOyAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikgeworICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICAgICAgLyogTmV3IHdlYWtyZWZzIGNvdWxkIGJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBmaW5hbGl6ZXIgY2FsbC4KLSAgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKLSAgICAgICAgICAgIGZpbmFsaXplcnMgc2luY2UgdGhleSBtaWdodCByZWx5IG9uIHBhcnQgb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCisgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKKyAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGJlaW5nIGZpbmFsaXplZCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiAqLwogICAgICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KSB7CiAgICAgICAgICAgICAvKiBNb2RlbGVkIGFmdGVyIEdFVF9XRUFLUkVGU19MSVNUUFRSKCkgKi8KICAgICAgICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3QgPSAoUHlXZWFrUmVmZXJlbmNlICoqKSBcCkBAIC0xNDQ2LDggKzE0NzksMTAgQEAKICAgICAgICB0aGF0IGlzIG5vdCBpbmNsdWRlZCBpbiBhY2MuCiAgICAgKi8KICAgICByZW1haW4gPSAoaW50ICopUHlNZW1fTUFMTE9DKFNJWkVPRl9JTlQqdG9fbWVyZ2Vfc2l6ZSk7Ci0gICAgaWYgKHJlbWFpbiA9PSBOVUxMKQorICAgIGlmIChyZW1haW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCB0b19tZXJnZV9zaXplOyBpKyspCiAgICAgICAgIHJlbWFpbltpXSA9IDA7CiAKQEAgLTE0NzksNyArMTUxNCw3IEBACiAgICAgICAgIH0KICAgICAgICAgb2sgPSBQeUxpc3RfQXBwZW5kKGFjYywgY2FuZGlkYXRlKTsKICAgICAgICAgaWYgKG9rIDwgMCkgewotICAgICAgICAgICAgUHlNZW1fRnJlZShyZW1haW4pOworICAgICAgICAgICAgUHlNZW1fRlJFRShyZW1haW4pOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0b19tZXJnZV9zaXplOyBqKyspIHsKQEAgLTE5MzksNyArMTk3NCw3IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotbG9uZwordW5zaWduZWQgbG9uZwogUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKICAgICByZXR1cm4gdHlwZS0+dHBfZmxhZ3M7CkBAIC0yMTA4LDcgKzIxNDMsNyBAQAogICAgICAgICAgICAgaWYgKCF2YWxpZF9pZGVudGlmaWVyKHRtcCkpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sodG1wKSk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoIW1heV9hZGRfZGljdCB8fCBhZGRfZGljdCkgewogICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIl9fZGljdF9fIHNsb3QgZGlzYWxsb3dlZDogIgpAQCAtMjEzOSw3ICsyMTc0LDcgQEAKICAgICAgICAgZm9yIChpID0gaiA9IDA7IGkgPCBuc2xvdHM7IGkrKykgewogICAgICAgICAgICAgdG1wID0gUHlUdXBsZV9HRVRfSVRFTShzbG90cywgaSk7CiAgICAgICAgICAgICBpZiAoKGFkZF9kaWN0ICYmCi0gICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fZGljdF9fIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKHRtcCwgJlB5SWRfX19kaWN0X18pID09IDApIHx8CiAgICAgICAgICAgICAgICAgKGFkZF93ZWFrICYmCiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHRtcCwgIl9fd2Vha3JlZl9fIikgPT0gMCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yMjEwLDcgKzIyNDUsNyBAQAogCiAgICAgLyogSW5pdGlhbGl6ZSB0cF9mbGFncyAqLwogICAgIHR5cGUtPnRwX2ZsYWdzID0gUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IRUFQVFlQRSB8Ci0gICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEU7CisgICAgICAgIFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkU7CiAgICAgaWYgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKQogICAgICAgICB0eXBlLT50cF9mbGFncyB8PSBQeV9UUEZMQUdTX0hBVkVfR0M7CiAKQEAgLTIyODAsOCArMjMxNSwxMCBAQAogICAgICAgICAgICAgLyogU2lsZW50bHkgdHJ1bmNhdGUgdGhlIGRvY3N0cmluZyBpZiBpdCBjb250YWlucyBudWxsIGJ5dGVzLiAqLwogICAgICAgICAgICAgbGVuID0gc3RybGVuKGRvY19zdHIpOwogICAgICAgICAgICAgdHBfZG9jID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7Ci0gICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBkb2Nfc3RyLCBsZW4gKyAxKTsKICAgICAgICAgICAgIHR5cGUtPnRwX2RvYyA9IHRwX2RvYzsKICAgICAgICAgfQpAQCAtMjQwMSw3ICsyNDM4LDcgQEAKICAgICBjaGFyICpzOwogICAgIGNoYXIgKnJlc19zdGFydCA9IChjaGFyKilyZXM7CiAgICAgUHlUeXBlX1Nsb3QgKnNsb3Q7Ci0gICAgCisKICAgICAvKiBTZXQgdGhlIHR5cGUgbmFtZSBhbmQgcXVhbG5hbWUgKi8KICAgICBzID0gc3RycmNocihzcGVjLT5uYW1lLCAnLicpOwogICAgIGlmIChzID09IE5VTEwpCkBAIC0yNDIyLDcgKzI0NTksNyBAQAogICAgIHR5cGUtPnRwX25hbWUgPSBzcGVjLT5uYW1lOwogICAgIGlmICghdHlwZS0+dHBfbmFtZSkKICAgICAgICAgZ290byBmYWlsOwotICAgIAorCiAgICAgLyogQWRqdXN0IGZvciBlbXB0eSB0dXBsZSBiYXNlcyAqLwogICAgIGlmICghYmFzZXMpIHsKICAgICAgICAgYmFzZSA9ICZQeUJhc2VPYmplY3RfVHlwZTsKQEAgLTI0ODQsOCArMjUyMSwxMCBAQAogICAgICAgICBpZiAoc2xvdC0+c2xvdCA9PSBQeV90cF9kb2MpIHsKICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc2xvdC0+cGZ1bmMpKzE7CiAgICAgICAgICAgICBjaGFyICp0cF9kb2MgPSBQeU9iamVjdF9NQUxMT0MobGVuKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtY3B5KHRwX2RvYywgc2xvdC0+cGZ1bmMsIGxlbik7CiAgICAgICAgICAgICB0eXBlLT50cF9kb2MgPSB0cF9kb2M7CiAgICAgICAgIH0KQEAgLTI1MDYsNyArMjU0NSw3IEBACiAgICAgLyogU2V0IHR5cGUuX19tb2R1bGVfXyAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgIT0gTlVMTCkKLSAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywgCisgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18sCiAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoCiAgICAgICAgICAgICAgICAgc3BlYy0+bmFtZSwgKFB5X3NzaXplX3QpKHMgLSBzcGVjLT5uYW1lKSkpOwogCkBAIC0yNjk1LDEwICsyNzM0LDE0IEBACiB0eXBlX2RlYWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIFB5SGVhcFR5cGVPYmplY3QgKmV0OworICAgIFB5T2JqZWN0ICp0cCwgKnZhbCwgKnRiOwogCiAgICAgLyogQXNzZXJ0IHRoaXMgaXMgYSBoZWFwLWFsbG9jYXRlZCB0eXBlIG9iamVjdCAqLwogICAgIGFzc2VydCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHR5cGUpOworICAgIFB5RXJyX0ZldGNoKCZ0cCwgJnZhbCwgJnRiKTsKKyAgICByZW1vdmVfYWxsX3N1YmNsYXNzZXModHlwZSwgdHlwZS0+dHBfYmFzZXMpOworICAgIFB5RXJyX1Jlc3RvcmUodHAsIHZhbCwgdGIpOwogICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopdHlwZSk7CiAgICAgZXQgPSAoUHlIZWFwVHlwZU9iamVjdCAqKXR5cGU7CiAgICAgUHlfWERFQ1JFRih0eXBlLT50cF9iYXNlKTsKQEAgLTI3MjMsNyArMjc2Niw3IEBACiB0eXBlX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJnc19pZ25vcmVkKQogewogICAgIFB5T2JqZWN0ICpsaXN0LCAqcmF3LCAqcmVmOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBsaXN0ID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAobGlzdCA9PSBOVUxMKQpAQCAtMjczMSwxMCArMjc3NCw5IEBACiAgICAgcmF3ID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKICAgICBpZiAocmF3ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBsaXN0OwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2socmF3KSk7Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShyYXcpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKHJhdywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHJhdykpOworICAgIGkgPSAwOworICAgIHdoaWxlIChQeURpY3RfTmV4dChyYXcsICZpLCBOVUxMLCAmcmVmKSkgewogICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwogICAgICAgICByZWYgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICBpZiAocmVmICE9IFB5X05vbmUpIHsKQEAgLTI5MjMsOCArMjk2NSw4IEBACiAgICAgICAgICAgIGNsYXNzJ3MgZGljdDsgdGhlIGN5Y2xlIHdpbGwgYmUgYnJva2VuIHRoYXQgd2F5LgogCiAgICAgICAgdHBfc3ViY2xhc3NlczoKLSAgICAgICAgICAgQSBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGU7IGFuZAotICAgICAgICAgICBsaXN0cyBoYXZlIHRoZWlyIG93biB0cF9jbGVhci4KKyAgICAgICAgICAgQSBkaWN0IG9mIHdlYWsgcmVmZXJlbmNlcyBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGU7IGFuZAorICAgICAgICAgICBkaWN0cyBoYXZlIHRoZWlyIG93biB0cF9jbGVhci4KIAogICAgICAgIHNsb3RzIChpbiBQeUhlYXBUeXBlT2JqZWN0KToKICAgICAgICAgICAgQSB0dXBsZSBvZiBzdHJpbmdzIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZS4KQEAgLTMxNDEsNyArMzE4Myw3IEBACiAgICAgICAgIFB5X1hERUNSRUYobW9kKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChtb2QgIT0gTlVMTCAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhtb2QsICJidWlsdGlucyIpKQorICAgIGlmIChtb2QgIT0gTlVMTCAmJiBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kLCAmUHlJZF9idWlsdGlucykpCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JVUuJVUgb2JqZWN0IGF0ICVwPiIsIG1vZCwgbmFtZSwgc2VsZik7CiAgICAgZWxzZQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLApAQCAtMzMxMyw3ICszMzU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18gYXNzaWdubWVudDogb25seSBmb3IgaGVhcCB0eXBlcyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KG5ld3RvLCBvbGR0bywgIl9fY2xhc3NfXyIpKSB7CisgICAgaWYgKGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQob2xkdG8sIG5ld3RvLCAiX19jbGFzc19fIikpIHsKICAgICAgICAgUHlfSU5DUkVGKG5ld3RvKTsKICAgICAgICAgUHlfVFlQRShzZWxmKSA9IG5ld3RvOwogICAgICAgICBQeV9ERUNSRUYob2xkdG8pOwpAQCAtMzM2NiwxNTAgKzM0MDgsNDI5IEBACiAgICAgcmV0dXJuIFB5SW1wb3J0X0ltcG9ydChjb3B5cmVnX3N0cik7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1zbG90bmFtZXMoUHlPYmplY3QgKmNscykKK1B5X0xPQ0FMKFB5T2JqZWN0ICopCitfUHlUeXBlX0dldFNsb3ROYW1lcyhQeVR5cGVPYmplY3QgKmNscykKIHsKLSAgICBQeU9iamVjdCAqY2xzZGljdDsKICAgICBQeU9iamVjdCAqY29weXJlZzsKICAgICBQeU9iamVjdCAqc2xvdG5hbWVzOwogICAgIF9QeV9JREVOVElGSUVSKF9fc2xvdG5hbWVzX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9zbG90bmFtZXMpOwogCi0gICAgY2xzZGljdCA9ICgoUHlUeXBlT2JqZWN0ICopY2xzKS0+dHBfZGljdDsKLSAgICBzbG90bmFtZXMgPSBfUHlEaWN0X0dldEl0ZW1JZChjbHNkaWN0LCAmUHlJZF9fX3Nsb3RuYW1lc19fKTsKLSAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwgJiYgUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKKyAgICBhc3NlcnQoUHlUeXBlX0NoZWNrKGNscykpOworCisgICAgLyogR2V0IHRoZSBzbG90IG5hbWVzIGZyb20gdGhlIGNhY2hlIGluIHRoZSBjbGFzcyBpZiBwb3NzaWJsZS4gKi8KKyAgICBzbG90bmFtZXMgPSBfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvcihjbHMtPnRwX2RpY3QsICZQeUlkX19fc2xvdG5hbWVzX18pOworICAgIGlmIChzbG90bmFtZXMgIT0gTlVMTCkgeworICAgICAgICBpZiAoc2xvdG5hbWVzICE9IFB5X05vbmUgJiYgIVB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMuX19zbG90bmFtZXNfXyBzaG91bGQgYmUgYSBsaXN0IG9yIE5vbmUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLT50cF9uYW1lLCBQeV9UWVBFKHNsb3RuYW1lcyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlfSU5DUkVGKHNsb3RuYW1lcyk7CiAgICAgICAgIHJldHVybiBzbG90bmFtZXM7CiAgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogVGhlIGNsYXNzIGRvZXMgbm90IGhhdmUgdGhlIHNsb3QgbmFtZXMgY2FjaGVkIHlldC4gKi8KKyAgICB9CiAKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKICAgICBpZiAoY29weXJlZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNsb3RuYW1lcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoY29weXJlZywgJlB5SWRfX3Nsb3RuYW1lcywgIk8iLCBjbHMpOworICAgIC8qIFVzZSBfc2xvdG5hbWVzIGZ1bmN0aW9uIGZyb20gdGhlIGNvcHlyZWcgbW9kdWxlIHRvIGZpbmQgdGhlIHNsb3RzCisgICAgICAgYnkgdGhpcyBjbGFzcyBhbmQgaXRzIGJhc2VzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FjaGUgdGhlIHJlc3VsdAorICAgICAgIGluIF9fc2xvdG5hbWVzX18uICovCisgICAgc2xvdG5hbWVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoY29weXJlZywgJlB5SWRfX3Nsb3RuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMsIE5VTEwpOwogICAgIFB5X0RFQ1JFRihjb3B5cmVnKTsKLSAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwgJiYKLSAgICAgICAgc2xvdG5hbWVzICE9IFB5X05vbmUgJiYKLSAgICAgICAgIVB5TGlzdF9DaGVjayhzbG90bmFtZXMpKQotICAgIHsKKyAgICBpZiAoc2xvdG5hbWVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImNvcHlyZWcuX3Nsb3RuYW1lcyBkaWRuJ3QgcmV0dXJuIGEgbGlzdCBvciBOb25lIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fc2xvdG5hbWVzIGRpZG4ndCByZXR1cm4gYSBsaXN0IG9yIE5vbmUiKTsKICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7Ci0gICAgICAgIHNsb3RuYW1lcyA9IE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHVybiBzbG90bmFtZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1yZWR1Y2VfMihQeU9iamVjdCAqb2JqKQorUHlfTE9DQUwoUHlPYmplY3QgKikKK19QeU9iamVjdF9HZXRTdGF0ZShQeU9iamVjdCAqb2JqKQogewotICAgIFB5T2JqZWN0ICpjbHMsICpnZXRuZXdhcmdzOwotICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKmFyZ3MyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZ2V0c3RhdGUgPSBOVUxMLCAqc3RhdGUgPSBOVUxMLCAqbmFtZXMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpzbG90cyA9IE5VTEwsICpsaXN0aXRlbXMgPSBOVUxMLCAqZGljdGl0ZW1zID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEwsICpuZXdvYmogPSBOVUxMLCAqcmVzID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX18pOworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKyAgICBQeU9iamVjdCAqZ2V0c3RhdGU7CiAgICAgX1B5X0lERU5USUZJRVIoX19nZXRzdGF0ZV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKLQotICAgIGNscyA9IChQeU9iamVjdCAqKSBQeV9UWVBFKG9iaik7Ci0KLSAgICBnZXRuZXdhcmdzID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19fKTsKLSAgICBpZiAoZ2V0bmV3YXJncyAhPSBOVUxMKSB7Ci0gICAgICAgIGFyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3MsIE5VTEwpOwotICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJncyk7Ci0gICAgICAgIGlmIChhcmdzICE9IE5VTEwgJiYgIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgotICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKGFyZ3MpLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgfQotICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZW5kOwogCiAgICAgZ2V0c3RhdGUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19nZXRzdGF0ZV9fKTsKLSAgICBpZiAoZ2V0c3RhdGUgIT0gTlVMTCkgeworICAgIGlmIChnZXRzdGF0ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpzbG90bmFtZXM7CisKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBQeU9iamVjdCAqKmRpY3Q7CisgICAgICAgICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsKKyAgICAgICAgICAgIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG9iamVjdCdzIGRpY3QgaXMgbm90IGluaXRpYWxpemVkIAorICAgICAgICAgICAgICAgeWV0LiBJbiB0aGlzIGNhc2UsIHdlIHdpbGwgcmV0dXJuIE5vbmUgZm9yIHRoZSBzdGF0ZS4KKyAgICAgICAgICAgICAgIFdlIGFsc28gcmV0dXJuIE5vbmUgaWYgdGhlIGRpY3QgaXMgZW1wdHkgdG8gbWFrZSB0aGUgYmVoYXZpb3IKKyAgICAgICAgICAgICAgIGNvbnNpc3RlbnQgcmVnYXJkbGVzcyB3aGV0aGVyIHRoZSBkaWN0IHdhcyBpbml0aWFsaXplZCBvciBub3QuCisgICAgICAgICAgICAgICBUaGlzIG1ha2UgdW5pdCB0ZXN0aW5nIGVhc2llci4gKi8KKyAgICAgICAgICAgIGlmIChkaWN0ICE9IE5VTEwgJiYgKmRpY3QgIT0gTlVMTCAmJiBQeURpY3RfU2l6ZSgqZGljdCkgPiAwKSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSAqZGljdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlID0gUHlfTm9uZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBzbG90bmFtZXMgPSBfUHlUeXBlX0dldFNsb3ROYW1lcyhQeV9UWVBFKG9iaikpOworICAgICAgICBpZiAoc2xvdG5hbWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydChzbG90bmFtZXMgPT0gUHlfTm9uZSB8fCBQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSk7CisgICAgICAgIGlmIChzbG90bmFtZXMgIT0gUHlfTm9uZSAmJiBQeV9TSVpFKHNsb3RuYW1lcykgPiAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc2xvdHM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHNsb3RuYW1lc19zaXplLCBpOworCisgICAgICAgICAgICBzbG90cyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgIGlmIChzbG90cyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2xvdG5hbWVzX3NpemUgPSBQeV9TSVpFKHNsb3RuYW1lcyk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xvdG5hbWVzX3NpemU7IGkrKykgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7CisKKyAgICAgICAgICAgICAgICBuYW1lID0gUHlMaXN0X0dFVF9JVEVNKHNsb3RuYW1lcywgaSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBJdCBpcyBub3QgYW4gZXJyb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudC4gKi8KKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShzbG90cywgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogVGhlIGxpc3QgaXMgc3RvcmVkIG9uIHRoZSBjbGFzcyBzbyBpdCBtYXkgbXV0YXRlcyB3aGlsZSB3ZQorICAgICAgICAgICAgICAgICAgIGl0ZXJhdGUgb3ZlciBpdCAqLworICAgICAgICAgICAgICAgIGlmIChzbG90bmFtZXNfc2l6ZSAhPSBQeV9TSVpFKHNsb3RuYW1lcykpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3Nsb3RzbmFtZV9fIGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogV2UgaGFuZGxlIGVycm9ycyB3aXRoaW4gdGhlIGxvb3AgaGVyZS4gKi8KKyAgICAgICAgICAgICAgICBpZiAoMCkgeworICAgICAgICAgICAgICAgICAgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90bmFtZXMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdHMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIHdlIGZvdW5kIHNvbWUgc2xvdCBhdHRyaWJ1dGVzLCBwYWNrIHRoZW0gaW4gYSB0dXBsZSBhbG9uZworICAgICAgICAgICAgICAgdGhlIG9yZ2luYWwgYXR0cmlidXRlIGRpY3Rpb25hcnkuICovCisgICAgICAgICAgICBpZiAoUHlEaWN0X1NpemUoc2xvdHMpID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdGF0ZTI7CisKKyAgICAgICAgICAgICAgICBzdGF0ZTIgPSBQeVR1cGxlX1BhY2soMiwgc3RhdGUsIHNsb3RzKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZTIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN0YXRlID0gc3RhdGUyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICB9CisgICAgZWxzZSB7IC8qIGdldHN0YXRlICE9IE5VTEwgKi8KICAgICAgICAgc3RhdGUgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldHN0YXRlLCBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGdldHN0YXRlKTsKICAgICAgICAgaWYgKHN0YXRlID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKipkaWN0OwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsKLSAgICAgICAgaWYgKGRpY3QgJiYgKmRpY3QpCi0gICAgICAgICAgICBzdGF0ZSA9ICpkaWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGF0ZSA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihzdGF0ZSk7Ci0gICAgICAgIG5hbWVzID0gc2xvdG5hbWVzKGNscyk7Ci0gICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIGlmIChuYW1lcyAhPSBQeV9Ob25lICYmIFB5TGlzdF9HRVRfU0laRShuYW1lcykgPiAwKSB7Ci0gICAgICAgICAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKG5hbWVzKSk7Ci0gICAgICAgICAgICBzbG90cyA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgIGlmIChzbG90cyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgbiA9IDA7Ci0gICAgICAgICAgICAvKiBDYW4ndCBwcmUtY29tcHV0ZSB0aGUgbGlzdCBzaXplOyB0aGUgbGlzdAotICAgICAgICAgICAgICAgaXMgc3RvcmVkIG9uIHRoZSBjbGFzcyBzbyBhY2Nlc3NpYmxlIHRvIG90aGVyCi0gICAgICAgICAgICAgICB0aHJlYWRzLCB3aGljaCBtYXkgYmUgcnVuIGJ5IERFQ1JFRiAqLwotICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShuYW1lcyk7IGkrKykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IFB5TGlzdF9HRVRfSVRFTShuYW1lcywgaSk7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShzbG90cywgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAgICAgICAgICBuKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG4pIHsKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IFB5X0J1aWxkVmFsdWUoIihOTykiLCBzdGF0ZSwgc2xvdHMpOwotICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIH0KKworICAgIHJldHVybiBzdGF0ZTsKK30KKworUHlfTE9DQUwoaW50KQorX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqKmFyZ3MsIFB5T2JqZWN0ICoqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpnZXRuZXdhcmdzLCAqZ2V0bmV3YXJnc19leDsKKyAgICBfUHlfSURFTlRJRklFUihfX2dldG5ld2FyZ3NfZXhfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX18pOworCisgICAgaWYgKGFyZ3MgPT0gTlVMTCB8fCBrd2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFdlIGZpcnN0IGF0dGVtcHQgdG8gZmV0Y2ggdGhlIGFyZ3VtZW50cyBmb3IgX19uZXdfXyBieSBjYWxsaW5nCisgICAgICAgX19nZXRuZXdhcmdzX2V4X18gb24gdGhlIG9iamVjdC4gKi8KKyAgICBnZXRuZXdhcmdzX2V4ID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19leF9fKTsKKyAgICBpZiAoZ2V0bmV3YXJnc19leCAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpuZXdhcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzX2V4LCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3NfZXgpOworICAgICAgICBpZiAobmV3YXJncyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG5ld2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRShuZXdhcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5X1NJWkUobmV3YXJncykgIT0gMikgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIHNob3VsZCByZXR1cm4gYSB0dXBsZSBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCAyLCBub3QgJXpkIiwgUHlfU0laRShuZXdhcmdzKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmFyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKG5ld2FyZ3MsIDApOworICAgICAgICBQeV9JTkNSRUYoKmFyZ3MpOworICAgICAgICAqa3dhcmdzID0gUHlUdXBsZV9HRVRfSVRFTShuZXdhcmdzLCAxKTsKKyAgICAgICAgUHlfSU5DUkVGKCprd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisKKyAgICAgICAgLyogWFhYIFdlIHNob3VsZCBwZXJoYXBzIGFsbG93IE5vbmUgdG8gYmUgcGFzc2VkIGhlcmUuICovCisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjaygqYXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZpcnN0IGl0ZW0gb2YgdGhlIHR1cGxlIHJldHVybmVkIGJ5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gbXVzdCBiZSBhIHR1cGxlLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoKmFyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCphcmdzKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCprd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKCprd2FyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgaXRlbSBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBtdXN0IGJlIGEgZGljdCwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKCprd2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCphcmdzKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKCprd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKworICAgIC8qIFRoZSBvYmplY3QgZG9lcyBub3QgaGF2ZSBfX2dldG5ld2FyZ3NfZXhfXyBzbyB3ZSBmYWxsYmFjayBvbiB1c2luZworICAgICAgIF9fZ2V0bmV3YXJnc19fIGluc3RlYWQuICovCisgICAgZ2V0bmV3YXJncyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2dldG5ld2FyZ3NfXyk7CisgICAgaWYgKGdldG5ld2FyZ3MgIT0gTlVMTCkgeworICAgICAgICAqYXJncyA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZ2V0bmV3YXJncywgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihnZXRuZXdhcmdzKTsKKyAgICAgICAgaWYgKCphcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soKmFyZ3MpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfXyBzaG91bGQgcmV0dXJuIGEgdHVwbGUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclLjIwMHMnIiwgUHlfVFlQRSgqYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICprd2FyZ3MgPSBOVUxMOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisKKyAgICAvKiBUaGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgX19nZXRuZXdhcmdzX2V4X18gYW5kIF9fZ2V0bmV3YXJnc19fLiBUaGlzIG1heQorICAgICAgIG1lYW5zIF9fbmV3X18gZG9lcyBub3QgdGFrZXMgYW55IGFyZ3VtZW50cyBvbiB0aGlzIG9iamVjdCwgb3IgdGhhdCB0aGUKKyAgICAgICBvYmplY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSByZWR1Y2UgcHJvdG9jb2wgZm9yIHBpY2tsaW5nIG9yCisgICAgICAgY29weWluZy4gKi8KKyAgICAqYXJncyA9IE5VTEw7CisgICAgKmt3YXJncyA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKK1B5X0xPQ0FMKGludCkKK19QeU9iamVjdF9HZXRJdGVtc0l0ZXIoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKipsaXN0aXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqZGljdGl0ZW1zKQoreworICAgIGlmIChsaXN0aXRlbXMgPT0gTlVMTCB8fCBkaWN0aXRlbXMgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICghUHlMaXN0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgbGlzdGl0ZW1zID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGxpc3RpdGVtcyk7CisgICAgICAgICpsaXN0aXRlbXMgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYoKmxpc3RpdGVtcyk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBsaXN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7Ci0gICAgICAgIGlmIChsaXN0aXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAqbGlzdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihvYmopOworICAgICAgICBpZiAoKmxpc3RpdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICghUHlEaWN0X0NoZWNrKG9iaikpIHsKLSAgICAgICAgZGljdGl0ZW1zID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKGRpY3RpdGVtcyk7CisgICAgICAgICpkaWN0aXRlbXMgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYoKmRpY3RpdGVtcyk7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CiAgICAgICAgIF9QeV9JREVOVElGSUVSKGl0ZW1zKTsKLSAgICAgICAgUHlPYmplY3QgKml0ZW1zID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChvYmosICZQeUlkX2l0ZW1zLCAiIik7Ci0gICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIGRpY3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOworCisgICAgICAgIGl0ZW1zID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3Mob2JqLCAmUHlJZF9pdGVtcywgTlVMTCk7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUigqbGlzdGl0ZW1zKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqZGljdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihpdGVtcyk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7Ci0gICAgICAgIGlmIChkaWN0aXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICBpZiAoKmRpY3RpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUigqbGlzdGl0ZW1zKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIGFzc2VydCgqbGlzdGl0ZW1zICE9IE5VTEwgJiYgKmRpY3RpdGVtcyAhPSBOVUxMKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcmVkdWNlXzQoUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqYXJncyA9IE5VTEwsICprd2FyZ3MgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb3B5cmVnOworICAgIFB5T2JqZWN0ICpuZXdvYmosICpuZXdhcmdzLCAqc3RhdGUsICpsaXN0aXRlbXMsICpkaWN0aXRlbXM7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9leF9fKTsKKworICAgIGlmIChfUHlPYmplY3RfR2V0TmV3QXJndW1lbnRzKG9iaiwgJmFyZ3MsICZrd2FyZ3MpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGt3YXJncyA9PSBOVUxMKSB7CisgICAgICAgIGt3YXJncyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgaWYgKGt3YXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CisgICAgaWYgKGNvcHlyZWcgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3b2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb3B5cmVnLCAmUHlJZF9fX25ld29ial9leF9fKTsKKyAgICBQeV9ERUNSRUYoY29weXJlZyk7CisgICAgaWYgKG5ld29iaiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZXdhcmdzID0gUHlUdXBsZV9QYWNrKDMsIFB5X1RZUEUob2JqKSwgYXJncywga3dhcmdzKTsKKyAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgUHlfREVDUkVGKGt3YXJncyk7CisgICAgaWYgKG5ld2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN0YXRlID0gX1B5T2JqZWN0X0dldFN0YXRlKG9iaik7CisgICAgaWYgKHN0YXRlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChfUHlPYmplY3RfR2V0SXRlbXNJdGVyKG9iaiwgJmxpc3RpdGVtcywgJmRpY3RpdGVtcykgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjayg1LCBuZXdvYmosIG5ld2FyZ3MsIHN0YXRlLCBsaXN0aXRlbXMsIGRpY3RpdGVtcyk7CisgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgIFB5X0RFQ1JFRihzdGF0ZSk7CisgICAgUHlfREVDUkVGKGxpc3RpdGVtcyk7CisgICAgUHlfREVDUkVGKGRpY3RpdGVtcyk7CisgICAgcmV0dXJuIHJlc3VsdDsgICAgCit9CisKK3N0YXRpYyBQeU9iamVjdCAqCityZWR1Y2VfMihQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICpjbHM7CisgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqYXJnczIgPSBOVUxMLCAqa3dhcmdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RhdGUgPSBOVUxMLCAqbGlzdGl0ZW1zID0gTlVMTCwgKmRpY3RpdGVtcyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMLCAqbmV3b2JqID0gTlVMTCwgKnJlcyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpLCBuOworICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOworCisgICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIGFzc2VydChrd2FyZ3MgPT0gTlVMTCk7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoa3dhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RGljdF9TaXplKGt3YXJncykgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgdXNlIHByb3RvY29sIDQgb3IgZ3JlYXRlciB0byBjb3B5IHRoaXMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3Q7IHNpbmNlIF9fZ2V0bmV3YXJnc19leF9fIHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZCBhcmd1bWVudHMuIik7CisgICAgICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGt3YXJncyk7CisgICAgfQorCisgICAgc3RhdGUgPSBfUHlPYmplY3RfR2V0U3RhdGUob2JqKTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICBpZiAoX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihvYmosICZsaXN0aXRlbXMsICZkaWN0aXRlbXMpIDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKICAgICBpZiAoY29weXJlZyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVuZDsKQEAgLTM1MjEsNiArMzg0Miw3IEBACiAgICAgYXJnczIgPSBQeVR1cGxlX05ldyhuKzEpOwogICAgIGlmIChhcmdzMiA9PSBOVUxMKQogICAgICAgICBnb3RvIGVuZDsKKyAgICBjbHMgPSAoUHlPYmplY3QgKikgUHlfVFlQRShvYmopOwogICAgIFB5X0lOQ1JFRihjbHMpOwogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJnczIsIDAsIGNscyk7CiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMzUzNCw5ICszODU2LDcgQEAKICAgZW5kOgogICAgIFB5X1hERUNSRUYoYXJncyk7CiAgICAgUHlfWERFQ1JFRihhcmdzMik7Ci0gICAgUHlfWERFQ1JFRihzbG90cyk7CiAgICAgUHlfWERFQ1JFRihzdGF0ZSk7Ci0gICAgUHlfWERFQ1JFRihuYW1lcyk7CiAgICAgUHlfWERFQ1JFRihsaXN0aXRlbXMpOwogICAgIFB5X1hERUNSRUYoZGljdGl0ZW1zKTsKICAgICBQeV9YREVDUkVGKGNvcHlyZWcpOwpAQCAtMzU2NCw3ICszODg0LDkgQEAKIHsKICAgICBQeU9iamVjdCAqY29weXJlZywgKnJlczsKIAotICAgIGlmIChwcm90byA+PSAyKQorICAgIGlmIChwcm90byA+PSA0KQorICAgICAgICByZXR1cm4gcmVkdWNlXzQoc2VsZik7CisgICAgZWxzZSBpZiAocHJvdG8gPj0gMikKICAgICAgICAgcmV0dXJuIHJlZHVjZV8yKHNlbGYpOwogCiAgICAgY29weXJlZyA9IGltcG9ydF9jb3B5cmVnKCk7CkBAIC0zNjY5LDE2ICszOTkxLDkgQEAKICAgICAgICAgLyogSXNzdWUgNzk5NDogSWYgd2UncmUgY29udmVydGluZyB0byBhIHN0cmluZywgd2UKICAgICAgICAgICAgc2hvdWxkIHJlamVjdCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgKi8KICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGZvcm1hdF9zcGVjKSA+IDApIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGlzIGRlcHJlY2F0ZWQiLCAxKSA8IDApIHsKLSAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogRXZlbnR1YWxseSB0aGlzIHdpbGwgYmVjb21lIGFuIGVycm9yOgotICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAibm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgcGFzc2VkIHRvIG9iamVjdC5fX2Zvcm1hdF9fIik7Ci0gICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICAqLworICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAKICAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfRm9ybWF0KHNlbGZfYXNfc3RyLCBmb3JtYXRfc3BlYyk7CkBAIC0zODMzLDcgKzQxNDgsNyBAQAogICAgICAgICAgICAgZGVzY3IgPSBQeURlc2NyX05ld0NsYXNzTWV0aG9kKHR5cGUsIG1ldGgpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKG1ldGgtPm1sX2ZsYWdzICYgTUVUSF9TVEFUSUMpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyhtZXRoLCAoUHlPYmplY3QqKXR5cGUpOworICAgICAgICAgIFB5T2JqZWN0ICpjZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KG1ldGgsIChQeU9iamVjdCopdHlwZSwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoY2Z1bmMgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBkZXNjciA9IFB5U3RhdGljTWV0aG9kX05ldyhjZnVuYyk7CkBAIC00MTAzLDYgKzQ0MTgsMTAgQEAKICAgICAgICAgQ09QWVNMT1QodHBfaW5pdCk7CiAgICAgICAgIENPUFlTTE9UKHRwX2FsbG9jKTsKICAgICAgICAgQ09QWVNMT1QodHBfaXNfZ2MpOworICAgICAgICBpZiAoKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSAmJgorICAgICAgICAgICAgKGJhc2UtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSkgeworICAgICAgICAgICAgQ09QWVNMT1QodHBfZmluYWxpemUpOworICAgICAgICB9CiAgICAgICAgIGlmICgodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpID09CiAgICAgICAgICAgICAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpKSB7CiAgICAgICAgICAgICAvKiBUaGV5IGFncmVlIGFib3V0IGdjLiAqLwpAQCAtNDI1NSwxMSArNDU3NCwxNSBAQAogICAgICAgICAgICAgUHlPYmplY3QgKmRvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHR5cGUtPnRwX2RvYyk7CiAgICAgICAgICAgICBpZiAoZG9jID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fZG9jX18sIGRvYyk7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXywgZG9jKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZG9jKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGRvYyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX19kb2NfXywgUHlfTm9uZSk7CisgICAgICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fX2RvY19fLCBQeV9Ob25lKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDMwMywxMyArNDYyNiwxMSBAQAogICAgIC8qIFdhcm4gZm9yIGEgdHlwZSB0aGF0IGltcGxlbWVudHMgdHBfY29tcGFyZSAobm93IGtub3duIGFzCiAgICAgICAgdHBfcmVzZXJ2ZWQpIGJ1dCBub3QgdHBfcmljaGNvbXBhcmUuICovCiAgICAgaWYgKHR5cGUtPnRwX3Jlc2VydmVkICYmICF0eXBlLT50cF9yaWNoY29tcGFyZSkgewotICAgICAgICBpbnQgZXJyb3I7Ci0gICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIDEsCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZGVmaW5lcyB0cF9yZXNlcnZlZCAoZm9ybWVybHkgdHBfY29tcGFyZSkgIgogICAgICAgICAgICAgImJ1dCBub3QgdHBfcmljaGNvbXBhcmUuIENvbXBhcmlzb25zIG1heSBub3QgYmVoYXZlIGFzIGludGVuZGVkLiIsCiAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsKLSAgICAgICAgaWYgKGVycm9yID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBBbGwgZG9uZSAtLSBzZXQgdGhlIHJlYWR5IGZsYWcgKi8KQEAgLTQzMjYsNDkgKzQ2NDcsNTcgQEAKIHN0YXRpYyBpbnQKIGFkZF9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKmJhc2UsIFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgaW50IHJlc3VsdDsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnJlZiwgKm5ld29iajsKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgUHlPYmplY3QgKmRpY3QsICprZXksICpuZXdvYmo7CiAKLSAgICBsaXN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIGJhc2UtPnRwX3N1YmNsYXNzZXMgPSBsaXN0ID0gUHlMaXN0X05ldygwKTsKLSAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICBkaWN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKKyAgICBpZiAoZGljdCA9PSBOVUxMKSB7CisgICAgICAgIGJhc2UtPnRwX3N1YmNsYXNzZXMgPSBkaWN0ID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoZGljdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGxpc3QpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QoZGljdCkpOworICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cigodm9pZCAqKSB0eXBlKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKICAgICBuZXdvYmogPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwotICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgaWYgKFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZikgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgIHJldHVybiBQeUxpc3RfU2V0SXRlbShsaXN0LCBpLCBuZXdvYmopOworICAgIGlmIChuZXdvYmogIT0gTlVMTCkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbShkaWN0LCBrZXksIG5ld29iaik7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOwogICAgIH0KLSAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIG5ld29iaik7Ci0gICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgUHlfREVDUkVGKGtleSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQKIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKmJhc2UsIFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpyZWY7CisgICAgUHlPYmplY3QgKmRpY3QsICprZXk7CiAKLSAgICBsaXN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7CisgICAgZGljdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobGlzdCkpOwotICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgaWYgKFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZikgPT0gKFB5T2JqZWN0Kil0eXBlKSB7Ci0gICAgICAgICAgICAvKiB0aGlzIGNhbid0IGZhaWwsIHJpZ2h0PyAqLwotICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtKGxpc3QsIGkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChkaWN0KSk7CisgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkICopIHR5cGUpOworICAgIGlmIChrZXkgPT0gTlVMTCB8fCBQeURpY3RfRGVsSXRlbShkaWN0LCBrZXkpKSB7CisgICAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdHlwZSBpbml0aWFsaXphdGlvbiBlcnJvcmVkIG91dCBiZWZvcmUKKyAgICAgICAgICAgdGhlIGJhc2Ugc3ViY2xhc3NlcyB3ZXJlIHVwZGF0ZWQgKGUuZy4gYSBub24tc3RyIF9fcXVhbG5hbWVfXworICAgICAgICAgICB3YXMgcGFzc2VkIGluIHRoZSB0eXBlIGRpY3QpLiAqLworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBQeV9YREVDUkVGKGtleSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpCit7CisgICAgaWYgKGJhc2VzKSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoYmFzZXMpOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7CisgICAgICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKGJhc2UpKQorICAgICAgICAgICAgICAgIHJlbW92ZV9zdWJjbGFzcygoUHlUeXBlT2JqZWN0KikgYmFzZSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NzI1LDYgKzUwNTQsMTggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBfZGVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgdm9pZCAqd3JhcHBlZCkKK3sKKyAgICBkZXN0cnVjdG9yIGZ1bmMgPSAoZGVzdHJ1Y3Rvcil3cmFwcGVkOworCisgICAgaWYgKCFjaGVja19udW1fYXJncyhhcmdzLCAwKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAoKmZ1bmMpKHNlbGYpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogd3JhcF9yaWNoY21wZnVuYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQsIGludCBvcCkKIHsKICAgICByaWNoY21wZnVuYyBmdW5jID0gKHJpY2hjbXBmdW5jKXdyYXBwZWQ7CkBAIC00OTAzLDcgKzUyNDQsNyBAQAogCiAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18pICE9IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcodHBfbmV3X21ldGhvZGRlZiwgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwogICAgIGlmIChmdW5jID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19uZXdfXywgZnVuYykpIHsKQEAgLTUwMTUsNyArNTM1Niw2IEBACiBzdGF0aWMgUHlfc3NpemVfdAogc2xvdF9zcV9sZW5ndGgoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiAgICAgUHlPYmplY3QgKnJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fbGVuX18sICIoKSIpOwogICAgIFB5X3NzaXplX3QgbGVuOwogCkBAIC01MDc2LDggKzU0MTYsNiBAQAogc2xvdF9zcV9hc3NfaXRlbShQeU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKIAogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICByZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2RlbGl0ZW1fXywgIihuKSIsIGluZGV4KTsKQEAgLTUxMjcsOCArNTQ2NSw2IEBACiBzbG90X21wX2Fzc19zdWJzY3JpcHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19kZWxpdGVtX18sICIoTykiLCBrZXkpOwpAQCAtNTE3OSw3ICs1NTE1LDYgQEAKICAgICBQeU9iamVjdCAqZnVuYywgKmFyZ3M7CiAgICAgaW50IHJlc3VsdCA9IC0xOwogICAgIGludCB1c2luZ19sZW4gPSAwOwotICAgIF9QeV9JREVOVElGSUVSKF9fbGVuX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fYm9vbF9fKTsKIAogICAgIGZ1bmMgPSBsb29rdXBfbWF5YmUoc2VsZiwgJlB5SWRfX19ib29sX18pOwpAQCAtNTI4MSwyOCArNTYxNiwxMSBAQAogICAgIF9QeV9JREVOVElGSUVSKF9fc3RyX18pOwogCiAgICAgZnVuYyA9IGxvb2t1cF9tZXRob2Qoc2VsZiwgJlB5SWRfX19zdHJfXyk7Ci0gICAgaWYgKGZ1bmMgIT0gTlVMTCkgewotICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogUHlPYmplY3QgKnJlc3M7ICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIHJlcyA9IHNsb3RfdHBfcmVwcihzZWxmKTsKLSAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogWFhYIHRoaXMgaXMgbm9uLXNlbnNpY2FsLiBXaHkgc2hvdWxkIHdlIHJldHVybgotICAgICAgICAgICBhIGJ5dGVzIG9iamVjdCBmcm9tIF9fc3RyX18uIElzIHRoaXMgY29kZSBldmVuCi0gICAgICAgICAgIHVzZWQ/IC0gbXZsICovCi0gICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgLyoKLSAgICAgICAgcmVzcyA9IF9QeVVuaWNvZGVfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyhyZXMpOwotICAgICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgcmV0dXJuIHJlc3M7Ci0gICAgICAgICovCi0gICAgfQorICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlfaGFzaF90CkBAIC01NTk4LDcgKzU5MTYsNiBAQAogICAgIFB5T2JqZWN0ICpmdW5jOwogICAgIFB5T2JqZWN0ICpuZXdhcmdzLCAqeDsKICAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdfXyk7CiAKICAgICBmdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKil0eXBlLCAmUHlJZF9fX25ld19fKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQpAQCAtNTYyMiwxNiArNTkzOSwxMiBAQAogfQogCiBzdGF0aWMgdm9pZAotc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCitzbG90X3RwX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQogewogICAgIF9QeV9JREVOVElGSUVSKF9fZGVsX18pOwogICAgIFB5T2JqZWN0ICpkZWwsICpyZXM7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKIAotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQogICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAKQEAgLTU2NDgsMzcgKzU5NjEsNiBAQAogCiAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLwogICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICAvKiBVbmRvIHRoZSB0ZW1wb3JhcnkgcmVzdXJyZWN0aW9uOyBjYW4ndCB1c2UgREVDUkVGIGhlcmUsIGl0IHdvdWxkCi0gICAgICogY2F1c2UgYSByZWN1cnNpdmUgY2FsbC4KLSAgICAgKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID4gMCk7Ci0gICAgaWYgKC0tc2VsZi0+b2JfcmVmY250ID09IDApCi0gICAgICAgIHJldHVybjsgICAgICAgICAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIF9fZGVsX18gcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoIVB5VHlwZV9JU19HQyhQeV9UWVBFKHNlbGYpKSB8fAotICAgICAgICAgICBfUHlfQVNfR0Moc2VsZiktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwotICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgKiB1bmRvbmUuCi0gICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKLSAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKLSNlbmRpZgogfQogCiAKQEAgLTU3ODcsNyArNjA2OSw3IEBACiAgICAgICAgICAgICJzZWUgaGVscCh0eXBlKHgpKSBmb3Igc2lnbmF0dXJlIiwKICAgICAgICAgICAgUHlXcmFwcGVyRmxhZ19LRVlXT1JEUyksCiAgICAgVFBTTE9UKCJfX25ld19fIiwgdHBfbmV3LCBzbG90X3RwX25ldywgTlVMTCwgIiIpLAotICAgIFRQU0xPVCgiX19kZWxfXyIsIHRwX2RlbCwgc2xvdF90cF9kZWwsIE5VTEwsICIiKSwKKyAgICBUUFNMT1QoIl9fZGVsX18iLCB0cF9maW5hbGl6ZSwgc2xvdF90cF9maW5hbGl6ZSwgKHdyYXBwZXJmdW5jKXdyYXBfZGVsLCAiIiksCiAKICAgICBCSU5TTE9UKCJfX2FkZF9fIiwgbmJfYWRkLCBzbG90X25iX2FkZCwKICAgICAgICAgIisiKSwKQEAgLTYxODQsMTUgKzY0NjYsMTQgQEAKIHsKICAgICBQeVR5cGVPYmplY3QgKnN1YmNsYXNzOwogICAgIFB5T2JqZWN0ICpyZWYsICpzdWJjbGFzc2VzLCAqZGljdDsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgc3ViY2xhc3NlcyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHN1YmNsYXNzZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhzdWJjbGFzc2VzKSk7Ci0gICAgbiA9IFB5TGlzdF9HRVRfU0laRShzdWJjbGFzc2VzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShzdWJjbGFzc2VzLCBpKTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3Qoc3ViY2xhc3NlcykpOworICAgIGkgPSAwOworICAgIHdoaWxlIChQeURpY3RfTmV4dChzdWJjbGFzc2VzLCAmaSwgTlVMTCwgJnJlZikpIHsKICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgc3ViY2xhc3MgPSAoUHlUeXBlT2JqZWN0ICopUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgYXNzZXJ0KHN1YmNsYXNzICE9IE5VTEwpOwpAQCAtNjMzOCw4ICs2NjE5LDggQEAKICAgICAgICAgLyogV2Ugd2FudCBfX2NsYXNzX18gdG8gcmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgc3VwZXIgb2JqZWN0CiAgICAgICAgICAgIChpLmUuIHN1cGVyLCBvciBhIHN1YmNsYXNzKSwgbm90IHRoZSBjbGFzcyBvZiBzdS0+b2JqLiAqLwogICAgICAgICBza2lwID0gKFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPT0gOSAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpID09IDApOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID09IDkgJiYKKyAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSA9PSAwKTsKICAgICB9CiAKICAgICBpZiAoIXNraXApIHsKQEAgLTY1NDUsOCArNjgyNiw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fZnJlZXZhcnMsIGkpOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhuYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkgeworICAgICAgICAgICAgaWYgKCFfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSkgewogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXggPSBjby0+Y29fbmxvY2FscyArCiAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSArIGk7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmLT5mX2xvY2Fsc3BsdXNbaW5kZXhdOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKaW5kZXggYTU3MmMxMi4uZWE1NDBkNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYworKysgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCkBAIC02MSw3ICs2MSw3IEBACiAvKiBSZXR1cm5zIHRoZSB0aXRsZWNhc2UgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gY2ggb3IganVzdAogICAgY2ggaWYgbm8gdGl0bGVjYXNlIG1hcHBpbmcgaXMga25vd24uICovCiAKLVB5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShyZWdpc3RlciBQeV9VQ1M0IGNoKQorUHlfVUNTNCBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCmluZGV4IGExNDkxNzcuLjM0ZDUxZTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCkBAIC00NywxMyArNDcsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotLyogRW5kaWFubmVzcyBzd2l0Y2hlczsgZGVmYXVsdHMgdG8gbGl0dGxlIGVuZGlhbiAqLwotCi0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfQklHX0VORElBTgotI2Vsc2UKLSMgZGVmaW5lIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0jZW5kaWYKKy8qW2NsaW5pY10KK2NsYXNzIHN0cgorW2NsaW5pY10qLworLypbY2xpbmljIGNoZWNrc3VtOiBkYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCiAKIC8qIC0tLSBHbG9iYWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMzAsMTYgKzEyNywxNCBAQAogLyogdHJ1ZSBpZiB0aGUgVW5pY29kZSBvYmplY3QgaGFzIGFuIGFsbG9jYXRlZCBVVEYtOCBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfVVRGOF9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKCFQeVVuaWNvZGVfSVNfQ09NUEFDVF9BU0NJSShvcCkgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAmJiBfUHlVbmljb2RlX1VURjgob3ApICE9IFB5VW5pY29kZV9EQVRBKG9wKSkpCiAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgd3N0ciBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfV1NUUl9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9QeVVuaWNvZGVfV1NUUihvcCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKCFQeVVuaWNvZGVfSVNfUkVBRFkob3ApIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgX1B5VW5pY29kZV9XU1RSKG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKSkKIApAQCAtMTUwLDkgKzE0NSw5IEBACiAgICBidWZmZXIgd2hlcmUgdGhlIHJlc3VsdCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRvLiAqLwogI2RlZmluZSBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoZnJvbV90eXBlLCB0b190eXBlLCBiZWdpbiwgZW5kLCB0bykgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopIHRvOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgZnJvbV90eXBlICpfaXRlciA9IChiZWdpbik7ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9lbmQgPSAoZW5kKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopKHRvKTsgICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9pdGVyID0gKGZyb21fdHlwZSAqKShiZWdpbik7ICBcCisgICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2VuZCA9IChmcm9tX3R5cGUgKikoZW5kKTsgICAgIFwKICAgICAgICAgUHlfc3NpemVfdCBuID0gKF9lbmQpIC0gKF9pdGVyKTsgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl91bnJvbGxlZF9lbmQgPSAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBfaXRlciArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7ICAgICAgICAgIFwKQEAgLTE5OSw2ICsxOTQsMTAgQEAKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfZW1wdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpOworCiAvKiBMaXN0IG9mIHN0YXRpYyBzdHJpbmdzLiAqLwogc3RhdGljIF9QeV9JZGVudGlmaWVyICpzdGF0aWNfc3RyaW5ncyA9IE5VTEw7CiAKQEAgLTQyNyw4ICs0MjYsNiBAQAogI2lmbmRlZiBQeV9ERUJVRwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKLQogICAgIGxlbiA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSk7CiAgICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKQEAgLTQ0NSwxMCArNDQyLDEyIEBACiAgICAgfQogCiAgICAgaWYgKF9QeVVuaWNvZGVfUmVhZHkodW5pY29kZSkgPCAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2Vsc2UKKyAgICBhc3NlcnQoUHlfUkVGQ05UKHVuaWNvZGUpID09IDEpOworCiAgICAgLyogZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IHJlYWR5IGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlIGNhbGxlcgogICAgICAgIG1ha2VzIHRoZSBzdHJpbmcgcmVhZHkgYmVmb3JlIHVzaW5nIGl0ICovCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CkBAIC00NzEsNyArNDcwLDkgQEAKICAgICB9CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgMCk7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIDApOwogICAgICAgICBpZiAoY2ggPCAyNTYpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjFfY2hhciA9IHVuaWNvZGVfbGF0aW4xW2NoXTsKICAgICAgICAgICAgIGlmIChsYXRpbjFfY2hhciAhPSBOVUxMKSB7CkBAIC01NDQsNyArNTQ1LDYgQEAKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrID0gfihCTE9PTV9NQVNLKTA7CiAKLSNkZWZpbmUgQkxPT01fQUREKG1hc2ssIGNoKSAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogI2RlZmluZSBCTE9PTShtYXNrLCBjaCkgICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAKICNkZWZpbmUgQkxPT01fTElORUJSRUFLKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCwyMSArNTU0LDQwIEBACiBQeV9MT0NBTF9JTkxJTkUoQkxPT01fTUFTSykKIG1ha2VfYmxvb21fbWFzayhpbnQga2luZCwgdm9pZCogcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKKyNkZWZpbmUgQkxPT01fVVBEQVRFKFRZUEUsIE1BU0ssIFBUUiwgTEVOKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUWVBFICpkYXRhID0gKFRZUEUgKilQVFI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZW5kID0gZGF0YSArIExFTjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgY2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKDsgZGF0YSAhPSBlbmQ7IGRhdGErKykgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNQVNLIHw9ICgxVUwgPDwgKGNoICYgKEJMT09NX1dJRFRIIC0gMSkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCiAgICAgQkxPT01fTUFTSyBtYXNrOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIG1hc2sgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgQkxPT01fQUREKG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIHB0ciwgaSkpOwotCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzEsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzIsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzQsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KICAgICByZXR1cm4gbWFzazsKLX0KIAotI2RlZmluZSBCTE9PTV9NRU1CRVIobWFzaywgY2hyLCBzdHIpIFwKLSAgICAoQkxPT00obWFzaywgY2hyKSBcCi0gICAgICYmIChQeVVuaWNvZGVfRmluZENoYXIoc3RyLCBjaHIsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksIDEpID49IDApKQorI3VuZGVmIEJMT09NX1VQREFURQorfQogCiAvKiBDb21waWxhdGlvbiBvZiB0ZW1wbGF0ZWQgcm91dGluZXMgKi8KIApAQCAtNTg4LDYgKzYwNyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTU5OCw2ICs2MTgsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC02MDgsNiArNjI5LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjU0LDYgKzY3NiwyNSBAQAogICAgIH0KIH0KIAorI2lmZGVmIFB5X0RFQlVHCisvKiBGaWxsIHRoZSBkYXRhIG9mIGFuIFVuaWNvZGUgc3RyaW5nIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzCisgICBlYXJsaWVyLgorCisgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywgYXQgbGVhc3QgZm9yCisgICBBU0NJSSBhbmQgVUNTLTQgc3RyaW5ncy4gVSswMEZGIGlzIGludmFsaWQgaW4gQVNDSUkgYW5kIFUrRkZGRkZGRkYgaXMgYW4KKyAgIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLworc3RhdGljIHZvaWQKK3VuaWNvZGVfZmlsbF9pbnZhbGlkKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IG9sZF9sZW5ndGgpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICBQeV9VQ1MxICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyAgICBpZiAobGVuZ3RoIDw9IG9sZF9sZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1zZXQoZGF0YSArIG9sZF9sZW5ndGggKiBraW5kLCAweGZmLCAobGVuZ3RoIC0gb2xkX2xlbmd0aCkgKiBraW5kKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiByZXNpemVfY29tcGFjdChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBsZW5ndGgpCiB7CkBAIC02NjIsNiArNzAzLDEwIEBACiAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICBpbnQgc2hhcmVfd3N0cjsKICAgICBQeU9iamVjdCAqbmV3X3VuaWNvZGU7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyNlbmRpZgorCiAgICAgYXNzZXJ0KHVuaWNvZGVfbW9kaWZpYWJsZSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19SRUFEWSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19DT01QQUNUKHVuaWNvZGUpKTsKQEAgLTcwMSw2ICs3NDYsOSBAQAogICAgICAgICBQeU9iamVjdF9ERUwoX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpKTsKICAgICAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID0gTlVMTDsKICAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgMCk7CiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CkBAIC03MTksNiArNzY3LDkgQEAKICAgICAgICAgUHlfc3NpemVfdCBjaGFyX3NpemU7CiAgICAgICAgIGludCBzaGFyZV93c3RyLCBzaGFyZV91dGY4OwogICAgICAgICB2b2lkICpkYXRhOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworI2VuZGlmCiAKICAgICAgICAgZGF0YSA9IF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSk7CiAgICAgICAgIGNoYXJfc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwpAQCAtNzU0LDYgKzgwNSw5IEBACiAgICAgICAgIH0KICAgICAgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7CiAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgZGF0YSwgbGVuZ3RoLCAwKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgICAgICBpZiAoc2hhcmVfd3N0ciB8fCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPT0gTlVMTCkgewogICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgwNiw4ICs4NjAsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNvcHlfbGVuZ3RoID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKTsKICAgICAgICAgY29weV9sZW5ndGggPSBQeV9NSU4oY29weV9sZW5ndGgsIGxlbmd0aCk7Ci0gICAgICAgIFB5X1VOSUNPREVfQ09QWShfUHlVbmljb2RlX1dTVFIodyksIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuZ3RoKTsKKyAgICAgICAgUHlfTUVNQ1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGggKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICByZXR1cm4gdzsKICAgICB9CiB9CkBAIC04MjQsNyArODc4LDcgQEAKIHN0YXRpYyBQeVVuaWNvZGVPYmplY3QgKgogX1B5VW5pY29kZV9OZXcoUHlfc3NpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZTsKICAgICBzaXplX3QgbmV3X3NpemU7CiAKICAgICAvKiBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTg0Nyw2ICs5MDEsMTkgQEAKICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXdfc2l6ZSA9IHNpemVvZihQeV9VTklDT0RFKSAqICgoc2l6ZV90KWxlbmd0aCArIDEpOworCisgICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKKyAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7CisgICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOworICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSAoUHlfVU5JQ09ERSopIFB5T2JqZWN0X01BTExPQyhuZXdfc2l6ZSk7CiAgICAgaWYgKCFfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpIHsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwpAQCAtODYzLDE3ICs5MzAsNyBAQAogICAgICAqLwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKVswXSA9IDA7CiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpW2xlbmd0aF0gPSAwOwotICAgIF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7Ci0gICAgX1B5VW5pY29kZV9IQVNIKHVuaWNvZGUpID0gLTE7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5pbnRlcm5lZCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5raW5kID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmNvbXBhY3QgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkucmVhZHkgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuYXNjaWkgPSAwOwotICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gMDsKLSAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfVVRGOF9MRU5HVEgodW5pY29kZSkgPSAwOworCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QgKil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIHVuaWNvZGU7CiB9CkBAIC0xMDc4LDExICsxMTM1LDcgQEAKICAgICAgICAgfQogICAgIH0KICNpZmRlZiBQeV9ERUJVRwotICAgIC8qIEZpbGwgdGhlIGRhdGEgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgdG8gZGV0ZWN0IGJ1Z3MgZWFybGllci4KLSAgICAgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywKLSAgICAgICBhdCBsZWFzdCBmb3IgQVNDSUkgYW5kIFVDUy00IHN0cmluZ3MuIFUrMDBGRiBpcyBpbnZhbGlkIGluIEFTQ0lJCi0gICAgICAgYW5kIFUrRkZGRkZGRkYgaXMgYW4gaW52YWxpZCBjaGFyYWN0ZXIgaW4gVW5pY29kZSA2LjAuICovCi0gICAgbWVtc2V0KGRhdGEsIDB4ZmYsIHNpemUgKiBraW5kKTsKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCgoUHlPYmplY3QqKXVuaWNvZGUsIDApOwogI2VuZGlmCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QqKXVuaWNvZGUsIDApKTsKICAgICByZXR1cm4gb2JqOwpAQCAtMTUxMiw3ICsxNTY1LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLXVuaWNvZGVfZGVhbGxvYyhyZWdpc3RlciBQeU9iamVjdCAqdW5pY29kZSkKK3VuaWNvZGVfZGVhbGxvYyhQeU9iamVjdCAqdW5pY29kZSkKIHsKICAgICBzd2l0Y2ggKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh1bmljb2RlKSkgewogICAgIGNhc2UgU1NUQVRFX05PVF9JTlRFUk5FRDoKQEAgLTE2NDQsMzggKzE2OTcsNiBAQAogICAgIHJldHVybiB1bmljb2RlX3Jlc2l6ZShwX3VuaWNvZGUsIGxlbmd0aCk7CiB9CiAKLXN0YXRpYyBpbnQKLXVuaWNvZGVfd2lkZW4oUHlPYmplY3QgKipwX3VuaWNvZGUsIFB5X3NzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4Y2hhcikKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIGFzc2VydChQeVVuaWNvZGVfSVNfUkVBRFkoKnBfdW5pY29kZSkpOwotICAgIGFzc2VydChsZW5ndGggPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSkpOwotICAgIGlmIChtYXhjaGFyIDw9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSgqcF91bmljb2RlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmVzdWx0ID0gUHlVbmljb2RlX05ldyhQeVVuaWNvZGVfR0VUX0xFTkdUSCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNoYXIpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlc3VsdCwgMCwgKnBfdW5pY29kZSwgMCwgbGVuZ3RoKTsKLSAgICBQeV9ERUNSRUYoKnBfdW5pY29kZSk7Ci0gICAgKnBfdW5pY29kZSA9IHJlc3VsdDsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdW5pY29kZV9wdXRjaGFyKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90ICpwb3MsCi0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCkKLXsKLSAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOwotICAgIGlmICh1bmljb2RlX3dpZGVuKHBfdW5pY29kZSwgKnBvcywgY2gpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCgqcF91bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICgqcG9zKSsrLCBjaCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIC8qIENvcHkgYSBBU0NJSSBvciBsYXRpbjEgY2hhciogc3RyaW5nIGludG8gYSBQeXRob24gVW5pY29kZSBzdHJpbmcuCiAKICAgIFdBUk5JTkc6IFRoZSBmdW5jdGlvbiBkb2Vzbid0IGNvcHkgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyIGFuZApAQCAtMTY5Miw2ICsxNzEzLDE0IEBACiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewogICAgICAgICBhc3NlcnQoaW5kZXggKyBsZW4gPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyLAorICAgICAgICAgICAgICAgIChjb25zdCBQeV9VQ1MxKilzdHIgKyBsZW4pOworICAgICAgICAgICAgYXNzZXJ0KG1heGNoYXIgPCAxMjgpOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgbWVtY3B5KChjaGFyICopIGRhdGEgKyBpbmRleCwgc3RyLCBsZW4pOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xOTM3LDEzICsxOTY2LDE3IEBACiAgICAgYXNzZXJ0KHNpemUgPiAwKTsKICAgICBpZiAoc2l6ZSA9PSAxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSB1WzBdOworICAgICAgICBpbnQga2luZDsKKyAgICAgICAgdm9pZCAqZGF0YTsKICAgICAgICAgaWYgKGNoIDwgMjU2KQogICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7CiAKICAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7CiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocmVzKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHJlcyk7CisgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBjaCk7CiAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kocmVzLCAxKSk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQpAQCAtMTk3MywxMyArMjAwNiwxNyBAQAogICAgIGFzc2VydChzaXplID4gMCk7CiAgICAgaWYgKHNpemUgPT0gMSkgewogICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CiAgICAgICAgIGlmIChjaCA8IDI1NikKICAgICAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpY2gpOwogCiAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOwogICAgICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHJlcyksIFB5VW5pY29kZV9EQVRBKHJlcyksIDAsIGNoKTsKKyAgICAgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHJlcyk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXMpOworICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgMCwgY2gpOwogICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KQEAgLTIyNTgsNyArMjI5NSw3IEBACiAjaWZkZWYgSEFWRV9XQ0hBUl9ICiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocmVnaXN0ZXIgY29uc3Qgd2NoYXJfdCAqdywgUHlfc3NpemVfdCBzaXplKQorUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICBpZiAoc2l6ZSA9PSAwKQpAQCAtMjI3OCwxNiArMjMxNSw5IEBACiAKIHN0YXRpYyB2b2lkCiBtYWtlZm10KGNoYXIgKmZtdCwgaW50IGxvbmdmbGFnLCBpbnQgbG9uZ2xvbmdmbGFnLCBpbnQgc2l6ZV90ZmxhZywKLSAgICAgICAgaW50IHplcm9wYWQsIGludCB3aWR0aCwgaW50IHByZWNpc2lvbiwgY2hhciBjKQorICAgICAgICBjaGFyIGMpCiB7CiAgICAgKmZtdCsrID0gJyUnOwotICAgIGlmICh3aWR0aCkgewotICAgICAgICBpZiAoemVyb3BhZCkKLSAgICAgICAgICAgICpmbXQrKyA9ICcwJzsKLSAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiJWQiLCB3aWR0aCk7Ci0gICAgfQotICAgIGlmIChwcmVjaXNpb24pCi0gICAgICAgIGZtdCArPSBzcHJpbnRmKGZtdCwgIi4lZCIsIHByZWNpc2lvbik7CiAgICAgaWYgKGxvbmdmbGFnKQogICAgICAgICAqZm10KysgPSAnbCc7CiAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKSB7CkBAIC0yMzEyLDQ0ICsyMzQyLDEzOSBAQAogICAgICpmbXQgPSAnXDAnOwogfQogCi0vKiBoZWxwZXIgZm9yIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpICovCisvKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxsZCBvciAlcC4KKyAgIFdlIG5lZWQgYXQgbW9zdCBjZWlsKGxvZzEwKDI1NikqU0laRU9GX0xPTkdfTE9ORykgZGlnaXRzLAorICAgcGx1cyAxIGZvciB0aGUgc2lnbi4gIDUzLzIyIGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2cxMCgyNTYpLiAqLworI2RlZmluZSBNQVhfTE9OR19MT05HX0NIQVJTICgyICsgKFNJWkVPRl9MT05HX0xPTkcqNTMtMSkgLyAyMikKKworc3RhdGljIGludAordW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGgsIFB5X3NzaXplX3QgcHJlY2lzaW9uKQoreworICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBmaWxsLCBhcmdsZW47CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBsZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmICgocHJlY2lzaW9uID09IC0xIHx8IHByZWNpc2lvbiA+PSBsZW5ndGgpCisgICAgICAgICYmIHdpZHRoIDw9IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpOworCisgICAgaWYgKHByZWNpc2lvbiAhPSAtMSkKKyAgICAgICAgbGVuZ3RoID0gUHlfTUlOKHByZWNpc2lvbiwgbGVuZ3RoKTsKKworICAgIGFyZ2xlbiA9IFB5X01BWChsZW5ndGgsIHdpZHRoKTsKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgMCwgbGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYXJnbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHdpZHRoID4gbGVuZ3RoKSB7CisgICAgICAgIGZpbGwgPSB3aWR0aCAtIGxlbmd0aDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJyAnKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICB9CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCAwLCBsZW5ndGgpOworICAgIHdyaXRlci0+cG9zICs9IGxlbmd0aDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoLCBQeV9zc2l6ZV90IHByZWNpc2lvbikKK3sKKyAgICAvKiBVVEYtOCAqLworICAgIFB5X3NzaXplX3QgbGVuZ3RoOworICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIGludCByZXM7CisKKyAgICBsZW5ndGggPSBzdHJsZW4oc3RyKTsKKyAgICBpZiAocHJlY2lzaW9uICE9IC0xKQorICAgICAgICBsZW5ndGggPSBQeV9NSU4obGVuZ3RoLCBwcmVjaXNpb24pOworICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHN0ciwgbGVuZ3RoLCAicmVwbGFjZSIsIE5VTEwpOworICAgIGlmICh1bmljb2RlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJlcyA9IHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCB1bmljb2RlLCB3aWR0aCwgLTEpOworICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICByZXR1cm4gcmVzOworfQogCiBzdGF0aWMgY29uc3QgY2hhcioKLXBhcnNlX2Zvcm1hdF9mbGFncyhjb25zdCBjaGFyICpmLAotICAgICAgICAgICAgICAgICAgIGludCAqcF93aWR0aCwgaW50ICpwX3ByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKnBfbG9uZ2ZsYWcsIGludCAqcF9sb25nbG9uZ2ZsYWcsIGludCAqcF9zaXplX3RmbGFnKQordW5pY29kZV9mcm9tZm9ybWF0X2FyZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmYsIHZhX2xpc3QgKnZhcmdzKQogewotICAgIGludCB3aWR0aCwgcHJlY2lzaW9uLCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnOworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IHplcm9wYWQ7CisgICAgUHlfc3NpemVfdCB3aWR0aDsKKyAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKKyAgICBpbnQgbG9uZ2ZsYWc7CisgICAgaW50IGxvbmdsb25nZmxhZzsKKyAgICBpbnQgc2l6ZV90ZmxhZzsKKyAgICBQeV9zc2l6ZV90IGZpbGw7CisKKyAgICBwID0gZjsKKyAgICBmKys7CisgICAgemVyb3BhZCA9IDA7CisgICAgaWYgKCpmID09ICcwJykgeworICAgICAgICB6ZXJvcGFkID0gMTsKKyAgICAgICAgZisrOworICAgIH0KIAogICAgIC8qIHBhcnNlIHRoZSB3aWR0aC5wcmVjaXNpb24gcGFydCwgZS5nLiAiJTIuNXMiID0+IHdpZHRoPTIsIHByZWNpc2lvbj01ICovCi0gICAgZisrOwotICAgIHdpZHRoID0gMDsKLSAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKQotICAgICAgICB3aWR0aCA9ICh3aWR0aCoxMCkgKyAqZisrIC0gJzAnOwotICAgIHByZWNpc2lvbiA9IDA7CisgICAgd2lkdGggPSAtMTsKKyAgICBpZiAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgIHdpZHRoID0gKmYgLSAnMCc7CisgICAgICAgIGYrKzsKKyAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpKmYgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aCA9ICh3aWR0aCAqIDEwKSArICgqZiAtICcwJyk7CisgICAgICAgICAgICBmKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJlY2lzaW9uID0gLTE7CiAgICAgaWYgKCpmID09ICcuJykgewogICAgICAgICBmKys7Ci0gICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCi0gICAgICAgICAgICBwcmVjaXNpb24gPSAocHJlY2lzaW9uKjEwKSArICpmKysgLSAnMCc7CisgICAgICAgIGlmIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgIHByZWNpc2lvbiA9ICgqZiAtICcwJyk7CisgICAgICAgICAgICBmKys7CisgICAgICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KSpmIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVjaXNpb24gdG9vIGJpZyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gKHByZWNpc2lvbiAqIDEwKSArICgqZiAtICcwJyk7CisgICAgICAgICAgICAgICAgZisrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKICAgICAgICAgICAgIC8qICIlLjMlcyIgPT4gZiBwb2ludHMgdG8gIjMiICovCiAgICAgICAgICAgICBmLS07CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCpmID09ICdcMCcpIHsKLSAgICAgICAgLyogYm9ndXMgZm9ybWF0ICIlLjEiID0+IGdvIGJhY2t3YXJkLCBmIHBvaW50cyB0byAiMSIgKi8KKyAgICAgICAgLyogYm9ndXMgZm9ybWF0ICIlLjEyMyIgPT4gZ28gYmFja3dhcmQsIGYgcG9pbnRzIHRvICIzIiAqLwogICAgICAgICBmLS07CiAgICAgfQotICAgIGlmIChwX3dpZHRoICE9IE5VTEwpCi0gICAgICAgICpwX3dpZHRoID0gd2lkdGg7Ci0gICAgaWYgKHBfcHJlY2lzaW9uICE9IE5VTEwpCi0gICAgICAgICpwX3ByZWNpc2lvbiA9IHByZWNpc2lvbjsKIAogICAgIC8qIEhhbmRsZSAlbGQsICVsdSwgJWxsZCBhbmQgJWxsdS4gKi8KICAgICBsb25nZmxhZyA9IDA7CiAgICAgbG9uZ2xvbmdmbGFnID0gMDsKICAgICBzaXplX3RmbGFnID0gMDsKLQogICAgIGlmICgqZiA9PSAnbCcpIHsKICAgICAgICAgaWYgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnIHx8IGZbMV0gPT0gJ2knKSB7CiAgICAgICAgICAgICBsb25nZmxhZyA9IDE7CkBAIC0yMzY4LDQ5OSArMjQ5MywyODQgQEAKICAgICAgICAgc2l6ZV90ZmxhZyA9IDE7CiAgICAgICAgICsrZjsKICAgICB9Ci0gICAgaWYgKHBfbG9uZ2ZsYWcgIT0gTlVMTCkKLSAgICAgICAgKnBfbG9uZ2ZsYWcgPSBsb25nZmxhZzsKLSAgICBpZiAocF9sb25nbG9uZ2ZsYWcgIT0gTlVMTCkKLSAgICAgICAgKnBfbG9uZ2xvbmdmbGFnID0gbG9uZ2xvbmdmbGFnOwotICAgIGlmIChwX3NpemVfdGZsYWcgIT0gTlVMTCkKLSAgICAgICAgKnBfc2l6ZV90ZmxhZyA9IHNpemVfdGZsYWc7CisKKyAgICBpZiAoZlsxXSA9PSAnXDAnKQorICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDA7CisKKyAgICBzd2l0Y2ggKCpmKSB7CisgICAgY2FzZSAnYyc6CisgICAgeworICAgICAgICBpbnQgb3JkaW5hbCA9IHZhX2FyZygqdmFyZ3MsIGludCk7CisgICAgICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgYXJndW1lbnQgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgb3JkaW5hbCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ2knOgorICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ3UnOgorICAgIGNhc2UgJ3gnOgorICAgIHsKKyAgICAgICAgLyogdXNlZCBieSBzcHJpbnRmICovCisgICAgICAgIGNoYXIgZm10WzEwXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgIiUwbGxkXDAiICovCisgICAgICAgIGNoYXIgYnVmZmVyW01BWF9MT05HX0xPTkdfQ0hBUlNdOworICAgICAgICBQeV9zc2l6ZV90IGFyZ2xlbjsKKworICAgICAgICBpZiAoKmYgPT0gJ3UnKSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgKmYpOworCisgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIGxvbmcpKTsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCB1bnNpZ25lZCBQWV9MT05HX0xPTkcpKTsKKyNlbmRpZgorICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgc2l6ZV90KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIGludCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCpmID09ICd4JykgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIDAsIDAsIDAsICd4Jyk7CisgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LCB2YV9hcmcoKnZhcmdzLCBpbnQpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCAqZik7CisKKyAgICAgICAgICAgIGlmIChsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBQeV9zc2l6ZV90KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIGludCkpOworICAgICAgICB9CisgICAgICAgIGFzc2VydChsZW4gPj0gMCk7CisKKyAgICAgICAgaWYgKHByZWNpc2lvbiA8IGxlbikKKyAgICAgICAgICAgIHByZWNpc2lvbiA9IGxlbjsKKworICAgICAgICBhcmdsZW4gPSBQeV9NQVgocHJlY2lzaW9uLCB3aWR0aCk7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBhcmdsZW4sIDEyNykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAod2lkdGggPiBwcmVjaXNpb24pIHsKKyAgICAgICAgICAgIFB5X1VDUzQgZmlsbGNoYXI7CisgICAgICAgICAgICBmaWxsID0gd2lkdGggLSBwcmVjaXNpb247CisgICAgICAgICAgICBmaWxsY2hhciA9IHplcm9wYWQ/JzAnOicgJzsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfRmlsbCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIGZpbGwsIGZpbGxjaGFyKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZWNpc2lvbiA+IGxlbikgeworICAgICAgICAgICAgZmlsbCA9IHByZWNpc2lvbiAtIGxlbjsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfRmlsbCh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIGZpbGwsICcwJykgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBmaWxsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIGJ1ZmZlciwgbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAncCc6CisgICAgeworICAgICAgICBjaGFyIG51bWJlcltNQVhfTE9OR19MT05HX0NIQVJTXTsKKworICAgICAgICBsZW4gPSBzcHJpbnRmKG51bWJlciwgIiVwIiwgdmFfYXJnKCp2YXJncywgdm9pZCopKTsKKyAgICAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKKworICAgICAgICAvKiAlcCBpcyBpbGwtZGVmaW5lZDogIGVuc3VyZSBsZWFkaW5nIDB4LiAqLworICAgICAgICBpZiAobnVtYmVyWzFdID09ICdYJykKKyAgICAgICAgICAgIG51bWJlclsxXSA9ICd4JzsKKyAgICAgICAgZWxzZSBpZiAobnVtYmVyWzFdICE9ICd4JykgeworICAgICAgICAgICAgbWVtbW92ZShudW1iZXIgKyAyLCBudW1iZXIsCisgICAgICAgICAgICAgICAgICAgIHN0cmxlbihudW1iZXIpICsgMSk7CisgICAgICAgICAgICBudW1iZXJbMF0gPSAnMCc7CisgICAgICAgICAgICBudW1iZXJbMV0gPSAneCc7CisgICAgICAgICAgICBsZW4gKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBudW1iZXIsIGxlbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ3MnOgorICAgIHsKKyAgICAgICAgLyogVVRGLTggKi8KKyAgICAgICAgY29uc3QgY2hhciAqcyA9IHZhX2FyZygqdmFyZ3MsIGNvbnN0IGNoYXIqKTsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9jc3RyKHdyaXRlciwgcywgd2lkdGgsIHByZWNpc2lvbikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1UnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBhc3NlcnQob2JqICYmIF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7CisKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBvYmosIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1YnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBjb25zdCBjaGFyICpzdHIgPSB2YV9hcmcoKnZhcmdzLCBjb25zdCBjaGFyICopOworICAgICAgICBpZiAob2JqKSB7CisgICAgICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgb2JqLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChzdHIgIT0gTlVMTCk7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIod3JpdGVyLCBzdHIsIHdpZHRoLCBwcmVjaXNpb24pIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdTJzoKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoKnZhcmdzLCBQeU9iamVjdCAqKTsKKyAgICAgICAgUHlPYmplY3QgKnN0cjsKKyAgICAgICAgYXNzZXJ0KG9iaik7CisgICAgICAgIHN0ciA9IFB5T2JqZWN0X1N0cihvYmopOworICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIHN0ciwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1InOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBQeU9iamVjdCAqcmVwcjsKKyAgICAgICAgYXNzZXJ0KG9iaik7CisgICAgICAgIHJlcHIgPSBQeU9iamVjdF9SZXByKG9iaik7CisgICAgICAgIGlmICghcmVwcikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIHJlcHIsIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVwcik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocmVwcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ0EnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBQeU9iamVjdCAqYXNjaWk7CisgICAgICAgIGFzc2VydChvYmopOworICAgICAgICBhc2NpaSA9IFB5T2JqZWN0X0FTQ0lJKG9iaik7CisgICAgICAgIGlmICghYXNjaWkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBhc2NpaSwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoYXNjaWkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICclJzoKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgJyUnKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKiBpZiB3ZSBzdHVtYmxlIHVwb24gYW4gdW5rbm93biBmb3JtYXR0aW5nIGNvZGUsIGNvcHkgdGhlIHJlc3QKKyAgICAgICAgICAgb2YgdGhlIGZvcm1hdCBzdHJpbmcgdG8gdGhlIG91dHB1dCBzdHJpbmcuICh3ZSBjYW5ub3QganVzdAorICAgICAgICAgICBza2lwIHRoZSBjb2RlLCBzaW5jZSB0aGVyZSdzIG5vIHdheSB0byBrbm93IHdoYXQncyBpbiB0aGUKKyAgICAgICAgICAgYXJndW1lbnQgbGlzdCkgKi8KKyAgICAgICAgbGVuID0gc3RybGVuKHApOworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyh3cml0ZXIsIHAsIGxlbikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZiA9IHArbGVuOworICAgICAgICByZXR1cm4gZjsKKyAgICB9CisKKyAgICBmKys7CiAgICAgcmV0dXJuIGY7CiB9CiAKLS8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGQuICAyMSBjaGFyYWN0ZXJzCi0gICBhbGxvd3MgZm9yIDY0LWJpdCBpbnRlZ2VycyAoaW4gZGVjaW1hbCkgYW5kIGFuIG9wdGlvbmFsIHNpZ24uICovCi0jZGVmaW5lIE1BWF9MT05HX0NIQVJTIDIxCi0vKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxsZC4KLSAgIFdlIG5lZWQgYXQgbW9zdCBjZWlsKGxvZzEwKDI1NikqU0laRU9GX0xPTkdfTE9ORykgZGlnaXRzLAotICAgcGx1cyAxIGZvciB0aGUgc2lnbi4gIDUzLzIyIGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2cxMCgyNTYpLiAqLwotI2RlZmluZSBNQVhfTE9OR19MT05HX0NIQVJTICgyICsgKFNJWkVPRl9MT05HX0xPTkcqNTMtMSkgLyAyMikKLQogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKIHsKLSAgICB2YV9saXN0IGNvdW50OwotICAgIFB5X3NzaXplX3QgY2FsbGNvdW50ID0gMDsKLSAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHRzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHQgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgbiA9IDA7Ci0gICAgaW50IHdpZHRoID0gMDsKLSAgICBpbnQgcHJlY2lzaW9uID0gMDsKLSAgICBpbnQgemVyb3BhZDsKLSAgICBjb25zdCBjaGFyKiBmOwotICAgIFB5T2JqZWN0ICpzdHJpbmc7Ci0gICAgLyogdXNlZCBieSBzcHJpbnRmICovCi0gICAgY2hhciBmbXRbNjFdOyAvKiBzaG91bGQgYmUgZW5vdWdoIGZvciAlMHdpZHRoLnByZWNpc2lvbmxsZCAqLwotICAgIFB5X1VDUzQgbWF4Y2hhciA9IDEyNzsgLyogcmVzdWx0IGlzIEFTQ0lJIGJ5IGRlZmF1bHQgKi8KLSAgICBQeV9VQ1M0IGFyZ21heGNoYXI7Ci0gICAgUHlfc3NpemVfdCBudW1iZXJzaXplID0gMDsKLSAgICBjaGFyICpudW1iZXJyZXN1bHRzID0gTlVMTDsKLSAgICBjaGFyICpudW1iZXJyZXN1bHQgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOworICAgIHZhX2xpc3QgdmFyZ3MyOworICAgIGNvbnN0IGNoYXIgKmY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKLSAgICBQeV9WQV9DT1BZKGNvdW50LCB2YXJncyk7Ci0gICAgLyogc3RlcCAxOiBjb3VudCB0aGUgbnVtYmVyIG9mICVTLyVSLyVBLyVzIGZvcm1hdCBzcGVjaWZpY2F0aW9ucwotICAgICAqICh3ZSBjYWxsIFB5T2JqZWN0X1N0cigpL1B5T2JqZWN0X1JlcHIoKS9QeU9iamVjdF9BU0NJSSgpLwotICAgICAqIFB5VW5pY29kZV9EZWNvZGVVVEY4KCkgZm9yIHRoZXNlIG9iamVjdHMgb25jZSBkdXJpbmcgc3RlcCAzIGFuZCBwdXQgdGhlCi0gICAgICogcmVzdWx0IGluIGFuIGFycmF5KQotICAgICAqIGFsc28gZXN0aW1hdGUgYSB1cHBlciBib3VuZCBmb3IgYWxsIHRoZSBudW1iZXIgZm9ybWF0cyBpbiB0aGUgc3RyaW5nLAotICAgICAqIG51bWJlcnMgd2lsbCBiZSBmb3JtYXR0ZWQgaW4gc3RlcCAzIGFuZCBiZSBrZXB0IGluIGEgJ1wwJy1zZXBhcmF0ZWQKLSAgICAgKiBidWZmZXIgYmVmb3JlIHB1dHRpbmcgZXZlcnl0aGluZyB0b2dldGhlci4gKi8KLSAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzdHJsZW4oZm9ybWF0KSArIDEwMDsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKworICAgIC8qIHZhX2xpc3QgbWF5IGJlIGFuIGFycmF5IChvZiAxIGl0ZW0pIG9uIHNvbWUgcGxhdGZvcm1zIChleDogQU1ENjQpLgorICAgICAgIENvcHkgaXQgdG8gYmUgYWJsZSB0byBwYXNzIGEgcmVmZXJlbmNlIHRvIGEgc3ViZnVuY3Rpb24uICovCisgICAgUHlfVkFfQ09QWSh2YXJnczIsIHZhcmdzKTsKKworICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7ICkgewogICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnOwotICAgICAgICAgICAgLyogc2tpcCB3aWR0aCBvciB3aWR0aC5wcmVjaXNpb24gKGVnLiAiMS4yIiBvZiAiJTEuMmYiKSAqLwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCAmd2lkdGgsIE5VTEwsIE5VTEwsICZsb25nbG9uZ2ZsYWcsIE5VTEwpOwotICAgICAgICAgICAgaWYgKCpmID09ICdzJyB8fCAqZj09J1MnIHx8ICpmPT0nUicgfHwgKmY9PSdBJyB8fCAqZj09J1YnKQotICAgICAgICAgICAgICAgICsrY2FsbGNvdW50OwotCi0gICAgICAgICAgICBlbHNlIGlmICgqZiA9PSAnZCcgfHwgKmY9PSd1JyB8fCAqZj09J2knIHx8ICpmPT0neCcgfHwgKmY9PSdwJykgewotI2lmZGVmIEhBVkVfTE9OR19MT05HCi0gICAgICAgICAgICAgICAgaWYgKGxvbmdsb25nZmxhZykgewotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBNQVhfTE9OR19MT05HX0NIQVJTKQotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNQVhfTE9OR19MT05HX0NIQVJTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgLyogTUFYX0xPTkdfQ0hBUlMgaXMgZW5vdWdoIHRvIGhvbGQgYSA2NC1iaXQgaW50ZWdlciwKLSAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHNpZ24uICBEZWNpbWFsIHRha2VzIHRoZSBtb3N0IHNwYWNlLiAgVGhpcwotICAgICAgICAgICAgICAgICAgICAgICBpc24ndCBlbm91Z2ggZm9yIG9jdGFsLiAgSWYgYSB3aWR0aCBpcyBzcGVjaWZpZWQgd2UKLSAgICAgICAgICAgICAgICAgICAgICAgbmVlZCBtb3JlICh3aGljaCB3ZSBhbGxvY2F0ZSBsYXRlcikuICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IE1BWF9MT05HX0NIQVJTKQotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNQVhfTE9OR19DSEFSUzsKLQotICAgICAgICAgICAgICAgIC8qIGFjY291bnQgZm9yIHRoZSBzaXplICsgJ1wwJyB0byBzZXBhcmF0ZSBudW1iZXJzCi0gICAgICAgICAgICAgICAgICAgaW5zaWRlIG9mIHRoZSBudW1iZXJyZXN1bHRzIGJ1ZmZlciAqLwotICAgICAgICAgICAgICAgIG51bWJlcnNpemUgKz0gKHdpZHRoICsgMSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoKHVuc2lnbmVkIGNoYXIpKmYgPiAxMjcpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBleHBlY3RzIGFuIEFTQ0lJLWVuY29kZWQgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAic3RyaW5nLCBnb3QgYSBub24tQVNDSUkgYnl0ZTogMHglMDJ4IiwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcikqZik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBzdGVwIDI6IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdHMgb2YKLSAgICAgKiBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlVbmljb2RlX0RlY29kZVVURjgoKSBjYWxscyAqLwotICAgIGlmIChjYWxsY291bnQpIHsKLSAgICAgICAgY2FsbHJlc3VsdHMgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFB5T2JqZWN0ICopICogY2FsbGNvdW50KTsKLSAgICAgICAgaWYgKCFjYWxscmVzdWx0cykgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGNhbGxyZXN1bHQgPSBjYWxscmVzdWx0czsKLSAgICB9Ci0gICAgLyogc3RlcCAyLjU6IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdHMgb2YgZm9ybWF0aW5nIG51bWJlcnMgKi8KLSAgICBpZiAobnVtYmVyc2l6ZSkgewotICAgICAgICBudW1iZXJyZXN1bHRzID0gUHlPYmplY3RfTWFsbG9jKG51bWJlcnNpemUpOwotICAgICAgICBpZiAoIW51bWJlcnJlc3VsdHMpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgbnVtYmVycmVzdWx0ID0gbnVtYmVycmVzdWx0czsKLSAgICB9Ci0KLSAgICAvKiBzdGVwIDM6IGZvcm1hdCBudW1iZXJzIGFuZCBmaWd1cmUgb3V0IGhvdyBsYXJnZSBhIGJ1ZmZlciB3ZSBuZWVkICovCi0gICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7Ci0gICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHA7Ci0gICAgICAgICAgICBpbnQgbG9uZ2ZsYWc7Ci0gICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnOwotICAgICAgICAgICAgaW50IHNpemVfdGZsYWc7Ci0gICAgICAgICAgICBpbnQgbnVtcHJpbnRlZDsKLQotICAgICAgICAgICAgcCA9IGY7Ci0gICAgICAgICAgICB6ZXJvcGFkID0gKGZbMV0gPT0gJzAnKTsKLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgJndpZHRoLCAmcHJlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9uZ2ZsYWcsICZsb25nbG9uZ2ZsYWcsICZzaXplX3RmbGFnKTsKLSAgICAgICAgICAgIHN3aXRjaCAoKmYpIHsKLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGludCBvcmRpbmFsID0gdmFfYXJnKGNvdW50LCBpbnQpOwotICAgICAgICAgICAgICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWMgYXJnIG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIChQeV9VQ1M0KW9yZGluYWwpOwotICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICAgIG4rKzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCAqZik7Ci0gICAgICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBsb25nKSk7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIFBZX0xPTkdfTE9ORykpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgUHlfc3NpemVfdCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgaW50KSk7Ci0gICAgICAgICAgICAgICAgbiArPSBudW1wcmludGVkOwotICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgYnkgKzEgdG8gc2tpcCBvdmVyIHRoZSAnXDAnICovCi0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVjaXNpb24sICd1Jyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBsb25nKSk7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2l6ZV90ZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgc2l6ZV90KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCB1bnNpZ25lZCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ3gnKTsKLSAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwgdmFfYXJnKGNvdW50LCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsICIlcCIsIHZhX2FyZyhjb3VudCwgdm9pZCopKTsKLSAgICAgICAgICAgICAgICAvKiAlcCBpcyBpbGwtZGVmaW5lZDogIGVuc3VyZSBsZWFkaW5nIDB4LiAqLwotICAgICAgICAgICAgICAgIGlmIChudW1iZXJyZXN1bHRbMV0gPT0gJ1gnKQotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMV0gPSAneCc7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobnVtYmVycmVzdWx0WzFdICE9ICd4JykgewotICAgICAgICAgICAgICAgICAgICBtZW1tb3ZlKG51bWJlcnJlc3VsdCArIDIsIG51bWJlcnJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obnVtYmVycmVzdWx0KSArIDEpOwotICAgICAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHRbMF0gPSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFsxXSA9ICd4JzsKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IChudW1wcmludGVkICsgMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMSkgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCoobnVtYmVycmVzdWx0IC0gMikgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bXByaW50ZWQgPj0gMCk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBVVEYtOCAqLwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSB2YV9hcmcoY291bnQsIGNvbnN0IGNoYXIqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChzLCBzdHJsZW4ocyksICJyZXBsYWNlIiwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAvKiBzaW5jZSBQeVVuaWNvZGVfRGVjb2RlVVRGOCByZXR1cm5zIGFscmVhZHkgZmxleGlibGUKLSAgICAgICAgICAgICAgICAgICB1bmljb2RlIG9iamVjdHMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCByZWFkeSBvbiB0aGVtICovCi0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzdHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1UnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmogJiYgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKG9iaik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdWJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgPSB2YV9hcmcoY291bnQsIGNvbnN0IGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cl9vYmo7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaiB8fCBzdHIpOwotICAgICAgICAgICAgICAgIGFzc2VydCghb2JqIHx8IF9QeVVuaWNvZGVfQ0hFQ0sob2JqKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUob2JqKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cl9vYmogPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHN0ciwgc3RybGVuKHN0ciksICJyZXBsYWNlIiwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyX29iaikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJfb2JqKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cl9vYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHJfb2JqOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgc3RyID0gUHlPYmplY3RfU3RyKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOwotICAgICAgICAgICAgICAgIC8qIFJlbWVtYmVyIHRoZSBzdHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1InOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByOwotICAgICAgICAgICAgICAgIGFzc2VydChvYmopOwotICAgICAgICAgICAgICAgIHJlcHIgPSBQeU9iamVjdF9SZXByKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXByKQotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXByKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXByKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwcik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHJlcHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHJlcHI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXNjaWk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgYXNjaWkgPSBQeU9iamVjdF9BU0NJSShvYmopOwotICAgICAgICAgICAgICAgIGlmICghYXNjaWkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGFzY2lpKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXNjaWkpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoYXNjaWkpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChhc2NpaSk7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHJlcHIgYW5kIHN3aXRjaCB0byB0aGUgbmV4dCBzbG90ICovCi0gICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IGFzY2lpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAvKiBpZiB3ZSBzdHVtYmxlIHVwb24gYW4gdW5rbm93bgotICAgICAgICAgICAgICAgICAgIGZvcm1hdHRpbmcgY29kZSwgY29weSB0aGUgcmVzdCBvZgotICAgICAgICAgICAgICAgICAgIHRoZSBmb3JtYXQgc3RyaW5nIHRvIHRoZSBvdXRwdXQKLSAgICAgICAgICAgICAgICAgICBzdHJpbmcuICh3ZSBjYW5ub3QganVzdCBza2lwIHRoZQotICAgICAgICAgICAgICAgICAgIGNvZGUsIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKLSAgICAgICAgICAgICAgICAgICB3aGF0J3MgaW4gdGhlIGFyZ3VtZW50IGxpc3QpICovCi0gICAgICAgICAgICAgICAgbiArPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICAgICAgZ290byBleHBhbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbisrOwotICAgIH0KLSAgZXhwYW5kOgotICAgIC8qIHN0ZXAgNDogZmlsbCB0aGUgYnVmZmVyICovCi0gICAgLyogU2luY2Ugd2UndmUgYW5hbHl6ZWQgaG93IG11Y2ggc3BhY2Ugd2UgbmVlZCwKLSAgICAgICB3ZSBkb24ndCBoYXZlIHRvIHJlc2l6ZSB0aGUgc3RyaW5nLgotICAgICAgIFRoZXJlIGNhbiBiZSBubyBlcnJvcnMgYmV5b25kIHRoaXMgcG9pbnQuICovCi0gICAgc3RyaW5nID0gUHlVbmljb2RlX05ldyhuLCBtYXhjaGFyKTsKLSAgICBpZiAoIXN0cmluZykKLSAgICAgICAgZ290byBmYWlsOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzdHJpbmcpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzdHJpbmcpOwotICAgIGNhbGxyZXN1bHQgPSBjYWxscmVzdWx0czsKLSAgICBudW1iZXJyZXN1bHQgPSBudW1iZXJyZXN1bHRzOwotCi0gICAgZm9yIChpID0gMCwgZiA9IGZvcm1hdDsgKmY7IGYrKykgewotICAgICAgICBpZiAoKmYgPT0gJyUnKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBwOwotCi0gICAgICAgICAgICBwID0gZjsKLSAgICAgICAgICAgIGYgPSBwYXJzZV9mb3JtYXRfZmxhZ3MoZiwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICAvKiBjaGVja2luZyBmb3IgPT0gYmVjYXVzZSB0aGUgbGFzdCBhcmd1bWVudCBjb3VsZCBiZSBhIGVtcHR5Ci0gICAgICAgICAgICAgICBzdHJpbmcsIHdoaWNoIGNhdXNlcyBpIHRvIHBvaW50IHRvIGVuZCwgdGhlIGFzc2VydCBhdCB0aGUgZW5kIG9mCi0gICAgICAgICAgICAgICB0aGUgbG9vcCAqLwotICAgICAgICAgICAgYXNzZXJ0KGkgPD0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoKmYpIHsKLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGludCBvcmRpbmFsID0gdmFfYXJnKHZhcmdzLCBpbnQpOwotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBpKyssIG9yZGluYWwpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICBjYXNlICdwJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgaWYgKCpmID09ICdwJykKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgdm9pZCAqKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIGludCk7Ci0gICAgICAgICAgICAgICAgLyogZXh0cmFjdCB0aGUgcmVzdWx0IGZyb20gbnVtYmVycmVzdWx0cyBhbmQgYXBwZW5kLiAqLwotICAgICAgICAgICAgICAgIGxlbiA9IHN0cmxlbihudW1iZXJyZXN1bHQpOwotICAgICAgICAgICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cihzdHJpbmcsIGksIG51bWJlcnJlc3VsdCwgbGVuKTsKLSAgICAgICAgICAgICAgICAvKiBza2lwIG92ZXIgdGhlIHNlcGFyYXRpbmcgJ1wwJyAqLwotICAgICAgICAgICAgICAgIGkgKz0gbGVuOwotICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdCArPSBsZW47Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCpudW1iZXJyZXN1bHQgPT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0Kys7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG51bWJlcnJlc3VsdCA8PSBudW1iZXJyZXN1bHRzICsgbnVtYmVyc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIGNoYXIgKik7Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb25lIHdpdGggdGhlIHVuaWNvZGUoKS9yZXByKCkgPT4gZm9yZ2V0IGl0ICovCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gbmV4dCB1bmljb2RlKCkvcmVwcigpIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICsrY2FsbHJlc3VsdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1UnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQob2JqKSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksIG9iaiwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIHZhX2FyZyh2YXJncywgY29uc3QgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQob2JqKSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCBvYmosIDAsIHNpemUpOwotICAgICAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgKmNhbGxyZXN1bHQsIDAsIHNpemUpOwotICAgICAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrY2FsbHJlc3VsdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1MnOgotICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICBjYXNlICdBJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCgqY2FsbHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgLyogdW51c2VkLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgIHNpemUpOwotICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAvKiBXZSdyZSBkb25lIHdpdGggdGhlIHVuaWNvZGUoKS9yZXByKCkgPT4gZm9yZ2V0IGl0ICovCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gbmV4dCB1bmljb2RlKCkvcmVwcigpIHJlc3VsdCAqLwotICAgICAgICAgICAgICAgICsrY2FsbHJlc3VsdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJyUnOgotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBpKyssICclJyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuID0gc3RybGVuKHApOwotICAgICAgICAgICAgICAgIHVuaWNvZGVfd3JpdGVfY3N0cihzdHJpbmcsIGksIHAsIGxlbik7Ci0gICAgICAgICAgICAgICAgaSArPSBsZW47Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KGkgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBmID0gdW5pY29kZV9mcm9tZm9ybWF0X2FyZygmd3JpdGVyLCBmLCAmdmFyZ3MyKTsKKyAgICAgICAgICAgIGlmIChmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0KGkgPCBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBpKyssICpmKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBhc3NlcnQoaSA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKnA7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICBlbmQ6Ci0gICAgaWYgKGNhbGxyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKGNhbGxyZXN1bHRzKTsKLSAgICBpZiAobnVtYmVycmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShudW1iZXJyZXN1bHRzKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQoc3RyaW5nKTsKLSAgZmFpbDoKLSAgICBpZiAoY2FsbHJlc3VsdHMpIHsKLSAgICAgICAgUHlPYmplY3QgKipjYWxscmVzdWx0MiA9IGNhbGxyZXN1bHRzOwotICAgICAgICB3aGlsZSAoY2FsbHJlc3VsdDIgPCBjYWxscmVzdWx0KSB7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKCpjYWxscmVzdWx0Mik7Ci0gICAgICAgICAgICArK2NhbGxyZXN1bHQyOworICAgICAgICAgICAgcCA9IGY7CisgICAgICAgICAgICBkbworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQgY2hhcikqcCA+IDEyNykgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBleHBlY3RzIGFuIEFTQ0lJLWVuY29kZWQgZm9ybWF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcsIGdvdCBhIG5vbi1BU0NJSSBieXRlOiAweCUwMngiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpKnApOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJyUnKTsKKyAgICAgICAgICAgIGxlbiA9IHAgLSBmOworCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1wwJykKKyAgICAgICAgICAgICAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCBmLCBsZW4pIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgICAgIGYgPSBwOwogICAgICAgICB9Ci0gICAgICAgIFB5T2JqZWN0X0ZyZWUoY2FsbHJlc3VsdHMpOwogICAgIH0KLSAgICBpZiAobnVtYmVycmVzdWx0cykKLSAgICAgICAgUHlPYmplY3RfRnJlZShudW1iZXJyZXN1bHRzKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CisKKyAgZmFpbDoKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTI5NjgsNiArMjg3OCw5IEBACiBQeVVuaWNvZGVfRnJvbU9yZGluYWwoaW50IG9yZGluYWwpCiB7CiAgICAgUHlPYmplY3QgKnY7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKKwogICAgIGlmIChvcmRpbmFsIDwgMCB8fCBvcmRpbmFsID4gTUFYX1VOSUNPREUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2hyKCkgYXJnIG5vdCBpbiByYW5nZSgweDExMDAwMCkiKTsKQEAgLTI5ODAsMTMgKzI4OTMsMTUgQEAKICAgICB2ID0gUHlVbmljb2RlX05ldygxLCBvcmRpbmFsKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQodiksIFB5VW5pY29kZV9EQVRBKHYpLCAwLCBvcmRpbmFsKTsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodik7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOworICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBvcmRpbmFsKTsKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHYsIDEpKTsKICAgICByZXR1cm4gdjsKIH0KIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21PYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaikKK1B5VW5pY29kZV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvYmopCiB7CiAgICAgLyogWFhYIFBlcmhhcHMgd2Ugc2hvdWxkIG1ha2UgdGhpcyBBUEkgYW4gYWxpYXMgb2YKICAgICAgICBQeU9iamVjdF9TdHIoKSBpbnN0ZWFkID8hICovCkBAIC0zMDA4LDcgKzI5MjMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QocmVnaXN0ZXIgUHlPYmplY3QgKm9iaiwKK1B5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChQeU9iamVjdCAqb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKQEAgLTMwNjAsMTQgKzI5NzUsMTcgQEAKICAgIDEgb24gc3VjY2Vzcy4gKi8KIGludAogX1B5X25vcm1hbGl6ZV9lbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICBjaGFyICpsb3dlciwKLSAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93ZXJfbGVuKQorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsb3dlciwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvd2VyX2xlbikKIHsKICAgICBjb25zdCBjaGFyICplOwogICAgIGNoYXIgKmw7CiAgICAgY2hhciAqbF9lbmQ7CiAKICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkgeworICAgICAgICAvKiA2ID09IHN0cmxlbigidXRmLTgiKSArIDEgKi8KKyAgICAgICAgaWYgKGxvd2VyX2xlbiA8IDYpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgc3RyY3B5KGxvd2VyLCAidXRmLTgiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQpAQCAtMzEwOSw3ICszMDI3LDggQEAKICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHMsIHNpemUsIGVycm9ycywgTlVMTCk7CiAgICAgICAgIGVsc2UgaWYgKChzdHJjbXAobG93ZXIsICJsYXRpbi0xIikgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImxhdGluMSIpID09IDApIHx8Ci0gICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkpCisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzbzg4NTktMSIpID09IDApKQogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocywgc2l6ZSwgZXJyb3JzKTsKICNpZmRlZiBIQVZFX01CQ1MKICAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAibWJjcyIpID09IDApCkBAIC0zMTMwLDEzICszMDQ5LDE1IEBACiAgICAgYnVmZmVyID0gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmluZm8pOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIHVuaWNvZGUgPSBQeUNvZGVjX0RlY29kZShidWZmZXIsIGVuY29kaW5nLCBlcnJvcnMpOworICAgIHVuaWNvZGUgPSBfUHlDb2RlY19EZWNvZGVUZXh0KGJ1ZmZlciwgZW5jb2RpbmcsIGVycm9ycyk7CiAgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHVuaWNvZGUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZGVjb2RlciBkaWQgbm90IHJldHVybiBhIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBkZWNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmRlY29kZSgpIHRvIGRlY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lLCBQeV9UWVBFKHVuaWNvZGUpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzE5NCw4ICszMTE1LDEwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh2KSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImRlY29kZXIgZGlkIG5vdCByZXR1cm4gYSBzdHIgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgZGVjb2RlciByZXR1cm5lZCAnJS40MDBzJyBpbnN0ZWFkIG9mICdzdHInOyAiCisgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGUoKSB0byBkZWNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSwgUHlfVFlQRSh1bmljb2RlKS0+dHBfbmFtZSk7CiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KQEAgLTMzNDMsNyArMzI2Niw3IEBACiAgICAgfQogCiAgICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkgewotICAgICAgICAvKiBsb2NhbGUgZW5jb2Rpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUgKi8KKyAgICAgICAgLyogInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlciAqLwogICAgICAgICBjaGFyICpzdHI7CiAKICAgICAgICAgc3RyID0gX1B5X3djaGFyMmNoYXIod3N0ciwgJmVycm9yX3Bvcyk7CkBAIC0zMzYzLDYgKzMyODYsNyBAQAogICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICAvKiBzdHJpY3QgbW9kZSAqLwogICAgICAgICBzaXplX3QgbGVuLCBsZW4yOwogCiAgICAgICAgIGxlbiA9IHdjc3RvbWJzKE5VTEwsIHdzdHIsIDApOwpAQCAtMzQwMSw3ICszMzI1LDcgQEAKICAgICAgICAgd3N0ciA9IF9QeV9jaGFyMndjaGFyKGVycm1zZywgJmVycmxlbik7CiAgICAgICAgIGlmICh3c3RyICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlYXNvbiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgZXJybGVuKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUod3N0cik7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdzdHIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGVycm1zZyA9IE5VTEw7CiAgICAgfQpAQCAtMzQ3OSw3ICszNDAzLDggQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmICgoc3RyY21wKGxvd2VyLCAibGF0aW4tMSIpID09IDApIHx8CiAgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJsYXRpbjEiKSA9PSAwKSB8fAotICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApKQorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvLTg4NTktMSIpID09IDApIHx8CisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc284ODU5LTEiKSA9PSAwKSkKICAgICAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nKHVuaWNvZGUsIGVycm9ycyk7CiAjaWZkZWYgSEFWRV9NQkNTCiAgICAgICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgIm1iY3MiKSA9PSAwKQpAQCAtMzQ5MCw3ICszNDE1LDcgQEAKICAgICB9CiAKICAgICAvKiBFbmNvZGUgdmlhIHRoZSBjb2RlYyByZWdpc3RyeSAqLwotICAgIHYgPSBQeUNvZGVjX0VuY29kZSh1bmljb2RlLCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICB2ID0gX1B5Q29kZWNfRW5jb2RlVGV4dCh1bmljb2RlLCBlbmNvZGluZywgZXJyb3JzKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzUwNCw3ICszNDI5LDggQEAKICAgICAgICAgUHlPYmplY3QgKmI7CiAKICAgICAgICAgZXJyb3IgPSBQeUVycl9XYXJuRm9ybWF0KFB5RXhjX1J1bnRpbWVXYXJuaW5nLCAxLAotICAgICAgICAgICAgImVuY29kZXIgJXMgcmV0dXJuZWQgYnl0ZWFycmF5IGluc3RlYWQgb2YgYnl0ZXMiLAorICAgICAgICAgICAgImVuY29kZXIgJXMgcmV0dXJuZWQgYnl0ZWFycmF5IGluc3RlYWQgb2YgYnl0ZXM7ICIKKyAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZSgpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAogICAgICAgICAgICAgZW5jb2RpbmcpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKQEAgLTM1MTcsOCArMzQ0MywxMCBAQAogICAgIH0KIAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJlbmNvZGVyIGRpZCBub3QgcmV0dXJuIGEgYnl0ZXMgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAotICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGVuY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnYnl0ZXMnOyAiCisgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZSgpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgUHlfREVDUkVGKHYpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMzU0NCw4ICszNDcyLDEwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh2KSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImVuY29kZXIgZGlkIG5vdCByZXR1cm4gYW4gc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGVuY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gZW5jb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUsIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zNjA4LDggKzM1MzgsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoc3Vycm9nYXRlZXNjYXBlKQotICAgIHsKKyAgICBpZiAoc3Vycm9nYXRlZXNjYXBlKSB7CisgICAgICAgIC8qICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgKi8KICAgICAgICAgd3N0ciA9IF9QeV9jaGFyMndjaGFyKHN0ciwgJndsZW4pOwogICAgICAgICBpZiAod3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAod2xlbiA9PSAoc2l6ZV90KS0xKQpAQCAtMzYyMCw5ICszNTUwLDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICB1bmljb2RlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3c3RyLCB3bGVuKTsKLSAgICAgICAgUHlNZW1fRnJlZSh3c3RyKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICB9CiAgICAgZWxzZSB7CisgICAgICAgIC8qIHN0cmljdCBtb2RlICovCiAjaWZuZGVmIEhBVkVfQlJPS0VOX01CU1RPV0NTCiAgICAgICAgIHdsZW4gPSBtYnN0b3djcyhOVUxMLCBzdHIsIDApOwogI2Vsc2UKQEAgLTM2NDIsNyArMzU3Myw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBUaGlzIHNob3VsZG4ndCBmYWlsIG5vdyAqLwogICAgICAgICB3bGVuMiA9IG1ic3Rvd2NzKHdzdHIsIHN0ciwgd2xlbisxKTsKICAgICAgICAgaWYgKHdsZW4yID09IChzaXplX3QpLTEpIHsKICAgICAgICAgICAgIGlmICh3c3RyICE9IHNtYWxsYnVmKQpAQCAtMzY2OCw3ICszNTk4LDcgQEAKICAgICAgICAgd3N0ciA9IF9QeV9jaGFyMndjaGFyKGVycm1zZywgJmVycmxlbik7CiAgICAgICAgIGlmICh3c3RyICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlYXNvbiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgZXJybGVuKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUod3N0cik7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHdzdHIpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGVycm1zZyA9IE5VTEw7CiAgICAgfQpAQCAtMzczNiwxOCArMzY2NiwyMCBAQAogCiAKIGludAotX1B5VW5pY29kZV9IYXNOVUxDaGFycyhQeU9iamVjdCogcykKK19QeVVuaWNvZGVfSGFzTlVMQ2hhcnMoUHlPYmplY3QqIHN0cikKIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm51bCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBwb3M7CiAKLSAgICBpZiAobnVsID09IE5VTEwpCi0gICAgICAgIG51bCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiXDAiLCAxKTsKLSAgICBpZiAobnVsID09IE5VTEwpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Db250YWlucyhzLCBudWwpOworICAgIHBvcyA9IGZpbmRjaGFyKFB5VW5pY29kZV9EQVRBKHN0ciksIFB5VW5pY29kZV9LSU5EKHN0ciksCisgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSwgJ1wwJywgMSk7CisgICAgaWYgKHBvcyA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKIH0KIAotCiBpbnQKIFB5VW5pY29kZV9GU0NvbnZlcnRlcihQeU9iamVjdCogYXJnLCB2b2lkKiBhZGRyKQogewpAQCAtMzg1MSw2ICszNzgzLDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBQeU9iamVjdF9NQUxMT0MoUHlCeXRlc19HRVRfU0laRShieXRlcykgKyAxKTsKICAgICAgICAgaWYgKF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC00MDE5LDYgKzM5NTIsOSBAQAogUHlfVUNTNAogUHlVbmljb2RlX1JlYWRDaGFyKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IGluZGV4KQogeworICAgIHZvaWQgKmRhdGE7CisgICAgaW50IGtpbmQ7CisKICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSB8fCBQeVVuaWNvZGVfUkVBRFkodW5pY29kZSkgPT0gLTEpIHsKICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKICAgICAgICAgcmV0dXJuIChQeV9VQ1M0KS0xOwpAQCAtNDAyNyw3ICszOTYzLDkgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJzdHJpbmcgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiAoUHlfVUNTNCktMTsKICAgICB9Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgaW5kZXgpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGluZGV4KTsKIH0KIAogaW50CkBAIC00MDg2LDYgKzQwMjQsNyBAQAogICAgICpleGNlcHRpb25PYmplY3QgPSBOVUxMOwogfQogCisjaWZkZWYgSEFWRV9NQkNTCiAvKiBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBoZWxwZXI6CiAgICBidWlsZCBhcmd1bWVudHMsIGNhbGwgdGhlIGNhbGxiYWNrIGFuZCBjaGVjayB0aGUgYXJndW1lbnRzLAogICAgaWYgbm8gZXhjZXB0aW9uIG9jY3VycmVkLCBjb3B5IHRoZSByZXBsYWNlbWVudCB0byB0aGUgb3V0cHV0CkBAIC00MDk0LDExICs0MDMzLDEyIEBACiAqLwogCiBzdGF0aWMgaW50Ci11bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcihjb25zdCBjaGFyICplcnJvcnMsIFB5T2JqZWN0ICoqZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKippbnB1dCwgY29uc3QgY2hhciAqKmluZW5kLCBQeV9zc2l6ZV90ICpzdGFydGlucG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqZW5kaW5wb3MsIFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LCBjb25zdCBjaGFyICoqaW5wdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zKQordW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd2NoYXIoCisgICAgY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKKyAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqcmVhc29uLAorICAgIGNvbnN0IGNoYXIgKippbnB1dCwgY29uc3QgY2hhciAqKmluZW5kLCBQeV9zc2l6ZV90ICpzdGFydGlucG9zLAorICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAorICAgIFB5T2JqZWN0ICoqb3V0cHV0LCBQeV9zc2l6ZV90ICpvdXRwb3MpCiB7CiAgICAgc3RhdGljIGNoYXIgKmFyZ3BhcnNlID0gIk8hbjtkZWNvZGluZyBlcnJvciBoYW5kbGVyIG11c3QgcmV0dXJuIChzdHIsIGludCkgdHVwbGUiOwogCkBAIC00MTA5LDEyICs0MDQ5LDExIEBACiAgICAgUHlfc3NpemVfdCByZXF1aXJlZHNpemU7CiAgICAgUHlfc3NpemVfdCBuZXdwb3M7CiAgICAgUHlPYmplY3QgKmlucHV0b2JqID0gTlVMTDsKLSAgICBpbnQgcmVzID0gLTE7CisgICAgd2NoYXJfdCAqcmVwd3N0cjsKKyAgICBQeV9zc2l6ZV90IHJlcHdsZW47CiAKLSAgICBpZiAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpICE9IFB5VW5pY29kZV9XQ0hBUl9LSU5EKQotICAgICAgICBvdXRzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKm91dHB1dCk7Ci0gICAgZWxzZQotICAgICAgICBvdXRzaXplID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCgqb3V0cHV0KTsKKyAgICBhc3NlcnQgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSA9PSBQeVVuaWNvZGVfV0NIQVJfS0lORCk7CisgICAgb3V0c2l6ZSA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgoKm91dHB1dCk7CiAKICAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKSB7CiAgICAgICAgICplcnJvckhhbmRsZXIgPSBQeUNvZGVjX0xvb2t1cEVycm9yKGVycm9ycyk7CkBAIC00MTM5LDcgKzQwNzgsOTggQEAKICAgICB9CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHJlc3R1cGxlLCBhcmdwYXJzZSwgJlB5VW5pY29kZV9UeXBlLCAmcmVwdW5pY29kZSwgJm5ld3BvcykpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcHVuaWNvZGUpID09IC0xKQorCisgICAgLyogQ29weSBiYWNrIHRoZSBieXRlcyB2YXJpYWJsZXMsIHdoaWNoIG1pZ2h0IGhhdmUgYmVlbiBtb2RpZmllZCBieSB0aGUKKyAgICAgICBjYWxsYmFjayAqLworICAgIGlucHV0b2JqID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KCpleGNlcHRpb25PYmplY3QpOworICAgIGlmICghaW5wdXRvYmopCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soaW5wdXRvYmopKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJleGNlcHRpb24gYXR0cmlidXRlIG9iamVjdCBtdXN0IGJlIGJ5dGVzIik7CisgICAgfQorICAgICppbnB1dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGlucHV0b2JqKTsKKyAgICBpbnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGlucHV0b2JqKTsKKyAgICAqaW5lbmQgPSAqaW5wdXQgKyBpbnNpemU7CisgICAgLyogd2UgY2FuIERFQ1JFRiBzYWZlbHksIGFzIHRoZSBleGNlcHRpb24gaGFzIGFub3RoZXIgcmVmZXJlbmNlLAorICAgICAgIHNvIHRoZSBvYmplY3Qgd29uJ3QgZ28gYXdheS4gKi8KKyAgICBQeV9ERUNSRUYoaW5wdXRvYmopOworCisgICAgaWYgKG5ld3BvczwwKQorICAgICAgICBuZXdwb3MgPSBpbnNpemUrbmV3cG9zOworICAgIGlmIChuZXdwb3M8MCB8fCBuZXdwb3M+aW5zaXplKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbmRleEVycm9yLCAicG9zaXRpb24gJXpkIGZyb20gZXJyb3IgaGFuZGxlciBvdXQgb2YgYm91bmRzIiwgbmV3cG9zKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKworICAgIHJlcHdzdHIgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShyZXB1bmljb2RlLCAmcmVwd2xlbik7CisgICAgaWYgKHJlcHdzdHIgPT0gTlVMTCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIC8qIG5lZWQgbW9yZSBzcGFjZT8gKGF0IGxlYXN0IGVub3VnaCBmb3Igd2hhdCB3ZQorICAgICAgIGhhdmUrdGhlIHJlcGxhY2VtZW50K3RoZSByZXN0IG9mIHRoZSBzdHJpbmcgKHN0YXJ0aW5nCisgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKKyAgICAgICB3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZykgKi8KKyAgICByZXF1aXJlZHNpemUgPSAqb3V0cG9zICsgcmVwd2xlbiArIGluc2l6ZS1uZXdwb3M7CisgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IG91dHNpemUpIHsKKyAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA8IDIqb3V0c2l6ZSkKKyAgICAgICAgICAgIHJlcXVpcmVkc2l6ZSA9IDIqb3V0c2l6ZTsKKyAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorICAgIHdjc25jcHkoX1B5VW5pY29kZV9XU1RSKCpvdXRwdXQpICsgKm91dHBvcywgcmVwd3N0ciwgcmVwd2xlbik7CisgICAgKm91dHBvcyArPSByZXB3bGVuOworCisgICAgKmVuZGlucG9zID0gbmV3cG9zOworICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKKworICAgIC8qIHdlIG1hZGUgaXQhICovCisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIDA7CisKKyAgb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYgICAvKiBIQVZFX01CQ1MgKi8KKworc3RhdGljIGludAordW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIgLyogUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcyAqLykKK3sKKyAgICBzdGF0aWMgY2hhciAqYXJncGFyc2UgPSAiTyFuO2RlY29kaW5nIGVycm9yIGhhbmRsZXIgbXVzdCByZXR1cm4gKHN0ciwgaW50KSB0dXBsZSI7CisKKyAgICBQeU9iamVjdCAqcmVzdHVwbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXB1bmljb2RlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGluc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG5ld3BvczsKKyAgICBQeV9zc2l6ZV90IHJlcGxlbjsKKyAgICBQeU9iamVjdCAqaW5wdXRvYmogPSBOVUxMOworCisgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOworICAgICAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKworICAgIG1ha2VfZGVjb2RlX2V4Y2VwdGlvbihleGNlcHRpb25PYmplY3QsCisgICAgICAgIGVuY29kaW5nLAorICAgICAgICAqaW5wdXQsICppbmVuZCAtICppbnB1dCwKKyAgICAgICAgKnN0YXJ0aW5wb3MsICplbmRpbnBvcywKKyAgICAgICAgcmVhc29uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbk9iamVjdCA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICByZXN0dXBsZSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoKmVycm9ySGFuZGxlciwgKmV4Y2VwdGlvbk9iamVjdCwgTlVMTCk7CisgICAgaWYgKHJlc3R1cGxlID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdHVwbGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICZhcmdwYXJzZVs0XSk7CisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHJlc3R1cGxlLCBhcmdwYXJzZSwgJlB5VW5pY29kZV9UeXBlLCAmcmVwdW5pY29kZSwgJm5ld3BvcykpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIC8qIENvcHkgYmFjayB0aGUgYnl0ZXMgdmFyaWFibGVzLCB3aGljaCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlCkBAIC00MTY0LDU0ICs0MTk0LDI1IEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpICE9IFB5VW5pY29kZV9XQ0hBUl9LSU5EKSB7Ci0gICAgICAgIC8qIG5lZWQgbW9yZSBzcGFjZT8gKGF0IGxlYXN0IGVub3VnaCBmb3Igd2hhdCB3ZQotICAgICAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIChzdGFydGluZwotICAgICAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQotICAgICAgICAgICB3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZykgKi8KLSAgICAgICAgUHlfc3NpemVfdCByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKLSAgICAgICAgcmVxdWlyZWRzaXplID0gKm91dHBvcyArIHJlcGxlbiArIGluc2l6ZS1uZXdwb3M7Ci0gICAgICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7Ci0gICAgICAgICAgICBpZiAocmVxdWlyZWRzaXplPDIqb3V0c2l6ZSkKLSAgICAgICAgICAgICAgICByZXF1aXJlZHNpemUgPSAyKm91dHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHVuaWNvZGVfd2lkZW4ob3V0cHV0LCAqb3V0cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUocmVwdW5pY29kZSkpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoKm91dHB1dCwgKm91dHBvcywgcmVwdW5pY29kZSwgMCwgcmVwbGVuKTsKLSAgICAgICAgKm91dHBvcyArPSByZXBsZW47Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB3Y2hhcl90ICpyZXB3c3RyOwotICAgICAgICBQeV9zc2l6ZV90IHJlcHdsZW47Ci0gICAgICAgIHJlcHdzdHIgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShyZXB1bmljb2RlLCAmcmVwd2xlbik7Ci0gICAgICAgIGlmIChyZXB3c3RyID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIC8qIG5lZWQgbW9yZSBzcGFjZT8gKGF0IGxlYXN0IGVub3VnaCBmb3Igd2hhdCB3ZQotICAgICAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIChzdGFydGluZwotICAgICAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQotICAgICAgICAgICB3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZykgKi8KLSAgICAgICAgcmVxdWlyZWRzaXplID0gKm91dHBvcyArIHJlcHdsZW4gKyBpbnNpemUtbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA8IDIqb3V0c2l6ZSkKLSAgICAgICAgICAgICAgICByZXF1aXJlZHNpemUgPSAyKm91dHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgd2NzbmNweShfUHlVbmljb2RlX1dTVFIoKm91dHB1dCkgKyAqb3V0cG9zLCByZXB3c3RyLCByZXB3bGVuKTsKLSAgICAgICAgKm91dHBvcyArPSByZXB3bGVuOwotICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcHVuaWNvZGUpIDwgMCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIHJlcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcHVuaWNvZGUpOworICAgIHdyaXRlci0+bWluX2xlbmd0aCArPSByZXBsZW47CisgICAgaWYgKHJlcGxlbiA+IDEpCisgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHJlcHVuaWNvZGUpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKICAgICAqZW5kaW5wb3MgPSBuZXdwb3M7CiAgICAgKmlucHRyID0gKmlucHV0ICsgbmV3cG9zOwogCiAgICAgLyogd2UgbWFkZSBpdCEgKi8KLSAgICByZXMgPSAwOworICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOworICAgIHJldHVybiAwOwogCiAgIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICByZXR1cm4gLTE7CiB9CiAKIC8qIC0tLSBVVEYtNyBDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDMxOSw5ICs0MzIwLDggQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwogICAgIGNvbnN0IGNoYXIgKmU7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZXJybXNnID0gIiI7CiAgICAgaW50IGluU2hpZnQgPSAwOwogICAgIFB5X3NzaXplX3Qgc2hpZnRPdXRTdGFydDsKQEAgLTQzMzEsMTcgKzQzMzEsMTcgQEAKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKIAotICAgIC8qIFN0YXJ0IG9mZiBhc3N1bWluZyBpdCdzIGFsbCBBU0NJSS4gV2lkZW4gbGF0ZXIgYXMgbmVjZXNzYXJ5LiAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKCF1bmljb2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2l6ZSA9PSAwKSB7CiAgICAgICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgICAgICpjb25zdW1lZCA9IDA7Ci0gICAgICAgIHJldHVybiB1bmljb2RlOworICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKICAgICB9CiAKLSAgICBzaGlmdE91dFN0YXJ0ID0gb3V0cG9zID0gMDsKKyAgICAvKiBTdGFydCBvZmYgYXNzdW1pbmcgaXQncyBhbGwgQVNDSUkuIFdpZGVuIGxhdGVyIGFzIG5lY2Vzc2FyeS4gKi8KKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworCisgICAgc2hpZnRPdXRTdGFydCA9IDA7CiAgICAgZSA9IHMgKyBzaXplOwogCiAgICAgd2hpbGUgKHMgPCBlKSB7CkBAIC00MzY0LDEzICs0MzY0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleHBlY3RpbmcgYSBzZWNvbmQgc3Vycm9nYXRlICovCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKG91dENoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gyID0gUHlfVU5JQ09ERV9KT0lOX1NVUlJPR0FURVMoc3Vycm9nYXRlLCBvdXRDaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gyKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoMikgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIHN1cnJvZ2F0ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBzdXJyb2dhdGUpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC00MzgwLDcgKzQzODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gb3V0Q2g7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBvdXRDaCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIG91dENoKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpAQCAtNDM4OSw3ICs0Mzg5LDcgQEAKICAgICAgICAgICAgICAgICBpblNoaWZ0ID0gMDsKICAgICAgICAgICAgICAgICBzKys7CiAgICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBzdXJyb2dhdGUpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHN1cnJvZ2F0ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgIH0KQEAgLTQ0MTAsNyArNDQxMCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGNoICE9ICctJykgewogICAgICAgICAgICAgICAgICAgICAvKiAnLScgaXMgYWJzb3JiZWQ7IG90aGVyIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIHByZXNlcnZlZCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00NDIwLDIwICs0NDIwLDIwIEBACiAgICAgICAgICAgICBzKys7IC8qIGNvbnN1bWUgJysnICovCiAgICAgICAgICAgICBpZiAocyA8IGUgJiYgKnMgPT0gJy0nKSB7IC8qICcrLScgZW5jb2RlcyAnKycgKi8KICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgJysnKSA8IDApCisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsICcrJykgPCAwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgLyogYmVnaW4gYmFzZTY0LWVuY29kZWQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAxOwotICAgICAgICAgICAgICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3M7CisgICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCA9IHdyaXRlci5wb3M7CiAgICAgICAgICAgICAgICAgYmFzZTY0Yml0cyA9IDA7CiAgICAgICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChERUNPREVfRElSRUNUKGNoKSkgeyAvKiBjaGFyYWN0ZXIgZGVjb2RlcyBhcyBpdHNlbGYgKi8KLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOwpAQCAtNDQ0NCwxMSArNDQ0NCwxMSBAQAogICAgICAgICBjb250aW51ZTsKIHV0ZjdFcnJvcjoKICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAidXRmNyIsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIApAQCAtNDQ2MCwxMSArNDQ2MCwxMSBAQAogICAgICAgICAgICAgICAgIChiYXNlNjRiaXRzID49IDYpIHx8CiAgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPiAwICYmIGJhc2U2NGJ1ZmZlciAhPSAwKSkgewogICAgICAgICAgICAgZW5kaW5wb3MgPSBzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAidXRmNyIsICJ1bnRlcm1pbmF0ZWQgc2hpZnQgc2VxdWVuY2UiLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgaWYgKHMgPCBlKQogICAgICAgICAgICAgICAgIGdvdG8gcmVzdGFydDsKQEAgLTQ0NzQsNyArNDQ3NCw3IEBACiAgICAgLyogcmV0dXJuIHN0YXRlICovCiAgICAgaWYgKGNvbnN1bWVkKSB7CiAgICAgICAgIGlmIChpblNoaWZ0KSB7Ci0gICAgICAgICAgICBvdXRwb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KICAgICAgICAgICAgICpjb25zdW1lZCA9IHN0YXJ0aW5wb3M7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC00NDgyLDE3ICs0NDgyLDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQ1NzUsNyArNDU3Miw3IEBACiAKICAgICAgICAgICAgIC8qIGNvZGUgZmlyc3Qgc3Vycm9nYXRlICovCiAgICAgICAgICAgICBiYXNlNjRiaXRzICs9IDE2OwotICAgICAgICAgICAgYmFzZTY0YnVmZmVyID0gKGJhc2U2NGJ1ZmZlciA8PCAxNikgfCAweGQ4MDAgfCAoKGNoLTB4MTAwMDApID4+IDEwKTsKKyAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICB3aGlsZSAoYmFzZTY0Yml0cyA+PSA2KSB7CiAgICAgICAgICAgICAgICAgKm91dCsrID0gVE9fQkFTRTY0KGJhc2U2NGJ1ZmZlciA+PiAoYmFzZTY0Yml0cy02KSk7CiAgICAgICAgICAgICAgICAgYmFzZTY0Yml0cyAtPSA2OwpAQCAtNDY3Niw5ICs0NjczLDkgQEAKICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCwgc2VlIGluIFNUUklOR0xJQih1dGY4X2RlY29kZSkgZm9yCiAgICAgICAgICAgIGFuIGV4cGxhbmF0aW9uLiAqLwotICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqX3AgPSBwOwotICAgICAgICByZWdpc3RlciBQeV9VQ1MxICogcSA9IGRlc3Q7CisgICAgICAgIC8qIEhlbHAgYWxsb2NhdGlvbiAqLworICAgICAgICBjb25zdCBjaGFyICpfcCA9IHA7CisgICAgICAgIFB5X1VDUzEgKiBxID0gZGVzdDsKICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikgX3A7CiAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCkBAIC00NzAxLDggKzQ2OTgsOCBAQAogICAgICAgICAvKiBGYXN0IHBhdGgsIHNlZSBpbiBTVFJJTkdMSUIodXRmOF9kZWNvZGUpIGluIHN0cmluZ2xpYi9jb2RlY3MuaAogICAgICAgICAgICBmb3IgYW4gZXhwbGFuYXRpb24uICovCiAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChwLCBTSVpFT0ZfTE9ORykpIHsKLSAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqX3AgPSBwOworICAgICAgICAgICAgLyogSGVscCBhbGxvY2F0aW9uICovCisgICAgICAgICAgICBjb25zdCBjaGFyICpfcCA9IHA7CiAgICAgICAgICAgICB3aGlsZSAoX3AgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWUgPSAqKHVuc2lnbmVkIGxvbmcgKikgX3A7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNDcyNywxMCArNDcyNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqY29uc3VtZWQpCiB7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBjb25zdCBjaGFyICplbmQgPSBzICsgc2l6ZTsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKIAogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwpAQCAtNDc1MSwyOSArNDc0NywyNiBAQAogICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogICAgIH0KIAotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKCF1bmljb2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgIG91dHBvcyA9IGFzY2lpX2RlY29kZShzLCBlbmQsIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpKTsKLSAgICBzICs9IG91dHBvczsKKyAgICB3cml0ZXIucG9zID0gYXNjaWlfZGVjb2RlKHMsIGVuZCwgd3JpdGVyLmRhdGEpOworICAgIHMgKz0gd3JpdGVyLnBvczsKICAgICB3aGlsZSAocyA8IGVuZCkgewogICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgICAgICBpbnQga2luZCA9IHdyaXRlci5raW5kOwogICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKLSAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHdyaXRlci5idWZmZXIpKQorICAgICAgICAgICAgICAgIGNoID0gYXNjaWlsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwgd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zKTsKICAgICAgICAgfSBlbHNlIGlmIChraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EKSB7Ci0gICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7Ci0gICAgICAgICAgICBjaCA9IHVjczRsaWJfdXRmOF9kZWNvZGUoJnMsIGVuZCwKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGNoKSB7CkBAIC00Nzk3LDM1ICs0NzkwLDMxIEBACiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyBjaCAtIDE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInV0Zi04IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKIEVuZDoKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IHMgLSBzdGFydHM7CiAKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodW5pY29kZSwgMSkpOwotICAgIHJldHVybiB1bmljb2RlOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogb25FcnJvcjoKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00ODM1LDcgKzQ4MjQsNyBAQAogICAgdXNlZCB0byBkZWNvZGUgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgb24gTWFjIE9TIFguCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nICh1c2UKLSAgIFB5TWVtX0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLiAqLworICAgUHlNZW1fUmF3RnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSksIG9yIE5VTEwgb24gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IuICovCiAKIHdjaGFyX3QqCiBfUHlfRGVjb2RlVVRGOF9zdXJyb2dhdGVlc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplKQpAQCAtNDg0OCw3ICs0ODM3LDcgQEAKICAgICAgICBjaGFyYWN0ZXIgY291bnQgKi8KICAgICBpZiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgPCAoc2l6ZSArIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB1bmljb2RlID0gUHlNZW1fTWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIHVuaWNvZGUgPSBQeU1lbV9SYXdNYWxsb2MoKHNpemUgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCF1bmljb2RlKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNDk3MSwxNyArNDk2MCwxMSBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSwgKmU7Ci0gICAgaW50IGJvID0gMDsgICAgICAgLyogYXNzdW1lIG5hdGl2ZSBvcmRlcmluZyBieSBkZWZhdWx0ICovCisgICAgaW50IGxlLCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwotICAgIC8qIE9mZnNldHMgZnJvbSBxIGZvciByZXRyaWV2aW5nIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKLSNlbHNlCi0gICAgaW50IGlvcmRlcltdID0gezMsIDIsIDEsIDB9OwotI2VuZGlmCiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKQEAgLTQ5OTUsMTA3ICs0OTc4LDExOCBAQAogICAgICAgIGJ5dGUgb3JkZXIgc2V0dGluZyBhY2NvcmRpbmdseS4gSW4gbmF0aXZlIG1vZGUsIHRoZSBsZWFkaW5nIEJPTQogICAgICAgIG1hcmsgaXMgc2tpcHBlZCwgaW4gYWxsIG90aGVyIG1vZGVzLCBpdCBpcyBjb3BpZWQgdG8gdGhlIG91dHB1dAogICAgICAgIHN0cmVhbSBhcy1pcyAoZ2l2aW5nIGEgWldOQlNQIGNoYXJhY3RlcikuICovCi0gICAgaWYgKGJvID09IDApIHsKLSAgICAgICAgaWYgKHNpemUgPj0gNCkgewotICAgICAgICAgICAgY29uc3QgUHlfVUNTNCBib20gPSAocVtpb3JkZXJbM11dIDw8IDI0KSB8IChxW2lvcmRlclsyXV0gPDwgMTYpIHwKLSAgICAgICAgICAgICAgICAocVtpb3JkZXJbMV1dIDw8IDgpIHwgcVtpb3JkZXJbMF1dOwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0gICAgICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gMTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoYm8gPT0gMCAmJiBzaXplID49IDQpIHsKKyAgICAgICAgUHlfVUNTNCBib20gPSAocVszXSA8PCAyNCkgfCAocVsyXSA8PCAxNikgfCAocVsxXSA8PCA4KSB8IHFbMF07CisgICAgICAgIGlmIChib20gPT0gMHgwMDAwRkVGRikgeworICAgICAgICAgICAgYm8gPSAtMTsKKyAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgeworICAgICAgICAgICAgYm8gPSAxOworICAgICAgICAgICAgcSArPSA0OworICAgICAgICB9CisgICAgICAgIGlmIChieXRlb3JkZXIpCisgICAgICAgICAgICAqYnl0ZW9yZGVyID0gYm87CisgICAgfQorCisgICAgaWYgKHEgPT0gZSkgeworICAgICAgICBpZiAoY29uc3VtZWQpCisgICAgICAgICAgICAqY29uc3VtZWQgPSBzaXplOworICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKyAgICB9CisKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICBsZSA9IGJvIDwgMDsKICNlbHNlCi0gICAgICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKLSAgICAgICAgICAgICAgICBxICs9IDQ7Ci0gICAgICAgICAgICAgICAgYm8gPSAtMTsKLSAgICAgICAgICAgIH0KKyAgICBsZSA9IGJvIDw9IDA7CiAjZW5kaWYKKyAgICBlbmNvZGluZyA9IGxlID8gInV0Zi0zMi1sZSIgOiAidXRmLTMyLWJlIjsKKworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChlIC0gcSArIDMpIC8gNDsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBQeV9VQ1M0IGNoID0gMDsKKyAgICAgICAgUHlfVUNTNCBtYXhjaCA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXIuYnVmZmVyKTsKKworICAgICAgICBpZiAoZSAtIHEgPj0gNCkgeworICAgICAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kID0gd3JpdGVyLmtpbmQ7CisgICAgICAgICAgICB2b2lkICpkYXRhID0gd3JpdGVyLmRhdGE7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpsYXN0ID0gZSAtIDQ7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IHdyaXRlci5wb3M7CisgICAgICAgICAgICBpZiAobGUpIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKHFbM10gPDwgMjQpIHwgKHFbMl0gPDwgMTYpIHwgKHFbMV0gPDwgOCkgfCBxWzBdOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPiBtYXhjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAocVswXSA8PCAyNCkgfCAocVsxXSA8PCAxNikgfCAocVsyXSA8PCA4KSB8IHFbM107CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+IG1heGNoKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmIChraW5kICE9IFB5VW5pY29kZV8xQllURV9LSU5EICYmCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIHBvcysrLCBjaCk7CisgICAgICAgICAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgICAgICAgICB9IHdoaWxlIChxIDw9IGxhc3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd3JpdGVyLnBvcyA9IHBvczsKICAgICAgICAgfQotICAgIH0KIAotICAgIGlmIChibyA9PSAtMSkgewotICAgICAgICAvKiBmb3JjZSBMRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAwOwotICAgICAgICBpb3JkZXJbMV0gPSAxOwotICAgICAgICBpb3JkZXJbMl0gPSAyOwotICAgICAgICBpb3JkZXJbM10gPSAzOwotICAgIH0KLSAgICBlbHNlIGlmIChibyA9PSAxKSB7Ci0gICAgICAgIC8qIGZvcmNlIEJFICovCi0gICAgICAgIGlvcmRlclswXSA9IDM7Ci0gICAgICAgIGlvcmRlclsxXSA9IDI7Ci0gICAgICAgIGlvcmRlclsyXSA9IDE7Ci0gICAgICAgIGlvcmRlclszXSA9IDA7Ci0gICAgfQotCi0gICAgLyogVGhpcyBtaWdodCBiZSBvbmUgdG8gbXVjaCwgYmVjYXVzZSBvZiBhIEJPTSAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KChzaXplKzMpLzQsIDEyNyk7Ci0gICAgaWYgKCF1bmljb2RlKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdW5pY29kZTsKLSAgICBvdXRwb3MgPSAwOwotCi0gICAgd2hpbGUgKHEgPCBlKSB7Ci0gICAgICAgIFB5X1VDUzQgY2g7Ci0gICAgICAgIC8qIHJlbWFpbmluZyBieXRlcyBhdCB0aGUgZW5kPyAoc2l6ZSBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IDQpICovCi0gICAgICAgIGlmIChlLXE8NCkgewotICAgICAgICAgICAgaWYgKGNvbnN1bWVkKQorICAgICAgICBpZiAoUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CisgICAgICAgICAgICBlcnJtc2cgPSAiY29kZXBvaW50IGluIHN1cnJvZ2F0ZSBjb2RlIHBvaW50IHJhbmdlKDB4ZDgwMCwgMHhlMDAwKSI7CisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGNoIDw9IG1heGNoKSB7CisgICAgICAgICAgICBpZiAocSA9PSBlIHx8IGNvbnN1bWVkKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogcmVtYWluaW5nIGJ5dGVzIGF0IHRoZSBlbmQ/IChzaXplIHNob3VsZCBiZSBkaXZpc2libGUgYnkgNCkgKi8KICAgICAgICAgICAgIGVycm1zZyA9ICJ0cnVuY2F0ZWQgZGF0YSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSAoKGNvbnN0IGNoYXIgKillKS1zdGFydHM7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7Ci0gICAgICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGlucHV0IGNoYXJzIGFyZSBpZ25vcmVkIGlmIHRoZSBjYWxsYmFjawotICAgICAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9ICgoY29uc3QgY2hhciAqKXEpIC0gc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSAoKGNvbnN0IGNoYXIgKillKSAtIHN0YXJ0czsKICAgICAgICAgfQotICAgICAgICBjaCA9IChxW2lvcmRlclszXV0gPDwgMjQpIHwgKHFbaW9yZGVyWzJdXSA8PCAxNikgfAotICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLQotICAgICAgICBpZiAoY2ggPj0gMHgxMTAwMDApCi0gICAgICAgIHsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoY2ggPCAweDExMDAwMCkgeworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJybXNnID0gImNvZGVwb2ludCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIjsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKS1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrNDsKLSAgICAgICAgICAgIGdvdG8gdXRmMzJFcnJvcjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgcSArPSA0OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIHV0ZjMyRXJyb3I6Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKworICAgICAgICAvKiBUaGUgcmVtYWluaW5nIGlucHV0IGNoYXJzIGFyZSBpZ25vcmVkIGlmIHRoZSBjYWxsYmFjaworICAgICAgICAgICBjaG9vc2VzIHRvIHNraXAgdGhlIGlucHV0ICovCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICJ1dGYzMiIsIGVycm1zZywKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsIChjb25zdCBjaGFyICoqKSZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAoY29uc3QgY2hhciAqKikmcSwKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCi0gICAgaWYgKGJ5dGVvcmRlcikKLSAgICAgICAgKmJ5dGVvcmRlciA9IGJvOwotCiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSAoY29uc3QgY2hhciAqKXEtc3RhcnRzOwogCi0gICAgLyogQWRqdXN0IGxlbmd0aCAqLwotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdW5pY29kZSwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHVuaWNvZGUpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTUxMTMsMTEgKzUxMDcsMTUgQEAKICAgICB1bnNpZ25lZCBjaGFyICpwOwogICAgIFB5X3NzaXplX3QgbnNpemUsIGk7CiAgICAgLyogT2Zmc2V0cyBmcm9tIHAgZm9yIHN0b3JpbmcgYnl0ZSBwYWlycyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgaW50IGlvcmRlcltdID0gezAsIDEsIDIsIDN9OwogI2Vsc2UKICAgICBpbnQgaW9yZGVyW10gPSB7MywgMiwgMSwgMH07CiAjZW5kaWYKKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwID0gTlVMTDsKIAogI2RlZmluZSBTVE9SRUNIQVIoQ0gpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtNTE0OSw3ICs1MTQ3LDcgQEAKICAgICBpZiAoYnl0ZW9yZGVyID09IDApCiAgICAgICAgIFNUT1JFQ0hBUigweEZFRkYpOwogICAgIGlmIChsZW4gPT0gMCkKLSAgICAgICAgZ290byBkb25lOworICAgICAgICByZXR1cm4gdjsKIAogICAgIGlmIChieXRlb3JkZXIgPT0gLTEpIHsKICAgICAgICAgLyogZm9yY2UgTEUgKi8KQEAgLTUxNTcsNiArNTE1NSw3IEBACiAgICAgICAgIGlvcmRlclsxXSA9IDE7CiAgICAgICAgIGlvcmRlclsyXSA9IDI7CiAgICAgICAgIGlvcmRlclszXSA9IDM7CisgICAgICAgIGVuY29kaW5nID0gInV0Zi0zMi1sZSI7CiAgICAgfQogICAgIGVsc2UgaWYgKGJ5dGVvcmRlciA9PSAxKSB7CiAgICAgICAgIC8qIGZvcmNlIEJFICovCkBAIC01MTY0LDEzICs1MTYzLDEwMyBAQAogICAgICAgICBpb3JkZXJbMV0gPSAyOwogICAgICAgICBpb3JkZXJbMl0gPSAxOwogICAgICAgICBpb3JkZXJbM10gPSAwOworICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItYmUiOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0zMiI7CisKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisgICAgICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOworICAgICAgICByZXR1cm4gdjsKICAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIFNUT1JFQ0hBUihQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSk7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjspIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXBzaXplLCBtb3JldW5pdHM7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgaSsrOworICAgICAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOworICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgU1RPUkVDSEFSKGNoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgZG9uZToKKyAgICAgICAgcmVwID0gdW5pY29kZV9lbmNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIsCisgICAgICAgICAgICAgICAgc3RyLCAmZXhjLCBpLTEsIGksICZpKTsKKworICAgICAgICBpZiAoIXJlcCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgcmVwc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUocmVwKTsKKyAgICAgICAgICAgIGlmIChyZXBzaXplICYgMykgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGkgLSAxLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSAvIDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHJlcCkpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcCk7CisgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9JU19BU0NJSShyZXApKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgaSAtIDEsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBmb3VyIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KKyAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG1vcmVieXRlcyA9IDQgKiAobW9yZXVuaXRzIC0gMSk7CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh2KSA+IFBZX1NTSVpFX1RfTUFYIC0gbW9yZWJ5dGVzKSB7CisgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcCA9ICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkocCwgUHlCeXRlc19BU19TVFJJTkcocmVwKSwgcmVwc2l6ZSk7CisgICAgICAgICAgICBwICs9IHJlcHNpemU7CisgICAgICAgIH0gZWxzZSAvKiByZXAgaXMgdW5pY29kZSAqLyB7CisgICAgICAgICAgICBjb25zdCBQeV9VQ1MxICpyZXBkYXRhOworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHJlcCkgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgICAgICAgICAgcmVwZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcCk7CisgICAgICAgICAgICB3aGlsZSAocmVwc2l6ZS0tKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICpyZXBkYXRhKys7CisgICAgICAgICAgICAgICAgU1RPUkVDSEFSKGNoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKHJlcCk7CisgICAgfQorCisgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciwgZm9yIGV4YW1wbGUsCisgICAgICAgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgY29udGFpbmluZyBpc29sYXRlZCBzdXJyb2dhdGVzIGFuZCB0aGUgJ2lnbm9yZScKKyAgICAgICBoYW5kbGVyIGlzIHVzZWQuICovCisgICAgbnNpemUgPSBwIC0gKHVuc2lnbmVkIGNoYXIqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICBpZiAobnNpemUgIT0gUHlCeXRlc19HRVRfU0laRSh2KSkKKyAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgbnNpemUpOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIHY7CisgIGVycm9yOgorICAgIFB5X1hERUNSRUYocmVwKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIFB5X1hERUNSRUYodik7CisgICAgcmV0dXJuIE5VTEw7CiAjdW5kZWYgU1RPUkVDSEFSCiB9CiAKQEAgLTUyMTYsMTQgKzUzMDUsMTQgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwogICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLwogICAgIGludCBuYXRpdmVfb3JkZXJpbmc7CiAgICAgY29uc3QgY2hhciAqZXJybXNnID0gIiI7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CiAKICAgICBxID0gKHVuc2lnbmVkIGNoYXIgKilzOwogICAgIGUgPSBxICsgc2l6ZTsKQEAgLTUyNTUsNDAgKzUzNDQsNDIgQEAKICAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAgICAgfQogCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPD0gMDsKKyAgICBlbmNvZGluZyA9IGJvIDw9IDAgPyAidXRmLTE2LWxlIiA6ICJ1dGYtMTYtYmUiOwogI2Vsc2UKICAgICBuYXRpdmVfb3JkZXJpbmcgPSBibyA+PSAwOworICAgIGVuY29kaW5nID0gYm8gPj0gMCA/ICJ1dGYtMTYtYmUiIDogInV0Zi0xNi1sZSI7CiAjZW5kaWYKIAogICAgIC8qIE5vdGU6IHNpemUgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZyBVbmljb2RlCiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoKGUgLSBxICsgMSkgLyAyLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKGUgLSBxICsgMSkgLyAyOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKIAotICAgIG91dHBvcyA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgUHlfVUNTNCBjaCA9IDA7CiAgICAgICAgIGlmIChlIC0gcSA+PSAyKSB7Ci0gICAgICAgICAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgICAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHdyaXRlci5idWZmZXIpKQogICAgICAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBjaCA9IHVjczFsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewogICAgICAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMkJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MyKil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CiAgICAgICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUzMjQsMjMgKzU0MTUsMjIgQEAKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsCiAgICAgICAgICAgICAgICAgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmMTYiLCBlcnJtc2csCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSZlLAogICAgICAgICAgICAgICAgICZzdGFydGlucG9zLAogICAgICAgICAgICAgICAgICZlbmRpbnBvcywKICAgICAgICAgICAgICAgICAmZXhjLAogICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICoqKSZxLAotICAgICAgICAgICAgICAgICZ1bmljb2RlLAotICAgICAgICAgICAgICAgICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIApAQCAtNTM0OCwxNiArNTQzOCwxMiBAQAogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MzczLDEzICs1NDU5LDE3IEBACiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgc2hvcnQgKm91dDsKLSAgICBQeV9zc2l6ZV90IGJ5dGVzaXplOwogICAgIFB5X3NzaXplX3QgcGFpcnM7Ci0jaWZkZWYgV09SRFNfQklHRU5ESUFOCisjaWYgUFlfQklHX0VORElBTgogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPj0gMDsKICNlbHNlCiAgICAgaW50IG5hdGl2ZV9vcmRlcmluZyA9IGJ5dGVvcmRlciA8PSAwOwogI2VuZGlmCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisgICAgUHlfc3NpemVfdCBuc2l6ZSwgcG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOworICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXAgPSBOVUxMOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc3RyKSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwpAQCAtNTQwMSw4ICs1NDkxLDggQEAKICAgICB9CiAgICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMiAtIHBhaXJzIC0gKGJ5dGVvcmRlciA9PSAwKSkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgYnl0ZXNpemUgPSAobGVuICsgcGFpcnMgKyAoYnl0ZW9yZGVyID09IDApKSAqIDI7Ci0gICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnl0ZXNpemUpOworICAgIG5zaXplID0gbGVuICsgcGFpcnMgKyAoYnl0ZW9yZGVyID09IDApOworICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG5zaXplICogMik7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTU0MTQsMjUgKzU1MDQsMTA3IEBACiAgICAgaWYgKGxlbiA9PSAwKQogICAgICAgICBnb3RvIGRvbmU7CiAKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7Ci0gICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKG91dCwgKGNvbnN0IFB5X1VDUzEgKilkYXRhLCBsZW4sIG5hdGl2ZV9vcmRlcmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOiB7Ci0gICAgICAgIHVjczJsaWJfdXRmMTZfZW5jb2RlKG91dCwgKGNvbnN0IFB5X1VDUzIgKilkYXRhLCBsZW4sIG5hdGl2ZV9vcmRlcmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOiB7Ci0gICAgICAgIHVjczRsaWJfdXRmMTZfZW5jb2RlKG91dCwgKGNvbnN0IFB5X1VDUzQgKilkYXRhLCBsZW4sIG5hdGl2ZV9vcmRlcmluZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBhc3NlcnQoMCk7CisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMWxpYl91dGYxNl9lbmNvZGUoKGNvbnN0IFB5X1VDUzEgKilkYXRhLCBsZW4sICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKKyAgICBpZiAoYnl0ZW9yZGVyIDwgMCkKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWxlIjsKKyAgICBlbHNlIGlmIChieXRlb3JkZXIgPiAwKQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMTYtYmUiOworICAgIGVsc2UKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2IjsKKworICAgIHBvcyA9IDA7CisgICAgd2hpbGUgKHBvcyA8IGxlbikgeworICAgICAgICBQeV9zc2l6ZV90IHJlcHNpemUsIG1vcmV1bml0czsKKworICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICAgICAgcG9zICs9IHVjczJsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1MyICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CisgICAgICAgICAgICBwb3MgKz0gdWNzNGxpYl91dGYxNl9lbmNvZGUoKGNvbnN0IFB5X1VDUzQgKilkYXRhICsgcG9zLCBsZW4gLSBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocG9zID09IGxlbikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJlcCA9IHVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgIHN0ciwgJmV4YywgcG9zLCBwb3MgKyAxLCAmcG9zKTsKKyAgICAgICAgaWYgKCFyZXApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIHJlcHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlcCk7CisgICAgICAgICAgICBpZiAocmVwc2l6ZSAmIDEpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBwb3MgLSAxLCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplIC8gMjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2socmVwKSk7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBtb3JldW5pdHMgPSByZXBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVwKTsKKyAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0lTX0FTQ0lJKHJlcCkpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBwb3MgLSAxLCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcyBub3QgYWxsb3dlZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiB0d28gYnl0ZXMgYXJlIHJlc2VydmVkIGZvciBlYWNoIHN1cnJvZ2F0ZSAqLworICAgICAgICBpZiAobW9yZXVuaXRzID4gMSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBvdXRwb3MgPSBvdXQgLSAodW5zaWduZWQgc2hvcnQqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbW9yZWJ5dGVzID0gMiAqIChtb3JldW5pdHMgLSAxKTsKKyAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKHYpID4gUFlfU1NJWkVfVF9NQVggLSBtb3JlYnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAvKiBpbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgUHlCeXRlc19HRVRfU0laRSh2KSArIG1vcmVieXRlcykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBvdXQgPSAodW5zaWduZWQgc2hvcnQqKSBQeUJ5dGVzX0FTX1NUUklORyh2KSArIG91dHBvczsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShvdXQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgb3V0ICs9IG1vcmV1bml0czsKKyAgICAgICAgfSBlbHNlIC8qIHJlcCBpcyB1bmljb2RlICovIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChyZXApID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKFB5VW5pY29kZV8xQllURV9EQVRBKHJlcCksIHJlcHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisKKyAgICAgICAgUHlfQ0xFQVIocmVwKTsKKyAgICB9CisKKyAgICAvKiBDdXQgYmFjayB0byBzaXplIGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBpcyBuZWNlc3NhcnkgZm9yLCBmb3IgZXhhbXBsZSwKKyAgICBlbmNvZGluZyBvZiBhIHN0cmluZyBjb250YWluaW5nIGlzb2xhdGVkIHN1cnJvZ2F0ZXMgYW5kIHRoZSAnaWdub3JlJyBoYW5kbGVyCisgICAgaXMgdXNlZC4gKi8KKyAgICBuc2l6ZSA9ICh1bnNpZ25lZCBjaGFyKikgb3V0IC0gKHVuc2lnbmVkIGNoYXIqKSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICBpZiAobnNpemUgIT0gUHlCeXRlc19HRVRfU0laRSh2KSkKKyAgICAgIF9QeUJ5dGVzX1Jlc2l6ZSgmdiwgbnNpemUpOworICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CiAgIGRvbmU6CiAgICAgcmV0dXJuIHY7CisgIGVycm9yOgorICAgIFB5X1hERUNSRUYocmVwKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIFB5X1hERUNSRUYodik7CisgICAgcmV0dXJuIE5VTEw7CisjdW5kZWYgU1RPUkVDSEFSCiB9CiAKIFB5T2JqZWN0ICoKQEAgLTU1MjMsMjcgKzU2OTUsMjYgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjaGFyKiBtZXNzYWdlOwogICAgIFB5X1VDUzQgY2hyID0gMHhmZmZmZmZmZjsgLyogaW4gY2FzZSAnZ2V0Y29kZScgbWVzc2VzIHVwICovCiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgUHlfc3NpemVfdCBpOwogCiAgICAgbGVuID0gbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKHMsIHNpemUpOworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKICAgICAvKiBBZnRlciBsZW5ndGhfb2ZfZXNjYXBlZF9hc2NpaV9zdHJpbmcoKSB0aGVyZSBhcmUgdHdvIGFsdGVybmF0aXZlcywKICAgICAgICBlaXRoZXIgdGhlIHN0cmluZyBpcyBwdXJlIEFTQ0lJIHdpdGggbmFtZWQgZXNjYXBlcyBsaWtlIFxuLCBldGMuCiAgICAgICAgYW5kIHdlIGRldGVybWluZWQgaXQncyBleGFjdCBzaXplIChjb21tb24gY2FzZSkKICAgICAgICBvciBpdCBjb250YWlucyBceCwgXHUsIC4uLiBlc2NhcGUgc2VxdWVuY2VzLiAgdGhlbiB3ZSBjcmVhdGUgYQogICAgICAgIGxlZ2FjeSB3Y2hhciBzdHJpbmcgYW5kIHJlc2l6ZSBpdCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uICovCi0gICAgaWYgKGxlbiA+PSAwKSB7Ci0gICAgICAgIHYgPSBQeVVuaWNvZGVfTmV3KGxlbiwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQodikgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAobGVuID4gMCkgeworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IGxlbjsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIEVzY2FwZWQgc3RyaW5ncyB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nCkBAIC01NTUxLDE1ICs1NzIyLDExIEBACiAgICAgICAgICAgIGxlbmd0aCBhZnRlciBjb252ZXJzaW9uIHRvIHRoZSB0cnVlIHZhbHVlLgogICAgICAgICAgICAoYnV0IGlmIHRoZSBlcnJvciBjYWxsYmFjayByZXR1cm5zIGEgbG9uZyByZXBsYWNlbWVudCBzdHJpbmcKICAgICAgICAgICAgd2UnbGwgaGF2ZSB0byBhbGxvY2F0ZSBtb3JlIHNwYWNlKSAqLwotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgICAgICBpZiAoIXYpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGxlbiA9IHNpemU7CisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKICAgICB9CiAKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBpID0gMDsKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogICAgIGVuZCA9IHMgKyBzaXplOwogCiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKQEAgLTU1NjcsMTMgKzU3MzQsMTEgQEAKICAgICAgICAgUHlfVUNTNCB4OwogICAgICAgICBpbnQgZGlnaXRzOwogCi0gICAgICAgIC8qIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggaSA9PSBhc2NpaV9sZW5ndGggaXMgYSBiYWNrc2xhc2gKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAqLwotICAgICAgICBhc3NlcnQoaSA8PSBsZW4pOwotCiAgICAgICAgIC8qIE5vbi1lc2NhcGUgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgVW5pY29kZSBvcmRpbmFscyAqLwogICAgICAgICBpZiAoKnMgIT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJmksICh1bnNpZ25lZCBjaGFyKSAqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnM7CisgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01NTg1LDE4ICs1NzUwLDE0IEBACiAgICAgICAgIGlmIChzID4gZW5kKQogICAgICAgICAgICAgYyA9ICdcMCc7IC8qIEludmFsaWQgYWZ0ZXIgXCAqLwogCi0gICAgICAgIC8qIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggaSA9PSBhc2NpaV9sZW5ndGggaXMgYSBiYWNrc2xhc2gKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLiAqLwotICAgICAgICBhc3NlcnQoaSA8IGxlbiB8fCAoaSA9PSBsZW4gJiYgYyA9PSAnXG4nKSk7Ci0KICAgICAgICAgc3dpdGNoIChjKSB7CiAKICAgICAgICAgICAgIC8qIFx4IGVzY2FwZXMgKi8KLSNkZWZpbmUgV1JJVEVDSEFSKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJmksIGNoKSA8IDApICAgIFwKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfXdoaWxlKDApCisjZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIChjaCkpIDwgMCkgICAgXAorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSB3aGlsZSgwKQogCiAgICAgICAgIGNhc2UgJ1xuJzogYnJlYWs7CiAgICAgICAgIGNhc2UgJ1xcJzogV1JJVEVDSEFSKCdcXCcpOyBicmVhazsKQEAgLTU3MjAsMzUgKzU4ODEsMzIgQEAKIAogICAgICAgZXJyb3I6CiAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInVuaWNvZGVlc2NhcGUiLCBtZXNzYWdlLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmaSkpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpOwogICAgICAgICBjb250aW51ZTsKICAgICB9CiAjdW5kZWYgV1JJVEVDSEFSCiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIGkpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICB1Y25oYXNoRXJyb3I6CiAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICBQeUV4Y19Vbmljb2RlRXJyb3IsCiAgICAgICAgICJcXE4gZXNjYXBlcyBub3Qgc3VwcG9ydGVkIChjYW4ndCBsb2FkIHVuaWNvZGVkYXRhIG1vZHVsZSkiCiAgICAgICAgICk7Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01OTAxLDIzICs2MDU5LDIyIEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY29uc3QgY2hhciAqYnM7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKwogICAgIC8qIEVzY2FwZWQgc3RyaW5ncyB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nCiAgICAgICAgVW5pY29kZSBzdHJpbmcsIHNvIHdlIHN0YXJ0IHdpdGggc2l6ZSBoZXJlIGFuZCB0aGVuIHJlZHVjZSB0aGUKICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4gKEJ1dCBkZWNvZGluZyBlcnJvcgogICAgICAgIGhhbmRsZXIgbWlnaHQgaGF2ZSB0byByZXNpemUgdGhlIHN0cmluZykgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKICAgICBlbmQgPSBzICsgc2l6ZTsKICAgICB3aGlsZSAocyA8IGVuZCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGM7CkBAIC01OTI3LDcgKzYwODQsOCBAQAogCiAgICAgICAgIC8qIE5vbi1lc2NhcGUgY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgVW5pY29kZSBvcmRpbmFscyAqLwogICAgICAgICBpZiAoKnMgIT0gJ1xcJykgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01OTM5LDcgKzYwOTcsOCBAQAogICAgICAgICBmb3IgKDtzIDwgZW5kOykgewogICAgICAgICAgICAgaWYgKCpzICE9ICdcXCcpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCAodW5zaWduZWQgY2hhcikqcysrKSA8IDApCisgICAgICAgICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpKnMrKzsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCB4KSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICB9CiAgICAgICAgIGlmICgoKHMgLSBicykgJiAxKSA9PSAwIHx8CkBAIC01OTQ3LDcgKzYxMDYsNyBAQAogICAgICAgICAgICAgKCpzICE9ICd1JyAmJiAqcyAhPSAnVScpKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBvdXRwb3MtLTsKKyAgICAgICAgd3JpdGVyLnBvcy0tOwogICAgICAgICBjb3VudCA9ICpzPT0ndScgPyA0IDogODsKICAgICAgICAgcysrOwogCkBAIC01OTU2LDExICs2MTE1LDExIEBACiAgICAgICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CiAgICAgICAgICAgICBpZiAoIVB5X0lTWERJR0lUKGMpKSB7CiAgICAgICAgICAgICAgICAgZW5kaW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICJyYXd1bmljb2RlZXNjYXBlIiwgInRydW5jYXRlZCBcXHVYWFhYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICBnb3RvIG5leHRCeXRlOwogICAgICAgICAgICAgfQpAQCAtNTk3MywyOCArNjEzMiwyNyBAQAogICAgICAgICAgICAgICAgIHggKz0gMTAgKyBjIC0gJ0EnOwogICAgICAgICB9CiAgICAgICAgIGlmICh4IDw9IE1BWF9VTklDT0RFKSB7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB4KSA8IDApCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJyYXd1bmljb2RlZXNjYXBlIiwgIlxcVXh4eHh4eHh4IG91dCBvZiByYW5nZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgbmV4dEJ5dGU6CiAgICAgICAgIDsKICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgcmV0dXJuIHVuaWNvZGVfcmVzdWx0KHYpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC02MDk0LDggKzYyNTIsNyBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKQEAgLTYxMDYsMTUgKzYyNjMsMTcgQEAKICAgICAgICAgICAgICAgICAgICAgIDEpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIC8qIFhYWCBvdmVyZmxvdyBkZXRlY3Rpb24gbWlzc2luZyAqLwotICAgIHYgPSBQeVVuaWNvZGVfTmV3KChzaXplK1B5X1VOSUNPREVfU0laRS0xKS8gUHlfVU5JQ09ERV9TSVpFLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodikgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKLSAgICBlbmQgPSBzICsgc2l6ZTsKKyAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICBpZiAoc2l6ZSAvIFB5X1VOSUNPREVfU0laRSA+IFBZX1NTSVpFX1RfTUFYIC0gMSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorICAgIHdyaXRlci5taW5fbGVuZ3RoID0gKHNpemUgKyAoUHlfVU5JQ09ERV9TSVpFIC0gMSkpIC8gUHlfVU5JQ09ERV9TSVpFOworCisgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVU5JQ09ERSB1Y2g7CiAgICAgICAgIFB5X1VDUzQgY2g7CkBAIC02MTU2LDI4ICs2MzE1LDI2IEBACiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIGNoKSA8IDApCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBjaCkgPCAwKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICBjb250aW51ZTsKIAogICBlcnJvcjoKICAgICAgICAgc3RhcnRpbnBvcyA9IHMgLSBzdGFydHM7Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgInVuaWNvZGVfaW50ZXJuYWwiLCByZWFzb24sCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmVuZCwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjU0MSw3ICs2Njk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7CiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBpbnQga2luZDsKICAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKQEAgLTY1NTgsNDYgKzY3MTUsNDYgQEAKICAgICBpZiAoc2l6ZSA9PSAxICYmICh1bnNpZ25lZCBjaGFyKXNbMF0gPCAxMjgpCiAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpc1swXSk7CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh1bmljb2RlID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGUgPSBzICsgc2l6ZTsKLSAgICBkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgZGF0YSA9IHdyaXRlci5kYXRhOwogICAgIG91dHBvcyA9IGFzY2lpX2RlY29kZShzLCBlLCAoUHlfVUNTMSAqKWRhdGEpOwotICAgIGlmIChvdXRwb3MgPT0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgd3JpdGVyLnBvcyA9IG91dHBvczsKKyAgICBpZiAod3JpdGVyLnBvcyA9PSBzaXplKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKLSAgICBzICs9IG91dHBvczsKLSAgICBraW5kID0gUHlVbmljb2RlXzFCWVRFX0tJTkQ7CisgICAgcyArPSB3cml0ZXIucG9zOworICAgIGtpbmQgPSB3cml0ZXIua2luZDsKICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciBjID0gKHVuc2lnbmVkIGNoYXIpKnM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICBpZiAoYyA8IDEyOCkgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIG91dHBvcysrLCBjKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCB3cml0ZXIucG9zLCBjKTsKKyAgICAgICAgICAgIHdyaXRlci5wb3MrKzsKICAgICAgICAgICAgICsrczsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDE7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJhc2NpaSIsICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKLSAgICAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgICAgIGtpbmQgPSB3cml0ZXIua2luZDsKKyAgICAgICAgICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjYyOSw3ICs2Nzg2LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogRmFzdCBwYXRoOiBpZiBpdCBpcyBhbiBBU0NJSS1vbmx5IHN0cmluZywgY29uc3RydWN0IGJ5dGVzIG9iamVjdAogICAgICAgIGRpcmVjdGx5LiBFbHNlIGRlZmVyIHRvIGFib3ZlIGZ1bmN0aW9uIHRvIHJhaXNlIHRoZSBleGNlcHRpb24uICovCi0gICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh1bmljb2RlKSA8IDEyOCkKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShQeVVuaWNvZGVfREFUQSh1bmljb2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSkpOwogICAgIHJldHVybiB1bmljb2RlX2VuY29kZV91Y3MxKHVuaWNvZGUsIGVycm9ycywgMTI4KTsKQEAgLTY3MDcsOCArNjg2NCw4IEBACiAgKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIGEgV2luZG93cyBjb2RlIHBhZ2UgaW50byB1bmljb2RlIG9iamVjdCBpbiBzdHJpY3QKICAqIG1vZGUuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhCi0gKiBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgcmV0dXJucyAtMiBvbiBkZWNvZGUgZXJyb3IsIG9yIHJhaXNlIGFuCisgKiBPU0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CiBkZWNvZGVfY29kZV9wYWdlX3N0cmljdChVSU5UIGNvZGVfcGFnZSwKQEAgLTY3NTksNyArNjkxNiw3IEBACiAgKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIGEgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3Qgd2l0aCBhbiBlcnJvcgogICogaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3Igb3IKKyAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIG9yCiAgKiBVbmljb2RlRGVjb2RlRXJyb3IgZXhjZXB0aW9uIGFuZCByZXR1cm5zIC0xIG9uIGVycm9yLgogICovCiBzdGF0aWMgaW50CkBAIC02Nzc4LDcgKzY5MzUsOCBAQAogICAgIC8qIGVhY2ggc3RlcCBjYW5ub3QgZGVjb2RlIG1vcmUgdGhhbiAxIGNoYXJhY3RlciwgYnV0IGEgY2hhcmFjdGVyIGNhbiBiZQogICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3Vycm9nYXRlIHBhaXIgKi8KICAgICB3Y2hhcl90IGJ1ZmZlclsyXSwgKnN0YXJ0b3V0LCAqb3V0OwotICAgIGludCBpbnNpemUsIG91dHNpemU7CisgICAgaW50IGluc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG91dHNpemU7CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVuY29kaW5nX29iaiA9IE5VTEw7CkBAIC02ODU4LDcgKzcwMTYsNyBAQAogICAgICAgICAgICAgc3RhcnRpbnBvcyA9IGluIC0gc3RhcnRpbjsKICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDE7CiAgICAgICAgICAgICBvdXRwb3MgPSBvdXQgLSBQeVVuaWNvZGVfQVNfVU5JQ09ERSgqdik7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd2NoYXIoCiAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0aW4sICZlbmRpbiwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJmluLApAQCAtNzAxNCw3ICs3MTcyLDcgQEAKICAqIG1vZGUuCiAgKgogICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZW5jb2RlIGVycm9yLCBvciByYWlzZQotICogYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMgLTEgb24gb3RoZXIgZXJyb3IuCisgKiBhbiBPU0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CiBlbmNvZGVfY29kZV9wYWdlX3N0cmljdChVSU5UIGNvZGVfcGFnZSwgUHlPYmplY3QgKipvdXRieXRlcywKQEAgLTcwNDgsMTAgKzcyMDYsMTEgQEAKICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgYXNzZXJ0KHNpemUgPD0gSU5UX01BWCk7CiAKICAgICAvKiBGaXJzdCBnZXQgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBwdXNlZERlZmF1bHRDaGFyKTsKICAgICBpZiAob3V0c2l6ZSA8PSAwKQpAQCAtNzA4OCw3ICs3MjQ3LDcgQEAKIAogICAgIC8qIERvIHRoZSBjb252ZXJzaW9uICovCiAgICAgb3V0c2l6ZSA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoY29kZV9wYWdlLCBmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIChpbnQpc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIG91dHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgUHlfQ0xFQVIoc3Vic3RyaW5nKTsKQEAgLTcxMTAsNyArNzI2OSw3IEBACiAgKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhCiAgKiBlcnJvciBoYW5kbGVyLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhIFdpbmRvd3NFcnJvciBhbmQgcmV0dXJucworICogUmV0dXJucyBjb25zdW1lZCBjaGFyYWN0ZXJzIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGFuIE9TRXJyb3IgYW5kIHJldHVybnMKICAqIC0xIG9uIG90aGVyIGVycm9yLgogICovCiBzdGF0aWMgaW50CkBAIC03MTk2LDkgKzczNTUsOCBAQAogICAgICAgICAgICAgY2hhcnNpemUgPSAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2ggLT0gMHgxMDAwMDsKLSAgICAgICAgICAgIGNoYXJzWzBdID0gMHhkODAwICsgKGNoID4+IDEwKTsKLSAgICAgICAgICAgIGNoYXJzWzFdID0gMHhkYzAwICsgKGNoICYgMHgzZmYpOworICAgICAgICAgICAgY2hhcnNbMF0gPSBQeV9VTklDT0RFX0hJR0hfU1VSUk9HQVRFKGNoKTsKKyAgICAgICAgICAgIGNoYXJzWzFdID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGNoKTsKICAgICAgICAgICAgIGNoYXJzaXplID0gMjsKICAgICAgICAgfQogCkBAIC03MzkxLDIyMCArNzU0OSwyNTggQEAKIAogLyogLS0tIENoYXJhY3RlciBNYXBwaW5nIENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyBpbnQKK2NoYXJtYXBfZGVjb2RlX3N0cmluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CisgICAgY29uc3QgY2hhciAqZTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3MsIGVuZGlucG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMLCAqZXhjID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG1hcGxlbjsKKyAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG1hcGtpbmQ7CisgICAgdm9pZCAqbWFwZGF0YTsKKyAgICBQeV9VQ1M0IHg7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1hcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG1hcHBpbmcpOworICAgIG1hcGRhdGEgPSBQeVVuaWNvZGVfREFUQShtYXBwaW5nKTsKKyAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICBpZiAobWFwa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJiBtYXBsZW4gPj0gMjU2KSB7CisgICAgICAgIC8qIGZhc3QtcGF0aCBmb3IgY3AwMzcsIGNwNTAwIGFuZCBpc284ODU5XzEgZW5jb2RpbmdzLiBpc284ODU5XzEKKyAgICAgICAgICogaXMgZGlzYWJsZWQgaW4gZW5jb2RpbmcgYWxpYXNlcywgbGF0aW4xIGlzIHByZWZlcnJlZCBiZWNhdXNlCisgICAgICAgICAqIGl0cyBpbXBsZW1lbnRhdGlvbiBpcyBmYXN0ZXIuICovCisgICAgICAgIFB5X1VDUzEgKm1hcGRhdGFfdWNzMSA9IChQeV9VQ1MxICopbWFwZGF0YTsKKyAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisKKyAgICAgICAgYXNzZXJ0ICh3cml0ZXItPmtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOworICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MxW2NoXTsKKyAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikgeworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAxLCAweGZmKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgICAgICAgICAgICAgb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICsrczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBvdXRraW5kID0gd3JpdGVyLT5raW5kOworICAgICAgICAgICAgUHlfVUNTMiAqbWFwZGF0YV91Y3MyID0gKFB5X1VDUzIgKiltYXBkYXRhOworICAgICAgICAgICAgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MxICpvdXRkYXRhID0gKFB5X1VDUzEgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICAgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgICAgICAgICB4ID0gbWFwZGF0YV91Y3MyW2NoXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgb3V0ZGF0YVt3cml0ZXItPnBvc10gPSB4OworICAgICAgICAgICAgICAgICAgICB3cml0ZXItPnBvcysrOworICAgICAgICAgICAgICAgICAgICArK3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICAgICAgICAgIFB5X1VDUzIgKm91dGRhdGEgPSAoUHlfVUNTMiAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjaCA9ICpzOworCisgICAgICAgIGlmIChjaCA8IG1hcGxlbikKKyAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChtYXBraW5kLCBtYXBkYXRhLCBjaCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHggPSAweGZmZmU7IC8qIGludmFsaWQgdmFsdWUgKi8KK0Vycm9yOgorICAgICAgICBpZiAoeCA9PSAweGZmZmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgImNoYXJtYXAiLCAiY2hhcmFjdGVyIG1hcHMgdG8gPHVuZGVmaW5lZD4iLAorICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCisgICAgICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHgpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgKytzOworICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9tYXBwaW5nKGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQoreworICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CisgICAgY29uc3QgY2hhciAqZTsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3MsIGVuZGlucG9zOworICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMLCAqZXhjID0gTlVMTDsKKyAgICB1bnNpZ25lZCBjaGFyIGNoOworICAgIFB5T2JqZWN0ICprZXksICppdGVtID0gTlVMTDsKKworICAgIGUgPSBzICsgc2l6ZTsKKworICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICBjaCA9ICpzOworCisgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCisgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZyljaCk7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKworICAgICAgICBpdGVtID0gUHlPYmplY3RfR2V0SXRlbShtYXBwaW5nLCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgLyogTm8gbWFwcGluZyBmb3VuZCBtZWFuczogbWFwcGluZyBpcyB1bmRlZmluZWQuICovCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFwcGx5IG1hcHBpbmcgKi8KKyAgICAgICAgaWYgKGl0ZW0gPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgICAgICBsb25nIHZhbHVlID0gUHlMb25nX0FTX0xPTkcoaXRlbSk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IE1BWF9VTklDT0RFKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgYmUgaW4gcmFuZ2UoMHglbHgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpTUFYX1VOSUNPREUgKyAxKTsKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHZhbHVlKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSkgPT0gMSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKGl0ZW0sIDApOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOworICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIHZhbHVlKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMTsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIGl0ZW0pID09IC0xKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiB3cm9uZyByZXR1cm4gdmFsdWUgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7CisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoaXRlbSk7CisgICAgICAgICsrczsKKyAgICAgICAgY29udGludWU7CisKK1VuZGVmaW5lZDoKKyAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KKyAgICAgICAgUHlfQ0xFQVIoaXRlbSk7CisgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKKyAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCisgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAorICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCisgICAgICAgICAgICAgICAgd3JpdGVyKSkgeworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgfQorICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIDA7CisKK29uRXJyb3I6CisgICAgUHlfWERFQ1JFRihpdGVtKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0RlY29kZUNoYXJtYXAoY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewotICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwotICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBQeV9zc2l6ZV90IGV4dHJhY2hhcnMgPSAwOwotICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgLyogRGVmYXVsdCB0byBMYXRpbi0xICovCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocywgc2l6ZSwgZXJyb3JzKTsKIAotICAgIHYgPSBQeVVuaWNvZGVfTmV3KHNpemUsIDEyNyk7Ci0gICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZSA9IHMgKyBzaXplOworICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgd3JpdGVyLm1pbl9sZW5ndGgsIDEyNykgPT0gLTEpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChtYXBwaW5nKSkgewotICAgICAgICBQeV9zc2l6ZV90IG1hcGxlbjsKLSAgICAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOwotICAgICAgICB2b2lkICptYXBkYXRhOwotICAgICAgICBQeV9VQ1M0IHg7Ci0KLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShtYXBwaW5nKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIG1hcGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG1hcHBpbmcpOwotICAgICAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7Ci0gICAgICAgIG1hcGtpbmQgPSBQeVVuaWNvZGVfS0lORChtYXBwaW5nKTsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoOwotICAgICAgICAgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgewotICAgICAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IFB5VW5pY29kZV9LSU5EKHYpOwotICAgICAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZvaWQgKm91dGRhdGEgPSBQeVVuaWNvZGVfREFUQSh2KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPiBtYXhjaGFyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzFCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaCA9ICpzOwotICAgICAgICAgICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKFB5VW5pY29kZV8yQllURV9LSU5ELCBtYXBkYXRhLCBjaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBFcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfMkJZVEVfS0lORCwgb3V0ZGF0YSwgb3V0cG9zKyssIHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNoID0gKnM7Ci0KLSAgICAgICAgICAgIGlmIChjaCA8IG1hcGxlbikKLSAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHggPSAweGZmZmU7IC8qIGludmFsaWQgdmFsdWUgKi8KLUVycm9yOgotICAgICAgICAgICAgaWYgKHggPT0gMHhmZmZlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOwotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkgewotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB4KSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgKytzOwotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9zdHJpbmcocywgc2l6ZSwgbWFwcGluZywgZXJyb3JzLCAmd3JpdGVyKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp3LCAqeDsKLQotICAgICAgICAgICAgLyogR2V0IG1hcHBpbmcgKGNoYXIgb3JkaW5hbCAtPiBpbnRlZ2VyLCBVbmljb2RlIGNoYXIgb3IgTm9uZSkgKi8KLSAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShtYXBwaW5nLCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19Mb29rdXBFcnJvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTm8gbWFwcGluZyBmb3VuZCBtZWFuczogbWFwcGluZyBpcyB1bmRlZmluZWQuICovCi0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEFwcGx5IG1hcHBpbmcgKi8KLSAgICAgICAgICAgIGlmICh4ID09IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHgpKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKHgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgYmUgaW4gcmFuZ2UoMHglbHgpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCB2YWx1ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgdGFyZ2V0c2l6ZTsKLQotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoeCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRhcmdldHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh4KTsKLQotICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzaXplID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogMS0xIG1hcHBpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB2YWx1ZSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoeCwgMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAweEZGRkUpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldHNpemUgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtbiBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXRzaXplID4gZXh0cmFjaGFycykgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzaXplIGZpcnN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5lZWRlZCA9ICh0YXJnZXRzaXplIC0gZXh0cmFjaGFycykgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhcmdldHNpemUgPDwgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWNoYXJzICs9IG5lZWRlZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBvdmVyZmxvdyBkZXRlY3Rpb24gbWlzc2luZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpICsgbmVlZGVkKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV93aWRlbigmdiwgb3V0cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoeCkpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Db3B5Q2hhcmFjdGVycyh2LCBvdXRwb3MsIHgsIDAsIHRhcmdldHNpemUpOwotICAgICAgICAgICAgICAgICAgICBvdXRwb3MgKz0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyAtPSB0YXJnZXRzaXplOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiAxLTAgbWFwcGluZzogc2tpcCB0aGUgY2hhcmFjdGVyICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiB3cm9uZyByZXR1cm4gdmFsdWUgKi8KLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hhcmFjdGVyIG1hcHBpbmcgbXVzdCByZXR1cm4gaW50ZWdlciwgTm9uZSBvciBzdHIiKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgKytzOwotICAgICAgICAgICAgY29udGludWU7Ci1VbmRlZmluZWQ6Ci0gICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAotICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKLSAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGNoYXJtYXBfZGVjb2RlX21hcHBpbmcocywgc2l6ZSwgbWFwcGluZywgZXJyb3JzLCAmd3JpdGVyKSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7Ci0gICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7Ci0gICAgUHlfWERFQ1JFRihleGMpOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04MTE4LDEwICs4MzE0LDE0IEBACiAgICAgICogLTE9bm90IGluaXRpYWxpemVkLCAwPXVua25vd24sIDE9c3RyaWN0LCAyPXJlcGxhY2UsCiAgICAgICogMz1pZ25vcmUsIDQ9eG1sY2hhcnJlZnJlcGxhY2UgKi8KICAgICBpbnQga25vd25fZXJyb3JIYW5kbGVyID0gLTE7CisgICAgdm9pZCAqZGF0YTsKKyAgICBpbnQga2luZDsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pY29kZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmljb2RlKTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwogCiAgICAgLyogRGVmYXVsdCB0byBMYXRpbi0xICovCiAgICAgaWYgKG1hcHBpbmcgPT0gTlVMTCkKQEAgLTgxMzYsNyArODMzNiw3IEBACiAgICAgICAgIHJldHVybiByZXM7CiAKICAgICB3aGlsZSAoaW5wb3M8c2l6ZSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQURfQ0hBUih1bmljb2RlLCBpbnBvcyk7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbnBvcyk7CiAgICAgICAgIC8qIHRyeSB0byBlbmNvZGUgaXQgKi8KICAgICAgICAgY2hhcm1hcGVuY29kZV9yZXN1bHQgeCA9IGNoYXJtYXBlbmNvZGVfb3V0cHV0KGNoLCBtYXBwaW5nLCAmcmVzLCAmcmVzcG9zKTsKICAgICAgICAgaWYgKHg9PWVuY19FWENFUFRJT04pIC8qIGVycm9yICovCkBAIC04MjIyLDE5ICs4NDIyLDYgQEAKICAgICB9CiB9CiAKLS8qIHJhaXNlcyBhIFVuaWNvZGVUcmFuc2xhdGVFcnJvciAqLwotc3RhdGljIHZvaWQKLXJhaXNlX3RyYW5zbGF0ZV9leGNlcHRpb24oUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBQeV9zc2l6ZV90IGVuZHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uKQotewotICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbihleGNlcHRpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIHN0YXJ0cG9zLCBlbmRwb3MsIHJlYXNvbik7Ci0gICAgaWYgKCpleGNlcHRpb25PYmplY3QgIT0gTlVMTCkKLSAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoKmV4Y2VwdGlvbk9iamVjdCk7Ci19Ci0KIC8qIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGhlbHBlcjoKICAgIGJ1aWxkIGFyZ3VtZW50cywgY2FsbCB0aGUgY2FsbGJhY2sgYW5kIGNoZWNrIHRoZSBhcmd1bWVudHMsCiAgICBwdXQgdGhlIHJlc3VsdCBpbnRvIG5ld3BvcyBhbmQgcmV0dXJuIHRoZSByZXBsYWNlbWVudCBzdHJpbmcsIHdoaWNoCkBAIC04NTEwLDggKzg2OTcsMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN3aXRjaCAoa25vd25fZXJyb3JIYW5kbGVyKSB7CiAgICAgICAgICAgICBjYXNlIDE6IC8qIHN0cmljdCAqLwotICAgICAgICAgICAgICAgIHJhaXNlX3RyYW5zbGF0ZV9leGNlcHRpb24oJmV4YywgaW5wdXQsIGNvbGxzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlbmQsIHJlYXNvbik7CisgICAgICAgICAgICAgICAgbWFrZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBjb2xsc3RhcnQsIGNvbGxlbmQsIHJlYXNvbik7CisgICAgICAgICAgICAgICAgaWYgKGV4YyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBQeUNvZGVjX1N0cmljdEVycm9ycyhleGMpOwogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgIGNhc2UgMjogLyogcmVwbGFjZSAqLwogICAgICAgICAgICAgICAgIC8qIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHNwYWNlLCB0aGlzIGlzIGEgMToxIHJlcGxhY2VtZW50ICovCkBAIC05MTAzLDcgKzkyOTIsNyBAQAogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSB8fAogICAgICAgICBQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdWJzdHJpbmcpID09IDApCiAgICAgICAgIHJldHVybiAxOwpAQCAtOTE0MSw3ICs5MzMwLDYgQEAKICAgICAgICAgICAgIC8qIFdlIGRvIG5vdCBuZWVkIHRvIGNvbXBhcmUgMCBhbmQgbGVuKHN1YnN0cmluZyktMSBiZWNhdXNlCiAgICAgICAgICAgICAgICB0aGUgaWYgc3RhdGVtZW50IGFib3ZlIGVuc3VyZWQgYWxyZWFkeSB0aGF0IHRoZXkgYXJlIGVxdWFsCiAgICAgICAgICAgICAgICB3aGVuIHdlIGVuZCB1cCBoZXJlLiAqLwotICAgICAgICAgICAgLyogVE9ETzogaG9ub3IgZGlyZWN0aW9uIGFuZCBkbyBhIGZvcndhcmQgb3IgYmFja3dhcmRzIHNlYXJjaCAqLwogICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGVuZF9zdWI7ICsraSkgewogICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kX3NlbGYsIGRhdGFfc2VsZiwgb2Zmc2V0ICsgaSkgIT0KICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZF9zdWIsIGRhdGFfc3ViLCBpKSkKQEAgLTk2MDMsNDEgKzk3OTEsNDkgQEAKICAgICAgICAgICAgIHNlcF9kYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEoc2VwKTsKICAgICB9CiAjZW5kaWYKLSAgICBmb3IgKGkgPSAwLCByZXNfb2Zmc2V0ID0gMDsgaSA8IHNlcWxlbjsgKytpKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKLSAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOwotICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLwotICAgICAgICBpZiAoaSAmJiBzZXBsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKHVzZV9tZW1jcHkpIHsKKyAgICBpZiAodXNlX21lbWNweSkgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KKyAgICAgICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfTUVNQ1BZKHJlc19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCAqIHNlcGxlbik7CiAgICAgICAgICAgICAgICAgcmVzX2RhdGEgKz0ga2luZCAqIHNlcGxlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgc2VwLCAwLCBzZXBsZW4pOwotICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gc2VwbGVuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKLSAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKHVzZV9tZW1jcHkpIHsKKworICAgICAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIFB5X01FTUNQWShyZXNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0RBVEEoaXRlbSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgKiBpdGVtbGVuKTsKICAgICAgICAgICAgICAgICByZXNfZGF0YSArPSBraW5kICogaXRlbWxlbjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICB9CisgICAgICAgIGFzc2VydChyZXNfZGF0YSA9PSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICArIGtpbmQgKiBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIHJlc19vZmZzZXQgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaXRlbWxlbjsKKyAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tpXTsKKworICAgICAgICAgICAgLyogQ29weSBpdGVtLCBhbmQgbWF5YmUgdGhlIHNlcGFyYXRvci4gKi8KKyAgICAgICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBzZXAsIDAsIHNlcGxlbik7CisgICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBzZXBsZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZW1sZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpdGVtKTsKKyAgICAgICAgICAgIGlmIChpdGVtbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIGl0ZW0sIDAsIGl0ZW1sZW4pOwogICAgICAgICAgICAgICAgIHJlc19vZmZzZXQgKz0gaXRlbWxlbjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KLSAgICBpZiAodXNlX21lbWNweSkKLSAgICAgICAgYXNzZXJ0KHJlc19kYXRhID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2luZCAqIFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOwotICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KHJlc19vZmZzZXQgPT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGZzZXEpOwogICAgIFB5X1hERUNSRUYoc2VwKTsKQEAgLTEwMDI5LDYgKzEwMjI1LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCityZXBsYWNlXzFjaGFyX2lucGxhY2UoUHlPYmplY3QgKnUsIFB5X3NzaXplX3QgcG9zLAorICAgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdTEsIFB5X1VDUzQgdTIsIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1KTsKKyAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodSk7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1KTsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICB1Y3MxbGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTMSAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MxICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorICAgIGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgdWNzMmxpYl9yZXBsYWNlXzFjaGFyX2lucGxhY2UoKFB5X1VDUzIgKilkYXRhICsgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiAqKWRhdGEgKyBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxLCB1MiwgbWF4Y291bnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICB1Y3M0bGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTNCAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0ICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorfQorCiBzdGF0aWMgUHlPYmplY3QgKgogcmVwbGFjZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnN0cjEsCiAgICAgICAgIFB5T2JqZWN0ICpzdHIyLCBQeV9zc2l6ZV90IG1heGNvdW50KQpAQCAtMTAwNDUsNyArMTAyNjYsNyBAQAogICAgIFB5X3NzaXplX3QgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIFB5X3NzaXplX3QgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpOwogICAgIGludCBtYXlzaHJpbms7Ci0gICAgUHlfVUNTNCBtYXhjaGFyLCBtYXhjaGFyX3N0cjI7CisgICAgUHlfVUNTNCBtYXhjaGFyLCBtYXhjaGFyX3N0cjEsIG1heGNoYXJfc3RyMjsKIAogICAgIGlmIChtYXhjb3VudCA8IDApCiAgICAgICAgIG1heGNvdW50ID0gUFlfU1NJWkVfVF9NQVg7CkBAIC0xMDA1NCwxNSArMTAyNzUsMTYgQEAKIAogICAgIGlmIChzdHIxID09IHN0cjIpCiAgICAgICAgIGdvdG8gbm90aGluZzsKLSAgICBpZiAoc2tpbmQgPCBraW5kMSkKLSAgICAgICAgLyogc3Vic3RyaW5nIHRvbyB3aWRlIHRvIGJlIHByZXNlbnQgKi8KLSAgICAgICAgZ290byBub3RoaW5nOwogCiAgICAgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzZWxmKTsKKyAgICBtYXhjaGFyX3N0cjEgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyMSk7CisgICAgaWYgKG1heGNoYXIgPCBtYXhjaGFyX3N0cjEpCisgICAgICAgIC8qIHN1YnN0cmluZyB0b28gd2lkZSB0byBiZSBwcmVzZW50ICovCisgICAgICAgIGdvdG8gbm90aGluZzsKICAgICBtYXhjaGFyX3N0cjIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyMik7CiAgICAgLyogUmVwbGFjaW5nIHN0cjEgd2l0aCBzdHIyIG1heSBjYXVzZSBhIG1heGNoYXIgcmVkdWN0aW9uIGluIHRoZQogICAgICAgIHJlc3VsdCBzdHJpbmcuICovCi0gICAgbWF5c2hyaW5rID0gKG1heGNoYXJfc3RyMiA8IG1heGNoYXIpOworICAgIG1heXNocmluayA9IChtYXhjaGFyX3N0cjIgPCBtYXhjaGFyX3N0cjEpICYmIChtYXhjaGFyID09IG1heGNoYXJfc3RyMSk7CiAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBtYXhjaGFyX3N0cjIpOwogCiAgICAgaWYgKGxlbjEgPT0gbGVuMikgewpAQCAtMTAwNzIsMzUgKzEwMjk0LDE5IEBACiAgICAgICAgIGlmIChsZW4xID09IDEpIHsKICAgICAgICAgICAgIC8qIHJlcGxhY2UgY2hhcmFjdGVycyAqLwogICAgICAgICAgICAgUHlfVUNTNCB1MSwgdTI7Ci0gICAgICAgICAgICBpbnQgcmtpbmQ7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGluZGV4LCBwb3M7Ci0gICAgICAgICAgICBjaGFyICpzcmM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHBvczsKIAotICAgICAgICAgICAgdTEgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0cjEsIDApOwotICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc2J1ZiwgUHlVbmljb2RlX0tJTkQoc2VsZiksIHNsZW4sIHUxLCAxKTsKKyAgICAgICAgICAgIHUxID0gUHlVbmljb2RlX1JFQUQoa2luZDEsIGJ1ZjEsIDApOworICAgICAgICAgICAgcG9zID0gZmluZGNoYXIoc2J1Ziwgc2tpbmQsIHNsZW4sIHUxLCAxKTsKICAgICAgICAgICAgIGlmIChwb3MgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gbm90aGluZzsKLSAgICAgICAgICAgIHUyID0gUHlVbmljb2RlX1JFQURfQ0hBUihzdHIyLCAwKTsKKyAgICAgICAgICAgIHUyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGJ1ZjIsIDApOwogICAgICAgICAgICAgdSA9IFB5VW5pY29kZV9OZXcoc2xlbiwgbWF4Y2hhcik7CiAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHUsIDAsIHNlbGYsIDAsIHNsZW4pOwotICAgICAgICAgICAgcmtpbmQgPSBQeVVuaWNvZGVfS0lORCh1KTsKIAotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHJraW5kLCBQeVVuaWNvZGVfREFUQSh1KSwgcG9zLCB1Mik7Ci0gICAgICAgICAgICBpbmRleCA9IDA7Ci0gICAgICAgICAgICBzcmMgPSBzYnVmOwotICAgICAgICAgICAgd2hpbGUgKC0tbWF4Y291bnQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcG9zKys7Ci0gICAgICAgICAgICAgICAgc3JjICs9IHBvcyAqIFB5VW5pY29kZV9LSU5EKHNlbGYpOwotICAgICAgICAgICAgICAgIHNsZW4gLT0gcG9zOwotICAgICAgICAgICAgICAgIGluZGV4ICs9IHBvczsKLSAgICAgICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzcmMsIFB5VW5pY29kZV9LSU5EKHNlbGYpLCBzbGVuLCB1MSwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBvcyA8IDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShya2luZCwgUHlVbmljb2RlX0RBVEEodSksIGluZGV4ICsgcG9zLCB1Mik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh1LCAwLCBzZWxmLCAwLCBzbGVuKTsKKyAgICAgICAgICAgIHJlcGxhY2VfMWNoYXJfaW5wbGFjZSh1LCBwb3MsIHUxLCB1MiwgbWF4Y291bnQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaW50IHJraW5kID0gc2tpbmQ7CkBAIC0xMDQxMiw5ICsxMDYxOCwyNCBAQAogc3RhdGljIGludAogdW5pY29kZV9jb21wYXJlKFB5T2JqZWN0ICpzdHIxLCBQeU9iamVjdCAqc3RyMikKIHsKKyNkZWZpbmUgQ09NUEFSRShUWVBFMSwgVFlQRTIpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgVFlQRTEqIHAxID0gKFRZUEUxICopZGF0YTE7IFwKKyAgICAgICAgVFlQRTIqIHAyID0gKFRZUEUyICopZGF0YTI7IFwKKyAgICAgICAgVFlQRTEqIGVuZCA9IHAxICsgbGVuOyBcCisgICAgICAgIFB5X1VDUzQgYzEsIGMyOyBcCisgICAgICAgIGZvciAoOyBwMSAhPSBlbmQ7IHAxKyssIHAyKyspIHsgXAorICAgICAgICAgICAgYzEgPSAqcDE7IFwKKyAgICAgICAgICAgIGMyID0gKnAyOyBcCisgICAgICAgICAgICBpZiAoYzEgIT0gYzIpIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOyBcCisgICAgICAgIH0gXAorICAgIH0gXAorICAgIHdoaWxlICgwKQorCiAgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpkYXRhMSwgKmRhdGEyOwotICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgaTsKKyAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGxlbjsKIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyMSk7CiAgICAga2luZDIgPSBQeVVuaWNvZGVfS0lORChzdHIyKTsKQEAgLTEwNDIyLDE5ICsxMDY0MywxMTYgQEAKICAgICBkYXRhMiA9IFB5VW5pY29kZV9EQVRBKHN0cjIpOwogICAgIGxlbjEgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIxKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMik7CisgICAgbGVuID0gUHlfTUlOKGxlbjEsIGxlbjIpOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjEgJiYgaSA8IGxlbjI7ICsraSkgewotICAgICAgICBQeV9VQ1M0IGMxLCBjMjsKLSAgICAgICAgYzEgPSBQeVVuaWNvZGVfUkVBRChraW5kMSwgZGF0YTEsIGkpOwotICAgICAgICBjMiA9IFB5VW5pY29kZV9SRUFEKGtpbmQyLCBkYXRhMiwgaSk7Ci0KLSAgICAgICAgaWYgKGMxICE9IGMyKQotICAgICAgICAgICAgcmV0dXJuIChjMSA8IGMyKSA/IC0xIDogMTsKKyAgICBzd2l0Y2goa2luZDEpIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgc3dpdGNoKGtpbmQyKSB7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjbXAgPSBtZW1jbXAoZGF0YTEsIGRhdGEyLCBsZW4pOworICAgICAgICAgICAgLyogbm9ybWFsaXplIHJlc3VsdCBvZiBtZW1jbXAoKSBpbnRvIHRoZSByYW5nZSBbLTE7IDFdICovCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzEsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzEsIFB5X1VDUzQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUHlVbmljb2RlXzRCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTNCwgUHlfVUNTMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTNCwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgeworI2lmIGRlZmluZWQoSEFWRV9XTUVNQ01QKSAmJiBTSVpFT0ZfV0NIQVJfVCA9PSA0CisgICAgICAgICAgICBpbnQgY21wID0gd21lbWNtcCgod2NoYXJfdCAqKWRhdGExLCAod2NoYXJfdCAqKWRhdGEyLCBsZW4pOworICAgICAgICAgICAgLyogbm9ybWFsaXplIHJlc3VsdCBvZiB3bWVtY21wKCkgaW50byB0aGUgcmFuZ2UgWy0xOyAxXSAqLworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGNtcCA+IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisjZWxzZQorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1M0KTsKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOwogICAgIH0KIAotICAgIHJldHVybiAobGVuMSA8IGxlbjIpID8gLTEgOiAobGVuMSAhPSBsZW4yKTsKKyAgICBpZiAobGVuMSA9PSBsZW4yKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuMSA8IGxlbjIpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOworCisjdW5kZWYgQ09NUEFSRQogfQogCitQeV9MT0NBTChpbnQpCit1bmljb2RlX2NvbXBhcmVfZXEoUHlPYmplY3QgKnN0cjEsIFB5T2JqZWN0ICpzdHIyKQoreworICAgIGludCBraW5kOworICAgIHZvaWQgKmRhdGExLCAqZGF0YTI7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IGNtcDsKKworICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOworICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKSAhPSBsZW4pCisgICAgICAgIHJldHVybiAwOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzdHIxKTsKKyAgICBpZiAoUHlVbmljb2RlX0tJTkQoc3RyMikgIT0ga2luZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZGF0YTEgPSBQeVVuaWNvZGVfREFUQShzdHIxKTsKKyAgICBkYXRhMiA9IFB5VW5pY29kZV9EQVRBKHN0cjIpOworCisgICAgY21wID0gbWVtY21wKGRhdGExLCBkYXRhMiwgbGVuICoga2luZCk7CisgICAgcmV0dXJuIChjbXAgPT0gMCk7Cit9CisKKwogaW50CiBQeVVuaWNvZGVfQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0KQogewpAQCAtMTA0NDIsNiArMTA3NjAsMTEgQEAKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAogICAgICAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICAvKiBhIHN0cmluZyBpcyBlcXVhbCB0byBpdHNlbGYgKi8KKyAgICAgICAgaWYgKGxlZnQgPT0gcmlnaHQpCisgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICByZXR1cm4gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKICAgICB9CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTEwNDUyLDI5ICsxMDc3NSw1OSBAQAogfQogCiBpbnQKK19QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChQeU9iamVjdCAqbGVmdCwgX1B5X0lkZW50aWZpZXIgKnJpZ2h0KQoreworICAgIFB5T2JqZWN0ICpyaWdodF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZChyaWdodCk7ICAgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAocmlnaHRfc3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0NvbXBhcmUobGVmdCwgcmlnaHRfc3RyKTsKK30KKworaW50CiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhQeU9iamVjdCogdW5pLCBjb25zdCBjaGFyKiBzdHIpCiB7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfVUNTNCBjaHI7CiAKICAgICBhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyh1bmkpKTsKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pKTsKLSAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pKTsKLSAgICAvKiBDb21wYXJlIFVuaWNvZGUgc3RyaW5nIGFuZCBzb3VyY2UgY2hhcmFjdGVyIHNldCBzdHJpbmcgKi8KLSAgICBmb3IgKGkgPSAwOyAoY2hyID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpICYmIHN0cltpXTsgaSsrKQotICAgICAgICBpZiAoY2hyICE9IHN0cltpXSkKLSAgICAgICAgICAgIHJldHVybiAoY2hyIDwgKHVuc2lnbmVkIGNoYXIpKHN0cltpXSkpID8gLTEgOiAxOwotICAgIC8qIFRoaXMgY2hlY2sga2VlcHMgUHl0aG9uIHN0cmluZ3MgdGhhdCBlbmQgaW4gJ1wwJyBmcm9tIGNvbXBhcmluZyBlcXVhbAotICAgICB0byBDIHN0cmluZ3MgaWRlbnRpY2FsIHVwIHRvIHRoYXQgcG9pbnQuICovCi0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSkgIT0gaSB8fCBjaHIpCi0gICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCi0gICAgaWYgKHN0cltpXSkKLSAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaSk7CisgICAgICAgIHNpemVfdCBsZW4xID0gKHNpemVfdClQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpOworICAgICAgICBzaXplX3QgbGVuLCBsZW4yID0gc3RybGVuKHN0cik7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgbGVuID0gUHlfTUlOKGxlbjEsIGxlbjIpOworICAgICAgICBjbXAgPSBtZW1jbXAoZGF0YSwgc3RyLCBsZW4pOworICAgICAgICBpZiAoY21wICE9IDApIHsKKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVuMSA+IGxlbjIpCisgICAgICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLworICAgICAgICBpZiAobGVuMiA+IGxlbjEpCisgICAgICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB2b2lkICpkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pKTsKKyAgICAgICAgLyogQ29tcGFyZSBVbmljb2RlIHN0cmluZyBhbmQgc291cmNlIGNoYXJhY3RlciBzZXQgc3RyaW5nICovCisgICAgICAgIGZvciAoaSA9IDA7IChjaHIgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkgJiYgc3RyW2ldOyBpKyspCisgICAgICAgICAgICBpZiAoY2hyICE9IHN0cltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGNociA8ICh1bnNpZ25lZCBjaGFyKShzdHJbaV0pKSA/IC0xIDogMTsKKyAgICAgICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCisgICAgICAgICB0byBDIHN0cmluZ3MgaWRlbnRpY2FsIHVwIHRvIHRoYXQgcG9pbnQuICovCisgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh1bmkpICE9IGkgfHwgY2hyKQorICAgICAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KKyAgICAgICAgaWYgKHN0cltpXSkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiB9CiAKIApAQCAtMTA0ODUsMzYgKzEwODM4LDQzIEBACiBQeVVuaWNvZGVfUmljaENvbXBhcmUoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCwgaW50IG9wKQogewogICAgIGludCByZXN1bHQ7CisgICAgUHlPYmplY3QgKnY7CiAKLSAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGxlZnQpICYmIFB5VW5pY29kZV9DaGVjayhyaWdodCkpIHsKLSAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKLSAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEWShyaWdodCkgPT0gLTEpCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobGVmdCkgfHwgIVB5VW5pY29kZV9DaGVjayhyaWdodCkpCisgICAgICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobGVmdCkgPT0gLTEgfHwKKyAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobGVmdCA9PSByaWdodCkgeworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgUHlfRVE6CisgICAgICAgIGNhc2UgUHlfTEU6CisgICAgICAgIGNhc2UgUHlfR0U6CisgICAgICAgICAgICAvKiBhIHN0cmluZyBpcyBlcXVhbCB0byBpdHNlbGYgKi8KKyAgICAgICAgICAgIHYgPSBQeV9UcnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfTkU6CisgICAgICAgIGNhc2UgUHlfTFQ6CisgICAgICAgIGNhc2UgUHlfR1Q6CisgICAgICAgICAgICB2ID0gUHlfRmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGxlZnQpICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJpZ2h0KSB8fAotICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQobGVmdCkgIT0gUHlVbmljb2RlX0tJTkQocmlnaHQpKSB7Ci0gICAgICAgICAgICBpZiAob3AgPT0gUHlfRVEpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChvcCA9PSBQeV9ORSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKLSAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CisgICAgfQorICAgIGVsc2UgaWYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSB7CisgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZV9lcShsZWZ0LCByaWdodCk7CisgICAgICAgIHJlc3VsdCBePSAob3AgPT0gUHlfTkUpOworICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXN1bHQgPSB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOwogCiAgICAgICAgIC8qIENvbnZlcnQgdGhlIHJldHVybiB2YWx1ZSB0byBhIEJvb2xlYW4gKi8KICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFB5X0VROgotICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgPT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9ORToKLSAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0ICE9IDApOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUHlfTEU6CiAgICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCA8PSAwKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA1MzEsMTggKzEwODkxLDE2IEBACiAgICAgICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICByZXR1cm4gdjsKICAgICB9Ci0KLSAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgUHlfSU5DUkVGKHYpOworICAgIHJldHVybiB2OwogfQogCiBpbnQKIFB5VW5pY29kZV9Db250YWlucyhQeU9iamVjdCAqY29udGFpbmVyLCBQeU9iamVjdCAqZWxlbWVudCkKIHsKICAgICBQeU9iamVjdCAqc3RyLCAqc3ViOwotICAgIGludCBraW5kMSwga2luZDIsIGtpbmQ7CisgICAgaW50IGtpbmQxLCBraW5kMjsKICAgICB2b2lkICpidWYxLCAqYnVmMjsKICAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAgICAgaW50IHJlc3VsdDsKQEAgLTEwNTYxLDIzICsxMDkxOSwxOCBAQAogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YikgPT0gLTEgfHwgUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpIHsKLSAgICAgICAgUHlfREVDUkVGKHN1Yik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgIH0KIAogICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1Yik7Ci0gICAga2luZCA9IGtpbmQxOwogICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHIpOwogICAgIGJ1ZjIgPSBQeVVuaWNvZGVfREFUQShzdWIpOwotICAgIGlmIChraW5kMiAhPSBraW5kKSB7Ci0gICAgICAgIGlmIChraW5kMiA+IGtpbmQpIHsKKyAgICBpZiAoa2luZDIgIT0ga2luZDEpIHsKKyAgICAgICAgaWYgKGtpbmQyID4ga2luZDEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViLCBraW5kKTsKKyAgICAgICAgYnVmMiA9IF9QeVVuaWNvZGVfQXNLaW5kKHN1Yiwga2luZDEpOwogICAgIH0KICAgICBpZiAoIWJ1ZjIpIHsKICAgICAgICAgUHlfREVDUkVGKHN1Yik7CkBAIC0xMDU4Nyw3ICsxMDk0MCw3IEBACiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN1Yik7CiAKLSAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBzd2l0Y2ggKGtpbmQxKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKICAgICAgICAgcmVzdWx0ID0gdWNzMWxpYl9maW5kKGJ1ZjEsIGxlbjEsIGJ1ZjIsIGxlbjIsIDApICE9IC0xOwogICAgICAgICBicmVhazsKQEAgLTEwNjA1LDcgKzEwOTU4LDcgQEAKICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICBQeV9ERUNSRUYoc3ViKTsKIAotICAgIGlmIChraW5kMiAhPSBraW5kKQorICAgIGlmIChraW5kMiAhPSBraW5kMSkKICAgICAgICAgUHlNZW1fRnJlZShidWYyKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDY4MSw3ICsxMTAzNCw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbGVmdCA9ICpwX2xlZnQ7Ci0gICAgaWYgKHJpZ2h0ID09IE5VTEwgfHwgbGVmdCA9PSBOVUxMIHx8ICFQeVVuaWNvZGVfQ2hlY2sobGVmdCkpIHsKKyAgICBpZiAocmlnaHQgPT0gTlVMTCB8fCBsZWZ0ID09IE5VTEwKKyAgICAgICAgfHwgIVB5VW5pY29kZV9DaGVjayhsZWZ0KSB8fCAhUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTEwNzIxLDE1ICsxMTA3NSw5IEBACiAgICAgICAgICYmICEoUHlVbmljb2RlX0lTX0FTQ0lJKGxlZnQpICYmICFQeVVuaWNvZGVfSVNfQVNDSUkocmlnaHQpKSkKICAgICB7CiAgICAgICAgIC8qIGFwcGVuZCBpbnBsYWNlICovCi0gICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZShwX2xlZnQsIG5ld19sZW4pICE9IDApIHsKLSAgICAgICAgICAgIC8qIFhYWCBpZiBfUHlVbmljb2RlX1Jlc2l6ZSgpIGZhaWxzLCAnbGVmdCcgaGFzIGJlZW4KLSAgICAgICAgICAgICAqIGRlYWxsb2NhdGVkIHNvIGl0IGNhbm5vdCBiZSBwdXQgYmFjayBpbnRvCi0gICAgICAgICAgICAgKiAndmFyaWFibGUnLiAgVGhlIE1lbW9yeUVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZXJlCi0gICAgICAgICAgICAgKiBpcyBubyB2YWx1ZSBpbiAndmFyaWFibGUnLCB3aGljaCBtaWdodCAodmVyeQotICAgICAgICAgICAgICogcmVtb3RlbHkpIGJlIGEgY2F1c2Ugb2YgaW5jb21wYXRpYmlsaXRpZXMuCi0gICAgICAgICAgICAgKi8KKyAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHBfbGVmdCwgbmV3X2xlbikgIT0gMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KKwogICAgICAgICAvKiBjb3B5ICdyaWdodCcgaW50byB0aGUgbmV3bHkgYWxsb2NhdGVkIGFyZWEgb2YgJ2xlZnQnICovCiAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKCpwX2xlZnQsIGxlZnRfbGVuLCByaWdodCwgMCwgcmlnaHRfbGVuKTsKICAgICB9CkBAIC0xMDc4NSw4ICsxMTEzMywxMCBAQAogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN1YnN0cmluZyk7Ci0gICAgaWYgKGtpbmQyID4ga2luZDEpCisgICAgaWYgKGtpbmQyID4ga2luZDEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgfQogICAgIGtpbmQgPSBraW5kMTsKICAgICBidWYxID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1YnN0cmluZyk7CkBAIC0xMDg1NywyMyArMTEyMDcsMjUgQEAKIH0KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLAotICAgICAgICAgICAgICJTLmV4cGFuZHRhYnMoW3RhYnNpemVdKSAtPiBzdHJcblwKKyAgICAgICAgICAgICAiUy5leHBhbmR0YWJzKHRhYnNpemU9OCkgLT4gc3RyXG5cCiBcblwKIFJldHVybiBhIGNvcHkgb2YgUyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIGV4cGFuZGVkIHVzaW5nIHNwYWNlcy5cblwKIElmIHRhYnNpemUgaXMgbm90IGdpdmVuLCBhIHRhYiBzaXplIG9mIDggY2hhcmFjdGVycyBpcyBhc3N1bWVkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QqCi11bmljb2RlX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQordW5pY29kZV9leHBhbmR0YWJzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBqLCBsaW5lX3Bvcywgc3JjX2xlbiwgaW5jcjsKICAgICBQeV9VQ1M0IGNoOwogICAgIFB5T2JqZWN0ICp1OwogICAgIHZvaWQgKnNyY19kYXRhLCAqZGVzdF9kYXRhOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsidGFic2l6ZSIsIDB9OwogICAgIGludCB0YWJzaXplID0gODsKICAgICBpbnQga2luZDsKICAgICBpbnQgZm91bmQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmV4cGFuZHRhYnMiLCAmdGFic2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpOmV4cGFuZHRhYnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCkBAIC0xMDk2NCwxMCArMTEzMTYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgxLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMTAzNSwzOSArMTEzOTEsOCBAQAogICAgICAgICBfUHlVbmljb2RlX0hBU0goc2VsZikgPSAwOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICAvKiBUaGUgaGFzaCBmdW5jdGlvbiBhcyBhIG1hY3JvLCBnZXRzIGV4cGFuZGVkIHRocmVlIHRpbWVzIGJlbG93LiAqLwotI2RlZmluZSBIQVNIKFApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeCBePSAoUHlfdWhhc2hfdCkgKlAgPDwgNzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB3aGlsZSAoLS1sZW4gPj0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gKFB5X3VoYXNoX3QpICpQKys7ICBcCi0KLSAgICB4ID0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LnByZWZpeDsKLSAgICBzd2l0Y2ggKFB5VW5pY29kZV9LSU5EKHNlbGYpKSB7Ci0gICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjID0gUHlVbmljb2RlXzFCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0goYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOiB7Ci0gICAgICAgIGNvbnN0IFB5X1VDUzIgKnMgPSBQeVVuaWNvZGVfMkJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgUHlfVUNTNCAqbDsKLSAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHNlbGYpID09IFB5VW5pY29kZV80QllURV9LSU5EICYmCi0gICAgICAgICAgICAgICAiSW1wb3NzaWJsZSBzd2l0Y2ggY2FzZSBpbiB1bmljb2RlX2hhc2giKTsKLSAgICAgICAgbCA9IFB5VW5pY29kZV80QllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKGwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotICAgIHggXj0gKFB5X3VoYXNoX3QpIFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOwotICAgIHggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LnN1ZmZpeDsKLQotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7CisgICAgeCA9IF9QeV9IYXNoQnl0ZXMoUHlVbmljb2RlX0RBVEEoc2VsZiksCisgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZikgKiBQeVVuaWNvZGVfS0lORChzZWxmKSk7CiAgICAgX1B5VW5pY29kZV9IQVNIKHNlbGYpID0geDsKICAgICByZXR1cm4geDsKIH0KQEAgLTExMDkwLDEwICsxMTQxNSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExNjIzLDYgKzExOTUyLDcgQEAKICAgICBpbnQga2luZDsKICAgICBQeV9zc2l6ZV90IGksIGosIGxlbjsKICAgICBCTE9PTV9NQVNLIHNlcG1hc2s7CisgICAgUHlfc3NpemVfdCBzZXBsZW47CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzZXBvYmopID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExNjMwLDI0ICsxMTk2MCwzNSBAQAogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CisgICAgc2VwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKTsKICAgICBzZXBtYXNrID0gbWFrZV9ibG9vbV9tYXNrKFB5VW5pY29kZV9LSU5EKHNlcG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShzZXBvYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBsZW4pOwogCiAgICAgaSA9IDA7CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmCi0gICAgICAgICAgICAgICBCTE9PTV9NRU1CRVIoc2VwbWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSksIHNlcG9iaikpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGogPSBsZW47CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBqLS07CisgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmCi0gICAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSwgc2Vwb2JqKSk7CisgICAgICAgIH0KKwogICAgICAgICBqKys7CiAgICAgfQogCkBAIC0xMTY5NCwzMCArMTIwMzUsNjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkb19zdHJpcChQeU9iamVjdCAqc2VsZiwgaW50IHN0cmlwdHlwZSkKIHsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOwogCi0gICAgaSA9IDA7Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkpIHsKLSAgICAgICAgICAgIGkrKzsKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpKSB7CisgICAgICAgIFB5X1VDUzEgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBqID0gbGVuOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgeworICAgICAgICAgICAgai0tOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2pdOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqKys7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKIAotICAgIGogPSBsZW47Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaikpKTsKLSAgICAgICAgaisrOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHNlbGYsIGksIGopOwpAQCAtMTE3MjksNyArMTIxMDMsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTE5NDEsNyArMTIzMTUsNyBAQAogICAgIFB5X3NzaXplX3QgaXNpemU7CiAgICAgUHlfc3NpemVfdCBvc2l6ZSwgc3F1b3RlLCBkcXVvdGUsIGksIG87CiAgICAgUHlfVUNTNCBtYXgsIHF1b3RlOwotICAgIGludCBpa2luZCwgb2tpbmQ7CisgICAgaW50IGlraW5kLCBva2luZCwgdW5jaGFuZ2VkOwogICAgIHZvaWQgKmlkYXRhLCAqb2RhdGE7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQpAQCAtMTE5NTIsNyArMTIzMjYsNyBAQAogCiAgICAgLyogQ29tcHV0ZSBsZW5ndGggb2Ygb3V0cHV0LCBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQKICAgICAgICBtYXhpbXVtIGNoYXJhY3RlciAqLwotICAgIG9zaXplID0gMjsgLyogcXVvdGVzICovCisgICAgb3NpemUgPSAwOwogICAgIG1heCA9IDEyNzsKICAgICBzcXVvdGUgPSBkcXVvdGUgPSAwOwogICAgIGlraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC0xMTk4Myw3ICsxMjM1Nyw5IEBACiAgICAgfQogCiAgICAgcXVvdGUgPSAnXCcnOworICAgIHVuY2hhbmdlZCA9IChvc2l6ZSA9PSBpc2l6ZSk7CiAgICAgaWYgKHNxdW90ZSkgeworICAgICAgICB1bmNoYW5nZWQgPSAwOwogICAgICAgICBpZiAoZHF1b3RlKQogICAgICAgICAgICAgLyogQm90aCBzcXVvdGUgYW5kIGRxdW90ZSBwcmVzZW50LiBVc2Ugc3F1b3RlLAogICAgICAgICAgICAgICAgYW5kIGVzY2FwZSB0aGVtICovCkBAIC0xMTk5MSw2ICsxMjM2Nyw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHF1b3RlID0gJyInOwogICAgIH0KKyAgICBvc2l6ZSArPSAyOyAgIC8qIHF1b3RlcyAqLwogCiAgICAgcmVwciA9IFB5VW5pY29kZV9OZXcob3NpemUsIG1heCk7CiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKQEAgLTEyMDAwLDgxICsxMjM3Nyw4NyBAQAogCiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgMCwgcXVvdGUpOwogICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG9zaXplLTEsIHF1b3RlKTsKKyAgICBpZiAodW5jaGFuZ2VkKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcHIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7CiAKLSAgICBmb3IgKGkgPSAwLCBvID0gMTsgaSA8IGlzaXplOyBpKyspIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7Ci0KLSAgICAgICAgLyogRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgKi8KLSAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBzcGVjaWFsIHdoaXRlc3BhY2UgdG8gJ1x0JywgXG4nLCAnXHInICovCi0gICAgICAgIGlmIChjaCA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndCcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLwotICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgMHg3RikgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOb24tQVNDSUkgY2hhcmFjdGVycyAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLworICAgICAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndScpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxNikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdyJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAnICcgfHwgY2ggPT0gMHg3RikgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBNYXAgVW5pY29kZSB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnVScpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDIwKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyMTA0LDEwICsxMjQ4NywxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKC0xLCBzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQpOwogCkBAIC0xMjEzNiwxMCArMTI1MjMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgtMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTI0OTYsMjggKzEyODg3LDc0IEBACiAgICAgcmV0dXJuIGNhc2Vfb3BlcmF0aW9uKHNlbGYsIGRvX3N3YXBjYXNlKTsKIH0KIAotUHlEb2NfU1RSVkFSKG1ha2V0cmFuc19fZG9jX18sCi0gICAgICAgICAgICAgInN0ci5tYWtldHJhbnMoeFssIHlbLCB6XV0pIC0+IGRpY3QgKHN0YXRpYyBtZXRob2QpXG5cCi1cblwKLVJldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLlxuXAotSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZVxuXAotb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS5cblwKLUNoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cCi1JZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmRcblwKLWluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGVcblwKLWNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdFxuXAotbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuIik7CisvKltjbGluaWNdCiAKLXN0YXRpYyBQeU9iamVjdCoKLXVuaWNvZGVfbWFrZXRyYW5zKFB5T2JqZWN0ICpudWxsLCBQeU9iamVjdCAqYXJncykKK0BzdGF0aWNtZXRob2QKK3N0ci5tYWtldHJhbnMgYXMgdW5pY29kZV9tYWtldHJhbnMKKworICB4OiBvYmplY3QKKworICB5OiB1bmljb2RlPU5VTEwKKworICB6OiB1bmljb2RlPU5VTEwKKworICAvCisKK1JldHVybiBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3Igc3RyLnRyYW5zbGF0ZSgpLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBVbmljb2RlCitvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBOb25lLgorQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy4KK0lmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsIGFuZAoraW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkIHRvIHRoZQorY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0CittdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvIE5vbmUgaW4gdGhlIHJlc3VsdC4KK1tjbGluaWNdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVfbWFrZXRyYW5zX19kb2NfXywKKyJtYWtldHJhbnMoeCwgeT1Ob25lLCB6PU5vbmUpXG4iCisiUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuXG4iCisiXG4iCisiSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZVxuIgorIm9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuXG4iCisiQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cbiIKKyJJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmRcbiIKKyJpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlXG4iCisiY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0XG4iCisibXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuIik7CisKKyNkZWZpbmUgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGICAgIFwKKyAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbil1bmljb2RlX21ha2V0cmFucywgTUVUSF9WQVJBUkdTfE1FVEhfU1RBVElDLCB1bmljb2RlX21ha2V0cmFuc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnNfaW1wbCh2b2lkICpudWxsLCBQeU9iamVjdCAqeCwgUHlPYmplY3QgKnksIFB5T2JqZWN0ICp6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zKHZvaWQgKm51bGwsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICp4LCAqeSA9IE5VTEwsICp6ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeDsKKyAgICBQeU9iamVjdCAqeSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnogPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPfFVVOm1ha2V0cmFucyIsCisgICAgICAgICZ4LCAmeSwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZV9tYWtldHJhbnNfaW1wbChudWxsLCB4LCB5LCB6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnNfaW1wbCh2b2lkICpudWxsLCBQeU9iamVjdCAqeCwgUHlPYmplY3QgKnksIFB5T2JqZWN0ICp6KQorLypbY2xpbmljIGNoZWNrc3VtOiA3Zjc2ZjQxNGEwZGZkMGM2MTRlMGQ0NzE3ODcyZWViNTIwNTE2ZGE3XSovCit7CiAgICAgUHlPYmplY3QgKm5ldyA9IE5VTEwsICprZXksICp2YWx1ZTsKICAgICBQeV9zc2l6ZV90IGkgPSAwOwogICAgIGludCByZXM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98VVU6bWFrZXRyYW5zIiwgJngsICZ5LCAmeikpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIG5ldyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoIW5ldykKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMjcyOCw2ICsxMzE2NSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICByZXN1bHQgPSB0YWlsbWF0Y2goc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kLCAtMSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBpZiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAgICAgICAgICAgICB9CkBAIC0xMjc0NCw2ICsxMzE4Myw4IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKQEAgLTEyNzc3LDYgKzEzMjE4LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyNzkyLDMzICsxMzIzNSw0OCBAQAogICAgIH0KICAgICByZXN1bHQgPSB0YWlsbWF0Y2goc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kLCArMSk7CiAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOwogfQogCiBQeV9MT0NBTF9JTkxJTkUodm9pZCkKIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKLSAgICB3cml0ZXItPnNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcik7CisgICAgaWYgKCF3cml0ZXItPnJlYWRvbmx5KQorICAgICAgICB3cml0ZXItPnNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIC8qIENvcHktb24td3JpdGUgbW9kZTogc2V0IGJ1ZmZlciBzaXplIHRvIDAgc28KKyAgICAgICAgICogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkgd2lsbCBjb3B5IChhbmQgZW5sYXJnZSkgdGhlIGJ1ZmZlciBvbgorICAgICAgICAgKiBuZXh0IHdyaXRlLiAqLworICAgICAgICB3cml0ZXItPnNpemUgPSAwOworICAgIH0KICAgICB3cml0ZXItPm1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHdyaXRlci0+YnVmZmVyKTsKICAgICB3cml0ZXItPmtpbmQgPSBQeVVuaWNvZGVfS0lORCh3cml0ZXItPmJ1ZmZlcik7CiB9CiAKIHZvaWQKLV9QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X3NzaXplX3QgbWluX2xlbmd0aCkKK19QeVVuaWNvZGVXcml0ZXJfSW5pdChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgbWVtc2V0KHdyaXRlciwgMCwgc2l6ZW9mKCp3cml0ZXIpKTsKICNpZmRlZiBQeV9ERUJVRwogICAgIHdyaXRlci0+a2luZCA9IDU7ICAgIC8qIGludmFsaWQga2luZCAqLwogI2VuZGlmCi0gICAgd3JpdGVyLT5taW5fbGVuZ3RoID0gUHlfTUFYKG1pbl9sZW5ndGgsIDEwMCk7Ci0gICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAobWluX2xlbmd0aCA+IDApOworICAgIHdyaXRlci0+bWluX2NoYXIgPSAxMjc7CiB9CiAKIGludAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcikKIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAvKiBPbiBXaW5kb3dzLCBvdmVyYWxsb2NhdGUgYnkgNTAlIGlzIHRoZSBiZXN0IGZhY3RvciAqLworIyAgZGVmaW5lIE9WRVJBTExPQ0FURV9GQUNUT1IgMgorI2Vsc2UKKyAgIC8qIE9uIExpbnV4LCBvdmVyYWxsb2NhdGUgYnkgMjUlIGlzIHRoZSBiZXN0IGZhY3RvciAqLworIyAgZGVmaW5lIE9WRVJBTExPQ0FURV9GQUNUT1IgNAorI2VuZGlmCiAgICAgUHlfc3NpemVfdCBuZXdsZW47CiAgICAgUHlPYmplY3QgKm5ld2J1ZmZlcjsKIApAQCAtMTI4MzAsMjkgKzEzMjg4LDMwIEBACiAgICAgfQogICAgIG5ld2xlbiA9IHdyaXRlci0+cG9zICsgbGVuZ3RoOwogCisgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCB3cml0ZXItPm1pbl9jaGFyKTsKKwogICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgewotICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIDI1JSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlc2l6ZSAqLwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyA0KSkKLSAgICAgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKLSAgICAgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworICAgICAgICBhc3NlcnQoIXdyaXRlci0+cmVhZG9ubHkpOworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUKKyAgICAgICAgICAgICYmIG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SKSkgeworICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVhbGxvYygpICovCisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUjsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworCiAgICAgICAgIHdyaXRlci0+YnVmZmVyID0gUHlVbmljb2RlX05ldyhuZXdsZW4sIG1heGNoYXIpOwogICAgICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgewotICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKLSAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSAyNSUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZXNpemUgKi8KLSAgICAgICAgICAgIGlmIChuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gNCkpCi0gICAgICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIDQ7Ci0gICAgICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQotICAgICAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKKyAgICBlbHNlIGlmIChuZXdsZW4gPiB3cml0ZXItPnNpemUpIHsKKyAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlCisgICAgICAgICAgICAmJiBuZXdsZW4gPD0gKFBZX1NTSVpFX1RfTUFYIC0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUikpIHsKKyAgICAgICAgICAgIC8qIG92ZXJhbGxvY2F0ZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlYWxsb2MoKSAqLworICAgICAgICAgICAgbmV3bGVuICs9IG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1I7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKKyAgICAgICAgICAgIG5ld2xlbiA9IHdyaXRlci0+bWluX2xlbmd0aDsKIAogICAgICAgICBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhciB8fCB3cml0ZXItPnJlYWRvbmx5KSB7CiAgICAgICAgICAgICAvKiByZXNpemUgKyB3aWRlbiAqLwpAQCAtMTI4NzAsNyArMTMzMjksNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICB9CiAgICAgZWxzZSBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhcikgewogICAgICAgICBhc3NlcnQoIXdyaXRlci0+cmVhZG9ubHkpOwpAQCAtMTI4ODEsOSArMTMzMzksMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIsIDAsIHdyaXRlci0+cG9zKTsKICAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgfQorICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgcmV0dXJuIDA7CisKKyN1bmRlZiBPVkVSQUxMT0NBVEVfRkFDVE9SCit9CisKK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDEsIGNoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBjaCk7CisgICAgd3JpdGVyLT5wb3MrKzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpOwogfQogCiBpbnQKQEAgLTEyOTAwLDExICsxMzM3NiwxMCBAQAogICAgIG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKICAgICBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhciB8fCBsZW4gPiB3cml0ZXItPnNpemUgLSB3cml0ZXItPnBvcykgewogICAgICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCAmJiAhd3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKKyAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0cik7CiAgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IHN0cjsKICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7Ci0gICAgICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKLSAgICAgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CiAgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5MTcsMjggKzEzMzkyLDE0MyBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKKyAgICBhc3NlcnQoZW5kIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikpOworICAgIGFzc2VydChzdGFydCA8PSBlbmQpOworCisgICAgaWYgKGVuZCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgc3RhcnQsIGVuZCk7CisgICAgZWxzZQorICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgIGxlbiA9IGVuZCAtIHN0YXJ0OworCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgbWF4Y2hhcikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBzdGFydCwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphc2NpaSwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAgbGVuID0gc3RybGVuKGFzY2lpKTsKKworICAgIGFzc2VydCh1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKWFzY2lpLCAoUHlfVUNTMSopYXNjaWkgKyBsZW4pIDwgMTI4KTsKKworICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICBQeU9iamVjdCAqc3RyOworCisgICAgICAgIHN0ciA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGFzY2lpLCBsZW4pOworICAgICAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CisgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOworICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIDEyNykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAod3JpdGVyLT5raW5kKQorICAgIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgY29uc3QgUHlfVUNTMSAqc3RyID0gKGNvbnN0IFB5X1VDUzEgKilhc2NpaTsKKyAgICAgICAgUHlfVUNTMSAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKKworICAgICAgICBQeV9NRU1DUFkoZGF0YSArIHdyaXRlci0+cG9zLCBzdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKAorICAgICAgICAgICAgUHlfVUNTMSwgUHlfVUNTMiwKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaSArIGxlbiwKKyAgICAgICAgICAgIChQeV9VQ1MyICopd3JpdGVyLT5kYXRhICsgd3JpdGVyLT5wb3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUygKKyAgICAgICAgICAgIFB5X1VDUzEsIFB5X1VDUzQsCisgICAgICAgICAgICBhc2NpaSwgYXNjaWkgKyBsZW4sCisgICAgICAgICAgICAoUHlfVUNTNCAqKXdyaXRlci0+ZGF0YSArIHdyaXRlci0+cG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CisKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigoUHlfVUNTMSopc3RyLCAoUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIHN0ciwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKIFB5T2JqZWN0ICoKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKKyAgICBQeU9iamVjdCAqc3RyOwogICAgIGlmICh3cml0ZXItPnBvcyA9PSAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICBQeV9DTEVBUih3cml0ZXItPmJ1ZmZlcik7CiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KICAgICBpZiAod3JpdGVyLT5yZWFkb25seSkgewotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpID09IHdyaXRlci0+cG9zKTsKLSAgICAgICAgcmV0dXJuIHdyaXRlci0+YnVmZmVyOworICAgICAgICBzdHIgPSB3cml0ZXItPmJ1ZmZlcjsKKyAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSA9PSB3cml0ZXItPnBvcyk7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgIT0gd3JpdGVyLT5wb3MpIHsKICAgICAgICAgUHlPYmplY3QgKm5ld2J1ZmZlcjsKICAgICAgICAgbmV3YnVmZmVyID0gcmVzaXplX2NvbXBhY3Qod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zKTsKICAgICAgICAgaWYgKG5ld2J1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7CiAgICAgfQotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kod3JpdGVyLT5idWZmZXIsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHRfcmVhZHkod3JpdGVyLT5idWZmZXIpOworICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgIHdyaXRlci0+YnVmZmVyID0gTlVMTDsKKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkpOworICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeShzdHIpOwogfQogCiB2b2lkCkBAIC0xMjk3Myw3ICsxMzU2Myw3IEBACiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeVVuaWNvZGVfRm9ybWF0QWR2YW5jZWRXcml0ZXIoJndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGZvcm1hdF9zcGVjLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpKTsKQEAgLTEzMDQyLDcgKzEzNjMyLDggQEAKICAgICB7InRpdGxlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3RpdGxlLCBNRVRIX05PQVJHUywgdGl0bGVfX2RvY19ffSwKICAgICB7ImNlbnRlciIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jZW50ZXIsIE1FVEhfVkFSQVJHUywgY2VudGVyX19kb2NfX30sCiAgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsIGV4cGFuZHRhYnNfX2RvY19ffSwKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZXhwYW5kdGFicywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9wYXJ0aXRpb24sIE1FVEhfTywgcGFydGl0aW9uX19kb2NfX30sCiAgICAgeyJpbmRleCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9pbmRleCwgTUVUSF9WQVJBUkdTLCBpbmRleF9fZG9jX199LApAQCAtMTMwNTQsNyArMTM2NDUsOCBAQAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcmp1c3QsIE1FVEhfVkFSQVJHUywgcmp1c3RfX2RvY19ffSwKICAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yc3RyaXAsIE1FVEhfVkFSQVJHUywgcnN0cmlwX19kb2NfX30sCiAgICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JwYXJ0aXRpb24sIE1FVEhfTywgcnBhcnRpdGlvbl9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBzcGxpdGxpbmVzX19kb2NfX30sCisgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0bGluZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0bGluZXNfX2RvY19ffSwKICAgICB7InN0cmlwIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3N0cmlwLCBNRVRIX1ZBUkFSR1MsIHN0cmlwX19kb2NfX30sCiAgICAgeyJzd2FwY2FzZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zd2FwY2FzZSwgTUVUSF9OT0FSR1MsIHN3YXBjYXNlX19kb2NfX30sCiAgICAgeyJ0cmFuc2xhdGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfdHJhbnNsYXRlLCBNRVRIX08sIHRyYW5zbGF0ZV9fZG9jX199LApAQCAtMTMwNzYsOCArMTM2NjgsNyBAQAogICAgIHsiZm9ybWF0IiwgKFB5Q0Z1bmN0aW9uKSBkb19zdHJpbmdfZm9ybWF0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBmb3JtYXRfX2RvY19ffSwKICAgICB7ImZvcm1hdF9tYXAiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXRfbWFwLCBNRVRIX08sIGZvcm1hdF9tYXBfX2RvY19ffSwKICAgICB7Il9fZm9ybWF0X18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX2Zvcm1hdF9fLCBNRVRIX1ZBUkFSR1MsIHBfZm9ybWF0X19kb2NfX30sCi0gICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX1NUQVRJQywgbWFrZXRyYW5zX19kb2NfX30sCisgICAgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGCiAgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIHNpemVvZl9fZG9jX199LAogI2lmIDAKICAgICAvKiBUaGVzZSBtZXRob2RzIGFyZSBqdXN0IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgaW1wbGVtZW50YXRpb24uICovCkBAIC0xMzE5MiwxNiArMTM3ODMsMzkgQEAKIAogLyogSGVscGVycyBmb3IgUHlVbmljb2RlX0Zvcm1hdCgpICovCiAKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IHsKKyAgICBQeU9iamVjdCAqYXJnczsKKyAgICBpbnQgYXJnc19vd25lZDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbiwgYXJnaWR4OworICAgIFB5T2JqZWN0ICpkaWN0OworCisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBmbXRraW5kOworICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3M7CisgICAgdm9pZCAqZm10ZGF0YTsKKyAgICBQeU9iamVjdCAqZm10c3RyOworCisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Cit9OworCitzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgeworICAgIFB5X1VDUzQgY2g7CisgICAgaW50IGZsYWdzOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgaW50IHByZWM7CisgICAgaW50IHNpZ247Cit9OworCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0bmV4dGFyZyhQeU9iamVjdCAqYXJncywgUHlfc3NpemVfdCBhcmdsZW4sIFB5X3NzaXplX3QgKnBfYXJnaWR4KQordW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQogewotICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gKnBfYXJnaWR4OwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4pIHsKLSAgICAgICAgKCpwX2FyZ2lkeCkrKzsKLSAgICAgICAgaWYgKGFyZ2xlbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnczsKKyAgICBQeV9zc2l6ZV90IGFyZ2lkeCA9IGN0eC0+YXJnaWR4OworCisgICAgaWYgKGFyZ2lkeCA8IGN0eC0+YXJnbGVuKSB7CisgICAgICAgIGN0eC0+YXJnaWR4Kys7CisgICAgICAgIGlmIChjdHgtPmFyZ2xlbiA8IDApCisgICAgICAgICAgICByZXR1cm4gY3R4LT5hcmdzOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGFyZ2lkeCk7CisgICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGN0eC0+YXJncywgYXJnaWR4KTsKICAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmb3JtYXQgc3RyaW5nIik7CkBAIC0xMzIxMCwzMyArMTM4MjQsNDIgQEAKIAogLyogUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBQeVVuaWNvZGUgb2JqZWN0LCBvciBOVUxMIG9uIGZhaWx1cmUuICovCiAKKy8qIEZvcm1hdCBhIGZsb2F0IGludG8gdGhlIHdyaXRlciBpZiB0aGUgd3JpdGVyIGlzIG5vdCBOVUxMLCBvciBpbnRvICpwX291dHB1dAorICAgb3RoZXJ3aXNlLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBpbnQKLWZvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSwKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK2Zvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgY2hhciAqcDsKICAgICBkb3VibGUgeDsKICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgZHRvYV9mbGFnczsKIAogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgcHJlYyA9IGFyZy0+cHJlYzsKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwogCi0gICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCB0eXBlLCBwcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRl9BTFQpID8gUHlfRFRTRl9BTFQgOiAwLCBOVUxMKTsKKyAgICBpZiAoYXJnLT5mbGFncyAmIEZfQUxUKQorICAgICAgICBkdG9hX2ZsYWdzID0gUHlfRFRTRl9BTFQ7CisgICAgZWxzZQorICAgICAgICBkdG9hX2ZsYWdzID0gMDsKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIGFyZy0+Y2gsIHByZWMsIGR0b2FfZmxhZ3MsIE5VTEwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBsZW4gPSBzdHJsZW4ocCk7CiAgICAgaWYgKHdyaXRlcikgewotICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCAxMjcpID09IC0xKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBwLCBsZW4pIDwgMCkgewogICAgICAgICAgICAgUHlNZW1fRnJlZShwKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBwLCBsZW4pOwotICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgKnBfb3V0cHV0ID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkocCwgbGVuKTsKQEAgLTEzMjYzLDcgKzEzODg2LDcgQEAKICAqIHByb2R1Y2UgYSAnLScgc2lnbiwgYnV0IGNhbiBmb3IgUHl0aG9uJ3MgdW5ib3VuZGVkIGludHMuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCoKLWZvcm1hdGxvbmcoUHlPYmplY3QgKnZhbCwgaW50IGZsYWdzLCBpbnQgcHJlYywgaW50IHR5cGUpCitmb3JtYXRsb25nKFB5T2JqZWN0ICp2YWwsIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGNoYXIgKmJ1ZjsKQEAgLTEzMjczLDYgKzEzODk2LDggQEAKICAgICBQeV9zc2l6ZV90IGxsZW47CiAgICAgaW50IG51bWRpZ2l0czsgICAgICAvKiBsZW4gPT0gbnVtbm9uZGlnaXRzICsgbnVtZGlnaXRzICovCiAgICAgaW50IG51bW5vbmRpZ2l0cyA9IDA7CisgICAgaW50IHByZWMgPSBhcmctPnByZWM7CisgICAgaW50IHR5cGUgPSBhcmctPmNoOwogCiAgICAgLyogQXZvaWQgZXhjZWVkaW5nIFNTSVpFX1RfTUFYICovCiAgICAgaWYgKHByZWMgPiBJTlRfTUFYLTMpIHsKQEAgLTEzMjg0LDEzICsxMzkwOSwxNCBAQAogICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodmFsKSk7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoISIndHlwZScgbm90IGluIFtkaXVveFhdIik7CiAgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnaSc6CiAgICAgY2FzZSAndSc6Ci0gICAgICAgIC8qIFNwZWNpYWwtY2FzZSBib29sZWFuOiB3ZSB3YW50IDAvMSAqLwotICAgICAgICBpZiAoUHlCb29sX0NoZWNrKHZhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RZUEUodmFsKS0+dHBfc3RyKHZhbCk7CisgICAgICAgIC8qIGludCBhbmQgaW50IHN1YmNsYXNzZXMgc2hvdWxkIHByaW50IG51bWVyaWNhbGx5IHdoZW4gYSBudW1lcmljICovCisgICAgICAgIC8qIGZvcm1hdCBjb2RlIGlzIHVzZWQgKHNlZSBpc3N1ZTE4NzgwKSAqLworICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ28nOgogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwpAQCAtMTMzMDEsOCArMTM5MjcsNiBAQAogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwogICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxNik7CiAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydCghIid0eXBlJyBub3QgaW4gW2R1b3hYXSIpOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzMxMywxMiArMTM5MzcsMTQgQEAKIAogICAgIC8qIFRvIG1vZGlmeSB0aGUgc3RyaW5nIGluLXBsYWNlLCB0aGVyZSBjYW4gb25seSBiZSBvbmUgcmVmZXJlbmNlLiAqLwogICAgIGlmIChQeV9SRUZDTlQocmVzdWx0KSAhPSAxKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHJlc3VsdCk7CiAgICAgbGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCk7CiAgICAgaWYgKGxsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxhcmdlIGluIF9QeUJ5dGVzX0Zvcm1hdExvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzMzMCw3ICsxMzk1Niw3IEBACiAgICAgYXNzZXJ0KG51bWRpZ2l0cyA+IDApOwogCiAgICAgLyogR2V0IHJpZCBvZiBiYXNlIG1hcmtlciB1bmxlc3MgRl9BTFQgKi8KLSAgICBpZiAoKChmbGFncyAmIEZfQUxUKSA9PSAwICYmCisgICAgaWYgKCgoYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAwICYmCiAgICAgICAgICh0eXBlID09ICdvJyB8fCB0eXBlID09ICd4JyB8fCB0eXBlID09ICdYJykpKSB7CiAgICAgICAgIGFzc2VydChidWZbc2lnbl0gPT0gJzAnKTsKICAgICAgICAgYXNzZXJ0KGJ1ZltzaWduKzFdID09ICd4JyB8fCBidWZbc2lnbisxXSA9PSAnWCcgfHwKQEAgLTEzMzc1LDE1ICsxNDAwMSwxMDAgQEAKICAgICAgICAgICAgIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAneCcpCiAgICAgICAgICAgICAgICAgYnVmW2ldIC09ICdhJy0nQSc7CiAgICAgfQotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkgfHwgbGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpCisgICAgICAgIHx8IGJ1ZiAhPSBQeVVuaWNvZGVfREFUQShyZXN1bHQpKSB7CiAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlOwogICAgICAgICB1bmljb2RlID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBsZW4pOwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gdW5pY29kZTsKICAgICB9CisgICAgZWxzZSBpZiAobGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJnJlc3VsdCwgbGVuKSA8IDApCisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvKiBGb3JtYXQgYW4gaW50ZWdlci4KKyAqIFJldHVybiAxIGlmIHRoZSBudW1iZXIgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gdGhlIHdyaXRlciwKKyAqICAgICAgICAwIGlmIHRoZSBudW1iZXIgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gKnBfb3V0cHV0CisgKiAgICAgICAtMSBhbmQgcmFpc2UgYW4gZXhjZXB0aW9uIG9uIGVycm9yICovCitzdGF0aWMgaW50CittYWluZm9ybWF0bG9uZyhQeU9iamVjdCAqdiwKKyAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgICAgUHlPYmplY3QgKipwX291dHB1dCwKKyAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBQeU9iamVjdCAqaW9iaiwgKnJlczsKKyAgICBjaGFyIHR5cGUgPSAoY2hhcilhcmctPmNoOworCisgICAgaWYgKCFQeU51bWJlcl9DaGVjayh2KSkKKyAgICAgICAgZ290byB3cm9uZ3R5cGU7CisKKyAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKKyAgICAgICAgaWYgKGlvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICBnb3RvIHdyb25ndHlwZTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKGlvYmopKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlvYmogPSB2OworICAgICAgICBQeV9JTkNSRUYoaW9iaik7CisgICAgfQorCisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCisgICAgICAgICYmIGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkKKyAgICAgICAgJiYgdHlwZSAhPSAnWCcpCisgICAgeworICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgaW50IGFsdGVybmF0ZSA9IGFyZy0+ZmxhZ3MgJiBGX0FMVDsKKyAgICAgICAgaW50IGJhc2U7CisKKyAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIid0eXBlJyBub3QgaW4gW2RpdW94WF0iKTsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBiYXNlID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKHdyaXRlciwgdiwgYmFzZSwgYWx0ZXJuYXRlKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmVzID0gZm9ybWF0bG9uZyhpb2JqLCBhcmcpOworICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAqcF9vdXRwdXQgPSByZXM7CisgICAgcmV0dXJuIDA7CisKK3dyb25ndHlwZToKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgorICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIC0xOworfQorCiBzdGF0aWMgUHlfVUNTNAogZm9ybWF0Y2hhcihQeU9iamVjdCAqdikKIHsKQEAgLTEzNDE2LDU0MCArMTQxMjcsNTg3IEBACiAgICAgcmV0dXJuIChQeV9VQ1M0KSAtMTsKIH0KIAorLyogUGFyc2Ugb3B0aW9ucyBvZiBhbiBhcmd1bWVudDogZmxhZ3MsIHdpZHRoLCBwcmVjaXNpb24uCisgICBIYW5kbGUgYWxzbyAiJShuYW1lKSIgc3ludGF4LgorCisgICBSZXR1cm4gMCBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gYXJnLT5zdHIuCisgICBSZXR1cm4gMSBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gd3JpdHRlbiBpbnRvIGN0eC0+d3JpdGVyLAorICAgUmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmdfcGFyc2Uoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZykKK3sKKyNkZWZpbmUgRk9STUFUX1JFQUQoY3R4KSBcCisgICAgICAgIFB5VW5pY29kZV9SRUFEKChjdHgpLT5mbXRraW5kLCAoY3R4KS0+Zm10ZGF0YSwgKGN0eCktPmZtdHBvcykKKworICAgIFB5T2JqZWN0ICp2OworCisgICAgaWYgKGFyZy0+Y2ggPT0gJygnKSB7CisgICAgICAgIC8qIEdldCBhcmd1bWVudCB2YWx1ZSBmcm9tIGEgZGljdGlvbmFyeS4gRXhhbXBsZTogIiUobmFtZSlzIi4gKi8KKyAgICAgICAgUHlfc3NpemVfdCBrZXlzdGFydDsKKyAgICAgICAgUHlfc3NpemVfdCBrZXlsZW47CisgICAgICAgIFB5T2JqZWN0ICprZXk7CisgICAgICAgIGludCBwY291bnQgPSAxOworCisgICAgICAgIGlmIChjdHgtPmRpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHJlcXVpcmVzIGEgbWFwcGluZyIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICsrY3R4LT5mbXRwb3M7CisgICAgICAgIC0tY3R4LT5mbXRjbnQ7CisgICAgICAgIGtleXN0YXJ0ID0gY3R4LT5mbXRwb3M7CisgICAgICAgIC8qIFNraXAgb3ZlciBiYWxhbmNlZCBwYXJlbnRoZXNlcyAqLworICAgICAgICB3aGlsZSAocGNvdW50ID4gMCAmJiAtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJyknKQorICAgICAgICAgICAgICAgIC0tcGNvdW50OworICAgICAgICAgICAgZWxzZSBpZiAoYXJnLT5jaCA9PSAnKCcpCisgICAgICAgICAgICAgICAgKytwY291bnQ7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGtleWxlbiA9IGN0eC0+Zm10cG9zIC0ga2V5c3RhcnQgLSAxOworICAgICAgICBpZiAoY3R4LT5mbXRjbnQgPCAwIHx8IHBjb3VudCA+IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCBrZXkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBrZXkgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGN0eC0+Zm10c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0YXJ0LCBrZXlzdGFydCArIGtleWxlbik7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGN0eC0+YXJnc19vd25lZCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGN0eC0+YXJncyk7CisgICAgICAgICAgICBjdHgtPmFyZ3Nfb3duZWQgPSAwOworICAgICAgICB9CisgICAgICAgIGN0eC0+YXJncyA9IFB5T2JqZWN0X0dldEl0ZW0oY3R4LT5kaWN0LCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKGN0eC0+YXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBjdHgtPmFyZ3Nfb3duZWQgPSAxOworICAgICAgICBjdHgtPmFyZ2xlbiA9IC0xOworICAgICAgICBjdHgtPmFyZ2lkeCA9IC0yOworICAgIH0KKworICAgIC8qIFBhcnNlIGZsYWdzLiBFeGFtcGxlOiAiJStpIiA9PiBmbGFncz1GX1NJR04uICovCisgICAgd2hpbGUgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgc3dpdGNoIChhcmctPmNoKSB7CisgICAgICAgIGNhc2UgJy0nOiBhcmctPmZsYWdzIHw9IEZfTEpVU1Q7IGNvbnRpbnVlOworICAgICAgICBjYXNlICcrJzogYXJnLT5mbGFncyB8PSBGX1NJR047IGNvbnRpbnVlOworICAgICAgICBjYXNlICcgJzogYXJnLT5mbGFncyB8PSBGX0JMQU5LOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnIyc6IGFyZy0+ZmxhZ3MgfD0gRl9BTFQ7IGNvbnRpbnVlOworICAgICAgICBjYXNlICcwJzogYXJnLT5mbGFncyB8PSBGX1pFUk87IGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qIFBhcnNlIHdpZHRoLiBFeGFtcGxlOiAiJTEwcyIgPT4gd2lkdGg9MTAgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnKicpIHsKKyAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgYXJnLT53aWR0aCA9IFB5TG9uZ19Bc1NzaXplX3Qodik7CisgICAgICAgIGlmIChhcmctPndpZHRoID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChhcmctPndpZHRoIDwgMCkgeworICAgICAgICAgICAgYXJnLT5mbGFncyB8PSBGX0xKVVNUOworICAgICAgICAgICAgYXJnLT53aWR0aCA9IC1hcmctPndpZHRoOworICAgICAgICB9CisgICAgICAgIGlmICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICBhcmctPndpZHRoID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgd2hpbGUgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPCAnMCcgfHwgYXJnLT5jaCA+ICc5JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8qIFNpbmNlIGFyZy0+Y2ggaXMgdW5zaWduZWQsIHRoZSBSSFMgd291bGQgZW5kIHVwIGFzIHVuc2lnbmVkLAorICAgICAgICAgICAgICAgbWl4aW5nIHNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbi4gU2luY2UgYXJnLT5jaCBpcyBiZXR3ZWVuCisgICAgICAgICAgICAgICAnMCcgYW5kICc5JywgY2FzdGluZyB0byBpbnQgaXMgc2FmZS4gKi8KKyAgICAgICAgICAgIGlmIChhcmctPndpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpYXJnLT5jaCAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPndpZHRoID0gYXJnLT53aWR0aCoxMCArIChhcmctPmNoIC0gJzAnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFBhcnNlIHByZWNpc2lvbi4gRXhhbXBsZTogIiUuM2YiID0+IHByZWM9MyAqLworICAgIGlmIChhcmctPmNoID09ICcuJykgeworICAgICAgICBhcmctPnByZWMgPSAwOworICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgICAgICB2ID0gdW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhjdHgpOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFyZy0+cHJlYyA9IF9QeUxvbmdfQXNJbnQodik7CisgICAgICAgICAgICBpZiAoYXJnLT5wcmVjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA8IDApCisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgICAgIGlmICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPj0gJzAnICYmIGFyZy0+Y2ggPD0gJzknKSB7CisgICAgICAgICAgICBhcmctPnByZWMgPSBhcmctPmNoIC0gJzAnOworICAgICAgICAgICAgd2hpbGUgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPCAnMCcgfHwgYXJnLT5jaCA+ICc5JykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA+IChJTlRfTUFYIC0gKChpbnQpYXJnLT5jaCAtICcwJykpIC8gMTApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJlY2lzaW9uIHRvbyBiaWciKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhcmctPnByZWMgPSBhcmctPnByZWMqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZ25vcmUgImgiLCAibCIgYW5kICJMIiBmb3JtYXQgcHJlZml4IChleDogIiVoaSIgb3IgIiVscyIpICovCisgICAgaWYgKGN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJ2gnIHx8IGFyZy0+Y2ggPT0gJ2wnIHx8IGFyZy0+Y2ggPT0gJ0wnKSB7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoY3R4LT5mbXRjbnQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyN1bmRlZiBGT1JNQVRfUkVBRAorfQorCisvKiBGb3JtYXQgb25lIGFyZ3VtZW50LiBTdXBwb3J0ZWQgY29udmVyc2lvbiBzcGVjaWZpZXJzOgorCisgICAtICJzIiwgInIiLCAiYSI6IGFueSB0eXBlCisgICAtICJpIiwgImQiLCAidSIsICJvIiwgIngiLCAiWCI6IGludAorICAgLSAiZSIsICJFIiwgImYiLCAiRiIsICJnIiwgIkciOiBmbG9hdAorICAgLSAiYyI6IGludCBvciBzdHIgKDEgY2hhcmFjdGVyKQorCisgICBXaGVuIHBvc3NpYmxlLCB0aGUgb3V0cHV0IGlzIHdyaXR0ZW4gZGlyZWN0bHkgaW50byB0aGUgVW5pY29kZSB3cml0ZXIKKyAgIChjdHgtPndyaXRlcikuIEEgc3RyaW5nIGlzIGNyZWF0ZWQgd2hlbiBwYWRkaW5nIGlzIHJlcXVpcmVkLgorCisgICBSZXR1cm4gMCBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gZm9ybWF0dGVkIGludG8gKnBfc3RyLAorICAgICAgICAgIDEgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHdyaXR0ZW4gaW50byBjdHgtPndyaXRlciwKKyAgICAgICAgIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX2Zvcm1hdChzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipwX3N0cikKK3sKKyAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIgPSAmY3R4LT53cml0ZXI7CisKKyAgICBpZiAoY3R4LT5mbXRjbnQgPT0gMCkKKyAgICAgICAgY3R4LT53cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKworICAgIGlmIChhcmctPmNoID09ICclJykgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCAnJScpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIHN3aXRjaCAoYXJnLT5jaCkgeworICAgIGNhc2UgJ3MnOgorICAgIGNhc2UgJ3InOgorICAgIGNhc2UgJ2EnOgorICAgICAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikgJiYgYXJnLT53aWR0aCA9PSAtMSAmJiBhcmctPnByZWMgPT0gLTEpIHsKKyAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKHdyaXRlciwgdiwgMTAsIGFyZy0+ZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYgYXJnLT5jaCA9PSAncycpIHsKKyAgICAgICAgICAgICpwX3N0ciA9IHY7CisgICAgICAgICAgICBQeV9JTkNSRUYoKnBfc3RyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhcmctPmNoID09ICdzJykKKyAgICAgICAgICAgICAgICAqcF9zdHIgPSBQeU9iamVjdF9TdHIodik7CisgICAgICAgICAgICBlbHNlIGlmIChhcmctPmNoID09ICdyJykKKyAgICAgICAgICAgICAgICAqcF9zdHIgPSBQeU9iamVjdF9SZXByKHYpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X0FTQ0lJKHYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnaSc6CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAndSc6CisgICAgY2FzZSAnbyc6CisgICAgY2FzZSAneCc6CisgICAgY2FzZSAnWCc6CisgICAgeworICAgICAgICBpbnQgcmV0ID0gbWFpbmZvcm1hdGxvbmcodiwgYXJnLCBwX3N0ciwgd3JpdGVyKTsKKyAgICAgICAgaWYgKHJldCAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgYXJnLT5zaWduID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnZSc6CisgICAgY2FzZSAnRSc6CisgICAgY2FzZSAnZic6CisgICAgY2FzZSAnRic6CisgICAgY2FzZSAnZyc6CisgICAgY2FzZSAnRyc6CisgICAgICAgIGlmIChhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMQorICAgICAgICAgICAgJiYgIShhcmctPmZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgYXJnLCBOVUxMLCB3cml0ZXIpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgYXJnLT5zaWduID0gMTsKKyAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGFyZywgcF9zdHIsIE5VTEwpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgJ2MnOgorICAgIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IGZvcm1hdGNoYXIodik7CisgICAgICAgIGlmIChjaCA9PSAoUHlfVUNTNCkgLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMSkgeworICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBjaCkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICpwX3N0ciA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIGZvcm1hdCBjaGFyYWN0ZXIgJyVjJyAoMHgleCkgIgorICAgICAgICAgICAgICAgICAgICAgImF0IGluZGV4ICV6ZCIsCisgICAgICAgICAgICAgICAgICAgICAoMzE8PWFyZy0+Y2ggJiYgYXJnLT5jaDw9MTI2KSA/IChjaGFyKWFyZy0+Y2ggOiAnPycsCisgICAgICAgICAgICAgICAgICAgICAoaW50KWFyZy0+Y2gsCisgICAgICAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcyAtIDEpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICgqcF9zdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGFzc2VydCAoUHlVbmljb2RlX0NoZWNrKCpwX3N0cikpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmdfb3V0cHV0KHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyKQoreworICAgIFB5X3NzaXplX3QgbGVuOworICAgIGVudW0gUHlVbmljb2RlX0tpbmQga2luZDsKKyAgICB2b2lkICpwYnVmOworICAgIFB5X3NzaXplX3QgcGluZGV4OworICAgIFB5X1VDUzQgc2lnbmNoYXI7CisgICAgUHlfc3NpemVfdCBidWZsZW47CisgICAgUHlfVUNTNCBtYXhjaGFyOworICAgIFB5X3NzaXplX3Qgc3VibGVuOworICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciA9ICZjdHgtPndyaXRlcjsKKyAgICBQeV9VQ1M0IGZpbGw7CisKKyAgICBmaWxsID0gJyAnOworICAgIGlmIChhcmctPnNpZ24gJiYgYXJnLT5mbGFncyAmIEZfWkVSTykKKyAgICAgICAgZmlsbCA9ICcwJzsKKworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKKyAgICBpZiAoKGFyZy0+d2lkdGggPT0gLTEgfHwgYXJnLT53aWR0aCA8PSBsZW4pCisgICAgICAgICYmIChhcmctPnByZWMgPT0gLTEgfHwgYXJnLT5wcmVjID49IGxlbikKKyAgICAgICAgJiYgIShhcmctPmZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKKyAgICB7CisgICAgICAgIC8qIEZhc3QgcGF0aCAqLworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIFRydW5jYXRlIHRoZSBzdHJpbmcgZm9yICJzIiwgInIiIGFuZCAiYSIgZm9ybWF0cworICAgICAgIGlmIHRoZSBwcmVjaXNpb24gaXMgc2V0ICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJ3MnIHx8IGFyZy0+Y2ggPT0gJ3InIHx8IGFyZy0+Y2ggPT0gJ2EnKSB7CisgICAgICAgIGlmIChhcmctPnByZWMgPj0gMCAmJiBsZW4gPiBhcmctPnByZWMpCisgICAgICAgICAgICBsZW4gPSBhcmctPnByZWM7CisgICAgfQorCisgICAgLyogQWRqdXN0IHNpZ24gYW5kIHdpZHRoICovCisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cik7CisgICAgcGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHN0cik7CisgICAgcGluZGV4ID0gMDsKKyAgICBzaWduY2hhciA9ICdcMCc7CisgICAgaWYgKGFyZy0+c2lnbikgeworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KTsKKyAgICAgICAgaWYgKGNoID09ICctJyB8fCBjaCA9PSAnKycpIHsKKyAgICAgICAgICAgIHNpZ25jaGFyID0gY2g7CisgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgIHBpbmRleCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFyZy0+ZmxhZ3MgJiBGX1NJR04pCisgICAgICAgICAgICBzaWduY2hhciA9ICcrJzsKKyAgICAgICAgZWxzZSBpZiAoYXJnLT5mbGFncyAmIEZfQkxBTkspCisgICAgICAgICAgICBzaWduY2hhciA9ICcgJzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXJnLT5zaWduID0gMDsKKyAgICB9CisgICAgaWYgKGFyZy0+d2lkdGggPCBsZW4pCisgICAgICAgIGFyZy0+d2lkdGggPSBsZW47CisKKyAgICAvKiBQcmVwYXJlIHRoZSB3cml0ZXIgKi8KKyAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgIGlmICghKGFyZy0+ZmxhZ3MgJiBGX0xKVVNUKSkgeworICAgICAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgICAgICBpZiAoKGFyZy0+d2lkdGgtMSkgPiBsZW4pCisgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBmaWxsKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhcmctPndpZHRoID4gbGVuKQorICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgZmlsbCk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIpID4gbWF4Y2hhcikgeworICAgICAgICBQeV9VQ1M0IHN0cm1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgMCwgcGluZGV4K2xlbik7CisgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgc3RybWF4Y2hhcik7CisgICAgfQorCisgICAgYnVmbGVuID0gYXJnLT53aWR0aDsKKyAgICBpZiAoYXJnLT5zaWduICYmIGxlbiA9PSBhcmctPndpZHRoKQorICAgICAgICBidWZsZW4rKzsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYnVmbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogV3JpdGUgdGhlIHNpZ24gaWYgbmVlZGVkICovCisgICAgaWYgKGFyZy0+c2lnbikgeworICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIHNpZ25jaGFyKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4pCisgICAgICAgICAgICBhcmctPndpZHRoLS07CisgICAgfQorCisgICAgLyogV3JpdGUgdGhlIG51bWVyaWMgcHJlZml4IGZvciAieCIsICJYIiBhbmQgIm8iIGZvcm1hdHMKKyAgICAgICBpZiB0aGUgYWx0ZXJuYXRlIGZvcm0gaXMgdXNlZC4KKyAgICAgICBGb3IgZXhhbXBsZSwgd3JpdGUgIjB4IiBmb3IgdGhlICIlI3giIGZvcm1hdC4gKi8KKyAgICBpZiAoKGFyZy0+ZmxhZ3MgJiBGX0FMVCkgJiYgKGFyZy0+Y2ggPT0gJ3gnIHx8IGFyZy0+Y2ggPT0gJ1gnIHx8IGFyZy0+Y2ggPT0gJ28nKSkgeworICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KSA9PSAnMCcpOworICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4ICsgMSkgPT0gYXJnLT5jaCk7CisgICAgICAgIGlmIChmaWxsICE9ICcgJykgeworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgJzAnKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MrMSwgYXJnLT5jaCk7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAyOworICAgICAgICAgICAgcGluZGV4ICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgYXJnLT53aWR0aCAtPSAyOworICAgICAgICBpZiAoYXJnLT53aWR0aCA8IDApCisgICAgICAgICAgICBhcmctPndpZHRoID0gMDsKKyAgICAgICAgbGVuIC09IDI7CisgICAgfQorCisgICAgLyogUGFkIGxlZnQgd2l0aCB0aGUgZmlsbCBjaGFyYWN0ZXIgaWYgbmVlZGVkICovCisgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4gJiYgIShhcmctPmZsYWdzICYgRl9MSlVTVCkpIHsKKyAgICAgICAgc3VibGVuID0gYXJnLT53aWR0aCAtIGxlbjsKKyAgICAgICAgRklMTCh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgZmlsbCwgd3JpdGVyLT5wb3MsIHN1Ymxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IHN1YmxlbjsKKyAgICAgICAgYXJnLT53aWR0aCA9IGxlbjsKKyAgICB9CisKKyAgICAvKiBJZiBwYWRkaW5nIHdpdGggc3BhY2VzOiB3cml0ZSBzaWduIGlmIG5lZWRlZCBhbmQvb3IgbnVtZXJpYyBwcmVmaXggaWYKKyAgICAgICB0aGUgYWx0ZXJuYXRlIGZvcm0gaXMgdXNlZCAqLworICAgIGlmIChmaWxsID09ICcgJykgeworICAgICAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBzaWduY2hhcik7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAxOworICAgICAgICB9CisgICAgICAgIGlmICgoYXJnLT5mbGFncyAmIEZfQUxUKSAmJiAoYXJnLT5jaCA9PSAneCcgfHwgYXJnLT5jaCA9PSAnWCcgfHwgYXJnLT5jaCA9PSAnbycpKSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KSA9PSAnMCcpOworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCsxKSA9PSBhcmctPmNoKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsICcwJyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zKzEsIGFyZy0+Y2gpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMjsKKyAgICAgICAgICAgIHBpbmRleCArPSAyOworICAgICAgICB9CisgICAgfQorCisgICAgLyogV3JpdGUgY2hhcmFjdGVycyAqLworICAgIGlmIChsZW4pIHsKKyAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHBpbmRleCwgbGVuKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gbGVuOworICAgIH0KKworICAgIC8qIFBhZCByaWdodCB3aXRoIHRoZSBmaWxsIGNoYXJhY3RlciBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT53aWR0aCA+IGxlbikgeworICAgICAgICBzdWJsZW4gPSBhcmctPndpZHRoIC0gbGVuOworICAgICAgICBGSUxMKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCAnICcsIHdyaXRlci0+cG9zLCBzdWJsZW4pOworICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBIZWxwZXIgb2YgUHlVbmljb2RlX0Zvcm1hdCgpOiBmb3JtYXQgb25lIGFyZy4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgpCit7CisgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190IGFyZzsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIGludCByZXQ7CisKKyAgICBhcmcuY2ggPSBQeVVuaWNvZGVfUkVBRChjdHgtPmZtdGtpbmQsIGN0eC0+Zm10ZGF0YSwgY3R4LT5mbXRwb3MpOworICAgIGFyZy5mbGFncyA9IDA7CisgICAgYXJnLndpZHRoID0gLTE7CisgICAgYXJnLnByZWMgPSAtMTsKKyAgICBhcmcuc2lnbiA9IDA7CisgICAgc3RyID0gTlVMTDsKKworICAgIHJldCA9IHVuaWNvZGVfZm9ybWF0X2FyZ19wYXJzZShjdHgsICZhcmcpOworICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldCA9IHVuaWNvZGVfZm9ybWF0X2FyZ19mb3JtYXQoY3R4LCAmYXJnLCAmc3RyKTsKKyAgICBpZiAocmV0ID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAocmV0ICE9IDEpIHsKKyAgICAgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX291dHB1dChjdHgsICZhcmcsIHN0cik7CisgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBpZiAocmV0ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChjdHgtPmRpY3QgJiYgKGN0eC0+YXJnaWR4IDwgY3R4LT5hcmdsZW4pICYmIGFyZy5jaCAhPSAnJScpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gb3JtYXQoUHlPYmplY3QgKmZvcm1hdCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCBmbXRjbnQsIGZtdHBvcywgYXJnbGVuLCBhcmdpZHg7Ci0gICAgaW50IGFyZ3Nfb3duZWQgPSAwOwotICAgIFB5T2JqZWN0ICpkaWN0ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdGVtcCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnNlY29uZCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnVmb3JtYXQ7Ci0gICAgdm9pZCAqZm10OwotICAgIGVudW0gUHlVbmljb2RlX0tpbmQga2luZCwgZm10a2luZDsKLSAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbjsKLSAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgY3R4OwogCiAgICAgaWYgKGZvcm1hdCA9PSBOVUxMIHx8IGFyZ3MgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHVmb3JtYXQgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChmb3JtYXQpOwotICAgIGlmICh1Zm9ybWF0ID09IE5VTEwpCisKKyAgICBjdHguZm10c3RyID0gUHlVbmljb2RlX0Zyb21PYmplY3QoZm9ybWF0KTsKKyAgICBpZiAoY3R4LmZtdHN0ciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVmb3JtYXQpID09IC0xKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih1Zm9ybWF0KTsKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGN0eC5mbXRzdHIpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIGN0eC5mbXRkYXRhID0gUHlVbmljb2RlX0RBVEEoY3R4LmZtdHN0cik7CisgICAgY3R4LmZtdGtpbmQgPSBQeVVuaWNvZGVfS0lORChjdHguZm10c3RyKTsKKyAgICBjdHguZm10Y250ID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoY3R4LmZtdHN0cik7CisgICAgY3R4LmZtdHBvcyA9IDA7CiAKLSAgICBmbXQgPSBQeVVuaWNvZGVfREFUQSh1Zm9ybWF0KTsKLSAgICBmbXRraW5kID0gUHlVbmljb2RlX0tJTkQodWZvcm1hdCk7Ci0gICAgZm10Y250ID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodWZvcm1hdCk7Ci0gICAgZm10cG9zID0gMDsKLQotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCBmbXRjbnQgKyAxMDApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmY3R4LndyaXRlcik7CisgICAgY3R4LndyaXRlci5taW5fbGVuZ3RoID0gY3R4LmZtdGNudCArIDEwMDsKKyAgICBjdHgud3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CiAKICAgICBpZiAoUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICBhcmdsZW4gPSBQeVR1cGxlX1NpemUoYXJncyk7Ci0gICAgICAgIGFyZ2lkeCA9IDA7CisgICAgICAgIGN0eC5hcmdsZW4gPSBQeVR1cGxlX1NpemUoYXJncyk7CisgICAgICAgIGN0eC5hcmdpZHggPSAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgYXJnbGVuID0gLTE7Ci0gICAgICAgIGFyZ2lkeCA9IC0yOworICAgICAgICBjdHguYXJnbGVuID0gLTE7CisgICAgICAgIGN0eC5hcmdpZHggPSAtMjsKICAgICB9CisgICAgY3R4LmFyZ3Nfb3duZWQgPSAwOwogICAgIGlmIChQeU1hcHBpbmdfQ2hlY2soYXJncykgJiYgIVB5VHVwbGVfQ2hlY2soYXJncykgJiYgIVB5VW5pY29kZV9DaGVjayhhcmdzKSkKLSAgICAgICAgZGljdCA9IGFyZ3M7CisgICAgICAgIGN0eC5kaWN0ID0gYXJnczsKKyAgICBlbHNlCisgICAgICAgIGN0eC5kaWN0ID0gTlVMTDsKKyAgICBjdHguYXJncyA9IGFyZ3M7CiAKLSAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpICE9ICclJykgeworICAgIHdoaWxlICgtLWN0eC5mbXRjbnQgPj0gMCkgeworICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoY3R4LmZtdGtpbmQsIGN0eC5mbXRkYXRhLCBjdHguZm10cG9zKSAhPSAnJScpIHsKICAgICAgICAgICAgIFB5X3NzaXplX3Qgbm9uZm10cG9zOwotICAgICAgICAgICAgbm9uZm10cG9zID0gZm10cG9zKys7Ci0gICAgICAgICAgICB3aGlsZSAoZm10Y250ID49IDAgJiYKLSAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcykgIT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgZm10cG9zKys7Ci0gICAgICAgICAgICAgICAgZm10Y250LS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm10Y250IDwgMCkKLSAgICAgICAgICAgICAgICBmbXRwb3MtLTsKLSAgICAgICAgICAgIHN1YmxlbiA9IGZtdHBvcyAtIG5vbmZtdHBvczsKLSAgICAgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHVmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25mbXRwb3MsIG5vbmZtdHBvcyArIHN1Ymxlbik7Ci0gICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHN1YmxlbiwgbWF4Y2hhcikgPT0gLTEpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogCi0gICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXIuYnVmZmVyLCB3cml0ZXIucG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZvcm1hdCwgbm9uZm10cG9zLCBzdWJsZW4pOwotICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBzdWJsZW47CisgICAgICAgICAgICBub25mbXRwb3MgPSBjdHguZm10cG9zKys7CisgICAgICAgICAgICB3aGlsZSAoY3R4LmZtdGNudCA+PSAwICYmCisgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1JFQUQoY3R4LmZtdGtpbmQsIGN0eC5mbXRkYXRhLCBjdHguZm10cG9zKSAhPSAnJScpIHsKKyAgICAgICAgICAgICAgICBjdHguZm10cG9zKys7CisgICAgICAgICAgICAgICAgY3R4LmZtdGNudC0tOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN0eC5mbXRjbnQgPCAwKSB7CisgICAgICAgICAgICAgICAgY3R4LmZtdHBvcy0tOworICAgICAgICAgICAgICAgIGN0eC53cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoJmN0eC53cml0ZXIsIGN0eC5mbXRzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25mbXRwb3MsIGN0eC5mbXRwb3MpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBHb3QgYSBmb3JtYXQgc3BlY2lmaWVyICovCi0gICAgICAgICAgICBpbnQgZmxhZ3MgPSAwOwotICAgICAgICAgICAgUHlfc3NpemVfdCB3aWR0aCA9IC0xOwotICAgICAgICAgICAgaW50IHByZWMgPSAtMTsKLSAgICAgICAgICAgIFB5X1VDUzQgYyA9ICdcMCc7Ci0gICAgICAgICAgICBQeV9VQ1M0IGZpbGw7Ci0gICAgICAgICAgICBpbnQgc2lnbjsKLSAgICAgICAgICAgIFB5X1VDUzQgc2lnbmNoYXI7Ci0gICAgICAgICAgICBpbnQgaXNudW1vazsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gTlVMTDsKLSAgICAgICAgICAgIHZvaWQgKnBidWYgPSBOVUxMOwotICAgICAgICAgICAgUHlfc3NpemVfdCBwaW5kZXgsIGxlbjsKLSAgICAgICAgICAgIFB5X1VDUzQgYnVmbWF4Y2hhcjsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgYnVmbGVuOwotCi0gICAgICAgICAgICBmbXRwb3MrKzsKLSAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcyk7Ci0gICAgICAgICAgICBpZiAoYyA9PSAnKCcpIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGtleXN0YXJ0OwotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qga2V5bGVuOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgICAgICAgICAgICAgaW50IHBjb3VudCA9IDE7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHJlcXVpcmVzIGEgbWFwcGluZyIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICsrZm10cG9zOwotICAgICAgICAgICAgICAgIC0tZm10Y250OwotICAgICAgICAgICAgICAgIGtleXN0YXJ0ID0gZm10cG9zOwotICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBiYWxhbmNlZCBwYXJlbnRoZXNlcyAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChwY291bnQgPiAwICYmIC0tZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyknKQotICAgICAgICAgICAgICAgICAgICAgICAgLS1wY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJygnKQotICAgICAgICAgICAgICAgICAgICAgICAgKytwY291bnQ7Ci0gICAgICAgICAgICAgICAgICAgIGZtdHBvcysrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBrZXlsZW4gPSBmbXRwb3MgLSBrZXlzdGFydCAtIDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZtdGNudCA8IDAgfHwgcGNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCBrZXkiKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBrZXkgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHVmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzdGFydCwga2V5c3RhcnQgKyBrZXlsZW4pOwotICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmIChhcmdzX293bmVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgYXJnc19vd25lZCA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGRpY3QsIGtleSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFyZ3Nfb3duZWQgPSAxOwotICAgICAgICAgICAgICAgIGFyZ2xlbiA9IC0xOwotICAgICAgICAgICAgICAgIGFyZ2lkeCA9IC0yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnLSc6IGZsYWdzIHw9IEZfTEpVU1Q7IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgJysnOiBmbGFncyB8PSBGX1NJR047IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgJyAnOiBmbGFncyB8PSBGX0JMQU5LOyBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBjYXNlICcjJzogZmxhZ3MgfD0gRl9BTFQ7IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgJzAnOiBmbGFncyB8PSBGX1pFUk87IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09ICcqJykgewotICAgICAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aWR0aCA9IFB5TG9uZ19Bc1NzaXplX3Qodik7Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IEZfTEpVU1Q7Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gLXdpZHRoOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGMgLSAnMCc7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIC8qIFNpbmNlIGMgaXMgdW5zaWduZWQsIHRoZSBSSFMgd291bGQgZW5kIHVwIGFzIHVuc2lnbmVkLAotICAgICAgICAgICAgICAgICAgICAgICBtaXhpbmcgc2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uLiBTaW5jZSBjIGlzIGJldHdlZW4KLSAgICAgICAgICAgICAgICAgICAgICAgJzAnIGFuZCAnOScsIGNhc3RpbmcgdG8gaW50IGlzIHNhZmUuICovCi0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KWMgLSAnMCcpKSAvIDEwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGggdG9vIGJpZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGgqMTAgKyAoYyAtICcwJyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPT0gJy4nKSB7Ci0gICAgICAgICAgICAgICAgcHJlYyA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKicpIHsKLSAgICAgICAgICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiogd2FudHMgaW50Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHJlYyA9IF9QeUxvbmdfQXNJbnQodik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVjIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSAwOwotICAgICAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAnMCcgJiYgYyA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJlYyA9IGMgLSAnMCc7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8ICcwJyB8fCBjID4gJzknKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPiAoSU5UX01BWCAtICgoaW50KWMgLSAnMCcpKSAvIDEwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVjIHRvbyBiaWciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmVjID0gcHJlYyoxMCArIChjIC0gJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gLyogcHJlYyAqLwotICAgICAgICAgICAgaWYgKGZtdGNudCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJ2gnIHx8IGMgPT0gJ2wnIHx8IGMgPT0gJ0wnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICAgICAgY3R4LmZtdHBvcysrOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZm9ybWF0X2FyZygmY3R4KSA9PSAtMSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZm10Y250ID09IDApCi0gICAgICAgICAgICAgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmIChjID09ICclJykgewotICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgMSwgJyUnKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsICclJyk7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAxOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOwotICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICAgICAgICAgIHNpZ24gPSAwOwotICAgICAgICAgICAgc2lnbmNoYXIgPSAnXDAnOwotICAgICAgICAgICAgZmlsbCA9ICcgJzsKLSAgICAgICAgICAgIHN3aXRjaCAoYykgewotCi0gICAgICAgICAgICBjYXNlICdzJzoKLSAgICAgICAgICAgIGNhc2UgJ3InOgotICAgICAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpICYmIHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0Zvcm1hdFdyaXRlcigmd3JpdGVyLCB2LCAxMCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYgYyA9PSAncycpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHY7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0ZW1wKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICdzJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBQeU9iamVjdF9TdHIodik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ3InKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X1JlcHIodik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBQeU9iamVjdF9BU0NJSSh2KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2knOgotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICBjYXNlICd1JzoKLSAgICAgICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICBjYXNlICdYJzoKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikKLSAgICAgICAgICAgICAgICAgICAgJiYgd2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBzd2l0Y2goYykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKCZ3cml0ZXIsIHYsIDEwLCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKCZ3cml0ZXIsIHYsIDE2LCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKCZ3cml0ZXIsIHYsIDgsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaXNudW1vayA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKFB5TnVtYmVyX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppb2JqPU5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW9iaiA9IHY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoaW9iaik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoaW9iaiE9TlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhpb2JqKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzbnVtb2sgPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBmb3JtYXRsb25nKGlvYmosIGZsYWdzLCBwcmVjLCAoYyA9PSAnaSc/ICdkJzogYykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIWlzbnVtb2spIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlJSVjIGZvcm1hdDogYSBudW1iZXIgaXMgcmVxdWlyZWQsICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgKGNoYXIpYywgUHlfVFlQRSh2KS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQotICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBjYXNlICdlJzoKLSAgICAgICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAgICAgY2FzZSAnZic6Ci0gICAgICAgICAgICBjYXNlICdGJzoKLSAgICAgICAgICAgIGNhc2UgJ2cnOgotICAgICAgICAgICAgY2FzZSAnRyc6Ci0gICAgICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAgICAgJiYgIShmbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdGZsb2F0KHYsIGZsYWdzLCBwcmVjLCBjLCBOVUxMLCAmd3JpdGVyKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNpZ24gPSAxOwotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZfWkVSTykKLSAgICAgICAgICAgICAgICAgICAgZmlsbCA9ICcwJzsKLSAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgZmxhZ3MsIHByZWMsIGMsICZ0ZW1wLCBOVUxMKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgdGVtcCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBmb3JtYXRjaGFyKHYpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAoUHlfVUNTNCkgLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCAxLCBjaCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAxOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAgPSBQeVVuaWNvZGVfRnJvbU9yZGluYWwoY2gpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnJWMnICgweCV4KSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdCBpbmRleCAlemQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMzE8PWMgJiYgYzw9MTI2KSA/IChjaGFyKWMgOiAnPycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10cG9zIC0gMSk7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICBhc3NlcnQgKFB5VW5pY29kZV9DaGVjayh0ZW1wKSk7Ci0KLSAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgJiYgIShmbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgdGVtcCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodGVtcCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUih0ZW1wKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodGVtcCk7Ci0gICAgICAgICAgICBwYnVmID0gUHlVbmljb2RlX0RBVEEodGVtcCk7Ci0gICAgICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh0ZW1wKTsKLQotICAgICAgICAgICAgaWYgKGMgPT0gJ3MnIHx8IGMgPT0gJ3InIHx8IGMgPT0gJ2EnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZWMgPj0gMCAmJiBsZW4gPiBwcmVjKQotICAgICAgICAgICAgICAgICAgICBsZW4gPSBwcmVjOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBwYnVmIGlzIGluaXRpYWxpemVkIGhlcmUuICovCi0gICAgICAgICAgICBwaW5kZXggPSAwOwotICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy0nIHx8IGNoID09ICcrJykgewotICAgICAgICAgICAgICAgICAgICBzaWduY2hhciA9IGNoOwotICAgICAgICAgICAgICAgICAgICBsZW4tLTsKLSAgICAgICAgICAgICAgICAgICAgcGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRl9TSUdOKQotICAgICAgICAgICAgICAgICAgICBzaWduY2hhciA9ICcrJzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChmbGFncyAmIEZfQkxBTkspCi0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gJyAnOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2lkdGggPCBsZW4pCi0gICAgICAgICAgICAgICAgd2lkdGggPSBsZW47Ci0KLSAgICAgICAgICAgIC8qIENvbXB1dGUgdGhlIGxlbmd0aCBhbmQgbWF4aW11bSBjaGFyYWN0ZXIgb2YgdGhlCi0gICAgICAgICAgICAgICB3cml0dGVuIGNoYXJhY3RlcnMgKi8KLSAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSAxMjc7Ci0gICAgICAgICAgICBpZiAoIShmbGFncyAmIEZfTEpVU1QpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh3aWR0aC0xKSA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgZmlsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBsZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIGZpbGwpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHRlbXAsIDAsIHBpbmRleCtsZW4pOwotICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBtYXhjaGFyKTsKLQotICAgICAgICAgICAgYnVmbGVuID0gd2lkdGg7Ci0gICAgICAgICAgICBpZiAoc2lnbiAmJiBsZW4gPT0gd2lkdGgpCi0gICAgICAgICAgICAgICAgYnVmbGVuKys7Ci0KLSAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgYnVmbGVuLCBidWZtYXhjaGFyKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICAgICAgICAgIC8qIFdyaXRlIGNoYXJhY3RlcnMgKi8KLSAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsIHNpZ25jaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPiBsZW4pCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoLS07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKGZsYWdzICYgRl9BTFQpICYmIChjID09ICd4JyB8fCBjID09ICdYJyB8fCBjID09ICdvJykpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KSA9PSAnMCcpOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXggKyAxKSA9PSBjKTsKLSAgICAgICAgICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcysxLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2lkdGggLT0gMjsKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPCAwKQotICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgbGVuIC09IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2lkdGggPiBsZW4gJiYgIShmbGFncyAmIEZfTEpVU1QpKSB7Ci0gICAgICAgICAgICAgICAgc3VibGVuID0gd2lkdGggLSBsZW47Ci0gICAgICAgICAgICAgICAgRklMTCh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIGZpbGwsIHdyaXRlci5wb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBzdWJsZW47Ci0gICAgICAgICAgICAgICAgd2lkdGggPSBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZmlsbCA9PSAnICcpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCBzaWduY2hhcik7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZfQUxUKSAmJiAoYyA9PSAneCcgfHwgYyA9PSAnWCcgfHwgYyA9PSAnbycpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgrMSkgPT0gYyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsICcwJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MrMSwgYyk7Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgcGluZGV4ICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobGVuKSB7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLmJ1ZmZlciwgd3JpdGVyLnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLCBwaW5kZXgsIGxlbik7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod2lkdGggPiBsZW4pIHsKLSAgICAgICAgICAgICAgICBzdWJsZW4gPSB3aWR0aCAtIGxlbjsKLSAgICAgICAgICAgICAgICBGSUxMKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgJyAnLCB3cml0ZXIucG9zLCBzdWJsZW4pOwotICAgICAgICAgICAgICAgIHdyaXRlci5wb3MgKz0gc3VibGVuOwotICAgICAgICAgICAgfQotCi1uZXh0YXJnOgotICAgICAgICAgICAgaWYgKGRpY3QgJiYgKGFyZ2lkeCA8IGFyZ2xlbikgJiYgYyAhPSAnJScpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGFsbCBhcmd1bWVudHMgY29udmVydGVkIGR1cmluZyBzdHJpbmcgZm9ybWF0dGluZyIpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0NMRUFSKHRlbXApOwotICAgICAgICB9IC8qICclJyAqLwotICAgIH0gLyogdW50aWwgZW5kICovCi0gICAgaWYgKGFyZ2lkeCA8IGFyZ2xlbiAmJiAhZGljdCkgeworICAgIGlmIChjdHguYXJnaWR4IDwgY3R4LmFyZ2xlbiAmJiAhY3R4LmRpY3QpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIik7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAoYXJnc19vd25lZCkgewotICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgaWYgKGN0eC5hcmdzX293bmVkKSB7CisgICAgICAgIFB5X0RFQ1JFRihjdHguYXJncyk7CiAgICAgfQotICAgIFB5X0RFQ1JFRih1Zm9ybWF0KTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotICAgIFB5X1hERUNSRUYoc2Vjb25kKTsKLSAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CisgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmY3R4LndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodWZvcm1hdCk7Ci0gICAgUHlfWERFQ1JFRih0ZW1wKTsKLSAgICBQeV9YREVDUkVGKHNlY29uZCk7Ci0gICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwotICAgIGlmIChhcmdzX293bmVkKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZjdHgud3JpdGVyKTsKKyAgICBpZiAoY3R4LmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5hcmdzKTsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0xNDIwOSw3ICsxNDk2Nyw3IEBACiB2b2lkCiBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZShQeU9iamVjdCAqKnApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnMgPSAqcDsKKyAgICBQeU9iamVjdCAqcyA9ICpwOwogICAgIFB5T2JqZWN0ICp0OwogI2lmZGVmIFB5X0RFQlVHCiAgICAgYXNzZXJ0KHMgIT0gTlVMTCk7CkBAIC0xNDIzOCwxMiArMTQ5OTYsMTIgQEAKICAgICB0ID0gUHlEaWN0X0dldEl0ZW0oaW50ZXJuZWQsIHMpOwogICAgIFB5X0VORF9BTExPV19SRUNVUlNJT04KIAotICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKHQpOwotICAgICAgICAgICAgUHlfREVDUkVGKCpwKTsKLSAgICAgICAgICAgICpwID0gdDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmICh0KSB7CisgICAgICAgIFB5X0lOQ1JFRih0KTsKKyAgICAgICAgUHlfREVDUkVGKCpwKTsKKyAgICAgICAgKnAgPSB0OworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgUHlUaHJlYWRTdGF0ZV9HRVQoKS0+cmVjdXJzaW9uX2NyaXRpY2FsID0gMTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oaW50ZXJuZWQsIHMsIHMpIDwgMCkgewpAQCAtMTQ1NDIsNyArMTUzMDAsNyBAQAogaW50CiBQeV9VTklDT0RFX3N0cm5jbXAoY29uc3QgUHlfVU5JQ09ERSAqczEsIGNvbnN0IFB5X1VOSUNPREUgKnMyLCBzaXplX3QgbikKIHsKLSAgICByZWdpc3RlciBQeV9VTklDT0RFIHUxLCB1MjsKKyAgICBQeV9VTklDT0RFIHUxLCB1MjsKICAgICBmb3IgKDsgbiAhPSAwOyBuLS0pIHsKICAgICAgICAgdTEgPSAqczE7CiAgICAgICAgIHUyID0gKnMyOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oIGIvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCmluZGV4IDQ2YTkyYmIuLjFmZGMwOTIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaAorKysgYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKQEAgLTE1ODksNyArMTU4OSw3IEBACiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAwLCAwLCAKICAgICAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1LCA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAKICAgICAyMSwgMjEsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDI1LCAyNSwgNSwgMCwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKKyAgICAyNSwgMjUsIDI1LCA1LCAyMSwgMCwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA5NiwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDcsIDgsIApAQCAtMTgwMSw3ICsxODAxLDcgQEAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDUsIDUsIDUsIDk2LCA1LCA1LCA1LCA1LCA1NSwgMjUsIDAsIDAsIDcsIAogICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgMjUsIDI1LCAyNSwgMiwgMCwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI1LCAyNSwgMjUsIDIxLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA5NiwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCkBAIC0xODI4LDcgKzE4MjgsNyBAQAogICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxMzIsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKLSAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAxOCwgMTgsIDE4LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCAKKyAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAxOCwgMTgsIDI1LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDE4LCAyNSwgMTgsIDI1LCAKQEAgLTE5MTUsMTEgKzE5MTUsMTEgQEAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA2LCA1LCA1LCA2LCAzLCAzLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE4LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTgsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDIsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMCwgMCwgMCwgMCwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjQ1LCA5NSwgMCwgMCwgCisgICAgMjEsIDIxLCAyMSwgMjEsIDAsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNDUsIDk1LCAwLCAwLCAKICAgICAyNDYsIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCA1LCA1LCA1LCA1LCA1LCA5NSwgMjQ1LCAyNiwgMjIsIDIzLCAyNDYsIAogICAgIDI0NywgMjQ4LCAyNDksIDI1MCwgMjUxLCA1LCA1LCA1LCA1LCA1LCAwLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgCiAgICAgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDYsIDYsIDYsIDYsIDI1LCA2LCA2LCA2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCAxMTMsIDUsIDUsIApAQCAtMjU5MywxMCArMjU5MywxMCBAQAogICAgIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKLSAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAyNTIsIDI1MiwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKLSAgICAxNDEsIDE0MSwgMTQxLCAyNTIsIDI1MiwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCiAgICAgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgCkBAIC0zMzgwLDYgKzMzODAsNyBAQAogICAgIGNhc2UgMHgxMjQzNToKICAgICBjYXNlIDB4MTI0NEE6CiAgICAgY2FzZSAweDEyNDUwOgorICAgIGNhc2UgMHgxMjQ1NjoKICAgICBjYXNlIDB4MTI0NTk6CiAgICAgY2FzZSAweDFEMzYxOgogICAgIGNhc2UgMHgxRDdEMDoKQEAgLTM0MjcsNiArMzQyOCw4IEBACiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMDAwMC4wOwogICAgIGNhc2UgMHgzMjUxOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjEuMDsKKyAgICBjYXNlIDB4MTI0MzI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMTYwMDAuMDsKICAgICBjYXNlIDB4MzI1MjoKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIyLjA7CiAgICAgY2FzZSAweDMyNTM6CkBAIC0zNTM0LDYgKzM1MzcsNyBAQAogICAgIGNhc2UgMHgxMjQzQjoKICAgICBjYXNlIDB4MTI0NEI6CiAgICAgY2FzZSAweDEyNDUxOgorICAgIGNhc2UgMHgxMjQ1NzoKICAgICBjYXNlIDB4MUQzNjI6CiAgICAgY2FzZSAweDFEN0QxOgogICAgIGNhc2UgMHgxRDdEQjoKQEAgLTM3MjEsNiArMzcyNSw4IEBACiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0Mi4wOwogICAgIGNhc2UgMHgzMkI4OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDMuMDsKKyAgICBjYXNlIDB4MTI0MzM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MzIwMDAuMDsKICAgICBjYXNlIDB4MzJCOToKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ0LjA7CiAgICAgY2FzZSAweDMyQkE6CkBAIC00MjcxLDcgKzQyNzcsNyBAQAogLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBiaWRpcmVjdGlvbmFsCiAgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLgogICovCi1pbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCkKK2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShjb25zdCBQeV9VQ1M0IGNoKQogewogICAgIHN3aXRjaCAoY2gpIHsKICAgICBjYXNlIDB4MDAwOToKQEAgLTQyODcsNyArNDI5Myw2IEBACiAgICAgY2FzZSAweDAwODU6CiAgICAgY2FzZSAweDAwQTA6CiAgICAgY2FzZSAweDE2ODA6Ci0gICAgY2FzZSAweDE4MEU6CiAgICAgY2FzZSAweDIwMDA6CiAgICAgY2FzZSAweDIwMDE6CiAgICAgY2FzZSAweDIwMDI6CkBAIC00MzEzLDcgKzQzMTgsNyBAQAogICogcHJvcGVydHkgJ0JLJywgJ0NSJywgJ0xGJyBvciAnTkwnIG9yIGhhdmluZyBiaWRpcmVjdGlvbmFsCiAgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuCiAgKi8KLWludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpCitpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhjb25zdCBQeV9VQ1M0IGNoKQogewogICAgIHN3aXRjaCAoY2gpIHsKICAgICBjYXNlIDB4MDAwQToKZGlmZiAtLWdpdCBhL09iamVjdHMvd2Vha3JlZm9iamVjdC5jIGIvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMKaW5kZXggYjQ5ZGNlZS4uYzA4M2Y4ZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMKKysrIGIvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMKQEAgLTMzOCw2ICszMzgsMTEgQEAKIH0KIAogCitzdGF0aWMgUHlNZW1iZXJEZWYgd2Vha3JlZl9tZW1iZXJzW10gPSB7CisgICAgeyJfX2NhbGxiYWNrX18iLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlXZWFrUmVmZXJlbmNlLCB3cl9jYWxsYmFjayksIFJFQURPTkxZfSwKKyAgICB7TlVMTH0gLyogU2VudGluZWwgKi8KK307CisKIFB5VHlwZU9iamVjdAogX1B5V2Vha3JlZl9SZWZUeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCkBAIC0zNjksNyArMzc0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgd2Vha3JlZl9tZW1iZXJzLCAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0c2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0Ki8KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzLmRzcCBiL1BDL1ZDNi9fY3R5cGVzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5OGVhYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2N0eXBlcy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9jdHlwZXMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiIENGRz0iX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwIGIvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZWIyMTcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXNfdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIiBDRkc9Il9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AgYi9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjMGNkZC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9lbGVtZW50dHJlZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIiBDRkc9Il9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWVfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX21zaS5kc3AgYi9QQy9WQzYvX21zaS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YTYxYmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19tc2kuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXNpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tc2kgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiIENGRz0iX21zaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXNpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2kucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tc2kiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBDXF9tc2kuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcCBiL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiODQ3MC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiIENGRz0iX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxZDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZ19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc29ja2V0LmRzcCBiL1BDL1ZDNi9fc29ja2V0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVlZThmMi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NvY2tldC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zb2NrZXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NvY2tldCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIgQ0ZHPSJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zb2NrZXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NxbGl0ZTMuZHNwIGIvUEMvVkM2L19zcWxpdGUzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2OTkzOC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NxbGl0ZTMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NxbGl0ZTMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NxbGl0ZTMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIgQ0ZHPSJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zcWxpdGUzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EIE1PRFVMRV9OQU1FPVwic3FsaXRlM1wiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zc2wuZHNwIGIvUEMvVkM2L19zc2wuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGJiOTkzLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3NsLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NzbCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IiAweDAxMDYNCi0NCi1DRkc9X3NzbCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIgQ0ZHPSJfc3NsIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpDQotIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayINCi0jIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2wuZXhlIg0KLSMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsLmJzYyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3NsIg0KLSMgUFJPUCBDbWRfTGluZSAicHl0aG9uIGJ1aWxkX3NzbC5weSINCi0jIFBST1AgUmVidWlsZF9PcHQgIi1hIg0KLSMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbC5weWQiDQotIyBQUk9QIEJzY19OYW1lICIiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiDQotIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIg0KLSMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsX2QuYnNjIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBDbWRfTGluZSAicHl0aG9uX2QgLXUgYnVpbGRfc3NsLnB5IC1kIg0KLSMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiDQotIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIg0KLSMgUFJPUCBCc2NfTmFtZSAiIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0hSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NzbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zc2wubWFrIGIvUEMvVkM2L19zc2wubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdhNjE0Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3NsLm1haworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotIUlGREVGIERFQlVHCi1NT0RVTEU9X3NzbF9kLnB5ZAotVEVNUF9ESVI9eDg2LXRlbXAtZGVidWcvX3NzbAotQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgotTEZMQUdTPS9ub2RlZmF1bHRsaWI6Im1zdmNydCIKLSFFTFNFCi1NT0RVTEU9X3NzbC5weWQKLVRFTVBfRElSPXg4Ni10ZW1wLXJlbGVhc2UvX3NzbAotQ0ZMQUdTPS9PeCAvTUQgL0xEIC9EV0lOMzIKLUxGTEFHUz0KLSFFTkRJRgotCi1JTkNMVURFUz0tSSAuLi8uLi9JbmNsdWRlIC1JIC4uIC1JICQoU1NMX0RJUikvaW5jMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIKLUxJQlM9Z2RpMzIubGliIHdzb2NrMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9saWJwYXRoOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWIKLQotU09VUkNFPS4uLy4uL01vZHVsZXMvX3NzbC5jICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAkKFNTTF9MSUJfRElSKS9zc2xlYXkzMi5saWIKLQotJChNT0RVTEUpOiAkKFNPVVJDRSkgLi4vKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0gICAgQGlmIG5vdCBleGlzdCAiJChURU1QX0RJUikvLiIgbWtkaXIgIiQoVEVNUF9ESVIpIgotICAgIGNsIC9ub2xvZ28gJChTT1VSQ0UpICQoQ0ZMQUdTKSAvRm8kKFRFTVBfRElSKVwkKi5vYmogJChJTkNMVURFUykgL2xpbmsgL291dDokKE1PRFVMRSkgJChMSUJTKSAkKExGTEFHUykKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwIGIvUEMvVkM2L190ZXN0Y2FwaS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYWEyNWEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L190ZXN0Y2FwaS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90ZXN0Y2FwaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGVzdGNhcGkgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIiBDRkc9Il90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3Rlc3RjYXBpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL190ZXN0Y2FwaS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGVzdGNhcGkiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGlfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3RraW50ZXIuZHNwIGIvUEMvVkM2L190a2ludGVyLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ2OWY1OS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3RraW50ZXIuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3RraW50ZXIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIiBDRkc9Il90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGtpbnRlciINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5cLi5cLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODVnLmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODVnLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NS5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90a2ludGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF9zc2wucHkgYi9QQy9WQzYvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWFmMDg0Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIG1vZHVsZSBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIF9zc2wucHlkIGl0c2VsZi4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUEMvVkM2IGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBzc2wgUHl0aG9uIGV4dGVuc2lvbgotIyB3aXRob3V0IGludGVydmVudGlvbi4KLQotIyBNb2RpZmllZCBieSBDaHJpc3RpYW4gSGVpbWVzCi0jIE5vdyB0aGlzIHNjcmlwdCBzdXBwb3J0cyBwcmUtZ2VuZXJhdGVkIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0jIERldmVsb3BlcnMgZG9uJ3QgbmVlZCBhbiBpbnN0YWxsYXRpb24gb2YgUGVybCBhbnltb3JlIHRvIGJ1aWxkIFB5dGhvbi4gQSBzdm4KLSMgY2hlY2tvdXQgZnJvbSBvdXIgc3ZuIHJlcG9zaXRvcnkgaXMgZW5vdWdoLgotCi1pbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQoIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IikKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQoIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCgiICIsIHApCi0gICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCi0gICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKSkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBwcmludChkb19zY3JpcHQpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIGNtcChmMSwgZjIpOgotICAgIGJ1ZnNpemUgPSAxMDI0ICogOAotICAgIHdpdGggb3BlbihmMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGYyLCAncmInKSBhcyBmcDI6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBpZiBiMSAhPSBiMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBiMToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi1kZWYgY29weShzcmMsIGRzdCk6Ci0gICAgaWYgb3MucGF0aC5pc2ZpbGUoZHN0KSBhbmQgY21wKHNyYywgZHN0KToKLSAgICAgICAgcmV0dXJuCi0gICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCi0KLWRlZiBtYWluKCk6Ci0gICAgZGVidWcgPSAiLWQiIGluIHN5cy5hcmd2Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIDE6ICMgV2luMzIKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19uYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXG50Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUKLSAgICAgICAgZGlyc3VmZml4ID0gIjMyIgotICAgIGNvbmZpZ3VyZSArPSAiIG5vLWlkZWEgbm8tcmM1IG5vLW1kYzIiCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZDNiAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1ha2VmaWxlcyEiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAgICAgICAgIHByaW50KCJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIikKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiT3BlblNTTCBkZWJ1ZyBidWlsZHMgYXJlbid0IHN1cHBvcnRlZC4iKQotICAgICAgICAgICAgI2lmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICMgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICMgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgIyAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICAgICBmaXhfbWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mLmgiLCByImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCi0KLSAgICAgICAgIyBJZiB0aGUgYXNzZW1ibGVyIGZpbGVzIGRvbid0IGV4aXN0IGluIHRtcFhYLCBjb3B5IHRoZW0gdGhlcmUKLSAgICAgICAgaWYgcGVybCBpcyBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cygiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCJ0bXAiK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoInRtcCIrZGlyc3VmZml4KQotICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcigiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRoKCIuYXNtIik6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUociJ0bXAlc1wlcyIgJSAoZGlyc3VmZml4LCBmKSk6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkociJhc20lc1wlcyIgJSAoZGlyc3VmZml4LCBmKSwgInRtcCIrZGlyc3VmZml4KQotCi0gICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCi0gICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKLQotICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCi0gICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZCkKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50KCJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIpCi0gICAgICAgICAgICBwcmludChyYykKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICAjIEFuZCBmaW5hbGx5LCB3ZSBjYW4gYnVpbGQgdGhlIF9zc2wgbW9kdWxlIGl0c2VsZiBmb3IgUHl0aG9uLgotICAgIGRlZnMgPSAiU1NMX0RJUj0lcyIgJSAoc3NsX2RpciwpCi0gICAgaWYgZGVidWc6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiAiICsgIkRFQlVHPTEiCi0gICAgcmMgPSBvcy5zeXN0ZW0oJ25tYWtlIC9ub2xvZ28gLWYgX3NzbC5tYWsgJyArIGRlZnMgKyAiICIgKyBtYWtlX2ZsYWdzKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5IGIvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Y2E5MmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzdWJwcm9jZXNzCi0KLVRDTF9NQUpPUiA9IDgKLVRDTF9NSU5PUiA9IDUKLVRDTF9QQVRDSCA9IDIKLQotVElYX01BSk9SID0gOAotVElYX01JTk9SID0gNAotVElYX1BBVENIID0gMwotCi1kZWYgYWJzcGF0aChuYW1lKToKLSAgICBwYXIgPSBvcy5wYXRoLnBhcmRpcgotICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKF9fZmlsZV9fLCBwYXIsIHBhciwgcGFyLCBwYXIsIG5hbWUpKQotCi1UQ0xfRElSID0gYWJzcGF0aCgidGNsJWQuJWQuJWQiICUgKFRDTF9NQUpPUiwgVENMX01JTk9SLCBUQ0xfUEFUQ0gpKQotVEtfRElSICA9IGFic3BhdGgoInRrJWQuJWQuJWQiICAlIChUQ0xfTUFKT1IsIFRDTF9NSU5PUiwgVENMX1BBVENIKSkKLVRJWF9ESVIgPSBhYnNwYXRoKCJ0aXglZC4lZC4lZCIgJSAoVElYX01BSk9SLCBUSVhfTUlOT1IsIFRJWF9QQVRDSCkpCi1PVVRfRElSID0gYWJzcGF0aCgidGNsdGsiKQotCi1kZWYgaGF2ZV9hcmdzKCphKToKLSAgICByZXR1cm4gYW55KHMgaW4gc3lzLmFyZ3ZbMTpdIGZvciBzIGluIGEpCi0KLWRlZiBlbnRlcihkaXIpOgotICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihkaXIsICJ3aW4iKSkKLQotZGVmIG1haW4oKToKLSAgICBkZWJ1ZyA9IGhhdmVfYXJncygiLWQiLCAiLS1kZWJ1ZyIpCi0gICAgY2xlYW4gPSBoYXZlX2FyZ3MoImNsZWFuIikKLSAgICBpbnN0YWxsID0gaGF2ZV9hcmdzKCJpbnN0YWxsIikKLSAgICB0Y2wgPSBoYXZlX2FyZ3MoInRjbCIpCi0gICAgdGsgPSBoYXZlX2FyZ3MoInRrIikKLSAgICB0aXggPSBoYXZlX2FyZ3MoInRpeCIpCi0gICAgaWYgbm90KHRjbCkgYW5kIG5vdCh0aykgYW5kIG5vdCh0aXgpOgotICAgICAgICB0Y2wgPSB0ayA9IHRpeCA9IFRydWUKLQotICAgIGRlZiBubWFrZShtYWtlZmlsZSwgKmEpOgotICAgICAgICBhcmdzID0gWyJubWFrZSIsICIvbm9sb2dvIiwgIi9mIiwgbWFrZWZpbGUsICJERUJVRz0lZCIgJSBkZWJ1Z10KLSAgICAgICAgYXJncy5leHRlbmQoYSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGFyZ3MpCi0KLSAgICBpZiB0Y2w6Ci0gICAgICAgIGVudGVyKFRDTF9ESVIpCi0gICAgICAgIGRlZiBubWFrZV90Y2woKmEpOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGNsKCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RjbCgiaW5zdGFsbCIsICJJTlNUQUxMRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGNsKCkKLQotICAgIGlmIHRrOgotICAgICAgICBlbnRlcihUS19ESVIpCi0gICAgICAgIGRlZiBubWFrZV90aygqYSk6Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiVENMRElSPSIgKyBUQ0xfRElSLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90aygiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90aygiaW5zdGFsbCIsICJJTlNUQUxMRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGsoKQotCi0gICAgaWYgdGl4OgotICAgICAgICBlbnRlcihUSVhfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGl4KCphKToKLSAgICAgICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfTUFKT1I9JWQiICUgVENMX01BSk9SLAotICAgICAgICAgICAgICAgICAgIlRDTF9NSU5PUj0lZCIgJSBUQ0xfTUlOT1IsCi0gICAgICAgICAgICAgICAgICAiVENMX1BBVENIPSVkIiAlIFRDTF9QQVRDSCwKLSAgICAgICAgICAgICAgICAgICJNQUNISU5FPUlYODYiLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90aXgoImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGl4KCJpbnN0YWxsIiwgIklOU1RBTExfRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGl4KCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZDNi9iejIuZHNwIGIvUEMvVkM2L2J6Mi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MmNiYWQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J6Mi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImJ6MiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1iejIgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIiBDRkc9ImJ6MiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJiejIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiYnoyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXGJ6MiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxiemlwMi0xLjAuNiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNlxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUgL25vZGVmYXVsdGxpYg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcYnoyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjYiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjZcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJiejIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiYnoyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwIGIvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzM1ZTEyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1tYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiIENGRz0ibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvLmV4ZQ0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLQ0KLSIuLlxweXRob25udF9yYy5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm8uZXhlID4uLlxweXRob25udF9yYy5oDQotDQotIyBFbmQgQ3VzdG9tIEJ1aWxkDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIEN1c3RvbSBCdWlsZA0KLUlucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm9fZC5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmNfZC5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm9fZC5leGUgPi4uXHB5dGhvbm50X3JjX2QuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxtYWtlX3ZlcnNpb25pbmZvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcGNidWlsZC5kc3cgYi9QQy9WQzYvcGNidWlsZC5kc3cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YjJlYmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3BjYnVpbGQuZHN3CisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXMiPSIuXF9jdHlwZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXNfdGVzdCI9Ii5cX2N0eXBlc190ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9lbGVtZW50dHJlZSI9Ii5cX2VsZW1lbnR0cmVlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tc2kiPSIuXF9tc2kuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tdWx0aXByb2Nlc3NpbmciPSIuXF9tdWx0aXByb2Nlc3NpbmcuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zb2NrZXQiPSIuXF9zb2NrZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zcWxpdGUzIj0iLlxfc3FsaXRlMy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc3NsIj0iLlxfc3NsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbg0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHc5eHBvcGVuDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90ZXN0Y2FwaSI9Ii5cX3Rlc3RjYXBpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfdGtpbnRlciI9Ii5cX3RraW50ZXIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImJ6MiI9Ii5cYnoyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIm1ha2VfdmVyc2lvbmluZm8iPSIuXG1ha2VfdmVyc2lvbmluZm8uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHlleHBhdCI9Ii5ccHlleHBhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uIj0iLlxweXRob24uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbmNvcmUiPSIuXHB5dGhvbmNvcmUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBtYWtlX3ZlcnNpb25pbmZvDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbnciPSIuXHB5dGhvbncuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNlbGVjdCI9Ii5cc2VsZWN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ1bmljb2RlZGF0YSI9Ii5cdW5pY29kZWRhdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInc5eHBvcGVuIj0iLlx3OXhwb3Blbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ3aW5zb3VuZCI9Ii5cd2luc291bmQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotDQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5ZXhwYXQuZHNwIGIvUEMvVkM2L3B5ZXhwYXQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjFjOWVmLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weWV4cGF0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5ZXhwYXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9cHlleHBhdCAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIiBDRkc9InB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweWV4cGF0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIkhBVkVfRVhQQVRfSCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob24uZHNwIGIvUEMvVkM2L3B5dGhvbi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOGI3NzIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob24iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1weXRob24gLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbi5tYWsiIENGRz0icHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob24iDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob24iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uLi5cXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3RhY2s6MHgyMDAwMDAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHl0aG9uX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9uIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweWNvbi5pY28NCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xweXRob24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fZXhlLnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2U5OGQxLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob25jb3JlLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbmNvcmUiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9cHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIiBDRkc9InB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob25jb3JlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMzMuZGxsIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMzX2QuZGxsIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jc3YuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfanNvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX21hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9waWNrbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfc3VicHJvY2Vzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cX3dhcm5pbmdzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGFjY3UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcYWNjZWxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxhc2RsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGFzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhdWRpb29wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxiaXRzZXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjZXZhbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNvZGVjcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjb21waWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cY29uZmlnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxkbF9udC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkdG9hLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxlcnJvcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZmlsZXV0aWxzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZyb3plbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmdXR1cmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0YXJncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0jIEFERCBDUFAgL0QgQlVJTEQ9NDYNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRvcHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxnZXRwYXRocC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdyYW1pbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0ZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxsaXN0bm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxtYXJzaGFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXG1zdmNydG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbXlzbnByaW50Zi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXN0cnRvdWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2V0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccGVlcGhvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5YXJlbmEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHljdHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWZwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweW1hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cmNtcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cnRvZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fbnQucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXRpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccmFuZG9tLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3ltdGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN5c21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblx0aHJlYWQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRyYWNlYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cd2lucmVnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbncuZHNwIGIvUEMvVkM2L3B5dGhvbncuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWMzMjVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob253LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbnciIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9cHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIiBDRkc9InB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob253IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob253Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9udyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob253X2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob253IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cV2luTWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3JlYWRtZS50eHQgYi9QQy9WQzYvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3OGY4NS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyA2LjAgb3IgNS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgcGxhdGZvcm1zLCBlLmcuIFdpbmRvd3MKLTIwMDAgYW5kIFhQLiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi54IG9yIDUueCBhbmQgUGxhdGZvcm0KLVNESyBGZWJydWFyeSAyMDAzIEVkaXRpb24gKENvcmUgU0RLKS4KLShGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL3JlYWRtZS50eHQuKQotCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLmRzdyIgaW4gTVNWQysrLCBzZWxlY3QKLXRoZSBEZWJ1ZyBvciBSZWxlYXNlIHNldHRpbmcgKHVzaW5nIEJ1aWxkIC0+IFNldCBBY3RpdmUgQ29uZmlndXJhdGlvbi4uLiksCi1hbmQgYnVpbGQgdGhlIHByb2plY3RzLgotCi1UaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgotCi0xKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMzMue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCi0KLTIpIHB5dGhvbiAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUsCi0gICAgICAgICAgIHB5dGhvbi5leGUgaW4gUmVsZWFzZSBtb2RlKQotCi0zKSB0aGUgb3RoZXIgc3VicHJvamVjdHMsIGFzIGRlc2lyZWQgb3IgbmVlZGVkIChub3RlOiAgeW91IHByb2JhYmx5IGRvbid0Ci0gICB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MgeW91J3JlIGJ1aWxkaW5nIGFuCi0gICBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yIHNwZWNpZmljYWxseSBtYWtpbmcgY2hhbmdlcwotICAgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQ7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKLQotV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24zM19kLmRsbCwgcHl0aG9uX2QuZXhlLCBweWV4cGF0X2QucHlkLCBhbmQgc28gb24uCi0KLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCi0KLXB5dGhvbmNvcmUKLSAgICAuZGxsIGFuZCAubGliCi1weXRob24KLSAgICAuZXhlCi1weXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94Ci1fbXNpCi0gICAgX21zaS5jLiBZb3UgbmVlZCB0byBpbnN0YWxsIFdpbmRvd3MgSW5zdGFsbGVyIFNESyB0byBidWlsZCB0aGlzIG1vZHVsZS4KLV9zb2NrZXQKLSAgICBzb2NrZXRtb2R1bGUuYwotX3Rlc3RjYXBpCi0gICAgdGVzdHMgb2YgdGhlIFB5dGhvbiBDIEFQSSwgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVRoZSBmb2xsb3dpbmcgc3VicHJvamVjdHMgd2lsbCBnZW5lcmFsbHkgTk9UIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgVGhleQotd3JhcCBjb2RlIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCB0aGUgYmFzZQotcGFja2FnZXMgZmlyc3QgYW5kIHVucGFjayB0aGVtIGludG8gc2libGluZ3Mgb2YgUENidWlsZHMncyBwYXJlbnQKLWRpcmVjdG9yeTsgZm9yIGV4YW1wbGUsIGlmIHlvdXIgUENidWlsZCBpcyAgLi4uLi4uLlxkaXN0XHNyY1xQQ2J1aWxkXCwKLXVucGFjayBpbnRvIG5ldyBzdWJkaXJlY3RvcmllcyBvZiBkaXN0XC4KLQotX3RraW50ZXIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBSZXF1aXJlcyBidWlsZGluZwotICAgIFRjbC9UayBmaXJzdC4gIEZvbGxvd2luZyBhcmUgaW5zdHJ1Y3Rpb25zIGZvciBUY2wvVGsgOC41LjIuCi0KLSAgICBHZXQgc291cmNlCi0gICAgLS0tLS0tLS0tLQotICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNS4yLjEgdGNsOC41LjIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMi4wIHRrOC41LjIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjMuMSB0aXg4LjQuMwotCi0gICAgRGVidWcgQnVpbGQKLSAgICAtLS0tLS0tLS0tLQotICAgIFRvIGJ1aWxkIGRlYnVnIHZlcnNpb24sIGFkZCBERUJVRz0xIHRvIGFsbCBubWFrZSBjYWxsIGJlbGxvdy4KLQotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNiBvbiBXaW4ySykKLSAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICBJZiB5b3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSBzdHJ1Y3QgX3N0YXQ2NCwgeW91IG5lZWQgdG8gYXBwbHkKLSAgICB0Y2w4NTIucGF0Y2ggaW4gdGhpcyBkaXJlY3RvcnkgdG8gZGlzdFx0Y2w4LjUuMlxnZW5lcmljXHRjbC5oLgotCi0gICAgY2QgZGlzdFx0Y2w4LjUuMlx3aW4KLSAgICBydW4gdmN2YXJzMzIuYmF0Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdAotCi0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDI0MjQyICAgUGFzc2VkICAyMzM1OCAgIFNraXBwZWQgODc3ICAgICBGYWlsZWQgIDcKLSAgICAgICAgU291cmNlZCAxMzcgVGVzdCBGaWxlcy4KLSAgICAgICAgRmlsZXMgd2l0aCBmYWlsaW5nIHRlc3RzOiBleGVjLnRlc3QgaHR0cC50ZXN0IGlvLnRlc3QgbWFpbi50ZXN0IHN0cmluZy50ZXN0IHN0cmkKLSAgICAgICAgbmdPYmoudGVzdAotCi0gICAgQnVpbGQgVGsKLSAgICAtLS0tLS0tLQotICAgIGNkIGRpc3RcdGs4LjUuMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC41LjIKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC41LjIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBYWFggSSBoYXZlIG5vIGlkZWEgd2hldGhlciAibm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdCIgcGFzc2VkIG9yCi0gICAgWFhYIGZhaWxlZC4gIEl0IHBvcHBlZCB1cCB0b25zIG9mIGxpdHRsZSB3aW5kb3dzLCBhbmQgZGlkIGxvdHMgb2YKLSAgICBYWFggc3R1ZmYsIGFuZCBub3RoaW5nIGJsZXcgdXAuCi0KLSAgICBCdWlsZCBUaXgKLSAgICAtLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRpeDguNC4zXHdpbgotICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgVENMX01BSk9SPTggVENMX01JTk9SPTUgVENMX1BBVENIPTIgTUFDSElORT1JWDg2IERFQlVHPTAKLSAgICBubWFrZSAtZiBweXRob24ubWFrIFRDTF9NQUpPUj04IFRDTF9NSU5PUj01IFRDTF9QQVRDSD0yIE1BQ0hJTkU9SVg4NiBERUJVRz0wIElOU1RBTExfRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiejIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCi0gICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0KLSAgICBBbmQgcmVxdWlyZXMgYnVpbGRpbmcgYnoyIGZpcnN0LgotCi0gICAgY2QgZGlzdFxiemlwMi0xLjAuNgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLm1zYwotCi0gICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuNlxsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCi0gICAgcHJvamVjdCBsaW5rcyBpbi4KLQotCi1fc3FsaXRlMwotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBTUUxpdGUgbGlicmFyeS4KLSAgICAKLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLSAgICAKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtc291cmNlLTMuMy40Ci0gICAgCi0gICAgVG8gdXNlIHRoZSBleHRlbnNpb24gbW9kdWxlIGluIGEgUHl0aG9uIGJ1aWxkIHRyZWUsIGNvcHkgc3FsaXRlMy5kbGwgaW50bwotICAgIHRoZSBQQy9WQzYgZm9sZGVyLgotCi0KLV9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCi0KLSAgICBHZXQgdGhlIGxhdGVzdCBzb3VyY2UgY29kZSBmb3IgT3BlblNTTCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcKLQotICAgIFlvdSAocHJvYmFibHkpIGRvbid0IHdhbnQgdGhlICJlbmdpbmUiIGNvZGUuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2V0Ci0gICAgICAgIG9wZW5zc2wtZW5naW5lLTAuOS42Zy50YXIuZ3oKLQotICAgIFVucGFjayBpbnRvIHRoZSAiZGlzdCIgZGlyZWN0b3J5LCByZXRhaW5pbmcgdGhlIGZvbGRlciBuYW1lIGZyb20KLSAgICB0aGUgYXJjaGl2ZSAtIGZvciBleGFtcGxlLCB0aGUgbGF0ZXN0IHN0YWJsZSBPcGVuU1NMIHdpbGwgaW5zdGFsbCBhcwotICAgICAgICBkaXN0L29wZW5zc2wtMS4wLjFlCi0KLSAgICBZb3UgbmVlZCB0byB1c2UgdmVyc2lvbiAxLjAuMWUgb2YgT3BlblNTTC4KLQotICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgZnJvbQotICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCi0gICAgZm9yIHg4NiBidWlsZHMuICBQdXQgbmFzbXcuZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4KLSAgICBOb3RlOiByZWNlbnQgcmVsZWFzZXMgb2YgbmFzbSBvbmx5IGhhdmUgbmFzbS5leGUuIEp1c3QgcmVuYW1lIGl0IHRvIAotICAgIG5hc213LmV4ZS4KLQotICAgIFlvdSBjYW4gYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQotICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVwZXJsLwotICAgIGlmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tIAotICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAotICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0KLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDL1ZDNi9idWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCi0KLSAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKLSAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgotCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCi0KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCmRpZmYgLS1naXQgYS9QQy9WQzYvcm1weWMucHkgYi9QQy9WQzYvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDY4MjMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3JtcHljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBSZW1vdmUgYWxsIHRoZSAucHljIGFuZCAucHlvIGZpbGVzIHVuZGVyIC4uL0xpYi4KLQotCi1kZWYgZGVsdHJlZShyb290KToKLSAgICBpbXBvcnQgb3MKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KLQotICAgIG5weWMgPSBucHlvID0gMAotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJvb3QpOgotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGRlbGV0ZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcucHljJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weWMgKz0gMQotICAgICAgICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weW8gKz0gMQotCi0gICAgICAgICAgICBpZiBkZWxldGU6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGpvaW4ocm9vdCwgbmFtZSkpCi0KLSAgICByZXR1cm4gbnB5YywgbnB5bwotCi1ucHljLCBucHlvID0gZGVsdHJlZSgiLi4vLi4vTGliIikKLXByaW50IG5weWMsICIucHljIGRlbGV0ZWQsIiwgbnB5bywgIi5weW8gZGVsZXRlZCIKZGlmZiAtLWdpdCBhL1BDL1ZDNi9ydC5iYXQgYi9QQy9WQzYvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOWVhZGQ3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1AcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotQHJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLUByZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi1AcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1AcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLUByZW0gICAgICBhZnRlciBkZWxldGluZyBhbGwgdGhlIC5weVtjb10gZmlsZXMgcmVhY2hhYmxlIGZyb20gTGliLy4KLUByZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1AcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotQHJlbSB3aGF0ZXZlciByZW1haW5zIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4gIEZvciBleGFtcGxlLAotQHJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLUByZW0gcnVucwotQHJlbSAgICAgcHl0aG9uX2QgLU8gLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLXggdGVzdF90aHJlYWQKLUByZW0gdHdpY2UsIGFuZAotQHJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotQHJlbSBydW5zCi1AcmVtICAgICBweXRob25fZCAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1AcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLUBzZXQgX2V4ZT1weXRob24KLUBzZXQgX3Ftb2RlPW5vCi1Ac2V0IF9kYXNoTz0KLUBnb3RvIENoZWNrT3B0cwotOkFnYWluCi1Ac2hpZnQKLTpDaGVja09wdHMKLUBpZiAiJTEiPT0iLU8iIHNldCBfZGFzaE89LU8KLUBpZiAiJTEiPT0iLU8iIGdvdG8gQWdhaW4KLUBpZiAiJTEiPT0iLXEiIHNldCBfcW1vZGU9eWVzCi1AaWYgIiUxIj09Ii1xIiBnb3RvIEFnYWluCi1AaWYgIiUxIj09Ii1kIiBzZXQgX2V4ZT1weXRob25fZAotQGlmICIlMSI9PSItZCIgZ290byBBZ2FpbgotQGlmICIlX3Ftb2RlJSI9PSJ5ZXMiIGdvdG8gUW1vZGUKLUBlY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLUAlX2V4ZSUgcm1weWMucHkKLSVfZXhlJSAlX2Rhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotQGVjaG8gQWJvdXQgdG8gcnVuIGFnYWluIHdpdGhvdXQgZGVsZXRpbmcgLnB5Yy8ucHlvIGZpcnN0OgotQHBhdXNlCi06UW1vZGUKLSVfZXhlJSAlX2Rhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotQHNldCBfZXhlPQotQHNldCBfcW1vZGU9Ci1Ac2V0IF9kYXNoTz0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9zZWxlY3QuZHNwIGIvUEMvVkM2L3NlbGVjdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTUyOGMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3NlbGVjdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InNlbGVjdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1zZWxlY3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzZWxlY3QubWFrIiBDRkc9InNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAic2VsZWN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9zZWxlY3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzb2NrMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL291dDoiLi9zZWxlY3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvdGNsODUyLnBhdGNoIGIvUEMvVkM2L3RjbDg1Mi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2NzgwYS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdGNsODUyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLS0tIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJRnJpIEp1biAxMyAwMzozNTozOSAyMDA4Ci0rKysgdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlTdW4gSmFuICA0IDE2OjUyOjMwIDIwMDkKLUBAIC0zNjcsNyArMzY3LDcgQEAKLSB0eXBlZGVmIHN0cnVjdCBzdGF0aTY0IFRjbF9TdGF0QnVmOwotICMgICAgICAgICBkZWZpbmUgVENMX0xMX01PRElGSUVSCSJMIgotICMgICAgICBlbHNlIC8qIF9fQk9STEFORENfXyAqLwotLSMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgJiYgIWRlZmluZWQoX01fSVg4NikKLSsjICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwIC8qJiYgIWRlZmluZWQoX01fSVg4NikqLwotIHR5cGVkZWYgc3RydWN0IF9zdGF0aTY0CVRjbF9TdGF0QnVmOwotICMgICAgICAgICBlbHNlCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXQ2NAlUY2xfU3RhdEJ1ZjsKZGlmZiAtLWdpdCBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AgYi9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDRkYjY3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InVuaWNvZGVkYXRhIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiIENGRz0idW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJ1bmljb2RlZGF0YSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGEucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3c5eHBvcGVuLmRzcCBiL1BDL1ZDNi93OXhwb3Blbi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjQwM2MuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3c5eHBvcGVuLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0idzl4cG9wZW4iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9dzl4cG9wZW4gLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIgQ0ZHPSJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdzl4cG9wZW5fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3OXhwb3Blbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3dpbnNvdW5kLmRzcCBiL1BDL1ZDNi93aW5zb3VuZC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDliOWIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3dpbnNvdW5kLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0id2luc291bmQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9d2luc291bmQgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIgQ0ZHPSJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIndpbnNvdW5kIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIHdpbm1tLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3aW5zb3VuZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvVW5pbnN0YWwud3NlIGIvUEMvVlM3LjEvVW5pbnN0YWwud3NlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZkZDMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL1VuaW5zdGFsLndzZQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi1Eb2N1bWVudCBUeXBlOiBXU0UKLWl0ZW06IEdsb2JhbAotICBWZXJzaW9uPTguMTQKLSAgRmxhZ3M9MDAwMDAxMDAKLSAgU3BsaXQ9MTQyMAotICBMYW5ndWFnZXM9NjUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKLSAgQ29weSBEZWZhdWx0PTEKLSAgSmFwYW5lc2UgRm9udCBOYW1lPU1TIEdvdGhpYwotICBKYXBhbmVzZSBGb250IFNpemU9MTAKLSAgU3RhcnQgR3JhZGllbnQ9MCAwIDI1NQotICBFbmQgR3JhZGllbnQ9MCAwIDAKLSAgV2luZG93cyBGbGFncz0wMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMTAwMAotICBNZXNzYWdlIEZvbnQ9TVMgU2FucyBTZXJpZgotICBGb250IFNpemU9OAotICBEaXNrIExhYmVsPUdMQlMKLSAgRGlzayBGaWxlbmFtZT1JTlNUQUxMCi0gIFBhdGNoIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgUGF0Y2ggVGhyZXNob2xkPTIwMAotICBQYXRjaCBNZW1vcnk9NDA5NgotICBQZXItVXNlciBWZXJzaW9uIElEPTEKLSAgQ3J5c3RhbCBGb3JtYXQ9MTAxMTExMDAxMDExMDAwMDAwMTAwMDEwMDEwMDEwMDEKLSAgU3RlcCBWaWV3PSZQcm9wZXJ0aWVzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICBUaGlzIGlzIGEgdmVyYmF0aW0gY29weSBvZiBXaXNlJ3MgVW5pbnN0YWwud3NlLCBhbHRlcmVkIGF0IHRoZSBlbmQgdG8gd3JpdGUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9dW5pbnN0YWxsIGluZm8gdW5kZXIgSEtDVSBpbnN0ZWFkIG9mIEhLTE0gaWYgb3VyIERPQURNSU4gdmFyIGlzIGZhbHNlLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIFN1cHBvcnQgZm9yIHVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JV9MT0dGSUxFX1BBVEhfJQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJVxVTldJU0UuRVhFCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9FWEVfT1NfVFlQRV8KLSAgVmFsdWU9V0lOMzIKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxVTldJU0UzMi5FWEUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVsc2UKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxVTldJU0UuRVhFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCBTdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfTEFORwotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfTEFORwotICBWYWx1ZT0lVU5JTlNUQUxMX0xBTkclXFVOV0lTRS5JTkkKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19DX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5ERVUKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0VfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRFVQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuUFRHCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19GX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5QVEcKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUcKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfR19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1ICi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0hfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVRBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19JX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JVEEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUoKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRBTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREFOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1LCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GSU4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0tfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZJTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVNMCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19MX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JU0wKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU0KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5MRAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTkxECi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1OCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OT1IKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX05fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5PUgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuU1ZFCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19PX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5TVkUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPVAKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkpQTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfUF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSlBOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIHRoZSBhZGQvcmVtb3ZlIG9yIHVuaW5zdGFsbCBpY29uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9SU5TVF9MT0dfUEFUSAotICBWYWx1ZT0lX0xPR0ZJTEVfUEFUSF8lCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB1bmluc3RhbGwgaW5mbyB1bmRlciBIS0xNLiAgVGhpcyBpZi9lbHNlL2VuZCBibG9jayBhZGRlZCBieSBUaW0uCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JUFQUFRJVExFJQotICBWYWx1ZSBOYW1lPURpc3BsYXlOYW1lCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi0gIE5ldyBWYWx1ZT0KLSAgVmFsdWUgTmFtZT1Vbmluc3RhbGxTdHJpbmcKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSBzYW1lLCBidXQgd3JpdGUgdW5kZXIgSEtDVSBpbnN0ZWFkLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVBUFBUSVRMRSUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5TmFtZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotICBOZXcgVmFsdWU9Ci0gIFZhbHVlIE5hbWU9VW5pbnN0YWxsU3RyaW5nCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogQWRkIFByb2dNYW4gSWNvbgotICBHcm91cD0lR1JPVVAlCi0gIEljb24gTmFtZT1Vbmluc3RhbGwgJUFQUFRJVExFJQotICBDb21tYW5kIExpbmU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTExMTAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MgotICBpdGVtOiBLZXkKLSAgICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgICBOZXcgVmFsdWU9JUNPTVBBTlklCi0gICAgVmFsdWUgTmFtZT1SZWdDb21wYW55Ci0gICAgUm9vdD0yCi0gIGVuZAotICBpdGVtOiBLZXkKLSAgICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgICBOZXcgVmFsdWU9JU5BTUUlCi0gICAgVmFsdWUgTmFtZT1SZWdPd25lcgotICAgIFJvb3Q9MgotICBlbmQKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvaiBiL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzU5ZDg4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfY3R5cGVzIg0KLQlQcm9qZWN0R1VJRD0ie0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJGQUxTRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJGQUxTRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyAvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsgL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jIj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQlDb21tYW5kTGluZT0iYW1kNjRfbWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90Ow0KLSINCi0JCQkJCU91dHB1dHM9IiZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlOGEyYy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfSINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmI5ZDkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0iDQotCVNjY1Byb2plY3ROYW1lPSJfZWxlbWVudHRyZWUiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19tc2kudmNwcm9qIGIvUEMvVlM3LjEvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZmQ0NDcuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fSINCi0JU2NjUHJvamVjdE5hbWU9Il9tc2kiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2lfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2lfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiBidWZmZXJvdmVyZmxvd1UubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIGJ1ZmZlcm92ZXJmbG93VS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzcuMS9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlZDhlNC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NvY2tldCINCi0JU2NjUHJvamVjdE5hbWU9Il9zb2NrZXQiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2Q5OTEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9InsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX3NxbGl0ZTMiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlM19kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlM19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XGlhNjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcYW1kNjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3NsLm1hayBiL1BDL1ZTNy4xL19zc2wubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDc2YTYzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zc2wubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotRVhUUkFfTElCUz0KLQotIUlGREVGIERFQlVHCi1TVUZGSVg9X2QucHlkCi1URU1QPXg4Ni10ZW1wLWRlYnVnLwotQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMi5kYmcKLSFFTFNFCi1TVUZGSVg9LnB5ZAotVEVNUD14ODYtdGVtcC1yZWxlYXNlLwotQ0ZMQUdTPS9PeCAvTUQgL0xEIC9EV0lOMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIKLSFFTkRJRgotCi1JTkNMVURFUz0tSSAuLi8uLi9JbmNsdWRlIC1JIC4uLy4uL1BDIC1JICQoU1NMX0RJUikvaW5jMzIKLQotU1NMX0xJQlM9Z2RpMzIubGliIHdzb2NrMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9MSUJQQVRIOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWIKLVNTTF9TT1VSQ0U9Li4vLi4vTW9kdWxlcy9fc3NsLmMgCi0KLUhBU0hfTElCUz1nZGkzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliCi1IQVNIX1NPVVJDRT0uLi8uLi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIAotCi1hbGw6IF9zc2wkKFNVRkZJWCkgX2hhc2hsaWIkKFNVRkZJWCkKLQotIyBTcGxpdCBjb21waWxlL2xpbmsgaW50byB0d28gc3RlcHMgdG8gYmV0dGVyIHN1cHBvcnQgVlNFeHRDb21wCi1fc3NsJChTVUZGSVgpOiAkKFNTTF9TT1VSQ0UpICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAkKFNTTF9MSUJfRElSKS9zc2xlYXkzMi5saWIgLi4vLi4vUEMvKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0JQGlmIG5vdCBleGlzdCAiJChURU1QKS9fc3NsLy4iIG1rZGlyICIkKFRFTVApL19zc2wiCi0JY2wgL25vbG9nbyAvYyAkKFNTTF9TT1VSQ0UpICQoQ0ZMQUdTKSAvRm8kKFRFTVApXF9zc2xcJCoub2JqICQoSU5DTFVERVMpCi0JbGluayAvbm9sb2dvIEA8PAotICAgICAgICAgICAgIC9kbGwgL291dDpfc3NsJChTVUZGSVgpICQoVEVNUClcX3NzbFwkKi5vYmogJChTU0xfTElCUykgJChFWFRSQV9MSUJTKQotPDwKLQotX2hhc2hsaWIkKFNVRkZJWCk6ICQoSEFTSF9TT1VSQ0UpICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAuLi8uLi9QQy8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLSAgICBAaWYgbm90IGV4aXN0ICIkKFRFTVApL19oYXNobGliLy4iIG1rZGlyICIkKFRFTVApL19oYXNobGliIgotICAgIGNsIC9ub2xvZ28gL2MgJChIQVNIX1NPVVJDRSkgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAvRm8kKFRFTVApXF9oYXNobGliXCQqLm9iaiAkKElOQ0xVREVTKSAKLSAgICBsaW5rIC9ub2xvZ28gQDw8Ci0JL2RsbCAvb3V0Ol9oYXNobGliJChTVUZGSVgpICQoSEFTSF9MSUJTKSAkKEVYVFJBX0xJQlMpICQoVEVNUClcX2hhc2hsaWJcJCoub2JqCi08PApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NzbC52Y3Byb2ogYi9QQy9WUzcuMS9fc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkNjVmZS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc3NsIg0KLQlSb290TmFtZXNwYWNlPSJfc3NsIg0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsX2QucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3NsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hhc2hvcGVuc3NsLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qIGIvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5Nzg0Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfdGVzdGNhcGkiDQotCVNjY1Byb2plY3ROYW1lPSJfdGVzdGNhcGkiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzM0MTYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JU2NjUHJvamVjdE5hbWU9Il90a2ludGVyIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXC4uXC4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlcl9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXJfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlcl9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0IGIvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOWFjZjEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBUcnkgdG8gZmluZCB0aGUgQU1ENjQgYXNzZW1ibGVyIGFuZCBjYWxsIGl0IHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KLQotc2V0IE1MRVhFPU1pY3Jvc29mdCBQbGF0Zm9ybSBTREtcQmluXFdpbjY0XHg4NlxBTUQ2NFxtbDY0LkVYRQotCi1yZW0gRm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2VlIGFsc28KLXJlbSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvd2luNjQvd2luNjQvd293NjRfaW1wbGVtZW50YXRpb25fZGV0YWlscy5hc3AKLQotaWYgZXhpc3QgIiVQcm9ncmFtRmlsZXMlXCVNTEVYRSUiICgKLSAgc2V0IE1MNjQ9IiVQcm9ncmFtRmlsZXMlXCVNTEVYRSUiCi0pIGVsc2UgaWYgZXhpc3QgIiVQcm9ncmFtVzY0MzIlXCVNTEVYRSUiICgKLSAgc2V0IE1MNjQ9IiVQcm9ncmFtVzY0MzIlXCVNTEVYRSUiCi0pIGVsc2UgKAotICBzZXQgTUw2ND1tbDY0LmV4ZQotKQotCi0lTUw2NCUgJSoKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQgYi9QQy9WUzcuMS9idWlsZF9zc2wuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmJlM2MwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1pZiAiJTEiID09ICJSZWxlYXNlQU1ENjQiIGNhbGwgIiVNU1NkayVcU2V0RW52IiAvWFA2NCAvUkVUQUlMCi0KLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgKSBFTFNFICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMgotCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9idWlsZF9zc2wucHkgYi9QQy9WUzcuMS9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWY0ZTMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQ0J1aWxkIGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBfc3NsIGFuZCBfaGFzaGxpYgotIyBQeXRob24gZXh0ZW5zaW9ucyB3aXRob3V0IGludGVydmVudGlvbi4KLQotaW1wb3J0IG9zLCBzeXMsIHJlCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKHBlcmwgKyAnIC1lICJ1c2UgV2luMzI7IicpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50ICJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQgIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IgotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50ICIgIiwgcAotICAgICAgICBwcmludCAiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIgotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIKLSAgICBwcmludCAiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIKLSAgICBwcmludCAiVGhlIFB5dGhvbiBTU0wgbW9kdWxlIHdhcyBub3QgYnVpbHQiCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQgIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkKLSAgICBlbHNlOgotICAgICAgICBwcmludCAiQ291bGQgbm90IGZpbmQgYW4gU1NMIGRpcmVjdG9yeSBpbiAnJXMnIiAlIChzb3VyY2VzLCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBtYWluKCk6Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX21hc20iCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19tYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXGQzMi5tYWsiCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZUl0YW5pdW0iOgotICAgICAgICBhcmNoID0gImlhNjQiCi0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0SSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGkiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgICAgIG9zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX0lUQU5JVU0iCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZUFNRDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGRlYnVnPUZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgICAgICBvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19PUFRFUk9OIgotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIHByaW50ICJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAyIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG9sZF9jZCA9IG9zLmdldGN3ZCgpCi0gICAgdHJ5OgotICAgICAgICBvcy5jaGRpcihzc2xfZGlyKQotICAgICAgICAjIElmIHRoZSBzc2wgbWFrZWZpbGVzIGRvIG5vdCBleGlzdCwgd2UgaW52b2tlIFBlcmwgdG8gZ2VuZXJhdGUgdGhlbS4KLSAgICAgICAgIyBEdWUgdG8gYSBidWcgaW4gdGhpcyBzY3JpcHQsIHRoZSBtYWtlZmlsZSBzb21ldGltZXMgZW5kZWQgdXAgZW1wdHkKLSAgICAgICAgIyBGb3JjZSBhIHJlZ2VuZXJhdGlvbiBpZiBpdCBpcy4KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKSBvciBvcy5wYXRoLmdldHNpemUobWFrZWZpbGUpPT0wOgotICAgICAgICAgICAgcHJpbnQgIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0gPSBvcy5wYXRoLmRpcm5hbWUocGVybCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgICAgICAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQotICAgICAgICAgICAgaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgICAgICMgdGhlIGRvX21hc20gc2NyaXB0IGluIG9wZW5zc2wgZG9lc24ndCBnZW5lcmF0ZSBhIGRlYnVnCi0gICAgICAgICAgICAgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQotICAgICAgICBwcmludCAiRXhlY3V0aW5nIHNzbCBtYWtlZmlsZXM6IiwgbWFrZUNvbW1hbmQKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50ICJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIKLSAgICAgICAgICAgIHByaW50IHJjCi0gICAgICAgICAgICBzeXMuZXhpdChyYykKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy5jaGRpcihvbGRfY2QpCi0gICAgIyBBbmQgZmluYWxseSwgd2UgY2FuIGJ1aWxkIHRoZSBfc3NsIG1vZHVsZSBpdHNlbGYgZm9yIFB5dGhvbi4KLSAgICBkZWZzID0gIlNTTF9ESVI9XCIlc1wiIiAlIChzc2xfZGlyLCkKLSAgICBpZiBkZWJ1ZzoKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiICIgKyAiREVCVUc9MSIKLSAgICBpZiBhcmNoIGluICgnYW1kNjQnLCAnaWE2NCcpOgotICAgICAgICBkZWZzID0gZGVmcyArICIgRVhUUkFfQ0ZMQUdTPS9HUy0gRVhUUkFfTElCUz1idWZmZXJvdmVyZmxvd1UubGliIgotICAgIG1ha2VDb21tYW5kID0gJ25tYWtlIC9ub2xvZ28gLWYgX3NzbC5tYWsgJyArIGRlZnMgKyAiICIgKyBtYWtlX2ZsYWdzCi0gICAgcHJpbnQgIkV4ZWN1dGluZzoiLCBtYWtlQ29tbWFuZAotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J6Mi52Y3Byb2ogYi9QQy9WUzcuMS9iejIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAwNWExLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9ImJ6MiINCi0JUm9vdE5hbWVzcGFjZT0iYnoyIg0KLQlTY2NQcm9qZWN0TmFtZT0iYnoyIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Ml9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9Im1zdmNydCxsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejJfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejJfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYw0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2RiLmJ1aWxkIGIvUEMvVlM3LjEvZGIuYnVpbGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhODdmNzQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvZGIuYnVpbGQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0PgotIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXNjcmlwdGlvbj0iQnVpbGQgYWxsIHRhcmdldHMuIj4KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIj4KLSAgICAgPHByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9ImRiX3N0YXRpYy52Y3Byb2oiIC8+Ci0gICAgIDwvcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvZmllbGQzLnB5IGIvUEMvVlM3LjEvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2YyNGNhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQgIiAqIEZvciAlcywiICUgc3RyaW5nCi1wcmludCAiICogUFlfTUlDUk9fVkVSU0lPTiA9ICVkIiAlIG1pY3JvCi1wcmludCAiICogUFlfUkVMRUFTRV9MRVZFTCA9ICVyID0gJXMiICUgKGxldmVsLCBoZXgobGV2ZWxudW0pKQotcHJpbnQgIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsCi1wcmludCAiICoiCi0KLWZpZWxkMyA9IG1pY3JvICogMTAwMCArIGxldmVsbnVtICogMTAgKyBzZXJpYWwKLQotcHJpbnQgIiAqIGFuZCAlZCoxMDAwICsgJWQqMTAgKyAlZCA9ICVkIiAlIChtaWNybywgbGV2ZWxudW0sIHNlcmlhbCwgZmllbGQzKQotcHJpbnQgIiAqLyIKLXByaW50ICIjZGVmaW5lIEZJRUxEMyIsIGZpZWxkMwpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcCBiL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NzVlMTkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWEyYjY2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotLyogVGhpcyBmaWxlIGNyZWF0ZXMgdGhlIGdldGJ1aWxkaW5mby5vIG9iamVjdCwgYnkgZmlyc3QKLSAgIGludm9raW5nIHN1YndjcmV2LmV4ZSAoaWYgZm91bmQpLCBhbmQgdGhlbiBpbnZva2luZyBjbC5leGUuCi0gICBBcyBhIHNpZGUgZWZmZWN0LCBpdCBtaWdodCBnZW5lcmF0ZSBQQ1xWUzcuMVxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotKi8KLQotaW50IG1ha2VfYnVpbGRpbmZvMigpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFs1MDBdOwotICAgIERXT1JEIHR5cGUsIHNpemU7Ci0gICAgaWYgKF9zdGF0KCIuc3ZuIiwgJnN0KSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIC8qIEFsbG93IHN1cHByZXNzaW9uIG9mIHN1YndjcmV2LmV4ZSBpbnZvY2F0aW9uIGlmIGEgbm9fc3Vid2NyZXYgZmlsZSBpcyBwcmVzZW50LiAqLwotICAgIGlmIChfc3RhdCgibm9fc3Vid2NyZXYiLCAmc3QpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChSZWdPcGVuS2V5KEhLRVlfTE9DQUxfTUFDSElORSwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MgJiYKLSAgICAgICAgUmVnT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIC8qIFRvcnRvaXNlIG5vdCBpbnN0YWxsZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29tbWFuZFswXSA9ICciJzsgIC8qIHF1b3RlIHRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlICovCi0gICAgc2l6ZSA9IHNpemVvZihjb21tYW5kKSAtIDE7Ci0gICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoVG9ydG9pc2UsICJEaXJlY3RvcnkiLCAwLCAmdHlwZSwgY29tbWFuZCsxLCAmc2l6ZSkgIT0gRVJST1JfU1VDQ0VTUyB8fAotICAgICAgICB0eXBlICE9IFJFR19TWikKLSAgICAgICAgLyogUmVnaXN0cnkgY29ycnVwdGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdChjb21tYW5kLCAiYmluXFxzdWJ3Y3Jldi5leGUiKTsKLSAgICBpZiAoX3N0YXQoY29tbWFuZCsxLCAmc3QpIDwgMCkKLSAgICAgICAgLyogc3Vid2NyZXYuZXhlIG5vdCBwYXJ0IG9mIHRoZSByZWxlYXNlICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdChjb21tYW5kLCAiXCIgLi5cXC4uIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKHN5c3RlbShjb21tYW5kKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCi17Ci0gICAgY2hhciBjb21tYW5kWzUwMF0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgaW50IGRvX3VubGluaywgcmVzdWx0OwotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBpZiAoKGRvX3VubGluayA9IG1ha2VfYnVpbGRpbmZvMigpKSkKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdChjb21tYW5kLCAiIC1Gb2dldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKQotICAgICAgICB1bmxpbmsoImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGM4YTVkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ibWFrZV9idWlsZGluZm8iDQotCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX2J1aWxkaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV9idWlsZGluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iNCINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1ha2VfYnVpbGRpbmZvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmZhNGViLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlSb290TmFtZXNwYWNlPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlTY2NQcm9qZWN0TmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfdmVyc2lvbmluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7Li5cLi5cUENccHl0aG9ubnRfcmMuaA0KLSINCi0JCQkJT3V0cHV0cz0iLi5cLi5cUENccHl0aG9ubnRfcmMuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiQoVGFyZ2V0RmlsZU5hbWUpICZndDsgLi5cLi5cUENccHl0aG9uX250LmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Ii5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7Li5cLi5cUENccHl0aG9ubnRfcmNfZC5oDQotIg0KLQkJCQlPdXRwdXRzPSIuLlwuLlxQQ1xweXRob25udF9yY19kLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9tYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mb19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiQoVGFyZ2V0RmlsZU5hbWUpICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9wY2J1aWxkLnNsbiBiL1BDL1ZTNy4xL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjBmMTljLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDguMDANCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIns4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSA9IHtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfdmVyc2lvbmluZm8iLCAibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweWV4cGF0IiwgInB5ZXhwYXQudmNwcm9qIiwgIns3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob25jb3JlIiwgInB5dGhvbmNvcmUudmNwcm9qIiwgIntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSA9IHtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSA9IHtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjcHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgIns5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmNwcm9qIiwgIns1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2VsZW1lbnR0cmVlIiwgIl9lbGVtZW50dHJlZS52Y3Byb2oiLCAiezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXNpIiwgIl9tc2kudmNwcm9qIiwgInsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlcyIsICJfY3R5cGVzLnZjcHJvaiIsICJ7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXNfdGVzdCIsICJfY3R5cGVzX3Rlc3QudmNwcm9qIiwgIns4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSA9IHtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NxbGl0ZTMiLCAiX3NxbGl0ZTMudmNwcm9qIiwgInsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvbikgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWcgPSBEZWJ1Zw0KLQkJUmVsZWFzZSA9IFJlbGVhc2UNCi0JCVJlbGVhc2VBTUQ2NCA9IFJlbGVhc2VBTUQ2NA0KLQkJUmVsZWFzZUl0YW5pdW0gPSBSZWxlYXNlSXRhbml1bQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb24pID0gcG9zdFNvbHV0aW9uDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcG9zdFNvbHV0aW9uDQotCQkuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jID0gLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLQkJcmVhZG1lLnR4dCA9IHJlYWRtZS50eHQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKEV4dGVuc2liaWxpdHlHbG9iYWxzKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUFkZElucykgPSBwb3N0U29sdXRpb24NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLUVuZEdsb2JhbA0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qIGIvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNzM5ZmEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5ZXhwYXQiDQotCVNjY1Byb2plY3ROYW1lPSJweWV4cGF0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXRfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OICAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHlleHBhdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkIGIvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzExMDFkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi5idWlsZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3Q+Ci0gPHRhcmdldCBuYW1lPSJhbGwiIGRlc2NyaXB0aW9uPSJCdWlsZCBhbGwgdGFyZ2V0cy4iPgotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiPgotICAgICA8cHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0ibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiIC8+Ci0gICAgIDwvcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotICAgPGV4ZWMgcHJvZ3JhbT0ibWFrZV92ZXJzaW9uaW5mbyIgb3V0cHV0PSJweXRob25udF9yYy5oIiAvPgotCi0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSIgc29sdXRpb25maWxlPSJwY2J1aWxkLnNsbiI+Ci0gICAgIDxleGNsdWRlcHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3RraW50ZXIudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9ImJ6Mi52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3NxbGl0ZTMudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il9zc2wudmNwcm9qIiAvPgotICAgICA8L2V4Y2x1ZGVwcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24uaXNzIGIvUEMvVlM3LjEvcHl0aG9uLmlzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2YTNjMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24uaXNzCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLTsgU2NyaXB0IGdlbmVyYXRlZCBieSB0aGUgSW5ubyBTZXR1cCBTY3JpcHQgV2l6YXJkLgotOyBTRUUgVEhFIERPQ1VNRU5UQVRJT04gRk9SIERFVEFJTFMgT04gQ1JFQVRJTkcgSU5OTyBTRVRVUCBTQ1JJUFQgRklMRVMhCi0KLTsgVGhpcyBpcyB0aGUgd2hvbGUgYmFsbCBvZiB3YXggZm9yIGFuIElubm8gaW5zdGFsbGVyIGZvciBQeXRob24uCi07IFRvIHVzZSwgZG93bmxvYWQgSW5ubyBTZXR1cCBmcm9tIGh0dHA6Ly93d3cuanJzb2Z0d2FyZS5vcmcvaXNkbC5odG0vLAotOyBpbnN0YWxsIGl0LCBhbmQgZG91YmxlLWNsaWNrIG9uIHRoaXMgZmlsZS4gIFRoYXQgbGF1bmNoZXMgdGhlIElubm8KLTsgc2NyaXB0IGNvbXBpbGVyLiAgVGhlIEdVSSBpcyBleHRlbWVseSBzaW1wbGUsIGFuZCBoYXMgb25seSBvbmUgYnV0dG9uCi07IHlvdSBtYXkgbm90IHJlY29nbml6ZSBpbnN0YW50bHk6ICBjbGljayBpdC4gIFlvdSdyZSBkb25lLiAgSXQgYnVpbGRzCi07IHRoZSBpbnN0YWxsZXIgaW50byBQQ0J1aWxkL1B5dGhvbi0yLjJhMS5leGUuICBTaXplIGFuZCBzcGVlZCBvZiB0aGUKLTsgaW5zdGFsbGVyIGFyZSBjb21wZXRpdGl2ZSB3aXRoIHRoZSBXaXNlIGluc3RhbGxlcjsgSW5ubyB1bmluc3RhbGwKLTsgc2VlbXMgbXVjaCBxdWlja2VyIHRoYW4gV2lzZSAoYnV0IGFsc28gZmVlYmxlciwgYW5kIHRoZSB1bmluc3RhbGwKLTsgbG9nIGlzIGluIHNvbWUgdW4oaHVtYW4pcmVhZGFibGUgYmluYXJ5IGZvcm1hdCkuCi07Ci07IFdoYXQncyBEb25lCi07IC0tLS0tLS0tLS0tCi07IEFsbCB0aGUgdXN1YWwgV2luZG93cyBQeXRob24gZmlsZXMgYXJlIGluc3RhbGxlZCBieSB0aGlzIG5vdy4KLTsgQWxsIHRoZSB1c3VhbCBXaW5kb3dzIFB5dGhvbiBTdGFydCBtZW51IGVudHJpZXMgYXJlIGNyZWF0ZWQgYW5kCi07IHdvcmsgZmluZS4KLTsgLnB5LCAucHl3LCAucHljIGFuZCAucHlvIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQuCi07ICAgICBQUk9CTEVNOiAgSW5ubyB1bmluc3RhbGwgZG9lcyBub3QgcmVzdG9yZSB0aGVpciBwcmV2aW91cyByZWdpc3RyeQotOyAgICAgICAgICAgICAgIGFzc29jaWF0aW9ucyAoaWYgYW55KS4gIFdpc2UgZGlkLiAgVGhpcyB3aWxsIG1ha2UgbGlmZQotOyAgICAgICAgICAgICAgIGRpZmZpY3VsdCBmb3IgYWxwaGEgKGV0YykgdGVzdGVycy4KLTsgVGhlIFB5dGhvbiBpbnN0YWxsIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgZm9yICJ0eXBpY2FsIiB1c2VzLgotOwotOyBXaGF0J3MgTm90IERvbmUKLTsgLS0tLS0tLS0tLS0tLS0tCi07IE5vbmUgb2YgIk1hcmsgSGFtbW9uZCdzIiByZWdpc3RyeSBlbnRyaWVzIGFyZSB3cml0dGVuLgotOyBObyBpbnN0YWxsYXRpb24gb2YgZmlsZXMgaXMgZG9uZSBpbnRvIHRoZSBzeXN0ZW0gZGlyOgotOyAgICAgVGhlIE1TIERMTHMgYXJlbid0IGhhbmRsZWQgYXQgYWxsIGJ5IHRoaXMgeWV0LgotOyAgICAgUHl0aG9uMjIuZGxsIGlzIHVucGFja2VkIGludG8gdGhlIG1haW4gUHl0aG9uIGRpci4KLTsKLTsgSW5ubyBjYW4ndCBkbyBkaWZmZXJlbnQgdGhpbmdzIG9uIE5ULzIwMDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHVzZXIKLTsgaGFzIEFkbWluIHByaXZpbGVnZXMsIHNvIEkgZG9uJ3Qga25vdyBob3cgdG8gInNvbHZlIiBlaXRoZXIgb2YgdGhvc2UsCi07IHNob3J0IG9mIGJ1aWxkaW5nIHR3byBpbnN0YWxsZXJzIChvbmUgKnJlcXVpcmluZyogQWRtaW4gcHJpdnMsIHRoZQotOyBvdGhlciBub3QgZG9pbmcgYW55dGhpbmcgdGhhdCBuZWVkcyBBZG1pbiBwcml2cykuCi07Ci07IElubm8gaGFzIG5vIGNvbmNlcHQgb2YgdmFyaWFibGVzLCBzbyBsb3RzIG9mIGxpbmVzIGluIHRoaXMgZmlsZSBuZWVkCi07IHRvIGJlIGZpZGRsZWQgYnkgaGFuZCBhY3Jvc3MgcmVsZWFzZXMuICBTaW1wbGVzdCB3YXkgb3V0OiAgc3RpY2sgdGhpcwotOyBmaWxlIGluIGEgZ2lhbnQgdHJpcGxlLXF1b3RlZCByLXN0cmluZyAobm90ZSB0aGF0IGJhY2tzbGFzaGVzIGFyZQotOyByZXF1aXJlZCBhbGwgb3ZlciB0aGUgcGxhY2UgaGVyZSAtLSBmb3J3YXJkIHNsYXNoZXMgRE9OJ1QgV09SSyBpbgotOyBJbm5vKSwgYW5kIHVzZSAlKHlhZGRhKXMgc3RyaW5nIGludGVycG9sYXRpb24gdG8gZG8gc3Vic3RpdHV0aW9uczsgaS5lLiwKLTsgd3JpdGUgYSB2ZXJ5IHNpbXBsZSBQeXRob24gcHJvZ3JhbSB0byAqcHJvZHVjZSogdGhpcyBzY3JpcHQuCi0KLVtTZXR1cF0KLUFwcE5hbWU9UHl0aG9uIGFuZCBjb21iaW5lZCBXaW4zMiBFeHRlbnNpb25zCi1BcHBWZXJOYW1lPVB5dGhvbiAyLjIuMiBhbmQgY29tYmluZWQgV2luMzIgRXh0ZW5zaW9ucyAxNTAKLUFwcElkPVB5dGhvbiAyLjIuMi4xNTAKLUFwcFZlcnNpb249Mi4yLjIuMTUwCi1BcHBDb3B5cmlnaHQ9UHl0aG9uIGlzIENvcHlyaWdodCCpIDIwMDEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uIFdpbjMyIEV4dGVuc2lvbnMgYXJlIENvcHlyaWdodCCpIDE5OTYtMjAwMSBHcmVnIFN0ZWluIGFuZCBNYXJrIEhhbW1vbmQuCi0KLTsgRGVmYXVsdCBpbnN0YWxsIGRpcjsgdmFsdWUgb2Yge2FwcH0gbGF0ZXIgKHVubGVzcyB1c2VyIG92ZXJyaWRlcykuCi07IHtzZH0gPSBzeXN0ZW0gcm9vdCBkcml2ZSwgcHJvYmFibHkgIkM6Ii4KLURlZmF1bHREaXJOYW1lPXtzZH1cUHl0aG9uMjIKLTtEZWZhdWx0RGlyTmFtZT17cGZ9XFB5dGhvbgotCi07IFN0YXJ0IG1lbnUgZm9sZGVyIG5hbWU7IHZhbHVlIG9mIHtncm91cH0gbGF0ZXIgKHVubGVzcyB1c2VyIG92ZXJyaWRlcykuCi1EZWZhdWx0R3JvdXBOYW1lPVB5dGhvbiAyLjIKLQotOyBQb2ludCBTb3VyY2VEaXIgdG8gb25lIGFib3ZlIFBDQnVpbGQgPSBzcmMuCi07IG1lYW5zIHRoaXMgc2NyaXB0IGNhbiBydW4gdW5jaGFuZ2VkIGZyb20gYW55b25lJ3MgQ1ZTIHRyZWUsIG5vIG1hdHRlcgotOyB3aGF0IHRoZXkgY2FsbGVkIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3JpZXMuCi1Tb3VyY2VEaXI9LgotT3V0cHV0RGlyPS4uCi1PdXRwdXRCYXNlRmlsZW5hbWU9UHl0aG9uLTIuMi4yLVdpbjMyLTE1MC1TZXR1cAotCi1BcHBQdWJsaXNoZXI9UHl0aG9uTGFicyBhdCBEaWdpdGFsIENyZWF0aW9ucwotQXBwUHVibGlzaGVyVVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotQXBwU3VwcG9ydFVSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLUFwcFVwZGF0ZXNVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi0KLUFsd2F5c0NyZWF0ZVVuaW5zdGFsbEljb249dHJ1ZQotQ2hhbmdlc0Fzc29jaWF0aW9ucz10cnVlCi1Vbmluc3RhbGxMb2dNb2RlPW5ldwotQWxsb3dOb0ljb25zPXRydWUKLUFkbWluUHJpdmlsZWdlc1JlcXVpcmVkPXRydWUKLVVuaW5zdGFsbERpc3BsYXlJY29uPXthcHB9XHB5Yy5pY28KLVdpemFyZERlYnVnPWZhbHNlCi0KLTsgVGhlIGZld2VyIHNjcmVlbnMgdGhlIGJldHRlcjsgbGVhdmUgdGhlc2UgY29tbWVudGVkLgotCi1Db21wcmVzc2lvbj1iemlwCi1JbmZvQmVmb3JlRmlsZT1MSUNFTlNFLnR4dAotO0luZm9CZWZvcmVGaWxlPU1pc2NcTkVXUwotCi07IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgeW91ciBpbnN0YWxsYXRpb24gdG8gcnVuIG9uIE5UIDMuNTEgdG9vLgotOyBNaW5WZXJzaW9uPTQsMy41MQotCi1bVHlwZXNdCi1OYW1lOiBub3JtYWw7IERlc2NyaXB0aW9uOiBTZWxlY3QgZGVzaXJlZCBjb21wb25lbnRzOyBGbGFnczogaXNjdXN0b20KLQotW0NvbXBvbmVudHNdCi1OYW1lOiBtYWluOyBEZXNjcmlwdGlvbjogUHl0aG9uIGFuZCBXaW4zMiBFeHRlbnNpb25zOyBUeXBlczogbm9ybWFsCi1OYW1lOiBkb2NzOyBEZXNjcmlwdGlvbjogUHl0aG9uIGRvY3VtZW50YXRpb24gKEhUTUwpOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0azsgRGVzY3JpcHRpb246IFRDTC9USywgdGtpbnRlciwgYW5kIElkbGU7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRvb2xzOyBEZXNjcmlwdGlvbjogUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHNcKTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdGVzdDsgRGVzY3JpcHRpb246IFB5dGhvbiB0ZXN0IHN1aXRlIChMaWJcdGVzdFwpOyBUeXBlczogbm9ybWFsCi0KLVtUYXNrc10KLU5hbWU6IGV4dGVuc2lvbnM7IERlc2NyaXB0aW9uOiBSZWdpc3RlciBmaWxlIGFzc29jaWF0aW9ucyAoLnB5LCAucHl3LCAucHljLCAucHlvKTsgQ29tcG9uZW50czogbWFpbjsgQ2hlY2s6IElzQWRtaW5Mb2dnZWRPbgotCi1bRmlsZXNdCi07IENhdXRpb246ICBVc2luZyBmb3J3YXJkIHNsYXNoZXMgaW5zdGVhZCBzY3Jld3MgdXAgaW4gYW1hemluZyB3YXlzLgotOyBVbmtub3duOiAgQnkgdGhlIHRpbWUgQ29tcG9uZW50cyAoYW5kIG90aGVyIGF0dHJzKSBhcmUgYWRkZWQgdG8gdGhlc2UgbGluZXMsIHRoZXkncmUKLTsgZ29pbmcgdG8gZ2V0IGF3ZnVsbHkgbG9uZy4gIEJ1dCBkb24ndCBzZWUgYSB3YXkgdG8gY29udGludWUgbG9naWNhbCBsaW5lcyBhY3Jvc3MKLTsgcGh5c2ljYWwgbGluZXMuCi0KLVNvdXJjZTogTElDRU5TRS50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6IFJFQURNRS50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6IE5ld3MudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiAqLmljbzsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBweXRob24uZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBweXRob253LmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogdzl4cG9wZW4uZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi0KLVNvdXJjZTogRExMc1x0Y2w4My5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IERMTHNcdGs4My5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IHRjbFwqLio7IERlc3REaXI6IHthcHB9XHRjbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IHN5c2RpclxweXRob24yMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiBzaGFyZWRmaWxlIHJlc3RhcnRyZXBsYWNlCi1Tb3VyY2U6IHN5c2RpclxQeVdpblR5cGVzMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVzdGFydHJlcGxhY2Ugc2hhcmVkZmlsZQotU291cmNlOiBzeXNkaXJccHl0aG9uY29tMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVzdGFydHJlcGxhY2Ugc2hhcmVkZmlsZQotCi1Tb3VyY2U6IERMTHNcX3NvY2tldC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc29ja2V0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3NyZS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc3JlLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3N5bXRhYmxlLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zeW10YWJsZS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF90ZXN0Y2FwaS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfdGVzdGNhcGkubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfdGtpbnRlci5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IGxpYnNcX3RraW50ZXIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotCi1Tb3VyY2U6IERMTHNcbW1hcC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xtbWFwLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNccGFyc2VyLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHBhcnNlci5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHB5ZXhwYXQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNccHlleHBhdC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHNlbGVjdC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xzZWxlY3QubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x1bmljb2RlZGF0YS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x1bmljb2RlZGF0YS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHdpbnJlZy5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x3aW5yZWcubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x3aW5zb3VuZC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x3aW5zb3VuZC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHpsaWIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcemxpYi5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBsaWJzXHB5dGhvbjIyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcZXhwYXQuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLQotCi1Tb3VyY2U6IExpYlwqLnB5OyBEZXN0RGlyOiB7YXBwfVxMaWI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogTGliXGNvbXBpbGVyXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGNvbXBpbGVyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGRpc3R1dGlsc1wqLio7IERlc3REaXI6IHthcHB9XExpYlxkaXN0dXRpbHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZW1haWxcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZW1haWw7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZW5jb2RpbmdzXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGVuY29kaW5nczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxob3RzaG90XCouKjsgRGVzdERpcjoge2FwcH1cTGliXGhvdHNob3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcbGliLW9sZFwqLio7IERlc3REaXI6IHthcHB9XExpYlxsaWItb2xkOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHhtbFwqLio7IERlc3REaXI6IHthcHB9XExpYlx4bWw7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcaG90c2hvdFwqLio7IERlc3REaXI6IHthcHB9XExpYlxob3RzaG90OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHRlc3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcdGVzdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGVzdDsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx0a2ludGVyXCoucHk7IERlc3REaXI6IHthcHB9XExpYlx0a2ludGVyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcUkVBRE1FLnR4dDsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IGRvY3MKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb207IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dFwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBpbmNsdWRlXCouaDsgRGVzdERpcjoge2FwcH1caW5jbHVkZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IFRvb2xzXGlkbGVcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xpZGxlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogVG9vbHNccHluY2hlXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNccHluY2hlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHNjcmlwdHNcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xTY3JpcHRzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHdlYmNoZWNrZXJcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHZlcnNpb25jaGVja1wqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVjazsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IERvY1wqLio7IERlc3REaXI6IHthcHB9XERvYzsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzOyBDb21wb25lbnRzOiBkb2NzCi0KLQotW0ljb25zXQotTmFtZToge2dyb3VwfVxQeXRob24gKGNvbW1hbmQgbGluZSk7IEZpbGVuYW1lOiB7YXBwfVxweXRob24uZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgQ29tcG9uZW50czogbWFpbgotTmFtZToge2dyb3VwfVxQeXRob24gTWFudWFsczsgRmlsZW5hbWU6IHthcHB9XERvY1xpbmRleC5odG1sOyBXb3JraW5nRGlyOiB7YXBwfTsgQ29tcG9uZW50czogZG9jcwotTmFtZToge2dyb3VwfVxXaW4zMiBFeHRlbnNpb25zIEhlbHA7IEZpbGVuYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgV29ya2luZ0Rpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvbXBvbmVudHM6IGRvY3MKLU5hbWU6IHtncm91cH1cTW9kdWxlIERvY3M7IEZpbGVuYW1lOiB7YXBwfVxweXRob253LmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IFBhcmFtZXRlcnM6ICIiInthcHB9XFRvb2xzXFNjcmlwdHNccHlkb2MucHl3IiIiOyBDb21wb25lbnRzOiB0b29scwotTmFtZToge2dyb3VwfVxJRExFIChQeXRob24gR1VJKTsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbncuZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgUGFyYW1ldGVyczogIiIie2FwcH1cVG9vbHNcaWRsZVxpZGxlLnB5dyIiIjsgQ29tcG9uZW50czogdG9vbHMKLQotW1JlZ2lzdHJ5XQotOyBSZWdpc3RlciAucHkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiBDb250ZW50IFR5cGU7IFZhbHVlRGF0YTogdGV4dC9wbGFpbjsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxQeS5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbi5leGUiIiAiIiUxIiIgJSoiCi0KLTsgUmVnaXN0ZXIgLnB5YwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5YzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBDb21waWxlZEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogQ29tcGlsZWQgUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XHB5Yy5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9uLmV4ZSIiICIiJTEiIiAlKiIKLQotOyBSZWdpc3RlciAucHlvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHlvOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIENvbXBpbGVkRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLQotOyBSZWdpc3RlciAucHl3Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHl3OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIE5vQ29uRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weXc7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IENvbnRlbnQgVHlwZTsgVmFsdWVEYXRhOiB0ZXh0L3BsYWluOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlIChubyBjb25zb2xlKTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1cUHkuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbncuZXhlIiIgIiIlMSIiICUqIgotCi0KLTsgUHl0aG9uIFJlZ2lzdHJ5IEtleXMKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5OyBDaGVjazogSXNBZG1pbkxvZ2dlZE9uCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aDsgVmFsdWVEYXRhOiAie2FwcH1cTGliO3thcHB9XERMTHMiOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoXHdpbjMyOyBWYWx1ZURhdGE6ICJ7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjt7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMlxsaWIiOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGhcd2luMzJjb207IFZhbHVlRGF0YTogQzpcUHl0aG9uXGxpYlxzaXRlLXBhY2thZ2VzOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXM7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXNccHl0aG9uY29tOyBWYWx1ZURhdGE6IHtzeXN9XHB5dGhvbmNvbTIyLmRsbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzXHB5d2ludHlwZXM7IFZhbHVlRGF0YToge3N5c31cUHlXaW5UeXBlczIyLmRsbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxJbnN0YWxsUGF0aDsgVmFsdWVEYXRhOiB7YXBwfTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eTsgVmFsdWVUeXBlOiBzdHJpbmcKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cDsgVmFsdWVEYXRhOiB7Z3JvdXB9OyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHA7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlRGF0YToge2FwcH1cRG9jXGluZGV4Lmh0bWw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleTsgQ29tcG9uZW50czogZG9jcwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscFxQeXRob24gV2luMzIgRG9jdW1lbnRhdGlvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlRGF0YToge2FwcH1cbGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IEZsYWdzOiB1bmluc2RlbGV0ZWtleTsgQ29tcG9uZW50czogZG9jcwotCi1bX0lTVG9vbF0KLUVuYWJsZUlTWD10cnVlCi0KLQotW0NvZGVdCi1Qcm9ncmFtIFNldHVwOwotCi1GdW5jdGlvbiBJc0FkbWluTm90TG9nZ2VkT24oKTogQm9vbGVhbjsKLWJlZ2luCi0gIFJlc3VsdCA6PSBOb3QgSXNBZG1pbkxvZ2dlZE9uKCk7Ci1lbmQ7Ci0KLWJlZ2luCi1lbmQuCi0KLQotCi0KLVtVbmluc3RhbGxEZWxldGVdCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXI7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbWFpbFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVuY29kaW5nc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3NcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxob3RzaG90XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGhvdHNob3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGxpYi1vbGRcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHRraW50ZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcdGVzdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0ZXN0XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRlc3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxkb21cKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbTsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXHNheFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxzYXg7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbDsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tOyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHQ7IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1xweXRob25jb20ucHkqOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cTGliXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZTsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcaWRsZVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXGlkbGU7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0c1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVja1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVja1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVjazsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXI7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHM7IFR5cGU6IGRpcmlmZW1wdHkKLQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYjQ0MDEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9uIg0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9uIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNICAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyAvVlNFWFRDT01QX1ZFUkJPU0UiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24yMC53c2UgYi9QQy9WUzcuMS9weXRob24yMC53c2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlN2Y2YWQzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbjIwLndzZQorKysgL2Rldi9udWxsCkBAIC0xLDMxMTcgKzAsMCBAQAotRG9jdW1lbnQgVHlwZTogV1NFCi1pdGVtOiBHbG9iYWwKLSAgVmVyc2lvbj05LjAKLSAgVGl0bGU9UHl0aG9uIDIuNGExCi0gIEZsYWdzPTAwMDEwMTAwCi0gIExhbmd1YWdlcz02NSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAotICBKYXBhbmVzZSBGb250IE5hbWU9TVMgR290aGljCi0gIEphcGFuZXNlIEZvbnQgU2l6ZT0xMAotICBTdGFydCBHcmFkaWVudD0wIDI1NSAwCi0gIEVuZCBHcmFkaWVudD0wIDEyOCAwCi0gIFdpbmRvd3MgRmxhZ3M9MDAwMDAxMDAwMDAwMTEwMTAwMTAwMTAxMDAwMDEwMTAKLSAgTG9nIFBhdGhuYW1lPSVNQUlORElSJVxJTlNUQUxMLkxPRwotICBNZXNzYWdlIEZvbnQ9TVMgU2FucyBTZXJpZgotICBGb250IFNpemU9OAotICBQYWdlcyBNb2RpZmllZD0wMDAxMDAwMDAxMTEwMTAwMDAwMDAwMDEwMDAwMDExMQotICBFeHRyYSBQYWdlcz0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDExMDAxMAotICBEaXNrIEZpbGVuYW1lPVNFVFVQCi0gIFBhdGNoIEZsYWdzPTAwMDAwMDAwMDAwMDEwMDEKLSAgUGF0Y2ggVGhyZXNob2xkPTg1Ci0gIFBhdGNoIE1lbW9yeT00MDAwCi0gIE1JRiBQREYgVmVyc2lvbj0xLjAKLSAgTUlGIFNNUyBWZXJzaW9uPTIuMAotICBFWEUgRmlsZW5hbWU9UHl0aG9uLTIuNGExLmV4ZQotICBEaWFsb2dzIFZlcnNpb249OAotICBWZXJzaW9uIEZpbGU9Mi40YTEKLSAgVmVyc2lvbiBEZXNjcmlwdGlvbj1QeXRob24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UKLSAgVmVyc2lvbiBDb3B5cmlnaHQ9qTIwMDEtMjAwNyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgotICBWZXJzaW9uIENvbXBhbnk9UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAgQ3J5c3RhbCBGb3JtYXQ9MTAxMTExMDAxMDExMDAwMDAwMTAwMDEwMDEwMDEwMDEKLSAgU3RlcCBWaWV3PSZBbGwKLSAgVmFyaWFibGUgTmFtZTE9X1dJU0VfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMT1XSVNFIHJvb3QgZGlyZWN0b3J5Ci0gIFZhcmlhYmxlIERlZmF1bHQxPUM6XFByb2dyYW1tZVxXaXNlIEluc3RhbGxhdGlvbiBTeXN0ZW0KLSAgVmFyaWFibGUgRmxhZ3MxPTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUyPV9UQ0xESVJfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1UaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBUY2wvVGsgaW5zdGFsbGF0aW9uCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1saXZlcy4gIFRoaXMgbXVzdCBiZSBhIHNpYmxpbmcgb2YgdGhlIFB5dGhvbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9ZGlyZWN0b3J5LgotICBWYXJpYWJsZSBEZWZhdWx0Mj10Y2w4NAotICBWYXJpYWJsZSBGbGFnczI9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTM9X0RPQ18KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24zPVRoZSB1bnBhY2tlZCBIVE1MIGRvYyBkaXJlY3RvcnkuCi0gIFZhcmlhYmxlIERlZmF1bHQzPS4uXGh0bWwKLSAgVmFyaWFibGUgRmxhZ3MzPTAwMDAxMDAxCi0gIFZhcmlhYmxlIE5hbWU0PV9TWVNfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uND1TeXN0ZW0gZGlyZWN0b3J5ICh3aGVyZSB0byBmaW5kIE1TVkNSVC5ETEwpCi0gIFZhcmlhYmxlIERlZmF1bHQ0PUM6XFdpbmRvd3NcU3lzdGVtCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV2luZG93c1xTeXN0ZW0KLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXSU5OVFxTeXN0ZW0zMgotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XENvZGVcTVNETExzCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV2luZG93c1xTeXN0ZW0zMgotICBWYXJpYWJsZSBGbGFnczQ9MDAwMDAwMTAKLSAgVmFyaWFibGUgTmFtZTU9X1BZTUFKT1JfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNT1QeXRob24gbWFqb3IgdmVyc2lvbiBudW1iZXI7IHRoZSAyIGluIDIuMy4KLSAgVmFyaWFibGUgRGVmYXVsdDU9MgotICBWYXJpYWJsZSBGbGFnczU9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTY9X1BZTUlOT1JfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNj1QeXRob24gbWlub3IgdmVyc2lvbiBudW1iZXI7IHRoZSAzIGluIDIuMwotICBWYXJpYWJsZSBEZWZhdWx0Nj0zCi0gIFZhcmlhYmxlIEZsYWdzNj0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lNz1fRE9BRE1JTl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PVRoZSBpbml0aWFsIHZhbHVlIGZvciAlRE9BRE1JTiUuCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1XaGVuIDAsIHdlIG5ldmVyIHRyeSB0byB3cml0ZSB1bmRlciBIS0xNLAotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9YW5kIGluc3RhbGwgdGhlIFB5dGhvbiArIE1TIHJ1bnRpbWUgRExMcyBpbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9dGhlIFB5dGhvbiBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIGRpci4KLSAgVmFyaWFibGUgRGVmYXVsdDc9MQotICBWYXJpYWJsZSBWYWx1ZXM3PTEKLSAgVmFyaWFibGUgVmFsdWVzNz0wCi0gIFZhcmlhYmxlIEZsYWdzNz0wMDAwMTAxMAotICBWYXJpYWJsZSBOYW1lOD1fQUxJQVNOQU1FXwotICBWYXJpYWJsZSBGbGFnczg9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTk9X0FMSUFTUEFUSF8KLSAgVmFyaWFibGUgRmxhZ3M5PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUxMD1fQUxJQVNUWVBFXwotICBWYXJpYWJsZSBGbGFnczEwPTAwMDAxMDAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1QWVZFUl9TVFJJTkcKLSAgVmFsdWU9Mi4zCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSB2ZXJzaW9uIG51bWJlciBjaGFuZ2VzLCBzZXQgdGhlIGNvbXBpbGVyCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXZyYmxzIF9QWU1BSk9SXyBhbmQgIF9QWU1JTk9SXy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90aGluZyBpbiB0aGUgc2NyaXB0IGJlbG93IHNob3VsZCBuZWVkIGZpZGRsaW5nIHRoZW4uCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU90aGVyIHRoaW5ncyB0aGF0IG5lZWQgZmlkZGxpbmc6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBQWVZFUl9TVFJJTkcgYWJvdmUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBUaGUgIlRpdGxlOiIgaW4gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBHVUkuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBCdWlsZCBTZXR0aW5ncyBhbmQgVmVyc2lvbiBSZXNvdXJjZSBvbiBzdGVwIDYgKEZpbmlzaCkgb2YgdGhlIEluc3RhbGxhdGlvbiBFeHBlcnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICAgICBCZSBzdXJlIHRvIHNlbGVjdCBTdGVwcy0+QWxsIG9yIHlvdSBtYXkgbm90IHNlZSB0aGVzZSEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIHZlcnNpb24gb2YgVGNsL1RrIGNoYW5nZXMsIHRoZSBjb21waWxlciB2cmJsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PV9UQ0xESVJfIG1heSBhbHNvIG5lZWQgdG8gYmUgY2hhbmdlZC4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1BUFBUSVRMRQotICBWYWx1ZT1QeXRob24gJVBZVkVSX1NUUklORyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UFlfVkVSU0lPTiBzaG91bGQgYmUgbWFqb3IubWlub3Igb25seTsgdXNlZCB0byBjcmVhdGUgdGhlIHJlZ2lzdHJ5IGtleTsgbXVzdCBtYXRjaCBNU19ETExfSUQgaW4gcHl0aG9uX250LnJjCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1QWV9WRVJTSU9OCi0gIFZhbHVlPSVfUFlNQUpPUl8lLiVfUFlNSU5PUl8lCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUdST1VQIGlzIHRoZSBTdGFydCBtZW51IGdyb3VwIG5hbWU7IHVzZXIgY2FuIG92ZXJyaWRlLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9UHl0aG9uICVQWV9WRVJTSU9OJQotICBGbGFncz0xMDAwMDAwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NQUlORElSIGlzIHRoZSBhcHAgZGlyZWN0b3J5OyB1c2VyIGNhbiBvdmVycmlkZS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9UHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9JV9ET0FETUlOXyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9R2l2ZSBub24tYWRtaW4gdXNlcnMgYSBjaGFuY2UgdG8gYWJvcnQuCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAwMTExMTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBEaXNwbGF5IE1lc3NhZ2UKLSAgVGl0bGU9RG9pbmcgbm9uLWFkbWluIGluc3RhbGwKLSAgVGV4dD1UaGUgY3VycmVudCBsb2dpbiBkb2VzIG5vdCBoYXZlIEFkbWluaXN0cmF0b3IgUHJpdmlsZWdlcyBvbiB0aGlzIG1hY2hpbmUuICBQeXRob24gd2lsbCBpbnN0YWxsIGl0cyByZWdpc3RyeSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBwZXItdXNlciBhcmVhIG9ubHkgZm9yIHRoZSBjdXJyZW50IGxvZ2luLCBpbnN0ZWFkIG9mIGludG8gdGhlIHBlci1tYWNoaW5lIGFyZWEgZm9yIGV2ZXJ5IGFjY291bnQgb24gdGhpcyBtYWNoaW5lLiAgU29tZSBhZHZhbmNlZCB1c2VzIG9mIFB5dGhvbiBtYXkgbm90IHdvcmsgYXMgYSByZXN1bHQgKGZvciBleGFtcGxlLCBydW5uaW5nIGEgUHl0aG9uIHNjcmlwdCBhcyBhIHNlcnZpY2UpLgotICBUZXh0PQotICBUZXh0PUlmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIHBsZWFzZSBjbGljayBDYW5jZWwgdG8gYWJvcnQgdGhpcyBpbnN0YWxsYXRpb24sIGxvZyBvbiBhcyBhbiBBZG1pbmlzdHJhdG9yLCBhbmQgc3RhcnQgdGhlIGluc3RhbGxhdGlvbiBhZ2Fpbi4KLSAgRmxhZ3M9MDAwMDEwMDAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CRUdJTiBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogdGhlICJzdG9wIiBvbiB0aGUgbmV4dCBsaW5lIGlzIGFjdHVhbGx5ICJwYXVzZSIuCi1lbmQKLWl0ZW06IE9wZW4vQ2xvc2UgSU5TVEFMTC5MT0cKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWYgdGhlIGRlc3RpbmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgd3JpdGFibGUgV2luZG93c1xTeXN0ZW0gZGlyZWN0b3J5LCBzeXN0ZW0gZmlsZXMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBXaW5kb3dzXCBkaXJlY3RvcnkKLWVuZAotaXRlbTogQ2hlY2sgaWYgRmlsZS9EaXIgRXhpc3RzCi0gIFBhdGhuYW1lPSVTWVMlCi0gIEZsYWdzPTEwMDAwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TWVMKLSAgVmFsdWU9JVdJTiUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DT01NT04KLSAgS2V5PVNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uCi0gIERlZmF1bHQ9QzpcUHJvZ3JhbSBGaWxlc1xDb21tb24gRmlsZXMKLSAgVmFsdWUgTmFtZT1Db21tb25GaWxlc0RpcgotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVBST0dSQU1fRklMRVMKLSAgS2V5PVNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uCi0gIERlZmF1bHQ9QzpcUHJvZ3JhbSBGaWxlcwotICBWYWx1ZSBOYW1lPVByb2dyYW1GaWxlc0RpcgotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RVhQTE9SRVIKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIFRoZSBXaXphcmQgaGFyZGNvZCAiQzoiIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBmb3IgTUFJTkRJUi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhhdCdzIG5vdCBhcHByb3ByaWF0ZSBpZiB0aGUgc3lzdGVtIGRyaXZlIGRvZXNuJ3QgaGFwcGVuIHRvIGJlIEM6LgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JIHJlbW92ZWQgdGhlICJDOiIsIGFuZCB0aGF0IGRpZCB0aGUgcmlnaHQgdGhpbmcgZm9yIHR3byBwZW9wbGUgd2hvIHRlc3RlZCBpdCBvbiBub24tQzogbWFjaGluZXMsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWJ1dCBpdCdzIHVuY2xlYXIgd2hldGhlciBpdCB3aWxsIGFsd2F5cyBkbyB0aGUgcmlnaHQgdGhpbmcuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPVwlTUFJTkRJUiUKLSAgRmxhZ3M9MDAwMDExMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkFDS1VQIGlzIHRoZSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBwYXRoIHRoYXQgYWxsIGJhY2t1cCBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byB3aGVuIG92ZXJ3cml0dGVuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVAKLSAgVmFsdWU9JU1BSU5ESVIlXEJBQ0tVUAotICBGbGFncz0xMDAwMDAwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1ET0JBQ0tVUCBkZXRlcm1pbmVzIGlmIGEgYmFja3VwIHdpbGwgYmUgcGVyZm9ybWVkLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgQSAoZG8gYmFja3VwKSBvciBCIChkbyBub3QgZG8gYmFja3VwKQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CUkFORElORyBkZXRlcm1pbmVzIGlmIHRoZSBpbnN0YWxsYXRpb24gd2lsbCBiZSBicmFuZGVkIHdpdGggYSBuYW1lIGFuZCBjb21wYW55LiAgQnkgZGVmYXVsdCwgdGhpcyBpcyB3cml0dGVuIHRvIHRoZSBJTlNUIGRpcmVjdG9yeSAoaW5zdGFsbGF0aW9uIG1lZGlhKS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVhZCBJTkkgVmFsdWUKLSAgVmFyaWFibGU9TkFNRQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNlY3Rpb249UmVnaXN0cmF0aW9uCi0gIEl0ZW09TmFtZQotZW5kCi1pdGVtOiBSZWFkIElOSSBWYWx1ZQotICBWYXJpYWJsZT1DT01QQU5ZCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2VjdGlvbj1SZWdpc3RyYXRpb24KLSAgSXRlbT1Db21wYW55Ci1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1OQU1FCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogR2V0IFN5c3RlbSBJbmZvcm1hdGlvbgotICBWYXJpYWJsZT1OQU1FCi0gIEZsYWdzPTAwMDAwMTEwCi1lbmQKLWl0ZW06IEdldCBTeXN0ZW0gSW5mb3JtYXRpb24KLSAgVmFyaWFibGU9Q09NUEFOWQotICBGbGFncz0wMDAwMDExMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUVORCBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNldCB2cmJscyBmb3IgdGhlICJBZHZhbmNlZCBPcHRpb25zIiBzdWJkaWFsb2cgb2YgQ29tcG9uZW50cy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1CCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VEFTS1MgdmFsdWVzOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBSZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogQ3JlYXRlIFN0YXJ0IE1lbnUgc2hvcnRjdXRzCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BQgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q09NUE9ORU5UUyB2YWx1ZXM6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogVGNsL1RrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUM6IGRvY3MKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RDogdG9vbHMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RTogdGVzdCBzdWl0ZQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BQkNERQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWFyY2ggdGhydSB0aGUgdXNlciBHVUkuCi1lbmQKLWl0ZW06IFdpemFyZCBCbG9jawotICBEaXJlY3Rpb24gVmFyaWFibGU9RElSRUNUSU9OCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBCaXRtYXAgUGF0aG5hbWU9LlxpbnN0YWxsZXIuYm1wCi0gIFggUG9zaXRpb249OQotICBZIFBvc2l0aW9uPTEwCi0gIEZpbGxlciBDb2xvcj0xMTE3Mzc1OQotICBEaWFsb2c9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICBEaWFsb2c9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gIERpYWxvZz1TZWxlY3QgQ29tcG9uZW50cwotICBEaWFsb2c9U2VsZWN0IFByb2dyYW0gTWFuYWdlciBHcm91cAotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT0KLSAgVmFsdWU9Ci0gIFZhbHVlPQotICBWYWx1ZT1CCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MwotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RElTUExBWQotICBWYWx1ZT1TdGFydCBJbnN0YWxsYXRpb24KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9SW5zdGFsbCBkaXJlY3Rvcnk6ICAlTUFJTkRJUiUlQ1JMRiUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb2luZyBhZG1pbiBpbnN0YWxsLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb2luZyBub24tYWRtaW4gaW5zdGFsbC4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVNYWtlIGJhY2t1cHMsIGludG8gJUJBQ0tVUCUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9uJ3QgbWFrZSBiYWNrdXBzLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJUNvbXBvbmVudHM6JUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBUY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIGRvY3VtZW50YXRpb24lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFRvb2wgYW5kIHV0aWxpdHkgc2NyaXB0cyVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIHRlc3Qgc3VpdGUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVSZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvbid0IHJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVTdGFydCBNZW51IGdyb3VwOiAgJUdST1VQJSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVObyBTdGFydCBNZW51IHNob3J0Y3V0cy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTEgMzIzIDMzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgICBUZXh0IEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8KLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgZW5kCi0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTEwOCA1OCAzMjEgMjE5Ci0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDEKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAwMDEwMTAKLSAgICAgIFRleHQ9JU1BSU5ESVIlCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0MCAzMTMgNTgKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1QbGVhc2Ugc2VsZWN0IGEgZGlyZWN0b3J5IGZvciB0aGUgJUFQUFRJVExFJSBmaWxlcy4KLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICBUaXRsZSBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICBUaXRsZSBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgIFRpdGxlIFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8KLSAgICBUaXRsZSBJdGFsaWFuPVNlbGV6aW9uYXJlIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBXaWR0aD0yNzYKLSAgICBIZWlnaHQ9MjE2Ci0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT02IDYgMjA0IDE4NgotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMTAwMDEwCi0gICAgICBUZXh0PSVNQUlORElSJQotICAgICAgVGV4dCBGcmVuY2g9JU1BSU5ESVIlCi0gICAgICBUZXh0IEdlcm1hbj0lTUFJTkRJUiUKLSAgICAgIFRleHQgU3BhbmlzaD0lTUFJTkRJUiUKLSAgICAgIFRleHQgSXRhbGlhbj0lTUFJTkRJUiUKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSA4IDI2NSAyNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD1PSwotICAgICAgVGV4dCBHZXJtYW49T0sKLSAgICAgIFRleHQgU3BhbmlzaD1BY2VwdGFyCi0gICAgICBUZXh0IEl0YWxpYW49T0sKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSAzMSAyNjUgNTAKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIFZhbHVlPSVNQUlORElSX1NBVkUlCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1GaWNoaWVycyBkZSBTYXV2ZWdhcmRlIFJlbXBsYWPpcwotICAgIFRpdGxlIEdlcm1hbj1TaWNoZXJ1bmdza29waWUgdm9uIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbgotICAgIFRpdGxlIFBvcnR1Z3Vlc2U9RmljaGVpcm9zIHN1YnN0aXR17WRvcyBkZSBzZWd1cmFu52EKLSAgICBUaXRsZSBTcGFuaXNoPUNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcwotICAgIFRpdGxlIEl0YWxpYW49QmFja3VwIGZpbGUgc29zdGl0dWl0aQotICAgIFRpdGxlIERhbmlzaD1TaWtrZXJoZWRza29waWVyaW5nIGFmIGVyc3RhdHRlZGUgZmlsZXIKLSAgICBUaXRsZSBEdXRjaD1WZXJ2YW5nZW4gYmVzdGFuZGVuIGtvcGnrcmVuCi0gICAgVGl0bGUgTm9yd2VnaWFuPVNpa2tlcmhldHNrb3BpZXJlIGVyc3RhdHRlZGUgZmlsZXIKLSAgICBUaXRsZSBTd2VkaXNoPVPka2VyaGV0c2tvcGllcmEgdXRieXR0YSBmaWxlcgotICAgIFdpZHRoPTM1MAotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTEKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl2YW50PgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlcj4KLSAgICAgIFRleHQgUG9ydHVndWVzZT0mUHLzeGltbz4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICAgIFRleHQgRGFuaXNoPSZO5nN0ZT4KLSAgICAgIFRleHQgRHV0Y2g9JlZvbGdlbmRlPgotICAgICAgVGV4dCBOb3J3ZWdpYW49Jk5lc3RlPgotICAgICAgVGV4dCBTd2VkaXNoPSZO5HN0YSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTEKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08Jlp1cvxjawotICAgICAgVGV4dCBQb3J0dWd1ZXNlPTwmUmV0b3JuYXIKLSAgICAgIFRleHQgU3BhbmlzaD08JlJldHJvY2VkZXIKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgICAgVGV4dCBEYW5pc2g9PCZUaWxiYWdlCi0gICAgICBUZXh0IER1dGNoPTwmVGVydWcKLSAgICAgIFRleHQgTm9yd2VnaWFuPTwmVGlsYmFrZQotICAgICAgVGV4dCBTd2VkaXNoPTwgJlRpbGxiYWthCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNzggMjM0IDMzMCAyNTEKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1DYW5jZWxhcgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgICAgVGV4dCBEYW5pc2g9QW5udWxsZXIKLSAgICAgIFRleHQgRHV0Y2g9QW5udWxlcmVuCi0gICAgICBUZXh0IE5vcndlZ2lhbj1BdmJyeXQKLSAgICAgIFRleHQgU3dlZGlzaD1BdmJyeXQKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMSAyMjEgMzI5IDIyMwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NiAzMjAgOTgKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1UaGlzIGluc3RhbGxhdGlvbiBwcm9ncmFtIGNhbiBjcmVhdGUgYmFja3VwIGNvcGllcyBvZiBhbGwgZmlsZXMgcmVwbGFjZWQgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoZXNlIGZpbGVzIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBzb2Z0d2FyZSBpcyB1bmluc3RhbGxlZCBhbmQgYSByb2xsYmFjayBpcyByZXF1ZXN0ZWQuICBJZiBiYWNrdXAgY29waWVzIGFyZSBub3QgY3JlYXRlZCwgeW91IHdpbGwgb25seSBiZSBhYmxlIHRvIHVuaW5zdGFsbCB0aGUgc29mdHdhcmUgYW5kIG5vdCByb2xsIHRoZSBzeXN0ZW0gYmFjayB0byBhIHByZXZpb3VzIHN0YXRlLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9RG8geW91IHdhbnQgdG8gY3JlYXRlIGJhY2t1cHMgb2YgcmVwbGFjZWQgZmlsZXM/Ci0gICAgICBUZXh0IEZyZW5jaD1MZSBwcm9ncmFtbWUgZCdpbnN0YWxsYXRpb24gcGV1dCBjcullciBkZXMgY29waWVzIGRlIHNhdXZlZ2FyZGUgZGUgdG91cyBsZXMgZmljaGllcnMgcmVtcGxhY+lzIHBlbmRhbnQgbCdpbnN0YWxsYXRpb24uIENlcyBmaWNoaWVycyBzb250IHV0aWxpc+lzIGF1IGNhcyBv+SBsZSBsb2dpY2llbCBlc3QgZOlzaW5zdGFsbOkgZXQgcXVlIGwnb24gcHJvY+hkZSDgIGxhIHJlcHJpc2UgZHUgc3lzdOhtZS4gU2kgbGVzIGNvcGllcyBkZSBzYXV2ZWdhcmRlIG5lIHNvbnQgcGFzIGNy6ellcywgb24gbmUgcG91cnJhIHF1ZSBk6XNpbnN0YWxsZXIgbGUgbG9naWNpZWwgc2FucyByZXByZW5kcmUgbGUgc3lzdOhtZSDgIHVuIOl0YXQgcHLpY+lkZW50LiBWb3VsZXotdm91cyBjcullciB1bmUgc2F1dmVnYXJkZSBkZXMgZmljaGllcnMgcmVtcGxhY+lzID8KLSAgICAgIFRleHQgR2VybWFuPURpZXNlcyBJbnN0YWxsYXRpb25zcHJvZ3JhbW0ga2FubiBTaWNoZXJ1bmdza29waWVuIHZvbiBhbGxlbiB35GhyZW5kIGRlciBJbnN0YWxsYXRpb24gZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuLiBEaWVzZSBEYXRlaWVuIHdlcmRlbiB6dXIgUvxja2fkbmdpZ21hY2h1bmcgZGVyIEluc3RhbGxhdGlvbiB1bmQgYmVpIEFuZm9yZGVydW5nIGVpbmVzIFJvbGxiYWNrcyB2ZXJ3ZW5kZXQuIE9obmUgU2ljaGVydW5nc2tvcGllbiBpc3QgbnVyIGVpbmUgUvxja2fkbmdpZ21hY2h1bmcgZGVyIEluc3RhbGxhdGlvbiBt9mdsaWNoLCBuaWNodCBhYmVyIGVpbiBSb2xsYmFjayBkZXMgU3lzdGVtcy4gU2ljaGVydW5nc2tvcGllbiBkZXIgZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuPwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUVzdGUgcHJvZ3JhbWEgZGUgaW5zdGFsYefjbyBwb2RlIGNyaWFyIGPzcGlhcyBkZSBzZWd1cmFu52EgZGUgdG9kb3Mgb3MgZmljaGVpcm9zIHN1YnN0aXR17WRvcyBkdXJhbnRlIGEgaW5zdGFsYefjby4gRXN0ZXMgZmljaGVpcm9zIHNlcuNvIHV0aWxpemFkb3MgcXVhbmRvIG8gcHJvZ3JhbWEgZm9yIGRlc2luc3RhbGFkbyAgZSBmb3IgcmVxdWlzaXRhZGEgdW1hIHJldG9tYWRhLiBTZSBhcyBj83BpYXMgZGUgc2VndXJhbudhIG7jbyBmb3JlbSBjcmlhZGFzLCBz8yBwb2RlcuEgZGVzaW5zdGFsYXIgbyBwcm9ncmFtYSBlIG7jbyBwb2RlIHJldG9tYXIgIHVtIGVzdGFkbyBhbnRlcmlvciBkbyBzaXN0ZW1hLiBEZXNlamEgY3JpYXIgY/NwaWFzIGRlIHNlZ3VyYW7nYSBkb3MgZmljaGVpcm9zIHN1YnN0aXR17WRvcz8KLSAgICAgIFRleHQgU3BhbmlzaD1Fc3RlIHByb2dyYW1hIGRlIGluc3RhbGFjafNuIHB1ZWRlIGNyZWFyIGNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgdG9kb3MgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcyBkdXJhbnRlIGxhIGluc3RhbGFjafNuLiBFc3RvcyBhcmNoaXZvcyBzZSB1dGlsaXphcuFuIGN1YW5kbyBzZSBkZXNpbnN0YWxlIGVsIHNvZnR3YXJlIHkgc2Ugc29saWNpdGUgdm9sdmVyIGFsIGVzdGFkbyBhbnRlcmlvci4gU2kgbm8gc2UgY3JlYW4gY29waWFzIGRlIHNlZ3VyaWRhZCwg+m5pY2FtZW50ZSBwb2Ry4SBkZXNpbnN0YWxhciBlbCBzb2Z0d2FyZSB5IG5vIHBvZHLhIGRldm9sdmVyIGVsIHNpc3RlbWEgYWwgZXN0YWRvIGFudGVyaW9yLiC/RGVzZWEgY3JlYXIgYXJjaGl2b3MgZGUgc2VndXJpZGFkIGRlIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3M/Ci0gICAgICBUZXh0IEl0YWxpYW49UXVlc3RvIHByb2dyYW1tYSBkaSBpbnN0YWxsYXppb25lIHB18iBjcmVhcmUgY29waWUgZGkgYmFja3VwIGRpIHR1dHRpIGkgZmlsZSBzb3N0aXR1aXRpIGR1cmFudGUgbJJpbnN0YWxsYXppb25lLiBRdWVzdGkgZmlsZSBzYXJhbm5vIHVzYXRpIHF1YW5kbyBpbCBzb2Z0d2FyZSBzYXLgIGRpc2luc3RhbGxhdG8gZSBzYXLgIHJpY2hpZXN0byB1biByaXRvcm5vIGFsbG8gc3RhdG8gcHJlY2VkZW50ZS4gU2Ugbm9uIGNyZWkgbGUgY29waWUgZGkgYmFja3VwLCBwb3RyYWkgc29sbyBkaXNpbnN0YWxsYXJlIGlsIHNvZnR3YXJlLCBtYSBub24gcG90cmFpIHJpcG9ydGFyZSBpbCBzaXN0ZW1hIGFsbG8gc3RhdG8gcHJlY2VkZW50ZS4gVnVvaSBjcmVhcmUgaSBmaWxlIGRpIGJhY2t1cCBkZWkgZmlsZSBzb3N0aXR1aXRpPwotICAgICAgVGV4dCBEYW5pc2g9RGV0dGUgaW5zdGFsbGF0aW9uc3Byb2dyYW0ga2FuIG9wcmV0dGUgc2lra2VyaGVkc2tvcGllciBhZiBhbGxlIGZpbGVyLCBzb20gZXJzdGF0dGVzIHVuZGVyIGluc3RhbGxhdGlvbmVuLiBEaXNzZSBmaWxlciBiZW55dHRlcywgbuVyIHNvZnR3YXJlbiBmamVybmVzLCBvZyBkZW4gdGlkbGlnZXJlIHN5c3RlbWtvbmZpZ3VyYXRpb24gZ2VuZXRhYmxlcmVzLiBIdmlzIGRlciBpa2tlIG9wcmV0dGVzIHNpa2tlcmhlZHNrb3BpZXIsIGthbiBkdSBrdW4gZmplcm5lIGRlbiBpbnN0YWxsZXJlZGUgc29mdHdhcmUgb2cgaWtrZSBnZW5ldGFibGVyZSBkZW4gdGlkbGlnZXJlIHN5c3RlbWtvbmZpZ3VyYXRpb24uIFZpbCBkdSBvcHJldHRlIHNpa2tlcmhlZHNrb3BpZXIgYWYgZmlsZXIsIHNvbSBlcnN0YXR0ZXM/Ci0gICAgICBUZXh0IER1dGNoPURpdCBpbnN0YWxsYXRpZXByb2dyYW1tYSBrYW4ga29waWXrbiBtYWtlbiB2YW4gYWxsZSBiZXN0YW5kZW4gZGllIHRpamRlbnMgZGUgaW5zdGFsbGF0aWUgd29yZGVuIHZlcnZhbmdlbi4gRGV6ZSB3b3JkZW4gZGFuIGdlYnJ1aWt0IGFscyBkZSBzb2Z0d2FyZS1pbnN0YWxsYXRpZSBvbmdlZGFhbiB3b3JkdCBnZW1hYWt0IGVuIHUgaGV0IHN5c3RlZW0gd2lsdCBsYXRlbiB0ZXJ1Z2tlcmVuIG5hYXIgZGUgb29yc3Byb25rZWxpamtlIHN0YWF0LiBBbHMgZXIgZ2VlbiBiYWNrLXVwIGtvcGll624gd29yZGVuIGdlbWFha3QsIGt1bnQgdSBkZSBzb2Z0d2FyZSBlbmtlbCB2ZXJ3aWpkZXJlbiBtYWFyIGhldCBzeXN0ZWVtIG5pZXQgaW4gZGUgb29yc3Byb25rZWxpamtlIHN0YWF0IHRlcnVnYnJlbmdlbi4gV2lsdCB1IGVlbiBiYWNrLXVwIG1ha2VuIHZhbiBkZSB2ZXJ2YW5nZW4gYmVzdGFuZGVuPwotICAgICAgVGV4dCBOb3J3ZWdpYW49RGV0dGUgaW5zdGFsbGFzam9uc3Byb2dyYW1tZXQga2FuIGxhZ2Ugc2lra2VyaGV0c2tvcGllciBhdiBhbGxlIGZpbGVyIHNvbSBibGlyIGVyc3RhdHRldCB1bmRlciBpbnN0YWxsYXNqb25lbi4gRGlzc2UgZmlsZW5lIHZpbCB0YXMgaSBicnVrIG7lciBwcm9ncmFtdmFyZW4gZXIgYXZpbnN0YWxsZXJ0IG9nIGRldCBlciBiZWhvdiBmb3IgdGlsYmFrZXN0aWxsaW5nLiBIdmlzIGRldCBpa2tlIGVyIGxhZ2V0IHNpa2tlcmhldHNrb3BpZXIsIGthbiBkdSBrdW4gYXZpbnN0YWxsZXJlIHByb2dyYW12YXJlbiBvZyBpa2tlIHN0aWxsZSBzeXN0ZW1ldCB0aWxiYWtlIHRpbCB0aWRsaWdlcmUgc3RhdHVzLiDYbnNrZXIgZHUg5SBsYWdlIHNpa2tlcmhldHNrb3BpZXIgYXYgZGUgZmlsZW5lIHNvbSBibGlyIGVyc3RhdHRldCBu5T8KLSAgICAgIFRleHQgU3dlZGlzaD1JbnN0YWxsYXRpb25zcHJvZ3JhbW1ldCBrYW4gc2thcGEgc+RrZXJoZXRza29waW9yIGF2IGFsbGEgZmlsZXIgc29tIGJ5dHMgdXQgdW5kZXIgaW5zdGFsbGF0aW9uZW4uIERlc3NhIGZpbGVyIGthbiBzZWRhbiBhbnbkbmRhcyBu5HIgcHJvZ3JhbXZhcmFuIGF2aW5zdGFsbGVyYXMgb2NoIGR1IGJlZ+RyIHJvbGxiYWNrLiBPbSBkdSBk5SBpbnRlIGhhciBu5WdyYSBz5GtlcmhldHNrb3Bpb3Iga2FuIGR1IGJhcmEgYXZpbnN0YWxsZXJhIHByb2dyYW12YXJhbiwgaW50ZSDldGVyc2thcGEgc3lzdGVtZXQgaSBkZXNzIHRpZGlnYXJlIHNraWNrLiBWaWxsIGR1IGf2cmEgc+RrZXJoZXRza29waW9yIGF2IGRlIGVyc2F0dGEgZmlsZXJuYT8KLSAgICBlbmQKLSAgICBpdGVtOiBSYWRpbyBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xNDEgMTA2IDI2NSAxMzYKLSAgICAgIFZhcmlhYmxlPURPQkFDS1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMDEKLSAgICAgIFRleHQ9JlllcywgbWFrZSBiYWNrdXBzCi0gICAgICBUZXh0PU4mbywgZG8gbm90IG1ha2UgYmFja3VwcwotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSZPdWkKLSAgICAgIFRleHQgRnJlbmNoPU4mb24KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49JkphCi0gICAgICBUZXh0IEdlcm1hbj1OJmVpbgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JlNpbQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPU7jJm8KLSAgICAgIFRleHQgUG9ydHVndWVzZT0KLSAgICAgIFRleHQgU3BhbmlzaD0mU+0KLSAgICAgIFRleHQgU3BhbmlzaD1OJm8KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj0mU+wKLSAgICAgIFRleHQgSXRhbGlhbj1OJm8KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgRGFuaXNoPSZKYQotICAgICAgVGV4dCBEYW5pc2g9Jk5lagotICAgICAgVGV4dCBEYW5pc2g9Ci0gICAgICBUZXh0IER1dGNoPSZKYQotICAgICAgVGV4dCBEdXRjaD1OJmVlCi0gICAgICBUZXh0IER1dGNoPQotICAgICAgVGV4dCBOb3J3ZWdpYW49JkphCi0gICAgICBUZXh0IE5vcndlZ2lhbj0mTmVpCi0gICAgICBUZXh0IE5vcndlZ2lhbj0KLSAgICAgIFRleHQgU3dlZGlzaD0mSmEKLSAgICAgIFRleHQgU3dlZGlzaD1OJmVqCi0gICAgICBUZXh0IFN3ZWRpc2g9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzIKLSAgICAgIFJlY3RhbmdsZT0xMDggMTczIDMyMCAyMDgKLSAgICAgIEFjdGlvbj0xCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICAgIFRleHQ9QmFja3VwIEZpbGUgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgICBUZXh0IEZyZW5jaD1S6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uIGRlcyBmaWNoaWVycyBkZSBzYXV2ZWdhcmRlCi0gICAgICBUZXh0IEdlcm1hbj1aaWVsdmVyemVpY2huaXMgZvxyIGRpZSBTaWNoZXJ1bmdzZGF0ZWkKLSAgICAgIFRleHQgUG9ydHVndWVzZT1EaXJlY3TzcmlvIGRlIGRlc3Rpbm8gZGUgZmljaGVpcm8gZGUgc2VndXJhbudhCi0gICAgICBUZXh0IFNwYW5pc2g9RGlyZWN0b3JpbyBkZSBEZXN0aW5vIGRlIGxvcyBBcmNoaXZvcyBkZSBTZWd1cmlkYWQKLSAgICAgIFRleHQgSXRhbGlhbj1EaXJlY3RvcnkgZGkgZGVzdGluYXppb25lIGRlaSBmaWxlIGRpIGJhY2t1cAotICAgICAgVGV4dCBEYW5pc2g9RGVzdGluYXRpb25zYmlibGlvdGVrIHRpbCBzaWtrZXJoZWRza29waWVyCi0gICAgICBUZXh0IER1dGNoPURvZWxkaXJlY3RvcnkgYmFja3VwLWJlc3RhbmQKLSAgICAgIFRleHQgTm9yd2VnaWFuPU3lbGthdGFsb2cgZm9yIHNpa2tlcmhldHNrb3BpZXIKLSAgICAgIFRleHQgU3dlZGlzaD1LYXRhbG9nIGb2ciBz5GtlcmhldHNrb3BpZXJhZGUgZmlsZXIKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgICBSZWN0YW5nbGU9MjY1IDE4NSAzMTggMjAzCi0gICAgICBWYXJpYWJsZT1CQUNLVVBfU0FWRQotICAgICAgVmFsdWU9JUJBQ0tVUCUKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0xCi0gICAgICBBY3Rpb249MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUImcm93c2UuLi4KLSAgICAgIFRleHQgRnJlbmNoPVAmYXJjb3VyaXIKLSAgICAgIFRleHQgR2VybWFuPUImbOR0dGVybi4uLgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPVAmcm9jdXJhcgotICAgICAgVGV4dCBTcGFuaXNoPVYmaXN1YWxpemFyLi4uCi0gICAgICBUZXh0IEl0YWxpYW49U2ZvZ2xpYS4uLgotICAgICAgVGV4dCBEYW5pc2g9Jkdlbm5lbXNlLi4uCi0gICAgICBUZXh0IER1dGNoPUImbGFkZXJlbi4uLgotICAgICAgVGV4dCBOb3J3ZWdpYW49QmxhIGlnamVubm9tCi0gICAgICBUZXh0IFN3ZWRpc2g9JkJs5GRkcmEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgICAgUmVjdGFuZ2xlPTEyOSAxODggMjU0IDIwMAotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0lQkFDS1VQJQotICAgICAgVGV4dCBGcmVuY2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgR2VybWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3BhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBJdGFsaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IERhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBEdXRjaD0lQkFDS1VQJQotICAgICAgVGV4dCBOb3J3ZWdpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgU3dlZGlzaD0lQkFDS1VQJQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMSAzMjMgMzYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGVzIGNvbXBvc2FudHMKLSAgICAgIFRleHQgR2VybWFuPUtvbXBvbmVudGVuIGF1c3fkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgY29tcG9uZW50ZXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpIGNvbXBvbmVudGkKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURPQkFDS1VQCi0gICAgICBWYWx1ZT1CCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgVGl0bGUgRnJlbmNoPUNob2lzaXNzZXogbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgIFRpdGxlIEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgVGl0bGUgUG9ydHVndWVzZT1TZWxlY2Npb25hciBEaXJlY3TzcmlvIGRlIERlc3Rpbm8KLSAgICBUaXRsZSBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgRGlyZWN0b3JpbyBkZSBEZXN0aW5vCi0gICAgVGl0bGUgSXRhbGlhbj1TZWxlemlvbmEgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIFRpdGxlIERhbmlzaD1W5mxnIERlc3RpbmF0aW9uc2JpYmxpb3RlawotICAgIFRpdGxlIER1dGNoPUtpZXMgRG9lbGRpcmVjdG9yeQotICAgIFRpdGxlIE5vcndlZ2lhbj1WZWxnIG3lbGthdGFsb2cKLSAgICBUaXRsZSBTd2VkaXNoPVbkbGogZGVzdGluYXRpb25za2FsYXRvZwotICAgIFdpZHRoPTI3NgotICAgIEhlaWdodD0yMTYKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTYgMyAyMDAgMTg2Ci0gICAgICBWYXJpYWJsZT1CQUNLVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDExMDAwMDEwMDAxMAotICAgICAgVGV4dD0lQkFDS1VQJQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgUG9ydHVndWVzZT0lQkFDS1VQJQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPQotICAgICAgVGV4dCBTcGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgRGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IERhbmlzaD0KLSAgICAgIFRleHQgRHV0Y2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRHV0Y2g9Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0lQkFDS1VQJQotICAgICAgVGV4dCBOb3J3ZWdpYW49Ci0gICAgICBUZXh0IFN3ZWRpc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3dlZGlzaD0KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSA4IDI2NSAyNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD1PSwotICAgICAgVGV4dCBHZXJtYW49T0sKLSAgICAgIFRleHQgUG9ydHVndWVzZT1PSwotICAgICAgVGV4dCBTcGFuaXNoPUFDRVBUQVIKLSAgICAgIFRleHQgSXRhbGlhbj1PSwotICAgICAgVGV4dCBEYW5pc2g9T0sKLSAgICAgIFRleHQgRHV0Y2g9T0sKLSAgICAgIFRleHQgTm9yd2VnaWFuPU9LCi0gICAgICBUZXh0IFN3ZWRpc2g9T0sKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSAzMSAyNjUgNTAKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUAotICAgICAgVmFsdWU9JUJBQ0tVUF9TQVZFJQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Q2FuY2VsYXIKLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICAgIFRleHQgRGFuaXNoPVNsZXQKLSAgICAgIFRleHQgRHV0Y2g9QW5udWxlcmVuCi0gICAgICBUZXh0IE5vcndlZ2lhbj1BdmJyeXQKLSAgICAgIFRleHQgU3dlZGlzaD1BdmJyeXQKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IENvbXBvbmVudHMKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogQ2hlY2tib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNjYgMzEzIDE1NgotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDExCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMTEwCi0gICAgICBUZXh0PVB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi0gICAgICBUZXh0PVRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpCi0gICAgICBUZXh0PVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQ9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDUgMzIwIDYzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2hvb3NlIHdoaWNoIGNvbXBvbmVudHMgdG8gaW5zdGFsbCBieSBjaGVja2luZyB0aGUgYm94ZXMgYmVsb3cuCi0gICAgICBUZXh0IEZyZW5jaD1DaG9pc2lzc2V6IGxlcyBjb21wb3NhbnRzIHF1ZSB2b3VzIHZvdWxleiBpbnN0YWxsZXIgZW4gY29jaGFudCBsZXMgY2FzZXMgY2ktZGVzc291cy4KLSAgICAgIFRleHQgR2VybWFuPVfkaGxlbiBTaWUgZGllIHp1IGluc3RhbGxpZXJlbmRlbiBLb21wb25lbnRlbiwgaW5kZW0gU2llIGluIGRpZSBlbnRzcHJlY2hlbmRlbiBL5HN0Y2hlbiBrbGlja2VuLgotICAgICAgVGV4dCBTcGFuaXNoPUVsaWphIGxvcyBjb21wb25lbnRlcyBxdWUgZGVzZWUgaW5zdGFsYXIgbWFyY2FuZG8gbG9zIGN1YWRyb3MgZGUgYWJham8uCi0gICAgICBUZXh0IEl0YWxpYW49U2NlZ2xpZXJlIHF1YWxpIGNvbXBvbmVudGkgaW5zdGFsbGFyZSBzZWxlemlvbmFuZG8gbGUgY2FzZWxsZSBzb3R0b3N0YW50aS4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMDMgMjY5IDIyMAotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTEKLSAgICAgIEFjdGlvbj0yCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QWR2YW5jZWQgT3B0aW9ucyAuLi4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNDMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IENvbXBvbmVudHMKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZXMgY29tcG9zYW50cwotICAgICAgVGV4dCBHZXJtYW49S29tcG9uZW50ZW4gYXVzd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBjb21wb25lbnRlcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGkgY29tcG9uZW50aQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTI1MSAxODAgMzExIDE5MwotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9TUFJTkRJUgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MjUxIDE2OCAzMTEgMTc5Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMjMgMTY4IDIzNCAxODEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1EaXNrIFNwYWNlIFJlcXVpcmVkOgotICAgICAgVGV4dCBGcmVuY2g9RXNwYWNlIGRpc3F1ZSByZXF1aXMgOgotICAgICAgVGV4dCBHZXJtYW49Tm90d2VuZGlnZXIgU3BlaWNoZXJwbGF0ejoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc3BhY2lvIHJlcXVlcmlkbyBlbiBlbCBkaXNjbzoKLSAgICAgIFRleHQgSXRhbGlhbj1TcGF6aW8gc3UgZGlzY28gbmVjZXNzYXJpbzoKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMjMgMTgwIDIzNCAxOTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1EaXNrIFNwYWNlIFJlbWFpbmluZzoKLSAgICAgIFRleHQgRnJlbmNoPUVzcGFjZSBkaXNxdWUgZGlzcG9uaWJsZSA6Ci0gICAgICBUZXh0IEdlcm1hbj1WZXJibGVpYmVuZGVyIFNwZWljaGVycGxhdHo6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNwYWNpbyBlbiBkaXNjbyBkaXNwb25pYmxlOgotICAgICAgVGV4dCBJdGFsaWFuPVNwYXppbyBzdSBkaXNjbyBkaXNwb25pYmlsZToKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTU4IDMyMCAxOTYKLSAgICAgIEFjdGlvbj0xCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgICBWYWx1ZT1WRVJJRlkKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9SWYgdGhleSdyZSBpbnN0YWxsaW5nIFRjbC9UaywgVG9vbHMsIG9yIHRoZSB0ZXN0IHN1aXRlLCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB1bmxlc3MgdGhleSdyZSBpbnN0YWxsaW5nIFB5dGhvbiB0b28uCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1CREUKLSAgICAgIEZsYWdzPTAwMDAxMDEwCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1BCi0gICAgICBGbGFncz0wMDAwMDAxMQotICAgIGVuZAotICAgIGl0ZW06IERpc3BsYXkgTWVzc2FnZQotICAgICAgVGl0bGU9QXJlIHlvdSBzdXJlPwotICAgICAgVGV4dD1JbnN0YWxsaW5nIFRjbC9UaywgVG9vbHMgb3IgdGhlIHRlc3Qgc3VpdGUgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdW5sZXNzIHlvdSBpbnN0YWxsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcyB0b28uCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1DbGljayBZZXMgaWYgdGhhdCdzIHJlYWxseSB3aGF0IHlvdSB3YW50LgotICAgICAgRmxhZ3M9MDAxMDExMDEKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9Tm90aGluZyAtLSBqdXN0IHByb2NlZWQgdG8gdGhlIG5leHQgZGlhbG9nLgotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PVJldHVybiB0byB0aGUgZGlhbG9nLgotICAgIGVuZAotICAgIGl0ZW06IFNldCBWYXJpYWJsZQotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPUFkdmFuY2VkIE9wdGlvbnMKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjEzCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFJhZGlvIEJ1dHRvbgotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgICAgUmVjdGFuZ2xlPTExIDQ2IDkwIDc2Ci0gICAgICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwMQotICAgICAgVGV4dD1BZG1pbiBpbnN0YWxsCi0gICAgICBUZXh0PU5vbi1BZG1pbiBpbnN0YWxsbAotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAxNzAgMjQ0IDE4OQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT01IDMgMzI2IDgzCi0gICAgICBBY3Rpb249MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4xCi0gICAgICBSZWN0YW5nbGU9MTEgMTEgMzIxIDQ1Ci0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QnkgZGVmYXVsdCwgdGhlIGluc3RhbGwgcmVjb3JkcyBzZXR0aW5ncyBpbiB0aGUgcGVyLW1hY2hpbmUgYXJlYSBvZiB0aGUgcmVnaXN0cnkgKEhLTE0pLCBhbmQgaW5zdGFsbHMgdGhlIFB5dGhvbiBhbmQgQyBydW50aW1lIERMTHMgdG8gJVNZUzMyJS4gIENob29zZSAiTm9uLUFkbWluIGluc3RhbGwiIGlmIHlvdSB3b3VsZCBwcmVmZXIgc2V0dGluZ3MgbWFkZSBpbiB0aGUgcGVyLXVzZXIgcmVnaXN0cnkgKEhLQ1UpLCBhbmQgRExMcyBpbnN0YWxsZWQgaW4gJU1BSU5ESVIlLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTUgOTAgMzI2IDE1NwotICAgICAgQWN0aW9uPTEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IENoZWNrYm94Ci0gICAgICBSZWN0YW5nbGU9MTEgMTIxIDI0MyAxNTEKLSAgICAgIFZhcmlhYmxlPVRBU0tTCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTEKLSAgICAgIFRleHQ9UmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zICgucHksIC5weXcsIC5weWMsIC5weW8pCi0gICAgICBUZXh0PUNyZWF0ZSBTdGFydCBNZW51IHNob3J0Y3V0cwotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMSAxMDMgMzIwIDEyMQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNob29zZSB0YXNrcyB0byBwZXJmb3JtIGJ5IGNoZWNraW5nIHRoZSBib3hlcyBiZWxvdy4KLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgICBWYWx1ZT1JTklUCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ET0FETUlOCi0gICAgICBWYWx1ZT0xCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBUZXh0Ci0gICAgICBDb250cm9sIE5hbWU9QURNSU4xCi0gICAgICBDb250cm9sIFRleHQ9VGhpcyBzZWN0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIGxvZ2dlZCBpbiB0byBhbiBhY2NvdW50IHdpdGggQWRtaW5pc3RyYXRvciBwcml2aWxlZ2VzLgotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IFByb2dyYW0gTWFuYWdlciBHcm91cAotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IFN0YXJ0IE1lbnUgR3JvdXAKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBncm91cGUgZHUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZQotICAgICAgVGV4dCBHZXJtYW49QmVzdGltbXVuZyBkZXIgUHJvZ3JhbW0tTWFuYWdlcmdydXBwZQotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgZ3J1cG8gZGVsIEFkbWluaXN0cmFkb3IgZGUgcHJvZ3JhbWFzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaWwgZ3J1cHBvIFByb2dNYW4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMzUgMzIwIDY1Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RW50ZXIgdGhlIG5hbWUgb2YgdGhlIFN0YXJ0IE1lbnUgcHJvZ3JhbSBncm91cCB0byB3aGljaCB0byBhZGQgdGhlICVBUFBUSVRMRSUgaWNvbnM6Ci0gICAgICBUZXh0IEZyZW5jaD1FbnRyZXogbGUgbm9tIGR1IGdyb3VwZSBkdSBHZXN0aW9ubmFpcmUgZGUgcHJvZ3JhbW1lIGRhbnMgbGVxdWVsIHZvdXMgc291aGFpdGV6IGFqb3V0ZXIgbGVzIGlj9G5lcyBkZSAlQVBQVElUTEUlIDoKLSAgICAgIFRleHQgR2VybWFuPUdlYmVuIFNpZSBkZW4gTmFtZW4gZGVyIFByb2dyYW1tZ3J1cHBlIGVpbiwgZGVyIGRhcyBTeW1ib2wgJUFQUFRJVExFJSBoaW56dWdlZvxndCB3ZXJkZW4gc29sbDoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc2NyaWJhIGVsIG5vbWJyZSBkZWwgZ3J1cG8gZGVsIEFkbWluaXN0cmFkb3IgZGUgcHJvZ3JhbWFzIGVuIGVsIHF1ZSBkZXNlYSBhZ3JlZ2FyIGxvcyBpY29ub3MgZGUgJUFQUFRJVExFJToKLSAgICAgIFRleHQgSXRhbGlhbj1JbnNlcmlyZSBpbCBub21lIGRlbCBncnVwcG8gUHJvZ3JhbSBNYW5hZ2VyIHBlciBhZ2dpdW5nZXJlIGxlIGljb25lICVBUFBUSVRMRSUgYToKLSAgICBlbmQKLSAgICBpdGVtOiBDb21ib2JveAotICAgICAgUmVjdGFuZ2xlPTEwOCA1NiAzMjAgMjE5Ci0gICAgICBWYXJpYWJsZT1HUk9VUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAxMDAwMDEwMDAwMDAxMTAwMDAwMDAxCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSVHUk9VUCUKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0lR1JPVVAlCi0gICAgICBUZXh0IEdlcm1hbj0lR1JPVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9JUdST1VQJQotICAgICAgVGV4dCBJdGFsaWFuPSVHUk9VUCUKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U3RhcnQgSW5zdGFsbGF0aW9uCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA1MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1SZWFkeSB0byBJbnN0YWxsIQotICAgICAgVGV4dCBGcmVuY2g9UHLqdCDgIGluc3RhbGxlciAhCi0gICAgICBUZXh0IEdlcm1hbj1JbnN0YWxsYXRpb25zYmVyZWl0IQotICAgICAgVGV4dCBTcGFuaXNoPaFQcmVwYXJhZG8gcGFyYSBsYSBpbnN0YWxhY2nzbiEKLSAgICAgIFRleHQgSXRhbGlhbj1Qcm9udG8gcGVyIGwnaW5zdGFsbGF6aW9uZSEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDAgMzIwIDYyCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2xpY2sgdGhlIE5leHQgYnV0dG9uIHRvIGluc3RhbGwgJUFQUFRJVExFJSwgb3IgdGhlIEJhY2sgYnV0dG9uIHRvIGNoYW5nZSBjaG9pY2VzOgotICAgICAgVGV4dCBGcmVuY2g9Vm91cyDqdGVzIG1haW50ZW5hbnQgcHLqdCDgIGluc3RhbGxlciBsZXMgZmljaGllcnMgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBGcmVuY2g9Q2xpcXVleiBzdXIgbGUgYm91dG9uIFN1aXRlIHBvdXIgY29tbWVuY2VyIGwnaW5zdGFsbGF0aW9uIG91IHN1ciBsZSBib3V0b24gUmV0b3VyIHBvdXIgZW50cmVyIGxlcyBpbmZvcm1hdGlvbnMgZCdpbnN0YWxsYXRpb24g4CBub3V2ZWF1LgotICAgICAgVGV4dCBHZXJtYW49U2llIGv2bm5lbiAlQVBQVElUTEUlIG51biBpbnN0YWxsaWVyZW4uCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgR2VybWFuPUtsaWNrZW4gU2llIGF1ZiAiV2VpdGVyIiwgdW0gbWl0IGRlciBJbnN0YWxsYXRpb24genUgYmVnaW5uZW4uIEtsaWNrZW4gU2llIGF1ZiAiWnVy/GNrIiwgdW0gZGllIEluc3RhbGxhdGlvbnNpbmZvcm1hdGlvbmVuIG5ldSBlaW56dWdlYmVuLgotICAgICAgVGV4dCBTcGFuaXNoPVlhIGVzdOEgbGlzdG8gcGFyYSBpbnN0YWxhciAlQVBQVElUTEUlLgotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBTcGFuaXNoPVByZXNpb25lIGVsIGJvdPNuIFNpZ3VpZW50ZSBwYXJhIGNvbWVuemFyIGxhIGluc3RhbGFjafNuIG8gcHJlc2lvbmUgQXRy4XMgcGFyYSB2b2x2ZXIgYSBpbmdyZXNhciBsYSBpbmZvcm1hY2nzbiBwYXJhIGxhIGluc3RhbGFjafNuLgotICAgICAgVGV4dCBJdGFsaWFuPU9yYSDoIHBvc3NpYmlsZSBpbnN0YWxsYXJlICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IEl0YWxpYW49UHJlbWVyZSBpbCBwdWxzYW50ZSBBdmFudGkgcGVyIGF2dmlhcmUgbCdpbnN0YWxsYXppb25lIG8gaWwgcHVsc2FudGUgSW5kaWV0cm8gcGVyIHJlaW5zZXJpcmUgbGUgaW5mb3JtYXppb25pIGRpIGluc3RhbGxhemlvbmUuCi0gICAgZW5kCi0gICAgaXRlbTogRWRpdGJveAotICAgICAgUmVjdGFuZ2xlPTEwOCA2NiAzMjQgMjE5Ci0gICAgICBIZWxwIENvbnRleHQ9MTY3MTE2ODEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAwMDAwMTEwMDAxMTAwMDEwMAotICAgICAgVGV4dD0lU1VNTUFSWSUKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RElTUExBWQotICBWYWx1ZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVVzZXIgbWF5IGhhdmUgY2hhbmdlZCBNQUlORElSLCBzbyByZXNldCBCQUNLVVAgdG8gbWF0Y2guCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVAKLSAgVmFsdWU9JU1BSU5ESVIlXEJBQ0tVUAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkVHSU4gV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIEJBQ0tVUCBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBCQUNLVVBESVIgaXMgaW5pdGlhbGl6ZWQKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUERJUgotICBWYWx1ZT0lQkFDS1VQJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIEJSQU5ESU5HIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIElOSSBmaWxlIG9uIHRoZSBpbnN0YWxsYXRpb24gbWVkaWEuCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBJTkkgRmlsZQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNldHRpbmdzPVtSZWdpc3RyYXRpb25dCi0gIFNldHRpbmdzPU5BTUU9JU5BTUUlCi0gIFNldHRpbmdzPUNPTVBBTlk9JUNPTVBBTlklCi0gIFNldHRpbmdzPQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJlZ2luIHdyaXRpbmcgdG8gdGhlIElOU1RBTEwuTE9HCi1lbmQKLWl0ZW06IE9wZW4vQ2xvc2UgSU5TVEFMTC5MT0cKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q2hlY2sgZnJlZSBkaXNrIHNwYWNlIGNhbGN1bGF0ZXMgZnJlZSBkaXNrIHNwYWNlIGFzIHdlbGwgYXMgY29tcG9uZW50IHNpemVzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JdCBzaG91bGQgYmUgbG9jYXRlZCBiZWZvcmUgYWxsIEluc3RhbGwgRmlsZSBhY3Rpb25zLgotZW5kCi1pdGVtOiBDaGVjayBEaXNrIFNwYWNlCi0gIENvbXBvbmVudD1DT01QT05FTlRTCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgaW5jbHVkZSBzY3JpcHQgYWxsb3dzIHVuaW5zdGFsbCBzdXBwb3J0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICB0aGlzIGlzIG91ciBvd24gVW5pbnN0YWwud3NlLCBhIGNvcHkgb2YgV2lzZSdzIGV4Y2VwdAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1pdCB3cml0ZXMgdG8gSEtDVSAoaW5zdGVhZCBvZiBIS0xNKSBpZiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYWRtaW4gcHJpdnMuCi1lbmQKLWl0ZW06IEluY2x1ZGUgU2NyaXB0Ci0gIFBhdGhuYW1lPS5cVW5pbnN0YWwud3NlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06IHRoZXNlIHNlZW1pbmcgbm8tb3BzIGFjdHVhbGx5IGNvbnZlcnQgdG8gc2hvcnQgZmlsZW5hbWVzLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q09NTU9OCi0gIFZhbHVlPSVDT01NT04lCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPSVNQUlORElSJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIElGL1RIRU4vRUxTRSByZWFkcyB0aGUgY29ycmVjdCByZWdpc3RyeSBlbnRyaWVzIGZvciBzaG9ydGN1dC9pY29uIHBsYWNlbWVudAotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9U1RBUlRVUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnVcUHJvZ3JhbXNcU3RhcnRVcAotICBWYWx1ZSBOYW1lPVN0YXJ0VXAKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1ERVNLVE9QRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcRGVza3RvcAotICBWYWx1ZSBOYW1lPURlc2t0b3AKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1TVEFSVE1FTlVESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51Ci0gIFZhbHVlIE5hbWU9U3RhcnQgTWVudQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUdST1VQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudVxQcm9ncmFtcwotICBWYWx1ZSBOYW1lPVByb2dyYW1zCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q1NUQVJUVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lU1RBUlRVUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gU3RhcnR1cAotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNERVNLVE9QRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JURFU0tUT1BESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIERlc2t0b3AKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DU1RBUlRNRU5VRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVNUQVJUTUVOVURJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gU3RhcnQgTWVudQotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNHUk9VUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVHUk9VUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gUHJvZ3JhbXMKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIHRoZSBXaXphcmQgbGVmdCB0aGlzIGJsb2NrIGVtcHR5IQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1QZXJoYXBzIGl0J3Mgb25seSByZWxldmFudCBvbiBXaW5kb3dzIDMuMS4KLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUVORCBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgdXNlciBjaG9zZSBhIG5vbi1hZG1pbiBpbnN0YWxsIGluICJBZHZhbmNlZCBPcHRpb25zIi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBzaG91bGQgY29tZSBhZnRlciB0aGUgaW5jbHVkZSBvZiBVbmluc3RhbC53c2UgYWJvdmUsIGJlY2F1c2UKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9d3JpdGluZyB1bmluc3RhbGwgaW5mbyB0byBIS0NVIGlzIGluZWZmZWN0aXZlIGV4Y2VwdCB1bmRlciBXaW4ySy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DR1JPVVBfU0FWRQotICBWYWx1ZT0lR1JPVVAlCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPSVDR1JPVVBESVIlXCVHUk9VUCUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPSVHUk9VUERJUiVcJUdST1VQJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Mb25nIHNlY3Rpb24gdG8gaW5zdGFsbCBmaWxlcy4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURMTERFU1QKLSAgVmFsdWU9JVNZUzMyJQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RExMREVTVAotICBWYWx1ZT0lTUFJTkRJUiUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsIHRoZSBsaWNlbnNlIGV2ZW4gaWYgdGhleSBkZXNlbGVjdCBldmVyeXRoaW5nIDx3aW5rPi4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWNlbnNlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMSUNFTlNFLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxSRUFETUUudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxtaXNjXG5ld3MKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXE5FV1MudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWNvbnMgLS0gYWx3YXlzIGluc3RhbGwgc28gdGhhdCB0aGUgdW5pbnN0YWxsZXIgY2FuIHVzZSB0aGVtIGZvciBpdHMgb3duIGRpc3BsYXkuCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljb24uaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweWNvbi5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Yy5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5Yy5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5LmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHkuaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZXNlIGFycmFuZ2UgdG8gKHJlY3Vyc2l2ZWx5ISkgZGVsZXRlIGFsbCAucHljIGFuZCAucHlvIGZpbGVzIGF0IHVuaW5zdGFsbCB0aW1lLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzICJkb2VzIHRoZSByaWdodCB0aGluZyI6ICBhbnkgZGlyZWN0b3JpZXMgbGVmdCBlbXB0eSBhdCB0aGUgZW5kIGFyZSByZW1vdmVkLgotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PUZpbGUgVHJlZTogJU1BSU5ESVIlXCoucHljCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RmlsZSBUcmVlOiAlTUFJTkRJUiVcKi5weW8KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FeGVjdXRhYmxlcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uLmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHl0aG9uLmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdzl4cG9wZW4uZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVx3OXhwb3Blbi5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RXh0ZW5zaW9uIG1vZHVsZSBETExzICgucHlkKTsga2VlcCBpbiBzeW5jaCB3aXRoIGxpYnMgZGlyZWN0b3J5IG5leHQKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnJlZy5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcd2lucmVnLnB5ZAotICBEZXNjcmlwdGlvbj1FeHRlbnNpb24gbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfY3N2LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfY3N2LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3JlLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3JlLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3NsLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3NsLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3ltdGFibGUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zeW10YWJsZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3Rlc3RjYXBpLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfdGVzdGNhcGkucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90a2ludGVyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfdGtpbnRlci5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NvY2tldC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NvY2tldC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cYnoyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xiejIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGRhdGV0aW1lLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xkYXRldGltZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cbW1hcC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcbW1hcC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccGFyc2VyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xwYXJzZXIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5ZXhwYXQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHB5ZXhwYXQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHNlbGVjdC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcc2VsZWN0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx1bmljb2RlZGF0YS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcdW5pY29kZWRhdGEucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnNvdW5kLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x3aW5zb3VuZC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cemxpYi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcemxpYi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TGluayBsaWJyYXJpZXMgKC5saWIpOyBrZWVwIGluIHN5bmNoIHdpdGggRExMcyBhYm92ZSwgZXhjZXB0IHRoYXQgdGhlIFB5dGhvbiBsaWIgbGl2ZXMgaGVyZS4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnJlZy5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcd2lucmVnLmxpYgotICBEZXNjcmlwdGlvbj1MaW5rIGxpYnJhcnkgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX2Nzdi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX2Nzdi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NyZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NyZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NzbC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NzbC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3N5bXRhYmxlLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3ltdGFibGUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90ZXN0Y2FwaS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3Rlc3RjYXBpLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGtpbnRlci5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3RraW50ZXIubGliCi0gIERlc2NyaXB0aW9uPUV4dGVuc2lvbiBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zb2NrZXQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zb2NrZXQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGJ6Mi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcYnoyLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxkYXRldGltZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcZGF0ZXRpbWUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXG1tYXAubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXG1tYXAubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHBhcnNlci5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccGFyc2VyLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweWV4cGF0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xweWV4cGF0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxzZWxlY3QubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHNlbGVjdC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdW5pY29kZWRhdGEubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHVuaWNvZGVkYXRhLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5zb3VuZC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcd2luc291bmQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHpsaWIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHpsaWIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24lX3B5bWFqb3JfJSVfcHltaW5vcl8lLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xweXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NYWluIFB5dGhvbiBETEwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGVsbCBXaXNlIGl0J3MgT0sgdG8gZGVsZXRlIHRoZSBQeXRob24gRExMIGF0IHVuaW5zdGFsbCB0aW1lLAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1kZXNwaXRlIHRoYXQgd2UgKG1heSkgd3JpdGUgaXQgaW50byBhIHN5c3RlbSBkaXJlY3RvcnkuCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9Tm9uLVN5c3RlbSBGaWxlOgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uJV9weW1ham9yXyUlX3B5bWlub3JfJS5kbGwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXHB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUuZGxsCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxpYnJhcmllcyAoTGliLykKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliCi0gIERlc2NyaXB0aW9uPUxpYnJhcnkgTW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxjb21waWxlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcY29tcGlsZXIKLSAgRGVzY3JpcHRpb249UHl0aG9uIGNvbXBpbGVyIHdyaXR0ZW4gaW4gUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzCi0gIERlc2NyaXB0aW9uPURpc3RyaWJ1dGlvbiB1dGlsaXR5IG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXFJFQURNRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QuZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcY29tbWFuZF90ZW1wbGF0ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kXGNvbW1hbmRfdGVtcGxhdGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsCi0gIERlc2NyaXB0aW9uPUxpYnJhcnkgZW1haWwgcGFja2FnZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3QKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCouZ2lmCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLmF1Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbmNvZGluZ3NcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVuY29kaW5ncwotICBEZXNjcmlwdGlvbj1Vbmljb2RlIGVuY29kaW5nIHRhYmxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxob3RzaG90XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxob3RzaG90Ci0gIERlc2NyaXB0aW9uPUZhc3QgUHl0aG9uIHByb2ZpbGVyCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGxpYi1vbGRcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGxpYi1vbGQKLSAgRGVzY3JpcHRpb249T2Jzb2xldGUgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0a2ludGVyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0a2ludGVyCi0gIERlc2NyaXB0aW9uPVRraW50ZXIgcmVsYXRlZCBsaWJyYXJ5IG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcbG9nZ2luZ1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcbG9nZ2luZwotICBEZXNjcmlwdGlvbj1Mb2dnaW5nIHBhY2thZ2UKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcc2l0ZS1wYWNrYWdlc1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxzaXRlLXBhY2thZ2VzXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249U2l0ZSBwYWNrYWdlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbAotICBEZXNjcmlwdGlvbj1YTUwgc3VwcG9ydCBwYWNrYWdlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxkb21cKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxkb20KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxccGFyc2Vyc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXHBhcnNlcnMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcc2F4XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxcc2F4Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUMgSW5jbHVkZSBmaWxlcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGluY2x1ZGVcKi5oCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxpbmNsdWRlCi0gIERlc2NyaXB0aW9uPUhlYWRlciBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljb25maWcuaAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcaW5jbHVkZVxweWNvbmZpZy5oCi0gIERlc2NyaXB0aW9uPUhlYWRlciBmaWxlcyAocHljb25maWcuaCkKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWljcm9zb2Z0IEMgcnVudGltZSBsaWJyYXJpZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1NZU18lXE1TVkNJUlQuRExMCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxNU1ZDSVJULkRMTAotICBEZXNjcmlwdGlvbj1WaXN1YWwgQysrIFJ1bnRpbWUgRExMcwotICBGbGFncz0wMDAwMDExMDAwMDEwMDExCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9TWVNfJVxNU1ZDUlQuRExMCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxNU1ZDUlQuRExMCi0gIERlc2NyaXB0aW9uPVZpc3VhbCBDKysgUnVudGltZSBETExzCi0gIEZsYWdzPTAwMDAwMTEwMDAwMTAwMTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBUY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRjbC9UawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXC4uXCVfdGNsZGlyXyVcYmluXCouZGxsCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzCi0gIERlc2NyaXB0aW9uPVRjbC9UayBiaW5hcmllcyBhbmQgbGlicmFyaWVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlwuLlwlX3RjbGRpcl8lXGxpYlwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHRjbAotICBEZXNjcmlwdGlvbj1UY2wvVGsgYmluYXJpZXMgYW5kIGxpYnJhcmllcwotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JRExFCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLmRlZgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlxJY29uc1wqCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYlxJY29ucwotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXFRvb2xzXHNjcmlwdHNcaWRsZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcKLSAgRGVzY3JpcHRpb249SURMRSBib290c3RyYXAgc2NyaXB0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdpbmRvd3MgcHlkb2MgZHJpdmVyCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLnB5dwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1XaW5kb3dzIHB5ZG9jIGRyaXZlcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QzogZG9jcwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9ET0NfJVwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERvYwotICBEZXNjcmlwdGlvbj1QeXRob24gRG9jdW1lbnRhdGlvbiAoSFRNTCkKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUQ6IHRvb2xzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCouZG9jCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHNcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x3ZWJjaGVja2VyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHdlYmNoZWNrZXIKLSAgRGVzY3JpcHRpb249V2ViIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcd2ViY2hlY2tlclxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHdlYmNoZWNrZXJcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1XZWIgY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcdmVyc2lvbmNoZWNrXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHZlcnNpb25jaGVjawotICBEZXNjcmlwdGlvbj1WZXJzaW9uIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcdmVyc2lvbmNoZWNrXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcdmVyc2lvbmNoZWNrXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249VmVyc2lvbiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVx4XCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVcWAotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gWCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIFJFQURNRQotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHB5bmNoZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXHB5bmNoZS5weQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gbWFpbgotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHB5bmNoZS5weXcKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxweW5jaGUucHl3Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBub2NvbnNvbGUgbWFpbgotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXGkxOG5cKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcaTE4bgotICBEZXNjcmlwdGlvbj1JbnRlcm5hdGlvbmFsaXphdGlvbiBoZWxwZXJzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FOiB0ZXN0IHN1aXRlCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFxhdWRpb3Rlc3QuYXUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0XGF1ZGlvdGVzdC5hdQotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi51dWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi54bWwKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLm91dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCouYnoyCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi50YXIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLmd6Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3Rcb3V0cHV0XCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3Rcb3V0cHV0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IG91dHB1dCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RE9ORSB3aXRoIGZpbGUgY29weWluZy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHJlc3QgaXMgcmVnaXN0cnkgYW5kIFN0YXJ0IE1lbnUgZmlkZGxpbmcuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4gIEFzIHVzdWFsLCBBZG1pbiBwcml2cyBnZXQgaW4gdGhlIHdheSwgYnV0IHdpdGggYSB0d2lzdDoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9WW91IGRvbid0IG5lZWQgYWRtaW4gcHJpdnMgdG8gd3JpdGUgdG8gSEtFWV9DTEFTU0VTX1JPT1QgKmV4Y2VwdCogdW5kZXIgV2luMksuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU9uIFdpbjJLLCBhIHVzZXIgd2l0aG91dCBBZG1pbiBwcml2cyBoYXMgdG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucyB1bmRlciBIS0NVXFNvZnR3YXJlXENMQVNTRVMgaW5zdGVhZC4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QnV0IHdoaWxlIHlvdSBjYW4gKmRvKiB0aGF0IHVuZGVyIG90aGVyIGZsYXZvcnMgb2YgV2luZG93cyB0b28sIGl0IGhhcyBubyB1c2VmdWwgZWZmZWN0IGV4Y2VwdCBpbiBXaW4ySy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMTExMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSB0eXBlcy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGUKLSAgTmV3IFZhbHVlPUNvbXBpbGVkIFB5dGhvbiBGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHljLmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSBleHRlbnNpb25zLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5Ci0gIE5ldyBWYWx1ZT1QeXRob24uRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5dwotICBOZXcgVmFsdWU9UHl0aG9uLk5vQ29uRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5dwotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weWMKLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weW8KLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSB0eXBlcy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZSAobm8gY29uc29sZSkKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZQotICBOZXcgVmFsdWU9Q29tcGlsZWQgUHl0aG9uIEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweWMuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSBleHRlbnNpb25zLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHkKLSAgTmV3IFZhbHVlPVB5dGhvbi5GaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHkKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHl3Ci0gIE5ldyBWYWx1ZT1QeXRob24uTm9Db25GaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHl3Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5YwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5bwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JZiB3ZSdyZSBpbnN0YWxsaW5nIElETEUsIGFsc28gc2V0IGFuIEVkaXQgY29udGV4dCBtZW51IGFjdGlvbiB0byB1c2UgSURMRSwgZm9yIC5weSBhbmQgLnB5dyBmaWxlcy4KLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdGVyIFB5dGhvbiBwYXRocy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdG8gSEtMTSBmb3IgYWRtaW4sIGVsc2UgSEtDVS4gIEtlZXAgdGhlc2UgYmxvY2tzIG90aGVyd2lzZSBpZGVudGljYWwhCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXEN1cnJlbnRWZXJzaW9uCi0gIFJvb3Q9MTMwCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAKLSAgTmV3IFZhbHVlPSVDR1JPVVBfU0FWRSUKLSAgTmV3IFZhbHVlPQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxQeXRob25QYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcTGliOyVNQUlORElSJVxETExzCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcTW9kdWxlcwotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcCBQYXRoc1xQeXRob24uZXhlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHl0aG9uLmV4ZQotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXEN1cnJlbnRWZXJzaW9uCi0gIFJvb3Q9MTI5Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAKLSAgTmV3IFZhbHVlPSVDR1JPVVBfU0FWRSUKLSAgTmV3IFZhbHVlPQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxQeXRob25QYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcTGliOyVNQUlORElSJVxETExzCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcTW9kdWxlcwotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcCBQYXRoc1xQeXRob24uZXhlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHl0aG9uLmV4ZQotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0cnkgZmlkZGxpbmcgZm9yIGRvY3MuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHRvIEhLTE0gZm9yIGFkbWluLCBlbHNlIEhLQ1UuICBLZWVwIHRoZXNlIGJsb2NrcyBvdGhlcndpc2UgaWRlbnRpY2FsIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2V0IHRoZSBhcHAgcHVibGlzaGVyIGFuZCBVUkwgZW50cmllcyBmb3IgV2luMksgYWRkL3JlbW92ZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SXQgZG9lc24ndCBodXJ0IG9uIG90aGVyIHN5c3RlbXMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUFzIHVzdWFsLCB3cml0ZSB0byBIS0xNIG9yIEhLQ1UgZGVwZW5kaW5nIG9uIEFkbWluIHByaXZzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DQVVUSU9OOiAgSWYgeW91IHNldCB0aGlzIGluZm8gb24gdGhlICJXaW5kb3dzIDIwMDAiIHBhZ2UgKHN0ZXAgNikgb2YgdGhlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGxhdGlvbiBFeHBlcnQsIGl0IG9ubHkgc2hvd3MgdXAgaW4gdGhlICJJZiIgYmxvY2sgYmVsb3cuICBLZWVwIGluIHN5bmNoIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPUhlbHBMaW5rCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPVB5dGhvbkxhYnMgYXQgWm9wZSBDb3Jwb3JhdGlvbgotICBWYWx1ZSBOYW1lPVB1Ymxpc2hlcgotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9VVJMSW5mb0Fib3V0Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVQWVZFUl9TVFJJTkclCi0gIFZhbHVlIE5hbWU9RGlzcGxheVZlcnNpb24KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5LmljbywtMAotICBWYWx1ZSBOYW1lPURpc3BsYXlJY29uCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1IZWxwTGluawotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1QeXRob25MYWJzIGF0IFpvcGUgQ29ycG9yYXRpb24KLSAgVmFsdWUgTmFtZT1QdWJsaXNoZXIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPVVSTEluZm9BYm91dAotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lUFlWRVJfU1RSSU5HJQotICBWYWx1ZSBOYW1lPURpc3BsYXlWZXJzaW9uCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweS5pY28sLTAKLSAgVmFsdWUgTmFtZT1EaXNwbGF5SWNvbgotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Qb3B1bGF0ZSBTdGFydCBNZW51IGdyb3VwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNob3J0Y3V0IHRvIGluc3RhbGxlciBubyBtYXR0ZXIgd2hhdC4KLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVcdW53aXNlLmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFVuaW5zdGFsbCBQeXRob24ubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbi5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxQeXRob24gKGNvbW1hbmQgbGluZSkubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBJY29uIFBhdGhuYW1lPSVNQUlORElSJVxweWNvbi5pY28KLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxJRExFIChQeXRob24gR1VJKS5sbmsKLSAgQ29tbWFuZCBPcHRpb25zPSIlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXciCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcTW9kdWxlIERvY3MubG5rCi0gIENvbW1hbmQgT3B0aW9ucz0iJU1BSU5ESVIlXFRvb2xzXFNjcmlwdHNccHlkb2NndWkucHl3IgotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgRGVzdGluYXRpb249JUdST1VQJVxQeXRob24gTWFudWFscy5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SSBkb24ndCB0aGluayB3ZSBuZWVkIHRoaXMsIGJ1dCBoYXZlIGFsd2F5cyBkb25lIGl0LgotZW5kCi1pdGVtOiBTZWxmLVJlZ2lzdGVyIE9DWHMvRExMcwotICBEZXNjcmlwdGlvbj1VcGRhdGluZyBTeXN0ZW0gQ29uZmlndXJhdGlvbiwgUGxlYXNlIFdhaXQuLi4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PURvbid0IGVuYWJsZSAiRGVsZXRlIGluLXVzZSBmaWxlcyIuICBIZXJlJ3Mgd2hhdCBoYXBwZW5zOgotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsIFB5dGhvbjsgdW5pbnN0YWxsIFB5dGhvbjsgaW5zdGFsbCBQeXRob24gYWdhaW4uICBSZWJvb3QgdGhlIG1hY2hpbmUuCi1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PU5vdyBVTldJU0UuRVhFIGlzIG1pc3NpbmcuICBJIHRoaW5rIHRoaXMgaXMgYSBXaXNlIGJ1ZywgYnV0IHNvIGl0IGdvZXMuCi1lbmQKLXJlbWFya2VkIGl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RGVsZXRlIGluLXVzZSBmaWxlczogT24KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFdpemFyZCBCbG9jawotICBEaXJlY3Rpb24gVmFyaWFibGU9RElSRUNUSU9OCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBCaXRtYXAgUGF0aG5hbWU9LlxpbnN0YWxsZXIuYm1wCi0gIFggUG9zaXRpb249OQotICBZIFBvc2l0aW9uPTEwCi0gIEZpbGxlciBDb2xvcj0xMTE3Mzc1OQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPUZpbmlzaGVkCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZGaW5pc2gKLSAgICAgIFRleHQgRnJlbmNoPSZGaW4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIKLSAgICAgIFRleHQgU3BhbmlzaD0mVGVybWluYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mRmluZQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBWYXJpYWJsZT1ESVNBQkxFRAotICAgICAgVmFsdWU9IQotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA0OAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1JbnN0YWxsYXRpb24gQ29tcGxldGVkIQotICAgICAgVGV4dCBGcmVuY2g9SW5zdGFsbGF0aW9uIHRlcm1pbullICEKLSAgICAgIFRleHQgR2VybWFuPURpZSBJbnN0YWxsYXRpb24gaXN0IGFiZ2VzY2hsb3NzZW4hCi0gICAgICBUZXh0IFNwYW5pc2g9oUluc3RhbGFjafNuIHRlcm1pbmFkYSEKLSAgICAgIFRleHQgSXRhbGlhbj1JbnN0YWxsYXppb25lIGNvbXBsZXRhdGEhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ0IDMyMCA4MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSVBUFBUSVRMRSUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PVByZXNzIHRoZSBGaW5pc2ggYnV0dG9uIHRvIGV4aXQgdGhpcyBpbnN0YWxsYXRpb24uCi0gICAgICBUZXh0IEZyZW5jaD0lQVBQVElUTEUlIGVzdCBtYWludGVuYW50IGluc3RhbGzpLgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEZyZW5jaD1DbGlxdWV6IHN1ciBsZSBib3V0b24gRmluIHBvdXIgcXVpdHRlciBsJ2luc3RhbGxhdGlvbi4KLSAgICAgIFRleHQgR2VybWFuPSVBUFBUSVRMRSUgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgR2VybWFuPUtsaWNrZW4gU2llIGF1ZiAiV2VpdGVyIiwgdW0gZGllIEluc3RhbGxhdGlvbiB6dSBiZWVuZGVuLgotICAgICAgVGV4dCBTcGFuaXNoPSVBUFBUSVRMRSUgc2UgaGEgaW5zdGFsYWRvIGNvbiDpeGl0by4KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgU3BhbmlzaD1QcmVzaW9uZSBlbCBib3TzbiBUZXJtaW5hciBwYXJhIHNhbGlyIGRlIGVzdGEgaW5zdGFsYWNp824uCi0gICAgICBUZXh0IEl0YWxpYW49TCdpbnN0YWxsYXppb25lICVBUFBUSVRMRSUg6CBzdGF0YSBwb3J0YXRhIGEgdGVybWluZSBjb24gc3VjY2Vzc28uCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IEl0YWxpYW49UHJlbWVyZSBpbCBwdWxzYW50ZSBGaW5lIHBlciB1c2NpcmUgZGFsbCdpbnN0YWxsYXppb25lLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA2IDEwNSAzMTIgMjEwCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9U3BlY2lhbCBXaW5kb3dzIHRoYW5rcyB0bzoKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PVdpc2UgU29sdXRpb25zLCBmb3IgdGhlIHVzZSBvZiBJbnN0YWxsTWFzdGVyIDguMS4KLSAgICAgIFRleHQ9ICAgIGh0dHA6Ly93d3cud2lzZXNvbHV0aW9ucy5jb20vCi0gICAgICBUZXh0PQotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9TGV0dEVycm9yLCBFcmlrIHZhbiBCbG9rbGFuZCwgZm9yIHRoZSBQeXRob24gZm9yIFdpbmRvd3MgZ3JhcGhpYy4KLSAgICAgIFRleHQ9ICAgIGh0dHA6Ly93d3cubGV0dGVycm9yLmNvbS8KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1NYXJrIEhhbW1vbmQsIHdpdGhvdXQgd2hvc2UgeWVhcnMgb2YgZnJlZWx5IHNoYXJlZCBXaW5kb3dzIGV4cGVydGlzZSwgUHl0aG9uIGZvciBXaW5kb3dzIHdvdWxkIHN0aWxsIGJlIFB5dGhvbiBmb3IgRE9TLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwNiA5NSAzMTIgOTYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDEKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBOZXcgRXZlbnQKLSAgTmFtZT1DYW5jZWwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBpbmNsdWRlIHNjcmlwdCBzdXBwb3J0cyBhIHJvbGxiYWNrIHRvIHByZWluc3RhbGxhdGlvbiBzdGF0ZSBpZiB0aGUgdXNlciBjaG9vc2VzIHRvIGNhbmNlbCBiZWZvcmUgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZS4KLWVuZAotaXRlbTogSW5jbHVkZSBTY3JpcHQKLSAgUGF0aG5hbWU9JV9XSVNFXyVcSU5DTFVERVxyb2xsYmFjay53c2UKLWVuZApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjNDE4NC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDgyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9uY29yZSINCi0JUHJvamVjdEdVSUQ9IntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMzB9Ig0KLQlSb290TmFtZXNwYWNlPSJweXRob25jb3JlIg0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9uY29yZSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztVU0VfRExfRVhQT1JUO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzNfZC5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zM19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IkZBTFNFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGFtZDY0LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJfaW8iDQotICAgICAgICAgICAgRmlsdGVyPSIiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJ6bGliIg0KLQkJCUZpbHRlcj0iIj4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYyI+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3N2LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9qc29uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sc3Byb2YuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGNcX3N1YnByb2Nlc3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGltZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFjY3UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGFjY2VsZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXNkbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxiaXRzZXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjZXZhbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvZGVjcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvbXBpbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGNvbmZpZy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xkbF9udC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHRvYS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHlubG9hZF93aW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGFyZ3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xnZXRwYXRocC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHZlcnNpb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdyYW1pbml0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtYXJzaGFsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0gCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c25wcmludGYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c3RydG91bC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2V0b2suYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHBlZXBob2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5YXJlbmEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5Y3R5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweW1hdGguYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RhdGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cnRvZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9udC5yYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccmFuZG9tLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGExbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3ltdGFibGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0aHJlYWQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0cmFjZWJhY2suYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBjXHdpbnJlZy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDdmNTAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbnciDQotCVNjY1Byb2plY3ROYW1lPSJweXRob253Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob253X2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9ud19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9yZWFkbWUudHh0IGIvUEMvVlM3LjEvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkOGE3MC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDcuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCi05NSwgOTggYW5kIE5ULiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNy4xCi0oYS5rLmEuIFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzKS4KLShGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL1BDL3JlYWRtZS50eHQuKQotCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLnNsbiIgaW4gTVNWQysrLCBzZWxlY3QKLXRoZSBEZWJ1ZyBvciBSZWxlYXNlIHNldHRpbmcgKHVzaW5nICJTb2x1dGlvbiBDb25maWd1cmF0aW9uIiBmcm9tCi10aGUgIlN0YW5kYXJkIiB0b29sYmFyIiksIGFuZCBidWlsZCB0aGUgcHJvamVjdHMuCi0KLVRoZSBwcm9wZXIgb3JkZXIgdG8gYnVpbGQgc3VicHJvamVjdHM6Ci0KLTEpIHB5dGhvbmNvcmUgKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBETEwgYW5kIGxpYnJhcnkgZmlsZXMsCi0gICAgICAgICAgICAgICBweXRob24zMy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKLSAgICAgICAgICAgICAgTk9URTogIGluIHByZXZpb3VzIHJlbGVhc2VzLCB0aGlzIHN1YnByb2plY3Qgd2FzCi0gICAgICAgICAgICAgIG5hbWVkIGFmdGVyIHRoZSByZWxlYXNlIG51bWJlciwgZS5nLiBweXRob24yMC4KLQotMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKLSAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCi0KLTMpIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgYXMgZGVzaXJlZCBvciBuZWVkZWQgKG5vdGU6ICB5b3UgcHJvYmFibHkgZG9uJ3QKLSAgIHdhbnQgdG8gYnVpbGQgbW9zdCBvZiB0aGUgb3RoZXIgc3VicHJvamVjdHMsIHVubGVzcyB5b3UncmUgYnVpbGRpbmcgYW4KLSAgIGVudGlyZSBQeXRob24gZGlzdHJpYnV0aW9uIGZyb20gc2NyYXRjaCwgb3Igc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzCi0gICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudCwgb3IgYXJlIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdAotICAgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQotCi1XaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMzX2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLXB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwotc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKLXVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQotd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKLQotVGhlIGZvbGxvd2luZyBzdWJwcm9qZWN0cyB3aWxsIGdlbmVyYWxseSBOT1QgYnVpbGQgb3V0IG9mIHRoZSBib3guICBUaGV5Ci13cmFwIGNvZGUgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSBiYXNlCi1wYWNrYWdlcyBmaXJzdCBhbmQgdW5wYWNrIHRoZW0gaW50byBzaWJsaW5ncyBvZiBQQydzIHBhcmVudAotZGlyZWN0b3J5OyBmb3IgZXhhbXBsZSwgaWYgdGhpcyBkaXJlY3RvcnkgaXMgLi4uLlxkaXN0XHRydW5rXFBDXFZTNy4xLAotdW5wYWNrIGludG8gbmV3IHN1YmRpcmVjdG9yaWVzIG9mIGRpc3RcLgotCi1fdGtpbnRlcgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFJlcXVpcmVzIGJ1aWxkaW5nCi0gICAgVGNsL1RrIGZpcnN0LiAgRm9sbG93aW5nIGFyZSBpbnN0cnVjdGlvbnMgZm9yIFRjbC9UayA4LjQuMTIuCi0KLSAgICBHZXQgc291cmNlCi0gICAgLS0tLS0tLS0tLQotICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsOC40LjEyCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGs4LjQuMTIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjAKLQotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNy4xIG9uIFdpbmRvd3MgWFApCi0gICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgVXNlICJTdGFydCAtPiBBbGwgUHJvZ3JhbXMgLT4gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzCi0gICAgICAgICAtPiBWaXN1YWwgU3R1ZGlvIC5ORVQgVG9vbHMgLT4gVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMgQ29tbWFuZCBQcm9tcHQiCi0gICAgdG8gZ2V0IGEgc2hlbGwgd2luZG93IHdpdGggdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgc2V0dGluZ3MKLSAgICBjZCBkaXN0XHRjbDguNC4xMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YwotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0Ci0KLSAgICAgICAgT24gV2luWFAgUHJvLCB3aG9sbHkgdXAgdG8gZGF0ZSBhcyBvZiAzMC1BdWctMjAwNDoKLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgMTA2NzggICBQYXNzZWQgIDk5NjkgICAgU2tpcHBlZCA3MDkgICAgIEZhaWxlZCAgMAotICAgICAgICBTb3VyY2VkIDEyOSBUZXN0IEZpbGVzLgotCi0gICAgQnVpbGQgVGsKLSAgICAtLS0tLS0tLQotICAgIGNkIGRpc3RcdGs4LjQuMTJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiB0ZXN0Ci0KLSAgICAgICAgT24gV2luWFAgUHJvLCB3aG9sbHkgdXAgdG8gZGF0ZSBhcyBvZiAzMC1BdWctMjAwNDoKLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgODQyMCAgICBQYXNzZWQgIDY4MjYgICAgU2tpcHBlZCAxNTgxICAgIEZhaWxlZCAgMTMKLSAgICAgICAgU291cmNlZCA5MSBUZXN0IEZpbGVzLgotICAgICAgICBGaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IGNhbnZJbWcudGVzdCBzY3JvbGxiYXIudGVzdCB0ZXh0V2luZC50ZXN0IHdpbldtLnRlc3QKLQotICAgQnVpbHQgVGl4Ci0gICAtLS0tLS0tLS0KLSAgIGNkIGRpc3RcdGl4LTguNC4wXHdpbgotICAgbm1ha2UgLWYgcHl0aG9uLm1hawotICAgbm1ha2UgLWYgcHl0aG9uLm1hayBpbnN0YWxsCi0KLWJ6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQotICAgICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J6aXAyLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgcHl0aG9uLm9yZyBjb3B5IGludG8gdGhlIGRpc3QKLSAgICBkaXJlY3Rvcnk6Ci0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9iemlwMi0xLjAuMwotCi0gICAgQSBjdXN0b20gcHJlLWxpbmsgc3RlcCBpbiB0aGUgYnoyIHByb2plY3Qgc2V0dGluZ3Mgc2hvdWxkIG1hbmFnZSB0bwotICAgIGJ1aWxkIGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIgYnkgbWFnaWMgYmVmb3JlIGJ6Mi5weWQgKG9yIGJ6Ml9kLnB5ZCkgaXMKLSAgICBsaW5rZWQgaW4gVlM3LjFcLgotICAgIEhvd2V2ZXIsIHRoZSBiejIgcHJvamVjdCBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIHJlbW92ZSBhbnl0aGluZyB1bmRlcgotICAgIGJ6aXAyLTEuMC4zXCB3aGVuIHlvdSBkbyBhIGNsZWFuLCBzbyBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGJ6aXAyLmxpYgotICAgIHlvdSBuZWVkIHRvIGNsZWFuIHVwIGJ6aXAyLTEuMC4zXCBieSBoYW5kLgotCi0gICAgVGhlIGJ1aWxkIHN0ZXAgc2hvdWxkbid0IHlpZWxkIGFueSB3YXJuaW5ncyBvciBlcnJvcnMsIGFuZCBzaG91bGQgZW5kCi0gICAgYnkgZGlzcGxheWluZyA2IGJsb2NrcyBlYWNoIHRlcm1pbmF0ZWQgd2l0aAotICAgICAgICBGQzogbm8gZGlmZmVyZW5jZXMgZW5jb3VudGVyZWQKLQotICAgIEFsbCBvZiB0aGlzIG1hbmFnZWQgdG8gYnVpbGQgYnppcDItMS4wLjNcbGliYnoyLmxpYiwgd2hpY2ggdGhlIFB5dGhvbgotICAgIHByb2plY3QgbGlua3MgaW4uCi0KLV9zcWxpdGUzCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIFNRTGl0ZSBsaWJyYXJ5LgotICAgIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotICAgIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS1zb3VyY2UtMy4zLjQKLSAgICAKLSAgICBUbyB1c2UgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaW4gYSBQeXRob24gYnVpbGQgdHJlZSwgY29weSBzcWxpdGUzLmRsbCBpbnRvCi0gICAgdGhlIFZTNy4xIGZvbGRlci4KLQotX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KLQotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0wLjkuOGEKLQotICAgIEFsdGVybmF0aXZlbHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLgotICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCi0gICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KLQotICAgIFlvdSBtdXN0IGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUGVybC8KLSAgICBhcyB0aGlzIGlzIHVzZWQgYnkgdGhlIE9wZW5TU0wgYnVpbGQgcHJvY2Vzcy4gIENvbXBsYWluIHRvIHRoZW0gPHdpbms+LgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBidWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCi0KLSAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKLSAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgotCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCi0KLUJ1aWxkaW5nIGZvciBJdGFuaXVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgcHJvamVjdCBmaWxlcyBzdXBwb3J0IGEgUmVsZWFzZUl0YW5pdW0gY29uZmlndXJhdGlvbiB3aGljaCBjcmVhdGVzCi1XaW42NC9JdGFuaXVtIGJpbmFyaWVzLiBGb3IgdGhpcyB0byB3b3JrLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBQbGF0Zm9ybQotU0RLLCBpbiBwYXJ0aWN1bGFyIHRoZSA2NC1iaXQgc3VwcG9ydC4gVGhpcyBpbmNsdWRlcyBhbiBJdGFuaXVtIGNvbXBpbGVyCi0oZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBTREsgbGlrZWx5IGluY2x1ZGUgYW4gQU1ENjQgY29tcGlsZXIgYXMgd2VsbCkuCi1JbiBhZGRpdGlvbiwgeW91IG5lZWQgdGhlIFZpc3VhbCBTdHVkaW8gcGx1Z2luIGZvciBleHRlcm5hbCBDIGNvbXBpbGVycywKLWZyb20gaHR0cDovL3NmLm5ldC9wcm9qZWN0cy92c2V4dGNvbXAuIFRoZSBwbHVnaW4gd2lsbCB3cmFwIGNsLmV4ZSwgdG8KLWxvY2F0ZSB0aGUgcHJvcGVyIHRhcmdldCBjb21waWxlciwgYW5kIGNvbnZlcnQgY29tcGlsZXIgb3B0aW9ucwotYWNjb3JkaW5nbHkuIFRoZSBwcm9qZWN0IGZpbGVzIHJlcXVpcmUgYXRsZWFzdCB2ZXJzaW9uIDAuOS4KLQotQnVpbGRpbmcgZm9yIEFNRDY0Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBSZWxlYXNlQU1ENjQgY29uZmlndXJhdGlvbiBpcyB2ZXJ5IHNpbWlsYXIKLXRvIHRoZSBJdGFuaXVtIGNvbmZpZ3VyYXRpb247IG1ha2Ugc3VyZSB5b3UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZgotdnNleHRjb21wLgotCi1CdWlsZGluZyBQeXRob24gVXNpbmcgdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIFZpc3VhbCBDKysgY2FuIGJlIHVzZWQgYWxtb3N0IHVuY2hhbmdlZCB3aXRoIHRoZSBmcmVlIE1TCi1Ub29sa2l0IENvbXBpbGVyLiBUaGlzIHByb3ZpZGVzIGEgd2F5IG9mIGJ1aWxkaW5nIFB5dGhvbiB1c2luZyBmcmVlbHkKLWF2YWlsYWJsZSBzb2Z0d2FyZS4KLQotTm90ZSB0aGF0IE1pY3Jvc29mdCBoYXZlIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbgotbm8gbG9uZ2VyIGJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzdGlsbAotY29ycmVjdCwgYnV0IHlvdSBuZWVkIHRvIGFscmVhZHkgaGF2ZSBhIGNvcHkgb2YgdGhlIGNvbXBpbGVyIGluIG9yZGVyIHRvIHVzZQotdGhlbS4gTWljcm9zb2Z0IG5vdyBzdXBwbHkgVmlzdWFsIEMrKyAyMDA4IEV4cHJlc3MgRWRpdGlvbiBmb3IgZnJlZSwgYnV0IHRoaXMKLWlzIE5PVCBjb21wYXRpYmxlIHdpdGggVmlzdWFsIEMrKyA3LjEgKGl0IHVzZXMgYSBkaWZmZXJlbnQgQyBydW50aW1lKSwgYW5kIHNvCi1jYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHZlcnNpb24gb2YgUHl0aG9uIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKLXB5dGhvbi5vcmcgYnVpbGQuIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB1c2luZyBWaXN1YWwgQysrIDIwMDggRXhwcmVzcwotRWRpdGlvbiwgaG93ZXZlciwgeW91IHNob3VsZCBsb29rIGF0IHRoZSBQQ0J1aWxkIGRpcmVjdG9yeS4KLQotUmVxdWlyZW1lbnRzCi0KLSAgICBUbyBidWlsZCBQeXRob24sIHRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHJlcXVpcmVkOgotCi0gICAgKiBUaGUgVmlzdWFsIEMrKyBUb29sa2l0IENvbXBpbGVyCi0gICAgICAgIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGRvd25sb2FkIC0gc2VlIGFib3ZlCi0gICAgKiBBIHJlY2VudCBQbGF0Zm9ybSBTREsKLSAgICAgICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9GYW1pbHlJRD00ODQyNjllMi0zYjg5LTQ3ZTMtOGViNy0xZjJiZTZkNzEyM2EKLSAgICAqIFRoZSAuTkVUIDEuMSBTREsKLSAgICAgICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9GYW1pbHlJRD05YjNhMmNhNi0zNjQ3LTQwNzAtOWY0MS1hMzMzYzZiOTE4MWQKLQotICAgIFtEb2VzIGFueW9uZSBoYXZlIGJldHRlciBVUkxzIGZvciB0aGUgbGFzdCAyIG9mIHRoZXNlP10KLQotICAgIFRoZSB0b29sa2l0IGNvbXBpbGVyIGlzIG5lZWRlZCBhcyBpdCBpcyBhbiBvcHRpbWlzaW5nIGNvbXBpbGVyICh0aGUKLSAgICBjb21waWxlciBzdXBwbGllZCB3aXRoIHRoZSAuTkVUIFNESyBpcyBhIG5vbi1vcHRpbWlzaW5nIHZlcnNpb24pLiBUaGUKLSAgICBwbGF0Zm9ybSBTREsgaXMgbmVlZGVkIHRvIHByb3ZpZGUgdGhlIFdpbmRvd3MgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMKLSAgICAodGhlIFdpbmRvd3MgMjAwMyBTZXJ2ZXIgU1AxIGVkaXRpb24sIHR5cGljYWwgaW5zdGFsbCwgaXMga25vd24gdG8gd29yayAtCi0gICAgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgdmVyc2lvbnMgYXJlIHByb2JhYmx5IGZpbmUgYXMgd2VsbCkuIFRoZSAuTkVUIDEuMQotICAgIFNESyBpcyBuZWVkZWQgYmVjYXVzZSBpdCBjb250YWlucyBhIHZlcnNpb24gb2YgbXN2Y3J0LmRsbCB3aGljaCBsaW5rcyB0bwotICAgIHRoZSBtc3ZjcjcxLmRsbCBDUlQuIE5vdGUgdGhhdCB0aGUgLk5FVCAyLjAgU0RLIGlzIE5PVCBhY2NlcHRhYmxlLCBhcyBpdAotICAgIHJlZmVyZW5jZXMgbXN2Y3I4MC5kbGwuCi0KLSAgICBBbGwgb2YgdGhlIGFib3ZlIGl0ZW1zIHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgbm9ybWFsLgotCi0gICAgSWYgeW91IGludGVuZCB0byBidWlsZCB0aGUgb3BlbnNzbCAobmVlZGVkIGZvciB0aGUgX3NzbCBleHRlbnNpb24pIHlvdQotICAgIHdpbGwgbmVlZCB0aGUgQyBydW50aW1lIHNvdXJjZXMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIHBsYXRmb3JtIFNESy4KLQotICAgIEluIGFkZGl0aW9uLCB5b3Ugd2lsbCBuZWVkIE5hbnQsIGF2YWlsYWJsZSBmcm9tCi0gICAgaHR0cDovL25hbnQuc291cmNlZm9yZ2UubmV0LiBUaGUgMC44NSByZWxlYXNlIGNhbmRpZGF0ZSAzIHZlcnNpb24gaXMga25vd24KLSAgICB0byB3b3JrLiBUaGlzIGlzIHRoZSBsYXRlc3QgcmVsZWFzZWQgdmVyc2lvbiBhdCB0aGUgdGltZSBvZiB3cml0aW5nLiBMYXRlcgotICAgICJuaWdodGx5IGJ1aWxkIiB2ZXJzaW9ucyBhcmUga25vd24gTk9UIHRvIHdvcmsgLSBpdCBpcyBub3QgY2xlYXIgYXQKLSAgICBwcmVzZW50IHdoZXRoZXIgZnV0dXJlIHJlbGVhc2VkIHZlcnNpb25zIHdpbGwgd29yay4KLQotU2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQKLQotICAgIFN0YXJ0IGEgcGxhdGZvcm0gU0RLICJidWlsZCBlbnZpcm9ubWVudCB3aW5kb3ciIGZyb20gdGhlIHN0YXJ0IG1lbnUuIFRoZQotICAgICJXaW5kb3dzIFhQIDMyLWJpdCByZXRhaWwiIHZlcnNpb24gaXMga25vd24gdG8gd29yay4KLQotICAgIEFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHRvIHlvdXIgUEFUSDoKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBkaXJlY3RvcnkKLSAgICAgICAgKiBUaGUgU0RLICJXaW42NCIgYmluYXJpZXMgZGlyZWN0b3J5Ci0JKiBUaGUgTmFudCBkaXJlY3RvcnkKLSAgICBBZGQgdG8geW91ciBJTkNMVURFIGVudmlyb25tZW50IHZhcmlhYmxlOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIElOQ0xVREUgZGlyZWN0b3J5Ci0gICAgQWRkIHRvIHlvdXIgTElCIGVudmlyb25tZW50IHZhcmlhYmxlOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIExJQiBkaXJlY3RvcnkKLQkqIFRoZSAuTkVUIFNESyBWaXN1YWwgU3R1ZGlvIDIwMDMgVkM3XGxpYiBkaXJlY3RvcnkKLQotICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgc2hvdWxkIHNldCB0aGluZ3MgdXAgYXMgeW91IG5lZWQgdGhlbToKLQotICAgICAgICByZW0gU2V0IHRoZXNlIHZhbHVlcyBhY2NvcmRpbmcgdG8gd2hlcmUgeW91IGluc3RhbGxlZCB0aGUgc29mdHdhcmUKLSAgICAgICAgc2V0IFRPT0xLSVQ9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIEMrKyBUb29sa2l0IDIwMDMKLSAgICAgICAgc2V0IFNESz1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBQbGF0Zm9ybSBTREsKLSAgICAgICAgc2V0IE5FVD1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMwotICAgICAgICBzZXQgTkFOVD1DOlxVdGlsc1xOYW50Ci0KLSAgICAgICAgc2V0IFBBVEg9JVRPT0xLSVQlXGJpbjslUEFUSCU7JVNESyVcQmluXHdpbjY0OyVOQU5UJVxiaW4KLSAgICAgICAgc2V0IElOQ0xVREU9JVRPT0xLSVQlXGluY2x1ZGU7JUlOQ0xVREUlCi0gICAgICAgIHNldCBMSUI9JVRPT0xLSVQlXGxpYjslTkVUJVxWQzdcbGliOyVMSUIlCi0KLSAgICBUaGUgIndpbjY0IiBkaXJlY3RvcnkgZnJvbSB0aGUgU0RLIGlzIGFkZGVkIHRvIHN1cHBseSBleGVjdXRhYmxlcyBzdWNoIGFzCi0gICAgImN2dHJlcyIgYW5kICJsaWIiLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBlbHNld2hlcmUuIFRoZSB2ZXJzaW9ucyBpbiB0aGUKLSAgICAid2luNjQiIGRpcmVjdG9yeSBhcmUgMzItYml0IHByb2dyYW1zLCBzbyB0aGV5IGFyZSBmaW5lIHRvIHVzZSBoZXJlLgotCi0gICAgVGhhdCdzIGl0LiBUbyBidWlsZCBQeXRob24gKHRoZSBjb3JlIG9ubHksIG5vIGJpbmFyeSBleHRlbnNpb25zIHdoaWNoCi0gICAgZGVwZW5kIG9uIGV4dGVybmFsIGxpYnJhcmllcykgeW91IGp1c3QgbmVlZCB0byBpc3N1ZSB0aGUgY29tbWFuZAotCi0gICAgICAgIG5hbnQgLWJ1aWxkZmlsZTpweXRob24uYnVpbGQgYWxsCi0KLSAgICBmcm9tIHdpdGhpbiB0aGUgVlM3LjEgZGlyZWN0b3J5LgotCi1FeHRlbnNpb24gbW9kdWxlcwotCi0gICAgVG8gYnVpbGQgdGhvc2UgZXh0ZW5zaW9uIG1vZHVsZXMgd2hpY2ggcmVxdWlyZSBleHRlcm5hbCBsaWJyYXJpZXMKLSAgICAoX3RraW50ZXIsIGJ6MiwgX3NxbGl0ZTMsIF9zc2wpIHlvdSBjYW4gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMKLSAgICBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQgYWJvdmUsIHdpdGggYSBmZXcgbWlub3IgbW9kaWZpY2F0aW9ucy4gVGhlc2UKLSAgICBpbnN0cnVjdGlvbnMgaGF2ZSBvbmx5IGJlZW4gdGVzdGVkIHVzaW5nIHRoZSBzb3VyY2VzIGluIHRoZSBQeXRob24KLSAgICBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgLSBidWlsZGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZXMgc2hvdWxkIHdvcmssIGJ1dAotICAgIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCi0KLSAgICBGb3IgZWFjaCBleHRlbnNpb24gbW9kdWxlIHlvdSB3aXNoIHRvIGJ1aWxkLCB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUKLSAgICBhc3NvY2lhdGVkIGluY2x1ZGUgbGluZSBmcm9tIHRoZSBleGNsdWRlcHJvamVjdHMgc2VjdGlvbiBvZiBwYy5idWlsZC4KLQotICAgIFRoZSBjaGFuZ2VzIHJlcXVpcmVkIGFyZToKLQotICAgIF90a2ludGVyCi0gICAgICAgIFRoZSB0aXggbWFrZWZpbGUgKHRpeC04LjQuMFx3aW5cbWFrZWZpbGUudmMpIG11c3QgYmUgbW9kaWZpZWQgdG8KLQlyZW1vdmUgcmVmZXJlbmNlcyB0byBUT09MUzMyLiBUaGUgcmVsZXZhbnQgbGluZXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8KLQlyZWFkOgotICAgICAgICAgICAgY2MzMiA9IGNsLmV4ZQotICAgICAgICAgICAgbGluazMyID0gbGluay5leGUKLSAgICAgICAgICAgIGluY2x1ZGUzMiA9IAotCVRoZSByZW1haW5kZXIgb2YgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyB3aWxsIHdvcmsgYXMgZ2l2ZW4uCi0KLSAgICBiejIKLSAgICAgICAgTm8gY2hhbmdlcyBhcmUgbmVlZGVkCi0KLSAgICBfc3FsaXRlMwotICAgICAgICBObyBjaGFuZ2VzIGFyZSBuZWVkZWQuIEhvd2V2ZXIsIGluIG9yZGVyIGZvciB0aGUgdGVzdHMgdG8gc3VjY2VlZCwgYQotCWNvcHkgb2Ygc3FsaXRlMy5kbGwgbXVzdCBiZSBkb3dubG9hZGVkLCBhbmQgcGxhY2VkIGFsb25nc2lkZQotCXB5dGhvbi5leGUuCi0KLSAgICBfc3NsCi0gICAgICAgIFRoZSBkb2N1bWVudGVkIGJ1aWxkIHByb2Nlc3Mgd29ya3MgYXMgd3JpdHRlbi4gSG93ZXZlciwgaXQgbmVlZHMgYQotCWNvcHkgb2YgdGhlIGZpbGUgc2V0YXJndi5vYmosIHdoaWNoIGlzIG5vdCBzdXBwbGllZCBpbiB0aGUgcGxhdGZvcm0KLQlTREsuIEhvd2V2ZXIsIHRoZSBzb3VyY2VzIGFyZSBhdmFpbGFibGUgKGluIHRoZSBjcnQgc291cmNlIGNvZGUpLiBUbwotCWJ1aWxkIHNldGFyZ3Yub2JqLCBwcm9jZWVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgQ29weSBzZXRhcmd2LmMsIGNydW50aW1lLmggYW5kIGludGVybmFsLmggZnJvbSAlU0RLJVxzcmNcY3J0IHRvIGEKLQl0ZW1wb3JhcnkgZGlyZWN0b3J5LgotCUNvbXBpbGUgdXNpbmcgImNsIC9jIC9JLiAvTUQgL0RfQ1JUQkxEIHNldGFyZ3YuYyIKLQlDb3B5IHRoZSByZXN1bHRpbmcgc2V0YXJndi5vYmogdG8gc29tZXdoZXJlIG9uIHlvdXIgTElCIGVudmlyb25tZW50Ci0JKCVTREslXGxpYiBpcyBhIHJlYXNvbmFibGUgcGxhY2UpLgotCi0JV2l0aCBzZXRhcmd2Lm9iaiBpbiBwbGFjZSwgdGhlIHN0YW5kYXJkIGJ1aWxkIHByb2Nlc3Mgc2hvdWxkIHdvcmsKLQlmaW5lLgotCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3JtcHljLnB5IGIvUEMvVlM3LjEvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYzg1NzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi9MaWIiKQotcHJpbnQgbnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcnQuYmF0IGIvUEMvVlM3LjEvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOTEwYTc5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjUyZDQ1Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InNlbGVjdCINCi0JU2NjUHJvamVjdE5hbWU9InNlbGVjdCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjLG1zdmNydCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDdmOWIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JU2NjUHJvamVjdE5hbWU9InVuaWNvZGVkYXRhIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmM2I0ZS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Inc5eHBvcGVuIg0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcdzl4cG9wZW4iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi93OXhwb3Blbl9kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuX2QucGRiIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vdzl4cG9wZW4uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuLnBkYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qIGIvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRjZjM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0id2luc291bmQiDQotCVNjY1Byb2plY3ROYW1lPSJ3aW5zb3VuZCINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmRfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5zb3VuZC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzguMC9fY3R5cGVzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk3MzIzMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fY3R5cGVzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2N0eXBlcyINCi0JUHJvamVjdEdVSUQ9InswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXNfZGxmY24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmlfY29tbW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpdGFyZ2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYyINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvWmkgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fZWxlbWVudHRyZWUudmNwcm9qIGIvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU3ZGE3Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fZWxlbWVudHRyZWUudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNjEzICswLDAgQEAKLTw/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+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoSE9TVF9QWVRIT04pIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM5LjAvX3NoYTMudmNwcm9qCnNpbWlsYXJpdHkgaW5kZXggOTUlCnJlbmFtZSBmcm9tIFBDL1ZTOC4wL19jdHlwZXNfdGVzdC52Y3Byb2oKcmVuYW1lIHRvIFBDL1ZTOS4wL19zaGEzLnZjcHJvagppbmRleCAwOTcyNDFlLi41ZmUxOGQ1IDEwMDY0NAotLS0gYS9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyBiL1BDL1ZTOS4wL19zaGEzLnZjcHJvagpAQCAtMSwxMCArMSwxMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQogPFZpc3VhbFN0dWRpb1Byb2plY3QNCiAJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9jdHlwZXNfdGVzdCINCi0JUHJvamVjdEdVSUQ9Ins5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzX3Rlc3QiDQorCVZlcnNpb249IjksMDAiDQorCU5hbWU9Il9zaGEzIg0KKwlQcm9qZWN0R1VJRD0iezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0iDQorCVJvb3ROYW1lc3BhY2U9Il9zaGEzIg0KIAlLZXl3b3JkPSJXaW4zMlByb2oiDQogCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCiAJPg0KQEAgLTUwMCwxOCArNTAwLDEwIEBACiAJPC9SZWZlcmVuY2VzPg0KIAk8RmlsZXM+DQogCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KIAkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCiAJCQk+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc2hhM1xzaGEzbW9kdWxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKaW5kZXggZjcxMDBmMS4uODJjNTdhZSAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCisrKyBiL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagpAQCAtNTU1LDEwICs1NTUsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3FsaXRlY29tcGF0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NzbC52Y3Byb2ogYi9QQy9WUzkuMC9fc3NsLnZjcHJvagppbmRleCA5N2FhMjk0Li5iNDdkYzI3IDEwMDY0NAotLS0gYS9QQy9WUzkuMC9fc3NsLnZjcHJvagorKysgYi9QQy9WUzkuMC9fc3NsLnZjcHJvagpAQCAtMSw3ICsxLDcgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KIDxWaXN1YWxTdHVkaW9Qcm9qZWN0DQogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI5LjAwIg0KKwlWZXJzaW9uPSI5LDAwIg0KIAlOYW1lPSJfc3NsIg0KIAlQcm9qZWN0R1VJRD0ie0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0iDQogCVJvb3ROYW1lc3BhY2U9Il9zc2wiDQpAQCAtNTYsNyArNTYsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTgwLDcgKzE4MCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTI0Myw3ICsyNDMsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0zMDUsNyArMzA1LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzY4LDcgKzM2OCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQogCQkJLz4NCiAJCQk8VG9vbA0KQEAgLTQzMSw3ICs0MzEsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC00OTQsNyArNDk0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCiAJCQkvPg0KIAkJCTxUb29sDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3Rlc3RjYXBpLnZjcHJvaiBiL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIFBDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2oKcmVuYW1lIHRvIFBDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCmluZGV4IDc2YWQyZDguLjE0ZDkxMGQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3Byb2oKQEAgLTEsMTAgKzEsMTAgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KIDxWaXN1YWxTdHVkaW9Qcm9qZWN0DQogCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfdGVzdGNhcGkiDQotCVByb2plY3RHVUlEPSJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCi0JUm9vdE5hbWVzcGFjZT0iX3Rlc3RjYXBpIg0KKwlWZXJzaW9uPSI5LjAwIg0KKwlOYW1lPSJfdGVzdGltcG9ydG11bHRpcGxlIg0KKwlQcm9qZWN0R1VJRD0iezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0iDQorCVJvb3ROYW1lc3BhY2U9Il90ZXN0aW1wb3J0bXVsdGlwbGUiDQogCUtleXdvcmQ9IldpbjMyUHJvaiINCiAJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KIAk+DQpAQCAtNTExLDcgKzUxMSw3IEBACiAJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQogCQkJPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGNhcGltb2R1bGUuYyINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMgYi9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCmluZGV4IGJiMzIzZDMuLjYwNDczMWYgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKKysrIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCiAgICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjMzW19kXS5kbGwpLAorICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjM0W19kXS5kbGwpLAogICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KICAgICAgICAgICogTm90IHdvcnRoIGxvb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrIAogICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOS4wL3BjYnVpbGQuc2xuCmluZGV4IDhmOGNiYjYuLjNiNzNmY2UgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3BjYnVpbGQuc2xuCisrKyBiL1BDL1ZTOS4wL3BjYnVpbGQuc2xuCkBAIC0yMCwxMSArMjAsNiBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns1NTNFQzMzRS05ODE2LTQ5OTYtQTY2MC01RDYxODZBMEIwQjN9Ig0KQEAgLTg3LDYgKzgyLDExIEBACiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGltcG9ydG11bHRpcGxlIiwgIl90ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qIiwgInszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KKwlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQorCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQorCUVuZFByb2plY3RTZWN0aW9uDQorRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3RraW50ZXIiLCAiX3RraW50ZXIudmNwcm9qIiwgIns0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KIAlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQpAQCAtMTUyLDYgKzE1Miw4IEBACiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc2hhMyIsICJfc2hhMy52Y3Byb2oiLCAiezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0iDQorRW5kUHJvamVjdA0KIEdsb2JhbA0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbg0KIAkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMg0KQEAgLTQyMCw2ICs0MjIsMjIgQEAKIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02NTEsNiArNjY5LDIyIEBACiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCUVuZEdsb2JhbFNlY3Rpb24NCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCiAJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzIGIvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKaW5kZXggZmYzNzU5ZS4uZWQ1NDY0ZCAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKKysrIGIvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKQEAgLTM4LDcgKzM4LDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQorCQlWYWx1ZT0icHl0aG9uMzQiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9IlB5dGhvbkV4ZSINCkBAIC01MCw3ICs1MCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ic3FsaXRlM0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy4xMiINCisJCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuOC4xIg0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJiejJEaXIiDQpAQCAtNTgsNyArNTgsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Imx6bWFEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHh6LTUuMC4zIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuNSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ib3BlbnNzbERpciINCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvaiBiL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCmluZGV4IDlmYjYzZmYuLmNmNjA0NzAgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCisrKyBiL1BDL1ZTOS4wL3B5dGhvbmNvcmUudmNwcm9qCkBAIC0xMTE5LDcgKzExMTksNyBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+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+LXNjcmlwdC5weSBpbgorICAgICAqIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgbGF1bmNoZXIgZXhlY3V0YWJsZS4KKyAgICAgKiBQdXQgdGhlIHNjcmlwdCBuYW1lIGludG8gYXJndiBhcyB0aGUgZmlyc3QgKHNjcmlwdCBuYW1lKSBhcmd1bWVudC4KKyAgICAgKi8KKworICAgIC8qIEdldCB0aGUgd3JhcHBlZCBzY3JpcHQgbmFtZSAtIGlmIHRoZSBzY3JpcHQgaXMgbm90IHByZXNlbnQsIHRoaXMgd2lsbAorICAgICAqIHRlcm1pbmF0ZSB0aGUgcHJvZ3JhbSB3aXRoIGFuIGVycm9yLgorICAgICAqLworICAgIGxvY2F0ZV93cmFwcGVkX3NjcmlwdCgpOworCisgICAgLyogQWRkIHRoZSB3cmFwcGVkIHNjcmlwdCB0byB0aGUgc3RhcnQgb2YgY29tbWFuZCAqLworICAgIG5ld2xlbiA9IHdjc2xlbih3cmFwcGVkX3NjcmlwdF9wYXRoKSArIHdjc2xlbihjb21tYW5kKSArIDI7IC8qICcgJyArIE5VTCAqLworICAgIG5ld2NvbW1hbmQgPSBtYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogbmV3bGVuKTsKKyAgICBpZiAoIW5ld2NvbW1hbmQpIHsKKyAgICAgICAgZXJyb3IoUkNfTk9fTUVNT1JZLCBMIkNvdWxkIG5vdCBhbGxvY2F0ZSBuZXcgY29tbWFuZCBsaW5lIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3Y3NjcHlfcyhuZXdjb21tYW5kLCBuZXdsZW4sIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgICAgICB3Y3NjYXRfcyhuZXdjb21tYW5kLCBuZXdsZW4sIEwiICIpOworICAgICAgICB3Y3NjYXRfcyhuZXdjb21tYW5kLCBuZXdsZW4sIGNvbW1hbmQpOworICAgICAgICBkZWJ1ZyhMIlJ1bm5pbmcgd3JhcHBlZCBzY3JpcHQgd2l0aCBjb21tYW5kIGxpbmUgJyVzJ1xuIiwgbmV3Y29tbWFuZCk7CisgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKKyAgICAgICAgYXZbMF0gPSB3cmFwcGVkX3NjcmlwdF9wYXRoOworICAgICAgICBhdlsxXSA9IE5VTEw7CisgICAgICAgIG1heWJlX2hhbmRsZV9zaGViYW5nKGF2LCBuZXdjb21tYW5kKTsKKyAgICAgICAgLyogUmV0dXJucyBpZiBubyBzaGViYW5nIGxpbmUgLSBwYXNzIHRvIGRlZmF1bHQgcHJvY2Vzc2luZyAqLworICAgICAgICBjb21tYW5kID0gbmV3Y29tbWFuZDsKKyAgICAgICAgdmFsaWQgPSBGQUxTRTsKKyAgICB9CisjZWxzZQogICAgIGlmIChhcmdjIDw9IDEpIHsKICAgICAgICAgdmFsaWQgPSBGQUxTRTsKICAgICAgICAgcCA9IE5VTEw7CkBAIC0xMzEwLDEzICsxNDM5LDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgcCA9IGFyZ3ZbMV07CiAgICAgICAgIHBsZW4gPSB3Y3NsZW4ocCk7Ci0gICAgICAgIGlmIChwWzBdICE9IEwnLScpIHsKLSAgICAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKLSAgICAgICAgICAgIG1heWJlX2hhbmRsZV9zaGViYW5nKCZhcmd2WzFdLCBjb21tYW5kKTsKLSAgICAgICAgfQotICAgICAgICAvKiBObyBmaWxlIHdpdGggc2hlYmFuZywgb3IgYW4gdW5yZWNvZ25pc2VkIHNoZWJhbmcuCi0gICAgICAgICAqIElzIHRoZSBmaXJzdCBhcmcgYSBzcGVjaWFsIHZlcnNpb24gcXVhbGlmaWVyPwotICAgICAgICAgKi8KICAgICAgICAgdmFsaWQgPSAoKnAgPT0gTCctJykgJiYgdmFsaWRhdGVfdmVyc2lvbigmcFsxXSk7CiAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICAgaXAgPSBsb2NhdGVfcHl0aG9uKCZwWzFdKTsKQEAgLTEzMjYsNyArMTQ0OCwxOSBAQAogICAgICAgICAgICAgY29tbWFuZCArPSB3Y3NsZW4ocCk7CiAgICAgICAgICAgICBjb21tYW5kID0gc2tpcF93aGl0ZXNwYWNlKGNvbW1hbmQpOwogICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZm9yIChpbmRleCA9IDE7IGluZGV4IDwgYXJnYzsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGlmICgqYXJndltpbmRleF0gIT0gTCctJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kZXggPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgcmVhZF9jb21tYW5kcygpOworICAgICAgICAgICAgICAgIG1heWJlX2hhbmRsZV9zaGViYW5nKCZhcmd2W2luZGV4XSwgY29tbWFuZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CisjZW5kaWYKKwogICAgIGlmICghdmFsaWQpIHsKICAgICAgICAgaXAgPSBsb2NhdGVfcHl0aG9uKEwiIik7CiAgICAgICAgIGlmIChpcCA9PSBOVUxMKQpAQCAtMTM0NCw3ICsxNDc4LDcgQEAKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCiBQeXRob24gTGF1bmNoZXIgZm9yIFdpbmRvd3MgVmVyc2lvbiAlc1xuXG4iLCB2ZXJzaW9uX3RleHQpOwogICAgICAgICAgICAgZndwcmludGYoc3Rkb3V0LCBMIlwKLXVzYWdlOiAlcyBbIGxhdW5jaGVyLWFyZ3VtZW50cyBdIHNjcmlwdCBbIHNjcmlwdC1hcmd1bWVudHMgXVxuXG4iLCBhcmd2WzBdKTsKK3VzYWdlOiAlcyBbIGxhdW5jaGVyLWFyZ3VtZW50cyBdIFsgcHl0aG9uLWFyZ3VtZW50cyBdIHNjcmlwdCBbIHNjcmlwdC1hcmd1bWVudHMgXVxuXG4iLCBhcmd2WzBdKTsKICAgICAgICAgICAgIGZwdXR3cyhMIlwKIExhdW5jaGVyIGFyZ3VtZW50czpcblxuXAogLTIgICAgIDogTGF1bmNoIHRoZSBsYXRlc3QgUHl0aG9uIDIueCB2ZXJzaW9uXG5cCmRpZmYgLS1naXQgYS9QQy9tc3ZjcnRtb2R1bGUuYyBiL1BDL21zdmNydG1vZHVsZS5jCmluZGV4IDA0ZDIwODguLjE4ZGVjNmQgMTAwNzU1Ci0tLSBhL1BDL21zdmNydG1vZHVsZS5jCisrKyBiL1BDL21zdmNydG1vZHVsZS5jCkBAIC0xMTMsMTEgKzExMywxMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1zdmNydF9vcGVuX29zZmhhbmRsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgbG9uZyBoYW5kbGU7CisgICAgUHlfaW50cHRyX3QgaGFuZGxlOwogICAgIGludCBmbGFnczsKICAgICBpbnQgZmQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImxpOm9wZW5fb3NmaGFuZGxlIiwgJmhhbmRsZSwgJmZsYWdzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTpvcGVuX29zZmhhbmRsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZmQgPSBfb3Blbl9vc2ZoYW5kbGUoaGFuZGxlLCBmbGFncyk7CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvTWFrZWZpbGUgYi9QQy9vczJlbXgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMDYxMGUuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNjcyICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIz09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0tLS0tLS0KLSMKLSMgVG9wLUxldmVsIE1ha2VmaWxlIGZvciBCdWlsZGluZyBQeXRob24gMi42IGZvciBPUy8yIHVzaW5nIEdDQy9FTVgKLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEFuZHJldyBaYWJvbG90bnksIDxiaXRAZWx0ZWNoLnJ1PiBmb3IgUHl0aG9uIDEuNS4yCi0jIE1vZGlmaWVkIGJ5IEFuZHJldyBNYWNJbnR5cmUsIDxhbmR5bWFjQHBjdWcub3JnLmF1PiBmb3IgUHl0aG9uIDIuNgotIwotIyBUaGlzIG1ha2VmaWxlIHdhcyBkZXZlbG9wZWQgZm9yIHVzZSB3aXRoIFtQXUdDQy9FTVggY29tcGlsZXIgYW55Ci0jIHZlcnNpb24gYW5kIEdOVSBNYWtlLgotIwotIyBUaGUgb3V0cHV0IG9mIHRoZSBidWlsZCBpcyBhIGxhcmdpc2ggUHl0aG9uMjYuRExMIGNvbnRhaW5pbmcgdGhlCi0jIGVzc2VudGlhbCBtb2R1bGVzIG9mIFB5dGhvbiBhbmQgYSBzbWFsbCBQeXRob24uZXhlIHByb2dyYW0gdG8gc3RhcnQKLSMgdGhlIGludGVycHJldGVyLiBXaGVuIGVtYmVkZGluZyBQeXRob24gd2l0aGluIGFub3RoZXIgcHJvZ3JhbSwgb25seQotIyBQeXRob24yNi5ETEwgaXMgbmVlZGVkLiBXZSBhbHNvIGJ1aWxkIHB5dGhvbl9zLmEgc3RhdGljIGxpYnJhcnkgKHdoaWNoCi0jIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBPTUYgKC5saWIpIGZvcm1hdCB1c2luZyBlbXhvbWYgdG9vbCkgYW5kIGJvdGgKLSMgcHl0aG9uLmEgYW5kIHB5dGhvbi5saWIgaW1wb3J0IGxpYnJhcmllcy4gIFRoZW4gdGhlIG9wdGlvbmFsIAotIyBleHRlbnNpb24gbW9kdWxlcywgd2hpY2ggYXJlIE9TLzIgRExMcyByZW5hbWVkIHdpdGggYSBQWUQgZmlsZSBleHRlbnNpb24uCi0jCi0jIFJlY29tbWVuZGVkIGJ1aWxkIG9yZGVyOgotIyAgIG1ha2UgZGVwZW5kCQkoaWYgeW91IGhhdmUgbWFrZWRlcCkKLSMgICBtYWtlIGFsbAotIyAgIG1ha2UgbHgJCShpZiB5b3UgaGF2ZSBseGxpdGUpCi0jICAgbWFrZSB0ZXN0CQkob3B0aW9uYWwpCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tCi0KLSMgPT09IENvbXBpbGF0aW9uIG1vZGU6IGRlYnVnIG9yIHJlbGVhc2UgPT09Ci1NT0RFPQkJb3B0aW1pemUKLSNNT0RFPQkJZGVidWcKLSMgPT09IEFzc2VydCgpIGVuYWJsZWQgPT09Ci1BU1NFUlRJT05TPW5vCi0jQVNTRVJUSU9OUz15ZXMKLSMgPT09IEhhcmQtd2lyZSBpbnN0YWxsYXRpb24gbG9jYXRpb24gPT09Ci1GSVhFRF9QWUhPTUU9bm8KLSNGSVhFRF9QWUhPTUU9eWVzCi0KLSMgPT09IE9wdGlvbmFsIG1vZHVsZXMgPT09Ci0jIERvIHlvdSBoYXZlIHRoZSBJbmZvWmlwIGNvbXByZXNzaW9uIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9aTElCPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgVWx0cmEgRmFzdCBDcnlwdCAoVUZDKSBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfVUZDPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgVGNsL1RrIGxpYnJhcnkgaW5zdGFsbGVkPwotSEFWRV9UQ0xUSz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEdOVSByZWFkbGluZSBsaWJyYXJ5IGluc3RhbGxlZD8KLSMgTk9URTogSSdtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBLYWkgVXdlIFJvbW1lbCdzIHBvcnQgdGhhdCAKLSMgICAgICAgLSBpcyBjb21waWxlZCB3aXRoIG11bHRpdGhyZWFkaW5nIGVuYWJsZWQKLSMgICAgICAgLSBpcyBsaW5rZWQgc3RhdGljYWxseQotIyAgICAgICBJIGhhdmUgaGFkIG5vIHN1Y2Nlc3MgdHJ5aW5nIHRvIHVzZSBhIERMTCB2ZXJzaW9uLCBldmVuIHdoZW4KLSMgICAgICAgY29tcGlsZWQgd2l0aCBtdWx0aXRocmVhZGluZyBlbmFibGVkLgotSEFWRV9HUkVBRExJTkU9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBCU0QgREIgbGlicmFyeSAodjEuODUpIGFzIGluY2x1ZGVkIGluIHRoZSBFTVhCU0QgcGFja2FnZT8KLSMgTk9URTogdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIHJlY29tcGlsZWQgd2l0aCBhIHN0cnVjdHVyZSBtZW1iZXIKLSMgICAgICAgcmVuYW1lZCB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHRoZSBtdWx0aXRocmVhZGVkIGVycm5vIHN1cHBvcnQKLSMgICAgICAgKHRoZXJlIGlzIGEgc3RydWN0dXJlIG1lbWJlciBjYWxsZWQgZXJybm8sIHVzZWQgZm9yIHNoYWRvd2luZyB0aGUKLSMgICAgICAgcmVhbCBlcnJubywgd2hpY2ggY29uZmxpY3RzIHdpdGggdGhlIGVycm5vIHJlZGVmaW5pdGlvbiBvZiAtWm10KQotSEFWRV9CU0REQj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIG5jdXJzZXMgbGlicmFyeSBpbnN0YWxsZWQ/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+ICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggICAgMSAqLyAvKiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4gICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVU5JU1REX0ggICAgICAxICovIC8qICNpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9VTkFNRSAgICAgICAgIDEgKi8gLyogdW5hbWUgKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0vKiBEZWZpbmUgaWYgeW91IHdhbnQgZG9jdW1lbnRhdGlvbiBzdHJpbmdzIGluIGV4dGVuc2lvbiBtb2R1bGVzICovCi0jZGVmaW5lIFdJVEhfRE9DX1NUUklOR1MgMQotCi0jaWZkZWYgVVNFX0RMX0VYUE9SVAotICAjZGVmaW5lIERMX0lNUE9SVChSVFlQRSkgUlRZUEUgX1N5c3RlbQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhUHlfQ09ORklHX0ggKi8KLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvcHl0aG9uLmRlZiBiL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjVjMmEuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDQ3OSArMCwwIEBACi1MSUJSQVJZICAgICAgICBQWVRIT04yNCBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFCi1ERVNDUklQVElPTiAgICAnUHl0aG9uIDIuNCBDb3JlIERMTCcKLVBST1RNT0RFCi1EQVRBICAgICAgICAgICBNVUxUSVBMRSBOT05TSEFSRUQKLQotRVhQT1JUUwotICAgICAgICAgICAgICAgOyBEYXRhCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9UeXBlCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfVHlwZQotICAgICAgICAgICAgICAgUHlDT2JqZWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5Q2xhc3NfVHlwZQotICAgICAgICAgICAgICAgUHlDb2RlX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9UeXBlCi0gICAgICAgICAgICAgICBQeURpY3RfVHlwZQotICAgICAgICAgICAgICAgUHlFeGNfQXJpdGhtZXRpY0Vycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19Bc3NlcnRpb25FcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfQXR0cmlidXRlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0VPRkVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FbnZpcm9ubWVudEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FeGNlcHRpb24KLSAgICAgICAgICAgICAgIFB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfSU9FcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfSW1wb3J0RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0luZGV4RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0tleUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19LZXlib2FyZEludGVycnVwdAotICAgICAgICAgICAgICAgUHlFeGNfTG9va3VwRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX01lbW9yeUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19NZW1vcnlFcnJvckluc3QKLSAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfT3ZlcmZsb3dFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeW50YXhFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3lzdGVtRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUV4aXQKLSAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgICAgICAgIFB5RmlsZV9UeXBlCi0gICAgICAgICAgICAgICBQeUZsb2F0X1R5cGUKLSAgICAgICAgICAgICAgIFB5RnJhbWVfVHlwZQotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9UeXBlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzCi0gICAgICAgICAgICAgICBQeUltcG9ydF9Jbml0dGFiCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX1R5cGUKLSAgICAgICAgICAgICAgIFB5SW50X1R5cGUKLSAgICAgICAgICAgICAgIFB5TGlzdF9UeXBlCi0gICAgICAgICAgICAgICBQeUxvbmdfVHlwZQotICAgICAgICAgICAgICAgUHlNZXRob2RfVHlwZQotICAgICAgICAgICAgICAgUHlNb2R1bGVfVHlwZQotICAgICAgICAgICAgICAgUHlPU19JbnB1dEhvb2sKLSAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5UmFuZ2VfVHlwZQotICAgICAgICAgICAgICAgUHlTbGljZV9UeXBlCi0gICAgICAgICAgICAgICBQeVN0cmluZ19UeXBlCi0gICAgICAgICAgICAgICBQeVRyYWNlQmFja19UeXBlCi0gICAgICAgICAgICAgICBQeVR1cGxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5VHlwZV9UeXBlCi0gICAgICAgICAgICAgICBQeV9EZWJ1Z0ZsYWcKLSAgICAgICAgICAgICAgIFB5X0Zyb3plbkZsYWcKLSAgICAgICAgICAgICAgIFB5X0ludGVyYWN0aXZlRmxhZwotICAgICAgICAgICAgICAgUHlfTm9TaXRlRmxhZwotICAgICAgICAgICAgICAgUHlfT3B0aW1pemVGbGFnCi0gICAgICAgICAgICAgICBQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnCi0gICAgICAgICAgICAgICBQeV9WZXJib3NlRmxhZwotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbGV0YWIKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Jbml0dGFiCi0gICAgICAgICAgICAgICBfUHlQYXJzZXJfR3JhbW1hcgotICAgICAgICAgICAgICAgX1B5UGFyc2VyX1Rva2VuTmFtZXMKLSAgICAgICAgICAgICAgIF9QeV9FbGxpcHNpc09iamVjdAotICAgICAgICAgICAgICAgX1B5X05vbmVTdHJ1Y3QKLSAgICAgICAgICAgICAgIF9QeV9QYWNrYWdlQ29udGV4dAotICAgICAgICAgICAgICAgX1B5X1RydWVTdHJ1Y3QKLSAgICAgICAgICAgICAgIF9QeV9aZXJvU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfYWJzdHJhY3RfaGFjawotICAgICAgICAgICAgICAgX1B5X2NhcHN1bGVfaGFjawotICAgICAgICAgICAgICAgX1B5X3JlX3N5bnRheAotICAgICAgICAgICAgICAgX1B5X3JlX3N5bnRheF90YWJsZQotCi0gICAgICAgICAgICAgICA7IENvZGUKLSAgICAgICAgICAgICAgIFB5QXJnX1BhcnNlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZVR1cGxlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKLSAgICAgICAgICAgICAgIFB5QXJnX1ZhUGFyc2UKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0ZpbmkKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0U2VsZgotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fTmV3Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0Q29udGV4dAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldERlc3RydWN0b3IKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXROYW1lCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0UG9pbnRlcgotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0ltcG9ydAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0lzVmFsaWQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9OZXcKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXRDb250ZXh0Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldE5hbWUKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXRQb2ludGVyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfQXNWb2lkUHRyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfRnJvbVZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9HZXREZXNjCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUNhbGxhYmxlX0NoZWNrCi0gICAgICAgICAgICAgICBQeUNsYXNzX0lzU3ViY2xhc3MKLSAgICAgICAgICAgICAgIFB5Q2xhc3NfTmV3Ci0gICAgICAgICAgICAgICBQeUNvZGVfQWRkcjJMaW5lCi0gICAgICAgICAgICAgICBQeUNvZGVfTmV3Ci0gICAgICAgICAgICAgICBQeUNvbXBsZXhfQXNDQ29tcGxleAotICAgICAgICAgICAgICAgUHlDb21wbGV4X0Zyb21DQ29tcGxleAotICAgICAgICAgICAgICAgUHlDb21wbGV4X0Zyb21Eb3VibGVzCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfUmVhbEFzRG91YmxlCi0gICAgICAgICAgICAgICBQeURpY3RfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5RGljdF9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeURpY3RfSXRlbXMKLSAgICAgICAgICAgICAgIFB5RGljdF9LZXlzCi0gICAgICAgICAgICAgICBQeURpY3RfTmV3Ci0gICAgICAgICAgICAgICBQeURpY3RfTmV4dAotICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeURpY3RfU2l6ZQotICAgICAgICAgICAgICAgUHlEaWN0X1ZhbHVlcwotICAgICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQKLSAgICAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbAotICAgICAgICAgICAgICAgUHlFcnJfQ2hlY2tTaWduYWxzCi0gICAgICAgICAgICAgICBQeUVycl9DbGVhcgotICAgICAgICAgICAgICAgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotICAgICAgICAgICAgICAgUHlFcnJfRmV0Y2gKLSAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdAotICAgICAgICAgICAgICAgUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzCi0gICAgICAgICAgICAgICBQeUVycl9OZXdFeGNlcHRpb24KLSAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5Ci0gICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24KLSAgICAgICAgICAgICAgIFB5RXJyX09jY3VycmVkCi0gICAgICAgICAgICAgICBQeUVycl9QcmludAotICAgICAgICAgICAgICAgUHlFcnJfUHJpbnRFeAotICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZQotICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vCi0gICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldEludGVycnVwdAotICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZQotICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcKLSAgICAgICAgICAgICAgIFB5RXZhbF9BY3F1aXJlTG9jawotICAgICAgICAgICAgICAgUHlFdmFsX0FjcXVpcmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsRnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsTWV0aG9kCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE9iamVjdAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLSAgICAgICAgICAgICAgIFB5RXZhbF9FdmFsQ29kZQotICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0RnJhbWUKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRHbG9iYWxzCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0TG9jYWxzCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0UmVzdHJpY3RlZAotICAgICAgICAgICAgICAgUHlFdmFsX0luaXRUaHJlYWRzCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVsZWFzZUxvY2sKLSAgICAgICAgICAgICAgIFB5RXZhbF9SZWxlYXNlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVzdG9yZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX1NhdmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RmlsZV9Bc0ZpbGUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Gcm9tRmlsZQotICAgICAgICAgICAgICAgUHlGaWxlX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RmlsZV9HZXRMaW5lCi0gICAgICAgICAgICAgICBQeUZpbGVfTmFtZQotICAgICAgICAgICAgICAgUHlGaWxlX1NldEJ1ZlNpemUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Tb2Z0U3BhY2UKLSAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdAotICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZsb2F0X0FzRG91YmxlCi0gICAgICAgICAgICAgICBQeUZsb2F0X0FzU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZsb2F0X0ZpbmkKLSAgICAgICAgICAgICAgIFB5RmxvYXRfRnJvbURvdWJsZQotICAgICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1BvcAotICAgICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwCi0gICAgICAgICAgICAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscwotICAgICAgICAgICAgICAgUHlGcmFtZV9GaW5pCi0gICAgICAgICAgICAgICBQeUZyYW1lX0xvY2Fsc1RvRmFzdAotICAgICAgICAgICAgICAgUHlGcmFtZV9OZXcKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0Q29kZQotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HZXREZWZhdWx0cwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HZXRHbG9iYWxzCi0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX05ldwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cwotICAgICAgICAgICAgICAgUHlHcmFtbWFyX0FkZEFjY2VsZXJhdG9ycwotICAgICAgICAgICAgICAgUHlHcmFtbWFyX0ZpbmRERkEKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9MYWJlbFJlcHIKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9SZW1vdmVBY2NlbGVyYXRvcnMKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0FkZE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbXBvcnRfQ2xlYW51cAotICAgICAgICAgICAgICAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4dGVuZEluaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi0gICAgICAgICAgICAgICBQeUltcG9ydF9HZXRNb2R1bGVEaWN0Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeAotICAgICAgICAgICAgICAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX0RvQmluT3AKLSAgICAgICAgICAgICAgIFB5SW5zdGFuY2VfTmV3Ci0gICAgICAgICAgICAgICBQeUludF9Bc0xvbmcKLSAgICAgICAgICAgICAgIFB5SW50X0ZpbmkKLSAgICAgICAgICAgICAgIFB5SW50X0Zyb21Mb25nCi0gICAgICAgICAgICAgICBQeUludF9HZXRNYXgKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcgotICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQotICAgICAgICAgICAgICAgUHlJbnRlcnByZXRlclN0YXRlX05ldwotICAgICAgICAgICAgICAgUHlMaXN0X0FwcGVuZAotICAgICAgICAgICAgICAgUHlMaXN0X0FzVHVwbGUKLSAgICAgICAgICAgICAgIFB5TGlzdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeUxpc3RfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5TGlzdF9JbnNlcnQKLSAgICAgICAgICAgICAgIFB5TGlzdF9OZXcKLSAgICAgICAgICAgICAgIFB5TGlzdF9SZXZlcnNlCi0gICAgICAgICAgICAgICBQeUxpc3RfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlMaXN0X1NldFNsaWNlCi0gICAgICAgICAgICAgICBQeUxpc3RfU2l6ZQotICAgICAgICAgICAgICAgUHlMaXN0X1NvcnQKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc0RvdWJsZQotICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfQXNVbnNpZ25lZExvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfQXNWb2lkUHRyCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbURvdWJsZQotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVZvaWRQdHIKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19DaGVjawotICAgICAgICAgICAgICAgUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19IYXNLZXkKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19MZW5ndGgKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfSW5pdAotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZwotICAgICAgICAgICAgICAgUHlNZW1fRnJlZQotICAgICAgICAgICAgICAgUHlNZW1fTWFsbG9jCi0gICAgICAgICAgICAgICBQeU1lbV9SZWFsbG9jCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9DbGFzcwotICAgICAgICAgICAgICAgUHlNZXRob2RfRmluaQotICAgICAgICAgICAgICAgUHlNZXRob2RfRnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5TWV0aG9kX05ldwotICAgICAgICAgICAgICAgUHlNZXRob2RfU2VsZgotICAgICAgICAgICAgICAgUHlNb2R1bGVfR2V0RGljdAotICAgICAgICAgICAgICAgUHlNb2R1bGVfR2V0TmFtZQotICAgICAgICAgICAgICAgUHlNb2R1bGVfTmV3Ci0gICAgICAgICAgICAgICBQeU5vZGVfQWRkQ2hpbGQKLSAgICAgICAgICAgICAgIFB5Tm9kZV9Db21waWxlCi0gICAgICAgICAgICAgICBQeU5vZGVfRnJlZQotOyAgICAgICAgICAgICAgIFB5Tm9kZV9MaXN0VHJlZQotICAgICAgICAgICAgICAgUHlOb2RlX05ldwotICAgICAgICAgICAgICAgUHlOdW1iZXJfQWJzb2x1dGUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0FkZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfQW5kCi0gICAgICAgICAgICAgICBQeU51bWJlcl9DaGVjawotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ29lcmNlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Db2VyY2VFeAotICAgICAgICAgICAgICAgUHlOdW1iZXJfRGl2aWRlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9EaXZtb2QKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Zsb2F0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9JbnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0ludmVydAotICAgICAgICAgICAgICAgUHlOdW1iZXJfTG9uZwotICAgICAgICAgICAgICAgUHlOdW1iZXJfTHNoaWZ0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9NdWx0aXBseQotICAgICAgICAgICAgICAgUHlOdW1iZXJfTmVnYXRpdmUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX09yCi0gICAgICAgICAgICAgICBQeU51bWJlcl9Qb3NpdGl2ZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfUG93ZXIKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1JlbWFpbmRlcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUnNoaWZ0Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9TdWJ0cmFjdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfWG9yCi0gICAgICAgICAgICAgICBQeU9TX0FmdGVyRm9yawotICAgICAgICAgICAgICAgUHlPU19GaW5pSW50ZXJydXB0cwotICAgICAgICAgICAgICAgUHlPU19Jbml0SW50ZXJydXB0cwotICAgICAgICAgICAgICAgUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAotICAgICAgICAgICAgICAgUHlPU19SZWFkbGluZQotICAgICAgICAgICAgICAgUHlPU19TdGRpb1JlYWRsaW5lCi0gICAgICAgICAgICAgICBQeU9TX3N0cnRvbAotICAgICAgICAgICAgICAgUHlPU19zdHJ0b3VsCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsRnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxNZXRob2QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NhbGxPYmplY3QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NtcAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ29tcGFyZQotICAgICAgICAgICAgICAgUHlPYmplY3RfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZwotICAgICAgICAgICAgICAgUHlPYmplY3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlPYmplY3RfSGFzQXR0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfSGFzQXR0clN0cmluZwotICAgICAgICAgICAgICAgUHlPYmplY3RfSGFzaAotICAgICAgICAgICAgICAgUHlPYmplY3RfSXNUcnVlCi0gICAgICAgICAgICAgICBQeU9iamVjdF9MZW5ndGgKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X05vdAotICAgICAgICAgICAgICAgUHlPYmplY3RfUHJpbnQKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1JlcHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEF0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEF0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1N0cgotICAgICAgICAgICAgICAgUHlPYmplY3RfVHlwZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfQWRkVG9rZW4KLSAgICAgICAgICAgICAgIFB5UGFyc2VyX0RlbGV0ZQotICAgICAgICAgICAgICAgUHlQYXJzZXJfTmV3Ci0gICAgICAgICAgICAgICBQeVBhcnNlcl9QYXJzZUZpbGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1BhcnNlU3RyaW5nCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nCi0gICAgICAgICAgICAgICBQeVJhbmdlX05ldwotICAgICAgICAgICAgICAgUHlSdW5fQW55RmlsZQotICAgICAgICAgICAgICAgUHlSdW5fRmlsZQotICAgICAgICAgICAgICAgUHlSdW5fSW50ZXJhY3RpdmVMb29wCi0gICAgICAgICAgICAgICBQeVJ1bl9JbnRlcmFjdGl2ZU9uZQotICAgICAgICAgICAgICAgUHlSdW5fU2ltcGxlRmlsZQotICAgICAgICAgICAgICAgUHlSdW5fU2ltcGxlU3RyaW5nCi0gICAgICAgICAgICAgICBQeVJ1bl9TdHJpbmcKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfQ29uY2F0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvbnRhaW5zCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvdW50Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfRGVsU2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9HZXRTbGljZQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9JbgotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9JbmRleAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9MZW5ndGgKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfTGlzdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9SZXBlYXQKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfU2V0SXRlbQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9TZXRTbGljZQotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9UdXBsZQotICAgICAgICAgICAgICAgUHlTbGljZV9HZXRJbmRpY2VzCi0gICAgICAgICAgICAgICBQeVNsaWNlX05ldwotICAgICAgICAgICAgICAgUHlTdHJpbmdfQXNTdHJpbmcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0NvbmNhdAotICAgICAgICAgICAgICAgUHlTdHJpbmdfQ29uY2F0QW5kRGVsCi0gICAgICAgICAgICAgICBQeVN0cmluZ19GaW5pCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Gb3JtYXQKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0Zyb21TdHJpbmdBbmRTaXplCi0gICAgICAgICAgICAgICBQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19JbnRlcm5JblBsYWNlCi0gICAgICAgICAgICAgICBQeVN0cmluZ19TaXplCi0gICAgICAgICAgICAgICBQeVN5c19HZXRGaWxlCi0gICAgICAgICAgICAgICBQeVN5c19HZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5U3lzX1NldEFyZ3YKLSAgICAgICAgICAgICAgIFB5U3lzX1NldE9iamVjdAotICAgICAgICAgICAgICAgUHlTeXNfU2V0UGF0aAotICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIKLSAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3Rkb3V0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0NsZWFyCi0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0RlbGV0ZQotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0RGljdAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9OZXcKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfU3dhcAotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9hbGxvY2F0ZV9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9kb3duX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2ZyZWVfc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudAotICAgICAgICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfdXBfc2VtYQotICAgICAgICAgICAgICAgUHlUb2tlbl9PbmVDaGFyCi0gICAgICAgICAgICAgICBQeVRva2VuX1R3b0NoYXJzCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9GcmVlCi0gICAgICAgICAgICAgICBQeVRva2VuaXplcl9Gcm9tRmlsZQotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfR2V0Ci0gICAgICAgICAgICAgICBQeVRyYWNlQmFja19IZXJlCi0gICAgICAgICAgICAgICBQeVRyYWNlQmFja19QcmludAotICAgICAgICAgICAgICAgUHlUdXBsZV9GaW5pCi0gICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5VHVwbGVfTmV3Ci0gICAgICAgICAgICAgICBQeVR1cGxlX1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5VHVwbGVfU2l6ZQotICAgICAgICAgICAgICAgUHlfQWRkUGVuZGluZ0NhbGwKLSAgICAgICAgICAgICAgIFB5X0F0RXhpdAotICAgICAgICAgICAgICAgUHlfQnVpbGRWYWx1ZQotICAgICAgICAgICAgICAgUHlfQ29tcGlsZVN0cmluZwotICAgICAgICAgICAgICAgUHlfRW5kSW50ZXJwcmV0ZXIKLSAgICAgICAgICAgICAgIFB5X0V4aXQKLSAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IKLSAgICAgICAgICAgICAgIFB5X0ZkSXNJbnRlcmFjdGl2ZQotICAgICAgICAgICAgICAgUHlfRmluYWxpemUKLSAgICAgICAgICAgICAgIFB5X0ZpbmRNZXRob2QKLSAgICAgICAgICAgICAgIFB5X0ZpbmRNZXRob2RJbkNoYWluCi0gICAgICAgICAgICAgICBQeV9GbHVzaExpbmUKLSAgICAgICAgICAgICAgIFB5X0ZyZWUKLSAgICAgICAgICAgICAgIFB5X0dldEFyZ2NBcmd2Ci0gICAgICAgICAgICAgICBQeV9HZXRCdWlsZEluZm8KLSAgICAgICAgICAgICAgIFB5X0dldENvbXBpbGVyCi0gICAgICAgICAgICAgICBQeV9HZXRDb3B5cmlnaHQKLSAgICAgICAgICAgICAgIFB5X0dldEV4ZWNQcmVmaXgKLSAgICAgICAgICAgICAgIFB5X0dldFBhdGgKLSAgICAgICAgICAgICAgIFB5X0dldFBsYXRmb3JtCi0gICAgICAgICAgICAgICBQeV9HZXRQcmVmaXgKLSAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1GdWxsUGF0aAotICAgICAgICAgICAgICAgUHlfR2V0UHJvZ3JhbU5hbWUKLSAgICAgICAgICAgICAgIFB5X0dldFB5dGhvbkhvbWUKLSAgICAgICAgICAgICAgIFB5X0dldFZlcnNpb24KLSAgICAgICAgICAgICAgIFB5X0luaXRNb2R1bGU0Ci0gICAgICAgICAgICAgICBQeV9Jbml0aWFsaXplCi0gICAgICAgICAgICAgICBQeV9Jc0luaXRpYWxpemVkCi0gICAgICAgICAgICAgICBQeV9NYWluCi0gICAgICAgICAgICAgICBQeV9NYWtlUGVuZGluZ0NhbGxzCi0gICAgICAgICAgICAgICBQeV9NYWxsb2MKLSAgICAgICAgICAgICAgIFB5X05ld0ludGVycHJldGVyCi0gICAgICAgICAgICAgICBQeV9SZWFsbG9jCi0gICAgICAgICAgICAgICBQeV9SZXByRW50ZXIKLSAgICAgICAgICAgICAgIFB5X1JlcHJMZWF2ZQotICAgICAgICAgICAgICAgUHlfU2V0UHJvZ3JhbU5hbWUKLSAgICAgICAgICAgICAgIFB5X1NldFB5dGhvbkhvbWUKLSAgICAgICAgICAgICAgIFB5X1ZhQnVpbGRWYWx1ZQotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9GaW5pXzEKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fRmluaV8yCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0luaXRfMQotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9Jbml0XzIKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmluaQotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfSW5pdAotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlCi0gICAgICAgICAgICAgICBfUHlMb25nX05ldwotICAgICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyCi0gICAgICAgICAgICAgICBfUHlPYmplY3RfTmV3Ci0gICAgICAgICAgICAgICBfUHlPYmplY3RfTmV3VmFyCi0gICAgICAgICAgICAgICBfUHlTdHJpbmdfUmVzaXplCi0gICAgICAgICAgICAgICBfUHlTeXNfSW5pdAotICAgICAgICAgICAgICAgX1B5VHVwbGVfUmVzaXplCi0gICAgICAgICAgICAgICBfUHlfTUQ1RmluYWwKLSAgICAgICAgICAgICAgIF9QeV9NRDVJbml0Ci0gICAgICAgICAgICAgICBfUHlfTUQ1VXBkYXRlCi07ICAgICAgICAgICAgICAgX1B5X2FkZGJpdAotICAgICAgICAgICAgICAgX1B5X2NfZGlmZgotICAgICAgICAgICAgICAgX1B5X2NfbmVnCi0gICAgICAgICAgICAgICBfUHlfY19wb3cKLSAgICAgICAgICAgICAgIF9QeV9jX3Byb2QKLSAgICAgICAgICAgICAgIF9QeV9jX3F1b3QKLSAgICAgICAgICAgICAgIF9QeV9jX3N1bQotOyAgICAgICAgICAgICAgIF9QeV9kZWxiaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfbWVyZ2ViaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfbWV0YV9ncmFtbWFyCi07ICAgICAgICAgICAgICAgX1B5X25ld2JpdHNldAotOyAgICAgICAgICAgICAgIF9QeV9zYW1lYml0c2V0Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9UeXBlCi0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9Gcm9tT2JqZWN0Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9Gcm9tTWVtb3J5Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlTWVtb3J5Ci0gICAgICAgICAgICAgICBQeUJ1ZmZlcl9OZXcKLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvcmVhZG1lLnR4dCBiL1BDL29zMnZhY3BwL3JlYWRtZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNTg2MDQuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi1JQk0gVmlzdWFsQWdlIEMvQysrIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRvIGJ1aWxkIFB5dGhvbiBmb3IgT1MvMiwgY2hhbmdlIGludG8gLi9vczJ2YWNwcCBhbmQgaXNzdWUgYW4gJ05NQUtFJwotY29tbWFuZC4gIFRoaXMgd2lsbCBidWlsZCBhIFBZVEhPTjE1LkRMTCBjb250YWluaW5nIHRoZSBzZXQgb2YgUHl0aG9uCi1tb2R1bGVzIGxpc3RlZCBpbiBjb25maWcuYyBhbmQgYSBzbWFsbCBQWVRIT04uRVhFIHRvIHN0YXJ0IHRoZQotaW50ZXJwcmV0ZXIuCi0KLUJ5IGNoYW5naW5nIHRoZSBDIGNvbXBpbGVyIGZsYWcgL0dkLSBpbiB0aGUgbWFrZWZpbGUgdG8gL0dkKywgeW91IGNhbgotcmVkdWNlIHRoZSBzaXplIG9mIHRoZXNlIGJ5IGNhdXNpbmcgUHl0aG9uIHRvIGR5bmFtaWNhbGx5IGxpbmsgdG8gdGhlCi1DIHJ1bnRpbWUgRExMcyBpbnN0ZWFkIG9mIGluY2x1ZGluZyB0aGVpciBidWxrIGluIHlvdXIgYmluYXJpZXMuIAotSG93ZXZlciwgdGhpcyBtZWFucyB0aGF0IGFueSBzeXN0ZW0gb24gd2hpY2ggeW91IHJ1biBQeXRob24gbXVzdCBoYXZlCi10aGUgVkFDKysgY29tcGlsZXIgaW5zdGFsbGVkIGluIG9yZGVyIHRvIGhhdmUgdGhvc2UgRExMcyBhdmFpbGFibGUuCi0KLUR1cmluZyB0aGUgYnVpbGQgcHJvY2VzcyB5b3UgbWF5IHNlZSBhIGNvdXBsZSBvZiBoYXJtbGVzcyB3YXJuaW5nczoKLQotICBGcm9tIHRoZSBDIENvbXBpbGVyLCAiTm8gZnVuY3Rpb24gcHJvdG90eXBlIGdpdmVuIGZvciBYWFgiLCB3aGljaAotICBjb21lcyBmcm9tIHRoZSB1c2Ugb2YgSyZSIHBhcmFtZXRlcnMgd2l0aGluIFB5dGhvbiBmb3IgcG9ydGFiaWxpdHkuCi0KLSAgRnJvbSB0aGUgSUxJQiBsaWJyYXJpYW4sICJNb2R1bGUgTm90IEZvdW5kIChYWFgpIiwgd2hpY2ggY29tZXMKLSAgZnJvbSBpdHMgYXR0ZW1wdCB0byBwZXJmb3JtIHRoZSAoLSspIG9wZXJhdGlvbiwgd2hpY2ggcmVtb3ZlcyBhbmQKLSAgdGhlbiBhZGRzIGEgLk9CSiB0byB0aGUgbGlicmFyeS4gIFRoZSBmaXJzdCB0aW1lIGEgYnVpbGQgaXMgZG9uZSwKLSAgaXQgb2J2aW91c2x5IGNhbm5vdCByZW1vdmUgd2hhdCBpcyBub3QgeWV0IGJ1aWx0LgotCi1UaGlzIGJ1aWxkIGluY2x1ZGVzIHN1cHBvcnQgZm9yIG1vc3QgUHl0aG9uIGZ1bmN0aW9uYWxpdHkgYXMgd2VsbCBhcwotVENQL0lQIHNvY2tldHMuICBJdCBvbWl0cyB0aGUgUG9zaXggYWJpbGl0eSB0byAnZm9yaycgYSBwcm9jZXNzIGJ1dAotc3VwcG9ydHMgdGhyZWFkcyB1c2luZyBPUy8yIG5hdGl2ZSBjYXBhYmlsaXRpZXMuICBJIGhhdmUgdHJpZWQgdG8KLXN1cHBvcnQgZXZlcnl0aGluZyBwb3NzaWJsZSBidXQgaGVyZSBhcmUgYSBmZXcgdXNhZ2Ugbm90ZXMuCi0KLQotLS0gb3MucG9wZW4oKSBVc2FnZSBXYXJuaW5ncwotCi1XaXRoIHJlc3BlY3QgdG8gbXkgaW1wbGVtZW50YXRpb24gb2YgcG9wZW4oKSB1bmRlciBPUy8yOgotCi0gICAgaW1wb3J0IG9zCi0KLSAgICBmZCA9IG9zLnBvcGVuKCJwa3ppcC5leGUgLUAganVuay56aXAiLCAnd2InKQotICAgIGZkLndyaXRlKCJmaWxlMS50eHRcbiIpCi0gICAgZmQud3JpdGUoImZpbGUyLnR4dFxuIikKLSAgICBmZC53cml0ZSgiZmlsZTMudHh0XG4iKQotICAgIGZkLndyaXRlKCJceDFhIikgICMgU2hvdWxkIE5vdCBCZSBOZWNlc3NhcnkgQnV0IElzCi0gICAgZmQuY2xvc2UoKQotCi1UaGVyZSBpcyBhIGJ1ZywgZWl0aGVyIGluIHRoZSBWQUMrKyBjb21waWxlciBvciBPUy8yIGl0c2VsZiwgd2hlcmUgdGhlCi1zaW1wbGUgY2xvc3VyZSBvZiB0aGUgd3JpdGUtc2lkZSBvZiBhIHBpcGUgLXRvLSBhIHByb2Nlc3MgZG9lcyBub3QKLXNlbmQgYW4gRU9GIHRvIHRoYXQgcHJvY2Vzcy4gIEkgZmluZCBJIG11c3QgZXhwbGljaXRseSB3cml0ZSBhCi1jb250cm9sLVogKEVPRikgYmVmb3JlIGNsb3NpbmcgdGhlIHBpcGUuICBUaGlzIGlzIG5vdCBhIHByb2JsZW0gd2hlbgotdXNpbmcgcG9wZW4oKSBpbiByZWFkIG1vZGUuCi0KLU9uZSBvdGhlciBzbGlnaHQgZGlmZmVyZW5jZSB3aXRoIG15IHBvcGVuKCkgaXMgdGhhdCBJIHJldHVybiBOb25lCi1mcm9tIHRoZSBjbG9zZSgpLCBpbnN0ZWFkIG9mIHRoZSBVbml4IGNvbnZlbnRpb24gb2YgdGhlIHJldHVybiBjb2RlCi1vZiB0aGUgc3Bhd25lZCBwcm9ncmFtLiAgSSBjb3VsZCBmaW5kIG5vIGVhc3kgd2F5IHRvIGRvIHRoaXMgdW5kZXIKLU9TLzIuCi0KLQotLS0gQkVHSU5MSUJQQVRIL0VORExJQlBBVEgKLQotV2l0aCByZXNwZWN0IHRvIGVudmlyb25tZW50IHZhcmlhYmxlcywgdGhpcyBPUy8yIHBvcnQgc3VwcG9ydHMgdGhlCi1zcGVjaWFsLXRvLU9TLzIgbWFnaWMgbmFtZXMgb2YgJ0JFR0lOTElCUEFUSCcgYW5kICdFTkRMSUJQQVRIJyB0bwotY29udHJvbCB3aGVyZSB0byBsb2FkIGNvbnZlbnRpb25hbCBETExzIGZyb20uICBUaG9zZSBuYW1lcyBhcmUKLWludGVyY2VwdGVkIGFuZCBjb252ZXJ0ZWQgdG8gY2FsbHMgb24gdGhlIE9TLzIga2VybmVsIEFQSXMgYW5kCi1hcmUgaW5oZXJpdGVkIGJ5IGNoaWxkIHByb2Nlc3Nlcywgd2hldGhlciBQeXRob24tYmFzZWQgb3Igbm90LgotCi1BIGZldyBuZXcgYXR0cmlidXRlcyBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIG9zIG1vZHVsZToKLQotICAgIG9zLm1lbWluc3RhbGxlZCAgIyBDb3VudCBvZiBCeXRlcyBvZiBSQU0gSW5zdGFsbGVkIG9uIE1hY2hpbmUKLSAgICBvcy5tZW1rZXJuZWwgICAgICMgQ291bnQgb2YgQnl0ZXMgb2YgUkFNIFJlc2VydmVkIChOb24tU3dhcHBhYmxlKQotICAgIG9zLm1lbXZpcnR1YWwgICAgIyBDb3VudCBvZiBCeXRlcyBvZiBWaXJ0dWFsIFJBTSBQb3NzaWJsZQotICAgIG9zLnRpbWVzbGljZSAgICAgIyBEdXJhdGlvbiBvZiBTY2hlZHVsZXIgVGltZXNsaWNlLCBpbiBNaWxsaXNlY29uZHMKLSAgICBvcy5tYXhwYXRobGVuICAgICMgTWF4aW11bSBMZW5ndGggb2YgYSBQYXRoIFNwZWNpZmljYXRpb24sIGluIGNoYXJzCi0gICAgb3MubWF4bmFtZWxlbiAgICAjIE1heGltdW0gTGVuZ3RoIG9mIGEgU2luZ2xlIERpci9GaWxlIE5hbWUsIGluIGNoYXJzCi0gICAgb3MudmVyc2lvbiAgICAgICAjIFZlcnNpb24gb2YgT1MvMiBCZWluZyBSdW4gZS5nLiAiNC4wMCIKLSAgICBvcy5yZXZpc2lvbiAgICAgICMgUmV2aXNpb24gb2YgT1MvMiBCZWluZyBSdW4gKHVzdWFsbHkgemVybykKLSAgICBvcy5ib290ZHJpdmUgICAgICMgRHJpdmUgdGhhdCBTeXN0ZW0gQm9vdGVkIEZyb20gZS5nLiAiQzoiCi0gICAgICAgICAgICAgICAgICAgICAjICh1c2VmdWwgdG8gZmluZCB0aGUgQ09ORklHLlNZUyB1c2VkIHRvIGJvb3Qgd2l0aCkKLQotCi0tLSBVc2luZyBQeXRob24gYXMgdGhlIERlZmF1bHQgT1MvMiBCYXRjaCBMYW5ndWFnZQotCi1Ob3RlIHRoYXQgT1MvMiBzdXBwb3J0cyB0aGUgVW5peCB0ZWNobmlxdWUgb2YgcHV0dGluZyB0aGUgc3BlY2lhbAotY29tbWVudCBsaW5lIGF0IHRoZSB0aW1lIG9mIHNjcmlwdHMgZS5nLiAiIyEvdXNyL2Jpbi9weXRob24iIGluCi1hIGRpZmZlcmVudCBzeW50YWN0aWMgZm9ybS4gIFRvIGRvIHRoaXMsIHB1dCB5b3VyIHNjcmlwdCBpbnRvIGEgZmlsZQotd2l0aCBhIC5DTUQgZXh0ZW5zaW9uIGFuZCBhZGRlZCAnZXh0cHJvYycgdG8gdGhlIHRvcCBhcyBmb2xsb3dzOgotCi0gICAgZXh0cHJvYyBDOlxQeXRob25cUHl0aG9uLmV4ZSAteAotICAgIGltcG9ydCBvcwotICAgIHByaW50ICJIZWxsbyBmcm9tIFB5dGhvbiIKLQotVGhlICcteCcgb3B0aW9uIHRlbGxzIFB5dGhvbiB0byBza2lwIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmaWxlCi13aGlsZSBwcm9jZXNzaW5nIHRoZSByZXN0IGFzIG5vcm1hbCBQeXRob24gc291cmNlLgotCi0KLS0tIFN1Z2dlc3RlZCBFbnZpcm9ubWVudCBWYXJpYWJsZSBTZXR1cAotCi1XaXRoIHJlc3BlY3QgdG8gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgUHl0aG9uLCBJIHVzZSB0aGUKLWZvbGxvd2luZyBzZXR1cDoKLQotICAgIFNldCBQWVRIT05IT01FPUU6XFRhdVxQcm9qZWN0c1xQeXRob247RDpcRExMcwotICAgIFNldCBQWVRIT05QQVRIPS47RTpcVGF1XFByb2plY3RzXFB5dGhvblxMaWI7IFwKLSAgICAgICAgICAgICAgICAgICAgIEU6XFRhdVxQcm9qZWN0c1xQeXRob25cTGliXHBsYXQtd2luCi0KLVRoZSBFWEVDX1BSRUZJWCAob3B0aW9uYWwgc2Vjb25kIHBhdGhzcGVjIG9uIFBZVEhPTkhPTUUpIGlzIHdoZXJlCi15b3UgcHV0IGFueSBQeXRob24gZXh0ZW5zaW9uIERMTHMgeW91IG1heSBjcmVhdGUvb2J0YWluLiAgVGhlcmUKLWFyZSBub25lIHByb3ZpZGVkIHdpdGggdGhpcyByZWxlYXNlLgotCi0KLS0tIENvbnRhY3QgSW5mbwotCi1KZWZmIFJ1c2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRpbmcgdGhlIFZBQ1BQIHBvcnQgOi0oCi0KLUkgZG9uJ3QgaGF2ZSB0aGUgVkFDUFAgY29tcGlsZXIsIHNvIGNhbid0IHJlbGlhYmx5IG1haW50YWluIHRoaXMgcG9ydC4gCi0KLUFueW9uZSB3aXRoIFZBQ1BQIHdobyBjYW4gY29udHJpYnV0ZSBwYXRjaGVzIHRvIGtlZXAgdGhpcyBwb3J0IGJ1aWxkYWJsZQotc2hvdWxkIHVwbG9hZCB0aGVtIHRvIHRoZSBQeXRob24gUGF0Y2ggTWFuYWdlciBhdCBTb3VyY2Vmb3JnZSBhbmQgCi1hc3NpZ24gdGhlbSB0byBtZSBmb3IgcmV2aWV3L2NoZWNraW4uCi0KLUFuZHJldyBNYWNJbnR5cmUKLWFpbWFjaW50eXJlIGF0IHVzZXJzLnNvdXJjZWZvcmdlLm5ldAotQXVndXN0IDE4LCAyMDAyLgpkaWZmIC0tZ2l0IGEvUEMvcHljb25maWcuaCBiL1BDL3B5Y29uZmlnLmgKaW5kZXggZjMyMGNjZi4uMjk5NTI3ZCAxMDA2NDQKLS0tIGEvUEMvcHljb25maWcuaAorKysgYi9QQy9weWNvbmZpZy5oCkBAIC03NCw4ICs3NCw2IEBACiAjZGVmaW5lIERPTlRfSEFWRV9TSUdfUEFVU0UKICNkZWZpbmUgTE9OR19CSVQJMzIKICNkZWZpbmUgV09SRF9CSVQgMzIKLSNkZWZpbmUgUFJFRklYICIiCi0jZGVmaW5lIEVYRUNfUFJFRklYICIiCiAKICNkZWZpbmUgTVNfV0lOMzIgLyogb25seSBzdXBwb3J0IHdpbjMyIGFuZCBncmVhdGVyLiAqLwogI2RlZmluZSBNU19XSU5ET1dTCkBAIC0xNTYsMTUgKzE1NCw5IEBACiAjZW5kaWYgLyogTVNfV0lONjQgKi8KIAogLyogc2V0IHRoZSB2ZXJzaW9uIG1hY3JvcyBmb3IgdGhlIHdpbmRvd3MgaGVhZGVycyAqLwotI2lmZGVmIE1TX1dJTlg2NAotLyogNjQgYml0IG9ubHkgcnVucyBvbiBYUCBvciBncmVhdGVyICovCisvKiBQeXRob24gMy40KyByZXF1aXJlcyBXaW5kb3dzIFhQIG9yIGdyZWF0ZXIgKi8KICNkZWZpbmUgUHlfV0lOVkVSIDB4MDUwMSAvKiBfV0lOMzJfV0lOTlRfV0lOWFAgKi8KICNkZWZpbmUgUHlfTlREREkgTlRERElfV0lOWFAKLSNlbHNlCi0vKiBQeXRob24gMi42KyByZXF1aXJlcyBXaW5kb3dzIDIwMDAgb3IgZ3JlYXRlciAqLwotI2RlZmluZSBQeV9XSU5WRVIgMHgwNTAwIC8qIF9XSU4zMl9XSU5OVF9XSU4ySyAqLwotI2RlZmluZSBQeV9OVERESSBOVERESV9XSU4yS1NQNAotI2VuZGlmCiAKIC8qIFdlIG9ubHkgc2V0IHRoZXNlIHZhbHVlcyB3aGVuIGJ1aWxkaW5nIFB5dGhvbiAtIHdlIGRvbid0IHdhbnQgdG8gZm9yY2UKICAgIHRoZXNlIHZhbHVlcyBvbiBleHRlbnNpb25zLCBhcyB0aGF0IHdpbGwgYWZmZWN0IHRoZSBwcm90b3R5cGVzIGFuZApAQCAtMTk5LDggKzE5MSwxMCBAQAogI2RlZmluZSBIQVZFX1NTSVpFX1QgMQogCiAjaWYgZGVmaW5lZChNU19XSU4zMikgJiYgIWRlZmluZWQoTVNfV0lONjQpCi0jaWZkZWYgX01fSVg4NgorI2lmIGRlZmluZWQoX01fSVg4NikKICNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoSW50ZWwpIikKKyNlbGlmIGRlZmluZWQoX01fQVJNKQorI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChBUk0pIikKICNlbHNlCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKFVua25vd24pIikKICNlbmRpZgpAQCAtMzI0LDExICszMTgsMTEgQEAKIAkJCXRoZWlyIE1ha2VmaWxlIChvdGhlciBjb21waWxlcnMgYXJlIGdlbmVyYWxseQogCQkJdGFrZW4gY2FyZSBvZiBieSBkaXN0dXRpbHMuKSAqLwogIwkJCWlmIGRlZmluZWQoX0RFQlVHKQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMzX2QubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zNF9kLmxpYiIpCiAjCQkJZWxpZiBkZWZpbmVkKFB5X0xJTUlURURfQVBJKQogIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMubGliIikKICMJCQllbHNlCi0jCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzMubGliIikKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zNC5saWIiKQogIwkJCWVuZGlmIC8qIF9ERUJVRyAqLwogIwkJZW5kaWYgLyogX01TQ19WRVIgKi8KICMJZW5kaWYgLyogUHlfQlVJTERfQ09SRSAqLwpAQCAtNzI3LDYgKzcyMSw5IEBACiAvKiBUaGUgc2l6ZSBvZiBgd2NoYXJfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX1dDSEFSX1QgMgogCisvKiBUaGUgc2l6ZSBvZiBgcGlkX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9QSURfVCBTSVpFT0ZfSU5UCisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZGwgbGlicmFyeSAoLWxkbCkuICAqLwogLyogI3VuZGVmIEhBVkVfTElCREwgKi8KIApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uLm1rIGIvUEMvcHl0aG9uLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzY1MTA2Li4wMDAwMDAwCi0tLSBhL1BDL3B5dGhvbi5taworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotcHJvamVjdCA6IG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X29zMlxweXRoX29zMi5leGUgbjpccHl0aG9uXHB5dGhvbi0xLiYNCi01LjFccGNcd2F0X2Rvc1xweXRoX2Rvcy5leGUgLlNZTUJPTElDDQotDQotIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLm1rMQ0KLSFpbmNsdWRlIG46XHB5dGhvblxweXRob24tMS41LjFccGNcd2F0X2Rvc1xweXRoX2Rvcy5tazENCmRpZmYgLS1naXQgYS9QQy9weXRob24zLmRlZiBiL1BDL3B5dGhvbjMuZGVmCmluZGV4IGQ3MjY1MjUuLjBjZjBkOTQgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMuZGVmCisrKyBiL1BDL3B5dGhvbjMuZGVmCkBAIC0xLDY5OSArMSw3MDAgQEAKLTsgV2hlbiBjaGFuZ2luZyB0aGlzIGZpbGUsIHJ1biBweXRob24zM2dlbi5weQorOyBXaGVuIGNoYW5naW5nIHRoaXMgZmlsZSwgcnVuIHB5dGhvbjM0Z2VuLnB5CiBMSUJSQVJZCSJweXRob24zIgogRVhQT1JUUwotICBQeUFyZ19QYXJzZT1weXRob24zMy5QeUFyZ19QYXJzZQotICBQeUFyZ19QYXJzZVR1cGxlPXB5dGhvbjMzLlB5QXJnX1BhcnNlVHVwbGUKLSAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjMzLlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcwotICBQeUFyZ19VbnBhY2tUdXBsZT1weXRob24zMy5QeUFyZ19VbnBhY2tUdXBsZQotICBQeUFyZ19WYVBhcnNlPXB5dGhvbjMzLlB5QXJnX1ZhUGFyc2UKLSAgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzMuUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMKLSAgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzPXB5dGhvbjMzLlB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cwotICBQeUJhc2VPYmplY3RfVHlwZT1weXRob24zMy5QeUJhc2VPYmplY3RfVHlwZSBEQVRBCi0gIFB5Qm9vbF9Gcm9tTG9uZz1weXRob24zMy5QeUJvb2xfRnJvbUxvbmcKLSAgUHlCb29sX1R5cGU9cHl0aG9uMzMuUHlCb29sX1R5cGUgREFUQQotICBQeUJ5dGVBcnJheUl0ZXJfVHlwZT1weXRob24zMy5QeUJ5dGVBcnJheUl0ZXJfVHlwZSBEQVRBCi0gIFB5Qnl0ZUFycmF5X0FzU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0FzU3RyaW5nCi0gIFB5Qnl0ZUFycmF5X0NvbmNhdD1weXRob24zMy5QeUJ5dGVBcnJheV9Db25jYXQKLSAgUHlCeXRlQXJyYXlfRnJvbU9iamVjdD1weXRob24zMy5QeUJ5dGVBcnJheV9Gcm9tT2JqZWN0Ci0gIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZUFycmF5X1Jlc2l6ZT1weXRob24zMy5QeUJ5dGVBcnJheV9SZXNpemUKLSAgUHlCeXRlQXJyYXlfU2l6ZT1weXRob24zMy5QeUJ5dGVBcnJheV9TaXplCi0gIFB5Qnl0ZUFycmF5X1R5cGU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfVHlwZSBEQVRBCi0gIFB5Qnl0ZXNJdGVyX1R5cGU9cHl0aG9uMzMuUHlCeXRlc0l0ZXJfVHlwZSBEQVRBCi0gIFB5Qnl0ZXNfQXNTdHJpbmc9cHl0aG9uMzMuUHlCeXRlc19Bc1N0cmluZwotICBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZQotICBQeUJ5dGVzX0NvbmNhdD1weXRob24zMy5QeUJ5dGVzX0NvbmNhdAotICBQeUJ5dGVzX0NvbmNhdEFuZERlbD1weXRob24zMy5QeUJ5dGVzX0NvbmNhdEFuZERlbAotICBQeUJ5dGVzX0RlY29kZUVzY2FwZT1weXRob24zMy5QeUJ5dGVzX0RlY29kZUVzY2FwZQotICBQeUJ5dGVzX0Zyb21Gb3JtYXQ9cHl0aG9uMzMuUHlCeXRlc19Gcm9tRm9ybWF0Ci0gIFB5Qnl0ZXNfRnJvbUZvcm1hdFY9cHl0aG9uMzMuUHlCeXRlc19Gcm9tRm9ybWF0VgotICBQeUJ5dGVzX0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlCeXRlc19Gcm9tT2JqZWN0Ci0gIFB5Qnl0ZXNfRnJvbVN0cmluZz1weXRob24zMy5QeUJ5dGVzX0Zyb21TdHJpbmcKLSAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZXNfUmVwcj1weXRob24zMy5QeUJ5dGVzX1JlcHIKLSAgUHlCeXRlc19TaXplPXB5dGhvbjMzLlB5Qnl0ZXNfU2l6ZQotICBQeUJ5dGVzX1R5cGU9cHl0aG9uMzMuUHlCeXRlc19UeXBlIERBVEEKLSAgUHlDRnVuY3Rpb25fQ2FsbD1weXRob24zMy5QeUNGdW5jdGlvbl9DYWxsCi0gIFB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzMuUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdAotICBQeUNGdW5jdGlvbl9HZXRGbGFncz1weXRob24zMy5QeUNGdW5jdGlvbl9HZXRGbGFncwotICBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbj1weXRob24zMy5QeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgotICBQeUNGdW5jdGlvbl9HZXRTZWxmPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldFNlbGYKLSAgUHlDRnVuY3Rpb25fTmV3RXg9cHl0aG9uMzMuUHlDRnVuY3Rpb25fTmV3RXgKLSAgUHlDRnVuY3Rpb25fVHlwZT1weXRob24zMy5QeUNGdW5jdGlvbl9UeXBlIERBVEEKLSAgUHlDYWxsSXRlcl9OZXc9cHl0aG9uMzMuUHlDYWxsSXRlcl9OZXcKLSAgUHlDYWxsSXRlcl9UeXBlPXB5dGhvbjMzLlB5Q2FsbEl0ZXJfVHlwZSBEQVRBCi0gIFB5Q2FsbGFibGVfQ2hlY2s9cHl0aG9uMzMuUHlDYWxsYWJsZV9DaGVjawotICBQeUNhcHN1bGVfR2V0Q29udGV4dD1weXRob24zMy5QeUNhcHN1bGVfR2V0Q29udGV4dAotICBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3Rvcj1weXRob24zMy5QeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcgotICBQeUNhcHN1bGVfR2V0TmFtZT1weXRob24zMy5QeUNhcHN1bGVfR2V0TmFtZQotICBQeUNhcHN1bGVfR2V0UG9pbnRlcj1weXRob24zMy5QeUNhcHN1bGVfR2V0UG9pbnRlcgotICBQeUNhcHN1bGVfSW1wb3J0PXB5dGhvbjMzLlB5Q2Fwc3VsZV9JbXBvcnQKLSAgUHlDYXBzdWxlX0lzVmFsaWQ9cHl0aG9uMzMuUHlDYXBzdWxlX0lzVmFsaWQKLSAgUHlDYXBzdWxlX05ldz1weXRob24zMy5QeUNhcHN1bGVfTmV3Ci0gIFB5Q2Fwc3VsZV9TZXRDb250ZXh0PXB5dGhvbjMzLlB5Q2Fwc3VsZV9TZXRDb250ZXh0Ci0gIFB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yPXB5dGhvbjMzLlB5Q2Fwc3VsZV9TZXREZXN0cnVjdG9yCi0gIFB5Q2Fwc3VsZV9TZXROYW1lPXB5dGhvbjMzLlB5Q2Fwc3VsZV9TZXROYW1lCi0gIFB5Q2Fwc3VsZV9TZXRQb2ludGVyPXB5dGhvbjMzLlB5Q2Fwc3VsZV9TZXRQb2ludGVyCi0gIFB5Q2Fwc3VsZV9UeXBlPXB5dGhvbjMzLlB5Q2Fwc3VsZV9UeXBlIERBVEEKLSAgUHlDbGFzc01ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzMuUHlDbGFzc01ldGhvZERlc2NyX1R5cGUgREFUQQotICBQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzCi0gIFB5Q29kZWNfRGVjb2RlPXB5dGhvbjMzLlB5Q29kZWNfRGVjb2RlCi0gIFB5Q29kZWNfRGVjb2Rlcj1weXRob24zMy5QeUNvZGVjX0RlY29kZXIKLSAgUHlDb2RlY19FbmNvZGU9cHl0aG9uMzMuUHlDb2RlY19FbmNvZGUKLSAgUHlDb2RlY19FbmNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfRW5jb2RlcgotICBQeUNvZGVjX0lnbm9yZUVycm9ycz1weXRob24zMy5QeUNvZGVjX0lnbm9yZUVycm9ycwotICBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2Rlcj1weXRob24zMy5QeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcgotICBQeUNvZGVjX0luY3JlbWVudGFsRW5jb2Rlcj1weXRob24zMy5QeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlcgotICBQeUNvZGVjX0tub3duRW5jb2Rpbmc9cHl0aG9uMzMuUHlDb2RlY19Lbm93bkVuY29kaW5nCi0gIFB5Q29kZWNfTG9va3VwRXJyb3I9cHl0aG9uMzMuUHlDb2RlY19Mb29rdXBFcnJvcgotICBQeUNvZGVjX1JlZ2lzdGVyPXB5dGhvbjMzLlB5Q29kZWNfUmVnaXN0ZXIKLSAgUHlDb2RlY19SZWdpc3RlckVycm9yPXB5dGhvbjMzLlB5Q29kZWNfUmVnaXN0ZXJFcnJvcgotICBQeUNvZGVjX1JlcGxhY2VFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19SZXBsYWNlRXJyb3JzCi0gIFB5Q29kZWNfU3RyZWFtUmVhZGVyPXB5dGhvbjMzLlB5Q29kZWNfU3RyZWFtUmVhZGVyCi0gIFB5Q29kZWNfU3RyZWFtV3JpdGVyPXB5dGhvbjMzLlB5Q29kZWNfU3RyZWFtV3JpdGVyCi0gIFB5Q29kZWNfU3RyaWN0RXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfU3RyaWN0RXJyb3JzCi0gIFB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycwotICBQeUNvbXBsZXhfRnJvbURvdWJsZXM9cHl0aG9uMzMuUHlDb21wbGV4X0Zyb21Eb3VibGVzCi0gIFB5Q29tcGxleF9JbWFnQXNEb3VibGU9cHl0aG9uMzMuUHlDb21wbGV4X0ltYWdBc0RvdWJsZQotICBQeUNvbXBsZXhfUmVhbEFzRG91YmxlPXB5dGhvbjMzLlB5Q29tcGxleF9SZWFsQXNEb3VibGUKLSAgUHlDb21wbGV4X1R5cGU9cHl0aG9uMzMuUHlDb21wbGV4X1R5cGUgREFUQQotICBQeURlc2NyX05ld0NsYXNzTWV0aG9kPXB5dGhvbjMzLlB5RGVzY3JfTmV3Q2xhc3NNZXRob2QKLSAgUHlEZXNjcl9OZXdHZXRTZXQ9cHl0aG9uMzMuUHlEZXNjcl9OZXdHZXRTZXQKLSAgUHlEZXNjcl9OZXdNZW1iZXI9cHl0aG9uMzMuUHlEZXNjcl9OZXdNZW1iZXIKLSAgUHlEZXNjcl9OZXdNZXRob2Q9cHl0aG9uMzMuUHlEZXNjcl9OZXdNZXRob2QKLSAgUHlEaWN0SXRlbXNfVHlwZT1weXRob24zMy5QeURpY3RJdGVtc19UeXBlIERBVEEKLSAgUHlEaWN0SXRlckl0ZW1fVHlwZT1weXRob24zMy5QeURpY3RJdGVySXRlbV9UeXBlIERBVEEKLSAgUHlEaWN0SXRlcktleV9UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZXJLZXlfVHlwZSBEQVRBCi0gIFB5RGljdEl0ZXJWYWx1ZV9UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZXJWYWx1ZV9UeXBlIERBVEEKLSAgUHlEaWN0S2V5c19UeXBlPXB5dGhvbjMzLlB5RGljdEtleXNfVHlwZSBEQVRBCi0gIFB5RGljdFByb3h5X05ldz1weXRob24zMy5QeURpY3RQcm94eV9OZXcKLSAgUHlEaWN0UHJveHlfVHlwZT1weXRob24zMy5QeURpY3RQcm94eV9UeXBlIERBVEEKLSAgUHlEaWN0VmFsdWVzX1R5cGU9cHl0aG9uMzMuUHlEaWN0VmFsdWVzX1R5cGUgREFUQQotICBQeURpY3RfQ2xlYXI9cHl0aG9uMzMuUHlEaWN0X0NsZWFyCi0gIFB5RGljdF9Db250YWlucz1weXRob24zMy5QeURpY3RfQ29udGFpbnMKLSAgUHlEaWN0X0NvcHk9cHl0aG9uMzMuUHlEaWN0X0NvcHkKLSAgUHlEaWN0X0RlbEl0ZW09cHl0aG9uMzMuUHlEaWN0X0RlbEl0ZW0KLSAgUHlEaWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlEaWN0X0RlbEl0ZW1TdHJpbmcKLSAgUHlEaWN0X0dldEl0ZW09cHl0aG9uMzMuUHlEaWN0X0dldEl0ZW0KLSAgUHlEaWN0X0dldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlEaWN0X0dldEl0ZW1TdHJpbmcKLSAgUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3I9cHl0aG9uMzMuUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IKLSAgUHlEaWN0X0l0ZW1zPXB5dGhvbjMzLlB5RGljdF9JdGVtcwotICBQeURpY3RfS2V5cz1weXRob24zMy5QeURpY3RfS2V5cwotICBQeURpY3RfTWVyZ2U9cHl0aG9uMzMuUHlEaWN0X01lcmdlCi0gIFB5RGljdF9NZXJnZUZyb21TZXEyPXB5dGhvbjMzLlB5RGljdF9NZXJnZUZyb21TZXEyCi0gIFB5RGljdF9OZXc9cHl0aG9uMzMuUHlEaWN0X05ldwotICBQeURpY3RfTmV4dD1weXRob24zMy5QeURpY3RfTmV4dAotICBQeURpY3RfU2V0SXRlbT1weXRob24zMy5QeURpY3RfU2V0SXRlbQotICBQeURpY3RfU2V0SXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfU2V0SXRlbVN0cmluZwotICBQeURpY3RfU2l6ZT1weXRob24zMy5QeURpY3RfU2l6ZQotICBQeURpY3RfVHlwZT1weXRob24zMy5QeURpY3RfVHlwZSBEQVRBCi0gIFB5RGljdF9VcGRhdGU9cHl0aG9uMzMuUHlEaWN0X1VwZGF0ZQotICBQeURpY3RfVmFsdWVzPXB5dGhvbjMzLlB5RGljdF9WYWx1ZXMKLSAgUHlFbGxpcHNpc19UeXBlPXB5dGhvbjMzLlB5RWxsaXBzaXNfVHlwZSBEQVRBCi0gIFB5RW51bV9UeXBlPXB5dGhvbjMzLlB5RW51bV9UeXBlIERBVEEKLSAgUHlFcnJfQmFkQXJndW1lbnQ9cHl0aG9uMzMuUHlFcnJfQmFkQXJndW1lbnQKLSAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsPXB5dGhvbjMzLlB5RXJyX0JhZEludGVybmFsQ2FsbAotICBQeUVycl9DaGVja1NpZ25hbHM9cHl0aG9uMzMuUHlFcnJfQ2hlY2tTaWduYWxzCi0gIFB5RXJyX0NsZWFyPXB5dGhvbjMzLlB5RXJyX0NsZWFyCi0gIFB5RXJyX0Rpc3BsYXk9cHl0aG9uMzMuUHlFcnJfRGlzcGxheQotICBQeUVycl9FeGNlcHRpb25NYXRjaGVzPXB5dGhvbjMzLlB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMKLSAgUHlFcnJfRmV0Y2g9cHl0aG9uMzMuUHlFcnJfRmV0Y2gKLSAgUHlFcnJfRm9ybWF0PXB5dGhvbjMzLlB5RXJyX0Zvcm1hdAotICBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzMuUHlFcnJfR2l2ZW5FeGNlcHRpb25NYXRjaGVzCi0gIFB5RXJyX05ld0V4Y2VwdGlvbj1weXRob24zMy5QeUVycl9OZXdFeGNlcHRpb24KLSAgUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYz1weXRob24zMy5QeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jCi0gIFB5RXJyX05vTWVtb3J5PXB5dGhvbjMzLlB5RXJyX05vTWVtb3J5Ci0gIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbj1weXRob24zMy5QeUVycl9Ob3JtYWxpemVFeGNlcHRpb24KLSAgUHlFcnJfT2NjdXJyZWQ9cHl0aG9uMzMuUHlFcnJfT2NjdXJyZWQKLSAgUHlFcnJfUHJpbnQ9cHl0aG9uMzMuUHlFcnJfUHJpbnQKLSAgUHlFcnJfUHJpbnRFeD1weXRob24zMy5QeUVycl9QcmludEV4Ci0gIFB5RXJyX1Byb2dyYW1UZXh0PXB5dGhvbjMzLlB5RXJyX1Byb2dyYW1UZXh0Ci0gIFB5RXJyX1Jlc3RvcmU9cHl0aG9uMzMuUHlFcnJfUmVzdG9yZQotICBQeUVycl9TZXRGcm9tRXJybm89cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vCi0gIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZT1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUKLSAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0PXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdAotICBQeUVycl9TZXRJbnRlcnJ1cHQ9cHl0aG9uMzMuUHlFcnJfU2V0SW50ZXJydXB0Ci0gIFB5RXJyX1NldE5vbmU9cHl0aG9uMzMuUHlFcnJfU2V0Tm9uZQotICBQeUVycl9TZXRPYmplY3Q9cHl0aG9uMzMuUHlFcnJfU2V0T2JqZWN0Ci0gIFB5RXJyX1NldFN0cmluZz1weXRob24zMy5QeUVycl9TZXRTdHJpbmcKLSAgUHlFcnJfU3ludGF4TG9jYXRpb249cHl0aG9uMzMuUHlFcnJfU3ludGF4TG9jYXRpb24KLSAgUHlFcnJfV2FybkV4PXB5dGhvbjMzLlB5RXJyX1dhcm5FeAotICBQeUVycl9XYXJuRXhwbGljaXQ9cHl0aG9uMzMuUHlFcnJfV2FybkV4cGxpY2l0Ci0gIFB5RXJyX1dhcm5Gb3JtYXQ9cHl0aG9uMzMuUHlFcnJfV2FybkZvcm1hdAotICBQeUVycl9Xcml0ZVVucmFpc2FibGU9cHl0aG9uMzMuUHlFcnJfV3JpdGVVbnJhaXNhYmxlCi0gIFB5RXZhbF9BY3F1aXJlTG9jaz1weXRob24zMy5QeUV2YWxfQWNxdWlyZUxvY2sKLSAgUHlFdmFsX0FjcXVpcmVUaHJlYWQ9cHl0aG9uMzMuUHlFdmFsX0FjcXVpcmVUaHJlYWQKLSAgUHlFdmFsX0NhbGxGdW5jdGlvbj1weXRob24zMy5QeUV2YWxfQ2FsbEZ1bmN0aW9uCi0gIFB5RXZhbF9DYWxsTWV0aG9kPXB5dGhvbjMzLlB5RXZhbF9DYWxsTWV0aG9kCi0gIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzPXB5dGhvbjMzLlB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzCi0gIFB5RXZhbF9FdmFsQ29kZT1weXRob24zMy5QeUV2YWxfRXZhbENvZGUKLSAgUHlFdmFsX0V2YWxDb2RlRXg9cHl0aG9uMzMuUHlFdmFsX0V2YWxDb2RlRXgKLSAgUHlFdmFsX0V2YWxGcmFtZT1weXRob24zMy5QeUV2YWxfRXZhbEZyYW1lCi0gIFB5RXZhbF9FdmFsRnJhbWVFeD1weXRob24zMy5QeUV2YWxfRXZhbEZyYW1lRXgKLSAgUHlFdmFsX0dldEJ1aWx0aW5zPXB5dGhvbjMzLlB5RXZhbF9HZXRCdWlsdGlucwotICBQeUV2YWxfR2V0Q2FsbFN0YXRzPXB5dGhvbjMzLlB5RXZhbF9HZXRDYWxsU3RhdHMKLSAgUHlFdmFsX0dldEZyYW1lPXB5dGhvbjMzLlB5RXZhbF9HZXRGcmFtZQotICBQeUV2YWxfR2V0RnVuY0Rlc2M9cHl0aG9uMzMuUHlFdmFsX0dldEZ1bmNEZXNjCi0gIFB5RXZhbF9HZXRGdW5jTmFtZT1weXRob24zMy5QeUV2YWxfR2V0RnVuY05hbWUKLSAgUHlFdmFsX0dldEdsb2JhbHM9cHl0aG9uMzMuUHlFdmFsX0dldEdsb2JhbHMKLSAgUHlFdmFsX0dldExvY2Fscz1weXRob24zMy5QeUV2YWxfR2V0TG9jYWxzCi0gIFB5RXZhbF9Jbml0VGhyZWFkcz1weXRob24zMy5QeUV2YWxfSW5pdFRocmVhZHMKLSAgUHlFdmFsX1JlSW5pdFRocmVhZHM9cHl0aG9uMzMuUHlFdmFsX1JlSW5pdFRocmVhZHMKLSAgUHlFdmFsX1JlbGVhc2VMb2NrPXB5dGhvbjMzLlB5RXZhbF9SZWxlYXNlTG9jawotICBQeUV2YWxfUmVsZWFzZVRocmVhZD1weXRob24zMy5QeUV2YWxfUmVsZWFzZVRocmVhZAotICBQeUV2YWxfUmVzdG9yZVRocmVhZD1weXRob24zMy5QeUV2YWxfUmVzdG9yZVRocmVhZAotICBQeUV2YWxfU2F2ZVRocmVhZD1weXRob24zMy5QeUV2YWxfU2F2ZVRocmVhZAotICBQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkPXB5dGhvbjMzLlB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQKLSAgUHlFeGNfQXJpdGhtZXRpY0Vycm9yPXB5dGhvbjMzLlB5RXhjX0FyaXRobWV0aWNFcnJvciBEQVRBCi0gIFB5RXhjX0Fzc2VydGlvbkVycm9yPXB5dGhvbjMzLlB5RXhjX0Fzc2VydGlvbkVycm9yIERBVEEKLSAgUHlFeGNfQXR0cmlidXRlRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXR0cmlidXRlRXJyb3IgREFUQQotICBQeUV4Y19CYXNlRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXhjX0Jhc2VFeGNlcHRpb24gREFUQQotICBQeUV4Y19CdWZmZXJFcnJvcj1weXRob24zMy5QeUV4Y19CdWZmZXJFcnJvciBEQVRBCi0gIFB5RXhjX0J5dGVzV2FybmluZz1weXRob24zMy5QeUV4Y19CeXRlc1dhcm5pbmcgREFUQQotICBQeUV4Y19EZXByZWNhdGlvbldhcm5pbmc9cHl0aG9uMzMuUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKLSAgUHlFeGNfRU9GRXJyb3I9cHl0aG9uMzMuUHlFeGNfRU9GRXJyb3IgREFUQQotICBQeUV4Y19FbnZpcm9ubWVudEVycm9yPXB5dGhvbjMzLlB5RXhjX0Vudmlyb25tZW50RXJyb3IgREFUQQotICBQeUV4Y19FeGNlcHRpb249cHl0aG9uMzMuUHlFeGNfRXhjZXB0aW9uIERBVEEKLSAgUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yPXB5dGhvbjMzLlB5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvciBEQVRBCi0gIFB5RXhjX0Z1dHVyZVdhcm5pbmc9cHl0aG9uMzMuUHlFeGNfRnV0dXJlV2FybmluZyBEQVRBCi0gIFB5RXhjX0dlbmVyYXRvckV4aXQ9cHl0aG9uMzMuUHlFeGNfR2VuZXJhdG9yRXhpdCBEQVRBCi0gIFB5RXhjX0lPRXJyb3I9cHl0aG9uMzMuUHlFeGNfSU9FcnJvciBEQVRBCi0gIFB5RXhjX0ltcG9ydEVycm9yPXB5dGhvbjMzLlB5RXhjX0ltcG9ydEVycm9yIERBVEEKLSAgUHlFeGNfSW1wb3J0V2FybmluZz1weXRob24zMy5QeUV4Y19JbXBvcnRXYXJuaW5nIERBVEEKLSAgUHlFeGNfSW5kZW50YXRpb25FcnJvcj1weXRob24zMy5QeUV4Y19JbmRlbnRhdGlvbkVycm9yIERBVEEKLSAgUHlFeGNfSW5kZXhFcnJvcj1weXRob24zMy5QeUV4Y19JbmRleEVycm9yIERBVEEKLSAgUHlFeGNfS2V5RXJyb3I9cHl0aG9uMzMuUHlFeGNfS2V5RXJyb3IgREFUQQotICBQeUV4Y19LZXlib2FyZEludGVycnVwdD1weXRob24zMy5QeUV4Y19LZXlib2FyZEludGVycnVwdCBEQVRBCi0gIFB5RXhjX0xvb2t1cEVycm9yPXB5dGhvbjMzLlB5RXhjX0xvb2t1cEVycm9yIERBVEEKLSAgUHlFeGNfTWVtb3J5RXJyb3I9cHl0aG9uMzMuUHlFeGNfTWVtb3J5RXJyb3IgREFUQQotICBQeUV4Y19NZW1vcnlFcnJvckluc3Q9cHl0aG9uMzMuUHlFeGNfTWVtb3J5RXJyb3JJbnN0IERBVEEKLSAgUHlFeGNfTmFtZUVycm9yPXB5dGhvbjMzLlB5RXhjX05hbWVFcnJvciBEQVRBCi0gIFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3I9cHl0aG9uMzMuUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciBEQVRBCi0gIFB5RXhjX09TRXJyb3I9cHl0aG9uMzMuUHlFeGNfT1NFcnJvciBEQVRBCi0gIFB5RXhjX092ZXJmbG93RXJyb3I9cHl0aG9uMzMuUHlFeGNfT3ZlcmZsb3dFcnJvciBEQVRBCi0gIFB5RXhjX1BlbmRpbmdEZXByZWNhdGlvbldhcm5pbmc9cHl0aG9uMzMuUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyBEQVRBCi0gIFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdD1weXRob24zMy5QeUV4Y19SZWN1cnNpb25FcnJvckluc3QgREFUQQotICBQeUV4Y19SZWZlcmVuY2VFcnJvcj1weXRob24zMy5QeUV4Y19SZWZlcmVuY2VFcnJvciBEQVRBCi0gIFB5RXhjX1J1bnRpbWVFcnJvcj1weXRob24zMy5QeUV4Y19SdW50aW1lRXJyb3IgREFUQQotICBQeUV4Y19SdW50aW1lV2FybmluZz1weXRob24zMy5QeUV4Y19SdW50aW1lV2FybmluZyBEQVRBCi0gIFB5RXhjX1N0b3BJdGVyYXRpb249cHl0aG9uMzMuUHlFeGNfU3RvcEl0ZXJhdGlvbiBEQVRBCi0gIFB5RXhjX1N5bnRheEVycm9yPXB5dGhvbjMzLlB5RXhjX1N5bnRheEVycm9yIERBVEEKLSAgUHlFeGNfU3ludGF4V2FybmluZz1weXRob24zMy5QeUV4Y19TeW50YXhXYXJuaW5nIERBVEEKLSAgUHlFeGNfU3lzdGVtRXJyb3I9cHl0aG9uMzMuUHlFeGNfU3lzdGVtRXJyb3IgREFUQQotICBQeUV4Y19TeXN0ZW1FeGl0PXB5dGhvbjMzLlB5RXhjX1N5c3RlbUV4aXQgREFUQQotICBQeUV4Y19UYWJFcnJvcj1weXRob24zMy5QeUV4Y19UYWJFcnJvciBEQVRBCi0gIFB5RXhjX1R5cGVFcnJvcj1weXRob24zMy5QeUV4Y19UeXBlRXJyb3IgREFUQQotICBQeUV4Y19VbmJvdW5kTG9jYWxFcnJvcj1weXRob24zMy5QeUV4Y19VbmJvdW5kTG9jYWxFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZUVuY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlV2FybmluZz1weXRob24zMy5QeUV4Y19Vbmljb2RlV2FybmluZyBEQVRBCi0gIFB5RXhjX1VzZXJXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1VzZXJXYXJuaW5nIERBVEEKLSAgUHlFeGNfVmFsdWVFcnJvcj1weXRob24zMy5QeUV4Y19WYWx1ZUVycm9yIERBVEEKLSAgUHlFeGNfV2FybmluZz1weXRob24zMy5QeUV4Y19XYXJuaW5nIERBVEEKLSAgUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IgREFUQQotICBQeUV4Y2VwdGlvbl9HZXRDYXVzZT1weXRob24zMy5QeUV4Y2VwdGlvbl9HZXRDYXVzZQotICBQeUV4Y2VwdGlvbl9HZXRDb250ZXh0PXB5dGhvbjMzLlB5RXhjZXB0aW9uX0dldENvbnRleHQKLSAgUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrPXB5dGhvbjMzLlB5RXhjZXB0aW9uX0dldFRyYWNlYmFjawotICBQeUV4Y2VwdGlvbl9TZXRDYXVzZT1weXRob24zMy5QeUV4Y2VwdGlvbl9TZXRDYXVzZQotICBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0PXB5dGhvbjMzLlB5RXhjZXB0aW9uX1NldENvbnRleHQKLSAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrPXB5dGhvbjMzLlB5RXhjZXB0aW9uX1NldFRyYWNlYmFjawotICBQeUZpbGVfRnJvbUZkPXB5dGhvbjMzLlB5RmlsZV9Gcm9tRmQKLSAgUHlGaWxlX0dldExpbmU9cHl0aG9uMzMuUHlGaWxlX0dldExpbmUKLSAgUHlGaWxlX1dyaXRlT2JqZWN0PXB5dGhvbjMzLlB5RmlsZV9Xcml0ZU9iamVjdAotICBQeUZpbGVfV3JpdGVTdHJpbmc9cHl0aG9uMzMuUHlGaWxlX1dyaXRlU3RyaW5nCi0gIFB5RmlsdGVyX1R5cGU9cHl0aG9uMzMuUHlGaWx0ZXJfVHlwZSBEQVRBCi0gIFB5RmxvYXRfQXNEb3VibGU9cHl0aG9uMzMuUHlGbG9hdF9Bc0RvdWJsZQotICBQeUZsb2F0X0Zyb21Eb3VibGU9cHl0aG9uMzMuUHlGbG9hdF9Gcm9tRG91YmxlCi0gIFB5RmxvYXRfRnJvbVN0cmluZz1weXRob24zMy5QeUZsb2F0X0Zyb21TdHJpbmcKLSAgUHlGbG9hdF9HZXRJbmZvPXB5dGhvbjMzLlB5RmxvYXRfR2V0SW5mbwotICBQeUZsb2F0X0dldE1heD1weXRob24zMy5QeUZsb2F0X0dldE1heAotICBQeUZsb2F0X0dldE1pbj1weXRob24zMy5QeUZsb2F0X0dldE1pbgotICBQeUZsb2F0X1R5cGU9cHl0aG9uMzMuUHlGbG9hdF9UeXBlIERBVEEKLSAgUHlGcm96ZW5TZXRfTmV3PXB5dGhvbjMzLlB5RnJvemVuU2V0X05ldwotICBQeUZyb3plblNldF9UeXBlPXB5dGhvbjMzLlB5RnJvemVuU2V0X1R5cGUgREFUQQotICBQeUdDX0NvbGxlY3Q9cHl0aG9uMzMuUHlHQ19Db2xsZWN0Ci0gIFB5R0lMU3RhdGVfRW5zdXJlPXB5dGhvbjMzLlB5R0lMU3RhdGVfRW5zdXJlCi0gIFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlPXB5dGhvbjMzLlB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlCi0gIFB5R0lMU3RhdGVfUmVsZWFzZT1weXRob24zMy5QeUdJTFN0YXRlX1JlbGVhc2UKLSAgUHlHZXRTZXREZXNjcl9UeXBlPXB5dGhvbjMzLlB5R2V0U2V0RGVzY3JfVHlwZSBEQVRBCi0gIFB5SW1wb3J0X0FkZE1vZHVsZT1weXRob24zMy5QeUltcG9ydF9BZGRNb2R1bGUKLSAgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYj1weXRob24zMy5QeUltcG9ydF9BcHBlbmRJbml0dGFiCi0gIFB5SW1wb3J0X0NsZWFudXA9cHl0aG9uMzMuUHlJbXBvcnRfQ2xlYW51cAotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZT1weXRob24zMy5QeUltcG9ydF9FeGVjQ29kZU1vZHVsZQotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4PXB5dGhvbjMzLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgKLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzPXB5dGhvbjMzLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcwotICBQeUltcG9ydF9HZXRJbXBvcnRlcj1weXRob24zMy5QeUltcG9ydF9HZXRJbXBvcnRlcgotICBQeUltcG9ydF9HZXRNYWdpY051bWJlcj1weXRob24zMy5QeUltcG9ydF9HZXRNYWdpY051bWJlcgotICBQeUltcG9ydF9HZXRNYWdpY1RhZz1weXRob24zMy5QeUltcG9ydF9HZXRNYWdpY1RhZwotICBQeUltcG9ydF9HZXRNb2R1bGVEaWN0PXB5dGhvbjMzLlB5SW1wb3J0X0dldE1vZHVsZURpY3QKLSAgUHlJbXBvcnRfSW1wb3J0PXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydAotICBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGU9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlCi0gIFB5SW1wb3J0X0ltcG9ydE1vZHVsZT1weXRob24zMy5QeUltcG9ydF9JbXBvcnRNb2R1bGUKLSAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWw9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwKLSAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaz1weXRob24zMy5QeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrCi0gIFB5SW1wb3J0X1JlbG9hZE1vZHVsZT1weXRob24zMy5QeUltcG9ydF9SZWxvYWRNb2R1bGUKLSAgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyPXB5dGhvbjMzLlB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcgotICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlPXB5dGhvbjMzLlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKLSAgUHlJbnRlcnByZXRlclN0YXRlX05ldz1weXRob24zMy5QeUludGVycHJldGVyU3RhdGVfTmV3Ci0gIFB5SXRlcl9OZXh0PXB5dGhvbjMzLlB5SXRlcl9OZXh0Ci0gIFB5TGlzdEl0ZXJfVHlwZT1weXRob24zMy5QeUxpc3RJdGVyX1R5cGUgREFUQQotICBQeUxpc3RSZXZJdGVyX1R5cGU9cHl0aG9uMzMuUHlMaXN0UmV2SXRlcl9UeXBlIERBVEEKLSAgUHlMaXN0X0FwcGVuZD1weXRob24zMy5QeUxpc3RfQXBwZW5kCi0gIFB5TGlzdF9Bc1R1cGxlPXB5dGhvbjMzLlB5TGlzdF9Bc1R1cGxlCi0gIFB5TGlzdF9HZXRJdGVtPXB5dGhvbjMzLlB5TGlzdF9HZXRJdGVtCi0gIFB5TGlzdF9HZXRTbGljZT1weXRob24zMy5QeUxpc3RfR2V0U2xpY2UKLSAgUHlMaXN0X0luc2VydD1weXRob24zMy5QeUxpc3RfSW5zZXJ0Ci0gIFB5TGlzdF9OZXc9cHl0aG9uMzMuUHlMaXN0X05ldwotICBQeUxpc3RfUmV2ZXJzZT1weXRob24zMy5QeUxpc3RfUmV2ZXJzZQotICBQeUxpc3RfU2V0SXRlbT1weXRob24zMy5QeUxpc3RfU2V0SXRlbQotICBQeUxpc3RfU2V0U2xpY2U9cHl0aG9uMzMuUHlMaXN0X1NldFNsaWNlCi0gIFB5TGlzdF9TaXplPXB5dGhvbjMzLlB5TGlzdF9TaXplCi0gIFB5TGlzdF9Tb3J0PXB5dGhvbjMzLlB5TGlzdF9Tb3J0Ci0gIFB5TGlzdF9UeXBlPXB5dGhvbjMzLlB5TGlzdF9UeXBlIERBVEEKLSAgUHlMb25nUmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzMuUHlMb25nUmFuZ2VJdGVyX1R5cGUgREFUQQotICBQeUxvbmdfQXNEb3VibGU9cHl0aG9uMzMuUHlMb25nX0FzRG91YmxlCi0gIFB5TG9uZ19Bc0xvbmc9cHl0aG9uMzMuUHlMb25nX0FzTG9uZwotICBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3c9cHl0aG9uMzMuUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93Ci0gIFB5TG9uZ19Bc0xvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Bc0xvbmdMb25nCi0gIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3c9cHl0aG9uMzMuUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdwotICBQeUxvbmdfQXNTaXplX3Q9cHl0aG9uMzMuUHlMb25nX0FzU2l6ZV90Ci0gIFB5TG9uZ19Bc1NzaXplX3Q9cHl0aG9uMzMuUHlMb25nX0FzU3NpemVfdAotICBQeUxvbmdfQXNVbnNpZ25lZExvbmc9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZwotICBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzaz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzawotICBQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2sKLSAgUHlMb25nX0FzVm9pZFB0cj1weXRob24zMy5QeUxvbmdfQXNWb2lkUHRyCi0gIFB5TG9uZ19Gcm9tRG91YmxlPXB5dGhvbjMzLlB5TG9uZ19Gcm9tRG91YmxlCi0gIFB5TG9uZ19Gcm9tTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbUxvbmcKLSAgUHlMb25nX0Zyb21Mb25nTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbUxvbmdMb25nCi0gIFB5TG9uZ19Gcm9tU2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Gcm9tU2l6ZV90Ci0gIFB5TG9uZ19Gcm9tU3NpemVfdD1weXRob24zMy5QeUxvbmdfRnJvbVNzaXplX3QKLSAgUHlMb25nX0Zyb21TdHJpbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21TdHJpbmcKLSAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21VbnNpZ25lZExvbmcKLSAgUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZwotICBQeUxvbmdfRnJvbVZvaWRQdHI9cHl0aG9uMzMuUHlMb25nX0Zyb21Wb2lkUHRyCi0gIFB5TG9uZ19HZXRJbmZvPXB5dGhvbjMzLlB5TG9uZ19HZXRJbmZvCi0gIFB5TG9uZ19UeXBlPXB5dGhvbjMzLlB5TG9uZ19UeXBlIERBVEEKLSAgUHlNYXBfVHlwZT1weXRob24zMy5QeU1hcF9UeXBlIERBVEEKLSAgUHlNYXBwaW5nX0NoZWNrPXB5dGhvbjMzLlB5TWFwcGluZ19DaGVjawotICBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZz1weXRob24zMy5QeU1hcHBpbmdfR2V0SXRlbVN0cmluZwotICBQeU1hcHBpbmdfSGFzS2V5PXB5dGhvbjMzLlB5TWFwcGluZ19IYXNLZXkKLSAgUHlNYXBwaW5nX0hhc0tleVN0cmluZz1weXRob24zMy5QeU1hcHBpbmdfSGFzS2V5U3RyaW5nCi0gIFB5TWFwcGluZ19JdGVtcz1weXRob24zMy5QeU1hcHBpbmdfSXRlbXMKLSAgUHlNYXBwaW5nX0tleXM9cHl0aG9uMzMuUHlNYXBwaW5nX0tleXMKLSAgUHlNYXBwaW5nX0xlbmd0aD1weXRob24zMy5QeU1hcHBpbmdfTGVuZ3RoCi0gIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19TZXRJdGVtU3RyaW5nCi0gIFB5TWFwcGluZ19TaXplPXB5dGhvbjMzLlB5TWFwcGluZ19TaXplCi0gIFB5TWFwcGluZ19WYWx1ZXM9cHl0aG9uMzMuUHlNYXBwaW5nX1ZhbHVlcwotICBQeU1lbV9GcmVlPXB5dGhvbjMzLlB5TWVtX0ZyZWUKLSAgUHlNZW1fTWFsbG9jPXB5dGhvbjMzLlB5TWVtX01hbGxvYwotICBQeU1lbV9SZWFsbG9jPXB5dGhvbjMzLlB5TWVtX1JlYWxsb2MKLSAgUHlNZW1iZXJEZXNjcl9UeXBlPXB5dGhvbjMzLlB5TWVtYmVyRGVzY3JfVHlwZSBEQVRBCi0gIFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0Ci0gIFB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzPXB5dGhvbjMzLlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzCi0gIFB5TWVtb3J5Vmlld19UeXBlPXB5dGhvbjMzLlB5TWVtb3J5Vmlld19UeXBlIERBVEEKLSAgUHlNZXRob2REZXNjcl9UeXBlPXB5dGhvbjMzLlB5TWV0aG9kRGVzY3JfVHlwZSBEQVRBCi0gIFB5TW9kdWxlX0FkZEludENvbnN0YW50PXB5dGhvbjMzLlB5TW9kdWxlX0FkZEludENvbnN0YW50Ci0gIFB5TW9kdWxlX0FkZE9iamVjdD1weXRob24zMy5QeU1vZHVsZV9BZGRPYmplY3QKLSAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQ9cHl0aG9uMzMuUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQKLSAgUHlNb2R1bGVfQ3JlYXRlMj1weXRob24zMy5QeU1vZHVsZV9DcmVhdGUyCi0gIFB5TW9kdWxlX0dldERlZj1weXRob24zMy5QeU1vZHVsZV9HZXREZWYKLSAgUHlNb2R1bGVfR2V0RGljdD1weXRob24zMy5QeU1vZHVsZV9HZXREaWN0Ci0gIFB5TW9kdWxlX0dldEZpbGVuYW1lPXB5dGhvbjMzLlB5TW9kdWxlX0dldEZpbGVuYW1lCi0gIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0PXB5dGhvbjMzLlB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0Ci0gIFB5TW9kdWxlX0dldE5hbWU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0TmFtZQotICBQeU1vZHVsZV9HZXRTdGF0ZT1weXRob24zMy5QeU1vZHVsZV9HZXRTdGF0ZQotICBQeU1vZHVsZV9OZXc9cHl0aG9uMzMuUHlNb2R1bGVfTmV3Ci0gIFB5TW9kdWxlX1R5cGU9cHl0aG9uMzMuUHlNb2R1bGVfVHlwZSBEQVRBCi0gIFB5TnVsbEltcG9ydGVyX1R5cGU9cHl0aG9uMzMuUHlOdWxsSW1wb3J0ZXJfVHlwZSBEQVRBCi0gIFB5TnVtYmVyX0Fic29sdXRlPXB5dGhvbjMzLlB5TnVtYmVyX0Fic29sdXRlCi0gIFB5TnVtYmVyX0FkZD1weXRob24zMy5QeU51bWJlcl9BZGQKLSAgUHlOdW1iZXJfQW5kPXB5dGhvbjMzLlB5TnVtYmVyX0FuZAotICBQeU51bWJlcl9Bc1NzaXplX3Q9cHl0aG9uMzMuUHlOdW1iZXJfQXNTc2l6ZV90Ci0gIFB5TnVtYmVyX0NoZWNrPXB5dGhvbjMzLlB5TnVtYmVyX0NoZWNrCi0gIFB5TnVtYmVyX0Rpdm1vZD1weXRob24zMy5QeU51bWJlcl9EaXZtb2QKLSAgUHlOdW1iZXJfRmxvYXQ9cHl0aG9uMzMuUHlOdW1iZXJfRmxvYXQKLSAgUHlOdW1iZXJfRmxvb3JEaXZpZGU9cHl0aG9uMzMuUHlOdW1iZXJfRmxvb3JEaXZpZGUKLSAgUHlOdW1iZXJfSW5QbGFjZUFkZD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlQWRkCi0gIFB5TnVtYmVyX0luUGxhY2VBbmQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZUFuZAotICBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGU9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlCi0gIFB5TnVtYmVyX0luUGxhY2VMc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZUxzaGlmdAotICBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHk9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5Ci0gIFB5TnVtYmVyX0luUGxhY2VPcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlT3IKLSAgUHlOdW1iZXJfSW5QbGFjZVBvd2VyPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VQb3dlcgotICBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIKLSAgUHlOdW1iZXJfSW5QbGFjZVJzaGlmdD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlUnNoaWZ0Ci0gIFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlU3VidHJhY3QKLSAgUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGU9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUKLSAgUHlOdW1iZXJfSW5QbGFjZVhvcj1weXRob24zMy5QeU51bWJlcl9JblBsYWNlWG9yCi0gIFB5TnVtYmVyX0luZGV4PXB5dGhvbjMzLlB5TnVtYmVyX0luZGV4Ci0gIFB5TnVtYmVyX0ludmVydD1weXRob24zMy5QeU51bWJlcl9JbnZlcnQKLSAgUHlOdW1iZXJfTG9uZz1weXRob24zMy5QeU51bWJlcl9Mb25nCi0gIFB5TnVtYmVyX0xzaGlmdD1weXRob24zMy5QeU51bWJlcl9Mc2hpZnQKLSAgUHlOdW1iZXJfTXVsdGlwbHk9cHl0aG9uMzMuUHlOdW1iZXJfTXVsdGlwbHkKLSAgUHlOdW1iZXJfTmVnYXRpdmU9cHl0aG9uMzMuUHlOdW1iZXJfTmVnYXRpdmUKLSAgUHlOdW1iZXJfT3I9cHl0aG9uMzMuUHlOdW1iZXJfT3IKLSAgUHlOdW1iZXJfUG9zaXRpdmU9cHl0aG9uMzMuUHlOdW1iZXJfUG9zaXRpdmUKLSAgUHlOdW1iZXJfUG93ZXI9cHl0aG9uMzMuUHlOdW1iZXJfUG93ZXIKLSAgUHlOdW1iZXJfUmVtYWluZGVyPXB5dGhvbjMzLlB5TnVtYmVyX1JlbWFpbmRlcgotICBQeU51bWJlcl9Sc2hpZnQ9cHl0aG9uMzMuUHlOdW1iZXJfUnNoaWZ0Ci0gIFB5TnVtYmVyX1N1YnRyYWN0PXB5dGhvbjMzLlB5TnVtYmVyX1N1YnRyYWN0Ci0gIFB5TnVtYmVyX1RvQmFzZT1weXRob24zMy5QeU51bWJlcl9Ub0Jhc2UKLSAgUHlOdW1iZXJfVHJ1ZURpdmlkZT1weXRob24zMy5QeU51bWJlcl9UcnVlRGl2aWRlCi0gIFB5TnVtYmVyX1hvcj1weXRob24zMy5QeU51bWJlcl9Yb3IKLSAgUHlPU19BZnRlckZvcms9cHl0aG9uMzMuUHlPU19BZnRlckZvcmsKLSAgUHlPU19Jbml0SW50ZXJydXB0cz1weXRob24zMy5QeU9TX0luaXRJbnRlcnJ1cHRzCi0gIFB5T1NfSW5wdXRIb29rPXB5dGhvbjMzLlB5T1NfSW5wdXRIb29rIERBVEEKLSAgUHlPU19JbnRlcnJ1cHRPY2N1cnJlZD1weXRob24zMy5QeU9TX0ludGVycnVwdE9jY3VycmVkCi0gIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXI9cHl0aG9uMzMuUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciBEQVRBCi0gIFB5T1NfZG91YmxlX3RvX3N0cmluZz1weXRob24zMy5QeU9TX2RvdWJsZV90b19zdHJpbmcKLSAgUHlPU19nZXRzaWc9cHl0aG9uMzMuUHlPU19nZXRzaWcKLSAgUHlPU19teXN0cmljbXA9cHl0aG9uMzMuUHlPU19teXN0cmljbXAKLSAgUHlPU19teXN0cm5pY21wPXB5dGhvbjMzLlB5T1NfbXlzdHJuaWNtcAotICBQeU9TX3NldHNpZz1weXRob24zMy5QeU9TX3NldHNpZwotICBQeU9TX3NucHJpbnRmPXB5dGhvbjMzLlB5T1Nfc25wcmludGYKLSAgUHlPU19zdHJpbmdfdG9fZG91YmxlPXB5dGhvbjMzLlB5T1Nfc3RyaW5nX3RvX2RvdWJsZQotICBQeU9TX3N0cnRvbD1weXRob24zMy5QeU9TX3N0cnRvbAotICBQeU9TX3N0cnRvdWw9cHl0aG9uMzMuUHlPU19zdHJ0b3VsCi0gIFB5T1NfdnNucHJpbnRmPXB5dGhvbjMzLlB5T1NfdnNucHJpbnRmCi0gIFB5T2JqZWN0X0FTQ0lJPXB5dGhvbjMzLlB5T2JqZWN0X0FTQ0lJCi0gIFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcj1weXRob24zMy5QeU9iamVjdF9Bc0NoYXJCdWZmZXIKLSAgUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcj1weXRob24zMy5QeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yCi0gIFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcj1weXRob24zMy5QeU9iamVjdF9Bc1JlYWRCdWZmZXIKLSAgUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcj1weXRob24zMy5QeU9iamVjdF9Bc1dyaXRlQnVmZmVyCi0gIFB5T2JqZWN0X0J5dGVzPXB5dGhvbjMzLlB5T2JqZWN0X0J5dGVzCi0gIFB5T2JqZWN0X0NhbGw9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbAotICBQeU9iamVjdF9DYWxsRnVuY3Rpb249cHl0aG9uMzMuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCi0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3M9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncwotICBQeU9iamVjdF9DYWxsTWV0aG9kPXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxNZXRob2QKLSAgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MKLSAgUHlPYmplY3RfQ2FsbE9iamVjdD1weXRob24zMy5QeU9iamVjdF9DYWxsT2JqZWN0Ci0gIFB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcj1weXRob24zMy5QeU9iamVjdF9DaGVja1JlYWRCdWZmZXIKLSAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcz1weXRob24zMy5QeU9iamVjdF9DbGVhcldlYWtSZWZzCi0gIFB5T2JqZWN0X0RlbEl0ZW09cHl0aG9uMzMuUHlPYmplY3RfRGVsSXRlbQotICBQeU9iamVjdF9EZWxJdGVtU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcKLSAgUHlPYmplY3RfRGlyPXB5dGhvbjMzLlB5T2JqZWN0X0RpcgotICBQeU9iamVjdF9Gb3JtYXQ9cHl0aG9uMzMuUHlPYmplY3RfRm9ybWF0Ci0gIFB5T2JqZWN0X0ZyZWU9cHl0aG9uMzMuUHlPYmplY3RfRnJlZQotICBQeU9iamVjdF9HQ19EZWw9cHl0aG9uMzMuUHlPYmplY3RfR0NfRGVsCi0gIFB5T2JqZWN0X0dDX1RyYWNrPXB5dGhvbjMzLlB5T2JqZWN0X0dDX1RyYWNrCi0gIFB5T2JqZWN0X0dDX1VuVHJhY2s9cHl0aG9uMzMuUHlPYmplY3RfR0NfVW5UcmFjawotICBQeU9iamVjdF9HZW5lcmljR2V0QXR0cj1weXRob24zMy5QeU9iamVjdF9HZW5lcmljR2V0QXR0cgotICBQeU9iamVjdF9HZW5lcmljU2V0QXR0cj1weXRob24zMy5QeU9iamVjdF9HZW5lcmljU2V0QXR0cgotICBQeU9iamVjdF9HZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dldEF0dHIKLSAgUHlPYmplY3RfR2V0QXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9HZXRBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X0dldEl0ZW09cHl0aG9uMzMuUHlPYmplY3RfR2V0SXRlbQotICBQeU9iamVjdF9HZXRJdGVyPXB5dGhvbjMzLlB5T2JqZWN0X0dldEl0ZXIKLSAgUHlPYmplY3RfSGFzQXR0cj1weXRob24zMy5QeU9iamVjdF9IYXNBdHRyCi0gIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfSGFzQXR0clN0cmluZwotICBQeU9iamVjdF9IYXNoPXB5dGhvbjMzLlB5T2JqZWN0X0hhc2gKLSAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkPXB5dGhvbjMzLlB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZAotICBQeU9iamVjdF9Jbml0PXB5dGhvbjMzLlB5T2JqZWN0X0luaXQKLSAgUHlPYmplY3RfSW5pdFZhcj1weXRob24zMy5QeU9iamVjdF9Jbml0VmFyCi0gIFB5T2JqZWN0X0lzSW5zdGFuY2U9cHl0aG9uMzMuUHlPYmplY3RfSXNJbnN0YW5jZQotICBQeU9iamVjdF9Jc1N1YmNsYXNzPXB5dGhvbjMzLlB5T2JqZWN0X0lzU3ViY2xhc3MKLSAgUHlPYmplY3RfSXNUcnVlPXB5dGhvbjMzLlB5T2JqZWN0X0lzVHJ1ZQotICBQeU9iamVjdF9MZW5ndGg9cHl0aG9uMzMuUHlPYmplY3RfTGVuZ3RoCi0gIFB5T2JqZWN0X01hbGxvYz1weXRob24zMy5QeU9iamVjdF9NYWxsb2MKLSAgUHlPYmplY3RfTm90PXB5dGhvbjMzLlB5T2JqZWN0X05vdAotICBQeU9iamVjdF9SZWFsbG9jPXB5dGhvbjMzLlB5T2JqZWN0X1JlYWxsb2MKLSAgUHlPYmplY3RfUmVwcj1weXRob24zMy5QeU9iamVjdF9SZXByCi0gIFB5T2JqZWN0X1JpY2hDb21wYXJlPXB5dGhvbjMzLlB5T2JqZWN0X1JpY2hDb21wYXJlCi0gIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbD1weXRob24zMy5QeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wKLSAgUHlPYmplY3RfU2VsZkl0ZXI9cHl0aG9uMzMuUHlPYmplY3RfU2VsZkl0ZXIKLSAgUHlPYmplY3RfU2V0QXR0cj1weXRob24zMy5QeU9iamVjdF9TZXRBdHRyCi0gIFB5T2JqZWN0X1NldEF0dHJTdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfU2V0QXR0clN0cmluZwotICBQeU9iamVjdF9TZXRJdGVtPXB5dGhvbjMzLlB5T2JqZWN0X1NldEl0ZW0KLSAgUHlPYmplY3RfU2l6ZT1weXRob24zMy5QeU9iamVjdF9TaXplCi0gIFB5T2JqZWN0X1N0cj1weXRob24zMy5QeU9iamVjdF9TdHIKLSAgUHlPYmplY3RfVHlwZT1weXRob24zMy5QeU9iamVjdF9UeXBlIERBVEEKLSAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3M9cHl0aG9uMzMuUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3MKLSAgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFncz1weXRob24zMy5QeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzCi0gIFB5UHJvcGVydHlfVHlwZT1weXRob24zMy5QeVByb3BlcnR5X1R5cGUgREFUQQotICBQeVJhbmdlSXRlcl9UeXBlPXB5dGhvbjMzLlB5UmFuZ2VJdGVyX1R5cGUgREFUQQotICBQeVJhbmdlX1R5cGU9cHl0aG9uMzMuUHlSYW5nZV9UeXBlIERBVEEKLSAgUHlSZXZlcnNlZF9UeXBlPXB5dGhvbjMzLlB5UmV2ZXJzZWRfVHlwZSBEQVRBCi0gIFB5U2VxSXRlcl9OZXc9cHl0aG9uMzMuUHlTZXFJdGVyX05ldwotICBQeVNlcUl0ZXJfVHlwZT1weXRob24zMy5QeVNlcUl0ZXJfVHlwZSBEQVRBCi0gIFB5U2VxdWVuY2VfQ2hlY2s9cHl0aG9uMzMuUHlTZXF1ZW5jZV9DaGVjawotICBQeVNlcXVlbmNlX0NvbmNhdD1weXRob24zMy5QeVNlcXVlbmNlX0NvbmNhdAotICBQeVNlcXVlbmNlX0NvbnRhaW5zPXB5dGhvbjMzLlB5U2VxdWVuY2VfQ29udGFpbnMKLSAgUHlTZXF1ZW5jZV9Db3VudD1weXRob24zMy5QeVNlcXVlbmNlX0NvdW50Ci0gIFB5U2VxdWVuY2VfRGVsSXRlbT1weXRob24zMy5QeVNlcXVlbmNlX0RlbEl0ZW0KLSAgUHlTZXF1ZW5jZV9EZWxTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX0RlbFNsaWNlCi0gIFB5U2VxdWVuY2VfRmFzdD1weXRob24zMy5QeVNlcXVlbmNlX0Zhc3QKLSAgUHlTZXF1ZW5jZV9HZXRJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfR2V0SXRlbQotICBQeVNlcXVlbmNlX0dldFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfR2V0U2xpY2UKLSAgUHlTZXF1ZW5jZV9Jbj1weXRob24zMy5QeVNlcXVlbmNlX0luCi0gIFB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdD1weXRob24zMy5QeVNlcXVlbmNlX0luUGxhY2VDb25jYXQKLSAgUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0PXB5dGhvbjMzLlB5U2VxdWVuY2VfSW5QbGFjZVJlcGVhdAotICBQeVNlcXVlbmNlX0luZGV4PXB5dGhvbjMzLlB5U2VxdWVuY2VfSW5kZXgKLSAgUHlTZXF1ZW5jZV9MZW5ndGg9cHl0aG9uMzMuUHlTZXF1ZW5jZV9MZW5ndGgKLSAgUHlTZXF1ZW5jZV9MaXN0PXB5dGhvbjMzLlB5U2VxdWVuY2VfTGlzdAotICBQeVNlcXVlbmNlX1JlcGVhdD1weXRob24zMy5QeVNlcXVlbmNlX1JlcGVhdAotICBQeVNlcXVlbmNlX1NldEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9TZXRJdGVtCi0gIFB5U2VxdWVuY2VfU2V0U2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9TZXRTbGljZQotICBQeVNlcXVlbmNlX1NpemU9cHl0aG9uMzMuUHlTZXF1ZW5jZV9TaXplCi0gIFB5U2VxdWVuY2VfVHVwbGU9cHl0aG9uMzMuUHlTZXF1ZW5jZV9UdXBsZQotICBQeVNldEl0ZXJfVHlwZT1weXRob24zMy5QeVNldEl0ZXJfVHlwZSBEQVRBCi0gIFB5U2V0X0FkZD1weXRob24zMy5QeVNldF9BZGQKLSAgUHlTZXRfQ2xlYXI9cHl0aG9uMzMuUHlTZXRfQ2xlYXIKLSAgUHlTZXRfQ29udGFpbnM9cHl0aG9uMzMuUHlTZXRfQ29udGFpbnMKLSAgUHlTZXRfRGlzY2FyZD1weXRob24zMy5QeVNldF9EaXNjYXJkCi0gIFB5U2V0X05ldz1weXRob24zMy5QeVNldF9OZXcKLSAgUHlTZXRfUG9wPXB5dGhvbjMzLlB5U2V0X1BvcAotICBQeVNldF9TaXplPXB5dGhvbjMzLlB5U2V0X1NpemUKLSAgUHlTZXRfVHlwZT1weXRob24zMy5QeVNldF9UeXBlIERBVEEKLSAgUHlTbGljZV9HZXRJbmRpY2VzPXB5dGhvbjMzLlB5U2xpY2VfR2V0SW5kaWNlcwotICBQeVNsaWNlX0dldEluZGljZXNFeD1weXRob24zMy5QeVNsaWNlX0dldEluZGljZXNFeAotICBQeVNsaWNlX05ldz1weXRob24zMy5QeVNsaWNlX05ldwotICBQeVNsaWNlX1R5cGU9cHl0aG9uMzMuUHlTbGljZV9UeXBlIERBVEEKLSAgUHlTb3J0V3JhcHBlcl9UeXBlPXB5dGhvbjMzLlB5U29ydFdyYXBwZXJfVHlwZSBEQVRBCi0gIFB5U3RhdGVfRmluZE1vZHVsZT1weXRob24zMy5QeVN0YXRlX0ZpbmRNb2R1bGUKLSAgUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzMuUHlTdGF0ZV9BZGRNb2R1bGUKLSAgUHlTdGF0ZV9SZW1vdmVNb2R1bGU9cHl0aG9uMzMuUHlTdGF0ZV9SZW1vdmVNb2R1bGUKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbQotICBQeVN0cnVjdFNlcXVlbmNlX05ldz1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX05ldwotICBQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGU9cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlCi0gIFB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW0KLSAgUHlTdXBlcl9UeXBlPXB5dGhvbjMzLlB5U3VwZXJfVHlwZSBEQVRBCi0gIFB5U3lzX0FkZFdhcm5PcHRpb249cHl0aG9uMzMuUHlTeXNfQWRkV2Fybk9wdGlvbgotICBQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZT1weXRob24zMy5QeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZQotICBQeVN5c19Gb3JtYXRTdGRlcnI9cHl0aG9uMzMuUHlTeXNfRm9ybWF0U3RkZXJyCi0gIFB5U3lzX0Zvcm1hdFN0ZG91dD1weXRob24zMy5QeVN5c19Gb3JtYXRTdGRvdXQKLSAgUHlTeXNfR2V0T2JqZWN0PXB5dGhvbjMzLlB5U3lzX0dldE9iamVjdAotICBQeVN5c19IYXNXYXJuT3B0aW9ucz1weXRob24zMy5QeVN5c19IYXNXYXJuT3B0aW9ucwotICBQeVN5c19SZXNldFdhcm5PcHRpb25zPXB5dGhvbjMzLlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMKLSAgUHlTeXNfU2V0QXJndj1weXRob24zMy5QeVN5c19TZXRBcmd2Ci0gIFB5U3lzX1NldEFyZ3ZFeD1weXRob24zMy5QeVN5c19TZXRBcmd2RXgKLSAgUHlTeXNfU2V0T2JqZWN0PXB5dGhvbjMzLlB5U3lzX1NldE9iamVjdAotICBQeVN5c19TZXRQYXRoPXB5dGhvbjMzLlB5U3lzX1NldFBhdGgKLSAgUHlTeXNfV3JpdGVTdGRlcnI9cHl0aG9uMzMuUHlTeXNfV3JpdGVTdGRlcnIKLSAgUHlTeXNfV3JpdGVTdGRvdXQ9cHl0aG9uMzMuUHlTeXNfV3JpdGVTdGRvdXQKLSAgUHlUaHJlYWRTdGF0ZV9DbGVhcj1weXRob24zMy5QeVRocmVhZFN0YXRlX0NsZWFyCi0gIFB5VGhyZWFkU3RhdGVfRGVsZXRlPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfRGVsZXRlCi0gIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudD1weXRob24zMy5QeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQKLSAgUHlUaHJlYWRTdGF0ZV9HZXQ9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9HZXQKLSAgUHlUaHJlYWRTdGF0ZV9HZXREaWN0PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfR2V0RGljdAotICBQeVRocmVhZFN0YXRlX05ldz1weXRob24zMy5QeVRocmVhZFN0YXRlX05ldwotICBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMKLSAgUHlUaHJlYWRTdGF0ZV9Td2FwPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfU3dhcAotICBQeVRyYWNlQmFja19IZXJlPXB5dGhvbjMzLlB5VHJhY2VCYWNrX0hlcmUKLSAgUHlUcmFjZUJhY2tfUHJpbnQ9cHl0aG9uMzMuUHlUcmFjZUJhY2tfUHJpbnQKLSAgUHlUcmFjZUJhY2tfVHlwZT1weXRob24zMy5QeVRyYWNlQmFja19UeXBlIERBVEEKLSAgUHlUdXBsZUl0ZXJfVHlwZT1weXRob24zMy5QeVR1cGxlSXRlcl9UeXBlIERBVEEKLSAgUHlUdXBsZV9DbGVhckZyZWVMaXN0PXB5dGhvbjMzLlB5VHVwbGVfQ2xlYXJGcmVlTGlzdAotICBQeVR1cGxlX0dldEl0ZW09cHl0aG9uMzMuUHlUdXBsZV9HZXRJdGVtCi0gIFB5VHVwbGVfR2V0U2xpY2U9cHl0aG9uMzMuUHlUdXBsZV9HZXRTbGljZQotICBQeVR1cGxlX05ldz1weXRob24zMy5QeVR1cGxlX05ldwotICBQeVR1cGxlX1BhY2s9cHl0aG9uMzMuUHlUdXBsZV9QYWNrCi0gIFB5VHVwbGVfU2V0SXRlbT1weXRob24zMy5QeVR1cGxlX1NldEl0ZW0KLSAgUHlUdXBsZV9TaXplPXB5dGhvbjMzLlB5VHVwbGVfU2l6ZQotICBQeVR1cGxlX1R5cGU9cHl0aG9uMzMuUHlUdXBsZV9UeXBlIERBVEEKLSAgUHlUeXBlX0NsZWFyQ2FjaGU9cHl0aG9uMzMuUHlUeXBlX0NsZWFyQ2FjaGUKLSAgUHlUeXBlX0Zyb21TcGVjPXB5dGhvbjMzLlB5VHlwZV9Gcm9tU3BlYwotICBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXM9cHl0aG9uMzMuUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzCi0gIFB5VHlwZV9HZW5lcmljQWxsb2M9cHl0aG9uMzMuUHlUeXBlX0dlbmVyaWNBbGxvYwotICBQeVR5cGVfR2VuZXJpY05ldz1weXRob24zMy5QeVR5cGVfR2VuZXJpY05ldwotICBQeVR5cGVfR2V0RmxhZ3M9cHl0aG9uMzMuUHlUeXBlX0dldEZsYWdzCi0gIFB5VHlwZV9Jc1N1YnR5cGU9cHl0aG9uMzMuUHlUeXBlX0lzU3VidHlwZQotICBQeVR5cGVfTW9kaWZpZWQ9cHl0aG9uMzMuUHlUeXBlX01vZGlmaWVkCi0gIFB5VHlwZV9SZWFkeT1weXRob24zMy5QeVR5cGVfUmVhZHkKLSAgUHlUeXBlX1R5cGU9cHl0aG9uMzMuUHlUeXBlX1R5cGUgREFUQQotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGU9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0Ci0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbgotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZwotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbgotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24KLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQKLSAgUHlVbmljb2RlSXRlcl9UeXBlPXB5dGhvbjMzLlB5VW5pY29kZUl0ZXJfVHlwZSBEQVRBCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0Ci0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbgotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydAotICBQeVVuaWNvZGVfQXBwZW5kPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXBwZW5kCi0gIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9BcHBlbmRBbmREZWwKLSAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0NoYXJtYXBTdHJpbmcKLSAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZFVuaWNvZGUKLSAgUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkVW5pY29kZQotICBQeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Bc0xhdGluMVN0cmluZwotICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNVVEYxNlN0cmluZwotICBQeVVuaWNvZGVfQXNVVEYzMlN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzVVRGMzJTdHJpbmcKLSAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0FzVVRGOFN0cmluZwotICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1dpZGVDaGFyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQXNXaWRlQ2hhcgotICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0NsZWFyRnJlZWxpc3QKLSAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Db21wYXJlCi0gIFB5VW5pY29kZV9Db25jYXQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Db25jYXQKLSAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQ29udGFpbnMKLSAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfQ291bnQKLSAgUHlVbmljb2RlX0RlY29kZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZQotICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSQotICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAKLSAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKLSAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZUxhdGluMQotICBQeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTYKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYzMj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjMyCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMzJTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjgKLSAgUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjhTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0RlY29kZVVuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRlNDb252ZXJ0ZXIKLSAgUHlVbmljb2RlX0ZTRGVjb2Rlcj1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0ZTRGVjb2RlcgotICBQeVVuaWNvZGVfRmluZD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0ZpbmQKLSAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zvcm1hdAotICBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tRW5jb2RlZE9iamVjdAotICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbUZvcm1hdFYKLSAgUHlVbmljb2RlX0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tT2JqZWN0Ci0gIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX0Zyb21PcmRpbmFsCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbVN0cmluZwotICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nQW5kU2l6ZQotICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfRnJvbVdpZGVDaGFyCi0gIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9HZXREZWZhdWx0RW5jb2RpbmcKLSAgUHlVbmljb2RlX0dldFNpemU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9HZXRTaXplCi0gIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Jc0lkZW50aWZpZXIKLSAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9Kb2luCi0gIFB5VW5pY29kZV9QYXJ0aXRpb249cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9QYXJ0aXRpb24KLSAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uCi0gIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9SU3BsaXQKLSAgUHlVbmljb2RlX1JlcGxhY2U9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9SZXBsYWNlCi0gIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9SZXNpemUKLSAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfUmljaENvbXBhcmUKLSAgUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzMuUHlVbmljb2RlVUNTMl9TcGxpdAotICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMKLSAgUHlVbmljb2RlX1RhaWxtYXRjaD1weXRob24zMy5QeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaAotICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjMzLlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlCi0gIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjMzLlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCi0gIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY3Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKLSAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKLSAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAotICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQotICBQeVVuaWNvZGVfVHlwZT1weXRob24zMy5QeVVuaWNvZGVfVHlwZSBEQVRBCi0gIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCi0gIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zMy5QeVdlYWtyZWZfTmV3UHJveHkKLSAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zMy5QeVdlYWtyZWZfTmV3UmVmCi0gIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCi0gIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzMuUHlXcmFwcGVyX05ldwotICBQeVppcF9UeXBlPXB5dGhvbjMzLlB5WmlwX1R5cGUgREFUQQotICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zMy5QeV9BZGRQZW5kaW5nQ2FsbAotICBQeV9BdEV4aXQ9cHl0aG9uMzMuUHlfQXRFeGl0Ci0gIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzMuUHlfQnVpbGRWYWx1ZQotICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjMzLlB5X0NvbXBpbGVTdHJpbmcKLSAgUHlfRGVjUmVmPXB5dGhvbjMzLlB5X0RlY1JlZgotICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zMy5QeV9FbmRJbnRlcnByZXRlcgotICBQeV9FeGl0PXB5dGhvbjMzLlB5X0V4aXQKLSAgUHlfRmF0YWxFcnJvcj1weXRob24zMy5QeV9GYXRhbEVycm9yCi0gIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCi0gIFB5X0ZpbmFsaXplPXB5dGhvbjMzLlB5X0ZpbmFsaXplCi0gIFB5X0dldEJ1aWxkSW5mbz1weXRob24zMy5QeV9HZXRCdWlsZEluZm8KLSAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzMuUHlfR2V0Q29tcGlsZXIKLSAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjMzLlB5X0dldENvcHlyaWdodAotICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjMzLlB5X0dldEV4ZWNQcmVmaXgKLSAgUHlfR2V0UGF0aD1weXRob24zMy5QeV9HZXRQYXRoCi0gIFB5X0dldFBsYXRmb3JtPXB5dGhvbjMzLlB5X0dldFBsYXRmb3JtCi0gIFB5X0dldFByZWZpeD1weXRob24zMy5QeV9HZXRQcmVmaXgKLSAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjMzLlB5X0dldFByb2dyYW1GdWxsUGF0aAotICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zMy5QeV9HZXRQcm9ncmFtTmFtZQotICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjMzLlB5X0dldFB5dGhvbkhvbWUKLSAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuUHlfR2V0UmVjdXJzaW9uTGltaXQKLSAgUHlfR2V0VmVyc2lvbj1weXRob24zMy5QeV9HZXRWZXJzaW9uCi0gIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCi0gIFB5X0luY1JlZj1weXRob24zMy5QeV9JbmNSZWYKLSAgUHlfSW5pdGlhbGl6ZT1weXRob24zMy5QeV9Jbml0aWFsaXplCi0gIFB5X0luaXRpYWxpemVFeD1weXRob24zMy5QeV9Jbml0aWFsaXplRXgKLSAgUHlfSXNJbml0aWFsaXplZD1weXRob24zMy5QeV9Jc0luaXRpYWxpemVkCi0gIFB5X01haW49cHl0aG9uMzMuUHlfTWFpbgotICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjMzLlB5X01ha2VQZW5kaW5nQ2FsbHMKLSAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzMuUHlfTmV3SW50ZXJwcmV0ZXIKLSAgUHlfUmVwckVudGVyPXB5dGhvbjMzLlB5X1JlcHJFbnRlcgotICBQeV9SZXByTGVhdmU9cHl0aG9uMzMuUHlfUmVwckxlYXZlCi0gIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X1NldFByb2dyYW1OYW1lCi0gIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfU2V0UHl0aG9uSG9tZQotICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9TZXRSZWN1cnNpb25MaW1pdAotICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zMy5QeV9TeW10YWJsZVN0cmluZwotICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzMuUHlfVmFCdWlsZFZhbHVlCi0gIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuX1B5RXJyX0JhZEludGVybmFsQ2FsbAotICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjMzLl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKLSAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKLSAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zMy5fUHlPYmplY3RfR0NfTWFsbG9jCi0gIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ldwotICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19OZXdWYXIKLSAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zMy5fUHlPYmplY3RfR0NfUmVzaXplCi0gIF9QeU9iamVjdF9OZXc9cHl0aG9uMzMuX1B5T2JqZWN0X05ldwotICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjMzLl9QeU9iamVjdF9OZXdWYXIKLSAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMzLl9QeVN0YXRlX0FkZE1vZHVsZQotICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjMzLl9QeVRocmVhZFN0YXRlX0luaXQKLSAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKLSAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjMzLl9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCi0gIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjMzLl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKLSAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzMuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKLSAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zMy5fUHlUcmFzaF9kZXN0cm95X2NoYWluCi0gIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCi0gIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCi0gIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKLSAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zMy5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCi0gIF9QeV9EZWFsbG9jPXB5dGhvbjMzLl9QeV9EZWFsbG9jCi0gIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zMy5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQotICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzMuX1B5X0ZhbHNlU3RydWN0IERBVEEKLSAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzMuX1B5X05vbmVTdHJ1Y3QgREFUQQotICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzMuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKLSAgX1B5X1N3YXBwZWRPcD1weXRob24zMy5fUHlfU3dhcHBlZE9wIERBVEEKLSAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzMuX1B5X1RydWVTdHJ1Y3QgREFUQQotICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZV9TaXplVAotICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zMy5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAotICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKLSAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKLSAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zMy5fUHlfQnVpbGRWYWx1ZV9TaXplVAorICBQeUFyZ19QYXJzZT1weXRob24zNC5QeUFyZ19QYXJzZQorICBQeUFyZ19QYXJzZVR1cGxlPXB5dGhvbjM0LlB5QXJnX1BhcnNlVHVwbGUKKyAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjM0LlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19VbnBhY2tUdXBsZT1weXRob24zNC5QeUFyZ19VbnBhY2tUdXBsZQorICBQeUFyZ19WYVBhcnNlPXB5dGhvbjM0LlB5QXJnX1ZhUGFyc2UKKyAgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMKKyAgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzPXB5dGhvbjM0LlB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cworICBQeUJhc2VPYmplY3RfVHlwZT1weXRob24zNC5QeUJhc2VPYmplY3RfVHlwZSBEQVRBCisgIFB5Qm9vbF9Gcm9tTG9uZz1weXRob24zNC5QeUJvb2xfRnJvbUxvbmcKKyAgUHlCb29sX1R5cGU9cHl0aG9uMzQuUHlCb29sX1R5cGUgREFUQQorICBQeUJ5dGVBcnJheUl0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheUl0ZXJfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5X0FzU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0FzU3RyaW5nCisgIFB5Qnl0ZUFycmF5X0NvbmNhdD1weXRob24zNC5QeUJ5dGVBcnJheV9Db25jYXQKKyAgUHlCeXRlQXJyYXlfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVBcnJheV9Gcm9tT2JqZWN0CisgIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCisgIFB5Qnl0ZUFycmF5X1Jlc2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9SZXNpemUKKyAgUHlCeXRlQXJyYXlfU2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9TaXplCisgIFB5Qnl0ZUFycmF5X1R5cGU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfVHlwZSBEQVRBCisgIFB5Qnl0ZXNJdGVyX1R5cGU9cHl0aG9uMzQuUHlCeXRlc0l0ZXJfVHlwZSBEQVRBCisgIFB5Qnl0ZXNfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlc19Bc1N0cmluZworICBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZQorICBQeUJ5dGVzX0NvbmNhdD1weXRob24zNC5QeUJ5dGVzX0NvbmNhdAorICBQeUJ5dGVzX0NvbmNhdEFuZERlbD1weXRob24zNC5QeUJ5dGVzX0NvbmNhdEFuZERlbAorICBQeUJ5dGVzX0RlY29kZUVzY2FwZT1weXRob24zNC5QeUJ5dGVzX0RlY29kZUVzY2FwZQorICBQeUJ5dGVzX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlCeXRlc19Gcm9tRm9ybWF0CisgIFB5Qnl0ZXNfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlCeXRlc19Gcm9tRm9ybWF0VgorICBQeUJ5dGVzX0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlCeXRlc19Gcm9tT2JqZWN0CisgIFB5Qnl0ZXNfRnJvbVN0cmluZz1weXRob24zNC5QeUJ5dGVzX0Zyb21TdHJpbmcKKyAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfUmVwcj1weXRob24zNC5QeUJ5dGVzX1JlcHIKKyAgUHlCeXRlc19TaXplPXB5dGhvbjM0LlB5Qnl0ZXNfU2l6ZQorICBQeUJ5dGVzX1R5cGU9cHl0aG9uMzQuUHlCeXRlc19UeXBlIERBVEEKKyAgUHlDRnVuY3Rpb25fQ2FsbD1weXRob24zNC5QeUNGdW5jdGlvbl9DYWxsCisgIFB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzQuUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdAorICBQeUNGdW5jdGlvbl9HZXRGbGFncz1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRGbGFncworICBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbj1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgorICBQeUNGdW5jdGlvbl9HZXRTZWxmPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldFNlbGYKKyAgUHlDRnVuY3Rpb25fTmV3PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ldworICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zNC5QeUNGdW5jdGlvbl9OZXdFeAorICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQorICBQeUNhbGxJdGVyX05ldz1weXRob24zNC5QeUNhbGxJdGVyX05ldworICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzQuUHlDYWxsSXRlcl9UeXBlIERBVEEKKyAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zNC5QeUNhbGxhYmxlX0NoZWNrCisgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXRDb250ZXh0CisgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCisgIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXROYW1lCisgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXRQb2ludGVyCisgIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzQuUHlDYXBzdWxlX0ltcG9ydAorICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zNC5QeUNhcHN1bGVfSXNWYWxpZAorICBQeUNhcHN1bGVfTmV3PXB5dGhvbjM0LlB5Q2Fwc3VsZV9OZXcKKyAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX1NldENvbnRleHQKKyAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX1NldE5hbWUKKyAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX1NldFBvaW50ZXIKKyAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzQuUHlDYXBzdWxlX1R5cGUgREFUQQorICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCisgIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGUKKyAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfRGVjb2RlcgorICBQeUNvZGVjX0VuY29kZT1weXRob24zNC5QeUNvZGVjX0VuY29kZQorICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19FbmNvZGVyCisgIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfSWdub3JlRXJyb3JzCisgIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCisgIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCisgIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zNC5QeUNvZGVjX0tub3duRW5jb2RpbmcKKyAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zNC5QeUNvZGVjX0xvb2t1cEVycm9yCisgIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzQuUHlDb2RlY19SZWdpc3RlcgorICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzQuUHlDb2RlY19SZWdpc3RlckVycm9yCisgIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzQuUHlDb2RlY19TdHJlYW1SZWFkZXIKKyAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzQuUHlDb2RlY19TdHJlYW1Xcml0ZXIKKyAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19TdHJpY3RFcnJvcnMKKyAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCisgIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zNC5QeUNvbXBsZXhfRnJvbURvdWJsZXMKKyAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCisgIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzQuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQorICBQeUNvbXBsZXhfVHlwZT1weXRob24zNC5QeUNvbXBsZXhfVHlwZSBEQVRBCisgIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzQuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAorICBQeURlc2NyX05ld0dldFNldD1weXRob24zNC5QeURlc2NyX05ld0dldFNldAorICBQeURlc2NyX05ld01lbWJlcj1weXRob24zNC5QeURlc2NyX05ld01lbWJlcgorICBQeURlc2NyX05ld01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld01ldGhvZAorICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZW1zX1R5cGUgREFUQQorICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQorICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKKyAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQorICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzQuUHlEaWN0S2V5c19UeXBlIERBVEEKKyAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjM0LlB5RGljdFByb3h5X05ldworICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjM0LlB5RGljdFByb3h5X1R5cGUgREFUQQorICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zNC5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCisgIFB5RGljdF9DbGVhcj1weXRob24zNC5QeURpY3RfQ2xlYXIKKyAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjM0LlB5RGljdF9Db250YWlucworICBQeURpY3RfQ29weT1weXRob24zNC5QeURpY3RfQ29weQorICBQeURpY3RfRGVsSXRlbT1weXRob24zNC5QeURpY3RfRGVsSXRlbQorICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfRGVsSXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbT1weXRob24zNC5QeURpY3RfR2V0SXRlbQorICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfR2V0SXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zNC5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgorICBQeURpY3RfSXRlbXM9cHl0aG9uMzQuUHlEaWN0X0l0ZW1zCisgIFB5RGljdF9LZXlzPXB5dGhvbjM0LlB5RGljdF9LZXlzCisgIFB5RGljdF9NZXJnZT1weXRob24zNC5QeURpY3RfTWVyZ2UKKyAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzQuUHlEaWN0X01lcmdlRnJvbVNlcTIKKyAgUHlEaWN0X05ldz1weXRob24zNC5QeURpY3RfTmV3CisgIFB5RGljdF9OZXh0PXB5dGhvbjM0LlB5RGljdF9OZXh0CisgIFB5RGljdF9TZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9TZXRJdGVtCisgIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9TZXRJdGVtU3RyaW5nCisgIFB5RGljdF9TaXplPXB5dGhvbjM0LlB5RGljdF9TaXplCisgIFB5RGljdF9UeXBlPXB5dGhvbjM0LlB5RGljdF9UeXBlIERBVEEKKyAgUHlEaWN0X1VwZGF0ZT1weXRob24zNC5QeURpY3RfVXBkYXRlCisgIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzQuUHlEaWN0X1ZhbHVlcworICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzQuUHlFbGxpcHNpc19UeXBlIERBVEEKKyAgUHlFbnVtX1R5cGU9cHl0aG9uMzQuUHlFbnVtX1R5cGUgREFUQQorICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zNC5QeUVycl9CYWRBcmd1bWVudAorICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzQuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zNC5QeUVycl9DaGVja1NpZ25hbHMKKyAgUHlFcnJfQ2xlYXI9cHl0aG9uMzQuUHlFcnJfQ2xlYXIKKyAgUHlFcnJfRGlzcGxheT1weXRob24zNC5QeUVycl9EaXNwbGF5CisgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzQuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9GZXRjaD1weXRob24zNC5QeUVycl9GZXRjaAorICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzQuUHlFcnJfRm9ybWF0CisgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKKyAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjM0LlB5RXJyX05ld0V4Y2VwdGlvbgorICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjM0LlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKKyAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzQuUHlFcnJfTm9NZW1vcnkKKyAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgorICBQeUVycl9PY2N1cnJlZD1weXRob24zNC5QeUVycl9PY2N1cnJlZAorICBQeUVycl9QcmludD1weXRob24zNC5QeUVycl9QcmludAorICBQeUVycl9QcmludEV4PXB5dGhvbjM0LlB5RXJyX1ByaW50RXgKKyAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzQuUHlFcnJfUHJvZ3JhbVRleHQKKyAgUHlFcnJfUmVzdG9yZT1weXRob24zNC5QeUVycl9SZXN0b3JlCisgIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm8KKyAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQorICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0CisgIFB5RXJyX1NldEludGVycnVwdD1weXRob24zNC5QeUVycl9TZXRJbnRlcnJ1cHQKKyAgUHlFcnJfU2V0Tm9uZT1weXRob24zNC5QeUVycl9TZXROb25lCisgIFB5RXJyX1NldE9iamVjdD1weXRob24zNC5QeUVycl9TZXRPYmplY3QKKyAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjM0LlB5RXJyX1NldFN0cmluZworICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zNC5QeUVycl9TeW50YXhMb2NhdGlvbgorICBQeUVycl9XYXJuRXg9cHl0aG9uMzQuUHlFcnJfV2FybkV4CisgIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zNC5QeUVycl9XYXJuRXhwbGljaXQKKyAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zNC5QeUVycl9XYXJuRm9ybWF0CisgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zNC5QeUVycl9Xcml0ZVVucmFpc2FibGUKKyAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlTG9jaworICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zNC5QeUV2YWxfQWNxdWlyZVRocmVhZAorICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5RXZhbF9DYWxsRnVuY3Rpb24KKyAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzQuUHlFdmFsX0NhbGxNZXRob2QKKyAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzQuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKKyAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZQorICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zNC5QeUV2YWxfRXZhbENvZGVFeAorICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjM0LlB5RXZhbF9FdmFsRnJhbWUKKyAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsRnJhbWVFeAorICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzQuUHlFdmFsX0dldEJ1aWx0aW5zCisgIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzQuUHlFdmFsX0dldENhbGxTdGF0cworICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZyYW1lCisgIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zNC5QeUV2YWxfR2V0RnVuY0Rlc2MKKyAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jTmFtZQorICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zNC5QeUV2YWxfR2V0R2xvYmFscworICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRMb2NhbHMKKyAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9Jbml0VGhyZWFkcworICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zNC5QeUV2YWxfUmVJbml0VGhyZWFkcworICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VMb2NrCisgIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9SZWxlYXNlVGhyZWFkCisgIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9SZXN0b3JlVGhyZWFkCisgIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9TYXZlVGhyZWFkCisgIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzQuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAorICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKKyAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQorICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zNC5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCisgIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzQuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjM0LlB5RXhjX0J1ZmZlckVycm9yIERBVEEKKyAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCisgIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNC5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19FT0ZFcnJvcj1weXRob24zNC5QeUV4Y19FT0ZFcnJvciBEQVRBCisgIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzQuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCisgIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19FeGNlcHRpb24gREFUQQorICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzQuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKKyAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zNC5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKKyAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zNC5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKKyAgUHlFeGNfSU9FcnJvcj1weXRob24zNC5QeUV4Y19JT0Vycm9yIERBVEEKKyAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQorICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjM0LlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQorICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjM0LlB5RXhjX0luZGV4RXJyb3IgREFUQQorICBQeUV4Y19LZXlFcnJvcj1weXRob24zNC5QeUV4Y19LZXlFcnJvciBEQVRBCisgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjM0LlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKKyAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzQuUHlFeGNfTG9va3VwRXJyb3IgREFUQQorICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zNC5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zNC5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQorICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfTmFtZUVycm9yIERBVEEKKyAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zNC5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKKyAgUHlFeGNfT1NFcnJvcj1weXRob24zNC5QeUV4Y19PU0Vycm9yIERBVEEKKyAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zNC5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKKyAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNC5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKKyAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCisgIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjM0LlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjM0LlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCisgIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKKyAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zNC5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKKyAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzQuUHlFeGNfU3ludGF4RXJyb3IgREFUQQorICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQorICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zNC5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCisgIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzQuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCisgIFB5RXhjX1RhYkVycm9yPXB5dGhvbjM0LlB5RXhjX1RhYkVycm9yIERBVEEKKyAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjM0LlB5RXhjX1R5cGVFcnJvciBEQVRBCisgIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjM0LlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKKyAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVXNlcldhcm5pbmcgREFUQQorICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjM0LlB5RXhjX1ZhbHVlRXJyb3IgREFUQQorICBQeUV4Y19XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1dhcm5pbmcgREFUQQorICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zNC5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCisgIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjM0LlB5RXhjZXB0aW9uX0dldENhdXNlCisgIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCisgIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjM0LlB5RXhjZXB0aW9uX1NldENhdXNlCisgIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCisgIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzQuUHlGaWxlX0Zyb21GZAorICBQeUZpbGVfR2V0TGluZT1weXRob24zNC5QeUZpbGVfR2V0TGluZQorICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzQuUHlGaWxlX1dyaXRlT2JqZWN0CisgIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zNC5QeUZpbGVfV3JpdGVTdHJpbmcKKyAgUHlGaWx0ZXJfVHlwZT1weXRob24zNC5QeUZpbHRlcl9UeXBlIERBVEEKKyAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zNC5QeUZsb2F0X0FzRG91YmxlCisgIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zNC5QeUZsb2F0X0Zyb21Eb3VibGUKKyAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5RmxvYXRfRnJvbVN0cmluZworICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzQuUHlGbG9hdF9HZXRJbmZvCisgIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjM0LlB5RmxvYXRfR2V0TWF4CisgIFB5RmxvYXRfR2V0TWluPXB5dGhvbjM0LlB5RmxvYXRfR2V0TWluCisgIFB5RmxvYXRfVHlwZT1weXRob24zNC5QeUZsb2F0X1R5cGUgREFUQQorICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzQuUHlGcm96ZW5TZXRfTmV3CisgIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzQuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCisgIFB5R0NfQ29sbGVjdD1weXRob24zNC5QeUdDX0NvbGxlY3QKKyAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzQuUHlHSUxTdGF0ZV9FbnN1cmUKKyAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzQuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKKyAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjM0LlB5R0lMU3RhdGVfUmVsZWFzZQorICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzQuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKKyAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0FkZE1vZHVsZQorICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjM0LlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKKyAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zNC5QeUltcG9ydF9DbGVhbnVwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCisgIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjM0LlB5SW1wb3J0X0dldEltcG9ydGVyCisgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjM0LlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCisgIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjM0LlB5SW1wb3J0X0dldE1hZ2ljVGFnCisgIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAorICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0CisgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zNC5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zNC5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKKyAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X1JlbG9hZE1vZHVsZQorICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQorICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjM0LlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKKyAgUHlJdGVyX05leHQ9cHl0aG9uMzQuUHlJdGVyX05leHQKKyAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdEl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zNC5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQorICBQeUxpc3RfQXBwZW5kPXB5dGhvbjM0LlB5TGlzdF9BcHBlbmQKKyAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzQuUHlMaXN0X0FzVHVwbGUKKyAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzQuUHlMaXN0X0dldEl0ZW0KKyAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9HZXRTbGljZQorICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjM0LlB5TGlzdF9JbnNlcnQKKyAgUHlMaXN0X05ldz1weXRob24zNC5QeUxpc3RfTmV3CisgIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjM0LlB5TGlzdF9SZXZlcnNlCisgIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjM0LlB5TGlzdF9TZXRJdGVtCisgIFB5TGlzdF9TZXRTbGljZT1weXRob24zNC5QeUxpc3RfU2V0U2xpY2UKKyAgUHlMaXN0X1NpemU9cHl0aG9uMzQuUHlMaXN0X1NpemUKKyAgUHlMaXN0X1NvcnQ9cHl0aG9uMzQuUHlMaXN0X1NvcnQKKyAgUHlMaXN0X1R5cGU9cHl0aG9uMzQuUHlMaXN0X1R5cGUgREFUQQorICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zNC5QeUxvbmdfQXNEb3VibGUKKyAgUHlMb25nX0FzTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nCisgIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zNC5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0FzTG9uZ0xvbmcKKyAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93CisgIFB5TG9uZ19Bc1NpemVfdD1weXRob24zNC5QeUxvbmdfQXNTaXplX3QKKyAgUHlMb25nX0FzU3NpemVfdD1weXRob24zNC5QeUxvbmdfQXNTc2l6ZV90CisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaworICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Bc1ZvaWRQdHIKKyAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzQuUHlMb25nX0Zyb21Eb3VibGUKKyAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tTG9uZworICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21TaXplX3QKKyAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3NpemVfdAorICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zNC5QeUxvbmdfRnJvbVN0cmluZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zNC5QeUxvbmdfRnJvbVZvaWRQdHIKKyAgUHlMb25nX0dldEluZm89cHl0aG9uMzQuUHlMb25nX0dldEluZm8KKyAgUHlMb25nX1R5cGU9cHl0aG9uMzQuUHlMb25nX1R5cGUgREFUQQorICBQeU1hcF9UeXBlPXB5dGhvbjM0LlB5TWFwX1R5cGUgREFUQQorICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzQuUHlNYXBwaW5nX0NoZWNrCisgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCisgIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleQorICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKKyAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjM0LlB5TWFwcGluZ19JdGVtcworICBQeU1hcHBpbmdfS2V5cz1weXRob24zNC5QeU1hcHBpbmdfS2V5cworICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjM0LlB5TWFwcGluZ19MZW5ndGgKKyAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzQuUHlNYXBwaW5nX1NpemUKKyAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zNC5QeU1hcHBpbmdfVmFsdWVzCisgIFB5TWVtX0ZyZWU9cHl0aG9uMzQuUHlNZW1fRnJlZQorICBQeU1lbV9NYWxsb2M9cHl0aG9uMzQuUHlNZW1fTWFsbG9jCisgIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzQuUHlNZW1fUmVhbGxvYworICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzQuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKKyAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKKyAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQorICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzQuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzQuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKKyAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjM0LlB5TW9kdWxlX0FkZE9iamVjdAorICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAorICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjM0LlB5TW9kdWxlX0NyZWF0ZTIKKyAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjM0LlB5TW9kdWxlX0dldERlZgorICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjM0LlB5TW9kdWxlX0dldERpY3QKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RmlsZW5hbWUKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKKyAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXROYW1lCisgIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjM0LlB5TW9kdWxlX0dldFN0YXRlCisgIFB5TW9kdWxlX05ldz1weXRob24zNC5QeU1vZHVsZV9OZXcKKyAgUHlNb2R1bGVfVHlwZT1weXRob24zNC5QeU1vZHVsZV9UeXBlIERBVEEKKyAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zNC5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKKyAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzQuUHlOdW1iZXJfQWJzb2x1dGUKKyAgUHlOdW1iZXJfQWRkPXB5dGhvbjM0LlB5TnVtYmVyX0FkZAorICBQeU51bWJlcl9BbmQ9cHl0aG9uMzQuUHlOdW1iZXJfQW5kCisgIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zNC5QeU51bWJlcl9Bc1NzaXplX3QKKyAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzQuUHlOdW1iZXJfQ2hlY2sKKyAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjM0LlB5TnVtYmVyX0Rpdm1vZAorICBQeU51bWJlcl9GbG9hdD1weXRob24zNC5QeU51bWJlcl9GbG9hdAorICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zNC5QeU51bWJlcl9GbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBZGQKKyAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlQW5kCisgIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlTHNoaWZ0CisgIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKKyAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VPcgorICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCisgIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgorICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAorICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQorICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VYb3IKKyAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzQuUHlOdW1iZXJfSW5kZXgKKyAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjM0LlB5TnVtYmVyX0ludmVydAorICBQeU51bWJlcl9Mb25nPXB5dGhvbjM0LlB5TnVtYmVyX0xvbmcKKyAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0xzaGlmdAorICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zNC5QeU51bWJlcl9NdWx0aXBseQorICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zNC5QeU51bWJlcl9OZWdhdGl2ZQorICBQeU51bWJlcl9Pcj1weXRob24zNC5QeU51bWJlcl9PcgorICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zNC5QeU51bWJlcl9Qb3NpdGl2ZQorICBQeU51bWJlcl9Qb3dlcj1weXRob24zNC5QeU51bWJlcl9Qb3dlcgorICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzQuUHlOdW1iZXJfUmVtYWluZGVyCisgIFB5TnVtYmVyX1JzaGlmdD1weXRob24zNC5QeU51bWJlcl9Sc2hpZnQKKyAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfU3VidHJhY3QKKyAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjM0LlB5TnVtYmVyX1RvQmFzZQorICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX1RydWVEaXZpZGUKKyAgUHlOdW1iZXJfWG9yPXB5dGhvbjM0LlB5TnVtYmVyX1hvcgorICBQeU9TX0FmdGVyRm9yaz1weXRob24zNC5QeU9TX0FmdGVyRm9yaworICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjM0LlB5T1NfSW5pdEludGVycnVwdHMKKyAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzQuUHlPU19JbnB1dEhvb2sgREFUQQorICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjM0LlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKKyAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zNC5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKKyAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjM0LlB5T1NfZG91YmxlX3RvX3N0cmluZworICBQeU9TX2dldHNpZz1weXRob24zNC5QeU9TX2dldHNpZworICBQeU9TX215c3RyaWNtcD1weXRob24zNC5QeU9TX215c3RyaWNtcAorICBQeU9TX215c3RybmljbXA9cHl0aG9uMzQuUHlPU19teXN0cm5pY21wCisgIFB5T1Nfc2V0c2lnPXB5dGhvbjM0LlB5T1Nfc2V0c2lnCisgIFB5T1Nfc25wcmludGY9cHl0aG9uMzQuUHlPU19zbnByaW50ZgorICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzQuUHlPU19zdHJpbmdfdG9fZG91YmxlCisgIFB5T1Nfc3RydG9sPXB5dGhvbjM0LlB5T1Nfc3RydG9sCisgIFB5T1Nfc3RydG91bD1weXRob24zNC5QeU9TX3N0cnRvdWwKKyAgUHlPU192c25wcmludGY9cHl0aG9uMzQuUHlPU192c25wcmludGYKKyAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzQuUHlPYmplY3RfQVNDSUkKKyAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgorICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjM0LlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKKyAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKKyAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzQuUHlPYmplY3RfQnl0ZXMKKyAgUHlPYmplY3RfQ2FsbD1weXRob24zNC5QeU9iamVjdF9DYWxsCisgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zNC5QeU9iamVjdF9DYWxsRnVuY3Rpb24KKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zNC5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE1ldGhvZAorICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncworICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxPYmplY3QKKyAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjM0LlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKKyAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtCisgIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfRGVsSXRlbVN0cmluZworICBQeU9iamVjdF9EaXI9cHl0aG9uMzQuUHlPYmplY3RfRGlyCisgIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zNC5QeU9iamVjdF9Gb3JtYXQKKyAgUHlPYmplY3RfRnJlZT1weXRob24zNC5QeU9iamVjdF9GcmVlCisgIFB5T2JqZWN0X0dDX0RlbD1weXRob24zNC5QeU9iamVjdF9HQ19EZWwKKyAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzQuUHlPYmplY3RfR0NfVHJhY2sKKyAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19VblRyYWNrCisgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCisgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0cgorICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9HZXRJdGVtCisgIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzQuUHlPYmplY3RfR2V0SXRlcgorICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHIKKyAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCisgIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzQuUHlPYmplY3RfSGFzaAorICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzQuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCisgIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzQuUHlPYmplY3RfSW5pdAorICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjM0LlB5T2JqZWN0X0luaXRWYXIKKyAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zNC5QeU9iamVjdF9Jc0luc3RhbmNlCisgIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzQuUHlPYmplY3RfSXNTdWJjbGFzcworICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzQuUHlPYmplY3RfSXNUcnVlCisgIFB5T2JqZWN0X0xlbmd0aD1weXRob24zNC5QeU9iamVjdF9MZW5ndGgKKyAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjM0LlB5T2JqZWN0X01hbGxvYworICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzQuUHlPYmplY3RfTm90CisgIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfUmVhbGxvYworICBQeU9iamVjdF9SZXByPXB5dGhvbjM0LlB5T2JqZWN0X1JlcHIKKyAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmUKKyAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjM0LlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAorICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zNC5QeU9iamVjdF9TZWxmSXRlcgorICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHIKKyAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCisgIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzQuUHlPYmplY3RfU2V0SXRlbQorICBQeU9iamVjdF9TaXplPXB5dGhvbjM0LlB5T2JqZWN0X1NpemUKKyAgUHlPYmplY3RfU3RyPXB5dGhvbjM0LlB5T2JqZWN0X1N0cgorICBQeU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5T2JqZWN0X1R5cGUgREFUQQorICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zNC5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncworICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKKyAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjM0LlB5UHJvcGVydHlfVHlwZSBEQVRBCisgIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzQuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5UmFuZ2VfVHlwZT1weXRob24zNC5QeVJhbmdlX1R5cGUgREFUQQorICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzQuUHlSZXZlcnNlZF9UeXBlIERBVEEKKyAgUHlTZXFJdGVyX05ldz1weXRob24zNC5QeVNlcUl0ZXJfTmV3CisgIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjM0LlB5U2VxSXRlcl9UeXBlIERBVEEKKyAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zNC5QeVNlcXVlbmNlX0NoZWNrCisgIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjM0LlB5U2VxdWVuY2VfQ29uY2F0CisgIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db250YWlucworICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjM0LlB5U2VxdWVuY2VfQ291bnQKKyAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfRGVsSXRlbQorICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfRGVsU2xpY2UKKyAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjM0LlB5U2VxdWVuY2VfRmFzdAorICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9HZXRTbGljZQorICBQeVNlcXVlbmNlX0luPXB5dGhvbjM0LlB5U2VxdWVuY2VfSW4KKyAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjM0LlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAorICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0CisgIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbmRleAorICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zNC5QeVNlcXVlbmNlX0xlbmd0aAorICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9MaXN0CisgIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjM0LlB5U2VxdWVuY2VfUmVwZWF0CisgIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX1NldEl0ZW0KKyAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX1NldFNsaWNlCisgIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zNC5QeVNlcXVlbmNlX1NpemUKKyAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zNC5QeVNlcXVlbmNlX1R1cGxlCisgIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjM0LlB5U2V0SXRlcl9UeXBlIERBVEEKKyAgUHlTZXRfQWRkPXB5dGhvbjM0LlB5U2V0X0FkZAorICBQeVNldF9DbGVhcj1weXRob24zNC5QeVNldF9DbGVhcgorICBQeVNldF9Db250YWlucz1weXRob24zNC5QeVNldF9Db250YWlucworICBQeVNldF9EaXNjYXJkPXB5dGhvbjM0LlB5U2V0X0Rpc2NhcmQKKyAgUHlTZXRfTmV3PXB5dGhvbjM0LlB5U2V0X05ldworICBQeVNldF9Qb3A9cHl0aG9uMzQuUHlTZXRfUG9wCisgIFB5U2V0X1NpemU9cHl0aG9uMzQuUHlTZXRfU2l6ZQorICBQeVNldF9UeXBlPXB5dGhvbjM0LlB5U2V0X1R5cGUgREFUQQorICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzCisgIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjM0LlB5U2xpY2VfR2V0SW5kaWNlc0V4CisgIFB5U2xpY2VfTmV3PXB5dGhvbjM0LlB5U2xpY2VfTmV3CisgIFB5U2xpY2VfVHlwZT1weXRob24zNC5QeVNsaWNlX1R5cGUgREFUQQorICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzQuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKKyAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfRmluZE1vZHVsZQorICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zNC5QeVN0YXRlX0FkZE1vZHVsZQorICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zNC5QeVN0YXRlX1JlbW92ZU1vZHVsZQorICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3CisgIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQorICBQeVN1cGVyX1R5cGU9cHl0aG9uMzQuUHlTdXBlcl9UeXBlIERBVEEKKyAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zNC5QeVN5c19BZGRXYXJuT3B0aW9uCisgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCisgIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zNC5QeVN5c19Gb3JtYXRTdGRlcnIKKyAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZG91dAorICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzQuUHlTeXNfR2V0T2JqZWN0CisgIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjM0LlB5U3lzX0hhc1dhcm5PcHRpb25zCisgIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucworICBQeVN5c19TZXRBcmd2PXB5dGhvbjM0LlB5U3lzX1NldEFyZ3YKKyAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjM0LlB5U3lzX1NldEFyZ3ZFeAorICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzQuUHlTeXNfU2V0T2JqZWN0CisgIFB5U3lzX1NldFBhdGg9cHl0aG9uMzQuUHlTeXNfU2V0UGF0aAorICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zNC5QeVN5c19Xcml0ZVN0ZGVycgorICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zNC5QeVN5c19Xcml0ZVN0ZG91dAorICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfQ2xlYXIKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGUKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAorICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldAorICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9HZXREaWN0CisgIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfTmV3CisgIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YworICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9Td2FwCisgIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfSGVyZQorICBQeVRyYWNlQmFja19QcmludD1weXRob24zNC5QeVRyYWNlQmFja19QcmludAorICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjM0LlB5VHJhY2VCYWNrX1R5cGUgREFUQQorICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjM0LlB5VHVwbGVJdGVyX1R5cGUgREFUQQorICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzQuUHlUdXBsZV9DbGVhckZyZWVMaXN0CisgIFB5VHVwbGVfR2V0SXRlbT1weXRob24zNC5QeVR1cGxlX0dldEl0ZW0KKyAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zNC5QeVR1cGxlX0dldFNsaWNlCisgIFB5VHVwbGVfTmV3PXB5dGhvbjM0LlB5VHVwbGVfTmV3CisgIFB5VHVwbGVfUGFjaz1weXRob24zNC5QeVR1cGxlX1BhY2sKKyAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfU2V0SXRlbQorICBQeVR1cGxlX1NpemU9cHl0aG9uMzQuUHlUdXBsZV9TaXplCisgIFB5VHVwbGVfVHlwZT1weXRob24zNC5QeVR1cGxlX1R5cGUgREFUQQorICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zNC5QeVR5cGVfQ2xlYXJDYWNoZQorICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzQuUHlUeXBlX0Zyb21TcGVjCisgIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKKyAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zNC5QeVR5cGVfR2VuZXJpY0FsbG9jCisgIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljTmV3CisgIFB5VHlwZV9HZXRGbGFncz1weXRob24zNC5QeVR5cGVfR2V0RmxhZ3MKKyAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zNC5QeVR5cGVfSXNTdWJ0eXBlCisgIFB5VHlwZV9Nb2RpZmllZD1weXRob24zNC5QeVR5cGVfTW9kaWZpZWQKKyAgUHlUeXBlX1JlYWR5PXB5dGhvbjM0LlB5VHlwZV9SZWFkeQorICBQeVR5cGVfVHlwZT1weXRob24zNC5QeVR5cGVfVHlwZSBEQVRBCisgIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9BcHBlbmQKKyAgUHlVbmljb2RlX0FwcGVuZEFuZERlbD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FwcGVuZEFuZERlbAorICBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZworICBQeVVuaWNvZGVfQXNEZWNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNEZWNvZGVkT2JqZWN0CisgIFB5VW5pY29kZV9Bc0RlY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNEZWNvZGVkVW5pY29kZQorICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkT2JqZWN0CisgIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRTdHJpbmcKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFVuaWNvZGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nCisgIFB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGMTZTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNVVEYzMlN0cmluZworICBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQXNVVEY4U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Bc1dpZGVDaGFyCisgIFB5VW5pY29kZV9DbGVhckZyZWVsaXN0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfQ2xlYXJGcmVlbGlzdAorICBQeVVuaWNvZGVfQ29tcGFyZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NvbXBhcmUKKyAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0NvbmNhdAorICBQeVVuaWNvZGVfQ29udGFpbnM9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Db250YWlucworICBQeVVuaWNvZGVfQ291bnQ9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Db3VudAorICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlCisgIFB5VW5pY29kZV9EZWNvZGVBU0NJST1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZUFTQ0lJCisgIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlQ2hhcm1hcAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0CisgIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZQorICBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xCisgIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlUmF3VW5pY29kZUVzY2FwZQorICBQeVVuaWNvZGVfRGVjb2RlVVRGMTY9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMTZTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMzIKKyAgUHlVbmljb2RlX0RlY29kZVVURjMyU3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMlN0YXRlZnVsCisgIFB5VW5pY29kZV9EZWNvZGVVVEY4PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsCisgIFB5VW5pY29kZV9EZWNvZGVVbmljb2RlRXNjYXBlPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRGVjb2RlVW5pY29kZUVzY2FwZQorICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9GU0NvbnZlcnRlcgorICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRlNEZWNvZGVyCisgIFB5VW5pY29kZV9GaW5kPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRmluZAorICBQeVVuaWNvZGVfRm9ybWF0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRm9ybWF0CisgIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0CisgIFB5VW5pY29kZV9Gcm9tRm9ybWF0PXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbUZvcm1hdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0VgorICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QKKyAgUHlVbmljb2RlX0Zyb21PcmRpbmFsPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmdBbmRTaXplCisgIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXI9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9Gcm9tV2lkZUNoYXIKKyAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0dldFNpemUKKyAgUHlVbmljb2RlX0lzSWRlbnRpZmllcj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0lzSWRlbnRpZmllcgorICBQeVVuaWNvZGVfSm9pbj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX0pvaW4KKyAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1BhcnRpdGlvbgorICBQeVVuaWNvZGVfUlBhcnRpdGlvbj1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1JQYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JTcGxpdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1JTcGxpdAorICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1JlcGxhY2UKKyAgUHlVbmljb2RlX1Jlc2l6ZT1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1Jlc2l6ZQorICBQeVVuaWNvZGVfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9SaWNoQ29tcGFyZQorICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfU2V0RGVmYXVsdEVuY29kaW5nCisgIFB5VW5pY29kZV9TcGxpdD1weXRob24zNC5QeVVuaWNvZGVVQ1MyX1NwbGl0CisgIFB5VW5pY29kZV9TcGxpdGxpbmVzPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfU3BsaXRsaW5lcworICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjM0LlB5VW5pY29kZVVDUzJfVGFpbG1hdGNoCisgIFB5VW5pY29kZV9UcmFuc2xhdGU9cHl0aG9uMzQuUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUKKyAgUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXA9cHl0aG9uMzQuUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKKyAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0RlY29kZVVURjc9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjcKKyAgUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGN1N0YXRlZnVsCisgIFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQ9cHl0aG9uMzQuUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZworICBQeVVuaWNvZGVfSW50ZXJuSW1tb3J0YWw9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkltbW9ydGFsCisgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JblBsYWNlCisgIFB5VW5pY29kZV9UeXBlPXB5dGhvbjM0LlB5VW5pY29kZV9UeXBlIERBVEEKKyAgUHlXZWFrcmVmX0dldE9iamVjdD1weXRob24zNC5QeVdlYWtyZWZfR2V0T2JqZWN0IERBVEEKKyAgUHlXZWFrcmVmX05ld1Byb3h5PXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdQcm94eQorICBQeVdlYWtyZWZfTmV3UmVmPXB5dGhvbjM0LlB5V2Vha3JlZl9OZXdSZWYKKyAgUHlXcmFwcGVyRGVzY3JfVHlwZT1weXRob24zNC5QeVdyYXBwZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlXcmFwcGVyX05ldz1weXRob24zNC5QeVdyYXBwZXJfTmV3CisgIFB5WmlwX1R5cGU9cHl0aG9uMzQuUHlaaXBfVHlwZSBEQVRBCisgIFB5X0FkZFBlbmRpbmdDYWxsPXB5dGhvbjM0LlB5X0FkZFBlbmRpbmdDYWxsCisgIFB5X0F0RXhpdD1weXRob24zNC5QeV9BdEV4aXQKKyAgUHlfQnVpbGRWYWx1ZT1weXRob24zNC5QeV9CdWlsZFZhbHVlCisgIFB5X0NvbXBpbGVTdHJpbmc9cHl0aG9uMzQuUHlfQ29tcGlsZVN0cmluZworICBQeV9EZWNSZWY9cHl0aG9uMzQuUHlfRGVjUmVmCisgIFB5X0VuZEludGVycHJldGVyPXB5dGhvbjM0LlB5X0VuZEludGVycHJldGVyCisgIFB5X0V4aXQ9cHl0aG9uMzQuUHlfRXhpdAorICBQeV9GYXRhbEVycm9yPXB5dGhvbjM0LlB5X0ZhdGFsRXJyb3IKKyAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKKyAgUHlfRmluYWxpemU9cHl0aG9uMzQuUHlfRmluYWxpemUKKyAgUHlfR2V0QnVpbGRJbmZvPXB5dGhvbjM0LlB5X0dldEJ1aWxkSW5mbworICBQeV9HZXRDb21waWxlcj1weXRob24zNC5QeV9HZXRDb21waWxlcgorICBQeV9HZXRDb3B5cmlnaHQ9cHl0aG9uMzQuUHlfR2V0Q29weXJpZ2h0CisgIFB5X0dldEV4ZWNQcmVmaXg9cHl0aG9uMzQuUHlfR2V0RXhlY1ByZWZpeAorICBQeV9HZXRQYXRoPXB5dGhvbjM0LlB5X0dldFBhdGgKKyAgUHlfR2V0UGxhdGZvcm09cHl0aG9uMzQuUHlfR2V0UGxhdGZvcm0KKyAgUHlfR2V0UHJlZml4PXB5dGhvbjM0LlB5X0dldFByZWZpeAorICBQeV9HZXRQcm9ncmFtRnVsbFBhdGg9cHl0aG9uMzQuUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoCisgIFB5X0dldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X0dldFByb2dyYW1OYW1lCisgIFB5X0dldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfR2V0UHl0aG9uSG9tZQorICBQeV9HZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9HZXRSZWN1cnNpb25MaW1pdAorICBQeV9HZXRWZXJzaW9uPXB5dGhvbjM0LlB5X0dldFZlcnNpb24KKyAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZz1weXRob24zNC5QeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIERBVEEKKyAgUHlfSW5jUmVmPXB5dGhvbjM0LlB5X0luY1JlZgorICBQeV9Jbml0aWFsaXplPXB5dGhvbjM0LlB5X0luaXRpYWxpemUKKyAgUHlfSW5pdGlhbGl6ZUV4PXB5dGhvbjM0LlB5X0luaXRpYWxpemVFeAorICBQeV9Jc0luaXRpYWxpemVkPXB5dGhvbjM0LlB5X0lzSW5pdGlhbGl6ZWQKKyAgUHlfTWFpbj1weXRob24zNC5QeV9NYWluCisgIFB5X01ha2VQZW5kaW5nQ2FsbHM9cHl0aG9uMzQuUHlfTWFrZVBlbmRpbmdDYWxscworICBQeV9OZXdJbnRlcnByZXRlcj1weXRob24zNC5QeV9OZXdJbnRlcnByZXRlcgorICBQeV9SZXByRW50ZXI9cHl0aG9uMzQuUHlfUmVwckVudGVyCisgIFB5X1JlcHJMZWF2ZT1weXRob24zNC5QeV9SZXByTGVhdmUKKyAgUHlfU2V0UHJvZ3JhbU5hbWU9cHl0aG9uMzQuUHlfU2V0UHJvZ3JhbU5hbWUKKyAgUHlfU2V0UHl0aG9uSG9tZT1weXRob24zNC5QeV9TZXRQeXRob25Ib21lCisgIFB5X1NldFJlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0LlB5X1NldFJlY3Vyc2lvbkxpbWl0CisgIFB5X1N5bXRhYmxlU3RyaW5nPXB5dGhvbjM0LlB5X1N5bXRhYmxlU3RyaW5nCisgIFB5X1ZhQnVpbGRWYWx1ZT1weXRob24zNC5QeV9WYUJ1aWxkVmFsdWUKKyAgX1B5RXJyX0JhZEludGVybmFsQ2FsbD1weXRob24zNC5fUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIF9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVAorICBfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVD1weXRob24zNC5fUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVAorICBfUHlPYmplY3RfR0NfTWFsbG9jPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19NYWxsb2MKKyAgX1B5T2JqZWN0X0dDX05ldz1weXRob24zNC5fUHlPYmplY3RfR0NfTmV3CisgIF9QeU9iamVjdF9HQ19OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ld1ZhcgorICBfUHlPYmplY3RfR0NfUmVzaXplPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19SZXNpemUKKyAgX1B5T2JqZWN0X05ldz1weXRob24zNC5fUHlPYmplY3RfTmV3CisgIF9QeU9iamVjdF9OZXdWYXI9cHl0aG9uMzQuX1B5T2JqZWN0X05ld1ZhcgorICBfUHlTdGF0ZV9BZGRNb2R1bGU9cHl0aG9uMzQuX1B5U3RhdGVfQWRkTW9kdWxlCisgIF9QeVRocmVhZFN0YXRlX0luaXQ9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfSW5pdAorICBfUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYz1weXRob24zNC5fUHlUaHJlYWRTdGF0ZV9QcmVhbGxvYworICBfUHlUcmFzaF9kZWxldGVfbGF0ZXI9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX2xhdGVyIERBVEEKKyAgX1B5VHJhc2hfZGVsZXRlX25lc3Rpbmc9cHl0aG9uMzQuX1B5VHJhc2hfZGVsZXRlX25lc3RpbmcgREFUQQorICBfUHlUcmFzaF9kZXBvc2l0X29iamVjdD1weXRob24zNC5fUHlUcmFzaF9kZXBvc2l0X29iamVjdAorICBfUHlUcmFzaF9kZXN0cm95X2NoYWluPXB5dGhvbjM0Ll9QeVRyYXNoX2Rlc3Ryb3lfY2hhaW4KKyAgX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZT1weXRob24zNC5fUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9Qcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9Qcm94eVR5cGUgREFUQQorICBfUHlXZWFrcmVmX1JlZlR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9SZWZUeXBlIERBVEEKKyAgX1B5X0J1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X0J1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuX1B5X0NoZWNrUmVjdXJzaW9uTGltaXQgREFUQQorICBfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsPXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwKKyAgX1B5X0RlYWxsb2M9cHl0aG9uMzQuX1B5X0RlYWxsb2MKKyAgX1B5X0VsbGlwc2lzT2JqZWN0PXB5dGhvbjM0Ll9QeV9FbGxpcHNpc09iamVjdCBEQVRBCisgIF9QeV9GYWxzZVN0cnVjdD1weXRob24zNC5fUHlfRmFsc2VTdHJ1Y3QgREFUQQorICBfUHlfTm9uZVN0cnVjdD1weXRob24zNC5fUHlfTm9uZVN0cnVjdCBEQVRBCisgIF9QeV9Ob3RJbXBsZW1lbnRlZFN0cnVjdD1weXRob24zNC5fUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QgREFUQQorICBfUHlfU3dhcHBlZE9wPXB5dGhvbjM0Ll9QeV9Td2FwcGVkT3AgREFUQQorICBfUHlfVHJ1ZVN0cnVjdD1weXRob24zNC5fUHlfVHJ1ZVN0cnVjdCBEQVRBCisgIF9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQ9cHl0aG9uMzQuX1B5X1ZhQnVpbGRWYWx1ZV9TaXplVAorICBfUHlBcmdfUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlX1NpemVUCisgIF9QeUFyZ19QYXJzZVR1cGxlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlX1NpemVUCisgIF9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlBcmdfVmFQYXJzZV9TaXplVD1weXRob24zNC5fUHlBcmdfVmFQYXJzZV9TaXplVAorICBfUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCmRpZmYgLS1naXQgYS9QQy9weXRob24zLm1hayBiL1BDL3B5dGhvbjMubWFrCmluZGV4IDljZjE4MDcuLmZiOGU3YWEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMubWFrCisrKyBiL1BDL3B5dGhvbjMubWFrCkBAIC0xLDE0ICsxLDE0IEBACi0kKE91dERpcilweXRob24zLmRsbDoJcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgotCWNsIC9MRCAvRmUkKE91dERpcilweXRob24zLmRsbCBweXRob24zZGxsLmMgcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYgorJChPdXREaXIpcHl0aG9uMy5kbGw6CXB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKKwljbCAvTEQgL0ZlJChPdXREaXIpcHl0aG9uMy5kbGwgcHl0aG9uM2RsbC5jIHB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIKIAotJChPdXREaXIpcHl0aG9uMzNzdHViLmxpYjoJcHl0aG9uMzNzdHViLmRlZgotCWxpYiAvZGVmOnB5dGhvbjMzc3R1Yi5kZWYgL291dDokKE91dERpcilweXRob24zM3N0dWIubGliIC9NQUNISU5FOiQoTUFDSElORSkKKyQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWI6CXB5dGhvbjM0c3R1Yi5kZWYKKwlsaWIgL2RlZjpweXRob24zNHN0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCiAKIGNsZWFuOgogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZGxsIGRlbCAkKE91dERpcilweXRob24zLmRsbAogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMubGliIGRlbCAkKE91dERpcilweXRob24zLmxpYgotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIgZGVsICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKKwlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIubGliIGRlbCAkKE91dERpcilweXRob24zNHN0dWIubGliCiAJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMy5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjMuZXhwCi0JSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cCBkZWwgJChPdXREaXIpcHl0aG9uMzNzdHViLmV4cAorCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5leHAKIAogcmVidWlsZDogY2xlYW4gJChPdXREaXIpcHl0aG9uMy5kbGwKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzZ2VuLnB5IGIvUEMvcHl0aG9uMzRnZW4ucHkKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNnZW4ucHkKcmVuYW1lIHRvIFBDL3B5dGhvbjM0Z2VuLnB5CmluZGV4IDIxYjlmNTYuLjE4MGNlMTEgMTAwNjQ0Ci0tLSBhL1BDL3B5dGhvbjMzZ2VuLnB5CisrKyBiL1BDL3B5dGhvbjM0Z2VuLnB5CkBAIC0xLDkgKzEsOSBAQAotIyBHZW5lcmF0ZSBweXRob24zM3N0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgorIyBHZW5lcmF0ZSBweXRob24zNHN0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgogIyBUaGUgcmVndWxhciBpbXBvcnQgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCwKICMgc2luY2UgaXQgZG9lc24ndCBwcm92aWRlIHRoZSByaWdodCBzeW1ib2xzIGZvcgogIyBkYXRhIGZvcndhcmRpbmcKLW91dCA9IG9wZW4oInB5dGhvbjMzc3R1Yi5kZWYiLCAidyIpCi1vdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjMzIlxuJykKK291dCA9IG9wZW4oInB5dGhvbjM0c3R1Yi5kZWYiLCAidyIpCitvdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjM0IlxuJykKIG91dC53cml0ZSgnRVhQT1JUU1xuJykKIAogaW5wID0gb3BlbigicHl0aG9uMy5kZWYiKQpAQCAtMTQsNyArMTQsNyBAQAogYXNzZXJ0IGxpbmUuc3RyaXAoKT09J0VYUE9SVFMnCiAKIGZvciBsaW5lIGluIGlucDoKLSAgICAjIFNZTTE9cHl0aG9uMzMuU1lNMlsgREFUQV0KKyAgICAjIFNZTTE9cHl0aG9uMzQuU1lNMlsgREFUQV0KICAgICBoZWFkLCB0YWlsID0gbGluZS5zcGxpdCgnLicpCiAgICAgaWYgJ0RBVEEnIGluIHRhaWw6CiAgICAgICAgIHN5bWJvbCwgdGFpbCA9IHRhaWwuc3BsaXQoJyAnKQpkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMzNzdHViLmRlZiBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gUEMvcHl0aG9uMzNzdHViLmRlZgpyZW5hbWUgdG8gUEMvcHl0aG9uMzRzdHViLmRlZgppbmRleCA1YjhjY2Y2Li5jMGYzYjM1IDEwMDY0NAotLS0gYS9QQy9weXRob24zM3N0dWIuZGVmCisrKyBiL1BDL3B5dGhvbjM0c3R1Yi5kZWYKQEAgLTEsNCArMSw0IEBACi1MSUJSQVJZICJweXRob24zMyIKK0xJQlJBUlkgInB5dGhvbjM0IgogRVhQT1JUUwogUHlBcmdfUGFyc2UKIFB5QXJnX1BhcnNlVHVwbGUKQEAgLTM3LDYgKzM3LDcgQEAKIFB5Q0Z1bmN0aW9uX0dldEZsYWdzCiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgogUHlDRnVuY3Rpb25fR2V0U2VsZgorUHlDRnVuY3Rpb25fTmV3CiBQeUNGdW5jdGlvbl9OZXdFeAogUHlDRnVuY3Rpb25fVHlwZQogUHlDYWxsSXRlcl9OZXcKZGlmZiAtLWdpdCBhL1BDL3JlYWRtZS50eHQgYi9QQy9yZWFkbWUudHh0CmluZGV4IGZkYzA5YWIuLjYwZjIzMWUgMTAwNjQ0Ci0tLSBhL1BDL3JlYWRtZS50eHQKKysrIGIvUEMvcmVhZG1lLnR4dApAQCAtNzksMTkgKzc5LDYgQEAKIFRoZSBzdWJkaXJlY3RvcmllcyBWQzYsIFZTNy4xIGFuZCBWUzguMCBjb250YWluIGxlZ2FjeSBzdXBwb3J0IG9sZGVyCiB2ZXJzaW9ucyBvZiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gU2VlIFBDYnVpbGQvcmVhZG1lLnR4dC4KIAotRU1YIGRldmVsb3BtZW50IHRvb2xzIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotU2VlIG9zMmVteC9yZWFkbWUudHh0LiBUaGlzIHBsYXRmb3JtIGlzIG1haW50YWluZWQgYnkgQW5kcmV3IE1hY0ludHlyZS4KLQotSUJNIFZpc3VhbEFnZSBDL0MrKyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TZWUgb3MydmFjcHAvcmVhZG1lLnR4dC4gIFRoaXMgcGxhdGZvcm0gaXMgc3VwcG9ydGVkIGJ5IEplZmYgUnVzaC4KLQotTk9URTogU3VwcG9ydCBmb3Igb3MydmFjcHAgbWF5IGJlIGRyb3BwZWQgaW4gdGhlIG5lYXIgZnV0dXJlLiBQbGVhc2UgbW92ZQotICAgICAgdG8gRU1YLgotCiBOb3RlIGZvciBXaW5kb3dzIDMueCBhbmQgRE9TIHVzZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL1BDL3c5eHBvcGVuLmMgYi9QQy93OXhwb3Blbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzk3OGRkLi4wMDAwMDAwCi0tLSBhL1BDL3c5eHBvcGVuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoKLSAqIHc5eHBvcGVuLmMKLSAqCi0gKiBTZXJ2ZXMgYXMgYW4gaW50ZXJtZWRpYXRlIHN0dWIgV2luMzIgY29uc29sZSBhcHBsaWNhdGlvbiB0bwotICogYXZvaWQgYSBoYW5naW5nIHBpcGUgd2hlbiByZWRpcmVjdGluZyAxNi1iaXQgY29uc29sZSBiYXNlZAotICogcHJvZ3JhbXMgKGluY2x1ZGluZyBNUy1ET1MgY29uc29sZSBiYXNlZCBwcm9ncmFtcyBhbmQgYmF0Y2gKLSAqIGZpbGVzKSBvbiBXaW5kb3cgOTUgYW5kIFdpbmRvd3MgOTguCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIHRvIGJlIGxhdW5jaGVkIHdpdGggcmVkaXJlY3RlZCBzdGFuZGFyZAotICogaGFuZGxlcy4gSXQgd2lsbCBsYXVuY2ggdGhlIGNvbW1hbmQgbGluZSBzcGVjaWZpZWQgMTYtYml0Ci0gKiBjb25zb2xlIGJhc2VkIGFwcGxpY2F0aW9uIGluIHRoZSBzYW1lIGNvbnNvbGUsIGZvcndhcmRpbmcKLSAqIGl0cyBvd24gcmVkaXJlY3RlZCBzdGFuZGFyZCBoYW5kbGVzIHRvIHRoZSAxNi1iaXQgY2hpbGQuCi0KLSAqIEFLQSBzb2x1dGlvbiB0byB0aGUgcHJvYmxlbSBkZXNjcmliZWQgaW4gS0I6IFExNTA5NTYuCi0gKi8gICAgCi0KLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgLyogZm9yIG1hbGxvYyBhbmQgaXRzIGZyaWVuZHMgKi8KLQotY29uc3QgY2hhciAqdXNhZ2UgPQotIlRoaXMgcHJvZ3JhbSBpcyB1c2VkIGJ5IFB5dGhvbidzIG9zLnBvcGVuIGZ1bmN0aW9uXG4iCi0idG8gd29yayBhcm91bmQgYSBsaW1pdGF0aW9uIGluIFdpbmRvd3MgOTUvOTguICBJdCBpc1xuIgotIm5vdCBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGEgc3RhbmQtYWxvbmUgcHJvZ3JhbS4iOwotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICAgIEJPT0wgYlJldDsKLSAgICBTVEFSVFVQSU5GTyBzaTsKLSAgICBQUk9DRVNTX0lORk9STUFUSU9OIHBpOwotICAgIERXT1JEIGV4aXRfY29kZT0wOwotICAgIHNpemVfdCBjbWRsZW4gPSAwOwotICAgIGludCBpOwotICAgIGNoYXIgKmNtZGxpbmUsICpjbWRsaW5lZmlsbDsKLQotICAgIGlmIChhcmdjIDwgMikgewotICAgICAgICBpZiAoR2V0RmlsZVR5cGUoR2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpKT09RklMRV9UWVBFX0NIQVIpCi0gICAgICAgICAgICAvKiBBdHRhY2hlZCB0byBhIGNvbnNvbGUsIGFuZCB0aGVyZWZvcmUgbm90IGV4ZWN1dGVkIGJ5IFB5dGhvbgotICAgICAgICAgICAgICAgRGlzcGxheSBhIG1lc3NhZ2UgYm94IGZvciB0aGUgaW5xdWlzaXRpdmUgdXNlcgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIE1lc3NhZ2VCb3goTlVMTCwgdXNhZ2UsIGFyZ3ZbMF0sIE1CX09LKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvKiBFZWVrIC0gZXhlY3V0ZWQgYnkgUHl0aG9uLCBidXQgYXJncyBhcmUgc2NyZXdlZCEKLSAgICAgICAgICAgICAgIFdyaXRlIGFuIGVycm9yIG1lc3NhZ2UgdG8gc3Rkb3V0IHNvIHRoZXJlIGlzIGF0Ci0gICAgICAgICAgICAgICBsZWFzdCBzb21lIGNsdWUgZm9yIHRoZSBlbmQgdXNlciB3aGVuIGl0IGFwcGVhcnMKLSAgICAgICAgICAgICAgIGluIHRoZWlyIG91dHB1dC4KLSAgICAgICAgICAgICAgIEEgbWVzc2FnZSBib3ggd291bGQgYmUgaGlkZGVuIGFuZCBibG9ja3MgdGhlIGFwcC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJJbnRlcm5hbCBwb3BlbiBlcnJvciAtIG5vIGFyZ3Mgc3BlY2lmaWVkXG4lc1xuIiwgdXNhZ2UpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICAvKiBCdWlsZCB1cCB0aGUgY29tbWFuZC1saW5lIGZyb20gdGhlIGFyZ3MuCi0gICAgICAgQXJncyB3aXRoIGEgc3BhY2UgYXJlIHF1b3RlZCwgZXhpc3RpbmcgcXVvdGVzIGFyZSBlc2NhcGVkLgotICAgICAgIFRvIGtlZXAgdGhpbmdzIHNpbXBsZSBjYWxjdWxhdGluZyB0aGUgYnVmZmVyIHNpemUsIHdlIGFzc3VtZQotICAgICAgIGV2ZXJ5IGNoYXJhY3RlciBpcyBhIHF1b3RlIC0gaWUsIHdlIGFsbG9jYXRlIGRvdWJsZSB3aGF0IHdlIG5lZWQKLSAgICAgICBpbiB0aGUgd29yc3QgY2FzZS4gIEFzIHRoaXMgaXMgb25seSBkb3VibGUgdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQKLSAgICAgICB0byB1cywgdGhlcmUgaXMgYSBnb29kIGNoYW5jZSB0aGlzIGlzIHJlYXNvbmFibHkgc21hbGwsIHNvIHRoZSB0b3RhbCAKLSAgICAgICBhbGxvY2F0aW9uIHdpbGwgYWxtb3N0IGFsd2F5cyBiZSA8IDUxMiBieXRlcy4KLSAgICAqLwotICAgIGZvciAoaT0xO2k8YXJnYztpKyspCi0gICAgICAgIGNtZGxlbiArPSBzdHJsZW4oYXJndltpXSkqMiArIDM7IC8qIG9uZSBzcGFjZSwgbWF5YmUgMiBxdW90ZXMgKi8KLSAgICBjbWRsaW5lID0gY21kbGluZWZpbGwgPSAoY2hhciAqKW1hbGxvYyhjbWRsZW4rMSk7Ci0gICAgaWYgKGNtZGxpbmUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGZvciAoaT0xO2k8YXJnYztpKyspIHsKLSAgICAgICAgY29uc3QgY2hhciAqYXJnbG9vazsKLSAgICAgICAgaW50IGJRdW90ZSA9IHN0cmNocihhcmd2W2ldLCAnICcpICE9IE5VTEw7Ci0gICAgICAgIGlmIChiUXVvdGUpCi0gICAgICAgICAgICAqY21kbGluZWZpbGwrKyA9ICciJzsKLSAgICAgICAgLyogZXNjYXBlIHF1b3RlcyAqLwotICAgICAgICBmb3IgKGFyZ2xvb2s9YXJndltpXTsqYXJnbG9vazthcmdsb29rKyspIHsKLSAgICAgICAgICAgIGlmICgqYXJnbG9vaz09JyInKQotICAgICAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJ1xcJzsKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gKmFyZ2xvb2s7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJRdW90ZSkKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyInOwotICAgICAgICAqY21kbGluZWZpbGwrKyA9ICcgJzsKLSAgICB9Ci0gICAgKmNtZGxpbmVmaWxsID0gJ1wwJzsKLQotICAgIC8qIE1ha2UgY2hpbGQgcHJvY2VzcyB1c2UgdGhpcyBhcHAncyBzdGFuZGFyZCBmaWxlcy4gKi8KLSAgICBaZXJvTWVtb3J5KCZzaSwgc2l6ZW9mIHNpKTsKLSAgICBzaS5jYiA9IHNpemVvZiBzaTsKLSAgICBzaS5kd0ZsYWdzID0gU1RBUlRGX1VTRVNUREhBTkRMRVM7Ci0gICAgc2kuaFN0ZElucHV0ID0gR2V0U3RkSGFuZGxlKFNURF9JTlBVVF9IQU5ETEUpOwotICAgIHNpLmhTdGRPdXRwdXQgPSBHZXRTdGRIYW5kbGUoU1REX09VVFBVVF9IQU5ETEUpOwotICAgIHNpLmhTdGRFcnJvciA9IEdldFN0ZEhhbmRsZShTVERfRVJST1JfSEFORExFKTsKLQotICAgIGJSZXQgPSBDcmVhdGVQcm9jZXNzKAotICAgICAgICBOVUxMLCBjbWRsaW5lLAotICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICBUUlVFLCAwLAotICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICAmc2ksICZwaQotICAgICAgICApOwotCi0gICAgZnJlZShjbWRsaW5lKTsKLQotICAgIGlmIChiUmV0KSB7Ci0gICAgICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSkgIT0gV0FJVF9GQUlMRUQpIHsKLQkgICAgR2V0RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmZXhpdF9jb2RlKTsKLQl9Ci0gICAgICAgIENsb3NlSGFuZGxlKHBpLmhQcm9jZXNzKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUocGkuaFRocmVhZCk7Ci0gICAgICAgIHJldHVybiBleGl0X2NvZGU7Ci0gICAgfQotCi0gICAgcmV0dXJuIDE7Ci19CmRpZmYgLS1naXQgYS9QQy93aW5yZWcuYyBiL1BDL3dpbnJlZy5jCmluZGV4IDNiOTY5M2MuLjU2M2EzZWIgMTAwNjQ0Ci0tLSBhL1BDL3dpbnJlZy5jCisrKyBiL1BDL3dpbnJlZy5jCkBAIC05MzcsNyArOTM3LDcgQEAKICAgICAgICAgICAgICAgICB3Y2hhcl90ICpkYXRhID0gKHdjaGFyX3QgKilyZXREYXRhQnVmOwogICAgICAgICAgICAgICAgIGludCBsZW4gPSByZXREYXRhU2l6ZSAvIDI7CiAgICAgICAgICAgICAgICAgaW50IHMgPSBjb3VudFN0cmluZ3MoZGF0YSwgbGVuKTsKLSAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gKHdjaGFyX3QgKiopbWFsbG9jKHNpemVvZih3Y2hhcl90ICopKnMpOworICAgICAgICAgICAgICAgIHdjaGFyX3QgKipzdHIgPSAod2NoYXJfdCAqKilQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QgKikqcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIApAQCAtOTU4LDcgKzk1OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHN0cltpbmRleF0sIGxlbikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzkzLDkgKzE3OTMsOSBAQAogICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSEtFWVR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlIS0VZX1R5cGUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRihQeUV4Y19XaW5kb3dzRXJyb3IpOworICAgIFB5X0lOQ1JFRihQeUV4Y19PU0Vycm9yKTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yKSAhPSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCB0aGUgcmVsZXZhbnQgY29uc3RhbnRzICovCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKcmVuYW1lIGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCnJlbmFtZSB0byBQQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKaW5kZXggZDFhZmUyMi4uZDBlZTcyZiAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX292ZXJsYXBwZWQudmN4cHJvagpAQCAtMSw0ICsxLDQgQEAKLe+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+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ogYi9QQ2J1aWxkL19zaGEzLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3NoYTMudmN4cHJvagppbmRleCBkMWFmZTIyLi5mMjRjYmRjIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2oKKysrIGIvUENidWlsZC9fc2hhMy52Y3hwcm9qCkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3NoYTM8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjcgKzE1MCw2NyBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyI+CiAgICAgPE1pZGw+CiAgICAgICA8VGFyZ2V0RW52aXJvbm1lbnQ+WDY0PC9UYXJnZXRFbnZpcm9ubWVudD4KICAgICA8L01pZGw+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4lKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8SW1wb3J0TGlicmFyeT4KLSAgICAgIDwvSW1wb3J0TGlicmFyeT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcdzl4cG9wZW4uYyIgLz4KKyAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJweXRob25jb3JlLnZjeHByb2oiPgorICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CisgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgorICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zaGEzXHNoYTNtb2R1bGUuYyIgLz4KICAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ogYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKaW5kZXggMzkyZGFkMS4uZWQzNWQ1YiAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagpAQCAtMjQzLDcgKzI0Myw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCIgLz4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCmluZGV4IDg4ZTVmZGIuLmRjZTc3YzkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCkBAIC0zMCw5ICszMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zc2wudmN4cHJvaiBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCmluZGV4IGFlNzFkMTkuLjczNzg3OTQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M3YWQyCi0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2oKQEAgLTAsMCArMSwxNjEgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RlbWJlZDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFByaXZhdGU+dHJ1ZTwvUHJpdmF0ZT4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT50cnVlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICAgIDxDb3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPmZhbHNlPC9Db3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPnRydWU8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgICAgPFVzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzPmZhbHNlPC9Vc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTU0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGVtYmVkLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLjg0OTg0ZmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT53OXhwb3BlbjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8UHJvamVjdEd1aWQ+ezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPl90ZXN0aW1wb3J0bXVsdGlwbGU8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjkgKzE1MCw2OSBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDcyJQpyZW5hbWUgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycwpyZW5hbWUgdG8gUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwppbmRleCBkZWM2N2FkLi5kYjBkMGE2IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycworKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCkBAIC0yLDEyICsyLDEyIEBACiA8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CiAgIDxJdGVtR3JvdXA+CiAgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2FiYzJkZmZkLTNmMmEtNDdiZC1iODliLTAzMTRjOTllZjIxZX08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MWVjMzhhZDktMWFiZi00YjgwLTg2MjgtYWM0M2NjYmEzMjRifTwvVW5pcXVlSWRlbnRpZmllcj4KICAgICA8L0ZpbHRlcj4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1x3OXhwb3Blbi5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIj4KICAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfc3NsLmJhdCBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdAppbmRleCAzNTdiMDhiLi44MDVkNzdhIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKKysrIGIvUENidWlsZC9idWlsZF9zc2wuYmF0CkBAIC0yLDEwICsyLDEwIEBACiBpZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCiAgIGlmICUxIEVRVSBEZWJ1ZyAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zM19kLmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzRfZC5kbGwgZXhpdCAxCiAgICkgRUxTRSAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzMuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24zNC5kbGwgZXhpdCAxCiAgICkKICkKICVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKaW5kZXggNDE5NmNmMy4uYzgwN2U3YiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5CisrKyBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQpAQCAtMTEsMTYgKzExLDEyIEBACiBoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiBwYXIgPSBvcy5wYXRoLnBhcmRpcgogCi1UQ0wgPSAidGNsOC41LjExIgotVEsgPSAidGs4LjUuMTEiCi1USVggPSAidGl4LTguNC4zLngiCitUQ0wgPSAidGNsOC42LjEiCitUSyA9ICJ0azguNi4xIgorVElYID0gInRpeC04LjQuMy4zIgogCiBST09UID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihoZXJlLCBwYXIsIHBhcikpCi0jIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCi0jIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODM3NDUuYXNweAotTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJwotICAgICdDT01QSUxFUkZMQUdTPVwiLURXSU5WRVI9MHgwNTAwIC1EX1dJTjMyX1dJTk5UPTB4MDUwMCAtRE5URERJX1ZFUlNJT049TlRERElfV0lOMktTUDRcIiAnCi0gICAgJyVzICVzJykKK05NQUtFID0gKCdubWFrZSAvbm9sb2dvIC9mICVzICVzICVzJykKIAogZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKICAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrc3RyKHYpIGZvciBrLCB2IGluIGt3Lml0ZW1zKCkpCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMgYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKaW5kZXggYmIzMjNkMy4uNjA0NzMxZiAxMDA2NDQKLS0tIGEvUENidWlsZC9raWxsX3B5dGhvbi5jCisrKyBiL1BDYnVpbGQva2lsbF9weXRob24uYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWCBUT0RPOiBpZiB3ZSByZWFsbHkgd2FudGVkIHRvIGJlIGZhbmN5LCB3ZSBjb3VsZCBjaGVjayB0aGUgCiAgICAgICAgICAqIG1vZHVsZXMgZm9yIGFsbCBwcm9jZXNzZXMgKG5vdCBqdXN0IHRoZSBweXRob25bX2RdLmV4ZSBvbmVzKQotICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjMzW19kXS5kbGwpLAorICAgICAgICAgKiBhbmQgc2VlIGlmIGFueSBvZiBvdXIgRExMcyBhcmUgbG9hZGVkIChpLmUuIHB5dGhvbjM0W19kXS5kbGwpLAogICAgICAgICAgKiBhcyB0aGF0IHdvdWxkIGFsc28gaW5oaWJpdCBvdXIgYWJpbGl0eSB0byByZWJ1aWxkIHRoZSBzb2x1dGlvbi4KICAgICAgICAgICogTm90IHdvcnRoIGxvb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrIAogICAgICAgICAgKiBmb3IganVzdCB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3BjYnVpbGQuc2xuIGIvUENidWlsZC9wY2J1aWxkLnNsbgppbmRleCBkNmEwMjJmLi5lNDMxYzkxIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3BjYnVpbGQuc2xuCisrKyBiL1BDYnVpbGQvcGNidWlsZC5zbG4KQEAgLTE0LDggKzE0LDYgQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbnciLCAicHl0aG9udy52Y3hwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KIEVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjeHByb2oiLCAie0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0iDQotRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmN4cHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ3aW5zb3VuZCIsICJ3aW5zb3VuZC52Y3hwcm9qIiwgInsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9Ig0KQEAgLTM4LDYgKzM2LDggQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0Y2FwaSIsICJfdGVzdGNhcGkudmN4cHJvaiIsICJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGltcG9ydG11bHRpcGxlIiwgIl90ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvaiIsICJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCitFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3hwcm9qIiwgIns0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9iejIiLCAiX2J6Mi52Y3hwcm9qIiwgIns3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9Ig0KQEAgLTc0LDYgKzc0LDEyIEBACiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfZnJlZXplX2ltcG9ydGxpYiIsICJfZnJlZXplX2ltcG9ydGxpYi52Y3hwcm9qIiwgInsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9Ig0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zaGEzIiwgIl9zaGEzLnZjeHByb2oiLCAiezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0iDQorRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX292ZXJsYXBwZWQiLCAiX292ZXJsYXBwZWQudmN4cHJvaiIsICJ7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGVtYmVkIiwgIl90ZXN0ZW1iZWQudmN4cHJvaiIsICJ7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfSINCitFbmRQcm9qZWN0DQogR2xvYmFsDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQpAQCAtMTUwLDIyICsxNTYsNiBAQAogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQpAQCAtMzQyLDYgKzMzMiwyMiBAQAogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTYxMSw2ICs2MTcsNTQgQEAKIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXsyNTRBMEMwNS02Njk2LTRCMDgtOENCMi1FRjdENTMzQUVFMDF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MjU0QTBDMDUtNjY5Ni00QjA4LThDQjItRUY3RDUzM0FFRTAxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezI1NEEwQzA1LTY2OTYtNEIwOC04Q0IyLUVGN0Q1MzNBRUUwMX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXByb2plY3QucHJvcHMgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwppbmRleCA4MTU1MjMxLi43YjY1OTYxIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcworKysgYi9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcwpAQCAtMTMsMjAgKzEzLDIwIEBACiAgICAgPEludERpcj4kKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbilcJChQcm9qZWN0TmFtZSlcPC9JbnREaXI+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiPgotICAgIDxQeURsbE5hbWU+cHl0aG9uMzMkKFB5RGVidWdFeHQpPC9QeURsbE5hbWU+CisgICAgPFB5RGxsTmFtZT5weXRob24zNCQoUHlEZWJ1Z0V4dCk8L1B5RGxsTmFtZT4KICAgICA8UHl0aG9uRXhlPiQoT3V0RGlyKXB5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlPC9QeXRob25FeGU+CiAgICAgPEtpbGxQeXRob25FeGU+JChPdXREaXIpa2lsbF9weXRob24kKFB5RGVidWdFeHQpLmV4ZTwvS2lsbFB5dGhvbkV4ZT4KICAgICA8ZXh0ZXJuYWxzRGlyPi4uXC4uPC9leHRlcm5hbHNEaXI+Ci0gICAgPHNxbGl0ZTNEaXI+JChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjcuMTI8L3NxbGl0ZTNEaXI+CisgICAgPHNxbGl0ZTNEaXI+JChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjguMTwvc3FsaXRlM0Rpcj4KICAgICA8YnoyRGlyPiQoZXh0ZXJuYWxzRGlyKVxiemlwMi0xLjAuNjwvYnoyRGlyPgotICAgIDxsem1hRGlyPiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuMzwvbHptYURpcj4KKyAgICA8bHptYURpcj4kKGV4dGVybmFsc0RpcilceHotNS4wLjU8L2x6bWFEaXI+CiAgICAgPG9wZW5zc2xEaXI+JChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlPC9vcGVuc3NsRGlyPgogICAgIDx0Y2x0a0Rpcj4kKGV4dGVybmFsc0RpcilcdGNsdGs8L3RjbHRrRGlyPgogICAgIDx0Y2x0azY0RGlyPiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azY0PC90Y2x0azY0RGlyPgotICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKVxsaWJcdGNsODUubGliOyQodGNsdGtEaXIpXGxpYlx0azg1LmxpYjwvdGNsdGtMaWI+Ci0gICAgPHRjbHRrTGliRGVidWc+JCh0Y2x0a0RpcilcbGliXHRjbDg1Zy5saWI7JCh0Y2x0a0RpcilcbGliXHRrODVnLmxpYjwvdGNsdGtMaWJEZWJ1Zz4KLSAgICA8dGNsdGs2NExpYj4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NS5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NS5saWI8L3RjbHRrNjRMaWI+Ci0gICAgPHRjbHRrNjRMaWJEZWJ1Zz4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NWcubGliOyQodGNsdGs2NERpcilcbGliXHRrODVnLmxpYjwvdGNsdGs2NExpYkRlYnVnPgorICAgIDx0Y2x0a0xpYj4kKHRjbHRrRGlyKVxsaWJcdGNsODZ0LmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NnQubGliPC90Y2x0a0xpYj4KKyAgICA8dGNsdGtMaWJEZWJ1Zz4kKHRjbHRrRGlyKVxsaWJcdGNsODZ0Zy5saWI7JCh0Y2x0a0RpcilcbGliXHRrODZ0Zy5saWI8L3RjbHRrTGliRGVidWc+CisgICAgPHRjbHRrNjRMaWI+JCh0Y2x0azY0RGlyKVxsaWJcdGNsODZ0LmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg2dC5saWI8L3RjbHRrNjRMaWI+CisgICAgPHRjbHRrNjRMaWJEZWJ1Zz4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NnRnLmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg2dGcubGliPC90Y2x0azY0TGliRGVidWc+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXA+CiAgICAgPENsQ29tcGlsZT4KQEAgLTQ5LDkgKzQ5LDggQEAKICAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgogICAgICAgPFByb2dyYW1EYXRhYmFzZUZpbGU+JChPdXREaXIpJChUYXJnZXROYW1lKS5wZGI8L1Byb2dyYW1EYXRhYmFzZUZpbGU+CiAgICAgICA8U3ViU3lzdGVtPldpbmRvd3M8L1N1YlN5c3RlbT4KLSAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+ZmFsc2U8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KLSAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KLSAgICAgIDwvRGF0YUV4ZWN1dGlvblByZXZlbnRpb24+CisgICAgICA8UmFuZG9taXplZEJhc2VBZGRyZXNzPnRydWU8L1JhbmRvbWl6ZWRCYXNlQWRkcmVzcz4KKyAgICAgIDxEYXRhRXhlY3V0aW9uUHJldmVudGlvbj50cnVlPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KICAgICAgIDxUYXJnZXRNYWNoaW5lPk1hY2hpbmVYODY8L1RhcmdldE1hY2hpbmU+CiAgICAgPC9MaW5rPgogICAgIDxSZXNvdXJjZUNvbXBpbGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qIGIvUENidWlsZC9weXRob24udmN4cHJvagppbmRleCBkMGE5ZGUwLi5iZDEyNjI0IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgIDxMaW5rPgogICAgICAgPE91dHB1dEZpbGU+JChPdXREaXIpcHl0aG9uX2QuZXhlPC9PdXRwdXRGaWxlPgogICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8U3RhY2tSZXNlcnZlU2l6ZT4yMTAwMDAwPC9TdGFja1Jlc2VydmVTaXplPgorICAgICAgPFN0YWNrUmVzZXJ2ZVNpemU+NDE5NDMwNDwvU3RhY2tSZXNlcnZlU2l6ZT4KICAgICAgIDxCYXNlQWRkcmVzcz4weDFkMDAwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTM1NywxMiArMzU3LDggQEAKICAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgogICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KICAgICA8L1Byb2plY3RSZWZlcmVuY2U+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0idzl4cG9wZW4udmN4cHJvaiI+Ci0gICAgICA8UHJvamVjdD57ZTllMGExZjYtMDAwOS00ZThjLWI4ZjgtMWI4ZjVkNDlhMDU4fTwvUHJvamVjdD4KLSAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT5mYWxzZTwvUmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+Ci0gICAgPC9Qcm9qZWN0UmVmZXJlbmNlPgogICA8L0l0ZW1Hcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvaiBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCmluZGV4IDg5YTYzZDEuLjExYjcwNTQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qCkBAIC00NjAsNiArNDYwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGF0Y2hsZXZlbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwZ2VuLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBnZW5oZWFkZXJzLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5aGFzaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweV9jdXJzZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHlhcmVuYS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWNhcHN1bGUuaCIgLz4KQEAgLTQ5Niw3ICs0OTcsMTEgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVcdW5pY29kZW9iamVjdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVx3ZWFrcmVmb2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9tYXRoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGhhc2h0YWJsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHpsaWJcY3JjMzIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxkZWZsYXRlLmgiIC8+CkBAIC01MjMsNiArNTI4LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXGZpbmQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccmVwbGFjZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcc3BsaXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcdW5pY29kZXR5cGVfZGIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXFBhcnNlclxwYXJzZXIuaCIgLz4KQEAgLTU0OCw2ICs1NTQsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfcGlja2xlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NyZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RhdC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RydWN0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF93ZWFrcmVmLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGFycmF5bW9kdWxlLmMiIC8+CkBAIC01NTksMTIgKzU2NiwxNCBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xmYXVsdGhhbmRsZXIuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtYWluLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wY29kZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3BlcmF0b3IuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIiAvPgpAQCAtNTc0LDYgKzU4Myw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90cmFjZW1hbGxvYy5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x0aW1lbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHh4c3VidHlwZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyIgLz4KQEAgLTY1OSw2ICs2NjksNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcZGxfbnQuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXGdldHBhdGhwLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xtc3ZjcnRtb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWhhc2guYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxyYW5kb20uYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxfd2FybmluZ3MuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxhc2RsLmMiIC8+CkBAIC03MjUsNCArNzM2LDQgQEAKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4KICAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25UYXJnZXRzIj4KICAgPC9JbXBvcnRHcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCAwOWI0YmI0Li40MWZlMWIyIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTMwMCw2ICszMDAsMTUgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZS5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfY29uc3RhbnRzLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9saWIuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlc1xfaW88L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KQEAgLTM3OCw2ICszODcsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiPgorICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIj4KICAgICAgIDxGaWx0ZXI+T2JqZWN0czwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtNDA5LDYgKzQyMSw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxQeXRob25cY2V2YWxfZ2lsLmgiPgogICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHloYXNoLmgiPgorICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiPgpAQCAtNDk4LDcgKzUxMyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcb3BlcmF0b3IuYyI+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGVyYXRvci5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyI+CkBAIC05MTYsNiArOTMxLDEyIEBACiAgICAgICA8RmlsdGVyPlBDPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxPYmplY3RzXG5hbWVzcGFjZW9iamVjdC5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3RhdC5jIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5aGFzaC5jIj4KKyAgICAgIDxGaWx0ZXI+UHl0aG9uPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIj4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVhZG1lLnR4dCBiL1BDYnVpbGQvcmVhZG1lLnR4dAppbmRleCA2ZjA3Njg5Li4zMjYzNTcwIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3JlYWRtZS50eHQKKysrIGIvUENidWlsZC9yZWFkbWUudHh0CkBAIC0xLDIwMCArMSwyNTkgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDEwLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0J1aWxkaW5nIFB5dGhvbiB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgUHl0aG9uIGZvciBXaW4zMiBhbmQgeDY0IHBsYXRmb3JtcywgZS5nLgotV2luZG93cyBYUCwgVmlzdGEgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDguICBJbiBvcmRlciB0byBidWlsZCAzMi1iaXQKLWRlYnVnIGFuZCByZWxlYXNlIGV4ZWN1dGFibGVzLCBNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIEV4cHJlc3MgRWRpdGlvbiBpcwotcmVxdWlyZWQgYXQgdGhlIHZlcnkgbGVhc3QuICBJbiBvcmRlciB0byBidWlsZCA2NC1iaXQgZGVidWcgYW5kIHJlbGVhc2UKLWV4ZWN1dGFibGVzLCBWaXN1YWwgU3R1ZGlvIDIwMTAgU3RhbmRhcmQgRWRpdGlvbiBpcyByZXF1aXJlZCBhdCB0aGUgdmVyeQotbGVhc3QuICBJbiBvcmRlciB0byBidWlsZCBhbGwgb2YgdGhlIGFib3ZlLCBhcyB3ZWxsIGFzIGdlbmVyYXRlIHJlbGVhc2UgYnVpbGRzCi10aGF0IG1ha2UgdXNlIG9mIFByb2ZpbGUgR3VpZGVkIE9wdGltaXNhdGlvbiAoUEcwKSwgVmlzdWFsIFN0dWRpbyAyMDEwCi1Qcm9mZXNzaW9uYWwgRWRpdGlvbiBpcyByZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdC4gIFRoZSBvZmZpY2lhbCBQeXRob24KLXJlbGVhc2VzIGFyZSBidWlsdCB3aXRoIHRoaXMgdmVyc2lvbiBvZiBWaXN1YWwgU3R1ZGlvLgorVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBDUHl0aG9uIGZvciBNaWNyb3NvZnQgV2luZG93cyBOVCB2ZXJzaW9uCis1LjEgb3IgaGlnaGVyIChXaW5kb3dzIFhQLCBXaW5kb3dzIFNlcnZlciAyMDAzLCBvciBsYXRlcikgb24gMzIgYW5kIDY0CitiaXQgcGxhdGZvcm1zLiAgVXNpbmcgdGhpcyBkaXJlY3RvcnkgcmVxdWlyZXMgYW4gaW5zdGFsbGF0aW9uIG9mCitNaWNyb3NvZnQgVmlzdWFsIEMrKyAyMDEwIChNU1ZDIDEwLjApIG9mIGFueSBlZGl0aW9uLiAgVGhlIHNwZWNpZmljCityZXF1aXJlbWVudHMgYXJlIGFzIGZvbGxvd3M6CitWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uCisgICAgUmVxdWlyZWQgZm9yIGJ1aWxkaW5nIDMyLWJpdCBEZWJ1ZyBhbmQgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcy4KKyAgICBUaGlzIGVkaXRpb24gZG9lcyBub3Qgc3VwcG9ydCAic29sdXRpb24gZm9sZGVycyIsIHdoaWNoIHBjYnVpbGQuc2xuCisgICAgdXNlczsgdGhpcyB3aWxsIG5vdCBwcmV2ZW50IGJ1aWxkaW5nLgorVmlzdWFsIFN0dWRpbyAyMDEwIFN0YW5kYXJkIEVkaXRpb24KKyAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgNjQtYml0IERlYnVnIGFuZCBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzCitWaXN1YWwgU3R1ZGlvIDIwMTAgUHJvZmVzc2lvbmFsIEVkaXRpb24KKyAgICBSZXF1aXJlZCBmb3IgYnVpbGRpbmcgUmVsZWFzZSBjb25maWd1cmF0aW9uIGJ1aWxkcyB0aGF0IG1ha2UgdXNlIG9mCisgICAgUHJvZmlsZSBHdWlkZWQgT3B0aW1pemF0aW9uIChQR08pLCBvbiBlaXRoZXIgcGxhdGZvcm0uICBUaGUgb2ZmaWNpYWwKKyAgICBQeXRob24gcmVsZWFzZXMgYXJlIGJ1aWx0IHdpdGggUHJvZmVzc2lvbmFsIEVkaXRpb24gdXNpbmcgUEdPLgogCi1Gb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL1BDL3JlYWRtZS50eHQuCitBbGwgeW91IG5lZWQgdG8gZG8gdG8gYnVpbGQgaXMgb3BlbiB0aGUgc29sdXRpb24gInBjYnVpbGQuc2xuIiBpbiBWaXN1YWwKK1N0dWRpbywgc2VsZWN0IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBsYXRmb3JtLAordGhlbiBidWlsZCB3aXRoICJCdWlsZCBTb2x1dGlvbiIgb3IgdGhlIEY3IGtleWJvYXJkIHNob3J0Y3V0LiAgWW91IGNhbgorYWxzbyBidWlsZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgdGhlICJidWlsZC5iYXQiIHNjcmlwdCBpbiB0aGlzCitkaXJlY3RvcnkuICBUaGUgc29sdXRpb24gaXMgY29uZmlndXJlZCB0byBidWlsZCB0aGUgcHJvamVjdHMgaW4gdGhlCitjb3JyZWN0IG9yZGVyLgogCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLnNsbiIgaW4gVmlzdWFsIFN0dWRpbywKLXNlbGVjdCB0aGUgZGVzaXJlZCBjb21iaW5hdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBwbGF0Zm9ybSBhbmQgZXZlbnR1YWxseQotYnVpbGQgdGhlIHNvbHV0aW9uLiBVbmxlc3MgeW91IGFyZSBnb2luZyB0byBkZWJ1ZyBhIHByb2JsZW0gaW4gdGhlIGNvcmUgb3IKLXlvdSBhcmUgZ29pbmcgdG8gY3JlYXRlIGFuIG9wdGltaXplZCBidWlsZCB5b3Ugd2FudCB0byBzZWxlY3QgIlJlbGVhc2UiIGFzCi1jb25maWd1cmF0aW9uLgorVGhlIHNvbHV0aW9uIGN1cnJlbnRseSBzdXBwb3J0cyB0d28gcGxhdGZvcm1zLiAgVGhlIFdpbjMyIHBsYXRmb3JtIGlzCit1c2VkIHRvIGJ1aWxkIHN0YW5kYXJkIHg4Ni1jb21wYXRpYmxlIDMyLWJpdCBiaW5hcmllcywgb3V0cHV0IGludG8gdGhpcworZGlyZWN0b3J5LiAgVGhlIHg2NCBwbGF0Zm9ybSBpcyB1c2VkIGZvciBidWlsZGluZyA2NC1iaXQgQU1ENjQgKGFrYQoreDg2XzY0IG9yIEVNNjRUKSBiaW5hcmllcywgb3V0cHV0IGludG8gdGhlIGFtZDY0IHN1Yi1kaXJlY3Rvcnkgd2hpY2gKK3dpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICBUaGUgSXRhbml1bSAoSUEtNjQpCitwbGF0Zm9ybSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgU2VlIHRoZSAiQnVpbGRpbmcgZm9yIEFNRDY0IiBzZWN0aW9uCitiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCA2NC1iaXQgYnVpbGRzLgogCi1UaGUgUENidWlsZCBkaXJlY3RvcnkgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGZyb20KLVZTIEMrKyBFeHByZXNzIEVkaXRpb24gb3ZlciB0aGUgc3RhbmRhcmQgZWRpdGlvbiB1cCB0byB0aGUgcHJvZmVzc2lvbmFsCi1lZGl0aW9uLiBIb3dldmVyIHRoZSBleHByZXNzIGVkaXRpb24gZG9lcyBub3Qgc3VwcG9ydCBmZWF0dXJlcyBsaWtlIHNvbHV0aW9uCi1mb2xkZXJzIG9yIHByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbiAoUEdPKS4gVGhlIG1pc3NpbmcgYml0cyBhbmQgcGllY2VzCi13b24ndCBzdG9wIHlvdSBmcm9tIGJ1aWxkaW5nIFB5dGhvbi4KK0ZvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIHNvbHV0aW9uOgorRGVidWcKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiB3aXRoIGV4dHJhIGRlYnVnZ2luZyBjYXBhYmlsaXRpZXMsIGVxdWl2YWxlbnQKKyAgICB0byB1c2luZyAuL2NvbmZpZ3VyZSAtLXdpdGgtcHlkZWJ1ZyBvbiBVTklYLiAgQWxsIGJpbmFyaWVzIGJ1aWx0CisgICAgdXNpbmcgdGhpcyBjb25maWd1cmF0aW9uIGhhdmUgIl9kIiBhZGRlZCB0byB0aGVpciBuYW1lOgorICAgIHB5dGhvbjM0X2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLiAgQm90aCB0aGUKKyAgICBidWlsZCBhbmQgcnQgKHJ1biB0ZXN0KSBiYXRjaCBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhY2NlcHQgYSAtZAorICAgIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLiAgSWYgeW91IGFyZSBidWlsZGluZyBQeXRob24gdG8gaGVscCB3aXRoCisgICAgZGV2ZWxvcG1lbnQgb2YgQ1B5dGhvbiwgeW91IHdpbGwgbW9zdCBsaWtlbHkgdXNlIHRoaXMgY29uZmlndXJhdGlvbi4KK1BHSW5zdHJ1bWVudCwgUEdVcGRhdGUKKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBpbiBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUEdPLCB3aGljaAorICAgIHJlcXVpcmVzIFByb2Zlc3Npb25hbCBFZGl0aW9uIG9mIFZpc3VhbCBTdHVkaW8uICBTZWUgdGhlICJQcm9maWxlCisgICAgR3VpZGVkIE9wdGltaXphdGlvbiIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIEJ1aWxkCisgICAgb3V0cHV0IGZyb20gZWFjaCBvZiB0aGVzZSBjb25maWd1cmF0aW9ucyBsYW5kcyBpbiBpdHMgb3duCisgICAgc3ViLWRpcmVjdG9yeSBvZiB0aGlzIGRpcmVjdG9yeS4gIFRoZSBvZmZpY2lhbCBQeXRob24gcmVsZWFzZXMgYXJlCisgICAgYnVpbHQgdXNpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMuCitSZWxlYXNlCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gYXMgaXQgaXMgbWVhbnQgdG8gYmUgdXNlZCBpbiBwcm9kdWN0aW9uCisgICAgc2V0dGluZ3MsIHRob3VnaCB3aXRob3V0IFBHTy4KIAotVGhlIHNvbHV0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgdGhlIHByb2plY3RzIGluIHRoZSBjb3JyZWN0IG9yZGVyLiAiQnVpbGQKLVNvbHV0aW9uIiBvciBGNyB0YWtlcyBjYXJlIG9mIGRlcGVuZGVuY2llcyBleGNlcHQgZm9yIHg2NCBidWlsZHMuIFRvIG1ha2UKLWNyb3NzIGNvbXBpbGluZyB4NjQgYnVpbGRzIG9uIGEgMzJiaXQgT1MgcG9zc2libGUgdGhlIHg2NCBidWlsZHMgcmVxdWlyZSBhCi0zMmJpdCB2ZXJzaW9uIG9mIFB5dGhvbi4KLQotTk9URToKLSAgIFlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MKLSAgIHlvdSdyZSBidWlsZGluZyBhbiBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yCi0gICBzcGVjaWZpY2FsbHkgbWFraW5nIGNoYW5nZXMgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQsIG9yIGFyZQotICAgcnVubmluZyBhIFB5dGhvbiBjb3JlIGJ1aWxkYm90IHRlc3Qgc2xhdmU7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKLQotV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24zM19kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4gQm90aAotdGhlIGJ1aWxkIGFuZCBydCBiYXRjaCBmaWxlcyBhY2NlcHQgYSAtZCBvcHRpb24gZm9yIGRlYnVnIGJ1aWxkcy4KLQotVGhlIDMyYml0IGJ1aWxkcyBlbmQgdXAgaW4gdGhlIHNvbHV0aW9uIGZvbGRlciBQQ2J1aWxkIHdoaWxlIHRoZSB4NjQgYnVpbGRzCi1sYW5kIGluIHRoZSBhbWQ2NCBzdWJmb2xkZXIuIFRoZSBQR0kgYW5kIFBHTyBidWlsZHMgZm9yIHByb2ZpbGUgZ3VpZGVkCi1vcHRpbWl6YXRpb24gZW5kIHVwIGluIHRoZWlyIG93biBmb2xkZXJzLCB0b28uCiAKIExlZ2FjeSBzdXBwb3J0CiAtLS0tLS0tLS0tLS0tLQogCiBZb3UgY2FuIGZpbmQgYnVpbGQgZGlyZWN0b3JpZXMgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFZpc3VhbCBTdHVkaW8gYW5kCi1WaXN1YWwgQysrIGluIHRoZSBQQyBkaXJlY3RvcnkuIFRoZSBsZWdhY3kgYnVpbGQgZGlyZWN0b3JpZXMgYXJlIG5vIGxvbmdlcgotYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWF5IG5vdCB3b3JrIG91dCBvZiB0aGUgYm94LgorVmlzdWFsIEMrKyBpbiB0aGUgUEMgZGlyZWN0b3J5LiBUaGUgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBubworbG9uZ2VyIGFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4KIAotUEMvVkM2LwotICAgIFZpc3VhbCBDKysgNi4wCi1QQy9WUzcuMS8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDMgKDcuMSkKLVBDL1ZTOC4wLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwNSAoOC4wKQotUEMvVlM5LjAvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDA4ICg5LjApCitDdXJyZW50bHksIHRoZSBvbmx5IGxlZ2FjeSBidWlsZCBkaXJlY3RvcnkgaXMgUENcVlM5LjAsIGZvciBWaXN1YWwKK1N0dWRpbyAyMDA4ICg5LjApLgogCiAKLUMgUlVOVElNRQorQyBSdW50aW1lCiAtLS0tLS0tLS0KIAotVmlzdWFsIFN0dWRpbyAyMDEwIHVzZXMgdmVyc2lvbiAxMCBvZiB0aGUgQyBydW50aW1lIChNU1ZDUlQxMCkuICBUaGUgZXhlY3V0YWJsZXMKLW5vIGxvbmdlciB1c2UgdGhlICJTaWRlIGJ5IFNpZGUiIGFzc2VtYmxpZXMgdXNlZCBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUKLWNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuCi1UaGUgcnVuIHRpbWUgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFZDL1JlZGlzdCBmb2xkZXIgb2YgeW91ciB2aXN1YWwgc3R1ZGlvCi1kaXN0cmlidXRpb24uIEZvciBtb3JlIGluZm8sIHNlZSB0aGUgUmVhZG1lIGluIHRoZSBWQy9SZWRpc3QgZm9sZGVyLgorVmlzdWFsIFN0dWRpbyAyMDEwIHVzZXMgdmVyc2lvbiAxMCBvZiB0aGUgQyBydW50aW1lIChNU1ZDUlQxMCkuICBUaGUKK2V4ZWN1dGFibGVzIG5vIGxvbmdlciB1c2UgdGhlICJTaWRlIGJ5IFNpZGUiIGFzc2VtYmxpZXMgdXNlZCBpbiBwcmV2aW91cwordmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuCiAKLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCitUaGUgcnVuIHRpbWUgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFZDL1JlZGlzdCBmb2xkZXIgb2YgeW91cgorVmlzdWFsIFN0dWRpbyBkaXN0cmlidXRpb24uIEZvciBtb3JlIGluZm8sIHNlZSB0aGUgUmVhZG1lIGluIHRoZQorVkMvUmVkaXN0IGZvbGRlci4KIAorCitTdWItUHJvamVjdHMKKy0tLS0tLS0tLS0tLQorCitUaGUgQ1B5dGhvbiBwcm9qZWN0IGlzIHNwbGl0IHVwIGludG8gc2V2ZXJhbCBzbWFsbGVyIHN1Yi1wcm9qZWN0cyB3aGljaAorYXJlIG1hbmFnZWQgYnkgdGhlIHBjYnVpbGQuc2xuIHNvbHV0aW9uIGZpbGUuICBFYWNoIHN1Yi1wcm9qZWN0IGlzCityZXByZXNlbnRlZCBieSBhIC52Y3hwcm9qIGFuZCBhIC52Y3hwcm9qLmZpbHRlcnMgZmlsZSBzdGFydGluZyB3aXRoIHRoZQorbmFtZSBvZiB0aGUgc3ViLXByb2plY3QuICBUaGVzZSBzdWItcHJvamVjdHMgZmFsbCBpbnRvIGEgZmV3IGdlbmVyYWwKK2NhdGVnb3JpZXM6CisKK1RoZSBmb2xsb3dpbmcgc3ViLXByb2plY3RzIHJlcHJlc2VudCB0aGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGJ1aWxkCithIGZ1bmN0aW9uaW5nIENQeXRob24gaW50ZXJwcmV0ZXIuICBJZiBub3RoaW5nIGVsc2UgYnVpbGRzIGJ1dCB0aGVzZSwKK3lvdSdsbCBoYXZlIGEgdmVyeSBsaW1pdGVkIGJ1dCB1c2FibGUgcHl0aG9uLmV4ZToKIHB5dGhvbmNvcmUKICAgICAuZGxsIGFuZCAubGliCiBweXRob24KICAgICAuZXhlCitraWxsX3B5dGhvbgorICAgIGtpbGxfcHl0aG9uLmV4ZSwgYSBzbWFsbCBwcm9ncmFtIGRlc2lnbmVkIHRvIGtpbGwgYW55IGluc3RhbmNlcyBvZgorICAgIHB5dGhvbihfZCkuZXhlIHRoYXQgYXJlIHJ1bm5pbmcgYW5kIGxpdmUgaW4gdGhlIGJ1aWxkIG91dHB1dAorICAgIGRpcmVjdG9yeTsgdGhpcyBpcyBtZWFudCB0byBhdm9pZCBidWlsZCBpc3N1ZXMgZHVlIHRvIGxvY2tlZCBmaWxlcworbWFrZV9idWlsZGluZm8sIG1ha2VfdmVyc2lvbmluZm8KKyAgICBoZWxwZXJzIHRvIHByb3ZpZGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHRoZSBidWlsZCBwcm9jZXNzCisKK1RoZXNlIHN1Yi1wcm9qZWN0cyBwcm92aWRlIGV4dHJhIGV4ZWN1dGFibGVzIHRoYXQgYXJlIHVzZWZ1bCBmb3IgcnVubmluZworQ1B5dGhvbiBpbiBkaWZmZXJlbnQgd2F5czoKIHB5dGhvbncKLSAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IHBvcCB1cCBhIERPUyBib3gKKyAgICBweXRob253LmV4ZSwgYSB2YXJpYW50IG9mIHB5dGhvbi5leGUgdGhhdCBkb2Vzbid0IG9wZW4gYSBDb21tYW5kCisgICAgUHJvbXB0IHdpbmRvdworcHlsYXVuY2hlcgorICAgIHB5LmV4ZSwgdGhlIFB5dGhvbiBMYXVuY2hlciBmb3IgV2luZG93cywgc2VlCisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjbGF1bmNoZXIKK3B5d2xhdW5jaGVyCisgICAgcHl3LmV4ZSwgYSB2YXJpYW50IG9mIHB5LmV4ZSB0aGF0IGRvZXNuJ3Qgb3BlbiBhIENvbW1hbmQgUHJvbXB0CisgICAgd2luZG93CitfdGVzdGVtYmVkCisgICAgX3Rlc3RlbWJlZC5leGUsIGEgc21hbGwgcHJvZ3JhbSB0aGF0IGVtYmVkcyBQeXRob24gZm9yIHRlc3RpbmcKKyAgICBwdXJwb3NlcywgdXNlZCBieSB0ZXN0X2NhcGkucHkKKworVGhlc2UgYXJlIG1pc2NlbGxhbmVvdXMgc3ViLXByb2plY3RzIHRoYXQgZG9uJ3QgcmVhbGx5IGZpdCB0aGUgb3RoZXIKK2NhdGVnb3JpZXMuICBCeSBkZWZhdWx0LCB0aGVzZSBwcm9qZWN0cyBkbyBub3QgYnVpbGQgaW4gRGVidWcKK2NvbmZpZ3VyYXRpb246CitfZnJlZXplX2ltcG9ydGxpYgorICAgIF9mcmVlemVfaW1wb3J0bGliLmV4ZSwgdXNlZCB0byByZWdlbmVyYXRlIFB5dGhvblxpbXBvcnRsaWIuaCBhZnRlcgorICAgIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gTGliXGltcG9ydGxpYlxfYm9vdHN0cmFwLnB5CitiZGlzdF93aW5pbnN0CisgICAgLi5cTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtMTAuMFstYW1kNjRdLmV4ZSwgdGhlIGJhc2UKKyAgICBleGVjdXRhYmxlIHVzZWQgYnkgdGhlIGRpc3R1dGlscyBiZGlzdF93aW5pbnN0IGNvbW1hbmQKK3B5dGhvbjNkbGwKKyAgICBweXRob24zLmRsbCwgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSBkbGwKK3h4bGltaXRlZAorICAgIGJ1aWxkcyBhbiBleGFtcGxlIG1vZHVsZSB0aGF0IG1ha2VzIHVzZSBvZiB0aGUgUEVQIDM4NCBTdGFibGUgQUJJLAorICAgIHNlZSBNb2R1bGVzXHh4bGltaXRlZC5jCisKK1RoZSBmb2xsb3dpbmcgc3ViLXByb2plY3RzIGFyZSBmb3IgaW5kaXZpZHVhbCBtb2R1bGVzIG9mIHRoZSBzdGFuZGFyZAorbGlicmFyeSB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gQzsgZWFjaCBvbmUgYnVpbGRzIGEgRExMIChyZW5hbWVkIHRvCisucHlkKSBvZiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBwcm9qZWN0OgorX2N0eXBlcworX2N0eXBlc190ZXN0CitfZGVjaW1hbAorX2VsZW1lbnR0cmVlCitfaGFzaGxpYgorX21zaQorX211bHRpcHJvY2Vzc2luZworX292ZXJsYXBwZWQKK19zaGEzCiBfc29ja2V0Ci0gICAgc29ja2V0bW9kdWxlLmMKIF90ZXN0Y2FwaQotICAgIHRlc3RzIG9mIHRoZSBQeXRob24gQyBBUEksIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwogX3Rlc3RidWZmZXIKLSAgICBidWZmZXIgcHJvdG9jb2wgdGVzdHMsIHJ1biB2aWEgTGliL3Rlc3QvdGVzdF9idWZmZXIucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0YnVmZmVyLmMKK190ZXN0aW1wb3J0bXVsdGlwbGUKIHB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwogc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKIHVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQogd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKIAotUHl0aG9uLWNvbnRyb2xsZWQgc3VicHJvamVjdHMgdGhhdCB3cmFwIGV4dGVybmFsIHByb2plY3RzOgotX3NxbGl0ZTMKLSAgICBXcmFwcyBTUUxpdGUgMy43LjEyLCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qLgotX3RraW50ZXIKLSAgICBXcmFwcyB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFVubGlrZSBfc3FsaXRlMywgdGhlcmUncyBubwotICAgIGNvcnJlc3BvbmRpbmcgdGNsdGsudmN4cHJvai10eXBlIHByb2plY3QgdGhhdCBidWlsZHMgVGNsL1RrIGZyb20gdmN4cHJvaidzCi0gICAgd2l0aGluIG91ciBwY2J1aWxkLnNsbiwgd2hpY2ggbWVhbnMgdGhpcyBtb2R1bGUgZXhwZWN0cyB0byBmaW5kIGEKLSAgICBwcmUtYnVpbHQgVGNsL1RrIGluIGVpdGhlciAuLlwuLlx0Y2x0ayBmb3IgMzItYml0IG9yIC4uXC4uXHRjbHRrNjQgZm9yCi0gICAgNjQtYml0IChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBTZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyB0byBidWlsZAotICAgIFRjbC9Uay4KK1RoZSBmb2xsb3dpbmcgUHl0aG9uLWNvbnRyb2xsZWQgc3ViLXByb2plY3RzIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMuCitOb3RlIHRoYXQgdGhlc2UgZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSBub3QgbmVjZXNzYXJ5IGZvciBhIHdvcmtpbmcKK2ludGVycHJldGVyLCBidXQgdGhleSBkbyBpbXBsZW1lbnQgc2V2ZXJhbCBtYWpvciBmZWF0dXJlcy4gIFNlZSB0aGUKKyJHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMiIHNlY3Rpb24gYmVsb3cgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KK2Fib3V0IGdldHRpbmcgdGhlIHNvdXJjZSBmb3IgYnVpbGRpbmcgdGhlc2UgbGlicmFyaWVzLiAgVGhlIHN1Yi1wcm9qZWN0cworYXJlOgogX2J6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnppcDIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjYgb2YgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAgICBIb21lcGFnZToKICAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKIF9sem1hCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnkuCi0KLSAgICBEb3dubG9hZCB0aGUgcHJlLWJ1aWx0IFdpbmRvd3MgYmluYXJpZXMgZnJvbSBodHRwOi8vdHVrYWFuaS5vcmcveHovLCBhbmQKLSAgICBleHRyYWN0IHRvIC4uXHh6LTUuMC4zLiBJZiB5b3UgYXJlIHVzaW5nIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBsaWJsem1hLAotICAgIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGZyb20geHotPFZFUlNJT04+IHRvIHh6LTUuMC4zLgotCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnksIHVzaW5nIHByZS1idWlsdAorICAgIGJpbmFyaWVzIG9mIFhaIFV0aWxzIHZlcnNpb24gNS4wLjUKKyAgICBIb21lcGFnZToKKyAgICAgICAgaHR0cDovL3R1a2Fhbmkub3JnL3h6LwogX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KKyAgICBQeXRob24gd3JhcHBlciBmb3IgdmVyc2lvbiAxLjAuMWUgb2YgdGhlIE9wZW5TU0wgc2VjdXJlIHNvY2tldHMKKyAgICBsaWJyYXJ5LCB3aGljaCBpcyBidWlsdCBieSBzc2wudmN4cHJvagorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLwogCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCisgICAgQnVpbGRpbmcgT3BlblNTTCByZXF1aXJlcyBuYXNtLmV4ZSAodGhlIE5ldHdpZGUgQXNzZW1ibGVyKSwgdmVyc2lvbgorICAgIDIuMTAgb3IgbmV3ZXIgZnJvbQorICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCisgICAgdG8gYmUgc29tZXdoZXJlIG9uIHlvdXIgUEFUSC4gIE1vcmUgcmVjZW50IHZlcnNpb25zIG9mIE9wZW5TU0wgbWF5CisgICAgbmVlZCBhIGxhdGVyIHZlcnNpb24gb2YgTkFTTS4gSWYgT3BlblNTTCdzIHNlbGYgdGVzdHMgZG9uJ3QgcGFzcywKKyAgICB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsIHJlYnVpbGQgb2YKKyAgICBPcGVuU1NMLgogCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0xLjAuMWUKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKLQotICAgIEFsdGVybmF0aXZlbHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLgotICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCi0gICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KLQotICAgIFlvdSBtdXN0IGluc3RhbGwgdGhlIE5BU00gYXNzZW1ibGVyIDIuMTAgb3IgbmV3ZXIgZnJvbQotICAgICAgICBodHRwOi8vbmFzbS5zZi5uZXQKLSAgICBmb3IgeDg2IGJ1aWxkcy4gIFB1dCBuYXNtLmV4ZSBhbnl3aGVyZSBpbiB5b3VyIFBBVEguIE1vcmUgcmVjZW50Ci0gICAgdmVyc2lvbnMgb2YgT3BlblNTTCBtYXkgbmVlZCBhIGxhdGVyIHZlcnNpb24gb2YgTkFTTS4gSWYgT3BlblNTTCdzIHNlbGYKLSAgICB0ZXN0cyBkb24ndCBwYXNzLCB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsCi0gICAgcmVidWlsZCBvZiBPcGVuU1NMLgotCi0gICAgWW91IGNhbiBhbHNvIGluc3RhbGwgQWN0aXZlUGVybCBmcm9tCisgICAgSWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20KKyAgICBweXRob24ub3JnJ3Mgc3VidmVyc2lvbiByZXBvc2l0b3J5LCBQZXJsIGlzIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZQorICAgIG5lY2Vzc2FyeSBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLiAgQWN0aXZlUGVybCBpcyBhdmFpbGFibGUKKyAgICBmcm9tCiAgICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL2FjdGl2ZXBlcmwvCi0gICAgaWYgeW91IGxpa2UgdG8gdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2VzIGluc3RlYWQgb2YgdGhlIGZpbGVzIGZyb20KLSAgICBweXRob24ncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkuIFRoZSBzdm4gdmVyc2lvbiBjb250YWlucyBwcmUtYnVpbGQKLSAgICBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgorICAgIFRoZSBzdm4ucHl0aG9uLm9yZyB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsdCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5CisgICAgZmlsZXMuCiAKLSAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQuCi0gICAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBZb3UgbWF5IGhhdmUKLSAgICB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZiB0aGUgYnVpbGQgcHJvY2VzcwotICAgIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIGZpbGVzIG9yIGZvcmJpZGRlbiBJREVBLiBBZ2FpbiB0aGUgZmlsZXMgcHJvdmlkZWQKLSAgICBpbiB0aGUgc3VidmVyc2lvbiByZXBvc2l0b3J5IGFyZSBhbHJlYWR5IGZpeGVkLgorICAgIFRoZSBidWlsZCBwcm9jZXNzIG1ha2VzIHN1cmUgdGhhdCBubyBwYXRlbnRlZCBhbGdvcml0aG1zIGFyZQorICAgIGluY2x1ZGVkLiAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLgorICAgIFlvdSBtYXkgaGF2ZSB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZgorICAgIHVzaW5nIG9mZmljaWFsIHNvdXJjZXM7IHRoZSBzdm4ucHl0aG9uLm9yZy1ob3N0ZWQgdmVyc2lvbiBpcyBhbHJlYWR5CisgICAgZml4ZWQuCiAKLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDQnVpbGQvYnVpbGRfc3NsLnB5IHRvIHBlcmZvcm0KLSAgICB0aGUgYnVpbGQuICBUaGlzIFB5dGhvbiBzY3JpcHQgbG9jYXRlcyBhbmQgYnVpbGRzIHlvdXIgT3BlblNTTAotICAgIGluc3RhbGxhdGlvbiwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG1ha2VmaWxlIHRvIGJ1aWxkIHRoZSBmaW5hbCAucHlkLgorICAgIFRoZSBzc2wudmN4cHJvaiBzdWItcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ2J1aWxkL2J1aWxkX3NzbC5weSwKKyAgICB3aGljaCBsb2NhdGVzIGFuZCBidWlsZHMgT3BlblNTTC4KIAogICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAogICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQorICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4gIElmCisgICAgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5IChlLmcuLAorICAgIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZSBhCisgICAgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKICAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgogCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCisgICAgVGhlIHNzbCBzdWItcHJvamVjdCBkb2VzIG5vdCBoYXZlIHRoZSBhYmlsaXR5IHRvIGNsZWFuIHRoZSBPcGVuU1NMCisgICAgYnVpbGQ7IGlmIHlvdSBuZWVkIHRvIHJlYnVpbGQsIHlvdSdsbCBoYXZlIHRvIGNsZWFuIGl0IGJ5IGhhbmQuCitfc3FsaXRlMworICAgIFdyYXBzIFNRTGl0ZSAzLjguMSwgd2hpY2ggaXMgaXRzZWxmIGJ1aWx0IGJ5IHNxbGl0ZTMudmN4cHJvagorICAgIEhvbWVwYWdlOgorICAgICAgICBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvCitfdGtpbnRlcgorICAgIFdyYXBzIHZlcnNpb24gOC42LjEgb2YgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uCisgICAgSG9tZXBhZ2U6CisgICAgICAgIGh0dHA6Ly93d3cudGNsLnRrLwogCi1UaGUgc3VicHJvamVjdHMgYWJvdmUgd3JhcCBleHRlcm5hbCBwcm9qZWN0cyBQeXRob24gZG9lc24ndCBjb250cm9sLCBhbmQgYXMKLXN1Y2gsIGEgbGl0dGxlIG1vcmUgd29yayBpcyByZXF1aXJlZCBpbiBvcmRlciB0byBkb3dubG9hZCB0aGUgcmVsZXZhbnQgc291cmNlCi1maWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5IGNhbiBiZSBidWlsdC4gIFRoZSBidWlsZGJvdHMgZG8gdGhpcyBlYWNoCi10aW1lIHRoZXkncmUgYnVpbHQsIHNvIHRoZSBlYXNpZXN0IGFwcHJvYWNoIGlzIHRvIHJ1biBlaXRoZXIgZXh0ZXJuYWwuYmF0IG9yCi1leHRlcm5hbC1hbWQ2NC5iYXQgaW4gdGhlIC4uXFRvb2xzXGJ1aWxkYm90IGRpcmVjdG9yeSBmcm9tIC4uXCwgaS5lLjoKKyAgICBVbmxpa2UgdGhlIG90aGVyIGV4dGVybmFsIGxpYnJhcmllcyBsaXN0ZWQgYWJvdmUsIFRrIG11c3QgYmUgYnVpbHQKKyAgICBzZXBhcmF0ZWx5IGJlZm9yZSB0aGUgX3RraW50ZXIgbW9kdWxlIGNhbiBiZSBidWlsdC4gVGhpcyBtZWFucyB0aGF0CisgICAgYSBwcmUtYnVpbHQgVGNsL1RrIGluc3RhbGxhdGlvbiBpcyBleHBlY3RlZCBpbiAuLlwuLlx0Y2x0ayAodGNsdGs2NAorICAgIGZvciA2NC1iaXQpIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5LiAgU2VlICJHZXR0aW5nIEV4dGVybmFsCisgICAgU291cmNlcyIgYmVsb3cgZm9yIHRoZSBlYXNpZXN0IG1ldGhvZCB0byBlbnN1cmUgVGNsL1RrIGlzIGJ1aWx0LgogCi0gICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rXFBDYnVpbGQ+Y2QgLi4KLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bms+VG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwuYmF0CiAKLVRoaXMgZXh0cmFjdHMgYWxsIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cyBmcm9tIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9leHRlcm5hbAotdmlhIFN1YnZlcnNpb24gKHNvIHlvdSdsbCBuZWVkIGFuIHN2bi5leGUgb24geW91ciBQQVRIKSBhbmQgcGxhY2VzIHRoZW0gaW4KLS4uXC4uIChyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSkuICBUaGUgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgc2NyaXB0cyB3aWxsCi1hbHNvIGJ1aWxkIGEgZGVidWcgYnVpbGQgb2YgVGNsL1RrOyB0aGVyZSBhcmVuJ3QgYW55IGVxdWl2YWxlbnQgYmF0Y2ggZmlsZXMKLWZvciBidWlsZGluZyByZWxlYXNlIHZlcnNpb25zIG9mIFRjbC9UayBseWluZyBhcm91bmQgaW4gdGhlIFRvb2xzXGJ1aWxkYm90Ci1kaXJlY3RvcnkuICBJZiB5b3UgbmVlZCB0byBidWlsZCBhIHJlbGVhc2UgdmVyc2lvbiBvZiBUY2wvVGsgaXQgaXNuJ3QgaGFyZAotdGhvdWdoLCB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgZmlsZSBhbmQgZmluZCB0aGUKLXR3byBubWFrZSBsaW5lcywgdGhlbiBjYWxsIGVhY2ggb25lIHdpdGhvdXQgdGhlICdERUJVRz0xJyBwYXJhbWV0ZXIsIGkuZS46CitHZXR0aW5nIEV4dGVybmFsIFNvdXJjZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCBjYXRlZ29yeSBvZiBzdWItcHJvamVjdHMgbGlzdGVkIGFib3ZlIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMKK1B5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCBhcyBzdWNoIGEgbGl0dGxlIG1vcmUgd29yayBpcyByZXF1aXJlZCBpbgorb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5CitjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIG11c3QgZW5zdXJlIHRoYXQgYWxsIGxpYnJhcmllcyBhcmUgcHJlc2VudAorYmVmb3JlIGJ1aWxkaW5nLCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdAorb3IgZXh0ZXJuYWwtYW1kNjQuYmF0IChkZXBlbmRpbmcgb24gcGxhdGZvcm0pIGluIHRoZSAuLlxUb29sc1xidWlsZGJvdAorZGlyZWN0b3J5IGZyb20gLi5cLCBpLmUuOgorCisgICAgQzpccHl0aG9uXGNweXRob25cUENidWlsZD5jZCAuLgorICAgIEM6XHB5dGhvblxjcHl0aG9uPlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAorCitUaGlzIGV4dHJhY3RzIGFsbCB0aGUgZXh0ZXJuYWwgc3ViLXByb2plY3RzIGZyb20KKyAgICBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwKK3ZpYSBTdWJ2ZXJzaW9uIChzbyB5b3UnbGwgbmVlZCBhbiBzdm4uZXhlIG9uIHlvdXIgUEFUSCkgYW5kIHBsYWNlcyB0aGVtCitpbiAuLlwuLiAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRvd25sb2FkIHNvdXJjZXMgZnJvbSBlYWNoIHByb2plY3QncyBob21lcGFnZSwKK3Rob3VnaCB5b3UgbWF5IGhhdmUgdG8gY2hhbmdlIHRoZSBuYW1lcyBvZiBzb21lIGZvbGRlcnMgaW4gb3JkZXIgdG8gbWFrZQordGhpbmdzIHdvcmsuICBGb3IgaW5zdGFuY2UsIGlmIHlvdSB3ZXJlIHRvIGRvd25sb2FkIGEgdmVyc2lvbiA1LjAuNyBvZgorWFogVXRpbHMsIHlvdSB3b3VsZCBuZWVkIHRvIGV4dHJhY3QgdGhlIGFyY2hpdmUgaW50byAuLlwuLlx4ei01LjAuNQorYW55d2F5LCBzaW5jZSB0aGF0IGlzIHdoZXJlIHRoZSBzb2x1dGlvbiBpcyBzZXQgdG8gbG9vayBmb3IgeHouICBUaGUKK3NhbWUgaXMgdHJ1ZSBmb3IgYWxsIG90aGVyIGV4dGVybmFsIHByb2plY3RzLgorCitUaGUgZXh0ZXJuYWwoLWFtZDY0KS5iYXQgc2NyaXB0cyB3aWxsIGFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZgorVGNsL1RrLCBidXQgdGhlcmUgYXJlbid0IGFueSBlcXVpdmFsZW50IGJhdGNoIGZpbGVzIGZvciBidWlsZGluZyByZWxlYXNlCit2ZXJzaW9ucyBvZiBUY2wvVGsgY3VycmVudGx5IGF2YWlsYWJsZS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZQordmVyc2lvbiBvZiBUY2wvVGssIGp1c3QgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGV4dGVybmFsKC1hbWQ2NCkuYmF0CitmaWxlIGFuZCBmaW5kIHRoZSB0d28gbm1ha2UgbGluZXMsIHRoZW4gY2FsbCBlYWNoIG9uZSB3aXRob3V0IHRoZQorJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKIAogVGhlIGV4dGVybmFsLWFtZDY0LmJhdCBmaWxlIGNvbnRhaW5zIHRoaXMgZm9yIHRjbDoKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCkBAIC0yMDIsODkgKzI2MSw1NCBAQAogU28gZm9yIGEgcmVsZWFzZSBidWlsZCwgeW91J2QgY2FsbCBpdCBhczoKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBjbGVhbiBhbGwgaW5zdGFsbAogCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotICAgIFhYWCBPdXIgaW5zdGFsbGVyIGNvcGllcyBhIGxvdCBvZiBzdHVmZiBvdXQgb2YgdGhlIFRjbC9UayBpbnN0YWxsCi0gICAgWFhYIGRpcmVjdG9yeS4gIElzIGFsbCBvZiB0aGF0IHJlYWxseSBuZWVkZWQgZm9yIFB5dGhvbiB1c2Ugb2YgVGNsL1RrPworTm90ZSB0aGF0IHRoZSBhYm92ZSBjb21tYW5kIGlzIGNhbGxlZCBmcm9tIHdpdGhpbiAuLlwuLlx0Y2wtOC42LjEuMFx3aW4KKyhyZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSk7IGRvbid0IGZvcmdldCB0byBidWlsZCBUayBhcyB3ZWxsIGFzIFRjbCEKIAotVGhpcyB3aWxsIGJlIGNsZWFuZWQgdXAgaW4gdGhlIGZ1dHVyZTsgaWRlYWxseSBUY2wvVGsgd2lsbCBiZSBicm91Z2h0IGludG8gb3VyCi1wY2J1aWxkLnNsbiBhcyBjdXN0b20gLnZjeHByb2ogZmlsZXMsIGp1c3QgYXMgd2UndmUgcmVjZW50bHkgZG9uZSB3aXRoIHRoZQotc3FsaXRlMy52Y3hwcm9qIGZpbGUsIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBuZWVkIGZvciBUY2wvVGsgdG8gYmUgYnVpbHQKLXNlcGFyYXRlbHkgdmlhIGEgYmF0Y2ggZmlsZS4KK1RoaXMgd2lsbCBiZSBjbGVhbmVkIHVwIGluIHRoZSBmdXR1cmU7IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTk2OAordHJhY2tzIGFkZGluZyBhIG5ldyB0Y2x0ay52Y3hwcm9qIGZpbGUgdGhhdCB3aWxsIGJ1aWxkIFRjbC9UayBhbmQgVGl4Cit0aGUgc2FtZSB3YXkgdGhlIG90aGVyIGV4dGVybmFsIHByb2plY3RzIGxpc3RlZCBhYm92ZSBhcmUgYnVpbHQuCiAKLVhYWCB0cmVudC5uZWxzb24gMDItQXByLTA4OgotICAgIEhhdmluZyB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMgaW4gLi5cLi4gcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkgaXMgYQotICAgIGJpdCBvZiBhIG51aXNhbmNlIHdoZW4geW91J3JlIHdvcmtpbmcgb24gcHkzayBhbmQgdHJ1bmsgaW4gcGFyYWxsZWwgYW5kCi0gICAgeW91ciBkaXJlY3RvcnkgbGF5b3V0IG1pbWljcyB0aGF0IG9mIFB5dGhvbidzIHN1YnZlcnNpb24gbGF5b3V0LCBlLmcuOgotCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuawotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cYnJhbmNoZXNccHkzawotICAgICAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cYnJhbmNoZXNccmVsZWFzZTI1LW1haW50Ci0KLSAgICBJJ2QgbGlrZSB0byBjaGFuZ2UgdGhpbmdzIHNvIHRoYXQgZXh0ZXJuYWwgc3VicHJvamVjdHMgYXJlIGZldGNoZWQgZnJvbQotICAgIC4uXGV4dGVybmFsIGluc3RlYWQgb2YgLi5cLi4sIHRoZW4gcHJvdmlkZSBzb21lIGhlbHBlciBzY3JpcHRzIG9yIGJhdGNoCi0gICAgZmlsZXMgdGhhdCB3b3VsZCBzZXQgdXAgYSBuZXcgLi5cZXh0ZXJuYWwgZGlyZWN0b3J5IHdpdGggc3ZuIGNoZWNrb3V0cyBvZgotICAgIHRoZSByZWxldmFudCBicmFuY2hlcyBpbiBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvLCBvcgotICAgIGFsdGVybmF0aXZlbHksIHVzZSBqdW5jdGlvbnMgdG8gbGluayAuLlxleHRlcm5hbCB3aXRoIGEgcHJlLWV4aXN0aW5nCi0gICAgZXh0ZXJuYWxzIGRpcmVjdG9yeSBiZWluZyB1c2VkIGJ5IGFub3RoZXIgYnJhbmNoLiAgaS5lLiBpZiBJJ20gdXN1YWxseQotICAgIHdvcmtpbmcgb24gdHJ1bmsgKGFuZCBoYXZlIHByZXZpb3VzbHkgY3JlYXRlZCB0cnVua1xleHRlcm5hbCB2aWEgdGhlCi0gICAgcHJvdmlkZWQgYmF0Y2ggZmlsZSksIGFuZCB3YW50IHRvIGRvIHNvbWUgd29yayBvbiBweTNrLCBJJ2Qgc2V0IHVwIGEKLSAgICBqdW5jdGlvbiBhcyBmb2xsb3dzICh1c2luZyB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBhYm92ZSBhcyBhbiBleGFtcGxlKToKLQotICAgICAgICBDOlwuLlxweXRob25cdHJ1bmtcZXh0ZXJuYWwgPC0gYWxyZWFkeSBleGlzdHMgYW5kIGhhcyBidWlsdCB2ZXJzaW9ucwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzCi0KLSAgICAgICAgQzpcLi5ccHl0aG9uXGJyYW5jaGVzXHB5M2s+bGlua2QuZXhlIGV4dGVybmFsIC4uXC4uXHRydW5rXGV4dGVybmFsCi0gICAgICAgIExpbmsgY3JlYXRlZCBhdDogZXh0ZXJuYWwKLQotICAgIE9ubHkgYSBzbGlnaHQgdHdlYWsgd291bGQgYmUgbmVlZGVkIHRvIHRoZSBidWlsZGJvdHMgc3VjaCB0aGF0IGJvdHMKLSAgICBidWlsZGluZyB0cnVuayBhbmQgcHkzayBjb3VsZCBtYWtlIHVzZSBvZiB0aGUgc2FtZSBmYWNpbGl0eS4gICgyLjUueAotICAgIGJ1aWxkcyBuZWVkIHRvIGJlIGtlcHQgc2VwYXJhdGUgYXMgdGhleSdyZSB1c2luZyBWaXN1YWwgU3R1ZGlvIDcuMS4pCi0vWFhYIHRyZW50Lm5lbHNvbiAwMi1BcHItMDgKLQotQnVpbGRpbmcgZm9yIEl0YW5pdW0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLU9mZmljaWFsIHN1cHBvcnQgZm9yIEl0YW5pdW0gYnVpbGRzIGhhdmUgYmVlbiBkcm9wcGVkIGZyb20gdGhlIGJ1aWxkLiBQbGVhc2UKLWNvbnRhY3QgdXMgYW5kIHByb3ZpZGUgcGF0Y2hlcyBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gSXRhbml1bSBidWlsZHMuCiAKIEJ1aWxkaW5nIGZvciBBTUQ2NAogLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBidWlsZCBwcm9jZXNzIGZvciBBTUQ2NCAvIHg2NCBpcyB2ZXJ5IHNpbWlsYXIgdG8gc3RhbmRhcmQgYnVpbGRzLiBZb3UganVzdAotaGF2ZSB0byBzZXQgeDY0IGFzIHBsYXRmb3JtLiBJbiBhZGRpdGlvbiwgdGhlIEhPU1RfUFlUSE9OIGVudmlyb25tZW50IHZhcmlhYmxlCi1tdXN0IHBvaW50IHRvIGEgUHl0aG9uIGludGVycHJldGVyIChhdCBsZWFzdCAyLjQpLCB0byBzdXBwb3J0IGNyb3NzLWNvbXBpbGF0aW9uLgorVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIEFNRDY0IC8geDY0IGlzIHZlcnkgc2ltaWxhciB0byBzdGFuZGFyZCBidWlsZHMsCit5b3UganVzdCBoYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04KK2Vudmlyb25tZW50IHZhcmlhYmxlIG11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksCit0byBzdXBwb3J0IGNyb3NzLWNvbXBpbGF0aW9uIGZyb20gV2luMzIuICBOb3RlIHRoYXQgVmlzdWFsIFN0dWRpbworcmVxdWlyZXMgZWl0aGVyIFN0YW5kYXJkIEVkaXRpb24gb3IgYmV0dGVyLCBvciBFeHByZXNzIEVkaXRpb24gd2l0aCB0aGUKK1dpbmRvd3MgU0RLIDY0LWJpdCBjb21waWxlcnMgdG8gYmUgYXZhaWxhYmxlIGluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdAorYmluYXJpZXMuCiAKLUJ1aWxkaW5nIFB5dGhvbiBVc2luZyB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NaWNyb3NvZnQgaGFzIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbiBubyBsb25nZXIKLWJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBJbnN0ZWFkIHlvdSBjYW4gdXNlIHRoZSBmcmVlIFZTIEMrKyBFeHByZXNzCi1FZGl0aW9uLgogCiBQcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgc29sdXRpb24gaGFzIHR3byBjb25maWd1cmF0aW9ucyBmb3IgUEdPLiBUaGUgUEdJbnN0cnVtZW50Ci1jb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbGQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlCi1saW5rZWQgYWdhaW5zdCBhIHByb2ZpbGluZyBsaWJyYXJ5IGFuZCBjb250YWluIGV4dHJhIGRlYnVnCi1pbmZvcm1hdGlvbi4gVGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gdGFrZXMgdGhlIHByb2ZpbGluZyBkYXRhIGFuZAotZ2VuZXJhdGVzIG9wdGltaXplZCBiaW5hcmllcy4KK2NvbmZpZ3VyYXRpb24gbXVzdCBiZSBidWlsdCBmaXJzdC4gVGhlIFBHSW5zdHJ1bWVudCBiaW5hcmllcyBhcmUgbGlua2VkCithZ2FpbnN0IGEgcHJvZmlsaW5nIGxpYnJhcnkgYW5kIGNvbnRhaW4gZXh0cmEgZGVidWcgaW5mb3JtYXRpb24uIFRoZQorUEdVcGRhdGUgY29uZmlndXJhdGlvbiB0YWtlcyB0aGUgcHJvZmlsaW5nIGRhdGEgYW5kIGdlbmVyYXRlcyBvcHRpbWl6ZWQKK2JpbmFyaWVzLgogCi1UaGUgYnVpbGRfcGdvLmJhdCBzY3JpcHQgYXV0b21hdGVzIHRoZSBjcmVhdGlvbiBvZiBvcHRpbWl6ZWQgYmluYXJpZXMuIEl0Ci1jcmVhdGVzIHRoZSBQR0kgZmlsZXMsIHJ1bnMgdGhlIHVuaXQgdGVzdCBzdWl0ZSBvciBQeUJlbmNoIHdpdGggdGhlIFBHSQotcHl0aG9uIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4KK1RoZSBidWlsZF9wZ28uYmF0IHNjcmlwdCBhdXRvbWF0ZXMgdGhlIGNyZWF0aW9uIG9mIG9wdGltaXplZCBiaW5hcmllcy4KK0l0IGNyZWF0ZXMgdGhlIFBHSSBmaWxlcywgcnVucyB0aGUgdW5pdCB0ZXN0IHN1aXRlIG9yIFB5QmVuY2ggd2l0aCB0aGUKK1BHSSBweXRob24sIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4KIAotaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweAorU2VlCisgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweAorZm9yIG1vcmUgb24gdGhpcyB0b3BpYy4KKwogCiBTdGF0aWMgbGlicmFyeQogLS0tLS0tLS0tLS0tLS0KIAotVGhlIHNvbHV0aW9uIGhhcyBubyBjb25maWd1cmF0aW9uIGZvciBzdGF0aWMgbGlicmFyaWVzLiBIb3dldmVyIGl0IGlzIGVhc3kKLWl0IGJ1aWxkIGEgc3RhdGljIGxpYnJhcnkgaW5zdGVhZCBvZiBhIERMTC4gWW91IHNpbXBseSBoYXZlIHRvIHNldCB0aGUKLSJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUgcHJlcHJvY2Vzc29yCi1tYWNybyAiUHlfRU5BQkxFX1NIQVJFRCIgdG8gIlB5X05PX0VOQUJMRV9TSEFSRUQiLiBZb3UgbWF5IGFsc28gaGF2ZSB0bwotY2hhbmdlIHRoZSAiUnVudGltZSBMaWJyYXJ5IiBmcm9tICJNdWx0aS10aHJlYWRlZCBETEwgKC9NRCkiIHRvCi0iTXVsdGktdGhyZWFkZWQgKC9NVCkiLgorVGhlIHNvbHV0aW9uIGhhcyBubyBjb25maWd1cmF0aW9uIGZvciBzdGF0aWMgbGlicmFyaWVzLiBIb3dldmVyIGl0IGlzCitlYXN5IHRvIGJ1aWxkIGEgc3RhdGljIGxpYnJhcnkgaW5zdGVhZCBvZiBhIERMTC4gWW91IHNpbXBseSBoYXZlIHRvIHNldAordGhlICJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUKK3ByZXByb2Nlc3NvciBtYWNybyAiUHlfRU5BQkxFX1NIQVJFRCIgdG8gIlB5X05PX0VOQUJMRV9TSEFSRUQiLiBZb3UgbWF5CithbHNvIGhhdmUgdG8gY2hhbmdlIHRoZSAiUnVudGltZSBMaWJyYXJ5IiBmcm9tICJNdWx0aS10aHJlYWRlZCBETEwKKygvTUQpIiB0byAiTXVsdGktdGhyZWFkZWQgKC9NVCkiLgorCiAKIFZpc3VhbCBTdHVkaW8gcHJvcGVydGllcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yOTMsNiArMzE3LDcgQEAKICgqLnByb3BzKS4gVGhlIHByb3BlcnRpZXMgY2FuIGJlIHZpZXdlZCBhbmQgYWx0ZXJlZCBpbiB0aGUgUHJvcGVydHkKIE1hbmFnZXIgKFZpZXcgLT4gT3RoZXIgV2luZG93cyAtPiBQcm9wZXJ0eSBNYW5hZ2VyKS4KIAorVGhlIHByb3BlcnR5IGZpbGVzIHVzZWQgYXJlICgrLS0gPSAiYWxzbyBpbXBvcnRzIik6CiAgKiBkZWJ1ZyAoZGVidWcgbWFjcm86IF9ERUJVRykKICAqIHBnaW5zdHJ1bWVudCAoUEdPKQogICogcGd1cGRhdGUgKFBHTykKQEAgLTMwNSwxNSArMzMwLDE4IEBACiAgICAgKy0tIHB5cHJvamVjdAogICogcHlwcm9qZWN0IChiYXNlIHNldHRpbmdzIGZvciBhbGwgcHJvamVjdHMsIHVzZXIgbWFjcm9zIGxpa2UgUHlEbGxOYW1lKQogICogcmVsZWFzZSAocmVsZWFzZSBtYWNybzogTkRFQlVHKQorICogc3FsaXRlMyAodXNlZCBvbmx5IGJ5IHNxbGl0ZTMudmN4cHJvaikKICAqIHg2NCAoQU1ENjQgLyB4NjQgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MpCiAKLVRoZSBweXByb2plY3QgcHJvcGVydHlmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kIF9NX1g2NAotYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QgYWx3YXlzIGtub3cKLWFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZSBpbmZvcm1hdGlvbi4KK1RoZSBweXByb2plY3QgcHJvcGVydHkgZmlsZSBkZWZpbmVzIF9XSU4zMiBhbmQgeDY0IGRlZmluZXMgX1dJTjY0IGFuZAorX01fWDY0IGFsdGhvdWdoIHRoZSBtYWNyb3MgYXJlIHNldCBieSB0aGUgY29tcGlsZXIsIHRvby4gVGhlIEdVSSBkb2Vzbid0CithbHdheXMga25vdyBhYm91dCB0aGUgbWFjcm9zIGFuZCBjb25mdXNlIHRoZSB1c2VyIHdpdGggZmFsc2UKK2luZm9ybWF0aW9uLgogCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcworCitZb3VyIE93biBFeHRlbnNpb24gRExMcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMLCB0aGVyZSdzIGFuIGV4YW1wbGUKLXdpdGggZWFzeS10by1mb2xsb3cgaW5zdHJ1Y3Rpb25zIGluIC4uL1BDL2V4YW1wbGUvOyByZWFkIHRoZSBmaWxlCi1yZWFkbWUudHh0IHRoZXJlIGZpcnN0LgorSWYgeW91IHdhbnQgdG8gY3JlYXRlIHlvdXIgb3duIGV4dGVuc2lvbiBtb2R1bGUgRExMICgucHlkKSwgdGhlcmUncyBhbgorZXhhbXBsZSB3aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLlxQQ1xleGFtcGxlXDsgcmVhZCB0aGUKK2ZpbGUgcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BhcnNlci9QeXRob24uYXNkbCBiL1BhcnNlci9QeXRob24uYXNkbAppbmRleCBjMjRkODQwLi5kZWJkODllIDEwMDY0NAotLS0gYS9QYXJzZXIvUHl0aG9uLmFzZGwKKysrIGIvUGFyc2VyL1B5dGhvbi5hc2RsCkBAIC0xLDQgKzEsNCBAQAotLS0gQVNETCdzIGZpdmUgYnVpbHRpbiB0eXBlcyBhcmUgaWRlbnRpZmllciwgaW50LCBzdHJpbmcsIGJ5dGVzLCBvYmplY3QKKy0tIEFTREwncyBzaXggYnVpbHRpbiB0eXBlcyBhcmUgaWRlbnRpZmllciwgaW50LCBzdHJpbmcsIGJ5dGVzLCBvYmplY3QsIHNpbmdsZXRvbgogCiBtb2R1bGUgUHl0aG9uCiB7CkBAIC02OSw4ICs2OSw4IEBACiAgICAgICAgICB8IE51bShvYmplY3QgbikgLS0gYSBudW1iZXIgYXMgYSBQeU9iamVjdC4KICAgICAgICAgIHwgU3RyKHN0cmluZyBzKSAtLSBuZWVkIHRvIHNwZWNpZnkgcmF3LCB1bmljb2RlLCBldGM/CiAgICAgICAgICB8IEJ5dGVzKGJ5dGVzIHMpCisgICAgICAgICB8IE5hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUpCiAgICAgICAgICB8IEVsbGlwc2lzCi0gICAgICAgICAtLSBvdGhlciBsaXRlcmFscz8gYm9vbHM/CiAKICAgICAgICAgIC0tIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbiBjYW4gYXBwZWFyIGluIGFzc2lnbm1lbnQgY29udGV4dAogICAgICAgICAgfCBBdHRyaWJ1dGUoZXhwciB2YWx1ZSwgaWRlbnRpZmllciBhdHRyLCBleHByX2NvbnRleHQgY3R4KQpAQCAtMTAzLDExICsxMDMsMTEgQEAKICAgICBleGNlcHRoYW5kbGVyID0gRXhjZXB0SGFuZGxlcihleHByPyB0eXBlLCBpZGVudGlmaWVyPyBuYW1lLCBzdG10KiBib2R5KQogICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzIChpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIAotICAgIGFyZ3VtZW50cyA9IChhcmcqIGFyZ3MsIGlkZW50aWZpZXI/IHZhcmFyZywgZXhwcj8gdmFyYXJnYW5ub3RhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgIGFyZyoga3dvbmx5YXJncywgaWRlbnRpZmllcj8ga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICBleHByPyBrd2FyZ2Fubm90YXRpb24sIGV4cHIqIGRlZmF1bHRzLAotICAgICAgICAgICAgICAgICAgICAgZXhwcioga3dfZGVmYXVsdHMpCisgICAgYXJndW1lbnRzID0gKGFyZyogYXJncywgYXJnPyB2YXJhcmcsIGFyZyoga3dvbmx5YXJncywgZXhwcioga3dfZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgIGFyZz8ga3dhcmcsIGV4cHIqIGRlZmF1bHRzKQorCiAgICAgYXJnID0gKGlkZW50aWZpZXIgYXJnLCBleHByPyBhbm5vdGF0aW9uKQorICAgICAgICAgICBhdHRyaWJ1dGVzIChpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIAogICAgIC0tIGtleXdvcmQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIGNhbGwKICAgICBrZXl3b3JkID0gKGlkZW50aWZpZXIgYXJnLCBleHByIHZhbHVlKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGwucHkgYi9QYXJzZXIvYXNkbC5weQppbmRleCAwOGFhMDViLi5mYzFiMTZjIDEwMDY0NAotLS0gYS9QYXJzZXIvYXNkbC5weQorKysgYi9QYXJzZXIvYXNkbC5weQpAQCAtMTYsOCArMTYsOSBAQAogCiBpbXBvcnQgc3BhcmsKIAotZGVmIG91dHB1dChzdHJpbmcpOgotICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyaW5nICsgIlxuIikKK2RlZiBvdXRwdXQoKnN0cmluZ3MpOgorICAgIGZvciBzIGluIHN0cmluZ3M6CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoc3RyKHMpICsgIlxuIikKIAogCiBjbGFzcyBUb2tlbihvYmplY3QpOgpAQCAtMTU4LDExICsxNTksMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQogICAgICAgICByZXR1cm4gU3VtKHN1bSwgYXR0cmlidXRlcykKIAotICAgIGRlZiBwX3Byb2R1Y3Qoc2VsZiwgaW5mbyk6CisgICAgZGVmIHBfcHJvZHVjdF8wKHNlbGYsIGluZm8pOgogICAgICAgICAiIHByb2R1Y3QgOjo9ICggZmllbGRzICkgIgogICAgICAgICBfMCwgZmllbGRzLCBfMSA9IGluZm8KICAgICAgICAgcmV0dXJuIFByb2R1Y3QoZmllbGRzKQogCisgICAgZGVmIHBfcHJvZHVjdF8xKHNlbGYsIGluZm8pOgorICAgICAgICAiIHByb2R1Y3QgOjo9ICggZmllbGRzICkgSWQgKCBmaWVsZHMgKSAiCisgICAgICAgIF8wLCBmaWVsZHMsIF8xLCBpZCwgXzIsIGF0dHJpYnV0ZXMsIF8zID0gaW5mbworICAgICAgICBpZiBpZC52YWx1ZSAhPSAiYXR0cmlidXRlcyI6CisgICAgICAgICAgICByYWlzZSBBU0RMU3ludGF4RXJyb3IoaWQubGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXhwZWN0ZWQgYXR0cmlidXRlcywgZm91bmQgJXMiICUgaWQpCisgICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcywgYXR0cmlidXRlcykKKwogICAgIGRlZiBwX3N1bV8wKHNlbGYsIGNvbnN0cnVjdG9yKToKICAgICAgICAgIiBzdW0gOjo9IGNvbnN0cnVjdG9yICIKICAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RvclswXV0KQEAgLTIyMiw3ICsyMzEsNyBAQAogICAgICAgICAiIGZpZWxkIDo6PSBJZCA/ICIKICAgICAgICAgcmV0dXJuIEZpZWxkKHR5cGVbMF0sIG9wdD1UcnVlKQogCi1idWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IikKK2J1aWx0aW5fdHlwZXMgPSAoImlkZW50aWZpZXIiLCAic3RyaW5nIiwgImJ5dGVzIiwgImludCIsICJvYmplY3QiLCAic2luZ2xldG9uIikKIAogIyBiZWxvdyBpcyBhIGNvbGxlY3Rpb24gb2YgY2xhc3NlcyB0byBjYXB0dXJlIHRoZSBBU1Qgb2YgYW4gQVNUIDotKQogIyBub3Qgc3VyZSBpZiBhbnkgb2YgdGhlIG1ldGhvZHMgYXJlIHVzZWZ1bCB5ZXQsIGJ1dCBJJ20gYWRkaW5nIHRoZW0KQEAgLTI4OSwxMSArMjk4LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gIlN1bSglcywgJXMpIiAlIChzZWxmLnR5cGVzLCBzZWxmLmF0dHJpYnV0ZXMpCiAKIGNsYXNzIFByb2R1Y3QoQVNUKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmllbGRzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmllbGRzLCBhdHRyaWJ1dGVzPU5vbmUpOgogICAgICAgICBzZWxmLmZpZWxkcyA9IGZpZWxkcworICAgICAgICBzZWxmLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzIG9yIFtdCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiUHJvZHVjdCglcykiICUgc2VsZi5maWVsZHMKKyAgICAgICAgaWYgc2VsZi5hdHRyaWJ1dGVzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMsICVzKSIgJSAoc2VsZi5maWVsZHMsIHNlbGYuYXR0cmlidXRlcykKIAogY2xhc3MgVmlzaXRvckJhc2Uob2JqZWN0KToKIApAQCAtMzg1LDcgKzM5OCwxMSBAQAogICAgIHNjYW5uZXIgPSBBU0RMU2Nhbm5lcigpCiAgICAgcGFyc2VyID0gQVNETFBhcnNlcigpCiAKLSAgICBidWYgPSBvcGVuKGZpbGUpLnJlYWQoKQorICAgIGYgPSBvcGVuKGZpbGUpCisgICAgdHJ5OgorICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgIGZpbmFsbHk6CisgICAgICAgIGYuY2xvc2UoKQogICAgIHRva2VucyA9IHNjYW5uZXIudG9rZW5pemUoYnVmKQogICAgIHRyeToKICAgICAgICAgcmV0dXJuIHBhcnNlci5wYXJzZSh0b2tlbnMpCkBAIC00MTYsNCArNDMzLDQgQEAKICAgICAgICAgICAgIG91dHB1dCgiQ2hlY2sgZmFpbGVkIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvciBkZm4gaW4gbW9kLmRmbnM6Ci0gICAgICAgICAgICAgICAgb3V0cHV0KGRmbi50eXBlKQorICAgICAgICAgICAgICAgIG91dHB1dChkZm4ubmFtZSwgZGZuLnZhbHVlKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGxfYy5weSBiL1BhcnNlci9hc2RsX2MucHkKaW5kZXggMGI2Yzg4Yy4uODBlNDMyYSAxMDA3NTUKLS0tIGEvUGFyc2VyL2FzZGxfYy5weQorKysgYi9QYXJzZXIvYXNkbF9jLnB5CkBAIC0yMDksNiArMjA5LDExIEBACiAgICAgICAgIHNlbGYuZW1pdCgic3RydWN0IF8lKG5hbWUpcyB7IiAlIGxvY2FscygpLCBkZXB0aCkKICAgICAgICAgZm9yIGYgaW4gcHJvZHVjdC5maWVsZHM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0KGYsIGRlcHRoICsgMSkKKyAgICAgICAgZm9yIGZpZWxkIGluIHByb2R1Y3QuYXR0cmlidXRlczoKKyAgICAgICAgICAgICMgcnVkaW1lbnRhcnkgYXR0cmlidXRlIGhhbmRsaW5nCisgICAgICAgICAgICB0eXBlID0gc3RyKGZpZWxkLnR5cGUpCisgICAgICAgICAgICBhc3NlcnQgdHlwZSBpbiBhc2RsLmJ1aWx0aW5fdHlwZXMsIHR5cGUKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgJXM7IiAlICh0eXBlLCBmaWVsZC5uYW1lKSwgZGVwdGggKyAxKTsKICAgICAgICAgc2VsZi5lbWl0KCJ9OyIsIGRlcHRoKQogICAgICAgICBzZWxmLmVtaXQoIiIsIGRlcHRoKQogCkBAIC00OTMsNyArNDk4LDExIEBACiAKICAgICBkZWYgdmlzaXRGaWVsZChzZWxmLCBmaWVsZCwgbmFtZSwgc3VtPU5vbmUsIHByb2Q9Tm9uZSwgZGVwdGg9MCk6CiAgICAgICAgIGN0eXBlID0gZ2V0X2NfdHlwZShmaWVsZC50eXBlKQotICAgICAgICBzZWxmLmVtaXQoImlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfJXMpKSB7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKQorICAgICAgICBpZiBmaWVsZC5vcHQ6CisgICAgICAgICAgICBjaGVjayA9ICJleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF8lcykiICUgKGZpZWxkLm5hbWUsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2sgPSAiX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkXyVzKSIgJSAoZmllbGQubmFtZSwpCisgICAgICAgIHNlbGYuZW1pdCgiaWYgKCVzKSB7IiAlIChjaGVjaywpLCBkZXB0aCwgcmVmbG93PUZhbHNlKQogICAgICAgICBzZWxmLmVtaXQoImludCByZXM7IiwgZGVwdGgrMSkKICAgICAgICAgaWYgZmllbGQuc2VxOgogICAgICAgICAgICAgc2VsZi5lbWl0KCJQeV9zc2l6ZV90IGxlbjsiLCBkZXB0aCsxKQpAQCAtNTEwLDkgKzUxOSw5IEBACiAgICAgICAgICAgICBzZWxmLmVtaXQoIn0iLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCJsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsiLCBkZXB0aCsxKQogICAgICAgICAgICAgaWYgc2VsZi5pc1NpbXBsZVR5cGUoZmllbGQpOgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBhc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBfUHlfYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCVzID09IE5VTEwpIGdvdG8gZmFpbGVkOyIgJSBmaWVsZC5uYW1lLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCJmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsiLCBkZXB0aCsxKQogICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyB2YWx1ZTsiICUgY3R5cGUsIGRlcHRoKzIpCkBAIC01NTgsNiArNTY3LDEzIEBACiAgICAgZGVmIHZpc2l0UHJvZHVjdChzZWxmLCBwcm9kLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgUHlUeXBlT2JqZWN0IColc190eXBlOyIgJSBuYW1lLCAwKQogICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial8lcyh2b2lkKik7IiAlIG5hbWUsIDApCisgICAgICAgIGlmIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgIGZvciBhIGluIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXRfaWRlbnRpZmllcihhLm5hbWUpCisgICAgICAgICAgICBzZWxmLmVtaXQoInN0YXRpYyBjaGFyIColc19hdHRyaWJ1dGVzW10gPSB7IiAlIG5hbWUsIDApCisgICAgICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCciJXMiLCcgJSBhLm5hbWUsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoIn07IiwgMCkKICAgICAgICAgaWYgcHJvZC5maWVsZHM6CiAgICAgICAgICAgICBmb3IgZiBpbiBwcm9kLmZpZWxkczoKICAgICAgICAgICAgICAgICBzZWxmLmVtaXRfaWRlbnRpZmllcihmLm5hbWUpCkBAIC04MTksNiArODM1LDcgQEAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0KilvKTsKICAgICByZXR1cm4gKFB5T2JqZWN0KilvOwogfQorI2RlZmluZSBhc3Qyb2JqX3NpbmdsZXRvbiBhc3Qyb2JqX29iamVjdAogI2RlZmluZSBhc3Qyb2JqX2lkZW50aWZpZXIgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9zdHJpbmcgYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9ieXRlcyBhc3Qyb2JqX29iamVjdApAQCAtODMwLDYgKzg0NywxNyBAQAogCiAvKiBDb252ZXJzaW9uIFB5dGhvbiAtPiBBU1QgKi8KIAorc3RhdGljIGludCBvYmoyYXN0X3NpbmdsZXRvbihQeU9iamVjdCAqb2JqLCBQeU9iamVjdCoqIG91dCwgUHlBcmVuYSogYXJlbmEpCit7CisgICAgaWYgKG9iaiAhPSBQeV9Ob25lICYmIG9iaiAhPSBQeV9UcnVlICYmIG9iaiAhPSBQeV9GYWxzZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJBU1Qgc2luZ2xldG9uIG11c3QgYmUgVHJ1ZSwgRmFsc2UsIG9yIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICpvdXQgPSBvYmo7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2JqMmFzdF9vYmplY3QoUHlPYmplY3QqIG9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQogewogICAgIGlmIChvYmogPT0gUHlfTm9uZSkKQEAgLTkwNCw2ICs5MzIsMTkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBleGlzdHNfbm90X25vbmUoUHlPYmplY3QgKm9iaiwgX1B5X0lkZW50aWZpZXIgKmlkKQoreworICAgIGludCBpc25vbmU7CisgICAgUHlPYmplY3QgKmF0dHIgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgaWQpOworICAgIGlmICghYXR0cikgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaXNub25lID0gYXR0ciA9PSBQeV9Ob25lOworICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICByZXR1cm4gIWlzbm9uZTsKK30KKwogIiIiLCAwLCByZWZsb3c9RmFsc2UpCiAKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgaW50IGluaXRfdHlwZXModm9pZCkiLDApCkBAIC05MjUsNiArOTY2LDExIEBACiAgICAgICAgIHNlbGYuZW1pdCgnJXNfdHlwZSA9IG1ha2VfdHlwZSgiJXMiLCAmQVNUX3R5cGUsICVzLCAlZCk7JyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgbmFtZSwgZmllbGRzLCBsZW4ocHJvZC5maWVsZHMpKSwgMSkKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoISVzX3R5cGUpIHJldHVybiAwOyIgJSBuYW1lLCAxKQorICAgICAgICBpZiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghYWRkX2F0dHJpYnV0ZXMoJXNfdHlwZSwgJXNfYXR0cmlidXRlcywgJWQpKSByZXR1cm4gMDsiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSwgbmFtZSwgbGVuKHByb2QuYXR0cmlidXRlcykpLCAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIWFkZF9hdHRyaWJ1dGVzKCVzX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsiICUgbmFtZSwgMSkKIAogICAgIGRlZiB2aXNpdFN1bShzZWxmLCBzdW0sIG5hbWUpOgogICAgICAgICBzZWxmLmVtaXQoJyVzX3R5cGUgPSBtYWtlX3R5cGUoIiVzIiwgJkFTVF90eXBlLCBOVUxMLCAwKTsnICUKQEAgLTk2OCw3ICsxMDE0LDcgQEAKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIW0pIHJldHVybiBOVUxMOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiZCA9IFB5TW9kdWxlX0dldERpY3QobSk7IiwgMSkKICAgICAgICAgc2VsZi5lbWl0KCdpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkFTVCIsIChQeU9iamVjdCopJkFTVF90eXBlKSA8IDApIHJldHVybiBOVUxMOycsIDEpCi0gICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUNGX09OTFlfQVNUIiwgUHlDRl9PTkxZX0FTVCkgPCAwKScsIDEpCisgICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5Q0ZfT05MWV9BU1QpIDwgMCknLCAxKQogICAgICAgICBzZWxmLmVtaXQoInJldHVybiBOVUxMOyIsIDIpCiAgICAgICAgIGZvciBkZm4gaW4gbW9kLmRmbnM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0KGRmbikKQEAgLTEwODAsNiArMTEyNiwxMiBAQAogICAgICAgICBzZWxmLmVtaXQoImlmICghcmVzdWx0KSByZXR1cm4gTlVMTDsiLCAxKQogICAgICAgICBmb3IgZmllbGQgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICBzZWxmLnZpc2l0RmllbGQoZmllbGQsIG5hbWUsIDEsIFRydWUpCisgICAgICAgIGZvciBhIGluIHByb2QuYXR0cmlidXRlczoKKyAgICAgICAgICAgIHNlbGYuZW1pdCgidmFsdWUgPSBhc3Qyb2JqXyVzKG8tPiVzKTsiICUgKGEudHlwZSwgYS5uYW1lKSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7IiwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF8lcywgdmFsdWUpIDwgMCknICUgYS5uYW1lLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdnb3RvIGZhaWxlZDsnLCAyKQorICAgICAgICAgICAgc2VsZi5lbWl0KCdQeV9ERUNSRUYodmFsdWUpOycsIDEpCiAgICAgICAgIHNlbGYuZnVuY19lbmQoKQogCiAgICAgZGVmIHZpc2l0Q29uc3RydWN0b3Ioc2VsZiwgY29ucywgZW51bSwgbmFtZSk6CkBAIC0xMTQyLDcgKzExOTQsOCBAQAogICAgIENPREUgPSAiIiIKIFB5T2JqZWN0KiBQeUFTVF9tb2Qyb2JqKG1vZF90eSB0KQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIGFzdDJvYmpfbW9kKHQpOwogfQogCkBAIC0xMTU2LDcgKzEyMDksOCBAQAogICAgIGludCBpc2luc3RhbmNlOwogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTExNzQsNyArMTIyOCw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogIiIiCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hci5jIGIvUGFyc2VyL2dyYW1tYXIuYwppbmRleCBmMmEyNWNhLi5iNTk4Mjk0IDEwMDY0NAotLS0gYS9QYXJzZXIvZ3JhbW1hci5jCisrKyBiL1BhcnNlci9ncmFtbWFyLmMKQEAgLTI5LDcgKzI5LDcgQEAKIH0KIAogZGZhICoKLWFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSkKK2FkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBkZmEgKmQ7CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBzLT5zX3VwcGVyID0gMDsKICAgICBzLT5zX2FjY2VsID0gTlVMTDsKICAgICBzLT5zX2FjY2VwdCA9IDA7Ci0gICAgcmV0dXJuIHMgLSBkLT5kX3N0YXRlOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKHMgLSBkLT5kX3N0YXRlLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogdm9pZApAQCAtODUsNyArODUsNyBAQAogfQogCiBpbnQKLWFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpCithZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogICAgIGxhYmVsICpsYjsKQEAgLTEwNSwxMyArMTA1LDEzIEBACiAgICAgaWYgKFB5X0RlYnVnRmxhZykKICAgICAgICAgcHJpbnRmKCJMYWJlbCBAICU4cCwgJWQ6ICVzXG4iLCBsbCwgbGwtPmxsX25sYWJlbHMsCiAgICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByKGxiKSk7Ci0gICAgcmV0dXJuIGxiIC0gbGwtPmxsX2xhYmVsOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxiIC0gbGwtPmxsX2xhYmVsLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogLyogU2FtZSwgYnV0IHJhdGhlciBkaWVzIHRoYW4gYWRkcyAqLwogCiBpbnQKLWZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgaW50IGk7CiAKZGlmZiAtLWdpdCBhL1BhcnNlci9ncmFtbWFyMS5jIGIvUGFyc2VyL2dyYW1tYXIxLmMKaW5kZXggNDQwYmE0NC4uMzBhNmYwNyAxMDA2NDQKLS0tIGEvUGFyc2VyL2dyYW1tYXIxLmMKKysrIGIvUGFyc2VyL2dyYW1tYXIxLmMKQEAgLTksOSArOSw5IEBACiAvKiBSZXR1cm4gdGhlIERGQSBmb3IgdGhlIGdpdmVuIHR5cGUgKi8KIAogZGZhICoKLVB5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIHJlZ2lzdGVyIGludCB0eXBlKQorUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgaW50IHR5cGUpCiB7Ci0gICAgcmVnaXN0ZXIgZGZhICpkOworICAgIGRmYSAqZDsKICNpZiAxCiAgICAgLyogTWFzc2l2ZSBzcGVlZC11cCAqLwogICAgIGQgPSAmZy0+Z19kZmFbdHlwZSAtIE5UX09GRlNFVF07CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgcmV0dXJuIGQ7CiAjZWxzZQogICAgIC8qIE9sZCwgc2xvdyB2ZXJzaW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSBnLT5nX25kZmFzLCBkID0gZy0+Z19kZmE7IC0taSA+PSAwOyBkKyspIHsKICAgICAgICAgaWYgKGQtPmRfdHlwZSA9PSB0eXBlKQpAQCAtMzAsNyArMzAsNyBAQAogI2VuZGlmCiB9CiAKLWNoYXIgKgorY29uc3QgY2hhciAqCiBQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYikKIHsKICAgICBzdGF0aWMgY2hhciBidWZbMTAwXTsKZGlmZiAtLWdpdCBhL1BhcnNlci9teXJlYWRsaW5lLmMgYi9QYXJzZXIvbXlyZWFkbGluZS5jCmluZGV4IDlmMWZjMWUuLmExYzRiNWMgMTAwNjQ0Ci0tLSBhL1BhcnNlci9teXJlYWRsaW5lLmMKKysrIGIvUGFyc2VyL215cmVhZGxpbmUuYwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgICAqLwogICAgICAgICBpZiAoR2V0TGFzdEVycm9yKCk9PUVSUk9SX09QRVJBVElPTl9BQk9SVEVEKSB7CiAgICAgICAgICAgICBoSW50ZXJydXB0RXZlbnQgPSBfUHlPU19TaWdpbnRFdmVudCgpOwotICAgICAgICAgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGhJbnRlcnJ1cHRFdmVudCwgMTApKSB7CisgICAgICAgICAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3RFeChoSW50ZXJydXB0RXZlbnQsIDEwLCBGQUxTRSkpIHsKICAgICAgICAgICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKICAgICAgICAgICAgICAgICBSZXNldEV2ZW50KGhJbnRlcnJ1cHRFdmVudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8qIEludGVycnVwdCAqLwpAQCAtMTA5LDIyICsxMDksMjYgQEAKIC8qIFJlYWRsaW5lIGltcGxlbWVudGF0aW9uIHVzaW5nIGZnZXRzKCkgKi8KIAogY2hhciAqCi1QeU9TX1N0ZGlvUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpCitQeU9TX1N0ZGlvUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG47CiAgICAgY2hhciAqcCwgKnByOworCiAgICAgbiA9IDEwMDsKLSAgICBpZiAoKHAgPSAoY2hhciAqKVB5TWVtX01BTExPQyhuKSkgPT0gTlVMTCkKKyAgICBwID0gKGNoYXIgKilQeU1lbV9SYXdNYWxsb2Mobik7CisgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBmZmx1c2goc3lzX3N0ZG91dCk7CiAgICAgaWYgKHByb21wdCkKICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyIsIHByb21wdCk7CiAgICAgZmZsdXNoKHN0ZGVycik7CisKICAgICBzd2l0Y2ggKG15X2ZnZXRzKHAsIChpbnQpbiwgc3lzX3N0ZGluKSkgewogICAgIGNhc2UgMDogLyogTm9ybWFsIGNhc2UgKi8KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOiAvKiBJbnRlcnJ1cHQgKi8KLSAgICAgICAgUHlNZW1fRlJFRShwKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgY2FzZSAtMTogLyogRU9GICovCiAgICAgY2FzZSAtMjogLyogRXJyb3IgKi8KQEAgLTEzNiwxMyArMTQwLDEzIEBACiAgICAgd2hpbGUgKG4gPiAwICYmIHBbbi0xXSAhPSAnXG4nKSB7CiAgICAgICAgIHNpemVfdCBpbmNyID0gbisyOwogICAgICAgICBpZiAoaW5jciA+IElOVF9NQVgpIHsKLSAgICAgICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHApOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJpbnB1dCBsaW5lIHRvbyBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBwciA9IChjaGFyICopUHlNZW1fUkVBTExPQyhwLCBuICsgaW5jcik7CisgICAgICAgIHByID0gKGNoYXIgKilQeU1lbV9SYXdSZWFsbG9jKHAsIG4gKyBpbmNyKTsKICAgICAgICAgaWYgKHByID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHApOwogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xNTEsOSArMTU1LDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuICs9IHN0cmxlbihwK24pOwogICAgIH0KLSAgICBwciA9IChjaGFyICopUHlNZW1fUkVBTExPQyhwLCBuKzEpOworICAgIHByID0gKGNoYXIgKilQeU1lbV9SYXdSZWFsbG9jKHAsIG4rMSk7CiAgICAgaWYgKHByID09IE5VTEwpIHsKLSAgICAgICAgUHlNZW1fRlJFRShwKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTY2LDE1ICsxNzAsMTYgQEAKIAogICAgTm90ZTogUHl0aG9uIGV4cGVjdHMgaW4gcmV0dXJuIGEgYnVmZmVyIGFsbG9jYXRlZCB3aXRoIFB5TWVtX01hbGxvYy4gKi8KIAotY2hhciAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK2NoYXIgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAKIAogLyogSW50ZXJmYWNlIHVzZWQgYnkgdG9rZW5pemVyLmMgYW5kIGJsdGlubW9kdWxlLmMgKi8KIAogY2hhciAqCi1QeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKLSAgICBjaGFyICpydjsKKyAgICBjaGFyICpydiwgKnJlczsKKyAgICBzaXplX3QgbGVuOwogCiAgICAgaWYgKF9QeU9TX1JlYWRsaW5lVFN0YXRlID09IFB5VGhyZWFkU3RhdGVfR0VUKCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKQEAgLTIyMSw1ICsyMjYsMTQgQEAKIAogICAgIF9QeU9TX1JlYWRsaW5lVFN0YXRlID0gTlVMTDsKIAotICAgIHJldHVybiBydjsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsZW4gPSBzdHJsZW4ocnYpICsgMTsKKyAgICByZXMgPSBQeU1lbV9NYWxsb2MobGVuKTsKKyAgICBpZiAocmVzICE9IE5VTEwpCisgICAgICAgIG1lbWNweShyZXMsIHJ2LCBsZW4pOworICAgIFB5TWVtX1Jhd0ZyZWUocnYpOworCisgICAgcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL1BhcnNlci9ub2RlLmMgYi9QYXJzZXIvbm9kZS5jCmluZGV4IDFlNGYwZGEuLjU2NGJkOTEgMTAwNjQ0Ci0tLSBhL1BhcnNlci9ub2RlLmMKKysrIGIvUGFyc2VyL25vZGUuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAKIGludAotUHlOb2RlX0FkZENoaWxkKHJlZ2lzdGVyIG5vZGUgKm4xLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK1B5Tm9kZV9BZGRDaGlsZChub2RlICpuMSwgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgY29uc3QgaW50IG5jaCA9IG4xLT5uX25jaGlsZHJlbjsKICAgICBpbnQgY3VycmVudF9jYXBhY2l0eTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICBpZiAoY3VycmVudF9jYXBhY2l0eSA8IDAgfHwgcmVxdWlyZWRfY2FwYWNpdHkgPCAwKQogICAgICAgICByZXR1cm4gRV9PVkVSRkxPVzsKICAgICBpZiAoY3VycmVudF9jYXBhY2l0eSA8IHJlcXVpcmVkX2NhcGFjaXR5KSB7Ci0gICAgICAgIGlmIChyZXF1aXJlZF9jYXBhY2l0eSA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKG5vZGUpKSB7CisgICAgICAgIGlmICgoc2l6ZV90KXJlcXVpcmVkX2NhcGFjaXR5ID4gUFlfU0laRV9NQVggLyBzaXplb2Yobm9kZSkpIHsKICAgICAgICAgICAgIHJldHVybiBFX05PTUVNOwogICAgICAgICB9CiAgICAgICAgIG4gPSBuMS0+bl9jaGlsZDsKZGlmZiAtLWdpdCBhL1BhcnNlci9wYXJzZXIuYyBiL1BhcnNlci9wYXJzZXIuYwppbmRleCBiNTA1ZmUwLi41NmVjNTE0IDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2VyLmMKKysrIGIvUGFyc2VyL3BhcnNlci5jCkBAIC0zNSw5ICszNSw5IEBACiAjZGVmaW5lIHNfZW1wdHkocykgKChzKS0+c190b3AgPT0gJihzKS0+c19iYXNlW01BWFNUQUNLXSkKIAogc3RhdGljIGludAotc19wdXNoKHJlZ2lzdGVyIHN0YWNrICpzLCBkZmEgKmQsIG5vZGUgKnBhcmVudCkKK3NfcHVzaChzdGFjayAqcywgZGZhICpkLCBub2RlICpwYXJlbnQpCiB7Ci0gICAgcmVnaXN0ZXIgc3RhY2tlbnRyeSAqdG9wOworICAgIHN0YWNrZW50cnkgKnRvcDsKICAgICBpZiAocy0+c190b3AgPT0gcy0+c19iYXNlKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic19wdXNoOiBwYXJzZXIgc3RhY2sgb3ZlcmZsb3dcbiIpOwogICAgICAgICByZXR1cm4gRV9OT01FTTsKQEAgLTUyLDcgKzUyLDcgQEAKICNpZmRlZiBQeV9ERUJVRwogCiBzdGF0aWMgdm9pZAotc19wb3AocmVnaXN0ZXIgc3RhY2sgKnMpCitzX3BvcChzdGFjayAqcykKIHsKICAgICBpZiAoc19lbXB0eShzKSkKICAgICAgICAgUHlfRmF0YWxFcnJvcigic19wb3A6IHBhcnNlciBzdGFjayB1bmRlcmZsb3cgLS0gRkFUQUwiKTsKQEAgLTEwNSw3ICsxMDUsNyBAQAogLyogUEFSU0VSIFNUQUNLIE9QRVJBVElPTlMgKi8KIAogc3RhdGljIGludAotc2hpZnQocmVnaXN0ZXIgc3RhY2sgKnMsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitzaGlmdChzdGFjayAqcywgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBpbnQgZXJyOwogICAgIGFzc2VydCghc19lbXB0eShzKSk7CkBAIC0xMTcsMTAgKzExNywxMCBAQAogfQogCiBzdGF0aWMgaW50Ci1wdXNoKHJlZ2lzdGVyIHN0YWNrICpzLCBpbnQgdHlwZSwgZGZhICpkLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorcHVzaChzdGFjayAqcywgaW50IHR5cGUsIGRmYSAqZCwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBpbnQgZXJyOwotICAgIHJlZ2lzdGVyIG5vZGUgKm47CisgICAgbm9kZSAqbjsKICAgICBuID0gcy0+c190b3AtPnNfcGFyZW50OwogICAgIGFzc2VydCghc19lbXB0eShzKSk7CiAgICAgZXJyID0gUHlOb2RlX0FkZENoaWxkKG4sIHR5cGUsIChjaGFyICopTlVMTCwgbGluZW5vLCBjb2xfb2Zmc2V0KTsKQEAgLTEzNCwxNSArMTM0LDE1IEBACiAvKiBQQVJTRVIgUFJPUEVSICovCiAKIHN0YXRpYyBpbnQKLWNsYXNzaWZ5KHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjaGFyICpzdHIpCitjbGFzc2lmeShwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGdyYW1tYXIgKmcgPSBwcy0+cF9ncmFtbWFyOwotICAgIHJlZ2lzdGVyIGludCBuID0gZy0+Z19sbC5sbF9ubGFiZWxzOworICAgIGludCBuID0gZy0+Z19sbC5sbF9ubGFiZWxzOwogCiAgICAgaWYgKHR5cGUgPT0gTkFNRSkgewotICAgICAgICByZWdpc3RlciBjaGFyICpzID0gc3RyOwotICAgICAgICByZWdpc3RlciBsYWJlbCAqbCA9IGctPmdfbGwubGxfbGFiZWw7Ci0gICAgICAgIHJlZ2lzdGVyIGludCBpOworICAgICAgICBjb25zdCBjaGFyICpzID0gc3RyOworICAgICAgICBsYWJlbCAqbCA9IGctPmdfbGwubGxfbGFiZWw7CisgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSBuOyBpID4gMDsgaS0tLCBsKyspIHsKICAgICAgICAgICAgIGlmIChsLT5sYl90eXBlICE9IE5BTUUgfHwgbC0+bGJfc3RyID09IE5VTEwgfHwKICAgICAgICAgICAgICAgICBsLT5sYl9zdHJbMF0gIT0gc1swXSB8fApAQCAtMTY1LDggKzE2NSw4IEBACiAgICAgfQogCiAgICAgewotICAgICAgICByZWdpc3RlciBsYWJlbCAqbCA9IGctPmdfbGwubGxfbGFiZWw7Ci0gICAgICAgIHJlZ2lzdGVyIGludCBpOworICAgICAgICBsYWJlbCAqbCA9IGctPmdfbGwubGxfbGFiZWw7CisgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSBuOyBpID4gMDsgaS0tLCBsKyspIHsKICAgICAgICAgICAgIGlmIChsLT5sYl90eXBlID09IHR5cGUgJiYgbC0+bGJfc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBEKHByaW50ZigiSXQncyBhIHRva2VuIHdlIGtub3dcbiIpKTsKQEAgLTIyNSwxMCArMjI1LDEwIEBACiAjZW5kaWYgLyogZnV0dXJlIGtleXdvcmQgKi8KIAogaW50Ci1QeVBhcnNlcl9BZGRUb2tlbihyZWdpc3RlciBwYXJzZXJfc3RhdGUgKnBzLCByZWdpc3RlciBpbnQgdHlwZSwgY2hhciAqc3RyLAorUHlQYXJzZXJfQWRkVG9rZW4ocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBpbnQgKmV4cGVjdGVkX3JldCkKIHsKLSAgICByZWdpc3RlciBpbnQgaWxhYmVsOworICAgIGludCBpbGFiZWw7CiAgICAgaW50IGVycjsKIAogICAgIEQocHJpbnRmKCJUb2tlbiAlcy8nJXMnIC4uLiAiLCBfUHlQYXJzZXJfVG9rZW5OYW1lc1t0eXBlXSwgc3RyKSk7CkBAIC0yNDEsMTUgKzI0MSwxNSBAQAogICAgIC8qIExvb3AgdW50aWwgdGhlIHRva2VuIGlzIHNoaWZ0ZWQgb3IgYW4gZXJyb3Igb2NjdXJyZWQgKi8KICAgICBmb3IgKDs7KSB7CiAgICAgICAgIC8qIEZldGNoIHRoZSBjdXJyZW50IGRmYSBhbmQgc3RhdGUgKi8KLSAgICAgICAgcmVnaXN0ZXIgZGZhICpkID0gcHMtPnBfc3RhY2suc190b3AtPnNfZGZhOwotICAgICAgICByZWdpc3RlciBzdGF0ZSAqcyA9ICZkLT5kX3N0YXRlW3BzLT5wX3N0YWNrLnNfdG9wLT5zX3N0YXRlXTsKKyAgICAgICAgZGZhICpkID0gcHMtPnBfc3RhY2suc190b3AtPnNfZGZhOworICAgICAgICBzdGF0ZSAqcyA9ICZkLT5kX3N0YXRlW3BzLT5wX3N0YWNrLnNfdG9wLT5zX3N0YXRlXTsKIAogICAgICAgICBEKHByaW50ZigiIERGQSAnJXMnLCBzdGF0ZSAlZDoiLAogICAgICAgICAgICAgZC0+ZF9uYW1lLCBwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZSkpOwogCiAgICAgICAgIC8qIENoZWNrIGFjY2VsZXJhdG9yICovCiAgICAgICAgIGlmIChzLT5zX2xvd2VyIDw9IGlsYWJlbCAmJiBpbGFiZWwgPCBzLT5zX3VwcGVyKSB7Ci0gICAgICAgICAgICByZWdpc3RlciBpbnQgeCA9IHMtPnNfYWNjZWxbaWxhYmVsIC0gcy0+c19sb3dlcl07CisgICAgICAgICAgICBpbnQgeCA9IHMtPnNfYWNjZWxbaWxhYmVsIC0gcy0+c19sb3dlcl07CiAgICAgICAgICAgICBpZiAoeCAhPSAtMSkgewogICAgICAgICAgICAgICAgIGlmICh4ICYgKDE8PDcpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIFB1c2ggbm9uLXRlcm1pbmFsICovCmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2V0b2suYyBiL1BhcnNlci9wYXJzZXRvay5jCmluZGV4IDdiZWI3MzUuLjYyOWRlZTUgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wYXJzZXRvay5jCisrKyBiL1BhcnNlci9wYXJzZXRvay5jCkBAIC0xMyw3ICsxMyw3IEBACiAKIC8qIEZvcndhcmQgKi8KIHN0YXRpYyBub2RlICpwYXJzZXRvayhzdHJ1Y3QgdG9rX3N0YXRlICosIGdyYW1tYXIgKiwgaW50LCBwZXJyZGV0YWlsICosIGludCAqKTsKLXN0YXRpYyBpbnQgaW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBjb25zdCBjaGFyKiBmaWxlbmFtZSk7CitzdGF0aWMgaW50IGluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgUHlPYmplY3QgKiBmaWxlbmFtZSk7CiAKIC8qIFBhcnNlIGlucHV0IGNvbWluZyBmcm9tIGEgc3RyaW5nLiAgUmV0dXJuIGVycm9yIGNvZGUsIHByaW50IHNvbWUgZXJyb3JzLiAqLwogbm9kZSAqCkBAIC00MSw5ICs0MSw5IEBACiB9CiAKIG5vZGUgKgotUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK1B5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KGNvbnN0IGNoYXIgKnMsIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rOwogICAgIGludCBleGVjX2lucHV0ID0gc3RhcnQgPT0gZmlsZV9pbnB1dDsKQEAgLTY3LDExICs2NywzNSBAQAogICAgIHJldHVybiBwYXJzZXRvayh0b2ssIGcsIHN0YXJ0LCBlcnJfcmV0LCBmbGFncyk7CiB9CiAKK25vZGUgKgorUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCit7CisgICAgbm9kZSAqbjsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMOworI2lmbmRlZiBQR0VOCisgICAgaWYgKGZpbGVuYW1lX3N0ciAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QocywgZmlsZW5hbWUsIGcsIHN0YXJ0LCBlcnJfcmV0LCBmbGFncyk7CisjaWZuZGVmIFBHRU4KKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyNlbmRpZgorICAgIHJldHVybiBuOworfQorCiAvKiBQYXJzZSBpbnB1dCBjb21pbmcgZnJvbSBhIGZpbGUuICBSZXR1cm4gZXJyb3IgY29kZSwgcHJpbnQgc29tZSBlcnJvcnMuICovCiAKIG5vZGUgKgogUHlQYXJzZXJfUGFyc2VGaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0KQorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQpCiB7CiAgICAgcmV0dXJuIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzKGZwLCBmaWxlbmFtZSwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZywgc3RhcnQsIHBzMSwgcHMyLCBlcnJfcmV0LCAwKTsKQEAgLTgwLDcgKzEwNCw4IEBACiBub2RlICoKIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMxLCBjaGFyICpwczIsIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCBmbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50IGZsYWdzKQogewogICAgIGludCBpZmxhZ3MgPSBmbGFnczsKICAgICByZXR1cm4gUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChmcCwgZmlsZW5hbWUsIGVuYywgZywgc3RhcnQsIHBzMSwKQEAgLTg4LDE2ICsxMTMsMTcgQEAKIH0KIAogbm9kZSAqCi1QeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQorUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKIHsKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2s7CiAKICAgICBpZiAoaW5pdGVycihlcnJfcmV0LCBmaWxlbmFtZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgodG9rID0gUHlUb2tlbml6ZXJfRnJvbUZpbGUoZnAsIChjaGFyICopZW5jLCBwczEsIHBzMikpID09IE5VTEwpIHsKKyAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21GaWxlKGZwLCBlbmMsIHBzMSwgcHMyKSkgPT0gTlVMTCkgewogICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfTk9NRU07CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwOCw2ICsxMzQsMzEgQEAKICAgICByZXR1cm4gcGFyc2V0b2sodG9rLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOwogfQogCitub2RlICoKK1B5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmMsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCit7CisgICAgbm9kZSAqbjsKKyAgICBQeU9iamVjdCAqZmlsZW9iaiA9IE5VTEw7CisjaWZuZGVmIFBHRU4KKyAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgeworICAgICAgICBmaWxlb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7CisgICAgICAgIGlmIChmaWxlb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbiA9IFB5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChmcCwgZmlsZW9iaiwgZW5jLCBnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHBzMSwgcHMyLCBlcnJfcmV0LCBmbGFncyk7CisjaWZuZGVmIFBHRU4KKyAgICBQeV9YREVDUkVGKGZpbGVvYmopOworI2VuZGlmCisgICAgcmV0dXJuIG47Cit9CisKICNpZmRlZiBQWV9QQVJTRVJfUkVRVUlSRVNfRlVUVVJFX0tFWVdPUkQKICNpZiAwCiBzdGF0aWMgY2hhciB3aXRoX21zZ1tdID0KQEAgLTEzOCw3ICsxODksNiBAQAogICAgIGludCBzdGFydGVkID0gMDsKIAogICAgIGlmICgocHMgPSBQeVBhcnNlcl9OZXcoZywgc3RhcnQpKSA9PSBOVUxMKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gbWVtIGZvciBuZXcgcGFyc2VyXG4iKTsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTc4LDcgKzIyOCw2IEBACiAgICAgICAgIGxlbiA9IGIgLSBhOyAvKiBYWFggdGhpcyBtYXkgY29tcHV0ZSBOVUxMIC0gTlVMTCAqLwogICAgICAgICBzdHIgPSAoY2hhciAqKSBQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7CiAgICAgICAgIGlmIChzdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJubyBtZW0gZm9yIG5leHQgdG9rZW5cbiIpOwogICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwNSw3ICsyNTQsOCBAQAogICAgICAgICB9CiAjZW5kaWYKICAgICAgICAgaWYgKGEgPj0gdG9rLT5saW5lX3N0YXJ0KQotICAgICAgICAgICAgY29sX29mZnNldCA9IGEgLSB0b2stPmxpbmVfc3RhcnQ7CisgICAgICAgICAgICBjb2xfb2Zmc2V0ID0gUHlfU0FGRV9ET1dOQ0FTVChhIC0gdG9rLT5saW5lX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfaW50cHRyX3QsIGludCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGNvbF9vZmZzZXQgPSAtMTsKIApAQCAtMzA4LDcgKzM1OCw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLWluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCitpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBlcnJfcmV0LT5lcnJvciA9IEVfT0s7CiAgICAgZXJyX3JldC0+bGluZW5vID0gMDsKQEAgLTMxNywxMyArMzY3LDE2IEBACiAgICAgZXJyX3JldC0+dG9rZW4gPSAtMTsKICAgICBlcnJfcmV0LT5leHBlY3RlZCA9IC0xOwogI2lmbmRlZiBQR0VOCi0gICAgaWYgKGZpbGVuYW1lKQotICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgIGVsc2UKKyAgICBpZiAoZmlsZW5hbWUpIHsKKyAgICAgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKKyAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxzdHJpbmc+Iik7Ci0gICAgaWYgKGVycl9yZXQtPmZpbGVuYW1lID09IE5VTEwpIHsKLSAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChlcnJfcmV0LT5maWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAjZW5kaWYKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1BhcnNlci9wZ2VubWFpbi5jIGIvUGFyc2VyL3BnZW5tYWluLmMKaW5kZXggNTJiODM4MC4uMDE3YTRmOSAxMDA2NDQKLS0tIGEvUGFyc2VyL3BnZW5tYWluLmMKKysrIGIvUGFyc2VyL3BnZW5tYWluLmMKQEAgLTExMyw2ICsxMTMsNyBAQAogICAgICAgICBQeV9FeGl0KDEpOwogICAgIH0KICAgICBnID0gcGdlbihuKTsKKyAgICBQeU5vZGVfRnJlZShuKTsKICAgICBpZiAoZyA9PSBOVUxMKSB7CiAgICAgICAgIHByaW50ZigiQmFkIGdyYW1tYXIuXG4iKTsKICAgICAgICAgUHlfRXhpdCgxKTsKQEAgLTEzNyw3ICsxMzgsNyBAQAogLyogTm8tbm9uc2Vuc2UgbXlfcmVhZGxpbmUoKSBmb3IgdG9rZW5pemVyLmMgKi8KIAogY2hhciAqCi1QeU9TX1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNvbnN0IGNoYXIgKnByb21wdCkKIHsKICAgICBzaXplX3QgbiA9IDEwMDA7CiAgICAgY2hhciAqcCA9IChjaGFyICopUHlNZW1fTUFMTE9DKG4pOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5jIGIvUGFyc2VyL3Rva2VuaXplci5jCmluZGV4IDVjMGJkNmUuLjViZjdlODQgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuYworKysgYi9QYXJzZXIvdG9rZW5pemVyLmMKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgICAgICAgIHx8IGMgPT0gJ18nXAogICAgICAgICAgICAgICAgfHwgKGMgPj0gMTI4KSkKIAotZXh0ZXJuIGNoYXIgKlB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitleHRlcm4gY2hhciAqUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKIC8qIFJldHVybiBtYWxsb2MnZWQgc3RyaW5nIGluY2x1ZGluZyB0cmFpbGluZyBcbjsKICAgIGVtcHR5IG1hbGxvYydlZCBzdHJpbmcgZm9yIEVPRjsKICAgIE5VTEwgaWYgaW50ZXJydXB0ZWQgKi8KQEAgLTQ3LDcgKzQ3LDcgQEAKIAogLyogVG9rZW4gbmFtZXMgKi8KIAotY2hhciAqX1B5UGFyc2VyX1Rva2VuTmFtZXNbXSA9IHsKK2NvbnN0IGNoYXIgKl9QeVBhcnNlcl9Ub2tlbk5hbWVzW10gPSB7CiAgICAgIkVORE1BUktFUiIsCiAgICAgIk5BTUUiLAogICAgICJOVU1CRVIiLApAQCAtNjcxLDcgKzY3MSw4IEBACiAKIHN0YXRpYyBjaGFyICoKIHRyYW5zbGF0ZV9uZXdsaW5lcyhjb25zdCBjaGFyICpzLCBpbnQgZXhlY19pbnB1dCwgc3RydWN0IHRva19zdGF0ZSAqdG9rKSB7Ci0gICAgaW50IHNraXBfbmV4dF9sZiA9IDAsIG5lZWRlZF9sZW5ndGggPSBzdHJsZW4ocykgKyAyLCBmaW5hbF9sZW5ndGg7CisgICAgaW50IHNraXBfbmV4dF9sZiA9IDA7CisgICAgc2l6ZV90IG5lZWRlZF9sZW5ndGggPSBzdHJsZW4ocykgKyAyLCBmaW5hbF9sZW5ndGg7CiAgICAgY2hhciAqYnVmLCAqY3VycmVudDsKICAgICBjaGFyIGMgPSAnXDAnOwogICAgIGJ1ZiA9IFB5TWVtX01BTExPQyhuZWVkZWRfbGVuZ3RoKTsKQEAgLTc3OSw3ICs3ODAsNyBAQAogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvayA9IHRva19uZXcoKTsKICAgICBpZiAodG9rID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHN0ciA9IChjaGFyICopZGVjb2RlX3N0cihzdHIsIGV4ZWNfaW5wdXQsIHRvayk7CisgICAgc3RyID0gZGVjb2RlX3N0cihzdHIsIGV4ZWNfaW5wdXQsIHRvayk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CiAgICAgICAgIFB5VG9rZW5pemVyX0ZyZWUodG9rKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MjIsNyArODIzLDggQEAKIC8qIFNldCB1cCB0b2tlbml6ZXIgZm9yIGZpbGUgKi8KIAogc3RydWN0IHRva19zdGF0ZSAqCi1QeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICpmcCwgY2hhciogZW5jLCBjaGFyICpwczEsIGNoYXIgKnBzMikKK1B5VG9rZW5pemVyX0Zyb21GaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyKiBlbmMsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMikKIHsKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2sgPSB0b2tfbmV3KCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKQpAQCAtODczLDcgKzg3NSw3IEBACiAvKiBHZXQgbmV4dCBjaGFyLCB1cGRhdGluZyBzdGF0ZTsgZXJyb3IgY29kZSBnb2VzIGludG8gdG9rLT5kb25lICovCiAKIHN0YXRpYyBpbnQKLXRva19uZXh0YyhyZWdpc3RlciBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spCit0b2tfbmV4dGMoc3RydWN0IHRva19zdGF0ZSAqdG9rKQogewogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKHRvay0+Y3VyICE9IHRvay0+aW5wKSB7CkBAIC0xMDcwLDcgKzEwNzIsNyBAQAogLyogQmFjay11cCBvbmUgY2hhcmFjdGVyICovCiAKIHN0YXRpYyB2b2lkCi10b2tfYmFja3VwKHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgcmVnaXN0ZXIgaW50IGMpCit0b2tfYmFja3VwKHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgaW50IGMpCiB7CiAgICAgaWYgKGMgIT0gRU9GKSB7CiAgICAgICAgIGlmICgtLXRvay0+Y3VyIDwgdG9rLT5idWYpCkBAIC0xMzAwLDkgKzEzMDIsOSBAQAogLyogR2V0IG5leHQgdG9rZW4sIGFmdGVyIHNwYWNlIHN0cmlwcGluZyBldGMuICovCiAKIHN0YXRpYyBpbnQKLXRva19nZXQocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rLCBjaGFyICoqcF9zdGFydCwgY2hhciAqKnBfZW5kKQordG9rX2dldChzdHJ1Y3QgdG9rX3N0YXRlICp0b2ssIGNoYXIgKipwX3N0YXJ0LCBjaGFyICoqcF9lbmQpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGM7CisgICAgaW50IGM7CiAgICAgaW50IGJsYW5rbGluZSwgbm9uYXNjaWk7CiAKICAgICAqcF9zdGFydCA9ICpwX2VuZCA9IE5VTEw7CkBAIC0xMzEyLDggKzEzMTQsOCBAQAogCiAgICAgLyogR2V0IGluZGVudGF0aW9uIGxldmVsICovCiAgICAgaWYgKHRvay0+YXRib2wpIHsKLSAgICAgICAgcmVnaXN0ZXIgaW50IGNvbCA9IDA7Ci0gICAgICAgIHJlZ2lzdGVyIGludCBhbHRjb2wgPSAwOworICAgICAgICBpbnQgY29sID0gMDsKKyAgICAgICAgaW50IGFsdGNvbCA9IDA7CiAgICAgICAgIHRvay0+YXRib2wgPSAwOwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBjID0gdG9rX25leHRjKHRvayk7CkBAIC0xNzI5LDEwICsxNzMxLDE1IEBACiAgICAgRklMRSAqZnA7CiAgICAgY2hhciAqcF9zdGFydCA9TlVMTCAsICpwX2VuZCA9TlVMTCAsICplbmNvZGluZyA9IE5VTEw7CiAKKyNpZm5kZWYgUEdFTgorICAgIGZkID0gX1B5X2R1cChmZCk7CisjZWxzZQogICAgIGZkID0gZHVwKGZkKTsKKyNlbmRpZgogICAgIGlmIChmZCA8IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgICAgZnAgPSBmZG9wZW4oZmQsICJyIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmggYi9QYXJzZXIvdG9rZW5pemVyLmgKaW5kZXggZWQxZjNhYS4uMWNlNmVlYiAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5oCisrKyBiL1BhcnNlci90b2tlbml6ZXIuaApAQCAtMzUsNyArMzUsNyBAQAogICAgIGludCBpbmRzdGFja1tNQVhJTkRFTlRdOyAgICAgICAgICAgIC8qIFN0YWNrIG9mIGluZGVudHMgKi8KICAgICBpbnQgYXRib2w7ICAgICAgICAgIC8qIE5vbnplcm8gaWYgYXQgYmVnaW4gb2YgbmV3IGxpbmUgKi8KICAgICBpbnQgcGVuZGluOyAgICAgICAgIC8qIFBlbmRpbmcgaW5kZW50cyAoaWYgPiAwKSBvciBkZWRlbnRzIChpZiA8IDApICovCi0gICAgY2hhciAqcHJvbXB0LCAqbmV4dHByb21wdDsgICAgICAgICAgLyogRm9yIGludGVyYWN0aXZlIHByb21wdGluZyAqLworICAgIGNvbnN0IGNoYXIgKnByb21wdCwgKm5leHRwcm9tcHQ7ICAgICAgICAgIC8qIEZvciBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgKi8KICAgICBpbnQgbGluZW5vOyAgICAgICAgIC8qIEN1cnJlbnQgbGluZSBudW1iZXIgKi8KICAgICBpbnQgbGV2ZWw7ICAgICAgICAgIC8qICgpIFtdIHt9IFBhcmVudGhlc2VzIG5lc3RpbmcgbGV2ZWwgKi8KICAgICAgICAgICAgIC8qIFVzZWQgdG8gYWxsb3cgZnJlZSBjb250aW51YXRpb25zIGluc2lkZSB0aGVtICovCkBAIC02OSw4ICs2OSw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tVVRGOChjb25zdCBjaGFyICosIGludCk7Ci1leHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqLCBjaGFyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKik7CitleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqLCBjb25zdCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBQeVRva2VuaXplcl9GcmVlKHN0cnVjdCB0b2tfc3RhdGUgKik7CiBleHRlcm4gaW50IFB5VG9rZW5pemVyX0dldChzdHJ1Y3QgdG9rX3N0YXRlICosIGNoYXIgKiosIGNoYXIgKiopOwogZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9SZXN0b3JlRW5jb2Rpbmcoc3RydWN0IHRva19zdGF0ZSogdG9rLApkaWZmIC0tZ2l0IGEvUHl0aG9uL1B5dGhvbi1hc3QuYyBiL1B5dGhvbi9QeXRob24tYXN0LmMKaW5kZXggN2JmMmM1MC4uZTA3YTkzZiAxMDA2NDQKLS0tIGEvUHl0aG9uL1B5dGhvbi1hc3QuYworKysgYi9QeXRob24vUHl0aG9uLWFzdC5jCkBAIC0yNzEsNiArMjcxLDEwIEBACiBzdGF0aWMgY2hhciAqQnl0ZXNfZmllbGRzW109ewogICAgICJzIiwKIH07CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpOYW1lQ29uc3RhbnRfdHlwZTsKK3N0YXRpYyBjaGFyICpOYW1lQ29uc3RhbnRfZmllbGRzW109eworICAgICJ2YWx1ZSIsCit9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqRWxsaXBzaXNfdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkF0dHJpYnV0ZV90eXBlOwogX1B5X0lERU5USUZJRVIoYXR0cik7CkBAIC00MDgsMjQgKzQxMiwyNCBAQAogc3RhdGljIFB5VHlwZU9iamVjdCAqYXJndW1lbnRzX3R5cGU7CiBzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfYXJndW1lbnRzKHZvaWQqKTsKIF9QeV9JREVOVElGSUVSKHZhcmFyZyk7Ci1fUHlfSURFTlRJRklFUih2YXJhcmdhbm5vdGF0aW9uKTsKIF9QeV9JREVOVElGSUVSKGt3b25seWFyZ3MpOwotX1B5X0lERU5USUZJRVIoa3dhcmcpOwotX1B5X0lERU5USUZJRVIoa3dhcmdhbm5vdGF0aW9uKTsKLV9QeV9JREVOVElGSUVSKGRlZmF1bHRzKTsKIF9QeV9JREVOVElGSUVSKGt3X2RlZmF1bHRzKTsKK19QeV9JREVOVElGSUVSKGt3YXJnKTsKK19QeV9JREVOVElGSUVSKGRlZmF1bHRzKTsKIHN0YXRpYyBjaGFyICphcmd1bWVudHNfZmllbGRzW109ewogICAgICJhcmdzIiwKICAgICAidmFyYXJnIiwKLSAgICAidmFyYXJnYW5ub3RhdGlvbiIsCiAgICAgImt3b25seWFyZ3MiLAotICAgICJrd2FyZyIsCi0gICAgImt3YXJnYW5ub3RhdGlvbiIsCi0gICAgImRlZmF1bHRzIiwKICAgICAia3dfZGVmYXVsdHMiLAorICAgICJrd2FyZyIsCisgICAgImRlZmF1bHRzIiwKIH07CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICphcmdfdHlwZTsKIHN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial9hcmcodm9pZCopOworc3RhdGljIGNoYXIgKmFyZ19hdHRyaWJ1dGVzW10gPSB7CisgICAgImxpbmVubyIsCisgICAgImNvbF9vZmZzZXQiLAorfTsKIF9QeV9JREVOVElGSUVSKGFyZyk7CiBfUHlfSURFTlRJRklFUihhbm5vdGF0aW9uKTsKIHN0YXRpYyBjaGFyICphcmdfZmllbGRzW109ewpAQCAtNjczLDYgKzY3Nyw3IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopbyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopbzsKIH0KKyNkZWZpbmUgYXN0Mm9ial9zaW5nbGV0b24gYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9pZGVudGlmaWVyIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfc3RyaW5nIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfYnl0ZXMgYXN0Mm9ial9vYmplY3QKQEAgLTY4NCw2ICs2ODksMTcgQEAKIAogLyogQ29udmVyc2lvbiBQeXRob24gLT4gQVNUICovCiAKK3N0YXRpYyBpbnQgb2JqMmFzdF9zaW5nbGV0b24oUHlPYmplY3QgKm9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQoreworICAgIGlmIChvYmogIT0gUHlfTm9uZSAmJiBvYmogIT0gUHlfVHJ1ZSAmJiBvYmogIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQVNUIHNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gb2JqOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9iajJhc3Rfb2JqZWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKIHsKICAgICBpZiAob2JqID09IFB5X05vbmUpCkBAIC03NTgsNiArNzc0LDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXhpc3RzX25vdF9ub25lKFB5T2JqZWN0ICpvYmosIF9QeV9JZGVudGlmaWVyICppZCkKK3sKKyAgICBpbnQgaXNub25lOworICAgIFB5T2JqZWN0ICphdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosIGlkKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlzbm9uZSA9IGF0dHIgPT0gUHlfTm9uZTsKKyAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgcmV0dXJuICFpc25vbmU7Cit9CisKIAogc3RhdGljIGludCBpbml0X3R5cGVzKHZvaWQpCiB7CkBAIC04NjIsNiArODkxLDkgQEAKICAgICBpZiAoIVN0cl90eXBlKSByZXR1cm4gMDsKICAgICBCeXRlc190eXBlID0gbWFrZV90eXBlKCJCeXRlcyIsIGV4cHJfdHlwZSwgQnl0ZXNfZmllbGRzLCAxKTsKICAgICBpZiAoIUJ5dGVzX3R5cGUpIHJldHVybiAwOworICAgIE5hbWVDb25zdGFudF90eXBlID0gbWFrZV90eXBlKCJOYW1lQ29uc3RhbnQiLCBleHByX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZUNvbnN0YW50X2ZpZWxkcywgMSk7CisgICAgaWYgKCFOYW1lQ29uc3RhbnRfdHlwZSkgcmV0dXJuIDA7CiAgICAgRWxsaXBzaXNfdHlwZSA9IG1ha2VfdHlwZSgiRWxsaXBzaXMiLCBleHByX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghRWxsaXBzaXNfdHlwZSkgcmV0dXJuIDA7CiAgICAgQXR0cmlidXRlX3R5cGUgPSBtYWtlX3R5cGUoIkF0dHJpYnV0ZSIsIGV4cHJfdHlwZSwgQXR0cmlidXRlX2ZpZWxkcywgMyk7CkBAIC0xMDM5LDYgKzEwNzEsNyBAQAogICAgIGNvbXByZWhlbnNpb25fdHlwZSA9IG1ha2VfdHlwZSgiY29tcHJlaGVuc2lvbiIsICZBU1RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl9maWVsZHMsIDMpOwogICAgIGlmICghY29tcHJlaGVuc2lvbl90eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGNvbXByZWhlbnNpb25fdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGV4Y2VwdGhhbmRsZXJfdHlwZSA9IG1ha2VfdHlwZSgiZXhjZXB0aGFuZGxlciIsICZBU1RfdHlwZSwgTlVMTCwgMCk7CiAgICAgaWYgKCFleGNlcHRoYW5kbGVyX3R5cGUpIHJldHVybiAwOwogICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoZXhjZXB0aGFuZGxlcl90eXBlLCBleGNlcHRoYW5kbGVyX2F0dHJpYnV0ZXMsIDIpKQpAQCAtMTA0NiwxNiArMTA3OSwyMSBAQAogICAgIEV4Y2VwdEhhbmRsZXJfdHlwZSA9IG1ha2VfdHlwZSgiRXhjZXB0SGFuZGxlciIsIGV4Y2VwdGhhbmRsZXJfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0SGFuZGxlcl9maWVsZHMsIDMpOwogICAgIGlmICghRXhjZXB0SGFuZGxlcl90eXBlKSByZXR1cm4gMDsKLSAgICBhcmd1bWVudHNfdHlwZSA9IG1ha2VfdHlwZSgiYXJndW1lbnRzIiwgJkFTVF90eXBlLCBhcmd1bWVudHNfZmllbGRzLCA4KTsKKyAgICBhcmd1bWVudHNfdHlwZSA9IG1ha2VfdHlwZSgiYXJndW1lbnRzIiwgJkFTVF90eXBlLCBhcmd1bWVudHNfZmllbGRzLCA2KTsKICAgICBpZiAoIWFyZ3VtZW50c190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFyZ3VtZW50c190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgYXJnX3R5cGUgPSBtYWtlX3R5cGUoImFyZyIsICZBU1RfdHlwZSwgYXJnX2ZpZWxkcywgMik7CiAgICAgaWYgKCFhcmdfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhcmdfdHlwZSwgYXJnX2F0dHJpYnV0ZXMsIDIpKSByZXR1cm4gMDsKICAgICBrZXl3b3JkX3R5cGUgPSBtYWtlX3R5cGUoImtleXdvcmQiLCAmQVNUX3R5cGUsIGtleXdvcmRfZmllbGRzLCAyKTsKICAgICBpZiAoIWtleXdvcmRfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhrZXl3b3JkX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBhbGlhc190eXBlID0gbWFrZV90eXBlKCJhbGlhcyIsICZBU1RfdHlwZSwgYWxpYXNfZmllbGRzLCAyKTsKICAgICBpZiAoIWFsaWFzX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYWxpYXNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIHdpdGhpdGVtX3R5cGUgPSBtYWtlX3R5cGUoIndpdGhpdGVtIiwgJkFTVF90eXBlLCB3aXRoaXRlbV9maWVsZHMsIDIpOwogICAgIGlmICghd2l0aGl0ZW1fdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyh3aXRoaXRlbV90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIHJldHVybiAxOwogfQpAQCAtMTkyMyw2ICsxOTYxLDI1IEBACiB9CiAKIGV4cHJfdHkKK05hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBleHByX3R5IHA7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgTmFtZUNvbnN0YW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwID0gKGV4cHJfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcC0+a2luZCA9IE5hbWVDb25zdGFudF9raW5kOworICAgIHAtPnYuTmFtZUNvbnN0YW50LnZhbHVlID0gdmFsdWU7CisgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgIHJldHVybiBwOworfQorCitleHByX3R5CiBFbGxpcHNpcyhpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgZXhwcl90eSBwOwpAQCAtMjE3Nyw5ICsyMjM0LDggQEAKIH0KIAogYXJndW1lbnRzX3R5Ci1hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uLAotICAgICAgICAgIGFzZGxfc2VxICoga3dvbmx5YXJncywgaWRlbnRpZmllciBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sCi0gICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpCithcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBhcmdfdHkgdmFyYXJnLCBhc2RsX3NlcSAqIGt3b25seWFyZ3MsIGFzZGxfc2VxICoKKyAgICAgICAgICBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLCBhc2RsX3NlcSAqIGRlZmF1bHRzLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhcmd1bWVudHNfdHkgcDsKICAgICBwID0gKGFyZ3VtZW50c190eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CkBAIC0yMTg3LDEyICsyMjQzLDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHAtPmFyZ3MgPSBhcmdzOwogICAgIHAtPnZhcmFyZyA9IHZhcmFyZzsKLSAgICBwLT52YXJhcmdhbm5vdGF0aW9uID0gdmFyYXJnYW5ub3RhdGlvbjsKICAgICBwLT5rd29ubHlhcmdzID0ga3dvbmx5YXJnczsKLSAgICBwLT5rd2FyZyA9IGt3YXJnOwotICAgIHAtPmt3YXJnYW5ub3RhdGlvbiA9IGt3YXJnYW5ub3RhdGlvbjsKLSAgICBwLT5kZWZhdWx0cyA9IGRlZmF1bHRzOwogICAgIHAtPmt3X2RlZmF1bHRzID0ga3dfZGVmYXVsdHM7CisgICAgcC0+a3dhcmcgPSBrd2FyZzsKKyAgICBwLT5kZWZhdWx0cyA9IGRlZmF1bHRzOwogICAgIHJldHVybiBwOwogfQogCkBAIC0yOTQzLDYgKzI5OTcsMTUgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhOYW1lQ29uc3RhbnRfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX3NpbmdsZXRvbihvLT52Lk5hbWVDb25zdGFudC52YWx1ZSk7CisgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhbHVlLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhFbGxpcHNpc190eXBlLCBOVUxMLCBOVUxMKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOwpAQCAtMzM2MSwyOSArMzQyNCwyNCBAQAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfYXJncywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9pZGVudGlmaWVyKG8tPnZhcmFyZyk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2FyZyhvLT52YXJhcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFyYXJnLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+dmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dvbmx5YXJncywgYXN0Mm9ial9hcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dvbmx5YXJncywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9pZGVudGlmaWVyKG8tPmt3YXJnKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5rd19kZWZhdWx0cywgYXN0Mm9ial9leHByKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3YXJnLCB2YWx1ZSkgPT0gLTEpCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd19kZWZhdWx0cywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPmt3YXJnYW5ub3RhdGlvbik7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2FyZyhvLT5rd2FyZyk7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZ2Fubm90YXRpb24sIHZhbHVlKSA9PSAtMSkKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3YXJnLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+ZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7CkBAIC0zMzkxLDExICszNDQ5LDYgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2RlZmF1bHRzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dfZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7Ci0gICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd19kZWZhdWx0cywgdmFsdWUpID09IC0xKQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CkBAIC0zNDI1LDYgKzM0NzgsMTYgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2Fubm90YXRpb24sIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfaW50KG8tPmxpbmVubyk7CisgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9saW5lbm8sIHZhbHVlKSA8IDApCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2ludChvLT5jb2xfb2Zmc2V0KTsKKyAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2NvbF9vZmZzZXQsIHZhbHVlKSA8IDApCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKQEAgLTM1NDksNyArMzYxMiw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM1ODQsNyArMzY0Nyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM2NDEsNyArMzcwNCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM3NDQsNyArMzgwNyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM3NjgsNyArMzgzMSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGRlY29yYXRvcl9saXN0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM3ODEsNyArMzg0NCw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJkZWNvcmF0b3JfbGlzdFwiIG1pc3NpbmcgZnJvbSBGdW5jdGlvbkRlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9yZXR1cm5zKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfcmV0dXJucykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfcmV0dXJucyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzgzMSw3ICszODk0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYmFzZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBiYXNlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYmFzZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtMzg1NSw3ICszOTE4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoa2V5d29yZHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBrZXl3b3JkX3R5IHZhbHVlOwpAQCAtMzg2OCw3ICszOTMxLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImtleXdvcmRzXCIgbWlzc2luZyBmcm9tIENsYXNzRGVmIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODc4LDcgKzM5NDEsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4OTksNyArMzk2Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM5MjMsNyArMzk4Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGRlY29yYXRvcl9saXN0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM5NDgsNyArNDAxMSw3IEBACiAgICAgaWYgKGlzaW5zdGFuY2UpIHsKICAgICAgICAgZXhwcl90eSB2YWx1ZTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdmFsdWUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zOTgwLDcgKzQwNDMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB0YXJnZXRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC00MDE2LDcgKzQwNzksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB0YXJnZXRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC00MTMzLDcgKzQxOTYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MTU3LDcgKzQyMjAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MjA1LDcgKzQyNjgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MjI5LDcgKzQyOTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00Mjc3LDcgKzQzNDAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MzAxLDcgKzQzNjQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MzM3LDcgKzQ0MDAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBpdGVtcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGl0ZW1zID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHdpdGhpdGVtX3R5IHZhbHVlOwpAQCAtNDM2MSw3ICs0NDI0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDM4Niw3ICs0NDQ5LDcgQEAKICAgICAgICAgZXhwcl90eSBleGM7CiAgICAgICAgIGV4cHJfdHkgY2F1c2U7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9leGMpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9leGMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2V4Yyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDM5Niw3ICs0NDU5LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4YyA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9jYXVzZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2NhdXNlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9jYXVzZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDQzMSw3ICs0NDk0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDQ1NSw3ICs0NTE4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgaGFuZGxlcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBoYW5kbGVycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoaGFuZGxlcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleGNlcHRoYW5kbGVyX3R5IHZhbHVlOwpAQCAtNDQ3OSw3ICs0NTQyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDUwMyw3ICs0NTY2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZmluYWxib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZmluYWxib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChmaW5hbGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDU0MCw3ICs0NjAzLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcInRlc3RcIiBtaXNzaW5nIGZyb20gQXNzZXJ0Iik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX21zZykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX21zZykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbXNnKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NTcyLDcgKzQ2MzUsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGFsaWFzX3R5IHZhbHVlOwpAQCAtNDU5OCw3ICs0NjYxLDcgQEAKICAgICAgICAgYXNkbF9zZXEqIG5hbWVzOwogICAgICAgICBpbnQgbGV2ZWw7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9tb2R1bGUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9tb2R1bGUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX21vZHVsZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDYxOSw3ICs0NjgyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBhbGlhc190eSB2YWx1ZTsKQEAgLTQ2MzIsNyArNDY5NSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lc1wiIG1pc3NpbmcgZnJvbSBJbXBvcnRGcm9tIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2xldmVsKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbGV2ZWwpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2xldmVsKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NjY0LDcgKzQ3MjcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgdmFsdWU7CkBAIC00Njk5LDcgKzQ3NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgdmFsdWU7CkBAIC00ODQwLDcgKzQ5MDMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHZhbHVlcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MDM2LDcgKzUwOTksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoa2V5cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MDYwLDcgKzUxMjMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHZhbHVlcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MDk1LDcgKzUxNTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MTQyLDcgKzUyMDUsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01MTg5LDcgKzUyNTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01MjQ4LDcgKzUzMTEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01Mjk1LDcgKzUzNTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01MzE5LDcgKzUzODIsNyBAQAogICAgIGlmIChpc2luc3RhbmNlKSB7CiAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTM4Niw3ICs1NDQ5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3BzID0gYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9wcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNtcG9wX3R5IHZhbHVlOwpAQCAtNTQxMCw3ICs1NDczLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgY29tcGFyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBjb21wYXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoY29tcGFyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTQ2MCw3ICs1NTIzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYXJncyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTQ4NCw3ICs1NTQ3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoa2V5d29yZHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBrZXl3b3JkX3R5IHZhbHVlOwpAQCAtNTQ5Nyw3ICs1NTYwLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImtleXdvcmRzXCIgbWlzc2luZyBmcm9tIENhbGwiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU1MDcsNyArNTU3MCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGFyYXJncyA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTU4OCw2ICs1NjUxLDI4IEBACiAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKU5hbWVDb25zdGFudF90eXBlKTsKKyAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGlzaW5zdGFuY2UpIHsKKyAgICAgICAgc2luZ2xldG9uIHZhbHVlOworCisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICByZXMgPSBvYmoyYXN0X3NpbmdsZXRvbih0bXAsICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ2YWx1ZVwiIG1pc3NpbmcgZnJvbSBOYW1lQ29uc3RhbnQiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICpvdXQgPSBOYW1lQ29uc3RhbnQodmFsdWUsIGxpbmVubywgY29sX29mZnNldCwgYXJlbmEpOworICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilFbGxpcHNpc190eXBlKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgewogICAgICAgICByZXR1cm4gMTsKQEAgLTU3NzcsNyArNTg2Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU4MjQsNyArNTkwOSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU5MzcsNyArNjAyMiw3IEBACiAgICAgICAgIGV4cHJfdHkgdXBwZXI7CiAgICAgICAgIGV4cHJfdHkgc3RlcDsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2xvd2VyKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbG93ZXIpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2xvd2VyKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTQ3LDcgKzYwMzIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbG93ZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdXBwZXIpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF91cHBlcikpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdXBwZXIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5NTcsNyArNjA0Miw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1cHBlciA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGVwKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RlcCkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfc3RlcCk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk4OSw3ICs2MDc0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZGltcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRpbXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGRpbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzbGljZV90eSB2YWx1ZTsKQEAgLTYzNDAsNyArNjQyNSw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgaWZzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBpZnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoaWZzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC02NDA0LDcgKzY0ODksNyBAQAogICAgICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgICAgIGFzZGxfc2VxKiBib2R5OwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdHlwZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3R5cGUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3R5cGUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY0MTQsNyArNjQ5OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0eXBlID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX25hbWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9uYW1lKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9uYW1lKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NDM1LDcgKzY1MjAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC02NDY0LDEzICs2NTQ5LDExIEBACiB7CiAgICAgUHlPYmplY3QqIHRtcCA9IE5VTEw7CiAgICAgYXNkbF9zZXEqIGFyZ3M7Ci0gICAgaWRlbnRpZmllciB2YXJhcmc7Ci0gICAgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uOworICAgIGFyZ190eSB2YXJhcmc7CiAgICAgYXNkbF9zZXEqIGt3b25seWFyZ3M7Ci0gICAgaWRlbnRpZmllciBrd2FyZzsKLSAgICBleHByX3R5IGt3YXJnYW5ub3RhdGlvbjsKLSAgICBhc2RsX3NlcSogZGVmYXVsdHM7CiAgICAgYXNkbF9zZXEqIGt3X2RlZmF1bHRzOworICAgIGFyZ190eSBrd2FyZzsKKyAgICBhc2RsX3NlcSogZGVmYXVsdHM7CiAKICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2FyZ3MpKSB7CiAgICAgICAgIGludCByZXM7CkBAIC02NDgzLDcgKzY1NjYsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBhcmdfdHkgdmFsdWU7CkBAIC02NDk2LDI2ICs2NTc5LDE2IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImFyZ3NcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhcmFyZykpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdmFyYXJnKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9pZGVudGlmaWVyKHRtcCwgJnZhcmFyZywgYXJlbmEpOworICAgICAgICByZXMgPSBvYmoyYXN0X2FyZyh0bXAsICZ2YXJhcmcsIGFyZW5hKTsKICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfQ0xFQVIodG1wKTsKICAgICB9IGVsc2UgewogICAgICAgICB2YXJhcmcgPSBOVUxMOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhcmFyZ2Fubm90YXRpb24pKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJnZhcmFyZ2Fubm90YXRpb24sIGFyZW5hKTsKLSAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXJhcmdhbm5vdGF0aW9uID0gTlVMTDsKLSAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd29ubHlhcmdzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTY1MjcsNyArNjYwMCw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAga3dvbmx5YXJncyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAga3dvbmx5YXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChrd29ubHlhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGFyZ190eSB2YWx1ZTsKQEAgLTY1NDAsNTAgKzY2MTMsNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrd29ubHlhcmdzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZykpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJnKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9pZGVudGlmaWVyKHRtcCwgJmt3YXJnLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3dhcmcgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJnYW5ub3RhdGlvbikpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJnYW5ub3RhdGlvbik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZrd2FyZ2Fubm90YXRpb24sIGFyZW5hKTsKLSAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBrd2FyZ2Fubm90YXRpb24gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICAgICAgUHlfc3NpemVfdCBpOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnRzIGZpZWxkIFwiZGVmYXVsdHNcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICB9Ci0gICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBkZWZhdWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKLSAgICAgICAgaWYgKGRlZmF1bHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7Ci0gICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgICAgIGFzZGxfc2VxX1NFVChkZWZhdWx0cywgaSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVmYXVsdHNcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3X2RlZmF1bHRzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTY1OTUsNyArNjYyNCw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAga3dfZGVmYXVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGt3X2RlZmF1bHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGt3X2RlZmF1bHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC02NjA4LDggKzY2MzcsNDIgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia3dfZGVmYXVsdHNcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICAqb3V0ID0gYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24sIGRlZmF1bHRzLCBrd19kZWZhdWx0cywgYXJlbmEpOworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZykpIHsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJnKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9hcmcodG1wLCAma3dhcmcsIGFyZW5hKTsKKyAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgICBrd2FyZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIFB5X3NzaXplX3QgbGVuOworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cyk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudHMgZmllbGQgXCJkZWZhdWx0c1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgIGRlZmF1bHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgaWYgKGRlZmF1bHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CisgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChkZWZhdWx0cywgaSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVmYXVsdHNcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dfZGVmYXVsdHMsIGt3YXJnLCBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgIGFyZW5hKTsKICAgICByZXR1cm4gMDsKIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHRtcCk7CkBAIC02NjM0LDcgKzY2OTcsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdcIiBtaXNzaW5nIGZyb20gYXJnIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2Fubm90YXRpb24pKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2Fubm90YXRpb24pKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9hbm5vdGF0aW9uKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3MDUsNyArNjc2OCw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcIm5hbWVcIiBtaXNzaW5nIGZyb20gYWxpYXMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYXNuYW1lKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9hc25hbWUpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9hc25hbWUpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjc0MCw3ICs2ODAzLDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiY29udGV4dF9leHByXCIgbWlzc2luZyBmcm9tIHdpdGhpdGVtIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX29wdGlvbmFsX3ZhcnMpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX29wdGlvbmFsX3ZhcnMpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3NzAsNyArNjgzMyw3IEBACiAgICAgaWYgKCFtKSByZXR1cm4gTlVMTDsKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkFTVCIsIChQeU9iamVjdCopJkFTVF90eXBlKSA8IDApIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCkKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlDRl9PTkxZX0FTVCkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIm1vZCIsIChQeU9iamVjdCopbW9kX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJNb2R1bGUiLCAoUHlPYmplY3QqKU1vZHVsZV90eXBlKSA8IDApIHJldHVybgpAQCAtNjg1MCw2ICs2OTEzLDggQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlN0ciIsIChQeU9iamVjdCopU3RyX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJCeXRlcyIsIChQeU9iamVjdCopQnl0ZXNfdHlwZSkgPCAwKSByZXR1cm4KICAgICAgICAgTlVMTDsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk5hbWVDb25zdGFudCIsIChQeU9iamVjdCopTmFtZUNvbnN0YW50X3R5cGUpIDwKKyAgICAgICAgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJFbGxpcHNpcyIsIChQeU9iamVjdCopRWxsaXBzaXNfdHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkF0dHJpYnV0ZSIsIChQeU9iamVjdCopQXR0cmlidXRlX3R5cGUpIDwgMCkKQEAgLTY5NDksNyArNzAxNCw4IEBACiAKIFB5T2JqZWN0KiBQeUFTVF9tb2Qyb2JqKG1vZF90eSB0KQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIGFzdDJvYmpfbW9kKHQpOwogfQogCkBAIC02OTYzLDcgKzcwMjksOCBAQAogICAgIGludCBpc2luc3RhbmNlOwogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTY5ODEsNyArNzA0OCw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogCmRpZmYgLS1naXQgYS9QeXRob24vX3dhcm5pbmdzLmMgYi9QeXRob24vX3dhcm5pbmdzLmMKaW5kZXggZjMzZTQ3Ny4uNjAxM2Q3ZCAxMDA2NDQKLS0tIGEvUHl0aG9uL193YXJuaW5ncy5jCisrKyBiL1B5dGhvbi9fd2FybmluZ3MuYwpAQCAtMTMsNiArMTMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICpfb25jZV9yZWdpc3RyeTsgIC8qIERpY3QgKi8KIHN0YXRpYyBQeU9iamVjdCAqX2RlZmF1bHRfYWN0aW9uOyAvKiBTdHJpbmcgKi8KIAorX1B5X0lERU5USUZJRVIoYXJndik7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiBzdGF0aWMgaW50CiBjaGVja19tYXRjaGVkKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICphcmcpCkBAIC05OSw3ICsxMDEsNyBAQAogCiAKIC8qIFRoZSBpdGVtIGlzIGEgYm9ycm93ZWQgcmVmZXJlbmNlLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorc3RhdGljIFB5T2JqZWN0KgogZ2V0X2ZpbHRlcihQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICp0ZXh0LCBQeV9zc2l6ZV90IGxpbmVubywKICAgICAgICAgICAgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKippdGVtKQogewpAQCAtMTQ0LDIxICsxNDYsMjggQEAKICAgICAgICAgbG5fb2JqID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgNCk7CiAKICAgICAgICAgZ29vZF9tc2cgPSBjaGVja19tYXRjaGVkKG1zZywgdGV4dCk7CisgICAgICAgIGlmIChnb29kX21zZyA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIGdvb2RfbW9kID0gY2hlY2tfbWF0Y2hlZChtb2QsIG1vZHVsZSk7CisgICAgICAgIGlmIChnb29kX21vZCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhjYXRlZ29yeSwgY2F0KTsKKyAgICAgICAgaWYgKGlzX3N1YmNsYXNzID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgbG4gPSBQeUxvbmdfQXNTc2l6ZV90KGxuX29iaik7Ci0gICAgICAgIGlmIChnb29kX21zZyA9PSAtMSB8fCBnb29kX21vZCA9PSAtMSB8fCBpc19zdWJjbGFzcyA9PSAtMSB8fAotICAgICAgICAgICAgKGxuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpKQorICAgICAgICBpZiAobG4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIGlmIChnb29kX21zZyAmJiBpc19zdWJjbGFzcyAmJiBnb29kX21vZCAmJiAobG4gPT0gMCB8fCBsaW5lbm8gPT0gbG4pKQotICAgICAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNTdHJpbmcoYWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBhY3Rpb247CiAgICAgfQogCiAgICAgYWN0aW9uID0gZ2V0X2RlZmF1bHRfYWN0aW9uKCk7Ci0gICAgaWYgKGFjdGlvbiAhPSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGFjdGlvbik7Ci0gICAgfQorICAgIGlmIChhY3Rpb24gIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGFjdGlvbjsKIAogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICBNT0RVTEVfTkFNRSAiLmRlZmF1bHRhY3Rpb24gbm90IGZvdW5kIik7CkBAIC0xOTIsMjMgKzIwMSwyNiBAQAogbm9ybWFsaXplX21vZHVsZShQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBjb25zdCBjaGFyICptb2Rfc3RyOworICAgIGludCBraW5kOworICAgIHZvaWQgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKLSAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoZmlsZW5hbWUpOwotICAgIGlmIChyYyA9PSAtMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZWxzZSBpZiAocmMgPT0gMCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKLQotICAgIG1vZF9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGZpbGVuYW1lKTsKLSAgICBpZiAobW9kX3N0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBsZW4gPSBQeVVuaWNvZGVfR2V0TGVuZ3RoKGZpbGVuYW1lKTsKICAgICBpZiAobGVuIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHVua25vd24+Iik7CisKKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoZmlsZW5hbWUpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShmaWxlbmFtZSk7CisKKyAgICAvKiBpZiBmaWxlbmFtZS5lbmRzd2l0aCgiLnB5Iik6ICovCiAgICAgaWYgKGxlbiA+PSAzICYmCi0gICAgICAgIHN0cm5jbXAobW9kX3N0ciArIChsZW4gLSAzKSwgIi5weSIsIDMpID09IDApIHsKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTMpID09ICcuJyAmJgorICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMikgPT0gJ3AnICYmCisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0xKSA9PSAneScpCisgICAgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKGZpbGVuYW1lLCAwLCBsZW4tMyk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMjUzLDM5ICsyNjUsNjMgQEAKIAogICAgIG5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKGNhdGVnb3J5LCAmUHlJZF9fX25hbWVfXyk7CiAgICAgaWYgKG5hbWUgPT0gTlVMTCkgIC8qIFhYWCBDYW4gYW4gb2JqZWN0IGxhY2sgYSAnX19uYW1lX18nIGF0dHJpYnV0ZT8gKi8KLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgZl9zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIGZfc3RkZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgaWYgKGZfc3RkZXJyID09IE5VTEwpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsb3N0IHN5cy5zdGRlcnJcbiIpOwotICAgICAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICAvKiBQcmludCAiZmlsZW5hbWU6bGluZW5vOiBjYXRlZ29yeTogdGV4dFxuIiAqLwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdChmaWxlbmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QobmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGZfc3RkZXJyKTsKLSAgICBQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7Ci0gICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZfc3RkZXJyKTsKLSAgICBQeV9YREVDUkVGKG5hbWUpOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QoZmlsZW5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKGxpbmVub19zdHIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QodGV4dCwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBQeV9DTEVBUihuYW1lKTsKIAogICAgIC8qIFByaW50ICIgIHNvdXJjZV9saW5lXG4iICovCiAgICAgaWYgKHNvdXJjZWxpbmUpIHsKLSAgICAgICAgY2hhciAqc291cmNlX2xpbmVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzb3VyY2VsaW5lKTsKLSAgICAgICAgaWYgKHNvdXJjZV9saW5lX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgd2hpbGUgKCpzb3VyY2VfbGluZV9zdHIgPT0gJyAnIHx8ICpzb3VyY2VfbGluZV9zdHIgPT0gJ1x0JyB8fAotICAgICAgICAgICAgICAgICpzb3VyY2VfbGluZV9zdHIgPT0gJ1wwMTQnKQotICAgICAgICAgICAgc291cmNlX2xpbmVfc3RyKys7CisgICAgICAgIGludCBraW5kOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBQeV9zc2l6ZV90IGksIGxlbjsKKyAgICAgICAgUHlfVUNTNCBjaDsKKyAgICAgICAgUHlPYmplY3QgKnRydW5jYXRlZDsKIAotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoc291cmNlX2xpbmVfc3RyLCBmX3N0ZGVycik7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc291cmNlbGluZSkgPCAxKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc291cmNlbGluZSk7CisgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShzb3VyY2VsaW5lKTsKKyAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc291cmNlbGluZSk7CisgICAgICAgIGZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpOworICAgICAgICAgICAgaWYgKGNoICE9ICcgJyAmJiBjaCAhPSAnXHQnICYmIGNoICE9ICdcMDE0JykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHRydW5jYXRlZCA9IFB5VW5pY29kZV9TdWJzdHJpbmcoc291cmNlbGluZSwgaSwgbGVuKTsKKyAgICAgICAgaWYgKHRydW5jYXRlZCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qoc291cmNlbGluZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgIFB5X0RFQ1JFRih0cnVuY2F0ZWQpOwogICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwogICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGlmIChfUHlfRGlzcGxheVNvdXJjZUxpbmUoZl9zdGRlcnIsIGZpbGVuYW1lLCBsaW5lbm8sIDIpIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgZWxzZSB7CisgICAgICAgIF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgZmlsZW5hbWUsIGxpbmVubywgMik7CisgICAgfQorCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKQEAgLTI5Niw5ICszMzIsMTYgQEAKIHsKICAgICBQeU9iamVjdCAqa2V5ID0gTlVMTCwgKnRleHQgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTCwgKmxpbmVub19vYmogPSBOVUxMOwogICAgIFB5T2JqZWN0ICppdGVtID0gUHlfTm9uZTsKLSAgICBjb25zdCBjaGFyICphY3Rpb247CisgICAgUHlPYmplY3QgKmFjdGlvbjsKICAgICBpbnQgcmM7CiAKKyAgICAvKiBtb2R1bGUgY2FuIGJlIE5vbmUgaWYgYSB3YXJuaW5nIGlzIGVtaXR0ZWQgbGF0ZSBkdXJpbmcgUHl0aG9uIHNodXRkb3duLgorICAgICAgIEluIHRoaXMgY2FzZSwgdGhlIFB5dGhvbiB3YXJuaW5ncyBtb2R1bGUgd2FzIHByb2JhYmx5IHVubG9hZGVkLCBmaWx0ZXJzCisgICAgICAgYXJlIG5vIG1vcmUgYXZhaWxhYmxlIHRvIGNob29zZSBhcyBhY3Rpb24uIEl0IGlzIHNhZmVyIHRvIGlnbm9yZSB0aGUKKyAgICAgICB3YXJuaW5nIGFuZCBkbyBub3RoaW5nLiAqLworICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKICAgICBpZiAocmVnaXN0cnkgJiYgIVB5RGljdF9DaGVjayhyZWdpc3RyeSkgJiYgKHJlZ2lzdHJ5ICE9IFB5X05vbmUpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICIncmVnaXN0cnknIG11c3QgYmUgYSBkaWN0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzU0LDcgKzM5Nyw3IEBACiAgICAgaWYgKGFjdGlvbiA9PSBOVUxMKQogICAgICAgICBnb3RvIGNsZWFudXA7CiAKLSAgICBpZiAoc3RyY21wKGFjdGlvbiwgImVycm9yIikgPT0gMCkgeworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJlcnJvciIpID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KGNhdGVnb3J5LCBtZXNzYWdlKTsKICAgICAgICAgZ290byBjbGVhbnVwOwogICAgIH0KQEAgLTM2MiwxMyArNDA1LDEzIEBACiAgICAgLyogU3RvcmUgaW4gdGhlIHJlZ2lzdHJ5IHRoYXQgd2UndmUgYmVlbiBoZXJlLCAqZXhjZXB0KiB3aGVuIHRoZSBhY3Rpb24KICAgICAgICBpcyAiYWx3YXlzIi4gKi8KICAgICByYyA9IDA7Ci0gICAgaWYgKHN0cmNtcChhY3Rpb24sICJhbHdheXMiKSAhPSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSAmJgogICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHJlZ2lzdHJ5LCBrZXksIFB5X1RydWUpIDwgMCkKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImlnbm9yZSIpID09IDApCisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImlnbm9yZSIpID09IDApCiAgICAgICAgICAgICBnb3RvIHJldHVybl9ub25lOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAib25jZSIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAib25jZSIpID09IDApIHsKICAgICAgICAgICAgIGlmIChyZWdpc3RyeSA9PSBOVUxMIHx8IHJlZ2lzdHJ5ID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICByZWdpc3RyeSA9IGdldF9vbmNlX3JlZ2lzdHJ5KCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwpCkBAIC0zNzcsMjQgKzQyMCwxNSBAQAogICAgICAgICAgICAgLyogX29uY2VfcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5KV0gPSAxICovCiAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJtb2R1bGUiKSA9PSAwKSB7CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKICAgICAgICAgICAgIC8qIHJlZ2lzdHJ5Wyh0ZXh0LCBjYXRlZ29yeSwgMCldID0gMSAqLwogICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ICE9IE5VTEwgJiYgcmVnaXN0cnkgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICByYyA9IHVwZGF0ZV9yZWdpc3RyeShyZWdpc3RyeSwgdGV4dCwgY2F0ZWdvcnksIDApOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewotICAgICAgICAgICAgUHlPYmplY3QgKnRvX3N0ciA9IFB5T2JqZWN0X1N0cihpdGVtKTsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycl9zdHIgPSAiPz8/IjsKLQotICAgICAgICAgICAgaWYgKHRvX3N0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZXJyX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodG9fc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJkZWZhdWx0IikgIT0gMCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJVbnJlY29nbml6ZWQgYWN0aW9uICglcykgaW4gd2FybmluZ3MuZmlsdGVyczpcbiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24sIGVycl9zdHIpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0b19zdHIpOworICAgICAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVSKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgaXRlbSk7CiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjgsMTMgKzU2MiwxMiBAQAogICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZygqbW9kdWxlKTsKICAgICAgICAgKmZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgaWYgKHN0cmNtcChtb2R1bGVfc3RyLCAiX19tYWluX18iKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqYXJndiA9IFB5U3lzX0dldE9iamVjdCgiYXJndiIpOwotICAgICAgICAgICAgaWYgKGFyZ3YgIT0gTlVMTCAmJiBQeUxpc3RfU2l6ZShhcmd2KSA+IDApIHsKKyAgICAgICAgaWYgKCptb2R1bGUgIT0gUHlfTm9uZSAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygqbW9kdWxlLCAiX19tYWluX18iKSA9PSAwKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYXJndiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9hcmd2KTsKKyAgICAgICAgICAgIC8qIFB5TGlzdF9DaGVjaygpIGlzIG5lZWRlZCBiZWNhdXNlIHN5cy5hcmd2IGlzIHNldCB0byBOb25lIGR1cmluZworICAgICAgICAgICAgICAgUHl0aG9uIGZpbmFsaXphdGlvbiAqLworICAgICAgICAgICAgaWYgKGFyZ3YgIT0gTlVMTCAmJiBQeUxpc3RfQ2hlY2soYXJndikgJiYgUHlMaXN0X1NpemUoYXJndikgPiAwKSB7CiAgICAgICAgICAgICAgICAgaW50IGlzX3RydWU7CiAgICAgICAgICAgICAgICAgKmZpbGVuYW1lID0gUHlMaXN0X0dldEl0ZW0oYXJndiwgMCk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CkBAIC01NTQsOCArNTg3LDggQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8qIGVtYmVkZGVkIGludGVycHJldGVycyBkb24ndCBoYXZlIHN5cy5hcmd2LCBzZWUgYnVnICM4MzkxNTEgKi8KICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKCpmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpIHsKQEAgLTY0OSw3ICs2ODIsNyBAQAogICAgIFB5T2JqZWN0ICpyZWdpc3RyeSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9nbG9iYWxzID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT09pfE9PTzp3YXJuX2V4cGxpY2l0IiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09VaXxPT086d2Fybl9leHBsaWNpdCIsCiAgICAgICAgICAgICAgICAga3dkX2xpc3QsICZtZXNzYWdlLCAmY2F0ZWdvcnksICZmaWxlbmFtZSwgJmxpbmVubywgJm1vZHVsZSwKICAgICAgICAgICAgICAgICAmcmVnaXN0cnksICZtb2R1bGVfZ2xvYmFscykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzA3LDE0ICs3NDAsMTQgQEAKIAogICAgICAgICAvKiBIYW5kbGUgdGhlIHdhcm5pbmcuICovCiAgICAgICAgIHJldHVybmVkID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgc291cmNlX2xpbmUpOwogICAgICAgICBQeV9ERUNSRUYoc291cmNlX2xpc3QpOwogICAgICAgICByZXR1cm4gcmV0dXJuZWQ7CiAgICAgfQogCiAgc3RhbmRhcmRfY2FsbDoKICAgICByZXR1cm4gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywgbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIE5VTEwpOwogfQogCiAKQEAgLTc4NiwxMSArODE5LDI2IEBACiAKIC8qIFdhcm5pbmcgd2l0aCBleHBsaWNpdCBvcmlnaW4gKi8KIGludAorUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQorICAgICAgICBjYXRlZ29yeSA9IFB5RXhjX1J1bnRpbWVXYXJuaW5nOworICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIHJlZ2lzdHJ5LCBOVUxMKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9ERUNSRUYocmVzKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50CiBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICp0ZXh0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IGxpbmVubywKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyLCBQeU9iamVjdCAqcmVnaXN0cnkpCiB7Ci0gICAgUHlPYmplY3QgKnJlczsKICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHRleHQpOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKICAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKQEAgLTgwMCwxOCArODQ4LDEyIEBACiAgICAgICAgIGdvdG8gZXhpdDsKICAgICBpZiAobW9kdWxlX3N0ciAhPSBOVUxMKSB7CiAgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZHVsZV9zdHIpOwotICAgICAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAotICAgIGlmIChjYXRlZ29yeSA9PSBOVUxMKQotICAgICAgICBjYXRlZ29yeSA9IFB5RXhjX1J1bnRpbWVXYXJuaW5nOwotICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sIG1vZHVsZSwgcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXhpdDsKLSAgICBQeV9ERUNSRUYocmVzKTsKLSAgICByZXQgPSAwOworICAgIHJldCA9IFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSk7CiAKICBleGl0OgogICAgIFB5X1hERUNSRUYobWVzc2FnZSk7CkBAIC04MjAsNiArODYyLDQ5IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAoraW50CitQeUVycl9XYXJuRXhwbGljaXRGb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptb2R1bGVfc3RyLCBQeU9iamVjdCAqcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgUHlPYmplY3QgKm1lc3NhZ2U7CisgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGludCByZXQgPSAtMTsKKyAgICB2YV9saXN0IHZhcmdzOworCisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAobW9kdWxlX3N0ciAhPSBOVUxMKSB7CisgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG1vZHVsZV9zdHIpOworICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorCisjaWZkZWYgSEFWRV9TVERBUkdfUFJPVE9UWVBFUworICAgIHZhX3N0YXJ0KHZhcmdzLCBmb3JtYXQpOworI2Vsc2UKKyAgICB2YV9zdGFydCh2YXJncyk7CisjZW5kaWYKKyAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOworICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgcmVzID0gd2Fybl9leHBsaWNpdChjYXRlZ29yeSwgbWVzc2FnZSwgZmlsZW5hbWUsIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIHJlZ2lzdHJ5LCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOworICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICB2YV9lbmQodmFyZ3MpOworZXhpdDoKKyAgICBQeV9YREVDUkVGKG1vZHVsZSk7CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHJldDsKK30KKwogCiBQeURvY19TVFJWQVIod2Fybl9kb2MsCiAiSXNzdWUgYSB3YXJuaW5nLCBvciBtYXliZSBpZ25vcmUgaXQgb3IgcmFpc2UgYW4gZXhjZXB0aW9uLiIpOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2FzZGwuYyBiL1B5dGhvbi9hc2RsLmMKaW5kZXggZTdlMzI4MC4uNzRmYTk0MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzZGwuYworKysgYi9QeXRob24vYXNkbC5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgImFzZGwuaCIKIAogYXNkbF9zZXEgKgotYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCitfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXNkbF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CkBAIC0zMyw3ICszMyw3IEBACiB9CiAKIGFzZGxfaW50X3NlcSAqCi1hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCitfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfaW50X3NlcSAqc2VxID0gTlVMTDsKICAgICBzaXplX3QgbiA9IChzaXplID8gKHNpemVvZih2b2lkICopICogKHNpemUgLSAxKSkgOiAwKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc3QuYyBiL1B5dGhvbi9hc3QuYwppbmRleCA5YTBiMDY0Li4zYmQyNGZkIDEwMDY0NAotLS0gYS9QeXRob24vYXN0LmMKKysrIGIvUHl0aG9uL2FzdC5jCkBAIC0xMDksMjIgKzEwOSwxNCBAQAogewogICAgIGlmICghdmFsaWRhdGVfYXJncyhhcmdzLT5hcmdzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24pIHsKLSAgICAgICAgaWYgKCFhcmdzLT52YXJhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidmFyYXJnYW5ub3RhdGlvbiBidXQgbm8gdmFyYXJnIG9uIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZV9leHByKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT52YXJhcmcgJiYgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uCisgICAgICAgICYmICF2YWxpZGF0ZV9leHByKGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+a3dvbmx5YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT5rd2FyZ2Fubm90YXRpb24pIHsKLSAgICAgICAgaWYgKCFhcmdzLT5rd2FyZykgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJrd2FyZ2Fubm90YXRpb24gYnV0IG5vIGt3YXJnIG9uIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZV9leHByKGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiwgTG9hZCkpCisgICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uIAorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoYXNkbF9zZXFfTEVOKGFyZ3MtPmRlZmF1bHRzKSA+IGFzZGxfc2VxX0xFTihhcmdzLT5hcmdzKSkgewpAQCAtMjgyLDYgKzI3NCw3IEBACiAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHBycyhleHAtPnYuVHVwbGUuZWx0cywgY3R4LCAwKTsKICAgICAvKiBUaGVzZSBsYXN0IGNhc2VzIGRvbid0IGhhdmUgYW55IGNoZWNraW5nLiAqLwogICAgIGNhc2UgTmFtZV9raW5kOgorICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICByZXR1cm4gMTsKICAgICBkZWZhdWx0OgpAQCAtNDk4LDcgKzQ5MSw3IEBACiBzdHJ1Y3QgY29tcGlsaW5nIHsKICAgICBjaGFyICpjX2VuY29kaW5nOyAvKiBzb3VyY2UgZW5jb2RpbmcgKi8KICAgICBQeUFyZW5hICpjX2FyZW5hOyAvKiBhcmVuYSBmb3IgYWxsb2NhdGluZyBtZW1lb3J5ICovCi0gICAgY29uc3QgY2hhciAqY19maWxlbmFtZTsgLyogZmlsZW5hbWUgKi8KKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsgLyogZmlsZW5hbWUgKi8KICAgICBQeU9iamVjdCAqY19ub3JtYWxpemU7IC8qIE5vcm1hbGl6YXRpb24gZnVuY3Rpb24gZnJvbSB1bmljb2RlZGF0YS4gKi8KICAgICBQeU9iamVjdCAqY19ub3JtYWxpemVfYXJnczsgLyogTm9ybWFsaXphdGlvbiBhcmd1bWVudCB0dXBsZS4gKi8KIH07CkBAIC01NjcsNyArNTYwLDEwIEBACiAgICAgICAgIGlkID0gaWQyOwogICAgIH0KICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmaWQpOwotICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgaWQpOworICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBpZDsKIH0KIApAQCAtNTc3LDI0ICs1NzMsMTMgQEAKIGFzdF9lcnJvcihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBjb25zdCBjaGFyICplcnJtc2cpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqZXJyc3RyLCAqbG9jLCAqdG1wOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYmo7CiAKLSAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIExJTkVOTyhuKSk7CiAgICAgaWYgKCFsb2MpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBsb2MgPSBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoYy0+Y19maWxlbmFtZSkgewotICAgICAgICBmaWxlbmFtZV9vYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGMtPmNfZmlsZW5hbWUpOwotICAgICAgICBpZiAoIWZpbGVuYW1lX29iaikgewotICAgICAgICAgICAgUHlfREVDUkVGKGxvYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlfTm9uZTsKLSAgICB9Ci0gICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE5paU4pIiwgZmlsZW5hbWVfb2JqLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgbG9jKTsKKyAgICB0bXAgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTikiLCBjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXRtcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZXJyc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZXJybXNnKTsKQEAgLTY3Nyw4ICs2NjIsOCBAQAogKi8KIAogbW9kX3R5Ci1QeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQorUHlBU1RfRnJvbU5vZGVPYmplY3QoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgaW50IGksIGosIGssIG51bTsKICAgICBhc2RsX3NlcSAqc3RtdHMgPSBOVUxMOwpAQCAtNjg4LDYgKzY3Myw3IEBACiAgICAgbW9kX3R5IHJlcyA9IE5VTEw7CiAKICAgICBjLmNfYXJlbmEgPSBhcmVuYTsKKyAgICAvKiBib3Jyb3dlZCByZWZlcmVuY2UgKi8KICAgICBjLmNfZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICBjLmNfbm9ybWFsaXplID0gYy5jX25vcm1hbGl6ZV9hcmdzID0gTlVMTDsKICAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmNmX2ZsYWdzICYgUHlDRl9TT1VSQ0VfSVNfVVRGOCkgewpAQCAtNzEwLDcgKzY5Niw3IEBACiAgICAgayA9IDA7CiAgICAgc3dpdGNoIChUWVBFKG4pKSB7CiAgICAgICAgIGNhc2UgZmlsZV9pbnB1dDoKLSAgICAgICAgICAgIHN0bXRzID0gYXNkbF9zZXFfbmV3KG51bV9zdG10cyhuKSwgYXJlbmEpOworICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bV9zdG10cyhuKSwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobikgLSAxOyBpKyspIHsKQEAgLTc1MCw3ICs3MzYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNhc2Ugc2luZ2xlX2lucHV0OgogICAgICAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IE5FV0xJTkUpIHsKLSAgICAgICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldygxLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGFyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0bXRzKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc3RtdHMsIDAsIFBhc3Mobi0+bl9saW5lbm8sIG4tPm5fY29sX29mZnNldCwKQEAgLTc2Miw3ICs3NDgsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIG51bSA9IG51bV9zdG10cyhuKTsKLSAgICAgICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW0sIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBzdG10cyA9IF9QeV9hc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgaWYgKG51bSA9PSAxKSB7CkBAIC04MDEsNiArNzg3LDIxIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorbW9kX3R5CitQeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsCisgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBtb2RfdHkgbW9kOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworCit9CisKIC8qIFJldHVybiB0aGUgQVNUIHJlcHIuIG9mIHRoZSBvcGVyYXRvciByZXByZXNlbnRlZCBhcyBzeW50YXggKHwsIF4sIGV0Yy4pCiAqLwogCkBAIC05MDMsNyArOTA0LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgICAgIGlmIChjdHggPT0gU3RvcmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgZS0+di5OYW1lLmlkLCBuLCAxKSkKKyAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgZS0+di5OYW1lLmlkLCBuLCAwKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGZvcmJpZGRlbl9uYW1lKCkgY2FsbHMgYXN0X2Vycm9yKCkgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGUtPnYuTmFtZS5jdHggPSBjdHg7CkBAIC05NTUsNiArOTU2LDkgQEAKICAgICAgICAgY2FzZSBCeXRlc19raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gImxpdGVyYWwiOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgICAgICBleHByX25hbWUgPSAia2V5d29yZCI7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gIkVsbGlwc2lzIjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA5NSw3ICsxMDk5LDcgQEAKICAgICBpbnQgaTsKICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdCB8fCBUWVBFKG4pID09IHRlc3RsaXN0X3N0YXJfZXhwciB8fCBUWVBFKG4pID09IHRlc3RsaXN0X2NvbXApOwogCi0gICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMTE5LDYgKzExMjMsNyBAQAogICAgIGlkZW50aWZpZXIgbmFtZTsKICAgICBleHByX3R5IGFubm90YXRpb24gPSBOVUxMOwogICAgIG5vZGUgKmNoOworICAgIGFyZ190eSB0bXA7CiAKICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZnBkZWYgfHwgVFlQRShuKSA9PSB2ZnBkZWYpOwogICAgIGNoID0gQ0hJTEQobiwgMCk7CkBAIC0xMTM0LDcgKzExMzksMTMgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBhcmcobmFtZSwgYW5ub3RhdGlvbiwgYy0+Y19hcmVuYSk7CisgICAgdG1wID0gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIGlmICghdG1wKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRtcC0+bGluZW5vID0gTElORU5PKG4pOworICAgIHRtcC0+Y29sX29mZnNldCA9IG4tPm5fY29sX29mZnNldDsKKyAgICByZXR1cm4gdG1wOwogfQogCiAvKiByZXR1cm5zIC0xIGlmIGZhaWxlZCB0byBoYW5kbGUga2V5d29yZCBvbmx5IGFyZ3VtZW50cwpAQCAtMTIzMCwxNSArMTI0MSwxMyBAQAogICAgIGludCBpLCBqLCBrLCBucG9zYXJncyA9IDAsIG5rd29ubHlhcmdzID0gMDsKICAgICBpbnQgbnBvc2RlZmF1bHRzID0gMCwgZm91bmRfZGVmYXVsdCA9IDA7CiAgICAgYXNkbF9zZXEgKnBvc2FyZ3MsICpwb3NkZWZhdWx0cywgKmt3b25seWFyZ3MsICprd2RlZmF1bHRzOwotICAgIGlkZW50aWZpZXIgdmFyYXJnID0gTlVMTCwga3dhcmcgPSBOVUxMOworICAgIGFyZ190eSB2YXJhcmcgPSBOVUxMLCBrd2FyZyA9IE5VTEw7CiAgICAgYXJnX3R5IGFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb24gPSBOVUxMLCBrd2FyZ2Fubm90YXRpb24gPSBOVUxMOwogICAgIG5vZGUgKmNoOwogCiAgICAgaWYgKFRZUEUobikgPT0gcGFyYW1ldGVycykgewogICAgICAgICBpZiAoTkNIKG4pID09IDIpIC8qICgpIGFzIGFyZ3VtZW50IGxpc3QgKi8KLSAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBuID0gQ0hJTEQobiwgMSk7CiAgICAgfQogICAgIGFzc2VydChUWVBFKG4pID09IHR5cGVkYXJnc2xpc3QgfHwgVFlQRShuKSA9PSB2YXJhcmdzbGlzdCk7CkBAIC0xMjcwLDIyICsxMjc5LDIyIEBACiAgICAgICAgIGlmIChUWVBFKGNoKSA9PSBET1VCTEVTVEFSKSBicmVhazsKICAgICAgICAgaWYgKFRZUEUoY2gpID09IHRmcGRlZiB8fCBUWVBFKGNoKSA9PSB2ZnBkZWYpIG5rd29ubHlhcmdzKys7CiAgICAgfQotICAgIHBvc2FyZ3MgPSAobnBvc2FyZ3MgPyBhc2RsX3NlcV9uZXcobnBvc2FyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgcG9zYXJncyA9IChucG9zYXJncyA/IF9QeV9hc2RsX3NlcV9uZXcobnBvc2FyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFwb3NhcmdzICYmIG5wb3NhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBrd29ubHlhcmdzID0gKG5rd29ubHlhcmdzID8KLSAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIWt3b25seWFyZ3MgJiYgbmt3b25seWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHBvc2RlZmF1bHRzID0gKG5wb3NkZWZhdWx0cyA/Ci0gICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhucG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobnBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICghcG9zZGVmYXVsdHMgJiYgbnBvc2RlZmF1bHRzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBUaGUgbGVuZ3RoIG9mIGt3b25seWFyZ3MgYW5kIGt3ZGVmYXVsdHMgYXJlIHNhbWUKICAgICAgICBzaW5jZSB3ZSBzZXQgTlVMTCBhcyBkZWZhdWx0IGZvciBrZXl3b3JkIG9ubHkgYXJndW1lbnQgdy9vIGRlZmF1bHQKICAgICAgICAtIHdlIGhhdmUgc2VxdWVuY2UgZGF0YSBzdHJ1Y3R1cmUsIGJ1dCBubyBkaWN0aW9uYXJ5ICovCiAgICAga3dkZWZhdWx0cyA9IChua3dvbmx5YXJncyA/Ci0gICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOworICAgICAgICAgICAgICAgICAgIF9QeV9hc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFrd2RlZmF1bHRzICYmIG5rd29ubHlhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTM0NCwxNyArMTM1MywxMCBAQAogICAgICAgICAgICAgICAgICAgICBpID0gcmVzOyAvKiByZXMgaGFzIG5ldyBwb3NpdGlvbiB0byBwcm9jZXNzICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB2YXJhcmcgPSBORVdfSURFTlRJRklFUihDSElMRChjaCwgMCkpOworICAgICAgICAgICAgICAgICAgICB2YXJhcmcgPSBhc3RfZm9yX2FyZyhjLCBjaCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyYXJnKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCB2YXJhcmcsIENISUxEKGNoLCAwKSwgMCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKE5DSChjaCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIG9uIHRoZSB2YXJhcmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ2Fubm90YXRpb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyYXJnYW5ub3RhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGkgKz0gMzsKICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBOQ0gobikgJiYgKFRZUEUoQ0hJTEQobiwgaSkpID09IHRmcGRlZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgVFlQRShDSElMRChuLCBpKSkgPT0gdmZwZGVmKSkgewpAQCAtMTM2OSwxNyArMTM3MSw5IEBACiAgICAgICAgICAgICBjYXNlIERPVUJMRVNUQVI6CiAgICAgICAgICAgICAgICAgY2ggPSBDSElMRChuLCBpKzEpOyAgLyogdGZwZGVmICovCiAgICAgICAgICAgICAgICAgYXNzZXJ0KFRZUEUoY2gpID09IHRmcGRlZiB8fCBUWVBFKGNoKSA9PSB2ZnBkZWYpOwotICAgICAgICAgICAgICAgIGt3YXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQoY2gsIDApKTsKKyAgICAgICAgICAgICAgICBrd2FyZyA9IGFzdF9mb3JfYXJnKGMsIGNoKTsKICAgICAgICAgICAgICAgICBpZiAoIWt3YXJnKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgLyogdGhlcmUgaXMgYW4gYW5ub3RhdGlvbiBvbiB0aGUga3dhcmcgKi8KLSAgICAgICAgICAgICAgICAgICAga3dhcmdhbm5vdGF0aW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKGNoLCAyKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgha3dhcmdhbm5vdGF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjLCBrd2FyZywgQ0hJTEQoY2gsIDApLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzODksOCArMTM4Myw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGFyZ3VtZW50cyhwb3NhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsIGt3YXJnLAotICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24sIHBvc2RlZmF1bHRzLCBrd2RlZmF1bHRzLCBjLT5jX2FyZW5hKTsKKyAgICByZXR1cm4gYXJndW1lbnRzKHBvc2FyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dkZWZhdWx0cywga3dhcmcsIHBvc2RlZmF1bHRzLCBjLT5jX2FyZW5hKTsKIH0KIAogc3RhdGljIGV4cHJfdHkKQEAgLTE0NjksNyArMTQ2Miw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgZGVjb3JhdG9ycyk7Ci0gICAgZGVjb3JhdG9yX3NlcSA9IGFzZGxfc2VxX25ldyhOQ0gobiksIGMtPmNfYXJlbmEpOworICAgIGRlY29yYXRvcl9zZXEgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFkZWNvcmF0b3Jfc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTU1NSw4ICsxNTQ4LDcgQEAKICAgICBleHByX3R5IGV4cHJlc3Npb247CiAKICAgICBpZiAoTkNIKG4pID09IDMpIHsKLSAgICAgICAgYXJncyA9IGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGMtPmNfYXJlbmEpOworICAgICAgICBhcmdzID0gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFyZ3MpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAyKSk7CkBAIC0xNjY2LDcgKzE2NTgsNyBAQAogICAgIGlmIChuX2ZvcnMgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgY29tcHMgPSBhc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKKyAgICBjb21wcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9mb3JzLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWNvbXBzKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTcwNyw3ICsxNjk5LDcgQEAKICAgICAgICAgICAgIGlmIChuX2lmcyA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgaWZzID0gYXNkbF9zZXFfbmV3KG5faWZzLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmcyA9IF9QeV9hc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFpZnMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE4MTksMTEgKzE4MTEsMjEgQEAKIAogICAgIHN3aXRjaCAoVFlQRShjaCkpIHsKICAgICBjYXNlIE5BTUU6IHsKLSAgICAgICAgLyogQWxsIG5hbWVzIHN0YXJ0IGluIExvYWQgY29udGV4dCwgYnV0IG1heSBsYXRlciBiZQotICAgICAgICAgICBjaGFuZ2VkLiAqLwotICAgICAgICBQeU9iamVjdCAqbmFtZSA9IE5FV19JREVOVElGSUVSKGNoKTsKKyAgICAgICAgUHlPYmplY3QgKm5hbWU7CisgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBTVFIoY2gpOworICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHMpOworICAgICAgICBpZiAobGVuID49IDQgJiYgbGVuIDw9IDUpIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJOb25lIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9Ob25lLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiVHJ1ZSIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOYW1lQ29uc3RhbnQoUHlfVHJ1ZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIkZhbHNlIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9GYWxzZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICB9CisgICAgICAgIG5hbWUgPSBuZXdfaWRlbnRpZmllcihzLCBjKTsKICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIEFsbCBuYW1lcyBzdGFydCBpbiBMb2FkIGNvbnRleHQsIGJ1dCBtYXkgbGF0ZXIgYmUgY2hhbmdlZC4gKi8KICAgICAgICAgcmV0dXJuIE5hbWUobmFtZSwgTG9hZCwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBjYXNlIFNUUklORzogewpAQCAtMTg0OCwxMiArMTg1MCwxNSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBhc3RfZXJyb3IoYywgbiwgYnVmKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHlwZSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHRiYWNrKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKGJ5dGVzbW9kZSkKICAgICAgICAgICAgIHJldHVybiBCeXRlcyhzdHIsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgZWxzZQpAQCAtMTg2NCw3ICsxODY5LDEwIEBACiAgICAgICAgIGlmICghcHludW0pCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHB5bnVtKTsKKyAgICAgICAgaWYgKFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgcHludW0pIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHB5bnVtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBOdW0ocHludW0sIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgY2FzZSBFTExJUFNJUzogLyogRWxsaXBzaXMgKi8KQEAgLTE5MTMsNyArMTkyMSw3IEBACiAgICAgICAgICAgICAvKiBpdCdzIGEgc2ltcGxlIHNldCAqLwogICAgICAgICAgICAgYXNkbF9zZXEgKmVsdHM7CiAgICAgICAgICAgICBzaXplID0gKE5DSChjaCkgKyAxKSAvIDI7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghZWx0cykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0goY2gpOyBpICs9IDIpIHsKQEAgLTE5MzIsMTEgKzE5NDAsMTEgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIGl0J3MgYSBkaWN0ICovCiAgICAgICAgICAgICBzaXplID0gKE5DSChjaCkgKyAxKSAvIDQ7IC8qICsxIGluIGNhc2Ugbm8gdHJhaWxpbmcgY29tbWEgKi8KLSAgICAgICAgICAgIGtleXMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBrZXlzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICgha2V5cykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgdmFsdWVzID0gYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgdmFsdWVzID0gX1B5X2FzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghdmFsdWVzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMDkzLDE1ICsyMTAxLDIyIEBACiAgICAgICAgIGlmIChOQ0gobikgPT0gMikKICAgICAgICAgICAgIHJldHVybiBDYWxsKGxlZnRfZXhwciwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTElORU5PKG4pLAogICAgICAgICAgICAgICAgICAgICAgICAgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3JfY2FsbChjLCBDSElMRChuLCAxKSwgbGVmdF9leHByKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBleHByX3R5IHRtcCA9IGFzdF9mb3JfY2FsbChjLCBDSElMRChuLCAxKSwgbGVmdF9leHByKTsKKyAgICAgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICB0bXAtPmxpbmVubyA9IExJTkVOTyhuKTsKKyAgICAgICAgICAgIHRtcC0+Y29sX29mZnNldCA9IG4tPm5fY29sX29mZnNldDsKKyAgICAgICAgICAgIHJldHVybiB0bXA7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gRE9UICkgewogICAgICAgICBQeU9iamVjdCAqYXR0cl9pZCA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIDEpKTsKICAgICAgICAgaWYgKCFhdHRyX2lkKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHJldHVybiBBdHRyaWJ1dGUobGVmdF9leHByLCBhdHRyX2lkLCBMb2FkLAotICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8oQ0hJTEQobiwgMSkpLCBDSElMRChuLCAxKS0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFJFUShDSElMRChuLCAwKSwgTFNRQik7CkBAIC0yMTI0LDcgKzIxMzksNyBAQAogICAgICAgICAgICAgZXhwcl90eSBlOwogICAgICAgICAgICAgaW50IHNpbXBsZSA9IDE7CiAgICAgICAgICAgICBhc2RsX3NlcSAqc2xpY2VzLCAqZWx0czsKLSAgICAgICAgICAgIHNsaWNlcyA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHNsaWNlcyA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXNsaWNlcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBOQ0gobik7IGogKz0gMikgewpAQCAtMjE0MCw3ICsyMTU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGV4dHJhY3QgSW5kZXggdmFsdWVzIGFuZCBwdXQgdGhlbSBpbiBhIFR1cGxlICovCi0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGFzZGxfc2VxX0xFTihzbGljZXMpLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KGFzZGxfc2VxX0xFTihzbGljZXMpLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghZWx0cykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBhc2RsX3NlcV9MRU4oc2xpY2VzKTsgKytqKSB7CkBAIC0yMjAyLDggKzIyMTcsNiBAQAogICAgICAgICB0bXAgPSBhc3RfZm9yX3RyYWlsZXIoYywgY2gsIGUpOwogICAgICAgICBpZiAoIXRtcCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB0bXAtPmxpbmVubyA9IGUtPmxpbmVubzsKLSAgICAgICAgdG1wLT5jb2xfb2Zmc2V0ID0gZS0+Y29sX29mZnNldDsKICAgICAgICAgZSA9IHRtcDsKICAgICB9CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgTkNIKG4pIC0gMSkpID09IGZhY3RvcikgewpAQCAtMjI3NSw3ICsyMjg4LDcgQEAKICAgICAgICAgICAgICAgICBuID0gQ0hJTEQobiwgMCk7CiAgICAgICAgICAgICAgICAgZ290byBsb29wOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgc2VxID0gX1B5X2FzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgICAgIGlmICghc2VxKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0yMzExLDEwICsyMzI0LDEwIEBACiAgICAgICAgICAgICAgICAgZXhwcl90eSBleHByZXNzaW9uOwogICAgICAgICAgICAgICAgIGFzZGxfaW50X3NlcSAqb3BzOwogICAgICAgICAgICAgICAgIGFzZGxfc2VxICpjbXBzOwotICAgICAgICAgICAgICAgIG9wcyA9IGFzZGxfaW50X3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICAgICAgb3BzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFvcHMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGNtcHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICAgICAgY21wcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFjbXBzKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KQEAgLTI0NDAsMTAgKzI0NTMsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgYXJncyA9IGFzZGxfc2VxX25ldyhuYXJncyArIG5nZW5zLCBjLT5jX2FyZW5hKTsKKyAgICBhcmdzID0gX1B5X2FzZGxfc2VxX25ldyhuYXJncyArIG5nZW5zLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGtleXdvcmRzID0gYXNkbF9zZXFfbmV3KG5rZXl3b3JkcywgYy0+Y19hcmVuYSk7CisgICAga2V5d29yZHMgPSBfUHlfYXNkbF9zZXFfbmV3KG5rZXl3b3JkcywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFrZXl3b3JkcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmFyZ3MgPSAwOwpAQCAtMjYyMCw3ICsyNjMzLDcgQEAKIAogICAgICAgICAvKiBhIG5vcm1hbCBhc3NpZ25tZW50ICovCiAgICAgICAgIFJFUShDSElMRChuLCAxKSwgRVFVQUwpOwotICAgICAgICB0YXJnZXRzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICB0YXJnZXRzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCF0YXJnZXRzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobikgLSAyOyBpICs9IDIpIHsKQEAgLTI2NjEsNyArMjY3NCw3IEBACiAKICAgICBSRVEobiwgZXhwcmxpc3QpOwogCi0gICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjg0NiwxMyArMjg1OSwxOSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBzdHIgPSB1bmk7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnN0cik7Ci0gICAgICAgICAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICAgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cikgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzKHN0ciwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTVEFSOgogICAgICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIioiKTsKLSAgICAgICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cikgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYWxpYXMoc3RyLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTI4ODUsNyArMjkwNCw3IEBACiAgICAgaWYgKFRZUEUobikgPT0gaW1wb3J0X25hbWUpIHsKICAgICAgICAgbiA9IENISUxEKG4sIDEpOwogICAgICAgICBSRVEobiwgZG90dGVkX2FzX25hbWVzKTsKLSAgICAgICAgYWxpYXNlcyA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgYWxpYXNlcyA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYWxpYXNlcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0yOTQ3LDcgKzI5NjYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBhbGlhc2VzID0gYXNkbF9zZXFfbmV3KChuX2NoaWxkcmVuICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgYWxpYXNlcyA9IF9QeV9hc2RsX3NlcV9uZXcoKG5fY2hpbGRyZW4gKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjk4Niw3ICszMDA1LDcgQEAKICAgICBpbnQgaTsKIAogICAgIFJFUShuLCBnbG9iYWxfc3RtdCk7Ci0gICAgcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDE7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMzAwNyw3ICszMDI2LDcgQEAKICAgICBpbnQgaTsKIAogICAgIFJFUShuLCBub25sb2NhbF9zdG10KTsKLSAgICBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm9yIChpID0gMTsgaSA8IE5DSChuKTsgaSArPSAyKSB7CkBAIC0zMDYwLDcgKzMwNzksNyBAQAogICAgIFJFUShuLCBzdWl0ZSk7CiAKICAgICB0b3RhbCA9IG51bV9zdG10cyhuKTsKLSAgICBzZXEgPSBhc2RsX3NlcV9uZXcodG90YWwsIGMtPmNfYXJlbmEpOworICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcodG90YWwsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gc2ltcGxlX3N0bXQpIHsKQEAgLTMxNzksNyArMzE5OCw3IEBACiAgICAgICAgIGlmIChoYXNfZWxzZSkgewogICAgICAgICAgICAgYXNkbF9zZXEgKnN1aXRlX3NlcTI7CiAKLSAgICAgICAgICAgIG9yZWxzZSA9IGFzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIG9yZWxzZSA9IF9QeV9hc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIW9yZWxzZSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgTkNIKG4pIC0gNikpOwpAQCAtMzIwMyw3ICszMjIyLDcgQEAKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbl9lbGlmOyBpKyspIHsKICAgICAgICAgICAgIGludCBvZmYgPSA1ICsgKG5fZWxpZiAtIGkgLSAxKSAqIDQ7Ci0gICAgICAgICAgICBhc2RsX3NlcSAqbmV3b2JqID0gYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgYXNkbF9zZXEgKm5ld29iaiA9IF9QeV9hc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIW5ld29iaikKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgb2ZmKSk7CkBAIC0zNDE1LDcgKzM0MzQsNyBAQAogICAgIGlmIChuX2V4Y2VwdCA+IDApIHsKICAgICAgICAgaW50IGk7CiAgICAgICAgIC8qIHByb2Nlc3MgZXhjZXB0IHN0YXRlbWVudHMgdG8gY3JlYXRlIGEgdHJ5IC4uLiBleGNlcHQgKi8KLSAgICAgICAgaGFuZGxlcnMgPSBhc2RsX3NlcV9uZXcobl9leGNlcHQsIGMtPmNfYXJlbmEpOworICAgICAgICBoYW5kbGVycyA9IF9QeV9hc2RsX3NlcV9uZXcobl9leGNlcHQsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoaGFuZGxlcnMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0zNDY2LDcgKzM0ODUsNyBAQAogICAgIFJFUShuLCB3aXRoX3N0bXQpOwogCiAgICAgbl9pdGVtcyA9IChOQ0gobikgLSAyKSAvIDI7Ci0gICAgaXRlbXMgPSBhc2RsX3NlcV9uZXcobl9pdGVtcywgYy0+Y19hcmVuYSk7CisgICAgaXRlbXMgPSBfUHlfYXNkbF9zZXFfbmV3KG5faXRlbXMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghaXRlbXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDE7IGkgPCBOQ0gobikgLSAyOyBpICs9IDIpIHsKQEAgLTM2MzIsMTggKzM2NTEsMTYgQEAKICAgICBlbmQgPSBzICsgc3RybGVuKHMpIC0gMTsKICAgICBpbWZsYWcgPSAqZW5kID09ICdqJyB8fCAqZW5kID09ICdKJzsKICAgICBpZiAoc1swXSA9PSAnMCcpIHsKLSAgICAgICAgeCA9IChsb25nKSBQeU9TX3N0cnRvdWwoKGNoYXIgKilzLCAoY2hhciAqKikmZW5kLCAwKTsKKyAgICAgICAgeCA9IChsb25nKSBQeU9TX3N0cnRvdWwocywgKGNoYXIgKiopJmVuZCwgMCk7CiAgICAgICAgIGlmICh4IDwgMCAmJiBlcnJubyA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcoKGNoYXIgKilzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcocywgKGNoYXIgKiopMCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZQotICAgICAgICB4ID0gUHlPU19zdHJ0b2woKGNoYXIgKilzLCAoY2hhciAqKikmZW5kLCAwKTsKKyAgICAgICAgeCA9IFB5T1Nfc3RydG9sKHMsIChjaGFyICoqKSZlbmQsIDApOwogICAgIGlmICgqZW5kID09ICdcMCcpIHsKICAgICAgICAgaWYgKGVycm5vICE9IDApCi0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcoKGNoYXIgKilzLCAoY2hhciAqKikwLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZyhzLCAoY2hhciAqKikwLCAwKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKICAgICB9CiAgICAgLyogWFhYIEh1Z2UgZmxvYXRzIG1heSBzaWxlbnRseSBmYWlsICovCkBAIC0zNjY2LDggKzM2ODMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRlY29kZV91dGY4KHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IGNoYXIgKipzUHRyLCBjb25zdCBjaGFyICplbmQpCiB7Ci0gICAgY2hhciAqcywgKnQ7Ci0gICAgdCA9IHMgPSAoY2hhciAqKSpzUHRyOworICAgIGNvbnN0IGNoYXIgKnMsICp0OworICAgIHQgPSBzID0gKnNQdHI7CiAgICAgLyogd2hpbGUgKHMgPCBlbmQgJiYgKnMgIT0gJ1xcJykgcysrOyAqLyAvKiBpbmVmZmljaWVudCBmb3IgdSIuLiIgKi8KICAgICB3aGlsZSAocyA8IGVuZCAmJiAoKnMgJiAweDgwKSkgcysrOwogICAgICpzUHRyID0gczsKZGlmZiAtLWdpdCBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKaW5kZXggYzk0ZGFlYS4uZTMxNTdkMCAxMDA2NDQKLS0tIGEvUHl0aG9uL2JsdGlubW9kdWxlLmMKKysrIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKQEAgLTMyLDggKzMyLDE5IEBACiBpbnQgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IDA7CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoX19idWlsdGluc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKK19QeV9JREVOVElGSUVSKF9fcHJlcGFyZV9fKTsKK19QeV9JREVOVElGSUVSKF9fcm91bmRfXyk7CitfUHlfSURFTlRJRklFUihlbmNvZGluZyk7CitfUHlfSURFTlRJRklFUihlcnJvcnMpOwogX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKIF9QeV9JREVOVElGSUVSKGZsdXNoKTsKK19QeV9JREVOVElGSUVSKG1ldGFjbGFzcyk7CitfUHlfSURFTlRJRklFUihzb3J0KTsKK19QeV9JREVOVElGSUVSKHN0ZGluKTsKK19QeV9JREVOVElGSUVSKHN0ZG91dCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9fX2J1aWxkX2NsYXNzX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTQyLDcgKzUzLDYgQEAKICAgICBQeU9iamVjdCAqY2xzID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IG5hcmdzOwogICAgIGludCBpc2NsYXNzOwotICAgIF9QeV9JREVOVElGSUVSKF9fcHJlcGFyZV9fKTsKIAogICAgIGFzc2VydChhcmdzICE9IE5VTEwpOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewpAQCAtNTcsNiArNjcsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGZ1bmMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApOyAvKiBCZXR0ZXIgYmUgY2FsbGFibGUgKi8KKyAgICBpZiAoIVB5RnVuY3Rpb25fQ2hlY2soZnVuYykpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJfX2J1aWxkX19jbGFzc19fOiBmdW5jIG11c3QgYmUgYSBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMSk7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobmFtZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTc3LDEwICs5MiwxMCBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIG1ldGEgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhta3csICJtZXRhY2xhc3MiKTsKKyAgICAgICAgbWV0YSA9IF9QeURpY3RfR2V0SXRlbUlkKG1rdywgJlB5SWRfbWV0YWNsYXNzKTsKICAgICAgICAgaWYgKG1ldGEgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlfSU5DUkVGKG1ldGEpOwotICAgICAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtU3RyaW5nKG1rdywgIm1ldGFjbGFzcyIpIDwgMCkgeworICAgICAgICAgICAgaWYgKF9QeURpY3RfRGVsSXRlbUlkKG1rdywgJlB5SWRfbWV0YWNsYXNzKSA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobWV0YSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1rdyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKQEAgLTE1NSw3ICsxNzAsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgY2VsbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZnVuYywgbnMsIE5VTEwpOworICAgIGNlbGwgPSBQeUV2YWxfRXZhbENvZGVFeChQeUZ1bmN0aW9uX0dFVF9DT0RFKGZ1bmMpLCBQeUZ1bmN0aW9uX0dFVF9HTE9CQUxTKGZ1bmMpLCBucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShmdW5jKSk7CiAgICAgaWYgKGNlbGwgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqbWFyZ3M7CiAgICAgICAgIG1hcmdzID0gUHlUdXBsZV9QYWNrKDMsIG5hbWUsIGJhc2VzLCBucyk7CkBAIC0zMzMsNyArMzUwLDExIEBACiBQeURvY19TVFJWQVIoYmluX2RvYywKICJiaW4obnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCitcblwKKyAgID4+PiBiaW4oMjc5NjIwMilcblwKKyAgICcwYjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTcyLDggKzU5Myw3IEBACiBidWlsdGluX2NvbXBpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjaGFyICpzdHI7Ci0gICAgUHlPYmplY3QgKmZpbGVuYW1lX29iajsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqc3RhcnRzdHI7CiAgICAgaW50IG1vZGUgPSAtMTsKICAgICBpbnQgZG9udF9pbmhlcml0ID0gMDsKQEAgLTU4OSwxMiArNjA5LDExIEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mc3xpaWk6Y29tcGlsZSIsICBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZmaWxlbmFtZV9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydHN0ciwgJnN1cHBsaWVkX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkb250X2luaGVyaXQsICZvcHRpbWl6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgZmlsZW5hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhmaWxlbmFtZV9vYmopOwogICAgIGNmLmNmX2ZsYWdzID0gc3VwcGxpZWRfZmxhZ3MgfCBQeUNGX1NPVVJDRV9JU19VVEY4OwogCiAgICAgaWYgKHN1cHBsaWVkX2ZsYWdzICYKQEAgLTY1MiwyNCArNjcxLDI0IEBACiAgICAgICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZiwgb3B0aW1pemUsIGFyZW5hKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IChQeU9iamVjdCopUHlBU1RfQ29tcGlsZU9iamVjdChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjZiwgb3B0aW1pemUsIGFyZW5hKTsKICAgICAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIH0KICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KIAotICAgIHN0ciA9IHNvdXJjZV9hc19zdHJpbmcoY21kLCAiY29tcGlsZSIsICJzdHJpbmcsIGJ5dGVzLCBBU1Qgb3IgY29kZSIsICZjZik7CisgICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJjb21waWxlIiwgInN0cmluZywgYnl0ZXMgb3IgQVNUIiwgJmNmKTsKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICByZXN1bHQgPSBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhzdHIsIGZpbGVuYW1lLCBzdGFydFttb2RlXSwgJmNmLCBvcHRpbWl6ZSk7CisgICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ09iamVjdChzdHIsIGZpbGVuYW1lLCBzdGFydFttb2RlXSwgJmNmLCBvcHRpbWl6ZSk7CiAgICAgZ290byBmaW5hbGx5OwogCiBlcnJvcjoKICAgICByZXN1bHQgPSBOVUxMOwogZmluYWxseToKLSAgICBQeV9ERUNSRUYoZmlsZW5hbWVfb2JqKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTc1MCw4ICs3NjksMTEgQEAKICAgICB9CiAgICAgaWYgKGdsb2JhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICBnbG9iYWxzID0gUHlFdmFsX0dldEdsb2JhbHMoKTsKLSAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKQorICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKICAgICAgICAgbG9jYWxzID0gZ2xvYmFsczsKQEAgLTc2Myw5ICs3ODUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCisgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXykgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTgxNSw2ICs4MzcsOCBAQAogICAgICAgICBnbG9iYWxzID0gUHlFdmFsX0dldEdsb2JhbHMoKTsKICAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICBsb2NhbHMgPSBQeUV2YWxfR2V0TG9jYWxzKCk7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFnbG9iYWxzIHx8ICFsb2NhbHMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTgzNiw5ICs4NjAsOSBAQAogICAgICAgICAgICAgbG9jYWxzLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhnbG9iYWxzLCAiX19idWlsdGluc19fIikgPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKKyAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZChnbG9iYWxzLCAmUHlJZF9fX2J1aWx0aW5zX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV2YWxfR2V0QnVpbHRpbnMoKSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTI1Niw3ICsxMjgwLDExIEBACiBQeURvY19TVFJWQVIoaGV4X2RvYywKICJoZXgobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gaGV4KDM3MzU5Mjg1NTkpXG5cCisgICAnMHhkZWFkYmVlZidcblwKKyIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMzIyLDI2ICsxMzUwLDM1IEBACiBtaW5fbWF4KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcywgaW50IG9wKQogewogICAgIFB5T2JqZWN0ICp2LCAqaXQsICppdGVtLCAqdmFsLCAqbWF4aXRlbSwgKm1heHZhbCwgKmtleWZ1bmM9TlVMTDsKKyAgICBQeU9iamVjdCAqZW1wdHl0dXBsZSwgKmRlZmF1bHR2YWwgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgImRlZmF1bHQiLCBOVUxMfTsKICAgICBjb25zdCBjaGFyICpuYW1lID0gb3AgPT0gUHlfTFQgPyAibWluIiA6ICJtYXgiOworICAgIGNvbnN0IGludCBwb3NpdGlvbmFsID0gUHlUdXBsZV9TaXplKGFyZ3MpID4gMTsKKyAgICBpbnQgcmV0OwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA+IDEpCisgICAgaWYgKHBvc2l0aW9uYWwpCiAgICAgICAgIHYgPSBhcmdzOwotICAgIGVsc2UgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAoY2hhciAqKW5hbWUsIDEsIDEsICZ2KSkKKyAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgbmFtZSwgMSwgMSwgJnYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChrd2RzICE9IE5VTEwgJiYgUHlEaWN0X0NoZWNrKGt3ZHMpICYmIFB5RGljdF9TaXplKGt3ZHMpKSB7Ci0gICAgICAgIGtleWZ1bmMgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhrd2RzLCAia2V5Iik7Ci0gICAgICAgIGlmIChQeURpY3RfU2l6ZShrd2RzKSE9MSAgfHwgIGtleWZ1bmMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50IiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoa2V5ZnVuYyk7CisgICAgZW1wdHl0dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChlbXB0eXR1cGxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldCA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhlbXB0eXR1cGxlLCBrd2RzLCAifCRPTyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWZ1bmMsICZkZWZhdWx0dmFsKTsKKyAgICBQeV9ERUNSRUYoZW1wdHl0dXBsZSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHBvc2l0aW9uYWwgJiYgZGVmYXVsdHZhbCAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgYSBkZWZhdWx0IGZvciAlcygpIHdpdGggbXVsdGlwbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnRzIiwgbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKICAgICBpZiAoaXQgPT0gTlVMTCkgewotICAgICAgICBQeV9YREVDUkVGKGtleWZ1bmMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEzODUsMTQgKzE0MjIsMTggQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBGYWlsX2l0OwogICAgIGlmIChtYXh2YWwgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcygpIGFyZyBpcyBhbiBlbXB0eSBzZXF1ZW5jZSIsIG5hbWUpOwogICAgICAgICBhc3NlcnQobWF4aXRlbSA9PSBOVUxMKTsKKyAgICAgICAgaWYgKGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHR2YWwpOworICAgICAgICAgICAgbWF4aXRlbSA9IGRlZmF1bHR2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihtYXh2YWwpOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gbWF4aXRlbTsKIAogRmFpbF9pdF9pdGVtX2FuZF92YWw6CkBAIC0xNDAzLDcgKzE0NDQsNiBAQAogICAgIFB5X1hERUNSRUYobWF4dmFsKTsKICAgICBQeV9YREVDUkVGKG1heGl0ZW0pOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTQ0NCw3ICsxNDg0LDExIEBACiBQeURvY19TVFJWQVIob2N0X2RvYywKICJvY3QobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gb2N0KDM0MjM5MSlcblwKKyAgICcwbzEyMzQ1NjcnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTUzMCw3ICsxNTc0LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc2VwLCAmZW5kLCAmZmlsZSwgJmZsdXNoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBmaWxlID09IFB5X05vbmUpIHsKLSAgICAgICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImxvc3Qgc3lzLnN0ZG91dCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKwogICAgICAgICAvKiBzeXMuc3Rkb3V0IG1heSBiZSBOb25lIHdoZW4gRklMRSogc3Rkb3V0IGlzbid0IGNvbm5lY3RlZCAqLwogICAgICAgICBpZiAoZmlsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0xNTg0LDcgKzE2MzMsNyBAQAogICAgICAgICBpZiAoZG9fZmx1c2ggPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZWxzZSBpZiAoZG9fZmx1c2gpIHsKLSAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZmlsZSwgImZsdXNoIiwgIiIpOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmaWxlLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZWxzZQpAQCAtMTYxMCw5ICsxNjU5LDkgQEAKIGJ1aWx0aW5faW5wdXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpwcm9tcHRhcmcgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaW4gPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZmluID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGluKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKICAgICBsb25nIGZkOwogICAgIGludCB0dHk7CkBAIC0xNjgzLDggKzE3MzIsNiBAQAogICAgICAgICBjaGFyICpzdGRpbl9lbmNvZGluZ19zdHIsICpzdGRpbl9lcnJvcnNfc3RyOwogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgICAgICBzaXplX3QgbGVuOwotICAgICAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKGVycm9ycyk7CiAKICAgICAgICAgc3RkaW5fZW5jb2RpbmcgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZpbiwgJlB5SWRfZW5jb2RpbmcpOwogICAgICAgICBzdGRpbl9lcnJvcnMgPSBfUHlPYmplY3RfR2V0QXR0cklkKGZpbiwgJlB5SWRfZXJyb3JzKTsKQEAgLTE4MTAsMTAgKzE4NTcsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fcm91bmQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnJvdW5kX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5kaWdpdHMgPSBOVUxMOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibnVtYmVyIiwgIm5kaWdpdHMiLCAwfTsKLSAgICBQeU9iamVjdCAqbnVtYmVyLCAqcm91bmQ7CisgICAgUHlPYmplY3QgKm51bWJlciwgKnJvdW5kLCAqcmVzdWx0OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98Tzpyb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbnVtYmVyLCAmbmRpZ2l0cykpCkBAIC0xODI0LDI0ICsxODcwLDIxIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAocm91bmRfc3RyID09IE5VTEwpIHsKLSAgICAgICAgcm91bmRfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcm91bmRfXyIpOwotICAgICAgICBpZiAocm91bmRfc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByb3VuZCA9IF9QeVR5cGVfTG9va3VwKFB5X1RZUEUobnVtYmVyKSwgcm91bmRfc3RyKTsKKyAgICByb3VuZCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG51bWJlciwgJlB5SWRfX19yb3VuZF9fKTsKICAgICBpZiAocm91bmQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgInR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fcm91bmRfXyBtZXRob2QiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShudW1iZXIpLT50cF9uYW1lKTsKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19yb3VuZF9fIG1ldGhvZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShudW1iZXIpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG5kaWdpdHMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyb3VuZCwgIk8iLCBudW1iZXIpOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHJvdW5kLCBOVUxMKTsKICAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocm91bmQsICJPTyIsIG51bWJlciwgbmRpZ2l0cyk7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocm91bmQsIG5kaWdpdHMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihyb3VuZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlEb2NfU1RSVkFSKHJvdW5kX2RvYywKQEAgLTE4NTksNyArMTkwMiw2IEBACiAgICAgUHlPYmplY3QgKmNhbGxhYmxlOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaXRlcmFibGUiLCAia2V5IiwgInJldmVyc2UiLCAwfTsKICAgICBpbnQgcmV2ZXJzZTsKLSAgICBfUHlfSURFTlRJRklFUihzb3J0KTsKIAogICAgIC8qIGFyZ3MgMS0zIHNob3VsZCBtYXRjaCBsaXN0c29ydCBpbiBPYmplY3RzL2xpc3RvYmplY3QuYyAqLwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9pOnNvcnRlZCIsCkBAIC0xOTA3LDE2ICsxOTQ5LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgZCA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKLSAgICAgICAgaWYgKGQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhcnMoKTogbm8gbG9jYWxzIT8iKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeV9JTkNSRUYoZCk7CisgICAgICAgIGlmIChkID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlfSU5DUkVGKGQpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoX19kaWN0X18pOwogICAgICAgICBkID0gX1B5T2JqZWN0X0dldEF0dHJJZCh2LCAmUHlJZF9fX2RpY3RfXyk7CiAgICAgICAgIGlmIChkID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC0yNDEzLDYgKzI0NTAsMTIgQEAKIF9QeUJ1aWx0aW5fSW5pdCh2b2lkKQogewogICAgIFB5T2JqZWN0ICptb2QsICpkaWN0LCAqZGVidWc7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUZpbHRlcl9UeXBlKSA8IDAgfHwKKyAgICAgICAgUHlUeXBlX1JlYWR5KCZQeU1hcF9UeXBlKSA8IDAgfHwKKyAgICAgICAgUHlUeXBlX1JlYWR5KCZQeVppcF9UeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgbW9kID0gUHlNb2R1bGVfQ3JlYXRlKCZidWlsdGluc21vZHVsZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jZXZhbC5jIGIvUHl0aG9uL2NldmFsLmMKaW5kZXggNzM5MjVkYy4uODJmMDY1MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2NldmFsLmMKKysrIGIvUHl0aG9uL2NldmFsLmMKQEAgLTM3LDcgKzM3LDcgQEAKIHN0YXRpYyB2b2lkCiBwcGNfZ2V0Y291bnRlcih1aW50NjQgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB0YnUsIHRiLCB0YnUyOworICAgIHVuc2lnbmVkIGxvbmcgdGJ1LCB0YiwgdGJ1MjsKIAogICBsb29wOgogICAgIGFzbSB2b2xhdGlsZSAoIm1mdGJ1ICUwIiA6ICI9ciIgKHRidSkgKTsKQEAgLTE0Miw4ICsxNDIsNiBAQAogCiAjZGVmaW5lIE5BTUVfRVJST1JfTVNHIFwKICAgICAibmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKLSNkZWZpbmUgR0xPQkFMX05BTUVfRVJST1JfTVNHIFwKLSAgICAiZ2xvYmFsIG5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiCiAjZGVmaW5lIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0cgXAogICAgICJsb2NhbCB2YXJpYWJsZSAnJS4yMDBzJyByZWZlcmVuY2VkIGJlZm9yZSBhc3NpZ25tZW50IgogI2RlZmluZSBVTkJPVU5ERlJFRV9FUlJPUl9NU0cgXApAQCAtMzY0LDI5ICszNjIsMjggQEAKICAgICBkcm9wX2dpbCh0c3RhdGUpOwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFB5T1NfQWZ0ZXJGb3JrIHRvIGVuc3VyZSB0aGF0IG5ld2x5Ci0gICBjcmVhdGVkIGNoaWxkIHByb2Nlc3NlcyBkb24ndCBob2xkIGxvY2tzIHJlZmVycmluZyB0byB0aHJlYWRzIHdoaWNoCi0gICBhcmUgbm90IHJ1bm5pbmcgaW4gdGhlIGNoaWxkIHByb2Nlc3MuICAoVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgdXNpbmcKLSAgIHB0aHJlYWRfYXRmb3JrIG1lY2hhbmlzbSwgYXQgbGVhc3QgZm9yIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRhdGlvbi4pICovCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFB5T1NfQWZ0ZXJGb3JrIHRvIGRlc3Ryb3kgYWxsIHRocmVhZHMgd2hpY2ggYXJlCisgKiBub3QgcnVubmluZyBpbiB0aGUgY2hpbGQgcHJvY2VzcywgYW5kIGNsZWFyIGludGVybmFsIGxvY2tzIHdoaWNoIG1pZ2h0IGJlCisgKiBoZWxkIGJ5IHRob3NlIHRocmVhZHMuIChUaGlzIGNvdWxkIGFsc28gYmUgZG9uZSB1c2luZyBwdGhyZWFkX2F0Zm9yaworICogbWVjaGFuaXNtLCBhdCBsZWFzdCBmb3IgdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLikgKi8KIAogdm9pZAogUHlFdmFsX1JlSW5pdFRocmVhZHModm9pZCkKIHsKICAgICBfUHlfSURFTlRJRklFUihfYWZ0ZXJfZm9yayk7CiAgICAgUHlPYmplY3QgKnRocmVhZGluZywgKnJlc3VsdDsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5VGhyZWFkU3RhdGUgKmN1cnJlbnRfdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKIAogICAgIGlmICghZ2lsX2NyZWF0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlY3JlYXRlX2dpbCgpOwogICAgIHBlbmRpbmdfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKLSAgICB0YWtlX2dpbCh0c3RhdGUpOworICAgIHRha2VfZ2lsKGN1cnJlbnRfdHN0YXRlKTsKICAgICBtYWluX3RocmVhZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKIAogICAgIC8qIFVwZGF0ZSB0aGUgdGhyZWFkaW5nIG1vZHVsZSB3aXRoIHRoZSBuZXcgc3RhdGUuCiAgICAgICovCi0gICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKLSAgICB0aHJlYWRpbmcgPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyh0c3RhdGUtPmludGVycC0+bW9kdWxlcywKKyAgICB0aHJlYWRpbmcgPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhjdXJyZW50X3RzdGF0ZS0+aW50ZXJwLT5tb2R1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aHJlYWRpbmciKTsKICAgICBpZiAodGhyZWFkaW5nID09IE5VTEwpIHsKICAgICAgICAgLyogdGhyZWFkaW5nIG5vdCBpbXBvcnRlZCAqLwpAQCAtMzk5LDYgKzM5Niw5IEBACiAgICAgZWxzZQogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICBQeV9ERUNSRUYodGhyZWFkaW5nKTsKKworICAgIC8qIERlc3Ryb3kgYWxsIHRocmVhZHMgZXhjZXB0IHRoZSBjdXJyZW50IG9uZSAqLworICAgIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChjdXJyZW50X3RzdGF0ZSk7CiB9CiAKICNlbHNlCkBAIC03NDIsNyArNzQyLDYgQEAKIGVudW0gd2h5X2NvZGUgewogICAgICAgICBXSFlfTk9UID0gICAgICAgMHgwMDAxLCAvKiBObyBlcnJvciAqLwogICAgICAgICBXSFlfRVhDRVBUSU9OID0gMHgwMDAyLCAvKiBFeGNlcHRpb24gb2NjdXJyZWQgKi8KLSAgICAgICAgV0hZX1JFUkFJU0UgPSAgIDB4MDAwNCwgLyogRXhjZXB0aW9uIHJlLXJhaXNlZCBieSAnZmluYWxseScgKi8KICAgICAgICAgV0hZX1JFVFVSTiA9ICAgIDB4MDAwOCwgLyogJ3JldHVybicgc3RhdGVtZW50ICovCiAgICAgICAgIFdIWV9CUkVBSyA9ICAgICAweDAwMTAsIC8qICdicmVhaycgc3RhdGVtZW50ICovCiAgICAgICAgIFdIWV9DT05USU5VRSA9ICAweDAwMjAsIC8qICdjb250aW51ZScgc3RhdGVtZW50ICovCkBAIC03NTMsNyArNzUyLDcgQEAKIHN0YXRpYyB2b2lkIHNhdmVfZXhjX3N0YXRlKFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKIHN0YXRpYyB2b2lkIHN3YXBfZXhjX3N0YXRlKFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKIHN0YXRpYyB2b2lkIHJlc3RvcmVfYW5kX2NsZWFyX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7Ci1zdGF0aWMgZW51bSB3aHlfY29kZSBkb19yYWlzZShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKK3N0YXRpYyBpbnQgZG9fcmFpc2UoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBzdGF0aWMgaW50IHVucGFja19pdGVyYWJsZShQeU9iamVjdCAqLCBpbnQsIGludCwgUHlPYmplY3QgKiopOwogCiAvKiBSZWNvcmRzIHdoZXRoZXIgdHJhY2luZyBpcyBvbiBmb3IgYW55IHRocmVhZC4gIENvdW50cyB0aGUgbnVtYmVyIG9mCkBAIC03OTMsMTggKzc5MiwxMiBAQAogI2lmZGVmIERYUEFJUlMKICAgICBpbnQgbGFzdG9wY29kZSA9IDA7CiAjZW5kaWYKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnN0YWNrX3BvaW50ZXI7ICAvKiBOZXh0IGZyZWUgc2xvdCBpbiB2YWx1ZSBzdGFjayAqLwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKm5leHRfaW5zdHI7Ci0gICAgcmVnaXN0ZXIgaW50IG9wY29kZTsgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlICovCi0gICAgcmVnaXN0ZXIgaW50IG9wYXJnOyAgICAgICAgIC8qIEN1cnJlbnQgb3Bjb2RlIGFyZ3VtZW50LCBpZiBhbnkgKi8KLSAgICByZWdpc3RlciBlbnVtIHdoeV9jb2RlIHdoeTsgLyogUmVhc29uIGZvciBibG9jayBzdGFjayB1bndpbmQgKi8KLSAgICByZWdpc3RlciBpbnQgZXJyOyAgICAgICAgICAgLyogRXJyb3Igc3RhdHVzIC0tIG5vbnplcm8gaWYgZXJyb3IgKi8KLSAgICByZWdpc3RlciBQeU9iamVjdCAqeDsgICAgICAgLyogUmVzdWx0IG9iamVjdCAtLSBOVUxMIGlmIGVycm9yICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7ICAgICAgIC8qIFRlbXBvcmFyeSBvYmplY3RzIHBvcHBlZCBvZmYgc3RhY2sgKi8KLSAgICByZWdpc3RlciBQeU9iamVjdCAqdzsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdDsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CisgICAgUHlPYmplY3QgKipzdGFja19wb2ludGVyOyAgLyogTmV4dCBmcmVlIHNsb3QgaW4gdmFsdWUgc3RhY2sgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpuZXh0X2luc3RyOworICAgIGludCBvcGNvZGU7ICAgICAgICAvKiBDdXJyZW50IG9wY29kZSAqLworICAgIGludCBvcGFyZzsgICAgICAgICAvKiBDdXJyZW50IG9wY29kZSBhcmd1bWVudCwgaWYgYW55ICovCisgICAgZW51bSB3aHlfY29kZSB3aHk7IC8qIFJlYXNvbiBmb3IgYmxvY2sgc3RhY2sgdW53aW5kICovCisgICAgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOwogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOyAgICAgICAgICAgIC8qIFJldHVybiB2YWx1ZSAqLwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKQEAgLTExODksNiArMTE4Miw3IEBACiAgICAgc3RhY2tfcG9pbnRlciA9IGYtPmZfc3RhY2t0b3A7CiAgICAgYXNzZXJ0KHN0YWNrX3BvaW50ZXIgIT0gTlVMTCk7CiAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7ICAgICAgIC8qIHJlbWFpbnMgTlVMTCB1bmxlc3MgeWllbGQgc3VzcGVuZHMgZnJhbWUgKi8KKyAgICBmLT5mX2V4ZWN1dGluZyA9IDE7CiAKICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SICYmICF0aHJvd2ZsYWcpIHsKICAgICAgICAgaWYgKGYtPmZfZXhjX3R5cGUgIT0gTlVMTCAmJiBmLT5mX2V4Y190eXBlICE9IFB5X05vbmUpIHsKQEAgLTEyMDYsMTQgKzEyMDAsMTYgQEAKICNlbmRpZgogCiAgICAgd2h5ID0gV0hZX05PVDsKLSAgICBlcnIgPSAwOwotICAgIHggPSBQeV9Ob25lOyAgICAgICAgLyogTm90IGEgcmVmZXJlbmNlLCBqdXN0IGFueXRoaW5nIG5vbi1OVUxMICovCi0gICAgdyA9IE5VTEw7CiAKLSAgICBpZiAodGhyb3dmbGFnKSB7IC8qIHN1cHBvcnQgZm9yIGdlbmVyYXRvci50aHJvdygpICovCi0gICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgfQorICAgIGlmICh0aHJvd2ZsYWcpIC8qIHN1cHBvcnQgZm9yIGdlbmVyYXRvci50aHJvdygpICovCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5RXZhbF9FdmFsRnJhbWVFeCgpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9vc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCiAKICAgICBmb3IgKDs7KSB7CiAjaWZkZWYgV0lUSF9UU0MKQEAgLTEyMzUsNiArMTIzMSw3IEBACiAjZW5kaWYKICAgICAgICAgYXNzZXJ0KHN0YWNrX3BvaW50ZXIgPj0gZi0+Zl92YWx1ZXN0YWNrKTsgLyogZWxzZSB1bmRlcmZsb3cgKi8KICAgICAgICAgYXNzZXJ0KFNUQUNLX0xFVkVMKCkgPD0gY28tPmNvX3N0YWNrc2l6ZSk7ICAvKiBlbHNlIG92ZXJmbG93ICovCisgICAgICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CiAKICAgICAgICAgLyogRG8gcGVyaW9kaWMgdGhpbmdzLiAgRG9pbmcgdGhpcyBldmVyeSB0aW1lIHRocm91Z2gKICAgICAgICAgICAgdGhlIGxvb3Agd291bGQgYWRkIHRvbyBtdWNoIG92ZXJoZWFkLCBzbyB3ZSBkbyBpdApAQCAtMTI1MCwxNSArMTI0NywxMiBAQAogICAgICAgICAgICAgICAgICAgIGEgdHJ5OiBmaW5hbGx5OiBibG9jayB1bmludGVycnVwdGlibGUuICovCiAgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdHN0YXRlLT50aWNrX2NvdW50ZXIrKzsKICNpZmRlZiBXSVRIX1RTQwogICAgICAgICAgICAgdGlja2VkID0gMTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZwZW5kaW5nY2FsbHNfdG9fZG8pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X01ha2VQZW5kaW5nQ2FsbHMoKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFB5X01ha2VQZW5kaW5nQ2FsbHMoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2Ryb3BfcmVxdWVzdCkpIHsKQEAgLTEyNzYsMTMgKzEyNzAsMTIgQEAKICNlbmRpZgogICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGFzeW5jaHJvbm91cyBleGNlcHRpb25zLiAqLwogICAgICAgICAgICAgaWYgKHRzdGF0ZS0+YXN5bmNfZXhjICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB4ID0gdHN0YXRlLT5hc3luY19leGM7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IHRzdGF0ZS0+YXN5bmNfZXhjOwogICAgICAgICAgICAgICAgIHRzdGF0ZS0+YXN5bmNfZXhjID0gTlVMTDsKICAgICAgICAgICAgICAgICBVTlNJR05BTF9BU1lOQ19FWEMoKTsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKHgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShleGMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihleGMpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTI5Myw2ICsxMjg2LDcgQEAKIAogICAgICAgICBpZiAoX1B5X1RyYWNpbmdQb3NzaWJsZSAmJgogICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMICYmICF0c3RhdGUtPnRyYWNpbmcpIHsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICAvKiBzZWUgbWF5YmVfY2FsbF9saW5lX3RyYWNlCiAgICAgICAgICAgICAgICBmb3IgZXhwb3NpdG9yeSBjb21tZW50cyAqLwogICAgICAgICAgICAgZi0+Zl9zdGFja3RvcCA9IHN0YWNrX3BvaW50ZXI7CkBAIC0xMzA3LDEwICsxMzAxLDkgQEAKICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgIGlmIChlcnIpCiAgICAgICAgICAgICAgICAgLyogdHJhY2UgZnVuY3Rpb24gcmFpc2VkIGFuIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIEV4dHJhY3Qgb3Bjb2RlIGFuZCBhcmd1bWVudCAqLwpAQCAtMTM1Nyw4NyArMTM1MCw5OSBAQAogICAgICAgICBUQVJHRVQoTk9QKQogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogCi0gICAgICAgIFRBUkdFVChMT0FEX0ZBU1QpCi0gICAgICAgICAgICB4ID0gR0VUTE9DQUwob3BhcmcpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgVEFSR0VUKExPQURfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gR0VUTE9DQUwob3BhcmcpOworICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAotICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCi0gICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX0NPTlNUKQotICAgICAgICAgICAgeCA9IEdFVElURU0oY29uc3RzLCBvcGFyZyk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFBVU0godmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfQ09OU1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IEdFVElURU0oY29uc3RzLCBvcGFyZyk7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoU1RPUkVfRkFTVCk7Ci0gICAgICAgIFRBUkdFVChTVE9SRV9GQVNUKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIHYpOworICAgICAgICBUQVJHRVQoU1RPUkVfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdmFsdWUpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9UT1ApCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIFRBUkdFVChQT1BfVE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUk9UX1RXTykKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFNFVF9UT1Aodyk7Ci0gICAgICAgICAgICBTRVRfU0VDT05EKHYpOworICAgICAgICBUQVJHRVQoUk9UX1RXTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgU0VUX1RPUChzZWNvbmQpOworICAgICAgICAgICAgU0VUX1NFQ09ORCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFJPVF9USFJFRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIHggPSBUSElSRCgpOwotICAgICAgICAgICAgU0VUX1RPUCh3KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQoeCk7Ci0gICAgICAgICAgICBTRVRfVEhJUkQodik7CisgICAgICAgIFRBUkdFVChST1RfVEhSRUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0b3AgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZWNvbmQgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0aGlyZCA9IFRISVJEKCk7CisgICAgICAgICAgICBTRVRfVE9QKHNlY29uZCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHRoaXJkKTsKKyAgICAgICAgICAgIFNFVF9USElSRCh0b3ApOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERVUF9UT1ApCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgICAgICBQVVNIKHYpOworICAgICAgICBUQVJHRVQoRFVQX1RPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHRvcCk7CisgICAgICAgICAgICBQVVNIKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRFVQX1RPUF9UV08pCi0gICAgICAgICAgICB4ID0gVE9QKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodyk7CisgICAgICAgIFRBUkdFVChEVVBfVE9QX1RXTykgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHRvcCk7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2Vjb25kKTsKICAgICAgICAgICAgIFNUQUNLQURKKDIpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodyk7CisgICAgICAgICAgICBTRVRfVE9QKHRvcCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHNlY29uZCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUG9zaXRpdmUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1Bvc2l0aXZlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfTkVHQVRJVkUpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTmVnYXRpdmUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfTkVHQVRJVkUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX05lZ2F0aXZlKHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoVU5BUllfTk9UKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICBUQVJHRVQoVU5BUllfTk9UKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnIgPSBQeU9iamVjdF9Jc1RydWUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKICAgICAgICAgICAgICAgICBTRVRfVE9QKFB5X1RydWUpOwpAQCAtMTQ1MCw0MTYgKzE0NTUsNDY0IEBACiAgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9JTlZFUlQpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW52ZXJ0KHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKFVOQVJZX0lOVkVSVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW52ZXJ0KHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1BPV0VSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1Bvd2VyKHYsIHcsIFB5X05vbmUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9QT1dFUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4cCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Qb3dlcihiYXNlLCBleHAsIFB5X05vbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4cCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX01VTFRJUExZKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX011bHRpcGx5KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX011bHRpcGx5KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1RSVUVfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1RydWVEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX1RSVUVfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9UcnVlRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9GTE9PUl9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX0ZMT09SX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX01PRFVMTykKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSkKLSAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX0Zvcm1hdCh2LCB3KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfUmVtYWluZGVyKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9NT0RVTE8pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeVVuaWNvZGVfQ2hlY2tFeGFjdChkaXZpZGVuZCkgPworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gb3JtYXQoZGl2aWRlbmQsIGRpdmlzb3IpIDoKKyAgICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh3KSkgewotICAgICAgICAgICAgICAgIHggPSB1bmljb2RlX2NvbmNhdGVuYXRlKHYsIHcsIGYsIG5leHRfaW5zdHIpOworICAgICAgICBUQVJHRVQoQklOQVJZX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnN1bTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdChsZWZ0KSAmJgorICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7CiAgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfZGVjcmVmX3Z4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0FkZCh2LCB3KTsKKyAgICAgICAgICAgICAgICBzdW0gPSBQeU51bWJlcl9BZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHN1bSk7CisgICAgICAgICAgICBpZiAoc3VtID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlRSQUNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGlmZiA9IFB5TnVtYmVyX1N1YnRyYWN0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBTRVRfVE9QKGRpZmYpOworICAgICAgICAgICAgaWYgKGRpZmYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfR2V0SXRlbShjb250YWluZXIsIHN1Yik7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9MU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Mc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfUlNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUnNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX0FORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0FuZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9YT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Yb3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9PcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExJU1RfQVBQRU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QgPSBQRUVLKG9wYXJnKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKGxpc3QsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgIHNraXBfZGVjcmVmX3Z4OgotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1NVQlRSQUNUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1N1YnRyYWN0KHYsIHcpOworICAgICAgICBUQVJHRVQoU0VUX0FERCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXQgPSBzdGFja19wb2ludGVyWy1vcGFyZ107CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHNldCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9QT1dFUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4cCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlUG93ZXIoYmFzZSwgZXhwLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihleHApOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9MU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTHNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTVVMVElQTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfUlNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX1JzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1RSVUVfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfQU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0FuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0ZMT09SX0RJVklERSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1b3RpZW50ID0gUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9YT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfWG9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTU9EVUxPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbW9kID0gUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChtb2QpOworICAgICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9PUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Pcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExJU1RfQVBQRU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFBFRUsob3BhcmcpOwotICAgICAgICAgICAgZXJyID0gUHlMaXN0X0FwcGVuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChTRVRfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKLSAgICAgICAgICAgIGVyciA9IFB5U2V0X0FkZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1BPV0VSKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VQb3dlcih2LCB3LCBQeV9Ob25lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTVVMVElQTFkpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9UUlVFX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfRkxPT1JfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfTU9EVUxPKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXIodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0FERCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QodykpIHsKLSAgICAgICAgICAgICAgICB4ID0gdW5pY29kZV9jb25jYXRlbmF0ZSh2LCB3LCBmLCBuZXh0X2luc3RyKTsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3VtOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmIFB5VW5pY29kZV9DaGVja0V4YWN0KHJpZ2h0KSkgeworICAgICAgICAgICAgICAgIHN1bSA9IHVuaWNvZGVfY29uY2F0ZW5hdGUobGVmdCwgcmlnaHQsIGYsIG5leHRfaW5zdHIpOwogICAgICAgICAgICAgICAgIC8qIHVuaWNvZGVfY29uY2F0ZW5hdGUgY29uc3VtZWQgdGhlIHJlZiB0byB2ICovCi0gICAgICAgICAgICAgICAgZ290byBza2lwX2RlY3JlZl92OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VBZGQodiwgdyk7CisgICAgICAgICAgICAgICAgc3VtID0gUHlOdW1iZXJfSW5QbGFjZUFkZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgIHNraXBfZGVjcmVmX3Y6Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc3VtKTsKKyAgICAgICAgICAgIGlmIChzdW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1NVQlRSQUNUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1NVQlRSQUNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGlmZiA9IFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChkaWZmKTsKKyAgICAgICAgICAgIGlmIChkaWZmID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9MU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0xTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VMc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1JTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlUnNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfUlNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVJzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfQU5EKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VBbmQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9BTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlQW5kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9YT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVhvcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1hPUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VYb3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX09SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VPcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX09SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZU9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfU1VCU0NSKQotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgdiA9IFNFQ09ORCgpOwotICAgICAgICAgICAgdSA9IFRISVJEKCk7CisgICAgICAgIFRBUkdFVChTVE9SRV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gVEhJUkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMyk7CiAgICAgICAgICAgICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbSh2LCB3LCB1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0oY29udGFpbmVyLCBzdWIsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB2ID0gU0VDT05EKCk7CisgICAgICAgIFRBUkdFVChERUxFVEVfU1VCU0NSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3ViID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY29udGFpbmVyID0gU0VDT05EKCk7CisgICAgICAgICAgICBpbnQgZXJyOwogICAgICAgICAgICAgU1RBQ0tBREooLTIpOwogICAgICAgICAgICAgLyogZGVsIHZbd10gKi8KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0odiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0RlbEl0ZW0oY29udGFpbmVyLCBzdWIpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChQUklOVF9FWFBSKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdyA9IFB5U3lzX0dldE9iamVjdCgiZGlzcGxheWhvb2siKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKKyAgICAgICAgVEFSR0VUKFBSSU5UX0VYUFIpIHsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKGRpc3BsYXlob29rKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmhvb2sgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfZGlzcGxheWhvb2spOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIGlmIChob29rID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9zdCBzeXMuZGlzcGxheWhvb2siKTsKLSAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlUdXBsZV9QYWNrKDEsIHYpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFB5RXZhbF9DYWxsT2JqZWN0KHcsIHgpOwotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodyk7Ci0gICAgICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhvb2ssIHZhbHVlLCBOVUxMKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAjaWZkZWYgQ0FTRV9UT09fQklHCiAgICAgICAgIGRlZmF1bHQ6IHN3aXRjaCAob3Bjb2RlKSB7CiAjZW5kaWYKLSAgICAgICAgVEFSR0VUKFJBSVNFX1ZBUkFSR1MpCi0gICAgICAgICAgICB2ID0gdyA9IE5VTEw7CisgICAgICAgIFRBUkdFVChSQUlTRV9WQVJBUkdTKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2F1c2UgPSBOVUxMLCAqZXhjID0gTlVMTDsKICAgICAgICAgICAgIHN3aXRjaCAob3BhcmcpIHsKICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICB2ID0gUE9QKCk7IC8qIGNhdXNlICovCisgICAgICAgICAgICAgICAgY2F1c2UgPSBQT1AoKTsgLyogY2F1c2UgKi8KICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7IC8qIGV4YyAqLworICAgICAgICAgICAgICAgIGV4YyA9IFBPUCgpOyAvKiBleGMgKi8KICAgICAgICAgICAgIGNhc2UgMDogLyogRmFsbHRocm91Z2ggKi8KLSAgICAgICAgICAgICAgICB3aHkgPSBkb19yYWlzZSh3LCB2KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9fcmFpc2UoZXhjLCBjYXVzZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgUkFJU0VfVkFSQVJHUyBvcGFyZyIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTE9DQUxTKQotICAgICAgICAgICAgeCA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IGYtPmZfbG9jYWxzOwotICAgICAgICAgICAgUHlfWERFQ1JFRih2KTsKLSAgICAgICAgICAgIGYtPmZfbG9jYWxzID0geDsKLSAgICAgICAgICAgIERJU1BBVENIKCk7Ci0KLSAgICAgICAgVEFSR0VUKFJFVFVSTl9WQUxVRSkKKyAgICAgICAgVEFSR0VUKFJFVFVSTl9WQUxVRSkgewogICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CiAgICAgICAgICAgICB3aHkgPSBXSFlfUkVUVVJOOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChZSUVMRF9GUk9NKQotICAgICAgICAgICAgdSA9IFBPUCgpOwotICAgICAgICAgICAgeCA9IFRPUCgpOwotICAgICAgICAgICAgLyogc2VuZCB1IHRvIHggKi8KLSAgICAgICAgICAgIGlmIChQeUdlbl9DaGVja0V4YWN0KHgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5R2VuX1NlbmQoKFB5R2VuT2JqZWN0ICopeCwgdSk7CisgICAgICAgIFRBUkdFVChZSUVMRF9GUk9NKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlY2lldmVyID0gVE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QocmVjaWV2ZXIpKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5R2VuX1NlbmQoKFB5R2VuT2JqZWN0ICopcmVjaWV2ZXIsIHYpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihzZW5kKTsKLSAgICAgICAgICAgICAgICBpZiAodSA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQeV9UWVBFKHgpLT50cF9pdGVybmV4dCh4KTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBQeV9Ob25lKQorICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBQeV9UWVBFKHJlY2lldmVyKS0+dHBfaXRlcm5leHQocmVjaWV2ZXIpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh4LCAmUHlJZF9zZW5kLCAiTyIsIHUpOworICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHJlY2lldmVyLCAmUHlJZF9zZW5kLCAiTyIsIHYpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWw7Ci0gICAgICAgICAgICAgICAgeCA9IFBPUCgpOyAvKiBSZW1vdmUgaXRlciBmcm9tIHN0YWNrICovCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICAgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwgZik7CiAgICAgICAgICAgICAgICAgZXJyID0gX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKCZ2YWwpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeCA9IHZhbDsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWNpZXZlcik7CisgICAgICAgICAgICAgICAgU0VUX1RPUCh2YWwpOworICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiB4IHJlbWFpbnMgb24gc3RhY2ssIHJldHZhbCBpcyB2YWx1ZSB0byBiZSB5aWVsZGVkICovCiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKQEAgLTE4NjcsMzkgKzE5MjAsMzggQEAKICAgICAgICAgICAgIC8qIGFuZCByZXBlYXQuLi4gKi8KICAgICAgICAgICAgIGYtPmZfbGFzdGktLTsKICAgICAgICAgICAgIGdvdG8gZmFzdF95aWVsZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChZSUVMRF9WQUxVRSkKKyAgICAgICAgVEFSR0VUKFlJRUxEX1ZBTFVFKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgd2h5ID0gV0hZX1lJRUxEOwogICAgICAgICAgICAgZ290byBmYXN0X3lpZWxkOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9FWENFUFQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgaWYgKGItPmJfdHlwZSAhPSBFWENFUFRfSEFORExFUikgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOworICAgICAgICBUQVJHRVQoUE9QX0VYQ0VQVCkgeworICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7CisgICAgICAgICAgICBpZiAoYi0+Yl90eXBlICE9IEVYQ0VQVF9IQU5ETEVSKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9CTE9DSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKLSAgICAgICAgICAgICAgICBVTldJTkRfQkxPQ0soYik7Ci0gICAgICAgICAgICB9CisgICAgICAgIFRBUkdFVChQT1BfQkxPQ0spIHsKKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgVU5XSU5EX0JMT0NLKGIpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRChFTkRfRklOQUxMWSk7Ci0gICAgICAgIFRBUkdFVChFTkRfRklOQUxMWSkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICB3aHkgPSAoZW51bSB3aHlfY29kZSkgUHlMb25nX0FTX0xPTkcodik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOworICAgICAgICBUQVJHRVQoRU5EX0ZJTkFMTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGF0dXMgPSBQT1AoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIHdoeSA9IChlbnVtIHdoeV9jb2RlKSBQeUxvbmdfQVNfTE9ORyhzdGF0dXMpOworICAgICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEICYmIHdoeSAhPSBXSFlfRVhDRVBUSU9OKTsKICAgICAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9SRVRVUk4gfHwKICAgICAgICAgICAgICAgICAgICAgd2h5ID09IFdIWV9DT05USU5VRSkKICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CkBAIC0xOTEyLDI0OCArMTk2NCwyODAgQEAKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGItPmJfdHlwZSA9PSBFWENFUFRfSEFORExFUik7CiAgICAgICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX05PVDsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHYsIHcsIHUpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9SRVJBSVNFOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0YiA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoc3RhdHVzLCBleGMsIHRiKTsKKyAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2ICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAiJ2ZpbmFsbHknIHBvcHMgYmFkIGV4Y2VwdGlvbiIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQlVJTERfQ0xBU1MpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKExPQURfQlVJTERfQ0xBU1MpIHsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fYnVpbGRfY2xhc3NfXyk7CiAKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYzsKICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgIHggPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2J1aWxkX2NsYXNzX18pOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiYyA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19fYnVpbGRfY2xhc3NfXyk7CisgICAgICAgICAgICAgICAgaWYgKGJjID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05hbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2J1aWxkX2NsYXNzX18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGJjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpidWlsZF9jbGFzc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2J1aWxkX2NsYXNzX18pOwogICAgICAgICAgICAgICAgIGlmIChidWlsZF9jbGFzc19zdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgYnVpbGRfY2xhc3Nfc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYmMgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIGJ1aWxkX2NsYXNzX3N0cik7CisgICAgICAgICAgICAgICAgaWYgKGJjID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05hbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKGJjKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh4KSkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oeCwgdywgdik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKHgsIHcsIHYpOworICAgICAgICBUQVJHRVQoU1RPUkVfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm5zID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKG5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgd2hlbiBzdG9yaW5nICVSIiwgbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgd2hlbiBzdG9yaW5nICVSIiwgdyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChucykpCisgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obnMsIG5hbWUsIHYpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0obnMsIG5hbWUsIHYpOworICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChlcnIgPSBQeU9iamVjdF9EZWxJdGVtKHgsIHcpKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKERFTEVURV9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpucyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gZGVsZXRpbmcgJVIiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBkZWxldGluZyAlUiIsIHcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKG5zLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhVTlBBQ0tfU0VRVUVOQ0UpOwotICAgICAgICBUQVJHRVQoVU5QQUNLX1NFUVVFTkNFKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUodikgPT0gb3BhcmcpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqKml0ZW1zID0gXAotICAgICAgICAgICAgICAgICAgICAoKFB5VHVwbGVPYmplY3QgKil2KS0+b2JfaXRlbTsKKyAgICAgICAgVEFSR0VUKFVOUEFDS19TRVFVRU5DRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNlcSA9IFBPUCgpLCAqaXRlbSwgKippdGVtczsKKyAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxKSAmJgorICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoc2VxKSA9PSBvcGFyZykgeworICAgICAgICAgICAgICAgIGl0ZW1zID0gKChQeVR1cGxlT2JqZWN0ICopc2VxKS0+b2JfaXRlbTsKICAgICAgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaXRlbXNbb3BhcmddOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFBVU0godyk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tvcGFyZ107CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgUFVTSChpdGVtKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRSh2KSA9PSBvcGFyZykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqaXRlbXMgPSBcCi0gICAgICAgICAgICAgICAgICAgICgoUHlMaXN0T2JqZWN0ICopdiktPm9iX2l0ZW07CisgICAgICAgICAgICB9IGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHNlcSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKHNlcSkgPT0gb3BhcmcpIHsKKyAgICAgICAgICAgICAgICBpdGVtcyA9ICgoUHlMaXN0T2JqZWN0ICopc2VxKS0+b2JfaXRlbTsKICAgICAgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaXRlbXNbb3BhcmddOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFBVU0godyk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tvcGFyZ107CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgUFVTSChpdGVtKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHVucGFja19pdGVyYWJsZSh2LCBvcGFyZywgLTEsCisgICAgICAgICAgICB9IGVsc2UgaWYgKHVucGFja19pdGVyYWJsZShzZXEsIG9wYXJnLCAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKyBvcGFyZykpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESihvcGFyZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHVucGFja19pdGVyYWJsZSgpIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTlBBQ0tfRVgpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFVOUEFDS19FWCkgewogICAgICAgICAgICAgaW50IHRvdGFsYXJncyA9IDEgKyAob3BhcmcgJiAweEZGKSArIChvcGFyZyA+PiA4KTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQT1AoKTsKIAotICAgICAgICAgICAgaWYgKHVucGFja19pdGVyYWJsZSh2LCBvcGFyZyAmIDB4RkYsIG9wYXJnID4+IDgsCisgICAgICAgICAgICBpZiAodW5wYWNrX2l0ZXJhYmxlKHNlcSwgb3BhcmcgJiAweEZGLCBvcGFyZyA+PiA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgdG90YWxhcmdzKSkgewogICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKz0gdG90YWxhcmdzOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFNFQ09ORCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIodiwgdywgdSk7IC8qIHYudyA9IHUgKi8KKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIob3duZXIsIG5hbWUsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIodiwgdywgKFB5T2JqZWN0ICopTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlbCB2LncgKi8KKyAgICAgICAgVEFSR0VUKERFTEVURV9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIob3duZXIsIG5hbWUsIChQeU9iamVjdCAqKU5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChTVE9SRV9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGYtPmZfZ2xvYmFscywgdywgdik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoREVMRVRFX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKGVyciA9IFB5RGljdF9EZWxJdGVtKGYtPmZfZ2xvYmFscywgdykpICE9IDApCisgICAgICAgIFRBUkdFVChERUxFVEVfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfRGVsSXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKCh2ID0gZi0+Zl9sb2NhbHMpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBsb2FkaW5nICVSIiwgdyk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLCBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHgpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBsb2FkaW5nICVSIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwgJiYgX1B5RXJyX09DQ1VSUkVEKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfS2V5RXJyb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMICYmIF9QeUVycl9PQ0NVUlJFRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHgpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHYpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0godik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgVEFSR0VUKExPQURfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfZ2xvYmFscykKICAgICAgICAgICAgICAgICAmJiBQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgIHggPSBfUHlEaWN0X0xvYWRHbG9iYWwoKFB5RGljdE9iamVjdCAqKWYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICB2ID0gX1B5RGljdF9Mb2FkR2xvYmFsKChQeURpY3RPYmplY3QgKilmLT5mX2dsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEaWN0T2JqZWN0ICopZi0+Zl9idWlsdGlucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFfUHlFcnJfT0NDVVJSRUQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogU2xvdy1wYXRoIGlmIGdsb2JhbHMgb3IgYnVpbHRpbnMgaXMgbm90IGEgZGljdCAqLwotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHYpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfRkFTVCkKLSAgICAgICAgICAgIHggPSBHRVRMT0NBTChvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChERUxFVEVfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBHRVRMT0NBTChvcGFyZyk7CisgICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIE5VTEwpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CkBAIC0yMTYyLDI1MiArMjI0NiwzMTIgQEAKICAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAogICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKQogICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0RFUkVGKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIGlmIChQeUNlbGxfR0VUKHgpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUNlbGxfU2V0KHgsIE5VTEwpOworICAgICAgICBUQVJHRVQoREVMRVRFX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIGlmIChQeUNlbGxfR0VUKGNlbGwpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUNlbGxfU2V0KGNlbGwsIE5VTEwpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAtMTsKICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQ0xPU1VSRSkKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX0RFUkVGKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIHcgPSBQeUNlbGxfR2V0KHgpOwotICAgICAgICAgICAgaWYgKHcgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBVU0godyk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgUHlDZWxsX1NldCh4LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKExPQURfQ0xPU1VSRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeV9JTkNSRUYoY2VsbCk7CisgICAgICAgICAgICBQVVNIKGNlbGwpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9UVVBMRSkKLSAgICAgICAgICAgIHggPSBQeVR1cGxlX05ldyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHgsIG9wYXJnLCB3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9DTEFTU0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlLCAqbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGlkeDsKKyAgICAgICAgICAgIGFzc2VydChsb2NhbHMpOworICAgICAgICAgICAgYXNzZXJ0KG9wYXJnID49IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSk7CisgICAgICAgICAgICBpZHggPSBvcGFyZyAtIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKTsKKyAgICAgICAgICAgIGFzc2VydChpZHggPj0gMCAmJiBpZHggPCBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19mcmVldmFycykpOworICAgICAgICAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oY28tPmNvX2ZyZWV2YXJzLCBpZHgpOworICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGxvY2FscykpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoQlVJTERfTElTVCkKLSAgICAgICAgICAgIHggPSAgUHlMaXN0X05ldyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oeCwgb3BhcmcsIHcpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKEJVSUxEX1NFVCkKLSAgICAgICAgICAgIHggPSBQeVNldF9OZXcoTlVMTCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoeCwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5Q2VsbF9HRVQoY2VsbCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX01BUCkKLSAgICAgICAgICAgIHggPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNUT1JFX01BUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsgICAgIC8qIGtleSAqLwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOyAgLyogdmFsdWUgKi8KLSAgICAgICAgICAgIHYgPSBUSElSRCgpOyAgIC8qIGRpY3QgKi8KLSAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrRXhhY3QodikpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0odiwgdywgdSk7ICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKE1BUF9BREQpCi0gICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCi0gICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLwotICAgICAgICAgICAgYXNzZXJ0IChQeURpY3RfQ2hlY2tFeGFjdCh2KSk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh2LCB3LCB1KTsgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5Q2VsbF9HRVQoY2VsbCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIHcpOworICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5Q2VsbF9TZXQoY2VsbCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDT01QQVJFX09QKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IGNtcF9vdXRjb21lKG9wYXJnLCB2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSBicmVhazsKKyAgICAgICAgVEFSR0VUKEJVSUxEX1RVUExFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlUdXBsZV9OZXcob3BhcmcpOworICAgICAgICAgICAgaWYgKHR1cCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgb3BhcmcsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSCh0dXApOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9MSVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCA9ICBQeUxpc3RfTmV3KG9wYXJnKTsKKyAgICAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBvcGFyZywgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKGxpc3QpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9TRVQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXQgPSBQeVNldF9OZXcoTlVMTCk7CisgICAgICAgICAgICBpbnQgZXJyID0gMDsKKyAgICAgICAgICAgIGlmIChzZXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQorICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoc2V0LCBpdGVtKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2V0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChzZXQpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9NQVApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKKyAgICAgICAgICAgIGlmIChtYXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFVTSChtYXApOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChTVE9SRV9NQVApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1hcCA9IFRISVJEKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgU1RBQ0tBREooLTIpOworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KG1hcCkpOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChNQVBfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXA7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgU1RBQ0tBREooLTIpOworICAgICAgICAgICAgbWFwID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KG1hcCkpOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsgIC8qIHZbd10gPSB1ICovCisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9HZXRBdHRyKG93bmVyLCBuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQ09NUEFSRV9PUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IGNtcF9vdXRjb21lKG9wYXJnLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX0ZBTFNFKTsKICAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfVFJVRSk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwotCi0gICAgICAgIFRBUkdFVChJTVBPUlRfTkFNRSkKLSAgICAgICAgewotICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7Ci0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgeCA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19faW1wb3J0X18pOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9faW1wb3J0X18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyh1KSAhPSAtMSB8fCBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIHcgPSBQeVR1cGxlX1BhY2soNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3ID0gUHlUdXBsZV9QYWNrKDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB2ID0geDsKLSAgICAgICAgICAgIHggPSBQeUV2YWxfQ2FsbE9iamVjdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU1QT1JUX1NUQVIpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSA9PSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChJTVBPUlRfTkFNRSkgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19pbXBvcnRfXyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSwgKmxldmVsLCAqYXJncywgKnJlczsKKyAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2ltcG9ydF9fIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CisgICAgICAgICAgICBmcm9tID0gUE9QKCk7CisgICAgICAgICAgICBsZXZlbCA9IFRPUCgpOworICAgICAgICAgICAgaWYgKFB5TG9uZ19Bc0xvbmcobGV2ZWwpICE9IC0xIHx8IFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfUGFjayg1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20pOworICAgICAgICAgICAgUHlfREVDUkVGKGxldmVsKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcm9tKTsKKyAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7CisgICAgICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBhcmdzKTsKKyAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChJTVBPUlRfU1RBUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20gPSBQT1AoKSwgKmxvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIGR1cmluZyAnaW1wb3J0IConIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIGVyciA9IGltcG9ydF9hbGxfZnJvbSh4LCB2KTsKKyAgICAgICAgICAgIGVyciA9IGltcG9ydF9hbGxfZnJvbShsb2NhbHMsIGZyb20pOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwogICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QoZiwgMCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcm9tKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTVBPUlRfRlJPTSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7CisgICAgICAgIFRBUkdFVChJTVBPUlRfRlJPTSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHggPSBpbXBvcnRfZnJvbSh2LCB3KTsKKyAgICAgICAgICAgIHJlcyA9IGltcG9ydF9mcm9tKGZyb20sIG5hbWUpOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0ZPUldBUkQpCisgICAgICAgIFRBUkdFVChKVU1QX0ZPUldBUkQpIHsKICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfRkFMU0UpOwotICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfRkFMU0UpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfRkFMU0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfVFJVRSk7Ci0gICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9UUlVFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9UUlVFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CkBAIC0yNDE1LDU4ICsyNTU5LDYzIEBACiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9JRl9GQUxTRV9PUl9QT1ApCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgIFRBUkdFVChKVU1QX0lGX0ZBTFNFX09SX1BPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfSUZfVFJVRV9PUl9QT1ApCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgeworICAgICAgICBUQVJHRVQoSlVNUF9JRl9UUlVFX09SX1BPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgVEFSR0VUKEpVTVBfQUJTT0xVVEUpCisgICAgICAgIFRBUkdFVChKVU1QX0FCU09MVVRFKSB7CiAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogI2lmIEZBU1RfTE9PUFMKICAgICAgICAgICAgIC8qIEVuYWJsaW5nIHRoaXMgcGF0aCBzcGVlZHMtdXAgYWxsIHdoaWxlIGFuZCBmb3ItbG9vcHMgYnkgYnlwYXNzaW5nCkBAIC0yNDgwLDYwICsyNjI5LDYyIEBACiAjZWxzZQogICAgICAgICAgICAgRElTUEFUQ0goKTsKICNlbmRpZgorICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEdFVF9JVEVSKQorICAgICAgICBUQVJHRVQoR0VUX0lURVIpIHsKICAgICAgICAgICAgIC8qIGJlZm9yZTogW29ial07IGFmdGVyIFtnZXRpdGVyKG9iaildICovCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgICAgIFBSRURJQ1QoRk9SX0lURVIpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyYWJsZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyYWJsZSk7CisgICAgICAgICAgICBTRVRfVE9QKGl0ZXIpOworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChGT1JfSVRFUik7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEZPUl9JVEVSKTsKLSAgICAgICAgVEFSR0VUKEZPUl9JVEVSKQorICAgICAgICBUQVJHRVQoRk9SX0lURVIpIHsKICAgICAgICAgICAgIC8qIGJlZm9yZTogW2l0ZXJdOyBhZnRlcjogW2l0ZXIsIGl0ZXIoKV0gKm9yKiBbXSAqLwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9ICgqdi0+b2JfdHlwZS0+dHBfaXRlcm5leHQpKHYpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm5leHQgPSAoKml0ZXItPm9iX3R5cGUtPnRwX2l0ZXJuZXh0KShpdGVyKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQVVNIKG5leHQpOwogICAgICAgICAgICAgICAgIFBSRURJQ1QoU1RPUkVfRkFTVCk7CiAgICAgICAgICAgICAgICAgUFJFRElDVChVTlBBQ0tfU0VRVUVOQ0UpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfU3RvcEl0ZXJhdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwgZik7CiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8qIGl0ZXJhdG9yIGVuZGVkIG5vcm1hbGx5ICovCi0gICAgICAgICAgICB4ID0gdiA9IFBPUCgpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOwogICAgICAgICAgICAgSlVNUEJZKG9wYXJnKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQlJFQUtfTE9PUCkKKyAgICAgICAgVEFSR0VUKEJSRUFLX0xPT1ApIHsKICAgICAgICAgICAgIHdoeSA9IFdIWV9CUkVBSzsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ09OVElOVUVfTE9PUCkKKyAgICAgICAgVEFSR0VUKENPTlRJTlVFX0xPT1ApIHsKICAgICAgICAgICAgIHJldHZhbCA9IFB5TG9uZ19Gcm9tTG9uZyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoIXJldHZhbCkgewotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJldHZhbCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB3aHkgPSBXSFlfQ09OVElOVUU7CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChTRVRVUF9MT09QLCBfc2V0dXBfZmluYWxseSkKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChTRVRVUF9FWENFUFQsIF9zZXR1cF9maW5hbGx5KQogICAgICAgICBUQVJHRVQoU0VUVVBfRklOQUxMWSkKLSAgICAgICAgX3NldHVwX2ZpbmFsbHk6CisgICAgICAgIF9zZXR1cF9maW5hbGx5OiB7CiAgICAgICAgICAgICAvKiBOT1RFOiBJZiB5b3UgYWRkIGFueSBuZXcgYmxvY2stc2V0dXAgb3Bjb2RlcyB0aGF0CiAgICAgICAgICAgICAgICBhcmUgbm90IHRyeS9leGNlcHQvZmluYWxseSBoYW5kbGVycywgeW91IG1heSBuZWVkCiAgICAgICAgICAgICAgICB0byB1cGRhdGUgdGhlIFB5R2VuX05lZWRzRmluYWxpemluZygpIGZ1bmN0aW9uLgpAQCAtMjU0MiwzNyArMjY5MywzNSBAQAogICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIG9wY29kZSwgSU5TVFJfT0ZGU0VUKCkgKyBvcGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU0VUVVBfV0lUSCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoU0VUVVBfV0lUSCkgewogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19leGl0X18pOwogICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19lbnRlcl9fKTsKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBzcGVjaWFsX2xvb2t1cCh3LCAmUHlJZF9fX2V4aXRfXyk7Ci0gICAgICAgICAgICBpZiAoIXgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgdSA9IHNwZWNpYWxfbG9va3VwKHcsICZQeUlkX19fZW50ZXJfXyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoIXUpIHsKLSAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHUsIE5VTEwpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKCF4KQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlPYmplY3QgKm1nciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmV4aXQgPSBzcGVjaWFsX2xvb2t1cChtZ3IsICZQeUlkX19fZXhpdF9fKSwgKmVudGVyOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKKyAgICAgICAgICAgIGlmIChleGl0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFNFVF9UT1AoZXhpdCk7CisgICAgICAgICAgICBlbnRlciA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19lbnRlcl9fKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtZ3IpOworICAgICAgICAgICAgaWYgKGVudGVyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZW50ZXIsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKGVudGVyKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgLyogU2V0dXAgdGhlIGZpbmFsbHkgYmxvY2sgYmVmb3JlIHB1c2hpbmcgdGhlIHJlc3VsdAogICAgICAgICAgICAgICAgb2YgX19lbnRlcl9fIG9uIHRoZSBzdGFjay4gKi8KICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBTRVRVUF9GSU5BTExZLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOwogCi0gICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgUFVTSChyZXMpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUCkgewogICAgICAgICAgICAgLyogQXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sgYXJlIDEtNiB2YWx1ZXMgaW5kaWNhdGluZwogICAgICAgICAgICAgICAgaG93L3doeSB3ZSBlbnRlcmVkIHRoZSBmaW5hbGx5IGNsYXVzZToKICAgICAgICAgICAgICAgIC0gVE9QID0gTm9uZQpAQCAtMjU5OSw0MiArMjc0OCw0MiBAQAogICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgUHlPYmplY3QgKmV4aXRfZnVuYzsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIGlmICh1ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBUT1AoKSwgKnZhbCA9IFB5X05vbmUsICp0YiA9IFB5X05vbmUsICpyZXM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGV4YyA9PSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7Ci0gICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKLSAgICAgICAgICAgICAgICB2ID0gdyA9IFB5X05vbmU7CisgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHUpKSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKFB5TG9uZ19Bc0xvbmcodSkpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhleGMpKSB7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoUHlMb25nX0FzTG9uZyhleGMpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBXSFlfUkVUVVJOOgogICAgICAgICAgICAgICAgIGNhc2UgV0hZX0NPTlRJTlVFOgogICAgICAgICAgICAgICAgICAgICAvKiBSZXR2YWwgaW4gVE9QLiAqLwogICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBTRUNPTkQoKTsKICAgICAgICAgICAgICAgICAgICAgU0VUX1NFQ09ORChUT1AoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFNFVF9UT1AodSk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9UT1AoZXhjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHUgPSB2ID0gdyA9IFB5X05vbmU7CisgICAgICAgICAgICAgICAgZXhjID0gUHlfTm9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cCwgKmV4YywgKnRiOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0cDIsICpleGMyLCAqdGIyOwogICAgICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmJsb2NrOwotICAgICAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgICAgICB3ID0gVEhJUkQoKTsKLSAgICAgICAgICAgICAgICB0cCA9IEZPVVJUSCgpOwotICAgICAgICAgICAgICAgIGV4YyA9IFBFRUsoNSk7Ci0gICAgICAgICAgICAgICAgdGIgPSBQRUVLKDYpOworICAgICAgICAgICAgICAgIHZhbCA9IFNFQ09ORCgpOworICAgICAgICAgICAgICAgIHRiID0gVEhJUkQoKTsKKyAgICAgICAgICAgICAgICB0cDIgPSBGT1VSVEgoKTsKKyAgICAgICAgICAgICAgICBleGMyID0gUEVFSyg1KTsKKyAgICAgICAgICAgICAgICB0YjIgPSBQRUVLKDYpOwogICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFBFRUsoNyk7Ci0gICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDcsIHRiKTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNiwgZXhjKTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNSwgdHApOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg3LCB0YjIpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg2LCBleGMyKTsKKyAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNSwgdHAyKTsKICAgICAgICAgICAgICAgICAvKiBVTldJTkRfRVhDRVBUX0hBTkRMRVIgd2lsbCBwb3AgdGhpcyBvZmYuICovCiAgICAgICAgICAgICAgICAgU0VUX0ZPVVJUSChOVUxMKTsKICAgICAgICAgICAgICAgICAvKiBXZSBqdXN0IHNoaWZ0ZWQgdGhlIHN0YWNrIGRvd24sIHNvIHdlIGhhdmUKQEAgLTI2NDUsNTYgKzI3OTQsNTMgQEAKICAgICAgICAgICAgICAgICBibG9jay0+Yl9sZXZlbC0tOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogWFhYIE5vdCB0aGUgZmFzdGVzdCB3YXkgdG8gY2FsbCBpdC4uLiAqLwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCB1LCB2LCB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGV4aXRfZnVuYywgZXhjLCB2YWwsIHRiLCBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihleGl0X2Z1bmMpOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsgLyogR28gdG8gZXJyb3IgZXhpdCAqLworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgICAgIGlmICh1ICE9IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHgpOworICAgICAgICAgICAgaWYgKGV4YyAhPSBQeV9Ob25lKQorICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShyZXMpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKIAogICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7IC8qIEdvIHRvIGVycm9yIGV4aXQgKi8KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICAgICAgLyogVGhlcmUgd2FzIGFuIGV4Y2VwdGlvbiBhbmQgYSBUcnVlIHJldHVybiAqLwogICAgICAgICAgICAgICAgIFBVU0goUHlMb25nX0Zyb21Mb25nKChsb25nKSBXSFlfU0lMRU5DRUQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFBSRURJQ1QoRU5EX0ZJTkFMTFkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT04pCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqc3A7CisgICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqKnNwLCAqcmVzOwogICAgICAgICAgICAgUENBTEwoUENBTExfQUxMKTsKICAgICAgICAgICAgIHNwID0gc3RhY2tfcG9pbnRlcjsKICNpZmRlZiBXSVRIX1RTQwotICAgICAgICAgICAgeCA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZywgJmludHIwLCAmaW50cjEpOworICAgICAgICAgICAgcmVzID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnLCAmaW50cjAsICZpbnRyMSk7CiAjZWxzZQotICAgICAgICAgICAgeCA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZyk7CisgICAgICAgICAgICByZXMgPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcpOwogI2VuZGlmCiAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gc3A7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKENBTExfRlVOQ1RJT05fVkFSLCBfY2FsbF9mdW5jdGlvbl92YXJfa3cpCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQ0FMTF9GVU5DVElPTl9LVywgX2NhbGxfZnVuY3Rpb25fdmFyX2t3KQogICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTl9WQVJfS1cpCi0gICAgICAgIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdzoKLSAgICAgICAgeworICAgICAgICBfY2FsbF9mdW5jdGlvbl92YXJfa3c6IHsKICAgICAgICAgICAgIGludCBuYSA9IG9wYXJnICYgMHhmZjsKICAgICAgICAgICAgIGludCBuayA9IChvcGFyZz4+OCkgJiAweGZmOwogICAgICAgICAgICAgaW50IGZsYWdzID0gKG9wY29kZSAtIENBTExfRlVOQ1RJT04pICYgMzsKICAgICAgICAgICAgIGludCBuID0gbmEgKyAyICogbms7Ci0gICAgICAgICAgICBQeU9iamVjdCAqKnBmdW5jLCAqZnVuYywgKipzcDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcGZ1bmMsICpmdW5jLCAqKnNwLCAqcmVzOwogICAgICAgICAgICAgUENBTEwoUENBTExfQUxMKTsKICAgICAgICAgICAgIGlmIChmbGFncyAmIENBTExfRkxBR19WQVIpCiAgICAgICAgICAgICAgICAgbisrOwpAQCAtMjcxNywxMzcgKzI4NjMsMTU2IEBACiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGZ1bmMpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjApOwotICAgICAgICAgICAgeCA9IGV4dF9kb19jYWxsKGZ1bmMsICZzcCwgZmxhZ3MsIG5hLCBuayk7CisgICAgICAgICAgICByZXMgPSBleHRfZG9fY2FsbChmdW5jLCAmc3AsIGZsYWdzLCBuYSwgbmspOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwogICAgICAgICAgICAgc3RhY2tfcG9pbnRlciA9IHNwOwogICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwogCiAgICAgICAgICAgICB3aGlsZSAoc3RhY2tfcG9pbnRlciA+IHBmdW5jKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqbyA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoTUFLRV9DTE9TVVJFLCBfbWFrZV9mdW5jdGlvbikKICAgICAgICAgVEFSR0VUKE1BS0VfRlVOQ1RJT04pCi0gICAgICAgIF9tYWtlX2Z1bmN0aW9uOgotICAgICAgICB7CisgICAgICAgIF9tYWtlX2Z1bmN0aW9uOiB7CiAgICAgICAgICAgICBpbnQgcG9zZGVmYXVsdHMgPSBvcGFyZyAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQga3dkZWZhdWx0cyA9IChvcGFyZz4+OCkgJiAweGZmOwogICAgICAgICAgICAgaW50IG51bV9hbm5vdGF0aW9ucyA9IChvcGFyZyA+PiAxNikgJiAweDdmZmY7CiAKLSAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogcXVhbG5hbWUgKi8KLSAgICAgICAgICAgIHYgPSBQT1AoKTsgLyogY29kZSBvYmplY3QgKi8KLSAgICAgICAgICAgIHggPSBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZSh2LCBmLT5mX2dsb2JhbHMsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgUHlPYmplY3QgKnF1YWxuYW1lID0gUE9QKCk7IC8qIHF1YWxuYW1lICovCisgICAgICAgICAgICBQeU9iamVjdCAqY29kZSA9IFBPUCgpOyAvKiBjb2RlIG9iamVjdCAqLworICAgICAgICAgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUZ1bmN0aW9uX05ld1dpdGhRdWFsTmFtZShjb2RlLCBmLT5mX2dsb2JhbHMsIHF1YWxuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihxdWFsbmFtZSk7CiAKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgb3Bjb2RlID09IE1BS0VfQ0xPU1VSRSkgewotICAgICAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRDbG9zdXJlKHgsIHYpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBNQUtFX0NMT1NVUkUpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2xvc3VyZSA9IFBPUCgpOworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldENsb3N1cmUoZnVuYywgY2xvc3VyZSkgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzIGJ5dGVjb2RlIGlzIGNvcnJ1cHQuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNsb3N1cmUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNsb3N1cmUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIG51bV9hbm5vdGF0aW9ucyA+IDApIHsKKyAgICAgICAgICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPiAwKSB7CiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuYW1lX2l4OwotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsgLyogbmFtZXMgb2YgYXJncyB3aXRoIGFubm90YXRpb25zICovCi0gICAgICAgICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lcyA9IFBPUCgpOyAvKiBuYW1lcyBvZiBhcmdzIHdpdGggYW5ub3RhdGlvbnMgKi8KKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqYW5ucyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoYW5ucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbmFtZV9peCA9IFB5VHVwbGVfU2l6ZSh1KTsKKyAgICAgICAgICAgICAgICBuYW1lX2l4ID0gUHlUdXBsZV9TaXplKG5hbWVzKTsKICAgICAgICAgICAgICAgICBhc3NlcnQobnVtX2Fubm90YXRpb25zID09IG5hbWVfaXgrMSk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVfaXggPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICAgICAgICAgIC0tbmFtZV9peDsKLSAgICAgICAgICAgICAgICAgICAgdCA9IFB5VHVwbGVfR0VUX0lURU0odSwgbmFtZV9peCk7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCB0LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgICAgICBuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShuYW1lcywgbmFtZV9peCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGFubnMsIG5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYW5ucyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zKGZ1bmMsIGFubnMpICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwogICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldEFubm90YXRpb25zIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZXMpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBYWFggTWF5YmUgdGhpcyBzaG91bGQgYmUgYSBzZXBhcmF0ZSBvcGNvZGU/ICovCi0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIHBvc2RlZmF1bHRzID4gMCkgewotICAgICAgICAgICAgICAgIHYgPSBQeVR1cGxlX05ldyhwb3NkZWZhdWx0cyk7Ci0gICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd2hpbGUgKC0tcG9zZGVmYXVsdHMgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odiwgcG9zZGVmYXVsdHMsIHcpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXREZWZhdWx0cyh4LCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMICYmIGt3ZGVmYXVsdHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGt3ZGVmYXVsdHMgPiAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZnMgPSBQeURpY3RfTmV3KCk7CisgICAgICAgICAgICAgICAgaWYgKGRlZnMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHdoaWxlICgtLWt3ZGVmYXVsdHMgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICB3ID0gUE9QKCk7IC8qIGRlZmF1bHQgdmFsdWUgKi8KLSAgICAgICAgICAgICAgICAgICAgdSA9IFBPUCgpOyAvKiBrdyBvbmx5IGFyZyBuYW1lICovCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWChubm9yd2l0eik6IGNoZWNrIGZvciBlcnJvcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0odiwgdSwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOyAvKiBkZWZhdWx0IHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBQT1AoKTsgLyoga3cgb25seSBhcmcgbmFtZSAqLworICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oZGVmcywga2V5LCB2KTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldEt3RGVmYXVsdHMoZnVuYywgZGVmcykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyBjaGFuZ2VzLiAqLwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChwb3NkZWZhdWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmcyA9IFB5VHVwbGVfTmV3KHBvc2RlZmF1bHRzKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd2hpbGUgKC0tcG9zZGVmYXVsdHMgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShkZWZzLCBwb3NkZWZhdWx0cywgUE9QKCkpOworICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldERlZmF1bHRzKGZ1bmMsIGRlZnMpICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcworICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzIGNoYW5nZXMuICovCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGVmcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKGZ1bmMpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9TTElDRSkKKyAgICAgICAgVEFSR0VUKEJVSUxEX1NMSUNFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqc3RhcnQsICpzdG9wLCAqc3RlcCwgKnNsaWNlOwogICAgICAgICAgICAgaWYgKG9wYXJnID09IDMpCi0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOworICAgICAgICAgICAgICAgIHN0ZXAgPSBQT1AoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3ID0gTlVMTDsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeVNsaWNlX05ldyh1LCB2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHN0ZXAgPSBOVUxMOworICAgICAgICAgICAgc3RvcCA9IFBPUCgpOworICAgICAgICAgICAgc3RhcnQgPSBUT1AoKTsKKyAgICAgICAgICAgIHNsaWNlID0gUHlTbGljZV9OZXcoc3RhcnQsIHN0b3AsIHN0ZXApOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgICAgICAgICBTRVRfVE9QKHNsaWNlKTsKKyAgICAgICAgICAgIGlmIChzbGljZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEVYVEVOREVEX0FSRykKKyAgICAgICAgVEFSR0VUKEVYVEVOREVEX0FSRykgewogICAgICAgICAgICAgb3Bjb2RlID0gTkVYVE9QKCk7CiAgICAgICAgICAgICBvcGFyZyA9IG9wYXJnPDwxNiB8IE5FWFRBUkcoKTsKICAgICAgICAgICAgIGdvdG8gZGlzcGF0Y2hfb3Bjb2RlOworICAgICAgICB9CiAKICNpZiBVU0VfQ09NUFVURURfR09UT1MKICAgICAgICAgX3Vua25vd25fb3Bjb2RlOgpAQCAtMjg1OCw4ICszMDIzLDcgQEAKICAgICAgICAgICAgICAgICBQeUZyYW1lX0dldExpbmVOdW1iZXIoZiksCiAgICAgICAgICAgICAgICAgb3Bjb2RlKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgInVua25vd24gb3Bjb2RlIik7Ci0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogCiAjaWZkZWYgQ0FTRV9UT09fQklHCiAgICAgICAgIH0KQEAgLTI4NjcsNzEgKzMwMzEsMzUgQEAKIAogICAgICAgICB9IC8qIHN3aXRjaCAqLwogCi0gICAgICAgIG9uX2Vycm9yOgorICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBiZSByZWFjaGVkLiBFdmVyeSBvcGNvZGUgc2hvdWxkIGVuZCB3aXRoIERJU1BBVENIKCkKKyAgICAgICAgICAgb3IgZ290byBlcnJvci4gKi8KKyAgICAgICAgYXNzZXJ0KDApOwogCitlcnJvcjoKICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW5zdDEpOwogCi0gICAgICAgIC8qIFF1aWNrbHkgY29udGludWUgaWYgbm8gZXJyb3Igb2NjdXJyZWQgKi8KKyAgICAgICAgYXNzZXJ0KHdoeSA9PSBXSFlfTk9UKTsKKyAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKIAotICAgICAgICBpZiAod2h5ID09IFdIWV9OT1QpIHsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCAmJiB4ICE9IE5VTEwpIHsKLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgZXhwZW5zaXZlISAqLwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJYWFggdW5kZXRlY3RlZCBlcnJvclxuIik7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAobG9vcDEpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogTm9ybWFsLCBmYXN0IHBhdGggKi8KLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIHggPSBQeV9Ob25lOwotICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIERvdWJsZS1jaGVjayBleGNlcHRpb24gc3RhdHVzICovCi0KLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OIHx8IHdoeSA9PSBXSFlfUkVSQUlTRSkgewotICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmV0dXJuIHdpdGhvdXQgZXhjZXB0aW9uIHNldCIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNpZmRlZiBDSEVDS0VYQwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIFRoaXMgY2hlY2sgaXMgZXhwZW5zaXZlISAqLwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGJ1ZlsxMjhdOwotICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiU3RhY2sgdW53aW5kIHdpdGggZXhjZXB0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgInNldCBhbmQgd2h5PSVkIiwgd2h5KTsKLSAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKGJ1Zik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgLyogRG91YmxlLWNoZWNrIGV4Y2VwdGlvbiBzdGF0dXMuICovCisjaWZkZWYgTkRFQlVHCisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcmV0dXJuIHdpdGhvdXQgZXhjZXB0aW9uIHNldCIpOworI2Vsc2UKKyAgICAgICAgYXNzZXJ0KFB5RXJyX09jY3VycmVkKCkpOwogI2VuZGlmCiAKLSAgICAgICAgLyogTG9nIHRyYWNlYmFjayBpbmZvIGlmIHRoaXMgaXMgYSByZWFsIGV4Y2VwdGlvbiAqLworICAgICAgICAvKiBMb2cgdHJhY2ViYWNrIGluZm8uICovCisgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7CiAKLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfRVhDRVBUSU9OKSB7Ci0gICAgICAgICAgICBQeVRyYWNlQmFja19IZXJlKGYpOwotCi0gICAgICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEZvciB0aGUgcmVzdCwgdHJlYXQgV0hZX1JFUkFJU0UgYXMgV0hZX0VYQ0VQVElPTiAqLwotCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX1JFUkFJU0UpCi0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotCi0gICAgICAgIC8qIFVud2luZCBzdGFja3MgaWYgYSAocHNldWRvKSBleGNlcHRpb24gb2NjdXJyZWQgKi8KKyAgICAgICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKKyAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwgZik7CiAKIGZhc3RfYmxvY2tfZW5kOgorICAgICAgICBhc3NlcnQod2h5ICE9IFdIWV9OT1QpOworCisgICAgICAgIC8qIFVud2luZCBzdGFja3MgaWYgYSAocHNldWRvKSBleGNlcHRpb24gb2NjdXJyZWQgKi8KICAgICAgICAgd2hpbGUgKHdoeSAhPSBXSFlfTk9UICYmIGYtPmZfaWJsb2NrID4gMCkgewogICAgICAgICAgICAgLyogUGVlayBhdCB0aGUgY3VycmVudCBibG9jay4gKi8KICAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSAmZi0+Zl9ibG9ja3N0YWNrW2YtPmZfaWJsb2NrIC0gMV07CkBAIC0yOTc4LDcgKzMxMDYsMTAgQEAKICAgICAgICAgICAgICAgICAgICBQeXRob24gbWFpbiBsb29wLiAqLwogICAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAgJmV4YywgJnZhbCwgJnRiKTsKLSAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgICAgICAgICAgaWYgKHRiICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIFB5X05vbmUpOwogICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihleGMpOwogICAgICAgICAgICAgICAgIHRzdGF0ZS0+ZXhjX3R5cGUgPSBleGM7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbCk7CkBAIC0zMDEwLDE4ICszMTQxLDIzIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgUkVBRF9USU1FU1RBTVAobG9vcDEpOwogCisgICAgICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisKICAgICB9IC8qIG1haW4gbG9vcCAqLwogCiAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOwogICAgIC8qIFBvcCByZW1haW5pbmcgc3RhY2sgZW50cmllcy4gKi8KICAgICB3aGlsZSAoIUVNUFRZKCkpIHsKLSAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICBQeV9YREVDUkVGKHYpOworICAgICAgICBQeU9iamVjdCAqbyA9IFBPUCgpOworICAgICAgICBQeV9YREVDUkVGKG8pOwogICAgIH0KIAogICAgIGlmICh3aHkgIT0gV0hZX1JFVFVSTikKICAgICAgICAgcmV0dmFsID0gTlVMTDsKIAorICAgIGFzc2VydCgocmV0dmFsICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICB8fCAocmV0dmFsID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOworCiBmYXN0X3lpZWxkOgogICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgKHdoeSA9PSBXSFlfWUlFTEQgfHwgd2h5ID09IFdIWV9SRVRVUk4pKSB7CiAgICAgICAgIC8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgYmxvY2sgaXMgdG8gcHV0IGFzaWRlIHRoZSBnZW5lcmF0b3IncyBleGNlcHRpb24KQEAgLTMwNzgsNiArMzIxNCw3IEBACiAgICAgLyogcG9wIGZyYW1lICovCiBleGl0X2V2YWxfZnJhbWU6CiAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogICAgIHRzdGF0ZS0+ZnJhbWUgPSBmLT5mX2JhY2s7CiAKICAgICByZXR1cm4gcmV0dmFsOwpAQCAtMzI0Myw5ICszMzgwLDkgQEAKICAgICAgICAgICAgUHlPYmplY3QgKipkZWZzLCBpbnQgZGVmY291bnQsIFB5T2JqZWN0ICprd2RlZnMsIFB5T2JqZWN0ICpjbG9zdXJlKQogewogICAgIFB5Q29kZU9iamVjdCogY28gPSAoUHlDb2RlT2JqZWN0KilfY287Ci0gICAgcmVnaXN0ZXIgUHlGcmFtZU9iamVjdCAqZjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CisgICAgUHlGcmFtZU9iamVjdCAqZjsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeU9iamVjdCAqeCwgKnU7CiAgICAgaW50IHRvdGFsX2FyZ3MgPSBjby0+Y29fYXJnY291bnQgKyBjby0+Y29fa3dvbmx5YXJnY291bnQ7CkBAIC0zNTIyLDcgKzM2NTksNyBAQAogCiAvKiBMb2dpYyBmb3IgdGhlIHJhaXNlIHN0YXRlbWVudCAodG9vIGNvbXBsaWNhdGVkIGZvciBpbmxpbmluZykuCiAgICBUaGlzICpjb25zdW1lcyogYSByZWZlcmVuY2UgY291bnQgdG8gZWFjaCBvZiBpdHMgYXJndW1lbnRzLiAqLwotc3RhdGljIGVudW0gd2h5X2NvZGUKK3N0YXRpYyBpbnQKIGRvX3JhaXNlKFB5T2JqZWN0ICpleGMsIFB5T2JqZWN0ICpjYXVzZSkKIHsKICAgICBQeU9iamVjdCAqdHlwZSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CkBAIC0zNTM3LDEzICszNjc0LDEzIEBACiAgICAgICAgIGlmICh0eXBlID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGFjdGl2ZSBleGNlcHRpb24gdG8gcmVyYWlzZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBQeV9YSU5DUkVGKHR5cGUpOwogICAgICAgICBQeV9YSU5DUkVGKHZhbHVlKTsKICAgICAgICAgUHlfWElOQ1JFRih0Yik7CiAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRiKTsKLSAgICAgICAgcmV0dXJuIFdIWV9SRVJBSVNFOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICAvKiBXZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZm9ybXMgb2YgcmFpc2U6CkBAIC0zNjA2LDEzICszNzQzLDEzIEBACiAgICAgLyogUHlFcnJfU2V0T2JqZWN0IGluY3JlZidzIGl0cyBhcmd1bWVudHMgKi8KICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICBQeV9YREVDUkVGKHR5cGUpOwotICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOworICAgIHJldHVybiAwOwogCiByYWlzZV9lcnJvcjoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICBQeV9YREVDUkVGKHR5cGUpOwogICAgIFB5X1hERUNSRUYoY2F1c2UpOwotICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOworICAgIHJldHVybiAwOwogfQogCiAvKiBJdGVyYXRlIHYgYXJnY250IHRpbWVzIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBvbiB0aGUgc3RhY2sgKHZpYSBkZWNyZWFzaW5nCkBAIC0zNzExLDI3ICszODQ4LDI4IEBACiBzdGF0aWMgdm9pZAogY2FsbF9leGNfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpzZWxmLCBQeUZyYW1lT2JqZWN0ICpmKQogewotICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2ssICphcmc7CisgICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjaywgKm9yaWdfdHJhY2ViYWNrLCAqYXJnOwogICAgIGludCBlcnI7Ci0gICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJm9yaWdfdHJhY2ViYWNrKTsKICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewogICAgICAgICB2YWx1ZSA9IFB5X05vbmU7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgfQotICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJnR5cGUsICZ2YWx1ZSwgJm9yaWdfdHJhY2ViYWNrKTsKKyAgICB0cmFjZWJhY2sgPSAob3JpZ190cmFjZWJhY2sgIT0gTlVMTCkgPyBvcmlnX3RyYWNlYmFjayA6IFB5X05vbmU7CiAgICAgYXJnID0gUHlUdXBsZV9QYWNrKDMsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOwogICAgIGlmIChhcmcgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOworICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCBvcmlnX3RyYWNlYmFjayk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBzZWxmLCBmLCBQeVRyYWNlX0VYQ0VQVElPTiwgYXJnKTsKICAgICBQeV9ERUNSRUYoYXJnKTsKICAgICBpZiAoZXJyID09IDApCi0gICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIG9yaWdfdHJhY2ViYWNrKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfWERFQ1JFRih0eXBlKTsKICAgICAgICAgUHlfWERFQ1JFRih2YWx1ZSk7Ci0gICAgICAgIFB5X1hERUNSRUYodHJhY2ViYWNrKTsKKyAgICAgICAgUHlfWERFQ1JFRihvcmlnX3RyYWNlYmFjayk7CiAgICAgfQogfQogCkBAIC0zNzYwLDcgKzM4OTgsNyBAQAogY2FsbF90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCiAgICAgICAgICAgIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIHJlZ2lzdGVyIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgaW50IHJlc3VsdDsKICAgICBpZiAodHN0YXRlLT50cmFjaW5nKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM4NzEsOSArNDAwOSwxNSBAQAogUHlFdmFsX0dldExvY2Fscyh2b2lkKQogewogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKLSAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQorICAgIGlmIChjdXJyZW50X2ZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoY3VycmVudF9mcmFtZSk7CisgICAgfQorCisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGN1cnJlbnRfZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9sb2NhbHMgIT0gTlVMTCk7CiAgICAgcmV0dXJuIGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzOwogfQogCkBAIC0zODgzLDggKzQwMjcsOSBAQAogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKICAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzICE9IE5VTEwpOworICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CiB9CiAKIFB5RnJhbWVPYmplY3QgKgpAQCAtMzkyNiw2ICs0MDcxLDEzIEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICBzZXQsIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQorICAgICAgIGFuZCBzbyB0aGUgY2FsbGVyIGxvb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgaWYgKGFyZyA9PSBOVUxMKSB7CiAgICAgICAgIGFyZyA9IFB5VHVwbGVfTmV3KDApOwogICAgICAgICBpZiAoYXJnID09IE5VTEwpCkBAIC0zOTQ4LDYgKzQxMDAsOSBAQAogCiAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBhcmcsIGt3KTsKICAgICBQeV9ERUNSRUYoYXJnKTsKKworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDA2NSwxMCArNDIyMCwxNSBAQAogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWxsYXJnczsKICAgICAgICAgICAgIGNhbGxhcmdzID0gbG9hZF9hcmdzKHBwX3N0YWNrLCBuYSk7Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIwKTsKLSAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwotICAgICAgICAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CisgICAgICAgICAgICBpZiAoY2FsbGFyZ3MgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjApOworICAgICAgICAgICAgICAgIENfVFJBQ0UoeCwgUHlDRnVuY3Rpb25fQ2FsbChmdW5jLGNhbGxhcmdzLE5VTEwpKTsKKyAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUCgqcGludHIxKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFB5TWV0aG9kX0NoZWNrKGZ1bmMpICYmIFB5TWV0aG9kX0dFVF9TRUxGKGZ1bmMpICE9IE5VTEwpIHsKQEAgLTQwOTMsNiArNDI1Myw4IEBACiAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOwogICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAgICAgfQorICAgIGFzc2VydCgoeCAhPSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICB8fCAoeCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKIAogICAgIC8qIENsZWFyIHRoZSBzdGFjayBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgQWxzbyByZW1vdmVzCiAgICAgICAgdGhlIGFyZ3VtZW50cyBpbiBjYXNlIHRoZXkgd2VyZW4ndCBjb25zdW1lZCBhbHJlYWR5CkBAIC00MTAzLDYgKzQyNjUsOSBAQAogICAgICAgICBQeV9ERUNSRUYodyk7CiAgICAgICAgIFBDQUxMKFBDQUxMX1BPUCk7CiAgICAgfQorCisgICAgYXNzZXJ0KCh4ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8ICh4ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogICAgIHJldHVybiB4OwogfQogCkBAIC00Mzg2LDYgKzQ1NTEsOCBAQAogICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOwogICAgIFB5X1hERUNSRUYoa3dkaWN0KTsKICAgICBQeV9YREVDUkVGKHN0YXJhcmcpOworICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8IChyZXN1bHQgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDQyNCw3ICs0NTkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiQmFzZUV4Y2VwdGlvbiBpcyBub3QgYWxsb3dlZCIKIAogc3RhdGljIFB5T2JqZWN0ICoKLWNtcF9vdXRjb21lKGludCBvcCwgcmVnaXN0ZXIgUHlPYmplY3QgKnYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorY21wX291dGNvbWUoaW50IG9wLCBQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7CiAgICAgaW50IHJlcyA9IDA7CiAgICAgc3dpdGNoIChvcCkgewpAQCAtNDQ4Miw3ICs0NjQ5LDcgQEAKIAogICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIG5hbWUpOwogICAgIGlmICh4ID09IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiY2Fubm90IGltcG9ydCBuYW1lICVTIiwgbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgImNhbm5vdCBpbXBvcnQgbmFtZSAlUiIsIG5hbWUpOwogICAgIH0KICAgICByZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9jb2RlY3MuYyBiL1B5dGhvbi9jb2RlY3MuYwppbmRleCBmZDY3ZDFiLi41ZmY0MWI1IDEwMDY0NAotLS0gYS9QeXRob24vY29kZWNzLmMKKysrIGIvUHl0aG9uL2NvZGVjcy5jCkBAIC01Myw3ICs1Myw3IEBACiBzdGF0aWMKIFB5T2JqZWN0ICpub3JtYWxpemVzdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOworICAgIHNpemVfdCBpOwogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oc3RyaW5nKTsKICAgICBjaGFyICpwOwogICAgIFB5T2JqZWN0ICp2OwpAQCAtNjUsOSArNjUsOSBAQAogCiAgICAgcCA9IFB5TWVtX01hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNoYXIgY2ggPSBzdHJpbmdbaV07CisgICAgICAgIGNoYXIgY2ggPSBzdHJpbmdbaV07CiAgICAgICAgIGlmIChjaCA9PSAnICcpCiAgICAgICAgICAgICBjaCA9ICctJzsKICAgICAgICAgZWxzZQpAQCAtMzMyLDMwICszMzIsNDUgQEAKICAgICByZXR1cm4gY29kZWNfZ2V0c3RyZWFtY29kZWMoZW5jb2RpbmcsIHN0cmVhbSwgZXJyb3JzLCAzKTsKIH0KIAorLyogSGVscGVyIHRoYXQgdHJpZXMgdG8gZW5zdXJlIHRoZSByZXBvcnRlZCBleGNlcHRpb24gY2hhaW4gaW5kaWNhdGVzIHRoZQorICogY29kZWMgdGhhdCB3YXMgaW52b2tlZCB0byB0cmlnZ2VyIHRoZSBmYWlsdXJlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHR5cGUKKyAqIG9mIHRoZSBleGNlcHRpb24gcmFpc2VkLgorICovCitzdGF0aWMgdm9pZAord3JhcF9jb2RlY19lcnJvcihjb25zdCBjaGFyICpvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICAgIC8qIFRyeVNldEZyb21DYXVzZSB3aWxsIHJlcGxhY2UgdGhlIGFjdGl2ZSBleGNlcHRpb24gd2l0aCBhIHN1aXRhYmx5CisgICAgICogdXBkYXRlZCBjbG9uZSBpZiBpdCBjYW4sIG90aGVyd2lzZSBpdCB3aWxsIGxlYXZlIHRoZSBvcmlnaW5hbAorICAgICAqIGV4Y2VwdGlvbiBhbG9uZS4KKyAgICAgKi8KKyAgICBfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKCIlcyB3aXRoICclcycgY29kZWMgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgZW5jb2RpbmcpOworfQorCiAvKiBFbmNvZGUgYW4gb2JqZWN0IChlLmcuIGFuIFVuaWNvZGUgb2JqZWN0KSB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcKICAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBlbmNvZGVkIG9iamVjdCAodXN1YWxseSBhIFB5dGhvbiBzdHJpbmcpLgogCiAgICBlcnJvcnMgaXMgcGFzc2VkIHRvIHRoZSBlbmNvZGVyIGZhY3RvcnkgYXMgYXJndW1lbnQgaWYgbm9uLU5VTEwuICovCiAKLVB5T2JqZWN0ICpQeUNvZGVjX0VuY29kZShQeU9iamVjdCAqb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3N0YXRpYyBQeU9iamVjdCAqCitfUHlDb2RlY19FbmNvZGVJbnRlcm5hbChQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVuY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKLSAgICBQeU9iamVjdCAqZW5jb2RlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqdiA9IE5VTEw7CiAKLSAgICBlbmNvZGVyID0gUHlDb2RlY19FbmNvZGVyKGVuY29kaW5nKTsKLSAgICBpZiAoZW5jb2RlciA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBhcmdzID0gYXJnc190dXBsZShvYmplY3QsIGVycm9ycyk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgZ290byBvbkVycm9yOwogCiAgICAgcmVzdWx0ID0gUHlFdmFsX0NhbGxPYmplY3QoZW5jb2RlciwgYXJncyk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICB3cmFwX2NvZGVjX2Vycm9yKCJlbmNvZGluZyIsIGVuY29kaW5nKTsKICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KIAogICAgIGlmICghUHlUdXBsZV9DaGVjayhyZXN1bHQpIHx8CiAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUocmVzdWx0KSAhPSAyKSB7CkBAIC0zODQsMjUgKzM5OSwyNCBAQAogCiAgICBlcnJvcnMgaXMgcGFzc2VkIHRvIHRoZSBkZWNvZGVyIGZhY3RvcnkgYXMgYXJndW1lbnQgaWYgbm9uLU5VTEwuICovCiAKLVB5T2JqZWN0ICpQeUNvZGVjX0RlY29kZShQeU9iamVjdCAqb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3N0YXRpYyBQeU9iamVjdCAqCitfUHlDb2RlY19EZWNvZGVJbnRlcm5hbChQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlY29kZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKLSAgICBQeU9iamVjdCAqZGVjb2RlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqdjsKIAotICAgIGRlY29kZXIgPSBQeUNvZGVjX0RlY29kZXIoZW5jb2RpbmcpOwotICAgIGlmIChkZWNvZGVyID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQogICAgIGFyZ3MgPSBhcmdzX3R1cGxlKG9iamVjdCwgZXJyb3JzKTsKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChkZWNvZGVyLGFyZ3MpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgd3JhcF9jb2RlY19lcnJvcigiZGVjb2RpbmciLCBlbmNvZGluZyk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3VsdCkgfHwKICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShyZXN1bHQpICE9IDIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTQyNSw2ICs0MzksMTE4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIEdlbmVyaWMgZW5jb2RpbmcvZGVjb2RpbmcgQVBJICovCitQeU9iamVjdCAqUHlDb2RlY19FbmNvZGUoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgUHlPYmplY3QgKmVuY29kZXI7CisKKyAgICBlbmNvZGVyID0gUHlDb2RlY19FbmNvZGVyKGVuY29kaW5nKTsKKyAgICBpZiAoZW5jb2RlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlDb2RlY19FbmNvZGVJbnRlcm5hbChvYmplY3QsIGVuY29kZXIsIGVuY29kaW5nLCBlcnJvcnMpOworfQorCitQeU9iamVjdCAqUHlDb2RlY19EZWNvZGUoUHlPYmplY3QgKm9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgUHlPYmplY3QgKmRlY29kZXI7CisKKyAgICBkZWNvZGVyID0gUHlDb2RlY19EZWNvZGVyKGVuY29kaW5nKTsKKyAgICBpZiAoZGVjb2RlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfUHlDb2RlY19EZWNvZGVJbnRlcm5hbChvYmplY3QsIGRlY29kZXIsIGVuY29kaW5nLCBlcnJvcnMpOworfQorCisvKiBUZXh0IGVuY29kaW5nL2RlY29kaW5nIEFQSSAqLworc3RhdGljCitQeU9iamVjdCAqY29kZWNfZ2V0aXRlbV9jaGVja2VkKGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcGVyYXRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4KQoreworICAgIF9QeV9JREVOVElGSUVSKF9pc190ZXh0X2VuY29kaW5nKTsKKyAgICBQeU9iamVjdCAqY29kZWM7CisgICAgUHlPYmplY3QgKmF0dHI7CisgICAgUHlPYmplY3QgKnY7CisgICAgaW50IGlzX3RleHRfY29kZWM7CisKKyAgICBjb2RlYyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgaWYgKGNvZGVjID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IGFzc3VtZSBhbnkgcmF3IHR1cGxlIGRlc2NyaWJlcyBhIHRleHQKKyAgICAgKiBlbmNvZGluZywgYW5kIHRoZSBzYW1lIGZvciBhbnl0aGluZyBsYWNraW5nIHRoZSBwcml2YXRlCisgICAgICogYXR0cmlidXRlLgorICAgICAqLworICAgIGlmICghUHlUdXBsZV9DaGVja0V4YWN0KGNvZGVjKSkgeworICAgICAgICBhdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChjb2RlYywgJlB5SWRfX2lzX3RleHRfZW5jb2RpbmcpOworICAgICAgICBpZiAoYXR0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29kZWMpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaXNfdGV4dF9jb2RlYyA9IFB5T2JqZWN0X0lzVHJ1ZShhdHRyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICAgICAgICAgIGlmICghaXNfdGV4dF9jb2RlYykgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlYyk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0xvb2t1cEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyUuNDAwcycgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy4lcygpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIG9wZXJhdGlvbl9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHYgPSBQeVR1cGxlX0dFVF9JVEVNKGNvZGVjLCBpbmRleCk7CisgICAgUHlfREVDUkVGKGNvZGVjKTsKKyAgICBQeV9JTkNSRUYodik7CisgICAgcmV0dXJuIHY7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqIF9QeUNvZGVjX1RleHRFbmNvZGVyKGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICAgIHJldHVybiBjb2RlY19nZXRpdGVtX2NoZWNrZWQoZW5jb2RpbmcsICJlbmNvZGUiLCAwKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICogX1B5Q29kZWNfVGV4dERlY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgcmV0dXJuIGNvZGVjX2dldGl0ZW1fY2hlY2tlZChlbmNvZGluZywgImRlY29kZSIsIDEpOworfQorCitQeU9iamVjdCAqX1B5Q29kZWNfRW5jb2RlVGV4dChQeU9iamVjdCAqb2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgUHlPYmplY3QgKmVuY29kZXI7CisKKyAgICBlbmNvZGVyID0gX1B5Q29kZWNfVGV4dEVuY29kZXIoZW5jb2RpbmcpOworICAgIGlmIChlbmNvZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9QeUNvZGVjX0VuY29kZUludGVybmFsKG9iamVjdCwgZW5jb2RlciwgZW5jb2RpbmcsIGVycm9ycyk7Cit9CisKK1B5T2JqZWN0ICpfUHlDb2RlY19EZWNvZGVUZXh0KFB5T2JqZWN0ICpvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqZGVjb2RlcjsKKworICAgIGRlY29kZXIgPSBfUHlDb2RlY19UZXh0RGVjb2RlcihlbmNvZGluZyk7CisgICAgaWYgKGRlY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5Q29kZWNfRGVjb2RlSW50ZXJuYWwob2JqZWN0LCBkZWNvZGVyLCBlbmNvZGluZywgZXJyb3JzKTsKK30KKwogLyogUmVnaXN0ZXIgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIGVycm9yIHVuZGVyIHRoZSBuYW1lCiAgICBuYW1lLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBjb2RlYyB3aGVuIGl0IGVuY291bnRlcnMKICAgIGFuIHVuZW5jb2RhYmxlIGNoYXJhY3RlcnMvdW5kZWNvZGFibGUgYnl0ZXMgYW5kIGRvZXNuJ3Qga25vdyB0aGUKQEAgLTQ0MSw3ICs1NjcsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIHJldHVybiBQeURpY3RfU2V0SXRlbVN0cmluZyhpbnRlcnAtPmNvZGVjX2Vycm9yX3JlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKW5hbWUsIGVycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgZXJyb3IpOwogfQogCiAvKiBMb29rdXAgdGhlIGVycm9yIGhhbmRsaW5nIGNhbGxiYWNrIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdW5kZXIgdGhlCkBAIC00NTcsNyArNTgzLDcgQEAKIAogICAgIGlmIChuYW1lPT1OVUxMKQogICAgICAgICBuYW1lID0gInN0cmljdCI7Ci0gICAgaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksIChjaGFyICopbmFtZSk7CisgICAgaGFuZGxlciA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksIG5hbWUpOwogICAgIGlmICghaGFuZGxlcikKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0xvb2t1cEVycm9yLCAidW5rbm93biBlcnJvciBoYW5kbGVyIG5hbWUgJyUuNDAwcyciLCBuYW1lKTsKICAgICBlbHNlCkBAIC03MzMsNiArODU5LDY1IEBACiAgICAgfQogfQogCisjZGVmaW5lIEVOQ19VVEY4ICAgICAgICAwCisjZGVmaW5lIEVOQ19VVEYxNkJFICAgICAxCisjZGVmaW5lIEVOQ19VVEYxNkxFICAgICAyCisjZGVmaW5lIEVOQ19VVEYzMkJFICAgICAzCisjZGVmaW5lIEVOQ19VVEYzMkxFICAgICA0CisKK3N0YXRpYyBpbnQKK2dldF9zdGFuZGFyZF9lbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywgaW50ICpieXRlbGVuZ3RoKQoreworICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAndScgJiYKKyAgICAgICAgUHlfVE9MT1dFUihlbmNvZGluZ1sxXSkgPT0gJ3QnICYmCisgICAgICAgIFB5X1RPTE9XRVIoZW5jb2RpbmdbMl0pID09ICdmJykgeworICAgICAgICBlbmNvZGluZyArPSAzOworICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgIGVuY29kaW5nKys7CisgICAgICAgIGlmIChlbmNvZGluZ1swXSA9PSAnMScgJiYgZW5jb2RpbmdbMV0gPT0gJzYnKSB7CisgICAgICAgICAgICBlbmNvZGluZyArPSAyOworICAgICAgICAgICAgKmJ5dGVsZW5ndGggPSAyOworICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnXDAnKSB7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYxNkJFOworI2Vsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2TEU7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgICAgIGVuY29kaW5nKys7CisgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1sxXSkgPT0gJ2UnICYmIGVuY29kaW5nWzJdID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2InKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjE2QkU7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdsJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYxNkxFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVuY29kaW5nWzBdID09ICczJyAmJiBlbmNvZGluZ1sxXSA9PSAnMicpIHsKKyAgICAgICAgICAgIGVuY29kaW5nICs9IDI7CisgICAgICAgICAgICAqYnl0ZWxlbmd0aCA9IDQ7CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICdcMCcpIHsKKyNpZmRlZiBXT1JEU19CSUdFTkRJQU4KKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjMyQkU7CisjZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJMRTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICAgICAgZW5jb2RpbmcrKzsKKyAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzFdKSA9PSAnZScgJiYgZW5jb2RpbmdbMl0gPT0gJ1wwJykgeworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnYicpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMzJCRTsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2wnKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjMyTEU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgLyogdXRmLTggKi8KKyAgICAqYnl0ZWxlbmd0aCA9IDM7CisgICAgcmV0dXJuIEVOQ19VVEY4OworfQorCiAvKiBUaGlzIGhhbmRsZXIgaXMgZGVjbGFyZWQgc3RhdGljIHVudGlsIHNvbWVvbmUgZGVtb25zdHJhdGVzCiAgICBhIG5lZWQgdG8gY2FsbCBpdCBkaXJlY3RseS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCkBAIC03NDAsMzcgKzkyNSw3NyBAQAogewogICAgIFB5T2JqZWN0ICpyZXN0dXBsZTsKICAgICBQeU9iamVjdCAqb2JqZWN0OworICAgIFB5T2JqZWN0ICplbmNvZGU7CisgICAgY2hhciAqZW5jb2Rpbmc7CisgICAgaW50IGNvZGU7CisgICAgaW50IGJ5dGVsZW5ndGg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3Qgc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBlbmQ7CiAgICAgUHlPYmplY3QgKnJlczsKICAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKLSAgICAgICAgY2hhciAqb3V0cDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0cDsKICAgICAgICAgaWYgKFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMyooZW5kLXN0YXJ0KSk7CisgICAgICAgIGlmICghKGVuY29kZSA9IFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nKGV4YykpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmICghKGVuY29kaW5nID0gUHlVbmljb2RlX0FzVVRGOChlbmNvZGUpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGNvZGUgPSBnZXRfc3RhbmRhcmRfZW5jb2RpbmcoZW5jb2RpbmcsICZieXRlbGVuZ3RoKTsKKyAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisKKyAgICAgICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBieXRlbGVuZ3RoKihlbmQtc3RhcnQpKTsKICAgICAgICAgaWYgKCFyZXMpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cCA9IFB5Qnl0ZXNfQXNTdHJpbmcocmVzKTsKKyAgICAgICAgb3V0cCA9ICh1bnNpZ25lZCBjaGFyKilQeUJ5dGVzX0FzU3RyaW5nKHJlcyk7CiAgICAgICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICAgICAgIC8qIG9iamVjdCBpcyBndWFyYW50ZWVkIHRvIGJlICJyZWFkeSIgKi8KICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRF9DSEFSKG9iamVjdCwgaSk7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpIHsKKyAgICAgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKSB7CiAgICAgICAgICAgICAgICAgLyogTm90IGEgc3Vycm9nYXRlLCBmYWlsIHdpdGggb3JpZ2luYWwgZXhjZXB0aW9uICovCiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2xhc3MoZXhjKSwgZXhjKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpvdXRwKysgPSAoY2hhcikoMHhlMCB8IChjaCA+PiAxMikpOwotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweDgwIHwgKChjaCA+PiA2KSAmIDB4M2YpKTsKLSAgICAgICAgICAgICpvdXRwKysgPSAoY2hhcikoMHg4MCB8IChjaCAmIDB4M2YpKTsKKyAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgY2FzZSBFTkNfVVRGODoKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKDB4ZTAgfCAoY2ggPj4gMTIpKTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZikpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHg4MCB8IChjaCAmIDB4M2YpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2TEU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZCRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkxFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDE2KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDI0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyQkU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiAyNCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiAxNik7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKShjaCA+PiA4KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJlc3R1cGxlID0gUHlfQnVpbGRWYWx1ZSgiKE9uKSIsIHJlcywgZW5kKTsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CkBAIC03ODIsMzQgKzEwMDcsNjQgQEAKICAgICAgICAgUHlfVUNTNCBjaCA9IDA7CiAgICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydChleGMsICZzdGFydCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZChleGMsICZlbmQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKG9iamVjdCA9IFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdChleGMpKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBpZiAoIShwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcob2JqZWN0KSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RlID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcoZXhjKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCEoZW5jb2RpbmcgPSBQeVVuaWNvZGVfQXNVVEY4KGVuY29kZSkpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY29kZSA9IGdldF9zdGFuZGFyZF9lbmNvZGluZyhlbmNvZGluZywgJmJ5dGVsZW5ndGgpOworICAgICAgICBQeV9ERUNSRUYoZW5jb2RlKTsKKwogICAgICAgICAvKiBUcnkgZGVjb2RpbmcgYSBzaW5nbGUgc3Vycm9nYXRlIGNoYXJhY3Rlci4gSWYKICAgICAgICAgICAgdGhlcmUgYXJlIG1vcmUsIGxldCB0aGUgY29kZWMgY2FsbCB1cyBhZ2Fpbi4gKi8KICAgICAgICAgcCArPSBzdGFydDsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUob2JqZWN0KSAtIHN0YXJ0ID49IDMgJiYKLSAgICAgICAgICAgIChwWzBdICYgMHhmMCkgPT0gMHhlMCAmJgotICAgICAgICAgICAgKHBbMV0gJiAweGMwKSA9PSAweDgwICYmCi0gICAgICAgICAgICAocFsyXSAmIDB4YzApID09IDB4ODApIHsKLSAgICAgICAgICAgIC8qIGl0J3MgYSB0aHJlZS1ieXRlIGNvZGUgKi8KLSAgICAgICAgICAgIGNoID0gKChwWzBdICYgMHgwZikgPDwgMTIpICsgKChwWzFdICYgMHgzZikgPDwgNikgKyAocFsyXSAmIDB4M2YpOwotICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwIHx8IGNoID4gMHhkZmZmKQotICAgICAgICAgICAgICAgIC8qIGl0J3Mgbm90IGEgc3Vycm9nYXRlIC0gZmFpbCAqLwotICAgICAgICAgICAgICAgIGNoID0gMDsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUob2JqZWN0KSAtIHN0YXJ0ID49IGJ5dGVsZW5ndGgpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgeworICAgICAgICAgICAgY2FzZSBFTkNfVVRGODoKKyAgICAgICAgICAgICAgICBpZiAoKHBbMF0gJiAweGYwKSA9PSAweGUwICYmCisgICAgICAgICAgICAgICAgICAgIChwWzFdICYgMHhjMCkgPT0gMHg4MCAmJgorICAgICAgICAgICAgICAgICAgICAocFsyXSAmIDB4YzApID09IDB4ODApIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLworICAgICAgICAgICAgICAgICAgICBjaCA9ICgocFswXSAmIDB4MGYpIDw8IDEyKSArICgocFsxXSAmIDB4M2YpIDw8IDYpICsgKHBbMl0gJiAweDNmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkxFOgorICAgICAgICAgICAgICAgIGNoID0gcFsxXSA8PCA4IHwgcFswXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2QkU6CisgICAgICAgICAgICAgICAgY2ggPSBwWzBdIDw8IDggfCBwWzFdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJMRToKKyAgICAgICAgICAgICAgICBjaCA9IChwWzNdIDw8IDI0KSB8IChwWzJdIDw8IDE2KSB8IChwWzFdIDw8IDgpIHwgcFswXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyQkU6CisgICAgICAgICAgICAgICAgY2ggPSAocFswXSA8PCAyNCkgfCAocFsxXSA8PCAxNikgfCAocFsyXSA8PCA4KSB8IHBbM107CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKLSAgICAgICAgaWYgKGNoID09IDApIHsKKyAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIC8qIGl0J3Mgbm90IGEgc3Vycm9nYXRlIC0gZmFpbCAqLwogICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjZXB0aW9uSW5zdGFuY2VfQ2xhc3MoZXhjKSwgZXhjKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7CiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJlcywgc3RhcnQrMyk7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBzdGFydCArIGJ5dGVsZW5ndGgpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgd3JvbmdfZXhjZXB0aW9uX3R5cGUoZXhjKTsKQEAgLTEwMjYsNyArMTI4MSw3IEBACiAKICAgICBpZiAoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfQVJSQVlfTEVOR1RIKG1ldGhvZHMpOyArK2kpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlDRnVuY3Rpb25fTmV3KCZtZXRob2RzW2ldLmRlZiwgTlVMTCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZtZXRob2RzW2ldLmRlZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgaWYgKCFmdW5jKQogICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGluaXRpYWxpemUgY29kZWMgZXJyb3IgcmVnaXN0cnkiKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jb21waWxlLmMgYi9QeXRob24vY29tcGlsZS5jCmluZGV4IDZkNjYyNTUuLmE3ZGRjNWEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb21waWxlLmMKKysrIGIvUHl0aG9uL2NvbXBpbGUuYwpAQCAtOTQsNiArOTQsNyBAQAogICAgIENPTVBJTEVSX1NDT1BFX01PRFVMRSwKICAgICBDT01QSUxFUl9TQ09QRV9DTEFTUywKICAgICBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiwKKyAgICBDT01QSUxFUl9TQ09QRV9MQU1CREEsCiAgICAgQ09NUElMRVJfU0NPUEVfQ09NUFJFSEVOU0lPTiwKIH07CiAKQEAgLTExOSw4ICsxMjAsOCBAQAogCiAgICAgUHlPYmplY3QgKnVfcHJpdmF0ZTsgICAgICAgIC8qIGZvciBwcml2YXRlIG5hbWUgbWFuZ2xpbmcgKi8KIAotICAgIGludCB1X2FyZ2NvdW50OyAgICAgICAgLyogbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KLSAgICBpbnQgdV9rd29ubHlhcmdjb3VudDsgLyogbnVtYmVyIG9mIGtleXdvcmQgb25seSBhcmd1bWVudHMgZm9yIGJsb2NrICovCisgICAgUHlfc3NpemVfdCB1X2FyZ2NvdW50OyAgICAgICAgLyogbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KKyAgICBQeV9zc2l6ZV90IHVfa3dvbmx5YXJnY291bnQ7IC8qIG51bWJlciBvZiBrZXl3b3JkIG9ubHkgYXJndW1lbnRzIGZvciBibG9jayAqLwogICAgIC8qIFBvaW50ZXIgdG8gdGhlIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGJsb2NrLiAgQnkgZm9sbG93aW5nIGJfbGlzdAogICAgICAgIG1lbWJlcnMsIHlvdSBjYW4gcmVhY2ggYWxsIGVhcmx5IGFsbG9jYXRlZCBibG9ja3MuICovCiAgICAgYmFzaWNibG9jayAqdV9ibG9ja3M7CkBAIC0xNDksOCArMTUwLDcgQEAKICovCiAKIHN0cnVjdCBjb21waWxlciB7Ci0gICAgY29uc3QgY2hhciAqY19maWxlbmFtZTsKLSAgICBQeU9iamVjdCAqY19maWxlbmFtZV9vYmo7CisgICAgUHlPYmplY3QgKmNfZmlsZW5hbWU7CiAgICAgc3RydWN0IHN5bXRhYmxlICpjX3N0OwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmNfZnV0dXJlOyAvKiBwb2ludGVyIHRvIG1vZHVsZSdzIF9fZnV0dXJlX18gKi8KICAgICBQeUNvbXBpbGVyRmxhZ3MgKmNfZmxhZ3M7CkBAIC0xNzAsNyArMTcwLDcgQEAKIHN0YXRpYyBpbnQgY29tcGlsZXJfbmV4dF9pbnN0cihzdHJ1Y3QgY29tcGlsZXIgKiwgYmFzaWNibG9jayAqKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3Aoc3RydWN0IGNvbXBpbGVyICosIGludCk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX28oc3RydWN0IGNvbXBpbGVyICosIGludCwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1zdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICosIGludCwgaW50KTsKK3N0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBQeV9zc2l6ZV90KTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaihzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBiYXNpY2Jsb2NrICosIGludCk7CiBzdGF0aWMgYmFzaWNibG9jayAqY29tcGlsZXJfdXNlX25ld19ibG9jayhzdHJ1Y3QgY29tcGlsZXIgKik7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2Vycm9yKHN0cnVjdCBjb21waWxlciAqLCBjb25zdCBjaGFyICopOwpAQCAtMTk1LDEyICsxOTUsMTMgQEAKIHN0YXRpYyBpbnQgZXhwcl9jb25zdGFudChzdHJ1Y3QgY29tcGlsZXIgKiwgZXhwcl90eSk7CiAKIHN0YXRpYyBpbnQgY29tcGlsZXJfd2l0aChzdHJ1Y3QgY29tcGlsZXIgKiwgc3RtdF90eSwgaW50KTsKLXN0YXRpYyBpbnQgY29tcGlsZXJfY2FsbF9oZWxwZXIoc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgbiwKK3N0YXRpYyBpbnQgY29tcGlsZXJfY2FsbF9oZWxwZXIoc3RydWN0IGNvbXBpbGVyICpjLCBQeV9zc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfdHJ5X2V4Y2VwdChzdHJ1Y3QgY29tcGlsZXIgKiwgc3RtdF90eSk7CitzdGF0aWMgaW50IGNvbXBpbGVyX3NldF9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKik7CiAKIHN0YXRpYyBQeUNvZGVPYmplY3QgKmFzc2VtYmxlKHN0cnVjdCBjb21waWxlciAqLCBpbnQgYWRkTm9uZSk7CiBzdGF0aWMgUHlPYmplY3QgKl9fZG9jX187CkBAIC0yODgsOCArMjg5LDggQEAKIH0KIAogUHlDb2RlT2JqZWN0ICoKLVB5QVNUX0NvbXBpbGVFeChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncywKLSAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQorUHlBU1RfQ29tcGlsZU9iamVjdChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBzdHJ1Y3QgY29tcGlsZXIgYzsKICAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKQEAgLTMwNCwxMiArMzA1LDEwIEBACiAKICAgICBpZiAoIWNvbXBpbGVyX2luaXQoJmMpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgIGMuY19maWxlbmFtZSA9IGZpbGVuYW1lOwotICAgIGMuY19maWxlbmFtZV9vYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICBpZiAoIWMuY19maWxlbmFtZV9vYmopCi0gICAgICAgIGdvdG8gZmluYWxseTsKICAgICBjLmNfYXJlbmEgPSBhcmVuYTsKLSAgICBjLmNfZnV0dXJlID0gUHlGdXR1cmVfRnJvbUFTVChtb2QsIGZpbGVuYW1lKTsKKyAgICBjLmNfZnV0dXJlID0gUHlGdXR1cmVfRnJvbUFTVE9iamVjdChtb2QsIGZpbGVuYW1lKTsKICAgICBpZiAoYy5jX2Z1dHVyZSA9PSBOVUxMKQogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgaWYgKCFmbGFncykgewpAQCAtMzIzLDcgKzMyMiw3IEBACiAgICAgYy5jX29wdGltaXplID0gKG9wdGltaXplID09IC0xKSA/IFB5X09wdGltaXplRmxhZyA6IG9wdGltaXplOwogICAgIGMuY19uZXN0bGV2ZWwgPSAwOwogCi0gICAgYy5jX3N0ID0gUHlTeW10YWJsZV9CdWlsZChtb2QsIGZpbGVuYW1lLCBjLmNfZnV0dXJlKTsKKyAgICBjLmNfc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGMuY19mdXR1cmUpOwogICAgIGlmIChjLmNfc3QgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJubyBzeW10YWJsZSIpOwpAQCAtMzM5LDYgKzMzOCwyMSBAQAogfQogCiBQeUNvZGVPYmplY3QgKgorUHlBU1RfQ29tcGlsZUV4KG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBQeUNvZGVPYmplY3QgKmNvOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gY287CisKK30KKworUHlDb2RlT2JqZWN0ICoKIFB5Tm9kZV9Db21waWxlKHN0cnVjdCBfbm9kZSAqbiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IE5VTEw7CkBAIC0zNjAsOCArMzc0LDcgQEAKICAgICAgICAgUHlTeW10YWJsZV9GcmVlKGMtPmNfc3QpOwogICAgIGlmIChjLT5jX2Z1dHVyZSkKICAgICAgICAgUHlPYmplY3RfRnJlZShjLT5jX2Z1dHVyZSk7Ci0gICAgaWYgKGMtPmNfZmlsZW5hbWVfb2JqKQotICAgICAgICBQeV9ERUNSRUYoYy0+Y19maWxlbmFtZV9vYmopOworICAgIFB5X1hERUNSRUYoYy0+Y19maWxlbmFtZSk7CiAgICAgUHlfREVDUkVGKGMtPmNfc3RhY2spOwogfQogCkBAIC0zNzUsNyArMzg4LDcgQEAKIAogICAgIG4gPSBQeUxpc3RfU2l6ZShsaXN0KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoaSk7CisgICAgICAgIHYgPSBQeUxvbmdfRnJvbVNzaXplX3QoaSk7CiAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00MDMsNyArNDE2LDcgQEAKICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0Ynl0eXBlKFB5T2JqZWN0ICpzcmMsIGludCBzY29wZV90eXBlLCBpbnQgZmxhZywgaW50IG9mZnNldCkKK2RpY3RieXR5cGUoUHlPYmplY3QgKnNyYywgaW50IHNjb3BlX3R5cGUsIGludCBmbGFnLCBQeV9zc2l6ZV90IG9mZnNldCkKIHsKICAgICBQeV9zc2l6ZV90IGkgPSBvZmZzZXQsIHNjb3BlLCBudW1fa2V5cywga2V5X2k7CiAgICAgUHlPYmplY3QgKmssICp2LCAqZGVzdCA9IFB5RGljdF9OZXcoKTsKQEAgLTQzNyw3ICs0NTAsNyBAQAogICAgICAgICBzY29wZSA9ICh2aSA+PiBTQ09QRV9PRkZTRVQpICYgU0NPUEVfTUFTSzsKIAogICAgICAgICBpZiAoc2NvcGUgPT0gc2NvcGVfdHlwZSB8fCB2aSAmIGZsYWcpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKml0ZW0gPSBQeUxvbmdfRnJvbUxvbmcoaSk7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwbGUsICppdGVtID0gUHlMb25nX0Zyb21Tc2l6ZV90KGkpOwogICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzb3J0ZWRfa2V5cyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlc3QpOwpAQCAtNTM1LDYgKzU0OCwzNyBAQAogICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAodS0+dV9zdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlKSB7CisgICAgICAgIC8qIENvb2sgdXAgYSBpbXBsaWNpdCBfX2NsYXNzX18gY2VsbC4gKi8KKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19jbGFzc19fKTsKKyAgICAgICAgUHlPYmplY3QgKnR1cGxlLCAqbmFtZSwgKnplcm87CisgICAgICAgIGludCByZXM7CisgICAgICAgIGFzc2VydCh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MpOworICAgICAgICBhc3NlcnQoUHlEaWN0X1NpemUodS0+dV9jZWxsdmFycykgPT0gMCk7CisgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2NsYXNzX18pOworICAgICAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHR1cGxlID0gUHlUdXBsZV9QYWNrKDIsIG5hbWUsIFB5X1RZUEUobmFtZSkpOworICAgICAgICBpZiAoIXR1cGxlKSB7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB6ZXJvID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbSh1LT51X2NlbGx2YXJzLCB0dXBsZSwgemVybyk7CisgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgIFB5X0RFQ1JFRih6ZXJvKTsKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQogCiAgICAgdS0+dV9mcmVldmFycyA9IGRpY3RieXR5cGUodS0+dV9zdGUtPnN0ZV9zeW1ib2xzLCBGUkVFLCBERUZfRlJFRV9DTEFTUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2l6ZSh1LT51X2NlbGx2YXJzKSk7CkBAIC01ODAsMTMgKzYyNCwxOCBAQAogICAgIGlmIChjb21waWxlcl91c2VfbmV3X2Jsb2NrKGMpID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSAhPSBDT01QSUxFUl9TQ09QRV9NT0RVTEUpIHsKKyAgICAgICAgaWYgKCFjb21waWxlcl9zZXRfcXVhbG5hbWUoYykpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIHZvaWQKIGNvbXBpbGVyX2V4aXRfc2NvcGUoc3RydWN0IGNvbXBpbGVyICpjKQogewotICAgIGludCBuOworICAgIFB5X3NzaXplX3QgbjsKICAgICBQeU9iamVjdCAqY2Fwc3VsZTsKIAogICAgIGMtPmNfbmVzdGxldmVsLS07CkBAIC02MDcsNTcgKzY1Niw3NyBAQAogCiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1jb21waWxlcl9zY29wZV9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMpCitzdGF0aWMgaW50Citjb21waWxlcl9zZXRfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICpjKQogewotICAgIFB5X3NzaXplX3Qgc3RhY2tfc2l6ZSwgaTsKICAgICBfUHlfc3RhdGljX3N0cmluZyhkb3QsICIuIik7Ci0gICAgX1B5X3N0YXRpY19zdHJpbmcobG9jYWxzLCAiPGxvY2Fscz4iKTsKLSAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqdTsKLSAgICBQeU9iamVjdCAqY2Fwc3VsZSwgKm5hbWUsICpzZXEsICpkb3Rfc3RyLCAqbG9jYWxzX3N0cjsKKyAgICBfUHlfc3RhdGljX3N0cmluZyhkb3RfbG9jYWxzLCAiLjxsb2NhbHM+Iik7CisgICAgUHlfc3NpemVfdCBzdGFja19zaXplOworICAgIHN0cnVjdCBjb21waWxlcl91bml0ICp1ID0gYy0+dTsKKyAgICBQeU9iamVjdCAqbmFtZSwgKmJhc2UsICpkb3Rfc3RyLCAqZG90X2xvY2Fsc19zdHI7CiAKLSAgICB1ID0gYy0+dTsKLSAgICBpZiAodS0+dV9xdWFsbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRih1LT51X3F1YWxuYW1lKTsKLSAgICAgICAgcmV0dXJuIHUtPnVfcXVhbG5hbWU7Ci0gICAgfQotCi0gICAgc2VxID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoc2VxID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCisgICAgYmFzZSA9IE5VTEw7CiAgICAgc3RhY2tfc2l6ZSA9IFB5TGlzdF9HRVRfU0laRShjLT5jX3N0YWNrKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc3RhY2tfc2l6ZTsgaSsrKSB7Ci0gICAgICAgIGNhcHN1bGUgPSBQeUxpc3RfR0VUX0lURU0oYy0+Y19zdGFjaywgaSk7Ci0gICAgICAgIHUgPSAoc3RydWN0IGNvbXBpbGVyX3VuaXQgKilQeUNhcHN1bGVfR2V0UG9pbnRlcihjYXBzdWxlLCBDT01QSUxFUl9DQVBTVUxFX05BTUVfQ09NUElMRVJfVU5JVCk7Ci0gICAgICAgIGFzc2VydCh1KTsKLSAgICAgICAgaWYgKHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9NT0RVTEUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCB1LT51X25hbWUpKQotICAgICAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04pIHsKLSAgICAgICAgICAgIGxvY2Fsc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmbG9jYWxzKTsKLSAgICAgICAgICAgIGlmIChsb2NhbHNfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIGxvY2Fsc19zdHIpKQotICAgICAgICAgICAgICAgIGdvdG8gX2Vycm9yOworICAgIGFzc2VydChzdGFja19zaXplID49IDEpOworICAgIGlmIChzdGFja19zaXplID4gMSkgeworICAgICAgICBpbnQgc2NvcGUsIGZvcmNlX2dsb2JhbCA9IDA7CisgICAgICAgIHN0cnVjdCBjb21waWxlcl91bml0ICpwYXJlbnQ7CisgICAgICAgIFB5T2JqZWN0ICptYW5nbGVkLCAqY2Fwc3VsZTsKKworICAgICAgICBjYXBzdWxlID0gUHlMaXN0X0dFVF9JVEVNKGMtPmNfc3RhY2ssIHN0YWNrX3NpemUgLSAxKTsKKyAgICAgICAgcGFyZW50ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQpOworICAgICAgICBhc3NlcnQocGFyZW50KTsKKworICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OIHx8IHUtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9DTEFTUykgeworICAgICAgICAgICAgYXNzZXJ0KHUtPnVfbmFtZSk7CisgICAgICAgICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShwYXJlbnQtPnVfcHJpdmF0ZSwgdS0+dV9uYW1lKTsKKyAgICAgICAgICAgIGlmICghbWFuZ2xlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShwYXJlbnQtPnVfc3RlLCBtYW5nbGVkKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtYW5nbGVkKTsKKyAgICAgICAgICAgIGFzc2VydChzY29wZSAhPSBHTE9CQUxfSU1QTElDSVQpOworICAgICAgICAgICAgaWYgKHNjb3BlID09IEdMT0JBTF9FWFBMSUNJVCkKKyAgICAgICAgICAgICAgICBmb3JjZV9nbG9iYWwgPSAxOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmb3JjZV9nbG9iYWwpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPnVfc2NvcGVfdHlwZSA9PSBDT01QSUxFUl9TQ09QRV9GVU5DVElPTgorICAgICAgICAgICAgICAgIHx8IHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0xBTUJEQSkgeworICAgICAgICAgICAgICAgIGRvdF9sb2NhbHNfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdF9sb2NhbHMpOworICAgICAgICAgICAgICAgIGlmIChkb3RfbG9jYWxzX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBiYXNlID0gUHlVbmljb2RlX0NvbmNhdChwYXJlbnQtPnVfcXVhbG5hbWUsIGRvdF9sb2NhbHNfc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihwYXJlbnQtPnVfcXVhbG5hbWUpOworICAgICAgICAgICAgICAgIGJhc2UgPSBwYXJlbnQtPnVfcXVhbG5hbWU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgdSA9IGMtPnU7Ci0gICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCB1LT51X25hbWUpKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBkb3Rfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmRvdCk7Ci0gICAgaWYgKGRvdF9zdHIgPT0gTlVMTCkKLSAgICAgICAgZ290byBfZXJyb3I7Ci0gICAgbmFtZSA9IFB5VW5pY29kZV9Kb2luKGRvdF9zdHIsIHNlcSk7Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgdS0+dV9xdWFsbmFtZSA9IG5hbWU7Ci0gICAgUHlfWElOQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gbmFtZTsKIAotX2Vycm9yOgotICAgIFB5X1hERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CisgICAgICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKKyAgICAgICAgaWYgKGRvdF9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IFB5VW5pY29kZV9Db25jYXQoYmFzZSwgZG90X3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihiYXNlKTsKKyAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZuYW1lLCB1LT51X25hbWUpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9JTkNSRUYodS0+dV9uYW1lKTsKKyAgICAgICAgbmFtZSA9IHUtPnVfbmFtZTsKKyAgICB9CisgICAgdS0+dV9xdWFsbmFtZSA9IG5hbWU7CisKKyAgICByZXR1cm4gMTsKIH0KIAogLyogQWxsb2NhdGUgYSBuZXcgYmxvY2sgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuCkBAIC03ODQsOCArODUzLDggQEAKICAgICBiLT5iX2luc3RyW29mZl0uaV9saW5lbm8gPSBjLT51LT51X2xpbmVubzsKIH0KIAotc3RhdGljIGludAotb3Bjb2RlX3N0YWNrX2VmZmVjdChpbnQgb3Bjb2RlLCBpbnQgb3BhcmcpCitpbnQKK1B5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChpbnQgb3Bjb2RlLCBpbnQgb3BhcmcpCiB7CiAgICAgc3dpdGNoIChvcGNvZGUpIHsKICAgICAgICAgY2FzZSBQT1BfVE9QOgpAQCAtODYyLDggKzkzMSw2IEBACiAgICAgICAgICAgICByZXR1cm4gNzsKICAgICAgICAgY2FzZSBXSVRIX0NMRUFOVVA6CiAgICAgICAgICAgICByZXR1cm4gLTE7IC8qIFhYWCBTb21ldGltZXMgbW9yZSAqLwotICAgICAgICBjYXNlIFNUT1JFX0xPQ0FMUzoKLSAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBSRVRVUk5fVkFMVUU6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgSU1QT1JUX1NUQVI6CkBAIC05NzAsMTcgKzEwMzcsMTYgQEAKICAgICAgICAgY2FzZSBMT0FEX0NMT1NVUkU6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBMT0FEX0RFUkVGOgorICAgICAgICBjYXNlIExPQURfQ0xBU1NERVJFRjoKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIFNUT1JFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIERFTEVURV9ERVJFRjoKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvcGNvZGUgPSAlZFxuIiwgb3Bjb2RlKTsKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIm9wY29kZV9zdGFja19lZmZlY3QoKSIpOwotCisgICAgICAgICAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7CiAgICAgfQotICAgIHJldHVybiAwOyAvKiBub3QgcmVhY2hhYmxlICovCisgICAgcmV0dXJuIFBZX0lOVkFMSURfU1RBQ0tfRUZGRUNUOyAvKiBub3QgcmVhY2hhYmxlICovCiB9CiAKIC8qIEFkZCBhbiBvcGNvZGUgd2l0aCBubyBhcmd1bWVudC4KQEAgLTEwMDYsNyArMTA3Miw3IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBQeV9zc2l6ZV90CiBjb21waWxlcl9hZGRfbyhzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5T2JqZWN0ICpkaWN0LCBQeU9iamVjdCAqbykKIHsKICAgICBQeU9iamVjdCAqdCwgKnY7CkBAIC0xMDYwLDcgKzExMjYsNyBAQAogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgYXJnID0gUHlEaWN0X1NpemUoZGljdCk7Ci0gICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoYXJnKTsKKyAgICAgICAgdiA9IFB5TG9uZ19Gcm9tU3NpemVfdChhcmcpOwogICAgICAgICBpZiAoIXYpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih0KTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTEwODIsNyArMTE0OCw3IEBACiBjb21waWxlcl9hZGRvcF9vKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgUHlPYmplY3QgKmRpY3QsCiAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbykKIHsKLSAgICBpbnQgYXJnID0gY29tcGlsZXJfYWRkX28oYywgZGljdCwgbyk7CisgICAgUHlfc3NpemVfdCBhcmcgPSBjb21waWxlcl9hZGRfbyhjLCBkaWN0LCBvKTsKICAgICBpZiAoYXJnIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNvbXBpbGVyX2FkZG9wX2koYywgb3Bjb2RlLCBhcmcpOwpAQCAtMTA5Miw3ICsxMTU4LDcgQEAKIGNvbXBpbGVyX2FkZG9wX25hbWUoc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqZGljdCwKICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8pCiB7Ci0gICAgaW50IGFyZzsKKyAgICBQeV9zc2l6ZV90IGFyZzsKICAgICBQeU9iamVjdCAqbWFuZ2xlZCA9IF9QeV9NYW5nbGUoYy0+dS0+dV9wcml2YXRlLCBvKTsKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTEwOCwxNiArMTE3NCwyMiBAQAogKi8KIAogc3RhdGljIGludAotY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIGludCBvcGFyZykKK2NvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeV9zc2l6ZV90IG9wYXJnKQogewogICAgIHN0cnVjdCBpbnN0ciAqaTsKICAgICBpbnQgb2ZmOworCisgICAgLyogSW50ZWdlciBhcmd1bWVudHMgYXJlIGxpbWl0IHRvIDE2LWJpdC4gVGhlcmUgaXMgYW4gZXh0ZW5zaW9uIGZvciAzMi1iaXQKKyAgICAgICBpbnRlZ2VyIGFyZ3VtZW50cy4gKi8KKyAgICBhc3NlcnQoKC0yMTQ3NDgzNjQ3LTEpIDw9IG9wYXJnKTsKKyAgICBhc3NlcnQob3BhcmcgPD0gMjE0NzQ4MzY0Nyk7CisKICAgICBvZmYgPSBjb21waWxlcl9uZXh0X2luc3RyKGMsIGMtPnUtPnVfY3VyYmxvY2spOwogICAgIGlmIChvZmYgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpID0gJmMtPnUtPnVfY3VyYmxvY2stPmJfaW5zdHJbb2ZmXTsKICAgICBpLT5pX29wY29kZSA9IG9wY29kZTsKLSAgICBpLT5pX29wYXJnID0gb3Bhcmc7CisgICAgaS0+aV9vcGFyZyA9IFB5X1NBRkVfRE9XTkNBU1Qob3BhcmcsIFB5X3NzaXplX3QsIGludCk7CiAgICAgaS0+aV9oYXNhcmcgPSAxOwogICAgIGNvbXBpbGVyX3NldF9saW5lbm8oYywgb2ZmKTsKICAgICByZXR1cm4gMTsKQEAgLTEzMzAsMTYgKzE0MDIsMTkgQEAKIHN0YXRpYyBpbnQKIGdldF9yZWZfdHlwZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5T2JqZWN0ICpuYW1lKQogewotICAgIGludCBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG5hbWUpOworICAgIGludCBzY29wZTsKKyAgICBpZiAoYy0+dS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTICYmCisgICAgICAgICFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19jbGFzc19fIikpCisgICAgICAgIHJldHVybiBDRUxMOworICAgIHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CiAgICAgaWYgKHNjb3BlID09IDApIHsKICAgICAgICAgY2hhciBidWZbMzUwXTsKICAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLAotICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHNjb3BlIGZvciAlLjEwMHMgaW4gJS4xMDBzKCVzKSBpbiAlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHNjb3BlIGZvciAlLjEwMHMgaW4gJS4xMDBzKCVzKVxuIgogICAgICAgICAgICAgICAgICAgICAgICJzeW1ib2xzOiAlc1xubG9jYWxzOiAlc1xuZ2xvYmFsczogJXMiLAogICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKG5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGMtPnUtPnVfbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICBjLT5jX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV9zdGUtPnN0ZV9zeW1ib2xzKSwKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfdmFybmFtZXMpLAogICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV9uYW1lcykKQEAgLTEzNjUsOSArMTQ0MCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNvbXBpbGVyX21ha2VfY2xvc3VyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5Q29kZU9iamVjdCAqY28sIGludCBhcmdzLCBQeU9iamVjdCAqcXVhbG5hbWUpCitjb21waWxlcl9tYWtlX2Nsb3N1cmUoc3RydWN0IGNvbXBpbGVyICpjLCBQeUNvZGVPYmplY3QgKmNvLCBQeV9zc2l6ZV90IGFyZ3MsIFB5T2JqZWN0ICpxdWFsbmFtZSkKIHsKLSAgICBpbnQgaSwgZnJlZSA9IFB5Q29kZV9HZXROdW1GcmVlKGNvKTsKKyAgICBQeV9zc2l6ZV90IGksIGZyZWUgPSBQeUNvZGVfR2V0TnVtRnJlZShjbyk7CiAgICAgaWYgKHF1YWxuYW1lID09IE5VTEwpCiAgICAgICAgIHF1YWxuYW1lID0gY28tPmNvX25hbWU7CiAKQEAgLTE0OTQsMjIgKzE1NjksMjIgQEAKICAgICAgICAqLwogICAgIHN0YXRpYyBpZGVudGlmaWVyIHJldHVybl9zdHI7CiAgICAgUHlPYmplY3QgKm5hbWVzOwotICAgIGludCBsZW47CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgbmFtZXMgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmICghbmFtZXMpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5hcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnYW5ub3RhdGlvbiwgbmFtZXMpKQorICAgIGlmIChhcmdzLT52YXJhcmcgJiYgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uICYmCisgICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+dmFyYXJnLT5hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmt3b25seWFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uICYmCi0gICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+a3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dhcmdhbm5vdGF0aW9uLCBuYW1lcykpCisgICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uICYmCisgICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+a3dhcmctPmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKCFyZXR1cm5fc3RyKSB7CkBAIC0xNTMxLDcgKzE2MDYsNyBAQAogICAgIGlmIChsZW4pIHsKICAgICAgICAgLyogY29udmVydCBuYW1lcyB0byBhIHR1cGxlIGFuZCBwbGFjZSBvbiBzdGFjayAqLwogICAgICAgICBQeU9iamVjdCAqZWx0OwotICAgICAgICBpbnQgaTsKKyAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBQeU9iamVjdCAqcyA9IFB5VHVwbGVfTmV3KGxlbik7CiAgICAgICAgIGlmICghcykKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNTQ1LDcgKzE2MjAsOSBAQAogICAgICAgICBsZW4rKzsgLyogaW5jbHVkZSB0aGUganVzdC1wdXNoZWQgdHVwbGUgKi8KICAgICB9CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKLSAgICByZXR1cm4gbGVuOworCisgICAgLyogV2UganVzdCBjaGVja2VkIHRoYXQgbGVuIDw9IDY1NTM1LCBzZWUgYWJvdmUgKi8KKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsIGludCk7CiAKIGVycm9yOgogICAgIFB5X0RFQ1JFRihuYW1lcyk7CkBAIC0xNTYxLDEzICsxNjM4LDE2IEBACiAgICAgZXhwcl90eSByZXR1cm5zID0gcy0+di5GdW5jdGlvbkRlZi5yZXR1cm5zOwogICAgIGFzZGxfc2VxKiBkZWNvcyA9IHMtPnYuRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3Q7CiAgICAgc3RtdF90eSBzdDsKLSAgICBpbnQgaSwgbiwgZG9jc3RyaW5nLCBrd19kZWZhdWx0X2NvdW50ID0gMCwgYXJnbGVuZ3RoOworICAgIFB5X3NzaXplX3QgaSwgbiwgYXJnbGVuZ3RoOworICAgIGludCBkb2NzdHJpbmcsIGt3X2RlZmF1bHRfY291bnQgPSAwOwogICAgIGludCBudW1fYW5ub3RhdGlvbnM7CiAKICAgICBhc3NlcnQocy0+a2luZCA9PSBGdW5jdGlvbkRlZl9raW5kKTsKIAogICAgIGlmICghY29tcGlsZXJfZGVjb3JhdG9ycyhjLCBkZWNvcykpCiAgICAgICAgIHJldHVybiAwOworICAgIGlmIChhcmdzLT5kZWZhdWx0cykKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBpZiAoYXJncy0+a3dvbmx5YXJncykgewogICAgICAgICBpbnQgcmVzID0gY29tcGlsZXJfdmlzaXRfa3dvbmx5ZGVmYXVsdHMoYywgYXJncy0+a3dvbmx5YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3X2RlZmF1bHRzKTsKQEAgLTE1NzUsOCArMTY1NSw2IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKICAgICB9Ci0gICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQotICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIG51bV9hbm5vdGF0aW9ucyA9IGNvbXBpbGVyX3Zpc2l0X2Fubm90YXRpb25zKGMsIGFyZ3MsIHJldHVybnMpOwogICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPCAwKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MDUsOSArMTY4MywxMCBAQAogICAgICAgICBWSVNJVF9JTl9TQ09QRShjLCBzdG10LCBzdCk7CiAgICAgfQogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpIHsKKyAgICBpZiAoY28gPT0gTlVMTCkgewogICAgICAgICBQeV9YREVDUkVGKHF1YWxuYW1lKTsKICAgICAgICAgUHlfWERFQ1JFRihjbyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY2MSwxMiArMTc0MCw2IEBACiAgICAgICAgIFB5X0lOQ1JFRihzLT52LkNsYXNzRGVmLm5hbWUpOwogICAgICAgICBQeV9YREVDUkVGKGMtPnUtPnVfcHJpdmF0ZSk7CiAgICAgICAgIGMtPnUtPnVfcHJpdmF0ZSA9IHMtPnYuQ2xhc3NEZWYubmFtZTsKLSAgICAgICAgLyogZm9yY2UgaXQgdG8gaGF2ZSBvbmUgbWFuZGF0b3J5IGFyZ3VtZW50ICovCi0gICAgICAgIGMtPnUtPnVfYXJnY291bnQgPSAxOwotICAgICAgICAvKiBsb2FkIHRoZSBmaXJzdCBhcmd1bWVudCAoX19sb2NhbHNfXykgLi4uICovCi0gICAgICAgIEFERE9QX0koYywgTE9BRF9GQVNULCAwKTsKLSAgICAgICAgLyogLi4uIGFuZCBzdG9yZSBpdCBpbnRvIGZfbG9jYWxzICovCi0gICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFNUT1JFX0xPQ0FMUyk7CiAgICAgICAgIC8qIGxvYWQgKGdsb2JhbCkgX19uYW1lX18gLi4uICovCiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwogICAgICAgICBpZiAoIXN0ciB8fCAhY29tcGlsZXJfbmFtZW9wKGMsIHN0ciwgTG9hZCkpIHsKQEAgLTE2ODMsMTQgKzE3NTYsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIC8qIHN0b3JlIHRoZSBfX3F1YWxuYW1lX18gKi8KLSAgICAgICAgc3RyID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7Ci0gICAgICAgIGlmICghc3RyKSB7Ci0gICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBzdHIsIGNvbnN0cyk7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBhc3NlcnQoYy0+dS0+dV9xdWFsbmFtZSk7CisgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgYy0+dS0+dV9xdWFsbmFtZSwgY29uc3RzKTsKICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcXVhbG5hbWVfXyIpOwogICAgICAgICBpZiAoIXN0ciB8fCAhY29tcGlsZXJfbmFtZW9wKGMsIHN0ciwgU3RvcmUpKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHN0cik7CkBAIC0xNzAzLDI0ICsxNzcwLDI4IEBACiAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgLyogcmV0dXJuIHRoZSAoZW1wdHkpIF9fY2xhc3NfXyBjZWxsICovCi0gICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKLSAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaSA9IGNvbXBpbGVyX2xvb2t1cF9hcmcoYy0+dS0+dV9jZWxsdmFycywgc3RyKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIGlmIChpID09IC0xKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgd2hlbiBub2JvZHkgcmVmZXJlbmNlcyB0aGUgY2VsbCAqLwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIC8qIFJldHVybiBOb25lICovCi0gICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUpIHsKKyAgICAgICAgICAgIC8qIHJldHVybiB0aGUgKGVtcHR5KSBfX2NsYXNzX18gY2VsbCAqLworICAgICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOworICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBjb21waWxlcl9sb29rdXBfYXJnKGMtPnUtPnVfY2VsbHZhcnMsIHN0cik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoaSA9PSAwKTsKICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgY2VsbCB3aGVyZSB0byBzdG9yZSBfX2NsYXNzX18gKi8KICAgICAgICAgICAgIEFERE9QX0koYywgTE9BRF9DTE9TVVJFLCBpKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIG5vYm9keSByZWZlcmVuY2VzIHRoZSBjZWxsLiBSZXR1cm4gTm9uZS4gKi8KKyAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICAgICAgfQogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOwogICAgICAgICAvKiBjcmVhdGUgdGhlIGNvZGUgb2JqZWN0ICovCiAgICAgICAgIGNvID0gYXNzZW1ibGUoYywgMSk7CkBAIC0xNzg3LDcgKzE4NTgsOCBAQAogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlPYmplY3QgKnF1YWxuYW1lOwogICAgIHN0YXRpYyBpZGVudGlmaWVyIG5hbWU7Ci0gICAgaW50IGt3X2RlZmF1bHRfY291bnQgPSAwLCBhcmdsZW5ndGg7CisgICAgaW50IGt3X2RlZmF1bHRfY291bnQgPSAwOworICAgIFB5X3NzaXplX3QgYXJnbGVuZ3RoOwogICAgIGFyZ3VtZW50c190eSBhcmdzID0gZS0+di5MYW1iZGEuYXJnczsKICAgICBhc3NlcnQoZS0+a2luZCA9PSBMYW1iZGFfa2luZCk7CiAKQEAgLTE3OTcsMTUgKzE4NjksMTUgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIGlmIChhcmdzLT5kZWZhdWx0cykKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBpZiAoYXJncy0+a3dvbmx5YXJncykgewogICAgICAgICBpbnQgcmVzID0gY29tcGlsZXJfdmlzaXRfa3dvbmx5ZGVmYXVsdHMoYywgYXJncy0+a3dvbmx5YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3X2RlZmF1bHRzKTsKICAgICAgICAgaWYgKHJlcyA8IDApIHJldHVybiAwOwogICAgICAgICBrd19kZWZhdWx0X2NvdW50ID0gcmVzOwogICAgIH0KLSAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCi0gICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7Ci0gICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiwKKyAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZSwgZS0+bGluZW5vKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE4MjQsOSArMTg5NiwxMCBAQAogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOwogICAgIH0KICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKQorICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGFyZ2xlbmd0aCA9IGFzZGxfc2VxX0xFTihhcmdzLT5kZWZhdWx0cyk7CkBAIC0yMDk3LDcgKzIxNzAsNyBAQAogY29tcGlsZXJfdHJ5X2V4Y2VwdChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKICAgICBiYXNpY2Jsb2NrICpib2R5LCAqb3JlbHNlLCAqZXhjZXB0LCAqZW5kOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIGJvZHkgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgZXhjZXB0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMjI2Myw3ICsyMzM2LDcgQEAKICAgICAgICBtb2R1bGUgbmFtZXMuCiAgICAgICAgWFhYIFBlcmhhcHMgY2hhbmdlIHRoZSByZXByZXNlbnRhdGlvbiB0byBtYWtlIHRoaXMgY2FzZSBzaW1wbGVyPwogICAgICAqLwotICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0Lm5hbWVzKTsKKyAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnQubmFtZXMpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICBhbGlhc190eSBhbGlhcyA9IChhbGlhc190eSlhc2RsX3NlcV9HRVQocy0+di5JbXBvcnQubmFtZXMsIGkpOwpAQCAtMjI4OCw4ICsyMzYxLDExIEBACiAgICAgICAgICAgICBpZGVudGlmaWVyIHRtcCA9IGFsaWFzLT5uYW1lOwogICAgICAgICAgICAgUHlfc3NpemVfdCBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIoCiAgICAgICAgICAgICAgICAgYWxpYXMtPm5hbWUsICcuJywgMCwgUHlVbmljb2RlX0dFVF9MRU5HVEgoYWxpYXMtPm5hbWUpLCAxKTsKLSAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpCisgICAgICAgICAgICBpZiAoZG90ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgdG1wID0gUHlVbmljb2RlX1N1YnN0cmluZyhhbGlhcy0+bmFtZSwgMCwgZG90KTsKKyAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgciA9IGNvbXBpbGVyX25hbWVvcChjLCB0bXAsIFN0b3JlKTsKICAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKQEAgLTIzMDQsNyArMjM4MCw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9mcm9tX2ltcG9ydChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKLSAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydEZyb20ubmFtZXMpOworICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydEZyb20ubmFtZXMpOwogCiAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlUdXBsZV9OZXcobik7CiAgICAgUHlPYmplY3QgKmxldmVsOwpAQCAtMjM4MCw2ICsyNDU2LDcgQEAKIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKmFzc2VydGlvbl9lcnJvciA9IE5VTEw7CiAgICAgYmFzaWNibG9jayAqZW5kOworICAgIFB5T2JqZWN0KiBtc2c7CiAKICAgICBpZiAoYy0+Y19vcHRpbWl6ZSkKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yMzkwLDExICsyNDY3LDE3IEBACiAgICAgfQogICAgIGlmIChzLT52LkFzc2VydC50ZXN0LT5raW5kID09IFR1cGxlX2tpbmQgJiYKICAgICAgICAgYXNkbF9zZXFfTEVOKHMtPnYuQXNzZXJ0LnRlc3QtPnYuVHVwbGUuZWx0cykgPiAwKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG1zZyA9Ci0gICAgICAgICAgICAiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlLCBwZXJoYXBzIHJlbW92ZSBwYXJlbnRoZXNlcz8iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywgYy0+Y19maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT51LT51X2xpbmVubywgTlVMTCwgTlVMTCkgPT0gLTEpCisgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJhc3NlcnRpb24gaXMgYWx3YXlzIHRydWUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmhhcHMgcmVtb3ZlIHBhcmVudGhlc2VzPyIpOworICAgICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtc2cpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgfQogICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuQXNzZXJ0LnRlc3QpOwogICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTI0MTQsNyArMjQ5Nyw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl92aXNpdF9zdG10KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIC8qIEFsd2F5cyBhc3NpZ24gYSBsaW5lbm8gdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZm9yIGEgc3RtdC4gKi8KICAgICBjLT51LT51X2xpbmVubyA9IHMtPmxpbmVubzsKQEAgLTI0NjIsMTIgKzI1NDUsMTIgQEAKICAgICAgICAgaWYgKHMtPnYuUmFpc2UuZXhjKSB7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmV4Yyk7CiAgICAgICAgICAgICBuKys7Ci0gICAgICAgIGlmIChzLT52LlJhaXNlLmNhdXNlKSB7Ci0gICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuY2F1c2UpOwotICAgICAgICBuKys7CisgICAgICAgICAgICBpZiAocy0+di5SYWlzZS5jYXVzZSkgeworICAgICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuY2F1c2UpOworICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEFERE9QX0koYywgUkFJU0VfVkFSQVJHUywgbik7CisgICAgICAgIEFERE9QX0koYywgUkFJU0VfVkFSQVJHUywgKGludCluKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcnlfa2luZDoKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX3RyeShjLCBzKTsKQEAgLTI2MjcsNyArMjcxMCw4IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9uYW1lb3Aoc3RydWN0IGNvbXBpbGVyICpjLCBpZGVudGlmaWVyIG5hbWUsIGV4cHJfY29udGV4dF90eSBjdHgpCiB7Ci0gICAgaW50IG9wLCBzY29wZSwgYXJnOworICAgIGludCBvcCwgc2NvcGU7CisgICAgUHlfc3NpemVfdCBhcmc7CiAgICAgZW51bSB7IE9QX0ZBU1QsIE9QX0dMT0JBTCwgT1BfREVSRUYsIE9QX05BTUUgfSBvcHR5cGU7CiAKICAgICBQeU9iamVjdCAqZGljdCA9IGMtPnUtPnVfbmFtZXM7CkBAIC0yNjM4LDYgKzI3MjIsMTAgQEAKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgYXNzZXJ0KFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJOb25lIikgJiYKKyAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIlRydWUiKSAmJgorICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiRmFsc2UiKSk7CisKICAgICBvcCA9IDA7CiAgICAgb3B0eXBlID0gT1BfTkFNRTsKICAgICBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG1hbmdsZWQpOwpAQCAtMjY3Myw3ICsyNzYxLDkgQEAKICAgICBzd2l0Y2ggKG9wdHlwZSkgewogICAgIGNhc2UgT1BfREVSRUY6CiAgICAgICAgIHN3aXRjaCAoY3R4KSB7Ci0gICAgICAgIGNhc2UgTG9hZDogb3AgPSBMT0FEX0RFUkVGOyBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgb3AgPSAoYy0+dS0+dV9zdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2spID8gTE9BRF9DTEFTU0RFUkVGIDogTE9BRF9ERVJFRjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlOiBvcCA9IFNUT1JFX0RFUkVGOyBicmVhazsKICAgICAgICAgY2FzZSBBdWdMb2FkOgogICAgICAgICBjYXNlIEF1Z1N0b3JlOgpAQCAtMjc0Nyw3ICsyODM3LDggQEAKIGNvbXBpbGVyX2Jvb2xvcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKICAgICBiYXNpY2Jsb2NrICplbmQ7Ci0gICAgaW50IGp1bXBpLCBpLCBuOworICAgIGludCBqdW1waTsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgYXNkbF9zZXEgKnM7CiAKICAgICBhc3NlcnQoZS0+a2luZCA9PSBCb29sT3Bfa2luZCk7CkBAIC0yNzczLDcgKzI4NjQsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfbGlzdChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgbiA9IGFzZGxfc2VxX0xFTihlLT52Lkxpc3QuZWx0cyk7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuTGlzdC5lbHRzKTsKICAgICBpZiAoZS0+di5MaXN0LmN0eCA9PSBTdG9yZSkgewogICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMjgwNiw3ICsyODk3LDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3R1cGxlKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cyk7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cyk7CiAgICAgaWYgKGUtPnYuVHVwbGUuY3R4ID09IFN0b3JlKSB7CiAgICAgICAgIGludCBpLCBzZWVuX3N0YXIgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0yODM5LDcgKzI5MzAsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfY29tcGFyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgYmFzaWNibG9jayAqY2xlYW51cCA9IE5VTEw7CiAKICAgICAvKiBYWFggdGhlIGxvZ2ljIGNhbiBiZSBjbGVhbmVkIHVwIGZvciAxIG9yIG11bHRpcGxlIGNvbXBhcmlzb25zICovCkBAIC0yODk1LDExICsyOTg2LDExIEBACiAvKiBzaGFyZWQgY29kZSBiZXR3ZWVuIGNvbXBpbGVyX2NhbGwgYW5kIGNvbXBpbGVyX2NsYXNzICovCiBzdGF0aWMgaW50CiBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbiwgLyogQXJncyBhbHJlYWR5IHB1c2hlZCAqLwotICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAotICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKLSAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAotICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKQorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuLCAvKiBBcmdzIGFscmVhZHkgcHVzaGVkICovCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncykKIHsKICAgICBpbnQgY29kZSA9IDA7CiAKQEAgLTI5NjAsNyArMzA1MSw3IEBACiAKICAgICBjb21wcmVoZW5zaW9uX3R5IGdlbjsKICAgICBiYXNpY2Jsb2NrICpzdGFydCwgKmFuY2hvciwgKnNraXAsICppZl9jbGVhbnVwOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIHN0YXJ0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIHNraXAgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0zMDg1LDkgKzMxNzYsMTAgQEAKICAgICB9CiAKICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKQorICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKCFjb21waWxlcl9tYWtlX2Nsb3N1cmUoYywgY28sIDAsIHF1YWxuYW1lKSkKQEAgLTMxOTcsMTIgKzMyODksMTggQEAKICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgLyogb3B0aW1pemUgYXdheSBuYW1lcyB0aGF0IGNhbid0IGJlIHJlYXNzaWduZWQgKi8KICAgICAgICAgaWQgPSBQeVVuaWNvZGVfQXNVVEY4KGUtPnYuTmFtZS5pZCk7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJUcnVlIikgPT0gMCkgcmV0dXJuIDE7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJGYWxzZSIpID09IDApIHJldHVybiAwOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiTm9uZSIpID09IDApIHJldHVybiAwOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAhIGMtPmNfb3B0aW1pemU7Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBpZiAoaWQgJiYgc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAhYy0+Y19vcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6IHsKKyAgICAgICAgUHlPYmplY3QgKm8gPSBlLT52Lk5hbWVDb25zdGFudC52YWx1ZTsKKyAgICAgICAgaWYgKG8gPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIGlmIChvID09IFB5X1RydWUpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZWxzZSBpZiAobyA9PSBQeV9GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMzI5Miw3ICszMzkwLDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3Zpc2l0X2V4cHIoc3RydWN0IGNvbXBpbGVyICpjLCBleHByX3R5IGUpCiB7Ci0gICAgaW50IGksIG47CisgICAgUHlfc3NpemVfdCBpLCBuOwogCiAgICAgLyogSWYgZXhwciBlIGhhcyBhIGRpZmZlcmVudCBsaW5lIG51bWJlciB0aGFuIHRoZSBsYXN0IGV4cHIvc3RtdCwKICAgICAgICBzZXQgYSBuZXcgbGluZSBudW1iZXIgZm9yIHRoZSBuZXh0IGluc3RydWN0aW9uLgpAQCAtMzMyMSw2ICszNDE5LDggQEAKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2lmZXhwKGMsIGUpOwogICAgIGNhc2UgRGljdF9raW5kOgogICAgICAgICBuID0gYXNkbF9zZXFfTEVOKGUtPnYuRGljdC52YWx1ZXMpOworICAgICAgICAvKiBCVUlMRF9NQVAgcGFyYW1ldGVyIGlzIG9ubHkgdXNlZCB0byBwcmVhbGxvY2F0ZSB0aGUgZGljdGlvbmFyeSwKKyAgICAgICAgICAgaXQgZG9lc24ndCBuZWVkIHRvIGJlIGV4YWN0ICovCiAgICAgICAgIEFERE9QX0koYywgQlVJTERfTUFQLCAobj4weEZGRkYgPyAweEZGRkYgOiBuKSk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsCkBAIC0zMzc4LDYgKzM0NzgsOSBAQAogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKICAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBQeV9FbGxpcHNpcywgY29uc3RzKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOYW1lQ29uc3RhbnRfa2luZDoKKyAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBlLT52Lk5hbWVDb25zdGFudC52YWx1ZSwgY29uc3RzKTsKKyAgICAgICAgYnJlYWs7CiAgICAgLyogVGhlIGZvbGxvd2luZyBleHBycyBjYW4gYmUgYXNzaWdubWVudCB0YXJnZXRzLiAqLwogICAgIGNhc2UgQXR0cmlidXRlX2tpbmQ6CiAgICAgICAgIGlmIChlLT52LkF0dHJpYnV0ZS5jdHggIT0gQXVnU3RvcmUpCkBAIC0zNTQ3LDEyICszNjUwLDEyIEBACiAgICAgUHlPYmplY3QgKmxvYzsKICAgICBQeU9iamVjdCAqdSA9IE5VTEwsICp2ID0gTlVMTDsKIAotICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0KGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vKTsKKyAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubyk7CiAgICAgaWYgKCFsb2MpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBsb2MgPSBQeV9Ob25lOwogICAgIH0KLSAgICB1ID0gUHlfQnVpbGRWYWx1ZSgiKE9paU8pIiwgYy0+Y19maWxlbmFtZV9vYmosIGMtPnUtPnVfbGluZW5vLAorICAgIHUgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTykiLCBjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubywKICAgICAgICAgICAgICAgICAgICAgICBjLT51LT51X2NvbF9vZmZzZXQsIGxvYyk7CiAgICAgaWYgKCF1KQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC0zNjY1LDcgKzM3NjgsNyBAQAogICAgIGNhc2UgRXh0U2xpY2Vfa2luZDoKICAgICAgICAga2luZG5hbWUgPSAiZXh0ZW5kZWQgc2xpY2UiOwogICAgICAgICBpZiAoY3R4ICE9IEF1Z1N0b3JlKSB7Ci0gICAgICAgICAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkV4dFNsaWNlLmRpbXMpOworICAgICAgICAgICAgUHlfc3NpemVfdCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuRXh0U2xpY2UuZGltcyk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc2xpY2VfdHkgc3ViID0gKHNsaWNlX3R5KWFzZGxfc2VxX0dFVCgKICAgICAgICAgICAgICAgICAgICAgcy0+di5FeHRTbGljZS5kaW1zLCBpKTsKQEAgLTM3MjQsNyArMzgyNyw3IEBACiBzdGF0aWMgaW50CiBzdGFja2RlcHRoX3dhbGsoc3RydWN0IGNvbXBpbGVyICpjLCBiYXNpY2Jsb2NrICpiLCBpbnQgZGVwdGgsIGludCBtYXhkZXB0aCkKIHsKLSAgICBpbnQgaSwgdGFyZ2V0X2RlcHRoOworICAgIGludCBpLCB0YXJnZXRfZGVwdGgsIGVmZmVjdDsKICAgICBzdHJ1Y3QgaW5zdHIgKmluc3RyOwogICAgIGlmIChiLT5iX3NlZW4gfHwgYi0+Yl9zdGFydGRlcHRoID49IGRlcHRoKQogICAgICAgICByZXR1cm4gbWF4ZGVwdGg7CkBAIC0zNzMyLDcgKzM4MzUsMTMgQEAKICAgICBiLT5iX3N0YXJ0ZGVwdGggPSBkZXB0aDsKICAgICBmb3IgKGkgPSAwOyBpIDwgYi0+Yl9pdXNlZDsgaSsrKSB7CiAgICAgICAgIGluc3RyID0gJmItPmJfaW5zdHJbaV07Ci0gICAgICAgIGRlcHRoICs9IG9wY29kZV9zdGFja19lZmZlY3QoaW5zdHItPmlfb3Bjb2RlLCBpbnN0ci0+aV9vcGFyZyk7CisgICAgICAgIGVmZmVjdCA9IFB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdChpbnN0ci0+aV9vcGNvZGUsIGluc3RyLT5pX29wYXJnKTsKKyAgICAgICAgaWYgKGVmZmVjdCA9PSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvcGNvZGUgPSAlZFxuIiwgaW5zdHItPmlfb3Bjb2RlKTsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5Q29tcGlsZV9PcGNvZGVTdGFja0VmZmVjdCgpIik7CisgICAgICAgIH0KKyAgICAgICAgZGVwdGggKz0gZWZmZWN0OworCiAgICAgICAgIGlmIChkZXB0aCA+IG1heGRlcHRoKQogICAgICAgICAgICAgbWF4ZGVwdGggPSBkZXB0aDsKICAgICAgICAgYXNzZXJ0KGRlcHRoID49IDApOyAvKiBpbnZhbGlkIGNvZGUgb3IgYnVnIGluIHN0YWNrZGVwdGgoKSAqLwpAQCAtMzc5MCw3ICszODk5LDcgQEAKICAgICBhLT5hX2xub3RhYiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgREVGQVVMVF9MTk9UQUJfU0laRSk7CiAgICAgaWYgKCFhLT5hX2xub3RhYikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG5ibG9ja3MgPiBQWV9TSVpFX01BWCAvIHNpemVvZihiYXNpY2Jsb2NrICopKSB7CisgICAgaWYgKChzaXplX3QpbmJsb2NrcyA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKGJhc2ljYmxvY2sgKikpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMzg0Myw3ICszOTUyLDcgQEAKIGFzc2VtYmxlX2xub3RhYihzdHJ1Y3QgYXNzZW1ibGVyICphLCBzdHJ1Y3QgaW5zdHIgKmkpCiB7CiAgICAgaW50IGRfYnl0ZWNvZGUsIGRfbGluZW5vOwotICAgIGludCBsZW47CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgdW5zaWduZWQgY2hhciAqbG5vdGFiOwogCiAgICAgZF9ieXRlY29kZSA9IGEtPmFfb2Zmc2V0IC0gYS0+YV9saW5lbm9fb2ZmOwpAQCAtNDAzNCw3ICs0MTQzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfa2V5c19pbm9yZGVyKFB5T2JqZWN0ICpkaWN0LCBpbnQgb2Zmc2V0KQorZGljdF9rZXlzX2lub3JkZXIoUHlPYmplY3QgKmRpY3QsIFB5X3NzaXplX3Qgb2Zmc2V0KQogewogICAgIFB5T2JqZWN0ICp0dXBsZSwgKmssICp2OwogICAgIFB5X3NzaXplX3QgaSwgcG9zID0gMCwgc2l6ZSA9IFB5RGljdF9TaXplKGRpY3QpOwpAQCAtNDA1OSwxMCArNDE2OCwxMCBAQAogY29tcHV0ZV9jb2RlX2ZsYWdzKHN0cnVjdCBjb21waWxlciAqYykKIHsKICAgICBQeVNURW50cnlPYmplY3QgKnN0ZSA9IGMtPnUtPnVfc3RlOwotICAgIGludCBmbGFncyA9IDAsIG47Ci0gICAgaWYgKHN0ZS0+c3RlX3R5cGUgIT0gTW9kdWxlQmxvY2spCi0gICAgICAgIGZsYWdzIHw9IENPX05FV0xPQ0FMUzsKKyAgICBpbnQgZmxhZ3MgPSAwOworICAgIFB5X3NzaXplX3QgbjsKICAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrKSB7CisgICAgICAgIGZsYWdzIHw9IENPX05FV0xPQ0FMUzsKICAgICAgICAgaWYgKCFzdGUtPnN0ZV91bm9wdGltaXplZCkKICAgICAgICAgICAgIGZsYWdzIHw9IENPX09QVElNSVpFRDsKICAgICAgICAgaWYgKHN0ZS0+c3RlX25lc3RlZCkKQEAgLTQwODQsOSArNDE5Myw5IEBACiAgICAgaWYgKG4gPT0gMCkgewogICAgICAgICBuID0gUHlEaWN0X1NpemUoYy0+dS0+dV9jZWxsdmFycyk7CiAgICAgICAgIGlmIChuIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIGZsYWdzIHw9IENPX05PRlJFRTsKKyAgICAgICAgICAgIGZsYWdzIHw9IENPX05PRlJFRTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDEwNSw3ICs0MjE0LDEwIEBACiAgICAgUHlPYmplY3QgKmZyZWV2YXJzID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2VsbHZhcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpieXRlY29kZSA9IE5VTEw7Ci0gICAgaW50IG5sb2NhbHMsIGZsYWdzOworICAgIFB5X3NzaXplX3QgbmxvY2FsczsKKyAgICBpbnQgbmxvY2Fsc19pbnQ7CisgICAgaW50IGZsYWdzOworICAgIGludCBhcmdjb3VudCwga3dvbmx5YXJnY291bnQ7CiAKICAgICB0bXAgPSBkaWN0X2tleXNfaW5vcmRlcihjLT51LT51X2NvbnN0cywgMCk7CiAgICAgaWYgKCF0bXApCkBAIC00MTI0LDcgKzQyMzYsMTEgQEAKICAgICBmcmVldmFycyA9IGRpY3Rfa2V5c19pbm9yZGVyKGMtPnUtPnVfZnJlZXZhcnMsIFB5VHVwbGVfU2l6ZShjZWxsdmFycykpOwogICAgIGlmICghZnJlZXZhcnMpCiAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICBubG9jYWxzID0gUHlEaWN0X1NpemUoYy0+dS0+dV92YXJuYW1lcyk7CisgICAgYXNzZXJ0KG5sb2NhbHMgPCBJTlRfTUFYKTsKKyAgICBubG9jYWxzX2ludCA9IFB5X1NBRkVfRE9XTkNBU1QobmxvY2FscywgUHlfc3NpemVfdCwgaW50KTsKKwogICAgIGZsYWdzID0gY29tcHV0ZV9jb2RlX2ZsYWdzKGMpOwogICAgIGlmIChmbGFncyA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC00MTM5LDExICs0MjU1LDEzIEBACiAgICAgUHlfREVDUkVGKGNvbnN0cyk7CiAgICAgY29uc3RzID0gdG1wOwogCi0gICAgY28gPSBQeUNvZGVfTmV3KGMtPnUtPnVfYXJnY291bnQsIGMtPnUtPnVfa3dvbmx5YXJnY291bnQsCi0gICAgICAgICAgICAgICAgICAgIG5sb2NhbHMsIHN0YWNrZGVwdGgoYyksIGZsYWdzLAorICAgIGFyZ2NvdW50ID0gUHlfU0FGRV9ET1dOQ0FTVChjLT51LT51X2FyZ2NvdW50LCBQeV9zc2l6ZV90LCBpbnQpOworICAgIGt3b25seWFyZ2NvdW50ID0gUHlfU0FGRV9ET1dOQ0FTVChjLT51LT51X2t3b25seWFyZ2NvdW50LCBQeV9zc2l6ZV90LCBpbnQpOworICAgIGNvID0gUHlDb2RlX05ldyhhcmdjb3VudCwga3dvbmx5YXJnY291bnQsCisgICAgICAgICAgICAgICAgICAgIG5sb2NhbHNfaW50LCBzdGFja2RlcHRoKGMpLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGUsIGNvbnN0cywgbmFtZXMsIHZhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICBmcmVldmFycywgY2VsbHZhcnMsCi0gICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWVfb2JqLCBjLT51LT51X25hbWUsCisgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsIGMtPnUtPnVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9maXJzdGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgYS0+YV9sbm90YWIpOwogIGVycm9yOgpAQCAtNDI1OSw0ICs0Mzc3LDMgQEAKICAgICByZXR1cm4gUHlBU1RfQ29tcGlsZUV4KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCAtMSwgYXJlbmEpOwogfQogCi0KZGlmZiAtLWdpdCBhL1B5dGhvbi9jb25kdmFyLmggYi9QeXRob24vY29uZHZhci5oCmluZGV4IGJiYjQwYmEuLmUwMjJkYzcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb25kdmFyLmgKKysrIGIvUHl0aG9uL2NvbmR2YXIuaApAQCAtMjQxLDcgKzI0MSw3IEBACiAgICAgICogYnV0IHdlIGFyZSBzYWZlIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGEgc2VtYXBob3JlIHdpY2ggaGFzIGFuIGludGVybmFsCiAgICAgICogY291bnQuCiAgICAgICovCi0gICAgd2FpdCA9IFdhaXRGb3JTaW5nbGVPYmplY3QoY3YtPnNlbSwgbXMpOworICAgIHdhaXQgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoY3YtPnNlbSwgbXMsIEZBTFNFKTsKICAgICBQeU1VVEVYX0xPQ0soY3MpOwogICAgIGlmICh3YWl0ICE9IFdBSVRfT0JKRUNUXzApCiAgICAgICAgIC0tY3YtPndhaXRpbmc7CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9haXguYyBiL1B5dGhvbi9keW5sb2FkX2FpeC5jCmluZGV4IGY0MGEwYmUuLjVhYzMwZWQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX2FpeC5jCisrKyBiL1B5dGhvbi9keW5sb2FkX2FpeC5jCkBAIC0zMCwxMSArMzAsMTEgQEAKIHN0YXRpYyBpbnQKIGFpeF9nZXRvbGRtb2R1bGVzKHZvaWQgKiptb2RsaXN0cHRyKQogewotICAgIHJlZ2lzdGVyIE1vZHVsZVB0ciAgICAgICBtb2RwdHIsIHByZXZtb2RwdHI7Ci0gICAgcmVnaXN0ZXIgc3RydWN0IGxkX2luZm8gICpsZGlwdHI7Ci0gICAgcmVnaXN0ZXIgY2hhciAgICAgICAgICAgICpsZGlidWY7Ci0gICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgIGVycmZsYWcsIGJ1ZnNpemUgPSAxMDI0OwotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCAgICBvZmZzZXQ7CisgICAgTW9kdWxlUHRyICAgICAgIG1vZHB0ciwgcHJldm1vZHB0cjsKKyAgICBzdHJ1Y3QgbGRfaW5mbyAgKmxkaXB0cjsKKyAgICBjaGFyICAgICAgICAgICAgKmxkaWJ1ZjsKKyAgICBpbnQgICAgICAgICAgICAgZXJyZmxhZywgYnVmc2l6ZSA9IDEwMjQ7CisgICAgdW5zaWduZWQgaW50ICAgIG9mZnNldDsKICAgICBjaGFyICpwcm9nbmFtZSA9IFB5X0dldFByb2dyYW1OYW1lKCk7CiAKICAgICAvKgpAQCAtMTA2LDcgKzEwNiw3IEBACiAgICAgY2hhciAqbWVzc2FnZVsxMDI0XSwgZXJyYnVmWzEwMjRdOwogICAgIFB5T2JqZWN0ICpwYXRobmFtZV9vYiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVycmJ1Zl9vYiA9IE5VTEw7Ci0gICAgcmVnaXN0ZXIgaW50IGksajsKKyAgICBpbnQgaSxqOwogCiAgICAgc3RydWN0IGVycnRhYiB7CiAgICAgICAgIGludCBlcnJObzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX29zMi5jIGIvUHl0aG9uL2R5bmxvYWRfb3MyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlMWI5MDcuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2R5bmxvYWRfb3MyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0KLS8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgbG9hZGluZyBvZiBleHRlbnNpb24gbW9kdWxlcyAqLwotCi0jZGVmaW5lICBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSAgSU5DTF9ET1NNT0RVTEVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImltcG9ydGRsLmgiCi0KLQotY29uc3QgY2hhciAqX1B5SW1wb3J0X0R5bkxvYWRGaWxldGFiW10gPSB7Ii5weWQiLCAiLmRsbCIsIE5VTEx9OwotCi1kbF9mdW5jcHRyIF9QeUltcG9ydF9HZXREeW5Mb2FkRnVuYyhjb25zdCBjaGFyICpzaG9ydG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwgRklMRSAqZnApCi17Ci0gICAgZGxfZnVuY3B0ciBwOwotICAgIEFQSVJFVCAgcmM7Ci0gICAgSE1PRFVMRSBoRExMOwotICAgIGNoYXIgZmFpbHJlYXNvblsyNTZdOwotICAgIGNoYXIgZnVuY25hbWVbMjU4XTsKLQotICAgIHJjID0gRG9zTG9hZE1vZHVsZShmYWlscmVhc29uLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZmFpbHJlYXNvbiksCi0gICAgICAgICAgICAgICAgICAgICAgIHBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAmaERMTCk7Ci0KLSAgICBpZiAocmMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgY2hhciBlcnJCdWZbMjU2XTsKLSAgICAgICAgUHlPU19zbnByaW50ZihlcnJCdWYsIHNpemVvZihlcnJCdWYpLAotICAgICAgICAgICAgICAgICAgICAgICJETEwgbG9hZCBmYWlsZWQsIHJjID0gJWQ6ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgcmMsIGZhaWxyZWFzb24pOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsIGVyckJ1Zik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIFB5T1Nfc25wcmludGYoZnVuY25hbWUsIHNpemVvZihmdW5jbmFtZSksICJQeUluaXRfJS4yMDBzIiwgc2hvcnRuYW1lKTsKLSAgICByYyA9IERvc1F1ZXJ5UHJvY0FkZHIoaERMTCwgMEwsIGZ1bmNuYW1lLCAmcCk7Ci0gICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICBwID0gTlVMTDsgLyogU2lnbmlmeSBGYWlsdXJlIHRvIEFjcXVpcmUgRW50cnlwb2ludCAqLwotICAgIHJldHVybiBwOwotfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBiL1B5dGhvbi9keW5sb2FkX3NobGliLmMKaW5kZXggNzU1NDRlZC4uODg4ZmJmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYworKysgYi9QeXRob24vZHlubG9hZF9zaGxpYi5jCkBAIC0xOCwxMCArMTgsNiBAQAogCiAjaWZkZWYgSEFWRV9ETEZDTl9ICiAjaW5jbHVkZSA8ZGxmY24uaD4KLSNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlICJkbGZjbi5oIgotI2VuZGlmCiAjZW5kaWYKIAogI2lmIChkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pKSAmJiAhZGVmaW5lZChfX0VMRl9fKQpAQCAtNDAsMTAgKzM2LDYgQEAKICNpZmRlZiBfX0NZR1dJTl9fCiAgICAgIi5kbGwiLAogI2Vsc2UgIC8qICFfX0NZR1dJTl9fICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICAiLnB5ZCIsCi0gICAgIi5kbGwiLAotI2Vsc2UgIC8qICEoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpICovCiAjaWZkZWYgX19WTVMKICAgICAiLmV4ZSIsCiAgICAgIi5FWEUiLApAQCAtNTIsNyArNDQsNiBAQAogICAgICIuYWJpIiBQWVRIT05fQUJJX1NUUklORyAiLnNvIiwKICAgICAiLnNvIiwKICNlbmRpZiAgLyogX19WTVMgKi8KLSNlbmRpZiAgLyogZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgKi8KICNlbmRpZiAgLyogX19DWUdXSU5fXyAqLwogICAgIE5VTEwsCiB9OwpAQCAtMTE0LDkgKzEwNSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAhKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQogICAgIGRsb3BlbmZsYWdzID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwLT5kbG9wZW5mbGFnczsKLSNlbmRpZgogCiAjaWZkZWYgX19WTVMKICAgICAvKiBWTVMgY3VycmVudGx5IGRvbid0IGFsbG93IGEgcGF0aG5hbWUsIHVzZSBhIGxvZ2ljYWwgbmFtZSBpbnN0ZWFkICovCkBAIC0xMzIsMTkgKzEyMSwzMCBAQAogICAgIGhhbmRsZSA9IGRsb3BlbihwYXRobmFtZSwgZGxvcGVuZmxhZ3MpOwogCiAgICAgaWYgKGhhbmRsZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICptb2RfbmFtZSA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0ICpwYXRoID0gTlVMTDsKLSAgICAgICAgUHlPYmplY3QgKmVycm9yX29iID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QgKm1vZF9uYW1lOworICAgICAgICBQeU9iamVjdCAqcGF0aDsKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX29iOwogICAgICAgICBjb25zdCBjaGFyICplcnJvciA9IGRsZXJyb3IoKTsKICAgICAgICAgaWYgKGVycm9yID09IE5VTEwpCiAgICAgICAgICAgICBlcnJvciA9ICJ1bmtub3duIGRsb3BlbigpIGVycm9yIjsKICAgICAgICAgZXJyb3Jfb2IgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhlcnJvcik7Ci0gICAgICAgIHBhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhwYXRobmFtZSk7CisgICAgICAgIGlmIChlcnJvcl9vYiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIG1vZF9uYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoc2hvcnRuYW1lKTsKKyAgICAgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocGF0aG5hbWUpOworICAgICAgICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICAgICAgUHlfREVDUkVGKG1vZF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5RXJyX1NldEltcG9ydEVycm9yKGVycm9yX29iLCBtb2RfbmFtZSwgcGF0aCk7Ci0gICAgICAgIFB5X1hERUNSRUYoZXJyb3Jfb2IpOwotICAgICAgICBQeV9YREVDUkVGKHBhdGgpOwotICAgICAgICBQeV9YREVDUkVGKG1vZF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgUHlfREVDUkVGKG1vZF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHBhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGZwICE9IE5VTEwgJiYgbmhhbmRsZXMgPCAxMjgpCmRpZmYgLS1naXQgYS9QeXRob24vZXJyb3JzLmMgYi9QeXRob24vZXJyb3JzLmMKaW5kZXggNjI2YjE2ZS4uOTBkYzcyOSAxMDA2NDQKLS0tIGEvUHl0aG9uL2Vycm9ycy5jCisrKyBiL1B5dGhvbi9lcnJvcnMuYwpAQCAtMjAsNiArMjAsOSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKKwogCiB2b2lkCiBQeUVycl9SZXN0b3JlKFB5T2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0cmFjZWJhY2spCkBAIC03MSw2ICs3NCwxMSBAQAogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCAhUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgICAgIC8qIFdlIG11c3Qgbm9ybWFsaXplIHRoZSB2YWx1ZSByaWdodCBub3cgKi8KICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzLCAqZml4ZWRfdmFsdWU7CisjaWZkZWYgUHlfREVCVUcKKyAgICAgICAgICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uCisgICAgICAgICAgICAgICBlcnJvciBpZiBhbiBleGNlcHRpb24gaXMgc2V0IHdoZW4gaXQgaXMgY2FsbGVkICovCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCB8fCB2YWx1ZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKICAgICAgICAgICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpKSB7CkBAIC0xMTIsNiArMTIwLDIwIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGNlcHRpb24sIHZhbHVlLCB0Yik7CiB9CiAKKy8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKKyAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCisgKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwordm9pZAorX1B5RXJyX1NldEtleUVycm9yKFB5T2JqZWN0ICphcmcpCit7CisgICAgUHlPYmplY3QgKnR1cDsKKyAgICB0dXAgPSBQeVR1cGxlX1BhY2soMSwgYXJnKTsKKyAgICBpZiAoIXR1cCkKKyAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgd2lsbCBleHBlY3QgZXJyb3IgdG8gYmUgc2V0IGFueXdheSAqLworICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwgdHVwKTsKKyAgICBQeV9ERUNSRUYodHVwKTsKK30KKwogdm9pZAogUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqZXhjZXB0aW9uKQogewpAQCAtMjI3LDEyICsyNDksMjEgQEAKICAgICAgICB2YWx1ZSB3aWxsIGJlIGFuIGluc3RhbmNlLgogICAgICovCiAgICAgaWYgKFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodHlwZSkpIHsKKyAgICAgICAgaW50IGlzX3N1YmNsYXNzOworICAgICAgICBpZiAoaW5jbGFzcykgeworICAgICAgICAgICAgaXNfc3ViY2xhc3MgPSBQeU9iamVjdF9Jc1N1YmNsYXNzKGluY2xhc3MsIHR5cGUpOworICAgICAgICAgICAgaWYgKGlzX3N1YmNsYXNzIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNfc3ViY2xhc3MgPSAwOworCiAgICAgICAgIC8qIGlmIHRoZSB2YWx1ZSB3YXMgbm90IGFuIGluc3RhbmNlLCBvciBpcyBub3QgYW4gaW5zdGFuY2UKICAgICAgICAgICAgd2hvc2UgY2xhc3MgaXMgKG9yIGlzIGRlcml2ZWQgZnJvbSkgdHlwZSwgdGhlbiB1c2UgdGhlCiAgICAgICAgICAgIHZhbHVlIGFzIGFuIGFyZ3VtZW50IHRvIGluc3RhbnRpYXRpb24gb2YgdGhlIHR5cGUKICAgICAgICAgICAgY2xhc3MuCiAgICAgICAgICovCi0gICAgICAgIGlmICghaW5jbGFzcyB8fCAhUHlPYmplY3RfSXNTdWJjbGFzcyhpbmNsYXNzLCB0eXBlKSkgeworICAgICAgICBpZiAoIWluY2xhc3MgfHwgIWlzX3N1YmNsYXNzKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgKnJlczsKIAogICAgICAgICAgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCkBAIC0zNjYsNiArMzk3LDEyIEBACiBQeU9iamVjdCAqCiBQeUVycl9Ob01lbW9yeSh2b2lkKQogeworICAgIGlmIChQeV9UWVBFKFB5RXhjX01lbW9yeUVycm9yKSA9PSBOVUxMKSB7CisgICAgICAgIC8qIFB5RXJyX05vTWVtb3J5KCkgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSBQeUV4Y19NZW1vcnlFcnJvciBoYXMgYmVlbgorICAgICAgICAgICBpbml0aWFsaXplZCBieSBfUHlFeGNfSW5pdCgpICovCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIk91dCBvZiBtZW1vcnkgYW5kIFB5RXhjX01lbW9yeUVycm9yIGlzIG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIHlldCIpOworICAgIH0KICAgICBQeUVycl9TZXROb25lKFB5RXhjX01lbW9yeUVycm9yKTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTU4OCw3ICs2MjUsNyBAQAogCiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50IGllcnIpCiB7Ci0gICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgTlVMTCk7CiB9CiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCkBAIC01OTcsNyArNjM0LDcgQEAKIHsKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC02MTEsNyArNjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZShmaWxlbmFtZSwgd2NzbGVuKGZpbGVuYW1lKSkgOgogICAgICAgICAgICAgIE5VTEw7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIG5hbWUpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTY0Niw4ICs2ODMsMTEgQEAKIAogICAgIFB5X0lOQ1JFRihtc2cpOwogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMCwgbXNnKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJuYW1lIiwgbmFtZSk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAicGF0aCIsIHBhdGgpOworCisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgIm5hbWUiLCBuYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJwYXRoIiwgcGF0aCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbChQeUV4Y19JbXBvcnRFcnJvciwgYXJncywga3dhcmdzKTsKICAgICBpZiAoZXJyb3IgIT0gTlVMTCkgewpAQCAtNjc1LDYgKzcxNSw3IEBACiB2b2lkCiBQeUVycl9CYWRJbnRlcm5hbENhbGwodm9pZCkKIHsKKyAgICBhc3NlcnQoMCAmJiAiYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uIik7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAiYmFkIGFyZ3VtZW50IHRvIGludGVybmFsIGZ1bmN0aW9uIik7CiB9CkBAIC02OTQsNiArNzM1LDEyIEBACiAgICAgdmFfc3RhcnQodmFyZ3MpOwogI2VuZGlmCiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCisgICAgICAgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKKwogICAgIHN0cmluZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKICAgICBQeUVycl9TZXRPYmplY3QoZXhjZXB0aW9uLCBzdHJpbmcpOwogICAgIFB5X1hERUNSRUYoc3RyaW5nKTsKQEAgLTc5NSw2MCArODQyLDg0IEBACiB7CiAgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CiAgICAgUHlPYmplY3QgKmYsICp0LCAqdiwgKnRiOwotICAgIFB5RXJyX0ZldGNoKCZ0LCAmdiwgJnRiKTsKLSAgICBmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKLSAgICBpZiAoZiAhPSBOVUxMICYmIGYgIT0gUHlfTm9uZSkgewotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIkV4Y2VwdGlvbiAiLCBmKTsKLSAgICAgICAgaWYgKHQpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0KiBtb2R1bGVOYW1lOwotICAgICAgICAgICAgY2hhciogY2xhc3NOYW1lOwotICAgICAgICAgICAgYXNzZXJ0KFB5RXhjZXB0aW9uQ2xhc3NfQ2hlY2sodCkpOwotICAgICAgICAgICAgY2xhc3NOYW1lID0gUHlFeGNlcHRpb25DbGFzc19OYW1lKHQpOwotICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgY2hhciAqZG90ID0gc3RycmNocihjbGFzc05hbWUsICcuJyk7Ci0gICAgICAgICAgICAgICAgaWYgKGRvdCAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSBkb3QrMTsKLSAgICAgICAgICAgIH0KKyAgICBQeU9iamVjdCAqbW9kdWxlTmFtZSA9IE5VTEw7CisgICAgY2hhciogY2xhc3NOYW1lOwogCi0gICAgICAgICAgICBtb2R1bGVOYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZCh0LCAmUHlJZF9fX21vZHVsZV9fKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGVOYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNoYXIqIG1vZHN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKG1vZHN0ciAmJgotICAgICAgICAgICAgICAgICAgICBzdHJjbXAobW9kc3RyLCAiYnVpbHRpbnMiKSAhPSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKG1vZHN0ciwgZik7Ci0gICAgICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhjbGFzc05hbWUsIGYpOwotICAgICAgICAgICAgaWYgKHYgJiYgdiAhPSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGYpOwotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG9iaikgewotICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgaW4gIiwgZik7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3Qob2JqLCBmLCAwKTsKLSAgICAgICAgfQotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpZ25vcmVkXG4iLCBmKTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogSnVzdCBpbiBjYXNlICovCisgICAgUHlFcnJfRmV0Y2goJnQsICZ2LCAmdGIpOworCisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgIGlmIChmID09IE5VTEwgfHwgZiA9PSBQeV9Ob25lKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBpZiAob2JqKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIkV4Y2VwdGlvbiBpZ25vcmVkIGluOiAiLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3Qob2JqLCBmLCAwKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KKworICAgIGlmIChQeVRyYWNlQmFja19QcmludCh0YiwgZikgPCAwKQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBpZiAoIXQpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGFzc2VydChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHQpKTsKKyAgICBjbGFzc05hbWUgPSBQeUV4Y2VwdGlvbkNsYXNzX05hbWUodCk7CisgICAgaWYgKGNsYXNzTmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGNoYXIgKmRvdCA9IHN0cnJjaHIoY2xhc3NOYW1lLCAnLicpOworICAgICAgICBpZiAoZG90ICE9IE5VTEwpCisgICAgICAgICAgICBjbGFzc05hbWUgPSBkb3QrMTsKKyAgICB9CisKKyAgICBtb2R1bGVOYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZCh0LCAmUHlJZF9fX21vZHVsZV9fKTsKKyAgICBpZiAobW9kdWxlTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kdWxlTmFtZSwgJlB5SWRfYnVpbHRpbnMpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobW9kdWxlTmFtZSwgZiwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiLiIsIGYpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNsYXNzTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjx1bmtub3duPiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoY2xhc3NOYW1lLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgaWYgKHYgJiYgdiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KHYsIGYsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpIDwgMCkKKyAgICAgICAgZ290byBkb25lOworCitkb25lOgorICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7CiAgICAgUHlfWERFQ1JFRih0KTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodGIpOworICAgIFB5RXJyX0NsZWFyKCk7IC8qIEp1c3QgaW4gY2FzZSAqLwogfQogCiBleHRlcm4gUHlPYmplY3QgKlB5TW9kdWxlX0dldFdhcm5pbmdzTW9kdWxlKHZvaWQpOwogCiAKIHZvaWQKLVB5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKSB7CitQeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBsaW5lbm8sIC0xKTsKIH0KIApAQCAtODU4LDcgKzkyOSw3IEBACiAgICB0byBtYWtlIHByaW50aW5nIG9mIGV4Y2VwdGlvbnMgYmVsaWV2ZSBpdCBpcyBhIHN5bnRheCBlcnJvci4gKi8KIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIFB5T2JqZWN0ICpleGMsICp2LCAqdGIsICp0bXA7CiAgICAgX1B5X0lERU5USUZJRVIoZmlsZW5hbWUpOwpAQCAtODkyLDE2ICs5NjMsMTAgQEAKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewotICAgICAgICB0bXAgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgZmlsZW5hbWUpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZCh2LCAmUHlJZF9maWxlbmFtZSwgdG1wKSkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgUHlfREVDUkVGKHRtcCk7Ci0gICAgICAgIH0KIAotICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dChmaWxlbmFtZSwgbGluZW5vKTsKKyAgICAgICAgdG1wID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoZmlsZW5hbWUsIGxpbmVubyk7CiAgICAgICAgIGlmICh0bXApIHsKICAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX3RleHQsIHRtcCkpCiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTkzMSwyMiArOTk2LDMzIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGMsIHYsIHRiKTsKIH0KIAordm9pZAorUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCit7CisgICAgUHlPYmplY3QgKmZpbGVvYmo7CisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBmaWxlb2JqID0gTlVMTDsKKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlb2JqLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgIFB5X1hERUNSRUYoZmlsZW9iaik7Cit9CisKIC8qIEF0dGVtcHQgdG8gbG9hZCB0aGUgbGluZSBvZiB0ZXh0IHRoYXQgdGhlIGV4Y2VwdGlvbiByZWZlcnMgdG8uICBJZiBpdAogICAgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIE5VTEwgYnV0IHdpbGwgbm90IHNldCBhbiBleGNlcHRpb24uCiAKICAgIFhYWCBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHF1aXRlIHNpbWlsYXIgdG8gdGhlCiAgICBmdW5jdGlvbmFsaXR5IGluIHRiX2Rpc3BsYXlsaW5lKCkgaW4gdHJhY2ViYWNrLmMuICovCiAKLVB5T2JqZWN0ICoKLVB5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorc3RhdGljIFB5T2JqZWN0ICoKK2Vycl9wcm9ncmFtdGV4dChGSUxFICpmcCwgaW50IGxpbmVubykKIHsKLSAgICBGSUxFICpmcDsKICAgICBpbnQgaTsKICAgICBjaGFyIGxpbmVidWZbMTAwMF07CiAKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOwogICAgIGlmIChmcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZW5vOyBpKyspIHsKQEAgLTk3Nyw2ICsxMDUzLDI2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQoreworICAgIEZJTEUgKmZwOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMIHx8ICpmaWxlbmFtZSA9PSAnXDAnIHx8IGxpbmVubyA8PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGZpbGVuYW1lLCAiciIgUFlfU1RESU9URVhUTU9ERSk7CisgICAgcmV0dXJuIGVycl9wcm9ncmFtdGV4dChmcCwgbGluZW5vKTsKK30KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9maWxldXRpbHMuYyBiL1B5dGhvbi9maWxldXRpbHMuYwppbmRleCBkYmNiOTIzLi44MTRmMDc2IDEwMDY0NAotLS0gYS9QeXRob24vZmlsZXV0aWxzLmMKKysrIGIvUHl0aG9uL2ZpbGV1dGlscy5jCkBAIC05LDIwICs5LDM5IEBACiAjaW5jbHVkZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIEhBVkVfRkNOVExfSCAqLworCiAjaWZkZWYgX19BUFBMRV9fCiBleHRlcm4gd2NoYXJfdCogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSk7CiAjZW5kaWYKIAorI2lmZGVmIE9fQ0xPRVhFQworLyogRG9lcyBvcGVuKCkgc3VwcG9ydCB0aGUgT19DTE9FWEVDIGZsYWc/IFBvc3NpYmxlIHZhbHVlczoKKworICAgLTE6IHVua25vd24KKyAgICAwOiBvcGVuKCkgaWdub3JlcyBPX0NMT0VYRUMgZmxhZywgZXg6IExpbnV4IGtlcm5lbCBvbGRlciB0aGFuIDIuNi4yMworICAgIDE6IG9wZW4oKSBzdXBwb3J0cyBPX0NMT0VYRUMgZmxhZywgY2xvc2Utb24tZXhlYyBpcyBzZXQKKworICAgVGhlIGZsYWcgaXMgdXNlZCBieSBfUHlfb3BlbigpLCBpby5GaWxlSU8gYW5kIG9zLm9wZW4oKSAqLworaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3MgPSAtMTsKKyNlbmRpZgorCiBQeU9iamVjdCAqCiBfUHlfZGV2aWNlX2VuY29kaW5nKGludCBmZCkKIHsKLSNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoTVNfV0lONjQpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIFVJTlQgY3A7CiAjZW5kaWYKICAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkgfHwgIWlzYXR0eShmZCkpIHsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgaWYgKGZkID09IDApCiAgICAgICAgIGNwID0gR2V0Q29uc29sZUNQKCk7CiAgICAgZWxzZSBpZiAoZmQgPT0gMSB8fCBmZCA9PSAyKQpAQCAtNjAsNyArNzksNyBAQAogICAgd29ya2Fyb3VuZCBpcyBhbHNvIGVuYWJsZWQgb24gZXJyb3IsIGZvciBleGFtcGxlIGlmIGdldHRpbmcgdGhlIGxvY2FsZQogICAgZmFpbGVkLgogCi0gICBWYWx1ZXMgb2YgbG9jYWxlX2lzX2FzY2lpOgorICAgVmFsdWVzIG9mIGZvcmNlX2FzY2lpOgogCiAgICAgICAgMTogdGhlIHdvcmthcm91bmQgaXMgdXNlZDogX1B5X3djaGFyMmNoYXIoKSB1c2VzCiAgICAgICAgICAgZW5jb2RlX2FzY2lpX3N1cnJvZ2F0ZWVzY2FwZSgpIGFuZCBfUHlfY2hhcjJ3Y2hhcigpIHVzZXMKQEAgLTIwMSw3ICsyMjAsNyBAQAogICAgIHVuc2lnbmVkIGNoYXIgKmluOwogICAgIHdjaGFyX3QgKm91dDsKIAotICAgIHJlcyA9IFB5TWVtX01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICByZXMgPSBQeU1lbV9SYXdNYWxsb2MoKHN0cmxlbihhcmcpKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFyZXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yMjksNyArMjQ4LDcgQEAKICAgIFVzZSBfUHlfd2NoYXIyY2hhcigpIHRvIGVuY29kZSB0aGUgY2hhcmFjdGVyIHN0cmluZyBiYWNrIHRvIGEgYnl0ZSBzdHJpbmcuCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgd2lkZSBjaGFyYWN0ZXIgc3RyaW5nICh1c2UKLSAgIFB5TWVtX0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpIGFuZCB3cml0ZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gd2lkZQorICAgUHlNZW1fUmF3RnJlZSgpIHRvIGZyZWUgdGhlIG1lbW9yeSkgYW5kIHdyaXRlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiB3aWRlCiAgICBjaGFyYWN0ZXJzIGV4Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIgaW50byAqc2l6ZSBpZiBzaXplIGlzIG5vdCBOVUxMLCBvcgogICAgTlVMTCBvbiBlcnJvciAoZGVjb2Rpbmcgb3IgbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IpLiBJZiBzaXplIGlzIG5vdCBOVUxMLAogICAgKnNpemUgaXMgc2V0IHRvIChzaXplX3QpLTEgb24gbWVtb3J5IGVycm9yIGFuZCAoc2l6ZV90KS0yIG9uIGRlY29kaW5nCkBAIC0yNTQsOSArMjczLDkgQEAKICAgICB3Y2hhcl90ICpyZXM7CiAgICAgc2l6ZV90IGFyZ3NpemU7CiAgICAgc2l6ZV90IGNvdW50OworI2lmZGVmIEhBVkVfTUJSVE9XQwogICAgIHVuc2lnbmVkIGNoYXIgKmluOwogICAgIHdjaGFyX3QgKm91dDsKLSNpZmRlZiBIQVZFX01CUlRPV0MKICAgICBtYnN0YXRlX3QgbWJzOwogI2VuZGlmCiAKQEAgLTI4Myw3ICszMDIsNyBAQAogICAgIGFyZ3NpemUgPSBtYnN0b3djcyhOVUxMLCBhcmcsIDApOwogI2VuZGlmCiAgICAgaWYgKGFyZ3NpemUgIT0gKHNpemVfdCktMSkgewotICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX1Jhd01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgIGdvdG8gb29tOwogICAgICAgICBjb3VudCA9IG1ic3Rvd2NzKHJlcywgYXJnLCBhcmdzaXplKzEpOwpAQCAtMjkyLDcgKzMxMSw3IEBACiAgICAgICAgICAgICAvKiBPbmx5IHVzZSB0aGUgcmVzdWx0IGlmIGl0IGNvbnRhaW5zIG5vCiAgICAgICAgICAgICAgICBzdXJyb2dhdGUgY2hhcmFjdGVycy4gKi8KICAgICAgICAgICAgIGZvciAodG1wID0gcmVzOyAqdG1wICE9IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKnRtcCA8IDB4ZDgwMCB8fCAqdG1wID4gMHhkZmZmKTsgdG1wKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCp0bXApOyB0bXArKykKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBpZiAoKnRtcCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKHNpemUgIT0gTlVMTCkKQEAgLTMwMCw3ICszMTksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZShyZXMpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgfQogICAgIC8qIENvbnZlcnNpb24gZmFpbGVkLiBGYWxsIGJhY2sgdG8gZXNjYXBpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCiAjaWZkZWYgSEFWRV9NQlJUT1dDCkBAIC0zMDksNyArMzI4LDcgQEAKICAgICAvKiBPdmVyYWxsb2NhdGU7IGFzIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgaW4gdGhlIGFyZ3VtZW50LCB0aGUKICAgICAgICBhY3R1YWwgb3V0cHV0IGNvdWxkIHVzZSBsZXNzIG1lbW9yeS4gKi8KICAgICBhcmdzaXplID0gc3RybGVuKGFyZykgKyAxOwotICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOworICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9SYXdNYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghcmVzKQogICAgICAgICBnb3RvIG9vbTsKICAgICBpbiA9ICh1bnNpZ25lZCBjaGFyKilhcmc7CkBAIC0zMjUsNyArMzQ0LDcgQEAKICAgICAgICAgICAgICAgIHNpbmNlIHdlIHByb3ZpZGUgZXZlcnl0aGluZyB0aGF0IHdlIGhhdmUgLQogICAgICAgICAgICAgICAgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBDIGxpYnJhcnksIG9yIEkKICAgICAgICAgICAgICAgIG1pc3VuZGVyc3Rvb2QgaG93IG1icnRvd2Mgd29ya3MuICovCi0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQogICAgICAgICAgICAgICAgICpzaXplID0gKHNpemVfdCktMjsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzM4LDcgKzM1Nyw3IEBACiAgICAgICAgICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKm91dCA+PSAweGQ4MDAgJiYgKm91dCA8PSAweGRmZmYpIHsKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCpvdXQpKSB7CiAgICAgICAgICAgICAvKiBTdXJyb2dhdGUgY2hhcmFjdGVyLiAgRXNjYXBlIHRoZSBvcmlnaW5hbAogICAgICAgICAgICAgICAgYnl0ZSBzZXF1ZW5jZSB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICAgICAgICAgICAgIGFyZ3NpemUgLT0gY29udmVydGVkOwpAQCAtNTQ3LDE0ICs1NjYsMjE1IEBACiAKICNlbmRpZgogCi0vKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQotICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQKK2dldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCByYWlzZSkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKIAorICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFHZXRIYW5kbGVJbmZvcm1hdGlvbihoYW5kbGUsICZmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCk7CisjZWxzZQorICAgIGludCBmbGFnczsKKworICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQsIDApOworICAgIGlmIChmbGFncyA9PSAtMSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuICEoZmxhZ3MgJiBGRF9DTE9FWEVDKTsKKyNlbmRpZgorfQorCisvKiBHZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBSZXR1cm4gMSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNhbiBiZSBpbmhlcml0ZWQsIDAgaWYgaXQgY2Fubm90LAorICAgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitpbnQKK19QeV9nZXRfaW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBnZXRfaW5oZXJpdGFibGUoZmQsIDEpOworfQorCitzdGF0aWMgaW50CitzZXRfaW5oZXJpdGFibGUoaW50IGZkLCBpbnQgaW5oZXJpdGFibGUsIGludCByYWlzZSwgaW50ICphdG9taWNfZmxhZ193b3JrcykKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGludCByZXF1ZXN0OworICAgIGludCBlcnI7CisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkKKyAgICBpbnQgZmxhZ3M7CisgICAgaW50IHJlczsKKyNlbmRpZgorCisgICAgLyogYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIHRoZSBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICBub24taW5oZXJpdGFibGUgKi8KKyAgICBhc3NlcnQoIShhdG9taWNfZmxhZ193b3JrcyAhPSBOVUxMICYmIGluaGVyaXRhYmxlKSk7CisKKyAgICBpZiAoYXRvbWljX2ZsYWdfd29ya3MgIT0gTlVMTCAmJiAhaW5oZXJpdGFibGUpIHsKKyAgICAgICAgaWYgKCphdG9taWNfZmxhZ193b3JrcyA9PSAtMSkgeworICAgICAgICAgICAgaW50IGluaGVyaXRhYmxlID0gZ2V0X2luaGVyaXRhYmxlKGZkLCByYWlzZSk7CisgICAgICAgICAgICBpZiAoaW5oZXJpdGFibGUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgKmF0b21pY19mbGFnX3dvcmtzID0gIWluaGVyaXRhYmxlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCphdG9taWNfZmxhZ193b3JrcykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oaGFuZGxlLCBIQU5ETEVfRkxBR19JTkhFUklULCBmbGFncykpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgcmVxdWVzdCA9IEZJT05DTEVYOworICAgIGVsc2UKKyAgICAgICAgcmVxdWVzdCA9IEZJT0NMRVg7CisgICAgZXJyID0gaW9jdGwoZmQsIHJlcXVlc3QsIE5VTEwpOworICAgIGlmIChlcnIpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjZWxzZQorICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworICAgIGlmIChmbGFncyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyAmPSB+RkRfQ0xPRVhFQzsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzIHw9IEZEX0NMT0VYRUM7CisgICAgcmVzID0gZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG5vbi1pbmhlcml0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAorbWFrZV9ub25faW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIE5VTEwpOworfQorCisvKiBTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBPbiBzdWNjZXNzOiByZXR1cm4gMCwgb24gZXJyb3I6IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiByYWlzZSBpcyBub256ZXJvCisgICBhbmQgcmV0dXJuIC0xLgorCisgICBJZiBhdG9taWNfZmxhZ193b3JrcyBpcyBub3QgTlVMTDoKKworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0tMSwgY2hlY2sgaWYgdGhlIGluaGVyaXRhYmxlIGlzIHNldCBvbiB0aGUgZmlsZQorICAgICAgZGVzY3JpcHRvcjogaWYgeWVzLCBzZXQgKmF0b21pY19mbGFnX3dvcmtzIHRvIDEsIG90aGVyd2lzZSBzZXQgdG8gMCBhbmQKKyAgICAgIHNldCB0aGUgaW5oZXJpdGFibGUgZmxhZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0xOiBkbyBub3RoaW5nCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PTA6IHNldCBpbmhlcml0YWJsZSBmbGFnIHRvIEZhbHNlCisKKyAgIFNldCBhdG9taWNfZmxhZ193b3JrcyB0byBOVUxMIGlmIG5vIGF0b21pYyBmbGFnIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvci4KKworICAgYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIGEgZmlsZSBkZXNjcmlwdG9yCisgICBub24taW5oZXJpdGFibGU6IGF0b21pY19mbGFnX3dvcmtzIG11c3QgYmUgTlVMTCBpZiBpbmhlcml0YWJsZT0xLiAqLworaW50CitfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCAxLCBhdG9taWNfZmxhZ193b3Jrcyk7Cit9CisKKy8qIE9wZW4gYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyAod3JhcHBlciB0byBvcGVuKCkgZnVuY3Rpb24pLgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK2ludAorX1B5X29wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncykKK3sKKyAgICBpbnQgZmQ7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MgfCBPX05PSU5IRVJJVCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZkOworI2Vsc2UKKworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3M7CisjaWZkZWYgT19DTE9FWEVDCisgICAgYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZWxzZQorICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmICAgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gZmQ7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4gKi8KIEZJTEUgKgogX1B5X3dmb3Blbihjb25zdCB3Y2hhcl90ICpwYXRoLCBjb25zdCB3Y2hhcl90ICptb2RlKQogewotI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgRklMRSAqZjsKKyNpZm5kZWYgTVNfV0lORE9XUwogICAgIGNoYXIgKmNwYXRoOwogICAgIGNoYXIgY21vZGVbMTBdOwogICAgIHNpemVfdCByOwpAQCAtNTY4LDIxICs3ODgsNDIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZiA9IGZvcGVuKGNwYXRoLCBjbW9kZSk7CiAgICAgUHlNZW1fRnJlZShjcGF0aCk7Ci0gICAgcmV0dXJuIGY7CiAjZWxzZQotICAgIHJldHVybiBfd2ZvcGVuKHBhdGgsIG1vZGUpOworICAgIGYgPSBfd2ZvcGVuKHBhdGgsIG1vZGUpOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCi0vKiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCi0gICBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLgorLyogV3JhcHBlciB0byBmb3BlbigpLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworRklMRSoKK19QeV9mb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKyAgICBGSUxFICpmID0gZm9wZW4ocGF0aG5hbWUsIG1vZGUpOworICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKK30KKworLyogT3BlbiBhIGZpbGUuIENhbGwgX3dmb3BlbigpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbQorICAgZW5jb2RpbmcgYW5kIGNhbGwgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAorICAgbm9uLWluaGVyaXRhYmxlLgogCiAgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuIG9yCi0gICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvciAqLwotCisgICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvci4gKi8KIEZJTEUqCi1fUHlfZm9wZW4oUHlPYmplY3QgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitfUHlfZm9wZW5fb2JqKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogeworICAgIEZJTEUgKmY7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHdjaGFyX3QgKndwYXRoOwogICAgIHdjaGFyX3Qgd21vZGVbMTBdOwpAQCAtNjAyLDE2ICs4NDMsMjEgQEAKICAgICBpZiAodXNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gX3dmb3Blbih3cGF0aCwgd21vZGUpOworICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CiAjZWxzZQotICAgIEZJTEUgKmY7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKHBhdGgsICZieXRlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIG1vZGUpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgcmV0dXJuIGY7CiAjZW5kaWYKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7CiB9CiAKICNpZmRlZiBIQVZFX1JFQURMSU5LCkBAIC02NDgsMTIgKzg5NCwxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChidWZzaXogPD0gcjEpIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHdidWYsIGJ1ZnNpeik7Ci0gICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIHJldHVybiAoaW50KXIxOwogfQogI2VuZGlmCkBAIC02ODksMTIgKzkzNSwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHJlc29sdmVkX3BhdGhfc2l6ZSA8PSByKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KHJlc29sdmVkX3BhdGgsIHdyZXNvbHZlZF9wYXRoLCByZXNvbHZlZF9wYXRoX3NpemUpOwotICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgIFB5TWVtX1Jhd0ZyZWUod3Jlc29sdmVkX3BhdGgpOwogICAgIHJldHVybiByZXNvbHZlZF9wYXRoOwogfQogI2VuZGlmCkBAIC03MDcsNyArOTUzLDggQEAKIF9QeV93Z2V0Y3dkKHdjaGFyX3QgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIHJldHVybiBfd2dldGN3ZChidWYsIHNpemUpOworICAgIGludCBpc2l6ZSA9IChpbnQpUHlfTUlOKHNpemUsIElOVF9NQVgpOworICAgIHJldHVybiBfd2dldGN3ZChidWYsIGlzaXplKTsKICNlbHNlCiAgICAgY2hhciBmbmFtZVtNQVhQQVRITEVOXTsKICAgICB3Y2hhcl90ICp3bmFtZTsKQEAgLTcxOSwxMiArOTY2LDgxIEBACiAgICAgaWYgKHduYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplIDw9IGxlbikgewotICAgICAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3bmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KGJ1Ziwgd25hbWUsIHNpemUpOwotICAgIFB5TWVtX0ZyZWUod25hbWUpOworICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgIHJldHVybiBidWY7CiAjZW5kaWYKIH0KIAorLyogRHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIGFzCisgICBub24taW5oZXJpdGFibGUuIFJldHVybiBhIG5ldyBmaWxlIGRlc2NyaXB0b3Igb24gc3VjY2VzcywgcmFpc2UgYW4gT1NFcnJvcgorICAgZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuCisKKyAgIFRoZSBHSUwgaXMgcmVsZWFzZWQgdG8gY2FsbCBkdXAoKS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIEdJTC4gKi8KK2ludAorX1B5X2R1cChpbnQgZmQpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZnR5cGU7CisjZW5kaWYKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGdldCB0aGUgZmlsZSB0eXBlLCBpZ25vcmUgdGhlIGVycm9yIGlmIGl0IGZhaWxlZCAqLworICAgIGZ0eXBlID0gR2V0RmlsZVR5cGUoaGFuZGxlKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGR1cChmZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIENoYXJhY3RlciBmaWxlcyBsaWtlIGNvbnNvbGUgY2Fubm90IGJlIG1ha2Ugbm9uLWluaGVyaXRhYmxlICovCisgICAgaWYgKGZ0eXBlICE9IEZJTEVfVFlQRV9DSEFSKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyNlbGlmIGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQRkRfQ0xPRVhFQykKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBmY250bChmZCwgRl9EVVBGRF9DTE9FWEVDLCAwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjZWxzZQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBmZCA9IGR1cChmZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGZkOworfQorCmRpZmYgLS1naXQgYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCmluZGV4IGE2NTE2ZGMuLjBhM2NjNTkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCisrKyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAogLyogRG8gdGhlIHBhZGRpbmcsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjYWxsZXItc3VwcGxpZWQKICAgIGNvbnRlbnQgZ29lcy4gKi8KLXN0YXRpYyBQeV9zc2l6ZV90CitzdGF0aWMgaW50CiBmaWxsX3BhZGRpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgIFB5X3NzaXplX3QgbmNoYXJzLAogICAgICAgICAgICAgIFB5X1VDUzQgZmlsbF9jaGFyLCBQeV9zc2l6ZV90IG5fbHBhZGRpbmcsCkBAIC01NTYsNyArNTU2LDcgQEAKIHsKICAgICAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZGlnaXRzLCBkZWNpbWFsLCBhbmQgcmVtYWluZGVyLiAqLwogICAgIFB5X3NzaXplX3QgZF9wb3MgPSBkX3N0YXJ0OwotICAgIGNvbnN0IGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci0+a2luZDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQga2luZCA9IHdyaXRlci0+a2luZDsKICAgICBjb25zdCB2b2lkICpkYXRhID0gd3JpdGVyLT5kYXRhOwogICAgIFB5X3NzaXplX3QgcjsKIApAQCAtNzU3LDcgKzc1Nyw4IEBACiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0LT53aWR0aCA9PSAtMSAmJiBmb3JtYXQtPnByZWNpc2lvbiA9PSAtMSkgeworICAgIGlmICgoZm9ybWF0LT53aWR0aCA9PSAtMSB8fCBmb3JtYXQtPndpZHRoIDw9IGxlbikKKyAgICAgICAgJiYgKGZvcm1hdC0+cHJlY2lzaW9uID09IC0xIHx8IGZvcm1hdC0+cHJlY2lzaW9uID49IGxlbikpIHsKICAgICAgICAgLyogRmFzdCBwYXRoICovCiAgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgdmFsdWUpOwogICAgIH0KQEAgLTc3MCw5ICs3NzEsMTMgQEAKIAogICAgIGNhbGNfcGFkZGluZyhsZW4sIGZvcm1hdC0+d2lkdGgsIGZvcm1hdC0+YWxpZ24sICZscGFkLCAmcnBhZCwgJnRvdGFsKTsKIAotICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHZhbHVlLCAwLCBsZW4pOworICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CiAgICAgaWYgKGxwYWQgIT0gMCB8fCBycGFkICE9IDApCiAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgZm9ybWF0LT5maWxsX2NoYXIpOworICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodmFsdWUpID4gbWF4Y2hhcikgeworICAgICAgICBQeV9VQ1M0IHZhbG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHZhbHVlLCAwLCBsZW4pOworICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHZhbG1heGNoYXIpOworICAgIH0KIAogICAgIC8qIGFsbG9jYXRlIHRoZSByZXN1bHRpbmcgc3RyaW5nICovCiAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIHRvdGFsLCBtYXhjaGFyKSA9PSAtMSkKQEAgLTk3Nyw4ICs5ODIsNyBAQAogICAgIFB5X3NzaXplX3Qgbl90b3RhbDsKICAgICBpbnQgaGFzX2RlY2ltYWw7CiAgICAgZG91YmxlIHZhbDsKLSAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKLSAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBpbnQgcHJlY2lzaW9uLCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CiAgICAgUHlfVUNTNCB0eXBlID0gZm9ybWF0LT50eXBlOwogICAgIGludCBhZGRfcGN0ID0gMDsKICAgICBQeV9zc2l6ZV90IGluZGV4OwpAQCAtMTA0OSwyNCArMTA1MywyNCBAQAogICAgICAgICBuX2RpZ2l0cyArPSAxOwogICAgIH0KIAotICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCi0gICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLwotICAgIHVuaWNvZGVfdG1wID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBuX2RpZ2l0cyk7Ci0gICAgUHlNZW1fRnJlZShidWYpOwotICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKQotICAgICAgICBnb3RvIGRvbmU7Ci0KICAgICBpZiAoZm9ybWF0LT5zaWduICE9ICcrJyAmJiBmb3JtYXQtPnNpZ24gIT0gJyAnCiAgICAgICAgICYmIGZvcm1hdC0+d2lkdGggPT0gLTEKICAgICAgICAgJiYgZm9ybWF0LT50eXBlICE9ICduJwogICAgICAgICAmJiAhZm9ybWF0LT50aG91c2FuZHNfc2VwYXJhdG9ycykKICAgICB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICByZXN1bHQgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgdW5pY29kZV90bXApOwotICAgICAgICBQeV9ERUNSRUYodW5pY29kZV90bXApOworICAgICAgICByZXN1bHQgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBidWYsIG5fZGlnaXRzKTsKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCisgICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLworICAgIHVuaWNvZGVfdG1wID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBuX2RpZ2l0cyk7CisgICAgUHlNZW1fRnJlZShidWYpOworICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisKICAgICAvKiBJcyBhIHNpZ24gY2hhcmFjdGVyIHByZXNlbnQgaW4gdGhlIG91dHB1dD8gIElmIHNvLCByZW1lbWJlciBpdAogICAgICAgIGFuZCBza2lwIGl0ICovCiAgICAgaW5kZXggPSAwOwpAQCAtMTEzMyw4ICsxMTM3LDcgQEAKICAgICBQeV9zc2l6ZV90IG5faW1fdG90YWw7CiAgICAgaW50IHJlX2hhc19kZWNpbWFsOwogICAgIGludCBpbV9oYXNfZGVjaW1hbDsKLSAgICBpbnQgcHJlY2lzaW9uOwotICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIGludCBwcmVjaXNpb24sIGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKICAgICBQeV9VQ1M0IHR5cGUgPSBmb3JtYXQtPnR5cGU7CiAgICAgUHlfc3NpemVfdCBpX3JlOwogICAgIFB5X3NzaXplX3QgaV9pbTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9mcm96ZW4uYyBiL1B5dGhvbi9mcm96ZW4uYwppbmRleCAyNWZkYzE3Li45YmM2NjJiIDEwMDY0NAotLS0gYS9QeXRob24vZnJvemVuLmMKKysrIGIvUHl0aG9uL2Zyb3plbi5jCkBAIC0yOCw3ICsyOCw3IEBACiAKICNkZWZpbmUgU0laRSAoaW50KXNpemVvZihNX19faGVsbG9fXykKIAotc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICAvKiBpbXBvcnRsaWIgKi8KICAgICB7Il9mcm96ZW5faW1wb3J0bGliIiwgX1B5X01fX2ltcG9ydGxpYiwgKGludClzaXplb2YoX1B5X01fX2ltcG9ydGxpYil9LAogICAgIC8qIFRlc3QgbW9kdWxlICovCkBAIC00Miw0ICs0Miw0IEBACiAvKiBFbWJlZGRpbmcgYXBwcyBtYXkgY2hhbmdlIHRoaXMgcG9pbnRlciB0byBwb2ludCB0byB0aGVpciBmYXZvcml0ZQogICAgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlczogKi8KIAotc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgPSBfUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKK2NvbnN0IHN0cnVjdCBfZnJvemVuICpQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzID0gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CmRpZmYgLS1naXQgYS9QeXRob24vZnJvemVubWFpbi5jIGIvUHl0aG9uL2Zyb3plbm1haW4uYwppbmRleCA4YjFmMmQ0Li41NWQwNWZjIDEwMDY0NAotLS0gYS9QeXRob24vZnJvemVubWFpbi5jCisrKyBiL1B5dGhvbi9mcm96ZW5tYWluLmMKQEAgLTE2LDE5ICsxNiwxOSBAQAogUHlfRnJvemVuTWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiB7CiAgICAgY2hhciAqcDsKLSAgICBpbnQgaSwgbiwgc3RzOworICAgIGludCBpLCBuLCBzdHMgPSAxOwogICAgIGludCBpbnNwZWN0ID0gMDsKICAgICBpbnQgdW5idWZmZXJlZCA9IDA7Ci0gICAgY2hhciAqb2xkbG9jOwotICAgIHdjaGFyX3QgKiphcmd2X2NvcHk7CisgICAgY2hhciAqb2xkbG9jID0gTlVMTDsKKyAgICB3Y2hhcl90ICoqYXJndl9jb3B5ID0gTlVMTDsKICAgICAvKiBXZSBuZWVkIGEgc2Vjb25kIGNvcGllcywgYXMgUHl0aG9uIG1pZ2h0IG1vZGlmeSB0aGUgZmlyc3Qgb25lLiAqLwotICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyOworICAgIHdjaGFyX3QgKiphcmd2X2NvcHkyID0gTlVMTDsKIAotICAgIGFyZ3ZfY29weSA9IFB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKmFyZ2MpOwotICAgIGFyZ3ZfY29weTIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSphcmdjKTsKKyAgICBhcmd2X2NvcHkgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIGFyZ2MpOworICAgIGFyZ3ZfY29weTIgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIGFyZ2MpOwogICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgIHJldHVybiAxOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIFB5X0Zyb3plbkZsYWcgPSAxOyAvKiBTdXBwcmVzcyBlcnJvcnMgZnJvbSBnZXRwYXRoLmMgKi8KQEAgLTQ0LDMyICs0NCwyNiBAQAogICAgICAgICBzZXRidWYoc3RkZXJyLCAoY2hhciAqKU5VTEwpOwogICAgIH0KIAotICAgIG9sZGxvYyA9IHNldGxvY2FsZShMQ19BTEwsIE5VTEwpOworICAgIG9sZGxvYyA9IF9QeU1lbV9SYXdTdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworICAgIGlmICghb2xkbG9jKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSNpZmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwotICAgICAgICBzaXplX3QgYXJnc2l6ZSA9IHN0cmxlbihhcmd2W2ldKTsKLSNlbHNlCi0gICAgICAgIHNpemVfdCBhcmdzaXplID0gbWJzdG93Y3MoTlVMTCwgYXJndltpXSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBpZiAoYXJnc2l6ZSA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50ICVkIHRvIHN0cmluZ1xuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBhcmd2X2NvcHlbaV0gPSBQeU1lbV9NYWxsb2MoKGFyZ3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CiAgICAgICAgIGFyZ3ZfY29weTJbaV0gPSBhcmd2X2NvcHlbaV07CiAgICAgICAgIGlmICghYXJndl9jb3B5W2ldKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgY291bnQgPSBtYnN0b3djcyhhcmd2X2NvcHlbaV0sIGFyZ3ZbaV0sIGFyZ3NpemUrMSk7Ci0gICAgICAgIGlmIChjb3VudCA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50ICVkIHRvIHN0cmluZ1xuIiwgaSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50ICMlaVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICsgMSk7CisgICAgICAgICAgICBhcmdjID0gaTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CisgICAgb2xkbG9jID0gTlVMTDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeUluaXRGcm96ZW5FeHRlbnNpb25zKCk7CkBAIC0xMDMsMTAgKzk3LDE0IEBACiAgICAgUHlXaW5GcmVlemVfRXhlVGVybSgpOwogI2VuZGlmCiAgICAgUHlfRmluYWxpemUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5MltpXSk7CisKK2Vycm9yOgorICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5KTsKKyAgICBpZiAoYXJndl9jb3B5MikgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyW2ldKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkyKTsKICAgICB9Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkpOwotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5Mik7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOwogICAgIHJldHVybiBzdHM7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vZnV0dXJlLmMgYi9QeXRob24vZnV0dXJlLmMKaW5kZXggZDI0YWU0MS4uODFlYWI1NCAxMDA2NDQKLS0tIGEvUHl0aG9uL2Z1dHVyZS5jCisrKyBiL1B5dGhvbi9mdXR1cmUuYwpAQCAtMTEsNyArMTEsNyBAQAogImZyb20gX19mdXR1cmVfXyBpbXBvcnRzIG11c3Qgb2NjdXIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSIKIAogc3RhdGljIGludAotZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBzdG10X3R5IHMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorZnV0dXJlX2NoZWNrX2ZlYXR1cmVzKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBzdG10X3R5IHMsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBpbnQgaTsKICAgICBhc2RsX3NlcSAqbmFtZXM7CkBAIC00MywxMiArNDMsMTIgQEAKICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZmVhdHVyZSwgImJyYWNlcyIpID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgY2hhbmNlIik7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICBVTkRFRklORURfRlVUVVJFX0ZFQVRVUkUsIGZlYXR1cmUpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC01NiwxMyArNTYsMTcgQEAKIH0KIAogc3RhdGljIGludAotZnV0dXJlX3BhcnNlKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK2Z1dHVyZV9wYXJzZShQeUZ1dHVyZUZlYXR1cmVzICpmZiwgbW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIGludCBpLCBmb3VuZF9kb2NzdHJpbmcgPSAwLCBkb25lID0gMCwgcHJldl9saW5lID0gMDsKKyAgICBpbnQgaSwgZG9uZSA9IDAsIHByZXZfbGluZSA9IDA7CisgICAgc3RtdF90eSBmaXJzdDsKIAogICAgIGlmICghKG1vZC0+a2luZCA9PSBNb2R1bGVfa2luZCB8fCBtb2QtPmtpbmQgPT0gSW50ZXJhY3RpdmVfa2luZCkpCiAgICAgICAgIHJldHVybiAxOwogCisgICAgaWYgKGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpID09IDApCisgICAgICAgIHJldHVybiAxOworCiAgICAgLyogQSBzdWJzZXF1ZW50IHBhc3Mgd2lsbCBkZXRlY3QgZnV0dXJlIGltcG9ydHMgdGhhdCBkb24ndAogICAgICAgIGFwcGVhciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLiAgVGhlcmUncyBvbmUgY2FzZSwKICAgICAgICBob3dldmVyLCB0aGF0IGlzIGVhc2llciB0byBoYW5kbGUgaGVyZTogQSBzZXJpZXMgb2YgaW1wb3J0cwpAQCAtNzEsOCArNzUsMTMgQEAKICAgICAgICBidXQgaXMgcHJlY2VkZWQgYnkgYSByZWd1bGFyIGltcG9ydC4KICAgICAqLwogCisgICAgaSA9IDA7CisgICAgZmlyc3QgPSAoc3RtdF90eSlhc2RsX3NlcV9HRVQobW9kLT52Lk1vZHVsZS5ib2R5LCBpKTsKKyAgICBpZiAoZmlyc3QtPmtpbmQgPT0gRXhwcl9raW5kICYmIGZpcnN0LT52LkV4cHIudmFsdWUtPmtpbmQgPT0gU3RyX2tpbmQpCisgICAgICAgIGkrKzsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBhc2RsX3NlcV9MRU4obW9kLT52Lk1vZHVsZS5ib2R5KTsgaSsrKSB7CisKKyAgICBmb3IgKDsgaSA8IGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpOyBpKyspIHsKICAgICAgICAgc3RtdF90eSBzID0gKHN0bXRfdHkpYXNkbF9zZXFfR0VUKG1vZC0+di5Nb2R1bGUuYm9keSwgaSk7CiAKICAgICAgICAgaWYgKGRvbmUgJiYgcy0+bGluZW5vID4gcHJldl9saW5lKQpAQCAtOTIsMzIgKzEwMSwyNyBAQAogICAgICAgICAgICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9MQVRFX0ZVVFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFmdXR1cmVfY2hlY2tfZmVhdHVyZXMoZmYsIHMsIGZpbGVuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgZmYtPmZmX2xpbmVubyA9IHMtPmxpbmVubzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKHMtPmtpbmQgPT0gRXhwcl9raW5kICYmICFmb3VuZF9kb2NzdHJpbmcpIHsKLSAgICAgICAgICAgIGV4cHJfdHkgZSA9IHMtPnYuRXhwci52YWx1ZTsKLSAgICAgICAgICAgIGlmIChlLT5raW5kICE9IFN0cl9raW5kKQotICAgICAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGZvdW5kX2RvY3N0cmluZyA9IDE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAxOwogfQogCiAKIFB5RnV0dXJlRmVhdHVyZXMgKgotUHlGdXR1cmVfRnJvbUFTVChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK1B5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kX3R5IG1vZCwgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZmOwogCkBAIC0xMzUsMyArMTM5LDE4IEBACiAgICAgfQogICAgIHJldHVybiBmZjsKIH0KKworCitQeUZ1dHVyZUZlYXR1cmVzICoKK1B5RnV0dXJlX0Zyb21BU1QobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyKQoreworICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZmOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmZiA9IFB5RnV0dXJlX0Zyb21BU1RPYmplY3QobW9kLCBmaWxlbmFtZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gZmY7Cit9CmRpZmYgLS1naXQgYS9QeXRob24vZ2V0YXJncy5jIGIvUHl0aG9uL2dldGFyZ3MuYwppbmRleCBhZTkzMWI5Li42MDg0NTY4IDEwMDY0NAotLS0gYS9QeXRob24vZ2V0YXJncy5jCisrKyBiL1B5dGhvbi9nZXRhcmdzLmMKQEAgLTQ2LDE0ICs0NiwxNiBAQAogfSBmcmVlbGlzdGVudHJ5X3Q7CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgaW50IGZpcnN0X2F2YWlsYWJsZTsKICAgZnJlZWxpc3RlbnRyeV90ICplbnRyaWVzOworICBpbnQgZmlyc3RfYXZhaWxhYmxlOworICBpbnQgZW50cmllc19tYWxsb2NlZDsKIH0gZnJlZWxpc3RfdDsKIAorI2RlZmluZSBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUyA4CiAKIC8qIEZvcndhcmQgKi8KIHN0YXRpYyBpbnQgdmdldGFyZ3MxKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCAqLCBpbnQpOwotc3RhdGljIHZvaWQgc2V0ZXJyb3IoaW50LCBjb25zdCBjaGFyICosIGludCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgdm9pZCBzZXRlcnJvcihQeV9zc2l6ZV90LCBjb25zdCBjaGFyICosIGludCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgY2hhciAqY29udmVydGl0ZW0oUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKiwgdmFfbGlzdCAqLCBpbnQsIGludCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgc2l6ZV90LCBmcmVlbGlzdF90ICopOwogc3RhdGljIGNoYXIgKmNvbnZlcnR0dXBsZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICoqLCB2YV9saXN0ICosIGludCwKQEAgLTE4Nyw3ICsxODksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVsaXN0LT5lbnRyaWVzW2luZGV4XS5pdGVtKTsKICAgICAgIH0KICAgICB9Ci0gICAgUHlNZW1fRlJFRShmcmVlbGlzdC0+ZW50cmllcyk7CisgICAgaWYgKGZyZWVsaXN0LT5lbnRyaWVzX21hbGxvY2VkKQorICAgICAgICBQeU1lbV9GUkVFKGZyZWVsaXN0LT5lbnRyaWVzKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xOTcsNiArMjAwLDggQEAKIHsKICAgICBjaGFyIG1zZ2J1ZlsyNTZdOwogICAgIGludCBsZXZlbHNbMzJdOworICAgIGZyZWVsaXN0ZW50cnlfdCBzdGF0aWNfZW50cmllc1tTVEFUSUNfRlJFRUxJU1RfRU5UUklFU107CisgICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHtzdGF0aWNfZW50cmllcywgMCwgMH07CiAgICAgY29uc3QgY2hhciAqZm5hbWUgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UgPSBOVUxMOwogICAgIGludCBtaW4gPSAtMTsKQEAgLTIwNiw3ICsyMTEsNiBAQAogICAgIGNvbnN0IGNoYXIgKmZvcm1hdHNhdmUgPSBmb3JtYXQ7CiAgICAgUHlfc3NpemVfdCBpLCBsZW47CiAgICAgY2hhciAqbXNnOwotICAgIGZyZWVsaXN0X3QgZnJlZWxpc3QgPSB7MCwgTlVMTH07CiAgICAgaW50IGNvbXBhdCA9IGZsYWdzICYgRkxBR19DT01QQVQ7CiAKICAgICBhc3NlcnQoY29tcGF0IHx8IChhcmdzICE9IChQeU9iamVjdCopTlVMTCkpOwpAQCAtMjQwLDE1ICsyNDQsMTUgQEAKICAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQ7CiAgICAgICAgICAgICBlbmRmbXQgPSAxOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgaWYgKGxldmVsID09IDApCisgICAgICAgICAgICAgICAgbWluID0gbWF4OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChjID09ICdPJykKLSAgICAgICAgICAgICAgICAgICAgbWF4Kys7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoUHlfSVNBTFBIQShQeV9DSEFSTUFTSyhjKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlfSVNBTFBIQShQeV9DSEFSTUFTSyhjKSkpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9ICdlJykgLyogc2tpcCBlbmNvZGVkICovCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXgrKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ3wnKQotICAgICAgICAgICAgICAgICAgICBtaW4gPSBtYXg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjYyLDEwICsyNjYsMTMgQEAKIAogICAgIGZvcm1hdCA9IGZvcm1hdHNhdmU7CiAKLSAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbWF4KTsKLSAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChtYXggPiBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUykgeworICAgICAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbWF4KTsKKyAgICAgICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXNfbWFsbG9jZWQgPSAxOwogICAgIH0KIAogICAgIGlmIChjb21wYXQpIHsKQEAgLTM1MCw3ICszNTcsNyBAQAogCiAKIHN0YXRpYyB2b2lkCi1zZXRlcnJvcihpbnQgaWFyZywgY29uc3QgY2hhciAqbXNnLCBpbnQgKmxldmVscywgY29uc3QgY2hhciAqZm5hbWUsCitzZXRlcnJvcihQeV9zc2l6ZV90IGlhcmcsIGNvbnN0IGNoYXIgKm1zZywgaW50ICpsZXZlbHMsIGNvbnN0IGNoYXIgKmZuYW1lLAogICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKICAgICBjaGFyIGJ1Zls1MTJdOwpAQCAtMzY2LDEwICszNzMsMTAgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaWFyZyAhPSAwKSB7CiAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKHAsIHNpemVvZihidWYpIC0gKHAgLSBidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgJWQiLCBpYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLCBpYXJnKTsKICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgcCArPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICB3aGlsZSAobGV2ZWxzW2ldID4gMCAmJiBpIDwgMzIgJiYgKGludCkocC1idWYpIDwgMjIwKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IDMyICYmIGxldmVsc1tpXSA+IDAgJiYgKGludCkocC1idWYpIDwgMjIwKSB7CiAgICAgICAgICAgICAgICAgUHlPU19zbnByaW50ZihwLCBzaXplb2YoYnVmKSAtIChwIC0gYnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGl0ZW0gJWQiLCBsZXZlbHNbaV0tMSk7CiAgICAgICAgICAgICAgICAgcCArPSBzdHJsZW4ocCk7CkBAIC00MTQsNiArNDIxLDcgQEAKICAgICBpbnQgbiA9IDA7CiAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0gKnBfZm9ybWF0OwogICAgIGludCBpOworICAgIFB5X3NzaXplX3QgbGVuOwogCiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgYyA9ICpmb3JtYXQrKzsKQEAgLTQ0MywxMiArNDUxLDIwIEBACiAgICAgICAgIHJldHVybiBtc2didWY7CiAgICAgfQogCi0gICAgaWYgKChpID0gUHlTZXF1ZW5jZV9TaXplKGFyZykpICE9IG4pIHsKKyAgICBsZW4gPSBQeVNlcXVlbmNlX1NpemUoYXJnKTsKKyAgICBpZiAobGVuICE9IG4pIHsKICAgICAgICAgbGV2ZWxzWzBdID0gMDsKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyAiZXhwZWN0ZWQgJWQgYXJndW1lbnRzLCBub3QgJWQiIDoKLSAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHNlcXVlbmNlIG9mIGxlbmd0aCAlZCwgbm90ICVkIiwKLSAgICAgICAgICAgICAgICAgIG4sIGkpOworICAgICAgICBpZiAodG9wbGV2ZWwpIHsKKyAgICAgICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJWQgYXJndW1lbnRzLCBub3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIGxlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc2VxdWVuY2Ugb2YgbGVuZ3RoICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIGxlbik7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1zZ2J1ZjsKICAgICB9CiAKQEAgLTU2Myw3ICs1NzksNyBAQAogICAgICAgICAgICAgICAgICJzaXplIGRvZXMgbm90IGZpdCBpbiBhbiBpbnQiKTsgXAogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoIiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsgXAogICAgICAgICB9IFwKLSAgICAgICAgKnE9czsgXAorICAgICAgICAqcSA9IChpbnQpczsgXAogICAgIH0KICNkZWZpbmUgQlVGRkVSX0xFTiAgICAgICgoZmxhZ3MgJiBGTEFHX1NJWkVfVCkgPyAqcTI6KnEpCiAjZGVmaW5lIFJFVFVSTl9FUlJfT0NDVVJSRUQgcmV0dXJuIG1zZ2J1ZgpAQCAtMTQxOSw5ICsxNDM1LDExIEBACiAgICAgY29uc3QgY2hhciAqZm5hbWUsICptc2csICpjdXN0b21fbXNnLCAqa2V5d29yZDsKICAgICBpbnQgbWluID0gSU5UX01BWDsKICAgICBpbnQgbWF4ID0gSU5UX01BWDsKLSAgICBpbnQgaSwgbGVuLCBuYXJncywgbmtleXdvcmRzOworICAgIGludCBpLCBsZW47CisgICAgUHlfc3NpemVfdCBuYXJncywgbmtleXdvcmRzOwogICAgIFB5T2JqZWN0ICpjdXJyZW50X2FyZzsKLSAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0gezAsIE5VTEx9OworICAgIGZyZWVsaXN0ZW50cnlfdCBzdGF0aWNfZW50cmllc1tTVEFUSUNfRlJFRUxJU1RfRU5UUklFU107CisgICAgZnJlZWxpc3RfdCBmcmVlbGlzdCA9IHtzdGF0aWNfZW50cmllcywgMCwgMH07CiAKICAgICBhc3NlcnQoYXJncyAhPSBOVUxMICYmIFB5VHVwbGVfQ2hlY2soYXJncykpOwogICAgIGFzc2VydChrZXl3b3JkcyA9PSBOVUxMIHx8IFB5RGljdF9DaGVjayhrZXl3b3JkcykpOwpAQCAtMTQ0NSwxNyArMTQ2MywyMCBAQAogICAgIGZvciAobGVuPTA7IGt3bGlzdFtsZW5dOyBsZW4rKykKICAgICAgICAgY29udGludWU7CiAKLSAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbGVuKTsKLSAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4gPiBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUykgeworICAgICAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbGVuKTsKKyAgICAgICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXNfbWFsbG9jZWQgPSAxOwogICAgIH0KIAogICAgIG5hcmdzID0gUHlUdXBsZV9HRVRfU0laRShhcmdzKTsKICAgICBua2V5d29yZHMgPSAoa2V5d29yZHMgPT0gTlVMTCkgPyAwIDogUHlEaWN0X1NpemUoa2V5d29yZHMpOwogICAgIGlmIChuYXJncyArIG5rZXl3b3JkcyA+IGxlbikgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIiVzJXMgdGFrZXMgYXQgbW9zdCAlZCBhcmd1bWVudCVzICglZCBnaXZlbikiLAorICAgICAgICAgICAgICAgICAgICAgIiVzJXMgdGFrZXMgYXQgbW9zdCAlZCBhcmd1bWVudCVzICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICAgICAgIChmbmFtZSA9PSBOVUxMKSA/ICJmdW5jdGlvbiIgOiBmbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIChmbmFtZSA9PSBOVUxMKSA/ICIiIDogIigpIiwKICAgICAgICAgICAgICAgICAgICAgIGxlbiwKQEAgLTE1NzQsMjAgKzE1OTUsMTUgQEAKICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQoa2V5d29yZHMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKICAgICAgICAgICAgIGludCBtYXRjaCA9IDA7Ci0gICAgICAgICAgICBjaGFyICprczsKICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGtleSkpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFucmV0dXJuKDAsICZmcmVlbGlzdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBjaGVjayB0aGF0IF9QeVVuaWNvZGVfQXNTdHJpbmcoKSByZXN1bHQgaXMgbm90IE5VTEwgKi8KLSAgICAgICAgICAgIGtzID0gX1B5VW5pY29kZV9Bc1N0cmluZyhrZXkpOwotICAgICAgICAgICAgaWYgKGtzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoa3MsIGt3bGlzdFtpXSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwga3dsaXN0W2ldKSkgeworICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbWF0Y2gpIHsKZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRjd2QuYyBiL1B5dGhvbi9nZXRjd2QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlZGJkMS4uMDAwMDAwMAotLS0gYS9QeXRob24vZ2V0Y3dkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0KLS8qIFR3byBQRCBnZXRjd2QoKSBpbXBsZW1lbnRhdGlvbnMuCi0gICBBdXRob3I6IEd1aWRvIHZhbiBSb3NzdW0sIENXSSBBbXN0ZXJkYW0sIEphbiAxOTkxLCA8Z3VpZG9AY3dpLm5sPi4gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmZGVmIEhBVkVfR0VUV0QKLQotLyogVmVyc2lvbiBmb3IgQlNEIHN5c3RlbXMgLS0gdXNlIGdldHdkKCkgKi8KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotCi0jaWZuZGVmIE1BWFBBVEhMRU4KLSNpZiBkZWZpbmVkKFBBVEhfTUFYKSAmJiBQQVRIX01BWCA+IDEwMjQKLSNkZWZpbmUgTUFYUEFUSExFTiBQQVRIX01BWAotI2Vsc2UKLSNkZWZpbmUgTUFYUEFUSExFTiAxMDI0Ci0jZW5kaWYKLSNlbmRpZgotCi1leHRlcm4gY2hhciAqZ2V0d2QoY2hhciAqKTsKLQotY2hhciAqCi1nZXRjd2QoY2hhciAqYnVmLCBpbnQgc2l6ZSkKLXsKLSAgICBjaGFyIGxvY2FsYnVmW01BWFBBVEhMRU4rMV07Ci0gICAgY2hhciAqcmV0OwotCi0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldCA9IGdldHdkKGxvY2FsYnVmKTsKLSAgICBpZiAocmV0ICE9IE5VTEwgJiYgc3RybGVuKGxvY2FsYnVmKSA+PSAoc2l6ZV90KXNpemUpIHsKLSAgICAgICAgZXJybm8gPSBFUkFOR0U7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAocmV0ID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFQUNDRVM7IC8qIE1vc3QgbGlrZWx5IGVycm9yICovCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzdHJuY3B5KGJ1ZiwgbG9jYWxidWYsIHNpemUpOwotICAgIHJldHVybiBidWY7Ci19Ci0KLSNlbHNlIC8qICFIQVZFX0dFVFdEICovCi0KLS8qIFZlcnNpb24gZm9yIHJlYWxseSBvbGQgVU5JWCBzeXN0ZW1zIC0tIHVzZSBwaXBlIGZyb20gcHdkICovCi0KLSNpZm5kZWYgUFdEX0NNRAotI2RlZmluZSBQV0RfQ01EICIvYmluL3B3ZCIKLSNlbmRpZgotCi1jaGFyICoKLWdldGN3ZChjaGFyICpidWYsIGludCBzaXplKQotewotICAgIEZJTEUgKmZwOwotICAgIGNoYXIgKnA7Ci0gICAgaW50IHN0czsKLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKChmcCA9IHBvcGVuKFBXRF9DTUQsICJyIikpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChmZ2V0cyhidWYsIHNpemUsIGZwKSA9PSBOVUxMIHx8IChzdHMgPSBwY2xvc2UoZnApKSAhPSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUFDQ0VTOyAvKiBNb3N0IGxpa2VseSBlcnJvciAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChwID0gYnVmOyAqcCAhPSAnXG4nOyBwKyspIHsKLSAgICAgICAgaWYgKCpwID09ICdcMCcpIHsKLSAgICAgICAgICAgIGVycm5vID0gRVJBTkdFOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgKnAgPSAnXDAnOwotICAgIHJldHVybiBidWY7Ci19Ci0KLSNlbmRpZiAvKiAhSEFWRV9HRVRXRCAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydC5jIGIvUHl0aG9uL2ltcG9ydC5jCmluZGV4IGU5MWNlZjguLjU4NGIxYjQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnQuYworKysgYi9QeXRob24vaW1wb3J0LmMKQEAgLTE5LDIyICsxOSwxMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmZGVmIE1TX1dJTkRPV1MKLS8qIGZvciBzdGF0LnN0X21vZGUgKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwotLyogZm9yIF9ta2RpciAqLwotI2luY2x1ZGUgPGRpcmVjdC5oPgotI2VuZGlmCi0KLQogI2RlZmluZSBDQUNIRURJUiAiX19weWNhY2hlX18iCiAKIC8qIFNlZSBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKSBiZWxvdyAqLwogc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25zID0gTlVMTDsKIAotLyogRnVuY3Rpb24gZnJvbSBQYXJzZXIvdG9rZW5pemVyLmMgKi8KLWV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoaW50LCBQeU9iamVjdCAqKTsKLQogLyogVGhpcyB0YWJsZSBpcyBkZWZpbmVkIGluIGNvbmZpZy5jOiAqLwogZXh0ZXJuIHN0cnVjdCBfaW5pdHRhYiBfUHlJbXBvcnRfSW5pdHRhYltdOwogCkBAIC05Myw4ICs4MiwxMCBAQAogICAgIGludCBlcnIgPSAwOwogCiAgICAgcGF0aF9ob29rcyA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9ob29rcyIpOwotICAgIGlmIChwYXRoX2hvb2tzID09IE5VTEwpCisgICAgaWYgKHBhdGhfaG9va3MgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMucGF0aF9ob29rcyIpOwogICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIGlmIChQeV9WZXJib3NlRmxhZykKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgaW5zdGFsbGluZyB6aXBpbXBvcnQgaG9va1xuIik7CkBAIC0yMDQsOCArMTk1LDExIEBACiAgICAgaWYgKGltcG9ydF9sb2NrX2xldmVsID4gMSkgewogICAgICAgICAvKiBGb3JrZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBpbXBvcnQgKi8KICAgICAgICAgbG9uZyBtZSA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKLSAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGltcG9ydF9sb2NrLCAwKTsKLSAgICAgICAgLyogWFhYOiBjYW4gdGhlIHByZXZpb3VzIGxpbmUgZmFpbD8gKi8KKyAgICAgICAgLyogVGhlIGZvbGxvd2luZyBjb3VsZCBmYWlsIGlmIHRoZSBsb2NrIGlzIGFscmVhZHkgaGVsZCwgYnV0IGZvcmtpbmcgYXMKKyAgICAgICAgICAgYSBzaWRlLWVmZmVjdCBvZiBhbiBpbXBvcnQgaXMgYSkgcmFyZSwgYikgbnV0cywgYW5kIGMpIGRpZmZpY3VsdCB0bworICAgICAgICAgICBkbyB0aGFua3MgdG8gdGhlIGxvY2sgb25seSBiZWluZyBoZWxkIHdoZW4gZG9pbmcgaW5kaXZpZHVhbCBtb2R1bGUKKyAgICAgICAgICAgbG9ja3MgcGVyIGltcG9ydC4gKi8KKyAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGltcG9ydF9sb2NrLCBOT1dBSVRfTE9DSyk7CiAgICAgICAgIGltcG9ydF9sb2NrX3RocmVhZCA9IG1lOwogICAgICAgICBpbXBvcnRfbG9ja19sZXZlbC0tOwogICAgIH0gZWxzZSB7CkBAIC0yODAsNiArMjc0LDcgQEAKICAgICAicGF0aCIsICJhcmd2IiwgInBzMSIsICJwczIiLAogICAgICJsYXN0X3R5cGUiLCAibGFzdF92YWx1ZSIsICJsYXN0X3RyYWNlYmFjayIsCiAgICAgInBhdGhfaG9va3MiLCAicGF0aF9pbXBvcnRlcl9jYWNoZSIsICJtZXRhX3BhdGgiLAorICAgICJfX2ludGVyYWN0aXZlaG9va19fIiwKICAgICAvKiBtaXNjIHN0dWZmICovCiAgICAgImZsYWdzIiwgImZsb2F0X2luZm8iLAogICAgIE5VTEwKQEAgLTI5MiwxNiArMjg3LDE3IEBACiAgICAgTlVMTAogfTsKIAotCiAvKiBVbi1pbml0aWFsaXplIHRoaW5ncywgYXMgZ29vZCBhcyB3ZSBjYW4gKi8KIAogdm9pZAogUHlJbXBvcnRfQ2xlYW51cCh2b2lkKQogewotICAgIFB5X3NzaXplX3QgcG9zLCBuZG9uZTsKKyAgICBQeV9zc2l6ZV90IHBvczsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpkaWN0OwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOwogICAgIFB5T2JqZWN0ICptb2R1bGVzID0gaW50ZXJwLT5tb2R1bGVzOworICAgIFB5T2JqZWN0ICpidWlsdGlucyA9IGludGVycC0+YnVpbHRpbnM7CisgICAgUHlPYmplY3QgKndlYWtsaXN0ID0gTlVMTDsKIAogICAgIGlmIChtb2R1bGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybjsgLyogQWxyZWFkeSBkb25lICovCkBAIC0zMTIsNiArMzA4LDggQEAKICAgICAgICBkZWxldGVkICpsYXN0KiBvZiBhbGwsIHRoZXkgd291bGQgY29tZSB0b28gbGF0ZSBpbiB0aGUgbm9ybWFsCiAgICAgICAgZGVzdHJ1Y3Rpb24gb3JkZXIuICBTaWdoLiAqLwogCisgICAgLyogWFhYIFBlcmhhcHMgdGhlc2UgcHJlY2F1dGlvbnMgYXJlIG9ic29sZXRlLiBXaG8ga25vd3M/ICovCisKICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIpOwogICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBkaWN0ID0gUHlNb2R1bGVfR2V0RGljdCh2YWx1ZSk7CkBAIC0zMzksODcgKzMzNyw4NyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogRmlyc3QsIGRlbGV0ZSBfX21haW5fXyAqLwotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgIl9fbWFpbl9fIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFudXAgX19tYWluX19cbiIpOwotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiX19tYWluX18iLCBQeV9Ob25lKTsKKyAgICAvKiBXZSBwcmVwYXJlIGEgbGlzdCB3aGljaCB3aWxsIHJlY2VpdmUgKG5hbWUsIHdlYWtyZWYpIHR1cGxlcyBvZgorICAgICAgIG1vZHVsZXMgd2hlbiB0aGV5IGFyZSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuICBUaGUgbmFtZSBpcyB1c2VkCisgICAgICAgZm9yIGRpYWdub3NpcyBtZXNzYWdlcyAoaW4gdmVyYm9zZSBtb2RlKSwgd2hpbGUgdGhlIHdlYWtyZWYgaGVscHMKKyAgICAgICBkZXRlY3QgdGhvc2UgbW9kdWxlcyB3aGljaCBoYXZlIGJlZW4gaGVsZCBhbGl2ZS4gKi8KKyAgICB3ZWFrbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHdlYWtsaXN0ID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyNkZWZpbmUgU1RPUkVfTU9EVUxFX1dFQUtSRUYobmFtZSwgbW9kKSBcCisgICAgaWYgKHdlYWtsaXN0ICE9IE5VTEwpIHsgXAorICAgICAgICBQeU9iamVjdCAqd3IgPSBQeVdlYWtyZWZfTmV3UmVmKG1vZCwgTlVMTCk7IFwKKyAgICAgICAgaWYgKG5hbWUgJiYgd3IpIHsgXAorICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5VHVwbGVfUGFjaygyLCBuYW1lLCB3cik7IFwKKyAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQod2Vha2xpc3QsIHR1cCk7IFwKKyAgICAgICAgICAgIFB5X1hERUNSRUYodHVwKTsgXAorICAgICAgICB9IFwKKyAgICAgICAgUHlfWERFQ1JFRih3cik7IFwKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIFwKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IFwKICAgICB9CiAKLSAgICAvKiBUaGUgc3BlY2lhbCB0cmVhdG1lbnQgb2YgImJ1aWx0aW5zIiBoZXJlIGlzIGJlY2F1c2UgZXZlbgotICAgICAgIHdoZW4gaXQncyBub3QgcmVmZXJlbmNlZCBhcyBhIG1vZHVsZSwgaXRzIGRpY3Rpb25hcnkgaXMKLSAgICAgICByZWZlcmVuY2VkIGJ5IGFsbW9zdCBldmVyeSBtb2R1bGUncyBfX2J1aWx0aW5zX18uICBTaW5jZQotICAgICAgIGRlbGV0aW5nIGEgbW9kdWxlIGNsZWFycyBpdHMgZGljdGlvbmFyeSAoZXZlbiBpZiB0aGVyZSBhcmUKLSAgICAgICByZWZlcmVuY2VzIGxlZnQgdG8gaXQpLCB3ZSBuZWVkIHRvIGRlbGV0ZSB0aGUgImJ1aWx0aW5zIgotICAgICAgIG1vZHVsZSBsYXN0LiAgTGlrZXdpc2UsIHdlIGRvbid0IGRlbGV0ZSBzeXMgdW50aWwgdGhlIHZlcnkKLSAgICAgICBlbmQgYmVjYXVzZSBpdCBpcyBpbXBsaWNpdGx5IHJlZmVyZW5jZWQgKGUuZy4gYnkgcHJpbnQpLgotCi0gICAgICAgQWxzbyBub3RlIHRoYXQgd2UgJ2RlbGV0ZScgbW9kdWxlcyBieSByZXBsYWNpbmcgdGhlaXIgZW50cnkKLSAgICAgICBpbiB0aGUgbW9kdWxlcyBkaWN0IHdpdGggTm9uZSwgcmF0aGVyIHRoYW4gcmVhbGx5IGRlbGV0aW5nCi0gICAgICAgdGhlbTsgdGhpcyBhdm9pZHMgYSByZWhhc2ggb2YgdGhlIG1vZHVsZXMgZGljdGlvbmFyeSBhbmQKLSAgICAgICBhbHNvIG1hcmtzIHRoZW0gYXMgIm5vbiBleGlzdGVudCIgc28gdGhleSB3b24ndCBiZQotICAgICAgIHJlLWltcG9ydGVkLiAqLwotCi0gICAgLyogTmV4dCwgcmVwZWF0ZWRseSBkZWxldGUgbW9kdWxlcyB3aXRoIGEgcmVmZXJlbmNlIGNvdW50IG9mCi0gICAgICAgb25lIChza2lwcGluZyBidWlsdGlucyBhbmQgc3lzKSBhbmQgZGVsZXRlIHRoZW0gKi8KLSAgICBkbyB7Ci0gICAgICAgIG5kb25lID0gMDsKLSAgICAgICAgcG9zID0gMDsKLSAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KG1vZHVsZXMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b2JfcmVmY250ICE9IDEpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgImJ1aWx0aW5zIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgInN5cyIpID09IDApCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKAotICAgICAgICAgICAgICAgICAgICAgICAgIiMgY2xlYW51cFsxXSAlVVxuIiwga2V5KTsKLSAgICAgICAgICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG1vZHVsZXMsIGtleSwgUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgbmRvbmUrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gd2hpbGUgKG5kb25lID4gMCk7Ci0KLSAgICAvKiBOZXh0LCBkZWxldGUgYWxsIG1vZHVsZXMgKHN0aWxsIHNraXBwaW5nIGJ1aWx0aW5zIGFuZCBzeXMpICovCisgICAgLyogUmVtb3ZlIGFsbCBtb2R1bGVzIGZyb20gc3lzLm1vZHVsZXMsIGhvcGluZyB0aGF0IGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgIGNhbiByZWNsYWltIG1vc3Qgb2YgdGhlbS4gKi8KICAgICBwb3MgPSAwOwogICAgIHdoaWxlIChQeURpY3RfTmV4dChtb2R1bGVzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJidWlsdGlucyIpID09IDApCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAic3lzIikgPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFsyXSAlVVxuIiwga2V5KTsKLSAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7CisgICAgICAgIGlmIChQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZyAmJiBQeVVuaWNvZGVfQ2hlY2soa2V5KSkKKyAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFsyXSByZW1vdmluZyAlVVxuIiwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBTVE9SRV9NT0RVTEVfV0VBS1JFRihrZXksIHZhbHVlKTsKICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG1vZHVsZXMsIGtleSwgUHlfTm9uZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBOZXh0LCBkZWxldGUgc3lzIGFuZCBidWlsdGlucyAoaW4gdGhhdCBvcmRlcikgKi8KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBzeXNcbiIpOwotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2R1bGVzLCAic3lzIiwgUHlfTm9uZSk7Ci0gICAgfQotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFudXAgYnVpbHRpbnNcbiIpOwotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiLCBQeV9Ob25lKTsKKyAgICAvKiBDbGVhciB0aGUgbW9kdWxlcyBkaWN0LiAqLworICAgIFB5RGljdF9DbGVhcihtb2R1bGVzKTsKKyAgICAvKiBSZXBsYWNlIHRoZSBpbnRlcnByZXRlcidzIHJlZmVyZW5jZSB0byBidWlsdGlucyB3aXRoIGFuIGVtcHR5IGRpY3QKKyAgICAgICAobW9kdWxlIGdsb2JhbHMgc3RpbGwgaGF2ZSBhIHJlZmVyZW5jZSB0byB0aGUgb3JpZ2luYWwgYnVpbHRpbnMpLiAqLworICAgIGJ1aWx0aW5zID0gaW50ZXJwLT5idWlsdGluczsKKyAgICBpbnRlcnAtPmJ1aWx0aW5zID0gUHlEaWN0X05ldygpOworICAgIFB5X0RFQ1JFRihidWlsdGlucyk7CisgICAgLyogQ2xlYXIgbW9kdWxlIGRpY3QgY29waWVzIHN0b3JlZCBpbiB0aGUgaW50ZXJwcmV0ZXIgc3RhdGUgKi8KKyAgICBfUHlTdGF0ZV9DbGVhck1vZHVsZXMoKTsKKyAgICAvKiBDb2xsZWN0IHJlZmVyZW5jZXMgKi8KKyAgICBfUHlHQ19Db2xsZWN0Tm9GYWlsKCk7CisgICAgLyogRHVtcCBHQyBzdGF0cyBiZWZvcmUgaXQncyB0b28gbGF0ZSwgc2luY2UgaXQgdXNlcyB0aGUgd2FybmluZ3MKKyAgICAgICBtYWNoaW5lcnkuICovCisgICAgX1B5R0NfRHVtcFNodXRkb3duU3RhdHMoKTsKKworICAgIC8qIE5vdywgaWYgdGhlcmUgYXJlIGFueSBtb2R1bGVzIGxlZnQgYWxpdmUsIGNsZWFyIHRoZWlyIGdsb2JhbHMgdG8KKyAgICAgICBtaW5pbWl6ZSBwb3RlbnRpYWwgbGVha3MuICBBbGwgQyBleHRlbnNpb24gbW9kdWxlcyBhY3R1YWxseSBlbmQKKyAgICAgICB1cCBoZXJlLCBzaW5jZSB0aGV5IGFyZSBrZXB0IGFsaXZlIGluIHRoZSBpbnRlcnByZXRlciBzdGF0ZS4gKi8KKyAgICBpZiAod2Vha2xpc3QgIT0gTlVMTCkgeworICAgICAgICBQeV9zc2l6ZV90IGksIG47CisgICAgICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUod2Vha2xpc3QpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlMaXN0X0dFVF9JVEVNKHdlYWtsaXN0LCBpKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlUdXBsZV9HRVRfSVRFTSh0dXAsIDApOworICAgICAgICAgICAgUHlPYmplY3QgKm1vZCA9IFB5V2Vha3JlZl9HRVRfT0JKRUNUKFB5VHVwbGVfR0VUX0lURU0odHVwLCAxKSk7CisgICAgICAgICAgICBpZiAobW9kID09IFB5X05vbmUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kKTsKKyAgICAgICAgICAgIGFzc2VydChQeU1vZHVsZV9DaGVjayhtb2QpKTsKKyAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZyAmJiBQeVVuaWNvZGVfQ2hlY2sobmFtZSkpCisgICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbM10gd2lwaW5nICVVXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBtb2QpOworICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKG1vZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobW9kKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYod2Vha2xpc3QpOwogICAgIH0KIAotICAgIC8qIEZpbmFsbHksIGNsZWFyIGFuZCBkZWxldGUgdGhlIG1vZHVsZXMgZGlyZWN0b3J5ICovCi0gICAgUHlEaWN0X0NsZWFyKG1vZHVsZXMpOworICAgIC8qIENsZWFyIGFuZCBkZWxldGUgdGhlIG1vZHVsZXMgZGlyZWN0b3J5LiAgQWN0dWFsIG1vZHVsZXMgd2lsbAorICAgICAgIHN0aWxsIGJlIHRoZXJlIG9ubHkgaWYgaW1wb3J0ZWQgZHVyaW5nIHRoZSBleGVjdXRpb24gb2Ygc29tZQorICAgICAgIGRlc3RydWN0b3IuICovCiAgICAgaW50ZXJwLT5tb2R1bGVzID0gTlVMTDsKICAgICBQeV9ERUNSRUYobW9kdWxlcyk7CisKKyAgICAvKiBPbmNlIG1vcmUgKi8KKyAgICBfUHlHQ19Db2xsZWN0Tm9GYWlsKCk7CisKKyN1bmRlZiBTVE9SRV9NT0RVTEVfV0VBS1JFRgogfQogCiAKQEAgLTQ1MSwxMiArNDQ5LDEyIEBACiAKIC8qIE1hZ2ljIGZvciBleHRlbnNpb24gbW9kdWxlcyAoYnVpbHQtaW4gYXMgd2VsbCBhcyBkeW5hbWljYWxseQogICAgbG9hZGVkKS4gIFRvIHByZXZlbnQgaW5pdGlhbGl6aW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgbW9yZSB0aGFuCi0gICBvbmNlLCB3ZSBrZWVwIGEgc3RhdGljIGRpY3Rpb25hcnkgJ2V4dGVuc2lvbnMnIGtleWVkIGJ5IG1vZHVsZSBuYW1lCi0gICAoZm9yIGJ1aWx0LWluIG1vZHVsZXMpIG9yIGJ5IGZpbGVuYW1lIChmb3IgZHluYW1pY2FsbHkgbG9hZGVkCi0gICBtb2R1bGVzKSwgY29udGFpbmluZyB0aGVzZSBtb2R1bGVzLiAgQSBjb3B5IG9mIHRoZSBtb2R1bGUncwotICAgZGljdGlvbmFyeSBpcyBzdG9yZWQgYnkgY2FsbGluZyBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKQotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBzdWNjZWVkcy4gIEEKLSAgIGNvcHkgY2FuIGJlIHJldHJpZXZlZCBmcm9tIHRoZXJlIGJ5IGNhbGxpbmcKKyAgIG9uY2UsIHdlIGtlZXAgYSBzdGF0aWMgZGljdGlvbmFyeSAnZXh0ZW5zaW9ucycga2V5ZWQgYnkgdGhlIHR1cGxlCisgICAobW9kdWxlIG5hbWUsIG1vZHVsZSBuYW1lKSAgKGZvciBidWlsdC1pbiBtb2R1bGVzKSBvciBieQorICAgKGZpbGVuYW1lLCBtb2R1bGUgbmFtZSkgKGZvciBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyksIGNvbnRhaW5pbmcgdGhlc2UKKyAgIG1vZHVsZXMuICBBIGNvcHkgb2YgdGhlIG1vZHVsZSdzIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcKKyAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbk9iamVjdCgpIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24KKyAgIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQSBjb3B5IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGVyZSBieSBjYWxsaW5nCiAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdCgpLgogCiAgICBNb2R1bGVzIHdoaWNoIGRvIHN1cHBvcnQgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gc2V0IHRoZWlyIG1fc2l6ZQpAQCAtNDY5LDggKzQ2Nyw5IEBACiBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKm1vZCwgUHlPYmplY3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2R1bGVzLCAqZGljdDsKKyAgICBQeU9iamVjdCAqbW9kdWxlcywgKmRpY3QsICprZXk7CiAgICAgc3RydWN0IFB5TW9kdWxlRGVmICpkZWY7CisgICAgaW50IHJlczsKICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIGV4dGVuc2lvbnMgPSBQeURpY3RfTmV3KCk7CiAgICAgICAgIGlmIChleHRlbnNpb25zID09IE5VTEwpCkBAIC01MDcsMTIgKzUwNiwxOCBAQAogICAgICAgICBpZiAoZGVmLT5tX2Jhc2UubV9jb3B5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbnMsIGZpbGVuYW1lLCAoUHlPYmplY3QqKWRlZik7CisgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIGZpbGVuYW1lLCBuYW1lKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXMgPSBQeURpY3RfU2V0SXRlbShleHRlbnNpb25zLCBrZXksIChQeU9iamVjdCAqKWRlZik7CisgICAgUHlfREVDUkVGKGtleSk7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIHJldHVybiAtMTsKICAgICByZXR1cm4gMDsKIH0KIAogaW50Ci1fUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNoYXIgKm5hbWUpCitfUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqbmFtZW9iajsKQEAgLTUyNywxMSArNTMyLDE1IEBACiBQeU9iamVjdCAqCiBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2QsICptZGljdDsKKyAgICBQeU9iamVjdCAqbW9kLCAqbWRpY3QsICprZXk7CiAgICAgUHlNb2R1bGVEZWYqIGRlZjsKICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkZWYgPSAoUHlNb2R1bGVEZWYqKVB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbnMsIGZpbGVuYW1lKTsKKyAgICBrZXkgPSBQeVR1cGxlX1BhY2soMiwgZmlsZW5hbWUsIG5hbWUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZGVmID0gKFB5TW9kdWxlRGVmICopUHlEaWN0X0dldEl0ZW0oZXh0ZW5zaW9ucywga2V5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKICAgICBpZiAoZGVmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChkZWYtPm1fc2l6ZSA9PSAtMSkgewpAQCAtNjQ3LDIyICs2NTYsMjMgQEAKICAqIGludGVyZmFjZS4gIFRoZSBvdGhlciB0d28gZXhpc3QgcHJpbWFyaWx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogICovCiBQeU9iamVjdCAqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCiB7CiAgICAgcmV0dXJuIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKICAgICAgICAgbmFtZSwgY28sIChjaGFyICopTlVMTCwgKGNoYXIgKilOVUxMKTsKIH0KIAogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQogewogICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCiAgICAgICAgIG5hbWUsIGNvLCBwYXRobmFtZSwgKGNoYXIgKilOVUxMKTsKIH0KIAogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3BhdGhuYW1lKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjcGF0aG5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm0gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lb2JqLCAqcGF0aG9iaiA9IE5VTEwsICpjcGF0aG9iaiA9IE5VTEw7CkBAIC02OTMsNyArNzAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGludGVycHJldGVyISIpOwogICAgICAgICB9CiAKLSAgICAgICAgcGF0aG9iaiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICBwYXRob2JqID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fZ2V0X3NvdXJjZWZpbGUsIGNwYXRob2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgIGlmIChwYXRob2JqID09IE5VTEwpCkBAIC04MzUsNyArODQ1LDcgQEAKIAogCiAvKiBGb3J3YXJkICovCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gKiBmaW5kX2Zyb3plbihQeU9iamVjdCAqKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqIGZpbmRfZnJvemVuKFB5T2JqZWN0ICopOwogCiAKIC8qIEhlbHBlciB0byB0ZXN0IGZvciBidWlsdC1pbiBtb2R1bGUgKi8KQEAgLTkxNywxMSArOTI3LDExIEBACiBQeUltcG9ydF9HZXRJbXBvcnRlcihQeU9iamVjdCAqcGF0aCkgewogICAgIFB5T2JqZWN0ICppbXBvcnRlcj1OVUxMLCAqcGF0aF9pbXBvcnRlcl9jYWNoZT1OVUxMLCAqcGF0aF9ob29rcz1OVUxMOwogCi0gICAgaWYgKChwYXRoX2ltcG9ydGVyX2NhY2hlID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2ltcG9ydGVyX2NhY2hlIikpKSB7Ci0gICAgICAgIGlmICgocGF0aF9ob29rcyA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9ob29rcyIpKSkgewotICAgICAgICAgICAgaW1wb3J0ZXIgPSBnZXRfcGF0aF9pbXBvcnRlcihwYXRoX2ltcG9ydGVyX2NhY2hlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2hvb2tzLCBwYXRoKTsKLSAgICAgICAgfQorICAgIHBhdGhfaW1wb3J0ZXJfY2FjaGUgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaW1wb3J0ZXJfY2FjaGUiKTsKKyAgICBwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIik7CisgICAgaWYgKHBhdGhfaW1wb3J0ZXJfY2FjaGUgIT0gTlVMTCAmJiBwYXRoX2hvb2tzICE9IE5VTEwpIHsKKyAgICAgICAgaW1wb3J0ZXIgPSBnZXRfcGF0aF9pbXBvcnRlcihwYXRoX2ltcG9ydGVyX2NhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3MsIHBhdGgpOwogICAgIH0KICAgICBQeV9YSU5DUkVGKGltcG9ydGVyKTsgLyogZ2V0X3BhdGhfaW1wb3J0ZXIgcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSAqLwogICAgIHJldHVybiBpbXBvcnRlcjsKQEAgLTkzOCw4ICs5NDgsMTIgQEAKIGluaXRfYnVpbHRpbihQeU9iamVjdCAqbmFtZSkKIHsKICAgICBzdHJ1Y3QgX2luaXR0YWIgKnA7CisgICAgUHlPYmplY3QgKm1vZDsKIAotICAgIGlmIChfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKSAhPSBOVUxMKQorICAgIG1vZCA9IF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KG5hbWUsIG5hbWUpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1vZCAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIGZvciAocCA9IFB5SW1wb3J0X0luaXR0YWI7IHAtPm5hbWUgIT0gTlVMTDsgcCsrKSB7CkBAIC05NzIsMTAgKzk4NiwxMCBAQAogCiAvKiBGcm96ZW4gbW9kdWxlcyAqLwogCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gKgorc3RhdGljIGNvbnN0IHN0cnVjdCBfZnJvemVuICoKIGZpbmRfZnJvemVuKFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOwogCiAgICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05OTIsNyArMTAwNiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2Zyb3plbl9vYmplY3QoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIGludCBzaXplOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewpAQCAtMTAxMCwxMyArMTAyNCwxMyBAQAogICAgIHNpemUgPSBwLT5zaXplOwogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgc2l6ZSA9IC1zaXplOwotICAgIHJldHVybiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNoYXIgKilwLT5jb2RlLCBzaXplKTsKKyAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjb25zdCBjaGFyICopcC0+Y29kZSwgc2l6ZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBpc19mcm96ZW5fcGFja2FnZShQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CiAgICAgaW50IHNpemU7CiAKICAgICBpZiAocCA9PSBOVUxMKSB7CkBAIC0xMDQzLDcgKzEwNTcsNyBAQAogaW50CiBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVPYmplY3QoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnA7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnA7CiAgICAgUHlPYmplY3QgKmNvLCAqbSwgKnBhdGg7CiAgICAgaW50IGlzcGFja2FnZTsKICAgICBpbnQgc2l6ZTsKQEAgLTEwNjIsNyArMTA3Niw3IEBACiAgICAgaXNwYWNrYWdlID0gKHNpemUgPCAwKTsKICAgICBpZiAoaXNwYWNrYWdlKQogICAgICAgICBzaXplID0gLXNpemU7Ci0gICAgY28gPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNoYXIgKilwLT5jb2RlLCBzaXplKTsKKyAgICBjbyA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY29uc3QgY2hhciAqKXAtPmNvZGUsIHNpemUpOwogICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFQeUNvZGVfQ2hlY2soY28pKSB7CkBAIC0xMDcyLDE5ICsxMDg2LDE3IEBACiAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICB9CiAgICAgaWYgKGlzcGFja2FnZSkgewotICAgICAgICAvKiBTZXQgX19wYXRoX18gdG8gdGhlIHBhY2thZ2UgbmFtZSAqLworICAgICAgICAvKiBTZXQgX19wYXRoX18gdG8gdGhlIGVtcHR5IGxpc3QgKi8KICAgICAgICAgUHlPYmplY3QgKmQsICpsOwogICAgICAgICBpbnQgZXJyOwogICAgICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG5hbWUpOwogICAgICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICAgICAgbCA9IFB5TGlzdF9OZXcoMSk7CisgICAgICAgIGwgPSBQeUxpc3RfTmV3KDApOwogICAgICAgICBpZiAobCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKG5hbWUpOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0obCwgMCwgbmFtZSk7CiAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX3BhdGhfXyIsIGwpOwogICAgICAgICBQeV9ERUNSRUYobCk7CiAgICAgICAgIGlmIChlcnIgIT0gMCkKQEAgLTExMDYsNyArMTExOCw3IEBACiB9CiAKIGludAotUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNoYXIgKm5hbWUpCitQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZW9iajsKICAgICBpbnQgcmV0OwpAQCAtMTIyMCw3ICsxMjMyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCkKIHsKICAgICBfUHlfSURFTlRJRklFUihfX2ltcG9ydF9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX2luaXRpYWxpemluZ19fKTsKKyAgICBfUHlfSURFTlRJRklFUihfX3NwZWNfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX2luaXRpYWxpemluZyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19wYWNrYWdlX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fcGF0aF9fKTsKICAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CkBAIC0xMzU2LDcgKzEzNjksMTEgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgYmFzZSA9IFB5VW5pY29kZV9TdWJzdHJpbmcocGFja2FnZSwgMCwgbGFzdF9kb3QpOworICAgICAgICBpZiAoYmFzZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqYm9ycm93ZWRfZG90LCAqc2VxID0gTlVMTDsKIApAQCAtMTQxMCwxNiArMTQyNywyMSBAQAogICAgICAgICBnb3RvIGVycm9yX3dpdGhfdW5sb2NrOwogICAgIH0KICAgICBlbHNlIGlmIChtb2QgIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqdmFsdWU7CisgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICpzcGVjOwogICAgICAgICBpbnQgaW5pdGlhbGl6aW5nID0gMDsKIAogICAgICAgICBQeV9JTkNSRUYobW9kKTsKICAgICAgICAgLyogT3B0aW1pemF0aW9uOiBvbmx5IGNhbGwgX2Jvb3RzdHJhcC5fbG9ja191bmxvY2tfbW9kdWxlKCkgaWYKLSAgICAgICAgICAgX19pbml0aWFsaXppbmdfXyBpcyB0cnVlLgotICAgICAgICAgICBOT1RFOiBiZWNhdXNlIG9mIHRoaXMsIF9faW5pdGlhbGl6aW5nX18gbXVzdCBiZSBzZXQgKmJlZm9yZSoKKyAgICAgICAgICAgX19zcGVjX18uX2luaXRpYWxpemluZyBpcyB0cnVlLgorICAgICAgICAgICBOT1RFOiBiZWNhdXNlIG9mIHRoaXMsIGluaXRpYWxpemluZyBtdXN0IGJlIHNldCAqYmVmb3JlKgogICAgICAgICAgICBzdHVmZmluZyB0aGUgbmV3IG1vZHVsZSBpbiBzeXMubW9kdWxlcy4KICAgICAgICAgICovCi0gICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0dldEF0dHJJZChtb2QsICZQeUlkX19faW5pdGlhbGl6aW5nX18pOworICAgICAgICBzcGVjID0gX1B5T2JqZWN0X0dldEF0dHJJZChtb2QsICZQeUlkX19fc3BlY19fKTsKKyAgICAgICAgaWYgKHNwZWMgIT0gTlVMTCkgeworICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHNwZWMsICZQeUlkX19pbml0aWFsaXppbmcpOworICAgICAgICAgICAgUHlfREVDUkVGKHNwZWMpOworICAgICAgICB9CiAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZSB7CkBAIC0xNDMwLDcgKzE0NTIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChpbml0aWFsaXppbmcgPiAwKSB7CiAgICAgICAgICAgICAvKiBfYm9vdHN0cmFwLl9sb2NrX3VubG9ja19tb2R1bGUoKSByZWxlYXNlcyB0aGUgaW1wb3J0IGxvY2sgKi8KLSAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0NhbGxNZXRob2RPYmpJZEFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fbG9ja191bmxvY2tfbW9kdWxlLCBhYnNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKQEAgLTE0NDgsNyArMTQ3MCw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBfYm9vdHN0cmFwLl9maW5kX2FuZF9sb2FkKCkgcmVsZWFzZXMgdGhlIGltcG9ydCBsb2NrICovCi0gICAgICAgIG1vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICBtb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2ZpbmRfYW5kX2xvYWQsIGFic19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluc19pbXBvcnQsIE5VTEwpOwogICAgICAgICBpZiAobW9kID09IE5VTEwpIHsKQEAgLTE1MTcsNyArMTUzOSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZpbmFsX21vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICBmaW5hbF9tb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2hhbmRsZV9mcm9tbGlzdCwgbW9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdCwgYnVpbHRpbnNfaW1wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKQEAgLTE3NzEsNyArMTc5Myw3IEBACiBpbXBfaXNfZnJvemVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqbmFtZTsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6aXNfZnJvemVuIiwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwID0gZmluZF9mcm96ZW4obmFtZSk7CkBAIC0xNzkwLDcgKzE4MTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgUHlVbmljb2RlX0ZTRGVjb2RlciwgJnBhdGhuYW1lLCAmZm9iKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGZvYiAhPSBOVUxMKSB7Ci0gICAgICAgIGZwID0gX1B5X2ZvcGVuKHBhdGhuYW1lLCAiciIpOworICAgICAgICBmcCA9IF9QeV9mb3Blbl9vYmoocGF0aG5hbWUsICJyIik7CiAgICAgICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYocGF0aG5hbWUpOwogICAgICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGRsLmMgYi9QeXRob24vaW1wb3J0ZGwuYwppbmRleCAwZWE5NTRjLi5iNjBmMWM3IDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0ZGwuYworKysgYi9QeXRob24vaW1wb3J0ZGwuYwpAQCAtNzcsNiArNzcsOCBAQAogICAgICAgICBQeU9iamVjdCAqbXNnID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImR5bmFtaWMgbW9kdWxlIGRvZXMgbm90IGRlZmluZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdCBmdW5jdGlvbiAoUHlJbml0XyVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydG5hbWUpOworICAgICAgICBpZiAobXNnID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBQeUVycl9TZXRJbXBvcnRFcnJvcihtc2csIG5hbWUsIHBhdGgpOwogICAgICAgICBQeV9ERUNSRUYobXNnKTsKICAgICAgICAgZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5oIGIvUHl0aG9uL2ltcG9ydGRsLmgKaW5kZXggNmI5Y2Y3NS4uNmE1MWE5MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmgKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmgKQEAgLTE4LDEzICsxOCw4IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogdHlwZWRlZiBGQVJQUk9DIGRsX2Z1bmNwdHI7CiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPG9zMmRlZi5oPgotdHlwZWRlZiBpbnQgKCogQVBJRU5UUlkgZGxfZnVuY3B0cikoKTsKLSNlbHNlCiB0eXBlZGVmIHZvaWQgKCpkbF9mdW5jcHRyKSh2b2lkKTsKICNlbmRpZgotI2VuZGlmCiAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0bGliLmggYi9QeXRob24vaW1wb3J0bGliLmgKaW5kZXggY2I2YWZjNS4uZGQ5Yjk3OCAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGxpYi5oCisrKyBiL1B5dGhvbi9pbXBvcnRsaWIuaApAQCAtMSwyMDcyICsxLDI1NDcgQEAKIC8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLwotdW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7Ci0gICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNiwwLDAsCi0gICAgMCw2NCwwLDAsMCwxMTUsMjA2LDMsMCwwLDEwMCwwLDAsOTAsMCwwLAotICAgIDEwMCwxMzEsMCw5MCwxLDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsCitjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3LDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSwyMDEsNCwwLDAsMTAwLDAsMCw5MCwwLDAsCisgICAgMTAwLDE1OSwwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKICAgICAyLDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsMywwLDEwMCw4LAogICAgIDAsMTAwLDksMCwxMzIsMCwwLDkwLDQsMCwxMDAsMTAsMCwxMDAsMTEsMCwKICAgICAxMzIsMCwwLDkwLDUsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDkwLAogICAgIDYsMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTYsCiAgICAgMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTgsMCwxMDAsMTksMCwKLSAgICAxMzIsMCwwLDkwLDksMCwxMDAsMjAsMCwxMDAsMjEsMCwxMDAsMjIsMCwxMzIsCi0gICAgMSwwLDkwLDEwLDAsMTAwLDIzLDAsMTAwLDI0LDAsMTMyLDAsMCw5MCwxMSwKLSAgICAwLDEwMSwxMiwwLDEwMSwxMSwwLDEwNiwxMywwLDEzMSwxLDAsOTAsMTQsMCwKLSAgICAxMDAsMjUsMCwxMDAsMjYsMCwxMzIsMCwwLDkwLDE1LDAsMTA1LDAsMCw5MCwKLSAgICAxNiwwLDEwNSwwLDAsOTAsMTcsMCw3MSwxMDAsMjcsMCwxMDAsMjgsMCwxMzIsCi0gICAgMCwwLDEwMCwyOCwwLDEwMSwxOCwwLDEzMSwzLDAsOTAsMTksMCw3MSwxMDAsCi0gICAgMjksMCwxMDAsMzAsMCwxMzIsMCwwLDEwMCwzMCwwLDEzMSwyLDAsOTAsMjAsCi0gICAgMCw3MSwxMDAsMzEsMCwxMDAsMzIsMCwxMzIsMCwwLDEwMCwzMiwwLDEzMSwyLAotICAgIDAsOTAsMjEsMCwxMDAsMzMsMCwxMDAsMzQsMCwxMzIsMCwwLDkwLDIyLDAsCi0gICAgMTAwLDM1LDAsMTAwLDM2LDAsMTMyLDAsMCw5MCwyMywwLDEwMCwzNywwLDEwMCwKLSAgICAzOCwwLDEzMiwwLDAsOTAsMjQsMCwxMDAsMzksMCwxMDEsMjUsMCwxMDAsNDAsCi0gICAgMCwxMzEsMSwwLDEwMCw0MSwwLDYyLDY2LDEwMSwyNSwwLDEwMCw0MiwwLDEzMSwKLSAgICAxLDAsMTAwLDQzLDAsNjIsNjYsOTAsMjYsMCwxMDEsMjcsMCwxMDAsNDQsMCwKLSAgICAxMDAsNDUsMCwxMzIsMCwwLDEwMSwyOCwwLDEwMCw0NiwwLDEwMCw0NywwLDEwMCwKLSAgICA0OCwwLDEzMSwzLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDkwLDI5LDAsMTAwLAotICAgIDQ5LDAsOTAsMzAsMCwxMDAsNTAsMCwxMDMsMSwwLDkwLDMxLDAsMTAwLDUxLAotICAgIDAsMTAzLDEsMCw5MCwzMiwwLDEwMCw1MiwwLDEwMywxLDAsOTAsMzMsMCwKLSAgICAxMDAsMTMwLDAsMTAwLDUzLDAsMTAwLDU0LDAsMTMyLDEsMCw5MCwzNSwwLDEwMCwKLSAgICA1NSwwLDEwMCw1NiwwLDEzMiwwLDAsOTAsMzYsMCwxMDAsNTcsMCwxMDAsNTgsCi0gICAgMCwxMzIsMCwwLDkwLDM3LDAsMTAwLDU5LDAsMTAwLDYwLDAsMTAwLDYxLDAsCi0gICAgMTAwLDYyLDAsMTMyLDAsMSw5MCwzOCwwLDEwMCw2MywwLDEwMCw2NCwwLDEzMiwKLSAgICAwLDAsOTAsMzksMCwxMDAsNjUsMCwxMDAsNjYsMCwxMzIsMCwwLDkwLDQwLAotICAgIDAsMTAwLDY3LDAsMTAwLDY4LDAsMTMyLDAsMCw5MCw0MSwwLDEwMCw2OSwwLAotICAgIDEwMCw3MCwwLDEzMiwwLDAsOTAsNDIsMCwxMDAsNzEsMCwxMDAsNzIsMCwxMzIsCi0gICAgMCwwLDkwLDQzLDAsMTAwLDczLDAsMTAwLDc0LDAsMTMyLDAsMCw5MCw0NCwKLSAgICAwLDEwMCw3NSwwLDEwMCw3NiwwLDEzMiwwLDAsOTAsNDUsMCw3MSwxMDAsNzcsCi0gICAgMCwxMDAsNzgsMCwxMzIsMCwwLDEwMCw3OCwwLDEzMSwyLDAsOTAsNDYsMCwKLSAgICA3MSwxMDAsNzksMCwxMDAsODAsMCwxMzIsMCwwLDEwMCw4MCwwLDEzMSwyLDAsCi0gICAgOTAsNDcsMCw3MSwxMDAsODEsMCwxMDAsODIsMCwxMzIsMCwwLDEwMCw4MiwwLAotICAgIDEzMSwyLDAsOTAsNDgsMCw3MSwxMDAsODMsMCwxMDAsODQsMCwxMzIsMCwwLAotICAgIDEwMCw4NCwwLDEzMSwyLDAsOTAsNDksMCw3MSwxMDAsODUsMCwxMDAsODYsMCwKLSAgICAxMzIsMCwwLDEwMCw4NiwwLDEwMSw0OSwwLDEzMSwzLDAsOTAsNTAsMCw3MSwKLSAgICAxMDAsODcsMCwxMDAsODgsMCwxMzIsMCwwLDEwMCw4OCwwLDEzMSwyLDAsOTAsCi0gICAgNTEsMCw3MSwxMDAsODksMCwxMDAsOTAsMCwxMzIsMCwwLDEwMCw5MCwwLDEwMSwKLSAgICA1MSwwLDEwMSw1MCwwLDEzMSw0LDAsOTAsNTIsMCw3MSwxMDAsOTEsMCwxMDAsCi0gICAgOTIsMCwxMzIsMCwwLDEwMCw5MiwwLDEwMSw1MSwwLDEwMSw0OSwwLDEzMSw0LAotICAgIDAsOTAsNTMsMCwxMDMsMCwwLDkwLDU0LDAsNzEsMTAwLDkzLDAsMTAwLDk0LAotICAgIDAsMTMyLDAsMCwxMDAsOTQsMCwxMzEsMiwwLDkwLDU1LDAsNzEsMTAwLDk1LAotICAgIDAsMTAwLDk2LDAsMTMyLDAsMCwxMDAsOTYsMCwxMzEsMiwwLDkwLDU2LDAsCi0gICAgNzEsMTAwLDk3LDAsMTAwLDk4LDAsMTMyLDAsMCwxMDAsOTgsMCwxMzEsMiwwLAotICAgIDkwLDU3LDAsNzEsMTAwLDk5LDAsMTAwLDEwMCwwLDEzMiwwLDAsMTAwLDEwMCwwLAotICAgIDEzMSwyLDAsOTAsNTgsMCw3MSwxMDAsMTAxLDAsMTAwLDEwMiwwLDEzMiwwLDAsCi0gICAgMTAwLDEwMiwwLDEzMSwyLDAsOTAsNTksMCw3MSwxMDAsMTAzLDAsMTAwLDEwNCwwLAotICAgIDEzMiwwLDAsMTAwLDEwNCwwLDEzMSwyLDAsOTAsNjAsMCwxMDAsMTA1LDAsMTAwLAotICAgIDEwNiwwLDEzMiwwLDAsOTAsNjEsMCwxMDAsMTA3LDAsMTAwLDEwOCwwLDEzMiwwLAotICAgIDAsOTAsNjIsMCwxMDAsMTA5LDAsMTAwLDExMCwwLDEzMiwwLDAsOTAsNjMsMCwKLSAgICAxMDAsMTExLDAsOTAsNjQsMCwxMDAsMTEyLDAsMTAwLDExMywwLDEzMiwwLDAsOTAsCi0gICAgNjUsMCwxMDAsMTE0LDAsMTAwLDExNSwwLDEzMiwwLDAsOTAsNjYsMCwxMDAsMTMwLAotICAgIDAsMTAwLDQ2LDAsMTAwLDExNiwwLDEwMCwxMTcsMCwxMzIsMiwwLDkwLDY3LDAsCi0gICAgMTAwLDExOCwwLDEwMCwxMTksMCwxMzIsMCwwLDkwLDY4LDAsMTAwLDEyMCwwLDEwMCwKLSAgICAxMjEsMCwxMzIsMCwwLDkwLDY5LDAsMTAwLDEyMiwwLDEwMCwxMjMsMCwxMzIsMCwKLSAgICAwLDkwLDcwLDAsMTAwLDEzMCwwLDEwMCwxMzAsMCwxMDIsMCwwLDEwMCw0NiwwLAotICAgIDEwMCwxMjQsMCwxMDAsMTI1LDAsMTMyLDQsMCw5MCw3MSwwLDEwMCwxMjYsMCwxMDAsCi0gICAgMTI3LDAsMTMyLDAsMCw5MCw3MiwwLDEwMCwxMjgsMCwxMDAsMTI5LDAsMTMyLDAsCi0gICAgMCw5MCw3MywwLDEwMCwxMzAsMCw4Myw0MCwxMzIsMCwwLDAsMTE3LDgzLDEsCi0gICAgMCwwLDY3LDExMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LAotICAgIDEwLDEwLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsNzgsNzksODQsMzIsMTA5LDEwMSw5NywxMTAsMTE2LDMyLDExNiwxMTEsMzIsOTgsMTAxLAotICAgIDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTAwLDMzLDMyLDczLDExNiwzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLAotICAgIDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE1LDExNyw5OSwxMDQsMTAsMTE2LDEwNCwKLSAgICA5NywxMTYsMzIsMTA1LDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiwxMTIsMTAxLDEwMCwzMiwxMDUsMTEwLDExNiwxMTEsMzIsODAsCi0gICAgMTIxLDExNiwxMDQsMTExLDExMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMzIsNjUsMTE1LDEwLDExNSwxMTcsOTksMTA0LDMyLDEwNSwKLSAgICAxMTYsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsCi0gICAgMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE1LDExMiwxMDEsOTksCi0gICAgMTA1LDEwMiwxMDUsOTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsCi0gICAgMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLDExMSwKLSAgICAxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwxMCwxMTksMTExLDExNCwxMDcsNDYsMzIsNzksMTEwLAotICAgIDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsMTE3LAotICAgIDk4LDEwOCwxMDUsOTksNDUsMTAyLDk3LDk5LDEwNSwxMTAsMTAzLDMyLDExOCwxMDEsMTE0LDExNSwKLSAgICAxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMCwxMCwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsNiwwLAotICAgIDAsMCw5OSwxMjEsMTAzLDExOSwxMDUsMTEwLDExNyw2LDAsMCwwLDEwMCw5NywxMTQsCi0gICAgMTE5LDEwNSwxMTAsOTksMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEwNiwyLDAsMTE2LDMsMCwxMzEsMSwwLDExNCwzMywwLDEwMCwKLSAgICAxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNSwwLDAsMTEwLDEyLDAsMTAwLDMsCi0gICAgMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMjQsMCwwLDgzLDQwLDQsCi0gICAgMCwwLDAsNzgsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCw4MywwLDAsMCwxMTUsMTMsMCwwLDAsMTAwLDEsCi0gICAgMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNyw1MywwLDAsMCw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDEwMiwxMDUsMTA4LAotICAgIDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LDExMCwxMTUsMTAxLAotICAgIDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDExNSwxMiwwLDAsMCw4MCwKLSAgICA4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw0MCwyLDAsMCwwLAotICAgIDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDcsMCwwLDAsMTAxLDExMCwxMTgsCi0gICAgMTA1LDExNCwxMTEsMTEwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLAotICAgIDk1LDk5LDk3LDExNSwxMDEsMzQsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLAotICAgIDExNywzNywwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsCi0gICAgMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMCwwLDAsMCwwLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw4MywwLDAsMCwxMTUsCi0gICAgNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDUzLDAsCi0gICAgMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LDEwNCwxMDEsOTksCi0gICAgMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsNzAsNDAsMSwwLDAsMCwxMTcsNSwwLAotICAgIDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDExNCwxMDEsCi0gICAgMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDM4LDAsMCwwLDExNSwyLDAsMCwKLSAgICAwLDAsMiw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LAotICAgIDExNyw4LDAsMCwwLDExMiwxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwxMTcsMTAsMCwKLSAgICAwLDAsMTE1LDExNiw5NywxMTQsMTE2LDExNSwxMTksMTA1LDExNiwxMDQsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDY3LDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLAotICAgIDg2LDY5LDk1LDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDQwLDEsMCwwLAotICAgIDAsMTE3LDExLDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsCi0gICAgMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywKLSAgICAxMTUsMTAxLDMyLDAsMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LAotICAgIDQsMTIsMywxMTcsMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTA4LDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwwLDAsMTAzLDAsCi0gICAgMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwxLDAsCi0gICAgNjQsMTMxLDEsMCwxLDEyNCwxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCwyLAotICAgIDAsNjMsMTAwLDEsMCw2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLAotICAgIDEyNCwwLDAsMTAwLDMsMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsCi0gICAgMSwwLDEwNiwxLDAsMTI0LDAsMCwxMDAsNCwwLDYzLDEwMCwxLDAsNjQsCi0gICAgMTMxLDEsMCwxLDExNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDUsCi0gICAgMCwwLDAsMTE3LDExMSwwLDAsMCw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiwKLSAgICA5NywzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwKLSAgICAzMiwxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywKLSAgICAxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsCi0gICAgMTExLDExNCw5NywxMTQsMTIxLDMyLDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsCi0gICAgMTA0LDk3LDEwOCwzOSwxMTUsMzIsMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwKLSAgICAxMDUsMTExLDExMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTA1LDI1NSwwLDAsMCwxMDUsOCwwLDAsCi0gICAgMCwxMDUsMTYsMCwwLDAsMTA1LDI0LDAsMCwwLDQwLDMsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwKLSAgICAxMDEsMTEwLDEwMCwxMTcsOSwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5NywxMTQsMTE0LDk3LAotICAgIDEyMSw0MCwyLDAsMCwwLDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsCi0gICAgMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSwxMTksOTUsMTA4LDExMSwKLSAgICAxMTAsMTAzLDQ1LDAsMCwwLDExNSwxNCwwLDAsMCwwLDYsMTIsMSw2LAotICAgIDEsMTcsMSwyMSwxLDIxLDEsMjEsMSwxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgOTUsMTA4LDExMSwxMTAsMTAzLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwKLSAgICAwLDAsMTAwLDEsMCwyNSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsCi0gICAgMiwwLDI1LDEwMCwzLDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLDEyNCwwLAotICAgIDAsMTAwLDQsMCwyNSwxMDAsNSwwLDYyLDc5LDEyNSwxLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDEwMCw2LDAsMjUsMTAwLDcsMCw2Miw3OSwxMjUsMSwwLDEyNCwKLSAgICAxLDAsODMsNDAsOCwwLDAsMCwxMTcsMTE1LDAsMCwwLDY3LDExMSwxMTAsCi0gICAgMTE4LDEwMSwxMTQsMTE2LDMyLDUyLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLAotICAgIDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwKLSAgICAzMiw5NywxMTAsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDg4LDg4LDg4LDMyLDg0LDEwMSwxMDksMTEyLDExMSwxMTQsOTcsMTE0LDEyMSwzMiwKLSAgICAxMTcsMTEwLDExNiwxMDUsMTA4LDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMzksMTE1LDMyLAotICAgIDEwOCwxMTEsMTEwLDEwMywzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsOTcsMTE0LAotICAgIDEwMSwzMiwxMDEsMTIwLDExMiwxMTEsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsMTA1LDgsMCwwLDAsMTA1LAotICAgIDIsMCwwLDAsMTA1LDE2LDAsMCwwLDEwNSwzLDAsMCwwLDEwNSwyNCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNywxLDAsMCwwLAotICAgIDEyMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsCi0gICAgMCwwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNjEsMCwwLDAsMTE1LDEwLDAsCi0gICAgMCwwLDAsNiwxMCwxLDE4LDEsMTgsMSwxOCwxLDExNyw3LDAsMCwKLSAgICAwLDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsOTksMCwwLDAsMCwwLDAsMCwKLSAgICAwLDMsMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsMTAzLDAsCi0gICAgMCwwLDEwMywwLDAsMTI1LDEsMCwxMjAsNzEsMCwxMjQsMCwwLDY4LDkzLAotICAgIDYzLDAsMTI1LDIsMCwxMjQsMiwwLDExNSwzMSwwLDExMywxMywwLDExMCwwLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLAotICAgIDAsMTAwLDQsMCwyNSwxMTYsMSwwLDEwNyw3LDAsMTE0LDEzLDAsMTI0LDEsCi0gICAgMCwxMDYsMCwwLDExNiwyLDAsMTMxLDEsMCwxLDExMywxMywwLDExMywxMywKLSAgICAwLDg3LDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwMCwzLDAsMTAwLDUsCi0gICAgMCwxMzMsMiwwLDI1LDEzMSwxLDAsODMsNDAsNiwwLDAsMCwxMTcsMzEsCi0gICAgMCwwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNiwxMTEsMTA1LDExMCw0MCwKLSAgICA0MSw0NiwxMDUsMSwwLDAsMCwxMTcsMCwwLDAsMCw3OCwxMDUsMjU1LDI1NSwKLSAgICAyNTUsMjU1LDEwNSwyNTUsMjU1LDI1NSwyNTUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsCi0gICAgMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNywxNSwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNyw0LDAsMCwwLDEwNiwxMTEsMTA1LAotICAgIDExMCw0MCwzLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwKLSAgICAxMTIsOTcsMTE0LDExNiwxMTUsMTE3LDksMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LAotICAgIDExNCwxMTYsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTQsMTE2LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw3NCwwLDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCwyLDYsMSwxMywxLDYsMSw2LDEsMTMsMSwxNiwxLDIwLDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw4NSwwLDAsMCwxMjAsNDgsMCwxMTYsMCwwLDEyNCwKLSAgICAwLDAsMTMxLDEsMCw2OCw5MywyOCwwLDEyNSwxLDAsMTI0LDEsMCwxMTYsCi0gICAgMSwwLDEwNyw2LDAsMTE0LDEzLDAsMTI0LDEsMCwxMjUsMiwwLDgwLDExMywKLSAgICAxMywwLDExMywxMywwLDg3LDExNiwyLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwKLSAgICAzLDAsMTI0LDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsMywwLDEyNSw0LAotICAgIDAsMTI1LDUsMCwxMjQsMywwLDEyNCw1LDAsMTAyLDIsMCw4Myw0MCwxLAotICAgIDAsMCwwLDExNywzMiwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LAotICAgIDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiw0MCw0MSw0Niw0MCw0LDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LDEwMSwxMDAsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDEwLDAsMCwwLAotICAgIDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDYsMCwwLDAsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDEsMCwwLDAsMTIwLDExNywzLAotICAgIDAsMCwwLDExNSwxMDEsMTEyLDExNyw1LDAsMCwwLDEwMiwxMTQsMTExLDExMCwxMTYsCi0gICAgMTE3LDEsMCwwLDAsOTUsMTE3LDQsMCwwLDAsMTE2LDk3LDEwNSwxMDgsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiw4NiwwLDAsMCwxMTUsCi0gICAgMTQsMCwwLDAsMCwyLDE5LDEsMTIsMSw2LDEsOCwyLDYsMSwKLSAgICAyNCwxLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw2MSwwLDAsMCwxMjEsMTksMCwxMTYsCi0gICAgMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDEwMCwKLSAgICAyLDAsODMsODksMTEwLDEsMCw4OCwxMjQsMiwwLDEwNiw0LDAsMTAwLDEsCi0gICAgMCw2NCwxMjQsMSwwLDEwNywyLDAsODMsNDAsMywwLDAsMCwxMTcsNDksCi0gICAgMCwwLDAsODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwxMDEsMTE0LDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMDEsMzIsMTE2LAotICAgIDEyMSwxMTIsMTAxLDQ2LDEwNSwwLDI0MCwwLDAsNzAsNDAsNSwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCw5NSwxMTEsMTE1LDExNyw0LDAsMCwwLDExNSwxMTYsOTcsMTE2LAotICAgIDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsCi0gICAgMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsNywwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTEsCi0gICAgMTAwLDEwMSw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDExNyw0LDAsMCwwLDEwOSwxMTEsMTAwLDEwMSwxMTcsOSwwLDAsMCwxMTUsMTE2LAotICAgIDk3LDExNiw5NSwxMDUsMTEwLDEwMiwxMTEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwKLSAgICA5NSwxMDksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDk4LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwwLDIsMywxLDE5LDEsMTMsMSw5LDEsMTE3LDE4LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLDk1LAotICAgIDExNiwxMjEsMTEyLDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwxMTYsMCwKLSAgICAwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDMxLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSw0NiwxMDUsMCwxMjgsMCwwLDQwLDEsMCwwLDAsMTE3LDE4LAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsOTUsMTA5LDExMSwxMDAsMTAxLAotICAgIDk1LDExNiwxMjEsMTEyLDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEyLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLAotICAgIDEwOCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDEyLDAsMCwwLAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDk5LDEsMCwwLAorICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEzMiwwLDAsOTAsCisgICAgMTAsMCwxMDAsMjIsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMSwwLDkwLDExLAorICAgIDAsMTAwLDI1LDAsMTAwLDI2LDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyNywwLAorICAgIDEwMCwyOCwwLDEzMiwwLDAsOTAsMTMsMCwxMDEsMTQsMCwxMDEsMTIsMCwxMDYsCisgICAgMTUsMCwxMzEsMSwwLDkwLDE2LDAsNzEsMTAwLDI5LDAsMTAwLDMwLDAsMTMyLAorICAgIDAsMCwxMDAsMzAsMCwxMzEsMiwwLDkwLDE3LDAsMTA1LDAsMCw5MCwxOCwKKyAgICAwLDEwNSwwLDAsOTAsMTksMCw3MSwxMDAsMzEsMCwxMDAsMzIsMCwxMzIsMCwKKyAgICAwLDEwMCwzMiwwLDEwMSwyMCwwLDEzMSwzLDAsOTAsMjEsMCw3MSwxMDAsMzMsCisgICAgMCwxMDAsMzQsMCwxMzIsMCwwLDEwMCwzNCwwLDEzMSwyLDAsOTAsMjIsMCwKKyAgICA3MSwxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDEwMCwzNiwwLDEzMSwyLDAsCisgICAgOTAsMjMsMCw3MSwxMDAsMzcsMCwxMDAsMzgsMCwxMzIsMCwwLDEwMCwzOCwwLAorICAgIDEzMSwyLDAsOTAsMjQsMCwxMDAsMzksMCwxMDAsNDAsMCwxMzIsMCwwLDkwLAorICAgIDI1LDAsMTAwLDQxLDAsMTAwLDQyLDAsMTMyLDAsMCw5MCwyNiwwLDEwMCw0MywKKyAgICAwLDEwMCw0NCwwLDEzMiwwLDAsOTAsMjcsMCwxMDAsNDUsMCwxMDYsMjgsMCwKKyAgICAxMDAsNDYsMCwxMDAsNDcsMCwxMzEsMiwwLDEwMCw0OCwwLDIzLDkwLDI5LDAsCisgICAgMTAxLDMwLDAsMTA2LDMxLDAsMTAxLDI5LDAsMTAwLDQ3LDAsMTMxLDIsMCw5MCwKKyAgICAzMiwwLDEwMCw0OSwwLDkwLDMzLDAsMTAwLDUwLDAsMTAzLDEsMCw5MCwzNCwKKyAgICAwLDEwMCw1MSwwLDEwMywxLDAsOTAsMzUsMCwxMDAsNTIsMCwxMDMsMSwwLAorICAgIDkwLDM2LDAsMTAwLDUzLDAsMTAwLDU0LDAsMTAwLDU1LDAsMTMyLDEsMCw5MCwKKyAgICAzNywwLDEwMCw1NiwwLDEwMCw1NywwLDEzMiwwLDAsOTAsMzgsMCwxMDAsNTgsCisgICAgMCwxMDAsNTksMCwxMzIsMCwwLDkwLDM5LDAsMTAwLDYwLDAsMTAwLDYxLDAsCisgICAgMTMyLDAsMCw5MCw0MCwwLDEwMCw2MiwwLDEwMCw2MywwLDEwMCw2NCwwLDEwMCwKKyAgICA2NSwwLDEzMiwwLDEsOTAsNDEsMCwxMDAsNjYsMCwxMDAsNjcsMCwxMzIsMCwKKyAgICAwLDkwLDQyLDAsMTAwLDY4LDAsMTAwLDY5LDAsMTMyLDAsMCw5MCw0MywwLAorICAgIDEwMCw3MCwwLDEwMCw3MSwwLDEzMiwwLDAsOTAsNDQsMCwxMDAsNzIsMCwxMDAsCisgICAgNzMsMCwxMzIsMCwwLDkwLDQ1LDAsMTAwLDc0LDAsMTAwLDc1LDAsMTMyLDAsCisgICAgMCw5MCw0NiwwLDEwMCw1MywwLDEwMCw1MywwLDEwMCw1MywwLDEwMCw3NiwwLAorICAgIDEwMCw3NywwLDEzMiwzLDAsOTAsNDcsMCwxMDAsNTMsMCwxMDAsNTMsMCwxMDAsCisgICAgNTMsMCwxMDAsNzgsMCwxMDAsNzksMCwxMzIsMywwLDkwLDQ4LDAsMTAwLDgwLAorICAgIDAsMTAwLDgwLDAsMTAwLDgxLDAsMTAwLDgyLDAsMTMyLDIsMCw5MCw0OSwwLAorICAgIDEwMCw4MywwLDEwMCw4NCwwLDEzMiwwLDAsOTAsNTAsMCwxMDAsODUsMCwxMDAsCisgICAgODYsMCwxMzIsMCwwLDkwLDUxLDAsNzEsMTAwLDg3LDAsMTAwLDg4LDAsMTMyLAorICAgIDAsMCwxMDAsODgsMCwxMzEsMiwwLDkwLDUyLDAsNzEsMTAwLDg5LDAsMTAwLAorICAgIDkwLDAsMTMyLDAsMCwxMDAsOTAsMCwxMzEsMiwwLDkwLDUzLDAsMTAwLDkxLAorICAgIDAsMTAwLDUzLDAsMTAwLDkyLDAsMTAwLDUzLDAsMTAwLDkzLDAsMTAwLDk0LDAsCisgICAgMTMyLDAsMiw5MCw1NCwwLDEwMSw1NSwwLDEzMSwwLDAsOTAsNTYsMCwxMDAsCisgICAgNTMsMCwxMDAsOTUsMCwxMDAsNTMsMCwxMDAsOTYsMCwxMDEsNTYsMCwxMDAsOTcsCisgICAgMCwxMDAsOTgsMCwxMzIsMSwyLDkwLDU3LDAsMTAwLDUzLDAsMTAwLDUzLDAsCisgICAgMTAwLDk5LDAsMTAwLDEwMCwwLDEzMiwyLDAsOTAsNTgsMCw3MSwxMDAsMTAxLDAsCisgICAgMTAwLDEwMiwwLDEzMiwwLDAsMTAwLDEwMiwwLDEzMSwyLDAsOTAsNTksMCw3MSwKKyAgICAxMDAsMTAzLDAsMTAwLDEwNCwwLDEzMiwwLDAsMTAwLDEwNCwwLDEzMSwyLDAsOTAsCisgICAgNjAsMCw3MSwxMDAsMTA1LDAsMTAwLDEwNiwwLDEzMiwwLDAsMTAwLDEwNiwwLDEzMSwKKyAgICAyLDAsOTAsNjEsMCw3MSwxMDAsMTA3LDAsMTAwLDEwOCwwLDEzMiwwLDAsMTAwLAorICAgIDEwOCwwLDEzMSwyLDAsOTAsNjIsMCw3MSwxMDAsMTA5LDAsMTAwLDExMCwwLDEzMiwKKyAgICAwLDAsMTAwLDExMCwwLDEzMSwyLDAsOTAsNjMsMCw3MSwxMDAsMTExLDAsMTAwLAorICAgIDExMiwwLDEzMiwwLDAsMTAwLDExMiwwLDEwMSw2MywwLDEzMSwzLDAsOTAsNjQsCisgICAgMCw3MSwxMDAsMTEzLDAsMTAwLDExNCwwLDEzMiwwLDAsMTAwLDExNCwwLDEzMSwyLAorICAgIDAsOTAsNjUsMCw3MSwxMDAsMTE1LDAsMTAwLDExNiwwLDEzMiwwLDAsMTAwLDExNiwKKyAgICAwLDEwMSw2NSwwLDEwMSw2NCwwLDEzMSw0LDAsOTAsNjYsMCw3MSwxMDAsMTE3LAorICAgIDAsMTAwLDExOCwwLDEzMiwwLDAsMTAwLDExOCwwLDEwMSw2NSwwLDEwMSw2MywwLAorICAgIDEzMSw0LDAsOTAsNjcsMCwxMDMsMCwwLDkwLDY4LDAsNzEsMTAwLDExOSwwLAorICAgIDEwMCwxMjAsMCwxMzIsMCwwLDEwMCwxMjAsMCwxMzEsMiwwLDkwLDY5LDAsNzEsCisgICAgMTAwLDEyMSwwLDEwMCwxMjIsMCwxMzIsMCwwLDEwMCwxMjIsMCwxMzEsMiwwLDkwLAorICAgIDcwLDAsNzEsMTAwLDEyMywwLDEwMCwxMjQsMCwxMzIsMCwwLDEwMCwxMjQsMCwxMzEsCisgICAgMiwwLDkwLDcxLDAsNzEsMTAwLDEyNSwwLDEwMCwxMjYsMCwxMzIsMCwwLDEwMCwKKyAgICAxMjYsMCwxMzEsMiwwLDkwLDcyLDAsNzEsMTAwLDEyNywwLDEwMCwxMjgsMCwxMzIsCisgICAgMCwwLDEwMCwxMjgsMCwxMzEsMiwwLDkwLDczLDAsNzEsMTAwLDEyOSwwLDEwMCwKKyAgICAxMzAsMCwxMzIsMCwwLDEwMCwxMzAsMCwxMzEsMiwwLDkwLDc0LDAsMTAwLDEzMSwKKyAgICAwLDEwMCwxMzIsMCwxMzIsMCwwLDkwLDc1LDAsMTAwLDUzLDAsMTAwLDEzMywwLAorICAgIDEwMCwxMzQsMCwxMzIsMSwwLDkwLDc2LDAsMTAwLDEzNSwwLDEwMCwxMzYsMCwxMzIsCisgICAgMCwwLDkwLDc3LDAsMTAwLDEzNywwLDkwLDc4LDAsMTAxLDc4LDAsMTAwLDEzOCwKKyAgICAwLDIzLDkwLDc5LDAsMTAwLDEzOSwwLDEwMCwxNDAsMCwxMzIsMCwwLDkwLDgwLAorICAgIDAsMTAwLDE0MSwwLDEwMCwxNDIsMCwxMzIsMCwwLDkwLDgxLDAsMTAwLDUzLDAsCisgICAgMTAwLDgwLDAsMTAwLDE0MywwLDEwMCwxNDQsMCwxMzIsMiwwLDkwLDgyLDAsMTAwLAorICAgIDE0NSwwLDEwMCwxNDYsMCwxMzIsMCwwLDkwLDgzLDAsMTAwLDE0NywwLDEwMCwxNDgsCisgICAgMCwxMzIsMCwwLDkwLDg0LDAsMTAwLDE0OSwwLDEwMCwxNTAsMCwxMzIsMCwwLAorICAgIDkwLDg1LDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAyLDAsMCwxMDAsODAsMCwxMDAsCisgICAgMTUxLDAsMTAwLDE1MiwwLDEzMiw0LDAsOTAsODYsMCwxMDAsMTUzLDAsMTAwLDE1NCwKKyAgICAwLDEzMiwwLDAsOTAsODcsMCwxMDAsMTU1LDAsMTAwLDE1NiwwLDEzMiwwLDAsCisgICAgOTAsODgsMCwxMDAsMTU3LDAsMTAwLDE1OCwwLDEzMiwwLDAsOTAsODksMCwxMDAsCisgICAgNTMsMCw4Myw0MSwxNjAsOTcsODMsMSwwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LAorICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LAorICAgIDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsCisgICAgMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCwKKyAgICA5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwKKyAgICAzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LAorICAgIDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsCisgICAgMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwKKyAgICAxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsCisgICAgMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LAorICAgIDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLAorICAgIDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLAorICAgIDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksCisgICAgMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LAorICAgIDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDIxOCwzLDExOSwKKyAgICAxMDUsMTEwLDIxOCw2LDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMjE4LDYsMTAwLDk3LDExNCwxMTksCisgICAgMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLDEwNiwKKyAgICAxLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywwLAorICAgIDEwMCwyLDAsMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDEsNCw3OCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDgzLDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMSwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMDcsNiwwLDgzLDQxLDIsMTIyLDUzLDg0LDExNCwxMTcsMTAxLDMyLAorICAgIDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwKKyAgICAxMTYsMzIsOTgsMTAxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LAorICAgIDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsCisgICAgMTE1LDEyLDAsMCwwLDgwLDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LAorICAgIDc1LDQxLDIsMjE4LDMsOTUsMTExLDExNSw5MCw3LDEwMSwxMTAsMTE4LDEwNSwxMTQsMTExLAorICAgIDExMCwxNjksMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwyNTAsMjksNjAsCisgICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKKyAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMjE4LDExLDk1LDExNCwKKyAgICAxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDMwLDAsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMiwxMjIsMzcsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsCisgICAgMTIwLDk1LDk5LDk3LDExNSwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LAorICAgIDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDk5LDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsODMsMCwwLDAsCisgICAgMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Myw4NCwxMTQsMTE3LAorICAgIDEwMSwzMiwxMDUsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LAorICAgIDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LAorICAgIDk3LDExNSwxMDEsNDUsMTA1LDExMCwxMTUsMTAxLDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsCisgICAgMTIxLDQ2LDcwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw2LDAsMCwKKyAgICAwLDM0LDAsMCwwLDExNSwyLDAsMCwwLDAsMiw0MSw0LDIxOCwzLAorICAgIDExNSwxMjEsMTE1LDIxOCw4LDExMiwxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwyMTgsMTAsMTE1LAorICAgIDExNiw5NywxMTQsMTE2LDExNSwxMTksMTA1LDExNiwxMDQsMjE4LDI3LDk1LDY3LDY1LDgzLDY5LAorICAgIDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LAorICAgIDg0LDcwLDc5LDgyLDc3LDgzLDQxLDEsMTE0LDYsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDEwOSwKKyAgICA5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDI4LDAsCisgICAgMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LDQsMTIsMywxMTQsCisgICAgMTEsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDEsMCw2NCwxMDYsMSwwLDEwMCwyLAorICAgIDAsMTAwLDMsMCwxMzEsMiwwLDgzLDQxLDQsMTIyLDQyLDY3LDExMSwxMTAsMTE4LAorICAgIDEwMSwxMTQsMTE2LDMyLDk3LDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsCisgICAgMTAxLDEwMywxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLAorICAgIDExMCwxMDAsMTA1LDk3LDExMCw0NiwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsMywKKyAgICAwLDIzMyw0LDAsMCwwLDIxOCw2LDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQxLDIsCisgICAgMjE4LDMsMTA1LDExMCwxMTYsMjE4LDgsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsCisgICAgMSwyMTgsMSwxMjAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDcsOTUsMTE5LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwwLDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDIsMTE0LDE3LDAsMCwwLDk5LDEsMCwwLAogICAgIDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTE1LDIxLDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEzMSwwLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTI0LDAsCi0gICAgMCwxMDAsMSwwLDEzMSwyLDAsODMsNDAsMiwwLDAsMCwxMTcsMzAsMCwKLSAgICAwLDAsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAwLDEwNSwxMTQsNDYsCi0gICAgMTA1LDAsNjQsMCwwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTUsCi0gICAgMTExLDExNSwxMTcsNiwwLDAsMCwxMDMsMTAxLDExNiw5OSwxMTksMTAwLDExNywxOCwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwKLSAgICAxMTYsMTIxLDExMiwxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNCwwLAotICAgIDAsMCwxMTUsNiwwLDAsMCwwLDIsNiwxLDE1LDEsMTE3LDExLDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAwLDEwNSwxMTQsMTA1LDE4MiwxLAotICAgIDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNywKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTkyLDAsMCwwLDEwMCwxLDAsMTA2LAotICAgIDAsMCwxMjQsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEzMSwyLAotICAgIDAsMTI1LDMsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMTYsMiwwLAotICAgIDEwNiw0LDAsMTE2LDIsMCwxMDYsNSwwLDY2LDExNiwyLDAsMTA2LDYsMCwKLSAgICA2NiwxMjQsMiwwLDEwMCwyLDAsNjQsMTMxLDMsMCwxMjUsNCwwLDEyMSw2MCwKLSAgICAwLDExNiw3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCwzLDAsMTMxLDIsMCwKLSAgICAxNDMsMjAsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDksMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMSw4NywxMDAsNCwwLDgxLDg4LDExNiwyLDAsMTA2LDEwLDAsMTI0LAotICAgIDMsMCwxMjQsMCwwLDEzMSwyLDAsMSw4NywxMTAsNTksMCw0LDExNiwxMSwKLSAgICAwLDEwNywxMCwwLDExNCwxODcsMCwxLDEsMSwxMjEsMTcsMCwxMTYsMiwwLAotICAgIDEwNiwxMiwwLDEyNCwzLDAsMTMxLDEsMCwxLDg3LDExMCwxOCwwLDQsMTE2LAotICAgIDExLDAsMTA3LDEwLDAsMTE0LDE3OSwwLDEsMSwxLDg5LDExMCwxLDAsODgsCi0gICAgMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsNDAsNSwwLDAsCi0gICAgMCwxMTcsMTYyLDAsMCwwLDY2LDEwMSwxMTUsMTE2LDQ1LDEwMSwxMDIsMTAyLDExMSwxMTQsCi0gICAgMTE2LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDExOSwxMTQsCi0gICAgMTA1LDExNiwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDk3LDExNiwxMTEsMTA5LDEwNSw5OSw5NywxMDgsMTA4LDEyMSw0NiwxMCwzMiwKLSAgICAzMiwzMiwzMiw2NiwxMDEsMzIsMTEyLDExNCwxMDEsMTEyLDk3LDExNCwxMDEsMTAwLDMyLDExNiwKLSAgICAxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiw5NywzMiw3MCwxMDUsMTA4LDEwMSw2OSwKLSAgICAxMjAsMTA1LDExNSwxMTYsMTE1LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTAyLDMyLDk5LDExMSwKLSAgICAxMTAsOTksMTE3LDExNCwxMTQsMTAxLDExMCwxMTYsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsMTAzLAotICAgIDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDEwMSwxMDksMTEyLAotICAgIDExMSwxMTQsOTcsMTE0LDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMTYsCi0gICAgMTE2LDEwMSwxMDksMTEyLDExNiwxMDEsMTAwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsCi0gICAgMTIzLDEyNSwxMDUsMTgyLDEsMCwwLDExNywyLDAsMCwwLDExOSw5OCw3OCw0MCwKLSAgICAxMywwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywKLSAgICAyLDAsMCwwLDEwNSwxMDAsMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNCwKLSAgICAwLDAsMCwxMTEsMTEyLDEwMSwxMTAsMTE3LDYsMCwwLDAsNzksOTUsNjksODgsCi0gICAgNjcsNzYsMTE3LDcsMCwwLDAsNzksOTUsNjcsODIsNjksNjUsODQsMTE3LDgsCi0gICAgMCwwLDAsNzksOTUsODcsODIsNzksNzgsNzYsODksMTE3LDMsMCwwLDAsCi0gICAgOTUsMTA1LDExMSwxMTcsNiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3Myw3OSwxMTcsNSwKLSAgICAwLDAsMCwxMTksMTE0LDEwNSwxMTYsMTAxLDExNyw3LDAsMCwwLDExNCwxMDEsMTEyLAotICAgIDEwOCw5Nyw5OSwxMDEsMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw2LDAsMCwwLDExNywxMTAsMTA4LDEwNSwxMTAsMTA3LDQwLDYsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LAotICAgIDExNiw5NywxMTcsNCwwLDAsMCwxMDksMTExLDEwMCwxMDEsMTE3LDgsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTE2LDEwOSwxMTIsMTE3LDIsMCwwLDAsMTAyLDEwMCwxMTcsCi0gICAgNCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTMsMCwwLDAsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSwKLSAgICA5NywxMTYsMTExLDEwOSwxMDUsOTksMTIxLDAsMCwwLDExNSwyNiwwLDAsMCwwLAotICAgIDUsMjQsMSw5LDEsMzMsMSwzLDMsMjEsMSwxOSwxLDIwLDEsMTMsCi0gICAgMSwzLDEsMTcsMSwxMywxLDUsMSwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsNywwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTUsMCwwLDAsMTIwLDY5LDAsMTAwLDEsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTAwLDQsMCwxMDMsNCwwLDY4LDkzLDQ5LDAsMTI1LDIsMCwxMTYsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMzEsMiwwLDExNCwxOSwwLDExNiwxLDAsCi0gICAgMTI0LDAsMCwxMjQsMiwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwKLSAgICAyLDAsMTMxLDMsMCwxLDExMywxOSwwLDExMywxOSwwLDg3LDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEsCi0gICAgMTAwLDUsMCw4Myw0MCw2LDAsMCwwLDExNyw0NywwLDAsMCw4MywxMDUsCisgICAgMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLAorICAgIDEsMCwxMzEsMiwwLDgzLDQxLDIsMTIyLDQ3LDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsCisgICAgMTE2LDMyLDUyLDMyLDk4LDEyMSwxMTYsMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwOCwxMDUsMTE2LAorICAgIDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsMzIsMTE2LDExMSwzMiw5NywxMTAsCisgICAgMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LDQ2LDExNCwxMywwLDAsMCw0MSwyLAorICAgIDExNCwxNCwwLDAsMCwyMTgsMTAsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLAorICAgIDExNSw0MSwxLDkwLDksMTA1LDExMCwxMTYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw3LDk1LAorICAgIDExNCw5NSwxMDgsMTExLDExMCwxMDMsNDUsMCwwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICAyLDExNCwxOSwwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwzLDAsMCwwLDcxLDAsMCwwLDExNSwyNiwwLDAsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI0LAorICAgIDAsMCw2OCwxMzEsMSwwLDEzMSwxLDAsODMsNDEsMywxMjIsMzEsODIsMTAxLAorICAgIDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LAorICAgIDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNiwxMTEsMTA1LDExMCw0MCw0MSw0Niw5OSwxLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDgzLDAsCisgICAgMCwwLDExNSwzNywwLDAsMCwxMDMsMCwwLDEyNCwwLDAsOTMsMjcsMCwKKyAgICAxMjUsMSwwLDEyNCwxLDAsMTE0LDYsMCwxMjQsMSwwLDEwNiwwLDAsMTE2LAorICAgIDEsMCwxMzEsMSwwLDE0NSwyLDAsMTEzLDYsMCw4MywxMTQsNCwwLDAsCisgICAgMCw0MSwyLDIxOCw2LDExNCwxMTUsMTE2LDExNCwxMDUsMTEyLDIxOCwxNSwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDQxLDIsMjE4LDIsCisgICAgNDYsNDgsMjE4LDQsMTEyLDk3LDExNCwxMTYsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjUwLDEwLDYwLDEwOCwxMDUsMTE1LDExNiw5OSwxMTEsCisgICAgMTA5LDExMiw2Miw1MiwwLDAsMCwxMTUsMiwwLDAsMCw5LDEsMTIyLDMwLAorICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LAorICAgIDEwOCwxMTUsNjIsNDYsNjAsMTA4LDEwNSwxMTUsMTE2LDk5LDExMSwxMDksMTEyLDYyLDQxLDIsCisgICAgMjE4LDgsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMjE4LDQsMTA2LDExMSwxMDUsMTEwLAorICAgIDQxLDEsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDExMiw5NywxMTQsMTE2LDExNSwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDUwLDAsMCwwLDExNSw0LDAsCisgICAgMCwwLDAsMiwxNSwxLDExNCwyOCwwLDAsMCw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxMzQsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTAwLDEsCisgICAgMCwxMDcsMiwwLDExNCw1MiwwLDEyNCwwLDAsMTA2LDIsMCwxMTYsMywwLAorICAgIDEzMSwxLDAsOTIsMywwLDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwKKyAgICAxLDAsMTI0LDMsMCwxMDIsMiwwLDgzLDEyMCw2OSwwLDExNiw0LDAsMTI0LAorICAgIDAsMCwxMzEsMSwwLDY4LDkzLDU1LDAsMTI1LDQsMCwxMjQsNCwwLDExNiwKKyAgICAxLDAsMTA3LDYsMCwxMTQsNjUsMCwxMjQsMCwwLDEwNiw1LDAsMTI0LDQsCisgICAgMCwxMDAsMiwwLDEwMCwxLDAsMTMxLDEsMSw5MiwyLDAsMTI1LDEsMCwKKyAgICAxMjUsMywwLDEyNCwxLDAsMTI0LDMsMCwxMDIsMiwwLDgzLDExMyw2NSwwLAorICAgIDg3LDEwMCwzLDAsMTI0LDAsMCwxMDIsMiwwLDgzLDQxLDQsMTIyLDMyLDgyLAorICAgIDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLAorICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDIzMywKKyAgICAxLDAsMCwwLDkwLDgsMTA5LDk3LDEyMCwxMTUsMTEyLDEwOCwxMDUsMTE2LDIxOCwwLAorICAgIDQxLDYsMjE4LDMsMTA4LDEwMSwxMTAsMTE0LDIxLDAsMCwwLDIxOCwxMCwxMTQsMTEyLAorICAgIDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTQsMjUsMCwwLDAsMjE4LDgsMTE0LAorICAgIDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLDEwMCwyMTgsNiwxMTQsMTE1LDExMiwxMDgsMTA1LDExNiw0MSwKKyAgICA1LDIxOCw0LDExMiw5NywxMTYsMTA0LDkwLDUsMTAyLDExNCwxMTEsMTEwLDExNiwyMTgsMSwKKyAgICA5NSwyMTgsNCwxMTYsOTcsMTA1LDEwOCwxMTQsMTYsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsNTYsMCwwLDAsMTE1LDE2LDAsMCwKKyAgICAwLDAsMiwxOCwxLDI0LDEsMTAsMSwxOSwxLDEyLDEsMjcsMSwxNCwKKyAgICAxLDExNCwzOCwwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwKKyAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDgzLDQxLDEsMTIyLAorICAgIDEyNiw4MywxMTYsOTcsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDc3LDk3LDEwMCwxMDEsMzIsOTcsMzIsMTE1LDEwMSwxMTIsOTcsCisgICAgMTE0LDk3LDExNiwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsCisgICAgMzIsMTA5LDk3LDEwNywxMDEsMzIsMTA1LDExNiwzMiwxMDEsOTcsMTE1LDEwNSwxMDEsMTE0LDMyLAorICAgIDExNiwxMTEsMzIsMTExLDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTEwLDMyLDEwMSwKKyAgICAxMjAsMTEyLDEwMSwxMTQsMTA1LDEwOSwxMDEsMTEwLDExNiwxMTUsMTAsMzIsMzIsMzIsMzIsNDAsCisgICAgMTAxLDQ2LDEwMyw0NiwzMiw5OSw5Nyw5OSwxMDQsMTAxLDMyLDExNSwxMTYsOTcsMTE2LDMyLAorICAgIDExNCwxMDEsMTE1LDExNywxMDgsMTE2LDExNSw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw0MSwKKyAgICAyLDExNCwzLDAsMCwwLDkwLDQsMTE1LDExNiw5NywxMTYsNDEsMSwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDEwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDY4LDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsNywxMTQsMzksMCwwLDAsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDU4LDAsMCwwLDEyMSwxNiwwLDExNiwwLDAsMTI0LDAsCisgICAgMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDIyLDAsNCwxMTYsMSwwLDEwNywKKyAgICAxMCwwLDExNCw0MCwwLDEsMSwxLDEwMCwxLDAsODMsODksMTEwLDEsMCwKKyAgICA4OCwxMjQsMiwwLDEwNiwyLDAsMTAwLDIsMCw2NCwxMjQsMSwwLDEwNywyLAorICAgIDAsODMsNDEsMywxMjIsNDksODQsMTAxLDExNSwxMTYsMzIsMTE5LDEwNCwxMDEsMTE2LDEwNCwKKyAgICAxMDEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksMTExLDEwMCwKKyAgICAxMDEsMzIsMTE2LDEyMSwxMTIsMTAxLDQ2LDcwLDEwNSwwLDI0MCwwLDAsNDEsMywxMTQsCisgICAgMzksMCwwLDAsMjE4LDcsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDIxOCw3LDExNSwKKyAgICAxMTYsOTUsMTA5LDExMSwxMDAsMTAxLDQxLDMsMTE0LDM1LDAsMCwwLDIxOCw0LDEwOSwKKyAgICAxMTEsMTAwLDEwMSw5MCw5LDExNSwxMTYsOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTgsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsCisgICAgMTAxLDc4LDAsMCwwLDExNSwxMCwwLDAsMCwwLDIsMywxLDE2LDEsCisgICAgMTMsMSw5LDEsMTE0LDQzLDAsMCwwLDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAorICAgIDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsCisgICAgNDEsMiwxMjIsMzEsODIsMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwKKyAgICAxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDQ2LDEwNSwwLDEyOCwwLDAsNDEsMSwxMTQsNDMsMCwwLDAsNDEsCisgICAgMSwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDEyLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLAorICAgIDEwNSwxMDgsMTAxLDg3LDAsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsNDQsCisgICAgMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgMywwLDAsMCw2NywwLDAsMCwxMTUsMzQsMCwwLDAsMTI0LDAsMCwKKyAgICAxMTUsMjEsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMCwwLDExMCwKKyAgICAwLDAsMTE2LDIsMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwKKyAgICAyLDEyMiwzMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCwKKyAgICA0NiwxMDUsMCw2NCwwLDAsNDEsMywxMTQsMywwLDAsMCwyMTgsNiwxMDMsCisgICAgMTAxLDExNiw5OSwxMTksMTAwLDExNCw0MywwLDAsMCw0MSwxLDExNCwzNSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCw5MiwwLDAsCisgICAgMCwxMTUsNiwwLDAsMCwwLDIsNiwxLDE1LDEsMTE0LDQ2LDAsMCwKKyAgICAwLDEwNSwxODIsMSwwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsCisgICAgMCwwLDAsMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwKKyAgICAxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMzEsMiwwLDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLAorICAgIDAsMTE2LDIsMCwxMDYsNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwKKyAgICAwLDEwNiw2LDAsNjYsMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LAorICAgIDQsMCwxMjEsNjAsMCwxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywKKyAgICAwLDEzMSwyLDAsMTQzLDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsCisgICAgMTI0LDEsMCwxMzEsMSwwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLAorICAgIDEwNiwxMCwwLDEyNCwzLDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LAorICAgIDAsNCwxMTYsMTEsMCwxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LAorICAgIDAsMTE2LDIsMCwxMDYsMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsCisgICAgMTgsMCw0LDExNiwxMSwwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwKKyAgICAxMTAsMSwwLDg4LDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLAorICAgIDQxLDUsMTIyLDE2Miw2NiwxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LDExNiwzMiwKKyAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LDEwNSwxMTYsCisgICAgMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsMTE2LDEwNCwKKyAgICAzMiw5NywxMTYsMTExLDEwOSwxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsMzIsMzIsCisgICAgMzIsNjYsMTAxLDMyLDExMiwxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsMTExLDMyLAorICAgIDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwKKyAgICAxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsMTEwLDk5LAorICAgIDExNywxMTQsMTE0LDEwMSwxMTAsMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsCisgICAgMTAyLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwxMTEsMTE0LAorICAgIDk3LDExNCwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LDExNiwxMDEsCisgICAgMTA5LDExMiwxMTYsMTAxLDEwMCw0NiwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsMTA1LDE4MiwxLAorICAgIDAsMCw5MCwyLDExOSw5OCw3OCw0MSwxMywyMTgsNiwxMDIsMTExLDExNCwxMDksOTcsCisgICAgMTE2LDIxOCwyLDEwNSwxMDAsMTE0LDMsMCwwLDAsOTAsNCwxMTEsMTEyLDEwMSwxMTAsCisgICAgOTAsNiw3OSw5NSw2OSw4OCw2Nyw3Niw5MCw3LDc5LDk1LDY3LDgyLDY5LDY1LAorICAgIDg0LDkwLDgsNzksOTUsODcsODIsNzksNzgsNzYsODksMjE4LDMsOTUsMTA1LDExMSwKKyAgICAyMTgsNiw3MCwxMDUsMTA4LDEwMSw3Myw3OSwyMTgsNSwxMTksMTE0LDEwNSwxMTYsMTAxLDIxOCwKKyAgICA3LDExNCwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTE0LDQwLDAsMCwwLDkwLDYsMTE3LAorICAgIDExMCwxMDgsMTA1LDExMCwxMDcsNDEsNiwxMTQsMzUsMCwwLDAsMjE4LDQsMTAwLDk3LAorICAgIDExNiw5NywxMTQsNDIsMCwwLDAsOTAsOCwxMTIsOTcsMTE2LDEwNCw5NSwxMTYsMTA5LAorICAgIDExMiw5MCwyLDEwMiwxMDAsMjE4LDQsMTAyLDEwNSwxMDgsMTAxLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMyw5NSwxMTksMTE0LDEwNSwKKyAgICAxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSw5OSwwLDAsMCwxMTUsMjYsMCwKKyAgICAwLDAsMCw1LDI0LDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwKKyAgICAyMCwxLDEzLDEsMywxLDE3LDEsMTMsMSw1LDEsMTE0LDU1LDAsMCwKKyAgICAwLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDcsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLAorICAgIDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwKKyAgICAwLDEyNSwyLDAsMTE2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwKKyAgICAxMTQsMTksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwKKyAgICAxLDAsMTI0LDIsMCwxMzEsMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsCisgICAgMTksMCw4NywxMjQsMCwwLDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwKKyAgICAzLDAsMTMxLDEsMCwxLDEwMCw1LDAsODMsNDEsNiwxMjIsNDcsODMsMTA1LAogICAgIDEwOSwxMTIsMTA4LDEwMSwzMiwxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwKICAgICAxMDIsMTExLDExNCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsCi0gICAgMTAwLDk3LDExNiwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDc4LDQwLDUsMCwwLDAsMTE3LDcsMCwwLAotICAgIDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwxMTcsNiwwLAotICAgIDAsMCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDQwLDMsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTEwLDEwMSwxMTksMTE3LDMsMCwwLDAsMTExLDEwOCwxMDAsMTE3LDcsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTIsMTA4LDk3LDk5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDE0MywKLSAgICAwLDAsMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLDMyLDEsCi0gICAgMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTI0LDAsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDc1LDAsMCwwLDY3LDExNCwKLSAgICAxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTAxLDExMCwxMTYsMTAxLDExNCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTYsMTIxLDExMiwxMDEsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSw0MCwKLSAgICAxLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMCwxMDEsCi0gICAgMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE1NCwwLDAsMCwxMTUsMiwwLDAsCi0gICAgMCwwLDYsMTE3LDEwLDAsMCwwLDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw3OCw0MCwzLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsCi0gICAgOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLAotICAgIDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDE3MSwwLAotICAgIDAsMCwxMTUsMiwwLDAsMCwxNiwxLDExNywxNCwwLDAsMCw5NSw2OCwKLSAgICAxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwKLSAgICAwLDExNSw4NiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLAotICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLAotICAgIDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsCi0gICAgMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLAotICAgIDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsCi0gICAgMTEsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTIsMCw4Myw0MCwxMywwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksCi0gICAgMTA3LDExNywxNjksMCwwLDAsNjUsMzIsMTE0LDEwMSw5OSwxMTcsMTE0LDExNSwxMDUsMTE4LAotICAgIDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKLSAgICA5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMTUsMzIsOTcsCi0gICAgOTgsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMzIsMTAwLDEwMSwKLSAgICA5NywxMDAsMTA4LDExMSw5OSwxMDcsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSw0NiwxMDMsCi0gICAgNDYsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwzMiw0OSwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLAotICAgIDEwMywzMiwxMTYsMTExLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiwKLSAgICA2NSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNjYsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LAotICAgIDExNCwxMDEsOTcsMTAwLDMyLDUwLDMyLDExNiwxMTQsMTIxLDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE2LDk3LDEwNywxMDEsMzIsMTA4LDExMSw5OSwxMDcsMTE1LDMyLAotICAgIDY2LDMyLDExNiwxMDQsMTAxLDExMCwzMiw2NSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw5OSwKKyAgICAxMDAsOTcsMTE2LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NiwyMTgsMTAsOTUsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMjE4LDgsOTUsOTUsMTEwLDk3LDEwOSwKKyAgICAxMDEsOTUsOTUsMjE4LDEyLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LAorICAgIDk1LDIxOCw3LDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsNzgsNDEsNSwyMTgsNywxMDQsCisgICAgOTcsMTE1LDk3LDExNiwxMTYsMTE0LDIxOCw3LDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDIxOCwKKyAgICA3LDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDIxOCw4LDk1LDk1LDEwMCwxMDUsOTksMTE2LAorICAgIDk1LDk1LDIxOCw2LDExNywxMTIsMTAwLDk3LDExNiwxMDEsNDEsMyw5MCwzLDExMCwxMDEsCisgICAgMTE5LDkwLDMsMTExLDEwOCwxMDAsMTE0LDUyLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw1LDk1LDExOSwxMTQsOTcsCisgICAgMTEyLDEyMSwwLDAsMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLAorICAgIDMyLDEsMTE0LDY1LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwKKyAgICAwLDExNiwwLDAsMTE2LDEsMCwxMzEsMSwwLDEyNCwwLDAsMTMxLDEsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDIsMjE4LDQsMTE2LDEyMSwxMTIsMTAxLDExNCw3LDAsMCwKKyAgICAwLDQxLDEsMjE4LDQsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDExLDk1LDExMCwxMDEsMTE5LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDEyOSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsCisgICAgMTE0LDY4LDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDU4LDAsMCwwLDEwMSwKKyAgICAwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLAorICAgIDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwKKyAgICAwLDAsOTAsNiwwLDEwMCw4LDAsODMsNDEsOSwyMTgsMTMsOTUsNzcsOTcsCisgICAgMTEwLDk3LDEwMywxMDEsODIsMTAxLDEwOCwxMTEsOTcsMTAwLDEyMiw2Myw3Nyw5NywxMTAsOTcsCisgICAgMTAzLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLAorICAgIDMyLDk5LDEwOCwxMDEsOTcsMTEwLDQ1LDExNywxMTIsMzIsMTExLDEwMiwzMiwxMTUsMTIxLDExNSwKKyAgICA0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsNDEsNDYsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMCwKKyAgICAwLDgzLDQxLDEsNzgsNDEsMSwyMTgsNSw5NSwxMTAsOTcsMTA5LDEwMSw0MSwyLAorICAgIDIxOCw0LDExNSwxMDEsMTA4LDEwMiwxMTQsNjcsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDk1LDE0MSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLAorICAgIDIyLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSwKKyAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTA2LDIsMCwxMDcsNiwwLAorICAgIDEyNCwwLDAsOTUsMywwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSw0LDExNCwKKyAgICA3MCwwLDAsMCwxMTQsNywwLDAsMCwyMTgsNywxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsMjE4LDEwLDk1LDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCw0MSwxLAorICAgIDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsOSw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDE0NCwKKyAgICAwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc3LDk3LDExMCwKKyAgICA5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsCisgICAgMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDEyLDAsMCwwLDcxLDAsMCwwLDExNSw4MCwwLDAsMCwxMTYsMCwwLAorICAgIDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDEyNCwxLDAsNjgsMTMxLDEsMCwKKyAgICAxMzEsMSwwLDExNCw3NiwwLDEyNCwwLDAsMTA2LDEsMCwxMiwxMTQsNzYsMCwKKyAgICAxMjEsMTcsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDYxLAorICAgIDg3LDExMyw3NiwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsNzIsMCwxLDEsCisgICAgMSw4OSwxMTMsNzYsMCw4OCwxMTAsMCwwLDEwMCwwLDAsODMsNDEsMyw3OCwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwKKyAgICAwLDExNSwwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLAorICAgIDEyNSwxLDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwxMTMsMywKKyAgICAwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwKKyAgICAyMiwwLDAsMCwyMTgsMyw5NywxMTQsMTAzLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDI1MCw5LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCisgICAgMTEyLDExNCw2MiwxNDgsMCwwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiw0MSwKKyAgICA5NSw3Nyw5NywxMTAsOTcsMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsCisgICAgMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwKKyAgICA2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsNDEsNiwyMTgsMyw5NywxMTAsMTIxLAorICAgIDExNCw3NCwwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LAorICAgIDcwLDAsMCwwLDIxOCw4LDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDQxLDIsCisgICAgMTE0LDcxLDAsMCwwLDIxOCw0LDk3LDExNCwxMDMsMTE1LDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwMSwxMjAsCisgICAgMTA1LDExNiw5NSw5NSwxNDcsMCwwLDAsMTE1LDEwLDAsMCwwLDAsMSwzNSwKKyAgICAxLDMsMSwxNywxLDEzLDEsMTIyLDIyLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLAorICAgIDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsCisgICAgNDEsNywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsCisgICAgMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLDExNCw3NSwwLDAsMCwKKyAgICAxMTQsODEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDY5LDAsMCwwLDEzNywwLAorICAgIDAsMCwxMTUsOCwwLDAsMCwxMiwyLDYsMiwxMiwzLDEyLDMsMTE0LAorICAgIDY5LDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDEsMCwwLDAsNjQsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMSwwLAorICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsODMsNDEsMiwKKyAgICAyMTgsMTQsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCisgICAgNzgsNDEsMywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsODIsMCwwLDAsMTYyLDAsMCwwLDExNSwKKyAgICAyLDAsMCwwLDEyLDEsMTE0LDgyLDAsMCwwLDk5LDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsCisgICAgMTE1LDgyLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwKKyAgICAwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLAorICAgIDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLAorICAgIDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCw4LDAsMTAwLDksCisgICAgMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLAorICAgIDkwLDgsMCwxMDAsMTIsMCw4Myw0MSwxMywyMTgsMTEsOTUsNzcsMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDEyMiwxNjksNjUsMzIsMTE0LDEwMSw5OSwxMTcsMTE0LDExNSwKKyAgICAxMDUsMTE4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCisgICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMTUsCisgICAgMzIsOTcsOTgsMTA4LDEwMSwzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMzIsCisgICAgMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSwKKyAgICA0NiwxMDMsNDYsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwzMiw0OSwzMiwxMTYsMTE0LDEyMSwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTYsMTExLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LAorICAgIDExNSwzMiw2NSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNjYsNDQsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDMyLDUwLDMyLDExNiwxMTQsMTIxLDEwNSwxMTAsMTAzLDMyLAorICAgIDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE2LDk3LDEwNywxMDEsMzIsMTA4LDExMSw5OSwxMDcsCisgICAgMTE1LDMyLDY2LDMyLDExNiwxMDQsMTAxLDExMCwzMiw2NSw0MSw0NiwxMCwzMiwzMiwzMiwKKyAgICAzMiw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw3MCwwLDAsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTMxLDAsMCwxMjQsMCwwLDk1LDIsMCwxMTYsMCwwLDEwNiwxLDAsCisgICAgMTMxLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCisgICAgNCwwLDEwMCwwLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDEsMCwxMjQsMCwKKyAgICAwLDk1LDYsMCwxMDAsMSwwLDEyNCwwLDAsOTUsNywwLDEwMCwwLDAsCisgICAgODMsNDEsMiw3OCwyMzMsMCwwLDAsMCw0MSw4LDIxOCw3LDk1LDExNiwxMDQsCisgICAgMTE0LDEwMSw5NywxMDAsOTAsMTMsOTcsMTA4LDEwOCwxMTEsOTksOTcsMTE2LDEwMSw5NSwxMDgsCisgICAgMTExLDk5LDEwNywyMTgsNCwxMDgsMTExLDk5LDEwNywyMTgsNiwxMTksOTcsMTA3LDEwMSwxMTcsCisgICAgMTEyLDExNCw2NywwLDAsMCwyMTgsNSwxMTEsMTE5LDExMCwxMDEsMTE0LDIxOCw1LDk5LAorICAgIDExMSwxMTcsMTEwLDExNiwyMTgsNywxMTksOTcsMTA1LDExNiwxMDEsMTE0LDExNSw0MSwyLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDE3MiwwLDAsCisgICAgMCwxMTUsMTIsMCwwLDAsMCwxLDE1LDEsMTUsMSw5LDEsOSwxLAorICAgIDksMSwxMjIsMjAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LAorICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsNCwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLAorICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLAorICAgIDAsMTA2LDIsMCwxMjUsMiwwLDEyMCw1OSwwLDExNiwzLDAsMTA2LDQsMCwKKyAgICAxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwwLDAsMTA3LAorICAgIDgsMCwxMTQsNTUsMCwxMDAsMSwwLDgzLDEyNCwzLDAsMTA2LDIsMCwxMjUsCisgICAgMiwwLDEyNCwyLDAsMTI0LDEsMCwxMDcsMiwwLDExNCwyNCwwLDEwMCwyLAorICAgIDAsODMsMTEzLDI0LDAsMTAwLDAsMCw4Myw0MSwzLDc4LDcwLDg0LDQxLDUsCisgICAgMTE0LDg1LDAsMCwwLDIxOCw5LDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsCisgICAgMTE0LDg4LDAsMCwwLDIxOCwxMiw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMywKKyAgICA5NSwxMTEsMTEwLDIxOCwzLDEwMywxMDEsMTE2LDQxLDQsMTE0LDcxLDAsMCwwLDIxOCwKKyAgICAyLDEwOSwxMDEsMjE4LDMsMTE2LDEwNSwxMDAsMTE0LDg2LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiwxMDQsOTcsCisgICAgMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDE4MCwwLDAsMCwxMTUsMTgsCisgICAgMCwwLDAsMCwyLDEyLDEsOSwxLDMsMSwxNSwxLDEyLDEsNCwKKyAgICAxLDksMSwxMiwxLDEyMiwyNCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKKyAgICA5OSwxMDcsNDYsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxNywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjE0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsCisgICAgMCwwLDEyNSwxLDAsMTI0LDAsMCwxMTYsMiwwLDEyNCwxLDAsNjAsMTIyLAorICAgIDE3NywwLDEyMCwxNzAsMCwxMjQsMCwwLDEwNiwzLDAsMTQzLDEzMCwwLDEsMTI0LAorICAgIDAsMCwxMDYsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTUsNjgsMCwxMjQsMCwKKyAgICAwLDEwNiw1LDAsMTI0LDEsMCwxMDcsMiwwLDExNCw5NiwwLDEyNCwxLDAsCisgICAgMTI0LDAsMCw5NSw1LDAsMTI0LDAsMCw0LDEwNiw0LDAsMTAwLDIsMCwKKyAgICA1NSwyLDk1LDQsMCwxMDAsMywwLDgzLDEyNCwwLDAsMTA2LDYsMCwxMzEsCisgICAgMCwwLDExNCwxMjcsMCwxMTYsNywwLDEwMCw0LDAsMTI0LDAsMCwyMiwxMzEsCisgICAgMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw4LDAsMTA2LDksCisgICAgMCwxMDAsNSwwLDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLDAsNCwxMDYsMTAsCisgICAgMCwxMDAsMiwwLDU1LDIsOTUsMTAsMCwxMTAsMCwwLDg3LDEwMCw2LDAsCisgICAgODEsODgsMTI0LDAsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsMCwxLDEyNCwKKyAgICAwLDAsMTA2LDgsMCwxMDYsMTEsMCwxMzEsMCwwLDEsMTEzLDI4LDAsODcsCisgICAgMTAwLDYsMCwxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLDYsMCw4Myw0MSwKKyAgICA3LDEyMiwxODUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNjUsOTksMTEzLDExNywKKyAgICAxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsCisgICAgMTExLDk5LDEwNyw0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwKKyAgICAxMTYsMTA1LDk3LDEwOCwzMiwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LAorICAgIDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw5NywzMiw5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwKKyAgICAxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzksMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSwKKyAgICA0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDk3LDEwOCwKKyAgICAxMTksOTcsMTIxLDExNSwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiw5NywxMTAsCisgICAgMTAwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsODQsMCwwLAorICAgIDAsMTE0LDI5LDAsMCwwLDg0LDEyMiwyMywxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LAorICAgIDEwNywzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDM3LDExNCwKKyAgICA3MCw3OCw0MSwxMiwxMTQsODUsMCwwLDAsMTE0LDkxLDAsMCwwLDExNCw5MiwKKyAgICAwLDAsMCwxMTQsODYsMCwwLDAsMTE0LDg5LDAsMCwwLDExNCw4OCwwLAorICAgIDAsMCwxMTQsOTYsMCwwLDAsMTE0LDgyLDAsMCwwLDExNCw4NywwLDAsCisgICAgMCwyMTgsNyw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNCw5MCwwLDAsMCwyMTgsCisgICAgNywxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw0MSwyLDExNCw3MSwwLDAsMCwxMTQsCisgICAgOTUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDk3LDAsMCwwLDE5MiwwLDAsMCwxMTUsMzIsMCwwLAorICAgIDAsMCw2LDEyLDEsMTAsMSwzLDEsMywxLDEwLDEsMzAsMSw5LAorICAgIDEsMTUsMSw0LDEsMTIsMSwxOSwxLDE4LDEsMjQsMiwxMywxLDIwLAorICAgIDIsMTIyLDE5LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NywKKyAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLAorICAgIDAsMCwwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSwxNjUsMCwwLDAsCisgICAgMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwKKyAgICAyLDAsMTQzLDEzOCwwLDEsMTI0LDAsMCwxMDYsMywwLDEyNCwxLDAsMTA3LAorICAgIDMsMCwxMTQsNTIsMCwxMTYsNCwwLDEwMCwxLDAsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDQsMCwKKyAgICAxMTUsNzMsMCwxMTYsNiwwLDEzMCwxLDAsMTI0LDAsMCw0LDEwNiw1LDAsCisgICAgMTAwLDMsMCw1NiwyLDk1LDUsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDIsCisgICAgMCwxMDcsMiwwLDExNCwxNTUsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMywwLAorICAgIDEyNCwwLDAsMTA2LDcsMCwxMTQsMTU1LDAsMTI0LDAsMCw0LDEwNiw3LDAsCisgICAgMTAwLDMsMCw1NiwyLDk1LDcsMCwxMjQsMCwwLDEwNiw4LDAsMTA2LDksCisgICAgMCwxMzEsMCwwLDEsMTEzLDE1NSwwLDExMCwwLDAsODcsMTAwLDAsMCw4MSwKKyAgICA4OCwxMDAsMCwwLDgzLDQxLDQsNzgsMTIyLDMxLDk5LDk3LDExMCwxMTAsMTExLDExNiwKKyAgICAzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LDExMywxMTcsCisgICAgMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDExNCw4NCwwLDAsMCwxMTQsMjksCisgICAgMCwwLDAsNDEsMTAsMTE0LDg1LDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsCisgICAgODYsMCwwLDAsMTE0LDg4LDAsMCwwLDIxOCwxMiw4MiwxMTcsMTEwLDExNiwxMDUsCisgICAgMTA5LDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDg5LDAsMCwwLDIxOCwxNCw2NSwxMTUsCisgICAgMTE1LDEwMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsOTAsMCwwLAorICAgIDAsMTE0LDg3LDAsMCwwLDExNCw5OCwwLDAsMCw0MSwyLDExNCw3MSwwLAorICAgIDAsMCwxMTQsOTUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDk4LDAsMCwwLDIxNywwLDAsMCwxMTUsCisgICAgMjIsMCwwLDAsMCwxLDEyLDEsMTAsMSwxNSwxLDE1LDEsMjEsMSwKKyAgICAxNSwxLDE1LDEsOSwxLDksMSwxNSwxLDEyMiwxOSw5NSw3NywxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDEsMCwxMTYsMiwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwKKyAgICAwLDgzLDQxLDIsNzgsMTIyLDIzLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAorICAgIDk5LDEwNyw0MCwxMjMsMzMsMTE0LDEyNSw0MSwzMiw5NywxMTYsMzIsMTIzLDEyNSw0MSwzLAorICAgIDExNCw0NywwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDQ4LDAsMCwwLDQxLAorICAgIDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSwyMzAsCisgICAgMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMCw5NSw3NywxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LAorICAgIDc4LDQxLDksMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwKKyAgICAwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsOTYsMCwwLAorICAgIDAsMTE0LDk3LDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsMTAxLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw4MywwLDAsMCwxNjYsMCwwLDAsMTE1LDEyLDAsCisgICAgMCwwLDEyLDQsNiwyLDEyLDgsMTIsMTIsMTIsMjUsMTIsMTMsMTE0LDgzLAorICAgIDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsNjQsMCwwLDAsMTE1LDcwLDAsMCwwLDEwMSwwLDAsCisgICAgOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwKKyAgICAyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LAorICAgIDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsCisgICAgOTAsNiwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsCisgICAgMTAsMCw4Myw0MSwxMSwyMTgsMTYsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywxMjIsODYsNjUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwKKyAgICAxMDEsMzIsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDMyLDEwMSwxMTMsCisgICAgMTE3LDEwNSwxMTgsOTcsMTA4LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDgwLDEyMSwxMTYsCisgICAgMTA0LDExMSwxMTAsMzIsOTgsMTE3LDEwNSwxMDgsMTAwLDExNSwzMiwxMTksMTA1LDExNiwxMDQsMTExLAorICAgIDExNywxMTYsMTAsMzIsMzIsMzIsMzIsMTA5LDExNywxMDgsMTE2LDEwNSw0NSwxMTYsMTA0LDExNCwKKyAgICAxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiw0Niw5OSwKICAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw3MCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLAotICAgIDAsMCwxMjQsMCwwLDk1LDIsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsCi0gICAgMCwxMjQsMCwwLDk1LDMsMCwxMjQsMSwwLDEyNCwwLDAsOTUsNCwwLAotICAgIDEwMCwwLDAsMTI0LDAsMCw5NSw2LDAsMTAwLDEsMCwxMjQsMCwwLDk1LAotICAgIDcsMCwxMDAsMSwwLDEyNCwwLDAsOTUsOCwwLDEwMCwwLDAsODMsNDAsCi0gICAgMiwwLDAsMCw3OCwxMDUsMCwwLDAsMCw0MCw5LDAsMCwwLDExNywKLSAgICA3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDEzLDAsMCwwLAotICAgIDk3LDEwOCwxMDgsMTExLDk5LDk3LDExNiwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDQsMCwKLSAgICAwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDYsMCwwLDAsMTE5LDk3LDEwNywxMDEsMTE3LAotICAgIDExMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw3OCwKLSAgICAxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCwxMTEsMTE5LDExMCwxMDEsMTE0LDExNyw1LDAsCi0gICAgMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsNywwLDAsMCwxMTksOTcsMTA1LDExNiwKLSAgICAxMDEsMTE0LDExNSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LAotICAgIDExNiw5NSw5NSwxODEsMCwwLDAsMTE1LDEyLDAsMCwwLDAsMSwxNSwxLAotICAgIDE1LDEsOSwxLDksMSw5LDEsMTE3LDIwLDAsMCwwLDk1LDc3LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsCi0gICAgOTUsOTksMSwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsODcsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTI1LDIsMCwKLSAgICAxMjAsNTksMCwxMTYsMywwLDEwNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwKLSAgICAzLDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDU1LDAsMTAwLDEsCi0gICAgMCw4MywxMjQsMywwLDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLDEyNCwxLAotICAgIDAsMTA3LDIsMCwxMTQsMjQsMCwxMDAsMiwwLDgzLDExMywyNCwwLDEwMCwwLAotICAgIDAsODMsNDAsMywwLDAsMCw3OCw3MCw4NCw0MCw4LDAsMCwwLDExNywKLSAgICA3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDksMCwwLDAsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwxMDEsMTEwLDExNiwxMTcsNSwwLDAsMCwxMTEsMTE5LAotICAgIDExMCwxMDEsMTE0LDExNywxMiwwLDAsMCw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLAotICAgIDEwMyw5NSwxMTEsMTEwLDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywKLSAgICA0LDAsMCwwLDg0LDExNCwxMTcsMTAxLDQwLDQsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywyLDAsMCwwLDEwOSwxMDEsMTE3LDMsMCwKLSAgICAwLDAsMTE2LDEwNSwxMDAsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsMTA0LAotICAgIDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywxODksMCwwLDAsMTE1LAotICAgIDE4LDAsMCwwLDAsMiwxMiwxLDksMSwzLDEsMTUsMSwxMiwxLAotICAgIDQsMSw5LDEsMTIsMSwxMTcsMjQsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDEwNCw5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LAotICAgIDExMSw5OSwxMDcsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMTcsMCwwLDAsNjcsMCwwLDAsMTE1LDIxNCwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTE2LDIsMCwxMjQsCi0gICAgMSwwLDYwLDEyMiwxNzcsMCwxMjAsMTcwLDAsMTI0LDAsMCwxMDYsMywwLDE0MywKLSAgICAxMzAsMCwxLDEyNCwwLDAsMTA2LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE1LAotICAgIDY4LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwxLDAsMTA3LDIsMCwxMTQsOTYsCi0gICAgMCwxMjQsMSwwLDEyNCwwLDAsOTUsNSwwLDEyNCwwLDAsNCwxMDYsNCwKLSAgICAwLDEwMCwyLDAsNTUsMiw5NSw0LDAsMTAwLDUsMCw4MywxMjQsMCwwLAotICAgIDEwNiw3LDAsMTMxLDAsMCwxMTQsMTI3LDAsMTE2LDgsMCwxMDAsMywwLDEyNCwKLSAgICAwLDAsMjIsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCi0gICAgOSwwLDEwNiwxMCwwLDEwMCw2LDAsMTMxLDEsMCwxMTQsMTYzLDAsMTI0LDAsCi0gICAgMCw0LDEwNiwxMiwwLDEwMCwyLDAsNTUsMiw5NSwxMiwwLDExMCwwLDAsCi0gICAgODcsMTAwLDQsMCw4MSw4OCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLAotICAgIDAsMCwxLDEyNCwwLDAsMTA2LDksMCwxMDYsMTMsMCwxMzEsMCwwLDEsCi0gICAgMTEzLDI4LDAsODcsMTAwLDQsMCwxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLAotICAgIDQsMCw4Myw0MCw3LDAsMCwwLDExNywxODUsMCwwLDAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNyw0NiwzMiwzMiwKLSAgICA3MywxMDIsMzIsOTcsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDAsCi0gICAgMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwKLSAgICAxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywzMiw5NSwKLSAgICA2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LAotICAgIDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsNzksMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiw5NywKLSAgICA5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLDg0LDExNCwxMTcsMTAxLAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCw0NiwxMCwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwKLSAgICAxMTcsMjMsMCwwLDAsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTAwLDEwMSwKLSAgICAxMTYsMTAxLDk5LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiwzNywxMTQsNzgsODQsNzAsNDAsCi0gICAgMTQsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwKLSAgICAxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLDEwMSwxMTAsMTE2LDExNywxMiwKLSAgICAwLDAsMCw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDExNywKLSAgICA0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsCi0gICAgMTEwLDExNiwxMTcsNSwwLDAsMCwxMTEsMTE5LDExMCwxMDEsMTE0LDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDExNywxMiwwLDAsMCwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsCi0gICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLAotICAgIDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMTksOTcsCi0gICAgMTA3LDEwMSwxMTcsMTEyLDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDcsMCwwLDAsMTE5LAotICAgIDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LAotICAgIDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsCi0gICAgMTE3LDMsMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDIwMSwwLDAsMCwxMTUsMzIsMCwwLDAsMCw2LDEyLDEsMTAsMSwzLAotICAgIDEsMywxLDEwLDEsMzAsMSw5LDEsMTUsMSw0LDEsMTIsMSwxOSwKLSAgICAxLDE4LDEsMjQsMiwxMywxLDIwLDIsMTE3LDE5LDAsMCwwLDk1LDc3LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEwLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSwxNjUsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTQzLDEzOCwwLAotICAgIDEsMTI0LDAsMCwxMDYsMywwLDEyNCwxLDAsMTA3LDMsMCwxMTQsNTIsMCwKLSAgICAxMTYsNCwwLDEwMCwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDQsMCwxMTUsNzMsMCwxMTYsNiwKLSAgICAwLDEzMCwxLDAsMTI0LDAsMCw0LDEwNiw1LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDUsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsMiwwLDExNCwKLSAgICAxNTUsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMywwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMTQsMTU1LDAsMTI0LDAsMCw0LDEwNiw4LDAsMTAwLDMsMCw1NiwyLAotICAgIDk1LDgsMCwxMjQsMCwwLDEwNiw5LDAsMTA2LDEwLDAsMTMxLDAsMCwxLAotICAgIDExMywxNTUsMCwxMTAsMCwwLDg3LDEwMCwwLDAsODEsODgsMTAwLDAsMCw4MywKLSAgICA0MCw0LDAsMCwwLDc4LDExNywzMSwwLDAsMCw5OSw5NywxMTAsMTEwLDExMSwKLSAgICAxMTYsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE3LDExMCw0NSw5Nyw5OSwxMTMsCi0gICAgMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiwxMDgsMTExLDk5LDEwNywxMDUsMCwwLDAsMCwxMDUsCi0gICAgMSwwLDAsMCw0MCwxMSwwLDAsMCwxMTcsNywwLDAsMCw5NSwxMTYsCi0gICAgMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsCi0gICAgMTAxLDExMCwxMTYsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDUsMCwwLAotICAgIDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsODIsMTE3LDExMCwxMTYsMTA1LAotICAgIDEwOSwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLAotICAgIDExNiwxMTcsMTQsMCwwLDAsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDcsMCwKLSAgICAwLDAsMTE5LDk3LDEwNSwxMTYsMTAxLDExNCwxMTUsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMywKLSAgICAwLDAsMCwxMTYsMTA1LDEwMCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDIyNiwwLAotICAgIDAsMCwxMTUsMjIsMCwwLDAsMCwxLDEyLDEsMTAsMSwxNSwxLDE1LAotICAgIDEsMjEsMSwxNSwxLDE1LDEsOSwxLDksMSwxNSwxLDExNywxOSwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsMTAwLAotICAgIDEsMCwxMjQsMCwwLDEwNiwwLDAsMTE2LDEsMCwxMjQsMCwwLDEzMSwxLAotICAgIDAsMTAyLDIsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywyMSwwLDAsCi0gICAgMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDAsMzcsMTE0LDQxLAotICAgIDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsMTAwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LAotICAgIDk1LDk1LDIzOSwwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIwLDAsCi0gICAgMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsOTUsOTUsNzgsNDAsOSwwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxMiwwLDAsMCwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDExNyw3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LAotICAgIDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMTc1LDAsMCwwLDExNSwxMiwwLDAsCi0gICAgMCwxNiw0LDYsMiwxMiw4LDEyLDEyLDEyLDI1LDEyLDEzLDExNywxMSwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLAotICAgIDAsMCwxMTUsNzQsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsCi0gICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLAotICAgIDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwKLSAgICAwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsCi0gICAgMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsCi0gICAgODMsNDAsMTEsMCwwLDAsMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LAotICAgIDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMTE3LDg2LDAsMCwwLAotICAgIDY1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTAxLDMyLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNzYsMTExLDk5LDEwNywzMiwxMDEsMTEzLDExNywxMDUsMTE4LDk3LDEwOCwxMDEsMTEwLDExNiwzMiwKLSAgICAxMDIsMTExLDExNCwzMiw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk4LDExNywxMDUsMTA4LDEwMCwKLSAgICAxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDExMSwxMTcsMTE2LDEwLDMyLDMyLDMyLDMyLDEwOSwxMTcsCi0gICAgMTA4LDExNiwxMDUsNDUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTE3LAotICAgIDExMiwxMTIsMTExLDExNCwxMTYsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsCi0gICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsCi0gICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMSwwLDEyNCwwLDAsOTUsCi0gICAgMSwwLDEwMCwwLDAsODMsNDAsMiwwLDAsMCw3OCwxMDUsMCwwLDAsCi0gICAgMCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywKLSAgICA1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwyNDcsMCwwLDAsMTE1LDQsMCwKLSAgICAwLDAsMCwxLDksMSwxMTcsMjUsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksCi0gICAgMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLAorICAgIDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsCisgICAgMCwwLDEwMCwxLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwKKyAgICAyLDc4LDExNCw4NCwwLDAsMCw0MSwyLDExNCw2NywwLDAsMCwxMTQsODksCisgICAgMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwKKyAgICAwLDAsMCwyMzgsMCwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwKKyAgICAxMjIsMjUsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAorICAgIDk5LDEwNyw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwKKyAgICAwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTksMCwwLDAsMTI0LDAsMCw0LDEwNiwwLDAsMTAwLDEsMCw1NSwKKyAgICAyLDk1LDAsMCwxMDAsMiwwLDgzLDQxLDMsNzgsMTE0LDI5LDAsMCwwLAorICAgIDg0LDQxLDEsMTE0LDg5LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5NywKKyAgICAwLDAsMCwyNDIsMCwwLDAsMTE1LDQsMCwwLDAsMCwxLDE1LDEsCisgICAgMTIyLDI0LDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKKyAgICA5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA0OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsMiwwLAorICAgIDExNCwzMCwwLDExNiwxLDAsMTAwLDIsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLAorICAgIDAsMCwxMjQsMCwwLDQsMTA2LDAsMCwxMDAsMywwLDU2LDIsOTUsMCwKKyAgICAwLDEwMCwwLDAsODMsNDEsNCw3OCwxMTQsODQsMCwwLDAsMTIyLDMxLDk5LAorICAgIDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLAorICAgIDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDExNCwyOSwKKyAgICAwLDAsMCw0MSwyLDExNCw4OSwwLDAsMCwxMTQsOTksMCwwLDAsNDEsCisgICAgMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDk4LDAsMCwwLDI0NiwwLDAsMCwxMTUsNiwKKyAgICAwLDAsMCwwLDEsMTUsMSwxNSwxLDEyMiwyNCw5NSw2OCwxMTcsMTA5LDEwOSwKKyAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSwKKyAgICA5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEwMCwxLDAsCisgICAgMTA2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTMxLDIsMCw4Myw0MSwyLDc4LDEyMiwyOCw5NSw2OCwxMTcsMTA5LDEwOSwKKyAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDEyMywzMywxMTQsMTI1LAorICAgIDQxLDMyLDk3LDExNiwzMiwxMjMsMTI1LDQxLDMsMTE0LDQ3LDAsMCwwLDExNCw2NywKKyAgICAwLDAsMCwxMTQsNDgsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwKKyAgICAwLDAsMCwyNTEsMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSwKKyAgICA5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAorICAgIDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw4LDExNCw1NywwLDAsCisgICAgMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwKKyAgICAxMTQsNzIsMCwwLDAsMTE0LDk3LDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsCisgICAgMTAxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDIsMCwwLDAsMjM0LDAsMCwKKyAgICAwLDExNSwxMCwwLDAsMCwxMiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwKKyAgICAxMTQsMTAyLDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDUyLDAsMCwwLDEwMSwKKyAgICAwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsCisgICAgMCwxMzIsMCwwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCwKKyAgICA5MCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCwKKyAgICA3LDAsODMsNDEsOCwyMTgsMTgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCisgICAgOTksMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwKKyAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLDAsMTI0LAorICAgIDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDcwLAorICAgIDAsMCwwLDIxOCw1LDk1LDEwOCwxMTEsOTksMTA3LDQxLDIsMTE0LDcxLDAsMCwKKyAgICAwLDExNCw2NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMSwxLDAsMCwxMTUsNCwKKyAgICAwLDAsMCwwLDEsOSwxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsCiAgICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxOSwwLDAsMCwxMjQsMCwKLSAgICAwLDQsMTA2LDAsMCwxMDAsMSwwLDU1LDIsOTUsMCwwLDEwMCwyLDAsCi0gICAgODMsNDAsMywwLDAsMCw3OCwxMDUsMSwwLDAsMCw4NCw0MCwyLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMjUxLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDAsMSwxNSwxLDExNywyNCwwLDAsMCw5NSw2OCwxMTcsCi0gICAgMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LDk5LAotICAgIDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwxMTYsMSwKLSAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwKLSAgICA0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwwLDgzLAotICAgIDQwLDQsMCwwLDAsNzgsMTA1LDAsMCwwLDAsMTE3LDMxLDAsMCwwLAotICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsCi0gICAgMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDEwNSwKLSAgICAxLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDUsMCwwLDAsOTksMTExLAotICAgIDExNywxMTAsMTE2LDExNywxMiwwLDAsMCw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywKLSAgICAwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyNTUsMCwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTUsMSwxMTcsMjQsMCwwLDAsOTUsNjgsCi0gICAgMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsCi0gICAgMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwKLSAgICAxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMDIsMiwwLDIyLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDI2LDAsCi0gICAgMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsNDAsMzcsMTE0LDQxLDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsCi0gICAgMTAwLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQsMSwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwxLDExNywyNSwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSwKLSAgICA5NSw3OCw0MCw4LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDcsMCwKLSAgICAwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMjQzLDAsMCwwLDExNSwxMCwwLDAsMCwKLSAgICAxNiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTcsMTYsMCwwLDAsOTUsCi0gICAgNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw5OSwKKyAgICAwLDEwLDAsMCwwLDY3LDAsMCwwLDExNSw1MywwLDAsMCwxMjIsMjIsCisgICAgMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEyNCwwLDAsCisgICAgOTUsMiwwLDg3LDEwMCwwLDAsMTE2LDMsMCwxMDYsNCwwLDEzMSwwLDAsCisgICAgMSw4OCwxMjQsMCwwLDEwNiwyLDAsMTA2LDUsMCwxMzEsMCwwLDEsMTAwLAorICAgIDAsMCw4Myw0MSwxLDc4LDQxLDYsMjE4LDE2LDk1LDEwMywxMDEsMTE2LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNCw3MCwwLDAsMCwxMTQsCisgICAgMTA0LDAsMCwwLDIxOCw0LDk1LDEwNSwxMDksMTEyLDIxOCwxMiwxMTQsMTAxLDEwOCwxMDEsCisgICAgOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTQsOTcsMCwwLDAsNDEsMSwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDc1LDAsMCwwLDUsMSwwLDAsMTE1LDgsMCwwLAorICAgIDAsMCwxLDMsMSwyMiwyLDExLDEsMTIyLDI4LDk1LDc3LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywxMTAsOTcsMTAzLDEwMSwxMTQsNDYsOTUsOTUsCisgICAgMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMywwLDAsMCwxLDAsMCwwLDc5LDAsMCwwLDExNSwxNywwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDEwNCwwLDAsMCwxMTQsOTgsMCwwLAorICAgIDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDgwLDAsMCwwLDIxOCw2LDEwNywKKyAgICAxMTksOTcsMTE0LDEwMywxMTUsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDgxLDAsMCwwLDEyLDEsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMSwxMjIsMjcsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksCisgICAgMTA3LDc3LDk3LDExMCw5NywxMDMsMTAxLDExNCw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsCisgICAgOTUsNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwKKyAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDc1LDAsMCwwLDExNCw4MSwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsMTAzLDAsMCwwLDI1NSwwLDAsMCwxMTUsCisgICAgNiwwLDAsMCwxMiwyLDEyLDQsMTIsNywxMTQsMTAzLDAsMCwwLDk5LAogICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLAotICAgIDMsMCwwLDAsMTE1LDE0MiwwLDAsMCwxMDAsMywwLDEyNSwxLDAsMTIxLAotICAgIDE3LDAsMTE2LDEsMCwxMzYsMCwwLDI1LDEzMSwwLDAsMTI1LDEsMCw4NywKLSAgICAxMTAsMTgsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsCi0gICAgODksMTEwLDEsMCw4OCwxMjQsMSwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTM4LAotICAgIDAsMTE2LDMsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDQsMCwKLSAgICAxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTAsMTIsMCwxMTYsNSwwLDEzNiwKLSAgICAwLDAsMTMxLDEsMCwxMjUsMSwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMiwwLDExNiw2LDAsMTA2LDcsMCwKLSAgICAxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTYsMSwwLDEzNiwwLDAsNjAsCi0gICAgMTEwLDAsMCwxMjQsMSwwLDgzLDQwLDQsMCwwLDAsMTE3LDEwOSwwLDAsCi0gICAgMCw3MSwxMDEsMTE2LDMyLDExMSwxMTQsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsMTksCi0gICAgMCwwLDAsMTE1LDExLDAsMCwwLDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMSwwLDAsMCwxMTcsMTMsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LAotICAgIDQwLDEsMCwwLDAsMTE3LDEsMCwwLDAsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMiwwLDAsMCw5OSw5OCwyNCwxLDAsMCwxMTUsMiwwLDAsMCwKLSAgICAwLDEsMTE3LDI4LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw5OSw5OCw3OCw0MCw4LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwKLSAgICAxMTAsMTAxLDExNywxMywwLDAsMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsCi0gICAgMTExLDk5LDEwNywxMTUsMTE3LDgsMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwKLSAgICAxMTQsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsMTYsMCwKLSAgICAwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNywxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTksMTA3LDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNywKLSAgICAzLDAsMCwwLDExNCwxMDEsMTAyLDQwLDMsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTA4LDExMSw5OSwxMDcsMTE3LDIsCi0gICAgMCwwLDAsOTksOTgsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsCi0gICAgMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTAsCi0gICAgMSwwLDAsMTE1LDI0LDAsMCwwLDAsNCw2LDEsMywxLDE3LDEsCi0gICAgMTMsMSw1LDEsMTIsMSwxMiwxLDE1LDIsMTIsMSwxOCwyLDI1LDEsCi0gICAgMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk1LDEwOCwxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsCi0gICAgMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw3MSwwLDAsMCwxMTYsCi0gICAgMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMSwwLDExNiwxLDAsMTA2LDIsCi0gICAgMCwxMzEsMCwwLDEsMTIxLDE0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwwLAotICAgIDAsMSw4NywxMTAsMTgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDU2LDAsCi0gICAgMSwxLDEsODksMTEwLDExLDAsODgsMTI0LDEsMCwxMDYsNSwwLDEzMSwwLAotICAgIDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDIxLDEsMCwwLAotICAgIDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ0LDMyLAotICAgIDk3LDExMCwxMDAsMzIsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLAotICAgIDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDk3LDMyLDEwMywxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTEwLDExNSwxMTcsMTE0LAotICAgIDEwMSwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk5LDExMSwKLSAgICAxMDksMTEyLDEwOCwxMDEsMTE2LDEwMSwxMDgsMTIxLDMyLDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LAotICAgIDEwNSwxMjIsMTAxLDEwMCw0NCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwMSwxMTgsMTAxLDExMCwxMTYsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDk4LDEwMSwxMDUsCi0gICAgMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5NywKLSAgICAxMTAsMTExLDExNiwxMDQsMTAxLDExNCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLAotICAgIDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiwKLSAgICA5NywxMDcsMTAxLDExMCw0Niw3OCw0MCw2LDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDcsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLAotICAgIDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDI5LDEsMCwwLDExNSwxNCwwLDAsMCwwLDcsMTIsMSwxMCwxLDMsCi0gICAgMSwxNCwxLDEzLDMsNSwyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLDk5LAotICAgIDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsCi0gICAgMiwwLDE0MiwwLDAsODMsNDAsMSwwLDAsMCwxMTcsNDYsMSwwLDAsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsOTksMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiwKLSAgICAxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMTE1LAotICAgIDEwLDMyLDMyLDMyLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwMSwxMTAsCi0gICAgMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiw5NywzMiw5OSw5NywxMDgsMTA4LDMyLDExNiwxMTEsCi0gICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwNSwxMTYsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSwKLSAgICA5NywxMDAsMzIsMTExLDEwMiwzMiw5NywzMiwxMTAsMTExLDExNCwxMDksOTcsMTA4LDMyLDk5LAotICAgIDk3LDEwOCwxMDgsMzIsMTA1LDExMCwzMiwxMTIsMTA4LDk3LDk5LDEwMSwxMTUsMzIsMTE5LDEwNCwKLSAgICAxMDEsMTE0LDEwMSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDExNiwxMTQsMTExLDEwMCwxMTcsOTksMTAxLAotICAgIDExNSwzMiwxMTcsMTEwLDExOSw5NywxMTAsMTE2LDEwMSwxMDAsMzIsMTEwLDExMSwxMDUsMTE1LDEwMSwKLSAgICAzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDExNCw5Nyw5OSwxMDEsOTgsCi0gICAgOTcsOTksMTA3LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMCwxMDMsMTAsMzIsMzIsMzIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDEsMTAsMzIsMzIsMzIsMzIsNDAsMCwKLSAgICAwLDAsMCw0MCwzLDAsMCwwLDExNywxLDAsMCwwLDEwMiwxMTcsNCwKLSAgICAwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNCwwLDAsMCwxMDcsMTE5LDEwMCwxMTUsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLAotICAgIDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCi0gICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsNDksMSwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw4LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAorICAgIDMsMCwwLDAsMTE1LDE0MiwwLDAsMCwxMDAsMSwwLDEyNSwxLDAsMTIxLAorICAgIDE3LDAsMTE2LDAsMCwxMzYsMCwwLDI1LDEzMSwwLDAsMTI1LDEsMCw4NywKKyAgICAxMTAsMTgsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsCisgICAgODksMTEwLDEsMCw4OCwxMjQsMSwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTM4LAorICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDMsMCwKKyAgICAxMzYsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTAsMTIsMCwxMTYsNCwwLDEzNiwKKyAgICAwLDAsMTMxLDEsMCwxMjUsMSwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwKKyAgICAwLDEwMCwzLDAsMTM0LDAsMCwxMjUsMiwwLDExNiw1LDAsMTA2LDYsMCwKKyAgICAxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTYsMCwwLDEzNiwwLDAsNjAsCisgICAgMTEwLDAsMCwxMjQsMSwwLDgzLDQxLDQsMTIyLDEwOSw3MSwxMDEsMTE2LDMyLDExMSwKKyAgICAxMTQsMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDEwMywKKyAgICAxMDUsMTE4LDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLAorICAgIDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwKKyAgICAxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwKKyAgICAxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDc4LDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCwxLDAsMCwwLDIsMCwwLDAsMTksMCwwLDAsMTE1LDExLAorICAgIDAsMCwwLDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsMCwwLDgzLDQxLDEsCisgICAgNzgsNDEsMSwyMTgsMTMsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwKKyAgICAxMDcsMTE1LDQxLDEsMTE0LDM2LDAsMCwwLDQxLDEsMTE0LDY3LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyLDk5LDk4LDMyLDEsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsOTUsMTAzLDEwMSwxMTYsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDYsNjAsMTA4LDExMSw5OSwKKyAgICA5NywxMDgsMTE1LDYyLDQ2LDk5LDk4LDQxLDcsMTE0LDEwOSwwLDAsMCwxMTQsNzksCisgICAgMCwwLDAsMTE0LDg1LDAsMCwwLDExNCwxMDIsMCwwLDAsMTE0LDgzLDAsCisgICAgMCwwLDIxOCw4LDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDkwLDMsMTE0LDEwMSwKKyAgICAxMDIsNDEsMywxMTQsNjcsMCwwLDAsMTE0LDg2LDAsMCwwLDExNCwxMTAsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsNjcsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDEwNSwwLDAsMCwxOCwxLDAsMCwxMTUsMjQsMCwwLAorICAgIDAsMCw0LDYsMSwzLDEsMTcsMSwxMywxLDUsMSwxMiwxLDEyLAorICAgIDEsMTUsMiwxMiwxLDE4LDIsMjUsMSwxMTQsMTA1LDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw3MSwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsCisgICAgMCwxMjUsMSwwLDExNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDEsMTIxLDE0LAorICAgIDAsMTI0LDEsMCwxMDYsMywwLDEzMSwwLDAsMSw4NywxMTAsMTgsMCw0LAorICAgIDExNiw0LDAsMTA3LDEwLDAsMTE0LDU2LDAsMSwxLDEsODksMTEwLDExLDAsCisgICAgODgsMTI0LDEsMCwxMDYsNSwwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQxLAorICAgIDIsOTcsMjEsMSwwLDAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDMsMTA4LDExMSw5OCw5NywxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsCisgICAgMTA4LDExMSw5OSwxMDcsNDQsMzIsOTcsMTEwLDEwMCwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsCisgICAgMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LAorICAgIDExMSw5OSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwzMiwzMiwzMiwKKyAgICAzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDEwMSwxMTAsMTE1LDExNywxMTQsMTAxLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDEwNSwxMTUsMzIsOTksMTExLDEwOSwxMTIsMTA4LDEwMSwxMTYsMTAxLDEwOCwxMjEsMzIsMTA1LAorICAgIDExMCwxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDEsMTAwLDQ0LDMyLDEwNSwxMTAsMzIsMTE2LAorICAgIDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMTAxLDExOCwxMDEsMTEwLDExNiwzMiwxMDUsMTE2LDMyLAorICAgIDEwNSwxMTUsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKKyAgICAxMDAsMzIsOTgsMTIxLDMyLDk3LDExMCwxMTEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMDQsMTE0LAorICAgIDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwxMTcsMTA4LDEwMCwKKyAgICAzMiwxMTEsMTEwLDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwKKyAgICAxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsCisgICAgMTA4LDExMSw5OSwxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDc4LDQxLDYsMTE0LDEwNSwKKyAgICAwLDAsMCwxMTQsMTA2LDAsMCwwLDExNCwxMDcsMCwwLDAsMTE0LDk3LDAsCisgICAgMCwwLDExNCw4MiwwLDAsMCwxMTQsOTgsMCwwLDAsNDEsMiwxMTQsNjcsCisgICAgMCwwLDAsMTE0LDg2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxOSw5NSwxMDgsMTExLDk5LDEwNyw5NSwxMTcsCisgICAgMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM3LDEsMCwwLAorICAgIDExNSwxNCwwLDAsMCwwLDcsMTIsMSwxMCwxLDMsMSwxNCwxLDEzLAorICAgIDMsNSwyLDExNCwxMTIsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDMsMCwwLDAsMywwLDAsMCw3OSwwLDAsMCwxMTUsMTMsMCwKKyAgICAwLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTQyLDAsMCw4Myw0MSwKKyAgICAxLDk3LDQ2LDEsMCwwLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywKKyAgICAxMDgsMTE5LDk3LDEyMSwxMTUsMzIsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsCisgICAgMTE3LDEwMSwxMTAsOTksMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsCisgICAgMTA0LDk3LDExNiwzMiwxMDEsMTEwLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksCisgICAgOTcsMTA4LDEwOCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwKKyAgICAxMTYsMTA1LDExMSwxMTAsMTAsMTAsMzIsMzIsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LAorICAgIDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDMyLDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwKKyAgICAxMTQsMTA5LDk3LDEwOCwzMiw5OSw5NywxMDgsMTA4LDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5NywKKyAgICA5OSwxMDEsMTE1LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAorICAgIDk4LDEwLDMyLDMyLDMyLDMyLDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsCisgICAgMTE0LDExMSwxMDAsMTE3LDk5LDEwMSwxMTUsMzIsMTE3LDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLAorICAgIDMyLDExMCwxMTEsMTA1LDExNSwxMDEsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExNiwxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNywzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLAorICAgIDExOSwxMDQsMTAxLDExMCwzMiwxMDEsMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLAorICAgIDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLAorICAgIDMyLDMyLDMyLDMyLDExNCw0LDAsMCwwLDQxLDMsMjE4LDEsMTAyLDExNCw4MCwKKyAgICAwLDAsMCw5MCw0LDEwNywxMTksMTAwLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsOTUsOTksOTcsMTA4LDEwOCw5NSwKICAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTA1LDE1OCwxMiwwLDAsMTE3LDEsMCwwLDAsMTMsMTA1LDE2LAotICAgIDAsMCwwLDExNywxLDAsMCwwLDEwLDEwNSwyNCwwLDAsMCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDk5LAotICAgIDAsMCwwLDExNSwyOSwwLDAsMCwxMjQsMCwwLDkzLDE5LDAsMTI1LDEsCi0gICAgMCwxMTYsMCwwLDEyNCwxLDAsNjMsMTAwLDAsMCw2NCw4NiwxLDExMywzLAotICAgIDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDEwNSwyNTUsMCwwLDAsNzgsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTcsMCwwLDAsOTUsODIsNjUsODcsOTUsNzcsCi0gICAgNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsNjYsNjksODIsNDAsMiwwLDAsMCwKLSAgICAxMTcsMiwwLDAsMCw0Niw0OCwxMTcsMSwwLDAsMCwxMTAsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsCi0gICAgMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTUwLDEsMCwwLDExNSwyLDAsMCwwLAotICAgIDYsMCwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsCi0gICAgMTA1LDAsMCwwLDAsMTA1LDI1LDAsMCwwLDEwNSw4LDAsMCwwLDExNywKLSAgICAxMSwwLDAsMCw5NSw5NSwxMTIsMTIxLDk5LDk3LDk5LDEwNCwxMDEsOTUsOTUsMTE3LAotICAgIDMsMCwwLDAsNDYsMTEyLDEyMSwxMTcsNCwwLDAsMCw0NiwxMTIsMTIxLDk5LAotICAgIDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsMTExLDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwxMSwwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxODAsCi0gICAgMCwwLDAsMTI0LDEsMCwxMDAsNSwwLDEwNyw4LDAsMTE0LDI1LDAsMTE2LAotICAgIDEsMCwxMDYsMiwwLDEwNiwzLDAsMTIsMTEwLDMsMCwxMjQsMSwwLDEyNSwKLSAgICAyLDAsMTI0LDIsMCwxMTQsNDYsMCwxMTYsNCwwLDEyNSwzLDAsMTEwLDYsCi0gICAgMCwxMTYsNSwwLDEyNSwzLDAsMTE2LDYsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw3LDAsMTAwLAotICAgIDEsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNiwwLDEyNSw3LDAsMTI1LDgsCi0gICAgMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMjUsOSwwLDEyNCw5LDAsCi0gICAgMTAwLDUsMCwxMDcsOCwwLDExNCwxMzMsMCwxMTYsMTAsMCwxMDAsMiwwLDEzMSwKLSAgICAxLDAsMTMwLDEsMCwxMTAsMCwwLDEwMCwzLDAsMTA2LDExLDAsMTI0LDYsCi0gICAgMCwxMjQsNywwLDEyNCw5LDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEwMyw0LAotICAgIDAsMTMxLDEsMCwxMjUsMTAsMCwxMTYsMTIsMCwxMjQsNCwwLDExNiwxMywwLAotICAgIDEyNCwxMCwwLDEzMSwzLDAsODMsNDAsNiwwLDAsMCwxMTcsMjQ0LDEsMCwKLSAgICAwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICAxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwKKyAgICAxMTgsMTAxLDEwMCw1NywxLDAsMCwxMTUsMiwwLDAsMCwwLDgsMTE0LDExNCwKKyAgICAwLDAsMCwxMDUsMjI4LDEyLDAsMCwyMzMsMiwwLDAsMCwxMTQsMTMsMCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsMTMsMTAsOTAsMTEsOTUsOTUsMTEyLDEyMSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDk1LDk1LDEyMiwzLDQ2LDExMiwxMjEsMTIyLDQsNDYsMTEyLDEyMSwKKyAgICA5OSwxMjIsNCw0NiwxMTIsMTIxLDExMSw3OCw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMTEsMCwwLDAsNiwwLDAsMCw2NywwLDAsMCwxMTUsMTgwLDAsCisgICAgMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyNSwwLDExNiwwLAorICAgIDAsMTA2LDEsMCwxMDYsMiwwLDEyLDExMCwzLDAsMTI0LDEsMCwxMjUsMiwKKyAgICAwLDEyNCwyLDAsMTE0LDQ2LDAsMTE2LDMsMCwxMjUsMywwLDExMCw2LDAsCisgICAgMTE2LDQsMCwxMjUsMywwLDExNiw1LDAsMTI0LDAsMCwxMzEsMSwwLDkyLAorICAgIDIsMCwxMjUsNCwwLDEyNSw1LDAsMTI0LDUsMCwxMDYsNiwwLDEwMCwyLAorICAgIDAsMTMxLDEsMCw5MiwzLDAsMTI1LDYsMCwxMjUsNywwLDEyNSw4LDAsCisgICAgMTE2LDAsMCwxMDYsNywwLDEwNiw4LDAsMTI1LDksMCwxMjQsOSwwLDEwMCwKKyAgICAxLDAsMTA3LDgsMCwxMTQsMTMzLDAsMTE2LDksMCwxMDAsMywwLDEzMSwxLAorICAgIDAsMTMwLDEsMCwxMTAsMCwwLDEwMCw0LDAsMTA2LDEwLDAsMTI0LDYsMCwKKyAgICAxMjQsNywwLDEyNCw5LDAsMTI0LDMsMCwxMDAsNSwwLDI1LDEwMyw0LDAsCisgICAgMTMxLDEsMCwxMjUsMTAsMCwxMTYsMTEsMCwxMjQsNCwwLDExNiwxMiwwLDEyNCwKKyAgICAxMCwwLDEzMSwzLDAsODMsNDEsNiw5NywyNDQsMSwwLDAsNzEsMTA1LDExOCwKKyAgICAxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsCisgICAgMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LAorICAgIDExNSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwKKyAgICAxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwKKyAgICAzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwxMCwKKyAgICAzMiwzMiwzMiwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsCisgICAgMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwzMiw5NywxMTUsCisgICAgMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwKKyAgICAzMiwxMTksMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw0NiwzMiwKKyAgICAzMiw4NCwxMDQsMTAxLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsNDYsMTEyLDEyMSw5OSwzMiwKKyAgICAxMTcsMTEwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMDIsMTA4LDk3LDEwMywxMTUsCisgICAgNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTEwLAorICAgIDQ1LDEyMiwxMDEsMTE0LDExMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsMTA1LDExNiwzMiwxMTksCisgICAgMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LDExMiwxMjEsMTExLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDczLDEwMiwzMiwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLDExOCwxMDEsMTE0LDExNCwKKyAgICAxMDUsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDc4LDExMSwxMTAsMTAxLDQ0LAorICAgIDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsCisgICAgMzIsOTcsMzIsOTgsMTExLDExMSwxMDgsMTAxLDk3LDExMCwzMiw5NywxMTAsMTAwLDMyLDEwNSwKKyAgICAxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMTAsMzIsMzIsMzIsMzIsMTEyLDEwOCwKKyAgICA5Nyw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDIsMTA4LDk3LDEwMywxMTUsCisgICAgNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA3MywxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCisgICAgOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwKKyAgICAxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LAorICAgIDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsCisgICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDc4LDIxOCwxLDQ2LDEyMiwzNiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLAorICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwKKyAgICAxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMTE0LDMwLDAsMCwwLAorICAgIDExNCw4NCwwLDAsMCw0MSwxMywxMTQsNywwLDAsMCwyMTgsNSwxMDIsMTA4LAorICAgIDk3LDEwMywxMTUsMjE4LDgsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwyMTgsMjMsNjgsCisgICAgNjksNjYsODUsNzEsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsCisgICAgNzAsNzAsNzMsODgsNjksODMsMjE4LDI3LDc5LDgwLDg0LDczLDc3LDczLDkwLDY5LAorICAgIDY4LDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLAorICAgIDg4LDY5LDgzLDExNCwzOCwwLDAsMCwyMTgsOSwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LAorICAgIDEwNSwxMTEsMTEwLDIxOCwxNCwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsMjE4LDksOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDIxOCwxOSwKKyAgICA3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMTE0LDI2LDAsMCwwLDExNCwyOCwwLDAsMCwyMTgsOCw5NSwKKyAgICA4MCw4OSw2Nyw2NSw2Nyw3Miw2OSw0MSwxMSwxMTQsMzUsMCwwLDAsOTAsMTQsCisgICAgMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwxMTgsMTAxLDExNCwxMTQsMTA1LDEwMCwxMDEsMjE4LDUsCisgICAgMTAwLDEwMSw5OCwxMTcsMTAzLDIxOCw4LDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMjE4LAorICAgIDQsMTA0LDEwMSw5NywxMDAsMTE0LDM3LDAsMCwwLDIxOCwxMyw5OCw5NywxMTUsMTAxLAorICAgIDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwyMTgsMywxMTUsMTAxLDExMiwxMTQsMzYsCisgICAgMCwwLDAsOTAsMywxMTYsOTcsMTAzLDIxOCw4LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsCisgICAgMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwyMTgsMTcsOTksOTcsOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwKKyAgICAxMTcsMTE0LDk5LDEwMSwxODAsMSwwLDAsMTE1LDIyLDAsMCwwLDAsMTMsMzEsCisgICAgMSw2LDEsOSwyLDYsMSwxOCwxLDI0LDEsMTIsMSwxMiwxLDE1LAorICAgIDEsMzEsMSwxMTQsMTMyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCw1LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MywwLAorICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMDAsMSwwLDEwNyw4LAorICAgIDAsMTE0LDMzLDAsMTE2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTMwLDEsMCwKKyAgICAxMTAsMCwwLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDkyLDIsMCwxMjUsCisgICAgMSwwLDEyNSwyLDAsMTE2LDQsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwKKyAgICAwLDEyNSwxLDAsMTI1LDMsMCwxMjQsMywwLDExNiw1LDAsMTA3LDMsMCwKKyAgICAxMTQsMTA4LDAsMTE2LDYsMCwxMDAsMywwLDEwNiw3LDAsMTE2LDUsMCwxMjQsCisgICAgMCwwLDEzMSwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDIsCisgICAgMCwxMDYsOCwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsNSwwLDEwNywzLDAsCisgICAgMTE0LDE1MywwLDExNiw2LDAsMTAwLDYsMCwxMDYsNywwLDEyNCwyLDAsMTMxLAorICAgIDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwNiw5LAorICAgIDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw3LDAsMjUsMTI1LDQsMCwxMTYsMTAsCisgICAgMCwxMjQsMSwwLDEyNCw0LDAsMTE2LDExLDAsMTAwLDcsMCwyNSwyMywxMzEsCisgICAgMiwwLDgzLDQxLDgsOTcsMTIxLDEsMCwwLDcxLDEwNSwxMTgsMTAxLDExMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDQ2LDExMiwKKyAgICAxMjEsOTksNDYsNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ0LDMyLDExNCwKICAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA1LDExNiwxMTUsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw0NiwKLSAgICAxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTEwLDExMSwxMTYsCisgICAgMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSw5OSw0Nyw0NiwxMTIsCisgICAgMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExMCwxMTEsMTE2LAogICAgIDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsNTksMzIsCiAgICAgMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTIxLDMyLDExNCwxMDEsMTE2LDExNywKLSAgICAxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLAotICAgIDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwKLSAgICAxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsCi0gICAgMTAwLDMyLDk3LDExNSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsMzIsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExOSwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTAsMzIsMzIsMzIsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiw0NiwKLSAgICAxMTIsMTIxLDk5LDMyLDExNywxMTAsMTA4LDEwMSwxMTUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDEwMiwKLSAgICAxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTUsCi0gICAgMzIsMTEwLDExMSwxMTAsNDUsMTIyLDEwMSwxMTQsMTExLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwKLSAgICAxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsNDYsMTEyLDEyMSwxMTEsNDYsCi0gICAgMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsCi0gICAgMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsNzgsCi0gICAgMTExLDExMCwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDEwNSwxMTYsMzIsMTA5LDExNywxMTUsCi0gICAgMTE2LDMyLDk4LDEwMSwzMiw5NywzMiw5OCwxMTEsMTExLDEwOCwxMDEsOTcsMTEwLDMyLDk3LAotICAgIDExMCwxMDAsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMTIsMTA4LDk3LDk5LDEwMSwzMiwxMTEsMTAyLDMyLDExNSwxMjEsMTE1LDQ2LDEwMiwKLSAgICAxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwKLSAgICAxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LDEwNCwxMDEsMTEwLAotICAgIDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LAotICAgIDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE3LDEsMCwwLDAsNDYsMTE3LDM2LDAsMCwwLAotICAgIDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsCi0gICAgMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMCwwLDAsMCwxMDUsMCwwLDAsMCw3OCw0MCwKLSAgICAxNCwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLAotICAgIDAsMCwxMTUsMTIxLDExNSwxMTcsNSwwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LAotICAgIDgsMCwwLDAsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTcsMjMsMCwwLAotICAgIDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsCi0gICAgODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDI3LDAsMCwwLDc5LDgwLDg0LAotICAgIDczLDc3LDczLDkwLDY5LDY4LDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LAotICAgIDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw5LDAsMCwwLDExMiw5NywxMTQsCi0gICAgMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDE0LDAsMCwwLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwxMTcsOSwwLDAsMCw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsCi0gICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsCi0gICAgNCwwLDAsMCwxMDYsMTExLDEwNSwxMTAsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsOCwwLDAsMCw5NSw4MCw4OSw2NywKLSAgICA2NSw2Nyw3Miw2OSw0MCwxMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsMTQsMCwwLDAsMTAwLDEwMSw5OCwxMTcsMTAzLDk1LDExMSwxMTgsMTAxLAotICAgIDExNCwxMTQsMTA1LDEwMCwxMDEsMTE3LDUsMCwwLDAsMTAwLDEwMSw5OCwxMTcsMTAzLDExNywKLSAgICA4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMTE3LDQsMCwwLAotICAgIDAsMTA0LDEwMSw5NywxMDAsMTE3LDQsMCwwLDAsMTE2LDk3LDEwNSwxMDgsMTE3LDEzLAotICAgIDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLAotICAgIDExNywzLDAsMCwwLDExNSwxMDEsMTEyLDExNywxLDAsMCwwLDk1LDExNywzLAotICAgIDAsMCwwLDExNiw5NywxMDMsMTE3LDgsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDExMCwKLSAgICA5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDE3LDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsMTU5LDEsMCwwLDExNSwyMiwwLDAsMCwwLDEzLAotICAgIDMxLDEsNiwxLDksMiw2LDEsMTgsMSwyNCwxLDEyLDEsMTIsMSwKLSAgICAxNSwxLDMxLDEsMTE3LDE3LDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLAotICAgIDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTkzLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEwMCw3LDAsCi0gICAgMTA3LDgsMCwxMTQsMzMsMCwxMTYsNCwwLDEwMCwxLDAsMTMxLDEsMCwxMzAsCi0gICAgMSwwLDExMCwwLDAsMTE2LDUsMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwKLSAgICAwLDEyNSwxLDAsMTI1LDIsMCwxMTYsNSwwLDEyNCwxLDAsMTMxLDEsMCwKLSAgICA5MiwyLDAsMTI1LDEsMCwxMjUsMywwLDEyNCwzLDAsMTE2LDYsMCwxMDcsCi0gICAgMywwLDExNCwxMDgsMCwxMTYsNywwLDEwMCwyLDAsMTA2LDgsMCwxMTYsNiwKLSAgICAwLDEyNCwwLDAsMTMxLDIsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMjQsMiwwLDEwNiw5LDAsMTAwLDMsMCwxMzEsMSwwLDEwMCw0LDAsMTA3LAotICAgIDMsMCwxMTQsMTUzLDAsMTE2LDcsMCwxMDAsNSwwLDEwNiw4LDAsMTI0LDIsCi0gICAgMCwxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwyLDAsCi0gICAgMTA2LDEwLDAsMTAwLDMsMCwxMzEsMSwwLDEwMCw2LDAsMjUsMTI1LDQsMCwKLSAgICAxMTYsMTEsMCwxMjQsMSwwLDEyNCw0LDAsMTE2LDEyLDAsMTAwLDYsMCwyNSwKLSAgICAyMywxMzEsMiwwLDgzLDQwLDgsMCwwLDAsMTE3LDEyMSwxLDAsMCw3MSwKLSAgICAxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwKLSAgICAzMiw5NywzMiw0NiwxMTIsMTIxLDk5LDQ2LDQ3LDQ2LDExMiwxMjEsMTExLDMyLDEwMiwxMDUsCi0gICAgMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCi0gICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsMzIsMTAyLAotICAgIDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsNDYsMTEyLAotICAgIDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLDExMSwxMDEsCi0gICAgMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMjAsCi0gICAgMTA1LDExNSwxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTIxLAotICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsCi0gICAgMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTAwLAotICAgIDMyLDExNiwxMTEsMzIsOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLDExMCwxMDAsMzIsMTE2LAotICAgIDExMSwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSw0NiwzMiwzMiw3MywxMDIsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAwLAotICAgIDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDk5LDExMSwxMTAsMTAyLAotICAgIDExMSwxMTQsMTA5LDMyLDExNiwxMTEsMzIsODAsNjksODAsMzIsNTEsNDksNTIsNTUsMzIsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0NCwzMiw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsCi0gICAgMTAwLDQ2LDMyLDczLDEwMiwxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksCi0gICAgMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKLSAgICAxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LDM2LDAsMCwwLDExNSwxMjEsMTE1LAotICAgIDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0NiwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMzcsMCwwLDAsMTIzLDEyNSwzMiwxMTAsMTExLDExNiwzMiw5OCwxMTEsMTE2LAotICAgIDExNiwxMTEsMTA5LDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwKLSAgICAxMTEsMTE0LDEyMSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDExNywxLDAsMCwwLAotICAgIDQ2LDEwNSwyLDAsMCwwLDExNywyOCwwLDAsMCwxMDEsMTIwLDExMiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwKLSAgICAxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDEwNSwwLDAsMCwwLDc4LDQwLDEzLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywxNCwwLDAsMCwxMDUsCi0gICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMTE3LDksMCwKLSAgICAwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDExNyw0LDAsMCwwLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDgsMCwwLAotICAgIDAsOTUsODAsODksNjcsNjUsNjcsNzIsNjksMTE3LDEwLDAsMCwwLDg2LDk3LAotICAgIDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsOSwwLAotICAgIDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxMCwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LDE1LDAsMCwwLDgzLAotICAgIDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQwLDUsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLAotICAgIDAsMTA0LDEwMSw5NywxMDAsMTE3LDE2LDAsMCwwLDExMiwxMjEsOTksOTcsOTksMTA0LAotICAgIDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLAotICAgIDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMywwLDAsMCw5OCw5NywxMTUsMTAxLDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAotICAgIDEwMiwxMTQsMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDE4NiwxLDAsMCwxMTUsMjQsCi0gICAgMCwwLDAsMCw5LDE4LDEsMTUsMSwxOCwxLDE4LDEsMTIsMSw5LAotICAgIDEsMTgsMSwyMSwxLDksMSwxNSwxLDE5LDEsMTE3LDE3LDAsMCwwLAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTMsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2NCwwLDAsMCwxMTYsMCwwLDEyNCwwLAotICAgIDAsMTMxLDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIyLDAsMTAwLDYsMCwKLSAgICA4MywxMjQsMCwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwKLSAgICAxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyLDExNSw4MSwwLAotICAgIDEyNCwzLDAsMTA2LDMsMCwxMzEsMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzMsCi0gICAgMiwwLDI1LDEwMCw1LDAsMTA3LDMsMCwxMTQsODUsMCwxMjQsMCwwLDgzLAotICAgIDEyMSwxNiwwLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw0LDAsODcsCi0gICAgMTEwLDQwLDAsNCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwxMDcsMTAsMCwKLSAgICAxMTQsMTQzLDAsMSwxLDEsMTI0LDAsMCwxMDAsNiwwLDEwMCw5LDAsMTMzLAotICAgIDIsMCwyNSwxMjUsNCwwLDg5LDExMCwxLDAsODgsMTE2LDcsMCwxMjQsNCwKLSAgICAwLDEzMSwxLDAsMTE0LDE2MCwwLDEyNCw0LDAsODMsMTI0LDAsMCw4Myw0MCwKLSAgICAxMCwwLDAsMCwxMTcsMTg4LDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LAotICAgIDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTA1LDEwMiwzMiwxMTIsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTE1LDMyLAotICAgIDExMiwxMTcsMTE0LDEwMSwxMDgsMTIxLDMyLDEwMiwxMTEsMTE0LDMyLDk4LDk3LDk5LDEwNywxMTksCi0gICAgOTcsMTE0LDEwMCwxMTUsNDUsOTksMTExLDEwOSwxMTIsOTcsMTE2LDEwNSw5OCwxMDUsMTA4LDEwNSwKLSAgICAxMTYsMTIxLDMyLDEwMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDgwLDEyMSw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDk1LDY5LDEyMCwxMDEsOTksNjcsMTExLDEwMCwxMDEsNzcsMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw4NywxMDUsMTE2LDEwNCw3MCwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsNDAsCi0gICAgNDEsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw2NywzMiw2NSw4MCw3Myw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMywwLDAsMCwxMDUsMSwwLDAsMCwxMTcsMiwwLDAsMCwxMTIsCi0gICAgMTIxLDc4LDEwNSwyNTMsMjU1LDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSwxMDUsMjU1LDI1NSwyNTUsCi0gICAgMjU1LDQwLDgsMCwwLDAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LAotICAgIDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LAotICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTAsCi0gICAgMCwwLDAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMiwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw0MCw1LAotICAgIDAsMCwwLDExNywxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMTQsMTAxLDExNSwxMTYsMTE3LDEsCi0gICAgMCwwLDAsOTUsMTE3LDksMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsCi0gICAgMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LAotICAgIDEwOCwxMDEsMjA5LDEsMCwwLDExNSwyMCwwLDAsMCwwLDcsMTgsMSw0LAotICAgIDEsMjQsMSwzNSwxLDQsMSwzLDEsMTYsMSwxOSwxLDIxLDEsMTE3LAotICAgIDE1LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLAotICAgIDEwNSwxMDgsMTAxLDExNyw5LDAsMCwwLDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTA1LDExNiwKLSAgICAxMjEsMTA1LDEsMCwwLDAsOTksMSwwLDAsMCwxLDAsMCwwLDMsCi0gICAgMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsODEsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsNSwwLDExNCwKLSAgICA3NywwLDEyNCwwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLDAsMTE1LDQ2LAotICAgIDAsMTAwLDMsMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTEwLDAsMCwxMTYsNCwKLSAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMiwwLDE0MCwwLDAsMTAwLDQsMCwKLSAgICAxMTYsMCwwLDEwNiw2LDAsMTMxLDEsMSwxLDExMCwwLDAsMTAwLDUsMCwKLSAgICA4Myw0MCw3LDAsMCwwLDExNyw2MSwwLDAsMCw4MCwxMTQsMTA1LDExMCwxMTYsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwKLSAgICAxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCwKLSAgICA3Miw3OSw3OCw4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsCi0gICAgMTE0LDExMCwxMDEsMTAwLDMyLDExMSwxMTAsNDYsMTE3LDEsMCwwLDAsMzUsMTE3LDcsCi0gICAgMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTE3LDIsMCwwLDAsMzUsCi0gICAgMzIsMTE3LDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDc4LDQwLDIsMCwwLDAsCi0gICAgMTE3LDEsMCwwLDAsMzUsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsNDAsNywwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgNSwwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDcsMCwwLDAsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LDExNiwxMTUsCi0gICAgMTE5LDEwNSwxMTYsMTA0LDExNyw1LDAsMCwwLDExMiwxMTQsMTA1LDExMCwxMTYsMTE3LDYsCi0gICAgMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNiwwLDAsMCwxMTUsMTE2LAotICAgIDEwMCwxMDEsMTE0LDExNCw0MCwzLDAsMCwwLDExNyw3LDAsMCwwLDEwOSwxMDEsCi0gICAgMTE1LDExNSw5NywxMDMsMTAxLDExNyw5LDAsMCwwLDExOCwxMDEsMTE0LDk4LDExMSwxMTUsCi0gICAgMTA1LDExNiwxMjEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMjI4LDEsMCwKLSAgICAwLDExNSw4LDAsMCwwLDAsMiwxOCwxLDE1LDEsMTMsMSwxMTcsMTYsCi0gICAgMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LAotICAgIDk3LDEwMywxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLAotICAgIDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsCi0gICAgMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzOSwwLDAsMCw4MywxMDEsMTE2LDMyLDk1LDk1LAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNDYsOTksMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNCwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsMTAxLDAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDE0MiwwLDAsMTI1LDIsMCwxMTYsMCwwLDEyNCwyLDAsCi0gICAgMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwKLSAgICA5NywwLDEyNCwyLDAsMTA2LDIsMCwxMjQsMiwwLDk1LDMsMCwxMTYsNCwKLSAgICAwLDEyNCwyLDAsMTAwLDIsMCwxMzEsMiwwLDExNSw5NywwLDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMDYsNSwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNCwwLDI1LAotICAgIDEyNCwyLDAsOTUsMywwLDExMyw5NywwLDExMCwwLDAsMTI0LDIsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsNDAsNiwKLSAgICAwLDAsMCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNywKLSAgICA5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDYsCi0gICAgMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsCi0gICAgMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsCi0gICAgMjM4LDEsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwyNCwxLDEyLAotICAgIDEsMTUsMSwzMSwxLDExNyw0MCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsCi0gICAgMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE5LAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksCi0gICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMjM2LDEsMCwwLDExNSw2LAotICAgIDAsMCwwLDAsMiwxOCw3LDEzLDEsMTE3LDExLDAsMCwwLDExNSwxMDEsCi0gICAgMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LAotICAgIDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LAotICAgIDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLAotICAgIDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LDM4LDAsMCwwLAotICAgIDgzLDEwMSwxMTYsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwzMiwxMTEsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDQsCi0gICAgMCwwLDAsNCwwLDAsMCwzMSwwLDAsMCwxMTUsNDksMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxNDIsMSwwLDEyNSwKLSAgICAzLDAsMTE2LDAsMCwxMjQsMywwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMjQsMCwwLDEyNCwzLDAsOTUsMSwwLDExMCwwLDAsMTI0LDMsMCwKLSAgICA4Myw0MCwyLDAsMCwwLDc4LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMjUxLDEsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LDEsMTIsMSwxMTcsCi0gICAgMzgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNywKLSAgICA1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAyNDksMSwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAorICAgIDExNCwxMTAsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMTAsCisgICAgMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsCisgICAgMzIsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMDAsMzIsMTE2LDExMSwzMiw5OSwKKyAgICAxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LAorICAgIDMyLDMyLDczLDEwMiwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDAsMTExLDEwMSwxMTUsMTAsMzIsCisgICAgMzIsMzIsMzIsMTEwLDExMSwxMTYsMzIsOTksMTExLDExMCwxMDIsMTExLDExNCwxMDksMzIsMTE2LAorICAgIDExMSwzMiw4MCw2OSw4MCwzMiw1MSw0OSw1Miw1NSwzMiwxMDIsMTExLDExNCwxMDksOTcsCisgICAgMTE2LDQ0LDMyLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA1LAorICAgIDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMzIsNzMsMTAyLAorICAgIDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwKKyAgICAxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywKKyAgICAxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNzgsCisgICAgMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LDExNCwKKyAgICAxMTEsMTE0LDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw3OCwxMjIsMzYsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LAorICAgIDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDEyMiwzNywxMjMsMTI1LDMyLDExMCwKKyAgICAxMTEsMTE2LDMyLDk4LDExMSwxMTYsMTE2LDExMSwxMDksNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwKKyAgICAxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsMTE0LDExNiwwLDAsMCwxMTQsMTE1LDAsMCwwLDEyMiwyOCwxMDEsMTIwLDExMiwKKyAgICAxMDEsOTksMTE2LDEwMSwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LAorICAgIDExNSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDExNCw4NCwwLDAsMCw0MSwxMiwKKyAgICAxMTQsNywwLDAsMCwxMTQsMTIyLDAsMCwwLDExNCwxMjMsMCwwLDAsMTE0LAorICAgIDEyNCwwLDAsMCwxMTQsMzgsMCwwLDAsMTE0LDEyNSwwLDAsMCwyMTgsMTAsCisgICAgODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywwLDAsMCwxMTQsCisgICAgODksMCwwLDAsMTE0LDEyMSwwLDAsMCwxMTQsMjgsMCwwLDAsMjE4LDE1LAorICAgIDgzLDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLAorICAgIDUsMTE0LDM1LDAsMCwwLDExNCwxMjgsMCwwLDAsOTAsMTYsMTEyLDEyMSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5MCw3LDExMiwKKyAgICAxMjEsOTksOTcsOTksMTA0LDEwMSwxMTQsMTI5LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNywxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIwNywxLDAsCisgICAgMCwxMTUsMjQsMCwwLDAsMCw5LDE4LDEsMTUsMSwxOCwxLDE4LDEsCisgICAgMTIsMSwzLDEsMjQsMSwyMSwxLDMsMSwyMSwxLDE5LDEsMTE0LDEzNSwKKyAgICAwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKKyAgICAxMywwLDAsMCw2NywwLDAsMCwxMTUsMTY0LDAsMCwwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjIsMCwxMDAsCisgICAgMiwwLDgzLDEyNCwwLDAsMTA2LDEsMCwxMDAsMywwLDEzMSwxLDAsOTIsCisgICAgMywwLDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTIsMTE1LAorICAgIDgxLDAsMTI0LDMsMCwxMDYsMiwwLDEzMSwwLDAsMTAwLDcsMCwxMDAsOCwKKyAgICAwLDEzMywyLDAsMjUsMTAwLDYsMCwxMDcsMywwLDExNCw4NSwwLDEyNCwwLAorICAgIDAsODMsMTIxLDE2LDAsMTE2LDMsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsCisgICAgMCw4NywxMTAsNDAsMCw0LDExNiw0LDAsMTE2LDUsMCwxMDIsMiwwLDEwNywKKyAgICAxMCwwLDExNCwxNDMsMCwxLDEsMSwxMjQsMCwwLDEwMCwyLDAsMTAwLDksCisgICAgMCwxMzMsMiwwLDI1LDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMTYsNiwwLAorICAgIDEyNCw0LDAsMTMxLDEsMCwxMTQsMTYwLDAsMTI0LDQsMCw4MywxMjQsMCwwLAorICAgIDgzLDQxLDEwLDEyMiwxODgsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsOTcsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiw0MCwxMDUsMTAyLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSw0MSwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwKKyAgICAxMTYsMTA1LDExMSwxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMTUsMzIsMTEyLDExNywxMTQsMTAxLAorICAgIDEwOCwxMjEsMzIsMTAyLDExMSwxMTQsMzIsOTgsOTcsOTksMTA3LDExOSw5NywxMTQsMTAwLDExNSwKKyAgICA0NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LDEwNSwxMDgsMTA1LDExNiwxMjEsMzIsMTAyLAorICAgIDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsODAsMTIxLDczLDEwOSwxMTIsMTExLDExNCwxMTYsOTUsCisgICAgNjksMTIwLDEwMSw5OSw2NywxMTEsMTAwLDEwMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDg3LDEwNSwKKyAgICAxMTYsMTA0LDcwLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNSw0MCw0MSwzMiwxMDUsMTEwLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDY3LDMyLDY1LDgwLDczLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDExNCw4NCwwLDAsMCw3OCwxMTQsMTE2LDAsMCwwLDIzMywzLDAsMCwKKyAgICAwLDExNCwyOSwwLDAsMCw5MCwyLDExMiwxMjEsMjMzLDI1MywyNTUsMjU1LDI1NSwyMzMsCisgICAgMjU1LDI1NSwyNTUsMjU1LDExNCwxMzgsMCwwLDAsNDEsNywxMTQsMzEsMCwwLDAsCisgICAgMTE0LDMyLDAsMCwwLDIxOCw1LDEwOCwxMTEsMTE5LDEwMSwxMTQsMTE0LDEzNSwwLDAsCisgICAgMCwxMTQsMTI0LDAsMCwwLDExNCwxMzMsMCwwLDAsMTE0LDQ0LDAsMCwwLAorICAgIDQxLDUsMjE4LDEzLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsCisgICAgMTA0LDkwLDQsMTE0LDEwMSwxMTUsMTE2LDExNCwzNiwwLDAsMCw5MCw5LDEwMSwxMjAsCisgICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDIxOCwxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDEwMiwxMDUsMTA4LDEwMSwyMzAsMSwwLDAsMTE1LDIwLDAsMCwwLDAsNywxOCwKKyAgICAxLDQsMSwyNCwxLDM1LDEsNCwxLDMsMSwxNiwxLDE5LDEsMjEsCisgICAgMSwxMTQsMTQyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLAorICAgIDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw2MCwwLDAsMCwKKyAgICAxMjEsMTksMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMDYsMSwwLDEyNSwKKyAgICAxLDAsODcsMTEwLDI0LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0NSwwLAorICAgIDEsMSwxLDEwMCwxLDAsMTI1LDEsMCw4OSwxMTAsMSwwLDg4LDEyNCwxLAorICAgIDAsMTAwLDIsMCw3OSwxMjUsMSwwLDEyNCwxLDAsODMsNDEsMywxMjIsNTEsCisgICAgNjcsOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMDEsMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwzMiwxMDIsCisgICAgMTExLDExNCwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LAorICAgIDEwOCwxMDEsNDYsMTA1LDE4MiwxLDAsMCwyMzMsMTI4LDAsMCwwLDQxLDMsMTE0LAorICAgIDM5LDAsMCwwLDExNCw0MSwwLDAsMCwxMTQsNDAsMCwwLDAsNDEsMiwKKyAgICAxMTQsMzUsMCwwLDAsMTE0LDQyLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCw5NSw5OSw5NywxMDgsOTksCisgICAgOTUsMTA5LDExMSwxMDAsMTAxLDI0OSwxLDAsMCwxMTUsMTIsMCwwLDAsMCwyLAorICAgIDMsMSwxOSwxLDEzLDEsMTEsMywxMCwxLDExNCwxNDQsMCwwLDAsMjE4LAorICAgIDksMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDUsMTE2LDEyMSwxMTQsMjksMCwwLDAsOTksCisgICAgMSwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsNCwwLDAsMCwKKyAgICA3MSwwLDAsMCwxMTUsODEsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwKKyAgICAyLDAsMTI0LDEsMCwxMDcsNSwwLDExNCw3NywwLDEyNCwwLDAsMTA2LDMsCisgICAgMCwxMDAsNiwwLDEzMSwxLDAsMTE1LDQ2LDAsMTAwLDMsMCwxMjQsMCwwLAorICAgIDIzLDEyNSwwLDAsMTEwLDAsMCwxMTYsNCwwLDEyNCwwLDAsMTA2LDUsMCwKKyAgICAxMjQsMiwwLDE0MCwwLDAsMTAwLDQsMCwxMTYsMCwwLDEwNiw2LDAsMTMxLAorICAgIDEsMSwxLDExMCwwLDAsMTAwLDUsMCw4Myw0MSw3LDEyMiw2MSw4MCwxMTQsCisgICAgMTA1LDExMCwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsCisgICAgMTE2LDExMSwzMiwxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0NywKKyAgICA4MCw4OSw4NCw3Miw3OSw3OCw4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LAorICAgIDMyLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDExMSwxMTAsNDYsMjUwLDEsMzUsMjUwLDcsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTIyLDIsMzUsMzIsMTE0LDU0LDAsMCwwLAorICAgIDc4LDQxLDIsMTE0LDE0NiwwLDAsMCwxMTQsMTQ3LDAsMCwwLDQxLDcsMTE0LAorICAgIDcsMCwwLDAsMTE0LDExNywwLDAsMCwyMTgsNywxMTgsMTAxLDExNCw5OCwxMTEsCisgICAgMTE1LDEwMSwxMTQsOSwwLDAsMCwyMTgsNSwxMTIsMTE0LDEwNSwxMTAsMTE2LDExNCw0NywKKyAgICAwLDAsMCwyMTgsNiwxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCw0MSwzLDIxOCw3LDEwOSwKKyAgICAxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNCwxNDUsMCwwLDAsMTE0LDgwLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxNiw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLAorICAgIDEwMSw1LDIsMCwwLDExNSw4LDAsMCwwLDAsMiwxOCwxLDE1LDEsCisgICAgMTMsMSwxMTQsMTUyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICAyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwxMTUsMzgsMCwwLAorICAgIDAsMTAwLDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywwLAorICAgIDEzNCwxLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsCisgICAgMiwwLDEsMTI0LDEsMCw4Myw0MSw0LDEyMiwyNTIsNjgsMTAxLDk5LDExMSwxMTQsCisgICAgOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsCisgICAgMTA0LDk3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwKKyAgICAxMDEsMTA1LDExMCwxMDMsMzIsMTE0LDEwMSwxMTMsMTE3LDEwMSwxMTUsMTE2LDEwMSwxMDAsMzIsMTA5LAorICAgIDk3LDExNiw5OSwxMDQsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTEsMTEwLDEwMSwzMiwxMTYsCisgICAgMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LAorICAgIDExMCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LAorICAgIDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LDExNiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwKKyAgICAxMTYsMzIsNDAsMTE1LDEwMSwxMDgsMTAyLDQxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiwxMDAsMTAxLAorICAgIDEwMiwxMDUsMTEwLDEwMSwzMiw5NSwxMTAsOTcsMTA5LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5OSwxMTEsMTEwLDEwMCwzMiw5NywxMTQsMTAzLDExNywKKyAgICAxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTA5LDExMiwKKyAgICA5NywxMTQsMTAxLDEwMCwzMiw5NywxMDMsOTcsMTA1LDExMCwxMTUsMTE2LDQ2LDMyLDczLDEwMiwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMTEsMTA5LDExMiw5NywxMTQsMTA1LDExNSwxMTEsMTEwLDMyLAorICAgIDEwMiw5NywxMDUsMTA4LDExNSwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNzMsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCw0LDAsMCwwLDUsMCwwLDAsMzEsMCwwLDAsMTE1LDgzLDAsCisgICAgMCwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyNCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMjUsMSwwLDExMCw0MCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMjQsMSwwLDEwNywzLDAsMTE0LDY0LDAsMTE2LDEsMCwxMDAsMSwwLDEyNCwKKyAgICAxLDAsMjIsMTAwLDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsCisgICAgMCwwLDEzNiwwLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsCisgICAgMCwxNDIsMiwwLDgzLDQxLDMsNzgsMTIyLDIzLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMzcsCisgICAgMTE1LDExNCw2NywwLDAsMCw0MSwyLDExNCw2NywwLDAsMCwyMTgsMTEsNzMsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsNDEsNCwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDY3LDAsMCwwLDExNCw4MCwwLDAsMCwxMTQsMTA4LDAsMCwwLAorICAgIDQxLDEsMjE4LDYsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDE5LDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksCisgICAgMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDIxLDIsMCwwLDExNSwxMCwwLAorICAgIDAsMCwwLDEsMTIsMSwxMiwxLDE1LDEsMjUsMSwxMjIsNDAsOTUsOTksCisgICAgMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsCisgICAgMTE1LDYyLDQ2LDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDk1LDExOSwKKyAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsMCwwLDQxLDIsMTE0LAorICAgIDE1NCwwLDAsMCwxMTQsMTU1LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsCisgICAgMTE0LDE1NCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsOTksMTA0LDEwMSwKKyAgICA5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTMsMiwwLDAsMTE1LDYsMCwwLDAsCisgICAgMCw4LDIxLDYsMTMsMSwxMTQsMTU2LDAsMCwwLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKKyAgICAxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsCisgICAgMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsCisgICAgMTMxLDIsMCwxLDEyNCwxLDAsODMsNDEsMywxMjIsNDksNjgsMTAxLDk5LDExMSwKKyAgICAxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTA1LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0Niw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDE5LDAsCisgICAgMCwwLDExNSw1OCwwLDAsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwKKyAgICAxMDcsNywwLDExNCw0NSwwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDEyNCwKKyAgICAxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwKKyAgICA4Myw0MSwzLDc4LDEyMiwyOSwxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDk3LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDExNCw2NywwLDAsMCw0MSw0LDExNCw3LDAsMCwwLDIxOCwKKyAgICAyMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTE0LDE1MywwLDAsMCwxMTQsNDcsMCwwLDAsNDEsCisgICAgMiwxMTQsNzEsMCwwLDAsMjE4LDgsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAorICAgIDQxLDEsMjE4LDMsMTAyLDEyMCwxMTAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDI1LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMzMsMiwwLDAsCisgICAgMTE1LDgsMCwwLDAsMCwxLDE1LDEsMTgsMSwxMiwxLDEyMiw1Miw5NSwKKyAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAorICAgIDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsMTA1LAorICAgIDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLAorICAgIDExMiwxMDEsMTE0LDQxLDEsMTE0LDY1LDAsMCwwLDQxLDIsMTE0LDE1OSwwLDAsCisgICAgMCwxMTQsMTYwLDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDE1OSwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwzMSwyLDAsMCwxMTUsNiwKKyAgICAwLDAsMCwwLDIsMTgsNSwxMywxLDExNCwxNjEsMCwwLDAsOTksMSwKICAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLAogICAgIDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCiAgICAgMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsCi0gICAgMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCwzLDAsMCwwLAotICAgIDExNyw0MiwzLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsCi0gICAgMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMTE1LDEwMSwxMDgsMTAxLDk5LDExNiwxMDUsCi0gICAgMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMTIsMTE0LDExMSwxMTIsMTAxLDExNCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCwKLSAgICA5NywxMTYsMTAxLDEwMCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTA1LDExNSwKLSAgICAzMiwxMTIsOTcsMTE1LDExNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywKLSAgICAxMDAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTAsOTcsMTA5LDEwMSw0NiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsCi0gICAgMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTUsMTIxLAotICAgIDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMTE2LDMyLDk3LDEwOCwxMTQsMTAxLDk3LDEwMCwxMjEsMzIsMTAxLDEyMCwxMDUsMTE1LAotICAgIDExNiwxMTUsMzIsMTExLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTE5LDQ0LDMyLDExNiwxMDQsMTAxLAotICAgIDExMCwzMiw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwxMDUsCi0gICAgMTE1LDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTE0LDExNSwxMTYsMzIsCi0gICAgOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDQsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA5NSw5NSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDQ0LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsOTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsMzIsOTcsOTksCi0gICAgOTksMTExLDExNCwxMDAsMTA1LDExMCwxMDMsMTA4LDEyMSwzMiw0MCwxMDUsMTAyLDMyLDExNSwxMDEsCi0gICAgMTA4LDEwMiw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCw0MSwzMiwKLSAgICAxMDUsMTE1LDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCw0MSwzMiwxMTksMTA1LDEwOCwxMDgsCi0gICAgMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDIsMTExLAotICAgIDExNCwxMDEsMzIsMTA1LDExNiwzMiwxMDUsMTE1LDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsCi0gICAgMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDEwMSwxMDAsCi0gICAgMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLAotICAgIDEwMCwxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsMTExLDExNiwzMiwxMTksMTExLDExNCwKLSAgICAxMDcsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDMyLAotICAgIDExMiwxMTEsMTE1LDExNiw0NSwxMDgsMTExLDk3LDEwMCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw3MywxMDIsMzIsOTcsMTEwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsCi0gICAgMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDMyLDk3LDExMCwxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsCi0gICAgOTcsMTE2LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTA1LDExNiwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDExNSwxMTcsOTgsMTE1LDEwMSwxMTMsCi0gICAgMTE3LDEwMSwxMTAsMTE2LDEwOCwxMjEsMzIsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDMyLDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsCi0gICAgMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsCi0gICAgMTE2LDExMSwxMTQsMzIsOTcsMTE1LDExNSwxMTcsMTA5LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMDEsMTAwLDMyLDEwMiwKLSAgICAxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTYsOTcsMTA3LDEwMSwxMTUsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsOTcsMTE1LAotICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsOTksMTExLDExMCwxMDAsMzIsCi0gICAgOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCw3LDAsMCwwLDI1LDAsMCwwLAotICAgIDMxLDAsMCwwLDExNSwyNTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTI0LDQsMCwxMDAsMCwKLSAgICAwLDEwNyw5LDAsMTI1LDUsMCwxMjQsNSwwLDExNSwxNjgsMCwxMTYsNCwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsNCwwLDEwMCwzLDAsMTI0LDQsMCw5NSwKLSAgICA2LDAsMTI0LDQsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MCwxMjQsCi0gICAgMCwwLDEyNCw0LDAsOTUsNywwLDEyMSwxOSwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDYsMCw4NywxMTAsMjQsMCw0LDExNiwKLSAgICA5LDAsMTE2LDEwLDAsMTAyLDIsMCwxMDcsMTAsMCwxMTQsMTI0LDAsMSwxLAotICAgIDEsODksMTEzLDE3NywwLDg4LDEyNCw2LDAsMTE0LDE0MywwLDEyNCwxLDAsMTI0LAotICAgIDQsMCw5NSwxMSwwLDExMywxNzcsMCwxMjQsMSwwLDEwNiwxMiwwLDEwMCwxLAotICAgIDAsMTMxLDEsMCwxMDAsMiwwLDI1LDEyNCw0LDAsOTUsMTEsMCwxMTAsOSwKLSAgICAwLDEwMCwzLDAsMTI0LDQsMCw5NSw2LDAsMTIyLDYwLDAsMTIxLDIzLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCw0LDAsMTI0LDIsMCwxMjQsMywwLDE0MiwKLSAgICAyLDAsODMsODcsMTEwLDMwLDAsMSwxLDEsMTI0LDUsMCwxMTUsMjI4LDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjEsMTEwLDAsMCwxMzAsMCwwLAotICAgIDg5LDExMCwxLDAsODgsODcsMTAwLDAsMCwxMDAsNCwwLDEyNCw0LDAsOTUsCi0gICAgNiwwLDg4LDEwMCwwLDAsODMsNDAsNSwwLDAsMCw3OCwxMTcsMSwwLAotICAgIDAsMCw0NiwxMDUsMCwwLDAsMCw4NCw3MCw0MCwxNCwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwwLDAsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw0LDAsMCwwLDg0LDExNCwxMTcsMTAxLDExNywxNiwwLDAsCi0gICAgMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsCi0gICAgMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwKLSAgICAxMTAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsNDAsNywwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk3LDExNCwxMDMsMTE1LDExNywKLSAgICA2LDAsMCwwLDEwNywxMTksOTcsMTE0LDEwMywxMTUsMTE3LDYsMCwwLDAsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDksMCwwLDAsMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwKLSAgICAxMTEsOTcsMTAwLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDExMiwxMDEsMTE0LDIyLDIsMCwwLDExNSw0NCwwLDAsMCwwLDEsMTgsCi0gICAgMSwxMiwxLDYsNCwxMiwzLDksMSwxMywxLDksMSwzLDEsMTksCi0gICAgMSwxOSwxLDUsMiw2LDEsMTIsMiwyNSwyLDksMSw2LDIsMjMsCi0gICAgMSwzLDEsNiwxLDEzLDEsMTIsMiwxMTcsNTIsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsCi0gICAgMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI1LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsCi0gICAgMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw0LDIsMCwwLDExNSw2LDAsMCwwLDAsCi0gICAgMTgsMTgsMzMsMTMsMSwxMTcsMTcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsCi0gICAgMTE1LDM4LDAsMCwwLDEwMCwzLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLAotICAgIDAsMTAwLDIsMCwxMzQsMSwwLDEyNSwxLDAsMTE2LDEsMCwxMjQsMSwwLAotICAgIDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsNCwwLDAsMCwKLSAgICAxMTcsMjUyLDAsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwKLSAgICAxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCw5NywxMTYsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLDExNCwKLSAgICAxMDEsMTEzLDExNywxMDEsMTE1LDExNiwxMDEsMTAwLDMyLDEwOSw5NywxMTYsOTksMTA0LDEwMSwxMTUsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTExLDExMCwxMDEsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5OSw5NywxMTAsMzIsMTA0LDk3LDExMCwxMDAsCi0gICAgMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMiwxMDUsMTE0LAotICAgIDExNSwxMTYsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDQwLDExNSwxMDEsMTA4LAotICAgIDEwMiw0MSwzMiwxMDksMTE3LDExNSwxMTYsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMzIsOTUsCi0gICAgMTEwLDk3LDEwOSwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwKLSAgICAxMDEsOTksMTExLDExMCwxMDAsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDEwNSwKLSAgICAxMTUsMTAsMzIsMzIsMzIsMzIsOTksMTExLDEwOSwxMTIsOTcsMTE0LDEwMSwxMDAsMzIsOTcsCi0gICAgMTAzLDk3LDEwNSwxMTAsMTE1LDExNiw0NiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsOTksCi0gICAgMTExLDEwOSwxMTIsOTcsMTE0LDEwNSwxMTUsMTExLDExMCwzMiwxMDIsOTcsMTA1LDEwOCwxMTUsMzIsCi0gICAgMTE2LDEwNCwxMDEsMTEwLDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw1LDAsCi0gICAgMCwwLDMxLDAsMCwwLDExNSw4MywwLDAsMCwxMjQsMSwwLDEwMCwwLAotICAgIDAsMTA3LDgsMCwxMTQsMjQsMCwxMjQsMCwwLDEwNiwxLDAsMTI1LDEsMCwKLSAgICAxMTAsNDAsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMDcsMywwLDExNCwKLSAgICA2NCwwLDExNiwyLDAsMTAwLDEsMCwxMjQsMSwwLDIyLDEwMCwyLDAsMTI0LAotICAgIDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLAotICAgIDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLDIsMCw4Myw0MCwzLAotICAgIDAsMCwwLDc4LDExNywyMywwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLAotICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDM3LDExNSwKLSAgICAxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCwzLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLAotICAgIDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICA0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwKLSAgICAxMTcsNiwwLDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDQwLDEsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE5LDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDY3LDIsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwwLDEsMTIsMSwxMiwxLDE1LDEsMjUsMSwxMTcsNDAsMCwKLSAgICAwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsNDYsNjAsMTA4LAotICAgIDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDc4LDQwLDIsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsOTUsMTE5LAotICAgIDExNCw5NywxMTIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwxMTcsMTksMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsMCwKLSAgICA0MCwxLDAsMCwwLDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsNTksMiwwLDAsMTE1LDYsMCwwLDAsMCw4LDIxLDYsMTMsCi0gICAgMSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLAotICAgIDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLAotICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLAotICAgIDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCwzLAotICAgIDAsMCwwLDExNyw0OSwwLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLAotICAgIDExNCwzMiwxMTYsMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDExMCw5NywxMDksMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLAotICAgIDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LAotICAgIDAsMCwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw3LDAsMTE0LAotICAgIDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDEwMCwyLDAsMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDQwLDMsMCwKLSAgICAwLDAsNzgsMTE3LDI3LDAsMCwwLDEyMywxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLAotICAgIDExNiwzMiw5NywzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw0LDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywyMCwwLDAsMCw5OCwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTUsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsMiwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTAyLDEyMCwxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNzksMiwwLDAsMTE1LDgsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTgsMSwxMiwxLDExNyw1MiwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsCi0gICAgMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDExMywxMTcsCi0gICAgMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDExMiwxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LAotICAgIDExNCw5NywxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwKLSAgICAxMTcsMjUsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLAotICAgIDAsMCwwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LAotICAgIDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDc3LDIsMCwwLDExNSw2LDAsMCwKLSAgICAwLDAsMiwxOCw1LDEzLDEsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLDAsCi0gICAgMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwKLSAgICAxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTM2LAotICAgIDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCwzLDAsMCwwLDExNywKLSAgICA0NywwLDAsMCw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsMTExLAotICAgIDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLAotICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDQsMCwwLDAsMTksMCwwLDAsMTE1LDU4LDAsMCwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE1LDQ1LDAsMTE2LDIsMCwxMDAsCi0gICAgMSwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwyLDAsMTI0LDEsCi0gICAgMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwwLDAsCi0gICAgMTI0LDEsMCwxMzEsMiwwLDgzLDQwLDMsMCwwLDAsNzgsMTE3LDI1LDAsCi0gICAgMCwwLDEyMywxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsMiwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywKLSAgICAxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsCi0gICAgMTAyLDEyMCwxMTAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI0LDAsMCwwLDk1LAotICAgIDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsCi0gICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsOTAsMiwwLDAsMTE1LDgsMCwwLDAsCi0gICAgMCwxLDE1LDEsMTgsMSwxMiwxLDExNyw1MCwwLDAsMCw5NSwxMTQsMTAxLAorICAgIDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDEsMywxMjIsNDcsNjgsCisgICAgMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsCisgICAgMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDE5LAorICAgIDAsMCwwLDExNSw1OCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsCisgICAgMCwxMzEsMSwwLDExNSw0NSwwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLAorICAgIDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsCisgICAgMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsCisgICAgMCw4Myw0MSwzLDc4LDEyMiwyNywxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwKKyAgICAxMTEsMTE2LDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNCw2NywwLDAsMCw0MSw0LDExNCwxMDYsMCwwLDAsMjE4LDksCisgICAgMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTQsMTUzLDAsMCwwLDExNCw0NywKKyAgICAwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDQxLAorICAgIDEsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsMjQsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsCisgICAgMTAxLDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0NCwyLDAsMCwxMTUsOCwKKyAgICAwLDAsMCwwLDEsMTUsMSwxOCwxLDEyLDEsMTIyLDUwLDk1LDExNCwxMDEsCiAgICAgMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LAogICAgIDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsCi0gICAgMSwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTksMTE0LDk3LDExMiw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyNCwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMSwwLAotICAgIDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsODgsMiwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLAotICAgIDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwKLSAgICAwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDgzLDAsCi0gICAgMTE2LDIsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDEsMCwxMjUsCi0gICAgNCwwLDExNiwzLDAsMTA2LDQsMCwxMjQsNCwwLDEwNiw1LDAsMTI0LDMsCi0gICAgMCwxMDAsMiwwLDI1LDEzMSwxLDAsMTE2LDYsMCwxMzEsMiwwLDEsMTEwLAotICAgIDAsMCwxMjQsMiwwLDgzLDQwLDQsMCwwLDAsMTE3LDg2LDAsMCwwLAotICAgIDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKLSAgICA5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEyMSwKLSAgICAzMiwxMDAsMTAxLDEwOCwxMDEsMTAzLDk3LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLAotICAgIDMyLDMyLDMyLDExNSwxMDEsMTA4LDEwMiw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0MCw0MSw0NiwxMTcsNDQsMCwwLDAsNzgsMTExLDExNiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEyMywxMjUsNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMDUsMCwwLDAsMCw3OCw0MCw3LDAsCi0gICAgMCwwLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwKLSAgICAxMDgsMTAxLDExMCwxMTcsOSwwLDAsMCw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywKLSAgICAxMTUsMTE3LDQsMCwwLDAsMTE5LDk3LDExNCwxMTAsMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMTMsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA4Nyw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDQwLDUsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw4LDAsCi0gICAgMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsMTE3LDMsMCwwLDAsMTA5LAotICAgIDExNSwxMDMsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LAotICAgIDExNSwxMDQsMTA1LDEwOSw5OSwyLDAsMCwxMTUsMTAsMCwwLDAsMCw2LDIxLAotICAgIDEsMjQsMSw2LDEsMzIsMSwxMTcsMTcsMCwwLDAsOTUsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDQsMTA1LDEwOSw5OSwxLDAsCi0gICAgMCwwLDAsMCwwLDAsMSwwLDAsMCw2LDAsMCwwLDY2LDAsCi0gICAgMCwwLDExNSwxNzMsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsCi0gICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLAotICAgIDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSwKLSAgICA0LDAsMTAwLDE0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwxLDAsMTMxLDEsCi0gICAgMCw5MCw3LDAsMTAxLDQsMCwxMDEsOCwwLDEwMSw5LDAsMTAxLDEwLDAsCi0gICAgMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMSwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDgsCi0gICAgMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsMSwwLDkwLDEyLDAsCi0gICAgMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMywwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEyLAotICAgIDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTQsMCwKLSAgICAxMDAsMTQsMCw4Myw0MCwxNSwwLDAsMCwxMTcsMTUsMCwwLDAsNjYsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNDQsMCwKLSAgICAwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsMTA4LAotICAgIDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsMTA1LAotICAgIDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwxMTYsCi0gICAgOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwzMiwKLSAgICA5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLDExNiwKLSAgICAxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LDExNiwKLSAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwxMDYsCi0gICAgMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQwLDIsMCwwLAotICAgIDAsNzgsMTE3LDI0LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDM5LAotICAgIDEyMywxMjUsMzksMzIsNDAsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsNjIsNDAsCi0gICAgMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywKLSAgICA4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLDIsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgMTI1LDIsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjcsMCwwLDAsCisgICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsCisgICAgMSwxMTQsNjUsMCwwLDAsNDEsMiwxMTQsMTU5LDAsMCwwLDExNCwxNjMsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsNDEsMSwxMTQsMTU5LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNiw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDQyLDIsMCwwLDExNSw2LDAsMCwwLDAsMiwKKyAgICAxOCw1LDEzLDEsMTE0LDE2NCwwLDAsMCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsNSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw4NywKKyAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLAorICAgIDIsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LAorICAgIDAsMTE0LDgzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsCisgICAgMTAwLDIsMCwxMjUsNCwwLDExNiwyLDAsMTA2LDMsMCwxMjQsNCwwLDEwNiwKKyAgICA0LDAsMTI0LDMsMCwxMDAsMywwLDI1LDEzMSwxLDAsMTE2LDUsMCwxMzEsCisgICAgMiwwLDEsMTEwLDAsMCwxMjQsMiwwLDgzLDQxLDQsMTIyLDg2LDg0LDExNCwKKyAgICAxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsCisgICAgMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEyMSwzMiwxMDAsCisgICAgMTAxLDEwOCwxMDEsMTAzLDk3LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTExLDEwLDMyLDMyLDMyLAorICAgIDMyLDExNSwxMDEsMTA4LDEwMiw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0MCw0MSw0Niw3OCwxMjIsNDQsNzgsMTExLDExNiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMDUsMTEwLDEwMywzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDEyMywKKyAgICAxMjUsNTgsMzIsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSwxMTQsODQsMCwwLDAsNDEsNiwyMTgsMTEsMTAyLDEwNSwxMTAsMTAwLAorICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDMxLDAsMCwwLDIxOCw5LDk1LDExOSwKKyAgICA5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwyMTgsNCwxMTksOTcsMTE0LDExMCwxMTQsNDcsMCwKKyAgICAwLDAsMjE4LDEzLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsMTE0LDExMCwxMDUsMTEwLAorICAgIDEwMyw0MSw1LDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDIxOCw2LDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDgsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwyMTgsCisgICAgMywxMDksMTE1LDEwMywxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTcsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDk1LDExNSwxMDQsMTA1LDEwOSw1MywyLDAsMCwxMTUsMTAsMCwwLDAsMCwKKyAgICA2LDIxLDEsMjQsMSw2LDEsMzIsMSwxMTQsMTcyLDAsMCwwLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMCwKKyAgICAwLDEzMSwyLDAsMTI1LDIsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMjUsMywwLDEyNCwxLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw2LDAsMTE0LAorICAgIDc5LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDQsMCwxMjQsCisgICAgMywwLDEwNiw0LDAsMTI0LDQsMCwxMzEsMSwwLDEsMTE2LDIsMCwxMDYsCisgICAgMywwLDEyNCwxLDAsMjUsODMsMTI0LDMsMCwxMDYsNSwwLDEzMSwwLDAsCisgICAgODMsMTAwLDEsMCw4Myw0MSwyLDEyMiw1Nyw3NiwxMTEsOTcsMTAwLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDEwNSwKKyAgICAxMTYsNDYsNzgsNDEsNiwyMTgsMTYsMTE1LDExMiwxMDEsOTksOTUsMTAyLDExNCwxMTEsMTA5LAorICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDEyLDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLAorICAgIDExNiwxMDQsMTExLDEwMCwxMTUsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLDIxOCwKKyAgICA0LDEwMSwxMjAsMTAxLDk5LDIxOCw0LDEwOCwxMTEsOTcsMTAwLDQxLDUsMTE0LDcxLDAsCisgICAgMCwwLDExNCwxNTgsMCwwLDAsMjE4LDQsMTE1LDExMiwxMDEsOTksMjE4LDcsMTA5LAorICAgIDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDIxOCw2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSwKKyAgICAxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksCisgICAgNjYsMiwwLDAsMTE1LDE0LDAsMCwwLDAsMywxNSwxLDEyLDEsMTUsCisgICAgMSwxMywxLDEzLDEsMTEsMiwxMTQsMTgwLDAsMCwwLDk5LDQsMCwwLAorICAgIDAsMCwwLDAsMCwxMSwwLDAsMCwxOSwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjQzLDEsMCwwLDEwNSwwLDAsMTI1LDQsMCwxMjQsMiwwLDEwMCwKKyAgICAxLDAsMTA3LDksMCwxMTQsMzEsMCwxMjQsMiwwLDEyNCw0LDAsMTAwLDIsCisgICAgMCw2MCwxMTAsNiwwLDEwMCwzLDAsMTI1LDIsMCwxMjQsMywwLDEwMCwxLAorICAgIDAsMTA3LDksMCwxMTQsNjIsMCwxMjQsMywwLDEyNCw0LDAsMTAwLDQsMCwKKyAgICA2MCwxMTAsMCwwLDEyNCwwLDAsMTAwLDEsMCwxMDAsNSwwLDEzMywyLDAsCisgICAgMjUsMTI1LDUsMCwxMjQsMCwwLDEwMCw1LDAsMTAwLDYsMCwxMzMsMiwwLAorICAgIDI1LDEyNSw2LDAsMTI0LDAsMCwxMDAsNiwwLDEwMCw3LDAsMTMzLDIsMCwKKyAgICAyNSwxMjUsNywwLDEyNCw1LDAsMTE2LDAsMCwxMDcsMywwLDExNCwxNjgsMCwKKyAgICAxMDAsOCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsNSwwLDEzMSwyLDAsMTI1LAorICAgIDgsMCwxMTYsMiwwLDEyNCw4LDAsMTMxLDEsMCwxLDExNiwzLDAsMTI0LAorICAgIDgsMCwxMjQsNCwwLDE0MSwxLDAsMTMwLDEsMCwxMTAsMTE2LDAsMTE2LDQsCisgICAgMCwxMjQsNiwwLDEzMSwxLDAsMTAwLDUsMCwxMDcsMywwLDExNCwyMjYsMCwKKyAgICAxMDAsOSwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LAorICAgIDIsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw4LDAsMTMxLAorICAgIDEsMCwxMzAsMSwwLDExMCw1OCwwLDExNiw0LDAsMTI0LDcsMCwxMzEsMSwKKyAgICAwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMjgsMSwxMDAsMTAsMCwxMDYsMSwwLAorICAgIDEyNCwyLDAsMTMxLDEsMCwxMjUsOCwwLDExNiwyLDAsMTI0LDgsMCwxMzEsCisgICAgMSwwLDEsMTE2LDUsMCwxMjQsOCwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsCisgICAgMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwyMjksMSwxMjEsMjAsCisgICAgMCwxMTYsNiwwLDEyNCwxLDAsMTAwLDExLDAsMjUsMTMxLDEsMCwxMjUsOSwKKyAgICAwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwxMTQsODAsMSwxLAorICAgIDEsMSw4OSwxMTAsNjIsMCw4OCwxMTYsOCwwLDEyNCw2LDAsMTMxLDEsMCwKKyAgICAxMjQsOSwwLDEwNywzLDAsMTE0LDE0MiwxLDEwMCwxMiwwLDEwNiwxLDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLDEzMSwxLAorICAgIDAsMSwxMTYsMywwLDEyNCw4LDAsMTI0LDQsMCwxNDEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMjEsMTgsMCwxMjQsMSwwLDEwMCwxMywwLDI1LDEwMCwxNCwKKyAgICAwLDY0LDEyNSwxMCwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsMCwKKyAgICAxMTQsMTgwLDEsMSwxLDEsODksMTEzLDIyOSwxLDg4LDExNiw4LDAsMTI0LDcsCisgICAgMCwxMzEsMSwwLDEyNCwxMCwwLDEwNywzLDAsMTE0LDIyOSwxLDExNiwzLDAsCisgICAgMTAwLDEyLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDQsMCwxNDEsCisgICAgMSwwLDEzMCwxLDAsMTEzLDIyOSwxLDExMCwwLDAsMTI0LDAsMCwxMDAsNywKKyAgICAwLDEwMCwxLDAsMTMzLDIsMCwyNSw4Myw0MSwxNSw5NywxMjIsMSwwLDAsCisgICAgODYsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDQsMTAxLDk3LAorICAgIDEwMCwxMDEsMTE0LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLAorICAgIDEwMCw0NSwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDk3LDEwMywKKyAgICA5NywxMDUsMTEwLDExNSwxMTYsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LAorICAgIDExNiwxMTUsMzIsNDAsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMDMsMTA1LDExOCwxMDEsMTEwLAorICAgIDQxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE2LDEwNCw5NywKKyAgICAxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwKKyAgICAxMDAsMzIsOTgsMTIxLDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTExLDExNiwxMDQsMTAxLDExNCwzMiw5NywKKyAgICAxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE3LDExNSwxMDEsCisgICAgMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMDQsOTcsMTEwLDk5LDEwMSwzMiwxMDEsMTE0LDExNCwKKyAgICAxMTEsMTE0LDMyLDExNCwxMDEsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwKKyAgICAxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsCisgICAgMTE1LDMyLDEwNSwxMTAsOTksMTExLDExNCwxMTQsMTAxLDk5LDExNiwzMiwxMTEsMTE0LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsMTAsMzIsCisgICAgMzIsMzIsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDk4LDEwMSwzMiwxMTUsCisgICAgMTE2LDk3LDEwOCwxMDEsNDYsMzIsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDMyLDEwNSwKKyAgICAxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDUsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsCisgICAgMTE2LDExMSwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExNCwxMTcsMTEwLDk5LDk3LAorICAgIDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDExNCw2NywwLDAsMCwKKyAgICAxMjIsMTAsNjAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNjIsMTE0LDM1LDAsMCwKKyAgICAwLDExNCwxMiwwLDAsMCwyMzMsOCwwLDAsMCwyMzMsMTIsMCwwLDAsCisgICAgMTIyLDMwLDk4LDk3LDEwMCwzMiwxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LDEwOSw5OCwKKyAgICAxMDEsMTE0LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgMTIyLDQzLDExNCwxMDEsOTcsOTksMTA0LDEwMSwxMDAsMzIsNjksNzksNzAsMzIsMTE5LDEwNCwKKyAgICAxMDUsMTA4LDEwMSwzMiwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA1LDEwOSwxMDEsCisgICAgMTE1LDExNiw5NywxMDksMTEyLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTIyLDQ4LDExNCwKKyAgICAxMDEsOTcsOTksMTA0LDEwMSwxMDAsMzIsNjksNzksNzAsMzIsMTE5LDEwNCwxMDUsMTA4LDEwMSwKKyAgICAzMiwxMTQsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTA1LDEyMiwxMDEsMzIsMTExLDEwMiwKKyAgICAzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMjE4LAorICAgIDUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMjIsMjYsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsCisgICAgMzIsMTA1LDExNSwzMiwxMTUsMTE2LDk3LDEwOCwxMDEsMzIsMTAyLDExMSwxMTQsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMjE4LDQsMTE1LDEwNSwxMjIsMTAxLDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LAorICAgIDEyNywzLDAsNDEsOSwyMTgsMTIsNzcsNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsCisgICAgNjYsNjksODIsMTE0LDQ3LDAsMCwwLDExNCwxNTIsMCwwLDAsMTE0LDE1MywwLAorICAgIDAsMCwxMTQsMzEsMCwwLDAsMjE4LDgsNjksNzksNzAsNjksMTE0LDExNCwxMTEsCisgICAgMTE0LDExNCwxNCwwLDAsMCwxMTQsNzksMCwwLDAsMTE0LDE5LDAsMCwwLAorICAgIDQxLDExLDExNCw1MywwLDAsMCwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwKKyAgICAxMTUsMTE2LDk3LDExNiwxMTUsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw5MCwKKyAgICAxMSwxMDEsMTIwLDk5LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDkwLDUsMTA5LDk3LAorICAgIDEwMywxMDUsOTksOTAsMTMsMTE0LDk3LDExOSw5NSwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywKKyAgICAxMDksMTEyLDkwLDgsMTE0LDk3LDExOSw5NSwxMTUsMTA1LDEyMiwxMDEsMTE0LDE1MSwwLDAsCisgICAgMCwyMTgsMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDIxOCwKKyAgICAxMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMDUsMTIyLDEwMSwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjUsOTUsMTE4LDk3LAorICAgIDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsCisgICAgMTA0LDEwMSw5NywxMDAsMTAxLDExNCw3OSwyLDAsMCwxMTUsNzYsMCwwLDAsMCwKKyAgICAxMSw2LDEsMTIsMSwxMywzLDYsMSwxMiwxLDEzLDEsMTYsMSwxNiwKKyAgICAxLDE2LDEsMTIsMSwxOCwxLDEwLDEsMTgsMSwxOCwxLDE1LDEsMTAsCisgICAgMSwxNSwxLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsMjAsCisgICAgMSwxMywxLDUsMiwxOCwxLDE1LDEsMTAsMSwxOCwxLDMsMSwxOCwKKyAgICAxLDEzLDEsNSwyLDE4LDEsMTUsMSwxNSwxLDExNCwxOTAsMCwwLDAsCisgICAgOTksNCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNiwwLDAsCisgICAgMCw2NywwLDAsMCwxMTUsMTE1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCwxMTYsMiwwLDEyNCw0LDAsMTE2LAorICAgIDMsMCwxMzEsMiwwLDExNCw3OCwwLDExNiw0LDAsMTAwLDEsMCwxMjQsMiwKKyAgICAwLDEzMSwyLDAsMSwxMjQsMywwLDEwMCwyLDAsMTA3LDksMCwxMTQsNzQsCisgICAgMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsMCwxMjQsMywwLDEzMSwyLDAsCisgICAgMSwxMTAsMCwwLDEyNCw0LDAsODMsMTE2LDcsMCwxMDAsMywwLDEwNiw4LAorICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEwMCw0LDAsMTI0LDEsMCwxMDAsNSwwLAorICAgIDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwwLDEwMCwyLDAsODMsNDEsNiwxMjIsCisgICAgNjAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKKyAgICAxMDEsMzIsOTcsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsMTIxLAorICAgIDMyLDk1LDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDk1LDEwNCwxMDEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTIyLDIxLDk5LAorICAgIDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsCisgICAgMTIzLDMzLDExNCwxMjUsNzgsMTIyLDIzLDc4LDExMSwxMTAsNDUsOTksMTExLDEwMCwxMDEsMzIsCisgICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsMTE0LDY3LAorICAgIDAsMCwwLDExNCwzNSwwLDAsMCw0MSw5LDIxOCw3LDEwOSw5NywxMTQsMTE1LAorICAgIDEwNCw5NywxMDgsOTAsNSwxMDgsMTExLDk3LDEwMCwxMTUsMjE4LDEwLDEwNSwxMTUsMTA1LDExMCwKKyAgICAxMTUsMTE2LDk3LDExMCw5OSwxMDEsMjE4LDEwLDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsCisgICAgMTEyLDEwMSwxMTQsMTUyLDAsMCwwLDExNCwxMDYsMCwwLDAsOTAsMTYsOTUsMTAyLAorICAgIDEwNSwxMjAsOTUsOTksMTExLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTQsMTUzLAorICAgIDAsMCwwLDExNCw0NywwLDAsMCw0MSw1LDExNCw1MywwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDE0MCwwLDAsMCwxMTQsMTQxLDAsMCwwLDIxOCw0LAorICAgIDk5LDExMSwxMDAsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNyw5NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw5NSw5OCwxMjEsCisgICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMzQsMiwwLDAsMTE1LDE2LDAsMCwwLDAsCisgICAgMiwxNSwxLDE1LDEsMTMsMSwxMiwxLDE5LDEsNCwyLDE4LDEsMTE0LAorICAgIDE5NSwwLDAsMCwxMTQsODQsMCwwLDAsOTksMywwLDAsMCwwLDAsCisgICAgMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNzYsCisgICAgMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsCisgICAgMywwLDEwNiwyLDAsMTE2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTMxLDEsCisgICAgMCwxLDEyNCwzLDAsMTA2LDIsMCwxMTYsMywwLDEyNCwyLDAsMTMxLDEsCisgICAgMCwxMzEsMSwwLDEsMTI0LDMsMCwxMDYsMiwwLDExNiw0LDAsMTA2LDUsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsMCwxLDEyNCwzLDAsODMsNDEsCisgICAgMSwxMjIsODAsNjcsMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwKKyAgICAxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwNSwxMTAsMTE2LDExMSwzMiw5OCwxMjEsCisgICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LAorICAgIDExMCwxMDMsMzIsMTExLDExNywxMTYsMzIsMTE2LDExMSwzMiw5NywzMiw5OCwxMjEsMTE2LDEwMSwKKyAgICA0NSw5OSwxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwxMDAsMTAsMzIsMzIsMzIsMzIsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDQ2LDQxLDYsMjE4LDksOTgsMTIxLDExNiwxMDEsOTcsMTE0LDExNCw5NywxMjEsCisgICAgMTE0LDE4NSwwLDAsMCwyMTgsNiwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTQsMTcsMCwKKyAgICAwLDAsMTE0LDE5MSwwLDAsMCw5MCw1LDEwMCwxMTcsMTA5LDExMiwxMTUsNDEsNCwKKyAgICAxMTQsMTk0LDAsMCwwLDExNCwxODMsMCwwLDAsMTE0LDE4OSwwLDAsMCwxMTQsCisgICAgNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMTEsOTUsOTgsMTIxLAorICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTQ2LDIsMCwwLDExNSwxMCwwLDAsMCwwLAorICAgIDMsMTIsMSwxOSwxLDE5LDEsMjIsMSwxMTQsMTk4LDAsMCwwLDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDg5LDAsMCwwLDEwMCwxLDAsMTAwLDIsMCwxMDgsMCwKKyAgICAwLDEyNSwxLDAsMTE2LDEsMCwxMDYsMiwwLDEyNCwwLDAsMTMxLDEsMCwKKyAgICAxMDYsMywwLDEyNSwyLDAsMTI0LDEsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLAorICAgIDEsMCwxMjUsMywwLDExNiwxLDAsMTA2LDUsMCwxMDAsMiwwLDEwMCwzLAorICAgIDAsMTMxLDIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LDYsMCwxMjQsMCwwLAorICAgIDEwNiw2LDAsMTI0LDMsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTMxLDEsMCwKKyAgICA4Myw0MSw0LDEyMiwxMjEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLAorICAgIDExNSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDMyLDk3LDExMCwxMDAsMzIsMTE0LAorICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsODUsMTEwLDEwNSwxMTgsMTAxLDExNCwxMTUsOTcsMTA4LAorICAgIDMyLDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSwzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsCisgICAgMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDAsMTAxLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsNDYsMTAsMzIsMzIsMzIsMzIsMTE0LDg0LAorICAgIDAsMCwwLDc4LDg0LDQxLDcsMjE4LDgsMTE2LDExMSwxMDcsMTAxLDExMCwxMDUsMTIyLAorICAgIDEwMSwxMTQsNDksMCwwLDAsOTAsNyw2NiwxMjEsMTE2LDEwMSwxMTUsNzMsNzksOTAsCisgICAgOCwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsOTAsMTUsMTAwLDEwMSwxMTYsMTAxLDk5LAorICAgIDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsOTAsMjUsNzMsMTEwLDk5LDExNCwKKyAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDEwOCw3OCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSw2OCwxMDEsCisgICAgOTksMTExLDEwMCwxMDEsMTE0LDIxOCw2LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsNDEsNSwyMTgsCisgICAgMTIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDE5OSwwLAorICAgIDAsMCw5MCwyMSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDExNSwKKyAgICA5NSwxMTQsMTAxLDk3LDEwMCwxMDgsMTA1LDExMCwxMDEsMjE4LDgsMTAxLDExMCw5OSwxMTEsMTAwLAorICAgIDEwNSwxMTAsMTAzLDkwLDE1LDExMCwxMDEsMTE5LDEwOCwxMDUsMTEwLDEwMSw5NSwxMDAsMTAxLDk5LAorICAgIDExMSwxMDAsMTAxLDExNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTMsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDE1NiwyLDAsMCwxMTUsMTAsMCwwLDAsMCw1LDEyLDEsMTgsCisgICAgMSwxNSwxLDE4LDEsMTE0LDIwMywwLDAsMCw5OSwxLDAsMCwwLDAsCisgICAgMCwwLDAsNSwwLDAsMCwzNSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTUsMSwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLDAsMCwKKyAgICAxMzEsMywwLDEyNSwxLDAsMTE2LDEsMCwxMjQsMSwwLDEwMCwyLDAsMTMxLAorICAgIDIsMCwxMTQsNzQsMCwxMjEsMTcsMCwxMjQsMSwwLDEwNiwyLDAsMTI0LDAsCisgICAgMCwxMzEsMSwwLDgzLDg3LDExMyw3NCwwLDQsMTE2LDMsMCwxMDcsMTAsMCwKKyAgICAxMTQsNzAsMCwxLDEsMSw4OSwxMTMsNzQsMCw4OCwxMTAsMCwwLDEyMSwxMywKKyAgICAwLDEyNCwwLDAsMTA2LDQsMCwxMjUsMiwwLDg3LDExMCwxOCwwLDQsMTE2LAorICAgIDUsMCwxMDcsMTAsMCwxMTQsMTA3LDAsMSwxLDEsODksMTEwLDI5LDAsODgsCisgICAgMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEzNiwwLDExNiw2LDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDEwNiwyLDAsMTMxLDAsMCw4MywxMjEsMTMsMCwxMjQsCisgICAgMCwwLDEwNiw3LDAsMTI1LDMsMCw4NywxMTAsMjQsMCw0LDExNiw1LDAsCisgICAgMTA3LDEwLDAsMTE0LDE3NSwwLDEsMSwxLDEwMCwzLDAsMTI1LDMsMCw4OSwKKyAgICAxMTAsMSwwLDg4LDEyMSwxMywwLDEyNCwwLDAsMTA2LDgsMCwxMjUsNCwwLAorICAgIDg3LDExMCw1OSwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMjUwLDAsMSwxLAorICAgIDEsMTI0LDEsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDIzMCwwLDEwMCw0LDAsCisgICAgMTA2LDksMCwxMjQsMywwLDEzMSwxLDAsODMsMTAwLDUsMCwxMDYsOSwwLAorICAgIDEyNCwzLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg5LDExMCwxNywwLDg4LDEwMCwKKyAgICA2LDAsMTA2LDksMCwxMjQsMywwLDEyNCw0LDAsMTMxLDIsMCw4MywxMDAsCisgICAgMCwwLDgzLDQxLDcsNzgsMjE4LDEwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgOTUsOTUsMjE4LDExLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwyNTAsCisgICAgMSw2MywxMjIsMTMsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgNjIsMTIyLDIwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLAorICAgIDQwLDEyMywzMywxMTQsMTI1LDQxLDYyLDEyMiwyMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiwxMjMsMzMsMTE0LDEyNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsNjIsCisgICAgNDEsMTAsMTE0LDYyLDAsMCwwLDExNCw2MCwwLDAsMCwxMTQsMjA1LDAsMCwKKyAgICAwLDIxOCw5LDY5LDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwyMTgsOCw5NSw5NSwKKyAgICAxMTUsMTEyLDEwMSw5OSw5NSw5NSwyMTgsMTQsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsCisgICAgMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTQsMTc0LDAsMCwwLDExNCw1NywwLDAsMCwKKyAgICAyMTgsOCw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsMTE0LDQ3LDAsMCwwLDQxLAorICAgIDUsMTE0LDE3OSwwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwxNzcsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCwxMzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEyLDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxNzAsMiwwLDAsMTE1LDQ2LDAsMCwwLAorICAgIDAsMiwxOCwxLDE1LDIsMywxLDE3LDEsMTMsMSw4LDEsMywxLAorICAgIDEzLDEsMTMsMSw1LDIsMTIsMSwxNiw0LDMsMSwxMywxLDEzLDEsCisgICAgMTEsMSwzLDEsMTMsMSwxMywxLDEyLDEsMTMsMiwyMSwyLDExNCwyMTEsCisgICAgMCwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsMCwwLDAsMTAxLDAsMCwKKyAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwKKyAgICAwLDAsOTAsMywwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDkwLDQsCisgICAgMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDcsMCwKKyAgICA4Myw0MSw4LDIxOCwxNyw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LAorICAgIDExNSw5NywxMDIsMTAxLDEwOCwxMjEsOTksMiwwLDAsMCwwLDAsMCwwLDIsCisgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLDAsCisgICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTI0LAorICAgIDAsMCw5NSwyLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDMsMjE4LDcsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDIwOCwwLDAsMCwyMTgsNSw5NSwxMTUsCisgICAgMTEyLDEwMSw5OSw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwKKyAgICAwLDAsMCwyMDYsMiwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwKKyAgICAxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwxMTUsOTcsMTAyLAorICAgIDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwzOCwwLDAsMCwxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCw5NSwKKyAgICAxLDAsMTI0LDAsMCwxMDYsMiwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDUsMCw2MCwxMDAsMCwwLDgzLDQxLDIsNzgsODQsCisgICAgNDEsNiwxMTQsMjE0LDAsMCwwLDIxOCwxMyw5NSwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LAorICAgIDEwOCwxMDUsMTIyLDEwNSwxMTAsMTAzLDExNCwyMTMsMCwwLDAsMTE0LDcsMCwwLDAsCisgICAgMTE0LDczLDAsMCwwLDExNCw2NywwLDAsMCw0MSwxLDExNCw3MSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsNzUsMCwwLDAsMjEwLDIsMCwwLDExNSw0LDAsMCwwLDAsNCwKKyAgICAxMiwxLDEyMiwyNyw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxMDEsMTAwLDk1LDExNSwKKyAgICA5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxNywwLDAsMCwKKyAgICA3MSwwLDAsMCwxMTUsMTIxLDAsMCwwLDEyMiwxMDEsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsMTI1LDIsMCwxMTYsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwKKyAgICAwLDEyNCwxLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDExNCw3OCwwLDEyMSwxNywKKyAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsMiwwLDEwNiw0LDAsNjEsODcsMTEzLAorICAgIDEwMCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsNzQsMCwxLDEsMSw4OSwKKyAgICAxMTMsMTAwLDAsODgsMTEwLDIyLDAsMTE2LDYsMCwxMDAsMywwLDEyNCwyLDAsCisgICAgMTA2LDQsMCwxMjQsMiwwLDEwNiw3LDAsMTMxLDMsMCwxLDg3LDEwMCwwLAorICAgIDAsMTAwLDQsMCwxMjQsMCwwLDEwNiwwLDAsOTUsOCwwLDg4LDEwMCwwLAorICAgIDAsODMsNDEsNSw3OCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwzLDAsMCwwLDExNSwwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LAorICAgIDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw5LAorICAgIDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLAorICAgIDAsMCw0MSwyLDExNCwyMiwwLDAsMCwxMTQsNzYsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc3LDAsCisgICAgMCwwLDIyMCwyLDAsMCwxMTUsMiwwLDAsMCw2LDAsMTIyLDQ1LDk1LAorICAgIDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSwKKyAgICA0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsCisgICAgMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMjIsMTgsMTA1LDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMzIsMTIzLDMzLDExNCwxMjUsMzIsMzUsMzIsMTIzLDMzLDExNCwxMjUsCisgICAgNzAsNDEsOSwxMTQsMjE0LDAsMCwwLDExNCw3OCwwLDAsMCwxMTQsNywwLAorICAgIDAsMCwxMTQsNzMsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCw3OSwwLDAsCisgICAgMCwxMTQsMTUyLDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDIxNSwwLDAsMCwKKyAgICA0MSwzLDExNCw3MSwwLDAsMCwxMTQsODAsMCwwLDAsMTE0LDE3NywwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsODEsMCwwLDAsMjE3LDIsMCwwLDExNSwxOCwwLDAsMCwwLDEsCisgICAgMywxLDksMSwyNSwxLDMsMSwxNywxLDEzLDEsOCwyLDI2LDIsCisgICAgMTIyLDI2LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwKKyAgICAxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDEsNiwxMTQsCisgICAgNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNzIsCisgICAgMCwwLDAsMTE0LDc1LDAsMCwwLDExNCw4MSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMjEyLDAsMCwwLDIwNCwyLDAsMCwxMTUsNiwwLDAsMCwxMiwKKyAgICAyLDEyLDQsMTIsNywxMTQsMjEyLDAsMCwwLDk5LDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDgsMCwwLDAsNjQsMCwwLDAsMTE1LAorICAgIDE1MSwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKKyAgICAxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwxMDAsCisgICAgMywwLDEwMCw1LDAsMTAwLDMsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsCisgICAgMyw5MCw0LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNSwwLAorICAgIDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsNiwwLDEwMSw3LDAsMTAwLAorICAgIDEyLDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsOCwKKyAgICAwLDEwNiw5LDAsMTAwLDE0LDAsMTAwLDEzLDAsMTMyLDAsMCwxMzEsMSwwLAorICAgIDkwLDgsMCwxMDEsNywwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLAorICAgIDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsCisgICAgMCwxMzEsMSwwLDkwLDExLDAsMTAwLDMsMCw4Myw0MSwxOSwyMTgsMTAsNzcsCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDk3LDIwOCw1LDAsMCw4NCwxMDQsCisgICAgMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMDIsMTExLDExNCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTcsMTE1LAorICAgIDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsNDYsMTAsCisgICAgMTAsMzIsMzIsMzIsMzIsNjUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLAorICAgIDExNSwxMTIsMTAxLDk5LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDUsMTEwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTA1LAorICAgIDExMSwxMTAsMzIsOTcsOTgsMTExLDExNywxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNDYsMzIsMzIsNzAsMTExLDExNCwxMCwzMiwzMiwzMiwzMiwxMDAsOTcsCisgICAgMTE2LDk3LDMyLDk3LDExNSwxMTUsMTExLDk5LDEwNSw5NywxMTYsMTAxLDEwMCwzMiwxMTksMTA1LAorICAgIDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTA1LAorICAgIDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDQ0LAorICAgIDMyLDExNywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDM5LDExNSwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDk2LDExMCw5NywxMDksMTAxLDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsOTcsCisgICAgOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwzMiw5NiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExOSwKKyAgICAxMDQsMTAxLDExMCwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwzMiwzMiw5NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAorICAgIDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKKyAgICAzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDUsCisgICAgMTEwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDUsCisgICAgMTE1LDMyLDEwMCwxMDEsMTE0LDEwNSwxMTgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTA1LAorICAgIDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTYsMzIsMTAwLDEwMSwxMTYsMTAxLDExNCwKKyAgICAxMDksMTA1LDExMCwxMDEsMTE1LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsMTAxLAorICAgIDEwMCwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTExLDExNCwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMTAsMTExLDExNiw0NiwzMiwzMiw3OSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTAyLDEwOCwKKyAgICAxMDEsOTksMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLDk2LDk1LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDk2LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LAorICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCw5NiwKKyAgICAzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDk5LAorICAgIDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNywxMTUsMTAxLDEwMCwzMiw5OCwKKyAgICAxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTE0LDExMSwKKyAgICAxMDksMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsCisgICAgMTA1LDEwMiwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTEwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLAorICAgIDQ2LDMyLDMyLDg3LDEwNCwxMDEsMTEwLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKKyAgICAzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDExNSwxMDEsMTE2LDQ0LDMyLDExMSwxMTQsMTA1LAorICAgIDEwMywxMDUsMTEwLDMyLDExOSwxMDUsMTA4LDEwOCwzMiwxMDksOTcsMTE2LDk5LDEwNCw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiw5NiwxMDQsOTcsMTE1LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDk2LDMyLDEwNSwxMTAsMTAwLDEwNSw5OSw5NywxMTYsMTAxLDExNSwzMiwxMTYsMTA0LAorICAgIDk3LDExNiwzMiw5NywzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsMzIsMzQsMTExLDExNCwxMDUsCisgICAgMTAzLDEwNSwxMTAsMzQsMzIsMTE0LDEwMSwxMDIsMTA4LDEwMSw5OSwxMTYsMTE1LDMyLDk3LDMyLAorICAgIDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLDMyLDMyLDMyLDMyLDg3LDEwNCwKKyAgICAxMDEsMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDUsMTE1LDMyLDg0LDExNCwxMTcsMTAxLDQ0LAorICAgIDMyLDk2LDk1LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwKKyAgICAxMDUsOTgsMTE3LDExNiwxMDEsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExNSwxMDEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDk2LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKKyAgICAzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTA1LDEwMiwzMiw5NywxMTAsMTIxLDQ2LDMyLDMyLAorICAgIDczLDExNiwxMCwzMiwzMiwzMiwzMiw5OSwxMTEsMTE0LDExNCwxMDEsMTE1LDExMiwxMTEsMTEwLAorICAgIDEwMCwxMTUsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiw5Niw5NSw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDEwMCw5NSw5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTYsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsMTE1LDk2LDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwKKyAgICAxMTAsOTksMTAxLDMyLDExMSwxMDIsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LAorICAgIDEwNSwxMDEsMTE1LDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTE1LDEwMSw5NywxMTQsOTksCisgICAgMTA0LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwzMiwzMiw3MywxMDIsCisgICAgMzIsMTE1LDEwMSwxMTYsNDQsMzIsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCisgICAgMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDEwLDMyLDMyLDMyLDMyLDg0LAorICAgIDExNCwxMTcsMTAxLDQ1LDQ1LDk3LDExMCwxMDAsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsMTExLAorICAgIDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODAsCisgICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDEwNSwxMDksMTEyLAorICAgIDEwOCwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLAorICAgIDQwLDEwOSw5NywxMjEsNDEsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExNyw5OCwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDExNSwxMTIsMTAxLAorICAgIDk5LDEwLDMyLDMyLDMyLDMyLDEwNCw5NywxMTUsMzIsOTcsMzIsMTEwLDExMSwxMTAsNDUsCisgICAgNzgsMTExLDExMCwxMDEsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLDMyLDEwNSwxMTAsMzIsOTYsMTE1LAorICAgIDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsCisgICAgMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDk2LDQ0LDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsCisgICAgMTA5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTAyLAorICAgIDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk3LDExNSwzMiwKKyAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc5LAorICAgIDExMCwxMDgsMTIxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwzMiw0MCwxMTUsMTAxLDEwMSwKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk3LDk4LDk5LDQ2LDc3LAorICAgIDEwMSwxMTYsOTcsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDk3LDExMCwKKyAgICAxMDAsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKKyAgICA5Nyw5OCw5OSw0Niw4MCw5NywxMTYsMTA0LDY5LDExMCwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDQxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDEwOSwxMTEsMTAwLDEwNSwKKyAgICAxMDIsMTIxLDMyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSwzMiwxMDUsMTEwLAorICAgIDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMjE4LDYsCisgICAgMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsNzgsMjE4LDEyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsCisgICAgMTE1LDExNiw5NywxMTYsMTAxLDIxOCwxMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLAorICAgIDEwMSw5OSwzLDAsMCwwLDMsMCwwLDAsNiwwLDAsMCwyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw3OSwwLDAsMCwxMjQsMSwwLDEyNCwwLAorICAgIDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTI0LDMsMCwKKyAgICAxMjQsMCwwLDk1LDIsMCwxMjQsNCwwLDEyNCwwLDAsOTUsMywwLDEyNCwKKyAgICA1LDAsMTE0LDQ4LDAsMTAzLDAsMCwxMTAsMywwLDEwMCwwLDAsMTI0LDAsCisgICAgMCw5NSw0LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLAorICAgIDEyNCwwLDAsOTUsNiwwLDEwMCwwLDAsODMsNDEsMiw3OCw3MCw0MSw3LAorICAgIDExNCw2NywwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LAorICAgIDIxOCwwLDAsMCwyMTgsMjYsMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKKyAgICAxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LAorICAgIDIxOCwxMyw5NSwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsOTcsMTE2LDExNiwxMTQsMjE4LAorICAgIDcsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsNDEsNiwxMTQsNzEsMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMjE4LAorICAgIDAsMCwwLDExNCwyMTksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDEyLDMsMCwwLAorICAgIDExNSwxNCwwLDAsMCwwLDIsOSwxLDksMSw5LDEsOSwxLDIxLAorICAgIDMsOSwxLDEyMiwxOSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsCisgICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE1MywwLAorICAgIDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLAorICAgIDAsMTAwLDIsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMSwwLAorICAgIDEwMywyLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDAsMCwxMDcsCisgICAgOSwwLDExNCw3OSwwLDEyNCwxLDAsMTA2LDQsMCwxMDAsMywwLDEwNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEzMSwxLDAsMTMxLDEsMCwxLDExMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsMTIyLDAsCisgICAgMTI0LDEsMCwxMDYsNCwwLDEwMCw0LDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwKKyAgICA1LDAsMTMxLDEsMCwxMzEsMSwwLDEsMTEwLDAsMCwxMDAsNSwwLDEwNiwKKyAgICAwLDAsMTI0LDAsMCwxMDYsNiwwLDEwNiw3LDAsMTAwLDYsMCwxMDYsOCwKKyAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMzEsMiwwLDgzLDQxLDcsNzgsMTIyLDksCisgICAgMTEwLDk3LDEwOSwxMDEsNjEsMTIzLDMzLDExNCwxMjUsMTIyLDExLDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNjEsMTIzLDMzLDExNCwxMjUsMTIyLDExLDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDYxLDEyMywKKyAgICAzMywxMTQsMTI1LDEyMiwyOSwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwKKyAgICAxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsNjEsCisgICAgMTIzLDEyNSwxMjIsNiwxMjMsMTI1LDQwLDEyMywxMjUsNDEsMTIyLDIsNDQsMzIsNDEsOSwKKyAgICAxMTQsNDcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LAorICAgIDIxNywwLDAsMCwyMTgsNiw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNCwyMjAsMCwwLAorICAgIDAsMjE4LDksOTUsOTUsOTksMTA4LDk3LDExNSwxMTUsOTUsOTUsMTE0LDU3LDAsMCwKKyAgICAwLDExNCwyNiwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsODAsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDEwMSwwLDAsMCwyNCwzLDAsMCwxMTUsMTYsMCwwLDAsMCwKKyAgICAxLDE1LDEsMjEsMSwxNSwxLDI4LDEsMTUsMSw2LDEsMjIsMSwxMjIsCisgICAgMTksNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDExNCwxMDEsCisgICAgMTEyLDExNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCisgICAgMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMTQ1LDAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMjUsMiwwLDEyMSwxMDcsMCwxMjQsMCwwLDEwNiwxLDAsCisgICAgMTI0LDEsMCwxMDYsMSwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LAorICAgIDIsMCwxMjQsMSwwLDEwNiwyLDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsMTA2LDMsMCwxMDcsMiwwLDExMSwxMTQsMCwKKyAgICAxMjQsMiwwLDEyNCwxLDAsMTA2LDAsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsCisgICAgMCwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsNCwwLDEwNywyLDAsMTExLDExNCwKKyAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNiw1LDAsMTA3LDIsMCwKKyAgICA4Myw4NywxMTAsMjIsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDE0MCwwLDEsCisgICAgMSwxLDEwMCwxLDAsODMsODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLAorICAgIDIsNzgsNzAsNDEsNywxMTQsMjIwLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsCisgICAgMTY5LDAsMCwwLDExNCwyMTcsMCwwLDAsMjE4LDYsOTksOTcsOTksMTA0LDEwMSwKKyAgICAxMDAsMjE4LDEyLDEwNCw5NywxMTUsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LAorICAgIDIwOSwwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCw5MCw1LDExMSwxMTYsMTA0LAorICAgIDEwMSwxMTQsOTAsNCwxMTUsMTA5LDExNSwxMDgsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDYsOTUsOTUsMTAxLDExMyw5NSw5NSwzNCwKKyAgICAzLDAsMCwxMTUsMjAsMCwwLDAsMCwxLDksMSwzLDEsMTgsMSwKKyAgICAxOCwxLDE4LDEsMTUsMSwxOCwxLDIwLDEsMTMsMSwxMjIsMTcsNzcsMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTIsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwxNTEsMCwxMjQsMCwwLDEwNiwxLDAsMTAwLDAsCisgICAgMCwxMDcsOSwwLDExNCwxNTEsMCwxMjQsMCwwLDEwNiwyLDAsMTE0LDE1MSwwLAorICAgIDEyNCwwLDAsMTA2LDEsMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDMsMCwxMTYsCisgICAgNCwwLDExNiw1LDAsMTMxLDEsMCwxMzEsMSwwLDExNCwxMTIsMCwxMjEsMTksCisgICAgMCwxMTYsNiwwLDEyNCwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDAsMCwKKyAgICA4NywxMTMsMTQ1LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxMDgsMCwxLDEsCisgICAgMSw4OSwxMTMsMTQ1LDAsODgsMTEzLDE0OCwwLDEyNCwxLDAsMTA2LDMsMCwxMTYsCisgICAgNCwwLDExNiw4LDAsMTMxLDEsMCwxMzEsMSwwLDExNCwxNDgsMCwxMjQsMSwKKyAgICAwLDEyNCwwLDAsOTUsMCwwLDExMywxNDgsMCwxMTMsMTUxLDAsMTEwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsODMsNDEsMSw3OCw0MSw5LDExNCwyMjIsMCwwLAorICAgIDAsMTE0LDIxNywwLDAsMCwxMTQsMjIxLDAsMCwwLDIxOCw4LDEwMSwxMTAsMTAwLAorICAgIDExNSwxMTksMTA1LDExNiwxMDQsMjE4LDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTQsMTM0LDAsMCwKKyAgICAwLDExNCwxMzIsMCwwLDAsMTE0LDEyNCwwLDAsMCwyMTgsMTcsNjYsODksODQsCisgICAgNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsNDEsMiwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDEzMSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI1LDAsMCwwLDQ2LDMsCisgICAgMCwwLDExNSwyMiwwLDAsMCwwLDIsMTUsMSwyNCwxLDksMSwyMSwKKyAgICAxLDMsMSwxOSwxLDEzLDEsOCwxLDIxLDEsMTgsMSwxMjIsMTcsNzcsCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk5LDk3LDk5LDEwNCwxMDEsMTAwLAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCwKKyAgICA5NSwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDEsMTE0LDIyMiwwLDAsCisgICAgMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMjI1LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjUsMCwwLAorICAgIDAsNjAsMywwLDAsMTE1LDIsMCwwLDAsMCwyLDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDQ2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEwNywKKyAgICA4LDAsMTE0LDM1LDAsMTI0LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTAwLDIsCisgICAgMCwxMzEsMSwwLDEwMCwzLDAsMjUsODMsMTI0LDAsMCwxMDYsMSwwLDgzLAorICAgIDEwMCwxLDAsODMsNDEsNCwxMjIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKKyAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwKKyAgICAzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ2LDc4LDExNCwxMTYsMCwwLDAsMTE0LDg0LAorICAgIDAsMCwwLDQxLDMsMTE0LDIyMCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LAorICAgIDMyLDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw2LDExMiw5NywxMTQsMTAxLAorICAgIDExMCwxMTYsNjQsMywwLDAsMTE1LDYsMCwwLDAsMCwzLDE1LDEsMjAsCisgICAgMiwxMjIsMTcsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNywwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsODMsNDEsMSw3OCw0MSwxLDExNCwyMjEsMCwwLDAsNDEsCisgICAgMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDIyNiwwLDAsMCw3MiwzLDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDIsMTIyLDIzLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSwKKyAgICA5OSw0NiwxMDQsOTcsMTE1LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQxLDEyLAorICAgIDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwKKyAgICA1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsMjI3LAorICAgIDAsMCwwLDIxOCw4LDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDExNiwxMjEsMTE0LDIyNSwwLAorICAgIDAsMCwyMTgsNiwxMTUsMTAxLDExNiwxMTYsMTAxLDExNCwxMTQsMjMxLDAsMCwwLDExNCwKKyAgICAyMjYsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIxNiwwLDAsMCwyMzEsMiwwLAorICAgIDAsMTE1LDE4LDAsMCwwLDEyLDM1LDYsMiwxNSwxLDE1LDExLDEyLDEwLAorICAgIDEyLDEyLDE4LDE0LDIxLDQsMTgsOCwxMTQsMjE2LDAsMCwwLDExNCwyMTcsMCwKKyAgICAwLDAsMTE0LDIxOSwwLDAsMCw5OSwyLDAsMCwwLDIsMCwwLDAsCisgICAgNSwwLDAsMCwxNSwwLDAsMCw2NywwLDAsMCwxMTUsMTkzLDAsMCwKKyAgICAwLDExNiwwLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDgzLDAsCisgICAgMTI0LDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDQzLDAsMTE2LDEsMCwxMjQsCisgICAgMCwwLDEwMCwzLDAsMTI0LDEsMCwxMzEsMSwxLDgzLDEyNCwzLDAsMTE0LAorICAgIDU1LDAsMTAzLDAsMCwxMTAsMywwLDEwMCwyLDAsMTI1LDQsMCwxMTYsMSwKKyAgICAwLDEyNCwwLDAsMTAwLDMsMCwxMjQsMSwwLDEwMCw0LDAsMTI0LDQsMCwKKyAgICAxMzEsMSwyLDgzLDEyNCwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNjgsMCwKKyAgICAxMTYsMCwwLDEyNCwxLDAsMTAwLDUsMCwxMzEsMiwwLDExNCwxNTksMCwxMjEsCisgICAgMTksMCwxMjQsMSwwLDEwNiwyLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwzLAorICAgIDAsODcsMTEzLDE2NSwwLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsMTU1LDAsMSwKKyAgICAxLDEsMTAwLDIsMCwxMjUsMywwLDg5LDExMywxNjUsMCw4OCwxMTMsMTY4LDAsCisgICAgMTAwLDYsMCwxMjUsMywwLDExMCwwLDAsMTE2LDQsMCwxMjQsMCwwLDEyNCwKKyAgICAxLDAsMTAwLDcsMCwxMjQsMiwwLDEwMCw1LDAsMTI0LDMsMCwxMzEsMiwKKyAgICAyLDgzLDQxLDgsMTIyLDUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMzIsOTgsOTcsMTE1LDEwMSwxMDAsCisgICAgMzIsMTExLDExMCwzMiwxMTgsOTcsMTE0LDEwNSwxMTEsMTE3LDExNSwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwyMTgsMTIsMTAzLDEwMSwxMTYsCisgICAgOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDc4LDExNCwxNjksMCwwLDAsMTE0LAorICAgIDIyMCwwLDAsMCwxMTQsMjE5LDAsMCwwLDcwLDExNCwyMTcsMCwwLDAsNDEsCisgICAgNSwxMTQsNjAsMCwwLDAsMjE4LDIzLDExNSwxMTIsMTAxLDk5LDk1LDEwMiwxMTQsMTExLAorICAgIDEwOSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LAorICAgIDIxOSwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwyMTYsMCwwLDAsNDEsNSwKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwKKyAgICAyMTksMCwwLDAsOTAsNiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE3MywwLDAsMCwKKyAgICA3NywzLDAsMCwxMTUsMjgsMCwwLDAsMCwyLDE1LDEsMTIsMSwxNiwKKyAgICAxLDE4LDEsMTUsMSw3LDIsMTIsMSwxNSwxLDMsMSwxOSwxLDEzLAorICAgIDEsMTQsMyw5LDIsMTE0LDE3MywwLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwKKyAgICAyMjAsMCwwLDAsOTksMiwwLDAsMCwyLDAsMCwwLDksMCwwLAorICAgIDAsMTksMCwwLDAsNjcsMCwwLDAsMTE1LDExMCwxLDAsMCwxMjQsMSwKKyAgICAwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNzksMCwxMDAsMiwwLDEyNSwxLDAsCisgICAgMTE2LDAsMCwxMjQsMiwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsNzksMCwxMjEsCisgICAgMTksMCwxMjQsMiwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwxLAorICAgIDAsODcsMTEzLDc2LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw3MiwwLDEsCisgICAgMSwxLDg5LDExMyw3NiwwLDg4LDExMyw3OSwwLDExMCwwLDAsMTE2LDMsMCwKKyAgICAxMjQsMCwwLDEyNCwyLDAsMTAwLDQsMCwxMjQsMSwwLDEzMSwyLDEsMTI1LAorICAgIDQsMCwxMDAsNSwwLDEyNCw0LDAsOTUsNCwwLDEyNCwyLDAsMTAwLDEsCisgICAgMCwxMDcsOCwwLDExNCwyMDMsMCwxMjAsNzksMCwxMTYsNSwwLDEzMSwwLDAsCisgICAgNjgsOTMsNjEsMCw5MiwyLDAsMTI1LDUsMCwxMjUsNiwwLDEyNCwxLDAsCisgICAgMTA2LDYsMCwxMTYsNywwLDEyNCw2LDAsMTMxLDEsMCwxMzEsMSwwLDExNCwKKyAgICAxMzEsMCwxMjQsNSwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwyLAorICAgIDAsMTI0LDIsMCwxMjQsNCwwLDk1LDgsMCw4MCwxMTMsMTMxLDAsMTEzLDEzMSwKKyAgICAwLDg3LDEwMCwxLDAsODMsMTEwLDAsMCwxMjQsMywwLDExNiw5LDAsMTA3LAorICAgIDgsMCwxMTQsMzgsMSwxMTYsMCwwLDEyNCwyLDAsMTAwLDYsMCwxMzEsMiwKKyAgICAwLDExNCw0NywxLDEyMSwxOSwwLDEyNCwyLDAsMTA2LDEwLDAsMTI0LDAsMCwKKyAgICAxMzEsMSwwLDEyNSw3LDAsODcsMTEwLDE4LDAsNCwxMTYsMiwwLDEwNywxMCwKKyAgICAwLDExNCwxMywxLDEsMSwxLDg5LDExMywzNSwxLDg4LDEyNCw3LDAsMTE0LAorICAgIDM1LDEsMTAzLDAsMCwxMjQsNCwwLDk1LDExLDAsMTEzLDM1LDEsMTEzLDQ3LAorICAgIDEsMTEwLDksMCwxMjQsMywwLDEyNCw0LDAsOTUsMTEsMCwxMjQsNCwwLAorICAgIDEwNiwxMSwwLDEwMywwLDAsMTA3LDIsMCwxMTQsMTA2LDEsMTI0LDEsMCwxMTQsCisgICAgMTA2LDEsMTE2LDEyLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCw3LDAsMjUsMTI1LAorICAgIDgsMCwxMjQsNCwwLDEwNiwxMSwwLDEwNiwxMywwLDEyNCw4LDAsMTMxLDEsCisgICAgMCwxLDExMywxMDYsMSwxMTAsMCwwLDEyNCw0LDAsODMsNDEsOCw5Nyw2MSwKKyAgICAxLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsCisgICAgMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDExMSwzMiwxMDUsMTEwLDEwMCwxMDUsOTksOTcsCisgICAgMTE2LDEwMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NCwKKyAgICAzMiwxMTUsMTAxLDExNiwxMCwzMiwzMiwzMiwzMiwxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsCisgICAgMTExLDExMCwxMTUsMzIsMTE2LDExMSwzMiw5NywzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwKKyAgICAzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDExMiw5NywxMTYsMTA0LDExNSwKKyAgICA0NiwzMiwzMiw2NSwxMTAsMTAsMzIsMzIsMzIsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwzMiwKKyAgICAxMDgsMTA1LDExNSwxMTYsMzIsMTA1LDExNSwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDk5LDEwNSwxMDEsCisgICAgMTEwLDExNiw0NCwzMiwxMTYsMTA0LDExMSwxMTcsMTAzLDEwNCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsCisgICAgMTExLDExNiwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSwzMiwxMTcsMTE1LDEwMSwKKyAgICAxMDIsMTE3LDEwOCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDksMTE3LAorICAgIDExNSwxMTYsMzIsMTE2LDk3LDEwNywxMDEsMzIsOTcsMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsCisgICAgMTE1LDMyLDEwNSwxMTYsMTE1LDMyLDExMSwxMTAsMTA4LDEyMSwzMiw5NSw5NSwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsOTUsNDAsNDEsMzIsOTcsMTE0LDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA3OCwxMjIsOSw2MCwxMTcsMTEwLDEwNywxMTAsMTExLDExOSwxMTAsNjIsMTE0LDIzNCwwLDAsCisgICAgMCwxMTQsMjE3LDAsMCwwLDg0LDExNCwyMTksMCwwLDAsMTE0LDg0LDAsMCwKKyAgICAwLDQxLDE0LDExNCw2MCwwLDAsMCwxMTQsMjM0LDAsMCwwLDExNCwxNTMsMCwKKyAgICAwLDAsMTE0LDIxNiwwLDAsMCwxMTQsMjIxLDAsMCwwLDIxOCwyNyw5NSwxMDMsCisgICAgMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDIyOCwwLDAsMCwxMTQsMjI5LAorICAgIDAsMCwwLDExNCwxNjksMCwwLDAsMjE4LDksOTUsODAsNzksODAsODUsNzYsCisgICAgNjUsODQsNjksMTE0LDIxOSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCwzOCwwLAorICAgIDAsMCwxMTQsMjIzLDAsMCwwLDQxLDksMTE0LDY3LDAsMCwwLDIxOCw4LAorICAgIDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLAorICAgIDAsMCwxMTQsMTc3LDAsMCwwLDIxOCwxMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LAorICAgIDk5LDEwOCw5NywxMTUsMTE1LDExNCwxMjcsMCwwLDAsMTE0LDIxOSwwLDAsMCw5MCwKKyAgICA3LDEwMCwxMDUsMTE0LDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwyMzUsMCwwLDAsMTAyLDMsMCwwLAorICAgIDExNSw2MCwwLDAsMCwwLDEyLDEyLDQsNiwxLDE1LDIsMywxLDE5LAorICAgIDEsMTMsMSwxMSw4LDIxLDEsOSwzLDEyLDEsMjIsMSwyMSwxLDE1LAorICAgIDEsOSwxLDgsMiw3LDMsMTIsMiwxNSwxLDMsMSwxOSwxLDEzLAorICAgIDEsNSwyLDYsMSwxOCwyLDksMSwxNSwxLDYsMSwxNiwxLDIyLAorICAgIDIsMTE0LDIzNSwwLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsOCwKKyAgICAwLDAsMCw1MywwLDAsMCw2NywwLDAsMCwxMTUsMTI0LDEsMCwwLAorICAgIDEyMSwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMywwLDg3LDExMCwxOCwwLAorICAgIDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMzMsMCwxLDEsMSw4OSwxMTAsMTcsCisgICAgMCw4OCwxMjQsMywwLDEwMCwwLDAsMTA3LDksMCwxMTQsNTAsMCwxMjQsMywKKyAgICAwLDgzLDEyNCwwLDAsMTA2LDIsMCwxMjUsNCwwLDEyNCwxLDAsMTAwLDAsCisgICAgMCwxMDcsOCwwLDExNCwxMDgsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiwzLDAsCisgICAgMTI1LDEsMCw4NywxMTMsMTA4LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCwxMDQsCisgICAgMCwxLDEsMSw4OSwxMTMsMTA4LDAsODgsMTEwLDAsMCwxMjEsMTMsMCwxMjQsCisgICAgMCwwLDEwNiw0LDAsMTI1LDUsMCw4NywxMTAsMjQsMCw0LDExNiwxLDAsCisgICAgMTA3LDEwLDAsMTE0LDE0NywwLDEsMSwxLDEwMCwwLDAsMTI1LDUsMCw4OSwKKyAgICAxMTAsMSwwLDg4LDEyNCwyLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMjQsMCwKKyAgICAxMjQsNSwwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMjE1LDAsMTIxLDEzLDAsMTI0LAorICAgIDEsMCwxMDYsNSwwLDEyNSwyLDAsODcsMTEzLDIyMSwwLDQsMTE2LDEsMCwKKyAgICAxMDcsMTAsMCwxMTQsMjExLDAsMSwxLDEsMTAwLDAsMCwxMjUsMiwwLDg5LAorICAgIDExMywyMjEsMCw4OCwxMTMsMjI0LDAsMTI0LDUsMCwxMjUsMiwwLDExMCwwLDAsCisgICAgMTIxLDEzLDAsMTI0LDAsMCwxMDYsNiwwLDEyNSw2LDAsODcsMTEwLDI0LDAsCisgICAgNCwxMTYsMSwwLDEwNywxMCwwLDExNCw3LDEsMSwxLDEsMTAwLDAsMCwKKyAgICAxMjUsNiwwLDg5LDExMCwxLDAsODgsMTIxLDE5LDAsMTE2LDcsMCwxMjQsMCwKKyAgICAwLDEwNiw4LDAsMTMxLDEsMCwxMjUsNywwLDg3LDExMCwyNCwwLDQsMTE2LAorICAgIDEsMCwxMDcsMTAsMCwxMTQsNTMsMSwxLDEsMSwxMDAsMCwwLDEyNSw3LAorICAgIDAsODksMTEwLDEsMCw4OCwxMTYsOSwwLDEyNCw0LDAsMTI0LDEsMCwxMDAsCisgICAgMSwwLDEyNCwyLDAsMTMxLDIsMSwxMjUsMywwLDEyNCw1LDAsMTAwLDAsCisgICAgMCwxMDcsOCwwLDExNCw5MywxLDEwMCwyLDAsMTEwLDMsMCwxMDAsMywwLAorICAgIDEyNCwzLDAsOTUsMTAsMCwxMjQsNiwwLDEyNCwzLDAsOTUsMTEsMCwxMjQsCisgICAgNywwLDEyNCwzLDAsOTUsMTIsMCwxMjQsMywwLDgzLDQxLDQsNzgsMTE0LAorICAgIDIxNywwLDAsMCw3MCw4NCw0MSwxMywxMTQsMjA4LDAsMCwwLDExNCwyMDksMCwKKyAgICAwLDAsMTE0LDU3LDAsMCwwLDExNCwyMDQsMCwwLDAsMTE0LDIxMCwwLDAsCisgICAgMCw5MCw3LDk1LDc5LDgyLDczLDcxLDczLDc4LDIxOCwxMCw5NSw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDEwMCw5NSw5NSwyMTgsNCwxMDgsMTA1LDExNSwxMTYsMjE4LDgsOTUsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE0LDIxNiwwLDAsMCwxMTQsMjIxLDAsMCwwLAorICAgIDExNCwyMjUsMCwwLDAsMTE0LDIyMCwwLDAsMCw0MSw4LDExNCwxNzksMCwwLAorICAgIDAsMTE0LDE2OSwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwxNzcsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCwyMzgsMCwwLDAsMTE0LDIyNSwwLDAsMCwxMTQsCisgICAgMjIwLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNyw5NSwxMTUsMTEyLDEwMSw5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTY2LDMsMCwwLDExNSw3MiwwLDAsMCwwLAorICAgIDIsMywxLDEzLDEsMTMsMSw1LDIsMTIsMSw0LDIsOSwxLDEyLAorICAgIDEsMywxLDEzLDEsMTMsMiw4LDEsMywxLDEzLDEsMTMsMSwxMSwKKyAgICAxLDEyLDEsMTIsMSwzLDEsMTMsMSwxMywxLDE0LDIsOSwxLDMsCisgICAgMSwxMywxLDEzLDEsMTEsMSwzLDEsMTksMSwxMywxLDExLDIsMjEsCisgICAgMSwyNywxLDksMSw5LDEsMTE0LDI0MywwLDAsMCw5OSwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDY0LDAsMCwKKyAgICAwLDExNSwxNzIsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwKKyAgICAyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLAorICAgIDAsOTAsNCwwLDEwMSw1LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCisgICAgMTMxLDEsMCw5MCw2LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsCisgICAgNywwLDEwMCw4LDAsMTAwLDksMCwxMDAsMTAsMCwxMDAsMTEsMCwxMDAsMTIsCisgICAgMCwxMDAsMTMsMCwxMzIsMCwyLDkwLDgsMCwxMDAsMTQsMCwxMDAsMTUsMCwKKyAgICAxMzIsMCwwLDkwLDksMCwxMDAsMTYsMCwxMDAsMTcsMCwxMzIsMCwwLDkwLAorICAgIDEwLDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCw5MCwxMSwwLDEwMCwyMCwKKyAgICAwLDEwMCwyMSwwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjIsMCwxMDAsMjMsMCwKKyAgICAxMzIsMCwwLDkwLDEzLDAsMTAwLDI0LDAsMTAwLDI1LDAsMTMyLDAsMCw5MCwKKyAgICAxNCwwLDEwMCwyNiwwLDEwMCwyNywwLDEzMiwwLDAsOTAsMTUsMCwxMDAsMjgsCisgICAgMCw4Myw0MSwyOSwxMTQsMTc0LDAsMCwwLDEyMiw3Nyw2NywxMTEsMTEwLDExOCwxMDEsCisgICAgMTEwLDEwNSwxMDEsMTEwLDk5LDEwMSwzMiwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwzMiw5NywKKyAgICAxMTQsMTExLDExNywxMTAsMTAwLDMyLDExNSwxMTIsMTAxLDk5LDMyLDExMSw5OCwxMDYsMTAxLDk5LAorICAgIDExNiwxMTUsMzIsMTE2LDExMSwzMiwxMTIsMTE0LDExMSwxMTgsMTA1LDEwMCwxMDEsMzIsMTE1LDExMiwKKyAgICAxMDEsOTksNDUsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMTAsMzIsMzIsMzIsMzIsCisgICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsCisgICAgMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDAsMCw4Myw0MSwKKyAgICAxLDc4LDQxLDEsMTE0LDE3NywwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCw3MiwwLDAsMCwyMTYsMywwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCwxLDEyMiwyMSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMTE1LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsNCwwLDAsMCwxNywwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMTQ0LDAsMCwwLDEyMSwxMywwLDEyNCwxLDAsMTA2LDAsMCwxMjUsMiwKKyAgICAwLDg3LDExMCwxMTgsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDEzMywwLDEsCisgICAgMSwxLDEyMSwxMywwLDEyNCwyLDAsMTA2LDIsMCwxMjUsMywwLDg3LDExMCwKKyAgICA2NiwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMTEwLDAsMSwxLDEsMTE2LAorICAgIDMsMCwxMjQsMSwwLDEwNiw0LDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLAorICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMDYsMCwxMTYsNSwwLDEyNCwxLDAsCisgICAgMTA2LDQsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDIsMCwxMTAsMCwwLDg5LAorICAgIDExMCwxOSwwLDg4LDExNiw1LDAsMTI0LDEsMCwxMDYsNCwwLDEyNCwzLDAsCisgICAgMTMxLDIsMCwxMjUsMiwwLDg5LDExMCwxLDAsODgsMTI0LDAsMCwxMjQsMiwKKyAgICAwLDEzMSwxLDAsODMsNDEsMiwxMjIsNDEsNjcsMTE0LDEwMSw5NywxMTYsMTAxLDMyLAorICAgIDk3LDMyLDExNSwxMTIsMTAxLDk5LDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5NywzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLAorICAgIDExNSw0Niw3OCw0MSw2LDExNCwyMDgsMCwwLDAsMTE0LDIwOSwwLDAsMCwxMTQsCisgICAgMjA0LDAsMCwwLDIxOCwxMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksCisgICAgMTE0LDU3LDAsMCwwLDExNCwxNzMsMCwwLDAsNDEsNCwyMTgsMyw5OSwxMDgsCisgICAgMTE1LDExNCwxNzksMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsMTY5LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxMSwxMDIsMTE0LDExMSwxMDksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE5LDMsMCwwLAorICAgIDExNSwyMiwwLDAsMCwwLDMsMywxLDEzLDEsMTMsMSwzLDEsMTMsCisgICAgMSwxMywxLDE1LDEsMTIsMSwyNiwyLDIzLDEsMTIyLDI0LDk1LDgzLDExMiwKKyAgICAxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAyLDExNCwxMTEsMTA5LDk1LDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwxMjQsCisgICAgMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDEsCisgICAgMCwxMDcsOCwwLDExNCwzMCwwLDEwMCwyLDAsMTEwLDYsMCwxMjQsMSwwLAorICAgIDEwNiwxLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwxMDcsCisgICAgOCwwLDExNCwxMDQsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwKKyAgICAwLDExNCw4MiwwLDEwMCwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsCisgICAgODMsMTAwLDQsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDEzMSwyLDAsODMsMTEwLDUwLDAsMTI0LDEsMCwxMDYsNSwwLDExNCwxMzIsMCwKKyAgICAxMDAsNSwwLDEwNiw0LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTMxLAorICAgIDIsMCw4MywxMDAsNiwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwKKyAgICAxLDAsMTA2LDIsMCwxMzEsMiwwLDgzLDEwMCwxLDAsODMsNDEsNywxMjIsCisgICAgMzgsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExMiwxMTQsCisgICAgMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMjA2LDAsMCwwLDEyMiwxMyw2MCwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwxMjUsCisgICAgNDEsNjIsMTIyLDIzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LAorICAgIDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMTgsNjAsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDEyNSw0MSw2Miw0MSwKKyAgICA2LDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyMTcsMCwwLDAsCisgICAgMTE0LDE2OSwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDIyNiwwLDAsMCw0MSwKKyAgICAzLDExNCw3MSwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMjA1LDAsMCwwLDIzNSwzLDAsMCwxMTUsMTgsMCwwLDAsMCwzLDksCisgICAgMSwzMCwxLDE1LDEsMTUsMSwxMywyLDIyLDIsOSwxLDE5LDIsMTIyLAorICAgIDI0LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDIxOCw5LDk1LDExMSwxMTgsMTAxLDExNCwKKyAgICAxMTQsMTA1LDEwMCwxMDEsNzAsMjE4LDExLDk1LDEwMiwxMTEsMTE0LDk5LDEwMSw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSw4NCw5OSwyLDAsMCwwLDIsMCwwLDAsNiwwLDAsMCwKKyAgICA2NiwwLDAsMCw2NywwLDAsMCwxMTUsNzUsMiwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEyNSw0LDAsMTI0LDIsMCwxMTUsNDUsMCwxMjQsMywwLDExNSwKKyAgICA0NSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLDMsCisgICAgMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg1LDAsMTIxLDE2LDAsMTI0LDQsMCwKKyAgICAxMDYsMiwwLDEyNCwxLDAsOTUsMywwLDg3LDExMyw4NSwwLDQsMTE2LDQsCisgICAgMCwxMDcsMTAsMCwxMTQsODEsMCwxLDEsMSw4OSwxMTMsODUsMCw4OCwxMTAsCisgICAgMCwwLDEyNCwyLDAsMTE1LDExNSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMywKKyAgICAwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIyMSwwLAorICAgIDEyNCw0LDAsMTA2LDUsMCwxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwxMDcsCisgICAgOCwwLDExNCwxODQsMCwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwKKyAgICAwLDExNCwxODQsMCwxMTYsNywwLDEwNiw4LDAsMTE2LDcsMCwxMzEsMSwwLAorICAgIDEyNSw1LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCw1LDAsOTUsOSwwLDExMywKKyAgICAxODQsMCwxMTAsMCwwLDEyMSwxMywwLDEyNCw1LDAsMTI0LDEsMCw5NSwxMCwKKyAgICAwLDg3LDExMywyMjEsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIxNywwLDEsCisgICAgMSwxLDg5LDExMywyMjEsMCw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDI1MSwwLAorICAgIDExNiwxLDAsMTI0LDEsMCwxMDAsNCwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsCisgICAgMiwwLDEwNyw4LDAsMTE0LDM1LDEsMTIxLDE2LDAsMTI0LDQsMCwxMDYsMTEsCisgICAgMCwxMjQsMSwwLDk1LDEyLDAsODcsMTEzLDM1LDEsNCwxMTYsNCwwLDEwNywKKyAgICAxMCwwLDExNCwzMSwxLDEsMSwxLDg5LDExMywzNSwxLDg4LDExMCwwLDAsCisgICAgMTIxLDEzLDAsMTI0LDQsMCwxMjQsMSwwLDk1LDEzLDAsODcsMTEwLDE4LDAsCisgICAgNCwxMTYsNCwwLDEwNywxMCwwLDExNCw2OCwxLDEsMSwxLDg5LDExMCwxLAorICAgIDAsODgsMTI0LDIsMCwxMTUsOTksMSwxMTYsMSwwLDEyNCwxLDAsMTAwLDUsCisgICAgMCwxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTcsMSwKKyAgICAxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxNTcsMSwxMjEsCisgICAgMTYsMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDEsMCw5NSwxNCwwLDg3LDExMywKKyAgICAxNTQsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDE1MCwxLDEsMSwxLDg5LAorICAgIDExMywxNTQsMSw4OCwxMTMsMTU3LDEsMTEwLDAsMCwxMjQsNCwwLDEwNiwxNSwwLAorICAgIDExNCw3MSwyLDEyNCwyLDAsMTE1LDE5NiwxLDExNiwxLDAsMTI0LDEsMCwxMDAsCisgICAgNiwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIzNiwKKyAgICAxLDEyMSwxNiwwLDEyNCw0LDAsMTA2LDE2LDAsMTI0LDEsMCw5NSwxNywwLAorICAgIDg3LDExMywyMzYsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIzMiwxLDEsMSwKKyAgICAxLDg5LDExMywyMzYsMSw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDEwLDIsMTE2LAorICAgIDEsMCwxMjQsMSwwLDEwMCw3LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwyLAorICAgIDAsMTA3LDgsMCwxMTQsNzEsMiwxMjQsNCwwLDEwNiwxOCwwLDEwMCwyLDAsCisgICAgMTA3LDksMCwxMTQsNjgsMiwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxOCwwLDEyNCwKKyAgICAxLDAsOTUsMTksMCw4NywxMTMsNjUsMiw0LDExNiw0LDAsMTA3LDEwLDAsCisgICAgMTE0LDYxLDIsMSwxLDEsODksMTEzLDY1LDIsODgsMTEzLDY4LDIsMTEzLDcxLAorICAgIDIsMTEwLDAsMCwxMDAsMiwwLDgzLDQxLDgsOTcsMjksMiwwLDAsODMsCisgICAgMTAxLDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsCisgICAgOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywKKyAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsCisgICAgMTE1LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsNDYsMzIsMzIsCisgICAgNzIsMTAxLDExNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwKKyAgICAxMDQsMTExLDExOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTYsMTE2LAorICAgIDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwOSw5NywxMTIsMzIsMTExLDExMCwxMTYsMTExLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDU4LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExMCw5NywxMDksMTAxLDMyLAorICAgIDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMCw5NywxMDksMTAxLAorICAgIDk1LDk1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LAorICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDYsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLAorICAgIDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMiw5Nyw5OSwxMDcsCisgICAgOTcsMTAzLDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTUsCisgICAgMTEyLDEwMSw5OSw5NSw5NSwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OSwKKyAgICAxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzMiw0NSw2MiwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsMzIsCisgICAgNDAsMTA1LDEwMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsOTcsMTE2LDExNiwxMTQsMzIsMTA1LDExNSwzMiwxMTYsMTE0LDExNywxMDEsNDEsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsOTksOTcsOTksMTA0LAorICAgIDEwMSwxMDAsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsOTksCisgICAgOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMzIsNDAsMTA1LDEwMiwzMiw5NSw5NSwxMDIsMTA1LAorICAgIDEwOCwxMDEsOTUsOTUsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsNDEsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDExNyw5OCwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSwKKyAgICA5NywxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ2LDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKKyAgICAxMTYsNDEsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDU3LDAsMCwKKyAgICAwLDc4LDExNCwyMDQsMCwwLDAsMjE4LDExLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSw5NSw5NSwxMTQsMjQyLDAsMCwwLDExNCwyMTAsMCwwLDAsMTE0LDI0MCwKKyAgICAwLDAsMCw0MSwyMCwxMTQsMTc3LDAsMCwwLDExNCw2MiwwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyMDksMCwwLDAsMTE0LDE2OSwKKyAgICAwLDAsMCwxMTQsMjIwLDAsMCwwLDIxOCwxNiw5NSw3OCw5NywxMDksMTAxLDExNSwKKyAgICAxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwyMTgsNyw5NSw5NSwxMTAsMTAxLAorICAgIDExOSw5NSw5NSwyMTgsNSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMjA0LDAsMCwwLDExNCwKKyAgICAyMzEsMCwwLDAsMTE0LDI0OSwwLDAsMCwxMTQsMjA4LDAsMCwwLDExNCwyNDIsCisgICAgMCwwLDAsMTE0LDIyNiwwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwyMTAsMCwKKyAgICAwLDAsMTE0LDIyNSwwLDAsMCwxMTQsMjQwLDAsMCwwLDQxLDYsMTE0LDcxLAorICAgIDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDI0NywwLDAsMCwxMTQsMjQ4LDAsCisgICAgMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSwyNTEsMywKKyAgICAwLDAsMTE1LDg4LDAsMCwwLDAsMTcsOSw2LDEyLDEsMjQsMSwzLAorICAgIDEsMTYsMSwxMywxLDgsMywzMCwxLDksMSwxMiwyLDE1LDEsMTUsCisgICAgMSwxOCwxLDMsMSwxMywxLDEzLDEsOCwzLDMwLDEsMywxLDE2LAorICAgIDEsMTMsMSw4LDMsMywxLDEzLDEsMTMsMSw1LDMsMzAsMSwxNSwKKyAgICAxLDMsMSwxNiwxLDEzLDEsMTEsMiw5LDIsMzAsMSwzLDEsMTYsCisgICAgMSwxMywxLDgsMywzMCwxLDE1LDEsMywxLDE2LDEsMTMsMSwxMjIsCisgICAgMzAsOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDUsMTEwLAorICAgIDEwNSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsMTE1LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LAorICAgIDEsMCwxMTYsMSwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMSwwLDEzMSwyLAorICAgIDAsMTE0LDQ4LDAsMTI0LDEsMCwxMDYsMiwwLDEwNiwzLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDEyNSwyLDAsMTEwLDYsMCwxMDAsMiwwLDEyNSwyLDAsMTI0LAorICAgIDIsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg0LDAsMTE2LDQsMCwxMjQsMSwKKyAgICAwLDEwNiw1LDAsMTMxLDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsNiwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLDAsODMsNDEsMywKKyAgICAxMjIsMTUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ1LDExNCwxMDEsMTA4LDk3LDExNiwxMDEsMTAwLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwKKyAgICAxMTUsMzIsOTcsMTE0LDEwMSwzMiw5NywxMDgsMTE1LDExMSwzMiwxMTUsMTAxLDExNiwzMiwxMTksCisgICAgMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTE4LDk3LDEwOCwxMTcsCisgICAgMTAxLDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMjE4LDEzLDk5LDExNCwxMDEsCisgICAgOTcsMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSw3LDExNCwxNzcsMCwKKyAgICAwLDAsMTE0LDYwLDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDI1NCwwLDAsCisgICAgMCwxMTQsNjgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNTMsMCwwLDAsCisgICAgNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE3NywwLDAsMCwxMTQsMTc5LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCw2LDk5LDExNCwxMDEsOTcsMTE2LDEwMSw3NSw0LDAsMCwxMTUsMTYsMCwwLAorICAgIDAsMCw3LDksMiwxOCwzLDIxLDIsNiwxLDEyLDQsMTgsMSwxMywKKyAgICAxLDEyMiwxOSw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LAorICAgIDk5LDExNCwxMDEsOTcsMTE2LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxLDEwMCwxLDAsODMsNDEsMiwxMjIsMTg5LDY4LDExMSwzMiwxMDEsMTE4LAorICAgIDEwMSwxMTQsMTIxLDExNiwxMDQsMTA1LDExMCwxMDMsMzIsMTEwLDEwMSw5OSwxMDEsMTE1LDExNSw5NywKKyAgICAxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICAzMiwxMTEsMTAyLDMyLDk2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk2LDMyLDEwNSwxMTUsMzIsCisgICAgMTE3LDExNSwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsOTcsMTE0LDEwMywKKyAgICAxMDEsMTE2LDMyLDExMSwxMDIsMzIsMTAxLDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCw0NiwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLAorICAgIDExNiwxMDQsMTExLDEwMCwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwzOSwxMTUsMzIsOTYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNDAsNDEsOTYsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMywxMTQsMTc3LDAsMCwwLAorICAgIDExNCwxNjksMCwwLDAsMjE4LDExLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDUsOTUsCisgICAgMTAxLDEyMCwxMDEsOTksOTgsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwKKyAgICAxOCw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwMSwKKyAgICAxMjAsMTAxLDk5LDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLAorICAgIDExLDAsMCwwLDY3LDAsMCwwLDExNSwxNywxLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMzEsCisgICAgMCwwLDEsMTE2LDQsMCwxMjQsMiwwLDEzMSwxLDAsMTQzLDIyNiwwLDEsCisgICAgMTE2LDUsMCwxMDYsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwKKyAgICAxLDAsMTA3LDksMCwxMTQsOTUsMCwxMDAsMSwwLDEwNiw4LDAsMTI0LDIsCisgICAgMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDksMCwxMjQsMywwLDEwMCwyLDAsCisgICAgMTI0LDIsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwKKyAgICAwLDAsMTA2LDEwLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxODEsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDExLDAsMTAwLDMsMCwxMDcsOCwwLDExNCwxNTgsMCwKKyAgICAxMTYsOSwwLDEwMCw0LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LAorICAgIDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwxMiwKKyAgICAwLDEyNCwxLDAsMTAwLDUsMCwxMDAsNiwwLDEzMSwxLDEsMSwxMjQsMSwKKyAgICAwLDgzLDEyNCwwLDAsMTA2LDEyLDAsMTI0LDEsMCwxMDAsNSwwLDEwMCw2LAorICAgIDAsMTMxLDEsMSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMTAsCisgICAgMCwxMDAsNywwLDEzMSwyLDAsMTE1LDI0MywwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMDYsMTAsMCwxMDYsMTQsMCwxMjQsMiwwLDEzMSwxLDAsMSwxMTAsMTMsMCwKKyAgICAxMjQsMCwwLDEwNiwxNSwwLDEyNCwxLDAsMTMxLDEsMCwxLDg3LDEwMCwzLAorICAgIDAsODEsODgsMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsMjUsODMsNDEsOCwKKyAgICAxMjIsNTEsNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwzMiwxMDUsMTEwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsCisgICAgMTAzLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsCisgICAgMTEyLDk3LDk5LDEwMSw0NiwxMjIsMzAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE0LDY3LDAsMCwwLDc4LDEyMiwxNCwxMDksMTA1LDExNSwKKyAgICAxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMjQ3LDAsMCwwLAorICAgIDg0LDExNCwwLDEsMCwwLDQxLDE2LDExNCwxNzcsMCwwLDAsMTE0LDY3LDAsCisgICAgMCwwLDExNCwxMDYsMCwwLDAsMjE4LDEyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgOTUsMTA4LDExMSw5OSwxMDcsMTE0LDEwMywwLDAsMCwxMTQsNywwLDAsMCwxMTQsCisgICAgNzMsMCwwLDAsMTE0LDkzLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTUzLAorICAgIDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMjUzLDAsCisgICAgMCwwLDExNCw2MCwwLDAsMCwyMTgsMTEsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMTE0LDEsMSwwLDAsNDEsNCwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE3OSwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTc1LAorICAgIDAsMCwwLDEwOCw0LDAsMCwxMTUsMzIsMCwwLDAsMCwyLDEyLDEsCisgICAgMTAsMSwxMywxLDI0LDEsMTUsMSwyMSwxLDE4LDEsMTgsMSwyNywyLAorICAgIDE5LDEsNCwxLDE5LDEsMjEsMiwyMiwyLDE5LDEsMTIyLDE3LDk1LDgzLAorICAgIDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTAxLDEyMCwxMDEsOTksOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMjcsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDI0LDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsCisgICAgMSwwLDEyNCwxLDAsMTA2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTA2LDMsCisgICAgMCwxMzEsMSwwLDEsMTE2LDQsMCwxMDYsNSwwLDEyNCwxLDAsMTA2LDMsCisgICAgMCwyNSwxMjUsMiwwLDExNiw2LDAsMTI0LDIsMCwxMDAsMSwwLDEwMCwwLAorICAgIDAsMTMxLDMsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyMSwxNiwwLAorICAgIDEyNCwxLDAsMTA2LDEsMCwxMjQsMiwwLDk1LDcsMCw4NywxMTMsMTA4LDAsCisgICAgNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LAorICAgIDAsODgsMTEwLDAsMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDIsMCwxMDAsMCwKKyAgICAwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMTUsMCwxMjEsNTksMCwKKyAgICAxMjQsMiwwLDEwNiw5LDAsMTI0LDIsMCw5NSwxMCwwLDExNiwxMSwwLDEyNCwKKyAgICAyLDAsMTAwLDMsMCwxMzEsMiwwLDExNSwxOTAsMCwxMjQsMSwwLDEwNiwzLAorICAgIDAsMTA2LDEyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI0LDIsCisgICAgMCw5NSwxMCwwLDExMCwwLDAsODcsMTEzLDIxNSwwLDQsMTE2LDgsMCwxMDcsCisgICAgMTAsMCwxMTQsMjExLDAsMSwxLDEsODksMTEzLDIxNSwwLDg4LDExMCwwLDAsCisgICAgMTE2LDYsMCwxMjQsMiwwLDEwMCw2LDAsMTAwLDAsMCwxMzEsMywwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsMjAsMSwxMjEsMTMsMCwxMjQsMSwwLDEyNCwyLAorICAgIDAsOTUsMTMsMCw4NywxMTMsMjAsMSw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LAorICAgIDE2LDEsMSwxLDEsODksMTEzLDIwLDEsODgsMTEwLDAsMCwxMjQsMiwwLAorICAgIDgzLDQxLDcsNzgsMTE0LDIwNCwwLDAsMCwxMTQsMjQ5LDAsMCwwLDExNCwyNDIsCisgICAgMCwwLDAsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsMTE0LDIwOCwwLAorICAgIDAsMCw0MSwxNCwxMTQsMTc3LDAsMCwwLDExNCwxNjksMCwwLDAsMTE0LDMsCisgICAgMSwwLDAsMTE0LDY3LDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLAorICAgIDAsMCwxMTQsNjIsMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsMjA5LDAsMCwKKyAgICAwLDExNCw1NywwLDAsMCwxMTQsMjQ5LDAsMCwwLDExNCw2MCwwLDAsMCwKKyAgICAxMTQsMzIsMCwwLDAsMTE0LDIwOCwwLDAsMCw0MSwzLDExNCw3MSwwLDAsCisgICAgMCwxMTQsMTc3LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDI1LDk1LDEwOCwxMTEsOTcsCisgICAgMTAwLDk1LDk4LDk3LDk5LDEwNywxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiw5NywKKyAgICAxMTYsMTA1LDk4LDEwOCwxMDEsMTMwLDQsMCwwLDExNSw0MiwwLDAsMCwwLDIsCisgICAgOSwyLDE5LDEsMTYsMSwyNCwxLDMsMSwxNiwxLDEzLDEsOCwxLAorICAgIDI0LDEsMyw0LDEyLDEsMTUsMSwzMiwxLDEzLDEsOCwxLDI0LDEsCisgICAgMywxLDEzLDEsMTMsMSw4LDEsMTIyLDM4LDk1LDgzLDExMiwxMDEsOTksNzcsCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsOTgsOTcsOTksCisgICAgMTA3LDExOSw5NywxMTQsMTAwLDk1LDk5LDExMSwxMDksMTEyLDk3LDExNiwxMDUsOTgsMTA4LDEwMSwKKyAgICA5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw5LDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwzOCwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsCisgICAgMTMxLDEsMCwxNDMsMjAsMCwxLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LDEyNCwyLDAsODMsCisgICAgNDEsMiwxMjIsNjAsNjksMTIwLDEwMSw5OSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKKyAgICA5OSwzOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwKKyAgICAzMiw5NywxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsMTEwLDEwMywzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDYsCisgICAgNzgsNDEsMiwxMTQsMjEyLDAsMCwwLDExNCwxNzUsMCwwLDAsNDEsMywxMTQsCisgICAgNzEsMCwwLDAsMTE0LDE3OSwwLDAsMCw5MCw2LDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDE0LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwxMDMsCisgICAgMTYwLDQsMCwwLDExNSw2LDAsMCwwLDAsMywxMywxLDIxLDEsMTIyLAorICAgIDI3LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LAorICAgIDExMSw5NywxMDAsOTUsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsMTEwLDEwMyw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTc5LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwKKyAgICAwLDAsMTA3LDksMCwxMTQsNTIsMCwxMTYsMiwwLDEyNCwwLDAsMTA2LDAsCisgICAgMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNTIsMCwxMjQsMCwwLAorICAgIDEwNiwzLDAsMTMxLDAsMCw4MywxMTAsMCwwLDEyNCwwLDAsMTA2LDQsMCwKKyAgICAxMzEsMCwwLDEyNSwxLDAsMTE2LDUsMCwxMjQsMSwwLDEzMSwxLDAsMTQzLAorICAgIDg0LDAsMSwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMCwwLDEwNywKKyAgICA4LDAsMTE0LDE0MywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsNiwwLDEwMCwwLAorICAgIDAsMTA3LDgsMCwxMTQsMTU2LDAsMTE2LDcsMCwxMDAsMiwwLDEwMCwzLDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEwNiw4LDAsMTMxLDEsMSwxMzAsMSwwLDExMywKKyAgICAxNTYsMCwxMTAsMTMsMCwxMjQsMCwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEsODcsMTAwLDAsMCw4MSw4OCwxMTYsMTAsMCwxMDYsMTEsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDgsMCwyNSw4Myw0MSw0LDc4LDExNCwwLDEsMCwKKyAgICAwLDEyMiwxNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDExNCwxMTQsNjcsMCwwLDAsNDEsMTIsMTE0LDE3NywwLDAsMCwxMTQsMTY5LDAsCisgICAgMCwwLDExNCw2MCwwLDAsMCwxMTQsNCwxLDAsMCwxMTQsMjU1LDAsMCwKKyAgICAwLDExNCwyMTIsMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsMTUzLDAsMCwwLAorICAgIDExNCw2NywwLDAsMCwxMTQsMSwxLDAsMCwxMTQsNywwLDAsMCwxMTQsCisgICAgNzMsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE3OSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTQsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDE2NywKKyAgICA0LDAsMCwxMTUsMjAsMCwwLDAsMCwyLDE4LDIsMjEsMSwxMywyLAorICAgIDEyLDEsMTMsMSwxOCwxLDE4LDEsMzAsMywxOSw1LDEyMiwyNyw5NSw4MywKKyAgICAxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwOCwxMTEsOTcsMTAwLAorICAgIDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMSwwLDAsMCw4LDAsMCwwLDY3LDAsMCwwLDExNSw0OSwKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDExNiwyLDAsCisgICAgMTI0LDAsMCwxMDYsMywwLDEwNiw0LDAsMTMxLDEsMCwxNDMsMTUsMCwxLAorICAgIDEyNCwwLDAsMTA2LDUsMCwxMzEsMCwwLDgzLDg3LDEwMCwxLDAsODEsODgsCisgICAgMTAwLDEsMCw4Myw0MSwyLDEyMiwyMDcsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywKKyAgICAzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsOTgsMTA2LDEwMSwKKyAgICA5OSwxMTYsNDQsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTE1LDExMiwxMDEsOTksMzksMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDEwMCwxMDAsMTAxLAorICAgIDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDk3LDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTA4LDExNCwxMDEsOTcsMTAwLDEyMSwKKyAgICAzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NCwKKyAgICAzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDEwNSwxMTAsMTAzLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwMywxMDEsMTE2LDExNSwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw5OSwxMDgsMTExLDk4LDk4LDEwMSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSw2LDExNCwxMDYsMCwwLDAsMTE0LAorICAgIDIsMSwwLDAsMTE0LDEwMywwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw2NywKKyAgICAwLDAsMCwxMTQsNiwxLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTc2LAorICAgIDAsMCwwLDE5MCw0LDAsMCwxMTUsNiwwLDAsMCwwLDksMTAsMSwKKyAgICAxOSwxLDEyMiwxNyw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LAorICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDc4LDQxLDE2LDExNCw1NywwLDAsMCwxMTQsNTYsMCwKKyAgICAwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwwLAorICAgIDAsMjE4LDExLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNCwyNDYsCisgICAgMCwwLDAsMTE0LDIwNSwwLDAsMCwxMTQsMjUzLDAsMCwwLDExNCwyNTUsMCwKKyAgICAwLDAsMTE0LDEsMSwwLDAsMTE0LDE3NSwwLDAsMCwxMTQsNCwxLDAsCisgICAgMCwxMTQsNSwxLDAsMCwxMTQsNiwxLDAsMCwxMTQsMTc2LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwxNzQsMCwwLDAsMjExLDMsMCwwLDExNSwyNCwwLAorICAgIDAsMCwxMiwzLDYsMiwxMiwzLDE4LDE2LDEyLDE2LDI0LDgwLDEyLDIzLAorICAgIDEyLDEwLDEyLDIyLDEyLDMwLDEyLDcsMTIsMjMsMTE0LDE3NCwwLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSwxODEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLAorICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwKKyAgICAwLDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwwLAorICAgIDEwMCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDIsMCwxMzEsCisgICAgMSwwLDkwLDcsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDcsMCwxMDAsOCwKKyAgICAwLDEzMiwxLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDYsMCwxMDEsOSwwLAorICAgIDEwMCw5LDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsCisgICAgMTAsMCwxMDEsNiwwLDEwMSw5LDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsCisgICAgMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsNiwwLDEwMSw5LDAsCisgICAgMTAwLDEzLDAsMTAwLDE0LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsCisgICAgMTIsMCwxMDEsNiwwLDEwMSw5LDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsCisgICAgMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwxMDAsNCwwLDgzLDQxLDE3LAorICAgIDIxOCwxNSw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKKyAgICAxMTQsMTIyLDE0NCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwKKyAgICAxMDgsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwKKyAgICAxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsMTE1LAorICAgIDExNiw5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsMTExLAorICAgIDMyLDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsCisgICAgMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsCisgICAgMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwKKyAgICAzMiwzMiwzMiw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLAorICAgIDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwKKyAgICAxMjIsMjQsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsCisgICAgOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDEsNjIsNDEsMiwxMTQsNDcsMCwwLAorICAgIDAsMTE0LDU3LDAsMCwwLDQxLDEsMTE0LDE3OSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjA1LDAsMCwKKyAgICAwLDIxNSw0LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDI3LDY2LDExNywKKyAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsNzgsOTksNCwwLDAsMCwwLAorICAgIDAsMCwwLDQsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNTgsMCwwLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDE2LDAsCisgICAgMTAwLDAsMCw4MywxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDExNCw1MCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLAorICAgIDIsMCwxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCw4Myw0MSwzLAorICAgIDc4LDExNCwyMTcsMCwwLDAsMTIyLDgsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsCisgICAgNDEsMywxMTQsMTA2LDAsMCwwLDkwLDEwLDEwNSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsCisgICAgMTE2LDEwNSwxMTAsMTE0LDE3MywwLDAsMCw0MSw0LDExNCwyNDUsMCwwLDAsMTE0LAorICAgIDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDYsMTE2LDk3LDExNCwxMDMsMTAxLAorICAgIDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAyMTgsOSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksMjIwLDQsMCwwLDExNSwKKyAgICAxMCwwLDAsMCwwLDIsMTIsMSw0LDEsMTUsMSwxOSwyLDEyMiwyNSwKICAgICA2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDM5LDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNiwKLSAgICAwLDEwMCwxLDAsODMsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMTQsMzUsMCwxMjQsMCwwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCwxMTcsMTEzLDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMTIsOTcsMTE2LAotICAgIDEwNCwzOSwzMiwxMDUsMTE1LDMyLDEwMSwxMTgsMTAxLDExNCwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsCi0gICAgMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsCi0gICAgMTAxLDEwMCwzMiw5NywzMiwxMDIsOTcsMTA1LDEwOCwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwzLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMCwwLDAsMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQwLDMsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwKLSAgICAwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEyOSwyLDAsCi0gICAgMCwxMTUsNiwwLDAsMCwwLDcsMTIsMSw0LDEsMTE3LDI3LDAsMCwKLSAgICAwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDMsMCwwLDAsOSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsODgsMCwwLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LAotICAgIDYsMCwxMjUsMiwwLDEyMSwyMCwwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwKLSAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsNDYsMCwxLDEsMSwxMjQsCi0gICAgMiwwLDEyLDExNCw3NiwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKLSAgICA2LDAsMTE0LDc2LDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjEsMTEwLAotICAgIDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDEsMCw4Myw0MCwyLAotICAgIDAsMCwwLDExNywyMywwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LAotICAgIDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSwKLSAgICA5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwKLSAgICAxMTcsMTIsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLDAsCi0gICAgMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDE0MCwyLDAsMCwxMTUsMTQsMCwwLDAsMCw2LAotICAgIDE1LDEsMywxLDIwLDEsMywxLDIyLDEsMTMsMSwxMTcsMjcsMCwwLAotICAgIDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwKLSAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDE1NCwKLSAgICAyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LDI0LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLAorICAgIDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLAorICAgIDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLAorICAgIDIsMCwxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwzNywKKyAgICAwLDEyNCwzLDAsMTA2LDEsMCw4MywxMDAsMSwwLDgzLDQxLDIsMTIyLDExMywKKyAgICA3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LAorICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw3MywxMDIsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksMzIsMTA1LDExNSwzMiwKKyAgICAxMDEsMTE4LDEwMSwxMTQsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTYsCisgICAgMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5NywxMTQsOTksMTA0LDMyLDEwNSwKKyAgICAxMTUsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LDEwMSwxMDAsMzIsOTcsMzIsMTAyLAorICAgIDk3LDEwNSwxMDgsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzgsNDEsMiwxMTQsMTAsMSwwLDAsMTE0LDE2OSwwLDAsMCw0MSw0LAorICAgIDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTEsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDIyOSw0LDAsMCwxMTUsNCwwLDAsMCwwLDcsMTgsMSwxMjIsMjcsNjYsCisgICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwKKyAgICAxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMywwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgNTksMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTQzLDIzLDAsCisgICAgMSwxMTYsMSwwLDExNiwyLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwyLDAsCisgICAgMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LDEyNCwwLDAsMTI0LDIsMCw5NSwKKyAgICA0LDAsMTAwLDIsMCwxMjQsMiwwLDk1LDUsMCwxMjQsMiwwLDgzLDQxLAorICAgIDMsMTIyLDIzLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LAorICAgIDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsMTE0LDMwLDAsMCwwLAorICAgIDQxLDYsMTE0LDY5LDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDEwNiwwLDAsCisgICAgMCw5MCwxMiwxMDUsMTEwLDEwNSwxMTYsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE0LAorICAgIDIwNCwwLDAsMCwxMTQsMjQ5LDAsMCwwLDQxLDMsMTE0LDI0NSwwLDAsMCwKKyAgICAxMTQsMTU4LDAsMCwwLDExNCwxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDMsMSwwLDAsMjM5LDQsCisgICAgMCwwLDExNSwxMCwwLDAsMCwwLDQsMTMsMSwyNCwxLDksMSw5LAorICAgIDEsMTIyLDI3LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTcsCisgICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsCisgICAgMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAorICAgIDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsCisgICAgMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwKKyAgICAyLDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOCwxMDMsMTAxLDExNiw5NSwKKyAgICA5OSwxMTEsMTAwLDEwMSwyNDksNCwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwKKyAgICAyNCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwKKyAgICAwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU2LDgyLDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwKKyAgICAxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLAorICAgIDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjQ1LDAsMCwwLAorICAgIDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDEwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgMjU1LDQsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjYsNjYsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LAorICAgIDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAogICAgIDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsCi0gICAgMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDU2LDAsMCwwLDgyLAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywKLSAgICAxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsCi0gICAgMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsNDAsMSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwKLSAgICAwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTYwLDIsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsNCwxMTcsMjYsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsCi0gICAgMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDUyLDAsMCwwLDgyLDEwMSwxMTYsCi0gICAgMTE3LDExNCwxMTAsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsCi0gICAgMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDExMCwxMDEsMTE4LDEwMSwxMTQsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSwKLSAgICA0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsCi0gICAgMTAxLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTY2LDIsMCwwLDExNSwyLDAsMCwwLDAsCi0gICAgNCwxMTcsMjYsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDc4LDQwLDE1LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsCi0gICAgMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LAotICAgIDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE3LDExLDAsCi0gICAgMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsCi0gICAgMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNiwyLDAsMCwKLSAgICAxMTUsMjgsMCwwLDAsMTYsNyw2LDIsMTgsNCwzLDEsMTgsMTAsMywKLSAgICAxLDMsMSwzLDEsMjcsMTEsMywxLDIxLDUsMywxLDIxLDUsMywKLSAgICAxLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsNiwwLDAsMCw2NiwwLDAsMCwxMTUsMTczLDAsMCwwLDEyNCwKLSAgICAwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAotICAgIDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsCi0gICAgMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCwxNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMSwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LDAsMTAxLAotICAgIDgsMCwxMDEsOSwwLDEwMSwxMCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTEsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEwLAotICAgIDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDE0LDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLAotICAgIDAsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDEsMTE0LDExNywxNDIsMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsCi0gICAgMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwKLSAgICAxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LAotICAgIDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIyLDAsMCwwLDYwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksCi0gICAgOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMSwwLDAsCi0gICAgMCwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE4MiwyLAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI2LDAsMCwwLDcwLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw5OSwzLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLAotICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxOSwKLSAgICAwLDEyNCwwLDAsODMsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwKLSAgICAwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCw0MCwzLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNyw5LDAsMCwwLDEwNSwxMTUsOTUsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLAotICAgIDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTg2LDIsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsMywxMTcsMjYsMCwwLDAsNzAsMTE0LDExMSwKKyAgICAwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKKyAgICA3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKKyAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTEwLDEwMSwKKyAgICAxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDQ2LDcwLDExNCw0LAorICAgIDAsMCwwLDQxLDIsMTE0LDI0NSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTksCisgICAgMCwwLDAsNSw1LDAsMCwxMTUsMiwwLDAsMCwwLDUsMTIyLDI2LAorICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKKyAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwxNCwxMTQsNTcsMCwwLAorICAgIDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsCisgICAgMjE4LDEyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsMjA1LAorICAgIDAsMCwwLDExNCw3LDEsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTEsMSwKKyAgICAwLDAsMTE0LDE2MSwwLDAsMCwxMTQsMywxLDAsMCwxMTQsMTIsMSwwLAorICAgIDAsMTE0LDEzLDEsMCwwLDExNCwyMTksMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDgsMSwwLDAsMjA2LDQsMCwwLDExNSwyOCwwLDAsMCwxMiw3LDYsCisgICAgMiwxOCw1LDMsMSwyMSw4LDMsMSwxOCw5LDMsMSwyMSw5LDMsCisgICAgMSwyMSw1LDMsMSwyMSw1LDMsMSwxMTQsOCwxLDAsMCw5OSwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDY0LAorICAgIDAsMCwwLDExNSwxOTMsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsCisgICAgMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLAorICAgIDEwMCwzLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNiwwLDEwMCwKKyAgICA0LDAsMTAwLDQsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDIsMCwxMzEsMSwKKyAgICAwLDkwLDcsMCwxMDEsNiwwLDEwMCw0LDAsMTAwLDcsMCwxMDAsOCwwLAorICAgIDEzMiwxLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDQsMCwxMDAsOSwwLDEwMCwKKyAgICAxMCwwLDEzMiwwLDAsMTMxLDEsMCw5MCw5LDAsMTAxLDYsMCwxMDAsMTEsCisgICAgMCwxMDAsMTIsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTAsMCwxMDEsNiwwLAorICAgIDEwMSwxMSwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsCisgICAgMSwwLDkwLDEyLDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTUsMCwxMDAsMTYsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMywwLDEwMSw2LDAsCisgICAgMTAxLDExLDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwKKyAgICAxLDAsOTAsMTQsMCwxMDAsNCwwLDgzLDQxLDE5LDIxOCwxNCw3MCwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsMTQyLDc3LDEwMSwxMTYsCisgICAgOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKKyAgICAxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsOTksMTA4LAorICAgIDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsMTE2LDk3LDExNiwxMDUsOTksMzIsMTA5LDEwMSwKKyAgICAxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsMzIsOTcsMTE4LDExMSwxMDUsMTAwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwKKyAgICAxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDk5LAorICAgIDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwyMiw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMjMsMzMsMTE0LDEyNSwzMiw0MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSw2MiwKKyAgICA0MSwyLDExNCw0NywwLDAsMCwxMTQsNTcsMCwwLDAsNDEsMSwyMTgsMSwKKyAgICAxMDksMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDIwNSwwLDAsMCwyMiw1LDAsMCwxMTUsMiwwLDAsMCwwLDMsCisgICAgMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAorICAgIDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsCisgICAgMCwwLDAsMCwwLDAsNCwwLDAsMCw1LDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw0MiwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwKKyAgICAxMzEsMSwwLDExNCwzNCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwKKyAgICAxLDAsMTAwLDIsMCwxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCwKKyAgICA4Myw0MSwzLDc4LDExNCwyMTcsMCwwLDAsOTAsNiwxMDIsMTE0LDExMSwxMjIsMTAxLAorICAgIDExMCw0MSwzLDExNCwxMDYsMCwwLDAsMTE0LDE2MiwwLDAsMCwxMTQsMTczLDAsCisgICAgMCwwLDQxLDQsMTE0LDI0NSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwKKyAgICAwLDAsMCwxMTQsOSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMTAsMSwwLDAsMjcsNSwwLDAsCisgICAgMTE1LDYsMCwwLDAsMCwyLDE1LDEsMTksMiwxMjIsMjQsNzAsMTE0LDExMSwKICAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwKLSAgICA0LDAsMCwwLDksMCwwLDAsNjcsMCwwLDAsMTE1LDEwMCwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDMyLDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMzEsCi0gICAgMiwwLDEyNSwzLDAsMTI0LDMsMCw5Niw1LDAsMTI0LDMsMCw4Myw4NywKLSAgICAxMTAsNDYsMCwxLDEsMSwxMjQsMiwwLDEyLDExNCw4OCwwLDEyNCwxLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTE0LDg4LDAsMTE2LDAsMCwxMDYsCi0gICAgMSwwLDEyNCwxLDAsNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsCi0gICAgODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwwLDAsMCw3NiwKLSAgICAxMTEsOTcsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQ2LDc4LDQwLDYsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw5NSwxMDUsMTA5LDExMiwxMTcsMTEsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICA5NSw5NSw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsMSwwLDAsMCwxMDksCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDIsMCwwLAotICAgIDExNSwxOCwwLDAsMCwwLDYsMTUsMSwzLDEsMTgsMiw2LDEsOCwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMTE3LDI2LDAsMCwwLDcwLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsMSwwLAotICAgIDAsMCwxMTcsNDUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LAorICAgIDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDExNiwKKyAgICAwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDE5LDAsMTI0LDAsCisgICAgMCw4MywxMDAsMSwwLDgzLDQxLDIsMTIyLDIxLDcwLDEwNSwxMTAsMTAwLDMyLDk3LAorICAgIDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LAorICAgIDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsMTYyLDAsMCwwLDQxLDMsMTE0LDI0NSwKKyAgICAwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTEsMSwwLAorICAgIDAsMzQsNSwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwyNiw3MCwxMTQsCisgICAgMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDMsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsOTUsMCwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTI1LDEsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw1NywwLDExNiw0LDAsCisgICAgMTAwLDEsMCwxMDYsNSwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwKKyAgICAxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTE2LDYsMCwxMTYsMiwKKyAgICAwLDEwNiw3LDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwyLDAsMTE2LDgsMCwKKyAgICAxMjQsMiwwLDEyNCwwLDAsMTA2LDksMCwxMzEsMiwwLDEsMTAwLDAsMCwKKyAgICA4Myw0MSwzLDc4LDEyMiwyNywxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsCisgICAgMTE2LDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNCw2NywwLDAsMCw0MSwxMCwxMTQsMjA4LDAsMCwwLDExNCw2NywwLAorICAgIDAsMCwxMTQsMTA2LDAsMCwwLDExNCwxNjIsMCwwLDAsMTE0LDE1MywwLDAsCisgICAgMCwxMTQsNDcsMCwwLDAsMTE0LDExNCwwLDAsMCwyMTgsMTcsMTAzLDEwMSwxMTYsCisgICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNCwxNzUsCisgICAgMCwwLDAsMTE0LDYzLDAsMCwwLDQxLDMsMTE0LDE3OSwwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDE5NCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMCwxLDAsMCwzOSw1LDAsCisgICAgMCwxMTUsMTIsMCwwLDAsMCwyLDEyLDEsMTUsMSwxOCwxLDEyLDEsCisgICAgMTgsMSwxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwMSwxMTQsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwxLAorICAgIDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMSw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLAorICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDQxLDEsCisgICAgMTE0LDE4MCwwLDAsMCw0MSwyLDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMywxLDAsMCw0OCw1LDAsMCwxMTUsMiwwLDAsMCwwLDMsCisgICAgMTIyLDI2LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAorICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsODMsNDEsMSwxMjIsNDUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LAogICAgIDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExMSwKICAgICAxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNDYsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTcsMTcsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsOTUsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQwLDIsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwKLSAgICAwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwyMDgsMiwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCw0LDExNywyMywwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCi0gICAgMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsCi0gICAgNDAsMiwwLDAsMCwxMTcsNTQsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LAotICAgIDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwKLSAgICA3OCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwyMTQsMiwwLDAsMTE1LDIsMCwwLDAsMCw0LDExNywKLSAgICAyNSwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwKLSAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAotICAgIDEzMSwxLDAsODMsNDAsMSwwLDAsMCwxMTcsNDYsMCwwLDAsODIsMTAxLAotICAgIDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwKLSAgICAxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDE3LDAsMCwwLDEwNSwKLSAgICAxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsMjIwLDIsMCwwLDExNSwyLDAsMCwwLDAsNCwKLSAgICAxMTcsMjUsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNzgsNDAsCi0gICAgMTUsMCwwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LAotICAgIDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSwKLSAgICA5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNywxMSwwLAotICAgIDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTEsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTYsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwKLSAgICAxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTEsMCwwLDAsMTA4LAotICAgIDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxNzMsMiwwLDAsMTE1LDI4LDAsMCwKLSAgICAwLDE2LDcsNiwyLDE4LDQsMywxLDE4LDQsMywxLDMsMSwzLAotICAgIDEsMjcsMTQsMywxLDIxLDUsMywxLDIxLDUsMywxLDExNywxNCwwLAotICAgIDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwKLSAgICAwLDY2LDAsMCwwLDExNSwxMDEsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwKLSAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKLSAgICAxMDAsMiwwLDkwLDQsMCwxMDAsMywwLDkwLDUsMCwxMDAsMTEsMCw5MCwKLSAgICA3LDAsMTAxLDgsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwxMzEsMSwKLSAgICAwLDkwLDksMCwxMDEsOCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLAotICAgIDEzMSwxLDAsOTAsMTAsMCwxMDEsOCwwLDEwMCwxMCwwLDEwMCw4LDAsMTAwLAotICAgIDksMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDAsMTAsMCw4Myw0MCwKLSAgICAxMiwwLDAsMCwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsCi0gICAgODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDY3LAotICAgIDAsMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAotICAgIDEwMCwxMDEsOTksMTA4LDk3LDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwKLSAgICA0NiwxMCwzMiwzMiwzMiwzMiwxMTcsNTksMCwwLDAsODMsMTExLDEwMiwxMTYsMTE5LAotICAgIDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsCi0gICAgMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDExNyw2NSwwLDAsMCw4MywxMTEsMTAyLDExNiwxMTksCi0gICAgOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwKLSAgICAxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LDExNSwxMDUsCi0gICAgMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwxMTcsMTA4LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsOTIsNjgsMTAxLDk4LDExNywxMDMsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDY3LDAsMCwwLDEyMSwyMywwLDExNiwwLDAsMTA2LDEsMCwxMTYsCi0gICAgMCwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMiwwLDgzLDg3LDExMCwzNywwLAotICAgIDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNjIsMCwxLDEsMSwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTE2LDAsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLDIsMCw4MywKLSAgICA4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwKLSAgICA1LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLAotICAgIDExNyw3LDAsMCwwLDc5LDExMiwxMDEsMTEwLDc1LDEwMSwxMjEsMTE3LDE3LDAsMCwKLSAgICAwLDcyLDc1LDY5LDg5LDk1LDY3LDg1LDgyLDgyLDY5LDc4LDg0LDk1LDg1LDgzLAotICAgIDY5LDgyLDExNywxMiwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLDcyLDc1LDY5LDg5LDk1LDc2LDc5LDY3LAotICAgIDY1LDc2LDk1LDc3LDY1LDY3LDcyLDczLDc4LDY5LDQwLDIsMCwwLDAsMTE3LAotICAgIDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMywwLDAsMCwxMDcsMTAxLDEyMSw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNCwwLDAsMCwKLSAgICA5NSwxMTEsMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwyNDAsMiwKLSAgICAwLDAsMTE1LDgsMCwwLDAsMCwyLDMsMSwyMywxLDEzLDEsMTE3LAotICAgIDM2LDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwKLSAgICAxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMSwxMTIsMTAxLDExMCw5NSwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk5LDIsMCwwLDAsMCwwLDAsCi0gICAgMCw2LDAsMCwwLDE2LDAsMCwwLDY3LDAsMCwwLDExNSwxNDIsMCwKLSAgICAwLDAsMTI0LDAsMCwxMDYsMCwwLDExNCwyMSwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMjUsMiwwLDExMCw5LDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTI0LDIsMCwxMDYsMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsMiwwLDExNiwKLSAgICA0LDAsMTA2LDUsMCwxMDAsMCwwLDEwMCwzLDAsMTMzLDIsMCwyNSwxMzEsCi0gICAgMCwyLDEyNSwzLDAsMTIxLDQ2LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLAotICAgIDAsMTMxLDEsMCwxNDMsMjUsMCwxMjUsNCwwLDExNiw3LDAsMTA2LDgsMCwKLSAgICAxMjQsNCwwLDEwMCw0LDAsMTMxLDIsMCwxMjUsNSwwLDg3LDEwMCwwLDAsCi0gICAgODEsODgsODcsMTEwLDIyLDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwxMzcsMCwKLSAgICAxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsODgsMTI0LDUsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDEwNSwzLDAsMCwwLDExNywwLDAsMCwwLDQwLDExLDAsCi0gICAgMCwwLDExNywxMSwwLDAsMCw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4NSw3MywKLSAgICA3Niw2OCwxMTcsMTgsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsODksOTUsCi0gICAgNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMTE3LDEyLDAsMCwwLDgyLDY5LAotICAgIDcxLDczLDgzLDg0LDgyLDg5LDk1LDc1LDY5LDg5LDExNyw2LDAsMCwwLDEwMiwKLSAgICAxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNywxNCwwLDAsMCw5NSwxMTEsCi0gICAgMTEyLDEwMSwxMTAsOTUsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsNywwLDAsCi0gICAgMCw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMTAsMCwwLDAsODEsMTE3LDEwMSwKLSAgICAxMTQsMTIxLDg2LDk3LDEwOCwxMTcsMTAxLDExNywxMiwwLDAsMCw4NywxMDUsMTEwLDEwMCwKLSAgICAxMTEsMTE5LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwKLSAgICAxMDEsNDAsNiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw5NSwxMDcsMTAxLDEyMSwxMTcsMywwLDAsCi0gICAgMCwxMDcsMTAxLDEyMSwxMTcsNCwwLDAsMCwxMDQsMTA3LDEwMSwxMjEsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDExNSwxMDEsOTcsMTE0LAotICAgIDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDI0NywyLDAsMCwxMTUsCi0gICAgMjIsMCwwLDAsMCwyLDksMSwxMiwyLDksMSwxNSwxLDIyLDEsCi0gICAgMywxLDE4LDEsMjgsMSwxMywxLDksMSwxMTcsMzgsMCwwLDAsODcsCi0gICAgMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLAotICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwKLSAgICAwLDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNywwLDAsMCwxMjQsCi0gICAgMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTI0LDMsCi0gICAgMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDMxLDAsMTAwLDEsMCw4MywxMjEsMTcsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwxMzEsMSwwLDEsODcsMTEwLAotICAgIDIyLDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw3MiwwLDEsMSwxLDEwMCwKLSAgICAxLDAsODMsODksMTEwLDEsMCw4OCwxMjAsNTcsMCwxMTYsNSwwLDEzMSwwLAotICAgIDAsNjgsOTMsNDYsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCwzLAotICAgIDAsMTA2LDYsMCwxMTYsNywwLDEyNCw1LDAsMTMxLDEsMCwxMzEsMSwwLAotICAgIDExNCw4MywwLDEyNCw0LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsCi0gICAgMTEzLDgzLDAsODcsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywzNCwwLAotICAgIDAsMCw3MCwxMDUsMTEwLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LAotICAgIDExNiwxMTQsMTIxLDQ2LDc4LDQwLDgsMCwwLDAsMTE3LDE2LDAsMCwwLDk1LAotICAgIDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLDk1LDExMSwxMTUsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDcsMCwwLDAsNzksODMsCi0gICAgNjksMTE0LDExNCwxMTEsMTE0LDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTAxLDExMCwxMDAsMTE1LDExOSwxMDUsCi0gICAgMTE2LDEwNCwxMTcsNSwwLDAsMCwxMTYsMTE3LDExMiwxMDgsMTAxLDQwLDYsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDgsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNiwzLDAsMCwxMTUsMjAsMCwwLDAsMCwzLDE1LDEsMTIsMSw0LAotICAgIDEsMywxLDE3LDEsMTMsMSw5LDEsMjIsMSwyMSwxLDExNywzMywwLAotICAgIDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwKLSAgICAxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsNzgsNzAsNDAsMTMsMCwwLDAsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LAotICAgIDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwxMDAsMTExLAotICAgIDk5LDk1LDk1LDExNywxMiwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSwKLSAgICA5NSw3NSw2OSw4OSwxMTcsMTgsMCwwLDAsODIsNjksNzEsNzMsODMsODQsODIsCi0gICAgODksOTUsNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMTE3LDUsMCwwLDAsCi0gICAgNzAsOTcsMTA4LDExNSwxMDEsMTE3LDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LAotICAgIDY2LDg1LDczLDc2LDY4LDExNywxMSwwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksCi0gICAgMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTQsMCwwLDAsOTUsMTExLDExMiwxMDEsMTEwLDk1LAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDE2LDAsMCwwLDk1LDExNSwxMDEsCi0gICAgOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIxLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwKLSAgICAxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDIyNywyLDAsMCwxMTUsMTYsMCwwLDAsMTYsMyw2LDMsNiwzLDYsCi0gICAgMiw2LDIsMTgsNywxOCwxNSwzLDEsMTE3LDIxLDAsMCwwLDg3LDEwNSwKLSAgICAxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDUsMCwwLDAsNjYsMCwwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsCi0gICAgNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwKLSAgICA5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCwKLSAgICA0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDEwMCw2LAotICAgIDAsMTAwLDEwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDEsMTMxLDEsMCwKLSAgICA5MCw4LDAsMTAwLDksMCw4Myw0MCwxMSwwLDAsMCwxMTcsMTMsMCwwLAotICAgIDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNyw4MywKLSAgICAwLDAsMCw2Niw5NywxMTUsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMDIsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTAsMTAxLDEwMSwKLSAgICAxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsMTExLDExNiwxMDQsMzIsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLAotICAgIDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCw1LAotICAgIDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDg4LDAsMCwwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMzEsCi0gICAgMSwwLDEwMCwxLDAsMjUsMTI1LDIsMCwxMjQsMiwwLDEwNiwyLDAsMTAwLAotICAgIDIsMCwxMDAsMSwwLDEzMSwyLDAsMTAwLDMsMCwyNSwxMjUsMywwLDEyNCwKLSAgICAxLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDQsMCwyNSwxMjUsCi0gICAgNCwwLDEyNCwzLDAsMTAwLDUsMCwxMDcsMiwwLDExMSw4NywwLDEyNCw0LAotICAgIDAsMTAwLDUsMCwxMDcsMywwLDgzLDQwLDYsMCwwLDAsMTE3LDE0MSwwLAotICAgIDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LAotICAgIDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLDk4LAotICAgIDEyMSwzMiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTA0LAotICAgIDk3LDExNSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKLSAgICAzMiwzOSw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSw0NiwxMDUsCi0gICAgMSwwLDAsMCwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsCi0gICAgOTUsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAyLAotICAgIDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwwLDExNCwxMTUsMTEyLDEwOCwKLSAgICAxMDUsMTE2LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDgsMCwwLAotICAgIDAsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNywxMywwLDAsMCwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsOTcsMTA1LDEwOCw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwKLSAgICAxMDcsOTcsMTAzLDEwMSwyNiwzLDAsMCwxMTUsOCwwLDAsMCwwLDMsMjUsCi0gICAgMSwyMiwxLDE5LDEsMTE3LDI0LDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5OSw1LDAsMCwwLDAsMCwwLDAsMTIsMCwwLDAsMjIsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDIwOCwxLDAsMCwxMjQsMiwwLDEwMCwKLSAgICAxLDAsMTAwLDIsMCwxMzMsMiwwLDI1LDEyNSw1LDAsMTI0LDIsMCwxMDAsCi0gICAgMiwwLDEwMCwzLDAsMTMzLDIsMCwyNSwxMjUsNiwwLDEyNCwyLDAsMTAwLAotICAgIDMsMCwxMDAsNCwwLDEzMywyLDAsMjUsMTI1LDcsMCwxMjQsNSwwLDExNiwKLSAgICAwLDAsMTA3LDMsMCwxMTQsMTE1LDAsMTAwLDUsMCwxMDYsMSwwLDEyNCwxLAotICAgIDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw4LDAsMTE2LDIsMCwxMjQsOCwwLAotICAgIDEzMSwxLDAsMSwxMTYsMywwLDEyNCw4LDAsMTAwLDYsMCwxMjQsMSwwLAotICAgIDEwMCw3LDAsMTI0LDMsMCwxMzEsMSwyLDEzMCwxLDAsMTEwLDExNiwwLDExNiwKLSAgICA0LDAsMTI0LDYsMCwxMzEsMSwwLDEwMCwyLDAsMTA3LDMsMCwxMTQsMTczLAotICAgIDAsMTAwLDgsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLAotICAgIDExNiwyLDAsMTI0LDksMCwxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOSwwLAotICAgIDEzMSwxLDAsMTMwLDEsMCwxMTAsNTgsMCwxMTYsNCwwLDEyNCw3LDAsMTMxLAotICAgIDEsMCwxMDAsMiwwLDEwNywzLDAsMTE0LDIzMSwwLDEwMCw5LDAsMTA2LDEsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwxMTYsMiwwLDEyNCw5LDAsCi0gICAgMTMxLDEsMCwxLDExNiw1LDAsMTI0LDksMCwxMzEsMSwwLDEzMCwxLDAsCi0gICAgMTEwLDAsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTk0LDEsMTIxLAotICAgIDIwLDAsMTE2LDcsMCwxMjQsNCwwLDEwMCwxMCwwLDI1LDEzMSwxLDAsMTI1LAotICAgIDEwLDAsODcsMTEwLDE4LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyNywxLAotICAgIDEsMSwxLDg5LDExMCw3MSwwLDg4LDExNiw5LDAsMTI0LDYsMCwxMzEsMSwKLSAgICAwLDEyNCwxMCwwLDEwNywzLDAsMTE0LDk4LDEsMTAwLDExLDAsMTA2LDEsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDAsMTI1LDksMCwxMTYsMiwwLDEyNCw5LDAsMTMxLAotICAgIDEsMCwxLDExNiwzLDAsMTI0LDksMCwxMDAsNiwwLDEyNCwxLDAsMTAwLAotICAgIDcsMCwxMjQsMywwLDEzMSwxLDIsMTMwLDEsMCwxMTAsMCwwLDEyMSwxOCwKLSAgICAwLDEyNCw0LDAsMTAwLDEyLDAsMjUsMTAwLDEzLDAsNjQsMTI1LDExLDAsODcsCi0gICAgMTEwLDE4LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxMzYsMSwxLDEsMSwKLSAgICA4OSwxMTMsMTk0LDEsODgsMTE2LDksMCwxMjQsNywwLDEzMSwxLDAsMTI0LDExLAotICAgIDAsMTA3LDMsMCwxMTQsMTk0LDEsMTE2LDMsMCwxMDAsMTEsMCwxMDYsMSwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMDAsNiwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsCi0gICAgMywwLDEzMSwxLDIsMTMwLDEsMCwxMTMsMTk0LDEsMTEwLDAsMCwxMjQsMiwKLSAgICAwLDEwMCw0LDAsMTAwLDEsMCwxMzMsMiwwLDI1LDgzLDQwLDE0LDAsMCwKLSAgICAwLDExNywxOTMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDk4LDEyMSwxMTYsMTAxLAotICAgIDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDQsCi0gICAgMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAotICAgIDk3LDEwMywxMDUsOTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEwLDExNywxMDksCi0gICAgOTgsMTAxLDExNCw0NCwzMiwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDk3LAotICAgIDExMCwxMDAsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTUsMTA1LDEyMiwxMDEsMzIsOTcsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExOSw5NywxMjEsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDExNSwxMDcsMTA1LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDk5LDEwNCwxMDEsOTksMTA3LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDEwNSw0LDAsMCwwLDEwNSw4LDAsCi0gICAgMCwwLDEwNSwxMiwwLDAsMCwxMTcsMzAsMCwwLDAsOTgsOTcsMTAwLDMyLAotICAgIDEwOSw5NywxMDMsMTA1LDk5LDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsMzIsMTA1LDExMCwzMiwKLSAgICAxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsMTE0LDEyNSwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMTksMCwwLAotICAgIDAsOTgsOTcsMTAwLDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTA1LAotICAgIDExMCwzMiwxMjMsMTI1LDExNywxNCwwLDAsMCw5OCw5NywxMDAsMzIsMTE1LDEwNSwxMjIsCi0gICAgMTAxLDMyLDEwNSwxMTAsMzIsMTIzLDEyNSwxMTcsNSwwLDAsMCwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywyNCwwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDExNSwxMTYsOTcsMTA4LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNyw0LAotICAgIDAsMCwwLDExNSwxMDUsMTIyLDEwMSwxMDgsMywwLDAsMCwyNTUsMTI3LDI1NSwxMjcsCi0gICAgMywwLDQwLDEwLDAsMCwwLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSwKLSAgICA3Myw2Nyw5NSw2Niw4OSw4NCw2OSw4MywxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSwKLSAgICA5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsCi0gICAgMTE3LDgsMCwwLDAsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLDEwNSwxMTAsMTE2LDExNyw4LAotICAgIDAsMCwwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLAotICAgIDk1LDExNCw5NSwxMDgsMTExLDExMCwxMDMsNDAsMTIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDExNywxMywwLDAsMCwKLSAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsMCwKLSAgICAwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTE3LDUsCi0gICAgMCwwLDAsMTA5LDk3LDEwMywxMDUsOTksMTE3LDEzLDAsMCwwLDExNCw5NywxMTksCi0gICAgOTUsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwxMTcsOCwwLDAsMCwxMTQsCi0gICAgOTcsMTE5LDk1LDExNSwxMDUsMTIyLDEwMSwxMTcsMywwLDAsMCwxMDksMTE1LDEwMywxMTcsCi0gICAgNywwLDAsMCwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTIsMCwwLDAsCi0gICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMSwwLDAsCi0gICAgMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMDUsMTIyLDEwMSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMCwwLDAsMCw5NSw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsCi0gICAgMTAxLDM0LDMsMCwwLDExNSw2OCwwLDAsMCwwLDcsMTYsMSwxNiwxLAotICAgIDE2LDEsMTIsMSwxOCwxLDEwLDEsMjcsMSwxOCwxLDE1LDEsMTAsMSwKLSAgICAxNSwxLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsMjAsMSwKLSAgICAxMywxLDUsMiwxOCwxLDE1LDEsMTAsMSwxNSwxLDEyLDEsMywxLAotICAgIDE4LDEsMTMsMSw1LDIsMTgsMSwzLDEsMTUsMSwyMSwzLDExNywzNCwKLSAgICAwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsCi0gICAgNDYsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICAxMDgsMTAxLDExNSwxMTUsOTksMiwwLDAsMCwxLDAsMCwwLDUsMCwwLAotICAgIDAsMTIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTI1LDMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDMsMCwKLSAgICAxMzEsMSwwLDEyNSw0LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwzLDAsMTMxLAotICAgIDEsMCwxMjQsMSwwLDk1LDMsMCwxMjQsMiwwLDExNSwxMDYsMCwxMjEsMjIsCi0gICAgMCwxMTYsNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMSwwLDEyNCwxLDAsCi0gICAgOTUsNSwwLDg3LDExMywxMTgsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDEwMiwKLSAgICAwLDEsMSwxLDEyNCwxLDAsMTA2LDMsMCwxMjQsMSwwLDk1LDUsMCwKLSAgICA4OSwxMTMsMTE4LDAsODgsMTEwLDEyLDAsMTI0LDEsMCwxMDYsMywwLDEyNCwxLAotICAgIDAsOTUsNSwwLDEyNCwzLDAsMTI0LDEsMCw5NSw3LDAsMTI0LDAsMCwKLSAgICAxMDYsOCwwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTcwLDAsMTE2LDksMCwxMjQsCi0gICAgMSwwLDEwNiwzLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEwMywxLDAsMTI0LAotICAgIDEsMCw5NSwxMCwwLDExMCwyNSwwLDEyNCwxLDAsMTA2LDcsMCwxMDYsMTEsCi0gICAgMCwxMDAsMiwwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMjQsMSwwLDk1LDcsCi0gICAgMCwxMjQsMCwwLDEyNCwxLDAsOTUsMTIsMCwxMTYsMTMsMCwxMTYsMTQsMCwKLSAgICAxMjQsNCwwLDEyNCwxLDAsMTA2LDE1LDAsMTMxLDMsMCwxLDEyNCwxLDAsCi0gICAgODMsNDAsMywwLDAsMCwxMTcsODIsMCwwLDAsNzIsMTAxLDEwOCwxMTIsMTAxLAotICAgIDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwzMiw5Nyw5OCwxMDgsMTAxLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwKLSAgICAzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExMSwKLSAgICAxMTQsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMTA4LDExMSw5NywxMDAsMTA1LDExMCwxMDMsNDYsMTA1LDAsMCwKLSAgICAwLDAsMTE3LDEsMCwwLDAsNDYsNDAsMTYsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsOTUsOTUsMTE3LDE3LDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTAwLDk1LDk1LDExNywxOSwwLDAsMCw3OCwKLSAgICAxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDEwLAotICAgIDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywyNSwwLDAsCi0gICAgMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwKLSAgICAxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCwxMDEsCi0gICAgMTIwLDEwMSw5OSwxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwKLSAgICA0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsMTE1LDExMSwKLSAgICAxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDExLDAsMCwwLDk5LDExMSwxMDAsMTAxLDk1LDExMSw5OCwxMDYsMTAxLDk5LAotICAgIDExNiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLAotICAgIDAsMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw4MCwzLAotICAgIDAsMCwxMTUsMzIsMCwwLDAsMCw0LDksMSwxNSwxLDE4LDEsNiwKLSAgICAxLDMsMSwyMiwxLDEzLDEsMjAsMiwxMiwxLDksMSwxNSwxLDI4LAotICAgIDIsMjUsMSw5LDEsMTksMSwxMTcsMjYsMCwwLDAsOTUsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDk1LDEwOCwxMTEsOTcsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDcwLDQwLDksMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMjAsMCwwLDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LAotICAgIDk1LDEwMiwxMTQsMTExLDEwOSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsMTcsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsCi0gICAgMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsCi0gICAgMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LAotICAgIDExNSwyMSwzLDAsMCwxMTUsMTAsMCwwLDAsMTYsMyw2LDIsMTIsOCwKLSAgICAxMiw0Niw2LDEsMTE3LDEzLDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA2Niw5NywxMTUsMTA1LDk5LDExNSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsCi0gICAgMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwKLSAgICAxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLDMsMCwxMDAsCi0gICAgNCwwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwKLSAgICAwLDkwLDUsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw2LDAsCi0gICAgMTAwLDksMCwxMDAsMTAsMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTEsMCwxMDAsCi0gICAgMTIsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwKLSAgICAwLDkwLDksMCwxMDAsMTUsMCw4Myw0MCwxNiwwLDAsMCwxMTcsMTIsMCwKLSAgICAwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxMCwwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsCi0gICAgMCw4Myw0MCwyLDAsMCwwLDExNywxMjEsMCwwLDAsNzksMTEyLDExNiwxMDUsCisgICAgMTE3LDEwOCwxMDEsNDYsNDEsMiwxMTQsMTA2LDAsMCwwLDExNCwxNywxLDAsMCwKKyAgICA0MSwyLDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTIsMSwwLDAsCisgICAgNTMsNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyMyw3MCwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwKKyAgICA5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsCisgICAgMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLAorICAgIDAsODMsNDEsMiwxMjIsNTQsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLAorICAgIDEwMSwzMiw5NywxMTUsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLAorICAgIDAsMCw0MSwyLDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTMsMSwKKyAgICAwLDAsNTksNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLAorICAgIDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsCisgICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsCisgICAgMSwxMjIsNDYsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsCisgICAgMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAorICAgIDQ2LDQxLDIsMTE0LDEwNiwwLDAsMCw5MCwxNywxMDUsMTE1LDk1LDEwMiwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwyLDExNCwyNDUsMCwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsMjE5LDAsMCwwLDY1LDUsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsNCwxMjIsMjUsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsNDEsMTUsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwKKyAgICAwLDAsMTE0LDU5LDAsMCwwLDExNCwxNCwxLDAsMCwxMTQsMjA1LDAsMCwKKyAgICAwLDExNCw3LDEsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTEsMSwwLDAsCisgICAgMTE0LDAsMSwwLDAsMTE0LDMsMSwwLDAsMTE0LDE2NCwwLDAsMCwxMTQsCisgICAgMTIsMSwwLDAsMTE0LDEzLDEsMCwwLDExNCwyMTksMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDE1LDEsMCwwLDEzLDUsMCwwLDExNSwyOCwwLDAsMCwKKyAgICAxMiw3LDYsMiwxOCw1LDMsMSwyMSw2LDMsMSwxOCw0LDE4LDksCisgICAgMTgsNSwzLDEsMjEsNSwzLDEsMjEsNSwzLDEsMTE0LDE1LDEsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwKKyAgICAwLDAsNjQsMCwwLDAsMTE1LDEyMSwwLDAsMCwxMDEsMCwwLDkwLDEsCisgICAgMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLAorICAgIDkwLDQsMCwxMDAsMywwLDkwLDUsMCwxMDAsNCwwLDkwLDYsMCwxMDEsCisgICAgNywwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwKKyAgICAwLDEwMSw3LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDAsMTMxLDEsMCwKKyAgICA5MCw5LDAsMTAxLDcsMCwxMDAsOSwwLDEwMCw5LDAsMTAwLDEwLDAsMTAwLAorICAgIDExLDAsMTMyLDIsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDcsMCwxMDAsOSwKKyAgICAwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwxLDAsMTMxLDEsMCw5MCwxMSwwLAorICAgIDEwMCw5LDAsODMsNDEsMTQsMjE4LDIxLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLAorICAgIDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDEyMiw2Miw3NywKKyAgICAxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLAorICAgIDEwMiwxMTEsMTE0LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTAxLDk5LDEwOCwKKyAgICA5NywxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDg3LDEwNSwxMTAsMTAwLAorICAgIDExMSwxMTksMTE1LDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNDYsMTIyLDU5LDgzLAorICAgIDExMSwxMDIsMTE2LDExOSw5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsCisgICAgMTIxLDExNiwxMDQsMTExLDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LAorICAgIDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwKKyAgICAxMjMsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDEyNSwxMjIsNjUsODMsMTExLDEwMiwxMTYsCisgICAgMTE5LDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwKKyAgICAxMTEsMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsCisgICAgMTA1LDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LAorICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDkyLDY4LDEwMSw5OCwxMTcsMTAzLDcwLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw2NywwLDAsMCwxMjEsMjMsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTE2LDAsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsCisgICAgMzcsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDYyLDAsMSwxLDEsMTE2LAorICAgIDAsMCwxMDYsMSwwLDExNiwwLDAsMTA2LDQsMCwxMjQsMSwwLDEzMSwyLAorICAgIDAsODMsODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsNSwKKyAgICAyMTgsNyw5NSwxMTksMTA1LDExMCwxMTQsMTAxLDEwMyw5MCw3LDc5LDExMiwxMDEsMTEwLDc1LAorICAgIDEwMSwxMjEsOTAsMTcsNzIsNzUsNjksODksOTUsNjcsODUsODIsODIsNjksNzgsODQsCisgICAgOTUsODUsODMsNjksODIsMTE0LDQwLDAsMCwwLDkwLDE4LDcyLDc1LDY5LDg5LAorICAgIDk1LDc2LDc5LDY3LDY1LDc2LDk1LDc3LDY1LDY3LDcyLDczLDc4LDY5LDQxLDIsCisgICAgMTE0LDI0NSwwLDAsMCwyMTgsMywxMDcsMTAxLDEyMSwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTQsOTUsMTExLDExMiwxMDEsMTEwLAorICAgIDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsODQsNSwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMCwyLDMsMSwyMywxLDEzLDEsMTIyLDM2LDg3LDEwNSwxMTAsMTAwLAorICAgIDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE2LDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxNDIsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAorICAgIDExNCwyMSwwLDEyNCwwLDAsMTA2LDEsMCwxMjUsMiwwLDExMCw5LDAsMTI0LAorICAgIDAsMCwxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMDYsMywwLDEwMCwxLAorICAgIDAsMTI0LDEsMCwxMDAsMiwwLDExNiw0LDAsMTA2LDUsMCwxMDAsMCwwLAorICAgIDEwMCwzLDAsMTMzLDIsMCwyNSwxMzEsMCwyLDEyNSwzLDAsMTIxLDQ2LDAsCisgICAgMTI0LDAsMCwxMDYsNiwwLDEyNCwzLDAsMTMxLDEsMCwxNDMsMjUsMCwxMjUsCisgICAgNCwwLDExNiw3LDAsMTA2LDgsMCwxMjQsNCwwLDEwMCw0LDAsMTMxLDIsCisgICAgMCwxMjUsNSwwLDg3LDEwMCwwLDAsODEsODgsODcsMTEwLDIyLDAsNCwxMTYsCisgICAgOSwwLDEwNywxMCwwLDExNCwxMzcsMCwxLDEsMSwxMDAsMCwwLDgzLDg5LAorICAgIDExMCwxLDAsODgsMTI0LDUsMCw4Myw0MSw1LDc4LDExNCwxNTgsMCwwLDAsCisgICAgOTAsMTEsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNCwxMzYsMCwKKyAgICAwLDAsMTE0LDMwLDAsMCwwLDQxLDEwLDIxOCwxMSw2OCw2OSw2Niw4NSw3MSwKKyAgICA5NSw2Niw4NSw3Myw3Niw2OCwyMTgsMTgsODIsNjksNzEsNzMsODMsODQsODIsODksCisgICAgOTUsNzUsNjksODksOTUsNjgsNjksNjYsODUsNzEsMjE4LDEyLDgyLDY5LDcxLDczLAorICAgIDgzLDg0LDgyLDg5LDk1LDc1LDY5LDg5LDExNCw0NywwLDAsMCwxMTQsNywwLAorICAgIDAsMCwyMTgsNywxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE0LDIxLDEsMCwwLAorICAgIDExNCwxOSwxLDAsMCw5MCwxMCw4MSwxMTcsMTAxLDExNCwxMjEsODYsOTcsMTA4LDExNywKKyAgICAxMDEsMTE0LDQwLDAsMCwwLDQxLDYsMTE0LDI0NSwwLDAsMCwxMTQsMTU4LDAsCisgICAgMCwwLDkwLDEyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTUsMTA3LDEwMSwxMjEsCisgICAgMTE0LDIwLDEsMCwwLDkwLDQsMTA0LDEwNywxMDEsMTIxLDIxOCw4LDEwMiwxMDUsMTA4LAorICAgIDEwMSwxMTIsOTcsMTE2LDEwNCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyMTgsMTYsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsCisgICAgMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTEsNSwwLDAsMTE1LDIyLDAsMCwwLDAsCisgICAgMiw5LDEsMTIsMiw5LDEsMTUsMSwyMiwxLDMsMSwxOCwxLDI4LAorICAgIDEsMTMsMSw5LDEsMTIyLDM4LDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwKKyAgICAxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExNSwxMDEsCisgICAgOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDc4LDk5LDQsCisgICAgMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDE0LDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxNTUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxMjUsNCwwLDEyNCw0LDAsMTAwLDAsMCwxMDcsOCwwLAorICAgIDExNCwzMSwwLDEwMCwwLDAsODMsMTIxLDE0LDAsMTE2LDEsMCwxMjQsNCwwLAorICAgIDEzMSwxLDAsMSw4NywxMTAsMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LAorICAgIDY5LDAsMSwxLDEsMTAwLDAsMCw4Myw4OSwxMTAsMSwwLDg4LDEyMCw3OCwKKyAgICAwLDExNiwzLDAsMTMxLDAsMCw2OCw5Myw2NywwLDkyLDIsMCwxMjUsNSwKKyAgICAwLDEyNSw2LDAsMTI0LDQsMCwxMDYsNCwwLDExNiw1LDAsMTI0LDYsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsMTE0LDgwLDAsMTE2LDYsMCwxMjQsMSwwLDEyNCwKKyAgICA1LDAsMTI0LDEsMCwxMjQsNCwwLDEzMSwyLDAsMTAwLDEsMCwxMjQsNCwKKyAgICAwLDEzMSwyLDEsMTI1LDcsMCwxMjQsNywwLDgzLDExMyw4MCwwLDg3LDEwMCwKKyAgICAwLDAsODMsNDEsMiw3OCwxMTQsMjE3LDAsMCwwLDQxLDcsMTE0LDI3LDEsCisgICAgMCwwLDExNCwzOSwwLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDIzNiwwLDAsCisgICAgMCwxMTQsMjI4LDAsMCwwLDExNCwyMjksMCwwLDAsMTE0LDE3MywwLDAsMCwKKyAgICA0MSw4LDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDksMSwwLDAsMTE0LDI2LDEsMCwwLDExNCwxNjksMCwwLDAsCisgICAgMTE0LDEyNywwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMCwxLDAsMCwxMDYsNSwKKyAgICAwLDAsMTE1LDI0LDAsMCwwLDAsMywxNSwxLDEyLDEsNCwxLDMsCisgICAgMSwxNCwxLDEzLDEsOSwxLDIyLDEsMjEsMSwyMSwxLDksMSwxMjIsCisgICAgMzEsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLAorICAgIDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDk5LDMsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDQ1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwKKyAgICAxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsMywwLDEyNCwzLDAsMTAwLAorICAgIDEsMCwxMDcsOSwwLDExNCwzNywwLDEyNCwzLDAsMTA2LDIsMCw4MywxMDAsCisgICAgMSwwLDgzLDEwMCwxLDAsODMsNDEsMiwxMjIsMzQsNzAsMTA1LDExMCwxMDAsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw0Niw3OCw0MSwzLAorICAgIDExNCw3MSwwLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDE2OSwwLDAsMCw0MSwKKyAgICA0LDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsCisgICAgMTE0LDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMTEsMSwwLDAsMTIyLDUsMCwwLDExNSw4LDAsCisgICAgMCwwLDAsMywxOCwxLDEyLDEsNywyLDEyMiwzMyw4NywxMDUsMTEwLDEwMCwKKyAgICAxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDEsMTIsMTE0LAorICAgIDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LAorICAgIDAsMCwwLDExNCwyNCwxLDAsMCwxMTQsMjMsMSwwLDAsMTE0LDIyLDEsCisgICAgMCwwLDExNCw3LDEsMCwwLDExNCwyMSwxLDAsMCwxMTQsMjcsMSwwLAorICAgIDAsMTE0LDEwLDEsMCwwLDExNCwxMSwxLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsCisgICAgMTgsMSwwLDAsNzIsNSwwLDAsMTE1LDIwLDAsMCwwLDEyLDIsNiwKKyAgICAzLDYsMyw2LDIsNiwyLDE4LDcsMTgsMTUsMywxLDIxLDE1LDMsCisgICAgMSwxMTQsMTgsMSwwLDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCw2NCwwLDAsMCwxMTUsNTIsMCwwLDAsCisgICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwKKyAgICAzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LAorICAgIDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDkwLDcsMCwKKyAgICAxMDAsNiwwLDgzLDQxLDcsMjE4LDEzLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2NiwKKyAgICA5NywxMTUsMTA1LDk5LDExNSwxMjIsODMsNjYsOTcsMTE1LDEwMSwzMiw5OSwxMDgsOTcsMTE1LAorICAgIDExNSwzMiwxMTEsMTAyLDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsOTksMTExLDEwMCwxMDEsCisgICAgMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk4LDExMSwxMTYsMTA0LDMyLAorICAgIDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwKKyAgICAxMCwzMiwzMiwzMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLAorICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsNSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA4OCwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLAorICAgIDEzMSwxLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEyNSwyLDAsMTI0LDIsMCwKKyAgICAxMDYsMiwwLDEwMCwyLDAsMTAwLDEsMCwxMzEsMiwwLDEwMCwzLDAsMjUsCisgICAgMTI1LDMsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwKKyAgICA0LDAsMjUsMTI1LDQsMCwxMjQsMywwLDEwMCw1LDAsMTA3LDIsMCwxMTEsCisgICAgODcsMCwxMjQsNCwwLDEwMCw1LDAsMTA3LDMsMCw4Myw0MSw2LDEyMiwxNDEsCisgICAgNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAorICAgIDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLAorICAgIDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LAorICAgIDk3LDEwMywxMDEsMzIsOTgsMTIxLDMyLDk5LDEwNCwxMDEsOTksMTA3LDEwNSwxMTAsMTAzLDMyLAorICAgIDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsCisgICAgMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDEwNCw5NywxMTUsCisgICAgMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMzksCisgICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDExMiwxMjEsMzksNDYsMTE0LDI5LDAsCisgICAgMCwwLDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDExNCwxMTUsMCwwLAorICAgIDAsMTE0LDcyLDAsMCwwLDQxLDQsMTE0LDM4LDAsMCwwLDExNCwyMzQsMCwKKyAgICAwLDAsMTE0LDM0LDAsMCwwLDExNCwzMiwwLDAsMCw0MSw1LDExNCw3MSwKKyAgICAwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwxMzEsMCwwLDAsOTAsMTMsMTAyLAorICAgIDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDk1LDk4LDk3LDExNSwxMDEsOTAsOSwxMTYsOTcsCisgICAgMTA1LDEwOCw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwxMTQsMjE5LDAsMCwwLDEzOCw1LDAsMCwxMTUsCisgICAgOCwwLDAsMCwwLDMsMjUsMSwyMiwxLDE5LDEsMTIyLDI0LDk1LDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSw0NiwxMDUsMTE1LDk1LDExMiwKKyAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMywKKyAgICAwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw4MCwwLDAsMCwKKyAgICAxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsMTI1LAorICAgIDIsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNTcsMCwxMTYsMiwKKyAgICAwLDEwMCwyLDAsMTA2LDMsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLDEsMCwKKyAgICAxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMTYsNCwwLDExNiw1LDAsMTI0LAorICAgIDIsMCwxMjQsMSwwLDEwNiw2LDAsMTMxLDMsMCwxLDEwMCwxLDAsODMsCisgICAgNDEsMywxMjIsMTksNjksMTIwLDEwMSw5OSwxMTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsNTIsOTksOTcsMTEwLDExMCwxMTEsMTE2LAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw0MCwKKyAgICA0MSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsNzgsMTExLDExMCwxMDEsNDEsNywKKyAgICAxMTQsMTIsMSwwLDAsMTE0LDU3LDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LAorICAgIDQ3LDAsMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE3NSwwLDAsMCwxMTQsNjMsCisgICAgMCwwLDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE3OSwwLDAsMCwxMTQsCisgICAgMTk0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwwLDEsMCwwLDE0Niw1LDAsMCwxMTUsMTAsMCwwLAorICAgIDAsMCwyLDE4LDEsMTIsMSwzLDEsMjQsMSwxMjIsMjUsOTUsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwMSwxMjAsMTAxLDk5LDk1LAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQxLDgsMTE0LDU3LDAsMCwwLDExNCw1NiwKKyAgICAwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwyMTksMCwKKyAgICAwLDAsMTE0LDAsMSwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsMywxLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMjgsMSwwLDAsMTMyLDUsMCwwLDExNSw4LAorICAgIDAsMCwwLDEyLDMsNiwzLDEyLDgsMTIsOCwxMTQsMjgsMSwwLDAsCisgICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLAorICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLAorICAgIDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsCisgICAgMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsMTAwLDgsMCwKKyAgICAxMzIsMCwwLDkwLDYsMCwxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsOTAsCisgICAgNywwLDEwMCwxMSwwLDEwMCwxOCwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLAorICAgIDEsOTAsOCwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsOTAsOSwwLAorICAgIDEwMCwxNywwLDgzLDQxLDE5LDIxOCwxMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDEwLDAsMCwwLDExNiwwLAorICAgIDAsMTMwLDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDE3OCw3OSwxMTIsMTE2LDEwNSwKICAgICAxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsMTA0LDk3LDExNiwKICAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCiAgICAgMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LDEwMSwzMiw0MCwKICAgICA5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMTAsCiAgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAogICAgIDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNzgsNDAsMSwwLDAsMCwxMTcsMTksMCwwLDAsCi0gICAgNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTA2LDMsMCwwLDExNSwyLDAsMCwwLDAsNCwKLSAgICAxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDIwLDAsMCwwLDEwNSwxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMDAsMSwwLDU0LDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDExNCwxLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiw5NywzMiwKLSAgICAxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMCwxMDUsOTksMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwKLSAgICA5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODAsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsMTE1LDU4LDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsMTA1LDEwOSwxMDEsMzksMzIsNDAsMTA5LDk3LDExMCwKLSAgICAxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwKLSAgICAzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsMTE2LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTExLDEwMCwxMDEsMzIsMTA5LAotICAgIDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDU5LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDExNSwxMDUsMTIyLDEwMSwzOSwzMiw0MCwxMTEsCi0gICAgMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExNCwxMDEsOTcsMTAwLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDksCi0gICAgMTE2LDEwNSwxMDksMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTIsMywwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICAxMCwxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLAotICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwyLDAsCi0gICAgMTI0LDMsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsMTE3LDIyOCwwLDAsCi0gICAgMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsODIsOTcsMTA1LDExNSwxMDEsMTE1LDMyLDczLDc5LDY5LAorICAgIDExNCwxMTQsMTExLDExNCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk4LDEwMSwzMiwxMDQsOTcsMTEwLAorICAgIDEwMCwxMDgsMTAxLDEwMCw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwKKyAgICAxLDIxOCw3LDczLDc5LDY5LDExNCwxMTQsMTExLDExNCw0MSwyLDExNCw3MSwwLDAsCisgICAgMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDEwLDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKKyAgICAxMDEsMTU5LDUsMCwwLDExNSwyLDAsMCwwLDAsNiwxMjIsMjMsODMsMTExLAorICAgIDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDIwLDAsMCwwLDEwNSwKKyAgICAxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMSwKKyAgICAwLDU0LDgzLDQxLDIsOTcsMTcwLDEsMCwwLDc5LDExMiwxMTYsMTA1LDExMSwxMTAsCisgICAgOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDEwNSwxMTAsMTAzLDMyLDk3LDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAwLAorICAgIDEwNSw5OSwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksCisgICAgMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMTYsMTExLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiw0MCwxMTUsMTE2LDExNCw0MSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw4MCwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMDcsMTAxLDEyMSwxMTUsNTgsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTA5LDExNiwxMDUsMTA5LDEwMSwKKyAgICAzOSwzMiw0MCwxMDksOTcsMTEwLDEwMCw5NywxMTYsMTExLDExNCwxMjEsNDEsMzIsMTA1LDExNSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTE3LDEwOSwxMDEsMTE0LDEwNSw5OSwzMiwxMTYsMTA1LDEwOSwKKyAgICAxMDEsMTE1LDExNiw5NywxMDksMTEyLDMyLDExMSwxMDIsMzIsMTA4LDk3LDExNSwxMTYsMzIsMTE1LAorICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsNTksMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDUsMzIsMzksMTE1LDEwNSwKKyAgICAxMjIsMTAxLDM5LDMyLDQwLDExMSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw0MSwzMiwxMDUsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiwxMDUsMTEwLDMyLDk4LDEyMSwKKyAgICAxMTYsMTAxLDExNSwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LAorICAgIDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMzIsMTE0LAorICAgIDEwMSw5NywxMDAsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDExNSw0NiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4Miw5NywxMDUsMTE1LAorICAgIDEwMSwxMTUsMzIsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDQsMTAxLDExMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsCisgICAgOTgsMTAxLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDExNCwxODMsMCwwLDAsNDEsMSwxMTQsMzEsMSwwLDAsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMTY3LDUsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMTEsMTIyLDIzLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDk5LDQsMCwwLDAsCisgICAgMCwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMiwwLDEyNCwzLAorICAgIDAsMTMxLDIsMCw4Myw0MSwxLDEyMiwyMjgsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywKKyAgICAxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwKKyAgICAxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsCisgICAgMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsCisgICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsCisgICAgMTExLDExOSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LAorICAgIDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsCisgICAgMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsCisgICAgMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExMSwxMTQsMTAwLAorICAgIDEwMSwxMTQsMzIsMTE2LDExMSwzMiw5OSwxMTEsMTE0LDExNCwxMDEsOTksMTE2LDEwOCwxMjEsMzIsCisgICAgMTE2LDExNCw5NywxMTAsMTE1LDEwMiwxMDEsMTE0LDMyLDExMiwxMDEsMTE0LDEwOSwxMDUsMTE1LDExNSwKKyAgICAxMDUsMTExLDExMCwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNDEsMSwyMTgsCisgICAgOCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDQxLDQsMTE0LDcxLDAsMCwwLAorICAgIDExNCwxNDEsMCwwLDAsOTAsMTAsOTksOTcsOTksMTA0LDEwMSw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCwxMTQsNTMsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDE1LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLAorICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTgwLDUsMCwwLDExNSwyLDAsMCwwLDAsCisgICAgOCwxMjIsMjgsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKKyAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk5LAorICAgIDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDEyMiwKKyAgICAxNTAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsCiAgICAgMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LDExNiwxMDEsMTE1LDMyLDEwMCw5NywKICAgICAxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDMyLDExNiwxMTEsMzIsOTcsMzIsCiAgICAgMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDQwLDk3LDMyLDExNSwxMTYsMTE0LApAQCAtMjA3NCwyMzU3ICsyNTQ5LDE3MTMgQEAKICAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLAogICAgIDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LDExMSwxMTksMTE1LDMyLDEwMiwxMTEsMTE0LDMyLAogICAgIDExNiwxMDQsMTAxLDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LAotICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwKLSAgICAxMDAsMzIsMTA1LDExMCwzMiwxMTEsMTE0LDEwMCwxMDEsMTE0LDMyLDExNiwxMTEsMzIsOTksMTExLAotICAgIDExNCwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDExNiwxMTQsOTcsMTEwLDExNSwxMDIsMTAxLDExNCwKLSAgICAzMiwxMTIsMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsMTE1LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDQwLDEsMCwwLDAsMTE3LDgsMCwwLDAsMTE1LAotICAgIDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw0LDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTAsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE1LDAsMCwwLDk1LDk5LAotICAgIDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTI0LDMsMCwKLSAgICAwLDExNSwyLDAsMCwwLDAsOCwxMTcsMjgsMCwwLDAsODMsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk5LDMsMCwwLDAsMCwwLAotICAgIDAsMCwzLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwwLDgzLDQwLDIsMCwKLSAgICAwLDAsMTE3LDE1MSwwLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwKLSAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsCi0gICAgMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsCi0gICAgMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsCi0gICAgNDAsOTcsMzIsMTE1LDExNiwxMTQsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsCi0gICAgMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LAotICAgIDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwKLSAgICAxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LAotICAgIDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQwLAotICAgIDEsMCwwLDAsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCw0MCwzLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsMTE2LDk3LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTAwLDk3LDExNiw5NywxMzQsMywwLDAsMTE1LDIsMCwwLDAsMCw2LAotICAgIDExNywyMSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsOTksMiwwLDAsMCwwLAotICAgIDAsMCwwLDksMCwwLDAsNDQsMCwwLDAsNjcsMCwwLDAsMTE1LAotICAgIDYyLDEsMCwwLDEwMCwxLDAsMTAwLDIsMCwxMDgsMCwwLDEyNSwyLDAsCi0gICAgMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMywwLDEyMSwKLSAgICAxOSwwLDEyNCwwLDAsMTA2LDIsMCwxMjQsMywwLDEzMSwxLDAsMTI1LDQsCi0gICAgMCw4NywxMTAsNTgsMCw0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDEwNiwwLDEsCi0gICAgMTI1LDUsMCwxLDEyMiwyNiwwLDExNiw0LDAsMTAwLDMsMCwxMDAsNCwwLAotICAgIDEyNCwxLDAsMTMxLDEsMSwxMjQsNSwwLDEzMCwyLDAsODcsODksMTAwLDIsCi0gICAgMCwxMDAsMiwwLDEyNSw1LDAsMTI2LDUsMCw4OCwxMTAsMSwwLDg4LDExNiwKLSAgICA1LDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwxLDAsMTA2LDcsMCwxMjUsNiwKLSAgICAwLDEyMSwxOSwwLDEyNCwyLDAsMTA2LDgsMCwxMjQsNiwwLDEzMSwxLDAsCi0gICAgMTI1LDcsMCw4NywxMTAsNTgsMCw0LDExNiw5LDAsMTA3LDEwLDAsMTE0LDIwNCwKLSAgICAwLDEsMTI1LDUsMCwxLDEyMiwyNiwwLDExNiw0LDAsMTAwLDUsMCwxMDAsCi0gICAgNCwwLDEyNCwxLDAsMTMxLDEsMSwxMjQsNSwwLDEzMCwyLDAsODcsODksCi0gICAgMTAwLDIsMCwxMDAsMiwwLDEyNSw1LDAsMTI2LDUsMCw4OCwxMTAsMSwwLAotICAgIDg4LDExNiw1LDAsMTA2LDEwLDAsMTAwLDIsMCwxMDAsNywwLDEzMSwyLDAsCi0gICAgMTI1LDgsMCwxMjEsMzAsMCwxMjQsOCwwLDEwNiwxMywwLDEyNCw0LDAsMTA2LAotICAgIDEzLDAsMTI0LDcsMCwxMDAsMSwwLDI1LDEzMSwxLDAsMTMxLDEsMCw4MywKLSAgICA4NywxMTAsNTgsMCw0LDExNiwxNCwwLDEwNywxMCwwLDExNCw1NywxLDEsMTI1LAotICAgIDUsMCwxLDEyMiwyNiwwLDExNiw0LDAsMTAwLDYsMCwxMDAsNCwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMSwxMjQsNSwwLDEzMCwyLDAsODcsODksMTAwLDIsMCwKLSAgICAxMDAsMiwwLDEyNSw1LDAsMTI2LDUsMCw4OCwxMTAsMSwwLDg4LDEwMCwyLAotICAgIDAsODMsNDAsOCwwLDAsMCwxMTcsNTIsMCwwLDAsNjcsMTExLDExMCw5OSwKLSAgICAxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAotICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NiwKLSAgICAxMDUsMCwwLDAsMCw3OCwxMTcsMzksMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiwxMTAsMTExLDExNiwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLAotICAgIDExNiwxMDQsMTE0LDExMSwxMTcsMTAzLDEwNCwzMiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDQwLDQxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyNSwwLDAsMCwKLSAgICA3MCw5NywxMDUsMTA4LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LAotICAgIDMyLDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMywxMTcsMjgsMCwwLDAsNzAsOTcsCi0gICAgMTA1LDEwOCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw4NCw0MCwxNSwwLDAsMCwKLSAgICAxMTcsOCwwLDAsMCwxMTYsMTExLDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNywxMiwwLAotICAgIDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsCi0gICAgMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsNywwLDAsMCwKLSAgICA3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDk1LDEwNSwxMTEsMTE3LAotICAgIDcsMCwwLDAsNjYsMTIxLDExNiwxMDEsMTE1LDczLDc5LDExNyw4LDAsMCwwLAotICAgIDExNCwxMDEsOTcsMTAwLDEwOCwxMDUsMTEwLDEwMSwxMTcsMTUsMCwwLDAsMTAwLDEwMSwxMTYsCi0gICAgMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsMTE3LDExLDAsMCwKLSAgICAwLDgzLDEyMSwxMTAsMTE2LDk3LDEyMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDI1LDAsMCwKLSAgICAwLDczLDExMCw5OSwxMTQsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMDgsNzgsMTAxLDExOSwxMDgsCi0gICAgMTA1LDExMCwxMDEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwKLSAgICAxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNywxOCwwLDAsMCw4NSwxMTAsMTA1LDk5LAotICAgIDExMSwxMDAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsNDAsOSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLAotICAgIDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDExNiwxMTEsCi0gICAgMTA3LDEwMSwxMTAsMTA1LDEyMiwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDEyLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LAotICAgIDExNywzLDAsMCwwLDEwMSwxMjAsOTksMTE3LDEwLDAsMCwwLDExNCwxMDEsOTcsCi0gICAgMTAwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDgsMCwwLDAsMTAxLDExMCw5OSwxMTEsCi0gICAgMTAwLDEwNSwxMTAsMTAzLDExNywxNSwwLDAsMCwxMTAsMTAxLDExOSwxMDgsMTA1LDExMCwxMDEsCi0gICAgOTUsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwxNDMsMywwLDAsMTE1LDM4LDAsMCwwLDAsMiwxMiwxLAotICAgIDE1LDEsMywxLDE5LDEsMTgsMSw5LDEsMzEsMSwxOCwxLDMsMSwKLSAgICAxOSwxLDE4LDEsOSwxLDMxLDEsMTgsMSwzLDEsMzAsMSwxOCwxLAotICAgIDksMSwxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCw0NSwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNTIsMiwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLAotICAgIDAsMTMxLDEsMCwxMjUsMiwwLDEwMCwxMCwwLDEyNSwzLDAsMTIxLDE2LDAsCi0gICAgMTE2LDIsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDQsMCw4NywxMTAsMjQsMCwKLSAgICA0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDYzLDAsMSwxLDEsMTAwLDEwLDAsCi0gICAgMTI1LDQsMCw4OSwxMTAsMTQsMSw4OCwxMjEsMTksMCwxMjQsMCwwLDEwNiw0LAotICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw1LDAsODcsMTEwLDE4LDAsNCwxMTYsCi0gICAgMywwLDEwNywxMCwwLDExNCwxMDMsMCwxLDEsMSw4OSwxMTAsMjMwLDAsODgsCi0gICAgMTE2LDUsMCwxMjQsNSwwLDEwMCwxLDAsMjUsMTMxLDEsMCwxMjUsMywwLAotICAgIDEyMSwxOSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwxLDAsMTI1LAotICAgIDYsMCw4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDE1OSwwLAotICAgIDEsMSwxLDg5LDExMCwxNzQsMCw4OCwxMjEsMjgsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTI0LDEsMCwxMjQsNiwwLDEyNCw0LDAsMTI0LDUsMCwxMzEsNCwwLAotICAgIDEyNSw3LDAsODcsMTEwLDI0LDAsNCwxMTYsOSwwLDExNiwxMCwwLDEwMiwyLAotICAgIDAsMTA3LDEwLDAsMTE0LDIxNCwwLDEsMSwxLDg5LDExMCwxMTksMCw4OCwxMTYsCi0gICAgMTEsMCwxMDAsMiwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMywwLDEsMTE2LAotICAgIDEyLDAsMTA2LDEzLDAsMTI0LDcsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDE0LAotICAgIDAsMTI0LDgsMCwxMTYsMTUsMCwxMzEsMiwwLDExNCwzOCwxLDExNiwxNiwwLAotICAgIDEwNiwxNywwLDEyNCw4LDAsMTI0LDIsMCwxMzEsMiwwLDEsMTE2LDExLDAsCi0gICAgMTAwLDMsMCwxMjQsNCwwLDEzMSwyLDAsMSwxMjQsOCwwLDgzLDEwMCw0LAotICAgIDAsMTI1LDksMCwxMTYsOSwwLDEyNCw5LDAsMTA2LDE4LDAsMTI0LDQsMCwKLSAgICAxMzEsMSwwLDEwMCw1LDAsMTI0LDEsMCwxMDAsNiwwLDEyNCw0LDAsMTMxLAotICAgIDEsMiwxMzAsMSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMiwwLDEzMSwxLAotICAgIDAsMTI1LDEwLDAsMTE2LDE5LDAsMTE2LDIwLDAsMTI0LDEwLDAsMTI0LDIsMCwKLSAgICAxMDAsNywwLDEwMCw4LDAsMTAwLDExLDAsMTMxLDQsMSwxMjUsMTEsMCwxMTYsCi0gICAgMTEsMCwxMDAsMywwLDEyNCwyLDAsMTMxLDIsMCwxLDExNiwyMiwwLDEwNiwKLSAgICAyMywwLDEyLDExNCw0OCwyLDEyNCw0LDAsMTAwLDEwLDAsMTA3LDksMCwxMTQsCi0gICAgNDgsMiwxMjQsMywwLDEwMCwxMCwwLDEwNyw5LDAsMTE0LDQ4LDIsMTE2LDI0LAotICAgIDAsMTE2LDI1LDAsMTMxLDEsMCwxMjUsNiwwLDEyNCw2LDAsMTA2LDI2LDAsCi0gICAgMTE2LDI3LDAsMTI0LDMsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjQsNiwwLAotICAgIDEwNiwyNiwwLDExNiwyNywwLDExNiwyOCwwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDEsMTI0LDYsMCwxMDYsMjYsMCwxMTYsMTIsMCwxMDYsCi0gICAgMjksMCwxMjQsMTEsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjEsMzYsMCwxMjQsCi0gICAgMCwwLDEwNiwzMCwwLDEyNCwyLDAsMTI0LDQsMCwxMjQsNiwwLDEzMSwzLAotICAgIDAsMSwxMTYsMTEsMCwxMDAsOSwwLDEyNCw0LDAsMTMxLDIsMCwxLDg3LAotICAgIDExMyw0OCwyLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNDQsMiwxLDEsMSwKLSAgICA4OSwxMTMsNDgsMiw4OCwxMTAsMCwwLDEyNCwxMSwwLDgzLDQwLDEyLDAsMCwKLSAgICAwLDExNywxOTAsMCwwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsCi0gICAgMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsODIsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMzIsODQsMTExLDMyLAotICAgIDExOSwxMTQsMTA1LDExNiwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTgsMTIxLAotICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDQsMzIsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICAzMiwxMDksMTE3LDExNSwxMTYsMzIsOTcsMTA4LDExNSwxMTEsMzIsOTgsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTMsCi0gICAgMCwwLDAsMTIzLDEyNSwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LDMyLDEyMywxMjUsCi0gICAgMTE3LDE5LDAsMCwwLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwKLSAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDEyNSwxMTcsMjEsMCwwLDAsNzgsMTExLDExMCwKLSAgICA0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwKLSAgICAxMjMsMTI1LDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMSwxMjAsMTAxLDk5LDExNywxMiwwLAotICAgIDAsMCwxMDAsMTExLDExMCwxMTYsOTUsMTA1LDExMCwxMDQsMTAxLDExNCwxMDUsMTE2LDExNywxMCwKLSAgICAwLDAsMCwxMTksMTE0LDExMSwxMTYsMTAxLDMyLDEyMywzMywxMTQsMTI1LDc4LDg0LDQwLAotICAgIDMxLDAsMCwwLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwKLSAgICAxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDE3LAotICAgIDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTAsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNywzLDAsMCwwLAotICAgIDEwNSwxMTAsMTE2LDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMTE3LDcsMCwwLDAsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDExNywyMCwwLDAsCi0gICAgMCw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTcsOCwwLDAsMCw2OSw3OSw3MCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LAotICAgIDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDEwOSw5NywxMTQsMTE1LAotICAgIDEwNCw5NywxMDgsMTE3LDUsMCwwLDAsMTA4LDExMSw5NywxMDAsMTE1LDExNywxMCwwLAotICAgIDAsMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksMTAxLDExNywxMCwwLDAsCi0gICAgMCw5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDQsMCwwLDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTE3LDE2LDAsMCwwLDk1LDEwMiwxMDUsMTIwLDk1LDk5LDExMSwKLSAgICA5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDYsMCwwLDAsMTAyLDExMSwKLSAgICAxMTQsMTA5LDk3LDExNiwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksCi0gICAgMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LAotICAgIDEwMSwxMDAsMTE3LDcsMCwwLDAsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMTE3LDQsCi0gICAgMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDE5LDAsMCwwLDEwMCwxMTEsMTEwLDExNiw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LDk4LAotICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNyw5LDAsMCwwLDk4LDEyMSwxMTYsMTAxLAotICAgIDk3LDExNCwxMTQsOTcsMTIxLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSw3Myw2NywKLSAgICA5NSw2Niw4OSw4NCw2OSw4MywxMTcsNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLAotICAgIDEwMCwxMTcsNywwLDAsMCw5NSwxMTksOTUsMTA4LDExMSwxMTAsMTAzLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDExNyw1LDAsMCwwLDEwMCwxMTcsMTA5LDExMiwxMTUsMTE3LAotICAgIDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsNDAsMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsCi0gICAgMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywKLSAgICAxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMiwwLDAsMCwxMTUsMTE2LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsCi0gICAgOTcsMTE3LDEwLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDExNyw1LDAsMCwwLDEwMiwxMTEsMTE3LDExMCwxMDAsMTE3LDMsMCwwLDAsMTA5LAotICAgIDExNSwxMDMsMTE3LDEyLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsOTgsMTIxLAotICAgIDExNiwxMDEsMTE1LDExNywxMSwwLDAsMCw5OSwxMTEsMTAwLDEwMSw5NSwxMTEsOTgsMTA2LAotICAgIDEwMSw5OSwxMTYsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxNjUsMywwLDAsCi0gICAgMTE1LDk4LDAsMCwwLDAsNywxNSwxLDYsMSwzLDEsMTYsMSwxMywKLSAgICAxLDExLDIsMywxLDE5LDEsMTMsMSw1LDIsMTYsMSwzLDEsMTksCi0gICAgMSwxMywxLDUsMiwzLDEsMTIsMSwzLDEsMTMsMSwxOSwxLDUsCi0gICAgMiw5LDEsNywxLDE1LDEsMTUsMSwxNiwxLDYsMSw3LDEsNCwKLSAgICAyLDYsMSwxOCwxLDE1LDEsMTUsMSw2LDEsMTIsMSw5LDEsMTMsCi0gICAgMSwyMiwxLDEyLDEsMTIsMSwxOSwxLDI1LDEsMjIsMSwzLDEsMTksCi0gICAgMSwxNywxLDEzLDEsOCwxLDExNywyMSwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCi0gICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsMTA2LDAsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCwxMTcsMCwxLAotICAgIDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsCi0gICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsMTAxLDExMywxMTcsMTA1LDExNCwKLSAgICAxMDEsMTE1LDMyLDY5LDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLAotICAgIDk3LDExMCwxMDAsMzIsODIsMTAxLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5OCwKLSAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwOCwxMTEsOTcsMTAwLDMyLDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsMzIsODUsMTE1LDEwMSwzMiwxMTEsCi0gICAgMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsMzIsMTAwLDEwNSwKLSAgICA5OSwxMTYsOTcsMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExOSwxMDQsMTAxLDExNiwxMDQsMTAxLAotICAgIDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCi0gICAgMTAwLDEwMSwzMiwxMTcsMTE1LDEwMSwxMTUsNDcsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsNDAsMSwwLDAsMCwxMTcsMTIsMCwwLDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDIyNywKLSAgICAzLDAsMCwxMTUsMiwwLDAsMCwwLDgsMTE3LDI0LDAsMCwwLDgzLAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDAsMTAsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTAsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNywxNSwwLDAsMCw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNyw4LDAsMCwKLSAgICAwLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LDEwLDAsMCwwLDEwMywxMDEsCi0gICAgMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsCi0gICAgOTUsOTksMTExLDEwMCwxMDEsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEwNCwzLDAsMCwxMTUsMTQsMCwwLDAsMTYsCi0gICAgMiwxMiw2LDEyLDEyLDEyLDEwLDEyLDksMTIsMjIsMTIsNjIsMTE3LDEyLDAsCi0gICAgMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsMCwyLAotICAgIDAsMCwwLDExNSw5MiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsCisgICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDExNSw0NiwxMCwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwxMTQsNCwwLDAsMCw0MSwzLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzMywxLAorICAgIDAsMCwxOTAsNSwwLDAsMTE1LDAsMCwwLDAsMTIyLDIxLDgzLDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LAorICAgIDExNiw5Nyw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwxNiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTA1LDAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjEsMTksMCwxMjQsMCwKKyAgICAwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsODcsMTEwLDU4LAorICAgIDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw5NCwwLDEsMTI1LDQsMCwxLAorICAgIDEyMiwyNiwwLDExNiwzLDAsMTAwLDEsMCwxMDAsMiwwLDEyNCwxLDAsMTMxLAorICAgIDEsMSwxMjQsNCwwLDEzMCwyLDAsODcsODksMTAwLDMsMCwxMDAsMywwLAorICAgIDEyNSw0LDAsMTI2LDQsMCw4OCwxMTAsMSwwLDg4LDExNiw0LDAsMTI0LDMsCisgICAgMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDUyLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsCisgICAgMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwKKyAgICAzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNDYsMTIyLDM5LDExNSwKKyAgICAxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsCisgICAgOTgsMTA4LDEwMSwzMiwxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLDEwMSwxMTYsOTUsCisgICAgMTAwLDk3LDExNiw5Nyw0MCw0MSwxMTQsNjcsMCwwLDAsNzgsNDEsNSwxMTQsMjM0LAorICAgIDAsMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE0LDQwLDAsCisgICAgMCwwLDExNCwxNTMsMCwwLDAsMTE0LDIwMywwLDAsMCw0MSw1LDExNCw3MSwKKyAgICAwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjAxLDAsCisgICAgMCwwLDIxOCwzLDEwMSwxMjAsOTksMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDEzLDEsMCwwLDE5Nyw1LDAsMCwxMTUsCisgICAgMTQsMCwwLDAsMCwyLDE1LDEsMywxLDE5LDEsMTgsMSw5LDEsCisgICAgMzEsMSwxMjIsMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDIxOCw5LDk1LDExMSwxMTIsCisgICAgMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMTE0LDI5LDAsMCwwLDk5LDMsMCwwLDAsCisgICAgMSwwLDAsMCw0LDAsMCwwLDksMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDMxLDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMSwwLDEyNCwyLAorICAgIDAsMTAwLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwxMjQsMywwLAorICAgIDEzMSw0LDIsODMsNDEsNSwxMjIsMTMwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDk5LAorICAgIDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsCisgICAgMTAxLDMyLDM5LDEwMCw5NywxMTYsOTcsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsCisgICAgMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTcsMTEwLDEyMSwzMiwxMTEsOTgsMTA2LAorICAgIDEwMSw5OSwxMTYsMzIsMTE2LDEyMSwxMTIsMTAxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDk5LDExMSwKKyAgICAxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMTUsCisgICAgNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE3NSwwLDAsMCwyMTgsCisgICAgMTIsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiw4NCwxMTQsMTE4LAorICAgIDAsMCwwLDQxLDIsMTE0LDExNCwwLDAsMCwyMTgsNyw5OSwxMTEsMTA5LDExMiwKKyAgICAxMDUsMTA4LDEwMSw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNTMsMCwwLDAsMTE0LAorICAgIDM1LDAsMCwwLDExNCwzNywxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTQsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKKyAgICA5NSwxMTYsMTExLDk1LDk5LDExMSwxMDAsMTAxLDIwNyw1LDAsMCwxMTUsNCwwLDAsCisgICAgMCwwLDUsMTgsMSwxMjIsMjcsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw0NiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsOTUsOTksMTExLAorICAgIDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDEwLDAsMCwwLDQ1LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNzcsMSwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwMCwxLDAsMTI1LDMsCisgICAgMCwxMjEsMTYsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsNCwwLAorICAgIDg3LDExMCwyNCwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNjMsMCwxLDEsCisgICAgMSwxMDAsMSwwLDEyNSw0LDAsODksMTEwLDIwMiwwLDg4LDEyMSwxOSwwLDEyNCwKKyAgICAwLDAsMTA2LDMsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDUsMCw4NywxMTAsCisgICAgMTgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDEwMywwLDEsMSwxLDg5LAorICAgIDExMCwxNjIsMCw4OCwxMTYsNSwwLDEyNCw1LDAsMTAwLDIsMCwyNSwxMzEsMSwKKyAgICAwLDEyNSwzLDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCw0LDAsCisgICAgMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsMTAsCisgICAgMCwxMTQsMTU5LDAsMSwxLDEsODksMTEwLDEwNiwwLDg4LDEyMSwzNCwwLDExNiwKKyAgICA4LDAsMTI0LDYsMCwxMDAsMywwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMSwKKyAgICAwLDEwMCw1LDAsMTI0LDQsMCwxMzEsMSwzLDEyNSw3LDAsODcsMTEwLDI0LAorICAgIDAsNCwxMTYsOSwwLDExNiwxMCwwLDEwMiwyLDAsMTA3LDEwLDAsMTE0LDIyMCwKKyAgICAwLDEsMSwxLDg5LDExMCw0NSwwLDg4LDExNiwxMSwwLDEwMCw2LDAsMTI0LAorICAgIDQsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMTYsMTIsMCwxMjQsNywwLDEwMCwKKyAgICA0LDAsMTI0LDEsMCwxMDAsNywwLDEyNCw0LDAsMTAwLDgsMCwxMjQsMiwKKyAgICAwLDEzMSwxLDMsODMsMTI0LDAsMCwxMDYsNiwwLDEyNCwyLDAsMTMxLDEsCisgICAgMCwxMjUsOCwwLDEyNCwwLDAsMTA2LDEzLDAsMTI0LDgsMCwxMjQsMiwwLAorICAgIDEzMSwyLDAsMTI1LDksMCwxMTYsMTEsMCwxMDAsOSwwLDEyNCwyLDAsMTMxLAorICAgIDIsMCwxLDExNiwxNCwwLDEwNiwxNSwwLDEyLDExNCwxNzMsMSwxMjQsNCwwLAorICAgIDEwMCwxLDAsMTA3LDksMCwxMTQsMTczLDEsMTI0LDMsMCwxMDAsMSwwLDEwNywKKyAgICA5LDAsMTE0LDE3MywxLDExNiwxNiwwLDEyNCw5LDAsMTI0LDMsMCwxMTYsMTcsCisgICAgMCwxMjQsOCwwLDEzMSwxLDAsMTMxLDMsMCwxMjUsNiwwLDEyMSwzNiwwLAorICAgIDEyNCwwLDAsMTA2LDE4LDAsMTI0LDIsMCwxMjQsNCwwLDEyNCw2LDAsMTMxLAorICAgIDMsMCwxLDExNiwxMSwwLDEwMCwxMCwwLDEyNCw0LDAsMTMxLDIsMCwxLAorICAgIDg3LDExMywxNzMsMSw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDE2OSwxLDEsMSwKKyAgICAxLDg5LDExMywxNzMsMSw4OCwxMTAsMCwwLDEyNCw5LDAsODMsNDEsMTEsMTIyLAorICAgIDE5MCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKKyAgICAxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsMTE1LDExMiwKKyAgICAxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCisgICAgMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4MiwxMDEsOTcsCisgICAgMTAwLDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsCisgICAgMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsCisgICAgMTE2LDk3LDExNiwxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwKKyAgICAxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLAorICAgIDEwMSw0NCwzMiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDEwOSwxMTcsMTE1LDExNiwKKyAgICAzMiw5NywxMDgsMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLAorICAgIDExMCwxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCwKKyAgICAxMTQsMTgzLDAsMCwwLDExNCwxODcsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCwxMjIsMTMsMTIzLDEyNSwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LAorICAgIDMyLDEyMywxMjUsMTE0LDE0MCwwLDAsMCwxMTQsMTQxLDAsMCwwLDEyMiwxOSw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAorICAgIDEyMywxMjUsMTIyLDEwLDExOSwxMTQsMTExLDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNDEsMTksCisgICAgMTE0LDIzNCwwLDAsMCwxMTQsMTMyLDAsMCwwLDExNCwxMjQsMCwwLDAsMTE0LAorICAgIDMyLDEsMCwwLDExNCwzMCwxLDAsMCwxMTQsMTQsMCwwLDAsMTE0LDM1LAorICAgIDEsMCwwLDExNCw0MCwwLDAsMCwxMTQsMTkwLDAsMCwwLDExNCwxNTMsMCwKKyAgICAwLDAsMTE0LDE4NiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCwxOTUsMCwwLAorICAgIDAsMTE0LDQwLDEsMCwwLDExNCw3LDAsMCwwLDIxOCwxOSwxMDAsMTExLDExMCwKKyAgICAxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKKyAgICAxMTQsMTk4LDAsMCwwLDExNCwzMSwwLDAsMCwxMTQsMzQsMSwwLDAsNDEsCisgICAgMTAsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDE0MSwwLDAsMCwKKyAgICAxMTQsMTg4LDAsMCwwLDExNCwxNDAsMCwwLDAsMjE4LDIsMTE1LDExNiwxMTQsNTMsCisgICAgMCwwLDAsMjE4LDEwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LDk3LDExNCwKKyAgICAyMDEsMCwwLDAsOTAsMTEsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwxMDEsOTksCisgICAgMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwxMiwxLDAsMCwyMTUsNSwwLDAsMTE1LDc4LDAsMCwwLDAsNywKKyAgICAxNSwxLDYsMSwzLDEsMTYsMSwxMywxLDExLDIsMywxLDE5LDEsCisgICAgMTMsMSw1LDIsMTYsMSwzLDEsMTksMSwxMywxLDUsMiwzLDEsCisgICAgOSwxLDEyLDEsMTMsMSwxOSwxLDUsMiw5LDEsNywxLDE1LDEsCisgICAgNiwxLDcsMSwxNSwxLDE4LDEsMTMsMSwyMiwxLDEyLDEsOSwxLAorICAgIDE1LDEsMywxLDE5LDEsMTcsMSwxMywxLDgsMSwxMjIsMjEsODMsMTExLAorICAgIDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwKKyAgICAxMTEsMTAwLDEwMSw3OCwxMTQsMTM4LDAsMCwwLDQxLDEwLDExNCw1NywwLDAsMCwKKyAgICAxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwzMSwxLDAsMCwxMTQsCisgICAgMzIsMSwwLDAsMTE0LDM0LDEsMCwwLDExNCwzMywxLDAsMCwxMTQsMTMsCisgICAgMSwwLDAsMTE0LDQwLDEsMCwwLDExNCwxMiwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsMjksMSwwLDAsMTU3LDUsMCwwLDExNSwxNCwwLDAsMCwxMiwKKyAgICAyLDEyLDgsMTIsMTMsMTIsMTAsMTIsNywxMiwxMCwxOCw4LDExNCwyOSwxLAorICAgIDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0LAorICAgIDAsMCwwLDAsMCwwLDAsMTE1LDg4LDAsMCwwLDEwMSwwLDAsOTAsCiAgICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLAogICAgIDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDEsNSwwLDEzNSwwLDAsCiAgICAgMTAyLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTM0LDAsMCwxMzEsMSwwLDkwLAogICAgIDYsMCwxMDEsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLAogICAgIDAsOTAsNywwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDgsMCwKLSAgICAxMzUsMCwwLDgzLDQwLDEwLDAsMCwwLDExNywxMCwwLDAsMCw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwMywwLDAsMCw2Niw5NywxMTUsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDEwOCwKLSAgICA5NywxMTUsMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwKLSAgICAxMTIsMTE0LDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LAotICAgIDMyLDExNiwxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE3LDExNSwKLSAgICA5NywxMDMsMTAxLDQ2LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwKLSAgICAwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLAotICAgIDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwKLSAgICAxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDc1LDAsMCwwLDY3LDk3LAotICAgIDk5LDEwNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLAotICAgIDk3LDEwOSwxMDEsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKLSAgICAzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLDExNywKLSAgICAxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw3OCw0MCwyLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwyNDMsMywKLSAgICAwLDAsMTE1LDQsMCwwLDAsMCwzLDksMSwxMTcsMTksMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAotICAgIDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsCi0gICAgMTE2LDEsMCwxMjQsMCwwLDEzMSwyLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsODMsNDAsMSwwLDAsMCwxMTcsMjYsMCwwLDAsNzYsMTExLDk3LAotICAgIDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQwLDMsMCwwLDAsMTE3LDUsMCwwLAotICAgIDAsMTE1LDExNywxMTIsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsOSwwLDAsMCw5NSw5NSw5OSwxMDgsOTcsMTE1LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LAotICAgIDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjQ5LDMsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsNSwxMTcsMjIsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAotICAgIDgzLDQwLDEsMCwwLDAsMTE3LDU4LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsCi0gICAgMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDAsNCwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCwzLDExNywyMywwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDgsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwwLDExNiwwLDAsMTA2LAotICAgIDEsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxNDMsMTcsMCwxMjUsMiwKLSAgICAwLDEyNCwyLDAsMTA2LDIsMCwxMzEsMCwwLDgzLDg3LDEwMCwyLDAsODEsCi0gICAgODgsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywzOSwwLDAsMCw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNSwzMiwxMTQsOTcsMTE5LDMyLAotICAgIDk4LDEyMSwxMTYsMTAxLDExNSw0NiwxMTcsMSwwLDAsMCwxMTQsNzgsNDAsMywwLAotICAgIDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDExNyw2LDAsMCwwLDcwLAotICAgIDEwNSwxMDgsMTAxLDczLDc5LDExNyw0LDAsMCwwLDExNCwxMDEsOTcsMTAwLDQwLDMsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNSw0LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDIsMjEsMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsOSwwLDAsCi0gICAgMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LAotICAgIDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLAotICAgIDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiwKLSAgICA5NSwxMDAsOTcsMTE2LDk3LDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDEsCi0gICAgMCwwLDAsMTE3LDksMCwwLDAsOTUsOTUsOTksMTA4LDk3LDExNSwxMTUsOTUsCi0gICAgOTUsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsMjM4LDMsMCwwLDExNSwxMCwwLDAsMCwxNiwzLDYsMiwxMiwKLSAgICA2LDI0LDcsMTgsNSwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDQsMCwwLDAsNjYsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwwLAotICAgIDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsCi0gICAgMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLAotICAgIDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDEsOTAsNiwwLDEwMCwxMCwKLSAgICAwLDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw2MiwwLDAsCi0gICAgMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDM5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDUsMiwwLDEyNCwyLDAsMTA2LDIsCi0gICAgMCwxMDAsMSwwLDU0LDEyNCwyLDAsMTA2LDMsMCwxMDAsMiwwLDU0LDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDMzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMTcsNSwwLDAsMCwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDExNyw0LDAsMCwwLDExNSwxMDUsMTIyLDEwMSw0MCw0LAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsCi0gICAgMTE1LDExNiw5NywxMTYsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTE1LDEwNSwxMjIsMTAxLDQwLDMsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNywyLDAsMCwwLDExNSwxMTYsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDE1LDQsMCwwLDExNSw0LDAsMCwwLDAsCi0gICAgMiwxNSwxLDExNywyNywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsCi0gICAgOTcsMTE2LDExNSw5OSw0LDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICAxMywwLDAsMCw2NywwLDAsMCwxMTUsODEsMCwwLDAsMTIxLDIyLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMDYsMiwwLDEyNSwKLSAgICA0LDAsODcsMTEwLDI0LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCw0OCwwLAotICAgIDEsMSwxLDEwMCwxLDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LAotICAgIDAsMTAwLDIsMCw3OSwxMjUsNCwwLDEyNCwwLDAsMTA2LDQsMCwxMjQsMiwKLSAgICAwLDEyNCwzLDAsMTAwLDMsMCwxMjQsNCwwLDEzMSwyLDEsODMsNDAsNCwKLSAgICAwLDAsMCw3OCwxMDUsMTgyLDEsMCwwLDEwNSwxMjgsMCwwLDAsMTE3LDUsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTAxLDQwLDUsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsOTUsMTExLDExNSwxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwxMTcsNywKLSAgICAwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTEsMTAwLDEwMSwxMTcsNywwLDAsMCw3OSwKLSAgICA4Myw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLAotICAgIDk3LDExNiw5Nyw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsNCwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwyMCw0LDAsMCwxMTUsMTIsMCwwLDAsMCwyLAotICAgIDMsMSwyMiwxLDEzLDEsMTEsMywxMCwxLDExNywzMiwwLDAsMCw4MywKKyAgICAxMzUsMCwwLDgzLDQxLDEwLDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMTIyLDEwMyw2Niw5NywxMTUsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwKKyAgICAzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTIsMTE0LDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsCisgICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLAorICAgIDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwKKyAgICAxMTUsMTE2LDEwMSwxMDksMzIsMTE3LDExNSw5NywxMDMsMTAxLDQ2LDk5LDMsMCwwLDAsCisgICAgMCwwLDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDIyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsCisgICAgMCwxMjQsMCwwLDk1LDEsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDc1LDY3LAorICAgIDk3LDk5LDEwNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTEwLDk3LDEwOSwxMDEsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLAorICAgIDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw3OCw0MSwyLDExNCw2NywwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsNDEsMywxMTQsNzEsMCwwLDAsMTE0LDE1OCwKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDE2LDYsMCwwLAorICAgIDExNSw0LDAsMCwwLDAsMyw5LDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwzLAorICAgIDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTI0LDAsCisgICAgMCwxMzEsMiwwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQxLDEsCisgICAgMTIyLDI2LDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTAyLDExNCwxMTEsMTA5LDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0Niw0MSwzLDIxOCw1LAorICAgIDExNSwxMTcsMTEyLDEwMSwxMTQsMTE0LDQ0LDEsMCwwLDExNCwzLDEsMCwwLDQxLAorICAgIDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsNDEsMSwxMTQsMjI0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzLDEsMCwKKyAgICAwLDIyLDYsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjIsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDgzLDQxLDEsMTIyLDU4LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsMzIsMTAyLAorICAgIDExMSwxMTcsMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLAorICAgIDEwMSwxMTQsNDYsNDEsMSwxMTQsMzUsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMjM0LDAsMCwwLDMxLDYsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMywxMjIsMjMsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5OSwyLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCw4LDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0MSwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsCisgICAgMCwxMDAsMSwwLDEzMSwyLDAsMTQzLDE3LDAsMTI1LDIsMCwxMjQsMiwwLAorICAgIDEwNiwyLDAsMTMxLDAsMCw4Myw4NywxMDAsMiwwLDgxLDg4LDEwMCwyLDAsCisgICAgODMsNDEsMywxMjIsMzksODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywKKyAgICAxMTUsMzIsMTE0LDk3LDExOSwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsNDYsMjE4LDEsMTE0LDc4LAorICAgIDQxLDMsMTE0LDQ5LDAsMCwwLDExNCw1MCwwLDAsMCw5MCw0LDExNCwxMDEsCisgICAgOTcsMTAwLDQxLDMsMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDM1LDEsMCwwLDM2LDYsMCwwLDExNSw0LDAsMCwwLAorICAgIDAsMiwyMSwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MSw5LDExNCw1NywwLDAsMCwKKyAgICAxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsCisgICAgNzIsMCwwLDAsMTE0LDE1NiwwLDAsMCwxMTQsMywxLDAsMCwxMTQsMjM0LAorICAgIDAsMCwwLDExNCwzNSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCw0MSwxLDExNCwyMjQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDQ0LAorICAgIDEsMCwwLDExLDYsMCwwLDExNSwxMCwwLDAsMCwxMiwzLDYsMiwKKyAgICAxMiw2LDI0LDksMTgsNSwxMTQsNDQsMSwwLDAsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw2NCwwLDAsMCwKKyAgICAxMTUsNjQsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsCisgICAgOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDEsOTAsNiwKKyAgICAwLDEwMCwxMCwwLDgzLDQxLDExLDIxOCwxNiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsCisgICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEyMiw2Miw2NywxMTEsMTEwLDk5LDExNCwKKyAgICAxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LAorICAgIDExMSwxMTAsMzIsMTExLDEwMiwzMiw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsCisgICAgMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDM2LAorICAgIDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTA1LAorICAgIDIsMCwxMjQsMiwwLDEwNiwxLDAsMTAwLDEsMCw1NCwxMjQsMiwwLDEwNiwKKyAgICAyLDAsMTAwLDIsMCw1NCw4Myw0MSwzLDEyMiwzMyw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDk3LDEwMCw5NywxMTYsOTcsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTE0LDE4MywwLDAsCisgICAgMCwxMTQsMTg0LDAsMCwwLDQxLDMsMTE0LDM5LDAsMCwwLDIxOCw4LDExNSwKKyAgICAxMTYsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw5MCw3LDExNSwxMTYsOTUsMTE1LDEwNSwxMjIsMTAxLAorICAgIDQxLDMsMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNDIsMSwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDMyLDEsMCwwLDQ2LDYsMCwwLDExNSw0LDAsMCwwLDAsMiwKKyAgICAxMiwxLDEyMiwyNyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSw5OSwKKyAgICA0LDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwzNCwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMjUsNCwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLDEyNCwzLAorICAgIDAsMTAwLDEsMCwxMjQsNCwwLDEzMSwyLDEsODMsNDEsMiw3OCwyMTgsNSwKKyAgICA5NSwxMDksMTExLDEwMCwxMDEsNDEsMiwxMTQsMTQ0LDAsMCwwLDExNCwzMywxLDAsCisgICAgMCw0MSw1LDExNCw3MSwwLDAsMCwxMTQsMTQxLDAsMCwwLDExNCwxNDAsMCwKKyAgICAwLDAsMTE0LDUzLDAsMCwwLDExNCw0MiwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMzQsMSwwLDAsCisgICAgNTEsNiwwLDAsMTE1LDQsMCwwLDAsMCwyLDEyLDEsMTIyLDMyLDgzLAogICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsCi0gICAgNSwwLDAsMCw5NSwxMDksMTExLDEwMCwxMDEsMTA1LDE4MiwxLDAsMCw5OSwzLAotICAgIDAsMCwwLDEsMCwwLDAsOSwwLDAsMCwxOCwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNTMsMSwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLAotICAgIDAsOTIsMiwwLDEyNSw0LDAsMTI1LDUsMCwxMDMsMCwwLDEyNSw2LDAsCi0gICAgMTIwLDU0LDAsMTI0LDQsMCwxMTQsODAsMCwxMTYsMSwwLDEyNCw0LDAsMTMxLAotICAgIDEsMCwxMiwxMTQsODAsMCwxMTYsMCwwLDEyNCw0LDAsMTMxLDEsMCw5MiwKLSAgICAyLDAsMTI1LDQsMCwxMjUsNywwLDEyNCw2LDAsMTA2LDIsMCwxMjQsNywKLSAgICAwLDEzMSwxLDAsMSwxMTMsMjcsMCw4NywxMjAsMTMyLDAsMTE2LDMsMCwxMjQsCi0gICAgNiwwLDEzMSwxLDAsNjgsOTMsMTE4LDAsMTI1LDcsMCwxMTYsNCwwLDEyNCwKLSAgICA0LDAsMTI0LDcsMCwxMzEsMiwwLDEyNSw0LDAsMTIxLDE3LDAsMTE2LDUsCi0gICAgMCwxMDYsNiwwLDEyNCw0LDAsMTMxLDEsMCwxLDg3LDExMyw5NCwwLDQsCi0gICAgMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTU1LDAsMSwxLDEsMTE5LDk0LDAsODksCi0gICAgMTEzLDk0LDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwyMTEsMCwxLDEyNSw4LAotICAgIDAsMSwxMjIsMjUsMCwxMTYsOSwwLDEwMCwxLDAsMTI0LDQsMCwxMjQsOCwKLSAgICAwLDEzMSwzLDAsMSwxMDAsMiwwLDgzLDg3LDg5LDEwMCwyLDAsMTAwLDIsCi0gICAgMCwxMjUsOCwwLDEyNiw4LDAsODgsMTEzLDk0LDAsODgsMTEzLDk0LDAsODcsCi0gICAgMTIxLDMzLDAsMTE2LDEwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLAotICAgIDMsMCwxLDExNiw5LDAsMTAwLDMsMCwxMjQsMSwwLDEzMSwyLDAsMSwKLSAgICA4NywxMTAsNTMsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDQ4LDEsMSwxMjUsCi0gICAgOCwwLDEsMTIyLDIxLDAsMTE2LDksMCwxMDAsMSwwLDEyNCwxLDAsMTI0LAotICAgIDgsMCwxMzEsMywwLDEsODcsODksMTAwLDIsMCwxMDAsMiwwLDEyNSw4LAotICAgIDAsMTI2LDgsMCw4OCwxMTAsMSwwLDg4LDEwMCwyLDAsODMsNDAsNCwwLAotICAgIDAsMCwxMTcsMjcsMCwwLDAsODcsMTE0LDEwNSwxMTYsMTAxLDMyLDk4LDEyMSwxMTYsCi0gICAgMTAxLDExNSwzMiwxMDAsOTcsMTE2LDk3LDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDQ2LDExNywyNywwLDAsMCw5OSwxMTEsMTE3LDEwOCwxMDAsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDMyLDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywKLSAgICAxMTQsMTI1LDc4LDExNywxMiwwLDAsMCw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMTAwLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDQwLDExLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNyw2LDAsMCwwLDk3LDExMiwKLSAgICAxMTIsMTAxLDExMCwxMDAsMTE3LDgsMCwwLDAsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLAotICAgIDEwMCwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLAotICAgIDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDUsMCwwLDAsMTA5LDEwNywxMDAsCi0gICAgMTA1LDExNCwxMTcsMTUsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LAotICAgIDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwKLSAgICAxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTMsMCwwLDAsOTUsMTE5LDExNCwxMDUsCi0gICAgMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksNDAsOSwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsNSwwLDAsMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMDEsMTE3LDYsMCwwLDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExMiw5NywxMTQsMTE2LDExNSwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE0LDExNiwxMTcsMywwLDAsMCwxMDEsMTIwLDk5LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsCi0gICAgMTAwLDk3LDExNiw5NywzMSw0LDAsMCwxMTUsMzgsMCwwLDAsMCwyLDE4LAotICAgIDEsNiwyLDIyLDEsMTgsMSwxNywyLDE5LDEsMTUsMSwzLDEsMTcsCi0gICAgMSwxMywyLDcsMSwxOCwzLDE2LDEsMjcsMSwzLDEsMTYsMSwxNywKLSAgICAxLDE4LDIsMTE3LDI1LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiwKLSAgICA5Nyw3OCw0MCw3LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwKLSAgICAxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNywKLSAgICAxNSwwLDAsMCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LAotICAgIDExMSwxMDAsMTAxLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywKLSAgICAxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTEsNCwwLDAsMTE1LDgsMCwwLDAsMTYsMiwKLSAgICA2LDIsMTIsNSwxMiwxMSwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLAotICAgIDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwwLAotICAgIDExNSw2MiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwKLSAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKLSAgICA5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCwKLSAgICA4LDAsODMsNDAsOSwwLDAsMCwxMTcsMjAsMCwwLDAsODMsMTExLDExNywKLSAgICAxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMTE3LDQ1LDAsMCwwLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTksMTA0LDEwNSwKLSAgICA5OSwxMDQsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwxMTUsMzIsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwxMDgsMTAxLDExNSwxMTUsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDExNSw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSwxOSwwLDAsMCwxMjQsMCwwLAotICAgIDEwNiwwLDAsMTI0LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLDEsMSw4MywKLSAgICA0MCwzLDAsMCwwLDc4LDExNywxMCwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDEwOCwxMDEsMTE1LDExNSw4NCw0MCwyLDAsMCwwLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNjQsNCwwLDAsCi0gICAgMTE1LDIsMCwwLDAsMCwxLDExNywzMiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsNiwwLDAsMCw2LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwxMzgsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLAotICAgIDEsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLAotICAgIDAsMTI1LDMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDEsMCwxMjQsMywwLAotICAgIDEyNCwyLDAsMTAwLDAsMCwxMzEsNCwwLDEyNSw0LDAsMTE2LDQsMCwxMDYsCi0gICAgNSwwLDEyNCw0LDAsMTMxLDEsMCwxMjUsNSwwLDExNiw2LDAsMTI0LDUsCi0gICAgMCwxMTYsNywwLDEzMSwyLDAsMTE0LDEwMSwwLDExNiw4LDAsMTAwLDEsMCwKLSAgICAxMjQsMiwwLDEzMSwyLDAsMSwxMjQsNSwwLDgzLDExNiw5LDAsMTAwLDIsCi0gICAgMCwxMDYsMTAsMCwxMjQsMiwwLDEzMSwxLDAsMTAwLDMsMCwxMjQsMSwwLAotICAgIDEwMCw0LDAsMTI0LDIsMCwxMzEsMSwyLDEzMCwxLDAsMTAwLDAsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNywyMSwwLDAsMCw5OSwxMTEsMTAwLDEwMSwzMiwKLSAgICAxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LAotICAgIDExNywyMSwwLDAsMCw3OCwxMTEsMTEwLDQ1LDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwKLSAgICAxMDYsMTAxLDk5LDExNiwzMiwxMDUsMTEwLDMyLDEyMywxMjUsMTE3LDQsMCwwLDAsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsMTEsMCwwLAotICAgIDAsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDExNywKLSAgICAyMCwwLDAsMCw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LAotICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNyw3LDAsMCwwLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMTE3LDUsMCwKLSAgICAwLDAsMTA4LDExMSw5NywxMDAsMTE1LDExNywxMCwwLDAsMCwxMDUsMTE1LDEwNSwxMTAsCi0gICAgMTE1LDExNiw5NywxMTAsOTksMTAxLDExNywxMCwwLDAsMCw5NSw5OSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwKLSAgICAxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwwLDAsMCw3MywKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDQwLDYsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LAotICAgIDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDAsOTcsCi0gICAgMTE2LDk3LDExNywxMCwwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAwLDk3LDExNiwKLSAgICA5NywxMTcsNSwwLDAsMCwxMDIsMTExLDExNywxMTAsMTAwLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgOTksMTExLDEwMCwxMDEsNjcsNCwwLDAsMTE1LDE4LDAsMCwwLDAsMSwxNSwKLSAgICAxLDE1LDEsMjQsMSwxNSwxLDE1LDEsMTMsMSw0LDIsMTgsMSwxMTcsCi0gICAgMjksMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwKLSAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLAotICAgIDIsMCwwLDAsMTE3LDM5LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsCi0gICAgNzgsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwKLSAgICAyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3OSw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDMxLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsNzgsNDAsNywwLDAsMCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsCi0gICAgOTksOTUsOTUsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAyMCwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw2MCw0LDAsMCwxMTUsOCwwLDAsCi0gICAgMCwxNiwyLDYsMiwxMiwzLDEyLDEyLDExNywyMCwwLDAsMCw4MywxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw1LAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAotICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsCi0gICAgMCwxMDEsNiwwLDEwMSw3LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsOCwwLDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMzIsMCwwLDkwLDksMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsCi0gICAgMCw5MCwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsMTEsMCwKLSAgICAxMDAsMTIsMCw4Myw0MCwxMywwLDAsMCwxMTcsMTksMCwwLDAsNjksMTIwLAorICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE0LAorICAgIDQ5LDEsMCwwLDEwNSwxODIsMSwwLDAsOTksMywwLDAsMCwxLDAsCisgICAgMCwwLDksMCwwLDAsMTgsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLAorICAgIDEsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsCisgICAgNCwwLDEyNSw1LDAsMTAzLDAsMCwxMjUsNiwwLDEyMCw1NCwwLDEyNCw0LAorICAgIDAsMTE0LDgwLDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwxLDAsMTIsMTE0LDgwLAorICAgIDAsMTE2LDAsMCwxMjQsNCwwLDEzMSwxLDAsOTIsMiwwLDEyNSw0LDAsCisgICAgMTI1LDcsMCwxMjQsNiwwLDEwNiwyLDAsMTI0LDcsMCwxMzEsMSwwLDEsCisgICAgMTEzLDI3LDAsODcsMTIwLDEzMiwwLDExNiwzLDAsMTI0LDYsMCwxMzEsMSwwLAorICAgIDY4LDkzLDExOCwwLDEyNSw3LDAsMTE2LDQsMCwxMjQsNCwwLDEyNCw3LDAsCisgICAgMTMxLDIsMCwxMjUsNCwwLDEyMSwxNywwLDExNiw1LDAsMTA2LDYsMCwxMjQsCisgICAgNCwwLDEzMSwxLDAsMSw4NywxMTMsOTQsMCw0LDExNiw3LDAsMTA3LDEwLAorICAgIDAsMTE0LDE1NSwwLDEsMSwxLDExOSw5NCwwLDg5LDExMyw5NCwwLDQsMTE2LAorICAgIDgsMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwxMjUsOCwwLDEsMTIyLDI1LDAsCisgICAgMTE2LDksMCwxMDAsMSwwLDEyNCw0LDAsMTI0LDgsMCwxMzEsMywwLDEsCisgICAgMTAwLDIsMCw4Myw4Nyw4OSwxMDAsMiwwLDEwMCwyLDAsMTI1LDgsMCwxMjYsCisgICAgOCwwLDg4LDExMyw5NCwwLDg4LDExMyw5NCwwLDg3LDEyMSwzMywwLDExNiwxMCwKKyAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMSwxMTYsOSwKKyAgICAwLDEwMCwzLDAsMTI0LDEsMCwxMzEsMiwwLDEsODcsMTEwLDUzLDAsNCwKKyAgICAxMTYsOCwwLDEwNywxMCwwLDExNCw0OCwxLDEsMTI1LDgsMCwxLDEyMiwyMSwKKyAgICAwLDExNiw5LDAsMTAwLDEsMCwxMjQsMSwwLDEyNCw4LDAsMTMxLDMsMCwKKyAgICAxLDg3LDg5LDEwMCwyLDAsMTAwLDIsMCwxMjUsOCwwLDEyNiw4LDAsODgsCisgICAgMTEwLDEsMCw4OCwxMDAsMiwwLDgzLDQxLDQsMTIyLDI3LDg3LDExNCwxMDUsMTE2LAorICAgIDEwMSwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLAorICAgIDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMjIsMjcsOTksMTExLDExNywxMDgsMTAwLDMyLDExMCwKKyAgICAxMTEsMTE2LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw1OCwzMiwKKyAgICAxMjMsMzMsMTE0LDEyNSw3OCwxMjIsMTIsOTksMTE0LDEwMSw5NywxMTYsMTAxLDEwMCwzMiwxMjMsCisgICAgMzMsMTE0LDEyNSw0MSwxMSwxMTQsMzgsMCwwLDAsMTE0LDQ2LDAsMCwwLDExNCwKKyAgICAyMjMsMCwwLDAsMTE0LDMzLDAsMCwwLDExNCwyOCwwLDAsMCwxMTQsMywKKyAgICAwLDAsMCw5MCw1LDEwOSwxMDcsMTAwLDEwNSwxMTQsMjE4LDE1LDcwLDEwNSwxMDgsMTAxLAorICAgIDY5LDEyMCwxMDUsMTE1LDExNiwxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0MCwwLDAsMCwKKyAgICAxMTQsMTUyLDAsMCwwLDExNCw1NSwwLDAsMCw0MSw5LDExNCw3MSwwLDAsCisgICAgMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0OSwxLDAsMCwKKyAgICAxMTQsMjMxLDAsMCwwLDExNCwxMzEsMCwwLDAsMTE0LDI3LDAsMCwwLDExNCwKKyAgICAyMywwLDAsMCwxMTQsMzYsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDMzLDEsMCwwLDU2LDYsMCwKKyAgICAwLDExNSwzOCwwLDAsMCwwLDIsMTgsMSw2LDIsMjIsMSwxOCwxLAorICAgIDE3LDIsMTksMSwxNSwxLDMsMSwxNywxLDEzLDIsNywxLDE4LDMsCisgICAgMTYsMSwyNywxLDMsMSwxNiwxLDE3LDEsMTgsMiwxMjIsMjUsODMsMTExLAorICAgIDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsCisgICAgMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDc4LDQxLDcsMTE0LDU3LDAsMCwwLDExNCwKKyAgICA1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwzMiwKKyAgICAxLDAsMCwxMTQsMzQsMSwwLDAsMTE0LDMzLDEsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw0NywxLDAsMCw0Miw2LDAsMCwxMTUsOCwwLDAsMCwxMiwKKyAgICAyLDYsMiwxMiw1LDEyLDUsMTE0LDQ3LDEsMCwwLDk5LDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNjQsMCwwLAorICAgIDAsMTE1LDQ2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsCisgICAgMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwKKyAgICAwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsCisgICAgMTAwLDYsMCw4Myw0MSw3LDIxOCwyMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwKKyAgICAxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsNDUsNzYsMTExLAorICAgIDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsCisgICAgMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LAorICAgIDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCw1LDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDc2LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLAorICAgIDEyNSwzLDAsMTE2LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsCisgICAgMiwwLDEyNCwyLDAsMTMxLDEsMiwxMjUsNCwwLDExNiwzLDAsMTI0LDQsCisgICAgMCwxMDAsMSwwLDEyNCwxLDAsMTAwLDMsMCwxMjQsMiwwLDEzMSwxLDIsCisgICAgODMsNDEsNCw3OCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwxNDAsCisgICAgMCwwLDAsNDEsNCwxMTQsMjM0LDAsMCwwLDExNCwzNSwxLDAsMCwxMTQsCisgICAgMTkwLDAsMCwwLDExNCwxOTUsMCwwLDAsNDEsNSwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDUzLDAsMCwwLDExNCwKKyAgICA0MywxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMTIsMSwwLDAsODksNiwwLDAsMTE1LDgsMCwwLAorICAgIDAsMCwxLDE1LDEsMTUsMSwyNCwxLDEyMiwyOSw4MywxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKKyAgICAxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsCisgICAgMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsMzksODIsMTAxLDExNiwxMTcsMTE0LDExMCwKKyAgICAzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsCisgICAgMTE1LDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSwKKyAgICA0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU4LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwxMywxLDAsMCw5NSw2LDAsMCwxMTUsMiwwLDAsMCwKKyAgICAwLDIsMTIyLDMxLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsNzgsNDEsNiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLAorICAgIDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDEyLDEsMCwwLDExNCwKKyAgICAxMywxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNTEsMSwwLDAsODUsNiwwLAorICAgIDAsMTE1LDYsMCwwLDAsMTIsMiw2LDIsMTIsNiwxMTQsNTEsMSwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsOTAsMSwKKyAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsCisgICAgMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDEsNSwwLDEwMCw0LDAsMTAwLAorICAgIDUsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMCw2LDAsMTAwLDcsCisgICAgMCwxMzIsMCwwLDkwLDcsMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwKKyAgICA5MCw4LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCw5LDAsMTAxLAorICAgIDUsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTAsCisgICAgMCwxMDAsMTQsMCw4Myw0MSwxNSwyMTgsMTksNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTIyLDkzLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCisgICAgMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsODQsMTA0LDEwMSwzMiw5OSwxMTEsMTEwLDExNSwxMTYsMTE0LDExNyw5OSwxMTYsMTExLDExNCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwKKyAgICAxMTksMTExLDExNCwxMDcsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMywwLDAsMCwKKyAgICAwLDAsMCwwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMjIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwKKyAgICAwLDEyNCwwLDAsOTUsMSwwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSwyLAorICAgIDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsNDEsMywxMTQsNzEsMCwwLAorICAgIDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMTEyLAorICAgIDYsMCwwLDExNSw0LDAsMCwwLDAsMSw5LDEsMTIyLDI4LDY5LDEyMCwKICAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNyw5MywwLDAsMCw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCi0gICAgMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsOTksMTExLDExMCwKLSAgICAxMTUsMTE2LDExNCwxMTcsOTksMTE2LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNSwxMDUsCi0gICAgMTAzLDExMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTE5LDExMSwxMTQsMTA3LDMyLDExOSwxMDUsMTE2LAotICAgIDEwNCwzMiw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLAotICAgIDMyLDMyLDMyLDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLAotICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLDAsCi0gICAgMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMDAsCi0gICAgMCwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwKLSAgICAwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5Niw0LDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDExNywyOCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsCi0gICAgMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDE3NSwwLDAsCi0gICAgMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDEyNSwyLDAsCi0gICAgMTIxLDEwNywwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTI0LAotICAgIDAsMCwxMDYsNSwwLDEzMSwzLDAsMTI1LDMsMCwxMTYsNiwwLDEwMCwxLAotICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEzMSwyLDAsMSwxMjQsMCwwLDEwNiw3LAotICAgIDAsMTI0LDEsMCwxMzEsMSwwLDExNCwxMTcsMCwxMTYsOCwwLDEyNCwzLDAsCi0gICAgMTAwLDIsMCwxMzEsMiwwLDEyLDExNCwxMTcsMCwxMTYsOSwwLDEyNCwwLDAsCi0gICAgMTA2LDUsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTAzLDEsMCwxMjQsMywwLAotICAgIDk1LDEwLDAsMTEwLDAsMCwxMjQsMywwLDgzLDg3LDExMCw0NiwwLDEsMSwKLSAgICAxLDEyNCwyLDAsMTIsMTE0LDE2MywwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEwNyw2LDAsMTE0LDE2MywwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLAotICAgIDYxLDExMCwwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLDg4LDEwMCw0LDAsODMsCi0gICAgNDAsNSwwLDAsMCwxMTcsMjUsMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywKLSAgICAxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNDYsMTE3LDMzLDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsCi0gICAgMTAyLDExNCwxMTEsMTA5LDMyLDEyMywzMywxMTQsMTI1LDExNyw4LDAsMCwwLDk1LDk1LAotICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDExLDAsMCwKLSAgICAwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwKLSAgICAxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsCi0gICAgMTE4LDEwMSwxMDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE3LDQsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMCwwLDAsMCwKLSAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMDQsCi0gICAgOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDk1LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwKLSAgICAwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTAwLDQsMCwwLDExNSwyNCwwLDAsMCwwLDUsMTUsMSwKLSAgICAzLDEsOSwxLDE1LDEsMTYsMSwzMSwxLDI4LDEsOCwxLDMsMSwKLSAgICAyMiwxLDEzLDEsMTE3LDMxLDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAorICAgIDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDQsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDE4MywwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjksMCwKKyAgICAxLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTI0LDAsMCwKKyAgICAxMDYsNCwwLDEzMSwzLDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LDExNiwKKyAgICA1LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDIsMCwxLDEyNCwKKyAgICAwLDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywKKyAgICAwLDExNCwxMjQsMCwxMTYsNywwLDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwwLAorICAgIDEyLDExNCwxMjQsMCwxMTYsOCwwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLAorICAgIDEwMCw0LDAsMjUsMTAzLDEsMCwxMjQsMiwwLDk1LDksMCwxMTAsMCwwLAorICAgIDEyNCwwLDAsMTI0LDIsMCw5NSwxMCwwLDEyNCwyLDAsMTA2LDExLDAsMTI0LAorICAgIDIsMCw5NSwxMiwwLDEyNCwzLDAsMTE1LDE3OSwwLDEyNCwyLDAsMTA2LDEyLAorICAgIDAsMTA2LDEzLDAsMTAwLDUsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTI0LDIsCisgICAgMCw5NSwxMiwwLDExMCwwLDAsMTI0LDIsMCw4Myw0MSw2LDEyMiwyNSw3NiwKKyAgICAxMTEsOTcsMTAwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsMzMsMTAxLDEyMCwxMTYsMTAxLDExMCwKKyAgICAxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE0LDI0MiwwLDAsCisgICAgMCwxMTQsODQsMCwwLDAsMTE0LDExNiwwLDAsMCw0MSwxNCwxMTQsNjksMCwKKyAgICAwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsMCwwLDkwLDEyLDEwOCwxMTEsCisgICAgOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE0LDM1LDAsMCwwLDExNCwKKyAgICAxNTIsMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsNjAsMCwwLDAsMTE0LDM4LAorICAgIDAsMCwwLDExNCwyNDIsMCwwLDAsMTE0LDIwNCwwLDAsMCwxMTQsNTcsMCwKKyAgICAwLDAsMTE0LDI0OSwwLDAsMCwxMTQsMzIsMCwwLDAsNDEsNCwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMTc5LDAsMCwwLDExNCwyMTksMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDMsMSwwLDAsMTE2LDYsMCwwLDExNSwyNCwwLDAsMCwwLAorICAgIDMsMTMsMSw5LDEsMjEsMSwxNiwxLDE1LDEsMjIsMSwyOCwxLDksCisgICAgMSwxMiwxLDYsMSwyOCwxLDEyMiwzMSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKICAgICAxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLDk3LAogICAgIDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLAogICAgIDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsMTE1LDQ4LDAsCiAgICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTAwLDEsCiAgICAgMCwyNSwxMzcsMCwwLDExNiwyLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwyLAogICAgIDAsMTAwLDMsMCwxMzQsMCwwLDExNiwzLDAsNjgsMTMxLDEsMCwxMzEsMSwKLSAgICAwLDgzLDQwLDQsMCwwLDAsMTE3LDQ5LDAsMCwwLDgyLDEwMSwxMTYsMTE3LAotICAgIDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDEsCi0gICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKLSAgICAxMDUsMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMDUsMSwwLAotICAgIDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LAotICAgIDAsMCwwLDUxLDAsMCwwLDExNSwzMSwwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIxLDAsMTI1LDEsMCwxMzYsMCwwLDEwMCwwLDAsMTI0LDEsMCwyMywxMDcsCi0gICAgMiwwLDg2LDEsMTEzLDMsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDc4LDQwLDAsCi0gICAgMCwwLDAsNDAsMiwwLDAsMCwxMTcsMiwwLDAsMCw0Niw0OCwxMTcsCi0gICAgNiwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MCwxLDAsMCwwLDExNywKLSAgICA5LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwKLSAgICAxMTQsNjIsMTIxLDQsMCwwLDExNSwyLDAsMCwwLDYsMSwxMTcsNDksMCwKLSAgICAwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCi0gICAgMTEyLDExNCw2Miw0MCw0LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywzLDAsMCwwLDk3LDExMCwxMjEsMTE3LDE4LDAsMCwwLDY5LDg4LAorICAgIDAsODMsNDEsNCwxMjIsNDksODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LAorICAgIDEwMSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKKyAgICAxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDExNCwyOSwwLDAsMCw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwwLDUxLDAsMCwKKyAgICAwLDExNSwzMSwwLDAsMCwxMjQsMCwwLDkzLDIxLDAsMTI1LDEsMCwxMzYsCisgICAgMCwwLDEwMCwwLDAsMTI0LDEsMCwyMywxMDcsMiwwLDg2LDEsMTEzLDMsCisgICAgMCwxMDAsMSwwLDgzLDQxLDIsMTE0LDcyLDAsMCwwLDc4LDExNCw0LDAsCisgICAgMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDIxOCw2LDExNSwxMTcsMTAyLDEwMiwxMDUsCisgICAgMTIwLDQxLDEsMjE4LDksMTAyLDEwNSwxMDgsMTAxLDk1LDExMCw5NywxMDksMTAxLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywwLDAsMCwxMzUsNiwwLAorICAgIDAsMTE1LDIsMCwwLDAsNiwxLDEyMiw0OSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LAorICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCisgICAgNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDQxLDQsMTE0LDM4LDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCwxMTQsNzgsMCwwLDAsMjE4LDE4LDY5LDg4LAogICAgIDg0LDY5LDc4LDgzLDczLDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LAotICAgIDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLAotICAgIDQwLDEsMCwwLDAsMTE3LDksMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsMTE4LDQsMCwwLDExNSw2LDAsMCwwLDAsMiwxOSwKLSAgICAxLDE4LDEsMTE3LDMwLDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLAotICAgIDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw2MywwLDAsMCw4MiwxMDEsCi0gICAgMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LDExNSwzMiw5NywxMTAsMzIsCi0gICAgMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiw5NywKLSAgICAzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsNDYsNzgsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsCi0gICAgMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwKLSAgICAwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LAotICAgIDk3LDExMiw2MiwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwKLSAgICAxMjQsNCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyOCwwLDAsMCwKLSAgICA2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwKLSAgICAwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsCi0gICAgNTMsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiwKLSAgICA5NywxMTUsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE1LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExMCwxMTEsMzIsMTE1LDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCw0MCwxLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwKLSAgICAwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDEyOCw0LAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDMwLDAsMCwwLDY5LDEyMCwKLSAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNzgsNDAsMTIsMCwKLSAgICAwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwKLSAgICAwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LAotICAgIDEwMSw5OSwxMDcsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDExLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LAotICAgIDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxOSwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLAotICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw4OCw0LDAsMCwxMTUsMTYsCi0gICAgMCwwLDAsMTYsNiw2LDIsMTIsNCwzLDEsMywxLDI0LDE2LDEyLAotICAgIDYsMTIsNCwxMTcsMTksMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLDAsMCwKLSAgICAxMTUsMTM0LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLAotICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLAotICAgIDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLAotICAgIDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwKLSAgICAwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsCi0gICAgOTAsOSwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsCi0gICAgMTYsMCwxMDAsMTcsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LAotICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyMCwwLDgzLDQwLDIxLDAsMCwwLAotICAgIDExNywxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLAotICAgIDk3LDExNiwxMDQsMTE3LDM4LDEsMCwwLDgyLDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwKLSAgICAxMTYsMTE1LDMyLDk3LDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNiwxMDQsNDYsMzIsMzIsCi0gICAgNzMsMTE2LDMyLDExNywxMTUsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwzMiwxMDUsMTE2LDExNSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNiwzMiwxMDgsMTExLDExMSwxMDcsMTE1LDMyLDExNywKLSAgICAxMTIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzOSwxMTUsMTAsMzIsCi0gICAgMzIsMzIsMzIsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsNDYsMzIsMzIsODcsMTA0LAotICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDk5LDEwNCw5NywxMTAsMTAzLDEwMSwxMTUsNDQsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMSwxMTksCi0gICAgMTEwLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSw5OSwxMTEsMTA5LDExMiwKLSAgICAxMTcsMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwzMiwzMiw3MCwxMTEsCi0gICAgMTE0LDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLAotICAgIDMyLDMyLDEwNSwxMTUsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsOTksNCwKLSAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMiwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNTIsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsCi0gICAgMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDExNiwyLDAsMTI0LDAsMCwKLSAgICAxMDYsMywwLDEzMSwwLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDQsMCwxMjQsCi0gICAgMywwLDEyNCwwLDAsOTUsNSwwLDEwMCwwLDAsODMsNDAsMSwwLDAsCi0gICAgMCw3OCw0MCw2LDAsMCwwLDExNyw1LDAsMCwwLDk1LDExMCw5NywxMDksCi0gICAgMTAxLDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDExNyw1LDAsMCwwLAotICAgIDExNiwxMTcsMTEyLDEwOCwxMDEsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiwKLSAgICA5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDE3LDAsMCwwLDk1LAotICAgIDEwOCw5NywxMTUsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDEyLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCi0gICAgMTE0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLAotICAgIDExNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxNDAsNCwwLDAsMTE1LDgsCi0gICAgMCwwLDAsMCwxLDksMSw5LDEsMjEsMSwxMTcsMjMsMCwwLDAsCi0gICAgOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw1MywwLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsCi0gICAgOTIsMywwLDEyNSwxLDAsMTI1LDIsMCwxMjUsMywwLDEyNCwyLDAsMTAwLAotICAgIDIsMCwxMDcsMiwwLDExNCw0MywwLDEwMCw2LDAsODMsMTI0LDEsMCwxMDAsCi0gICAgNSwwLDEwMiwyLDAsODMsNDAsNywwLDAsMCwxMTcsNjIsMCwwLDAsCi0gICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiwKLSAgICAxMTEsMTAyLDMyLDQwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDUsMTEwLDk3LDEwOSwxMDEsNDQsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw0NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw0NSw5NywxMTYsMTE2LDExNCw0NSwxMTAsOTcsMTA5LDEwMSw0MSwxMTcsMSwKLSAgICAwLDAsMCw0NiwxMTcsMCwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLAotICAgIDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSw0MCwyLDAsMCwwLDExNywzLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDIsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDQsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LDAsMCwwLDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsMTE3LDMsMCwwLDAsMTAwLDExMSwxMTYsMTE3LDIsMCwwLAotICAgIDAsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAyMywwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTQ2LDQsMCwwLDExNSwKLSAgICA4LDAsMCwwLDAsMiwyNywxLDEyLDIsNCwzLDExNywzOCwwLDAsCi0gICAgMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LDEsMCwwLDAsMCwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDM4LDAsMCwKLSAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDkyLDIsMCwxMjUsMSwwLAotICAgIDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsMCwyNSwKLSAgICAxMjQsMiwwLDEzMSwyLDAsODMsNDAsMSwwLDAsMCw3OCw0MCw0LDAsCi0gICAgMCwwLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwKLSAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDcsCi0gICAgMCwwLDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQwLDMsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywxOCwwLDAsCi0gICAgMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSw5NywxMTYsMTE2LAotICAgIDExNCw5NSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LDEwMSwKLSAgICAxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDE1Niw0LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEsMTgsMSwxMTcsMzEsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTAzLDAsCi0gICAgMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsCi0gICAgMCwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsCi0gICAgMTE0LDk2LDAsMTI0LDAsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMjQsCi0gICAgMSwwLDEzMSwyLDAsOTIsMiwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMiwKLSAgICAwLDEwMCwwLDAsMTA3LDgsMCwxMTQsODQsMCwxMjQsMywwLDEyNCwwLDAsCi0gICAgOTUsNiwwLDExMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDIsMCwxMTAsCi0gICAgMCwwLDEyNCwwLDAsMTA2LDYsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLAotICAgIDcsMCwwLDAsMTE3LDUsMCwwLDAsMTE2LDExNywxMTIsMTA4LDEwMSwxMTcsMTYsCi0gICAgMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCwxMTcsMTcsMCwwLDAsOTUsMTA4LDk3LDExNSwxMTYsOTUsMTEyLDk3LAotICAgIDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDUsMCwwLDAsOTUsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDUsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsNDAsNCwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDExLDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAxMTcsOCwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTYwLDQsMCwwLDExNSwxNCwKLSAgICAwLDAsMCwwLDIsMTgsMSwxNSwxLDI3LDMsMTIsMSwxMiwxLDEyLAotICAgIDEsMTE3LDI3LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgODAsOTcsMTE2LDEwNCw0Niw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsMCwxMjQsMCwKLSAgICAwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQwLDEsMCwwLDAsCi0gICAgNzgsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMDUsMTE2LDEwMSwxMTQsMTE3LAotICAgIDEyLDAsMCwwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSwxNzIsNCwwLDAsMTE1LDIsMCwwLDAsCi0gICAgMCwxLDExNywyMywwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCi0gICAgMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDIsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDEyLDAsMCwwLAotICAgIDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSw0MCwxLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk1LDk1LDEwOCwxMDEsMTEwLAotICAgIDk1LDk1LDE3NSw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDIyLDAsCi0gICAgMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwKLSAgICA0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLAotICAgIDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLAotICAgIDAsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjAsMCwwLDAsOTUsNzgsOTcsCi0gICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywxMTQsMTI1LAotICAgIDQxLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LAotICAgIDExNiwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSwxNzgsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMywwLAotICAgIDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCi0gICAgNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDk5LDIsMCwwLDAsMCwwLAotICAgIDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMCwwLDEzMSwwLDAsMTA3LAotICAgIDYsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDEyLAotICAgIDAsMCwwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSw0MCwKLSAgICAyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLAotICAgIDAsMCwxMDUsMTE2LDEwMSwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwKLSAgICAxMTUsOTUsOTUsMTgxLDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjcsCi0gICAgMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsCi0gICAgMTA0LDQ2LDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDk5LDIsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCw0MSwxLDExNCw1NCwxLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjE5LDAsCisgICAgMCwwLDEzMiw2LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksMSwxOCwKKyAgICAxLDEyMiwzMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLAorICAgIDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsCisgICAgMiwxMjIsNjMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywKKyAgICAxMTUsMzIsOTcsMTEwLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLAorICAgIDk3LDExNiwxMDEsMzIsOTcsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksCisgICAgMTE2LDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAxNTgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDEyLDEsMCwwLDEzOCw2LDAsMCwxMTUsMiwwLDAsCisgICAgMCwwLDIsMTIyLDI4LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCisgICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwKKyAgICAyLDEyMiw1Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLDk3LAorICAgIDExNSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTEwLDExMSwzMiwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQ2LDc4LDExNCw0LDAsMCwwLDQxLDIsCisgICAgMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEzLDEsMCwwLDE0Miw2LAorICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwKKyAgICAxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywKKyAgICAxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNywKKyAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsODMsNDEsMSwxMjIsNTgsODIsMTAxLAorICAgIDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDMyLDk3LDExNSwzMiwxMDIsMTExLDExNywxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw0MSwxLDExNCwzNSwwLDAsMCw0MSwKKyAgICAyLDExNCw3MSwwLDAsMCwxMTQsMTU4LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMzQsMCwwLDAsMTQ2LAorICAgIDYsMCwwLDExNSwyLDAsMCwwLDAsMywxMjIsMzIsNjksMTIwLDExNiwxMDEsCisgICAgMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDc4LDQxLDExLDExNCwKKyAgICA1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwKKyAgICAwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LDE1NiwwLDAsMCwxMTQsMywxLAorICAgIDAsMCwxMTQsMjE5LDAsMCwwLDExNCwxMiwxLDAsMCwxMTQsMTMsMSwwLAorICAgIDAsMTE0LDIzNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNTIsMSwwLDAsMTA0LAorICAgIDYsMCwwLDExNSwxNCwwLDAsMCwxMiw2LDYsMiwxMiw0LDE4LDE2LAorICAgIDEyLDYsMTIsNCwxMiw0LDExNCw1MiwxLDAsMCw5OSwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLAorICAgIDExNSwxMzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLAorICAgIDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsCisgICAgOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsCisgICAgNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwKKyAgICAwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsCisgICAgOTAsOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsOSwwLDEwMCwKKyAgICAxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTYsMCwxMDAsMTcsCisgICAgMCwxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCwKKyAgICA5MCwxMiwwLDEwMCwyMCwwLDgzLDQxLDIxLDIxOCwxNCw5NSw3OCw5NywxMDksMTAxLAorICAgIDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsOTcsMzgsMSwwLDAsODIsMTAxLAorICAgIDExMiwxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LAorICAgIDExMiw5Nyw5OSwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsCisgICAgOTcsMTE2LDEwNCw0NiwzMiwzMiw3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLAorICAgIDMyLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwKKyAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwKKyAgICAxMTEsMTExLDEwNywxMTUsMzIsMTE3LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwKKyAgICAxMTAsMTE2LDM5LDExNSwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICA5NSw0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LAorICAgIDk3LDExMCwxMDMsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzOSwxMTUsMzIsMTExLDExOSwxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwKKyAgICAxMTQsMTAxLDk5LDExMSwxMDksMTEyLDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDMyLDMyLDcwLDExMSwxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLAorICAgIDEwOCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLAorICAgIDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLAorICAgIDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCw0Niw5OSw0LDAsMCwwLDAsMCwwLDAsNCwwLDAsCisgICAgMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwKKyAgICAwLDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsCisgICAgMTE2LDIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwKKyAgICAwLDAsOTUsNCwwLDEyNCwzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDYsMTE0LDcwLDAsMCwwLDExNCwyNTIsMCwwLAorICAgIDAsMTE0LDIyOSwwLDAsMCwyMTgsMTYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwKKyAgICAxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTcsOTUsMTA4LDk3LDExNSwxMTYsOTUsCisgICAgMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTIsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsNCwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwyMTgsMTEsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDE1OSw2LDAsMCwxMTUsCisgICAgOCwwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDEyMiwyMyw5NSw3OCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LAorICAgIDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCw5MiwzLAorICAgIDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMiwwLAorICAgIDEwNywyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCw1LDAsCisgICAgMTAyLDIsMCw4Myw0MSw3LDEyMiw2Miw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwKKyAgICA5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsCisgICAgMTEwLDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwKKyAgICAxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiw5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LAorICAgIDQ1LDExMCw5NywxMDksMTAxLDQxLDExNCwxMTYsMCwwLDAsMTE0LDMwLDAsMCwwLAorICAgIDExNCw3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjQyLDAsMCwwLDQxLAorICAgIDIsMTIyLDMsMTE1LDEyMSwxMTUsMTIyLDQsMTEyLDk3LDExNiwxMDQsNDEsMiwxMTQsNzAsCisgICAgMCwwLDAsMTE0LDMyLDAsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAyMzEsMCwwLDAsMjE4LDMsMTAwLDExMSwxMTYsMTE0LDk0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMyw5NSwKKyAgICAxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTY1LDYsMCwwLDExNSw4LDAsMCwwLDAsCisgICAgMiwyNywxLDEyLDIsNCwzLDEyMiwzOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywKKyAgICAxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsCisgICAgMCwwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDEsMCwyNSwxMjQsMiwwLDEzMSwyLDAsODMsNDEsCisgICAgMSw3OCw0MSw0LDExNCw2MiwxLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDcsCisgICAgMCwwLDAsMTE0LDczLDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDkwLAorICAgIDE4LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLAorICAgIDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDU3LDEsMCwwLDE3NSw2LDAsMCwxMTUsNCwwLDAsMCwKKyAgICAwLDEsMTgsMSwxMjIsMzEsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsCisgICAgOTUsMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTI3LDAsMCwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCwxMjUsMSwKKyAgICAwLDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsMTE0LDEyMCwwLAorICAgIDEyNCwwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsCisgICAgMiwwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEwOCwKKyAgICAwLDEyNCwyLDAsMTA2LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLAorICAgIDEyNCwyLDAsMTA2LDYsMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNiwwLDEyNCwKKyAgICAwLDAsOTUsNywwLDExMywxMDgsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsCisgICAgMCw5NSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw3LDAsODMsNDEsMSwKKyAgICA3OCw0MSw4LDExNCwyMjksMCwwLDAsMTE0LDU3LDEsMCwwLDExNCw1OCwxLAorICAgIDAsMCwxMTQsNTksMSwwLDAsMTE0LDcwLDAsMCwwLDExNCwxNjksMCwwLAorICAgIDAsMTE0LDIyMCwwLDAsMCwxMTQsMjUyLDAsMCwwLDQxLDMsMTE0LDcxLDAsCisgICAgMCwwLDkwLDExLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE0LAorICAgIDE3NywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsCisgICAgMTAxLDE3OSw2LDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsMTUsMSwKKyAgICAyMSwzLDI3LDEsOSwxLDE4LDEsMTIsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LAorICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsCisgICAgMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCisgICAgMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsCisgICAgODMsNDEsMSw3OCw0MSwyLDIxOCw0LDEwNSwxMTYsMTAxLDExNCwxMTQsNjMsMSwwLAorICAgIDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LAorICAgIDk1LDE5Miw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LAorICAgIDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsCisgICAgMTE2LDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKKyAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQxLAorICAgIDEsNzgsNDEsMiwxMTQsMzEsMCwwLDAsMTE0LDYzLDEsMCwwLDQxLDEsCisgICAgMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCw3LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDE5NSw2LDAsCisgICAgMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc4LDk3LDEwOSwxMDEsMTE1LAorICAgIDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSwKKyAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsCisgICAgMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMjAsOTUsCisgICAgNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywKKyAgICAxMTQsMTI1LDQxLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwyNTIsMCwwLDAsNDEsCisgICAgMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwxOTgsNiwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxLDEyMiwyMyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksCisgICAgMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDk5LDIsCiAgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDAsMSwwLDAsCi0gICAgMCw3OCw0MCwyLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTA1LAotICAgIDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxODQsNCwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCwxLDExNywyMSwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwKLSAgICAxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw3OCwKLSAgICA0MCwxMywwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywyMywwLDAsMCwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LAotICAgIDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsMCwKLSAgICAwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDEwMSwxMTAsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsCi0gICAgMTE0LDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsCi0gICAgMTEwLDExNSw5NSw5NSwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAotICAgIDExNiwxMDQsMTMzLDQsMCwwLDExNSwyMCwwLDAsMCwxNiw1LDYsMiwxMiwKLSAgICA2LDEyLDEwLDEyLDQsMTIsMTIsMTIsMywxMiwzLDEyLDMsMTIsMywxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsCi0gICAgMiwwLDEzMiwwLDAsOTAsMywwLDEwMSw0LDAsMTAwLDMsMCwxMDAsNCwKLSAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNSwwLAotICAgIDEwMCw2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDAsNywwLDgzLAotICAgIDQwLDgsMCwwLDAsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDQsMCwwLDAsMCwwLAotICAgIDAsMCw0LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LAotICAgIDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLAotICAgIDMsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDExNyw1LDAsMCwwLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNywxMSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxODksNCwwLAotICAgIDAsMTE1LDIsMCwwLDAsMCwxLDExNywyNCwwLDAsMCw3OCw5NywxMDksCi0gICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsCi0gICAgMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLAotICAgIDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTE3LDI1LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKLSAgICAxMDEsNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LAotICAgIDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsMTkyLDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsCi0gICAgMjcsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDMyLDAsMCwwLDExNiwwLDAsMTAwLDEsMCwxMjQsCi0gICAgMCwwLDEwNiwxLDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDEsMCwxMjQsCi0gICAgMSwwLDk1LDIsMCwxMjQsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTE3LDM4LDAsMCwwLAotICAgIDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDEyMywzMywxMTQsMTI1LDQwLDMsMCwwLDAsMTE3LDE2LDAsMCwwLAotICAgIDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLAotICAgIDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5Niw0LDAsMCwKLSAgICAxMTUsNiwwLDAsMCwwLDMsMTYsMSwxMiwxLDExNywyNywwLDAsMCwKLSAgICA3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwKLSAgICAxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCw4LDAsMCwKLSAgICAwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwKLSAgICAwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCwKLSAgICA5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsMTEsMCwwLDAsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDExNywxNywwLDAsMCwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LAotICAgIDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTg4LDQsMCwwLDExNSw2LDAsMCwwLDE2LDEsCi0gICAgMTIsMywxOCw0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMSwwLDAsMCw0LDAsMCwwLDY2LDAsMCwwLDExNSwxMTksMCwKLSAgICAwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLAotICAgIDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwKLSAgICAxMDAsNSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsCi0gICAgNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwKLSAgICAwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLAotICAgIDEwMSw0LDAsMTAwLDEyLDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDEsMCwxMzEsCi0gICAgMSwwLDkwLDEwLDAsMTAwLDEyLDAsODMsNDAsMTMsMCwwLDAsMTE3LDEwLAotICAgIDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNjIsMCwKLSAgICAwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDQ2LAotICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDQsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwxMjUsMSwwLAotICAgIDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDE2LDAsMTI0LAotICAgIDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsMTYsMCw4NywKLSAgICAxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDEyNSwwLDAsMCw2Nyw5NywKLSAgICAxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwKLSAgICAxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwKLSAgICAxMDAsMzIsMTExLDExMCwzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsCi0gICAgMTE2LDExNCwxMjEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwKLSAgICAxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMTE3LDE3LDAsMCwwLAotICAgIDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICAxMTUsNzgsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgMTksMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLAotICAgIDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw2LDAsMCwwLDExOCw5NywxMDgsMTE3LAotICAgIDEwMSwxMTUsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTcsCi0gICAgMCwwLDAsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDExNSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwKLSAgICAxMTUsMTE3LDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsMCwwLDAsMTA1LDExMCwxMTgsCi0gICAgOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSwyMTAsNCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMCw0LDIyLDEsMTUsMSwxMTcsMjgsMCwKLSAgICAwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LAotICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsOTksMiwKLSAgICAwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDk0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsCi0gICAgMCwxMTYsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsCi0gICAgMSwxMTAsMCwwLDEyMCw1OSwwLDExNiwwLDAsMTA2LDEsMCw2OCw5Myw0NCwKLSAgICAwLDEyNSwyLDAsMTIxLDE0LDAsMTI0LDIsMCwxMjQsMSwwLDEzMSwxLDAsCi0gICAgODMsODcsMTEzLDM4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCw4MSwwLDEsCi0gICAgMSwxLDExOSwzOCwwLDg5LDExMywzOCwwLDg4LDExMywzOCwwLDg3LDEwMCwyLAotICAgIDAsODMsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywxMTMsMCwwLDAsCi0gICAgODMsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsOTksMTAxLDMyLAotICAgIDExMSwxMDIsMzIsMTA0LDExMSwxMTEsMTA3LDExNSwzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwzOSwxMTIsOTcsMTE2LDEwNCwzOSwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMzksMTA0LAotICAgIDExMSwxMTEsMTA3LDExNSwzOSwzMiwxMDUsMTE1LDMyLDEwMiw5NywxMDgsMTE1LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsMTE3LDExNSwxMDEsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwxMTcsMjMsMCwwLDAsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LAotICAgIDExMSwxMTEsMTA3LDExNSwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDAsNywKLSAgICAwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMTAsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwxMTcsOSwwLDAsMCw5NSwKLSAgICAxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTE3LDQsMCwwLDAsMTE5LDk3LDExNCwKLSAgICAxMTAsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsMTE0LDExMCwKLSAgICAxMDUsMTEwLDEwMywxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsCi0gICAgMTE0LDExMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMywwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw0LDAsMCwwLDEwNCwxMTEsMTExLDEwNyw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDIxOCw0LDAsMCwxMTUsMTYsMCwwLDAsCi0gICAgMCw3LDksMSwxOSwxLDE2LDEsMywxLDE0LDEsMTMsMSwxMiwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw5OSwyLDAsMCwwLAotICAgIDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTEsMCwwLDAsMTI0LDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIxLAotICAgIDAsMTAwLDIsMCwxMjUsMSwwLDExMCwwLDAsMTIxLDE3LDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsMjUsMTI1LDIsMCw4NywxMTAsNDYsMCw0LDExNiwKLSAgICAyLDAsMTA3LDEwLDAsMTE0LDg2LDAsMSwxLDEsMTI0LDAsMCwxMDYsMywKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEyNCwxLDAsNjAsODksMTEwLDEsMCw4OCwxMjQsMiwwLDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDIxMCwwLDAsMCw3MSwxMDEsMTE2LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTAyLDExNCwxMTEsMTA5LAotICAgIDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLAotICAgIDExMCwxMTYsMTE0LDEyMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LDEwMSw0NCwzMiwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsOTcsMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMTEwLAotICAgIDEwMCwzMiw5OSw5Nyw5OSwxMDQsMTAxLDMyLDEwNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExMCwKLSAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LAotICAgIDEwOCw5Nyw5OCwxMDgsMTAxLDQ0LDMyLDExNSwxMTYsMTExLDExNCwxMDEsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDAsMCwwLAotICAgIDAsMTE3LDEsMCwwLDAsNDYsNDAsNCwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCwxMTUsMTIxLDExNSwxMTcsMTksMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw4LDAsMCwKLSAgICAwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQwLDMsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsOTksMTA4LDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgNiwwLDAsMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjM1LAotICAgIDQsMCwwLDExNSwxNiwwLDAsMCwwLDgsMTIsMSw5LDEsMywxLAotICAgIDE3LDEsMTMsMSwxNSwxLDE4LDEsMTE3LDMxLDAsMCwwLDgwLDk3LDExNiwKLSAgICAxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMywwLDAsCi0gICAgMCwwLDAsMCwwLDgsMCwwLDAsNSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTg5LDAsMCwwLDEwMywwLDAsMTI1LDMsMCwxMjAsMTc2LDAsMTI0LAotICAgIDIsMCw2OCw5MywxNTgsMCwxMjUsNCwwLDExNiwwLDAsMTI0LDQsMCwxMTYsCi0gICAgMSwwLDExNiwyLDAsMTAyLDIsMCwxMzEsMiwwLDExNSw0NiwwLDExMywxMywKLSAgICAwLDExMCwwLDAsMTI0LDAsMCwxMDYsMywwLDEyNCw0LDAsMTMxLDEsMCwKLSAgICAxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxMywwLDExNiwKLSAgICA1LDAsMTI0LDUsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDExMiwwLDEyNCw1LAotICAgIDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSw2LDAsCi0gICAgMTI1LDcsMCwxMTAsMjEsMCwxMjQsNSwwLDEwNiw3LDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEyNSw2LDAsMTAzLDAsMCwxMjUsNywwLDEyNCw2LDAsMTAwLDIsCi0gICAgMCwxMDcsOSwwLDExNCwxNTUsMCwxMjQsNiwwLDEyNCwzLDAsMTAyLDIsMCwKLSAgICA4MywxMjQsMywwLDEwNiw4LDAsMTI0LDcsMCwxMzEsMSwwLDEsMTEzLDEzLAotICAgIDAsMTEzLDEzLDAsODcsMTAwLDIsMCwxMjQsMywwLDEwMiwyLDAsODMsMTAwLAotICAgIDIsMCw4Myw0MCwzLDAsMCwwLDExNyw2MywwLDAsMCw3MCwxMDUsMTEwLAotICAgIDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMTQsMzIsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMzIsMTAyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ3LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMTcsMTEsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNzgsNDAsOSwwLAotICAgIDAsMCwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTE2LDExNCwxMTcsNSwwLDAsMCw5OCwxMjEsCi0gICAgMTE2LDEwMSwxMTUsMTE3LDIwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDQwLDgsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDExNyw1LDAsMCwwLDEwMSwxMTAsMTE2LDExNCwxMjEsMTE3LDYsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsOCwwLDAsMCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjUyLDQsMCwwLDExNSwKLSAgICAyOCwwLDAsMCwwLDUsNiwxLDEzLDEsMjEsMSw2LDEsMTUsMSwKLSAgICAxMiwxLDE1LDEsMjQsMiwxNSwxLDYsMSwxMiwyLDEwLDUsMjAsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDEwMywxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMywwLDAsMCwKLSAgICAwLDAsMCwwLDUsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwKLSAgICAxMTUsOTcsMCwwLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDI0LAotICAgIDAsMTE2LDEsMCwxMDYsMiwwLDEyNSwyLDAsMTEwLDAsMCwxMjQsMCwwLAotICAgIDEwNiwzLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsOTIsMiwwLDEyNSwKLSAgICAzLDAsMTI1LDQsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjQsCi0gICAgMCwxMjQsMywwLDgzLDEyNCw0LDAsMTE0LDg5LDAsMTE2LDQsMCwxMjQsMSwKLSAgICAwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMywwLDEzMSwzLDAsODMsMTAwLDEsCi0gICAgMCw4MywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDk4LDAsMCwwLAotICAgIDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLAotICAgIDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsMTExLDExNCwzMiwzOSwKLSAgICAxMTIsOTcsMTE2LDEwNCwzOSwzMiw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNSwKLSAgICAxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMzIsOTcsMTEwLAotICAgIDEwMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDYsNzgsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKLSAgICA3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNSwwLDAsMCwxMTcsMywwLDAsMCwKLSAgICA5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMjMsNSwwLDAsMTE1LDE2LDAsMCwwLDAsNCwxMiwxLAotICAgIDEyLDEsMjQsMSwxMiwxLDQsMiw2LDMsMTksMiwxMTcsMjIsMCwwLAotICAgIDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MCwxMSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LAotICAgIDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsCi0gICAgMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxMSwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDExNywyMCwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LAotICAgIDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsCi0gICAgOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsCi0gICAgMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDIwNiw0LDAsCi0gICAgMCwxMTUsMTQsMCwwLDAsMTYsMiw2LDIsMTgsOCwxOCwxNywxOCwxNywKLSAgICAxOCwyNywzLDEsMTE3LDEwLDAsMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAzLDAsMCwwLDY2LDAsMCwwLDExNSwxMTAsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsOTAsNywKLSAgICAwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDgsMCwxMDAsOCwwLAotICAgIDEwMCw5LDAsMTMyLDAsMCw5MCw5LDAsMTAxLDEwLDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCwxMzEsMSwwLDkwLDExLDAsMTAwLDEyLDAsMTAwLDEzLAotICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLAotICAgIDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywKLSAgICAxNzIsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsCi0gICAgMTE0LDk3LDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwKLSAgICAzMiwzMiwzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LAotICAgIDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCwKLSAgICA5NywxMTAsMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsCi0gICAgMCw3LDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLAotICAgIDEyMCw1MiwwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwKLSAgICAxMjUsNCwwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLAotICAgIDEyNCwxLDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsCi0gICAgNiwwLDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwKLSAgICAwLDk1LDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsCi0gICAgMTAwLDUsMCw4Myw0MCw3LDAsMCwwLDExNywxNTQsMCwwLDAsNzMsMTEwLAotICAgIDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCi0gICAgMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LDk4LAotICAgIDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LDExMSwKLSAgICAxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICAzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSw5OSwKLSAgICAxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsMywwLDAsMCw1MSwwLDAsMCwxMTUsMjcsMCwKLSAgICAwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwKLSAgICAwLDEwMiwyLDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsNDAsMSwwLAotICAgIDAsMCw3OCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwKLSAgICAwLDAsNDYsNDgsMTE3LDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsCi0gICAgMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwKLSAgICAxMjAsMTEyLDExNCw2Miw1Niw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTE3LAotICAgIDM4LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2MiwKLSAgICA0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTE3LDEsMCwwLDAsNDYsCi0gICAgMTA1LDEsMCwwLDAsNzgsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw3LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNyw4LDAsMCwwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNyw3LDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNyw4LDAsMCwwLDExNSwxMTcsMTAyLDEwMiwKLSAgICAxMDUsMTIwLDEwMSwxMTUsNDAsMCwwLDAsMCw0MCwxLDAsMCwwLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw1MCw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMCw0LDYsMSwxOSwxLDM2LDEsOSwyLDE1LDEsOSwxLDEyLAotICAgIDEsMTE3LDE5LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLAotICAgIDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLAotICAgIDAsMCwwLDEwMCwzLDAsMTI0LDAsMCw5NSwwLDAsMTAwLDIsMCw4MywKLSAgICA0MCw0LDAsMCwwLDExNywzMSwwLDAsMCw3MywxMTAsMTE4LDk3LDEwOCwxMDUsCi0gICAgMTAwLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsCi0gICAgMTE0LDEyMSwzMiwxMDksMTE2LDEwNSwxMDksMTAxLDQ2LDEwNSwxLDAsMCwwLDc4LDEwNSwKLSAgICAyNTUsMjU1LDI1NSwyNTUsNDAsMSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSw0MCwxLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywKLSAgICAxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDY0LDUsMCwwLDExNSwyLDAsCi0gICAgMCwwLDAsMiwxMTcsMjgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LAotICAgIDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwxMiwwLAotICAgIDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsMjE2LDEsMCwwLDEwMCwKLSAgICA4LDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwKLSAgICAwLDEwMCwyLDAsMjUsMTI1LDMsMCwxMjEsMjUsMCwxMTYsMiwwLDEwNiwzLAotICAgIDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMTA2LDUsMCwxMjUsNCwwLAotICAgIDg3LDExMCwyNCwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsNzYsMCwxLDEsCi0gICAgMSwxMDAsOSwwLDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMjQsNCwwLDEyNCwKLSAgICAwLDAsMTA2LDcsMCwxMDcsMywwLDExNCwxMTQsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTMxLDAsMCwxLDEyNCw0LDAsMTI0LDAsMCw5NSw3LDAsMTEwLDAsCi0gICAgMCwxMTYsOSwwLDEzMSwwLDAsMTE0LDE0NywwLDEyNCwwLDAsMTA2LDEwLDAsCi0gICAgMTI1LDUsMCwxMjQsMywwLDEwNiwxMSwwLDEzMSwwLDAsMTI1LDYsMCwxMTAsCi0gICAgMTUsMCwxMjQsMCwwLDEwNiwxMiwwLDEyNSw1LDAsMTI0LDMsMCwxMjUsNiwKLSAgICAwLDEyNCw2LDAsMTI0LDUsMCwxMDcsNiwwLDExNCw0NSwxLDExNiwxMywwLAotICAgIDEyNCwwLDAsMTA2LDQsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDcsMCwxMTYsCi0gICAgMTQsMCwxMjQsNywwLDEzMSwxLDAsMTE0LDQ1LDEsMTIwLDkxLDAsMTI0LDAsCi0gICAgMCwxMDYsMTUsMCw2OCw5Myw3MSwwLDkyLDIsMCwxMjUsOCwwLDEyNSw5LAotICAgIDAsMTAwLDQsMCwxMjQsOCwwLDIzLDEyNSwxMCwwLDExNiwxMywwLDEyNCw3LAotICAgIDAsMTI0LDEwLDAsMTMxLDIsMCwxMjUsMTEsMCwxMTYsMTYsMCwxMjQsMTEsMCwKLSAgICAxMzEsMSwwLDExNCwyMTQsMCwxMjQsOSwwLDEyNCwxLDAsMTI0LDExLDAsMTMxLAotICAgIDIsMCwxMjQsNywwLDEwMywxLDAsMTAyLDIsMCw4MywxMTMsMjE0LDAsODcsCi0gICAgMTAwLDEwLDAsMTI1LDIsMCwxMTMsNDUsMSwxMTAsMCwwLDEyMCwxMjAsMCwxMjQsCi0gICAgMCwwLDEwNiwxNSwwLDY4LDkzLDEwOSwwLDkyLDIsMCwxMjUsOCwwLDEyNSwKLSAgICA5LDAsMTE2LDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTI0LDgsCi0gICAgMCwyMywxMzEsMiwwLDEyNSwxMSwwLDExNiwxOCwwLDEwMCw1LDAsMTA2LDE5LAotICAgIDAsMTI0LDExLDAsMTMxLDEsMCwxMDAsNiwwLDEwMCwyLDAsMTMxLDEsMSwKLSAgICAxLDEyNCw2LDAsMTI0LDgsMCwyMywxMjQsNSwwLDEwNyw2LDAsMTE0LDU1LAotICAgIDEsMTE2LDE2LDAsMTI0LDExLDAsMTMxLDEsMCwxMTQsMTY0LDEsMTI0LDksMCwKLSAgICAxMjQsMSwwLDEyNCwxMSwwLDEzMSwyLDAsMTAzLDAsMCwxMDIsMiwwLDgzLAotICAgIDExMyw1NSwxLDExMyw1NSwxLDg3LDEyNCwyLDAsMTE0LDIwNiwxLDExNiwxOCwwLAotICAgIDEwMCw3LDAsMTA2LDE5LDAsMTI0LDcsMCwxMzEsMSwwLDEzMSwxLDAsMSwKLSAgICAxMDAsMTEsMCwxMjQsNywwLDEwMywxLDAsMTAyLDIsMCw4MywxMDAsMTEsMCwKLSAgICAxMDMsMCwwLDEwMiwyLDAsODMsNDAsMTIsMCwwLDAsMTE3LDEyNSwwLDAsCi0gICAgMCw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwKKyAgICAwLDAsMCwxMTUsMTYsMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDEwNiwwLAorICAgIDAsMTMxLDAsMCwxMDcsNiwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsNjMsMSwKKyAgICAwLDAsNDEsMiwxMTQsNzEsMCwwLDAsMjE4LDQsMTA1LDExNiwxMDEsMTA5LDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiwKKyAgICA5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSwyMDEsNiwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LAorICAgIDExMCwxMTUsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsCisgICAgMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDI1MiwwLDAsMCwxMTQsMjIzLDAsMCwKKyAgICAwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCw2NywxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjIzLDAsMCwKKyAgICAwLDIwNCw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIxLDk1LDc4LAorICAgIDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NywxMTIsMTEyLAorICAgIDEwMSwxMTAsMTAwLDc4LDQxLDEzLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsCisgICAgMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwwLDAsMTE0LAorICAgIDYyLDEsMCwwLDExNCw1NywxLDAsMCwxMTQsNjMsMSwwLDAsMTE0LDY1LAorICAgIDEsMCwwLDExNCw2NiwxLDAsMCwxMTQsMTAxLDAsMCwwLDExNCw2OCwxLAorICAgIDAsMCwxMTQsMjIzLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw1NiwxLDAsMCwKKyAgICAxNTIsNiwwLDAsMTE1LDIwLDAsMCwwLDEyLDUsNiwyLDEyLDYsMTIsCisgICAgMTAsMTIsNCwxMiwxMywxMiwzLDEyLDMsMTIsMywxMiwzLDExNCw1NiwxLAorICAgIDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDY0LDAsMCwwLDExNSw5NCwwLDAsMCwxMDEsMCwwLDkwLAorICAgIDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsCisgICAgMCw5MCwzLDAsMTAxLDQsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCwKKyAgICAxMzEsMSwwLDkwLDUsMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCw5MCwKKyAgICA2LDAsMTAwLDcsMCwxMDAsOCwwLDEzMiwwLDAsOTAsNywwLDEwMCw5LAorICAgIDAsMTAwLDEwLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDExLDAsMTAwLDEyLDAsCisgICAgMTMyLDAsMCw5MCw5LDAsMTAwLDEzLDAsODMsNDEsMTQsMTE0LDI1MCwwLDAsCisgICAgMCw5OSw0LDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw0LDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSwyNSwwLDAsMCwxMTYsMCwwLDEyNCwxLAorICAgIDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMTI0LDAsMCw5NSwxLDAsCisgICAgMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDU2LDEsMCwwLDExNCwyNTIsCisgICAgMCwwLDAsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCwxMTQsNjAsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDIxMCw2LDAsCisgICAgMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDI1LDk1LDc4LDk3LDEwOSwxMDEsMTE1LAorICAgIDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLAorICAgIDEwNiwwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwKKyAgICAxMjIsMjUsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsCisgICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDEsNjIsNDEsMiwxMTQsNDcsMCwKKyAgICAwLDAsMTE0LDU3LDAsMCwwLDQxLDIsMTE0LDI0NSwwLDAsMCwxMTQsMTc5LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwyMDUsMCwwLDAsMjE0LDYsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMiwxMjIsMjgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LAorICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLAorICAgIDc4LDg0LDExNCw0LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIxOSwwLDAsMCwyMTgsNiwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsMiw3OCwKKyAgICAxMTQsMzAsMCwwLDAsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwxMTQsMTMsMSwwLDAsMjIxLDYsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LAorICAgIDk5LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw2LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwxMTYsMCwwLDEwMCwKKyAgICAxLDAsMTAwLDIsMCwxMDAsMywwLDEwMCw0LDAsMTAwLDUsMCwxMzEsMywKKyAgICAxLDgzLDQxLDYsNzgsMTE0LDMwLDAsMCwwLDEyMiw4LDYwLDExNSwxMTYsMTE0LAorICAgIDEwNSwxMTAsMTAzLDYyLDExNCwxNzUsMCwwLDAsMTE0LDM4LDEsMCwwLDg0LDQxLAorICAgIDEsMTE0LDM5LDEsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTgsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDEyLDEsMCwwLDIyNCw2LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDEsMTIyLDI1LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDI5LDAsMCwwLDExNiwwLDAsMTAwLDEsMCwxMjQsMCwwLDEwNiwKKyAgICAxLDAsMTMxLDIsMCwxLDExNiwyLDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwKKyAgICAyLDAsODMsNDEsMiwxMjIsMjQsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMTAsOTcsCisgICAgMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMjIsCisgICAgMzgsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMzIsMTIzLDMzLDExNCwxMjUsNDEsMywxMTQsMTUyLDAsMCwwLDExNCwyNTIsCisgICAgMCwwLDAsMTE0LDE4MCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsCisgICAgMTU4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwzLDEsMCwwLDIyOCw2LDAsMCwxMTUsNCwwLDAsCisgICAgMCwwLDIsMTYsMSwxMjIsMjgsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNzgsNDEsMTAsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwKKyAgICAxMTQsNTgsMCwwLDAsMTE0LDcyLDAsMCwwLDExNCw3LDEsMCwwLDExNCwKKyAgICAyMDUsMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsMTMsMSwwLDAsMTE0LDEyLAorICAgIDEsMCwwLDExNCwzLDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNTAsMCwwLAorICAgIDAsMjA5LDYsMCwwLDExNSwxMiwwLDAsMCwxMiwxLDEyLDQsMTgsNCwKKyAgICAxMiwzLDEyLDMsMTIsNCwxMTQsMjUwLDAsMCwwLDk5LDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsMCwwLDAsCisgICAgMTE1LDE2MCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsCisgICAgMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwKKyAgICAxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw0LDAsMTAwLDQsMCwxMDAsCisgICAgNSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw2LDAsMTAxLDQsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDEsNCwwLAorICAgIDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSwKKyAgICA0LDAsMTAwLDEwLDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDEsMCwxMzEsMSwKKyAgICAwLDkwLDksMCwxMDEsNCwwLDEwMCwxMCwwLDEwMCwxMCwwLDEwMCwxMywwLAorICAgIDEwMCwxNCwwLDEzMiwyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw0LDAsMTAwLAorICAgIDEwLDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDExLAorICAgIDAsMTAwLDEwLDAsODMsNDEsMTcsMjE4LDEwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwKKyAgICAxMDAsMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5NSwKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwKKyAgICAxMDEsMTE1LDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDU4LDAsMCwwLDEyMCw1MSwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMDYsMiwwLDEzMSwwLDAsNjgsOTMsMzQsMCwKKyAgICAxMjUsMSwwLDExNiwzLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LAorICAgIDE2LDAsMTI0LDEsMCwxMDYsNCwwLDEzMSwwLDAsMSwxMTMsMTYsMCwxMTMsCisgICAgMTYsMCw4NywxMDAsMiwwLDgzLDQxLDMsMTIyLDEyNSw2Nyw5NywxMDgsMTA4LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksCisgICAgOTcsOTksMTA0LDEwMSwxMTUsNDAsNDEsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTExLAorICAgIDExMCwzMiw5NywxMDgsMTA4LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsCisgICAgMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDExNSwxMTYsMTExLDExNCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDExNSwzMiw0MCwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCisgICAgMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDEsNDYsMjE4LDE3LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsCisgICAgMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNzgsNDEsNSwxMTQsNywKKyAgICAwLDAsMCwyMTgsMTksMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIxOCw2LDExOCw5NywxMDgsMTE3LDEwMSwxMTUsCisgICAgMTE0LDYwLDAsMCwwLDExNCw3MCwxLDAsMCw0MSwyLDExNCwyNDUsMCwwLAorICAgIDAsMjE4LDYsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcwLDEsMCwwLDI0MCw2LDAsCisgICAgMCwxMTUsNiwwLDAsMCwwLDQsMjIsMSwxNSwxLDEyMiwyOCw4MCw5NywKKyAgICAxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsCisgICAgOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMywwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgOTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwyLDAsCisgICAgMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwwLDAsCisgICAgMTIwLDU5LDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDQ0LDAsMTI1LDIsMCwKKyAgICAxMjEsMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTMxLDEsMCw4Myw4NywxMTMsMzgsCisgICAgMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwxLDEsMTE5LDM4LAorICAgIDAsODksMTEzLDM4LDAsODgsMTEzLDM4LDAsODcsMTAwLDIsMCw4MywxMDAsMiwKKyAgICAwLDgzLDQxLDMsMTIyLDExMyw4MywxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywKKyAgICAxMTcsMTAxLDExMCw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwKKyAgICAxMTEsMTE0LDMyLDk3LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLAorICAgIDM5LDExMiw5NywxMTYsMTA0LDM5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDczLDEwMiwzMiwzOSwxMDQsMTExLDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLAorICAgIDk3LDEwOCwxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLAorICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwyMywxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwKKyAgICA3OCw0MSw2LDExNCw3LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCisgICAgMTExLDExMSwxMDcsMTE1LDExNCwxNjYsMCwwLDAsMTE0LDE2NywwLDAsMCwxMTQsMTY4LAorICAgIDAsMCwwLDExNCwxNTMsMCwwLDAsNDEsMywxMTQsMjQ1LDAsMCwwLDExNCwKKyAgICAzNSwwLDAsMCw5MCw0LDEwNCwxMTEsMTExLDEwNywxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA0LDExMSwxMTEsMTA3LDExNSwyNDgsNiwwLDAsMTE1LDE2LDAsMCwwLDAsCisgICAgNyw5LDEsMTksMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwxMjIsCisgICAgMjIsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDk3LDAsMCwKKyAgICAwLDEyNCwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMzEsMCwwLDEyNSwxLDAsMTEwLDAsMCwxMjEsMTcsMCwxMTYsCisgICAgMiwwLDEwNiwzLDAsMTI0LDEsMCwyNSwxMjUsMiwwLDg3LDExMCw0NiwwLAorICAgIDQsMTE2LDQsMCwxMDcsMTAsMCwxMTQsOTIsMCwxLDEsMSwxMjQsMCwwLAorICAgIDEwNiw1LDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsMTI0LDIsMCwxMTYsCisgICAgMiwwLDEwNiwzLDAsMTI0LDEsMCw2MCw4OSwxMTAsMSwwLDg4LDEyNCwyLAorICAgIDAsODMsNDEsMiwxMjIsMjEwLDcxLDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwKKyAgICAxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE1LDEyMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLAorICAgIDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLAorICAgIDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKKyAgICA5Nyw5OSwxMDQsMTAxLDQ0LDMyLDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiw5NywKKyAgICAxMTIsMTEyLDExNCwxMTEsMTEyLDExNCwxMDUsOTcsMTE2LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5NywxMTAsMTAwLDMyLDk5LDk3LAorICAgIDk5LDEwNCwxMDEsMzIsMTA1LDExNiw0NiwzMiw3MywxMDIsMzIsMTEwLDExMSwzMiwxMDIsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDExOCw5NywxMDUsMTA4LDk3LDk4LDEwOCwKKyAgICAxMDEsNDQsMzIsMTE1LDExNiwxMTEsMTE0LDEwMSwzMiw3OCwxMTEsMTEwLDEwMSw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMzAsMCwwLDAsNDEsNiwxMTQsCisgICAgMywwLDAsMCwxMTQsNDUsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDcxLAorICAgIDEsMCwwLDExNCw3OSwwLDAsMCwxMTQsNzUsMSwwLDAsNDEsMywxMTQsCisgICAgMjQ1LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNzMsMSwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIwLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSw5LDcsMCwwLDExNSwxNiwwLDAsMCwwLDgsMTIsMSwKKyAgICAxNSwxLDMsMSwxNywxLDEzLDEsMTUsMSwxOCwxLDEyMiwzMSw4MCw5NywKKyAgICAxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDk5LDMsMCwKKyAgICAwLDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDExMywwLDAsMCwxMTYsMCwwLDEyNCwyLDAsMTAwLDEsMCwKKyAgICAxMzEsMiwwLDExNCwzOSwwLDEyNCwyLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsOTIsMiwwLDEyNSwzLDAsMTI1LDQsMCwxMTAsMjEsMCwxMjQsMiwKKyAgICAwLDEwNiwyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwzLDAsMTAwLDAsMCwKKyAgICAxMjUsNCwwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOSwwLDExNCw4NSwwLDExNiwKKyAgICAzLDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsODMsMTE2LDQsMCwxMjQsCisgICAgMSwwLDEwMCwwLDAsMTMxLDIsMCwxMjUsNSwwLDEyNCw0LDAsMTI0LDUsCisgICAgMCw5NSw1LDAsMTI0LDUsMCw4Myw0MSwyLDc4LDExNCwxNjUsMCwwLDAsCisgICAgNDEsNiwxMTQsNjAsMCwwLDAsMTE0LDE2NSwwLDAsMCwxMTQsMTEsMSwwLAorICAgIDAsMTE0LDE3MywwLDAsMCwxMTQsMjE2LDAsMCwwLDExNCwyMjAsMCwwLDAsCisgICAgNDEsNiwxMTQsMjQ1LDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDczLDEsMCwKKyAgICAwLDExNCwxNjksMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMTc3LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwKKyAgICAxNiw5NSwxMDgsMTAxLDEwMyw5Nyw5OSwxMjEsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsCisgICAgOTksMjYsNywwLDAsMTE1LDE4LDAsMCwwLDAsMiwxNSwxLDI0LDIsCisgICAgMTUsMSw2LDEsMTIsMSwxMywxLDE1LDEsOSwxLDEyMiwyNyw4MCw5NywKKyAgICAxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTA4LDEwMSwxMDMsOTcsOTksMTIxLAorICAgIDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDc4LDk5LDQsMCwwLDAsMCwKKyAgICAwLDAsMCw5LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDI1MiwwLDAsMCwxMDMsMCwwLDEyNSw0LDAsMTIwLDIzOSwwLDEyNCwyLDAsCisgICAgNjgsOTMsMjAzLDAsMTI1LDUsMCwxMTYsMCwwLDEyNCw1LDAsMTE2LDEsMCwKKyAgICAxMTYsMiwwLDEwMiwyLDAsMTMxLDIsMCwxMTUsNDYsMCwxMTMsMTMsMCwxMTAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsNSwwLDEzMSwxLDAsMTI1LDYsCisgICAgMCwxMjQsNiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTMsMCwxMTYsNCwwLAorICAgIDEyNCw2LDAsMTAwLDIsMCwxMzEsMiwwLDExNCwxMDksMCwxMjQsNiwwLDEwNiwKKyAgICA1LDAsMTI0LDEsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDcsMCwxMTAsMTgsCisgICAgMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDEsMCwxMjQsNiwwLDEzMSwyLDAsCisgICAgMTI1LDcsMCwxMjQsNywwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMTQ1LDAsMTEzLAorICAgIDEzLDAsMTEwLDAsMCwxMjQsNywwLDEwNiw3LDAsMTAwLDEsMCwxMDcsOSwKKyAgICAwLDExNCwxNjQsMCwxMjQsNywwLDgzLDEyNCw3LDAsMTA2LDgsMCwxMjUsOCwKKyAgICAwLDEyNCw4LDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyMDAsMCwxMTYsOSwwLAorICAgIDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDQsMCwxMDYsCisgICAgMTAsMCwxMjQsOCwwLDEzMSwxLDAsMSwxMTMsMTMsMCwxMTMsMTMsMCw4NywKKyAgICAxMTYsMTEsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMjUsNywwLDEyNCwKKyAgICA0LDAsMTI0LDcsMCw5NSw4LDAsMTI0LDcsMCw4MywxMDAsMSwwLDgzLAorICAgIDQxLDQsMTIyLDYzLDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsMzIsMTExLDExNCwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDcsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDQ2LDc4LDExNCwxMCwxLDAsMCwxMjIsMTksMTE1LDExMiwxMDEsOTksMzIsCisgICAgMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDEsMTIsCisgICAgMTE0LDE5MiwwLDAsMCwyMTgsMywxMTUsMTE2LDExNCwyMTgsNSw5OCwxMjEsMTE2LDEwMSwKKyAgICAxMTUsMTE0LDc2LDEsMCwwLDExNCw2MCwwLDAsMCwxMTQsMTAsMSwwLDAsCisgICAgMTE0LDc3LDEsMCwwLDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsCisgICAgMTUzLDAsMCwwLDExNCwxOTcsMCwwLDAsMTE0LDIxNiwwLDAsMCw0MSw5LAorICAgIDExNCwyNDUsMCwwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDksMSwwLDAsMjE4LDE0LDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDkwLDUsMTAxLDExMCwxMTYsMTE0LDEyMSwxMTQsNzMsMSwwLDAsCisgICAgMTE0LDE3NywwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw5LDk1LDEwMywxMDEsMTE2LDk1LAorICAgIDExNSwxMTIsMTAxLDk5LDM5LDcsMCwwLDExNSw0MCwwLDAsMCwwLDUsNiwKKyAgICAxLDEzLDEsMjEsMSw2LDEsMTUsMSwxMiwxLDE1LDEsMjEsMiwxOCwKKyAgICAxLDEyLDEsNiwxLDE1LDEsNCwxLDksMSwxMiwxLDE1LDUsMjAsCisgICAgMiwxNSwxLDksMSwxMjIsMjAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDk5LDQsMCwwLDAsCisgICAgMCwwLDAsMCw2LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE0MywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsCisgICAgMCwxMTYsMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsCisgICAgMTA2LDIsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMywwLDEyNSwKKyAgICA0LDAsMTI0LDQsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDYxLDAsMTAwLDEsCisgICAgMCw4MywxMjQsNCwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwxMzUsCisgICAgMCwxMjQsNCwwLDEwNiw0LDAsMTI1LDUsMCwxMjQsNSwwLDExNCwxMjgsMCwKKyAgICAxMDAsMiwwLDEyNCw0LDAsOTUsNSwwLDExNiw2LDAsMTI0LDEsMCwxMjQsCisgICAgNSwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMywwLDEyNCw0LDAsOTUsNCwKKyAgICAwLDEyNCw0LDAsODMsMTAwLDEsMCw4MywxMTAsNCwwLDEyNCw0LDAsODMsCisgICAgMTAwLDEsMCw4Myw0MSwzLDEyMiw5OCwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LAorICAgIDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw3OCw5MCw5LDExMCw5NywxMDksCisgICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDQxLDcsMTE0LDcsMCwwLDAsMTE0LDM1LDAsCisgICAgMCwwLDExNCw4MSwxLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLAorICAgIDAsMTE0LDIxNywwLDAsMCwxMTQsNTYsMSwwLDAsNDEsNiwxMTQsMjQ1LDAsCisgICAgMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw5LDEsMCwKKyAgICAwLDExNCwxNzcsMCwwLDAsMTE0LDgwLDEsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMCwxLDAsMCw3MSwKKyAgICA3LDAsMCwxMTUsMjYsMCwwLDAsMCw0LDEyLDEsMTIsMSwyMSwxLAorICAgIDEyLDEsNCwxLDE1LDEsOSwxLDYsMyw5LDEsMjQsMSw0LDIsCisgICAgNywyLDEyMiwyMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLAorICAgIDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLDAsCisgICAgMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsCisgICAgMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsCisgICAgMCwxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzNCwwLAorICAgIDEwMCwxLDAsODMsMTI0LDMsMCwxMDYsMSwwLDgzLDQxLDIsMTIyLDk4LDEwMiwKKyAgICAxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsCisgICAgMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDMyLDExMSwxMTQsMzIsMzksMTEyLAorICAgIDk3LDExNiwxMDQsMzksMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTUsMTIxLAorICAgIDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDk3LDExMCwxMDAsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLAorICAgIDQ2LDc4LDQxLDIsMTE0LDEwLDEsMCwwLDExNCwxNjksMCwwLDAsNDEsNCwKKyAgICAxMTQsMjQ1LDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAxNzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDExLDEsMCwwLDkzLDcsMCwwLDExNSw4LDAsMCwKKyAgICAwLDAsNSwxOCwxLDEyLDEsNCwxLDEyMiwyMiw4MCw5NywxMTYsMTA0LDcwLAorICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQxLDEyLDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsCisgICAgMCwwLDExNCw1OSwwLDAsMCwxMTQsNywxLDAsMCwxMTQsNzAsMSwwLAorICAgIDAsMTE0LDc1LDEsMCwwLDExNCw3NiwxLDAsMCwxMTQsNzcsMSwwLDAsCisgICAgMTE0LDgxLDEsMCwwLDExNCwxMCwxLDAsMCwxMTQsMTEsMSwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDY5LDEsMCwwLDIzNiw2LDAsMCwxMTUsMjIsMCwwLAorICAgIDAsMTIsMiw2LDIsMTgsOCwxOCwxNywxOCwxNywxOCwxMywzLDEsMTgsCisgICAgMzEsMywxLDIxLDIxLDMsMSwxMTQsNjksMSwwLDAsOTksMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCw2NCwwLDAsCisgICAgMCwxMTUsMTMzLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsCisgICAgMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwKKyAgICAwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsCisgICAgMTAxLDYsMCw5MCw3LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsCisgICAgOCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDksMCwxMDAsMTAsCisgICAgMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMSwwLDkwLDEwLDAsMTAwLDEzLDAsCisgICAgMTAwLDE0LDAsMTMyLDAsMCw5MCwxMSwwLDEwMSwxMiwwLDEwMCwxNSwwLDEwMCwKKyAgICAxNiwwLDEzMiwwLDAsMTMxLDEsMCw5MCwxMywwLDEwMCwxNywwLDEwMCwxOCwKKyAgICAwLDEzMiwwLDAsOTAsMTQsMCwxMDAsMTAsMCw4Myw0MSwxOSwyMTgsMTAsNzAsCisgICAgMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsMTcyLDcwLDEwNSwxMDgsMTAxLDQ1LAorICAgIDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDczLDExMCwxMTYsMTAxLDExNCw5Nyw5OSwxMTYsMTA1LDExMSwxMTAsMTE1LDMyLAorICAgIDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwKKyAgICAxMTUsMTE2LDEwMSwxMDksMzIsOTcsMTE0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiwKKyAgICAxMDIsMTExLDExNCwzMiwxMTIsMTAxLDExNCwxMDIsMTExLDExNCwxMDksOTcsMTEwLDk5LDEwMSw0NCwKKyAgICAzMiw5OCwxMDEsMTA1LDExMCwxMDMsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMDIsMTE0LDEwMSwKKyAgICAxMTUsMTA0LDEwMSwxMDAsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDUsCisgICAgMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLAorICAgIDEwMSwxMTQsMzIsMTA1LDExNSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTA1LDExMCwxMDMsMzIsMTA0LAorICAgIDk3LDExNSwzMiw5OCwxMDEsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEwNSwxMDEsMTAwLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICA1LDAsMCwwLDUsMCwwLDAsNywwLDAsMCwxMTUsMTIyLDAsMCwKKyAgICAwLDEwMywwLDAsMTI1LDMsMCwxMjAsNTIsMCwxMjQsMiwwLDY4LDkzLDQ0LAorICAgIDAsOTIsMiwwLDEzNywwLDAsMTI1LDQsMCwxMjQsMywwLDEwNiwwLDAsCisgICAgMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNCwKKyAgICA0LDAsNjgsMTMxLDEsMCwxMzEsMSwwLDEsMTEzLDEzLDAsODcsMTI0LDMsCisgICAgMCwxMjQsMCwwLDk1LDEsMCwxMjQsMSwwLDExMiw3OSwwLDEwMCwzLDAsCisgICAgMTI0LDAsMCw5NSwyLDAsMTAwLDYsMCwxMjQsMCwwLDk1LDMsMCwxMTYsCisgICAgNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw1LDAsMTE2LDQsMCwxMzEsMCwKKyAgICAwLDEyNCwwLDAsOTUsNiwwLDEwMCw1LDAsODMsNDEsNywxMjIsMTU0LDczLAorICAgIDExMCwxMDUsMTE2LDEwNSw5NywxMDgsMTA1LDEyMiwxMDEsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsMTE1LDEwMSw5NywxMTQsOTksCisgICAgMTA0LDMyLDExMSwxMTAsMzIsOTcsMTEwLDEwMCwzMiw5NywzMiwxMTgsOTcsMTE0LDEwNSw5NywKKyAgICA5OCwxMDgsMTAxLDMyLDExMCwxMTcsMTA5LDk4LDEwMSwxMTQsMzIsMTExLDEwMiwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw1MCw0NSwxMTYsMTE3LDExMiwxMDgsMTAxLDExNSwzMiw5OSwKKyAgICAxMTEsMTEwLDExNiw5NywxMDUsMTEwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDIsMTA1LDEwOCwKKyAgICAxMDEsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNCwxMDEsCisgICAgOTksMTExLDEwMywxMTAsMTA1LDEyMiwxMDEsMTE1LDQ2LDk5LDEsMCwwLDAsMCwwLAorICAgIDAsMCwyLDAsMCwwLDMsMCwwLDAsNTEsMCwwLDAsMTE1LDI3LAorICAgIDAsMCwwLDEyNCwwLDAsOTMsMTcsMCwxMjUsMSwwLDEyNCwxLDAsMTM2LAorICAgIDAsMCwxMDIsMiwwLDg2LDEsMTEzLDMsMCwxMDAsMCwwLDgzLDQxLDEsCisgICAgNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsMjIsMCwwLDAsMTE0LDUzLDEsCisgICAgMCwwLDQxLDEsMTE0LDE2OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsNzcsMCwwLDAsMTE5LDcsMCwwLDExNSwyLDAsMCwKKyAgICAwLDYsMCwxMjIsMzgsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKKyAgICA5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LAorICAgIDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTQsMTE2LDAsMCwwLAorICAgIDExNCwyOSwwLDAsMCw3OCwxMTQsMTM4LDAsMCwwLDQxLDcsMTE0LDE5NywwLAorICAgIDAsMCwyMTgsOCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsMzUsMCwwLAorICAgIDAsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDMsCisgICAgMTE1LDEwMSwxMTYsMjE4LDExLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCisgICAgMjE4LDE5LDk1LDExNCwxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDk5LDk3LDk5LDEwNCwxMDEsNDEsNSwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwKKyAgICAwLDIxOCwxNCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsCisgICAgMTE1LDkwLDcsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE0LDEyNywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCw0MSwxLDExNCwxNjksMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDcyLDAsMCwwLDExMyw3LDAsMCwxMTUsMTYsMCwwLDAsMCw0LAorICAgIDYsMSwxOSwxLDM2LDEsOSwyLDE1LDEsOSwxLDEyLDEsMTIyLDE5LAorICAgIDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsCisgICAgMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAorICAgIDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEwMCwzLDAsCisgICAgMTI0LDAsMCw5NSwwLDAsMTAwLDIsMCw4Myw0MSw0LDEyMiwzMSw3MywxMTAsCisgICAgMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsCisgICAgMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMDksMTE2LDEwNSwxMDksMTAxLDQ2LDExNCwyOSwwLAorICAgIDAsMCw3OCwxMTQsMTM4LDAsMCwwLDQxLDEsMTE0LDg0LDEsMCwwLDQxLAorICAgIDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw3MCwxLDAsMCwxMjcsNywwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwyLDEyMiwyOCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsCisgICAgMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksCisgICAgMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCisgICAgMywwLDAsMCw2NywwLDAsMCwxMTUsNTksMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTAwLAorICAgIDEsMCwxMDcsOCwwLDExNCwzNywwLDEwMCwxLDAsMTAzLDAsMCwxMDIsMiwKKyAgICAwLDgzLDEyNCwyLDAsMTA2LDEsMCwxMjQsMiwwLDEwNiwyLDAsMTEyLDU1LAorICAgIDAsMTAzLDAsMCwxMDIsMiwwLDgzLDQxLDIsMTIyLDEyNSw4NCwxMTQsMTIxLDMyLAorICAgIDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsCisgICAgMTAxLDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsCisgICAgMTA1LDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLAorICAgIDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3OCw0MSwzLDExNCwxMCwxLDAsCisgICAgMCwxMTQsMTY5LDAsMCwwLDExNCwyMjAsMCwwLDAsNDEsMywxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDE1OCwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNjUsMCwwLDAsCisgICAgMTMzLDcsMCwwLDExNSw4LDAsMCwwLDAsMywxNSwxLDEyLDEsMTAsCisgICAgMSwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LAorICAgIDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSw2LDAsMCwwLDAsMCwKKyAgICAwLDAsOCwwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsOTcsCisgICAgMCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsCisgICAgNiwwLDEyMSwxMywwLDEyNCw2LDAsMTA2LDAsMCwxMjUsNywwLDg3LDExMCwKKyAgICA0MywwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNzMsMCwxLDEsMSwxMTYsCisgICAgMiwwLDEyNCwyLDAsMTI0LDMsMCwxMDAsMSwwLDEyNCw2LDAsMTAwLDIsCisgICAgMCwxMjQsNCwwLDEzMSwyLDIsODMsODksMTEwLDIwLDAsODgsMTI0LDcsMCwKKyAgICAxMjQsMiwwLDEyNCwzLDAsMTI0LDQsMCwxMjQsNSwwLDEzMSw0LDAsODMsCisgICAgMTAwLDAsMCw4Myw0MSwzLDc4LDExNCwxNjksMCwwLDAsMTE0LDIyMCwwLDAsCisgICAgMCw0MSwzLDExNCw4MSwxLDAsMCwxMTQsMjA5LDAsMCwwLDExNCwyMzUsMCwKKyAgICAwLDAsNDEsOCwxMTQsNzEsMCwwLDAsMTE0LDIzOSwwLDAsMCwxMTQsMTU4LAorICAgIDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjIwLDAsMCwwLDExNCw5LDEsCisgICAgMCwwLDExNCwxNjksMCwwLDAsOTAsOCwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSwKKyAgICA5OSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsODEsMSwwLDAsMTQxLDcsMCwwLDExNSwxNCwwLDAsMCwwLDEsCisgICAgMTUsMSwzLDEsMTMsMSwxMywxLDE4LDEsMTIsMiwxMjIsMjAsNzAsMTA1LAorICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTEyLAorICAgIDEwMSw5OSw3OCw5OSwzLDAsMCwwLDAsMCwwLDAsMTQsMCwwLDAsCisgICAgMTUsMCwwLDAsNjcsMCwwLDAsMTE1LDI0MCwxLDAsMCwxMDAsMSwwLAorICAgIDEyNSwzLDAsMTI0LDEsMCwxMDYsMCwwLDEwMCwyLDAsMTMxLDEsMCwxMDAsCisgICAgMywwLDI1LDEyNSw0LDAsMTIxLDM0LDAsMTE2LDEsMCwxMjQsMCwwLDEwNiwKKyAgICAyLDAsMTEyLDQ5LDAsMTE2LDMsMCwxMDYsNCwwLDEzMSwwLDAsMTMxLDEsCisgICAgMCwxMDYsNSwwLDEyNSw1LDAsODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywKKyAgICAxMCwwLDExNCw4NSwwLDEsMSwxLDEwMCwxMCwwLDEyNSw1LDAsODksMTEwLAorICAgIDEsMCw4OCwxMjQsNSwwLDEyNCwwLDAsMTA2LDcsMCwxMDcsMywwLDExNCwKKyAgICAxMjMsMCwxMjQsMCwwLDEwNiw4LDAsMTMxLDAsMCwxLDEyNCw1LDAsMTI0LAorICAgIDAsMCw5NSw3LDAsMTEwLDAsMCwxMTYsOSwwLDEzMSwwLDAsMTE0LDE1NiwKKyAgICAwLDEyNCwwLDAsMTA2LDEwLDAsMTI1LDYsMCwxMjQsNCwwLDEwNiwxMSwwLAorICAgIDEzMSwwLDAsMTI1LDcsMCwxMTAsMTUsMCwxMjQsMCwwLDEwNiwxMiwwLDEyNSwKKyAgICA2LDAsMTI0LDQsMCwxMjUsNywwLDEyNCw3LDAsMTI0LDYsMCwxMDcsNiwKKyAgICAwLDExNCw1MSwxLDExNiwxMywwLDEyNCwwLDAsMTA2LDIsMCwxMjQsNCwwLAorICAgIDEzMSwyLDAsMTI1LDgsMCwxMjAsMTAzLDAsMTI0LDAsMCwxMDYsMTQsMCw2OCwKKyAgICA5Myw3NywwLDkyLDIsMCwxMjUsOSwwLDEyNSwxMCwwLDEwMCw1LDAsMTI0LAorICAgIDksMCwyMywxMjUsMTEsMCwxMTYsMTMsMCwxMjQsOCwwLDEyNCwxMSwwLDEzMSwKKyAgICAyLDAsMTI1LDEyLDAsMTE2LDE1LDAsMTI0LDEyLDAsMTMxLDEsMCwxMTQsMjExLAorICAgIDAsMTI0LDAsMCwxMDYsMTYsMCwxMjQsMTAsMCwxMjQsMSwwLDEyNCwxMiwwLAorICAgIDEyNCw4LDAsMTAzLDEsMCwxMjQsMiwwLDEzMSw1LDAsODMsMTEzLDIxMSwwLAorICAgIDg3LDExNiwxNywwLDEyNCw4LDAsMTMxLDEsMCwxMjUsMywwLDExMCwwLDAsCisgICAgMTIwLDEyNiwwLDEyNCwwLDAsMTA2LDE0LDAsNjgsOTMsMTE1LDAsOTIsMiwwLAorICAgIDEyNSw5LDAsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwKKyAgICA0LDAsMTI0LDksMCwyMywxMzEsMiwwLDEyNSwxMiwwLDExNiwxOCwwLDEwMCwKKyAgICA2LDAsMTA2LDE5LDAsMTI0LDEyLDAsMTMxLDEsMCwxMDAsNywwLDEwMCwzLAorICAgIDAsMTMxLDEsMSwxLDEyNCw3LDAsMTI0LDksMCwyMywxMjQsNiwwLDEwNywKKyAgICA2LDAsMTE0LDYxLDEsMTE2LDE1LDAsMTI0LDEyLDAsMTMxLDEsMCwxMTQsMTc2LAorICAgIDEsMTI0LDAsMCwxMDYsMTYsMCwxMjQsMTAsMCwxMjQsMSwwLDEyNCwxMiwwLAorICAgIDEwMCw4LDAsMTI0LDIsMCwxMzEsNSwwLDgzLDExMyw2MSwxLDExMyw2MSwxLAorICAgIDg3LDEyNCwzLDAsMTE0LDIzNiwxLDExNiwxOCwwLDEwMCw5LDAsMTA2LDE5LDAsCisgICAgMTI0LDgsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMTYsMjAsMCwxMjQsMSwwLAorICAgIDEwMCw4LDAsMTMxLDIsMCwxMjUsMTMsMCwxMjQsOCwwLDEwMywxLDAsMTI0LAorICAgIDEzLDAsOTUsMjEsMCwxMjQsMTMsMCw4MywxMDAsOCwwLDgzLDQxLDExLDEyMiwKKyAgICAxMjUsODQsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsCiAgICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsCiAgICAgMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsCiAgICAgMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKICAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCiAgICAgMzIsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0NiwzMiw4MiwxMDEsMTE2LDExNywxMTQsCiAgICAgMTEwLDExNSwzMiw0MCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ0LDMyLDEwOCwxMDUsMTE1LDExNiwKLSAgICA0NSwxMTEsMTAyLDQ1LDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDEsNDYsMTE3LDEsCi0gICAgMCwwLDAsNDYsMTA1LDIsMCwwLDAsMTA1LDEsMCwwLDAsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNyw5LDAsMCwwLAotICAgIDExNiwxMTQsMTIxLDEwNSwxMTAsMTAzLDMyLDEyMywxMjUsMTE3LDksMCwwLDAsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDUsMTE2LDEyMSwxMTcsMjUsMCwwLDAsMTEyLDExMSwxMTUsMTE1LAotICAgIDEwNSw5OCwxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDEyMywxMjUsNzAsMTA1LDI1NSwyNTUsMjU1LDI1NSw4NCw3OCw0MCwyMSwwLAotICAgIDAsMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsMTAsMCwwLAotICAgIDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDMsMCwwLDAsCi0gICAgOTUsMTExLDExNSwxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwxMTcsNCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCwxMTcsOCwwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTYsMTA1LAotICAgIDEwOSwxMDEsMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywxMSwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMTE3LDE5LAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDUsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCwKLSAgICAxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICAxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDExNywKLSAgICAxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNywKLSAgICA4LDAsMCwwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDExNywxMiwwLDAsCi0gICAgMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwxMTcsNCwwLAotICAgIDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsCi0gICAgMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDYsMCwwLDAsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwKLSAgICAxMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNywxMiwwLDAsMCwxMDUsCi0gICAgMTE1LDk1LDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDExNywxMSwwLDAsMCwKLSAgICAxMTYsOTcsMTA1LDEwOCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsNSwwLDAsMCwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDExNyw1LDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsMTE3LAotICAgIDEyLDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMTE3LDksMCwwLDAsOTgsOTcsMTE1LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNiwKLSAgICAwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMTcsNiwwLDAsMCwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNywxMywwLDAsMCwxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw5LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCw5NSwKLSAgICAxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICA3MCw1LDAsMCwxMTUsNjYsMCwwLDAsMCwzLDYsMSwxOSwxLDMsCi0gICAgMSwyNSwxLDEzLDEsMTEsMSwxNSwxLDEwLDEsMTIsMiw5LDEsOSwKLSAgICAxLDE1LDIsOSwxLDYsMiwxMiwxLDE4LDEsMTIsMSwyMiwxLDEwLAotICAgIDEsMTUsMSwxMiwxLDI2LDQsMTIsMiwyMiwxLDIyLDEsMjUsMSwxNiwKLSAgICAxLDEyLDEsMjYsMSw2LDEsMTksMSwxMywxLDExNywyMiwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCw5LAotICAgIDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSw4LDEsMCwwLAotICAgIDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLDEyMSwxOSwwLDExNiwxLDAsMTA2LAotICAgIDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsMzMsMCw0LAotICAgIDExNiwzLDAsMTE2LDQsMCwxMTYsNSwwLDEwMiwzLDAsMTA3LDEwLDAsMTE0LAotICAgIDYzLDAsMSwxLDEsMTAzLDAsMCwxMjUsMiwwLDg5LDExMCwxLDAsODgsCi0gICAgMTE2LDYsMCwxMDYsNywwLDEwNiw4LDAsMTAwLDEsMCwxMzEsMSwwLDExNSwKLSAgICAxMDAsMCwxMTYsOSwwLDEyNCwyLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDEwLAotICAgIDAsMTEwLDExMSwwLDExNiw5LDAsMTMxLDAsMCwxMjUsMywwLDEyMCw5MCwwLAotICAgIDEyNCwyLDAsNjgsOTMsODIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LDExLDAsCi0gICAgMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwxMjUsNSwwLDEyNSw2LDAsMTI1LAotICAgIDcsMCwxMjQsNiwwLDExNCwxNzksMCwxMDAsMywwLDEwNiwxMiwwLDEyNCw1LAotICAgIDAsMTI0LDcsMCwxMDYsMTMsMCwxMzEsMCwwLDEzMSwyLDAsMTI1LDgsMCwKLSAgICAxMTAsNiwwLDEyNCw1LDAsMTI1LDgsMCwxMjQsMywwLDEwNiwxNCwwLDEyNCwKLSAgICA4LDAsMTMxLDEsMCwxLDExMywxMTYsMCw4NywxMjQsMywwLDEyNCwwLDAsCi0gICAgOTUsMTAsMCwxMTYsNiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTUsMCwxMzEsCi0gICAgMSwwLDExNCw0LDEsMTE2LDksMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsCi0gICAgMCwxMjQsMiwwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDE2LAotICAgIDAsMTEwLDAsMCwxMDAsNiwwLDgzLDQwLDcsMCwwLDAsMTE3LDY4LDAsCi0gICAgMCwwLDcwLDEwNSwxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMzIsMTExLDEwMiwzMiwxMTIsMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMCwxMDUsMTE0LDEwMSwKLSAgICA5OSwxMTYsMTExLDExNCwxMjEsNDYsMTE3LDMsMCwwLDAsMTE5LDEwNSwxMTAsMTE3LDEsCi0gICAgMCwwLDAsNDYsMTE3LDUsMCwwLDAsMTIzLDEyNSw0NiwxMjMsMTI1LDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsMTE1LAotICAgIDAsMCwwLDExNSwyNywwLDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsCi0gICAgMCwxMjQsMSwwLDEwNiwwLDAsMTMxLDAsMCw4NiwxLDExMywzLDAsMTAwLAotICAgIDAsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDUsCi0gICAgMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCw0MCwyLDAsMCwwLDExNywyLDAsCi0gICAgMCwwLDQ2LDQ4LDExNywyLDAsMCwwLDEwMiwxMTAsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwKLSAgICAxMDEsMTIwLDExMiwxMTQsNjIsMTQzLDUsMCwwLDExNSwyLDAsMCwwLDYsMCwKLSAgICAxMTcsNDEsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwKLSAgICA5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSw0Niw2MCwxMDgsMTExLDk5LAotICAgIDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDc4LDQwLAotICAgIDE3LDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywzLDAsCi0gICAgMCwwLDk1LDExMSwxMTUsMTE3LDcsMCwwLDAsMTA4LDEwNSwxMTUsMTE2LDEwMCwxMDUsCi0gICAgMTE0LDExNywxNywwLDAsMCw3MCwxMDUsMTA4LDEwMSw3OCwxMTEsMTE2LDcwLDExMSwxMTcsCi0gICAgMTEwLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE1LDAsMCwwLDgwLDEwMSwxMTQsMTA5LAotICAgIDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTgsMCwwLDAsCi0gICAgNzgsMTExLDExNiw2NSw2OCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw4LDAsMCwwLDExMiwKLSAgICAxMDgsOTcsMTE2LDEwMiwxMTEsMTE0LDEwOSwxMTcsMTAsMCwwLDAsMTE1LDExNiw5NywxMTQsCi0gICAgMTE2LDExNSwxMTksMTA1LDExNiwxMDQsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LDExLAotICAgIDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDksCi0gICAgMCwwLDAsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwKLSAgICAxMTQsMTE3LDMsMCwwLDAsOTcsMTAwLDEwMCwxMTcsMjcsMCwwLDAsOTUsNjcsCi0gICAgNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsODYsNjksOTUsCi0gICAgODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsMTE3LDE5LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsOTksMTExLDExMCwKLSAgICAxMTYsMTAxLDExMCwxMTYsMTE1LDExNywyMSwwLDAsMCwxMDgsMTExLDExOSwxMDEsMTE0LDk1LAotICAgIDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDk1LDk5LDExMSwxMTAsMTE2LDEwMSwxMTAsMTE2LDExNSwxMTcsCi0gICAgNCwwLDAsMCwxMDUsMTE2LDEwMSwxMDksMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDMsMCwwLDAsMTAwLDExMSwxMTYsMTE3LDYsMCwwLDAsMTE1LDExNywKLSAgICAxMDIsMTAyLDEwNSwxMjAsMTE3LDgsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwKLSAgICAwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE0LDUsMCwKLSAgICAwLDExNSwzNCwwLDAsMCwwLDIsOSwxLDMsMSwxOSwxLDIyLDMsCi0gICAgMTEsMywxOCwxLDE4LDcsOSwxLDEzLDEsMjQsMSw2LDEsMjcsMiwKLSAgICA2LDEsMTcsMSw5LDEsMTgsMSwxMTcsMjIsMCwwLDAsNzAsMTA1LDEwOCwKLSAgICAxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKLSAgICAzLDAsMCwwLDcsMCwwLDAsMTE1LDI1LDAsMCwwLDEzNSwwLDAsCi0gICAgMTM1LDEsMCwxMDIsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwKLSAgICAyLDAsMTI0LDIsMCw4Myw0MCwzLDAsMCwwLDExNywyMCwxLDAsMCwKLSAgICA2NSwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTksCi0gICAgMTA0LDEwNSw5OSwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDk5LAotICAgIDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTExLDExMCwKLSAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMDUsMTA4LAotICAgIDEwOCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywxMTAsMzIsMTA1LDExMCwxMTUsMTE2LAotICAgIDk3LDExMCw5OSwxMDEsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCi0gICAgMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAotICAgIDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCi0gICAgMTA0LDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsCi0gICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw0NCwzMiw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAotICAgIDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNDYsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEzMSwxLDAsMTE1LDMzLDAsMTE2LDEsMCwxMDAsMSwwLAotICAgIDEwMCwyLDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsCi0gICAgMCwwLDEyNCwwLDAsMTM2LDEsMCwxNDAsMSwwLDgzLDQwLDMsMCwwLAotICAgIDAsMTE3LDQ1LDAsMCwwLDgwLDk3LDExNiwxMDQsMzIsMTA0LDExMSwxMTEsMTA3LDMyLAotICAgIDEwMiwxMTEsMTE0LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsMTA5LDk3LAotICAgIDk5LDEwNCwxMDUsMTEwLDEwMSwxMTQsMTIxLDQ2LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsNDYsMTE3LDMwLDAsMCwwLDExMSwxMTAsMTA4LDEyMSwzMiwxMDAsMTA1LDExNCwKLSAgICAxMDEsOTksMTE2LDExMSwxMTQsMTA1LDEwMSwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTE3LDExMiwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwKLSAgICAyLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsCi0gICAgMTE1LDEwMCwxMDUsMTE0LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LAotICAgIDExNCwxMTQsMTExLDExNCw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsCi0gICAgMTQsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwxMDAsMTAxLDExNiw5NywxMDUsCi0gICAgMTA4LDExNSw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjQsMCwwLDAsMTEyLDk3LAorICAgIDQ1LDExMSwxMDIsNDUsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3MCwxMTQsCisgICAgMTE2LDAsMCwwLDExNCwxMTUsMCwwLDAsMTE0LDI5LDAsMCwwLDExNCw3MiwKKyAgICAwLDAsMCwxMjIsOSwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNCwxNDUsCisgICAgMCwwLDAsNzgsMTIyLDI1LDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMTAsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNCwKKyAgICAxMzgsMCwwLDAsNDEsMjIsMTE0LDMyLDAsMCwwLDExNCwzOSwwLDAsMCwKKyAgICAxMTQsMzUsMCwwLDAsMTE0LDMsMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCwKKyAgICA0OCwxLDAsMCwxMTQsNDAsMCwwLDAsMTE0LDg0LDEsMCwwLDIxOCwxMSwKKyAgICA5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTQsNiwwLDAsMCwKKyAgICAxMTQsODcsMSwwLDAsMTE0LDEzOSwwLDAsMCwxMTQsODYsMSwwLDAsMTE0LAorICAgIDI4LDAsMCwwLDExNCw4MywxLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDgxLAorICAgIDEsMCwwLDExNCw0NiwwLDAsMCwxMTQsMTUyLDAsMCwwLDExNCw0NywwLAorICAgIDAsMCwxMTQsMjE2LDAsMCwwLDExNCwyMjAsMCwwLDAsNDEsMTQsMTE0LDcxLAorICAgIDAsMCwwLDExNCwxNTgsMCwwLDAsMTE0LDksMSwwLDAsOTAsMTIsMTA1LAorICAgIDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5MCwxMSwxMTYsOTcsMTA1LAorICAgIDEwOCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMTgzLDAsMCwwLDkwLDUsOTksCisgICAgOTcsOTksMTA0LDEwMSw5MCwxMiw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDkwLDksOTgsOTcsMTE1LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsNTMsMSwKKyAgICAwLDAsMTE0LDIzOSwwLDAsMCw5MCwxMywxMDUsMTEwLDEwNSwxMTYsOTUsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDExMCw5NywxMDksMTAxLDkwLDksMTAyLDExNywxMDgsMTA4LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDExNCwxNzcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDEwLDEsMCwwLDE1MSw3LDAsMCwxMTUsNjgsCisgICAgMCwwLDAsMCwzLDYsMSwxOSwxLDMsMSwzNCwxLDEzLDEsMTEsCisgICAgMSwxNSwxLDEwLDEsMTIsMiw5LDEsOSwxLDE1LDIsOSwxLDYsCisgICAgMiwxMiwxLDE4LDEsMjIsMSwxMCwxLDE1LDEsMTIsMSwzMiw0LDE1LAorICAgIDIsMjIsMSwyMiwxLDI1LDEsMTYsMSwxMiwxLDMyLDEsNiwxLDE5LAorICAgIDEsMTUsMSwxMiwxLDQsMSwxMjIsMjAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKKyAgICAxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDksMCwwLDAsMTMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDE0LDEsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMSwwLAorICAgIDEyMSwzMSwwLDExNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDExMiwzMywwLDExNiwKKyAgICAxLDAsMTA2LDMsMCwxMzEsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsCisgICAgMzMsMCw0LDExNiw0LDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwzLDAsMTA3LAorICAgIDEwLDAsMTE0LDc1LDAsMSwxLDEsMTAzLDAsMCwxMjUsMiwwLDg5LDExMCwKKyAgICAxLDAsODgsMTE2LDcsMCwxMDYsOCwwLDEwNiw5LDAsMTAwLDEsMCwxMzEsCisgICAgMSwwLDExNSwxMTIsMCwxMTYsMTAsMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsCisgICAgMCw5NSwxMSwwLDExMCwxMTEsMCwxMTYsMTAsMCwxMzEsMCwwLDEyNSwzLDAsCisgICAgMTIwLDkwLDAsMTI0LDIsMCw2OCw5Myw4MiwwLDEyNSw0LDAsMTI0LDQsMCwKKyAgICAxMDYsMTIsMCwxMDAsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSw1LDAsMTI1LAorICAgIDYsMCwxMjUsNywwLDEyNCw2LDAsMTE0LDE5MSwwLDEwMCwzLDAsMTA2LDEzLAorICAgIDAsMTI0LDUsMCwxMjQsNywwLDEwNiwxNCwwLDEzMSwwLDAsMTMxLDIsMCwKKyAgICAxMjUsOCwwLDExMCw2LDAsMTI0LDUsMCwxMjUsOCwwLDEyNCwzLDAsMTA2LAorICAgIDE1LDAsMTI0LDgsMCwxMzEsMSwwLDEsMTEzLDEyOCwwLDg3LDEyNCwzLDAsCisgICAgMTI0LDAsMCw5NSwxMSwwLDExNiw3LDAsMTA2LDgsMCwxMDYsOSwwLDExNiwKKyAgICAxNiwwLDEzMSwxLDAsMTE0LDEwLDEsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAorICAgIDAsMTI0LDIsMCw2OCwxMzEsMSwwLDEyNCwwLDAsOTUsMTcsMCwxMTAsMCwKKyAgICAwLDEwMCw2LDAsODMsNDEsNywxMjIsNjgsNzAsMTA1LDEwOCwxMDgsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMTEsMTAyLDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsCisgICAgMTE2LDEwNSw5NywxMDgsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsCisgICAgMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LAorICAgIDEwNSwxMTUsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw0NiwxMTQsMCwwLAorICAgIDAsMCwxMTQsMTE2LDAsMCwwLDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDgzLAorICAgIDAsMCwwLDExNSwyOCwwLDAsMCwxMDQsMCwwLDEyNCwwLDAsOTMsMTgsCisgICAgMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDAsMCwxMzEsMCwwLDE0NiwyLDAsCisgICAgMTEzLDYsMCw4MywxMTQsNCwwLDAsMCw0MSwxLDExNCwxMzksMCwwLDAsCisgICAgNDEsMiwxMTQsMjIsMCwwLDAsOTAsMiwxMDIsMTEwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDI1MCw5LDYwLDExNSwxMDEsMTE2LAorICAgIDk5LDExMSwxMDksMTEyLDYyLDIyNSw3LDAsMCwxMTUsMiwwLDAsMCw5LDAsCisgICAgMTIyLDQxLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwKKyAgICAxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LAorICAgIDYyLDQ2LDYwLDExNSwxMDEsMTE2LDk5LDExMSwxMDksMTEyLDYyLDc4LDQxLDE4LDExNCwzNSwKKyAgICAwLDAsMCwxMTQsMywwLDAsMCw5MCw3LDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LAorICAgIDExNCwxMTQsNDUsMCwwLDAsMjE4LDE3LDcwLDEwNSwxMDgsMTAxLDc4LDExMSwxMTYsNzAsCisgICAgMTExLDExNywxMTAsMTAwLDY5LDExNCwxMTQsMTExLDExNCwyMTgsMTUsODAsMTAxLDExNCwxMDksMTA1LAorICAgIDExNSwxMTUsMTA1LDExMSwxMTAsNjksMTE0LDExNCwxMTEsMTE0LDIxOCwxOCw3OCwxMTEsMTE2LDY1LAorICAgIDY4LDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDcsCisgICAgMCwwLDAsMTE0LDgsMCwwLDAsMTE0LDksMCwwLDAsMTE0LDg1LDEsCisgICAgMCwwLDExNCw4NiwxLDAsMCwxMTQsMTIxLDAsMCwwLDExNCw0NywwLDAsCisgICAgMCwxMTQsMTM5LDAsMCwwLDIxOCwzLDk3LDEwMCwxMDAsMTE0LDEwLDAsMCwwLAorICAgIDExNCw4NywxLDAsMCw0MSw5LDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsOTAsOCw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsOTAsMjEsMTA4LDExMSwxMTksCisgICAgMTAxLDExNCw5NSwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLAorICAgIDExNiwxMTUsMTE0LDY3LDEsMCwwLDExNCw2NywwLDAsMCwxMTQsNjEsMSwwLAorICAgIDAsMTE0LDUzLDEsMCwwLDkwLDgsMTEwLDEwMSwxMTksOTUsMTEwLDk3LDEwOSwxMDEsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDg5LDEsMCwwLDE5Niw3LDAsMCwxMTUsMzQsMCwwLDAsMCwyLDksCisgICAgMSwzLDEsMzEsMSwyMiwzLDExLDMsMTgsMSwxOCw3LDksMSwxMywKKyAgICAxLDI0LDEsNiwxLDI3LDIsNiwxLDE3LDEsOSwxLDE4LDEsMTIyLAorICAgIDIyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsCisgICAgMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLAorICAgIDMsMCwwLDAsMywwLDAsMCw3LDAsMCwwLDExNSwyNSwwLDAsCisgICAgMCwxMzUsMCwwLDEzNSwxLDAsMTAyLDIsMCwxMDAsMSwwLDEwMCwyLDAsCisgICAgMTM0LDAsMCwxMjUsMiwwLDEyNCwyLDAsODMsNDEsMyw5NywyMCwxLDAsCisgICAgMCw2NSwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwKKyAgICAxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLAorICAgIDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDMyLDExNiwxMTEsMzIsMTE3LDExNSwxMDEsMzIsMTExLAorICAgIDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMDUsCisgICAgMTA4LDEwOCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw5NywxMTAsMzIsMTA1LDExMCwxMTUsCisgICAgMTE2LDk3LDExMCw5OSwxMDEsMzIsMTE3LDExNSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgMTE1LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksOTcsMTA4LDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsMTE3LDExNCwxMDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywKKyAgICAxMTYsMTA0LDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsCisgICAgOTcsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSw0NCwzMiw3MywxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKKyAgICAwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNDYsMCwwLDAsMTE2LAorICAgIDAsMCwxMjQsMCwwLDEzMSwxLDAsMTE1LDMzLDAsMTE2LDEsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwKKyAgICAxMzYsMCwwLDEyNCwwLDAsMTM2LDEsMCwxNDAsMSwwLDgzLDQxLDMsMTIyLAorICAgIDQ1LDgwLDk3LDExNiwxMDQsMzIsMTA0LDExMSwxMTEsMTA3LDMyLDEwMiwxMTEsMTE0LDMyLDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsMTA5LDk3LDk5LDEwNCwxMDUsMTEwLDEwMSwKKyAgICAxMTQsMTIxLDQ2LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTIyLDMwLAorICAgIDExMSwxMTAsMTA4LDEyMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTA1LDEwMSwxMTUsCisgICAgMzIsOTcsMTE0LDEwMSwzMiwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwxMTQsMzUsCisgICAgMCwwLDAsNDEsMiwxMTQsNDYsMCwwLDAsMTE0LDE1MywwLDAsMCw0MSwKKyAgICAxLDExNCwzNSwwLDAsMCw0MSwyLDExNCwyNDUsMCwwLDAsMTE0LDg4LDEsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNCwxMTIsOTcsCiAgICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsCi0gICAgNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxNTUsNSwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAyLDEyLDEsMjEsMSwxMTcsNTQsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsNDYsNjAsCi0gICAgMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLAotICAgIDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAotICAgIDQwLDAsMCwwLDAsNDAsMywwLDAsMCwxMTcsMywwLDAsMCw5OSwKLSAgICAxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDEwMCwxMDEsCi0gICAgMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCi0gICAgMTExLDExMSwxMDcsOTUsMTAyLDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsCi0gICAgMTAxLDExNCw0MCwwLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsOTksMTA4LDExNSwxMTcsMTQsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSwKLSAgICAxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDE0NSw1LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDEwLDIxLDYsMTE3LDIwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjcsMCwKLSAgICAwLDAsMTE1LDE0LDAsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMCwwLAotICAgIDEwMiwxLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MCwzNywxMTQsNDEsNDAsMSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwxLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLAotICAgIDExNCw5NSw5NSwxNjMsNSwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywxOSwKLSAgICAwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LAotICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MCwxMywwLDAsMCwxMTcsOCwwLDAsCi0gICAgMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywKLSAgICAxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAotICAgIDk1LDk1LDExNywxNywwLDAsMCwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDExNywxNywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDExNywxMSwKLSAgICAwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDksCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsNzAsMTA1LAotICAgIDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MSw1LDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTYsNyw2LDIsMTIsMTQsMTIsNCw2LDIsMTIsNDQsMTIsMzEsMTgsCi0gICAgMTgsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsNTAsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwKLSAgICAwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwKLSAgICAxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsCi0gICAgNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsODMsNDAsNywwLDAsCi0gICAgMCwxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksCi0gICAgMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywzNiwwLDAsMCw2NywxMTEsMTEwLAotICAgIDExNiwxMDEsMTIwLDExNiwzMiwxMDksOTcsMTEwLDk3LDEwMywxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LAotICAgIDQ2LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyNCwKLSAgICAwLDAsMCw2NSw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQwLDIsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwwLDk3LAotICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw5NSw5NSwxMDEsMTEwLDExNiwxMDEsCi0gICAgMTE0LDk1LDk1LDE3Myw1LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI4LAotICAgIDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsCi0gICAgMTEwLDExNiwxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LAotICAgIDQsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDEsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE0LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsCi0gICAgMCwwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNyw2MCwwLDAsCi0gICAgMCw4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNCwxMDEsMTAzLDk3LDExNCwxMDAsMTA4LAotICAgIDEwMSwxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTcsMTEwLDEyMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsCi0gICAgMTAwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LDc4LDQwLDIsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLDAsMCwKLSAgICAwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDQwLDQsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLAotICAgIDEwMSwxMjAsOTksOTUsMTE2LDEyMSwxMTIsMTAxLDExNyw5LDAsMCwwLDEwMSwxMjAsOTksCi0gICAgOTUsMTE4LDk3LDEwOCwxMTcsMTAxLDExNywxMywwLDAsMCwxMDEsMTIwLDk5LDk1LDExNiwKLSAgICAxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNyw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSwKLSAgICA5NSwxNzcsNSwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyNywwLDAsCi0gICAgMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsCi0gICAgMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQwLDYsMCwKLSAgICAwLDAsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDEwLDAsMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwKLSAgICAwLDAsMCw5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgNywwLDAsMCw5NSw5NSwxMDAsMTExLDk5LDk1LDk1LDExNyw5LDAsMCwwLAotICAgIDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsCi0gICAgMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTY5LDUsMCwKLSAgICAwLDExNSw2LDAsMCwwLDE2LDIsNiwyLDEyLDQsMTE3LDE4LDAsMCwKLSAgICAwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwKLSAgICAxMDEsMTIwLDExNiw5OSwzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSw5MSwwLDAsMCwxMjQsMSwwLAotICAgIDEwNiwwLDAsMTAwLDEsMCwxMjQsMiwwLDEwMCwyLDAsMjQsMTMxLDIsMCwKLSAgICAxMjUsMywwLDExNiwxLDAsMTI0LDMsMCwxMzEsMSwwLDEyNCwyLDAsMTA3LAotICAgIDAsMCwxMTQsNTUsMCwxMTYsMiwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwKLSAgICAwLDExMCwwLDAsMTI0LDMsMCwxMDAsNCwwLDI1LDEyNSw0LDAsMTI0LDAsCi0gICAgMCwxMTQsODcsMCwxMDAsNSwwLDEwNiwzLDAsMTI0LDQsMCwxMjQsMCwwLAotICAgIDEzMSwyLDAsODMsMTI0LDQsMCw4Myw0MCw2LDAsMCwwLDExNyw1MCwwLAotICAgIDAsMCw4MiwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywKLSAgICAxMTYsMTA1LDExOCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsCi0gICAgMzIsMTE2LDExMSwzMiw5NywxMTAsMzIsOTcsOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsCi0gICAgMTExLDExMCwxMDEsNDYsMTE3LDEsMCwwLDAsNDYsMTA1LDEsMCwwLDAsMTE3LAotICAgIDUwLDAsMCwwLDk3LDExNiwxMTYsMTAxLDEwOSwxMTIsMTE2LDEwMSwxMDAsMzIsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk4LDEwMSwKLSAgICAxMjEsMTExLDExMCwxMDAsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTA1LDAsMCwwLDAsMTE3LDUsMCwwLDAsCi0gICAgMTIzLDEyNSw0NiwxMjMsMTI1LDQwLDQsMCwwLDAsMTE3LDYsMCwwLDAsMTE0LAotICAgIDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDEwLDAsCi0gICAgMCwwLDg2LDk3LDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDUsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDQsMCwwLDAsCi0gICAgOTgsMTA1LDExNiwxMTUsMTE3LDQsMCwwLDAsOTgsOTcsMTE1LDEwMSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMywwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTgyLDUsMCwwLDExNSwKLSAgICAxMCwwLDAsMCwwLDIsMjIsMSwxOCwxLDE1LDEsMTAsMSwxMTcsMTMsCi0gICAgMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywxMDksMTAxLAotICAgIDk5LDIsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDExLDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwxMzgsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLAotICAgIDExNSwyOCwwLDExNiwyLDAsMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLAotICAgIDIsMCwxLDExMCwwLDAsMTIwLDEwMywwLDExNiwwLDAsMTA2LDEsMCw2OCwKLSAgICA5Myw4OCwwLDEyNSwyLDAsMTE2LDUsMCwxMzEsMCwwLDE0MywyMywwLDEsCi0gICAgMTI0LDIsMCwxMDYsNiwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwKLSAgICAzLDAsODcsMTAwLDIsMCw4MSw4OCwxMjQsMywwLDEwMCwyLDAsMTA3LDksCi0gICAgMCwxMTQsMzgsMCwxMjQsMCwwLDExNiwwLDAsMTA2LDgsMCwxMDcsNywwLAotICAgIDExNCwxMDksMCwxMjQsMywwLDgzLDExNiwwLDAsMTA2LDgsMCwxMjQsMCwwLAotICAgIDI1LDEwNiw5LDAsODMsMTEzLDM4LDAsMTEzLDM4LDAsODcsMTAwLDIsMCw4MywKLSAgICAxMDAsMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDIzLDAsMCwwLDcwLDEwNSwKLSAgICAxMTAsMTAwLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDExNywyMiwwLDAsMCwxMTUsMTIxLDExNSw0NiwxMDksMTAxLAotICAgIDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsCi0gICAgNzgsNDAsMTAsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDksCi0gICAgMCwwLDAsMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDksMCwwLAotICAgIDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw0LDAsMCwwLDExOSwKLSAgICA5NywxMTQsMTEwLDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDg3LDk3LAotICAgIDExNCwxMTAsMTA1LDExMCwxMDMsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxMTcsMTEsMCwwLAotICAgIDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwKLSAgICA0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LAotICAgIDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsMTAyLAotICAgIDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5MSw1LDAsMCwxMTUsMjAsCi0gICAgMCwwLDAsMCwyLDksMSwxOSwxLDE2LDEsMTAsMSwyNCwxLDEyLAotICAgIDIsMTUsMSw0LDIsMjEsMiwxMTcsMTIsMCwwLDAsOTUsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDMsMCwwLDAsMCwwLDAsCi0gICAgMCw0LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE5NCwwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTE2LDEsMCwxMzEsMiwwLDExNSw0NSwKLSAgICAwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDExNiw0LDAsMTI0LDAsMCwKLSAgICAxMzEsMSwwLDEzMSwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAotICAgIDIsMCwxMDAsMiwwLDEwNywwLDAsMTE0LDcyLDAsMTE2LDUsMCwxMDAsMywKLSAgICAwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwxLDAsMTE0LDE1NiwwLAotICAgIDExNiwwLDAsMTI0LDEsMCwxMTYsMSwwLDEzMSwyLDAsMTE1LDEwOCwwLDExNiwKLSAgICAyLDAsMTAwLDQsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLDEyNCwxLAotICAgIDAsMTE2LDYsMCwxMDYsNywwLDEwNyw3LDAsMTE0LDE1NiwwLDEwMCw1LDAsCi0gICAgMTI1LDMsMCwxMTYsOCwwLDEyNCwzLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxMzAsMSwwLDExMywxNTYsMCwxMTAsMCwwLDEyNCwwLAotICAgIDAsMTIsMTE0LDE5MCwwLDEyNCwyLDAsMTAwLDIsMCwxMDcsMiwwLDExNCwxOTAsCi0gICAgMCwxMTYsNSwwLDEwMCw2LDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTAwLDcsMCw4Myw0MCw4LDAsMCwwLDExNywyOCwwLDAsMCw4NiwxMDEsCi0gICAgMTE0LDEwNSwxMDIsMTIxLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsCi0gICAgMTE0LDEwMSwzMiwzNCwxMTUsOTcsMTEwLDEwMSwzNCw0NiwxMTcsMzEsMCwwLDAsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLAotICAgIDk4LDEwMSwzMiwxMTUsMTE2LDExNCw0NCwzMiwxMTAsMTExLDExNiwzMiwxMjMsMTI1LDEwNSwwLAotICAgIDAsMCwwLDExNywxOCwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsCi0gICAgMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTE3LDMxLDAsMCwwLDk1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwxMTUsCi0gICAgMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDExNyw2MSwKLSAgICAwLDAsMCw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwKLSAgICA0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LAotICAgIDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMTcsMTcsMCwwLDAsNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQwLDksMCwwLDAsMTE3LDEwLDAsMCwKLSAgICAwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDMsMCwwLDAsCi0gICAgMTE1LDExNiwxMTQsMTE3LDksMCwwLDAsODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsCi0gICAgMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTE2LDEyMSwxMTIsMTAxLDExNywxMCwwLDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywxMSwwLDAsMCw4MywxMjEsMTE1LAotICAgIDExNiwxMDEsMTA5LDY5LDExNCwxMTQsMTExLDExNCw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNywzLDAsMCwKLSAgICAwLDEwOSwxMTUsMTAzLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksMTA0LDEwMSwKLSAgICA5OSwxMDcsMjA4LDUsMCwwLDExNSwyNCwwLDAsMCwwLDIsMTUsMSwzMCwKLSAgICAxLDEyLDEsMTUsMSw2LDEsMTUsMSwxNSwxLDE1LDEsNiwyLDI3LAotICAgIDEsMTksMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsMjAsMCwwLDAsNzgsMTExLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjMsMzMsMTE0LDEyNSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwyNywwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTIsMiwwLDAsMTAwLDAsMCwxMjUsMiwwLDEyNCwwLAotICAgIDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjUsMywKLSAgICAwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDIsMCwxMDYsMywwLAotICAgIDEwNyw3LDAsMTE0LDYyLDAsMTE2LDQsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLAotICAgIDIsMCwxLDExMCwwLDAsMTI0LDAsMCwxMTYsMiwwLDEwNiwzLDAsMTA3LAotICAgIDYsMCwxMTQsODgsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwyNSw4MywKLSAgICAxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDEyMSwxMywwLAotICAgIDEyNCw0LDAsMTA2LDUsMCwxMjUsMiwwLDg3LDExMywxNzgsMCw0LDExNiw2LAotICAgIDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsMSwxLDExNiw3LDAsMTAwLDMsMCwKLSAgICAyMywxMDYsOCwwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw1LDAsCi0gICAgMTE2LDksMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwKLSAgICAxLDAsODksMTEzLDE3OCwwLDg4LDExMCwwLDAsMTE2LDEwLDAsMTI0LDAsMCwKLSAgICAxMjQsMiwwLDEzMSwyLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwwLDAsMTA3LAotICAgIDgsMCwxMTQsMjUwLDAsMTE2LDksMCwxMTYsNywwLDEwNiw4LDAsMTI0LDAsCi0gICAgMCwxMzEsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEyNSw3LDAsCi0gICAgMTAwLDEwLDAsMTI0LDcsMCw5NSwxMiwwLDEyNCw3LDAsMTMwLDEsMCwxMTAsCi0gICAgNDcsMCwxMjQsMCwwLDExNiwyLDAsMTA2LDMsMCwxMDcsNywwLDExNCw0MSwKLSAgICAxLDEyNCw2LDAsMTA2LDEzLDAsMTI0LDAsMCwxMzEsMSwwLDEsMTE2LDE0LAotICAgIDAsMTAwLDUsMCwxMjQsMCwwLDEyNCw2LDAsMTMxLDMsMCwxLDExMCwwLAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMjUsMTI1LDgsMCwxMjQsMywKLSAgICAwLDExNCwxMDUsMSwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwyNSwxMjUsNCwKLSAgICAwLDExNiwxNSwwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwxLDAsCi0gICAgMTMxLDEsMCwxMDAsNiwwLDI1LDEyNCw4LDAsMTMxLDMsMCwxLDExMCwwLAotICAgIDAsMTE2LDE2LDAsMTI0LDgsMCwxMDAsNywwLDEwMCwwLDAsMTMxLDMsMCwKLSAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDIxMiwxLDEyMSw1OSwwLDEyNCw4LDAsMTA2LAotICAgIDE3LDAsMTI0LDgsMCw5NSwxOCwwLDExNiwxOSwwLDEyNCw4LDAsMTAwLDgsCi0gICAgMCwxMzEsMiwwLDExNSwxODcsMSwxMjQsOCwwLDEwNiwxOCwwLDEwNiwxLDAsCi0gICAgMTAwLDEsMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDgsMCw5NSwxOCwwLAotICAgIDExMCwwLDAsODcsMTEzLDIxMiwxLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMjA4LAotICAgIDEsMSwxLDEsODksMTEzLDIxMiwxLDg4LDExMCwwLDAsMTE2LDE5LDAsMTI0LAotICAgIDgsMCwxMDAsOSwwLDEzMSwyLDAsMTE1LDgsMiwxMjEsMTMsMCwxMjQsNiwKLSAgICAwLDEyNCw4LDAsOTUsMjAsMCw4NywxMTMsOCwyLDQsMTE2LDYsMCwxMDcsCi0gICAgMTAsMCwxMTQsNCwyLDEsMSwxLDg5LDExMyw4LDIsODgsMTEwLDAsMCwKLSAgICAxMjQsOCwwLDgzLDQwLDExLDAsMCwwLDc4LDExNywxLDAsMCwwLDQ2LAotICAgIDEwNSwwLDAsMCwwLDExNywyMSwwLDAsMCw1OSwzMiwxMjMsMTI1LDMyLDEwNSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywxOCwwLDAsMCwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwzMiwxMjMsMzMsMTE0LDEyNSwzMiwzNSwzMiwxMjMsMzMsMTE0LDEyNSwxMDUsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDg0LDQwLDIxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywKLSAgICAxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMywKLSAgICAwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNywxNCwwLAotICAgIDAsMCw2NSwxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw4LDAsMCwwLDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNyw2LDAsCi0gICAgMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LAotICAgIDExNywxMDEsMTE3LDEwLDAsMCwwLDk1LDExMCwxMTEsMTE2LDk1LDEwMiwxMTEsMTE3LDExMCwKLSAgICAxMDAsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksCi0gICAgMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiw5NywxMTYsCi0gICAgMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLAotICAgIDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsOTUsNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDExNywxMywwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywzLDAsMCwwLDEwOSwxMTUsMTAzLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDMsMCwwLDAsMTAxLDEyMCwKLSAgICA5OSwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsCi0gICAgOTksMTA3LDEwMSwxMDAsMjI3LDUsMCwwLDExNSw3NiwwLDAsMCwwLDEsNiwKLSAgICAxLDE5LDEsNiwxLDE1LDEsMTYsMiwxNSwxLDExLDIsMTMsMSwzLAotICAgIDEsMTMsMSwxMywxLDIyLDEsMjYsMSwxNSwxLDEyLDEsMjcsMyw5LAotICAgIDEsOSwxLDE1LDIsMTMsMSwxOSwyLDEzLDEsNiwyLDEzLDEsMzIsCi0gICAgMiwyNCwxLDMsMSwxMiwxLDE1LDEsMzIsMSwxMywxLDgsMiwxNSwKLSAgICAxLDMsMSwxMywxLDEzLDEsOCwxLDExNywyMywwLDAsMCw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwKLSAgICAxMTEsOTksMTA3LDEwMSwxMDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwKLSAgICAwLDAsMTgsMCwwLDAsNjcsMCwwLDAsMTE1LDc1LDAsMCwwLDEyMiwKLSAgICAxNiwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTAwLAotICAgIDEsMCwxMTYsMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDg4LDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMzEsMCwwLDEsMTIyLDE3LDAsMTE2LDQsMCwxMjQsMCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMDAsMSwwLDEyNCwyLDAsMTA2LDUsCi0gICAgMCwxMzEsMCwwLDEsODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NCwwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywxMTAsMTAwLDMyLDEwOCwxMTEsOTcsCi0gICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwKLSAgICAxMDAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsNiwwLDAsMCwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTA4LDExMSw5OSwxMDcsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLAotICAgIDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNywKLSAgICA3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDIzLDAsMCwwLAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDExNywKLSAgICAxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsCi0gICAgOTcsMTE1LDEwMSw0MCwzLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE0LDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDIxLDYsMCwwLDExNSwxNCwwLDAsMCwwLDIsCi0gICAgMywxLDE2LDIsMTEsMSwxMCwxLDMsMSwxNywyLDExNywxNCwwLDAsCi0gICAgMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5OSwKLSAgICAzLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSwxNzIsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEyNCwKLSAgICAxLDAsMTI0LDIsMCwxMzEsMywwLDEsMTI0LDIsMCwxMDAsMSwwLDEwNywKLSAgICA0LDAsMTE0LDQ5LDAsMTE2LDEsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsCi0gICAgMCwxMzEsMywwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEwNiwzLDAsCi0gICAgMTMxLDAsMCwxLDEyNCwwLDAsMTE2LDQsMCwxMDYsNSwwLDEwNyw3LDAsCi0gICAgMTE0LDg3LDAsMTE2LDYsMCwxMjQsMCwwLDExNiw3LDAsMTMxLDIsMCw4MywKLSAgICAxMTYsNCwwLDEwNiw1LDAsMTI0LDAsMCwyNSwxMjUsMywwLDEyNCwzLDAsCi0gICAgMTAwLDQsMCwxMDcsOCwwLDExNCwxNTgsMCwxMTYsMiwwLDEwNiw5LDAsMTMxLAotICAgIDAsMCwxLDEwMCwyLDAsMTA2LDEwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwKLSAgICA0LDAsMTE2LDExLDAsMTI0LDQsMCwxMDAsMywwLDEyNCwwLDAsMTMxLDEsCi0gICAgMSwxMzAsMSwwLDExMCwwLDAsMTE2LDEyLDAsMTI0LDAsMCwxMzEsMSwwLAotICAgIDEsMTI0LDMsMCw4Myw0MCw1LDAsMCwwLDExNyw1MCwxLDAsMCw3MywKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsOTcsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksCi0gICAgOTcsMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywKLSAgICAzMiwxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsOTcsMTEwLDEwMCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwxMDYsMTE3LDExNSwxMTYsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCi0gICAgMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsMTE2LDEwMSwxMTUsMTE2LAotICAgIDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLDEwOSwxMDUsMTEwLDk3LAotICAgIDExNiwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDk3LAotICAgIDEwOCwxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LDExOSwxMDEsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDQ2LDMyLDg0LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwzMiwxMTUsMTAxLDExNiwKLSAgICAxMTYsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LAotICAgIDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDUsMCwwLDAsMCwxMTcsNDAsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsMTExLDEwMiwzMiwxMjMsMTI1LDMyLDEwNCw5NywxMDgsMTE2LDEwMSwxMDAsNTksMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNzgsNDAsMTMsMCwKLSAgICAwLDAsMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksCi0gICAgMTA0LDEwMSw5OSwxMDcsMTE3LDEzLDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LAotICAgIDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTIsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTUsMTE3LDE0LDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywKLSAgICAxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLAotICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLAotICAgIDExNywxMiwwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5NSwxMDgsMTExLDk5LAotICAgIDEwNywxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTksMCwwLAotICAgIDAsOTUsMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsNSwKLSAgICAwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw3LDAsMCwwLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLAotICAgIDk1LDEwMyw5OSwxMDAsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzQsNiwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsOSwxNiwxLDEyLDEsMjEsMSwxMCwxLDE1LDEsCi0gICAgMTMsMSwxMywxLDEyLDEsMTAsMSw2LDEsOSwxLDIxLDEsMTAsMSwKLSAgICAxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICA5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsMCwxNywwLDAsCi0gICAgMCw2NywwLDAsMCwxMTUsMjU0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwKLSAgICAxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MCwwLDEwMCwyLDAsMTI0LDEsMCwxMDcsCi0gICAgNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwxLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLDAsMTE0LDg5LDAsMTI0LDEsMCwKLSAgICAxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwwLDEsMTEzLDg5LDAsCi0gICAgMTEwLDAsMCwxMjAsMTU4LDAsMTI0LDEsMCw2OCw5MywxNDcsMCwxMjUsMywwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsMTE1LDk2LDAsMTAwLAotICAgIDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLDEzMSwyLAotICAgIDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywwLDEyNCwyLDAsMTI0LDQsMCwKLSAgICAxMzEsMiwwLDEsODcsMTEzLDI0MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsCi0gICAgMjM5LDAsMSwxMjUsNSwwLDEsMTIyLDUwLDAsMTE2LDksMCwxMjQsNSwwLAotICAgIDEwMCw1LDAsMTAwLDcsMCwxMzEsMywwLDExNCwyMTgsMCwxMjQsNSwwLDEwNiwKLSAgICAxMSwwLDEyNCw0LDAsMTA3LDIsMCwxMTQsMjE4LDAsMTE5LDk2LDAsMTEzLDIxOCwKLSAgICAwLDExMCwwLDAsMTMwLDAsMCw4Nyw4OSwxMDAsNiwwLDEwMCw2LDAsMTI1LAotICAgIDUsMCwxMjYsNSwwLDg4LDExMywyNDMsMCw4OCwxMTMsOTYsMCwxMTMsOTYsMCwKLSAgICA4NywxMTAsMCwwLDEyNCwwLDAsODMsNDAsOCwwLDAsMCwxMTcsMjM4LDAsCi0gICAgMCwwLDcwLDEwNSwxMDMsMTE3LDExNCwxMDEsMzIsMTExLDExNywxMTYsMzIsMTE5LDEwNCw5NywKLSAgICAxMTYsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMzIsMTE1LDEwNCwxMTEsCi0gICAgMTE3LDEwOCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsODQsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwzMiwxMTIsOTcsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE2LDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywzMiw5OSw5NywxMDgsMTA4LAotICAgIDk3LDk4LDEwOCwxMDEsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExNiw5NywxMDcsMTAxLDExNSwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsMzIsNzMsMTE2LDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDEwMCwzMiwxMTYsMTExLDMyLDEwMCwxMDEsOTksMTExLDExNywxMTIsMTA4LDEwMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDk3LDExNSwxMTUsMTE3LDEwOSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDM5LDExNSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwKLSAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTA1LAotICAgIDExNSwzMiwxMDAsMTAxLDExNSwxMDUsMTE0LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE3LDEsMCwKLSAgICAwLDAsNDIsMTE3LDcsMCwwLDAsOTUsOTUsOTcsMTA4LDEwOCw5NSw5NSwxMTcsCi0gICAgNSwwLDAsMCwxMjMsMTI1LDQ2LDEyMywxMjUsMTE3LDEwLDAsMCwwLDk1LDExMCwKLSAgICAxMTEsMTE2LDk1LDEwMiwxMTEsMTE3LDExMCwxMDAsNzgsNzAsNDAsMTIsMCwwLDAsMTE3LAotICAgIDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNCwwLDAsMCwKLSAgICAxMDgsMTA1LDExNSwxMTYsMTE3LDYsMCwwLDAsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTE3LAotICAgIDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsOTcsMTA4LDEwOCw5NSw5NSwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsCi0gICAgMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywyNSwKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LAotICAgIDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsMTEsMCwwLAotICAgIDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLAotICAgIDAsMTAzLDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LAotICAgIDExNSwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsNiwwLDAsMCwKLSAgICAxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNyw3LDAsMCwwLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDk1LDExNywxLDAsMCwwLDEyMCwxMTcsOSwwLDAsMCwxMDIsCi0gICAgMTE0LDExMSwxMDksOTUsMTEwLDk3LDEwOSwxMDEsMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNiwwLDAsCi0gICAgMCw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwKLSAgICAxMTYsNTgsNiwwLDAsMTE1LDM0LDAsMCwwLDAsMTAsMTUsMSwxMiwxLAotICAgIDEyLDEsMTMsMSwxNSwxLDIyLDEsMTMsMSwxNSwxLDIxLDEsMywxLAotICAgIDE3LDEsMTgsNiwxOCwxLDE1LDEsOSwxLDMyLDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsCi0gICAgMCwwLDY3LDAsMCwwLDExNSw3OCwwLDAsMCwxMjQsMCwwLDEwNiwwLAotICAgIDAsMTAwLDEsMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDAsNiwwLAotICAgIDEwNyw4LDAsMTE0LDc0LDAsMTI0LDAsMCwxMDAsMiwwLDI1LDEyNSwxLDAsCi0gICAgMTAwLDMsMCwxMjQsMCwwLDEwNyw3LDAsMTE0LDc0LDAsMTI0LDEsMCwxMDYsCi0gICAgMiwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsNSwwLDI1LDEyNSwxLDAsMTEzLAotICAgIDc0LDAsMTEwLDAsMCwxMjQsMSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE2NywKLSAgICAwLDAsMCw2Nyw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDMyLDExOSwxMDQsOTcsCi0gICAgMTE2LDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTUsMTA0LAotICAgIDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTUsOTUsCi0gICAgMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsCi0gICAgMzIsMTAzLDExNyw5NywxMTQsOTcsMTEwLDExNiwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDk4LAotICAgIDEwMSwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzIsMTExLDExNCwzMiw5OSwxMTEsMTE3LAotICAgIDEwOCwxMDAsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsNzgsMTExLDExMCwKLSAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwxMDEsCi0gICAgMTEwLDExNiwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDExNSwzMiwxMTIsMTE0LDExMSwxMTIsCi0gICAgMTAxLDExNCwzMiwxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExNSwzMiwxMTcsMTEwLDEwNywxMTAsCi0gICAgMTExLDExOSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LDExLDAsMCwwLDk1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSw5NSwxMTcsMSwwLDAsMCw0NiwxMDUsMCwwLDAsMCw3OCwKLSAgICA0MCwzLDAsMCwwLDExNywzLDAsMCwwLDEwMywxMDEsMTE2LDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsCi0gICAgMTA1LDExNiwxMDUsMTExLDExMCw0MCwyLDAsMCwwLDExNyw3LDAsMCwwLDEwMywKLSAgICAxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsOTIsNiwwLDAsMTE1LDEyLDAsMCwwLDAsNywxNSwKLSAgICAxLDEyLDEsMTAsMSwxMiwxLDI1LDEsMTE3LDE3LDAsMCwwLDk1LDk5LAotICAgIDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsOTksCi0gICAgMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsNTUsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTMxLDAsMCwxMDIsMiwwLDEyNSwwLDAsMTE2LDMsMCwxMTYsNCwKLSAgICAwLDEwMiwyLDAsMTI1LDEsMCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwKLSAgICAxMjUsMiwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEwMywzLDAsODMsCi0gICAgNDAsMSwwLDAsMCwxMTcsOTUsMCwwLDAsODIsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAxMTUsMzIsOTcsMzIsMTA4LDEwNSwxMTUsMTE2LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY5LDk3LDk5LDEwNCwKLSAgICAzMiwxMDUsMTE2LDEwMSwxMDksMzIsMTA1LDExNSwzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLAotICAgIDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsCi0gICAgMTAxLDExNSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw0MCw3LDAsMCwwLDExNywxOSwKLSAgICAwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsCi0gICAgMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywKLSAgICAxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsOTksCi0gICAgMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTUsMCwwLDAsCi0gICAgODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LAotICAgIDIwLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNywwLDAsMCw2Niw4OSw4NCwKLSAgICA2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4Myw0MCwzLAotICAgIDAsMCwwLDExNywxMCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAotICAgIDExMCwxMTUsMTE3LDYsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTA3LDYsMCwwLDExNSw4LDAsMCwwLDAsCi0gICAgNSwxOCwxLDEyLDEsMTIsMSwxMTcsMjcsMCwwLDAsOTUsMTAzLDEwMSwxMTYsCi0gICAgOTUsMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTAyLDEwNSwxMDgsMTAxLDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDk5LDUsMCwwLDAsMCwwLDAsMCwKLSAgICA5LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDIyNywwLDAsCi0gICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjcsMCwxMTYsMCwwLAotICAgIDEyNCwwLDAsMTMxLDEsMCwxMjUsNSwwLDExMCw1NCwwLDEyNCwxLDAsMTAwLAotICAgIDMsMCwxMDcsOSwwLDExNCw0NSwwLDEyNCwxLDAsMTEwLDMsMCwxMDUsMCwKLSAgICAwLDEyNSw2LDAsMTE2LDIsMCwxMjQsNiwwLDEzMSwxLDAsMTI1LDcsMCwKLSAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDcsMCwxMjQsNCwwLDEzMSwzLDAsMTI1LAotICAgIDUsMCwxMjQsMywwLDExNSwyMDcsMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDIsCi0gICAgMCwxMTQsMTIyLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDIsMCwKLSAgICAxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCw4MywxMjQsMCwwLDExNSwxMzIsCi0gICAgMCwxMjQsNSwwLDgzLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDExNiw0LAotICAgIDAsMTI0LDAsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLAotICAgIDI1LDEzMSwxLDAsMjQsMTI1LDgsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDUsCi0gICAgMCwxMDYsNywwLDEwMCwzLDAsMTE2LDQsMCwxMjQsNSwwLDEwNiw3LDAsCi0gICAgMTMxLDEsMCwxMjQsOCwwLDI0LDEzMywyLDAsMjUsMjUsODMsMTEwLDE2LDAsCi0gICAgMTE2LDgsMCwxMjQsNSwwLDEyNCwzLDAsMTE2LDAsMCwxMzEsMywwLDgzLAotICAgIDEwMCwzLDAsODMsNDAsNCwwLDAsMCwxMTcsMjE0LDEsMCwwLDczLDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsCi0gICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LAotICAgIDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsCi0gICAgMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTAsMTAyLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTE0LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLAotICAgIDExMSw5OSw5OSwxMTcsMTE0LDEwNSwxMTAsMTAzLDMyLDEwMiwxMTQsMTExLDEwOSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsMTE0LDEwMSwxMDgsOTcsCi0gICAgMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNSw0NiwzMiw4NCwxMDQsCi0gICAgMTAxLDMyLDM5LDEwOCwxMTEsOTksOTcsMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDUsMTAzLDExMCwxMTEsMTE0LDEwMSwxMDAsNDYsMzIsCi0gICAgODQsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzOSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSwxMDEsMTE1LDMyLDExOSwxMDQsOTcsMTE2LDMyLDExNSwxMDQsMTExLDExNywxMDgsCi0gICAgMTAwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMzIsOTcsMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSwKLSAgICA5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwKLSAgICAxMTQsMTExLDEwOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiw2MCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDYyLDk2LDk2LDQxLDQ2LAotICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwxMCwzMiwzMiwKLSAgICAzMiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwKLSAgICAxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTYsMTExLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMDUsMTEwLDMyLDk3LDMyLDExNCwKLSAgICAxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICA0Niw0NiwxMTIsMTA3LDEwMywzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksMTExLDEwMCwKLSAgICA5Niw5NiwzMiwxMTksMTExLDExNywxMDgsMTAwLDMyLDEwNCw5NywxMTgsMTAxLDMyLDk3LDMyLAotICAgIDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMzIsMTExLDEwMiwzMiw1MCw0MSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0Niw3OCwKLSAgICA0MCw5LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywKLSAgICAwLDAsMCw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw5LDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LAotICAgIDExMSwxMTAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDMsMCwwLDAsMTE1LAotICAgIDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywKLSAgICAwLDAsMCwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNyw2LDAsMCwwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSwxMTcsOCwwLDAsMCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwKLSAgICAxMTUsMTE2LDExNyw1LDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwOCwxMTEsOTgsCi0gICAgOTcsMTA4LDExNSw5NSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsCi0gICAgMTE3LDcsMCwwLDAsOTksMTE3LDExNiw5NSwxMTEsMTAyLDEwMiw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw5NSw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwxMTgsNiwwLDAsMTE1LDI2LDAsMCwwLAorICAgIDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMjM3LDcsMCwwLDExNSw2LDAsMCwwLDAsCisgICAgMiwxMiwxLDIxLDEsMTIyLDU0LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDQ2LDYwLDEwOCwxMTEsOTksCisgICAgOTcsMTA4LDExNSw2Miw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTUsMTAyLAorICAgIDExMSwxMTQsOTUsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTQsNCwwLAorICAgIDAsMCw0MSwzLDExNCwyNDUsMCwwLDAsMTE0LDg4LDEsMCwwLDExNCw5NSwKKyAgICAxLDAsMCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyNDUsMCwwLDAsMTE0LAorICAgIDg4LDEsMCwwLDExNCw1LDAsMCwwLDIxOCw5LDExMiw5NywxMTYsMTA0LDk1LAorICAgIDEwNCwxMTEsMTExLDEwNywyMjcsNywwLDAsMTE1LDQsMCwwLDAsMCwxMCwyMSwKKyAgICA2LDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCisgICAgMCwxMDAsMSwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsCisgICAgODMsNDEsMiw3OCwxMjIsMTYsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKKyAgICA0MCwxMjMsMzMsMTE0LDEyNSw0MSw0MSwyLDExNCw0NywwLDAsMCwxMTQsMzUsMCwKKyAgICAwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwyNDUsNywwLAorICAgIDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwxOSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MSwxNSwxMTQsCisgICAgNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksCisgICAgMCwwLDAsMTE0LDcyLDAsMCwwLDExNCw3MCwxLDAsMCwxMTQsMTcyLDAsCisgICAgMCwwLDExNCwxMSwxLDAsMCwxMTQsMTY1LDAsMCwwLDExNCw4MSwxLDAsCisgICAgMCwxMTQsMTAsMSwwLDAsMTE0LDg5LDEsMCwwLDExNCw3LDEsMCwwLAorICAgIDExNCw5NiwxLDAsMCwxMTQsMTAxLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw4MiwKKyAgICAxLDAsMCwxMDQsNywwLDAsMTE1LDIwLDAsMCwwLDEyLDcsNiwyLAorICAgIDEyLDE0LDEyLDQsNiwyLDEyLDgsMTIsMTAsMTUsNDUsMTIsMzEsMTgsMTgsCisgICAgMTE0LDgyLDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsCisgICAgMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDQ2LDAsMCwwLDEwMSwKKyAgICAwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLAorICAgIDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4Myw0MSw3LDIxOCwKKyAgICAxOCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsCisgICAgMTAxLDEyMCwxMTYsMTIyLDM2LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsCisgICAgOTcsMTAzLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsOTksMSwwLDAsMCwwLDAsCisgICAgMCwwLDEsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTQsCisgICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMSwwLAorICAgIDgzLDQxLDIsMTIyLDI0LDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDEsMiwKKyAgICAxMTQsMTA2LDAsMCwwLDExNCwyLDEsMCwwLDQxLDEsMTE0LDcxLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCw3NSwwLDAsMCwyNTUsNywwLDAsMTE1LDIsMCwwLDAsMCwyLAorICAgIDEyMiwyOCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwKKyAgICAxMTYsMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSw5OSw0LAorICAgIDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwxNCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsCisgICAgMCwxLDEwMCwxLDAsODMsNDEsMiwxMjIsNjAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LAorICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LAorICAgIDEwNywzMiwxMTQsMTAxLDEwMyw5NywxMTQsMTAwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTEsMTAyLDMyLAorICAgIDk3LDExMCwxMjEsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMDEsMTIwLDk5LDEwMSwxMTIsCisgICAgMTE2LDEwNSwxMTEsMTEwLDExNSw0Niw3OCw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDEwNywKKyAgICAwLDAsMCw0MSw0LDExNCw3MSwwLDAsMCw5MCw4LDEwMSwxMjAsOTksOTUsCisgICAgMTE2LDEyMSwxMTIsMTAxLDkwLDksMTAxLDEyMCw5OSw5NSwxMTgsOTcsMTA4LDExNywxMDEsOTAsCisgICAgMTMsMTAxLDEyMCw5OSw5NSwxMTYsMTE0LDk3LDk5LDEwMSw5OCw5Nyw5OSwxMDcsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDgxLDAsCisgICAgMCwwLDMsOCwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwyNyw5NSwKKyAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwKKyAgICAxMTYsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDU3LDAsCisgICAgMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwKKyAgICAwLDExNCw3NSwwLDAsMCwxMTQsODEsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LAorICAgIDk3LDEsMCwwLDI1MSw3LDAsMCwxMTUsNiwwLDAsMCwxMiwyLDYsCisgICAgMiwxMiw0LDExNCw5NywxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLAorICAgIDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSw5MSwwLAorICAgIDAsMCwxMjQsMSwwLDEwNiwwLDAsMTAwLDEsMCwxMjQsMiwwLDEwMCwyLAorICAgIDAsMjQsMTMxLDIsMCwxMjUsMywwLDExNiwxLDAsMTI0LDMsMCwxMzEsMSwKKyAgICAwLDEyNCwyLDAsMTA3LDAsMCwxMTQsNTUsMCwxMTYsMiwwLDEwMCwzLDAsCisgICAgMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDMsMCwxMDAsNCwwLDI1LAorICAgIDEyNSw0LDAsMTI0LDAsMCwxMTQsODcsMCwxMDAsNSwwLDEwNiwzLDAsMTI0LAorICAgIDQsMCwxMjQsMCwwLDEzMSwyLDAsODMsMTI0LDQsMCw4Myw0MSw2LDEyMiwKKyAgICA1MCw4MiwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywxMTYsCisgICAgMTA1LDExOCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsCisgICAgMTE2LDExMSwzMiw5NywxMTAsMzIsOTcsOTgsMTE1LDExMSwxMDgsMTE3LDExNiwxMDEsMzIsMTExLAorICAgIDExMCwxMDEsNDYsMTE0LDExNiwwLDAsMCwxMTQsMjksMCwwLDAsMTIyLDUwLDk3LAorICAgIDExNiwxMTYsMTAxLDEwOSwxMTIsMTE2LDEwMSwxMDAsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsCisgICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk4LDEwMSwxMjEsMTExLDExMCwxMDAsMzIsCisgICAgMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsMTE0LDg0LDAsMCwwLDEyMiw1LDEyMywxMjUsNDYsMTIzLDEyNSw0MSw0LDExNCwKKyAgICAzNCwwLDAsMCwxMTQsMzEsMCwwLDAsMTE0LDEzMywwLDAsMCwxMTQsNDcsCisgICAgMCwwLDAsNDEsNSwxMTQsNjcsMCwwLDAsMjE4LDcsMTEyLDk3LDk5LDEwNywKKyAgICA5NywxMDMsMTAxLDIxOCw1LDEwOCwxMDEsMTE4LDEwMSwxMDgsOTAsNCw5OCwxMDUsMTE2LDExNSwKKyAgICA5MCw0LDk4LDk3LDExNSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDEzLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwKKyAgICAxMTAsOTcsMTA5LDEwMSw4LDgsMCwwLDExNSwxMCwwLDAsMCwwLDIsMjIsCisgICAgMSwxOCwxLDE1LDEsMTAsMSwxMTQsMTAwLDEsMCwwLDk5LDMsMCwwLAorICAgIDAsMCwwLDAsMCwxMCwwLDAsMCwyNywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNDksMSwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwKKyAgICAyLDAsMTA2LDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwKKyAgICAwLDAsMTI0LDAsMCwxMTYsMCwwLDEwNiw1LDAsMTA3LDYsMCwxMjUsMywKKyAgICAwLDEyMCwyNTUsMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsMjQwLDAsMTI1LDQsCisgICAgMCwxMTYsNiwwLDEzMSwwLDAsMTQzLDEwOCwwLDEsMTIxLDEzLDAsMTI0LDQsCisgICAgMCwxMDYsNywwLDEyNSw1LDAsODcsMTEwLDY5LDAsNCwxMTYsOCwwLDEwNywKKyAgICAxMCwwLDExNCwxNTMsMCwxLDEsMSwxMjQsNCwwLDEwNiw5LDAsMTI0LDAsCisgICAgMCwxMjQsMSwwLDEzMSwyLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwyLDAsCisgICAgMTA3LDgsMCwxMTQsMTM0LDAsMTE5LDUzLDAsMTEwLDAsMCwxMTYsMTAsMCwxMjQsCisgICAgMCwwLDEyNCw2LDAsMTMxLDIsMCwxMjUsNywwLDg5LDExMCwxOSwwLDg4LAorICAgIDEyNCw1LDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxMjUsCisgICAgNywwLDg3LDEwMCwyLDAsODEsODgsMTI0LDcsMCwxMDAsMiwwLDEwNyw5LAorICAgIDAsMTE0LDUzLDAsMTI0LDMsMCwxMiwxMTQsMzAsMSwxMjQsMCwwLDExNiwwLAorICAgIDAsMTA2LDUsMCwxMDcsNiwwLDExNCwzMCwxLDExNiwwLDAsMTA2LDUsMCwKKyAgICAxMjQsMCwwLDI1LDEyNSw4LDAsMTIxLDEzLDAsMTI0LDgsMCwxMDYsMTEsMCwKKyAgICAxMjUsOSwwLDg3LDExMCwyMiwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsNiwKKyAgICAxLDEsMSwxLDEyNCw3LDAsODMsODksMTEzLDM0LDEsODgsMTI0LDksMCwKKyAgICAxMDAsMiwwLDEwNyw4LDAsMTE0LDIzLDEsMTI0LDcsMCw4MywxMjQsOSwwLAorICAgIDgzLDExMywzNywxLDEyNCw3LDAsODMsMTEzLDUzLDAsMTEzLDUzLDAsODcsMTAwLAorICAgIDIsMCw4MywxMDAsMiwwLDgzLDQxLDMsMTIyLDIzLDcwLDEwNSwxMTAsMTAwLDMyLAorICAgIDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDQ2LDEyMiwyMiwxMTUsMTIxLDExNSw0NiwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LAorICAgIDEwNCwzMiwxMDUsMTE1LDMyLDEwMSwxMDksMTEyLDExNiwxMjEsNzgsNDEsMTIsMTE0LDcsMCwKKyAgICAwLDAsMjE4LDksMTA5LDEwMSwxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE2NiwwLAorICAgIDAsMCwxMTQsMTY3LDAsMCwwLDExNCwxNjgsMCwwLDAsMTE0LDczLDAsMCwKKyAgICAwLDExNCw5NywxLDAsMCwxMTQsMTAsMSwwLDAsMTE0LDIwOSwwLDAsMCwKKyAgICAxMTQsMTEsMSwwLDAsMTE0LDE3MywwLDAsMCwxMTQsMjA4LDAsMCwwLDQxLAorICAgIDEwLDExNCw2NywwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDksMSwwLDAsCisgICAgOTAsOSwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE0LDczLDEsMCwwLAorICAgIDExNCwxMCwxLDAsMCwxMTQsMTY5LDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LAorICAgIDE3OSwwLDAsMCwxMTQsMjA4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNDQsMCwwLDAsMTcsOCwwLAorICAgIDAsMTE1LDUwLDAsMCwwLDAsMiw5LDEsMTksNCwxNSwxLDE2LDEsCisgICAgMTAsMSwzLDEsMTMsMSwxMywxLDE4LDEsMTIsMSw2LDEsMjAsMiwKKyAgICAyNCwxLDEyLDIsMjIsMSwxMywxLDMsMSwxMywxLDEzLDQsOSwyLAorICAgIDEyLDEsNCwyLDcsMiwxMSwyLDExNCwyNDQsMCwwLDAsOTksMywwLAorICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsNCwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTk0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMTYsMSwwLAorICAgIDEzMSwyLDAsMTE1LDQ1LDAsMTE2LDIsMCwxMDAsMSwwLDEwNiwzLDAsMTE2LAorICAgIDQsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMjQsMiwwLDEwMCwyLDAsMTA3LDAsMCwxMTQsNzIsMCwKKyAgICAxMTYsNSwwLDEwMCwzLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LAorICAgIDEsMCwxMTQsMTU2LDAsMTE2LDAsMCwxMjQsMSwwLDExNiwxLDAsMTMxLDIsCisgICAgMCwxMTUsMTA4LDAsMTE2LDIsMCwxMDAsNCwwLDEzMSwxLDAsMTMwLDEsMCwKKyAgICAxMTMsMTU2LDAsMTI0LDEsMCwxMTYsNiwwLDEwNiw3LDAsMTA3LDcsMCwxMTQsCisgICAgMTU2LDAsMTAwLDUsMCwxMjUsMywwLDExNiw4LDAsMTI0LDMsMCwxMDYsMywKKyAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEzLDE1NiwwLAorICAgIDExMCwwLDAsMTI0LDAsMCwxMiwxMTQsMTkwLDAsMTI0LDIsMCwxMDAsMiwwLAorICAgIDEwNywyLDAsMTE0LDE5MCwwLDExNiw1LDAsMTAwLDYsMCwxMzEsMSwwLDEzMCwKKyAgICAxLDAsMTEwLDAsMCwxMDAsNywwLDgzLDQxLDgsMTIyLDI4LDg2LDEwMSwxMTQsCisgICAgMTA1LDEwMiwxMjEsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiw5NywxMTQsCisgICAgMTAxLDMyLDM0LDExNSw5NywxMTAsMTAxLDM0LDQ2LDEyMiwzMSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDExNSwKKyAgICAxMTYsMTE0LDQ0LDMyLDExMCwxMTEsMTE2LDMyLDEyMywxMjUsMTE0LDg0LDAsMCwwLDEyMiwKKyAgICAxOCwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsCisgICAgNjEsMzIsNDgsMTIyLDMxLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwKKyAgICAzMiwxMTAsMTExLDExNiwzMiwxMTUsMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsCisgICAgMTE0LDEwNSwxMTAsMTAzLDEyMiw2MSw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDEwMCw0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLAorICAgIDExMSwxMTQsMTA5LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMjIsMTcsNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQxLDksMTE0LDE5MiwwLDAsMCwxMTQsNzgsCisgICAgMSwwLDAsMjE4LDksODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCw0NywKKyAgICAwLDAsMCwxMTQsNjYsMCwwLDAsMTE0LDEzMywwLDAsMCwxMTQsNywwLAorICAgIDAsMCwxMTQsNzMsMCwwLDAsMjE4LDExLDgzLDEyMSwxMTUsMTE2LDEwMSwxMDksNjksCisgICAgMTE0LDExNCwxMTEsMTE0LDQxLDQsMTE0LDY3LDAsMCwwLDExNCw5OCwxLDAsMCwKKyAgICAxMTQsOTksMSwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsOTUsMTE1LDk3LDExMCwxMDUsCisgICAgMTE2LDEyMSw5NSw5OSwxMDQsMTAxLDk5LDEwNyw1OCw4LDAsMCwxMTUsMjQsMCwwLAorICAgIDAsMCwyLDE1LDEsMzAsMSwxMiwxLDE1LDEsNiwxLDE1LDEsMTUsCisgICAgMSwxNSwxLDYsMiwyNywxLDE5LDEsMTE0LDEwNCwxLDAsMCwxMjIsMTYsCisgICAgNzgsMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwKKyAgICAxMjIsNCwxMjMsMzMsMTE0LDEyNSw5OSwyLDAsMCwwLDAsMCwwLDAsOCwKKyAgICAwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsNTIsMSwwLDAsCisgICAgMTAwLDAsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwKKyAgICAxLDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwKKyAgICAzLDAsMTE2LDEsMCwxMDYsMiwwLDEwNyw3LDAsMTE0LDYyLDAsMTE2LDMsCisgICAgMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDAsCisgICAgMCwxMTYsMSwwLDEwNiwyLDAsMTA3LDYsMCwxMTQsODgsMCwxMTYsMSwwLAorICAgIDEwNiwyLDAsMTI0LDAsMCwyNSw4MywxMTYsMSwwLDEwNiwyLDAsMTI0LDMsCisgICAgMCwyNSwxMjUsNCwwLDEyMSwxMywwLDEyNCw0LDAsMTA2LDQsMCwxMjUsMiwKKyAgICAwLDg3LDExMywxNzgsMCw0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsCisgICAgMSwxLDExNiw2LDAsMTAwLDMsMCwyMywxMDYsNywwLDEyNCwwLDAsMTI0LAorICAgIDMsMCwxMzEsMiwwLDEyNSw1LDAsMTE2LDgsMCwxMjQsNSwwLDEwMCw0LAorICAgIDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwxLDAsODksMTEzLDE3OCwwLDg4LDExMCwKKyAgICAwLDAsMTE2LDksMCwxMjQsMCwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsNiwKKyAgICAwLDEyNCw2LDAsMTAwLDAsMCwxMDcsOCwwLDExNCwyMzUsMCwxMTYsOCwwLAorICAgIDExNiw2LDAsMTA2LDcsMCwxMjQsMCwwLDEzMSwxLDAsMTAwLDQsMCwxMjQsCisgICAgMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMTgsMCwxMTYsMTAsMCwxMjQsNiwKKyAgICAwLDEzMSwxLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNywwLDEyNCwzLDAsCisgICAgMTE0LDQ4LDEsMTE2LDEsMCwxMDYsMiwwLDEyNCwzLDAsMjUsMTI1LDQsMCwKKyAgICAxMTYsMTIsMCwxMjQsNCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwKKyAgICAxLDAsMTAwLDUsMCwyNSwxMjQsNywwLDEzMSwzLDAsMSwxMTAsMCwwLAorICAgIDEyNCw3LDAsODMsNDEsNiw3OCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsCisgICAgMCwxMjIsMjMsNTksMzIsMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwKKyAgICAzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE0LDY3LDAsMCwwLDExNCwKKyAgICAxMTUsMCwwLDAsNDEsMTMsMTE0LDMyLDAsMCwwLDExNCw3LDAsMCwwLAorICAgIDExNCw3MywwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwyNDIsMCwwLDAsMTE0LAorICAgIDIwOSwwLDAsMCwyMTgsOCw5NSw2OSw4Miw4Miw5NSw3Nyw4Myw3MSwxMTQsNDcsCisgICAgMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsMjQ0LDAsMCwwLDExNCwxNzQsMCwKKyAgICAwLDAsMTE0LDYsMSwwLDAsMTE0LDYxLDAsMCwwLDQxLDgsMTE0LDY3LAorICAgIDAsMCwwLDIxOCw3LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDExNCwzNSwwLDAsCisgICAgMCwxMTQsMjMxLDAsMCwwLDkwLDEzLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDE3MSwwLDAsMCwxMTQsMTc3LDAsMCwwLDExNCwKKyAgICAxNzksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDIzLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwKKyAgICAxMTEsOTcsMTAwLDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsMTAxLDEwMCw3OCw4LDAsMCwKKyAgICAxMTUsNDIsMCwwLDAsMCwxLDYsMSwxOSwxLDYsMSwxNSwxLDE2LAorICAgIDIsMTUsMSwxMSwxLDEzLDEsMywxLDEzLDEsMTMsMSwyMiwxLDI2LAorICAgIDEsMTUsMSwxMiwxLDMwLDIsMTgsMSw2LDIsMTMsMSwzMiwxLDExNCwKKyAgICAxMDcsMSwwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LDM2LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMzEsMSwwLDE0MywxOCwwLDEsMTE2LDEsMCwxMjQsMCwKKyAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMDAsMSwwLDgxLDg4LDEwMCwxLAorICAgIDAsODMsNDEsMiwxMjIsNTQsNzAsMTA1LDExMCwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMDgsCisgICAgMTExLDk3LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwKKyAgICA5NywxMTAsMTAwLDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDQ2LDc4LDQxLDIsMTE0LAorICAgIDEwMywwLDAsMCwxMTQsMTA3LDEsMCwwLDQxLDIsMTE0LDY3LDAsMCwwLAorICAgIDExNCwxMDYsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDE0LDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LAorICAgIDEwOCwxMTEsOTcsMTAwLDEwNSw4LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTMsCisgICAgMSwxMTQsMTA4LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw1LAorICAgIDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwKKyAgICAxMjQsMiwwLDEwMCwxLDAsMTA3LDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwKKyAgICAwLDExNiwyLDAsMTA2LDMsMCwxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwKKyAgICAwLDEwNiw1LDAsMTA3LDcsMCwxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsCisgICAgMTE2LDcsMCwxMzEsMiwwLDgzLDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLAorICAgIDI1LDEyNSwzLDAsMTI0LDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDE1OCwwLAorICAgIDExNiwyLDAsMTA2LDgsMCwxMzEsMCwwLDEsMTAwLDMsMCwxMDYsOSwwLAorICAgIDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDExNiwxMCwwLDEyNCw0LDAsMTAwLAorICAgIDQsMCwxMjQsMCwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDExNiwxMSwKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCwxLDEyNCwzLDAsODMsNDEsNSw5Nyw1MCwKKyAgICAxLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsOTcsMTA5LAorICAgIDEwMSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsOTksOTcsMTA4LDEwOCwzMiwxMDUsMTE1LDEwLDMyLDMyLDMyLDMyLDk4LAorICAgIDEwMSwxMDUsMTEwLDEwMywzMiwxMDksOTcsMTAwLDEwMSwzMiwxMDIsMTE0LDExMSwxMDksNDQsMzIsCisgICAgOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDk3LDEwMCwKKyAgICAxMDYsMTE3LDExNSwxMTYsMTA5LDEwMSwxMTAsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LAorICAgIDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMTQsMTAxLDExMiwKKyAgICAxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTAzLDExNCwxMDEsOTcsCisgICAgMTE2LDEwMSwxMTUsMTE2LDMyLDk5LDExMSwxMDksMTA5LDExMSwxMTAsMzIsMTAwLDEwMSwxMTAsMTExLAorICAgIDEwOSwxMDUsMTEwLDk3LDExNiwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDExNywxMTAsOTksMTE2LAorICAgIDEwNSwxMTEsMTEwLDk3LDEwOCwxMDUsMTE2LDEyMSwxMCwzMiwzMiwzMiwzMiw5OCwxMDEsMTE2LAorICAgIDExOSwxMDEsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiw5NywxMTAsMTAwLDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LAorICAgIDk1LDQ2LDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsMTAxLDExNSwKKyAgICAzMiwxMTUsMTAxLDExNiwxMTYsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMDIsMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDAsMTA1LDEwMCwzMiwxMTAsMTExLDExNiw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwxMTQsODQsMCwwLDAsNzgsMTIyLDQwLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDMyLDExMSwxMDIsMzIsMTIzLDEyNSwzMiwxMDQsOTcsMTA4LDExNiwxMDEsMTAwLAorICAgIDU5LDMyLDc4LDExMSwxMTAsMTAxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDExNCw2NywwLDAsMCw0MSwxMiwxMTQsMTA0LDEsMCwKKyAgICAwLDExNCwxMDAsMSwwLDAsMTE0LDEwNiwwLDAsMCwxMTQsMiwxLDAsMCwKKyAgICAxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDEwOCwxLDAsMCwyMTgsCisgICAgMTEsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMTQsMTA3LDAsMCwKKyAgICAwLDExNCw0NywwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwxMTIsMCwwLDAsCisgICAgNDEsNSwxMTQsNjcsMCwwLDAsMTE0LDk4LDEsMCwwLDExNCw5OSwxLDAsCisgICAgMCwxMTQsMTc5LDAsMCwwLDExNCwxNTEsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwOSwxLDAsMCwxMTEsCisgICAgOCwwLDAsMTE1LDI2LDAsMCwwLDAsOSwxNiwxLDEyLDEsMjEsMSwKKyAgICAxMCwxLDE1LDEsMTMsMSwxMywxLDEyLDEsMTAsMiwxNSwxLDIxLDEsCisgICAgMTAsMSwxMTQsMTA5LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCwKKyAgICA2LDAsMCwwLDE3LDAsMCwwLDY3LDAsMCwwLDExNSwxLDEsMCwKKyAgICAwLDExNiwwLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsMTE0LDI1MywwLAorICAgIDEwMCwyLDAsMTI0LDEsMCwxMDcsNiwwLDExNCw4OSwwLDExNiwxLDAsMTI0LAorICAgIDEsMCwxMzEsMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMiwwLDEwMCwyLAorICAgIDAsMTMxLDEsMCwxLDExNiwwLDAsMTI0LDAsMCwxMDAsMywwLDEzMSwyLAorICAgIDAsMTE0LDg5LDAsMTI0LDEsMCwxMDYsMywwLDEyNCwwLDAsMTA2LDQsMCwKKyAgICAxMzEsMSwwLDEsMTEzLDg5LDAsMTEwLDAsMCwxMjAsMTYxLDAsMTI0LDEsMCwKKyAgICA2OCw5MywxNTAsMCwxMjUsMywwLDExNiwwLDAsMTI0LDAsMCwxMjQsMywwLAorICAgIDEzMSwyLDAsMTE1LDk2LDAsMTAwLDQsMCwxMDYsNSwwLDEyNCwwLDAsMTA2LAorICAgIDYsMCwxMjQsMywwLDEzMSwyLDAsMTI1LDQsMCwxMjEsMTcsMCwxMTYsNywKKyAgICAwLDEyNCwyLDAsMTI0LDQsMCwxMzEsMiwwLDEsODcsMTEzLDI0NiwwLDQsCisgICAgMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjQyLDAsMSwxMjUsNSwwLDEsMTIyLDUzLAorICAgIDAsMTE2LDksMCwxMjQsNSwwLDEzMSwxLDAsMTA2LDEwLDAsMTE2LDExLDAsCisgICAgMTMxLDEsMCwxMTQsMjIxLDAsMTI0LDUsMCwxMDYsMTIsMCwxMjQsNCwwLDEwNywKKyAgICAyLDAsMTE0LDIyMSwwLDExOSw5NiwwLDExMywyMjEsMCwxMTAsMCwwLDEzMCwwLAorICAgIDAsODcsODksMTAwLDUsMCwxMDAsNSwwLDEyNSw1LDAsMTI2LDUsMCw4OCwKKyAgICAxMTMsMjQ2LDAsODgsMTEzLDk2LDAsMTEzLDk2LDAsODcsMTEwLDAsMCwxMjQsMCwKKyAgICAwLDgzLDQxLDYsMTIyLDIzOCw3MCwxMDUsMTAzLDExNywxMTQsMTAxLDMyLDExMSwxMTcsMTE2LAorICAgIDMyLDExOSwxMDQsOTcsMTE2LDMyLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LAorICAgIDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsCisgICAgMzIsMTEyLDk3LDExNCw5NywxMDksMTAxLDExNiwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsCisgICAgOTksOTcsMTA4LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTYsCisgICAgOTcsMTA3LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwNSwKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDMyLDczLDExNiwzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTEzLAorICAgIDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDk5LDExMSwxMTcsMTEyLDEwOCwKKyAgICAxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMiwKKyAgICAxMTQsMTExLDEwOSwzMiw5NywxMTUsMTE1LDExNywxMDksMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDExNCwxMDEsMTAwLDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDExNCwyNDIsMCwwLDAsMjUwLDEsNDIsMjE4LDcsOTUsOTUsCisgICAgOTcsMTA4LDEwOCw5NSw5NSwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNzgsNDEsMTMsMTE0LAorICAgIDYwLDAsMCwwLDExNCwyNDEsMCwwLDAsMjE4LDYsMTE0LDEwMSwxMDksMTExLDExOCwKKyAgICAxMDEsMTE0LDE5NywwLDAsMCwxMTQsMTExLDEsMCwwLDExNCw0NywwLDAsMCwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwKKyAgICA3OCwxLDAsMCwxMTQsOSwwLDAsMCwyMTgsMTUsOTUsNjksODIsODIsOTUsCisgICAgNzcsODMsNzEsOTUsODAsODIsNjksNzAsNzMsODgsMTE0LDY3LDAsMCwwLDQxLAorICAgIDYsMTE0LDE3OSwwLDAsMCwyMTgsOCwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LAorICAgIDExNCwxMDYsMSwwLDAsMTE0LDE2LDAsMCwwLDkwLDksMTAyLDExNCwxMTEsMTA5LAorICAgIDk1LDExMCw5NywxMDksMTAxLDExNCwzNiwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsOTUsMTA0LDk3LDExMCwxMDAsCisgICAgMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDEzNSw4LDAsMCwxMTUsCisgICAgMzQsMCwwLDAsMCwxMCwxNSwxLDEyLDEsMTIsMSwxMywxLDE1LDEsCisgICAgMjIsMSwxMywxLDE1LDEsMjEsMSwzLDEsMTcsMSwxOCw0LDIxLDEsCisgICAgMTUsMSw5LDEsMzIsMSwxMTQsMTE1LDEsMCwwLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDc4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDAsMSwwLDEzMSwxLAorICAgIDAsMTI1LDEsMCwxMjQsMSwwLDEwMCwyLDAsMTA3LDgsMCwxMTQsNzQsMCwKKyAgICAxMjQsMCwwLDEwMCwzLDAsMjUsMTI1LDEsMCwxMDAsNCwwLDEyNCwwLDAsCisgICAgMTA3LDcsMCwxMTQsNzQsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDUsMCwxMzEsCisgICAgMSwwLDEwMCw2LDAsMjUsMTI1LDEsMCwxMTMsNzQsMCwxMTAsMCwwLDEyNCwKKyAgICAxLDAsODMsNDEsNywxMjIsMTY3LDY3LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsCisgICAgMzIsMTE5LDEwNCw5NywxMTYsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LAorICAgIDk1LDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwKKyAgICAzMiwxMTAsMTExLDExNiwzMiwxMDMsMTE3LDk3LDExNCw5NywxMTAsMTE2LDEwMSwxMDEsMTAwLDMyLAorICAgIDExNiwxMTEsMzIsOTgsMTAxLDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCwzMiwxMTEsMTE0LAorICAgIDMyLDk5LDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwKKyAgICAzMiw3OCwxMTEsMTEwLDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNCwxMDEsMTEyLAorICAgIDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMTE1LDMyLAorICAgIDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLAorICAgIDExNywxMTAsMTA3LDExMCwxMTEsMTE5LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsMjQ5LAorICAgIDAsMCwwLDc4LDExNCw1NywwLDAsMCwxMTQsMjQyLDAsMCwwLDExNCwxMTYsCisgICAgMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDIsMTE0LDkzLDAsMCwwLDExNCwKKyAgICAzMiwwLDAsMCw0MSwyLDIxOCw3LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE0LAorICAgIDk4LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNyw5NSw5OSw5NywxMDgsOTksOTUsOTUsOTUsMTEyLDk3LDk5LAorICAgIDEwNyw5NywxMDMsMTAxLDk1LDk1LDE2Nyw4LDAsMCwxMTUsMTIsMCwwLDAsMCwKKyAgICA3LDE1LDEsMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTQsMTE3LDEsMCwwLAorICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDU1LDAsMCwwLDExNiwwLDAsMTE2LDEsMCwKKyAgICAxMDYsMiwwLDEzMSwwLDAsMTAyLDIsMCwxMjUsMCwwLDExNiwzLDAsMTE2LAorICAgIDQsMCwxMDIsMiwwLDEyNSwxLDAsMTE2LDUsMCwxMTYsNiwwLDEwMiwyLAorICAgIDAsMTI1LDIsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMDMsMywwLAorICAgIDgzLDQxLDEsMTIyLDk1LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDEwOCwKKyAgICAxMDUsMTE1LDExNiwzMiwxMTEsMTAyLDMyLDEwMiwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLAorICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw2OSw5Nyw5OSwxMDQsMzIsMTA1LDExNiwxMDEsMTA5LAorICAgIDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE2LDExNywxMTIsMTA4LDEwMSwzMiw0MCwxMDgsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ0LDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsNDEsNDYsMTAsCisgICAgMzIsMzIsMzIsMzIsNDEsNywxMTQsNTIsMSwwLDAsMTE0LDEwNiwwLDAsMCwKKyAgICAyMTgsMTgsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLAorICAgIDEwNSwxMjAsMTAxLDExNSwxMTQsNDcsMSwwLDAsMTE0LDEzNCwwLDAsMCwxMTQsNTEsCisgICAgMSwwLDAsMTE0LDIzMCwwLDAsMCw0MSwzLDkwLDEwLDEwMSwxMjAsMTE2LDEwMSwKKyAgICAxMTAsMTE1LDEwNSwxMTEsMTEwLDExNSw5MCw2LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTAsOCwKKyAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjM2LDAsMCwwLDE4Miw4LDAsMCwKKyAgICAxMTUsOCwwLDAsMCwwLDUsMTgsMSwxMiwxLDEyLDEsMTE0LDIzNiwwLAorICAgIDAsMCw5OSw1LDAsMCwwLDAsMCwwLDAsOSwwLDAsMCw1LAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMjcsMCwwLDAsMTI0LDQsMCwxMDAsCisgICAgMSwwLDEwNywyLDAsMTE0LDI3LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLAorICAgIDAsMTI1LDUsMCwxMTAsNTQsMCwxMjQsMSwwLDEwMCwyLDAsMTA3LDksMCwKKyAgICAxMTQsNDUsMCwxMjQsMSwwLDExMCwzLDAsMTA1LDAsMCwxMjUsNiwwLDExNiwKKyAgICAxLDAsMTI0LDYsMCwxMzEsMSwwLDEyNSw3LDAsMTE2LDAsMCwxMjQsMCwKKyAgICAwLDEyNCw3LDAsMTI0LDQsMCwxMzEsMywwLDEyNSw1LDAsMTI0LDMsMCwKKyAgICAxMTUsMjA3LDAsMTI0LDQsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDEyMiwwLDExNiwKKyAgICAwLDAsMTI0LDAsMCwxMDYsMiwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsMSwKKyAgICAwLDI1LDEzMSwxLDAsODMsMTI0LDAsMCwxMTUsMTMyLDAsMTI0LDUsMCw4MywKKyAgICAxMTYsMywwLDEyNCwwLDAsMTMxLDEsMCwxMTYsMywwLDEyNCwwLDAsMTA2LAorICAgIDIsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDI0LAorICAgIDEyNSw4LDAsMTE2LDQsMCwxMDYsNSwwLDEyNCw1LDAsMTA2LDYsMCwxMDAsCisgICAgMiwwLDExNiwzLDAsMTI0LDUsMCwxMDYsNiwwLDEzMSwxLDAsMTI0LDgsCisgICAgMCwyNCwxMzMsMiwwLDI1LDI1LDgzLDExMCwxNiwwLDExNiw3LDAsMTI0LDUsCisgICAgMCwxMjQsMywwLDExNiwwLDAsMTMxLDMsMCw4MywxMDAsMiwwLDgzLDQxLAorICAgIDQsOTcsMjE0LDEsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwKKyAgICAzOSwxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsCisgICAgMTEwLDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNSwxMTAsCisgICAgMTAyLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLDExMSw5OSw5OSwxMTcsMTE0LDEwNSwxMTAsMTAzLAorICAgIDMyLDEwMiwxMTQsMTExLDEwOSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsCisgICAgMTAwLDEwOCwxMDEsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLAorICAgIDExMSwxMTQsMTE2LDExNSw0NiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMTEsOTksOTcsMTA4LAorICAgIDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDUsCisgICAgMTAzLDExMCwxMTEsMTE0LDEwMSwxMDAsNDYsMzIsODQsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICAzOSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwKKyAgICAxMDEsMTEwLDExNiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTE1LDMyLDExOSwxMDQsCisgICAgOTcsMTE2LDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMzIsCisgICAgOTcsMTE1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsMzIsMTExLDExMCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMCwzMiwzMiwzMiwzMiwKKyAgICA5OCwxMDEsMTA1LDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw0MCwKKyAgICAxMDEsNDYsMTAzLDQ2LDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw2MCwxMDIsMTE0LDExMSwxMDksMTA4LAorICAgIDEwNSwxMTUsMTE2LDYyLDk2LDk2LDQxLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTA4LAorICAgIDEwMSwxMTgsMTAxLDEwOCwzOSwxMCwzMiwzMiwzMiwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLAorICAgIDExMCwxMTYsMzIsMTE0LDEwMSwxMTIsMTE0LDEwMSwxMTUsMTAxLDExMCwxMTYsMTE1LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMDgsMTExLDk5LDk3LDExNiwxMDUsCisgICAgMTExLDExMCwzMiwxMTYsMTExLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwMiwxMTQsMTExLAorICAgIDEwOSwzMiwxMDUsMTEwLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiw0MCwxMDEsNDYsMTAzLDQ2LAorICAgIDMyLDk2LDk2LDEwMiwxMTQsMTExLDEwOSwzMiw0Niw0NiwxMTIsMTA3LDEwMywzMiwxMDUsMTA5LAorICAgIDExMiwxMTEsMTE0LDExNiwzMiwxMDksMTExLDEwMCw5Niw5NiwzMiwxMTksMTExLDExNywxMDgsMTAwLAorICAgIDMyLDEwNCw5NywxMTgsMTAxLDMyLDk3LDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzksMzIsCisgICAgMTExLDEwMiwzMiw1MCw0MSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsODQsMCwwLAorICAgIDAsNzgsMTE0LDExNiwwLDAsMCw0MSw4LDExNCwxMDksMSwwLDAsMTE0LDExNywKKyAgICAxLDAsMCwxMTQsMTIxLDAsMCwwLDExNCwzMSwwLDAsMCwxMTQsNywwLAorICAgIDAsMCwxMTQsNzMsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwxMTUsMSwwLAorICAgIDAsNDEsOSwxMTQsNjcsMCwwLDAsMTE0LDExNiwxLDAsMCwyMTgsNiwxMDgsCisgICAgMTExLDk5LDk3LDEwOCwxMTUsMTE0LDExNCwxLDAsMCwxMTQsOTksMSwwLDAsMTE0LAorICAgIDE3OSwwLDAsMCw5MCw4LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsOTUsMTE0LDk4LAorICAgIDEsMCwwLDkwLDcsOTksMTE3LDExNiw5NSwxMTEsMTAyLDEwMiwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsOTUsMTA1LAorICAgIDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMTkzLDgsMCwwLDExNSwyNiwwLDAsMCwKICAgICAwLDExLDEyLDEsMTUsMiwyNCwxLDEyLDEsMTgsMSw2LDMsMTIsMSwKLSAgICAyMywxLDYsMSw0LDQsMzUsMyw0MCwyLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMTYsMCwwLDAsMTMsMCwwLDAsNjcsMCwwLDAsMTE1LDI0LAotICAgIDMsMCwwLDEyNCwxLDAsOTcsMCwwLDEyNCwwLDAsOTcsMSwwLDExNiwKLSAgICAxLDAsMTA2LDIsMCwxMDYsMywwLDExNCwzMywwLDExNiw0LDAsOTcsNSwKLSAgICAwLDExMCw2LDAsMTE2LDYsMCw5Nyw1LDAsMTE2LDcsMCwxMTYsMSwwLAotICAgIDEzMSwxLDAsMTI1LDIsMCwxMjAsMTE5LDAsMTE2LDEsMCwxMDYsOCwwLDEwNiwKLSAgICA5LDAsMTMxLDAsMCw2OCw5MywxMDIsMCw5MiwyLDAsMTI1LDMsMCwxMjUsCi0gICAgNCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMiwwLDExNCw2NywKLSAgICAwLDExNiwxMSwwLDEyNCw0LDAsMTAwLDEsMCwxMzEsMiwwLDExNSwxNjksMCwKLSAgICAxMjQsMywwLDExNiwxLDAsMTA2LDEyLDAsMTA3LDYsMCwxMTQsMTM2LDAsMTE2LAotICAgIDEzLDAsMTI0LDQsMCw5NSwxNCwwLDExMywxNjYsMCwxMTYsMCwwLDEwNiwxNSwKLSAgICAwLDEyNCwzLDAsMTMxLDEsMCwxMTQsMTY2LDAsMTE2LDE2LDAsMTI0LDQsMCwKLSAgICA5NSwxNCwwLDExMywxNjYsMCwxMTMsMTY5LDAsMTEzLDY3LDAsMTEzLDY3LDAsODcsCi0gICAgMTE2LDEsMCwxMDYsOCwwLDExNiwxNywwLDI1LDEyNSw1LDAsMTIwLDc2LDAsCi0gICAgMTAwLDI4LDAsNjgsOTMsNjgsMCwxMjUsNiwwLDEyNCw2LDAsMTE2LDEsMCwKLSAgICAxMDYsOCwwLDEwNyw3LDAsMTE0LDIzMiwwLDExNiwxMywwLDEwNiwxOCwwLDEyNCwKLSAgICA2LDAsMTMxLDEsMCwxMjUsNywwLDExMCwxMywwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMjQsNiwwLDI1LDEyNSw3LDAsMTE2LDE5LDAsMTI0LDUsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTMxLDMsMCwxLDExMywxOTMsMCw4NywxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw4LDAsMTAwLDksMCwxMDAsNywKLSAgICAwLDEwMywyLDAsMTAyLDIsMCwxMDAsMTAsMCwxMDAsOSwwLDEwMCw3LDAsCi0gICAgMTAzLDIsMCwxMDIsMiwwLDEwMiwzLDAsMTI1LDgsMCwxMjAsMTg5LDAsMTI0LAotICAgIDgsMCw2OCw5MywxNjksMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwxMTYsCi0gICAgMjAsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEyNCwxMCwwLDY4LDEzMSwKLSAgICAxLDAsMTMxLDEsMCwxMTUsMTA3LDEsMTE2LDIxLDAsMTMwLDEsMCwxMjQsMTAsCi0gICAgMCwxMDAsMTMsMCwyNSwxMjUsMTEsMCwxMjQsOSwwLDExNiwxLDAsMTA2LDgsCi0gICAgMCwxMDcsNiwwLDExNCwxNDksMSwxMTYsMSwwLDEwNiw4LDAsMTI0LDksMCwKLSAgICAyNSwxMjUsMTIsMCw4MCwxMTMsNjQsMSwxMjEsNjAsMCwxMTYsMTMsMCwxMDYsMTgsCi0gICAgMCwxMjQsOSwwLDEzMSwxLDAsMTI1LDEyLDAsMTI0LDksMCwxMDAsMTAsMCwKLSAgICAxMDcsMiwwLDExNCwyMDcsMSwxMDAsMTQsMCwxMTYsMSwwLDEwNiwyMiwwLDEwNywKLSAgICA2LDAsMTE0LDIwNywxLDEyNCwxMCwwLDEwMCwxNSwwLDI1LDEyNSwxMSwwLDExMCwKLSAgICAwLDAsODAsODcsMTEzLDY0LDEsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMjMyLAotICAgIDEsMSwxLDEsMTE5LDY0LDEsODksMTEzLDY0LDEsODgsMTEzLDY0LDEsODcsCi0gICAgMTE2LDIzLDAsMTAwLDE2LDAsMTMxLDEsMCwxMzAsMSwwLDEyMSwxOSwwLDExNiwKLSAgICAxMywwLDEwNiwxOCwwLDEwMCwxNywwLDEzMSwxLDAsMTI1LDEzLDAsODcsMTEwLAotICAgIDI0LDAsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMzgsMiwxLDEsMSwxMDAsCi0gICAgMjcsMCwxMjUsMTMsMCw4OSwxMTAsMSwwLDg4LDExNiwxMywwLDEwNiwxOCwwLAotICAgIDEwMCwxOCwwLDEzMSwxLDAsMTI1LDE0LDAsMTI0LDksMCwxMDAsOCwwLDEwNywKLSAgICAyLDAsMTE0LDEwMCwyLDExNiwxMywwLDEwNiwxOCwwLDEwMCwxOSwwLDEzMSwxLAotICAgIDAsMTI1LDE1LDAsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjAsMCwxMjQsMTUsMCwKLSAgICAxMzEsMywwLDEsMTEwLDAsMCwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMSwwLAotICAgIDEyNCwxMiwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxNywwLAotICAgIDEyNCwxMywwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwxOCwwLAotICAgIDEyNCwxNCwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMiwwLAotICAgIDEyNCwxMSwwLDEzMSwzLDAsMSwxMTYsMTksMCwxMjQsNSwwLDEwMCwyMywwLAotICAgIDExNiwyNSwwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLDMsMCwxLDExNiwxOSwwLAotICAgIDEyNCw1LDAsMTAwLDI0LDAsMTE2LDI2LDAsMTMxLDAsMCwxMzEsMywwLDEsCi0gICAgMTE2LDI3LDAsMTA2LDI4LDAsMTE2LDAsMCwxMDYsMjksMCwxMzEsMCwwLDEzMSwKLSAgICAxLDAsMSwxMjQsOSwwLDEwMCw4LDAsMTA3LDIsMCwxMTQsMjAsMywxMTYsCi0gICAgMzAsMCwxMDYsMzEsMCwxMDAsMjUsMCwxMzEsMSwwLDEsMTAwLDI2LDAsMTE2LAotICAgIDI3LDAsMTA3LDYsMCwxMTQsMjAsMywxMDAsMjksMCwxMTYsMzMsMCw5NSwzNCwKLSAgICAwLDExMywyMCwzLDExMCwwLDAsMTAwLDI3LDAsODMsNDAsMzAsMCwwLDAsCi0gICAgMTE3LDI1MCwwLDAsMCw4MywxMDEsMTE2LDExNywxMTIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCwzMiw5OCwxMjEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwKLSAgICAxMDMsMzIsMTEwLDEwMSwxMDEsMTAwLDEwMSwxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExMCwxMDAsMzIsMTA1LDExMCwKLSAgICAxMDYsMTAxLDk5LDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwxMDksMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LDk3LDEwOCwKLSAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw2NSwxMTUsMzIsMTE1LDEyMSwxMTUsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLAotICAgIDEwMCwzMiwxMDIsMTExLDExNCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAxMTUsMzIsOTcsOTksOTksMTAxLDExNSwxMTUsMzIsOTcsMTEwLDEwMCwzMiw5NSwxMDUsMTA5LAotICAgIDExMiwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ0LDMyLDExNiwxMDQsMTExLDExNSwxMDEsMzIsCi0gICAgMTE2LDExOSwxMTEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwKLSAgICAzMiw5OCwxMDEsMzIsMTAxLDEyMCwxMTIsMTA4LDEwNSw5OSwxMDUsMTE2LDEwOCwxMjEsMzIsMTEyLAotICAgIDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LDExNywzLAotICAgIDAsMCwwLDk1LDEwNSwxMTEsMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE1LDExNyw4LDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDExNSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDExMiwxMTEsMTE1LDEwNSwxMjAsMTE3LDEsMCwwLDAsNDcsMTE3LDIsMCwKLSAgICAwLDAsMTEwLDExNiwxMTcsMSwwLDAsMCw5MiwxMTcsMywwLDAsMCwxMTEsCi0gICAgMTE1LDUwLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDAsMCwwLDExNSwzMywwLDAsMCwxMjQsMCwwLDkzLAotICAgIDIzLDAsMTI1LDEsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMCwKLSAgICAwLDEwNywyLDAsODYsMSwxMTMsMywwLDEwMCwxLDAsODMsNDAsMiwwLAotICAgIDAsMCwxMDUsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsCi0gICAgNDgsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsMTkxLDYsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsMjUsCi0gICAgMCwwLDAsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDEwNSwwLDAsMCwKLSAgICAwLDExNyw3LDAsMCwwLDY5LDc3LDg4LDMyLDcxLDY3LDY3LDEwNSwxLDAsCi0gICAgMCwwLDExNywzMCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLDExMSwxMTUsMTA1LDEyMCwzMiwKLSAgICAxMTEsMTE0LDMyLDExMCwxMTYsMTE3LDcsMCwwLDAsOTUsMTE2LDEwNCwxMTQsMTAxLDk3LAotICAgIDEwMCwxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsNiwKLSAgICAwLDAsMCwxMTksMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsNywwLDAsMCw5NSwxMTksCi0gICAgMTA1LDExMCwxMTQsMTAxLDEwMywxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw4LDAsCi0gICAgMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDExNywxNSwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDExMSwxMTQsMTE1LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNCwKLSAgICAwLDAsMCw0NiwxMTIsMTIxLDExOSwxMTcsNiwwLDAsMCw5NSwxMDAsNDYsMTEyLAotICAgIDEyMSwxMDAsNzgsNDAsNCwwLDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLAotICAgIDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwxMTcsOCwKLSAgICAwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw4NCw0MCwzNSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDgsMCwwLDAsMTExLDExMiwxMTYsCi0gICAgMTA1LDEwOSwxMDUsMTIyLDEwMSwxMTcsMjcsMCwwLDAsNzksODAsODQsNzMsNzcsNzMsCi0gICAgOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsCi0gICAgNzAsNzMsODgsNjksODMsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LDY5LDY3LDc5LAotICAgIDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyMywwLDAsMCwKLSAgICA2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4MywKLSAgICA4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsCi0gICAgMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNyw1LDAsMCwKLSAgICAwLDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsMTA1LDExMCwxMTUsCi0gICAgMTE2LDk3LDExMCw5OSwxMDEsMTE3LDcsMCwwLDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LAotICAgIDExNCwxMTcsMjAsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNywxNSwwLDAsMCw2NiwKLSAgICAxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDksMCwKLSAgICAwLDAsMTA1LDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsMTQsMCwwLDAsCi0gICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDExLDAsMCwwLAotICAgIDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw3LDAsMCwwLAotICAgIDExNSwxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDk3LDEwOCwxMDgsMTE3LAotICAgIDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksMTE0LDExNCwKLSAgICAxMTEsMTE0LDExNyw3LDAsMCwwLDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTcsMTEsCi0gICAgMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LAotICAgIDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSwKLSAgICA5OSw5NywxMTUsMTAxLDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4Myw3MywKLSAgICA3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsNiwwLDAsMCwKLSAgICAxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTgsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsOTUsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSwxMTcsMTUsMCwKLSAgICAwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksCi0gICAgODMsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwKLSAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLDc2LDY4LDQwLAotICAgIDE2LDAsMCwwLDExNywxMCwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTA1LDEwOSwxMTIsOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNiwKLSAgICAxMjEsMTEyLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMiwwLDAsMCw5OCwxMTcsMTA1LDEwOCwKLSAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsOTgsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEwLDAsMCwwLAotICAgIDExMSwxMTUsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDEwLDAsMCwwLDk4LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsMTE3LDE1LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDksMCwwLDAsMTExLAotICAgIDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsMTE2LDEwNCwxMTQsCi0gICAgMTAxLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTQsMCwwLDAsMTE5LAotICAgIDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsCi0gICAgMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxNTQsNiwwLDAsMTE1LDEwNiwwLDAsMCwwLAotICAgIDksNiwxLDYsMiwxMiwxLDksMiw2LDIsMTIsMSwyOCwxLDE1LAotICAgIDEsMTUsMSwxNSwxLDEyLDEsMTUsMSwyMiwyLDEzLDEsMTMsMSwxNSwKLSAgICAxLDE4LDIsMTMsMSwyMCwyLDQ4LDEsMTksMiwzMSwxLDEwLDEsMTUsCi0gICAgMSwxMywxLDQsMiwzLDEsMTUsMiwyNywxLDEzLDEsNSwxLDEzLAotICAgIDEsMTIsMiwxMiwyLDMsMSwxOSwxLDEzLDIsMTEsMSwxNSwyLDEyLAotICAgIDEsMTUsMSwxOSwyLDE2LDEsMTYsMSwxNiwxLDE2LDEsMjIsMiwxOSwKLSAgICAxLDE5LDEsMTIsMSwxMywxLDEyLDEsMTE3LDYsMCwwLDAsOTUsMTE1LAotICAgIDEwMSwxMTYsMTE3LDExMiw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMzYsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxLDExNiwxLDAsMTMxLDAsCi0gICAgMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMDYsNCwwLDExNiw1LDAsCi0gICAgMTA2LDYsMCwxMjQsMiwwLDE0MCwwLDAsMTAzLDEsMCwxMzEsMSwwLDEsCi0gICAgMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDksMCwxMzEsMSwwLDEsCi0gICAgMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDEwLDAsMTMxLDEsMCwxLAotICAgIDExNiwxMSwwLDEwNiwxMiwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMTE2LDAsMTE2LAotICAgIDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDEzLDAsMTMxLDEsMCwxLDExMCwKLSAgICAwLDAsMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE0LDAsMTMxLDEsCi0gICAgMCwxLDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsNTAsMCwwLDAsCi0gICAgNzMsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCi0gICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwxMTcsMiwwLDAsMCwxMTAsMTE2LDc4LDQwLDE1LDAsMCwwLDExNywKLSAgICA2LDAsMCwwLDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDI3LDAsMCwwLDk1LAotICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LAotICAgIDExNSwxMTcsNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTAsMCwwLAotICAgIDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsOSwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE3LDksMCwwLDAsMTA5LDEwMSwKLSAgICAxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsCi0gICAgMTEwLDEwMCwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNCwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMywwLDAsMCw5NSwxMTEsCi0gICAgMTE1LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywyMSwKLSAgICAwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LAotICAgIDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LAotICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTcsMCwwLDAsCisgICAgMjMsMSw2LDEsNCw0LDM1LDMsNDAsMiwxMTQsMTIwLDEsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDY4LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsCisgICAgMCwwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwMCwwLDAsMTA3LDgsCisgICAgMCwxMTQsNDYsMCwxMTYsMiwwLDEwMCwxLDAsMTI0LDAsMCwyMywxMzEsMSwKKyAgICAwLDEzMCwxLDAsMTEwLDAsMCwxMTYsMywwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMjUsMiwwLDEyNCwyLDAsMTA2LDQsMCwxMzEsMCwwLDgzLDQxLDIsNzgsCisgICAgMTIyLDI1LDExMCwxMTEsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDQxLDUsMTE0LDgsMSwKKyAgICAwLDAsMTE0LDEwLDEsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDE3NCwwLDAsCisgICAgMCwxMTQsNiwxLDAsMCw0MSwzLDExNCw2NywwLDAsMCwxMTQsMTc3LDAsCisgICAgMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDE4LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAorICAgIDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSwyMjgsOCwwLDAsMTE1LDEwLAorICAgIDAsMCwwLDAsMSwxNSwxLDEyLDEsMTksMSwxMiwxLDExNCwxMjEsMSwKKyAgICAwLDAsOTksMiwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDEyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwyMzIsMiwwLDAsMTI0LDEsMCw5NywKKyAgICAwLDAsMTI0LDAsMCw5NywxLDAsMTE2LDEsMCwxMDYsMiwwLDEwNiwzLAorICAgIDAsMTE0LDMzLDAsMTE2LDQsMCw5Nyw1LDAsMTEwLDYsMCwxMTYsNiwwLAorICAgIDk3LDUsMCwxMTYsNywwLDExNiwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyMCwKKyAgICAxMzgsMCwxMTYsMSwwLDEwNiw4LDAsMTA2LDksMCwxMzEsMCwwLDY4LDkzLAorICAgIDEyMSwwLDkyLDIsMCwxMjUsMywwLDEyNSw0LDAsMTE2LDEwLDAsMTI0LDQsCisgICAgMCwxMjQsMiwwLDEzMSwyLDAsMTE0LDY3LDAsMTI0LDMsMCwxMTYsMSwwLAorICAgIDEwNiwxMSwwLDEwNyw2LDAsMTE0LDExOCwwLDExNiwxMiwwLDEyNSw1LDAsMTEwLAorICAgIDI3LDAsMTE2LDAsMCwxMDYsMTMsMCwxMjQsMywwLDEzMSwxLDAsMTE0LDY3LAorICAgIDAsMTE2LDE0LDAsMTI1LDUsMCwxMTAsMywwLDExMyw2NywwLDExNiwxNSwwLAorICAgIDEyNCw0LDAsMTI0LDUsMCwxMzEsMiwwLDEyNSw2LDAsMTE2LDE2LDAsMTI0LAorICAgIDYsMCwxMzEsMSwwLDEyNSw3LDAsMTI0LDcsMCwxMDYsMTcsMCwxMjQsNCwKKyAgICAwLDEzMSwxLDAsMSwxMTMsNjcsMCwxMTMsNjcsMCw4NywxMTYsMSwwLDEwNiwKKyAgICA4LDAsMTE2LDE4LDAsMjUsMTI1LDgsMCwxMjAsNzMsMCwxMDAsMjYsMCw2OCwKKyAgICA5Myw2NSwwLDEyNSw5LDAsMTI0LDksMCwxMTYsMSwwLDEwNiw4LDAsMTA3LAorICAgIDcsMCwxMTQsMjQ4LDAsMTE2LDE5LDAsMTI0LDksMCwxMzEsMSwwLDEyNSwxMCwKKyAgICAwLDExMCwxMywwLDExNiwxLDAsMTA2LDgsMCwxMjQsOSwwLDI1LDEyNSwxMCwKKyAgICAwLDExNiwyMCwwLDEyNCw4LDAsMTI0LDksMCwxMjQsMTAsMCwxMzEsMywwLAorICAgIDEsMTEzLDIxMiwwLDg3LDEwMCw1LDAsMTAwLDYsMCwxMDMsMSwwLDEwMiwyLAorICAgIDAsMTAwLDcsMCwxMDAsOCwwLDEwMCw2LDAsMTAzLDIsMCwxMDIsMiwwLAorICAgIDEwMiwyLDAsMTI1LDExLDAsMTIwLDE0NiwwLDEyNCwxMSwwLDY4LDkzLDEyNiwwLAorICAgIDkyLDIsMCwxMjUsMTIsMCwxMjUsMTMsMCwxMTYsMjEsMCwxMDAsOSwwLDEwMCwKKyAgICAxMCwwLDEzMiwwLDAsMTI0LDEzLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDExNSwKKyAgICAxMDgsMSwxMTYsMjIsMCwxMzAsMSwwLDEyNCwxMywwLDEwMCwxMSwwLDI1LDEyNSwKKyAgICAxNCwwLDEyNCwxMiwwLDExNiwxLDAsMTA2LDgsMCwxMDcsNiwwLDExNCwxNTAsCisgICAgMSwxMTYsMSwwLDEwNiw4LDAsMTI0LDEyLDAsMjUsMTI1LDE1LDAsODAsMTEzLAorICAgIDY1LDEsMTIxLDE3LDAsMTE2LDE5LDAsMTI0LDEyLDAsMTMxLDEsMCwxMjUsMTUsCisgICAgMCw4MCw4NywxMTMsNjUsMSw0LDExNiwyMywwLDEwNywxMCwwLDExNCwxOTAsMSwKKyAgICAxLDEsMSwxMTksNjUsMSw4OSwxMTMsNjUsMSw4OCwxMTMsNjUsMSw4NywxMTYsCisgICAgMjMsMCwxMDAsMTIsMCwxMzEsMSwwLDEzMCwxLDAsMTE2LDIwLDAsMTI0LDgsCisgICAgMCwxMDAsMTMsMCwxMjQsMTUsMCwxMzEsMywwLDEsMTE2LDIwLDAsMTI0LDgsCisgICAgMCwxMDAsMTQsMCwxMjQsMTQsMCwxMzEsMywwLDEsMTE2LDIwLDAsMTI0LDgsCisgICAgMCwxMDAsMTUsMCwxMDAsMTYsMCwxMDYsMjQsMCwxMjQsMTMsMCwxMzEsMSwwLAorICAgIDEzMSwzLDAsMSwxMjEsMTYsMCwxMTYsMTksMCwxMDAsMTcsMCwxMzEsMSwwLAorICAgIDEyNSwxNiwwLDg3LDExMCwyNCwwLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDUwLAorICAgIDIsMSwxLDEsMTAwLDE4LDAsMTI1LDE2LDAsODksMTEwLDEsMCw4OCwxMTYsCisgICAgMjAsMCwxMjQsOCwwLDEwMCwxNywwLDEyNCwxNiwwLDEzMSwzLDAsMSwxMTYsCisgICAgMTksMCwxMDAsMTksMCwxMzEsMSwwLDEyNSwxNywwLDExNiwyMCwwLDEyNCw4LAorICAgIDAsMTAwLDE5LDAsMTI0LDE3LDAsMTMxLDMsMCwxLDEyNCwxMiwwLDEwMCw3LAorICAgIDAsMTA3LDIsMCwxMTQsMTM4LDIsMTE2LDE5LDAsMTAwLDIwLDAsMTMxLDEsMCwKKyAgICAxMjUsMTgsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwyMSwwLDEyNCwxOCwwLDEzMSwKKyAgICAzLDAsMSwxMTAsMCwwLDExNiwyMCwwLDEyNCw4LDAsMTAwLDIyLDAsMTE2LAorICAgIDI1LDAsMTMxLDAsMCwxMzEsMywwLDEsMTE2LDI2LDAsMTA2LDI3LDAsMTE2LAorICAgIDAsMCwxMDYsMjgsMCwxMzEsMCwwLDEzMSwxLDAsMSwxMjQsMTIsMCwxMDAsCisgICAgNywwLDEwNywyLDAsMTE0LDIyOCwyLDExNiwyOSwwLDEwNiwzMCwwLDEwMCwyMywKKyAgICAwLDEzMSwxLDAsMSwxMDAsMjQsMCwxMTYsMjYsMCwxMDcsNiwwLDExNCwyMjgsCisgICAgMiwxMDAsMjUsMCwxMTYsMzEsMCw5NSwzMiwwLDExMywyMjgsMiwxMTAsMCwwLAorICAgIDEwMCwxOCwwLDgzLDQxLDI3LDEyMiwyNTAsODMsMTAxLDExNiwxMTcsMTEyLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwNSwxMTAsMTAzLDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDk4LDExNywxMDUsMTA4LAorICAgIDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLAorICAgIDMyLDEwNSwxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMTA5LDEwLAorICAgIDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTA4LDExMSwKKyAgICA5OCw5NywxMDgsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsNjUsMTE1LDMyLDExNSwxMjEsMTE1LDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwKKyAgICAxMDEsMTAwLDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDk5LDk5LDEwMSwxMTUsMTE1LDMyLDk3LDExMCwxMDAsMzIsCisgICAgOTUsMTA1LDEwOSwxMTIsMzIsMTA1LDExNSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiwxMTYsCisgICAgMTExLDMyLDEwOCwxMTEsOTcsMTAwLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDExMSwKKyAgICAxMTUsMTAxLDMyLDExNiwxMTksMTExLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDksCisgICAgMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDEwMSwxMjAsMTEyLDEwOCwxMDUsOTksMTA1LDExNiwxMDgsCisgICAgMTIxLDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwxMTQsNDksMCwwLDAsMTE0LDE2NiwwLDAsMCwyMTgsOCw5OCwxMTcsCisgICAgMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTE0LDE5MSwwLDAsMCw5MCw1LDExMiwxMTEsMTE1LAorICAgIDEwNSwxMjAsMjUwLDEsNDcsMjE4LDIsMTEwLDExNiwyNTAsMSw5Miw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsCisgICAgMCwxMTUsMzMsMCwwLDAsMTI0LDAsMCw5MywyMywwLDEyNSwxLDAsMTE2LAorICAgIDAsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLDAsMCwxMDcsMiwwLDg2LDEsCisgICAgMTEzLDMsMCwxMDAsMSwwLDgzLDQxLDIsMTE0LDI5LDAsMCwwLDc4LDQxLAorICAgIDEsMTE0LDMxLDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwxMzAsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDc3LDAsMCwwLDI0LDksMCwwLDExNSwyLDAsMCwwLDYsCisgICAgMCwxMjIsMjUsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwKKyAgICAxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsMTE0LDYyLDExNCw4NCwwLDAsCisgICAgMCwxMjIsMzAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwzMiwxMTQsMTAxLDExMywKKyAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExMiwxMTEsMTE1LDEwNSwxMjAsMzIsMTExLDExNCwzMiwxMTAsCisgICAgMTE2LDExNCwzLDAsMCwwLDExNCwyNSwwLDAsMCwxMTQsMjEsMCwwLDAsCisgICAgMTE0LDMwLDAsMCwwLDExNCw4NSwwLDAsMCw3OCwxMTQsMTExLDAsMCwwLAorICAgIDkwLDYsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsMTE0LDE5LDEsMCwwLDExNCw2LDAsCisgICAgMCwwLDEyMiw0LDQ2LDExMiwxMjEsMTE5LDEyMiw2LDk1LDEwMCw0NiwxMTIsMTIxLDEwMCwKKyAgICA4NCw0MSw0LDEyMiwzLDk1LDEwNSwxMTEsMTIyLDksOTUsMTE5LDk3LDExNCwxMTAsMTA1LAorICAgIDExMCwxMDMsMTE1LDEyMiw4LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNSwxMjIsNywxMDksCisgICAgOTcsMTE0LDExNSwxMDQsOTcsMTA4LDQxLDMzLDExNCwxMDYsMCwwLDAsMTE0LDcsMCwKKyAgICAwLDAsMTE0LDExNywwLDAsMCwxMTQsMTE4LDAsMCwwLDExNCwxMjAsMCwwLAorICAgIDAsMTE0LDIzMCwwLDAsMCwxMTQsMTE5LDAsMCwwLDExNCw2NiwwLDAsMCwKKyAgICAxMTQsNzMsMCwwLDAsMjE4LDUsMTA1LDExNiwxMDEsMTA5LDExNSwxMTQsMTkyLDAsMCwKKyAgICAwLDExNCwxNTcsMCwwLDAsMTE0LDgsMSwwLDAsMTE0LDE2MiwwLDAsMCwKKyAgICAxMTQsMTUsMSwwLDAsMTE0LDI0MywwLDAsMCwxMTQsMTc0LDAsMCwwLDExNCwKKyAgICAyNTMsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwxMjEsMSwwLDAsMTE0LDYxLAorICAgIDAsMCwwLDIxOCwzLDk3LDEwOCwxMDgsMTE0LDEwMCwwLDAsMCwxMTQsMTUzLDAsCisgICAgMCwwLDExNCwyNiwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDU1LDEsMCwKKyAgICAwLDExNCwxOTcsMCwwLDAsMTE0LDExOCwxLDAsMCwxMTQsMTM0LDAsMCwwLAorICAgIDExNCwyMjMsMCwwLDAsMTE0LDE4LDEsMCwwLDExNCwyMiwxLDAsMCw0MSwKKyAgICAxOSwyMTgsMTAsMTE1LDEyMSwxMTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjE4LDExLDk1LAorICAgIDEwNSwxMDksMTEyLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDExLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDE3OSwwLDAsCisgICAgMCwxMTQsMTY5LDAsMCwwLDExNCwxNzcsMCwwLDAsMTE0LDE3OCwwLDAsMCwKKyAgICA5MCwxMSwxMTUsMTAxLDEwOCwxMDIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTIsOTgsCisgICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTEwLDk3LDEwOSwxMDEsOTAsMTQsOTgsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTAsMTExLDExNSw5NSwKKyAgICAxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSw5MCwxMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKKyAgICA5NSwxMTEsMTE1LDExNCwyMSwwLDAsMCwxMTQsMjUsMCwwLDAsOTAsOSwxMTEsCisgICAgMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDkwLDEzLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTQsMTE5LDEwMSw5NywxMDcsMTE0LDEwMSwxMDIsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDYsOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwyMzYsOCwwLAorICAgIDAsMTE1LDEwOCwwLDAsMCwwLDksNiwxLDYsMiwxMiwxLDksMiwKKyAgICA2LDMsMTIsMSwyOCwxLDE1LDEsMTUsMSw5LDEsMTUsMSw5LDIsCisgICAgMywxLDE1LDEsMTIsMSwyMCwzLDEzLDEsMTMsMSwxNSwxLDE1LDIsCisgICAgMTMsMSwyMCwzLDMzLDEsMTksMiwzMSwxLDEwLDEsMTUsMSwxMywxLAorICAgIDQsMiwzLDEsMTIsMSw1LDEsMTMsMSwxMiwyLDEyLDEsMTYsMSwKKyAgICAxNiwxLDI1LDMsMywxLDE2LDEsMTMsMiwxMSwxLDE2LDMsMTIsMSwKKyAgICAxNiwzLDEyLDEsMTIsMSwxOSwzLDE5LDEsMTksMSwxMiwxLDEzLDEsCisgICAgMTIsMSwxMTQsMTMwLDEsMCwwLDk5LDIsMCwwLDAsMCwwLDAsMCwKKyAgICAzLDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNiwwLDAsCisgICAgMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLDEsMTE2LDEsCisgICAgMCwxMzEsMCwwLDEyNSwyLDAsMTE2LDIsMCwxMDYsMywwLDEwNiw0LDAsCisgICAgMTE2LDUsMCwxMDYsNiwwLDEyNCwyLDAsMTQwLDAsMCwxMDMsMSwwLDEzMSwKKyAgICAxLDAsMSwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsOSwwLDEzMSwKKyAgICAxLDAsMSwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTAsMCwxMzEsCisgICAgMSwwLDEsMTE2LDExLDAsMTA2LDEyLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwKKyAgICAxMTYsMCwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTMsMCwxMzEsMSwKKyAgICAwLDEsMTEwLDAsMCwxMTYsMiwwLDEwNiw3LDAsMTA2LDgsMCwxMTYsMTQsCisgICAgMCwxMzEsMSwwLDEsMTAwLDIsMCw4Myw0MSwzLDEyMiw1MCw3MywxMTAsMTE1LAorICAgIDExNiw5NywxMDgsMTA4LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LAorICAgIDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ2LDExNCwKKyAgICAxMjQsMSwwLDAsNzgsNDEsMTUsMTE0LDEzMCwxLDAsMCwxMTQsMjM2LDAsMCwKKyAgICAwLDExNCw3LDAsMCwwLDExNCw3NCwxLDAsMCwxMTQsMTk3LDAsMCwwLAorICAgIDExNCw4MiwxLDAsMCwxMTQsOTYsMSwwLDAsMTE0LDEwMSwxLDAsMCwxMTQsCisgICAgMjIzLDAsMCwwLDExNCw4LDEsMCwwLDExNCwxNSwxLDAsMCwxMTQsMywKKyAgICAwLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDE4LDEsMCwwLDExNCw2OSwxLAorICAgIDAsMCw0MSwzLDExNCwxMjgsMSwwLDAsMTE0LDEyOSwxLDAsMCw5MCwxNywKICAgICAxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDExNSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLAotICAgIDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsCi0gICAgOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsCi0gICAgMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDIzMyw2LDAsMCwxMTUsMTYsCisgICAgMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDIxOCw4LDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LDY3LDksMCwwLDExNSwxNiwKICAgICAwLDAsMCwwLDIsMTMsMSw5LDEsMjgsMSwxNiwxLDE2LDEsMTUsCi0gICAgMSwxOSwxLDExNyw4LDAsMCwwLDk1LDEwNSwxMTAsMTE1LDExNiw5NywxMDgsMTA4LAotICAgIDc4LDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTE5LDEwNSwxMTAsMTE3LDYsCi0gICAgMCwwLDAsOTksMTIxLDEwMywxMTksMTA1LDExMCwxMTcsNiwwLDAsMCwxMDAsOTcsCi0gICAgMTE0LDExOSwxMDUsMTEwLDQwLDc0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDk1LAotICAgIDEwMCwxMTEsOTksOTUsOTUsMTE3LDI3LDAsMCwwLDk1LDY3LDY1LDgzLDY5LDk1LAotICAgIDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LDgwLDc2LDY1LDg0LAotICAgIDcwLDc5LDgyLDc3LDgzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwxMTcsNywwLDAsMCw5NSwKLSAgICAxMTksOTUsMTA4LDExMSwxMTAsMTAzLDExNyw3LDAsMCwwLDk1LDExNCw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LAotICAgIDExMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsMTgsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksCi0gICAgMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxMiwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsMTMsMCwwLDAsOTUsMTE5LAotICAgIDExNCwxMDUsMTE2LDEwMSw5NSw5NywxMTYsMTExLDEwOSwxMDUsOTksMTE3LDUsMCwwLDAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTE3LDQsMCwwLDAsMTE2LDEyMSwxMTIsMTAxLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDk5LDExMSwxMDAsMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDEwLDAsMCwwLDExMCwKLSAgICAxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTUsMTE3LDEyLDAsMCwwLAotICAgIDk1LDk4LDEwOCwxMTEsOTksMTA3LDEwNSwxMTAsMTAzLDk1LDExMSwxMTAsMTE3LDEyLDAsMCwKLSAgICAwLDgyLDExNywxMTAsMTE2LDEwNSwxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTQsMCwKLSAgICAwLDAsOTUsNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNywKLSAgICAxMTcsMTYsMCwwLDAsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNzYsMTExLDk5LDEwNywxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDE5LDAsMCwwLDk1LAotICAgIDEwOCwxMTEsOTksMTA3LDk1LDExNywxMTAsMTA4LDExMSw5OSwxMDcsOTUsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNywzLDAsMCwwLDExMSwxMTQsMTAwLDExNywxNywwLDAsMCw5NSw4Miw2NSwKLSAgICA4Nyw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTcsNSwKLSAgICAwLDAsMCw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDUsMCwwLDAsMTE0LDk3LDExMCwKLSAgICAxMDMsMTAxLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSw3Myw2Nyw5NSw2Niw4OSwKLSAgICA4NCw2OSw4MywxMTcsOCwwLDAsMCw5NSw4MCw4OSw2Nyw2NSw2Nyw3Miw2OSwKLSAgICAxMTcsMTUsMCwwLDAsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsCi0gICAgNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LAotICAgIDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2NiwKLSAgICA4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICAxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTcsMCwwLDAsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsCi0gICAgMTcsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTUsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LDEwOCwxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwKLSAgICAxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwKLSAgICAwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNywxNiwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywyMSwwLDAsMCwKLSAgICA4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDExNywxMiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LAotICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDIwLDAsMCwKLSAgICAwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxOCwwLDAsMCw2OSw4OCw4NCw2OSw3OCw4MywKLSAgICA3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMTksMCwwLAotICAgIDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwKLSAgICAxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLAotICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTgsMCwwLDAsOTUsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LAotICAgIDExNywxMywwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDEyLDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsOCwwLDAsMCw5NSw2OSw4Miw4Miw5NSw3NywKLSAgICA4Myw3MSwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNywxNCwKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMTcsMTEsMCwwLDAsOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTcsMTYsMCwwLDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LAotICAgIDExMSwxMDksMTA4LDEwNSwxMTUsMTE2LDExNywxNywwLDAsMCw5NSw5OSw5NywxMDgsOTksCi0gICAgOTUsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNywyNywwLDAsCi0gICAgMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwKLSAgICAxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDEwLDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDExNyw2LDAsMCwwLAotICAgIDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDgsMCwwLDAsOTUsMTA1LDExMCwxMTUsMTE2LAotICAgIDk3LDEwOCwxMDgsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDYyLDgsMCwwLDAsMTE1LDEzMiwwLDAsMCw2LDIxLDYsMywxMiwxMywKLSAgICAxMiwxNiwxMiwxMywxMiwxMiwxMiwxMiwxMiwxMCwxMiw2LDEyLDcsMTUsMjIsCi0gICAgMTIsOCwxNSwzLDEyLDEyLDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwyMywKLSAgICAxMiwxOSwxMiwyMCwxMiwxMDAsMzQsMSwzNywyLDYsMiw5LDIsOSwxLAotICAgIDksMiwxNSwyNywxMiwyMywxMiwxOSwxOCw4LDEyLDEzLDEyLDExLDEyLDU1LAotICAgIDEyLDE4LDEyLDExLDEyLDExLDEyLDE3LDE5LDU3LDE5LDU0LDE5LDUwLDE5LDgzLAotICAgIDIyLDEzNCwxOSwyOSwyNSw0OSwyNSwyNSw2LDMsMTksNDUsMTksNTUsMTksMTgsCi0gICAgMTksOTEsMTksMTI4LDE5LDEzLDEyLDksMTIsMTcsMTIsMTcsNiwyLDEyLDUwLAotICAgIDEyLDEzLDE4LDI0LDEyLDM0LDEyLDE1LDEyLDExLDI0LDM2LDEyLDc5LAorICAgIDEsMTksMSwxMTQsMTMxLDEsMCwwLDQxLDMsMTIyLDMsMTE5LDEwNSwxMTAsMTE0LAorICAgIDEsMCwwLDAsMTE0LDIsMCwwLDAsNDEsOTAsMTE0LDU5LDAsMCwwLAorICAgIDExNCwxMCwwLDAsMCwxMTQsMTEsMCwwLDAsMTE0LDE3LDAsMCwwLDExNCwKKyAgICAxOSwwLDAsMCwxMTQsMjgsMCwwLDAsMTE0LDM4LDAsMCwwLDExNCwzOSwKKyAgICAwLDAsMCwxMTQsNDMsMCwwLDAsMTE0LDQ0LDAsMCwwLDExNCw0NiwwLAorICAgIDAsMCwxMTQsNTUsMCwwLDAsMTE0LDY1LDAsMCwwLDExNCw2OCwwLDAsCisgICAgMCwxMTQsNjYsMCwwLDAsMjE4LDgsOTUsOTUsOTksMTExLDEwMCwxMDEsOTUsOTUsCisgICAgMTE0LDE5MywwLDAsMCwxMTQsNjksMCwwLDAsMTE0LDEwOSwwLDAsMCwxMTQsCisgICAgOTIsMCwwLDAsMTE0LDk5LDAsMCwwLDExNCw4MiwwLDAsMCwxMTQsODMsCisgICAgMCwwLDAsMTE0LDEwMiwwLDAsMCwxMTQsMTAzLDAsMCwwLDExNCwxMDUsMCwKKyAgICAwLDAsMTE0LDExMiwwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxNSwwLDAsCisgICAgMCwxMTQsMTg1LDAsMCwwLDExNCwxNCwwLDAsMCwxMTQsMTgsMCwwLDAsCisgICAgOTAsMTcsOTUsODIsNjUsODcsOTUsNzcsNjUsNzEsNzMsNjcsOTUsNzgsODUsNzcsCisgICAgNjYsNjksODIsMTE0LDEyNSwwLDAsMCwxMTQsMTM0LDAsMCwwLDExNCwxMTksMCwKKyAgICAwLDAsMTE0LDEyMCwwLDAsMCwxMTQsMTMyLDAsMCwwLDExNCwxMzUsMCwwLAorICAgIDAsMTE0LDE0MiwwLDAsMCwxMTQsMTQ0LDAsMCwwLDExNCwxNTIsMCwwLDAsCisgICAgMTE0LDE1NiwwLDAsMCwxMTQsMTYxLDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LAorICAgIDE3MiwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCwxOTAsMCwwLDAsMTE0LDE5NSwKKyAgICAwLDAsMCwxMTQsMTk4LDAsMCwwLDExNCwyMDMsMCwwLDAsMTE0LDIxMSwwLAorICAgIDAsMCwxMTQsMjEyLDAsMCwwLDExNCwyMTYsMCwwLDAsMTE0LDE3MywwLDAsCisgICAgMCwyMTgsNiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE0LDIzNywwLDAsMCwxMTQsMjM1LAorICAgIDAsMCwwLDExNCwyNDMsMCwwLDAsMTE0LDE3NCwwLDAsMCwxMTQsOCwxLAorICAgIDAsMCwxMTQsMTUsMSwwLDAsMTE0LDE4LDEsMCwwLDExNCwyOCwxLDAsCisgICAgMCwxMTQsMjksMSwwLDAsMTE0LDQ0LDEsMCwwLDExNCw0NywxLDAsMCwKKyAgICAxMTQsNTEsMSwwLDAsMTE0LDU1LDEsMCwwLDExNCw1MiwxLDAsMCwxMTQsCisgICAgNTYsMSwwLDAsMTE0LDI1MCwwLDAsMCwxMTQsNjksMSwwLDAsMTE0LDgyLAorICAgIDEsMCwwLDExNCw5NywxLDAsMCwxMTQsMTAwLDEsMCwwLDExNCwyNDQsMCwKKyAgICAwLDAsMTE0LDEwNCwxLDAsMCwxMTQsMTEzLDEsMCwwLDExNCwxMDUsMSwwLAorICAgIDAsMTE0LDEwNywxLDAsMCwxMTQsMTA4LDEsMCwwLDExNCwxMDksMSwwLDAsCisgICAgMTE0LDExNSwxLDAsMCwxMTQsMTE3LDEsMCwwLDExNCwyMzYsMCwwLDAsMTE0LAorICAgIDEyMCwxLDAsMCwxMTQsMTIxLDEsMCwwLDExNCwxMzAsMSwwLDAsMTE0LDEzMSwKKyAgICAxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwyMTgsOCw2MCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA2Miw4LDAsMCwwLDExNSwxNjYsMCwwLDAsNiwxNyw2LDMsMTIsMTIsCisgICAgMTIsNSwxMiw1LDEyLDYsMTIsMTIsMTIsMTAsMTIsOSwxMiw1LDEyLDcsCisgICAgMTUsMjIsMTIsOCwxMiw0LDE1LDQsMTksMjAsNiwyLDYsMywyMiw0LAorICAgIDE5LDY4LDE5LDIxLDE5LDE5LDEyLDE5LDEyLDIwLDEyLDExMywyMiwxLDE4LDIsCisgICAgNiwyLDksMiw5LDEsOSwyLDE1LDI3LDEyLDIzLDEyLDE5LDEyLDEyLAorICAgIDE4LDgsMTIsMTgsMTIsMTEsMTIsMTEsMTIsMTMsMTIsMTMsMjEsNTUsMjEsMTIsCisgICAgMTgsMTAsMTIsMTQsMTIsMzQsMTksMjcsMTksMTAyLDI0LDIyLDksMywxMiwxLAorICAgIDE1LDYzLDE4LDQ1LDE5LDI1MSwxOSw2MywxOSw1OSwxOSw2MCwxOSwyNSwyMiwxMTAsCisgICAgMTksMzEsMjUsNDMsMjUsMTYsNiwzLDE5LDQ4LDE5LDU3LDE5LDI3LDE5LDEyNCwKKyAgICAxOSwxNDcsMTksMTMsMTIsOSwxNSw0MSwxMiwxNyw2LDEsMTAsMiwxMiwyNywKKyAgICAxMiw2LDE4LDI0LDEyLDMyLDEyLDE1LDEyLDExLDI0LDM1LDEyLDgsMTIsODcsCiB9OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL21hcnNoYWwuYyBiL1B5dGhvbi9tYXJzaGFsLmMKaW5kZXggY2MxNzMyOS4uZGM1NDExYyAxMDA2NDQKLS0tIGEvUHl0aG9uL21hcnNoYWwuYworKysgYi9QeXRob24vbWFyc2hhbC5jCkBAIC0xLDggKzEsMTAgQEAKIAogLyogV3JpdGUgUHl0aG9uIG9iamVjdHMgdG8gZmlsZXMgYW5kIHJlYWQgdGhlbSBiYWNrLgotICAgVGhpcyBpcyBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSBvbmx5OwotICAgYSB0cnVlIHBlcnNpc3RlbnQgc3RvcmFnZSBmYWNpbGl0eSB3b3VsZCBiZSBtdWNoIGhhcmRlciwgc2luY2UKLSAgIGl0IHdvdWxkIGhhdmUgdG8gdGFrZSBjaXJjdWxhciBsaW5rcyBhbmQgc2hhcmluZyBpbnRvIGFjY291bnQuICovCisgICBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSwKKyAgIGV2ZW4gdGhvdWdoIGRpY3RzLCBsaXN0cywgc2V0cyBhbmQgZnJvemVuc2V0cywgbm90IGNvbW1vbmx5IHNlZW4gaW4KKyAgIGNvZGUgb2JqZWN0cywgYXJlIHN1cHBvcnRlZC4KKyAgIFZlcnNpb24gMyBvZiB0aGlzIHByb3RvY29sIHByb3Blcmx5IHN1cHBvcnRzIGNpcmN1bGFyIGxpbmtzCisgICBhbmQgc2hhcmluZy4gKi8KIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKQEAgLTMxLDE2ICszMywxNCBAQAogI2RlZmluZSBUWVBFX1NUT1BJVEVSICAgICAgICAgICAnUycKICNkZWZpbmUgVFlQRV9FTExJUFNJUyAgICAgICAgICAgJy4nCiAjZGVmaW5lIFRZUEVfSU5UICAgICAgICAgICAgICAgICdpJwotLyogVFlQRV9JTlQ2NCBpcyBkZXByZWNhdGVkLiBJdCBpcyBub3QKLSAgIGdlbmVyYXRlZCBhbnltb3JlLCBhbmQgc3VwcG9ydCBmb3IgcmVhZGluZyBpdAotICAgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQuICovCi0jZGVmaW5lIFRZUEVfSU5UNjQgICAgICAgICAgICAgICdJJwogI2RlZmluZSBUWVBFX0ZMT0FUICAgICAgICAgICAgICAnZicKICNkZWZpbmUgVFlQRV9CSU5BUllfRkxPQVQgICAgICAgJ2cnCiAjZGVmaW5lIFRZUEVfQ09NUExFWCAgICAgICAgICAgICd4JwogI2RlZmluZSBUWVBFX0JJTkFSWV9DT01QTEVYICAgICAneScKICNkZWZpbmUgVFlQRV9MT05HICAgICAgICAgICAgICAgJ2wnCiAjZGVmaW5lIFRZUEVfU1RSSU5HICAgICAgICAgICAgICdzJworI2RlZmluZSBUWVBFX0lOVEVSTkVEICAgICAgICAgICAndCcKKyNkZWZpbmUgVFlQRV9SRUYgICAgICAgICAgICAgICAgJ3InCiAjZGVmaW5lIFRZUEVfVFVQTEUgICAgICAgICAgICAgICcoJwogI2RlZmluZSBUWVBFX0xJU1QgICAgICAgICAgICAgICAnWycKICNkZWZpbmUgVFlQRV9ESUNUICAgICAgICAgICAgICAgJ3snCkBAIC00OSw2ICs0OSwxMyBAQAogI2RlZmluZSBUWVBFX1VOS05PV04gICAgICAgICAgICAnPycKICNkZWZpbmUgVFlQRV9TRVQgICAgICAgICAgICAgICAgJzwnCiAjZGVmaW5lIFRZUEVfRlJPWkVOU0VUICAgICAgICAgICc+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+cmVmcywgbik7CisgICAgICAgIGlmICh2ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoaW52YWxpZCByZWZlcmVuY2UpIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9JTkNSRUYodik7CisgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLyogQm9ndXMgZGF0YSBnb3Qgd3JpdHRlbiwgd2hpY2ggaXNuJ3QgaWRlYWwuCiAgICAgICAgICAgIFRoaXMgd2lsbCBsZXQgeW91IGtlZXAgd29ya2luZyBhbmQgcmVjb3Zlci4gKi8KICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmtub3duIHR5cGUgY29kZSkiKTsKLSAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgYnJlYWs7CiAKICAgICB9CkBAIC0xMTM5LDIzICsxMzg4LDMzIEBACiBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoRklMRSAqZnApCiB7CiAgICAgUkZJTEUgcmY7CisgICAgaW50IHJlczsKICAgICBhc3NlcnQoZnApOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLmVuZCA9IHJmLnB0ciA9IE5VTEw7Ci0gICAgcmV0dXJuIHJfc2hvcnQoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfc2hvcnQoJnJmKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBsb25nCiBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShGSUxFICpmcCkKIHsKICAgICBSRklMRSByZjsKKyAgICBsb25nIHJlczsKICAgICByZi5mcCA9IGZwOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOwotICAgIHJldHVybiByX2xvbmcoJnJmKTsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJlcyA9IHJfbG9uZygmcmYpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgIHJldHVybiByZXM7CiB9CiAKICNpZmRlZiBIQVZFX0ZTVEFUCkBAIC0xMjE0LDIyICsxNDczLDM2IEBACiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOwogICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7CisgICAgcmYuYnVmID0gTlVMTDsKKyAgICByZi5yZWZzID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmYucmVmcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByX29iamVjdCgmcmYpOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICBpZiAocmYuYnVmICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeU9iamVjdCAqCi1QeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqc3RyLCBQeV9zc2l6ZV90IGxlbikKK1B5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjb25zdCBjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQogewogICAgIFJGSUxFIHJmOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgcmYuZnAgPSBOVUxMOwogICAgIHJmLnJlYWRhYmxlID0gTlVMTDsKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICByZi5wdHIgPSBzdHI7Ci0gICAgcmYuZW5kID0gc3RyICsgbGVuOworICAgIHJmLnB0ciA9IChjaGFyICopc3RyOworICAgIHJmLmVuZCA9IChjaGFyICopc3RyICsgbGVuOworICAgIHJmLmJ1ZiA9IE5VTEw7CiAgICAgcmYuZGVwdGggPSAwOworICAgIHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZi5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJfb2JqZWN0KCZyZik7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyNDgsNyArMTUyMSwxMyBAQAogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOworICAgIGlmICh2ZXJzaW9uID49IDMpIHsKKyAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlCisgICAgICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CisgICAgUHlfWERFQ1JFRih3Zi5yZWZzKTsKICAgICBpZiAod2Yuc3RyICE9IE5VTEwpIHsKICAgICAgICAgY2hhciAqYmFzZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopd2Yuc3RyKTsKICAgICAgICAgaWYgKHdmLnB0ciAtIGJhc2UgPiBQWV9TU0laRV9UX01BWCkgewpAQCAtMTMyMCw2ICsxNTk5LDggQEAKICAgICAgKiBNYWtlIGEgY2FsbCB0byB0aGUgcmVhZCBtZXRob2QsIGJ1dCByZWFkIHplcm8gYnl0ZXMuCiAgICAgICogVGhpcyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgb2JqZWN0IHBhc3NlZCBpbiBhdCBsZWFzdAogICAgICAqIGhhcyBhIHJlYWQgbWV0aG9kIHdoaWNoIHJldHVybnMgYnl0ZXMuCisgICAgICogVGhpcyBjYW4gYmUgcmVtb3ZlZCBpZiB3ZSBndWFyYW50ZWUgZ29vZCBlcnJvciBoYW5kbGluZworICAgICAqIGZvciByX3N0cmluZygpCiAgICAgICovCiAgICAgZGF0YSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfcmVhZCwgImkiLCAwKTsKICAgICBpZiAoZGF0YSA9PSBOVUxMKQpAQCAtMTMzNSw3ICsxNjE2LDE1IEBACiAgICAgICAgIHJmLmZwID0gTlVMTDsKICAgICAgICAgcmYucmVhZGFibGUgPSBmOwogICAgICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKLSAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKKyAgICAgICAgcmYuYnVmID0gTlVMTDsKKyAgICAgICAgaWYgKChyZi5yZWZzID0gUHlMaXN0X05ldygwKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcmVhZF9vYmplY3QoJnJmKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKKyAgICAgICAgICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICB9CiAgICAgUHlfREVDUkVGKGRhdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMzkyLDggKzE2ODEsMTEgQEAKICAgICByZi5wdHIgPSBzOwogICAgIHJmLmVuZCA9IHMgKyBuOwogICAgIHJmLmRlcHRoID0gMDsKKyAgICBpZiAoKHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnApOworICAgIFB5X0RFQ1JFRihyZi5yZWZzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNDMzLDYgKzE3MjUsNyBAQAogdmVyc2lvbiAtLSBpbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZVxuXAogICAgIGhpc3RvcmljYWwgZm9ybWF0LCB2ZXJzaW9uIDEgc2hhcmVzIGludGVybmVkIHN0cmluZ3MgYW5kIHZlcnNpb24gMlxuXAogICAgIHVzZXMgYSBiaW5hcnkgZm9ybWF0IGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuXAorICAgIFZlcnNpb24gMyBzaGFyZXMgY29tbW9uIG9iamVjdCByZWZlcmVuY2VzIChOZXcgaW4gdmVyc2lvbiAzLjQpLlxuXAogXG5cCiBGdW5jdGlvbnM6XG5cCiBcblwKZGlmZiAtLWdpdCBhL1B5dGhvbi9teXN0cnRvdWwuYyBiL1B5dGhvbi9teXN0cnRvdWwuYwppbmRleCA4YTU0Y2JmLi45ODQyOWQ0IDEwMDY0NAotLS0gYS9QeXRob24vbXlzdHJ0b3VsLmMKKysrIGIvUHl0aG9uL215c3RydG91bC5jCkBAIC05MiwxMSArOTIsMTEgQEAKICoqICAgICAgICAgICAgICBleGNlcHRpb25zIC0gd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0uCiAqLwogdW5zaWduZWQgbG9uZwotUHlPU19zdHJ0b3VsKHJlZ2lzdGVyIGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCitQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7IC8qIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gKi8KLSAgICByZWdpc3RlciBpbnQgYzsgICAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KLSAgICByZWdpc3RlciBpbnQgb3ZsaW1pdDsgICAgICAgLyogcmVxdWlyZWQgZGlnaXRzIHRvIG92ZXJmbG93ICovCisgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOyAvKiByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uICovCisgICAgaW50IGM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCisgICAgaW50IG92bGltaXQ7ICAgICAgIC8qIHJlcXVpcmVkIGRpZ2l0cyB0byBvdmVyZmxvdyAqLwogCiAgICAgLyogc2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlICovCiAgICAgd2hpbGUgKCpzdHIgJiYgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqc3RyKSkpCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKnN0cikpKQogICAgICAgICAgICAgICAgICAgICArK3N0cjsKICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDB4ICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAxNikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMG8gKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBiICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAvKiBjYXRjaCBzaWxseSBiYXNlcyAqLwogICAgIGlmIChiYXNlIDwgMiB8fCBiYXNlID4gMzYpIHsKICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgICAgIGlmIChvdmxpbWl0ID4gMCkgLyogbm8gb3ZlcmZsb3cgY2hlY2sgcmVxdWlyZWQgKi8KICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyBjOwogICAgICAgICBlbHNlIHsgLyogcmVxdWlyZXMgb3ZlcmZsb3cgY2hlY2sgKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdGVtcF9yZXN1bHQ7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXBfcmVzdWx0OwogCiAgICAgICAgICAgICBpZiAob3ZsaW1pdCA8IDApIC8qIGd1YXJhbnRlZWQgb3ZlcmZsb3cgKi8KICAgICAgICAgICAgICAgICBnb3RvIG92ZXJmbG93ZWQ7CkBAIC0yMzksNyArMjM5LDcgQEAKIAogICAgIC8qIHNldCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBsYXN0IGNoYXJhY3RlciBzY2FubmVkICovCiAgICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgIC8qIHNwb29sIHRocm91Z2ggcmVtYWluaW5nIGRpZ2l0IGNoYXJhY3RlcnMgKi8KICAgICAgICAgd2hpbGUgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0gPCBiYXNlKQogICAgICAgICAgICAgKytzdHI7Ci0gICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICB9CiAgICAgZXJybm8gPSBFUkFOR0U7CiAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAjZGVmaW5lIFBZX0FCU19MT05HX01JTiAgICAgICAgICgwLSh1bnNpZ25lZCBsb25nKUxPTkdfTUlOKQogCiBsb25nCi1QeU9TX3N0cnRvbChjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQorUHlPU19zdHJ0b2woY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKIHsKICAgICBsb25nIHJlc3VsdDsKICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CmRpZmYgLS1naXQgYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaCBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCmluZGV4IDJkNmJjZGEuLmY5MGExN2EgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCisrKyBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCkBAIC02OCw3ICs2OCw3IEBACiAgICAgJiZUQVJHRVRfQklOQVJZX09SLAogICAgICYmVEFSR0VUX0lOUExBQ0VfUE9XRVIsCiAgICAgJiZUQVJHRVRfR0VUX0lURVIsCi0gICAgJiZUQVJHRVRfU1RPUkVfTE9DQUxTLAorICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmVEFSR0VUX1BSSU5UX0VYUFIsCiAgICAgJiZUQVJHRVRfTE9BRF9CVUlMRF9DTEFTUywKICAgICAmJlRBUkdFVF9ZSUVMRF9GUk9NLApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgJiZUQVJHRVRfTElTVF9BUFBFTkQsCiAgICAgJiZUQVJHRVRfU0VUX0FERCwKICAgICAmJlRBUkdFVF9NQVBfQURELAotICAgICYmX3Vua25vd25fb3Bjb2RlLAorICAgICYmVEFSR0VUX0xPQURfQ0xBU1NERVJFRiwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKZGlmZiAtLWdpdCBhL1B5dGhvbi9wZWVwaG9sZS5jIGIvUHl0aG9uL3BlZXBob2xlLmMKaW5kZXggNWQ1MzY3Ny4uNDE4NTQ2MiAxMDA2NDQKLS0tIGEvUHl0aG9uL3BlZXBob2xlLmMKKysrIGIvUHl0aG9uL3BlZXBob2xlLmMKQEAgLTI3NSw2ICsyNzUsNyBAQAogICAgIGxlbl9jb25zdHMgPSBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKTsKICAgICBpZiAoUHlMaXN0X0FwcGVuZChjb25zdHMsIG5ld2NvbnN0KSkgewogICAgICAgICBQeV9ERUNSRUYobmV3Y29uc3QpOworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUHlfREVDUkVGKG5ld2NvbnN0KTsKQEAgLTMyNywzNyArMzI4LDYgQEAKICAgICByZXR1cm4gYmxvY2tzOwogfQogCi0vKiBIZWxwZXIgdG8gcmVwbGFjZSBMT0FEX05BTUUgTm9uZS9UcnVlL0ZhbHNlIHdpdGggTE9BRF9DT05TVAotICAgUmV0dXJuczogMCBpZiBubyBjaGFuZ2UsIDEgaWYgY2hhbmdlLCAtMSBpZiBlcnJvciAqLwotc3RhdGljIGludAotbG9hZF9nbG9iYWwodW5zaWduZWQgY2hhciAqY29kZXN0ciwgUHlfc3NpemVfdCBpLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY29uc3RzKQotewotICAgIFB5X3NzaXplX3QgajsKLSAgICBQeU9iamVjdCAqb2JqOwotICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChzdHJjbXAobmFtZSwgIk5vbmUiKSA9PSAwKQotICAgICAgICBvYmogPSBQeV9Ob25lOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiVHJ1ZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X1RydWU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJGYWxzZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X0ZhbHNlOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZm9yIChqID0gMDsgaiA8IFB5TGlzdF9HRVRfU0laRShjb25zdHMpOyBqKyspIHsKLSAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShjb25zdHMsIGopID09IG9iaikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoaiA9PSBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKSkgewotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjb25zdHMsIG9iaikgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBhc3NlcnQoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikgPT0gb2JqKTsKLSAgICBjb2Rlc3RyW2ldID0gTE9BRF9DT05TVDsKLSAgICBTRVRBUkcoY29kZXN0ciwgaSwgaik7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIC8qIFBlcmZvcm0gYmFzaWMgcGVlcGhvbGUgb3B0aW1pemF0aW9ucyB0byBjb21wb25lbnRzIG9mIGEgY29kZSBvYmplY3QuCiAgICBUaGUgY29uc3RzIG9iamVjdCBzaG91bGQgc3RpbGwgYmUgaW4gbGlzdCBmb3JtIHRvIGFsbG93IG5ldyBjb25zdGFudHMKICAgIHRvIGJlIGFwcGVuZGVkLgpAQCAtMzkyLDcgKzM2Miw2IEBACiAgICAgUHlfc3NpemVfdCBjb25zdF9zdGFja19zaXplID0gMDsKICAgICBpbnQgaW5fY29uc3RzID0gMDsgIC8qIHdoZXRoZXIgd2UgYXJlIGluIGEgTE9BRF9DT05TVCBzZXF1ZW5jZSAqLwogICAgIHVuc2lnbmVkIGludCAqYmxvY2tzID0gTlVMTDsKLSAgICBjaGFyICpuYW1lOwogCiAgICAgLyogQmFpbCBvdXQgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCAqLwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQpAQCAtNDEzLDggKzM4MiwxMCBAQAogCiAgICAgLyogTWFrZSBhIG1vZGlmaWFibGUgY29weSBvZiB0aGUgY29kZSBzdHJpbmcgKi8KICAgICBjb2Rlc3RyID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoY29kZWxlbik7Ci0gICAgaWYgKGNvZGVzdHIgPT0gTlVMTCkKKyAgICBpZiAoY29kZXN0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdEVycm9yOworICAgIH0KICAgICBjb2Rlc3RyID0gKHVuc2lnbmVkIGNoYXIgKiltZW1jcHkoY29kZXN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY29kZSksIGNvZGVsZW4pOwogCkBAIC00MjgsOCArMzk5LDEwIEBACiAKICAgICAvKiBNYXBwaW5nIHRvIG5ldyBqdW1wIHRhcmdldHMgYWZ0ZXIgTk9QcyBhcmUgcmVtb3ZlZCAqLwogICAgIGFkZHJtYXAgPSAoaW50ICopUHlNZW1fTWFsbG9jKGNvZGVsZW4gKiBzaXplb2YoaW50KSk7Ci0gICAgaWYgKGFkZHJtYXAgPT0gTlVMTCkKKyAgICBpZiAoYWRkcm1hcCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIGdvdG8gZXhpdEVycm9yOworICAgIH0KIAogICAgIGJsb2NrcyA9IG1hcmtibG9ja3MoY29kZXN0ciwgY29kZWxlbik7CiAgICAgaWYgKGJsb2NrcyA9PSBOVUxMKQpAQCAtNDc1LDIwICs0NDgsNiBAQAogICAgICAgICAgICAgICAgIGNvZGVzdHJbaSszXSA9IE5PUDsKICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIC8qIFJlcGxhY2UgTE9BRF9HTE9CQUwvTE9BRF9OQU1FIE5vbmUvVHJ1ZS9GYWxzZQotICAgICAgICAgICAgICAgICAgIHdpdGggTE9BRF9DT05TVCBOb25lL1RydWUvRmFsc2UgKi8KLSAgICAgICAgICAgIGNhc2UgTE9BRF9OQU1FOgotICAgICAgICAgICAgY2FzZSBMT0FEX0dMT0JBTDoKLSAgICAgICAgICAgICAgICBqID0gR0VUQVJHKGNvZGVzdHIsIGkpOwotICAgICAgICAgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5VHVwbGVfR0VUX0lURU0obmFtZXMsIGopKTsKLSAgICAgICAgICAgICAgICBoID0gbG9hZF9nbG9iYWwoY29kZXN0ciwgaSwgbmFtZSwgY29uc3RzKTsKLSAgICAgICAgICAgICAgICBpZiAoaCA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdEVycm9yOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGggPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQ09OU1RfU1RBQ0tfUFVTSF9PUChpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLQogICAgICAgICAgICAgICAgIC8qIFNraXAgb3ZlciBMT0FEX0NPTlNUIHRydWVjb25zdAogICAgICAgICAgICAgICAgICAgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4LiBUaGlzIGltcHJvdmVzCiAgICAgICAgICAgICAgICAgICAgIndoaWxlIDEiIHBlcmZvcm1hbmNlLiAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5YXJlbmEuYyBiL1B5dGhvbi9weWFyZW5hLmMKaW5kZXggMDJhMzFkOC4uMTAzNjAzZiAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5YXJlbmEuYworKysgYi9QeXRob24vcHlhcmVuYS5jCkBAIC03Nyw3ICs3Nyw3IEBACiB7CiAgICAgLyogQWxsb2NhdGUgaGVhZGVyIGFuZCBibG9jayBhcyBvbmUgdW5pdC4KICAgICAgICBhYl9tZW0gcG9pbnRzIGp1c3QgcGFzdCBoZWFkZXIuICovCi0gICAgYmxvY2sgKmIgPSAoYmxvY2sgKiltYWxsb2Moc2l6ZW9mKGJsb2NrKSArIHNpemUpOworICAgIGJsb2NrICpiID0gKGJsb2NrICopUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykgKyBzaXplKTsKICAgICBpZiAoIWIpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGItPmFiX3NpemUgPSBzaXplOwpAQCAtOTIsNyArOTIsNyBAQAogYmxvY2tfZnJlZShibG9jayAqYikgewogICAgIHdoaWxlIChiKSB7CiAgICAgICAgIGJsb2NrICpuZXh0ID0gYi0+YWJfbmV4dDsKLSAgICAgICAgZnJlZShiKTsKKyAgICAgICAgUHlNZW1fRnJlZShiKTsKICAgICAgICAgYiA9IG5leHQ7CiAgICAgfQogfQpAQCAtMTI3LDIwICsxMjcsMjAgQEAKIFB5QXJlbmEgKgogUHlBcmVuYV9OZXcoKQogewotICAgIFB5QXJlbmEqIGFyZW5hID0gKFB5QXJlbmEgKiltYWxsb2Moc2l6ZW9mKFB5QXJlbmEpKTsKKyAgICBQeUFyZW5hKiBhcmVuYSA9IChQeUFyZW5hICopUHlNZW1fTWFsbG9jKHNpemVvZihQeUFyZW5hKSk7CiAgICAgaWYgKCFhcmVuYSkKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogCiAgICAgYXJlbmEtPmFfaGVhZCA9IGJsb2NrX25ldyhERUZBVUxUX0JMT0NLX1NJWkUpOwogICAgIGFyZW5hLT5hX2N1ciA9IGFyZW5hLT5hX2hlYWQ7CiAgICAgaWYgKCFhcmVuYS0+YV9oZWFkKSB7Ci0gICAgICAgIGZyZWUoKHZvaWQgKilhcmVuYSk7CisgICAgICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilhcmVuYSk7CiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAgICAgYXJlbmEtPmFfb2JqZWN0cyA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFhcmVuYS0+YV9vYmplY3RzKSB7CiAgICAgICAgIGJsb2NrX2ZyZWUoYXJlbmEtPmFfaGVhZCk7Ci0gICAgICAgIGZyZWUoKHZvaWQgKilhcmVuYSk7CisgICAgICAgIFB5TWVtX0ZyZWUoKHZvaWQgKilhcmVuYSk7CiAgICAgICAgIHJldHVybiAoUHlBcmVuYSopUHlFcnJfTm9NZW1vcnkoKTsKICAgICB9CiAjaWYgZGVmaW5lZChQeV9ERUJVRykKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICovCiAKICAgICBQeV9ERUNSRUYoYXJlbmEtPmFfb2JqZWN0cyk7Ci0gICAgZnJlZShhcmVuYSk7CisgICAgUHlNZW1fRnJlZShhcmVuYSk7CiB9CiAKIHZvaWQgKgpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5aGFzaC5jIGIvUHl0aG9uL3B5aGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YWVlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vcHloYXNoLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qIFNldCBvZiBoYXNoIHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhlbHAgbWFpbnRhaW5pbmcgdGhlIGludmFyaWFudCB0aGF0CisgICAgaWYgYT09YiB0aGVuIGhhc2goYSk9PWhhc2goYikKKworICAgQWxsIHRoZSB1dGlsaXR5IGZ1bmN0aW9ucyAoX1B5X0hhc2gqKCkpIHJldHVybiAiLTEiIHRvIHNpZ25pZnkgYW4gZXJyb3IuCisqLworI2luY2x1ZGUgIlB5dGhvbi5oIgorCisjaWZkZWYgX19BUFBMRV9fCisjICBpbmNsdWRlIDxsaWJrZXJuL09TQnl0ZU9yZGVyLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTEU2NFRPSCkgJiYgZGVmaW5lZChIQVZFX0VORElBTl9IKQorIyAgaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTEU2NFRPSCkgJiYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyMgIGluY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19QeV9IYXNoU2VjcmV0X3QgX1B5X0hhc2hTZWNyZXQ7CisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0VYVEVSTkFMCitleHRlcm4gUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmM7CisjZWxzZQorc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jOworI2VuZGlmCisKKy8qIENvdW50IF9QeV9IYXNoQnl0ZXMoKSBjYWxscyAqLworI2lmZGVmIFB5X0hBU0hfU1RBVFMKKyNkZWZpbmUgUHlfSEFTSF9TVEFUU19NQVggMzIKK3N0YXRpYyBQeV9zc2l6ZV90IGhhc2hzdGF0c1tQeV9IQVNIX1NUQVRTX01BWCArIDFdID0gezB9OworI2VuZGlmCisKKy8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KKyAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAorICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCisgICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgorCisgICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6CisKKyAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAorICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgorICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAorICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcworICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQorICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCisgICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCisKKyAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCisKKyAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgorCisgICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKKyAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCisKKyAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgorICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKKyAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCisgICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKKyAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgorCisgICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCisgICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycworICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKKyAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0CisKKyAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQorCisgICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQorICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCisgICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKKyAgIGZvciBub25uZWdhdGl2ZSB4LAorCisgICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUworCisgICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgorICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQorICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgorICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KKworICAgKi8KKworUHlfaGFzaF90CitfUHlfSGFzaERvdWJsZShkb3VibGUgdikKK3sKKyAgICBpbnQgZSwgc2lnbjsKKyAgICBkb3VibGUgbTsKKyAgICBQeV91aGFzaF90IHgsIHk7CisKKyAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgeworICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCisgICAgICAgICAgICByZXR1cm4gdiA+IDAgPyBfUHlIQVNIX0lORiA6IC1fUHlIQVNIX0lORjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOOworICAgIH0KKworICAgIG0gPSBmcmV4cCh2LCAmZSk7CisKKyAgICBzaWduID0gMTsKKyAgICBpZiAobSA8IDApIHsKKyAgICAgICAgc2lnbiA9IC0xOworICAgICAgICBtID0gLW07CisgICAgfQorCisgICAgLyogcHJvY2VzcyAyOCBiaXRzIGF0IGEgdGltZTsgIHRoaXMgc2hvdWxkIHdvcmsgd2VsbCBib3RoIGZvciBiaW5hcnkKKyAgICAgICBhbmQgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICovCisgICAgeCA9IDA7CisgICAgd2hpbGUgKG0pIHsKKyAgICAgICAgeCA9ICgoeCA8PCAyOCkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gMjgpOworICAgICAgICBtICo9IDI2ODQzNTQ1Ni4wOyAgLyogMioqMjggKi8KKyAgICAgICAgZSAtPSAyODsKKyAgICAgICAgeSA9IChQeV91aGFzaF90KW07ICAvKiBwdWxsIG91dCBpbnRlZ2VyIHBhcnQgKi8KKyAgICAgICAgbSAtPSB5OworICAgICAgICB4ICs9IHk7CisgICAgICAgIGlmICh4ID49IF9QeUhBU0hfTU9EVUxVUykKKyAgICAgICAgICAgIHggLT0gX1B5SEFTSF9NT0RVTFVTOworICAgIH0KKworICAgIC8qIGFkanVzdCBmb3IgdGhlIGV4cG9uZW50OyAgZmlyc3QgcmVkdWNlIGl0IG1vZHVsbyBfUHlIQVNIX0JJVFMgKi8KKyAgICBlID0gZSA+PSAwID8gZSAlIF9QeUhBU0hfQklUUyA6IF9QeUhBU0hfQklUUy0xLSgoLTEtZSkgJSBfUHlIQVNIX0JJVFMpOworICAgIHggPSAoKHggPDwgZSkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gZSk7CisKKyAgICB4ID0geCAqIHNpZ247CisgICAgaWYgKHggPT0gKFB5X3VoYXNoX3QpLTEpCisgICAgICAgIHggPSAoUHlfdWhhc2hfdCktMjsKKyAgICByZXR1cm4gKFB5X2hhc2hfdCl4OworfQorCitQeV9oYXNoX3QKK19QeV9IYXNoUG9pbnRlcih2b2lkICpwKQoreworICAgIFB5X2hhc2hfdCB4OworICAgIHNpemVfdCB5ID0gKHNpemVfdClwOworICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKKyAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLworICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKKyAgICB4ID0gKFB5X2hhc2hfdCl5OworICAgIGlmICh4ID09IC0xKQorICAgICAgICB4ID0gLTI7CisgICAgcmV0dXJuIHg7Cit9CisKK1B5X2hhc2hfdAorX1B5X0hhc2hCeXRlcyhjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIFB5X2hhc2hfdCB4OworICAgIC8qCisgICAgICBXZSBtYWtlIHRoZSBoYXNoIG9mIHRoZSBlbXB0eSBzdHJpbmcgYmUgMCwgcmF0aGVyIHRoYW4gdXNpbmcKKyAgICAgIChwcmVmaXggXiBzdWZmaXgpLCBzaW5jZSB0aGlzIHNsaWdodGx5IG9iZnVzY2F0ZXMgdGhlIGhhc2ggc2VjcmV0CisgICAgKi8KKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisjaWZkZWYgUHlfSEFTSF9TVEFUUworICAgIGhhc2hzdGF0c1sobGVuIDw9IFB5X0hBU0hfU1RBVFNfTUFYKSA/IGxlbiA6IDBdKys7CisjZW5kaWYKKworI2lmIFB5X0hBU0hfQ1VUT0ZGID4gMAorICAgIGlmIChsZW4gPCBQeV9IQVNIX0NVVE9GRikgeworICAgICAgICAvKiBPcHRpbWl6ZSBoYXNoaW5nIG9mIHZlcnkgc21hbGwgc3RyaW5ncyB3aXRoIGlubGluZSBESkJYMzNBLiAqLworICAgICAgICBQeV91aGFzaF90IGhhc2g7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisgICAgICAgIGhhc2ggPSA1MzgxOyAvKiBESkJYMzNBIHN0YXJ0cyB3aXRoIDUzODEgKi8KKworICAgICAgICBzd2l0Y2gobGVuKSB7CisgICAgICAgICAgICAvKiAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwID09IGhhc2ggKiAzMyArICpwICovCisgICAgICAgICAgICBjYXNlIDc6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDY6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDU6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDQ6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDM6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDI6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIDE6IGhhc2ggPSAoKGhhc2ggPDwgNSkgKyBoYXNoKSArICpwKys7IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIH0KKyAgICAgICAgaGFzaCBePSBsZW47CisgICAgICAgIGhhc2ggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmRqYngzM2Euc3VmZml4OworICAgICAgICB4ID0gKFB5X2hhc2hfdCloYXNoOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKyAgICAgICAgeCA9IFB5SGFzaF9GdW5jLmhhc2goc3JjLCBsZW4pOworCisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHJldHVybiAtMjsKKyAgICByZXR1cm4geDsKK30KKwordm9pZAorX1B5SGFzaF9GaW5pKHZvaWQpCit7CisjaWZkZWYgUHlfSEFTSF9TVEFUUworICAgIGludCBpOworICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOworICAgIGNoYXIgKmZtdCA9ICIlMmkgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiI7CisKKyAgICBmcHJpbnRmKHN0ZGVyciwgImxlbiAgIGNhbGxzICAgIHRvdGFsXG4iKTsKKyAgICBmb3IgKGkgPSAxOyBpIDw9IFB5X0hBU0hfU1RBVFNfTUFYOyBpKyspIHsKKyAgICAgICAgdG90YWwgKz0gaGFzaHN0YXRzW2ldOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgZm10LCBpLCBoYXNoc3RhdHNbaV0sIHRvdGFsKTsKKyAgICB9CisgICAgdG90YWwgKz0gaGFzaHN0YXRzWzBdOworICAgIGZwcmludGYoc3RkZXJyLCAiPiAgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImQgJTgiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgICBoYXNoc3RhdHNbMF0sIHRvdGFsKTsKKyNlbmRpZgorfQorCitQeUhhc2hfRnVuY0RlZiAqCitQeUhhc2hfR2V0RnVuY0RlZih2b2lkKQoreworICAgIHJldHVybiAmUHlIYXNoX0Z1bmM7Cit9CisKKy8qIE9wdGltaXplZCBtZW1jcHkoKSBmb3IgV2luZG93cyAqLworI2lmZGVmIF9NU0NfVkVSCisjICBpZiBTSVpFT0ZfUFlfVUhBU0hfVCA9PSA0CisjICAgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZHN0WzBdID0gc3JjWzBdOyBkc3RbMV0gPSBzcmNbMV07IGRzdFsyXSA9IHNyY1syXTsgZHN0WzNdID0gc3JjWzNdOyBcCisgICAgICAgfSB3aGlsZSgwKQorIyAgZWxpZiBTSVpFT0ZfUFlfVUhBU0hfVCA9PSA4CisjICAgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgZHN0WzBdID0gc3JjWzBdOyBkc3RbMV0gPSBzcmNbMV07IGRzdFsyXSA9IHNyY1syXTsgZHN0WzNdID0gc3JjWzNdOyBcCisgICAgICAgZHN0WzRdID0gc3JjWzRdOyBkc3RbNV0gPSBzcmNbNV07IGRzdFs2XSA9IHNyY1s2XTsgZHN0WzddID0gc3JjWzddOyBcCisgICAgICAgfSB3aGlsZSgwKQorIyAgZWxzZQorIyAgICBlcnJvciBTSVpFT0ZfUFlfVUhBU0hfVCBtdXN0IGJlIDQgb3IgOAorIyAgZW5kaWYgLyogU0laRU9GX1BZX1VIQVNIX1QgKi8KKyNlbHNlIC8qIG5vdCBXaW5kb3dzICovCisjICBkZWZpbmUgUFlfVUhBU0hfQ1BZKGRzdCwgc3JjKSBtZW1jcHkoZHN0LCBzcmMsIFNJWkVPRl9QWV9VSEFTSF9UKQorI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRk5WCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTW9kaWZpZWQgRm93bGVyLU5vbGwtVm8gKEZOVikgaGFzaCBmdW5jdGlvbgorICovCitzdGF0aWMgUHlfaGFzaF90CitmbnYoY29uc3Qgdm9pZCAqc3JjLCBQeV9zc2l6ZV90IGxlbikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc3JjOworICAgIFB5X3VoYXNoX3QgeDsKKyAgICBQeV9zc2l6ZV90IHJlbWFpbmRlciwgYmxvY2tzOworICAgIHVuaW9uIHsKKyAgICAgICAgUHlfdWhhc2hfdCB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBieXRlc1tTSVpFT0ZfUFlfVUhBU0hfVF07CisgICAgfSBibG9jazsKKworI2lmZGVmIFB5X0RFQlVHCisgICAgYXNzZXJ0KF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKTsKKyNlbmRpZgorICAgIHJlbWFpbmRlciA9IGxlbiAlIFNJWkVPRl9QWV9VSEFTSF9UOworICAgIGlmIChyZW1haW5kZXIgPT0gMCkgeworICAgICAgICAvKiBQcm9jZXNzIGF0IGxlYXN0IG9uZSBibG9jayBieXRlIGJ5IGJ5dGUgdG8gcmVkdWNlIGhhc2ggY29sbGlzaW9ucworICAgICAgICAgKiBmb3Igc3RyaW5ncyB3aXRoIGNvbW1vbiBwcmVmaXhlcy4gKi8KKyAgICAgICAgcmVtYWluZGVyID0gU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgfQorICAgIGJsb2NrcyA9IChsZW4gLSByZW1haW5kZXIpIC8gU0laRU9GX1BZX1VIQVNIX1Q7CisKKyAgICB4ID0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmZudi5wcmVmaXg7CisgICAgeCBePSAoUHlfdWhhc2hfdCkgKnAgPDwgNzsKKyAgICB3aGlsZSAoYmxvY2tzLS0pIHsKKyAgICAgICAgUFlfVUhBU0hfQ1BZKGJsb2NrLmJ5dGVzLCBwKTsKKyAgICAgICAgeCA9IChfUHlIQVNIX01VTFRJUExJRVIgKiB4KSBeIGJsb2NrLnZhbHVlOworICAgICAgICBwICs9IFNJWkVPRl9QWV9VSEFTSF9UOworICAgIH0KKyAgICAvKiBhZGQgcmVtYWluZGVyICovCisgICAgZm9yICg7IHJlbWFpbmRlciA+IDA7IHJlbWFpbmRlci0tKQorICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gKFB5X3VoYXNoX3QpICpwKys7CisgICAgeCBePSAoUHlfdWhhc2hfdCkgbGVuOworICAgIHggXj0gKFB5X3VoYXNoX3QpIF9QeV9IYXNoU2VjcmV0LmZudi5zdWZmaXg7CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgeCA9IC0yOworICAgIH0KKyAgICByZXR1cm4geDsKK30KKworc3RhdGljIFB5SGFzaF9GdW5jRGVmIFB5SGFzaF9GdW5jID0ge2ZudiwgImZudiIsIDggKiBTSVpFT0ZfUFlfSEFTSF9ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICogU0laRU9GX1BZX0hBU0hfVH07CisKKyNlbmRpZiAvKiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX0ZOViAqLworCisKKyNpZiBQeV9IQVNIX0FMR09SSVRITSA9PSBQeV9IQVNIX1NJUEhBU0gyNAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyA8TUlUIExpY2Vuc2U+CisgQ29weXJpZ2h0IChjKSAyMDEzICBNYXJlayBNYWprb3dza2kgPG1hcmVrQHBvcGNvdW50Lm9yZz4KKworIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyBUSEUgU09GVFdBUkUuCisgPC9NSVQgTGljZW5zZT4KKworIE9yaWdpbmFsIGxvY2F0aW9uOgorICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworIFNvbHV0aW9uIGluc3BpcmVkIGJ5IGNvZGUgZnJvbToKKyAgICBTYW11ZWwgTmV2ZXMgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUpCisgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICBKZWFuLVBoaWxpcHBlIEF1bWFzc29uIChodHRwczovLzEzMTAwMi5uZXQvc2lwaGFzaC9zaXBoYXNoMjQuYykKKworIE1vZGlmaWVkIGZvciBQeXRob24gYnkgQ2hyaXN0aWFuIEhlaW1lczoKKyAgICAtIEM4OSAvIE1TVkMgY29tcGF0aWJpbGl0eQorICAgIC0gUFlfVUlOVDY0X1QsIFBZX1VJTlQzMl9UIGFuZCBQWV9VSU5UOF9UCisgICAgLSBfcm90bDY0KCkgb24gV2luZG93cworICAgIC0gbGV0b2g2NCgpIGZhbGxiYWNrCisqLworCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgUFlfVUlOVDhfVDsKKworLyogYnl0ZSBzd2FwIGxpdHRsZSBlbmRpYW4gdG8gaG9zdCBlbmRpYW4KKyAqIEVuZGlhbiBjb252ZXJzaW9uIG5vdCBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgaGFzaCBmdW5jdGlvbiByZXR1cm5zIHRoZSBzYW1lCisgKiB2YWx1ZSBvbiBhbGwgcGxhdGZvcm1zLiBJdCBpcyBhbHNvIHJlcXVpcmVkIHRvIGZvciBhIGdvb2QgZGlzcGVyc2lvbiBvZgorICogdGhlIGhhc2ggdmFsdWVzJyBsZWFzdCBzaWduaWZpY2FudCBiaXRzLgorICovCisjaWYgUFlfTElUVExFX0VORElBTgorIyAgZGVmaW5lIF9sZTY0dG9oKHgpICgoUFlfVUlOVDY0X1QpKHgpKQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisjICBkZWZpbmUgX2xlNjR0b2goeCkgT1NTd2FwTGl0dGxlVG9Ib3N0SW50NjQoeCkKKyNlbGlmIGRlZmluZWQoSEFWRV9MRVRPSDY0KQorIyAgZGVmaW5lIF9sZTY0dG9oKHgpIGxlNjR0b2goeCkKKyNlbHNlCisjICBkZWZpbmUgX2xlNjR0b2goeCkgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDU2KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgNDApICYgMHhmZjAwMDAwMDAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpIDw8IDI0KSAmIDB4ZmYwMDAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgOCkgICYgMHhmZjAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gOCkgICYgMHhmZjAwMDAwMFVMTCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgKCgoUFlfVUlOVDY0X1QpKHgpID4+IDI0KSAmIDB4ZmYwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gNDApICYgMHhmZjAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKFBZX1VJTlQ2NF9UKSh4KSAgPj4gNTYpKQorI2VuZGlmCisKKworI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgUk9UQVRFKHgsIGIpICBfcm90bDY0KHgsIGIpCisjZWxzZQorIyAgZGVmaW5lIFJPVEFURSh4LCBiKSAoUFlfVUlOVDY0X1QpKCAoKHgpIDw8IChiKSkgfCAoICh4KSA+PiAoNjQgLSAoYikpKSApCisjZW5kaWYKKworI2RlZmluZSBIQUxGX1JPVU5EKGEsYixjLGQscyx0KSAgICAgICAgIFwKKyAgICBhICs9IGI7IGMgKz0gZDsgICAgICAgICAgICAgXAorICAgIGIgPSBST1RBVEUoYiwgcykgXiBhOyAgICAgICAgICAgXAorICAgIGQgPSBST1RBVEUoZCwgdCkgXiBjOyAgICAgICAgICAgXAorICAgIGEgPSBST1RBVEUoYSwgMzIpOworCisjZGVmaW5lIERPVUJMRV9ST1VORCh2MCx2MSx2Mix2MykgICAgICAgXAorICAgIEhBTEZfUk9VTkQodjAsdjEsdjIsdjMsMTMsMTYpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYyLHYxLHYwLHYzLDE3LDIxKTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2MCx2MSx2Mix2MywxMywxNik7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjIsdjEsdjAsdjMsMTcsMjEpOworCisKK3N0YXRpYyBQeV9oYXNoX3QKK3NpcGhhc2gyNChjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3Qgc3JjX3N6KSB7CisgICAgUFlfVUlOVDY0X1QgazAgPSBfbGU2NHRvaChfUHlfSGFzaFNlY3JldC5zaXBoYXNoLmswKTsKKyAgICBQWV9VSU5UNjRfVCBrMSA9IF9sZTY0dG9oKF9QeV9IYXNoU2VjcmV0LnNpcGhhc2guazEpOworICAgIFBZX1VJTlQ2NF9UIGIgPSAoUFlfVUlOVDY0X1Qpc3JjX3N6IDw8IDU2OworICAgIGNvbnN0IFBZX1VJTlQ2NF9UICppbiA9IChQWV9VSU5UNjRfVCopc3JjOworCisgICAgUFlfVUlOVDY0X1QgdjAgPSBrMCBeIDB4NzM2ZjZkNjU3MDczNjU3NVVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MSA9IGsxIF4gMHg2NDZmNzI2MTZlNjQ2ZjZkVUxMOworICAgIFBZX1VJTlQ2NF9UIHYyID0gazAgXiAweDZjNzk2NzY1NmU2NTcyNjFVTEw7CisgICAgUFlfVUlOVDY0X1QgdjMgPSBrMSBeIDB4NzQ2NTY0NjI3OTc0NjU3M1VMTDsKKworICAgIFBZX1VJTlQ2NF9UIHQ7CisgICAgUFlfVUlOVDhfVCAqcHQ7CisgICAgUFlfVUlOVDhfVCAqbTsKKworICAgIHdoaWxlIChzcmNfc3ogPj0gOCkgeworICAgICAgICBQWV9VSU5UNjRfVCBtaSA9IF9sZTY0dG9oKCppbik7CisgICAgICAgIGluICs9IDE7CisgICAgICAgIHNyY19zeiAtPSA4OworICAgICAgICB2MyBePSBtaTsKKyAgICAgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICAgICAgdjAgXj0gbWk7CisgICAgfQorCisgICAgdCA9IDA7CisgICAgcHQgPSAoUFlfVUlOVDhfVCAqKSZ0OworICAgIG0gPSAoUFlfVUlOVDhfVCAqKWluOworICAgIHN3aXRjaCAoc3JjX3N6KSB7CisgICAgICAgIGNhc2UgNzogcHRbNl0gPSBtWzZdOworICAgICAgICBjYXNlIDY6IHB0WzVdID0gbVs1XTsKKyAgICAgICAgY2FzZSA1OiBwdFs0XSA9IG1bNF07CisgICAgICAgIGNhc2UgNDogKigoUFlfVUlOVDMyX1QqKSZwdFswXSkgPSAqKChQWV9VSU5UMzJfVCopJm1bMF0pOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBwdFsyXSA9IG1bMl07CisgICAgICAgIGNhc2UgMjogcHRbMV0gPSBtWzFdOworICAgICAgICBjYXNlIDE6IHB0WzBdID0gbVswXTsKKyAgICB9CisgICAgYiB8PSBfbGU2NHRvaCh0KTsKKworICAgIHYzIF49IGI7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICB2MCBePSBiOworICAgIHYyIF49IDB4ZmY7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworCisgICAgLyogbW9kaWZpZWQgKi8KKyAgICB0ID0gKHYwIF4gdjEpIF4gKHYyIF4gdjMpOworICAgIHJldHVybiAoUHlfaGFzaF90KXQ7Cit9CisKK3N0YXRpYyBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHtzaXBoYXNoMjQsICJzaXBoYXNoMjQiLCA2NCwgMTI4fTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCA3NzJhYTUzLi42YmU3MWRlIDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTYsMTEgKzYsMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDQVVUSU9OCiAKLUFsd2F5cyB1c2UgbWFsbG9jKCkgYW5kIGZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBIG51bWJlciBvZiB0aGVzZQotZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QgaGVsZCwgYW5kIGluCi1hIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncyBkZWJ1Z2dpbmcKLW9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwgdG8gYXZvaWQKLXRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KK0Fsd2F5cyB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBCitudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QKK2hlbGQsIGFuZCBpbiBhIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncworZGVidWdnaW5nIG9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwKK3RvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBIQVZFX0RMT1BFTgpAQCAtNjAsNyArNjAsNyBAQAogUHlJbnRlcnByZXRlclN0YXRlX05ldyh2b2lkKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlJbnRlcnByZXRlclN0YXRlKSk7CiAKICAgICBpZiAoaW50ZXJwICE9IE5VTEwpIHsKICAgICAgICAgSEVBRF9JTklUKCk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZTogcmVtYWluaW5nIHRocmVhZHMiKTsKICAgICAqcCA9IGludGVycC0+bmV4dDsKICAgICBIRUFEX1VOTE9DSygpOwotICAgIGZyZWUoaW50ZXJwKTsKKyAgICBQeU1lbV9SYXdGcmVlKGludGVycCk7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoaW50ZXJwX2hlYWQgPT0gTlVMTCAmJiBoZWFkX211dGV4ICE9IE5VTEwpIHsKICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKGhlYWRfbXV0ZXgpOwpAQCAtMTY4LDcgKzE2OCw3IEBACiBzdGF0aWMgUHlUaHJlYWRTdGF0ZSAqCiBuZXdfdGhyZWFkc3RhdGUoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAsIGludCBpbml0KQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlICopbWFsbG9jKHNpemVvZihQeVRocmVhZFN0YXRlKSk7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKFB5VGhyZWFkU3RhdGUpKTsKIAogICAgIGlmIChfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSA9PSBOVUxMKQogICAgICAgICBfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSA9IHRocmVhZHN0YXRlX2dldGZyYW1lOwpAQCAtMTgyLDcgKzE4Miw2IEBACiAgICAgICAgIHRzdGF0ZS0+cmVjdXJzaW9uX2NyaXRpY2FsID0gMDsKICAgICAgICAgdHN0YXRlLT50cmFjaW5nID0gMDsKICAgICAgICAgdHN0YXRlLT51c2VfdHJhY2luZyA9IDA7Ci0gICAgICAgIHRzdGF0ZS0+dGlja19jb3VudGVyID0gMDsKICAgICAgICAgdHN0YXRlLT5naWxzdGF0ZV9jb3VudGVyID0gMDsKICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMDgsMTIgKzIwNywxNyBAQAogCiAgICAgICAgIHRzdGF0ZS0+dHJhc2hfZGVsZXRlX25lc3RpbmcgPSAwOwogICAgICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlID0gTlVMTDsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGVfZGF0YSA9IE5VTEw7CiAKICAgICAgICAgaWYgKGluaXQpCiAgICAgICAgICAgICBfUHlUaHJlYWRTdGF0ZV9Jbml0KHRzdGF0ZSk7CiAKICAgICAgICAgSEVBRF9MT0NLKCk7CisgICAgICAgIHRzdGF0ZS0+cHJldiA9IE5VTEw7CiAgICAgICAgIHRzdGF0ZS0+bmV4dCA9IGludGVycC0+dHN0YXRlX2hlYWQ7CisgICAgICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGU7CiAgICAgICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGU7CiAgICAgICAgIEhFQURfVU5MT0NLKCk7CiAgICAgfQpAQCAtMzE3LDYgKzMyMSwzMSBAQAogICAgIHJldHVybiBQeUxpc3RfU2V0SXRlbShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwgaW5kZXgsIFB5X05vbmUpOwogfQogCisvKiB1c2VkIGJ5IGltcG9ydC5jOlB5SW1wb3J0X0NsZWFudXAgKi8KK3ZvaWQKK19QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqc3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgaWYgKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCk7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKm0gPSBQeUxpc3RfR0VUX0lURU0oc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsIGkpOworICAgICAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKG0pKSB7CisgICAgICAgICAgICAgICAgLyogY2xlYW51cCB0aGUgc2F2ZWQgY29weSBvZiBtb2R1bGUgZGljdHMgKi8KKyAgICAgICAgICAgICAgICBQeU1vZHVsZURlZiAqbWQgPSBQeU1vZHVsZV9HZXREZWYobSk7CisgICAgICAgICAgICAgICAgaWYgKG1kKQorICAgICAgICAgICAgICAgICAgICBQeV9DTEVBUihtZC0+bV9iYXNlLm1fY29weSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogU2V0dGluZyBtb2R1bGVzX2J5X2luZGV4IHRvIE5VTEwgY291bGQgYmUgZGFuZ2Vyb3VzLCBzbyB3ZQorICAgICAgICAgICBjbGVhciB0aGUgbGlzdCBpbnN0ZWFkLiAqLworICAgICAgICBpZiAoUHlMaXN0X1NldFNsaWNlKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFB5TGlzdF9HRVRfU0laRShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpOworICAgIH0KK30KKwogdm9pZAogUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCiB7CkBAIC0zNDksMzcgKzM3OCwyMyBAQAogdHN0YXRlX2RlbGV0ZV9jb21tb24oUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwotICAgIFB5VGhyZWFkU3RhdGUgKipwOwotICAgIFB5VGhyZWFkU3RhdGUgKnByZXZfcCA9IE5VTEw7CiAgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0RlbGV0ZTogTlVMTCB0c3RhdGUiKTsKICAgICBpbnRlcnAgPSB0c3RhdGUtPmludGVycDsKICAgICBpZiAoaW50ZXJwID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBOVUxMIGludGVycCIpOwogICAgIEhFQURfTE9DSygpOwotICAgIGZvciAocCA9ICZpbnRlcnAtPnRzdGF0ZV9oZWFkOyA7IHAgPSAmKCpwKS0+bmV4dCkgewotICAgICAgICBpZiAoKnAgPT0gTlVMTCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBpbnZhbGlkIHRzdGF0ZSIpOwotICAgICAgICBpZiAoKnAgPT0gdHN0YXRlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8qIFNhbml0eSBjaGVjay4gIFRoZXNlIHN0YXRlcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGJ1dCBpZgotICAgICAgICAgKiB0aGV5IGRvIHdlIG11c3QgYWJvcnQuICBPdGhlcndpc2Ugd2UnbGwgZW5kIHVwIHNwaW5uaW5nIGluCi0gICAgICAgICAqIGluIGEgdGlnaHQgbG9vcCB3aXRoIHRoZSBsb2NrIGhlbGQuICBBIHNpbWlsYXIgY2hlY2sgaXMgZG9uZQotICAgICAgICAgKiBpbiB0aHJlYWQuYyBmaW5kX2tleSgpLiAgKi8KLSAgICAgICAgaWYgKCpwID09IHByZXZfcCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBzbWFsbCBjaXJjdWxhciBsaXN0KCEpIgotICAgICAgICAgICAgICAgICIgYW5kIHRzdGF0ZSBub3QgZm91bmQuIik7Ci0gICAgICAgIHByZXZfcCA9ICpwOwotICAgICAgICBpZiAoKCpwKS0+bmV4dCA9PSBpbnRlcnAtPnRzdGF0ZV9oZWFkKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKLSAgICAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IGNpcmN1bGFyIGxpc3QoISkgYW5kIgotICAgICAgICAgICAgICAgICIgdHN0YXRlIG5vdCBmb3VuZC4iKTsKLSAgICB9Ci0gICAgKnAgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+cHJldikKKyAgICAgICAgdHN0YXRlLT5wcmV2LT5uZXh0ID0gdHN0YXRlLT5uZXh0OworICAgIGVsc2UKKyAgICAgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICB0c3RhdGUtPm5leHQtPnByZXYgPSB0c3RhdGUtPnByZXY7CiAgICAgSEVBRF9VTkxPQ0soKTsKLSAgICBmcmVlKHRzdGF0ZSk7CisgICAgaWYgKHRzdGF0ZS0+b25fZGVsZXRlICE9IE5VTEwpIHsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUodHN0YXRlLT5vbl9kZWxldGVfZGF0YSk7CisgICAgfQorICAgIFB5TWVtX1Jhd0ZyZWUodHN0YXRlKTsKIH0KIAogCkBAIC00MTQsNiArNDI5LDQzIEBACiAjZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KIAogCisvKgorICogRGVsZXRlIGFsbCB0aHJlYWQgc3RhdGVzIGV4Y2VwdCB0aGUgb25lIHBhc3NlZCBhcyBhcmd1bWVudC4KKyAqIE5vdGUgdGhhdCwgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRocmVhZCBzdGF0ZSwgaXQgKm11c3QqIGJlIHRoZSBvbmUKKyAqIHBhc3NlZCBhcyBhcmd1bWVudC4gIEFsc28sIHRoaXMgd29uJ3QgdG91Y2ggYW55IG90aGVyIGludGVycHJldGVycworICogdGhhbiB0aGUgY3VycmVudCBvbmUsIHNpbmNlIHdlIGRvbid0IGtub3cgd2hpY2ggdGhyZWFkIHN0YXRlIHNob3VsZAorICogYmUga2VwdCBpbiB0aG9zZSBvdGhlciBpbnRlcnByZXRlcmVzLgorICovCit2b2lkCitfUHlUaHJlYWRTdGF0ZV9EZWxldGVFeGNlcHQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQoreworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CisgICAgUHlUaHJlYWRTdGF0ZSAqcCwgKm5leHQsICpnYXJiYWdlOworICAgIEhFQURfTE9DSygpOworICAgIC8qIFJlbW92ZSBhbGwgdGhyZWFkIHN0YXRlcywgZXhjZXB0IHRzdGF0ZSwgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2YKKyAgICAgICB0aHJlYWQgc3RhdGVzLiAgVGhpcyB3aWxsIGFsbG93IGNhbGxpbmcgUHlUaHJlYWRTdGF0ZV9DbGVhcigpCisgICAgICAgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiAqLworICAgIGdhcmJhZ2UgPSBpbnRlcnAtPnRzdGF0ZV9oZWFkOworICAgIGlmIChnYXJiYWdlID09IHRzdGF0ZSkKKyAgICAgICAgZ2FyYmFnZSA9IHRzdGF0ZS0+bmV4dDsKKyAgICBpZiAodHN0YXRlLT5wcmV2KQorICAgICAgICB0c3RhdGUtPnByZXYtPm5leHQgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlLT5wcmV2OworICAgIHRzdGF0ZS0+cHJldiA9IHRzdGF0ZS0+bmV4dCA9IE5VTEw7CisgICAgaW50ZXJwLT50c3RhdGVfaGVhZCA9IHRzdGF0ZTsKKyAgICBIRUFEX1VOTE9DSygpOworICAgIC8qIENsZWFyIGFuZCBkZWFsbG9jYXRlIGFsbCBzdGFsZSB0aHJlYWQgc3RhdGVzLiAgRXZlbiBpZiB0aGlzCisgICAgICAgZXhlY3V0ZXMgUHl0aG9uIGNvZGUsIHdlIHNob3VsZCBiZSBzYWZlIHNpbmNlIGl0IGV4ZWN1dGVzCisgICAgICAgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLCBub3Qgb25lIG9mIHRoZSBzdGFsZSB0aHJlYWRzLiAqLworICAgIGZvciAocCA9IGdhcmJhZ2U7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwLT5uZXh0OworICAgICAgICBQeVRocmVhZFN0YXRlX0NsZWFyKHApOworICAgICAgICBQeU1lbV9SYXdGcmVlKHApOworICAgIH0KK30KKworCiBQeVRocmVhZFN0YXRlICoKIFB5VGhyZWFkU3RhdGVfR2V0KHZvaWQpCiB7CkBAIC02OTcsNiArNzQ5LDE1IEBACiAgICAgcmV0dXJuIChQeVRocmVhZFN0YXRlICopUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KTsKIH0KIAoraW50CitQeUdJTFN0YXRlX0NoZWNrKHZvaWQpCit7CisgICAgLyogY2FuJ3QgdXNlIFB5VGhyZWFkU3RhdGVfR2V0KCkgc2luY2UgaXQgd2lsbCBhc3NlcnQgdGhhdCBpdCBoYXMgdGhlIEdJTCAqLworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgKKyAgICAgICAgJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOworICAgIHJldHVybiB0c3RhdGUgJiYgKHRzdGF0ZSA9PSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpKTsKK30KKwogUHlHSUxTdGF0ZV9TVEFURQogUHlHSUxTdGF0ZV9FbnN1cmUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXN0cnRvZC5jIGIvUHl0aG9uL3B5c3RydG9kLmMKaW5kZXggNGFiOGYwOC4uYjhkZDkxOSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5c3RydG9kLmMKKysrIGIvUHl0aG9uL3B5c3RydG9kLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogX1B5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCiB7CiAgICAgY2hhciAqZmFpbF9wb3M7Ci0gICAgZG91YmxlIHZhbCA9IC0xLjA7CisgICAgZG91YmxlIHZhbDsKICAgICBzdHJ1Y3QgbGNvbnYgKmxvY2FsZV9kYXRhOwogICAgIGNvbnN0IGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAgICAgc2l6ZV90IGRlY2ltYWxfcG9pbnRfbGVuOwpAQCAtOTIzLDcgKzkyMyw3IEBACiAKIHN0YXRpYyBjaGFyICoKIGZvcm1hdF9mbG9hdF9zaG9ydChkb3VibGUgZCwgY2hhciBmb3JtYXRfY29kZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgUHlfc3NpemVfdCBwcmVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIGludCBwcmVjaXNpb24sCiAgICAgICAgICAgICAgICAgICAgaW50IGFsd2F5c19hZGRfc2lnbiwgaW50IGFkZF9kb3RfMF9pZl9pbnRlZ2VyLAogICAgICAgICAgICAgICAgICAgIGludCB1c2VfYWx0X2Zvcm1hdHRpbmcsIGNoYXIgKipmbG9hdF9zdHJpbmdzLCBpbnQgKnR5cGUpCiB7CkBAIC0xMDU5LDcgKzEwNTksNyBAQAogICAgIC8qIGlmIHVzaW5nIGFuIGV4cG9uZW50LCByZXNldCBkZWNpbWFsIHBvaW50IHBvc2l0aW9uIHRvIDEgYW5kIGFkanVzdAogICAgICAgIGV4cG9uZW50IGFjY29yZGluZ2x5LiovCiAgICAgaWYgKHVzZV9leHApIHsKLSAgICAgICAgZXhwID0gZGVjcHQgLSAxOworICAgICAgICBleHAgPSAoaW50KWRlY3B0IC0gMTsKICAgICAgICAgZGVjcHQgPSAxOwogICAgIH0KICAgICAvKiBlbnN1cmUgdmRpZ2l0c19zdGFydCA8IGRlY3B0IDw9IHZkaWdpdHNfZW5kLCBvciB2ZGlnaXRzX3N0YXJ0IDwKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXRob25ydW4uYyBiL1B5dGhvbi9weXRob25ydW4uYwppbmRleCBlMDJkYmUyLi5jY2Y4MmFmIDEwMDY0NAotLS0gYS9QeXRob24vcHl0aG9ucnVuLmMKKysrIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCkBAIC0zNSwxMiArMzUsNDIgQEAKICNkZWZpbmUgUEFUSF9NQVggTUFYUEFUSExFTgogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKGV4Y2VwdGhvb2spOworX1B5X0lERU5USUZJRVIoZmx1c2gpOworX1B5X0lERU5USUZJRVIobGFzdF90cmFjZWJhY2spOworX1B5X0lERU5USUZJRVIobGFzdF90eXBlKTsKK19QeV9JREVOVElGSUVSKGxhc3RfdmFsdWUpOworX1B5X0lERU5USUZJRVIobmFtZSk7CitfUHlfSURFTlRJRklFUihwczEpOworX1B5X0lERU5USUZJRVIocHMyKTsKK19QeV9JREVOVElGSUVSKHN0ZGluKTsKK19QeV9JREVOVElGSUVSKHN0ZG91dCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOworX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9zdHJpbmcsICI8c3RyaW5nPiIpOworCisjaWZkZWYgUHlfUkVGX0RFQlVHCitzdGF0aWMKK3ZvaWQgX3ByaW50X3RvdGFsX3JlZnModm9pZCkgeworICAgIFB5T2JqZWN0ICp4b3B0aW9ucywgKnZhbHVlOworICAgIF9QeV9JREVOVElGSUVSKHNob3dyZWZjb3VudCk7CisKKyAgICB4b3B0aW9ucyA9IFB5U3lzX0dldFhPcHRpb25zKCk7CisgICAgaWYgKHhvcHRpb25zID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICB2YWx1ZSA9IF9QeURpY3RfR2V0SXRlbUlkKHhvcHRpb25zLCAmUHlJZF9zaG93cmVmY291bnQpOworICAgIGlmICh2YWx1ZSA9PSBQeV9UcnVlKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAiWyUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgcmVmcywgIgorICAgICAgICAgICAgICAgICIlIiBQWV9GT1JNQVRfU0laRV9UICJkIGJsb2Nrc11cbiIsCisgICAgICAgICAgICAgICAgX1B5X0dldFJlZlRvdGFsKCksIF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSk7Cit9CisjZW5kaWYKKwogI2lmbmRlZiBQeV9SRUZfREVCVUcKICNkZWZpbmUgUFJJTlRfVE9UQUxfUkVGUygpCiAjZWxzZSAvKiBQeV9SRUZfREVCVUcgKi8KLSNkZWZpbmUgUFJJTlRfVE9UQUxfUkVGUygpIGZwcmludGYoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAiWyUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgcmVmc11cbiIsICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICBfUHlfR2V0UmVmVG90YWwoKSkKKyNkZWZpbmUgUFJJTlRfVE9UQUxfUkVGUygpIF9wcmludF90b3RhbF9yZWZzKCkKICNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTU3LDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIGluaXRzaXRlKHZvaWQpOwogc3RhdGljIGludCBpbml0c3RkaW8odm9pZCk7CiBzdGF0aWMgdm9pZCBmbHVzaF9pbyh2b2lkKTsKLXN0YXRpYyBQeU9iamVjdCAqcnVuX21vZChtb2RfdHksIGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKK3N0YXRpYyBQeU9iamVjdCAqcnVuX21vZChtb2RfdHksIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqLCBQeUFyZW5hICopOwogc3RhdGljIFB5T2JqZWN0ICpydW5fcHljX2ZpbGUoRklMRSAqLCBjb25zdCBjaGFyICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKik7CkBAIC02OCwxMSArOTgsMTUgQEAKIHN0YXRpYyB2b2lkIHdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bih2b2lkKTsKIHN0YXRpYyB2b2lkIGNhbGxfbGxfZXhpdGZ1bmNzKHZvaWQpOwogZXh0ZXJuIGludCBfUHlVbmljb2RlX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVN0cnVjdFNlcXVlbmNlX0luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfUHlVbmljb2RlX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUxvbmdfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIFB5TG9uZ19GaW5pKHZvaWQpOwogZXh0ZXJuIGludCBfUHlGYXVsdGhhbmRsZXJfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeUZhdWx0aGFuZGxlcl9GaW5pKHZvaWQpOworZXh0ZXJuIHZvaWQgX1B5SGFzaF9GaW5pKHZvaWQpOworZXh0ZXJuIGludCBfUHlUcmFjZU1hbGxvY19Jbml0KHZvaWQpOworZXh0ZXJuIGludCBfUHlUcmFjZU1hbGxvY19GaW5pKHZvaWQpOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKIGV4dGVybiB2b2lkIF9QeUdJTFN0YXRlX0luaXQoUHlJbnRlcnByZXRlclN0YXRlICosIFB5VGhyZWFkU3RhdGUgKik7CkBAIC05Myw2ICsxMjcsNyBAQAogaW50IFB5X05vVXNlclNpdGVEaXJlY3RvcnkgPSAwOyAvKiBmb3IgLXMgYW5kIHNpdGUucHkgKi8KIGludCBQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnID0gMDsgLyogVW5idWZmZXJlZCBiaW5hcnkgc3Rke2luLG91dCxlcnJ9ICovCiBpbnQgUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnID0gMDsgLyogZm9yIC1SIGFuZCBQWVRIT05IQVNIU0VFRCAqLworaW50IFB5X0lzb2xhdGVkRmxhZyA9IDA7IC8qIGZvciAtSSwgaXNvbGF0ZSBmcm9tIHVzZXIncyBlbnYgKi8KIAogUHlUaHJlYWRTdGF0ZSAqX1B5X0ZpbmFsaXppbmcgPSBOVUxMOwogCkBAIC0xMTgsNiArMTUzLDQ1IEBACiAgICAgcmV0dXJuIGluaXRpYWxpemVkOwogfQogCisvKiBIZWxwZXIgdG8gYWxsb3cgYW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIHRvIG92ZXJyaWRlIHRoZSBub3JtYWwKKyAqIG1lY2hhbmlzbSB0aGF0IGF0dGVtcHRzIHRvIGZpZ3VyZSBvdXQgYW4gYXBwcm9wcmlhdGUgSU8gZW5jb2RpbmcKKyAqLworCitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcgPSBOVUxMOworc3RhdGljIGNoYXIgKl9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7CisKK2ludAorUHlfU2V0U3RhbmRhcmRTdHJlYW1FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQoreworICAgIGlmIChQeV9Jc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgLyogVGhpcyBpcyB0b28gbGF0ZSB0byBoYXZlIGFueSBlZmZlY3QgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBDYW4ndCBjYWxsIFB5RXJyX05vTWVtb3J5KCkgb24gZXJyb3JzLCBhcyBQeXRob24gaGFzbid0IGJlZW4KKyAgICAgKiBpbml0aWFsaXNlZCB5ZXQuCisgICAgICoKKyAgICAgKiBIb3dldmVyLCB0aGUgcmF3IG1lbW9yeSBhbGxvY2F0b3JzIGFyZSBpbml0aWFsaXNlZCBhcHByb3ByaWF0ZWx5CisgICAgICogYXMgQyBzdGF0aWMgdmFyaWFibGVzLCBzbyBfUHlNZW1fUmF3U3RyZHVwIGlzIE9LIGV2ZW4gdGhvdWdoCisgICAgICogUHlfSW5pdGlhbGl6ZSBoYXNuJ3QgYmVlbiBjYWxsZWQgeWV0LgorICAgICAqLworICAgIGlmIChlbmNvZGluZykgeworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IF9QeU1lbV9SYXdTdHJkdXAoZW5jb2RpbmcpOworICAgICAgICBpZiAoIV9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGVycm9ycykgeworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBfUHlNZW1fUmF3U3RyZHVwKGVycm9ycyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzKSB7CisgICAgICAgICAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAtMzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogLyogR2xvYmFsIGluaXRpYWxpemF0aW9ucy4gIENhbiBiZSB1bmRvbmUgYnkgUHlfRmluYWxpemUoKS4gIERvbid0CiAgICBjYWxsIHRoaXMgdHdpY2Ugd2l0aG91dCBhbiBpbnRlcnZlbmluZyBQeV9GaW5hbGl6ZSgpIGNhbGwuICBXaGVuCiAgICBpbml0aWFsaXphdGlvbnMgZmFpbCwgYSBmYXRhbCBlcnJvciBpcyBpc3N1ZWQgYW5kIHRoZSBmdW5jdGlvbiBkb2VzCkBAIC0xNDYsNyArMjIwLDYgQEAKIHsKICAgICBjaGFyICpuYW1lX3V0ZjgsICpuYW1lX3N0cjsKICAgICBQeU9iamVjdCAqY29kZWMsICpuYW1lID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKIAogICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKICAgICBpZiAoIWNvZGVjKQpAQCAtMTYwLDcgKzIzMyw3IEBACiAgICAgbmFtZV91dGY4ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKICAgICBpZiAobmFtZV91dGY4ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgbmFtZV9zdHIgPSBzdHJkdXAobmFtZV91dGY4KTsKKyAgICBuYW1lX3N0ciA9IF9QeU1lbV9SYXdTdHJkdXAobmFtZV91dGY4KTsKICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTMxMyw3ICszODYsOCBAQAogICAgIGlmICghUHlCeXRlQXJyYXlfSW5pdCgpKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGJ5dGVhcnJheSIpOwogCi0gICAgX1B5RmxvYXRfSW5pdCgpOworICAgIGlmICghX1B5RmxvYXRfSW5pdCgpKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0IGZsb2F0Iik7CiAKICAgICBpbnRlcnAtPm1vZHVsZXMgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKGludGVycC0+bW9kdWxlcyA9PSBOVUxMKQpAQCAtMzIyLDYgKzM5Niw4IEBACiAgICAgLyogSW5pdCBVbmljb2RlIGltcGxlbWVudGF0aW9uOyByZWxpZXMgb24gdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCiAgICAgaWYgKF9QeVVuaWNvZGVfSW5pdCgpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSB1bmljb2RlIik7CisgICAgaWYgKF9QeVN0cnVjdFNlcXVlbmNlX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgc3RydWN0c2VxIik7CiAKICAgICBiaW1vZCA9IF9QeUJ1aWx0aW5fSW5pdCgpOwogICAgIGlmIChiaW1vZCA9PSBOVUxMKQpAQCAtMzUyLDcgKzQyOCw3IEBACiAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICBpZiAocHN0ZGVyciA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBzZXQgcHJlbGltaW5hcnkgc3RkZXJyIik7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBwc3RkZXJyKTsKICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBwc3RkZXJyKTsKICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTM4MCw2ICs0NTYsOSBAQAogICAgIGlmIChpbnN0YWxsX3NpZ3MpCiAgICAgICAgIGluaXRzaWdzKCk7IC8qIFNpZ25hbCBoYW5kbGluZyBzdHVmZiwgaW5jbHVkaW5nIGluaXRpbnRyKCkgKi8KIAorICAgIGlmIChfUHlUcmFjZU1hbGxvY19Jbml0KCkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHRyYWNlbWFsbG9jIik7CisKICAgICBpbml0bWFpbihpbnRlcnApOyAvKiBNb2R1bGUgX19tYWluX18gKi8KICAgICBpZiAoaW5pdHN0ZGlvKCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKApAQCAtNDM3LDEwICs1MTYsOSBAQAogc3RhdGljIHZvaWQKIGZsdXNoX3N0ZF9maWxlcyh2b2lkKQogewotICAgIFB5T2JqZWN0ICpmb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKLSAgICBQeU9iamVjdCAqZmVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmZvdXQgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICBQeU9iamVjdCAqZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgIFB5T2JqZWN0ICp0bXA7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogCiAgICAgaWYgKGZvdXQgIT0gTlVMTCAmJiBmb3V0ICE9IFB5X05vbmUgJiYgIWZpbGVfaXNfY2xvc2VkKGZvdXQpKSB7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZm91dCwgJlB5SWRfZmx1c2gsICIiKTsKQEAgLTUwNCwxMSArNTgyLDEzIEBACiAgICAgX1B5X0ZpbmFsaXppbmcgPSB0c3RhdGU7CiAgICAgaW5pdGlhbGl6ZWQgPSAwOwogCi0gICAgLyogRmx1c2ggc3Rkb3V0K3N0ZGVyciAqLwotICAgIGZsdXNoX3N0ZF9maWxlcygpOwotCi0gICAgLyogRGlzYWJsZSBzaWduYWwgaGFuZGxpbmcgKi8KLSAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzKCk7CisgICAgLyogRGVzdHJveSB0aGUgc3RhdGUgb2YgYWxsIHRocmVhZHMgZXhjZXB0IG9mIHRoZSBjdXJyZW50IHRocmVhZDogaW4KKyAgICAgICBwcmFjdGljZSwgb25seSBkYWVtb24gdGhyZWFkcyBzaG91bGQgc3RpbGwgYmUgYWxpdmUuIENsZWFyIGZyYW1lcyBvZgorICAgICAgIG90aGVyIHRocmVhZHMgdG8gY2FsbCBvYmplY3RzIGRlc3RydWN0b3IuIERlc3RydWN0b3JzIHdpbGwgYmUgY2FsbGVkIGluCisgICAgICAgdGhlIGN1cnJlbnQgUHl0aG9uIHRocmVhZC4gU2luY2UgX1B5X0ZpbmFsaXppbmcgaGFzIGJlZW4gc2V0LCBubyBvdGhlcgorICAgICAgIFB5dGhvbiB0aHJlYWRzIGNhbiBsb2NrIHRoZSBHSUwgYXQgdGhpcyBwb2ludCAoaWYgdGhleSB0cnksIHRoZXkgd2lsbAorICAgICAgIGV4aXQgaW1tZWRpYXRlbHkpLiAqLworICAgIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdCh0c3RhdGUpOwogCiAgICAgLyogQ29sbGVjdCBnYXJiYWdlLiAgVGhpcyBtYXkgY2FsbCBmaW5hbGl6ZXJzOyBpdCdzIG5pY2UgdG8gY2FsbCB0aGVzZQogICAgICAqIGJlZm9yZSBhbGwgbW9kdWxlcyBhcmUgZGVzdHJveWVkLgpAQCAtNTIzLDYgKzYwMyw3IEBACiAgICAgICogWFhYIEkgaGF2ZW4ndCBzZWVuIGEgcmVhbC1saWZlIHJlcG9ydCBvZiBlaXRoZXIgb2YgdGhlc2UuCiAgICAgICovCiAgICAgUHlHQ19Db2xsZWN0KCk7CisKICNpZmRlZiBDT1VOVF9BTExPQ1MKICAgICAvKiBXaXRoIENPVU5UX0FMTE9DUywgaXQgaGVscHMgdG8gcnVuIEdDIG11bHRpcGxlIHRpbWVzOgogICAgICAgIGVhY2ggY29sbGVjdGlvbiBtaWdodCByZWxlYXNlIHNvbWUgdHlwZXMgZnJvbSB0aGUgdHlwZQpAQCAtNTMwLDkgKzYxMSwxMiBAQAogICAgIHdoaWxlIChQeUdDX0NvbGxlY3QoKSA+IDApCiAgICAgICAgIC8qIG5vdGhpbmcgKi87CiAjZW5kaWYKLSAgICAvKiBXZSBydW4gdGhpcyB3aGlsZSBtb3N0IGludGVycHJldGVyIHN0YXRlIGlzIHN0aWxsIGFsaXZlLCBzbyB0aGF0Ci0gICAgICAgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHByaW50ZWQgb3V0ICovCi0gICAgX1B5R0NfRmluaSgpOworCisgICAgLyogRmx1c2ggc3Rkb3V0K3N0ZGVyciAqLworICAgIGZsdXNoX3N0ZF9maWxlcygpOworCisgICAgLyogRGlzYWJsZSBzaWduYWwgaGFuZGxpbmcgKi8KKyAgICBQeU9TX0ZpbmlJbnRlcnJ1cHRzKCk7CiAKICAgICAvKiBEZXN0cm95IGFsbCBtb2R1bGVzICovCiAgICAgUHlJbXBvcnRfQ2xlYW51cCgpOwpAQCAtNTU5LDYgKzY0MywxMCBAQAogICAgIFB5R0NfQ29sbGVjdCgpOwogI2VuZGlmCiAKKyAgICAvKiBEaXNhYmxlIHRyYWNlbWFsbG9jIGFmdGVyIGFsbCBQeXRob24gb2JqZWN0cyBoYXZlIGJlZW4gZGVzdHJveWVkLAorICAgICAgIHNvIGl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0cmFjZW1hbGxvYyBpbiBvYmplY3RzIGRlc3RydWN0b3IuICovCisgICAgX1B5VHJhY2VNYWxsb2NfRmluaSgpOworCiAgICAgLyogRGVzdHJveSB0aGUgZGF0YWJhc2UgdXNlZCBieSBfUHlJbXBvcnRfe0ZpeHVwLEZpbmR9RXh0ZW5zaW9uICovCiAgICAgX1B5SW1wb3J0X0ZpbmkoKTsKIApAQCAtNTcyLDYgKzY2MCw4IEBACiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgZHVtcF9jb3VudHMoc3Rkb3V0KTsKICNlbmRpZgorICAgIC8qIGR1bXAgaGFzaCBzdGF0cyAqLworICAgIF9QeUhhc2hfRmluaSgpOwogCiAgICAgUFJJTlRfVE9UQUxfUkVGUygpOwogCkBAIC01OTYsMTEgKzY4Niw2IEBACiAKICAgICBfUHlFeGNfRmluaSgpOwogCi0gICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5R0lMU3RhdGVfRmluaSgpOwotI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCi0KICAgICAvKiBTdW5kcnkgZmluYWxpemVycyAqLwogICAgIFB5TWV0aG9kX0ZpbmkoKTsKICAgICBQeUZyYW1lX0ZpbmkoKTsKQEAgLTYxNCwxNyArNjk5LDE1IEBACiAgICAgUHlGbG9hdF9GaW5pKCk7CiAgICAgUHlEaWN0X0ZpbmkoKTsKICAgICBQeVNsaWNlX0ZpbmkoKTsKKyAgICBfUHlHQ19GaW5pKCk7CisgICAgX1B5UmFuZG9tX0ZpbmkoKTsKIAogICAgIC8qIENsZWFudXAgVW5pY29kZSBpbXBsZW1lbnRhdGlvbiAqLwogICAgIF9QeVVuaWNvZGVfRmluaSgpOwogCi0gICAgLyogRGVsZXRlIGN1cnJlbnQgdGhyZWFkLiBBZnRlciB0aGlzLCBtYW55IEMgQVBJIGNhbGxzIGJlY29tZSBjcmFzaHkuICovCi0gICAgUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOwotICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUoaW50ZXJwKTsKLQogICAgIC8qIHJlc2V0IGZpbGUgc3lzdGVtIGRlZmF1bHQgZW5jb2RpbmcgKi8KICAgICBpZiAoIVB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgJiYgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZykgewotICAgICAgICBmcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CiAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOwogICAgIH0KIApAQCAtNjM2LDYgKzcxOSwxNSBAQAogCiAgICAgUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycygmX1B5UGFyc2VyX0dyYW1tYXIpOwogCisgICAgLyogQ2xlYW51cCBhdXRvLXRocmVhZC1zdGF0ZSAqLworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgX1B5R0lMU3RhdGVfRmluaSgpOworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKKyAgICAvKiBEZWxldGUgY3VycmVudCB0aHJlYWQuIEFmdGVyIHRoaXMsIG1hbnkgQyBBUEkgY2FsbHMgYmVjb21lIGNyYXNoeS4gKi8KKyAgICBQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCk7CisgICAgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShpbnRlcnApOworCiAjaWZkZWYgUHlfVFJBQ0VfUkVGUwogICAgIC8qIERpc3BsYXkgYWRkcmVzc2VzICgmIHJlZmNudHMpIG9mIGFsbCBvYmplY3RzIHN0aWxsIGFsaXZlLgogICAgICAqIEFuIGFkZHJlc3MgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgcmVwciBvZiB0aGUgb2JqZWN0LCBwcmludGVkCkBAIC03MTgsNyArODEwLDcgQEAKICAgICAgICAgcHN0ZGVyciA9IFB5RmlsZV9OZXdTdGRQcmludGVyKGZpbGVubyhzdGRlcnIpKTsKICAgICAgICAgaWYgKHBzdGRlcnIgPT0gTlVMTCkKICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBwc3RkZXJyKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZGVyciwgcHN0ZGVycik7CiAgICAgICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgICAgICBQeV9ERUNSRUYocHN0ZGVycik7CiAKQEAgLTc3Myw2ICs4NjUsOSBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogdGhyZWFkIGlzIG5vdCBjdXJyZW50Iik7CiAgICAgaWYgKHRzdGF0ZS0+ZnJhbWUgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBzdGlsbCBoYXMgYSBmcmFtZSIpOworCisgICAgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKCk7CisKICAgICBpZiAodHN0YXRlICE9IGludGVycC0+dHN0YXRlX2hlYWQgfHwgdHN0YXRlLT5uZXh0ICE9IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiBub3QgdGhlIGxhc3QgdGhyZWFkIik7CiAKQEAgLTgwMiw3ICs4OTcsNyBAQAogfQogCiBzdGF0aWMgd2NoYXJfdCAqZGVmYXVsdF9ob21lID0gTlVMTDsKLXN0YXRpYyB3Y2hhcl90IGVudl9ob21lW1BBVEhfTUFYKzFdOworc3RhdGljIHdjaGFyX3QgZW52X2hvbWVbTUFYUEFUSExFTisxXTsKIAogdm9pZAogUHlfU2V0UHl0aG9uSG9tZSh3Y2hhcl90ICpob21lKQpAQCAtODMyLDcgKzkyNyw3IEBACiBzdGF0aWMgdm9pZAogaW5pdG1haW4oUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKmxvYWRlcjsKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGNyZWF0ZSBfX21haW5fXyBtb2R1bGUiKTsKQEAgLTg1Myw3ICs5NDgsOCBAQAogICAgICAqIGJlIHNldCBpZiBfX21haW5fXyBnZXRzIGZ1cnRoZXIgaW5pdGlhbGl6ZWQgbGF0ZXIgaW4gdGhlIHN0YXJ0dXAKICAgICAgKiBwcm9jZXNzLgogICAgICAqLwotICAgIGlmIChQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpID09IE5VTEwpIHsKKyAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhkLCAiX19sb2FkZXJfXyIpOworICAgIGlmIChsb2FkZXIgPT0gTlVMTCB8fCBsb2FkZXIgPT0gUHlfTm9uZSkgewogICAgICAgICBQeU9iamVjdCAqbG9hZGVyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1aWx0aW5JbXBvcnRlciIpOwogICAgICAgICBpZiAobG9hZGVyID09IE5VTEwpIHsKQEAgLTkwMyw2ICs5OTksNyBAQAogICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGltcG9ydCB0aGUgc2l0ZSBtb2R1bGVcbiIpOwogICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9GaW5hbGl6ZSgpOwogICAgICAgICBleGl0KDEpOwpAQCAtOTI1LDcgKzEwMjIsNiBAQAogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CiAgICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7Ci0gICAgX1B5X0lERU5USUZJRVIobmFtZSk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CiAKICAgICAvKiBzdGRpbiBpcyBhbHdheXMgb3BlbmVkIGluIGJ1ZmZlcmVkIG1vZGUsIGZpcnN0IGJlY2F1c2UgaXQgc2hvdWxkbid0CkBAIC0xMDM1LDcgKzExMzEsNyBAQAogICAgIFB5T2JqZWN0ICpzdGQgPSBOVUxMOwogICAgIGludCBzdGF0dXMgPSAwLCBmZDsKICAgICBQeU9iamVjdCAqIGVuY29kaW5nX2F0dHI7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMLCAqZXJyb3JzOworICAgIGNoYXIgKnB5dGhvbmlvZW5jb2RpbmcgPSBOVUxMLCAqZW5jb2RpbmcsICplcnJvcnM7CiAKICAgICAvKiBIYWNrIHRvIGF2b2lkIGEgbmFzdHkgcmVjdXJzaW9uIGlzc3VlIHdoZW4gUHl0aG9uIGlzIGludm9rZWQKICAgICAgICBpbiB2ZXJib3NlIG1vZGU6IHByZS1pbXBvcnQgdGhlIExhdGluLTEgYW5kIFVURi04IGNvZGVjcyAqLwpAQCAtMTA2NywxNCArMTE2MywyOCBAQAogICAgIH0KICAgICBQeV9ERUNSRUYod3JhcHBlcik7CiAKLSAgICBlbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOwotICAgIGVycm9ycyA9IE5VTEw7Ci0gICAgaWYgKGVuY29kaW5nKSB7Ci0gICAgICAgIGVuY29kaW5nID0gc3RyZHVwKGVuY29kaW5nKTsKLSAgICAgICAgZXJyb3JzID0gc3RyY2hyKGVuY29kaW5nLCAnOicpOwotICAgICAgICBpZiAoZXJyb3JzKSB7Ci0gICAgICAgICAgICAqZXJyb3JzID0gJ1wwJzsKLSAgICAgICAgICAgIGVycm9ycysrOworICAgIGVuY29kaW5nID0gX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2Rpbmc7CisgICAgZXJyb3JzID0gX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzOworICAgIGlmICghZW5jb2RpbmcgfHwgIWVycm9ycykgeworICAgICAgICBweXRob25pb2VuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7CisgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nKSB7CisgICAgICAgICAgICBjaGFyICplcnI7CisgICAgICAgICAgICBweXRob25pb2VuY29kaW5nID0gX1B5TWVtX1N0cmR1cChweXRob25pb2VuY29kaW5nKTsKKyAgICAgICAgICAgIGlmIChweXRob25pb2VuY29kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBzdHJjaHIocHl0aG9uaW9lbmNvZGluZywgJzonKTsKKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICAqZXJyID0gJ1wwJzsKKyAgICAgICAgICAgICAgICBlcnIrKzsKKyAgICAgICAgICAgICAgICBpZiAoKmVyciAmJiAhZXJyb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKnB5dGhvbmlvZW5jb2RpbmcgJiYgIWVuY29kaW5nKSB7CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBweXRob25pb2VuY29kaW5nOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDk0LDcgKzEyMDQsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGluX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkaW4iLCBzdGQpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRpbiwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogICAgIC8qIFNldCBzeXMuc3Rkb3V0ICovCkBAIC0xMTA5LDcgKzEyMTksNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IC8qIGlmIChmZCA8IDApICovCiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZG91dF9fIiwgc3RkKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLwpAQCAtMTEyOSwxOCArMTIzOSwyNCBAQAogICAgICAgIHdoZW4gaW1wb3J0LmMgdHJpZXMgdG8gd3JpdGUgdG8gc3RkZXJyIGluIHZlcmJvc2UgbW9kZS4gKi8KICAgICBlbmNvZGluZ19hdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzdGQsICJlbmNvZGluZyIpOwogICAgIGlmIChlbmNvZGluZ19hdHRyICE9IE5VTEwpIHsKLSAgICAgICAgY29uc3QgY2hhciAqIGVuY29kaW5nOwotICAgICAgICBlbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7Ci0gICAgICAgIGlmIChlbmNvZGluZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChlbmNvZGluZyk7CisgICAgICAgIGNvbnN0IGNoYXIgKiBzdGRfZW5jb2Rpbmc7CisgICAgICAgIHN0ZF9lbmNvZGluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZW5jb2RpbmdfYXR0cik7CisgICAgICAgIGlmIChzdGRfZW5jb2RpbmcgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvZGVjX2luZm8gPSBfUHlDb2RlY19Mb29rdXAoc3RkX2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYoY29kZWNfaW5mbyk7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kaW5nX2F0dHIpOwogICAgIH0KICAgICBQeUVycl9DbGVhcigpOyAgLyogTm90IGEgZmF0YWwgZXJyb3IgaWYgY29kZWMgaXNuJ3QgYXZhaWxhYmxlICovCiAKLSAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgc3RkKTsKKyAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGVycl9fIiwgc3RkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHN0ZCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgUHlfREVDUkVGKHN0ZCk7CiAjZW5kaWYKIApAQCAtMTE0OSw4ICsxMjY1LDE2IEBACiAgICAgICAgIHN0YXR1cyA9IC0xOwogICAgIH0KIAotICAgIGlmIChlbmNvZGluZykKLSAgICAgICAgZnJlZShlbmNvZGluZyk7CisgICAgLyogV2Ugd29uJ3QgbmVlZCB0aGVtIGFueW1vcmUuICovCisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nKSB7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpOworICAgICAgICBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMgPSBOVUxMOworICAgIH0KKyAgICBQeU1lbV9GcmVlKHB5dGhvbmlvZW5jb2RpbmcpOwogICAgIFB5X1hERUNSRUYoYmltb2QpOwogICAgIFB5X1hERUNSRUYoaW9tb2QpOwogICAgIHJldHVybiBzdGF0dXM7CkBAIC0xMTc1LDM2ICsxMjk5LDQ3IEBACiB9CiAKIGludAotUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBpbnQgcmV0OworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKnY7CisgICAgaW50IHJldCwgZXJyOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbF9mbGFnczsKIAorICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBmbGFncyA9ICZsb2NhbF9mbGFnczsKICAgICAgICAgbG9jYWxfZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczEiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMSIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPj4+ICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMSwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KLSAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczIiKTsKKyAgICB2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3BzMik7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoInBzMiIsIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiLi4uICIpKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BzMiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOwogICAgICAgICBQeV9YREVDUkVGKHYpOwogICAgIH0KKyAgICBlcnIgPSAtMTsKICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgICAgIHJldCA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOwogICAgICAgICBQUklOVF9UT1RBTF9SRUZTKCk7Ci0gICAgICAgIGlmIChyZXQgPT0gRV9FT0YpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHJldCA9PSBFX0VPRikgeworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIC8qCiAgICAgICAgIGlmIChyZXQgPT0gRV9OT01FTSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAqLwogICAgIH0KKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBlcnI7CiB9CiAKIC8qIGNvbXB1dGUgcGFyc2VyIGZsYWdzIGJhc2VkIG9uIGNvbXBpbGVyIGZsYWdzICovCkBAIC0xMjMyLDE4ICsxMzY3LDI1IEBACiAjZW5kaWYKIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKK1B5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKncsICpvZW5jID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMLCAqbW9kX25hbWU7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUFyZW5hICphcmVuYTsKICAgICBjaGFyICpwczEgPSAiIiwgKnBzMiA9ICIiLCAqZW5jID0gTlVMTDsKICAgICBpbnQgZXJyY29kZSA9IDA7CiAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworICAgIF9QeV9JREVOVElGSUVSKF9fbWFpbl9fKTsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICBpZiAoZnAgPT0gc3RkaW4pIHsKICAgICAgICAgLyogRmV0Y2ggZW5jb2RpbmcgZnJvbSBzeXMuc3RkaW4gaWYgcG9zc2libGUuICovCi0gICAgICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7CisgICAgICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkaW4pOwogICAgICAgICBpZiAodiAmJiB2ICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIG9lbmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKHYsICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgICAgIGlmIChvZW5jKQpAQCAtMTI1Miw3ICsxMzk0LDcgQEAKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICB9CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgIHYgPSBQeU9iamVjdF9TdHIodik7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCkBAIC0xMjY1LDcgKzE0MDcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHcgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHcgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodyAhPSBOVUxMKSB7CiAgICAgICAgIHcgPSBQeU9iamVjdF9TdHIodyk7CiAgICAgICAgIGlmICh3ID09IE5VTEwpCkBAIC0xMjg1LDkgKzE0MjcsOSBAQAogICAgICAgICBQeV9YREVDUkVGKG9lbmMpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlKGZwLCBmaWxlbmFtZSwgZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NpbmdsZV9pbnB1dCwgcHMxLCBwczIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsICZlcnJjb2RlLCBhcmVuYSk7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKICAgICBQeV9YREVDUkVGKHYpOwogICAgIFB5X1hERUNSRUYodyk7CiAgICAgUHlfWERFQ1JFRihvZW5jKTsKQEAgLTEzMDAsNyArMTQ0Miw3IEBACiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKKyAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlT2JqZWN0KG1vZF9uYW1lKTsKICAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEzMTcsNiArMTQ1OSwyMyBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK1B5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncykKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgaW50IHJlczsKKworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoZnAsIGZpbGVuYW1lLCBmbGFncyk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmVzOworfQorCisKIC8qIENoZWNrIHdoZXRoZXIgYSBmaWxlIG1heWJlIGEgcHljIGZpbGU6IExvb2sgYXQgdGhlIGV4dGVuc2lvbiwKICAgIHRoZSBmaWxlIHR5cGUsIGFuZCwgaWYgd2UgbWF5IGNsb3NlIGl0LCBhdCB0aGUgZmlyc3QgZmV3IGJ5dGVzLiAqLwogCkBAIC0xMzU3LDggKzE1MTYsOCBAQAogICAgIHJldHVybiAwOwogfQogCi1pbnQKLXN0YXRpYyBzZXRfbWFpbl9sb2FkZXIoUHlPYmplY3QgKmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpsb2FkZXJfbmFtZSkKK3N0YXRpYyBpbnQKK3NldF9tYWluX2xvYWRlcihQeU9iamVjdCAqZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmxvYWRlcl9uYW1lKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwOwogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKQEAgLTE0MjUsNyArMTU4NCw3IEBACiAgICAgICAgIC8qIFRyeSB0byBydW4gYSBweWMgZmlsZS4gRmlyc3QsIHJlLW9wZW4gaW4gYmluYXJ5ICovCiAgICAgICAgIGlmIChjbG9zZWl0KQogICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgaWYgKChweWNfZnAgPSBmb3BlbihmaWxlbmFtZSwgInJiIikpID09IE5VTEwpIHsKKyAgICAgICAgaWYgKChweWNfZnAgPSBfUHlfZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInB5dGhvbjogQ2FuJ3QgcmVvcGVuIC5weWMgZmlsZVxuIik7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KQEAgLTE0ODQsOCArMTY0Myw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXBhcnNlX3N5bnRheF9lcnJvcihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCAqKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKipmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVubywgaW50ICpvZmZzZXQsIGNvbnN0IGNoYXIgKip0ZXh0KQorcGFyc2Vfc3ludGF4X2Vycm9yKFB5T2JqZWN0ICplcnIsIFB5T2JqZWN0ICoqbWVzc2FnZSwgUHlPYmplY3QgKipmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICBpbnQgKmxpbmVubywgaW50ICpvZmZzZXQsIFB5T2JqZWN0ICoqdGV4dCkKIHsKICAgICBsb25nIGhvbGQ7CiAgICAgUHlPYmplY3QgKnY7CkBAIC0xNDk2LDYgKzE2NTUsNyBAQAogICAgIF9QeV9JREVOVElGSUVSKHRleHQpOwogCiAgICAgKm1lc3NhZ2UgPSBOVUxMOworICAgICpmaWxlbmFtZSA9IE5VTEw7CiAKICAgICAvKiBuZXcgc3R5bGUgZXJyb3JzLiAgYGVycicgaXMgYW4gaW5zdGFuY2UgKi8KICAgICAqbWVzc2FnZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXJyLCAmUHlJZF9tc2cpOwpAQCAtMTUwNywxMyArMTY2NywxMyBAQAogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgaWYgKHYgPT0gUHlfTm9uZSkgewogICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICpmaWxlbmFtZSA9IE5VTEw7CisgICAgICAgICpmaWxlbmFtZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX3N0cmluZyk7CisgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAqZmlsZW5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIGlmICghKmZpbGVuYW1lKQotICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICAqZmlsZW5hbWUgPSB2OwogICAgIH0KIAogICAgIHYgPSBfUHlPYmplY3RfR2V0QXR0cklkKGVyciwgJlB5SWRfbGluZW5vKTsKQEAgLTE1NDcsMTUgKzE3MDcsMTMgQEAKICAgICAgICAgKnRleHQgPSBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgKnRleHQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIGlmICghKnRleHQpCi0gICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgICp0ZXh0ID0gdjsKICAgICB9CiAgICAgcmV0dXJuIDE7CiAKIGZpbmFsbHk6CiAgICAgUHlfWERFQ1JFRigqbWVzc2FnZSk7CisgICAgUHlfWERFQ1JFRigqZmlsZW5hbWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTY2LDkgKzE3MjQsMTUgQEAKIH0KIAogc3RhdGljIHZvaWQKLXByaW50X2Vycm9yX3RleHQoUHlPYmplY3QgKmYsIGludCBvZmZzZXQsIGNvbnN0IGNoYXIgKnRleHQpCitwcmludF9lcnJvcl90ZXh0KFB5T2JqZWN0ICpmLCBpbnQgb2Zmc2V0LCBQeU9iamVjdCAqdGV4dF9vYmopCiB7CisgICAgY2hhciAqdGV4dDsKICAgICBjaGFyICpubDsKKworICAgIHRleHQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHRleHRfb2JqKTsKKyAgICBpZiAodGV4dCA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAob2Zmc2V0ID49IDApIHsKICAgICAgICAgaWYgKG9mZnNldCA+IDAgJiYgb2Zmc2V0ID09IHN0cmxlbih0ZXh0KSAmJiB0ZXh0W29mZnNldCAtIDFdID09ICdcbicpCiAgICAgICAgICAgICBvZmZzZXQtLTsKQEAgLTE2MjcsNyArMTc5MSw3IEBACiAgICAgaWYgKFB5TG9uZ19DaGVjayh2YWx1ZSkpCiAgICAgICAgIGV4aXRjb2RlID0gKGludClQeUxvbmdfQXNMb25nKHZhbHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnN5c19zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBQeU9iamVjdCAqc3lzX3N0ZGVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOwogICAgICAgICBpZiAoc3lzX3N0ZGVyciAhPSBOVUxMICYmIHN5c19zdGRlcnIgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KHZhbHVlLCBzeXNfc3RkZXJyLCBQeV9QUklOVF9SQVcpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTY3MCwxMSArMTgzNCwxMSBAQAogICAgICAgICByZXR1cm47CiAgICAgLyogTm93IHdlIGtub3cgdiAhPSBOVUxMIHRvbyAqLwogICAgIGlmIChzZXRfc3lzX2xhc3RfdmFycykgewotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdHlwZSIsIGV4Y2VwdGlvbik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgibGFzdF92YWx1ZSIsIHYpOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdHJhY2ViYWNrIiwgdGIpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF90eXBlLCBleGNlcHRpb24pOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF92YWx1ZSwgdik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9sYXN0X3RyYWNlYmFjaywgdGIpOwogICAgIH0KLSAgICBob29rID0gUHlTeXNfR2V0T2JqZWN0KCJleGNlcHRob29rIik7CisgICAgaG9vayA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9leGNlcHRob29rKTsKICAgICBpZiAoaG9vaykgewogICAgICAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfUGFjaygzLCBleGNlcHRpb24sIHYsIHRiKTsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGhvb2ssIGFyZ3MpOwpAQCAtMTczOSwyNyArMTkwMywzMCBAQAogICAgIGlmIChlcnIgPT0gMCAmJgogICAgICAgICBfUHlPYmplY3RfSGFzQXR0cklkKHZhbHVlLCAmUHlJZF9wcmludF9maWxlX2FuZF9saW5lKSkKICAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICptZXNzYWdlOwotICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgKnRleHQ7CisgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlLCAqZmlsZW5hbWUsICp0ZXh0OwogICAgICAgICBpbnQgbGluZW5vLCBvZmZzZXQ7CiAgICAgICAgIGlmICghcGFyc2Vfc3ludGF4X2Vycm9yKHZhbHVlLCAmbWVzc2FnZSwgJmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGluZW5vLCAmb2Zmc2V0LCAmdGV4dCkpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzEwXTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiICBGaWxlIFwiIiwgZik7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjxzdHJpbmc+IiwgZik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGZpbGVuYW1lLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXCIsIGxpbmUgIiwgZik7Ci0gICAgICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGxpbmVubyk7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoYnVmLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKTsKLSAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcHJpbnRfZXJyb3JfdGV4dChmLCBvZmZzZXQsIHRleHQpOworICAgICAgICAgICAgUHlPYmplY3QgKmxpbmU7CisKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IG1lc3NhZ2U7CisKKyAgICAgICAgICAgIGxpbmUgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiICBGaWxlIFwiJVVcIiwgbGluZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8pOworICAgICAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmIChsaW5lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QobGluZSwgZiwgUHlfUFJJTlRfUkFXKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludF9lcnJvcl90ZXh0KGYsIG9mZnNldCwgdGV4dCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRleHQpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvKiBDYW4ndCBiZSBib3RoZXJlZCB0byBjaGVjayBhbGwgdGhvc2UKICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygpIGNhbGxzICovCiAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE3ODgsMTAgKzE5NTUsOSBAQAogICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIqIG1vZHN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICBpZiAobW9kc3RyICYmIHN0cmNtcChtb2RzdHIsICJidWlsdGlucyIpKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2R1bGVOYW1lLCAmUHlJZF9idWlsdGlucykgIT0gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcobW9kc3RyLCBmKTsKKyAgICAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVPYmplY3QobW9kdWxlTmFtZSwgZiwgUHlfUFJJTlRfUkFXKTsKICAgICAgICAgICAgICAgICBlcnIgKz0gUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlTmFtZSk7CkBAIC0xODg0LDcgKzIwNTAsNyBAQAogUHlFcnJfRGlzcGxheShQeU9iamVjdCAqZXhjZXB0aW9uLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0YikKIHsKICAgICBQeU9iamVjdCAqc2VlbjsKLSAgICBQeU9iamVjdCAqZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkKICAgICAgICAgJiYgdGIgIT0gTlVMTCAmJiBQeVRyYWNlQmFja19DaGVjayh0YikpIHsKICAgICAgICAgLyogUHV0IHRoZSB0cmFjZWJhY2sgb24gdGhlIGV4Y2VwdGlvbiwgb3RoZXJ3aXNlIGl0IHdvbid0IGdldApAQCAtMTkyMCwzNyArMjA4Niw1NCBAQAogewogICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIG1vZF90eSBtb2Q7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIFB5QXJlbmEgKmFyZW5hOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKworICAgIGZpbGVuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfc3RyaW5nKTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsICI8c3RyaW5nPiIsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCAhPSBOVUxMKQotICAgICAgICByZXQgPSBydW5fbW9kKG1vZCwgIjxzdHJpbmc+IiwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOworICAgICAgICByZXQgPSBydW5fbW9kKG1vZCwgZmlsZW5hbWUsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiByZXQ7CiB9CiAKIFB5T2JqZWN0ICoKLVB5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywKK1B5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwgUHlPYmplY3QgKmdsb2JhbHMsCiAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzLCBpbnQgY2xvc2VpdCwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqcmV0OworICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIG1vZF90eSBtb2Q7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOwotICAgIGlmIChhcmVuYSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeUFyZW5hICphcmVuYSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGUoZnAsIGZpbGVuYW1lLCBOVUxMLCBzdGFydCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgTlVMTCwgYXJlbmEpOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgaWYgKGFyZW5hID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgTlVMTCwgc3RhcnQsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIE5VTEwsIGFyZW5hKTsKICAgICBpZiAoY2xvc2VpdCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKLSAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgcmV0ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7Ci0gICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKKworZXhpdDoKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICBpZiAoYXJlbmEgIT0gTlVMTCkKKyAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xOTU5LDEyICsyMTQyLDExIEBACiB7CiAgICAgUHlPYmplY3QgKmYsICpyOwogICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogCiAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24gKi8KICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKIAotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgIHIgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX2ZsdXNoLCAiIik7CiAgICAgICAgIGlmIChyKQpAQCAtMTk3Miw3ICsyMTU0LDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgaWYgKHIpCkBAIC0xOTg1LDEyICsyMTY3LDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ydW5fbW9kKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywKLSAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQorcnVuX21vZChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAorICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeU9iamVjdCAqdjsKLSAgICBjbyA9IFB5QVNUX0NvbXBpbGUobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIGFyZW5hKTsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIC0xLCBhcmVuYSk7CiAgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoKFB5T2JqZWN0KiljbywgZ2xvYmFscywgbG9jYWxzKTsKQEAgLTIwMzIsOCArMjIxNCw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKK1B5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogewogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgbW9kX3R5IG1vZDsKQEAgLTIwNDEsNyArMjIyMyw3IEBACiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIwNTEsMTEgKzIyMzMsMjQgQEAKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgY28gPSBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWNvOwogfQogCitQeU9iamVjdCAqCitQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKmNvOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBjbyA9IFB5X0NvbXBpbGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBvcHRpbWl6ZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gY287Cit9CisKIC8qIEZvciB1c2UgaW4gUHlfTElNSVRFRF9BUEkgKi8KICN1bmRlZiBQeV9Db21waWxlU3RyaW5nCiBQeU9iamVjdCAqCkBAIC0yMDY1LDQ2ICsyMjYwLDYyIEBACiB9CiAKIHN0cnVjdCBzeW10YWJsZSAqCi1QeV9TeW10YWJsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCitQeV9TeW10YWJsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0KQogewogICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgZmxhZ3M7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIFB5QXJlbmEgKmFyZW5hOworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZsYWdzLmNmX2ZsYWdzID0gMDsKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCAmZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCAmZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZChtb2QsIGZpbGVuYW1lLCAwKTsKKyAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgMCk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gc3Q7CiB9CiAKK3N0cnVjdCBzeW10YWJsZSAqCitQeV9TeW10YWJsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0KQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHN0OworfQorCiAvKiBQcmVmZXJyZWQgYWNjZXNzIHRvIHBhcnNlciBpcyB0aHJvdWdoIEFTVC4gKi8KIG1vZF90eQotUHlQYXJzZXJfQVNURnJvbVN0cmluZyhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK1B5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QoY29uc3QgY2hhciAqcywgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsZmxhZ3M7CiAgICAgcGVycmRldGFpbCBlcnI7CiAgICAgaW50IGlmbGFncyA9IFBBUlNFUl9GTEFHUyhmbGFncyk7CiAKLSAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgocywgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsIHN0YXJ0LCAmZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlmbGFncyk7CisgICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsIHN0YXJ0LCAmZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZsYWdzKTsKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBsb2NhbGZsYWdzLmNmX2ZsYWdzID0gMDsKICAgICAgICAgZmxhZ3MgPSAmbG9jYWxmbGFnczsKICAgICB9CiAgICAgaWYgKG4pIHsKICAgICAgICAgZmxhZ3MtPmNmX2ZsYWdzIHw9IGlmbGFncyAmIFB5Q0ZfTUFTSzsKLSAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOwogICAgICAgICBQeU5vZGVfRnJlZShuKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMTE2LDI2ICsyMzI3LDQwIEBACiB9CiAKIG1vZF90eQotUHlQYXJzZXJfQVNURnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyKiBlbmMsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAotICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCitQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgbW9kX3R5IG1vZDsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworfQorCittb2RfdHkKK1B5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKIHsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbGZsYWdzOwogICAgIHBlcnJkZXRhaWwgZXJyOwogICAgIGludCBpZmxhZ3MgPSBQQVJTRVJfRkxBR1MoZmxhZ3MpOwogCi0gICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsICZlcnIsICZpZmxhZ3MpOworICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsICZlcnIsICZpZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FsZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgICAgICBmbGFncyA9ICZsb2NhbGZsYWdzOwogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBmbGFncy0+Y2ZfZmxhZ3MgfD0gaWZsYWdzICYgUHlDRl9NQVNLOwotICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CiAgICAgICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTIxNDgsNiArMjM3MywyMyBAQAogICAgIHJldHVybiBtb2Q7CiB9CiAKK21vZF90eQorUHlQYXJzZXJfQVNURnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQoreworICAgIG1vZF90eSBtb2Q7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywgc3RhcnQsIHBzMSwgcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBlcnJjb2RlLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworfQorCiAvKiBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBwYXJzZWZpbGUgLS0gcmV0dXJuIG5vZGUgb3Igc2V0IGV4Y2VwdGlvbiAqLwogCiBub2RlICoKQEAgLTI0NzQsNiArMjcxNiw5IEBACiAgICAgUHlPU19zZXRzaWcoU0lHWEZTWiwgU0lHX0lHTik7CiAjZW5kaWYKICAgICBQeU9TX0luaXRJbnRlcnJ1cHRzKCk7IC8qIE1heSBpbXBseSBpbml0c2lnbmFsKCkgKi8KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbXBvcnQgc2lnbmFsIik7CisgICAgfQogfQogCiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9yYW5kb20uYyBiL1B5dGhvbi9yYW5kb20uYwppbmRleCAzMzdiZTg2Li5kZThlOWU3IDEwMDY0NAotLS0gYS9QeXRob24vcmFuZG9tLmMKKysrIGIvUHl0aG9uL3JhbmRvbS5jCkBAIC0xMiwxMyArMTIsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi10eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ1JZUFRBQ1FVSVJFQ09OVEVYVEEpKEhDUllQVFBST1YgKnBoUHJvdixcCi0gICAgICAgICAgICAgIExQQ1NUUiBwc3pDb250YWluZXIsIExQQ1NUUiBwc3pQcm92aWRlciwgRFdPUkQgZHdQcm92VHlwZSxcCi0gICAgICAgICAgICAgIERXT1JEIGR3RmxhZ3MgKTsKLXR5cGVkZWYgQk9PTCAoV0lOQVBJICpDUllQVEdFTlJBTkRPTSkoSENSWVBUUFJPViBoUHJvdiwgRFdPUkQgZHdMZW4sXAotICAgICAgICAgICAgICBCWVRFICpwYkJ1ZmZlciApOwotCi1zdGF0aWMgQ1JZUFRHRU5SQU5ET00gcENyeXB0R2VuUmFuZG9tID0gTlVMTDsKIC8qIFRoaXMgaGFuZGxlIGlzIG5ldmVyIGV4cGxpY2l0bHkgcmVsZWFzZWQuIEluc3RlYWQsIHRoZSBvcGVyYXRpbmcKICAgIHN5c3RlbSB3aWxsIHJlbGVhc2UgaXQgd2hlbiB0aGUgcHJvY2VzcyB0ZXJtaW5hdGVzLiAqLwogc3RhdGljIEhDUllQVFBST1YgaENyeXB0UHJvdiA9IDA7CkBAIC0yNiwyOSArMTksOSBAQAogc3RhdGljIGludAogd2luMzJfdXJhbmRvbV9pbml0KGludCByYWlzZSkKIHsKLSAgICBISU5TVEFOQ0UgaEFkdkFQSTMyID0gTlVMTDsKLSAgICBDUllQVEFDUVVJUkVDT05URVhUQSBwQ3J5cHRBY3F1aXJlQ29udGV4dCA9IE5VTEw7Ci0KLSAgICAvKiBPYnRhaW4gaGFuZGxlIHRvIHRoZSBETEwgY29udGFpbmluZyBDcnlwdG9BUEkuIFRoaXMgc2hvdWxkIG5vdCBmYWlsLiAqLwotICAgIGhBZHZBUEkzMiA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7Ci0gICAgaWYoaEFkdkFQSTMyID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBPYnRhaW4gcG9pbnRlcnMgdG8gdGhlIENyeXB0b0FQSSBmdW5jdGlvbnMuIFRoaXMgd2lsbCBmYWlsIG9uIHNvbWUgZWFybHkKLSAgICAgICB2ZXJzaW9ucyBvZiBXaW45NS4gKi8KLSAgICBwQ3J5cHRBY3F1aXJlQ29udGV4dCA9IChDUllQVEFDUVVJUkVDT05URVhUQSlHZXRQcm9jQWRkcmVzcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoQWR2QVBJMzIsICJDcnlwdEFjcXVpcmVDb250ZXh0QSIpOwotICAgIGlmIChwQ3J5cHRBY3F1aXJlQ29udGV4dCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgcENyeXB0R2VuUmFuZG9tID0gKENSWVBUR0VOUkFORE9NKUdldFByb2NBZGRyZXNzKGhBZHZBUEkzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNyeXB0R2VuUmFuZG9tIik7Ci0gICAgaWYgKHBDcnlwdEdlblJhbmRvbSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCiAgICAgLyogQWNxdWlyZSBjb250ZXh0ICovCi0gICAgaWYgKCEgcENyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVl9SU0FfRlVMTCwgQ1JZUFRfVkVSSUZZQ09OVEVYVCkpCisgICAgaWYgKCFDcnlwdEFjcXVpcmVDb250ZXh0KCZoQ3J5cHRQcm92LCBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIHJldHVybiAwOwpAQCAtNzcsNyArNTAsNyBAQAogICAgIHdoaWxlIChzaXplID4gMCkKICAgICB7CiAgICAgICAgIGNodW5rID0gc2l6ZSA+IElOVF9NQVggPyBJTlRfTUFYIDogc2l6ZTsKLSAgICAgICAgaWYgKCFwQ3J5cHRHZW5SYW5kb20oaENyeXB0UHJvdiwgY2h1bmssIGJ1ZmZlcikpCisgICAgICAgIGlmICghQ3J5cHRHZW5SYW5kb20oaENyeXB0UHJvdiwgKERXT1JEKWNodW5rLCBidWZmZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiBDcnlwdEdlblJhbmRvbSgpIGZhaWxlZCAqLwogICAgICAgICAgICAgaWYgKHJhaXNlKQpAQCAtMTE3LDE4ICs5MCwxOSBAQAogCiAKICNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChfX1ZNUykKK3N0YXRpYyBpbnQgdXJhbmRvbV9mZCA9IC0xOwogCiAvKiBSZWFkIHNpemUgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20gaW50byBidWZmZXIuCiAgICBDYWxsIFB5X0ZhdGFsRXJyb3IoKSBvbiBlcnJvci4gKi8KIHN0YXRpYyB2b2lkCi1kZXZfdXJhbmRvbV9ub3JhaXNlKGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQorZGV2X3VyYW5kb21fbm9yYWlzZSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKICAgICBpbnQgZmQ7CiAgICAgUHlfc3NpemVfdCBuOwogCiAgICAgYXNzZXJ0ICgwIDwgc2l6ZSk7CiAKLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKyAgICBmZCA9IF9QeV9vcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CiAgICAgaWYgKGZkIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIG9wZW4gL2Rldi91cmFuZG9tIik7CiAKQEAgLTE2MCwxOCArMTM0LDMwIEBACiAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoZmQgPCAwKQotICAgIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAotICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOworICAgIGlmICh1cmFuZG9tX2ZkID49IDApCisgICAgICAgIGZkID0gdXJhbmRvbV9mZDsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBmZCA9IF9QeV9vcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChmZCA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSBFTk9FTlQgfHwgZXJybm8gPT0gRU5YSU8gfHwKKyAgICAgICAgICAgICAgICBlcnJubyA9PSBFTk9ERVYgfHwgZXJybm8gPT0gRUFDQ0VTKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL2Rldi91cmFuZG9tIChvciBlcXVpdmFsZW50KSBub3QgZm91bmQiKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkgeworICAgICAgICAgICAgLyogdXJhbmRvbV9mZCB3YXMgaW5pdGlhbGl6ZWQgYnkgYW5vdGhlciB0aHJlYWQgd2hpbGUgd2Ugd2VyZQorICAgICAgICAgICAgICAgbm90IGhvbGRpbmcgdGhlIEdJTCwga2VlcCBpdC4gKi8KKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIGZkID0gdXJhbmRvbV9mZDsKKyAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHVyYW5kb21fZmQgPSBmZDsKICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xOTUsMTIgKzE4MSwyMCBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIHJlYWQgJXppIGJ5dGVzIGZyb20gL2Rldi91cmFuZG9tIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKLSAgICAgICAgY2xvc2UoZmQpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGNsb3NlKGZkKTsKICAgICByZXR1cm4gMDsKIH0KKworc3RhdGljIHZvaWQKK2Rldl91cmFuZG9tX2Nsb3NlKHZvaWQpCit7CisgICAgaWYgKHVyYW5kb21fZmQgPj0gMCkgeworICAgICAgICBjbG9zZSh1cmFuZG9tX2ZkKTsKKyAgICAgICAgdXJhbmRvbV9mZCA9IC0xOworICAgIH0KK30KKwogI2VuZGlmIC8qICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKSAqLwogCiAvKiBGaWxsIGJ1ZmZlciB3aXRoIHBzZXVkby1yYW5kb20gYnl0ZXMgZ2VuZXJhdGVkIGJ5IGEgbGluZWFyIGNvbmdydWVudApAQCAtMjU1LDggKzI0OSw5IEBACiBfUHlSYW5kb21fSW5pdCh2b2lkKQogewogICAgIGNoYXIgKmVudjsKLSAgICB2b2lkICpzZWNyZXQgPSAmX1B5X0hhc2hTZWNyZXQ7CisgICAgdW5zaWduZWQgY2hhciAqc2VjcmV0ID0gKHVuc2lnbmVkIGNoYXIgKikmX1B5X0hhc2hTZWNyZXQudWM7CiAgICAgUHlfc3NpemVfdCBzZWNyZXRfc2l6ZSA9IHNpemVvZihfUHlfSGFzaFNlY3JldF90KTsKKyAgICBhc3NlcnQoc2VjcmV0X3NpemUgPT0gc2l6ZW9mKF9QeV9IYXNoU2VjcmV0LnVjKSk7CiAKICAgICBpZiAoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NCwxOCArMjc5LDI2IEBACiAgICAgICAgICAgICBtZW1zZXQoc2VjcmV0LCAwLCBzZWNyZXRfc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsY2dfdXJhbmRvbShzZWVkLCAodW5zaWduZWQgY2hhciopc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CisgICAgICAgICAgICBsY2dfdXJhbmRvbShzZWVkLCBzZWNyZXQsIHNlY3JldF9zaXplKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgICh2b2lkKXdpbjMyX3VyYW5kb20oKHVuc2lnbmVkIGNoYXIgKilzZWNyZXQsIHNlY3JldF9zaXplLCAwKTsKKyAgICAgICAgKHZvaWQpd2luMzJfdXJhbmRvbShzZWNyZXQsIHNlY3JldF9zaXplLCAwKTsKICNlbHNlIC8qICNpZmRlZiBNU19XSU5ET1dTICovCiAjIGlmZGVmIF9fVk1TCi0gICAgICAgIHZtc191cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7CisgICAgICAgIHZtc191cmFuZG9tKHNlY3JldCwgc2VjcmV0X3NpemUsIDApOwogIyBlbHNlCi0gICAgICAgIGRldl91cmFuZG9tX25vcmFpc2UoKGNoYXIqKXNlY3JldCwgc2VjcmV0X3NpemUpOworICAgICAgICBkZXZfdXJhbmRvbV9ub3JhaXNlKHNlY3JldCwgc2VjcmV0X3NpemUpOwogIyBlbmRpZgogI2VuZGlmCiAgICAgfQogfQorCit2b2lkCitfUHlSYW5kb21fRmluaSh2b2lkKQoreworI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKQorICAgIGRldl91cmFuZG9tX2Nsb3NlKCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9zdHJkdXAuYyBiL1B5dGhvbi9zdHJkdXAuYwppbmRleCAyMDE4N2UwLi43NjlkM2RiIDEwMDY0NAotLS0gYS9QeXRob24vc3RyZHVwLmMKKysrIGIvUHl0aG9uL3N0cmR1cC5jCkBAIC02LDcgKzYsNyBAQAogc3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKIHsKIAlpZiAoc3RyICE9IE5VTEwpIHsKLQkJcmVnaXN0ZXIgY2hhciAqY29weSA9IG1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOworCQljaGFyICpjb3B5ID0gbWFsbG9jKHN0cmxlbihzdHIpICsgMSk7CiAJCWlmIChjb3B5ICE9IE5VTEwpCiAJCQlyZXR1cm4gc3RyY3B5KGNvcHksIHN0cik7CiAJfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5bXRhYmxlLmMgYi9QeXRob24vc3ltdGFibGUuYwppbmRleCAxZTEzYjc5MC4uZGExNjRhYSAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5bXRhYmxlLmMKKysrIGIvUHl0aG9uL3N5bXRhYmxlLmMKQEAgLTM3LDI0ICszNywxNCBAQAogICAgIHN0ZS0+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+c3RlX3ZhcmtleXdvcmRzID0gMTsKICAgICB9CkBAIC0xNTg3LDcgKzE2NDIsNyBAQAogICAgICAgICAgICAgaW50IGxpbmVubyA9IHN0LT5zdF9jdXItPnN0ZV9saW5lbm87CiAgICAgICAgICAgICBpbnQgY29sX29mZnNldCA9IHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCBJTVBPUlRfU1RBUl9XQVJOSU5HKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN0b3JlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeXNtb2R1bGUuYyBiL1B5dGhvbi9zeXNtb2R1bGUuYwppbmRleCBkZjlkZmIxLi40MDI4YTAxIDEwMDY0NAotLS0gYS9QeXRob24vc3lzbW9kdWxlLmMKKysrIGIvUHl0aG9uL3N5c21vZHVsZS5jCkBAIC00MSw2ICs0MSwyNiBAQAogI2luY2x1ZGUgPGxhbmdpbmZvLmg+CiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoXyk7CitfUHlfSURFTlRJRklFUihfX3NpemVvZl9fKTsKK19QeV9JREVOVElGSUVSKGJ1ZmZlcik7CitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CitfUHlfSURFTlRJRklFUihlbmNvZGluZyk7CitfUHlfSURFTlRJRklFUihwYXRoKTsKK19QeV9JREVOVElGSUVSKHN0ZG91dCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOworX1B5X0lERU5USUZJRVIod3JpdGUpOworCitQeU9iamVjdCAqCitfUHlTeXNfR2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSkKK3sKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5T2JqZWN0ICpzZCA9IHRzdGF0ZS0+aW50ZXJwLT5zeXNkaWN0OworICAgIGlmIChzZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5RGljdF9HZXRJdGVtSWQoc2QsIGtleSk7Cit9CisKIFB5T2JqZWN0ICoKIFB5U3lzX0dldE9iamVjdChjb25zdCBjaGFyICpuYW1lKQogewpAQCAtNTIsNiArNzIsMjEgQEAKIH0KIAogaW50CitfUHlTeXNfU2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSwgUHlPYmplY3QgKnYpCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeU9iamVjdCAqc2QgPSB0c3RhdGUtPmludGVycC0+c3lzZGljdDsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZChzZCwga2V5KSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBfUHlEaWN0X0RlbEl0ZW1JZChzZCwga2V5KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gX1B5RGljdF9TZXRJdGVtSWQoc2QsIGtleSwgdik7Cit9CisKK2ludAogUHlTeXNfU2V0T2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQogewogICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CkBAIC03OSw4ICsxMTQsNiBAQAogICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqZXNjYXBlZF9zdHIsICpyZXByX3N0ciwgKmJ1ZmZlciwgKnJlc3VsdDsKICAgICBjaGFyICpzdGRvdXRfZW5jb2Rpbmdfc3RyOwogICAgIGludCByZXQ7Ci0gICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOwotICAgIF9QeV9JREVOVElGSUVSKGJ1ZmZlcik7CiAKICAgICBzdGRvdXRfZW5jb2RpbmcgPSBfUHlPYmplY3RfR2V0QXR0cklkKG91dGYsICZQeUlkX2VuY29kaW5nKTsKICAgICBpZiAoc3Rkb3V0X2VuY29kaW5nID09IE5VTEwpCkBAIC0xMDEsNyArMTM0LDYgQEAKIAogICAgIGJ1ZmZlciA9IF9QeU9iamVjdF9HZXRBdHRySWQob3V0ZiwgJlB5SWRfYnVmZmVyKTsKICAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKICAgICAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChidWZmZXIsICZQeUlkX3dyaXRlLCAiKE8pIiwgZW5jb2RlZCk7CiAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CkBAIC0xMzcsMTAgKzE2OSwxMSBAQAogICAgIFB5T2JqZWN0ICpvdXRmOwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOwogICAgIFB5T2JqZWN0ICptb2R1bGVzID0gaW50ZXJwLT5tb2R1bGVzOwotICAgIFB5T2JqZWN0ICpidWlsdGlucyA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIpOworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBzdGF0aWMgUHlPYmplY3QgKm5ld2xpbmUgPSBOVUxMOwogICAgIGludCBlcnI7Ci0gICAgX1B5X0lERU5USUZJRVIoXyk7CiAKKyAgICBidWlsdGlucyA9IF9QeURpY3RfR2V0SXRlbUlkKG1vZHVsZXMsICZQeUlkX2J1aWx0aW5zKTsKICAgICBpZiAoYnVpbHRpbnMgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAibG9zdCBidWlsdGlucyBtb2R1bGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTUsNyArMTg4LDcgQEAKICAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoYnVpbHRpbnMsICZQeUlkX18sIFB5X05vbmUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIG91dGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOworICAgIG91dGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKICAgICBpZiAob3V0ZiA9PSBOVUxMIHx8IG91dGYgPT0gUHlfTm9uZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAibG9zdCBzeXMuc3Rkb3V0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTczLDcgKzIwNiwxMiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBvdXRmKSAhPSAwKQorICAgIGlmIChuZXdsaW5lID09IE5VTEwpIHsKKyAgICAgICAgbmV3bGluZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJcbiIpOworICAgICAgICBpZiAobmV3bGluZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3QobmV3bGluZSwgb3V0ZiwgUHlfUFJJTlRfUkFXKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChidWlsdGlucywgJlB5SWRfXywgbykgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMzIsMTIgKzM3MCwxNiBAQAogY2FsbF90cmFtcG9saW5lKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlPYmplY3QqIGNhbGxiYWNrLAogICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKmZyYW1lLCBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICBQeU9iamVjdCAqYXJncyA9IFB5VHVwbGVfTmV3KDMpOworICAgIFB5T2JqZWN0ICphcmdzOwogICAgIFB5T2JqZWN0ICp3aGF0c3RyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKKyAgICBhcmdzID0gUHlUdXBsZV9OZXcoMyk7CiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGZyYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgUHlfSU5DUkVGKGZyYW1lKTsKICAgICB3aGF0c3RyID0gd2hhdHN0cmluZ3Nbd2hhdF07CiAgICAgUHlfSU5DUkVGKHdoYXRzdHIpOwpAQCAtMzQ5LDcgKzM5MSw2IEBACiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAyLCBhcmcpOwogCiAgICAgLyogY2FsbCB0aGUgUHl0aG9uLWxldmVsIGZ1bmN0aW9uICovCi0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoZnJhbWUpOwogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGNhbGxiYWNrLCBhcmdzKTsKICAgICBQeUZyYW1lX0xvY2Fsc1RvRmFzdChmcmFtZSwgMSk7CiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQpAQCAtNjE3LDcgKzY1OCw3IEBACiAiaGFzaF9pbmZvXG5cCiBcblwKIEEgc3RydWN0IHNlcXVlbmNlIHByb3ZpZGluZyBwYXJhbWV0ZXJzIHVzZWQgZm9yIGNvbXB1dGluZ1xuXAotbnVtZXJpYyBoYXNoZXMuICBUaGUgYXR0cmlidXRlcyBhcmUgcmVhZCBvbmx5LiIpOworaGFzaGVzLiBUaGUgYXR0cmlidXRlcyBhcmUgcmVhZCBvbmx5LiIpOwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBoYXNoX2luZm9fZmllbGRzW10gPSB7CiAgICAgeyJ3aWR0aCIsICJ3aWR0aCBvZiB0aGUgdHlwZSB1c2VkIGZvciBoYXNoaW5nLCBpbiBiaXRzIn0sCkBAIC02MjYsNiArNjY3LDExIEBACiAgICAgeyJpbmYiLCAidmFsdWUgdG8gYmUgdXNlZCBmb3IgaGFzaCBvZiBhIHBvc2l0aXZlIGluZmluaXR5In0sCiAgICAgeyJuYW4iLCAidmFsdWUgdG8gYmUgdXNlZCBmb3IgaGFzaCBvZiBhIG5hbiJ9LAogICAgIHsiaW1hZyIsICJtdWx0aXBsaWVyIHVzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyIn0sCisgICAgeyJhbGdvcml0aG0iLCAibmFtZSBvZiB0aGUgYWxnb3JpdGhtIGZvciBoYXNoaW5nIG9mIHN0ciwgYnl0ZXMgYW5kICIKKyAgICAgICAgICAgICAgICAgICJtZW1vcnl2aWV3cyJ9LAorICAgIHsiaGFzaF9iaXRzIiwgImludGVybmFsIG91dHB1dCBzaXplIG9mIGhhc2ggYWxnb3JpdGhtIn0sCisgICAgeyJzZWVkX2JpdHMiLCAic2VlZCBzaXplIG9mIGhhc2ggYWxnb3JpdGhtIn0sCisgICAgeyJjdXRvZmYiLCAic21hbGwgc3RyaW5nIG9wdGltaXphdGlvbiBjdXRvZmYifSwKICAgICB7TlVMTCwgTlVMTH0KIH07CiAKQEAgLTYzMyw3ICs2NzksNyBAQAogICAgICJzeXMuaGFzaF9pbmZvIiwKICAgICBoYXNoX2luZm9fZG9jLAogICAgIGhhc2hfaW5mb19maWVsZHMsCi0gICAgNSwKKyAgICA5LAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTY0MSw5ICs2ODcsMTEgQEAKIHsKICAgICBQeU9iamVjdCAqaGFzaF9pbmZvOwogICAgIGludCBmaWVsZCA9IDA7CisgICAgUHlIYXNoX0Z1bmNEZWYgKmhhc2hmdW5jOwogICAgIGhhc2hfaW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZIYXNoX0luZm9UeXBlKTsKICAgICBpZiAoaGFzaF9pbmZvID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGhhc2hmdW5jID0gUHlIYXNoX0dldEZ1bmNEZWYoKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyg4KnNpemVvZihQeV9oYXNoX3QpKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCkBAIC02NTQsNiArNzAyLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoX1B5SEFTSF9OQU4pKTsKICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX0lNQUcpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGhhc2hmdW5jLT5uYW1lKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoaGFzaGZ1bmMtPmhhc2hfYml0cykpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKGhhc2hmdW5jLT5zZWVkX2JpdHMpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhQeV9IQVNIX0NVVE9GRikpOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0NMRUFSKGhhc2hfaW5mbyk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNzc0LDcgKzgzMCw3IEBACiBpbnRlcnByZXRlciBsb2FkcyBleHRlbnNpb24gbW9kdWxlcy4gIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyB3aWxsIGVuYWJsZVxuXAogYSBsYXp5IHJlc29sdmluZyBvZiBzeW1ib2xzIHdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlLCBpZiBjYWxsZWQgYXNcblwKIHN5cy5zZXRkbG9wZW5mbGFncygwKS4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzXG5cCi1zeXMuc2V0ZGxvcGVuZmxhZ3MoY3R5cGVzLlJUTERfR0xPQkFMKS4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzXG5cCitzeXMuc2V0ZGxvcGVuZmxhZ3Mob3MuUlRMRF9HTE9CQUwpLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXNcblwKIGNhbiBiZSBmb3VuZCBpbiB0aGUgb3MgbW9kdWxlIChSVExEX3h4eCBjb25zdGFudHMsIGUuZy4gb3MuUlRMRF9MQVpZKS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc5MCw3ICs4NDYsNyBAQAogImdldGRsb3BlbmZsYWdzKCkgLT4gaW50XG5cCiBcblwKIFJldHVybiB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZmxhZ3MgdGhhdCBhcmUgdXNlZCBmb3IgZGxvcGVuIGNhbGxzLlxuXAotVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSBjdHlwZXMgYW5kIERMRkNOIG1vZHVsZXMuIik7CitUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIG9zIG1vZHVsZS4iKTsKIAogI2VuZGlmICAvKiBIQVZFX0RMT1BFTiAqLwogCkBAIC04MTgsNyArODc0LDYgQEAKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iamVjdCIsICJkZWZhdWx0IiwgMH07CiAgICAgUHlPYmplY3QgKm8sICpkZmx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqbWV0aG9kOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpnZXRzaXplb2YiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm8sICZkZmx0KSkKQEAgLTg5NCw2ICs5NDksMTkgQEAKIHJlZmVyZW5jZSBhcyBhbiBhcmd1bWVudCB0byBnZXRyZWZjb3VudCgpLiIKICk7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitzeXNfZ2V0YWxsb2NhdGVkYmxvY2tzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoX1B5X0dldEFsbG9jYXRlZEJsb2NrcygpKTsKK30KKworUHlEb2NfU1RSVkFSKGdldGFsbG9jYXRlZGJsb2Nrc19kb2MsCisiZ2V0YWxsb2NhdGVkYmxvY2tzKCkgLT4gaW50ZWdlclxuXAorXG5cCitSZXR1cm4gdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlaXJcblwKK3NpemUuIgorKTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogc3RhdGljIFB5T2JqZWN0ICoKIHN5c19nZXRjb3VudHMoUHlPYmplY3QgKnNlbGYpCkBAIC0xMDYyLDYgKzExMzAsOCBAQAogICAgIHsiZ2V0ZGxvcGVuZmxhZ3MiLCAoUHlDRnVuY3Rpb24pc3lzX2dldGRsb3BlbmZsYWdzLCBNRVRIX05PQVJHUywKICAgICAgZ2V0ZGxvcGVuZmxhZ3NfZG9jfSwKICNlbmRpZgorICAgIHsiZ2V0YWxsb2NhdGVkYmxvY2tzIiwgKFB5Q0Z1bmN0aW9uKXN5c19nZXRhbGxvY2F0ZWRibG9ja3MsIE1FVEhfTk9BUkdTLAorICAgICAgZ2V0YWxsb2NhdGVkYmxvY2tzX2RvY30sCiAjaWZkZWYgQ09VTlRfQUxMT0NTCiAgICAgeyJnZXRjb3VudHMiLCAgICAgICAoUHlDRnVuY3Rpb24pc3lzX2dldGNvdW50cywgTUVUSF9OT0FSR1N9LAogI2VuZGlmCkBAIC0xMjgzLDYgKzEzNTMsNyBAQAogZXhlY3V0YWJsZSAtLSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIGJpbmFyeSBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyXG5cCiBmbG9hdF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsb2F0IGltcGxlbWVudGF0aW9uLlxuXAogZmxvYXRfcmVwcl9zdHlsZSAtLSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgc3R5bGUgb2YgcmVwcigpIG91dHB1dCBmb3IgZmxvYXRzXG5cCitoYXNoX2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFzaCBhbGdvcml0aG0uXG5cCiBoZXh2ZXJzaW9uIC0tIHZlcnNpb24gaW5mb3JtYXRpb24gZW5jb2RlZCBhcyBhIHNpbmdsZSBpbnRlZ2VyXG5cCiBpbXBsZW1lbnRhdGlvbiAtLSBQeXRob24gaW1wbGVtZW50YXRpb24gaW5mb3JtYXRpb24uXG5cCiBpbnRfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnQgaW1wbGVtZW50YXRpb24uXG5cCkBAIC0xMzQ5LDE0ICsxNDIwLDEyIEBACiAgICAgeyJub19zaXRlIiwgICAgICAgICAgICAgICAgICItUyJ9LAogICAgIHsiaWdub3JlX2Vudmlyb25tZW50IiwgICAgICAiLUUifSwKICAgICB7InZlcmJvc2UiLCAgICAgICAgICAgICAgICAgIi12In0sCi0jaWZkZWYgUklTQ09TCi0gICAgeyJyaXNjb3Nfd2ltcCIsICAgICAgICAgICAgICI/Pz8ifSwKLSNlbmRpZgogICAgIC8qIHsidW5idWZmZXJlZCIsICAgICAgICAgICAgICAgICAgICItdSJ9LCAqLwogICAgIC8qIHsic2tpcF9maXJzdCIsICAgICAgICAgICAgICAgICAgICIteCJ9LCAqLwogICAgIHsiYnl0ZXNfd2FybmluZyIsICAgICAgICAgICAiLWIifSwKICAgICB7InF1aWV0IiwgICAgICAgICAgICAgICAgICAgIi1xIn0sCiAgICAgeyJoYXNoX3JhbmRvbWl6YXRpb24iLCAgICAgICItUiJ9LAorICAgIHsiaXNvbGF0ZWQiLCAgICAgICAgICAgICAgICAiLUkifSwKICAgICB7MH0KIH07CiAKQEAgLTEzNjQsMTEgKzE0MzMsNyBAQAogICAgICJzeXMuZmxhZ3MiLCAgICAgICAgLyogbmFtZSAqLwogICAgIGZsYWdzX19kb2NfXywgICAgICAgLyogZG9jICovCiAgICAgZmxhZ3NfZmllbGRzLCAgICAgICAvKiBmaWVsZHMgKi8KLSNpZmRlZiBSSVNDT1MKICAgICAxMwotI2Vsc2UKLSAgICAxMgotI2VuZGlmCiB9OwogCiBzdGF0aWMgUHlPYmplY3QqCkBAIC0xMzkzLDE0ICsxNDU4LDEyIEBACiAgICAgU2V0RmxhZyhQeV9Ob1NpdGVGbGFnKTsKICAgICBTZXRGbGFnKFB5X0lnbm9yZUVudmlyb25tZW50RmxhZyk7CiAgICAgU2V0RmxhZyhQeV9WZXJib3NlRmxhZyk7Ci0jaWZkZWYgUklTQ09TCi0gICAgU2V0RmxhZyhQeV9SSVNDT1NXaW1wRmxhZyk7Ci0jZW5kaWYKICAgICAvKiBTZXRGbGFnKHNhd191bmJ1ZmZlcmVkX2ZsYWcpOyAqLwogICAgIC8qIFNldEZsYWcoc2tpcGZpcnN0bGluZSk7ICovCiAgICAgU2V0RmxhZyhQeV9CeXRlc1dhcm5pbmdGbGFnKTsKICAgICBTZXRGbGFnKFB5X1F1aWV0RmxhZyk7CiAgICAgU2V0RmxhZyhQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcpOworICAgIFNldEZsYWcoUHlfSXNvbGF0ZWRGbGFnKTsKICN1bmRlZiBTZXRGbGFnCiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtMTU2MCwxOCArMTYyMywzNSBAQAogUHlPYmplY3QgKgogX1B5U3lzX0luaXQodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKnYsICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwotICAgIGNoYXIgKnM7CisgICAgUHlPYmplY3QgKm0sICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3lzbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzeXNkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklORyhrZXksIHZhbHVlKSAgICAgICAgICAgICAgICAgXAotICAgIHYgPSB2YWx1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHYgIT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgICAgXAotICAgIFB5X1hERUNSRUYodikKKyNkZWZpbmUgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coa2V5LCB2YWx1ZSkgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9TWVNfRlJPTV9TVFJJTkcoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgcmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICp2ID0gKHZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsIGtleSwgdik7ICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICAgICAvKiBDaGVjayB0aGF0IHN0ZGluIGlzIG5vdCBhIGRpcmVjdG9yeQogICAgIFVzaW5nIHNoZWxsIHJlZGlyZWN0aW9uLCB5b3UgY2FuIHJlZGlyZWN0IHN0ZGluIHRvIGEgZGlyZWN0b3J5LApAQCAtMTU5MywxMCArMTY3MywxMCBAQAogCiAgICAgLyogc3RkaW4vc3Rkb3V0L3N0ZGVyciBhcmUgbm93IHNldCBieSBweXRob25ydW4uYyAqLwogCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl9fZGlzcGxheWhvb2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfX2V4Y2VwdGhvb2tfXyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImV4Y2VwdGhvb2siKSk7CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIl9fZGlzcGxheWhvb2tfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImRpc3BsYXlob29rIikpOworICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfX2V4Y2VwdGhvb2tfXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X0dldEl0ZW1TdHJpbmcoc3lzZGljdCwgImV4Y2VwdGhvb2siKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoUHlfR2V0VmVyc2lvbigpKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGV4dmVyc2lvbiIsCkBAIC0xNjMwLDI4ICsxNzEwLDI0IEBACiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW50X2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0dldEluZm8oKSk7CiAgICAgLyogaW5pdGlhbGl6ZSBoYXNoX2luZm8gKi8KLSAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkhhc2hfSW5mb1R5cGUsICZoYXNoX2luZm9fZGVzYyk7CisgICAgaWYgKEhhc2hfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSGFzaF9JbmZvVHlwZSwgJmhhc2hfaW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGFzaF9pbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9oYXNoX2luZm8oKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygibWF4dW5pY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoMHgxMEZGRkYpKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJidWlsdGluX21vZHVsZV9uYW1lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2J1aWx0aW5fbW9kdWxlX25hbWVzKCkpOwotICAgIHsKLSAgICAgICAgLyogQXNzdW1lcyB0aGF0IGxvbmdzIGFyZSBhdCBsZWFzdCAyIGJ5dGVzIGxvbmcuCi0gICAgICAgICAgIFNob3VsZCBiZSBzYWZlISAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIG51bWJlciA9IDE7Ci0gICAgICAgIGNoYXIgKnZhbHVlOworI2lmIFBZX0JJR19FTkRJQU4KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoImJpZyIpKTsKKyNlbHNlCisgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJsaXR0bGUiKSk7CisjZW5kaWYKIAotICAgICAgICBzID0gKGNoYXIgKikgJm51bWJlcjsKLSAgICAgICAgaWYgKHNbMF0gPT0gMCkKLSAgICAgICAgICAgIHZhbHVlID0gImJpZyI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gImxpdHRsZSI7Ci0gICAgICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcodmFsdWUpKTsKLSAgICB9CiAjaWZkZWYgTVNfQ09SRURMTAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImRsbGhhbmRsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbVZvaWRQdHIoUHlXaW5fRExMaE1vZHVsZSkpOwpAQCAtMTY2NCwyMiArMTc0MCwyMiBAQAogI2VuZGlmCiAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwpIHsKICAgICAgICAgd2Fybm9wdGlvbnMgPSBQeUxpc3RfTmV3KDApOworICAgICAgICBpZiAod2Fybm9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKHdhcm5vcHRpb25zKTsKICAgICB9Ci0gICAgaWYgKHdhcm5vcHRpb25zICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwotICAgIH0KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygid2Fybm9wdGlvbnMiLCB3YXJub3B0aW9ucyk7CiAKLSAgICB2ID0gZ2V0X3hvcHRpb25zKCk7Ci0gICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX3hvcHRpb25zIiwgdik7Ci0gICAgfQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfeG9wdGlvbnMiLCBnZXRfeG9wdGlvbnMoKSk7CiAKICAgICAvKiB2ZXJzaW9uX2luZm8gKi8KLSAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVmVyc2lvbkluZm9UeXBlLCAmdmVyc2lvbl9pbmZvX2Rlc2MpOworICAgIGlmIChWZXJzaW9uSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVmVyc2lvbkluZm9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZlcnNpb25faW5mb19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgdmVyc2lvbl9pbmZvID0gbWFrZV92ZXJzaW9uX2luZm8oKTsKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJ2ZXJzaW9uX2luZm8iLCB2ZXJzaW9uX2luZm8pOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KQEAgLTE2OTAsOCArMTc2NiwxMCBAQAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImltcGxlbWVudGF0aW9uIiwgbWFrZV9pbXBsX2luZm8odmVyc2lvbl9pbmZvKSk7CiAKICAgICAvKiBmbGFncyAqLwotICAgIGlmIChGbGFnc1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZGbGFnc1R5cGUsICZmbGFnc19kZXNjKTsKKyAgICBpZiAoRmxhZ3NUeXBlLnRwX25hbWUgPT0gMCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkZsYWdzVHlwZSwgJmZsYWdzX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJmbGFncyIsIG1ha2VfZmxhZ3MoKSk7CiAgICAgLyogcHJldmVudCB1c2VyIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyAqLwogICAgIEZsYWdzVHlwZS50cF9pbml0ID0gTlVMTDsKQEAgLTE3MDEsNyArMTc3OSw5IEBACiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIC8qIGdldHdpbmRvd3N2ZXJzaW9uICovCiAgICAgaWYgKFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJldpbmRvd3NWZXJzaW9uVHlwZSwgJndpbmRvd3NfdmVyc2lvbl9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZXaW5kb3dzVmVyc2lvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd2luZG93c192ZXJzaW9uX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KICAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfaW5pdCA9IE5VTEw7CiAgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX25ldyA9IE5VTEw7CkBAIC0xNzY1LDcgKzE4NDUsNyBAQAogICAgIFB5T2JqZWN0ICp2OwogICAgIGlmICgodiA9IG1ha2VwYXRob2JqZWN0KHBhdGgsIERFTElNKSkgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgY3JlYXRlIHN5cy5wYXRoIik7Ci0gICAgaWYgKFB5U3lzX1NldE9iamVjdCgicGF0aCIsIHYpICE9IDApCisgICAgaWYgKF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9wYXRoLCB2KSAhPSAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBhc3NpZ24gc3lzLnBhdGgiKTsKICAgICBQeV9ERUNSRUYodik7CiB9CkBAIC0xODM0LDcgKzE5MTQsNyBAQAogICAgIHdjaGFyX3QgZnVsbHBhdGhbTUFYX1BBVEhdOwogI2VuZGlmCiAKLSAgICBwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAocGF0aCA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MzMsNyArMjAxMyw3IEBACiB2b2lkCiBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIHsKLSAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgMSk7CisgICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIFB5X0lzb2xhdGVkRmxhZyA9PSAwKTsKIH0KIAogLyogUmVpbXBsZW1lbnRhdGlvbiBvZiBQeUZpbGVfV3JpdGVTdHJpbmcoKSBubyBjYWxsaW5nIGluZGlyZWN0bHkKQEAgLTE5NDQsNyArMjAyNCw2IEBACiB7CiAgICAgUHlPYmplY3QgKndyaXRlciA9IE5VTEwsICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0yMDIxLDcgKzIxMDAsNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1zeXNfd3JpdGUoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3N5c193cml0ZShfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CkBAIC0yMDI5LDcgKzIxMDgsNyBAQAogICAgIGludCB3cml0dGVuOwogCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0gICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdChuYW1lKTsKKyAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKGtleSk7CiAgICAgd3JpdHRlbiA9IFB5T1NfdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZvcm1hdCwgdmEpOwogICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlKGJ1ZmZlciwgZmlsZSkgIT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjA0OSw3ICsyMTI4LDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX3dyaXRlKCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c193cml0ZSgmUHlJZF9zdGRvdXQsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMjA1OSwxOSArMjEzOCwxOSBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfd3JpdGUoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCZQeUlkX3N0ZGVyciwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCiBzdGF0aWMgdm9pZAotc3lzX2Zvcm1hdChjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX2Zvcm1hdChfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlLCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIGNoYXIgKnV0Zjg7CiAKICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLSAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KG5hbWUpOworICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoa2V5KTsKICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmEpOwogICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHN5c19weWZpbGVfd3JpdGVfdW5pY29kZShtZXNzYWdlLCBmaWxlKSAhPSAwKSB7CkBAIC0yMDkxLDcgKzIxNzAsNyBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfZm9ybWF0KCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c19mb3JtYXQoJlB5SWRfc3Rkb3V0LCBzdGRvdXQsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKQEAgLTIxMDEsNiArMjE4MCw2IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c19mb3JtYXQoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX2Zvcm1hdCgmUHlJZF9zdGRlcnIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWQuYyBiL1B5dGhvbi90aHJlYWQuYwppbmRleCBlNTVkMzQyLi44NTQwOTQyIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkLmMKKysrIGIvUHl0aG9uL3RocmVhZC5jCkBAIC05MSwxMCArOTEsNiBAQAogI2luY2x1ZGUgInRocmVhZF9udC5oIgogI2VuZGlmCiAKLSNpZmRlZiBPUzJfVEhSRUFEUwotI2RlZmluZSBQWVRIUkVBRF9OQU1FICJvczIiCi0jaW5jbHVkZSAidGhyZWFkX29zMi5oIgotI2VuZGlmCiAKIC8qCiAjaWZkZWYgRk9PQkFSX1RIUkVBRFMKQEAgLTIzNSw3ICsyMzEsNyBAQAogICAgICAgICBhc3NlcnQocCA9PSBOVUxMKTsKICAgICAgICAgZ290byBEb25lOwogICAgIH0KLSAgICBwID0gKHN0cnVjdCBrZXkgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXkpKTsKKyAgICBwID0gKHN0cnVjdCBrZXkgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXkpKTsKICAgICBpZiAocCAhPSBOVUxMKSB7CiAgICAgICAgIHAtPmlkID0gaWQ7CiAgICAgICAgIHAtPmtleSA9IGtleTsKQEAgLTI3NCw3ICsyNzAsNyBAQAogICAgIHdoaWxlICgocCA9ICpxKSAhPSBOVUxMKSB7CiAgICAgICAgIGlmIChwLT5rZXkgPT0ga2V5KSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC0zMjgsNyArMzI0LDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+a2V5ID09IGtleSAmJiBwLT5pZCA9PSBpZCkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxLDcgKzM1Nyw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmlkICE9IGlkKSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDMsOCArMzk5LDEwIEBACiAgICAgaW50IGxlbjsKICNlbmRpZgogCi0gICAgaWYgKFRocmVhZEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGhyZWFkSW5mb1R5cGUsICZ0aHJlYWRpbmZvX2Rlc2MpOworICAgIGlmIChUaHJlYWRJbmZvVHlwZS50cF9uYW1lID09IDApIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUaHJlYWRJbmZvVHlwZSwgJnRocmVhZGluZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgdGhyZWFkaW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZUaHJlYWRJbmZvVHlwZSk7CiAgICAgaWYgKHRocmVhZGluZm8gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfbnQuaCBiL1B5dGhvbi90aHJlYWRfbnQuaAppbmRleCA5MzhiZjFlLi5hYjVhMDgxIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX250LmgKKysrIGIvUHl0aG9uL3RocmVhZF9udC5oCkBAIC0zNCw3ICszNCw3IEBACiBQTlJNVVRFWAogQWxsb2NOb25SZWN1cnNpdmVNdXRleCgpCiB7Ci0gICAgUE5STVVURVggbSA9IChQTlJNVVRFWCltYWxsb2Moc2l6ZW9mKE5STVVURVgpKTsKKyAgICBQTlJNVVRFWCBtID0gKFBOUk1VVEVYKVB5TWVtX1Jhd01hbGxvYyhzaXplb2YoTlJNVVRFWCkpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Q09ORF9JTklUKCZtLT5jdikpCkBAIC00Niw3ICs0Niw3IEBACiAgICAgbS0+bG9ja2VkID0gMDsKICAgICByZXR1cm4gbTsKIGZhaWw6Ci0gICAgZnJlZShtKTsKKyAgICBQeU1lbV9SYXdGcmVlKG0pOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC01Niw3ICs1Niw3IEBACiAgICAgaWYgKG11dGV4KSB7CiAgICAgICAgIFB5Q09ORF9GSU5JKCZtdXRleC0+Y3YpOwogICAgICAgICBQeU1VVEVYX0ZJTkkoJm11dGV4LT5jcyk7Ci0gICAgICAgIGZyZWUobXV0ZXgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG11dGV4KTsKICAgICB9CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIHJlc3VsdCA9IFB5Q09ORF9TSUdOQUwoJm11dGV4LT5jdik7CiAgICAgcmVzdWx0ICY9IFB5TVVURVhfVU5MT0NLKCZtdXRleC0+Y3MpOwogICAgIHJldHVybiByZXN1bHQ7Ci19ICAgIAorfQogCiAjZWxzZSAvKiBpZiAhIF9QWV9VU0VfQ1ZfTE9DS1MgKi8KIApAQCAtMTMwLDcgKzEzMCw3IEBACiBEV09SRAogRW50ZXJOb25SZWN1cnNpdmVNdXRleChQTlJNVVRFWCBtdXRleCwgRFdPUkQgbWlsbGlzZWNvbmRzKQogewotICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0KG11dGV4LCBtaWxsaXNlY29uZHMpOworICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgobXV0ZXgsIG1pbGxpc2Vjb25kcywgRkFMU0UpOwogfQogCiBCT09MCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX29zMi5oIGIvUHl0aG9uL3RocmVhZF9vczIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIyNjRiNS4uMDAwMDAwMAotLS0gYS9QeXRob24vdGhyZWFkX29zMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLS8qIFRoaXMgY29kZSBpbXBsZW1lbnRlZCBieSBjdmFsZUBuZXRjb20uY29tICovCi0KLSNkZWZpbmUgSU5DTF9ET1NQUk9DRVNTCi0jZGVmaW5lIElOQ0xfRE9TU0VNQVBIT1JFUwotI2luY2x1ZGUgIm9zMi5oIgotI2luY2x1ZGUgImxpbWl0cy5oIgotCi0jaW5jbHVkZSAicHJvY2Vzcy5oIgotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvYnVpbHRpbi5oPgotI2luY2x1ZGUgPHN5cy9mbXV0ZXguaD4KLSNlbHNlCi1sb25nIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQodm9pZCk7Ci0jZW5kaWYKLQotLyogZGVmYXVsdCB0aHJlYWQgc3RhY2sgc2l6ZSBvZiA2NGtCICovCi0jaWYgIWRlZmluZWQoVEhSRUFEX1NUQUNLX1NJWkUpCi0jZGVmaW5lIFRIUkVBRF9TVEFDS19TSVpFICAgICAgIDB4MTAwMDAKLSNlbmRpZgotCi0jZGVmaW5lIE9TMl9TVEFDS1NJWkUoeCkgICAgICAgICh4ID8geCA6IFRIUkVBRF9TVEFDS19TSVpFKQotCi0vKgotICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIEMgcGFja2FnZSwgc2hvdWxkIG5vdCBiZSBuZWVkZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1QeVRocmVhZF9faW5pdF90aHJlYWQodm9pZCkKLXsKLX0KLQotLyoKLSAqIFRocmVhZCBzdXBwb3J0LgotICovCi1sb25nCi1QeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCi17Ci0gICAgaW50IHRocmVhZF9pZDsKLQotICAgIHRocmVhZF9pZCA9IF9iZWdpbnRocmVhZChmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT1MyX1NUQUNLU0laRShfcHl0aHJlYWRfc3RhY2tzaXplKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcpOwotCi0gICAgaWYgKHRocmVhZF9pZCA9PSAtMSkgewotICAgICAgICBkcHJpbnRmKCgiX2JlZ2ludGhyZWFkIGZhaWxlZC4gcmV0dXJuICVsZFxuIiwgZXJybm8pKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdGhyZWFkX2lkOwotfQotCi1sb25nCi1QeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgUFBJQiBwaWI7Ci0gICAgUFRJQiB0aWI7Ci0jZW5kaWYKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHJldHVybiBfZ2V0dGlkKCk7Ci0jZWxzZQotICAgIERvc0dldEluZm9CbG9ja3MoJnRpYiwgJnBpYik7Ci0gICAgcmV0dXJuIHRpYi0+dGliX3B0aWIyLT50aWIyX3VsdGlkOwotI2VuZGlmCi19Ci0KLXZvaWQKLVB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGV4aXQoMCk7Ci0gICAgX2VuZHRocmVhZCgpOwotfQotCi0vKgotICogTG9jayBzdXBwb3J0LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCB3aXRoIGFuIGV2ZW50IHNlbWFwaG9yZSBhbmQgY3JpdGljYWwKLSAqIHNlY3Rpb25zIHRvIG1ha2UgaXQgYmVoYXZlIG1vcmUgbGlrZSBhIHBvc2l4IG11dGV4IHRoYW4gaXRzIE9TLzIKLSAqIGNvdW50ZXJwYXJ0cy4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBvczJfbG9ja190IHsKLSAgICBpbnQgaXNfc2V0OwotICAgIEhFViBjaGFuZ2VkOwotfSAqdHlwZV9vczJfbG9jazsKLQotUHlUaHJlYWRfdHlwZV9sb2NrCi1QeVRocmVhZF9hbGxvY2F0ZV9sb2NrKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBfZm11dGV4ICpzZW0gPSBtYWxsb2Moc2l6ZW9mKF9mbXV0ZXgpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlbHhcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIChsb25nKXNlbSkpOwotICAgIGlmIChfZm11dGV4X2NyZWF0ZShzZW0sIDApKSB7Ci0gICAgICAgIGZyZWUoc2VtKTsKLSAgICAgICAgc2VtID0gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIChQeVRocmVhZF90eXBlX2xvY2spc2VtOwotI2Vsc2UKLSAgICBBUElSRVQgcmM7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3MyX2xvY2tfdCkpOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0KLSAgICBEb3NDcmVhdGVFdmVudFNlbShOVUxMLCAmbG9jay0+Y2hhbmdlZCwgMCwgMCk7Ci0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJXBcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGxvY2stPmNoYW5nZWQpKTsKLQotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKWxvY2s7Ci0jZW5kaWYKLX0KLQotdm9pZAotUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBhTG9jaykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICB0eXBlX29zMl9sb2NrIGxvY2sgPSAodHlwZV9vczJfbG9jaylhTG9jazsKLSNlbmRpZgotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLGFMb2NrKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChhTG9jaykgewotICAgICAgICBfZm11dGV4X2Nsb3NlKChfZm11dGV4ICopYUxvY2spOwotICAgICAgICBmcmVlKChfZm11dGV4ICopYUxvY2spOwotICAgIH0KLSNlbHNlCi0gICAgRG9zQ2xvc2VFdmVudFNlbShsb2NrLT5jaGFuZ2VkKTsKLSAgICBmcmVlKGFMb2NrKTsKLSNlbmRpZgotfQotCi0vKgotICogUmV0dXJuIDEgb24gc3VjY2VzcyBpZiB0aGUgbG9jayB3YXMgYWNxdWlyZWQKLSAqCi0gKiBhbmQgMCBpZiB0aGUgbG9jayB3YXMgbm90IGFjcXVpcmVkLgotICovCi1pbnQKLVB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSNpZiAhZGVmaW5lZChQWUNDX0dDQykKLSAgICBpbnQgICBkb25lID0gMDsKLSAgICBVTE9ORyBjb3VudDsKLSAgICBQSUQgICBwaWQgPSAwOwotICAgIFRJRCAgIHRpZCA9IDA7Ci0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgd2FpdGZsYWcpKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogYWx3YXlzIHN1Y2Nlc3NmdWwgaWYgdGhlIGxvY2sgZG9lc24ndCBleGlzdCAqLwotICAgIGlmIChhTG9jayAmJgotICAgICAgICBfZm11dGV4X3JlcXVlc3QoKF9mbXV0ZXggKilhTG9jaywgd2FpdGZsYWcgPyAwIDogX0ZNUl9OT1dBSVQpKQotICAgICAgICByZXR1cm4gMDsKLSNlbHNlCi0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIC8qIGlmIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBzZXQsIHdlIGhhdmUgdG8gd2FpdCBmb3IKLSAgICAgICAgICogdGhlIHN0YXRlIHRvIGNoYW5nZQotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGxvY2stPmlzX3NldCkgewotICAgICAgICAgICAgaWYgKCF3YWl0ZmxhZykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIERvc1dhaXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCBTRU1fSU5ERUZJTklURV9XQUlUKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIGVudGVyIGEgY3JpdGljYWwgc2VjdGlvbiBhbmQgdHJ5IHRvIGdldCB0aGUgc2VtYXBob3JlLiAgSWYKLSAgICAgICAgICogaXQgaXMgc3RpbGwgbG9ja2VkLCB3ZSB3aWxsIHRyeSBhZ2Fpbi4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChEb3NFbnRlckNyaXRTZWMoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGlmICghbG9jay0+aXNfc2V0KSB7Ci0gICAgICAgICAgICBsb2NrLT5pc19zZXQgPSAxOwotICAgICAgICAgICAgRG9zUmVzZXRFdmVudFNlbShsb2NrLT5jaGFuZ2VkLCAmY291bnQpOwotICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgIH0KLQotICAgICAgICBEb3NFeGl0Q3JpdFNlYygpOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX3JlbGVhc2VfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2spCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBhTG9jaykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoYUxvY2spCi0gICAgICAgIF9mbXV0ZXhfcmVsZWFzZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSNlbHNlCi0gICAgaWYgKCFsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgZHByaW50ZigoIiVsZDogQ291bGQgbm90IFB5VGhyZWFkX3JlbGVhc2VfbG9jayglcCkgZXJyb3I6ICVsXG4iLAotICAgICAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgICAgICBHZXRMYXN0RXJyb3IoKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKERvc0VudGVyQ3JpdFNlYygpKSB7Ci0gICAgICAgIGRwcmludGYoKCIlbGQ6IENvdWxkIG5vdCBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGVycm9yOiAlbFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICAgICAgR2V0TGFzdEVycm9yKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvY2stPmlzX3NldCA9IDA7Ci0gICAgRG9zUG9zdEV2ZW50U2VtKGxvY2stPmNoYW5nZWQpOwotCi0gICAgRG9zRXhpdENyaXRTZWMoKTsKLSNlbmRpZgotfQotCi0vKiBtaW5pbXVtL21heGltdW0gdGhyZWFkIHN0YWNrIHNpemVzIHN1cHBvcnRlZCAqLwotI2RlZmluZSBUSFJFQURfTUlOX1NUQUNLU0laRSAgICAweDgwMDAgICAgICAgICAgLyogMzJrQiAqLwotI2RlZmluZSBUSFJFQURfTUFYX1NUQUNLU0laRSAgICAweDIwMDAwMDAgICAgICAgLyogMzJNQiAqLwotCi0vKiBzZXQgdGhlIHRocmVhZCBzdGFjayBzaXplLgotICogUmV0dXJuIDAgaWYgc2l6ZSBpcyB2YWxpZCwgLTEgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgaW50Ci1fcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoc2l6ZV90IHNpemUpCi17Ci0gICAgLyogc2V0IHRvIGRlZmF1bHQgKi8KLSAgICBpZiAoc2l6ZSA9PSAwKSB7Ci0gICAgICAgIF9weXRocmVhZF9zdGFja3NpemUgPSAwOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiB2YWxpZCByYW5nZT8gKi8KLSAgICBpZiAoc2l6ZSA+PSBUSFJFQURfTUlOX1NUQUNLU0laRSAmJiBzaXplIDwgVEhSRUFEX01BWF9TVEFDS1NJWkUpIHsKLSAgICAgICAgX3B5dGhyZWFkX3N0YWNrc2l6ZSA9IHNpemU7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiAtMTsKLX0KLQotI2RlZmluZSBUSFJFQURfU0VUX1NUQUNLU0laRSh4KSBfcHl0aHJlYWRfb3MyX3NldF9zdGFja3NpemUoeCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfcHRoLmggYi9QeXRob24vdGhyZWFkX3B0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzA0MjY2Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfcHRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotCi0vKiBHTlUgcHRoIHRocmVhZHMgaW50ZXJmYWNlCi0gICBodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvcHRoCi0gICAyMDAwLTA1LTAzIEFuZHkgRHVzdG1hbiA8YW5keUBkdXN0bWFuLm5ldD4KLQotICAgQWRhcHRlZCBmcm9tIFBvc2l4IHRocmVhZHMgaW50ZXJmYWNlCi0gICAxMiBNYXkgMTk5NyAtLSBkYXZpZCBhcm5vbGQgPGRhdmlkYUBwb2JveC5jb20+Ci0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHB0aC5oPgotCi0vKiBBIHB0aCBtdXRleCBpc24ndCBzdWZmaWNpZW50IHRvIG1vZGVsIHRoZSBQeXRob24gbG9jayB0eXBlCi0gKiBiZWNhdXNlIHB0aCBtdXRleGVzIGNhbiBiZSBhY3F1aXJlZCBtdWx0aXBsZSB0aW1lcyBieSB0aGUKLSAqIHNhbWUgdGhyZWFkLgotICoKLSAqIFRoZSBwdGhfbG9jayBzdHJ1Y3QgaW1wbGVtZW50cyBhIFB5dGhvbiBsb2NrIGFzIGEgImxvY2tlZD8iIGJpdAotICogYW5kIGEgPGNvbmRpdGlvbiwgbXV0ZXg+IHBhaXIuICBJbiBnZW5lcmFsLCBpZiB0aGUgYml0IGNhbiBiZSBhY3F1aXJlZAotICogaW5zdGFudGx5LCBpdCBpcywgZWxzZSB0aGUgcGFpciBpcyB1c2VkIHRvIGJsb2NrIHRoZSB0aHJlYWQgdW50aWwgdGhlCi0gKiBiaXQgaXMgY2xlYXJlZC4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgY2hhciAgICAgICAgICAgICBsb2NrZWQ7IC8qIDA9dW5sb2NrZWQsIDE9bG9ja2VkICovCi0gICAgLyogYSA8Y29uZCwgbXV0ZXg+IHBhaXIgdG8gaGFuZGxlIGFuIGFjcXVpcmUgb2YgYSBsb2NrZWQgbG9jayAqLwotICAgIHB0aF9jb25kX3QgICBsb2NrX3JlbGVhc2VkOwotICAgIHB0aF9tdXRleF90ICBtdXQ7Ci19IHB0aF9sb2NrOwotCi0jZGVmaW5lIENIRUNLX1NUQVRVUyhuYW1lKSAgaWYgKHN0YXR1cyA9PSAtMSkgeyBwcmludGYoIiVkICIsIHN0YXR1cyk7IHBlcnJvcihuYW1lKTsgZXJyb3IgPSAxOyB9Ci0KLXB0aF9hdHRyX3QgUHlUaHJlYWRfYXR0cjsKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uLgotICovCi0KLXN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotICAgIHB0aF9pbml0KCk7Ci0gICAgUHlUaHJlYWRfYXR0ciA9IHB0aF9hdHRyX25ldygpOwotICAgIHB0aF9hdHRyX3NldChQeVRocmVhZF9hdHRyLCBQVEhfQVRUUl9TVEFDS19TSVpFLCAxPDwxOCk7Ci0gICAgcHRoX2F0dHJfc2V0KFB5VGhyZWFkX2F0dHIsIFBUSF9BVFRSX0pPSU5BQkxFLCBGQUxTRSk7Ci19Ci0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqLwotCi0KLWxvbmcgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQotewotICAgIHB0aF90IHRoOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICB0aCA9IHB0aF9zcGF3bihQeVRocmVhZF9hdHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCogKCopKHZvaWQgKikpZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhcmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIHJldHVybiB0aDsKLX0KLQotbG9uZyBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpCi17Ci0gICAgdm9sYXRpbGUgcHRoX3QgdGhyZWFkaWQ7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLSAgICB0aHJlYWRpZCA9IHB0aF9zZWxmKCk7Ci0gICAgcmV0dXJuIChsb25nKSB0aHJlYWRpZDsKLX0KLQotdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgfQotfQotCi0vKgotICogTG9jayBzdXBwb3J0LgotICovCi1QeVRocmVhZF90eXBlX2xvY2sgUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKQotewotICAgIHB0aF9sb2NrICpsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICBsb2NrID0gKHB0aF9sb2NrICopIG1hbGxvYyhzaXplb2YocHRoX2xvY2spKTsKLSAgICBtZW1zZXQoKHZvaWQgKilsb2NrLCAnXDAnLCBzaXplb2YocHRoX2xvY2spKTsKLSAgICBpZiAobG9jaykgewotICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfaW5pdCgmbG9jay0+bXV0KTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfaW5pdCIpOwotICAgICAgICBzdGF0dXMgPSBwdGhfY29uZF9pbml0KCZsb2NrLT5sb2NrX3JlbGVhc2VkKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfY29uZF9pbml0Iik7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgZnJlZSgodm9pZCAqKWxvY2spOwotICAgICAgICAgICAgbG9jayA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKSAtPiAlcFxuIiwgbG9jaykpOwotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKSBsb2NrOwotfQotCi12b2lkIFB5VGhyZWFkX2ZyZWVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaykKLXsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBjYWxsZWRcbiIsIGxvY2spKTsKLQotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKLX0KLQotaW50IFB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaywgaW50IHdhaXRmbGFnKQotewotICAgIGludCBzdWNjZXNzOwotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoJnRoZWxvY2stPm11dCwgIXdhaXRmbGFnLCBOVUxMKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzFdIik7Ci0gICAgc3VjY2VzcyA9IHRoZWxvY2stPmxvY2tlZCA9PSAwOwotICAgIGlmIChzdWNjZXNzKSB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVsxXSIpOwotCi0gICAgaWYgKCAhc3VjY2VzcyAmJiB3YWl0ZmxhZyApIHsKLSAgICAgICAgLyogY29udGludWUgdHJ5aW5nIHVudGlsIHdlIGdldCB0aGUgbG9jayAqLwotCi0gICAgICAgIC8qIG11dCBtdXN0IGJlIGxvY2tlZCBieSBtZSAtLSBwYXJ0IG9mIHRoZSBjb25kaXRpb24KLSAgICAgICAgICogcHJvdG9jb2wgKi8KLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsICF3YWl0ZmxhZywgTlVMTCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzJdIik7Ci0gICAgICAgIHdoaWxlICggdGhlbG9jay0+bG9ja2VkICkgewotICAgICAgICAgICAgc3RhdHVzID0gcHRoX2NvbmRfYXdhaXQoJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlbG9jay0+bXV0LCBOVUxMKTsKLSAgICAgICAgICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfYXdhaXQiKTsKLSAgICAgICAgfQotICAgICAgICB0aGVsb2NrLT5sb2NrZWQgPSAxOwotICAgICAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzJdIik7Ci0gICAgICAgIHN1Y2Nlc3MgPSAxOwotICAgIH0KLSAgICBpZiAoZXJyb3IpIHN1Y2Nlc3MgPSAwOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKLSAgICByZXR1cm4gc3VjY2VzczsKLX0KLQotdm9pZCBQeVRocmVhZF9yZWxlYXNlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2spCi17Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X2FjcXVpcmUoICZ0aGVsb2NrLT5tdXQsIDAsIE5VTEwgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9hY3F1aXJlWzNdIik7Ci0KLSAgICB0aGVsb2NrLT5sb2NrZWQgPSAwOwotCi0gICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9tdXRleF9yZWxlYXNlWzNdIik7Ci0KLSAgICAvKiB3YWtlIHVwIHNvbWVvbmUgKGFueW9uZSwgaWYgYW55KSB3YWl0aW5nIG9uIHRoZSBsb2NrICovCi0gICAgc3RhdHVzID0gcHRoX2NvbmRfbm90aWZ5KCAmdGhlbG9jay0+bG9ja19yZWxlYXNlZCwgMCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfbm90aWZ5Iik7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaCBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCmluZGV4IGU5MGFlN2UuLjIwZjg1MzUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKyBiL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCkBAIC0yODIsMTQgKzI4MiwxNCBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHNlbV90ICopbWFsbG9jKHNpemVvZihzZW1fdCkpOworICAgIGxvY2sgPSAoc2VtX3QgKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHNlbV90KSk7CiAKICAgICBpZiAobG9jaykgewogICAgICAgICBzdGF0dXMgPSBzZW1faW5pdChsb2NrLDAsMSk7CiAgICAgICAgIENIRUNLX1NUQVRVUygic2VtX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMzEzLDcgKzMxMyw3IEBACiAgICAgc3RhdHVzID0gc2VtX2Rlc3Ryb3kodGhlbG9jayk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1fZGVzdHJveSIpOwogCi0gICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOworICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKil0aGVsb2NrKTsKIH0KIAogLyoKQEAgLTQxMCw3ICs0MTAsNyBAQAogICAgIGlmICghaW5pdGlhbGl6ZWQpCiAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7CiAKLSAgICBsb2NrID0gKHB0aHJlYWRfbG9jayAqKSBtYWxsb2Moc2l6ZW9mKHB0aHJlYWRfbG9jaykpOworICAgIGxvY2sgPSAocHRocmVhZF9sb2NrICopIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YocHRocmVhZF9sb2NrKSk7CiAgICAgaWYgKGxvY2spIHsKICAgICAgICAgbWVtc2V0KCh2b2lkICopbG9jaywgJ1wwJywgc2l6ZW9mKHB0aHJlYWRfbG9jaykpOwogICAgICAgICBsb2NrLT5sb2NrZWQgPSAwOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAgICAgICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9jb25kX2luaXQiKTsKIAogICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilsb2NrKTsKICAgICAgICAgICAgIGxvY2sgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF9kZXN0cm95KCAmdGhlbG9jay0+bXV0ICk7CiAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhyZWFkX211dGV4X2Rlc3Ryb3kiKTsKIAotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKKyAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopdGhlbG9jayk7CiB9CiAKIFB5TG9ja1N0YXR1cwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RyYWNlYmFjay5jIGIvUHl0aG9uL3RyYWNlYmFjay5jCmluZGV4IDc0MDc1YzkuLmU5MTY5Y2UgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90cmFjZWJhY2suYworKysgYi9QeXRob24vdHJhY2ViYWNrLmMKQEAgLTEzLDcgKzEzLDcgQEAKIAogI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoUHlUcmFjZWJhY2tPYmplY3QsIHgpCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKyNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCAoaW50KXN0cmxlbihzdHIpKQogI2RlZmluZSBNQVhfU1RSSU5HX0xFTkdUSCA1MDAKICNkZWZpbmUgTUFYX0ZSQU1FX0RFUFRIIDEwMAogI2RlZmluZSBNQVhfTlRIUkVBRFMgMTAwCkBAIC0yMSw2ICsyMSwxMSBAQAogLyogRnVuY3Rpb24gZnJvbSBQYXJzZXIvdG9rZW5pemVyLmMgKi8KIGV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoaW50LCBQeU9iamVjdCAqKTsKIAorX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7CitfUHlfSURFTlRJRklFUihjbG9zZSk7CitfUHlfSURFTlRJRklFUihvcGVuKTsKK19QeV9JREVOVElGSUVSKHBhdGgpOworCiBzdGF0aWMgUHlPYmplY3QgKgogdGJfZGlyKFB5VHJhY2ViYWNrT2JqZWN0ICpzZWxmKQogewpAQCAtMTUyLDcgKzE1Nyw2IEBACiAgICAgY29uc3QgY2hhciogZmlsZXBhdGg7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKLSAgICBfUHlfSURFTlRJRklFUihvcGVuKTsKIAogICAgIGZpbGVieXRlcyA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwogICAgIGlmIChmaWxlYnl0ZXMgPT0gTlVMTCkgewpAQCAtMTY5LDcgKzE3Myw3IEBACiAgICAgICAgIHRhaWwrKzsKICAgICB0YWlsbGVuID0gc3RybGVuKHRhaWwpOwogCi0gICAgc3lzcGF0aCA9IFB5U3lzX0dldE9iamVjdCgicGF0aCIpOworICAgIHN5c3BhdGggPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcGF0aCk7CiAgICAgaWYgKHN5c3BhdGggPT0gTlVMTCB8fCAhUHlMaXN0X0NoZWNrKHN5c3BhdGgpKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIG5wYXRoID0gUHlMaXN0X1NpemUoc3lzcGF0aCk7CkBAIC0yMzIsOSArMjM2LDYgQEAKICAgICBjaGFyIGJ1ZltNQVhQQVRITEVOKzFdOwogICAgIGludCBraW5kOwogICAgIHZvaWQgKmRhdGE7Ci0gICAgX1B5X0lERU5USUZJRVIoY2xvc2UpOwotICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwotICAgIF9QeV9JREVOVElGSUVSKFRleHRJT1dyYXBwZXIpOwogCiAgICAgLyogb3BlbiB0aGUgZmlsZSAqLwogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQpAQCAtMjQ2LDEwICsyNDcsMTIgQEAKICAgICBiaW5hcnkgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGlvLCAmUHlJZF9vcGVuLCAiT3MiLCBmaWxlbmFtZSwgInJiIik7CiAKICAgICBpZiAoYmluYXJ5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKwogICAgICAgICBiaW5hcnkgPSBfUHlfRmluZFNvdXJjZUZpbGUoZmlsZW5hbWUsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGlvKTsKICAgICAgICAgaWYgKGJpbmFyeSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW8pOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQ2OSwxMyArNDcyLDEzIEBACiAgICAgd3JpdGUoZmQsIGJ1ZmZlciwgbGVuKTsKIH0KIAotLyogRm9ybWF0IGFuIGludGVnZXIgaW4gcmFuZ2UgWzA7IDB4ZmZmZmZmZmZdIHRvIGhleGRlY2ltYWwgb2YgJ3dpZHRoJyBkaWdpdHMsCisvKiBGb3JtYXQgYW4gaW50ZWdlciBpbiByYW5nZSBbMDsgMHhmZmZmZmZmZl0gdG8gaGV4YWRlY2ltYWwgb2YgJ3dpZHRoJyBkaWdpdHMsCiAgICBhbmQgd3JpdGUgaXQgaW50byB0aGUgZmlsZSBmZC4KIAogICAgVGhpcyBmdW5jdGlvbiBpcyBzaWduYWwgc2FmZS4gKi8KIAogc3RhdGljIHZvaWQKLWR1bXBfaGV4YWRlY2ltYWwoaW50IHdpZHRoLCB1bnNpZ25lZCBsb25nIHZhbHVlLCBpbnQgZmQpCitkdW1wX2hleGFkZWNpbWFsKGludCBmZCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IHdpZHRoKQogewogICAgIGludCBsZW47CiAgICAgY2hhciBidWZmZXJbc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogMiArIDFdOwpAQCAtNTQyLDE1ICs1NDUsMTUgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmYpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXHgiKTsKLSAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoMiwgY2gsIGZkKTsKKyAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCAyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA8IDB4ZmZmZikgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxcdSIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCg0LCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDQpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUFVUUyhmZCwgIlxcVSIpOwotICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbCg4LCBjaCwgZmQpOworICAgICAgICAgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgY2gsIDgpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICh0cnVuY2F0ZWQpCkBAIC02MDEsNyArNjA0LDcgQEAKICAgICB1bnNpZ25lZCBpbnQgZGVwdGg7CiAKICAgICBpZiAod3JpdGVfaGVhZGVyKQotICAgICAgICBQVVRTKGZkLCAiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOworICAgICAgICBQVVRTKGZkLCAiU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOlxuIik7CiAKICAgICBmcmFtZSA9IF9QeVRocmVhZFN0YXRlX0dldEZyYW1lKHRzdGF0ZSk7CiAgICAgaWYgKGZyYW1lID09IE5VTEwpCkBAIC02MzksOCArNjQyLDggQEAKICAgICAgICAgUFVUUyhmZCwgIkN1cnJlbnQgdGhyZWFkIDB4Iik7CiAgICAgZWxzZQogICAgICAgICBQVVRTKGZkLCAiVGhyZWFkIDB4Iik7Ci0gICAgZHVtcF9oZXhhZGVjaW1hbChzaXplb2YobG9uZykqMiwgKHVuc2lnbmVkIGxvbmcpdHN0YXRlLT50aHJlYWRfaWQsIGZkKTsKLSAgICBQVVRTKGZkLCAiOlxuIik7CisgICAgZHVtcF9oZXhhZGVjaW1hbChmZCwgKHVuc2lnbmVkIGxvbmcpdHN0YXRlLT50aHJlYWRfaWQsIHNpemVvZihsb25nKSoyKTsKKyAgICBQVVRTKGZkLCAiIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOwogfQogCiBjb25zdCBjaGFyKgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGY2ZjhlYTAuLjZhNzgwNDYgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNSArMSw1IEBACi1UaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuMy4zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuNC4wIGJldGEgMQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLAogMjAxMiwgMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC01Miw5ICs1Miw5IEBACiAtLS0tLS0tLS0tCiAKIFdlIHRyeSB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgIldoYXQncyBOZXcgaW4KLVB5dGhvbiAzLjMiIGRvY3VtZW50LCBmb3VuZCBhdAorUHl0aG9uIDMuNCIgZG9jdW1lbnQsIGZvdW5kIGF0CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy93aGF0c25ldy8zLjMuaHRtbAorICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L3doYXRzbmV3LzMuNC5odG1sCiAKIEZvciBhIG1vcmUgZGV0YWlsZWQgY2hhbmdlIGxvZywgcmVhZCBNaXNjL05FV1MgKHRob3VnaCB0aGlzIGZpbGUsIHRvbywgaXMKIGluY29tcGxldGUsIGFuZCBhbHNvIGRvZXNuJ3QgbGlzdCBhbnl0aGluZyBtZXJnZWQgaW4gZnJvbSB0aGUgMi43IHJlbGVhc2UgdW5kZXIKQEAgLTY3LDkgKzY3LDkgQEAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuMyBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CitEb2N1bWVudGF0aW9uIGZvciBQeXRob24gMy40IGlzIG9ubGluZSwgdXBkYXRlZCBkYWlseToKIAotICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLworICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LwogCiBJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIG1hbnkgZm9ybWF0cyBmb3IgZmFzdGVyIGFjY2Vzcy4gIFRoZSBkb2N1bWVudGF0aW9uCiBpcyBkb3dubG9hZGFibGUgaW4gSFRNTCwgUERGLCBhbmQgcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXRzOyB0aGUgbGF0dGVyIHZlcnNpb24KQEAgLTk0LDcgKzk0LDcgQEAKIEEgc291cmNlLXRvLXNvdXJjZSB0cmFuc2xhdGlvbiB0b29sLCAiMnRvMyIsIGNhbiB0YWtlIGNhcmUgb2YgdGhlIG11bmRhbmUgdGFzawogb2YgY29udmVydGluZyBsYXJnZSBhbW91bnRzIG9mIHNvdXJjZSBjb2RlLiAgSXQgaXMgbm90IGEgY29tcGxldGUgc29sdXRpb24gYnV0CiBpcyBjb21wbGVtZW50ZWQgYnkgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGluIDIuNi4gIFNlZQotaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCiBUZXN0aW5nCkBAIC0xMzIsNyArMTMyLDcgQEAKIEluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nICJtYWtlIGluc3RhbGwiLiAgSW5zdGFsbCBhbGwgb3RoZXIgdmVyc2lvbnMgdXNpbmcKICJtYWtlIGFsdGluc3RhbGwiLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuMyB3aXRoIDIuNyBiZWluZyB0aGUKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy40IHdpdGggMi43IGJlaW5nIHRoZQogcHJpbWFyeSB2ZXJzaW9uLCB5b3Ugd291bGQgZXhlY3V0ZSAibWFrZSBpbnN0YWxsIiBpbiB5b3VyIDIuNyBidWlsZCBkaXJlY3RvcnkKIGFuZCAibWFrZSBhbHRpbnN0YWxsIiBpbiB0aGUgb3RoZXJzLgogCkBAIC0xNjgsNyArMTY4LDcgQEAKIFJlbGVhc2UgU2NoZWR1bGUKIC0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIFBFUCAzOTggZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzk4LworU2VlIFBFUCA0MjkgZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDI5LwogCiAKIENvcHlyaWdodCBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CmluZGV4IGQyZmYyNTUuLjRjM2I2N2IgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKQEAgLTQsMTggKzQsMTggQEAKIGNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCiBjYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAogCi1pZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGNsODVnLmRsbCAoCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCitpZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGNsODZ0Zy5kbGwgKAorICAgIGNkIHRjbC04LjYuMS4wXHdpbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIAotaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODVnLmRsbCAoCi0gICAgY2QgdGstOC41LjExLjBcd2luICAgIAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAoraWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODZ0Zy5kbGwgKAorICAgIGNkIHRrLTguNi4xLjBcd2luICAgIAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBjbGVhbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBhbGwKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNi4xLjAgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CmluZGV4IGM2Mjc4YjIuLjI0NGFiZDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdApAQCAtMzAsMTkgKzMwLDIwIEBACiApCiAKIEByZW0gdGNsL3RrCi1pZiBub3QgZXhpc3QgdGNsLTguNS4xMS4wICgKLSAgIHJkIC9zL3EgdGNsdGsgdGNsdGs2NAotICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNS4xMS4wCitpZiBub3QgZXhpc3QgdGNsLTguNi4xLjAgKAorICAgcmQgL3MvcSB0Y2x0ayB0Y2x0azY0IHRjbC04LjUuMTEuMCB0ay04LjUuMTEuMAorICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNi4xLjAKICkKLWlmIG5vdCBleGlzdCB0ay04LjUuMTEuMCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMTEuMAoraWYgbm90IGV4aXN0IHRrLTguNi4xLjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC42LjEuMAogCiBAcmVtIHNxbGl0ZTMKLWlmIG5vdCBleGlzdCBzcWxpdGUtMy43LjEyICgKLSAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNy40Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjcuMTIKK2lmIG5vdCBleGlzdCBzcWxpdGUtMy44LjEgKAorICByZCAvcy9xIHNxbGl0ZS1zb3VyY2UtMy43LjEyCisgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjguMQogKQogCiBAcmVtIGx6bWEKLWlmIG5vdCBleGlzdCB4ei01LjAuMyAoCi0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3h6LTUuMC4zCitpZiBub3QgZXhpc3QgeHotNS4wLjUgKAorICByZCAvcy9xIHh6LTUuMC4zCisgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3h6LTUuMC41CiApCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKaW5kZXggZWQ1YzEwZS4uYzU4MGExNCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdApAQCAtNCwxOCArNCwxOCBAQAogY2FsbCAiVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwtY29tbW9uLmJhdCIKIGNhbGwgIiVWUzEwMENPTU5UT09MUyVcdnN2YXJzMzIuYmF0IgogCi1pZiBub3QgZXhpc3QgdGNsdGtcYmluXHRjbDg1Zy5kbGwgKAoraWYgbm90IGV4aXN0IHRjbHRrXGJpblx0Y2w4NnRnLmRsbCAoCiAgICAgQHJlbSBhbGwgYW5kIGluc3RhbGwgbmVlZCB0byBiZSBzZXBhcmF0ZSBpbnZvY2F0aW9ucywgb3RoZXJ3aXNlIG5tYWtlaGxwIGlzIG5vdCBmb3VuZCBvbiBpbnN0YWxsCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBjbGVhbiBhbGwgCisgICAgY2QgdGNsLTguNi4xLjBcd2luCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGNsZWFuIGFsbCAKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKLWlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGluc3RhbGwKK2lmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NnRnLmRsbCAoCisgICAgY2QgdGstOC42LjEuMFx3aW4KKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC42LjEuMCBjbGVhbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjYuMS4wIGluc3RhbGwKICAgICBjZCAuLlwuLgogKQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NsaW5pYy5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzMzMmIwYwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkKQEAgLTAsMCArMSwyNzI4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYWJjCitpbXBvcnQgYXN0CitpbXBvcnQgYXRleGl0CitpbXBvcnQgY2xpbmljCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaGFzaGxpYgoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBpbworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzaGxleAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdGV4dHdyYXAKKworIyBUT0RPOgorIworIyBzb29uOgorIworIyAqIGFsbG93IG1peGluZyBhbnkgdHdvIG9mIHtwb3NpdGlvbmFsLW9ubHksIHBvc2l0aW9uYWwtb3Ita2V5d29yZCwKKyMgICBrZXl3b3JkLW9ubHl9CisjICAgICAgICogZGljdCBjb25zdHJ1Y3RvciB1c2VzIHBvc2l0aW9uYWwtb25seSBhbmQga2V5d29yZC1vbmx5CisjICAgICAgICogbWF4IGFuZCBtaW4gdXNlIHBvc2l0aW9uYWwgb25seSB3aXRoIGFuIG9wdGlvbmFsIGdyb3VwCisjICAgICAgICAgYW5kIGtleXdvcmQtb25seQorIworCit2ZXJzaW9uID0gJzEnCisKK19lbXB0eSA9IGluc3BlY3QuX2VtcHR5Citfdm9pZCA9IGluc3BlY3QuX3ZvaWQKKworCitjbGFzcyBVbnNwZWNpZmllZDoKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPFVuc3BlY2lmaWVkPicKKwordW5zcGVjaWZpZWQgPSBVbnNwZWNpZmllZCgpCisKKworY2xhc3MgTnVsbDoKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPE51bGw+JworCitOVUxMID0gTnVsbCgpCisKKworZGVmIF90ZXh0X2FjY3VtdWxhdG9yKCk6CisgICAgdGV4dCA9IFtdCisgICAgZGVmIG91dHB1dCgpOgorICAgICAgICBzID0gJycuam9pbih0ZXh0KQorICAgICAgICB0ZXh0LmNsZWFyKCkKKyAgICAgICAgcmV0dXJuIHMKKyAgICByZXR1cm4gdGV4dCwgdGV4dC5hcHBlbmQsIG91dHB1dAorCisKK2RlZiB0ZXh0X2FjY3VtdWxhdG9yKCk6CisgICAgIiIiCisgICAgQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0IGFjY3VtdWxhdG9yIC8gam9pbmVyLgorCisgICAgUmV0dXJucyBhIHBhaXIgb2YgY2FsbGFibGVzOgorICAgICAgICBhcHBlbmQsIG91dHB1dAorICAgICJhcHBlbmQiIGFwcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGFjY3VtdWxhdG9yLgorICAgICJvdXRwdXQiIHJldHVybnMgdGhlIGNvbnRlbnRzIG9mIHRoZSBhY2N1bXVsYXRvcgorICAgICAgIGpvaW5lZCB0b2dldGhlciAoJycuam9pbihhY2N1bXVsYXRvcikpIGFuZAorICAgICAgIGVtcHRpZXMgdGhlIGFjY3VtdWxhdG9yLgorICAgICIiIgorICAgIHRleHQsIGFwcGVuZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgIHJldHVybiBhcHBlbmQsIG91dHB1dAorCisKK2RlZiBmYWlsKCphcmdzLCBmaWxlbmFtZT1Ob25lLCBsaW5lX251bWJlcj1Ob25lKToKKyAgICBqb2luZWQgPSAiICIuam9pbihbc3RyKGEpIGZvciBhIGluIGFyZ3NdKQorICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgYWRkKCJFcnJvciIpCisgICAgaWYgY2xpbmljOgorICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBjbGluaWMuZmlsZW5hbWUKKyAgICAgICAgaWYgY2xpbmljLmJsb2NrX3BhcnNlciBhbmQgKGxpbmVfbnVtYmVyIGlzIE5vbmUpOgorICAgICAgICAgICAgbGluZV9udW1iZXIgPSBjbGluaWMuYmxvY2tfcGFyc2VyLmxpbmVfbnVtYmVyCisgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGFkZCgnIGluIGZpbGUgIicgKyBmaWxlbmFtZSArICciJykKKyAgICBpZiBsaW5lX251bWJlciBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCIgb24gbGluZSAiICsgc3RyKGxpbmVfbnVtYmVyKSkKKyAgICBhZGQoJzpcbicpCisgICAgYWRkKGpvaW5lZCkKKyAgICBwcmludChvdXRwdXQoKSkKKyAgICBzeXMuZXhpdCgtMSkKKworCisKK2RlZiBxdW90ZWRfZm9yX2Nfc3RyaW5nKHMpOgorICAgIGZvciBvbGQsIG5ldyBpbiAoCisgICAgICAgICgnIicsICdcXCInKSwKKyAgICAgICAgKCInIiwgIlxcJyIpLAorICAgICAgICApOgorICAgICAgICBzID0gcy5yZXBsYWNlKG9sZCwgbmV3KQorICAgIHJldHVybiBzCisKK2lzX2xlZ2FsX2NfaWRlbnRpZmllciA9IHJlLmNvbXBpbGUoJ15bQS1aYS16X11bQS1aYS16MC05X10qJCcpLm1hdGNoCisKK2RlZiBpc19sZWdhbF9weV9pZGVudGlmaWVyKHMpOgorICAgIHJldHVybiBhbGwoaXNfbGVnYWxfY19pZGVudGlmaWVyKGZpZWxkKSBmb3IgZmllbGQgaW4gcy5zcGxpdCgnLicpKQorCisjIGFkZGVkICJtb2R1bGUiLCAic2VsZiIsICJjbHMiLCBhbmQgIm51bGwiIGp1c3QgdG8gYmUgc2FmZQorIyAoY2xpbmljIHdpbGwgZ2VuZXJhdGUgdmFyaWFibGVzIHdpdGggdGhlc2UgbmFtZXMpCitjX2tleXdvcmRzID0gc2V0KCIiIgorYXNtIGF1dG8gYnJlYWsgY2FzZSBjaGFyIGNscyBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRvIGRvdWJsZQorZWxzZSBlbnVtIGV4dGVybiBmbG9hdCBmb3IgZ290byBpZiBpbmxpbmUgaW50IGxvbmcgbW9kdWxlIG51bGwKK3JlZ2lzdGVyIHJldHVybiBzZWxmIHNob3J0IHNpZ25lZCBzaXplb2Ygc3RhdGljIHN0cnVjdCBzd2l0Y2gKK3R5cGVkZWYgdHlwZW9mIHVuaW9uIHVuc2lnbmVkIHZvaWQgdm9sYXRpbGUgd2hpbGUKKyIiIi5zdHJpcCgpLnNwbGl0KCkpCisKK2RlZiBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHMpOgorICAgICMgZm9yIG5vdywganVzdCBjb21wbGFpbiBpZiB3aGF0IHdlJ3JlIGdpdmVuIGlzbid0IGxlZ2FsCisgICAgaWYgbm90IGlzX2xlZ2FsX2NfaWRlbnRpZmllcihzKToKKyAgICAgICAgZmFpbCgiSWxsZWdhbCBDIGlkZW50aWZpZXI6IHt9Ii5mb3JtYXQocykpCisgICAgIyBidXQgaWYgd2UgcGlja2VkIGEgQyBrZXl3b3JkLCBwaWNrIHNvbWV0aGluZyBlbHNlCisgICAgaWYgcyBpbiBjX2tleXdvcmRzOgorICAgICAgICByZXR1cm4gcyArICJfdmFsdWUiCisgICAgcmV0dXJuIHMKKworZGVmIHJzdHJpcF9saW5lcyhzKToKKyAgICB0ZXh0LCBhZGQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICBmb3IgbGluZSBpbiBzLnNwbGl0KCdcbicpOgorICAgICAgICBhZGQobGluZS5yc3RyaXAoKSkKKyAgICAgICAgYWRkKCdcbicpCisgICAgdGV4dC5wb3AoKQorICAgIHJldHVybiBvdXRwdXQoKQorCitkZWYgbGluZWFyX2Zvcm1hdChzLCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgUGVyZm9ybSBzdHIuZm9ybWF0LWxpa2Ugc3Vic3RpdHV0aW9uLCBleGNlcHQ6CisgICAgICAqIFRoZSBzdHJpbmdzIHN1YnN0aXR1dGVkIG11c3QgYmUgb24gbGluZXMgYnkKKyAgICAgICAgdGhlbXNlbHZlcy4gIChUaGlzIGxpbmUgaXMgdGhlICJzb3VyY2UgbGluZSIuKQorICAgICAgKiBJZiB0aGUgc3Vic3RpdHV0aW9uIHRleHQgaXMgZW1wdHksIHRoZSBzb3VyY2UgbGluZQorICAgICAgICBpcyByZW1vdmVkIGluIHRoZSBvdXRwdXQuCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBub3QgZW1wdHk6CisgICAgICAgICAgKiBFYWNoIGxpbmUgb2YgdGhlIHN1YnN0aXR1dGVkIHRleHQgaXMgaW5kZW50ZWQKKyAgICAgICAgICAgIGJ5IHRoZSBpbmRlbnQgb2YgdGhlIHNvdXJjZSBsaW5lLgorICAgICAgICAgICogQSBuZXdsaW5lIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZC4KKyAgICAiIiIKKworICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgnXG4nKToKKyAgICAgICAgaW5kZW50LCBjdXJseSwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbigneycpCisgICAgICAgIGlmIG5vdCBjdXJseToKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5hbWUsIGN1cmwsIHRyYWlsaW5nID0gdHJhaWxpbmcucGFydGl0aW9uKCd9JykKKyAgICAgICAgaWYgbm90IGN1cmx5IG9yIG5hbWUgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHRyYWlsaW5nOgorICAgICAgICAgICAgZmFpbCgiVGV4dCBmb3VuZCBhZnRlciB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKyAgICAgICAgaWYgaW5kZW50LnN0cmlwKCk6CisgICAgICAgICAgICBmYWlsKCJOb24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGZvdW5kIGJlZm9yZSB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKworICAgICAgICB2YWx1ZSA9IGt3YXJnc1tuYW1lXQorICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHZhbHVlID0gdGV4dHdyYXAuaW5kZW50KHJzdHJpcF9saW5lcyh2YWx1ZSksIGluZGVudCkKKyAgICAgICAgYWRkKHZhbHVlKQorICAgICAgICBhZGQoJ1xuJykKKworICAgIHJldHVybiBvdXRwdXQoKVs6LTFdCisKK2RlZiB2ZXJzaW9uX3NwbGl0dGVyKHMpOgorICAgICIiIlNwbGl0cyBhIHZlcnNpb24gc3RyaW5nIGludG8gYSB0dXBsZSBvZiBpbnRlZ2Vycy4KKworICAgIFRoZSBmb2xsb3dpbmcgQVNDSUkgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCwgYW5kIGVtcGxveQorICAgIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbnM6CisgICAgICAgIGEgLT4gLTMKKyAgICAgICAgYiAtPiAtMgorICAgICAgICBjIC0+IC0xCisgICAgKFRoaXMgcGVybWl0cyBQeXRob24tc3R5bGUgdmVyc2lvbiBzdHJpbmdzIHN1Y2ggYXMgIjEuNGIzIi4pCisgICAgIiIiCisgICAgdmVyc2lvbiA9IFtdCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGRlZiBmbHVzaCgpOgorICAgICAgICBpZiBub3QgYWNjdW11bGF0b3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNYWxmb3JtZWQgdmVyc2lvbiBzdHJpbmc6ICcgKyByZXByKHMpKQorICAgICAgICB2ZXJzaW9uLmFwcGVuZChpbnQoJycuam9pbihhY2N1bXVsYXRvcikpKQorICAgICAgICBhY2N1bXVsYXRvci5jbGVhcigpCisKKyAgICBmb3IgYyBpbiBzOgorICAgICAgICBpZiBjLmlzZGlnaXQoKToKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZChjKQorICAgICAgICBlbGlmIGMgPT0gJy4nOgorICAgICAgICAgICAgZmx1c2goKQorICAgICAgICBlbGlmIGMgaW4gJ2FiYyc6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgICAgICB2ZXJzaW9uLmFwcGVuZCgnYWJjJy5pbmRleChjKSAtIDMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbGxlZ2FsIGNoYXJhY3RlciAnICsgcmVwcihjKSArICcgaW4gdmVyc2lvbiBzdHJpbmcgJyArIHJlcHIocykpCisgICAgZmx1c2goKQorICAgIHJldHVybiB0dXBsZSh2ZXJzaW9uKQorCitkZWYgdmVyc2lvbl9jb21wYXJpdG9yKHZlcnNpb24xLCB2ZXJzaW9uMik6CisgICAgaXRlcmF0b3IgPSBpdGVydG9vbHMuemlwX2xvbmdlc3QodmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMSksIHZlcnNpb25fc3BsaXR0ZXIodmVyc2lvbjIpLCBmaWxsdmFsdWU9MCkKKyAgICBmb3IgaSwgKGEsIGIpIGluIGVudW1lcmF0ZShpdGVyYXRvcik6CisgICAgICAgIGlmIGEgPCBiOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIGEgPiBiOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCisKK2NsYXNzIENSZW5kZXJEYXRhOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgdG8gZGVjbGFyZSB2YXJpYWJsZXMuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5kZWNsYXJhdGlvbnMgPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSBwYXJzZSBjYWxsLgorICAgICAgICAjIFNob3VsZCBiZSBmdWxsIGxpbmVzIHdpdGggXG4gZW9sIGNoYXJhY3RlcnMuCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZXJzID0gW10KKworICAgICAgICAjIFRoZSBlbnRyaWVzIGZvciB0aGUgImtleXdvcmRzIiBhcnJheSBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgIyBTaG91bGQgYmUgaW5kaXZpZHVhbCBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgbmFtZXMuCisgICAgICAgIHNlbGYua2V5d29yZHMgPSBbXQorCisgICAgICAgICMgVGhlICJmb3JtYXQgdW5pdHMiIGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgdGhhdCB3aWxsIGdldAorICAgICAgICBzZWxmLmZvcm1hdF91bml0cyA9IFtdCisKKyAgICAgICAgIyBUaGUgdmFyYXJncyBhcmd1bWVudHMgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIFRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciB0aGUgaW1wbCBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5pbXBsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgICMgVGhlIGFyZ3VtZW50cyB0byB0aGUgaW1wbCBmdW5jdGlvbiBhdCB0aGUgdGltZSBpdCdzIGNhbGxlZC4KKyAgICAgICAgc2VsZi5pbXBsX2FyZ3VtZW50cyA9IFtdCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0CisgICAgICAgICMgc2hvdWxkIHJlY2VpdmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbXBsLgorICAgICAgICBzZWxmLnJldHVybl92YWx1ZSA9ICJyZXR1cm5fdmFsdWUiCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBjb2RlIHRvIGNvbnZlcnQgdGhlIHJldHVybgorICAgICAgICAjIHZhbHVlIGZyb20gdGhlIHBhcnNlIGZ1bmN0aW9uLiAgVGhpcyBpcyBhbHNvIHdoZXJlCisgICAgICAgICMgeW91IHNob3VsZCBjaGVjayB0aGUgX3JldHVybl92YWx1ZSBmb3IgZXJyb3JzLCBhbmQKKyAgICAgICAgIyAiZ290byBleGl0IiBpZiB0aGVyZSBhcmUgYW55LgorICAgICAgICBzZWxmLnJldHVybl9jb252ZXJzaW9uID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhlIGltcGwgY2FsbC4KKyAgICAgICAgc2VsZi5jbGVhbnVwID0gW10KKworCitjbGFzcyBMYW5ndWFnZShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorCisgICAgc3RhcnRfbGluZSA9ICIiCisgICAgYm9keV9wcmVmaXggPSAiIgorICAgIHN0b3BfbGluZSA9ICIiCisgICAgY2hlY2tzdW1fbGluZSA9ICIiCisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbmRlcihzZWxmLCBibG9jayk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB2YWxpZGF0ZShzZWxmKToKKyAgICAgICAgZGVmIGFzc2VydF9vbmx5X29uZShmaWVsZCwgdG9rZW49J2RzbF9uYW1lJyk6CisgICAgICAgICAgICBsaW5lID0gZ2V0YXR0cihzZWxmLCBmaWVsZCkKKyAgICAgICAgICAgIHRva2VuID0gJ3snICsgdG9rZW4gKyAnfScKKyAgICAgICAgICAgIGlmIGxlbihsaW5lLnNwbGl0KHRva2VuKSkgIT0gMjoKKyAgICAgICAgICAgICAgICBmYWlsKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgIiAiICsgZmllbGQgKyAiIG11c3QgY29udGFpbiAiICsgdG9rZW4gKyAiIGV4YWN0bHkgb25jZSEiKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0YXJ0X2xpbmUnKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0b3BfbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnY2hlY2tzdW1fbGluZScpCisgICAgICAgIGFzc2VydF9vbmx5X29uZSgnY2hlY2tzdW1fbGluZScsICdjaGVja3N1bScpCisKKyAgICAgICAgaWYgbGVuKHNlbGYuYm9keV9wcmVmaXguc3BsaXQoJ3tkc2xfbmFtZX0nKSkgPj0gMzoKKyAgICAgICAgICAgIGZhaWwoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAiIGJvZHlfcHJlZml4IG1heSBjb250YWluICIgKyB0b2tlbiArICIgb25jZSBhdCBtb3N0ISIpCisKKworCitjbGFzcyBQeXRob25MYW5ndWFnZShMYW5ndWFnZSk6CisKKyAgICBsYW5ndWFnZSAgICAgID0gJ1B5dGhvbicKKyAgICBzdGFydF9saW5lICAgID0gIiMvKlt7ZHNsX25hbWV9XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiMiCisgICAgc3RvcF9saW5lICAgICA9ICIjW3tkc2xfbmFtZX1dKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIjLypbe2RzbF9uYW1lfSBjaGVja3N1bToge2NoZWNrc3VtfV0qLyIKKworCitkZWYgcGVybXV0ZV9sZWZ0X29wdGlvbl9ncm91cHMobCk6CisgICAgIiIiCisgICAgR2l2ZW4gWzEsIDIsIDNdLCBzaG91bGQgeWllbGQ6CisgICAgICAgKCkKKyAgICAgICAoMywpCisgICAgICAgKDIsIDMpCisgICAgICAgKDEsIDIsIDMpCisgICAgIiIiCisgICAgeWllbGQgdHVwbGUoKQorICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBmb3IgZ3JvdXAgaW4gcmV2ZXJzZWQobCk6CisgICAgICAgIGFjY3VtdWxhdG9yID0gbGlzdChncm91cCkgKyBhY2N1bXVsYXRvcgorICAgICAgICB5aWVsZCB0dXBsZShhY2N1bXVsYXRvcikKKworCitkZWYgcGVybXV0ZV9yaWdodF9vcHRpb25fZ3JvdXBzKGwpOgorICAgICIiIgorICAgIEdpdmVuIFsxLCAyLCAzXSwgc2hvdWxkIHlpZWxkOgorICAgICAgKCkKKyAgICAgICgxLCkKKyAgICAgICgxLCAyKQorICAgICAgKDEsIDIsIDMpCisgICAgIiIiCisgICAgeWllbGQgdHVwbGUoKQorICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBmb3IgZ3JvdXAgaW4gbDoKKyAgICAgICAgYWNjdW11bGF0b3IuZXh0ZW5kKGdyb3VwKQorICAgICAgICB5aWVsZCB0dXBsZShhY2N1bXVsYXRvcikKKworCitkZWYgcGVybXV0ZV9vcHRpb25hbF9ncm91cHMobGVmdCwgcmVxdWlyZWQsIHJpZ2h0KToKKyAgICAiIiIKKyAgICBHZW5lcmF0b3IgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgc2V0IG9mIGFjY2VwdGFibGUKKyAgICBhcmd1bWVudCBsaXN0cyBmb3IgdGhlIHByb3ZpZGVkIGl0ZXJhYmxlcyBvZgorICAgIGFyZ3VtZW50IGdyb3Vwcy4gIChBY3R1YWxseSBpdCBnZW5lcmF0ZXMgYSB0dXBsZSBvZiB0dXBsZXMuKQorCisgICAgQWxnb3JpdGhtOiBwcmVmZXIgbGVmdCBvcHRpb25zIG92ZXIgcmlnaHQgb3B0aW9ucy4KKworICAgIElmIHJlcXVpcmVkIGlzIGVtcHR5LCBsZWZ0IG11c3QgYWxzbyBiZSBlbXB0eS4KKyAgICAiIiIKKyAgICByZXF1aXJlZCA9IHR1cGxlKHJlcXVpcmVkKQorICAgIHJlc3VsdCA9IFtdCisKKyAgICBpZiBub3QgcmVxdWlyZWQ6CisgICAgICAgIGFzc2VydCBub3QgbGVmdAorCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGNvdW50cyA9IHNldCgpCisgICAgZm9yIHIgaW4gcGVybXV0ZV9yaWdodF9vcHRpb25fZ3JvdXBzKHJpZ2h0KToKKyAgICAgICAgZm9yIGwgaW4gcGVybXV0ZV9sZWZ0X29wdGlvbl9ncm91cHMobGVmdCk6CisgICAgICAgICAgICB0ID0gbCArIHJlcXVpcmVkICsgcgorICAgICAgICAgICAgaWYgbGVuKHQpIGluIGNvdW50czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgY291bnRzLmFkZChsZW4odCkpCisgICAgICAgICAgICBhY2N1bXVsYXRvci5hcHBlbmQodCkKKworICAgIGFjY3VtdWxhdG9yLnNvcnQoa2V5PWxlbikKKyAgICByZXR1cm4gdHVwbGUoYWNjdW11bGF0b3IpCisKKworY2xhc3MgQ0xhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGxhbmd1YWdlICAgICAgPSAnQycKKyAgICBzdGFydF9saW5lICAgID0gIi8qW3tkc2xfbmFtZX1dIgorICAgIGJvZHlfcHJlZml4ICAgPSAiIgorICAgIHN0b3BfbGluZSAgICAgPSAiW3tkc2xfbmFtZX1dKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIvKlt7ZHNsX25hbWV9IGNoZWNrc3VtOiB7Y2hlY2tzdW19XSovIgorCisgICAgZGVmIHJlbmRlcihzZWxmLCBzaWduYXR1cmVzKToKKyAgICAgICAgZnVuY3Rpb24gPSBOb25lCisgICAgICAgIGZvciBvIGluIHNpZ25hdHVyZXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIEZ1bmN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiWW91IG1heSBzcGVjaWZ5IGF0IG1vc3Qgb25lIGZ1bmN0aW9uIHBlciBibG9jay5cbkZvdW5kIGEgYmxvY2sgY29udGFpbmluZyBhdCBsZWFzdCB0d286XG5cdCIgKyByZXByKGZ1bmN0aW9uKSArICIgYW5kICIgKyByZXByKG8pKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gbworICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfZnVuY3Rpb24oZnVuY3Rpb24pCisKKyAgICBkZWYgZG9jc3RyaW5nX2Zvcl9jX3N0cmluZyhzZWxmLCBmKToKKyAgICAgICAgdGV4dCwgYWRkLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgICMgdHVybiBkb2NzdHJpbmcgaW50byBhIHByb3Blcmx5IHF1b3RlZCBDIHN0cmluZworICAgICAgICBmb3IgbGluZSBpbiBmLmRvY3N0cmluZy5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGFkZCgnIicpCisgICAgICAgICAgICBhZGQocXVvdGVkX2Zvcl9jX3N0cmluZyhsaW5lKSkKKyAgICAgICAgICAgIGFkZCgnXFxuIlxuJykKKworICAgICAgICB0ZXh0LnBvcCgpCisgICAgICAgIGFkZCgnIicpCisgICAgICAgIHJldHVybiAnJy5qb2luKHRleHQpCisKKyAgICBpbXBsX3Byb3RvdHlwZV90ZW1wbGF0ZSA9ICJ7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9wYXJhbWV0ZXJzfSkiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHRlbXBsYXRlX2Jhc2UoKmFyZ3MpOgorICAgICAgICBmbGFncyA9ICd8Jy5qb2luKGYgZm9yIGYgaW4gYXJncyBpZiBmKQorICAgICAgICByZXR1cm4gIiIiCitQeURvY19TVFJWQVIoe2NfYmFzZW5hbWV9X19kb2NfXywKK3tkb2NzdHJpbmd9KTsKKworI2RlZmluZSB7bWV0aG9kZGVmX25hbWV9ICAgIFxcCisgICAge3sie25hbWV9IiwgKFB5Q0Z1bmN0aW9uKXtjX2Jhc2VuYW1lfSwge21ldGhvZGRlZl9mbGFnc30sIHtjX2Jhc2VuYW1lfV9fZG9jX199fSwKKyIiIi5yZXBsYWNlKCd7bWV0aG9kZGVmX2ZsYWdzfScsIGZsYWdzKQorCisgICAgZGVmIG1ldGhfbm9hcmdzX3B5b2JqZWN0X3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTk9BUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKKyIiIgorCisgICAgZGVmIG1ldGhfbm9hcmdzX3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfTk9BUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9KQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisKKyAgICB7cmV0dXJuX3ZhbHVlfSA9IHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX2FyZ3VtZW50c30pOworICAgIHtyZXR1cm5fY29udmVyc2lvbn0KKwore2V4aXRfbGFiZWx9CisgICAge2NsZWFudXB9CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK319CisKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX0KKyIiIgorCisgICAgZGVmIG1ldGhfb190ZW1wbGF0ZShzZWxmLCBtZXRob2RkZWZfZmxhZ3M9IiIpOgorICAgICAgICByZXR1cm4gc2VsZi50ZW1wbGF0ZV9iYXNlKCJNRVRIX08iLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtpbXBsX3BhcmFtZXRlcnN9KQorIiIiCisKKyAgICBkZWYgbWV0aF9vX3JldHVybl9jb252ZXJ0ZXJfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9PIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorICAgIF9yZXR1cm5fdmFsdWUgPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIGRlZiBvcHRpb25fZ3JvdXBfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTIiwgbWV0aG9kZGVmX2ZsYWdzKSArICIiIgorc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3tjX2Jhc2VuYW1lfSh7c2VsZl90eXBlfXtzZWxmX25hbWV9LCBQeU9iamVjdCAqYXJncykKK3t7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAge2RlY2xhcmF0aW9uc30KKyAgICB7aW5pdGlhbGl6ZXJzfQorCisgICAge29wdGlvbl9ncm91cF9wYXJzaW5nfQorICAgIHtyZXR1cm5fdmFsdWV9ID0ge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfYXJndW1lbnRzfSk7CisgICAge3JldHVybl9jb252ZXJzaW9ufQorCit7ZXhpdF9sYWJlbH0KKyAgICB7Y2xlYW51cH0KKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfX0KKworc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfQorIiIiCisKKyAgICBkZWYga2V5d29yZHNfdGVtcGxhdGUoc2VsZiwgbWV0aG9kZGVmX2ZsYWdzPSIiKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGVtcGxhdGVfYmFzZSgiTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMiLCBtZXRob2RkZWZfZmxhZ3MpICsgIiIiCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9OworCitzdGF0aWMgUHlPYmplY3QgKgore2NfYmFzZW5hbWV9KHtzZWxmX3R5cGV9e3NlbGZfbmFtZX0sIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQore3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7e3trZXl3b3Jkc30sIE5VTEx9fTsKKyAgICB7ZGVjbGFyYXRpb25zfQorICAgIHtpbml0aWFsaXplcnN9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCBfa2V5d29yZHMsCisgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHtyZXR1cm5fdmFsdWV9ID0ge2NfYmFzZW5hbWV9X2ltcGwoe2ltcGxfYXJndW1lbnRzfSk7CisgICAge3JldHVybl9jb252ZXJzaW9ufQorCit7ZXhpdF9sYWJlbH0KKyAgICB7Y2xlYW51cH0KKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfX0KKworc3RhdGljIHtpbXBsX3JldHVybl90eXBlfQore2ltcGxfcHJvdG90eXBlfQorIiIiCisKKyAgICBkZWYgcG9zaXRpb25hbF9vbmx5X3RlbXBsYXRlKHNlbGYsIG1ldGhvZGRlZl9mbGFncz0iIik6CisgICAgICAgIHJldHVybiBzZWxmLnRlbXBsYXRlX2Jhc2UoIk1FVEhfVkFSQVJHUyIsIG1ldGhvZGRlZl9mbGFncykgKyAiIiIKK3N0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KK3tpbXBsX3Byb3RvdHlwZX07CisKK3N0YXRpYyBQeU9iamVjdCAqCit7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MpCit7eworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHtkZWNsYXJhdGlvbnN9CisgICAge2luaXRpYWxpemVyc30KKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwKKyAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICB7cmV0dXJuX2NvbnZlcnNpb259CisKK3tleGl0X2xhYmVsfQorICAgIHtjbGVhbnVwfQorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9fQorCitzdGF0aWMge2ltcGxfcmV0dXJuX3R5cGV9Cit7aW1wbF9wcm90b3R5cGV9CisiIiIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCk6CisgICAgICAgIGFkamVjdGl2ZSA9ICJsZWZ0XyIgaWYgZ3JvdXAgPCAwIGVsc2UgInJpZ2h0XyIKKyAgICAgICAgcmV0dXJuICJncm91cF8iICsgYWRqZWN0aXZlICsgc3RyKGFicyhncm91cCkpCisKKyAgICBkZWYgcmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKHNlbGYsIGYsIHRlbXBsYXRlX2RpY3QpOgorICAgICAgICAjIHBvc2l0aW9uYWwgb25seSwgZ3JvdXBlZCwgb3B0aW9uYWwgYXJndW1lbnRzIQorICAgICAgICAjIGNhbiBiZSBvcHRpb25hbCBvbiB0aGUgbGVmdCBvciByaWdodC4KKyAgICAgICAgIyBoZXJlJ3MgYW4gZXhhbXBsZToKKyAgICAgICAgIworICAgICAgICAjIFsgWyBbIEExIEEyIF0gQjEgQjIgQjMgXSBDMSBDMiBdIEQxIEQyIEQzIFsgRTEgRTIgRTMgWyBGMSBGMiBGMyBdIF0KKyAgICAgICAgIworICAgICAgICAjIEhlcmUgZ3JvdXAgRCBhcmUgcmVxdWlyZWQsIGFuZCBhbGwgb3RoZXIgZ3JvdXBzIGFyZSBvcHRpb25hbC4KKyAgICAgICAgIyAoR3JvdXAgRCdzICJncm91cCIgaXMgYWN0dWFsbHkgTm9uZS4pCisgICAgICAgICMgV2UgY2FuIGZpZ3VyZSBvdXQgd2hpY2ggc2V0cyBvZiBhcmd1bWVudHMgd2UgaGF2ZSBiYXNlZCBvbgorICAgICAgICAjIGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgaW4gdGhlIHR1cGxlLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNvdW50IHVwIG9uIGJvdGggc2lkZXMuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgIyB5b3UgY291bGQgaGF2ZSBncm91cHMgQytELCBvciBDK0QrRSwgb3IgQytEK0UrRi4KKyAgICAgICAgIworICAgICAgICAjIFdoYXQgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbGVhZHMgdXMgdG8gYW4gYW1iaWd1b3VzIHJlc3VsdD8KKyAgICAgICAgIyBDbGluaWMgcHJlZmVycyBncm91cHMgb24gdGhlIGxlZnQuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICAgICAgIyBmaXZlIGFyZ3VtZW50cyB3b3VsZCBtYXAgdG8gQitDLCBub3QgQytELgorCisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHBhcmFtZXRlcnMgPSBsaXN0KGYucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgICAgICBncm91cHMgPSBbXQorICAgICAgICBncm91cCA9IE5vbmUKKyAgICAgICAgbGVmdCA9IFtdCisgICAgICAgIHJpZ2h0ID0gW10KKyAgICAgICAgcmVxdWlyZWQgPSBbXQorICAgICAgICBsYXN0ID0gdW5zcGVjaWZpZWQKKworICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgZ3JvdXBfaWQgPSBwLmdyb3VwCisgICAgICAgICAgICBpZiBncm91cF9pZCAhPSBsYXN0OgorICAgICAgICAgICAgICAgIGxhc3QgPSBncm91cF9pZAorICAgICAgICAgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgICAgICAgICBpZiBncm91cF9pZCA8IDA6CisgICAgICAgICAgICAgICAgICAgIGxlZnQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgICAgIGVsaWYgZ3JvdXBfaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSByZXF1aXJlZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LmFwcGVuZChncm91cCkKKyAgICAgICAgICAgIGdyb3VwLmFwcGVuZChwKQorCisgICAgICAgIGNvdW50X21pbiA9IHN5cy5tYXhzaXplCisgICAgICAgIGNvdW50X21heCA9IC0xCisKKyAgICAgICAgYWRkKCJzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkge3tcbiIpCisgICAgICAgIGZvciBzdWJzZXQgaW4gcGVybXV0ZV9vcHRpb25hbF9ncm91cHMobGVmdCwgcmVxdWlyZWQsIHJpZ2h0KToKKyAgICAgICAgICAgIGNvdW50ID0gbGVuKHN1YnNldCkKKyAgICAgICAgICAgIGNvdW50X21pbiA9IG1pbihjb3VudF9taW4sIGNvdW50KQorICAgICAgICAgICAgY291bnRfbWF4ID0gbWF4KGNvdW50X21heCwgY291bnQpCisKKyAgICAgICAgICAgIGdyb3VwX2lkcyA9IHtwLmdyb3VwIGZvciBwIGluIHN1YnNldH0gICMgZWxpbWluYXRlIGR1cGxpY2F0ZXMKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZFsnY291bnQnXSA9IGNvdW50CisgICAgICAgICAgICBkWyduYW1lJ10gPSBmLm5hbWUKKyAgICAgICAgICAgIGRbJ2dyb3VwcyddID0gc29ydGVkKGdyb3VwX2lkcykKKyAgICAgICAgICAgIGRbJ2Zvcm1hdF91bml0cyddID0gIiIuam9pbihwLmNvbnZlcnRlci5mb3JtYXRfdW5pdCBmb3IgcCBpbiBzdWJzZXQpCisKKyAgICAgICAgICAgIHBhcnNlX2FyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBzdWJzZXQ6CisgICAgICAgICAgICAgICAgcC5jb252ZXJ0ZXIucGFyc2VfYXJndW1lbnQocGFyc2VfYXJndW1lbnRzKQorICAgICAgICAgICAgZFsncGFyc2VfYXJndW1lbnRzJ10gPSAiLCAiLmpvaW4ocGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICAgICBncm91cF9pZHMuZGlzY2FyZCgwKQorICAgICAgICAgICAgbGluZXMgPSBbc2VsZi5ncm91cF90b192YXJpYWJsZV9uYW1lKGcpICsgIiA9IDE7IiBmb3IgZyBpbiBncm91cF9pZHNdCisgICAgICAgICAgICBsaW5lcyA9ICJcbiIuam9pbihsaW5lcykKKworICAgICAgICAgICAgcyA9ICIiIgorICAgIGNhc2Uge2NvdW50fToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAge2dyb3VwX2Jvb2xlYW5zfQorICAgICAgICBicmVhazsKKyIiIlsxOl0KKyAgICAgICAgICAgIHMgPSBsaW5lYXJfZm9ybWF0KHMsIGdyb3VwX2Jvb2xlYW5zPWxpbmVzKQorICAgICAgICAgICAgcyA9IHMuZm9ybWF0X21hcChkKQorICAgICAgICAgICAgYWRkKHMpCisKKyAgICAgICAgYWRkKCIgICAgZGVmYXVsdDpcbiIpCisgICAgICAgIHMgPSAnICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAie30gcmVxdWlyZXMge30gdG8ge30gYXJndW1lbnRzIik7XG4nCisgICAgICAgIGFkZChzLmZvcm1hdChmLmZ1bGxfbmFtZSwgY291bnRfbWluLCBjb3VudF9tYXgpKQorICAgICAgICBhZGQoJyAgICAgICAgcmV0dXJuIE5VTEw7XG4nKQorICAgICAgICBhZGQoIn19IikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSA9IG91dHB1dCgpCisKKyAgICBkZWYgcmVuZGVyX2Z1bmN0aW9uKHNlbGYsIGYpOgorICAgICAgICBpZiBub3QgZjoKKyAgICAgICAgICAgIHJldHVybiAiIgorCisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIGRhdGEgPSBDUmVuZGVyRGF0YSgpCisKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgdGVtcGxhdGVfZGljdCA9IHt9CisKKyAgICAgICAgZnVsbF9uYW1lID0gZi5mdWxsX25hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZnVsbF9uYW1lJ10gPSBmdWxsX25hbWUKKworICAgICAgICBuYW1lID0gZnVsbF9uYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WyduYW1lJ10gPSBuYW1lCisKKyAgICAgICAgY19iYXNlbmFtZSA9IGYuY19iYXNlbmFtZSBvciBmdWxsX25hbWUucmVwbGFjZSgiLiIsICJfIikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnY19iYXNlbmFtZSddID0gY19iYXNlbmFtZQorCisgICAgICAgIG1ldGhvZGRlZl9uYW1lID0gInt9X01FVEhPRERFRiIuZm9ybWF0KGNfYmFzZW5hbWUudXBwZXIoKSkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnbWV0aG9kZGVmX25hbWUnXSA9IG1ldGhvZGRlZl9uYW1lCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZG9jc3RyaW5nJ10gPSBzZWxmLmRvY3N0cmluZ19mb3JfY19zdHJpbmcoZikKKworICAgICAgICBwb3NpdGlvbmFsID0gaGFzX29wdGlvbl9ncm91cHMgPSAgRmFsc2UKKworICAgICAgICBpZiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgbGFzdF9ncm91cCA9IDAKKworICAgICAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBjID0gcC5jb252ZXJ0ZXIKKworICAgICAgICAgICAgICAgICMgaW5zZXJ0IGdyb3VwIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgZ3JvdXAgPSBwLmdyb3VwCisgICAgICAgICAgICAgICAgaWYgbGFzdF9ncm91cCAhPSBncm91cDoKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9ncm91cCA9IGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwOgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfbmFtZSA9IHNlbGYuZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKGdyb3VwX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSArICIgPSAwOyIpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc19vcHRpb25fZ3JvdXBzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGMucmVuZGVyKHAsIGRhdGEpCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgPSBwYXJhbWV0ZXJzWy0xXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICAgICAgaWYgaGFzX29wdGlvbl9ncm91cHM6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHBvc2l0aW9uYWwKKworICAgICAgICAjIG5vdyBpbnNlcnQgb3VyICJzZWxmIiAob3Igd2hhdGV2ZXIpIHBhcmFtZXRlcnMKKyAgICAgICAgIyAod2UgZGVsaWJlcmF0ZWx5IGRvbid0IGNhbGwgcmVuZGVyIG9uIHNlbGYgY29udmVydGVycykKKyAgICAgICAgc3RvY2tfc2VsZiA9IHNlbGZfY29udmVydGVyKCdzZWxmJywgZikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl9uYW1lJ10gPSBzdG9ja19zZWxmLm5hbWUKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlJ10gPSBzdG9ja19zZWxmLnR5cGUKKyAgICAgICAgZGF0YS5pbXBsX3BhcmFtZXRlcnMuaW5zZXJ0KDAsIGYuc2VsZl9jb252ZXJ0ZXIudHlwZSArICgiIiBpZiBmLnNlbGZfY29udmVydGVyLnR5cGUuZW5kc3dpdGgoJyonKSBlbHNlICIgIikgKyBmLnNlbGZfY29udmVydGVyLm5hbWUpCisgICAgICAgIGlmIGYuc2VsZl9jb252ZXJ0ZXIudHlwZSAhPSBzdG9ja19zZWxmLnR5cGU6CisgICAgICAgICAgICBzZWxmX2Nhc3QgPSAnKCcgKyBmLnNlbGZfY29udmVydGVyLnR5cGUgKyAnKScKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGZfY2FzdCA9ICcnCisgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuaW5zZXJ0KDAsIHNlbGZfY2FzdCArIHN0b2NrX3NlbGYubmFtZSkKKworICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIucmVuZGVyKGYsIGRhdGEpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcmV0dXJuX3R5cGUnXSA9IGYucmV0dXJuX2NvbnZlcnRlci50eXBlCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGF0YS5kZWNsYXJhdGlvbnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddID0gIlxuXG4iLmpvaW4oZGF0YS5pbml0aWFsaXplcnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2tleXdvcmRzJ10gPSAnIicgKyAnIiwgIicuam9pbihkYXRhLmtleXdvcmRzKSArICciJworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydmb3JtYXRfdW5pdHMnXSA9ICcnLmpvaW4oZGF0YS5mb3JtYXRfdW5pdHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3BhcnNlX2FyZ3VtZW50cyddID0gJywgJy5qb2luKGRhdGEucGFyc2VfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX3BhcmFtZXRlcnMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfcGFyYW1ldGVycykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnaW1wbF9hcmd1bWVudHMnXSA9ICIsICIuam9pbihkYXRhLmltcGxfYXJndW1lbnRzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddID0gIiIuam9pbihkYXRhLnJldHVybl9jb252ZXJzaW9uKS5yc3RyaXAoKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10gPSAiIi5qb2luKGRhdGEuY2xlYW51cCkKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncmV0dXJuX3ZhbHVlJ10gPSBkYXRhLnJldHVybl92YWx1ZQorCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcHJvdG90eXBlJ10gPSBzZWxmLmltcGxfcHJvdG90eXBlX3RlbXBsYXRlLmZvcm1hdF9tYXAodGVtcGxhdGVfZGljdCkKKworICAgICAgICBkZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIgPSAobm90IGYucmV0dXJuX2NvbnZlcnRlciBvcgorICAgICAgICAgICAgZi5yZXR1cm5fY29udmVydGVyLnR5cGUgPT0gJ1B5T2JqZWN0IConKQorCisgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5tZXRoX25vYXJnc19weW9iamVjdF90ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfbm9hcmdzX3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorICAgICAgICBlbGlmIChsZW4ocGFyYW1ldGVycykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgcGFyYW1ldGVyc1swXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSBhbmQKKyAgICAgICAgICAgICAgbm90IGNvbnZlcnRlcnNbMF0uaXNfb3B0aW9uYWwoKSBhbmQKKyAgICAgICAgICAgICAgaXNpbnN0YW5jZShjb252ZXJ0ZXJzWzBdLCBvYmplY3RfY29udmVydGVyKSBhbmQKKyAgICAgICAgICAgICAgY29udmVydGVyc1swXS5mb3JtYXRfdW5pdCA9PSAnTycpOgorICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5tZXRoX29fdGVtcGxhdGUoZi5tZXRob2RkZWZfZmxhZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgSEFDSworICAgICAgICAgICAgICAgICMgd2UncmUgdXNpbmcgImltcGxfcGFyYW1ldGVycyIgZm9yIHRoZQorICAgICAgICAgICAgICAgICMgbm9uLWltcGwgZnVuY3Rpb24sIGJlY2F1c2UgdGhhdCB3b3JrcworICAgICAgICAgICAgICAgICMgYmV0dGVyIGZvciBNRVRIX08uICBidXQgdGhhdCBtZWFucyB3ZQorICAgICAgICAgICAgICAgICMgbXVzdCBzdXByZXNzIGFjdHVhbGx5IGRlY2xhcmluZyB0aGUKKyAgICAgICAgICAgICAgICAjIGltcGwncyBwYXJhbWV0ZXJzIGFzIHZhcmlhYmxlcyBpbiB0aGUKKyAgICAgICAgICAgICAgICAjIG5vbi1pbXBsLiAgYnV0IHNpbmNlIGl0J3MgTUVUSF9PLCB3ZQorICAgICAgICAgICAgICAgICMgb25seSBoYXZlIG9uZSBhbnl3YXksIHNvCisgICAgICAgICAgICAgICAgIyB3ZSBkb24ndCBoYXZlIGFueSBwcm9ibGVtIGZpbmRpbmcgaXQuCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zX2NvcHkgPSBsaXN0KGRhdGEuZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgICAgIGJlZm9yZSwgcHlvYmplY3QsIGFmdGVyID0gZGVjbGFyYXRpb25zX2NvcHlbMF0ucGFydGl0aW9uKCdQeU9iamVjdCAqJykKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGJlZm9yZSwgImhhY2sgZmFpbGVkLCBzZWUgY29tbWVudCIKKyAgICAgICAgICAgICAgICBhc3NlcnQgcHlvYmplY3QsICJoYWNrIGZhaWxlZCwgc2VlIGNvbW1lbnQiCisgICAgICAgICAgICAgICAgYXNzZXJ0IGFmdGVyIGFuZCBhZnRlclswXS5pc2FscGhhKCksICJoYWNrIGZhaWxlZCwgc2VlIGNvbW1lbnQiCisgICAgICAgICAgICAgICAgZGVsIGRlY2xhcmF0aW9uc19jb3B5WzBdCisgICAgICAgICAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGVjbGFyYXRpb25zX2NvcHkpCisgICAgICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLm1ldGhfb19yZXR1cm5fY29udmVydGVyX3RlbXBsYXRlKGYubWV0aG9kZGVmX2ZsYWdzKQorICAgICAgICBlbGlmIGhhc19vcHRpb25fZ3JvdXBzOgorICAgICAgICAgICAgc2VsZi5yZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoZiwgdGVtcGxhdGVfZGljdCkKKyAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5vcHRpb25fZ3JvdXBfdGVtcGxhdGUoZi5tZXRob2RkZWZfZmxhZ3MpCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgb3B0aW9uX2dyb3VwX3BhcnNpbmc9dGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSkKKyAgICAgICAgZWxpZiBwb3NpdGlvbmFsOgorICAgICAgICAgICAgdGVtcGxhdGUgPSBzZWxmLnBvc2l0aW9uYWxfb25seV90ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRlbXBsYXRlID0gc2VsZi5rZXl3b3Jkc190ZW1wbGF0ZShmLm1ldGhvZGRlZl9mbGFncykKKworICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICBkZWNsYXJhdGlvbnM9dGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10sCisgICAgICAgICAgICByZXR1cm5fY29udmVyc2lvbj10ZW1wbGF0ZV9kaWN0WydyZXR1cm5fY29udmVyc2lvbiddLAorICAgICAgICAgICAgaW5pdGlhbGl6ZXJzPXRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddLAorICAgICAgICAgICAgY2xlYW51cD10ZW1wbGF0ZV9kaWN0WydjbGVhbnVwJ10sCisgICAgICAgICAgICApCisKKyAgICAgICAgIyBPbmx5IGdlbmVyYXRlIHRoZSAiZXhpdDoiIGxhYmVsCisgICAgICAgICMgaWYgd2UgaGF2ZSBhbnkgZ290b3MKKyAgICAgICAgbmVlZF9leGl0X2xhYmVsID0gImdvdG8gZXhpdDsiIGluIHRlbXBsYXRlCisgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgIGV4aXRfbGFiZWw9ImV4aXQ6IiBpZiBuZWVkX2V4aXRfbGFiZWwgZWxzZSAnJworICAgICAgICAgICAgKQorCisgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5mb3JtYXRfbWFwKHRlbXBsYXRlX2RpY3QpCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBPdmVycmlkZVN0ZGlvV2l0aChzdGRvdXQpOgorICAgIHNhdmVkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGFzc2VydCBzeXMuc3Rkb3V0IGlzIHN0ZG91dAorICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZWRfc3Rkb3V0CisKKworZGVmIGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyKToKKyAgICAiIiJDcmVhdGUgYW4gcmUgb2JqZWN0IGZvciBtYXRjaGluZyBtYXJrZXIgbGluZXMuIiIiCisgICAgcGF0dGVybiA9IHInXnt9KFx3Kyl7fSQnCisgICAgcmV0dXJuIHJlLmNvbXBpbGUocGF0dGVybi5mb3JtYXQocmUuZXNjYXBlKGJlZm9yZSksIHJlLmVzY2FwZShhZnRlcikpKQorCisKK2NsYXNzIEJsb2NrOgorICAgIHIiIiIKKyAgICBSZXByZXNlbnRzIGEgc2luZ2xlIGJsb2NrIG9mIHRleHQgZW1iZWRkZWQgaW4KKyAgICBhbm90aGVyIGZpbGUuICBJZiBkc2xfbmFtZSBpcyBOb25lLCB0aGUgYmxvY2sgcmVwcmVzZW50cworICAgIHZlcmJhdGltIHRleHQsIHJhdyBvcmlnaW5hbCB0ZXh0IGZyb20gdGhlIGZpbGUsIGluCisgICAgd2hpY2ggY2FzZSAiaW5wdXQiIHdpbGwgYmUgdGhlIG9ubHkgbm9uLWZhbHNlIG1lbWJlci4KKyAgICBJZiBkc2xfbmFtZSBpcyBub3QgTm9uZSwgdGhlIGJsb2NrIHJlcHJlc2VudHMgYSBDbGluaWMKKyAgICBibG9jay4KKworICAgIGlucHV0IGlzIGFsd2F5cyBzdHIsIHdpdGggZW1iZWRkZWQgXG4gY2hhcmFjdGVycy4KKyAgICBpbnB1dCByZXByZXNlbnRzIHRoZSBvcmlnaW5hbCB0ZXh0IGZyb20gdGhlIGZpbGU7CisgICAgaWYgaXQncyBhIENsaW5pYyBibG9jaywgaXQgaXMgdGhlIG9yaWdpbmFsIHRleHQgd2l0aAorICAgIHRoZSBib2R5X3ByZWZpeCBhbmQgcmVkdW5kYW50IGxlYWRpbmcgd2hpdGVzcGFjZSByZW1vdmVkLgorCisgICAgZHNsX25hbWUgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSWYgc3RyLCBpdCdzIHRoZSB0ZXh0CisgICAgZm91bmQgb24gdGhlIHN0YXJ0IGxpbmUgb2YgdGhlIGJsb2NrIGJldHdlZW4gdGhlIHNxdWFyZQorICAgIGJyYWNrZXRzLgorCisgICAgc2lnbmF0dXJlcyBpcyBlaXRoZXIgbGlzdCBvciBOb25lLiAgSWYgaXQncyBhIGxpc3QsCisgICAgaXQgbWF5IG9ubHkgY29udGFpbiBjbGluaWMuTW9kdWxlLCBjbGluaWMuQ2xhc3MsIGFuZAorICAgIGNsaW5pYy5GdW5jdGlvbiBvYmplY3RzLiAgQXQgdGhlIG1vbWVudCBpdCBzaG91bGQKKyAgICBjb250YWluIGF0IG1vc3Qgb25lIG9mIGVhY2guCisKKyAgICBvdXRwdXQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSWYgc3RyLCBpdCdzIHRoZSBvdXRwdXQKKyAgICBmcm9tIHRoaXMgYmxvY2ssIHdpdGggZW1iZWRkZWQgJ1xuJyBjaGFyYWN0ZXJzLgorCisgICAgaW5kZW50IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIEl0J3MgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZQorICAgIHRoYXQgd2FzIGZvdW5kIG9uIGV2ZXJ5IGxpbmUgb2YgaW5wdXQuICAoSWYgYm9keV9wcmVmaXggaXMKKyAgICBub3QgZW1wdHksIHRoaXMgaXMgdGhlIGluZGVudCAqYWZ0ZXIqIHJlbW92aW5nIHRoZQorICAgIGJvZHlfcHJlZml4LikKKworICAgIHByZWluZGVudCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJdCdzIHRoZSB3aGl0ZXNwYWNlIHRoYXQKKyAgICB3YXMgZm91bmQgaW4gZnJvbnQgb2YgZXZlcnkgbGluZSBvZiBpbnB1dCAqYmVmb3JlKiB0aGUKKyAgICAiYm9keV9wcmVmaXgiIChzZWUgdGhlIExhbmd1YWdlIG9iamVjdCkuICBJZiBib2R5X3ByZWZpeAorICAgIGlzIGVtcHR5LCBwcmVpbmRlbnQgbXVzdCBhbHdheXMgYmUgZW1wdHkgdG9vLgorCisgICAgVG8gaWxsdXN0cmF0ZSBpbmRlbnQgYW5kIHByZWluZGVudDogQXNzdW1lIHRoYXQgJ18nCisgICAgcmVwcmVzZW50cyB3aGl0ZXNwYWNlLiAgSWYgdGhlIGJsb2NrIHByb2Nlc3NlZCB3YXMgaW4gYQorICAgIFB5dGhvbiBmaWxlLCBhbmQgbG9va2VkIGxpa2UgdGhpczoKKyAgICAgIF9fX18jLypbcHl0aG9uXQorICAgICAgX19fXyNfX2ZvciBhIGluIHJhbmdlKDIwKToKKyAgICAgIF9fX18jX19fX3ByaW50KGEpCisgICAgICBfX19fI1tweXRob25dKi8KKyAgICAicHJlaW5kZW50IiB3b3VsZCBiZSAiX19fXyIgYW5kICJpbmRlbnQiIHdvdWxkIGJlICJfXyIuCisKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5wdXQsIGRzbF9uYW1lPU5vbmUsIHNpZ25hdHVyZXM9Tm9uZSwgb3V0cHV0PU5vbmUsIGluZGVudD0nJywgcHJlaW5kZW50PScnKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaW5wdXQsIHN0cikKKyAgICAgICAgc2VsZi5pbnB1dCA9IGlucHV0CisgICAgICAgIHNlbGYuZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICBzZWxmLnNpZ25hdHVyZXMgPSBzaWduYXR1cmVzIG9yIFtdCisgICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0CisgICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50CisgICAgICAgIHNlbGYucHJlaW5kZW50ID0gcHJlaW5kZW50CisKKworY2xhc3MgQmxvY2tQYXJzZXI6CisgICAgIiIiCisgICAgQmxvY2stb3JpZW50ZWQgcGFyc2VyIGZvciBBcmd1bWVudCBDbGluaWMuCisgICAgSXRlcmF0b3IsIHlpZWxkcyBCbG9jayBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0LCBsYW5ndWFnZSwgKiwgdmVyaWZ5PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgImlucHV0IiBzaG91bGQgYmUgYSBzdHIgb2JqZWN0CisgICAgICAgIHdpdGggZW1iZWRkZWQgXG4gY2hhcmFjdGVycy4KKworICAgICAgICAibGFuZ3VhZ2UiIHNob3VsZCBiZSBhIExhbmd1YWdlIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGxhbmd1YWdlLnZhbGlkYXRlKCkKKworICAgICAgICBzZWxmLmlucHV0ID0gY29sbGVjdGlvbnMuZGVxdWUocmV2ZXJzZWQoaW5wdXQuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyID0gMAorCisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBiZWZvcmUsIF8sIGFmdGVyID0gbGFuZ3VhZ2Uuc3RhcnRfbGluZS5wYXJ0aXRpb24oJ3tkc2xfbmFtZX0nKQorICAgICAgICBhc3NlcnQgXyA9PSAne2RzbF9uYW1lfScKKyAgICAgICAgc2VsZi5zdGFydF9yZSA9IGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyKQorICAgICAgICBzZWxmLnZlcmlmeSA9IHZlcmlmeQorICAgICAgICBzZWxmLmxhc3RfY2hlY2tzdW1fcmUgPSBOb25lCisgICAgICAgIHNlbGYubGFzdF9kc2xfbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5kc2xfbmFtZSA9IE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5wdXQ6CisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICAgICAgaWYgc2VsZi5kc2xfbmFtZToKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHNlbGYucGFyc2VfY2xpbmljX2Jsb2NrKHNlbGYuZHNsX25hbWUpCisgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorICAgICAgICAgICAgcmV0dXJuIHJldHVybl92YWx1ZQorICAgICAgICByZXR1cm4gc2VsZi5wYXJzZV92ZXJiYXRpbV9ibG9jaygpCisKKyAgICBkZWYgaXNfc3RhcnRfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLnN0YXJ0X3JlLm1hdGNoKGxpbmUubHN0cmlwKCkpCisgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKworICAgIGRlZiBfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5saW5lX251bWJlciArPSAxCisgICAgICAgIHJldHVybiBzZWxmLmlucHV0LnBvcCgpCisKKyAgICBkZWYgcGFyc2VfdmVyYmF0aW1fYmxvY2soc2VsZik6CisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyCisKKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIGRzbF9uYW1lID0gc2VsZi5pc19zdGFydF9saW5lKGxpbmUpCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWRkKGxpbmUpCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKG91dHB1dCgpKQorCisgICAgZGVmIHBhcnNlX2NsaW5pY19ibG9jayhzZWxmLCBkc2xfbmFtZSk6CisgICAgICAgIGlucHV0X2FkZCwgaW5wdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyICsgMQorICAgICAgICBzdG9wX2xpbmUgPSBzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpICsgJ1xuJworICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorCisgICAgICAgICMgY29uc3VtZSBib2R5IG9mIHByb2dyYW0KKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gc3RvcF9saW5lIG9yIHNlbGYuaXNfc3RhcnRfbGluZShsaW5lKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgYm9keV9wcmVmaXg6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGluZS5zdGFydHN3aXRoKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lW2xlbihib2R5X3ByZWZpeCk6XQorICAgICAgICAgICAgaW5wdXRfYWRkKGxpbmUpCisKKyAgICAgICAgIyBjb25zdW1lIG91dHB1dCBhbmQgY2hlY2tzdW0gbGluZSwgaWYgcHJlc2VudC4KKyAgICAgICAgaWYgc2VsZi5sYXN0X2RzbF9uYW1lID09IGRzbF9uYW1lOgorICAgICAgICAgICAgY2hlY2tzdW1fcmUgPSBzZWxmLmxhc3RfY2hlY2tzdW1fcmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGJlZm9yZSwgXywgYWZ0ZXIgPSBzZWxmLmxhbmd1YWdlLmNoZWNrc3VtX2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lLCBjaGVja3N1bT0ne2NoZWNrc3VtfScpLnBhcnRpdGlvbigne2NoZWNrc3VtfScpCisgICAgICAgICAgICBhc3NlcnQgXyA9PSAne2NoZWNrc3VtfScKKyAgICAgICAgICAgIGNoZWNrc3VtX3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmxhc3RfZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICAgICAgc2VsZi5sYXN0X2NoZWNrc3VtX3JlID0gY2hlY2tzdW1fcmUKKworICAgICAgICAjIHNjYW4gZm9yd2FyZCBmb3IgY2hlY2tzdW0gbGluZQorICAgICAgICBvdXRwdXRfYWRkLCBvdXRwdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIGNoZWNrc3VtID0gTm9uZQorICAgICAgICB3aGlsZSBzZWxmLmlucHV0OgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2xpbmUoKQorICAgICAgICAgICAgbWF0Y2ggPSBjaGVja3N1bV9yZS5tYXRjaChsaW5lLmxzdHJpcCgpKQorICAgICAgICAgICAgY2hlY2tzdW0gPSBtYXRjaC5ncm91cCgxKSBpZiBtYXRjaCBlbHNlIE5vbmUKKyAgICAgICAgICAgIGlmIGNoZWNrc3VtOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvdXRwdXRfYWRkKGxpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3N0YXJ0X2xpbmUobGluZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBvdXRwdXQgPSBvdXRwdXRfb3V0cHV0KCkKKyAgICAgICAgaWYgY2hlY2tzdW06CisgICAgICAgICAgICBpZiBzZWxmLnZlcmlmeToKKyAgICAgICAgICAgICAgICBjb21wdXRlZCA9IGNvbXB1dGVfY2hlY2tzdW0ob3V0cHV0KQorICAgICAgICAgICAgICAgIGlmIGNoZWNrc3VtICE9IGNvbXB1dGVkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJDaGVja3N1bSBtaXNtYXRjaCFcbkV4cGVjdGVkOiB7fVxuQ29tcHV0ZWQ6IHt9Ii5mb3JtYXQoY2hlY2tzdW0sIGNvbXB1dGVkKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcHV0IGJhY2sgb3V0cHV0CisgICAgICAgICAgICBzZWxmLmlucHV0LmV4dGVuZChyZXZlcnNlZChvdXRwdXQuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkpCisgICAgICAgICAgICBzZWxmLmxpbmVfbnVtYmVyIC09IGxlbihvdXRwdXQpCisgICAgICAgICAgICBvdXRwdXQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKGlucHV0X291dHB1dCgpLCBkc2xfbmFtZSwgb3V0cHV0PW91dHB1dCkKKworCitjbGFzcyBCbG9ja1ByaW50ZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFuZ3VhZ2UsIGY9Tm9uZSk6CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBzZWxmLmYgPSBmIG9yIGlvLlN0cmluZ0lPKCkKKworICAgIGRlZiBwcmludF9ibG9jayhzZWxmLCBibG9jayk6CisgICAgICAgIGlucHV0ID0gYmxvY2suaW5wdXQKKyAgICAgICAgb3V0cHV0ID0gYmxvY2sub3V0cHV0CisgICAgICAgIGRzbF9uYW1lID0gYmxvY2suZHNsX25hbWUKKyAgICAgICAgd3JpdGUgPSBzZWxmLmYud3JpdGUKKworICAgICAgICBhc3NlcnQgbm90ICgoZHNsX25hbWUgPT0gTm9uZSkgXiAob3V0cHV0ID09IE5vbmUpKSwgInlvdSBtdXN0IHNwZWNpZnkgZHNsX25hbWUgYW5kIG91dHB1dCB0b2dldGhlciwgZHNsX25hbWUgIiArIHJlcHIoZHNsX25hbWUpCisKKyAgICAgICAgaWYgbm90IGRzbF9uYW1lOgorICAgICAgICAgICAgd3JpdGUoaW5wdXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0YXJ0X2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorICAgICAgICBpZiBub3QgYm9keV9wcmVmaXg6CisgICAgICAgICAgICB3cml0ZShpbnB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGlucHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHdyaXRlKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIHdyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIG91dHB1dCA9IGJsb2NrLm91dHB1dAorICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICB3cml0ZShvdXRwdXQpCisgICAgICAgICAgICBpZiBub3Qgb3V0cHV0LmVuZHN3aXRoKCdcbicpOgorICAgICAgICAgICAgICAgIHdyaXRlKCdcbicpCisKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5jaGVja3N1bV9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSwgY2hlY2tzdW09Y29tcHV0ZV9jaGVja3N1bShvdXRwdXQpKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworCisjIG1hcHMgc3RyaW5ncyB0byBMYW5ndWFnZSBvYmplY3RzLgorIyAibGFuZ3VhZ2VzIiBtYXBzIHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZSAoIkMiLCAiUHl0aG9uIikuCisjICJleHRlbnNpb25zIiBtYXBzIHRoZSBmaWxlIGV4dGVuc2lvbiAoImMiLCAicHkiKS4KK2xhbmd1YWdlcyA9IHsgJ0MnOiBDTGFuZ3VhZ2UsICdQeXRob24nOiBQeXRob25MYW5ndWFnZSB9CitleHRlbnNpb25zID0geyAnYyc6IENMYW5ndWFnZSwgJ2gnOiBDTGFuZ3VhZ2UsICdweSc6IFB5dGhvbkxhbmd1YWdlIH0KKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28obmFtZSwgZGVmYXVsdCwgKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCitjb252ZXJ0ZXJzID0ge30KKworIyBtYXBzIHN0cmluZ3MgdG8gY2FsbGFibGVzLgorIyB0aGVzZSBjYWxsYWJsZXMgZm9sbG93IHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGZvciAiY29udmVydGVycyIgYWJvdmUuCisjIG5vdGUgaG93ZXZlciB0aGF0IHRoZXkgd2lsbCBuZXZlciBiZSBjYWxsZWQgd2l0aCBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KK2xlZ2FjeV9jb252ZXJ0ZXJzID0ge30KKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBtdXN0IGJlIG9mIHRoZSBmb3JtOgorIyAgIGRlZiBmb28oKiwgLi4uKQorIyBUaGUgY2FsbGFibGUgbWF5IGhhdmUgYW55IG51bWJlciBvZiBrZXl3b3JkLW9ubHkgcGFyYW1ldGVycy4KKyMgVGhlIGNhbGxhYmxlIG11c3QgcmV0dXJuIGEgQ0NvbnZlcnRlciBvYmplY3QuCisjIFRoZSBjYWxsYWJsZSBzaG91bGQgbm90IGNhbGwgYnVpbHRpbnMucHJpbnQuCityZXR1cm5fY29udmVydGVycyA9IHt9CisKK2NsYXNzIENsaW5pYzoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFuZ3VhZ2UsIHByaW50ZXI9Tm9uZSwgKiwgdmVyaWZ5PVRydWUsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICAjIG1hcHMgc3RyaW5ncyB0byBQYXJzZXIgb2JqZWN0cy4KKyAgICAgICAgIyAoaW5zdGFudGlhdGVkIGZyb20gdGhlICJwYXJzZXJzIiBnbG9iYWwuKQorICAgICAgICBzZWxmLnBhcnNlcnMgPSB7fQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gbGFuZ3VhZ2UKKyAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlciBvciBCbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQorICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKworICAgICAgICBnbG9iYWwgY2xpbmljCisgICAgICAgIGNsaW5pYyA9IHNlbGYKKworICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dCk6CisgICAgICAgIHByaW50ZXIgPSBzZWxmLnByaW50ZXIKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBCbG9ja1BhcnNlcihpbnB1dCwgc2VsZi5sYW5ndWFnZSwgdmVyaWZ5PXNlbGYudmVyaWZ5KQorICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5ibG9ja19wYXJzZXI6CisgICAgICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBpZiBkc2xfbmFtZSBub3QgaW4gc2VsZi5wYXJzZXJzOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZHNsX25hbWUgaW4gcGFyc2VycywgIk5vIHBhcnNlciB0byBoYW5kbGUgeyFyfSBibG9jay4iLmZvcm1hdChkc2xfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXJzW2RzbF9uYW1lXSA9IHBhcnNlcnNbZHNsX25hbWVdKHNlbGYpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5wYXJzZXJzW2RzbF9uYW1lXQorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgICAgIHByaW50ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgIHJldHVybiBwcmludGVyLmYuZ2V0dmFsdWUoKQorCisgICAgZGVmIF9tb2R1bGVfYW5kX2NsYXNzKHNlbGYsIGZpZWxkcyk6CisgICAgICAgICIiIgorICAgICAgICBmaWVsZHMgc2hvdWxkIGJlIGFuIGl0ZXJhYmxlIG9mIGZpZWxkIG5hbWVzLgorICAgICAgICByZXR1cm5zIGEgdHVwbGUgb2YgKG1vZHVsZSwgY2xhc3MpLgorICAgICAgICB0aGUgbW9kdWxlIG9iamVjdCBjb3VsZCBhY3R1YWxseSBiZSBzZWxmIChhIGNsaW5pYyBvYmplY3QpLgorICAgICAgICB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgZXZlciB1c2VkIHRvIGZpbmQgdGhlIHBhcmVudCBvZiB3aGVyZQorICAgICAgICBhIG5ldyBjbGFzcy9tb2R1bGUgc2hvdWxkIGdvLgorICAgICAgICAiIiIKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IHNlbGYKKyAgICAgICAgY2xzID0gTm9uZQorICAgICAgICBzb19mYXIgPSBbXQorCisgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICBzb19mYXIuYXBwZW5kKGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGluX2NsYXNzZXM6CisgICAgICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQubW9kdWxlcy5nZXQoZmllbGQpCisgICAgICAgICAgICAgICAgaWYgY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vZHVsZSA9IGNoaWxkCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaW5fY2xhc3NlcyA9IFRydWUKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHBhcmVudCwgJ2NsYXNzZXMnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLCBjbHMKKyAgICAgICAgICAgIGNoaWxkID0gcGFyZW50LmNsYXNzZXMuZ2V0KGZpZWxkKQorICAgICAgICAgICAgaWYgbm90IGNoaWxkOgorICAgICAgICAgICAgICAgIGZhaWwoJ1BhcmVudCBjbGFzcyBvciBtb2R1bGUgJyArICcuJy5qb2luKHNvX2ZhcikgKyAiIGRvZXMgbm90IGV4aXN0LiIpCisgICAgICAgICAgICBjbHMgPSBwYXJlbnQgPSBjaGlsZAorCisgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworCisKK2RlZiBwYXJzZV9maWxlKGZpbGVuYW1lLCAqLCB2ZXJpZnk9VHJ1ZSwgb3V0cHV0PU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgorICAgIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdWzE6XQorICAgIGlmIG5vdCBleHRlbnNpb246CisgICAgICAgIGZhaWwoIkNhbid0IGV4dHJhY3QgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHRyeToKKyAgICAgICAgbGFuZ3VhZ2UgPSBleHRlbnNpb25zW2V4dGVuc2lvbl0oKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZmFpbCgiQ2FuJ3QgaWRlbnRpZnkgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIGNsaW5pYyA9IENsaW5pYyhsYW5ndWFnZSwgdmVyaWZ5PXZlcmlmeSwgZmlsZW5hbWU9ZmlsZW5hbWUpCisKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyJywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgIHJhdyA9IGYucmVhZCgpCisKKyAgICBjb29rZWQgPSBjbGluaWMucGFyc2UocmF3KQorICAgIGlmIGNvb2tlZCA9PSByYXc6CisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKSBvciAnLicKKworICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0iY2xpbmljIiwgZGlyPWRpcmVjdG9yeSkgYXMgdG1wZGlyOgorICAgICAgICBieXRlcyA9IGNvb2tlZC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIHRtcGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMpCisgICAgICAgIG9zLnJlcGxhY2UodG1wZmlsZW5hbWUsIG91dHB1dCBvciBmaWxlbmFtZSkKKworCitkZWYgY29tcHV0ZV9jaGVja3N1bShpbnB1dCk6CisgICAgaW5wdXQgPSBpbnB1dCBvciAnJworICAgIHJldHVybiBoYXNobGliLnNoYTEoaW5wdXQuZW5jb2RlKCd1dGYtOCcpKS5oZXhkaWdlc3QoKQorCisKKworCitjbGFzcyBQeXRob25QYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggT3ZlcnJpZGVTdGRpb1dpdGgocyk6CisgICAgICAgICAgICBleGVjKGJsb2NrLmlucHV0KQorICAgICAgICBibG9jay5vdXRwdXQgPSBzLmdldHZhbHVlKCkKKworCitjbGFzcyBNb2R1bGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IHNlbGYucGFyZW50ID0gbW9kdWxlCisKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Y2xpbmljLk1vZHVsZSAiICsgcmVwcihzZWxmLm5hbWUpICsgIiBhdCAiICsgc3RyKGlkKHNlbGYpKSArICI+IgorCitjbGFzcyBDbGFzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbW9kdWxlPU5vbmUsIGNscz1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLnBhcmVudCA9IGNscyBvciBtb2R1bGUKKworICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Y2xpbmljLkNsYXNzICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKKworREFUQSwgQ0FMTEFCTEUsIE1FVEhPRCwgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9EID0gcmFuZ2UoNSkKKworY2xhc3MgRnVuY3Rpb246CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgZm9yIGluc3BlY3QuRnVuY3Rpb24uCisKKyAgICBkb2NzdHJpbmcgLSBhIHN0ciBjb250YWluaW5nCisgICAgICAgICogZW1iZWRkZWQgbGluZSBicmVha3MKKyAgICAgICAgKiB0ZXh0IG91dGRlbnRlZCB0byB0aGUgbGVmdCBtYXJnaW4KKyAgICAgICAgKiBubyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBJdCB3aWxsIGFsd2F5cyBiZSB0cnVlIHRoYXQKKyAgICAgICAgICAgIChub3QgZG9jc3RyaW5nKSBvciAoKG5vdCBkb2NzdHJpbmdbMF0uaXNzcGFjZSgpKSBhbmQgKGRvY3N0cmluZy5yc3RyaXAoKSA9PSBkb2NzdHJpbmcpKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlcnM9Tm9uZSwgKiwgbmFtZSwKKyAgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHM9Tm9uZSwgY19iYXNlbmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBmdWxsX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciwgcmV0dXJuX2Fubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwga2luZD1DQUxMQUJMRSwgY29leGlzdD1GYWxzZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVycyA9IHBhcmFtZXRlcnMgb3IgY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLnJldHVybl9hbm5vdGF0aW9uID0gcmV0dXJuX2Fubm90YXRpb24KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmZ1bGxfbmFtZSA9IGZ1bGxfbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLnBhcmVudCA9IGNscyBvciBtb2R1bGUKKyAgICAgICAgc2VsZi5jX2Jhc2VuYW1lID0gY19iYXNlbmFtZQorICAgICAgICBzZWxmLnJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYua2luZCA9IGtpbmQKKyAgICAgICAgc2VsZi5jb2V4aXN0ID0gY29leGlzdAorICAgICAgICBzZWxmLnNlbGZfY29udmVydGVyID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1ldGhvZGRlZl9mbGFncyhzZWxmKToKKyAgICAgICAgZmxhZ3MgPSBbXQorICAgICAgICBpZiBzZWxmLmtpbmQgPT0gQ0xBU1NfTUVUSE9EOgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX0NMQVNTJykKKyAgICAgICAgZWxpZiBzZWxmLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9TVEFUSUMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IHNlbGYua2luZCA9PSBDQUxMQUJMRSwgInVua25vd24ga2luZDogIiArIHJlcHIoc2VsZi5raW5kKQorICAgICAgICBpZiBzZWxmLmNvZXhpc3Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfQ09FWElTVCcpCisgICAgICAgIHJldHVybiAnfCcuam9pbihmbGFncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8Y2xpbmljLkZ1bmN0aW9uICcgKyBzZWxmLm5hbWUgKyAnPicKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgb2YgaW5zcGVjdC5QYXJhbWV0ZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwga2luZCwgKiwgZGVmYXVsdD1fZW1wdHksCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBjb252ZXJ0ZXIsIGFubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwgZ3JvdXA9MCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBzZWxmLmFubm90YXRpb24gPSBhbm5vdGF0aW9uCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYuZ3JvdXAgPSBncm91cAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxjbGluaWMuUGFyYW1ldGVyICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBpc19rZXl3b3JkX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisKK3B5X3NwZWNpYWxfdmFsdWVzID0geworICAgIE5VTEw6ICJOb25lIiwKK30KKworZGVmIHB5X3JlcHIobyk6CisgICAgc3BlY2lhbCA9IHB5X3NwZWNpYWxfdmFsdWVzLmdldChvKQorICAgIGlmIHNwZWNpYWw6CisgICAgICAgIHJldHVybiBzcGVjaWFsCisgICAgcmV0dXJuIHJlcHIobykKKworCitjX3NwZWNpYWxfdmFsdWVzID0geworICAgIE5VTEw6ICJOVUxMIiwKKyAgICBOb25lOiAiUHlfTm9uZSIsCit9CisKK2RlZiBjX3JlcHIobyk6CisgICAgc3BlY2lhbCA9IGNfc3BlY2lhbF92YWx1ZXMuZ2V0KG8pCisgICAgaWYgc3BlY2lhbDoKKyAgICAgICAgcmV0dXJuIHNwZWNpYWwKKyAgICBpZiBpc2luc3RhbmNlKG8sIHN0cik6CisgICAgICAgIHJldHVybiAnIicgKyBxdW90ZWRfZm9yX2Nfc3RyaW5nKG8pICsgJyInCisgICAgcmV0dXJuIHJlcHIobykKKworZGVmIGFkZF9jX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19jb252ZXJ0ZXInKV0KKyAgICBjb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKK2RlZiBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKToKKyAgICAjIGF1dG9tYXRpY2FsbHkgYWRkIGNvbnZlcnRlciBmb3IgZGVmYXVsdCBmb3JtYXQgdW5pdAorICAgICMgKGJ1dCB3aXRob3V0IHN0b21waW5nIG9uIHRoZSBleGlzdGluZyBvbmUgaWYgaXQncyBhbHJlYWR5CisgICAgIyBzZXQsIGluIGNhc2UgeW91IHN1YmNsYXNzKQorICAgIGlmICgoY2xzLmZvcm1hdF91bml0ICE9ICdPJicpIGFuZAorICAgICAgICAoY2xzLmZvcm1hdF91bml0IG5vdCBpbiBsZWdhY3lfY29udmVydGVycykpOgorICAgICAgICBsZWdhY3lfY29udmVydGVyc1tjbHMuZm9ybWF0X3VuaXRdID0gY2xzCisgICAgcmV0dXJuIGNscworCitkZWYgYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcihmb3JtYXRfdW5pdCwgKiprd2FyZ3MpOgorICAgICIiIgorICAgIEFkZHMgYSBsZWdhY3kgY29udmVydGVyLgorICAgICIiIgorICAgIGRlZiBjbG9zdXJlKGYpOgorICAgICAgICBpZiBub3Qga3dhcmdzOgorICAgICAgICAgICAgYWRkZWRfZiA9IGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZGVkX2YgPSBmdW5jdG9vbHMucGFydGlhbChmLCAqKmt3YXJncykKKyAgICAgICAgbGVnYWN5X2NvbnZlcnRlcnNbZm9ybWF0X3VuaXRdID0gYWRkZWRfZgorICAgICAgICByZXR1cm4gZgorICAgIHJldHVybiBjbG9zdXJlCisKK2NsYXNzIENDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIodHlwZSk6CisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGNsYXNzZGljdCk6CisgICAgICAgIGFkZF9jX2NvbnZlcnRlcihjbHMpCisgICAgICAgIGFkZF9kZWZhdWx0X2xlZ2FjeV9jX2NvbnZlcnRlcihjbHMpCisKK2NsYXNzIENDb252ZXJ0ZXIobWV0YWNsYXNzPUNDb252ZXJ0ZXJBdXRvUmVnaXN0ZXIpOgorICAgICIiIgorICAgIEZvciB0aGUgaW5pdCBmdW5jdGlvbiwgc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGFuZCBkZWZhdWx0CisgICAgbXVzdCBiZSBrZXl3b3JkLW9yLXBvc2l0aW9uYWwgcGFyYW1ldGVycy4gIEFsbCBvdGhlcgorICAgIHBhcmFtZXRlcnMgKGluY2x1ZGluZyAicmVxdWlyZWQiIGFuZCAiZG9jX2RlZmF1bHQiKQorICAgIG11c3QgYmUga2V5d29yZC1vbmx5LgorICAgICIiIgorCisgICAgdHlwZSA9IE5vbmUKKyAgICBmb3JtYXRfdW5pdCA9ICdPJicKKworICAgICMgVGhlIFB5dGhvbiBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciwgYXMgYSBQeXRob24gdmFsdWUuCisgICAgIyBPciAidW5zcGVjaWZpZWQiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgZGVmYXVsdCA9IHVuc3BlY2lmaWVkCisKKyAgICAjICJkZWZhdWx0IiBhcyBpdCBzaG91bGQgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBkb2NfZGVmYXVsdCA9IE5vbmUKKworICAgICMgImRlZmF1bHQiIGNvbnZlcnRlZCBpbnRvIGEgc3RyIGZvciByZW5kZXJpbmcgaW50byBQeXRob24gY29kZS4KKyAgICBweV9kZWZhdWx0ID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBDIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBjX2RlZmF1bHQgPSBOb25lCisKKyAgICAjIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgQyB2YXJpYWJsZSB3aGVuCisgICAgIyB0aGVyZSBpcyBubyBkZWZhdWx0LCBidXQgbm90IHNwZWNpZnlpbmcgYSBkZWZhdWx0IG1heQorICAgICMgcmVzdWx0IGluIGFuICJ1bmluaXRpYWxpemVkIHZhcmlhYmxlIiB3YXJuaW5nLiAgVGhpcyBjYW4KKyAgICAjIGVhc2lseSBoYXBwZW4gd2hlbiB1c2luZyBvcHRpb24gZ3JvdXBzLS1hbHRob3VnaAorICAgICMgcHJvcGVybHktd3JpdHRlbiBjb2RlIHdvbid0IGFjdHVhbGx5IHVzZSB0aGUgdmFyaWFibGUsCisgICAgIyB0aGUgdmFyaWFibGUgZG9lcyBnZXQgcGFzc2VkIGluIHRvIHRoZSBfaW1wbC4gIChBaCwgaWYKKyAgICAjIG9ubHkgZGF0YWZsb3cgYW5hbHlzaXMgY291bGQgaW5saW5lIHRoZSBzdGF0aWMgZnVuY3Rpb24hKQorICAgICMKKyAgICAjIFRoaXMgdmFsdWUgaXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLgorICAgICMgRXZlcnkgbm9uLWFic3RyYWN0IHN1YmNsYXNzIHNob3VsZCBzdXBwbHkgYSB2YWxpZCB2YWx1ZS4KKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICdOVUxMJworCisgICAgIyBUaGUgQyBjb252ZXJ0ZXIgKmZ1bmN0aW9uKiB0byBiZSB1c2VkLCBpZiBhbnkuCisgICAgIyAoSWYgdGhpcyBpcyBub3QgTm9uZSwgZm9ybWF0X3VuaXQgbXVzdCBiZSAnTyYnLikKKyAgICBjb252ZXJ0ZXIgPSBOb25lCisKKyAgICBlbmNvZGluZyA9IE5vbmUKKyAgICBpbXBsX2J5X3JlZmVyZW5jZSA9IEZhbHNlCisgICAgcGFyc2VfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIGxlbmd0aCA9IEZhbHNlCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZnVuY3Rpb24sIGRlZmF1bHQ9dW5zcGVjaWZpZWQsICosIGRvY19kZWZhdWx0PU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBhbm5vdGF0aW9uPXVuc3BlY2lmaWVkLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9yZXByKGRlZmF1bHQpCisgICAgICAgICAgICBzZWxmLmRvY19kZWZhdWx0ID0gZG9jX2RlZmF1bHQgaWYgZG9jX2RlZmF1bHQgaXMgbm90IE5vbmUgZWxzZSBzZWxmLnB5X2RlZmF1bHQKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gY19yZXByKGRlZmF1bHQpCisgICAgICAgIGVsaWYgZG9jX2RlZmF1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmYWlsKGZ1bmN0aW9uLmZ1bGxuYW1lICsgIiBhcmd1bWVudCAiICsgbmFtZSArICIgc3BlY2lmaWVkIGEgJ2RvY19kZWZhdWx0JyB3aXRob3V0IGhhdmluZyBhICdkZWZhdWx0JyIpCisgICAgICAgIGlmIGFubm90YXRpb24gIT0gdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBmYWlsKCJUaGUgJ2Fubm90YXRpb24nIHBhcmFtZXRlciBpcyBub3QgY3VycmVudGx5IHBlcm1pdHRlZC4iKQorICAgICAgICBzZWxmLnJlcXVpcmVkID0gcmVxdWlyZWQKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGlzX29wdGlvbmFsKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQpIGFuZCAobm90IHNlbGYucmVxdWlyZWQpCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnBhcmFtZXRlciA9IHBhcmFtZXRlcgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisKKyAgICAgICAgIyBkZWNsYXJhdGlvbnMKKyAgICAgICAgZCA9IHNlbGYuZGVjbGFyYXRpb24oKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoZCkKKworICAgICAgICAjIGluaXRpYWxpemVycworICAgICAgICBpbml0aWFsaXplcnMgPSBzZWxmLmluaXRpYWxpemUoKQorICAgICAgICBpZiBpbml0aWFsaXplcnM6CisgICAgICAgICAgICBkYXRhLmluaXRpYWxpemVycy5hcHBlbmQoJy8qIGluaXRpYWxpemVycyBmb3IgJyArIG5hbWUgKyAnICovXG4nICsgaW5pdGlhbGl6ZXJzLnJzdHJpcCgpKQorCisgICAgICAgICMgaW1wbF9hcmd1bWVudHMKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5pbXBsX2J5X3JlZmVyZW5jZSBlbHNlICIiKSArIG5hbWUKKyAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQocykKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChzZWxmLmxlbmd0aF9uYW1lKCkpCisKKyAgICAgICAgIyBrZXl3b3JkcworICAgICAgICBkYXRhLmtleXdvcmRzLmFwcGVuZChuYW1lKQorCisgICAgICAgICMgZm9ybWF0X3VuaXRzCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW9uYWwoKSBhbmQgJ3wnIG5vdCBpbiBkYXRhLmZvcm1hdF91bml0czoKKyAgICAgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZCgnfCcpCisgICAgICAgIGlmIHBhcmFtZXRlci5pc19rZXl3b3JkX29ubHkoKSBhbmQgJyQnIG5vdCBpbiBkYXRhLmZvcm1hdF91bml0czoKKyAgICAgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZCgnJCcpCisgICAgICAgIGRhdGEuZm9ybWF0X3VuaXRzLmFwcGVuZChzZWxmLmZvcm1hdF91bml0KQorCisgICAgICAgICMgcGFyc2VfYXJndW1lbnRzCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnQoZGF0YS5wYXJzZV9hcmd1bWVudHMpCisKKyAgICAgICAgIyBpbXBsX3BhcmFtZXRlcnMKKyAgICAgICAgZGF0YS5pbXBsX3BhcmFtZXRlcnMuYXBwZW5kKHNlbGYuc2ltcGxlX2RlY2xhcmF0aW9uKGJ5X3JlZmVyZW5jZT1zZWxmLmltcGxfYnlfcmVmZXJlbmNlKSkKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoIlB5X3NzaXplX2NsZWFuX3QgIiArIHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICAgICAjIGNsZWFudXAKKyAgICAgICAgY2xlYW51cCA9IHNlbGYuY2xlYW51cCgpCisgICAgICAgIGlmIGNsZWFudXA6CisgICAgICAgICAgICBkYXRhLmNsZWFudXAuYXBwZW5kKCcvKiBDbGVhbnVwIGZvciAnICsgbmFtZSArICcgKi9cbicgKyBjbGVhbnVwLnJzdHJpcCgpICsgIlxuIikKKworICAgIGRlZiBsZW5ndGhfbmFtZShzZWxmKToKKyAgICAgICAgIiIiQ29tcHV0ZXMgdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgImxlbmd0aCIgdmFyaWFibGUuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkgKyAiX2xlbmd0aCIKKworICAgICMgV2h5IGlzIHRoaXMgb25lIGJyb2tlbiBvdXQgc2VwYXJhdGVseT8KKyAgICAjIEZvciAicG9zaXRpb25hbC1vbmx5IiBmdW5jdGlvbiBwYXJzaW5nLAorICAgICMgd2hpY2ggZ2VuZXJhdGVzIGEgYnVuY2ggb2YgUHlBcmdfUGFyc2VUdXBsZSBjYWxscy4KKyAgICBkZWYgcGFyc2VfYXJndW1lbnQoc2VsZiwgbGlzdCk6CisgICAgICAgIGFzc2VydCBub3QgKHNlbGYuY29udmVydGVyIGFuZCBzZWxmLmVuY29kaW5nKQorICAgICAgICBpZiBzZWxmLmZvcm1hdF91bml0ID09ICdPJic6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5jb252ZXJ0ZXIKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHNlbGYuY29udmVydGVyKQorCisgICAgICAgIGlmIHNlbGYuZW5jb2Rpbmc6CisgICAgICAgICAgICBsaXN0LmFwcGVuZChzZWxmLmVuY29kaW5nKQorCisgICAgICAgIGxlZ2FsX25hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcyA9ICgiJiIgaWYgc2VsZi5wYXJzZV9ieV9yZWZlcmVuY2UgZWxzZSAiIikgKyBsZWdhbF9uYW1lCisgICAgICAgIGxpc3QuYXBwZW5kKHMpCisKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBsaXN0LmFwcGVuZCgiJiIgKyBzZWxmLmxlbmd0aF9uYW1lKCkpCisKKyAgICAjCisgICAgIyBBbGwgdGhlIGZ1bmN0aW9ucyBhZnRlciBoZXJlIGFyZSBpbnRlbmRlZCBhcyBleHRlbnNpb24gcG9pbnRzLgorICAgICMKKworICAgIGRlZiBzaW1wbGVfZGVjbGFyYXRpb24oc2VsZiwgYnlfcmVmZXJlbmNlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGVzIHRoZSBiYXNpYyBkZWNsYXJhdGlvbiBvZiB0aGUgdmFyaWFibGUuCisgICAgICAgIFVzZWQgaW4gY29tcHV0aW5nIHRoZSBwcm90b3R5cGUgZGVjbGFyYXRpb24gYW5kIHRoZQorICAgICAgICB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHByb3RvdHlwZSA9IFtzZWxmLnR5cGVdCisgICAgICAgIGlmIGJ5X3JlZmVyZW5jZSBvciBub3Qgc2VsZi50eXBlLmVuZHN3aXRoKCcqJyk6CisgICAgICAgICAgICBwcm90b3R5cGUuYXBwZW5kKCIgIikKKyAgICAgICAgaWYgYnlfcmVmZXJlbmNlOgorICAgICAgICAgICAgcHJvdG90eXBlLmFwcGVuZCgnKicpCisgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpKQorICAgICAgICByZXR1cm4gIiIuam9pbihwcm90b3R5cGUpCisKKyAgICBkZWYgZGVjbGFyYXRpb24oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnQgdG8gZGVjbGFyZSB0aGlzIHZhcmlhYmxlLgorICAgICAgICAiIiIKKyAgICAgICAgZGVjbGFyYXRpb24gPSBbc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oKV0KKyAgICAgICAgZGVmYXVsdCA9IHNlbGYuY19kZWZhdWx0CisgICAgICAgIGlmIG5vdCBkZWZhdWx0IGFuZCBzZWxmLnBhcmFtZXRlci5ncm91cDoKKyAgICAgICAgICAgIGRlZmF1bHQgPSBzZWxmLmNfaWdub3JlZF9kZWZhdWx0CisgICAgICAgIGlmIGRlZmF1bHQ6CisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoIiA9ICIpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoZGVmYXVsdCkKKyAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCI7IikKKyAgICAgICAgaWYgc2VsZi5sZW5ndGg6CisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJ1xuUHlfc3NpemVfY2xlYW5fdCAnKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgnOycpCisgICAgICAgIHJldHVybiAiIi5qb2luKGRlY2xhcmF0aW9uKQorCisgICAgZGVmIGluaXRpYWxpemUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIHNldCB1cCB0aGlzIHZhcmlhYmxlIGJlZm9yZSBwYXJzaW5nLgorICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhpcyBjb2RlIGluZGVudGVkIGF0IGNvbHVtbiAwLgorICAgICAgICBJZiBubyBpbml0aWFsaXphdGlvbiBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gY2xlYW51cCBpcyBuZWNlc3NhcnksIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuICIiCisKKworY2xhc3MgYm9vbF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZm9ybWF0X3VuaXQgPSAncCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICcwJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYpOgorICAgICAgICBzZWxmLmRlZmF1bHQgPSBib29sKHNlbGYuZGVmYXVsdCkKKyAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzdHIoaW50KHNlbGYuZGVmYXVsdCkpCisKK2NsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY2hhcicKKyAgICBmb3JtYXRfdW5pdCA9ICdjJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCdCJywgYml0d2lzZT1UcnVlKQorY2xhc3MgYnl0ZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdieXRlJworICAgIGZvcm1hdF91bml0ID0gJ2InCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiJ1wwJyIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgYml0d2lzZToKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnQicKKworY2xhc3Mgc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2hvcnQnCisgICAgZm9ybWF0X3VuaXQgPSAnaCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9zaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBzaG9ydCcKKyAgICBmb3JtYXRfdW5pdCA9ICdIJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBiaXR3aXNlOgorICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgc2hvcnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0MnLCB0eXBlcz0nc3RyJykKK2NsYXNzIGludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZm9ybWF0X3VuaXQgPSAnaScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdpbnQnKToKKyAgICAgICAgaWYgdHlwZXMgPT0gJ3N0cic6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0MnCisgICAgICAgIGVsaWYgdHlwZXMgIT0gJ2ludCc6CisgICAgICAgICAgICBmYWlsKCJpbnRfY29udmVydGVyOiBpbGxlZ2FsICd0eXBlcycgYXJndW1lbnQiKQorCitjbGFzcyB1bnNpZ25lZF9pbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgaW50JworICAgIGZvcm1hdF91bml0ID0gJ0knCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBpbnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGZvcm1hdF91bml0ID0gJ2wnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworY2xhc3MgdW5zaWduZWRfbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGZvcm1hdF91bml0ID0gJ2snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBsb25ncyBtdXN0IGJlIGJpdHdpc2UgKGZvciBub3cpLiIpCisKK2NsYXNzIFBZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQWV9MT05HX0xPTkcnCisgICAgZm9ybWF0X3VuaXQgPSAnTCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9QWV9MT05HX0xPTkdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgUFlfTE9OR19MT05HJworICAgIGZvcm1hdF91bml0ID0gJ0snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBQWV9MT05HX0xPTkdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUHlfc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGZvcm1hdF91bml0ID0gJ24nCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworCitjbGFzcyBmbG9hdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdmbG9hdCcKKyAgICBmb3JtYXRfdW5pdCA9ICdmJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAuMCIKKworY2xhc3MgZG91YmxlX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2RvdWJsZScKKyAgICBmb3JtYXRfdW5pdCA9ICdkJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAuMCIKKworCitjbGFzcyBQeV9jb21wbGV4X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X2NvbXBsZXgnCisgICAgZm9ybWF0X3VuaXQgPSAnRCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICJ7MC4wLCAwLjB9IgorCisKK2NsYXNzIG9iamVjdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ08nCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZT1Ob25lKToKKyAgICAgICAgaWYgdHlwZToKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHR5cGUsIHN0cikKKyAgICAgICAgICAgIGFzc2VydCB0eXBlLmlzaWRlbnRpZmllcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHlwZSA9IGV2YWwodHlwZSkKKyAgICAgICAgICAgICAgICAjIG5lZWQgbW9yZSBvZiB0aGVzZSEKKyAgICAgICAgICAgICAgICB0eXBlID0geworICAgICAgICAgICAgICAgICAgICBzdHI6ICcmUHlVbmljb2RlX1R5cGUnLAorICAgICAgICAgICAgICAgICAgICB9W3R5cGVdCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlCisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ08hJworICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IHR5cGUKKworCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigncyMnLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd5JywgdHlwZT0iYnl0ZXMiKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3kjJywgdHlwZT0iYnl0ZXMiLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6JywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6IycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorY2xhc3Mgc3RyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NvbnN0IGNoYXIgKicKKyAgICBmb3JtYXRfdW5pdCA9ICdzJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGVuY29kaW5nPU5vbmUsIHR5cGVzPSJzdHIiLAorICAgICAgICBsZW5ndGg9RmFsc2UsIG51bGxhYmxlPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorCisgICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoImJ5dGVzIiwpKQorICAgICAgICBzdHJfdHlwZSA9IHNldCgoInN0ciIsKSkKKyAgICAgICAgYWxsXzNfdHlwZSA9IHNldCgoImJ5dGVhcnJheSIsKSkgfCBieXRlc190eXBlIHwgc3RyX3R5cGUKKyAgICAgICAgaXNfYnl0ZXMgPSB0eXBlcyA9PSBieXRlc190eXBlCisgICAgICAgIGlzX3N0ciA9IHR5cGVzID09IHN0cl90eXBlCisgICAgICAgIGlzX2FsbF8zID0gdHlwZXMgPT0gYWxsXzNfdHlwZQorCisgICAgICAgIHNlbGYubGVuZ3RoID0gYm9vbChsZW5ndGgpCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorCisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICAgICAgICAgIGlmIGlzX3N0ciBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIG5vdCAobGVuZ3RoIG9yIHplcm9lcyBvciBudWxsYWJsZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAnZXQnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCB6ZXJvZXMgYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcyMnCisgICAgICAgICAgICBlbGlmIGlzX2FsbF8zIGFuZCBsZW5ndGggYW5kIG5vdCAobnVsbGFibGUgb3IgemVyb2VzKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCMnCisKKyAgICAgICAgICAgIGlmIGZvcm1hdF91bml0LmVuZHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IGNvZGUgdXNpbmcgZm9ybWF0IHVuaXQgIiwgcmVwcihmb3JtYXRfdW5pdCksICJwcm9iYWJseSBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIikKKyAgICAgICAgICAgICAgICAjIFRPRE8gc2V0IHBvaW50ZXIgdG8gTlVMTAorICAgICAgICAgICAgICAgICMgVE9ETyBhZGQgY2xlYW51cCBmb3IgYnVmZmVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB6ZXJvZXM6CisgICAgICAgICAgICAgICAgZmFpbCgic3RyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKHplcm9lcyBpcyBvbmx5IGxlZ2FsIHdpdGggYW4gZW5jb2RpbmcpIikKKworICAgICAgICAgICAgaWYgaXNfYnl0ZXMgYW5kIG5vdCAobnVsbGFibGUgb3IgbGVuZ3RoKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5JworICAgICAgICAgICAgZWxpZiBpc19ieXRlcyBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgIGFuZCBub3QgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3onCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgYW5kIGxlbmd0aDoKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd6IycKKworICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6CisgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisKK2NsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1MnCisKK2NsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnWScKKworY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1UnCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd1IycsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBQeV9VTklDT0RFX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X1VOSUNPREUgKicKKyAgICBmb3JtYXRfdW5pdCA9ICd1JworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIG51bGxhYmxlPUZhbHNlLCBsZW5ndGg9RmFsc2UpOgorICAgICAgICBmb3JtYXRfdW5pdCA9ICdaJyBpZiBudWxsYWJsZSBlbHNlICd1JworICAgICAgICBpZiBsZW5ndGg6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCArPSAnIycKKyAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gVHJ1ZQorICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworIworIyBXZSBkZWZpbmUgdGhyZWUgc3RyaW5nIGNvbnZlbnRpb25zIGZvciBidWZmZXIgdHlwZXMgaW4gdGhlICd0eXBlcycgYXJndW1lbnQ6CisjICAnYnVmZmVyJyA6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZQorIyAgJ3J3YnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKKyMgICdyb2J1ZmZlcic6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZSwgYnV0IG11c3Qgbm90IGJlIHdyaXRlYWJsZQorIworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6KicsIHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndyonLCB0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJykKK2NsYXNzIFB5X2J1ZmZlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9idWZmZXInCisgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAie05VTEwsIE5VTEwsIDAsIDAsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEx9IgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICB0eXBlcyA9IHNldCh0eXBlcy5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIGJ5dGVzX3R5cGUgPSBzZXQoKCdieXRlcycsKSkKKyAgICAgICAgYnl0ZWFycmF5X3R5cGUgPSBzZXQoKCdieXRlYXJyYXknLCkpCisgICAgICAgIGJ1ZmZlcl90eXBlID0gc2V0KCgnYnVmZmVyJywpKQorICAgICAgICByd2J1ZmZlcl90eXBlID0gc2V0KCgncndidWZmZXInLCkpCisgICAgICAgIHJvYnVmZmVyX3R5cGUgPSBzZXQoKCdyb2J1ZmZlcicsKSkKKyAgICAgICAgc3RyX3R5cGUgPSBzZXQoKCdzdHInLCkpCisgICAgICAgIGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSA9IGJ5dGVzX3R5cGUgfCBieXRlYXJyYXlfdHlwZSB8IGJ1ZmZlcl90eXBlCisKKyAgICAgICAgZm9ybWF0X3VuaXQgPSBOb25lCisgICAgICAgIGlmIHR5cGVzID09IChzdHJfdHlwZSB8IGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSk6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdzKicgaWYgbm90IG51bGxhYmxlIGVsc2UgJ3oqJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZmFpbCgnUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKG51bGxhYmxlPVRydWUpJykKKyAgICAgICAgICAgIGVsaWYgdHlwZXMgPT0gKGJ5dGVzX2J5dGVhcnJheV9idWZmZXJfdHlwZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlYXJyYXlfdHlwZSB8IHJ3dWZmZXJfdHlwZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAndyonCisgICAgICAgIGlmIG5vdCBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGZhaWwoIlB5X2J1ZmZlcl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIikKKworICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiAiIi5qb2luKFsiaWYgKCIsIG5hbWUsICIuYnVmKVxuICAgUHlCdWZmZXJfUmVsZWFzZSgmIiwgbmFtZSwgIik7XG4iXSkKKworCitjbGFzcyBzZWxmX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICAiIiIKKyAgICBBIHNwZWNpYWwtY2FzZSBjb252ZXJ0ZXI6CisgICAgdGhpcyBpcyB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgdXNlZCBmb3IgInNlbGYiLgorICAgICIiIgorICAgIHR5cGUgPSAiUHlPYmplY3QgKiIKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZ1bmN0aW9uCisgICAgICAgIGlmIGYua2luZCA9PSBDQUxMQUJMRToKKyAgICAgICAgICAgIGlmIGYuY2xzOgorICAgICAgICAgICAgICAgIHNlbGYubmFtZSA9ICJzZWxmIgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSAibW9kdWxlIgorICAgICAgICAgICAgICAgIHNlbGYudHlwZSA9ICJQeU1vZHVsZURlZiAqIgorICAgICAgICBlbGlmIGYua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gIm51bGwiCisgICAgICAgICAgICBzZWxmLnR5cGUgPSAidm9pZCAqIgorICAgICAgICBlbGlmIGYua2luZCA9PSBDTEFTU19NRVRIT0Q6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSAiY2xzIgorICAgICAgICAgICAgc2VsZi50eXBlID0gIlB5VHlwZU9iamVjdCAqIgorCisgICAgZGVmIHJlbmRlcihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICBmYWlsKCJyZW5kZXIoKSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIHNlbGZfY29udmVydGVyIGluc3RhbmNlcyIpCisKKworCitkZWYgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihmLCBuYW1lPU5vbmUpOgorICAgIGlmIG5vdCBuYW1lOgorICAgICAgICBuYW1lID0gZi5fX25hbWVfXworICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnX3JldHVybl9jb252ZXJ0ZXInKToKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIG5hbWUgPSBuYW1lWzotbGVuKCdfcmV0dXJuX2NvbnZlcnRlcicpXQorICAgIHJldHVybl9jb252ZXJ0ZXJzW25hbWVdID0gZgorICAgIHJldHVybiBmCisKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcih0eXBlKToKKyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihjbHMpCisKK2NsYXNzIENSZXR1cm5Db252ZXJ0ZXIobWV0YWNsYXNzPUNSZXR1cm5Db252ZXJ0ZXJBdXRvUmVnaXN0ZXIpOgorCisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGRlZmF1bHQgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgZG9jX2RlZmF1bHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmRvY19kZWZhdWx0ID0gZG9jX2RlZmF1bHQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXR1cm5fY29udmVydGVyX2luaXQoKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHMgPSAnLCAnLmpvaW4obmFtZSArICc9JyArIHJlcHIodmFsdWUpIGZvciBuYW1lLCB2YWx1ZSBpbiBrd2FyZ3MuaXRlbXMoKSkKKyAgICAgICAgICAgIHN5cy5leGl0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fICsgJygnICsgcyArICcpXG4nICsgc3RyKGUpKQorCisgICAgZGVmIHJldHVybl9jb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRlY2xhcmUoc2VsZiwgZGF0YSwgbmFtZT0iX3JldHVybl92YWx1ZSIpOgorICAgICAgICBsaW5lID0gW10KKyAgICAgICAgYWRkID0gbGluZS5hcHBlbmQKKyAgICAgICAgYWRkKHNlbGYudHlwZSkKKyAgICAgICAgaWYgbm90IHNlbGYudHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgYWRkKCcgJykKKyAgICAgICAgYWRkKG5hbWUgKyAnOycpCisgICAgICAgIGRhdGEuZGVjbGFyYXRpb25zLmFwcGVuZCgnJy5qb2luKGxpbmUpKQorICAgICAgICBkYXRhLnJldHVybl92YWx1ZSA9IG5hbWUKKworICAgIGRlZiBlcnJfb2NjdXJyZWRfaWYoc2VsZiwgZXhwciwgZGF0YSk6CisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCdpZiAoKHt9KSAmJiBQeUVycl9PY2N1cnJlZCgpKVxuICAgIGdvdG8gZXhpdDtcbicuZm9ybWF0KGV4cHIpKQorCisgICAgZGVmIGVycl9vY2N1cnJlZF9pZl9udWxsX3BvaW50ZXIoc2VsZiwgdmFyaWFibGUsIGRhdGEpOgorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgnaWYgKHt9ID09IE5VTEwpXG4gICAgZ290byBleGl0O1xuJy5mb3JtYXQodmFyaWFibGUpKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBmdW5jdGlvbiBpcyBhIGNsaW5pYy5GdW5jdGlvbiBpbnN0YW5jZS4KKyAgICAgICAgZGF0YSBpcyBhIENSZW5kZXJEYXRhIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCithZGRfY19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIsICdvYmplY3QnKQorCitjbGFzcyBpbnRfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICdyZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIGxvbmdfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2xvbmcnCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmKCJfcmV0dXJuX3ZhbHVlID09IC0xIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Mb25nKF9yZXR1cm5fdmFsdWUpO1xuJykKKworCitjbGFzcyBQeV9zc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTtcbicpCisKKworY2xhc3MgRGVjb2RlRlNEZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyIConCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcigiX3JldHVybl92YWx1ZSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIEluZGVudFN0YWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmRlbnRzID0gW10KKyAgICAgICAgc2VsZi5tYXJnaW4gPSBOb25lCisKKyAgICBkZWYgX2Vuc3VyZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoJ0luZGVudFN0YWNrIGV4cGVjdGVkIGluZGVudHMsIGJ1dCBub25lIGFyZSBkZWZpbmVkLicpCisKKyAgICBkZWYgbWVhc3VyZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSdzIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBDbGluaWMgRFNMLicpCisgICAgICAgIHN0cmlwcGVkID0gbGluZS5sc3RyaXAoKQorICAgICAgICBpZiBub3QgbGVuKHN0cmlwcGVkKToKKyAgICAgICAgICAgICMgd2UgY2FuJ3QgdGVsbCBhbnl0aGluZyBmcm9tIGFuIGVtcHR5IGxpbmUKKyAgICAgICAgICAgICMgc28ganVzdCBwcmV0ZW5kIGl0J3MgaW5kZW50ZWQgbGlrZSBvdXIgY3VycmVudCBpbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2Vuc3VyZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKHN0cmlwcGVkKQorCisgICAgZGVmIGluZmVyKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5mZXIgd2hhdCBpcyBub3cgdGhlIGN1cnJlbnQgbWFyZ2luIGJhc2VkIG9uIHRoaXMgbGluZS4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDEgaWYgd2UgaGF2ZSBpbmRlbnRlZCAob3IgdGhpcyBpcyB0aGUgZmlyc3QgbWFyZ2luKQorICAgICAgICAgICAgMCBpZiB0aGUgbWFyZ2luIGhhcyBub3QgY2hhbmdlZAorICAgICAgICAgICAtTiBpZiB3ZSBoYXZlIGRlZGVudGVkIE4gdGltZXMKKyAgICAgICAgIiIiCisgICAgICAgIGluZGVudCA9IHNlbGYubWVhc3VyZShsaW5lKQorICAgICAgICBtYXJnaW4gPSAnICcgKiBpbmRlbnQKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIGlmIGluZGVudCA9PSBjdXJyZW50OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgaW5kZW50ID4gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICMgaW5kZW50IDwgY3VycmVudAorICAgICAgICBpZiBpbmRlbnQgbm90IGluIHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgb3V0ZGVudC4iKQorICAgICAgICBvdXRkZW50X2NvdW50ID0gMAorICAgICAgICB3aGlsZSBpbmRlbnQgIT0gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgICAgIG91dGRlbnRfY291bnQgLT0gMQorICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICByZXR1cm4gb3V0ZGVudF9jb3VudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlcHRoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBob3cgbWFueSBtYXJnaW5zIGFyZSBjdXJyZW50bHkgZGVmaW5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5pbmRlbnRzKQorCisgICAgZGVmIGluZGVudChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluZGVudHMgYSBsaW5lIGJ5IHRoZSBjdXJyZW50bHkgZGVmaW5lZCBtYXJnaW4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5tYXJnaW4gKyBsaW5lCisKKyAgICBkZWYgZGVkZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVkZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgKFRoZSBpbnZlcnNlIG9mICdpbmRlbnQnLikKKyAgICAgICAgIiIiCisgICAgICAgIG1hcmdpbiA9IHNlbGYubWFyZ2luCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChtYXJnaW4pOgorICAgICAgICAgICAgZmFpbCgnQ2Fubm90IGRlZGVudCwgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmV2aW91cyBtYXJnaW46JykKKyAgICAgICAgcmV0dXJuIGxpbmVbaW5kZW50Ol0KKworCitjbGFzcyBEU0xQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisKKyAgICAgICAgc2VsZi5kaXJlY3RpdmVzID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKHNlbGYpOgorICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGRpcmVjdGl2ZV8gYXJlIGFkZGVkIHRvIGRpcmVjdGl2ZXMKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJkaXJlY3RpdmVfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzW2tleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgICAgICMgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCBhdF8gYXJlIHRvbywgd2l0aCBhbiBAIGluIGZyb250CisgICAgICAgICAgICBfLCBzLCBrZXkgPSBuYW1lLnBhcnRpdGlvbigiYXRfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzWydAJyArIGtleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlX2RzbF9zdGFydAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9pbmRlbnQgPSBOb25lCisgICAgICAgIHNlbGYua2V5d29yZF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5ncm91cCA9IDAKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgIHNlbGYuaW5kZW50ID0gSW5kZW50U3RhY2soKQorICAgICAgICBzZWxmLmtpbmQgPSBDQUxMQUJMRQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBGYWxzZQorCisgICAgZGVmIGRpcmVjdGl2ZV92ZXJzaW9uKHNlbGYsIHJlcXVpcmVkKToKKyAgICAgICAgZ2xvYmFsIHZlcnNpb24KKyAgICAgICAgaWYgdmVyc2lvbl9jb21wYXJpdG9yKHZlcnNpb24sIHJlcXVpcmVkKSA8IDA6CisgICAgICAgICAgICBmYWlsKCJJbnN1ZmZpY2llbnQgQ2xpbmljIHZlcnNpb24hXG4gIFZlcnNpb246ICIgKyB2ZXJzaW9uICsgIlxuICBSZXF1aXJlZDogIiArIHJlcXVpcmVkKQorCisgICAgZGVmIGRpcmVjdGl2ZV9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBuZXcgPSBmaWVsZHMucG9wKCkKKyAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisgICAgICAgIGlmIGNsczoKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IG5lc3QgYSBtb2R1bGUgaW5zaWRlIGEgY2xhc3MhIikKKyAgICAgICAgbSA9IE1vZHVsZShuYW1lLCBtb2R1bGUpCisgICAgICAgIG1vZHVsZS5tb2R1bGVzW25hbWVdID0gbQorICAgICAgICBzZWxmLmJsb2NrLnNpZ25hdHVyZXMuYXBwZW5kKG0pCisKKyAgICBkZWYgZGlyZWN0aXZlX2NsYXNzKHNlbGYsIG5hbWUpOgorICAgICAgICBmaWVsZHMgPSBuYW1lLnNwbGl0KCcuJykKKyAgICAgICAgaW5fY2xhc3NlcyA9IEZhbHNlCisgICAgICAgIHBhcmVudCA9IHNlbGYKKyAgICAgICAgbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBzb19mYXIgPSBbXQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBjID0gQ2xhc3MobmFtZSwgbW9kdWxlLCBjbHMpCisgICAgICAgIGlmIGNsczoKKyAgICAgICAgICAgIGNscy5jbGFzc2VzW25hbWVdID0gYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlLmNsYXNzZXNbbmFtZV0gPSBjCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoYykKKworICAgIGRlZiBhdF9jbGFzc21ldGhvZChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYua2luZCBpcyBDQUxMQUJMRQorICAgICAgICBzZWxmLmtpbmQgPSBDTEFTU19NRVRIT0QKKworICAgIGRlZiBhdF9zdGF0aWNtZXRob2Qoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmtpbmQgaXMgQ0FMTEFCTEUKKyAgICAgICAgc2VsZi5raW5kID0gU1RBVElDX01FVEhPRAorCisgICAgZGVmIGF0X2NvZXhpc3Qoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLmNvZXhpc3QgPT0gRmFsc2UKKyAgICAgICAgc2VsZi5jb2V4aXN0ID0gVHJ1ZQorCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ibG9jayA9IGJsb2NrCisgICAgICAgIGJsb2NrX3N0YXJ0ID0gc2VsZi5jbGluaWMuYmxvY2tfcGFyc2VyLmxpbmVfbnVtYmVyCisgICAgICAgIGxpbmVzID0gYmxvY2suaW5wdXQuc3BsaXQoJ1xuJykKKyAgICAgICAgZm9yIGxpbmVfbnVtYmVyLCBsaW5lIGluIGVudW1lcmF0ZShsaW5lcywgc2VsZi5jbGluaWMuYmxvY2tfcGFyc2VyLmJsb2NrX3N0YXJ0X2xpbmVfbnVtYmVyKToKKyAgICAgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgICAgICBmYWlsKCdUYWIgY2hhcmFjdGVycyBhcmUgaWxsZWdhbCBpbiB0aGUgQ2xpbmljIERTTC5cblx0JyArIHJlcHIobGluZSksIGxpbmVfbnVtYmVyPWJsb2NrX3N0YXJ0KQorICAgICAgICAgICAgc2VsZi5zdGF0ZShsaW5lKQorCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX3Rlcm1pbmFsKQorICAgICAgICBzZWxmLnN0YXRlKE5vbmUpCisKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gc2VsZi5jbGluaWMubGFuZ3VhZ2UucmVuZGVyKGJsb2NrLnNpZ25hdHVyZXMpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAjIGlnbm9yZSBjb21tZW50LW9ubHkgbGluZXMKKyAgICAgICAgaWYgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgSWdub3JlIGVtcHR5IGxpbmVzIHRvbworICAgICAgICAjIChidXQgbm90IGluIGRvY3N0cmluZyBzZWN0aW9ucyEpCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYWxjdWxhdGVfaW5kZW50KGxpbmUpOgorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKGxpbmUuc3RyaXAoKSkKKworICAgIGRlZiBuZXh0KHNlbGYsIHN0YXRlLCBsaW5lPU5vbmUpOgorICAgICAgICAjIHJlYWxfcHJpbnQoc2VsZi5zdGF0ZS5fX25hbWVfXywgIi0+Iiwgc3RhdGUuX19uYW1lX18sICIsIGxpbmU9IiwgbGluZSkKKyAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCisgICAgICAgIGlmIGxpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICBkZWYgc3RhdGVfZHNsX3N0YXJ0KHNlbGYsIGxpbmUpOgorICAgICAgICAjIHNlbGYuYmxvY2sgPSBzZWxmLkNsaW5pY091dHB1dEJsb2NrKHNlbGYpCisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfbW9kdWxlbmFtZV9uYW1lLCBsaW5lKQorCisgICAgZGVmIHN0YXRlX21vZHVsZW5hbWVfbmFtZShzZWxmLCBsaW5lKToKKyAgICAgICAgIyBsb29raW5nIGZvciBkZWNsYXJhdGlvbiwgd2hpY2ggZXN0YWJsaXNoZXMgdGhlIGxlZnRtb3N0IGNvbHVtbgorICAgICAgICAjIGxpbmUgc2hvdWxkIGJlCisgICAgICAgICMgICAgIG1vZHVsZW5hbWUuZm5uYW1lIFthcyBjX2Jhc2VuYW1lXSBbLT4gcmV0dXJuIGFubm90YXRpb25dCisgICAgICAgICMgc3F1YXJlIGJyYWNrZXRzIGRlbm90ZSBvcHRpb25hbCBzeW50YXguCisgICAgICAgICMKKyAgICAgICAgIyAoYnV0IHdlIG1pZ2h0IGZpbmQgYSBkaXJlY3RpdmUgZmlyc3QhKQorICAgICAgICAjCisgICAgICAgICMgdGhpcyBsaW5lIGlzIHBlcm1pdHRlZCB0byBzdGFydCB3aXRoIHdoaXRlc3BhY2UuCisgICAgICAgICMgd2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRiAoZm9yICJmdW5jdGlvbiIpLgorCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorCisgICAgICAgICMgaXMgaXQgYSBkaXJlY3RpdmU/CisgICAgICAgIGZpZWxkcyA9IHNobGV4LnNwbGl0KGxpbmUpCisgICAgICAgIGRpcmVjdGl2ZV9uYW1lID0gZmllbGRzWzBdCisgICAgICAgIGRpcmVjdGl2ZSA9IHNlbGYuZGlyZWN0aXZlcy5nZXQoZGlyZWN0aXZlX25hbWUsIE5vbmUpCisgICAgICAgIGlmIGRpcmVjdGl2ZToKKyAgICAgICAgICAgIGRpcmVjdGl2ZSgqZmllbGRzWzE6XSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUsIF8sIHJldHVybnMgPSBsaW5lLnBhcnRpdGlvbignLT4nKQorCisgICAgICAgIGZ1bGxfbmFtZSwgXywgY19iYXNlbmFtZSA9IGxpbmUucGFydGl0aW9uKCcgYXMgJykKKyAgICAgICAgZnVsbF9uYW1lID0gZnVsbF9uYW1lLnN0cmlwKCkKKyAgICAgICAgY19iYXNlbmFtZSA9IGNfYmFzZW5hbWUuc3RyaXAoKSBvciBOb25lCisKKyAgICAgICAgaWYgbm90IGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZnVsbF9uYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgZnVuY3Rpb24gbmFtZToge30iLmZvcm1hdChmdWxsX25hbWUpKQorICAgICAgICBpZiBjX2Jhc2VuYW1lIGFuZCBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKGNfYmFzZW5hbWUpOgorICAgICAgICAgICAgZmFpbCgiSWxsZWdhbCBDIGJhc2VuYW1lOiB7fSIuZm9ybWF0KGNfYmFzZW5hbWUpKQorCisgICAgICAgIGlmIG5vdCByZXR1cm5zOgorICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IENSZXR1cm5Db252ZXJ0ZXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KCkgLT4ge306IHBhc3MiLmZvcm1hdChyZXR1cm5zKQorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBmYWlsKCJCYWRseS1mb3JtZWQgYW5ub3RhdGlvbiBmb3IgIiArIGZ1bGxfbmFtZSArICI6ICIgKyByZXR1cm5zKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIobW9kdWxlLmJvZHlbMF0ucmV0dXJucykKKyAgICAgICAgICAgICAgICBhc3NlcnQgbm90IGxlZ2FjeQorICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHJldHVybl9jb252ZXJ0ZXJzOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJFcnJvcjogTm8gYXZhaWxhYmxlIHJldHVybiBjb252ZXJ0ZXIgY2FsbGVkICIgKyByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyc1tuYW1lXSgqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisKKyAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiVW5kZWZpbmVkIG1vZHVsZSB1c2VkIGluIGRlY2xhcmF0aW9uIG9mICIgKyByZXByKGZ1bGxfbmFtZS5zdHJpcCgpKSArICIuIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IEZ1bmN0aW9uKG5hbWU9ZnVuY3Rpb25fbmFtZSwgZnVsbF9uYW1lPWZ1bGxfbmFtZSwgbW9kdWxlPW1vZHVsZSwgY2xzPWNscywgY19iYXNlbmFtZT1jX2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlcj1yZXR1cm5fY29udmVydGVyLCBraW5kPXNlbGYua2luZCwgY29leGlzdD1zZWxmLmNvZXhpc3QpCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyc19zdGFydCkKKworICAgICMgTm93IGVudGVyaW5nIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24uICBUaGUgcnVsZXMsIGZvcm1hbGx5IHN0YXRlZDoKKyAgICAjCisgICAgIyAgICogQWxsIGxpbmVzIG11c3QgYmUgaW5kZW50ZWQgd2l0aCBzcGFjZXMgb25seS4KKyAgICAjICAgKiBUaGUgZmlyc3QgbGluZSBtdXN0IGJlIGEgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLgorICAgICMgICAqIFRoZSBmaXJzdCBsaW5lIG11c3QgYmUgaW5kZW50ZWQuCisgICAgIyAgICAgICAqIFRoaXMgZmlyc3QgbGluZSBlc3RhYmxpc2hlcyB0aGUgaW5kZW50IGZvciBwYXJhbWV0ZXJzLgorICAgICMgICAgICAgKiBXZSdsbCBjYWxsIHRoaXMgbnVtYmVyIG9mIHNwYWNlcyBQIChmb3IgInBhcmFtZXRlciIpLgorICAgICMgICAqIFRoZW5jZWZvcnRoOgorICAgICMgICAgICAgKiBMaW5lcyBpbmRlbnRlZCB3aXRoIFAgc3BhY2VzIHNwZWNpZnkgYSBwYXJhbWV0ZXIuCisgICAgIyAgICAgICAqIExpbmVzIGluZGVudGVkIHdpdGggPiBQIHNwYWNlcyBhcmUgZG9jc3RyaW5ncyBmb3IgdGhlIHByZXZpb3VzCisgICAgIyAgICAgICAgIHBhcmFtZXRlci4KKyAgICAjICAgICAgICAgICAqIFdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIEQgKGZvciAiZG9jc3RyaW5nIikuCisgICAgIyAgICAgICAgICAgKiBBbGwgc3Vic2VxdWVudCBsaW5lcyBpbmRlbnRlZCB3aXRoID49IEQgc3BhY2VzIGFyZSBzdG9yZWQgYXMKKyAgICAjICAgICAgICAgICAgIHBhcnQgb2YgdGhlIHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5nLgorICAgICMgICAgICAgICAgICogQWxsIGxpbmVzIHdpbGwgaGF2ZSB0aGUgZmlyc3QgRCBzcGFjZXMgb2YgdGhlIGluZGVudCBzdHJpcHBlZAorICAgICMgICAgICAgICAgICAgYmVmb3JlIHRoZXkgYXJlIHN0b3JlZC4KKyAgICAjICAgICAgICAgICAqIEl0J3MgaWxsZWdhbCB0byBoYXZlIGEgbGluZSBzdGFydGluZyB3aXRoIGEgbnVtYmVyIG9mIHNwYWNlcyBYCisgICAgIyAgICAgICAgICAgICBzdWNoIHRoYXQgUCA8IFggPCBELgorICAgICMgICAgICAgKiBBIGxpbmUgd2l0aCA8IFAgc3BhY2VzIGlzIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBmdW5jdGlvbgorICAgICMgICAgICAgICBkb2NzdHJpbmcsIHdoaWNoIGVuZHMgcHJvY2Vzc2luZyBmb3IgcGFyYW1ldGVycyBhbmQgcGVyLXBhcmFtZXRlcgorICAgICMgICAgICAgICBkb2NzdHJpbmdzLgorICAgICMgICAgICAgICAgICogVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZ1bmN0aW9uIGRvY3N0cmluZyBtdXN0IGJlIGF0IHRoZSBzYW1lCisgICAgIyAgICAgICAgICAgICBpbmRlbnQgYXMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorICAgICMgICAgICAgKiBJdCdzIGlsbGVnYWwgdG8gaGF2ZSBhbnkgbGluZSBpbiB0aGUgcGFyYW1ldGVycyBzZWN0aW9uIHN0YXJ0aW5nCisgICAgIyAgICAgICAgIHdpdGggWCBzcGFjZXMgc3VjaCB0aGF0IEYgPCBYIDwgUC4gIChBcyBiZWZvcmUsIEYgaXMgdGhlIGluZGVudAorICAgICMgICAgICAgICBvZiB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uKQorICAgICMKKyAgICAjIyMjIyMjIyMjIyMjIworICAgICMKKyAgICAjIEFsc28sIGN1cnJlbnRseSBBcmd1bWVudCBDbGluaWMgcGxhY2VzIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIG9uIGdyb3VwczoKKyAgICAjICAgKiBFYWNoIGdyb3VwIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyLgorICAgICMgICAqIEVhY2ggZ3JvdXAgbWF5IGNvbnRhaW4gYXQgbW9zdCBvbmUgZ3JvdXAsIHdoaWNoIG11c3QgYmUgdGhlIGZ1cnRoZXN0CisgICAgIyAgICAgdGhpbmcgaW4gdGhlIGdyb3VwIGZyb20gdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuICAoVGhlIG5lc3RlZCBncm91cAorICAgICMgICAgIG11c3QgYmUgdGhlIGZpcnN0IGluIHRoZSBncm91cCB3aGVuIGl0J3MgYmVmb3JlIHRoZSByZXF1aXJlZAorICAgICMgICAgIHBhcmFtZXRlcnMsIGFuZCB0aGUgbGFzdCB0aGluZyBpbiB0aGUgZ3JvdXAgd2hlbiBhZnRlciB0aGUgcmVxdWlyZWQKKyAgICAjICAgICBwYXJhbWV0ZXJzLikKKyAgICAjICAgKiBUaGVyZSBtYXkgYmUgYXQgbW9zdCBvbmUgKHRvcC1sZXZlbCkgZ3JvdXAgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YKKyAgICAjICAgICB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjICAgKiBZb3UgbXVzdCBzcGVjaWZ5IGEgc2xhc2gsIGFuZCBpdCBtdXN0IGJlIGFmdGVyIGFsbCBwYXJhbWV0ZXJzLgorICAgICMgICAgIChJbiBvdGhlciB3b3JkczogZWl0aGVyIGFsbCBwYXJhbWV0ZXJzIGFyZSBwb3NpdGlvbmFsLW9ubHksCisgICAgIyAgICAgIG9yIG5vbmUgYXJlLikKKyAgICAjCisgICAgIyAgU2FpZCBhbm90aGVyIHdheToKKyAgICAjICAgKiBFYWNoIGdyb3VwIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyLgorICAgICMgICAqIEFsbCBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgbXVzdCBiZQorICAgICMgICAgIGNvbnNlY3V0aXZlLiAgKFlvdSBjYW4ndCBoYXZlIGEgbGVmdCBzcXVhcmUgYnJhY2tldCBmb2xsb3dlZAorICAgICMgICAgIGJ5IGEgcGFyYW1ldGVyLCB0aGVuIGFub3RoZXIgbGVmdCBzcXVhcmUgYnJhY2tldC4gIFlvdSBjYW4ndAorICAgICMgICAgIGhhdmUgYSBsZWZ0IHNxdWFyZSBicmFja2V0LCBhIHBhcmFtZXRlciwgYSByaWdodCBzcXVhcmUgYnJhY2tldCwKKyAgICAjICAgICBhbmQgdGhlbiBhIGxlZnQgc3F1YXJlIGJyYWNrZXQuKQorICAgICMgICAqIEFsbCByaWdodCBzcXVhcmUgYnJhY2tldHMgYWZ0ZXIgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMgbXVzdCBiZQorICAgICMgICAgIGNvbnNlY3V0aXZlLgorICAgICMKKyAgICAjIFRoZXNlIHJ1bGVzIGFyZSBlbmZvcmNlZCB3aXRoIGEgc2luZ2xlIHN0YXRlIHZhcmlhYmxlOgorICAgICMgInBhcmFtZXRlcl9zdGF0ZSIuICAoUHJldmlvdXNseSB0aGUgY29kZSB3YXMgYSBtaWFzbWEgb2YgaWZzIGFuZAorICAgICMgc2VwYXJhdGUgYm9vbGVhbiBzdGF0ZSB2YXJpYWJsZXMuKSAgVGhlIHN0YXRlcyBhcmU6CisgICAgIworICAgICMgIFsgWyBhLCBiLCBdIGMsIF0gZCwgZSwgZiwgWyBnLCBoLCBbIGkgXSBdIC8gICA8LSBsaW5lCisgICAgIyAwMSAgIDIgICAgICAgICAgMyAgICAgICAgICA0ICAgICAgICAgICA1ICAgNiAgIDwtIHN0YXRlIHRyYW5zaXRpb25zCisgICAgIworICAgICMgMDogcHNfc3RhcnQuICBiZWZvcmUgd2UndmUgc2VlbiBhbnl0aGluZy4gIGxlZ2FsIHRyYW5zaXRpb25zIGFyZSB0byAxIG9yIDMuCisgICAgIyAxOiBwc19sZWZ0X3NxdWFyZV9iZWZvcmUuICBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDI6IHBzX2dyb3VwX2JlZm9yZS4gIGluIGEgZ3JvdXAsIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMzogcHNfcmVxdWlyZWQuICByZXF1aXJlZCBwYXJhbWV0ZXJzLiAgKHJlbnVtYmVyIGxlZnQgZ3JvdXBzISkKKyAgICAjIDQ6IHBzX2dyb3VwX2FmdGVyLiAgaW4gYSBncm91cCwgYWZ0ZXIgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDU6IHBzX3JpZ2h0X3NxdWFyZV9hZnRlci4gIHJpZ2h0IHNxdWFyZSBicmFja2V0cyBhZnRlciByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgNjogcHNfc2Vlbl9zbGFzaC4gIHNlZW4gc2xhc2guCisgICAgcHNfc3RhcnQsIHBzX2xlZnRfc3F1YXJlX2JlZm9yZSwgcHNfZ3JvdXBfYmVmb3JlLCBwc19yZXF1aXJlZCwgXAorICAgIHBzX2dyb3VwX2FmdGVyLCBwc19yaWdodF9zcXVhcmVfYWZ0ZXIsIHBzX3NlZW5fc2xhc2ggPSByYW5nZSg3KQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcnNfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGlmIHRoaXMgbGluZSBpcyBub3QgaW5kZW50ZWQsIHdlIGhhdmUgbm8gcGFyYW1ldGVycworICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnQuaW5mZXIobGluZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXIsIGxpbmUpCisKKworICAgIGRlZiB0b19yZXF1aXJlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyYW5zaXRpb24gdG8gdGhlICJyZXF1aXJlZCIgcGFyYW1ldGVyIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgIT0gc2VsZi5wc19yZXF1aXJlZDoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yZXF1aXJlZAorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHAuZ3JvdXAgPSAtcC5ncm91cAorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcihzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAyCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisgICAgICAgIGlmIGluZGVudCA9PSAtMToKKyAgICAgICAgICAgICMgd2Ugb3V0ZGVudGVkLCBtdXN0IGJlIHRvIGRlZmluaXRpb24gY29sdW1uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGlmIGluZGVudCA9PSAxOgorICAgICAgICAgICAgIyB3ZSBpbmRlbnRlZCwgbXVzdCBiZSB0byBuZXcgcGFyYW1ldGVyIGRvY3N0cmluZyBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nX3N0YXJ0LCBsaW5lKQorCisgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisKKyAgICAgICAgaWYgbGluZSBpbiAoJyonLCAnLycsICdbJywgJ10nKToKKyAgICAgICAgICAgIHNlbGYucGFyc2Vfc3BlY2lhbF9zeW1ib2wobGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgIHNlbGYudG9fcmVxdWlyZWQoKQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfZ3JvdXBfYmVmb3JlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19ncm91cF9hZnRlcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKworICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoe30pOiBwYXNzIi5mb3JtYXQobGluZSkKKyAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG5vdCBtb2R1bGU6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gaW52YWxpZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb246XG5cdCIgKyBsaW5lKQorCisgICAgICAgIGZ1bmN0aW9uX2FyZ3MgPSBtb2R1bGUuYm9keVswXS5hcmdzCisgICAgICAgIHBhcmFtZXRlciA9IGZ1bmN0aW9uX2FyZ3MuYXJnc1swXQorCisgICAgICAgIGlmIGZ1bmN0aW9uX2FyZ3MuZGVmYXVsdHM6CisgICAgICAgICAgICBleHByID0gZnVuY3Rpb25fYXJncy5kZWZhdWx0c1swXQorICAgICAgICAgICAgIyBtaWxkIGhhY2s6IGV4cGxpY2l0bHkgc3VwcG9ydCBOVUxMIGFzIGEgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHByLCBhc3QuTmFtZSkgYW5kIGV4cHIuaWQgPT0gJ05VTEwnOgorICAgICAgICAgICAgICAgIHZhbHVlID0gTlVMTAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdC5saXRlcmFsX2V2YWwoZXhwcikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbHVlID0gdW5zcGVjaWZpZWQKKworICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5hcmcKKyAgICAgICAgbmFtZSwgbGVnYWN5LCBrd2FyZ3MgPSBzZWxmLnBhcnNlX2NvbnZlcnRlcihwYXJhbWV0ZXIuYW5ub3RhdGlvbikKKyAgICAgICAgZGljdCA9IGxlZ2FjeV9jb252ZXJ0ZXJzIGlmIGxlZ2FjeSBlbHNlIGNvbnZlcnRlcnMKKyAgICAgICAgbGVnYWN5X3N0ciA9ICJsZWdhY3kgIiBpZiBsZWdhY3kgZWxzZSAiIgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBkaWN0OgorICAgICAgICAgICAgZmFpbCgne30gaXMgbm90IGEgdmFsaWQge31jb252ZXJ0ZXInLmZvcm1hdChuYW1lLCBsZWdhY3lfc3RyKSkKKyAgICAgICAgY29udmVydGVyID0gZGljdFtuYW1lXShwYXJhbWV0ZXJfbmFtZSwgc2VsZi5mdW5jdGlvbiwgdmFsdWUsICoqa3dhcmdzKQorCisgICAgICAgICMgc3BlY2lhbCBjYXNlOiBpZiBpdCdzIHRoZSBzZWxmIGNvbnZlcnRlciwKKyAgICAgICAgIyBkb24ndCBhY3R1YWxseSBhZGQgaXQgdG8gdGhlIHBhcmFtZXRlciBsaXN0CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBpZiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMgb3IgKHNlbGYucGFyYW1ldGVyX3N0YXRlICE9IHNlbGYucHNfcmVxdWlyZWQpOgorICAgICAgICAgICAgICAgIGZhaWwoIlRoZSAnc2VsZicgcGFyYW1ldGVyLCBpZiBzcGVjaWZpZWQsIG11c3QgYmUgdGhlIHZlcnkgZmlyc3QgdGhpbmcgaW4gdGhlIHBhcmFtZXRlciBibG9jay4iKQorICAgICAgICAgICAgaWYgc2VsZi5mdW5jdGlvbi5zZWxmX2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICBmYWlsKCJZb3UgY2FuJ3Qgc3BlY2lmeSB0aGUgJ3NlbGYnIHBhcmFtZXRlciBtb3JlIHRoYW4gb25jZS4iKQorICAgICAgICAgICAgc2VsZi5mdW5jdGlvbi5zZWxmX2NvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBraW5kID0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZIGlmIHNlbGYua2V5d29yZF9vbmx5IGVsc2UgaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisgICAgICAgIHAgPSBQYXJhbWV0ZXIocGFyYW1ldGVyX25hbWUsIGtpbmQsIGZ1bmN0aW9uPXNlbGYuZnVuY3Rpb24sIGNvbnZlcnRlcj1jb252ZXJ0ZXIsIGRlZmF1bHQ9dmFsdWUsIGdyb3VwPXNlbGYuZ3JvdXApCisgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyc1twYXJhbWV0ZXJfbmFtZV0gPSBwCisKKyAgICBkZWYgcGFyc2VfY29udmVydGVyKHNlbGYsIGFubm90YXRpb24pOgorICAgICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5TdHIpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24ucywgVHJ1ZSwge30KKworICAgICAgICBpZiBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5OYW1lKToKKyAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLmlkLCBGYWxzZSwge30KKworICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhbm5vdGF0aW9uLCBhc3QuQ2FsbCkKKworICAgICAgICBuYW1lID0gYW5ub3RhdGlvbi5mdW5jLmlkCisgICAgICAgIGt3YXJncyA9IHtub2RlLmFyZzogYXN0LmxpdGVyYWxfZXZhbChub2RlLnZhbHVlKSBmb3Igbm9kZSBpbiBhbm5vdGF0aW9uLmtleXdvcmRzfQorICAgICAgICByZXR1cm4gbmFtZSwgRmFsc2UsIGt3YXJncworCisgICAgZGVmIHBhcnNlX3NwZWNpYWxfc3ltYm9sKHNlbGYsIHN5bWJvbCk6CisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfc2Vlbl9zbGFzaDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHNwZWNpZmllcyAiICsgc3ltYm9sICsgIiBhZnRlciAvLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorCisgICAgICAgIGlmIHN5bWJvbCA9PSAnKic6CisgICAgICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiB1c2VzICcqJyBtb3JlIHRoYW4gb25jZS4iKQorICAgICAgICAgICAgc2VsZi5rZXl3b3JkX29ubHkgPSBUcnVlCisgICAgICAgIGVsaWYgc3ltYm9sID09ICdbJzoKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2xlZnRfc3F1YXJlX2JlZm9yZQorICAgICAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19yZXF1aXJlZCwgc2VsZi5wc19ncm91cF9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2FmdGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgKz0gMQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnXSc6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5ncm91cDoKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYSBdIHdpdGhvdXQgYSBtYXRjaGluZyBbLiIpCisgICAgICAgICAgICBpZiBub3QgYW55KHAuZ3JvdXAgPT0gc2VsZi5ncm91cCBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCkpOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBlbXB0eSBncm91cC5cbkFsbCBncm91cHMgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuIikKKyAgICAgICAgICAgIHNlbGYuZ3JvdXAgLT0gMQorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBzZWxmLnBzX2dyb3VwX2JlZm9yZSk6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICAgICAgZWxpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19ncm91cF9hZnRlciwgc2VsZi5wc19yaWdodF9zcXVhcmVfYWZ0ZXIpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yaWdodF9zcXVhcmVfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIikiKQorICAgICAgICBlbGlmIHN5bWJvbCA9PSAnLyc6CisgICAgICAgICAgICAjIHBzX3JlcXVpcmVkIGlzIGFsbG93ZWQgaGVyZSwgdGhhdCBhbGxvd3MgcG9zaXRpb25hbC1vbmx5IHdpdGhvdXQgb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB0byB3b3JrIChhbmQgaGF2ZSBkZWZhdWx0IHZhbHVlcyEpCisgICAgICAgICAgICBpZiAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgbm90IGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgc2VsZi5wc19ncm91cF9iZWZvcmUpKSBvciBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIpIikKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIG1peGVzIGtleXdvcmQtb25seSBhbmQgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfc2Vlbl9zbGFzaAorICAgICAgICAgICAgIyBmaXh1cCBwcmVjZWVkaW5nIHBhcmFtZXRlcnMKKyAgICAgICAgICAgIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAgICAgICAgICBpZiBwLmtpbmQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgICAgIHAua2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQgPSBsZW4oc2VsZi5pbmRlbnQubWFyZ2luKQorICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZywgbGluZSkKKworICAgICMgZXZlcnkgbGluZSBvZiB0aGUgZG9jc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhdCBsZWFzdCBGIHNwYWNlcywKKyAgICAjIHdoZXJlIEYgPiBQLgorICAgICMgdGhlc2UgRiBzcGFjZXMgd2lsbCBiZSBzdHJpcHBlZC4KKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQubWVhc3VyZShsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPCBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA8IDMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50LmRlcHRoID09IDI6CisgICAgICAgICAgICAgICAgIyBiYWNrIHRvIGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGFzc2VydCBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3Qoc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKSkpCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZworCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICdcbicKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9IHNlbGYuaW5kZW50LmRlZGVudChsaW5lKQorCisgICAgICAgIGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZyA9IG5ld19kb2NzdHJpbmcKKworICAgICMgdGhlIGZpbmFsIHN0YW56YSBvZiB0aGUgRFNMIGlzIHRoZSBkb2NzdHJpbmcuCisgICAgZGVmIHN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb24uc2VsZl9jb252ZXJ0ZXI6CisgICAgICAgICAgICBzZWxmLmZ1bmN0aW9uLnNlbGZfY29udmVydGVyID0gc2VsZl9jb252ZXJ0ZXIoInNlbGYiLCBzZWxmLmZ1bmN0aW9uKQorCisgICAgICAgIGlmIHNlbGYuZ3JvdXA6CisgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYSBdIHdpdGhvdXQgYSBtYXRjaGluZyBbLiIpCisKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICJcbiIKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5pbmRlbnQuZGVkZW50KGxpbmUpLnJzdHJpcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lID0gJycKKyAgICAgICAgbmV3X2RvY3N0cmluZyArPSBsaW5lCisgICAgICAgIHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nID0gbmV3X2RvY3N0cmluZworCisgICAgZGVmIGZvcm1hdF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGYgPSBzZWxmLmZ1bmN0aW9uCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgcGFyYW1ldGVycyA9IGxpc3QoZi5wYXJhbWV0ZXJzLnZhbHVlcygpKQorCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBmaXJzdCBsaW5lCisgICAgICAgICMjCisKKyAgICAgICAgYWRkKGYubmFtZSkKKyAgICAgICAgYWRkKCcoJykKKworICAgICAgICAjIHBvcHVsYXRlICJyaWdodF9icmFja2V0X2NvdW50IiBmaWVsZCBmb3IgZXZlcnkgcGFyYW1ldGVyCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAjIGZvciBub3csIHRoZSBvbmx5IHdheSBDbGluaWMgc3VwcG9ydHMgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICMgaXMgaWYgYWxsIG9mIHRoZW0gYXJlIHBvc2l0aW9uYWwtb25seS4KKyAgICAgICAgICAgIHBvc2l0aW9uYWxfb25seV9wYXJhbWV0ZXJzID0gW3Aua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkgZm9yIHAgaW4gcGFyYW1ldGVyc10KKyAgICAgICAgICAgIGlmIHBhcmFtZXRlcnNbMF0ua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGFsbChwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgICAgICBwLnJpZ2h0X2JyYWNrZXRfY291bnQgPSBhYnMocC5ncm91cCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBkb24ndCBwdXQgYW55IHJpZ2h0IGJyYWNrZXRzIGFyb3VuZCBub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMsIGV2ZXIuCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICAgICAgcC5yaWdodF9icmFja2V0X2NvdW50ID0gMAorCisgICAgICAgIHJpZ2h0X2JyYWNrZXRfY291bnQgPSAwCisKKyAgICAgICAgZGVmIGZpeF9yaWdodF9icmFja2V0X2NvdW50KGRlc2lyZWQpOgorICAgICAgICAgICAgbm9ubG9jYWwgcmlnaHRfYnJhY2tldF9jb3VudAorICAgICAgICAgICAgcyA9ICcnCisgICAgICAgICAgICB3aGlsZSByaWdodF9icmFja2V0X2NvdW50IDwgZGVzaXJlZDoKKyAgICAgICAgICAgICAgICBzICs9ICdbJworICAgICAgICAgICAgICAgIHJpZ2h0X2JyYWNrZXRfY291bnQgKz0gMQorICAgICAgICAgICAgd2hpbGUgcmlnaHRfYnJhY2tldF9jb3VudCA+IGRlc2lyZWQ6CisgICAgICAgICAgICAgICAgcyArPSAnXScKKyAgICAgICAgICAgICAgICByaWdodF9icmFja2V0X2NvdW50IC09IDEKKyAgICAgICAgICAgIHJldHVybiBzCisKKyAgICAgICAgYWRkZWRfc3RhciA9IEZhbHNlCisgICAgICAgIGFkZF9jb21tYSA9IEZhbHNlCisKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGFzc2VydCBwLm5hbWUKKworICAgICAgICAgICAgaWYgcC5pc19rZXl3b3JkX29ubHkoKSBhbmQgbm90IGFkZGVkX3N0YXI6CisgICAgICAgICAgICAgICAgYWRkZWRfc3RhciA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgICAgIGFkZCgnLCAnKQorICAgICAgICAgICAgICAgIGFkZCgnKicpCisKKyAgICAgICAgICAgIGEgPSBbcC5uYW1lXQorICAgICAgICAgICAgaWYgcC5jb252ZXJ0ZXIuaXNfb3B0aW9uYWwoKToKKyAgICAgICAgICAgICAgICBhLmFwcGVuZCgnPScpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBwLmNvbnZlcnRlci5kZWZhdWx0CisgICAgICAgICAgICAgICAgYS5hcHBlbmQocC5jb252ZXJ0ZXIuZG9jX2RlZmF1bHQpCisgICAgICAgICAgICBzID0gZml4X3JpZ2h0X2JyYWNrZXRfY291bnQocC5yaWdodF9icmFja2V0X2NvdW50KQorICAgICAgICAgICAgcyArPSAiIi5qb2luKGEpCisgICAgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgYWRkKCcsICcpCisgICAgICAgICAgICBhZGQocykKKyAgICAgICAgICAgIGFkZF9jb21tYSA9IFRydWUKKworICAgICAgICBhZGQoZml4X3JpZ2h0X2JyYWNrZXRfY291bnQoMCkpCisgICAgICAgIGFkZCgnKScpCisKKyAgICAgICAgIyBpZiBmLnJldHVybl9jb252ZXJ0ZXIuZG9jX2RlZmF1bHQ6CisgICAgICAgICMgICAgIGFkZCgnIC0+ICcpCisgICAgICAgICMgICAgIGFkZChmLnJldHVybl9jb252ZXJ0ZXIuZG9jX2RlZmF1bHQpCisKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBvdXRwdXQoKQorCisgICAgICAgICMgbm93IGZpeCB1cCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBicmFja2V0cyBsb29rIHdyb25nCisgICAgICAgIGRvY3N0cmluZ19maXJzdF9saW5lID0gZG9jc3RyaW5nX2ZpcnN0X2xpbmUucmVwbGFjZSgnLCBdJywgJyxdICcpCisKKyAgICAgICAgIyBva2F5LiAgbm93IHdlJ3JlIG9mZmljaWFsbHkgYnVpbGRpbmcgdGhlICJwYXJhbWV0ZXJzIiBzZWN0aW9uLgorICAgICAgICAjIGNyZWF0ZSBzdWJzdGl0dXRpb24gdGV4dCBmb3Ige3BhcmFtZXRlcnN9CisgICAgICAgIHNwYWNlcl9saW5lID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBwLmRvY3N0cmluZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzcGFjZXJfbGluZToKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BhY2VyX2xpbmUgPSBUcnVlCisgICAgICAgICAgICBhZGQoIiAgIikKKyAgICAgICAgICAgIGFkZChwLm5hbWUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGFkZCh0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHAuZG9jc3RyaW5nLnJzdHJpcCgpKSwgIiAgICAiKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IG91dHB1dCgpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICdcbicKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgYm9keQorICAgICAgICAjIworCisgICAgICAgIGRvY3N0cmluZyA9IGYuZG9jc3RyaW5nLnJzdHJpcCgpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZG9jc3RyaW5nLnNwbGl0KCdcbicpXQorCisgICAgICAgICMgRW5mb3JjZSB0aGUgc3VtbWFyeSBsaW5lIQorICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIHNob3VsZCBiZSBhIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAjIEl0IHNob3VsZCBmaXQgb24gb25lIGxpbmUgKDgwIGNvbHVtbnM/IDc5IG1heWJlPykgYW5kIGJlIGEgcGFyYWdyYXBoCisgICAgICAgICMgYnkgaXRzZWxmLgorICAgICAgICAjCisgICAgICAgICMgQXJndW1lbnQgQ2xpbmljIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcnVsZToKKyAgICAgICAgIyAgKiBlaXRoZXIgdGhlIGRvY3N0cmluZyBpcyBlbXB0eSwKKyAgICAgICAgIyAgKiBvciBpdCBtdXN0IGhhdmUgYSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICMKKyAgICAgICAgIyBHdWlkbyBzYWlkIENsaW5pYyBzaG91bGQgZW5mb3JjZSB0aGlzOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1KdW5lLzEyNzExMC5odG1sCisKKyAgICAgICAgaWYgbGVuKGxpbmVzKSA+PSAyOgorICAgICAgICAgICAgaWYgbGluZXNbMV06CisgICAgICAgICAgICAgICAgZmFpbCgiRG9jc3RyaW5nIGZvciAiICsgZi5mdWxsX25hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBzdW1tYXJ5IGxpbmUhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IG5vbi1ibGFuayBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGxpbmUgc3VtbWFyeSBmb2xsb3dlZCBieSBhbiBlbXB0eSBsaW5lLiIpCisgICAgICAgIGVsaWYgbGVuKGxpbmVzKSA9PSAxOgorICAgICAgICAgICAgIyB0aGUgZG9jc3RyaW5nIGlzIG9ubHkgb25lIGxpbmUgcmlnaHQgbm93LS10aGUgc3VtbWFyeSBsaW5lLgorICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgbGluZSBhZnRlciB0aGUgc3VtbWFyeSBsaW5lIHNvIHdlIGhhdmUgc3BhY2UKKyAgICAgICAgICAgICMgYmV0d2VlbiBpdCBhbmQgdGhlIHtwYXJhbWV0ZXJzfSB3ZSdyZSBhYm91dCB0byBhZGQuCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPSBsZW4oZG9jc3RyaW5nLnNwbGl0KCd7cGFyYW1ldGVyc30nKSkgLSAxCisgICAgICAgIGlmIHBhcmFtZXRlcnNfbWFya2VyX2NvdW50ID4gMToKKyAgICAgICAgICAgIGZhaWwoJ1lvdSBtYXkgbm90IHNwZWNpZnkge3BhcmFtZXRlcnN9IG1vcmUgdGhhbiBvbmNlIGluIGEgZG9jc3RyaW5nIScpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnNfbWFya2VyX2NvdW50OgorICAgICAgICAgICAgIyBpbnNlcnQgYWZ0ZXIgc3VtbWFyeSBsaW5lCisgICAgICAgICAgICBsaW5lcy5pbnNlcnQoMiwgJ3twYXJhbWV0ZXJzfScpCisKKyAgICAgICAgIyBpbnNlcnQgYXQgZnJvbnQgb2YgZG9jc3RyaW5nCisgICAgICAgIGxpbmVzLmluc2VydCgwLCBkb2NzdHJpbmdfZmlyc3RfbGluZSkKKworICAgICAgICBkb2NzdHJpbmcgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgYWRkKGRvY3N0cmluZykKKyAgICAgICAgZG9jc3RyaW5nID0gb3V0cHV0KCkKKworICAgICAgICBkb2NzdHJpbmcgPSBsaW5lYXJfZm9ybWF0KGRvY3N0cmluZywgcGFyYW1ldGVycz1wYXJhbWV0ZXJzKQorICAgICAgICBkb2NzdHJpbmcgPSBkb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICByZXR1cm4gZG9jc3RyaW5nCisKKyAgICBkZWYgc3RhdGVfdGVybWluYWwoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBibG9jayBpcyBkb25lLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBsaW5lCisKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlczoKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3QodmFsdWVzKSkpCisgICAgICAgICAgICAgICAgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXIgPSBsYXN0X3BhcmFtZXRlci5raW5kICE9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICAgICAgaWYgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXI6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICcqJyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyd2FyZHMuIikKKworICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHBhcmFtZXRlciBkb2NzdHJpbmdzCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUuZG9jc3RyaW5nID0gdmFsdWUuZG9jc3RyaW5nLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBzZWxmLmZvcm1hdF9kb2NzdHJpbmcoKQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlIGNhbGxhYmxlIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0CisjIHRoYXQgaW1wbGVtZW50cyB0aGUgY2xpbmljIHBhcnNlcgorIyBpbnRlcmZhY2UgKF9faW5pdF9fIGFuZCBwYXJzZSkuCisjCisjIGV4YW1wbGUgcGFyc2VyczoKKyMgICAiY2xpbmljIiwgaGFuZGxlcyB0aGUgQ2xpbmljIERTTAorIyAgICJweXRob24iLCBoYW5kbGVzIHJ1bm5pbmcgUHl0aG9uIGNvZGUKKyMKK3BhcnNlcnMgPSB7J2NsaW5pYycgOiBEU0xQYXJzZXIsICdweXRob24nOiBQeXRob25QYXJzZXJ9CisKKworY2xpbmljID0gTm9uZQorCisKK2RlZiBtYWluKGFyZ3YpOgorICAgIGltcG9ydCBzeXMKKworICAgIGlmIHN5cy52ZXJzaW9uX2luZm8ubWFqb3IgPCAzIG9yIHN5cy52ZXJzaW9uX2luZm8ubWlub3IgPCAzOgorICAgICAgICBzeXMuZXhpdCgiRXJyb3I6IGNsaW5pYy5weSByZXF1aXJlcyBQeXRob24gMy4zIG9yIGdyZWF0ZXIuIikKKworICAgIGltcG9ydCBhcmdwYXJzZQorICAgIGNtZGxpbmUgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgY21kbGluZS5hZGRfYXJndW1lbnQoIi1mIiwgIi0tZm9yY2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItbyIsICItLW91dHB1dCIsIHR5cGU9c3RyKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLWNvbnZlcnRlcnMiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItLW1ha2UiLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCJmaWxlbmFtZSIsIHR5cGU9c3RyLCBuYXJncz0iKiIpCisgICAgbnMgPSBjbWRsaW5lLnBhcnNlX2FyZ3MoYXJndikKKworICAgIGlmIG5zLmNvbnZlcnRlcnM6CisgICAgICAgIGlmIG5zLmZpbGVuYW1lOgorICAgICAgICAgICAgcHJpbnQoIlVzYWdlIGVycm9yOiBjYW4ndCBzcGVjaWZ5IC0tY29udmVydGVycyBhbmQgYSBmaWxlbmFtZSBhdCB0aGUgc2FtZSB0aW1lLiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KC0xKQorICAgICAgICBjb252ZXJ0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX2NvbnZlcnRlcnMgPSBbXQorICAgICAgICBpZ25vcmVkID0gc2V0KCIiIgorICAgICAgICAgICAgYWRkX2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyCisgICAgICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgIGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIKKyAgICAgICAgICAgICIiIi5zdHJpcCgpLnNwbGl0KCkpCisgICAgICAgIG1vZHVsZSA9IGdsb2JhbHMoKQorICAgICAgICBmb3IgbmFtZSBpbiBtb2R1bGU6CisgICAgICAgICAgICBmb3Igc3VmZml4LCBpZHMgaW4gKAorICAgICAgICAgICAgICAgICgiX3JldHVybl9jb252ZXJ0ZXIiLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICAgICAgICAgKCJfY29udmVydGVyIiwgY29udmVydGVycyksCisgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gaWdub3JlZDoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKHN1ZmZpeCk6CisgICAgICAgICAgICAgICAgICAgIGlkcy5hcHBlbmQoKG5hbWUsIG5hbWVbOi1sZW4oc3VmZml4KV0pKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBwcmludCgpCisKKyAgICAgICAgcHJpbnQoIkxlZ2FjeSBjb252ZXJ0ZXJzOiIpCisgICAgICAgIGxlZ2FjeSA9IHNvcnRlZChsZWdhY3lfY29udmVydGVycykKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc3VwcGVyKCkpKQorICAgICAgICBwcmludCgnICAgICcgKyAnICcuam9pbihjIGZvciBjIGluIGxlZ2FjeSBpZiBjWzBdLmlzbG93ZXIoKSkpCisgICAgICAgIHByaW50KCkKKworICAgICAgICBmb3IgdGl0bGUsIGF0dHJpYnV0ZSwgaWRzIGluICgKKyAgICAgICAgICAgICgiQ29udmVydGVycyIsICdjb252ZXJ0ZXJfaW5pdCcsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKCJSZXR1cm4gY29udmVydGVycyIsICdyZXR1cm5fY29udmVydGVyX2luaXQnLCByZXR1cm5fY29udmVydGVycyksCisgICAgICAgICk6CisgICAgICAgICAgICBwcmludCh0aXRsZSArICI6IikKKyAgICAgICAgICAgIGxvbmdlc3QgPSAtMQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gaWRzOgorICAgICAgICAgICAgICAgIGxvbmdlc3QgPSBtYXgobG9uZ2VzdCwgbGVuKHNob3J0X25hbWUpKQorICAgICAgICAgICAgZm9yIG5hbWUsIHNob3J0X25hbWUgaW4gc29ydGVkKGlkcywga2V5PWxhbWJkYSB4OiB4WzFdLmxvd2VyKCkpOgorICAgICAgICAgICAgICAgIGNscyA9IG1vZHVsZVtuYW1lXQorICAgICAgICAgICAgICAgIGNhbGxhYmxlID0gZ2V0YXR0cihjbHMsIGF0dHJpYnV0ZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgY2FsbGFibGU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUoY2FsbGFibGUpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIgaW4gc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9ICd7fT17IXJ9Jy5mb3JtYXQocGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5kZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICB7fSh7fSknLmZvcm1hdChzaG9ydF9uYW1lLCAnLCAnLmpvaW4ocGFyYW1ldGVycykpKQorICAgICAgICAgICAgICAgICMgYWRkX2NvbW1hID0gRmFsc2UKKyAgICAgICAgICAgICAgICAjIGZvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgIyAgICAgaWYgcGFyYW1ldGVyLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZOgorICAgICAgICAgICAgICAgICMgICAgICAgICBpZiBhZGRfY29tbWE6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnLCAnKQorICAgICAgICAgICAgICAgICMgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgYWRkX2NvbW1hID0gVHJ1ZQorICAgICAgICAgICAgICAgICMgICAgICAgICBzID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICAjICAgICAgICAgaWYgcGFyYW1ldGVyLmRlZmF1bHQgIT0gaW5zcGVjdC5QYXJhbWV0ZXIuZW1wdHk6CisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICBzICs9ICc9JyArIHJlcHIocGFyYW1ldGVyLmRlZmF1bHQpCisgICAgICAgICAgICAgICAgIyAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKHMpCisgICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXJzLmFwcGVuZCgnKScpCisKKyAgICAgICAgICAgICAgICAjIHByaW50KCIgICAiLCBzaG9ydF9uYW1lICsgIiIuam9pbihwYXJhbWV0ZXJzKSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoIkFsbCBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChkb2NfZGVmYXVsdD1Ob25lLCByZXF1aXJlZD1GYWxzZSkuIikKKyAgICAgICAgcHJpbnQoIkFsbCByZXR1cm4gY29udmVydGVycyBhbHNvIGFjY2VwdCAoZG9jX2RlZmF1bHQ9Tm9uZSkuIikKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5zLm1ha2U6CisgICAgICAgIGlmIG5zLm91dHB1dCBvciBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIG9yIGZpbGVuYW1lcyB3aXRoIC0tbWFrZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoJy4nKToKKyAgICAgICAgICAgIGZvciByY3NfZGlyIGluICgnLnN2bicsICcuZ2l0JywgJy5oZycpOgorICAgICAgICAgICAgICAgIGlmIHJjc19kaXIgaW4gZGlyczoKKyAgICAgICAgICAgICAgICAgICAgZGlycy5yZW1vdmUocmNzX2RpcikKKyAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBpZiBub3QgZmlsZW5hbWUuZW5kc3dpdGgoJy5jJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBwYXJzZV9maWxlKHBhdGgsIHZlcmlmeT1ub3QgbnMuZm9yY2UpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IG5zLmZpbGVuYW1lOgorICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBpZiBucy5vdXRwdXQgYW5kIGxlbihucy5maWxlbmFtZSkgPiAxOgorICAgICAgICBwcmludCgiVXNhZ2UgZXJyb3I6IGNhbid0IHVzZSAtbyB3aXRoIG11bHRpcGxlIGZpbGVuYW1lcy4iKQorICAgICAgICBwcmludCgpCisgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGZvciBmaWxlbmFtZSBpbiBucy5maWxlbmFtZToKKyAgICAgICAgcGFyc2VfZmlsZShmaWxlbmFtZSwgb3V0cHV0PW5zLm91dHB1dCwgdmVyaWZ5PW5vdCBucy5mb3JjZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmFmMzgwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5CkBAIC0wLDAgKzEsNzEzIEBACisjIS91c3IvYmluL2VudiBweXRob24zCisjCisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBjbGluaWMKK2Zyb20gY2xpbmljIGltcG9ydCBEU0xQYXJzZXIKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGluc3BlY3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorCitjbGFzcyBGYWtlQ29udmVydGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBhcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisKKworY2xhc3MgRmFrZUNvbnZlcnRlckZhY3Rvcnk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgbmFtZSwgZGVmYXVsdCwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gRmFrZUNvbnZlcnRlcihzZWxmLm5hbWUsIGt3YXJncykKKworCitjbGFzcyBGYWtlQ29udmVydGVyc0RpY3Q6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnVzZWRfY29udmVydGVycyA9IHt9CisKKyAgICBkZWYgZ2V0KHNlbGYsIG5hbWUsIGRlZmF1bHQpOgorICAgICAgICByZXR1cm4gc2VsZi51c2VkX2NvbnZlcnRlcnMuc2V0ZGVmYXVsdChuYW1lLCBGYWtlQ29udmVydGVyRmFjdG9yeShuYW1lKSkKKworY2xhc3MgRmFrZUNsaW5pYzoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY29udmVydGVycyA9IEZha2VDb252ZXJ0ZXJzRGljdCgpCisgICAgICAgIHNlbGYubGVnYWN5X2NvbnZlcnRlcnMgPSBGYWtlQ29udmVydGVyc0RpY3QoKQorICAgICAgICBzZWxmLmxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZSgpCisgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCisgICAgICAgIHNlbGYuYmxvY2tfcGFyc2VyID0gY2xpbmljLkJsb2NrUGFyc2VyKCcnLCBzZWxmLmxhbmd1YWdlKQorICAgICAgICBzZWxmLm1vZHVsZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIGNsaW5pYy5jbGluaWMgPSBzZWxmCisgICAgICAgIHNlbGYubmFtZSA9ICJGYWtlQ2xpbmljIgorCisgICAgZGVmIGlzX2RpcmVjdGl2ZShzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgPT0gIm1vZHVsZSIKKworICAgIGRlZiBkaXJlY3RpdmUoc2VsZiwgbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYuY2FsbGVkX2RpcmVjdGl2ZXNbbmFtZV0gPSBhcmdzCisKKyAgICBfbW9kdWxlX2FuZF9jbGFzcyA9IGNsaW5pYy5DbGluaWMuX21vZHVsZV9hbmRfY2xhc3MKKworCisKK2NsYXNzIENsaW5pY0dyb3VwUGVybXV0ZXJUZXN0KFRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgbCwgbSwgciwgb3V0cHV0KToKKyAgICAgICAgY29tcHV0ZWQgPSBjbGluaWMucGVybXV0ZV9vcHRpb25hbF9ncm91cHMobCwgbSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1snc3RhcnQnXV0sIFsnc3RvcCddLCBbWydzdGVwJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAgICgnc3RvcCcsKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAnc3RvcCcsKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAnc3RvcCcsICdzdGVwJywpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9hZGRfd2luZG93KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ3gnLCAneSddXSwgWydjaCddLCBbWydhdHRyJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAgICgnY2gnLCksCisgICAgICAgICAgICAoJ2NoJywgJ2F0dHInKSwKKyAgICAgICAgICAgICgneCcsICd5JywgJ2NoJywpLAorICAgICAgICAgICAgKCd4JywgJ3knLCAnY2gnLCAnYXR0cicpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9sdWRpY3JvdXMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW1snYTEnLCAnYTInLCAnYTMnXSwgWydiMScsICdiMiddXSwgWydjMSddLCBbWydkMScsICdkMiddLCBbJ2UxJywgJ2UyJywgJ2UzJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAoJ2MxJywpLAorICAgICAgICAgICgnYjEnLCAnYjInLCAnYzEnKSwKKyAgICAgICAgICAoJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnLCAnZDEnLCAnZDInKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJywgJ2UxJywgJ2UyJywgJ2UzJyksCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X3JpZ2h0X29ubHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoW10sIFtdLCBbWydhJ10sWydiJ10sWydjJ11dLAorICAgICAgICAgICgKKyAgICAgICAgICAoKSwKKyAgICAgICAgICAoJ2EnLCksCisgICAgICAgICAgKCdhJywgJ2InKSwKKyAgICAgICAgICAoJ2EnLCAnYicsICdjJykKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfaGF2ZV9sZWZ0X29wdGlvbnNfYnV0X3JlcXVpcmVkX2lzX2VtcHR5KHNlbGYpOgorICAgICAgICBkZWYgZm4oKToKKyAgICAgICAgICAgIGNsaW5pYy5wZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhbJ2EnXSwgW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgZm4pCisKKworY2xhc3MgQ2xpbmljTGluZWFyRm9ybWF0VGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGlucHV0LCBvdXRwdXQsICoqa3dhcmdzKToKKyAgICAgICAgY29tcHV0ZWQgPSBjbGluaWMubGluZWFyX2Zvcm1hdChpbnB1dCwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoJycsICcnKQorCisgICAgZGVmIHRlc3Rfc29sb19uZXdsaW5lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCdcbicsICdcbicpCisKKyAgICBkZWYgdGVzdF9ub19zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9JycpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfbGluZV9zdWJzdGl0dXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAge25hbWV9CisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCAiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICBHQVJHTEUKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9J0dBUkdMRScpCisKKyAgICBkZWYgdGVzdF9tdWx0aWxpbmVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgYmluZ2xlCisgICAgICAgICAgYnVuZ2xlCisKKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsIG5hbWU9J2JpbmdsZVxuYnVuZ2xlXG4nKQorCitjbGFzcyBJbmVydFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgcGFzcworCitjbGFzcyBDb3B5UGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBibG9jay5vdXRwdXQgPSBibG9jay5pbnB1dAorCisKK2NsYXNzIENsaW5pY0Jsb2NrUGFyc2VyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGlucHV0LCBvdXRwdXQpOgorICAgICAgICBsYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoKQorCisgICAgICAgIGJsb2NrcyA9IGxpc3QoY2xpbmljLkJsb2NrUGFyc2VyKGlucHV0LCBsYW5ndWFnZSkpCisgICAgICAgIHdyaXRlciA9IGNsaW5pYy5CbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIGZvciBibG9jayBpbiBibG9ja3M6CisgICAgICAgICAgICB3cml0ZXIucHJpbnRfYmxvY2soYmxvY2spCisgICAgICAgIG91dHB1dCA9IHdyaXRlci5mLmdldHZhbHVlKCkKKyAgICAgICAgYXNzZXJ0IG91dHB1dCA9PSBpbnB1dCwgIm91dHB1dCAhPSBpbnB1dCFcblxub3V0cHV0ICIgKyByZXByKG91dHB1dCkgKyAiXG5cbiBpbnB1dCAiICsgcmVwcihpbnB1dCkKKworICAgIGRlZiByb3VuZF90cmlwKHNlbGYsIGlucHV0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3QoaW5wdXQsIGlucHV0KQorCisgICAgZGVmIHRlc3Rfcm91bmRfdHJpcF8xKHNlbGYpOgorICAgICAgICBzZWxmLnJvdW5kX3RyaXAoIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKyIiIikKKyAgICBkZWYgdGVzdF9yb3VuZF90cmlwXzIoc2VsZik6CisgICAgICAgIHNlbGYucm91bmRfdHJpcCgiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorLypbaW5lcnRdCithYmMKK1tpbmVydF0qLworZGVmCisvKltpbmVydCBjaGVja3N1bTogN2IxOGQwMTdmODlmNjFjZjE3ZDQ3ZjkyNzQ5ZWE2OTMwYTNmMWRlYl0qLworeHl6CisiIiIpCisKKyAgICBkZWYgX3Rlc3RfY2xpbmljKHNlbGYsIGlucHV0LCBvdXRwdXQpOgorICAgICAgICBsYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoKQorICAgICAgICBjID0gY2xpbmljLkNsaW5pYyhsYW5ndWFnZSkKKyAgICAgICAgYy5wYXJzZXJzWydpbmVydCddID0gSW5lcnRQYXJzZXIoYykKKyAgICAgICAgYy5wYXJzZXJzWydjb3B5J10gPSBDb3B5UGFyc2VyKGMpCisgICAgICAgIGNvbXB1dGVkID0gYy5wYXJzZShpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfY2xpbmljXzEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2xpbmljKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5XQorZGVmCitbY29weV0qLworYWJjCisvKltjb3B5IGNoZWNrc3VtOiAwM2NmZDc0MzY2MWYwNzk3NWZhMmYxMjIwYzUxOTRjYmFmZjQ4NDUxXSovCit4eXoKKyIiIiwgIiIiCisgICAgdmVyYmF0aW0gdGV4dCBoZXJlCisgICAgbGFoIGRlZSBkYWgKKy8qW2NvcHldCitkZWYKK1tjb3B5XSovCitkZWYKKy8qW2NvcHkgY2hlY2tzdW06IDdiMThkMDE3Zjg5ZjYxY2YxN2Q0N2Y5Mjc0OWVhNjkzMGEzZjFkZWJdKi8KK3h5egorIiIiKQorCisKK2NsYXNzIENsaW5pY1BhcnNlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6CisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihGYWtlQ2xpbmljKCkpCisgICAgICAgIGJsb2NrID0gY2xpbmljLkJsb2NrKCJtb2R1bGUgb3Ncbm9zLmFjY2VzcyIpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3MiLCBtb2R1bGUubmFtZSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9saW5lKHNlbGYpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UoIiNcbm1vZHVsZSBvc1xub3MuYWNjZXNzIikKKyAgICAgICAgbW9kdWxlLCBmdW5jdGlvbiA9IGJsb2NrLnNpZ25hdHVyZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWNjZXNzIiwgZnVuY3Rpb24ubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3MiLCBtb2R1bGUubmFtZSkKKworICAgIGRlZiB0ZXN0X3BhcmFtKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICBwYXRoOiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdwYXRoJywgcC5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocC5jb252ZXJ0ZXIsIGNsaW5pYy5pbnRfY29udmVydGVyKQorCisgICAgZGVmIHRlc3RfcGFyYW1fZGVmYXVsdChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBwLmRlZmF1bHQpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9ub19kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3MuYWNjZXNzCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgIHNvbWV0aGluZ19lbHNlOiBzdHIiIiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihmdW5jdGlvbi5wYXJhbWV0ZXJzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3NvbWV0aGluZ19lbHNlJ10uY29udmVydGVyLCBjbGluaWMuc3RyX2NvbnZlcnRlcikKKworICAgIGRlZiBkaXNhYmxlZF90ZXN0X2NvbnZlcnRlcl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9MSkiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcC5jb252ZXJ0ZXIuYXJnc1snYWxsb3dfZmQnXSkKKworICAgIGRlZiB0ZXN0X3BhcmFtX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0IGFzIG9zX3N0YXRfZm4gLT4gb2JqZWN0KGRvY19kZWZhdWx0PSdzdGF0X3Jlc3VsdCcpCisKKyAgIHBhdGg6IHN0cgorICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQiIiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiUGF0aCB0byBiZSBleGFtaW5lZCIsIHAuZG9jc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLnJldHVybl9jb252ZXJ0ZXIuZG9jX2RlZmF1bHQsICdzdGF0X3Jlc3VsdCcpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdCBhcyBvc19zdGF0X2ZuCisKKyAgIHBhdGg6IHN0cgorICAgICAgIFBhdGggdG8gYmUgZXhhbWluZWQKKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisKK29zLnN0YXQocGF0aCkKKyAgcGF0aAorICAgIFBhdGggdG8gYmUgZXhhbWluZWQKKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9wYXJhbWV0ZXJzX2luX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICB4OiBpbnQKKyAgICAgRG9jdW1lbnRhdGlvbiBmb3IgeC4KKyAgeTogaW50CisKK1RoaXMgaXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIGZvby4KKworT2theSwgd2UncmUgZG9uZSBoZXJlLgorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZm9vLgorCitmb28uYmFyKHgsIHkpCisgIHgKKyAgICBEb2N1bWVudGF0aW9uIGZvciB4LgorCitPa2F5LCB3ZSdyZSBkb25lIGhlcmUuCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX3JlZ3Jlc3Npb25fc3BlY2lhbF9jaGFyYWN0ZXJfaW5fcGFyYW1ldGVyX2NvbHVtbl9vZl9kb2NzdHJpbmdfZmlyc3RfbGluZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0CisgICAgcGF0aDogc3RyCitUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcy5zdGF0KHBhdGgpXG5cblRoaXMvdXNlZCB0byBicmVhayBDbGluaWMhIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfY19uYW1lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3Muc3RhdCBhcyBvc19zdGF0X2ZuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgib3Nfc3RhdF9mbiIsIGZ1bmN0aW9uLmNfYmFzZW5hbWUpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fY29udmVydGVyKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3Muc3RhdCAtPiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnVuY3Rpb24ucmV0dXJuX2NvbnZlcnRlciwgY2xpbmljLmludF9yZXR1cm5fY29udmVydGVyKQorCisgICAgZGVmIHRlc3Rfc3RhcihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgICpcbiAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZLCBwLmtpbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcC5ncm91cCkKKworICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSB3aW5kb3dcbndpbmRvdy5ib3JkZXJcbiBbXG4gbHMgOiBpbnRcbiBdXG4gL1xuIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2xzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwLmdyb3VwKQorCisgICAgZGVmIHRlc3RfbGVmdF9ncm91cChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGN1cnNlcworY3Vyc2VzLndpbmRvdy5hZGRjaAorICAgWworICAgeTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHg6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5JywgLTEpLCAoJ3gnLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHInLCAxKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24uZG9jc3RyaW5nLnN0cmlwKCksICIiIgorY3Vyc2VzLndpbmRvdy5hZGRjaChbeSwgeCxdIGNoLCBbYXR0cl0pCisgIHkKKyAgICBZLWNvb3JkaW5hdGUuCisgIHgKKyAgICBYLWNvb3JkaW5hdGUuCisgIGNoCisgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKyAgYXR0cgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAiIiIuc3RyaXAoKSkKKworICAgIGRlZiB0ZXN0X25lc3RlZF9ncm91cHMoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBjdXJzZXMKK2N1cnNlcy53aW5kb3cuaW1hZ2luYXJ5CisgICBbCisgICBbCisgICB5MTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHkyOiBpbnQKKyAgICAgWS1jb29yZGluYXRlLgorICAgXQorICAgeDE6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICB4MjogaW50CisgICAgIFgtY29vcmRpbmF0ZS4KKyAgIF0KKyAgIGNoOiBjaGFyCisgICAgIENoYXJhY3RlciB0byBhZGQuCisgICBbCisgICBhdHRyMTogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjI6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHIzOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBbCisgICBhdHRyNDogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgYXR0cjU6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHI2OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBdCisgICBdCisgICAvCisiIiIpCisgICAgICAgIGZvciBuYW1lLCBncm91cCBpbiAoCisgICAgICAgICAgICAoJ3kxJywgLTIpLCAoJ3kyJywgLTIpLAorICAgICAgICAgICAgKCd4MScsIC0xKSwgKCd4MicsIC0xKSwKKyAgICAgICAgICAgICgnY2gnLCAwKSwKKyAgICAgICAgICAgICgnYXR0cjEnLCAxKSwgKCdhdHRyMicsIDEpLCAoJ2F0dHIzJywgMSksCisgICAgICAgICAgICAoJ2F0dHI0JywgMiksICgnYXR0cjUnLCAyKSwgKCdhdHRyNicsIDIpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzW25hbWVdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ3JvdXAsIGdyb3VwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtpbmQsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmN0aW9uLmRvY3N0cmluZy5zdHJpcCgpLCAiIiIKK2N1cnNlcy53aW5kb3cuaW1hZ2luYXJ5KFtbeTEsIHkyLF0geDEsIHgyLF0gY2gsIFthdHRyMSwgYXR0cjIsIGF0dHIzLCBbYXR0cjQsIGF0dHI1LCBhdHRyNl1dKQorICB5MQorICAgIFktY29vcmRpbmF0ZS4KKyAgeTIKKyAgICBZLWNvb3JkaW5hdGUuCisgIHgxCisgICAgWC1jb29yZGluYXRlLgorICB4MgorICAgIFgtY29vcmRpbmF0ZS4KKyAgY2gKKyAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICBhdHRyMQorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHIyCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjMKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNAorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI1CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjYKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgICAgICAgICAgICAgICIiIi5zdHJpcCgpKQorCisgICAgZGVmIHBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKHNlbGYsIHMpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uKHMpCisgICAgICAgIHJldHVybiBzdGRvdXQuZ2V0dmFsdWUoKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fdHdvX3RvcF9ncm91cHNfb25fbGVmdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28udHdvX3RvcF9ncm91cHNfb25fbGVmdAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywKKyAgICAgICAgICAgICgnRXJyb3Igb24gbGluZSAwOlxuJworICAgICAgICAgICAgJ0Z1bmN0aW9uIHR3b190b3BfZ3JvdXBzX29uX2xlZnQgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlIDIpXG4nKSkKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3R3b190b3BfZ3JvdXBzX29uX3JpZ2h0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLnR3b190b3BfZ3JvdXBzX29uX3JpZ2h0CisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX3BhcmFtZXRlcl9hZnRlcl9ncm91cF9vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5wYXJhbWV0ZXJfYWZ0ZXJfZ3JvdXBfb25fcmlnaHQKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZ3JvdXBfYWZ0ZXJfcGFyYW1ldGVyX29uX2xlZnQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZ3JvdXBfYWZ0ZXJfcGFyYW1ldGVyX29uX2xlZnQKKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZW1wdHlfZ3JvdXBfb25fbGVmdChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5lbXB0eV9ncm91cAorICAgIFsKKyAgICBbCisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICBwYXJhbTogaW50CisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19lbXB0eV9ncm91cF9vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5lbXB0eV9ncm91cAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgWworICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9ub19wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisKK0RvY3N0cmluZworCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkRvY3N0cmluZ1xuXG5mb28uYmFyKCkiLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9tb2R1bGVfbGluZShzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIgPT4gaW50CisgICAgLworIiIiKQorCisgICAgZGVmIHRlc3RfaWxsZWdhbF9jX2Jhc2VuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhciBhcyA5MzUKKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc3RhcihzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhvdXRfaW5pdGlhbF9wYXJhbWV0ZXJzX29yX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aG91dF9pbml0aWFsX3BhcmFtZXRlcnNfd2l0aF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgKgorRG9jc3RyaW5nIGhlcmUuCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aF9pbml0aWFsX3BhcmFtZXRlcnNfd2l0aG91dF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgdGhpczogaW50CisgICAgKgorIiIiKQorCisgICAgZGVmIHRlc3RfcGFyYW1ldGVyc19yZXF1aXJlZF9hZnRlcl9zdGFyX3dpdGhfaW5pdGlhbF9wYXJhbWV0ZXJzX2FuZF9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgdGhpczogaW50CisgICAgKgorRG9jc3RyaW5nLgorIiIiKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3NsYXNoKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIC8KKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9taXhfc3Rhcl9hbmRfc2xhc2goc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICB4OiBpbnQKKyAgIHk6IGludAorICAgKgorICAgejogaW50CisgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX25vdF9wZXJtaXR0ZWRfYWZ0ZXJfc2xhc2hfZm9yX25vdyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAvCisgICAgeDogaW50CisiIiIpCisKKyAgICBkZWYgdGVzdF9mdW5jdGlvbl9ub3RfYXRfY29sdW1uXzAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKKyAgbW9kdWxlIGZvbworICBmb28uYmFyCisgICAgeDogaW50CisgICAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgorICAgICoKKyAgICB5OiBzdHIKKyAgTm90IGF0IGNvbHVtbiAwIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIiIgorTm90IGF0IGNvbHVtbiAwIQorCitmb28uYmFyKHgsICosIHkpCisgIHgKKyAgICBOZXN0ZWQgZG9jc3RyaW5nIGhlcmUsIGdvZXRoLgorIiIiLnN0cmlwKCksIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9yZWdyZXNzaW9uX3NwZWNpYWxfY2hhcmFjdGVyX2luX3BhcmFtZXRlcl9jb2x1bW5fb2ZfZG9jc3RyaW5nX2ZpcnN0X2xpbmUoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBvcworb3Muc3RhdAorICAgIHBhdGg6IHN0cgorVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyEKKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiVGhpcy91c2VkIHRvIGJyZWFrIENsaW5pYyFcblxub3Muc3RhdChwYXRoKSIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2RpcmVjdGl2ZShzZWxmKToKKyAgICAgICAgYyA9IEZha2VDbGluaWMoKQorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoYykKKyAgICAgICAgcGFyc2VyLmZsYWcgPSBGYWxzZQorICAgICAgICBwYXJzZXIuZGlyZWN0aXZlc1snc2V0ZmxhZyddID0gbGFtYmRhIDogc2V0YXR0cihwYXJzZXIsICdmbGFnJywgVHJ1ZSkKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2soInNldGZsYWciKQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXJzZXIuZmxhZykKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jb252ZXJ0ZXJzKHNlbGYpOgorICAgICAgICBibG9jayA9IHNlbGYucGFyc2UoJ21vZHVsZSBvc1xub3MuYWNjZXNzXG4gICBwYXRoOiAicyInKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoKGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ3BhdGgnXSkuY29udmVydGVyLCBjbGluaWMuc3RyX2NvbnZlcnRlcikKKworICAgIGRlZiBwYXJzZShzZWxmLCB0ZXh0KToKKyAgICAgICAgYyA9IEZha2VDbGluaWMoKQorICAgICAgICBwYXJzZXIgPSBEU0xQYXJzZXIoYykKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2sodGV4dCkKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICByZXR1cm4gYmxvY2sKKworICAgIGRlZiBwYXJzZV9mdW5jdGlvbihzZWxmLCB0ZXh0KToKKyAgICAgICAgYmxvY2sgPSBzZWxmLnBhcnNlKHRleHQpCisgICAgICAgIHMgPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIGFzc2VydCBsZW4ocykgPT0gMgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzWzBdLCBjbGluaWMuTW9kdWxlKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzWzFdLCBjbGluaWMuRnVuY3Rpb24pCisgICAgICAgIHJldHVybiBzWzFdCisKKyAgICBkZWYgdGVzdF9zY2FmZm9sZGluZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHJlcHIgb24gc3BlY2lhbCB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy51bnNwZWNpZmllZCksICc8VW5zcGVjaWZpZWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy5OVUxMKSwgJzxOdWxsPicpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgZmFpbCBmYWlscworICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBjbGluaWMuZmFpbCgnVGhlIGlnbG9vcyBhcmUgbWVsdGluZyEnLCBmaWxlbmFtZT0nY2xvd24udHh0JywgbGluZV9udW1iZXI9NjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdFcnJvciBpbiBmaWxlICJjbG93bi50eHQiIG9uIGxpbmUgNjk6XG5UaGUgaWdsb29zIGFyZSBtZWx0aW5nIVxuJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2JrZmlsZS5weSBiL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKaW5kZXggMGU4OTVmMi4uNTgyNDZmYSAxMDA2NDQKLS0tIGEvVG9vbHMvZnJlZXplL2JrZmlsZS5weQorKysgYi9Ub29scy9mcmVlemUvYmtmaWxlLnB5CkBAIC03LDExICs3LDExIEBACiAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBmaWxlICsgJ34nCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLl9fYmFja3VwKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZSwgc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuX19iYWNrdXAgPSBOb25lCiAgICAgICAgIHNlbGYuX19maWxlID0gX29yaWdfb3BlbihmaWxlLCBtb2RlLCBidWZzaXplKQogICAgICAgICBzZWxmLmNsb3NlZCA9IHNlbGYuX19maWxlLmNsb3NlZApkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggYTQxMjY3YS4uNDc5Y2EzYyAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAjIGRlZmF1bHQgdGhlIGV4Y2x1ZGUgbGlzdCBmb3IgZWFjaCBwbGF0Zm9ybQogICAgIGlmIHdpbjogZXhjbHVkZSA9IGV4Y2x1ZGUgKyBbCiAgICAgICAgICdkb3MnLCAnZG9zcGF0aCcsICdtYWMnLCAnbWFjcGF0aCcsICdtYWNmcycsICdNQUNGUycsICdwb3NpeCcsCi0gICAgICAgICdvczInLCAnY2UnLAorICAgICAgICAnY2UnLAogICAgICAgICBdCiAKICAgICBmYWlsX2ltcG9ydCA9IGV4Y2x1ZGVbOl0KQEAgLTMxMSw3ICszMTEsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihvZGlyKQogICAgICAgICAgICAgcHJpbnQoIkNyZWF0ZWQgb3V0cHV0IGRpcmVjdG9yeSIsIG9kaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHVzYWdlKCclczogbWtkaXIgZmFpbGVkICglcyknICUgKG9kaXIsIHN0cihtc2cpKSkKICAgICBiYXNlID0gJycKICAgICBpZiBvZGlyOgpkaWZmIC0tZ2l0IGEvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weSBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKaW5kZXggMWMyYzNjYi4uMmFkMjJlMiAxMDA2NDQKLS0tIGEvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQorKysgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CkBAIC05MzksMjEgKzkzOSwyNiBAQAogY2xhc3MgUHlTZXRPYmplY3RQdHIoUHlPYmplY3RQdHIpOgogICAgIF90eXBlbmFtZSA9ICdQeVNldE9iamVjdCcKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZHVtbXlfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gZ2RiLmxvb2t1cF9nbG9iYWxfc3ltYm9sKCdfUHlTZXRfRHVtbXknKS52YWx1ZSgpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGR1bW15X3B0ciA9IHNlbGYuX2R1bW15X2tleSgpCisgICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSArIDEpOgorICAgICAgICAgICAgc2V0ZW50cnkgPSB0YWJsZVtpXQorICAgICAgICAgICAga2V5ID0gc2V0ZW50cnlbJ2tleSddCisgICAgICAgICAgICBpZiBrZXkgIT0gMCBhbmQga2V5ICE9IGR1bW15X3B0cjoKKyAgICAgICAgICAgICAgICB5aWVsZCBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCisKICAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CiAgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKICAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKICAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCclcyguLi4pJyAlIHNlbGYuc2FmZV90cF9uYW1lKCkpCiAgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQogCi0gICAgICAgIG1lbWJlcnMgPSBbXQotICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKLSAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykrMSk6Ci0gICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCi0gICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KLSAgICAgICAgICAgIGlmIGtleSAhPSAwOgotICAgICAgICAgICAgICAgIGtleV9wcm94eSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkucHJveHl2YWwodmlzaXRlZCkKLSAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKLSAgICAgICAgICAgICAgICAgICAgbWVtYmVycy5hcHBlbmQoa2V5X3Byb3h5KQorICAgICAgICBtZW1iZXJzID0gKGtleS5wcm94eXZhbCh2aXNpdGVkKSBmb3Iga2V5IGluIHNlbGYpCiAgICAgICAgIGlmIHNlbGYuc2FmZV90cF9uYW1lKCkgPT0gJ2Zyb3plbnNldCc6CiAgICAgICAgICAgICByZXR1cm4gZnJvemVuc2V0KG1lbWJlcnMpCiAgICAgICAgIGVsc2U6CkBAIC05ODIsMTggKzk4NywxMSBAQAogCiAgICAgICAgIG91dC53cml0ZSgneycpCiAgICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICB0YWJsZSA9IHNlbGYuZmllbGQoJ3RhYmxlJykKLSAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmZpZWxkKCdtYXNrJykrMSk6Ci0gICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCi0gICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KLSAgICAgICAgICAgIGlmIGtleSAhPSAwOgotICAgICAgICAgICAgICAgIHB5b3Bfa2V5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KQotICAgICAgICAgICAgICAgIGtleV9wcm94eSA9IHB5b3Bfa2V5LnByb3h5dmFsKHZpc2l0ZWQpICMgRklYTUUhCi0gICAgICAgICAgICAgICAgaWYga2V5X3Byb3h5ICE9ICc8ZHVtbXkga2V5Pic6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHB5b3Bfa2V5LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBmb3Iga2V5IGluIHNlbGY6CisgICAgICAgICAgICBpZiBub3QgZmlyc3Q6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICBmaXJzdCA9IEZhbHNlCisgICAgICAgICAgICBrZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCiAgICAgICAgIG91dC53cml0ZSgnfScpCiAKICAgICAgICAgaWYgdHBfbmFtZSAhPSAnc2V0JzoKQEAgLTExNzcsNyArMTE3NSw5IEBACiAgICAgICAgICMgQ29udmVydCB0aGUgaW50IGNvZGUgcG9pbnRzIHRvIHVuaWNvZGUgY2hhcmFjdGVycywgYW5kIGdlbmVyYXRlIGEKICAgICAgICAgIyBsb2NhbCB1bmljb2RlIGluc3RhbmNlLgogICAgICAgICAjIFRoaXMgc3BsaXRzIHN1cnJvZ2F0ZSBwYWlycyBpZiBzaXplb2YoUHlfVU5JQ09ERSkgaXMgMiBoZXJlIChpbiBnZGIpLgotICAgICAgICByZXN1bHQgPSB1Jycuam9pbihbX3VuaWNocih1Y3MpIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQorICAgICAgICByZXN1bHQgPSB1Jycuam9pbihbCisgICAgICAgICAgICAoX3VuaWNocih1Y3MpIGlmIHVjcyA8PSAweDEwZmZmZiBlbHNlICdcdWZmZmQnKQorICAgICAgICAgICAgZm9yIHVjcyBpbiBQeV9VTklDT0RFc10pCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CmRpZmYgLS1naXQgYS9Ub29scy9pMThuL21zZ2ZtdC5weSBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CmluZGV4IGNkOTA2OTEuLmIwNzUxYTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5CisrKyBiL1Rvb2xzL2kxOG4vbXNnZm10LnB5CkBAIC0yMTgsNyArMjE4LDcgQEAKICAgICAgICAgaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1WJywgJy0tdmVyc2lvbicpOgotICAgICAgICAgICAgcHJpbnQoIm1zZ2ZtdC5weSIsIF9fdmVyc2lvbl9fLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBwcmludCgibXNnZm10LnB5IiwgX192ZXJzaW9uX18pCiAgICAgICAgICAgICBzeXMuZXhpdCgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1vJywgJy0tb3V0cHV0LWZpbGUnKToKICAgICAgICAgICAgIG91dGZpbGUgPSBhcmcKZGlmZiAtLWdpdCBhL1Rvb2xzL2ltcG9ydGJlbmNoL2ltcG9ydGJlbmNoLnB5IGIvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkKaW5kZXggNzE0YzBlNC4uNjM1ZGQ1NiAxMDA2NDQKLS0tIGEvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkKKysrIGIvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkKQEAgLTQ2LDggKzQ2LDcgQEAKICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnJwogICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIGJ1aWx0aW5fbW9kKHNlY29uZHMsIHJlcGVhdCk6CkBAIC01Niw5ICs1NSw4IEBACiAgICAgaWYgbmFtZSBpbiBzeXMubW9kdWxlczoKICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCiAgICAgIyBSZWx5aW5nIG9uIGJ1aWx0LWluIGltcG9ydGVyIGJlaW5nIGltcGxpY2l0LgotICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICB5aWVsZCByZXN1bHQKKyAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBzb3VyY2Vfd29fYnl0ZWNvZGUoc2Vjb25kcywgcmVwZWF0KToKQEAgLTczLDkgKzcxLDggQEAKICAgICAgICAgICAgIGxvYWRlciA9IChpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMsIFRydWUpCiAgICAgICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vayhsb2FkZXIpKQotICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKICAgICBmaW5hbGx5OgogICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCiAKQEAgLTg5LDkgKzg2LDggQEAKICAgICAgICAgICAgIG9zLnVubGluayhieXRlY29kZV9wYXRoKQogICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IFRydWUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gRmFsc2UKIApAQCAtMTI3LDggKzEyMyw3IEBACiAgICAgICAgIGRlZiBjbGVhbnVwKCk6CiAgICAgICAgICAgICBzeXMubW9kdWxlcy5wb3AobmFtZSkKICAgICAgICAgICAgIG9zLnVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKSkKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBjbGVhbnVwLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgY2xlYW51cCwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogCiAgICAgd3JpdGluZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGluZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXy5mb3JtYXQobmFtZSkpCkBAIC0xNDgsOSArMTQzLDggQEAKICAgICAgICAgc3lzLnBhdGhfaG9va3MuYXBwZW5kKGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlci5wYXRoX2hvb2sobG9hZGVyKSkKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGFzc2VydCBvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1tuYW1lXSkpCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgX3VzaW5nX2J5dGVjb2RlKG1vZHVsZSk6CkBAIC0xNTgsOSArMTUyLDggQEAKICAgICBkZWYgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrKHNlY29uZHMsIHJlcGVhdCk6CiAgICAgICAgICIiIlNvdXJjZSB3LyBieXRlY29kZToge30iIiIKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1vZHVsZS5fX2ZpbGVfXykKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAgICAgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18gPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzaW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fLmZvcm1hdChuYW1lKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weSBiL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQppbmRleCA1MzBiYzc5Li43MTJlNTg0IDEwMDY0NAotLS0gYS9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKKysrIGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CkBAIC0yNCw2ICsyNCw4IEBACiAgICAgdHJ5OgogICAgICAgICByZXR1cm4gb3BlbihmbiwgbW9kZSwgZW5jb2Rpbmc9ZW5jb2Rpbmcgb3IgVEVYVF9FTkNPRElORykKICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBpZiAncicgaW4gbW9kZToKKyAgICAgICAgICAgIG1vZGUgKz0gJ1UnICMgJ1UnIG1vZGUgaXMgbmVlZGVkIG9ubHkgaW4gUHl0aG9uIDIueAogICAgICAgICByZXR1cm4gb3BlbihmbiwgbW9kZSkKIAogZGVmIGdldF9maWxlX3NpemVzKCk6CkBAIC0zODAsNyArMzgyLDcgQEAKICAgICAgICAgICAgIGYud3JpdGUob3MudXJhbmRvbShzaXplKSkKICAgICAjIFRleHQgZmlsZXMKICAgICBjaHVuayA9IFtdCi0gICAgd2l0aCB0ZXh0X29wZW4oX19maWxlX18sICJyVSIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKKyAgICB3aXRoIHRleHRfb3BlbihfX2ZpbGVfXywgInIiLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CiAgICAgICAgIGZvciBsaW5lIGluIGY6CiAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMgPGlvYmVuY2ggdGV4dCBjaHVuayBtYXJrZXI+Iik6CiAgICAgICAgICAgICAgICAgYnJlYWsKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS9tc2kucHkgYi9Ub29scy9tc2kvbXNpLnB5CmluZGV4IDVlZDAyNWQuLjY5NDg3NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL21zaS9tc2kucHkKKysrIGIvVG9vbHMvbXNpL21zaS5weQpAQCAtOTksNyArOTksMTAgQEAKICAgICAnX211bHRpcHJvY2Vzc2luZy5weWQnLAogICAgICdfbHptYS5weWQnLAogICAgICdfZGVjaW1hbC5weWQnLAotICAgICdfdGVzdGJ1ZmZlci5weWQnCisgICAgJ190ZXN0YnVmZmVyLnB5ZCcsCisgICAgJ19zaGEzLnB5ZCcsCisgICAgJ190ZXN0aW1wb3J0bXVsdGlwbGUucHlkJywKKyAgICAnX292ZXJsYXBwZWQucHlkJywKIF0KIAogIyBXZWxsLWtub3duIGNvbXBvbmVudCBVVUlEcwpAQCAtMTE5LDYgKzEyMiw3IEBACiAgICAgIjMxIjoiezRhZmNiYTBiLTEzZTQtNDdjMy1iZWJlLTQ3NzQyOGI0NjkxM30iLAogICAgICIzMiI6InszZmY5NTMxNS0xMDk2LTRkMzEtYmQ4Ni02MDFkNTQzOGFkNWV9IiwKICAgICAiMzMiOiJ7Zjc1ODFjYTQtZDM2OC00ZWVhLThmODItZDQ4YzY0YzRmMDQ3fSIsCisgICAgIjM0IjoiezdBMEM1ODEyLTI1ODMtNDBEOS1CQ0JCLUNENzQ4NUYxMTM3N30iLAogICAgIH0gW21ham9yK21pbm9yXQogCiAjIENvbXB1dGUgdGhlIG5hbWUgdGhhdCBTcGhpbnggZ2l2ZXMgdG8gdGhlIGRvY2ZpbGUKQEAgLTQxNyw2ICs0MjEsOCBAQAogCiAgICAgY29tcGlsZWFyZ3MgPSByJy1XaSAiW1RBUkdFVERJUl1MaWJcY29tcGlsZWFsbC5weSIgLWYgLXggImJhZF9jb2Rpbmd8YmFkc3ludGF4fHNpdGUtcGFja2FnZXN8cHkyX3xsaWIydG8zXFx0ZXN0c3x2ZW52XFxzY3JpcHRzIiAiW1RBUkdFVERJUl1MaWIiJwogICAgIGxpYjJ0bzNhcmdzID0gcictYyAiaW1wb3J0IGxpYjJ0bzMucHlncmFtLCBsaWIydG8zLnBhdGNvbXA7bGliMnRvMy5wYXRjb21wLlBhdHRlcm5Db21waWxlcigpIicKKyAgICB1cGRhdGVwaXBhcmdzID0gcictbSBlbnN1cmVwaXAgLVUnCisgICAgcmVtb3ZlcGlwYXJncyA9IHInLW0gZW5zdXJlcGlwIC1yJyAjIGRvZXMgbm90IHlldCB3b3JrCiAgICAgIyBTZWUgIkN1c3RvbUFjdGlvbiBUYWJsZSIKICAgICBhZGRfZGF0YShkYiwgIkN1c3RvbUFjdGlvbiIsIFsKICAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVGaXJzdFNlcXVlbmNlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlVGV4dERhdGEgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVQcm9wZXJ0eQpAQCAtNDMzLDYgKzQzOSw5IEBACiAgICAgICAgICgiQ29tcGlsZVB5YyIsIDE4LCAicHl0aG9uLmV4ZSIsIGNvbXBpbGVhcmdzKSwKICAgICAgICAgKCJDb21waWxlUHlvIiwgMTgsICJweXRob24uZXhlIiwgIi1PICIrY29tcGlsZWFyZ3MpLAogICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgMTgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAorICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZUluU2NyaXB0ICgxMDI0KTsgcnVuIGR1cmluZyBhY3R1YWwgaW5zdGFsbGF0aW9uCisgICAgICAgICgiVXBkYXRlUGlwIiwgMTgrMTAyNCwgInB5dGhvbi5leGUiLCB1cGRhdGVwaXBhcmdzKSwKKyAgICAgICAgIygiUmVtb3ZlUGlwIiwgMTgsICJweXRob24uZXhlIiwgcmVtb3ZlcGlwYXJncyksCiAgICAgICAgIF0pCiAKICAgICAjIFVJIFNlcXVlbmNlcywgc2VlICJJbnN0YWxsVUlTZXF1ZW5jZSBUYWJsZSIsICJVc2luZyBhIFNlcXVlbmNlIFRhYmxlIgpAQCAtNDU5LDcgKzQ2OCw3IEBACiAKICAgICAjIFByZXBlbmQgVEFSR0VURElSIHRvIHRoZSBzeXN0ZW0gcGF0aCwgYW5kIHJlbW92ZSBpdCBvbiB1bmluc3RhbGwuCiAgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCi0gICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCisgICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W1RBUkdFVERJUl1TY3JpcHRzO1t+XSIsICJSRUdJU1RSWS5wYXRoIildKQogCiAgICAgIyBFeGVjdXRlIFNlcXVlbmNlcwogICAgIGFkZF9kYXRhKGRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCkBAIC00NjksNiArNDc4LDEyIEBACiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvV2luZG93cyIsICdMQVVOQ0hFUkRJUj0iIiBhbmQgJyArIHN5czMyY29uZCwgNzUzKSwKICAgICAgICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9UYXJnZXQiLCAnTEFVTkNIRVJESVI9IiIgYW5kIG5vdCAnICsgc3lzMzJjb25kLCA3NTQpLAogICAgICAgICAgICAgICgiVXBkYXRlRWRpdElETEUiLCBOb25lLCAxMDUwKSwKKyAgICAgICAgICAgICAjIHJ1biBjb21tYW5kIGlmIGluc3RhbGwgc3RhdGUgb2YgcGlwIGNoYW5nZXMgdG8gSU5TVEFMTFNUQVRFX0xPQ0FMCisgICAgICAgICAgICAgIyBydW4gYWZ0ZXIgSW5zdGFsbEZpbGVzCisgICAgICAgICAgICAgKCJVcGRhdGVQaXAiLCAiJnBpcD0zIiwgNDAwMSksCisgICAgICAgICAgICAgIyByZW1vdmUgcGlwIHdoZW4gc3RhdGUgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfQUJTRU5UCisgICAgICAgICAgICAgIyBydW4gYmVmb3JlIFJlbW92ZUZpbGVzCisgICAgICAgICAgICAgIygiUmVtb3ZlUGlwIiwgIiZwaXA9MiIsIDM0OTkpLAogICAgICAgICAgICAgICgiQ29tcGlsZVB5YyIsICJDT01QSUxFQUxMIiwgNjgwMCksCiAgICAgICAgICAgICAgKCJDb21waWxlUHlvIiwgIkNPTVBJTEVBTEwiLCA2ODAxKSwKICAgICAgICAgICAgICAoIkNvbXBpbGVHcmFtbWFyIiwgIkNPTVBJTEVBTEwiLCA2ODAyKSwKQEAgLTc0OCw3ICs3NjMsOCBAQAogICAgIGFkdmFuY2VkID0gUHlEaWFsb2coZGIsICJBZHZhbmNlZERsZyIsIHgsIHksIHcsIGgsIG1vZGFsLCB0aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21waWxlUHljIiwgIk9rIiwgIk9rIikKICAgICBhZHZhbmNlZC50aXRsZSgiQWR2YW5jZWQgT3B0aW9ucyBmb3IgW1Byb2R1Y3ROYW1lXSIpCi0gICAgIyBBIHJhZGlvIGdyb3VwIHdpdGggdHdvIG9wdGlvbnM6IGFsbHVzZXJzLCBqdXN0bWUKKworICAgICMgQSBjaGVja2JveCB3aGV0aGVyIHRvIGJ1aWxkIHB5YyBmaWxlcwogICAgIGFkdmFuY2VkLmNoZWNrYm94KCJDb21waWxlUHljIiwgMTM1LCA2MCwgMjMwLCA1MCwgMywKICAgICAgICAgICAgICAgICAgICAgICAiQ09NUElMRUFMTCIsICJDb21waWxlIC5weSBmaWxlcyB0byBieXRlIGNvZGUgYWZ0ZXIgaW5zdGFsbGF0aW9uIiwgIk9rIikKIApAQCAtODQ1LDcgKzg2MSw4IEBACiAgICAgIyAoaS5lLiBhZGRpdGlvbmFsIFB5dGhvbiBsaWJyYXJpZXMpIG5lZWQgdG8gZm9sbG93IHRoZSBwYXJlbnQgZmVhdHVyZS4KICAgICAjIEZlYXR1cmVzIHRoYXQgaGF2ZSBubyBhZHZlcnRpc2VtZW50IHRyaWdnZXIgKGUuZy4gdGhlIHRlc3Qgc3VpdGUpCiAgICAgIyBtdXN0IG5vdCBzdXBwb3J0IGFkdmVydGlzZW1lbnQKLSAgICBnbG9iYWwgZGVmYXVsdF9mZWF0dXJlLCB0Y2x0aywgaHRtbGZpbGVzLCB0b29scywgdGVzdHN1aXRlLCBleHRfZmVhdHVyZSwgcHJpdmF0ZV9jcnQsIHByZXBlbmRfcGF0aAorICAgIGdsb2JhbCBkZWZhdWx0X2ZlYXR1cmUsIHRjbHRrLCBodG1sZmlsZXMsIHRvb2xzLCB0ZXN0c3VpdGUKKyAgICBnbG9iYWwgZXh0X2ZlYXR1cmUsIHByaXZhdGVfY3J0LCBwcmVwZW5kX3BhdGgsIHVwZGF0ZV9waXAKICAgICBkZWZhdWx0X2ZlYXR1cmUgPSBGZWF0dXJlKGRiLCAiRGVmYXVsdEZlYXR1cmUiLCAiUHl0aG9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gSW50ZXJwcmV0ZXIgYW5kIExpYnJhcmllcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBkaXJlY3RvcnkgPSAiVEFSR0VURElSIikKQEAgLTg2Nyw4ICs4ODQsMTQgQEAKICAgICB0b29scyA9IEZlYXR1cmUoZGIsICJUb29scyIsICJVdGlsaXR5IFNjcmlwdHMiLAogICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKSIsIDksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yKQorICAgICMgcGlwIGluc3RhbGxhdGlvbiBpc24ndCBlbmFibGVkIGJ5IGRlZmF1bHQgdW50aWwgYSBjbGVhbiB1bmluc3RhbGwgcHJvY2VkdXJlCisgICAgIyBiZWNvbWVzIHBvc3NpYmxlCisgICAgdXBkYXRlX3BpcCA9IEZlYXR1cmUoZGIsICJwaXAiLCAicGlwIiwKKyAgICAgICAgICAgICAgICAgICAgIkluc3RhbGwgKG9yIHVwZ3JhZGUgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pIHBpcCwgIgorICAgICAgICAgICAgICAgICAgICAiYSB0b29sIGZvciBpbnN0YWxsaW5nIGFuZCBtYW5hZ2luZyBQeXRob24gcGFja2FnZXMuIiwgMTEsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgsIGxldmVsPTIpCiAgICAgdGVzdHN1aXRlID0gRmVhdHVyZShkYiwgIlRlc3RzdWl0ZSIsICJUZXN0IHN1aXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKSIsIDExLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pIiwgMTMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4KQogICAgICMgcHJlcGVuZF9wYXRoIGlzIGFuIGFkZGl0aW9uYWwgZmVhdHVyZSB3aGljaCBpcyB0byBiZSBvZmYgYnkgZGVmYXVsdC4KICAgICAjIFNpbmNlIHRoZSBkZWZhdWx0IGxldmVsIGZvciB0aGUgYWJvdmUgZmVhdHVyZXMgaXMgMSwgdGhpcyBuZWVkcyB0byBiZQpAQCAtODc2LDcgKzg5OSw3IEBACiAgICAgcHJlcGVuZF9wYXRoID0gRmVhdHVyZShkYiwgIlByZXBlbmRQYXRoIiwgIkFkZCBweXRob24uZXhlIHRvIFBhdGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlByZXBlbmQgW1RBUkdFVERJUl0gdG8gdGhlIHN5c3RlbSBQYXRoIHZhcmlhYmxlLiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyBhbGxvd3MgeW91IHRvIHR5cGUgJ3B5dGhvbicgaW50byBhIGNvbW1hbmQgIgotICAgICAgICAgICAgICAgICAgICAgICAgInByb21wdCB3aXRob3V0IG5lZWRpbmcgdGhlIGZ1bGwgcGF0aC4iLCAxMywKKyAgICAgICAgICAgICAgICAgICAgICAgICJwcm9tcHQgd2l0aG91dCBuZWVkaW5nIHRoZSBmdWxsIHBhdGguIiwgMTUsCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBkZWZhdWx0X2ZlYXR1cmUsIGF0dHJpYnV0ZXM9Mnw4LAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKIApAQCAtOTU0LDggKzk3Nyw2IEBACiAgICAgIyBBZGQgYWxsIGV4ZWN1dGFibGVzLCBpY29ucywgdGV4dCBmaWxlcyBpbnRvIHRoZSBUQVJHRVRESVIgY29tcG9uZW50CiAgICAgcm9vdCA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIE5vbmUsIHNyY2RpciwgIlRBUkdFVERJUiIsICJTb3VyY2VEaXIiKQogICAgIGRlZmF1bHRfZmVhdHVyZS5zZXRfY3VycmVudCgpCi0gICAgaWYgbm90IG1zaWxpYi5XaW42NDoKLSAgICAgICAgcm9vdC5hZGRfZmlsZSgiJXMvdzl4cG9wZW4uZXhlIiAlIFBDQlVJTEQpCiAgICAgcm9vdC5hZGRfZmlsZSgiUkVBRE1FLnR4dCIsIHNyYz0iUkVBRE1FIikKICAgICByb290LmFkZF9maWxlKCJORVdTLnR4dCIsIHNyYz0iTWlzYy9ORVdTIikKICAgICBnZW5lcmF0ZV9saWNlbnNlKCkKQEAgLTEyNjksNiArMTI5MCwxMCBAQAogICAgICAgICAgICAgICAiezYwMjU0Q0E1LTk1M0ItMTFDRi04Qzk2LTAwQUEwMEI4NzA4Q30iLCAiUkVHSVNUUlkuZGVmIiksCiAgICAgICAgICAgICBdKQogCisgICAgIyBQQVRIRVhUCisgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCisgICAgICAgICAgICAgWygiUGF0aEV4dEFkZGl0aW9uIiwgIj0tKlBhdGhFeHQiLCAiW35dOy5QWSIsICJSRUdJU1RSWS5kZWYiKV0pCisKICAgICAjIFJlZ2lzdHJ5IGtleXMKICAgICBwcmVmaXggPSByIlNvZnR3YXJlXCVzUHl0aG9uXFB5dGhvbkNvcmVcJXMiICUgKHRlc3RwcmVmaXgsIHNob3J0X3ZlcnNpb24pCiAgICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCmRpZmYgLS1naXQgYS9Ub29scy9wYXJzZXIvdW5wYXJzZS5weSBiL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5CmluZGV4IGI1NWUyYzYuLjgzN2NkODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5CisrKyBiL1Rvb2xzL3BhcnNlci91bnBhcnNlLnB5CkBAIC0zMDcsNiArMzA3LDkgQEAKICAgICBkZWYgX05hbWUoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUodC5pZCkKIAorICAgIGRlZiBfTmFtZUNvbnN0YW50KHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIodC52YWx1ZSkpCisKICAgICBkZWYgX051bShzZWxmLCB0KToKICAgICAgICAgIyBTdWJzdGl0dXRlIG92ZXJmbG93aW5nIGRlY2ltYWwgbGl0ZXJhbCBmb3IgQVNUIGluZmluaXRpZXMuCiAgICAgICAgIHNlbGYud3JpdGUocmVwcih0Lm4pLnJlcGxhY2UoImluZiIsIElORlNUUikpCkBAIC01MTUsMTAgKzUxOCwxMCBAQAogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQogICAgICAgICAgICAgc2VsZi53cml0ZSgiKiIpCiAgICAgICAgICAgICBpZiB0LnZhcmFyZzoKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKHQudmFyYXJnKQotICAgICAgICAgICAgICAgIGlmIHQudmFyYXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKHQudmFyYXJnLmFyZykKKyAgICAgICAgICAgICAgICBpZiB0LnZhcmFyZy5hbm5vdGF0aW9uOgogICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YXJhcmdhbm5vdGF0aW9uKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnLmFubm90YXRpb24pCiAKICAgICAgICAgIyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCiAgICAgICAgIGlmIHQua3dvbmx5YXJnczoKQEAgLTUzNCwxMCArNTM3LDEwIEBACiAgICAgICAgIGlmIHQua3dhcmc6CiAgICAgICAgICAgICBpZiBmaXJzdDpmaXJzdCA9IEZhbHNlCiAgICAgICAgICAgICBlbHNlOiBzZWxmLndyaXRlKCIsICIpCi0gICAgICAgICAgICBzZWxmLndyaXRlKCIqKiIrdC5rd2FyZykKLSAgICAgICAgICAgIGlmIHQua3dhcmdhbm5vdGF0aW9uOgorICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiK3Qua3dhcmcuYXJnKQorICAgICAgICAgICAgaWYgdC5rd2FyZy5hbm5vdGF0aW9uOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIjogIikKLSAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmdhbm5vdGF0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5rd2FyZy5hbm5vdGF0aW9uKQogCiAgICAgZGVmIF9rZXl3b3JkKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQuYXJnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9SRUFETUUgYi9Ub29scy9zY3JpcHRzL1JFQURNRQppbmRleCBkNjVkMWZkLi5jNmIyMjgyIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL1JFQURNRQorKysgYi9Ub29scy9zY3JpcHRzL1JFQURNRQpAQCAtMiw2NCArMiw2OCBAQAogdXNlZnVsIHdoaWxlIGJ1aWxkaW5nLCBleHRlbmRpbmcgb3IgbWFuYWdpbmcgUHl0aG9uLiAgU29tZSAoZS5nLiwgZHV0cmVlIG9yIGxsbCkKIGFyZSBhbHNvIGdlbmVyYWxseSB1c2VmdWwgVU5JWCB0b29scy4KIAotMnRvMyAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCi1hbmFseXplX2R4cC5weSAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQotYnlleHQucHkgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCi1ieXRleWVhcnMucHkgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQotY2hlY2tweWMucHkgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcwotY2xlYW5mdXR1cmUucHkgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCi1jb21iaW5lcmVmcy5weSAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAotY29weXRpbWUucHkgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCi1jcmxmLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKLWRiMnBpY2tsZS5weSAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCi1kaWZmLnB5ICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKLWR1dHJlZS5weSAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCi1lcHRhZ3MucHkgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotZmluZF9yZWN1cnNpb25saW1pdC5weSAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCi1maW5kZGl2LnB5ICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycwotZmluZGxpbmtzdG8ucHkgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4Ci1maW5kbm9jb2RpbmcucHkgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCi1maXhjaWQucHkgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCi1maXhkaXYucHkgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCi1maXhoZWFkZXIucHkgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQotZml4bm90aWNlLnB5ICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcwotZml4cHMucHkgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKLWZ0cG1pcnJvci5weSAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0Ci1nb29nbGUucHkgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQotZ3Byb2YyaHRtbC5weSAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCi1oMnB5LnB5ICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCi1oaWdobGlnaHQucHkgICAgICAgICAgICBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIEhUTUwgb3V0cHV0Ci1pZGxlMyAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQotaWZkZWYucHkgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKLWxmY3IucHkgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQotbGlua3RyZWUucHkgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKLWxsbC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKLW1haWxlcmRhZW1vbi5weSAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQotbWFrZV9jdHlwZS5weSAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYwotbWQ1c3VtLnB5ICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcwotbWtyZWFsLnB5ICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKLW5kaWZmLnB5ICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQotbm0yZGVmLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKLW9iamdyYXBoLnB5ICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKLXBhcnNlZW50aXRpZXMucHkgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKLXBhdGNoY2hlY2sucHkgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZwotcGF0aGZpeC5weSAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKLXBkZXBzLnB5ICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCi1waWNrbGUyZGIucHkgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQotcGluZGVudC5weSAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cwotcHRhZ3MucHkgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLXB5ZG9jMyAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKLXB5c291cmNlLnB5ICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcwotcmVkZW1vLnB5ICAgICAgICAgICAgICAgQmFzaWMgcmVndWxhciBleHByZXNzaW9uIGRlbW9uc3RyYXRpb24gZmFjaWxpdHkKLXJlaW5kZW50LnB5ICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cwotcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCi1yZ3JlcC5weSAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQotcnVuX3Rlc3RzLnB5ICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKLXNlcnZlLnB5ICAgICAgICAgICAgICAgIFNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYwotc3VmZi5weSAgICAgICAgICAgICAgICAgU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Ci1zdm5lb2wucHkgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Ci10ZXhpMmh0bWwucHkgICAgICAgICAgICBDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAotdHJlZXN5bmMucHkgICAgICAgICAgICAgU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkaW9zeW5jcmF0aWMpCi11bnRhYmlmeS5weSAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKLXdpbl9hZGQycGF0aC5weSAgICAgICAgIEFkZCBQeXRob24gdG8gdGhlIHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKLXdoaWNoLnB5ICAgICAgICAgICAgICAgIEZpbmQgYSBwcm9ncmFtIGluICRQQVRICisydG8zICAgICAgICAgICAgICAgICAgICAgIE1haW4gc2NyaXB0IGZvciBydW5uaW5nIHRoZSAydG8zIGNvbnZlcnNpb24gdG9vbAorYWJpdHlwZS5weSAgICAgICAgICAgICAgICBDb252ZXJ0cyBhIEMgZmlsZSB0byB1c2UgdGhlIFBFUCAzODQgdHlwZSBkZWZpbml0aW9uIEFQSQorYW5hbHl6ZV9keHAucHkgICAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQorYnlleHQucHkgICAgICAgICAgICAgICAgICBQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KK2J5dGV5ZWFycy5weSAgICAgICAgICAgICAgUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKK2NoZWNrcHljLnB5ICAgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcworY2xlYW5mdXR1cmUucHkgICAgICAgICAgICBGaXggcmVkdW5kYW50IFB5dGhvbiBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKK2NvbWJpbmVyZWZzLnB5ICAgICAgICAgICAgQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQKK2NvcHl0aW1lLnB5ICAgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCitjcmxmLnB5ICAgICAgICAgICAgICAgICAgIENoYW5nZSBDUkxGIGxpbmUgZW5kaW5ncyB0byBMRiAoV2luZG93cyB0byBVbml4KQorZGIycGlja2xlLnB5ICAgICAgICAgICAgICBEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQorZGlmZi5weSAgICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKK2R1dHJlZS5weSAgICAgICAgICAgICAgICAgRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKK2VwdGFncy5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK2ZpbmRkaXYucHkgICAgICAgICAgICAgICAgQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKK2ZpbmRsaW5rc3RvLnB5ICAgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4CitmaW5kbm9jb2RpbmcucHkgICAgICAgICAgIEZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KK2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgICAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCitmaW5kLXVuYW1lLnB5ICAgICAgICAgICAgIExvb2sgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgaW4gdGhlIHNldHMgb2YgYWxsIFVuaWNvZGUgbmFtZXMKK2ZpeGNpZC5weSAgICAgICAgICAgICAgICAgTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcworZml4ZGl2LnB5ICAgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCitmaXhoZWFkZXIucHkgICAgICAgICAgICAgIEFkZCBzb21lIGNwcCBtYWdpYyB0byBhIEMgaW5jbHVkZSBmaWxlCitmaXhub3RpY2UucHkgICAgICAgICAgICAgIEZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKK2ZpeHBzLnB5ICAgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKK2Z0cG1pcnJvci5weSAgICAgICAgICAgICAgRlRQIG1pcnJvciBzY3JpcHQKK2dldC1yZW1vdGUtY2VydGlmaWNhdGUucHkgRmV0Y2ggdGhlIGNlcnRpZmljYXRlIHRoYXQgdGhlIHNlcnZlcihzKSBhcmUgcHJvdmlkaW5nIGluIFBFTSBmb3JtCitnb29nbGUucHkgICAgICAgICAgICAgICAgIE9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCitncHJvZjJodG1sLnB5ICAgICAgICAgICAgIFRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAoraDJweS5weSAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCitoaWdobGlnaHQucHkgICAgICAgICAgICAgIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggSFRNTCBvdXRwdXQKK2lkbGUzICAgICAgICAgICAgICAgICAgICAgTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKK2lmZGVmLnB5ICAgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKK2ltcG9ydF9kaWFnbm9zdGljcy5weSAgICAgTWlzY2VsbGFuZW91cyBkaWFnbm9zdGljcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0KK2xmY3IucHkgICAgICAgICAgICAgICAgICAgQ2hhbmdlIExGIGxpbmUgZW5kaW5ncyB0byBDUkxGIChVbml4IHRvIFdpbmRvd3MpCitsaW5rdHJlZS5weSAgICAgICAgICAgICAgIE1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCitsbGwucHkgICAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKK21haWxlcmRhZW1vbi5weSAgICAgICAgICAgUGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBtYWlsZXIgZGFlbW9ucyAoU2pvZXJkJkphY2spCittYWtlX2N0eXBlLnB5ICAgICAgICAgICAgIEdlbmVyYXRlIGN0eXBlLmggcmVwbGFjZW1lbnQgaW4gc3RyaW5nb2JqZWN0LmMKK21kNXN1bS5weSAgICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcworbWtyZWFsLnB5ICAgICAgICAgICAgICAgICBUdXJuIGEgc3ltYm9saWMgbGluayBpbnRvIGEgcmVhbCBmaWxlIG9yIGRpcmVjdG9yeQorbmRpZmYucHkgICAgICAgICAgICAgICAgICBJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKK25tMmRlZi5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKK29iamdyYXBoLnB5ICAgICAgICAgICAgICAgUHJpbnQgb2JqZWN0IGdyYXBoIGZyb20gbm0gb3V0cHV0IG9uIGEgbGlicmFyeQorcGFyc2VlbnRpdGllcy5weSAgICAgICAgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zCitwYXJzZV9odG1sNV9lbnRpdGllcy5weSAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zCitwYXRjaGNoZWNrLnB5ICAgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZworcGF0aGZpeC5weSAgICAgICAgICAgICAgICBDaGFuZ2UgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24gaW50byBzb21ldGhpbmcgZWxzZQorcGRlcHMucHkgICAgICAgICAgICAgICAgICBQcmludCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBQeXRob24gbW9kdWxlcworcGlja2xlMmRiLnB5ICAgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQorcGluZGVudC5weSAgICAgICAgICAgICAgICBJbmRlbnQgUHl0aG9uIGNvZGUsIGdpdmluZyBibG9jay1jbG9zaW5nIGNvbW1lbnRzCitwdGFncy5weSAgICAgICAgICAgICAgICAgIENyZWF0ZSB2aSB0YWdzIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCitweWRvYzMgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKK3B5c291cmNlLnB5ICAgICAgICAgICAgICAgRmluZCBQeXRob24gc291cmNlIGZpbGVzCityZWluZGVudC5weSAgICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cworcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgICBGaXgtdXAgcmVTdHJ1Y3R1cmVkVGV4dCBmaWxlIHdoaXRlc3BhY2UKK3JncmVwLnB5ICAgICAgICAgICAgICAgICAgUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKK3J1bl90ZXN0cy5weSAgICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKK3NlcnZlLnB5ICAgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCitzdWZmLnB5ICAgICAgICAgICAgICAgICAgIFNvcnQgYSBsaXN0IG9mIGZpbGVzIGJ5IHN1ZmZpeAorc3ZuZW9sLnB5ICAgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Cit0ZXhpMmh0bWwucHkgICAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCit0cmVlc3luYy5weSAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGlvc3luY3JhdGljKQordW50YWJpZnkucHkgICAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKK3doaWNoLnB5ICAgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKK3dpbl9hZGQycGF0aC5weSAgICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9hbmFseXplX2R4cC5weSBiL1Rvb2xzL3NjcmlwdHMvYW5hbHl6ZV9keHAucHkKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weSBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKaW5kZXggYjc5ZmYzNy4uNzM2YTQ0MSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgImRpcnMiLCAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBsaXN0ICVzOiAlc1xuIiAlIChkaXIsIGVycikpCiAgICAgICAgICAgICBzZWxmLmFkZHN0YXRzKCI8ZGlyPiIsICJ1bmxpc3RhYmxlIiwgMSkKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQppbmRleCA0OTBiMzdmLi5mNThjMzQ2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQpAQCAtNDMsNyArNDMsNyBAQAogICAgIGZvciBmaWxlbmFtZSBpbiBzeXMuYXJndlsxOl06CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gc3RhdGZ1bmMoZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImNhbid0IHN0YXQgJXI6ICVyXG4iICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICAgICAgc3RhdHVzID0gMQogICAgICAgICAgICAgc3QgPSAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1MTAxZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKQEAgLTAsMCArMSwzMiBAQAorIy91c3IvYmluL2VudiBweXRob24zCisiIiIKK0NoZWNrcyB0aGF0IHRoZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0cyBidW5kbGVkIGluIGVuc3VyZXBpcCBhcmUgdGhlIGxhdGVzdAordmVyc2lvbnMgYXZhaWxhYmxlLgorIiIiCitpbXBvcnQgZW5zdXJlcGlwCitpbXBvcnQganNvbgoraW1wb3J0IHVybGxpYi5yZXF1ZXN0CitpbXBvcnQgc3lzCisKKworZGVmIG1haW4oKToKKyAgICBvdXRvZmRhdGUgPSBGYWxzZQorCisgICAgZm9yIHByb2plY3QsIHZlcnNpb24gaW4gZW5zdXJlcGlwLl9QUk9KRUNUUzoKKyAgICAgICAgZGF0YSA9IGpzb24ubG9hZHModXJsbGliLnJlcXVlc3QudXJsb3BlbigKKyAgICAgICAgICAgICJodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3t9L2pzb24iLmZvcm1hdChwcm9qZWN0KSwKKyAgICAgICAgICAgIGNhZGVmYXVsdD1UcnVlLAorICAgICAgICApLnJlYWQoKS5kZWNvZGUoInV0ZjgiKSkKKyAgICAgICAgdXBzdHJlYW1fdmVyc2lvbiA9IGRhdGFbImluZm8iXVsidmVyc2lvbiJdCisKKyAgICAgICAgaWYgdmVyc2lvbiAhPSB1cHN0cmVhbV92ZXJzaW9uOgorICAgICAgICAgICAgb3V0b2ZkYXRlID0gVHJ1ZQorICAgICAgICAgICAgcHJpbnQoIlRoZSBsYXRlc3QgdmVyc2lvbiBvZiB7fSBvbiBQeVBJIGlzIHt9LCBidXQgZW5zdXJlcGlwICIKKyAgICAgICAgICAgICAgICAgICJoYXMge30iLmZvcm1hdChwcm9qZWN0LCB1cHN0cmVhbV92ZXJzaW9uLCB2ZXJzaW9uKSkKKworICAgIGlmIG91dG9mZGF0ZToKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKaW5kZXggZDRmZGNlMi4uYmJhYTNkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQorKysgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CkBAIC01LDExICs1LDExIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGZyb20gc3RhdCBpbXBvcnQgU1RfTVRJTUUKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogCiAjIFBFUCAzMTQ3IGNvbXBhdGliaWxpdHkgKFBZQyBSZXBvc2l0b3J5IERpcmVjdG9yaWVzKQotY2FjaGVfZnJvbV9zb3VyY2UgPSAoaW1wLmNhY2hlX2Zyb21fc291cmNlIGlmIGhhc2F0dHIoaW1wLCAnZ2V0X3RhZycpIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBwYXRoOiBwYXRoICsgJ2MnKQorY2FjaGVfZnJvbV9zb3VyY2UgPSAoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UgaWYgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZworICAgICAgICAgICAgICAgICAgICAgZWxzZSBsYW1iZGEgcGF0aDogcGF0aCArICdjJykKIAogCiBkZWYgbWFpbigpOgpAQCAtMTgsMTMgKzE4LDEzIEBACiAgICAgICAgIHNpbGVudCA9IChzeXMuYXJndlsxXSA9PSAnLXMnKQogICAgIGVsc2U6CiAgICAgICAgIHZlcmJvc2UgPSBzaWxlbnQgPSBGYWxzZQotICAgIE1BR0lDID0gaW1wLmdldF9tYWdpYygpCisgICAgTUFHSUMgPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIKICAgICBpZiBub3Qgc2lsZW50OgogICAgICAgICBwcmludCgnVXNpbmcgTUFHSUMgd29yZCcsIHJlcHIoTUFHSUMpKQogICAgIGZvciBkaXJuYW1lIGluIHN5cy5wYXRoOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCdDYW5ub3QgbGlzdCBkaXJlY3RvcnknLCByZXByKGRpcm5hbWUpKQogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHNpbGVudDoKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG5hbWUpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCdDYW5ub3Qgc3RhdCcsIHJlcHIobmFtZSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkgYi9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CmluZGV4IGUwMjIwYjUuLjcxNTY4M2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQpAQCAtMTMsMTIgKzEzLDEyIEBACiAgICAgZmlsZTEsIGZpbGUyID0gc3lzLmFyZ3ZbMV0sIHN5cy5hcmd2WzJdCiAgICAgdHJ5OgogICAgICAgICBzdGF0MSA9IG9zLnN0YXQoZmlsZTEpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGZpbGUxICsgJzogY2Fubm90IHN0YXRcbicpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgogICAgICAgICBvcy51dGltZShmaWxlMiwgKHN0YXQxW1NUX0FUSU1FXSwgc3RhdDFbU1RfTVRJTUVdKSkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZmlsZTIgKyAnOiBjYW5ub3QgY2hhbmdlIHRpbWVcbicpCiAgICAgICAgIHN5cy5leGl0KDIpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZGlmZi5weSBiL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQppbmRleCBmOWIxNGJmLi44YmU1MjdmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2RpZmYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CkBAIC0zOCw5ICszOCw5IEBACiAKICAgICBmcm9tZGF0ZSA9IGZpbGVfbXRpbWUoZnJvbWZpbGUpCiAgICAgdG9kYXRlID0gZmlsZV9tdGltZSh0b2ZpbGUpCi0gICAgd2l0aCBvcGVuKGZyb21maWxlLCAnVScpIGFzIGZmOgorICAgIHdpdGggb3Blbihmcm9tZmlsZSkgYXMgZmY6CiAgICAgICAgIGZyb21saW5lcyA9IGZmLnJlYWRsaW5lcygpCi0gICAgd2l0aCBvcGVuKHRvZmlsZSwgJ1UnKSBhcyB0ZjoKKyAgICB3aXRoIG9wZW4odG9maWxlKSBhcyB0ZjoKICAgICAgICAgdG9saW5lcyA9IHRmLnJlYWRsaW5lcygpCiAKICAgICBpZiBvcHRpb25zLnU6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKaW5kZXggZjI0YTcwMi4uYTcwNWY1NiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQpAQCAtNzAsNyArNzAsNyBAQAogZGVmIHByb2Nlc3NkaXIoZGlyLCBsaXN0bmFtZXMpOgogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ2FuJ3QgbGlzdCBkaXJlY3Rvcnk6ICVzXG4iICUgZGlyKQogICAgICAgICByZXR1cm4gMQogICAgIGZpbGVzID0gW10KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CmluZGV4IGI0YzA5ZWYuLmI5MjRmMjcgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQpAQCAtMzYsNyArMzYsNyBAQAogICAgICAgICAgICAgbGlua3RvID0gb3MucmVhZGxpbmsobmFtZSkKICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmt0bykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcHJpbnQobmFtZSwgJy0+JywgbGlua3RvKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQppbmRleCA4N2UyYTA5Li4xZTRjNDI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpeGNpZC5weQpAQCAtOTcsNyArOTcsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZGlybmFtZSArICc6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJyArIHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgcmV0dXJuIDEKICAgICBuYW1lcy5zb3J0KCkKQEAgLTE3NSwxNyArMTc1LDE3IEBACiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKICAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycih0ZW1wbmFtZSArICc6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+CiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZmlsZW5hbWUgKyAnOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycihmaWxlbmFtZSArICc6IHJlbmFtZSBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICAgICByZXR1cm4gMQogICAgICMgUmV0dXJuIHN1Y2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZnRwbWlycm9yLnB5IGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKaW5kZXggOWU4YmUxZC4uYTFiNjgzYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkKQEAgLTEwOCw3ICsxMDgsNyBAQAogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnQ3JlYXRpbmcgbG9jYWwgZGlyZWN0b3J5JywgcmVwcihsb2NhbGRpcikpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1ha2VkaXIobG9jYWxkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJGYWlsZWQgdG8gZXN0YWJsaXNoIGxvY2FsIGRpcmVjdG9yeSIsIHJlcHIobG9jYWxkaXIpKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgaW5mb2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGxvY2FsZGlyLCAnLm1pcnJvcmluZm8nKQpAQCAtMTgzLDcgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBtb2RlWzBdID09ICdsJzoKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CkBAIC0yMTgsMTEgKzIxOCwxMSBAQAogICAgICAgICAgICAgICAgIGZwMS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAjIElnbm9yZSB0aGUgZXJyb3IKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoIkNhbid0IHJlbmFtZSAlciB0byAlcjogJXMiICUgKHRlbXBuYW1lLCBmdWxsbmFtZSwgbXNnKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGluZm9bZmlsZW5hbWVdID0gaW5mb3N0dWZmCkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIGlmIG5vdCBsb2NhbGRpcjogbmFtZXMgPSBvcy5saXN0ZGlyKG9zLmN1cmRpcikKICAgICAgICAgZWxzZTogbmFtZXMgPSBvcy5saXN0ZGlyKGxvY2FsZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgbmFtZXMgPSBbXQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBpZiBuYW1lWzBdID09ICcuJyBvciBuYW1lIGluIGluZm8gb3IgbmFtZSBpbiBzdWJkaXJzOgpAQCAtMzEyLDcgKzMxMiw3IEBACiAgICAgaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG5hbWVzID0gW10KICAgICAgICAgb2sgPSAxCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpAQCAtMzIyLDEzICszMjIsMTMgQEAKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnJtZGlyKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3QgcmVtb3ZlIGxvY2FsIGRpcmVjdG9yeSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICBlbHNlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoZnVsbG5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgbG9jYWwgZmlsZSAlcjogJXMiICUgKGZ1bGxuYW1lLCBtc2cpKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICByZXR1cm4gMQpAQCAtMzg2LDcgKzM4Niw3IEBACiAgICAgYmFja3VwID0gb3MucGF0aC5qb2luKGRpciwgZm5hbWUgKyAnficpCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIGZwID0gb3Blbih0ZW1wbmFtZSwgJ3cnKQogICAgIGZwLndyaXRlKCd7XG4nKQpAQCAtMzk2LDcgKzM5Niw3IEBACiAgICAgZnAuY2xvc2UoKQogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weSBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKaW5kZXggOTgyZjQ4MC4uZTgzZjE5OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CkBAIC0zMiwxMyArMzIsMTMgQEAKICAgICAgICAgcmV0dXJuIDEKICAgICB0cnk6CiAgICAgICAgIG9zLm1rZGlyKG5ld3RyZWUsIDBvNzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChuZXd0cmVlICsgJzogY2Fubm90IG1rZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuIDEKICAgICBsaW5rbmFtZSA9IG9zLnBhdGguam9pbihuZXd0cmVlLCBsaW5rKQogICAgIHRyeToKICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmpvaW4ob3MucGFyZGlyLCBvbGR0cmVlKSwgbGlua25hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBsaW5rX21heV9mYWlsOgogICAgICAgICAgICAgcHJpbnQobGlua25hbWUgKyAnOiBjYW5ub3Qgc3ltbGluazonLCBtc2cpCiAgICAgICAgICAgICByZXR1cm4gMQpAQCAtNTEsNyArNTEsNyBAQAogICAgIGlmIGRlYnVnOiBwcmludCgnbGlua25hbWVzJywgKG9sZCwgbmV3LCBsaW5rKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihvbGQpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHByaW50KG9sZCArICc6IHdhcm5pbmc6IGNhbm5vdCBsaXN0ZGlyOicsIG1zZykKICAgICAgICAgcmV0dXJuCiAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQppbmRleCAyNDIyMDkxLi5jNmQwOWI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKQEAgLTYwLDcgKzYwLDcgQEAKICMgY291bGRuJ3QgYmUgb3BlbmVkCiBkZWYgZm9wZW4oZm5hbWUpOgogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUsICdVJykKKyAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZGV0YWlsOgogICAgICAgICByZXR1cm4gZmFpbCgiY291bGRuJ3Qgb3BlbiAiICsgZm5hbWUgKyAiOiAiICsgc3RyKGRldGFpbCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMTEzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5CkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiIKK1V0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zIGF2YWlsYWJsZSBmcm9tOgorCisgICAgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uCisKK1dyaXR0ZW4gYnkgRXppbyBNZWxvdHRpIGFuZCBJdWxpaWEgUHJvc2t1cm5pYS4KKworIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGpzb24KK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUKKworZW50aXRpZXNfdXJsID0gJ2h0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvZW50aXRpZXMuanNvbicKKworZGVmIGdldF9qc29uKHVybCk6CisgICAgIiIiRG93bmxvYWQgdGhlIGpzb24gZmlsZSBmcm9tIHRoZSB1cmwgYW5kIHJldHVybnMgYSBkZWNvZGVkIG9iamVjdC4iIiIKKyAgICB3aXRoIHVybG9wZW4odXJsKSBhcyBmOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgcmV0dXJuIGpzb24ubG9hZHMoZGF0YSkKKworZGVmIGNyZWF0ZV9kaWN0KGVudGl0aWVzKToKKyAgICAiIiJDcmVhdGUgdGhlIGh0bWw1IGRpY3QgZnJvbSB0aGUgZGVjb2RlZCBqc29uIG9iamVjdC4iIiIKKyAgICBuZXdfaHRtbDUgPSB7fQorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBlbnRpdGllcy5pdGVtcygpOgorICAgICAgICBuZXdfaHRtbDVbbmFtZS5sc3RyaXAoJyYnKV0gPSB2YWx1ZVsnY2hhcmFjdGVycyddCisgICAgcmV0dXJuIG5ld19odG1sNQorCitkZWYgY29tcGFyZV9kaWN0cyhvbGQsIG5ldyk6CisgICAgIiIiQ29tcGFyZSB0aGUgb2xkIGFuZCBuZXcgZGljdHMgYW5kIHByaW50IHRoZSBkaWZmZXJlbmNlcy4iIiIKKyAgICBhZGRlZCA9IG5ldy5rZXlzKCkgLSBvbGQua2V5cygpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBhZGRlZDonLmZvcm1hdChsZW4oYWRkZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKGFkZGVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBuZXdbbmFtZV0pKQorICAgIHJlbW92ZWQgPSBvbGQua2V5cygpIC0gbmV3LmtleXMoKQorICAgIGlmIHJlbW92ZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiByZW1vdmVkOicuZm9ybWF0KGxlbihyZW1vdmVkKSkpCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChyZW1vdmVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBvbGRbbmFtZV0pKQorICAgIGNoYW5nZWQgPSBzZXQoKQorICAgIGZvciBuYW1lIGluIChvbGQua2V5cygpICYgbmV3LmtleXMoKSk6CisgICAgICAgIGlmIG9sZFtuYW1lXSAhPSBuZXdbbmFtZV06CisgICAgICAgICAgICBjaGFuZ2VkLmFkZCgobmFtZSwgb2xkW25hbWVdLCBuZXdbbmFtZV0pKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBtb2RpZmllZDonLmZvcm1hdChsZW4oY2hhbmdlZCkpKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoY2hhbmdlZCk6CisgICAgICAgICAgICBwcmludCgnICB7IXJ9OiB7IXJ9IC0+IHshcn0nLmZvcm1hdCgqaXRlbSkpCisKK2RlZiB3cml0ZV9pdGVtcyhlbnRpdGllcywgZmlsZT1zeXMuc3Rkb3V0KToKKyAgICAiIiJXcml0ZSB0aGUgaXRlbXMgb2YgdGhlIGRpY3Rpb25hcnkgaW4gdGhlIHNwZWNpZmllZCBmaWxlLiIiIgorICAgICMgVGhlIGtleXMgaW4gdGhlIGdlbmVyYXRlZCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBzb3J0ZWQKKyAgICAjIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXksIGhvd2V2ZXIsIHdoZW4gdHdvIGtleXMgYXJlIGVxdWFsLAorICAgICMgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIHNob3VsZCBjb21lIGZpcnN0IHNvIHRoYXQgdGhlIHJlc3VsdAorICAgICMgbG9va3MgbGlrZTogWydBYWN1dGUnLCAnYWFjdXRlJywgJ0FhY3V0ZTsnLCAnYWFjdXRlOycsIC4uLl0KKyAgICAjIFRvIGRvIHRoaXMgd2UgZmlyc3Qgc29ydCBpbiBhIGNhc2Utc2Vuc2l0aXZlIHdheSAoc28gYWxsIHRoZQorICAgICMgdXBwZXJjYXNlIGNoYXJzIGNvbWUgZmlyc3QpIGFuZCB0aGVuIHNvcnQgd2l0aCBrZXk9c3RyLmxvd2VyLgorICAgICMgU2luY2UgdGhlIHNvcnRpbmcgaXMgc3RhYmxlIHRoZSB1cHBlcmNhc2Uga2V5cyB3aWxsIGV2ZW50dWFsbHkKKyAgICAjIGJlIGJlZm9yZSB0aGVpciBlcXVpdmFsZW50IGxvd2VyY2FzZSB2ZXJzaW9uLgorICAgIGtleXMgPSBzb3J0ZWQoZW50aXRpZXMua2V5cygpKQorICAgIGtleXMgPSBzb3J0ZWQoa2V5cywga2V5PXN0ci5sb3dlcikKKyAgICBwcmludCgnaHRtbDUgPSB7JywgZmlsZT1maWxlKQorICAgIGZvciBuYW1lIGluIGtleXM6CisgICAgICAgIHByaW50KCcgICAgeyFyfTogeyFhfSwnLmZvcm1hdChuYW1lLCBlbnRpdGllc1tuYW1lXSksIGZpbGU9ZmlsZSkKKyAgICBwcmludCgnfScsIGZpbGU9ZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICMgd2l0aG91dCBhcmdzIHByaW50IGEgZGlmZiBiZXR3ZWVuIGh0bWwuZW50aXRpZXMuaHRtbDUgYW5kIG5ld19odG1sNQorICAgICMgd2l0aCAtLWNyZWF0ZSBwcmludCB0aGUgbmV3IGh0bWw1IGRpY3QKKyAgICAjIHdpdGggLS1wYXRjaCBwYXRjaCB0aGUgTGliL2h0bWwvZW50aXRpZXMucHkgZmlsZQorICAgIG5ld19odG1sNSA9IGNyZWF0ZV9kaWN0KGdldF9qc29uKGVudGl0aWVzX3VybCkpCisgICAgaWYgJy0tY3JlYXRlJyBpbiBzeXMuYXJndjoKKyAgICAgICAgcHJpbnQoJyMgbWFwIHRoZSBIVE1MNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB0byB0aGUgJworICAgICAgICAgICAgICAnZXF1aXZhbGVudCBVbmljb2RlIGNoYXJhY3RlcihzKScpCisgICAgICAgIHByaW50KCcjIEdlbmVyYXRlZCBieSB7fS4gIERvIG5vdCBlZGl0IG1hbnVhbGx5LicuZm9ybWF0KF9fZmlsZV9fKSkKKyAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1KQorICAgIGVsaWYgJy0tcGF0Y2gnIGluIHN5cy5hcmd2OgorICAgICAgICBmbmFtZSA9ICdMaWIvaHRtbC9lbnRpdGllcy5weScKKyAgICAgICAgdGVtcF9mbmFtZSA9IGZuYW1lICsgJy50ZW1wJworICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGYxLCBvcGVuKHRlbXBfZm5hbWUsICd3JykgYXMgZjI6CisgICAgICAgICAgICBza2lwID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYxOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaHRtbDUgPSB7Jyk6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlX2l0ZW1zKG5ld19odG1sNSwgZmlsZT1mMikKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgICAgICAgICAjIHNraXAgdGhlIG9sZCBpdGVtcyB1bnRpbCB0aGUgfQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ30nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGYyLndyaXRlKGxpbmUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgb3MucmVuYW1lKHRlbXBfZm5hbWUsIGZuYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlmIGh0bWw1ID09IG5ld19odG1sNToKKyAgICAgICAgICAgIHByaW50KCdUaGUgY3VycmVudCBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBhcmVfZGljdHMoaHRtbDUsIG5ld19odG1sNSkKKyAgICAgICAgICAgIHByaW50KCdSdW4gIi4vcHl0aG9uIHswfSAtLXBhdGNoIiB0byB1cGRhdGUgTGliL2h0bWwvZW50aXRpZXMuaHRtbCAnCisgICAgICAgICAgICAgICAgICAnb3IgIi4vcHl0aG9uIHswfSAtLWNyZWF0ZSIgdG8gc2VlIHRoZSBnZW5lcmF0ZWQgJyAnZGljdGlvbmFyeS4nLmZvcm1hdChfX2ZpbGVfXykpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkgYi9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKaW5kZXggMTNjYTg2Ni4uMjI0MzJkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQpAQCAtNzMsNyArNzMsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC0xMzEsMjQgKzEzMSwyNCBAQAogICAgICAgICBtdGltZSA9IHN0YXRidWYuc3RfbXRpbWUKICAgICAgICAgYXRpbWUgPSBzdGF0YnVmLnN0X2F0aW1lCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHJlbmFtZSBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBpZiBwcmVzZXJ2ZV90aW1lc3RhbXBzOgogICAgICAgICBpZiBhdGltZSBhbmQgbXRpbWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBlcnIoJyVzOiByZXNldCBvZiB0aW1lc3RhbXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXNzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKaW5kZXggMjg3MmRjMC4uMzMzMzQyMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQpAQCAtMzc2LDEzICszNzYsMTMgQEAKICAgICBpZiBvcy5wYXRoLmxleGlzdHMoYmFja3VwKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVtb3ZlKGJhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgYmFja3VwICVyIiAlIChiYWNrdXAsKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAjIGVuZCB0cnkKICAgICAjIGVuZCBpZgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgcmVuYW1lICVyIHRvICVyIiAlIChmaWxlbmFtZSwgYmFja3VwKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICMgZW5kIHRyeQogIyBlbmQgZGVmIG1ha2VfYmFja3VwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B5ZG9jZ3VpLnB5dyBiL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CmluZGV4IDRhOTE2ZWEuLjE4NDI0ZGUgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQpAQCAtNTIsOCArNTIsOCBAQAogcmVjdXJzZSA9IEZhbHNlCiBkcnlydW4gPSBGYWxzZQogbWFrZWJhY2t1cCA9IFRydWUKKyMgQSBzcGVjaWZpZWQgbmV3bGluZSB0byBiZSB1c2VkIGluIHRoZSBvdXRwdXQgKHNldCBieSAtLW5ld2xpbmUgb3B0aW9uKQogc3BlY19uZXdsaW5lID0gTm9uZQotIiIiQSBzcGVjaWZpZWQgbmV3bGluZSB0byBiZSB1c2VkIGluIHRoZSBvdXRwdXQgKHNldCBieSAtLW5ld2xpbmUgb3B0aW9uKSIiIgogCiAKIGRlZiB1c2FnZShtc2c9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5IGIvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQppbmRleCBiMjY0OWM0Li42NTJkMzk0IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgcHJpbnQoImNyZWF0aW5nIHNsYXZlIGRpcmVjdG9yeSIsIHNsYXZlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihzbGF2ZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoImNhbid0IG1ha2Ugc2xhdmUgZGlyZWN0b3J5Iiwgc2xhdmUsICI6IiwgbXNnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5IGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQppbmRleCA0YjY3YzE1Li44NjFjODNjIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKQEAgLTM5LDExICszOSwxMSBAQAogICAgIGJhY2t1cCA9IGZpbGVuYW1lICsgIn4iCiAgICAgdHJ5OgogICAgICAgICBvcy51bmxpbmsoYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgogICAgICAgICBmLndyaXRlKG5ld3RleHQpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3doaWNoLnB5IGIvVG9vbHMvc2NyaXB0cy93aGljaC5weQppbmRleCA0ZmMzN2EwLi5kZjU0Y2UwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3doaWNoLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKQEAgLTI5LDcgKzI5LDcgQEAKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKGRpciwgcHJvZykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZW5hbWUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgbm90IFNfSVNSRUcoc3RbU1RfTU9ERV0pOgogICAgICAgICAgICAgICAgIG1zZyhmaWxlbmFtZSArICc6IG5vdCBhIGRpc2sgZmlsZScpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weSBiL1Rvb2xzL3NjcmlwdHMvd2luX2FkZDJwYXRoLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggOTI1OWI0NC4uYzg1YmVhNQotLS0gYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQorKysgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHdpdGggd2lucmVnLkNyZWF0ZUtleShIS0NVLCBFTlYpIGFzIGtleToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW52cGF0aCA9IHdpbnJlZy5RdWVyeVZhbHVlRXgoa2V5LCBQQVRIKVswXQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGVudnBhdGggPSBERUZBVUxUCiAKICAgICAgICAgcGF0aHMgPSBbZW52cGF0aF0KZGlmZiAtLWdpdCBhL1Rvb2xzL3N0cmluZ2JlbmNoL3N0cmluZ2JlbmNoLnB5IGIvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkKaW5kZXggMTQyYjNjYS4uNWFiYzI1YSAxMDA3NTUKLS0tIGEvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkKKysrIGIvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkKQEAgLTgwOCw3ICs4MDgsNyBAQAogcHJvZ3JhbW1lcnMgcmVwb3J0IHN1YnN0YW50aWFsIHByb2R1Y3Rpdml0eSBnYWlucyBhbmQgZmVlbCB0aGUgbGFuZ3VhZ2UKIGVuY291cmFnZXMgdGhlIGRldmVsb3BtZW50IG9mIGhpZ2hlciBxdWFsaXR5LCBtb3JlIG1haW50YWluYWJsZSBjb2RlLgogCi1QeXRob24gcnVucyBvbiBXaW5kb3dzLCBMaW51eC9Vbml4LCBNYWMgT1MgWCwgT1MvMiwgQW1pZ2EsIFBhbG0KK1B5dGhvbiBydW5zIG9uIFdpbmRvd3MsIExpbnV4L1VuaXgsIE1hYyBPUyBYLCBBbWlnYSwgUGFsbQogSGFuZGhlbGRzLCBhbmQgTm9raWEgbW9iaWxlIHBob25lcy4gUHl0aG9uIGhhcyBhbHNvIGJlZW4gcG9ydGVkIHRvIHRoZQogSmF2YSBhbmQgLk5FVCB2aXJ0dWFsIG1hY2hpbmVzLgogCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5IGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQppbmRleCBmNWExYWYzLi5mNGM3YzAzIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKQEAgLTI5MCwyNyArMjkwLDI3IEBACiAKIGNsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CiAKLSAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfJXMpCisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgZXJyb3JzLCBlbmNvZGluZ18lcykKIAotICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ18lcykKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LCBlcnJvcnMsIGRlY29kaW5nXyVzKQogJycnICUgKGVuY29kaW5nbmFtZSwgbmFtZSwgc3VmZml4LCBzdWZmaXgpXQogICAgIGwuYXBwZW5kKCcnJ1wKIGNsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKICAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfJXMpWzBdCisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBlbmNvZGluZ18lcylbMF0KIAogY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgogICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ18lcylbMF0nJycgJQorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LCBzZWxmLmVycm9ycywgZGVjb2RpbmdfJXMpWzBdJycnICUKICAgICAgICAgKHN1ZmZpeCwgc3VmZml4KSkKIAogICAgIGwuYXBwZW5kKCcnJwotY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtV3JpdGVyKToKICAgICBwYXNzCiAKLWNsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYywgY29kZWNzLlN0cmVhbVJlYWRlcik6CiAgICAgcGFzcwogCiAjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKQEAgLTM0Myw3ICszNDMsNyBAQAogICAgIGlmIGRlY29kaW5nX3RhYmxlX2NvZGU6CiAgICAgICAgIGwuYXBwZW5kKCcnJwogIyMjIEVuY29kaW5nIHRhYmxlCi1lbmNvZGluZ190YWJsZT1jb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKK2VuY29kaW5nX3RhYmxlID0gY29kZWNzLmNoYXJtYXBfYnVpbGQoZGVjb2RpbmdfdGFibGUpCiAnJycpCiAgICAgZWxzZToKICAgICAgICAgbC5hcHBlbmQoJycnCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSBiL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CmluZGV4IGJjM2QwY2IuLjA5NDI1MDggMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CisrKyBiL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CkBAIC0zNyw3ICszNyw3IEBACiBWRVJTSU9OID0gIjMuMiIKIAogIyBUaGUgVW5pY29kZSBEYXRhYmFzZQotVU5JREFUQV9WRVJTSU9OID0gIjYuMS4wIgorVU5JREFUQV9WRVJTSU9OID0gIjYuMy4wIgogVU5JQ09ERV9EQVRBID0gIlVuaWNvZGVEYXRhJXMudHh0IgogQ09NUE9TSVRJT05fRVhDTFVTSU9OUyA9ICJDb21wb3NpdGlvbkV4Y2x1c2lvbnMlcy50eHQiCiBFQVNUQVNJQU5fV0lEVEggPSAiRWFzdEFzaWFuV2lkdGglcy50eHQiCkBAIC02OCw3ICs2OCw3IEBACiAKIEJJRElSRUNUSU9OQUxfTkFNRVMgPSBbICIiLCAiTCIsICJMUkUiLCAiTFJPIiwgIlIiLCAiQUwiLCAiUkxFIiwgIlJMTyIsCiAgICAgIlBERiIsICJFTiIsICJFUyIsICJFVCIsICJBTiIsICJDUyIsICJOU00iLCAiQk4iLCAiQiIsICJTIiwgIldTIiwKLSAgICAiT04iIF0KKyAgICAiT04iLCAiTFJJIiwgIlJMSSIsICJGU0kiLCAiUERJIiBdCiAKIEVBU1RBU0lBTldJRFRIX05BTUVTID0gWyAiRiIsICJIIiwgIlciLCAiTmEiLCAiQSIsICJOIiBdCiAKQEAgLTU1Miw3ICs1NTIsNyBAQAogICAgIHByaW50KCIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCi0gICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAKQEAgLTU3MCw3ICs1NzAsNyBAQAogICAgIHByaW50KCIgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuIiwgZmlsZT1mcCkKICAgICBwcmludCgiICovIiwgZmlsZT1mcCkKLSAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQorICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAgICAgZm9yIGNvZGVwb2ludCBpbiBzb3J0ZWQobGluZWJyZWFrcyk6CmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQgYi9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNWUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVApAQCAtMCwwICsxLDI1OCBAQAorMHgwMAkweDAwMDAJI05VTEwgKE5VTCkKKzB4MDEJMHgwMDAxCSNTVEFSVCBPRiBIRUFESU5HIChTT0gpCisweDAyCTB4MDAwMgkjU1RBUlQgT0YgVEVYVCAoU1RYKQorMHgwMwkweDAwMDMJI0VORCBPRiBURVhUIChFVFgpCisweDA0CTB4MDA5QwkjU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorMHgwNQkweDAwMDkJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKKzB4MDYJMHgwMDg2CSNTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCisweDA3CTB4MDA3RgkjREVMRVRFIChERUwpCisweDA4CTB4MDA5NwkjRU5EIE9GIEdVQVJERUQgQVJFQSAoRVBBKQorMHgwOQkweDAwOEQJI1JFVkVSU0UgTElORSBGRUVEIChSSSkKKzB4MEEJMHgwMDhFCSNTSU5HTEUtU0hJRlQgVFdPIChTUzIpCisweDBCCTB4MDAwQgkjTElORSBUQUJVTEFUSU9OIChWVCkKKzB4MEMJMHgwMDBDCSNGT1JNIEZFRUQgKEZGKQorMHgwRAkweDAwMEQJI0NBUlJJQUdFIFJFVFVSTiAoQ1IpCisweDBFCTB4MDAwRQkjU0hJRlQgT1VUIChTTykKKzB4MEYJMHgwMDBGCSNTSElGVCBJTiAoU0kpCisweDEwCTB4MDAxMAkjREFUQUxJTksgRVNDQVBFIChETEUpCisweDExCTB4MDAxMQkjREVWSUNFIENPTlRST0wgT05FIChEQzEpCisweDEyCTB4MDAxMgkjREVWSUNFIENPTlRST0wgVFdPIChEQzIpCisweDEzCTB4MDAxMwkjREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKKzB4MTQJMHgwMDlECSNPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQgKE9TQykKKzB4MTUJMHgwMDg1CSNORVhUIExJTkUgKE5FTCkKKzB4MTYJMHgwMDA4CSNCQUNLU1BBQ0UgKEJTKQorMHgxNwkweDAwODcJI0VORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCisweDE4CTB4MDAxOAkjQ0FOQ0VMIChDQU4pCisweDE5CTB4MDAxOQkjRU5EIE9GIE1FRElVTSAoRU0pCisweDFBCTB4MDA5MgkjUFJJVkFURSBVU0UgVFdPIChQVTIpCisweDFCCTB4MDA4RgkjU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCisweDFDCTB4MDAxQwkjRklMRSBTRVBBUkFUT1IgKElTNCkKKzB4MUQJMHgwMDFECSNHUk9VUCBTRVBBUkFUT1IgKElTMykKKzB4MUUJMHgwMDFFCSNSRUNPUkQgU0VQQVJBVE9SIChJUzIpCisweDFGCTB4MDAxRgkjVU5JVCBTRVBBUkFUT1IgKElTMSkKKzB4MjAJMHgwMDgwCSNQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorMHgyMQkweDAwODEJI0hJR0ggT0NURVQgUFJFU0VUIChIT1ApCisweDIyCTB4MDA4MgkjQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKKzB4MjMJMHgwMDgzCSNOTyBCUkVBSyBIRVJFIChOQkgpCisweDI0CTB4MDA4NAkjSU5ERVggKElORCkKKzB4MjUJMHgwMDBBCSNMSU5FIEZFRUQgKExGKQorMHgyNgkweDAwMTcJI0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKKzB4MjcJMHgwMDFCCSNFU0NBUEUgKEVTQykKKzB4MjgJMHgwMDg4CSNDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKKzB4MjkJMHgwMDg5CSNDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKKzB4MkEJMHgwMDhBCSNMSU5FIFRBQlVMQVRJT04gU0VUIChWVFMpCisweDJCCTB4MDA4QgkjUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKKzB4MkMJMHgwMDhDCSNQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKKzB4MkQJMHgwMDA1CSNFTlFVSVJZIChFTlEpCisweDJFCTB4MDAwNgkjQUNLTk9XTEVER0UgKEFDSykKKzB4MkYJMHgwMDA3CSNCRUxMIChCRUwpCisweDMwCTB4MDA5MAkjREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCisweDMxCTB4MDA5MQkjUFJJVkFURSBVU0UgT05FIChQVTEpCisweDMyCTB4MDAxNgkjU1lOQ0hST05PVVMgSURMRSAoU1lOKQorMHgzMwkweDAwOTMJI1NFVCBUUkFOU01JVCBTVEFURSAoU1RTKQorMHgzNAkweDAwOTQJI0NBTkNFTCBDSEFSQUNURVIgKENDSCkKKzB4MzUJMHgwMDk1CSNNRVNTQUdFIFdBSVRJTkcgKE1XKQorMHgzNgkweDAwOTYJI1NUQVJUIE9GIEdVQVJERUQgQVJFQSAoU1BBKQorMHgzNwkweDAwMDQJI0VORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKKzB4MzgJMHgwMDk4CSNTVEFSVCBPRiBTVFJJTkcgKFNPUykKKzB4MzkJMHgwMDk5CSNTSU5HTEUgR1JBUEhJQyBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0dDSSkKKzB4M0EJMHgwMDlBCSNTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKKzB4M0IJMHgwMDlCCSNDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKKzB4M0MJMHgwMDE0CSNERVZJQ0UgQ09OVFJPTCBGT1VSIChEQzQpCisweDNECTB4MDAxNQkjTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKKzB4M0UJMHgwMDlFCSNQUklWQUNZIE1FU1NBR0UgKFBNKQorMHgzRgkweDAwMUEJI1NVQlNUSVRVVEUgKFNVQikKKzB4NDAJMHgwMDIwCSNTUEFDRQorMHg0MQkweDAwQTAJI05PLUJSRUFLIFNQQUNFCisweDQyCTB4MDBFMgkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisweDQzCTB4MDA3QgkjTEVGVCBDVVJMWSBCUkFDS0VUCisweDQ0CTB4MDBFMAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorMHg0NQkweDAwRTEJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NDYJMHgwMEUzCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisweDQ3CTB4MDBFNQkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisweDQ4CTB4MDBFNwkjTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDQ5CTB4MDBGMQkjTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorMHg0QQkweDAwQzQJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4NEIJMHgwMDJFCSNGVUxMIFNUT1AKKzB4NEMJMHgwMDNDCSNMRVNTLVRIQU4gU0lHTgorMHg0RAkweDAwMjgJI0xFRlQgUEFSRU5USEVTSVMKKzB4NEUJMHgwMDJCCSNQTFVTIFNJR04KKzB4NEYJMHgwMDIxCSNFWENMQU1BVElPTiBNQVJLCisweDUwCTB4MDAyNgkjQU1QRVJTQU5ECisweDUxCTB4MDBFOQkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorMHg1MgkweDAwRUEJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg1MwkweDAwRUIJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisweDU0CTB4MDBFOAkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorMHg1NQkweDAwRUQJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NTYJMHgwMEVFCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzB4NTcJMHgwMEVGCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMHg1OAkweDAwRUMJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NTkJMHgwMDdFCSNUSUxERQorMHg1QQkweDAwREMJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzB4NUIJMHgwMDI0CSNET0xMQVIgU0lHTgorMHg1QwkweDAwMkEJI0FTVEVSSVNLCisweDVECTB4MDAyOQkjUklHSFQgUEFSRU5USEVTSVMKKzB4NUUJMHgwMDNCCSNTRU1JQ09MT04KKzB4NUYJMHgwMDVFCSNDSVJDVU1GTEVYIEFDQ0VOVAorMHg2MAkweDAwMkQJI0hZUEhFTi1NSU5VUworMHg2MQkweDAwMkYJI1NPTElEVVMKKzB4NjIJMHgwMEMyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorMHg2MwkweDAwNUIJI0xFRlQgU1FVQVJFIEJSQUNLRVQKKzB4NjQJMHgwMEMwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKzB4NjUJMHgwMEMxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NjYJMHgwMEMzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKzB4NjcJMHgwMEM1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorMHg2OAkweDAwQzcJI0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDY5CTB4MDBEMQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisweDZBCTB4MDBGNgkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKzB4NkIJMHgwMDJDCSNDT01NQQorMHg2QwkweDAwMjUJI1BFUkNFTlQgU0lHTgorMHg2RAkweDAwNUYJI0xPVyBMSU5FCisweDZFCTB4MDAzRQkjR1JFQVRFUi1USEFOIFNJR04KKzB4NkYJMHgwMDNGCSNRVUVTVElPTiBNQVJLCisweDcwCTB4MDBGOAkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKzB4NzEJMHgwMEM5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKzB4NzIJMHgwMENBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg3MwkweDAwQ0IJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzB4NzQJMHgwMEM4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKzB4NzUJMHgwMENECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NzYJMHgwMENFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorMHg3NwkweDAwQ0YJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzB4NzgJMHgwMENDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NzkJMHgwMDYwCSNHUkFWRSBBQ0NFTlQKKzB4N0EJMHgwMDNBCSNDT0xPTgorMHg3QgkweDAwMjMJI05VTUJFUiBTSUdOCisweDdDCTB4MDBBNwkjU0VDVElPTiBTSUdOCisweDdECTB4MDAyNwkjQVBPU1RST1BIRQorMHg3RQkweDAwM0QJI0VRVUFMUyBTSUdOCisweDdGCTB4MDAyMgkjUVVPVEFUSU9OIE1BUksKKzB4ODAJMHgwMEQ4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisweDgxCTB4MDA2MQkjTEFUSU4gU01BTEwgTEVUVEVSIEEKKzB4ODIJMHgwMDYyCSNMQVRJTiBTTUFMTCBMRVRURVIgQgorMHg4MwkweDAwNjMJI0xBVElOIFNNQUxMIExFVFRFUiBDCisweDg0CTB4MDA2NAkjTEFUSU4gU01BTEwgTEVUVEVSIEQKKzB4ODUJMHgwMDY1CSNMQVRJTiBTTUFMTCBMRVRURVIgRQorMHg4NgkweDAwNjYJI0xBVElOIFNNQUxMIExFVFRFUiBGCisweDg3CTB4MDA2NwkjTEFUSU4gU01BTEwgTEVUVEVSIEcKKzB4ODgJMHgwMDY4CSNMQVRJTiBTTUFMTCBMRVRURVIgSAorMHg4OQkweDAwNjkJI0xBVElOIFNNQUxMIExFVFRFUiBJCisweDhBCTB4MDBBQgkjTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEIJMHgwMEJCCSNSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEMJMHgwMEYwCSNMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweDhECTB4MDBGRAkjTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorMHg4RQkweDAwRkUJI0xBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorMHg4RgkweDAwQjEJI1BMVVMtTUlOVVMgU0lHTgorMHg5MAkweDAwQjAJI0RFR1JFRSBTSUdOCisweDkxCTB4MDA2QQkjTEFUSU4gU01BTEwgTEVUVEVSIEoKKzB4OTIJMHgwMDZCCSNMQVRJTiBTTUFMTCBMRVRURVIgSworMHg5MwkweDAwNkMJI0xBVElOIFNNQUxMIExFVFRFUiBMCisweDk0CTB4MDA2RAkjTEFUSU4gU01BTEwgTEVUVEVSIE0KKzB4OTUJMHgwMDZFCSNMQVRJTiBTTUFMTCBMRVRURVIgTgorMHg5NgkweDAwNkYJI0xBVElOIFNNQUxMIExFVFRFUiBPCisweDk3CTB4MDA3MAkjTEFUSU4gU01BTEwgTEVUVEVSIFAKKzB4OTgJMHgwMDcxCSNMQVRJTiBTTUFMTCBMRVRURVIgUQorMHg5OQkweDAwNzIJI0xBVElOIFNNQUxMIExFVFRFUiBSCisweDlBCTB4MDBBQQkjRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUIJMHgwMEJBCSNNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUMJMHgwMEU2CSNMQVRJTiBTTUFMTCBMRVRURVIgQUUKKzB4OUQJMHgwMEI4CSNDRURJTExBCisweDlFCTB4MDBDNgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUKKzB4OUYJMHgwMEE0CSNDVVJSRU5DWSBTSUdOCisweEEwCTB4MDBCNQkjTUlDUk8gU0lHTgorMHhBMQkweDAwREYJI0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCisweEEyCTB4MDA3MwkjTEFUSU4gU01BTEwgTEVUVEVSIFMKKzB4QTMJMHgwMDc0CSNMQVRJTiBTTUFMTCBMRVRURVIgVAorMHhBNAkweDAwNzUJI0xBVElOIFNNQUxMIExFVFRFUiBVCisweEE1CTB4MDA3NgkjTEFUSU4gU01BTEwgTEVUVEVSIFYKKzB4QTYJMHgwMDc3CSNMQVRJTiBTTUFMTCBMRVRURVIgVworMHhBNwkweDAwNzgJI0xBVElOIFNNQUxMIExFVFRFUiBYCisweEE4CTB4MDA3OQkjTEFUSU4gU01BTEwgTEVUVEVSIFkKKzB4QTkJMHgwMDdBCSNMQVRJTiBTTUFMTCBMRVRURVIgWgorMHhBQQkweDAwQTEJI0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKzB4QUIJMHgwMEJGCSNJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisweEFDCTB4MDBEMAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweEFECTB4MDBERAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisweEFFCTB4MDBERQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKzB4QUYJMHgwMEFFCSNSRUdJU1RFUkVEIFNJR04KKzB4QjAJMHgwMEEyCSNDRU5UIFNJR04KKzB4QjEJMHgwMEEzCSNQT1VORCBTSUdOCisweEIyCTB4MDBBNQkjWUVOIFNJR04KKzB4QjMJMHgwMEI3CSNNSURETEUgRE9UCisweEI0CTB4MDBBOQkjQ09QWVJJR0hUIFNJR04KKzB4QjUJMHgwMDQwCSNDT01NRVJDSUFMIEFUCisweEI2CTB4MDBCNgkjUElMQ1JPVyBTSUdOCisweEI3CTB4MDBCQwkjVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisweEI4CTB4MDBCRAkjVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisweEI5CTB4MDBCRQkjVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisweEJBCTB4MDBBQwkjTk9UIFNJR04KKzB4QkIJMHgwMDdDCSNWRVJUSUNBTCBMSU5FCisweEJDCTB4MjAzRQkjT1ZFUkxJTkUKKzB4QkQJMHgwMEE4CSNESUFFUkVTSVMKKzB4QkUJMHgwMEI0CSNBQ1VURSBBQ0NFTlQKKzB4QkYJMHgwMEQ3CSNNVUxUSVBMSUNBVElPTiBTSUdOCisweEMwCTB4MDBFNAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4QzEJMHgwMDQxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisweEMyCTB4MDA0MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorMHhDMwkweDAwNDMJI0xBVElOIENBUElUQUwgTEVUVEVSIEMKKzB4QzQJMHgwMDQ0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBECisweEM1CTB4MDA0NQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorMHhDNgkweDAwNDYJI0xBVElOIENBUElUQUwgTEVUVEVSIEYKKzB4QzcJMHgwMDQ3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisweEM4CTB4MDA0OAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorMHhDOQkweDAwNDkJI0xBVElOIENBUElUQUwgTEVUVEVSIEkKKzB4Q0EJMHgwMEFECSNTT0ZUIEhZUEhFTgorMHhDQgkweDAwRjQJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorMHhDQwkweDAwQTYJI0JST0tFTiBCQVIKKzB4Q0QJMHgwMEYyCSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweENFCTB4MDBGMwkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorMHhDRgkweDAwRjUJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKzB4RDAJMHgwMEZDCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworMHhEMQkweDAwNEEJI0xBVElOIENBUElUQUwgTEVUVEVSIEoKKzB4RDIJMHgwMDRCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisweEQzCTB4MDA0QwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorMHhENAkweDAwNEQJI0xBVElOIENBUElUQUwgTEVUVEVSIE0KKzB4RDUJMHgwMDRFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisweEQ2CTB4MDA0RgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworMHhENwkweDAwNTAJI0xBVElOIENBUElUQUwgTEVUVEVSIFAKKzB4RDgJMHgwMDUxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisweEQ5CTB4MDA1MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorMHhEQQkweDAwQjkJI1NVUEVSU0NSSVBUIE9ORQorMHhEQgkweDAwRkIJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorMHhEQwkweDAwN0QJI1JJR0hUIENVUkxZIEJSQUNLRVQKKzB4REQJMHgwMEY5CSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisweERFCTB4MDBGQQkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhERgkweDAwRkYJI0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisweEUwCTB4MDBENgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworMHhFMQkweDAwRjcJI0RJVklTSU9OIFNJR04KKzB4RTIJMHgwMDUzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisweEUzCTB4MDA1NAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorMHhFNAkweDAwNTUJI0xBVElOIENBUElUQUwgTEVUVEVSIFUKKzB4RTUJMHgwMDU2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisweEU2CTB4MDA1NwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworMHhFNwkweDAwNTgJI0xBVElOIENBUElUQUwgTEVUVEVSIFgKKzB4RTgJMHgwMDU5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisweEU5CTB4MDA1QQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorMHhFQQkweDAwQjIJI1NVUEVSU0NSSVBUIFRXTworMHhFQgkweDAwRDQJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisweEVDCTB4MDA1QwkjUkVWRVJTRSBTT0xJRFVTCisweEVECTB4MDBEMgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweEVFCTB4MDBEMwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisweEVGCTB4MDBENQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisweEYwCTB4MDAzMAkjRElHSVQgWkVSTworMHhGMQkweDAwMzEJI0RJR0lUIE9ORQorMHhGMgkweDAwMzIJI0RJR0lUIFRXTworMHhGMwkweDAwMzMJI0RJR0lUIFRIUkVFCisweEY0CTB4MDAzNAkjRElHSVQgRk9VUgorMHhGNQkweDAwMzUJI0RJR0lUIEZJVkUKKzB4RjYJMHgwMDM2CSNESUdJVCBTSVgKKzB4RjcJMHgwMDM3CSNESUdJVCBTRVZFTgorMHhGOAkweDAwMzgJI0RJR0lUIEVJR0hUCisweEY5CTB4MDAzOQkjRElHSVQgTklORQorMHhGQQkweDAwQjMJI1NVUEVSU0NSSVBUIFRIUkVFCisweEZCCTB4MDBEQgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKzB4RkMJMHgwMDVECSNSSUdIVCBTUVVBUkUgQlJBQ0tFVAorMHhGRAkweDAwRDkJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorMHhGRQkweDAwREEJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhGRgkweDAwOUYJI0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorCisgCSAgCSAKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCA2YmU0MWY1Li41ZDY2NmVkIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDYgKzEsNiBAQAogIyEgL2Jpbi9zaAogIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgotIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIHB5dGhvbiAzLjMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuNC4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvPi4KICMKQEAgLTU4MCw4ICs1ODAsOCBAQAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J3B5dGhvbicKIFBBQ0tBR0VfVEFSTkFNRT0ncHl0aG9uJwotUEFDS0FHRV9WRVJTSU9OPSczLjMnCi1QQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuMycKK1BBQ0tBR0VfVkVSU0lPTj0nMy40JworUEFDS0FHRV9TVFJJTkc9J3B5dGhvbiAzLjQnCiBQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2J1Z3MucHl0aG9uLm9yZy8nCiBQQUNLQUdFX1VSTD0nJwogCkBAIC02MjMsOCArNjIzLDExIEBACiAjZW5kaWYiCiAKIGFjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworRU5TVVJFUElQCiBTUkNESVJTCiBUSFJFQURIRUFERVJTCitMSUJQTAorUFlfRU5BQkxFX1NIQVJFRAogRVhUX1NVRkZJWAogU09BQkkKIExJQkMKQEAgLTcxMCw2ICs3MTMsNyBAQAogTUFDSERFUAogRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVgKIEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWAorRlJBTUVXT1JLUFlUSE9OVwogRlJBTUVXT1JLQUxUSU5TVEFMTExBU1QKIEZSQU1FV09SS0FMVElOU1RBTExGSVJTVAogRlJBTUVXT1JLSU5TVEFMTExBU1QKQEAgLTc5MCw2ICs3OTQsNyBAQAogZW5hYmxlX3NoYXJlZAogZW5hYmxlX3Byb2ZpbGluZwogd2l0aF9weWRlYnVnCit3aXRoX2hhc2hfYWxnb3JpdGhtCiB3aXRoX2xpYnMKIHdpdGhfc3lzdGVtX2V4cGF0CiB3aXRoX3N5c3RlbV9mZmkKQEAgLTgxMSw2ICs4MTYsNyBAQAogd2l0aF9saWJjCiBlbmFibGVfYmlnX2RpZ2l0cwogd2l0aF9jb21wdXRlZF9nb3Rvcword2l0aF9lbnN1cmVwaXAKICcKICAgICAgIGFjX3ByZWNpb3VzX3ZhcnM9J2J1aWxkX2FsaWFzCiBob3N0X2FsaWFzCkBAIC0xMzYyLDcgKzEzNjgsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuNCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDI3LDcgKzE0MzMsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy40OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0NTMsNyArMTQ1OSw3IEBACiAgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKICAgLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNICiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKQogICAtLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdAogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIC0tZW5hYmxlLWZyYW1ld29yawpAQCAtMTQ2Myw2ICsxNDY5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIKICAgLS13aXRoLXN1ZmZpeD0uZXhlICAgICAgc2V0IGV4ZWN1dGFibGUgc3VmZml4CiAgIC0td2l0aC1weWRlYnVnICAgICAgICAgIGJ1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZAorICAtLXdpdGgtaGFzaC1hbGdvcml0aG09W2ZudnxzaXBoYXNoMjRdCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBoYXNoIGFsZ29yaXRobQogICAtLXdpdGgtbGlicz0nbGliMSAuLi4nICBsaW5rIGFnYWluc3QgYWRkaXRpb25hbCBsaWJzCiAgIC0td2l0aC1zeXN0ZW0tZXhwYXQgICAgIGJ1aWxkIHB5ZXhwYXQgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBleHBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5CkBAIC0xNDkyLDYgKzE1MDAsOCBAQAogICAtLXdpdGgob3V0KS1jb21wdXRlZC1nb3RvcwogICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY29tcHV0ZWQgZ290b3MgaW4gZXZhbHVhdGlvbiBsb29wIChlbmFibGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycykKKyAgLS13aXRoKG91dCktZW5zdXJlcGlwPVs9dXBncmFkZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcAogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgTUFDSERFUCAgICAgbmFtZSBmb3IgbWFjaGluZS1kZXBlbmRlbnQgbGlicmFyeSBmaWxlcwpAQCAtMTU3MCw3ICsxNTgwLDcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1weXRob24gY29uZmlndXJlIDMuMworcHl0aG9uIGNvbmZpZ3VyZSAzLjQKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQogCiBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0yNDA5LDcgKzI0MTksNyBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy4zLCB3aGljaCB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgICQgJDAgJEAKQEAgLTI5NzksNyArMjk4OSw3IEBACiBtdiBjb25mZGVmcy5oLm5ldyBjb25mZGVmcy5oCiAKIAotVkVSU0lPTj0zLjMKK1ZFUlNJT049My40CiAKICMgVmVyc2lvbiBudW1iZXIgb2YgUHl0aG9uJ3Mgb3duIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCiAKQEAgLTMwMzUsNyArMzA0NSw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTMwNzgsNiArMzA4OCw3IEBACiAKIAogCitBUkNIX1JVTl8zMkJJVD0iIgogCiAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgcHJlZmVyIHRvIHNlbGVjdCAnMzItYml0JyBpZiBhdmFpbGFibGUsCiAjIG90aGVyd2lzZSB1c2UgJ2ludGVsJwpAQCAtMzA4Niw3ICszMDk3LDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0zMTAwLDE5ICszMTExLDE4IEBACiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLXVuaXZlcnNhbC1hcmNocyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhfdW5pdmVyc2FsX2FyY2hzK3NldH0iID0gc2V0OyB0aGVuIDoKICAgd2l0aHZhbD0kd2l0aF91bml2ZXJzYWxfYXJjaHM7Ci0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRodmFsIiA+JjUKLSRhc19lY2hvICIkd2l0aHZhbCIgPiY2OyB9CiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKIAotZWxzZQotCi0gCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1VOSVZFUlNBTF9BUkNIU30iID4mNQotJGFzX2VjaG8gIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY2OyB9Ci0KIGZpCiAKLQotCitpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCit0aGVuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY1CiskYXNfZWNobyAiJHtVTklWRVJTQUxfQVJDSFN9IiA+JjY7IH0KK2Vsc2UKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCiAKIAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mcmFtZXdvcmstbmFtZSB3YXMgZ2l2ZW4uCkBAIC0zMTQ3LDYgKzMxNTcsNyBAQAogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwkJRlJBTUVXT1JLUFlUSE9OVz0KIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCQllbHNlCkBAIC0zMTYxLDYgKzMxNzIsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjI4LDYgKzMyNDAsNyBAQAogCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwlGUkFNRVdPUktQWVRIT05XPQogCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIiA7IHRoZW4KIAkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKIAllbHNlCkBAIC0zMjUwLDYgKzMyNjMsNyBAQAogCiAKIAorCiAjI0FDX0FSR19XSVRIKGR5bGQsCiAjIyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZHlsZF0sCiAjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcl0pKQpAQCAtNDgwMSwxNiArNDgxNSwxNiBAQAogZmkKIGlmIHRlc3QgIiRwcmVzZXRfY3h4IiAhPSAiJENYWCIKIHRoZW4KLSAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306CiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggXCIkQ1hYXCIuCiAgIElmIHRoaXMgaXMgbm90IGludGVuZGVkLCB0aGVuIHNldCBDWFggb24gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCiAgICIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOgorJGFzX2VjaG8gIiRhc19tZToKIAogICBCeSBkZWZhdWx0LCBkaXN0dXRpbHMgd2lsbCBidWlsZCBDKysgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcIiRDWFhcIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KLSAgIiA+JjI7fQorICAiID4mNjt9CiBmaQogCiAKQEAgLTU1ODQsNiArNTU5OCw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogCiAkYXNfZWNobyAiI2RlZmluZSBQeV9FTkFCTEVfU0hBUkVEIDEiID4+Y29uZmRlZnMuaAogCkBAIC01NjQxLDYgKzU2NTYsNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC02MzgxLDYgKzYzOTcsNDkgQEAKICAgICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1Xbm8tdW51c2VkLXJlc3VsdCIKICAgICBmaQogCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50Li4uICIgPiY2OyB9CisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIGlmICR7YWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9eWVzCisKK2Vsc2UKKworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nIiA+JjY7IH0KKworICAgIGlmIHRlc3QgJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nID0geWVzCisgICAgdGhlbgorICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgZmkKKwogICAgICMgaWYgdXNpbmcgZ2NjIG9uIGFscGhhLCB1c2UgLW1pZWVlIHRvIGdldCAobmVhcikgZnVsbCBJRUVFIDc1NAogICAgICMgc3VwcG9ydC4gIFdpdGhvdXQgdGhpcywgdHJlYXRtZW50IG9mIHN1Ym5vcm1hbHMgZG9lc24ndCBmb2xsb3cKICAgICAjIHRoZSBzdGFuZGFyZC4KQEAgLTYzOTQsMTEzICs2NDUzLDEyNCBAQAogCVNDT19TViopCiAJICAgIEJBU0VDRkxBR1M9IiRCQVNFQ0ZMQUdTIC1tNDg2IC1EU0NPNSIKIAkgICAgOzsKLQkjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/Ci0JRGFyd2luKikKLQkgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKLQkgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCi0gICAgICAgICAgICBpZiB0ZXN0ICIke0NDfSIgPSBnY2MKLQkgICAgdGhlbgotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkIiA+JjUKKworICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQuLi4gIiA+JjY7IH0KLQkJY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgotCQkqL01hY09TWDEwLjR1LnNkaykKLQkJCSMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiAkYXNfZWNobyAiJENDIiA+JjY7IH0KLQkgICAgZmkKKyAgICAgICAgZmkKIAorICAgICAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjYXNlICIkVU5JVkVSU0FMX0FSQ0hTIiBpbgorICAgICAgICAgICAgMzItYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICA2NC1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgYWxsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgaW50ZWwtMzIpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgMy13YXkpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1CisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImFsbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZS4uLiAiID4mNjsgfQorICAgICAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQorICAgICAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCisgICAgICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgorICAgICAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCisgICAgICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCisgICAgICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKKyAgICAgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY1CiskYXNfZWNobyAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIgPiY2OyB9CiAKLQkJIGVsc2UKLQkgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQotCi0JCSBmaQotCi0KLQkJQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKLQkJdGhlbgotCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKLQkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgotCQlmaQotCSAgICBmaQotCi0JICAgICMgQ2FsY3VsYXRlIHRoZSByaWdodCBkZXBsb3ltZW50IHRhcmdldCBmb3IgdGhpcyBidWlsZC4KLQkgICAgIwotCSAgICBjdXJfdGFyZ2V0PWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IHNlZCAncy9cKDEwXC5bMC05XSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhCi0JCQkJICAgICMgNC13YXkgdW5pdmVyc2FsIGJ1aWxkIGlzIE9TWCAxMC41LAotCQkJCSAgICAjIHRoYXQncyB0aGUgZmlyc3QgT1MgcmVsZWFzZSB3aGVyZQotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0KLQkgICAgIyBNYWtlIHN1cmUgdGhhdCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgaXMgc2V0IGluIHRoZQotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtNjUyNyw0NCArNjU5Nyw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZ2NjIHN1cHBvcnRzIFBhcnNlVHVwbGUgX19mb3JtYXRfXy4uLiAiID4mNjsgfQotICBzYXZlX0NGTEFHUz0kQ0ZMQUdTCi0gIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XZm9ybWF0IgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSAgICB2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTsKLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFIDEiID4+Y29uZmRlZnMuaAotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotZWxzZQotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgQ0ZMQUdTPSRzYXZlX0NGTEFHUwotZmkKLQogIyBPbiBzb21lIGNvbXBpbGVycywgcHRocmVhZHMgYXJlIGF2YWlsYWJsZSB3aXRob3V0IGZ1cnRoZXIgb3B0aW9ucwogIyAoZS5nLiBNYWNPUyBYKS4gT24gc29tZSBvZiB0aGVzZSBzeXN0ZW1zLCB0aGUgY29tcGlsZXIgd2lsbCBub3QKICMgY29tcGxhaW4gaWYgdW5hY2NlcHRlZCBvcHRpb25zIGFyZSBwYXNzZWQgKGUuZy4gZ2NjIG9uIE1hYyBPUyBYKS4KQEAgLTY5MzYsNyArNjk2OCw4IEBACiBzeXMvc3RhdC5oIHN5cy9zeXNjYWxsLmggc3lzL3N5c19kb21haW4uaCBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdWlvLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIFwKIGxpYnV0aWwuaCBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKQEAgLTcyMjksNyArNzI2Miw3IEBACiAKIAogIyBPbiBMaW51eCwgY2FuLmggYW5kIGNhbi9yYXcuaCByZXF1aXJlIHN5cy9zb2NrZXQuaAotZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmgKK2ZvciBhY19oZWFkZXIgaW4gbGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKQEAgLTczMTAsNiArNzM0Myw0MyBAQAogCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxlNjR0b2giID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxlNjR0b2guLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIEhBVkVfRU5ESUFOX0gKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNfRU5ESUFOX0gpCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisgICBsZTY0dG9oKDEpCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXNfbGU2NHRvaD15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGFzX2xlNjR0b2g9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXNfbGU2NHRvaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhc19sZTY0dG9oIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl9oYXNfbGU2NHRvaCIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0hUT0xFNjQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTgyNzYsNyArODM0Niw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIAogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KICAgRGFyd2luL1swMTU2N11cLi4qKQpAQCAtODM0OCwxNCArODQxNywxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLWVuYWJsZS1mcmFtZXdvcmsiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yay4uLiAiID4mNjsgfQogaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCkBAIC04NDgzLDkgKzg1NTAsNiBAQAogCiAJCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCiAJCXRoZW4KLQkJCWlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCQkJTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJZmkKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgpAQCAtODYxMyw2ICs4Njc3LDEyIEBACiAJIyAtdSBsaWJzeXNfcyBwdWxscyBpbiBhbGwgc3ltYm9scyBpbiBsaWJzeXMKIAlEYXJ3aW4vKikKIAkJTElOS0ZPUlNIQVJFRD0iJGV4dHJhX3VuZGVmcyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorCisJCSMgSXNzdWUgIzE4MDc1OiB0aGUgZGVmYXVsdCBtYXhpbXVtIHN0YWNrIHNpemUgKDhNQnl0ZXMpIGlzIHRvbworCQkjIHNtYWxsIGZvciB0aGUgZGVmYXVsdCByZWN1cnNpb24gbGltaXQuIEluY3JlYXNlIHRoZSBzdGFjayBzaXplCisJCSMgdG8gZW5zdXJlIHRoYXQgdGVzdHMgZG9uJ3QgY3Jhc2gKKwkJTElOS0ZPUlNIQVJFRD0iLVdsLC1zdGFja19zaXplLDEwMDAwMDAgJExJTktGT1JTSEFSRUQiCisKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiAJCXRoZW4KIAkJCUxJTktGT1JTSEFSRUQ9IiRMSU5LRk9SU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwpAQCAtODk2Nyw2ICs5MDM3LDc5IEBACiAJKikgOzsKIGVzYWMKIAorIyBjaGVjayBmb3Igc3lzdGVtcyB0aGF0IHJlcXVpcmUgYWxpZ25lZCBtZW1vcnkgYWNjZXNzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWxpZ25lZF9yZXF1aXJlZD15ZXMKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQgbWFpbigpCit7CisgICAgY2hhciBzWzE2XTsKKyAgICBpbnQgaSwgKnAxLCAqcDI7CisgICAgZm9yIChpPTA7IGkgPCAxNjsgaSsrKQorICAgICAgICBzW2ldID0gaTsKKyAgICBwMSA9IChpbnQqKShzKzEpOworICAgIHAyID0gKGludCopKHMrMik7CisgICAgaWYgKCpwMSA9PSAqcDIpCisgICAgICAgIHJldHVybiAxOworICAgIHJldHVybiAwOworfQorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBhbGlnbmVkX3JlcXVpcmVkPW5vCitlbHNlCisgIGFsaWduZWRfcmVxdWlyZWQ9eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworCitpZiB0ZXN0ICIkYWxpZ25lZF9yZXF1aXJlZCIgPSB5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxJR05FRF9SRVFVSVJFRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWxpZ25lZF9yZXF1aXJlZCIgPiY1CiskYXNfZWNobyAiJGFsaWduZWRfcmVxdWlyZWQiID4mNjsgfQorCisKKyMgc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldyBoYXNoIGFsZ29yaXRobQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC1oYXNoLWFsZ29yaXRobSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtLi4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaGFzaF9hbGdvcml0aG0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2hhc2hfYWxnb3JpdGhtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9oYXNoX2FsZ29yaXRobTsKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAiJHdpdGh2YWwiID4mNjsgfQorY2FzZSAiJHdpdGh2YWwiIGluCisgICAgc2lwaGFzaDI0KQorICAgICAgICAkYXNfZWNobyAiI2RlZmluZSBQeV9IQVNIX0FMR09SSVRITSAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gMiIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnIiAiJExJTkVOTyIgNQorICAgICAgICA7OworZXNhYworCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBkZWZhdWx0IiA+JjUKKyRhc19lY2hvICJkZWZhdWx0IiA+JjY7IH0KK2ZpCisKKwogIyBNb3N0IFNWUjQgcGxhdGZvcm1zIChlLmcuIFNvbGFyaXMpIG5lZWQgLWxzb2NrZXQgYW5kIC1sbnNsLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sbnNsIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciB0X29wZW4gaW4gLWxuc2wuLi4gIiA+JjY7IH0KQEAgLTEwMzA4LDcgKzEwNDUxLDcgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBmb3IgYWNfZnVuYyBpbiBhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCiAgZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCkBAIC0xMDMyOCw3ICsxMDQ3MSw3IEBACiAgc2lndGltZWR3YWl0IHNpZ3dhaXQgc2lnd2FpdGluZm8gc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBzeW1saW5rYXQgc3luYyBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bmxpbmthdCB1bnNldGVudiB1dGltZW5zYXQgdXRpbWVzIHdhaXRpZCB3YWl0cGlkIHdhaXQzIHdhaXQ0IFwKLSB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd3JpdGV2IF9nZXRwdHkKKyB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd21lbWNtcCB3cml0ZXYgX2dldHB0eQogZG8gOgogICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKQEAgLTEwNTgxLDYgKzEwNzI0LDM1IEBACiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBybGltaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBybGltaXQuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK2ludAorbWFpbiAoKQorewordm9pZCAqeD1wcmxpbWl0CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUkxJTUlUIDEiID4+Y29uZmRlZnMuaAorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0xMTQxMiwxOSArMTE1ODQsNiBAQAogCiBmaQogCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRjd2QiICJhY19jdl9mdW5jX2dldGN3ZCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRjd2QiID0geHllczsgdGhlbiA6Ci0gICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUQ1dEIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGdldGN3ZC4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0Y3dkLiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQotZmkKLQogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyZHVwIiAiYWNfY3ZfZnVuY19zdHJkdXAiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RyZHVwIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkRVUCAxIiA+PmNvbmZkZWZzLmgKQEAgLTEzNzc4LDYgKzEzOTM3LDEwIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEVkVSU0lPTiIgPiY1CiAkYXNfZWNobyAiJExEVkVSU0lPTiIgPiY2OyB9CiAKKworTElCUEw9IiR7cHJlZml4fS9saWIvcHl0aG9uJHtWRVJTSU9OfS9jb25maWctJHtMRFZFUlNJT059IgorCisKICMgQ2hlY2sgd2hldGhlciByaWdodCBzaGlmdGluZyBhIG5lZ2F0aXZlIGludGVnZXIgZXh0ZW5kcyB0aGUgc2lnbiBiaXQKICMgb3IgZmlsbHMgd2l0aCB6ZXJvcyAobGlrZSB0aGUgQ3JheSBKOTAsIGFjY29yZGluZyB0byBUaW0gUGV0ZXJzKS4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCIgPiY1CkBAIC0xNTE4NSw4ICsxNTM0OCwzMyBAQAogICAgIGVzYWMKIGZpCiAKKyMgZW5zdXJlcGlwIG9wdGlvbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZW5zdXJlcGlwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlbnN1cmVwaXAuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnN1cmVwaXAgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Vuc3VyZXBpcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZW5zdXJlcGlwOworZWxzZQorICB3aXRoX2Vuc3VyZXBpcD11cGdyYWRlCitmaQorCitjYXNlICR3aXRoX2Vuc3VyZXBpcCBpbiAjKAorICB5ZXN8dXBncmFkZSkgOgorICAgIEVOU1VSRVBJUD11cGdyYWRlIDs7ICMoCisgIGluc3RhbGwpIDoKKyAgICBFTlNVUkVQSVA9aW5zdGFsbCA7OyAjKAorICBubykgOgorICAgIEVOU1VSRVBJUD1ubyA7OyAjKAorICAqKSA6CisgICAgYXNfZm5fZXJyb3IgJD8gIi0td2l0aC1lbnN1cmVwaXA9dXBncmFkZXxpbnN0YWxsfG5vIiAiJExJTkVOTyIgNSA7OworZXNhYworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRFTlNVUkVQSVAiID4mNQorJGFzX2VjaG8gIiRFTlNVUkVQSVAiID4mNjsgfQorCisKICMgZ2VuZXJhdGUgb3V0cHV0IGZpbGVzCi1hY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlLnByZSBNb2R1bGVzL1NldHVwLmNvbmZpZyBNaXNjL3B5dGhvbi5wYyBNaXNjL3B5dGhvbi1jb25maWcuc2giCiAKIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNb2R1bGVzL2xkX3NvX2FpeCIKIApAQCAtMTU2OTcsNyArMTU4ODUsNyBAQAogIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCiAjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgogYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgcHl0aG9uICRhc19tZSAzLjMsIHdoaWNoIHdhcworVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCkBAIC0xNTc1OSw3ICsxNTk0Nyw3IEBACiBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCiBhY19jc192ZXJzaW9uPSJcXAotcHl0aG9uIGNvbmZpZy5zdGF0dXMgMy4zCitweXRob24gY29uZmlnLnN0YXR1cyAzLjQKIGNvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKICAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKQEAgLTE1ODkwLDYgKzE2MDc4LDcgQEAKICAgICAiTWFrZWZpbGUucHJlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlLnByZSIgOzsKICAgICAiTW9kdWxlcy9TZXR1cC5jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTW9kdWxlcy9TZXR1cC5jb25maWciIDs7CiAgICAgIk1pc2MvcHl0aG9uLnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1pc2MvcHl0aG9uLnBjIiA7OworICAgICJNaXNjL3B5dGhvbi1jb25maWcuc2giKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24tY29uZmlnLnNoIiA7OwogICAgICJNb2R1bGVzL2xkX3NvX2FpeCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL2xkX3NvX2FpeCIgOzsKIAogICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCA2YTY0YmZmLi4xNGIzYWVmIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0zLDcgKzMsNyBAQAogZG5sICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICMgU2V0IFZFUlNJT04gc28gd2Ugb25seSBuZWVkIHRvIGVkaXQgaW4gb25lIHBsYWNlIChpLmUuLCBoZXJlKQotbTRfZGVmaW5lKFBZVEhPTl9WRVJTSU9OLCAzLjMpCittNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuNCkKIAogQUNfUFJFUkVRKDIuNjUpCiAKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQkjIExvY2F0ZSB0aGUgYmVzdCB1c2FibGUgU0RLLCBzZWUgTWFjL1JFQURNRS50eHQgZm9yIG1vcmUKIAkJIyBpbmZvcm1hdGlvbgogCQllbmFibGV2YWw9ImAvdXNyL2Jpbi94Y29kZWJ1aWxkIC12ZXJzaW9uIC1zZGsgbWFjb3N4IFBhdGggMj4vZGV2L251bGxgIgotCQlpZiB0ZXN0IC16ICIke2VuYWJsZXZhbH0iCisJCWlmICEgKCBlY2hvICRlbmFibGV2YWwgfCBncmVwIC1FICdcLnNkaycgMT4vZGV2L251bGwgKQogCQl0aGVuCiAJCQllbmFibGV2YWw9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkawogCQkJaWYgdGVzdCAhIC1kICIke2VuYWJsZXZhbH0iCkBAIC0xODksNiArMTg5LDcgQEAKIEFDX1NVQlNUKFVOSVZFUlNBTFNESykKIAogQUNfU1VCU1QoQVJDSF9SVU5fMzJCSVQpCitBUkNIX1JVTl8zMkJJVD0iIgogCiAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHJlYXNvbnMgd2UgcHJlZmVyIHRvIHNlbGVjdCAnMzItYml0JyBpZiBhdmFpbGFibGUsCiAjIG90aGVyd2lzZSB1c2UgJ2ludGVsJwpAQCAtMTk3LDcgKzE5OCw3IEBACiB0aGVuCiAJaWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgogCXRoZW4KLQkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCisJCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlIC1MICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgogCQl0aGVuCiAJCQlVTklWRVJTQUxfQVJDSFM9ImludGVsIgogCQlmaQpAQCAtMjA3LDE2ICsyMDgsMTcgQEAKIEFDX1NVQlNUKExJUE9fMzJCSVRfRkxBR1MpCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC11bml2ZXJzYWwtYXJjaHMpCiBBQ19BUkdfV0lUSCh1bml2ZXJzYWwtYXJjaHMsCi0gICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIgb3IgImFsbCIpXSksCisgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKV0pLAogWwotCUFDX01TR19SRVNVTFQoJHdpdGh2YWwpCiAJVU5JVkVSU0FMX0FSQ0hTPSIkd2l0aHZhbCIKIF0sCi1bCi0gCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQotXSkKLQotCitbXSkKK2lmIHRlc3QgLW4gIiR7VU5JVkVSU0FMU0RLfSIKK3RoZW4KKwlBQ19NU0dfUkVTVUxUKCR7VU5JVkVSU0FMX0FSQ0hTfSkKK2Vsc2UKKwlBQ19NU0dfUkVTVUxUKG5vKQorZmkKIAogQUNfQVJHX1dJVEgoZnJhbWV3b3JrLW5hbWUsCiAgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLXSwKQEAgLTI0OCw2ICsyNTAsNyBAQAogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0KKwkJRlJBTUVXT1JLUFlUSE9OVz0KIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCQllbHNlCkBAIC0yNjIsNiArMjY1LDcgQEAKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlICIKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLUFlUSE9OVz0iZnJhbWV3b3JrcHl0aG9udyIKIAkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgpAQCAtMzIzLDYgKzMyNyw3IEBACiAJRlJBTUVXT1JLSU5TVEFMTExBU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPQogCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCUZSQU1FV09SS1BZVEhPTlc9CiAJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgogCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgogCWVsc2UKQEAgLTM0MCw2ICszNDUsNyBAQAogQUNfU1VCU1QoRlJBTUVXT1JLSU5TVEFMTExBU1QpCiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QpCiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMTEFTVCkKK0FDX1NVQlNUKEZSQU1FV09SS1BZVEhPTlcpCiBBQ19TVUJTVChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpCiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWCkKIApAQCAtNjkxLDcgKzY5Nyw3IEBACiBmaQogaWYgdGVzdCAiJHByZXNldF9jeHgiICE9ICIkQ1hYIgogdGhlbgotICAgICAgICBBQ19NU0dfV0FSTihbCisgICAgICAgIEFDX01TR19OT1RJQ0UoWwogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoICIkQ1hYIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KQEAgLTkxNyw2ICs5MjMsNyBAQAogCiAjIE90aGVyIHBsYXRmb3JtcyBmb2xsb3cKIGlmIHRlc3QgJGVuYWJsZV9zaGFyZWQgPSAieWVzIjsgdGhlbgorICBQWV9FTkFCTEVfU0hBUkVEPTEKICAgQUNfREVGSU5FKFB5X0VOQUJMRV9TSEFSRUQsIDEsIFtEZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5Ll0pCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQpAQCAtOTcyLDYgKzk3OSw3IEBACiAKICAgZXNhYwogZWxzZSAjIHNoYXJlZCBpcyBkaXNhYmxlZAorICBQWV9FTkFCTEVfU0hBUkVEPTAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKQEAgLTExODIsNiArMTE5MCwyOCBAQAogICAgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLVduby11bnVzZWQtcmVzdWx0IgogICAgIGZpCiAKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50KQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcsCisgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICBbCisJICAgQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbXV0pCisJIF0sWworICAgICAgICAgICBhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZz15ZXMKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPW5vCisJIF0pKQorICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nKQorCisgICAgaWYgdGVzdCAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcgPSB5ZXMKKyAgICB0aGVuCisgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICBmaQorCiAgICAgIyBpZiB1c2luZyBnY2Mgb24gYWxwaGEsIHVzZSAtbWllZWUgdG8gZ2V0IChuZWFyKSBmdWxsIElFRUUgNzU0CiAgICAgIyBzdXBwb3J0LiAgV2l0aG91dCB0aGlzLCB0cmVhdG1lbnQgb2Ygc3Vibm9ybWFscyBkb2Vzbid0IGZvbGxvdwogICAgICMgdGhlIHN0YW5kYXJkLgpAQCAtMTE5NSwxMTEgKzEyMjUsMTIwIEBACiAJU0NPX1NWKikKIAkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLW00ODYgLURTQ081IgogCSAgICA7OwotCSMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KLQlEYXJ3aW4qKQotCSAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAotCSAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KLSAgICAgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYwotCSAgICB0aGVuCi0JCUFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKLQkJY2FzZSAiJHtVTklWRVJTQUxTREt9IiBpbgotCQkqL01hY09TWDEwLjR1LnNkaykKLQkJCSMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZSAKLQkJCSMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQotCQkJIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgotCQkJQ0M9Z2NjLTQuMAotCQkJQ1BQPWNwcC00LjAKLQkJCTs7Ci0JCWVzYWMKLQkJQUNfTVNHX1JFU1VMVCgkQ0MpCi0JICAgIGZpCiAKKyAgICAjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/CisgICAgRGFyd2luKikKKyAgICAgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKKyAgICAgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCisgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYworICAgICAgICB0aGVuCisgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggY29tcGlsZXIgc2hvdWxkIGJlIHVzZWQpCisgICAgICAgICAgICBjYXNlICIke1VOSVZFUlNBTFNES30iIGluCisgICAgICAgICAgICAqL01hY09TWDEwLjR1LnNkaykKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42CisgICAgICAgICAgICAgICAgQ0M9Z2NjLTQuMAorICAgICAgICAgICAgICAgIENQUD1jcHAtNC4wCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoJENDKQorICAgICAgICBmaQogCi0JICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCi0JCVVOSVZFUlNBTF9BUkNIX0ZMQUdTPSIiCi0JICAgICAgICBpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzMi1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjY0LWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9IiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9InRydWUiCisgICAgICAgIGlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAzMi1iaXQpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjIC1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDY0LWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBhbGwpCisgICAgICAgICAgICAgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBpbnRlbC0zMikKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iIgorICAgICAgICAgICAgICAgQVJDSF9SVU5fMzJCSVQ9IiIKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAzLXdheSkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisgICAgICAgICAgICBmaQorICAgICAgICBmaQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJpbnRlbCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYiCisgICAgICAgICMgQ2FsY3VsYXRlIGFuIGFwcHJvcHJpYXRlIGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkOgorICAgICAgICAjIFRoZSBkZXBsb3ltZW50IHRhcmdldCB2YWx1ZSBpcyB1c2VkIGV4cGxpY2l0bHkgdG8gZW5hYmxlIGNlcnRhaW4KKyAgICAgICAgIyBmZWF0dXJlcyBhcmUgZW5hYmxlZCAoc3VjaCBhcyBidWlsdGluIGxpYmVkaXQgc3VwcG9ydCBmb3IgcmVhZGxpbmUpCisgICAgICAgICMgdGhyb3VnaCB0aGUgdXNlIG9mIEFwcGxlJ3MgQXZhaWxhYmlsaXkgTWFjcm9zIGFuZCBpcyB1c2VkIGFzIGEKKyAgICAgICAgIyBjb21wb25lbnQgb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieSBkaXN0dXRpbHMuZ2V0X3BsYXRmb3JtKCkuCisgICAgICAgICMKKyAgICAgICAgIyBVc2UgdGhlIHZhbHVlIGZyb206CisgICAgICAgICMgMS4gdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzcGVjaWZpZWQKKyAgICAgICAgIyAyLiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBtYWNoaW5lIGlmID49IDEwLjYKKyAgICAgICAgIyAzLiBJZiBydW5uaW5nIG9uIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUsIHVzZSB0aGUgbGVnYWN5IHRlc3RzCisgICAgICAgICMgICAgICAgYmVsb3cgdG8gcGljayBlaXRoZXIgMTAuMywgMTAuNCwgb3IgMTAuNSBhcyB0aGUgdGFyZ2V0LgorICAgICAgICAjIDQuIElmIHdlIGFyZSBydW5uaW5nIG9uIE9TIFggMTAuMiBvciBlYXJsaWVyLCBnb29kIGx1Y2shCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcod2hpY2ggTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIHRvIHVzZSkKKyAgICAgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgorICAgICAgICB0aGVuCisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JCSBlbHNlCi0JICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIEFDX01TR19SRVNVTFQoJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCkKIAotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCi0JCXRoZW4KLQkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKLQkJZmkKLQkgICAgZmkKLQotCSAgICAjIENhbGN1bGF0ZSB0aGUgcmlnaHQgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQuCi0JICAgICMKLQkgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhIAotCQkJCSAgICAjIDQtd2F5IHVuaXZlcnNhbCBidWlsZCBpcyBPU1ggMTAuNSwgCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlIAotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0JICAgIAotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlIAotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtMTMyNiwyNCArMTM2NSw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCi0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFsKLSAgICBBQ19MQU5HX1BST0dSQU0oW1t2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTtdXSwgW1tdXSkKLSAgXSxbCi0gICAgQUNfREVGSU5FKEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFLCAxLAotICAgICAgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLFsKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICBdKQotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtMTUyNiw3ICsxNTQ3LDggQEAKIHN5cy9zdGF0Lmggc3lzL3N5c2NhbGwuaCBzeXMvc3lzX2RvbWFpbi5oIHN5cy90ZXJtaW8uaCBzeXMvdGltZS5oIFwKIHN5cy90aW1lcy5oIHN5cy90eXBlcy5oIHN5cy91aW8uaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggXAogbGlidXRpbC5oIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmggYWxsb2NhLmgpCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaCkKIENQUEZMQUdTPSRhY19zYXZlX2NwcGZsYWdzCiBBQ19IRUFERVJfRElSRU5UCiBBQ19IRUFERVJfTUFKT1IKQEAgLTE1NjYsNyArMTU4OCw3IEBACiBdKQogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1BQ19DSEVDS19IRUFERVJTKGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaCwsLFsKK0FDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaCwsLFsKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTU5Nyw2ICsxNjE5LDIyIEBACiAgICAgQUNfREVGSU5FKEhBVkVfTUFLRURFViwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3JvLl0pCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK0FDX01TR19DSEVDS0lORyhmb3IgbGU2NHRvaCkKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX0VORElBTl9ICisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorXV0sIFtbCisgICBsZTY0dG9oKDEpIF1dKQorXSxbYWNfY3ZfaGFzX2xlNjR0b2g9eWVzXSxbYWNfY3ZfaGFzX2xlNjR0b2g9bm9dKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGFzX2xlNjR0b2gpCitpZiB0ZXN0ICIkYWNfY3ZfaGFzX2xlNjR0b2giID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9IVE9MRTY0LCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpXSkKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTE3OTgsNyArMTgzNiw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIEFDX1NVQlNUKExJQlRPT0xfQ1JVRlQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopIApAQCAtMTg1NSwxNCArMTg5MiwxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0tZW5hYmxlLWZyYW1ld29yaykKIGlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogdGhlbgpAQCAtMTk4Miw5ICsyMDE3LDYgQEAKIAogCQlpZiB0ZXN0ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSAnPicgMTAuMgogCQl0aGVuCi0JCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCWZpCiAJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKQEAgLTIxMDgsNiArMjE0MCwxMiBAQAogCSMgLXUgbGlic3lzX3MgcHVsbHMgaW4gYWxsIHN5bWJvbHMgaW4gbGlic3lzCiAJRGFyd2luLyopIAogCQlMSU5LRk9SU0hBUkVEPSIkZXh0cmFfdW5kZWZzIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCisKKwkJIyBJc3N1ZSAjMTgwNzU6IHRoZSBkZWZhdWx0IG1heGltdW0gc3RhY2sgc2l6ZSAoOE1CeXRlcykgaXMgdG9vCisJCSMgc21hbGwgZm9yIHRoZSBkZWZhdWx0IHJlY3Vyc2lvbiBsaW1pdC4gSW5jcmVhc2UgdGhlIHN0YWNrIHNpemUKKwkJIyB0byBlbnN1cmUgdGhhdCB0ZXN0cyBkb24ndCBjcmFzaAorCQlMSU5LRk9SU0hBUkVEPSItV2wsLXN0YWNrX3NpemUsMTAwMDAwMCAkTElOS0ZPUlNIQVJFRCIKKwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKIAkJdGhlbgogCQkJTElOS0ZPUlNIQVJFRD0iJExJTktGT1JTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCkBAIC0yMjEyLDYgKzIyNTAsNTkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK0FDX01TR19DSEVDS0lORyhhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQpCitBQ19UUllfUlVOKFsKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisgICAgICAgICAgICAgIF0sCisgICAgIFthbGlnbmVkX3JlcXVpcmVkPW5vXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSkKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorICBBQ19ERUZJTkUoW0hBVkVfQUxJR05FRF9SRVFVSVJFRF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZF0pCitmaQorQUNfTVNHX1JFU1VMVCgkYWxpZ25lZF9yZXF1aXJlZCkKKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KK0FIX1RFTVBMQVRFKFB5X0hBU0hfQUxHT1JJVEhNLAorICBbRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LgorICAgU2lwSGFzaDI0OiAxLCBGTlY6IDIsIGV4dGVybmFsbHkgZGVmaW5lZDogMF0pCisKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtKQorZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKK0FDX0FSR19XSVRIKGhhc2hfYWxnb3JpdGhtLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1oYXNoLWFsZ29yaXRobT1APDpAZm52fHNpcGhhc2gyNEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdCBoYXNoIGFsZ29yaXRobV0pLAorWworQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAxKQorICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAyKQorICAgICAgICA7OworICAgICopCisgICAgICAgIEFDX01TR19FUlJPUihbdW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnXSkKKyAgICAgICAgOzsKK2VzYWMKK10sCitbQUNfTVNHX1JFU1VMVChkZWZhdWx0KV0pCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIEFDX0NIRUNLX0xJQihuc2wsIHRfb3BlbiwgW0xJQlM9Ii1sbnNsICRMSUJTIl0pICMgU1ZSNAogQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0LCBbTElCUz0iLWxzb2NrZXQgJExJQlMiXSwgW10sICRMSUJTKSAjIFNWUjQgc29ja2V0cwpAQCAtMjgyMyw3ICsyOTE0LDcgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBBQ19DSEVDS19GVU5DUyhhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCiAgZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCkBAIC0yODQzLDcgKzI5MzQsNyBAQAogIHNpZ3RpbWVkd2FpdCBzaWd3YWl0IHNpZ3dhaXRpbmZvIHNucHJpbnRmIHN0cmZ0aW1lIHN0cmxjcHkgc3ltbGlua2F0IHN5bmMgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5saW5rYXQgdW5zZXRlbnYgdXRpbWVuc2F0IHV0aW1lcyB3YWl0aWQgd2FpdHBpZCB3YWl0MyB3YWl0NCBcCi0gd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIHdyaXRldiBfZ2V0cHR5KQorIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3bWVtY21wIHdyaXRldiBfZ2V0cHR5KQogCiBBQ19DSEVDS19ERUNMKGRpcmZkLAogICAgIEFDX0RFRklORShIQVZFX0RJUkZELCAxLApAQCAtMjkxMCw2ICszMDAxLDE2IEBACiAgICBBQ19NU0dfUkVTVUxUKHllcyldLAogICBbQUNfTVNHX1JFU1VMVChubykKIF0pCitBQ19NU0dfQ0hFQ0tJTkcoZm9yIHBybGltaXQpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyAgICBdXSwgW1t2b2lkICp4PXBybGltaXRdXSldLAorICBbQUNfREVGSU5FKEhBVkVfUFJMSU1JVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVuY3Rpb25zLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKKwogIyBPbiBzb21lIHN5c3RlbXMgKGVnLiBGcmVlQlNEIDUpLCB3ZSB3b3VsZCBmaW5kIGEgZGVmaW5pdGlvbiBvZiB0aGUKICMgZnVuY3Rpb25zIGN0ZXJtaWRfciwgc2V0Z3JvdXBzIGluIHRoZSBsaWJyYXJ5LCBidXQgbm8gcHJvdG90eXBlCiAjIChlLmcuIGJlY2F1c2Ugd2UgdXNlIF9YT1BFTl9TT1VSQ0UpLiBTZWUgd2hldGhlciB3ZSBjYW4gdGFrZSB0aGVpcgpAQCAtMzExMCw3ICszMjExLDcgQEAKICMgY2hlY2sgZm9yIGxvbmcgZmlsZSBzdXBwb3J0IGZ1bmN0aW9ucwogQUNfQ0hFQ0tfRlVOQ1MoZnNlZWs2NCBmc2Vla28gZnN0YXR2ZnMgZnRlbGw2NCBmdGVsbG8gc3RhdHZmcykKIAotQUNfUkVQTEFDRV9GVU5DUyhkdXAyIGdldGN3ZCBzdHJkdXApCitBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgc3RyZHVwKQogQUNfQ0hFQ0tfRlVOQ1MoZ2V0cGdycCwgCiAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbZ2V0cGdycCgwKTtdXSldLAogICAgIFtBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKV0sCkBAIC0zOTgzLDYgKzQwODQsMTEgQEAKIExEVkVSU0lPTj0nJChWRVJTSU9OKSQoQUJJRkxBR1MpJwogQUNfTVNHX1JFU1VMVCgkTERWRVJTSU9OKQogCitkbmwgZGVmaW5lIExJQlBMIGFmdGVyIEFCSUZMQUdTIGFuZCBMRFZFUlNJT04gaXMgZGVmaW5lZC4KK0FDX1NVQlNUKFBZX0VOQUJMRV9TSEFSRUQpCitMSUJQTD0iJHtwcmVmaXh9L2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCitBQ19TVUJTVChMSUJQTCkKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQpCkBAIC00NjYxLDggKzQ3NjcsMjMgQEAKICAgICBlc2FjCiBmaQogCisjIGVuc3VyZXBpcCBvcHRpb24KK0FDX01TR19DSEVDS0lORyhmb3IgZW5zdXJlcGlwKQorQUNfQVJHX1dJVEgoZW5zdXJlcGlwLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZW5zdXJlcGlwPUA8OkA9dXBncmFkZUA6PkBdLAorICAgICAgICBbImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcF0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9lbnN1cmVwaXA9dXBncmFkZV0pCitBU19DQVNFKCR3aXRoX2Vuc3VyZXBpcCwKKyAgICBbeWVzfHVwZ3JhZGVdLFtFTlNVUkVQSVA9dXBncmFkZV0sCisgICAgW2luc3RhbGxdLFtFTlNVUkVQSVA9aW5zdGFsbF0sCisgICAgW25vXSxbRU5TVVJFUElQPW5vXSwKKyAgICBbQUNfTVNHX0VSUk9SKFstLXdpdGgtZW5zdXJlcGlwPXVwZ3JhZGV8aW5zdGFsbHxub10pXSkKK0FDX01TR19SRVNVTFQoJEVOU1VSRVBJUCkKK0FDX1NVQlNUKEVOU1VSRVBJUCkKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCkKIEFDX0NPTkZJR19GSUxFUyhbTW9kdWxlcy9sZF9zb19haXhdLCBbY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXhdKQogQUNfT1VUUFVUCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDAwMjAzMDAuLjI5ZTFiZmEgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNDksNiArNDksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BTEFSTQogCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkICovCisjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQUxMT0NBX0gKIApAQCAtNjQsOSArNjcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BVEFOSAogCi0vKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCi0jdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC0xOTYsOSArMTk2LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRFVQMgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRFVQMworCiAvKiBEZWZpbmVkIHdoZW4gYW55IGR5bmFtaWMgbW9kdWxlIGxvYWRpbmcgaXMgZW5hYmxlZC4gKi8KICN1bmRlZiBIQVZFX0RZTkFNSUNfTE9BRElORwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VORElBTl9ICisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuICovCiAjdW5kZWYgSEFWRV9FUE9MTAogCkBAIC0zMjAsOSArMzI2LDYgQEAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRBRERSSU5GTwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGN3ZCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9HRVRDV0QKLQogLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQoKSwgYW5kIGZ1bmxvY2tmaWxlKCkgKi8KICN1bmRlZiBIQVZFX0dFVENfVU5MT0NLRUQKIApAQCAtNDExLDYgKzQxNCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFNUUkVSUk9SCiAKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLworI3VuZGVmIEhBVkVfSFRPTEU2NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0hZUE9UCiAKQEAgLTUwNCw2ICs1MTAsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaW5rYXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTElOS0FUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX0NBTl9ICiAKQEAgLTYyNyw2ICs2MzYsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QUkVBRAogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCisjdW5kZWYgSEFWRV9QUkxJTUlUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BST0NFU1NfSAogCkBAIC05MjQsNiArOTM2LDkgQEAKICAgICovCiAjdW5kZWYgSEFWRV9TWVNfRElSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZW5kaWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0VORElBTl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2Vwb2xsLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX0VQT0xMX0gKIApAQCAtMTEyMSw2ICsxMTM2LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2NzeGZybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9XQ1NYRlJNCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd21lbWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9XTUVNQ01QCisKIC8qIERlZmluZSBpZiB0enNldCgpIGFjdHVhbGx5IHN3aXRjaGVzIHRoZSBsb2NhbCB0aW1lem9uZSBpbiBhIG1lYW5pbmdmdWwgd2F5LgogICAgKi8KICN1bmRlZiBIQVZFX1dPUktJTkdfVFpTRVQKQEAgLTExODcsNiArMTIwNSwxMCBAQAogLyogRGVmaW5lZCBpZiBQeXRob24gaXMgYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeS4gKi8KICN1bmRlZiBQeV9FTkFCTEVfU0hBUkVECiAKKy8qIERlZmluZSBoYXNoIGFsZ29yaXRobSBmb3Igc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldy4gU2lwSGFzaDI0OiAxLCBGTlY6IDIsCisgICBleHRlcm5hbGx5IGRlZmluZWQ6IDAgKi8KKyN1bmRlZiBQeV9IQVNIX0FMR09SSVRITQorCiAvKiBhc3N1bWUgQzg5IHNlbWFudGljcyB0aGF0IFJFVFNJR1RZUEUgaXMgYWx3YXlzIHZvaWQgKi8KICN1bmRlZiBSRVRTSUdUWVBFCiAKZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKaW5kZXggOTA2NDAxNC4uZDdmNTJhZiAxMDA2NDQKLS0tIGEvc2V0dXAucHkKKysrIGIvc2V0dXAucHkKQEAgLTEsNyArMSw3IEBACiAjIEF1dG9kZXRlY3Rpbmcgc2V0dXAucHkgc2NyaXB0IGZvciBidWlsZGluZyB0aGUgUHl0aG9uIGV4dGVuc2lvbnMKICMKIAotaW1wb3J0IHN5cywgb3MsIGltcCwgcmUsIG9wdHBhcnNlCitpbXBvcnQgc3lzLCBvcywgaW1wb3J0bGliLm1hY2hpbmVyeSwgcmUsIG9wdHBhcnNlCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIGltcG9ydCBzeXNjb25maWcKIApAQCAtMjU5LDggKzI1OSw5IEBACiAKICAgICAgICAgaWYgbWlzc2luZzoKICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQsIGJ1dCB0aGUgbmVjZXNzYXJ5IGJpdHMgdG8gYnVpbGQgIgotICAgICAgICAgICAgICAgICAgICJ0aGVzZSBtb2R1bGVzIHdlcmUgbm90IGZvdW5kOiIpCisgICAgICAgICAgICBwcmludCgiUHl0aG9uIGJ1aWxkIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseSEiKQorICAgICAgICAgICAgcHJpbnQoIlRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCB0aGVzZSBvcHRpb25hbCBtb2R1bGVzIHdlcmUgbm90ICIKKyAgICAgICAgICAgICAgICAgICJmb3VuZDoiKQogICAgICAgICAgICAgcHJpbnRfdGhyZWVfY29sdW1uKG1pc3NpbmcpCiAgICAgICAgICAgICBwcmludCgiVG8gZmluZCB0aGUgbmVjZXNzYXJ5IGJpdHMsIGxvb2sgaW4gc2V0dXAucHkgaW4iCiAgICAgICAgICAgICAgICAgICAiIGRldGVjdF9tb2R1bGVzKCkgZm9yIHRoZSBtb2R1bGUncyBuYW1lLiIpCkBAIC0zMjUsOCArMzI2LDkgQEAKICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dC5uYW1lLCBleHRfZmlsZW5hbWUpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoZXh0Lm5hbWUsIGV4dF9maWxlbmFtZSkKKyAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZSgpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmZhaWxlZC5hcHBlbmQoZXh0Lm5hbWUpCiAgICAgICAgICAgICBzZWxmLmFubm91bmNlKCcqKiogV0FSTklORzogcmVuYW1pbmcgIiVzIiBzaW5jZSBpbXBvcnRpbmcgaXQnCkBAIC01ODgsMTAgKzU5MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9Wyd0ZXN0Y2FwaV9sb25nLmgnXSkgKQogICAgICAgICAjIFB5dGhvbiBQRVAtMzExOCAoYnVmZmVyIHByb3RvY29sKSB0ZXN0IG1vZHVsZQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdGJ1ZmZlcicsIFsnX3Rlc3RidWZmZXIuYyddKSApCisgICAgICAgICMgVGVzdCBsb2FkaW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgY29tcGlsZWQgZmlsZSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE2NDIxKQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfdGVzdGltcG9ydG11bHRpcGxlJywgWydfdGVzdGltcG9ydG11bHRpcGxlLmMnXSkgKQogICAgICAgICAjIHByb2ZpbGVyIChfbHNwcm9mIGlzIGZvciBjUHJvZmlsZS5weSkKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX2xzcHJvZicsIFsnX2xzcHJvZi5jJywgJ3JvdGF0aW5ndHJlZS5jJ10pICkKICAgICAgICAgIyBzdGF0aWMgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigndW5pY29kZWRhdGEnLCBbJ3VuaWNvZGVkYXRhLmMnXSkgKQorICAgICAgICAjIF9vcGNvZGUgbW9kdWxlCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19vcGNvZGUnLCBbJ19vcGNvZGUuYyddKSApCiAKICAgICAgICAgIyBNb2R1bGVzIHdpdGggc29tZSBVTklYIGRlcGVuZGVuY2llcyAtLSBvbiBieSBkZWZhdWx0OgogICAgICAgICAjIChJZiB5b3UgaGF2ZSBhIHJlYWxseSBiYWNrd2FyZCBVTklYLCBzZWxlY3QgYW5kIHNvY2tldCBtYXkgbm90IGJlCkBAIC03ODQsMTAgKzc5MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbmNmaWxlOgogICAgICAgICAgICAgICAgICAgICAgICAgbSA9IG9wZW5zc2xfdmVyX3JlLm1hdGNoKGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gZXZhbChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gaW50KG0uZ3JvdXAoMSksIDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQoIklPRXJyb3Igd2hpbGUgcmVhZGluZyBvcGVuc3Nodi5oOiIsIG1zZykKLSAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgI3ByaW50KCdvcGVuc3NsX3ZlciA9IDB4JTA4eCcgJSBvcGVuc3NsX3ZlcikKICAgICAgICAgbWluX29wZW5zc2xfdmVyID0gMHgwMDkwNzAwMApAQCAtODIxLDYgKzgyNywxNSBAQAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhMScsIFsnc2hhMW1vZHVsZS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcz1bJ2hhc2hsaWIuaCddKSApCiAKKyAgICAgICAgIyBTSEEtMyAoS2VjY2FrKSBtb2R1bGUKKyAgICAgICAgc2hhM19kZXBlbmRzID0gWydoYXNobGliLmgnXQorICAgICAgICBrZWNjYWsgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIHNyY2RpciwgJ01vZHVsZXMnLCAnX3NoYTMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tlY2NhaycpCisgICAgICAgIGZvciBwYXR0ZXJuIGluICgnKi5jJywgJyouaCcsICcqLm1hY3JvcycpOgorICAgICAgICAgICAgc2hhM19kZXBlbmRzLmV4dGVuZChnbG9iKG9zLnBhdGguam9pbihrZWNjYWssIHBhdHRlcm4pKSkKKyAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCJfc2hhMyIsIFsiX3NoYTMvc2hhM21vZHVsZS5jIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPXNoYTNfZGVwZW5kcykpCisKICAgICAgICAgIyBNb2R1bGVzIHRoYXQgcHJvdmlkZSBwZXJzaXN0ZW50IGRpY3Rpb25hcnktbGlrZSBzZW1hbnRpY3MuICBZb3Ugd2lsbAogICAgICAgICAjIHByb2JhYmx5IHdhbnQgdG8gYXJyYW5nZSBmb3IgYXQgbGVhc3Qgb25lIG9mIHRoZW0gdG8gYmUgYXZhaWxhYmxlIG9uCiAgICAgICAgICMgeW91ciBtYWNoaW5lLCB0aG91Z2ggbm9uZSBhcmUgZGVmaW5lZCBieSBkZWZhdWx0IGJlY2F1c2Ugb2YgbGlicmFyeQpAQCAtMTUwOSwxMCArMTUyNCw2IEBACiAKICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19nZXN0YWx0JywgWydfZ2VzdGFsdC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bJy1mcmFtZXdvcmsnLCAnQ2FyYm9uJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19zY3Byb3h5JywgWydfc2Nwcm94eS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZyYW1ld29yaycsICdTeXN0ZW1Db25maWd1cmF0aW9uJywKQEAgLTIxNTYsNyArMjE2Nyw3IEBACiBwcm9ncmFtbWFibGUgaW50ZXJmYWNlLgogCiBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIGlzIHBvcnRhYmxlOiBpdCBydW5zIG9uIG1hbnkgYnJhbmRzIG9mIFVOSVgsCi1vbiBXaW5kb3dzLCBET1MsIE9TLzIsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKK29uIFdpbmRvd3MsIERPUywgTWFjLCBBbWlnYS4uLiBJZiB5b3VyIGZhdm9yaXRlIHN5c3RlbSBpc24ndAogbGlzdGVkIGhlcmUsIGl0IG1heSBzdGlsbCBiZSBzdXBwb3J0ZWQsIGlmIHRoZXJlJ3MgYSBDIGNvbXBpbGVyIGZvcgogaXQuIEFzayBhcm91bmQgb24gY29tcC5sYW5nLnB5dGhvbiAtLSBvciBqdXN0IHRyeSBjb21waWxpbmcgUHl0aG9uCiB5b3Vyc2VsZi4K